From 8df14408b88fcf99206738ef2b1cf4ff0e9e6a88 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 2 Jul 2020 11:47:46 +0200 Subject: [PATCH 0001/1047] fgpa changes from official repo. Had to split felica into its own image. Leading to three bit files created. --- fpga/Makefile | 11 ++- fpga/fpga_hf.v | 172 ++++++++++++++++++++------------------------ fpga/fpga_lf.v | 4 +- fpga/hi_flite.v | 18 +++-- fpga/hi_iso14443a.v | 57 +++++++-------- fpga/hi_simulate.v | 119 +++++++++++++++++------------- fpga/hi_sniffer.v | 13 +--- 7 files changed, 191 insertions(+), 203 deletions(-) diff --git a/fpga/Makefile b/fpga/Makefile index 0d2bb1625..9b1f7a5ca 100644 --- a/fpga/Makefile +++ b/fpga/Makefile @@ -5,17 +5,22 @@ RMDIR = rm -rf # rmdir only if dir is empty, tolerate failure RMDIR_SOFT = -rmdir # -all: fpga_lf.bit fpga_hf.bit +all: fpga_lf.bit fpga_hf.bit fpga_felica.bit clean: - $(Q)$(RM) *.bgn *.drc *.ncd *.ngd *_par.xrpt *-placed.* *-placed_pad.* *_usage.xml xst_hf.srp xst_lf.srp + $(Q)$(RM) *.bgn *.drc *.ncd *.ngd *_par.xrpt *-placed.* *-placed_pad.* *_usage.xml xst_hf.srp xst_lf.srp xst_felica.srp $(Q)$(RM) *.map *.ngc *.xrpt *.pcf *.rbt *.bld *.mrp *.ngm *.unroutes *_summary.xml netlist.lst $(Q)$(RMDIR) *_auto_* xst -fpga_hf.ngc: fpga_hf.v fpga.ucf xst_hf.scr util.v hi_simulate.v hi_read_tx.v hi_read_rx_xcorr.v hi_iso14443a.v hi_sniffer.v hi_flite.v hi_get_trace.v +#fpga_hf.ngc: fpga_hf.v fpga.ucf xst_hf.scr util.v hi_simulate.v hi_reader.v hi_iso14443a.v hi_sniffer.v hi_flite.v hi_get_trace.v +fpga_hf.ngc: fpga_hf.v fpga.ucf xst_hf.scr util.v hi_simulate.v hi_reader.v hi_iso14443a.v hi_sniffer.v hi_get_trace.v $(Q)$(RM) $@ $(info [-] XST $@) $(Q)$(XILINX_TOOLS_PREFIX)xst -ifn xst_hf.scr +fpga_felica.ngc: fpga_felica.v fpga.ucf xst_felica.scr util.v hi_simulate.v hi_reader.v hi_sniffer.v hi_flite.v hi_get_trace.v + $(Q)$(RM) $@ + $(info [-] XST $@) + $(Q)$(XILINX_TOOLS_PREFIX)xst -ifn xst_felica.scr fpga_lf.ngc: fpga_lf.v fpga.ucf xst_lf.scr util.v clk_divider.v lo_edge_detect.v lo_read.v lo_passthru.v lp20khz_1MSa_iir_filter.v min_max_tracker.v lf_edge_detect.v $(Q)$(RM) $@ diff --git a/fpga/fpga_hf.v b/fpga/fpga_hf.v index d23b64a08..5448219fc 100644 --- a/fpga/fpga_hf.v +++ b/fpga/fpga_hf.v @@ -23,23 +23,28 @@ `define FPGA_CMD_TRACE_ENABLE 2 // Major modes: -`define FPGA_MAJOR_MODE_HF_READER_TX 0 -`define FPGA_MAJOR_MODE_HF_READER_RX_XCORR 1 -`define FPGA_MAJOR_MODE_HF_SIMULATOR 2 -`define FPGA_MAJOR_MODE_HF_ISO14443A 3 -`define FPGA_MAJOR_MODE_HF_SNOOP 4 -`define FPGA_MAJOR_MODE_HF_ISO18092 5 -`define FPGA_MAJOR_MODE_HF_GET_TRACE 6 +`define FPGA_MAJOR_MODE_HF_READER 0 +`define FPGA_MAJOR_MODE_HF_SIMULATOR 1 +`define FPGA_MAJOR_MODE_HF_ISO14443A 2 +`define FPGA_MAJOR_MODE_HF_SNOOP 3 +`define FPGA_MAJOR_MODE_HF_ISO18092 4 +`define FPGA_MAJOR_MODE_HF_GET_TRACE 5 `define FPGA_MAJOR_MODE_OFF 7 // Options for the generic HF reader -// Options for the HF reader, tx to tag -`define FPGA_HF_READER_TX_SHALLOW_MOD 1 +`define FPGA_HF_READER_MODE_RECEIVE_IQ 0 +`define FPGA_HF_READER_MODE_RECEIVE_AMPLITUDE 1 +`define FPGA_HF_READER_MODE_RECEIVE_PHASE 2 +`define FPGA_HF_READER_MODE_SEND_FULL_MOD 3 +`define FPGA_HF_READER_MODE_SEND_SHALLOW_MOD 4 +`define FPGA_HF_READER_MODE_SNIFF_IQ 5 +`define FPGA_HF_READER_MODE_SNIFF_AMPLITUDE 6 +`define FPGA_HF_READER_MODE_SNIFF_PHASE 7 +`define FPGA_HF_READER_MODE_SEND_JAM 8 -// Options for the HF reader, correlating against rx from tag -`define FPGA_HF_READER_RX_XCORR_848_KHZ 1 -`define FPGA_HF_READER_RX_XCORR_SNOOP 2 -`define FPGA_HF_READER_RX_XCORR_QUARTER 4 +`define FPGA_HF_READER_SUBCARRIER_848_KHZ 0 +`define FPGA_HF_READER_SUBCARRIER_424_KHZ 1 +`define FPGA_HF_READER_SUBCARRIER_212_KHZ 2 // Options for the HF simulated tag, how to modulate `define FPGA_HF_SIMULATOR_NO_MODULATION 0 @@ -60,13 +65,12 @@ `define FPGA_HF_ISO18092_FLAG_424K 2 // 0010 should enable 414k mode (untested). No autodetect `define FPGA_HF_ISO18092_FLAG_READER 4 // 0100 enables antenna power, to act as a reader instead of tag -`include "hi_read_tx.v" -`include "hi_read_rx_xcorr.v" +`include "hi_reader.v" `include "hi_simulate.v" `include "hi_iso14443a.v" `include "hi_sniffer.v" `include "util.v" -`include "hi_flite.v" +// `include "hi_flite.v" `include "hi_get_trace.v" module fpga_hf( @@ -105,14 +109,14 @@ bit | 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 -----+------------------------------------------- cmd | x x x x major| x x x -opt | x x +opt | x x x divi | x x x x x x x x thres| x x x x x x x x -----+------------------------------------------- */ reg [15:0] shift_reg; -reg [7:0] conf_word; +reg [8:0] conf_word; reg trace_enable; // We switch modes between transmitting to the 13.56 MHz tag and receiving @@ -121,7 +125,7 @@ reg trace_enable; always @(posedge ncs) begin case(shift_reg[15:12]) - `FPGA_CMD_SET_CONFREG: conf_word <= shift_reg[7:0]; + `FPGA_CMD_SET_CONFREG: conf_word <= shift_reg[8:0]; `FPGA_CMD_TRACE_ENABLE: trace_enable <= shift_reg[0]; endcase end @@ -135,25 +139,12 @@ begin end end -wire [2:0] major_mode = conf_word[7:5]; +// select module (outputs) based on major mode +wire [2:0] major_mode = conf_word[8:6]; -// For the high-frequency transmit configuration: modulation depth, either -// 100% (just quite driving antenna, steady LOW), or shallower (tri-state -// some fraction of the buffers) -wire hi_read_tx_shallow_modulation = conf_word[0]; - -// For the high-frequency receive correlator: frequency against which to -// correlate. -wire hi_read_rx_xcorr_848 = conf_word[0]; - -// and whether to drive the coil (reader) or just short it (snooper) -wire hi_read_rx_xcorr_snoop = conf_word[1]; - -// divide subcarrier frequency by 4 -wire hi_read_rx_xcorr_quarter = conf_word[2]; - -// For the high-frequency simulated tag: what kind of modulation to use. -wire [2:0] hi_simulate_mod_type = conf_word[2:0]; +// configuring the HF reader +wire [1:0] subcarrier_frequency = conf_word[5:4]; +wire [3:0] minor_mode = conf_word[3:0]; //----------------------------------------------------------------------------- // And then we instantiate the modules corresponding to each of the FPGA's @@ -161,95 +152,86 @@ wire [2:0] hi_simulate_mod_type = conf_word[2:0]; // the output pins. //----------------------------------------------------------------------------- -hi_read_tx ht( - pck0, ck_1356meg, ck_1356megb, - ht_pwr_lo, ht_pwr_hi, ht_pwr_oe1, ht_pwr_oe2, ht_pwr_oe3, ht_pwr_oe4, - adc_d, ht_adc_clk, - ht_ssp_frame, ht_ssp_din, ssp_dout, ht_ssp_clk, - cross_hi, cross_lo, - ht_dbg, - hi_read_tx_shallow_modulation -); - -hi_read_rx_xcorr hrxc( - pck0, ck_1356meg, ck_1356megb, - hrxc_pwr_lo, hrxc_pwr_hi, hrxc_pwr_oe1, hrxc_pwr_oe2, hrxc_pwr_oe3, hrxc_pwr_oe4, - adc_d, hrxc_adc_clk, - hrxc_ssp_frame, hrxc_ssp_din, ssp_dout, hrxc_ssp_clk, - cross_hi, cross_lo, - hrxc_dbg, - hi_read_rx_xcorr_848, hi_read_rx_xcorr_snoop, hi_read_rx_xcorr_quarter +// 000 - HF reader +hi_reader hr( + ck_1356megb, + hr_pwr_lo, hr_pwr_hi, hr_pwr_oe1, hr_pwr_oe2, hr_pwr_oe3, hr_pwr_oe4, + adc_d, hr_adc_clk, + hr_ssp_frame, hr_ssp_din, ssp_dout, hr_ssp_clk, + hr_dbg, + subcarrier_frequency, minor_mode ); +// 001 - HF simulated tag hi_simulate hs( - pck0, ck_1356meg, ck_1356megb, + ck_1356meg, hs_pwr_lo, hs_pwr_hi, hs_pwr_oe1, hs_pwr_oe2, hs_pwr_oe3, hs_pwr_oe4, adc_d, hs_adc_clk, hs_ssp_frame, hs_ssp_din, ssp_dout, hs_ssp_clk, - cross_hi, cross_lo, hs_dbg, - hi_simulate_mod_type + minor_mode ); +// 010 - HF ISO14443-A hi_iso14443a hisn( - pck0, ck_1356meg, ck_1356megb, + ck_1356meg, hisn_pwr_lo, hisn_pwr_hi, hisn_pwr_oe1, hisn_pwr_oe2, hisn_pwr_oe3, hisn_pwr_oe4, adc_d, hisn_adc_clk, hisn_ssp_frame, hisn_ssp_din, ssp_dout, hisn_ssp_clk, - cross_hi, cross_lo, hisn_dbg, - hi_simulate_mod_type + minor_mode ); +// 011 - HF sniff hi_sniffer he( - pck0, ck_1356meg, ck_1356megb, - he_pwr_lo, he_pwr_hi, he_pwr_oe1, he_pwr_oe2, he_pwr_oe3, he_pwr_oe4, - adc_d, he_adc_clk, - he_ssp_frame, he_ssp_din, ssp_dout, he_ssp_clk, - cross_hi, cross_lo, - he_dbg, - hi_read_rx_xcorr_848, hi_read_rx_xcorr_snoop, hi_read_rx_xcorr_quarter + ck_1356megb, + he_pwr_lo, he_pwr_hi, he_pwr_oe1, he_pwr_oe2, he_pwr_oe3, he_pwr_oe4, + adc_d, he_adc_clk, + he_ssp_frame, he_ssp_din, he_ssp_clk ); +// 100 - HF ISO18092 FeliCa +/* hi_flite hfl( - pck0, ck_1356meg, ck_1356megb, - hfl_pwr_lo, hfl_pwr_hi, hfl_pwr_oe1, hfl_pwr_oe2, hfl_pwr_oe3, hfl_pwr_oe4, - adc_d, hfl_adc_clk, - hfl_ssp_frame, hfl_ssp_din, ssp_dout, hfl_ssp_clk, - cross_hi, cross_lo, - hfl_dbg, - hi_simulate_mod_type + ck_1356megb, + hfl_pwr_lo, hfl_pwr_hi, hfl_pwr_oe1, hfl_pwr_oe2, hfl_pwr_oe3, hfl_pwr_oe4, + adc_d, hfl_adc_clk, + hfl_ssp_frame, hfl_ssp_din, ssp_dout, hfl_ssp_clk, + hfl_dbg, + minor_mode ); +*/ +// 101 - HF get trace hi_get_trace gt( ck_1356megb, adc_d, trace_enable, major_mode, gt_ssp_frame, gt_ssp_din, gt_ssp_clk ); - // Major modes: +// 000 -- HF reader; subcarrier frequency and modulation depth selectable +// 001 -- HF simulated tag +// 010 -- HF ISO14443-A +// 011 -- HF sniff +// 100 -- HF ISO18092 FeliCa +// 101 -- HF get trace +// 110 -- unused +// 111 -- FPGA_MAJOR_MODE_OFF -// 000 -- HF reader, transmitting to tag; modulation depth selectable -// 001 -- HF reader, receiving from tag, correlating as it goes; frequency selectable -// 010 -- HF simulated tag -// 011 -- HF ISO14443-A -// 100 -- HF Snoop -// 101 -- Felica modem, reusing HF reader -// 110 -- HF get trace -// 111 -- everything off +// 000 001 010 011 100 101 110 111 -mux8 mux_ssp_clk (major_mode, ssp_clk, ht_ssp_clk, hrxc_ssp_clk, hs_ssp_clk, hisn_ssp_clk, he_ssp_clk, hfl_ssp_clk, gt_ssp_clk, 1'b0); -mux8 mux_ssp_din (major_mode, ssp_din, ht_ssp_din, hrxc_ssp_din, hs_ssp_din, hisn_ssp_din, he_ssp_din, hfl_ssp_din, gt_ssp_din, 1'b0); -mux8 mux_ssp_frame (major_mode, ssp_frame, ht_ssp_frame, hrxc_ssp_frame, hs_ssp_frame, hisn_ssp_frame, he_ssp_frame, hfl_ssp_frame, gt_ssp_frame, 1'b0); -mux8 mux_pwr_oe1 (major_mode, pwr_oe1, ht_pwr_oe1, hrxc_pwr_oe1, hs_pwr_oe1, hisn_pwr_oe1, he_pwr_oe1, hfl_pwr_oe1, 1'b0, 1'b0); -mux8 mux_pwr_oe2 (major_mode, pwr_oe2, ht_pwr_oe2, hrxc_pwr_oe2, hs_pwr_oe2, hisn_pwr_oe2, he_pwr_oe2, hfl_pwr_oe2, 1'b0, 1'b0); -mux8 mux_pwr_oe3 (major_mode, pwr_oe3, ht_pwr_oe3, hrxc_pwr_oe3, hs_pwr_oe3, hisn_pwr_oe3, he_pwr_oe3, hfl_pwr_oe3, 1'b0, 1'b0); -mux8 mux_pwr_oe4 (major_mode, pwr_oe4, ht_pwr_oe4, hrxc_pwr_oe4, hs_pwr_oe4, hisn_pwr_oe4, he_pwr_oe4, hfl_pwr_oe4, 1'b0, 1'b0); -mux8 mux_pwr_lo (major_mode, pwr_lo, ht_pwr_lo, hrxc_pwr_lo, hs_pwr_lo, hisn_pwr_lo, he_pwr_lo, hfl_pwr_lo, 1'b0, 1'b0); -mux8 mux_pwr_hi (major_mode, pwr_hi, ht_pwr_hi, hrxc_pwr_hi, hs_pwr_hi, hisn_pwr_hi, he_pwr_hi, hfl_pwr_hi, 1'b0, 1'b0); -mux8 mux_adc_clk (major_mode, adc_clk, ht_adc_clk, hrxc_adc_clk, hs_adc_clk, hisn_adc_clk, he_adc_clk, hfl_adc_clk, 1'b0, 1'b0); -mux8 mux_dbg (major_mode, dbg, ht_dbg, hrxc_dbg, hs_dbg, hisn_dbg, he_dbg, hfl_dbg, 1'b0, 1'b0); +mux8 mux_ssp_clk (major_mode, ssp_clk, hr_ssp_clk, hs_ssp_clk, hisn_ssp_clk, he_ssp_clk, hfl_ssp_clk, gt_ssp_clk, 1'b0, 1'b0); +mux8 mux_ssp_din (major_mode, ssp_din, hr_ssp_din, hs_ssp_din, hisn_ssp_din, he_ssp_din, hfl_ssp_din, gt_ssp_din, 1'b0, 1'b0); +mux8 mux_ssp_frame (major_mode, ssp_frame, hr_ssp_frame, hs_ssp_frame, hisn_ssp_frame, he_ssp_frame, hfl_ssp_frame, gt_ssp_frame, 1'b0, 1'b0); +mux8 mux_pwr_oe1 (major_mode, pwr_oe1, hr_pwr_oe1, hs_pwr_oe1, hisn_pwr_oe1, he_pwr_oe1, hfl_pwr_oe1, 1'b0, 1'b0, 1'b0); +mux8 mux_pwr_oe2 (major_mode, pwr_oe2, hr_pwr_oe2, hs_pwr_oe2, hisn_pwr_oe2, he_pwr_oe2, hfl_pwr_oe2, 1'b0, 1'b0, 1'b0); +mux8 mux_pwr_oe3 (major_mode, pwr_oe3, hr_pwr_oe3, hs_pwr_oe3, hisn_pwr_oe3, he_pwr_oe3, hfl_pwr_oe3, 1'b0, 1'b0, 1'b0); +mux8 mux_pwr_oe4 (major_mode, pwr_oe4, hr_pwr_oe4, hs_pwr_oe4, hisn_pwr_oe4, he_pwr_oe4, hfl_pwr_oe4, 1'b0, 1'b0, 1'b0); +mux8 mux_pwr_lo (major_mode, pwr_lo, hr_pwr_lo, hs_pwr_lo, hisn_pwr_lo, he_pwr_lo, hfl_pwr_lo, 1'b0, 1'b0, 1'b0); +mux8 mux_pwr_hi (major_mode, pwr_hi, hr_pwr_hi, hs_pwr_hi, hisn_pwr_hi, he_pwr_hi, hfl_pwr_hi, 1'b0, 1'b0, 1'b0); +mux8 mux_adc_clk (major_mode, adc_clk, hr_adc_clk, hs_adc_clk, hisn_adc_clk, he_adc_clk, hfl_adc_clk, 1'b0, 1'b0, 1'b0); +mux8 mux_dbg (major_mode, dbg, hr_dbg, hs_dbg, hisn_dbg, he_dbg, hfl_dbg, 1'b0, 1'b0, 1'b0); // In all modes, let the ADC's outputs be enabled. assign adc_noe = 1'b0; diff --git a/fpga/fpga_lf.v b/fpga/fpga_lf.v index dd3fe3b0b..aa79da234 100644 --- a/fpga/fpga_lf.v +++ b/fpga/fpga_lf.v @@ -122,7 +122,7 @@ reg [7:0] divisor; reg [7:0] lf_ed_threshold; reg [11:0] conf_word; -wire [2:0] major_mode = conf_word[7:5]; +wire [2:0] major_mode = conf_word[8:6]; wire lf_field = conf_word[0]; wire lf_ed_toggle_mode = conf_word[1]; @@ -135,7 +135,7 @@ begin begin // 12 bit data conf_word <= shift_reg[11:0]; - if (shift_reg[7:5] == `FPGA_MAJOR_MODE_LF_EDGE_DETECT) + if (shift_reg[8:6] == `FPGA_MAJOR_MODE_LF_EDGE_DETECT) begin lf_ed_threshold <= 127; // default threshold end diff --git a/fpga/hi_flite.v b/fpga/hi_flite.v index 97d0154ea..6cb87825e 100644 --- a/fpga/hi_flite.v +++ b/fpga/hi_flite.v @@ -14,25 +14,23 @@ */ module hi_flite( - pck0, ck_1356meg, ck_1356megb, + ck_1356meg, pwr_lo, pwr_hi, pwr_oe1, pwr_oe2, pwr_oe3, pwr_oe4, adc_d, adc_clk, ssp_frame, ssp_din, ssp_dout, ssp_clk, - cross_hi, cross_lo, dbg, mod_type - ); - input pck0, ck_1356meg, ck_1356megb; + input ck_1356meg; output pwr_lo, pwr_hi, pwr_oe1, pwr_oe2, pwr_oe3, pwr_oe4; input [7:0] adc_d; output adc_clk; input ssp_dout; output ssp_frame, ssp_din, ssp_clk; - input cross_hi, cross_lo; output dbg; - input [2:0] mod_type; -assign dbg=0; + input [3:0] mod_type; + +assign dbg = 0; wire power = mod_type[2]; wire speed = mod_type[1]; @@ -40,7 +38,7 @@ wire disabl = mod_type[0]; // Most off, oe4 for modulation; // Trying reader emulation (would presumably just require switching power on, but I am not sure) -assign pwr_lo = 1'b0; +assign pwr_lo = 1'b0; // 512x64/fc -wait before ts0, 32768 ticks // tslot: 256*64/fc @@ -347,11 +345,11 @@ reg pwr_oe4; wire mod = ((fccount >= bithalf) ^ dlay) & (~disabl); -always @(ck_1356megb or ssp_dout or power or disabl or mod) +always @(ck_1356meg or ssp_dout or power or disabl or mod) begin if (power) begin - pwr_hi <= ck_1356megb; + pwr_hi <= ck_1356meg; pwr_oe1 <= 1'b0;//mod; pwr_oe2 <= 1'b0;//mod; pwr_oe3 <= 1'b0;//mod; diff --git a/fpga/hi_iso14443a.v b/fpga/hi_iso14443a.v index 3bb550d73..6b09847ec 100644 --- a/fpga/hi_iso14443a.v +++ b/fpga/hi_iso14443a.v @@ -3,31 +3,22 @@ // Gerhard de Koning Gans, April 2008 //----------------------------------------------------------------------------- -// constants for the different modes: -`define SNIFFER 3'b000 -`define TAGSIM_LISTEN 3'b001 -`define TAGSIM_MOD 3'b010 -`define READER_LISTEN 3'b011 -`define READER_MOD 3'b100 - module hi_iso14443a( - pck0, ck_1356meg, ck_1356megb, + ck_1356meg, pwr_lo, pwr_hi, pwr_oe1, pwr_oe2, pwr_oe3, pwr_oe4, adc_d, adc_clk, ssp_frame, ssp_din, ssp_dout, ssp_clk, - cross_hi, cross_lo, dbg, mod_type ); - input pck0, ck_1356meg, ck_1356megb; + input ck_1356meg; output pwr_lo, pwr_hi, pwr_oe1, pwr_oe2, pwr_oe3, pwr_oe4; input [7:0] adc_d; output adc_clk; input ssp_dout; output ssp_frame, ssp_din, ssp_clk; - input cross_hi, cross_lo; output dbg; - input [2:0] mod_type; + input [3:0] mod_type; wire adc_clk = ck_1356meg; @@ -151,7 +142,7 @@ begin end // adjust internal timer counter if necessary: - if (negedge_cnt[3:0] == 4'd13 && (mod_type == `SNIFFER || mod_type == `TAGSIM_LISTEN) && deep_modulation) + if (negedge_cnt[3:0] == 4'd13 && (mod_type == `FPGA_HF_ISO14443A_SNIFFER || mod_type == `FPGA_HF_ISO14443A_TAGSIM_LISTEN) && deep_modulation) begin if (reader_falling_edge_time == 4'd1) // reader signal changes right after sampling. Better sample earlier next time. begin @@ -185,7 +176,7 @@ reg [3:0] mod_detect_reset_time; always @(negedge adc_clk) begin - if (mod_type == `READER_LISTEN) + if (mod_type == `FPGA_HF_ISO14443A_READER_LISTEN) // (our) reader signal changes at negedge_cnt[3:0]=9, tag response expected to start n*16+4 ticks later, further delayed by // 3 ticks ADC conversion. The maximum filter output (edge detected) will be detected after subcarrier zero crossing (+7 ticks). // To allow some timing variances, we want to have the maximum filter outputs well within the detection window, i.e. @@ -195,7 +186,7 @@ begin mod_detect_reset_time <= 4'd4; end else - if (mod_type == `SNIFFER) + if (mod_type == `FPGA_HF_ISO14443A_SNIFFER) begin // detect a rising edge of reader's signal and sync modulation detector to the tag's answer: if (~pre_after_hysteresis && after_hysteresis && deep_modulation) @@ -320,7 +311,7 @@ reg [3:0] sub_carrier_cnt; // response window of 1128 - 774 = 354 ticks. // reset on a pause in listen mode. I.e. the counter starts when the pause is over: -assign fdt_reset = ~after_hysteresis && mod_type == `TAGSIM_LISTEN; +assign fdt_reset = ~after_hysteresis && mod_type == `FPGA_HF_ISO14443A_TAGSIM_LISTEN; always @(negedge adc_clk) begin @@ -363,7 +354,7 @@ reg mod_sig_coil; always @(negedge adc_clk) begin - if (mod_type == `TAGSIM_MOD) // need to take care of proper fdt timing + if (mod_type == `FPGA_HF_ISO14443A_TAGSIM_MOD) // need to take care of proper fdt timing begin if(fdt_counter == `FDT_COUNT) begin @@ -438,7 +429,7 @@ always @(negedge adc_clk) begin if (negedge_cnt[5:0] == 6'd63) // fill the buffer begin - if (mod_type == `SNIFFER) + if (mod_type == `FPGA_HF_ISO14443A_SNIFFER) begin if(deep_modulation) // a reader is sending (or there's no field at all) begin @@ -455,7 +446,7 @@ begin end end - if(negedge_cnt[2:0] == 3'b000 && mod_type == `SNIFFER) // shift at double speed + if(negedge_cnt[2:0] == 3'b000 && mod_type == `FPGA_HF_ISO14443A_SNIFFER) // shift at double speed begin // Don't shift if we just loaded new data, obviously. if(negedge_cnt[5:0] != 6'd0) @@ -464,7 +455,7 @@ begin end end - if(negedge_cnt[3:0] == 4'b0000 && mod_type != `SNIFFER) + if(negedge_cnt[3:0] == 4'b0000 && mod_type != `FPGA_HF_ISO14443A_SNIFFER) begin // Don't shift if we just loaded new data, obviously. if(negedge_cnt[6:0] != 7'd0) @@ -484,8 +475,8 @@ reg ssp_frame; always @(negedge adc_clk) begin - if(mod_type == `SNIFFER) - // SNIFFER mode (ssp_clk = adc_clk / 8, ssp_frame clock = adc_clk / 64)): + if(mod_type == `FPGA_HF_ISO14443A_SNIFFER) + // FPGA_HF_ISO14443A_SNIFFER mode (ssp_clk = adc_clk / 8, ssp_frame clock = adc_clk / 64)): begin if(negedge_cnt[2:0] == 3'd0) ssp_clk <= 1'b1; @@ -505,7 +496,7 @@ begin if(negedge_cnt[3:0] == 4'd8) ssp_clk <= 1'b0; - if(negedge_cnt[6:0] == 7'd7) // ssp_frame rising edge indicates start of frame + if(negedge_cnt[6:0] == 7'd7) // ssp_frame rising edge indicates start of frame, sampled on falling edge of ssp_clk ssp_frame <= 1'b1; if(negedge_cnt[6:0] == 7'd23) ssp_frame <= 1'b0; @@ -525,23 +516,23 @@ begin if(negedge_cnt[3:0] == 4'd0) begin // What do we communicate to the ARM - if(mod_type == `TAGSIM_LISTEN) + if(mod_type == `FPGA_HF_ISO14443A_TAGSIM_LISTEN) sendbit = after_hysteresis; - else if(mod_type == `TAGSIM_MOD) + else if(mod_type == `FPGA_HF_ISO14443A_TAGSIM_MOD) /* if(fdt_counter > 11'd772) sendbit = mod_sig_coil; // huh? else */ sendbit = fdt_indicator; - else if (mod_type == `READER_LISTEN) + else if (mod_type == `FPGA_HF_ISO14443A_READER_LISTEN) sendbit = curbit; else sendbit = 1'b0; end - if(mod_type == `SNIFFER) + if(mod_type == `FPGA_HF_ISO14443A_SNIFFER) // send sampled reader and tag data: bit_to_arm = to_arm[7]; - else if (mod_type == `TAGSIM_MOD && fdt_elapsed && temp_buffer_reset) + else if (mod_type == `FPGA_HF_ISO14443A_TAGSIM_MOD && fdt_elapsed && temp_buffer_reset) // send timing information: bit_to_arm = to_arm[7]; else @@ -554,22 +545,22 @@ end assign ssp_din = bit_to_arm; -// Subcarrier (adc_clk/16, for TAGSIM_MOD only). +// Subcarrier (adc_clk/16, for FPGA_HF_ISO14443A_TAGSIM_MOD only). wire sub_carrier; assign sub_carrier = ~sub_carrier_cnt[3]; -// in READER_MOD: drop carrier for mod_sig_coil==1 (pause); in READER_LISTEN: carrier always on; in other modes: carrier always off -assign pwr_hi = (ck_1356megb & (((mod_type == `READER_MOD) & ~mod_sig_coil) || (mod_type == `READER_LISTEN))); +// in FPGA_HF_ISO14443A_READER_MOD: drop carrier for mod_sig_coil==1 (pause); in FPGA_HF_ISO14443A_READER_LISTEN: carrier always on; in other modes: carrier always off +assign pwr_hi = (ck_1356meg & (((mod_type == `FPGA_HF_ISO14443A_READER_MOD) & ~mod_sig_coil) || (mod_type == `FPGA_HF_ISO14443A_READER_LISTEN))); // Enable HF antenna drivers: assign pwr_oe1 = 1'b0; assign pwr_oe3 = 1'b0; -// TAGSIM_MOD: short circuit antenna with different resistances (modulated by sub_carrier modulated by mod_sig_coil) +// FPGA_HF_ISO14443A_TAGSIM_MOD: short circuit antenna with different resistances (modulated by sub_carrier modulated by mod_sig_coil) // for pwr_oe4 = 1 (tristate): antenna load = 10k || 33 = 32,9 Ohms // for pwr_oe4 = 0 (active): antenna load = 10k || 33 || 33 = 16,5 Ohms -assign pwr_oe4 = mod_sig_coil & sub_carrier & (mod_type == `TAGSIM_MOD); +assign pwr_oe4 = mod_sig_coil & sub_carrier & (mod_type == `FPGA_HF_ISO14443A_TAGSIM_MOD); // This is all LF, so doesn't matter. assign pwr_oe2 = 1'b0; diff --git a/fpga/hi_simulate.v b/fpga/hi_simulate.v index d336a5ddf..737dd4586 100644 --- a/fpga/hi_simulate.v +++ b/fpga/hi_simulate.v @@ -17,82 +17,105 @@ //----------------------------------------------------------------------------- module hi_simulate( - pck0, ck_1356meg, ck_1356megb, + ck_1356meg, pwr_lo, pwr_hi, pwr_oe1, pwr_oe2, pwr_oe3, pwr_oe4, adc_d, adc_clk, ssp_frame, ssp_din, ssp_dout, ssp_clk, - cross_hi, cross_lo, dbg, mod_type ); - input pck0, ck_1356meg, ck_1356megb; + input ck_1356meg; output pwr_lo, pwr_hi, pwr_oe1, pwr_oe2, pwr_oe3, pwr_oe4; input [7:0] adc_d; output adc_clk; input ssp_dout; output ssp_frame, ssp_din, ssp_clk; - input cross_hi, cross_lo; output dbg; - input [2:0] mod_type; + input [3:0] mod_type; // Power amp goes between LOW and tri-state, so pwr_hi (and pwr_lo) can // always be low. -assign pwr_hi = 1'b0; -assign pwr_lo = 1'b0; +assign pwr_hi = 1'b0; // HF antenna connected to GND +assign pwr_lo = 1'b0; // LF antenna connected to GND + +// This one is all LF, so doesn't matter +assign pwr_oe2 = 1'b0; + +assign adc_clk = ck_1356meg; +assign dbg = ssp_frame; // The comparator with hysteresis on the output from the peak detector. reg after_hysteresis; -assign adc_clk = ck_1356meg; +reg [11:0] has_been_low_for; always @(negedge adc_clk) begin - if(& adc_d[7:5]) after_hysteresis = 1'b1; - else if(~(| adc_d[7:5])) after_hysteresis = 1'b0; + if (& adc_d[7:5]) after_hysteresis <= 1'b1; // if (adc_d >= 224) + else if (~(| adc_d[7:5])) after_hysteresis <= 1'b0; // if (adc_d <= 31) + + if (adc_d >= 224) + begin + has_been_low_for <= 12'd0; + end + else + begin + if (has_been_low_for == 12'd4095) + begin + has_been_low_for <= 12'd0; + after_hysteresis <= 1'b1; + end + else + begin + has_been_low_for <= has_been_low_for + 1; + end + end end // Divide 13.56 MHz to produce various frequencies for SSP_CLK -// and modulation. 11 bits allow for factors of up to /128. -reg [10:0] ssp_clk_divider; +// and modulation. +reg [8:0] ssp_clk_divider; -always @(posedge adc_clk) +always @(negedge adc_clk) ssp_clk_divider <= (ssp_clk_divider + 1); reg ssp_clk; always @(negedge adc_clk) begin - if(mod_type == 3'b101) - // Get bit every at 53kHz (every 8th carrier bit of 424kHz) - ssp_clk <= ssp_clk_divider[7]; - else if(mod_type == 3'b010) + if (mod_type == `FPGA_HF_SIMULATOR_MODULATE_424K_8BIT) + // Get bit every at 53KHz (every 8th carrier bit of 424kHz) + ssp_clk <= ~ssp_clk_divider[7]; + else if (mod_type == `FPGA_HF_SIMULATOR_MODULATE_212K) // Get next bit at 212kHz - ssp_clk <= ssp_clk_divider[5]; + ssp_clk <= ~ssp_clk_divider[5]; else // Get next bit at 424kHz - ssp_clk <= ssp_clk_divider[4]; + ssp_clk <= ~ssp_clk_divider[4]; end -// Divide SSP_CLK by 8 to produce the byte framing signal; the phase of -// this is arbitrary, because it's just a bitstream. -// One nasty issue, though: I can't make it work with both rx and tx at -// once. The phase wrt ssp_clk must be changed. TODO to find out why -// that is and make a better fix. -reg [2:0] ssp_frame_divider_to_arm; -always @(posedge ssp_clk) - ssp_frame_divider_to_arm <= (ssp_frame_divider_to_arm + 1); -reg [2:0] ssp_frame_divider_from_arm; -always @(negedge ssp_clk) - ssp_frame_divider_from_arm <= (ssp_frame_divider_from_arm + 1); - - +// Produce the byte framing signal; the phase of this signal +// is arbitrary, because it's just a bit stream in this module. reg ssp_frame; -always @(ssp_frame_divider_to_arm or ssp_frame_divider_from_arm or mod_type) - if(mod_type == 3'b000) // not modulating, so listening, to ARM - ssp_frame = (ssp_frame_divider_to_arm == 3'b000); +always @(negedge adc_clk) +begin + if (mod_type == `FPGA_HF_SIMULATOR_MODULATE_212K) + begin + if (ssp_clk_divider[8:5] == 4'd1) + ssp_frame <= 1'b1; + if (ssp_clk_divider[8:5] == 4'd5) + ssp_frame <= 1'b0; + end else - ssp_frame = (ssp_frame_divider_from_arm == 3'b000); + begin + if (ssp_clk_divider[7:4] == 4'd1) + ssp_frame <= 1'b1; + if (ssp_clk_divider[7:4] == 4'd5) + ssp_frame <= 1'b0; + end +end + // Synchronize up the after-hysteresis signal, to produce DIN. reg ssp_din; @@ -101,29 +124,25 @@ always @(posedge ssp_clk) // Modulating carrier frequency is fc/64 (212kHz) to fc/16 (848kHz). Reuse ssp_clk divider for that. reg modulating_carrier; -always @(mod_type or ssp_clk or ssp_dout) - if(mod_type == 3'b000) +always @(*) + if(mod_type == `FPGA_HF_SIMULATOR_NO_MODULATION) modulating_carrier <= 1'b0; // no modulation - else if(mod_type == 3'b001) + else if(mod_type == `FPGA_HF_SIMULATOR_MODULATE_BPSK) modulating_carrier <= ssp_dout ^ ssp_clk_divider[3]; // XOR means BPSK - else if(mod_type == 3'b010) + else if(mod_type == `FPGA_HF_SIMULATOR_MODULATE_212K) modulating_carrier <= ssp_dout & ssp_clk_divider[5]; // switch 212kHz subcarrier on/off - else if(mod_type == 3'b100 || mod_type == 3'b101) + else if(mod_type == `FPGA_HF_SIMULATOR_MODULATE_424K || mod_type == `FPGA_HF_SIMULATOR_MODULATE_424K_8BIT) modulating_carrier <= ssp_dout & ssp_clk_divider[4]; // switch 424kHz modulation on/off else modulating_carrier <= 1'b0; // yet unused -// This one is all LF, so doesn't matter -assign pwr_oe2 = modulating_carrier; -// Toggle only one of these, since we are already producing much deeper + +// Load modulation. Toggle only one of these, since we are already producing much deeper // modulation than a real tag would. -assign pwr_oe1 = modulating_carrier; -assign pwr_oe4 = modulating_carrier; - +assign pwr_oe1 = 1'b0; // 33 Ohms Load +assign pwr_oe4 = modulating_carrier; // 33 Ohms Load // This one is always on, so that we can watch the carrier. -assign pwr_oe3 = 1'b0; - -assign dbg = ssp_din; +assign pwr_oe3 = 1'b0; // 10k Load endmodule diff --git a/fpga/hi_sniffer.v b/fpga/hi_sniffer.v index 3a989ce62..c2dc844a7 100644 --- a/fpga/hi_sniffer.v +++ b/fpga/hi_sniffer.v @@ -1,21 +1,14 @@ module hi_sniffer( - pck0, ck_1356meg, ck_1356megb, + ck_1356meg, pwr_lo, pwr_hi, pwr_oe1, pwr_oe2, pwr_oe3, pwr_oe4, adc_d, adc_clk, - ssp_frame, ssp_din, ssp_dout, ssp_clk, - cross_hi, cross_lo, - dbg, - xcorr_is_848, snoop, xcorr_quarter_freq // not used. + ssp_frame, ssp_din, ssp_clk ); - input pck0, ck_1356meg, ck_1356megb; + input ck_1356meg; output pwr_lo, pwr_hi, pwr_oe1, pwr_oe2, pwr_oe3, pwr_oe4; input [7:0] adc_d; output adc_clk; - input ssp_dout; output ssp_frame, ssp_din, ssp_clk; - input cross_hi, cross_lo; - output dbg; - input xcorr_is_848, snoop, xcorr_quarter_freq; // not used. // We are only snooping, all off. assign pwr_hi = 1'b0; From 41dde3281d0da555b42eb50ab0a4ff6d4850e9ba Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 2 Jul 2020 11:49:22 +0200 Subject: [PATCH 0002/1047] add files --- fpga/fpga_felica.v | 228 ++++++++++++++++++++++++++++++ fpga/hi_reader.v | 335 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 563 insertions(+) create mode 100644 fpga/fpga_felica.v create mode 100644 fpga/hi_reader.v diff --git a/fpga/fpga_felica.v b/fpga/fpga_felica.v new file mode 100644 index 000000000..461d90b02 --- /dev/null +++ b/fpga/fpga_felica.v @@ -0,0 +1,228 @@ +//----------------------------------------------------------------------------- +// The FPGA is responsible for interfacing between the A/D, the coil drivers, +// and the ARM. In the low-frequency modes it passes the data straight +// through, so that the ARM gets raw A/D samples over the SSP. In the high- +// frequency modes, the FPGA might perform some demodulation first, to +// reduce the amount of data that we must send to the ARM. +// +// I am not really an FPGA/ASIC designer, so I am sure that a lot of this +// could be improved. +// +// Jonathan Westhues, March 2006 +// Added ISO14443-A support by Gerhard de Koning Gans, April 2008 +// iZsh , June 2014 +// Piwi, Feb 2019 +//----------------------------------------------------------------------------- + + +// Defining commands, modes and options. This must be aligned to the definitions in fpgaloader.h +// Note: the definitions here are without shifts + +// Commands: +`define FPGA_CMD_SET_CONFREG 1 +`define FPGA_CMD_TRACE_ENABLE 2 + +// Major modes: +`define FPGA_MAJOR_MODE_HF_READER 0 +`define FPGA_MAJOR_MODE_HF_SIMULATOR 1 +`define FPGA_MAJOR_MODE_HF_ISO14443A 2 +`define FPGA_MAJOR_MODE_HF_SNOOP 3 +`define FPGA_MAJOR_MODE_HF_ISO18092 4 +`define FPGA_MAJOR_MODE_HF_GET_TRACE 5 +`define FPGA_MAJOR_MODE_OFF 7 + +// Options for the generic HF reader +`define FPGA_HF_READER_MODE_RECEIVE_IQ 0 +`define FPGA_HF_READER_MODE_RECEIVE_AMPLITUDE 1 +`define FPGA_HF_READER_MODE_RECEIVE_PHASE 2 +`define FPGA_HF_READER_MODE_SEND_FULL_MOD 3 +`define FPGA_HF_READER_MODE_SEND_SHALLOW_MOD 4 +`define FPGA_HF_READER_MODE_SNIFF_IQ 5 +`define FPGA_HF_READER_MODE_SNIFF_AMPLITUDE 6 +`define FPGA_HF_READER_MODE_SNIFF_PHASE 7 +`define FPGA_HF_READER_MODE_SEND_JAM 8 + +`define FPGA_HF_READER_SUBCARRIER_848_KHZ 0 +`define FPGA_HF_READER_SUBCARRIER_424_KHZ 1 +`define FPGA_HF_READER_SUBCARRIER_212_KHZ 2 + +// Options for the HF simulated tag, how to modulate +`define FPGA_HF_SIMULATOR_NO_MODULATION 0 +`define FPGA_HF_SIMULATOR_MODULATE_BPSK 1 +`define FPGA_HF_SIMULATOR_MODULATE_212K 2 +`define FPGA_HF_SIMULATOR_MODULATE_424K 4 +`define FPGA_HF_SIMULATOR_MODULATE_424K_8BIT 5 + +// Options for ISO14443A +`define FPGA_HF_ISO14443A_SNIFFER 0 +`define FPGA_HF_ISO14443A_TAGSIM_LISTEN 1 +`define FPGA_HF_ISO14443A_TAGSIM_MOD 2 +`define FPGA_HF_ISO14443A_READER_LISTEN 3 +`define FPGA_HF_ISO14443A_READER_MOD 4 + +//options for ISO18092 / Felica +`define FPGA_HF_ISO18092_FLAG_NOMOD 1 // 0001 disable modulation module +`define FPGA_HF_ISO18092_FLAG_424K 2 // 0010 should enable 414k mode (untested). No autodetect +`define FPGA_HF_ISO18092_FLAG_READER 4 // 0100 enables antenna power, to act as a reader instead of tag + +`include "hi_reader.v" +`include "hi_simulate.v" +//`include "hi_iso14443a.v" +`include "hi_sniffer.v" +`include "util.v" +`include "hi_flite.v" +`include "hi_get_trace.v" + +module fpga_felica( + input spck, output miso, input mosi, input ncs, + input pck0, input ck_1356meg, input ck_1356megb, + output pwr_lo, output pwr_hi, + output pwr_oe1, output pwr_oe2, output pwr_oe3, output pwr_oe4, + input [7:0] adc_d, output adc_clk, output adc_noe, + output ssp_frame, output ssp_din, input ssp_dout, output ssp_clk, + input cross_hi, input cross_lo, + output dbg +); + +//----------------------------------------------------------------------------- +// The SPI receiver. This sets up the configuration word, which the rest of +// the logic looks at to determine how to connect the A/D and the coil +// drivers (i.e., which section gets it). Also assign some symbolic names +// to the configuration bits, for use below. +//----------------------------------------------------------------------------- + +/* + Attempt to write up how its hooked up. Iceman 2020. + + Communication between ARM / FPGA is done inside armsrc/fpgaloader.c see: function FpgaSendCommand() + Send 16 bit command / data pair to FPGA + The bit format is: C3 C2 C1 C0 D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0 + where + C is 4bit command + D is 12bit data + + shift_reg receive this 16bit frame + + +-----+--------- frame layout -------------------- +bit | 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 +-----+------------------------------------------- +cmd | x x x x +major| x x x +opt | x x x +divi | x x x x x x x x +thres| x x x x x x x x +-----+------------------------------------------- +*/ + +reg [15:0] shift_reg; +reg [8:0] conf_word; +reg trace_enable; + +// We switch modes between transmitting to the 13.56 MHz tag and receiving +// from it, which means that we must make sure that we can do so without +// glitching, or else we will glitch the transmitted carrier. +always @(posedge ncs) +begin + case(shift_reg[15:12]) + `FPGA_CMD_SET_CONFREG: conf_word <= shift_reg[8:0]; + `FPGA_CMD_TRACE_ENABLE: trace_enable <= shift_reg[0]; + endcase +end + +always @(posedge spck) +begin + if(~ncs) + begin + shift_reg[15:1] <= shift_reg[14:0]; + shift_reg[0] <= mosi; + end +end + +// select module (outputs) based on major mode +wire [2:0] major_mode = conf_word[8:6]; + +// configuring the HF reader +wire [1:0] subcarrier_frequency = conf_word[5:4]; +wire [3:0] minor_mode = conf_word[3:0]; + +//----------------------------------------------------------------------------- +// And then we instantiate the modules corresponding to each of the FPGA's +// major modes, and use muxes to connect the outputs of the active mode to +// the output pins. +//----------------------------------------------------------------------------- + +// 000 - HF reader +hi_reader hr( + ck_1356megb, + hr_pwr_lo, hr_pwr_hi, hr_pwr_oe1, hr_pwr_oe2, hr_pwr_oe3, hr_pwr_oe4, + adc_d, hr_adc_clk, + hr_ssp_frame, hr_ssp_din, ssp_dout, hr_ssp_clk, + hr_dbg, + subcarrier_frequency, minor_mode +); + +// 001 - HF simulated tag +hi_simulate hs( + ck_1356meg, + hs_pwr_lo, hs_pwr_hi, hs_pwr_oe1, hs_pwr_oe2, hs_pwr_oe3, hs_pwr_oe4, + adc_d, hs_adc_clk, + hs_ssp_frame, hs_ssp_din, ssp_dout, hs_ssp_clk, + hs_dbg, + minor_mode +); + +// 011 - HF sniff +hi_sniffer he( + ck_1356megb, + he_pwr_lo, he_pwr_hi, he_pwr_oe1, he_pwr_oe2, he_pwr_oe3, he_pwr_oe4, + adc_d, he_adc_clk, + he_ssp_frame, he_ssp_din, he_ssp_clk +); + +// 100 - HF ISO18092 FeliCa +/* +hi_flite hfl( + ck_1356megb, + hfl_pwr_lo, hfl_pwr_hi, hfl_pwr_oe1, hfl_pwr_oe2, hfl_pwr_oe3, hfl_pwr_oe4, + adc_d, hfl_adc_clk, + hfl_ssp_frame, hfl_ssp_din, ssp_dout, hfl_ssp_clk, + hfl_dbg, + minor_mode +); +*/ + +// 101 - HF get trace +hi_get_trace gt( + ck_1356megb, + adc_d, trace_enable, major_mode, + gt_ssp_frame, gt_ssp_din, gt_ssp_clk +); + +// Major modes: +// 000 -- HF reader; subcarrier frequency and modulation depth selectable +// 001 -- HF simulated tag +// 010 -- HF ISO14443-A - removed for space... +// 011 -- HF sniff +// 100 -- HF ISO18092 FeliCa +// 101 -- HF get trace +// 110 -- unused +// 111 -- FPGA_MAJOR_MODE_OFF + +// 000 001 010 011 100 101 110 111 +mux8 mux_ssp_clk (major_mode, ssp_clk, hr_ssp_clk, hs_ssp_clk, 1'b0, he_ssp_clk, hfl_ssp_clk, gt_ssp_clk, 1'b0, 1'b0); +mux8 mux_ssp_din (major_mode, ssp_din, hr_ssp_din, hs_ssp_din, 1'b0, he_ssp_din, hfl_ssp_din, gt_ssp_din, 1'b0, 1'b0); +mux8 mux_ssp_frame (major_mode, ssp_frame, hr_ssp_frame, hs_ssp_frame, 1'b0, he_ssp_frame, hfl_ssp_frame, gt_ssp_frame, 1'b0, 1'b0); +mux8 mux_pwr_oe1 (major_mode, pwr_oe1, hr_pwr_oe1, hs_pwr_oe1, 1'b0, he_pwr_oe1, hfl_pwr_oe1, 1'b0, 1'b0, 1'b0); +mux8 mux_pwr_oe2 (major_mode, pwr_oe2, hr_pwr_oe2, hs_pwr_oe2, 1'b0, he_pwr_oe2, hfl_pwr_oe2, 1'b0, 1'b0, 1'b0); +mux8 mux_pwr_oe3 (major_mode, pwr_oe3, hr_pwr_oe3, hs_pwr_oe3, 1'b0, he_pwr_oe3, hfl_pwr_oe3, 1'b0, 1'b0, 1'b0); +mux8 mux_pwr_oe4 (major_mode, pwr_oe4, hr_pwr_oe4, hs_pwr_oe4, 1'b0, he_pwr_oe4, hfl_pwr_oe4, 1'b0, 1'b0, 1'b0); +mux8 mux_pwr_lo (major_mode, pwr_lo, hr_pwr_lo, hs_pwr_lo, 1'b0, he_pwr_lo, hfl_pwr_lo, 1'b0, 1'b0, 1'b0); +mux8 mux_pwr_hi (major_mode, pwr_hi, hr_pwr_hi, hs_pwr_hi, 1'b0, he_pwr_hi, hfl_pwr_hi, 1'b0, 1'b0, 1'b0); +mux8 mux_adc_clk (major_mode, adc_clk, hr_adc_clk, hs_adc_clk, 1'b0, he_adc_clk, hfl_adc_clk, 1'b0, 1'b0, 1'b0); +mux8 mux_dbg (major_mode, dbg, hr_dbg, hs_dbg, 1'b0, he_dbg, hfl_dbg, 1'b0, 1'b0, 1'b0); + +// In all modes, let the ADC's outputs be enabled. +assign adc_noe = 1'b0; + +endmodule diff --git a/fpga/hi_reader.v b/fpga/hi_reader.v new file mode 100644 index 000000000..ab03f7ba4 --- /dev/null +++ b/fpga/hi_reader.v @@ -0,0 +1,335 @@ +//----------------------------------------------------------------------------- +// +// Jonathan Westhues, April 2006 +//----------------------------------------------------------------------------- + +module hi_reader( + ck_1356meg, + pwr_lo, pwr_hi, pwr_oe1, pwr_oe2, pwr_oe3, pwr_oe4, + adc_d, adc_clk, + ssp_frame, ssp_din, ssp_dout, ssp_clk, + dbg, + subcarrier_frequency, minor_mode +); + input ck_1356meg; + output pwr_lo, pwr_hi, pwr_oe1, pwr_oe2, pwr_oe3, pwr_oe4; + input [7:0] adc_d; + output adc_clk; + input ssp_dout; + output ssp_frame, ssp_din, ssp_clk; + output dbg; + input [1:0] subcarrier_frequency; + input [3:0] minor_mode; + +assign adc_clk = ck_1356meg; // sample frequency is 13,56 MHz + +// When we're a reader, we just need to do the BPSK demod; but when we're an +// eavesdropper, we also need to pick out the commands sent by the reader, +// using AM. Do this the same way that we do it for the simulated tag. +reg after_hysteresis, after_hysteresis_prev, after_hysteresis_prev_prev; +reg [11:0] has_been_low_for; +always @(negedge adc_clk) +begin + if (& adc_d[7:0]) after_hysteresis <= 1'b1; + else if (~(| adc_d[7:0])) after_hysteresis <= 1'b0; + + if (after_hysteresis) + begin + has_been_low_for <= 12'd0; + end + else + begin + if (has_been_low_for == 12'd4095) + begin + has_been_low_for <= 12'd0; + after_hysteresis <= 1'b1; + end + else + has_been_low_for <= has_been_low_for + 1; + end +end + + +// Let us report a correlation every 64 samples. I.e. +// one Q/I pair after 4 subcarrier cycles for the 848kHz subcarrier, +// one Q/I pair after 2 subcarrier cycles for the 424kHz subcarriers, +// one Q/I pair for each subcarrier cyle for the 212kHz subcarrier. +// We need a 6-bit counter for the timing. +reg [5:0] corr_i_cnt; +always @(negedge adc_clk) +begin + corr_i_cnt <= corr_i_cnt + 1; +end + + +// A couple of registers in which to accumulate the correlations. From the 64 samples +// we would add at most 32 times the difference between unmodulated and modulated signal. It should +// be safe to assume that a tag will not be able to modulate the carrier signal by more than 25%. +// 32 * 255 * 0,25 = 2040, which can be held in 11 bits. Add 1 bit for sign. +// Temporary we might need more bits. For the 212kHz subcarrier we could possible add 32 times the +// maximum signal value before a first subtraction would occur. 32 * 255 = 8160 can be held in 13 bits. +// Add one bit for sign -> need 14 bit registers but final result will fit into 12 bits. +reg signed [13:0] corr_i_accum; +reg signed [13:0] corr_q_accum; +// we will report maximum 8 significant bits +reg signed [7:0] corr_i_out; +reg signed [7:0] corr_q_out; + + +// the amplitude of the subcarrier is sqrt(ci^2 + cq^2). +// approximate by amplitude = max(|ci|,|cq|) + 1/2*min(|ci|,|cq|) +reg [13:0] corr_amplitude, abs_ci, abs_cq, max_ci_cq; +reg [12:0] min_ci_cq_2; // min_ci_cq / 2 + +always @(*) +begin + if (corr_i_accum[13] == 1'b0) + abs_ci <= corr_i_accum; + else + abs_ci <= -corr_i_accum; + + if (corr_q_accum[13] == 1'b0) + abs_cq <= corr_q_accum; + else + abs_cq <= -corr_q_accum; + + if (abs_ci > abs_cq) + begin + max_ci_cq <= abs_ci; + min_ci_cq_2 <= abs_cq / 2; + end + else + begin + max_ci_cq <= abs_cq; + min_ci_cq_2 <= abs_ci / 2; + end + + corr_amplitude <= max_ci_cq + min_ci_cq_2; + +end + + +// The subcarrier reference signals +reg subcarrier_I; +reg subcarrier_Q; + +always @(*) +begin + if (subcarrier_frequency == `FPGA_HF_READER_SUBCARRIER_848_KHZ) + begin + subcarrier_I = ~corr_i_cnt[3]; + subcarrier_Q = ~(corr_i_cnt[3] ^ corr_i_cnt[2]); + end + else if (subcarrier_frequency == `FPGA_HF_READER_SUBCARRIER_212_KHZ) + begin + subcarrier_I = ~corr_i_cnt[5]; + subcarrier_Q = ~(corr_i_cnt[5] ^ corr_i_cnt[4]); + end + else + begin // 424 kHz + subcarrier_I = ~corr_i_cnt[4]; + subcarrier_Q = ~(corr_i_cnt[4] ^ corr_i_cnt[3]); + end +end + + +// ADC data appears on the rising edge, so sample it on the falling edge +always @(negedge adc_clk) +begin + // These are the correlators: we correlate against in-phase and quadrature + // versions of our reference signal, and keep the (signed) results or the + // resulting amplitude to send out later over the SSP. + if (corr_i_cnt == 6'd0) + begin + if (minor_mode == `FPGA_HF_READER_MODE_SNIFF_AMPLITUDE) + begin + // send amplitude plus 2 bits reader signal + corr_i_out <= corr_amplitude[13:6]; + corr_q_out <= {corr_amplitude[5:0], after_hysteresis_prev_prev, after_hysteresis_prev}; + end + else if (minor_mode == `FPGA_HF_READER_MODE_SNIFF_IQ) + begin + + // Send 7 most significant bits of in phase tag signal (signed), plus 1 bit reader signal + if (corr_i_accum[13:11] == 3'b000 || corr_i_accum[13:11] == 3'b111) + corr_i_out <= {corr_i_accum[11:5], after_hysteresis_prev_prev}; + else // truncate to maximum value + if (corr_i_accum[13] == 1'b0) + corr_i_out <= {7'b0111111, after_hysteresis_prev_prev}; + else + corr_i_out <= {7'b1000000, after_hysteresis_prev_prev}; + + // Send 7 most significant bits of quadrature phase tag signal (signed), plus 1 bit reader signal + if (corr_q_accum[13:11] == 3'b000 || corr_q_accum[13:11] == 3'b111) + corr_q_out <= {corr_q_accum[11:5], after_hysteresis_prev}; + else // truncate to maximum value + if (corr_q_accum[13] == 1'b0) + corr_q_out <= {7'b0111111, after_hysteresis_prev}; + else + corr_q_out <= {7'b1000000, after_hysteresis_prev}; + end + else if (minor_mode == `FPGA_HF_READER_MODE_RECEIVE_AMPLITUDE) + begin + // send amplitude + corr_i_out <= {2'b00, corr_amplitude[13:8]}; + corr_q_out <= corr_amplitude[7:0]; + end + else if (minor_mode == `FPGA_HF_READER_MODE_RECEIVE_IQ) + begin + + // Send 8 bits of in phase tag signal + if (corr_i_accum[13:11] == 3'b000 || corr_i_accum[13:11] == 3'b111) + corr_i_out <= corr_i_accum[11:4]; + else // truncate to maximum value + if (corr_i_accum[13] == 1'b0) + corr_i_out <= 8'b01111111; + else + corr_i_out <= 8'b10000000; + + // Send 8 bits of quadrature phase tag signal + if (corr_q_accum[13:11] == 3'b000 || corr_q_accum[13:11] == 3'b111) + corr_q_out <= corr_q_accum[11:4]; + else // truncate to maximum value + if (corr_q_accum[13] == 1'b0) + corr_q_out <= 8'b01111111; + else + corr_q_out <= 8'b10000000; + end + + // for each Q/I pair report two reader signal samples when sniffing. Store the 1st. + after_hysteresis_prev_prev <= after_hysteresis; + + // Initialize next correlation. + // Both I and Q reference signals are high when corr_i_nct == 0. Therefore need to accumulate. + corr_i_accum <= $signed({1'b0, adc_d}); + corr_q_accum <= $signed({1'b0, adc_d}); + end + else + begin + if (subcarrier_I) + corr_i_accum <= corr_i_accum + $signed({1'b0, adc_d}); + else + corr_i_accum <= corr_i_accum - $signed({1'b0, adc_d}); + + if (subcarrier_Q) + corr_q_accum <= corr_q_accum + $signed({1'b0, adc_d}); + else + corr_q_accum <= corr_q_accum - $signed({1'b0, adc_d}); + end + + // for each Q/I pair report two reader signal samples when sniffing. Store the 2nd. + if (corr_i_cnt == 6'd32) + after_hysteresis_prev <= after_hysteresis; + + // Then the result from last time is serialized and send out to the ARM. + // We get one report each cycle, and each report is 16 bits, so the + // ssp_clk should be the adc_clk divided by 64/16 = 4. + // ssp_clk frequency = 13,56MHz / 4 = 3.39MHz + + if (corr_i_cnt[1:0] == 2'b00) + begin + // Don't shift if we just loaded new data, obviously. + if (corr_i_cnt != 6'd0) + begin + corr_i_out[7:0] <= {corr_i_out[6:0], corr_q_out[7]}; + corr_q_out[7:1] <= corr_q_out[6:0]; + end + end + +end + + +// ssp clock and frame signal for communication to and from ARM +// _____ _____ _____ _ +// ssp_clk | |_____| |_____| |_____| +// _____ +// ssp_frame ___| |____________________________ +// ___________ ___________ ___________ _ +// ssp_d_in X___________X___________X___________X_ +// +// corr_i_cnt 0 1 2 3 4 5 6 7 8 9 10 11 12 ... +// + +reg ssp_clk; +reg ssp_frame; + +always @(negedge adc_clk) +begin + if (corr_i_cnt[1:0] == 2'b00) + ssp_clk <= 1'b1; + + if (corr_i_cnt[1:0] == 2'b10) + ssp_clk <= 1'b0; + + // set ssp_frame signal for corr_i_cnt = 1..3 + // (send one frame with 16 Bits) + if (corr_i_cnt == 6'd1) + ssp_frame <= 1'b1; + + if (corr_i_cnt == 6'd3) + ssp_frame <= 1'b0; +end + + +assign ssp_din = corr_i_out[7]; + + +// a jamming signal +reg jam_signal; +reg [3:0] jam_counter; + +always @(negedge adc_clk) +begin + if (corr_i_cnt == 6'd0) + begin + jam_counter <= jam_counter + 1; + jam_signal <= jam_counter[1] ^ jam_counter[3]; + end +end + +// Antenna drivers +reg pwr_hi, pwr_oe4; + +always @(*) +begin + if (minor_mode == `FPGA_HF_READER_MODE_SEND_SHALLOW_MOD) + begin + pwr_hi = ck_1356meg; + pwr_oe4 = ssp_dout; + end + else if (minor_mode == `FPGA_HF_READER_MODE_SEND_FULL_MOD) + begin + pwr_hi = ck_1356meg & ~ssp_dout; + pwr_oe4 = 1'b0; + end + else if (minor_mode == `FPGA_HF_READER_MODE_SEND_JAM) + begin + pwr_hi = ck_1356meg & jam_signal; + pwr_oe4 = 1'b0; + end + else if (minor_mode == `FPGA_HF_READER_MODE_SNIFF_IQ + || minor_mode == `FPGA_HF_READER_MODE_SNIFF_AMPLITUDE + || minor_mode == `FPGA_HF_READER_MODE_SNIFF_PHASE) + begin // all off + pwr_hi = 1'b0; + pwr_oe4 = 1'b0; + end + else // receiving from tag + begin + pwr_hi = ck_1356meg; + pwr_oe4 = 1'b0; + end +end + +// always on +assign pwr_oe1 = 1'b0; +assign pwr_oe3 = 1'b0; + +// Unused. +assign pwr_lo = 1'b0; +assign pwr_oe2 = 1'b0; + +// Debug Output +assign dbg = corr_i_cnt[3]; + +endmodule From 081f397ed7bfdc6326592c5d2da153982203d5bc Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 2 Jul 2020 11:49:46 +0200 Subject: [PATCH 0003/1047] remove --- fpga/xst_nfc.scr | 1 - 1 file changed, 1 deletion(-) delete mode 100644 fpga/xst_nfc.scr diff --git a/fpga/xst_nfc.scr b/fpga/xst_nfc.scr deleted file mode 100644 index 68f0d01e9..000000000 --- a/fpga/xst_nfc.scr +++ /dev/null @@ -1 +0,0 @@ -run -ifn fpga_nfc.v -ifmt Verilog -ofn fpga_nfc.ngc -ofmt NGC -p xc2s30-5-vq100 -top fpga_nfc -opt_mode area -opt_level 2 -resource_sharing yes -fsm_style bram -fsm_encoding compact From 59836bbb3b07082af0dbe48646bc86aca98a1460 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 2 Jul 2020 11:50:01 +0200 Subject: [PATCH 0004/1047] remove --- fpga/hi_read_rx_xcorr.v | 197 ---------------------------------------- fpga/hi_read_tx.v | 78 ---------------- 2 files changed, 275 deletions(-) delete mode 100644 fpga/hi_read_rx_xcorr.v delete mode 100644 fpga/hi_read_tx.v diff --git a/fpga/hi_read_rx_xcorr.v b/fpga/hi_read_rx_xcorr.v deleted file mode 100644 index be70b97b0..000000000 --- a/fpga/hi_read_rx_xcorr.v +++ /dev/null @@ -1,197 +0,0 @@ -//----------------------------------------------------------------------------- -// -// Jonathan Westhues, April 2006 -//----------------------------------------------------------------------------- - -module hi_read_rx_xcorr( - pck0, ck_1356meg, ck_1356megb, - pwr_lo, pwr_hi, pwr_oe1, pwr_oe2, pwr_oe3, pwr_oe4, - adc_d, adc_clk, - ssp_frame, ssp_din, ssp_dout, ssp_clk, - cross_hi, cross_lo, - dbg, - xcorr_is_848, snoop, xcorr_quarter_freq -); - input pck0, ck_1356meg, ck_1356megb; - output pwr_lo, pwr_hi, pwr_oe1, pwr_oe2, pwr_oe3, pwr_oe4; - input [7:0] adc_d; - output adc_clk; - input ssp_dout; - output ssp_frame, ssp_din, ssp_clk; - input cross_hi, cross_lo; - output dbg; - input xcorr_is_848, snoop, xcorr_quarter_freq; - -// Carrier is steady on through this, unless we're snooping. -assign pwr_hi = ck_1356megb & (~snoop); -assign pwr_oe1 = 1'b0; -assign pwr_oe3 = 1'b0; -assign pwr_oe4 = 1'b0; - -reg [2:0] fc_div; -always @(negedge ck_1356megb) - fc_div <= fc_div + 1; - -(* clock_signal = "yes" *) reg adc_clk; // sample frequency, always 16 * fc -always @(ck_1356megb, xcorr_is_848, xcorr_quarter_freq, fc_div) - if (xcorr_is_848 & ~xcorr_quarter_freq) // fc = 847.5 kHz, standard ISO14443B - adc_clk <= ck_1356megb; - else if (~xcorr_is_848 & ~xcorr_quarter_freq) // fc = 423.75 kHz - adc_clk <= fc_div[0]; - else if (xcorr_is_848 & xcorr_quarter_freq) // fc = 211.875 kHz - adc_clk <= fc_div[1]; - else // fc = 105.9375 kHz - adc_clk <= fc_div[2]; - -// When we're a reader, we just need to do the BPSK demod; but when we're an -// eavesdropper, we also need to pick out the commands sent by the reader, -// using AM. Do this the same way that we do it for the simulated tag. -reg after_hysteresis, after_hysteresis_prev, after_hysteresis_prev_prev; -reg [11:0] has_been_low_for; -always @(negedge adc_clk) -begin - if(& adc_d[7:0]) after_hysteresis <= 1'b1; - else if(~(| adc_d[7:0])) after_hysteresis <= 1'b0; - - if(after_hysteresis) - begin - has_been_low_for <= 7'b0; - end - else - begin - if(has_been_low_for == 12'd4095) - begin - has_been_low_for <= 12'd0; - after_hysteresis <= 1'b1; - end - else - has_been_low_for <= has_been_low_for + 1; - end -end - -// Let us report a correlation every 4 subcarrier cycles, or 4*16=64 samples, -// so we need a 6-bit counter. -reg [5:0] corr_i_cnt; - -// And a couple of registers in which to accumulate the correlations. Since -// load modulation saturates the ADC we have to use a large enough register -// 32 * 255 = 8160, which can be held in 13 bits. Add 1 bit for sign. -// -// The initial code assumed a phase shift of up to 25% and the accumulators were -// 11 bits (32 * 255 * 0,25 = 2040), we will pack all bits exceeding 11 bits into -// MSB. This prevents under/-overflows but preserves sensitivity on the lower end. -reg signed [13:0] corr_i_accum; -reg signed [13:0] corr_q_accum; - -// we will report maximum 8 significant bits -reg signed [7:0] corr_i_out; -reg signed [7:0] corr_q_out; - -// clock and frame signal for communication to ARM -reg ssp_clk; -reg ssp_frame; - - -always @(negedge adc_clk) -begin - corr_i_cnt <= corr_i_cnt + 1; -end - - -// ADC data appears on the rising edge, so sample it on the falling edge -always @(negedge adc_clk) -begin - // These are the correlators: we correlate against in-phase and quadrature - // versions of our reference signal, and keep the (signed) result to - // send out later over the SSP. - if(corr_i_cnt == 6'd0) - begin - // send 10 bits of tag signal, 4 MSBs are stuffed into 2 MSB - if(~corr_i_accum[13]) - corr_i_out <= {corr_i_accum[13], - corr_i_accum[12] | corr_i_accum[11] | corr_i_accum[10], - corr_i_accum[12] | corr_i_accum[11] | corr_i_accum[9], - corr_i_accum[8:4]}; - else - corr_i_out <= {corr_i_accum[13], - corr_i_accum[12] & corr_i_accum[11] & corr_i_accum[10], - corr_i_accum[12] & corr_i_accum[11] & corr_i_accum[9], - corr_i_accum[8:4]}; - - if(~corr_q_accum[13]) - corr_q_out <= {corr_q_accum[13], - corr_q_accum[12] | corr_q_accum[11] | corr_q_accum[10], - corr_q_accum[12] | corr_q_accum[11] | corr_q_accum[9], - corr_q_accum[8:4]}; - else - corr_q_out <= {corr_q_accum[13], - corr_q_accum[12] & corr_q_accum[11] & corr_q_accum[10], - corr_q_accum[12] & corr_q_accum[11] & corr_q_accum[9], - corr_q_accum[8:4]}; - - if(snoop) - begin - // replace LSB with 1 bit reader signal - corr_i_out[0] <= after_hysteresis_prev_prev; - corr_q_out[0] <= after_hysteresis_prev; - after_hysteresis_prev_prev <= after_hysteresis; - end - - corr_i_accum <= adc_d; - corr_q_accum <= adc_d; - end - else - begin - if(corr_i_cnt[3]) - corr_i_accum <= corr_i_accum - adc_d; - else - corr_i_accum <= corr_i_accum + adc_d; - - if(corr_i_cnt[3] == corr_i_cnt[2]) // phase shifted by pi/2 - corr_q_accum <= corr_q_accum + adc_d; - else - corr_q_accum <= corr_q_accum - adc_d; - - end - - // The logic in hi_simulate.v reports 4 samples per bit. We report two - // (I, Q) pairs per bit, so we should do 2 samples per pair. - if(corr_i_cnt == 6'd32) - after_hysteresis_prev <= after_hysteresis; - - // Then the result from last time is serialized and send out to the ARM. - // We get one report each cycle, and each report is 16 bits, so the - // ssp_clk should be the adc_clk divided by 64/16 = 4. - - if(corr_i_cnt[1:0] == 2'b10) - ssp_clk <= 1'b0; - - if(corr_i_cnt[1:0] == 2'b00) - begin - ssp_clk <= 1'b1; - // Don't shift if we just loaded new data, obviously. - if(corr_i_cnt != 6'd0) - begin - corr_i_out[7:0] <= {corr_i_out[6:0], corr_q_out[7]}; - corr_q_out[7:1] <= corr_q_out[6:0]; - end - end - - // set ssp_frame signal for corr_i_cnt = 0..3 and corr_i_cnt = 32..35 - // (send two frames with 8 Bits each) - if(corr_i_cnt[5:2] == 4'b0000 || corr_i_cnt[5:2] == 4'b1000) - ssp_frame = 1'b1; - else - ssp_frame = 1'b0; - -end - -assign ssp_din = corr_i_out[7]; - -assign dbg = corr_i_cnt[3]; - -// Unused. -assign pwr_lo = 1'b0; -assign pwr_oe2 = 1'b0; - -endmodule diff --git a/fpga/hi_read_tx.v b/fpga/hi_read_tx.v deleted file mode 100644 index f9550ed24..000000000 --- a/fpga/hi_read_tx.v +++ /dev/null @@ -1,78 +0,0 @@ -//----------------------------------------------------------------------------- -// The way that we connect things when transmitting a command to an ISO -// 15693 tag, using 100% modulation only for now. -// -// Jonathan Westhues, April 2006 -//----------------------------------------------------------------------------- - -module hi_read_tx( - pck0, ck_1356meg, ck_1356megb, - pwr_lo, pwr_hi, pwr_oe1, pwr_oe2, pwr_oe3, pwr_oe4, - adc_d, adc_clk, - ssp_frame, ssp_din, ssp_dout, ssp_clk, - cross_hi, cross_lo, - dbg, - shallow_modulation -); - input pck0, ck_1356meg, ck_1356megb; - output pwr_lo, pwr_hi, pwr_oe1, pwr_oe2, pwr_oe3, pwr_oe4; - input [7:0] adc_d; - output adc_clk; - input ssp_dout; - output ssp_frame, ssp_din, ssp_clk; - input cross_hi, cross_lo; - output dbg; - input shallow_modulation; - -// low frequency outputs, not relevant -assign pwr_lo = 1'b0; -assign pwr_oe2 = 1'b0; - -// The high-frequency stuff. For now, for testing, just bring out the carrier, -// and allow the ARM to modulate it over the SSP. -reg pwr_hi; -reg pwr_oe1; -reg pwr_oe3; -reg pwr_oe4; - -always @(ck_1356megb or ssp_dout or shallow_modulation) -begin - if(shallow_modulation) - begin - pwr_hi <= ck_1356megb; - pwr_oe1 <= 1'b0; - pwr_oe3 <= 1'b0; - pwr_oe4 <= ~ssp_dout; - end - else - begin - pwr_hi <= ck_1356megb & ssp_dout; - pwr_oe1 <= 1'b0; - pwr_oe3 <= 1'b0; - pwr_oe4 <= 1'b0; - end -end - - -// Then just divide the 13.56 MHz clock down to produce appropriate clocks -// for the synchronous serial port. - -reg [6:0] hi_div_by_128; - -always @(posedge ck_1356meg) - hi_div_by_128 <= hi_div_by_128 + 1; - -assign ssp_clk = hi_div_by_128[6]; - -reg [2:0] hi_byte_div; - -always @(negedge ssp_clk) - hi_byte_div <= hi_byte_div + 1; - -assign ssp_frame = (hi_byte_div == 3'b000); - -assign ssp_din = 1'b0; - -assign dbg = ssp_frame; - -endmodule From da947affeb6a9b3d420c6a97a5731472edd02e13 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 2 Jul 2020 11:51:07 +0200 Subject: [PATCH 0005/1047] felica fpga scr file --- fpga/xst_felica.scr | 1 + 1 file changed, 1 insertion(+) create mode 100644 fpga/xst_felica.scr diff --git a/fpga/xst_felica.scr b/fpga/xst_felica.scr new file mode 100644 index 000000000..b069fab13 --- /dev/null +++ b/fpga/xst_felica.scr @@ -0,0 +1 @@ +run -ifn fpga_felica.v -ifmt Verilog -ofn fpga_felica.ngc -ofmt NGC -p xc2s30-5-vq100 -top fpga_felica -opt_mode area -opt_level 2 -resource_sharing yes -fsm_style bram -fsm_encoding compact From fdd0487c37d2993df1a7448efadba1ec00d9f20b Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 2 Jul 2020 11:51:52 +0200 Subject: [PATCH 0006/1047] updated bit files --- fpga/fpga_hf.bit | Bin 42175 -> 42175 bytes fpga/fpga_lf.bit | Bin 42175 -> 42175 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/fpga/fpga_hf.bit b/fpga/fpga_hf.bit index 9a054eec60c9bb30acbe343f4c6685039cd9d260..7d20e220fd35db4ff4743ce9abe5571984253151 100644 GIT binary patch literal 42175 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 z zC-CzlxtMKm_73j|4_fYr)lq(4l&^K4QLAap!38zb^Izh;73Qn3OdQ8IxW_hztuI93 zWaLb<_$5q4_=NiTbf+xgLoIqn?H40rPrEx^$bUgL)N&!830XrR%y`S{iFt+JW>fjE zBDqDeGp}+qjy@SmSYE1>4Nmyznr?!2aj1p3fKDJRw7kQ>ILkrMbvS2VqI4~NUkQuN z*$_gmMNGBztf7fQ{tIQ;g#5BBn}>cV$DGfImv#R@SWFygG(IDYYQE-c8is% z75V%Z>JQDpVU(YpWE&K6bmYG%ZLTKQcMJKiEYzOWzX{s4Rm>lEVer~doYg5D1WQff z7cvnXb6?1ww>lkf8nC6&b_Hik7Z>h7ME=VRi@*Tlx)<(Qx}(lkAJ^V+7KqJ{&p0r} zzcMWACE}8H@i1H7rJmyBC1K0cg+pgq`;z%DX?n=QKsK}?a8=#}5+Qc4)u!FQu@={S zfp+a@quTz2mnVAT^RhSAMov!WU;8<12lmDH6NuP$*WB4pn@}BR7W6~pzX-G|xMo4^p$j;VEvEp60xJC~o+WGU!N|!1~TNQ9pmP zjY9e#vUK8R8~iJu|9ZlP0`sOv`pl2$;6pfsa+$_r2Lxuyieqv-x%;D_A4=MVdlakO z>(#IcMG-e5s`>oa!?C@RTYVQ2>T6W3>Fw(OqAr>*jL*9s&+U0xfB3BQ*mBGp%qmL; z9waJJLAvl!ND?}q31e6RBu8b z!#R$WXS`59kJHLITs|ASV1}92tB%3jgdg78yCToOP=Dw^Ep%pt>9XB`D^I{vjyrqA zs$Kc~m$pvsLnq;8b^Ji2iu8xQ&6E(0J7jGp-4G!acF#hjd9S6ISoa3R(+ohLV&l1W=d;Jz5#GoHN!6BNs(^o9Cu1amU6;<;S4QdO*}4=P z6~7l~Q5?98bJ=o&)9UB#7@|r7BkPs{r+m&6U8pOFuiRC@uSWV$tc3yK#iA@4M7>bG zb)daE?!Q#Xf3?bU0eJJQOY6tGfHQvpWZ!3Ff_eQgWcG?$``_DGIdzG-wm!(@T^4f( z^!0`Md5sQJlR(C2Go4mK9qt9sZKl7N3%lF}{JJ*9F$)LFB=PInu6jAIPibiv@_Ol< zeGL|6*io^Nmm+MY-&1HC=Jf&AJ-o^Nq?*UCjgo&ky5-W*upZK5Fe1dONqs?0zJ7jt ze2e&O5NWR)O(enw0lsh227%L*>sh{j15s0Co`YM$B;B?|!eS1^d3JI0`r-bTmm-Vo z(oE-K>nnPL(Cu08(NW%vCrvy5)jFXqu{`2A#J$!*s&~{(Y_cdDy%+FHW}Mq#r!r3z zFxR!}GnvM>nN}-^81i4DE(RdWL#;Rc6smI}G8-a`H1r*b+t7og6iBRs_2X;mtUSwx%4f0=)Z zCv4=uHZgBJAs+EZAZ<`W0irom`7gcbdAeW6mArScy9G*3T53#aR`*jq$KVea@C(=W zM!`Mr7T}fKm0WXqao|4xOKY{ma$e`LV zTVC#y_ixaZIPzc9_*ZZ2$x3C|h_X5S=k$m>(a!p4ua1iPXn8*WCGVfd)i*O)lmt~- zx3)9W+K22Q>Z7jmFRS9P7!sCcm`oM6V-c?1*l6vF1vr@n{`G6R$i3s9fzEZJ=S0Yv zpTfZ+xhPn{tG^}aExPCpAK!}W^bxclOqZopnS=hJ@YtAXQ2KBMH+ACL4RU8XO&tv+ z**eGRxZU7iccPkFvwb?WzZbZjlJrb@P~SpT>BJC(@lMrpVEB3b^5MKWaGB!kOcV>X z+%^O zk3qVFuPxvgWGM1D>bNpV&vFm{|Knd?sGx^8J8FnfW+OXaj)I7l1zrH6UB$0Uv{i3# zvis0Q-kHW`cDAeAvPhpXjepslrj24-_qFXPOZr6hx2GFRUa~Jl-9pNNP8t)-Y1-X<)!<+ znXf-=6+IMl5E?~riXlL^`x$aTn$N{Q<0i)#-Zq<&&uar!~h6YLzOzwm`Tpv=hUzn;?NeJQK3UPx2Qz(bvkWR=qA3;2cG zr>)(`-B5rL0Ece#^s8qz1kwtCERSE{U+q=kU*-vI3xqP`J}>Y~n@`w3+jDV(gL48K zcT|nt+J>2D2fvf|zk!DLd4Y=ufgPa-a3lobPR|Us*0?l?KvM43BeEMdWvT|X zYT2yOJ58gbvVnEkEM;X=4U#M|W@`l3pDB6ZFpCy3WaCz$YqWPIDKx0Knp%mdV$p~7VM(tKAEFMG6I9$St_Gt;`(L9t zzg&@Ub!wj{&k60;<|KTld?wU?SGwfSBpc1?Y73l=p!Ifph;~cVt7?ClT%OLIo8dMb zM!~)lvvSYNeQP^+)ZBllXZ5)|*)J-VtOspjVm!3?f3}TmuJV^cv*1ibLSP(XVpOq; z;Qg;8?vJtr_eDp1q0Ohgurk;DrEItO7Vm$le7VYB*VFyf?%|9)?kJ;j8BQnWFYK;$ zZj{nc$gxA$M!+FD}1SiB8}SnM_NTh&!b zuEhm(Tpa9wmFc6~7b%!sr+9il$N_umqx`e>+{k~(_Ser!%wO1c|6esRAc!?FURqjAf<&=iO=E(lqf$G58DwsRyS!!L6t-35`8>}h^Q5wPJ z5iK5Mgi2g&jwK&ZB9~ZzUk$lsuOXWo_VtV7HxO0M^VkpRJpujNk(guZ84~*L>$1YQ zMEs%Gw8!{M0culC3pSsmGtQEg+nA}fei`s@{2Sq%ik{)b+spMF2kT+yrW5;m4|&*6iTJBi=s8?r#Rz329NleaC&ml*JPcaN^@6L(M7<8; zD;2`LmpTaZ23gpU_0YKyf4L^=r7&zTek^Rij$j}m0@+JCwe}ZZ1KZE@;m0_N*5sPU zP##Q-nEibH^5U=2+e2OMC7WV*&}-gR0te4;rI);}cFd3ge|gTY4eWNgQ}-f|`$gLe z_DHc4)?b^K%);-d+viAp6gzzzBrK@`dO)-v;l;mzA7HpXi`((Fe&POkTnpJI?^hf@ z&kE}l*NY*0CcHh((f-#d`qB2M*C+PH?yy$2F5u5G7<62A%f^vv{2@X>EqrIBviW17 z4YAWrKLPlg;@pp`{Pl?U8`Ui_s}ESO81uZ&J)3_>Z{-(x$pwiPU%!sTp)v;SK@)dt zad{edU}NQFiGqz(?JvF)tX+02Msvd*y4cQ`cgtPo>;>S0O;q6isuEY74O8ti7=jc01bHSZ{pR)h(AzCnMXL0S}`ykfjJYy@pfr|+`v(@^Smh|sZ;6~v{1x%PHD$QK=XQ%`$GOY!r%YG zZK8=m@k^-{}m&5!z0AaiR!Ef;s+B_xs88!}L3WYY!{n(^sH7jpYRH-=N(p>DAa@;IC)>^I!TN z=}`nCBGS^VJ^$r@YN``vmqZ|ki$?f0UCZlCN<{Y8dZn$c9mO%wRvU+8jM^{5E&!tm zKMpMup9#-^P62J1m-i)(6+h_tG0nXeeOl!&cncu|+M+FTT_Lf`{0~C>SfRrT^^4Ch zGw0e$hi!CoUsRlv#$5zQVq|}PfO#Hjbu9KKUa(0rlX<%a3}cd6KvU_ zI(4OAfqWa;@Oc^J3;*Fve|?Df4Ttv>5`-ykc(3Sa7{=bju$m$8_JF_g&@bLoNF2lc zQM>SMl=_vsSBZb1%eWRRL;l*sAuBHC%msuq&ZirWn~&2r)#|eC>GyjX-*-4ebI`nq z-*}To+{O%i=08{6Zt{UJegpR($}{a4bq~fyAq;?x6%FP-SQEb?xqYtirijZ<(lbuu z!D(6RC|1j`$fEtPMQ}0A8MeP4>kz&nhP$utGrKWJ%m!aC5I-;2+N#INR@#lZZkBBt zZP;<9hLMKreEll-OgEm8b1V5u+hV$#)_JhMutKx{+`D(MVS}F!?w_~${@%v54S#0+ zKs{A%Jl?yAM%5R~Q}0ZC-Q?j+_Vs%(Lt_7H#5iR=&Gjnxu7}3K{_0K?O_yaP`0HJD zX=UnhEaT6P%ohk>?4}oo=C|VDmE-ppzW*h0+s2rU?-O~CBaqczVeV}ErL$`^F?e6V zDGsc!e@5#x6pF7pkAL+t1**M?y&@_R@z;hHT#3-!S+VDVvJohCyPY(jqkE4Dw|aln zlj(nK?A?J_U81>(~`6mR^&sI~zwZCpg?b zDn8eF250D@df$-fTsgapgDO9wwj-DmBL1?lk0w0O7S{{m+_*oAwo{qvv*G<4y#IyI zGI|M~>-Hi3FgY?~tMeNZ4uQd#i0OH?e5wBWh6G!EjPhKq4KbcK6v`a&7ru96W0`RV z`<3u9nwWO7G>Q{pu$LqI>m3+xh}PI=zC%wJ@$r|f%`=*Z!Dz#KYwR!D-vJkHwho6H zoKD$cHNZ#8QHiq`RAg|e*7E|#vCDRI z^L3yfTvpaz{Lt4gKL7QEY8CfyGGCF8-#4plubui8`!Ut}D|qWU`5k^#XgjLe-s}C!`)d+Pc(VgME*mxk7RG^j5ZiP zi&W=Gtb-2mN~Sy`ir)Z#i7U1v8p?sbU!g#?8Ox98sGeWOR^7-ICli~B4}yHZ!TiNB zC#Yb)E{fkcivH@XK%4G^*@a0a+lI(kB@~FPCVm4xnR3&~#FOd;I7k~GzNEu^p}c?l zsmhEfenW4UTiaC8HQ|=0saDJbJ6zq|REkCR7tfF!1s8+MrVP7)0}L*B{;LAr!IG~$ z&$YkDh8Ti95N%kA>@Tba+m2iU^F%yFGx7_M@kNLfL;Qw0=Jy51M?ETqgo}V<`Mxjn zI*@}SI->n$&0lIBEhnrq`5+i*tIa;5_Lnh!!t=`)qs-p35^MFB=!{&r0%03`f7GHv z)3K`m(63h#u04m)gAsKt{KAO0&fbfC#+w_r!C#{R+% zore;RIr~j~Hih@>hER)+5peDx>ki^KP@Ua{`UlJt>M1!#4s%2CLAe_Kg8%Rg)FJ7+ z1eX*Lh~tAEF1@{)!1~yD#9d`PQPoe_m~l z>@Pm8%=TCFEYkkN6XqB1{&x0{v6X1P;P-|8ekBS1h9mJBsbZ(isRoZR7$cGWg=j;8 zBUIls=b0r1#{wL8_4kQ-1sMgBv~hu-|kwhv?b>Fgo64Ufl`kiJN&#(&6rTdmM9 zZ07KlhW5(XpVAi5O12xtZxD14F5JXvQ(r{yahd5KX&u4m>5<_6!ue&MTNWg`QTKh& zFZAgEt|%5{i>m)npZ_}6bbIUv3X0}+av5QpUw`46$C<#0+I`vQM0@s@9oy-ja` zztB68{lz=!^Koo>Mpk@6cN_tKf$Y?60{&jFPp?J!`<0lVkHH3M<%LHDD)X-Wj1;bo zd}P31h*-c_g^Zx5#T?nNvxuNR7k5w$6)T~BCAnTKgL+|c(%_h*h#4pg%o~Rct~&gO zx1c;2KVVM`wmII^5tK)NXc&w3kiWRh2MD_-zCY^6gRu|v7ZRJi*xoul=IL-xY*4=H zTxB&LjDRuNqf@*t|6Pas;v0>dXi2r7KvucUDU-RPyWRsaU$ z1I8MXUMg$Js9q#7ed5?22$&oLz(&E~btdWwWDdJngA@sKzo-F5ky@4A6TIuNjJw8{ zX&G8WgVi#v>ed^1q@<%V%a}{Y36aZ6gNvws81Ficn>!jKnVgj!N{U|FIaC9@r0B7o zuniSamXZ`B@*;rmIr%Aq^n*UlDx5U4twSMrECJK1yRV* ztfmzJM#eDFI%yg9SDn$L3T{g#UISM6DHPOe$TUbv;qX{xP~fp@m3nYZvlYr5UKU%S zUUIL@G**GRVo0Zi@7l5~zH#U#cTFZeW`tl$0KA~g{mWt-)vNARnZ_~G2L=nj>i$*c zQZMD#tG}90l%cgzB{^p= zt260PreDSfjhko#Lj}Z z>aQaiqi#@s*SXxPKWGlh>CV@DfRvVcFBGyuUS>Mh1U;G#m^zX%jewVn=YWi*!hDFT zd}?JtH?_nX2-(EEe2qvQu^3DV!OD)73+8hkK}Y#a;AJ?@0)lpN*I4k(ZnoRdOFL;M)hi9^G=T75P<@dzMp^nN@^WjehMYA?r7#XB@Nz`Z48nIA5^5Fc z*Et|~mr<)DfuQ*kdsKY;^SQta^1-<6lF34> zg$`3!4+96lPdOC6tJiW5X0pqYsm+$_F)#r96cx0gA!)*NVv&^5da{pu^ETC9E}1>i6+I7RA|u)k{7Vzqr<)P3O>+Na}P5ii#QUjqGgee4GL z(y=QSG@cJ+STEbUm1?*kA_V|1$cUJZn?qin0D3}^KPWFxq~nmFzZJdfd^!$OK8a)| z@Nz`Z8bmT}B@0LYa}7>gDG4C!onomSU*wgzLo|AHqxV#8!VGhdw3v;er<80ZJ7+pn zvH_&oqDpYm*wU!VWUPxYBf?_M_?8N1m^46NqAFvnHo-^oDbMS^VS(L4RVT0rYzyDS zgyz7^fx2S!DuUsoN1)XXOEh?FvWJ3v_J;Xnlodnk4&ZnhJFhI?jm$}Fdv4@RPm5@CX$?N9j~b!`kc2W0GUXTPOhMcoq3mb&?2p&%HC(KBf!|n}#LYG5n z|0i^LP$^`G|D+cHH%O_`Wv#;albAFlG+95M|0DWWq1gHfevpV#{B(XzFumZ?r?4dG z+1jV7r{jU@ExjvHkVxzTGNJGVWZoTr*W+aTl@Bf;GagI@OG9uWncqW~?_3(_^4SCD z%n4D3p9&DxZ*T`^DR=Fs3QhiEvIQnvV6p`!TVS#UCR<>#1wO+qpw~-SFk!tUKf}#1 zS@p>lm~4T`7MN^-$rhMwfzN0QWOXp#NB@*11(zVjvLx$&pQZ@p<5?>6-(f99_<8VK I=l<>g0hW%~E&u=k literal 42175 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 diff --git a/fpga/fpga_lf.bit b/fpga/fpga_lf.bit index ba6b4322e6d470175b46d7116b49ddceaa3408f3..dca02afcc2e275d3dcb454e6c3629be3fb1af94a 100644 GIT binary patch literal 42175 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 From e2f0f08202d463bad9162e368f922e06e776bb64 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 2 Jul 2020 11:52:16 +0200 Subject: [PATCH 0007/1047] added felica bit file --- fpga/fpga_felica.bit | Bin 0 -> 42179 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 fpga/fpga_felica.bit diff --git a/fpga/fpga_felica.bit b/fpga/fpga_felica.bit new file mode 100644 index 0000000000000000000000000000000000000000..dc68b740b025bee0adeee9d72a787e1216b84b5c GIT binary patch literal 42179 zcmeIbeRy2ebuYZmhs2R)q&b#lu0jkPjRYB#u{@TIacm=P%Z9446BI&IZf~C3F}SVU zm!=}k?IpLl>DC9fj18U;(l{wkp0ROKh4@X!HsH^|u@OWV11j}R9O96{5ugx<$lwrv zVZXn%&&QmR?cDtF{#Pc?6EC*5&g`}KUhB7hYp;DoRf!4je?;1H`Y(Uk^H`HY^smf!goD_TEy=L))ms@wj4cIF@Mo|VbaofK=!v}I;GH_UX}Xa!Zxnl*pU z?D^MUPk%wQx#v7SkACA%{xU;SBcjVPT9*H{GMb~2?3j@um;ammpI2oF?WOkCJ;(H(^M~}A`g@6UGrbPdB=?6UIqsjE}H4(-~?L@vq=H2Shub0|Cz| zLKrn2?lV$xt+QPuh4s)KXX!pl<}jYK7|%?%rl7xr4TMjzVu{@DIBiy)evl-!NY+b- zUM_@_*kbrN+U4}5Y`nv|U4NBU$;NHgJ(aK0YB^(~>K=W>drp^S(z}!qaoadZgEU{J zGZ3Dpg>F1!yzFfpQL|V4j-DD${JU{hKWi@-NK8OM=rsyqv@*-zHB>Q7&x>|iKhH>u zx2R3&wf}iqc&MgeyydM|*OZ58wKcALc$;2+w+JVVS1A#!fAY+4}I3UfWq>*_FfjUP`Y_+4_EsA45B9 z?$|UU=C>qd)6<)}$J^|*G+uK@pha97ZyRdeH(YswPUW8x*oSY(_wyYq6Fi<%)V?H< zGv27|;pa3|oS^5-*^A<%P5dKl09Noh>R{nnZ@uQ(MRU;HL@5bt+HF2U76fdPRu*3L zbhohXz2som)g96vr$&LHa!XoRJZA5^U|+o=*$qv{i2Eo3y1T5qw-)*O&6w3~E7onm zFiyE`B8~B&CC%d*_v|Z0tCpS77cNSC#TYYBiFPrQ#|*tXAsq1RD`n^Dq-fI2WhHw z--t`mPEnW@7b5AI7iP6Y#&RU zG~T11_07(&J87ItzBJHLgg^%{bG-RoTcOsuE#khqtc26#M#@eD(F%bRDShsFI` zqx<2WzEK*WMknawLU29%%GM8y-mcAdEQ6Lo+aW8kF9;*vx({JZ_fsa5*lEBG$~G77 z>#PoYchiO7yCfCi>z>>MEsoKzoF_*i97K!KtLWL6W}lGf=ms-hG)Cw}nl0iJ==>73 zk3w*lWO%Rkns?A{Gnwz&(8tTPshj-!C~`1VECN;+xI73=a%MRKW4tb< zJ$-t%cBlS^SWC%b><9W@`ktIwj79M4Abph_6Kin{Li4_*8BqfvJ&cy42q*Ayr){A< zBAKl&=)abDjtd}LN8h8?5ePnhiD}2^KSWzLQJDH0>!&oAw^ka0T8j|B_CkxNMC}CN zMyZp*TAZi$*PvI3Ut8#m({_6euPK1cy}Dp*(SHg7^D}DlaDZQF+EZ*1u>u_gu(rFg z34I~)z_2JGel4Tz!s&(nhqYa9uWbkNzXt0SJI_6|I&V84E)E ziqkuk=}rK)8~_=fW2^&yWuo|Xl@F&egn3XX#CP%1sLQ9=zUoL%%o|26`=AUEC*A-*`sJ|+| zE@zCR1;HTC598PN?B*Xq-3&J?PqP07T zd~Ck=U0txRlW-U8>jKzvSuoKO;@2226Cl8NgMKO71qAl%@=W2=LKpP>vP5mZdnYW zgkRQ9N)qFj&af4ex~z8)cXeka7QiY>6OwjRLNZ{XhBFlIPC__3pi4}GkZARcGBp3Ev&aK_V%o!(B? zE5I)Rz&XGKT*?V?J~`X1=`r@wZ_qhjEaBH(v?u>)1HAFu76N;BX+clhYZ3pX@+JIA z1Dlc#`ix;~m3+91n55|Aml?OWQ;K34#3WncDzUh6_)Nt7PKaMMcVXAH(fUFYZ>?=^ zO`&No{fftvFX7kO`tz4{&}9?GA^I(7h4P2W;TJ>vs+h?CPR^$Ih_Q`ca<*o%aP4$n zGJXN|)Otz#7qn*}S!WID&CXgknH?N7K1X|GYZ-pIw4I#zAnDEWkwuOG1jNyzoL@!Y#HvVlR@*L%#!M|wj#^nF7p3s&7=F{0vnEIArJRyE9 zrv9SiSZ1H@%$5julR7NU(<|g(b=qq1udc(De?~jx%xu+Ra2X%SLi{4pPZ_N2RIBk_ z3$%iaWzck?3q%X}*OiZ1SRIk*0SceDJC;CTq*n39Xl0f$WvHUa^CJ?gurqmD%vB1Y z)%=9~YXj}jVKSde9%lTK)^ga60Bml)`OZO|iP7`#u! zLi~DT(Q~40NqjF{<#UVL1s1Lu8(TTpkbnKfKyPpIp23{{Lt3*hy(pg3;jumc9Ko+O z7JPW2@(o(E2(;@Vz2w6K`!cDQoSRl=^x@84{CX;<55Uj>WD)$jW78mQn-5y?OKW6E z(Jm(-k5T?bOuLM8@bfo{S_Ub9%q9M%KSK*#^f_yt(%|AoOMOcCMV!_EY!v}pj}q*H z1qEaw|9Tc7;(2lkTk<2VL4ttpKtTetnYqWqvp|MSn>aDDGBOmG)SOUsuv9(I{fs%2%Do zXy*PZQQFTTe(Cyv1poS?@t$@<-dL>ZGG3+MK>(12{0jrozAs{r>0{>eD`7G@gZ;d+ zodCbUzy7T-`}O!K?LBcecjK}6%91}U@h|6zDNRePyZa8gWA=<^En$2%u&E{{Eqtu-h?yLR@aZQqB7_(dcU0x!+zOH66D?yJg`^a}VF z@Czv~0_LhP)m@f1(zd@AA^)1NPE?<-e|c#2wgqB1Vx2e6iM0~Esf>U5o^2gW2E4Kj_{EqD@D1@xp+ga9b&Pfm zg2EJl7mV)_`~v^-wb(+(7cpJZ(+E7u@hkM|XA#Oi<*x6+da<9ciQv~3JZG-tn1oIV zz&i7<=WPyPO8LVyqm}f=gJIN6=vN^xs)C9Tze2R)SOOsg_!p2!1r;HFfq%&v*%+q{ z8MdnC;WtVWqW{4UN`53km@9NXVWc>OThB`B^(uO6brgNB*#y`=~e}#IMbCO6L~%s8d)1)!E185Wn)6mM>$dyryuT0D2OBOcLT(3TX8? zMk^1tKnGS{fM2jLoxMcmGL5$u?5h@*qWngPU!mvs_H(R9|19m`40)J8Wd60IZw8~) ze^;;-pJy;5yKy{QAgj?uWT?<@mBF0_|WCZ609;a6Pi{^8S=Mx|t^fkrmWOzSo_F3&b z{gWGK-*VpS*cb1CUN6CC)=otE*S}ybstdXYTQvpabDiv;;ix0{#b|~2@R$nq@uM_- z&u-=43h|4zKnvDXEoD^(_@($)DSrt3;^+8&tb+%ZR{X2B5aD0+bBr)Cp?@iW+7od2 zDxMGWhZPfa(3;wu7%|?Vv(8LWa~OKP&%}8=z%SPxa|UISVng~-+Lcp7jpN(fTc$f2{ZsKGNiz4^9iDHmH>_&cm zTx=VRf7SRkjc9FRMgh-J1Uzrpro(GGqNNDq=~=cxFUmD*9ND7Qg2(fHz0Hf&ixpYg z*ym7{S@(%S={TY)Q_Z+sbYm_0JTE_A&@Rv1>oz5=FCy!>S~jhy1{QeuwNkgd=X6;W zRQ%)2=nQS@vQ8wlhp{)}7*7Uz#p-k(4v8xti=WqT1Z?S};&=9q!>!nCy5e82mGXzf z^ju%dNMbkCfx8gtLX*E~^FjV_WXeM}QWj6gdircOA_3d+4L=*?4<+(>19EwBDG&7t zV6F#b5MnD!`NJ0~`zblHw5<~xGK=_d9u^mojJwt;Bo#Q>x)wsighZlm2VUAoS~b_2Bo=z z)^xS5?0QIlgLb*VuX_F4v}=E|J5>*dZ}S{BR9sfKMz%2Zc!Lc@q#n}$f{<0~MoXo) z7C8SB@cc_GTYt6+G0BqZujr=Oii5C*ujsnQj{$z&nI9RNZ^va*kxmaSoDY7n9FBUM z9XE|uqnrC|xbi*uTWbGnq}R@x@0%cEuc(8t_Lb{jiG}!e0%!${8%2)s1!`LYb((3P zKxTjeTJ2|?e+6h&v<9gqUvpn|vhT3mZPWxmEEiAoqHW* zsBZ1kHT4|MAFdIfTdw%m8n;DMb?fzXFS1yJ-Fl^;Kb-QW!)e1?{>AvA4#Jy_Z@_rg zNHxzX&%Rb_t3G}zg+3dMH}c0VfSuxBjsmg}zcxyo4^sNx{zmYxHcXV^U_-WnLK)Sb zeWfZsMi1;yRwEm9TmY;Ni>s6EW88>zE-`X}KNAf(Vo z%`@_c2F`OQtP%Y-t&bW65TjUM{k(%yVQ#m)S@KLtvLO#6~3H@I(AM?Y<g&xf7qByFF`mI5Wkqh%JjVye})ILHCU2}ECxw-(kCowk{IiaFJUrEF$(hT$`t zxsPvOR3m_}NIUy!7Q+51nj<*BL9j%gedVv5FyY=Q<^qXMK$t0v37rL4Q;1*8zd9U5 z7s&S}Z&)5b486d=iby1u^DhT_p@zZEFdVBfBU%jbYY_H@SVAIlU_)zht;`+AEFW{r z`B$F#j)0Tl=e()-7lg2WL(M$vbqwM6&f)Y<;|zJ{m4@rtS5Z?ug%a%E-zPxr33T@J zY|-;CZ)f5;G?#(?*LaT4;~ZWub^b-Iy|F^)F@&Hx#)E|IPX+iz`S};633_oK$4zB; zEk@G&&{EF79I!1efoLoO$bKZgJ_sx*<6p=Y;yK1a{b^Bf>~gLUi~Ij@2<|PqKjMT`R{g#Qa#D%W}q;c3f@~%OK!TN%_?a`Pb{(E>}U) z>-MhUq=@JANdD00U$2|HvR)s?F9AclkbgZxTXDDv_)~&_q3zckp68u4r7_b^3AfA# zVJB%D_INq}Vy}*K&)>NnSriYvrwB{!Wd5}XR*A$NC$zs}Tnhx5jo&iL`4_>ukM<2R zYzk!?W0&I2bm&xqPZ9bU?OC*pNkzLJ;wNy@Xd!d?8Ljv5 zYr3KB@R}yC~TWcFUpQQJmjbsZw!6N<5pIWehBd)unF^=U4=wF##6?> zX1Y~9$x&x7HR>_ZXVcfD>f_^A)>J;zt;*=GT>xxhxykv4=S2^j3R8wqGr*h?$3w@o zGqSCi*cod@%3qDSjDNMewS}q5Ik-><#c!JG6XF-U6vbRl0?7WpH&Ha^fy>O6@S^S# z^%f+O9ijZ>76jj5&f|gW05By%|V7#QQl1P~dnTx<~3aTqi-w_B4ZQxfL zGuAe&p5w6YBNa7tpVL~j7WUP2Z>PELAYvN}i^Agx^M{|1{W4u7r>+)@?Ys;Z7f1GK zGwT)NR~rq;8Oesjb#=MDgV&@GVqHZ)=)GnlieHxF(n2fkAk8vC8JTX2#pzv|<4(pe z@UMT@&W`?$Zv1PUe<>hyv0kH!gK3Lt zrL#I$*KF>xJ?xIuZ-{N#_;d{8C$v-4+A$ta8xo1YFXaJO!=He3~RXxweHm&vt`$@q@>3Gl1pI_jetd239+f>x0sKk*jm(r(6`==oP? ze?EN}Vc{p~5zQ%Tj9=R+%T+^R{%|hcYt8JovXx&*t)`~YstN38@Glp5G48D?@`qw| z4!Co>@n3!v*Sv{AmJPO3ek$(C$KLIs|2$r1JAB+F`Tev^?^n9-@W$!y4v{Hv+cq998@)A(THv%S0LfayhzK zjPoz&2C8w59y&r0BKU>#FZg-zueWKpNM@{cdLs>uCg)UNoPQO>3e&2p7M(e>nXW6t zFUD?YdW@e#Ftoh(C=6CF!!Kwtc*|p0g7?J@zo;2E{wE!=Zs@6r;MZP%=JhW@<%Od& zdyVX^zs)^448219f(^>{T+LoQ=ikL#8E-W17bnF$0U#SS9iBp;e;qY;GK|83)a0sD z^u0AnwG6T(N2})5T{Wd& zIz6c<|3V#6dNh`4I|zsCaQ-kM`bGX_*jI>Oiht!28xhK$p3-)2&5)522dFKN6S4C1 zuLgLwqJ0lsb)v#}O+VSSkbPYle!)W);41fFcf`L5zskHIo-?BOMXe_g@(qIvCk60p zz}Y91e=gw{M^*xR_4U3r^#2HJRBxyI#UqpX7ndE{o!}|ja$)sUKO{KMmMX_D(Jo^Q zTO;H1TbA9|-?V9DXm(4ygkM*(duOk{7(xmm79dIf68Hrn%pZD)##{!ScmGYz6~<@k zUyyBCc$*9PR}qE}yBN@u=3z>j<@n`SnBXAHPKm1en_t+}EApZ$f?u0~Xsw;GT%QNo z)=^LoVtSa#@@BB+7m{RQ$^LZF!^?xke1cVU3Hhbq^>;{k1!mgPax~%ql^7q!Y_JX&N>?F0vCQapDEUM zJ$*Ty7?|VMM(_(hfu0nJ&Hb-?u5#1tE%dS%8%Oa=BKtIAETHoo*#FX)JA8zNGW^9GEohcR9=9P6ok=qrzTV-E2PW<_azuvs@D zG`q2R`o4;7-OX-Q1iyI9I42tTsDts$brS>q-=>pp+jt!IUON9m1lyg+_isc8+Gi1d!L|V9*d0R4~OL}2U_gKao%ia*$C>qQOH5% z`NP59WY!wI75u9=iNmYQj-lqHO|V{OhQEvRhe)q!@N9$i9IN9Vhwt#q@asOAe9e+q zG}EBgLL~e0VvkU|hy3dxjmWln%iNDXrVrCR)TIFE&xj{vx(vVgI>6r*rjDEE0kyGF z<20RJ)FGf?1i#?@Y?S#S|BgU<-9H;E%`^Fh8*0n&tM90TnZF}$BBi_!X4OnP-PXg< zE976F)cc-udZE`ktc623bE$Inh_qdXU(M@fQ{DoXu^*C+uUD_^yPO`AGaMW$`T315 zD^B~e1(9x>I@tFv$~I~pgKvbjQxv}*_Hfz7S;-jPsMUPR*eRf?gkGbSS)OOkAHL(U zfNSeU^h`0mGnu9lXIqi?bBJGYq%~x$2d8hVnTQEJL#u5tjxzj$Psql)`szpye#F7y zLY+AvaqbYsFLS%*AXAD{n0~i;)S9KIrX92$|4>Zm$ zT!3HNde;CEqXlNdjonRWp?eg+-jIw|3Hx6_2duVE1q#o(W&Df&$N_9Eiscrskh`?G z5cD?(e}Y6Jgc5#f3~fsvs-9#2fbJBrLv%viPs#o06UiT<{!o0l`- zTFzO5DmdT1P``nt+eWeb`jh#SLn!p+Lc3wHZGK`P%pZP;%Qmp_(?c-t(^eM-$CG$l*XMEd4 zA^jI(Uo*xAa3d_6j^dYf%9+~*y@vIFx8^QNY?%5+79Ntbj^X)NUcnYt5CYA&Kj|)h z4Kr4jKdhLCa}Wo66Z!eWDPQCGP*|d`Va2@- zjSpcwhvh)#dOJ3uw|JOB#2oD--PWh{hZps-F?Q*{MX=O33acde5qzBbVYrm^ij>{A zPWHOaCI#Y_a2)7vd484ihZ9S#EyPpRkI;Q`+wF<@i-+a&#Z6uC3I2DXegll`Dw)VP z3VNpsKvwuFf~95_5M3z$tl8i)*6hM9+l)Dt56IcVJZiK_Tm&=moPdAPauvqMcE*}< z&A}0=p-zXmN)UR5_|>W*SKwj=Q|9;Vq^lRI(W*@rU>f6Ct?_L1i#MPv-jP? zX~Xlp0S+7A)cN8=IetCWtru}`6hw@YSp>JO4M+gGeE#Ll598NXCsmBufUVtFpO~y1 zqCo^yRvCWn(*DMcZRk5jJL@(HkkA(Tu1tbuM)QYfa=YF28xZ@QmTm7OrWp*W zwbo%g1+(>TYeQcn7EY~2h+oSPOEgPsdfh<_K}8N{KsW0WeQ*gS%pYDwTL-TxfVqIn z^r9BxWZjp=fNU(5^DkrzC2lJpq<8Fv12vggmop*?E*RO%yqgL28{n0r3*;?){&kkF zCgcxyLQr~*R%W>mP_V5-KAyt zwL>;;MzscW#u@q8VZDx4A%FNUQT)Pk!~bx8V`ny92j8MopQ|$45&S}ZuS^^@z`r^> za*4Z)`KcE-!zYyUFM({~fQDEd*S^;G#)|q$s~o?Wp0s&&afrvd6W{D#L0oA7ZxiKT zZn6j@Qv9NO>4xe`;n&xd@C$JrvW1*lR6?QpuF9YWFNhCKP#DLBI^Z&O5H_F&4;R6f z;HGv7zv%S%HV0Z@%tEEbvepP|QO3XC&%;ZMF2?1xJb-L8hWe;{J6F_~@h`yED17EA zfz;xtF^8Vh(K3mD!AnS3)6U*j*(Iw}Iwulik|O!Tt?U6Bbkxr~TzlDKYK&jdB7$FA zS@*B7?q;j#%B^aay(zSm|pU*%xnSV(qV`-$w$XRfZkHf2{ z*l&dSL!5tEh^z$mGXuxk6Lp`3a9z=w%)gwtUpBuf(PjJ@GJ$)>qxYA$K#TSVXUe8y zi1}eMWNfj{h`DS#W&CTllX$M_oZxFj@so?MTJq9{sgvptAGbFyi7nEPpzLtQaCHyz znX5DEBACyK7{5@qL9rE;N30*Vh!5ZY!l{r8T!!vQ%U_Ygeeix7 za^dGkO85o)qQnF6W9Lzu5zq9`pqCcSR`y=vU#A7s89<*idi$YUaMmx*IB*UT{5lKM zo85zbxR60%6`bcBCM@hT1N_4I*Um-BcVg8@2|h(gl>KwE5;Y7SHkHo5wpmFT+lW3$ zrtOby)n{54;1?k#*@yicXMkn}<2W~mp+)fPF2*l{6{NkjkVdol5^ZC>%J>(&pKE*x zW4_V7OrTEBzabmq*E=d)Nskz}5@?r$!kg1NPQ)mlH8Misg^T;kxU*ISTD8(15UAMB zx^cVTX(7aQj<*&gz%Rg-zzsFx!4rfL>bF*qMS8MVtry>4hD(vC1WV_ccEuj#K29yI z%;^~qn`qjYJTBVWEYp}tr}wutt;RkflkJq*iO`P~SM# zV(xzHA>;F&ufzK{C?}mwDZ5fK1s;vXH;vF&o$nW|hpPSh!=lzg_shntb=S35)2at& zI7{!rP3f=88Ch_dF7I5X%d+S{x-y;dDb?%be!R^A1x4fXKeR7xh_~r=mDtUUUka@T z5?RpX_igrvQ0F%wnAl^Zmu0!nPzB1K+4SZ{#rim7`x%_sH#jd?+Q*j0Zx*N6PZ zQtER_vXiOC`2|mcH79t^__XiRTPIp~Ccba{%01xD&Bup~dHMmTV=%pHr=li4 ze#Jpp92@dAE<|K&jpPrX%eSpupVP*0c^1x-?T*0`-) zZRmLOjPoyjjn&j08`V#UAJ{Vm1Y87j(_DyH8Q|9(MDH5~=I0Qc3<}A>Wd!4w6{$bW za@i`}vY{}S67JMr>cFr0@dwt1^@m)|>-l->I1BdF_awiFW9BQy(Mn}I8?au#rW-_j z6rB2fZMIm)wQAsB-SOLFW%Y+i!af9kdByZmck zw@;m`{}=#-Tj|waJ%Dv3uH-P=^6MN(1t-YHch8goe)0P^evaQl82_GlpM{eM>`~9w zgLvK!_}9Z?b@vRh6!}d1vD;@1K(8a6ct3!f%2tQ`YcG#b#%}BTnS(txiaj<#1NMv+ z05U)q>y@p4!NJ-3wpa>CT^LE{m!@}NRXnz^Cg}qb7vqAR2F(yWB@aY*2TEnrB%7*pe;9*kI=y4nh$J9Ar%F z#IB2Nfem)^bG-TuL{@~llx@%z0s=+GFIkNpslE&K8>dO_ALhaUXo;boq`L(cg?TnU z`I;jfy=!n6ULhicQ7@hsL9W}ydLhm0Vs*{|6lP~?-$Nli<1$*p`i*0NQQ!`rTRnLw zX<7fE7oD~8qbGo96W%;C|3a)Tu-#J?oCFzfY_ z+(yj;A%qGla4Hn#U*Iy$Kr3*WuYH?~(l1})*Fv22d?x1)k@s8T@vpis41#u9Dp}3^ z3p*Mg#lQIN4a~pJH7syr6OWv=5iIRz{Hn}yAFkg(o^6!%BIqU8??&Ah>NCeNV-fzf zny=t7|Jvr@n7i%1df?ZLgJ^lj^JDz}jdilI=#5!k!&QUx8~yi36+Qdn_ix}t?1)-Z z=za()w>o}JX@q~hm~Shj^DvqBXa~QDV;&vQT4g-1m(IU1ReOUiIv=n#Re{0<^&4$& z4O}IHjc}RvG1A0;gRM0k)W1r5MQ8Xsw@(<&qKp#qR{G^7>#yqK`hAe^n5d z9m4ZJgTSn~#G1nRMgCnXo@Ue^3RqK{Q=`mk2#M$i`f*Wrs2y*V3iF3ozCpj0Pxb(6 z-vE%QwBe7W0^c(J#d*;ToTo_#e;8vrghd1Z$PiJ5i*$f$*dp#E^$n9gh~t;+ayyy%99 z!DC(@%^#{3{D@zQg8F#~fnKk8{?L1W)Hdc{85(gIwh$w~wQO~}Zf8n%?fL1@E$8GSh9{nua zpn&i!IlRZ5`Vra*F(vh3LY>1X`$K_AU~jX*^Q)@o~!?|3IYVZ0A}=lYGQ zKG%~t2!|H?p#^dvqJ1P$`1CQy*K0Fn_`7ibi_Te$Rv!Oy6BAQG#I%l4_?DvgUA^W? ztj;FR4W?&|Xj5*|AUfK}(-Znzo zkm9a^du`YW(fUKaznpaN{*4wwA!4?ALtQK3o-bE)__{NG@$ry_Q)jj>LZBFO#z_4k z(vOT*&4iaEP)ngNO&<5`^zn;ue;Kb=+7QPr02&b}19-@Y>rcz1i`9wd59ukH06o#q zZR{9M9D>8g3oEcFCH}PqYuZM&d1D6s5(ZoQ5H>B=)O(J@YwFc+U_2SDS3f|iYYqU~ zuP`a$7waXe2^h19nyF=BA8V=>#m^sRHLl-ia;(2bslY%ELGtZ=ucAelMK-KL3J!A+13hT?m|b`CAvci?aHS#%%R?-+cPI+gPk-@b$+$f%U@&_+@T4onn=` zo3qX-R%di%iKWs#f?ua;>rgFjdpWO)+23g`8Y6Vt!9Fa{AHuWM%6gi(_UCOza{=?zoSoje-zHYPMJ4~TSkpT*6-+gfjBCx*6{O(%)eN#yX?g) z6n;U$IRQFE>o+P|!N2Mp;_uIpou47pkh|8XZgPFEP&v;YUN7)3 za~I7N)?s~4_x;oa0eR6~4tz@#zxdm4UH2eLG5};Z!@in>@kH~7h6h{vDcURkPA!U5 zYY{#FGOuz#yONlw`Pu`n;iwtInnv+UPs*}_-mwih;_!nk__jB3#*NqO+hIMp8ehlYdu`3AomtTw4A8rXo zSfmMTNDOt{^lit_A2R?_OpLo?kCKW|c>Oyy9gH%Qy% zU2ZHB%^#jZ>NPQB{0;A)?(_y@h`9a`{xHNZRiT|npSQ4-3vqVbyApm(_3_Vln13O} z>Vuu4Y+lI| z75|d0>{sK~cIgzYOm(=Xetus1_4Bm_l|Mw;M&3vTer!_yFxF!nF;&`-@2vS_F2gUi zIt*lpH%8FsSqPKytG0+bJqEJY;^3hEH*{ZbYjNo${8FBc-TPhp8XWyuZ4(5X6P4kY zf@}{aQiaR^5|O8BiSjRR<~_F@A9(r%z2&u(;g_0uCdCkr8^iiJOSOdgL&h()g1&o~ z#xV=$UkFZsgAUKLhhM>XMltxu^xt&eH_|qNSfUKS()$c{-P_%?`{DY&A6j*;Ie|SE zIsfuKe+U6Ta=s-u9-Vyt#b||hxZ(X#E^_Y&#mh8j5`Ous6Y6!Axc(4(EP`JVy^y-+ z00swqYCn7NpxVXE$ zO$pKZ4Sc%fB7WlB3R*bqg=6NN=ZCv1Q4hdE+4)yQ_nC|S_^^J0?gye>fM4Nw79}1w-h^Ys+oEzo zP9~*o4iGI^ixU5e;#b-H44|fTgrnth{GwKgc%IL{lrVzxWhF%Um$#$5u#gSS1_uGJ zEAcPIw!HnU&U3SME)8&Yt_;8Yw?+B+Lrx_AP~OP*zasS;q3vLCU2IwvNAWMdwEeEd@H zKMZs)P~MFtbwQF+5}rSD{uPe-UEY2V!Qnp*yFlO?!LP87+O&gBN-qJueEeem74a>z zojAX+9eK8FIez(Qh57`J6Qu6ygC;7b3VJzyxoBY@o@}rlOdd1AL2l60(SnX^y@wSe-KbLN4x$C~x?VY+TX6 zFSSrF#VxBp#P)OJTQNUHnn&?jcdok#|AH2{wyd31^)}FJZ=ly`WfqXD>NmhEz4<{r zCNIsuTv&>QsxC*SB0yG#UmJ_aA6`!P%8gl-NW6f5K~rA$WUW9VaRQUzIT`H3GXB*j z(|N>oFAmP$fH;bQ>{9sUplri0y7s(Z8GfleTcy~S%Lwe}(0P{O*CwP5absr92n#Ad zra&r!Un+F;XcuD0NS`SG!rL~GHdMI+VcEJ5WM%j@A&`GIjU-;g(Z*%-$|p?5uZ^hI z_$Hriv014?dJmhT_$Au9Ymu+hf5L7jqE`gJaDw1i_kni7T`>Owka>s}$sazBE6LT} zC~du0HfF8vI(`wN&lv;$1vo~Iaa8AfZB0w8iPHR(@`u2tHqn|hJ_7#rU{5+So+$sK zC!tR4*#R$}FReuczmVI}<8J?iGiEKI`2N!TMEMv0S%)pCFuTu97OY3>7|8Jc-tzn* zZJ9{@Kz~U*GMYLuZ%%2CmH3whn6QzH8`W^1ksvTAsCtPA|5D-iJ;=@#<-8*NSO{bh z{PJTGPPok_E_kqf-x9^I-UW_1f)jAA2Z$eJAe+p;Xs^A|P2G)aDLZK6C=89qqvFFd z{Q52r^>!H1b=2aGIm*8nzi`|M`=Sb2$fgco5wWibeu3V?-kbgg++n^`D*+t-n4|b5 zREYH~os`#3R1`|SE`ncYb7$Q2gi+9!QM;2EZVG*7gnvCnO}za$E!H|3+iPsO2>;q? zwJ@}8rXgw__JK^XfHM4YP=XF$_Xwp4=U<`Uh~U>rz(ky;ZZUtQwY#?zE(`UV#J}JM zCxA_yNW3ichh_K`#v2g$fbSs952g>t@9HIw9b%43O zTC;%Di{ckv=U7rX-A5Cc>jDSPQ=R3zg%eHZ>{6TNzNZ;(NczAQN5UeACO9~viza4 zCf}?wi2YX4b+V?XvkbqYW4;IPox{sI@)+|Z{^hSJwrEDLk*JT7Rg>^5vFPio5WOQDs=t*STZ&33PwUj~qh;8%o$ zAd&c>{sp>!(IX6GQT*~ezk;nL)wW(Q_;d*`#k~aovg7yl-+8h7UmjX1s9kA*c0Hg9 zIWEb+x)YPsDV;e#3kJe3UaH>Es|$F95!JaQ?N~ zF4G;ftC{bAvF?@Lxs3Pz`N%wj2Er}`=Gl&=yz}LY@vqH%5e$i`vif;10`Xy;fL|lo zZIjQxJhtWYuT3Cgc%yHAMiE;?*+u028@`L1SNS&exlRsQtP*|&=-}_??#lmzzYx?o zT9w5E)pNLhBjjH@gkSscudD1 z?-12aw0=G^W;neJunB={KAw-Ycx&pt|1jbcZh>C>F5E6fFf;sJllT{&!-a_8Um{+N z<_|;u#jjYz{+VO;7x!jUdHv%23qFDO*xFv4V4{z=7Ak)j@Jd$j!?t?o9u7Cl-aqf@ z6~J*07yO^6Z2|%Ch4|(B!%+nGT!;vex;TE_P^>{+W&Y>h3i|lP^@p4`^zrN31J>%k zkKp|4T5g#z)%m$^qv@2f^126{JEsEeF`Mb-<8(q}ZK z{u|Z0%qt`H8(vn8)w#i~ao4^fSb(3uD1K?}&lxzh)z@;;psao)vRuYQ|CV{fy)$0( z^M`8ip%z8YzSQ4O@ig@pcMjquf0fJlR~dd)Es&SyUn*@_BaNctN5YrFuSB8$;`}Ru zU$C7pNq8yziuSoEe(7nx_H{A-<&RMLXFKsgKfgapMY$K`56Q!?#O@~iA(b-z6`X&; z^M~q;X+fV-{YDADkUvBsF{}6&f^DCFbyZ-5dR)Y8f2eB%0WD$u#%4cd+UZYAp>s?y zqE!RCFM(f6A2!~QySy>`{A;DQInV+Je7ya(A(rsR9IfAo;Fq2l=zlHl&rccuYE}6| zZMW7sh?nM#<1C;RLC&S{s~8v>+tu)93`vv=X5`M*)b^*V}5?`EpG5!_xErW3H z>TLjSZJ0mg^DpLce*W;ER-mN$oaMKK^&1|3)%GNh;LjV~D1c4gcoJd$&?c`>V1r_5 z&<8E9XJ0G9zal;}wFqm9cf{-J@9Q1*{A%$2D0nUQ39T;Z)33!I_`_J3Kg{7yFY5&@ zlsY-qE8vwr|HAp#6fZ+{8T-ry`)-+7yjS}TEnuJN*Dy%bAMT;g;mN=hIL2Js%UgG=9banRNc8_*b1bKY*<<$JhN5{L99|sp=YN3f`phBt>m6mY~GH2u&#}2LZpt)!D1O=Q!NQKmUsGLA5uuR_ugJ;g^73xOJ$d-L)ZpIg{`!ix<)V zNHC(IC}Lz1er14P;9nAPlp8Rz5WmXxlGs`&xc-p$*d_4mb|@IW*YOhkYY9x|p!hLe z<3hNAe+jmCg}Qo7WWe^TDwfe7MOkqriGiu0J%( z&cBub0=WJ#B_Q-^{Fuo5=V7@gsdYa7kmWBnO{(AE_iuP3RKiLO1NWCP9t{3Fm1?gx zRD^vtqw`$;QP>jAACiJC#lQT6Fs~(&KMc>mCJXy7&c8<0{Co`f1>q9-mBn~o$C%YT zm*o!wj%Kz`@LD*2pGf{NitiLhAw4Ea;rm7KOPzlqL=O+bF2TRXtql8cZ;xFZzwjd8 zATYyzo`he1{k$qWd{y|2>=OLzfU+GQ(JsNi93RLOqFvAuBG&fPBon`hx5P_gtq@%i!BrQv~)8$kll~7NbtjJP>YVrF#(^c_#?X&Vv zooORcVHvjs-}Q_DNHtI;e*Hor7;~4I)GXQQ;O%w3AWg?>kwKr2S9JDv=Wk0*s}2NR z6Y{pgZRu$g=oQyKO@HD}%Tz4$gdPZgO2VCzF-52s3Aj)EnQH*2Cs+`$Yls&4eV)l8 z8Qh1%DC9*-f`->=OKXw;UC)S$toC2&GngMw5YyykE3_`OObf>>j4U07?+1xt;c}`O z#NQ_OS^~W~%}j6HS!~(x{GlLKOE8C$u(9!W5+XMg>^8r}A@#wUX5=zws%7pEgr_Uo zT-D+>dVQYhtjPA>?tI3Y))xrq;5@yNi*-tl2ai@6pMS9e}*sPZHX<1m@<(BDs zk0Gkmmdo3hU*1r$Y6^rb3)=GDuIy(Trb)lgO`@Vl`z-w_O>>p-X{u*onQHOB>!wc1 z$_A&>!uDiAZP+Y!E?Q(T=1!z9EvM76`;?#-&cO$Fk z+njo(NG3OYmi6X0$jhCfj8} zQ$kh@+KWxw4g0WJiKu;zQZree#rd5ov{_YiF(TGOVA zmHYmz=QHc3J;Fi;LQ_STC& zvQruc&{BHNP2E#&Gyg=JCPHCRx9znA-(?{M+TDl0eGm#=XsPFxpbJ%Nx)gakWd=g2 zCF~P7K23+*>oYaWe8GaCJ;W^{=w$g2P*K8y%Y1ZjgFa0SUC-LH2G%Y2h4}I&Tex+Z zfpv{R7wR~F%lZE}f8zZ67YbpYKSW6XG&c9?Ul+FD#lrpk&a5qi=d{=#@2$%(8JbcO%#TZM`Bd-}H%`iR zW#GCd3&Qq#xgi`YK`Q~Y&|sbXv0M?D4ciZ~{ji`6sno~JY7OubjS|8J2vb<#mMPME zj!iL1Ph>PGddyohXrCq#0@aM3bVEFLYGi zY-aa0WNwa6={K`33mOEpRK}-Be-1TK?oRZ;uPDKLj@HF+%qR?8wpq{=Ko3-gxD5MJ zvB6E+6bN>`d6TB8mWm3r1nU)v#iDE8S6T~Fa7-H`xEum>$-X{ed|C{TUO%UXg+paR z@Lie(&;MCD2@5=QaJ~5KCkkd^K!nD1Xu#Y`Jjg}>JTS6e~ z4!u4%;6Ol2*oQz+ED#iMSaywy%(i+yveXCG=3|zHI!)re6|{JrB7nv}w77d`uoeC1 zSd@~LsJ_GXL0scau|OO0*QyqNB!4XY54VIQIVL}H1cGEkRA3qQX&I>7NJF1*v8z|N zY&^JSd8=LBt9vbBp9Zr9S}b<#4d%6)nY-1o8!E5$q5|)$@J%$3!EAKuwxcF$F@$^P zdGixI$F>oEAEeKd-F=y(4I?0*Uer>WiI(a6y&cWZ;pxS!iUD&uB63XcK&o+>wMfVH zPXE(JCX}(6mn&shJ-c^_a|eDs_`rL@WjPGJjyK^`WOL&n7B1)kLZapf|J_Z^UaNzD zhIzILYob1Ou)KEQkAnv9=R^w^B7l_yqJs@21Ho@eB!X@vNhn#Da5Qj-^dTnmWgka6 z(r@sG=}_2G>gg!4ky7DMyq2Ix$NBT;UH*@&&%fjeVN1{jw(R$b2v2#Pe_x+3`@eOu zKK`$Foc{x!6MXx{o^$>wmzy!LJxbvJP#@2hJFDwE2TYi7CyaVk<^o%`v7;7IgM=*$ zOgW62ZJCK^_<`kG*sJvdn@z^CX><2Zw&jc&S013A-LPb%Zm4Y6NG^&z$CA~a#aYUP zvDu_-W}x&Jk8KblcA_t=!={zd79Np>vHH(pqn7KOBn`@I9sF&(Wbh=|yKl?}mu8ew7OMUg~_Kk8#wAg)~?s$$_=UHxp$*!r>Y2dVqUqP|AdC37*p?ec z2b|@~IpkGK)RybWRP%!;r%My1vTojR@c*1SAmj(?1*Vs3be?DB7BK<-N7*uAx~!bP zKzNu*-bj9*EsNj@>fejna<`Pqy31@CO)z0YX#9`*xZXd(|2u)@TGEoL5!N02u=KCj z1YaF)&+<;8d0zcbKR@I0?{z%&du-7EQO8pq|94ydeKz=;z;E~hf3f<6;|a~Y3=hLKQu3JhC2WF(!D Date: Thu, 2 Jul 2020 12:32:55 +0200 Subject: [PATCH 0008/1047] chg: scc frames 16 or 8 bit wide --- armsrc/fpgaloader.c | 18 +++++++++------- armsrc/fpgaloader.h | 50 +++++++++++++++++++++++++++------------------ 2 files changed, 41 insertions(+), 27 deletions(-) diff --git a/armsrc/fpgaloader.c b/armsrc/fpgaloader.c index f1f157eec..8313404bf 100644 --- a/armsrc/fpgaloader.c +++ b/armsrc/fpgaloader.c @@ -134,7 +134,7 @@ void SetupSpi(int mode) { // Set up the synchronous serial port with the set of options that fits // the FPGA mode. Both RX and TX are always enabled. //----------------------------------------------------------------------------- -void FpgaSetupSsc(void) { +void FpgaSetupSsc(uint16_t fpga_mode) { // First configure the GPIOs, and get ourselves a clock. AT91C_BASE_PIOA->PIO_ASR = GPIO_SSC_FRAME | @@ -152,12 +152,16 @@ void FpgaSetupSsc(void) { // data and frame signal is sampled on falling edge of RK AT91C_BASE_SSC->SSC_RCMR = SSC_CLOCK_MODE_SELECT(1) | SSC_CLOCK_MODE_START(1); - // 8 bits per transfer, no loopback, MSB first, 1 transfer per sync + // 8, 16 or 32 bits per transfer, no loopback, MSB first, 1 transfer per sync // pulse, no output sync - AT91C_BASE_SSC->SSC_RFMR = SSC_FRAME_MODE_BITS_IN_WORD(8) | AT91C_SSC_MSBF | SSC_FRAME_MODE_WORDS_PER_TRANSFER(0); + if ((fpga_mode & FPGA_MAJOR_MODE_MASK) == FPGA_MAJOR_MODE_HF_READER && FpgaGetCurrent() == FPGA_BITSTREAM_HF) { + AT91C_BASE_SSC->SSC_RFMR = SSC_FRAME_MODE_BITS_IN_WORD(16) | AT91C_SSC_MSBF | SSC_FRAME_MODE_WORDS_PER_TRANSFER(0); + } else { + AT91C_BASE_SSC->SSC_RFMR = SSC_FRAME_MODE_BITS_IN_WORD(8) | AT91C_SSC_MSBF | SSC_FRAME_MODE_WORDS_PER_TRANSFER(0); + } - // TX clock comes from TK pin, no clock output, outputs change on falling - // edge of TK, frame sync is sampled on rising edge of TK, start TX on rising edge of TF + // TX clock comes from TK pin, no clock output, outputs change on rising edge of TK, + // TF (frame sync) is sampled on falling edge of TK, start TX on rising edge of TF AT91C_BASE_SSC->SSC_TCMR = SSC_CLOCK_MODE_SELECT(2) | SSC_CLOCK_MODE_START(5); // tx framing is the same as the rx framing @@ -171,7 +175,7 @@ void FpgaSetupSsc(void) { // a single buffer as a circular buffer (so that we just chain back to // ourselves, not to another buffer). //----------------------------------------------------------------------------- -bool FpgaSetupSscDma(uint8_t *buf, int len) { +bool FpgaSetupSscDma(uint8_t *buf, uint16_t len) { if (buf == NULL) return false; FpgaDisableSscDma(); @@ -439,7 +443,7 @@ void FpgaDownloadAndGo(int bitstream_version) { // The bit format is: C3 C2 C1 C0 D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0 // where C is the 4 bit command and D is the 12 bit data // -// @params cmd and v gets or over eachother. Take careful note of overlapping bits. +// @params cmd and v gets OR:ED over each other. Take careful note of overlapping bits. //----------------------------------------------------------------------------- void FpgaSendCommand(uint16_t cmd, uint16_t v) { SetupSpi(SPI_FPGA_MODE); diff --git a/armsrc/fpgaloader.h b/armsrc/fpgaloader.h index 636c5b7b7..474c08e1a 100644 --- a/armsrc/fpgaloader.h +++ b/armsrc/fpgaloader.h @@ -52,23 +52,26 @@ thres| x x x x x x x x #define FPGA_CMD_TRACE_ENABLE (2<<12) // C // Definitions for the FPGA configuration word. +#define FPGA_MAJOR_MODE_MASK 0x01C0 +#define FPGA_MINOR_MODE_MASK 0x003F + // LF -#define FPGA_MAJOR_MODE_LF_READER (0<<5) -#define FPGA_MAJOR_MODE_LF_EDGE_DETECT (1<<5) -#define FPGA_MAJOR_MODE_LF_PASSTHRU (2<<5) -#define FPGA_MAJOR_MODE_LF_ADC (3<<5) +#define FPGA_MAJOR_MODE_LF_READER (0<<6) +#define FPGA_MAJOR_MODE_LF_EDGE_DETECT (1<<6) +#define FPGA_MAJOR_MODE_LF_PASSTHRU (2<<6) +#define FPGA_MAJOR_MODE_LF_ADC (3<<6) // HF -#define FPGA_MAJOR_MODE_HF_READER_TX (0<<5) // D -#define FPGA_MAJOR_MODE_HF_READER_RX_XCORR (1<<5) // D -#define FPGA_MAJOR_MODE_HF_SIMULATOR (2<<5) // D -#define FPGA_MAJOR_MODE_HF_ISO14443A (3<<5) // D -#define FPGA_MAJOR_MODE_HF_SNOOP (4<<5) // D -#define FPGA_MAJOR_MODE_HF_ISO18092 (5<<5) // D -#define FPGA_MAJOR_MODE_HF_GET_TRACE (6<<5) // D +#define FPGA_MAJOR_MODE_HF_READER (0<<6) // D +#define FPGA_MAJOR_MODE_HF_SIMULATOR (1<<6) // D +#define FPGA_MAJOR_MODE_HF_ISO14443A (2<<6) // D +#define FPGA_MAJOR_MODE_HF_SNOOP (3<<6) // D +#define FPGA_MAJOR_MODE_HF_ISO18092 (4<<6) // D +#define FPGA_MAJOR_MODE_HF_GET_TRACE (5<<6) // D // BOTH HF / LF -#define FPGA_MAJOR_MODE_OFF (7<<5) // D +#define FPGA_MAJOR_MODE_OFF (7<<6) // D + // Options for LF_READER #define FPGA_LF_ADC_READER_FIELD 0x1 @@ -78,13 +81,20 @@ thres| x x x x x x x x #define FPGA_LF_EDGE_DETECT_READER_FIELD 0x1 #define FPGA_LF_EDGE_DETECT_TOGGLE_MODE 0x2 -// Options for the HF reader, tx to tag -#define FPGA_HF_READER_TX_SHALLOW_MOD 0x1 +// Options for the HF reader +#define FPGA_HF_READER_MODE_RECEIVE_IQ (0<<0) +#define FPGA_HF_READER_MODE_RECEIVE_AMPLITUDE (1<<0) +#define FPGA_HF_READER_MODE_RECEIVE_PHASE (2<<0) +#define FPGA_HF_READER_MODE_SEND_FULL_MOD (3<<0) +#define FPGA_HF_READER_MODE_SEND_SHALLOW_MOD (4<<0) +#define FPGA_HF_READER_MODE_SNOOP_IQ (5<<0) +#define FPGA_HF_READER_MODE_SNOOP_AMPLITUDE (6<<0) +#define FPGA_HF_READER_MODE_SNOOP_PHASE (7<<0) +#define FPGA_HF_READER_MODE_SEND_JAM (8<<0) -// Options for the HF reader, correlating against rx from tag -#define FPGA_HF_READER_RX_XCORR_848_KHZ 0x1 -#define FPGA_HF_READER_RX_XCORR_SNOOP 0x2 -#define FPGA_HF_READER_RX_XCORR_QUARTER 0x4 +#define FPGA_HF_READER_SUBCARRIER_848_KHZ (0<<4) +#define FPGA_HF_READER_SUBCARRIER_424_KHZ (1<<4) +#define FPGA_HF_READER_SUBCARRIER_212_KHZ (2<<4) // Options for the HF simulated tag, how to modulate #define FPGA_HF_SIMULATOR_NO_MODULATION 0x0 // 0000 @@ -112,9 +122,9 @@ void FpgaEnableTracing(void); void FpgaDisableTracing(void); void FpgaDownloadAndGo(int bitstream_version); // void FpgaGatherVersion(int bitstream_version, char *dst, int len); -void FpgaSetupSsc(void); +void FpgaSetupSsc(uint16_t fpga_mode); void SetupSpi(int mode); -bool FpgaSetupSscDma(uint8_t *buf, int len); +bool FpgaSetupSscDma(uint8_t *buf, uint16_t len); void Fpga_print_status(void); int FpgaGetCurrent(void); void SetAdcMuxFor(uint32_t whichGpio); From 2f4335d31e3031a82e809d6fd253237889c2a800 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 2 Jul 2020 12:33:23 +0200 Subject: [PATCH 0009/1047] chg: ssp clock changes --- armsrc/ticks.c | 56 +++++++++++++++++++++++++++++++------------------- 1 file changed, 35 insertions(+), 21 deletions(-) diff --git a/armsrc/ticks.c b/armsrc/ticks.c index 0ce55e417..e9cbea219 100644 --- a/armsrc/ticks.c +++ b/armsrc/ticks.c @@ -117,47 +117,61 @@ uint32_t RAMFUNC GetCountUS(void) { void StartCountSspClk(void) { AT91C_BASE_PMC->PMC_PCER |= (1 << AT91C_ID_TC0) | (1 << AT91C_ID_TC1) | (1 << AT91C_ID_TC2); // Enable Clock to all timers AT91C_BASE_TCB->TCB_BMR = AT91C_TCB_TC0XC0S_TIOA1 // XC0 Clock = TIOA1 - | AT91C_TCB_TC1XC1S_NONE // XC1 Clock = none - | AT91C_TCB_TC2XC2S_TIOA0; // XC2 Clock = TIOA0 + | AT91C_TCB_TC1XC1S_NONE // XC1 Clock = none + | AT91C_TCB_TC2XC2S_TIOA0; // XC2 Clock = TIOA0 // configure TC1 to create a short pulse on TIOA1 when a rising edge on TIOB1 (= ssp_clk from FPGA) occurs: AT91C_BASE_TC1->TC_CCR = AT91C_TC_CLKDIS; // disable TC1 AT91C_BASE_TC1->TC_CMR = AT91C_TC_CLKS_TIMER_DIV1_CLOCK // TC1 Clock = MCK(48MHz)/2 = 24MHz - | AT91C_TC_CPCSTOP // Stop clock on RC compare - | AT91C_TC_EEVTEDG_RISING // Trigger on rising edge of Event - | AT91C_TC_EEVT_TIOB // Event-Source: TIOB1 (= ssp_clk from FPGA = 13,56MHz/16) - | AT91C_TC_ENETRG // Enable external trigger event - | AT91C_TC_WAVESEL_UP // Upmode without automatic trigger on RC compare - | AT91C_TC_WAVE // Waveform Mode - | AT91C_TC_AEEVT_SET // Set TIOA1 on external event - | AT91C_TC_ACPC_CLEAR; // Clear TIOA1 on RC Compare - AT91C_BASE_TC1->TC_RC = 0x04; // RC Compare value = 0x04 + | AT91C_TC_CPCSTOP // Stop clock on RC compare + | AT91C_TC_EEVTEDG_RISING // Trigger on rising edge of Event + | AT91C_TC_EEVT_TIOB // Event-Source: TIOB1 (= ssp_clk from FPGA = 13,56MHz/16) + | AT91C_TC_ENETRG // Enable external trigger event + | AT91C_TC_WAVESEL_UP // Upmode without automatic trigger on RC compare + | AT91C_TC_WAVE // Waveform Mode + | AT91C_TC_AEEVT_SET // Set TIOA1 on external event + | AT91C_TC_ACPC_CLEAR; // Clear TIOA1 on RC Compare + AT91C_BASE_TC1->TC_RC = 0x01; // RC Compare value = 0x01, pulse width to TC0 // use TC0 to count TIOA1 pulses AT91C_BASE_TC0->TC_CCR = AT91C_TC_CLKDIS; // disable TC0 AT91C_BASE_TC0->TC_CMR = AT91C_TC_CLKS_XC0 // TC0 clock = XC0 clock = TIOA1 - | AT91C_TC_WAVE // Waveform Mode - | AT91C_TC_WAVESEL_UP // just count - | AT91C_TC_ACPA_CLEAR // Clear TIOA0 on RA Compare - | AT91C_TC_ACPC_SET; // Set TIOA0 on RC Compare + | AT91C_TC_WAVE // Waveform Mode + | AT91C_TC_WAVESEL_UP // just count + | AT91C_TC_ACPA_CLEAR // Clear TIOA0 on RA Compare + | AT91C_TC_ACPC_SET; // Set TIOA0 on RC Compare AT91C_BASE_TC0->TC_RA = 1; // RA Compare value = 1; pulse width to TC2 AT91C_BASE_TC0->TC_RC = 0; // RC Compare value = 0; increment TC2 on overflow // use TC2 to count TIOA0 pulses (giving us a 32bit counter (TC0/TC2) clocked by ssp_clk) AT91C_BASE_TC2->TC_CCR = AT91C_TC_CLKDIS; // disable TC2 AT91C_BASE_TC2->TC_CMR = AT91C_TC_CLKS_XC2 // TC2 clock = XC2 clock = TIOA0 - | AT91C_TC_WAVE // Waveform Mode - | AT91C_TC_WAVESEL_UP; // just count + | AT91C_TC_WAVE // Waveform Mode + | AT91C_TC_WAVESEL_UP; // just count AT91C_BASE_TC0->TC_CCR = AT91C_TC_CLKEN | AT91C_TC_SWTRG; // enable and reset TC0 AT91C_BASE_TC1->TC_CCR = AT91C_TC_CLKEN | AT91C_TC_SWTRG; // enable and reset TC1 AT91C_BASE_TC2->TC_CCR = AT91C_TC_CLKEN | AT91C_TC_SWTRG; // enable and reset TC2 + // // synchronize the counter with the ssp_frame signal. - // Note: FPGA must be in any iso14443 mode, otherwise the frame signal would not be present - while (!(AT91C_BASE_PIOA->PIO_PDSR & GPIO_SSC_FRAME)); // wait for ssp_frame to go high (start of frame) - while (AT91C_BASE_PIOA->PIO_PDSR & GPIO_SSC_FRAME); // wait for ssp_frame to be low - while (!(AT91C_BASE_PIOA->PIO_PDSR & GPIO_SSC_CLK)); // wait for ssp_clk to go high + // Note: FPGA must be in a FPGA mode with SSC transfer, otherwise SSC_FRAME and SSC_CLK signals would not be present + // + while(AT91C_BASE_PIOA->PIO_PDSR & GPIO_SSC_FRAME); // wait for ssp_frame to be low + while(!(AT91C_BASE_PIOA->PIO_PDSR & GPIO_SSC_FRAME)); // wait for ssp_frame to go high (start of frame) + while(!(AT91C_BASE_PIOA->PIO_PDSR & GPIO_SSC_CLK)); // wait for ssp_clk to go high; 1st ssp_clk after start of frame + while(AT91C_BASE_PIOA->PIO_PDSR & GPIO_SSC_CLK); // wait for ssp_clk to go low; + while(!(AT91C_BASE_PIOA->PIO_PDSR & GPIO_SSC_CLK)); // wait for ssp_clk to go high; 2nd ssp_clk after start of frame + if ((AT91C_BASE_SSC->SSC_RFMR & SSC_FRAME_MODE_BITS_IN_WORD(32)) == SSC_FRAME_MODE_BITS_IN_WORD(16)) { // 16bit frame + while(AT91C_BASE_PIOA->PIO_PDSR & GPIO_SSC_CLK); // wait for ssp_clk to go low; + while(!(AT91C_BASE_PIOA->PIO_PDSR & GPIO_SSC_CLK)); // wait for ssp_clk to go high; 3rd ssp_clk after start of frame + while(AT91C_BASE_PIOA->PIO_PDSR & GPIO_SSC_CLK); // wait for ssp_clk to go low; + while(!(AT91C_BASE_PIOA->PIO_PDSR & GPIO_SSC_CLK)); // wait for ssp_clk to go high; 4th ssp_clk after start of frame + while(AT91C_BASE_PIOA->PIO_PDSR & GPIO_SSC_CLK); // wait for ssp_clk to go low; + while(!(AT91C_BASE_PIOA->PIO_PDSR & GPIO_SSC_CLK)); // wait for ssp_clk to go high; 5th ssp_clk after start of frame + while(AT91C_BASE_PIOA->PIO_PDSR & GPIO_SSC_CLK); // wait for ssp_clk to go low; + while(!(AT91C_BASE_PIOA->PIO_PDSR & GPIO_SSC_CLK)); // wait for ssp_clk to go high; 6th ssp_clk after start of frame + } // note: up to now two ssp_clk rising edges have passed since the rising edge of ssp_frame // it is now safe to assert a sync signal. This sets all timers to 0 on next active clock edge From 9130474818cae82596c10ba81979af9436b69eb3 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 2 Jul 2020 12:33:53 +0200 Subject: [PATCH 0010/1047] adaptations to new code --- armsrc/em4x50.c | 2 +- armsrc/lfadc.c | 2 +- armsrc/thinfilm.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/armsrc/em4x50.c b/armsrc/em4x50.c index ddc297591..93da6425f 100644 --- a/armsrc/em4x50.c +++ b/armsrc/em4x50.c @@ -192,7 +192,7 @@ static void em4x50_setup_read(void) { // 50ms for the resonant antenna to settle. SpinDelay(50); // Now set up the SSC to get the ADC samples that are now streaming at us. - FpgaSetupSsc(); + FpgaSetupSsc(FPGA_MAJOR_MODE_LF_READER); // start a 1.5ticks is 1us StartTicks(); diff --git a/armsrc/lfadc.c b/armsrc/lfadc.c index 8c453bdc9..2c46f5581 100644 --- a/armsrc/lfadc.c +++ b/armsrc/lfadc.c @@ -181,7 +181,7 @@ void lf_init(bool reader, bool simulate) { SetAdcMuxFor(GPIO_MUXSEL_LOPKD); // Now set up the SSC to get the ADC samples that are now streaming at us. - FpgaSetupSsc(); + FpgaSetupSsc(FPGA_MAJOR_MODE_LF_READER); // When in reader mode, give the field a bit of time to settle. // 313T0 = 313 * 8us = 2504us = 2.5ms Hitag2 tags needs to be fully powered. diff --git a/armsrc/thinfilm.c b/armsrc/thinfilm.c index a77a70744..16c91c8bf 100644 --- a/armsrc/thinfilm.c +++ b/armsrc/thinfilm.c @@ -122,7 +122,7 @@ void SimulateThinFilm(uint8_t *data, size_t len) { FpgaDownloadAndGo(FPGA_BITSTREAM_HF); // Set up the synchronous serial port - FpgaSetupSsc(); + FpgaSetupSsc(FPGA_MAJOR_MODE_HF_READER); // connect Demodulated Signal to ADC: SetAdcMuxFor(GPIO_MUXSEL_HIPKD); From 85053d106f0f58a808ad0ec6bedf985a9afa2384 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 2 Jul 2020 12:34:48 +0200 Subject: [PATCH 0011/1047] adapt to fpga changes. And bug hunting COTAG functionality that doesnt work --- armsrc/lfsampling.c | 50 +++++++++++++++------------------------------ 1 file changed, 16 insertions(+), 34 deletions(-) diff --git a/armsrc/lfsampling.c b/armsrc/lfsampling.c index f77084b3d..aaf7ec86c 100644 --- a/armsrc/lfsampling.c +++ b/armsrc/lfsampling.c @@ -51,11 +51,11 @@ void printConfig(void) { } void printSamples(void) { - DbpString(_CYAN_("LF Sampling memory")); - Dbprintf(" decimation counter.....%d ", samples.dec_counter); - Dbprintf(" sum.....%u ", samples.sum); - Dbprintf(" counter.....%u ", samples.counter); - Dbprintf(" total saved.....%u ", samples.total_saved); + DbpString(_CYAN_("LF Sampling memory usage")); +// Dbprintf(" decimation counter...%d", samples.dec_counter); +// Dbprintf(" sum..................%u", samples.sum); + Dbprintf(" counter.............." _YELLOW_("%u"), samples.counter); + Dbprintf(" total saved.........." _YELLOW_("%u"), samples.total_saved); print_stack_usage(); } @@ -241,7 +241,7 @@ void LFSetupFPGAForADC(int divisor, bool reader_field) { SpinDelay(50); // Now set up the SSC to get the ADC samples that are now streaming at us. - FpgaSetupSsc(); + FpgaSetupSsc(FPGA_MAJOR_MODE_LF_READER); // start a 1.5ticks is 1us StartTicks(); @@ -480,19 +480,19 @@ void doT55x7Acquisition(size_t sample_size) { #define COTAG_T1 384 #define COTAG_T2 (COTAG_T1>>1) -#define COTAG_ONE_THRESHOLD 128+10 -#define COTAG_ZERO_THRESHOLD 128-10 +#define COTAG_ONE_THRESHOLD 128+5 +#define COTAG_ZERO_THRESHOLD 128-5 #ifndef COTAG_BITS #define COTAG_BITS 264 #endif -void doCotagAcquisition(size_t sample_size) { +void doCotagAcquisition() { uint8_t *dest = BigBuf_get_addr(); - uint16_t bufsize = MIN(sample_size, BigBuf_max_traceLen()); + uint16_t bufsize = BigBuf_max_traceLen(); dest[0] = 0; uint8_t firsthigh = 0, firstlow = 0; - uint16_t i = 0, noise_counter = 0, checker = 0; + uint16_t i = 0, noise_counter = 0; if (DBGLEVEL >= DBG_DEBUG) { Dbprintf("doCotagAcquisition - after init"); @@ -504,21 +504,8 @@ void doCotagAcquisition(size_t sample_size) { if (BUTTON_PRESS()) break; - if (checker == 4000) { - if (data_available()) - break; - else - checker = 0; - } else { - ++checker; - } - WDT_HIT(); - if (AT91C_BASE_SSC->SSC_SR & AT91C_SSC_TXRDY) { - LED_D_ON(); - } - if (AT91C_BASE_SSC->SSC_SR & AT91C_SSC_RXRDY) { volatile uint8_t sample = (uint8_t)AT91C_BASE_SSC->SSC_RHR; @@ -551,9 +538,13 @@ void doCotagAcquisition(size_t sample_size) { } } + Dbprintf("doCotagAcquisition - %u high %u == 1 low %u == 1", i, firsthigh, firstlow); + // Ensure that DC offset removal and noise check is performed for any device-side processing removeSignalOffset(dest, bufsize); + printSamples(); computeSignalProperties(dest, bufsize); + printSamples(); } uint32_t doCotagAcquisitionManchester(void) { @@ -565,7 +556,7 @@ uint32_t doCotagAcquisitionManchester(void) { uint8_t firsthigh = 0, firstlow = 0; uint8_t curr = 0, prev = 0; uint16_t sample_counter = 0, period = 0; - uint16_t noise_counter = 0, checker = 0; + uint16_t noise_counter = 0; if (DBGLEVEL >= DBG_DEBUG) { Dbprintf("doCotagAcquisitionManchester - after init"); @@ -576,15 +567,6 @@ uint32_t doCotagAcquisitionManchester(void) { if (BUTTON_PRESS()) break; - - if (checker == 4000) { - if ( data_available()) - break; - else - checker = 0; - } else { - ++checker; - } WDT_HIT(); From ee69987210cf53731b944e20766289b8ab98e273 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 2 Jul 2020 12:35:24 +0200 Subject: [PATCH 0012/1047] chg: third fpga image for felica --- armsrc/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/armsrc/Makefile b/armsrc/Makefile index 1bbbf2ba7..44ca3ab6b 100644 --- a/armsrc/Makefile +++ b/armsrc/Makefile @@ -79,7 +79,7 @@ endif include Standalone/Makefile.inc #the FPGA bitstream files. Note: order matters! -FPGA_BITSTREAMS = fpga_lf.bit fpga_hf.bit +FPGA_BITSTREAMS = fpga_lf.bit fpga_hf.bit fpga_felica.bit #the lz4 source files required for decompressing the fpga config at run time SRC_LZ4 = lz4.c From ecdd91392bb79da1e7e8192baf46c593eab236d9 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 2 Jul 2020 12:35:33 +0200 Subject: [PATCH 0013/1047] adapt to fpga changes. And bug hunting COTAG functionality that doesnt work --- armsrc/lfsampling.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/armsrc/lfsampling.h b/armsrc/lfsampling.h index 9b8c4c6b1..28721f6ca 100644 --- a/armsrc/lfsampling.h +++ b/armsrc/lfsampling.h @@ -21,7 +21,7 @@ typedef struct { * acquisition of Cotag LF signal. Similar to other LF, since the Cotag has such long datarate RF/384 * and is Manchester?, we directly gather the manchester data into bigbuff **/ -void doCotagAcquisition(size_t sample_size); +void doCotagAcquisition(void); uint32_t doCotagAcquisitionManchester(void); /** From 4043832c623829e00cdba59518dd2bb611b42a70 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 2 Jul 2020 12:35:54 +0200 Subject: [PATCH 0014/1047] adapt to fpga changes. And bug hunting COTAG functionality that doesnt work --- armsrc/lfops.c | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/armsrc/lfops.c b/armsrc/lfops.c index 7e907da09..4a9373cec 100644 --- a/armsrc/lfops.c +++ b/armsrc/lfops.c @@ -678,7 +678,7 @@ void AcquireTiType(void) { AT91C_BASE_SSC->SSC_TCMR = 0; // Transmit Frame Mode Register AT91C_BASE_SSC->SSC_TFMR = 0; - // iceman, FpgaSetupSsc() ?? the code above? can it be replaced? + // iceman, FpgaSetupSsc(FPGA_MAJOR_MODE_LF_READER) ?? the code above? can it be replaced? LED_D_ON(); // modulate antenna @@ -721,7 +721,7 @@ void AcquireTiType(void) { } // reset SSC - FpgaSetupSsc(); + FpgaSetupSsc(FPGA_MAJOR_MODE_LF_READER); } // arguments: 64bit data split into 32bit idhi:idlo and optional 16bit crc @@ -2597,24 +2597,35 @@ void Cotag(uint32_t arg0) { LFSetupFPGAForADC(LF_FREQ2DIV(132), true); //clear buffer now so it does not interfere with timing later + BigBuf_free(); BigBuf_Clear_ext(false); //send COTAG start pulse +/* ON(740) OFF(2035) ON(3330) OFF(2035) ON(740) OFF(2035) ON(1000) +*/ + + ON(800) OFF(2200) + ON(3600) OFF(2200) + ON(800) OFF(2200) + ON(3400) + + FpgaSendCommand(FPGA_CMD_SET_DIVISOR, LF_FREQ2DIV(125)); switch (rawsignal) { case 0: - doCotagAcquisition(40000); + doCotagAcquisition(); break; case 1: doCotagAcquisitionManchester(); break; - case 2: + case 2: { DoAcquisition_config(false, 0); break; + } } // Turn the field off From 837efdf5c4e92a8789aaa51f43d2de169ae5dd16 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 2 Jul 2020 12:36:24 +0200 Subject: [PATCH 0015/1047] chg: adapt to fpga changes --- armsrc/legicrf.c | 16 +++++----------- armsrc/legicrfsim.c | 5 ++--- 2 files changed, 7 insertions(+), 14 deletions(-) diff --git a/armsrc/legicrf.c b/armsrc/legicrf.c index 21b0c0a42..1d2693347 100644 --- a/armsrc/legicrf.c +++ b/armsrc/legicrf.c @@ -152,7 +152,7 @@ static void tx_bit(bool bit) { //----------------------------------------------------------------------------- static void tx_frame(uint32_t frame, uint8_t len) { - FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER_TX); + FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER | FPGA_HF_READER_MODE_SEND_FULL_MOD); // wait for next tx timeslot last_frame_end += RWD_FRAME_WAIT; @@ -180,9 +180,7 @@ static void tx_frame(uint32_t frame, uint8_t len) { } static uint32_t rx_frame(uint8_t len) { - FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER_RX_XCORR - | FPGA_HF_READER_RX_XCORR_848_KHZ - | FPGA_HF_READER_RX_XCORR_QUARTER); + FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER | FPGA_HF_READER_SUBCARRIER_212_KHZ | FPGA_HF_READER_MODE_RECEIVE_IQ); // hold sampling until card is expected to respond last_frame_end += TAG_FRAME_WAIT; @@ -210,9 +208,7 @@ static uint32_t rx_frame(uint8_t len) { static bool rx_ack(void) { // change fpga into rx mode - FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER_RX_XCORR - | FPGA_HF_READER_RX_XCORR_848_KHZ - | FPGA_HF_READER_RX_XCORR_QUARTER); + FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER | FPGA_HF_READER_SUBCARRIER_212_KHZ | FPGA_HF_READER_MODE_RECEIVE_IQ); // hold sampling until card is expected to respond last_frame_end += TAG_FRAME_WAIT; @@ -279,14 +275,12 @@ static int init_card(uint8_t cardtype, legic_card_select_t *p_card) { static void init_reader(bool clear_mem) { // configure FPGA FpgaDownloadAndGo(FPGA_BITSTREAM_HF); - FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER_RX_XCORR - | FPGA_HF_READER_RX_XCORR_848_KHZ - | FPGA_HF_READER_RX_XCORR_QUARTER); + FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER | FPGA_HF_READER_SUBCARRIER_212_KHZ | FPGA_HF_READER_MODE_RECEIVE_IQ); SetAdcMuxFor(GPIO_MUXSEL_HIPKD); LED_A_ON(); // configure SSC with defaults - FpgaSetupSsc(); + FpgaSetupSsc(FPGA_MAJOR_MODE_HF_READER); // re-claim GPIO_SSC_DOUT as GPIO and enable output AT91C_BASE_PIOA->PIO_OER = GPIO_SSC_DOUT; diff --git a/armsrc/legicrfsim.c b/armsrc/legicrfsim.c index 35eefc56c..2ca65f54a 100644 --- a/armsrc/legicrfsim.c +++ b/armsrc/legicrfsim.c @@ -303,12 +303,11 @@ static int32_t init_card(uint8_t cardtype, legic_card_select_t *p_card) { static void init_tag(void) { // configure FPGA FpgaDownloadAndGo(FPGA_BITSTREAM_HF); - FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_SIMULATOR - | FPGA_HF_SIMULATOR_MODULATE_212K); + FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_SIMULATOR | FPGA_HF_SIMULATOR_MODULATE_212K); SetAdcMuxFor(GPIO_MUXSEL_HIPKD); // configure SSC with defaults - FpgaSetupSsc(); + FpgaSetupSsc(FPGA_MAJOR_MODE_HF_SIMULATOR); // first pull output to low to prevent glitches then re-claim GPIO_SSC_DOUT LOW(GPIO_SSC_DOUT); From fce4c1d13f208ce112d508b5cea44928f7db097f Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 2 Jul 2020 12:36:49 +0200 Subject: [PATCH 0016/1047] chg: adapt to fpga changes --- armsrc/appmain.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/armsrc/appmain.c b/armsrc/appmain.c index 95b42982a..a252bbe8e 100644 --- a/armsrc/appmain.c +++ b/armsrc/appmain.c @@ -213,7 +213,7 @@ static void MeasureAntennaTuning(void) { LED_A_ON(); // Let the FPGA drive the high-frequency antenna around 13.56 MHz. FpgaDownloadAndGo(FPGA_BITSTREAM_HF); - FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER_RX_XCORR); + FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER); SpinDelay(50); #if defined RDV4 @@ -1616,7 +1616,7 @@ static void PacketReceived(PacketCommandNG *packet) { case 1: // MEASURE_ANTENNA_TUNING_HF_START // Let the FPGA drive the high-frequency antenna around 13.56 MHz. FpgaDownloadAndGo(FPGA_BITSTREAM_HF); - FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER_RX_XCORR); + FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER); reply_ng(CMD_MEASURE_ANTENNA_TUNING_HF, PM3_SUCCESS, NULL, 0); break; case 2: From 80cda059b17c8ce7c01435a0a011c1b007c960eb Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 2 Jul 2020 12:37:07 +0200 Subject: [PATCH 0017/1047] chg: adapt to fpga changes --- armsrc/iso15693.c | 2003 +++++++++++++++++++++++++++++++-------------- armsrc/iso15693.h | 21 +- 2 files changed, 1411 insertions(+), 613 deletions(-) diff --git a/armsrc/iso15693.c b/armsrc/iso15693.c index d88bae1f0..a82bb9a07 100644 --- a/armsrc/iso15693.c +++ b/armsrc/iso15693.c @@ -3,24 +3,22 @@ // Modified by Greg Jones, Jan 2009 // Modified by Adrian Dabrowski "atrox", Mar-Sept 2010,Oct 2011 // Modified by Christian Herrmann "iceman", 2017 +// Modified by piwi, Oct 2018 // // This code is licensed to you under the terms of the GNU GPL, version 2 or, // at your option, any later version. See the LICENSE.txt file for the text of // the license. //----------------------------------------------------------------------------- // Routines to support ISO 15693. This includes both the reader software and -// the `fake tag' modes, but at the moment I've implemented only the reader -// stuff, and that barely. -// Modified to perform modulation onboard in arm rather than on PC -// Also added additional reader commands (SELECT, READ etc.) +// the `fake tag' modes. //----------------------------------------------------------------------------- -// The ISO 15693 describes two transmission modes from reader to tag, and 4 -// transmission modes from tag to reader. As of Mar 2010 this code only -// supports one of each: "1of4" mode from reader to tag, and the highspeed -// variant with one subcarrier from card to reader. -// As long, as the card fully support ISO 15693 this is no problem, since the -// reader chooses both data rates, but some non-standard tags do not. Further for -// the simulation to work, we will need to support all data rates. + +// The ISO 15693 describes two transmission modes from reader to tag, and four +// transmission modes from tag to reader. As of Oct 2018 this code supports +// both reader modes and the high speed variant with one subcarrier from card to reader. +// As long as the card fully support ISO 15693 this is no problem, since the +// reader chooses both data rates, but some non-standard tags do not. +// For card simulation, the code supports both high and low speed modes with one subcarrier. // // VCD (reader) -> VICC (tag) // 1 out of 256: @@ -47,15 +45,11 @@ // *) UID is always used "transmission order" (LSB), which is reverse to display order // TODO / BUGS / ISSUES: -// *) writing to tags takes longer: we miss the answer from the tag in most cases -// -> tweak the read-timeout times -// *) signal decoding from the card is still a bit shaky. -// *) signal decoding is unable to detect collissions. -// *) add anti-collission support for inventory-commands +// *) signal decoding is unable to detect collisions. +// *) add anti-collision support for inventory-commands // *) read security status of a block -// *) sniffing and simulation do only support one transmission mode. need to support -// all 8 transmission combinations -// *) remove or refactor code under "depricated" +// *) sniffing and simulation do not support two subcarrier modes. +// *) remove or refactor code under "deprecated" // *) document all the functions #include "iso15693.h" @@ -72,12 +66,36 @@ #include "ticks.h" #include "BigBuf.h" #include "crc16.h" + +// Delays in SSP_CLK ticks. +// SSP_CLK runs at 13,56MHz / 32 = 423.75kHz when simulating a tag +#define DELAY_READER_TO_ARM 8 +#define DELAY_ARM_TO_READER 0 + +//SSP_CLK runs at 13.56MHz / 4 = 3,39MHz when acting as reader. All values should be multiples of 16 +#define DELAY_ARM_TO_TAG 16 +#define DELAY_TAG_TO_ARM 32 + +//SSP_CLK runs at 13.56MHz / 4 = 3,39MHz when snooping. All values should be multiples of 16 +#define DELAY_TAG_TO_ARM_SNIFF 32 +#define DELAY_READER_TO_ARM_SNIFF 32 + +// times in samples @ 212kHz when acting as reader +#define ISO15693_READER_TIMEOUT 330 // 330/212kHz = 1558us, should be even enough for iClass tags responding to ACTALL +#define ISO15693_READER_TIMEOUT_WRITE 4700 // 4700/212kHz = 22ms, nominal 20ms + /////////////////////////////////////////////////////////////////////// // ISO 15693 Part 2 - Air Interface -// This section basicly contains transmission and receiving of bits +// This section basically contains transmission and receiving of bits /////////////////////////////////////////////////////////////////////// +// buffers +#define ISO15693_DMA_BUFFER_SIZE 256 // must be a power of 2 +#define ISO15693_MAX_RESPONSE_LENGTH 36 // allows read single block with the maximum block size of 256bits. Read multiple blocks not supported yet +#define ISO15693_MAX_COMMAND_LENGTH 45 // allows write single block with the maximum block size of 256bits. Write multiple blocks not supported yet + + // 32 + 2 crc + 1 #define ISO15_MAX_FRAME 35 #define CMD_ID_RESP 5 @@ -93,397 +111,981 @@ #define CheckCrc15(data, len) check_crc(CRC_15693, (data), (len)) #define AddCrc15(data, len) compute_crc(CRC_15693, (data), (len), (data)+(len), (data)+(len)+1) -static void BuildIdentifyRequest(uint8_t *cmdout); -//static void BuildReadBlockRequest(uint8_t *cmdout, uint8_t *uid, uint8_t blockNumber ); -static void BuildInventoryResponse(uint8_t *cmdout, uint8_t *uid); +static void BuildIdentifyRequest(uint8_t *cmd); +static void BuildInventoryResponse(uint8_t *uid); // --------------------------- // Signal Processing // --------------------------- // prepare data using "1 out of 4" code for later transmission -// resulting data rate is 26,48 kbit/s (fc/512) +// resulting data rate is 26.48 kbit/s (fc/512) // cmd ... data // n ... length of data static void CodeIso15693AsReader(uint8_t *cmd, int n) { - int i, j; - ToSendReset(); + ToSendReset(); - // Give it a bit of slack at the beginning - for (i = 0; i < 24; i++) - ToSendStuffBit(1); + // SOF for 1of4 + ToSend[++ToSendMax] = 0x84; //10000100 - // SOF for 1of4 - ToSendStuffBit(0); - ToSendStuffBit(1); - ToSendStuffBit(1); - ToSendStuffBit(1); - ToSendStuffBit(1); - ToSendStuffBit(0); - ToSendStuffBit(1); - ToSendStuffBit(1); - for (i = 0; i < n; i++) { - for (j = 0; j < 8; j += 2) { - int these = (cmd[i] >> j) & 3; - switch (these) { - case 0: - ToSendStuffBit(1); - ToSendStuffBit(0); - ToSendStuffBit(1); - ToSendStuffBit(1); - ToSendStuffBit(1); - ToSendStuffBit(1); - ToSendStuffBit(1); - ToSendStuffBit(1); - break; - case 1: - ToSendStuffBit(1); - ToSendStuffBit(1); - ToSendStuffBit(1); - ToSendStuffBit(0); - ToSendStuffBit(1); - ToSendStuffBit(1); - ToSendStuffBit(1); - ToSendStuffBit(1); - break; - case 2: - ToSendStuffBit(1); - ToSendStuffBit(1); - ToSendStuffBit(1); - ToSendStuffBit(1); - ToSendStuffBit(1); - ToSendStuffBit(0); - ToSendStuffBit(1); - ToSendStuffBit(1); - break; - case 3: - ToSendStuffBit(1); - ToSendStuffBit(1); - ToSendStuffBit(1); - ToSendStuffBit(1); - ToSendStuffBit(1); - ToSendStuffBit(1); - ToSendStuffBit(1); - ToSendStuffBit(0); - break; - } - } - } - // EOF - ToSendStuffBit(1); - ToSendStuffBit(1); - ToSendStuffBit(0); - ToSendStuffBit(1); + // data + for (int i = 0; i < n; i++) { + for (int j = 0; j < 8; j += 2) { + int these = (cmd[i] >> j) & 0x03; + switch(these) { + case 0: + ToSend[++ToSendMax] = 0x40; //01000000 + break; + case 1: + ToSend[++ToSendMax] = 0x10; //00010000 + break; + case 2: + ToSend[++ToSendMax] = 0x04; //00000100 + break; + case 3: + ToSend[++ToSendMax] = 0x01; //00000001 + break; + } + } + } - // And slack at the end, too. - for (i = 0; i < 24; i++) - ToSendStuffBit(1); + // EOF + ToSend[++ToSendMax] = 0x20; //0010 + 0000 padding + + ToSendMax++; } -// encode data using "1 out of 256" sheme +// Encode EOF only +static void CodeIso15693AsReaderEOF(void) { + ToSendReset(); + ToSend[++ToSendMax] = 0x20; + ToSendMax++; +} + + +// encode data using "1 out of 256" scheme // data rate is 1,66 kbit/s (fc/8192) // is designed for more robust communication over longer distances static void CodeIso15693AsReader256(uint8_t *cmd, int n) { - int i, j; - ToSendReset(); + ToSendReset(); - // Give it a bit of slack at the beginning - for (i = 0; i < 24; i++) - ToSendStuffBit(1); + // SOF for 1of256 + ToSend[++ToSendMax] = 0x81; //10000001 - // SOF for 1of256 - ToSendStuffBit(0); - ToSendStuffBit(1); - ToSendStuffBit(1); - ToSendStuffBit(1); - ToSendStuffBit(1); - ToSendStuffBit(1); - ToSendStuffBit(1); - ToSendStuffBit(0); + // data + for(int i = 0; i < n; i++) { + for (int j = 0; j <= 255; j++) { + if (cmd[i] == j) { + ToSendStuffBit(0); + ToSendStuffBit(1); + } else { + ToSendStuffBit(0); + ToSendStuffBit(0); + } + } + } - for (i = 0; i < n; i++) { - for (j = 0; j <= 255; j++) { - if (cmd[i] == j) { - ToSendStuffBit(1); - ToSendStuffBit(0); - } else { - ToSendStuffBit(1); - ToSendStuffBit(1); - } - } - } - // EOF - ToSendStuffBit(1); - ToSendStuffBit(1); - ToSendStuffBit(0); - ToSendStuffBit(1); + // EOF + ToSend[++ToSendMax] = 0x20; //0010 + 0000 padding - // And slack at the end, too. - for (i = 0; i < 24; i++) - ToSendStuffBit(1); + ToSendMax++; } -// Transmit the command (to the tag) that was placed in ToSend[]. -static void TransmitTo15693Tag(const uint8_t *cmd, int len, int *samples, int *wait) { +static const uint8_t encode_4bits[16] = { 0xaa, 0x6a, 0x9a, 0x5a, 0xa6, 0x66, 0x96, 0x56, 0xa9, 0x69, 0x99, 0x59, 0xa5, 0x65, 0x95, 0x55 }; - int c; - FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER_TX); +static void CodeIso15693AsTag(uint8_t *cmd, size_t len) { + /* + * SOF comprises 3 parts; + * * An unmodulated time of 56.64 us + * * 24 pulses of 423.75 kHz (fc/32) + * * A logic 1, which starts with an unmodulated time of 18.88us + * followed by 8 pulses of 423.75kHz (fc/32) + * + * EOF comprises 3 parts: + * - A logic 0 (which starts with 8 pulses of fc/32 followed by an unmodulated + * time of 18.88us. + * - 24 pulses of fc/32 + * - An unmodulated time of 56.64 us + * + * A logic 0 starts with 8 pulses of fc/32 + * followed by an unmodulated time of 256/fc (~18,88us). + * + * A logic 0 starts with unmodulated time of 256/fc (~18,88us) followed by + * 8 pulses of fc/32 (also 18.88us) + * + * A bit here becomes 8 pulses of fc/32. Therefore: + * The SOF can be written as 00011101 = 0x1D + * The EOF can be written as 10111000 = 0xb8 + * A logic 1 is 01 + * A logic 0 is 10 + * + * */ - if (wait) { - for (c = 0; c < *wait;) { - if (AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_TXRDY)) { - AT91C_BASE_SSC->SSC_THR = 0x00; // For exact timing! - ++c; - } - WDT_HIT(); - } - } + ToSendReset(); - c = 0; - for (;;) { - if (AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_TXRDY)) { - AT91C_BASE_SSC->SSC_THR = cmd[c]; - if (++c >= len) break; - } - WDT_HIT(); - } + // SOF + ToSend[++ToSendMax] = 0x1D; // 00011101 - if (samples) { - if (wait) - *samples = (c + *wait) << 3; - else - *samples = c << 3; - } + // data + for (int i = 0; i < len; i++) { + ToSend[++ToSendMax] = encode_4bits[cmd[i] & 0xF]; + ToSend[++ToSendMax] = encode_4bits[cmd[i] >> 4]; + } + + // EOF + ToSend[++ToSendMax] = 0xB8; // 10111000 + + ToSendMax++; +} + +// Transmit the command (to the tag) that was placed in cmd[]. +static void TransmitTo15693Tag(const uint8_t *cmd, int len, uint32_t *start_time) { + + FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER | FPGA_HF_READER_MODE_SEND_FULL_MOD); + + if (*start_time < DELAY_ARM_TO_TAG) { + *start_time = DELAY_ARM_TO_TAG; + } + + *start_time = (*start_time - DELAY_ARM_TO_TAG) & 0xfffffff0; + + if (GetCountSspClk() > *start_time) { // we may miss the intended time + *start_time = (GetCountSspClk() + 16) & 0xfffffff0; // next possible time + } + + while (GetCountSspClk() < *start_time) + /* wait */ ; + + LED_B_ON(); + for (int c = 0; c < len; c++) { + uint8_t data = cmd[c]; + for (int i = 0; i < 8; i++) { + uint16_t send_word = (data & 0x80) ? 0xffff : 0x0000; + while (!(AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_TXRDY))) ; + AT91C_BASE_SSC->SSC_THR = send_word; + while (!(AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_TXRDY))) ; + AT91C_BASE_SSC->SSC_THR = send_word; + data <<= 1; + } + WDT_HIT(); + } + LED_B_OFF(); + + *start_time = *start_time + DELAY_ARM_TO_TAG; } //----------------------------------------------------------------------------- -// Transmit the command (to the reader) that was placed in ToSend[]. +// Transmit the command (to the reader) that was placed in cmd[]. //----------------------------------------------------------------------------- -static void TransmitTo15693Reader(const uint8_t *cmd, int len, int *samples, int *wait) { - int c = 0; - FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_SIMULATOR | FPGA_HF_SIMULATOR_MODULATE_424K); +static void TransmitTo15693Reader(const uint8_t *cmd, size_t len, uint32_t *start_time, uint32_t slot_time, bool slow) { - if (wait) { - for (c = 0; c < *wait;) { - if (AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_TXRDY)) { - AT91C_BASE_SSC->SSC_THR = 0x00; // For exact timing! - ++c; - } - WDT_HIT(); - } - } + // don't use the FPGA_HF_SIMULATOR_MODULATE_424K_8BIT minor mode. It would spoil GetCountSspClk() + FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_SIMULATOR | FPGA_HF_SIMULATOR_MODULATE_424K); - c = 0; - for (;;) { - if (AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_TXRDY)) { - AT91C_BASE_SSC->SSC_THR = cmd[c]; - if (++c >= len) break; - } - WDT_HIT(); - } - if (samples) { - if (wait) - *samples = (c + *wait) << 3; - else - *samples = c << 3; - } + uint32_t modulation_start_time = *start_time - DELAY_ARM_TO_READER + 3 * 8; // no need to transfer the unmodulated start of SOF + + while (GetCountSspClk() > (modulation_start_time & 0xfffffff8) + 3) { // we will miss the intended time + if (slot_time) { + modulation_start_time += slot_time; // use next available slot + } else { + modulation_start_time = (modulation_start_time & 0xfffffff8) + 8; // next possible time + } + } + + while (GetCountSspClk() < (modulation_start_time & 0xfffffff8)) + /* wait */ ; + + uint8_t shift_delay = modulation_start_time & 0x00000007; + + *start_time = modulation_start_time + DELAY_ARM_TO_READER - 3 * 8; + + LED_C_ON(); + uint8_t bits_to_shift = 0x00; + uint8_t bits_to_send = 0x00; + for (size_t c = 0; c < len; c++) { + for (int i = (c==0?4:7); i >= 0; i--) { + uint8_t cmd_bits = ((cmd[c] >> i) & 0x01) ? 0xff : 0x00; + for (int j = 0; j < (slow?4:1); ) { + if (AT91C_BASE_SSC->SSC_SR & AT91C_SSC_TXRDY) { + bits_to_send = bits_to_shift << (8 - shift_delay) | cmd_bits >> shift_delay; + AT91C_BASE_SSC->SSC_THR = bits_to_send; + bits_to_shift = cmd_bits; + j++; + } + } + } + WDT_HIT(); + } + // send the remaining bits, padded with 0: + bits_to_send = bits_to_shift << (8 - shift_delay); + for ( ; ; ) { + if (AT91C_BASE_SSC->SSC_SR & AT91C_SSC_TXRDY) { + AT91C_BASE_SSC->SSC_THR = bits_to_send; + break; + } + } + LED_C_OFF(); } +//============================================================================= +// An ISO 15693 decoder for tag responses (one subcarrier only). +// Uses cross correlation to identify each bit and EOF. +// This function is called 8 times per bit (every 2 subcarrier cycles). +// Subcarrier frequency fs is 424kHz, 1/fs = 2,36us, +// i.e. function is called every 4,72us +// LED handling: +// LED C -> ON once we have received the SOF and are expecting the rest. +// LED C -> OFF once we have received EOF or are unsynced +// +// Returns: true if we received a EOF +// false if we are still waiting for some more +//============================================================================= + +#define NOISE_THRESHOLD 80 // don't try to correlate noise +#define MAX_PREVIOUS_AMPLITUDE (-1 - NOISE_THRESHOLD) + +typedef struct DecodeTag { + enum { + STATE_TAG_SOF_LOW, + STATE_TAG_SOF_RISING_EDGE, + STATE_TAG_SOF_HIGH, + STATE_TAG_SOF_HIGH_END, + STATE_TAG_RECEIVING_DATA, + STATE_TAG_EOF, + STATE_TAG_EOF_TAIL + } state; + int bitCount; + int posCount; + enum { + LOGIC0, + LOGIC1, + SOF_PART1, + SOF_PART2 + } lastBit; + uint16_t shiftReg; + uint16_t max_len; + uint8_t *output; + int len; + int sum1, sum2; + int threshold_sof; + int threshold_half; + uint16_t previous_amplitude; +} DecodeTag_t; + //----------------------------------------------------------------------------- // DEMODULATE tag answer //----------------------------------------------------------------------------- -static int DemodAnswer(uint8_t *received, uint8_t *dest, uint16_t samplecount) { +static RAMFUNC int Handle15693SamplesFromTag(uint16_t amplitude, DecodeTag_t *DecodeTag) { + switch (DecodeTag->state) { + case STATE_TAG_SOF_LOW: + // waiting for a rising edge + if (amplitude > NOISE_THRESHOLD + DecodeTag->previous_amplitude) { + if (DecodeTag->posCount > 10) { + DecodeTag->threshold_sof = amplitude - DecodeTag->previous_amplitude; // to be divided by 2 + DecodeTag->threshold_half = 0; + DecodeTag->state = STATE_TAG_SOF_RISING_EDGE; + } else { + DecodeTag->posCount = 0; + } + } else { + DecodeTag->posCount++; + DecodeTag->previous_amplitude = amplitude; + } + break; - int i, j; - int max = 0, maxPos = 0, skip = 4; - int k = 0; // this will be our return value + case STATE_TAG_SOF_RISING_EDGE: + if (amplitude > DecodeTag->threshold_sof + DecodeTag->previous_amplitude) { // edge still rising + if (amplitude > DecodeTag->threshold_sof + DecodeTag->threshold_sof) { // steeper edge, take this as time reference + DecodeTag->posCount = 1; + } else { + DecodeTag->posCount = 2; + } + DecodeTag->threshold_sof = (amplitude - DecodeTag->previous_amplitude) / 2; + } else { + DecodeTag->posCount = 2; + DecodeTag->threshold_sof = DecodeTag->threshold_sof/2; + } + // DecodeTag->posCount = 2; + DecodeTag->state = STATE_TAG_SOF_HIGH; + break; - // First, correlate for SOF - for (i = 0; i < samplecount; i++) { - int corr = 0; - for (j = 0; j < ARRAYLEN(FrameSOF); j += skip) { - corr += FrameSOF[j] * dest[i + (j / skip)]; - } - if (corr > max) { - max = corr; - maxPos = i; - } - } - // DbpString("SOF at %d, correlation %d", maxPos,max/(ARRAYLEN(FrameSOF)/skip)); + case STATE_TAG_SOF_HIGH: + // waiting for 10 times high. Take average over the last 8 + if (amplitude > DecodeTag->threshold_sof) { + DecodeTag->posCount++; + if (DecodeTag->posCount > 2) { + DecodeTag->threshold_half += amplitude; // keep track of average high value + } + if (DecodeTag->posCount == 10) { + DecodeTag->threshold_half >>= 2; // (4 times 1/2 average) + DecodeTag->state = STATE_TAG_SOF_HIGH_END; + } + } else { // high phase was too short + DecodeTag->posCount = 1; + DecodeTag->previous_amplitude = amplitude; + DecodeTag->state = STATE_TAG_SOF_LOW; + } + break; - // greg - If correlation is less than 1 then there's little point in continuing - if ((max / (ARRAYLEN(FrameSOF) / skip)) < 1) - return k; + case STATE_TAG_SOF_HIGH_END: + // check for falling edge + if (DecodeTag->posCount == 13 && amplitude < DecodeTag->threshold_sof) { + DecodeTag->lastBit = SOF_PART1; // detected 1st part of SOF (12 samples low and 12 samples high) + DecodeTag->shiftReg = 0; + DecodeTag->bitCount = 0; + DecodeTag->len = 0; + DecodeTag->sum1 = amplitude; + DecodeTag->sum2 = 0; + DecodeTag->posCount = 2; + DecodeTag->state = STATE_TAG_RECEIVING_DATA; + // FpgaDisableTracing(); // DEBUGGING + // Dbprintf("amplitude = %d, threshold_sof = %d, threshold_half/4 = %d, previous_amplitude = %d", + // amplitude, + // DecodeTag->threshold_sof, + // DecodeTag->threshold_half/4, + // DecodeTag->previous_amplitude); // DEBUGGING + LED_C_ON(); + } else { + DecodeTag->posCount++; + if (DecodeTag->posCount > 13) { // high phase too long + DecodeTag->posCount = 0; + DecodeTag->previous_amplitude = amplitude; + DecodeTag->state = STATE_TAG_SOF_LOW; + LED_C_OFF(); + } + } + break; - i = maxPos + ARRAYLEN(FrameSOF) / skip; + case STATE_TAG_RECEIVING_DATA: + // FpgaDisableTracing(); // DEBUGGING + // Dbprintf("amplitude = %d, threshold_sof = %d, threshold_half/4 = %d, previous_amplitude = %d", + // amplitude, + // DecodeTag->threshold_sof, + // DecodeTag->threshold_half/4, + // DecodeTag->previous_amplitude); // DEBUGGING + if (DecodeTag->posCount == 1) { + DecodeTag->sum1 = 0; + DecodeTag->sum2 = 0; + } + if (DecodeTag->posCount <= 4) { + DecodeTag->sum1 += amplitude; + } else { + DecodeTag->sum2 += amplitude; + } + if (DecodeTag->posCount == 8) { + if (DecodeTag->sum1 > DecodeTag->threshold_half && DecodeTag->sum2 > DecodeTag->threshold_half) { // modulation in both halves + if (DecodeTag->lastBit == LOGIC0) { // this was already part of EOF + DecodeTag->state = STATE_TAG_EOF; + } else { + DecodeTag->posCount = 0; + DecodeTag->previous_amplitude = amplitude; + DecodeTag->state = STATE_TAG_SOF_LOW; + LED_C_OFF(); + } + } else if (DecodeTag->sum1 < DecodeTag->threshold_half && DecodeTag->sum2 > DecodeTag->threshold_half) { // modulation in second half + // logic 1 + if (DecodeTag->lastBit == SOF_PART1) { // still part of SOF + DecodeTag->lastBit = SOF_PART2; // SOF completed + } else { + DecodeTag->lastBit = LOGIC1; + DecodeTag->shiftReg >>= 1; + DecodeTag->shiftReg |= 0x80; + DecodeTag->bitCount++; + if (DecodeTag->bitCount == 8) { + DecodeTag->output[DecodeTag->len] = DecodeTag->shiftReg; + DecodeTag->len++; + // if (DecodeTag->shiftReg == 0x12 && DecodeTag->len == 1) FpgaDisableTracing(); // DEBUGGING + if (DecodeTag->len > DecodeTag->max_len) { + // buffer overflow, give up + LED_C_OFF(); + return true; + } + DecodeTag->bitCount = 0; + DecodeTag->shiftReg = 0; + } + } + } else if (DecodeTag->sum1 > DecodeTag->threshold_half && DecodeTag->sum2 < DecodeTag->threshold_half) { // modulation in first half + // logic 0 + if (DecodeTag->lastBit == SOF_PART1) { // incomplete SOF + DecodeTag->posCount = 0; + DecodeTag->previous_amplitude = amplitude; + DecodeTag->state = STATE_TAG_SOF_LOW; + LED_C_OFF(); + } else { + DecodeTag->lastBit = LOGIC0; + DecodeTag->shiftReg >>= 1; + DecodeTag->bitCount++; + if (DecodeTag->bitCount == 8) { + DecodeTag->output[DecodeTag->len] = DecodeTag->shiftReg; + DecodeTag->len++; + // if (DecodeTag->shiftReg == 0x12 && DecodeTag->len == 1) FpgaDisableTracing(); // DEBUGGING + if (DecodeTag->len > DecodeTag->max_len) { + // buffer overflow, give up + DecodeTag->posCount = 0; + DecodeTag->previous_amplitude = amplitude; + DecodeTag->state = STATE_TAG_SOF_LOW; + LED_C_OFF(); + } + DecodeTag->bitCount = 0; + DecodeTag->shiftReg = 0; + } + } + } else { // no modulation + if (DecodeTag->lastBit == SOF_PART2) { // only SOF (this is OK for iClass) + LED_C_OFF(); + return true; + } else { + DecodeTag->posCount = 0; + DecodeTag->state = STATE_TAG_SOF_LOW; + LED_C_OFF(); + } + } + DecodeTag->posCount = 0; + } + DecodeTag->posCount++; + break; - uint8_t outBuf[ISO15_MAX_FRAME]; - memset(outBuf, 0, sizeof(outBuf)); - uint8_t mask = 0x01; - for (;;) { - int corr0 = 0, corr1 = 0, corrEOF = 0; - for (j = 0; j < ARRAYLEN(Logic0); j += skip) { - corr0 += Logic0[j] * dest[i + (j / skip)]; - } - for (j = 0; j < ARRAYLEN(Logic1); j += skip) { - corr1 += Logic1[j] * dest[i + (j / skip)]; - } - for (j = 0; j < ARRAYLEN(FrameEOF); j += skip) { - corrEOF += FrameEOF[j] * dest[i + (j / skip)]; - } - // Even things out by the length of the target waveform. - corr0 *= 4; - corr1 *= 4; - // if (DBGLEVEL >= DBG_EXTENDED) - // Dbprintf("Corr1 %d, Corr0 %d, CorrEOF %d", corr1, corr0, corrEOF); + case STATE_TAG_EOF: + if (DecodeTag->posCount == 1) { + DecodeTag->sum1 = 0; + DecodeTag->sum2 = 0; + } + if (DecodeTag->posCount <= 4) { + DecodeTag->sum1 += amplitude; + } else { + DecodeTag->sum2 += amplitude; + } + if (DecodeTag->posCount == 8) { + if (DecodeTag->sum1 > DecodeTag->threshold_half && DecodeTag->sum2 < DecodeTag->threshold_half) { // modulation in first half + DecodeTag->posCount = 0; + DecodeTag->state = STATE_TAG_EOF_TAIL; + } else { + DecodeTag->posCount = 0; + DecodeTag->previous_amplitude = amplitude; + DecodeTag->state = STATE_TAG_SOF_LOW; + LED_C_OFF(); + } + } + DecodeTag->posCount++; + break; - if (corrEOF > corr1 && corrEOF > corr0) - break; + case STATE_TAG_EOF_TAIL: + if (DecodeTag->posCount == 1) { + DecodeTag->sum1 = 0; + DecodeTag->sum2 = 0; + } + if (DecodeTag->posCount <= 4) { + DecodeTag->sum1 += amplitude; + } else { + DecodeTag->sum2 += amplitude; + } + if (DecodeTag->posCount == 8) { + if (DecodeTag->sum1 < DecodeTag->threshold_half && DecodeTag->sum2 < DecodeTag->threshold_half) { // no modulation in both halves + LED_C_OFF(); + return true; + } else { + DecodeTag->posCount = 0; + DecodeTag->previous_amplitude = amplitude; + DecodeTag->state = STATE_TAG_SOF_LOW; + LED_C_OFF(); + } + } + DecodeTag->posCount++; + break; + } - if (corr1 > corr0) { - i += ARRAYLEN(Logic1) / skip; - outBuf[k] |= mask; - } else { - i += ARRAYLEN(Logic0) / skip; - } - - mask <<= 1; - - if (mask == 0) { - k++; - mask = 0x01; - } - - if ((i + (int)ARRAYLEN(FrameEOF)) >= samplecount - 1) { - //Dbprintf("[!] ran off end! %d | %d",( i + (int)ARRAYLEN(FrameEOF)), samplecount-1); - break; - } - } - - if (DBGLEVEL >= DBG_EXTENDED) Dbprintf("ice: demod bytes %u", k); - - if (mask != 0x01) { // this happens, when we miss the EOF - - // TODO: for some reason this happens quite often - if (DBGLEVEL >= DBG_ERROR && k != 0) Dbprintf("[!] error, uneven octet! (extra bits!) mask %02x", mask); - //if (mask < 0x08) k--; // discard the last uneven octet; - // 0x08 is an assumption - but works quite often - } - - for (i = 0; i < k; i++) - received[i] = outBuf[i]; - - // return the number of bytes demodulated - return k; + return false; } -// Read from Tag -// Parameters: -// received -// samples -// elapsed -// returns: -// number of decoded bytes -// logging enabled -#define SIGNAL_BUFF_SIZE 20000 +static void DecodeTagInit(DecodeTag_t *DecodeTag, uint8_t *data, uint16_t max_len) { + DecodeTag->previous_amplitude = MAX_PREVIOUS_AMPLITUDE; + DecodeTag->posCount = 0; + DecodeTag->state = STATE_TAG_SOF_LOW; + DecodeTag->output = data; + DecodeTag->max_len = max_len; +} -static int GetIso15693AnswerFromTag(uint8_t *received, int *elapsed) { - - // get current clock - uint32_t time_0 = GetCountSspClk(); - uint32_t time_stop = 0; - bool getNext = false; - int counter = 0, ci, cq = 0; - uint8_t *buf = BigBuf_malloc(SIGNAL_BUFF_SIZE); - - if (elapsed) *elapsed = 0; - - FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER_RX_XCORR); - - for (;;) { - WDT_HIT(); - - if (AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_TXRDY)) { - AT91C_BASE_SSC->SSC_THR = 0x00; //0x43; - // To make use of exact timing of next command from reader!! - if (elapsed)(*elapsed)++; - } - if (AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_RXRDY)) { - - ci = (int8_t)AT91C_BASE_SSC->SSC_RHR; - ci = ABS(ci); - - // The samples are correlations against I and Q versions of the - // tone that the tag AM-modulates, so every other sample is I, - // every other is Q. We just want power, so abs(I) + abs(Q) is - // close to what we want. - // iceman 2016, amplitude sqrt(abs(i) + abs(q)) - if (getNext) { - - buf[counter++] = (uint8_t)(MAX(ci, cq) + (MIN(ci, cq) >> 1)); - - if (counter >= SIGNAL_BUFF_SIZE) - break; - } else { - cq = ci; - } - getNext = !getNext; - } - } - time_stop = GetCountSspClk(); - int len = DemodAnswer(received, buf, counter); - LogTrace(received, len, time_0 << 4, time_stop << 4, NULL, false); - BigBuf_free(); - return len; +static void DecodeTagReset(DecodeTag_t *DecodeTag) { + DecodeTag->posCount = 0; + DecodeTag->state = STATE_TAG_SOF_LOW; + DecodeTag->previous_amplitude = MAX_PREVIOUS_AMPLITUDE; } -// Now the GetISO15693 message from sniffing command -// logging enable, -static int GetIso15693AnswerFromSniff(uint8_t *received, int *samples, int *elapsed) { +/* + * Receive and decode the tag response, also log to tracebuffer + */ +static int GetIso15693AnswerFromTag(uint8_t* response, uint16_t max_len, uint16_t timeout, uint32_t *eof_time) { - bool getNext = false; - int counter = 0, ci, cq = 0; - uint32_t time_0 = 0, time_stop = 0; - uint8_t *buf = BigBuf_malloc(SIGNAL_BUFF_SIZE); + int samples = 0; + int ret = 0; - // get current clock - time_0 = GetCountSspClk(); + uint16_t dmaBuf[ISO15693_DMA_BUFFER_SIZE]; - FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER_RX_XCORR); + // the Decoder data structure + DecodeTag_t DecodeTag = { 0 }; + DecodeTagInit(&DecodeTag, response, max_len); - for (;;) { - WDT_HIT(); + // wait for last transfer to complete + while (!(AT91C_BASE_SSC->SSC_SR & AT91C_SSC_TXEMPTY)); - if (AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_RXRDY)) { + // And put the FPGA in the appropriate mode + FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER | FPGA_HF_READER_SUBCARRIER_424_KHZ | FPGA_HF_READER_MODE_RECEIVE_AMPLITUDE); - ci = (int8_t)AT91C_BASE_SSC->SSC_RHR; - ci = ABS(ci); + // Setup and start DMA. + FpgaSetupSsc(FPGA_MAJOR_MODE_HF_READER); + FpgaSetupSscDma((uint8_t*) dmaBuf, ISO15693_DMA_BUFFER_SIZE); + uint32_t dma_start_time = 0; + uint16_t *upTo = dmaBuf; - // The samples are correlations against I and Q versions of the - // tone that the tag AM-modulates, so every other sample is I, - // every other is Q. We just want power, so abs(I) + abs(Q) is - // close to what we want. - if (getNext) { + for(;;) { + uint16_t behindBy = ((uint16_t*)AT91C_BASE_PDC_SSC->PDC_RPR - upTo) & (ISO15693_DMA_BUFFER_SIZE-1); - buf[counter++] = (uint8_t)(MAX(ci, cq) + (MIN(ci, cq) >> 1)); + if (behindBy == 0) continue; - if (counter >= 20000) - break; - } else { - cq = ci; - } - getNext = !getNext; - } - } + samples++; + if (samples == 1) { + // DMA has transferred the very first data + dma_start_time = GetCountSspClk() & 0xfffffff0; + } - time_stop = GetCountSspClk(); - int k = DemodAnswer(received, buf, counter); - LogTrace(received, k, time_0 << 4, time_stop << 4, NULL, false); - BigBuf_free(); - return k; + uint16_t tagdata = *upTo++; + + if(upTo >= dmaBuf + ISO15693_DMA_BUFFER_SIZE) { // we have read all of the DMA buffer content. + upTo = dmaBuf; // start reading the circular buffer from the beginning + if (behindBy > (9*ISO15693_DMA_BUFFER_SIZE/10)) { + Dbprintf("About to blow circular buffer - aborted! behindBy=%d", behindBy); + ret = -1; + break; + } + } + if (AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_ENDRX)) { // DMA Counter Register had reached 0, already rotated. + AT91C_BASE_PDC_SSC->PDC_RNPR = (uint32_t) dmaBuf; // refresh the DMA Next Buffer and + AT91C_BASE_PDC_SSC->PDC_RNCR = ISO15693_DMA_BUFFER_SIZE; // DMA Next Counter registers + } + + if (Handle15693SamplesFromTag(tagdata, &DecodeTag)) { + *eof_time = dma_start_time + samples*16 - DELAY_TAG_TO_ARM; // end of EOF + if (DecodeTag.lastBit == SOF_PART2) { + *eof_time -= 8*16; // needed 8 additional samples to confirm single SOF (iCLASS) + } + if (DecodeTag.len > DecodeTag.max_len) { + ret = -2; // buffer overflow + } + break; + } + + if (samples > timeout && DecodeTag.state < STATE_TAG_RECEIVING_DATA) { + ret = -1; // timeout + break; + } + + } + + FpgaDisableSscDma(); + + if (DBGLEVEL >= DBG_EXTENDED) Dbprintf("samples = %d, ret = %d, Decoder: state = %d, lastBit = %d, len = %d, bitCount = %d, posCount = %d", + samples, ret, DecodeTag.state, DecodeTag.lastBit, DecodeTag.len, DecodeTag.bitCount, DecodeTag.posCount); + + if (ret < 0) { + return ret; + } + + uint32_t sof_time = *eof_time + - DecodeTag.len * 8 * 8 * 16 // time for byte transfers + - 32 * 16 // time for SOF transfer + - (DecodeTag.lastBit != SOF_PART2?32*16:0); // time for EOF transfer + + if (DBGLEVEL >= DBG_EXTENDED) Dbprintf("timing: sof_time = %d, eof_time = %d", sof_time, *eof_time); + + LogTrace(DecodeTag.output, DecodeTag.len, sof_time*4, *eof_time*4, NULL, false); + + return DecodeTag.len; +} + + +//============================================================================= +// An ISO15693 decoder for reader commands. +// +// This function is called 4 times per bit (every 2 subcarrier cycles). +// Subcarrier frequency fs is 848kHz, 1/fs = 1,18us, i.e. function is called every 2,36us +// LED handling: +// LED B -> ON once we have received the SOF and are expecting the rest. +// LED B -> OFF once we have received EOF or are in error state or unsynced +// +// Returns: true if we received a EOF +// false if we are still waiting for some more +//============================================================================= + +typedef struct DecodeReader { + enum { + STATE_READER_UNSYNCD, + STATE_READER_AWAIT_1ST_FALLING_EDGE_OF_SOF, + STATE_READER_AWAIT_1ST_RISING_EDGE_OF_SOF, + STATE_READER_AWAIT_2ND_FALLING_EDGE_OF_SOF, + STATE_READER_AWAIT_2ND_RISING_EDGE_OF_SOF, + STATE_READER_AWAIT_END_OF_SOF_1_OUT_OF_4, + STATE_READER_RECEIVE_DATA_1_OUT_OF_4, + STATE_READER_RECEIVE_DATA_1_OUT_OF_256, + STATE_READER_RECEIVE_JAMMING + } state; + enum { + CODING_1_OUT_OF_4, + CODING_1_OUT_OF_256 + } Coding; + uint8_t shiftReg; + uint8_t bitCount; + int byteCount; + int byteCountMax; + int posCount; + int sum1, sum2; + uint8_t *output; + uint8_t jam_search_len; + uint8_t *jam_search_string; +} DecodeReader_t; + +static void DecodeReaderInit(DecodeReader_t* DecodeReader, uint8_t *data, uint16_t max_len, uint8_t jam_search_len, uint8_t *jam_search_string) { + DecodeReader->output = data; + DecodeReader->byteCountMax = max_len; + DecodeReader->state = STATE_READER_UNSYNCD; + DecodeReader->byteCount = 0; + DecodeReader->bitCount = 0; + DecodeReader->posCount = 1; + DecodeReader->shiftReg = 0; + DecodeReader->jam_search_len = jam_search_len; + DecodeReader->jam_search_string = jam_search_string; +} + +static void DecodeReaderReset(DecodeReader_t* DecodeReader) { + DecodeReader->state = STATE_READER_UNSYNCD; +} + +static RAMFUNC int Handle15693SampleFromReader(bool bit, DecodeReader_t *DecodeReader) { + switch (DecodeReader->state) { + case STATE_READER_UNSYNCD: + // wait for unmodulated carrier + if (bit) { + DecodeReader->state = STATE_READER_AWAIT_1ST_FALLING_EDGE_OF_SOF; + } + break; + + case STATE_READER_AWAIT_1ST_FALLING_EDGE_OF_SOF: + if (!bit) { + // we went low, so this could be the beginning of a SOF + DecodeReader->posCount = 1; + DecodeReader->state = STATE_READER_AWAIT_1ST_RISING_EDGE_OF_SOF; + } + break; + + case STATE_READER_AWAIT_1ST_RISING_EDGE_OF_SOF: + DecodeReader->posCount++; + if (bit) { // detected rising edge + if (DecodeReader->posCount < 4) { // rising edge too early (nominally expected at 5) + DecodeReader->state = STATE_READER_AWAIT_1ST_FALLING_EDGE_OF_SOF; + } else { // SOF + DecodeReader->state = STATE_READER_AWAIT_2ND_FALLING_EDGE_OF_SOF; + } + } else { + if (DecodeReader->posCount > 5) { // stayed low for too long + DecodeReaderReset(DecodeReader); + } else { + // do nothing, keep waiting + } + } + break; + + case STATE_READER_AWAIT_2ND_FALLING_EDGE_OF_SOF: + DecodeReader->posCount++; + if (!bit) { // detected a falling edge + if (DecodeReader->posCount < 20) { // falling edge too early (nominally expected at 21 earliest) + DecodeReaderReset(DecodeReader); + } else if (DecodeReader->posCount < 23) { // SOF for 1 out of 4 coding + DecodeReader->Coding = CODING_1_OUT_OF_4; + DecodeReader->state = STATE_READER_AWAIT_2ND_RISING_EDGE_OF_SOF; + } else if (DecodeReader->posCount < 28) { // falling edge too early (nominally expected at 29 latest) + DecodeReaderReset(DecodeReader); + } else { // SOF for 1 out of 256 coding + DecodeReader->Coding = CODING_1_OUT_OF_256; + DecodeReader->state = STATE_READER_AWAIT_2ND_RISING_EDGE_OF_SOF; + } + } else { + if (DecodeReader->posCount > 29) { // stayed high for too long + DecodeReader->state = STATE_READER_AWAIT_1ST_FALLING_EDGE_OF_SOF; + } else { + // do nothing, keep waiting + } + } + break; + + case STATE_READER_AWAIT_2ND_RISING_EDGE_OF_SOF: + DecodeReader->posCount++; + if (bit) { // detected rising edge + if (DecodeReader->Coding == CODING_1_OUT_OF_256) { + if (DecodeReader->posCount < 32) { // rising edge too early (nominally expected at 33) + DecodeReader->state = STATE_READER_AWAIT_1ST_FALLING_EDGE_OF_SOF; + } else { + DecodeReader->posCount = 1; + DecodeReader->bitCount = 0; + DecodeReader->byteCount = 0; + DecodeReader->sum1 = 1; + DecodeReader->state = STATE_READER_RECEIVE_DATA_1_OUT_OF_256; + LED_B_ON(); + } + } else { // CODING_1_OUT_OF_4 + if (DecodeReader->posCount < 24) { // rising edge too early (nominally expected at 25) + DecodeReader->state = STATE_READER_AWAIT_1ST_FALLING_EDGE_OF_SOF; + } else { + DecodeReader->posCount = 1; + DecodeReader->state = STATE_READER_AWAIT_END_OF_SOF_1_OUT_OF_4; + } + } + } else { + if (DecodeReader->Coding == CODING_1_OUT_OF_256) { + if (DecodeReader->posCount > 34) { // signal stayed low for too long + DecodeReaderReset(DecodeReader); + } else { + // do nothing, keep waiting + } + } else { // CODING_1_OUT_OF_4 + if (DecodeReader->posCount > 26) { // signal stayed low for too long + DecodeReaderReset(DecodeReader); + } else { + // do nothing, keep waiting + } + } + } + break; + + case STATE_READER_AWAIT_END_OF_SOF_1_OUT_OF_4: + DecodeReader->posCount++; + if (bit) { + if (DecodeReader->posCount == 9) { + DecodeReader->posCount = 1; + DecodeReader->bitCount = 0; + DecodeReader->byteCount = 0; + DecodeReader->sum1 = 1; + DecodeReader->state = STATE_READER_RECEIVE_DATA_1_OUT_OF_4; + LED_B_ON(); + } else { + // do nothing, keep waiting + } + } else { // unexpected falling edge + DecodeReaderReset(DecodeReader); + } + break; + + case STATE_READER_RECEIVE_DATA_1_OUT_OF_4: + DecodeReader->posCount++; + if (DecodeReader->posCount == 1) { + DecodeReader->sum1 = bit?1:0; + } else if (DecodeReader->posCount <= 4) { + if (bit) DecodeReader->sum1++; + } else if (DecodeReader->posCount == 5) { + DecodeReader->sum2 = bit?1:0; + } else { + if (bit) DecodeReader->sum2++; + } + if (DecodeReader->posCount == 8) { + DecodeReader->posCount = 0; + if (DecodeReader->sum1 <= 1 && DecodeReader->sum2 >= 3) { // EOF + LED_B_OFF(); // Finished receiving + DecodeReaderReset(DecodeReader); + if (DecodeReader->byteCount != 0) { + return true; + } + } else if (DecodeReader->sum1 >= 3 && DecodeReader->sum2 <= 1) { // detected a 2bit position + DecodeReader->shiftReg >>= 2; + DecodeReader->shiftReg |= (DecodeReader->bitCount << 6); + } + if (DecodeReader->bitCount == 15) { // we have a full byte + DecodeReader->output[DecodeReader->byteCount++] = DecodeReader->shiftReg; + if (DecodeReader->byteCount > DecodeReader->byteCountMax) { + // buffer overflow, give up + LED_B_OFF(); + DecodeReaderReset(DecodeReader); + } + DecodeReader->bitCount = 0; + DecodeReader->shiftReg = 0; + if (DecodeReader->byteCount == DecodeReader->jam_search_len) { + if (!memcmp(DecodeReader->output, DecodeReader->jam_search_string, DecodeReader->jam_search_len)) { + LED_D_ON(); + FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER | FPGA_HF_READER_MODE_SEND_JAM); + DecodeReader->state = STATE_READER_RECEIVE_JAMMING; + } + } + } else { + DecodeReader->bitCount++; + } + } + break; + + case STATE_READER_RECEIVE_DATA_1_OUT_OF_256: + DecodeReader->posCount++; + if (DecodeReader->posCount == 1) { + DecodeReader->sum1 = bit?1:0; + } else if (DecodeReader->posCount <= 4) { + if (bit) DecodeReader->sum1++; + } else if (DecodeReader->posCount == 5) { + DecodeReader->sum2 = bit?1:0; + } else if (bit) { + DecodeReader->sum2++; + } + if (DecodeReader->posCount == 8) { + DecodeReader->posCount = 0; + if (DecodeReader->sum1 <= 1 && DecodeReader->sum2 >= 3) { // EOF + LED_B_OFF(); // Finished receiving + DecodeReaderReset(DecodeReader); + if (DecodeReader->byteCount != 0) { + return true; + } + } else if (DecodeReader->sum1 >= 3 && DecodeReader->sum2 <= 1) { // detected the bit position + DecodeReader->shiftReg = DecodeReader->bitCount; + } + if (DecodeReader->bitCount == 255) { // we have a full byte + DecodeReader->output[DecodeReader->byteCount++] = DecodeReader->shiftReg; + if (DecodeReader->byteCount > DecodeReader->byteCountMax) { + // buffer overflow, give up + LED_B_OFF(); + DecodeReaderReset(DecodeReader); + } + if (DecodeReader->byteCount == DecodeReader->jam_search_len) { + if (!memcmp(DecodeReader->output, DecodeReader->jam_search_string, DecodeReader->jam_search_len)) { + LED_D_ON(); + FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER | FPGA_HF_READER_MODE_SEND_JAM); + DecodeReader->state = STATE_READER_RECEIVE_JAMMING; + } + } + } + DecodeReader->bitCount++; + } + break; + + case STATE_READER_RECEIVE_JAMMING: + DecodeReader->posCount++; + if (DecodeReader->Coding == CODING_1_OUT_OF_4) { + if (DecodeReader->posCount == 7*16) { // 7 bits jammed + FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER | FPGA_HF_READER_MODE_SNOOP_AMPLITUDE); // stop jamming + // FpgaDisableTracing(); + LED_D_OFF(); + } else if (DecodeReader->posCount == 8*16) { + DecodeReader->posCount = 0; + DecodeReader->output[DecodeReader->byteCount++] = 0x00; + DecodeReader->state = STATE_READER_RECEIVE_DATA_1_OUT_OF_4; + } + } else { + if (DecodeReader->posCount == 7*256) { // 7 bits jammend + FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER | FPGA_HF_READER_MODE_SNOOP_AMPLITUDE); // stop jamming + LED_D_OFF(); + } else if (DecodeReader->posCount == 8*256) { + DecodeReader->posCount = 0; + DecodeReader->output[DecodeReader->byteCount++] = 0x00; + DecodeReader->state = STATE_READER_RECEIVE_DATA_1_OUT_OF_256; + } + } + break; + + default: + LED_B_OFF(); + DecodeReaderReset(DecodeReader); + break; + } + + return false; +} + +//----------------------------------------------------------------------------- +// Receive a command (from the reader to us, where we are the simulated tag), +// and store it in the given buffer, up to the given maximum length. Keeps +// spinning, waiting for a well-framed command, until either we get one +// (returns len) or someone presses the pushbutton on the board (returns -1). +// +// Assume that we're called with the SSC (to the FPGA) and ADC path set +// correctly. +//----------------------------------------------------------------------------- + +static int GetIso15693CommandFromReader(uint8_t *received, size_t max_len, uint32_t *eof_time) { + int samples = 0; + bool gotFrame = false; + uint8_t b; + + uint8_t dmaBuf[ISO15693_DMA_BUFFER_SIZE]; + + // the decoder data structure + DecodeReader_t DecodeReader = {0}; + DecodeReaderInit(&DecodeReader, received, max_len, 0, NULL); + + // wait for last transfer to complete + while (!(AT91C_BASE_SSC->SSC_SR & AT91C_SSC_TXEMPTY)); + + LED_D_OFF(); + FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_SIMULATOR | FPGA_HF_SIMULATOR_NO_MODULATION); + + // clear receive register and wait for next transfer + uint32_t temp = AT91C_BASE_SSC->SSC_RHR; + (void) temp; + while (!(AT91C_BASE_SSC->SSC_SR & AT91C_SSC_RXRDY)) ; + + uint32_t dma_start_time = GetCountSspClk() & 0xfffffff8; + + // Setup and start DMA. + FpgaSetupSscDma(dmaBuf, ISO15693_DMA_BUFFER_SIZE); + uint8_t *upTo = dmaBuf; + + for (;;) { + uint16_t behindBy = ((uint8_t*)AT91C_BASE_PDC_SSC->PDC_RPR - upTo) & (ISO15693_DMA_BUFFER_SIZE-1); + + if (behindBy == 0) continue; + + b = *upTo++; + if (upTo >= dmaBuf + ISO15693_DMA_BUFFER_SIZE) { // we have read all of the DMA buffer content. + upTo = dmaBuf; // start reading the circular buffer from the beginning + if (behindBy > (9*ISO15693_DMA_BUFFER_SIZE/10)) { + Dbprintf("About to blow circular buffer - aborted! behindBy=%d", behindBy); + break; + } + } + if (AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_ENDRX)) { // DMA Counter Register had reached 0, already rotated. + AT91C_BASE_PDC_SSC->PDC_RNPR = (uint32_t) dmaBuf; // refresh the DMA Next Buffer and + AT91C_BASE_PDC_SSC->PDC_RNCR = ISO15693_DMA_BUFFER_SIZE; // DMA Next Counter registers + } + + for (int i = 7; i >= 0; i--) { + if (Handle15693SampleFromReader((b >> i) & 0x01, &DecodeReader)) { + *eof_time = dma_start_time + samples - DELAY_READER_TO_ARM; // end of EOF + gotFrame = true; + break; + } + samples++; + } + + if (gotFrame) { + break; + } + + if (BUTTON_PRESS()) { + DecodeReader.byteCount = -1; + break; + } + + WDT_HIT(); + } + + FpgaDisableSscDma(); + + if (DBGLEVEL >= DBG_EXTENDED) Dbprintf("samples = %d, gotFrame = %d, Decoder: state = %d, len = %d, bitCount = %d, posCount = %d", + samples, gotFrame, DecodeReader.state, DecodeReader.byteCount, DecodeReader.bitCount, DecodeReader.posCount); + + if (DecodeReader.byteCount > 0) { + uint32_t sof_time = *eof_time + - DecodeReader.byteCount * (DecodeReader.Coding==CODING_1_OUT_OF_4?128:2048) // time for byte transfers + - 32 // time for SOF transfer + - 16; // time for EOF transfer + LogTrace(DecodeReader.output, DecodeReader.byteCount, sof_time*32, *eof_time*32, NULL, true); + } + + return DecodeReader.byteCount; } //----------------------------------------------------------------------------- @@ -492,133 +1094,231 @@ static int GetIso15693AnswerFromSniff(uint8_t *received, int *samples, int *elap // so that it can be downloaded to a PC and processed there. //----------------------------------------------------------------------------- void AcquireRawAdcSamplesIso15693(void) { - int c = 0, getNext = false; - int ci, cq = 0; + LED_A_ON(); - FpgaDownloadAndGo(FPGA_BITSTREAM_HF); - SetAdcMuxFor(GPIO_MUXSEL_HIPKD); - FpgaSetupSsc(); + //iceman: needs malloc + uint8_t *dest = BigBuf_get_addr(); - // Now send the command - FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER_TX); - SpinDelay(200); + FpgaDownloadAndGo(FPGA_BITSTREAM_HF); + FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER); + LED_D_ON(); + FpgaSetupSsc(FPGA_MAJOR_MODE_HF_READER); + SetAdcMuxFor(GPIO_MUXSEL_HIPKD); - uint8_t *buf = BigBuf_get_addr(); + uint8_t cmd[5]; + BuildIdentifyRequest(cmd); + CodeIso15693AsReader(cmd, sizeof(cmd)); - uint32_t time_start = GetCountSspClk(); - uint8_t cmd[CMD_ID_RESP] = {0}; - BuildIdentifyRequest(cmd); + // Give the tags time to energize + SpinDelay(100); - // sending command - c = 0; - for (;;) { - WDT_HIT(); + // Now send the command + uint32_t start_time = 0; + TransmitTo15693Tag(ToSend, ToSendMax, &start_time); - if (AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_TXRDY)) { - AT91C_BASE_SSC->SSC_THR = ToSend[c]; - c++; - if (c == ToSendMax + 3) { - break; - } - } - } + // wait for last transfer to complete + while (!(AT91C_BASE_SSC->SSC_SR & AT91C_SSC_TXEMPTY)) ; - LogTrace(cmd, CMD_ID_RESP, time_start << 4, GetCountSspClk() << 4, NULL, true); + FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER | FPGA_HF_READER_SUBCARRIER_424_KHZ | FPGA_HF_READER_MODE_RECEIVE_AMPLITUDE); - FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER_RX_XCORR); + for(int c = 0; c < 4000; ) { + if(AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_RXRDY)) { + uint16_t r = AT91C_BASE_SSC->SSC_RHR; + dest[c++] = r >> 5; + } + } - c = 0; - for (;;) { - WDT_HIT(); - - if (AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_RXRDY)) { - - ci = (int8_t)AT91C_BASE_SSC->SSC_RHR; - ci = ABS(ci); - - // The samples are correlations against I and Q versions of the - // tone that the tag AM-modulates, so every other sample is I, - // every other is Q. We just want power, so abs(I) + abs(Q) is - // close to what we want. - // iceman 2016, amplitude sqrt(abs(i) + abs(q)) - if (getNext) { - - buf[c++] = (uint8_t)(MAX(ci, cq) + (MIN(ci, cq) >> 1)); - - if (c >= 7000) break; - - } else { - cq = ci; - } - getNext = !getNext; - } - } + FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); + LEDsoff(); } -// switch_off, initreader, no logging -void RecordRawAdcSamplesIso15693(void) { +void SniffIso15693(uint8_t jam_search_len, uint8_t *jam_search_string) { - int c = 0, getNext = false; - int ci, cq = 0; + LED_A_ON(); - Iso15693InitReader(); + FpgaDownloadAndGo(FPGA_BITSTREAM_HF); - uint8_t *buf = BigBuf_get_addr(); + clear_trace(); + set_tracing(true); - for (;;) { - WDT_HIT(); + // The DMA buffer, used to stream samples from the FPGA + uint16_t dmaBuf[ISO15693_DMA_BUFFER_SIZE]; - if (AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_RXRDY)) { + // Count of samples received so far, so that we can include timing + // information in the trace buffer. + int samples = 0; - ci = (int8_t)AT91C_BASE_SSC->SSC_RHR; - ci = ABS(ci); - // The samples are correlations against I and Q versions of the - // tone that the tag AM-modulates, so every other sample is I, - // every other is Q. We just want power, so abs(I) + abs(Q) is - // close to what we want. - if (getNext) { + DecodeTag_t DecodeTag = {0}; + uint8_t response[ISO15693_MAX_RESPONSE_LENGTH]; + DecodeTagInit(&DecodeTag, response, sizeof(response)); - buf[c++] = (uint8_t)(MAX(ci, cq) + (MIN(ci, cq) >> 1)); + DecodeReader_t DecodeReader = {0}; + uint8_t cmd[ISO15693_MAX_COMMAND_LENGTH]; + DecodeReaderInit(&DecodeReader, cmd, sizeof(cmd), jam_search_len, jam_search_string); - if (c >= 7000) - break; - } else { - cq = ci; - } + // Print some debug information about the buffer sizes + if (DBGLEVEL >= DBG_EXTENDED) { + Dbprintf("Sniffing buffers initialized:"); + Dbprintf(" Trace: %i bytes", BigBuf_max_traceLen()); + Dbprintf(" Reader -> tag: %i bytes", ISO15693_MAX_COMMAND_LENGTH); + Dbprintf(" tag -> Reader: %i bytes", ISO15693_MAX_RESPONSE_LENGTH); + Dbprintf(" DMA: %i bytes", ISO15693_DMA_BUFFER_SIZE * sizeof(uint16_t)); + } - getNext = !getNext; - } - } + Dbprintf("Sniff started. Press PM3 Button to stop."); - Dbprintf("done"); - switch_off(); + FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER | FPGA_HF_READER_MODE_SNOOP_AMPLITUDE); + LED_D_OFF(); + SetAdcMuxFor(GPIO_MUXSEL_HIPKD); + FpgaSetupSsc(FPGA_MAJOR_MODE_HF_READER); + StartCountSspClk(); + FpgaSetupSscDma((uint8_t*) dmaBuf, ISO15693_DMA_BUFFER_SIZE); + + bool TagIsActive = false; + bool ReaderIsActive = false; + bool ExpectTagAnswer = false; + uint32_t dma_start_time = 0; + uint16_t *upTo = dmaBuf; + + uint16_t max_behindBy = 0; + + // And now we loop, receiving samples. + for(;;) { + uint16_t behindBy = ((uint16_t*)AT91C_BASE_PDC_SSC->PDC_RPR - upTo) & (ISO15693_DMA_BUFFER_SIZE-1); + if (behindBy > max_behindBy) { + max_behindBy = behindBy; + } + + if (behindBy == 0) continue; + + samples++; + if (samples == 1) { + // DMA has transferred the very first data + dma_start_time = GetCountSspClk() & 0xfffffff0; + } + + uint16_t snoopdata = *upTo++; + + if (upTo >= dmaBuf + ISO15693_DMA_BUFFER_SIZE) { // we have read all of the DMA buffer content. + upTo = dmaBuf; // start reading the circular buffer from the beginning + if (behindBy > (9*ISO15693_DMA_BUFFER_SIZE/10)) { + + Dbprintf("About to blow circular buffer - aborted! behindBy=%d, samples=%d", behindBy, samples); + break; + } + if (AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_ENDRX)) { // DMA Counter Register had reached 0, already rotated. + AT91C_BASE_PDC_SSC->PDC_RNPR = (uint32_t) dmaBuf; // refresh the DMA Next Buffer and + AT91C_BASE_PDC_SSC->PDC_RNCR = ISO15693_DMA_BUFFER_SIZE; // DMA Next Counter registers + WDT_HIT(); + if (BUTTON_PRESS()) { + DbpString("Sniff stopped."); + break; + } + } + } + + if (!TagIsActive) { // no need to try decoding reader data if the tag is sending + if (Handle15693SampleFromReader(snoopdata & 0x02, &DecodeReader)) { + + uint32_t eof_time = dma_start_time + samples*16 + 8 - DELAY_READER_TO_ARM_SNIFF; // end of EOF + if (DecodeReader.byteCount > 0) { + uint32_t sof_time = eof_time + - DecodeReader.byteCount * (DecodeReader.Coding==CODING_1_OUT_OF_4?128*16:2048*16) // time for byte transfers + - 32*16 // time for SOF transfer + - 16*16; // time for EOF transfer + LogTrace(DecodeReader.output, DecodeReader.byteCount, sof_time*4, eof_time*4, NULL, true); + } + // And ready to receive another command. + DecodeReaderReset(&DecodeReader); + // And also reset the demod code, which might have been + // false-triggered by the commands from the reader. + DecodeTagReset(&DecodeTag); + ReaderIsActive = false; + ExpectTagAnswer = true; + + } else if (Handle15693SampleFromReader(snoopdata & 0x01, &DecodeReader)) { + + uint32_t eof_time = dma_start_time + samples*16 + 16 - DELAY_READER_TO_ARM_SNIFF; // end of EOF + if (DecodeReader.byteCount > 0) { + uint32_t sof_time = eof_time + - DecodeReader.byteCount * (DecodeReader.Coding==CODING_1_OUT_OF_4?128*16:2048*16) // time for byte transfers + - 32*16 // time for SOF transfer + - 16*16; // time for EOF transfer + LogTrace(DecodeReader.output, DecodeReader.byteCount, sof_time*4, eof_time*4, NULL, true); + } + // And ready to receive another command + DecodeReaderReset(&DecodeReader); + + // And also reset the demod code, which might have been + // false-triggered by the commands from the reader. + DecodeTagReset(&DecodeTag); + ReaderIsActive = false; + ExpectTagAnswer = true; + + } else { + ReaderIsActive = (DecodeReader.state >= STATE_READER_RECEIVE_DATA_1_OUT_OF_4); + } + } + + if (!ReaderIsActive && ExpectTagAnswer) { // no need to try decoding tag data if the reader is currently sending or no answer expected yet + if (Handle15693SamplesFromTag(snoopdata >> 2, &DecodeTag)) { + + uint32_t eof_time = dma_start_time + samples*16 - DELAY_TAG_TO_ARM_SNIFF; // end of EOF + if (DecodeTag.lastBit == SOF_PART2) { + eof_time -= 8*16; // needed 8 additional samples to confirm single SOF (iCLASS) + } + uint32_t sof_time = eof_time + - DecodeTag.len * 8 * 8 * 16 // time for byte transfers + - 32 * 16 // time for SOF transfer + - (DecodeTag.lastBit != SOF_PART2?32*16:0); // time for EOF transfer + LogTrace(DecodeTag.output, DecodeTag.len, sof_time*4, eof_time*4, NULL, false); + // And ready to receive another response. + DecodeTagReset(&DecodeTag); + DecodeReaderReset(&DecodeReader); + ExpectTagAnswer = false; + TagIsActive = false; + } else { + TagIsActive = (DecodeTag.state >= STATE_TAG_RECEIVING_DATA); + } + } + + } + + FpgaDisableSscDma(); + + DbpString("Sniff statistics:"); + Dbprintf(" ExpectTagAnswer: %d, TagIsActive: %d, ReaderIsActive: %d", ExpectTagAnswer, TagIsActive, ReaderIsActive); + Dbprintf(" DecodeTag State: %d", DecodeTag.state); + Dbprintf(" DecodeTag byteCnt: %d", DecodeTag.len); + Dbprintf(" DecodeTag posCount: %d", DecodeTag.posCount); + Dbprintf(" DecodeReader State: %d", DecodeReader.state); + Dbprintf(" DecodeReader byteCnt: %d", DecodeReader.byteCount); + Dbprintf(" DecodeReader posCount: %d", DecodeReader.posCount); + Dbprintf(" Trace length: %d", BigBuf_get_traceLen()); + Dbprintf(" Max behindBy: %d", max_behindBy); } // Initialize the proxmark as iso15k reader // (this might produces glitches that confuse some tags void Iso15693InitReader(void) { - LEDsoff(); - clear_trace(); - set_tracing(true); FpgaDownloadAndGo(FPGA_BITSTREAM_HF); // Start from off (no field generated) FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); + LEDsoff(); SpinDelay(10); - SetAdcMuxFor(GPIO_MUXSEL_HIPKD); + // switch field on + FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER); + LED_D_ON(); + + // initialize SSC and select proper AD input + FpgaSetupSsc(FPGA_MAJOR_MODE_HF_READER); + SetAdcMuxFor(GPIO_MUXSEL_HIPKD); - FpgaSetupSsc(); - - // Give the tags time to energize - FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER_RX_XCORR); - SpinDelay(200); - - // Start the timer - StartCountSspClk(); - - LED_A_ON(); + // give tags some time to energize + SpinDelay(250); } /////////////////////////////////////////////////////////////////////// @@ -626,75 +1326,44 @@ void Iso15693InitReader(void) { // This section basicly contains transmission and receiving of bits /////////////////////////////////////////////////////////////////////// -// Encode (into the ToSend buffers) an identify request, which is the first +// Encode an identify request, which is the first // thing that you must send to a tag to get a response. // It expects "cmdout" to be at least CMD_ID_RESP large -static void BuildIdentifyRequest(uint8_t *cmdout) { - uint8_t cmd[CMD_ID_RESP] = {0, ISO15_CMD_INVENTORY, 0, 0, 0}; +// When READER: +static void BuildIdentifyRequest(uint8_t *cmd) { // flags cmd[0] = ISO15_REQ_SUBCARRIER_SINGLE | ISO15_REQ_DATARATE_HIGH | ISO15_REQ_INVENTORY | ISO15_REQINV_SLOT1; - // no mask - cmd[2] = 0x00; + // inventory command code + cmd[1] = ISO15_CMD_INVENTORY; + // no mask + cmd[2] = 0x00; // CRC AddCrc15(cmd, 3); - // coding as high speed (1 out of 4) - CodeIso15693AsReader(cmd, CMD_ID_RESP); - memcpy(cmdout, cmd, CMD_ID_RESP); } // uid is in transmission order (which is reverse of display order) -/* -static void BuildReadBlockRequest(uint8_t **out, uint8_t *uid, uint8_t blockNumber ) { - uint8_t cmd[CMD_READ_RESP] = {0,0,0,0,0,0,0,0,0,0,0,0,0}; - // If we set the Option_Flag in this request, the VICC will respond with the secuirty status of the block - // followed by teh block data - // one sub-carrier, inventory, 1 slot, fast rate - cmd[0] = (1 << 6)| (1 << 5) | (1 << 1); // no SELECT bit, ADDR bit, OPTION bit - // READ BLOCK command code - cmd[1] = 0x20; - // UID may be optionally specified here - // 64-bit UID - cmd[2] = uid[0]; - cmd[3] = uid[1]; - cmd[4] = uid[2]; - cmd[5] = uid[3]; - cmd[6] = uid[4]; - cmd[7] = uid[5]; - cmd[8] = uid[6]; - cmd[9] = uid[7]; // 0xe0; // always e0 (not exactly unique) - // Block number to read - cmd[10] = blockNumber;//0x00; - // CRC - AddCrc15(cmd, 11); - CodeIso15693AsReader(cmd, CMD_READ_RESP); - memcpy(out, cmd, CMD_ID_RESP); -} -*/ -// Now the VICC>VCD responses when we are simulating a tag -// It expects "out" to be at least CMD_INV_RESP large -static void BuildInventoryResponse(uint8_t *cmdout, uint8_t *uid) { +// When SIM: now the VICC>VCD responses when we are simulating a tag +static void BuildInventoryResponse(uint8_t *uid) { - uint8_t cmd[CMD_INV_RESP] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; + uint8_t cmd[CMD_INV_RESP] = {0}; - // one sub-carrier, inventory, 1 slot, fast rate - // AFI is at bit 5 (1<<4) when doing an INVENTORY - //(1 << 2) | (1 << 5) | (1 << 1); - cmd[0] = 0; // + cmd[0] = 0; // No error, no protocol format extension cmd[1] = 0; // DSFID (data storage format identifier). 0x00 = not supported + // 64-bit UID - cmd[2] = uid[7]; //0x32; - cmd[3] = uid[6]; //0x4b; - cmd[4] = uid[5]; //0x03; - cmd[5] = uid[4]; //0x01; - cmd[6] = uid[3]; //0x00; - cmd[7] = uid[2]; //0x10; - cmd[8] = uid[1]; //0x05; - cmd[9] = uid[0]; //0xe0; + cmd[2] = uid[7]; + cmd[3] = uid[6]; + cmd[4] = uid[5]; + cmd[5] = uid[4]; + cmd[6] = uid[3]; + cmd[7] = uid[2]; + cmd[8] = uid[1]; + cmd[9] = uid[0]; + // CRC AddCrc15(cmd, 10); - CodeIso15693AsReader(cmd, CMD_INV_RESP); - memcpy(cmdout, cmd, CMD_INV_RESP); + CodeIso15693AsTag(cmd, CMD_INV_RESP); } // Universal Method for sending to and recv bytes from a tag @@ -704,36 +1373,52 @@ static void BuildInventoryResponse(uint8_t *cmdout, uint8_t *uid) { // If you do not need the answer use NULL for *recv[] // return: length of received data // logging enabled -static int SendDataTag(uint8_t *send, int sendlen, bool init, int speed, uint8_t *outdata) { +int SendDataTag(uint8_t *send, int sendlen, bool init, bool speed_fast, uint8_t *recv, + uint16_t max_recv_len, uint32_t start_time, uint16_t timeout, uint32_t *eof_time) { - int t_samples = 0, wait = 0, elapsed = 0, answer_len = 0; + if (init) { + Iso15693InitReader(); + StartCountSspClk(); + } - LEDsoff(); + int answerLen = 0; - if (init) Iso15693InitReader(); + if (speed_fast) { + // high speed (1 out of 4) + CodeIso15693AsReader(send, sendlen); + } else { + // low speed (1 out of 256) + CodeIso15693AsReader256(send, sendlen); + } - LED_A_ON(); + TransmitTo15693Tag(ToSend, ToSendMax, &start_time); + uint32_t end_time = start_time + 32*(8*ToSendMax-4); // substract the 4 padding bits after EOF + LogTrace(send, sendlen, start_time*4, end_time*4, NULL, true); - if (!speed) - CodeIso15693AsReader256(send, sendlen); // low speed (1 out of 256) - else - CodeIso15693AsReader(send, sendlen); // high speed (1 out of 4) + // Now wait for a response + if (recv != NULL) { + answerLen = GetIso15693AnswerFromTag(recv, max_recv_len, timeout, eof_time); + } - LED_A_INV(); + return answerLen; +} - uint32_t time_start = GetCountSspClk(); +int SendDataTagEOF(uint8_t *recv, uint16_t max_recv_len, uint32_t start_time, uint16_t timeout, uint32_t *eof_time) { - TransmitTo15693Tag(ToSend, ToSendMax, &t_samples, &wait); - LogTrace(send, sendlen, time_start << 4, GetCountSspClk() << 4, NULL, true); + int answerLen = 0; - // Now wait for a response - if (outdata != NULL) { - LED_B_INV(); - answer_len = GetIso15693AnswerFromTag(outdata, &elapsed); - } + CodeIso15693AsReaderEOF(); - LEDsoff(); - return answer_len; + TransmitTo15693Tag(ToSend, ToSendMax, &start_time); + uint32_t end_time = start_time + 32*(8*ToSendMax-4); // substract the 4 padding bits after EOF + LogTrace(NULL, 0, start_time*4, end_time*4, NULL, true); + + // Now wait for a response + if (recv != NULL) { + answerLen = GetIso15693AnswerFromTag(recv, max_recv_len, timeout, eof_time); + } + + return answerLen; } // -------------------------------------------------------------------- @@ -745,10 +1430,13 @@ static int SendDataTag(uint8_t *send, int sendlen, bool init, int speed, uint8_t static void DbdecodeIso15693Answer(int len, uint8_t *d) { if (len > 3) { + char status[DBD15STATLEN + 1] = {0}; - if (d[0] & (1 << 3)) + + if (d[0] & ISO15_RES_EXT) strncat(status, "ProtExt ", DBD15STATLEN - strlen(status)); - if (d[0] & 1) { + + if (d[0] & ISO15_RES_ERROR) { // error strncat(status, "Error ", DBD15STATLEN - strlen(status)); switch (d[1]) { @@ -788,9 +1476,9 @@ static void DbdecodeIso15693Answer(int len, uint8_t *d) { } if (CheckCrc15(d, len)) - strncat(status, "[+] crc OK", DBD15STATLEN - strlen(status)); + strncat(status, "[+] crc (" _GREEN_("OK") ")", DBD15STATLEN - strlen(status)); else - strncat(status, "[!] crc fail", DBD15STATLEN - strlen(status)); + strncat(status, "[!] crc (" _RED_("fail") ")", DBD15STATLEN - strlen(status)); if (DBGLEVEL >= DBG_ERROR) Dbprintf("%s", status); } @@ -807,41 +1495,35 @@ static void DbdecodeIso15693Answer(int len, uint8_t *d) { // ok // parameter is unused !?! void ReaderIso15693(uint32_t parameter) { - int answerLen1 = 0; - int tsamples = 0, wait = 0, elapsed = 0; - // set up device/fpga - Iso15693InitReader(); - uint8_t *answer1 = BigBuf_malloc(50); - uint8_t *answer2 = BigBuf_malloc(50); + LED_A_ON(); + set_tracing(true); - // Blank arrays - memset(answer1, 0x00, 50); - memset(answer2, 0x00, 50); + uint8_t *answer = BigBuf_malloc(ISO15693_MAX_RESPONSE_LENGTH); + memset(answer, 0x00, ISO15693_MAX_RESPONSE_LENGTH); - // Now send the IDENTIFY command - // FIRST WE RUN AN INVENTORY TO GET THE TAG UID - // THIS MEANS WE CAN PRE-BUILD REQUESTS TO SAVE CPU TIME - uint32_t time_start = GetCountSspClk(); - uint8_t cmd[CMD_ID_RESP] = {0}; - BuildIdentifyRequest(cmd); - TransmitTo15693Tag(ToSend, ToSendMax, &tsamples, &wait); - LogTrace(cmd, CMD_ID_RESP, time_start << 4, GetCountSspClk() << 4, NULL, true); + // FIRST WE RUN AN INVENTORY TO GET THE TAG UID + // THIS MEANS WE CAN PRE-BUILD REQUESTS TO SAVE CPU TIME - // Now wait for a response - answerLen1 = GetIso15693AnswerFromTag(answer1, &elapsed) ; + // Send the IDENTIFY command + uint8_t cmd[5] = {0}; + BuildIdentifyRequest(cmd); + uint32_t start_time = 0; + uint32_t eof_time; + int answerLen = SendDataTag(cmd, sizeof(cmd), true, true, answer, ISO15693_MAX_RESPONSE_LENGTH, start_time, ISO15693_READER_TIMEOUT, &eof_time); + start_time = eof_time + DELAY_ISO15693_VICC_TO_VCD_READER; // we should do a better check than this - if (answerLen1 >= 12) { + if (answerLen >= 12) { uint8_t uid[8]; - uid[0] = answer1[9]; // always E0 - uid[1] = answer1[8]; // IC Manufacturer code - uid[2] = answer1[7]; - uid[3] = answer1[6]; - uid[4] = answer1[5]; - uid[5] = answer1[4]; - uid[6] = answer1[3]; - uid[7] = answer1[2]; + uid[0] = answer[9]; // always E0 + uid[1] = answer[8]; // IC Manufacturer code + uid[2] = answer[7]; + uid[3] = answer[6]; + uid[4] = answer[5]; + uid[5] = answer[4]; + uid[6] = answer[3]; + uid[7] = answer[2]; if (DBGLEVEL >= DBG_EXTENDED) { Dbprintf("[+] UID = %02X%02X%02X%02X%02X%02X%02X%02X", @@ -854,36 +1536,37 @@ void ReaderIso15693(uint32_t parameter) { // arg1 = len of response (12 bytes) // arg2 = rtf // asbytes = uid. - reply_old(CMD_ACK, 1, sizeof(uid), 0, uid, sizeof(uid)); + reply_mix(CMD_ACK, 1, sizeof(uid), 0, uid, sizeof(uid)); } if (DBGLEVEL >= DBG_EXTENDED) { - Dbprintf("[+] %d octets read from IDENTIFY request:", answerLen1); - DbdecodeIso15693Answer(answerLen1, answer1); - Dbhexdump(answerLen1, answer1, true); + Dbprintf("[+] %d octets read from IDENTIFY request:", answerLen); + DbdecodeIso15693Answer(answerLen, answer); + Dbhexdump(answerLen, answer, true); } switch_off(); + BigBuf_free(); +} + +// When SIM: initialize the Proxmark3 as ISO15693 tag +static void Iso15693InitTag(void) { + FpgaDownloadAndGo(FPGA_BITSTREAM_HF); + SetAdcMuxFor(GPIO_MUXSEL_HIPKD); + FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_SIMULATOR | FPGA_HF_SIMULATOR_NO_MODULATION); + FpgaSetupSsc(FPGA_MAJOR_MODE_HF_SIMULATOR); + StartCountSspClk(); } // Simulate an ISO15693 TAG, perform anti-collision and then print any reader commands // all demodulation performed in arm rather than host. - greg -void SimTagIso15693(uint32_t parameter, uint8_t *uid) { +void SimTagIso15693(uint8_t *uid) { LEDsoff(); - FpgaDownloadAndGo(FPGA_BITSTREAM_HF); - SetAdcMuxFor(GPIO_MUXSEL_HIPKD); - FpgaSetupSsc(); - // Start from off (no field generated) - FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); - SpinDelay(200); + Iso15693InitTag(); LED_A_ON(); - uint32_t time_start; - int samples = 0, tsamples = 0; - int wait = 0, elapsed = 0; - Dbprintf("ISO-15963 Simulating uid: %02X%02X%02X%02X%02X%02X%02X%02X", uid[0], uid[1], uid[2], uid[3], uid[4], uid[5], uid[6], uid[7]); uint8_t buf[ISO15_MAX_FRAME]; @@ -892,31 +1575,29 @@ void SimTagIso15693(uint32_t parameter, uint8_t *uid) { LED_C_ON(); // Build a suitable reponse to the reader INVENTORY cocmmand - // not so obsvious, but in the call to BuildInventoryResponse, the command is copied to the global ToSend buffer used below. - uint8_t cmd[CMD_INV_RESP] = {0}; - BuildInventoryResponse(cmd, uid); + // not so obvious, but in the call to BuildInventoryResponse, the command is copied to the global ToSend buffer used below. + BuildInventoryResponse(uid); - while (!BUTTON_PRESS() && !data_available()) { + while (!BUTTON_PRESS()) { WDT_HIT(); // Listen to reader - int ans = GetIso15693AnswerFromSniff(buf, &samples, &elapsed) ; + uint8_t cmd[ISO15693_MAX_COMMAND_LENGTH]; + uint32_t eof_time = 0, start_time = 0; + int cmd_len = GetIso15693CommandFromReader(cmd, sizeof(cmd), &eof_time); - // we should do a better check than this - if (ans >= 1) { + if ((cmd_len >= 5) && (cmd[0] & ISO15_REQ_INVENTORY) && (cmd[1] == ISO15_CMD_INVENTORY)) { // TODO: check more flags + bool slow = !(cmd[0] & ISO15_REQ_DATARATE_HIGH); + start_time = eof_time + DELAY_ISO15693_VCD_TO_VICC_SIM; + TransmitTo15693Reader(ToSend, ToSendMax, &start_time, 0, slow); + } - time_start = GetCountSspClk(); - TransmitTo15693Reader(ToSend, ToSendMax, &tsamples, &wait); - LogTrace(cmd, CMD_INV_RESP, time_start << 4, GetCountSspClk() << 4, NULL, true); - - if (DBGLEVEL >= DBG_EXTENDED) { - Dbprintf("[+] %d octets read from reader command: %x %x %x %x %x %x %x %x", ans, - buf[0], buf[1], buf[2], buf[3], - buf[4], buf[5], buf[6], buf[7] - ); - } + if (DBGLEVEL >= DBG_EXTENDED) { + Dbprintf(" %d bytes read from reader:", cmd_len); + Dbhexdump(cmd_len, cmd, false); } - } + } + switch_off(); } @@ -924,12 +1605,8 @@ void SimTagIso15693(uint32_t parameter, uint8_t *uid) { // (some manufactures offer a way to read the AFI, though) void BruteforceIso15693Afi(uint32_t speed) { - uint8_t data[7] = {0, 0, 0, 0, 0, 0, 0}; - uint8_t buf[ISO15_MAX_FRAME]; - memset(buf, 0x00, sizeof(buf)); - int datalen = 0, recvlen = 0; - bool aborted = false; - + uint8_t data[7] = {0}; + uint8_t recv[ISO15693_MAX_RESPONSE_LENGTH]; Iso15693InitReader(); // first without AFI @@ -939,31 +1616,40 @@ void BruteforceIso15693Afi(uint32_t speed) { data[1] = ISO15_CMD_INVENTORY; data[2] = 0; // AFI AddCrc15(data, 3); - datalen = 5; - recvlen = SendDataTag(data, datalen, false, speed, buf); + + int datalen = 5; + uint32_t eof_time = 0; + uint32_t start_time = GetCountSspClk(); + int recvlen = SendDataTag(data, datalen, true, speed, recv, sizeof(recv), 0, ISO15693_READER_TIMEOUT, &eof_time); + start_time = eof_time + DELAY_ISO15693_VICC_TO_VCD_READER; WDT_HIT(); if (recvlen >= 12) { - Dbprintf("NoAFI UID = %s", iso15693_sprintUID(NULL, buf + 2)); + Dbprintf("NoAFI UID = %s", iso15693_sprintUID(NULL, recv + 2)); } // now with AFI data[0] |= ISO15_REQINV_AFI; - //data[1] = ISO15_CMD_INVENTORY; data[2] = 0; // AFI data[3] = 0; // mask length // 4 + 2crc datalen = 6; + bool aborted = false; for (uint16_t i = 0; i < 256; i++) { + data[2] = i & 0xFF; AddCrc15(data, 4); - recvlen = SendDataTag(data, datalen, false, speed, buf); + + recvlen = SendDataTag(data, datalen, false, speed, recv, sizeof(recv), start_time, ISO15693_READER_TIMEOUT, &eof_time); + start_time = eof_time + DELAY_ISO15693_VICC_TO_VCD_READER; + WDT_HIT(); + if (recvlen >= 12) { - Dbprintf("AFI = %i UID = %s", i, iso15693_sprintUID(NULL, buf + 2)); + Dbprintf("AFI = %i UID = %s", i, iso15693_sprintUID(NULL, recv + 2)); } aborted = BUTTON_PRESS(); @@ -985,34 +1671,129 @@ void BruteforceIso15693Afi(uint32_t speed) { } // Allows to directly send commands to the tag via the client -// Has to increase dialog between device and client. +// OBS: doesn't turn off rf field afterwards. void DirectTag15693Command(uint32_t datalen, uint32_t speed, uint32_t recv, uint8_t *data) { - bool init = true; - int buflen = 0; - uint8_t buf[ISO15_MAX_FRAME]; - memset(buf, 0x00, sizeof(buf)); + LED_A_ON(); - if (DBGLEVEL >= DBG_EXTENDED) { - DbpString("[+] SEND"); - Dbhexdump(datalen, data, true); - } + int recvlen = 0; + uint8_t recvbuf[ISO15693_MAX_RESPONSE_LENGTH]; + uint32_t eof_time; + uint16_t timeout; + bool request_answer = false; + + switch (data[1]) { + case ISO15_CMD_WRITE: + case ISO15_CMD_LOCK: + case ISO15_CMD_WRITEMULTI: + case ISO15_CMD_WRITEAFI: + case ISO15_CMD_LOCKAFI: + case ISO15_CMD_WRITEDSFID: + case ISO15_CMD_LOCKDSFID: + timeout = ISO15693_READER_TIMEOUT_WRITE; + request_answer = data[0] & ISO15_REQ_OPTION; + break; + default: + timeout = ISO15693_READER_TIMEOUT; + } - buflen = SendDataTag(data, datalen, init, speed, (recv ? buf : NULL)); + if (DBGLEVEL >= DBG_EXTENDED) { + Dbprintf("SEND:"); + Dbhexdump(datalen, data, false); + } + + recvlen = SendDataTag(data, datalen, true, speed, (recv ? recvbuf : NULL), sizeof(recvbuf), 0, timeout, &eof_time); + + // send a single EOF to get the tag response + if (request_answer) { + recvlen = SendDataTagEOF((recv ? recvbuf : NULL), sizeof(recvbuf), 0, ISO15693_READER_TIMEOUT, &eof_time); + } + + // for the time being, switch field off to protect rdv4.0 + // note: this prevents using hf 15 cmd with s option - which isn't implemented yet anyway + FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); + LED_D_OFF(); if (recv) { - buflen = (buflen > ISO15_MAX_FRAME) ? ISO15_MAX_FRAME : buflen; - LED_B_ON(); - reply_old(CMD_ACK, buflen, 0, 0, buf, buflen); - LED_B_OFF(); + if (recvlen > ISO15693_MAX_RESPONSE_LENGTH) { + recvlen = ISO15693_MAX_RESPONSE_LENGTH; + } + reply_mix(CMD_ACK, recvlen, 0, 0, recvbuf, ISO15693_MAX_RESPONSE_LENGTH); + + + if (DBGLEVEL >= DBG_EXTENDED) { + Dbprintf("RECV:"); + if (recvlen > 0) { + Dbhexdump(recvlen, recvbuf, false); + DbdecodeIso15693Answer(recvlen, recvbuf); + } + } + - if (DBGLEVEL >= DBG_EXTENDED) { - DbpString("[+] RECV"); - DbdecodeIso15693Answer(buflen, buf); - Dbhexdump(buflen, buf, true); - } } else { - reply_old(CMD_ACK, 1, 0, 0, 0, 0); + reply_mix(CMD_ACK, 1, 0, 0, 0, 0); } } + + +//----------------------------------------------------------------------------- +// Work with "magic Chinese" card. +// +//----------------------------------------------------------------------------- + +// Set the UID on Magic ISO15693 tag (based on Iceman's LUA-script). +void SetTag15693Uid(uint8_t *uid) { + + LED_A_ON(); + + uint8_t cmd[4][9] = { + {ISO15_REQ_DATARATE_HIGH, ISO15_CMD_WRITE, 0x3e, 0x00, 0x00, 0x00, 0x00}, + {ISO15_REQ_DATARATE_HIGH, ISO15_CMD_WRITE, 0x3f, 0x69, 0x96, 0x00, 0x00}, + {ISO15_REQ_DATARATE_HIGH, ISO15_CMD_WRITE, 0x38}, + {ISO15_REQ_DATARATE_HIGH, ISO15_CMD_WRITE, 0x39} + }; + + int recvlen = 0; + uint8_t recvbuf[ISO15693_MAX_RESPONSE_LENGTH]; + uint32_t eof_time; + + // Command 3 : 022138u8u7u6u5 (where uX = uid byte X) + cmd[2][3] = uid[7]; + cmd[2][4] = uid[6]; + cmd[2][5] = uid[5]; + cmd[2][6] = uid[4]; + + // Command 4 : 022139u4u3u2u1 (where uX = uid byte X) + cmd[3][3] = uid[3]; + cmd[3][4] = uid[2]; + cmd[3][5] = uid[1]; + cmd[3][6] = uid[0]; + + AddCrc15(cmd[0], 7); + AddCrc15(cmd[1], 7); + AddCrc15(cmd[2], 7); + AddCrc15(cmd[3], 7); + + uint32_t start_time = 0; + + for (int i = 0; i < 4; i++) { + + recvlen = SendDataTag(cmd[i], sizeof(cmd[i]), i == 0 ? true : false, true, recvbuf, sizeof(recvbuf), start_time, ISO15693_READER_TIMEOUT_WRITE, &eof_time); + start_time = eof_time + DELAY_ISO15693_VICC_TO_VCD_READER; + + if (DBGLEVEL >= DBG_EXTENDED) { + Dbprintf("SEND:"); + Dbhexdump(sizeof(cmd[i]), cmd[i], false); + Dbprintf("RECV:"); + if (recvlen > 0) { + Dbhexdump(recvlen, recvbuf, false); + DbdecodeIso15693Answer(recvlen, recvbuf); + } + } + } + + FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); + LEDsoff(); + reply_mix(CMD_ACK, recvlen, 0, 0, recvbuf, recvlen); +} diff --git a/armsrc/iso15693.h b/armsrc/iso15693.h index 2233ba9fd..bc9b89eee 100644 --- a/armsrc/iso15693.h +++ b/armsrc/iso15693.h @@ -12,15 +12,32 @@ #define __ISO15693_H #include "common.h" - #include "pm3_cmd.h" // struct + + +// Delays in SSP_CLK ticks. +// SSP_CLK runs at 13,56MHz / 32 = 423.75kHz when simulating a tag +#define DELAY_ISO15693_VCD_TO_VICC_SIM 132 // 132/423.75kHz = 311.5us from end of command EOF to start of tag response + +//SSP_CLK runs at 13.56MHz / 4 = 3,39MHz when acting as reader. All values should be multiples of 16 +#define DELAY_ISO15693_VCD_TO_VICC_READER 1056 // 1056/3,39MHz = 311.5us from end of command EOF to start of tag response +#define DELAY_ISO15693_VICC_TO_VCD_READER 1024 // 1024/3.39MHz = 302.1us between end of tag response and next reader command + void RecordRawAdcSamplesIso15693(void); void AcquireRawAdcSamplesIso15693(void); void ReaderIso15693(uint32_t parameter); // Simulate an ISO15693 reader - greg -void SimTagIso15693(uint32_t parameter, uint8_t *uid); // simulate an ISO15693 tag - greg +void SimTagIso15693(uint8_t *uid); // simulate an ISO15693 tag - greg void BruteforceIso15693Afi(uint32_t speed); // find an AFI of a tag - atrox void DirectTag15693Command(uint32_t datalen, uint32_t speed, uint32_t recv, uint8_t *data); // send arbitrary commands from CLI - atrox void Iso15693InitReader(void); +void SniffIso15693(uint8_t jam_search_len, uint8_t *jam_search_string); + +int SendDataTag(uint8_t *send, int sendlen, bool init, bool speed_fast, uint8_t *recv, + uint16_t max_recv_len, uint32_t start_time, uint16_t timeout, uint32_t *eof_time); + +int SendDataTagEOF(uint8_t *recv, uint16_t max_recv_len, uint32_t start_time, uint16_t timeout, uint32_t *eof_time); + +void SetTag15693Uid(uint8_t *uid); #endif From 8189809f4832572e3a9c259207b1ff3b9bf93098 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 2 Jul 2020 12:38:38 +0200 Subject: [PATCH 0018/1047] chg: adapt to fpga changes --- armsrc/iso14443a.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/armsrc/iso14443a.c b/armsrc/iso14443a.c index 3b7b096a4..225337485 100644 --- a/armsrc/iso14443a.c +++ b/armsrc/iso14443a.c @@ -2527,7 +2527,7 @@ void iso14443a_setup(uint8_t fpga_minor_mode) { FpgaDownloadAndGo(FPGA_BITSTREAM_HF); // Set up the synchronous serial port - FpgaSetupSsc(); + FpgaSetupSsc(FPGA_MAJOR_MODE_HF_ISO14443A); // connect Demodulated Signal to ADC: SetAdcMuxFor(GPIO_MUXSEL_HIPKD); From 2c0f595f865ad5407fcbc8f12f4b17d12e7247b3 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Fri, 3 Jul 2020 14:59:10 +0200 Subject: [PATCH 0019/1047] no more snooping around --- fpga/fpga_felica.v | 2 +- fpga/fpga_hf.v | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/fpga/fpga_felica.v b/fpga/fpga_felica.v index 461d90b02..7c1a95b93 100644 --- a/fpga/fpga_felica.v +++ b/fpga/fpga_felica.v @@ -26,7 +26,7 @@ `define FPGA_MAJOR_MODE_HF_READER 0 `define FPGA_MAJOR_MODE_HF_SIMULATOR 1 `define FPGA_MAJOR_MODE_HF_ISO14443A 2 -`define FPGA_MAJOR_MODE_HF_SNOOP 3 +`define FPGA_MAJOR_MODE_HF_SNIFF 3 `define FPGA_MAJOR_MODE_HF_ISO18092 4 `define FPGA_MAJOR_MODE_HF_GET_TRACE 5 `define FPGA_MAJOR_MODE_OFF 7 diff --git a/fpga/fpga_hf.v b/fpga/fpga_hf.v index 5448219fc..35178a996 100644 --- a/fpga/fpga_hf.v +++ b/fpga/fpga_hf.v @@ -26,7 +26,7 @@ `define FPGA_MAJOR_MODE_HF_READER 0 `define FPGA_MAJOR_MODE_HF_SIMULATOR 1 `define FPGA_MAJOR_MODE_HF_ISO14443A 2 -`define FPGA_MAJOR_MODE_HF_SNOOP 3 +`define FPGA_MAJOR_MODE_HF_SNIFF 3 `define FPGA_MAJOR_MODE_HF_ISO18092 4 `define FPGA_MAJOR_MODE_HF_GET_TRACE 5 `define FPGA_MAJOR_MODE_OFF 7 From 7d1a27819720df273f59b03b6a8b98cbf7eba96b Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Fri, 3 Jul 2020 21:33:17 +0200 Subject: [PATCH 0020/1047] merge hell p.x --- armsrc/fpgaloader.h | 8 +- armsrc/iclass.c | 2077 ++++++++------------------------------ armsrc/iclass.h | 3 +- armsrc/iso14443b.c | 841 ++++++++------- armsrc/iso14443b.h | 2 +- armsrc/iso15693.c | 30 +- armsrc/iso15693.h | 9 + client/src/cmdhf14b.c | 24 +- client/src/cmdhficlass.c | 31 +- include/pm3_cmd.h | 12 + 10 files changed, 919 insertions(+), 2118 deletions(-) diff --git a/armsrc/fpgaloader.h b/armsrc/fpgaloader.h index 474c08e1a..17bd8bbc2 100644 --- a/armsrc/fpgaloader.h +++ b/armsrc/fpgaloader.h @@ -65,7 +65,7 @@ thres| x x x x x x x x #define FPGA_MAJOR_MODE_HF_READER (0<<6) // D #define FPGA_MAJOR_MODE_HF_SIMULATOR (1<<6) // D #define FPGA_MAJOR_MODE_HF_ISO14443A (2<<6) // D -#define FPGA_MAJOR_MODE_HF_SNOOP (3<<6) // D +#define FPGA_MAJOR_MODE_HF_SNIFF (3<<6) // D #define FPGA_MAJOR_MODE_HF_ISO18092 (4<<6) // D #define FPGA_MAJOR_MODE_HF_GET_TRACE (5<<6) // D @@ -87,9 +87,9 @@ thres| x x x x x x x x #define FPGA_HF_READER_MODE_RECEIVE_PHASE (2<<0) #define FPGA_HF_READER_MODE_SEND_FULL_MOD (3<<0) #define FPGA_HF_READER_MODE_SEND_SHALLOW_MOD (4<<0) -#define FPGA_HF_READER_MODE_SNOOP_IQ (5<<0) -#define FPGA_HF_READER_MODE_SNOOP_AMPLITUDE (6<<0) -#define FPGA_HF_READER_MODE_SNOOP_PHASE (7<<0) +#define FPGA_HF_READER_MODE_SNIFF_IQ (5<<0) +#define FPGA_HF_READER_MODE_SNIFF_AMPLITUDE (6<<0) +#define FPGA_HF_READER_MODE_SNIFF_PHASE (7<<0) #define FPGA_HF_READER_MODE_SEND_JAM (8<<0) #define FPGA_HF_READER_SUBCARRIER_848_KHZ (0<<4) diff --git a/armsrc/iclass.c b/armsrc/iclass.c index 1e9bb671f..dbf759adf 100644 --- a/armsrc/iclass.c +++ b/armsrc/iclass.c @@ -54,6 +54,7 @@ #include "dbprint.h" #include "protocols.h" #include "ticks.h" +#include "iso15693.h" static int g_wait = 290; static int timeout = 5000; @@ -63,523 +64,33 @@ static uint32_t time_response = 0; static int SendIClassAnswer(uint8_t *resp, int respLen, uint16_t delay); int doIClassSimulation(int simulationMode, uint8_t *reader_mac_buf); -#define MODE_SIM_CSN 0 -#define MODE_EXIT_AFTER_MAC 1 -#define MODE_FULLSIM 2 - -#ifndef ICLASS_DMA_BUFFER_SIZE -# define ICLASS_DMA_BUFFER_SIZE 256 -#endif - // The length of a received command will in most cases be no more than 18 bytes. -// 32 should be enough! +// we expect max 34 bytes as tag answer (response to READ4) #ifndef ICLASS_BUFFER_SIZE -#define ICLASS_BUFFER_SIZE 32 +#define ICLASS_BUFFER_SIZE 34 #endif +// iCLASS has a slightly different timing compared to ISO15693. According to the picopass data sheet the tag response is expected 330us after +// the reader command. This is measured from end of reader EOF to first modulation of the tag's SOF which starts with a 56,64us unmodulated period. +// 330us = 140 ssp_clk cycles @ 423,75kHz when simulating. +// 56,64us = 24 ssp_clk_cycles +#define DELAY_ICLASS_VCD_TO_VICC_SIM (140 - 24) + +// times in ssp_clk_cycles @ 3,3625MHz when acting as reader +#define DELAY_ICLASS_VICC_TO_VCD_READER DELAY_ISO15693_VICC_TO_VCD_READER + +// times in samples @ 212kHz when acting as reader +#define ICLASS_READER_TIMEOUT_ACTALL 330 // 1558us, nominal 330us + 7slots*160us = 1450us +#define ICLASS_READER_TIMEOUT_UPDATE 3390 // 16000us, nominal 4-15ms +#define ICLASS_READER_TIMEOUT_OTHERS 80 // 380us, nominal 330us + #define AddCrc(data, len) compute_crc(CRC_ICLASS, (data), (len), (data)+(len), (data)+(len)+1) -//----------------------------------------------------------------------------- -// The software UART that receives commands from the reader, and its state -// variables. -//----------------------------------------------------------------------------- -/* -typedef struct { - enum { - STATE_UNSYNCD, - STATE_START_OF_COMMUNICATION, - STATE_RECEIVING - } state; - uint16_t shiftReg; - int bitCnt; - int byteCnt; -// int byteCntMax; - int posCnt; - int nOutOfCnt; - int OutOfCnt; - int syncBit; - int samples; - int highCnt; - int swapper; - int counter; - int bitBuffer; - int dropPosition; - uint8_t *output; -} tUartIc; -*/ -typedef struct { - enum { - DEMOD_IC_UNSYNCD, - DEMOD_IC_START_OF_COMMUNICATION, - DEMOD_IC_START_OF_COMMUNICATION2, - DEMOD_IC_START_OF_COMMUNICATION3, - DEMOD_IC_SOF_COMPLETE, - DEMOD_IC_MANCHESTER_D, - DEMOD_IC_MANCHESTER_E, - DEMOD_IC_END_OF_COMMUNICATION, - DEMOD_IC_END_OF_COMMUNICATION2, - DEMOD_IC_MANCHESTER_F, - DEMOD_IC_ERROR_WAIT - } state; - int bitCount; - int posCount; - int syncBit; - uint16_t shiftReg; - uint32_t buffer; - uint32_t buffer2; - uint32_t buffer3; - int buff; - int samples; - int len; - enum { - SUB_NONE, - SUB_FIRST_HALF, - SUB_SECOND_HALF, - SUB_BOTH - } sub; - uint8_t *output; -} tDemodIc; - -/* -* Abrasive's uart implementation -* https://github.com/abrasive/proxmark3/commit/2b8bff7daea8ae1193bf7ee29b1fa46e95218902 -*/ -// Static vars for UART -typedef struct { - bool synced; - bool frame; - bool frame_done; - uint8_t *buf; - int len; -} tUartIc; -static tUartIc Uart; - static void OnError(uint8_t reason) { reply_mix(CMD_ACK, 0, reason, 0, 0, 0); switch_off(); } -static void uart_reset(void) { - Uart.frame_done = false; - Uart.synced = false; - Uart.frame = false; -} - -static void uart_init(uint8_t *data) { - Uart.buf = data; - uart_reset(); -} - -static void uart_bit(uint8_t bit) { - static uint8_t buf = 0xff; - static uint8_t n_buf; - static int nmsg_byte; - buf <<= 1; - buf |= bit ? 1 : 0; - - if (!Uart.frame) { - if (buf == 0x7b) { // 0b0111 1011 - Uart.frame = true; - n_buf = 0; - Uart.len = 0; - nmsg_byte = 0; - } - } else { - static uint8_t msg_byte; - n_buf++; - if (n_buf == 8) { - msg_byte >>= 2; - switch (buf) { - case 0xbf: // 0 - 1011 1111 - break; - case 0xef: // 1 - 1110 1111 - msg_byte |= (1 << 6); - break; - case 0xfb: // 2 - 1111 1011 - msg_byte |= (2 << 6); - break; - case 0xfe: // 3 - 1111 1110 - msg_byte |= (3 << 6); - break; - case 0xdf: // eof - 1101 1111 - Uart.frame = false; - Uart.synced = false; - Uart.frame_done = true; - break; - default: - Uart.frame = false; - Uart.synced = false; - Dbprintf("[-] bad %02X at %d:%d", buf, Uart.len, nmsg_byte); - } - - if (Uart.frame) { // data bits - nmsg_byte += 2; - if (nmsg_byte >= 8) { - Uart.buf[Uart.len++] = msg_byte; - nmsg_byte = 0; - } - } - n_buf = 0; - buf = 0xff; - } - } -} - -static void uart_samples(uint8_t byte) { - static uint32_t buf; - static int window; - static int drop_next = 0; - - uint32_t falling; - int lz; - - if (!Uart.synced) { - if (byte == 0xFF) - return; - buf = 0xFFFFFFFF; - window = 0; - drop_next = 0; - Uart.synced = true; - } - - buf <<= 8; - buf |= byte; - - if (drop_next) { - drop_next = 0; - return; - } - -again: - falling = ~buf & ((buf >> 1) ^ buf) & (0xFF << window); - - uart_bit(!falling); - - if (!falling) - return; - - lz = __builtin_clz(falling) - 24 + window; - - // aim to get falling edge on fourth-leftmost bit of window - window += 3 - lz; - - if (window < 0) { - window += 8; - drop_next = 1; - } else if (window >= 8) { - window -= 8; - goto again; - } -} - - -/* -static void UartReset(){ - Uart.state = STATE_UNSYNCD; - Uart.shiftReg = 0; - Uart.bitCnt = 0; - Uart.byteCnt = 0; - Uart.posCnt = 0; - Uart.nOutOfCnt = 0; - Uart.OutOfCnt = 0; - Uart.syncBit = 0; - Uart.samples = 0; - Uart.highCnt = 0; - Uart.swapper = 0; - Uart.counter = 0; - Uart.bitBuffer = 0; - Uart.dropPosition = 0; -} -*/ - -/* -* READER TO CARD -* 1 out of 4 Decoding -* 1 out of 256 Decoding -*/ -/* -static RAMFUNC int OutOfNDecoding(int bit) { - //int error = 0; - int bitright; - - if (!Uart.bitBuffer) { - Uart.bitBuffer = bit ^ 0xFF0; - return false; - } else { - Uart.bitBuffer <<= 4; - Uart.bitBuffer ^= bit; - } - - // if (Uart.swapper) { - // Uart.output[Uart.byteCnt] = Uart.bitBuffer & 0xFF; - // Uart.byteCnt++; - // Uart.swapper = 0; - // if (Uart.byteCnt > 15) return true; - // } - // else { - // Uart.swapper = 1; - // } - - if (Uart.state != STATE_UNSYNCD) { - Uart.posCnt++; - - if ((Uart.bitBuffer & Uart.syncBit) ^ Uart.syncBit) - bit = 0; - else - bit = 1; - - if (((Uart.bitBuffer << 1) & Uart.syncBit) ^ Uart.syncBit) - bitright = 0; - else - bitright = 1; - - if(bit != bitright) - bit = bitright; - - - // So, now we only have to deal with *bit*, lets see... - if (Uart.posCnt == 1) { - // measurement first half bitperiod - if (!bit) { - // Drop in first half means that we are either seeing - // an SOF or an EOF. - - if (Uart.nOutOfCnt == 1) { - // End of Communication - Uart.state = STATE_UNSYNCD; - Uart.highCnt = 0; - if (Uart.byteCnt == 0) { - // Its not straightforward to show single EOFs - // So just leave it and do not return TRUE - Uart.output[0] = 0xf0; - Uart.byteCnt++; - } else { - return true; - } - } else if (Uart.state != STATE_START_OF_COMMUNICATION) { - // When not part of SOF or EOF, it is an error - Uart.state = STATE_UNSYNCD; - Uart.highCnt = 0; - //error = 4; - } - } - } else { - // measurement second half bitperiod - // Count the bitslot we are in... (ISO 15693) - Uart.nOutOfCnt++; - - if (!bit) { - if (Uart.dropPosition) { - if (Uart.state == STATE_START_OF_COMMUNICATION) { - //error = 1; - } else { - //error = 7; - } - // It is an error if we already have seen a drop in current frame - Uart.state = STATE_UNSYNCD; - Uart.highCnt = 0; - } else { - Uart.dropPosition = Uart.nOutOfCnt; - } - } - Uart.posCnt = 0; - - if (Uart.nOutOfCnt == Uart.OutOfCnt && Uart.OutOfCnt == 4) { - Uart.nOutOfCnt = 0; - - if (Uart.state == STATE_START_OF_COMMUNICATION) { - if (Uart.dropPosition == 4) { - Uart.state = STATE_RECEIVING; - Uart.OutOfCnt = 256; - } else if (Uart.dropPosition == 3) { - Uart.state = STATE_RECEIVING; - Uart.OutOfCnt = 4; - //Uart.output[Uart.byteCnt] = 0xdd; - //Uart.byteCnt++; - } else { - Uart.state = STATE_UNSYNCD; - Uart.highCnt = 0; - } - Uart.dropPosition = 0; - } else { - // RECEIVING DATA - // 1 out of 4 - if (!Uart.dropPosition) { - Uart.state = STATE_UNSYNCD; - Uart.highCnt = 0; - //error = 9; - } else { - Uart.shiftReg >>= 2; - - // Swap bit order - Uart.dropPosition--; - //if(Uart.dropPosition == 1) { Uart.dropPosition = 2; } - //else if(Uart.dropPosition == 2) { Uart.dropPosition = 1; } - - Uart.shiftReg ^= ((Uart.dropPosition & 0x03) << 6); - Uart.bitCnt += 2; - Uart.dropPosition = 0; - - if (Uart.bitCnt == 8) { - Uart.output[Uart.byteCnt] = (Uart.shiftReg & 0xff); - Uart.byteCnt++; - Uart.bitCnt = 0; - Uart.shiftReg = 0; - } - } - } - } else if (Uart.nOutOfCnt == Uart.OutOfCnt) { - // RECEIVING DATA - // 1 out of 256 - if (!Uart.dropPosition) { - Uart.state = STATE_UNSYNCD; - Uart.highCnt = 0; - //error = 3; - } else { - Uart.dropPosition--; - Uart.output[Uart.byteCnt] = (Uart.dropPosition & 0xff); - Uart.byteCnt++; - Uart.bitCnt = 0; - Uart.shiftReg = 0; - Uart.nOutOfCnt = 0; - Uart.dropPosition = 0; - } - } -*/ -/*if (error) { - Uart.output[Uart.byteCnt] = 0xAA; - Uart.byteCnt++; - Uart.output[Uart.byteCnt] = error & 0xFF; - Uart.byteCnt++; - Uart.output[Uart.byteCnt] = 0xAA; - Uart.byteCnt++; - Uart.output[Uart.byteCnt] = (Uart.bitBuffer >> 8) & 0xFF; - Uart.byteCnt++; - Uart.output[Uart.byteCnt] = Uart.bitBuffer & 0xFF; - Uart.byteCnt++; - Uart.output[Uart.byteCnt] = (Uart.syncBit >> 3) & 0xFF; - Uart.byteCnt++; - Uart.output[Uart.byteCnt] = 0xAA; - Uart.byteCnt++; - return true; -}*/ -/* - } - } else { - bit = Uart.bitBuffer & 0xf0; - bit >>= 4; - bit ^= 0x0F; // drops become 1s ;-) - if (bit) { - // should have been high or at least (4 * 128) / fc - // according to ISO this should be at least (9 * 128 + 20) / fc - if (Uart.highCnt == 8) { - // we went low, so this could be start of communication - // it turns out to be safer to choose a less significant - // syncbit... so we check whether the neighbour also represents the drop - Uart.posCnt = 1; // apparently we are busy with our first half bit period - Uart.syncBit = bit & 8; - Uart.samples = 3; - - if (!Uart.syncBit) { Uart.syncBit = bit & 4; Uart.samples = 2; } - else if (bit & 4) { Uart.syncBit = bit & 4; Uart.samples = 2; bit <<= 2; } - - if (!Uart.syncBit) { Uart.syncBit = bit & 2; Uart.samples = 1; } - else if (bit & 2) { Uart.syncBit = bit & 2; Uart.samples = 1; bit <<= 1; } - - if (!Uart.syncBit) { Uart.syncBit = bit & 1; Uart.samples = 0; - if (Uart.syncBit && (Uart.bitBuffer & 8)) { - Uart.syncBit = 8; - - // the first half bit period is expected in next sample - Uart.posCnt = 0; - Uart.samples = 3; - } - } else if (bit & 1) { Uart.syncBit = bit & 1; Uart.samples = 0; } - - Uart.syncBit <<= 4; - Uart.state = STATE_START_OF_COMMUNICATION; - Uart.bitCnt = 0; - Uart.byteCnt = 0; - Uart.nOutOfCnt = 0; - Uart.OutOfCnt = 4; // Start at 1/4, could switch to 1/256 - Uart.dropPosition = 0; - Uart.shiftReg = 0; - //error = 0; - } else { - Uart.highCnt = 0; - } - } else { - if (Uart.highCnt < 8) - Uart.highCnt++; - } - } - return false; -} -*/ -//============================================================================= -// Manchester -//============================================================================= -static tDemodIc Demod; -static void DemodIcReset(void) { - Demod.bitCount = 0; - Demod.posCount = 0; - Demod.syncBit = 0; - Demod.shiftReg = 0; - Demod.buffer = 0; - Demod.buffer2 = 0; - Demod.buffer3 = 0; - Demod.buff = 0; - Demod.samples = 0; - Demod.len = 0; - Demod.sub = SUB_NONE; - Demod.state = DEMOD_IC_UNSYNCD; -} -static void DemodIcInit(uint8_t *data) { - Demod.output = data; - DemodIcReset(); -} - -// UART debug -// it adds the debug values which will be put in the tracelog, -// visible on client when running 'hf list iclass' -/* -pm3 --> hf li iclass -Recorded Activity (TraceLen = 162 bytes) - Start | End | Src | Data (! denotes parity error) | CRC | Annotation | -------------|------------|-----|-----------------------------------------------------------------|-----|--------------------| - 0 | 0 | Rdr |0a | | ACTALL - 1280 | 1280 | Tag |bb! 33! bb! 01 02 04 08 bb! | ok | - 1280 | 1280 | Rdr |0c | | IDENTIFY - 1616 | 1616 | Tag |bb! 33! bb! 00! 02 00! 02 bb! | ok | - 1616 | 1616 | Rdr |0a | | ACTALL - 2336 | 2336 | Tag |bb! d4! bb! 02 08 00! 08 bb! | ok | - 2336 | 2336 | Rdr |0c | | IDENTIFY - 2448 | 2448 | Tag |bb! 33! bb! 00! 00! 00! 02 bb! | ok | - 2448 | 2448 | Rdr |0a | | ACTALL - 2720 | 2720 | Tag |bb! d4! bb! 08 0b 01 04 bb! | ok | - 2720 | 2720 | Rdr |0c | | IDENTIFY - 3232 | 3232 | Tag |bb! d4! bb! 02 02 08 04 bb! | ok | -*/ -static void uart_debug(int error, int bit) { - Demod.output[Demod.len] = 0xBB; - Demod.len++; - Demod.output[Demod.len] = error & 0xFF; - Demod.len++; - Demod.output[Demod.len] = 0xBB; - Demod.len++; - Demod.output[Demod.len] = bit & 0xFF; - Demod.len++; - Demod.output[Demod.len] = Demod.buffer & 0xFF; - Demod.len++; - // Look harder ;-) - Demod.output[Demod.len] = Demod.buffer2 & 0xFF; - Demod.len++; - Demod.output[Demod.len] = Demod.syncBit & 0xFF; - Demod.len++; - Demod.output[Demod.len] = 0xBB; - Demod.len++; -} - /* * CARD TO READER * in ISO15693-2 mode - Manchester @@ -596,568 +107,63 @@ static void uart_debug(int error, int bit) { * * So for current implementation in ISO15693, its 330 µs from end of reader, to start of card. */ -static RAMFUNC int ManchesterDecoding_iclass(uint32_t v) { - int bit; - int modulation; - int error = 0; - - bit = Demod.buffer; - Demod.buffer = Demod.buffer2; - Demod.buffer2 = Demod.buffer3; - Demod.buffer3 = v; - - // too few bits? - if (Demod.buff < 3) { - Demod.buff++; - return false; - } - - if (Demod.state == DEMOD_IC_UNSYNCD) { - Demod.output[Demod.len] = 0xfa; - Demod.syncBit = 0; - //Demod.samples = 0; - Demod.posCount = 1; // This is the first half bit period, so after syncing handle the second part - - if (bit & 0x08) - Demod.syncBit = 0x08; - - if (bit & 0x04) { - if (Demod.syncBit) - bit <<= 4; - - Demod.syncBit = 0x04; - } - - if (bit & 0x02) { - if (Demod.syncBit) - bit <<= 2; - - Demod.syncBit = 0x02; - } - - if (bit & 0x01 && Demod.syncBit) - Demod.syncBit = 0x01; - - if (Demod.syncBit) { - Demod.len = 0; - Demod.state = DEMOD_IC_START_OF_COMMUNICATION; - Demod.sub = SUB_FIRST_HALF; - Demod.bitCount = 0; - Demod.shiftReg = 0; - Demod.samples = 0; - - if (Demod.posCount) { - - switch (Demod.syncBit) { - case 0x08: - Demod.samples = 3; - break; - case 0x04: - Demod.samples = 2; - break; - case 0x02: - Demod.samples = 1; - break; - case 0x01: - Demod.samples = 0; - break; - } - // SOF must be long burst... otherwise stay unsynced!!! - if (!(Demod.buffer & Demod.syncBit) || !(Demod.buffer2 & Demod.syncBit)) - Demod.state = DEMOD_IC_UNSYNCD; - - } else { - // SOF must be long burst... otherwise stay unsynced!!! - if (!(Demod.buffer2 & Demod.syncBit) || !(Demod.buffer3 & Demod.syncBit)) { - Demod.state = DEMOD_IC_UNSYNCD; - error = 0x88; - uart_debug(error, bit); - return false; - } - } - } - return false; - } - - // state is DEMOD is in SYNC from here on. - - modulation = bit & Demod.syncBit; - modulation |= ((bit << 1) ^ ((Demod.buffer & 0x08) >> 3)) & Demod.syncBit; - Demod.samples += 4; - - if (Demod.posCount == 0) { - Demod.posCount = 1; - Demod.sub = (modulation) ? SUB_FIRST_HALF : SUB_NONE; - return false; - } - - Demod.posCount = 0; - - if (modulation) { - - if (Demod.sub == SUB_FIRST_HALF) - Demod.sub = SUB_BOTH; - else - Demod.sub = SUB_SECOND_HALF; - } - - if (Demod.sub == SUB_NONE) { - if (Demod.state == DEMOD_IC_SOF_COMPLETE) { - Demod.output[Demod.len] = 0x0f; - Demod.len++; - Demod.state = DEMOD_IC_UNSYNCD; - return true; - } else { - Demod.state = DEMOD_IC_ERROR_WAIT; - error = 0x33; - } - } - - switch (Demod.state) { - - case DEMOD_IC_START_OF_COMMUNICATION: - if (Demod.sub == SUB_BOTH) { - - Demod.state = DEMOD_IC_START_OF_COMMUNICATION2; - Demod.posCount = 1; - Demod.sub = SUB_NONE; - } else { - Demod.output[Demod.len] = 0xab; - Demod.state = DEMOD_IC_ERROR_WAIT; - error = 0xd2; - } - break; - - case DEMOD_IC_START_OF_COMMUNICATION2: - if (Demod.sub == SUB_SECOND_HALF) { - Demod.state = DEMOD_IC_START_OF_COMMUNICATION3; - } else { - Demod.output[Demod.len] = 0xab; - Demod.state = DEMOD_IC_ERROR_WAIT; - error = 0xd3; - } - break; - - case DEMOD_IC_START_OF_COMMUNICATION3: - if (Demod.sub == SUB_SECOND_HALF) { - Demod.state = DEMOD_IC_SOF_COMPLETE; - } else { - Demod.output[Demod.len] = 0xab; - Demod.state = DEMOD_IC_ERROR_WAIT; - error = 0xd4; - } - break; - - case DEMOD_IC_SOF_COMPLETE: - case DEMOD_IC_MANCHESTER_D: - case DEMOD_IC_MANCHESTER_E: - // OPPOSITE FROM ISO14443 - 11110000 = 0 (1 in 14443) - // 00001111 = 1 (0 in 14443) - if (Demod.sub == SUB_SECOND_HALF) { // SUB_FIRST_HALF - Demod.bitCount++; - Demod.shiftReg = (Demod.shiftReg >> 1) ^ 0x100; - Demod.state = DEMOD_IC_MANCHESTER_D; - } else if (Demod.sub == SUB_FIRST_HALF) { // SUB_SECOND_HALF - Demod.bitCount++; - Demod.shiftReg >>= 1; - Demod.state = DEMOD_IC_MANCHESTER_E; - } else if (Demod.sub == SUB_BOTH) { - Demod.state = DEMOD_IC_MANCHESTER_F; - } else { - Demod.state = DEMOD_IC_ERROR_WAIT; - error = 0x55; - } - break; - - case DEMOD_IC_MANCHESTER_F: - // Tag response does not need to be a complete byte! - if (Demod.len > 0 || Demod.bitCount > 0) { - if (Demod.bitCount > 1) { // was > 0, do not interpret last closing bit, is part of EOF - Demod.shiftReg >>= (9 - Demod.bitCount); // right align data - Demod.output[Demod.len] = Demod.shiftReg & 0xff; - Demod.len++; - } - - Demod.state = DEMOD_IC_UNSYNCD; - return true; - } else { - Demod.output[Demod.len] = 0xad; - Demod.state = DEMOD_IC_ERROR_WAIT; - error = 0x03; - } - break; - - case DEMOD_IC_ERROR_WAIT: - Demod.state = DEMOD_IC_UNSYNCD; - break; - - default: - Demod.output[Demod.len] = 0xdd; - Demod.state = DEMOD_IC_UNSYNCD; - break; - } - - if (Demod.bitCount >= 8) { - Demod.shiftReg >>= 1; - Demod.output[Demod.len] = (Demod.shiftReg & 0xff); - Demod.len++; - Demod.bitCount = 0; - Demod.shiftReg = 0; - } - - if (error) { - uart_debug(error, bit); - return true; - } - - return false; -} //============================================================================= -// Finally, a `sniffer' for iClass communication +// a `sniffer' for iClass communication // Both sides of communication! //============================================================================= -static void iclass_setup_sniff(void) { - if (DBGLEVEL > 3) Dbprintf("iclass_setup_sniff Enter"); - - LEDsoff(); - - FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); - - FpgaDownloadAndGo(FPGA_BITSTREAM_HF); - - // connect Demodulated Signal to ADC: - SetAdcMuxFor(GPIO_MUXSEL_HIPKD); - - // Set up the synchronous serial port - FpgaSetupSsc(); - - BigBuf_free(); - BigBuf_Clear_ext(false); - clear_trace(); - set_tracing(true); - - // Initialize Demod and Uart structs - DemodIcInit(BigBuf_malloc(ICLASS_BUFFER_SIZE)); - - uart_init(BigBuf_malloc(ICLASS_BUFFER_SIZE)); - //UartIcInit(BigBuf_malloc(ICLASS_BUFFER_SIZE)); - - if (DBGLEVEL > 1) { - // Print debug information about the buffer sizes - Dbprintf("[+] Sniffing buffers initialized:"); - Dbprintf(" Trace: %i bytes", BigBuf_max_traceLen()); - Dbprintf(" Reader -> tag: %i bytes", ICLASS_BUFFER_SIZE); - Dbprintf(" tag -> Reader: %i bytes", ICLASS_BUFFER_SIZE); - Dbprintf(" DMA: %i bytes", ICLASS_DMA_BUFFER_SIZE); - } - - // Set FPGA in the appropriate mode - // put the FPGA in the appropriate mode - FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_ISO14443A | FPGA_HF_ISO14443A_SNIFFER); - SpinDelay(200); - - // Start the SSP timer - StartCountSspClk(); - - LED_A_ON(); - if (DBGLEVEL > 3) Dbprintf("[+] iclass_setup_sniff Exit"); +void SniffIClass(uint8_t jam_search_len, uint8_t *jam_search_string) { + SniffIso15693(jam_search_len, jam_search_string); } -//----------------------------------------------------------------------------- -// Record the sequence of commands sent by the reader to the tag, with -// triggering so that we start recording at the point that the tag is moved -// near the reader. -//----------------------------------------------------------------------------- -// turn off afterwards -void RAMFUNC SniffIClass(void) { - - //int datalen = 0; - uint32_t previous_data = 0; - uint32_t time_0 = 0, time_start = 0, time_stop; - uint32_t sniffCounter = 0; - bool TagIsActive = false; - bool ReaderIsActive = false; - - iclass_setup_sniff(); - - // The DMA buffer, used to stream samples from the FPGA - // *dmaBuf is the start reference. - uint8_t *dmaBuf = BigBuf_malloc(ICLASS_DMA_BUFFER_SIZE); - // pointer to samples from fpga - uint8_t *data = dmaBuf; - - // Setup and start DMA. - if (!FpgaSetupSscDma(dmaBuf, ICLASS_DMA_BUFFER_SIZE)) { - if (DBGLEVEL > 1) DbpString("[-] FpgaSetupSscDma failed. Exiting"); - return; - } - - // time ZERO, the point from which it all is calculated. - time_0 = GetCountSspClk(); - - // loop and listen - // every sample (1byte in data), - // contains HIGH nibble = reader data - // contains LOW nibble = tag data - // so two bytes are needed in order to get 1byte of either reader or tag data. (ie 2 sample bytes) - // since reader data is manchester encoded, we need 2bytes of data in order to get one demoded byte. (ie: 4 sample bytes) - uint16_t checked = 0; - for (;;) { - WDT_HIT(); - - if (checked == 1000) { - if (BUTTON_PRESS() || data_available()) break; - checked = 0; - } - ++checked; - - previous_data <<= 8; - previous_data |= *data; - - sniffCounter++; - data++; - - if (data == dmaBuf + ICLASS_DMA_BUFFER_SIZE) { - data = dmaBuf; - AT91C_BASE_PDC_SSC->PDC_RNPR = (uint32_t) dmaBuf; - AT91C_BASE_PDC_SSC->PDC_RNCR = ICLASS_DMA_BUFFER_SIZE; - } - - // every odd sample - if (sniffCounter & 0x01) { - // no need to try decoding reader data if the tag is sending - // READER TO CARD - if (!TagIsActive) { - LED_C_INV(); - // HIGH nibble is always reader data. - uint8_t reader_byte = (previous_data & 0xF0) | (*data >> 4); - uart_samples(reader_byte); - if (Uart.frame_done) { - time_stop = GetCountSspClk() - time_0; - LogTrace(Uart.buf, Uart.len, time_start, time_stop, NULL, true); - DemodIcReset(); - uart_reset(); - } else { - time_start = GetCountSspClk() - time_0; - } - ReaderIsActive = Uart.frame_done; - } - } - // every four sample - if ((sniffCounter % 4) == 0) { - // need two samples to feed Manchester - // no need to try decoding tag data if the reader is sending - and we cannot afford the time - // CARD TO READER - if (!ReaderIsActive) { - LED_C_INV(); - // LOW nibble is always tag data. - /* - uint32_t tag_byte = - ((previous_data & 0x0F000000) >> 8 ) | - ((previous_data & 0x000F0000) >> 4 ) | - ((previous_data & 0x00000F00) ) | - ((previous_data & 0x0000000F) << 4 ) | - (*data & 0xF); - */ - - - uint8_t tag_byte = ((previous_data & 0xF) << 4) | (*data & 0xF); - if (ManchesterDecoding_iclass(tag_byte)) { - time_stop = GetCountSspClk() - time_0; - LogTrace(Demod.output, Demod.len, time_start, time_stop, NULL, false); - DemodIcReset(); - uart_reset(); - } else { - time_start = GetCountSspClk() - time_0; - } - TagIsActive = (Demod.state != DEMOD_IC_UNSYNCD); - } - } - } // end main loop - - /* - if (DBGLEVEL >= 1) { - DbpString("[+] Sniff statistics:"); - Dbhexdump(ICLASS_DMA_BUFFER_SIZE, data, false); - } - */ - switch_off(); +static void rotateCSN(uint8_t *original_csn, uint8_t *rotated_csn) { + for (uint8_t i = 0; i < 8; i++) + rotated_csn[i] = (original_csn[i] >> 3) | (original_csn[(i + 1) % 8] << 5); } -static void rotateCSN(uint8_t *originalCSN, uint8_t *rotatedCSN) { - int i; - for (i = 0; i < 8; i++) - rotatedCSN[i] = (originalCSN[i] >> 3) | (originalCSN[(i + 1) % 8] << 5); +// Encode SOF only +static void CodeIClassTagSOF(void) { + ToSendReset(); + ToSend[++ToSendMax] = 0x1D; + ToSendMax++; } -//----------------------------------------------------------------------------- -// SIMULATION -// Wait for commands from reader -// Stop when button is pressed -// Or return TRUE when command is captured -//----------------------------------------------------------------------------- -static bool GetIClassCommandFromReader(uint8_t *received, int *len, int maxLen) { - // Set FPGA mode to "simulated ISO 14443 tag", no modulation (listen - // only, since we are receiving, not transmitting). - // Signal field is off with the appropriate LED - LED_D_OFF(); - uart_init(received); - - FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_ISO14443A | FPGA_HF_ISO14443A_TAGSIM_LISTEN); - // clear RXRDY: - uint8_t b = (uint8_t)AT91C_BASE_SSC->SSC_RHR; - (void)b; - - uint16_t checked = 0; - for (;;) { - - WDT_HIT(); - - if (checked == 1000) { - if (BUTTON_PRESS() || data_available()) return false; - checked = 0; - } - ++checked; - - // keep tx buffer in a defined state anyway. - if (AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_TXRDY)) - AT91C_BASE_SSC->SSC_THR = 0x00; - - // wait for byte to become available in rx holding register - if (AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_RXRDY)) { - b = (uint8_t)AT91C_BASE_SSC->SSC_RHR; - - uart_samples(b); - if (Uart.frame_done) { - *len = Uart.len; - return true; - } - } - } - return false; -} /* -static uint8_t encode4Bits(const uint8_t b) { - // OTA, the least significant bits first - // Manchester encoding added - // The columns are - // 1 - Bit value to send - // 2 - Reversed (big-endian) - // 3 - Machester Encoded - // 4 - Hex values + * SOF comprises 3 parts; + * * An unmodulated time of 56.64 us + * * 24 pulses of 423.75 kHz (fc/32) + * * A logic 1, which starts with an unmodulated time of 18.88us + * followed by 8 pulses of 423.75kHz (fc/32) + * + * + * EOF comprises 3 parts: + * - A logic 0 (which starts with 8 pulses of fc/32 followed by an unmodulated + * time of 18.88us. + * - 24 pulses of fc/32 + * - An unmodulated time of 56.64 us + * + * + * A logic 0 starts with 8 pulses of fc/32 + * followed by an unmodulated time of 256/fc (~18,88us). + * + * A logic 0 starts with unmodulated time of 256/fc (~18,88us) followed by + * 8 pulses of fc/32 (also 18.88us) + * + * The mode FPGA_HF_SIMULATOR_MODULATE_424K_8BIT which we use to simulate tag, + * works like this. + * - A 1-bit input to the FPGA becomes 8 pulses on 423.5kHz (fc/32) (18.88us). + * - A 0-bit input to the FPGA becomes an unmodulated time of 18.88us + * + * In this mode + * SOF can be written as 00011101 = 0x1D + * EOF can be written as 10111000 = 0xb8 + * logic 1 be written as 01 = 0x1 + * logic 0 be written as 10 = 0x2 + * + * + */ - uint8_t c = b & 0xF; - switch (c) { - // 1 2 3 4 - case 15: - return 0x55; // 1111 -> 1111 -> 01010101 -> 0x55 - case 14: - return 0x95; // 1110 -> 0111 -> 10010101 -> 0x95 - case 13: - return 0x65; // 1101 -> 1011 -> 01100101 -> 0x65 - case 12: - return 0xa5; // 1100 -> 0011 -> 10100101 -> 0xa5 - case 11: - return 0x59; // 1011 -> 1101 -> 01011001 -> 0x59 - case 10: - return 0x99; // 1010 -> 0101 -> 10011001 -> 0x99 - case 9: - return 0x69; // 1001 -> 1001 -> 01101001 -> 0x69 - case 8: - return 0xa9; // 1000 -> 0001 -> 10101001 -> 0xa9 - case 7: - return 0x56; // 0111 -> 1110 -> 01010110 -> 0x56 - case 6: - return 0x96; // 0110 -> 0110 -> 10010110 -> 0x96 - case 5: - return 0x66; // 0101 -> 1010 -> 01100110 -> 0x66 - case 4: - return 0xa6; // 0100 -> 0010 -> 10100110 -> 0xa6 - case 3: - return 0x5a; // 0011 -> 1100 -> 01011010 -> 0x5a - case 2: - return 0x9a; // 0010 -> 0100 -> 10011010 -> 0x9a - case 1: - return 0x6a; // 0001 -> 1000 -> 01101010 -> 0x6a - default: - return 0xaa; // 0000 -> 0000 -> 10101010 -> 0xaa - } -} -*/ - -static uint8_t lut_enc[] = { 0xAA, 0x6A, 0x9A, 0x5A, 0xA6, 0x66, 0x96, 0x56, 0xA9, 0x69, 0x99, 0x59, 0xA5, 0x65, 0x95, 0x55 }; - -//----------------------------------------------------------------------------- -// Prepare tag messages -//----------------------------------------------------------------------------- -static void CodeIClassTagAnswer(const uint8_t *cmd, int len) { - /* - * SOF comprises 3 parts; - * * An unmodulated time of 56.64 us - * * 24 pulses of 423.75 kHz (fc/32) - * * A logic 1, which starts with an unmodulated time of 18.88us - * followed by 8 pulses of 423.75kHz (fc/32) - * - * - * EOF comprises 3 parts: - * - A logic 0 (which starts with 8 pulses of fc/32 followed by an unmodulated - * time of 18.88us. - * - 24 pulses of fc/32 - * - An unmodulated time of 56.64 us - * - * - * A logic 0 starts with 8 pulses of fc/32 - * followed by an unmodulated time of 256/fc (~18,88us). - * - * A logic 0 starts with unmodulated time of 256/fc (~18,88us) followed by - * 8 pulses of fc/32 (also 18.88us) - * - * The mode FPGA_HF_SIMULATOR_MODULATE_424K_8BIT which we use to simulate tag, - * works like this. - * - A 1-bit input to the FPGA becomes 8 pulses on 423.5kHz (fc/32) (18.88us). - * - A 0-bit input to the FPGA becomes an unmodulated time of 18.88us - * - * In this mode - * SOF can be written as 00011101 = 0x1D - * EOF can be written as 10111000 = 0xb8 - * logic 1 be written as 01 = 0x1 - * logic 0 be written as 10 = 0x2 - * - * */ - ToSendReset(); - - // Send SOF - ToSend[++ToSendMax] = 0x1D; - - int i; - for (i = 0; i < len; i++) { - uint8_t b = cmd[i]; - ToSend[++ToSendMax] = lut_enc[b & 0xF]; // least significant half - ToSend[++ToSendMax] = lut_enc[(b >> 4) & 0xF]; // most significant half - } - - // Send EOF - ToSend[++ToSendMax] = 0xB8; - //lastProxToAirDuration = 8*ToSendMax - 3*8 - 3*8;//Not counting zeroes in the beginning or end - // Convert from last byte pos to length - ToSendMax++; -} - -// Only SOF -static void CodeIClassTagSOF(void) { - //So far a dummy implementation, not used - //int lastProxToAirDuration =0; - - ToSendReset(); - // Send SOF - ToSend[++ToSendMax] = 0x1D; - // lastProxToAirDuration = 8*ToSendMax - 3*8;//Not counting zeroes in the beginning - - // Convert from last byte pos to length - ToSendMax++; -} /** * @brief SimulateIClass simulates an iClass card. @@ -1178,13 +184,8 @@ void SimulateIClass(uint32_t arg0, uint32_t arg1, uint32_t arg2, uint8_t *datain LEDsoff(); - FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); - // this will clear out bigbuf memory, the eload command must select this before! - FpgaDownloadAndGo(FPGA_BITSTREAM_HF); - FpgaSetupSsc(); - SetAdcMuxFor(GPIO_MUXSEL_HIPKD); - - // Enable and clear the trace + Iso15693InitTag(); + clear_trace(); set_tracing(true); @@ -1195,30 +196,29 @@ void SimulateIClass(uint32_t arg0, uint32_t arg1, uint32_t arg2, uint8_t *datain uint8_t *emulator = BigBuf_get_EM_addr(); uint8_t mac_responses[PM3_CMD_DATA_SIZE] = { 0 }; - if (simType == 0) { + if (simType == ICLASS_SIM_MODE_CSN) { // Use the CSN from commandline memcpy(emulator, datain, 8); - doIClassSimulation(MODE_SIM_CSN, NULL); - } else if (simType == 1) { + doIClassSimulation(ICLASS_SIM_MODE_CSN, NULL); + } else if (simType == ICLASS_SIM_MODE_CSN_DEFAULT) { //Default CSN - uint8_t csn_crc[] = { 0x03, 0x1f, 0xec, 0x8a, 0xf7, 0xff, 0x12, 0xe0, 0x00, 0x00 }; + uint8_t csn[] = { 0x03, 0x1f, 0xec, 0x8a, 0xf7, 0xff, 0x12, 0xe0 }; // Use the CSN from commandline - memcpy(emulator, csn_crc, 8); - doIClassSimulation(MODE_SIM_CSN, NULL); - } else if (simType == 2) { + memcpy(emulator, csn, 8); + doIClassSimulation(ICLASS_SIM_MODE_CSN, NULL); + } else if (simType == ICLASS_SIM_MODE_READER_ATTACK) { Dbprintf("[+] going into attack mode, %d CSNS sent", numberOfCSNS); // In this mode, a number of csns are within datain. We'll simulate each one, one at a time // in order to collect MAC's from the reader. This can later be used in an offlne-attack // in order to obtain the keys, as in the "dismantling iclass"-paper. -#define EPURSE_MAC_SIZE 16 + #define EPURSE_MAC_SIZE 16 int i = 0; for (; i < numberOfCSNS && i * EPURSE_MAC_SIZE + 8 < PM3_CMD_DATA_SIZE; i++) { - // The usb data is 512 bytes, fitting 65 8-byte CSNs in there. memcpy(emulator, datain + (i * 8), 8); - if (doIClassSimulation(MODE_EXIT_AFTER_MAC, mac_responses + i * EPURSE_MAC_SIZE)) { + if (doIClassSimulation(ICLASS_SIM_MODE_EXIT_AFTER_MAC, mac_responses + i * EPURSE_MAC_SIZE)) { // Button pressed reply_old(CMD_ACK, CMD_HF_ICLASS_SIMULATE, i, 0, mac_responses, i * EPURSE_MAC_SIZE); goto out; @@ -1226,11 +226,11 @@ void SimulateIClass(uint32_t arg0, uint32_t arg1, uint32_t arg2, uint8_t *datain } reply_old(CMD_ACK, CMD_HF_ICLASS_SIMULATE, i, 0, mac_responses, i * EPURSE_MAC_SIZE); - } else if (simType == 3) { + } else if (simType == ICLASS_SIM_MODE_FULL) { //This is 'full sim' mode, where we use the emulator storage for data. //ie: BigBuf_get_EM_addr should be previously filled with data from the "eload" command - doIClassSimulation(MODE_FULLSIM, NULL); - } else if (simType == 4) { + doIClassSimulation(ICLASS_SIM_MODE_FULL, NULL); + } else if (simType == ICLASS_SIM_MODE_READER_ATTACK_KEYROLL) { // This is the KEYROLL version of sim 2. // the collected data (mac_response) is doubled out since we are trying to collect both keys in the keyroll process. @@ -1287,11 +287,16 @@ int doIClassSimulation(int simulationMode, uint8_t *reader_mac_buf) { // free eventually allocated BigBuf memory BigBuf_free_keep_EM(); - State cipher_state; + uint16_t page_size = 32 * 8; + uint8_t current_page = 0; - uint8_t *csn = BigBuf_get_EM_addr(); - uint8_t *emulator = csn; - uint8_t sof_data[] = { 0x0F} ; + // maintain cipher states for both credit and debit key for each page + State cipher_state_KD[8]; + State cipher_state_KC[8]; + State *cipher_state = &cipher_state_KD[0]; + + uint8_t *emulator = BigBuf_get_EM_addr(); + uint8_t *csn = emulator; // CSN followed by two CRC bytes uint8_t anticoll_data[10] = { 0 }; @@ -1305,28 +310,75 @@ int doIClassSimulation(int simulationMode, uint8_t *reader_mac_buf) { AddCrc(anticoll_data, 8); AddCrc(csn_data, 8); - uint8_t diversified_key[8] = { 0 }; + uint8_t diversified_kd[8] = { 0 }; + uint8_t diversified_kc[8] = { 0 }; + uint8_t *diversified_key = diversified_kd; + + // configuration block + uint8_t conf_block[10] = {0x12, 0xFF, 0xFF, 0xFF, 0x7F, 0x1F, 0xFF, 0x3C, 0x00, 0x00}; // e-Purse uint8_t card_challenge_data[8] = { 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; - //uint8_t card_challenge_data[8] = { 0 }; - if (simulationMode == MODE_FULLSIM) { - //The diversified key should be stored on block 3 - //Get the diversified key from emulator memory - memcpy(diversified_key, emulator + (8 * 3), 8); - //Card challenge, a.k.a e-purse is on block 2 - memcpy(card_challenge_data, emulator + (8 * 2), 8); + // AIA + uint8_t aia_data[10] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00}; + + if (simulationMode == ICLASS_SIM_MODE_FULL) { - //Precalculate the cipher state, feeding it the CC - cipher_state = opt_doTagMAC_1(card_challenge_data, diversified_key); + memcpy(conf_block, emulator + (8 * 1), 8); // blk 1 + memcpy(card_challenge_data, emulator + (8 * 2), 8); // e-purse, blk 2 + memcpy(diversified_kd, emulator + (8 * 3), 8); // Kd, blk 3 + memcpy(diversified_kc, emulator + (8 * 4), 8); // Kc, blk 4 + + + // (iceman) this only works for 2KS / 16KS tags. + // Use application data from block 5 + memcpy(aia_data, emulator + (8 * 5), 8); + // older 2K / 16K tags has its application issuer data on block 2 } + + AddCrc(conf_block, 8); + AddCrc(aia_data, 8); + // set epurse of sim2,4 attack if (reader_mac_buf != NULL) { memcpy(reader_mac_buf, card_challenge_data, 8); } + if ((conf_block[5] & 0x80) == 0x80) { + page_size = 256 * 8; + } + + // From PicoPass DS: + // When the page is in personalization mode this bit is equal to 1. + // Once the application issuer has personalized and coded its dedicated areas, this bit must be set to 0: + // the page is then "in application mode". + bool personalization_mode = conf_block[7] & 0x80; + + // chip memory may be divided in 8 pages + uint8_t max_page = ((conf_block[4] & 0x10) == 0x10) ? 0 : 7; + + // Precalculate the cipher states, feeding it the CC + cipher_state_KD[0] = opt_doTagMAC_1(card_challenge_data, diversified_kd); + cipher_state_KC[0] = opt_doTagMAC_1(card_challenge_data, diversified_kc); + + if (simulationMode == ICLASS_SIM_MODE_FULL) { + + for (int i = 1; i < max_page; i++) { + + // does all pages has their own epurse??) + uint8_t *epurse = emulator + (i * page_size) + (8 * 2); + uint8_t *kd = emulator + (i * page_size) + (8 * 3); + uint8_t *kc = emulator + (i * page_size) + (8 * 4); + + cipher_state_KD[i] = opt_doTagMAC_1(epurse, kd); + cipher_state_KC[i] = opt_doTagMAC_1(epurse, kc); + } + } + int exitLoop = 0; + + // Anti-collision process: // Reader 0a // Tag 0f // Reader 0c @@ -1340,8 +392,8 @@ int doIClassSimulation(int simulationMode, uint8_t *reader_mac_buf) { int trace_data_size = 0; // Respond SOF -- takes 1 bytes - uint8_t *resp_sof = BigBuf_malloc(2); - int resp_sof_Len; + uint8_t *resp_sof = BigBuf_malloc(1); + int resp_sof_len; // Anticollision CSN (rotated CSN) // 22: Takes 2 bytes for SOF/EOF and 10 * 2 = 20 bytes (2 bytes/byte) @@ -1353,34 +405,27 @@ int doIClassSimulation(int simulationMode, uint8_t *reader_mac_buf) { uint8_t *resp_csn = BigBuf_malloc(28); int resp_csn_len; - // configuration Picopass 2ks + // configuration (blk 1) PICOPASS 2ks uint8_t *resp_conf = BigBuf_malloc(28); int resp_conf_len; - uint8_t conf_data[10] = {0x12, 0xFF, 0xFF, 0xFF, 0x7F, 0x1F, 0xFF, 0x3C, 0x00, 0x00}; - AddCrc(conf_data, 8); // e-Purse // 18: Takes 2 bytes for SOF/EOF and 8 * 2 = 16 bytes (2 bytes/bit) uint8_t *resp_cc = BigBuf_malloc(28); int resp_cc_len; + // Kd, Kc (blocks 3 and 4). Cannot be read. Always respond with 0xff bytes only + uint8_t *resp_ff = BigBuf_malloc(22); + int resp_ff_len; + uint8_t ff_data[10] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00}; + AddCrc(ff_data, 8); + // Application Issuer Area uint8_t *resp_aia = BigBuf_malloc(28); int resp_aia_len; - uint8_t aia_data[10] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00}; - if (simulationMode == MODE_FULLSIM) { - - // (iceman) this only works for 2KS / 16KS tags. - // Use application data from block 5 - memcpy(aia_data, emulator + (8 * 5), 8); - - // older 2K / 16K tags has its application issuer data on block 2 - } - AddCrc(aia_data, 8); // receive command uint8_t *receivedCmd = BigBuf_malloc(MAX_FRAME_SIZE); - int len = 0; // Prepare card messages ToSendMax = 0; @@ -1388,142 +433,153 @@ int doIClassSimulation(int simulationMode, uint8_t *reader_mac_buf) { // First card answer: SOF CodeIClassTagSOF(); memcpy(resp_sof, ToSend, ToSendMax); - resp_sof_Len = ToSendMax; + resp_sof_len = ToSendMax; // Anticollision CSN - CodeIClassTagAnswer(anticoll_data, sizeof(anticoll_data)); + CodeIso15693AsTag(anticoll_data, sizeof(anticoll_data)); memcpy(resp_anticoll, ToSend, ToSendMax); resp_anticoll_len = ToSendMax; - // CSN - CodeIClassTagAnswer(csn_data, sizeof(csn_data)); + // CSN (block 0) + CodeIso15693AsTag(csn_data, sizeof(csn_data)); memcpy(resp_csn, ToSend, ToSendMax); resp_csn_len = ToSendMax; - // Configuration - CodeIClassTagAnswer(conf_data, sizeof(conf_data)); + // Configuration (block 1) + CodeIso15693AsTag(conf_block, sizeof(conf_block)); memcpy(resp_conf, ToSend, ToSendMax); resp_conf_len = ToSendMax; - // e-Purse - CodeIClassTagAnswer(card_challenge_data, sizeof(card_challenge_data)); + // e-Purse (block 2) + CodeIso15693AsTag(card_challenge_data, sizeof(card_challenge_data)); memcpy(resp_cc, ToSend, ToSendMax); resp_cc_len = ToSendMax; - // Application Issuer Area - CodeIClassTagAnswer(aia_data, sizeof(aia_data)); + // Kd, Kc (blocks 3 and 4) + CodeIso15693AsTag(ff_data, sizeof(ff_data)); + memcpy(resp_ff, ToSend, ToSendMax); + resp_ff_len = ToSendMax; + + // Application Issuer Area (block 5) + CodeIso15693AsTag(aia_data, sizeof(aia_data)); memcpy(resp_aia, ToSend, ToSendMax); resp_aia_len = ToSendMax; //This is used for responding to READ-block commands or other data which is dynamically generated //First the 'trace'-data, not encoded for FPGA - uint8_t *data_generic_trace = BigBuf_malloc((8 * 4) + 2);//8 bytes data + 2byte CRC is max tag answer + uint8_t *data_generic_trace = BigBuf_malloc(32 + 2);//8 bytes data + 2byte CRC is max tag answer //Then storage for the modulated data //Each bit is doubled when modulated for FPGA, and we also have SOF and EOF (2 bytes) - uint8_t *data_response = BigBuf_malloc(((8 * 4) + 2) * 2 + 2); + uint8_t *data_response = BigBuf_malloc((32 + 2) * 2 + 2); - FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_ISO14443A | FPGA_HF_ISO14443A_TAGSIM_LISTEN); - SpinDelay(100); - StartCountSspClk(); + enum { IDLE, ACTIVATED, SELECTED, HALTED } chip_state = IDLE; - // To control where we are in the protocol - uint32_t time_0 = GetCountSspClk(); - uint32_t t2r_stime = 0, t2r_etime = 0; - uint32_t r2t_stime, r2t_etime = 0; - LED_A_ON(); - bool buttonPressed = false; + bool button_pressed = false; uint8_t cmd, options, block; + int len = 0; - while (!exitLoop) { + while (exitLoop == false) { WDT_HIT(); - - //Signal tracer, can be used to get a trigger for an oscilloscope.. - LED_B_OFF(); - LED_C_OFF(); - - r2t_stime = (GetCountSspClk() - time_0) << 4; - if (!GetIClassCommandFromReader(receivedCmd, &len, 0)) { - buttonPressed = true; + + uint32_t reader_eof_time = 0; + len = GetIso15693CommandFromReader(receivedCmd, MAX_FRAME_SIZE, &reader_eof_time); + if (len < 0) { + button_pressed = true; exitLoop = true; continue; } - r2t_etime = ((GetCountSspClk() - time_0) << 4) - r2t_stime; - // 330us normal wait, adjusted for our execution - - LED_C_ON(); //Signal tracer + // Now look at the reader command and provide appropriate responses + // default is no response: + modulated_response = NULL; + modulated_response_size = 0; + trace_data = NULL; + trace_data_size = 0; + // extra response data cmd = receivedCmd[0] & 0xF; options = (receivedCmd[0] >> 4) & 0xFF; block = receivedCmd[1]; - if (cmd == ICLASS_CMD_ACTALL) { // 0x0A + if (cmd == ICLASS_CMD_ACTALL && len == 1) { // 0x0A // Reader in anticollission phase - modulated_response = resp_sof; - modulated_response_size = resp_sof_Len; //order = 1; - trace_data = sof_data; - trace_data_size = sizeof(sof_data); - // adjusted for 330 + (160*num of slot) - goto send; - } else if (cmd == ICLASS_CMD_READ_OR_IDENTIFY) { // 0x0C - if (len == 1) { - // Reader asks for anticollission CSN - modulated_response = resp_anticoll; - modulated_response_size = resp_anticoll_len; //order = 2; - trace_data = anticoll_data; - trace_data_size = sizeof(anticoll_data); + if (chip_state != HALTED) { + modulated_response = resp_sof; + modulated_response_size = resp_sof_len; //order = 1; + chip_state = ACTIVATED; goto send; } + } else if (cmd == ICLASS_CMD_READ_OR_IDENTIFY) { // 0x0C + if (len == 1) { + // Reader asks for anticollission CSN + if (chip_state == SELECTED || chip_state == ACTIVATED) { + modulated_response = resp_anticoll; + modulated_response_size = resp_anticoll_len; //order = 2; + trace_data = anticoll_data; + trace_data_size = sizeof(anticoll_data); + goto send; + } + } + if (len == 4) { - // block0,1,2,5 is always readable. - switch (block) { - case 0: // csn (0c 00) - modulated_response = resp_csn; - modulated_response_size = resp_csn_len; - trace_data = csn_data; - trace_data_size = sizeof(csn_data); - goto send; - case 1: // configuration (0c 01) - modulated_response = resp_conf; - modulated_response_size = resp_conf_len; - trace_data = conf_data; - trace_data_size = sizeof(conf_data); - goto send; - case 2: // e-purse (0c 02) - modulated_response = resp_cc; - modulated_response_size = resp_cc_len; - trace_data = card_challenge_data; - trace_data_size = sizeof(card_challenge_data); - // set epurse of sim2,4 attack - if (reader_mac_buf != NULL) { - memcpy(reader_mac_buf, card_challenge_data, 8); - } - goto send; - case 5:// Application Issuer Area (0c 05) - modulated_response = resp_aia; - modulated_response_size = resp_aia_len; - trace_data = aia_data; - trace_data_size = sizeof(aia_data); - goto send; - default : { - if (simulationMode == MODE_FULLSIM) { // 0x0C - //Read block - //Take the data... - memcpy(data_generic_trace, emulator + (block << 3), 8); - AddCrc(data_generic_trace, 8); - trace_data = data_generic_trace; - trace_data_size = 10; - CodeIClassTagAnswer(trace_data, trace_data_size); - memcpy(modulated_response, ToSend, ToSendMax); - modulated_response_size = ToSendMax; + if (chip_state == SELECTED) { + // block0,1,2,5 is always readable. + switch (block) { + case 0: // csn (0c 00) + modulated_response = resp_csn; + modulated_response_size = resp_csn_len; + trace_data = csn_data; + trace_data_size = sizeof(csn_data); goto send; + case 1: // configuration (0c 01) + modulated_response = resp_conf; + modulated_response_size = resp_conf_len; + trace_data = conf_data; + trace_data_size = sizeof(conf_data); + goto send; + case 2: // e-purse (0c 02) + modulated_response = resp_cc; + modulated_response_size = resp_cc_len; + trace_data = card_challenge_data; + trace_data_size = sizeof(card_challenge_data); + // set epurse of sim2,4 attack + if (reader_mac_buf != NULL) { + memcpy(reader_mac_buf, card_challenge_data, 8); + } + goto send; + case 3: + case 4: // Kd, Kc, always respond with 0xff bytes + modulated_response = resp_ff; + modulated_response_size = resp_ff_len; + trace_data = ff_data; + trace_data_size = sizeof(ff_data); + goto send; + case 5:// Application Issuer Area (0c 05) + modulated_response = resp_aia; + modulated_response_size = resp_aia_len; + trace_data = aia_data; + trace_data_size = sizeof(aia_data); + goto send; + default : { + if (simulationMode == ICLASS_SIM_MODE_FULL) { // 0x0C + //Read block + //Take the data... + memcpy(data_generic_trace, emulator + (block << 3), 8); + AddCrc(data_generic_trace, 8); + trace_data = data_generic_trace; + trace_data_size = 10; + CodeIClassTagAnswer(trace_data, trace_data_size); + memcpy(modulated_response, ToSend, ToSendMax); + modulated_response_size = ToSendMax; + goto send; + } + break; } - break; - } - }//swith - }// if 4 + } // swith + } // selected + } // if 4 } else if (cmd == ICLASS_CMD_SELECT) { // 0x81 // Reader selects anticollission CSN. // Tag sends the corresponding real CSN @@ -1542,7 +598,7 @@ int doIClassSimulation(int simulationMode, uint8_t *reader_mac_buf) { goto send; } else if (cmd == ICLASS_CMD_CHECK) { // 0x05 // Reader random and reader MAC!!! - if (simulationMode == MODE_FULLSIM) { + if (simulationMode == ICLASS_SIM_MODE_FULL) { // NR, from reader, is in receivedCmd +1 opt_doTagMAC_2(cipher_state, receivedCmd + 1, data_generic_trace, diversified_key); @@ -1579,24 +635,28 @@ int doIClassSimulation(int simulationMode, uint8_t *reader_mac_buf) { } goto send; } else if (cmd == ICLASS_CMD_HALT && options == 0 && len == 1) { - // Reader ends the session - modulated_response = resp_sof; - modulated_response_size = 0; //order = 0; - trace_data = NULL; - trace_data_size = 0; - goto send; - } else if (simulationMode == MODE_FULLSIM && cmd == ICLASS_CMD_READ4 && len == 4) { // 0x06 - //Read block - //Take the data... - memcpy(data_generic_trace, emulator + (block << 3), 8 * 4); - AddCrc(data_generic_trace, 8 * 4); - trace_data = data_generic_trace; - trace_data_size = 34; - CodeIClassTagAnswer(trace_data, trace_data_size); - memcpy(modulated_response, ToSend, ToSendMax); - modulated_response_size = ToSendMax; - goto send; - } else if (simulationMode == MODE_FULLSIM && cmd == ICLASS_CMD_UPDATE) { + + if (chip_state == SELECTED) { + // Reader ends the session + modulated_response = resp_sof; + modulated_response_size = resp_sof_Len; + chip_state = HALTED; + goto send; + } + } else if (simulationMode == ICLASS_SIM_MODE_FULL && cmd == ICLASS_CMD_READ4 && len == 4) { // 0x06 + + if (chip_state == SELECTED) { + //Read block + memcpy(data_generic_trace, emulator + (current_page * page_size) + (block * 8), 8 * 4); + AddCrc(data_generic_trace, 8 * 4); + trace_data = data_generic_trace; + trace_data_size = 34; + CodeIso15693AsTag(trace_data, trace_data_size); + memcpy(modulated_response, ToSend, ToSendMax); + modulated_response_size = ToSendMax; + goto send; + } + } else if (simulationMode == ICLASS_SIM_MODE_FULL && cmd == ICLASS_CMD_UPDATE) { //Probably the reader wants to update the nonce. Let's just ignore that for now. // OBS! If this is implemented, don't forget to regenerate the cipher_state @@ -1622,17 +682,12 @@ int doIClassSimulation(int simulationMode, uint8_t *reader_mac_buf) { // It appears we're fine ignoring this. //Otherwise, we should answer 8bytes (block) + 2bytes CRC // } else if(receivedCmd[0] == ICLASS_CMD_DETECT) { // 0x0F + } else if (receivedCmd[0] == 0x26 && len == 5) { + // standard ISO15693 INVENTORY command. Ignore. } else { - //#db# Unknown command received from reader (len=5): 26 1 0 f6 a 44 44 44 44 // Never seen this command before - if (DBGLEVEL == DBG_EXTENDED) + if (DBGLEVEL >= DBG_EXTENDED) print_result("[-] Unhandled command received ", receivedCmd, len); - - // Do not respond - modulated_response = resp_sof; - modulated_response_size = 0; //order = 0; - trace_data = NULL; - trace_data_size = 0; } send: @@ -1640,70 +695,20 @@ send: A legit tag has about 330us delay between reader EOT and tag SOF. **/ if (modulated_response_size > 0) { - t2r_stime = GetCountSspClkDelta(time_0) << 4; - SendIClassAnswer(modulated_response, modulated_response_size, 0); - t2r_etime = ((GetCountSspClk() - time_0) << 4) - t2r_stime; + uint32_t response_time = reader_eof_time + DELAY_ICLASS_VCD_TO_VICC_SIM; + TransmitTo15693Reader(modulated_response, modulated_response_size, &response_time, 0, false); + LogTrace(trace_data, trace_data_size, response_time*32, response_time*32 + modulated_response_size*32*64, NULL, false); } - - LogTrace(receivedCmd, len, r2t_stime, r2t_etime, NULL, true); - - if (trace_data != NULL) - LogTrace(trace_data, trace_data_size, t2r_stime, t2r_etime, NULL, false); } LEDsoff(); - if (buttonPressed) + if (button_pressed) DbpString("[+] button pressed"); - return buttonPressed; + return button_pressed; } -/** - * @brief sends our simulated tag answer - * @param resp - * @param respLen - * @param delay - */ -static int SendIClassAnswer(uint8_t *resp, int respLen, uint16_t delay) { - int i = 0; - volatile uint8_t b; - - FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_SIMULATOR | FPGA_HF_SIMULATOR_MODULATE_424K_8BIT); - - AT91C_BASE_SSC->SSC_THR = 0x00; - - uint16_t checked = 0; - for (;;) { - - if (checked == 1000) { - if (BUTTON_PRESS() || data_available()) return 0; - checked = 0; - } - ++checked; - - // Prevent rx holding register from overflowing - if ((AT91C_BASE_SSC->SSC_SR & AT91C_SSC_RXRDY)) { - b = AT91C_BASE_SSC->SSC_RHR; - (void) b; - } - - // Put byte into tx holding register as soon as it is ready - if (AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_TXRDY)) { - b = 0x00; - if (i < respLen) { - b = resp[i]; - //Hack - //b = 0xAC; - } - i++; - AT91C_BASE_SSC->SSC_THR = b; - } -// if (i > respLen + 4) break; - if (i > respLen + 1) break; - } - return 0; -} /// THE READER CODE @@ -1754,194 +759,42 @@ static void TransmitIClassCommand(const uint8_t *cmd, int len, int *wait) { time_rdr = GetCountSspClk(); } -//----------------------------------------------------------------------------- -// Prepare iClass reader command to send to FPGA -//----------------------------------------------------------------------------- -static void CodeIClassCommand(const uint8_t *cmd, int len) { - int i, j, k; +static void ReaderTransmitIClass(uint8_t *frame, int len, uint32_t *start_time) { - ToSendReset(); + CodeIso15693AsReader(frame, len); + TransmitTo15693Tag(ToSend, ToSendMax, start_time); + uint32_t end_time = *start_time + 32 * (8 * ToSendMax - 4); // substract the 4 padding bits after EOF - // (SOC) Start of Communication: 1 out of 4 - ToSend[++ToSendMax] = 0xf0; - ToSend[++ToSendMax] = 0x00; - ToSend[++ToSendMax] = 0x0f; - ToSend[++ToSendMax] = 0x00; - - // Modulate the bytes - for (i = 0; i < len; i++) { - uint8_t b = cmd[i]; - for (j = 0; j < 4; j++) { - for (k = 0; k < 4; k++) { - - if (k == (b & 3)) - ToSend[++ToSendMax] = 0x0f; - else - ToSend[++ToSendMax] = 0x00; - } - b >>= 2; - } - } - - // (EOC) End of Communication - ToSend[++ToSendMax] = 0x00; - ToSend[++ToSendMax] = 0x00; - ToSend[++ToSendMax] = 0xf0; - ToSend[++ToSendMax] = 0x00; - - // Convert from last character reference to length - ToSendMax++; + LogTrace(frame, len, *start_time * 4, end_time * 4, NULL, true); } -static void ReaderTransmitIClass_ext(uint8_t *frame, int len, int wait) { +static bool sendCmdGetResponseWithRetries(uint8_t* command, size_t cmdsize, uint8_t* resp, size_t max_resp_size, + uint8_t expected_size, uint8_t tries, uint32_t start_time, + uint32_t timeout, uint32_t *eof_time) { + while (tries-- > 0) { - // This is tied to other size changes - CodeIClassCommand(frame, len); - - // Select the card - TransmitIClassCommand(ToSend, ToSendMax, &wait); - LED_A_ON(); - - LogTrace(frame, len, g_rsamples, g_rsamples, NULL, true); -} -static void ReaderTransmitIClass(uint8_t *frame, int len) { - ReaderTransmitIClass_ext(frame, len, 330); -} - -//----------------------------------------------------------------------------- -// Wait a certain time for tag response -// If a response is captured return TRUE -// If it takes too long return FALSE -//----------------------------------------------------------------------------- -static int GetIClassAnswer(uint8_t *receivedResponse, int maxLen, int *wait) { - // buffer needs to be 512 bytes - // maxLen is not used... - bool skip = false; - - LED_D_ON(); - // Set FPGA mode to "reader listen mode", no modulation (listen - // only, since we are receiving, not transmitting). - FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_ISO14443A | FPGA_HF_ISO14443A_READER_LISTEN); - - // Setup UART/DEMOD to receive - DemodIcInit(receivedResponse); - - SpinDelayUs(g_wait); //310 Tout= 330us (iso15603-2) (330/21.3) take consideration for clock increments. - - // clear RXRDY: - uint8_t b = (uint8_t)AT91C_BASE_SSC->SSC_RHR; - (void)b; - - uint16_t checked = 0; - - uint32_t card_start = GetCountSspClk(); - for (;;) { - WDT_HIT(); - - if (checked == 1000) { - if (BUTTON_PRESS() || data_available()) return false; - checked = 0; - } - ++checked; - - // Wait for byte be become available in rx holding register - if (AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_RXRDY)) { - - b = (uint8_t)AT91C_BASE_SSC->SSC_RHR; - skip = !skip; - if (skip) continue; - - if (ManchesterDecoding_iclass(b & 0x0f)) { - time_response = GetCountSspClk() - card_start; - return true; - } else if (GetCountSspClkDelta(card_start) > timeout && Demod.state == DEMOD_IC_UNSYNCD) { - return false; - } - } - } - return false; -} - -static int ReaderReceiveIClass(uint8_t *receivedAnswer) { - - if (GetIClassAnswer(receivedAnswer, 0, NULL) == false) - return 0; - - LogTrace(receivedAnswer, Demod.len, g_rsamples, g_rsamples, NULL, false); - return Demod.len; -} - -static void setupIclassReader(void) { - - LEDsoff(); - - // Start from off (no field generated) - // Signal field is off with the appropriate LED - FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); - - FpgaDownloadAndGo(FPGA_BITSTREAM_HF); - - FpgaSetupSsc(); - - SetAdcMuxFor(GPIO_MUXSEL_HIPKD); - - clear_trace(); - set_tracing(true); - - // Now give it time to spin up. - // Signal field is on with the appropriate LED - FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_ISO14443A | FPGA_HF_ISO14443A_READER_MOD); - SpinDelay(500); - - StartCountSspClk(); - - LED_A_ON(); -} - -static bool sendCmdGetResponseWithRetries(uint8_t *command, size_t cmdsize, uint8_t *resp, uint8_t expected_size, int8_t retries) { - while (retries-- > 0) { - - ReaderTransmitIClass(command, cmdsize); - - //iceman - if received size is bigger than expected, we smash the stack here - // since its called with fixed sized arrays - - // update/write command takes 4ms to 15ms before responding - int old_wait = g_wait; - if ((command[0] & 0xF) == ICLASS_CMD_UPDATE) - g_wait = 3900; - - uint8_t got_n = ReaderReceiveIClass(resp); - - g_wait = old_wait; - - // 0xBB is the internal debug separator byte.. - if (expected_size != got_n || (resp[0] == 0xBB || resp[7] == 0xBB || resp[2] == 0xBB)) { - //try again -// SpinDelayUs(360); - continue; - } - - if (got_n == expected_size) + ReaderTransmitIClass(command, cmdsize, &start_time); + if (expected_size == GetIso15693AnswerFromTag(resp, max_resp_size, timeout, eof_time)) { return true; + } } return false; } /** * @brief Talks to an iclass tag, sends the commands to get CSN and CC. - * @param card_data where the CSN and CC are stored for return - * @return 0 = fail - * 1 = Got CSN - * 2 = Got CSN and CC + * @param card_data where the CSN, CONFIG, CC are stored for return + * 8 bytes csn + 8 bytes config + 8 bytes CC + * @return false = fail + * true = Got all. */ -static uint8_t handshakeIclassTag_ext(uint8_t *card_data, bool use_credit_key) { +static bool selectIclassTag(uint8_t *card_data, bool use_credit_key, uint32_t *eof_time) { - // act_all... - static uint8_t act_all[] = { ICLASS_CMD_ACTALL }; - static uint8_t identify[] = { ICLASS_CMD_READ_OR_IDENTIFY, 0x00, 0x73, 0x33 }; - static uint8_t select[] = { 0x80 | ICLASS_CMD_SELECT, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; - uint8_t readcheck_cc[] = { 0x80 | ICLASS_CMD_READCHECK, 0x02 }; + static uint8_t act_all[] = { ICLASS_CMD_ACTALL }; + static uint8_t identify[] = { ICLASS_CMD_READ_OR_IDENTIFY, 0x00, 0x73, 0x33 }; + static uint8_t select[] = { 0x80 | ICLASS_CMD_SELECT, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; + static uint8_t read_conf[] = { ICLASS_CMD_READ_OR_IDENTIFY, 0x01, 0xfa, 0x22 }; + static uint8_t read_check_cc[] = { 0x80 | ICLASS_CMD_READCHECK, 0x02 }; // Bit 4: K.If this bit equals to one, the READCHECK will use the Credit Key (Kc); if equals to zero, Debit Key (Kd) willbe used // bit 7: parity. @@ -1950,58 +803,63 @@ static uint8_t handshakeIclassTag_ext(uint8_t *card_data, bool use_credit_key) { readcheck_cc[0] = 0x10 | ICLASS_CMD_READCHECK; uint8_t resp[ICLASS_BUFFER_SIZE] = {0}; + + uint32_t start_time = GetCountSspClk(); - // Send act_all ( 330 timeout + 160 timeslot); - ReaderTransmitIClass_ext(act_all, 1, 330 + 180); + ReaderTransmitIClass(act_all, 1, &start_time); - // Card present? - if (ReaderReceiveIClass(resp) == 0) - return 0; + // card present? + if (GetIso15693AnswerFromTag(resp, sizeof(resp), ICLASS_READER_TIMEOUT_ACTALL, eof_time) < 0) + return false; - //Send Identify - ReaderTransmitIClass(identify, 1); + // send Identify + start_time = *eof_time + DELAY_ICLASS_VICC_TO_VCD_READER; + ReaderTransmitIClass(identify, 1, &start_time); - //We expect a 10-byte response here, 8 byte anticollision-CSN and 2 byte CRC - if (ReaderReceiveIClass(resp) != 10) - return 0; + // expect a 10-byte response here, 8 byte anticollision-CSN and 2 byte CRC + uint8_t len = GetIso15693AnswerFromTag(resp, sizeof(resp), ICLASS_READER_TIMEOUT_OTHERS, eof_time); + if (len != 10) + return false; - //Copy the Anti-collision CSN to our select-packet + // copy the Anti-collision CSN to our select-packet memcpy(&select[1], resp, 8); - //Select the card - ReaderTransmitIClass(select, sizeof(select)); + // select the card + start_time = *eof_time + DELAY_ICLASS_VICC_TO_VCD_READER; + ReaderTransmitIClass(select, sizeof(select), &start_time); - //We expect a 10-byte response here, 8 byte CSN and 2 byte CRC - if (ReaderReceiveIClass(resp) != 10) - return 0; + // expect a 10-byte response here, 8 byte CSN and 2 byte CRC + len = GetIso15693AnswerFromTag(resp, sizeof(resp), ICLASS_READER_TIMEOUT_OTHERS, eof_time); + if (len != 10) + return false; - // Card selected, now read e-purse (cc) (block2) (only 8 bytes no CRC) - // ReaderTransmitIClass(readcheck_cc, sizeof(readcheck_cc)); - // if (ReaderReceiveIClass(resp) == 8) { - // //Save CC (e-purse) in response data - // memcpy(card_data+8, resp, 8); - // read_status++; - // } - - //Success - level 1, we got CSN //Save CSN in response data memcpy(card_data, resp, 8); - bool isBlk_2 = sendCmdGetResponseWithRetries(readcheck_cc, sizeof(readcheck_cc), resp, 8, 3); - - //Flag that we got to at least stage 1, read CSN - if (isBlk_2 == false) { - return 1; - } + // card selected, now read config (block1) (only 8 bytes no CRC) + start_time = *eof_time + DELAY_ICLASS_VICC_TO_VCD_READER; + ReaderTransmitIClass(read_conf, sizeof(read_conf), &start_time); + + // expect a 8-byte response here + len = GetIso15693AnswerFromTag(resp, sizeof(resp), ICLASS_READER_TIMEOUT_OTHERS, eof_time); + if (len != 8) + return false; //Save CC (e-purse) in response data memcpy(card_data + 8, resp, 8); - // we got all data; - return 2; -} -static uint8_t handshakeIclassTag(uint8_t *card_data) { - return handshakeIclassTag_ext(card_data, false); + // card selected, now read e-purse (cc) (block2) (only 8 bytes no CRC) + start_time = *eof_time + DELAY_ICLASS_VICC_TO_VCD_READER; + ReaderTransmitIClass(readcheck_cc, sizeof(readcheck_cc), &start_time); + + // expect a 8-byte response here + len = GetIso15693AnswerFromTag(resp, sizeof(resp), ICLASS_READER_TIMEOUT_OTHERS, eof_time); + if (len != 8) + return false; + + //Save CC (e-purse) in response data + memcpy(card_data + 16, resp, 8); + return true; } // Reader iClass Anticollission @@ -2015,129 +873,70 @@ void ReaderIClass(uint8_t arg0) { memset(card_data, 0xFF, sizeof(card_data)); memset(resp, 0xFF, sizeof(resp)); - //Read conf block CRC(0x01) => 0xfa 0x22 - uint8_t readConf[] = { ICLASS_CMD_READ_OR_IDENTIFY, 0x01, 0xfa, 0x22}; - - //Read App Issuer Area block CRC(0x05) => 0xde 0x64 - uint8_t readAA[] = { ICLASS_CMD_READ_OR_IDENTIFY, 0x05, 0xde, 0x64}; - - uint16_t tryCnt = 0; - bool abort_after_read = arg0 & FLAG_ICLASS_READER_ONLY_ONCE; // flag to read until one tag is found successfully bool try_once = arg0 & FLAG_ICLASS_READER_ONE_TRY; // flag to not to loop continuously, looking for tag bool use_credit_key = arg0 & FLAG_ICLASS_READER_CEDITKEY; // flag to use credit key - bool flagReadConfig = arg0 & FLAG_ICLASS_READER_CONF; // flag to read block1, configuration - bool flagReadCC = arg0 & FLAG_ICLASS_READER_CC; // flag to read block2, e-purse bool flagReadAIA = arg0 & FLAG_ICLASS_READER_AIA; // flag to read block5, application issuer area - setupIclassReader(); + if (flags & FLAG_ICLASS_READER_INIT) { + Iso15693InitReader(); + } - uint16_t checked = 0; - bool userCancelled = BUTTON_PRESS() || data_available(); - while (!userCancelled) { + if (flags & FLAG_ICLASS_READER_CLEARTRACE) { + set_tracing(true); + clear_trace(); + StartCountSspClk(); + } - WDT_HIT(); + uint32_t start_time = 0; + uint32_t eof_time = 0; - // if only looking for one card try 2 times if we missed it the first time - if (try_once && tryCnt > 10) { - if (DBGLEVEL > 1) DbpString("Failed to find a tag"); - break; + int read_status = selectIclassTag(card_data, use_credit_key, &eof_time); + if (read_status == 0) { + reply_mix(CMD_ACK, 0xFF, 0, 0, card_data, 0); + switch_off(); + return; + } + + uint8_t result_status = FLAG_ICLASS_READER_CSN | FLAG_ICLASS_READER_CONF | FLAG_ICLASS_READER_CC; + + //Read block 5, AIA + if (flagReadAIA) { + //Read App Issuer Area block CRC(0x05) => 0xde 0x64 + uint8_t readAA[] = { ICLASS_CMD_READ_OR_IDENTIFY, 0x05, 0xde, 0x64}; + + if (sendCmdGetResponseWithRetries(readAA, sizeof(readAA), resp, sizeof(resp), 10, 10, start_time, ICLASS_READER_TIMEOUT_OTHERS, &eof_time)) { + result_status |= FLAG_ICLASS_READER_AIA; + memcpy(card_data + (8 * 5), resp, 8); + } else { + if (DBGLEVEL >= DBG_EXTENDED) DbpString("Failed to dump AA block"); } + } - tryCnt++; - uint8_t result_status = 0; + // 0 : CSN + // 1 : Configuration + // 2 : e-purse + // 3 : kd / debit / aa2 (write-only) + // 4 : kc / credit / aa1 (write-only) + // 5 : AIA, Application issuer area + // + //Then we can 'ship' back the 6 * 8 bytes of data, + // with 0xFF:s in block 3 and 4. - int read_status = handshakeIclassTag_ext(card_data, use_credit_key); + LED_B_ON(); - if (read_status == 0) continue; - if (read_status == 1) result_status = FLAG_ICLASS_READER_CSN; - if (read_status == 2) result_status = FLAG_ICLASS_READER_CSN | FLAG_ICLASS_READER_CC; - - // handshakeIclass returns CSN|CC, but the actual block - // layout is CSN|CONFIG|CC, so here we reorder the data, - // moving CC forward 8 bytes - memcpy(card_data + 16, card_data + 8, 8); - - //Read block 1, config - if (flagReadConfig) { - if (sendCmdGetResponseWithRetries(readConf, sizeof(readConf), resp, 10, 5)) { - result_status |= FLAG_ICLASS_READER_CONF; - memcpy(card_data + 8, resp, 8); - } else { - if (DBGLEVEL > 1) DbpString("Failed to dump config block"); - } - } - - //Read block 5, AIA - if (flagReadAIA) { - if (sendCmdGetResponseWithRetries(readAA, sizeof(readAA), resp, 10, 5)) { - result_status |= FLAG_ICLASS_READER_AIA; - memcpy(card_data + (8 * 5), resp, 8); - } else { - if (DBGLEVEL > 1) DbpString("Failed to dump AA block"); - } - } - - // 0 : CSN - // 1 : Configuration - // 2 : e-purse - // 3 : kd / debit / aa2 (write-only) - // 4 : kc / credit / aa1 (write-only) - // 5 : AIA, Application issuer area - // - //Then we can 'ship' back the 6 * 8 bytes of data, - // with 0xFF:s in block 3 and 4. - - LED_B_ON(); - //Send back to client, but don't bother if we already sent this - - // only useful if looping in arm (not try_once && not abort_after_read) - if (memcmp(last_csn, card_data, 8) != 0) { - // If caller requires that we get Conf, CC, AA, continue until we got it - if (DBGLEVEL >= DBG_EXTENDED) { - Dbprintf("STATUS %02X | CSN %c | CONF %c | CC %c | AIA %c | ONCE %c | 1TRY %c", - result_status, - (result_status & FLAG_ICLASS_READER_CSN) ? 'Y' : 'N', - (result_status & FLAG_ICLASS_READER_CONF) ? 'Y' : 'N', - (result_status & FLAG_ICLASS_READER_CC) ? 'Y' : 'N', - (result_status & FLAG_ICLASS_READER_AIA) ? 'Y' : 'N' - ); - Dbprintf(" aar %c | to %c, | uc %c | frc %c | fra %c | cc %c", - abort_after_read ? 'Y' : 'N', - try_once ? 'Y' : 'N', - use_credit_key ? 'Y' : 'N', - flagReadConfig ? 'Y' : 'N', - flagReadAIA ? 'Y' : 'N', - flagReadCC ? 'Y' : 'N' - ); - } - - bool send = (result_status & FLAG_ICLASS_READER_CSN); - if (flagReadCC) - send |= (result_status & FLAG_ICLASS_READER_CC); - if (flagReadAIA) - send |= (result_status & FLAG_ICLASS_READER_AIA); - if (flagReadConfig) - send |= (result_status & FLAG_ICLASS_READER_CONF); - - if (DBGLEVEL >= DBG_EXTENDED) Dbprintf("SEND %c", send ? 'y' : 'n'); - - if (send) { - reply_mix(CMD_ACK, result_status, 0, 0, card_data, sizeof(card_data)); - if (abort_after_read) { - LED_B_OFF(); - return; - } - //Save that we already sent this.... - memcpy(last_csn, card_data, 8); + //Send back to client, but don't bother if we already sent this - + // only useful if looping in arm (not try_once && not abort_after_read) + if (memcmp(last_csn, card_data, 8) != 0) { + + if (send) { + reply_mix(CMD_ACK, result_status, 0, 0, card_data, sizeof(card_data)); + if (abort_after_read) { + LED_B_OFF(); + return; } } LED_B_OFF(); - - if (checked == 1000) { - userCancelled = BUTTON_PRESS() || data_available(); - checked = 0; - } - ++checked; } if (userCancelled) { @@ -2272,8 +1071,7 @@ void ReaderIClass_Replay(uint8_t arg0, uint8_t *mac) { void iClass_ReadCheck(uint8_t blockno, uint8_t keytype) { uint8_t readcheck[] = { keytype, blockno }; uint8_t resp[] = {0, 0, 0, 0, 0, 0, 0, 0}; - size_t isOK = 0; - isOK = sendCmdGetResponseWithRetries(readcheck, sizeof(readcheck), resp, sizeof(resp), 6); + bool isOK = sendCmdGetResponseWithRetries(readcheck, sizeof(readcheck), resp, sizeof(resp), 8, 3, 0, ICLASS_READER_TIMEOUT_OTHERS, &eof_time); reply_mix(CMD_ACK, isOK, 0, 0, 0, 0); switch_off(); } @@ -2399,13 +1197,13 @@ out: // Tries to read block. // retries 10times. -bool iClass_ReadBlock(uint8_t blockno, uint8_t *data, uint8_t len) { +static bool iClass_ReadBlock(uint8_t blockno, uint8_t *data) { uint8_t resp[10]; uint8_t cmd[] = {ICLASS_CMD_READ_OR_IDENTIFY, blockno, 0x00, 0x00}; AddCrc(cmd + 1, 1); - // expect size 10, retry 5times - bool isOK = sendCmdGetResponseWithRetries(cmd, sizeof(cmd), resp, 10, 5); - memcpy(data, resp, len); + uint32_t eof_time; + bool isOK = sendCmdGetResponseWithRetries(readcmd, sizeof(readcmd), resp, sizeof(resp), 10, 10, 0, ICLASS_READER_TIMEOUT_OTHERS, &eof_time); + memcpy(data, resp, 8); return isOK; } @@ -2417,33 +1215,32 @@ void iClass_ReadBlk(uint8_t blockno) { uint8_t blockdata[8]; } PACKED result; - result.isOK = iClass_ReadBlock(blockno, result.blockdata, sizeof(result.blockdata)); + LED_A_ON(); + result.isOK = iClass_ReadBlock(blockno, result.blockdata); switch_off(); reply_ng(CMD_HF_ICLASS_READBL, PM3_SUCCESS, (uint8_t *)&result, sizeof(result)); } // turn off afterwards void iClass_Dump(uint8_t blockno, uint8_t numblks) { - uint8_t blockdata[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; - bool isOK = false; - uint8_t blkCnt = 0; - BigBuf_free(); - uint8_t *dataout = BigBuf_malloc(255 * 8); + uint8_t *dataout = BigBuf_malloc(0xFF * 8); if (dataout == NULL) { DbpString("[!] fail to allocate memory"); OnError(1); return; } - // fill mem with 0xFF - memset(dataout, 0xFF, 255 * 8); + memset(dataout, 0xFF, 0xFF * 8); + uint8_t blockdata[8] = {0}; + uint8_t blkCnt = 0; + bool isOK; for (; blkCnt < numblks; blkCnt++) { - isOK = iClass_ReadBlock(blockno + blkCnt, blockdata, sizeof(blockdata)); + isOK = iClass_ReadBlock(blockno + blkCnt, blockdata); // 0xBB is the internal debug separator byte.. if (!isOK || (blockdata[0] == 0xBB || blockdata[7] == 0xBB || blockdata[2] == 0xBB)) { //try again - isOK = iClass_ReadBlock(blockno + blkCnt, blockdata, sizeof(blockdata)); + isOK = iClass_ReadBlock(blockno + blkCnt, blockdata); if (!isOK) { Dbprintf("[!] block %02X failed to read", blkCnt + blockno); break; @@ -2459,15 +1256,42 @@ void iClass_Dump(uint8_t blockno, uint8_t numblks) { } static bool iClass_WriteBlock_ext(uint8_t blockno, uint8_t *data) { - uint8_t resp[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; + uint8_t write[] = { 0x80 | ICLASS_CMD_UPDATE, blockno, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; memcpy(write + 2, data, 12); // data + mac AddCrc(write + 1, 13); - return sendCmdGetResponseWithRetries(write, sizeof(write), resp, sizeof(resp), 5); + + uint8_t resp[10] = {0}; + uint32_t eof_time = 0; + bool isOK = sendCmdGetResponseWithRetries(write, sizeof(write), resp, sizeof(resp), 10, 3, 0, ICLASS_READER_TIMEOUT_UPDATE, &eof_time); + if (isOK == false) { + return false; + } + + uint8_t all_ff[8] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; + if (blockNo == 2) { + // check response. e-purse update swaps first and second half + if (memcmp(data+4, resp, 4) || memcmp(data, resp+4, 4)) { + return false; + } + } else if (blockNo == 3 || blockNo == 4) { + // check response. Key updates always return 0xffffffffffffffff + if (memcmp(all_ff, resp, 8)) { + return false; + } + } else { + // check response. All other updates return unchanged data + if (memcmp(data, resp, 8)) { + return false; + } + } + + return true; } // turn off afterwards void iClass_WriteBlock(uint8_t blockno, uint8_t *data) { + LED_A_ON(); uint8_t isOK = iClass_WriteBlock_ext(blockno, data); switch_off(); reply_ng(CMD_HF_ICLASS_WRITEBL, PM3_SUCCESS, (uint8_t *)&isOK, sizeof(uint8_t)); @@ -2475,23 +1299,20 @@ void iClass_WriteBlock(uint8_t blockno, uint8_t *data) { // turn off afterwards void iClass_Clone(uint8_t startblock, uint8_t endblock, uint8_t *data) { - int i, written = 0; - int total_block = (endblock - startblock) + 1; - for (i = 0; i < total_block; i++) { - // block number - if (iClass_WriteBlock_ext(startblock + i, data + (i * 12))) { - Dbprintf("Write block [%02x] successful", startblock + i); + LED_A_ON(); + uint16_t written = 0; + uint16_t total_blocks = (endblock - startblock) + 1; + for (uint8_t b = startblock; b < total_blocks; b++) { + + if (iClass_WriteBlock_ext(b, data + ((b - startblock) * 12))) { + Dbprintf("Write block [%02x] successful", b); written++; } else { - Dbprintf("Write block [%02x] failed", startblock + i); + Dbprintf("Write block [%02x] failed", b); } } switch_off(); - - uint8_t isOK = 0; - if (written == total_block) - isOK = 1; - + uint8_t isOK = (written == total_blocks) ? 1 : 0; reply_ng(CMD_HF_ICLASS_CLONE, PM3_SUCCESS, (uint8_t *)&isOK, sizeof(uint8_t)); } diff --git a/armsrc/iclass.h b/armsrc/iclass.h index a9edbdfed..6ce23ceb7 100644 --- a/armsrc/iclass.h +++ b/armsrc/iclass.h @@ -13,7 +13,7 @@ #include "common.h" -void RAMFUNC SniffIClass(void); +void SniffIClass(uint8_t jam_search_len, uint8_t *jam_search_string); void SimulateIClass(uint32_t arg0, uint32_t arg1, uint32_t arg2, uint8_t *datain); void ReaderIClass(uint8_t arg0); void ReaderIClass_Replay(uint8_t arg0, uint8_t *mac); @@ -21,7 +21,6 @@ void iClass_Authentication(uint8_t *mac); void iClass_Authentication_fast(uint64_t arg0, uint64_t arg1, uint8_t *datain); void iClass_WriteBlock(uint8_t blockno, uint8_t *data); void iClass_ReadBlk(uint8_t blockno); -bool iClass_ReadBlock(uint8_t blockno, uint8_t *data, uint8_t len); void iClass_Dump(uint8_t blockno, uint8_t numblks); void iClass_Clone(uint8_t startblock, uint8_t endblock, uint8_t *data); void iClass_ReadCheck(uint8_t blockno, uint8_t keytype); diff --git a/armsrc/iso14443b.c b/armsrc/iso14443b.c index 4999c4d85..4448d3570 100644 --- a/armsrc/iso14443b.c +++ b/armsrc/iso14443b.c @@ -1,5 +1,6 @@ //----------------------------------------------------------------------------- // Jonathan Westhues, split Nov 2006 +// piwi 2018 // // This code is licensed to you under the terms of the GNU GPL, version 2 or, // at your option, any later version. See the LICENSE.txt file for the text of @@ -24,20 +25,19 @@ #include "dbprint.h" #include "ticks.h" -#ifndef FWT_TIMEOUT_14B -// defaults to 2000ms -# define FWT_TIMEOUT_14B 35312 -#endif + #ifndef ISO14443B_DMA_BUFFER_SIZE -# define ISO14443B_DMA_BUFFER_SIZE 512 //changed this from 256 +# define ISO14443B_DMA_BUFFER_SIZE 128 #endif #ifndef RECEIVE_MASK # define RECEIVE_MASK (ISO14443B_DMA_BUFFER_SIZE-1) #endif +#define RECEIVE_SAMPLES_TIMEOUT 64 + // Guard Time (per 14443-2) #ifndef TR0 -# define TR0 32 //this value equals 8 ETU = 32 ssp clk (w/ 424 khz) +# define TR0 64 // TR0 max is 256/fs = 256/(848kHz) = 302us or 64 samples from FPGA #endif // Synchronization time (per 14443-2) @@ -51,30 +51,161 @@ // 4sample #define SEND4STUFFBIT(x) ToSendStuffBit(x);ToSendStuffBit(x);ToSendStuffBit(x);ToSendStuffBit(x); -//#define SEND4STUFFBIT(x) ToSendStuffBit(x); -// iceman, this threshold value, what makes 8 a good amplitude for this IQ values? -#ifndef SUBCARRIER_DETECT_THRESHOLD -# define SUBCARRIER_DETECT_THRESHOLD 8 -#endif static void iso14b_set_timeout(uint32_t timeout); static void iso14b_set_maxframesize(uint16_t size); // the block number for the ISO14443-4 PCB (used with APDUs) static uint8_t pcb_blocknum = 0; -static uint32_t iso14b_timeout = FWT_TIMEOUT_14B; +static uint32_t iso14b_timeout = TR0; + + +/* ISO 14443 B +* +* Reader to card | ASK - Amplitude Shift Keying Modulation (PCD to PICC for Type B) (NRZ-L encodig) +* Card to reader | BPSK - Binary Phase Shift Keying Modulation, (PICC to PCD for Type B) +* +* fc - carrier frequency 13.56 MHz +* TR0 - Guard Time per 14443-2 +* TR1 - Synchronization Time per 14443-2 +* TR2 - PICC to PCD Frame Delay Time (per 14443-3 Amendment 1) +* +* Elementary Time Unit (ETU) is +* - 128 Carrier Cycles (9.4395 µS) = 8 Subcarrier Units +* - 1 ETU = 1 bit +* - 10 ETU = 1 startbit, 8 databits, 1 stopbit (10bits length) +* - startbit is a 0 +* - stopbit is a 1 +* +* Start of frame (SOF) is +* - [10-11] ETU of ZEROS, unmodulated time +* - [2-3] ETU of ONES, +* +* End of frame (EOF) is +* - [10-11] ETU of ZEROS, unmodulated time +* +* -TO VERIFY THIS BELOW- +* The mode FPGA_MAJOR_MODE_HF_SIMULATOR | FPGA_HF_SIMULATOR_MODULATE_BPSK which we use to simulate tag +* works like this: +* - A 1-bit input to the FPGA becomes 8 pulses at 847.5kHz (1.18µS / pulse) == 9.44us +* - A 0-bit input to the FPGA becomes an unmodulated time of 1.18µS or does it become 8 nonpulses for 9.44us +* +* FPGA doesn't seem to work with ETU. It seems to work with pulse / duration instead. +* +* Card sends data ub 847.e kHz subcarrier +* subcar |duration| FC division +* -------+--------+------------ +* 106kHz | 9.44µS | FC/128 +* 212kHz | 4.72µS | FC/64 +* 424kHz | 2.36µS | FC/32 +* 848kHz | 1.18µS | FC/16 +* -------+--------+------------ +* +* Reader data transmission: +* - no modulation ONES +* - SOF +* - Command, data and CRC_B +* - EOF +* - no modulation ONES +* +* Card data transmission +* - TR1 +* - SOF +* - data (each bytes is: 1startbit, 8bits, 1stopbit) +* - CRC_B +* - EOF +* +* FPGA implementation : +* At this point only Type A is implemented. This means that we are using a +* bit rate of 106 kbit/s, or fc/128. Oversample by 4, which ought to make +* things practical for the ARM (fc/32, 423.8 kbits/s, ~50 kbytes/s) +* +*/ + + //============================================================================= // An ISO 14443 Type B tag. We listen for commands from the reader, using -// a kind of thing that's implemented in software. When we get a +// a UART kind of thing that's implemented in software. When we get a // frame (i.e., a group of bytes between SOF and EOF), we check the CRC. // If it's good, then we can do something appropriate with it, and send // a response. //============================================================================= +//----------------------------------------------------------------------------- +// Code up a string of octets at layer 2 (including CRC, we don't generate +// that here) so that they can be transmitted to the reader. Doesn't transmit +// them yet, just leaves them ready to send in ToSend[]. +//----------------------------------------------------------------------------- +static void CodeIso14443bAsTag(const uint8_t *cmd, int len) { + int i; + + ToSendReset(); + + // Transmit a burst of ones, as the initial thing that lets the + // reader get phase sync. + // This loop is TR1, per specification + // TR1 minimum must be > 80/fs + // TR1 maximum 200/fs + // 80/fs < TR1 < 200/fs + // 10 ETU < TR1 < 24 ETU + + // Send TR1. + // 10-11 ETU * 4times samples ONES + for (i = 0; i < 20; i++) { + SEND4STUFFBIT(1); + } + + // Send SOF. + // 10-11 ETU * 4times samples ZEROS + for (i = 0; i < 10; i++) { + SEND4STUFFBIT(0); + } + + // 2-3 ETU * 4times samples ONES + for (i = 0; i < 2; i++) { + SEND4STUFFBIT(1); + } + + // data + for (i = 0; i < len; i++) { + + // Start bit + SEND4STUFFBIT(0); + + // Data bits + uint8_t b = cmd[i]; + for (int j = 0; j < 8; j++) { + SEND4STUFFBIT(b & 1); + b >>= 1; + } + + // Stop bit + SEND4STUFFBIT(1); + + // Extra Guard bit + // For PICC it ranges 0-18us (1etu = 9us) + //SEND4STUFFBIT(1); + } + + // Send EOF. + // 10-11 ETU * 4 sample rate = ZEROS + for(i = 0; i < 10; i++) { + SEND4STUFFBIT(0); + } + + // why this? + for(i = 0; i < 2; i++) { + SEND4STUFFBIT(1); + } + + // Convert from last byte pos to length + ToSendMax++; +} //----------------------------------------------------------------------------- -// The software that receives commands from the reader, and its state variables. +// The software UART that receives commands from the reader, and its state +// variables. //----------------------------------------------------------------------------- static struct { enum { @@ -103,7 +234,6 @@ static void Uart14bReset(void) { static void Uart14bInit(uint8_t *data) { Uart.output = data; Uart14bReset(); -// memset(Uart.output, 0x00, MAX_FRAME_SIZE); } //----------------------------------------------------------------------------- @@ -121,10 +251,6 @@ static struct { uint16_t bitCount; int posCount; int thisBit; - /* this had been used to add RSSI (Received Signal Strength Indication) to traces. Currently not implemented. - int metric; - int metricN; - */ uint16_t shiftReg; uint8_t *output; uint16_t len; @@ -150,7 +276,6 @@ static void Demod14bReset(void) { static void Demod14bInit(uint8_t *data) { Demod.output = data; Demod14bReset(); - // memset(Demod.output, 0x00, MAX_FRAME_SIZE); } @@ -175,6 +300,7 @@ static void iso14b_set_timeout(uint32_t timeout) { iso14b_timeout = timeout; if (DBGLEVEL >= 3) Dbprintf("ISO14443B Timeout set to %ld fwt", iso14b_timeout); } + static void iso14b_set_maxframesize(uint16_t size) { if (size > 256) size = MAX_FRAME_SIZE; @@ -183,142 +309,6 @@ static void iso14b_set_maxframesize(uint16_t size) { if (DBGLEVEL >= 3) Dbprintf("ISO14443B Max frame size set to %d bytes", Uart.byteCntMax); } -//----------------------------------------------------------------------------- -// Code up a string of octets at layer 2 (including CRC, we don't generate -// that here) so that they can be transmitted to the reader. Doesn't transmit -// them yet, just leaves them ready to send in ToSend[]. -//----------------------------------------------------------------------------- -static void CodeIso14443bAsTag(const uint8_t *cmd, int len) { - /* ISO 14443 B - * - * Reader to card | ASK - Amplitude Shift Keying Modulation (PCD to PICC for Type B) (NRZ-L encodig) - * Card to reader | BPSK - Binary Phase Shift Keying Modulation, (PICC to PCD for Type B) - * - * fc - carrier frequency 13.56 MHz - * TR0 - Guard Time per 14443-2 - * TR1 - Synchronization Time per 14443-2 - * TR2 - PICC to PCD Frame Delay Time (per 14443-3 Amendment 1) - * - * Elementary Time Unit (ETU) is - * - 128 Carrier Cycles (9.4395 µS) = 8 Subcarrier Units - * - 1 ETU = 1 bit - * - 10 ETU = 1 startbit, 8 databits, 1 stopbit (10bits length) - * - startbit is a 0 - * - stopbit is a 1 - * - * Start of frame (SOF) is - * - [10-11] ETU of ZEROS, unmodulated time - * - [2-3] ETU of ONES, - * - * End of frame (EOF) is - * - [10-11] ETU of ZEROS, unmodulated time - * - * -TO VERIFY THIS BELOW- - * The mode FPGA_MAJOR_MODE_HF_SIMULATOR | FPGA_HF_SIMULATOR_MODULATE_BPSK which we use to simulate tag - * works like this: - * - A 1-bit input to the FPGA becomes 8 pulses at 847.5kHz (1.18µS / pulse) == 9.44us - * - A 0-bit input to the FPGA becomes an unmodulated time of 1.18µS or does it become 8 nonpulses for 9.44us - * - * FPGA doesn't seem to work with ETU. It seems to work with pulse / duration instead. - * - * Card sends data ub 847.e kHz subcarrier - * subcar |duration| FC division - * -------+--------+------------ - * 106kHz | 9.44µS | FC/128 - * 212kHz | 4.72µS | FC/64 - * 424kHz | 2.36µS | FC/32 - * 848kHz | 1.18µS | FC/16 - * -------+--------+------------ - * - * Reader data transmission: - * - no modulation ONES - * - SOF - * - Command, data and CRC_B - * - EOF - * - no modulation ONES - * - * Card data transmission - * - TR1 - * - SOF - * - data (each bytes is: 1startbit, 8bits, 1stopbit) - * - CRC_B - * - EOF - * - * FPGA implementation : - * At this point only Type A is implemented. This means that we are using a - * bit rate of 106 kbit/s, or fc/128. Oversample by 4, which ought to make - * things practical for the ARM (fc/32, 423.8 kbits/s, ~50 kbytes/s) - * - */ - - ToSendReset(); - - // Transmit a burst of ones, as the initial thing that lets the - // reader get phase sync. - // This loop is TR1, per specification - // TR1 minimum must be > 80/fs - // TR1 maximum 200/fs - // 80/fs < TR1 < 200/fs - // 10 ETU < TR1 < 24 ETU - - // Send TR1. - // 10-11 ETU * 4times samples ONES - for (int i = 0; i < 10; i++) { SEND4STUFFBIT(1); } - - // Send SOF. - // 10-11 ETU * 4times samples ZEROS - for (int i = 0; i < 10; i++) { SEND4STUFFBIT(0); } - //for(i = 0; i < 10; i++) { ToSendStuffBit(0); } - - // 2-3 ETU * 4times samples ONES - for (int i = 0; i < 3; i++) { SEND4STUFFBIT(1); } - //for(i = 0; i < 3; i++) { ToSendStuffBit(1); } - - // data - for (int i = 0; i < len; ++i) { - - // Start bit - SEND4STUFFBIT(0); - //ToSendStuffBit(0); - - // Data bits - uint8_t b = cmd[i]; - for (int j = 0; j < 8; ++j) { - // if(b & 1) { - // SEND4STUFFBIT(1); - // //ToSendStuffBit(1); - // } else { - // SEND4STUFFBIT(0); - // //ToSendStuffBit(0); - // } - SEND4STUFFBIT(b & 1); - b >>= 1; - } - - // Stop bit - SEND4STUFFBIT(1); - //ToSendStuffBit(1); - - // Extra Guard bit - // For PICC it ranges 0-18us (1etu = 9us) - SEND4STUFFBIT(1); - //ToSendStuffBit(1); - } - - // Send EOF. - // 10-11 ETU * 4 sample rate = ZEROS - for (int i = 0; i < 10; i++) { SEND4STUFFBIT(0); } - //for(i = 0; i < 10; i++) { ToSendStuffBit(0); } - - // why this? - for (int i = 0; i < 2; i++) { SEND4STUFFBIT(1); } - //for(i = 0; i < 40; i++) { ToSendStuffBit(1); } - - // Convert from last byte pos to length - ++ToSendMax; -} - - /* Receive & handle a bit coming from the reader. * * This function is called 4 times per bit (every 2 subcarrier cycles). @@ -454,42 +444,16 @@ static int GetIso14443bCommandFromReader(uint8_t *received, uint16_t *len) { LED_D_OFF(); FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_SIMULATOR | FPGA_HF_SIMULATOR_NO_MODULATION); - StartCountSspClk(); - - volatile uint8_t b; - - // clear receiving shift register and holding register - // What does this loop do? Is it TR1? - // loop is a wait/delay ? - /* - for(uint8_t c = 0; c < 10;) { - - // keep tx buffer in a defined state anyway. - if(AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_TXRDY)) { - AT91C_BASE_SSC->SSC_THR = 0xFF; - ++c; - } - } - */ // Now run a `software UART' on the stream of incoming samples. Uart14bInit(received); - uint8_t mask; - while (!BUTTON_PRESS()) { + while (BUTTON_PRESS() == false) { WDT_HIT(); - // keep tx buffer in a defined state anyway. - if (AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_TXRDY)) { - AT91C_BASE_SSC->SSC_THR = 0x00; - } - - // Wait for byte be become available in rx holding register - if (AT91C_BASE_SSC->SSC_SR & AT91C_SSC_RXRDY) { - - b = (uint8_t) AT91C_BASE_SSC->SSC_RHR; - - for (mask = 0x80; mask != 0; mask >>= 1) { - if (Handle14443bReaderUartBit(b & mask)) { + if(AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_RXRDY)) { + uint8_t b = (uint8_t)AT91C_BASE_SSC->SSC_RHR; + for (uint8_t mask = 0x80; mask != 0x00; mask >>= 1) { + if (Handle14443bReaderUartBit(b & mask)) { *len = Uart.byteCnt; return true; } @@ -499,57 +463,16 @@ static int GetIso14443bCommandFromReader(uint8_t *received, uint16_t *len) { return false; } -void ClearFpgaShiftingRegisters(void) { - - volatile uint8_t b; - - // clear receiving shift register and holding register - while (!(AT91C_BASE_SSC->SSC_SR & AT91C_SSC_RXRDY)) {}; - - b = AT91C_BASE_SSC->SSC_RHR; - (void) b; - - while (!(AT91C_BASE_SSC->SSC_SR & AT91C_SSC_RXRDY)) {}; - - b = AT91C_BASE_SSC->SSC_RHR; - (void) b; - - // wait for the FPGA to signal fdt_indicator == 1 (the FPGA is ready to queue new data in its delay line) - for (uint8_t j = 0; j < 5; j++) { // allow timeout - better late than never - while (!(AT91C_BASE_SSC->SSC_SR & AT91C_SSC_RXRDY)) {}; - if (AT91C_BASE_SSC->SSC_RHR) break; - } - - // Clear TXRDY: - //AT91C_BASE_SSC->SSC_THR = 0xFF; -} - -void WaitForFpgaDelayQueueIsEmpty(uint16_t delay) { - // Ensure that the FPGA Delay Queue is empty before we switch to TAGSIM_LISTEN again: - uint8_t fpga_queued_bits = delay >> 3; // twich /8 ?? >>3, - for (uint8_t i = 0; i <= fpga_queued_bits / 8 + 1;) { - if (AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_TXRDY)) { - AT91C_BASE_SSC->SSC_THR = 0xFF; - i++; - } - } -} static void TransmitFor14443b_AsTag(uint8_t *response, uint16_t len) { - volatile uint32_t b; - // Signal field is off with the appropriate LED LED_D_OFF(); - //uint16_t fpgasendQueueDelay = 0; // Modulate BPSK FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_SIMULATOR | FPGA_HF_SIMULATOR_MODULATE_BPSK); - SpinDelay(40); - - ClearFpgaShiftingRegisters(); - - FpgaSetupSsc(); + AT91C_BASE_SSC->SSC_THR = 0xFF; + FpgaSetupSsc(FPGA_MAJOR_MODE_HF_SIMULATOR); // Transmit the response. for (uint16_t i = 0; i < len;) { @@ -561,13 +484,10 @@ static void TransmitFor14443b_AsTag(uint8_t *response, uint16_t len) { // Prevent rx holding register from overflowing if (AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_RXRDY)) { - b = AT91C_BASE_SSC->SSC_RHR; + volatile uint32_t b = AT91C_BASE_SSC->SSC_RHR; (void)b; } } - - //WaitForFpgaDelayQueueIsEmpty(fpgasendQueueDelay); - AT91C_BASE_SSC->SSC_THR = 0xFF; } //----------------------------------------------------------------------------- // Main loop of simulated tag: receive commands from reader, decide what @@ -575,41 +495,26 @@ static void TransmitFor14443b_AsTag(uint8_t *response, uint16_t len) { //----------------------------------------------------------------------------- void SimulateIso14443bTag(uint32_t pupi) { - // setup device. - FpgaDownloadAndGo(FPGA_BITSTREAM_HF); - // connect Demodulated Signal to ADC: - SetAdcMuxFor(GPIO_MUXSEL_HIPKD); - // Set up the synchronous serial port - FpgaSetupSsc(); - - // allocate command receive buffer - BigBuf_free(); - BigBuf_Clear_ext(false); - - clear_trace(); //sim - set_tracing(true); - - uint16_t len, cmdsReceived = 0; - int cardSTATE = SIM_NOFIELD; - int vHf = 0; // in mV - // uint32_t time_0 = 0; - // uint32_t t2r_time = 0; - // uint32_t r2t_time = 0; - uint8_t *receivedCmd = BigBuf_malloc(MAX_FRAME_SIZE); - - // the only commands we understand is WUPB, AFI=0, Select All, N=1: -// static const uint8_t cmdWUPB[] = { ISO14443B_REQB, 0x00, 0x08, 0x39, 0x73 }; // WUPB - // ... and REQB, AFI=0, Normal Request, N=1: -// static const uint8_t cmdREQB[] = { ISO14443B_REQB, 0x00, 0x00, 0x71, 0xFF }; // REQB - // ... and ATTRIB -// static const uint8_t cmdATTRIB[] = { ISO14443B_ATTRIB, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; // ATTRIB + LED_A_ON(); + // the only commands we understand is WUPB, AFI=0, Select All, N=1: +// static const uint8_t cmdWUPB[] = { ISO14443B_REQB, 0x00, 0x08, 0x39, 0x73 }; // WUPB + // ... and REQB, AFI=0, Normal Request, N=1: +// static const uint8_t cmdREQB[] = { ISO14443B_REQB, 0x00, 0x00, 0x71, 0xFF }; // REQB + // ... and HLTB +// static const uint8_t cmdHLTB[] = { 0x50, 0xff, 0xff, 0xff, 0xff }; // HLTB + // ... and ATTRIB +// static const uint8_t cmdATTRIB[] = { ISO14443B_ATTRIB, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; // ATTRIB // ... if not PUPI/UID is supplied we always respond with ATQB, PUPI = 820de174, Application Data = 0x20381922, // supports only 106kBit/s in both directions, max frame size = 32Bytes, // supports ISO14443-4, FWI=8 (77ms), NAD supported, CID not supported: - uint8_t respATQB[] = { 0x50, 0x82, 0x0d, 0xe1, 0x74, 0x20, 0x38, 0x19, - 0x22, 0x00, 0x21, 0x85, 0x5e, 0xd7 - }; + uint8_t respATQB[] = { + 0x50, + 0x82, 0x0d, 0xe1, 0x74, + 0x20, 0x38, 0x19, + 0x22, 0x00, 0x21, 0x85, + 0x5e, 0xd7 + }; // response to HLTB and ATTRIB static const uint8_t respOK[] = {0x00, 0x78, 0xF0}; @@ -619,6 +524,26 @@ void SimulateIso14443bTag(uint32_t pupi) { num_to_bytes(pupi, 4, respATQB + 1); AddCrc14B(respATQB, 12); } + + // setup device. + FpgaDownloadAndGo(FPGA_BITSTREAM_HF); + + // connect Demodulated Signal to ADC: + SetAdcMuxFor(GPIO_MUXSEL_HIPKD); + + // Set up the synchronous serial port + FpgaSetupSsc(FPGA_MAJOR_MODE_HF_SIMULATOR); + + // allocate command receive buffer + BigBuf_free(); + BigBuf_Clear_ext(false); + clear_trace(); + set_tracing(true); + + uint16_t len, cmdsReceived = 0; + int cardSTATE = SIM_NOFIELD; + int vHf = 0; // in mV + uint8_t *receivedCmd = BigBuf_malloc(MAX_FRAME_SIZE); // prepare "ATQB" tag answer (encoded): CodeIso14443bAsTag(respATQB, sizeof(respATQB)); @@ -663,7 +588,7 @@ void SimulateIso14443bTag(uint32_t pupi) { // WUP in HALTED state if (len == 5) { if ((receivedCmd[0] == ISO14443B_REQB && (receivedCmd[2] & 0x8) == 0x8 && cardSTATE == SIM_HALTED) || - receivedCmd[0] == ISO14443B_REQB) { + receivedCmd[0] == ISO14443B_REQB) { LogTrace(receivedCmd, len, 0, 0, NULL, true); cardSTATE = SIM_SELECTING; } @@ -714,15 +639,21 @@ void SimulateIso14443bTag(uint32_t pupi) { // - SLOT MARKER // - ISO7816 // - emulate with a memory dump - Dbprintf("new cmd from reader: len=%d, cmdsRecvd=%d", len, cmdsReceived); + if (DBGLEVEL >= DBG_DEBUG) + Dbprintf("new cmd from reader: len=%d, cmdsRecvd=%d", len, cmdsReceived); // CRC Check if (len >= 3) { // if crc exists - if (!check_crc(CRC_14443_B, receivedCmd, len)) - DbpString("+++CRC fail"); - else - DbpString("CRC passes"); + if (!check_crc(CRC_14443_B, receivedCmd, len)) { + if (DBGLEVEL >= DBG_DEBUG) { + DbpString("CRC fail"); + } + } + } else { + if (DBGLEVEL >= DBG_DEBUG) { + DbpString("CRC passed"); + } } cardSTATE = SIM_IDLE; } @@ -734,9 +665,11 @@ void SimulateIso14443bTag(uint32_t pupi) { ++cmdsReceived; } - if (DBGLEVEL >= 2) + + if (DBGLEVEL >= DBG_DEBUG) Dbprintf("Emulator stopped. Trace length: %d ", BigBuf_get_traceLen()); - switch_off(); //simulate + + switch_off(); //simulate } //============================================================================= @@ -780,37 +713,8 @@ static RAMFUNC int Handle14443bTagSamplesDemod(int ci, int cq) { // Subcarrier amplitude v = sqrt(ci^2 + cq^2), approximated here by abs(ci) + abs(cq) // Subcarrier amplitude v = sqrt(ci^2 + cq^2), approximated here by max(abs(ci),abs(cq)) + 1/2*min(abs(ci),abs(cq))) -#define CHECK_FOR_SUBCARRIER_old(void) { \ - if (ci < 0) { \ - if (cq < 0) { /* ci < 0, cq < 0 */ \ - if (cq < ci) { \ - v = -cq - (ci >> 1); \ - } else { \ - v = -ci - (cq >> 1); \ - } \ - } else { /* ci < 0, cq >= 0 */ \ - if (cq < -ci) { \ - v = -ci + (cq >> 1); \ - } else { \ - v = cq - (ci >> 1); \ - } \ - } \ - } else { \ - if (cq < 0) { /* ci >= 0, cq < 0 */ \ - if (-cq < ci) { \ - v = ci - (cq >> 1); \ - } else { \ - v = -cq + (ci >> 1); \ - } \ - } else { /* ci >= 0, cq >= 0 */ \ - if (cq < ci) { \ - v = ci + (cq >> 1); \ - } else { \ - v = cq + (ci >> 1); \ - } \ - } \ - } \ - } + +#define SUBCARRIER_DETECT_THRESHOLD 8 //note: couldn't we just use MAX(ABS(ci),ABS(cq)) + (MIN(ABS(ci),ABS(cq))/2) from common.h - marshmellow #define CHECK_FOR_SUBCARRIER(void) { v = MAX(myI, myQ) + (MIN(myI, myQ) >> 1); } @@ -859,7 +763,9 @@ static RAMFUNC int Handle14443bTagSamplesDemod(int ci, int cq) { Demod.posCount = 0; // start of SOF sequence } else { // maximum length of TR1 = 200 1/fs - if (Demod.posCount > 200 / 4) Demod.state = DEMOD_UNSYNCD; + if (Demod.posCount > 200 / 4){ + Demod.state = DEMOD_UNSYNCD; + } } Demod.posCount++; break; @@ -877,6 +783,7 @@ static RAMFUNC int Handle14443bTagSamplesDemod(int ci, int cq) { LED_C_ON(); // Got SOF Demod.state = DEMOD_AWAITING_START_BIT; Demod.posCount = 0; + Demod.bitCount = 0; Demod.len = 0; } } else { @@ -895,8 +802,12 @@ static RAMFUNC int Handle14443bTagSamplesDemod(int ci, int cq) { if (v > 0) { if (Demod.posCount > 6 * 2) { // max 19us between characters = 16 1/fs, max 3 etu after low phase of SOF = 24 1/fs - Demod.state = DEMOD_UNSYNCD; - LED_C_OFF(); + LED_C_OFF(); + if (Demod.bitCount == 0 && Demod.len == 0) { // received SOF only, this is valid for iClass/Picopass + return true; + } else { + Demod.state = DEMOD_UNSYNCD; + } } } else { // start bit detected Demod.bitCount = 0; @@ -932,11 +843,12 @@ static RAMFUNC int Handle14443bTagSamplesDemod(int ci, int cq) { uint16_t s = Demod.shiftReg; // stop bit == '1', start bit == '0' - if ((s & 0x200) && (s & 0x001) == 0) { + if ((s & 0x200) && ((s & 0x001) == 0)) { // left shift to drop the startbit uint8_t b = (s >> 1); Demod.output[Demod.len] = b; - ++Demod.len; + Demod.len++; + Demod.bitCount = 0; Demod.state = DEMOD_AWAITING_START_BIT; } else { // this one is a bit hard, either its a correc byte or its unsynced. @@ -964,99 +876,114 @@ static RAMFUNC int Handle14443bTagSamplesDemod(int ci, int cq) { * Demodulate the samples we received from the tag, also log to tracebuffer * quiet: set to 'TRUE' to disable debug output */ -static void GetTagSamplesFor14443bDemod(void) { - bool finished = false; -// int lastRxCounter = ISO14443B_DMA_BUFFER_SIZE; +static int GetTagSamplesFor14443bDemod(int timeout) { + int ret = 0; + int maxBehindBy = 0; + int lastRxCounter, samples = 0; + int8_t ci, cq; uint32_t time_0 = 0, time_stop = 0; BigBuf_free(); + // The response (tag -> reader) that we're receiving. + uint8_t *receivedResponse = BigBuf_malloc(MAX_FRAME_SIZE); + + // The DMA buffer, used to stream samples from the FPGA + uint16_t *dmaBuf = (uint16_t*) BigBuf_malloc(ISO14443B_DMA_BUFFER_SIZE * sizeof(uint16_t)); // Set up the demodulator for tag -> reader responses. - Demod14bInit(BigBuf_malloc(MAX_FRAME_SIZE)); + Demod14bInit(receivedResponse); - // The DMA buffer, used to stream samples from the FPGA - int8_t *dmaBuf = (int8_t *) BigBuf_malloc(ISO14443B_DMA_BUFFER_SIZE); - int8_t *upTo = dmaBuf; + // wait for last transfer to complete + while (!(AT91C_BASE_SSC->SSC_SR & AT91C_SSC_TXEMPTY)) // Setup and start DMA. - if (!FpgaSetupSscDma((uint8_t *) dmaBuf, ISO14443B_DMA_BUFFER_SIZE)) { + FpgaSetupSsc(FPGA_MAJOR_MODE_HF_READER); + if (FpgaSetupSscDma((uint8_t *) dmaBuf, ISO14443B_DMA_BUFFER_SIZE) == false) { if (DBGLEVEL > 1) Dbprintf("FpgaSetupSscDma failed. Exiting"); - return; + return -1; } + uint16_t *upTo = dmaBuf; + lastRxCounter = ISO14443B_DMA_BUFFER_SIZE; + + // Signal field is ON with the appropriate LED: + LED_D_ON(); // And put the FPGA in the appropriate mode - FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER_RX_XCORR | FPGA_HF_READER_RX_XCORR_848_KHZ); + FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER | FPGA_HF_READER_SUBCARRIER_848_KHZ | FPGA_HF_READER_MODE_RECEIVE_IQ); - // get current clock - time_0 = GetCountSspClk(); + for(;;) { + int behindBy = (lastRxCounter - AT91C_BASE_PDC_SSC->PDC_RCR) & (ISO14443B_DMA_BUFFER_SIZE-1); + if (behindBy > maxBehindBy) { + maxBehindBy = behindBy; + } - // rx counter - dma counter? (how much?) & (mod) mask > 2. (since 2bytes at the time is read) - while (!finished) { + if (behindBy < 1) continue; - LED_A_INV(); - WDT_HIT(); + ci = *upTo >> 8; + cq = *upTo; + upTo++; + lastRxCounter--; + if (upTo >= dmaBuf + ISO14443B_DMA_BUFFER_SIZE) { // we have read all of the DMA buffer content. + upTo = dmaBuf; // start reading the circular buffer from the beginning + lastRxCounter += ISO14443B_DMA_BUFFER_SIZE; + } - // LSB is a fpga signal bit. - int ci = upTo[0]; - int cq = upTo[1]; - upTo += 2; -// lastRxCounter -= 2; + if (AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_ENDRX)) { // DMA Counter Register had reached 0, already rotated. + AT91C_BASE_PDC_SSC->PDC_RNPR = (uint32_t) dmaBuf; // refresh the DMA Next Buffer and + AT91C_BASE_PDC_SSC->PDC_RNCR = ISO14443B_DMA_BUFFER_SIZE; // DMA Next Counter registers + } + samples++; - // restart DMA buffer to receive again. - if (upTo >= dmaBuf + ISO14443B_DMA_BUFFER_SIZE) { - upTo = dmaBuf; -// lastRxCounter = ISO14443B_DMA_BUFFER_SIZE; - AT91C_BASE_PDC_SSC->PDC_RNPR = (uint32_t) upTo; - AT91C_BASE_PDC_SSC->PDC_RNCR = ISO14443B_DMA_BUFFER_SIZE; - } + if (Handle14443bTagSamplesDemod(ci, cq)) { + ret = Demod.len; + break; + } - // https://github.com/Proxmark/proxmark3/issues/103 - bool gotFrame = Handle14443bTagSamplesDemod(ci, cq); - time_stop = GetCountSspClk() - time_0; - - finished = (time_stop > iso14b_timeout || gotFrame); + if(samples > timeout && Demod.state < DEMOD_PHASE_REF_TRAINING) { + ret = -1; + LED_C_OFF(); + break; + } } FpgaDisableSscDma(); - if (upTo) - upTo = NULL; + if (ret < 0) { + return ret; + } - if (Demod.len > 0) - LogTrace(Demod.output, Demod.len, time_0, time_stop, NULL, false); + if (Demod.len > 0) { + LogTrace(Demod.output, Demod.len, time_0, time_stop, NULL, false); + } + + return ret; } //----------------------------------------------------------------------------- // Transmit the command (to the tag) that was placed in ToSend[]. //----------------------------------------------------------------------------- static void TransmitFor14443b_AsReader(void) { - int c; - FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER_TX | FPGA_HF_READER_TX_SHALLOW_MOD); - SpinDelay(60); + FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER | FPGA_HF_READER_MODE_SEND_SHALLOW_MOD); - // What does this loop do? Is it TR1? - // 0xFF = 8 bits of 1. 1 bit == 1Etu,.. - // loop 10 * 8 = 80 ETU of delay, with a non modulated signal. why? - // 80*9 = 720us. + LED_B_ON(); - for (c = 0; c < 50;) { + for (int c = 0; c < ToSendMax; c++) { + uint8_t data = ToSend[c]; + for (int i = 0; i < 8; i++) { + uint16_t send_word = (data & 0x80) ? 0x0000 : 0xffff; + + while (!(AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_TXRDY))) ; + + AT91C_BASE_SSC->SSC_THR = send_word; + while (!(AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_TXRDY))) ; + AT91C_BASE_SSC->SSC_THR = send_word; - if (AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_TXRDY)) { - AT91C_BASE_SSC->SSC_THR = 0xFF; - c++; - } + data <<= 1; + } + WDT_HIT(); } - - // Send frame loop - for (c = 0; c < ToSendMax;) { - - // Put byte into tx holding register as soon as it is ready - if (AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_TXRDY)) { - AT91C_BASE_SSC->SSC_THR = ToSend[c++]; - } - } - WDT_HIT(); + LED_B_OFF(); } //----------------------------------------------------------------------------- @@ -1083,28 +1010,21 @@ static void CodeIso14443bAsReader(const uint8_t *cmd, int len) { // Send SOF // 10-11 ETUs of ZERO - for (int i = 0; i < 10; ++i) ToSendStuffBit(0); + for (int i = 0; i < 10; i++) + ToSendStuffBit(0); + // 2-3 ETUs of ONE ToSendStuffBit(1); ToSendStuffBit(1); -// ToSendStuffBit(1); // Sending cmd, LSB // from here we add BITS - for (int i = 0; i < len; ++i) { + for (int i = 0; i < len; i++) { // Start bit ToSendStuffBit(0); // Data bits uint8_t b = cmd[i]; - // if ( b & 1 ) ToSendStuffBit(1); else ToSendStuffBit(0); - // if ( (b>>1) & 1) ToSendStuffBit(1); else ToSendStuffBit(0); - // if ( (b>>2) & 1) ToSendStuffBit(1); else ToSendStuffBit(0); - // if ( (b>>3) & 1) ToSendStuffBit(1); else ToSendStuffBit(0); - // if ( (b>>4) & 1) ToSendStuffBit(1); else ToSendStuffBit(0); - // if ( (b>>5) & 1) ToSendStuffBit(1); else ToSendStuffBit(0); - // if ( (b>>6) & 1) ToSendStuffBit(1); else ToSendStuffBit(0); - // if ( (b>>7) & 1) ToSendStuffBit(1); else ToSendStuffBit(0); ToSendStuffBit(b & 1); ToSendStuffBit((b >> 1) & 1); @@ -1119,20 +1039,24 @@ static void CodeIso14443bAsReader(const uint8_t *cmd, int len) { ToSendStuffBit(1); // EGT extra guard time // For PCD it ranges 0-57us (1etu = 9us) - ToSendStuffBit(1); - ToSendStuffBit(1); - ToSendStuffBit(1); +// ToSendStuffBit(1); +// ToSendStuffBit(1); +// ToSendStuffBit(1); } // Send EOF // 10-11 ETUs of ZERO - for (int i = 0; i < 10; ++i) ToSendStuffBit(0); + for (int i = 0; i < 10; i++) + ToSendStuffBit(0); // Transition time. TR0 - guard time // 8ETUS minum? // Per specification, Subcarrier must be stopped no later than 2 ETUs after EOF. // I'm guessing this is for the FPGA to be able to send all bits before we switch to listening mode - for (int i = 0; i < 24 ; ++i) ToSendStuffBit(1); + + // ensure that last byte is filled up + for (int i = 0; i < 8 ; ++i) + ToSendStuffBit(1); // TR1 - Synchronization time // Convert from last character reference to length @@ -1147,11 +1071,7 @@ static void CodeAndTransmit14443bAsReader(const uint8_t *cmd, int len) { uint32_t time_start = GetCountSspClk(); CodeIso14443bAsReader(cmd, len); - TransmitFor14443b_AsReader(); - - if (g_trigger) LED_A_ON(); - LogTrace(cmd, len, time_start, GetCountSspClk(), NULL, true); } @@ -1159,7 +1079,7 @@ static void CodeAndTransmit14443bAsReader(const uint8_t *cmd, int len) { * TODO: check CRC and preamble */ uint8_t iso14443b_apdu(uint8_t const *message, size_t message_length, uint8_t *response) { - + LED_A_ON(); uint8_t message_frame[message_length + 4]; // PCB message_frame[0] = 0x0A | pcb_blocknum; @@ -1171,18 +1091,20 @@ uint8_t iso14443b_apdu(uint8_t const *message, size_t message_length, uint8_t *r // EDC (CRC) AddCrc14B(message_frame, message_length + 2); // send - CodeAndTransmit14443bAsReader(message_frame, message_length + 4); //no + CodeAndTransmit14443bAsReader(message_frame, message_length + 4); // get response - GetTagSamplesFor14443bDemod(); //no + int ret = GetTagSamplesFor14443bDemod(RECEIVE_SAMPLES_TIMEOUT); FpgaDisableTracing(); - if (Demod.len < 3) - return 0; + if (ret < 3) { + LED_A_OFF(); + return 0; + } // VALIDATE CRC if (!check_crc(CRC_14443_B, Demod.output, Demod.len)) { - if (DBGLEVEL > 3) Dbprintf("crc fail ICE"); + if (DBGLEVEL > 3) DbpString("CRC fail"); return 0; } // copy response contents @@ -1190,6 +1112,7 @@ uint8_t iso14443b_apdu(uint8_t const *message, size_t message_length, uint8_t *r memcpy(response, Demod.output, Demod.len); return Demod.len; + LED_A_OFF(); } /** @@ -1202,12 +1125,14 @@ static uint8_t iso14443b_select_srx_card(iso14b_card_select_t *card) { uint8_t select_srx[] = { ISO14443B_SELECT, 0x00, 0x00, 0x00}; CodeAndTransmit14443bAsReader(init_srx, sizeof(init_srx)); - GetTagSamplesFor14443bDemod(); //no + int ret = GetTagSamplesFor14443bDemod(RECEIVE_SAMPLES_TIMEOUT); FpgaDisableTracing(); - if (Demod.len == 0) + if (Demod.len == 0 || ret < 0) return 2; + Dbprintf("Randomly generated Chip ID (+ 2 byte CRC): %02x [%02x %02x]", Demod.output[0], Demod.output[1], Demod.output[2]); + // Randomly generated Chip ID if (card) card->chipid = Demod.output[0]; @@ -1216,10 +1141,10 @@ static uint8_t iso14443b_select_srx_card(iso14b_card_select_t *card) { AddCrc14B(select_srx, 2); CodeAndTransmit14443bAsReader(select_srx, sizeof(select_srx)); - GetTagSamplesFor14443bDemod(); //no + ret = GetTagSamplesFor14443bDemod(RECEIVE_SAMPLES_TIMEOUT); FpgaDisableTracing(); - if (Demod.len != 3) + if (Demod.len != 3 || ret < 0) return 2; // Check the CRC of the answer: @@ -1235,10 +1160,10 @@ static uint8_t iso14443b_select_srx_card(iso14b_card_select_t *card) { AddCrc14B(select_srx, 1); CodeAndTransmit14443bAsReader(select_srx, 3); // Only first three bytes for this one - GetTagSamplesFor14443bDemod(); //no + ret = GetTagSamplesFor14443bDemod(RECEIVE_SAMPLES_TIMEOUT); FpgaDisableTracing(); - if (Demod.len != 10) + if (Demod.len != 10 || ret < 0) return 2; // The check the CRC of the answer @@ -1258,7 +1183,7 @@ static uint8_t iso14443b_select_srx_card(iso14b_card_select_t *card) { * TODO: Support multiple cards (perform anticollision) * TODO: Verify CRC checksums */ -uint8_t iso14443b_select_card(iso14b_card_select_t *card) { +int iso14443b_select_card(iso14b_card_select_t *card) { // WUPB command (including CRC) // Note: WUPB wakes up all tags, REQB doesn't wake up tags in HALT state static const uint8_t wupb[] = { ISO14443B_REQB, 0x00, 0x08, 0x39, 0x73 }; @@ -1267,16 +1192,16 @@ uint8_t iso14443b_select_card(iso14b_card_select_t *card) { // first, wake up the tag CodeAndTransmit14443bAsReader(wupb, sizeof(wupb)); - GetTagSamplesFor14443bDemod(); //select_card + int ret = GetTagSamplesFor14443bDemod(RECEIVE_SAMPLES_TIMEOUT); FpgaDisableTracing(); // ATQB too short? - if (Demod.len < 14) - return 2; + if (ret < 14) + return -1; // VALIDATE CRC if (!check_crc(CRC_14443_B, Demod.output, Demod.len)) - return 3; + return -2; if (card) { card->uidlen = 4; @@ -1292,16 +1217,16 @@ uint8_t iso14443b_select_card(iso14b_card_select_t *card) { AddCrc14B(attrib, 9); CodeAndTransmit14443bAsReader(attrib, sizeof(attrib)); - GetTagSamplesFor14443bDemod();//select_card + ret = GetTagSamplesFor14443bDemod(RECEIVE_SAMPLES_TIMEOUT); FpgaDisableTracing(); // Answer to ATTRIB too short? - if (Demod.len < 3) - return 2; + if (ret < 3) + return -1; // VALIDATE CRC if (!check_crc(CRC_14443_B, Demod.output, Demod.len)) - return 3; + return -2; if (card) { @@ -1344,10 +1269,10 @@ void iso14443b_setup(void) { SetAdcMuxFor(GPIO_MUXSEL_HIPKD); // Set up the synchronous serial port - FpgaSetupSsc(); + FpgaSetupSsc(FPGA_MAJOR_MODE_HF_READER); // Signal field is on with the appropriate LED - FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER_TX | FPGA_HF_READER_TX_SHALLOW_MOD); + FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER | FPGA_HF_READER_MODE_SEND_SHALLOW_MOD); SpinDelay(100); // Start the timer @@ -1369,21 +1294,22 @@ static bool ReadSTBlock(uint8_t block) { uint8_t cmd[] = {ISO14443B_READ_BLK, block, 0x00, 0x00}; AddCrc14B(cmd, 2); CodeAndTransmit14443bAsReader(cmd, sizeof(cmd)); - GetTagSamplesFor14443bDemod(); + int res = GetTagSamplesFor14443bDemod(RECEIVE_SAMPLES_TIMEOUT); FpgaDisableTracing(); // Check if we got an answer from the tag - if (Demod.len != 6) { + if (Demod.len != 6 || res < 0) { DbpString("[!] expected 6 bytes from tag, got less..."); return false; } // The check the CRC of the answer if (!check_crc(CRC_14443_B, Demod.output, Demod.len)) { - DbpString("[!] CRC Error block!"); + DbpString("CRC fail"); return false; } return true; } + void ReadSTMemoryIso14443b(uint8_t numofblocks) { // Make sure that we start from off, since the tags are stateful; // confusing things will happen if we don't reset them between reads. @@ -1427,6 +1353,9 @@ void ReadSTMemoryIso14443b(uint8_t numofblocks) { if (i == 0xff) break; ++i; } + + // Todo: iceman: send back read data to client. + // reply_ng(..., ); out: switch_off(); // disconnect raw @@ -1459,10 +1388,10 @@ static void iso1444b_setup_sniff(void) { SetAdcMuxFor(GPIO_MUXSEL_HIPKD); // Setup for the DMA. - FpgaSetupSsc(); + FpgaSetupSsc(FPGA_MAJOR_MODE_HF_READER); // Set FPGA in the appropriate mode - FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER_RX_XCORR | FPGA_HF_READER_RX_XCORR_848_KHZ | FPGA_HF_READER_RX_XCORR_SNOOP); + FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER | FPGA_HF_READER_SUBCARRIER_848_KHZ | FPGA_HF_READER_MODE_SNIFF_IQ); SpinDelay(20); // Start the SSP timer @@ -1497,10 +1426,17 @@ void RAMFUNC SniffIso14443b(void) { bool ReaderIsActive = false; iso1444b_setup_sniff(); - + // The DMA buffer, used to stream samples from the FPGA - int8_t *dmaBuf = (int8_t *) BigBuf_malloc(ISO14443B_DMA_BUFFER_SIZE); - int8_t *data = dmaBuf; + uint16_t *dmaBuf = (uint16_t*) BigBuf_malloc(ISO14443B_DMA_BUFFER_SIZE * sizeof(uint16_t)); + uint16_t *upTo = dmaBuf; + int lastRxCounter = ISO14443B_DMA_BUFFER_SIZE; + int8_t ci, cq; + int maxBehindBy = 0; + + // Count of samples received so far, so that we can include timing + // information in the trace buffer. + int samples = 0; // Setup and start DMA. if (!FpgaSetupSscDma((uint8_t *) dmaBuf, ISO14443B_DMA_BUFFER_SIZE)) { @@ -1513,25 +1449,48 @@ void RAMFUNC SniffIso14443b(void) { time_0 = GetCountSspClk(); // loop and listen - while (!BUTTON_PRESS()) { - WDT_HIT(); + for(;;) { - int ci = data[0]; - int cq = data[1]; - data += 2; + int behindBy = (lastRxCounter - AT91C_BASE_PDC_SSC->PDC_RCR) & (ISO14443B_DMA_BUFFER_SIZE - 1); + if (behindBy > maxBehindBy) { + maxBehindBy = behindBy; + } - if (data >= dmaBuf + ISO14443B_DMA_BUFFER_SIZE) { - data = dmaBuf; - AT91C_BASE_PDC_SSC->PDC_RNPR = (uint32_t) dmaBuf; - AT91C_BASE_PDC_SSC->PDC_RNCR = ISO14443B_DMA_BUFFER_SIZE; - } + if (behindBy < 1) continue; + + ci = *upTo >> 8; + cq = *upTo; + upTo++; + lastRxCounter--; + if (upTo >= dmaBuf + ISO14443B_DMA_BUFFER_SIZE) { // we have read all of the DMA buffer content. + upTo = dmaBuf; // start reading the circular buffer from the beginning again + lastRxCounter += ISO14443B_DMA_BUFFER_SIZE; + if (behindBy > (9 * ISO14443B_DMA_BUFFER_SIZE / 10)) { + Dbprintf("About to blow circular buffer - aborted! behindBy=%d", behindBy); + break; + } + } + + if (AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_ENDRX)) { // DMA Counter Register had reached 0, already rotated. + AT91C_BASE_PDC_SSC->PDC_RNPR = (uint32_t) dmaBuf; // refresh the DMA Next Buffer and + AT91C_BASE_PDC_SSC->PDC_RNCR = ISO14443B_DMA_BUFFER_SIZE; // DMA Next Counter registers + + WDT_HIT(); + if (BUTTON_PRESS()) { + DbpString("Button pressed, cancelled"); + break; + } + } + + samples++; // no need to try decoding reader data if the tag is sending - if (!TagIsActive) { + if (TagIsActive == false) { LED_A_INV(); if (Handle14443bReaderUartBit(ci & 0x01)) { + time_stop = GetCountSspClk() - time_0; LogTrace(Uart.output, Uart.byteCnt, time_start, time_stop, NULL, true); Uart14bReset(); @@ -1556,7 +1515,7 @@ void RAMFUNC SniffIso14443b(void) { // is this | 0x01 the error? & 0xfe in https://github.com/Proxmark/proxmark3/issues/103 // LSB is a fpga signal bit. - if (Handle14443bTagSamplesDemod(ci, cq)) { + if (Handle14443bTagSamplesDemod(ci/2, cq/2) >= 0) { time_stop = GetCountSspClk() - time_0; LogTrace(Demod.output, Demod.len, time_start, time_stop, NULL, false); Uart14bReset(); @@ -1568,6 +1527,7 @@ void RAMFUNC SniffIso14443b(void) { } } + FpgaDisableSscDma(); if (DBGLEVEL >= 2) { DbpString("[+] Sniff statistics:"); Dbprintf("[+] uart State: %x ByteCount: %i ByteCountMax: %i", Uart.state, Uart.byteCnt, Uart.byteCntMax); @@ -1593,12 +1553,14 @@ static void iso14b_set_trigger(bool enable) { * */ void SendRawCommand14443B_Ex(PacketCommandNG *c) { + iso14b_command_t param = c->oldarg[0]; size_t len = c->oldarg[1] & 0xffff; uint32_t timeout = c->oldarg[2]; uint8_t *cmd = c->data.asBytes; - uint8_t status; + int status; uint32_t sendlen = sizeof(iso14b_card_select_t); + uint8_t buf[PM3_CMD_DATA_SIZE] = {0x00}; if (DBGLEVEL > 3) Dbprintf("14b raw: param, %04x", param); @@ -1620,22 +1582,22 @@ void SendRawCommand14443B_Ex(PacketCommandNG *c) { if ((param & ISO14B_SELECT_STD) == ISO14B_SELECT_STD) { iso14b_card_select_t *card = (iso14b_card_select_t *)buf; status = iso14443b_select_card(card); - reply_mix(CMD_ACK, status, sendlen, 0, buf, sendlen); - // 0: OK 2: attrib fail, 3:crc fail, - if (status > 0) goto out; + reply_mix(CMD_HF_ISO14443B_COMMAND, status, sendlen, 0, buf, sendlen); + // 0: OK -1: attrib fail, -2:crc fail, + if (status != 0) goto out; } if ((param & ISO14B_SELECT_SR) == ISO14B_SELECT_SR) { iso14b_card_select_t *card = (iso14b_card_select_t *)buf; status = iso14443b_select_srx_card(card); - reply_mix(CMD_ACK, status, sendlen, 0, buf, sendlen); + reply_mix(CMD_HF_ISO14443B_COMMAND, status, sendlen, 0, buf, sendlen); // 0: OK 2: demod fail, 3:crc fail, if (status > 0) goto out; } if ((param & ISO14B_APDU) == ISO14B_APDU) { status = iso14443b_apdu(cmd, len, buf); - reply_mix(CMD_ACK, status, status, 0, buf, status); + reply_mix(CMD_HF_ISO14443B_COMMAND, status, status, 0, buf, status); } if ((param & ISO14B_RAW) == ISO14B_RAW) { @@ -1645,12 +1607,11 @@ void SendRawCommand14443B_Ex(PacketCommandNG *c) { } CodeAndTransmit14443bAsReader(cmd, len); // raw - GetTagSamplesFor14443bDemod(); // raw + status = GetTagSamplesFor14443bDemod(RECEIVE_SAMPLES_TIMEOUT); // raw FpgaDisableTracing(); sendlen = MIN(Demod.len, PM3_CMD_DATA_SIZE); - status = (Demod.len > 0) ? 0 : 1; - reply_old(CMD_ACK, status, sendlen, 0, Demod.output, sendlen); + reply_old(CMD_HF_ISO14443B_COMMAND, status, sendlen, 0, Demod.output, sendlen); } out: diff --git a/armsrc/iso14443b.h b/armsrc/iso14443b.h index 62dbd6590..0013ad313 100644 --- a/armsrc/iso14443b.h +++ b/armsrc/iso14443b.h @@ -28,7 +28,7 @@ void iso14443b_setup(void); uint8_t iso14443b_apdu(uint8_t const *message, size_t message_length, uint8_t *response); -uint8_t iso14443b_select_card(iso14b_card_select_t *card); +int iso14443b_select_card(iso14b_card_select_t *card); uint8_t iso14443b_select_card_srx(iso14b_card_select_t *card); void SimulateIso14443bTag(uint32_t pupi); diff --git a/armsrc/iso15693.c b/armsrc/iso15693.c index a82bb9a07..51dc7fac8 100644 --- a/armsrc/iso15693.c +++ b/armsrc/iso15693.c @@ -76,7 +76,7 @@ #define DELAY_ARM_TO_TAG 16 #define DELAY_TAG_TO_ARM 32 -//SSP_CLK runs at 13.56MHz / 4 = 3,39MHz when snooping. All values should be multiples of 16 +//SSP_CLK runs at 13.56MHz / 4 = 3,39MHz when sniffing. All values should be multiples of 16 #define DELAY_TAG_TO_ARM_SNIFF 32 #define DELAY_READER_TO_ARM_SNIFF 32 @@ -122,7 +122,7 @@ static void BuildInventoryResponse(uint8_t *uid); // resulting data rate is 26.48 kbit/s (fc/512) // cmd ... data // n ... length of data -static void CodeIso15693AsReader(uint8_t *cmd, int n) { +void CodeIso15693AsReader(uint8_t *cmd, int n) { ToSendReset(); @@ -195,7 +195,7 @@ static void CodeIso15693AsReader256(uint8_t *cmd, int n) { static const uint8_t encode_4bits[16] = { 0xaa, 0x6a, 0x9a, 0x5a, 0xa6, 0x66, 0x96, 0x56, 0xa9, 0x69, 0x99, 0x59, 0xa5, 0x65, 0x95, 0x55 }; -static void CodeIso15693AsTag(uint8_t *cmd, size_t len) { +void CodeIso15693AsTag(uint8_t *cmd, size_t len) { /* * SOF comprises 3 parts; * * An unmodulated time of 56.64 us @@ -241,7 +241,7 @@ static void CodeIso15693AsTag(uint8_t *cmd, size_t len) { } // Transmit the command (to the tag) that was placed in cmd[]. -static void TransmitTo15693Tag(const uint8_t *cmd, int len, uint32_t *start_time) { +void TransmitTo15693Tag(const uint8_t *cmd, int len, uint32_t *start_time) { FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER | FPGA_HF_READER_MODE_SEND_FULL_MOD); @@ -279,7 +279,7 @@ static void TransmitTo15693Tag(const uint8_t *cmd, int len, uint32_t *start_time //----------------------------------------------------------------------------- // Transmit the command (to the reader) that was placed in cmd[]. //----------------------------------------------------------------------------- -static void TransmitTo15693Reader(const uint8_t *cmd, size_t len, uint32_t *start_time, uint32_t slot_time, bool slow) { +void TransmitTo15693Reader(const uint8_t *cmd, size_t len, uint32_t *start_time, uint32_t slot_time, bool slow) { // don't use the FPGA_HF_SIMULATOR_MODULATE_424K_8BIT minor mode. It would spoil GetCountSspClk() FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_SIMULATOR | FPGA_HF_SIMULATOR_MODULATE_424K); @@ -617,7 +617,7 @@ static void DecodeTagReset(DecodeTag_t *DecodeTag) { /* * Receive and decode the tag response, also log to tracebuffer */ -static int GetIso15693AnswerFromTag(uint8_t* response, uint16_t max_len, uint16_t timeout, uint32_t *eof_time) { +int GetIso15693AnswerFromTag(uint8_t* response, uint16_t max_len, uint16_t timeout, uint32_t *eof_time) { int samples = 0; int ret = 0; @@ -966,7 +966,7 @@ static RAMFUNC int Handle15693SampleFromReader(bool bit, DecodeReader_t *DecodeR DecodeReader->posCount++; if (DecodeReader->Coding == CODING_1_OUT_OF_4) { if (DecodeReader->posCount == 7*16) { // 7 bits jammed - FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER | FPGA_HF_READER_MODE_SNOOP_AMPLITUDE); // stop jamming + FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER | FPGA_HF_READER_MODE_SNIFF_AMPLITUDE); // stop jamming // FpgaDisableTracing(); LED_D_OFF(); } else if (DecodeReader->posCount == 8*16) { @@ -976,7 +976,7 @@ static RAMFUNC int Handle15693SampleFromReader(bool bit, DecodeReader_t *DecodeR } } else { if (DecodeReader->posCount == 7*256) { // 7 bits jammend - FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER | FPGA_HF_READER_MODE_SNOOP_AMPLITUDE); // stop jamming + FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER | FPGA_HF_READER_MODE_SNIFF_AMPLITUDE); // stop jamming LED_D_OFF(); } else if (DecodeReader->posCount == 8*256) { DecodeReader->posCount = 0; @@ -1005,7 +1005,7 @@ static RAMFUNC int Handle15693SampleFromReader(bool bit, DecodeReader_t *DecodeR // correctly. //----------------------------------------------------------------------------- -static int GetIso15693CommandFromReader(uint8_t *received, size_t max_len, uint32_t *eof_time) { +int GetIso15693CommandFromReader(uint8_t *received, size_t max_len, uint32_t *eof_time) { int samples = 0; bool gotFrame = false; uint8_t b; @@ -1167,7 +1167,7 @@ void SniffIso15693(uint8_t jam_search_len, uint8_t *jam_search_string) { Dbprintf("Sniff started. Press PM3 Button to stop."); - FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER | FPGA_HF_READER_MODE_SNOOP_AMPLITUDE); + FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER | FPGA_HF_READER_MODE_SNIFF_AMPLITUDE); LED_D_OFF(); SetAdcMuxFor(GPIO_MUXSEL_HIPKD); FpgaSetupSsc(FPGA_MAJOR_MODE_HF_READER); @@ -1197,7 +1197,7 @@ void SniffIso15693(uint8_t jam_search_len, uint8_t *jam_search_string) { dma_start_time = GetCountSspClk() & 0xfffffff0; } - uint16_t snoopdata = *upTo++; + uint16_t sniffdata = *upTo++; if (upTo >= dmaBuf + ISO15693_DMA_BUFFER_SIZE) { // we have read all of the DMA buffer content. upTo = dmaBuf; // start reading the circular buffer from the beginning @@ -1218,7 +1218,7 @@ void SniffIso15693(uint8_t jam_search_len, uint8_t *jam_search_string) { } if (!TagIsActive) { // no need to try decoding reader data if the tag is sending - if (Handle15693SampleFromReader(snoopdata & 0x02, &DecodeReader)) { + if (Handle15693SampleFromReader(sniffdata & 0x02, &DecodeReader)) { uint32_t eof_time = dma_start_time + samples*16 + 8 - DELAY_READER_TO_ARM_SNIFF; // end of EOF if (DecodeReader.byteCount > 0) { @@ -1236,7 +1236,7 @@ void SniffIso15693(uint8_t jam_search_len, uint8_t *jam_search_string) { ReaderIsActive = false; ExpectTagAnswer = true; - } else if (Handle15693SampleFromReader(snoopdata & 0x01, &DecodeReader)) { + } else if (Handle15693SampleFromReader(sniffdata & 0x01, &DecodeReader)) { uint32_t eof_time = dma_start_time + samples*16 + 16 - DELAY_READER_TO_ARM_SNIFF; // end of EOF if (DecodeReader.byteCount > 0) { @@ -1261,7 +1261,7 @@ void SniffIso15693(uint8_t jam_search_len, uint8_t *jam_search_string) { } if (!ReaderIsActive && ExpectTagAnswer) { // no need to try decoding tag data if the reader is currently sending or no answer expected yet - if (Handle15693SamplesFromTag(snoopdata >> 2, &DecodeTag)) { + if (Handle15693SamplesFromTag(sniffdata >> 2, &DecodeTag)) { uint32_t eof_time = dma_start_time + samples*16 - DELAY_TAG_TO_ARM_SNIFF; // end of EOF if (DecodeTag.lastBit == SOF_PART2) { @@ -1550,7 +1550,7 @@ void ReaderIso15693(uint32_t parameter) { } // When SIM: initialize the Proxmark3 as ISO15693 tag -static void Iso15693InitTag(void) { +void Iso15693InitTag(void) { FpgaDownloadAndGo(FPGA_BITSTREAM_HF); SetAdcMuxFor(GPIO_MUXSEL_HIPKD); FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_SIMULATOR | FPGA_HF_SIMULATOR_NO_MODULATION); diff --git a/armsrc/iso15693.h b/armsrc/iso15693.h index bc9b89eee..1b5405b13 100644 --- a/armsrc/iso15693.h +++ b/armsrc/iso15693.h @@ -23,6 +23,15 @@ #define DELAY_ISO15693_VCD_TO_VICC_READER 1056 // 1056/3,39MHz = 311.5us from end of command EOF to start of tag response #define DELAY_ISO15693_VICC_TO_VCD_READER 1024 // 1024/3.39MHz = 302.1us between end of tag response and next reader command +void Iso15693InitReader(void); +void Iso15693InitTag(void); +void CodeIso15693AsReader(uint8_t *cmd, int n); +void CodeIso15693AsTag(uint8_t *cmd, size_t len); + +void TransmitTo15693Reader(const uint8_t *cmd, size_t len, uint32_t *start_time, uint32_t slot_time, bool slow); +int GetIso15693CommandFromReader(uint8_t *received, size_t max_len, uint32_t *eof_time); +void TransmitTo15693Tag(const uint8_t *cmd, int len, uint32_t *start_time); +int GetIso15693AnswerFromTag(uint8_t* response, uint16_t max_len, uint16_t timeout, uint32_t *eof_time); void RecordRawAdcSamplesIso15693(void); void AcquireRawAdcSamplesIso15693(void); diff --git a/client/src/cmdhf14b.c b/client/src/cmdhf14b.c index bfb19323b..141fefda5 100644 --- a/client/src/cmdhf14b.c +++ b/client/src/cmdhf14b.c @@ -134,7 +134,7 @@ static bool waitCmd14b(bool verbose) { PacketResponseNG resp; - if (WaitForResponseTimeout(CMD_ACK, &resp, TIMEOUT)) { + if (WaitForResponseTimeout(CMD_HF_ISO14443B_COMMAND, &resp, TIMEOUT)) { if ((resp.oldarg[0] & 0xFF) > 0) return false; @@ -314,7 +314,7 @@ static bool get_14b_UID(iso14b_card_select_t *card) { clearCommandBuffer(); SendCommandMIX(CMD_HF_ISO14443B_COMMAND, ISO14B_CONNECT | ISO14B_SELECT_SR | ISO14B_DISCONNECT, 0, 0, NULL, 0); - if (WaitForResponseTimeout(CMD_ACK, &resp, TIMEOUT)) { + if (WaitForResponseTimeout(CMD_HF_ISO14443B_COMMAND, &resp, TIMEOUT)) { uint8_t status = resp.oldarg[0]; if (status == 0) { @@ -330,7 +330,7 @@ static bool get_14b_UID(iso14b_card_select_t *card) { clearCommandBuffer(); SendCommandMIX(CMD_HF_ISO14443B_COMMAND, ISO14B_CONNECT | ISO14B_SELECT_STD | ISO14B_DISCONNECT, 0, 0, NULL, 0); - if (WaitForResponseTimeout(CMD_ACK, &resp, TIMEOUT)) { + if (WaitForResponseTimeout(CMD_HF_ISO14443B_COMMAND, &resp, TIMEOUT)) { uint8_t status = resp.oldarg[0]; if (status == 0) { @@ -515,7 +515,7 @@ static bool HF14B_Std_Info(bool verbose) { SendCommandMIX(CMD_HF_ISO14443B_COMMAND, ISO14B_CONNECT | ISO14B_SELECT_STD | ISO14B_DISCONNECT, 0, 0, NULL, 0); PacketResponseNG resp; - if (!WaitForResponseTimeout(CMD_ACK, &resp, TIMEOUT)) { + if (!WaitForResponseTimeout(CMD_HF_ISO14443B_COMMAND, &resp, TIMEOUT)) { if (verbose) PrintAndLogEx(WARNING, "command execution timeout"); switch_off_field_14b(); return false; @@ -556,7 +556,7 @@ static bool HF14B_ST_Info(bool verbose) { SendCommandMIX(CMD_HF_ISO14443B_COMMAND, ISO14B_CONNECT | ISO14B_SELECT_SR | ISO14B_DISCONNECT, 0, 0, NULL, 0); PacketResponseNG resp; - if (!WaitForResponseTimeout(CMD_ACK, &resp, TIMEOUT)) { + if (!WaitForResponseTimeout(CMD_HF_ISO14443B_COMMAND, &resp, TIMEOUT)) { if (verbose) PrintAndLogEx(WARNING, "command execution timeout"); return false; } @@ -611,7 +611,7 @@ static bool HF14B_ST_Reader(bool verbose) { clearCommandBuffer(); SendCommandMIX(CMD_HF_ISO14443B_COMMAND, ISO14B_CONNECT | ISO14B_SELECT_SR | ISO14B_DISCONNECT, 0, 0, NULL, 0); PacketResponseNG resp; - if (!WaitForResponseTimeout(CMD_ACK, &resp, TIMEOUT)) { + if (!WaitForResponseTimeout(CMD_HF_ISO14443B_COMMAND, &resp, TIMEOUT)) { if (verbose) PrintAndLogEx(WARNING, "command execution timeout"); return false; } @@ -651,7 +651,7 @@ static bool HF14B_Std_Reader(bool verbose) { SendCommandMIX(CMD_HF_ISO14443B_COMMAND, ISO14B_CONNECT | ISO14B_SELECT_STD | ISO14B_DISCONNECT, 0, 0, NULL, 0); PacketResponseNG resp; - if (!WaitForResponseTimeout(CMD_ACK, &resp, TIMEOUT)) { + if (!WaitForResponseTimeout(CMD_HF_ISO14443B_COMMAND, &resp, TIMEOUT)) { if (verbose) PrintAndLogEx(WARNING, "command execution timeout"); return false; } @@ -695,7 +695,7 @@ static bool HF14B_Other_Reader(void) { // clearCommandBuffer(); // SendCommandMIX(CMD_HF_ISO14443B_COMMAND, flags, datalen, 0, data, datalen); // PacketResponseNG resp; - // WaitForResponse(CMD_ACK,&resp); + // WaitForResponse(CMD_HF_ISO14443B_COMMAND,&resp); // if (datalen > 2 ) { // PrintAndLogEx(NORMAL, "\n14443-3b tag found:"); @@ -709,7 +709,7 @@ static bool HF14B_Other_Reader(void) { // clearCommandBuffer(); // SendCommandMIX(CMD_HF_ISO14443B_COMMAND, flags, 1, 0, data, 1); // PacketResponseNG resp; - // WaitForResponse(CMD_ACK, &resp); + // WaitForResponse(CMD_HF_ISO14443B_COMMAND, &resp); // if (datalen > 0) { // PrintAndLogEx(NORMAL, "\n14443-3b tag found:"); @@ -723,7 +723,7 @@ static bool HF14B_Other_Reader(void) { // clearCommandBuffer(); // SendCommandMIX(CMD_HF_ISO14443B_COMMAND, flags, 1, 0, data, 1); // PacketResponseNG resp; - // WaitForResponse(CMD_ACK, &resp); + // WaitForResponse(CMD_HF_ISO14443B_COMMAND, &resp); // if (datalen > 0) { // PrintAndLogEx(NORMAL, "\n14443-3b tag found:"); @@ -899,7 +899,7 @@ static int CmdHF14BDump(const char *Cmd) { SendCommandMIX(CMD_HF_ISO14443B_COMMAND, ISO14B_CONNECT | ISO14B_SELECT_SR, 0, 0, NULL, 0); //select - if (WaitForResponseTimeout(CMD_ACK, &resp, 2000)) { + if (WaitForResponseTimeout(CMD_HF_ISO14443B_COMMAND, &resp, 2000)) { if (resp.oldarg[0]) { PrintAndLogEx(INFO, "failed to select %" PRId64 " | %" PRId64, resp.oldarg[0], resp.oldarg[1]); goto out; @@ -915,7 +915,7 @@ static int CmdHF14BDump(const char *Cmd) { clearCommandBuffer(); SendCommandMIX(CMD_HF_ISO14443B_COMMAND, ISO14B_APPEND_CRC | ISO14B_RAW, 2, 0, req, sizeof(req)); - if (WaitForResponseTimeout(CMD_ACK, &resp, 2000)) { + if (WaitForResponseTimeout(CMD_HF_ISO14443B_COMMAND, &resp, 2000)) { uint8_t status = resp.oldarg[0] & 0xFF; if (status > 0) { diff --git a/client/src/cmdhficlass.c b/client/src/cmdhficlass.c index 501190170..639519c30 100644 --- a/client/src/cmdhficlass.c +++ b/client/src/cmdhficlass.c @@ -529,21 +529,19 @@ static int CmdHFiClassSim(const char *Cmd) { char cmdp = tolower(param_getchar(Cmd, 0)); if (strlen(Cmd) < 1 || cmdp == 'h') return usage_hf_iclass_sim(); - uint8_t simType = 0; uint8_t CSN[8] = {0, 0, 0, 0, 0, 0, 0, 0}; + uint8_t sim_type = param_get8ex(Cmd, 0, 0, 10); - simType = param_get8ex(Cmd, 0, 0, 10); - - if (simType == 0) { + if (sim_type == 0) { if (param_gethex(Cmd, 1, CSN, 16)) { PrintAndLogEx(ERR, "A CSN should consist of 16 HEX symbols"); return usage_hf_iclass_sim(); } - PrintAndLogEx(INFO, " simtype: %02x CSN: %s", simType, sprint_hex(CSN, 8)); + PrintAndLogEx(INFO, " simtype: %02x CSN: %s", sim_type, sprint_hex(CSN, 8)); } - if (simType > 4) { - PrintAndLogEx(ERR, "Undefined simptype %d", simType); + if (sim_type > 4) { + PrintAndLogEx(ERR, "Undefined simtype %d", sim_type); return usage_hf_iclass_sim(); } @@ -575,14 +573,14 @@ static int CmdHFiClassSim(const char *Cmd) { **/ uint8_t tries = 0; - switch (simType) { + switch (sim_type) { - case 2: { + case ICLASS_SIM_MODE_READER_ATTACK: { PrintAndLogEx(INFO, "Starting iCLASS sim 2 attack (elite mode)"); - PrintAndLogEx(INFO, "press Enter to cancel"); + PrintAndLogEx(INFO, "press " _YELLOW_("`enter`") " to cancel"); PacketResponseNG resp; clearCommandBuffer(); - SendCommandMIX(CMD_HF_ICLASS_SIMULATE, simType, NUM_CSNS, 0, csns, 8 * NUM_CSNS); + SendCommandMIX(CMD_HF_ICLASS_SIMULATE, sim_type, NUM_CSNS, 0, csns, 8 * NUM_CSNS); while (!WaitForResponseTimeout(CMD_ACK, &resp, 2000)) { tries++; @@ -625,13 +623,13 @@ static int CmdHFiClassSim(const char *Cmd) { free(dump); break; } - case 4: { + case ICLASS_SIM_MODE_READER_ATTACK_KEYROLL: { // reader in key roll mode, when it has two keys it alternates when trying to verify. PrintAndLogEx(INFO, "Starting iCLASS sim 4 attack (elite mode, reader in key roll mode)"); PrintAndLogEx(INFO, "press Enter to cancel"); PacketResponseNG resp; clearCommandBuffer(); - SendCommandMIX(CMD_HF_ICLASS_SIMULATE, simType, NUM_CSNS, 0, csns, 8 * NUM_CSNS); + SendCommandMIX(CMD_HF_ICLASS_SIMULATE, sim_type, NUM_CSNS, 0, csns, 8 * NUM_CSNS); while (!WaitForResponseTimeout(CMD_ACK, &resp, 2000)) { tries++; @@ -689,12 +687,13 @@ static int CmdHFiClassSim(const char *Cmd) { free(dump); break; } - case 1: - case 3: + case ICLASS_SIM_MODE_CSN: + case ICLASS_SIM_MODE_CSN_DEFAULT: + case ICLASS_SIM_MODE_FULL: default: { uint8_t numberOfCSNs = 0; clearCommandBuffer(); - SendCommandMIX(CMD_HF_ICLASS_SIMULATE, simType, numberOfCSNs, 0, CSN, 8); + SendCommandMIX(CMD_HF_ICLASS_SIMULATE, sim_type, numberOfCSNs, 0, CSN, 8); break; } } diff --git a/include/pm3_cmd.h b/include/pm3_cmd.h index 117eea672..0d24d5bae 100644 --- a/include/pm3_cmd.h +++ b/include/pm3_cmd.h @@ -588,6 +588,18 @@ typedef struct { #define FLAG_ICLASS_READER_ONE_TRY 0x20 #define FLAG_ICLASS_READER_CEDITKEY 0x40 +// iCLASS simulation modes +#define ICLASS_SIM_MODE_CSN 0 +#define ICLASS_SIM_MODE_CSN_DEFAULT 1 +#define ICLASS_SIM_MODE_READER_ATTACK 2 +#define ICLASS_SIM_MODE_FULL 3 +#define ICLASS_SIM_MODE_READER_ATTACK_KEYROLL 4 +#define ICLASS_SIM_MODE_EXIT_AFTER_MAC 5 // note: device internal only + +#define MODE_SIM_CSN 0 +#define MODE_EXIT_AFTER_MAC 1 +#define MODE_FULLSIM 2 + // Dbprintf flags #define FLAG_RAWPRINT 0x00 #define FLAG_LOG 0x01 From 9d204897d182b42cc29a26518b3314211e76d56b Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Mon, 6 Jul 2020 05:41:44 +0200 Subject: [PATCH 0021/1047] fix #830 - 'lf em 4x50_info/read' - now print msb and lsb again. --- client/src/cmdlfem4x.c | 5 +- client/src/cmdlfem4x50.c | 239 +++++++++++++++++++++++++-------------- client/src/cmdlfem4x50.h | 7 +- 3 files changed, 156 insertions(+), 95 deletions(-) diff --git a/client/src/cmdlfem4x.c b/client/src/cmdlfem4x.c index 8fbb0e509..8031ab20d 100644 --- a/client/src/cmdlfem4x.c +++ b/client/src/cmdlfem4x.c @@ -128,7 +128,7 @@ static int usage_lf_em4x05_dump(void) { PrintAndLogEx(NORMAL, "Examples:"); PrintAndLogEx(NORMAL, " lf em 4x05_dump"); PrintAndLogEx(NORMAL, " lf em 4x05_dump 11223344"); - PrintAndLogEx(NORMAL, " lf em 4x50_dump f card1 11223344"); + PrintAndLogEx(NORMAL, " lf em 4x05_dump f card1 11223344"); return PM3_SUCCESS; } static int usage_lf_em4x05_wipe(void) { @@ -1395,7 +1395,8 @@ static command_t CommandTable[] = { {"4x05_read", CmdEM4x05Read, IfPm3Lf, "read word data from EM4x05/EM4x69"}, {"4x05_write", CmdEM4x05Write, IfPm3Lf, "write word data to EM4x05/EM4x69"}, {"----------", CmdHelp, AlwaysAvailable, "----------------------- " _CYAN_("EM 4x50") " -----------------------"}, - {"4x50_info", CmdEM4x50Info, IfPm3EM4x50, "read complete data from EM4x50"}, + {"4x50_dump", CmdEM4x50Dump, IfPm3EM4x50, "dump EM4x50 tag"}, + {"4x50_info", CmdEM4x50Info, IfPm3EM4x50, "tag information EM4x50"}, {"4x50_write", CmdEM4x50Write, IfPm3EM4x50, "write word data to EM4x50"}, {"4x50_write_password", CmdEM4x50WritePassword, IfPm3EM4x50, "change passwword of EM4x50 tag"}, {"4x50_read", CmdEM4x50Read, IfPm3EM4x50, "read word data from EM4x50"}, diff --git a/client/src/cmdlfem4x50.c b/client/src/cmdlfem4x50.c index dad399a36..1009f3bb6 100644 --- a/client/src/cmdlfem4x50.c +++ b/client/src/cmdlfem4x50.c @@ -15,7 +15,7 @@ #include "commonutil.h" #include "em4x50.h" -int usage_lf_em4x50_info(void) { +static int usage_lf_em4x50_info(void) { PrintAndLogEx(NORMAL, "Read all information of EM4x50. Tag nust be on antenna."); PrintAndLogEx(NORMAL, ""); PrintAndLogEx(NORMAL, "Usage: lf em 4x50_info [h] [v] [p ]"); @@ -30,7 +30,7 @@ int usage_lf_em4x50_info(void) { PrintAndLogEx(NORMAL, ""); return PM3_SUCCESS; } -int usage_lf_em4x50_write(void) { +static int usage_lf_em4x50_write(void) { PrintAndLogEx(NORMAL, "Write EM4x50 word. Tag must be on antenna. "); PrintAndLogEx(NORMAL, ""); PrintAndLogEx(NORMAL, "Usage: lf em 4x50_write [h] [a
] [w ]"); @@ -44,7 +44,7 @@ int usage_lf_em4x50_write(void) { PrintAndLogEx(NORMAL, ""); return PM3_SUCCESS; } -int usage_lf_em4x50_write_password(void) { +static int usage_lf_em4x50_write_password(void) { PrintAndLogEx(NORMAL, "Write EM4x50 password. Tag must be on antenna. "); PrintAndLogEx(NORMAL, ""); PrintAndLogEx(NORMAL, "Usage: lf em 4x50_write_password [h] [p ] [n ]"); @@ -57,8 +57,8 @@ int usage_lf_em4x50_write_password(void) { PrintAndLogEx(NORMAL, ""); return PM3_SUCCESS; } -int usage_lf_em4x50_read(void) { - PrintAndLogEx(NORMAL, "Read EM4x50 word(s). Tag must be on antenna. "); +static int usage_lf_em4x50_read(void) { + PrintAndLogEx(NORMAL, "Read EM4x50 word(s). Tag must be on antenna."); PrintAndLogEx(NORMAL, ""); PrintAndLogEx(NORMAL, "Usage: lf em 4x50_read [h] [a
] [p ]"); PrintAndLogEx(NORMAL, "Options:"); @@ -71,6 +71,20 @@ int usage_lf_em4x50_read(void) { PrintAndLogEx(NORMAL, ""); return PM3_SUCCESS; } +static int usage_lf_em4x50_dump(void) { + PrintAndLogEx(NORMAL, "Dump EM4x50 tag. Tag must be on antenna."); + PrintAndLogEx(NORMAL, ""); + PrintAndLogEx(NORMAL, "Usage: lf em 4x50_dump [h] [f ] [p ]"); + PrintAndLogEx(NORMAL, "Options:"); + PrintAndLogEx(NORMAL, " h - this help"); + PrintAndLogEx(NORMAL, " f - overide filename prefix (optional). Default is based on UID"); + PrintAndLogEx(NORMAL, " p - password (hex) (optional)"); + PrintAndLogEx(NORMAL, "Examples:"); + PrintAndLogEx(NORMAL, _YELLOW_(" lf em 4x50_dump")); + PrintAndLogEx(NORMAL, _YELLOW_(" lf em 4x50_dump p 11223344")); + PrintAndLogEx(NORMAL, _YELLOW_(" lf em 4x50_dump f card_nnn p 11223344")); + return PM3_SUCCESS; +} static void prepare_result(const uint8_t *byte, int fwr, int lwr, em4x50_word_t *words) { @@ -128,46 +142,52 @@ static void prepare_result(const uint8_t *byte, int fwr, int lwr, em4x50_word_t } } -static void print_result(const em4x50_word_t *words, int fwr, int lwr, bool verbose) { +static void print_result(const em4x50_word_t *words, int fwr, int lwr) { // print available information for given word from fwr to lwr, i.e. // bit table + summary lines with hex notation of word (msb + lsb) - char string[NO_CHARS_MAX] = {0}, pstring[NO_CHARS_MAX] = {0}; + PrintAndLogEx(NORMAL, ""); + PrintAndLogEx(INFO, " # | word (msb) | word (lsb) | desc"); + PrintAndLogEx(INFO, "----+-------------+-------------+--------------------"); for (int i = fwr; i <= lwr; i++) { - if (verbose) { - - // final result - string[0] = '\0'; - sprintf(pstring, "\n word[%i] msb: " _GREEN_("0x"), i); - strcat(string, pstring); - - for (int j = 0; j < 4; j++) { - sprintf(pstring, _GREEN_("%02x"), words[i].byte[j]); - strcat(string, pstring); - } - - sprintf(pstring, "\n word[%i] lsb: 0x", i); - strcat(string, pstring); - - for (int j = 0; j < 4; j++) { - sprintf(pstring, "%02x", reflect8(words[i].byte[3-j])); - strcat(string, pstring); - } - } else { - string[0] = '\0'; - sprintf(pstring, "[" _GREEN_("+") "] word[%i]: " _YELLOW_("0x"), i); - strcat(string, pstring); - - for (int j = 0; j < 4; j++) { - sprintf(pstring, _YELLOW_("%02x"), words[i].byte[j]); - strcat(string, pstring); - } + char s[50] = {0}; + switch(i) { + case EM4X50_DEVICE_PASSWORD: + sprintf(s, _YELLOW_("password, write only")); + break; + case EM4X50_PROTECTION: + sprintf(s, _YELLOW_("protection cfg (locked)")); + break; + case EM4X50_CONTROL: + sprintf(s, _YELLOW_("control cfg (locked)")); + break; + case EM4X50_DEVICE_SERIAL: + sprintf(s, _YELLOW_("device serial number (read only)")); + break; + case EM4X50_DEVICE_ID: + sprintf(s, _YELLOW_("device identification (read only)")); + break; + default: + sprintf(s, "user data"); + break; } - PrintAndLogEx(INFO, string); + + char r[30] = {0}; + for (int j = 3; j >= 0; j--) { + sprintf(r + strlen(r), "%02x ", reflect8(words[i].byte[j])); + } + + PrintAndLogEx(INFO, " %2i | " _GREEN_("%s") "| %s| %s", + i, + sprint_hex(words[i].byte, 4), + r, + s + ); } + PrintAndLogEx(INFO, "----+-------------+-------------+--------------------"); } static void print_info_result(uint8_t *data, bool verbose) { @@ -193,43 +213,8 @@ static void print_info_result(uint8_t *data, bool verbose) { // data section PrintAndLogEx(NORMAL, ""); PrintAndLogEx(INFO, _YELLOW_("EM4x50 data:")); - - if (verbose) { - print_result(words, 0, EM4X50_NO_WORDS - 1, true); - } else { - - PrintAndLogEx(NORMAL, ""); - PrintAndLogEx(INFO, "idx | word | desc"); - PrintAndLogEx(INFO, "----+-------------+----------------------------------"); - - // condensed data section - for (int i = 0; i < EM4X50_NO_WORDS; i++) { - char s[50] = {0}; - switch(i) { - case EM4X50_DEVICE_PASSWORD: - sprintf(s, _YELLOW_("password, write only")); - break; - case EM4X50_PROTECTION: - sprintf(s, _YELLOW_("protection cfg (locked)")); - break; - case EM4X50_CONTROL: - sprintf(s, _YELLOW_("control cfg (locked)")); - break; - case EM4X50_DEVICE_SERIAL: - sprintf(s, _YELLOW_("device serial number (read only)")); - break; - case EM4X50_DEVICE_ID: - sprintf(s, _YELLOW_("device identification (read only)")); - break; - default: - sprintf(s, "user data"); - break; - } - PrintAndLogEx(INFO, " %2i | %s| %s", i, sprint_hex(words[i].byte, 4), s); - } - } - PrintAndLogEx(INFO, "----+-------------+----------------------------------"); - + print_result(words, 0, EM4X50_NO_WORDS - 1); + // configuration section PrintAndLogEx(NORMAL, ""); PrintAndLogEx(INFO, "---- " _CYAN_("Configuration") " ----"); @@ -416,7 +401,7 @@ int CmdEM4x50Write(const char *Cmd) { em4x50_word_t words[EM4X50_NO_WORDS]; prepare_result(data, etd.address, etd.address, words); - print_result(words, etd.address, etd.address, true); + print_result(words, etd.address, etd.address); PrintAndLogEx(SUCCESS, "Successfully wrote to tag"); PrintAndLogEx(HINT, "Try `" _YELLOW_("lf em 4x50_read a %u") "` - to read your data", etd.address); return PM3_SUCCESS; @@ -553,9 +538,7 @@ int em4x50_read(em4x50_data_t *etd, em4x50_word_t *out, bool verbose) { memcpy(out, &words, sizeof(em4x50_word_t) * EM4X50_NO_WORDS); } - if (verbose) { - print_result(words, etd->address, etd->address, true); - } + print_result(words, etd->address, etd->address); return PM3_SUCCESS; } @@ -573,15 +556,6 @@ int CmdEM4x50Read(const char *Cmd) { case 'h': { return usage_lf_em4x50_read(); } - case 'p': { - if (param_gethex(Cmd, cmdp + 1, etd.password, 8)) { - PrintAndLogEx(FAILED, "\n password has to be 8 hex symbols\n"); - return PM3_EINVARG; - } - etd.pwd_given = true; - cmdp += 2; - break; - } case 'a': { param_getdec(Cmd, cmdp + 1, &etd.address); @@ -594,6 +568,15 @@ int CmdEM4x50Read(const char *Cmd) { cmdp += 2; break; } + case 'p': { + if (param_gethex(Cmd, cmdp + 1, etd.password, 8)) { + PrintAndLogEx(FAILED, "\n password has to be 8 hex symbols\n"); + return PM3_EINVARG; + } + etd.pwd_given = true; + cmdp += 2; + break; + } default: { PrintAndLogEx(WARNING, "\n Unknown parameter '%c'\n", param_getchar(Cmd, cmdp)); errors = true; @@ -602,8 +585,90 @@ int CmdEM4x50Read(const char *Cmd) { } } - if (errors) + if (errors || strlen(Cmd) == 0 || etd.addr_given == false) return usage_lf_em4x50_read(); return em4x50_read(&etd, NULL, true); } + +int CmdEM4x50Dump(const char *Cmd) { + + em4x50_data_t etd; + etd.pwd_given = false; + etd.addr_given = false; + + char filename[FILE_PATH_SIZE] = {0x00}; + char *fptr = filename; + + bool errors = false; + uint8_t cmdp = 0; + while (param_getchar(Cmd, cmdp) != 0x00 && !errors) { + switch (tolower(param_getchar(Cmd, cmdp))) { + case 'h': + return usage_lf_em4x50_dump(); + break; + case 'f': + param_getstr(Cmd, cmdp + 1, filename, FILE_PATH_SIZE); + cmdp += 2; + break; + case 'p': { + if (param_gethex(Cmd, cmdp + 1, etd.password, 8)) { + PrintAndLogEx(FAILED, "\n password has to be 8 hex symbols\n"); + return PM3_EINVARG; + } + etd.pwd_given = true; + cmdp += 2; + break; + } + default: + PrintAndLogEx(WARNING, " Unknown parameter '%c'", param_getchar(Cmd, cmdp)); + errors = true; + break; + }; + } + + // validation + if (errors) + return usage_lf_em4x50_dump(); + + PrintAndLogEx(INFO, "reading EM4x50 tag"); + clearCommandBuffer(); + SendCommandNG(CMD_LF_EM4X50_INFO, (uint8_t *)&etd, sizeof(etd)); + PacketResponseNG resp; + if (!WaitForResponseTimeout(CMD_ACK, &resp, TIMEOUT)) { + PrintAndLogEx(WARNING, "timeout while waiting for reply."); + return PM3_ETIMEOUT; + } + + bool success = (resp.status & STATUS_SUCCESS) >> 1; + if (success == false) { + PrintAndLogEx(FAILED, "reading tag " _RED_("failed")); + return PM3_ESOFT; + } + + // structured format + em4x50_word_t words[EM4X50_NO_WORDS]; + prepare_result(resp.data.asBytes, 0, EM4X50_NO_WORDS - 1, words); + + PrintAndLogEx(INFO, _YELLOW_("EM4x50 data:")); + print_result(words, 0, EM4X50_NO_WORDS - 1); + + // user supplied filename? + if (strlen(filename) == 0) { + PrintAndLogEx(INFO, "Using UID as filename"); + fptr += sprintf(fptr, "lf-4x50-"); + FillFileNameByUID(fptr, words[EM4X50_DEVICE_SERIAL].byte, "-dump", 4); + } + + uint8_t data[EM4X50_NO_WORDS * 4] = {0}; + for (int i=0; i < EM4X50_NO_WORDS; i++) { + memcpy(data + (i*4), words[i].byte, 4); + } + + // saveFileEML will add .eml extension to filename + // saveFile (binary) passes in the .bin extension. + saveFileEML(filename, data, sizeof(data), 4); + saveFile(filename, ".bin", data, sizeof(data)); + //saveFileJSON... + return PM3_SUCCESS; +} diff --git a/client/src/cmdlfem4x50.h b/client/src/cmdlfem4x50.h index e426fd460..4519abbb4 100644 --- a/client/src/cmdlfem4x50.h +++ b/client/src/cmdlfem4x50.h @@ -14,11 +14,6 @@ #include"common.h" #include "em4x50.h" -int usage_lf_em4x50_info(void); -int usage_lf_em4x50_write(void); -int usage_lf_em4x50_write_password(void); -int usage_lf_em4x50_read(void); - int read_em4x50_uid(void); bool detect_4x50_block(void); int em4x50_read(em4x50_data_t *etd, em4x50_word_t *out, bool verbose); @@ -27,5 +22,5 @@ int CmdEM4x50Info(const char *Cmd); int CmdEM4x50Write(const char *Cmd); int CmdEM4x50WritePassword(const char *Cmd); int CmdEM4x50Read(const char *Cmd); - +int CmdEM4x50Dump(const char *Cmd); #endif From 791afef728b402bceaefa6f5af2a720139a62969 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Mon, 6 Jul 2020 05:42:10 +0200 Subject: [PATCH 0022/1047] adapt reflect8 fct --- common/commonutil.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/common/commonutil.c b/common/commonutil.c index 14f2d58e5..fc287fe9d 100644 --- a/common/commonutil.c +++ b/common/commonutil.c @@ -60,9 +60,21 @@ uint32_t reflect(uint32_t v, int b) { return v; } +// https://graphics.stanford.edu/~seander/bithacks.html#BitReverseTable + +// Reverse the bits in a byte with 3 operations (64-bit multiply and modulus division): +uint8_t reflect8(uint8_t b) { + return (b * 0x0202020202ULL & 0x010884422010ULL) % 1023; +} + + +// Reverse the bits in a byte with 4 operations (64-bit multiply, no division): +/* uint8_t reflect8(uint8_t b) { return ((b * 0x80200802ULL) & 0x0884422110ULL) * 0x0101010101ULL >> 32; } +*/ + uint16_t reflect16(uint16_t b) { uint16_t v = 0; v |= (b & 0x8000) >> 15; @@ -117,10 +129,13 @@ void lsl(uint8_t *data, size_t len) { data[len - 1] <<= 1; } + +// BSWAP24 of array[3] uint32_t le24toh(uint8_t data[3]) { return (data[2] << 16) | (data[1] << 8) | data[0]; } +// BSWAP24, take u32, output array void htole24(uint32_t val, uint8_t data[3]) { data[0] = (uint8_t) val; data[1] = (uint8_t)(val >> 8); From 7d3cab166980b92ecc519be2627b55fee0e88885 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Mon, 6 Jul 2020 05:42:43 +0200 Subject: [PATCH 0023/1047] clean --- client/src/util.c | 9 --------- client/src/util.h | 3 +++ 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/client/src/util.c b/client/src/util.c index 80def08ef..808f147f0 100644 --- a/client/src/util.c +++ b/client/src/util.c @@ -791,15 +791,6 @@ uint32_t PackBits(uint8_t start, uint8_t len, uint8_t *bits) { return tmp; } -/* -uint8_t pw_rev_A(uint8_t b) { - b = (b & 0xF0) >> 4 | (b & 0x0F) << 4; - b = (b & 0xCC) >> 2 | (b & 0x33) << 2; - b = (b & 0xAA) >> 1 | (b & 0x55) << 1; - return b; -} -*/ - uint64_t HornerScheme(uint64_t num, uint64_t divider, uint64_t factor) { uint64_t remaind = 0, quotient = 0, result = 0; remaind = num % divider; diff --git a/client/src/util.h b/client/src/util.h index c15183734..156c3a089 100644 --- a/client/src/util.h +++ b/client/src/util.h @@ -54,9 +54,12 @@ void print_blocks(uint32_t *data, size_t len); int hex_to_bytes(const char *hexValue, uint8_t *bytesValue, size_t maxBytesValueLen); void num_to_bytebits(uint64_t n, size_t len, uint8_t *dest); void num_to_bytebitsLSBF(uint64_t n, size_t len, uint8_t *dest); + +// Swap endian on arrays up to 64bytes. uint8_t *SwapEndian64(const uint8_t *src, const size_t len, const uint8_t blockSize); void SwapEndian64ex(const uint8_t *src, const size_t len, const uint8_t blockSize, uint8_t *dest); +// parameter helper functions int param_getlength(const char *line, int paramnum); char param_getchar(const char *line, int paramnum); char param_getchar_indx(const char *line, int indx, int paramnum); From 927cd71ed96bafde5b6480613769b5e6e96eb272 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Mon, 6 Jul 2020 05:43:12 +0200 Subject: [PATCH 0024/1047] use reflect fct --- client/src/loclass/cipherutils.c | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/client/src/loclass/cipherutils.c b/client/src/loclass/cipherutils.c index 76415b74f..58875216b 100644 --- a/client/src/loclass/cipherutils.c +++ b/client/src/loclass/cipherutils.c @@ -128,24 +128,17 @@ uint64_t x_bytes_to_num(uint8_t *src, size_t len) { return num; } -uint8_t reversebytes(uint8_t b) { - b = (b & 0xF0) >> 4 | (b & 0x0F) << 4; - b = (b & 0xCC) >> 2 | (b & 0x33) << 2; - b = (b & 0xAA) >> 1 | (b & 0x55) << 1; - return b; -} - void reverse_arraybytes(uint8_t *arr, size_t len) { uint8_t i; for (i = 0; i < len ; i++) { - arr[i] = reversebytes(arr[i]); + arr[i] = reflect8(arr[i]); } } void reverse_arraycopy(uint8_t *arr, uint8_t *dest, size_t len) { uint8_t i; for (i = 0; i < len ; i++) { - dest[i] = reversebytes(arr[i]); + dest[i] = reflect8(arr[i]); } } From ae8be54fca2d29c84ea6cfe3bb228d95cf8ac0f9 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Mon, 6 Jul 2020 05:43:38 +0200 Subject: [PATCH 0025/1047] clean --- client/src/cmdhfmfhard.c | 8 -------- 1 file changed, 8 deletions(-) diff --git a/client/src/cmdhfmfhard.c b/client/src/cmdhfmfhard.c index 15eb15ab0..3d378322e 100644 --- a/client/src/cmdhfmfhard.c +++ b/client/src/cmdhfmfhard.c @@ -1664,14 +1664,6 @@ static inline bool bitflips_match(uint8_t byte, uint32_t state, odd_even_t odd_e return true; } -/* -static uint_fast8_t reverse(uint_fast8_t b) { - b = (b & 0xF0) >> 4 | (b & 0x0F) << 4; - b = (b & 0xCC) >> 2 | (b & 0x33) << 2; - b = (b & 0xAA) >> 1 | (b & 0x55) << 1; - return b; -} -*/ static uint_fast8_t reverse(uint_fast8_t b) { return (b * 0x0202020202ULL & 0x010884422010ULL) % 1023; } From 7e5b9297499add47b4a2f2f000bf8d199784e1b8 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Mon, 6 Jul 2020 05:46:46 +0200 Subject: [PATCH 0026/1047] updated ignore file --- .gitignore | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index 4ee047c9e..31f4e1595 100644 --- a/.gitignore +++ b/.gitignore @@ -41,6 +41,7 @@ Makefile.platform # cmake client/build/ client/android/build/ +client/deps/bzip2/ # Coverity cov-int/ @@ -77,17 +78,16 @@ fpga/* !fpga/xst_hf.scr !fpga/go.bat !fpga/sim.tcl + # offcial dumps folder dumps/* +traces/* #client/* -# my own traces folder client/traces/* -# my own dumps folder client/dumps/* *.ice *.new -armsrc/TEMP EMV/* tools/mf_nonce_brute/mf_nonce_brute tools/andrew/* tools/jtag_openocd/openocd_configuration From 7811d0a0850add11b2f85a6a5cbc0451a17fa5a5 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Mon, 6 Jul 2020 05:48:50 +0200 Subject: [PATCH 0027/1047] textual --- CHANGELOG.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 416f063b9..a45b7f033 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,8 +3,11 @@ All notable changes to this project will be documented in this file. This project uses the changelog in accordance with [keepchangelog](http://keepachangelog.com/). Please use this to write notable changes, which is not the same as git commit log... ## [unreleased][unreleased] - - Added lf em function: 4x50_sread (@tharexde) - - Added lf em functions: 4x50_info, 4x50_write, 4x50_write_password (@tharexde) + - Added `lf em 4x50_dump` (@iceman1001) + - Added `lf em 4x50_read` (@tharexde) + - Added `lf em 4x50_info` (@tharexde) + - Added `4x50_write` (@tharexde) + - Added `4x50_write_password` (@tharexde) - Fix em4x50 demodulation error (@tharexde) - Fix `hf mfdes` authentification issues, DES working (@bkerler) - Add Android cross-compilation to client cmake (@dxl, @doegox) From ab7c33ecbe0304e768315b75090b6e654a74927f Mon Sep 17 00:00:00 2001 From: Iceman Date: Mon, 6 Jul 2020 14:33:13 +0200 Subject: [PATCH 0028/1047] Update bt_manual_v10.md --- doc/bt_manual_v10.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/doc/bt_manual_v10.md b/doc/bt_manual_v10.md index e474c0ec7..22db91322 100644 --- a/doc/bt_manual_v10.md +++ b/doc/bt_manual_v10.md @@ -182,8 +182,9 @@ Instead of `aa:bb:cc:dd:ee:ff`, you'll see your MAC address. If you don't have `hcitool`, you can use `bluetoothctl` and `scan on` as shown in next section. 2. Use Proxmark client with Bluetooth MAC address as bt: + ```sh -./proxmark3 bt:aa:bb:cc:dd:ee:ff +./proxmark3 -p bt:aa:bb:cc:dd:ee:ff ``` The first time, your OS will ask you for pairing. The default PIN is 1234. If PIN is not typed in quickly, the client might timeout. Simply @@ -225,7 +226,7 @@ turn on solid. 4. a serial port `/dev/ttyUSB0` will be created, use Proxmark3 client on it ```sh -./proxmark3 /dev/ttyUSB0 +./proxmark3 -p /dev/ttyUSB0 ``` #### 5.2.3 (deprecated) Connecting rdv4.0 with Bluetooth on Linux computer via rfcomm @@ -257,7 +258,7 @@ connection is successful. 4. Use Proxmark client on BT-serial port ```sh -./proxmark3 /dev/rfcomm0 +./proxmark3 -p /dev/rfcomm0 ``` See instructions above (method 1) for initial pairing. @@ -283,7 +284,7 @@ After reboot you can go ahead to pairing your Proxmark3 RDV4 Blue Shark: 8. A serial port like `/dev/tty.PM3_RDV40-DevB` will be created, use Proxmark3 client on it ```sh -./proxmark3 /dev/tty.PM3_RDV40-DevB +./proxmark3 -p /dev/tty.PM3_RDV40-DevB ``` ### 5.4 Android ^[Top](#top) @@ -294,7 +295,7 @@ After reboot you can go ahead to pairing your Proxmark3 RDV4 Blue Shark: 1. Make sure you already followed this tutorial https://github.com/RfidResearchGroup/proxmark3/blob/master/doc/termux_notes.md#setup and have Termux with an running Proxmark3 client ready. You need additional the `cp210x` serial usb driver enabled and working, like the `USB_ACM` driver to communicate wireless. 2. Insert the Bluetooth adapter with an fitting USB-C/Micro-USB converter into your Android USB port and a serial port `/dev/ttyUSB0` will be created. To see if it's working, run `tsudo ls /dev/ttyU*` and it should list `/dev/ttyUSB0`. 3. The adapter will search automatically and establish the connection to BlueShark. The adapter will remember the device that was first connected and after that the same device will be connected. After the connection is established, the blue state LED on add-on will turn on solid. - 4. If you see this, congratulations, you can run your Proxmark3 client in Termux with `tsudo proxmark3/client/proxmark3 /dev/ttyUSB0` + 4. If you see this, congratulations, you can run your Proxmark3 client in Termux with `tsudo proxmark3/client/proxmark3 -p /dev/ttyUSB0` ## 6. OTHER NOTES ^[Top](#top) From d83a45f0cb1860ac70d1588b016e587d97f3c7b3 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Mon, 6 Jul 2020 15:16:00 +0200 Subject: [PATCH 0029/1047] fpga merge changes --- armsrc/felica.c | 2 +- armsrc/hfsnoop.c | 4 +- armsrc/iclass.c | 274 +++++++++++++++++++++------------------ client/src/cmdhficlass.c | 34 +++-- include/pm3_cmd.h | 18 ++- include/protocols.h | 2 +- 6 files changed, 180 insertions(+), 154 deletions(-) diff --git a/armsrc/felica.c b/armsrc/felica.c index f8375f0cc..d61719c33 100644 --- a/armsrc/felica.c +++ b/armsrc/felica.c @@ -336,7 +336,7 @@ static void BuildFliteRdblk(uint8_t *idm, int blocknum, uint16_t *blocks) { } static void TransmitFor18092_AsReader(uint8_t *frame, int len, uint32_t *timing, uint8_t power, uint8_t highspeed) { - uint8_t flags = FPGA_MAJOR_MODE_HF_ISO18092; + uint16_t flags = FPGA_MAJOR_MODE_HF_ISO18092; if (power) flags |= FPGA_HF_ISO18092_FLAG_READER; if (highspeed) diff --git a/armsrc/hfsnoop.c b/armsrc/hfsnoop.c index 177a1f99e..e14be0858 100644 --- a/armsrc/hfsnoop.c +++ b/armsrc/hfsnoop.c @@ -41,12 +41,12 @@ int HfSniff(uint32_t samplesToSkip, uint32_t triggersToSkip, uint16_t *len) { SetAdcMuxFor(GPIO_MUXSEL_HIPKD); // Set up the synchronous serial port - FpgaSetupSsc(); + FpgaSetupSsc(FPGA_MAJOR_MODE_HF_SNIFF); // Setting Frame Mode For better performance on high speed data transfer. AT91C_BASE_SSC->SSC_RFMR = SSC_FRAME_MODE_BITS_IN_WORD(16); - FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_SNOOP); + FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_SNIFF); SpinDelay(100); *len = (BigBuf_max_traceLen() & 0xFFFE); diff --git a/armsrc/iclass.c b/armsrc/iclass.c index dbf759adf..a42cdf8f1 100644 --- a/armsrc/iclass.c +++ b/armsrc/iclass.c @@ -3,6 +3,7 @@ // Hagen Fritsch - June 2010 // Gerhard de Koning Gans - May 2011 // Gerhard de Koning Gans - June 2012 - Added iClass card and reader emulation +// piwi - 2019 // // This code is licensed to you under the terms of the GNU GPL, version 2 or, // at your option, any later version. See the LICENSE.txt file for the text of @@ -10,7 +11,6 @@ //----------------------------------------------------------------------------- // Routines to support iClass. //----------------------------------------------------------------------------- -// Based on ISO14443a implementation. Still in experimental phase. // Contribution made during a security research at Radboud University Nijmegen // // Please feel free to contribute and extend iClass support!! @@ -56,11 +56,6 @@ #include "ticks.h" #include "iso15693.h" -static int g_wait = 290; -static int timeout = 5000; -static uint32_t time_rdr = 0; -static uint32_t time_response = 0; - static int SendIClassAnswer(uint8_t *resp, int respLen, uint16_t delay); int doIClassSimulation(int simulationMode, uint8_t *reader_mac_buf); @@ -117,8 +112,9 @@ void SniffIClass(uint8_t jam_search_len, uint8_t *jam_search_string) { } static void rotateCSN(uint8_t *original_csn, uint8_t *rotated_csn) { - for (uint8_t i = 0; i < 8; i++) + for (uint8_t i = 0; i < 8; i++) { rotated_csn[i] = (original_csn[i] >> 3) | (original_csn[(i + 1) % 8] << 5); + } } // Encode SOF only @@ -376,8 +372,6 @@ int doIClassSimulation(int simulationMode, uint8_t *reader_mac_buf) { } } - int exitLoop = 0; - // Anti-collision process: // Reader 0a // Tag 0f @@ -409,7 +403,7 @@ int doIClassSimulation(int simulationMode, uint8_t *reader_mac_buf) { uint8_t *resp_conf = BigBuf_malloc(28); int resp_conf_len; - // e-Purse + // e-Purse (blk 2) // 18: Takes 2 bytes for SOF/EOF and 8 * 2 = 16 bytes (2 bytes/bit) uint8_t *resp_cc = BigBuf_malloc(28); int resp_cc_len; @@ -420,7 +414,7 @@ int doIClassSimulation(int simulationMode, uint8_t *reader_mac_buf) { uint8_t ff_data[10] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00}; AddCrc(ff_data, 8); - // Application Issuer Area + // Application Issuer Area (blk 5) uint8_t *resp_aia = BigBuf_malloc(28); int resp_aia_len; @@ -467,7 +461,7 @@ int doIClassSimulation(int simulationMode, uint8_t *reader_mac_buf) { //This is used for responding to READ-block commands or other data which is dynamically generated //First the 'trace'-data, not encoded for FPGA - uint8_t *data_generic_trace = BigBuf_malloc(32 + 2);//8 bytes data + 2byte CRC is max tag answer + uint8_t *data_generic_trace = BigBuf_malloc(32 + 2); // 32 bytes data + 2byte CRC is max tag answer //Then storage for the modulated data //Each bit is doubled when modulated for FPGA, and we also have SOF and EOF (2 bytes) @@ -479,14 +473,15 @@ int doIClassSimulation(int simulationMode, uint8_t *reader_mac_buf) { uint8_t cmd, options, block; int len = 0; - while (exitLoop == false) { + bool exit_loop = 0; + while (exit_loop == false) { WDT_HIT(); uint32_t reader_eof_time = 0; len = GetIso15693CommandFromReader(receivedCmd, MAX_FRAME_SIZE, &reader_eof_time); if (len < 0) { button_pressed = true; - exitLoop = true; + exit_loop = true; continue; } @@ -506,7 +501,7 @@ int doIClassSimulation(int simulationMode, uint8_t *reader_mac_buf) { // Reader in anticollission phase if (chip_state != HALTED) { modulated_response = resp_sof; - modulated_response_size = resp_sof_len; //order = 1; + modulated_response_size = resp_sof_len; chip_state = ACTIVATED; goto send; } @@ -527,19 +522,21 @@ int doIClassSimulation(int simulationMode, uint8_t *reader_mac_buf) { if (chip_state == SELECTED) { // block0,1,2,5 is always readable. switch (block) { - case 0: // csn (0c 00) + case 0: { // csn (0c 00) modulated_response = resp_csn; modulated_response_size = resp_csn_len; trace_data = csn_data; trace_data_size = sizeof(csn_data); goto send; - case 1: // configuration (0c 01) + } + case 1: { // configuration (0c 01) modulated_response = resp_conf; modulated_response_size = resp_conf_len; - trace_data = conf_data; - trace_data_size = sizeof(conf_data); + trace_data = conf_block; + trace_data_size = sizeof(conf_block); goto send; - case 2: // e-purse (0c 02) + } + case 2: {// e-purse (0c 02) modulated_response = resp_cc; modulated_response_size = resp_cc_len; trace_data = card_challenge_data; @@ -549,19 +546,22 @@ int doIClassSimulation(int simulationMode, uint8_t *reader_mac_buf) { memcpy(reader_mac_buf, card_challenge_data, 8); } goto send; + } case 3: - case 4: // Kd, Kc, always respond with 0xff bytes + case 4: { // Kd, Kc, always respond with 0xff bytes modulated_response = resp_ff; modulated_response_size = resp_ff_len; trace_data = ff_data; trace_data_size = sizeof(ff_data); goto send; - case 5:// Application Issuer Area (0c 05) + } + case 5: { // Application Issuer Area (0c 05) modulated_response = resp_aia; modulated_response_size = resp_aia_len; trace_data = aia_data; trace_data_size = sizeof(aia_data); goto send; + } default : { if (simulationMode == ICLASS_SIM_MODE_FULL) { // 0x0C //Read block @@ -570,7 +570,7 @@ int doIClassSimulation(int simulationMode, uint8_t *reader_mac_buf) { AddCrc(data_generic_trace, 8); trace_data = data_generic_trace; trace_data_size = 10; - CodeIClassTagAnswer(trace_data, trace_data_size); + CodeIso15693AsTag(trace_data, trace_data_size); memcpy(modulated_response, ToSend, ToSendMax); modulated_response_size = ToSendMax; goto send; @@ -588,23 +588,33 @@ int doIClassSimulation(int simulationMode, uint8_t *reader_mac_buf) { trace_data = csn_data; trace_data_size = sizeof(csn_data); goto send; + } else if (cmd == ICLASS_CMD_READCHECK) { // 0x88 // Read e-purse KD (88 02) KC (18 02) - modulated_response = resp_cc; - modulated_response_size = resp_cc_len; //order = 4; - trace_data = card_challenge_data; - trace_data_size = sizeof(card_challenge_data); - LED_B_ON(); - goto send; + if (chip_state == SELECTED) { + if ( ICLASS_DEBIT(cmd) ){ + cipher_state = &cipher_state_KD[current_page]; + diversified_key = diversified_kd; + } else { + cipher_state = &cipher_state_KC[current_page]; + diversified_key = diversified_kc; + } + modulated_response = resp_cc; + modulated_response_size = resp_cc_len; + trace_data = card_challenge_data; + trace_data_size = sizeof(card_challenge_data); + goto send; + } + } else if (cmd == ICLASS_CMD_CHECK) { // 0x05 // Reader random and reader MAC!!! if (simulationMode == ICLASS_SIM_MODE_FULL) { // NR, from reader, is in receivedCmd +1 - opt_doTagMAC_2(cipher_state, receivedCmd + 1, data_generic_trace, diversified_key); + opt_doTagMAC_2(*cipher_state, receivedCmd + 1, data_generic_trace, diversified_key); trace_data = data_generic_trace; trace_data_size = 4; - CodeIClassTagAnswer(trace_data, trace_data_size); + CodeIso15693AsTag(trace_data, trace_data_size); memcpy(data_response, ToSend, ToSendMax); modulated_response = data_response; modulated_response_size = ToSendMax; @@ -628,21 +638,24 @@ int doIClassSimulation(int simulationMode, uint8_t *reader_mac_buf) { Dbprintf("[+] CSN: %02x .... %02x OK", csn[0], csn[7]); } if (reader_mac_buf != NULL) { + // save NR and MAC for sim 2,4 memcpy(reader_mac_buf + 8, receivedCmd + 1, 8); } - exitLoop = true; + exit_loop = true; } } goto send; + } else if (cmd == ICLASS_CMD_HALT && options == 0 && len == 1) { if (chip_state == SELECTED) { // Reader ends the session modulated_response = resp_sof; - modulated_response_size = resp_sof_Len; + modulated_response_size = resp_sof_len; chip_state = HALTED; goto send; } + } else if (simulationMode == ICLASS_SIM_MODE_FULL && cmd == ICLASS_CMD_READ4 && len == 4) { // 0x06 if (chip_state == SELECTED) { @@ -656,31 +669,86 @@ int doIClassSimulation(int simulationMode, uint8_t *reader_mac_buf) { modulated_response_size = ToSendMax; goto send; } - } else if (simulationMode == ICLASS_SIM_MODE_FULL && cmd == ICLASS_CMD_UPDATE) { - //Probably the reader wants to update the nonce. Let's just ignore that for now. - // OBS! If this is implemented, don't forget to regenerate the cipher_state - //We're expected to respond with the data+crc, exactly what's already in the receivedcmd - //receivedcmd is now UPDATE 1b | ADDRESS 1b| DATA 8b| Signature 4b or CRC 2b| + } else if (simulationMode == ICLASS_SIM_MODE_FULL && cmd == ICLASS_CMD_UPDATE && (len == 12 || len == 14)) { - //Take the data... - memcpy(data_generic_trace, receivedCmd + 2, 8); - AddCrc(data_generic_trace, 8); - trace_data = data_generic_trace; - trace_data_size = 10; - CodeIClassTagAnswer(trace_data, trace_data_size); + // We're expected to respond with the data+crc, exactly what's already in the receivedCmd + // receivedCmd is now UPDATE 1b | ADDRESS 1b | DATA 8b | Signature 4b or CRC 2b + if (chip_state == SELECTED) { - memcpy(data_response, ToSend, ToSendMax); - modulated_response = data_response; - modulated_response_size = ToSendMax; -// response_delay = 4600 * 1.5; // tPROG 4-15ms + if (block == 2) { // update e-purse + memcpy(card_challenge_data, receivedCmd + 2, 8); + CodeIso15693AsTag(card_challenge_data, sizeof(card_challenge_data)); + memcpy(resp_cc, ToSend, ToSendMax); + resp_cc_len = ToSendMax; + cipher_state_KD[current_page] = opt_doTagMAC_1(card_challenge_data, diversified_kd); + cipher_state_KC[current_page] = opt_doTagMAC_1(card_challenge_data, diversified_kc); + + } else if (block == 3) { // update Kd + for (int i = 0; i < 8; i++) { + if (personalization_mode) { + diversified_kd[i] = receivedCmd[2 + i]; + } else { + diversified_kd[i] ^= receivedCmd[2 + i]; + } + } + cipher_state_KD[current_page] = opt_doTagMAC_1(card_challenge_data, diversified_kd); + + } else if (block == 4) { // update Kc + for (int i = 0; i < 8; i++) { + if (personalization_mode) { + diversified_kc[i] = receivedCmd[2 + i]; + } else { + diversified_kc[i] ^= receivedCmd[2 + i]; + } + } + cipher_state_KC[current_page] = opt_doTagMAC_1(card_challenge_data, diversified_kc); + } + + // update emulator + memcpy(emulator + (current_page * page_size) + (8 * block), receivedCmd + 2, 8); + + memcpy(data_generic_trace, receivedCmd + 2, 8); + AddCrc(data_generic_trace, 8); + trace_data = data_generic_trace; + trace_data_size = 10; + CodeIso15693AsTag(trace_data, trace_data_size); + memcpy(data_response, ToSend, ToSendMax); + modulated_response = data_response; + modulated_response_size = ToSendMax; + } goto send; -// } else if(receivedCmd[0] == ICLASS_CMD_PAGESEL) { // 0x84 - //Pagesel - //Pagesel enables to select a page in the selected chip memory and return its configuration block - //Chips with a single page will not answer to this command - // It appears we're fine ignoring this. - //Otherwise, we should answer 8bytes (block) + 2bytes CRC + + } else if (receivedCmd[0] == ICLASS_CMD_PAGESEL && len == 4) { // 0x84 + // Pagesel, + // - enables to select a page in the selected chip memory and return its configuration block + // Chips with a single page will not answer to this command + // Otherwise, we should answer 8bytes (conf block 1) + 2bytes CRC + if (chip_state == SELECTED) { + + if (simulationMode == ICLASS_SIM_MODE_FULL && max_page > 0) { + + current_page = receivedCmd[1]; + + memcpy(data_generic_trace, emulator + (current_page * page_size) + (8 * 1), 8); + memcpy(diversified_kd, emulator + (current_page * page_size) + (8 * 3), 8); + memcpy(diversified_kc, emulator + (current_page * page_size) + (8 * 4), 8); + + cipher_state = &cipher_state_KD[current_page]; + + personalization_mode = data_generic_trace[7] & 0x80; + AddCrc(data_generic_trace, 8); + + trace_data = data_generic_trace; + trace_data_size = 10; + + CodeIso15693AsTag(trace_data, trace_data_size); + memcpy(data_response, ToSend, ToSendMax); + modulated_response = data_response; + modulated_response_size = ToSendMax; + } + } + // } else if(receivedCmd[0] == ICLASS_CMD_DETECT) { // 0x0F } else if (receivedCmd[0] == 0x26 && len == 5) { // standard ISO15693 INVENTORY command. Ignore. @@ -697,7 +765,7 @@ send: if (modulated_response_size > 0) { uint32_t response_time = reader_eof_time + DELAY_ICLASS_VCD_TO_VICC_SIM; TransmitTo15693Reader(modulated_response, modulated_response_size, &response_time, 0, false); - LogTrace(trace_data, trace_data_size, response_time*32, response_time*32 + modulated_response_size*32*64, NULL, false); + LogTrace(trace_data, trace_data_size, response_time * 32, (response_time * 32) + (modulated_response_size * 32 * 64), NULL, false); } } @@ -711,54 +779,6 @@ send: /// THE READER CODE - -//----------------------------------------------------------------------------- -// Transmit the command (to the tag) that was placed in ToSend[]. -//----------------------------------------------------------------------------- -static void TransmitIClassCommand(const uint8_t *cmd, int len, int *wait) { - - int c = 0; - bool firstpart = true; - uint8_t sendbyte; - - time_rdr = 0; - - FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_ISO14443A | FPGA_HF_ISO14443A_READER_MOD); - - AT91C_BASE_SSC->SSC_THR = 0x00; - - // make sure we timeout previous comms. - if (*wait) - SpinDelayUs(*wait); - - for (;;) { - - WDT_HIT(); - - // Put byte into tx holding register as soon as it is ready - if (AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_TXRDY)) { - - // DOUBLE THE SAMPLES! - if (firstpart) { - sendbyte = (cmd[c] & 0xf0) | (cmd[c] >> 4); - } else { - sendbyte = (cmd[c] & 0x0f) | (cmd[c] << 4); - c++; - } - - if (sendbyte == 0xff) - sendbyte = 0xfe; - - AT91C_BASE_SSC->SSC_THR = sendbyte; - firstpart = !firstpart; - - if (c >= len) break; - } - } - - time_rdr = GetCountSspClk(); -} - static void ReaderTransmitIClass(uint8_t *frame, int len, uint32_t *start_time) { CodeIso15693AsReader(frame, len); @@ -800,7 +820,7 @@ static bool selectIclassTag(uint8_t *card_data, bool use_credit_key, uint32_t *e // bit 7: parity. if (use_credit_key) - readcheck_cc[0] = 0x10 | ICLASS_CMD_READCHECK; + read_check_cc[0] = 0x10 | ICLASS_CMD_READCHECK; uint8_t resp[ICLASS_BUFFER_SIZE] = {0}; @@ -850,7 +870,7 @@ static bool selectIclassTag(uint8_t *card_data, bool use_credit_key, uint32_t *e // card selected, now read e-purse (cc) (block2) (only 8 bytes no CRC) start_time = *eof_time + DELAY_ICLASS_VICC_TO_VCD_READER; - ReaderTransmitIClass(readcheck_cc, sizeof(readcheck_cc), &start_time); + ReaderTransmitIClass(read_check_cc, sizeof(read_check_cc), &start_time); // expect a 8-byte response here len = GetIso15693AnswerFromTag(resp, sizeof(resp), ICLASS_READER_TIMEOUT_OTHERS, eof_time); @@ -864,25 +884,24 @@ static bool selectIclassTag(uint8_t *card_data, bool use_credit_key, uint32_t *e // Reader iClass Anticollission // turn off afterwards -void ReaderIClass(uint8_t arg0) { +void ReaderIClass(uint8_t flags) { - uint8_t card_data[6 * 8] = {0}; + uint8_t card_data[6 * 8] = {0xFF}; uint8_t last_csn[8] = {0, 0, 0, 0, 0, 0, 0, 0}; uint8_t resp[ICLASS_BUFFER_SIZE]; - memset(card_data, 0xFF, sizeof(card_data)); +// memset(card_data, 0xFF, sizeof(card_data)); memset(resp, 0xFF, sizeof(resp)); - bool abort_after_read = arg0 & FLAG_ICLASS_READER_ONLY_ONCE; // flag to read until one tag is found successfully - bool try_once = arg0 & FLAG_ICLASS_READER_ONE_TRY; // flag to not to loop continuously, looking for tag - bool use_credit_key = arg0 & FLAG_ICLASS_READER_CEDITKEY; // flag to use credit key - bool flagReadAIA = arg0 & FLAG_ICLASS_READER_AIA; // flag to read block5, application issuer area + bool flag_readonce = flags & FLAG_ICLASS_READER_ONLY_ONCE; // flag to read until one tag is found successfully + bool use_credit_key = flags & FLAG_ICLASS_READER_CEDITKEY; // flag to use credit key + bool flag_read_aia = flags & FLAG_ICLASS_READER_AIA; // flag to read block5, application issuer area - if (flags & FLAG_ICLASS_READER_INIT) { + if ((flags & FLAG_ICLASS_READER_INIT) == FLAG_ICLASS_READER_INIT) { Iso15693InitReader(); } - if (flags & FLAG_ICLASS_READER_CLEARTRACE) { + if ((flags & FLAG_ICLASS_READER_CLEARTRACE) == FLAG_ICLASS_READER_CLEARTRACE) { set_tracing(true); clear_trace(); StartCountSspClk(); @@ -890,7 +909,6 @@ void ReaderIClass(uint8_t arg0) { uint32_t start_time = 0; uint32_t eof_time = 0; - int read_status = selectIclassTag(card_data, use_credit_key, &eof_time); if (read_status == 0) { reply_mix(CMD_ACK, 0xFF, 0, 0, card_data, 0); @@ -898,18 +916,18 @@ void ReaderIClass(uint8_t arg0) { return; } - uint8_t result_status = FLAG_ICLASS_READER_CSN | FLAG_ICLASS_READER_CONF | FLAG_ICLASS_READER_CC; + uint8_t result_status = FLAG_ICLASS_CSN | FLAG_ICLASS_CONF | FLAG_ICLASS_CC; //Read block 5, AIA - if (flagReadAIA) { + if (flag_read_aia) { //Read App Issuer Area block CRC(0x05) => 0xde 0x64 - uint8_t readAA[] = { ICLASS_CMD_READ_OR_IDENTIFY, 0x05, 0xde, 0x64}; + uint8_t read_aa[] = { ICLASS_CMD_READ_OR_IDENTIFY, 0x05, 0xde, 0x64}; - if (sendCmdGetResponseWithRetries(readAA, sizeof(readAA), resp, sizeof(resp), 10, 10, start_time, ICLASS_READER_TIMEOUT_OTHERS, &eof_time)) { - result_status |= FLAG_ICLASS_READER_AIA; + if (sendCmdGetResponseWithRetries(read_aa, sizeof(read_aa), resp, sizeof(resp), 10, 10, start_time, ICLASS_READER_TIMEOUT_OTHERS, &eof_time)) { + result_status |= FLAG_ICLASS_AIA; memcpy(card_data + (8 * 5), resp, 8); } else { - if (DBGLEVEL >= DBG_EXTENDED) DbpString("Failed to dump AA block"); + if (DBGLEVEL >= DBG_EXTENDED) DbpString("Failed to dump AIA block"); } } @@ -929,12 +947,10 @@ void ReaderIClass(uint8_t arg0) { // only useful if looping in arm (not try_once && not abort_after_read) if (memcmp(last_csn, card_data, 8) != 0) { - if (send) { - reply_mix(CMD_ACK, result_status, 0, 0, card_data, sizeof(card_data)); - if (abort_after_read) { - LED_B_OFF(); - return; - } + reply_mix(CMD_ACK, result_status, 0, 0, card_data, sizeof(card_data)); + if (flag_readonce) { + LED_B_OFF(); + return; } LED_B_OFF(); } @@ -1269,12 +1285,12 @@ static bool iClass_WriteBlock_ext(uint8_t blockno, uint8_t *data) { } uint8_t all_ff[8] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; - if (blockNo == 2) { + if (blockno == 2) { // check response. e-purse update swaps first and second half if (memcmp(data+4, resp, 4) || memcmp(data, resp+4, 4)) { return false; } - } else if (blockNo == 3 || blockNo == 4) { + } else if (blockno == 3 || blockno == 4) { // check response. Key updates always return 0xffffffffffffffff if (memcmp(all_ff, resp, 8)) { return false; diff --git a/client/src/cmdhficlass.c b/client/src/cmdhficlass.c index 639519c30..21ad93997 100644 --- a/client/src/cmdhficlass.c +++ b/client/src/cmdhficlass.c @@ -1101,7 +1101,7 @@ static void Calc_wb_mac(uint8_t blockno, uint8_t *data, uint8_t *div_key, uint8_ static bool select_only(uint8_t *CSN, uint8_t *CCNR, bool use_credit_key, bool verbose) { PacketResponseNG resp; - uint8_t flags = FLAG_ICLASS_READER_ONLY_ONCE | FLAG_ICLASS_READER_CC | FLAG_ICLASS_READER_ONE_TRY; + uint8_t flags = FLAG_ICLASS_READER_ONLY_ONCE; if (use_credit_key) flags |= FLAG_ICLASS_READER_CEDITKEY; @@ -1279,9 +1279,12 @@ static int CmdHFiClassReader_Dump(const char *Cmd) { // if no debit key given try credit key on AA1 (not for iclass but for some picopass this will work) if (!have_debit_key && have_credit_key) use_credit_key = true; - uint32_t flags = FLAG_ICLASS_READER_CSN | FLAG_ICLASS_READER_CC | - FLAG_ICLASS_READER_CONF | FLAG_ICLASS_READER_ONLY_ONCE | - FLAG_ICLASS_READER_ONE_TRY; + uint32_t flags = ( + FLAG_ICLASS_READER_INIT | + FLAG_ICLASS_READER_CLEARTRACE | + FLAG_ICLASS_READER_ONLY_ONCE + ); + //get config and first 3 blocks PacketResponseNG resp; @@ -1305,7 +1308,7 @@ static int CmdHFiClassReader_Dump(const char *Cmd) { return PM3_ESOFT; } - if (readStatus & (FLAG_ICLASS_READER_CSN | FLAG_ICLASS_READER_CONF | FLAG_ICLASS_READER_CC)) { + if (readStatus & (FLAG_ICLASS_CSN | FLAG_ICLASS_CONF | FLAG_ICLASS_CC)) { memcpy(tag_data, data, 8 * 3); blockno += 2; // 2 to force re-read of block 2 later. (seems to respond differently..) numblks = data[8]; @@ -2927,9 +2930,12 @@ int CmdHFiClass(const char *Cmd) { int readIclass(bool loop, bool verbose) { bool tagFound = false; - uint32_t flags = FLAG_ICLASS_READER_CSN | FLAG_ICLASS_READER_CC | FLAG_ICLASS_READER_AIA | - FLAG_ICLASS_READER_CONF | FLAG_ICLASS_READER_ONLY_ONCE | - FLAG_ICLASS_READER_ONE_TRY; + uint32_t flags = ( + FLAG_ICLASS_READER_INIT | + FLAG_ICLASS_READER_CLEARTRACE | + FLAG_ICLASS_READER_ONLY_ONCE | + FLAG_ICLASS_READER_AIA + ); uint32_t res = PM3_ETIMEOUT; // loop in client not device - else on windows have a communication error @@ -2960,35 +2966,35 @@ int readIclass(bool loop, bool verbose) { PrintAndLogEx(INFO, "--- " _CYAN_("Tag Information") " --------------------------"); PrintAndLogEx(INFO, "-------------------------------------------------------------"); - if (readStatus & FLAG_ICLASS_READER_CSN) { + if (readStatus & FLAG_ICLASS_CSN) { PrintAndLogEx(SUCCESS, " CSN: " _GREEN_("%s") " (uid)", sprint_hex(hdr->csn, sizeof(hdr->csn))); tagFound = true; } - if (readStatus & FLAG_ICLASS_READER_CONF) { + if (readStatus & FLAG_ICLASS_CONF) { PrintAndLogEx(SUCCESS, " Config: %s (Card configuration)", sprint_hex((uint8_t *)&hdr->conf, sizeof(hdr->conf))); } - if (readStatus & FLAG_ICLASS_READER_CC) { + if (readStatus & FLAG_ICLASS_CC) { PrintAndLogEx(SUCCESS, "E-purse: %s (Card challenge, CC)", sprint_hex(hdr->epurse, sizeof(hdr->epurse))); } PrintAndLogEx(SUCCESS, " Kd: %s (Debit key, hidden)", sprint_hex(hdr->key_d, sizeof(hdr->key_d))); PrintAndLogEx(SUCCESS, " Kc: %s (Credit key, hidden)", sprint_hex(hdr->key_c, sizeof(hdr->key_c))); - if (readStatus & FLAG_ICLASS_READER_AIA) { + if (readStatus & FLAG_ICLASS_AIA) { // PrintAndLogEx(INFO, "--------- " _CYAN_("AIA") " ---------"); PrintAndLogEx(SUCCESS, " AIA: %s (Application Issuer area)", sprint_hex(hdr->app_issuer_area, sizeof(hdr->app_issuer_area))); } - if (readStatus & FLAG_ICLASS_READER_CONF) { + if (readStatus & FLAG_ICLASS_CONF) { printIclassDumpInfo(data); } // if CSN ends with FF12E0, it's inside HID CSN range. bool isHidRange = (memcmp((uint8_t *)(data + 5), "\xFF\x12\xE0", 3) == 0); - if (readStatus & FLAG_ICLASS_READER_AIA) { + if (readStatus & FLAG_ICLASS_AIA) { bool legacy = (memcmp((uint8_t *)(data + 8 * 5), "\xff\xff\xff\xff\xff\xff\xff\xff", 8) == 0); bool se_enabled = (memcmp((uint8_t *)(data + 8 * 5), "\xff\xff\xff\x00\x06\xff\xff\xff", 8) == 0); diff --git a/include/pm3_cmd.h b/include/pm3_cmd.h index 0d24d5bae..bf16aaca6 100644 --- a/include/pm3_cmd.h +++ b/include/pm3_cmd.h @@ -579,14 +579,18 @@ typedef struct { #define FLAG_FORCED_ATQA 0x800 #define FLAG_FORCED_SAK 0x1000 -//Iclass reader flags -#define FLAG_ICLASS_READER_ONLY_ONCE 0x01 -#define FLAG_ICLASS_READER_CC 0x02 -#define FLAG_ICLASS_READER_CSN 0x04 -#define FLAG_ICLASS_READER_CONF 0x08 +// iCLASS reader flags +#define FLAG_ICLASS_READER_INIT 0x01 +#define FLAG_ICLASS_READER_CLEARTRACE 0x02 +#define FLAG_ICLASS_READER_ONLY_ONCE 0x04 +#define FLAG_ICLASS_READER_CEDITKEY 0x08 #define FLAG_ICLASS_READER_AIA 0x10 -#define FLAG_ICLASS_READER_ONE_TRY 0x20 -#define FLAG_ICLASS_READER_CEDITKEY 0x40 + +// iCLASS reader status flags +#define FLAG_ICLASS_CSN 0x01 +#define FLAG_ICLASS_CC 0x02 +#define FLAG_ICLASS_CONF 0x04 +#define FLAG_ICLASS_AIA 0x08 // iCLASS simulation modes #define ICLASS_SIM_MODE_CSN 0 diff --git a/include/protocols.h b/include/protocols.h index 682f57eff..18e580b54 100644 --- a/include/protocols.h +++ b/include/protocols.h @@ -135,7 +135,7 @@ ISO 7816-4 Basic interindustry commands. For command APDU's. #define ICLASS_CMD_ACT 0xE #define ICLASS_CREDIT(x) (((x) & 0x10) == 0x10) -#define ICLASS_DEBIT(x) !(ICLASS_CREDIT(x)) +#define ICLASS_DEBIT(x) (((x) & 0x80) == 0x80) #define ISO14443A_CMD_REQA 0x26 From 6948ccff3af42a47a02da7935a6d9f36fcb37d0a Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Mon, 6 Jul 2020 22:33:38 +0200 Subject: [PATCH 0030/1047] fpga iclass... --- armsrc/iclass.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/armsrc/iclass.c b/armsrc/iclass.c index a42cdf8f1..e02975041 100644 --- a/armsrc/iclass.c +++ b/armsrc/iclass.c @@ -922,7 +922,6 @@ void ReaderIClass(uint8_t flags) { if (flag_read_aia) { //Read App Issuer Area block CRC(0x05) => 0xde 0x64 uint8_t read_aa[] = { ICLASS_CMD_READ_OR_IDENTIFY, 0x05, 0xde, 0x64}; - if (sendCmdGetResponseWithRetries(read_aa, sizeof(read_aa), resp, sizeof(resp), 10, 10, start_time, ICLASS_READER_TIMEOUT_OTHERS, &eof_time)) { result_status |= FLAG_ICLASS_AIA; memcpy(card_data + (8 * 5), resp, 8); @@ -993,7 +992,7 @@ void ReaderIClass_Replay(uint8_t arg0, uint8_t *mac) { //for now replay captured auth (as cc not updated) memcpy(check + 5, mac, 4); - if (!sendCmdGetResponseWithRetries(check, sizeof(check), resp, 4, 5)) { + if (sendCmdGetResponseWithRetries(check, sizeof(check), resp, sizeof(resp), 4, 3, 0, ICLASS_READER_TIMEOUT_OTHERS, &eof_time) == false) { DbpString("Error: Authentication Fail!"); continue; } @@ -1002,7 +1001,7 @@ void ReaderIClass_Replay(uint8_t arg0, uint8_t *mac) { read[1] = 1; AddCrc(read + 1, 1); - if (!sendCmdGetResponseWithRetries(read, sizeof(read), resp, 10, 5)) { + if (sendCmdGetResponseWithRetries(read, sizeof(read), resp, sizeof(resp), 10, 3, start_time, ICLASS_READER_TIMEOUT_OTHERS, &eof_time) == false) { DbpString("Dump config (block 1) failed"); continue; } @@ -1028,7 +1027,7 @@ void ReaderIClass_Replay(uint8_t arg0, uint8_t *mac) { read[1] = block; AddCrc(read + 1, 1); - if (sendCmdGetResponseWithRetries(read, sizeof(read), resp, 10, 5)) { + if (sendCmdGetResponseWithRetries(read, sizeof(read), resp, sizeof(resp), 10, 3, start_time, ICLASS_READER_TIMEOUT_OTHERS, &eof_time)) { Dbprintf(" %02x: %02x %02x %02x %02x %02x %02x %02x %02x", block, resp[0], resp[1], resp[2], resp[3], resp[4], resp[5], @@ -1038,6 +1037,7 @@ void ReaderIClass_Replay(uint8_t arg0, uint8_t *mac) { //Fill up the buffer memcpy(card_data + stored_data_length, resp, 8); stored_data_length += 8; + if (stored_data_length + 8 > PM3_CMD_DATA_SIZE) { //Time to send this off and start afresh reply_old(CMD_ACK, @@ -1086,7 +1086,8 @@ void ReaderIClass_Replay(uint8_t arg0, uint8_t *mac) { // turn off afterwards void iClass_ReadCheck(uint8_t blockno, uint8_t keytype) { uint8_t readcheck[] = { keytype, blockno }; - uint8_t resp[] = {0, 0, 0, 0, 0, 0, 0, 0}; + uint8_t resp[8] = {0}; + uint32_t eof_time; bool isOK = sendCmdGetResponseWithRetries(readcheck, sizeof(readcheck), resp, sizeof(resp), 8, 3, 0, ICLASS_READER_TIMEOUT_OTHERS, &eof_time); reply_mix(CMD_ACK, isOK, 0, 0, 0, 0); switch_off(); @@ -1104,9 +1105,8 @@ void iClass_Authentication(uint8_t *mac) { check[7] = mac[2]; check[8] = mac[3]; //memcpy(check+5, mac, 4); - - // 6 retries - uint8_t isOK = sendCmdGetResponseWithRetries(check, sizeof(check), resp, 4, 6); + uint32_t eof_time; + bool isOK = sendCmdGetResponseWithRetries(check, sizeof(check), resp, sizeof(resp), 4, 3, 0, ICLASS_READER_TIMEOUT_OTHERS, &eof_time); reply_ng(CMD_HF_ICLASS_AUTH, PM3_SUCCESS, (uint8_t *)&isOK, sizeof(uint8_t)); } @@ -1187,7 +1187,7 @@ void iClass_Authentication_fast(uint64_t arg0, uint64_t arg1, uint8_t *datain) { check[8] = keys[i].mac[3]; // expect 4bytes, 3 retries times.. - isOK = sendCmdGetResponseWithRetries(check, sizeof(check), resp, 4, 3); + isOK = sendCmdGetResponseWithRetries(check, sizeof(check), resp, sizeof(resp), 4, 3, 0, ICLASS_READER_TIMEOUT_OTHERS, &eof_time); if (isOK) goto out; From 7c15e4b7ff73dce83292858bdf0ee995de2927d9 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Mon, 6 Jul 2020 22:43:11 +0200 Subject: [PATCH 0031/1047] fpga more iclass --- armsrc/iclass.c | 45 +++++++++++++++++++++++++-------------------- 1 file changed, 25 insertions(+), 20 deletions(-) diff --git a/armsrc/iclass.c b/armsrc/iclass.c index e02975041..02b73a2ba 100644 --- a/armsrc/iclass.c +++ b/armsrc/iclass.c @@ -971,6 +971,7 @@ void ReaderIClass_Replay(uint8_t arg0, uint8_t *mac) { uint8_t read[] = { 0x0c, 0x00, 0x00, 0x00 }; uint8_t card_data[PM3_CMD_DATA_SIZE] = {0}; uint8_t resp[ICLASS_BUFFER_SIZE] = {0}; + uint32_t eof_time = 0; static struct memory_t { int k16; @@ -980,8 +981,6 @@ void ReaderIClass_Replay(uint8_t arg0, uint8_t *mac) { int keyaccess; } memory; - setupIclassReader(); - while (!BUTTON_PRESS()) { WDT_HIT(); @@ -993,7 +992,7 @@ void ReaderIClass_Replay(uint8_t arg0, uint8_t *mac) { memcpy(check + 5, mac, 4); if (sendCmdGetResponseWithRetries(check, sizeof(check), resp, sizeof(resp), 4, 3, 0, ICLASS_READER_TIMEOUT_OTHERS, &eof_time) == false) { - DbpString("Error: Authentication Fail!"); + if (DBGLEVEL >= DBG_EXTENDED) DbpString("Error: Authentication Fail!"); continue; } @@ -1002,22 +1001,24 @@ void ReaderIClass_Replay(uint8_t arg0, uint8_t *mac) { AddCrc(read + 1, 1); if (sendCmdGetResponseWithRetries(read, sizeof(read), resp, sizeof(resp), 10, 3, start_time, ICLASS_READER_TIMEOUT_OTHERS, &eof_time) == false) { - DbpString("Dump config (block 1) failed"); + if (DBGLEVEL >= DBG_EXTENDED) DbpString("Dump config (block 1) failed"); continue; } mem = resp[5]; - memory.k16 = (mem & 0x80); - memory.book = (mem & 0x20); - memory.k2 = (mem & 0x8); - memory.lockauth = (mem & 0x2); - memory.keyaccess = (mem & 0x1); + memory.k16 = ((mem & 0x80) == 0x80); + memory.book = ((mem & 0x20) == 0x20); + memory.k2 = ((mem & 0x08) == 0x08); + memory.lockauth = ((mem & 0x02) == 0x02); + memory.keyaccess = ((mem & 0x01) == 0x01); cardsize = memory.k16 ? 255 : 32; WDT_HIT(); - //Set card_data to all zeroes, we'll fill it with data - memset(card_data, 0x0, PM3_CMD_DATA_SIZE); + + // set card_data to 0xFF... + memset(card_data, 0xFF, PM3_CMD_DATA_SIZE); + uint8_t failedRead = 0; uint32_t stored_data_length = 0; @@ -1028,11 +1029,13 @@ void ReaderIClass_Replay(uint8_t arg0, uint8_t *mac) { AddCrc(read + 1, 1); if (sendCmdGetResponseWithRetries(read, sizeof(read), resp, sizeof(resp), 10, 3, start_time, ICLASS_READER_TIMEOUT_OTHERS, &eof_time)) { - Dbprintf(" %02x: %02x %02x %02x %02x %02x %02x %02x %02x", - block, resp[0], resp[1], resp[2], - resp[3], resp[4], resp[5], - resp[6], resp[7] - ); + if (DBGLEVEL >= DBG_EXTENDED) { + Dbprintf(" %02x: %02x %02x %02x %02x %02x %02x %02x %02x", + block, + resp[0], resp[1], resp[2], resp[3], + resp[4], resp[5], resp[6], resp[7] + ); + } //Fill up the buffer memcpy(card_data + stored_data_length, resp, 8); @@ -1054,7 +1057,7 @@ void ReaderIClass_Replay(uint8_t arg0, uint8_t *mac) { } else { failedRead = 1; stored_data_length += 8;//Otherwise, data becomes misaligned - Dbprintf("Failed to dump block %d", block); + if (DBGLEVEL >= DBG_EXTENDED) Dbprintf("Failed to dump block %d", block); } } @@ -1087,7 +1090,7 @@ void ReaderIClass_Replay(uint8_t arg0, uint8_t *mac) { void iClass_ReadCheck(uint8_t blockno, uint8_t keytype) { uint8_t readcheck[] = { keytype, blockno }; uint8_t resp[8] = {0}; - uint32_t eof_time; + uint32_t eof_time = 0; bool isOK = sendCmdGetResponseWithRetries(readcheck, sizeof(readcheck), resp, sizeof(resp), 8, 3, 0, ICLASS_READER_TIMEOUT_OTHERS, &eof_time); reply_mix(CMD_ACK, isOK, 0, 0, 0, 0); switch_off(); @@ -1122,9 +1125,12 @@ typedef struct iclass_premac { * to cover debit and credit key. (AA1/AA2) */ void iClass_Authentication_fast(uint64_t arg0, uint64_t arg1, uint8_t *datain) { + uint8_t i = 0, isOK = 0; + uint8_t lastChunk = ((arg0 >> 8) & 0xFF); bool use_credit_key = ((arg0 >> 16) & 0xFF); + uint8_t keyCount = arg1 & 0xFF; uint8_t check[] = { ICLASS_CMD_CHECK, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; uint8_t resp[ICLASS_BUFFER_SIZE]; @@ -1143,11 +1149,10 @@ void iClass_Authentication_fast(uint64_t arg0, uint64_t arg1, uint8_t *datain) { switch_off(); SpinDelay(20); - setupIclassReader(); - uint16_t checked = 0; int read_status = 0; uint8_t startup_limit = 10; + uint32_t eof_time = 0; while (read_status != 2) { if (checked == 1000) { From 2502d4581b20ff79ebf2054c49ab010527d8e6b7 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Tue, 7 Jul 2020 12:32:56 +0200 Subject: [PATCH 0032/1047] iclass merges --- armsrc/iclass.c | 64 +++++++++++++++++++++++++++---------------------- 1 file changed, 36 insertions(+), 28 deletions(-) diff --git a/armsrc/iclass.c b/armsrc/iclass.c index 02b73a2ba..0fb0a4f53 100644 --- a/armsrc/iclass.c +++ b/armsrc/iclass.c @@ -954,12 +954,13 @@ void ReaderIClass(uint8_t flags) { LED_B_OFF(); } - if (userCancelled) { - reply_mix(CMD_ACK, 0xFF, 0, 0, card_data, 0); - switch_off(); - } else { +// if (userCancelled) { +// reply_mix(CMD_ACK, 0xFF, 0, 0, card_data, 0); +// switch_off(); +// } else { reply_mix(CMD_ACK, 0, 0, 0, card_data, 0); - } +// } + switch_off(); } // turn off afterwards @@ -971,6 +972,8 @@ void ReaderIClass_Replay(uint8_t arg0, uint8_t *mac) { uint8_t read[] = { 0x0c, 0x00, 0x00, 0x00 }; uint8_t card_data[PM3_CMD_DATA_SIZE] = {0}; uint8_t resp[ICLASS_BUFFER_SIZE] = {0}; + + uint32_t start_time = 0; uint32_t eof_time = 0; static struct memory_t { @@ -1108,7 +1111,7 @@ void iClass_Authentication(uint8_t *mac) { check[7] = mac[2]; check[8] = mac[3]; //memcpy(check+5, mac, 4); - uint32_t eof_time; + uint32_t eof_time = 0; bool isOK = sendCmdGetResponseWithRetries(check, sizeof(check), resp, sizeof(resp), 4, 3, 0, ICLASS_READER_TIMEOUT_OTHERS, &eof_time); reply_ng(CMD_HF_ICLASS_AUTH, PM3_SUCCESS, (uint8_t *)&isOK, sizeof(uint8_t)); } @@ -1220,10 +1223,10 @@ out: // retries 10times. static bool iClass_ReadBlock(uint8_t blockno, uint8_t *data) { uint8_t resp[10]; - uint8_t cmd[] = {ICLASS_CMD_READ_OR_IDENTIFY, blockno, 0x00, 0x00}; - AddCrc(cmd + 1, 1); - uint32_t eof_time; - bool isOK = sendCmdGetResponseWithRetries(readcmd, sizeof(readcmd), resp, sizeof(resp), 10, 10, 0, ICLASS_READER_TIMEOUT_OTHERS, &eof_time); + uint8_t c[] = {ICLASS_CMD_READ_OR_IDENTIFY, blockno, 0x00, 0x00}; + AddCrc(c + 1, 1); + uint32_t eof_time = 0; + bool isOK = sendCmdGetResponseWithRetries(c, sizeof(c), resp, sizeof(resp), 10, 10, 0, ICLASS_READER_TIMEOUT_OTHERS, &eof_time); memcpy(data, resp, 8); return isOK; } @@ -1241,44 +1244,49 @@ void iClass_ReadBlk(uint8_t blockno) { switch_off(); reply_ng(CMD_HF_ICLASS_READBL, PM3_SUCCESS, (uint8_t *)&result, sizeof(result)); } + +// Dump command seems to dump a block related portion of card memory. +// I suppose it will need to do an authentatication to AA1, read its blocks by calling this. +// then authenticate AA2, and read those blocks by calling this. +// By the looks at it only 2K cards is supported, or first page dumps on larger cards. +// turn off afterwards +void iClass_Dump(uint8_t start_blockno, uint8_t numblks) { -// turn off afterwards -void iClass_Dump(uint8_t blockno, uint8_t numblks) { - BigBuf_free(); - uint8_t *dataout = BigBuf_malloc(0xFF * 8); + BigBuf_free(); + + uint8_t *dataout = BigBuf_malloc(0xFF * 8); if (dataout == NULL) { - DbpString("[!] fail to allocate memory"); + DbpString("fail to allocate memory"); OnError(1); return; } memset(dataout, 0xFF, 0xFF * 8); - uint8_t blockdata[8] = {0}; - uint8_t blkCnt = 0; bool isOK; - for (; blkCnt < numblks; blkCnt++) { - isOK = iClass_ReadBlock(blockno + blkCnt, blockdata); + uint8_t blkcnt = 0; + for (; blkcnt < numblks; blkcnt++) { + isOK = iClass_ReadBlock(start_blockno + blkcnt, dataout + (8 * blkcnt)); - // 0xBB is the internal debug separator byte.. - if (!isOK || (blockdata[0] == 0xBB || blockdata[7] == 0xBB || blockdata[2] == 0xBB)) { //try again - isOK = iClass_ReadBlock(blockno + blkCnt, blockdata); + if (!isOK) { + isOK = iClass_ReadBlock(start_blockno + blkcnt, dataout + (8 * blkcnt)); if (!isOK) { - Dbprintf("[!] block %02X failed to read", blkCnt + blockno); + Dbprintf("failed to read block %02X", start_blockno + blkcnt); break; } } - memcpy(dataout + (blkCnt * 8), blockdata, 8); } switch_off(); - //return pointer to dump memory in arg3 - reply_mix(CMD_ACK, isOK, blkCnt, BigBuf_max_traceLen(), 0, 0); + + // return pointer to dump memory in arg3 + // iceman: why not return | dataout - getbigbuf ? Should give exact location. + reply_mix(CMD_ACK, isOK, blkcnt, BigBuf_max_traceLen(), 0, 0); BigBuf_free(); } static bool iClass_WriteBlock_ext(uint8_t blockno, uint8_t *data) { - uint8_t write[] = { 0x80 | ICLASS_CMD_UPDATE, blockno, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; + uint8_t write[16] = { 0x80 | ICLASS_CMD_UPDATE, blockno }; memcpy(write + 2, data, 12); // data + mac AddCrc(write + 1, 13); @@ -1292,7 +1300,7 @@ static bool iClass_WriteBlock_ext(uint8_t blockno, uint8_t *data) { uint8_t all_ff[8] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; if (blockno == 2) { // check response. e-purse update swaps first and second half - if (memcmp(data+4, resp, 4) || memcmp(data, resp+4, 4)) { + if (memcmp(data + 4, resp, 4) || memcmp(data, resp + 4, 4)) { return false; } } else if (blockno == 3 || blockno == 4) { From b775b68e4e9a7603169dd55dd6dd86b2bbf59576 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Tue, 7 Jul 2020 13:18:53 +0200 Subject: [PATCH 0033/1047] fpga iclass --- armsrc/appmain.c | 13 ++++++++++-- armsrc/felica.c | 2 +- armsrc/hfsnoop.c | 2 +- armsrc/iclass.c | 53 ++++++++++++++++++++---------------------------- armsrc/iclass.h | 2 ++ 5 files changed, 37 insertions(+), 35 deletions(-) diff --git a/armsrc/appmain.c b/armsrc/appmain.c index a252bbe8e..963d36c78 100644 --- a/armsrc/appmain.c +++ b/armsrc/appmain.c @@ -1048,7 +1048,11 @@ static void PacketReceived(PacketCommandNG *packet) { break; } case CMD_HF_ISO15693_SIMULATE: { - SimTagIso15693(packet->oldarg[0], packet->data.asBytes); + struct p { + uint8_t uid[10]; + } PACKED; + struct p *payload = (struct p *) packet->data.asBytes; + SimTagIso15693(payload->uid); break; } #endif @@ -1376,7 +1380,12 @@ static void PacketReceived(PacketCommandNG *packet) { #ifdef WITH_ICLASS // Makes use of ISO14443a FPGA Firmware case CMD_HF_ICLASS_SNIFF: { - SniffIClass(); + struct p { + uint8_t jam_search_len; + uint8_t jam_search_string[]; + } PACKED; + struct p *payload = (struct p *) packet->data.asBytes; + SniffIClass(payload->jam_search_len, payload->jam_search_string); break; } case CMD_HF_ICLASS_SIMULATE: { diff --git a/armsrc/felica.c b/armsrc/felica.c index d61719c33..944b89ffe 100644 --- a/armsrc/felica.c +++ b/armsrc/felica.c @@ -464,7 +464,7 @@ static void iso18092_setup(uint8_t fpga_minor_mode) { SetAdcMuxFor(GPIO_MUXSEL_HIPKD); // Set up the synchronous serial port - FpgaSetupSsc(); + FpgaSetupSsc(FPGA_MAJOR_MODE_HF_ISO18092); // LSB transfer. Remember to set it back to MSB with AT91C_BASE_SSC->SSC_RFMR = SSC_FRAME_MODE_BITS_IN_WORD(8) | SSC_FRAME_MODE_WORDS_PER_TRANSFER(0); diff --git a/armsrc/hfsnoop.c b/armsrc/hfsnoop.c index e14be0858..1b87d857a 100644 --- a/armsrc/hfsnoop.c +++ b/armsrc/hfsnoop.c @@ -119,7 +119,7 @@ void HfPlotDownload(void) { FpgaDownloadAndGo(FPGA_BITSTREAM_HF); - FpgaSetupSsc(); + FpgaSetupSsc(FPGA_MAJOR_MODE_HF_GET_TRACE); AT91C_BASE_PDC_SSC->PDC_PTCR = AT91C_PDC_RXTDIS; // Disable DMA Transfer AT91C_BASE_PDC_SSC->PDC_RPR = (uint32_t) this_buf; // start transfer to this memory address diff --git a/armsrc/iclass.c b/armsrc/iclass.c index 0fb0a4f53..99976566c 100644 --- a/armsrc/iclass.c +++ b/armsrc/iclass.c @@ -56,9 +56,6 @@ #include "ticks.h" #include "iso15693.h" -static int SendIClassAnswer(uint8_t *resp, int respLen, uint16_t delay); -int doIClassSimulation(int simulationMode, uint8_t *reader_mac_buf); - // The length of a received command will in most cases be no more than 18 bytes. // we expect max 34 bytes as tag answer (response to READ4) #ifndef ICLASS_BUFFER_SIZE @@ -808,7 +805,7 @@ static bool sendCmdGetResponseWithRetries(uint8_t* command, size_t cmdsize, uint * @return false = fail * true = Got all. */ -static bool selectIclassTag(uint8_t *card_data, bool use_credit_key, uint32_t *eof_time) { +static bool select_iclass_tag(uint8_t *card_data, bool use_credit_key, uint32_t *eof_time) { static uint8_t act_all[] = { ICLASS_CMD_ACTALL }; static uint8_t identify[] = { ICLASS_CMD_READ_OR_IDENTIFY, 0x00, 0x73, 0x33 }; @@ -909,7 +906,7 @@ void ReaderIClass(uint8_t flags) { uint32_t start_time = 0; uint32_t eof_time = 0; - int read_status = selectIclassTag(card_data, use_credit_key, &eof_time); + int read_status = select_iclass_tag(card_data, use_credit_key, &eof_time); if (read_status == 0) { reply_mix(CMD_ACK, 0xFF, 0, 0, card_data, 0); switch_off(); @@ -973,8 +970,7 @@ void ReaderIClass_Replay(uint8_t arg0, uint8_t *mac) { uint8_t card_data[PM3_CMD_DATA_SIZE] = {0}; uint8_t resp[ICLASS_BUFFER_SIZE] = {0}; - uint32_t start_time = 0; - uint32_t eof_time = 0; + bool use_credit_key = false; static struct memory_t { int k16; @@ -984,12 +980,14 @@ void ReaderIClass_Replay(uint8_t arg0, uint8_t *mac) { int keyaccess; } memory; - while (!BUTTON_PRESS()) { + uint32_t start_time = 0; + uint32_t eof_time = 0; + while (BUTTON_PRESS() == false) { WDT_HIT(); - uint8_t read_status = handshakeIclassTag(card_data); - if (read_status < 2) continue; + bool read_status = select_iclass_tag(card_data, use_credit_key, &eof_time); + if (read_status == false) continue; //for now replay captured auth (as cc not updated) memcpy(check + 5, mac, 4); @@ -1130,7 +1128,6 @@ typedef struct iclass_premac { void iClass_Authentication_fast(uint64_t arg0, uint64_t arg1, uint8_t *datain) { uint8_t i = 0, isOK = 0; - uint8_t lastChunk = ((arg0 >> 8) & 0xFF); bool use_credit_key = ((arg0 >> 16) & 0xFF); @@ -1152,28 +1149,21 @@ void iClass_Authentication_fast(uint64_t arg0, uint64_t arg1, uint8_t *datain) { switch_off(); SpinDelay(20); - uint16_t checked = 0; - int read_status = 0; - uint8_t startup_limit = 10; + + bool read_status = false; + uint32_t start_time = 0; uint32_t eof_time = 0; - while (read_status != 2) { + uint8_t tries = 10; + while (tries-- > 0 || read_status == false) { + read_status = select_iclass_tag(card_data, use_credit_key, &eof_time); + } - if (checked == 1000) { - if (BUTTON_PRESS() || !data_available()) goto out; - checked = 0; - } - ++checked; + // failed to select card 10 times. return fail to client + if (read_status == false) + goto out; - read_status = handshakeIclassTag_ext(card_data, use_credit_key); - if (startup_limit-- == 0) { - Dbprintf("[-] Handshake status | %d (fail 10)", read_status); - isOK = 99; - goto out; - } - }; - // since handshakeIclassTag_ext call sends s readcheck, we start with sending first response. - - checked = 0; + // since select_iclass_tag call sends s readcheck, we start with sending first response. + uint16_t checked = 0; // Keychunk loop for (i = 0; i < keyCount; i++) { @@ -1199,9 +1189,10 @@ void iClass_Authentication_fast(uint64_t arg0, uint64_t arg1, uint8_t *datain) { if (isOK) goto out; + start_time = eof_time + DELAY_ICLASS_VICC_TO_VCD_READER; // Auth Sequence MUST begin with reading e-purse. (block2) // Card selected, now read e-purse (cc) (block2) (only 8 bytes no CRC) - ReaderTransmitIClass(readcheck_cc, sizeof(readcheck_cc)); + ReaderTransmitIClass(readcheck_cc, sizeof(readcheck_cc), &start_time); LED_B_OFF(); } diff --git a/armsrc/iclass.h b/armsrc/iclass.h index 6ce23ceb7..20a862535 100644 --- a/armsrc/iclass.h +++ b/armsrc/iclass.h @@ -25,4 +25,6 @@ void iClass_Dump(uint8_t blockno, uint8_t numblks); void iClass_Clone(uint8_t startblock, uint8_t endblock, uint8_t *data); void iClass_ReadCheck(uint8_t blockno, uint8_t keytype); + +int doIClassSimulation(int simulationMode, uint8_t *reader_mac_buf); #endif From fef3a764ae856b806b2231cdf6556ae6f216eb1c Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Tue, 7 Jul 2020 15:36:51 +0200 Subject: [PATCH 0034/1047] chg: hf mf decrypt - helptext (thanks @AdamLaurie) --- client/src/cmdhfmf.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/src/cmdhfmf.c b/client/src/cmdhfmf.c index c8ab85b14..1b458e6e0 100644 --- a/client/src/cmdhfmf.c +++ b/client/src/cmdhfmf.c @@ -307,13 +307,13 @@ static int usage_hf14_decryptbytes(void) { PrintAndLogEx(NORMAL, "Usage: hf mf decrypt [h] "); PrintAndLogEx(NORMAL, "Options:"); PrintAndLogEx(NORMAL, " h this help"); - PrintAndLogEx(NORMAL, " reader nonce"); + PrintAndLogEx(NORMAL, " tag nonce"); PrintAndLogEx(NORMAL, " encrypted reader response"); PrintAndLogEx(NORMAL, " encrypted tag response"); PrintAndLogEx(NORMAL, " encrypted data, taken directly after at_enc and forward"); PrintAndLogEx(NORMAL, "Examples:"); PrintAndLogEx(NORMAL, _YELLOW_(" hf mf decrypt b830049b 9248314a 9280e203 41e586f9")); - PrintAndLogEx(NORMAL, "\n this sample decrypts 41e586f9 -> 3003999a Annotated: 30 03 [99 9a] auth block 3 [crc]"); + PrintAndLogEx(NORMAL, "\n this sample decrypts 41e586f9 -> 3003999a Annotated: 30 03 [99 9a] read block 3 [crc]"); return PM3_SUCCESS; } From ce24e6acbbc754a4c56a26dc4920f34199356b9b Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 8 Jul 2020 09:45:49 +0200 Subject: [PATCH 0035/1047] fpga merge hell, all compiles --- armsrc/appmain.c | 9 +++++++-- armsrc/iso15693.h | 2 +- client/src/cmdhf15.c | 7 +++---- include/pm3_cmd.h | 2 +- 4 files changed, 12 insertions(+), 8 deletions(-) diff --git a/armsrc/appmain.c b/armsrc/appmain.c index 963d36c78..2ed5811fa 100644 --- a/armsrc/appmain.c +++ b/armsrc/appmain.c @@ -1031,8 +1031,13 @@ static void PacketReceived(PacketCommandNG *packet) { AcquireRawAdcSamplesIso15693(); break; } - case CMD_HF_ISO15693_RAWADC: { - RecordRawAdcSamplesIso15693(); + case CMD_HF_ISO15693_SNIFF: { + struct p { + uint8_t jam_search_len; + uint8_t jam_search_string[]; + } PACKED; + struct p *payload = (struct p *) packet->data.asBytes; + SniffIso15693(payload->jam_search_len, payload->jam_search_string); break; } case CMD_HF_ISO15693_COMMAND: { diff --git a/armsrc/iso15693.h b/armsrc/iso15693.h index 1b5405b13..fcca9491c 100644 --- a/armsrc/iso15693.h +++ b/armsrc/iso15693.h @@ -33,7 +33,7 @@ int GetIso15693CommandFromReader(uint8_t *received, size_t max_len, uint32_t *eo void TransmitTo15693Tag(const uint8_t *cmd, int len, uint32_t *start_time); int GetIso15693AnswerFromTag(uint8_t* response, uint16_t max_len, uint16_t timeout, uint32_t *eof_time); -void RecordRawAdcSamplesIso15693(void); +//void RecordRawAdcSamplesIso15693(void); void AcquireRawAdcSamplesIso15693(void); void ReaderIso15693(uint32_t parameter); // Simulate an ISO15693 reader - greg void SimTagIso15693(uint8_t *uid); // simulate an ISO15693 tag - greg diff --git a/client/src/cmdhf15.c b/client/src/cmdhf15.c index 2b8812d33..ad69d5615 100644 --- a/client/src/cmdhf15.c +++ b/client/src/cmdhf15.c @@ -973,12 +973,12 @@ static int CmdHF15Info(const char *Cmd) { // Record Activity without enabling carrier //helptext -static int CmdHF15Record(const char *Cmd) { +static int CmdHF15Sniff(const char *Cmd) { char cmdp = tolower(param_getchar(Cmd, 0)); if (cmdp == 'h') return usage_15_record(); clearCommandBuffer(); - SendCommandNG(CMD_HF_ISO15693_RAWADC, NULL, 0); + SendCommandNG(CMD_HF_ISO15693_SNIFF, NULL, 0); return PM3_SUCCESS; } @@ -1841,9 +1841,8 @@ static command_t CommandTable[] = { {"demod", CmdHF15Demod, AlwaysAvailable, "Demodulate ISO15693 from tag"}, {"dump", CmdHF15Dump, IfPm3Iso15693, "Read all memory pages of an ISO15693 tag, save to file"}, {"info", CmdHF15Info, IfPm3Iso15693, "Tag information"}, -// {"sniff", CmdHF15Sniff, IfPm3Iso15693, "Sniff ISO15693 traffic"}, + {"sniff", CmdHF15Sniff, IfPm3Iso15693, "Sniff ISO15693 traffic"}, {"raw", CmdHF15Raw, IfPm3Iso15693, "Send raw hex data to tag"}, - {"record", CmdHF15Record, IfPm3Iso15693, "Record Samples (ISO15693)"}, {"read", CmdHF15Read, IfPm3Iso15693, "Read a block"}, {"reader", CmdHF15Reader, IfPm3Iso15693, "Act like an ISO15693 reader"}, {"readmulti", CmdHF15Readmulti, IfPm3Iso15693, "Reads multiple Blocks"}, diff --git a/include/pm3_cmd.h b/include/pm3_cmd.h index bf16aaca6..492eca798 100644 --- a/include/pm3_cmd.h +++ b/include/pm3_cmd.h @@ -431,7 +431,7 @@ typedef struct { #define CMD_HF_ISO14443B_COMMAND 0x0305 #define CMD_HF_ISO15693_READER 0x0310 #define CMD_HF_ISO15693_SIMULATE 0x0311 -#define CMD_HF_ISO15693_RAWADC 0x0312 +#define CMD_HF_ISO15693_SNIFF 0x0312 #define CMD_HF_ISO15693_COMMAND 0x0313 #define CMD_HF_ISO15693_FINDAFI 0x0315 #define CMD_LF_SNIFF_RAW_ADC 0x0317 From 0d4c537eded79faa9e46b2efa6910ad7be8ae519 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 8 Jul 2020 11:05:04 +0200 Subject: [PATCH 0036/1047] version info for FeliCa fpga image --- tools/fpga_compress/fpga_compress.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/tools/fpga_compress/fpga_compress.c b/tools/fpga_compress/fpga_compress.c index b03caabf4..5da59f2db 100644 --- a/tools/fpga_compress/fpga_compress.c +++ b/tools/fpga_compress/fpga_compress.c @@ -50,10 +50,13 @@ static int zlib_compress(FILE *infile[], uint8_t num_infiles, FILE *outfile) { if (total_size >= num_infiles * FPGA_CONFIG_SIZE) { fprintf(stderr, "Input files too big (total > %li bytes). These are probably not PM3 FPGA config files.\n" - , num_infiles * FPGA_CONFIG_SIZE); + , num_infiles * FPGA_CONFIG_SIZE + ); + for (uint16_t j = 0; j < num_infiles; j++) { fclose(infile[j]); } + free(fpga_config); return (EXIT_FAILURE); } @@ -188,8 +191,10 @@ static int zlib_decompress(FILE *infile, FILE *outfile) { * length. */ static int bitparse_find_section(FILE *infile, char section_name, unsigned int *section_length) { - int result = 0; + #define MAX_FPGA_BIT_STREAM_HEADER_SEARCH 100 // maximum number of bytes to search for the requested section + + int result = 0; uint16_t numbytes = 0; while (numbytes < MAX_FPGA_BIT_STREAM_HEADER_SEARCH) { char current_name = (char)fgetc(infile); @@ -252,6 +257,8 @@ static int FpgaGatherVersion(FILE *infile, char *infile_name, char *dst, int len strncat(dst, "LF", len - strlen(dst) - 1); else if (!memcmp("fpga_hf", basename(infile_name), 7)) strncat(dst, "HF", len - strlen(dst) - 1); + else if (!memcmp("fpga_felica", basename(infile_name), 7)) + strncat(dst, "HF FeliCa", len - strlen(dst) - 1); strncat(dst, " image built", len - strlen(dst) - 1); if (bitparse_find_section(infile, 'b', &fpga_info_len)) { From 2a30f3b1657bde7bbeeb6695f66d8908d13dd513 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 8 Jul 2020 11:05:54 +0200 Subject: [PATCH 0037/1047] fgpa felica --- armsrc/fpgaloader.c | 4 +++- armsrc/fpgaloader.h | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/armsrc/fpgaloader.c b/armsrc/fpgaloader.c index 8313404bf..f76d1a189 100644 --- a/armsrc/fpgaloader.c +++ b/armsrc/fpgaloader.c @@ -351,8 +351,10 @@ static void DownloadFPGA(int bitstream_version, int FpgaImageLen, lz4_streamp co * length. */ static int bitparse_find_section(int bitstream_version, char section_name, uint32_t *section_length, lz4_streamp compressed_fpga_stream, uint8_t *output_buffer) { - int result = 0; + #define MAX_FPGA_BIT_STREAM_HEADER_SEARCH 100 // maximum number of bytes to search for the requested section + + int result = 0; uint16_t numbytes = 0; while (numbytes < MAX_FPGA_BIT_STREAM_HEADER_SEARCH) { char current_name = get_from_fpga_stream(bitstream_version, compressed_fpga_stream, output_buffer); diff --git a/armsrc/fpgaloader.h b/armsrc/fpgaloader.h index 17bd8bbc2..530dc21b4 100644 --- a/armsrc/fpgaloader.h +++ b/armsrc/fpgaloader.h @@ -20,6 +20,7 @@ // definitions for multiple FPGA config files support #define FPGA_BITSTREAM_LF 1 #define FPGA_BITSTREAM_HF 2 +#define FPGA_BITSTREAM_HF_FELICA 3 /* Communication between ARM / FPGA is done inside armsrc/fpgaloader.c (function FpgaSendCommand) From aa0baa26c664919b10ef0b161faf02b4184bb84b Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 8 Jul 2020 11:09:20 +0200 Subject: [PATCH 0038/1047] fix: missing define on some mingw --- client/src/proxmark3.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/client/src/proxmark3.c b/client/src/proxmark3.c index e0dafe480..1b790f946 100644 --- a/client/src/proxmark3.c +++ b/client/src/proxmark3.c @@ -727,6 +727,10 @@ static bool DetectWindowsAnsiSupport(void) { RegCloseKey(hKey); } +#ifndef ENABLE_VIRTUAL_TERMINAL_PROCESSING +#define ENABLE_VIRTUAL_TERMINAL_PROCESSING 0x0004 +#endif + HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); DWORD dwMode = 0; GetConsoleMode(hOut, &dwMode); From b6c7b38ce0e9d8eafb1f5e9e73823bfd74770c27 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 8 Jul 2020 11:11:14 +0200 Subject: [PATCH 0039/1047] textual --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index a45b7f033..ff2f53bfe 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ All notable changes to this project will be documented in this file. This project uses the changelog in accordance with [keepchangelog](http://keepachangelog.com/). Please use this to write notable changes, which is not the same as git commit log... ## [unreleased][unreleased] + - Fix missing define on proxspace (@mwalker33) - Added `lf em 4x50_dump` (@iceman1001) - Added `lf em 4x50_read` (@tharexde) - Added `lf em 4x50_info` (@tharexde) From 584fe52153b43c04b5ec4bee4bea22ed9bf0d621 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 8 Jul 2020 13:41:38 +0200 Subject: [PATCH 0040/1047] lf t55 configblock detection updated --- client/Makefile | 1 + client/src/cmdlf.c | 6 +++++- client/src/cmdlft55xx.c | 18 +++++++++++++---- client/src/cmdlft55xx.h | 40 +++++++++++++++++++++++--------------- client/src/cmdlfverichip.c | 15 +++++++------- 5 files changed, 51 insertions(+), 29 deletions(-) diff --git a/client/Makefile b/client/Makefile index a4e8b193d..8943915bb 100644 --- a/client/Makefile +++ b/client/Makefile @@ -461,6 +461,7 @@ SRCS = aidsearch.c \ cmdlfsecurakey.c \ cmdlft55xx.c \ cmdlfti.c \ + cmdlfverichip.c \ cmdlfviking.c \ cmdlfvisa2000.c \ cmdmain.c \ diff --git a/client/src/cmdlf.c b/client/src/cmdlf.c index 389d18dad..eb8c4ce5b 100644 --- a/client/src/cmdlf.c +++ b/client/src/cmdlf.c @@ -55,6 +55,7 @@ #include "cmdlfkeri.h" // for keri menu #include "cmdlfmotorola.h" // for Motorola menu #include "cmdlfgallagher.h" // for GALLAGHER menu +#include "cmdlfverichip.h" // for VERICHIP menu static bool g_lf_threshold_set = false; @@ -1286,6 +1287,8 @@ int CmdLFfind(const char *Cmd) { } } + if (demodVisa2k() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("Visa2000 ID") " found!"); goto out;} + if (demodVerichip() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("VERICHIP ID") " found!"); goto out;} if (demodHID() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("HID Prox ID") " found!"); goto out;} if (demodAWID() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("AWID ID") " found!"); goto out;} if (demodIOProx() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("IO Prox ID") " found!"); goto out;} @@ -1308,8 +1311,8 @@ int CmdLFfind(const char *Cmd) { if (demodPyramid() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("Pyramid ID") " found!"); goto out;} if (demodSecurakey() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("Securakey ID") " found!"); goto out;} if (demodViking() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("Viking ID") " found!"); goto out;} - if (demodVisa2k() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("Visa2000 ID") " found!"); goto out;} if (demodGallagher() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("GALLAGHER ID") " found!"); goto out;} + // if (demodTI() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("Texas Instrument ID") " found!"); goto out;} //if (demodFermax() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("Fermax ID") " found!"); goto out;} @@ -1390,6 +1393,7 @@ static command_t CommandTable[] = { {"securakey", CmdLFSecurakey, AlwaysAvailable, "{ Securakey RFIDs... }"}, {"ti", CmdLFTI, AlwaysAvailable, "{ TI CHIPs... }"}, {"t55xx", CmdLFT55XX, AlwaysAvailable, "{ T55xx CHIPs... }"}, + {"verichip", CmdLFVerichip, AlwaysAvailable, "{ VERICHIP RFIDs... }"}, {"viking", CmdLFViking, AlwaysAvailable, "{ Viking RFIDs... }"}, {"visa2000", CmdLFVisa2k, AlwaysAvailable, "{ Visa2000 RFIDs... }"}, {"", CmdHelp, AlwaysAvailable, ""}, diff --git a/client/src/cmdlft55xx.c b/client/src/cmdlft55xx.c index b2f048665..5607b52a5 100644 --- a/client/src/cmdlft55xx.c +++ b/client/src/cmdlft55xx.c @@ -2044,11 +2044,12 @@ static void printT5x7KnownBlock0(uint32_t b0) { case T55X7_EM_UNIQUE_CONFIG_BLOCK: snprintf(s + strlen(s), sizeof(s) - strlen(s), "EM unique, Paxton "); break; + case T55X7_FDXB_2_CONFIG_BLOCK: case T55X7_FDXB_CONFIG_BLOCK: snprintf(s + strlen(s), sizeof(s) - strlen(s), "FDXB "); break; case T55X7_HID_26_CONFIG_BLOCK: - snprintf(s + strlen(s), sizeof(s) - strlen(s), "HID 26b (ProxCard) "); + snprintf(s + strlen(s), sizeof(s) - strlen(s), "HID 26b (ProxCard), Paradox "); break; case T55X7_PYRAMID_CONFIG_BLOCK: snprintf(s + strlen(s), sizeof(s) - strlen(s), "Pyramid "); @@ -2080,6 +2081,15 @@ static void printT5x7KnownBlock0(uint32_t b0) { case T55X7_NEDAP_128_CONFIG_BLOCK: snprintf(s + strlen(s), sizeof(s) - strlen(s), "Nedap 128 "); break; + case T55X7_PAC_CONFIG_BLOCK: + snprintf(s + strlen(s), sizeof(s) - strlen(s), "PAC "); + break; + case T55X7_VERICHIP_CONFIG_BLOCK: + snprintf(s + strlen(s), sizeof(s) - strlen(s), "Verichip "); + break; + case T55X7_VISA2000_CONFIG_BLOCK: + snprintf(s + strlen(s), sizeof(s) - strlen(s), "VISA2000 "); + break; default: break; } @@ -2224,11 +2234,11 @@ static int CmdT55xxInfo(const char *Cmd) { PrintAndLogEx(NORMAL, " POR-Delay : %s", (por) ? _GREEN_("Yes") : "No"); } PrintAndLogEx(NORMAL, "-------------------------------------------------------------"); - PrintAndLogEx(NORMAL, " Raw Data - Page 0"); + PrintAndLogEx(NORMAL, " Raw Data - Page 0, block 0"); if (gotdata) - PrintAndLogEx(NORMAL, " Block 0 : 0x%08X", block0); + PrintAndLogEx(NORMAL, " 0x" _GREEN_("%08X"), block0); else - PrintAndLogEx(NORMAL, " Block 0 : 0x%08X %s", block0, sprint_bin(DemodBuffer + config.offset, 32)); + PrintAndLogEx(NORMAL, " 0x" _GREEN_("%08X") " %s", block0, sprint_bin(DemodBuffer + config.offset, 32)); if (((!gotdata) && (!config.Q5)) || (gotdata && (!dataasq5))) printT5x7KnownBlock0(block0); diff --git a/client/src/cmdlft55xx.h b/client/src/cmdlft55xx.h index 7074124e6..5e84a85c4 100644 --- a/client/src/cmdlft55xx.h +++ b/client/src/cmdlft55xx.h @@ -25,28 +25,36 @@ // config blocks #define T55X7_DEFAULT_CONFIG_BLOCK 0x000880E8 // ASK, compat mode, data rate 32, manchester, STT, 7 data blocks #define T55X7_RAW_CONFIG_BLOCK 0x000880E0 // ASK, compat mode, data rate 32, manchester, 7 data blocks -#define T55X7_EM_UNIQUE_CONFIG_BLOCK 0x00148040 // ASK, emulate em4x02/unique - compat mode, manchester, data rate 64, 2 data blocks -#define T55X7_EM_PAXTON_CONFIG_BLOCK 0x00148040 // ASK, emulate em4x02/paxton - compat mode, manchester, data rate 64, 2 data blocks +#define T55X7_EM_UNIQUE_CONFIG_BLOCK 0x00148040 // ASK, EM4x02/unique - compat mode, manchester, data rate 64, 2 data blocks +#define T55X7_EM_PAXTON_CONFIG_BLOCK 0x00148040 // ASK, EM4x02/paxton - compat mode, manchester, data rate 64, 2 data blocks +#define T55X7_VISA2000_CONFIG_BLOCK 0x00148068 // ASK, data raet +#define T55X7_VIKING_CONFIG_BLOCK 0x00088040 // ASK, compat mode, data rate 32, Manchester, 2 data blocks +#define T55X7_NORALYS_CONFIG_BLOCK 0x00088C6A // ASK, compat mode, (NORALYS - KCP3000), data rate 32, 3 data blocks +#define T55X7_PRESCO_CONFIG_BLOCK 0x00088088 // ASK, data rate 32, Manchester, 4 data blocks, STT + // FDXB requires data inversion and BiPhase 57 is simply BiPhase 50 inverted, so we can either do it using the modulation scheme or the inversion flag // we've done both below to prove that it works either way, and the modulation value for BiPhase 50 in the Atmel data sheet of binary "10001" (17) is a typo, // and it should actually be "10000" (16) -// #define T55X7_FDXB_CONFIG_BLOCK 0x903F8080 // emulate fdx-b - xtended mode, BiPhase ('57), data rate 32, 4 data blocks -#define T55X7_FDXB_CONFIG_BLOCK 0x903F0082 // emulate fdx-b - xtended mode, BiPhase ('50), invert data, data rate 32, 4 data blocks -#define T55X7_HID_26_CONFIG_BLOCK 0x00107060 // hid 26 bit - compat mode, FSK2a, data rate 50, 3 data blocks -#define T55X7_PYRAMID_CONFIG_BLOCK 0x00107080 // Pyramid 26 bit - compat mode, FSK2a, data rate 50, 4 data blocks -#define T55X7_INDALA_64_CONFIG_BLOCK 0x00081040 // emulate indala 64 bit - compat mode, PSK1, psk carrier FC * 2, data rate 32, maxblock 2 -#define T55X7_INDALA_224_CONFIG_BLOCK 0x000810E0 // emulate indala 224 bit - compat mode, PSK1, psk carrier FC * 2, data rate 32, maxblock 7 -#define T55X7_GUARDPROXII_CONFIG_BLOCK 0x00150060 // bitrate 64pcb, Direct modulation, Biphase, 3 data blocks -#define T55X7_VIKING_CONFIG_BLOCK 0x00088040 // ASK, compat mode, data rate 32, Manchester, 2 data blocks -#define T55X7_NORALYS_CONFIG_BLOCK 0x00088C6A // ASK, compat mode, (NORALYS - KCP3000), 3 data blocks -#define T55X7_IOPROX_CONFIG_BLOCK 0x00147040 // ioprox - FSK2a, data rate 64, 2 data blocks -#define T55X7_PRESCO_CONFIG_BLOCK 0x00088088 // ASK, data rate 32, Manchester, 4 data blocks, STT -#define T55X7_NEDAP_64_CONFIG_BLOCK 0x907f0042 // BiPhase, data rate 64, 2 data blocks -#define T55X7_NEDAP_128_CONFIG_BLOCK 0x907f0082 // BiPhase, data rate 64, 4 data blocks +// #define T55X7_FDXB_CONFIG_BLOCK 0x903F8080 // BiPhase, fdx-b - xtended mode, BiPhase ('57), data rate 32, 4 data blocks +#define T55X7_FDXB_CONFIG_BLOCK 0x903F0082 // BiPhase, fdx-b - xtended mode, BiPhase ('50), invert data, data rate 32, 4 data blocks +#define T55X7_FDXB_2_CONFIG_BLOCK 0x00098080 // + +#define T55X7_HID_26_CONFIG_BLOCK 0x00107060 // FSK2a, hid 26 bit - compat mode, data rate 50, 3 data blocks +#define T55X7_PARADOX_CONFIG_BLOCK 0x00107060 // FSK2a, hid 26 bit - compat mode, data rate 50, 3 data blocks +#define T55X7_PYRAMID_CONFIG_BLOCK 0x00107080 // FSK2a, Pyramid 26 bit - compat mode, data rate 50, 4 data blocks +#define T55X7_INDALA_64_CONFIG_BLOCK 0x00081040 // PSK1, indala 64 bit - compat mode, psk carrier FC * 2, data rate 32, maxblock 2 +#define T55X7_INDALA_224_CONFIG_BLOCK 0x000810E0 // PSK1, indala 224 bit - compat mode, psk carrier FC * 2, data rate 32, maxblock 7 +#define T55X7_IOPROX_CONFIG_BLOCK 0x00147040 // FSK2a, data rate 64, 2 data blocks +#define T55X7_GUARDPROXII_CONFIG_BLOCK 0x00150060 // Biphase, data rate 64, Direct modulation, 3 data blocks +#define T55X7_NEDAP_64_CONFIG_BLOCK 0x907f0042 // BiPhase, data rate 64, 2 data blocks +#define T55X7_NEDAP_128_CONFIG_BLOCK 0x907f0082 // BiPhase, data rate 64, 4 data blocks + +#define T55X7_PAC_CONFIG_BLOCK 0x00080080 // NRZ, data rate 32, 4 data blocks +#define T55X7_VERICHIP_CONFIG_BLOCK 0x000C0080 // NRZ, data rate 40, 4 data blocks #define T55X7_bin 0b0010 -#define T5555_DEFAULT_CONFIG_BLOCK 0x6001F004 // data rate 64 , ask, manchester, 2 data blocks? +#define T5555_DEFAULT_CONFIG_BLOCK 0x6001F004 // ASK, data rate 64, manchester, 2 data blocks? typedef enum { T55x7_RAW = 0x00, T55x7_DEFAULT = 0x00, diff --git a/client/src/cmdlfverichip.c b/client/src/cmdlfverichip.c index 0eec31bf1..ee2de0846 100644 --- a/client/src/cmdlfverichip.c +++ b/client/src/cmdlfverichip.c @@ -39,9 +39,13 @@ static int usage_lf_verichip_clone(void) { //see NRZDemod for what args are accepted static int CmdVerichipDemod(const char *Cmd) { + (void)Cmd; + return demodVerichip(); +} +int demodVerichip(void) { //NRZ - if (NRZrawDemod(Cmd, false) != PM3_SUCCESS) { + if (NRZrawDemod("", false) != PM3_SUCCESS) { PrintAndLogEx(DEBUG, "DEBUG: Error - VERICHIP: NRZ Demod failed"); return PM3_ESOFT; } @@ -154,20 +158,15 @@ int CmdLFVerichip(const char *Cmd) { return CmdsParse(CommandTable, Cmd); } -// by marshmellow -// find PAC preamble in already demoded data +// find VERICHIP preamble in already demoded data int detectVerichip(uint8_t *dest, size_t *size) { if (*size < 128) return -1; //make sure buffer has data size_t startIdx = 0; uint8_t preamble[] = {1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0}; if (!preambleSearch(dest, preamble, sizeof(preamble), size, &startIdx)) return -2; //preamble not found - if (*size != 128) return -3; //wrong demoded size + if (*size < 128) return -3; //wrong demoded size //return start position return (int)startIdx; } -int demodVerichip(void) { - return CmdVerichipDemod(""); -} - From 3fdd4f343b210e1efdcfee3ea2d46352e5a9ac9b Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 8 Jul 2020 13:42:37 +0200 Subject: [PATCH 0041/1047] textual --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ff2f53bfe..492c67794 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,8 @@ All notable changes to this project will be documented in this file. This project uses the changelog in accordance with [keepchangelog](http://keepachangelog.com/). Please use this to write notable changes, which is not the same as git commit log... ## [unreleased][unreleased] + - Readded verichip command which seems missing (@iceman1001) + - Fix missing t55x7 config block detection (@iceman1001) - Fix missing define on proxspace (@mwalker33) - Added `lf em 4x50_dump` (@iceman1001) - Added `lf em 4x50_read` (@tharexde) From 2fcc9b07efdb0073bf3a76705c33de65534589ac Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 8 Jul 2020 17:37:01 +0200 Subject: [PATCH 0042/1047] disable verichip stuff. should be inside FDX already --- client/Makefile | 1 - client/src/cmdlf.c | 3 - client/src/cmdlfpac.c | 27 +++-- client/src/cmdlfverichip_disabled.c | 172 ++++++++++++++++++++++++++++ client/src/cmdlfverichip_disabled.h | 19 +++ 5 files changed, 206 insertions(+), 16 deletions(-) create mode 100644 client/src/cmdlfverichip_disabled.c create mode 100644 client/src/cmdlfverichip_disabled.h diff --git a/client/Makefile b/client/Makefile index 8943915bb..a4e8b193d 100644 --- a/client/Makefile +++ b/client/Makefile @@ -461,7 +461,6 @@ SRCS = aidsearch.c \ cmdlfsecurakey.c \ cmdlft55xx.c \ cmdlfti.c \ - cmdlfverichip.c \ cmdlfviking.c \ cmdlfvisa2000.c \ cmdmain.c \ diff --git a/client/src/cmdlf.c b/client/src/cmdlf.c index eb8c4ce5b..3daf91e2f 100644 --- a/client/src/cmdlf.c +++ b/client/src/cmdlf.c @@ -55,7 +55,6 @@ #include "cmdlfkeri.h" // for keri menu #include "cmdlfmotorola.h" // for Motorola menu #include "cmdlfgallagher.h" // for GALLAGHER menu -#include "cmdlfverichip.h" // for VERICHIP menu static bool g_lf_threshold_set = false; @@ -1288,7 +1287,6 @@ int CmdLFfind(const char *Cmd) { } if (demodVisa2k() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("Visa2000 ID") " found!"); goto out;} - if (demodVerichip() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("VERICHIP ID") " found!"); goto out;} if (demodHID() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("HID Prox ID") " found!"); goto out;} if (demodAWID() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("AWID ID") " found!"); goto out;} if (demodIOProx() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("IO Prox ID") " found!"); goto out;} @@ -1393,7 +1391,6 @@ static command_t CommandTable[] = { {"securakey", CmdLFSecurakey, AlwaysAvailable, "{ Securakey RFIDs... }"}, {"ti", CmdLFTI, AlwaysAvailable, "{ TI CHIPs... }"}, {"t55xx", CmdLFT55XX, AlwaysAvailable, "{ T55xx CHIPs... }"}, - {"verichip", CmdLFVerichip, AlwaysAvailable, "{ VERICHIP RFIDs... }"}, {"viking", CmdLFViking, AlwaysAvailable, "{ Viking RFIDs... }"}, {"visa2000", CmdLFVisa2k, AlwaysAvailable, "{ Visa2000 RFIDs... }"}, {"", CmdHelp, AlwaysAvailable, ""}, diff --git a/client/src/cmdlfpac.c b/client/src/cmdlfpac.c index 10365358e..f162b7342 100644 --- a/client/src/cmdlfpac.c +++ b/client/src/cmdlfpac.c @@ -1,4 +1,6 @@ //----------------------------------------------------------------------------- +// by marshmellow +// by danshuk // // This code is licensed to you under the terms of the GNU GPL, version 2 or, // at your option, any later version. See the LICENSE.txt file for the text of @@ -9,20 +11,19 @@ //----------------------------------------------------------------------------- #include "cmdlfpac.h" -#include //tolower +#include // tolower #include #include - -#include "commonutil.h" // ARRAYLEN +#include "commonutil.h" // ARRAYLEN #include "common.h" -#include "cmdparser.h" // command_t +#include "cmdparser.h" // command_t #include "comms.h" #include "ui.h" #include "cmddata.h" #include "cmdlf.h" #include "lfdemod.h" // preamble test #include "protocols.h" // t55xx defines -#include "cmdlft55xx.h" // clone.. +#include "cmdlft55xx.h" // clone #include "parity.h" static int CmdHelp(const char *Cmd); @@ -54,7 +55,7 @@ static int usage_lf_pac_sim(void) { PrintAndLogEx(NORMAL, _YELLOW_(" lf pac sim 12345678")); return PM3_SUCCESS; } -// by danshuk + // PAC_8byte format: preamble (8 mark/idle bits), ascii STX (02), ascii '2' (32), ascii '0' (30), ascii bytes 0..7 (cardid), then xor checksum of cardid bytes // all bytes following 8 bit preamble are one start bit (0), 7 data bits (lsb first), odd parity bit, and one stop bit (1) static int demodbuf_to_pacid(uint8_t *src, const size_t src_size, uint8_t *dst, const size_t dst_size) { @@ -85,7 +86,9 @@ static int demodbuf_to_pacid(uint8_t *src, const size_t src_size, uint8_t *dst, PrintAndLogEx(DEBUG, "DEBUG: Error - PAC: Bad checksum - expected: %02X, actual: %02X", dst[dataLength - 1], checksum); return PM3_ESOFT; } - dst[dataLength - 1] = 0; // overwrite checksum byte with null terminator + + // overwrite checksum byte with null terminator + dst[dataLength - 1] = 0; return PM3_SUCCESS; } @@ -142,9 +145,13 @@ static void pacCardIdToRaw(uint8_t *outRawBytes, const char *cardId) { //see NRZDemod for what args are accepted static int CmdPacDemod(const char *Cmd) { + (void)Cmd; + return demodPac(); +} +int demodPac(void) { //NRZ - if (NRZrawDemod(Cmd, false) != PM3_SUCCESS) { + if (NRZrawDemod("", false) != PM3_SUCCESS) { PrintAndLogEx(DEBUG, "DEBUG: Error - PAC: NRZ Demod failed"); return PM3_ESOFT; } @@ -307,7 +314,6 @@ int CmdLFPac(const char *Cmd) { return CmdsParse(CommandTable, Cmd); } -// by marshmellow // find PAC preamble in already demoded data int detectPac(uint8_t *dest, size_t *size) { if (*size < 128) return -1; //make sure buffer has data @@ -320,7 +326,4 @@ int detectPac(uint8_t *dest, size_t *size) { return (int)startIdx; } -int demodPac(void) { - return CmdPacDemod(""); -} diff --git a/client/src/cmdlfverichip_disabled.c b/client/src/cmdlfverichip_disabled.c new file mode 100644 index 000000000..ee2de0846 --- /dev/null +++ b/client/src/cmdlfverichip_disabled.c @@ -0,0 +1,172 @@ +//----------------------------------------------------------------------------- +// +// This code is licensed to you under the terms of the GNU GPL, version 2 or, +// at your option, any later version. See the LICENSE.txt file for the text of +// the license. +//----------------------------------------------------------------------------- +// Low frequency Verichip tag commands +//NRZ, RF/32, 128 bits long +//----------------------------------------------------------------------------- +#include "cmdlfverichip.h" + +#include //tolower + +#include "commonutil.h" // ARRAYLEN +#include "common.h" +#include "cmdparser.h" // command_t +#include "comms.h" +#include "ui.h" +#include "cmddata.h" +#include "cmdlf.h" +#include "lfdemod.h" // preamble test +#include "protocols.h" // t55xx defines +#include "cmdlft55xx.h" // clone.. + +static int CmdHelp(const char *Cmd); + +static int usage_lf_verichip_clone(void) { + PrintAndLogEx(NORMAL, "clone a verichip tag to a T55x7 tag."); + PrintAndLogEx(NORMAL, ""); + PrintAndLogEx(NORMAL, "Usage: lf verichip clone [h] [b ]"); + PrintAndLogEx(NORMAL, "Options:"); + PrintAndLogEx(NORMAL, " h : this help"); + PrintAndLogEx(NORMAL, " b : raw hex data. 12 bytes max"); + PrintAndLogEx(NORMAL, ""); + PrintAndLogEx(NORMAL, "Examples:"); + PrintAndLogEx(NORMAL, _YELLOW_(" lf verichip clone b FF2049906D8511C593155B56D5B2649F ")); + return PM3_SUCCESS; +} + +//see NRZDemod for what args are accepted +static int CmdVerichipDemod(const char *Cmd) { + (void)Cmd; + return demodVerichip(); +} + +int demodVerichip(void) { + //NRZ + if (NRZrawDemod("", false) != PM3_SUCCESS) { + PrintAndLogEx(DEBUG, "DEBUG: Error - VERICHIP: NRZ Demod failed"); + return PM3_ESOFT; + } + size_t size = DemodBufferLen; + int ans = detectVerichip(DemodBuffer, &size); + if (ans < 0) { + if (ans == -1) + PrintAndLogEx(DEBUG, "DEBUG: Error - VERICHIP: too few bits found"); + else if (ans == -2) + PrintAndLogEx(DEBUG, "DEBUG: Error - VERICHIP: preamble not found"); + else if (ans == -3) + PrintAndLogEx(DEBUG, "DEBUG: Error - VERICHIP: Size not correct: %zu", size); + else + PrintAndLogEx(DEBUG, "DEBUG: Error - VERICHIP: ans: %d", ans); + + return PM3_ESOFT; + } + setDemodBuff(DemodBuffer, 128, ans); + setClockGrid(g_DemodClock, g_DemodStartIdx + (ans * g_DemodClock)); + + //got a good demod + uint32_t raw1 = bytebits_to_byte(DemodBuffer, 32); + uint32_t raw2 = bytebits_to_byte(DemodBuffer + 32, 32); + uint32_t raw3 = bytebits_to_byte(DemodBuffer + 64, 32); + uint32_t raw4 = bytebits_to_byte(DemodBuffer + 96, 32); + + // preamble then appears to have marker bits of "10" CS? + // 11111111001000000 10 01001100 10 00001101 10 00001101 10 00001101 10 00001101 10 00001101 10 00001101 10 00001101 10 00001101 10 10001100 10 100000001 + // unknown checksum 9 bits at the end + + PrintAndLogEx(SUCCESS, "VERICHIP - Raw: %08X%08X%08X%08X", raw1, raw2, raw3, raw4); + PrintAndLogEx(INFO, "How the Raw ID is translated by the reader is unknown. Share your trace file on forum"); + return PM3_SUCCESS; +} + +static int CmdVerichipRead(const char *Cmd) { + lf_read(false, 4096 * 2 + 20); + return CmdVerichipDemod(Cmd); +} + +static int CmdVerichipClone(const char *Cmd) { + + uint32_t blocks[5]; + bool errors = false; + uint8_t cmdp = 0; + int datalen = 0; + + while (param_getchar(Cmd, cmdp) != 0x00 && !errors) { + switch (tolower(param_getchar(Cmd, cmdp))) { + case 'h': + return usage_lf_verichip_clone(); + case 'b': { + // skip first block, 4*4 = 16 bytes left + uint8_t rawhex[16] = {0}; + int res = param_gethex_to_eol(Cmd, cmdp + 1, rawhex, sizeof(rawhex), &datalen); + if (res != 0) + errors = true; + + for (uint8_t i = 1; i < ARRAYLEN(blocks); i++) { + blocks[i] = bytes_to_num(rawhex + ((i - 1) * 4), sizeof(uint32_t)); + } + cmdp += 2; + break; + } + default: + PrintAndLogEx(WARNING, "Unknown parameter '%c'", param_getchar(Cmd, cmdp)); + errors = true; + break; + } + } + + if (errors || cmdp == 0) return usage_lf_verichip_clone(); + + //Pac - compat mode, NRZ, data rate 40, 3 data blocks + blocks[0] = T55x7_MODULATION_DIRECT | T55x7_BITRATE_RF_40 | 4 << T55x7_MAXBLOCK_SHIFT; + + PrintAndLogEx(INFO, "Preparing to clone Verichip to T55x7 with raw hex"); + print_blocks(blocks, ARRAYLEN(blocks)); + + int res = clone_t55xx_tag(blocks, ARRAYLEN(blocks)); + PrintAndLogEx(SUCCESS, "Done"); + PrintAndLogEx(HINT, "Hint: try " _YELLOW_("`lf verichip read`") " to verify"); + return res; +} + +static int CmdVerichipSim(const char *Cmd) { + + // NRZ sim. + PrintAndLogEx(INFO, " To be implemented, feel free to contribute!"); + return PM3_SUCCESS; +} + +static command_t CommandTable[] = { + {"help", CmdHelp, AlwaysAvailable, "This help"}, + {"demod", CmdVerichipDemod, AlwaysAvailable, "Demodulate an VERICHIP tag from the GraphBuffer"}, + {"read", CmdVerichipRead, IfPm3Lf, "Attempt to read and extract tag data from the antenna"}, + {"clone", CmdVerichipClone, IfPm3Lf, "clone VERICHIP tag"}, + {"sim", CmdVerichipSim, IfPm3Lf, "simulate VERICHIP tag"}, + {NULL, NULL, NULL, NULL} +}; + +static int CmdHelp(const char *Cmd) { + (void)Cmd; // Cmd is not used so far + CmdsHelp(CommandTable); + return PM3_SUCCESS; +} + +int CmdLFVerichip(const char *Cmd) { + clearCommandBuffer(); + return CmdsParse(CommandTable, Cmd); +} + +// find VERICHIP preamble in already demoded data +int detectVerichip(uint8_t *dest, size_t *size) { + if (*size < 128) return -1; //make sure buffer has data + size_t startIdx = 0; + uint8_t preamble[] = {1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0}; + if (!preambleSearch(dest, preamble, sizeof(preamble), size, &startIdx)) + return -2; //preamble not found + if (*size < 128) return -3; //wrong demoded size + //return start position + return (int)startIdx; +} + diff --git a/client/src/cmdlfverichip_disabled.h b/client/src/cmdlfverichip_disabled.h new file mode 100644 index 000000000..4ddf6a5d1 --- /dev/null +++ b/client/src/cmdlfverichip_disabled.h @@ -0,0 +1,19 @@ +//----------------------------------------------------------------------------- +// +// This code is licensed to you under the terms of the GNU GPL, version 2 or, +// at your option, any later version. See the LICENSE.txt file for the text of +// the license. +//----------------------------------------------------------------------------- +// Low frequency Verichip tag commands +//----------------------------------------------------------------------------- +#ifndef CMDLFVERICHIP_H__ +#define CMDLFVERICHIP_H__ + +#include "common.h" + +int CmdLFVerichip(const char *Cmd); + +int demodVerichip(void); +int detectVerichip(uint8_t *dest, size_t *size); +#endif + From 327af5764d23074f630f107ce33ad0d25884ff0f Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 8 Jul 2020 17:37:35 +0200 Subject: [PATCH 0043/1047] remove --- client/src/cmdlfverichip.c | 172 ------------------------------------- client/src/cmdlfverichip.h | 19 ---- 2 files changed, 191 deletions(-) delete mode 100644 client/src/cmdlfverichip.c delete mode 100644 client/src/cmdlfverichip.h diff --git a/client/src/cmdlfverichip.c b/client/src/cmdlfverichip.c deleted file mode 100644 index ee2de0846..000000000 --- a/client/src/cmdlfverichip.c +++ /dev/null @@ -1,172 +0,0 @@ -//----------------------------------------------------------------------------- -// -// This code is licensed to you under the terms of the GNU GPL, version 2 or, -// at your option, any later version. See the LICENSE.txt file for the text of -// the license. -//----------------------------------------------------------------------------- -// Low frequency Verichip tag commands -//NRZ, RF/32, 128 bits long -//----------------------------------------------------------------------------- -#include "cmdlfverichip.h" - -#include //tolower - -#include "commonutil.h" // ARRAYLEN -#include "common.h" -#include "cmdparser.h" // command_t -#include "comms.h" -#include "ui.h" -#include "cmddata.h" -#include "cmdlf.h" -#include "lfdemod.h" // preamble test -#include "protocols.h" // t55xx defines -#include "cmdlft55xx.h" // clone.. - -static int CmdHelp(const char *Cmd); - -static int usage_lf_verichip_clone(void) { - PrintAndLogEx(NORMAL, "clone a verichip tag to a T55x7 tag."); - PrintAndLogEx(NORMAL, ""); - PrintAndLogEx(NORMAL, "Usage: lf verichip clone [h] [b ]"); - PrintAndLogEx(NORMAL, "Options:"); - PrintAndLogEx(NORMAL, " h : this help"); - PrintAndLogEx(NORMAL, " b : raw hex data. 12 bytes max"); - PrintAndLogEx(NORMAL, ""); - PrintAndLogEx(NORMAL, "Examples:"); - PrintAndLogEx(NORMAL, _YELLOW_(" lf verichip clone b FF2049906D8511C593155B56D5B2649F ")); - return PM3_SUCCESS; -} - -//see NRZDemod for what args are accepted -static int CmdVerichipDemod(const char *Cmd) { - (void)Cmd; - return demodVerichip(); -} - -int demodVerichip(void) { - //NRZ - if (NRZrawDemod("", false) != PM3_SUCCESS) { - PrintAndLogEx(DEBUG, "DEBUG: Error - VERICHIP: NRZ Demod failed"); - return PM3_ESOFT; - } - size_t size = DemodBufferLen; - int ans = detectVerichip(DemodBuffer, &size); - if (ans < 0) { - if (ans == -1) - PrintAndLogEx(DEBUG, "DEBUG: Error - VERICHIP: too few bits found"); - else if (ans == -2) - PrintAndLogEx(DEBUG, "DEBUG: Error - VERICHIP: preamble not found"); - else if (ans == -3) - PrintAndLogEx(DEBUG, "DEBUG: Error - VERICHIP: Size not correct: %zu", size); - else - PrintAndLogEx(DEBUG, "DEBUG: Error - VERICHIP: ans: %d", ans); - - return PM3_ESOFT; - } - setDemodBuff(DemodBuffer, 128, ans); - setClockGrid(g_DemodClock, g_DemodStartIdx + (ans * g_DemodClock)); - - //got a good demod - uint32_t raw1 = bytebits_to_byte(DemodBuffer, 32); - uint32_t raw2 = bytebits_to_byte(DemodBuffer + 32, 32); - uint32_t raw3 = bytebits_to_byte(DemodBuffer + 64, 32); - uint32_t raw4 = bytebits_to_byte(DemodBuffer + 96, 32); - - // preamble then appears to have marker bits of "10" CS? - // 11111111001000000 10 01001100 10 00001101 10 00001101 10 00001101 10 00001101 10 00001101 10 00001101 10 00001101 10 00001101 10 10001100 10 100000001 - // unknown checksum 9 bits at the end - - PrintAndLogEx(SUCCESS, "VERICHIP - Raw: %08X%08X%08X%08X", raw1, raw2, raw3, raw4); - PrintAndLogEx(INFO, "How the Raw ID is translated by the reader is unknown. Share your trace file on forum"); - return PM3_SUCCESS; -} - -static int CmdVerichipRead(const char *Cmd) { - lf_read(false, 4096 * 2 + 20); - return CmdVerichipDemod(Cmd); -} - -static int CmdVerichipClone(const char *Cmd) { - - uint32_t blocks[5]; - bool errors = false; - uint8_t cmdp = 0; - int datalen = 0; - - while (param_getchar(Cmd, cmdp) != 0x00 && !errors) { - switch (tolower(param_getchar(Cmd, cmdp))) { - case 'h': - return usage_lf_verichip_clone(); - case 'b': { - // skip first block, 4*4 = 16 bytes left - uint8_t rawhex[16] = {0}; - int res = param_gethex_to_eol(Cmd, cmdp + 1, rawhex, sizeof(rawhex), &datalen); - if (res != 0) - errors = true; - - for (uint8_t i = 1; i < ARRAYLEN(blocks); i++) { - blocks[i] = bytes_to_num(rawhex + ((i - 1) * 4), sizeof(uint32_t)); - } - cmdp += 2; - break; - } - default: - PrintAndLogEx(WARNING, "Unknown parameter '%c'", param_getchar(Cmd, cmdp)); - errors = true; - break; - } - } - - if (errors || cmdp == 0) return usage_lf_verichip_clone(); - - //Pac - compat mode, NRZ, data rate 40, 3 data blocks - blocks[0] = T55x7_MODULATION_DIRECT | T55x7_BITRATE_RF_40 | 4 << T55x7_MAXBLOCK_SHIFT; - - PrintAndLogEx(INFO, "Preparing to clone Verichip to T55x7 with raw hex"); - print_blocks(blocks, ARRAYLEN(blocks)); - - int res = clone_t55xx_tag(blocks, ARRAYLEN(blocks)); - PrintAndLogEx(SUCCESS, "Done"); - PrintAndLogEx(HINT, "Hint: try " _YELLOW_("`lf verichip read`") " to verify"); - return res; -} - -static int CmdVerichipSim(const char *Cmd) { - - // NRZ sim. - PrintAndLogEx(INFO, " To be implemented, feel free to contribute!"); - return PM3_SUCCESS; -} - -static command_t CommandTable[] = { - {"help", CmdHelp, AlwaysAvailable, "This help"}, - {"demod", CmdVerichipDemod, AlwaysAvailable, "Demodulate an VERICHIP tag from the GraphBuffer"}, - {"read", CmdVerichipRead, IfPm3Lf, "Attempt to read and extract tag data from the antenna"}, - {"clone", CmdVerichipClone, IfPm3Lf, "clone VERICHIP tag"}, - {"sim", CmdVerichipSim, IfPm3Lf, "simulate VERICHIP tag"}, - {NULL, NULL, NULL, NULL} -}; - -static int CmdHelp(const char *Cmd) { - (void)Cmd; // Cmd is not used so far - CmdsHelp(CommandTable); - return PM3_SUCCESS; -} - -int CmdLFVerichip(const char *Cmd) { - clearCommandBuffer(); - return CmdsParse(CommandTable, Cmd); -} - -// find VERICHIP preamble in already demoded data -int detectVerichip(uint8_t *dest, size_t *size) { - if (*size < 128) return -1; //make sure buffer has data - size_t startIdx = 0; - uint8_t preamble[] = {1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0}; - if (!preambleSearch(dest, preamble, sizeof(preamble), size, &startIdx)) - return -2; //preamble not found - if (*size < 128) return -3; //wrong demoded size - //return start position - return (int)startIdx; -} - diff --git a/client/src/cmdlfverichip.h b/client/src/cmdlfverichip.h deleted file mode 100644 index 4ddf6a5d1..000000000 --- a/client/src/cmdlfverichip.h +++ /dev/null @@ -1,19 +0,0 @@ -//----------------------------------------------------------------------------- -// -// This code is licensed to you under the terms of the GNU GPL, version 2 or, -// at your option, any later version. See the LICENSE.txt file for the text of -// the license. -//----------------------------------------------------------------------------- -// Low frequency Verichip tag commands -//----------------------------------------------------------------------------- -#ifndef CMDLFVERICHIP_H__ -#define CMDLFVERICHIP_H__ - -#include "common.h" - -int CmdLFVerichip(const char *Cmd); - -int demodVerichip(void); -int detectVerichip(uint8_t *dest, size_t *size); -#endif - From c56245d1aaf35dd2c0e3d803d123344bc328aacb Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 8 Jul 2020 18:04:51 +0200 Subject: [PATCH 0044/1047] chg 'lf t55xx info' - detection of t55x7 configuration blocks --- client/src/cmdlfkeri.c | 11 +++++++---- client/src/cmdlft55xx.c | 24 ++++++++++++++++++------ client/src/cmdlft55xx.h | 17 +++++++++++++---- 3 files changed, 38 insertions(+), 14 deletions(-) diff --git a/client/src/cmdlfkeri.c b/client/src/cmdlfkeri.c index b1a73cc9d..d05c159c0 100644 --- a/client/src/cmdlfkeri.c +++ b/client/src/cmdlfkeri.c @@ -137,11 +137,16 @@ static int CmdKeriMSScramble(KeriMSScramble_t Action, uint32_t *FC, uint32_t *ID static int CmdKeriDemod(const char *Cmd) { (void)Cmd; // Cmd is not used so far + return demodKeri(); +} + +int demodKeri(void) { if (PSKDemod("", false) != PM3_SUCCESS) { PrintAndLogEx(DEBUG, "DEBUG: Error - KERI: PSK1 Demod failed"); return PM3_ESOFT; } + bool invert = false; size_t size = DemodBufferLen; int idx = detectKeri(DemodBuffer, &size, &invert); @@ -207,6 +212,8 @@ static int CmdKeriDemod(const char *Cmd) { return PM3_SUCCESS; } + + static int CmdKeriRead(const char *Cmd) { lf_read(false, 10000); return CmdKeriDemod(Cmd); @@ -382,7 +389,3 @@ int detectKeri(uint8_t *dest, size_t *size, bool *invert) { return (int)startIdx; } -int demodKeri(void) { - return CmdKeriDemod(""); -} - diff --git a/client/src/cmdlft55xx.c b/client/src/cmdlft55xx.c index 5607b52a5..13693ffc7 100644 --- a/client/src/cmdlft55xx.c +++ b/client/src/cmdlft55xx.c @@ -2049,13 +2049,13 @@ static void printT5x7KnownBlock0(uint32_t b0) { snprintf(s + strlen(s), sizeof(s) - strlen(s), "FDXB "); break; case T55X7_HID_26_CONFIG_BLOCK: - snprintf(s + strlen(s), sizeof(s) - strlen(s), "HID 26b (ProxCard), Paradox "); + snprintf(s + strlen(s), sizeof(s) - strlen(s), "HID 26b (ProxCard), Paradox, AWID "); break; case T55X7_PYRAMID_CONFIG_BLOCK: snprintf(s + strlen(s), sizeof(s) - strlen(s), "Pyramid "); break; case T55X7_INDALA_64_CONFIG_BLOCK: - snprintf(s + strlen(s), sizeof(s) - strlen(s), "Indala 64"); + snprintf(s + strlen(s), sizeof(s) - strlen(s), "Indala 64, Motorola"); break; case T55X7_INDALA_224_CONFIG_BLOCK: snprintf(s + strlen(s), sizeof(s) - strlen(s), "Indala 224 "); @@ -2066,7 +2066,7 @@ static void printT5x7KnownBlock0(uint32_t b0) { case T55X7_VIKING_CONFIG_BLOCK: snprintf(s + strlen(s), sizeof(s) - strlen(s), "Viking "); break; - case T55X7_NORALYS_CONFIG_BLOCK: + case T55X7_NORALSY_CONFIG_BLOCK: snprintf(s + strlen(s), sizeof(s) - strlen(s), "Noralys "); break; case T55X7_IOPROX_CONFIG_BLOCK: @@ -2082,20 +2082,32 @@ static void printT5x7KnownBlock0(uint32_t b0) { snprintf(s + strlen(s), sizeof(s) - strlen(s), "Nedap 128 "); break; case T55X7_PAC_CONFIG_BLOCK: - snprintf(s + strlen(s), sizeof(s) - strlen(s), "PAC "); + snprintf(s + strlen(s), sizeof(s) - strlen(s), "PAC/Stanley "); break; case T55X7_VERICHIP_CONFIG_BLOCK: snprintf(s + strlen(s), sizeof(s) - strlen(s), "Verichip "); break; case T55X7_VISA2000_CONFIG_BLOCK: snprintf(s + strlen(s), sizeof(s) - strlen(s), "VISA2000 "); - break; + break; + case T55X7_JABLOTRON_CONFIG_BLOCK: + snprintf(s + strlen(s), sizeof(s) - strlen(s), "Jablotron "); + break; + case T55X7_KERI_CONFIG_BLOCK: + snprintf(s + strlen(s), sizeof(s) - strlen(s), "KERI "); + break; + case T55X7_SECURAKEY_CONFIG_BLOCK: + snprintf(s + strlen(s), sizeof(s) - strlen(s), "SecuraKey "); + break; + case T55X7_NEXWATCH_CONFIG_BLOCK: + snprintf(s + strlen(s), sizeof(s) - strlen(s), "NexWatch, Quadrakey "); + break; default: break; } if (strlen(s) > 0) - PrintAndLogEx(NORMAL, "\n Config block match : " _YELLOW_("%s"), s); + PrintAndLogEx(SUCCESS, "\nConfig block match : " _YELLOW_("%s"), s); } static int CmdT55xxInfo(const char *Cmd) { diff --git a/client/src/cmdlft55xx.h b/client/src/cmdlft55xx.h index 5e84a85c4..155e23c77 100644 --- a/client/src/cmdlft55xx.h +++ b/client/src/cmdlft55xx.h @@ -27,10 +27,11 @@ #define T55X7_RAW_CONFIG_BLOCK 0x000880E0 // ASK, compat mode, data rate 32, manchester, 7 data blocks #define T55X7_EM_UNIQUE_CONFIG_BLOCK 0x00148040 // ASK, EM4x02/unique - compat mode, manchester, data rate 64, 2 data blocks #define T55X7_EM_PAXTON_CONFIG_BLOCK 0x00148040 // ASK, EM4x02/paxton - compat mode, manchester, data rate 64, 2 data blocks -#define T55X7_VISA2000_CONFIG_BLOCK 0x00148068 // ASK, data raet +#define T55X7_VISA2000_CONFIG_BLOCK 0x00148068 // ASK, data rate 64, 3 data blocks, STT #define T55X7_VIKING_CONFIG_BLOCK 0x00088040 // ASK, compat mode, data rate 32, Manchester, 2 data blocks -#define T55X7_NORALYS_CONFIG_BLOCK 0x00088C6A // ASK, compat mode, (NORALYS - KCP3000), data rate 32, 3 data blocks +#define T55X7_NORALSY_CONFIG_BLOCK 0x00088C6A // ASK, compat mode, (NORALSY - KCP3000), data rate 32, 3 data blocks #define T55X7_PRESCO_CONFIG_BLOCK 0x00088088 // ASK, data rate 32, Manchester, 4 data blocks, STT +#define T55X7_SECURAKEY_CONFIG_BLOCK 0x000C8060 // ASK, Manchester, data rate 40, 3 data blocks // FDXB requires data inversion and BiPhase 57 is simply BiPhase 50 inverted, so we can either do it using the modulation scheme or the inversion flag // we've done both below to prove that it works either way, and the modulation value for BiPhase 50 in the Atmel data sheet of binary "10001" (17) is a typo, @@ -41,20 +42,28 @@ #define T55X7_HID_26_CONFIG_BLOCK 0x00107060 // FSK2a, hid 26 bit - compat mode, data rate 50, 3 data blocks #define T55X7_PARADOX_CONFIG_BLOCK 0x00107060 // FSK2a, hid 26 bit - compat mode, data rate 50, 3 data blocks +#define T55X7_AWID_CONFIG_BLOCK 0x00107060 // FSK2a, hid 26 bit - compat mode, data rate 50, 3 data blocks #define T55X7_PYRAMID_CONFIG_BLOCK 0x00107080 // FSK2a, Pyramid 26 bit - compat mode, data rate 50, 4 data blocks +#define T55X7_IOPROX_CONFIG_BLOCK 0x00147040 // FSK2a, data rate 64, 2 data blocks + #define T55X7_INDALA_64_CONFIG_BLOCK 0x00081040 // PSK1, indala 64 bit - compat mode, psk carrier FC * 2, data rate 32, maxblock 2 #define T55X7_INDALA_224_CONFIG_BLOCK 0x000810E0 // PSK1, indala 224 bit - compat mode, psk carrier FC * 2, data rate 32, maxblock 7 -#define T55X7_IOPROX_CONFIG_BLOCK 0x00147040 // FSK2a, data rate 64, 2 data blocks +#define T55X7_MOTOROLA_CONFIG_BLOCK 0x00081040 // PSK1, data rate 32, 2 data blocks +#define T55X7_NEXWATCH_CONFIG_BLOCK 0x00081060 // PSK1 data rate 16, psk carrier FC * 2, 3 data blocks +#define T55X7_KERI_CONFIG_BLOCK 0x603E1040 // PSK1, 2 data blocks + +#define T55X7_JABLOTRON_CONFIG_BLOCK 0x00158040 // Biphase, data rate 64, 2 data blocks #define T55X7_GUARDPROXII_CONFIG_BLOCK 0x00150060 // Biphase, data rate 64, Direct modulation, 3 data blocks #define T55X7_NEDAP_64_CONFIG_BLOCK 0x907f0042 // BiPhase, data rate 64, 2 data blocks #define T55X7_NEDAP_128_CONFIG_BLOCK 0x907f0082 // BiPhase, data rate 64, 4 data blocks #define T55X7_PAC_CONFIG_BLOCK 0x00080080 // NRZ, data rate 32, 4 data blocks #define T55X7_VERICHIP_CONFIG_BLOCK 0x000C0080 // NRZ, data rate 40, 4 data blocks - #define T55X7_bin 0b0010 +// Q5 / Termic / T5555 #define T5555_DEFAULT_CONFIG_BLOCK 0x6001F004 // ASK, data rate 64, manchester, 2 data blocks? + typedef enum { T55x7_RAW = 0x00, T55x7_DEFAULT = 0x00, From f4b3dec0c884991f43cf2357bd11495d029f6087 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 8 Jul 2020 18:09:34 +0200 Subject: [PATCH 0045/1047] remove verichip. --- client/CMakeLists.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/client/CMakeLists.txt b/client/CMakeLists.txt index 565bfba14..ef0aeb7ab 100644 --- a/client/CMakeLists.txt +++ b/client/CMakeLists.txt @@ -267,7 +267,6 @@ set (TARGET_SOURCES ${PM3_ROOT}/client/src/cmdlfsecurakey.c ${PM3_ROOT}/client/src/cmdlft55xx.c ${PM3_ROOT}/client/src/cmdlfti.c - ${PM3_ROOT}/client/src/cmdlfverichip.c ${PM3_ROOT}/client/src/cmdlfviking.c ${PM3_ROOT}/client/src/cmdlfvisa2000.c ${PM3_ROOT}/client/src/cmdmain.c From 8934fd522d358d878fe3199ba98e6400826abf4c Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 8 Jul 2020 20:30:53 +0200 Subject: [PATCH 0046/1047] fix #833 - missing some configblocks and spelling --- client/src/cmdlft55xx.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/client/src/cmdlft55xx.c b/client/src/cmdlft55xx.c index 13693ffc7..52cf37665 100644 --- a/client/src/cmdlft55xx.c +++ b/client/src/cmdlft55xx.c @@ -1345,17 +1345,25 @@ bool testKnownConfigBlock(uint32_t block0) { case T55X7_RAW_CONFIG_BLOCK: case T55X7_EM_UNIQUE_CONFIG_BLOCK: case T55X7_FDXB_CONFIG_BLOCK: + case T55X7_FDXB_2_CONFIG_BLOCK: case T55X7_HID_26_CONFIG_BLOCK: case T55X7_PYRAMID_CONFIG_BLOCK: case T55X7_INDALA_64_CONFIG_BLOCK: case T55X7_INDALA_224_CONFIG_BLOCK: case T55X7_GUARDPROXII_CONFIG_BLOCK: case T55X7_VIKING_CONFIG_BLOCK: - case T55X7_NORALYS_CONFIG_BLOCK: + case T55X7_NORALSY_CONFIG_BLOCK: case T55X7_IOPROX_CONFIG_BLOCK: case T55X7_PRESCO_CONFIG_BLOCK: case T55X7_NEDAP_64_CONFIG_BLOCK: case T55X7_NEDAP_128_CONFIG_BLOCK: + case T55X7_VISA2000_CONFIG_BLOCK: + case T55X7_SECURAKEY_CONFIG_BLOCK: + case T55X7_PAC_CONFIG_BLOCK: + case T55X7_VERICHIP_CONFIG_BLOCK: + case T55X7_KERI_CONFIG_BLOCK: + case T55X7_NEXWATCH_CONFIG_BLOCK: + case T55X7_JABLOTRON_CONFIG_BLOCK: return true; } return false; From ec1c72d73cf257be544bc0fbefde4fc856f63a2d Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 8 Jul 2020 23:11:11 +0200 Subject: [PATCH 0047/1047] fix felica image --- fpga/fpga_felica.bit | Bin 42179 -> 42179 bytes fpga/fpga_felica.v | 2 -- fpga/fpga_hf.bit | Bin 42175 -> 42175 bytes fpga/fpga_lf.bit | Bin 42175 -> 42175 bytes 4 files changed, 2 deletions(-) diff --git a/fpga/fpga_felica.bit b/fpga/fpga_felica.bit index dc68b740b025bee0adeee9d72a787e1216b84b5c..3b222908030eefbd6206997787560745d21124d8 100644 GIT binary patch literal 42179 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 literal 42179 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 Date: Wed, 8 Jul 2020 23:11:29 +0200 Subject: [PATCH 0048/1047] felica fixes --- armsrc/felica.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/armsrc/felica.c b/armsrc/felica.c index 944b89ffe..53f78d17b 100644 --- a/armsrc/felica.c +++ b/armsrc/felica.c @@ -445,7 +445,7 @@ static void iso18092_setup(uint8_t fpga_minor_mode) { if (DBGLEVEL >= DBG_DEBUG) Dbprintf("Start iso18092_setup"); LEDsoff(); - FpgaDownloadAndGo(FPGA_BITSTREAM_HF); + FpgaDownloadAndGo(FPGA_BITSTREAM_HF_FELICA); // allocate command receive buffer BigBuf_free(); From 246144df2a19640660294a1cf0dd4dec31edf43e Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 8 Jul 2020 23:11:50 +0200 Subject: [PATCH 0049/1047] amiboo default pack --- armsrc/iso14443a.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/armsrc/iso14443a.c b/armsrc/iso14443a.c index 225337485..836360740 100644 --- a/armsrc/iso14443a.c +++ b/armsrc/iso14443a.c @@ -1499,10 +1499,13 @@ void SimulateIso14443aTag(uint8_t tagType, uint8_t flags, uint8_t *data) { uint8_t pwd[4]; emlGetMemBt(pwd, (pages - 1) * 4 + MFU_DUMP_PREFIX_LENGTH, sizeof(pwd)); if (memcmp(receivedCmd + 1, pwd, 4) == 0) { - uint8_t cmd[4]; - emlGetMemBt(cmd, pages * 4 + MFU_DUMP_PREFIX_LENGTH, 2); - AddCrc14A(cmd, sizeof(cmd) - 2); - EmSendCmd(cmd, sizeof(cmd)); + uint8_t pack[4]; + emlGetMemBt(pack, pages * 4 + MFU_DUMP_PREFIX_LENGTH, 2); + if (memcmp(pack, "\x00\x00\x00\x00", 4) == 0) { + memcpy(pack, "\x80\x80\x00\x00", 4); + } + AddCrc14A(pack, sizeof(pack) - 2); + EmSendCmd(pack, sizeof(pack)); } else { EmSend4bit(CARD_NACK_NA); if (DBGLEVEL >= DBG_DEBUG) Dbprintf("Auth attempt: %08x", bytes_to_num(receivedCmd + 1, 4)); From a76679f7e6e2bd36546e8af4bb0e2289b76884ba Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 9 Jul 2020 00:20:52 +0200 Subject: [PATCH 0050/1047] hf iclass reader --- armsrc/iclass.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/armsrc/iclass.c b/armsrc/iclass.c index 99976566c..e01c5a217 100644 --- a/armsrc/iclass.c +++ b/armsrc/iclass.c @@ -884,13 +884,13 @@ static bool select_iclass_tag(uint8_t *card_data, bool use_credit_key, uint32_t void ReaderIClass(uint8_t flags) { uint8_t card_data[6 * 8] = {0xFF}; - uint8_t last_csn[8] = {0, 0, 0, 0, 0, 0, 0, 0}; +// uint8_t last_csn[8] = {0, 0, 0, 0, 0, 0, 0, 0}; uint8_t resp[ICLASS_BUFFER_SIZE]; // memset(card_data, 0xFF, sizeof(card_data)); memset(resp, 0xFF, sizeof(resp)); - bool flag_readonce = flags & FLAG_ICLASS_READER_ONLY_ONCE; // flag to read until one tag is found successfully +// bool flag_readonce = flags & FLAG_ICLASS_READER_ONLY_ONCE; // flag to read until one tag is found successfully bool use_credit_key = flags & FLAG_ICLASS_READER_CEDITKEY; // flag to use credit key bool flag_read_aia = flags & FLAG_ICLASS_READER_AIA; // flag to read block5, application issuer area @@ -938,9 +938,11 @@ void ReaderIClass(uint8_t flags) { // with 0xFF:s in block 3 and 4. LED_B_ON(); - + reply_mix(CMD_ACK, result_status, 0, 0, card_data, sizeof(card_data)); + //Send back to client, but don't bother if we already sent this - // only useful if looping in arm (not try_once && not abort_after_read) + /* if (memcmp(last_csn, card_data, 8) != 0) { reply_mix(CMD_ACK, result_status, 0, 0, card_data, sizeof(card_data)); @@ -950,12 +952,13 @@ void ReaderIClass(uint8_t flags) { } LED_B_OFF(); } + */ // if (userCancelled) { // reply_mix(CMD_ACK, 0xFF, 0, 0, card_data, 0); // switch_off(); // } else { - reply_mix(CMD_ACK, 0, 0, 0, card_data, 0); +// reply_mix(CMD_ACK, result_status, 0, 0, card_data, 0); // } switch_off(); } From d67bc94e2004301f01d428361ad279a10ebe508f Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 9 Jul 2020 00:21:26 +0200 Subject: [PATCH 0051/1047] hf iclass sniff --- client/src/cmdhficlass.c | 60 +++++++++++++++++++++++++++------------- 1 file changed, 41 insertions(+), 19 deletions(-) diff --git a/client/src/cmdhficlass.c b/client/src/cmdhficlass.c index 21ad93997..f11d65945 100644 --- a/client/src/cmdhficlass.c +++ b/client/src/cmdhficlass.c @@ -2,6 +2,7 @@ // Copyright (C) 2010 iZsh , Hagen Fritsch // Copyright (C) 2011 Gerhard de Koning Gans // Copyright (C) 2014 Midnitesnake & Andy Davies & Martin Holst Swende +// Copyright (C) 2019 piwi // Copyright (C) 2020 Iceman // // This code is licensed to you under the terms of the GNU GPL, version 2 or, @@ -13,6 +14,7 @@ #include "cmdhficlass.h" #include +#include "cliparser.h" #include "cmdparser.h" // command_t #include "commonutil.h" // ARRAYLEN #include "cmdtrace.h" @@ -272,15 +274,7 @@ static int usage_hf_iclass_replay(void) { PrintAndLogEx(NORMAL, ""); return PM3_SUCCESS; } -static int usage_hf_iclass_sniff(void) { - PrintAndLogEx(NORMAL, "Sniff the communication between reader and tag\n"); - PrintAndLogEx(NORMAL, "Usage: hf iclass sniff [h]\n"); - PrintAndLogEx(NORMAL, "Options:"); - PrintAndLogEx(NORMAL, " h Show this help"); - PrintAndLogEx(NORMAL, "Examples:"); - PrintAndLogEx(NORMAL, _YELLOW_("\thf iclass sniff")); - return PM3_SUCCESS; -} + static int usage_hf_iclass_loclass(void) { PrintAndLogEx(NORMAL, "Execute the offline part of loclass attack"); PrintAndLogEx(NORMAL, " An iclass dumpfile is assumed to consist of an arbitrary number of"); @@ -518,9 +512,35 @@ static int CmdHFiClassList(const char *Cmd) { } static int CmdHFiClassSniff(const char *Cmd) { - char cmdp = tolower(param_getchar(Cmd, 0)); - if (cmdp == 'h') return usage_hf_iclass_sniff(); - SendCommandNG(CMD_HF_ICLASS_SNIFF, NULL, 0); + + CLIParserContext *ctx; + CLIParserInit(&ctx, "hf iclass sniff", + "Sniff the communication reader and tag", + "Usage:\n" + _YELLOW_("\thf iclass sniff") "\n" + _YELLOW_("\thf iclass sniff -j") " -> jam e-purse updates\n" + ); + + void* argtable[] = { + arg_param_begin, + arg_lit0("j", "jam", "Jam (prevent) e-purse updates"), + arg_param_end + }; + CLIExecWithReturn(ctx, Cmd, argtable, true); + + bool jam_epurse_update = arg_get_lit(ctx, 1); + const uint8_t update_epurse_sequence[2] = {0x87, 0x02}; + + struct { + uint8_t jam_search_len; + uint8_t jam_search_string[2]; + } PACKED payload; + + if (jam_epurse_update) { + payload.jam_search_len = sizeof(update_epurse_sequence); + memcpy(payload.jam_search_string, update_epurse_sequence, sizeof(payload.jam_search_string)); + } + SendCommandNG(CMD_HF_ICLASS_SNIFF, (uint8_t *)&payload, sizeof(payload)); return PM3_SUCCESS; } @@ -2245,9 +2265,9 @@ static int printKeys(void) { PrintAndLogEx(NORMAL, ""); for (uint8_t i = 0; i < ICLASS_KEYS_MAX; i++) { if (memcmp(iClass_Key_Table[i], "\x00\x00\x00\x00\x00\x00\x00\x00", 8) == 0) - PrintAndLogEx(NORMAL, "%u: %s", i, sprint_hex(iClass_Key_Table[i], 8)); + PrintAndLogEx(INFO, "%u: %s", i, sprint_hex(iClass_Key_Table[i], 8)); else - PrintAndLogEx(NORMAL, "%u: "_YELLOW_("%s"), i, sprint_hex(iClass_Key_Table[i], 8)); + PrintAndLogEx(INFO, "%u: "_YELLOW_("%s"), i, sprint_hex(iClass_Key_Table[i], 8)); } PrintAndLogEx(NORMAL, ""); return PM3_SUCCESS; @@ -2866,12 +2886,14 @@ static int CmdHFiClassPermuteKey(const char *Cmd) { bool isReverse = false; int len = 0; char cmdp = tolower(param_getchar(Cmd, 0)); - if (strlen(Cmd) == 0 || cmdp == 'h') return usage_hf_iclass_permutekey(); + if (strlen(Cmd) == 0 || cmdp == 'h') + return usage_hf_iclass_permutekey(); isReverse = (cmdp == 'r'); param_gethex_ex(Cmd, 1, data, &len); - if (len % 2) return usage_hf_iclass_permutekey(); + if (len % 2) + return usage_hf_iclass_permutekey(); len >>= 1; @@ -2881,12 +2903,12 @@ static int CmdHFiClassPermuteKey(const char *Cmd) { generate_rev(data, len); uint8_t key_std_format[8] = {0}; permutekey_rev(key, key_std_format); - PrintAndLogEx(SUCCESS, "holiman iclass key | %s \n", sprint_hex(key_std_format, 8)); + PrintAndLogEx(SUCCESS, "Standard NIST format key " _YELLOW_("%s") " \n", sprint_hex(key_std_format, 8)); } else { generate(data, len); uint8_t key_iclass_format[8] = {0}; permutekey(key, key_iclass_format); - PrintAndLogEx(SUCCESS, "holiman std key | %s \n", sprint_hex(key_iclass_format, 8)); + PrintAndLogEx(SUCCESS, "HID permuted iCLASS format: %s \n", sprint_hex(key_iclass_format, 8)); } return PM3_SUCCESS; } @@ -2959,7 +2981,7 @@ int readIclass(bool loop, bool verbose) { picopass_hdr *hdr = (picopass_hdr *)data; uint16_t length = resp.length; - if ( length != sizeof(picopass_hdr)) + if (length != sizeof(picopass_hdr)) continue; PrintAndLogEx(NORMAL, ""); From 59372cb5d4009217176ce61ef6551dff52ddb22c Mon Sep 17 00:00:00 2001 From: tharexde Date: Thu, 9 Jul 2020 01:58:16 +0200 Subject: [PATCH 0052/1047] added new command "4x50_wipe" --- include/pm3_cmd.h | 1 + 1 file changed, 1 insertion(+) diff --git a/include/pm3_cmd.h b/include/pm3_cmd.h index 117eea672..9e20ab9c1 100644 --- a/include/pm3_cmd.h +++ b/include/pm3_cmd.h @@ -406,6 +406,7 @@ typedef struct { #define CMD_LF_EM4X50_WRITE 0x0241 #define CMD_LF_EM4X50_WRITE_PASSWORD 0x0242 #define CMD_LF_EM4X50_READ 0x0243 +#define CMD_LF_EM4X50_WIPE 0x0244 // Sampling configuration for LF reader/sniffer #define CMD_LF_SAMPLING_SET_CONFIG 0x021D #define CMD_LF_FSK_SIMULATE 0x021E From a659e7576dcdcf7e3ba8de829f20069e4f0a306c Mon Sep 17 00:00:00 2001 From: tharexde Date: Thu, 9 Jul 2020 01:58:38 +0200 Subject: [PATCH 0053/1047] added new command "4x50_wipe" --- client/src/cmdlfem4x.c | 1 + 1 file changed, 1 insertion(+) diff --git a/client/src/cmdlfem4x.c b/client/src/cmdlfem4x.c index 8031ab20d..bb07adaaa 100644 --- a/client/src/cmdlfem4x.c +++ b/client/src/cmdlfem4x.c @@ -1400,6 +1400,7 @@ static command_t CommandTable[] = { {"4x50_write", CmdEM4x50Write, IfPm3EM4x50, "write word data to EM4x50"}, {"4x50_write_password", CmdEM4x50WritePassword, IfPm3EM4x50, "change passwword of EM4x50 tag"}, {"4x50_read", CmdEM4x50Read, IfPm3EM4x50, "read word data from EM4x50"}, + {"4x50_wipe", CmdEM4x50Wipe, IfPm3EM4x50, "wipe data from EM4x50"}, {NULL, NULL, NULL, NULL} }; From 9d8c7a8de55a91729446fb6ceac3d83ff1f64e53 Mon Sep 17 00:00:00 2001 From: tharexde Date: Thu, 9 Jul 2020 01:58:50 +0200 Subject: [PATCH 0054/1047] added new command "4x50_wipe" --- client/src/cmdlfem4x50.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/client/src/cmdlfem4x50.h b/client/src/cmdlfem4x50.h index 4519abbb4..01417aa1e 100644 --- a/client/src/cmdlfem4x50.h +++ b/client/src/cmdlfem4x50.h @@ -23,4 +23,6 @@ int CmdEM4x50Write(const char *Cmd); int CmdEM4x50WritePassword(const char *Cmd); int CmdEM4x50Read(const char *Cmd); int CmdEM4x50Dump(const char *Cmd); +int CmdEM4x50Wipe(const char *Cmd); + #endif From 76d0ecf8cfcbb8a572f7ef4db27da3f58ae92db1 Mon Sep 17 00:00:00 2001 From: tharexde Date: Thu, 9 Jul 2020 01:59:01 +0200 Subject: [PATCH 0055/1047] added new command "4x50_wipe" --- armsrc/appmain.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/armsrc/appmain.c b/armsrc/appmain.c index 95b42982a..cc1d299f3 100644 --- a/armsrc/appmain.c +++ b/armsrc/appmain.c @@ -1023,7 +1023,10 @@ static void PacketReceived(PacketCommandNG *packet) { em4x50_read((em4x50_data_t *)packet->data.asBytes); break; } - + case CMD_LF_EM4X50_WIPE: { + em4x50_wipe((em4x50_data_t *)packet->data.asBytes); + break; + } #endif #ifdef WITH_ISO15693 From 8dd302907caa5eec440914434a31894e826d8cd9 Mon Sep 17 00:00:00 2001 From: tharexde Date: Thu, 9 Jul 2020 01:59:09 +0200 Subject: [PATCH 0056/1047] added new command "4x50_wipe" --- armsrc/em4x50.h | 1 + 1 file changed, 1 insertion(+) diff --git a/armsrc/em4x50.h b/armsrc/em4x50.h index d786e61c0..f9f1375f2 100644 --- a/armsrc/em4x50.h +++ b/armsrc/em4x50.h @@ -21,5 +21,6 @@ void em4x50_info(em4x50_data_t *etd); void em4x50_write(em4x50_data_t *etd); void em4x50_write_password(em4x50_data_t *etd); void em4x50_read(em4x50_data_t *etd); +void em4x50_wipe(em4x50_data_t *etd); #endif /* EM4X50_H */ From 241e2b7c7e44f164b7984122121f291810e7e5e1 Mon Sep 17 00:00:00 2001 From: tharexde Date: Thu, 9 Jul 2020 01:59:29 +0200 Subject: [PATCH 0057/1047] added new command "4x50_wipe" --- armsrc/em4x50.c | 58 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/armsrc/em4x50.c b/armsrc/em4x50.c index ddc297591..8344f7542 100644 --- a/armsrc/em4x50.c +++ b/armsrc/em4x50.c @@ -1028,3 +1028,61 @@ void em4x50_write_password(em4x50_data_t *etd) { lf_finalize(); reply_ng(CMD_ACK, bsuccess, 0, 0); } + +void em4x50_wipe(em4x50_data_t *etd) { + + // set all data of EM4x50 tag to 0x0 including password + + bool bsuccess = false; + uint8_t zero[4] = {0, 0, 0, 0}; + uint8_t addresses[4] = {0, 0, EM4X50_NO_WORDS - 3, 1}; + + init_tag(); + em4x50_setup_read(); + + // set gHigh and gLow + if (get_signalproperties() && find_em4x50_tag()) { + + // login first + if (login(etd->password)) { + + // write 0x0 to each address but ignore addresses + // 0 -> password, 32 -> serial, 33 -> uid + // writing 34 words takes about 3.6 seconds -> high timeout needed + for (int i = 1; i <= EM4X50_NO_WORDS - 3; i++) + write(zero, i); + + // to verify result reset EM4x50 + if (reset()) { + + // login not necessary because protectd word has been set to 0 + // -> no read protected words + // -> selective read can be called immediately + if (selective_read(addresses)) { + + // check if everything is zero + bsuccess = true; + for (int i = 1; i <= EM4X50_NO_WORDS - 3; i++) + for (int j = 0; j < 4; j++) + bsuccess &= (tag.sectors[i][j] == 0) ? true : false; + + } + + if (bsuccess) { + + // so far everything is fine + // last task: reset password + if (login(etd->password)) + bsuccess = write_password(etd->password, zero); + + // verify by login with new password + if (bsuccess) + bsuccess = login(zero); + } + } + } + } + + lf_finalize(); + reply_ng(CMD_ACK, bsuccess, (uint8_t *)tag.sectors, 238); +} From 1394ffc3a069e35be11119896d3e522570c5d482 Mon Sep 17 00:00:00 2001 From: tharexde Date: Thu, 9 Jul 2020 02:00:09 +0200 Subject: [PATCH 0058/1047] added new command "4x50_wipe" --- client/src/cmdlfem4x50.c | 66 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) diff --git a/client/src/cmdlfem4x50.c b/client/src/cmdlfem4x50.c index 1009f3bb6..8198bdc74 100644 --- a/client/src/cmdlfem4x50.c +++ b/client/src/cmdlfem4x50.c @@ -85,6 +85,18 @@ static int usage_lf_em4x50_dump(void) { PrintAndLogEx(NORMAL, _YELLOW_(" lf em 4x50_dump f card_nnn p 11223344")); return PM3_SUCCESS; } +static int usage_lf_em4x50_wipe(void) { + PrintAndLogEx(NORMAL, "Wipe data from EM4x50 tag. Tag must be on antenna. "); + PrintAndLogEx(NORMAL, ""); + PrintAndLogEx(NORMAL, "Usage: lf em 4x50_wipe [h] [p ]"); + PrintAndLogEx(NORMAL, "Options:"); + PrintAndLogEx(NORMAL, " h - this help"); + PrintAndLogEx(NORMAL, " p - password (hex)"); + PrintAndLogEx(NORMAL, "Examples:"); + PrintAndLogEx(NORMAL, _YELLOW_(" lf em 4x50_wwipe p 11223344")); + PrintAndLogEx(NORMAL, ""); + return PM3_SUCCESS; +} static void prepare_result(const uint8_t *byte, int fwr, int lwr, em4x50_word_t *words) { @@ -672,3 +684,57 @@ int CmdEM4x50Dump(const char *Cmd) { //saveFileJSON... return PM3_SUCCESS; } + +int CmdEM4x50Wipe(const char *Cmd) { + + // fills EM4x50 tag with zeros including password + + bool errors = false, bpwd = false; + uint8_t cmdp = 0; + em4x50_data_t etd; + PacketResponseNG resp; + + while (param_getchar(Cmd, cmdp) != 0x00 && !errors) { + + switch (tolower(param_getchar(Cmd, cmdp))) { + case 'h': + return usage_lf_em4x50_wipe(); + + case 'p': + if (param_gethex(Cmd, cmdp + 1, etd.password, 8)) { + PrintAndLogEx(FAILED, "\npassword has to be 8 hex symbols\n"); + return PM3_EINVARG; + } + bpwd = true; + cmdp += 2; + break; + + default: + PrintAndLogEx(WARNING, "\nUnknown parameter '%c'\n", param_getchar(Cmd, cmdp)); + errors = true; + break; + } + } + + if (errors || !bpwd) + return usage_lf_em4x50_wipe(); + + clearCommandBuffer(); + SendCommandNG(CMD_LF_EM4X50_WIPE, (uint8_t *)&etd, sizeof(etd)); + + if (!WaitForResponseTimeout(CMD_ACK, &resp, 2*TIMEOUT)) { + PrintAndLogEx(WARNING, "\ntimeout while waiting for reply.\n"); + return PM3_ETIMEOUT; + } + + // print response + bool isOK = resp.status; + if (isOK) { + PrintAndLogEx(SUCCESS,"\nwiping data " _GREEN_("ok") "\n"); + } else { + PrintAndLogEx(FAILED,"\nwiping data " _RED_("failed") "\n"); + return PM3_ESOFT; + } + + return PM3_SUCCESS; +} From ed5471a895040369fc3aa07299235eadc3196345 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 9 Jul 2020 19:40:54 +0200 Subject: [PATCH 0059/1047] fpga --- armsrc/BigBuf.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/armsrc/BigBuf.c b/armsrc/BigBuf.c index f41801a26..4642d0079 100644 --- a/armsrc/BigBuf.c +++ b/armsrc/BigBuf.c @@ -158,7 +158,10 @@ uint32_t BigBuf_get_traceLen(void) { annotation of commands/responses. **/ bool RAMFUNC LogTrace(const uint8_t *btBytes, uint16_t iLen, uint32_t timestamp_start, uint32_t timestamp_end, uint8_t *parity, bool readerToTag) { - if (!tracing) return false; + if (tracing == false) { + if (DBGLEVEL >= DBG_DEBUG) { Dbprintf("trace is turned off"); } + return false; + } uint8_t *trace = BigBuf_get_addr(); tracelog_hdr_t *hdr = (tracelog_hdr_t *)(trace + traceLen); @@ -168,6 +171,7 @@ bool RAMFUNC LogTrace(const uint8_t *btBytes, uint16_t iLen, uint32_t timestamp_ // Return when trace is full if (TRACELOG_HDR_LEN + iLen + num_paritybytes >= BigBuf_max_traceLen() - traceLen) { tracing = false; // don't trace any more + if (DBGLEVEL >= DBG_DEBUG) { Dbprintf("trace is full"); } return false; } From 05299373fa42119a8e7e802510cdb2f8b221448b Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 9 Jul 2020 19:41:52 +0200 Subject: [PATCH 0060/1047] fpga --- armsrc/iclass.c | 118 +++++++++++++++++++++++++++++------------------- 1 file changed, 72 insertions(+), 46 deletions(-) diff --git a/armsrc/iclass.c b/armsrc/iclass.c index e01c5a217..478bafa43 100644 --- a/armsrc/iclass.c +++ b/armsrc/iclass.c @@ -775,8 +775,9 @@ send: } -/// THE READER CODE -static void ReaderTransmitIClass(uint8_t *frame, int len, uint32_t *start_time) { +// THE READER CODE +// logs. +static void iclass_send_as_reader(uint8_t *frame, int len, uint32_t *start_time) { CodeIso15693AsReader(frame, len); TransmitTo15693Tag(ToSend, ToSendMax, start_time); @@ -785,12 +786,16 @@ static void ReaderTransmitIClass(uint8_t *frame, int len, uint32_t *start_time) LogTrace(frame, len, *start_time * 4, end_time * 4, NULL, true); } -static bool sendCmdGetResponseWithRetries(uint8_t* command, size_t cmdsize, uint8_t* resp, size_t max_resp_size, +static bool iclass_send_cmd_with_retries(uint8_t* cmd, size_t cmdsize, uint8_t* resp, size_t max_resp_size, uint8_t expected_size, uint8_t tries, uint32_t start_time, uint32_t timeout, uint32_t *eof_time) { while (tries-- > 0) { - ReaderTransmitIClass(command, cmdsize, &start_time); + iclass_send_as_reader(cmd, cmdsize, &start_time); + + if (resp == NULL) + return true; + if (expected_size == GetIso15693AnswerFromTag(resp, max_resp_size, timeout, eof_time)) { return true; } @@ -812,30 +817,31 @@ static bool select_iclass_tag(uint8_t *card_data, bool use_credit_key, uint32_t static uint8_t select[] = { 0x80 | ICLASS_CMD_SELECT, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; static uint8_t read_conf[] = { ICLASS_CMD_READ_OR_IDENTIFY, 0x01, 0xfa, 0x22 }; static uint8_t read_check_cc[] = { 0x80 | ICLASS_CMD_READCHECK, 0x02 }; + uint8_t resp[ICLASS_BUFFER_SIZE] = {0}; - // Bit 4: K.If this bit equals to one, the READCHECK will use the Credit Key (Kc); if equals to zero, Debit Key (Kd) willbe used + // Bit 4: K.If this bit equals to one, the READCHECK will use the Credit Key (Kc); if equals to zero, Debit Key (Kd) will be used // bit 7: parity. if (use_credit_key) read_check_cc[0] = 0x10 | ICLASS_CMD_READCHECK; - - uint8_t resp[ICLASS_BUFFER_SIZE] = {0}; uint32_t start_time = GetCountSspClk(); - - ReaderTransmitIClass(act_all, 1, &start_time); + iclass_send_as_reader(act_all, sizeof(act_all), &start_time); // card present? - if (GetIso15693AnswerFromTag(resp, sizeof(resp), ICLASS_READER_TIMEOUT_ACTALL, eof_time) < 0) + int len = GetIso15693AnswerFromTag(resp, sizeof(resp), ICLASS_READER_TIMEOUT_ACTALL, eof_time); + if (len < 0) { + Dbprintf("Fail act all (%d)", len); return false; + } // send Identify start_time = *eof_time + DELAY_ICLASS_VICC_TO_VCD_READER; - ReaderTransmitIClass(identify, 1, &start_time); + iclass_send_as_reader(identify, 1, &start_time); // expect a 10-byte response here, 8 byte anticollision-CSN and 2 byte CRC - uint8_t len = GetIso15693AnswerFromTag(resp, sizeof(resp), ICLASS_READER_TIMEOUT_OTHERS, eof_time); - if (len != 10) + len = GetIso15693AnswerFromTag(resp, sizeof(resp), ICLASS_READER_TIMEOUT_OTHERS, eof_time); + if (len != 10) return false; // copy the Anti-collision CSN to our select-packet @@ -843,11 +849,11 @@ static bool select_iclass_tag(uint8_t *card_data, bool use_credit_key, uint32_t // select the card start_time = *eof_time + DELAY_ICLASS_VICC_TO_VCD_READER; - ReaderTransmitIClass(select, sizeof(select), &start_time); + iclass_send_as_reader(select, sizeof(select), &start_time); // expect a 10-byte response here, 8 byte CSN and 2 byte CRC len = GetIso15693AnswerFromTag(resp, sizeof(resp), ICLASS_READER_TIMEOUT_OTHERS, eof_time); - if (len != 10) + if (len != 10) return false; //Save CSN in response data @@ -855,23 +861,23 @@ static bool select_iclass_tag(uint8_t *card_data, bool use_credit_key, uint32_t // card selected, now read config (block1) (only 8 bytes no CRC) start_time = *eof_time + DELAY_ICLASS_VICC_TO_VCD_READER; - ReaderTransmitIClass(read_conf, sizeof(read_conf), &start_time); + iclass_send_as_reader(read_conf, sizeof(read_conf), &start_time); // expect a 8-byte response here len = GetIso15693AnswerFromTag(resp, sizeof(resp), ICLASS_READER_TIMEOUT_OTHERS, eof_time); - if (len != 8) + if (len != 10) return false; - //Save CC (e-purse) in response data + //Save CONF in response data memcpy(card_data + 8, resp, 8); // card selected, now read e-purse (cc) (block2) (only 8 bytes no CRC) start_time = *eof_time + DELAY_ICLASS_VICC_TO_VCD_READER; - ReaderTransmitIClass(read_check_cc, sizeof(read_check_cc), &start_time); + iclass_send_as_reader(read_check_cc, sizeof(read_check_cc), &start_time); // expect a 8-byte response here len = GetIso15693AnswerFromTag(resp, sizeof(resp), ICLASS_READER_TIMEOUT_OTHERS, eof_time); - if (len != 8) + if (len != 8) return false; //Save CC (e-purse) in response data @@ -895,31 +901,32 @@ void ReaderIClass(uint8_t flags) { bool flag_read_aia = flags & FLAG_ICLASS_READER_AIA; // flag to read block5, application issuer area if ((flags & FLAG_ICLASS_READER_INIT) == FLAG_ICLASS_READER_INIT) { + switch_off(); Iso15693InitReader(); - } - - if ((flags & FLAG_ICLASS_READER_CLEARTRACE) == FLAG_ICLASS_READER_CLEARTRACE) { - set_tracing(true); - clear_trace(); StartCountSspClk(); } + + if ((flags & FLAG_ICLASS_READER_CLEARTRACE) == FLAG_ICLASS_READER_CLEARTRACE) { + clear_trace(); + } - uint32_t start_time = 0; uint32_t eof_time = 0; - int read_status = select_iclass_tag(card_data, use_credit_key, &eof_time); - if (read_status == 0) { + bool status = select_iclass_tag(card_data, use_credit_key, &eof_time); + if (status == false) { reply_mix(CMD_ACK, 0xFF, 0, 0, card_data, 0); switch_off(); return; } - - uint8_t result_status = FLAG_ICLASS_CSN | FLAG_ICLASS_CONF | FLAG_ICLASS_CC; + + uint32_t start_time = eof_time + DELAY_ICLASS_VICC_TO_VCD_READER; + uint8_t result_status = (FLAG_ICLASS_CSN | FLAG_ICLASS_CONF | FLAG_ICLASS_CC); //Read block 5, AIA if (flag_read_aia) { //Read App Issuer Area block CRC(0x05) => 0xde 0x64 uint8_t read_aa[] = { ICLASS_CMD_READ_OR_IDENTIFY, 0x05, 0xde, 0x64}; - if (sendCmdGetResponseWithRetries(read_aa, sizeof(read_aa), resp, sizeof(resp), 10, 10, start_time, ICLASS_READER_TIMEOUT_OTHERS, &eof_time)) { + status = iclass_send_cmd_with_retries(read_aa, sizeof(read_aa), resp, sizeof(resp), 10, 10, start_time, ICLASS_READER_TIMEOUT_OTHERS, &eof_time); + if (status) { result_status |= FLAG_ICLASS_AIA; memcpy(card_data + (8 * 5), resp, 8); } else { @@ -994,8 +1001,9 @@ void ReaderIClass_Replay(uint8_t arg0, uint8_t *mac) { //for now replay captured auth (as cc not updated) memcpy(check + 5, mac, 4); + start_time = eof_time + DELAY_ICLASS_VICC_TO_VCD_READER; - if (sendCmdGetResponseWithRetries(check, sizeof(check), resp, sizeof(resp), 4, 3, 0, ICLASS_READER_TIMEOUT_OTHERS, &eof_time) == false) { + if (iclass_send_cmd_with_retries(check, sizeof(check), resp, sizeof(resp), 4, 3, start_time, ICLASS_READER_TIMEOUT_OTHERS, &eof_time) == false) { if (DBGLEVEL >= DBG_EXTENDED) DbpString("Error: Authentication Fail!"); continue; } @@ -1004,7 +1012,8 @@ void ReaderIClass_Replay(uint8_t arg0, uint8_t *mac) { read[1] = 1; AddCrc(read + 1, 1); - if (sendCmdGetResponseWithRetries(read, sizeof(read), resp, sizeof(resp), 10, 3, start_time, ICLASS_READER_TIMEOUT_OTHERS, &eof_time) == false) { + start_time = eof_time + DELAY_ICLASS_VICC_TO_VCD_READER; + if (iclass_send_cmd_with_retries(read, sizeof(read), resp, sizeof(resp), 10, 3, start_time, ICLASS_READER_TIMEOUT_OTHERS, &eof_time) == false) { if (DBGLEVEL >= DBG_EXTENDED) DbpString("Dump config (block 1) failed"); continue; } @@ -1032,7 +1041,8 @@ void ReaderIClass_Replay(uint8_t arg0, uint8_t *mac) { read[1] = block; AddCrc(read + 1, 1); - if (sendCmdGetResponseWithRetries(read, sizeof(read), resp, sizeof(resp), 10, 3, start_time, ICLASS_READER_TIMEOUT_OTHERS, &eof_time)) { + start_time = eof_time + DELAY_ICLASS_VICC_TO_VCD_READER; + if (iclass_send_cmd_with_retries(read, sizeof(read), resp, sizeof(resp), 10, 3, start_time, ICLASS_READER_TIMEOUT_OTHERS, &eof_time)) { if (DBGLEVEL >= DBG_EXTENDED) { Dbprintf(" %02x: %02x %02x %02x %02x %02x %02x %02x %02x", block, @@ -1095,7 +1105,7 @@ void iClass_ReadCheck(uint8_t blockno, uint8_t keytype) { uint8_t readcheck[] = { keytype, blockno }; uint8_t resp[8] = {0}; uint32_t eof_time = 0; - bool isOK = sendCmdGetResponseWithRetries(readcheck, sizeof(readcheck), resp, sizeof(resp), 8, 3, 0, ICLASS_READER_TIMEOUT_OTHERS, &eof_time); + bool isOK = iclass_send_cmd_with_retries(readcheck, sizeof(readcheck), resp, sizeof(resp), 8, 3, 0, ICLASS_READER_TIMEOUT_OTHERS, &eof_time); reply_mix(CMD_ACK, isOK, 0, 0, 0, 0); switch_off(); } @@ -1103,17 +1113,33 @@ void iClass_ReadCheck(uint8_t blockno, uint8_t keytype) { // used with function select_and_auth (cmdhficlass.c) // which needs to authenticate before doing more things like read/write void iClass_Authentication(uint8_t *mac) { - uint8_t check[] = { ICLASS_CMD_CHECK, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; - uint8_t resp[ICLASS_BUFFER_SIZE]; + + Iso15693InitReader(); + StartCountSspClk(); + + uint8_t card_data[3 * 8] = {0xFF}; + bool use_credit_key = false; + uint32_t eof_time = 0; + + bool isOK = select_iclass_tag(card_data, use_credit_key, &eof_time); + if (isOK == false) { + reply_ng(CMD_HF_ICLASS_AUTH, PM3_SUCCESS, (uint8_t *)&isOK, sizeof(uint8_t)); + return; + } + uint32_t start_time = eof_time + DELAY_ICLASS_VICC_TO_VCD_READER; + + uint8_t check[9] = { ICLASS_CMD_CHECK }; +// uint8_t mac[4]; +// opt_doReaderMAC(uint8_t *cc_nr_p, uint8_t *div_key_p, mac ) // copy MAC to check command (readersignature) check[5] = mac[0]; check[6] = mac[1]; check[7] = mac[2]; check[8] = mac[3]; - //memcpy(check+5, mac, 4); - uint32_t eof_time = 0; - bool isOK = sendCmdGetResponseWithRetries(check, sizeof(check), resp, sizeof(resp), 4, 3, 0, ICLASS_READER_TIMEOUT_OTHERS, &eof_time); + + uint8_t resp[ICLASS_BUFFER_SIZE]; + isOK = iclass_send_cmd_with_retries(check, sizeof(check), resp, sizeof(resp), 4, 3, start_time, ICLASS_READER_TIMEOUT_OTHERS, &eof_time); reply_ng(CMD_HF_ICLASS_AUTH, PM3_SUCCESS, (uint8_t *)&isOK, sizeof(uint8_t)); } @@ -1133,9 +1159,9 @@ void iClass_Authentication_fast(uint64_t arg0, uint64_t arg1, uint8_t *datain) { uint8_t i = 0, isOK = 0; uint8_t lastChunk = ((arg0 >> 8) & 0xFF); bool use_credit_key = ((arg0 >> 16) & 0xFF); - uint8_t keyCount = arg1 & 0xFF; - uint8_t check[] = { ICLASS_CMD_CHECK, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; + + uint8_t check[9] = { ICLASS_CMD_CHECK }; uint8_t resp[ICLASS_BUFFER_SIZE]; uint8_t readcheck_cc[] = { 0x80 | ICLASS_CMD_READCHECK, 0x02 }; @@ -1188,14 +1214,14 @@ void iClass_Authentication_fast(uint64_t arg0, uint64_t arg1, uint8_t *datain) { check[8] = keys[i].mac[3]; // expect 4bytes, 3 retries times.. - isOK = sendCmdGetResponseWithRetries(check, sizeof(check), resp, sizeof(resp), 4, 3, 0, ICLASS_READER_TIMEOUT_OTHERS, &eof_time); + isOK = iclass_send_cmd_with_retries(check, sizeof(check), resp, sizeof(resp), 4, 3, 0, ICLASS_READER_TIMEOUT_OTHERS, &eof_time); if (isOK) goto out; start_time = eof_time + DELAY_ICLASS_VICC_TO_VCD_READER; // Auth Sequence MUST begin with reading e-purse. (block2) // Card selected, now read e-purse (cc) (block2) (only 8 bytes no CRC) - ReaderTransmitIClass(readcheck_cc, sizeof(readcheck_cc), &start_time); + iclass_send_as_reader(readcheck_cc, sizeof(readcheck_cc), &start_time); LED_B_OFF(); } @@ -1220,7 +1246,7 @@ static bool iClass_ReadBlock(uint8_t blockno, uint8_t *data) { uint8_t c[] = {ICLASS_CMD_READ_OR_IDENTIFY, blockno, 0x00, 0x00}; AddCrc(c + 1, 1); uint32_t eof_time = 0; - bool isOK = sendCmdGetResponseWithRetries(c, sizeof(c), resp, sizeof(resp), 10, 10, 0, ICLASS_READER_TIMEOUT_OTHERS, &eof_time); + bool isOK = iclass_send_cmd_with_retries(c, sizeof(c), resp, sizeof(resp), 10, 10, 0, ICLASS_READER_TIMEOUT_OTHERS, &eof_time); memcpy(data, resp, 8); return isOK; } @@ -1286,7 +1312,7 @@ static bool iClass_WriteBlock_ext(uint8_t blockno, uint8_t *data) { uint8_t resp[10] = {0}; uint32_t eof_time = 0; - bool isOK = sendCmdGetResponseWithRetries(write, sizeof(write), resp, sizeof(resp), 10, 3, 0, ICLASS_READER_TIMEOUT_UPDATE, &eof_time); + bool isOK = iclass_send_cmd_with_retries(write, sizeof(write), resp, sizeof(resp), 10, 3, 0, ICLASS_READER_TIMEOUT_UPDATE, &eof_time); if (isOK == false) { return false; } From 57d1ff931648559c99116b2e56a294f34aa04d4a Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 9 Jul 2020 19:41:57 +0200 Subject: [PATCH 0061/1047] fpga --- armsrc/iso15693.c | 2231 +++++++++++++++++++++++---------------------- 1 file changed, 1120 insertions(+), 1111 deletions(-) diff --git a/armsrc/iso15693.c b/armsrc/iso15693.c index 51dc7fac8..f8214b5e4 100644 --- a/armsrc/iso15693.c +++ b/armsrc/iso15693.c @@ -66,7 +66,7 @@ #include "ticks.h" #include "BigBuf.h" #include "crc16.h" - + // Delays in SSP_CLK ticks. // SSP_CLK runs at 13,56MHz / 32 = 423.75kHz when simulating a tag #define DELAY_READER_TO_ARM 8 @@ -124,43 +124,43 @@ static void BuildInventoryResponse(uint8_t *uid); // n ... length of data void CodeIso15693AsReader(uint8_t *cmd, int n) { - ToSendReset(); + ToSendReset(); - // SOF for 1of4 - ToSend[++ToSendMax] = 0x84; //10000100 + // SOF for 1of4 + ToSend[++ToSendMax] = 0x84; //10000100 - // data - for (int i = 0; i < n; i++) { - for (int j = 0; j < 8; j += 2) { - int these = (cmd[i] >> j) & 0x03; - switch(these) { - case 0: - ToSend[++ToSendMax] = 0x40; //01000000 - break; - case 1: - ToSend[++ToSendMax] = 0x10; //00010000 - break; - case 2: - ToSend[++ToSendMax] = 0x04; //00000100 - break; - case 3: - ToSend[++ToSendMax] = 0x01; //00000001 - break; - } - } - } + // data + for (int i = 0; i < n; i++) { + for (int j = 0; j < 8; j += 2) { + int these = (cmd[i] >> j) & 0x03; + switch(these) { + case 0: + ToSend[++ToSendMax] = 0x40; //01000000 + break; + case 1: + ToSend[++ToSendMax] = 0x10; //00010000 + break; + case 2: + ToSend[++ToSendMax] = 0x04; //00000100 + break; + case 3: + ToSend[++ToSendMax] = 0x01; //00000001 + break; + } + } + } - // EOF - ToSend[++ToSendMax] = 0x20; //0010 + 0000 padding + // EOF + ToSend[++ToSendMax] = 0x20; //0010 + 0000 padding - ToSendMax++; + ToSendMax++; } // Encode EOF only static void CodeIso15693AsReaderEOF(void) { - ToSendReset(); - ToSend[++ToSendMax] = 0x20; - ToSendMax++; + ToSendReset(); + ToSend[++ToSendMax] = 0x20; + ToSendMax++; } @@ -169,164 +169,164 @@ static void CodeIso15693AsReaderEOF(void) { // is designed for more robust communication over longer distances static void CodeIso15693AsReader256(uint8_t *cmd, int n) { - ToSendReset(); + ToSendReset(); - // SOF for 1of256 - ToSend[++ToSendMax] = 0x81; //10000001 + // SOF for 1of256 + ToSend[++ToSendMax] = 0x81; //10000001 - // data - for(int i = 0; i < n; i++) { - for (int j = 0; j <= 255; j++) { - if (cmd[i] == j) { - ToSendStuffBit(0); - ToSendStuffBit(1); - } else { - ToSendStuffBit(0); - ToSendStuffBit(0); - } - } - } + // data + for(int i = 0; i < n; i++) { + for (int j = 0; j <= 255; j++) { + if (cmd[i] == j) { + ToSendStuffBit(0); + ToSendStuffBit(1); + } else { + ToSendStuffBit(0); + ToSendStuffBit(0); + } + } + } - // EOF - ToSend[++ToSendMax] = 0x20; //0010 + 0000 padding + // EOF + ToSend[++ToSendMax] = 0x20; //0010 + 0000 padding - ToSendMax++; + ToSendMax++; } static const uint8_t encode_4bits[16] = { 0xaa, 0x6a, 0x9a, 0x5a, 0xa6, 0x66, 0x96, 0x56, 0xa9, 0x69, 0x99, 0x59, 0xa5, 0x65, 0x95, 0x55 }; void CodeIso15693AsTag(uint8_t *cmd, size_t len) { - /* - * SOF comprises 3 parts; - * * An unmodulated time of 56.64 us - * * 24 pulses of 423.75 kHz (fc/32) - * * A logic 1, which starts with an unmodulated time of 18.88us - * followed by 8 pulses of 423.75kHz (fc/32) - * - * EOF comprises 3 parts: - * - A logic 0 (which starts with 8 pulses of fc/32 followed by an unmodulated - * time of 18.88us. - * - 24 pulses of fc/32 - * - An unmodulated time of 56.64 us - * - * A logic 0 starts with 8 pulses of fc/32 - * followed by an unmodulated time of 256/fc (~18,88us). - * - * A logic 0 starts with unmodulated time of 256/fc (~18,88us) followed by - * 8 pulses of fc/32 (also 18.88us) - * - * A bit here becomes 8 pulses of fc/32. Therefore: - * The SOF can be written as 00011101 = 0x1D - * The EOF can be written as 10111000 = 0xb8 - * A logic 1 is 01 - * A logic 0 is 10 - * - * */ + /* + * SOF comprises 3 parts; + * * An unmodulated time of 56.64 us + * * 24 pulses of 423.75 kHz (fc/32) + * * A logic 1, which starts with an unmodulated time of 18.88us + * followed by 8 pulses of 423.75kHz (fc/32) + * + * EOF comprises 3 parts: + * - A logic 0 (which starts with 8 pulses of fc/32 followed by an unmodulated + * time of 18.88us. + * - 24 pulses of fc/32 + * - An unmodulated time of 56.64 us + * + * A logic 0 starts with 8 pulses of fc/32 + * followed by an unmodulated time of 256/fc (~18,88us). + * + * A logic 0 starts with unmodulated time of 256/fc (~18,88us) followed by + * 8 pulses of fc/32 (also 18.88us) + * + * A bit here becomes 8 pulses of fc/32. Therefore: + * The SOF can be written as 00011101 = 0x1D + * The EOF can be written as 10111000 = 0xb8 + * A logic 1 is 01 + * A logic 0 is 10 + * + * */ - ToSendReset(); + ToSendReset(); - // SOF - ToSend[++ToSendMax] = 0x1D; // 00011101 + // SOF + ToSend[++ToSendMax] = 0x1D; // 00011101 - // data - for (int i = 0; i < len; i++) { - ToSend[++ToSendMax] = encode_4bits[cmd[i] & 0xF]; - ToSend[++ToSendMax] = encode_4bits[cmd[i] >> 4]; - } + // data + for (int i = 0; i < len; i++) { + ToSend[++ToSendMax] = encode_4bits[cmd[i] & 0xF]; + ToSend[++ToSendMax] = encode_4bits[cmd[i] >> 4]; + } - // EOF - ToSend[++ToSendMax] = 0xB8; // 10111000 + // EOF + ToSend[++ToSendMax] = 0xB8; // 10111000 - ToSendMax++; + ToSendMax++; } // Transmit the command (to the tag) that was placed in cmd[]. void TransmitTo15693Tag(const uint8_t *cmd, int len, uint32_t *start_time) { - FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER | FPGA_HF_READER_MODE_SEND_FULL_MOD); + FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER | FPGA_HF_READER_MODE_SEND_FULL_MOD); - if (*start_time < DELAY_ARM_TO_TAG) { - *start_time = DELAY_ARM_TO_TAG; - } + if (*start_time < DELAY_ARM_TO_TAG) { + *start_time = DELAY_ARM_TO_TAG; + } - *start_time = (*start_time - DELAY_ARM_TO_TAG) & 0xfffffff0; + *start_time = (*start_time - DELAY_ARM_TO_TAG) & 0xfffffff0; - if (GetCountSspClk() > *start_time) { // we may miss the intended time - *start_time = (GetCountSspClk() + 16) & 0xfffffff0; // next possible time - } + if (GetCountSspClk() > *start_time) { // we may miss the intended time + *start_time = (GetCountSspClk() + 16) & 0xfffffff0; // next possible time + } - while (GetCountSspClk() < *start_time) - /* wait */ ; + while (GetCountSspClk() < *start_time) + /* wait */ ; - LED_B_ON(); - for (int c = 0; c < len; c++) { - uint8_t data = cmd[c]; - for (int i = 0; i < 8; i++) { - uint16_t send_word = (data & 0x80) ? 0xffff : 0x0000; - while (!(AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_TXRDY))) ; - AT91C_BASE_SSC->SSC_THR = send_word; - while (!(AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_TXRDY))) ; - AT91C_BASE_SSC->SSC_THR = send_word; - data <<= 1; - } - WDT_HIT(); - } - LED_B_OFF(); + LED_B_ON(); + for (int c = 0; c < len; c++) { + uint8_t data = cmd[c]; + for (int i = 0; i < 8; i++) { + uint16_t send_word = (data & 0x80) ? 0xffff : 0x0000; + while (!(AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_TXRDY))) ; + AT91C_BASE_SSC->SSC_THR = send_word; + while (!(AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_TXRDY))) ; + AT91C_BASE_SSC->SSC_THR = send_word; + data <<= 1; + } + WDT_HIT(); + } + LED_B_OFF(); - *start_time = *start_time + DELAY_ARM_TO_TAG; + *start_time = *start_time + DELAY_ARM_TO_TAG; } //----------------------------------------------------------------------------- -// Transmit the command (to the reader) that was placed in cmd[]. +// Transmit the tag response (to the reader) that was placed in cmd[]. //----------------------------------------------------------------------------- void TransmitTo15693Reader(const uint8_t *cmd, size_t len, uint32_t *start_time, uint32_t slot_time, bool slow) { - // don't use the FPGA_HF_SIMULATOR_MODULATE_424K_8BIT minor mode. It would spoil GetCountSspClk() - FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_SIMULATOR | FPGA_HF_SIMULATOR_MODULATE_424K); + // don't use the FPGA_HF_SIMULATOR_MODULATE_424K_8BIT minor mode. It would spoil GetCountSspClk() + FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_SIMULATOR | FPGA_HF_SIMULATOR_MODULATE_424K); - uint32_t modulation_start_time = *start_time - DELAY_ARM_TO_READER + 3 * 8; // no need to transfer the unmodulated start of SOF + uint32_t modulation_start_time = *start_time - DELAY_ARM_TO_READER + 3 * 8; // no need to transfer the unmodulated start of SOF - while (GetCountSspClk() > (modulation_start_time & 0xfffffff8) + 3) { // we will miss the intended time - if (slot_time) { - modulation_start_time += slot_time; // use next available slot - } else { - modulation_start_time = (modulation_start_time & 0xfffffff8) + 8; // next possible time - } - } + while (GetCountSspClk() > (modulation_start_time & 0xfffffff8) + 3) { // we will miss the intended time + if (slot_time) { + modulation_start_time += slot_time; // use next available slot + } else { + modulation_start_time = (modulation_start_time & 0xfffffff8) + 8; // next possible time + } + } - while (GetCountSspClk() < (modulation_start_time & 0xfffffff8)) - /* wait */ ; + while (GetCountSspClk() < (modulation_start_time & 0xfffffff8)) + /* wait */ ; - uint8_t shift_delay = modulation_start_time & 0x00000007; + uint8_t shift_delay = modulation_start_time & 0x00000007; - *start_time = modulation_start_time + DELAY_ARM_TO_READER - 3 * 8; + *start_time = modulation_start_time + DELAY_ARM_TO_READER - 3 * 8; - LED_C_ON(); - uint8_t bits_to_shift = 0x00; - uint8_t bits_to_send = 0x00; - for (size_t c = 0; c < len; c++) { - for (int i = (c==0?4:7); i >= 0; i--) { - uint8_t cmd_bits = ((cmd[c] >> i) & 0x01) ? 0xff : 0x00; - for (int j = 0; j < (slow?4:1); ) { - if (AT91C_BASE_SSC->SSC_SR & AT91C_SSC_TXRDY) { - bits_to_send = bits_to_shift << (8 - shift_delay) | cmd_bits >> shift_delay; - AT91C_BASE_SSC->SSC_THR = bits_to_send; - bits_to_shift = cmd_bits; - j++; - } - } - } - WDT_HIT(); - } - // send the remaining bits, padded with 0: - bits_to_send = bits_to_shift << (8 - shift_delay); - for ( ; ; ) { - if (AT91C_BASE_SSC->SSC_SR & AT91C_SSC_TXRDY) { - AT91C_BASE_SSC->SSC_THR = bits_to_send; - break; - } - } - LED_C_OFF(); + LED_C_ON(); + uint8_t bits_to_shift = 0x00; + uint8_t bits_to_send = 0x00; + for (size_t c = 0; c < len; c++) { + for (int i = (c==0?4:7); i >= 0; i--) { + uint8_t cmd_bits = ((cmd[c] >> i) & 0x01) ? 0xff : 0x00; + for (int j = 0; j < (slow?4:1); ) { + if (AT91C_BASE_SSC->SSC_SR & AT91C_SSC_TXRDY) { + bits_to_send = bits_to_shift << (8 - shift_delay) | cmd_bits >> shift_delay; + AT91C_BASE_SSC->SSC_THR = bits_to_send; + bits_to_shift = cmd_bits; + j++; + } + } + } + WDT_HIT(); + } + // send the remaining bits, padded with 0: + bits_to_send = bits_to_shift << (8 - shift_delay); + for ( ; ; ) { + if (AT91C_BASE_SSC->SSC_SR & AT91C_SSC_TXRDY) { + AT91C_BASE_SSC->SSC_THR = bits_to_send; + break; + } + } + LED_C_OFF(); } //============================================================================= @@ -347,270 +347,271 @@ void TransmitTo15693Reader(const uint8_t *cmd, size_t len, uint32_t *start_time, #define MAX_PREVIOUS_AMPLITUDE (-1 - NOISE_THRESHOLD) typedef struct DecodeTag { - enum { - STATE_TAG_SOF_LOW, - STATE_TAG_SOF_RISING_EDGE, - STATE_TAG_SOF_HIGH, - STATE_TAG_SOF_HIGH_END, - STATE_TAG_RECEIVING_DATA, - STATE_TAG_EOF, - STATE_TAG_EOF_TAIL - } state; - int bitCount; - int posCount; - enum { - LOGIC0, - LOGIC1, - SOF_PART1, - SOF_PART2 - } lastBit; - uint16_t shiftReg; - uint16_t max_len; - uint8_t *output; - int len; - int sum1, sum2; - int threshold_sof; - int threshold_half; - uint16_t previous_amplitude; + enum { + STATE_TAG_SOF_LOW, + STATE_TAG_SOF_RISING_EDGE, + STATE_TAG_SOF_HIGH, + STATE_TAG_SOF_HIGH_END, + STATE_TAG_RECEIVING_DATA, + STATE_TAG_EOF, + STATE_TAG_EOF_TAIL + } state; + int bitCount; + int posCount; + enum { + LOGIC0, + LOGIC1, + SOF_PART1, + SOF_PART2 + } lastBit; + uint16_t shiftReg; + uint16_t max_len; + uint8_t *output; + int len; + int sum1; + int sum2; + int threshold_sof; + int threshold_half; + uint16_t previous_amplitude; } DecodeTag_t; //----------------------------------------------------------------------------- // DEMODULATE tag answer //----------------------------------------------------------------------------- static RAMFUNC int Handle15693SamplesFromTag(uint16_t amplitude, DecodeTag_t *DecodeTag) { - switch (DecodeTag->state) { - case STATE_TAG_SOF_LOW: - // waiting for a rising edge - if (amplitude > NOISE_THRESHOLD + DecodeTag->previous_amplitude) { - if (DecodeTag->posCount > 10) { - DecodeTag->threshold_sof = amplitude - DecodeTag->previous_amplitude; // to be divided by 2 - DecodeTag->threshold_half = 0; - DecodeTag->state = STATE_TAG_SOF_RISING_EDGE; - } else { - DecodeTag->posCount = 0; - } - } else { - DecodeTag->posCount++; - DecodeTag->previous_amplitude = amplitude; - } - break; + switch (DecodeTag->state) { + case STATE_TAG_SOF_LOW: + // waiting for a rising edge + if (amplitude > NOISE_THRESHOLD + DecodeTag->previous_amplitude) { + if (DecodeTag->posCount > 10) { + DecodeTag->threshold_sof = amplitude - DecodeTag->previous_amplitude; // to be divided by 2 + DecodeTag->threshold_half = 0; + DecodeTag->state = STATE_TAG_SOF_RISING_EDGE; + } else { + DecodeTag->posCount = 0; + } + } else { + DecodeTag->posCount++; + DecodeTag->previous_amplitude = amplitude; + } + break; - case STATE_TAG_SOF_RISING_EDGE: - if (amplitude > DecodeTag->threshold_sof + DecodeTag->previous_amplitude) { // edge still rising - if (amplitude > DecodeTag->threshold_sof + DecodeTag->threshold_sof) { // steeper edge, take this as time reference - DecodeTag->posCount = 1; - } else { - DecodeTag->posCount = 2; - } - DecodeTag->threshold_sof = (amplitude - DecodeTag->previous_amplitude) / 2; - } else { - DecodeTag->posCount = 2; - DecodeTag->threshold_sof = DecodeTag->threshold_sof/2; - } - // DecodeTag->posCount = 2; - DecodeTag->state = STATE_TAG_SOF_HIGH; - break; + case STATE_TAG_SOF_RISING_EDGE: + if (amplitude > DecodeTag->threshold_sof + DecodeTag->previous_amplitude) { // edge still rising + if (amplitude > DecodeTag->threshold_sof + DecodeTag->threshold_sof) { // steeper edge, take this as time reference + DecodeTag->posCount = 1; + } else { + DecodeTag->posCount = 2; + } + DecodeTag->threshold_sof = (amplitude - DecodeTag->previous_amplitude) / 2; + } else { + DecodeTag->posCount = 2; + DecodeTag->threshold_sof = DecodeTag->threshold_sof/2; + } + // DecodeTag->posCount = 2; + DecodeTag->state = STATE_TAG_SOF_HIGH; + break; - case STATE_TAG_SOF_HIGH: - // waiting for 10 times high. Take average over the last 8 - if (amplitude > DecodeTag->threshold_sof) { - DecodeTag->posCount++; - if (DecodeTag->posCount > 2) { - DecodeTag->threshold_half += amplitude; // keep track of average high value - } - if (DecodeTag->posCount == 10) { - DecodeTag->threshold_half >>= 2; // (4 times 1/2 average) - DecodeTag->state = STATE_TAG_SOF_HIGH_END; - } - } else { // high phase was too short - DecodeTag->posCount = 1; - DecodeTag->previous_amplitude = amplitude; - DecodeTag->state = STATE_TAG_SOF_LOW; - } - break; + case STATE_TAG_SOF_HIGH: + // waiting for 10 times high. Take average over the last 8 + if (amplitude > DecodeTag->threshold_sof) { + DecodeTag->posCount++; + if (DecodeTag->posCount > 2) { + DecodeTag->threshold_half += amplitude; // keep track of average high value + } + if (DecodeTag->posCount == 10) { + DecodeTag->threshold_half >>= 2; // (4 times 1/2 average) + DecodeTag->state = STATE_TAG_SOF_HIGH_END; + } + } else { // high phase was too short + DecodeTag->posCount = 1; + DecodeTag->previous_amplitude = amplitude; + DecodeTag->state = STATE_TAG_SOF_LOW; + } + break; - case STATE_TAG_SOF_HIGH_END: - // check for falling edge - if (DecodeTag->posCount == 13 && amplitude < DecodeTag->threshold_sof) { - DecodeTag->lastBit = SOF_PART1; // detected 1st part of SOF (12 samples low and 12 samples high) - DecodeTag->shiftReg = 0; - DecodeTag->bitCount = 0; - DecodeTag->len = 0; - DecodeTag->sum1 = amplitude; - DecodeTag->sum2 = 0; - DecodeTag->posCount = 2; - DecodeTag->state = STATE_TAG_RECEIVING_DATA; - // FpgaDisableTracing(); // DEBUGGING - // Dbprintf("amplitude = %d, threshold_sof = %d, threshold_half/4 = %d, previous_amplitude = %d", - // amplitude, - // DecodeTag->threshold_sof, - // DecodeTag->threshold_half/4, - // DecodeTag->previous_amplitude); // DEBUGGING - LED_C_ON(); - } else { - DecodeTag->posCount++; - if (DecodeTag->posCount > 13) { // high phase too long - DecodeTag->posCount = 0; - DecodeTag->previous_amplitude = amplitude; - DecodeTag->state = STATE_TAG_SOF_LOW; - LED_C_OFF(); - } - } - break; + case STATE_TAG_SOF_HIGH_END: + // check for falling edge + if (DecodeTag->posCount == 13 && amplitude < DecodeTag->threshold_sof) { + DecodeTag->lastBit = SOF_PART1; // detected 1st part of SOF (12 samples low and 12 samples high) + DecodeTag->shiftReg = 0; + DecodeTag->bitCount = 0; + DecodeTag->len = 0; + DecodeTag->sum1 = amplitude; + DecodeTag->sum2 = 0; + DecodeTag->posCount = 2; + DecodeTag->state = STATE_TAG_RECEIVING_DATA; + // FpgaDisableTracing(); // DEBUGGING + // Dbprintf("amplitude = %d, threshold_sof = %d, threshold_half/4 = %d, previous_amplitude = %d", + // amplitude, + // DecodeTag->threshold_sof, + // DecodeTag->threshold_half/4, + // DecodeTag->previous_amplitude); // DEBUGGING + LED_C_ON(); + } else { + DecodeTag->posCount++; + if (DecodeTag->posCount > 13) { // high phase too long + DecodeTag->posCount = 0; + DecodeTag->previous_amplitude = amplitude; + DecodeTag->state = STATE_TAG_SOF_LOW; + LED_C_OFF(); + } + } + break; - case STATE_TAG_RECEIVING_DATA: - // FpgaDisableTracing(); // DEBUGGING - // Dbprintf("amplitude = %d, threshold_sof = %d, threshold_half/4 = %d, previous_amplitude = %d", - // amplitude, - // DecodeTag->threshold_sof, - // DecodeTag->threshold_half/4, - // DecodeTag->previous_amplitude); // DEBUGGING - if (DecodeTag->posCount == 1) { - DecodeTag->sum1 = 0; - DecodeTag->sum2 = 0; - } - if (DecodeTag->posCount <= 4) { - DecodeTag->sum1 += amplitude; - } else { - DecodeTag->sum2 += amplitude; - } - if (DecodeTag->posCount == 8) { - if (DecodeTag->sum1 > DecodeTag->threshold_half && DecodeTag->sum2 > DecodeTag->threshold_half) { // modulation in both halves - if (DecodeTag->lastBit == LOGIC0) { // this was already part of EOF - DecodeTag->state = STATE_TAG_EOF; - } else { - DecodeTag->posCount = 0; - DecodeTag->previous_amplitude = amplitude; - DecodeTag->state = STATE_TAG_SOF_LOW; - LED_C_OFF(); - } - } else if (DecodeTag->sum1 < DecodeTag->threshold_half && DecodeTag->sum2 > DecodeTag->threshold_half) { // modulation in second half - // logic 1 - if (DecodeTag->lastBit == SOF_PART1) { // still part of SOF - DecodeTag->lastBit = SOF_PART2; // SOF completed - } else { - DecodeTag->lastBit = LOGIC1; - DecodeTag->shiftReg >>= 1; - DecodeTag->shiftReg |= 0x80; - DecodeTag->bitCount++; - if (DecodeTag->bitCount == 8) { - DecodeTag->output[DecodeTag->len] = DecodeTag->shiftReg; - DecodeTag->len++; - // if (DecodeTag->shiftReg == 0x12 && DecodeTag->len == 1) FpgaDisableTracing(); // DEBUGGING - if (DecodeTag->len > DecodeTag->max_len) { - // buffer overflow, give up - LED_C_OFF(); - return true; - } - DecodeTag->bitCount = 0; - DecodeTag->shiftReg = 0; - } - } - } else if (DecodeTag->sum1 > DecodeTag->threshold_half && DecodeTag->sum2 < DecodeTag->threshold_half) { // modulation in first half - // logic 0 - if (DecodeTag->lastBit == SOF_PART1) { // incomplete SOF - DecodeTag->posCount = 0; - DecodeTag->previous_amplitude = amplitude; - DecodeTag->state = STATE_TAG_SOF_LOW; - LED_C_OFF(); - } else { - DecodeTag->lastBit = LOGIC0; - DecodeTag->shiftReg >>= 1; - DecodeTag->bitCount++; - if (DecodeTag->bitCount == 8) { - DecodeTag->output[DecodeTag->len] = DecodeTag->shiftReg; - DecodeTag->len++; - // if (DecodeTag->shiftReg == 0x12 && DecodeTag->len == 1) FpgaDisableTracing(); // DEBUGGING - if (DecodeTag->len > DecodeTag->max_len) { - // buffer overflow, give up - DecodeTag->posCount = 0; - DecodeTag->previous_amplitude = amplitude; - DecodeTag->state = STATE_TAG_SOF_LOW; - LED_C_OFF(); - } - DecodeTag->bitCount = 0; - DecodeTag->shiftReg = 0; - } - } - } else { // no modulation - if (DecodeTag->lastBit == SOF_PART2) { // only SOF (this is OK for iClass) - LED_C_OFF(); - return true; - } else { - DecodeTag->posCount = 0; - DecodeTag->state = STATE_TAG_SOF_LOW; - LED_C_OFF(); - } - } - DecodeTag->posCount = 0; - } - DecodeTag->posCount++; - break; + case STATE_TAG_RECEIVING_DATA: + // FpgaDisableTracing(); // DEBUGGING + // Dbprintf("amplitude = %d, threshold_sof = %d, threshold_half/4 = %d, previous_amplitude = %d", + // amplitude, + // DecodeTag->threshold_sof, + // DecodeTag->threshold_half/4, + // DecodeTag->previous_amplitude); // DEBUGGING + if (DecodeTag->posCount == 1) { + DecodeTag->sum1 = 0; + DecodeTag->sum2 = 0; + } + if (DecodeTag->posCount <= 4) { + DecodeTag->sum1 += amplitude; + } else { + DecodeTag->sum2 += amplitude; + } + if (DecodeTag->posCount == 8) { + if (DecodeTag->sum1 > DecodeTag->threshold_half && DecodeTag->sum2 > DecodeTag->threshold_half) { // modulation in both halves + if (DecodeTag->lastBit == LOGIC0) { // this was already part of EOF + DecodeTag->state = STATE_TAG_EOF; + } else { + DecodeTag->posCount = 0; + DecodeTag->previous_amplitude = amplitude; + DecodeTag->state = STATE_TAG_SOF_LOW; + LED_C_OFF(); + } + } else if (DecodeTag->sum1 < DecodeTag->threshold_half && DecodeTag->sum2 > DecodeTag->threshold_half) { // modulation in second half + // logic 1 + if (DecodeTag->lastBit == SOF_PART1) { // still part of SOF + DecodeTag->lastBit = SOF_PART2; // SOF completed + } else { + DecodeTag->lastBit = LOGIC1; + DecodeTag->shiftReg >>= 1; + DecodeTag->shiftReg |= 0x80; + DecodeTag->bitCount++; + if (DecodeTag->bitCount == 8) { + DecodeTag->output[DecodeTag->len] = DecodeTag->shiftReg; + DecodeTag->len++; + // if (DecodeTag->shiftReg == 0x12 && DecodeTag->len == 1) FpgaDisableTracing(); // DEBUGGING + if (DecodeTag->len > DecodeTag->max_len) { + // buffer overflow, give up + LED_C_OFF(); + return true; + } + DecodeTag->bitCount = 0; + DecodeTag->shiftReg = 0; + } + } + } else if (DecodeTag->sum1 > DecodeTag->threshold_half && DecodeTag->sum2 < DecodeTag->threshold_half) { // modulation in first half + // logic 0 + if (DecodeTag->lastBit == SOF_PART1) { // incomplete SOF + DecodeTag->posCount = 0; + DecodeTag->previous_amplitude = amplitude; + DecodeTag->state = STATE_TAG_SOF_LOW; + LED_C_OFF(); + } else { + DecodeTag->lastBit = LOGIC0; + DecodeTag->shiftReg >>= 1; + DecodeTag->bitCount++; + if (DecodeTag->bitCount == 8) { + DecodeTag->output[DecodeTag->len] = DecodeTag->shiftReg; + DecodeTag->len++; + // if (DecodeTag->shiftReg == 0x12 && DecodeTag->len == 1) FpgaDisableTracing(); // DEBUGGING + if (DecodeTag->len > DecodeTag->max_len) { + // buffer overflow, give up + DecodeTag->posCount = 0; + DecodeTag->previous_amplitude = amplitude; + DecodeTag->state = STATE_TAG_SOF_LOW; + LED_C_OFF(); + } + DecodeTag->bitCount = 0; + DecodeTag->shiftReg = 0; + } + } + } else { // no modulation + if (DecodeTag->lastBit == SOF_PART2) { // only SOF (this is OK for iClass) + LED_C_OFF(); + return true; + } else { + DecodeTag->posCount = 0; + DecodeTag->state = STATE_TAG_SOF_LOW; + LED_C_OFF(); + } + } + DecodeTag->posCount = 0; + } + DecodeTag->posCount++; + break; - case STATE_TAG_EOF: - if (DecodeTag->posCount == 1) { - DecodeTag->sum1 = 0; - DecodeTag->sum2 = 0; - } - if (DecodeTag->posCount <= 4) { - DecodeTag->sum1 += amplitude; - } else { - DecodeTag->sum2 += amplitude; - } - if (DecodeTag->posCount == 8) { - if (DecodeTag->sum1 > DecodeTag->threshold_half && DecodeTag->sum2 < DecodeTag->threshold_half) { // modulation in first half - DecodeTag->posCount = 0; - DecodeTag->state = STATE_TAG_EOF_TAIL; - } else { - DecodeTag->posCount = 0; - DecodeTag->previous_amplitude = amplitude; - DecodeTag->state = STATE_TAG_SOF_LOW; - LED_C_OFF(); - } - } - DecodeTag->posCount++; - break; + case STATE_TAG_EOF: + if (DecodeTag->posCount == 1) { + DecodeTag->sum1 = 0; + DecodeTag->sum2 = 0; + } + if (DecodeTag->posCount <= 4) { + DecodeTag->sum1 += amplitude; + } else { + DecodeTag->sum2 += amplitude; + } + if (DecodeTag->posCount == 8) { + if (DecodeTag->sum1 > DecodeTag->threshold_half && DecodeTag->sum2 < DecodeTag->threshold_half) { // modulation in first half + DecodeTag->posCount = 0; + DecodeTag->state = STATE_TAG_EOF_TAIL; + } else { + DecodeTag->posCount = 0; + DecodeTag->previous_amplitude = amplitude; + DecodeTag->state = STATE_TAG_SOF_LOW; + LED_C_OFF(); + } + } + DecodeTag->posCount++; + break; - case STATE_TAG_EOF_TAIL: - if (DecodeTag->posCount == 1) { - DecodeTag->sum1 = 0; - DecodeTag->sum2 = 0; - } - if (DecodeTag->posCount <= 4) { - DecodeTag->sum1 += amplitude; - } else { - DecodeTag->sum2 += amplitude; - } - if (DecodeTag->posCount == 8) { - if (DecodeTag->sum1 < DecodeTag->threshold_half && DecodeTag->sum2 < DecodeTag->threshold_half) { // no modulation in both halves - LED_C_OFF(); - return true; - } else { - DecodeTag->posCount = 0; - DecodeTag->previous_amplitude = amplitude; - DecodeTag->state = STATE_TAG_SOF_LOW; - LED_C_OFF(); - } - } - DecodeTag->posCount++; - break; - } + case STATE_TAG_EOF_TAIL: + if (DecodeTag->posCount == 1) { + DecodeTag->sum1 = 0; + DecodeTag->sum2 = 0; + } + if (DecodeTag->posCount <= 4) { + DecodeTag->sum1 += amplitude; + } else { + DecodeTag->sum2 += amplitude; + } + if (DecodeTag->posCount == 8) { + if (DecodeTag->sum1 < DecodeTag->threshold_half && DecodeTag->sum2 < DecodeTag->threshold_half) { // no modulation in both halves + LED_C_OFF(); + return true; + } else { + DecodeTag->posCount = 0; + DecodeTag->previous_amplitude = amplitude; + DecodeTag->state = STATE_TAG_SOF_LOW; + LED_C_OFF(); + } + } + DecodeTag->posCount++; + break; + } - return false; + return false; } static void DecodeTagInit(DecodeTag_t *DecodeTag, uint8_t *data, uint16_t max_len) { - DecodeTag->previous_amplitude = MAX_PREVIOUS_AMPLITUDE; - DecodeTag->posCount = 0; - DecodeTag->state = STATE_TAG_SOF_LOW; - DecodeTag->output = data; - DecodeTag->max_len = max_len; + DecodeTag->previous_amplitude = MAX_PREVIOUS_AMPLITUDE; + DecodeTag->posCount = 0; + DecodeTag->state = STATE_TAG_SOF_LOW; + DecodeTag->output = data; + DecodeTag->max_len = max_len; } static void DecodeTagReset(DecodeTag_t *DecodeTag) { - DecodeTag->posCount = 0; - DecodeTag->state = STATE_TAG_SOF_LOW; - DecodeTag->previous_amplitude = MAX_PREVIOUS_AMPLITUDE; + DecodeTag->posCount = 0; + DecodeTag->state = STATE_TAG_SOF_LOW; + DecodeTag->previous_amplitude = MAX_PREVIOUS_AMPLITUDE; } @@ -619,90 +620,97 @@ static void DecodeTagReset(DecodeTag_t *DecodeTag) { */ int GetIso15693AnswerFromTag(uint8_t* response, uint16_t max_len, uint16_t timeout, uint32_t *eof_time) { - int samples = 0; - int ret = 0; + int samples = 0; + int ret = 0; - uint16_t dmaBuf[ISO15693_DMA_BUFFER_SIZE]; + uint16_t dmaBuf[ISO15693_DMA_BUFFER_SIZE]; - // the Decoder data structure - DecodeTag_t DecodeTag = { 0 }; - DecodeTagInit(&DecodeTag, response, max_len); + // the Decoder data structure + DecodeTag_t DecodeTag = { 0 }; + DecodeTagInit(&DecodeTag, response, max_len); - // wait for last transfer to complete - while (!(AT91C_BASE_SSC->SSC_SR & AT91C_SSC_TXEMPTY)); + // wait for last transfer to complete + while (!(AT91C_BASE_SSC->SSC_SR & AT91C_SSC_TXEMPTY)); - // And put the FPGA in the appropriate mode - FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER | FPGA_HF_READER_SUBCARRIER_424_KHZ | FPGA_HF_READER_MODE_RECEIVE_AMPLITUDE); + // And put the FPGA in the appropriate mode + FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER | FPGA_HF_READER_SUBCARRIER_424_KHZ | FPGA_HF_READER_MODE_RECEIVE_AMPLITUDE); - // Setup and start DMA. - FpgaSetupSsc(FPGA_MAJOR_MODE_HF_READER); - FpgaSetupSscDma((uint8_t*) dmaBuf, ISO15693_DMA_BUFFER_SIZE); - uint32_t dma_start_time = 0; - uint16_t *upTo = dmaBuf; + // Setup and start DMA. + FpgaSetupSsc(FPGA_MAJOR_MODE_HF_READER); + FpgaSetupSscDma((uint8_t*) dmaBuf, ISO15693_DMA_BUFFER_SIZE); + uint32_t dma_start_time = 0; + uint16_t *upTo = dmaBuf; - for(;;) { - uint16_t behindBy = ((uint16_t*)AT91C_BASE_PDC_SSC->PDC_RPR - upTo) & (ISO15693_DMA_BUFFER_SIZE-1); + for(;;) { + uint16_t behindBy = ((uint16_t*)AT91C_BASE_PDC_SSC->PDC_RPR - upTo) & (ISO15693_DMA_BUFFER_SIZE-1); - if (behindBy == 0) continue; + if (behindBy == 0) continue; - samples++; - if (samples == 1) { - // DMA has transferred the very first data - dma_start_time = GetCountSspClk() & 0xfffffff0; - } + samples++; + if (samples == 1) { + // DMA has transferred the very first data + dma_start_time = GetCountSspClk() & 0xfffffff0; + } - uint16_t tagdata = *upTo++; + uint16_t tagdata = *upTo++; - if(upTo >= dmaBuf + ISO15693_DMA_BUFFER_SIZE) { // we have read all of the DMA buffer content. - upTo = dmaBuf; // start reading the circular buffer from the beginning - if (behindBy > (9*ISO15693_DMA_BUFFER_SIZE/10)) { - Dbprintf("About to blow circular buffer - aborted! behindBy=%d", behindBy); - ret = -1; - break; - } - } - if (AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_ENDRX)) { // DMA Counter Register had reached 0, already rotated. - AT91C_BASE_PDC_SSC->PDC_RNPR = (uint32_t) dmaBuf; // refresh the DMA Next Buffer and - AT91C_BASE_PDC_SSC->PDC_RNCR = ISO15693_DMA_BUFFER_SIZE; // DMA Next Counter registers - } + if(upTo >= dmaBuf + ISO15693_DMA_BUFFER_SIZE) { // we have read all of the DMA buffer content. + upTo = dmaBuf; // start reading the circular buffer from the beginning + if (behindBy > (9 * ISO15693_DMA_BUFFER_SIZE / 10)) { + Dbprintf("About to blow circular buffer - aborted! behindBy=%d", behindBy); + ret = -1; + break; + } + } + if (AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_ENDRX)) { // DMA Counter Register had reached 0, already rotated. + AT91C_BASE_PDC_SSC->PDC_RNPR = (uint32_t) dmaBuf; // refresh the DMA Next Buffer and + AT91C_BASE_PDC_SSC->PDC_RNCR = ISO15693_DMA_BUFFER_SIZE; // DMA Next Counter registers + } - if (Handle15693SamplesFromTag(tagdata, &DecodeTag)) { - *eof_time = dma_start_time + samples*16 - DELAY_TAG_TO_ARM; // end of EOF - if (DecodeTag.lastBit == SOF_PART2) { - *eof_time -= 8*16; // needed 8 additional samples to confirm single SOF (iCLASS) - } - if (DecodeTag.len > DecodeTag.max_len) { - ret = -2; // buffer overflow - } - break; - } + if (Handle15693SamplesFromTag(tagdata, &DecodeTag)) { + *eof_time = dma_start_time + (samples * 16) - DELAY_TAG_TO_ARM; // end of EOF + if (DecodeTag.lastBit == SOF_PART2) { + *eof_time -= (8 * 16); // needed 8 additional samples to confirm single SOF (iCLASS) + } + if (DecodeTag.len > DecodeTag.max_len) { + ret = -2; // buffer overflow + } + break; + } - if (samples > timeout && DecodeTag.state < STATE_TAG_RECEIVING_DATA) { - ret = -1; // timeout - break; - } + if (samples > timeout && DecodeTag.state < STATE_TAG_RECEIVING_DATA) { + ret = -1; // timeout + break; + } - } + } - FpgaDisableSscDma(); + FpgaDisableSscDma(); - if (DBGLEVEL >= DBG_EXTENDED) Dbprintf("samples = %d, ret = %d, Decoder: state = %d, lastBit = %d, len = %d, bitCount = %d, posCount = %d", - samples, ret, DecodeTag.state, DecodeTag.lastBit, DecodeTag.len, DecodeTag.bitCount, DecodeTag.posCount); + uint32_t sof_time = *eof_time + - DecodeTag.len * 8 * 8 * 16 // time for byte transfers + - 32 * 16 // time for SOF transfer + - (DecodeTag.lastBit != SOF_PART2?32*16:0); // time for EOF transfer - if (ret < 0) { - return ret; - } + if (DBGLEVEL >= DBG_EXTENDED) { + Dbprintf("samples = %d, ret = %d, Decoder: state = %d, lastBit = %d, len = %d, bitCount = %d, posCount = %d", + samples, + ret, + DecodeTag.state, + DecodeTag.lastBit, + DecodeTag.len, + DecodeTag.bitCount, + DecodeTag.posCount + ); + Dbprintf("timing: sof_time = %d, eof_time = %d", (sof_time * 4), (*eof_time * 4)); + } - uint32_t sof_time = *eof_time - - DecodeTag.len * 8 * 8 * 16 // time for byte transfers - - 32 * 16 // time for SOF transfer - - (DecodeTag.lastBit != SOF_PART2?32*16:0); // time for EOF transfer + LogTrace(DecodeTag.output, DecodeTag.len, (sof_time * 4), (*eof_time * 4), NULL, false); - if (DBGLEVEL >= DBG_EXTENDED) Dbprintf("timing: sof_time = %d, eof_time = %d", sof_time, *eof_time); - - LogTrace(DecodeTag.output, DecodeTag.len, sof_time*4, *eof_time*4, NULL, false); - - return DecodeTag.len; + if (ret < 0) { + return ret; + } + return DecodeTag.len; } @@ -720,279 +728,279 @@ int GetIso15693AnswerFromTag(uint8_t* response, uint16_t max_len, uint16_t timeo //============================================================================= typedef struct DecodeReader { - enum { - STATE_READER_UNSYNCD, - STATE_READER_AWAIT_1ST_FALLING_EDGE_OF_SOF, - STATE_READER_AWAIT_1ST_RISING_EDGE_OF_SOF, - STATE_READER_AWAIT_2ND_FALLING_EDGE_OF_SOF, - STATE_READER_AWAIT_2ND_RISING_EDGE_OF_SOF, - STATE_READER_AWAIT_END_OF_SOF_1_OUT_OF_4, - STATE_READER_RECEIVE_DATA_1_OUT_OF_4, - STATE_READER_RECEIVE_DATA_1_OUT_OF_256, - STATE_READER_RECEIVE_JAMMING - } state; - enum { - CODING_1_OUT_OF_4, - CODING_1_OUT_OF_256 - } Coding; - uint8_t shiftReg; - uint8_t bitCount; - int byteCount; - int byteCountMax; - int posCount; - int sum1, sum2; - uint8_t *output; - uint8_t jam_search_len; - uint8_t *jam_search_string; + enum { + STATE_READER_UNSYNCD, + STATE_READER_AWAIT_1ST_FALLING_EDGE_OF_SOF, + STATE_READER_AWAIT_1ST_RISING_EDGE_OF_SOF, + STATE_READER_AWAIT_2ND_FALLING_EDGE_OF_SOF, + STATE_READER_AWAIT_2ND_RISING_EDGE_OF_SOF, + STATE_READER_AWAIT_END_OF_SOF_1_OUT_OF_4, + STATE_READER_RECEIVE_DATA_1_OUT_OF_4, + STATE_READER_RECEIVE_DATA_1_OUT_OF_256, + STATE_READER_RECEIVE_JAMMING + } state; + enum { + CODING_1_OUT_OF_4, + CODING_1_OUT_OF_256 + } Coding; + uint8_t shiftReg; + uint8_t bitCount; + int byteCount; + int byteCountMax; + int posCount; + int sum1, sum2; + uint8_t *output; + uint8_t jam_search_len; + uint8_t *jam_search_string; } DecodeReader_t; static void DecodeReaderInit(DecodeReader_t* DecodeReader, uint8_t *data, uint16_t max_len, uint8_t jam_search_len, uint8_t *jam_search_string) { - DecodeReader->output = data; - DecodeReader->byteCountMax = max_len; - DecodeReader->state = STATE_READER_UNSYNCD; - DecodeReader->byteCount = 0; - DecodeReader->bitCount = 0; - DecodeReader->posCount = 1; - DecodeReader->shiftReg = 0; - DecodeReader->jam_search_len = jam_search_len; - DecodeReader->jam_search_string = jam_search_string; + DecodeReader->output = data; + DecodeReader->byteCountMax = max_len; + DecodeReader->state = STATE_READER_UNSYNCD; + DecodeReader->byteCount = 0; + DecodeReader->bitCount = 0; + DecodeReader->posCount = 1; + DecodeReader->shiftReg = 0; + DecodeReader->jam_search_len = jam_search_len; + DecodeReader->jam_search_string = jam_search_string; } static void DecodeReaderReset(DecodeReader_t* DecodeReader) { - DecodeReader->state = STATE_READER_UNSYNCD; + DecodeReader->state = STATE_READER_UNSYNCD; } static RAMFUNC int Handle15693SampleFromReader(bool bit, DecodeReader_t *DecodeReader) { - switch (DecodeReader->state) { - case STATE_READER_UNSYNCD: - // wait for unmodulated carrier - if (bit) { - DecodeReader->state = STATE_READER_AWAIT_1ST_FALLING_EDGE_OF_SOF; - } - break; + switch (DecodeReader->state) { + case STATE_READER_UNSYNCD: + // wait for unmodulated carrier + if (bit) { + DecodeReader->state = STATE_READER_AWAIT_1ST_FALLING_EDGE_OF_SOF; + } + break; - case STATE_READER_AWAIT_1ST_FALLING_EDGE_OF_SOF: - if (!bit) { - // we went low, so this could be the beginning of a SOF - DecodeReader->posCount = 1; - DecodeReader->state = STATE_READER_AWAIT_1ST_RISING_EDGE_OF_SOF; - } - break; + case STATE_READER_AWAIT_1ST_FALLING_EDGE_OF_SOF: + if (!bit) { + // we went low, so this could be the beginning of a SOF + DecodeReader->posCount = 1; + DecodeReader->state = STATE_READER_AWAIT_1ST_RISING_EDGE_OF_SOF; + } + break; - case STATE_READER_AWAIT_1ST_RISING_EDGE_OF_SOF: - DecodeReader->posCount++; - if (bit) { // detected rising edge - if (DecodeReader->posCount < 4) { // rising edge too early (nominally expected at 5) - DecodeReader->state = STATE_READER_AWAIT_1ST_FALLING_EDGE_OF_SOF; - } else { // SOF - DecodeReader->state = STATE_READER_AWAIT_2ND_FALLING_EDGE_OF_SOF; - } - } else { - if (DecodeReader->posCount > 5) { // stayed low for too long - DecodeReaderReset(DecodeReader); - } else { - // do nothing, keep waiting - } - } - break; + case STATE_READER_AWAIT_1ST_RISING_EDGE_OF_SOF: + DecodeReader->posCount++; + if (bit) { // detected rising edge + if (DecodeReader->posCount < 4) { // rising edge too early (nominally expected at 5) + DecodeReader->state = STATE_READER_AWAIT_1ST_FALLING_EDGE_OF_SOF; + } else { // SOF + DecodeReader->state = STATE_READER_AWAIT_2ND_FALLING_EDGE_OF_SOF; + } + } else { + if (DecodeReader->posCount > 5) { // stayed low for too long + DecodeReaderReset(DecodeReader); + } else { + // do nothing, keep waiting + } + } + break; - case STATE_READER_AWAIT_2ND_FALLING_EDGE_OF_SOF: - DecodeReader->posCount++; - if (!bit) { // detected a falling edge - if (DecodeReader->posCount < 20) { // falling edge too early (nominally expected at 21 earliest) - DecodeReaderReset(DecodeReader); - } else if (DecodeReader->posCount < 23) { // SOF for 1 out of 4 coding - DecodeReader->Coding = CODING_1_OUT_OF_4; - DecodeReader->state = STATE_READER_AWAIT_2ND_RISING_EDGE_OF_SOF; - } else if (DecodeReader->posCount < 28) { // falling edge too early (nominally expected at 29 latest) - DecodeReaderReset(DecodeReader); - } else { // SOF for 1 out of 256 coding - DecodeReader->Coding = CODING_1_OUT_OF_256; - DecodeReader->state = STATE_READER_AWAIT_2ND_RISING_EDGE_OF_SOF; - } - } else { - if (DecodeReader->posCount > 29) { // stayed high for too long - DecodeReader->state = STATE_READER_AWAIT_1ST_FALLING_EDGE_OF_SOF; - } else { - // do nothing, keep waiting - } - } - break; + case STATE_READER_AWAIT_2ND_FALLING_EDGE_OF_SOF: + DecodeReader->posCount++; + if (!bit) { // detected a falling edge + if (DecodeReader->posCount < 20) { // falling edge too early (nominally expected at 21 earliest) + DecodeReaderReset(DecodeReader); + } else if (DecodeReader->posCount < 23) { // SOF for 1 out of 4 coding + DecodeReader->Coding = CODING_1_OUT_OF_4; + DecodeReader->state = STATE_READER_AWAIT_2ND_RISING_EDGE_OF_SOF; + } else if (DecodeReader->posCount < 28) { // falling edge too early (nominally expected at 29 latest) + DecodeReaderReset(DecodeReader); + } else { // SOF for 1 out of 256 coding + DecodeReader->Coding = CODING_1_OUT_OF_256; + DecodeReader->state = STATE_READER_AWAIT_2ND_RISING_EDGE_OF_SOF; + } + } else { + if (DecodeReader->posCount > 29) { // stayed high for too long + DecodeReader->state = STATE_READER_AWAIT_1ST_FALLING_EDGE_OF_SOF; + } else { + // do nothing, keep waiting + } + } + break; - case STATE_READER_AWAIT_2ND_RISING_EDGE_OF_SOF: - DecodeReader->posCount++; - if (bit) { // detected rising edge - if (DecodeReader->Coding == CODING_1_OUT_OF_256) { - if (DecodeReader->posCount < 32) { // rising edge too early (nominally expected at 33) - DecodeReader->state = STATE_READER_AWAIT_1ST_FALLING_EDGE_OF_SOF; - } else { - DecodeReader->posCount = 1; - DecodeReader->bitCount = 0; - DecodeReader->byteCount = 0; - DecodeReader->sum1 = 1; - DecodeReader->state = STATE_READER_RECEIVE_DATA_1_OUT_OF_256; - LED_B_ON(); - } - } else { // CODING_1_OUT_OF_4 - if (DecodeReader->posCount < 24) { // rising edge too early (nominally expected at 25) - DecodeReader->state = STATE_READER_AWAIT_1ST_FALLING_EDGE_OF_SOF; - } else { - DecodeReader->posCount = 1; - DecodeReader->state = STATE_READER_AWAIT_END_OF_SOF_1_OUT_OF_4; - } - } - } else { - if (DecodeReader->Coding == CODING_1_OUT_OF_256) { - if (DecodeReader->posCount > 34) { // signal stayed low for too long - DecodeReaderReset(DecodeReader); - } else { - // do nothing, keep waiting - } - } else { // CODING_1_OUT_OF_4 - if (DecodeReader->posCount > 26) { // signal stayed low for too long - DecodeReaderReset(DecodeReader); - } else { - // do nothing, keep waiting - } - } - } - break; + case STATE_READER_AWAIT_2ND_RISING_EDGE_OF_SOF: + DecodeReader->posCount++; + if (bit) { // detected rising edge + if (DecodeReader->Coding == CODING_1_OUT_OF_256) { + if (DecodeReader->posCount < 32) { // rising edge too early (nominally expected at 33) + DecodeReader->state = STATE_READER_AWAIT_1ST_FALLING_EDGE_OF_SOF; + } else { + DecodeReader->posCount = 1; + DecodeReader->bitCount = 0; + DecodeReader->byteCount = 0; + DecodeReader->sum1 = 1; + DecodeReader->state = STATE_READER_RECEIVE_DATA_1_OUT_OF_256; + LED_B_ON(); + } + } else { // CODING_1_OUT_OF_4 + if (DecodeReader->posCount < 24) { // rising edge too early (nominally expected at 25) + DecodeReader->state = STATE_READER_AWAIT_1ST_FALLING_EDGE_OF_SOF; + } else { + DecodeReader->posCount = 1; + DecodeReader->state = STATE_READER_AWAIT_END_OF_SOF_1_OUT_OF_4; + } + } + } else { + if (DecodeReader->Coding == CODING_1_OUT_OF_256) { + if (DecodeReader->posCount > 34) { // signal stayed low for too long + DecodeReaderReset(DecodeReader); + } else { + // do nothing, keep waiting + } + } else { // CODING_1_OUT_OF_4 + if (DecodeReader->posCount > 26) { // signal stayed low for too long + DecodeReaderReset(DecodeReader); + } else { + // do nothing, keep waiting + } + } + } + break; - case STATE_READER_AWAIT_END_OF_SOF_1_OUT_OF_4: - DecodeReader->posCount++; - if (bit) { - if (DecodeReader->posCount == 9) { - DecodeReader->posCount = 1; - DecodeReader->bitCount = 0; - DecodeReader->byteCount = 0; - DecodeReader->sum1 = 1; - DecodeReader->state = STATE_READER_RECEIVE_DATA_1_OUT_OF_4; - LED_B_ON(); - } else { - // do nothing, keep waiting - } - } else { // unexpected falling edge - DecodeReaderReset(DecodeReader); - } - break; + case STATE_READER_AWAIT_END_OF_SOF_1_OUT_OF_4: + DecodeReader->posCount++; + if (bit) { + if (DecodeReader->posCount == 9) { + DecodeReader->posCount = 1; + DecodeReader->bitCount = 0; + DecodeReader->byteCount = 0; + DecodeReader->sum1 = 1; + DecodeReader->state = STATE_READER_RECEIVE_DATA_1_OUT_OF_4; + LED_B_ON(); + } else { + // do nothing, keep waiting + } + } else { // unexpected falling edge + DecodeReaderReset(DecodeReader); + } + break; - case STATE_READER_RECEIVE_DATA_1_OUT_OF_4: - DecodeReader->posCount++; - if (DecodeReader->posCount == 1) { - DecodeReader->sum1 = bit?1:0; - } else if (DecodeReader->posCount <= 4) { - if (bit) DecodeReader->sum1++; - } else if (DecodeReader->posCount == 5) { - DecodeReader->sum2 = bit?1:0; - } else { - if (bit) DecodeReader->sum2++; - } - if (DecodeReader->posCount == 8) { - DecodeReader->posCount = 0; - if (DecodeReader->sum1 <= 1 && DecodeReader->sum2 >= 3) { // EOF - LED_B_OFF(); // Finished receiving - DecodeReaderReset(DecodeReader); - if (DecodeReader->byteCount != 0) { - return true; - } - } else if (DecodeReader->sum1 >= 3 && DecodeReader->sum2 <= 1) { // detected a 2bit position - DecodeReader->shiftReg >>= 2; - DecodeReader->shiftReg |= (DecodeReader->bitCount << 6); - } - if (DecodeReader->bitCount == 15) { // we have a full byte - DecodeReader->output[DecodeReader->byteCount++] = DecodeReader->shiftReg; - if (DecodeReader->byteCount > DecodeReader->byteCountMax) { - // buffer overflow, give up - LED_B_OFF(); - DecodeReaderReset(DecodeReader); - } - DecodeReader->bitCount = 0; - DecodeReader->shiftReg = 0; - if (DecodeReader->byteCount == DecodeReader->jam_search_len) { - if (!memcmp(DecodeReader->output, DecodeReader->jam_search_string, DecodeReader->jam_search_len)) { - LED_D_ON(); - FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER | FPGA_HF_READER_MODE_SEND_JAM); - DecodeReader->state = STATE_READER_RECEIVE_JAMMING; - } - } - } else { - DecodeReader->bitCount++; - } - } - break; + case STATE_READER_RECEIVE_DATA_1_OUT_OF_4: + DecodeReader->posCount++; + if (DecodeReader->posCount == 1) { + DecodeReader->sum1 = bit?1:0; + } else if (DecodeReader->posCount <= 4) { + if (bit) DecodeReader->sum1++; + } else if (DecodeReader->posCount == 5) { + DecodeReader->sum2 = bit?1:0; + } else { + if (bit) DecodeReader->sum2++; + } + if (DecodeReader->posCount == 8) { + DecodeReader->posCount = 0; + if (DecodeReader->sum1 <= 1 && DecodeReader->sum2 >= 3) { // EOF + LED_B_OFF(); // Finished receiving + DecodeReaderReset(DecodeReader); + if (DecodeReader->byteCount != 0) { + return true; + } + } else if (DecodeReader->sum1 >= 3 && DecodeReader->sum2 <= 1) { // detected a 2bit position + DecodeReader->shiftReg >>= 2; + DecodeReader->shiftReg |= (DecodeReader->bitCount << 6); + } + if (DecodeReader->bitCount == 15) { // we have a full byte + DecodeReader->output[DecodeReader->byteCount++] = DecodeReader->shiftReg; + if (DecodeReader->byteCount > DecodeReader->byteCountMax) { + // buffer overflow, give up + LED_B_OFF(); + DecodeReaderReset(DecodeReader); + } + DecodeReader->bitCount = 0; + DecodeReader->shiftReg = 0; + if (DecodeReader->byteCount == DecodeReader->jam_search_len) { + if (!memcmp(DecodeReader->output, DecodeReader->jam_search_string, DecodeReader->jam_search_len)) { + LED_D_ON(); + FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER | FPGA_HF_READER_MODE_SEND_JAM); + DecodeReader->state = STATE_READER_RECEIVE_JAMMING; + } + } + } else { + DecodeReader->bitCount++; + } + } + break; - case STATE_READER_RECEIVE_DATA_1_OUT_OF_256: - DecodeReader->posCount++; - if (DecodeReader->posCount == 1) { - DecodeReader->sum1 = bit?1:0; - } else if (DecodeReader->posCount <= 4) { - if (bit) DecodeReader->sum1++; - } else if (DecodeReader->posCount == 5) { - DecodeReader->sum2 = bit?1:0; - } else if (bit) { - DecodeReader->sum2++; - } - if (DecodeReader->posCount == 8) { - DecodeReader->posCount = 0; - if (DecodeReader->sum1 <= 1 && DecodeReader->sum2 >= 3) { // EOF - LED_B_OFF(); // Finished receiving - DecodeReaderReset(DecodeReader); - if (DecodeReader->byteCount != 0) { - return true; - } - } else if (DecodeReader->sum1 >= 3 && DecodeReader->sum2 <= 1) { // detected the bit position - DecodeReader->shiftReg = DecodeReader->bitCount; - } - if (DecodeReader->bitCount == 255) { // we have a full byte - DecodeReader->output[DecodeReader->byteCount++] = DecodeReader->shiftReg; - if (DecodeReader->byteCount > DecodeReader->byteCountMax) { - // buffer overflow, give up - LED_B_OFF(); - DecodeReaderReset(DecodeReader); - } - if (DecodeReader->byteCount == DecodeReader->jam_search_len) { - if (!memcmp(DecodeReader->output, DecodeReader->jam_search_string, DecodeReader->jam_search_len)) { - LED_D_ON(); - FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER | FPGA_HF_READER_MODE_SEND_JAM); - DecodeReader->state = STATE_READER_RECEIVE_JAMMING; - } - } - } - DecodeReader->bitCount++; - } - break; + case STATE_READER_RECEIVE_DATA_1_OUT_OF_256: + DecodeReader->posCount++; + if (DecodeReader->posCount == 1) { + DecodeReader->sum1 = bit?1:0; + } else if (DecodeReader->posCount <= 4) { + if (bit) DecodeReader->sum1++; + } else if (DecodeReader->posCount == 5) { + DecodeReader->sum2 = bit?1:0; + } else if (bit) { + DecodeReader->sum2++; + } + if (DecodeReader->posCount == 8) { + DecodeReader->posCount = 0; + if (DecodeReader->sum1 <= 1 && DecodeReader->sum2 >= 3) { // EOF + LED_B_OFF(); // Finished receiving + DecodeReaderReset(DecodeReader); + if (DecodeReader->byteCount != 0) { + return true; + } + } else if (DecodeReader->sum1 >= 3 && DecodeReader->sum2 <= 1) { // detected the bit position + DecodeReader->shiftReg = DecodeReader->bitCount; + } + if (DecodeReader->bitCount == 255) { // we have a full byte + DecodeReader->output[DecodeReader->byteCount++] = DecodeReader->shiftReg; + if (DecodeReader->byteCount > DecodeReader->byteCountMax) { + // buffer overflow, give up + LED_B_OFF(); + DecodeReaderReset(DecodeReader); + } + if (DecodeReader->byteCount == DecodeReader->jam_search_len) { + if (!memcmp(DecodeReader->output, DecodeReader->jam_search_string, DecodeReader->jam_search_len)) { + LED_D_ON(); + FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER | FPGA_HF_READER_MODE_SEND_JAM); + DecodeReader->state = STATE_READER_RECEIVE_JAMMING; + } + } + } + DecodeReader->bitCount++; + } + break; - case STATE_READER_RECEIVE_JAMMING: - DecodeReader->posCount++; - if (DecodeReader->Coding == CODING_1_OUT_OF_4) { - if (DecodeReader->posCount == 7*16) { // 7 bits jammed - FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER | FPGA_HF_READER_MODE_SNIFF_AMPLITUDE); // stop jamming - // FpgaDisableTracing(); - LED_D_OFF(); - } else if (DecodeReader->posCount == 8*16) { - DecodeReader->posCount = 0; - DecodeReader->output[DecodeReader->byteCount++] = 0x00; - DecodeReader->state = STATE_READER_RECEIVE_DATA_1_OUT_OF_4; - } - } else { - if (DecodeReader->posCount == 7*256) { // 7 bits jammend - FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER | FPGA_HF_READER_MODE_SNIFF_AMPLITUDE); // stop jamming - LED_D_OFF(); - } else if (DecodeReader->posCount == 8*256) { - DecodeReader->posCount = 0; - DecodeReader->output[DecodeReader->byteCount++] = 0x00; - DecodeReader->state = STATE_READER_RECEIVE_DATA_1_OUT_OF_256; - } - } - break; + case STATE_READER_RECEIVE_JAMMING: + DecodeReader->posCount++; + if (DecodeReader->Coding == CODING_1_OUT_OF_4) { + if (DecodeReader->posCount == 7*16) { // 7 bits jammed + FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER | FPGA_HF_READER_MODE_SNIFF_AMPLITUDE); // stop jamming + // FpgaDisableTracing(); + LED_D_OFF(); + } else if (DecodeReader->posCount == 8*16) { + DecodeReader->posCount = 0; + DecodeReader->output[DecodeReader->byteCount++] = 0x00; + DecodeReader->state = STATE_READER_RECEIVE_DATA_1_OUT_OF_4; + } + } else { + if (DecodeReader->posCount == 7*256) { // 7 bits jammend + FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER | FPGA_HF_READER_MODE_SNIFF_AMPLITUDE); // stop jamming + LED_D_OFF(); + } else if (DecodeReader->posCount == 8*256) { + DecodeReader->posCount = 0; + DecodeReader->output[DecodeReader->byteCount++] = 0x00; + DecodeReader->state = STATE_READER_RECEIVE_DATA_1_OUT_OF_256; + } + } + break; - default: - LED_B_OFF(); - DecodeReaderReset(DecodeReader); - break; - } + default: + LED_B_OFF(); + DecodeReaderReset(DecodeReader); + break; + } - return false; + return false; } //----------------------------------------------------------------------------- @@ -1006,86 +1014,86 @@ static RAMFUNC int Handle15693SampleFromReader(bool bit, DecodeReader_t *DecodeR //----------------------------------------------------------------------------- int GetIso15693CommandFromReader(uint8_t *received, size_t max_len, uint32_t *eof_time) { - int samples = 0; - bool gotFrame = false; - uint8_t b; + int samples = 0; + bool gotFrame = false; + uint8_t b; - uint8_t dmaBuf[ISO15693_DMA_BUFFER_SIZE]; + uint8_t dmaBuf[ISO15693_DMA_BUFFER_SIZE]; - // the decoder data structure - DecodeReader_t DecodeReader = {0}; - DecodeReaderInit(&DecodeReader, received, max_len, 0, NULL); + // the decoder data structure + DecodeReader_t DecodeReader = {0}; + DecodeReaderInit(&DecodeReader, received, max_len, 0, NULL); - // wait for last transfer to complete - while (!(AT91C_BASE_SSC->SSC_SR & AT91C_SSC_TXEMPTY)); + // wait for last transfer to complete + while (!(AT91C_BASE_SSC->SSC_SR & AT91C_SSC_TXEMPTY)); - LED_D_OFF(); - FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_SIMULATOR | FPGA_HF_SIMULATOR_NO_MODULATION); + LED_D_OFF(); + FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_SIMULATOR | FPGA_HF_SIMULATOR_NO_MODULATION); - // clear receive register and wait for next transfer - uint32_t temp = AT91C_BASE_SSC->SSC_RHR; - (void) temp; - while (!(AT91C_BASE_SSC->SSC_SR & AT91C_SSC_RXRDY)) ; + // clear receive register and wait for next transfer + uint32_t temp = AT91C_BASE_SSC->SSC_RHR; + (void) temp; + while (!(AT91C_BASE_SSC->SSC_SR & AT91C_SSC_RXRDY)) ; - uint32_t dma_start_time = GetCountSspClk() & 0xfffffff8; + uint32_t dma_start_time = GetCountSspClk() & 0xfffffff8; - // Setup and start DMA. - FpgaSetupSscDma(dmaBuf, ISO15693_DMA_BUFFER_SIZE); - uint8_t *upTo = dmaBuf; + // Setup and start DMA. + FpgaSetupSscDma(dmaBuf, ISO15693_DMA_BUFFER_SIZE); + uint8_t *upTo = dmaBuf; - for (;;) { - uint16_t behindBy = ((uint8_t*)AT91C_BASE_PDC_SSC->PDC_RPR - upTo) & (ISO15693_DMA_BUFFER_SIZE-1); + for (;;) { + uint16_t behindBy = ((uint8_t*)AT91C_BASE_PDC_SSC->PDC_RPR - upTo) & (ISO15693_DMA_BUFFER_SIZE-1); - if (behindBy == 0) continue; + if (behindBy == 0) continue; - b = *upTo++; - if (upTo >= dmaBuf + ISO15693_DMA_BUFFER_SIZE) { // we have read all of the DMA buffer content. - upTo = dmaBuf; // start reading the circular buffer from the beginning - if (behindBy > (9*ISO15693_DMA_BUFFER_SIZE/10)) { - Dbprintf("About to blow circular buffer - aborted! behindBy=%d", behindBy); - break; - } - } - if (AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_ENDRX)) { // DMA Counter Register had reached 0, already rotated. - AT91C_BASE_PDC_SSC->PDC_RNPR = (uint32_t) dmaBuf; // refresh the DMA Next Buffer and - AT91C_BASE_PDC_SSC->PDC_RNCR = ISO15693_DMA_BUFFER_SIZE; // DMA Next Counter registers - } + b = *upTo++; + if (upTo >= dmaBuf + ISO15693_DMA_BUFFER_SIZE) { // we have read all of the DMA buffer content. + upTo = dmaBuf; // start reading the circular buffer from the beginning + if (behindBy > (9*ISO15693_DMA_BUFFER_SIZE/10)) { + Dbprintf("About to blow circular buffer - aborted! behindBy=%d", behindBy); + break; + } + } + if (AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_ENDRX)) { // DMA Counter Register had reached 0, already rotated. + AT91C_BASE_PDC_SSC->PDC_RNPR = (uint32_t) dmaBuf; // refresh the DMA Next Buffer and + AT91C_BASE_PDC_SSC->PDC_RNCR = ISO15693_DMA_BUFFER_SIZE; // DMA Next Counter registers + } - for (int i = 7; i >= 0; i--) { - if (Handle15693SampleFromReader((b >> i) & 0x01, &DecodeReader)) { - *eof_time = dma_start_time + samples - DELAY_READER_TO_ARM; // end of EOF - gotFrame = true; - break; - } - samples++; - } + for (int i = 7; i >= 0; i--) { + if (Handle15693SampleFromReader((b >> i) & 0x01, &DecodeReader)) { + *eof_time = dma_start_time + samples - DELAY_READER_TO_ARM; // end of EOF + gotFrame = true; + break; + } + samples++; + } - if (gotFrame) { - break; - } + if (gotFrame) { + break; + } - if (BUTTON_PRESS()) { - DecodeReader.byteCount = -1; - break; - } + if (BUTTON_PRESS()) { + DecodeReader.byteCount = -1; + break; + } - WDT_HIT(); - } + WDT_HIT(); + } - FpgaDisableSscDma(); + FpgaDisableSscDma(); - if (DBGLEVEL >= DBG_EXTENDED) Dbprintf("samples = %d, gotFrame = %d, Decoder: state = %d, len = %d, bitCount = %d, posCount = %d", - samples, gotFrame, DecodeReader.state, DecodeReader.byteCount, DecodeReader.bitCount, DecodeReader.posCount); + if (DBGLEVEL >= DBG_EXTENDED) Dbprintf("samples = %d, gotFrame = %d, Decoder: state = %d, len = %d, bitCount = %d, posCount = %d", + samples, gotFrame, DecodeReader.state, DecodeReader.byteCount, DecodeReader.bitCount, DecodeReader.posCount); - if (DecodeReader.byteCount > 0) { - uint32_t sof_time = *eof_time - - DecodeReader.byteCount * (DecodeReader.Coding==CODING_1_OUT_OF_4?128:2048) // time for byte transfers - - 32 // time for SOF transfer - - 16; // time for EOF transfer - LogTrace(DecodeReader.output, DecodeReader.byteCount, sof_time*32, *eof_time*32, NULL, true); - } + if (DecodeReader.byteCount > 0) { + uint32_t sof_time = *eof_time + - DecodeReader.byteCount * (DecodeReader.Coding==CODING_1_OUT_OF_4?128:2048) // time for byte transfers + - 32 // time for SOF transfer + - 16; // time for EOF transfer + LogTrace(DecodeReader.output, DecodeReader.byteCount, sof_time*32, *eof_time*32, NULL, true); + } - return DecodeReader.byteCount; + return DecodeReader.byteCount; } //----------------------------------------------------------------------------- @@ -1094,214 +1102,211 @@ int GetIso15693CommandFromReader(uint8_t *received, size_t max_len, uint32_t *eo // so that it can be downloaded to a PC and processed there. //----------------------------------------------------------------------------- void AcquireRawAdcSamplesIso15693(void) { - LED_A_ON(); + LED_A_ON(); + uint8_t *dest = BigBuf_malloc(4000); - //iceman: needs malloc - uint8_t *dest = BigBuf_get_addr(); + FpgaDownloadAndGo(FPGA_BITSTREAM_HF); + FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER); + LED_D_ON(); + FpgaSetupSsc(FPGA_MAJOR_MODE_HF_READER); + SetAdcMuxFor(GPIO_MUXSEL_HIPKD); - FpgaDownloadAndGo(FPGA_BITSTREAM_HF); - FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER); - LED_D_ON(); - FpgaSetupSsc(FPGA_MAJOR_MODE_HF_READER); - SetAdcMuxFor(GPIO_MUXSEL_HIPKD); + uint8_t cmd[5]; + BuildIdentifyRequest(cmd); + CodeIso15693AsReader(cmd, sizeof(cmd)); - uint8_t cmd[5]; - BuildIdentifyRequest(cmd); - CodeIso15693AsReader(cmd, sizeof(cmd)); + // Give the tags time to energize + SpinDelay(100); - // Give the tags time to energize - SpinDelay(100); + // Now send the command + uint32_t start_time = 0; + TransmitTo15693Tag(ToSend, ToSendMax, &start_time); - // Now send the command - uint32_t start_time = 0; - TransmitTo15693Tag(ToSend, ToSendMax, &start_time); + // wait for last transfer to complete + while (!(AT91C_BASE_SSC->SSC_SR & AT91C_SSC_TXEMPTY)) ; - // wait for last transfer to complete - while (!(AT91C_BASE_SSC->SSC_SR & AT91C_SSC_TXEMPTY)) ; + FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER | FPGA_HF_READER_SUBCARRIER_424_KHZ | FPGA_HF_READER_MODE_RECEIVE_AMPLITUDE); - FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER | FPGA_HF_READER_SUBCARRIER_424_KHZ | FPGA_HF_READER_MODE_RECEIVE_AMPLITUDE); + for(int c = 0; c < 4000; ) { + if(AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_RXRDY)) { + uint16_t r = AT91C_BASE_SSC->SSC_RHR; + dest[c++] = r >> 5; + } + } - for(int c = 0; c < 4000; ) { - if(AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_RXRDY)) { - uint16_t r = AT91C_BASE_SSC->SSC_RHR; - dest[c++] = r >> 5; - } - } - - FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); - LEDsoff(); + FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); + LEDsoff(); } void SniffIso15693(uint8_t jam_search_len, uint8_t *jam_search_string) { - LED_A_ON(); + LED_A_ON(); - FpgaDownloadAndGo(FPGA_BITSTREAM_HF); + FpgaDownloadAndGo(FPGA_BITSTREAM_HF); - clear_trace(); - set_tracing(true); + clear_trace(); + set_tracing(true); - // The DMA buffer, used to stream samples from the FPGA - uint16_t dmaBuf[ISO15693_DMA_BUFFER_SIZE]; + // The DMA buffer, used to stream samples from the FPGA + uint16_t dmaBuf[ISO15693_DMA_BUFFER_SIZE]; - // Count of samples received so far, so that we can include timing - // information in the trace buffer. - int samples = 0; + // Count of samples received so far, so that we can include timing + // information in the trace buffer. + int samples = 0; - DecodeTag_t DecodeTag = {0}; - uint8_t response[ISO15693_MAX_RESPONSE_LENGTH]; - DecodeTagInit(&DecodeTag, response, sizeof(response)); + DecodeTag_t DecodeTag = {0}; + uint8_t response[ISO15693_MAX_RESPONSE_LENGTH]; + DecodeTagInit(&DecodeTag, response, sizeof(response)); - DecodeReader_t DecodeReader = {0}; - uint8_t cmd[ISO15693_MAX_COMMAND_LENGTH]; - DecodeReaderInit(&DecodeReader, cmd, sizeof(cmd), jam_search_len, jam_search_string); + DecodeReader_t DecodeReader = {0}; + uint8_t cmd[ISO15693_MAX_COMMAND_LENGTH]; + DecodeReaderInit(&DecodeReader, cmd, sizeof(cmd), jam_search_len, jam_search_string); - // Print some debug information about the buffer sizes - if (DBGLEVEL >= DBG_EXTENDED) { - Dbprintf("Sniffing buffers initialized:"); - Dbprintf(" Trace: %i bytes", BigBuf_max_traceLen()); - Dbprintf(" Reader -> tag: %i bytes", ISO15693_MAX_COMMAND_LENGTH); - Dbprintf(" tag -> Reader: %i bytes", ISO15693_MAX_RESPONSE_LENGTH); - Dbprintf(" DMA: %i bytes", ISO15693_DMA_BUFFER_SIZE * sizeof(uint16_t)); - } + // Print some debug information about the buffer sizes + if (DBGLEVEL >= DBG_EXTENDED) { + Dbprintf("Sniffing buffers initialized:"); + Dbprintf(" Trace: %i bytes", BigBuf_max_traceLen()); + Dbprintf(" Reader -> tag: %i bytes", ISO15693_MAX_COMMAND_LENGTH); + Dbprintf(" tag -> Reader: %i bytes", ISO15693_MAX_RESPONSE_LENGTH); + Dbprintf(" DMA: %i bytes", ISO15693_DMA_BUFFER_SIZE * sizeof(uint16_t)); + } - Dbprintf("Sniff started. Press PM3 Button to stop."); + Dbprintf("Sniff started. Press PM3 Button to stop."); - FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER | FPGA_HF_READER_MODE_SNIFF_AMPLITUDE); - LED_D_OFF(); - SetAdcMuxFor(GPIO_MUXSEL_HIPKD); - FpgaSetupSsc(FPGA_MAJOR_MODE_HF_READER); - StartCountSspClk(); - FpgaSetupSscDma((uint8_t*) dmaBuf, ISO15693_DMA_BUFFER_SIZE); + FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER | FPGA_HF_READER_MODE_SNIFF_AMPLITUDE); + LED_D_OFF(); + SetAdcMuxFor(GPIO_MUXSEL_HIPKD); + FpgaSetupSsc(FPGA_MAJOR_MODE_HF_READER); + StartCountSspClk(); + FpgaSetupSscDma((uint8_t*) dmaBuf, ISO15693_DMA_BUFFER_SIZE); - bool TagIsActive = false; - bool ReaderIsActive = false; - bool ExpectTagAnswer = false; - uint32_t dma_start_time = 0; - uint16_t *upTo = dmaBuf; + bool TagIsActive = false; + bool ReaderIsActive = false; + bool ExpectTagAnswer = false; + uint32_t dma_start_time = 0; + uint16_t *upTo = dmaBuf; - uint16_t max_behindBy = 0; - - // And now we loop, receiving samples. - for(;;) { - uint16_t behindBy = ((uint16_t*)AT91C_BASE_PDC_SSC->PDC_RPR - upTo) & (ISO15693_DMA_BUFFER_SIZE-1); - if (behindBy > max_behindBy) { - max_behindBy = behindBy; - } - - if (behindBy == 0) continue; + uint16_t max_behindBy = 0; + + // And now we loop, receiving samples. + for(;;) { + uint16_t behindBy = ((uint16_t*)AT91C_BASE_PDC_SSC->PDC_RPR - upTo) & (ISO15693_DMA_BUFFER_SIZE-1); + if (behindBy > max_behindBy) { + max_behindBy = behindBy; + } + + if (behindBy == 0) continue; - samples++; - if (samples == 1) { - // DMA has transferred the very first data - dma_start_time = GetCountSspClk() & 0xfffffff0; - } + samples++; + if (samples == 1) { + // DMA has transferred the very first data + dma_start_time = GetCountSspClk() & 0xfffffff0; + } - uint16_t sniffdata = *upTo++; + uint16_t sniffdata = *upTo++; - if (upTo >= dmaBuf + ISO15693_DMA_BUFFER_SIZE) { // we have read all of the DMA buffer content. - upTo = dmaBuf; // start reading the circular buffer from the beginning - if (behindBy > (9*ISO15693_DMA_BUFFER_SIZE/10)) { + if (upTo >= dmaBuf + ISO15693_DMA_BUFFER_SIZE) { // we have read all of the DMA buffer content. + upTo = dmaBuf; // start reading the circular buffer from the beginning + if (behindBy > (9*ISO15693_DMA_BUFFER_SIZE/10)) { - Dbprintf("About to blow circular buffer - aborted! behindBy=%d, samples=%d", behindBy, samples); - break; - } - if (AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_ENDRX)) { // DMA Counter Register had reached 0, already rotated. - AT91C_BASE_PDC_SSC->PDC_RNPR = (uint32_t) dmaBuf; // refresh the DMA Next Buffer and - AT91C_BASE_PDC_SSC->PDC_RNCR = ISO15693_DMA_BUFFER_SIZE; // DMA Next Counter registers - WDT_HIT(); - if (BUTTON_PRESS()) { - DbpString("Sniff stopped."); - break; - } - } - } + Dbprintf("About to blow circular buffer - aborted! behindBy=%d, samples=%d", behindBy, samples); + break; + } + if (AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_ENDRX)) { // DMA Counter Register had reached 0, already rotated. + AT91C_BASE_PDC_SSC->PDC_RNPR = (uint32_t) dmaBuf; // refresh the DMA Next Buffer and + AT91C_BASE_PDC_SSC->PDC_RNCR = ISO15693_DMA_BUFFER_SIZE; // DMA Next Counter registers + WDT_HIT(); + if (BUTTON_PRESS()) { + DbpString("Sniff stopped."); + break; + } + } + } - if (!TagIsActive) { // no need to try decoding reader data if the tag is sending - if (Handle15693SampleFromReader(sniffdata & 0x02, &DecodeReader)) { + if (!TagIsActive) { // no need to try decoding reader data if the tag is sending + if (Handle15693SampleFromReader(sniffdata & 0x02, &DecodeReader)) { - uint32_t eof_time = dma_start_time + samples*16 + 8 - DELAY_READER_TO_ARM_SNIFF; // end of EOF - if (DecodeReader.byteCount > 0) { - uint32_t sof_time = eof_time - - DecodeReader.byteCount * (DecodeReader.Coding==CODING_1_OUT_OF_4?128*16:2048*16) // time for byte transfers - - 32*16 // time for SOF transfer - - 16*16; // time for EOF transfer - LogTrace(DecodeReader.output, DecodeReader.byteCount, sof_time*4, eof_time*4, NULL, true); - } - // And ready to receive another command. - DecodeReaderReset(&DecodeReader); - // And also reset the demod code, which might have been - // false-triggered by the commands from the reader. - DecodeTagReset(&DecodeTag); - ReaderIsActive = false; - ExpectTagAnswer = true; + uint32_t eof_time = dma_start_time + samples*16 + 8 - DELAY_READER_TO_ARM_SNIFF; // end of EOF + if (DecodeReader.byteCount > 0) { + uint32_t sof_time = eof_time + - DecodeReader.byteCount * (DecodeReader.Coding==CODING_1_OUT_OF_4?128*16:2048*16) // time for byte transfers + - 32*16 // time for SOF transfer + - 16*16; // time for EOF transfer + LogTrace(DecodeReader.output, DecodeReader.byteCount, sof_time*4, eof_time*4, NULL, true); + } + // And ready to receive another command. + DecodeReaderReset(&DecodeReader); + // And also reset the demod code, which might have been + // false-triggered by the commands from the reader. + DecodeTagReset(&DecodeTag); + ReaderIsActive = false; + ExpectTagAnswer = true; - } else if (Handle15693SampleFromReader(sniffdata & 0x01, &DecodeReader)) { + } else if (Handle15693SampleFromReader(sniffdata & 0x01, &DecodeReader)) { - uint32_t eof_time = dma_start_time + samples*16 + 16 - DELAY_READER_TO_ARM_SNIFF; // end of EOF - if (DecodeReader.byteCount > 0) { - uint32_t sof_time = eof_time - - DecodeReader.byteCount * (DecodeReader.Coding==CODING_1_OUT_OF_4?128*16:2048*16) // time for byte transfers - - 32*16 // time for SOF transfer - - 16*16; // time for EOF transfer - LogTrace(DecodeReader.output, DecodeReader.byteCount, sof_time*4, eof_time*4, NULL, true); - } - // And ready to receive another command - DecodeReaderReset(&DecodeReader); + uint32_t eof_time = dma_start_time + samples*16 + 16 - DELAY_READER_TO_ARM_SNIFF; // end of EOF + if (DecodeReader.byteCount > 0) { + uint32_t sof_time = eof_time + - DecodeReader.byteCount * (DecodeReader.Coding==CODING_1_OUT_OF_4?128*16:2048*16) // time for byte transfers + - 32*16 // time for SOF transfer + - 16*16; // time for EOF transfer + LogTrace(DecodeReader.output, DecodeReader.byteCount, sof_time*4, eof_time*4, NULL, true); + } + // And ready to receive another command + DecodeReaderReset(&DecodeReader); - // And also reset the demod code, which might have been - // false-triggered by the commands from the reader. - DecodeTagReset(&DecodeTag); - ReaderIsActive = false; - ExpectTagAnswer = true; + // And also reset the demod code, which might have been + // false-triggered by the commands from the reader. + DecodeTagReset(&DecodeTag); + ReaderIsActive = false; + ExpectTagAnswer = true; - } else { - ReaderIsActive = (DecodeReader.state >= STATE_READER_RECEIVE_DATA_1_OUT_OF_4); - } - } + } else { + ReaderIsActive = (DecodeReader.state >= STATE_READER_RECEIVE_DATA_1_OUT_OF_4); + } + } - if (!ReaderIsActive && ExpectTagAnswer) { // no need to try decoding tag data if the reader is currently sending or no answer expected yet - if (Handle15693SamplesFromTag(sniffdata >> 2, &DecodeTag)) { + if (!ReaderIsActive && ExpectTagAnswer) { // no need to try decoding tag data if the reader is currently sending or no answer expected yet + if (Handle15693SamplesFromTag(sniffdata >> 2, &DecodeTag)) { - uint32_t eof_time = dma_start_time + samples*16 - DELAY_TAG_TO_ARM_SNIFF; // end of EOF - if (DecodeTag.lastBit == SOF_PART2) { - eof_time -= 8*16; // needed 8 additional samples to confirm single SOF (iCLASS) - } - uint32_t sof_time = eof_time - - DecodeTag.len * 8 * 8 * 16 // time for byte transfers - - 32 * 16 // time for SOF transfer - - (DecodeTag.lastBit != SOF_PART2?32*16:0); // time for EOF transfer - LogTrace(DecodeTag.output, DecodeTag.len, sof_time*4, eof_time*4, NULL, false); - // And ready to receive another response. - DecodeTagReset(&DecodeTag); - DecodeReaderReset(&DecodeReader); - ExpectTagAnswer = false; - TagIsActive = false; - } else { - TagIsActive = (DecodeTag.state >= STATE_TAG_RECEIVING_DATA); - } - } + uint32_t eof_time = dma_start_time + samples*16 - DELAY_TAG_TO_ARM_SNIFF; // end of EOF + if (DecodeTag.lastBit == SOF_PART2) { + eof_time -= 8*16; // needed 8 additional samples to confirm single SOF (iCLASS) + } + uint32_t sof_time = eof_time + - DecodeTag.len * 8 * 8 * 16 // time for byte transfers + - 32 * 16 // time for SOF transfer + - (DecodeTag.lastBit != SOF_PART2?32*16:0); // time for EOF transfer + LogTrace(DecodeTag.output, DecodeTag.len, sof_time*4, eof_time*4, NULL, false); + // And ready to receive another response. + DecodeTagReset(&DecodeTag); + DecodeReaderReset(&DecodeReader); + ExpectTagAnswer = false; + TagIsActive = false; + } else { + TagIsActive = (DecodeTag.state >= STATE_TAG_RECEIVING_DATA); + } + } - } + } - FpgaDisableSscDma(); + FpgaDisableSscDma(); - DbpString("Sniff statistics:"); - Dbprintf(" ExpectTagAnswer: %d, TagIsActive: %d, ReaderIsActive: %d", ExpectTagAnswer, TagIsActive, ReaderIsActive); - Dbprintf(" DecodeTag State: %d", DecodeTag.state); - Dbprintf(" DecodeTag byteCnt: %d", DecodeTag.len); - Dbprintf(" DecodeTag posCount: %d", DecodeTag.posCount); - Dbprintf(" DecodeReader State: %d", DecodeReader.state); - Dbprintf(" DecodeReader byteCnt: %d", DecodeReader.byteCount); - Dbprintf(" DecodeReader posCount: %d", DecodeReader.posCount); - Dbprintf(" Trace length: %d", BigBuf_get_traceLen()); - Dbprintf(" Max behindBy: %d", max_behindBy); + DbpString("Sniff statistics:"); + Dbprintf(" ExpectTagAnswer: %d, TagIsActive: %d, ReaderIsActive: %d", ExpectTagAnswer, TagIsActive, ReaderIsActive); + Dbprintf(" DecodeTag State: %d", DecodeTag.state); + Dbprintf(" DecodeTag byteCnt: %d", DecodeTag.len); + Dbprintf(" DecodeTag posCount: %d", DecodeTag.posCount); + Dbprintf(" DecodeReader State: %d", DecodeReader.state); + Dbprintf(" DecodeReader byteCnt: %d", DecodeReader.byteCount); + Dbprintf(" DecodeReader posCount: %d", DecodeReader.posCount); + Dbprintf(" Trace length: %d", BigBuf_get_traceLen()); + Dbprintf(" Max behindBy: %d", max_behindBy); } -// Initialize the proxmark as iso15k reader -// (this might produces glitches that confuse some tags +// Initialize Proxmark3 as ISO15693 reader void Iso15693InitReader(void) { - + FpgaDownloadAndGo(FPGA_BITSTREAM_HF); // Start from off (no field generated) @@ -1309,16 +1314,20 @@ void Iso15693InitReader(void) { LEDsoff(); SpinDelay(10); - // switch field on - FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER); - LED_D_ON(); - - // initialize SSC and select proper AD input - FpgaSetupSsc(FPGA_MAJOR_MODE_HF_READER); - SetAdcMuxFor(GPIO_MUXSEL_HIPKD); + // switch field on + FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER); + LED_D_ON(); + + // initialize SSC and select proper AD input + FpgaSetupSsc(FPGA_MAJOR_MODE_HF_READER); + SetAdcMuxFor(GPIO_MUXSEL_HIPKD); - // give tags some time to energize - SpinDelay(250); + // give tags some time to energize + SpinDelay(250); + + set_tracing(true); + + StartCountSspClk(); } /////////////////////////////////////////////////////////////////////// @@ -1333,10 +1342,10 @@ void Iso15693InitReader(void) { static void BuildIdentifyRequest(uint8_t *cmd) { // flags cmd[0] = ISO15_REQ_SUBCARRIER_SINGLE | ISO15_REQ_DATARATE_HIGH | ISO15_REQ_INVENTORY | ISO15_REQINV_SLOT1; - // inventory command code - cmd[1] = ISO15_CMD_INVENTORY; - // no mask - cmd[2] = 0x00; + // inventory command code + cmd[1] = ISO15_CMD_INVENTORY; + // no mask + cmd[2] = 0x00; // CRC AddCrc15(cmd, 3); } @@ -1376,49 +1385,41 @@ static void BuildInventoryResponse(uint8_t *uid) { int SendDataTag(uint8_t *send, int sendlen, bool init, bool speed_fast, uint8_t *recv, uint16_t max_recv_len, uint32_t start_time, uint16_t timeout, uint32_t *eof_time) { - if (init) { - Iso15693InitReader(); - StartCountSspClk(); - } + if (init) { + Iso15693InitReader(); + } - int answerLen = 0; + if (speed_fast) { + // high speed (1 out of 4) + CodeIso15693AsReader(send, sendlen); + } else { + // low speed (1 out of 256) + CodeIso15693AsReader256(send, sendlen); + } - if (speed_fast) { - // high speed (1 out of 4) - CodeIso15693AsReader(send, sendlen); - } else { - // low speed (1 out of 256) - CodeIso15693AsReader256(send, sendlen); - } + TransmitTo15693Tag(ToSend, ToSendMax, &start_time); + uint32_t end_time = start_time + 32 * (8 * ToSendMax -4); // substract the 4 padding bits after EOF + LogTrace(send, sendlen, (start_time * 4), (end_time * 4), NULL, true); - TransmitTo15693Tag(ToSend, ToSendMax, &start_time); - uint32_t end_time = start_time + 32*(8*ToSendMax-4); // substract the 4 padding bits after EOF - LogTrace(send, sendlen, start_time*4, end_time*4, NULL, true); - - // Now wait for a response - if (recv != NULL) { - answerLen = GetIso15693AnswerFromTag(recv, max_recv_len, timeout, eof_time); - } - - return answerLen; + int res = 0; + if (recv != NULL) { + res = GetIso15693AnswerFromTag(recv, max_recv_len, timeout, eof_time); + } + return res; } int SendDataTagEOF(uint8_t *recv, uint16_t max_recv_len, uint32_t start_time, uint16_t timeout, uint32_t *eof_time) { - int answerLen = 0; + CodeIso15693AsReaderEOF(); + TransmitTo15693Tag(ToSend, ToSendMax, &start_time); + uint32_t end_time = start_time + 32 * (8 * ToSendMax - 4); // substract the 4 padding bits after EOF + LogTrace(NULL, 0, (start_time * 4), (end_time * 4), NULL, true); - CodeIso15693AsReaderEOF(); - - TransmitTo15693Tag(ToSend, ToSendMax, &start_time); - uint32_t end_time = start_time + 32*(8*ToSendMax-4); // substract the 4 padding bits after EOF - LogTrace(NULL, 0, start_time*4, end_time*4, NULL, true); - - // Now wait for a response - if (recv != NULL) { - answerLen = GetIso15693AnswerFromTag(recv, max_recv_len, timeout, eof_time); - } - - return answerLen; + int res = 0; + if (recv != NULL) { + res = GetIso15693AnswerFromTag(recv, max_recv_len, timeout, eof_time); + } + return res; } // -------------------------------------------------------------------- @@ -1496,22 +1497,22 @@ static void DbdecodeIso15693Answer(int len, uint8_t *d) { // parameter is unused !?! void ReaderIso15693(uint32_t parameter) { - LED_A_ON(); - set_tracing(true); + LED_A_ON(); + set_tracing(true); - uint8_t *answer = BigBuf_malloc(ISO15693_MAX_RESPONSE_LENGTH); + uint8_t *answer = BigBuf_malloc(ISO15693_MAX_RESPONSE_LENGTH); memset(answer, 0x00, ISO15693_MAX_RESPONSE_LENGTH); - // FIRST WE RUN AN INVENTORY TO GET THE TAG UID - // THIS MEANS WE CAN PRE-BUILD REQUESTS TO SAVE CPU TIME + // FIRST WE RUN AN INVENTORY TO GET THE TAG UID + // THIS MEANS WE CAN PRE-BUILD REQUESTS TO SAVE CPU TIME - // Send the IDENTIFY command - uint8_t cmd[5] = {0}; - BuildIdentifyRequest(cmd); - uint32_t start_time = 0; - uint32_t eof_time; - int answerLen = SendDataTag(cmd, sizeof(cmd), true, true, answer, ISO15693_MAX_RESPONSE_LENGTH, start_time, ISO15693_READER_TIMEOUT, &eof_time); - start_time = eof_time + DELAY_ISO15693_VICC_TO_VCD_READER; + // Send the IDENTIFY command + uint8_t cmd[5] = {0}; + BuildIdentifyRequest(cmd); + uint32_t start_time = 0; + uint32_t eof_time; + int answerLen = SendDataTag(cmd, sizeof(cmd), true, true, answer, ISO15693_MAX_RESPONSE_LENGTH, start_time, ISO15693_READER_TIMEOUT, &eof_time); + start_time = eof_time + DELAY_ISO15693_VICC_TO_VCD_READER; // we should do a better check than this if (answerLen >= 12) { @@ -1551,19 +1552,30 @@ void ReaderIso15693(uint32_t parameter) { // When SIM: initialize the Proxmark3 as ISO15693 tag void Iso15693InitTag(void) { - FpgaDownloadAndGo(FPGA_BITSTREAM_HF); - SetAdcMuxFor(GPIO_MUXSEL_HIPKD); - FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_SIMULATOR | FPGA_HF_SIMULATOR_NO_MODULATION); - FpgaSetupSsc(FPGA_MAJOR_MODE_HF_SIMULATOR); - StartCountSspClk(); + + FpgaDownloadAndGo(FPGA_BITSTREAM_HF); + + // Start from off (no field generated) + FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); + LEDsoff(); + SpinDelay(10); + + // switch simulation FPGA + FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_SIMULATOR | FPGA_HF_SIMULATOR_NO_MODULATION); + + // initialize SSC and select proper AD input + FpgaSetupSsc(FPGA_MAJOR_MODE_HF_SIMULATOR); + SetAdcMuxFor(GPIO_MUXSEL_HIPKD); + + // turn on clock + StartCountSspClk(); } // Simulate an ISO15693 TAG, perform anti-collision and then print any reader commands // all demodulation performed in arm rather than host. - greg void SimTagIso15693(uint8_t *uid) { - LEDsoff(); - Iso15693InitTag(); + Iso15693InitTag(); LED_A_ON(); @@ -1582,21 +1594,21 @@ void SimTagIso15693(uint8_t *uid) { WDT_HIT(); // Listen to reader - uint8_t cmd[ISO15693_MAX_COMMAND_LENGTH]; - uint32_t eof_time = 0, start_time = 0; - int cmd_len = GetIso15693CommandFromReader(cmd, sizeof(cmd), &eof_time); + uint8_t cmd[ISO15693_MAX_COMMAND_LENGTH]; + uint32_t eof_time = 0, start_time = 0; + int cmd_len = GetIso15693CommandFromReader(cmd, sizeof(cmd), &eof_time); - if ((cmd_len >= 5) && (cmd[0] & ISO15_REQ_INVENTORY) && (cmd[1] == ISO15_CMD_INVENTORY)) { // TODO: check more flags - bool slow = !(cmd[0] & ISO15_REQ_DATARATE_HIGH); - start_time = eof_time + DELAY_ISO15693_VCD_TO_VICC_SIM; - TransmitTo15693Reader(ToSend, ToSendMax, &start_time, 0, slow); - } + if ((cmd_len >= 5) && (cmd[0] & ISO15_REQ_INVENTORY) && (cmd[1] == ISO15_CMD_INVENTORY)) { // TODO: check more flags + bool slow = !(cmd[0] & ISO15_REQ_DATARATE_HIGH); + start_time = eof_time + DELAY_ISO15693_VCD_TO_VICC_SIM; + TransmitTo15693Reader(ToSend, ToSendMax, &start_time, 0, slow); + } if (DBGLEVEL >= DBG_EXTENDED) { Dbprintf(" %d bytes read from reader:", cmd_len); Dbhexdump(cmd_len, cmd, false); } - } + } switch_off(); } @@ -1619,9 +1631,9 @@ void BruteforceIso15693Afi(uint32_t speed) { int datalen = 5; uint32_t eof_time = 0; - uint32_t start_time = GetCountSspClk(); - int recvlen = SendDataTag(data, datalen, true, speed, recv, sizeof(recv), 0, ISO15693_READER_TIMEOUT, &eof_time); - start_time = eof_time + DELAY_ISO15693_VICC_TO_VCD_READER; + uint32_t start_time = GetCountSspClk(); + int recvlen = SendDataTag(data, datalen, true, speed, recv, sizeof(recv), 0, ISO15693_READER_TIMEOUT, &eof_time); + start_time = eof_time + DELAY_ISO15693_VICC_TO_VCD_READER; WDT_HIT(); @@ -1643,8 +1655,8 @@ void BruteforceIso15693Afi(uint32_t speed) { data[2] = i & 0xFF; AddCrc15(data, 4); - recvlen = SendDataTag(data, datalen, false, speed, recv, sizeof(recv), start_time, ISO15693_READER_TIMEOUT, &eof_time); - start_time = eof_time + DELAY_ISO15693_VICC_TO_VCD_READER; + recvlen = SendDataTag(data, datalen, false, speed, recv, sizeof(recv), start_time, ISO15693_READER_TIMEOUT, &eof_time); + start_time = eof_time + DELAY_ISO15693_VICC_TO_VCD_READER; WDT_HIT(); @@ -1674,63 +1686,60 @@ void BruteforceIso15693Afi(uint32_t speed) { // OBS: doesn't turn off rf field afterwards. void DirectTag15693Command(uint32_t datalen, uint32_t speed, uint32_t recv, uint8_t *data) { - LED_A_ON(); + LED_A_ON(); - int recvlen = 0; - uint8_t recvbuf[ISO15693_MAX_RESPONSE_LENGTH]; - uint32_t eof_time; - uint16_t timeout; + int recvlen = 0; + uint8_t recvbuf[ISO15693_MAX_RESPONSE_LENGTH]; + uint32_t eof_time; + uint16_t timeout; bool request_answer = false; - - switch (data[1]) { - case ISO15_CMD_WRITE: - case ISO15_CMD_LOCK: - case ISO15_CMD_WRITEMULTI: - case ISO15_CMD_WRITEAFI: - case ISO15_CMD_LOCKAFI: - case ISO15_CMD_WRITEDSFID: - case ISO15_CMD_LOCKDSFID: - timeout = ISO15693_READER_TIMEOUT_WRITE; - request_answer = data[0] & ISO15_REQ_OPTION; - break; - default: - timeout = ISO15693_READER_TIMEOUT; - } + + switch (data[1]) { + case ISO15_CMD_WRITE: + case ISO15_CMD_LOCK: + case ISO15_CMD_WRITEMULTI: + case ISO15_CMD_WRITEAFI: + case ISO15_CMD_LOCKAFI: + case ISO15_CMD_WRITEDSFID: + case ISO15_CMD_LOCKDSFID: + timeout = ISO15693_READER_TIMEOUT_WRITE; + request_answer = data[0] & ISO15_REQ_OPTION; + break; + default: + timeout = ISO15693_READER_TIMEOUT; + } - if (DBGLEVEL >= DBG_EXTENDED) { - Dbprintf("SEND:"); - Dbhexdump(datalen, data, false); - } + if (DBGLEVEL >= DBG_EXTENDED) { + Dbprintf("SEND:"); + Dbhexdump(datalen, data, false); + } - recvlen = SendDataTag(data, datalen, true, speed, (recv ? recvbuf : NULL), sizeof(recvbuf), 0, timeout, &eof_time); + recvlen = SendDataTag(data, datalen, true, speed, (recv ? recvbuf : NULL), sizeof(recvbuf), 0, timeout, &eof_time); // send a single EOF to get the tag response - if (request_answer) { - recvlen = SendDataTagEOF((recv ? recvbuf : NULL), sizeof(recvbuf), 0, ISO15693_READER_TIMEOUT, &eof_time); - } - - // for the time being, switch field off to protect rdv4.0 - // note: this prevents using hf 15 cmd with s option - which isn't implemented yet anyway - FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); - LED_D_OFF(); + if (request_answer) { + recvlen = SendDataTagEOF((recv ? recvbuf : NULL), sizeof(recvbuf), 0, ISO15693_READER_TIMEOUT, &eof_time); + } + + // for the time being, switch field off to protect rdv4.0 + // note: this prevents using hf 15 cmd with s option - which isn't implemented yet anyway + FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); + LED_D_OFF(); if (recv) { - if (recvlen > ISO15693_MAX_RESPONSE_LENGTH) { - recvlen = ISO15693_MAX_RESPONSE_LENGTH; - } - reply_mix(CMD_ACK, recvlen, 0, 0, recvbuf, ISO15693_MAX_RESPONSE_LENGTH); - - - if (DBGLEVEL >= DBG_EXTENDED) { - Dbprintf("RECV:"); - if (recvlen > 0) { - Dbhexdump(recvlen, recvbuf, false); - DbdecodeIso15693Answer(recvlen, recvbuf); - } - } - + if (recvlen > ISO15693_MAX_RESPONSE_LENGTH) { + recvlen = ISO15693_MAX_RESPONSE_LENGTH; + } + reply_mix(CMD_ACK, recvlen, 0, 0, recvbuf, ISO15693_MAX_RESPONSE_LENGTH); + if (DBGLEVEL >= DBG_EXTENDED) { + Dbprintf("RECV:"); + if (recvlen > 0) { + Dbhexdump(recvlen, recvbuf, false); + DbdecodeIso15693Answer(recvlen, recvbuf); + } + } } else { reply_mix(CMD_ACK, 1, 0, 0, 0, 0); } @@ -1745,55 +1754,55 @@ void DirectTag15693Command(uint32_t datalen, uint32_t speed, uint32_t recv, uint // Set the UID on Magic ISO15693 tag (based on Iceman's LUA-script). void SetTag15693Uid(uint8_t *uid) { - LED_A_ON(); + LED_A_ON(); - uint8_t cmd[4][9] = { - {ISO15_REQ_DATARATE_HIGH, ISO15_CMD_WRITE, 0x3e, 0x00, 0x00, 0x00, 0x00}, - {ISO15_REQ_DATARATE_HIGH, ISO15_CMD_WRITE, 0x3f, 0x69, 0x96, 0x00, 0x00}, - {ISO15_REQ_DATARATE_HIGH, ISO15_CMD_WRITE, 0x38}, - {ISO15_REQ_DATARATE_HIGH, ISO15_CMD_WRITE, 0x39} - }; + uint8_t cmd[4][9] = { + {ISO15_REQ_DATARATE_HIGH, ISO15_CMD_WRITE, 0x3e, 0x00, 0x00, 0x00, 0x00}, + {ISO15_REQ_DATARATE_HIGH, ISO15_CMD_WRITE, 0x3f, 0x69, 0x96, 0x00, 0x00}, + {ISO15_REQ_DATARATE_HIGH, ISO15_CMD_WRITE, 0x38}, + {ISO15_REQ_DATARATE_HIGH, ISO15_CMD_WRITE, 0x39} + }; - int recvlen = 0; - uint8_t recvbuf[ISO15693_MAX_RESPONSE_LENGTH]; - uint32_t eof_time; + int recvlen = 0; + uint8_t recvbuf[ISO15693_MAX_RESPONSE_LENGTH]; + uint32_t eof_time; - // Command 3 : 022138u8u7u6u5 (where uX = uid byte X) - cmd[2][3] = uid[7]; - cmd[2][4] = uid[6]; - cmd[2][5] = uid[5]; - cmd[2][6] = uid[4]; + // Command 3 : 022138u8u7u6u5 (where uX = uid byte X) + cmd[2][3] = uid[7]; + cmd[2][4] = uid[6]; + cmd[2][5] = uid[5]; + cmd[2][6] = uid[4]; - // Command 4 : 022139u4u3u2u1 (where uX = uid byte X) - cmd[3][3] = uid[3]; - cmd[3][4] = uid[2]; - cmd[3][5] = uid[1]; - cmd[3][6] = uid[0]; + // Command 4 : 022139u4u3u2u1 (where uX = uid byte X) + cmd[3][3] = uid[3]; + cmd[3][4] = uid[2]; + cmd[3][5] = uid[1]; + cmd[3][6] = uid[0]; AddCrc15(cmd[0], 7); AddCrc15(cmd[1], 7); AddCrc15(cmd[2], 7); AddCrc15(cmd[3], 7); - uint32_t start_time = 0; - - for (int i = 0; i < 4; i++) { - - recvlen = SendDataTag(cmd[i], sizeof(cmd[i]), i == 0 ? true : false, true, recvbuf, sizeof(recvbuf), start_time, ISO15693_READER_TIMEOUT_WRITE, &eof_time); - start_time = eof_time + DELAY_ISO15693_VICC_TO_VCD_READER; + uint32_t start_time = 0; + + for (int i = 0; i < 4; i++) { + + recvlen = SendDataTag(cmd[i], sizeof(cmd[i]), i == 0 ? true : false, true, recvbuf, sizeof(recvbuf), start_time, ISO15693_READER_TIMEOUT_WRITE, &eof_time); + start_time = eof_time + DELAY_ISO15693_VICC_TO_VCD_READER; - if (DBGLEVEL >= DBG_EXTENDED) { - Dbprintf("SEND:"); - Dbhexdump(sizeof(cmd[i]), cmd[i], false); - Dbprintf("RECV:"); - if (recvlen > 0) { - Dbhexdump(recvlen, recvbuf, false); - DbdecodeIso15693Answer(recvlen, recvbuf); - } - } - } + if (DBGLEVEL >= DBG_EXTENDED) { + Dbprintf("SEND:"); + Dbhexdump(sizeof(cmd[i]), cmd[i], false); + Dbprintf("RECV:"); + if (recvlen > 0) { + Dbhexdump(recvlen, recvbuf, false); + DbdecodeIso15693Answer(recvlen, recvbuf); + } + } + } - FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); + FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); LEDsoff(); - reply_mix(CMD_ACK, recvlen, 0, 0, recvbuf, recvlen); + reply_mix(CMD_ACK, recvlen, 0, 0, recvbuf, recvlen); } From a0d23f586eb6147dfc141bd968217bf3b6216c35 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 9 Jul 2020 19:42:04 +0200 Subject: [PATCH 0062/1047] fpga --- armsrc/optimized_cipher.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/armsrc/optimized_cipher.c b/armsrc/optimized_cipher.c index 0f762a8d6..24bb8d7ee 100644 --- a/armsrc/optimized_cipher.c +++ b/armsrc/optimized_cipher.c @@ -245,7 +245,6 @@ void opt_doReaderMAC(uint8_t *cc_nr_p, uint8_t *div_key_p, uint8_t mac[4]) { uint8_t dest [] = {0, 0, 0, 0, 0, 0, 0, 0}; opt_MAC(div_key_p, cc_nr_p, dest); memcpy(mac, dest, 4); - return; } void opt_doTagMAC(uint8_t *cc_p, const uint8_t *div_key_p, uint8_t mac[4]) { @@ -257,7 +256,6 @@ void opt_doTagMAC(uint8_t *cc_p, const uint8_t *div_key_p, uint8_t mac[4]) { }; opt_suc(div_key_p, &_init, cc_p, 12, true); opt_output(div_key_p, &_init, mac); - return; } /** @@ -291,5 +289,4 @@ State opt_doTagMAC_1(uint8_t *cc_p, const uint8_t *div_key_p) { void opt_doTagMAC_2(State _init, uint8_t *nr, uint8_t mac[4], const uint8_t *div_key_p) { opt_suc(div_key_p, &_init, nr, 4, true); opt_output(div_key_p, &_init, mac); - return; } From b627d91fc2fc18d1f435a155989b69cc50f43f3c Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 9 Jul 2020 19:42:34 +0200 Subject: [PATCH 0063/1047] adapt --- client/src/cmdhficlass.c | 41 +++++++++++++++++++++------------------- 1 file changed, 22 insertions(+), 19 deletions(-) diff --git a/client/src/cmdhficlass.c b/client/src/cmdhficlass.c index f11d65945..1eda5678b 100644 --- a/client/src/cmdhficlass.c +++ b/client/src/cmdhficlass.c @@ -1121,36 +1121,38 @@ static void Calc_wb_mac(uint8_t blockno, uint8_t *data, uint8_t *div_key, uint8_ static bool select_only(uint8_t *CSN, uint8_t *CCNR, bool use_credit_key, bool verbose) { PacketResponseNG resp; - uint8_t flags = FLAG_ICLASS_READER_ONLY_ONCE; + uint8_t flags = (FLAG_ICLASS_READER_INIT | FLAG_ICLASS_READER_CLEARTRACE); if (use_credit_key) flags |= FLAG_ICLASS_READER_CEDITKEY; clearCommandBuffer(); SendCommandMIX(CMD_HF_ICLASS_READER, flags, 0, 0, NULL, 0); - if (!WaitForResponseTimeout(CMD_ACK, &resp, 2000)) { + if (WaitForResponseTimeout(CMD_ACK, &resp, 2000) == false) { PrintAndLogEx(WARNING, "command execute timeout"); return false; } uint8_t isOK = resp.oldarg[0] & 0xff; - uint8_t *data = resp.data.asBytes; - memcpy(CSN, data, 8); - - if (CCNR != NULL) - memcpy(CCNR, data + 16, 8); - - if (isOK > 0 && verbose) { - PrintAndLogEx(SUCCESS, "CSN | %s", sprint_hex(CSN, 8)); - PrintAndLogEx(SUCCESS, "CCNR | %s", sprint_hex(CCNR, 8)); + if (isOK == 0xFF) { + if (verbose) { + PrintAndLogEx(FAILED, "failed tag-select, aborting... (%d)", isOK); + } + return false; } - if (isOK <= 1) { - if (verbose) - PrintAndLogEx(FAILED, "failed to obtain CC! Tag-select is aborting... (%d)", isOK); + picopass_hdr *hdr = (picopass_hdr *)resp.data.asBytes; - return false; + if (CSN != NULL) + memcpy(CSN, hdr->csn, 8); + + if (CCNR != NULL) + memcpy(CCNR, hdr->epurse, 8); + + if (verbose) { + PrintAndLogEx(SUCCESS, "CSN %s", sprint_hex(CSN, 8)); + PrintAndLogEx(SUCCESS, "epurse %s", sprint_hex(CCNR, 8)); } return true; } @@ -1159,12 +1161,12 @@ static bool select_and_auth(uint8_t *KEY, uint8_t *MAC, uint8_t *div_key, bool u uint8_t CSN[8] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; uint8_t CCNR[12] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; - if (!select_only(CSN, CCNR, use_credit_key, verbose)) { + if (select_only(CSN, CCNR, use_credit_key, verbose) == false) { if (verbose) PrintAndLogEx(FAILED, "selecting tag failed"); - // DropField(); return false; } + //get div_key if (rawkey) memcpy(div_key, KEY, 8); @@ -1177,7 +1179,6 @@ static bool select_and_auth(uint8_t *KEY, uint8_t *MAC, uint8_t *div_key, bool u PacketResponseNG resp; clearCommandBuffer(); - SendCommandNG(CMD_HF_ICLASS_AUTH, MAC, 4); if (WaitForResponseTimeout(CMD_HF_ICLASS_AUTH, &resp, 2000) == 0) { if (verbose) PrintAndLogEx(WARNING, "Command execute timeout"); @@ -2967,10 +2968,12 @@ int readIclass(bool loop, bool verbose) { SendCommandMIX(CMD_HF_ICLASS_READER, flags, 0, 0, NULL, 0); PacketResponseNG resp; - if (WaitForResponseTimeout(CMD_ACK, &resp, 4500)) { + if (WaitForResponseTimeout(CMD_ACK, &resp, 2000)) { uint8_t readStatus = resp.oldarg[0] & 0xff; + PrintAndLogEx(NORMAL, "ICE: %x", readStatus); + // no tag found or button pressed if ((readStatus == 0 && !loop) || readStatus == 0xFF) { DropField(); From 1feb34617be5ef590234be72beaf275fd55f34e6 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 9 Jul 2020 19:43:00 +0200 Subject: [PATCH 0064/1047] hunting down why logtrace is missing --- client/src/cmdtrace.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/client/src/cmdtrace.c b/client/src/cmdtrace.c index 1b172bfb3..81840dfc1 100644 --- a/client/src/cmdtrace.c +++ b/client/src/cmdtrace.c @@ -181,7 +181,10 @@ static uint16_t printHexLine(uint16_t tracepos, uint16_t traceLen, uint8_t *trac static uint16_t printTraceLine(uint16_t tracepos, uint16_t traceLen, uint8_t *trace, uint8_t protocol, bool showWaitCycles, bool markCRCBytes) { // sanity check - if (is_last_record(tracepos, traceLen)) return traceLen; + if (is_last_record(tracepos, traceLen)) { + PrintAndLogEx(DEBUG, "last record triggered. t-pos: %u t-len %u", tracepos, traceLen); + return traceLen; + } uint32_t duration; uint16_t data_len; From a25a5322dd91e498c87794ed661be8969660ea24 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Fri, 10 Jul 2020 16:37:56 +0200 Subject: [PATCH 0065/1047] fpga: added iCLASS on deviceside --- armsrc/BigBuf.c | 81 +++++---- armsrc/Makefile | 2 +- armsrc/iclass.c | 55 ++++-- armsrc/iso15693.c | 47 ++--- armsrc/optimized_cipher.c | 28 +++ armsrc/optimized_cipher.h | 2 + armsrc/optimized_cipherutils.c | 140 ++++++++++++++ armsrc/optimized_cipherutils.h | 66 +++++++ armsrc/optimized_elite.c | 238 ++++++++++++++++++++++++ armsrc/optimized_elite.h | 62 +++++++ armsrc/optimized_ikeys.c | 324 +++++++++++++++++++++++++++++++++ armsrc/optimized_ikeys.h | 69 +++++++ client/src/cmdhficlass.c | 57 +++--- 13 files changed, 1072 insertions(+), 99 deletions(-) create mode 100644 armsrc/optimized_cipherutils.c create mode 100644 armsrc/optimized_cipherutils.h create mode 100644 armsrc/optimized_elite.c create mode 100644 armsrc/optimized_elite.h create mode 100644 armsrc/optimized_ikeys.c create mode 100644 armsrc/optimized_ikeys.h diff --git a/armsrc/BigBuf.c b/armsrc/BigBuf.c index 4642d0079..8637443a0 100644 --- a/armsrc/BigBuf.c +++ b/armsrc/BigBuf.c @@ -22,29 +22,29 @@ extern uint8_t _stack_start, __bss_end__; static uint8_t *BigBuf = &__bss_end__; /* BigBuf memory layout: -Pointer to highest available memory: BigBuf_hi - high BigBuf_size - reserved = BigBuf_malloc() subtracts amount from BigBuf_hi, +Pointer to highest available memory: s_bigbuf_hi + high s_bigbuf_size + reserved = BigBuf_malloc() subtracts amount from s_bigbuf_hi, low 0x00 */ -static uint32_t BigBuf_size = 0; +static uint32_t s_bigbuf_size = 0; // High memory mark -static uint32_t BigBuf_hi = 0; +static uint32_t s_bigbuf_hi = 0; // pointer to the emulator memory. static uint8_t *emulator_memory = NULL; // trace related variables -static uint32_t traceLen = 0; +static uint32_t trace_len = 0; static bool tracing = true; // compute the available size for BigBuf void BigBuf_initialize(void) { - BigBuf_size = (uint32_t)&_stack_start - (uint32_t)&__bss_end__; - BigBuf_hi = BigBuf_size; - traceLen = 0; + s_bigbuf_size = (uint32_t)&_stack_start - (uint32_t)&__bss_end__; + s_bigbuf_hi = s_bigbuf_size; + trace_len = 0; } // get the address of BigBuf @@ -53,7 +53,7 @@ uint8_t *BigBuf_get_addr(void) { } uint32_t BigBuf_get_size(void) { - return BigBuf_size; + return s_bigbuf_size; } // get the address of the emulator memory. Allocate part of Bigbuf for it, if not yet done @@ -64,6 +64,11 @@ uint8_t *BigBuf_get_EM_addr(void) { return emulator_memory; } +/* +uint32_t BigBuf_get_EM_size(void) { + return CARD_MEMORY_SIZE; +} +*/ // clear ALL of BigBuf void BigBuf_Clear(void) { @@ -72,9 +77,9 @@ void BigBuf_Clear(void) { // clear ALL of BigBuf void BigBuf_Clear_ext(bool verbose) { - memset(BigBuf, 0, BigBuf_size); + memset(BigBuf, 0, s_bigbuf_size); if (verbose) - Dbprintf("Buffer cleared (%i bytes)", BigBuf_size); + Dbprintf("Buffer cleared (%i bytes)", s_bigbuf_size); } void BigBuf_Clear_EM(void) { @@ -82,23 +87,23 @@ void BigBuf_Clear_EM(void) { } void BigBuf_Clear_keep_EM(void) { - memset(BigBuf, 0, BigBuf_hi); + memset(BigBuf, 0, s_bigbuf_hi); } // allocate a chunk of memory from BigBuf. We allocate high memory first. The unallocated memory // at the beginning of BigBuf is always for traces/samples uint8_t *BigBuf_malloc(uint16_t chunksize) { - if (BigBuf_hi < chunksize) + if (s_bigbuf_hi < chunksize) return NULL; // no memory left chunksize = (chunksize + 3) & 0xfffc; // round to next multiple of 4 - BigBuf_hi -= chunksize; // aligned to 4 Byte boundary - return (uint8_t *)BigBuf + BigBuf_hi; + s_bigbuf_hi -= chunksize; // aligned to 4 Byte boundary + return (uint8_t *)BigBuf + s_bigbuf_hi; } // free ALL allocated chunks. The whole BigBuf is available for traces or samples again. void BigBuf_free(void) { - BigBuf_hi = BigBuf_size; + s_bigbuf_hi = s_bigbuf_size; emulator_memory = NULL; // shouldn't this empty BigBuf also? } @@ -106,33 +111,33 @@ void BigBuf_free(void) { // free allocated chunks EXCEPT the emulator memory void BigBuf_free_keep_EM(void) { if (emulator_memory != NULL) - BigBuf_hi = emulator_memory - (uint8_t *)BigBuf; + s_bigbuf_hi = emulator_memory - (uint8_t *)BigBuf; else - BigBuf_hi = BigBuf_size; + s_bigbuf_hi = s_bigbuf_size; // shouldn't this empty BigBuf also? } void BigBuf_print_status(void) { DbpString(_CYAN_("Memory")); - Dbprintf(" BigBuf_size.............%d", BigBuf_size); - Dbprintf(" Available memory........%d", BigBuf_hi); + Dbprintf(" BigBuf_size.............%d", s_bigbuf_size); + Dbprintf(" Available memory........%d", s_bigbuf_hi); DbpString(_CYAN_("Tracing")); Dbprintf(" tracing ................%d", tracing); - Dbprintf(" traceLen ...............%d", traceLen); + Dbprintf(" traceLen ...............%d", trace_len); } // return the maximum trace length (i.e. the unallocated size of BigBuf) uint16_t BigBuf_max_traceLen(void) { - return BigBuf_hi; + return s_bigbuf_hi; } void clear_trace(void) { - traceLen = 0; + trace_len = 0; } void set_tracelen(uint32_t value) { - traceLen = value; + trace_len = value; } void set_tracing(bool enable) { @@ -148,7 +153,7 @@ bool get_tracing(void) { * @return */ uint32_t BigBuf_get_traceLen(void) { - return traceLen; + return trace_len; } /** @@ -164,12 +169,12 @@ bool RAMFUNC LogTrace(const uint8_t *btBytes, uint16_t iLen, uint32_t timestamp_ } uint8_t *trace = BigBuf_get_addr(); - tracelog_hdr_t *hdr = (tracelog_hdr_t *)(trace + traceLen); + tracelog_hdr_t *hdr = (tracelog_hdr_t *)(trace + trace_len); uint32_t num_paritybytes = (iLen - 1) / 8 + 1; // number of valid paritybytes in *parity // Return when trace is full - if (TRACELOG_HDR_LEN + iLen + num_paritybytes >= BigBuf_max_traceLen() - traceLen) { + if (TRACELOG_HDR_LEN + iLen + num_paritybytes >= BigBuf_max_traceLen() - trace_len) { tracing = false; // don't trace any more if (DBGLEVEL >= DBG_DEBUG) { Dbprintf("trace is full"); } return false; @@ -185,33 +190,35 @@ bool RAMFUNC LogTrace(const uint8_t *btBytes, uint16_t iLen, uint32_t timestamp_ if (duration > 0x7FFF) { if (DBGLEVEL >= DBG_DEBUG) { Dbprintf("Error in LogTrace: duration too long for 15 bits encoding: 0x%08x start:0x%08x end:0x%08x", duration, timestamp_start, timestamp_end); - Dbprintf("Forcing duration = 0"); +// Dbprintf("Forcing duration = 0"); } - duration = 0; + + duration /= 32; + // duration >>= 5; +// duration = 0; } hdr->timestamp = timestamp_start; hdr->duration = duration; hdr->data_len = iLen; hdr->isResponse = !readerToTag; - traceLen += TRACELOG_HDR_LEN; + trace_len += TRACELOG_HDR_LEN; // data bytes if (btBytes != NULL && iLen != 0) { - memcpy(trace + traceLen, btBytes, iLen); + memcpy(trace + trace_len, btBytes, iLen); } - traceLen += iLen; + trace_len += iLen; // parity bytes if (num_paritybytes != 0) { if (parity != NULL) { - memcpy(trace + traceLen, parity, num_paritybytes); + memcpy(trace + trace_len, parity, num_paritybytes); } else { - memset(trace + traceLen, 0x00, num_paritybytes); + memset(trace + trace_len, 0x00, num_paritybytes); } } - traceLen += num_paritybytes; - + trace_len += num_paritybytes; return true; } diff --git a/armsrc/Makefile b/armsrc/Makefile index 44ca3ab6b..2768ab3a4 100644 --- a/armsrc/Makefile +++ b/armsrc/Makefile @@ -30,7 +30,7 @@ SRC_ISO14443b = iso14443b.c SRC_FELICA = felica.c SRC_CRAPTO1 = crypto1.c des.c desfire_crypto.c mifaredesfire.c aes.c platform_util.c SRC_CRC = crc.c crc16.c crc32.c -SRC_ICLASS = iclass.c optimized_cipher.c +SRC_ICLASS = iclass.c optimized_cipherutils.c optimized_ikeys.c optimized_elite.c optimized_cipher.c SRC_LEGIC = legicrf.c legicrfsim.c legic_prng.c SRC_NFCBARCODE = thinfilm.c diff --git a/armsrc/iclass.c b/armsrc/iclass.c index 478bafa43..a68565830 100644 --- a/armsrc/iclass.c +++ b/armsrc/iclass.c @@ -781,9 +781,10 @@ static void iclass_send_as_reader(uint8_t *frame, int len, uint32_t *start_time) CodeIso15693AsReader(frame, len); TransmitTo15693Tag(ToSend, ToSendMax, start_time); - uint32_t end_time = *start_time + 32 * (8 * ToSendMax - 4); // substract the 4 padding bits after EOF + uint32_t end_time = *start_time + (32 * ((8 * ToSendMax) - 4)); // substract the 4 padding bits after EOF - LogTrace(frame, len, *start_time * 4, end_time * 4, NULL, true); + if (LogTrace(frame, len, (*start_time * 4), (end_time * 4), NULL, true) == false) + DbpString("send_as_reader: failed logtrace"); } static bool iclass_send_cmd_with_retries(uint8_t* cmd, size_t cmdsize, uint8_t* resp, size_t max_resp_size, @@ -1112,35 +1113,57 @@ void iClass_ReadCheck(uint8_t blockno, uint8_t keytype) { // used with function select_and_auth (cmdhficlass.c) // which needs to authenticate before doing more things like read/write -void iClass_Authentication(uint8_t *mac) { +// selects and authenticate to a card, sends back div_key and mac to client. +void iClass_Authentication(uint8_t *bytes) { + + struct p { + uint8_t key[8]; + bool use_raw; + bool use_elite; + bool use_credit_key; + } PACKED; + struct p *payload = (struct p *)bytes; + + // device response message + struct { + bool isOK; + uint8_t div_key[8]; + uint8_t mac[4]; + } PACKED packet; Iso15693InitReader(); StartCountSspClk(); uint8_t card_data[3 * 8] = {0xFF}; - bool use_credit_key = false; uint32_t eof_time = 0; - bool isOK = select_iclass_tag(card_data, use_credit_key, &eof_time); - if (isOK == false) { - reply_ng(CMD_HF_ICLASS_AUTH, PM3_SUCCESS, (uint8_t *)&isOK, sizeof(uint8_t)); + packet.isOK = select_iclass_tag(card_data, payload->use_credit_key, &eof_time); + if (packet.isOK == false) { + reply_ng(CMD_HF_ICLASS_AUTH, PM3_SUCCESS, (uint8_t *)&packet, sizeof(packet)); return; } uint32_t start_time = eof_time + DELAY_ICLASS_VICC_TO_VCD_READER; uint8_t check[9] = { ICLASS_CMD_CHECK }; -// uint8_t mac[4]; -// opt_doReaderMAC(uint8_t *cc_nr_p, uint8_t *div_key_p, mac ) + uint8_t ccnr[12] = {0}; + memcpy(ccnr, card_data + 16, 8); + + if (payload->use_raw) + memcpy(packet.div_key, payload->key, 8); + else + iclass_calc_div_key(card_data, payload->key, packet.div_key, payload->use_elite); + + opt_doReaderMAC(ccnr, packet.div_key, packet.mac); // copy MAC to check command (readersignature) - check[5] = mac[0]; - check[6] = mac[1]; - check[7] = mac[2]; - check[8] = mac[3]; + check[5] = packet.mac[0]; + check[6] = packet.mac[1]; + check[7] = packet.mac[2]; + check[8] = packet.mac[3]; uint8_t resp[ICLASS_BUFFER_SIZE]; - isOK = iclass_send_cmd_with_retries(check, sizeof(check), resp, sizeof(resp), 4, 3, start_time, ICLASS_READER_TIMEOUT_OTHERS, &eof_time); - reply_ng(CMD_HF_ICLASS_AUTH, PM3_SUCCESS, (uint8_t *)&isOK, sizeof(uint8_t)); + packet.isOK = iclass_send_cmd_with_retries(check, sizeof(check), resp, sizeof(resp), 4, 3, start_time, ICLASS_READER_TIMEOUT_OTHERS, &eof_time); + reply_ng(CMD_HF_ICLASS_AUTH, PM3_SUCCESS, (uint8_t *)&packet, sizeof(packet)); } typedef struct iclass_premac { @@ -1300,6 +1323,8 @@ void iClass_Dump(uint8_t start_blockno, uint8_t numblks) { // return pointer to dump memory in arg3 // iceman: why not return | dataout - getbigbuf ? Should give exact location. + Dbprintf("ICE:: dataout, %u max trace %u, bb start %u, data-bb %u ", dataout, BigBuf_max_traceLen(), BigBuf_get_addr(), dataout - BigBuf_get_addr() ); + Dbprintf("ICE:: bb size %u, malloced %u (255*8)", BigBuf_get_size(), BigBuf_get_size() - (dataout - BigBuf_get_addr()) ); reply_mix(CMD_ACK, isOK, blkcnt, BigBuf_max_traceLen(), 0, 0); BigBuf_free(); } diff --git a/armsrc/iso15693.c b/armsrc/iso15693.c index f8214b5e4..39a64a8c4 100644 --- a/armsrc/iso15693.c +++ b/armsrc/iso15693.c @@ -688,9 +688,9 @@ int GetIso15693AnswerFromTag(uint8_t* response, uint16_t max_len, uint16_t timeo FpgaDisableSscDma(); uint32_t sof_time = *eof_time - - DecodeTag.len * 8 * 8 * 16 // time for byte transfers - - 32 * 16 // time for SOF transfer - - (DecodeTag.lastBit != SOF_PART2?32*16:0); // time for EOF transfer + - (DecodeTag.len * 8 * 8 * 16) // time for byte transfers + - (32 * 16) // time for SOF transfer + - (DecodeTag.lastBit != SOF_PART2 ? (32 * 16) : 0); // time for EOF transfer if (DBGLEVEL >= DBG_EXTENDED) { Dbprintf("samples = %d, ret = %d, Decoder: state = %d, lastBit = %d, len = %d, bitCount = %d, posCount = %d", @@ -705,7 +705,8 @@ int GetIso15693AnswerFromTag(uint8_t* response, uint16_t max_len, uint16_t timeo Dbprintf("timing: sof_time = %d, eof_time = %d", (sof_time * 4), (*eof_time * 4)); } - LogTrace(DecodeTag.output, DecodeTag.len, (sof_time * 4), (*eof_time * 4), NULL, false); + if (LogTrace(DecodeTag.output, DecodeTag.len, (sof_time * 4), (*eof_time * 4), NULL, false) == false) + DbpString("GetIso15693AnswerFromTag: failed logtrace"); if (ret < 0) { return ret; @@ -1090,7 +1091,8 @@ int GetIso15693CommandFromReader(uint8_t *received, size_t max_len, uint32_t *eo - DecodeReader.byteCount * (DecodeReader.Coding==CODING_1_OUT_OF_4?128:2048) // time for byte transfers - 32 // time for SOF transfer - 16; // time for EOF transfer - LogTrace(DecodeReader.output, DecodeReader.byteCount, sof_time*32, *eof_time*32, NULL, true); + if (LogTrace(DecodeReader.output, DecodeReader.byteCount, sof_time*32, *eof_time*32, NULL, true) == false) + DbpString("GetIso15693CommandFromReader: failed logtrace"); } return DecodeReader.byteCount; @@ -1223,16 +1225,18 @@ void SniffIso15693(uint8_t jam_search_len, uint8_t *jam_search_string) { } } - if (!TagIsActive) { // no need to try decoding reader data if the tag is sending + // no need to try decoding reader data if the tag is sending + if (TagIsActive == false) { + if (Handle15693SampleFromReader(sniffdata & 0x02, &DecodeReader)) { - uint32_t eof_time = dma_start_time + samples*16 + 8 - DELAY_READER_TO_ARM_SNIFF; // end of EOF + uint32_t eof_time = dma_start_time + (samples * 16) + 8 - DELAY_READER_TO_ARM_SNIFF; // end of EOF if (DecodeReader.byteCount > 0) { uint32_t sof_time = eof_time - - DecodeReader.byteCount * (DecodeReader.Coding==CODING_1_OUT_OF_4?128*16:2048*16) // time for byte transfers - - 32*16 // time for SOF transfer - - 16*16; // time for EOF transfer - LogTrace(DecodeReader.output, DecodeReader.byteCount, sof_time*4, eof_time*4, NULL, true); + - DecodeReader.byteCount * (DecodeReader.Coding == CODING_1_OUT_OF_4 ? 128 * 16 : 2048 * 16) // time for byte transfers + - 32 * 16 // time for SOF transfer + - 16 * 16; // time for EOF transfer + LogTrace(DecodeReader.output, DecodeReader.byteCount, (sof_time * 4), (eof_time * 4), NULL, true); } // And ready to receive another command. DecodeReaderReset(&DecodeReader); @@ -1244,13 +1248,13 @@ void SniffIso15693(uint8_t jam_search_len, uint8_t *jam_search_string) { } else if (Handle15693SampleFromReader(sniffdata & 0x01, &DecodeReader)) { - uint32_t eof_time = dma_start_time + samples*16 + 16 - DELAY_READER_TO_ARM_SNIFF; // end of EOF + uint32_t eof_time = dma_start_time + (samples * 16) + 16 - DELAY_READER_TO_ARM_SNIFF; // end of EOF if (DecodeReader.byteCount > 0) { uint32_t sof_time = eof_time - - DecodeReader.byteCount * (DecodeReader.Coding==CODING_1_OUT_OF_4?128*16:2048*16) // time for byte transfers - - 32*16 // time for SOF transfer - - 16*16; // time for EOF transfer - LogTrace(DecodeReader.output, DecodeReader.byteCount, sof_time*4, eof_time*4, NULL, true); + - DecodeReader.byteCount * (DecodeReader.Coding == CODING_1_OUT_OF_4 ? 128 * 16 : 2048 * 16) // time for byte transfers + - 32 * 16 // time for SOF transfer + - 16 * 16; // time for EOF transfer + LogTrace(DecodeReader.output, DecodeReader.byteCount, (sof_time * 4), (eof_time * 4), NULL, true); } // And ready to receive another command DecodeReaderReset(&DecodeReader); @@ -1269,15 +1273,16 @@ void SniffIso15693(uint8_t jam_search_len, uint8_t *jam_search_string) { if (!ReaderIsActive && ExpectTagAnswer) { // no need to try decoding tag data if the reader is currently sending or no answer expected yet if (Handle15693SamplesFromTag(sniffdata >> 2, &DecodeTag)) { - uint32_t eof_time = dma_start_time + samples*16 - DELAY_TAG_TO_ARM_SNIFF; // end of EOF + uint32_t eof_time = dma_start_time + (samples * 16) - DELAY_TAG_TO_ARM_SNIFF; // end of EOF if (DecodeTag.lastBit == SOF_PART2) { - eof_time -= 8*16; // needed 8 additional samples to confirm single SOF (iCLASS) + eof_time -= (8 * 16); // needed 8 additional samples to confirm single SOF (iCLASS) } uint32_t sof_time = eof_time - DecodeTag.len * 8 * 8 * 16 // time for byte transfers - - 32 * 16 // time for SOF transfer - - (DecodeTag.lastBit != SOF_PART2?32*16:0); // time for EOF transfer - LogTrace(DecodeTag.output, DecodeTag.len, sof_time*4, eof_time*4, NULL, false); + - (32 * 16) // time for SOF transfer + - (DecodeTag.lastBit != SOF_PART2 ? (32 * 16) : 0); // time for EOF transfer + + LogTrace(DecodeTag.output, DecodeTag.len, (sof_time * 4), (eof_time * 4), NULL, false); // And ready to receive another response. DecodeTagReset(&DecodeTag); DecodeReaderReset(&DecodeReader); diff --git a/armsrc/optimized_cipher.c b/armsrc/optimized_cipher.c index 24bb8d7ee..021b8ae22 100644 --- a/armsrc/optimized_cipher.c +++ b/armsrc/optimized_cipher.c @@ -77,7 +77,15 @@ -- piwi 2019 **/ +/** + add the possibility to do iCLASS on device only + -- iceman 2020 +**/ + #include "optimized_cipher.h" +#include "optimized_elite.h" +#include "optimized_ikeys.h" +#include "optimized_cipherutils.h" static const uint8_t opt_select_LUT[256] = { 00, 03, 02, 01, 02, 03, 00, 01, 04, 07, 07, 04, 06, 07, 05, 04, @@ -290,3 +298,23 @@ void opt_doTagMAC_2(State _init, uint8_t *nr, uint8_t mac[4], const uint8_t *di opt_suc(div_key_p, &_init, nr, 4, true); opt_output(div_key_p, &_init, mac); } + + +void iclass_calc_div_key(uint8_t *csn, uint8_t *key, uint8_t *div_key, bool elite) { + if (elite) { + uint8_t keytable[128] = {0}; + uint8_t key_index[8] = {0}; + uint8_t key_sel[8] = { 0 }; + uint8_t key_sel_p[8] = { 0 }; + hash2(key, keytable); + hash1(csn, key_index); + for (uint8_t i = 0; i < 8 ; i++) + key_sel[i] = keytable[key_index[i]]; + + //Permute from iclass format to standard format + permutekey_rev(key_sel, key_sel_p); + diversifyKey(csn, key_sel_p, div_key); + } else { + diversifyKey(csn, key, div_key); + } +} diff --git a/armsrc/optimized_cipher.h b/armsrc/optimized_cipher.h index c6df25ab8..e65b6c4cb 100644 --- a/armsrc/optimized_cipher.h +++ b/armsrc/optimized_cipher.h @@ -46,4 +46,6 @@ State opt_doTagMAC_1(uint8_t *cc_p, const uint8_t *div_key_p); */ void opt_doTagMAC_2(State _init, uint8_t *nr, uint8_t mac[4], const uint8_t *div_key_p); + +void iclass_calc_div_key(uint8_t *csn, uint8_t *key, uint8_t *div_key, bool elite); #endif // OPTIMIZED_CIPHER_H diff --git a/armsrc/optimized_cipherutils.c b/armsrc/optimized_cipherutils.c new file mode 100644 index 000000000..c51f83f9b --- /dev/null +++ b/armsrc/optimized_cipherutils.c @@ -0,0 +1,140 @@ +/***************************************************************************** + * WARNING + * + * THIS CODE IS CREATED FOR EXPERIMENTATION AND EDUCATIONAL USE ONLY. + * + * USAGE OF THIS CODE IN OTHER WAYS MAY INFRINGE UPON THE INTELLECTUAL + * PROPERTY OF OTHER PARTIES, SUCH AS INSIDE SECURE AND HID GLOBAL, + * AND MAY EXPOSE YOU TO AN INFRINGEMENT ACTION FROM THOSE PARTIES. + * + * THIS CODE SHOULD NEVER BE USED TO INFRINGE PATENTS OR INTELLECTUAL PROPERTY RIGHTS. + * + ***************************************************************************** + * + * This file is part of loclass. It is a reconstructon of the cipher engine + * used in iClass, and RFID techology. + * + * The implementation is based on the work performed by + * Flavio D. Garcia, Gerhard de Koning Gans, Roel Verdult and + * Milosch Meriac in the paper "Dismantling IClass". + * + * Copyright (C) 2014 Martin Holst Swende + * + * This is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as published + * by the Free Software Foundation, or, at your option, any later version. + * + * This file is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with loclass. If not, see . + * + * + ****************************************************************************/ +#include "optimized_cipherutils.h" +#include + +/** + * + * @brief Return and remove the first bit (x0) in the stream : + * @param stream + * @return + */ +bool headBit(BitstreamIn *stream) { + int bytepos = stream->position >> 3; // divide by 8 + int bitpos = (stream->position++) & 7; // mask out 00000111 + return (*(stream->buffer + bytepos) >> (7 - bitpos)) & 1; +} +/** + * @brief Return and remove the last bit (xn) in the stream: + * @param stream + * @return + */ +bool tailBit(BitstreamIn *stream) { + int bitpos = stream->numbits - 1 - (stream->position++); + + int bytepos = bitpos >> 3; + bitpos &= 7; + return (*(stream->buffer + bytepos) >> (7 - bitpos)) & 1; +} +/** + * @brief Pushes bit onto the stream + * @param stream + * @param bit + */ +void pushBit(BitstreamOut *stream, bool bit) { + int bytepos = stream->position >> 3; // divide by 8 + int bitpos = stream->position & 7; + *(stream->buffer + bytepos) |= (bit) << (7 - bitpos); + stream->position++; + stream->numbits++; +} + +/** + * @brief Pushes the lower six bits onto the stream + * as b0 b1 b2 b3 b4 b5 b6 + * @param stream + * @param bits + */ +void push6bits(BitstreamOut *stream, uint8_t bits) { + pushBit(stream, bits & 0x20); + pushBit(stream, bits & 0x10); + pushBit(stream, bits & 0x08); + pushBit(stream, bits & 0x04); + pushBit(stream, bits & 0x02); + pushBit(stream, bits & 0x01); +} + +/** + * @brief bitsLeft + * @param stream + * @return number of bits left in stream + */ +int bitsLeft(BitstreamIn *stream) { + return stream->numbits - stream->position; +} +/** + * @brief numBits + * @param stream + * @return Number of bits stored in stream + */ +void x_num_to_bytes(uint64_t n, size_t len, uint8_t *dest) { + while (len--) { + dest[len] = (uint8_t) n; + n >>= 8; + } +} + +uint64_t x_bytes_to_num(uint8_t *src, size_t len) { + uint64_t num = 0; + while (len--) { + num = (num << 8) | (*src); + src++; + } + return num; +} + +uint8_t reversebytes(uint8_t b) { + b = (b & 0xF0) >> 4 | (b & 0x0F) << 4; + b = (b & 0xCC) >> 2 | (b & 0x33) << 2; + b = (b & 0xAA) >> 1 | (b & 0x55) << 1; + return b; +} + +void reverse_arraybytes(uint8_t *arr, size_t len) { + uint8_t i; + for (i = 0; i < len ; i++) { + arr[i] = reversebytes(arr[i]); + } +} + +void reverse_arraycopy(uint8_t *arr, uint8_t *dest, size_t len) { + uint8_t i; + for (i = 0; i < len ; i++) { + dest[i] = reversebytes(arr[i]); + } +} + diff --git a/armsrc/optimized_cipherutils.h b/armsrc/optimized_cipherutils.h new file mode 100644 index 000000000..63ba8b8aa --- /dev/null +++ b/armsrc/optimized_cipherutils.h @@ -0,0 +1,66 @@ +/***************************************************************************** + * WARNING + * + * THIS CODE IS CREATED FOR EXPERIMENTATION AND EDUCATIONAL USE ONLY. + * + * USAGE OF THIS CODE IN OTHER WAYS MAY INFRINGE UPON THE INTELLECTUAL + * PROPERTY OF OTHER PARTIES, SUCH AS INSIDE SECURE AND HID GLOBAL, + * AND MAY EXPOSE YOU TO AN INFRINGEMENT ACTION FROM THOSE PARTIES. + * + * THIS CODE SHOULD NEVER BE USED TO INFRINGE PATENTS OR INTELLECTUAL PROPERTY RIGHTS. + * + ***************************************************************************** + * + * This file is part of loclass. It is a reconstructon of the cipher engine + * used in iClass, and RFID techology. + * + * The implementation is based on the work performed by + * Flavio D. Garcia, Gerhard de Koning Gans, Roel Verdult and + * Milosch Meriac in the paper "Dismantling IClass". + * + * Copyright (C) 2014 Martin Holst Swende + * + * This is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as published + * by the Free Software Foundation, or, at your option, any later version. + * + * This file is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with loclass. If not, see . + * + * + ****************************************************************************/ +#ifndef CIPHERUTILS_H +#define CIPHERUTILS_H +#include +#include +#include + +typedef struct { + uint8_t *buffer; + uint8_t numbits; + uint8_t position; +} BitstreamIn; + +typedef struct { + uint8_t *buffer; + uint8_t numbits; + uint8_t position; +} BitstreamOut; + +bool headBit(BitstreamIn *stream); +bool tailBit(BitstreamIn *stream); +void pushBit(BitstreamOut *stream, bool bit); +int bitsLeft(BitstreamIn *stream); + +void push6bits(BitstreamOut *stream, uint8_t bits); +void x_num_to_bytes(uint64_t n, size_t len, uint8_t *dest); +uint64_t x_bytes_to_num(uint8_t *src, size_t len); +uint8_t reversebytes(uint8_t b); +void reverse_arraybytes(uint8_t *arr, size_t len); +void reverse_arraycopy(uint8_t *arr, uint8_t *dest, size_t len); +#endif // CIPHERUTILS_H diff --git a/armsrc/optimized_elite.c b/armsrc/optimized_elite.c new file mode 100644 index 000000000..d2c57ac68 --- /dev/null +++ b/armsrc/optimized_elite.c @@ -0,0 +1,238 @@ +/***************************************************************************** + * WARNING + * + * THIS CODE IS CREATED FOR EXPERIMENTATION AND EDUCATIONAL USE ONLY. + * + * USAGE OF THIS CODE IN OTHER WAYS MAY INFRINGE UPON THE INTELLECTUAL + * PROPERTY OF OTHER PARTIES, SUCH AS INSIDE SECURE AND HID GLOBAL, + * AND MAY EXPOSE YOU TO AN INFRINGEMENT ACTION FROM THOSE PARTIES. + * + * THIS CODE SHOULD NEVER BE USED TO INFRINGE PATENTS OR INTELLECTUAL PROPERTY RIGHTS. + * + ***************************************************************************** + * + * This file is part of loclass. It is a reconstructon of the cipher engine + * used in iClass, and RFID techology. + * + * The implementation is based on the work performed by + * Flavio D. Garcia, Gerhard de Koning Gans, Roel Verdult and + * Milosch Meriac in the paper "Dismantling IClass". + * + * Copyright (C) 2014 Martin Holst Swende + * + * This is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as published + * by the Free Software Foundation, or, at your option, any later version. + * + * This file is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with loclass. If not, see . + * + * + * + ****************************************************************************/ +#include "optimized_elite.h" + +#include +#include +#include +#include "mbedtls/des.h" +#include "optimized_ikeys.h" + +/** + * @brief Permutes a key from standard NIST format to Iclass specific format + * from http://www.proxmark.org/forum/viewtopic.php?pid=11220#p11220 + * + * If you permute [6c 8d 44 f9 2a 2d 01 bf] you get [8a 0d b9 88 bb a7 90 ea] as shown below. + * + * 1 0 1 1 1 1 1 1 bf + * 0 0 0 0 0 0 0 1 01 + * 0 0 1 0 1 1 0 1 2d + * 0 0 1 0 1 0 1 0 2a + * 1 1 1 1 1 0 0 1 f9 + * 0 1 0 0 0 1 0 0 44 + * 1 0 0 0 1 1 0 1 8d + * 0 1 1 0 1 1 0 0 6c + * + * 8 0 b 8 b a 9 e + * a d 9 8 b 7 0 a + * + * @param key + * @param dest + */ +void permutekey(uint8_t key[8], uint8_t dest[8]) { + int i; + for (i = 0 ; i < 8 ; i++) { + dest[i] = (((key[7] & (0x80 >> i)) >> (7 - i)) << 7) | + (((key[6] & (0x80 >> i)) >> (7 - i)) << 6) | + (((key[5] & (0x80 >> i)) >> (7 - i)) << 5) | + (((key[4] & (0x80 >> i)) >> (7 - i)) << 4) | + (((key[3] & (0x80 >> i)) >> (7 - i)) << 3) | + (((key[2] & (0x80 >> i)) >> (7 - i)) << 2) | + (((key[1] & (0x80 >> i)) >> (7 - i)) << 1) | + (((key[0] & (0x80 >> i)) >> (7 - i)) << 0); + } +} +/** + * Permutes a key from iclass specific format to NIST format + * @brief permutekey_rev + * @param key + * @param dest + */ +void permutekey_rev(uint8_t key[8], uint8_t dest[8]) { + int i; + for (i = 0 ; i < 8 ; i++) { + dest[7 - i] = (((key[0] & (0x80 >> i)) >> (7 - i)) << 7) | + (((key[1] & (0x80 >> i)) >> (7 - i)) << 6) | + (((key[2] & (0x80 >> i)) >> (7 - i)) << 5) | + (((key[3] & (0x80 >> i)) >> (7 - i)) << 4) | + (((key[4] & (0x80 >> i)) >> (7 - i)) << 3) | + (((key[5] & (0x80 >> i)) >> (7 - i)) << 2) | + (((key[6] & (0x80 >> i)) >> (7 - i)) << 1) | + (((key[7] & (0x80 >> i)) >> (7 - i)) << 0); + } +} + +/** + * Helper function for hash1 + * @brief rr + * @param val + * @return + */ +static inline uint8_t rr(uint8_t val) { + return val >> 1 | ((val & 1) << 7); +} + +/** + * Helper function for hash1 + * @brief rl + * @param val + * @return + */ +static inline uint8_t rl(uint8_t val) { + return val << 1 | ((val & 0x80) >> 7); +} + +/** + * Helper function for hash1 + * @brief swap + * @param val + * @return + */ +static inline uint8_t swap(uint8_t val) { + return ((val >> 4) & 0xFF) | ((val & 0xFF) << 4); +} + +/** + * Hash1 takes CSN as input, and determines what bytes in the keytable will be used + * when constructing the K_sel. + * @param csn the CSN used + * @param k output + */ +void hash1(uint8_t csn[], uint8_t k[]) { + k[0] = csn[0] ^ csn[1] ^ csn[2] ^ csn[3] ^ csn[4] ^ csn[5] ^ csn[6] ^ csn[7]; + k[1] = csn[0] + csn[1] + csn[2] + csn[3] + csn[4] + csn[5] + csn[6] + csn[7]; + k[2] = rr(swap(csn[2] + k[1])); + k[3] = rl(swap(csn[3] + k[0])); + k[4] = ~rr(csn[4] + k[2]) + 1; + k[5] = ~rl(csn[5] + k[3]) + 1; + k[6] = rr(csn[6] + (k[4] ^ 0x3c)); + k[7] = rl(csn[7] + (k[5] ^ 0xc3)); + + k[7] &= 0x7F; + k[6] &= 0x7F; + k[5] &= 0x7F; + k[4] &= 0x7F; + k[3] &= 0x7F; + k[2] &= 0x7F; + k[1] &= 0x7F; + k[0] &= 0x7F; +} +/** +Definition 14. Define the rotate key function rk : (F 82 ) 8 × N → (F 82 ) 8 as +rk(x [0] . . . x [7] , 0) = x [0] . . . x [7] +rk(x [0] . . . x [7] , n + 1) = rk(rl(x [0] ) . . . rl(x [7] ), n) +**/ +static void rk(uint8_t *key, uint8_t n, uint8_t *outp_key) { + memcpy(outp_key, key, 8); + uint8_t j; + while (n-- > 0) { + for (j = 0; j < 8 ; j++) + outp_key[j] = rl(outp_key[j]); + } + return; +} + +static mbedtls_des_context ctx_enc; +static mbedtls_des_context ctx_dec; + +static void desdecrypt_iclass(uint8_t *iclass_key, uint8_t *input, uint8_t *output) { + uint8_t key_std_format[8] = {0}; + permutekey_rev(iclass_key, key_std_format); + mbedtls_des_setkey_dec(&ctx_dec, key_std_format); + mbedtls_des_crypt_ecb(&ctx_dec, input, output); +} + +static void desencrypt_iclass(uint8_t *iclass_key, uint8_t *input, uint8_t *output) { + uint8_t key_std_format[8] = {0}; + permutekey_rev(iclass_key, key_std_format); + mbedtls_des_setkey_enc(&ctx_enc, key_std_format); + mbedtls_des_crypt_ecb(&ctx_enc, input, output); +} + +/** + * @brief Insert uint8_t[8] custom master key to calculate hash2 and return key_select. + * @param key unpermuted custom key + * @param hash1 hash1 + * @param key_sel output key_sel=h[hash1[i]] + */ +void hash2(uint8_t *key64, uint8_t *outp_keytable) { + /** + *Expected: + * High Security Key Table + + 00 F1 35 59 A1 0D 5A 26 7F 18 60 0B 96 8A C0 25 C1 + 10 BF A1 3B B0 FF 85 28 75 F2 1F C6 8F 0E 74 8F 21 + 20 14 7A 55 16 C8 A9 7D B3 13 0C 5D C9 31 8D A9 B2 + 30 A3 56 83 0F 55 7E DE 45 71 21 D2 6D C1 57 1C 9C + 40 78 2F 64 51 42 7B 64 30 FA 26 51 76 D3 E0 FB B6 + 50 31 9F BF 2F 7E 4F 94 B4 BD 4F 75 91 E3 1B EB 42 + 60 3F 88 6F B8 6C 2C 93 0D 69 2C D5 20 3C C1 61 95 + 70 43 08 A0 2F FE B3 26 D7 98 0B 34 7B 47 70 A0 AB + + **** The 64-bit HS Custom Key Value = 5B7C62C491C11B39 ******/ + uint8_t key64_negated[8] = {0}; + uint8_t z[8][8] = {{0}, {0}}; + uint8_t temp_output[8] = {0}; + + //calculate complement of key + int i; + for (i = 0; i < 8; i++) + key64_negated[i] = ~key64[i]; + + // Once again, key is on iclass-format + desencrypt_iclass(key64, key64_negated, z[0]); + + uint8_t y[8][8] = {{0}, {0}}; + + // y[0]=DES_dec(z[0],~key) + // Once again, key is on iclass-format + desdecrypt_iclass(z[0], key64_negated, y[0]); + + for (i = 1; i < 8; i++) { + rk(key64, i, temp_output); + desdecrypt_iclass(temp_output, z[i - 1], z[i]); + desencrypt_iclass(temp_output, y[i - 1], y[i]); + } + + if (outp_keytable != NULL) { + for (i = 0 ; i < 8 ; i++) { + memcpy(outp_keytable + i * 16, y[i], 8); + memcpy(outp_keytable + 8 + i * 16, z[i], 8); + } + } +} diff --git a/armsrc/optimized_elite.h b/armsrc/optimized_elite.h new file mode 100644 index 000000000..281ecf0bb --- /dev/null +++ b/armsrc/optimized_elite.h @@ -0,0 +1,62 @@ +/***************************************************************************** + * WARNING + * + * THIS CODE IS CREATED FOR EXPERIMENTATION AND EDUCATIONAL USE ONLY. + * + * USAGE OF THIS CODE IN OTHER WAYS MAY INFRINGE UPON THE INTELLECTUAL + * PROPERTY OF OTHER PARTIES, SUCH AS INSIDE SECURE AND HID GLOBAL, + * AND MAY EXPOSE YOU TO AN INFRINGEMENT ACTION FROM THOSE PARTIES. + * + * THIS CODE SHOULD NEVER BE USED TO INFRINGE PATENTS OR INTELLECTUAL PROPERTY RIGHTS. + * + ***************************************************************************** + * + * This file is part of loclass. It is a reconstructon of the cipher engine + * used in iClass, and RFID techology. + * + * The implementation is based on the work performed by + * Flavio D. Garcia, Gerhard de Koning Gans, Roel Verdult and + * Milosch Meriac in the paper "Dismantling IClass". + * + * Copyright (C) 2014 Martin Holst Swende + * + * This is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as published + * by the Free Software Foundation, or, at your option, any later version. + * + * This file is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with loclass. If not, see . + * + * + ****************************************************************************/ + + +#ifndef ELITE_CRACK_H +#define ELITE_CRACK_H + +#include +#include + +void permutekey(uint8_t key[8], uint8_t dest[8]); +/** + * Permutes a key from iclass specific format to NIST format + * @brief permutekey_rev + * @param key + * @param dest + */ +void permutekey_rev(uint8_t key[8], uint8_t dest[8]); +/** + * Hash1 takes CSN as input, and determines what bytes in the keytable will be used + * when constructing the K_sel. + * @param csn the CSN used + * @param k output + */ +void hash1(uint8_t *csn, uint8_t *k); +void hash2(uint8_t *key64, uint8_t *outp_keytable); + +#endif diff --git a/armsrc/optimized_ikeys.c b/armsrc/optimized_ikeys.c new file mode 100644 index 000000000..eeb00e562 --- /dev/null +++ b/armsrc/optimized_ikeys.c @@ -0,0 +1,324 @@ +/***************************************************************************** + * WARNING + * + * THIS CODE IS CREATED FOR EXPERIMENTATION AND EDUCATIONAL USE ONLY. + * + * USAGE OF THIS CODE IN OTHER WAYS MAY INFRINGE UPON THE INTELLECTUAL + * PROPERTY OF OTHER PARTIES, SUCH AS INSIDE SECURE AND HID GLOBAL, + * AND MAY EXPOSE YOU TO AN INFRINGEMENT ACTION FROM THOSE PARTIES. + * + * THIS CODE SHOULD NEVER BE USED TO INFRINGE PATENTS OR INTELLECTUAL PROPERTY RIGHTS. + * + ***************************************************************************** + * + * This file is part of loclass. It is a reconstructon of the cipher engine + * used in iClass, and RFID techology. + * + * The implementation is based on the work performed by + * Flavio D. Garcia, Gerhard de Koning Gans, Roel Verdult and + * Milosch Meriac in the paper "Dismantling IClass". + * + * Copyright (C) 2014 Martin Holst Swende + * + * This is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as published + * by the Free Software Foundation, or, at your option, any later version. + * + * This file is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with loclass. If not, see . + * + * + ****************************************************************************/ + +/** +From "Dismantling iclass": + This section describes in detail the built-in key diversification algorithm of iClass. + Besides the obvious purpose of deriving a card key from a master key, this + algorithm intends to circumvent weaknesses in the cipher by preventing the + usage of certain ‘weak’ keys. In order to compute a diversified key, the iClass + reader first encrypts the card identity id with the master key K, using single + DES. The resulting ciphertext is then input to a function called hash0 which + outputs the diversified key k. + + k = hash0(DES enc (id, K)) + + Here the DES encryption of id with master key K outputs a cryptogram c + of 64 bits. These 64 bits are divided as c = x, y, z [0] , . . . , z [7] ∈ F 82 × F 82 × (F 62 ) 8 + which is used as input to the hash0 function. This function introduces some + obfuscation by performing a number of permutations, complement and modulo + operations, see Figure 2.5. Besides that, it checks for and removes patterns like + similar key bytes, which could produce a strong bias in the cipher. Finally, the + output of hash0 is the diversified card key k = k [0] , . . . , k [7] ∈ (F 82 ) 8 . + +**/ +#include "optimized_ikeys.h" + +#include +#include +#include +#include "mbedtls/des.h" +#include "optimized_cipherutils.h" + +uint8_t pi[35] = { + 0x0F, 0x17, 0x1B, 0x1D, 0x1E, 0x27, 0x2B, 0x2D, + 0x2E, 0x33, 0x35, 0x39, 0x36, 0x3A, 0x3C, 0x47, + 0x4B, 0x4D, 0x4E, 0x53, 0x55, 0x56, 0x59, 0x5A, + 0x5C, 0x63, 0x65, 0x66, 0x69, 0x6A, 0x6C, 0x71, + 0x72, 0x74, 0x78 +}; + +static mbedtls_des_context ctx_enc; + +/** + * @brief The key diversification algorithm uses 6-bit bytes. + * This implementation uses 64 bit uint to pack seven of them into one + * variable. When they are there, they are placed as follows: + * XXXX XXXX N0 .... N7, occupying the last 48 bits. + * + * This function picks out one from such a collection + * @param all + * @param n bitnumber + * @return + */ +static uint8_t getSixBitByte(uint64_t c, int n) { + return (c >> (42 - 6 * n)) & 0x3F; +} + +/** + * @brief Puts back a six-bit 'byte' into a uint64_t. + * @param c buffer + * @param z the value to place there + * @param n bitnumber. + */ +static void pushbackSixBitByte(uint64_t *c, uint8_t z, int n) { + //0x XXXX YYYY ZZZZ ZZZZ ZZZZ + // ^z0 ^z7 + //z0: 1111 1100 0000 0000 + + uint64_t masked = z & 0x3F; + uint64_t eraser = 0x3F; + masked <<= 42 - 6 * n; + eraser <<= 42 - 6 * n; + + //masked <<= 6*n; + //eraser <<= 6*n; + + eraser = ~eraser; + (*c) &= eraser; + (*c) |= masked; + +} +/** + * @brief Swaps the z-values. + * If the input value has format XYZ0Z1...Z7, the output will have the format + * XYZ7Z6...Z0 instead + * @param c + * @return + */ +static uint64_t swapZvalues(uint64_t c) { + uint64_t newz = 0; + pushbackSixBitByte(&newz, getSixBitByte(c, 0), 7); + pushbackSixBitByte(&newz, getSixBitByte(c, 1), 6); + pushbackSixBitByte(&newz, getSixBitByte(c, 2), 5); + pushbackSixBitByte(&newz, getSixBitByte(c, 3), 4); + pushbackSixBitByte(&newz, getSixBitByte(c, 4), 3); + pushbackSixBitByte(&newz, getSixBitByte(c, 5), 2); + pushbackSixBitByte(&newz, getSixBitByte(c, 6), 1); + pushbackSixBitByte(&newz, getSixBitByte(c, 7), 0); + newz |= (c & 0xFFFF000000000000); + return newz; +} + +/** +* @return 4 six-bit bytes chunked into a uint64_t,as 00..00a0a1a2a3 +*/ +static uint64_t ck(int i, int j, uint64_t z) { + if (i == 1 && j == -1) { + // ck(1, −1, z [0] . . . z [3] ) = z [0] . . . z [3] + return z; + } else if (j == -1) { + // ck(i, −1, z [0] . . . z [3] ) = ck(i − 1, i − 2, z [0] . . . z [3] ) + return ck(i - 1, i - 2, z); + } + + if (getSixBitByte(z, i) == getSixBitByte(z, j)) { + //ck(i, j − 1, z [0] . . . z [i] ← j . . . z [3] ) + uint64_t newz = 0; + int c; + for (c = 0; c < 4; c++) { + uint8_t val = getSixBitByte(z, c); + if (c == i) + pushbackSixBitByte(&newz, j, c); + else + pushbackSixBitByte(&newz, val, c); + } + return ck(i, j - 1, newz); + } else { + return ck(i, j - 1, z); + } +} +/** + + Definition 8. + Let the function check : (F 62 ) 8 → (F 62 ) 8 be defined as + check(z [0] . . . z [7] ) = ck(3, 2, z [0] . . . z [3] ) · ck(3, 2, z [4] . . . z [7] ) + + where ck : N × N × (F 62 ) 4 → (F 62 ) 4 is defined as + + ck(1, −1, z [0] . . . z [3] ) = z [0] . . . z [3] + ck(i, −1, z [0] . . . z [3] ) = ck(i − 1, i − 2, z [0] . . . z [3] ) + ck(i, j, z [0] . . . z [3] ) = + ck(i, j − 1, z [0] . . . z [i] ← j . . . z [3] ), if z [i] = z [j] ; + ck(i, j − 1, z [0] . . . z [3] ), otherwise + + otherwise. +**/ + +static uint64_t check(uint64_t z) { + //These 64 bits are divided as c = x, y, z [0] , . . . , z [7] + + // ck(3, 2, z [0] . . . z [3] ) + uint64_t ck1 = ck(3, 2, z); + + // ck(3, 2, z [4] . . . z [7] ) + uint64_t ck2 = ck(3, 2, z << 24); + + //The ck function will place the values + // in the middle of z. + ck1 &= 0x00000000FFFFFF000000; + ck2 &= 0x00000000FFFFFF000000; + + return ck1 | ck2 >> 24; +} + +static void permute(BitstreamIn *p_in, uint64_t z, int l, int r, BitstreamOut *out) { + if (bitsLeft(p_in) == 0) + return; + + bool pn = tailBit(p_in); + if (pn) { // pn = 1 + uint8_t zl = getSixBitByte(z, l); + + push6bits(out, zl + 1); + permute(p_in, z, l + 1, r, out); + } else { // otherwise + uint8_t zr = getSixBitByte(z, r); + + push6bits(out, zr); + permute(p_in, z, l, r + 1, out); + } +} + +/** + * @brief + *Definition 11. Let the function hash0 : F 82 × F 82 × (F 62 ) 8 → (F 82 ) 8 be defined as + * hash0(x, y, z [0] . . . z [7] ) = k [0] . . . k [7] where + * z'[i] = (z[i] mod (63-i)) + i i = 0...3 + * z'[i+4] = (z[i+4] mod (64-i)) + i i = 0...3 + * ẑ = check(z'); + * @param c + * @param k this is where the diversified key is put (should be 8 bytes) + * @return + */ +void hash0(uint64_t c, uint8_t k[8]) { + c = swapZvalues(c); + + //These 64 bits are divided as c = x, y, z [0] , . . . , z [7] + // x = 8 bits + // y = 8 bits + // z0-z7 6 bits each : 48 bits + uint8_t x = (c & 0xFF00000000000000) >> 56; + uint8_t y = (c & 0x00FF000000000000) >> 48; + uint64_t zP = 0; + + for (int n = 0; n < 4 ; n++) { + uint8_t zn = getSixBitByte(c, n); + uint8_t zn4 = getSixBitByte(c, n + 4); + uint8_t _zn = (zn % (63 - n)) + n; + uint8_t _zn4 = (zn4 % (64 - n)) + n; + pushbackSixBitByte(&zP, _zn, n); + pushbackSixBitByte(&zP, _zn4, n + 4); + } + + uint64_t zCaret = check(zP); + uint8_t p = pi[x % 35]; + + if (x & 1) //Check if x7 is 1 + p = ~p; + + BitstreamIn p_in = { &p, 8, 0 }; + uint8_t outbuffer[] = {0, 0, 0, 0, 0, 0, 0, 0}; + BitstreamOut out = {outbuffer, 0, 0}; + permute(&p_in, zCaret, 0, 4, &out); //returns 48 bits? or 6 8-bytes + + //Out is now a buffer containing six-bit bytes, should be 48 bits + // if all went well + //Shift z-values down onto the lower segment + + uint64_t zTilde = x_bytes_to_num(outbuffer, sizeof(outbuffer)); + + zTilde >>= 16; + + for (int i = 0; i < 8; i++) { + // the key on index i is first a bit from y + // then six bits from z, + // then a bit from p + + // Init with zeroes + k[i] = 0; + // First, place yi leftmost in k + //k[i] |= (y << i) & 0x80 ; + + // First, place y(7-i) leftmost in k + k[i] |= (y << (7 - i)) & 0x80 ; + + uint8_t zTilde_i = getSixBitByte(zTilde, i); + // zTildeI is now on the form 00XXXXXX + // with one leftshift, it'll be + // 0XXXXXX0 + // So after leftshift, we can OR it into k + // However, when doing complement, we need to + // again MASK 0XXXXXX0 (0x7E) + zTilde_i <<= 1; + + //Finally, add bit from p or p-mod + //Shift bit i into rightmost location (mask only after complement) + uint8_t p_i = p >> i & 0x1; + + if (k[i]) { // yi = 1 + k[i] |= ~zTilde_i & 0x7E; + k[i] |= p_i & 1; + k[i] += 1; + + } else { // otherwise + k[i] |= zTilde_i & 0x7E; + k[i] |= (~p_i) & 1; + } + } +} +/** + * @brief Performs Elite-class key diversification + * @param csn + * @param key + * @param div_key + */ +void diversifyKey(uint8_t *csn, uint8_t *key, uint8_t *div_key) { + // Prepare the DES key + mbedtls_des_setkey_enc(&ctx_enc, key); + + uint8_t crypted_csn[8] = {0}; + + // Calculate DES(CSN, KEY) + mbedtls_des_crypt_ecb(&ctx_enc, csn, crypted_csn); + + //Calculate HASH0(DES)) + uint64_t c_csn = x_bytes_to_num(crypted_csn, sizeof(crypted_csn)); + + hash0(c_csn, div_key); +} + diff --git a/armsrc/optimized_ikeys.h b/armsrc/optimized_ikeys.h new file mode 100644 index 000000000..91fa406ad --- /dev/null +++ b/armsrc/optimized_ikeys.h @@ -0,0 +1,69 @@ +/***************************************************************************** + * WARNING + * + * THIS CODE IS CREATED FOR EXPERIMENTATION AND EDUCATIONAL USE ONLY. + * + * USAGE OF THIS CODE IN OTHER WAYS MAY INFRINGE UPON THE INTELLECTUAL + * PROPERTY OF OTHER PARTIES, SUCH AS INSIDE SECURE AND HID GLOBAL, + * AND MAY EXPOSE YOU TO AN INFRINGEMENT ACTION FROM THOSE PARTIES. + * + * THIS CODE SHOULD NEVER BE USED TO INFRINGE PATENTS OR INTELLECTUAL PROPERTY RIGHTS. + * + ***************************************************************************** + * + * This file is part of loclass. It is a reconstructon of the cipher engine + * used in iClass, and RFID techology. + * + * The implementation is based on the work performed by + * Flavio D. Garcia, Gerhard de Koning Gans, Roel Verdult and + * Milosch Meriac in the paper "Dismantling IClass". + * + * Copyright (C) 2014 Martin Holst Swende + * + * This is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as published + * by the Free Software Foundation, or, at your option, any later version. + * + * This file is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with loclass. If not, see . + * + * + ****************************************************************************/ + +#ifndef IKEYS_H +#define IKEYS_H + +#include + +/** + * @brief + *Definition 11. Let the function hash0 : F 82 × F 82 × (F 62 ) 8 → (F 82 ) 8 be defined as + * hash0(x, y, z [0] . . . z [7] ) = k [0] . . . k [7] where + * z'[i] = (z[i] mod (63-i)) + i i = 0...3 + * z'[i+4] = (z[i+4] mod (64-i)) + i i = 0...3 + * ẑ = check(z'); + * @param c + * @param k this is where the diversified key is put (should be 8 bytes) + * @return + */ +void hash0(uint64_t c, uint8_t k[8]); +/** + * @brief Performs Elite-class key diversification + * @param csn + * @param key + * @param div_key + */ + +void diversifyKey(uint8_t csn[8], uint8_t key[8], uint8_t div_key[8]); +/** + * @brief Permutes a key from standard NIST format to Iclass specific format + * @param key + * @param dest + */ + +#endif // IKEYS_H diff --git a/client/src/cmdhficlass.c b/client/src/cmdhficlass.c index 1eda5678b..62ba0f70a 100644 --- a/client/src/cmdhficlass.c +++ b/client/src/cmdhficlass.c @@ -1158,28 +1158,22 @@ static bool select_only(uint8_t *CSN, uint8_t *CCNR, bool use_credit_key, bool v } static bool select_and_auth(uint8_t *KEY, uint8_t *MAC, uint8_t *div_key, bool use_credit_key, bool elite, bool rawkey, bool verbose) { - uint8_t CSN[8] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; - uint8_t CCNR[12] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; - - if (select_only(CSN, CCNR, use_credit_key, verbose) == false) { - if (verbose) PrintAndLogEx(FAILED, "selecting tag failed"); -// DropField(); - return false; - } - - //get div_key - if (rawkey) - memcpy(div_key, KEY, 8); - else - HFiClassCalcDivKey(CSN, KEY, div_key, elite); - - if (verbose) PrintAndLogEx(SUCCESS, "authing with %s: %s", rawkey ? "raw key" : "diversified key", sprint_hex(div_key, 8)); - - doMAC(CCNR, div_key, MAC); - + + struct { + uint8_t key[8]; + bool use_raw; + bool use_elite; + bool use_credit_key; + } PACKED payload; + + memcpy(payload.key, KEY, 8); + payload.use_raw = rawkey; + payload.use_elite = elite; + payload.use_credit_key = use_credit_key; + + SendCommandNG(CMD_HF_ICLASS_AUTH, (uint8_t*)&payload, sizeof(payload)); PacketResponseNG resp; - clearCommandBuffer(); - SendCommandNG(CMD_HF_ICLASS_AUTH, MAC, 4); + clearCommandBuffer(); if (WaitForResponseTimeout(CMD_HF_ICLASS_AUTH, &resp, 2000) == 0) { if (verbose) PrintAndLogEx(WARNING, "Command execute timeout"); return false; @@ -1190,12 +1184,25 @@ static bool select_and_auth(uint8_t *KEY, uint8_t *MAC, uint8_t *div_key, bool u return false; } - uint8_t isOK = resp.data.asBytes[0]; - if (isOK == 0) { + struct p { + bool isOK; + uint8_t div_key[8]; + uint8_t mac[4]; + } PACKED; + struct p *packet = (struct p *)resp.data.asBytes; + + if (packet->isOK == 0) { if (verbose) PrintAndLogEx(FAILED, "authentication error"); return false; } - + + if (div_key) + memcpy(div_key, packet->div_key, sizeof(packet->div_key)); + + if (MAC) + memcpy(MAC, packet->mac, sizeof(packet->mac)); + + if (verbose) PrintAndLogEx(SUCCESS, "authing with %s: %s", rawkey ? "raw key" : "diversified key", sprint_hex(div_key, 8)); return true; } @@ -2972,7 +2979,7 @@ int readIclass(bool loop, bool verbose) { uint8_t readStatus = resp.oldarg[0] & 0xff; - PrintAndLogEx(NORMAL, "ICE: %x", readStatus); +// PrintAndLogEx(NORMAL, "ICE: %x", readStatus); // no tag found or button pressed if ((readStatus == 0 && !loop) || readStatus == 0xFF) { From 23a5beb3c36dcc05cd1af4bc3ab85c427ebdecfa Mon Sep 17 00:00:00 2001 From: jumpycalm Date: Fri, 10 Jul 2020 23:22:52 -0400 Subject: [PATCH 0066/1047] fix a bug in demodParadox() --- client/src/cmdlfparadox.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/src/cmdlfparadox.c b/client/src/cmdlfparadox.c index 92cea3755..7d82f8437 100644 --- a/client/src/cmdlfparadox.c +++ b/client/src/cmdlfparadox.c @@ -128,7 +128,7 @@ int demodParadox(void) { uint8_t error = 0; // Remove manchester encoding from FSK bits, skip pre - for (uint8_t i = idx + PARADOX_PREAMBLE_LEN; i < (idx + 96 - PARADOX_PREAMBLE_LEN ); i += 2) { + for (uint8_t i = idx + PARADOX_PREAMBLE_LEN; i < (idx + 96); i += 2) { // not manchester data if (bits[i] == bits[i + 1]) { From f866a847fb0896b6639024f893ffb09b64004897 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sat, 11 Jul 2020 20:46:37 +0200 Subject: [PATCH 0067/1047] fix coverity 294114 --- client/src/cmdlfem4x50.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/client/src/cmdlfem4x50.c b/client/src/cmdlfem4x50.c index 8198bdc74..77476e5d9 100644 --- a/client/src/cmdlfem4x50.c +++ b/client/src/cmdlfem4x50.c @@ -608,10 +608,11 @@ int CmdEM4x50Dump(const char *Cmd) { em4x50_data_t etd; etd.pwd_given = false; etd.addr_given = false; - + etd.newpwd_given = false; + char filename[FILE_PATH_SIZE] = {0x00}; char *fptr = filename; - + bool errors = false; uint8_t cmdp = 0; while (param_getchar(Cmd, cmdp) != 0x00 && !errors) { @@ -655,9 +656,9 @@ int CmdEM4x50Dump(const char *Cmd) { bool success = (resp.status & STATUS_SUCCESS) >> 1; if (success == false) { PrintAndLogEx(FAILED, "reading tag " _RED_("failed")); - return PM3_ESOFT; + return PM3_ESOFT; } - + // structured format em4x50_word_t words[EM4X50_NO_WORDS]; prepare_result(resp.data.asBytes, 0, EM4X50_NO_WORDS - 1, words); From ebb7eb9f3ed75f206141eab6a510226cbd46d0da Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sat, 11 Jul 2020 20:53:07 +0200 Subject: [PATCH 0068/1047] fix coverity 294113 --- armsrc/em4x50.c | 71 +++++++++++++++++++++---------------------------- 1 file changed, 31 insertions(+), 40 deletions(-) diff --git a/armsrc/em4x50.c b/armsrc/em4x50.c index 63b58e5bd..2b9ede4bf 100644 --- a/armsrc/em4x50.c +++ b/armsrc/em4x50.c @@ -100,7 +100,6 @@ int gLow = 0; static void init_tag(void) { // initialize global tag structure - for (int i = 0; i < 34; i++) for (int j = 0; j < 7; j++) tag.sectors[i][j] = 0x00; @@ -109,9 +108,7 @@ static void init_tag(void) { static uint8_t bits2byte(uint8_t *bits, int length) { // converts separate bits into a single "byte" - uint8_t byte = 0; - for (int i = 0; i < length; i++) { byte |= bits[i]; @@ -124,11 +121,10 @@ static uint8_t bits2byte(uint8_t *bits, int length) { } static void msb2lsb_word(uint8_t *word) { - + // reorders given according to EM4x50 datasheet (msb -> lsb) - + uint8_t buff[4]; - buff[0] = reflect8(word[3]); buff[1] = reflect8(word[2]); buff[2] = reflect8(word[1]); @@ -141,13 +137,12 @@ static void msb2lsb_word(uint8_t *word) { } static void save_word(int pos, uint8_t bits[EM4X50_TAG_WORD]) { - + // split "raw" word into data, row and column parity bits and stop bit and // save them in global tag structure - uint8_t row_parity[4]; uint8_t col_parity[8]; - + // data and row parities for (int i = 0; i < 4; i++) { tag.sectors[pos][i] = bits2byte(&bits[9*i],8); @@ -161,7 +156,7 @@ static void save_word(int pos, uint8_t bits[EM4X50_TAG_WORD]) { col_parity[i] = bits[36+i]; tag.sectors[pos][5] = bits2byte(col_parity,8); - + // stop bit tag.sectors[pos][6] = bits[44]; } @@ -169,7 +164,7 @@ static void save_word(int pos, uint8_t bits[EM4X50_TAG_WORD]) { static void wait_timer(int timer, uint32_t period) { // do nothing for using timer - + if (timer == FPGA_TIMER_0) { AT91C_BASE_TC0->TC_CCR = AT91C_TC_SWTRG; @@ -184,9 +179,8 @@ static void wait_timer(int timer, uint32_t period) { } static void em4x50_setup_read(void) { - + FpgaDownloadAndGo(FPGA_BITSTREAM_LF); - FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_ADC | FPGA_LF_ADC_READER_FIELD); // 50ms for the resonant antenna to settle. @@ -195,12 +189,12 @@ static void em4x50_setup_read(void) { FpgaSetupSsc(FPGA_MAJOR_MODE_LF_READER); // start a 1.5ticks is 1us StartTicks(); - + FpgaSendCommand(FPGA_CMD_SET_DIVISOR, LF_DIVISOR_125); // Connect the A/D to the peak-detected low-frequency path. SetAdcMuxFor(GPIO_MUXSEL_LOPKD); - + // Steal this pin from the SSP (SPI communication channel with fpga) and // use it to control the modulation AT91C_BASE_PIOA->PIO_PER = GPIO_SSC_DOUT; @@ -208,7 +202,7 @@ static void em4x50_setup_read(void) { // Disable modulation at default, which means enable the field LOW(GPIO_SSC_DOUT); - + // Enable Peripheral Clock for // TIMER_CLOCK0, used to measure exact timing before answering // TIMER_CLOCK1, used to capture edges of the tag frames @@ -221,17 +215,17 @@ static void em4x50_setup_read(void) { // TC0: Capture mode, default timer source = MCK/2 (TIMER_CLOCK1), no triggers AT91C_BASE_TC0->TC_CMR = AT91C_TC_CLKS_TIMER_DIV1_CLOCK; - + // TC1: Capture mode, default timer source = MCK/2 (TIMER_CLOCK1), no triggers AT91C_BASE_TC1->TC_CMR = AT91C_TC_CLKS_TIMER_DIV1_CLOCK; - + // Enable and reset counters AT91C_BASE_TC0->TC_CCR = AT91C_TC_CLKEN | AT91C_TC_SWTRG; AT91C_BASE_TC1->TC_CCR = AT91C_TC_CLKEN | AT91C_TC_SWTRG; - + // synchronized startup procedure while (AT91C_BASE_TC0->TC_CV > 0) {}; // wait until TC1 returned to zero - + // Watchdog hit WDT_HIT(); } @@ -239,21 +233,21 @@ static void em4x50_setup_read(void) { // functions for "reader" use case static bool get_signalproperties(void) { - + // calculate signal properties (mean amplitudes) from measured data: // 32 amplitudes (maximum values) -> mean amplitude value -> gHigh -> gLow - + bool signal_found = false; int no_periods = 32, pct = 75, noise = 140; - uint8_t sample = 0, sample_ref = 127; + uint8_t sample_ref = 127; uint8_t sample_max_mean = 0; uint8_t sample_max[no_periods]; uint32_t sample_max_sum = 0; + memcpy(sample_max, 0x00, sizeof(sample_max)); - // wait until signal/noise > 1 (max. 32 periods) for (int i = 0; i < T0 * no_periods; i++) { - + // about 2 samples per bit period wait_timer(0, T0 * EM4X50_T_TAG_HALF_PERIOD); @@ -261,9 +255,9 @@ static bool get_signalproperties(void) { signal_found = true; break; } - + } - + if (!signal_found) return false; @@ -273,39 +267,36 @@ static bool get_signalproperties(void) { AT91C_BASE_TC0->TC_CCR = AT91C_TC_SWTRG; while (AT91C_BASE_TC0->TC_CV < T0 * 3 * EM4X50_T_TAG_FULL_PERIOD) { - - sample = (uint8_t)AT91C_BASE_SSC->SSC_RHR; - + + volatile uint8_t sample = (uint8_t)AT91C_BASE_SSC->SSC_RHR; + if (sample > sample_max[i]) sample_max[i] = sample; - + } - + sample_max_sum += sample_max[i]; } - + sample_max_mean = sample_max_sum / no_periods; - + // set global envelope variables gHigh = sample_ref + pct * (sample_max_mean - sample_ref) / 100; gLow = sample_ref - pct * (sample_max_mean - sample_ref) / 100; - return true; } static int get_next_bit(void) { - + // returns bit value (or EM4X50_BIT_OTHER -> no bit pattern) by evaluating // a single sample within a bit period (given there is no LIW, ACK or NAK) // This function is not used for decoding, it is only used for identifying // a listen window (return value = EM4X50_BIT_OTHER) in functions // "find_double_listen_window" and "check_ack" - - uint8_t sample; // get sample at 3/4 of bit period wait_timer(0, T0 * EM4X50_T_TAG_THREE_QUARTER_PERIOD); - sample = (uint8_t)AT91C_BASE_SSC->SSC_RHR; + uint8_t sample = (uint8_t)AT91C_BASE_SSC->SSC_RHR; // wait until end of bit period wait_timer(0, T0 * EM4X50_T_TAG_QUARTER_PERIOD); @@ -315,7 +306,7 @@ static int get_next_bit(void) { return EM4X50_BIT_0; else if (sample < gLow) return EM4X50_BIT_1; - + return EM4X50_BIT_OTHER; } From 86538912a840a1cec8730e2a5c6dc746d16e3cb4 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Mon, 13 Jul 2020 12:18:26 +0200 Subject: [PATCH 0069/1047] make sure uninitialized vars doesnt end up on COMMON_section --- armsrc/Makefile | 2 +- bootrom/Makefile | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/armsrc/Makefile b/armsrc/Makefile index 2768ab3a4..8b1fbfc2b 100644 --- a/armsrc/Makefile +++ b/armsrc/Makefile @@ -20,7 +20,7 @@ endif #in the next section to remove that particular feature from compilation. # NO space,TABs after the "\" sign. APP_CFLAGS = $(PLATFORM_DEFS) \ - -ffunction-sections -fdata-sections + -ffunction-sections -fdata-sections -fno-common SRC_LF = lfops.c lfsampling.c pcf7931.c lfdemod.c lfadc.c SRC_ISO15693 = iso15693.c iso15693tools.c diff --git a/bootrom/Makefile b/bootrom/Makefile index 75a4e5ced..9a0359d2f 100644 --- a/bootrom/Makefile +++ b/bootrom/Makefile @@ -25,8 +25,8 @@ VERSIONSRC = version.c # stdint.h provided locally until GCC 4.5 becomes C99 compliant APP_CFLAGS = -I. -ffunction-sections -fdata-sections -# stack-protect , no-pie reduces size on Gentoo Hardened 8.2 gcc -APP_CFLAGS += -fno-stack-protector -fno-pie +# stack-protect , no-pie reduces size on Gentoo Hardened 8.2 gcc, no-common makes sure uninitalized vars doesn't end up in COMMON area +APP_CFLAGS += -fno-stack-protector -fno-pie -fno-common # Do not move this inclusion before the definition of {THUMB,ASM,ARM}SRC From 1f8ab9c2fbb17c085cb30e99fffd090ce58f0616 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Mon, 13 Jul 2020 12:19:06 +0200 Subject: [PATCH 0070/1047] better logtext for debug, iclass dump -> NG --- armsrc/appmain.c | 34 ++++++++++++++++++++++++++++------ 1 file changed, 28 insertions(+), 6 deletions(-) diff --git a/armsrc/appmain.c b/armsrc/appmain.c index a50c0ba7d..e35dc8ae2 100644 --- a/armsrc/appmain.c +++ b/armsrc/appmain.c @@ -69,13 +69,11 @@ //============================================================================= #define TOSEND_BUFFER_SIZE (9*MAX_FRAME_SIZE + 1 + 1 + 2) // 8 data bits and 1 parity bit per payload byte, 1 correction bit, 1 SOC bit, 2 EOC bits -uint8_t ToSend[TOSEND_BUFFER_SIZE]; +uint8_t ToSend[TOSEND_BUFFER_SIZE] = {0}; int ToSendMax = -1; +static int ToSendBit; extern uint32_t _stack_start, _stack_end; - - -static int ToSendBit; struct common_area common_area __attribute__((section(".commonarea"))); static int button_status = BUTTON_NO_CLICK; static bool allow_send_wtx = false; @@ -375,7 +373,26 @@ static void SendStatus(void) { print_stack_usage(); - Dbprintf(" DBGLEVEL................%d", DBGLEVEL); + char dbglvlstr[20] = {0}; + switch(DBGLEVEL) { + case DBG_NONE: + sprintf(dbglvlstr, "NONE"); + break; + case DBG_ERROR: + sprintf(dbglvlstr, "ERROR"); + break; + case DBG_INFO: + sprintf(dbglvlstr, "INFO"); + break; + case DBG_DEBUG: + sprintf(dbglvlstr, "DEBUG"); + break; + case DBG_EXTENDED: + sprintf(dbglvlstr, "EXTENDED"); + break; + } + Dbprintf(" DBGLEVEL................%d ( " _YELLOW_("%s")" )", DBGLEVEL, dbglvlstr); + Dbprintf(" ToSendMax...............%d", ToSendMax); Dbprintf(" ToSendBit...............%d", ToSendBit); Dbprintf(" ToSend BUFFERSIZE.......%d", TOSEND_BUFFER_SIZE); @@ -1453,7 +1470,12 @@ static void PacketReceived(PacketCommandNG *packet) { break; } case CMD_HF_ICLASS_DUMP: { - iClass_Dump(packet->oldarg[0], packet->oldarg[1]); + struct p { + uint8_t start_blockno; + uint8_t numblks; + } PACKED; + struct p *payload = (struct p *)packet->data.asBytes; + iClass_Dump(payload->start_blockno, payload->numblks); break; } case CMD_HF_ICLASS_CLONE: { From 27c4d994ac12bbe5e50e56f31fc3ed90bb198514 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Mon, 13 Jul 2020 12:20:12 +0200 Subject: [PATCH 0071/1047] remove some debugstatments, use hdr.frame instead --- armsrc/BigBuf.c | 22 +++++++++------------- armsrc/BigBuf.h | 2 +- 2 files changed, 10 insertions(+), 14 deletions(-) diff --git a/armsrc/BigBuf.c b/armsrc/BigBuf.c index 8637443a0..24fe45e57 100644 --- a/armsrc/BigBuf.c +++ b/armsrc/BigBuf.c @@ -164,7 +164,7 @@ uint32_t BigBuf_get_traceLen(void) { **/ bool RAMFUNC LogTrace(const uint8_t *btBytes, uint16_t iLen, uint32_t timestamp_start, uint32_t timestamp_end, uint8_t *parity, bool readerToTag) { if (tracing == false) { - if (DBGLEVEL >= DBG_DEBUG) { Dbprintf("trace is turned off"); } + Dbprintf("trace is turned off"); return false; } @@ -175,8 +175,7 @@ bool RAMFUNC LogTrace(const uint8_t *btBytes, uint16_t iLen, uint32_t timestamp_ // Return when trace is full if (TRACELOG_HDR_LEN + iLen + num_paritybytes >= BigBuf_max_traceLen() - trace_len) { - tracing = false; // don't trace any more - if (DBGLEVEL >= DBG_DEBUG) { Dbprintf("trace is full"); } + tracing = false; return false; } @@ -188,27 +187,24 @@ bool RAMFUNC LogTrace(const uint8_t *btBytes, uint16_t iLen, uint32_t timestamp_ } if (duration > 0x7FFF) { - if (DBGLEVEL >= DBG_DEBUG) { - Dbprintf("Error in LogTrace: duration too long for 15 bits encoding: 0x%08x start:0x%08x end:0x%08x", duration, timestamp_start, timestamp_end); -// Dbprintf("Forcing duration = 0"); + if (DBGLEVEL >= DBG_ERROR) { //DBG_DEBUG + Dbprintf("Error in LogTrace: duration too long for 15 bits encoding: 0x%08x start: 0x%08x end: 0x%08x", duration, timestamp_start, timestamp_end); } - duration /= 32; - // duration >>= 5; // duration = 0; } - + hdr->timestamp = timestamp_start; - hdr->duration = duration; + hdr->duration = duration & 0x7FFF; hdr->data_len = iLen; hdr->isResponse = !readerToTag; trace_len += TRACELOG_HDR_LEN; // data bytes if (btBytes != NULL && iLen != 0) { - memcpy(trace + trace_len, btBytes, iLen); + memcpy(hdr->frame, btBytes, iLen); + trace_len += iLen; } - trace_len += iLen; // parity bytes if (num_paritybytes != 0) { @@ -217,8 +213,8 @@ bool RAMFUNC LogTrace(const uint8_t *btBytes, uint16_t iLen, uint32_t timestamp_ } else { memset(trace + trace_len, 0x00, num_paritybytes); } + trace_len += num_paritybytes; } - trace_len += num_paritybytes; return true; } diff --git a/armsrc/BigBuf.h b/armsrc/BigBuf.h index 60857e82a..b89b94242 100644 --- a/armsrc/BigBuf.h +++ b/armsrc/BigBuf.h @@ -19,7 +19,7 @@ #define MAX_MIFARE_FRAME_SIZE 18 // biggest Mifare frame is answer to a read (one block = 16 Bytes) + 2 Bytes CRC #define MAX_MIFARE_PARITY_SIZE 3 // need 18 parity bits for the 18 Byte above. 3 Bytes are enough to store these #define CARD_MEMORY_SIZE 4096 -#define DMA_BUFFER_SIZE 256 //128 (how big is the dma?!? +#define DMA_BUFFER_SIZE 128 uint8_t *BigBuf_get_addr(void); uint32_t BigBuf_get_size(void); From 77aa5c614208e6801cd69a51ea31fe786ad4c96b Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Mon, 13 Jul 2020 12:20:35 +0200 Subject: [PATCH 0072/1047] style --- armsrc/iso14443a.c | 1 - 1 file changed, 1 deletion(-) diff --git a/armsrc/iso14443a.c b/armsrc/iso14443a.c index 836360740..0dae3c872 100644 --- a/armsrc/iso14443a.c +++ b/armsrc/iso14443a.c @@ -2554,7 +2554,6 @@ void iso14443a_setup(uint8_t fpga_minor_mode) { hf_field_active = true; } - void hf_field_off(void) { FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); LEDsoff(); From 713301226dd5ff6049898115ca9804930c9261cd Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Mon, 13 Jul 2020 12:21:42 +0200 Subject: [PATCH 0073/1047] fgpa merge hell p.N --- armsrc/iclass.c | 510 +++++++++++++++++++++++------------------------- 1 file changed, 246 insertions(+), 264 deletions(-) diff --git a/armsrc/iclass.c b/armsrc/iclass.c index a68565830..58cf36a0d 100644 --- a/armsrc/iclass.c +++ b/armsrc/iclass.c @@ -15,27 +15,6 @@ // // Please feel free to contribute and extend iClass support!! //----------------------------------------------------------------------------- -// -// FIX: -// ==== -// We still have sometimes a demodulation error when sniffing iClass communication. -// The resulting trace of a read-block-03 command may look something like this: -// -// + 22279: : 0c 03 e8 01 -// -// ...with an incorrect answer... -// -// + 85: 0: TAG ff! ff! ff! ff! ff! ff! ff! ff! bb 33 bb 00 01! 0e! 04! bb !crc -// -// We still left the error signalling bytes in the traces like 0xbb -// -// A correct trace should look like this: -// -// + 21112: : 0c 03 e8 01 -// + 85: 0: TAG ff ff ff ff ff ff ff ff ea f5 -// -//----------------------------------------------------------------------------- - #include "iclass.h" #include "proxmark3_arm.h" @@ -78,11 +57,6 @@ #define AddCrc(data, len) compute_crc(CRC_ICLASS, (data), (len), (data)+(len), (data)+(len)+1) -static void OnError(uint8_t reason) { - reply_mix(CMD_ACK, 0, reason, 0, 0, 0); - switch_off(); -} - /* * CARD TO READER * in ISO15693-2 mode - Manchester @@ -116,9 +90,9 @@ static void rotateCSN(uint8_t *original_csn, uint8_t *rotated_csn) { // Encode SOF only static void CodeIClassTagSOF(void) { - ToSendReset(); - ToSend[++ToSendMax] = 0x1D; - ToSendMax++; + ToSendReset(); + ToSend[++ToSendMax] = 0x1D; + ToSendMax++; } @@ -177,7 +151,7 @@ void SimulateIClass(uint32_t arg0, uint32_t arg1, uint32_t arg2, uint8_t *datain LEDsoff(); - Iso15693InitTag(); + Iso15693InitTag(); clear_trace(); set_tracing(true); @@ -280,13 +254,13 @@ int doIClassSimulation(int simulationMode, uint8_t *reader_mac_buf) { // free eventually allocated BigBuf memory BigBuf_free_keep_EM(); - uint16_t page_size = 32 * 8; - uint8_t current_page = 0; + uint16_t page_size = 32 * 8; + uint8_t current_page = 0; - // maintain cipher states for both credit and debit key for each page - State cipher_state_KD[8]; - State cipher_state_KC[8]; - State *cipher_state = &cipher_state_KD[0]; + // maintain cipher states for both credit and debit key for each page + State cipher_state_KD[8]; + State cipher_state_KC[8]; + State *cipher_state = &cipher_state_KD[0]; uint8_t *emulator = BigBuf_get_EM_addr(); uint8_t *csn = emulator; @@ -303,12 +277,12 @@ int doIClassSimulation(int simulationMode, uint8_t *reader_mac_buf) { AddCrc(anticoll_data, 8); AddCrc(csn_data, 8); - uint8_t diversified_kd[8] = { 0 }; - uint8_t diversified_kc[8] = { 0 }; - uint8_t *diversified_key = diversified_kd; + uint8_t diversified_kd[8] = { 0 }; + uint8_t diversified_kc[8] = { 0 }; + uint8_t *diversified_key = diversified_kd; - // configuration block - uint8_t conf_block[10] = {0x12, 0xFF, 0xFF, 0xFF, 0x7F, 0x1F, 0xFF, 0x3C, 0x00, 0x00}; + // configuration block + uint8_t conf_block[10] = {0x12, 0xFF, 0xFF, 0xFF, 0x7F, 0x1F, 0xFF, 0x3C, 0x00, 0x00}; // e-Purse uint8_t card_challenge_data[8] = { 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; @@ -318,10 +292,10 @@ int doIClassSimulation(int simulationMode, uint8_t *reader_mac_buf) { if (simulationMode == ICLASS_SIM_MODE_FULL) { - memcpy(conf_block, emulator + (8 * 1), 8); // blk 1 - memcpy(card_challenge_data, emulator + (8 * 2), 8); // e-purse, blk 2 - memcpy(diversified_kd, emulator + (8 * 3), 8); // Kd, blk 3 - memcpy(diversified_kc, emulator + (8 * 4), 8); // Kc, blk 4 + memcpy(conf_block, emulator + (8 * 1), 8); // blk 1 + memcpy(card_challenge_data, emulator + (8 * 2), 8); // e-purse, blk 2 + memcpy(diversified_kd, emulator + (8 * 3), 8); // Kd, blk 3 + memcpy(diversified_kc, emulator + (8 * 4), 8); // Kc, blk 4 // (iceman) this only works for 2KS / 16KS tags. @@ -338,36 +312,36 @@ int doIClassSimulation(int simulationMode, uint8_t *reader_mac_buf) { memcpy(reader_mac_buf, card_challenge_data, 8); } - if ((conf_block[5] & 0x80) == 0x80) { - page_size = 256 * 8; - } + if ((conf_block[5] & 0x80) == 0x80) { + page_size = 256 * 8; + } - // From PicoPass DS: - // When the page is in personalization mode this bit is equal to 1. - // Once the application issuer has personalized and coded its dedicated areas, this bit must be set to 0: - // the page is then "in application mode". - bool personalization_mode = conf_block[7] & 0x80; + // From PicoPass DS: + // When the page is in personalization mode this bit is equal to 1. + // Once the application issuer has personalized and coded its dedicated areas, this bit must be set to 0: + // the page is then "in application mode". + bool personalization_mode = conf_block[7] & 0x80; - // chip memory may be divided in 8 pages - uint8_t max_page = ((conf_block[4] & 0x10) == 0x10) ? 0 : 7; + // chip memory may be divided in 8 pages + uint8_t max_page = ((conf_block[4] & 0x10) == 0x10) ? 0 : 7; - // Precalculate the cipher states, feeding it the CC - cipher_state_KD[0] = opt_doTagMAC_1(card_challenge_data, diversified_kd); - cipher_state_KC[0] = opt_doTagMAC_1(card_challenge_data, diversified_kc); + // Precalculate the cipher states, feeding it the CC + cipher_state_KD[0] = opt_doTagMAC_1(card_challenge_data, diversified_kd); + cipher_state_KC[0] = opt_doTagMAC_1(card_challenge_data, diversified_kc); - if (simulationMode == ICLASS_SIM_MODE_FULL) { + if (simulationMode == ICLASS_SIM_MODE_FULL) { - for (int i = 1; i < max_page; i++) { + for (int i = 1; i < max_page; i++) { // does all pages has their own epurse??) - uint8_t *epurse = emulator + (i * page_size) + (8 * 2); - uint8_t *kd = emulator + (i * page_size) + (8 * 3); - uint8_t *kc = emulator + (i * page_size) + (8 * 4); + uint8_t *epurse = emulator + (i * page_size) + (8 * 2); + uint8_t *kd = emulator + (i * page_size) + (8 * 3); + uint8_t *kc = emulator + (i * page_size) + (8 * 4); - cipher_state_KD[i] = opt_doTagMAC_1(epurse, kd); - cipher_state_KC[i] = opt_doTagMAC_1(epurse, kc); - } - } + cipher_state_KD[i] = opt_doTagMAC_1(epurse, kd); + cipher_state_KC[i] = opt_doTagMAC_1(epurse, kc); + } + } // Anti-collision process: // Reader 0a @@ -405,11 +379,11 @@ int doIClassSimulation(int simulationMode, uint8_t *reader_mac_buf) { uint8_t *resp_cc = BigBuf_malloc(28); int resp_cc_len; - // Kd, Kc (blocks 3 and 4). Cannot be read. Always respond with 0xff bytes only - uint8_t *resp_ff = BigBuf_malloc(22); - int resp_ff_len; - uint8_t ff_data[10] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00}; - AddCrc(ff_data, 8); + // Kd, Kc (blocks 3 and 4). Cannot be read. Always respond with 0xff bytes only + uint8_t *resp_ff = BigBuf_malloc(22); + int resp_ff_len; + uint8_t ff_data[10] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00}; + AddCrc(ff_data, 8); // Application Issuer Area (blk 5) uint8_t *resp_aia = BigBuf_malloc(28); @@ -446,10 +420,10 @@ int doIClassSimulation(int simulationMode, uint8_t *reader_mac_buf) { memcpy(resp_cc, ToSend, ToSendMax); resp_cc_len = ToSendMax; - // Kd, Kc (blocks 3 and 4) - CodeIso15693AsTag(ff_data, sizeof(ff_data)); - memcpy(resp_ff, ToSend, ToSendMax); - resp_ff_len = ToSendMax; + // Kd, Kc (blocks 3 and 4) + CodeIso15693AsTag(ff_data, sizeof(ff_data)); + memcpy(resp_ff, ToSend, ToSendMax); + resp_ff_len = ToSendMax; // Application Issuer Area (block 5) CodeIso15693AsTag(aia_data, sizeof(aia_data)); @@ -464,7 +438,7 @@ int doIClassSimulation(int simulationMode, uint8_t *reader_mac_buf) { //Each bit is doubled when modulated for FPGA, and we also have SOF and EOF (2 bytes) uint8_t *data_response = BigBuf_malloc((32 + 2) * 2 + 2); - enum { IDLE, ACTIVATED, SELECTED, HALTED } chip_state = IDLE; + enum { IDLE, ACTIVATED, SELECTED, HALTED } chip_state = IDLE; bool button_pressed = false; uint8_t cmd, options, block; @@ -474,20 +448,20 @@ int doIClassSimulation(int simulationMode, uint8_t *reader_mac_buf) { while (exit_loop == false) { WDT_HIT(); - uint32_t reader_eof_time = 0; - len = GetIso15693CommandFromReader(receivedCmd, MAX_FRAME_SIZE, &reader_eof_time); + uint32_t reader_eof_time = 0; + len = GetIso15693CommandFromReader(receivedCmd, MAX_FRAME_SIZE, &reader_eof_time); if (len < 0) { button_pressed = true; exit_loop = true; continue; } - // Now look at the reader command and provide appropriate responses - // default is no response: - modulated_response = NULL; - modulated_response_size = 0; - trace_data = NULL; - trace_data_size = 0; + // Now look at the reader command and provide appropriate responses + // default is no response: + modulated_response = NULL; + modulated_response_size = 0; + trace_data = NULL; + trace_data_size = 0; // extra response data cmd = receivedCmd[0] & 0xF; @@ -499,7 +473,7 @@ int doIClassSimulation(int simulationMode, uint8_t *reader_mac_buf) { if (chip_state != HALTED) { modulated_response = resp_sof; modulated_response_size = resp_sof_len; - chip_state = ACTIVATED; + chip_state = ACTIVATED; goto send; } @@ -544,13 +518,13 @@ int doIClassSimulation(int simulationMode, uint8_t *reader_mac_buf) { } goto send; } - case 3: - case 4: { // Kd, Kc, always respond with 0xff bytes - modulated_response = resp_ff; - modulated_response_size = resp_ff_len; - trace_data = ff_data; - trace_data_size = sizeof(ff_data); - goto send; + case 3: + case 4: { // Kd, Kc, always respond with 0xff bytes + modulated_response = resp_ff; + modulated_response_size = resp_ff_len; + trace_data = ff_data; + trace_data_size = sizeof(ff_data); + goto send; } case 5: { // Application Issuer Area (0c 05) modulated_response = resp_aia; @@ -588,7 +562,7 @@ int doIClassSimulation(int simulationMode, uint8_t *reader_mac_buf) { } else if (cmd == ICLASS_CMD_READCHECK) { // 0x88 // Read e-purse KD (88 02) KC (18 02) - if (chip_state == SELECTED) { + if (chip_state == SELECTED) { if ( ICLASS_DEBIT(cmd) ){ cipher_state = &cipher_state_KD[current_page]; diversified_key = diversified_kd; @@ -601,7 +575,7 @@ int doIClassSimulation(int simulationMode, uint8_t *reader_mac_buf) { trace_data = card_challenge_data; trace_data_size = sizeof(card_challenge_data); goto send; - } + } } else if (cmd == ICLASS_CMD_CHECK) { // 0x05 // Reader random and reader MAC!!! @@ -645,7 +619,7 @@ int doIClassSimulation(int simulationMode, uint8_t *reader_mac_buf) { } else if (cmd == ICLASS_CMD_HALT && options == 0 && len == 1) { - if (chip_state == SELECTED) { + if (chip_state == SELECTED) { // Reader ends the session modulated_response = resp_sof; modulated_response_size = resp_sof_len; @@ -655,7 +629,7 @@ int doIClassSimulation(int simulationMode, uint8_t *reader_mac_buf) { } else if (simulationMode == ICLASS_SIM_MODE_FULL && cmd == ICLASS_CMD_READ4 && len == 4) { // 0x06 - if (chip_state == SELECTED) { + if (chip_state == SELECTED) { //Read block memcpy(data_generic_trace, emulator + (current_page * page_size) + (block * 8), 8 * 4); AddCrc(data_generic_trace, 8 * 4); @@ -669,86 +643,86 @@ int doIClassSimulation(int simulationMode, uint8_t *reader_mac_buf) { } else if (simulationMode == ICLASS_SIM_MODE_FULL && cmd == ICLASS_CMD_UPDATE && (len == 12 || len == 14)) { - // We're expected to respond with the data+crc, exactly what's already in the receivedCmd - // receivedCmd is now UPDATE 1b | ADDRESS 1b | DATA 8b | Signature 4b or CRC 2b - if (chip_state == SELECTED) { + // We're expected to respond with the data+crc, exactly what's already in the receivedCmd + // receivedCmd is now UPDATE 1b | ADDRESS 1b | DATA 8b | Signature 4b or CRC 2b + if (chip_state == SELECTED) { - if (block == 2) { // update e-purse - memcpy(card_challenge_data, receivedCmd + 2, 8); - CodeIso15693AsTag(card_challenge_data, sizeof(card_challenge_data)); - memcpy(resp_cc, ToSend, ToSendMax); - resp_cc_len = ToSendMax; - cipher_state_KD[current_page] = opt_doTagMAC_1(card_challenge_data, diversified_kd); - cipher_state_KC[current_page] = opt_doTagMAC_1(card_challenge_data, diversified_kc); + if (block == 2) { // update e-purse + memcpy(card_challenge_data, receivedCmd + 2, 8); + CodeIso15693AsTag(card_challenge_data, sizeof(card_challenge_data)); + memcpy(resp_cc, ToSend, ToSendMax); + resp_cc_len = ToSendMax; + cipher_state_KD[current_page] = opt_doTagMAC_1(card_challenge_data, diversified_kd); + cipher_state_KC[current_page] = opt_doTagMAC_1(card_challenge_data, diversified_kc); } else if (block == 3) { // update Kd - for (int i = 0; i < 8; i++) { - if (personalization_mode) { - diversified_kd[i] = receivedCmd[2 + i]; - } else { - diversified_kd[i] ^= receivedCmd[2 + i]; - } - } - cipher_state_KD[current_page] = opt_doTagMAC_1(card_challenge_data, diversified_kd); + for (int i = 0; i < 8; i++) { + if (personalization_mode) { + diversified_kd[i] = receivedCmd[2 + i]; + } else { + diversified_kd[i] ^= receivedCmd[2 + i]; + } + } + cipher_state_KD[current_page] = opt_doTagMAC_1(card_challenge_data, diversified_kd); - } else if (block == 4) { // update Kc - for (int i = 0; i < 8; i++) { - if (personalization_mode) { - diversified_kc[i] = receivedCmd[2 + i]; - } else { - diversified_kc[i] ^= receivedCmd[2 + i]; - } - } - cipher_state_KC[current_page] = opt_doTagMAC_1(card_challenge_data, diversified_kc); + } else if (block == 4) { // update Kc + for (int i = 0; i < 8; i++) { + if (personalization_mode) { + diversified_kc[i] = receivedCmd[2 + i]; + } else { + diversified_kc[i] ^= receivedCmd[2 + i]; + } + } + cipher_state_KC[current_page] = opt_doTagMAC_1(card_challenge_data, diversified_kc); } // update emulator memcpy(emulator + (current_page * page_size) + (8 * block), receivedCmd + 2, 8); - memcpy(data_generic_trace, receivedCmd + 2, 8); - AddCrc(data_generic_trace, 8); - trace_data = data_generic_trace; - trace_data_size = 10; - CodeIso15693AsTag(trace_data, trace_data_size); - memcpy(data_response, ToSend, ToSendMax); - modulated_response = data_response; - modulated_response_size = ToSendMax; - } + memcpy(data_generic_trace, receivedCmd + 2, 8); + AddCrc(data_generic_trace, 8); + trace_data = data_generic_trace; + trace_data_size = 10; + CodeIso15693AsTag(trace_data, trace_data_size); + memcpy(data_response, ToSend, ToSendMax); + modulated_response = data_response; + modulated_response_size = ToSendMax; + } goto send; } else if (receivedCmd[0] == ICLASS_CMD_PAGESEL && len == 4) { // 0x84 - // Pagesel, + // Pagesel, // - enables to select a page in the selected chip memory and return its configuration block - // Chips with a single page will not answer to this command - // Otherwise, we should answer 8bytes (conf block 1) + 2bytes CRC - if (chip_state == SELECTED) { + // Chips with a single page will not answer to this command + // Otherwise, we should answer 8bytes (conf block 1) + 2bytes CRC + if (chip_state == SELECTED) { - if (simulationMode == ICLASS_SIM_MODE_FULL && max_page > 0) { + if (simulationMode == ICLASS_SIM_MODE_FULL && max_page > 0) { - current_page = receivedCmd[1]; + current_page = receivedCmd[1]; - memcpy(data_generic_trace, emulator + (current_page * page_size) + (8 * 1), 8); - memcpy(diversified_kd, emulator + (current_page * page_size) + (8 * 3), 8); - memcpy(diversified_kc, emulator + (current_page * page_size) + (8 * 4), 8); + memcpy(data_generic_trace, emulator + (current_page * page_size) + (8 * 1), 8); + memcpy(diversified_kd, emulator + (current_page * page_size) + (8 * 3), 8); + memcpy(diversified_kc, emulator + (current_page * page_size) + (8 * 4), 8); - cipher_state = &cipher_state_KD[current_page]; + cipher_state = &cipher_state_KD[current_page]; - personalization_mode = data_generic_trace[7] & 0x80; - AddCrc(data_generic_trace, 8); + personalization_mode = data_generic_trace[7] & 0x80; + AddCrc(data_generic_trace, 8); - trace_data = data_generic_trace; - trace_data_size = 10; + trace_data = data_generic_trace; + trace_data_size = 10; - CodeIso15693AsTag(trace_data, trace_data_size); - memcpy(data_response, ToSend, ToSendMax); - modulated_response = data_response; - modulated_response_size = ToSendMax; - } - } + CodeIso15693AsTag(trace_data, trace_data_size); + memcpy(data_response, ToSend, ToSendMax); + modulated_response = data_response; + modulated_response_size = ToSendMax; + } + } // } else if(receivedCmd[0] == ICLASS_CMD_DETECT) { // 0x0F - } else if (receivedCmd[0] == 0x26 && len == 5) { - // standard ISO15693 INVENTORY command. Ignore. + } else if (receivedCmd[0] == 0x26 && len == 5) { + // standard ISO15693 INVENTORY command. Ignore. } else { // Never seen this command before if (DBGLEVEL >= DBG_EXTENDED) @@ -762,7 +736,7 @@ send: if (modulated_response_size > 0) { uint32_t response_time = reader_eof_time + DELAY_ICLASS_VCD_TO_VICC_SIM; TransmitTo15693Reader(modulated_response, modulated_response_size, &response_time, 0, false); - LogTrace(trace_data, trace_data_size, response_time * 32, (response_time * 32) + (modulated_response_size * 32 * 64), NULL, false); + LogTrace(trace_data, trace_data_size, response_time * 32, (response_time * 32) + (modulated_response_size * 32 * 64), NULL, false); } } @@ -776,20 +750,16 @@ send: // THE READER CODE -// logs. static void iclass_send_as_reader(uint8_t *frame, int len, uint32_t *start_time) { - - CodeIso15693AsReader(frame, len); - TransmitTo15693Tag(ToSend, ToSendMax, start_time); - uint32_t end_time = *start_time + (32 * ((8 * ToSendMax) - 4)); // substract the 4 padding bits after EOF - - if (LogTrace(frame, len, (*start_time * 4), (end_time * 4), NULL, true) == false) - DbpString("send_as_reader: failed logtrace"); + CodeIso15693AsReader(frame, len); + TransmitTo15693Tag(ToSend, ToSendMax, start_time); + uint32_t end_time = *start_time + (32 * ((8 * ToSendMax) - 4)); // substract the 4 padding bits after EOF + LogTrace(frame, len, (*start_time * 4), (end_time * 4), NULL, true); } static bool iclass_send_cmd_with_retries(uint8_t* cmd, size_t cmdsize, uint8_t* resp, size_t max_resp_size, - uint8_t expected_size, uint8_t tries, uint32_t start_time, - uint32_t timeout, uint32_t *eof_time) { + uint8_t expected_size, uint8_t tries, uint32_t start_time, + uint16_t timeout, uint32_t *eof_time) { while (tries-- > 0) { iclass_send_as_reader(cmd, cmdsize, &start_time); @@ -797,9 +767,10 @@ static bool iclass_send_cmd_with_retries(uint8_t* cmd, size_t cmdsize, uint8_t* if (resp == NULL) return true; - if (expected_size == GetIso15693AnswerFromTag(resp, max_resp_size, timeout, eof_time)) { + if (expected_size == GetIso15693AnswerFromTag(resp, max_resp_size, timeout, eof_time)) { return true; } + start_time = *eof_time + DELAY_ICLASS_VICC_TO_VCD_READER; } return false; } @@ -816,7 +787,7 @@ static bool select_iclass_tag(uint8_t *card_data, bool use_credit_key, uint32_t static uint8_t act_all[] = { ICLASS_CMD_ACTALL }; static uint8_t identify[] = { ICLASS_CMD_READ_OR_IDENTIFY, 0x00, 0x73, 0x33 }; static uint8_t select[] = { 0x80 | ICLASS_CMD_SELECT, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; - static uint8_t read_conf[] = { ICLASS_CMD_READ_OR_IDENTIFY, 0x01, 0xfa, 0x22 }; + static uint8_t read_conf[] = { ICLASS_CMD_READ_OR_IDENTIFY, 0x01, 0xfa, 0x22 }; static uint8_t read_check_cc[] = { 0x80 | ICLASS_CMD_READCHECK, 0x02 }; uint8_t resp[ICLASS_BUFFER_SIZE] = {0}; @@ -826,19 +797,26 @@ static bool select_iclass_tag(uint8_t *card_data, bool use_credit_key, uint32_t if (use_credit_key) read_check_cc[0] = 0x10 | ICLASS_CMD_READCHECK; - uint32_t start_time = GetCountSspClk(); - iclass_send_as_reader(act_all, sizeof(act_all), &start_time); + set_tracing(true); - // card present? - int len = GetIso15693AnswerFromTag(resp, sizeof(resp), ICLASS_READER_TIMEOUT_ACTALL, eof_time); - if (len < 0) { - Dbprintf("Fail act all (%d)", len); - return false; - } + int len; + uint32_t start_time; + uint8_t tries = 10; + do { + // wakeup + start_time = GetCountSspClk(); + iclass_send_as_reader(act_all, 1, &start_time); + len = GetIso15693AnswerFromTag(resp, sizeof(resp), ICLASS_READER_TIMEOUT_ACTALL, eof_time); + if (len >= 0) { + break; + } else if (len == -2) { + return false; + } + } while (tries-- > 0); // send Identify start_time = *eof_time + DELAY_ICLASS_VICC_TO_VCD_READER; - iclass_send_as_reader(identify, 1, &start_time); + iclass_send_as_reader(identify, 1, &start_time); // expect a 10-byte response here, 8 byte anticollision-CSN and 2 byte CRC len = GetIso15693AnswerFromTag(resp, sizeof(resp), ICLASS_READER_TIMEOUT_OTHERS, eof_time); @@ -849,36 +827,36 @@ static bool select_iclass_tag(uint8_t *card_data, bool use_credit_key, uint32_t memcpy(&select[1], resp, 8); // select the card - start_time = *eof_time + DELAY_ICLASS_VICC_TO_VCD_READER; - iclass_send_as_reader(select, sizeof(select), &start_time); + start_time = *eof_time + DELAY_ICLASS_VICC_TO_VCD_READER; + iclass_send_as_reader(select, sizeof(select), &start_time); // expect a 10-byte response here, 8 byte CSN and 2 byte CRC - len = GetIso15693AnswerFromTag(resp, sizeof(resp), ICLASS_READER_TIMEOUT_OTHERS, eof_time); - if (len != 10) + len = GetIso15693AnswerFromTag(resp, sizeof(resp), ICLASS_READER_TIMEOUT_OTHERS, eof_time); + if (len != 10) return false; //Save CSN in response data memcpy(card_data, resp, 8); // card selected, now read config (block1) (only 8 bytes no CRC) - start_time = *eof_time + DELAY_ICLASS_VICC_TO_VCD_READER; - iclass_send_as_reader(read_conf, sizeof(read_conf), &start_time); + start_time = *eof_time + DELAY_ICLASS_VICC_TO_VCD_READER; + iclass_send_as_reader(read_conf, sizeof(read_conf), &start_time); // expect a 8-byte response here - len = GetIso15693AnswerFromTag(resp, sizeof(resp), ICLASS_READER_TIMEOUT_OTHERS, eof_time); - if (len != 10) + len = GetIso15693AnswerFromTag(resp, sizeof(resp), ICLASS_READER_TIMEOUT_OTHERS, eof_time); + if (len != 10) return false; //Save CONF in response data memcpy(card_data + 8, resp, 8); // card selected, now read e-purse (cc) (block2) (only 8 bytes no CRC) - start_time = *eof_time + DELAY_ICLASS_VICC_TO_VCD_READER; - iclass_send_as_reader(read_check_cc, sizeof(read_check_cc), &start_time); + start_time = *eof_time + DELAY_ICLASS_VICC_TO_VCD_READER; + iclass_send_as_reader(read_check_cc, sizeof(read_check_cc), &start_time); // expect a 8-byte response here - len = GetIso15693AnswerFromTag(resp, sizeof(resp), ICLASS_READER_TIMEOUT_OTHERS, eof_time); - if (len != 8) + len = GetIso15693AnswerFromTag(resp, sizeof(resp), ICLASS_READER_TIMEOUT_OTHERS, eof_time); + if (len != 8) return false; //Save CC (e-purse) in response data @@ -893,25 +871,23 @@ void ReaderIClass(uint8_t flags) { uint8_t card_data[6 * 8] = {0xFF}; // uint8_t last_csn[8] = {0, 0, 0, 0, 0, 0, 0, 0}; uint8_t resp[ICLASS_BUFFER_SIZE]; - -// memset(card_data, 0xFF, sizeof(card_data)); memset(resp, 0xFF, sizeof(resp)); // bool flag_readonce = flags & FLAG_ICLASS_READER_ONLY_ONCE; // flag to read until one tag is found successfully bool use_credit_key = flags & FLAG_ICLASS_READER_CEDITKEY; // flag to use credit key bool flag_read_aia = flags & FLAG_ICLASS_READER_AIA; // flag to read block5, application issuer area - if ((flags & FLAG_ICLASS_READER_INIT) == FLAG_ICLASS_READER_INIT) { - switch_off(); - Iso15693InitReader(); - StartCountSspClk(); - } - - if ((flags & FLAG_ICLASS_READER_CLEARTRACE) == FLAG_ICLASS_READER_CLEARTRACE) { - clear_trace(); - } + if ((flags & FLAG_ICLASS_READER_INIT) == FLAG_ICLASS_READER_INIT) { + Iso15693InitReader(); + } - uint32_t eof_time = 0; + set_tracing(true); + + if ((flags & FLAG_ICLASS_READER_CLEARTRACE) == FLAG_ICLASS_READER_CLEARTRACE) { + clear_trace(); + } + + uint32_t eof_time = 0; bool status = select_iclass_tag(card_data, use_credit_key, &eof_time); if (status == false) { reply_mix(CMD_ACK, 0xFF, 0, 0, card_data, 0); @@ -926,7 +902,7 @@ void ReaderIClass(uint8_t flags) { if (flag_read_aia) { //Read App Issuer Area block CRC(0x05) => 0xde 0x64 uint8_t read_aa[] = { ICLASS_CMD_READ_OR_IDENTIFY, 0x05, 0xde, 0x64}; - status = iclass_send_cmd_with_retries(read_aa, sizeof(read_aa), resp, sizeof(resp), 10, 10, start_time, ICLASS_READER_TIMEOUT_OTHERS, &eof_time); + status = iclass_send_cmd_with_retries(read_aa, sizeof(read_aa), resp, sizeof(resp), 10, 3, start_time, ICLASS_READER_TIMEOUT_OTHERS, &eof_time); if (status) { result_status |= FLAG_ICLASS_AIA; memcpy(card_data + (8 * 5), resp, 8); @@ -944,7 +920,7 @@ void ReaderIClass(uint8_t flags) { // //Then we can 'ship' back the 6 * 8 bytes of data, // with 0xFF:s in block 3 and 4. - + LED_B_ON(); reply_mix(CMD_ACK, result_status, 0, 0, card_data, sizeof(card_data)); @@ -968,7 +944,8 @@ void ReaderIClass(uint8_t flags) { // } else { // reply_mix(CMD_ACK, result_status, 0, 0, card_data, 0); // } - switch_off(); + + switch_off(); } // turn off afterwards @@ -991,8 +968,8 @@ void ReaderIClass_Replay(uint8_t arg0, uint8_t *mac) { int keyaccess; } memory; - uint32_t start_time = 0; - uint32_t eof_time = 0; + uint32_t start_time = 0; + uint32_t eof_time = 0; while (BUTTON_PRESS() == false) { WDT_HIT(); @@ -1105,8 +1082,9 @@ void ReaderIClass_Replay(uint8_t arg0, uint8_t *mac) { void iClass_ReadCheck(uint8_t blockno, uint8_t keytype) { uint8_t readcheck[] = { keytype, blockno }; uint8_t resp[8] = {0}; - uint32_t eof_time = 0; - bool isOK = iclass_send_cmd_with_retries(readcheck, sizeof(readcheck), resp, sizeof(resp), 8, 3, 0, ICLASS_READER_TIMEOUT_OTHERS, &eof_time); + uint32_t eof_time = 0; +// start_time = *eof_time + DELAY_ICLASS_VICC_TO_VCD_READER; + bool isOK = iclass_send_cmd_with_retries(readcheck, sizeof(readcheck), resp, sizeof(resp), 8, 3, 0, ICLASS_READER_TIMEOUT_OTHERS, &eof_time); reply_mix(CMD_ACK, isOK, 0, 0, 0, 0); switch_off(); } @@ -1131,15 +1109,14 @@ void iClass_Authentication(uint8_t *bytes) { uint8_t mac[4]; } PACKED packet; - Iso15693InitReader(); - StartCountSspClk(); + Iso15693InitReader(); uint8_t card_data[3 * 8] = {0xFF}; uint32_t eof_time = 0; packet.isOK = select_iclass_tag(card_data, payload->use_credit_key, &eof_time); if (packet.isOK == false) { - reply_ng(CMD_HF_ICLASS_AUTH, PM3_SUCCESS, (uint8_t *)&packet, sizeof(packet)); + reply_ng(CMD_HF_ICLASS_AUTH, PM3_ESOFT, (uint8_t *)&packet, sizeof(packet)); return; } uint32_t start_time = eof_time + DELAY_ICLASS_VICC_TO_VCD_READER; @@ -1163,7 +1140,8 @@ void iClass_Authentication(uint8_t *bytes) { uint8_t resp[ICLASS_BUFFER_SIZE]; packet.isOK = iclass_send_cmd_with_retries(check, sizeof(check), resp, sizeof(resp), 4, 3, start_time, ICLASS_READER_TIMEOUT_OTHERS, &eof_time); - reply_ng(CMD_HF_ICLASS_AUTH, PM3_SUCCESS, (uint8_t *)&packet, sizeof(packet)); + + reply_ng(CMD_HF_ICLASS_AUTH, (packet.isOK)? PM3_SUCCESS : PM3_ESOFT, (uint8_t *)&packet, sizeof(packet)); } typedef struct iclass_premac { @@ -1198,21 +1176,18 @@ void iClass_Authentication_fast(uint64_t arg0, uint64_t arg1, uint8_t *datain) { LED_A_ON(); + // fresh start switch_off(); SpinDelay(20); + + Iso15693InitReader(); - - bool read_status = false; uint32_t start_time = 0; uint32_t eof_time = 0; - uint8_t tries = 10; - while (tries-- > 0 || read_status == false) { - read_status = select_iclass_tag(card_data, use_credit_key, &eof_time); - } - - // failed to select card 10 times. return fail to client - if (read_status == false) + if (select_iclass_tag(card_data, use_credit_key, &eof_time) == false) goto out; + + start_time = eof_time + DELAY_ICLASS_VICC_TO_VCD_READER; // since select_iclass_tag call sends s readcheck, we start with sending first response. uint16_t checked = 0; @@ -1222,7 +1197,7 @@ void iClass_Authentication_fast(uint64_t arg0, uint64_t arg1, uint8_t *datain) { // Allow button press / usb cmd to interrupt device if (checked == 1000) { - if (BUTTON_PRESS() || !data_available()) goto out; + if (BUTTON_PRESS() || data_available()) goto out; checked = 0; } ++checked; @@ -1251,25 +1226,26 @@ void iClass_Authentication_fast(uint64_t arg0, uint64_t arg1, uint8_t *datain) { out: // send keyindex. - reply_mix(CMD_ACK, isOK, i, 0, 0, 0); + reply_mix(CMD_HF_ICLASS_CHKKEYS, isOK, i, 0, 0, 0); if (isOK >= 1 || lastChunk) { - switch_off(); LED_A_OFF(); } + switch_off(); + LED_B_OFF(); LED_C_OFF(); } // Tries to read block. // retries 10times. -static bool iClass_ReadBlock(uint8_t blockno, uint8_t *data) { +static bool iclass_readblock(uint8_t blockno, uint8_t *data) { uint8_t resp[10]; uint8_t c[] = {ICLASS_CMD_READ_OR_IDENTIFY, blockno, 0x00, 0x00}; AddCrc(c + 1, 1); uint32_t eof_time = 0; - bool isOK = iclass_send_cmd_with_retries(c, sizeof(c), resp, sizeof(resp), 10, 10, 0, ICLASS_READER_TIMEOUT_OTHERS, &eof_time); + bool isOK = iclass_send_cmd_with_retries(c, sizeof(c), resp, sizeof(resp), 10, 10, 0, ICLASS_READER_TIMEOUT_OTHERS, &eof_time); memcpy(data, resp, 8); return isOK; } @@ -1283,24 +1259,25 @@ void iClass_ReadBlk(uint8_t blockno) { } PACKED result; LED_A_ON(); - result.isOK = iClass_ReadBlock(blockno, result.blockdata); + result.isOK = iclass_readblock(blockno, result.blockdata); switch_off(); reply_ng(CMD_HF_ICLASS_READBL, PM3_SUCCESS, (uint8_t *)&result, sizeof(result)); } - + // Dump command seems to dump a block related portion of card memory. // I suppose it will need to do an authentatication to AA1, read its blocks by calling this. // then authenticate AA2, and read those blocks by calling this. // By the looks at it only 2K cards is supported, or first page dumps on larger cards. -// turn off afterwards +// turn off afterwards void iClass_Dump(uint8_t start_blockno, uint8_t numblks) { - BigBuf_free(); + BigBuf_free(); - uint8_t *dataout = BigBuf_malloc(0xFF * 8); + uint8_t *dataout = BigBuf_malloc(0xFF * 8); if (dataout == NULL) { DbpString("fail to allocate memory"); - OnError(1); + reply_ng(CMD_HF_ICLASS_DUMP, PM3_EMALLOC, NULL, 0); + switch_off(); return; } memset(dataout, 0xFF, 0xFF * 8); @@ -1308,24 +1285,29 @@ void iClass_Dump(uint8_t start_blockno, uint8_t numblks) { bool isOK; uint8_t blkcnt = 0; for (; blkcnt < numblks; blkcnt++) { - isOK = iClass_ReadBlock(start_blockno + blkcnt, dataout + (8 * blkcnt)); - - if (!isOK) { - isOK = iClass_ReadBlock(start_blockno + blkcnt, dataout + (8 * blkcnt)); - if (!isOK) { - Dbprintf("failed to read block %02X", start_blockno + blkcnt); - break; - } + isOK = iclass_readblock(start_blockno + blkcnt, dataout + (8 * blkcnt)); + if (isOK == false) { + Dbprintf("failed to read block %02X", start_blockno + blkcnt); + break; } } switch_off(); - // return pointer to dump memory in arg3 - // iceman: why not return | dataout - getbigbuf ? Should give exact location. - Dbprintf("ICE:: dataout, %u max trace %u, bb start %u, data-bb %u ", dataout, BigBuf_max_traceLen(), BigBuf_get_addr(), dataout - BigBuf_get_addr() ); - Dbprintf("ICE:: bb size %u, malloced %u (255*8)", BigBuf_get_size(), BigBuf_get_size() - (dataout - BigBuf_get_addr()) ); - reply_mix(CMD_ACK, isOK, blkcnt, BigBuf_max_traceLen(), 0, 0); + // return pointer to dump memory in arg3 + // iceman: why not return | dataout - getbigbuf ? Should give exact location. +// Dbprintf("ICE:: dataout, %u max trace %u, bb start %u, data-bb %u ", dataout, BigBuf_max_traceLen(), BigBuf_get_addr(), dataout - BigBuf_get_addr() ); +// Dbprintf("ICE:: bb size %u, malloced %u (255*8)", BigBuf_get_size(), BigBuf_get_size() - (dataout - BigBuf_get_addr()) ); +// reply_mix(CMD_ACK, isOK, blkcnt, BigBuf_max_traceLen(), 0, 0); + struct p { + bool isOK; + uint8_t block_cnt; + uint32_t bb_offset; + } PACKED payload; + payload.isOK = isOK; + payload.block_cnt = blkcnt; + payload.bb_offset = BigBuf_max_traceLen(); + reply_ng(CMD_HF_ICLASS_DUMP, PM3_SUCCESS, (uint8_t *)&payload, sizeof(payload)); BigBuf_free(); } @@ -1337,35 +1319,35 @@ static bool iClass_WriteBlock_ext(uint8_t blockno, uint8_t *data) { uint8_t resp[10] = {0}; uint32_t eof_time = 0; - bool isOK = iclass_send_cmd_with_retries(write, sizeof(write), resp, sizeof(resp), 10, 3, 0, ICLASS_READER_TIMEOUT_UPDATE, &eof_time); - if (isOK == false) { - return false; - } + bool isOK = iclass_send_cmd_with_retries(write, sizeof(write), resp, sizeof(resp), 10, 3, 0, ICLASS_READER_TIMEOUT_UPDATE, &eof_time); + if (isOK == false) { + return false; + } - uint8_t all_ff[8] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; - if (blockno == 2) { + uint8_t all_ff[8] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; + if (blockno == 2) { // check response. e-purse update swaps first and second half - if (memcmp(data + 4, resp, 4) || memcmp(data, resp + 4, 4)) { - return false; - } - } else if (blockno == 3 || blockno == 4) { + if (memcmp(data + 4, resp, 4) || memcmp(data, resp + 4, 4)) { + return false; + } + } else if (blockno == 3 || blockno == 4) { // check response. Key updates always return 0xffffffffffffffff - if (memcmp(all_ff, resp, 8)) { - return false; - } - } else { + if (memcmp(all_ff, resp, 8)) { + return false; + } + } else { // check response. All other updates return unchanged data - if (memcmp(data, resp, 8)) { - return false; - } - } + if (memcmp(data, resp, 8)) { + return false; + } + } return true; } // turn off afterwards void iClass_WriteBlock(uint8_t blockno, uint8_t *data) { - LED_A_ON(); + LED_A_ON(); uint8_t isOK = iClass_WriteBlock_ext(blockno, data); switch_off(); reply_ng(CMD_HF_ICLASS_WRITEBL, PM3_SUCCESS, (uint8_t *)&isOK, sizeof(uint8_t)); From e055858fb8c865e36c7da691e9b8cff87235c540 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Mon, 13 Jul 2020 12:25:44 +0200 Subject: [PATCH 0074/1047] clean up --- client/src/cmdtrace.c | 39 +++++++++++++++++++++------------------ 1 file changed, 21 insertions(+), 18 deletions(-) diff --git a/client/src/cmdtrace.c b/client/src/cmdtrace.c index 81840dfc1..7f854d303 100644 --- a/client/src/cmdtrace.c +++ b/client/src/cmdtrace.c @@ -200,6 +200,7 @@ static uint16_t printTraceLine(uint16_t tracepos, uint16_t traceLen, uint8_t *tr data_len = hdr->data_len; if (tracepos + TRACELOG_HDR_LEN + data_len + TRACELOG_PARITY_LEN(hdr) > traceLen) { + PrintAndLogEx(DEBUG, "trace pos offset %d larger than reported tracelen %d", tracepos + TRACELOG_HDR_LEN + data_len + TRACELOG_PARITY_LEN(hdr), traceLen); return traceLen; } @@ -390,19 +391,23 @@ static uint16_t printTraceLine(uint16_t tracepos, uint16_t traceLen, uint8_t *tr } } - if (DecodeMifareData(frame, data_len, parityBytes, hdr->isResponse, mfData, &mfDataLen)) { - memset(explanation, 0x00, sizeof(explanation)); - if (!hdr->isResponse) { - annotateIso14443a(explanation, sizeof(explanation), mfData, mfDataLen); + if (protocol == PROTO_MIFARE) { + if (DecodeMifareData(frame, data_len, parityBytes, hdr->isResponse, mfData, &mfDataLen)) { + memset(explanation, 0x00, sizeof(explanation)); + if (!hdr->isResponse) { + annotateIso14443a(explanation, sizeof(explanation), mfData, mfDataLen); + } + uint8_t crcc = iso14443A_CRC_check(hdr->isResponse, mfData, mfDataLen); + PrintAndLogEx(NORMAL, " | | * |%-72s | %-4s| %s", + sprint_hex_inrow_spaces(mfData, mfDataLen, 2), + (crcc == 0 ? "!crc" : (crcc == 1 ? " ok " : " ")), + explanation); } - uint8_t crcc = iso14443A_CRC_check(hdr->isResponse, mfData, mfDataLen); - PrintAndLogEx(NORMAL, " | | * |%-72s | %-4s| %s", - sprint_hex_inrow_spaces(mfData, mfDataLen, 2), - (crcc == 0 ? "!crc" : (crcc == 1 ? " ok " : " ")), - explanation); } - if (is_last_record(tracepos, traceLen)) return traceLen; + if (is_last_record(tracepos, traceLen)) { + return traceLen; + } if (showWaitCycles && !hdr->isResponse && next_record_is_response(tracepos, trace)) { @@ -420,7 +425,7 @@ static uint16_t printTraceLine(uint16_t tracepos, uint16_t traceLen, uint8_t *tr static int download_trace(void) { - if (!IfPm3Present()) { + if (IfPm3Present() == false) { PrintAndLogEx(FAILED, "You requested a trace upload in offline mode, consider using parameter '1' for working from Tracebuffer"); return PM3_EINVARG; } @@ -437,7 +442,7 @@ static int download_trace(void) { return PM3_EMALLOC; } - PrintAndLogEx(INFO, "downloading tracelog from device"); + PrintAndLogEx(INFO, "downloading tracelog data from device"); // Query for the size of the trace, downloading PM3_CMD_DATA_SIZE PacketResponseNG response; @@ -533,11 +538,6 @@ int CmdTraceList(const char *Cmd) { bool errors = false; uint8_t protocol = 0; char type[10] = {0}; - - //int tlen = param_getstr(Cmd,0,type); - //char param1 = param_getchar(Cmd, 1); - //char param2 = param_getchar(Cmd, 2); - char cmdp = 0; while (param_getchar(Cmd, cmdp) != 0x00 && !errors) { @@ -651,7 +651,10 @@ int CmdTraceList(const char *Cmd) { PrintAndLogEx(NORMAL, " Start | End | Src | Data (! denotes parity error) | CRC | Annotation"); PrintAndLogEx(NORMAL, "------------+------------+-----+-------------------------------------------------------------------------+-----+--------------------"); - ClearAuthData(); + // clean authentication data used with the mifare classic decrypt fct + if (protocol == ISO_14443A || protocol == PROTO_MIFARE) + ClearAuthData(); + while (tracepos < g_traceLen) { tracepos = printTraceLine(tracepos, g_traceLen, g_trace, protocol, showWaitCycles, markCRCBytes); From e7127514db514ef5fd29d565057f71fa2ece7b2b Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Mon, 13 Jul 2020 12:26:26 +0200 Subject: [PATCH 0075/1047] change debug --- armsrc/BigBuf.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/armsrc/BigBuf.c b/armsrc/BigBuf.c index 24fe45e57..8756e8171 100644 --- a/armsrc/BigBuf.c +++ b/armsrc/BigBuf.c @@ -28,7 +28,7 @@ Pointer to highest available memory: s_bigbuf_hi low 0x00 */ -static uint32_t s_bigbuf_size = 0; +static uint32_t s_bigbuf_size = 0; // High memory mark static uint32_t s_bigbuf_hi = 0; @@ -164,7 +164,6 @@ uint32_t BigBuf_get_traceLen(void) { **/ bool RAMFUNC LogTrace(const uint8_t *btBytes, uint16_t iLen, uint32_t timestamp_start, uint32_t timestamp_end, uint8_t *parity, bool readerToTag) { if (tracing == false) { - Dbprintf("trace is turned off"); return false; } @@ -187,7 +186,7 @@ bool RAMFUNC LogTrace(const uint8_t *btBytes, uint16_t iLen, uint32_t timestamp_ } if (duration > 0x7FFF) { - if (DBGLEVEL >= DBG_ERROR) { //DBG_DEBUG + if (DBGLEVEL >= DBG_ERROR) { Dbprintf("Error in LogTrace: duration too long for 15 bits encoding: 0x%08x start: 0x%08x end: 0x%08x", duration, timestamp_start, timestamp_end); } duration /= 32; From a87ec6bd521335cb9df1b275ad22ba8fe08c1d45 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Mon, 13 Jul 2020 12:28:01 +0200 Subject: [PATCH 0076/1047] style --- armsrc/iso15693.c | 50 ++++++++++++++++++++++------------------------- 1 file changed, 23 insertions(+), 27 deletions(-) diff --git a/armsrc/iso15693.c b/armsrc/iso15693.c index 39a64a8c4..7c018554c 100644 --- a/armsrc/iso15693.c +++ b/armsrc/iso15693.c @@ -95,18 +95,12 @@ #define ISO15693_MAX_RESPONSE_LENGTH 36 // allows read single block with the maximum block size of 256bits. Read multiple blocks not supported yet #define ISO15693_MAX_COMMAND_LENGTH 45 // allows write single block with the maximum block size of 256bits. Write multiple blocks not supported yet - // 32 + 2 crc + 1 #define ISO15_MAX_FRAME 35 #define CMD_ID_RESP 5 #define CMD_READ_RESP 13 #define CMD_INV_RESP 12 -#define FrameSOF Iso15693FrameSOF -#define Logic0 Iso15693Logic0 -#define Logic1 Iso15693Logic1 -#define FrameEOF Iso15693FrameEOF - //#define Crc(data, len) Crc(CRC_15693, (data), (len)) #define CheckCrc15(data, len) check_crc(CRC_15693, (data), (len)) #define AddCrc15(data, len) compute_crc(CRC_15693, (data), (len), (data)+(len), (data)+(len)+1) @@ -132,7 +126,7 @@ void CodeIso15693AsReader(uint8_t *cmd, int n) { // data for (int i = 0; i < n; i++) { for (int j = 0; j < 8; j += 2) { - int these = (cmd[i] >> j) & 0x03; + uint8_t these = (cmd[i] >> j) & 0x03; switch(these) { case 0: ToSend[++ToSendMax] = 0x40; //01000000 @@ -152,7 +146,6 @@ void CodeIso15693AsReader(uint8_t *cmd, int n) { // EOF ToSend[++ToSendMax] = 0x20; //0010 + 0000 padding - ToSendMax++; } @@ -189,11 +182,15 @@ static void CodeIso15693AsReader256(uint8_t *cmd, int n) { // EOF ToSend[++ToSendMax] = 0x20; //0010 + 0000 padding - ToSendMax++; } -static const uint8_t encode_4bits[16] = { 0xaa, 0x6a, 0x9a, 0x5a, 0xa6, 0x66, 0x96, 0x56, 0xa9, 0x69, 0x99, 0x59, 0xa5, 0x65, 0x95, 0x55 }; +static const uint8_t encode_4bits[16] = { + 0xaa, 0x6a, 0x9a, 0x5a, + 0xa6, 0x66, 0x96, 0x56, + 0xa9, 0x69, 0x99, 0x59, + 0xa5, 0x65, 0x95, 0x55 +}; void CodeIso15693AsTag(uint8_t *cmd, size_t len) { /* @@ -260,8 +257,8 @@ void TransmitTo15693Tag(const uint8_t *cmd, int len, uint32_t *start_time) { LED_B_ON(); for (int c = 0; c < len; c++) { - uint8_t data = cmd[c]; - for (int i = 0; i < 8; i++) { + volatile uint8_t data = cmd[c]; + for (uint8_t i = 0; i < 8; i++) { uint16_t send_word = (data & 0x80) ? 0xffff : 0x0000; while (!(AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_TXRDY))) ; AT91C_BASE_SSC->SSC_THR = send_word; @@ -307,7 +304,7 @@ void TransmitTo15693Reader(const uint8_t *cmd, size_t len, uint32_t *start_time, for (size_t c = 0; c < len; c++) { for (int i = (c==0?4:7); i >= 0; i--) { uint8_t cmd_bits = ((cmd[c] >> i) & 0x01) ? 0xff : 0x00; - for (int j = 0; j < (slow?4:1); ) { + for (int j = 0; j < (slow ? 4 : 1); ) { if (AT91C_BASE_SSC->SSC_SR & AT91C_SSC_TXRDY) { bits_to_send = bits_to_shift << (8 - shift_delay) | cmd_bits >> shift_delay; AT91C_BASE_SSC->SSC_THR = bits_to_send; @@ -652,9 +649,9 @@ int GetIso15693AnswerFromTag(uint8_t* response, uint16_t max_len, uint16_t timeo dma_start_time = GetCountSspClk() & 0xfffffff0; } - uint16_t tagdata = *upTo++; + volatile uint16_t tagdata = *upTo++; - if(upTo >= dmaBuf + ISO15693_DMA_BUFFER_SIZE) { // we have read all of the DMA buffer content. + if (upTo >= dmaBuf + ISO15693_DMA_BUFFER_SIZE) { // we have read all of the DMA buffer content. upTo = dmaBuf; // start reading the circular buffer from the beginning if (behindBy > (9 * ISO15693_DMA_BUFFER_SIZE / 10)) { Dbprintf("About to blow circular buffer - aborted! behindBy=%d", behindBy); @@ -705,12 +702,11 @@ int GetIso15693AnswerFromTag(uint8_t* response, uint16_t max_len, uint16_t timeo Dbprintf("timing: sof_time = %d, eof_time = %d", (sof_time * 4), (*eof_time * 4)); } - if (LogTrace(DecodeTag.output, DecodeTag.len, (sof_time * 4), (*eof_time * 4), NULL, false) == false) - DbpString("GetIso15693AnswerFromTag: failed logtrace"); - if (ret < 0) { return ret; } + + LogTrace(DecodeTag.output, DecodeTag.len, (sof_time * 4), (*eof_time * 4), NULL, false); return DecodeTag.len; } @@ -1017,7 +1013,6 @@ static RAMFUNC int Handle15693SampleFromReader(bool bit, DecodeReader_t *DecodeR int GetIso15693CommandFromReader(uint8_t *received, size_t max_len, uint32_t *eof_time) { int samples = 0; bool gotFrame = false; - uint8_t b; uint8_t dmaBuf[ISO15693_DMA_BUFFER_SIZE]; @@ -1043,15 +1038,15 @@ int GetIso15693CommandFromReader(uint8_t *received, size_t max_len, uint32_t *eo uint8_t *upTo = dmaBuf; for (;;) { - uint16_t behindBy = ((uint8_t*)AT91C_BASE_PDC_SSC->PDC_RPR - upTo) & (ISO15693_DMA_BUFFER_SIZE-1); + uint16_t behindBy = ((uint8_t*)AT91C_BASE_PDC_SSC->PDC_RPR - upTo) & (ISO15693_DMA_BUFFER_SIZE - 1); if (behindBy == 0) continue; - b = *upTo++; + volatile uint8_t b = *upTo++; if (upTo >= dmaBuf + ISO15693_DMA_BUFFER_SIZE) { // we have read all of the DMA buffer content. upTo = dmaBuf; // start reading the circular buffer from the beginning if (behindBy > (9*ISO15693_DMA_BUFFER_SIZE/10)) { - Dbprintf("About to blow circular buffer - aborted! behindBy=%d", behindBy); + Dbprintf("About to blow circular buffer - aborted! behindBy %d", behindBy); break; } } @@ -1088,11 +1083,10 @@ int GetIso15693CommandFromReader(uint8_t *received, size_t max_len, uint32_t *eo if (DecodeReader.byteCount > 0) { uint32_t sof_time = *eof_time - - DecodeReader.byteCount * (DecodeReader.Coding==CODING_1_OUT_OF_4?128:2048) // time for byte transfers + - DecodeReader.byteCount * (DecodeReader.Coding == CODING_1_OUT_OF_4 ? 128 : 2048) // time for byte transfers - 32 // time for SOF transfer - 16; // time for EOF transfer - if (LogTrace(DecodeReader.output, DecodeReader.byteCount, sof_time*32, *eof_time*32, NULL, true) == false) - DbpString("GetIso15693CommandFromReader: failed logtrace"); + LogTrace(DecodeReader.output, DecodeReader.byteCount, (sof_time * 32), (*eof_time * 32), NULL, true); } return DecodeReader.byteCount; @@ -1317,7 +1311,7 @@ void Iso15693InitReader(void) { // Start from off (no field generated) FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); LEDsoff(); - SpinDelay(10); + SpinDelay(50); // switch field on FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER); @@ -1328,7 +1322,7 @@ void Iso15693InitReader(void) { SetAdcMuxFor(GPIO_MUXSEL_HIPKD); // give tags some time to energize - SpinDelay(250); + SpinDelay(200); set_tracing(true); @@ -1572,6 +1566,8 @@ void Iso15693InitTag(void) { FpgaSetupSsc(FPGA_MAJOR_MODE_HF_SIMULATOR); SetAdcMuxFor(GPIO_MUXSEL_HIPKD); + set_tracing(true); + // turn on clock StartCountSspClk(); } From 7aedd9c7fe120b60442e5b7d447f3488b3156d37 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Mon, 13 Jul 2020 12:28:30 +0200 Subject: [PATCH 0077/1047] textual --- include/pm3_cmd.h | 1 + 1 file changed, 1 insertion(+) diff --git a/include/pm3_cmd.h b/include/pm3_cmd.h index ac5d7ce00..b85d996d6 100644 --- a/include/pm3_cmd.h +++ b/include/pm3_cmd.h @@ -122,6 +122,7 @@ typedef struct { bool verbose; } PACKED sample_config; +// Tracelog Header struct typedef struct { uint32_t timestamp; uint16_t duration; From 52e9d7a75048adad307acb5137f41f6b713c58f6 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Mon, 13 Jul 2020 12:29:31 +0200 Subject: [PATCH 0078/1047] rework iclass dump --- client/src/cmdhficlass.c | 174 ++++++++++++++++++++------------------- client/src/cmdhficlass.h | 13 +++ 2 files changed, 102 insertions(+), 85 deletions(-) diff --git a/client/src/cmdhficlass.c b/client/src/cmdhficlass.c index 62ba0f70a..5b0b11492 100644 --- a/client/src/cmdhficlass.c +++ b/client/src/cmdhficlass.c @@ -1112,7 +1112,7 @@ static int CmdHFiClassEncryptBlk(const char *Cmd) { return PM3_SUCCESS; } -static void Calc_wb_mac(uint8_t blockno, uint8_t *data, uint8_t *div_key, uint8_t MAC[4]) { +static void calc_wb_mac(uint8_t blockno, uint8_t *data, uint8_t *div_key, uint8_t *MAC) { uint8_t wb[9]; wb[0] = blockno; memcpy(wb + 1, data, 8); @@ -1120,24 +1120,25 @@ static void Calc_wb_mac(uint8_t blockno, uint8_t *data, uint8_t *div_key, uint8_ } static bool select_only(uint8_t *CSN, uint8_t *CCNR, bool use_credit_key, bool verbose) { - PacketResponseNG resp; - uint8_t flags = (FLAG_ICLASS_READER_INIT | FLAG_ICLASS_READER_CLEARTRACE); + uint8_t flags = (FLAG_ICLASS_READER_INIT | FLAG_ICLASS_READER_CLEARTRACE); if (use_credit_key) flags |= FLAG_ICLASS_READER_CEDITKEY; clearCommandBuffer(); + PacketResponseNG resp; SendCommandMIX(CMD_HF_ICLASS_READER, flags, 0, 0, NULL, 0); if (WaitForResponseTimeout(CMD_ACK, &resp, 2000) == false) { PrintAndLogEx(WARNING, "command execute timeout"); return false; } - uint8_t isOK = resp.oldarg[0] & 0xff; + uint8_t isok = resp.oldarg[0] & 0xff; - if (isOK == 0xFF) { + // no tag found or button pressed + if ((isok == 0) || isok == 0xFF) { if (verbose) { - PrintAndLogEx(FAILED, "failed tag-select, aborting... (%d)", isOK); + PrintAndLogEx(FAILED, "failed tag-select, aborting... (%d)", isok); } return false; } @@ -1159,17 +1160,12 @@ static bool select_only(uint8_t *CSN, uint8_t *CCNR, bool use_credit_key, bool v static bool select_and_auth(uint8_t *KEY, uint8_t *MAC, uint8_t *div_key, bool use_credit_key, bool elite, bool rawkey, bool verbose) { - struct { - uint8_t key[8]; - bool use_raw; - bool use_elite; - bool use_credit_key; - } PACKED payload; - + iclass_auth_req_t payload = { + .use_raw = rawkey, + .use_elite = elite, + .use_credit_key = use_credit_key + }; memcpy(payload.key, KEY, 8); - payload.use_raw = rawkey; - payload.use_elite = elite; - payload.use_credit_key = use_credit_key; SendCommandNG(CMD_HF_ICLASS_AUTH, (uint8_t*)&payload, sizeof(payload)); PacketResponseNG resp; @@ -1184,13 +1180,8 @@ static bool select_and_auth(uint8_t *KEY, uint8_t *MAC, uint8_t *div_key, bool u return false; } - struct p { - bool isOK; - uint8_t div_key[8]; - uint8_t mac[4]; - } PACKED; - struct p *packet = (struct p *)resp.data.asBytes; - + iclass_auth_resp_t *packet = (iclass_auth_resp_t *)resp.data.asBytes; + if (packet->isOK == 0) { if (verbose) PrintAndLogEx(FAILED, "authentication error"); return false; @@ -1206,7 +1197,7 @@ static bool select_and_auth(uint8_t *KEY, uint8_t *MAC, uint8_t *div_key, bool u return true; } -static int CmdHFiClassReader_Dump(const char *Cmd) { +static int CmdHFiClassDump(const char *Cmd) { uint8_t MAC[4] = {0x00, 0x00, 0x00, 0x00}; uint8_t div_key[8] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; @@ -1245,6 +1236,7 @@ static int CmdHFiClassReader_Dump(const char *Cmd) { keyNbr = param_get8(Cmd, cmdp + 1); if (keyNbr < ICLASS_KEYS_MAX) { memcpy(CreditKEY, iClass_Key_Table[keyNbr], 8); + PrintAndLogEx(INFO, "AA2 (credit) index %u", keyNbr); } else { PrintAndLogEx(WARNING, "\nERROR: Credit KeyNbr is invalid\n"); errors = true; @@ -1277,6 +1269,7 @@ static int CmdHFiClassReader_Dump(const char *Cmd) { keyNbr = param_get8(Cmd, cmdp + 1); if (keyNbr < ICLASS_KEYS_MAX) { memcpy(KEY, iClass_Key_Table[keyNbr], 8); + PrintAndLogEx(INFO, "AA1 (debit) index %u", keyNbr); } else { PrintAndLogEx(WARNING, "\nERROR: Credit KeyNbr is invalid\n"); errors = true; @@ -1307,12 +1300,7 @@ static int CmdHFiClassReader_Dump(const char *Cmd) { // if no debit key given try credit key on AA1 (not for iclass but for some picopass this will work) if (!have_debit_key && have_credit_key) use_credit_key = true; - uint32_t flags = ( - FLAG_ICLASS_READER_INIT | - FLAG_ICLASS_READER_CLEARTRACE | - FLAG_ICLASS_READER_ONLY_ONCE - ); - + uint32_t flags = (FLAG_ICLASS_READER_INIT | FLAG_ICLASS_READER_CLEARTRACE); //get config and first 3 blocks PacketResponseNG resp; @@ -1320,7 +1308,7 @@ static int CmdHFiClassReader_Dump(const char *Cmd) { clearCommandBuffer(); SendCommandMIX(CMD_HF_ICLASS_READER, flags, 0, 0, NULL, 0); - if (!WaitForResponseTimeout(CMD_ACK, &resp, 4500)) { + if (!WaitForResponseTimeout(CMD_ACK, &resp, 2000)) { PrintAndLogEx(WARNING, "command execute timeout"); DropField(); return PM3_ESOFT; @@ -1346,21 +1334,22 @@ static int CmdHFiClassReader_Dump(const char *Cmd) { } // authenticate debit key and get div_key - later store in dump block 3 - int numberAuthRetries = ICLASS_AUTH_RETRY; - do { - if (select_and_auth(KEY, MAC, div_key, use_credit_key, elite, rawkey, verbose)) - break; - } while (numberAuthRetries--); - - if (numberAuthRetries <= 0) { + if (select_and_auth(KEY, MAC, div_key, use_credit_key, elite, rawkey, verbose) == false) { PrintAndLogEx(WARNING, "failed authenticating with debit key"); DropField(); return PM3_ESOFT; } - // begin dump + struct { + uint8_t start_blockno; + uint8_t numblks; + } PACKED payload; + payload.start_blockno = blockno; + payload.numblks = numblks - blockno + 1; + clearCommandBuffer(); - SendCommandMIX(CMD_HF_ICLASS_DUMP, blockno, numblks - blockno + 1, 0, NULL, 0); + SendCommandNG(CMD_HF_ICLASS_DUMP, (uint8_t*)&payload, sizeof(payload)); + while (true) { printf("."); fflush(stdout); @@ -1371,47 +1360,53 @@ static int CmdHFiClassReader_Dump(const char *Cmd) { return PM3_EOPABORTED; } - if (WaitForResponseTimeout(CMD_ACK, &resp, 2000)) + if (WaitForResponseTimeout(CMD_HF_ICLASS_DUMP, &resp, 2000)) break; } + + if (resp.status != PM3_SUCCESS) { + PrintAndLogEx(ERR, "failed to communicate with card"); + return resp.status; + } + // dump cmd switch off at device when finised. - uint32_t blocksRead = resp.oldarg[1]; - uint8_t isOK = resp.oldarg[0] & 0xff; - if (!isOK && !blocksRead) { + struct p_resp { + bool isOK; + uint8_t block_cnt; + uint32_t bb_offset; + } PACKED; + struct p_resp *packet = (struct p_resp *)resp.data.asBytes; + + uint32_t blocks_read = packet->block_cnt; + + if (packet->isOK == false) { PrintAndLogEx(WARNING, "read block failed"); return PM3_ESOFT; } - uint32_t startindex = resp.oldarg[2]; - if (blocksRead * 8 > sizeof(tag_data) - (blockno * 8)) { + uint32_t startindex = packet->bb_offset; + + if (blocks_read * 8 > sizeof(tag_data) - (blockno * 8)) { PrintAndLogEx(FAILED, "data exceeded buffer size!"); - blocksRead = (sizeof(tag_data) / 8) - blockno; + blocks_read = (sizeof(tag_data) / 8) - blockno; } // response ok - now get bigbuf content of the dump - if (!GetFromDevice(BIG_BUF, tag_data + (blockno * 8), blocksRead * 8, startindex, NULL, 0, NULL, 2500, false)) { + if (!GetFromDevice(BIG_BUF, tag_data + (blockno * 8), blocks_read * 8, startindex, NULL, 0, NULL, 2500, false)) { PrintAndLogEx(WARNING, "command execution time out"); return PM3_ETIMEOUT; } - size_t gotBytes = blocksRead * 8 + blockno * 8; + size_t gotBytes = blocks_read * 8 + blockno * 8; - // try AA2 + // try AA2 Kc, Credit if (have_credit_key) { - //turn off hf field before authenticating with different key - DropField(); memset(MAC, 0, 4); // AA2 authenticate credit key and git c_div_key - later store in dump block 4 - numberAuthRetries = ICLASS_AUTH_RETRY; - do { - if (select_and_auth(CreditKEY, MAC, c_div_key, true, elite, rawkey, verbose)) - break; - } while (numberAuthRetries--); - - if (numberAuthRetries <= 0) { + if (select_and_auth(CreditKEY, MAC, c_div_key, true, elite, rawkey, verbose) == false) { PrintAndLogEx(WARNING, "failed authenticating with credit key"); DropField(); return PM3_ESOFT; @@ -1419,32 +1414,43 @@ static int CmdHFiClassReader_Dump(const char *Cmd) { // do we still need to read more block? (aa2 enabled?) if (maxBlk > blockno + numblks + 1) { - // setup dump and start + + payload.start_blockno = blockno + blocks_read; + payload.numblks = maxBlk - (blockno + blocks_read); + clearCommandBuffer(); - SendCommandMIX(CMD_HF_ICLASS_DUMP, blockno + blocksRead, maxBlk - (blockno + blocksRead), 0, NULL, 0); - if (!WaitForResponseTimeout(CMD_ACK, &resp, 4500)) { + SendCommandNG(CMD_HF_ICLASS_DUMP, (uint8_t*)&payload, sizeof(payload)); + + if (!WaitForResponseTimeout(CMD_HF_ICLASS_DUMP, &resp, 2000)) { PrintAndLogEx(WARNING, "command execute timeout 2"); return PM3_ETIMEOUT; } - isOK = resp.oldarg[0] & 0xff; - blocksRead = resp.oldarg[1]; - if (!isOK && !blocksRead) { - PrintAndLogEx(WARNING, "read block failed 2"); + + if (resp.status != PM3_SUCCESS) { + PrintAndLogEx(ERR, "failed to communicate with card"); + return resp.status; + } + + packet = (struct p_resp *)resp.data.asBytes; + if (packet->isOK == false) { + PrintAndLogEx(WARNING, "read block failed using credit key"); return PM3_ESOFT; } - startindex = resp.oldarg[2]; - if (blocksRead * 8 > sizeof(tag_data) - gotBytes) { + blocks_read = packet->block_cnt; + startindex = packet->bb_offset; + + if (blocks_read * 8 > sizeof(tag_data) - gotBytes) { PrintAndLogEx(FAILED, "data exceeded buffer size!"); - blocksRead = (sizeof(tag_data) - gotBytes) / 8; + blocks_read = (sizeof(tag_data) - gotBytes) / 8; } // get dumped data from bigbuf - if (!GetFromDevice(BIG_BUF, tag_data + gotBytes, blocksRead * 8, startindex, NULL, 0, NULL, 2500, false)) { + if (!GetFromDevice(BIG_BUF, tag_data + gotBytes, blocks_read * 8, startindex, NULL, 0, NULL, 2500, false)) { PrintAndLogEx(WARNING, "command execution time out"); return PM3_ETIMEOUT; } - gotBytes += blocksRead * 8; + gotBytes += blocks_read * 8; } } @@ -1485,13 +1491,13 @@ static int WriteBlock(uint8_t blockno, uint8_t *bldata, uint8_t *KEY, bool use_c uint8_t MAC[4] = {0x00, 0x00, 0x00, 0x00}; uint8_t div_key[8] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; - if (!select_and_auth(KEY, MAC, div_key, use_credit_key, elite, rawkey, verbose)) { + if (select_and_auth(KEY, MAC, div_key, use_credit_key, elite, rawkey, verbose) == false) { numberAuthRetries--; DropField(); continue; } - Calc_wb_mac(blockno, bldata, div_key, MAC); + calc_wb_mac(blockno, bldata, div_key, MAC); struct p { uint8_t blockno; @@ -1506,7 +1512,7 @@ static int WriteBlock(uint8_t blockno, uint8_t *bldata, uint8_t *KEY, bool use_c SendCommandNG(CMD_HF_ICLASS_WRITEBL, (uint8_t *)&payload, sizeof(payload)); PacketResponseNG resp; - if (WaitForResponseTimeout(CMD_HF_ICLASS_WRITEBL, &resp, 4000) == 0) { + if (WaitForResponseTimeout(CMD_HF_ICLASS_WRITEBL, &resp, 2000) == 0) { if (verbose) PrintAndLogEx(WARNING, "Command execute timeout"); DropField(); return PM3_ETIMEOUT; @@ -1767,7 +1773,7 @@ static int CmdHFiClassCloneTag(const char *Cmd) { // calculate all mac for every the block we will write for (i = startblock; i <= endblock; i++) { - Calc_wb_mac(i, tag_data[i - startblock].d, div_key, MAC); + calc_wb_mac(i, tag_data[i - startblock].d, div_key, MAC); // usb command d start pointer = d + (i - 6) * 12 // memcpy(pointer,tag_data[i - 6],8) 8 bytes // memcpy(pointer + 8,mac,sizoof(mac) 4 bytes; @@ -1806,7 +1812,7 @@ static int CmdHFiClassCloneTag(const char *Cmd) { clearCommandBuffer(); SendCommandNG(CMD_HF_ICLASS_CLONE, (uint8_t *)&payload, total_bytes + 2); - if (WaitForResponseTimeout(CMD_HF_ICLASS_CLONE, &resp, 4500) == 0) { + if (WaitForResponseTimeout(CMD_HF_ICLASS_CLONE, &resp, 2000) == 0) { PrintAndLogEx(WARNING, "command execute timeout"); DropField(); return PM3_ETIMEOUT; @@ -1829,7 +1835,6 @@ static int ReadBlock(uint8_t *KEY, uint8_t blockno, uint8_t keyType, bool elite, bool isOK; uint8_t blockdata[8]; } PACKED; - struct p *result = NULL; do { @@ -1837,7 +1842,7 @@ static int ReadBlock(uint8_t *KEY, uint8_t blockno, uint8_t keyType, bool elite, if (auth || blockno >= 2) { uint8_t MAC[4] = {0x00, 0x00, 0x00, 0x00}; uint8_t div_key[8] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; - if (!select_and_auth(KEY, MAC, div_key, (keyType == 0x18), elite, rawkey, verbose)) { + if (select_and_auth(KEY, MAC, div_key, (keyType == 0x18), elite, rawkey, verbose) == false) { numberAuthRetries--; DropField(); continue; @@ -1845,7 +1850,7 @@ static int ReadBlock(uint8_t *KEY, uint8_t blockno, uint8_t keyType, bool elite, } else { uint8_t CSN[8] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; uint8_t CCNR[12] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; - if (!select_only(CSN, CCNR, (keyType == 0x18), verbose)) { + if (select_only(CSN, CCNR, (keyType == 0x18), verbose) == false) { numberAuthRetries--; DropField(); continue; @@ -2156,6 +2161,7 @@ static int CmdHFiClassCalcNewKey(const char *Cmd) { bool elite = false; bool errors = false; uint8_t cmdp = 0; + while (param_getchar(Cmd, cmdp) != 0x00 && !errors) { switch (tolower(param_getchar(Cmd, cmdp))) { case 'h': @@ -2217,9 +2223,9 @@ static int CmdHFiClassCalcNewKey(const char *Cmd) { } if (errors || cmdp < 4) return usage_hf_iclass_calc_newkey(); - if (!givenCSN) { + if (givenCSN == false) { uint8_t CCNR[12] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; - if (!select_only(CSN, CCNR, false, true)) { + if (select_only(CSN, CCNR, false, true) == false) { DropField(); return PM3_ESOFT; } @@ -2512,7 +2518,7 @@ static int CmdHFiClassCheckKeys(const char *Cmd) { SendCommandOLD(CMD_HF_ICLASS_CHKKEYS, flags, keys, 0, pre + key_offset, 4 * keys); PacketResponseNG resp; - while (!WaitForResponseTimeout(CMD_ACK, &resp, 2000)) { + while (!WaitForResponseTimeout(CMD_HF_ICLASS_CHKKEYS, &resp, 2000)) { timeout++; printf("."); fflush(stdout); @@ -2927,7 +2933,7 @@ static command_t CommandTable[] = { {"chk", CmdHFiClassCheckKeys, AlwaysAvailable, "[options..] Check keys"}, {"clone", CmdHFiClassCloneTag, IfPm3Iclass, "[options..] Restore a dump file onto a iClass tag"}, {"decrypt", CmdHFiClassDecrypt, AlwaysAvailable, "[options..] Decrypt given block data or tag dump file" }, - {"dump", CmdHFiClassReader_Dump, IfPm3Iclass, "[options..] Dump iClass tag to file"}, + {"dump", CmdHFiClassDump, IfPm3Iclass, "[options..] Dump iClass tag to file"}, {"eload", CmdHFiClassELoad, IfPm3Iclass, "[f ] Load iClass dump file into emulator memory"}, {"encrypt", CmdHFiClassEncryptBlk, AlwaysAvailable, "[options..] Encrypt given block data"}, {"info", CmdHFiClassInfo, AlwaysAvailable, " Tag information"}, @@ -2979,8 +2985,6 @@ int readIclass(bool loop, bool verbose) { uint8_t readStatus = resp.oldarg[0] & 0xff; -// PrintAndLogEx(NORMAL, "ICE: %x", readStatus); - // no tag found or button pressed if ((readStatus == 0 && !loop) || readStatus == 0xFF) { DropField(); diff --git a/client/src/cmdhficlass.h b/client/src/cmdhficlass.h index 53880d647..19b994d0c 100644 --- a/client/src/cmdhficlass.h +++ b/client/src/cmdhficlass.h @@ -27,6 +27,19 @@ typedef struct iclass_prekey { uint8_t key[8]; } iclass_prekey_t; +typedef struct { + uint8_t key[8]; + bool use_raw; + bool use_elite; + bool use_credit_key; +} PACKED iclass_auth_req_t; + +typedef struct { + bool isOK; + uint8_t div_key[8]; + uint8_t mac[4]; +} PACKED iclass_auth_resp_t; + int CmdHFiClass(const char *Cmd); int readIclass(bool loop, bool verbose); From aaa6f25ab6e012f4ebf9997fc0b7cbc6f9dc53ba Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Mon, 13 Jul 2020 13:55:19 +0200 Subject: [PATCH 0079/1047] chg: 'trace list' - now support relative times, us/fc (@piwi) --- client/src/cmdtrace.c | 174 +++++++++++++++++++++++++++++++++--------- 1 file changed, 136 insertions(+), 38 deletions(-) diff --git a/client/src/cmdtrace.c b/client/src/cmdtrace.c index 7f854d303..f2b20ab68 100644 --- a/client/src/cmdtrace.c +++ b/client/src/cmdtrace.c @@ -31,6 +31,8 @@ static int usage_trace_list(void) { PrintAndLogEx(NORMAL, "Usage: trace list [f][c| <0|1>"); PrintAndLogEx(NORMAL, " f - show frame delay times as well"); PrintAndLogEx(NORMAL, " c - mark CRC bytes"); + PrintAndLogEx(NORMAL, " r - show relative times (gap and duration)"); + PrintAndLogEx(NORMAL, " u - display times in microseconds instead of clock cycles"); PrintAndLogEx(NORMAL, " x - show hexdump to convert to pcap(ng) or to import into Wireshark using encapsulation type \"ISO 14443\""); PrintAndLogEx(NORMAL, " syntax to use: `text2pcap -t \"%%S.\" -l 264 -n `"); PrintAndLogEx(NORMAL, " <0|1> - use data from Tracebuffer, if not set, try to collect a trace from Proxmark3 device."); @@ -179,16 +181,16 @@ static uint16_t printHexLine(uint16_t tracepos, uint16_t traceLen, uint8_t *trac return ret; } -static uint16_t printTraceLine(uint16_t tracepos, uint16_t traceLen, uint8_t *trace, uint8_t protocol, bool showWaitCycles, bool markCRCBytes) { +static uint16_t printTraceLine(uint16_t tracepos, uint16_t traceLen, uint8_t *trace, uint8_t protocol, bool showWaitCycles, bool markCRCBytes, uint32_t *prev_eot, bool use_us) { // sanity check if (is_last_record(tracepos, traceLen)) { PrintAndLogEx(DEBUG, "last record triggered. t-pos: %u t-len %u", tracepos, traceLen); return traceLen; } + uint32_t end_of_transmission_timestamp = 0; uint32_t duration; uint16_t data_len; - uint32_t EndOfTransmissionTimestamp; uint8_t topaz_reader_command[9]; char explanation[40] = {0}; uint8_t mfData[32] = {0}; @@ -203,6 +205,12 @@ static uint16_t printTraceLine(uint16_t tracepos, uint16_t traceLen, uint8_t *tr PrintAndLogEx(DEBUG, "trace pos offset %d larger than reported tracelen %d", tracepos + TRACELOG_HDR_LEN + data_len + TRACELOG_PARITY_LEN(hdr), traceLen); return traceLen; } + + // adjust for different time scales + if (protocol == ICLASS || protocol == ISO_15693) { + duration *= 32; + } + uint8_t *frame = hdr->frame; uint8_t *parityBytes = hdr->frame + data_len; @@ -266,7 +274,13 @@ static uint16_t printTraceLine(uint16_t tracepos, uint16_t traceLen, uint8_t *tr char line[18][120] = {{0}}; if (data_len == 0) { - sprintf(line[0], ""); + if (protocol == ICLASS && duration == 2048) { + sprintf(line[0], " "); + } else if (protocol == ISO_15693 && duration == 512) { + sprintf(line[0], " "); + } else { + sprintf(line[0], ""); + } return tracepos; } @@ -318,7 +332,20 @@ static uint16_t printTraceLine(uint16_t tracepos, uint16_t traceLen, uint8_t *tr // Draw the CRC column const char *crc = (crcStatus == 0 ? "!crc" : (crcStatus == 1 ? " ok " : " ")); - EndOfTransmissionTimestamp = hdr->timestamp + duration; + + uint32_t previous_end_of_transmission_timestamp = 0; + if (prev_eot) { + if (*prev_eot) { + previous_end_of_transmission_timestamp = *prev_eot; + } else { + previous_end_of_transmission_timestamp = hdr->timestamp; + } + } + + end_of_transmission_timestamp = hdr->timestamp + duration; + + if (prev_eot) + *prev_eot = end_of_transmission_timestamp; // Always annotate LEGIC read/tag if (protocol == LEGIC) @@ -376,18 +403,40 @@ static uint16_t printTraceLine(uint16_t tracepos, uint16_t traceLen, uint8_t *tr int num_lines = MIN((data_len - 1) / 18 + 1, 18); for (int j = 0; j < num_lines ; j++) { if (j == 0) { - PrintAndLogEx(NORMAL, " %10u | %10u | %s |%-72s | %s| %s", - (hdr->timestamp - first_hdr->timestamp), - (EndOfTransmissionTimestamp - first_hdr->timestamp), - (hdr->isResponse ? "Tag" : "Rdr"), - line[j], - (j == num_lines - 1) ? crc : " ", - (j == num_lines - 1) ? explanation : ""); + + uint32_t time1 = hdr->timestamp - first_hdr->timestamp; + uint32_t time2 = end_of_transmission_timestamp - first_hdr->timestamp; + if (prev_eot) { + time1 = hdr->timestamp - previous_end_of_transmission_timestamp; + time2 = duration; + } + + if (use_us) { + PrintAndLogEx(NORMAL, " %10.1f | %10.1f | %s |%-72s | %s| %s", + (float)time1/13.56, + (float)time2/13.56, + (hdr->isResponse ? "Tag" : "Rdr"), + line[j], + (j == num_lines - 1) ? crc : " ", + (j == num_lines - 1) ? explanation : "" + ); + } else { + PrintAndLogEx(NORMAL, " %10u | %10u | %s |%-72s | %s| %s", + (hdr->timestamp - first_hdr->timestamp), + (end_of_transmission_timestamp - first_hdr->timestamp), + (hdr->isResponse ? "Tag" : "Rdr"), + line[j], + (j == num_lines - 1) ? crc : " ", + (j == num_lines - 1) ? explanation : "" + ); + } + } else { PrintAndLogEx(NORMAL, " | | |%-72s | %s| %s", - line[j], - (j == num_lines - 1) ? crc : " ", - (j == num_lines - 1) ? explanation : ""); + line[j], + (j == num_lines - 1) ? crc : " ", + (j == num_lines - 1) ? explanation : "" + ); } } @@ -414,10 +463,10 @@ static uint16_t printTraceLine(uint16_t tracepos, uint16_t traceLen, uint8_t *tr tracelog_hdr_t *next_hdr = (tracelog_hdr_t *)(trace + tracepos); PrintAndLogEx(NORMAL, " %10u | %10u | %s |fdt (Frame Delay Time): %d", - (EndOfTransmissionTimestamp - first_hdr->timestamp), + (end_of_transmission_timestamp - first_hdr->timestamp), (next_hdr->timestamp - first_hdr->timestamp), " ", - (next_hdr->timestamp - EndOfTransmissionTimestamp)); + (next_hdr->timestamp - end_of_transmission_timestamp)); } return tracepos; @@ -531,10 +580,9 @@ int CmdTraceList(const char *Cmd) { clearCommandBuffer(); - bool showWaitCycles = false; - bool markCRCBytes = false; - bool showHex = false; - bool isOnline = true; + bool showWaitCycles = false, markCRCBytes = false; + bool showHex = false, isOnline = true; + bool use_us = false, use_relative = false; bool errors = false; uint8_t protocol = 0; char type[10] = {0}; @@ -567,6 +615,14 @@ int CmdTraceList(const char *Cmd) { isOnline = false; cmdp++; break; + case 'r': + use_relative = true; + cmdp++; + break; + case 'u': + use_us = true; + cmdp++; + break; default: PrintAndLogEx(WARNING, "Unknown parameter '%c'", param_getchar(Cmd, cmdp)); errors = true; @@ -626,37 +682,79 @@ int CmdTraceList(const char *Cmd) { tracepos = printHexLine(tracepos, g_traceLen, g_trace, protocol); } } else { - PrintAndLogEx(INFO, _YELLOW_("Start") " = Start of Start Bit, " _YELLOW_("End") " = End of last modulation. " _YELLOW_("Src") " = Source of Transfer"); - if (protocol == ISO_14443A || protocol == PROTO_MIFARE || protocol == MFDES || protocol == TOPAZ || protocol == LTO) - PrintAndLogEx(INFO, "ISO14443A - All times are in carrier periods (1/13.56MHz)"); - if (protocol == THINFILM) - PrintAndLogEx(INFO, "Thinfilm - All times are in carrier periods (1/13.56MHz)"); - if (protocol == ICLASS) - PrintAndLogEx(INFO, "iClass - Timings are not as accurate"); + + if (use_relative) { + PrintAndLogEx(INFO, _YELLOW_("gap") " = time between transfers. " _YELLOW_("duration") " = duration of data transfer. " _YELLOW_("src") " = source of transfer"); + } else { + PrintAndLogEx(INFO, _YELLOW_("start") " = start of start frame " _YELLOW_("end") " = end of frame. " _YELLOW_("src") " = source of transfer"); + } + + if (protocol == ISO_14443A || protocol == PROTO_MIFARE || protocol == MFDES || protocol == TOPAZ || protocol == LTO) { + if (use_us) + PrintAndLogEx(INFO, _YELLOW_("ISO14443A") " - all times are in microseconds"); + else + PrintAndLogEx(INFO, _YELLOW_("ISO14443A") " - all times are in carrier periods (1/13.56MHz)"); + } + + if (protocol == THINFILM) { + if (use_us) + PrintAndLogEx(INFO, _YELLOW_("Thinfilm") " - all times are in microseconds"); + else + PrintAndLogEx(INFO, _YELLOW_("Thinfilm") " - all times are in carrier periods (1/13.56MHz)"); + } + + if (protocol == ICLASS || protocol == ISO_15693) { + if (use_us) + PrintAndLogEx(INFO, _YELLOW_("ISO15693 / iCLASS") " - all times are in microseconds"); + else + PrintAndLogEx(INFO, _YELLOW_("ISO15693 / iCLASS") " - all times are in carrier periods (1/13.56MHz)"); + } + if (protocol == LEGIC) - PrintAndLogEx(INFO, "LEGIC - Reader Mode: Timings are in ticks (1us == 1.5ticks)\n" + PrintAndLogEx(INFO, _YELLOW_("LEGIC") " - Reader Mode: Timings are in ticks (1us == 1.5ticks)\n" " Tag Mode: Timings are in sub carrier periods (1/212 kHz == 4.7us)"); - if (protocol == ISO_14443B) - PrintAndLogEx(INFO, "ISO14443B"); // Timings ? - if (protocol == ISO_15693) - PrintAndLogEx(INFO, "ISO15693 - Timings are not as accurate"); + + if (protocol == ISO_14443B) { + if (use_us) + PrintAndLogEx(INFO, _YELLOW_("ISO14443B") " - all times are in microseconds"); + else + PrintAndLogEx(INFO, _YELLOW_("ISO14443B") " - all times are in carrier periods (1/13.56MHz)"); + } + if (protocol == ISO_7816_4) - PrintAndLogEx(INFO, "ISO7816-4 / Smartcard - Timings N/A yet"); + PrintAndLogEx(INFO, _YELLOW_("ISO7816-4 / Smartcard") " - Timings N/A"); + if (protocol == PROTO_HITAG1 || protocol == PROTO_HITAG2 || protocol == PROTO_HITAGS) - PrintAndLogEx(INFO, "Hitag1 / Hitag2 / HitagS - Timings in ETU (8us)"); - if (protocol == FELICA) - PrintAndLogEx(INFO, "ISO18092 / FeliCa - Timings are not as accurate"); + PrintAndLogEx(INFO, _YELLOW_("Hitag1 / Hitag2 / HitagS") " - Timings in ETU (8us)"); + + if (protocol == FELICA) { + if (use_us) + PrintAndLogEx(INFO, _YELLOW_("ISO18092 / FeliCa") " - all times are in microseconds"); + else + PrintAndLogEx(INFO, _YELLOW_("ISO18092 / FeliCa") " - all times are in carrier periods (1/13.56MHz)"); + } + PrintAndLogEx(NORMAL, ""); - PrintAndLogEx(NORMAL, " Start | End | Src | Data (! denotes parity error) | CRC | Annotation"); + if (use_relative) { + PrintAndLogEx(NORMAL, " Gap | Duration | Src | Data (! denotes parity error, ' denotes short bytes) | CRC | Annotation"); + } else { + PrintAndLogEx(NORMAL, " Start | End | Src | Data (! denotes parity error) | CRC | Annotation"); + } PrintAndLogEx(NORMAL, "------------+------------+-----+-------------------------------------------------------------------------+-----+--------------------"); // clean authentication data used with the mifare classic decrypt fct if (protocol == ISO_14443A || protocol == PROTO_MIFARE) ClearAuthData(); + + uint32_t previous_EOT = 0; + uint32_t *prev_EOT = NULL; + if (use_relative) { + prev_EOT = &previous_EOT; + } while (tracepos < g_traceLen) { - tracepos = printTraceLine(tracepos, g_traceLen, g_trace, protocol, showWaitCycles, markCRCBytes); + tracepos = printTraceLine(tracepos, g_traceLen, g_trace, protocol, showWaitCycles, markCRCBytes, prev_EOT, use_us); if (kbd_enter_pressed()) break; From b18a9c017ad72ff8aae5bc890957b863a32ac0a0 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Mon, 13 Jul 2020 14:30:07 +0200 Subject: [PATCH 0080/1047] fix tracelog problem with making sure uninitialized vars dont get inside _COMMON_ section --- armsrc/Makefile | 102 +++++++++++++++++++++++------------------------ bootrom/Makefile | 48 +++++++++++----------- 2 files changed, 75 insertions(+), 75 deletions(-) diff --git a/armsrc/Makefile b/armsrc/Makefile index 1bbbf2ba7..e0db02eb8 100644 --- a/armsrc/Makefile +++ b/armsrc/Makefile @@ -20,7 +20,7 @@ endif #in the next section to remove that particular feature from compilation. # NO space,TABs after the "\" sign. APP_CFLAGS = $(PLATFORM_DEFS) \ - -ffunction-sections -fdata-sections + -ffunction-sections -fdata-sections -fno-common SRC_LF = lfops.c lfsampling.c pcf7931.c lfdemod.c lfadc.c SRC_ISO15693 = iso15693.c iso15693tools.c @@ -64,9 +64,9 @@ else endif ifneq (,$(findstring WITH_EM4x50,$(APP_CFLAGS))) - SRC_EM4x50 = em4x50.c + SRC_EM4x50 = em4x50.c else - SRC_EM4x50 = + SRC_EM4x50 = endif ifneq (,$(findstring WITH_LCD,$(APP_CFLAGS))) @@ -105,7 +105,7 @@ THUMBSRC = start.c \ $(SRC_SMARTCARD) \ $(SRC_FPC) \ $(SRC_HITAG) \ - $(SRC_EM4x50) \ + $(SRC_EM4x50) \ $(SRC_SPIFFS) \ $(SRC_ISO14443a) \ $(SRC_ISO14443b) \ @@ -152,95 +152,95 @@ FPGA_COMPRESSOR = ../tools/fpga_compress/fpga_compress all: showinfo $(OBJS) showinfo: - $(info compiler version: $(shell $(CC) --version|head -n 1)) + $(info compiler version: $(shell $(CC) --version|head -n 1)) .DELETE_ON_ERROR: # version.c should be remade on every time fullimage.stage1.elf should be remade version.c: default_version.c $(OBJDIR)/fpga_version_info.o $(OBJDIR)/fpga_all.o $(THUMBOBJ) $(ARMOBJ) - $(info [-] GEN $@) - $(Q)$(SH) ../tools/mkversion.sh > $@ || $(PERL) ../tools/mkversion.pl > $@ || $(CP) $< $@ + $(info [-] GEN $@) + $(Q)$(SH) ../tools/mkversion.sh > $@ || $(PERL) ../tools/mkversion.pl > $@ || $(CP) $< $@ fpga_version_info.c: $(FPGA_BITSTREAMS) $(FPGA_COMPRESSOR) - $(info [-] GEN $@) - $(Q)$(FPGA_COMPRESSOR) -v $(filter %.bit,$^) $@ + $(info [-] GEN $@) + $(Q)$(FPGA_COMPRESSOR) -v $(filter %.bit,$^) $@ $(OBJDIR)/fpga_all.o: $(OBJDIR)/fpga_all.bit.z - $(info [-] GEN $@) - $(Q)$(OBJCOPY) -O elf32-littlearm -I binary -B arm --prefix-sections=fpga_all_bit $^ $@ + $(info [-] GEN $@) + $(Q)$(OBJCOPY) -O elf32-littlearm -I binary -B arm --prefix-sections=fpga_all_bit $^ $@ $(OBJDIR)/fpga_all.bit.z: $(FPGA_BITSTREAMS) | $(FPGA_COMPRESSOR) - $(info [-] GEN $@) + $(info [-] GEN $@) ifeq ($(Q),@) - @$(FPGA_COMPRESSOR) $(filter %.bit,$^) $@ >/dev/null + @$(FPGA_COMPRESSOR) $(filter %.bit,$^) $@ >/dev/null else - $(FPGA_COMPRESSOR) $(filter %.bit,$^) $@ + $(FPGA_COMPRESSOR) $(filter %.bit,$^) $@ endif $(FPGA_COMPRESSOR): - $(error [!] MISSING $@ => To build it, go the root of the repo and do "make $(notdir $@)") - $(error [!] MISSING $@) + $(error [!] MISSING $@ => To build it, go the root of the repo and do "make $(notdir $@)") + $(error [!] MISSING $@) $(OBJDIR)/fullimage.stage1.elf: $(VERSIONOBJ) $(OBJDIR)/fpga_all.o $(THUMBOBJ) $(ARMOBJ) - $(info [=] LD $@) - $(Q)$(CC) $(CROSS_LDFLAGS) -Wl,-T,ldscript,-Map,$(patsubst %.elf,%.map,$@) -o $@ $^ $(LIBS) + $(info [=] LD $@) + $(Q)$(CC) $(CROSS_LDFLAGS) -Wl,-T,ldscript,-Map,$(patsubst %.elf,%.map,$@) -o $@ $^ $(LIBS) $(OBJDIR)/fullimage.nodata.bin: $(OBJDIR)/fullimage.stage1.elf - $(info [-] GEN $@) - $(Q)$(OBJCOPY) -O binary -I elf32-littlearm --remove-section .data $^ $@ + $(info [-] GEN $@) + $(Q)$(OBJCOPY) -O binary -I elf32-littlearm --remove-section .data $^ $@ $(OBJDIR)/fullimage.nodata.o: $(OBJDIR)/fullimage.nodata.bin - $(info [-] GEN $@) - $(Q)$(OBJCOPY) -O elf32-littlearm -I binary -B arm --rename-section .data=stage1_image $^ $@ + $(info [-] GEN $@) + $(Q)$(OBJCOPY) -O elf32-littlearm -I binary -B arm --rename-section .data=stage1_image $^ $@ $(OBJDIR)/fullimage.data.bin: $(OBJDIR)/fullimage.stage1.elf - $(info [-] GEN $@) - $(Q)$(OBJCOPY) -O binary -I elf32-littlearm --only-section .data $^ $@ + $(info [-] GEN $@) + $(Q)$(OBJCOPY) -O binary -I elf32-littlearm --only-section .data $^ $@ $(OBJDIR)/fullimage.data.bin.z: $(OBJDIR)/fullimage.data.bin | $(FPGA_COMPRESSOR) - $(info [-] GEN $@) + $(info [-] GEN $@) ifeq ($(Q),@) - @$(FPGA_COMPRESSOR) $(filter %.bin,$^) $@ >/dev/null + @$(FPGA_COMPRESSOR) $(filter %.bin,$^) $@ >/dev/null else - $(FPGA_COMPRESSOR) $(filter %.bin,$^) $@ + $(FPGA_COMPRESSOR) $(filter %.bin,$^) $@ endif $(OBJDIR)/fullimage.data.o: $(OBJDIR)/fullimage.data.bin.z - $(info [-] GEN $@) - $(Q)$(OBJCOPY) -O elf32-littlearm -I binary -B arm --rename-section .data=compressed_data $^ $@ + $(info [-] GEN $@) + $(Q)$(OBJCOPY) -O elf32-littlearm -I binary -B arm --rename-section .data=compressed_data $^ $@ $(OBJDIR)/fullimage.elf: $(OBJDIR)/fullimage.nodata.o $(OBJDIR)/fullimage.data.o - $(info [=] LD $@) - $(Q)$(CC) $(CROSS_LDFLAGS) -Wl,-T,ldscript,-e,_osimage_entry,-Map,$(patsubst %.elf,%.map,$@) -o $@ $^ + $(info [=] LD $@) + $(Q)$(CC) $(CROSS_LDFLAGS) -Wl,-T,ldscript,-e,_osimage_entry,-Map,$(patsubst %.elf,%.map,$@) -o $@ $^ tarbin: $(OBJS) - $(info TAR $@) - $(Q)$(TAR) $(TARFLAGS) ../proxmark3-$(platform)-bin.tar $(OBJS:%=armsrc/%) $(OBJS:%.s19=armsrc/%.elf) + $(info TAR $@) + $(Q)$(TAR) $(TARFLAGS) ../proxmark3-$(platform)-bin.tar $(OBJS:%=armsrc/%) $(OBJS:%.s19=armsrc/%.elf) clean: - $(Q)$(RM) $(DEPENDENCY_FILES) - $(Q)$(RM) $(OBJDIR)$(PATHSEP)*.o - $(Q)$(RM) $(OBJDIR)$(PATHSEP)*.elf - $(Q)$(RM) $(OBJDIR)$(PATHSEP)*.s19 - $(Q)$(RM) $(OBJDIR)$(PATHSEP)*.map - $(Q)$(RM) $(OBJDIR)$(PATHSEP)*.d - $(Q)$(RM) $(OBJDIR)$(PATHSEP)*.z - $(Q)$(RM) $(OBJDIR)$(PATHSEP)*.bin - $(Q)$(RM) version.c + $(Q)$(RM) $(DEPENDENCY_FILES) + $(Q)$(RM) $(OBJDIR)$(PATHSEP)*.o + $(Q)$(RM) $(OBJDIR)$(PATHSEP)*.elf + $(Q)$(RM) $(OBJDIR)$(PATHSEP)*.s19 + $(Q)$(RM) $(OBJDIR)$(PATHSEP)*.map + $(Q)$(RM) $(OBJDIR)$(PATHSEP)*.d + $(Q)$(RM) $(OBJDIR)$(PATHSEP)*.z + $(Q)$(RM) $(OBJDIR)$(PATHSEP)*.bin + $(Q)$(RM) version.c install: all - $(info [@] Installing fullimage to $(DESTDIR)$(PREFIX)...) - $(Q)$(MKDIR) $(DESTDIR)$(PREFIX)$(PATHSEP)$(INSTALLFWRELPATH) - $(Q)$(CP) $(INSTALLFW) $(DESTDIR)$(PREFIX)$(PATHSEP)$(INSTALLFWRELPATH)$(PATHSEP)$(INSTALLFWTAG) + $(info [@] Installing fullimage to $(DESTDIR)$(PREFIX)...) + $(Q)$(MKDIR) $(DESTDIR)$(PREFIX)$(PATHSEP)$(INSTALLFWRELPATH) + $(Q)$(CP) $(INSTALLFW) $(DESTDIR)$(PREFIX)$(PATHSEP)$(INSTALLFWRELPATH)$(PATHSEP)$(INSTALLFWTAG) uninstall: - $(info [@] Uninstalling fullimage from $(DESTDIR)$(PREFIX)...) - $(Q)$(RM) $(DESTDIR)$(PREFIX)$(PATHSEP)$(INSTALLFWRELPATH)$(PATHSEP)$(INSTALLFWTAG) + $(info [@] Uninstalling fullimage from $(DESTDIR)$(PREFIX)...) + $(Q)$(RM) $(DESTDIR)$(PREFIX)$(PATHSEP)$(INSTALLFWRELPATH)$(PATHSEP)$(INSTALLFWTAG) .PHONY: all clean help install uninstall help: - @echo Multi-OS Makefile, you are running on $(DETECTED_OS) - @echo Possible targets: - @echo + all - Build the full image $(OBJDIR)/fullimage.s19 - @echo + clean - Clean $(OBJDIR) + @echo Multi-OS Makefile, you are running on $(DETECTED_OS) + @echo Possible targets: + @echo + all - Build the full image $(OBJDIR)/fullimage.s19 + @echo + clean - Clean $(OBJDIR) diff --git a/bootrom/Makefile b/bootrom/Makefile index 75a4e5ced..3607fd576 100644 --- a/bootrom/Makefile +++ b/bootrom/Makefile @@ -25,8 +25,8 @@ VERSIONSRC = version.c # stdint.h provided locally until GCC 4.5 becomes C99 compliant APP_CFLAGS = -I. -ffunction-sections -fdata-sections -# stack-protect , no-pie reduces size on Gentoo Hardened 8.2 gcc -APP_CFLAGS += -fno-stack-protector -fno-pie +# stack-protect , no-pie reduces size on Gentoo Hardened 8.2 gcc, no-common makes sure uninitalized vars doesn't end up in COMMON area +APP_CFLAGS += -fno-stack-protector -fno-pie -fno-common # Do not move this inclusion before the definition of {THUMB,ASM,ARM}SRC @@ -38,42 +38,42 @@ OBJS = $(OBJDIR)/bootrom.s19 # version.c should be remade on every compilation version.c: default_version.c - $(info [=] GEN $@) - $(Q)$(SH) ../tools/mkversion.sh > $@ || $(PERL) ../tools/mkversion.pl > $@ || $(CP) $< $@ + $(info [=] GEN $@) + $(Q)$(SH) ../tools/mkversion.sh > $@ || $(PERL) ../tools/mkversion.pl > $@ || $(CP) $< $@ all: showinfo $(OBJS) showinfo: - $(info compiler version: $(shell $(CC) --version|head -n 1)) + $(info compiler version: $(shell $(CC) --version|head -n 1)) tarbin: $(OBJS) - $(info [=] GEN $@) - $(Q)$(TAR) $(TARFLAGS) ../proxmark3-$(platform)-bin.tar $(OBJS:%=bootrom/%) $(OBJS:%.s19=bootrom/%.elf) + $(info [=] GEN $@) + $(Q)$(TAR) $(TARFLAGS) ../proxmark3-$(platform)-bin.tar $(OBJS:%=bootrom/%) $(OBJS:%.s19=bootrom/%.elf) $(OBJDIR)/bootrom.elf: $(VERSIONOBJ) $(ASMOBJ) $(ARMOBJ) $(THUMBOBJ) - $(info [=] LD $@) - $(Q)$(CC) $(CROSS_LDFLAGS) -Wl,-T,ldscript-flash,-Map,$(patsubst %.elf,%.map,$@) -o $@ $^ $(LIBS) + $(info [=] LD $@) + $(Q)$(CC) $(CROSS_LDFLAGS) -Wl,-T,ldscript-flash,-Map,$(patsubst %.elf,%.map,$@) -o $@ $^ $(LIBS) clean: - $(Q)$(RM) $(OBJDIR)$(PATHSEP)*.o - $(Q)$(RM) $(OBJDIR)$(PATHSEP)*.elf - $(Q)$(RM) $(OBJDIR)$(PATHSEP)*.s19 - $(Q)$(RM) $(OBJDIR)$(PATHSEP)*.map - $(Q)$(RM) $(OBJDIR)$(PATHSEP)*.d - $(Q)$(RM) version.c + $(Q)$(RM) $(OBJDIR)$(PATHSEP)*.o + $(Q)$(RM) $(OBJDIR)$(PATHSEP)*.elf + $(Q)$(RM) $(OBJDIR)$(PATHSEP)*.s19 + $(Q)$(RM) $(OBJDIR)$(PATHSEP)*.map + $(Q)$(RM) $(OBJDIR)$(PATHSEP)*.d + $(Q)$(RM) version.c install: all - $(info [@] Installing bootrom to $(DESTDIR)$(PREFIX)...) - $(Q)$(MKDIR) $(DESTDIR)$(PREFIX)$(PATHSEP)$(INSTALLFWRELPATH) - $(Q)$(CP) $(INSTALLFW) $(DESTDIR)$(PREFIX)$(PATHSEP)$(INSTALLFWRELPATH) + $(info [@] Installing bootrom to $(DESTDIR)$(PREFIX)...) + $(Q)$(MKDIR) $(DESTDIR)$(PREFIX)$(PATHSEP)$(INSTALLFWRELPATH) + $(Q)$(CP) $(INSTALLFW) $(DESTDIR)$(PREFIX)$(PATHSEP)$(INSTALLFWRELPATH) uninstall: - $(info [@] Uninstalling bootrom from $(DESTDIR)$(PREFIX)...) - $(Q)$(RM) $(foreach fw,$(INSTALLFW),$(DESTDIR)$(PREFIX)$(PATHSEP)$(INSTALLFWRELPATH)$(PATHSEP)$(notdir $(fw))) + $(info [@] Uninstalling bootrom from $(DESTDIR)$(PREFIX)...) + $(Q)$(RM) $(foreach fw,$(INSTALLFW),$(DESTDIR)$(PREFIX)$(PATHSEP)$(INSTALLFWRELPATH)$(PATHSEP)$(notdir $(fw))) .PHONY: all clean help install showinfo help: - @echo Multi-OS Makefile, you are running on $(DETECTED_OS) - @echo Possible targets: - @echo + all - Make $(OBJDIR)/bootrom.s19, the main bootrom - @echo + clean - Clean $(OBJDIR) + @echo Multi-OS Makefile, you are running on $(DETECTED_OS) + @echo Possible targets: + @echo + all - Make $(OBJDIR)/bootrom.s19, the main bootrom + @echo + clean - Clean $(OBJDIR) From ac29f1652969f36329af1300e5a0f9e0b01a477c Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Mon, 13 Jul 2020 15:41:39 +0200 Subject: [PATCH 0081/1047] Revert "fix tracelog problem with making sure uninitialized vars dont get inside _COMMON_ section" This reverts commit b18a9c017ad72ff8aae5bc890957b863a32ac0a0. --- armsrc/Makefile | 102 +++++++++++++++++++++++------------------------ bootrom/Makefile | 48 +++++++++++----------- 2 files changed, 75 insertions(+), 75 deletions(-) diff --git a/armsrc/Makefile b/armsrc/Makefile index e0db02eb8..1bbbf2ba7 100644 --- a/armsrc/Makefile +++ b/armsrc/Makefile @@ -20,7 +20,7 @@ endif #in the next section to remove that particular feature from compilation. # NO space,TABs after the "\" sign. APP_CFLAGS = $(PLATFORM_DEFS) \ - -ffunction-sections -fdata-sections -fno-common + -ffunction-sections -fdata-sections SRC_LF = lfops.c lfsampling.c pcf7931.c lfdemod.c lfadc.c SRC_ISO15693 = iso15693.c iso15693tools.c @@ -64,9 +64,9 @@ else endif ifneq (,$(findstring WITH_EM4x50,$(APP_CFLAGS))) - SRC_EM4x50 = em4x50.c + SRC_EM4x50 = em4x50.c else - SRC_EM4x50 = + SRC_EM4x50 = endif ifneq (,$(findstring WITH_LCD,$(APP_CFLAGS))) @@ -105,7 +105,7 @@ THUMBSRC = start.c \ $(SRC_SMARTCARD) \ $(SRC_FPC) \ $(SRC_HITAG) \ - $(SRC_EM4x50) \ + $(SRC_EM4x50) \ $(SRC_SPIFFS) \ $(SRC_ISO14443a) \ $(SRC_ISO14443b) \ @@ -152,95 +152,95 @@ FPGA_COMPRESSOR = ../tools/fpga_compress/fpga_compress all: showinfo $(OBJS) showinfo: - $(info compiler version: $(shell $(CC) --version|head -n 1)) + $(info compiler version: $(shell $(CC) --version|head -n 1)) .DELETE_ON_ERROR: # version.c should be remade on every time fullimage.stage1.elf should be remade version.c: default_version.c $(OBJDIR)/fpga_version_info.o $(OBJDIR)/fpga_all.o $(THUMBOBJ) $(ARMOBJ) - $(info [-] GEN $@) - $(Q)$(SH) ../tools/mkversion.sh > $@ || $(PERL) ../tools/mkversion.pl > $@ || $(CP) $< $@ + $(info [-] GEN $@) + $(Q)$(SH) ../tools/mkversion.sh > $@ || $(PERL) ../tools/mkversion.pl > $@ || $(CP) $< $@ fpga_version_info.c: $(FPGA_BITSTREAMS) $(FPGA_COMPRESSOR) - $(info [-] GEN $@) - $(Q)$(FPGA_COMPRESSOR) -v $(filter %.bit,$^) $@ + $(info [-] GEN $@) + $(Q)$(FPGA_COMPRESSOR) -v $(filter %.bit,$^) $@ $(OBJDIR)/fpga_all.o: $(OBJDIR)/fpga_all.bit.z - $(info [-] GEN $@) - $(Q)$(OBJCOPY) -O elf32-littlearm -I binary -B arm --prefix-sections=fpga_all_bit $^ $@ + $(info [-] GEN $@) + $(Q)$(OBJCOPY) -O elf32-littlearm -I binary -B arm --prefix-sections=fpga_all_bit $^ $@ $(OBJDIR)/fpga_all.bit.z: $(FPGA_BITSTREAMS) | $(FPGA_COMPRESSOR) - $(info [-] GEN $@) + $(info [-] GEN $@) ifeq ($(Q),@) - @$(FPGA_COMPRESSOR) $(filter %.bit,$^) $@ >/dev/null + @$(FPGA_COMPRESSOR) $(filter %.bit,$^) $@ >/dev/null else - $(FPGA_COMPRESSOR) $(filter %.bit,$^) $@ + $(FPGA_COMPRESSOR) $(filter %.bit,$^) $@ endif $(FPGA_COMPRESSOR): - $(error [!] MISSING $@ => To build it, go the root of the repo and do "make $(notdir $@)") - $(error [!] MISSING $@) + $(error [!] MISSING $@ => To build it, go the root of the repo and do "make $(notdir $@)") + $(error [!] MISSING $@) $(OBJDIR)/fullimage.stage1.elf: $(VERSIONOBJ) $(OBJDIR)/fpga_all.o $(THUMBOBJ) $(ARMOBJ) - $(info [=] LD $@) - $(Q)$(CC) $(CROSS_LDFLAGS) -Wl,-T,ldscript,-Map,$(patsubst %.elf,%.map,$@) -o $@ $^ $(LIBS) + $(info [=] LD $@) + $(Q)$(CC) $(CROSS_LDFLAGS) -Wl,-T,ldscript,-Map,$(patsubst %.elf,%.map,$@) -o $@ $^ $(LIBS) $(OBJDIR)/fullimage.nodata.bin: $(OBJDIR)/fullimage.stage1.elf - $(info [-] GEN $@) - $(Q)$(OBJCOPY) -O binary -I elf32-littlearm --remove-section .data $^ $@ + $(info [-] GEN $@) + $(Q)$(OBJCOPY) -O binary -I elf32-littlearm --remove-section .data $^ $@ $(OBJDIR)/fullimage.nodata.o: $(OBJDIR)/fullimage.nodata.bin - $(info [-] GEN $@) - $(Q)$(OBJCOPY) -O elf32-littlearm -I binary -B arm --rename-section .data=stage1_image $^ $@ + $(info [-] GEN $@) + $(Q)$(OBJCOPY) -O elf32-littlearm -I binary -B arm --rename-section .data=stage1_image $^ $@ $(OBJDIR)/fullimage.data.bin: $(OBJDIR)/fullimage.stage1.elf - $(info [-] GEN $@) - $(Q)$(OBJCOPY) -O binary -I elf32-littlearm --only-section .data $^ $@ + $(info [-] GEN $@) + $(Q)$(OBJCOPY) -O binary -I elf32-littlearm --only-section .data $^ $@ $(OBJDIR)/fullimage.data.bin.z: $(OBJDIR)/fullimage.data.bin | $(FPGA_COMPRESSOR) - $(info [-] GEN $@) + $(info [-] GEN $@) ifeq ($(Q),@) - @$(FPGA_COMPRESSOR) $(filter %.bin,$^) $@ >/dev/null + @$(FPGA_COMPRESSOR) $(filter %.bin,$^) $@ >/dev/null else - $(FPGA_COMPRESSOR) $(filter %.bin,$^) $@ + $(FPGA_COMPRESSOR) $(filter %.bin,$^) $@ endif $(OBJDIR)/fullimage.data.o: $(OBJDIR)/fullimage.data.bin.z - $(info [-] GEN $@) - $(Q)$(OBJCOPY) -O elf32-littlearm -I binary -B arm --rename-section .data=compressed_data $^ $@ + $(info [-] GEN $@) + $(Q)$(OBJCOPY) -O elf32-littlearm -I binary -B arm --rename-section .data=compressed_data $^ $@ $(OBJDIR)/fullimage.elf: $(OBJDIR)/fullimage.nodata.o $(OBJDIR)/fullimage.data.o - $(info [=] LD $@) - $(Q)$(CC) $(CROSS_LDFLAGS) -Wl,-T,ldscript,-e,_osimage_entry,-Map,$(patsubst %.elf,%.map,$@) -o $@ $^ + $(info [=] LD $@) + $(Q)$(CC) $(CROSS_LDFLAGS) -Wl,-T,ldscript,-e,_osimage_entry,-Map,$(patsubst %.elf,%.map,$@) -o $@ $^ tarbin: $(OBJS) - $(info TAR $@) - $(Q)$(TAR) $(TARFLAGS) ../proxmark3-$(platform)-bin.tar $(OBJS:%=armsrc/%) $(OBJS:%.s19=armsrc/%.elf) + $(info TAR $@) + $(Q)$(TAR) $(TARFLAGS) ../proxmark3-$(platform)-bin.tar $(OBJS:%=armsrc/%) $(OBJS:%.s19=armsrc/%.elf) clean: - $(Q)$(RM) $(DEPENDENCY_FILES) - $(Q)$(RM) $(OBJDIR)$(PATHSEP)*.o - $(Q)$(RM) $(OBJDIR)$(PATHSEP)*.elf - $(Q)$(RM) $(OBJDIR)$(PATHSEP)*.s19 - $(Q)$(RM) $(OBJDIR)$(PATHSEP)*.map - $(Q)$(RM) $(OBJDIR)$(PATHSEP)*.d - $(Q)$(RM) $(OBJDIR)$(PATHSEP)*.z - $(Q)$(RM) $(OBJDIR)$(PATHSEP)*.bin - $(Q)$(RM) version.c + $(Q)$(RM) $(DEPENDENCY_FILES) + $(Q)$(RM) $(OBJDIR)$(PATHSEP)*.o + $(Q)$(RM) $(OBJDIR)$(PATHSEP)*.elf + $(Q)$(RM) $(OBJDIR)$(PATHSEP)*.s19 + $(Q)$(RM) $(OBJDIR)$(PATHSEP)*.map + $(Q)$(RM) $(OBJDIR)$(PATHSEP)*.d + $(Q)$(RM) $(OBJDIR)$(PATHSEP)*.z + $(Q)$(RM) $(OBJDIR)$(PATHSEP)*.bin + $(Q)$(RM) version.c install: all - $(info [@] Installing fullimage to $(DESTDIR)$(PREFIX)...) - $(Q)$(MKDIR) $(DESTDIR)$(PREFIX)$(PATHSEP)$(INSTALLFWRELPATH) - $(Q)$(CP) $(INSTALLFW) $(DESTDIR)$(PREFIX)$(PATHSEP)$(INSTALLFWRELPATH)$(PATHSEP)$(INSTALLFWTAG) + $(info [@] Installing fullimage to $(DESTDIR)$(PREFIX)...) + $(Q)$(MKDIR) $(DESTDIR)$(PREFIX)$(PATHSEP)$(INSTALLFWRELPATH) + $(Q)$(CP) $(INSTALLFW) $(DESTDIR)$(PREFIX)$(PATHSEP)$(INSTALLFWRELPATH)$(PATHSEP)$(INSTALLFWTAG) uninstall: - $(info [@] Uninstalling fullimage from $(DESTDIR)$(PREFIX)...) - $(Q)$(RM) $(DESTDIR)$(PREFIX)$(PATHSEP)$(INSTALLFWRELPATH)$(PATHSEP)$(INSTALLFWTAG) + $(info [@] Uninstalling fullimage from $(DESTDIR)$(PREFIX)...) + $(Q)$(RM) $(DESTDIR)$(PREFIX)$(PATHSEP)$(INSTALLFWRELPATH)$(PATHSEP)$(INSTALLFWTAG) .PHONY: all clean help install uninstall help: - @echo Multi-OS Makefile, you are running on $(DETECTED_OS) - @echo Possible targets: - @echo + all - Build the full image $(OBJDIR)/fullimage.s19 - @echo + clean - Clean $(OBJDIR) + @echo Multi-OS Makefile, you are running on $(DETECTED_OS) + @echo Possible targets: + @echo + all - Build the full image $(OBJDIR)/fullimage.s19 + @echo + clean - Clean $(OBJDIR) diff --git a/bootrom/Makefile b/bootrom/Makefile index 3607fd576..75a4e5ced 100644 --- a/bootrom/Makefile +++ b/bootrom/Makefile @@ -25,8 +25,8 @@ VERSIONSRC = version.c # stdint.h provided locally until GCC 4.5 becomes C99 compliant APP_CFLAGS = -I. -ffunction-sections -fdata-sections -# stack-protect , no-pie reduces size on Gentoo Hardened 8.2 gcc, no-common makes sure uninitalized vars doesn't end up in COMMON area -APP_CFLAGS += -fno-stack-protector -fno-pie -fno-common +# stack-protect , no-pie reduces size on Gentoo Hardened 8.2 gcc +APP_CFLAGS += -fno-stack-protector -fno-pie # Do not move this inclusion before the definition of {THUMB,ASM,ARM}SRC @@ -38,42 +38,42 @@ OBJS = $(OBJDIR)/bootrom.s19 # version.c should be remade on every compilation version.c: default_version.c - $(info [=] GEN $@) - $(Q)$(SH) ../tools/mkversion.sh > $@ || $(PERL) ../tools/mkversion.pl > $@ || $(CP) $< $@ + $(info [=] GEN $@) + $(Q)$(SH) ../tools/mkversion.sh > $@ || $(PERL) ../tools/mkversion.pl > $@ || $(CP) $< $@ all: showinfo $(OBJS) showinfo: - $(info compiler version: $(shell $(CC) --version|head -n 1)) + $(info compiler version: $(shell $(CC) --version|head -n 1)) tarbin: $(OBJS) - $(info [=] GEN $@) - $(Q)$(TAR) $(TARFLAGS) ../proxmark3-$(platform)-bin.tar $(OBJS:%=bootrom/%) $(OBJS:%.s19=bootrom/%.elf) + $(info [=] GEN $@) + $(Q)$(TAR) $(TARFLAGS) ../proxmark3-$(platform)-bin.tar $(OBJS:%=bootrom/%) $(OBJS:%.s19=bootrom/%.elf) $(OBJDIR)/bootrom.elf: $(VERSIONOBJ) $(ASMOBJ) $(ARMOBJ) $(THUMBOBJ) - $(info [=] LD $@) - $(Q)$(CC) $(CROSS_LDFLAGS) -Wl,-T,ldscript-flash,-Map,$(patsubst %.elf,%.map,$@) -o $@ $^ $(LIBS) + $(info [=] LD $@) + $(Q)$(CC) $(CROSS_LDFLAGS) -Wl,-T,ldscript-flash,-Map,$(patsubst %.elf,%.map,$@) -o $@ $^ $(LIBS) clean: - $(Q)$(RM) $(OBJDIR)$(PATHSEP)*.o - $(Q)$(RM) $(OBJDIR)$(PATHSEP)*.elf - $(Q)$(RM) $(OBJDIR)$(PATHSEP)*.s19 - $(Q)$(RM) $(OBJDIR)$(PATHSEP)*.map - $(Q)$(RM) $(OBJDIR)$(PATHSEP)*.d - $(Q)$(RM) version.c + $(Q)$(RM) $(OBJDIR)$(PATHSEP)*.o + $(Q)$(RM) $(OBJDIR)$(PATHSEP)*.elf + $(Q)$(RM) $(OBJDIR)$(PATHSEP)*.s19 + $(Q)$(RM) $(OBJDIR)$(PATHSEP)*.map + $(Q)$(RM) $(OBJDIR)$(PATHSEP)*.d + $(Q)$(RM) version.c install: all - $(info [@] Installing bootrom to $(DESTDIR)$(PREFIX)...) - $(Q)$(MKDIR) $(DESTDIR)$(PREFIX)$(PATHSEP)$(INSTALLFWRELPATH) - $(Q)$(CP) $(INSTALLFW) $(DESTDIR)$(PREFIX)$(PATHSEP)$(INSTALLFWRELPATH) + $(info [@] Installing bootrom to $(DESTDIR)$(PREFIX)...) + $(Q)$(MKDIR) $(DESTDIR)$(PREFIX)$(PATHSEP)$(INSTALLFWRELPATH) + $(Q)$(CP) $(INSTALLFW) $(DESTDIR)$(PREFIX)$(PATHSEP)$(INSTALLFWRELPATH) uninstall: - $(info [@] Uninstalling bootrom from $(DESTDIR)$(PREFIX)...) - $(Q)$(RM) $(foreach fw,$(INSTALLFW),$(DESTDIR)$(PREFIX)$(PATHSEP)$(INSTALLFWRELPATH)$(PATHSEP)$(notdir $(fw))) + $(info [@] Uninstalling bootrom from $(DESTDIR)$(PREFIX)...) + $(Q)$(RM) $(foreach fw,$(INSTALLFW),$(DESTDIR)$(PREFIX)$(PATHSEP)$(INSTALLFWRELPATH)$(PATHSEP)$(notdir $(fw))) .PHONY: all clean help install showinfo help: - @echo Multi-OS Makefile, you are running on $(DETECTED_OS) - @echo Possible targets: - @echo + all - Make $(OBJDIR)/bootrom.s19, the main bootrom - @echo + clean - Clean $(OBJDIR) + @echo Multi-OS Makefile, you are running on $(DETECTED_OS) + @echo Possible targets: + @echo + all - Make $(OBJDIR)/bootrom.s19, the main bootrom + @echo + clean - Clean $(OBJDIR) From e19e01a6a6595c7c062c3e37ce2425ba4a2f55b6 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Mon, 13 Jul 2020 12:18:26 +0200 Subject: [PATCH 0082/1047] make sure uninitialized vars doesnt end up on COMMON_section --- armsrc/Makefile | 2 +- bootrom/Makefile | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/armsrc/Makefile b/armsrc/Makefile index 1bbbf2ba7..0db9dc8ef 100644 --- a/armsrc/Makefile +++ b/armsrc/Makefile @@ -20,7 +20,7 @@ endif #in the next section to remove that particular feature from compilation. # NO space,TABs after the "\" sign. APP_CFLAGS = $(PLATFORM_DEFS) \ - -ffunction-sections -fdata-sections + -ffunction-sections -fdata-sections -fno-common SRC_LF = lfops.c lfsampling.c pcf7931.c lfdemod.c lfadc.c SRC_ISO15693 = iso15693.c iso15693tools.c diff --git a/bootrom/Makefile b/bootrom/Makefile index 75a4e5ced..9a0359d2f 100644 --- a/bootrom/Makefile +++ b/bootrom/Makefile @@ -25,8 +25,8 @@ VERSIONSRC = version.c # stdint.h provided locally until GCC 4.5 becomes C99 compliant APP_CFLAGS = -I. -ffunction-sections -fdata-sections -# stack-protect , no-pie reduces size on Gentoo Hardened 8.2 gcc -APP_CFLAGS += -fno-stack-protector -fno-pie +# stack-protect , no-pie reduces size on Gentoo Hardened 8.2 gcc, no-common makes sure uninitalized vars doesn't end up in COMMON area +APP_CFLAGS += -fno-stack-protector -fno-pie -fno-common # Do not move this inclusion before the definition of {THUMB,ASM,ARM}SRC From 3a39a9b64eb8dc19044498c17617c97976c6831c Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Mon, 13 Jul 2020 16:21:29 +0200 Subject: [PATCH 0083/1047] rev temporarily -fno-common as we can't have shorter BigBuf. Mem allocs will need to be sorted out. --- armsrc/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/armsrc/Makefile b/armsrc/Makefile index 0db9dc8ef..1bbbf2ba7 100644 --- a/armsrc/Makefile +++ b/armsrc/Makefile @@ -20,7 +20,7 @@ endif #in the next section to remove that particular feature from compilation. # NO space,TABs after the "\" sign. APP_CFLAGS = $(PLATFORM_DEFS) \ - -ffunction-sections -fdata-sections -fno-common + -ffunction-sections -fdata-sections SRC_LF = lfops.c lfsampling.c pcf7931.c lfdemod.c lfadc.c SRC_ISO15693 = iso15693.c iso15693tools.c From a6c240fe3be87e4494683b6528e498263c60c23f Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Mon, 13 Jul 2020 17:56:19 +0200 Subject: [PATCH 0084/1047] tosend into bigbuff --- armsrc/BigBuf.c | 44 +++++++++++++++++++++ armsrc/BigBuf.h | 14 +++++++ armsrc/appmain.c | 83 +++++++++++++-------------------------- armsrc/hfsnoop.c | 9 +++-- armsrc/iclass.c | 98 +++++++++++++++++++++++------------------------ armsrc/iso15693.c | 88 +++++++++++++++++++++++------------------- armsrc/thinfilm.c | 16 +++++--- 7 files changed, 195 insertions(+), 157 deletions(-) diff --git a/armsrc/BigBuf.c b/armsrc/BigBuf.c index 8756e8171..9b3733d6f 100644 --- a/armsrc/BigBuf.c +++ b/armsrc/BigBuf.c @@ -227,3 +227,47 @@ uint8_t emlSet(uint8_t *data, uint32_t offset, uint32_t length) { Dbprintf("Error, trying to set memory outside of bounds! %d > %d", (offset + length), CARD_MEMORY_SIZE); return 1; } + + +//============================================================================= +// The ToSend buffer. +// A buffer where we can queue things up to be sent through the FPGA, for +// any purpose (fake tag, as reader, whatever). We go MSB first, since that +// is the order in which they go out on the wire. +//============================================================================= +static tosend_t toSend = { + .max = -1, + .bit = 8, + .buf = NULL +}; + +// get the address of the ToSend buffer. Allocate part of Bigbuf for it, if not yet done +tosend_t *get_tosend(void) { + + if (toSend.buf == NULL) + toSend.buf = BigBuf_malloc(TOSEND_BUFFER_SIZE); + + return &toSend; +} + +void tosend_reset(void) { + toSend.max = -1; + toSend.bit = 8; +} + +void tosend_stuffbit(int b) { + if (toSend.bit >= 8) { + toSend.max++; + toSend.buf[toSend.max] = 0; + toSend.bit = 0; + } + + if (b) + toSend.buf[ toSend.max] |= (1 << (7 - toSend.bit)); + + toSend.bit++; + + if (toSend.max >= TOSEND_BUFFER_SIZE) { + toSend.bit = 0; + } +} diff --git a/armsrc/BigBuf.h b/armsrc/BigBuf.h index b89b94242..33c454226 100644 --- a/armsrc/BigBuf.h +++ b/armsrc/BigBuf.h @@ -21,6 +21,9 @@ #define CARD_MEMORY_SIZE 4096 #define DMA_BUFFER_SIZE 128 +// 8 data bits and 1 parity bit per payload byte, 1 correction bit, 1 SOC bit, 2 EOC bits +#define TOSEND_BUFFER_SIZE (9 * MAX_FRAME_SIZE + 1 + 1 + 2) + uint8_t *BigBuf_get_addr(void); uint32_t BigBuf_get_size(void); uint8_t *BigBuf_get_EM_addr(void); @@ -42,4 +45,15 @@ bool get_tracing(void); bool RAMFUNC LogTrace(const uint8_t *btBytes, uint16_t iLen, uint32_t timestamp_start, uint32_t timestamp_end, uint8_t *parity, bool readerToTag); uint8_t emlSet(uint8_t *data, uint32_t offset, uint32_t length); + +typedef struct { + int max; + int bit; + uint8_t *buf; +} tosend_t; + +tosend_t *get_tosend(void); +void tosend_reset(void); +void tosend_stuffbit(int b); + #endif /* __BIGBUF_H */ diff --git a/armsrc/appmain.c b/armsrc/appmain.c index e35dc8ae2..094982a3c 100644 --- a/armsrc/appmain.c +++ b/armsrc/appmain.c @@ -62,17 +62,6 @@ #include "spiffs.h" #endif -//============================================================================= -// A buffer where we can queue things up to be sent through the FPGA, for -// any purpose (fake tag, as reader, whatever). We go MSB first, since that -// is the order in which they go out on the wire. -//============================================================================= - -#define TOSEND_BUFFER_SIZE (9*MAX_FRAME_SIZE + 1 + 1 + 2) // 8 data bits and 1 parity bit per payload byte, 1 correction bit, 1 SOC bit, 2 EOC bits -uint8_t ToSend[TOSEND_BUFFER_SIZE] = {0}; -int ToSendMax = -1; -static int ToSendBit; - extern uint32_t _stack_start, _stack_end; struct common_area common_area __attribute__((section(".commonarea"))); static int button_status = BUTTON_NO_CLICK; @@ -84,29 +73,6 @@ inline void send_wtx(uint16_t wtx) { } } -void ToSendReset(void) { - ToSendMax = -1; - ToSendBit = 8; -} - -void ToSendStuffBit(int b) { - if (ToSendBit >= 8) { - ToSendMax++; - ToSend[ToSendMax] = 0; - ToSendBit = 0; - } - - if (b) - ToSend[ToSendMax] |= (1 << (7 - ToSendBit)); - - ToSendBit++; - - if (ToSendMax >= sizeof(ToSend)) { - ToSendBit = 0; - DbpString("ToSendStuffBit overflowed!"); - } -} - //----------------------------------------------------------------------------- // Read an ADC channel and block till it completes, then return the result // in ADC units (0 to 1023). Also a routine to sum up a number of samples and @@ -326,6 +292,28 @@ static void TimingIntervalAcquisition(void) { StartTickCount(); } +static void print_debug_level(void) { + char dbglvlstr[20] = {0}; + switch(DBGLEVEL) { + case DBG_NONE: + sprintf(dbglvlstr, "NONE"); + break; + case DBG_ERROR: + sprintf(dbglvlstr, "ERROR"); + break; + case DBG_INFO: + sprintf(dbglvlstr, "INFO"); + break; + case DBG_DEBUG: + sprintf(dbglvlstr, "DEBUG"); + break; + case DBG_EXTENDED: + sprintf(dbglvlstr, "EXTENDED"); + break; + } + Dbprintf(" DBGLEVEL................%d ( " _YELLOW_("%s")" )", DBGLEVEL, dbglvlstr); +} + // measure the Connection Speed by sending SpeedTestBufferSize bytes to client and measuring the elapsed time. // Note: this mimics GetFromBigbuf(), i.e. we have the overhead of the PacketCommandNG structure included. static void printConnSpeed(void) { @@ -372,29 +360,10 @@ static void SendStatus(void) { DbpString(_CYAN_("Various")); print_stack_usage(); - - char dbglvlstr[20] = {0}; - switch(DBGLEVEL) { - case DBG_NONE: - sprintf(dbglvlstr, "NONE"); - break; - case DBG_ERROR: - sprintf(dbglvlstr, "ERROR"); - break; - case DBG_INFO: - sprintf(dbglvlstr, "INFO"); - break; - case DBG_DEBUG: - sprintf(dbglvlstr, "DEBUG"); - break; - case DBG_EXTENDED: - sprintf(dbglvlstr, "EXTENDED"); - break; - } - Dbprintf(" DBGLEVEL................%d ( " _YELLOW_("%s")" )", DBGLEVEL, dbglvlstr); + print_debug_level(); - Dbprintf(" ToSendMax...............%d", ToSendMax); - Dbprintf(" ToSendBit...............%d", ToSendBit); + tosend_t *ts = get_tosend(); + Dbprintf(" ToSendMax...............%d", ts->max ); Dbprintf(" ToSend BUFFERSIZE.......%d", TOSEND_BUFFER_SIZE); while ((AT91C_BASE_PMC->PMC_MCFR & AT91C_CKGR_MAINRDY) == 0); // Wait for MAINF value to become available... uint16_t mainf = AT91C_BASE_PMC->PMC_MCFR & AT91C_CKGR_MAINF; // Get # main clocks within 16 slow clocks @@ -752,7 +721,7 @@ static void PacketReceived(PacketCommandNG *packet) { // emulator case CMD_SET_DBGMODE: { DBGLEVEL = packet->data.asBytes[0]; - Dbprintf("Debug level: %d", DBGLEVEL); + print_debug_level(); reply_ng(CMD_SET_DBGMODE, PM3_SUCCESS, NULL, 0); break; } diff --git a/armsrc/hfsnoop.c b/armsrc/hfsnoop.c index 1b87d857a..ab2517187 100644 --- a/armsrc/hfsnoop.c +++ b/armsrc/hfsnoop.c @@ -114,8 +114,9 @@ int HfSniff(uint32_t samplesToSkip, uint32_t triggersToSkip, uint16_t *len) { } void HfPlotDownload(void) { - uint8_t *buf = ToSend; - uint8_t *this_buf = buf; + + tosend_t *ts = get_tosend(); + uint8_t *this_buf = ts->buf; FpgaDownloadAndGo(FPGA_BITSTREAM_HF); @@ -124,7 +125,7 @@ void HfPlotDownload(void) { AT91C_BASE_PDC_SSC->PDC_PTCR = AT91C_PDC_RXTDIS; // Disable DMA Transfer AT91C_BASE_PDC_SSC->PDC_RPR = (uint32_t) this_buf; // start transfer to this memory address AT91C_BASE_PDC_SSC->PDC_RCR = PM3_CMD_DATA_SIZE; // transfer this many samples - buf[0] = (uint8_t)AT91C_BASE_SSC->SSC_RHR; // clear receive register + ts->buf[0] = (uint8_t)AT91C_BASE_SSC->SSC_RHR; // clear receive register AT91C_BASE_PDC_SSC->PDC_PTCR = AT91C_PDC_RXTEN; // Start DMA transfer FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_GET_TRACE); // let FPGA transfer its internal Block-RAM @@ -132,7 +133,7 @@ void HfPlotDownload(void) { LED_B_ON(); for (size_t i = 0; i < FPGA_TRACE_SIZE; i += PM3_CMD_DATA_SIZE) { // prepare next DMA transfer: - uint8_t *next_buf = buf + ((i + PM3_CMD_DATA_SIZE) % (2 * PM3_CMD_DATA_SIZE)); + uint8_t *next_buf = ts->buf + ((i + PM3_CMD_DATA_SIZE) % (2 * PM3_CMD_DATA_SIZE)); AT91C_BASE_PDC_SSC->PDC_RNPR = (uint32_t)next_buf; AT91C_BASE_PDC_SSC->PDC_RNCR = PM3_CMD_DATA_SIZE; diff --git a/armsrc/iclass.c b/armsrc/iclass.c index 58cf36a0d..d180aa6e0 100644 --- a/armsrc/iclass.c +++ b/armsrc/iclass.c @@ -90,9 +90,10 @@ static void rotateCSN(uint8_t *original_csn, uint8_t *rotated_csn) { // Encode SOF only static void CodeIClassTagSOF(void) { - ToSendReset(); - ToSend[++ToSendMax] = 0x1D; - ToSendMax++; + tosend_reset(); + tosend_t *ts = get_tosend(); + ts->buf[++ts->max] = 0x1D; + ts->max++; } @@ -393,42 +394,43 @@ int doIClassSimulation(int simulationMode, uint8_t *reader_mac_buf) { uint8_t *receivedCmd = BigBuf_malloc(MAX_FRAME_SIZE); // Prepare card messages - ToSendMax = 0; + tosend_t *ts = get_tosend(); + ts->max = 0; // First card answer: SOF CodeIClassTagSOF(); - memcpy(resp_sof, ToSend, ToSendMax); - resp_sof_len = ToSendMax; + memcpy(resp_sof, ts->buf, ts->max); + resp_sof_len = ts->max; // Anticollision CSN CodeIso15693AsTag(anticoll_data, sizeof(anticoll_data)); - memcpy(resp_anticoll, ToSend, ToSendMax); - resp_anticoll_len = ToSendMax; + memcpy(resp_anticoll, ts->buf, ts->max); + resp_anticoll_len = ts->max; // CSN (block 0) CodeIso15693AsTag(csn_data, sizeof(csn_data)); - memcpy(resp_csn, ToSend, ToSendMax); - resp_csn_len = ToSendMax; + memcpy(resp_csn, ts->buf, ts->max); + resp_csn_len = ts->max; // Configuration (block 1) CodeIso15693AsTag(conf_block, sizeof(conf_block)); - memcpy(resp_conf, ToSend, ToSendMax); - resp_conf_len = ToSendMax; + memcpy(resp_conf, ts->buf, ts->max); + resp_conf_len = ts->max; // e-Purse (block 2) CodeIso15693AsTag(card_challenge_data, sizeof(card_challenge_data)); - memcpy(resp_cc, ToSend, ToSendMax); - resp_cc_len = ToSendMax; + memcpy(resp_cc, ts->buf, ts->max); + resp_cc_len = ts->max; // Kd, Kc (blocks 3 and 4) CodeIso15693AsTag(ff_data, sizeof(ff_data)); - memcpy(resp_ff, ToSend, ToSendMax); - resp_ff_len = ToSendMax; + memcpy(resp_ff, ts->buf, ts->max); + resp_ff_len = ts->max; // Application Issuer Area (block 5) CodeIso15693AsTag(aia_data, sizeof(aia_data)); - memcpy(resp_aia, ToSend, ToSendMax); - resp_aia_len = ToSendMax; + memcpy(resp_aia, ts->buf, ts->max); + resp_aia_len = ts->max; //This is used for responding to READ-block commands or other data which is dynamically generated //First the 'trace'-data, not encoded for FPGA @@ -542,8 +544,8 @@ int doIClassSimulation(int simulationMode, uint8_t *reader_mac_buf) { trace_data = data_generic_trace; trace_data_size = 10; CodeIso15693AsTag(trace_data, trace_data_size); - memcpy(modulated_response, ToSend, ToSendMax); - modulated_response_size = ToSendMax; + memcpy(modulated_response, ts->buf, ts->max); + modulated_response_size = ts->max; goto send; } break; @@ -586,9 +588,9 @@ int doIClassSimulation(int simulationMode, uint8_t *reader_mac_buf) { trace_data = data_generic_trace; trace_data_size = 4; CodeIso15693AsTag(trace_data, trace_data_size); - memcpy(data_response, ToSend, ToSendMax); + memcpy(data_response, ts->buf, ts->max); modulated_response = data_response; - modulated_response_size = ToSendMax; + modulated_response_size = ts->max; } else { // Not fullsim, we don't respond // We do not know what to answer, so lets keep quiet @@ -636,8 +638,8 @@ int doIClassSimulation(int simulationMode, uint8_t *reader_mac_buf) { trace_data = data_generic_trace; trace_data_size = 34; CodeIso15693AsTag(trace_data, trace_data_size); - memcpy(modulated_response, ToSend, ToSendMax); - modulated_response_size = ToSendMax; + memcpy(modulated_response, ts->buf, ts->max); + modulated_response_size = ts->max; goto send; } @@ -650,8 +652,8 @@ int doIClassSimulation(int simulationMode, uint8_t *reader_mac_buf) { if (block == 2) { // update e-purse memcpy(card_challenge_data, receivedCmd + 2, 8); CodeIso15693AsTag(card_challenge_data, sizeof(card_challenge_data)); - memcpy(resp_cc, ToSend, ToSendMax); - resp_cc_len = ToSendMax; + memcpy(resp_cc, ts->buf, ts->max); + resp_cc_len = ts->max; cipher_state_KD[current_page] = opt_doTagMAC_1(card_challenge_data, diversified_kd); cipher_state_KC[current_page] = opt_doTagMAC_1(card_challenge_data, diversified_kc); @@ -684,9 +686,9 @@ int doIClassSimulation(int simulationMode, uint8_t *reader_mac_buf) { trace_data = data_generic_trace; trace_data_size = 10; CodeIso15693AsTag(trace_data, trace_data_size); - memcpy(data_response, ToSend, ToSendMax); + memcpy(data_response, ts->buf, ts->max); modulated_response = data_response; - modulated_response_size = ToSendMax; + modulated_response_size = ts->max; } goto send; @@ -714,9 +716,9 @@ int doIClassSimulation(int simulationMode, uint8_t *reader_mac_buf) { trace_data_size = 10; CodeIso15693AsTag(trace_data, trace_data_size); - memcpy(data_response, ToSend, ToSendMax); + memcpy(data_response, ts->buf, ts->max); modulated_response = data_response; - modulated_response_size = ToSendMax; + modulated_response_size = ts->max; } } @@ -752,8 +754,9 @@ send: // THE READER CODE static void iclass_send_as_reader(uint8_t *frame, int len, uint32_t *start_time) { CodeIso15693AsReader(frame, len); - TransmitTo15693Tag(ToSend, ToSendMax, start_time); - uint32_t end_time = *start_time + (32 * ((8 * ToSendMax) - 4)); // substract the 4 padding bits after EOF + tosend_t *ts = get_tosend(); + TransmitTo15693Tag(ts->buf, ts->max, start_time); + uint32_t end_time = *start_time + (32 * ((8 * ts->max) - 4)); // substract the 4 padding bits after EOF LogTrace(frame, len, (*start_time * 4), (end_time * 4), NULL, true); } @@ -770,7 +773,7 @@ static bool iclass_send_cmd_with_retries(uint8_t* cmd, size_t cmdsize, uint8_t* if (expected_size == GetIso15693AnswerFromTag(resp, max_resp_size, timeout, eof_time)) { return true; } - start_time = *eof_time + DELAY_ICLASS_VICC_TO_VCD_READER; +// start_time = *eof_time + DELAY_ICLASS_VICC_TO_VCD_READER; } return false; } @@ -796,24 +799,19 @@ static bool select_iclass_tag(uint8_t *card_data, bool use_credit_key, uint32_t if (use_credit_key) read_check_cc[0] = 0x10 | ICLASS_CMD_READCHECK; - - set_tracing(true); - int len; - uint32_t start_time; - uint8_t tries = 10; - do { - // wakeup - start_time = GetCountSspClk(); - iclass_send_as_reader(act_all, 1, &start_time); - len = GetIso15693AnswerFromTag(resp, sizeof(resp), ICLASS_READER_TIMEOUT_ACTALL, eof_time); - if (len >= 0) { - break; - } else if (len == -2) { - return false; - } - } while (tries-- > 0); + // wakeup + uint32_t start_time = GetCountSspClk(); + iclass_send_as_reader(act_all, 1, &start_time); + int len = GetIso15693AnswerFromTag(resp, sizeof(resp), ICLASS_READER_TIMEOUT_ACTALL, eof_time); + if (len < 0) + return false; +/* + bool ok = iclass_send_cmd_with_retries(act_all, 1, resp, sizeof(resp), 1, 5, start_time, ICLASS_READER_TIMEOUT_ACTALL, eof_time); + if (ok == false) + return false; +*/ // send Identify start_time = *eof_time + DELAY_ICLASS_VICC_TO_VCD_READER; iclass_send_as_reader(identify, 1, &start_time); @@ -881,8 +879,6 @@ void ReaderIClass(uint8_t flags) { Iso15693InitReader(); } - set_tracing(true); - if ((flags & FLAG_ICLASS_READER_CLEARTRACE) == FLAG_ICLASS_READER_CLEARTRACE) { clear_trace(); } diff --git a/armsrc/iso15693.c b/armsrc/iso15693.c index 7c018554c..82640d0cb 100644 --- a/armsrc/iso15693.c +++ b/armsrc/iso15693.c @@ -118,10 +118,11 @@ static void BuildInventoryResponse(uint8_t *uid); // n ... length of data void CodeIso15693AsReader(uint8_t *cmd, int n) { - ToSendReset(); + tosend_reset(); + tosend_t *ts = get_tosend(); // SOF for 1of4 - ToSend[++ToSendMax] = 0x84; //10000100 + ts->buf[++ts->max] = 0x84; //10000100 // data for (int i = 0; i < n; i++) { @@ -129,31 +130,32 @@ void CodeIso15693AsReader(uint8_t *cmd, int n) { uint8_t these = (cmd[i] >> j) & 0x03; switch(these) { case 0: - ToSend[++ToSendMax] = 0x40; //01000000 + ts->buf[++ts->max] = 0x40; //01000000 break; case 1: - ToSend[++ToSendMax] = 0x10; //00010000 + ts->buf[++ts->max] = 0x10; //00010000 break; case 2: - ToSend[++ToSendMax] = 0x04; //00000100 + ts->buf[++ts->max] = 0x04; //00000100 break; case 3: - ToSend[++ToSendMax] = 0x01; //00000001 + ts->buf[++ts->max] = 0x01; //00000001 break; } } } // EOF - ToSend[++ToSendMax] = 0x20; //0010 + 0000 padding - ToSendMax++; + ts->buf[++ts->max] = 0x20; //0010 + 0000 padding + ts->max++; } // Encode EOF only static void CodeIso15693AsReaderEOF(void) { - ToSendReset(); - ToSend[++ToSendMax] = 0x20; - ToSendMax++; + tosend_reset(); + tosend_t *ts = get_tosend(); + ts->buf[++ts->max] = 0x20; + ts->max++; } @@ -162,27 +164,28 @@ static void CodeIso15693AsReaderEOF(void) { // is designed for more robust communication over longer distances static void CodeIso15693AsReader256(uint8_t *cmd, int n) { - ToSendReset(); - + tosend_reset(); + tosend_t *ts = get_tosend(); + // SOF for 1of256 - ToSend[++ToSendMax] = 0x81; //10000001 + ts->buf[++ts->max] = 0x81; //10000001 // data for(int i = 0; i < n; i++) { for (int j = 0; j <= 255; j++) { if (cmd[i] == j) { - ToSendStuffBit(0); - ToSendStuffBit(1); + tosend_stuffbit(0); + tosend_stuffbit(1); } else { - ToSendStuffBit(0); - ToSendStuffBit(0); + tosend_stuffbit(0); + tosend_stuffbit(0); } } } // EOF - ToSend[++ToSendMax] = 0x20; //0010 + 0000 padding - ToSendMax++; + ts->buf[++ts->max] = 0x20; //0010 + 0000 padding + ts->max++; } static const uint8_t encode_4bits[16] = { @@ -219,22 +222,22 @@ void CodeIso15693AsTag(uint8_t *cmd, size_t len) { * A logic 0 is 10 * * */ - - ToSendReset(); + tosend_reset(); + tosend_t *ts = get_tosend(); // SOF - ToSend[++ToSendMax] = 0x1D; // 00011101 + ts->buf[++ts->max] = 0x1D; // 00011101 // data for (int i = 0; i < len; i++) { - ToSend[++ToSendMax] = encode_4bits[cmd[i] & 0xF]; - ToSend[++ToSendMax] = encode_4bits[cmd[i] >> 4]; + ts->buf[++ts->max] = encode_4bits[cmd[i] & 0xF]; + ts->buf[++ts->max] = encode_4bits[cmd[i] >> 4]; } // EOF - ToSend[++ToSendMax] = 0xB8; // 10111000 + ts->buf[++ts->max] = 0xB8; // 10111000 - ToSendMax++; + ts->max++; } // Transmit the command (to the tag) that was placed in cmd[]. @@ -617,9 +620,7 @@ static void DecodeTagReset(DecodeTag_t *DecodeTag) { */ int GetIso15693AnswerFromTag(uint8_t* response, uint16_t max_len, uint16_t timeout, uint32_t *eof_time) { - int samples = 0; - int ret = 0; - + int samples = 0, ret = 0; uint16_t dmaBuf[ISO15693_DMA_BUFFER_SIZE]; // the Decoder data structure @@ -641,7 +642,8 @@ int GetIso15693AnswerFromTag(uint8_t* response, uint16_t max_len, uint16_t timeo for(;;) { uint16_t behindBy = ((uint16_t*)AT91C_BASE_PDC_SSC->PDC_RPR - upTo) & (ISO15693_DMA_BUFFER_SIZE-1); - if (behindBy == 0) continue; + if (behindBy == 0) + continue; samples++; if (samples == 1) { @@ -702,7 +704,7 @@ int GetIso15693AnswerFromTag(uint8_t* response, uint16_t max_len, uint16_t timeo Dbprintf("timing: sof_time = %d, eof_time = %d", (sof_time * 4), (*eof_time * 4)); } - if (ret < 0) { + if (ret == -1) { return ret; } @@ -1115,8 +1117,10 @@ void AcquireRawAdcSamplesIso15693(void) { SpinDelay(100); // Now send the command + tosend_t *ts = get_tosend(); + uint32_t start_time = 0; - TransmitTo15693Tag(ToSend, ToSendMax, &start_time); + TransmitTo15693Tag(ts->buf, ts->max, &start_time); // wait for last transfer to complete while (!(AT91C_BASE_SSC->SSC_SR & AT91C_SSC_TXEMPTY)) ; @@ -1321,11 +1325,11 @@ void Iso15693InitReader(void) { FpgaSetupSsc(FPGA_MAJOR_MODE_HF_READER); SetAdcMuxFor(GPIO_MUXSEL_HIPKD); + set_tracing(true); + // give tags some time to energize SpinDelay(200); - set_tracing(true); - StartCountSspClk(); } @@ -1396,8 +1400,9 @@ int SendDataTag(uint8_t *send, int sendlen, bool init, bool speed_fast, uint8_t CodeIso15693AsReader256(send, sendlen); } - TransmitTo15693Tag(ToSend, ToSendMax, &start_time); - uint32_t end_time = start_time + 32 * (8 * ToSendMax -4); // substract the 4 padding bits after EOF + tosend_t *ts = get_tosend(); + TransmitTo15693Tag(ts->buf, ts->max, &start_time); + uint32_t end_time = start_time + 32 * (8 * ts->max - 4); // substract the 4 padding bits after EOF LogTrace(send, sendlen, (start_time * 4), (end_time * 4), NULL, true); int res = 0; @@ -1410,8 +1415,9 @@ int SendDataTag(uint8_t *send, int sendlen, bool init, bool speed_fast, uint8_t int SendDataTagEOF(uint8_t *recv, uint16_t max_recv_len, uint32_t start_time, uint16_t timeout, uint32_t *eof_time) { CodeIso15693AsReaderEOF(); - TransmitTo15693Tag(ToSend, ToSendMax, &start_time); - uint32_t end_time = start_time + 32 * (8 * ToSendMax - 4); // substract the 4 padding bits after EOF + tosend_t *ts = get_tosend(); + TransmitTo15693Tag(ts->buf, ts->max, &start_time); + uint32_t end_time = start_time + 32 * (8 * ts->max - 4); // substract the 4 padding bits after EOF LogTrace(NULL, 0, (start_time * 4), (end_time * 4), NULL, true); int res = 0; @@ -1591,6 +1597,8 @@ void SimTagIso15693(uint8_t *uid) { // not so obvious, but in the call to BuildInventoryResponse, the command is copied to the global ToSend buffer used below. BuildInventoryResponse(uid); + tosend_t *ts = get_tosend(); + while (!BUTTON_PRESS()) { WDT_HIT(); @@ -1602,7 +1610,7 @@ void SimTagIso15693(uint8_t *uid) { if ((cmd_len >= 5) && (cmd[0] & ISO15_REQ_INVENTORY) && (cmd[1] == ISO15_CMD_INVENTORY)) { // TODO: check more flags bool slow = !(cmd[0] & ISO15_REQ_DATARATE_HIGH); start_time = eof_time + DELAY_ISO15693_VCD_TO_VICC_SIM; - TransmitTo15693Reader(ToSend, ToSendMax, &start_time, 0, slow); + TransmitTo15693Reader(ts->buf, ts->max, &start_time, 0, slow); } if (DBGLEVEL >= DBG_EXTENDED) { diff --git a/armsrc/thinfilm.c b/armsrc/thinfilm.c index 16c91c8bf..dcc2ff36f 100644 --- a/armsrc/thinfilm.c +++ b/armsrc/thinfilm.c @@ -30,7 +30,6 @@ void ReadThinFilm(void) { clear_trace(); - set_tracing(true); iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN); @@ -60,15 +59,19 @@ static uint16_t ReadReaderField(void) { } static void CodeThinfilmAsTag(const uint8_t *cmd, uint16_t len) { - ToSendReset(); + + tosend_reset(); + + tosend_t *ts = get_tosend(); + for (uint16_t i = 0; i < len; i++) { uint8_t b = cmd[i]; for (uint8_t j = 0; j < 8; j++) { - ToSend[++ToSendMax] = (b & 0x80) ? SEC_D : SEC_E; + ts->buf[++ts->max] = (b & 0x80) ? SEC_D : SEC_E; b <<= 1; } } - ToSendMax++; + ts->max++; } static int EmSendCmdThinfilmRaw(uint8_t *resp, uint16_t respLen) { @@ -132,6 +135,8 @@ void SimulateThinFilm(uint8_t *data, size_t len) { uint16_t hf_baseline = ReadReaderField(); + tosend_t *ts = get_tosend(); + // Start the timer StartCountSspClk(); @@ -147,7 +152,8 @@ void SimulateThinFilm(uint8_t *data, size_t len) { if (hf_av < hf_baseline) hf_baseline = hf_av; if (hf_av > hf_baseline + 10) { - EmSendCmdThinfilmRaw(ToSend, ToSendMax); + + EmSendCmdThinfilmRaw(ts->buf, ts->max); if (!reader_detected) { LED_B_ON(); //Dbprintf("Reader detected, start beaming data"); From d6f65f8578c22717437ed3ec5039998d9d90cbee Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Mon, 13 Jul 2020 18:14:34 +0200 Subject: [PATCH 0085/1047] tosend into bigbuff --- armsrc/iso14443a.c | 156 ++++++++++++++++++++++++--------------------- armsrc/iso14443b.c | 79 +++++++++++++---------- 2 files changed, 129 insertions(+), 106 deletions(-) diff --git a/armsrc/iso14443a.c b/armsrc/iso14443a.c index 0dae3c872..bac3008f9 100644 --- a/armsrc/iso14443a.c +++ b/armsrc/iso14443a.c @@ -729,62 +729,61 @@ void RAMFUNC SniffIso14443a(uint8_t param) { //----------------------------------------------------------------------------- static void CodeIso14443aAsTagPar(const uint8_t *cmd, uint16_t len, uint8_t *par, bool collision) { - //uint8_t localCol = 0; - ToSendReset(); + tosend_reset(); + + tosend_t *ts = get_tosend(); // Correction bit, might be removed when not needed - ToSendStuffBit(0); - ToSendStuffBit(0); - ToSendStuffBit(0); - ToSendStuffBit(0); - ToSendStuffBit(1); // <----- - ToSendStuffBit(0); - ToSendStuffBit(0); - ToSendStuffBit(0); + tosend_stuffbit(0); + tosend_stuffbit(0); + tosend_stuffbit(0); + tosend_stuffbit(0); + tosend_stuffbit(1); // <----- + tosend_stuffbit(0); + tosend_stuffbit(0); + tosend_stuffbit(0); // Send startbit - ToSend[++ToSendMax] = SEC_D; - LastProxToAirDuration = 8 * ToSendMax - 4; + ts->buf[++ts->max] = SEC_D; + LastProxToAirDuration = 8 * ts->max - 4; for (uint16_t i = 0; i < len; i++) { uint8_t b = cmd[i]; // Data bits for (uint16_t j = 0; j < 8; j++) { - //if (collision && (localCol >= colpos)){ if (collision) { - ToSend[++ToSendMax] = SEC_COLL; - //localCol++; + ts->buf[++ts->max] = SEC_COLL; } else { if (b & 1) { - ToSend[++ToSendMax] = SEC_D; + ts->buf[++ts->max] = SEC_D; } else { - ToSend[++ToSendMax] = SEC_E; + ts->buf[++ts->max] = SEC_E; } b >>= 1; } } if (collision) { - ToSend[++ToSendMax] = SEC_COLL; - LastProxToAirDuration = 8 * ToSendMax; + ts->buf[++ts->max] = SEC_COLL; + LastProxToAirDuration = 8 * ts->max; } else { // Get the parity bit if (par[i >> 3] & (0x80 >> (i & 0x0007))) { - ToSend[++ToSendMax] = SEC_D; - LastProxToAirDuration = 8 * ToSendMax - 4; + ts->buf[++ts->max] = SEC_D; + LastProxToAirDuration = 8 * ts->max - 4; } else { - ToSend[++ToSendMax] = SEC_E; - LastProxToAirDuration = 8 * ToSendMax; + ts->buf[++ts->max] = SEC_E; + LastProxToAirDuration = 8 * ts->max; } } } // Send stopbit - ToSend[++ToSendMax] = SEC_F; + ts->buf[++ts->max] = SEC_F; // Convert from last byte pos to length - ToSendMax++; + ts->max++; } static void CodeIso14443aAsTagEx(const uint8_t *cmd, uint16_t len, bool collision) { @@ -799,37 +798,39 @@ static void CodeIso14443aAsTag(const uint8_t *cmd, uint16_t len) { static void Code4bitAnswerAsTag(uint8_t cmd) { uint8_t b = cmd; - ToSendReset(); + tosend_reset(); + + tosend_t *ts = get_tosend(); // Correction bit, might be removed when not needed - ToSendStuffBit(0); - ToSendStuffBit(0); - ToSendStuffBit(0); - ToSendStuffBit(0); - ToSendStuffBit(1); // 1 - ToSendStuffBit(0); - ToSendStuffBit(0); - ToSendStuffBit(0); + tosend_stuffbit(0); + tosend_stuffbit(0); + tosend_stuffbit(0); + tosend_stuffbit(0); + tosend_stuffbit(1); // 1 + tosend_stuffbit(0); + tosend_stuffbit(0); + tosend_stuffbit(0); // Send startbit - ToSend[++ToSendMax] = SEC_D; + ts->buf[++ts->max] = SEC_D; for (uint8_t i = 0; i < 4; i++) { if (b & 1) { - ToSend[++ToSendMax] = SEC_D; - LastProxToAirDuration = 8 * ToSendMax - 4; + ts->buf[++ts->max] = SEC_D; + LastProxToAirDuration = 8 * ts->max - 4; } else { - ToSend[++ToSendMax] = SEC_E; - LastProxToAirDuration = 8 * ToSendMax; + ts->buf[++ts->max] = SEC_E; + LastProxToAirDuration = 8 * ts->max; } b >>= 1; } // Send stopbit - ToSend[++ToSendMax] = SEC_F; + ts->buf[++ts->max] = SEC_F; // Convert from last byte pos to length - ToSendMax++; + ts->max++; } //----------------------------------------------------------------------------- @@ -887,32 +888,36 @@ bool prepare_tag_modulation(tag_response_info_t *response_info, size_t max_buffe // Prepare the tag modulation bits from the message CodeIso14443aAsTag(response_info->response, response_info->response_n); + tosend_t *ts = get_tosend(); + // Make sure we do not exceed the free buffer space - if (ToSendMax > max_buffer_size) { + if (ts->max > max_buffer_size) { Dbprintf("ToSend buffer, Out-of-bound, when modulating bits for tag answer:"); Dbhexdump(response_info->response_n, response_info->response, false); return false; } // Copy the byte array, used for this modulation to the buffer position - memcpy(response_info->modulation, ToSend, ToSendMax); + memcpy(response_info->modulation, ts->buf, ts->max); // Store the number of bytes that were used for encoding/modulation and the time needed to transfer them - response_info->modulation_n = ToSendMax; + response_info->modulation_n = ts->max; response_info->ProxToAirDuration = LastProxToAirDuration; return true; } bool prepare_allocated_tag_modulation(tag_response_info_t *response_info, uint8_t **buffer, size_t *max_buffer_size) { + tosend_t *ts = get_tosend(); + // Retrieve and store the current buffer index response_info->modulation = *buffer; // Forward the prepare tag modulation function to the inner function if (prepare_tag_modulation(response_info, *max_buffer_size)) { // Update the free buffer offset and the remaining buffer size - *buffer += ToSendMax; - *max_buffer_size -= ToSendMax; + *buffer += ts->max; + *max_buffer_size -= ts->max; return true; } else { return false; @@ -1638,12 +1643,14 @@ static void PrepareDelayedTransfer(uint16_t delay) { for (uint16_t i = 0; i < delay; i++) bitmask |= (0x01 << i); - ToSend[ToSendMax++] = 0x00; + tosend_t *ts = get_tosend(); - for (uint16_t i = 0; i < ToSendMax; i++) { - uint8_t bits_to_shift = ToSend[i] & bitmask; - ToSend[i] = ToSend[i] >> delay; - ToSend[i] = ToSend[i] | (bits_shifted << (8 - delay)); + ts->buf[ts->max++] = 0x00; + + for (uint16_t i = 0; i < ts->max; i++) { + uint8_t bits_to_shift = ts->buf[i] & bitmask; + ts->buf[i] = ts->buf[i] >> delay; + ts->buf[i] = ts->buf[i] | (bits_shifted << (8 - delay)); bits_shifted = bits_to_shift; } } @@ -1701,11 +1708,12 @@ static void TransmitFor14443a(const uint8_t *cmd, uint16_t len, uint32_t *timing static void CodeIso14443aBitsAsReaderPar(const uint8_t *cmd, uint16_t bits, const uint8_t *par) { int last = 0; - ToSendReset(); + tosend_reset(); + tosend_t *ts = get_tosend(); // Start of Communication (Seq. Z) - ToSend[++ToSendMax] = SEC_Z; - LastProxToAirDuration = 8 * (ToSendMax + 1) - 6; + ts->buf[++ts->max] = SEC_Z; + LastProxToAirDuration = 8 * (ts->max + 1) - 6; size_t bytecount = nbytes(bits); // Generate send structure for the data bits @@ -1717,17 +1725,17 @@ static void CodeIso14443aBitsAsReaderPar(const uint8_t *cmd, uint16_t bits, cons for (j = 0; j < bitsleft; j++) { if (b & 1) { // Sequence X - ToSend[++ToSendMax] = SEC_X; - LastProxToAirDuration = 8 * (ToSendMax + 1) - 2; + ts->buf[++ts->max] = SEC_X; + LastProxToAirDuration = 8 * (ts->max + 1) - 2; last = 1; } else { if (last == 0) { // Sequence Z - ToSend[++ToSendMax] = SEC_Z; - LastProxToAirDuration = 8 * (ToSendMax + 1) - 6; + ts->buf[++ts->max] = SEC_Z; + LastProxToAirDuration = 8 * (ts->max + 1) - 6; } else { // Sequence Y - ToSend[++ToSendMax] = SEC_Y; + ts->buf[++ts->max] = SEC_Y; last = 0; } } @@ -1739,17 +1747,17 @@ static void CodeIso14443aBitsAsReaderPar(const uint8_t *cmd, uint16_t bits, cons // Get the parity bit if (par[i >> 3] & (0x80 >> (i & 0x0007))) { // Sequence X - ToSend[++ToSendMax] = SEC_X; - LastProxToAirDuration = 8 * (ToSendMax + 1) - 2; + ts->buf[++ts->max] = SEC_X; + LastProxToAirDuration = 8 * (ts->max + 1) - 2; last = 1; } else { if (last == 0) { // Sequence Z - ToSend[++ToSendMax] = SEC_Z; - LastProxToAirDuration = 8 * (ToSendMax + 1) - 6; + ts->buf[++ts->max] = SEC_Z; + LastProxToAirDuration = 8 * (ts->max + 1) - 6; } else { // Sequence Y - ToSend[++ToSendMax] = SEC_Y; + ts->buf[++ts->max] = SEC_Y; last = 0; } } @@ -1759,16 +1767,16 @@ static void CodeIso14443aBitsAsReaderPar(const uint8_t *cmd, uint16_t bits, cons // End of Communication: Logic 0 followed by Sequence Y if (last == 0) { // Sequence Z - ToSend[++ToSendMax] = SEC_Z; - LastProxToAirDuration = 8 * (ToSendMax + 1) - 6; + ts->buf[++ts->max] = SEC_Z; + LastProxToAirDuration = 8 * (ts->max + 1) - 6; } else { // Sequence Y - ToSend[++ToSendMax] = SEC_Y; + ts->buf[++ts->max] = SEC_Y; } - ToSend[++ToSendMax] = SEC_Y; + ts->buf[++ts->max] = SEC_Y; // Convert to length of command: - ToSendMax++; + ts->max++; } //----------------------------------------------------------------------------- @@ -1970,7 +1978,8 @@ int EmSendCmd14443aRaw(uint8_t *resp, uint16_t respLen) { int EmSend4bit(uint8_t resp) { Code4bitAnswerAsTag(resp); - int res = EmSendCmd14443aRaw(ToSend, ToSendMax); + tosend_t *ts = get_tosend(); + int res = EmSendCmd14443aRaw(ts->buf, ts->max); // do the tracing for the previous reader request and this tag answer: uint8_t par[1] = {0x00}; GetParity(&resp, 1, par); @@ -1991,7 +2000,9 @@ int EmSendCmdPar(uint8_t *resp, uint16_t respLen, uint8_t *par) { } int EmSendCmdParEx(uint8_t *resp, uint16_t respLen, uint8_t *par, bool collision) { CodeIso14443aAsTagPar(resp, respLen, par, collision); - int res = EmSendCmd14443aRaw(ToSend, ToSendMax); + tosend_t *ts = get_tosend(); + int res = EmSendCmd14443aRaw(ts->buf, ts->max); + // do the tracing for the previous reader request and this tag answer: EmLogTrace(Uart.output, Uart.len, @@ -2152,7 +2163,8 @@ void ReaderTransmitBitsPar(uint8_t *frame, uint16_t bits, uint8_t *par, uint32_t CodeIso14443aBitsAsReaderPar(frame, bits, par); // Send command to tag - TransmitFor14443a(ToSend, ToSendMax, timing); + tosend_t *ts = get_tosend(); + TransmitFor14443a(ts->buf, ts->max, timing); if (g_trigger) LED_A_ON(); LogTrace(frame, nbytes(bits), (LastTimeProxToAirStart << 4) + DELAY_ARM2AIR_AS_READER, ((LastTimeProxToAirStart + LastProxToAirDuration) << 4) + DELAY_ARM2AIR_AS_READER, par, true); diff --git a/armsrc/iso14443b.c b/armsrc/iso14443b.c index 4448d3570..b06dbcb44 100644 --- a/armsrc/iso14443b.c +++ b/armsrc/iso14443b.c @@ -50,7 +50,7 @@ #endif // 4sample -#define SEND4STUFFBIT(x) ToSendStuffBit(x);ToSendStuffBit(x);ToSendStuffBit(x);ToSendStuffBit(x); +#define SEND4STUFFBIT(x) tosend_stuffbit(x);tosend_stuffbit(x);tosend_stuffbit(x);tosend_stuffbit(x); static void iso14b_set_timeout(uint32_t timeout); static void iso14b_set_maxframesize(uint16_t size); @@ -140,7 +140,7 @@ static uint32_t iso14b_timeout = TR0; static void CodeIso14443bAsTag(const uint8_t *cmd, int len) { int i; - ToSendReset(); + tosend_reset(); // Transmit a burst of ones, as the initial thing that lets the // reader get phase sync. @@ -199,8 +199,9 @@ static void CodeIso14443bAsTag(const uint8_t *cmd, int len) { SEND4STUFFBIT(1); } + tosend_t *ts = get_tosend(); // Convert from last byte pos to length - ToSendMax++; + ts->max++; } //----------------------------------------------------------------------------- @@ -543,24 +544,32 @@ void SimulateIso14443bTag(uint32_t pupi) { uint16_t len, cmdsReceived = 0; int cardSTATE = SIM_NOFIELD; int vHf = 0; // in mV + + tosend_t *ts = get_tosend(); + uint8_t *receivedCmd = BigBuf_malloc(MAX_FRAME_SIZE); // prepare "ATQB" tag answer (encoded): CodeIso14443bAsTag(respATQB, sizeof(respATQB)); - uint8_t *encodedATQB = BigBuf_malloc(ToSendMax); - uint16_t encodedATQBLen = ToSendMax; - memcpy(encodedATQB, ToSend, ToSendMax); + uint8_t *encodedATQB = BigBuf_malloc(ts->max); + uint16_t encodedATQBLen = ts->max; + memcpy(encodedATQB, ts->buf, ts->max); // prepare "OK" tag answer (encoded): CodeIso14443bAsTag(respOK, sizeof(respOK)); - uint8_t *encodedOK = BigBuf_malloc(ToSendMax); - uint16_t encodedOKLen = ToSendMax; - memcpy(encodedOK, ToSend, ToSendMax); + uint8_t *encodedOK = BigBuf_malloc(ts->max); + uint16_t encodedOKLen = ts->max; + memcpy(encodedOK, ts->buf, ts->max); // Simulation loop - while (!BUTTON_PRESS() && !data_available()) { + while (BUTTON_PRESS() == false) { WDT_HIT(); + + //iceman: limit with 2000 times.. + if (data_available()) { + break; + } // find reader field if (cardSTATE == SIM_NOFIELD) { @@ -669,7 +678,7 @@ void SimulateIso14443bTag(uint32_t pupi) { if (DBGLEVEL >= DBG_DEBUG) Dbprintf("Emulator stopped. Trace length: %d ", BigBuf_get_traceLen()); - switch_off(); //simulate + switch_off(); //simulate } //============================================================================= @@ -967,9 +976,10 @@ static void TransmitFor14443b_AsReader(void) { FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER | FPGA_HF_READER_MODE_SEND_SHALLOW_MOD); LED_B_ON(); - - for (int c = 0; c < ToSendMax; c++) { - uint8_t data = ToSend[c]; + tosend_t *ts = get_tosend(); + + for (int c = 0; c < ts->max; c++) { + uint8_t data = ts->buf[c]; for (int i = 0; i < 8; i++) { uint16_t send_word = (data & 0x80) ? 0x0000 : 0xffff; @@ -1006,48 +1016,48 @@ static void CodeIso14443bAsReader(const uint8_t *cmd, int len) { * 1 "stuffbit" = 1ETU (9us) */ - ToSendReset(); + tosend_reset(); // Send SOF // 10-11 ETUs of ZERO for (int i = 0; i < 10; i++) - ToSendStuffBit(0); + tosend_stuffbit(0); // 2-3 ETUs of ONE - ToSendStuffBit(1); - ToSendStuffBit(1); + tosend_stuffbit(1); + tosend_stuffbit(1); // Sending cmd, LSB // from here we add BITS for (int i = 0; i < len; i++) { // Start bit - ToSendStuffBit(0); + tosend_stuffbit(0); // Data bits uint8_t b = cmd[i]; - ToSendStuffBit(b & 1); - ToSendStuffBit((b >> 1) & 1); - ToSendStuffBit((b >> 2) & 1); - ToSendStuffBit((b >> 3) & 1); - ToSendStuffBit((b >> 4) & 1); - ToSendStuffBit((b >> 5) & 1); - ToSendStuffBit((b >> 6) & 1); - ToSendStuffBit((b >> 7) & 1); + tosend_stuffbit(b & 1); + tosend_stuffbit((b >> 1) & 1); + tosend_stuffbit((b >> 2) & 1); + tosend_stuffbit((b >> 3) & 1); + tosend_stuffbit((b >> 4) & 1); + tosend_stuffbit((b >> 5) & 1); + tosend_stuffbit((b >> 6) & 1); + tosend_stuffbit((b >> 7) & 1); // Stop bit - ToSendStuffBit(1); + tosend_stuffbit(1); // EGT extra guard time // For PCD it ranges 0-57us (1etu = 9us) -// ToSendStuffBit(1); -// ToSendStuffBit(1); -// ToSendStuffBit(1); +// tosend_stuffbit(1); +// tosend_stuffbit(1); +// tosend_stuffbit(1); } // Send EOF // 10-11 ETUs of ZERO for (int i = 0; i < 10; i++) - ToSendStuffBit(0); + tosend_stuffbit(0); // Transition time. TR0 - guard time // 8ETUS minum? @@ -1056,11 +1066,12 @@ static void CodeIso14443bAsReader(const uint8_t *cmd, int len) { // ensure that last byte is filled up for (int i = 0; i < 8 ; ++i) - ToSendStuffBit(1); + tosend_stuffbit(1); // TR1 - Synchronization time // Convert from last character reference to length - ToSendMax++; + tosend_t *ts = get_tosend(); + ts->max++; } /* From 88c14b9c08e80e1ab3fc3ccac9a0d5ff9236acc5 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Mon, 13 Jul 2020 18:20:43 +0200 Subject: [PATCH 0086/1047] iclass doesnt need 4500 timout anymore, can put earlier in hf search. --- client/src/cmdhf.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/client/src/cmdhf.c b/client/src/cmdhf.c index 4fc138a98..e1cf99305 100644 --- a/client/src/cmdhf.c +++ b/client/src/cmdhf.c @@ -129,6 +129,15 @@ int CmdHFSearch(const char *Cmd) { } } + PROMPT_CLEARLINE; + PrintAndLogEx(INPLACE, " Searching for iClass / PicoPass tag..."); + if (IfPm3Iclass()) { + if (readIclass(false, false) == PM3_SUCCESS) { + PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("iClass tag / PicoPass tag") " found\n"); + res = PM3_SUCCESS; + } + } + PROMPT_CLEARLINE; PrintAndLogEx(INPLACE, " Searching for LEGIC tag..."); if (IfPm3Legicrf()) { @@ -156,7 +165,6 @@ int CmdHFSearch(const char *Cmd) { } } /* - // 14b and iclass is the longest test (put last) PROMPT_CLEARLINE; PrintAndLogEx(INPLACE, " Searching for CryptoRF tag..."); if (IfPm3Iso14443b()) { @@ -167,7 +175,7 @@ int CmdHFSearch(const char *Cmd) { } */ - // 14b and iclass is the longest test (put last) + // 14b is the longest test (put last) PROMPT_CLEARLINE; PrintAndLogEx(INPLACE, " Searching for ISO14443-B tag..."); if (IfPm3Iso14443b()) { @@ -177,14 +185,6 @@ int CmdHFSearch(const char *Cmd) { } } - PROMPT_CLEARLINE; - PrintAndLogEx(INPLACE, " Searching for iClass / PicoPass tag..."); - if (IfPm3Iclass()) { - if (readIclass(false, false) == PM3_SUCCESS) { - PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("iClass tag / PicoPass tag") " found\n"); - res = PM3_SUCCESS; - } - } PROMPT_CLEARLINE; if (res != PM3_SUCCESS) { From b62c060727dc292e3f673b4970d9b11f4b0fe502 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Mon, 13 Jul 2020 20:13:25 +0200 Subject: [PATCH 0087/1047] chg: hf iclass rdbl, wrbl - got some love --- client/src/cmdhficlass.c | 146 +++++++++++++++++++++++---------------- 1 file changed, 88 insertions(+), 58 deletions(-) diff --git a/client/src/cmdhficlass.c b/client/src/cmdhficlass.c index 5b0b11492..8bdde6592 100644 --- a/client/src/cmdhficlass.c +++ b/client/src/cmdhficlass.c @@ -35,6 +35,7 @@ #define ICLASS_KEYS_MAX 8 #define ICLASS_AUTH_RETRY 10 #define ICLASS_DECRYPTION_BIN "iclass_decryptionkey.bin" +static uint8_t empty[8] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; static int CmdHelp(const char *Cmd); @@ -954,7 +955,7 @@ static int CmdHFiClassDecrypt(const char *Cmd) { uint8_t max_blk = 31; getMemConfig(mem, chip, &max_blk, &app_areas, &kb); - uint8_t empty[8] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; + BLOCK79ENCRYPTION aa1_encryption = (decrypted[(6 * 8) + 7] & 0x03); @@ -1484,61 +1485,40 @@ static int CmdHFiClassDump(const char *Cmd) { return PM3_SUCCESS; } -static int WriteBlock(uint8_t blockno, uint8_t *bldata, uint8_t *KEY, bool use_credit_key, bool elite, bool rawkey, bool verbose) { +static int iclass_write_block(uint8_t blockno, uint8_t *bldata, uint8_t *KEY, bool use_credit_key, bool elite, bool rawkey, bool verbose) { - int numberAuthRetries = ICLASS_AUTH_RETRY; - do { - - uint8_t MAC[4] = {0x00, 0x00, 0x00, 0x00}; - uint8_t div_key[8] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; - if (select_and_auth(KEY, MAC, div_key, use_credit_key, elite, rawkey, verbose) == false) { - numberAuthRetries--; - DropField(); - continue; - } - - calc_wb_mac(blockno, bldata, div_key, MAC); - - struct p { - uint8_t blockno; - uint8_t data[12]; - } PACKED payload; - payload.blockno = blockno; - - memcpy(payload.data, bldata, 8); - memcpy(payload.data + 8, MAC, 4); - - clearCommandBuffer(); - SendCommandNG(CMD_HF_ICLASS_WRITEBL, (uint8_t *)&payload, sizeof(payload)); - PacketResponseNG resp; - - if (WaitForResponseTimeout(CMD_HF_ICLASS_WRITEBL, &resp, 2000) == 0) { - if (verbose) PrintAndLogEx(WARNING, "Command execute timeout"); - DropField(); - return PM3_ETIMEOUT; - } - - if (resp.status != PM3_SUCCESS) { - if (verbose) PrintAndLogEx(ERR, "failed to communicate with card"); - DropField(); - return PM3_EWRONGANSWER; - } - - if (resp.data.asBytes[0] == 1) - break; - - } while (numberAuthRetries); - - DropField(); - - if (numberAuthRetries > 0) { - PrintAndLogEx(SUCCESS, "Write block %02X successful\n", blockno); - } else { - PrintAndLogEx(ERR, "failed to authenticate and write block"); + uint8_t MAC[4] = {0x00, 0x00, 0x00, 0x00}; + uint8_t div_key[8] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; + if (select_and_auth(KEY, MAC, div_key, use_credit_key, elite, rawkey, verbose) == false) { return PM3_ESOFT; } - return PM3_SUCCESS; + calc_wb_mac(blockno, bldata, div_key, MAC); + + struct p { + uint8_t blockno; + uint8_t data[12]; + } PACKED payload; + payload.blockno = blockno; + + memcpy(payload.data, bldata, 8); + memcpy(payload.data + 8, MAC, 4); + + clearCommandBuffer(); + SendCommandNG(CMD_HF_ICLASS_WRITEBL, (uint8_t *)&payload, sizeof(payload)); + PacketResponseNG resp; + + if (WaitForResponseTimeout(CMD_HF_ICLASS_WRITEBL, &resp, 2000) == 0) { + if (verbose) PrintAndLogEx(WARNING, "Command execute timeout"); + return PM3_ETIMEOUT; + } + + if (resp.status != PM3_SUCCESS) { + if (verbose) PrintAndLogEx(ERR, "failed to communicate with card"); + return PM3_EWRONGANSWER; + } + + return (resp.data.asBytes[0] == 1) ? PM3_SUCCESS : PM3_ESOFT; } static int CmdHFiClass_WriteBlock(const char *Cmd) { @@ -1620,7 +1600,12 @@ static int CmdHFiClass_WriteBlock(const char *Cmd) { if (errors || cmdp < 6) return usage_hf_iclass_writeblock(); - return WriteBlock(blockno, bldata, KEY, use_credit_key, elite, rawkey, verbose); + int isok = iclass_write_block(blockno, bldata, KEY, use_credit_key, elite, rawkey, verbose); + if (isok == PM3_SUCCESS) + PrintAndLogEx(SUCCESS, "Wrote block %02X successful", blockno); + else + PrintAndLogEx(FAILED, "Writing failed"); + return isok; } static int CmdHFiClassCloneTag(const char *Cmd) { @@ -1827,7 +1812,7 @@ static int CmdHFiClassCloneTag(const char *Cmd) { return resp.status; } -static int ReadBlock(uint8_t *KEY, uint8_t blockno, uint8_t keyType, bool elite, bool rawkey, bool verbose, bool auth) { +static int iclass_read_block(uint8_t *KEY, uint8_t blockno, uint8_t keyType, bool elite, bool rawkey, bool verbose, bool auth) { int numberAuthRetries = ICLASS_AUTH_RETRY; // return data. @@ -1886,12 +1871,57 @@ static int ReadBlock(uint8_t *KEY, uint8_t blockno, uint8_t keyType, bool elite, return PM3_ESOFT; } - PrintAndLogEx(SUCCESS, "block %02X: %s\n", blockno, sprint_hex(result->blockdata, sizeof(result->blockdata))); + PrintAndLogEx(SUCCESS, "block %02X: " _GREEN_("%s"), blockno, sprint_hex(result->blockdata, sizeof(result->blockdata))); - if (blockno == 6) { - if (IsCryptoHelperPresent()) { + if (memcmp(result->blockdata, empty, 8) == 0) + return PM3_SUCCESS; + + bool use_sc = IsCryptoHelperPresent(); + if (use_sc == false) + return PM3_SUCCESS; + + // crypto helper available. + switch (blockno) { + case 6: { DecodeBlock6(result->blockdata); + break; } + case 7: { +// case 8: +// case 9: { + PrintAndLogEx(INFO, "Trying to decrypt..."); + + uint8_t dec_data[8]; + Decrypt(result->blockdata, dec_data); + + if (memcmp(dec_data, empty, 8) != 0) { + + //todo: remove preamble/sentinal + + uint32_t top = 0, mid, bot; + mid = bytes_to_num(dec_data, 4); + bot = bytes_to_num(dec_data + 4, 4); + + PrintAndLogEx(INFO, "Block 7 binary"); + + char hexstr[8 + 1] = {0}; + hex_to_buffer((uint8_t *)hexstr, dec_data, 8, sizeof(hexstr) - 1, 0, 0, true); + + char binstr[8 * 8 + 1] = {0}; + hextobinstring(binstr, hexstr); + uint8_t i = 0; + while (i < strlen(binstr) && binstr[i++] == '0'); + + PrintAndLogEx(SUCCESS, "%s", binstr + i); + + PrintAndLogEx(INFO, "Wiegand decode"); + wiegand_message_t packed = initialize_message_object(top, mid, bot); + HIDTryUnpack(&packed, true); + PrintAndLogEx(INFO, "-----------------------------------------------------------------"); + } else { + PrintAndLogEx(INFO, "No credential found."); + } + } } return PM3_SUCCESS; @@ -1973,7 +2003,7 @@ static int CmdHFiClass_ReadBlock(const char *Cmd) { if (!auth) PrintAndLogEx(FAILED, "warning: no authentication used with read, only a few specific blocks can be read accurately without authentication."); - return ReadBlock(KEY, blockno, keyType, elite, rawkey, verbose, auth); + return iclass_read_block(KEY, blockno, keyType, elite, rawkey, verbose, auth); } static int CmdHFiClass_loclass(const char *Cmd) { From e476e7f504f1f73b83d34798c83b4b10c9977411 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Mon, 13 Jul 2020 20:13:56 +0200 Subject: [PATCH 0088/1047] coding style --- armsrc/iclass.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/armsrc/iclass.c b/armsrc/iclass.c index d180aa6e0..84f854c9c 100644 --- a/armsrc/iclass.c +++ b/armsrc/iclass.c @@ -1307,7 +1307,7 @@ void iClass_Dump(uint8_t start_blockno, uint8_t numblks) { BigBuf_free(); } -static bool iClass_WriteBlock_ext(uint8_t blockno, uint8_t *data) { +static bool iclass_writeblock_ext(uint8_t blockno, uint8_t *data) { uint8_t write[16] = { 0x80 | ICLASS_CMD_UPDATE, blockno }; memcpy(write + 2, data, 12); // data + mac @@ -1344,7 +1344,7 @@ static bool iClass_WriteBlock_ext(uint8_t blockno, uint8_t *data) { // turn off afterwards void iClass_WriteBlock(uint8_t blockno, uint8_t *data) { LED_A_ON(); - uint8_t isOK = iClass_WriteBlock_ext(blockno, data); + uint8_t isOK = iclass_writeblock_ext(blockno, data); switch_off(); reply_ng(CMD_HF_ICLASS_WRITEBL, PM3_SUCCESS, (uint8_t *)&isOK, sizeof(uint8_t)); } @@ -1356,7 +1356,7 @@ void iClass_Clone(uint8_t startblock, uint8_t endblock, uint8_t *data) { uint16_t total_blocks = (endblock - startblock) + 1; for (uint8_t b = startblock; b < total_blocks; b++) { - if (iClass_WriteBlock_ext(b, data + ((b - startblock) * 12))) { + if (iclass_writeblock_ext(b, data + ((b - startblock) * 12))) { Dbprintf("Write block [%02x] successful", b); written++; } else { From 4493153dbb7a674c3ab504b8c9da47ab067a1948 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Mon, 13 Jul 2020 20:58:24 +0200 Subject: [PATCH 0089/1047] verbose.. --- client/src/cmdhficlass.c | 85 +++++++++++++++++----------------------- common/cardhelper.c | 11 +++--- common/cardhelper.h | 2 +- 3 files changed, 42 insertions(+), 56 deletions(-) diff --git a/client/src/cmdhficlass.c b/client/src/cmdhficlass.c index 8bdde6592..b4fc7dcb2 100644 --- a/client/src/cmdhficlass.c +++ b/client/src/cmdhficlass.c @@ -918,7 +918,7 @@ static int CmdHFiClassDecrypt(const char *Cmd) { if (errors || cmdp < 1) return usage_hf_iclass_decrypt(); - bool use_sc = IsCryptoHelperPresent(); + bool use_sc = IsCryptoHelperPresent(true); if (have_key == false && use_sc == false) { int res = loadFile_safe(ICLASS_DECRYPTION_BIN, "", (void **)&keyptr, &keylen); @@ -1092,7 +1092,7 @@ static int CmdHFiClassEncryptBlk(const char *Cmd) { if (errors || cmdp < 1) return usage_hf_iclass_encrypt(); - bool use_sc = IsCryptoHelperPresent(); + bool use_sc = IsCryptoHelperPresent(true); if (have_key == false && use_sc == false) { size_t keylen = 0; @@ -1814,7 +1814,6 @@ static int CmdHFiClassCloneTag(const char *Cmd) { static int iclass_read_block(uint8_t *KEY, uint8_t blockno, uint8_t keyType, bool elite, bool rawkey, bool verbose, bool auth) { - int numberAuthRetries = ICLASS_AUTH_RETRY; // return data. struct p { bool isOK; @@ -1822,61 +1821,51 @@ static int iclass_read_block(uint8_t *KEY, uint8_t blockno, uint8_t keyType, boo } PACKED; struct p *result = NULL; - do { - // block 0,1 should always be able to read, and block 5 on some cards. - if (auth || blockno >= 2) { - uint8_t MAC[4] = {0x00, 0x00, 0x00, 0x00}; - uint8_t div_key[8] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; - if (select_and_auth(KEY, MAC, div_key, (keyType == 0x18), elite, rawkey, verbose) == false) { - numberAuthRetries--; - DropField(); - continue; - } - } else { - uint8_t CSN[8] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; - uint8_t CCNR[12] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; - if (select_only(CSN, CCNR, (keyType == 0x18), verbose) == false) { - numberAuthRetries--; - DropField(); - continue; - } + // block 0,1 should always be able to read, and block 5 on some cards. + if (auth || blockno >= 2) { + uint8_t MAC[4] = {0x00, 0x00, 0x00, 0x00}; + uint8_t div_key[8] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; + if (select_and_auth(KEY, MAC, div_key, (keyType == 0x18), elite, rawkey, verbose) == false) { + return PM3_ESOFT; } - - PacketResponseNG resp; - clearCommandBuffer(); - SendCommandNG(CMD_HF_ICLASS_READBL, (uint8_t *)&blockno, sizeof(uint8_t)); - - if (WaitForResponseTimeout(CMD_HF_ICLASS_READBL, &resp, 2000) == 0) { - if (verbose) PrintAndLogEx(WARNING, "Command execute timeout"); - DropField(); - return PM3_ETIMEOUT; + } else { + uint8_t CSN[8] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; + uint8_t CCNR[12] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; + if (select_only(CSN, CCNR, (keyType == 0x18), verbose) == false) { + return PM3_ESOFT; } + } - if (resp.status != PM3_SUCCESS) { - if (verbose) PrintAndLogEx(ERR, "failed to communicate with card"); - DropField(); - return PM3_EWRONGANSWER; - } + PacketResponseNG resp; + clearCommandBuffer(); + SendCommandNG(CMD_HF_ICLASS_READBL, (uint8_t *)&blockno, sizeof(uint8_t)); - result = (struct p *)resp.data.asBytes; - if (result->isOK) - break; + if (WaitForResponseTimeout(CMD_HF_ICLASS_READBL, &resp, 2000) == 0) { + if (verbose) PrintAndLogEx(WARNING, "Command execute timeout"); + DropField(); + return PM3_ETIMEOUT; + } - } while (numberAuthRetries); + if (resp.status != PM3_SUCCESS) { + if (verbose) PrintAndLogEx(ERR, "failed to communicate with card"); + return PM3_EWRONGANSWER; + } + + result = (struct p *)resp.data.asBytes; + if (result->isOK == false) + return PM3_ESOFT; DropField(); - if (numberAuthRetries == 0) { - PrintAndLogEx(ERR, "failed to authenticate and read block"); - return PM3_ESOFT; - } - PrintAndLogEx(SUCCESS, "block %02X: " _GREEN_("%s"), blockno, sprint_hex(result->blockdata, sizeof(result->blockdata))); if (memcmp(result->blockdata, empty, 8) == 0) return PM3_SUCCESS; - bool use_sc = IsCryptoHelperPresent(); + if (blockno < 6 || blockno > 7) + return PM3_SUCCESS; + + bool use_sc = IsCryptoHelperPresent(verbose); if (use_sc == false) return PM3_SUCCESS; @@ -1887,8 +1876,6 @@ static int iclass_read_block(uint8_t *KEY, uint8_t blockno, uint8_t keyType, boo break; } case 7: { -// case 8: -// case 9: { PrintAndLogEx(INFO, "Trying to decrypt..."); uint8_t dec_data[8]; @@ -1902,7 +1889,7 @@ static int iclass_read_block(uint8_t *KEY, uint8_t blockno, uint8_t keyType, boo mid = bytes_to_num(dec_data, 4); bot = bytes_to_num(dec_data + 4, 4); - PrintAndLogEx(INFO, "Block 7 binary"); + PrintAndLogEx(INFO, "Binary"); char hexstr[8 + 1] = {0}; hex_to_buffer((uint8_t *)hexstr, dec_data, 8, sizeof(hexstr) - 1, 0, 0, true); @@ -1914,7 +1901,7 @@ static int iclass_read_block(uint8_t *KEY, uint8_t blockno, uint8_t keyType, boo PrintAndLogEx(SUCCESS, "%s", binstr + i); - PrintAndLogEx(INFO, "Wiegand decode"); + PrintAndLogEx(INFO, "-----------------------------------------------------------------"); wiegand_message_t packed = initialize_message_object(top, mid, bot); HIDTryUnpack(&packed, true); PrintAndLogEx(INFO, "-----------------------------------------------------------------"); diff --git a/common/cardhelper.c b/common/cardhelper.c index 03af2d799..fbdaf2002 100644 --- a/common/cardhelper.c +++ b/common/cardhelper.c @@ -22,7 +22,7 @@ static uint8_t cmd[] = {0x96, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; // look for CryptoHelper -bool IsCryptoHelperPresent(void) { +bool IsCryptoHelperPresent(bool verbose) { if (IfPm3Smartcard()) { int resp_len = 0; @@ -31,14 +31,13 @@ bool IsCryptoHelperPresent(void) { ExchangeAPDUSC(true, version, sizeof(version), true, true, resp, sizeof(resp), &resp_len); if (strstr("CryptoHelper", (char *)resp) == 0) { - PrintAndLogEx(INFO, "Found smart card helper"); + if (verbose) { + PrintAndLogEx(INFO, "Found smart card helper"); + } return true; - } else { - return false; } - } else { - return false; } + return false; } static bool executeCrypto(uint8_t ins, uint8_t *src, uint8_t *dest) { diff --git a/common/cardhelper.h b/common/cardhelper.h index fcdd73cfe..eaf7ff38f 100644 --- a/common/cardhelper.h +++ b/common/cardhelper.h @@ -14,7 +14,7 @@ #include #include "common.h" -bool IsCryptoHelperPresent(void); +bool IsCryptoHelperPresent(bool verbose); bool Encrypt(uint8_t *src, uint8_t *dest); bool Decrypt(uint8_t *src, uint8_t *dest); void DecodeBlock6(uint8_t *src); From 830ecd6e135d85df5f907a1cb4902e39cda05b43 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Mon, 13 Jul 2020 22:05:11 +0200 Subject: [PATCH 0090/1047] debugs --- armsrc/BigBuf.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/armsrc/BigBuf.c b/armsrc/BigBuf.c index 9b3733d6f..f5a64bfa2 100644 --- a/armsrc/BigBuf.c +++ b/armsrc/BigBuf.c @@ -186,11 +186,12 @@ bool RAMFUNC LogTrace(const uint8_t *btBytes, uint16_t iLen, uint32_t timestamp_ } if (duration > 0x7FFF) { - if (DBGLEVEL >= DBG_ERROR) { + /* + if (DBGLEVEL >= DBG_DEBUG) { Dbprintf("Error in LogTrace: duration too long for 15 bits encoding: 0x%08x start: 0x%08x end: 0x%08x", duration, timestamp_start, timestamp_end); } + */ duration /= 32; -// duration = 0; } hdr->timestamp = timestamp_start; From f00c0eb5cf91d9efb6db450d943f7799c1acc940 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Mon, 13 Jul 2020 22:05:38 +0200 Subject: [PATCH 0091/1047] prep for timings --- armsrc/iclass.c | 28 ++++++++++++---------------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/armsrc/iclass.c b/armsrc/iclass.c index 84f854c9c..c5fc534f4 100644 --- a/armsrc/iclass.c +++ b/armsrc/iclass.c @@ -752,12 +752,12 @@ send: // THE READER CODE -static void iclass_send_as_reader(uint8_t *frame, int len, uint32_t *start_time) { +static void iclass_send_as_reader(uint8_t *frame, int len, uint32_t *start_time, uint32_t *end_time) { CodeIso15693AsReader(frame, len); tosend_t *ts = get_tosend(); TransmitTo15693Tag(ts->buf, ts->max, start_time); - uint32_t end_time = *start_time + (32 * ((8 * ts->max) - 4)); // substract the 4 padding bits after EOF - LogTrace(frame, len, (*start_time * 4), (end_time * 4), NULL, true); + *end_time = *start_time + (32 * ((8 * ts->max) - 4)); // substract the 4 padding bits after EOF + LogTrace(frame, len, (*start_time * 4), (*end_time * 4), NULL, true); } static bool iclass_send_cmd_with_retries(uint8_t* cmd, size_t cmdsize, uint8_t* resp, size_t max_resp_size, @@ -765,7 +765,7 @@ static bool iclass_send_cmd_with_retries(uint8_t* cmd, size_t cmdsize, uint8_t* uint16_t timeout, uint32_t *eof_time) { while (tries-- > 0) { - iclass_send_as_reader(cmd, cmdsize, &start_time); + iclass_send_as_reader(cmd, cmdsize, &start_time, eof_time); if (resp == NULL) return true; @@ -773,7 +773,7 @@ static bool iclass_send_cmd_with_retries(uint8_t* cmd, size_t cmdsize, uint8_t* if (expected_size == GetIso15693AnswerFromTag(resp, max_resp_size, timeout, eof_time)) { return true; } -// start_time = *eof_time + DELAY_ICLASS_VICC_TO_VCD_READER; + start_time = *eof_time + DELAY_ICLASS_VICC_TO_VCD_READER; } return false; } @@ -802,19 +802,15 @@ static bool select_iclass_tag(uint8_t *card_data, bool use_credit_key, uint32_t // wakeup uint32_t start_time = GetCountSspClk(); - iclass_send_as_reader(act_all, 1, &start_time); + iclass_send_as_reader(act_all, 1, &start_time, eof_time); int len = GetIso15693AnswerFromTag(resp, sizeof(resp), ICLASS_READER_TIMEOUT_ACTALL, eof_time); if (len < 0) return false; -/* - bool ok = iclass_send_cmd_with_retries(act_all, 1, resp, sizeof(resp), 1, 5, start_time, ICLASS_READER_TIMEOUT_ACTALL, eof_time); - if (ok == false) - return false; -*/ + // send Identify start_time = *eof_time + DELAY_ICLASS_VICC_TO_VCD_READER; - iclass_send_as_reader(identify, 1, &start_time); + iclass_send_as_reader(identify, 1, &start_time, eof_time); // expect a 10-byte response here, 8 byte anticollision-CSN and 2 byte CRC len = GetIso15693AnswerFromTag(resp, sizeof(resp), ICLASS_READER_TIMEOUT_OTHERS, eof_time); @@ -826,7 +822,7 @@ static bool select_iclass_tag(uint8_t *card_data, bool use_credit_key, uint32_t // select the card start_time = *eof_time + DELAY_ICLASS_VICC_TO_VCD_READER; - iclass_send_as_reader(select, sizeof(select), &start_time); + iclass_send_as_reader(select, sizeof(select), &start_time, eof_time); // expect a 10-byte response here, 8 byte CSN and 2 byte CRC len = GetIso15693AnswerFromTag(resp, sizeof(resp), ICLASS_READER_TIMEOUT_OTHERS, eof_time); @@ -838,7 +834,7 @@ static bool select_iclass_tag(uint8_t *card_data, bool use_credit_key, uint32_t // card selected, now read config (block1) (only 8 bytes no CRC) start_time = *eof_time + DELAY_ICLASS_VICC_TO_VCD_READER; - iclass_send_as_reader(read_conf, sizeof(read_conf), &start_time); + iclass_send_as_reader(read_conf, sizeof(read_conf), &start_time, eof_time); // expect a 8-byte response here len = GetIso15693AnswerFromTag(resp, sizeof(resp), ICLASS_READER_TIMEOUT_OTHERS, eof_time); @@ -850,7 +846,7 @@ static bool select_iclass_tag(uint8_t *card_data, bool use_credit_key, uint32_t // card selected, now read e-purse (cc) (block2) (only 8 bytes no CRC) start_time = *eof_time + DELAY_ICLASS_VICC_TO_VCD_READER; - iclass_send_as_reader(read_check_cc, sizeof(read_check_cc), &start_time); + iclass_send_as_reader(read_check_cc, sizeof(read_check_cc), &start_time, eof_time); // expect a 8-byte response here len = GetIso15693AnswerFromTag(resp, sizeof(resp), ICLASS_READER_TIMEOUT_OTHERS, eof_time); @@ -1215,7 +1211,7 @@ void iClass_Authentication_fast(uint64_t arg0, uint64_t arg1, uint8_t *datain) { start_time = eof_time + DELAY_ICLASS_VICC_TO_VCD_READER; // Auth Sequence MUST begin with reading e-purse. (block2) // Card selected, now read e-purse (cc) (block2) (only 8 bytes no CRC) - iclass_send_as_reader(readcheck_cc, sizeof(readcheck_cc), &start_time); + iclass_send_as_reader(readcheck_cc, sizeof(readcheck_cc), &start_time, &eof_time); LED_B_OFF(); } From dd7a3c208ce3720fa83fc41823d532ced30d1819 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Mon, 13 Jul 2020 22:06:15 +0200 Subject: [PATCH 0092/1047] init arrays... --- armsrc/iso15693.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/armsrc/iso15693.c b/armsrc/iso15693.c index 82640d0cb..c12e2837b 100644 --- a/armsrc/iso15693.c +++ b/armsrc/iso15693.c @@ -621,7 +621,7 @@ static void DecodeTagReset(DecodeTag_t *DecodeTag) { int GetIso15693AnswerFromTag(uint8_t* response, uint16_t max_len, uint16_t timeout, uint32_t *eof_time) { int samples = 0, ret = 0; - uint16_t dmaBuf[ISO15693_DMA_BUFFER_SIZE]; + uint16_t dmaBuf[ISO15693_DMA_BUFFER_SIZE] = {0}; // the Decoder data structure DecodeTag_t DecodeTag = { 0 }; @@ -678,7 +678,7 @@ int GetIso15693AnswerFromTag(uint8_t* response, uint16_t max_len, uint16_t timeo } if (samples > timeout && DecodeTag.state < STATE_TAG_RECEIVING_DATA) { - ret = -1; // timeout + ret = -3; // timeout break; } @@ -704,7 +704,7 @@ int GetIso15693AnswerFromTag(uint8_t* response, uint16_t max_len, uint16_t timeo Dbprintf("timing: sof_time = %d, eof_time = %d", (sof_time * 4), (*eof_time * 4)); } - if (ret == -1) { + if (ret == -1) { return ret; } @@ -1016,7 +1016,7 @@ int GetIso15693CommandFromReader(uint8_t *received, size_t max_len, uint32_t *eo int samples = 0; bool gotFrame = false; - uint8_t dmaBuf[ISO15693_DMA_BUFFER_SIZE]; + uint8_t dmaBuf[ISO15693_DMA_BUFFER_SIZE] = {0}; // the decoder data structure DecodeReader_t DecodeReader = {0}; @@ -1148,7 +1148,7 @@ void SniffIso15693(uint8_t jam_search_len, uint8_t *jam_search_string) { set_tracing(true); // The DMA buffer, used to stream samples from the FPGA - uint16_t dmaBuf[ISO15693_DMA_BUFFER_SIZE]; + uint16_t dmaBuf[ISO15693_DMA_BUFFER_SIZE] = {0}; // Count of samples received so far, so that we can include timing // information in the trace buffer. From 2fa9bd585fd3e8305ae0ce86380775dc074f6a61 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Mon, 13 Jul 2020 22:06:50 +0200 Subject: [PATCH 0093/1047] style --- client/src/comms.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/src/comms.c b/client/src/comms.c index 5976cfcc1..209fd47cd 100644 --- a/client/src/comms.c +++ b/client/src/comms.c @@ -303,7 +303,7 @@ static void PacketResponseReceived(PacketResponseNG *packet) { break; } case CMD_DEBUG_PRINT_INTEGERS: { - if (! packet->ng) + if (packet->ng == false) PrintAndLogEx(NORMAL, "[" _MAGENTA_("pm3") "] ["_BLUE_("#")"] " "%" PRIx64 ", %" PRIx64 ", %" PRIx64 "", packet->oldarg[0], packet->oldarg[1], packet->oldarg[2]); break; } From 4b14f21c77717d21509906b2fe7a53e71b92545e Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Mon, 13 Jul 2020 23:27:16 +0200 Subject: [PATCH 0094/1047] fix iclass simulation --- armsrc/iclass.c | 393 ++++++++++++++++++++++++++---------------------- 1 file changed, 213 insertions(+), 180 deletions(-) diff --git a/armsrc/iclass.c b/armsrc/iclass.c index c5fc534f4..d7c57ee01 100644 --- a/armsrc/iclass.c +++ b/armsrc/iclass.c @@ -148,8 +148,6 @@ static void CodeIClassTagSOF(void) { // turn off afterwards void SimulateIClass(uint32_t arg0, uint32_t arg1, uint32_t arg2, uint8_t *datain) { - if (DBGLEVEL > 3) Dbprintf("[+] iClass_simulate Enter"); - LEDsoff(); Iso15693InitTag(); @@ -176,7 +174,7 @@ void SimulateIClass(uint32_t arg0, uint32_t arg1, uint32_t arg2, uint8_t *datain doIClassSimulation(ICLASS_SIM_MODE_CSN, NULL); } else if (simType == ICLASS_SIM_MODE_READER_ATTACK) { - Dbprintf("[+] going into attack mode, %d CSNS sent", numberOfCSNS); + Dbprintf("going into attack mode, %d CSNS sent", numberOfCSNS); // In this mode, a number of csns are within datain. We'll simulate each one, one at a time // in order to collect MAC's from the reader. This can later be used in an offlne-attack // in order to obtain the keys, as in the "dismantling iclass"-paper. @@ -204,7 +202,7 @@ void SimulateIClass(uint32_t arg0, uint32_t arg1, uint32_t arg2, uint8_t *datain // the collected data (mac_response) is doubled out since we are trying to collect both keys in the keyroll process. // Keyroll iceman 9 csns * 8 * 2 = 144 // keyroll CARL55 15csns * 8 * 2 = 15 * 8 * 2 = 240 - Dbprintf("[+] going into attack keyroll mode, %d CSNS sent", numberOfCSNS); + Dbprintf("going into attack keyroll mode, %d CSNS sent", numberOfCSNS); // In this mode, a number of csns are within datain. We'll simulate each one, one at a time // in order to collect MAC's from the reader. This can later be used in an offlne-attack // in order to obtain the keys, as in the "dismantling iclass"-paper. @@ -218,14 +216,14 @@ void SimulateIClass(uint32_t arg0, uint32_t arg1, uint32_t arg2, uint8_t *datain memcpy(emulator, datain + (i * 8), 8); // keyroll 1 - if (doIClassSimulation(MODE_EXIT_AFTER_MAC, mac_responses + i * EPURSE_MAC_SIZE)) { + if (doIClassSimulation(ICLASS_SIM_MODE_EXIT_AFTER_MAC, mac_responses + i * EPURSE_MAC_SIZE)) { reply_old(CMD_ACK, CMD_HF_ICLASS_SIMULATE, i * 2, 0, mac_responses, i * EPURSE_MAC_SIZE * 2); // Button pressed goto out; } // keyroll 2 - if (doIClassSimulation(MODE_EXIT_AFTER_MAC, mac_responses + (i + numberOfCSNS) * EPURSE_MAC_SIZE)) { + if (doIClassSimulation(ICLASS_SIM_MODE_EXIT_AFTER_MAC, mac_responses + (i + numberOfCSNS) * EPURSE_MAC_SIZE)) { reply_old(CMD_ACK, CMD_HF_ICLASS_SIMULATE, i * 2, 0, mac_responses, i * EPURSE_MAC_SIZE * 2); // Button pressed goto out; @@ -237,7 +235,7 @@ void SimulateIClass(uint32_t arg0, uint32_t arg1, uint32_t arg2, uint8_t *datain } else { // We may want a mode here where we hardcode the csns to use (from proxclone). // That will speed things up a little, but not required just yet. - DbpString("[-] the mode is not implemented, reserved for future use"); + DbpString("the mode is not implemented, reserved for future use"); } out: @@ -471,116 +469,139 @@ int doIClassSimulation(int simulationMode, uint8_t *reader_mac_buf) { block = receivedCmd[1]; if (cmd == ICLASS_CMD_ACTALL && len == 1) { // 0x0A - // Reader in anticollission phase + // Reader in anti collision phase if (chip_state != HALTED) { modulated_response = resp_sof; modulated_response_size = resp_sof_len; chip_state = ACTIVATED; + } + goto send; + + } else if (cmd == ICLASS_CMD_READ_OR_IDENTIFY && len == 1) { // 0x0C + // Reader asks for anti collision CSN + if (chip_state == SELECTED || chip_state == ACTIVATED) { + modulated_response = resp_anticoll; + modulated_response_size = resp_anticoll_len; + trace_data = anticoll_data; + trace_data_size = sizeof(anticoll_data); + } + goto send; + + } else if (cmd == ICLASS_CMD_READ_OR_IDENTIFY && len == 4) { // 0x0C + + if (chip_state != SELECTED) { goto send; } - - } else if (cmd == ICLASS_CMD_READ_OR_IDENTIFY) { // 0x0C - if (len == 1) { - // Reader asks for anticollission CSN - if (chip_state == SELECTED || chip_state == ACTIVATED) { - modulated_response = resp_anticoll; - modulated_response_size = resp_anticoll_len; //order = 2; - trace_data = anticoll_data; - trace_data_size = sizeof(anticoll_data); + // block0,1,2,5 is always readable. + switch (block) { + case 0: { // csn (0c 00) + modulated_response = resp_csn; + modulated_response_size = resp_csn_len; + trace_data = csn_data; + trace_data_size = sizeof(csn_data); goto send; } - } + case 1: { // configuration (0c 01) + modulated_response = resp_conf; + modulated_response_size = resp_conf_len; + trace_data = conf_block; + trace_data_size = sizeof(conf_block); + goto send; + } + case 2: {// e-purse (0c 02) + modulated_response = resp_cc; + modulated_response_size = resp_cc_len; + trace_data = card_challenge_data; + trace_data_size = sizeof(card_challenge_data); + // set epurse of sim2,4 attack + if (reader_mac_buf != NULL) { + memcpy(reader_mac_buf, card_challenge_data, 8); + } + goto send; + } + case 3: + case 4: { // Kd, Kc, always respond with 0xff bytes + modulated_response = resp_ff; + modulated_response_size = resp_ff_len; + trace_data = ff_data; + trace_data_size = sizeof(ff_data); + goto send; + } + case 5: { // Application Issuer Area (0c 05) + modulated_response = resp_aia; + modulated_response_size = resp_aia_len; + trace_data = aia_data; + trace_data_size = sizeof(aia_data); + goto send; + } + default : { + if (simulationMode == ICLASS_SIM_MODE_FULL) { // 0x0C + //Read block + //Take the data... + memcpy(data_generic_trace, emulator + (block << 3), 8); + AddCrc(data_generic_trace, 8); + trace_data = data_generic_trace; + trace_data_size = 10; + CodeIso15693AsTag(trace_data, trace_data_size); + memcpy(modulated_response, ts->buf, ts->max); + modulated_response_size = ts->max; + } + goto send; + } + } // swith - if (len == 4) { - if (chip_state == SELECTED) { - // block0,1,2,5 is always readable. - switch (block) { - case 0: { // csn (0c 00) - modulated_response = resp_csn; - modulated_response_size = resp_csn_len; - trace_data = csn_data; - trace_data_size = sizeof(csn_data); - goto send; - } - case 1: { // configuration (0c 01) - modulated_response = resp_conf; - modulated_response_size = resp_conf_len; - trace_data = conf_block; - trace_data_size = sizeof(conf_block); - goto send; - } - case 2: {// e-purse (0c 02) - modulated_response = resp_cc; - modulated_response_size = resp_cc_len; - trace_data = card_challenge_data; - trace_data_size = sizeof(card_challenge_data); - // set epurse of sim2,4 attack - if (reader_mac_buf != NULL) { - memcpy(reader_mac_buf, card_challenge_data, 8); - } - goto send; - } - case 3: - case 4: { // Kd, Kc, always respond with 0xff bytes - modulated_response = resp_ff; - modulated_response_size = resp_ff_len; - trace_data = ff_data; - trace_data_size = sizeof(ff_data); - goto send; - } - case 5: { // Application Issuer Area (0c 05) - modulated_response = resp_aia; - modulated_response_size = resp_aia_len; - trace_data = aia_data; - trace_data_size = sizeof(aia_data); - goto send; - } - default : { - if (simulationMode == ICLASS_SIM_MODE_FULL) { // 0x0C - //Read block - //Take the data... - memcpy(data_generic_trace, emulator + (block << 3), 8); - AddCrc(data_generic_trace, 8); - trace_data = data_generic_trace; - trace_data_size = 10; - CodeIso15693AsTag(trace_data, trace_data_size); - memcpy(modulated_response, ts->buf, ts->max); - modulated_response_size = ts->max; - goto send; - } - break; - } - } // swith - } // selected - } // if 4 - } else if (cmd == ICLASS_CMD_SELECT) { // 0x81 + } else if (cmd == ICLASS_CMD_SELECT && len == 9) { // 0x81 // Reader selects anticollission CSN. // Tag sends the corresponding real CSN - modulated_response = resp_csn; - modulated_response_size = resp_csn_len; //order = 3; - trace_data = csn_data; - trace_data_size = sizeof(csn_data); + if (chip_state == ACTIVATED || chip_state == SELECTED) { + if (!memcmp(receivedCmd + 1, anticoll_data, 8)) { + modulated_response = resp_csn; + modulated_response_size = resp_csn_len; + trace_data = csn_data; + trace_data_size = sizeof(csn_data); + chip_state = SELECTED; + } else { + chip_state = IDLE; + } + } else if (chip_state == HALTED) { + // RESELECT with CSN + if (!memcmp(receivedCmd + 1, csn_data, 8)) { + modulated_response = resp_csn; + modulated_response_size = resp_csn_len; + trace_data = csn_data; + trace_data_size = sizeof(csn_data); + chip_state = SELECTED; + } + } goto send; } else if (cmd == ICLASS_CMD_READCHECK) { // 0x88 // Read e-purse KD (88 02) KC (18 02) - if (chip_state == SELECTED) { - if ( ICLASS_DEBIT(cmd) ){ - cipher_state = &cipher_state_KD[current_page]; - diversified_key = diversified_kd; - } else { - cipher_state = &cipher_state_KC[current_page]; - diversified_key = diversified_kc; - } - modulated_response = resp_cc; - modulated_response_size = resp_cc_len; - trace_data = card_challenge_data; - trace_data_size = sizeof(card_challenge_data); + if (chip_state != SELECTED) { goto send; } - } else if (cmd == ICLASS_CMD_CHECK) { // 0x05 + if ( ICLASS_DEBIT(cmd) ){ + cipher_state = &cipher_state_KD[current_page]; + diversified_key = diversified_kd; + } else { + cipher_state = &cipher_state_KC[current_page]; + diversified_key = diversified_kc; + } + + modulated_response = resp_cc; + modulated_response_size = resp_cc_len; + trace_data = card_challenge_data; + trace_data_size = sizeof(card_challenge_data); + goto send; + + } else if (cmd == ICLASS_CMD_CHECK && len == 9) { // 0x05 + // Reader random and reader MAC!!! + if (chip_state != SELECTED) { + goto send; + } + if (simulationMode == ICLASS_SIM_MODE_FULL) { // NR, from reader, is in receivedCmd +1 opt_doTagMAC_2(*cipher_state, receivedCmd + 1, data_generic_trace, diversified_key); @@ -598,17 +619,18 @@ int doIClassSimulation(int simulationMode, uint8_t *reader_mac_buf) { modulated_response_size = 0; trace_data = NULL; trace_data_size = 0; + chip_state = HALTED; - if (simulationMode == MODE_EXIT_AFTER_MAC) { + if (simulationMode == ICLASS_SIM_MODE_EXIT_AFTER_MAC) { if (DBGLEVEL == DBG_EXTENDED) { - Dbprintf("[+] CSN: %02x %02x %02x %02x %02x %02x %02x %02x", csn[0], csn[1], csn[2], csn[3], csn[4], csn[5], csn[6], csn[7]); - Dbprintf("[+] RDR: (len=%02d): %02x %02x %02x %02x %02x %02x %02x %02x %02x", len, + Dbprintf("CSN: %02x %02x %02x %02x %02x %02x %02x %02x", csn[0], csn[1], csn[2], csn[3], csn[4], csn[5], csn[6], csn[7]); + Dbprintf("RDR: (len=%02d): %02x %02x %02x %02x %02x %02x %02x %02x %02x", len, receivedCmd[0], receivedCmd[1], receivedCmd[2], receivedCmd[3], receivedCmd[4], receivedCmd[5], receivedCmd[6], receivedCmd[7], receivedCmd[8]); } else { - Dbprintf("[+] CSN: %02x .... %02x OK", csn[0], csn[7]); + Dbprintf("CSN: %02x .... %02x OK", csn[0], csn[7]); } if (reader_mac_buf != NULL) { // save NR and MAC for sim 2,4 @@ -616,119 +638,130 @@ int doIClassSimulation(int simulationMode, uint8_t *reader_mac_buf) { } exit_loop = true; } + } goto send; } else if (cmd == ICLASS_CMD_HALT && options == 0 && len == 1) { - if (chip_state == SELECTED) { - // Reader ends the session - modulated_response = resp_sof; - modulated_response_size = resp_sof_len; - chip_state = HALTED; + if (chip_state != SELECTED) { goto send; } + // Reader ends the session + modulated_response = resp_sof; + modulated_response_size = resp_sof_len; + chip_state = HALTED; + goto send; } else if (simulationMode == ICLASS_SIM_MODE_FULL && cmd == ICLASS_CMD_READ4 && len == 4) { // 0x06 - if (chip_state == SELECTED) { - //Read block - memcpy(data_generic_trace, emulator + (current_page * page_size) + (block * 8), 8 * 4); - AddCrc(data_generic_trace, 8 * 4); - trace_data = data_generic_trace; - trace_data_size = 34; - CodeIso15693AsTag(trace_data, trace_data_size); - memcpy(modulated_response, ts->buf, ts->max); - modulated_response_size = ts->max; + if (chip_state != SELECTED) { goto send; } + //Read block + memcpy(data_generic_trace, emulator + (current_page * page_size) + (block * 8), 8 * 4); + AddCrc(data_generic_trace, 8 * 4); + trace_data = data_generic_trace; + trace_data_size = 34; + CodeIso15693AsTag(trace_data, trace_data_size); + memcpy(modulated_response, ts->buf, ts->max); + modulated_response_size = ts->max; + goto send; } else if (simulationMode == ICLASS_SIM_MODE_FULL && cmd == ICLASS_CMD_UPDATE && (len == 12 || len == 14)) { // We're expected to respond with the data+crc, exactly what's already in the receivedCmd // receivedCmd is now UPDATE 1b | ADDRESS 1b | DATA 8b | Signature 4b or CRC 2b - if (chip_state == SELECTED) { + if (chip_state != SELECTED) { + goto send; + } - if (block == 2) { // update e-purse - memcpy(card_challenge_data, receivedCmd + 2, 8); - CodeIso15693AsTag(card_challenge_data, sizeof(card_challenge_data)); - memcpy(resp_cc, ts->buf, ts->max); - resp_cc_len = ts->max; - cipher_state_KD[current_page] = opt_doTagMAC_1(card_challenge_data, diversified_kd); - cipher_state_KC[current_page] = opt_doTagMAC_1(card_challenge_data, diversified_kc); - - } else if (block == 3) { // update Kd - for (int i = 0; i < 8; i++) { - if (personalization_mode) { - diversified_kd[i] = receivedCmd[2 + i]; - } else { - diversified_kd[i] ^= receivedCmd[2 + i]; - } + if (block == 2) { // update e-purse + memcpy(card_challenge_data, receivedCmd + 2, 8); + CodeIso15693AsTag(card_challenge_data, sizeof(card_challenge_data)); + memcpy(resp_cc, ts->buf, ts->max); + resp_cc_len = ts->max; + cipher_state_KD[current_page] = opt_doTagMAC_1(card_challenge_data, diversified_kd); + cipher_state_KC[current_page] = opt_doTagMAC_1(card_challenge_data, diversified_kc); + + } else if (block == 3) { // update Kd + for (int i = 0; i < 8; i++) { + if (personalization_mode) { + diversified_kd[i] = receivedCmd[2 + i]; + } else { + diversified_kd[i] ^= receivedCmd[2 + i]; } - cipher_state_KD[current_page] = opt_doTagMAC_1(card_challenge_data, diversified_kd); - - } else if (block == 4) { // update Kc - for (int i = 0; i < 8; i++) { - if (personalization_mode) { - diversified_kc[i] = receivedCmd[2 + i]; - } else { - diversified_kc[i] ^= receivedCmd[2 + i]; - } - } - cipher_state_KC[current_page] = opt_doTagMAC_1(card_challenge_data, diversified_kc); } - - // update emulator + cipher_state_KD[current_page] = opt_doTagMAC_1(card_challenge_data, diversified_kd); + if (simulationMode == ICLASS_SIM_MODE_FULL) { + memcpy(emulator + (current_page * page_size) + (8 * 3), diversified_kd, 8); + } + } else if (block == 4) { // update Kc + for (int i = 0; i < 8; i++) { + if (personalization_mode) { + diversified_kc[i] = receivedCmd[2 + i]; + } else { + diversified_kc[i] ^= receivedCmd[2 + i]; + } + } + cipher_state_KC[current_page] = opt_doTagMAC_1(card_challenge_data, diversified_kc); + if (simulationMode == ICLASS_SIM_MODE_FULL) { + memcpy(emulator + (current_page * page_size) + (8 * 4), diversified_kc, 8); + } + } else if (simulationMode == ICLASS_SIM_MODE_FULL) { + // update emulator memory memcpy(emulator + (current_page * page_size) + (8 * block), receivedCmd + 2, 8); + } - memcpy(data_generic_trace, receivedCmd + 2, 8); + memcpy(data_generic_trace, receivedCmd + 2, 8); + AddCrc(data_generic_trace, 8); + trace_data = data_generic_trace; + trace_data_size = 10; + CodeIso15693AsTag(trace_data, trace_data_size); + memcpy(data_response, ts->buf, ts->max); + modulated_response = data_response; + modulated_response_size = ts->max; + goto send; + + } else if (cmd == ICLASS_CMD_PAGESEL && len == 4) { // 0x84 + // Pagesel, + // - enables to select a page in the selected chip memory and return its configuration block + // Chips with a single page will not answer to this command + // Otherwise, we should answer 8bytes (conf block 1) + 2bytes CRC + if (chip_state != SELECTED) { + goto send; + } + + if (simulationMode == ICLASS_SIM_MODE_FULL && max_page > 0) { + + current_page = receivedCmd[1]; + + memcpy(data_generic_trace, emulator + (current_page * page_size) + (8 * 1), 8); + memcpy(diversified_kd, emulator + (current_page * page_size) + (8 * 3), 8); + memcpy(diversified_kc, emulator + (current_page * page_size) + (8 * 4), 8); + + cipher_state = &cipher_state_KD[current_page]; + + personalization_mode = data_generic_trace[7] & 0x80; AddCrc(data_generic_trace, 8); + trace_data = data_generic_trace; trace_data_size = 10; + CodeIso15693AsTag(trace_data, trace_data_size); memcpy(data_response, ts->buf, ts->max); modulated_response = data_response; modulated_response_size = ts->max; } goto send; - - } else if (receivedCmd[0] == ICLASS_CMD_PAGESEL && len == 4) { // 0x84 - // Pagesel, - // - enables to select a page in the selected chip memory and return its configuration block - // Chips with a single page will not answer to this command - // Otherwise, we should answer 8bytes (conf block 1) + 2bytes CRC - if (chip_state == SELECTED) { - - if (simulationMode == ICLASS_SIM_MODE_FULL && max_page > 0) { - - current_page = receivedCmd[1]; - - memcpy(data_generic_trace, emulator + (current_page * page_size) + (8 * 1), 8); - memcpy(diversified_kd, emulator + (current_page * page_size) + (8 * 3), 8); - memcpy(diversified_kc, emulator + (current_page * page_size) + (8 * 4), 8); - - cipher_state = &cipher_state_KD[current_page]; - - personalization_mode = data_generic_trace[7] & 0x80; - AddCrc(data_generic_trace, 8); - - trace_data = data_generic_trace; - trace_data_size = 10; - - CodeIso15693AsTag(trace_data, trace_data_size); - memcpy(data_response, ts->buf, ts->max); - modulated_response = data_response; - modulated_response_size = ts->max; - } - } -// } else if(receivedCmd[0] == ICLASS_CMD_DETECT) { // 0x0F - } else if (receivedCmd[0] == 0x26 && len == 5) { +// } else if(cmd == ICLASS_CMD_DETECT) { // 0x0F + } else if (cmd == 0x26 && len == 5) { // standard ISO15693 INVENTORY command. Ignore. } else { // Never seen this command before if (DBGLEVEL >= DBG_EXTENDED) - print_result("[-] Unhandled command received ", receivedCmd, len); + print_result("Unhandled command received ", receivedCmd, len); } send: @@ -745,7 +778,7 @@ send: LEDsoff(); if (button_pressed) - DbpString("[+] button pressed"); + DbpString("button pressed"); return button_pressed; } From 0f507c24e1722f868bebb598c03f4cce9c9e6eaa Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Tue, 14 Jul 2020 00:16:25 +0200 Subject: [PATCH 0095/1047] chg: readblock assuming better --- client/src/cmdhficlass.c | 45 ++++++++++++++++++++++++++-------------- 1 file changed, 29 insertions(+), 16 deletions(-) diff --git a/client/src/cmdhficlass.c b/client/src/cmdhficlass.c index b4fc7dcb2..4d21ca3d1 100644 --- a/client/src/cmdhficlass.c +++ b/client/src/cmdhficlass.c @@ -371,6 +371,15 @@ typedef enum { TRIPLEDES } BLOCK79ENCRYPTION; +static inline uint32_t leadingzeros(uint64_t a) { +#if defined __GNUC__ + return __builtin_clzll(a); +#else + return 0; +#endif +} + + static uint8_t isset(uint8_t val, uint8_t mask) { return (val & mask); } @@ -1857,14 +1866,14 @@ static int iclass_read_block(uint8_t *KEY, uint8_t blockno, uint8_t keyType, boo DropField(); - PrintAndLogEx(SUCCESS, "block %02X: " _GREEN_("%s"), blockno, sprint_hex(result->blockdata, sizeof(result->blockdata))); + PrintAndLogEx(SUCCESS, " block %02X : " _GREEN_("%s"), blockno, sprint_hex(result->blockdata, sizeof(result->blockdata))); if (memcmp(result->blockdata, empty, 8) == 0) return PM3_SUCCESS; if (blockno < 6 || blockno > 7) return PM3_SUCCESS; - + bool use_sc = IsCryptoHelperPresent(verbose); if (use_sc == false) return PM3_SUCCESS; @@ -1876,10 +1885,16 @@ static int iclass_read_block(uint8_t *KEY, uint8_t blockno, uint8_t keyType, boo break; } case 7: { - PrintAndLogEx(INFO, "Trying to decrypt..."); - + PrintAndLogEx(INFO, "-----------------------------------------------------------------"); uint8_t dec_data[8]; - Decrypt(result->blockdata, dec_data); + uint64_t a = bytes_to_num(result->blockdata, 8); + if (leadingzeros(a) < 16) { + PrintAndLogEx(INFO, "data looks encrypted, false positive is possible"); + Decrypt(result->blockdata, dec_data); + PrintAndLogEx(SUCCESS, "decrypted : " _GREEN_("%s"), sprint_hex(dec_data, sizeof(dec_data))); + } else { + PrintAndLogEx(INFO, "data looks unencrypted, trying to decode"); + } if (memcmp(dec_data, empty, 8) != 0) { @@ -1889,28 +1904,26 @@ static int iclass_read_block(uint8_t *KEY, uint8_t blockno, uint8_t keyType, boo mid = bytes_to_num(dec_data, 4); bot = bytes_to_num(dec_data + 4, 4); - PrintAndLogEx(INFO, "Binary"); - - char hexstr[8 + 1] = {0}; + char hexstr[16 + 1] = {0}; hex_to_buffer((uint8_t *)hexstr, dec_data, 8, sizeof(hexstr) - 1, 0, 0, true); - - char binstr[8 * 8 + 1] = {0}; + char binstr[64 + 1] = {0}; hextobinstring(binstr, hexstr); uint8_t i = 0; while (i < strlen(binstr) && binstr[i++] == '0'); - PrintAndLogEx(SUCCESS, "%s", binstr + i); - + i &= 0x3C; + PrintAndLogEx(SUCCESS, " bin : %s", binstr + i); PrintAndLogEx(INFO, "-----------------------------------------------------------------"); wiegand_message_t packed = initialize_message_object(top, mid, bot); HIDTryUnpack(&packed, true); - PrintAndLogEx(INFO, "-----------------------------------------------------------------"); } else { - PrintAndLogEx(INFO, "No credential found."); + PrintAndLogEx(INFO, "no credential found"); } - } - } + PrintAndLogEx(INFO, "-----------------------------------------------------------------"); + break; + } + } return PM3_SUCCESS; } From 889d1c93cb0ad63f02315e49174876fbba6bc360 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Tue, 14 Jul 2020 15:25:56 +0200 Subject: [PATCH 0096/1047] fix: coverity mem leak --- client/src/cmdhficlass.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/client/src/cmdhficlass.c b/client/src/cmdhficlass.c index 4d21ca3d1..4f51042e9 100644 --- a/client/src/cmdhficlass.c +++ b/client/src/cmdhficlass.c @@ -536,9 +536,11 @@ static int CmdHFiClassSniff(const char *Cmd) { arg_lit0("j", "jam", "Jam (prevent) e-purse updates"), arg_param_end }; - CLIExecWithReturn(ctx, Cmd, argtable, true); - + + CLIExecWithReturn(ctx, Cmd, argtable, true); bool jam_epurse_update = arg_get_lit(ctx, 1); + CLIParserFree(ctx); + const uint8_t update_epurse_sequence[2] = {0x87, 0x02}; struct { @@ -1888,7 +1890,7 @@ static int iclass_read_block(uint8_t *KEY, uint8_t blockno, uint8_t keyType, boo PrintAndLogEx(INFO, "-----------------------------------------------------------------"); uint8_t dec_data[8]; uint64_t a = bytes_to_num(result->blockdata, 8); - if (leadingzeros(a) < 16) { + if (leadingzeros(a) < 12) { PrintAndLogEx(INFO, "data looks encrypted, false positive is possible"); Decrypt(result->blockdata, dec_data); PrintAndLogEx(SUCCESS, "decrypted : " _GREEN_("%s"), sprint_hex(dec_data, sizeof(dec_data))); From bac126530c68afa798fd4574e19cb7804886b170 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Tue, 14 Jul 2020 15:43:54 +0200 Subject: [PATCH 0097/1047] prep for stand mode --- armsrc/iclass.c | 75 ++++++++++++++++++++++++++++++++++++------------- armsrc/iclass.h | 4 ++- 2 files changed, 58 insertions(+), 21 deletions(-) diff --git a/armsrc/iclass.c b/armsrc/iclass.c index d7c57ee01..078da13e5 100644 --- a/armsrc/iclass.c +++ b/armsrc/iclass.c @@ -147,6 +147,10 @@ static void CodeIClassTagSOF(void) { */ // turn off afterwards void SimulateIClass(uint32_t arg0, uint32_t arg1, uint32_t arg2, uint8_t *datain) { + iclass_simulate(arg0, arg1, arg2, datain, NULL, NULL); +} + +void iclass_simulate(uint8_t sim_type, uint8_t num_csns, bool send_reply, uint8_t *datain, uint8_t *dataout, uint16_t *dataoutlen) { LEDsoff(); @@ -155,54 +159,63 @@ void SimulateIClass(uint32_t arg0, uint32_t arg1, uint32_t arg2, uint8_t *datain clear_trace(); set_tracing(true); - uint32_t simType = arg0; - uint32_t numberOfCSNS = arg1; - //Use the emulator memory for SIM uint8_t *emulator = BigBuf_get_EM_addr(); uint8_t mac_responses[PM3_CMD_DATA_SIZE] = { 0 }; - if (simType == ICLASS_SIM_MODE_CSN) { + if (sim_type == ICLASS_SIM_MODE_CSN) { // Use the CSN from commandline memcpy(emulator, datain, 8); doIClassSimulation(ICLASS_SIM_MODE_CSN, NULL); - } else if (simType == ICLASS_SIM_MODE_CSN_DEFAULT) { + + } else if (sim_type == ICLASS_SIM_MODE_CSN_DEFAULT) { //Default CSN uint8_t csn[] = { 0x03, 0x1f, 0xec, 0x8a, 0xf7, 0xff, 0x12, 0xe0 }; // Use the CSN from commandline memcpy(emulator, csn, 8); doIClassSimulation(ICLASS_SIM_MODE_CSN, NULL); - } else if (simType == ICLASS_SIM_MODE_READER_ATTACK) { - Dbprintf("going into attack mode, %d CSNS sent", numberOfCSNS); + } else if (sim_type == ICLASS_SIM_MODE_READER_ATTACK) { + + Dbprintf("going into attack mode, %d CSNS sent", num_csns); // In this mode, a number of csns are within datain. We'll simulate each one, one at a time // in order to collect MAC's from the reader. This can later be used in an offlne-attack // in order to obtain the keys, as in the "dismantling iclass"-paper. #define EPURSE_MAC_SIZE 16 int i = 0; - for (; i < numberOfCSNS && i * EPURSE_MAC_SIZE + 8 < PM3_CMD_DATA_SIZE; i++) { + for (; i < num_csns && i * EPURSE_MAC_SIZE + 8 < PM3_CMD_DATA_SIZE; i++) { memcpy(emulator, datain + (i * 8), 8); if (doIClassSimulation(ICLASS_SIM_MODE_EXIT_AFTER_MAC, mac_responses + i * EPURSE_MAC_SIZE)) { + + if (dataoutlen) + *dataoutlen = i * EPURSE_MAC_SIZE; + // Button pressed - reply_old(CMD_ACK, CMD_HF_ICLASS_SIMULATE, i, 0, mac_responses, i * EPURSE_MAC_SIZE); + if (send_reply) + reply_old(CMD_ACK, CMD_HF_ICLASS_SIMULATE, i, 0, mac_responses, i * EPURSE_MAC_SIZE); goto out; } } - reply_old(CMD_ACK, CMD_HF_ICLASS_SIMULATE, i, 0, mac_responses, i * EPURSE_MAC_SIZE); + if (dataoutlen) + *dataoutlen = i * EPURSE_MAC_SIZE; - } else if (simType == ICLASS_SIM_MODE_FULL) { + if (send_reply) + reply_old(CMD_ACK, CMD_HF_ICLASS_SIMULATE, i, 0, mac_responses, i * EPURSE_MAC_SIZE); + + } else if (sim_type == ICLASS_SIM_MODE_FULL) { //This is 'full sim' mode, where we use the emulator storage for data. //ie: BigBuf_get_EM_addr should be previously filled with data from the "eload" command doIClassSimulation(ICLASS_SIM_MODE_FULL, NULL); - } else if (simType == ICLASS_SIM_MODE_READER_ATTACK_KEYROLL) { + + } else if (sim_type == ICLASS_SIM_MODE_READER_ATTACK_KEYROLL) { // This is the KEYROLL version of sim 2. // the collected data (mac_response) is doubled out since we are trying to collect both keys in the keyroll process. // Keyroll iceman 9 csns * 8 * 2 = 144 // keyroll CARL55 15csns * 8 * 2 = 15 * 8 * 2 = 240 - Dbprintf("going into attack keyroll mode, %d CSNS sent", numberOfCSNS); + Dbprintf("going into attack keyroll mode, %d CSNS sent", num_csns); // In this mode, a number of csns are within datain. We'll simulate each one, one at a time // in order to collect MAC's from the reader. This can later be used in an offlne-attack // in order to obtain the keys, as in the "dismantling iclass"-paper. @@ -211,27 +224,44 @@ void SimulateIClass(uint32_t arg0, uint32_t arg1, uint32_t arg2, uint8_t *datain // attack below is same as SIM 2, but we run the CSN twice to collected the mac for both keys. int i = 0; // The usb data is 512 bytes, fitting 65 8-byte CSNs in there. iceman fork uses 9 CSNS - for (; i < numberOfCSNS && i * EPURSE_MAC_SIZE + 8 < PM3_CMD_DATA_SIZE; i++) { + for (; i < num_csns && i * EPURSE_MAC_SIZE + 8 < PM3_CMD_DATA_SIZE; i++) { memcpy(emulator, datain + (i * 8), 8); // keyroll 1 if (doIClassSimulation(ICLASS_SIM_MODE_EXIT_AFTER_MAC, mac_responses + i * EPURSE_MAC_SIZE)) { - reply_old(CMD_ACK, CMD_HF_ICLASS_SIMULATE, i * 2, 0, mac_responses, i * EPURSE_MAC_SIZE * 2); + + if (dataoutlen) + *dataoutlen = i * EPURSE_MAC_SIZE * 2; + + if (send_reply) + reply_old(CMD_ACK, CMD_HF_ICLASS_SIMULATE, i * 2, 0, mac_responses, i * EPURSE_MAC_SIZE * 2); + // Button pressed goto out; } // keyroll 2 - if (doIClassSimulation(ICLASS_SIM_MODE_EXIT_AFTER_MAC, mac_responses + (i + numberOfCSNS) * EPURSE_MAC_SIZE)) { - reply_old(CMD_ACK, CMD_HF_ICLASS_SIMULATE, i * 2, 0, mac_responses, i * EPURSE_MAC_SIZE * 2); + if (doIClassSimulation(ICLASS_SIM_MODE_EXIT_AFTER_MAC, mac_responses + (i + num_csns) * EPURSE_MAC_SIZE)) { + + if (dataoutlen) + *dataoutlen = i * EPURSE_MAC_SIZE * 2; + + if (send_reply) + reply_old(CMD_ACK, CMD_HF_ICLASS_SIMULATE, i * 2, 0, mac_responses, i * EPURSE_MAC_SIZE * 2); + // Button pressed goto out; } } - // double the amount of collected data. - reply_old(CMD_ACK, CMD_HF_ICLASS_SIMULATE, i * 2, 0, mac_responses, i * EPURSE_MAC_SIZE * 2); + if (dataoutlen) + *dataoutlen = i * EPURSE_MAC_SIZE * 2; + + // double the amount of collected data. + if (send_reply) + reply_old(CMD_ACK, CMD_HF_ICLASS_SIMULATE, i * 2, 0, mac_responses, i * EPURSE_MAC_SIZE * 2); + } else { // We may want a mode here where we hardcode the csns to use (from proxclone). // That will speed things up a little, but not required just yet. @@ -239,6 +269,9 @@ void SimulateIClass(uint32_t arg0, uint32_t arg1, uint32_t arg2, uint8_t *datain } out: + if (dataout && dataoutlen) + memcpy(dataout, mac_responses, *dataoutlen); + switch_off(); BigBuf_free_keep_EM(); } @@ -683,7 +716,9 @@ int doIClassSimulation(int simulationMode, uint8_t *reader_mac_buf) { resp_cc_len = ts->max; cipher_state_KD[current_page] = opt_doTagMAC_1(card_challenge_data, diversified_kd); cipher_state_KC[current_page] = opt_doTagMAC_1(card_challenge_data, diversified_kc); - + if (simulationMode == ICLASS_SIM_MODE_FULL) { + memcpy(emulator + (current_page * page_size) + (8 * 2), card_challenge_data, 8); + } } else if (block == 3) { // update Kd for (int i = 0; i < 8; i++) { if (personalization_mode) { diff --git a/armsrc/iclass.h b/armsrc/iclass.h index 20a862535..3b4de40f0 100644 --- a/armsrc/iclass.h +++ b/armsrc/iclass.h @@ -14,7 +14,6 @@ #include "common.h" void SniffIClass(uint8_t jam_search_len, uint8_t *jam_search_string); -void SimulateIClass(uint32_t arg0, uint32_t arg1, uint32_t arg2, uint8_t *datain); void ReaderIClass(uint8_t arg0); void ReaderIClass_Replay(uint8_t arg0, uint8_t *mac); void iClass_Authentication(uint8_t *mac); @@ -27,4 +26,7 @@ void iClass_ReadCheck(uint8_t blockno, uint8_t keytype); int doIClassSimulation(int simulationMode, uint8_t *reader_mac_buf); + +void SimulateIClass(uint32_t arg0, uint32_t arg1, uint32_t arg2, uint8_t *datain); +void iclass_simulate(uint8_t sim_type, uint8_t num_csns, bool send_reply, uint8_t *datain, uint8_t *dataout, uint16_t *dataoutlen); #endif From 4dabccf9dbe46853855e454b82ea5cc41ee824f9 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Tue, 14 Jul 2020 15:44:23 +0200 Subject: [PATCH 0098/1047] style --- armsrc/spiffs.c | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/armsrc/spiffs.c b/armsrc/spiffs.c index 025146b55..10c923c14 100644 --- a/armsrc/spiffs.c +++ b/armsrc/spiffs.c @@ -496,10 +496,10 @@ int rdv40_spiffs_read_as_symlink(char *filename, uint8_t *dst, uint32_t size, RD // rdv40_spiffs_read_as_symlink((uint8_t *)"world",(uint8_t *) buffer, orig_file_size, RDV40_SPIFFS_SAFETY_SAFE); // TODO : FORBID creating a symlink with a basename (before.lnk) which already exists as a file ! int rdv40_spiffs_make_symlink(char *linkdest, char *filename, RDV40SpiFFSSafetyLevel level) { - RDV40_SPIFFS_SAFE_FUNCTION( // - char linkfilename[SPIFFS_OBJ_NAME_LEN]; // + RDV40_SPIFFS_SAFE_FUNCTION( + char linkfilename[SPIFFS_OBJ_NAME_LEN]; sprintf(linkfilename, "%s.lnk", filename); - write_to_spiffs((char *)linkfilename, (uint8_t *)linkdest, SPIFFS_OBJ_NAME_LEN); // + write_to_spiffs((char *)linkfilename, (uint8_t *)linkdest, SPIFFS_OBJ_NAME_LEN); ) } @@ -510,20 +510,20 @@ int rdv40_spiffs_make_symlink(char *linkdest, char *filename, RDV40SpiFFSSafetyL // preexistance, avoiding a link being created if filename exists, or avoiding a file being created if // symlink exists with same name int rdv40_spiffs_read_as_filetype(char *filename, uint8_t *dst, uint32_t size, RDV40SpiFFSSafetyLevel level) { - RDV40_SPIFFS_SAFE_FUNCTION( // - RDV40SpiFFSFileType filetype = filetype_in_spiffs((char *)filename); // - switch (filetype) { - case RDV40_SPIFFS_FILETYPE_REAL: - rdv40_spiffs_read((char *)filename, (uint8_t *)dst, size, level); - break; - case RDV40_SPIFFS_FILETYPE_SYMLINK: - rdv40_spiffs_read_as_symlink((char *)filename, (uint8_t *)dst, size, level); - break; - case RDV40_SPIFFS_FILETYPE_BOTH: - case RDV40_SPIFFS_FILETYPE_UNKNOWN: - default: + RDV40_SPIFFS_SAFE_FUNCTION( + RDV40SpiFFSFileType filetype = filetype_in_spiffs((char *)filename); + switch (filetype) { + case RDV40_SPIFFS_FILETYPE_REAL: + rdv40_spiffs_read((char *)filename, (uint8_t *)dst, size, level); + break; + case RDV40_SPIFFS_FILETYPE_SYMLINK: + rdv40_spiffs_read_as_symlink((char *)filename, (uint8_t *)dst, size, level); + break; + case RDV40_SPIFFS_FILETYPE_BOTH: + case RDV40_SPIFFS_FILETYPE_UNKNOWN: + default: ; - } // + } ) } From d2a66cecba6ea66f0e0d7d85b74fb7fe47f27563 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Tue, 14 Jul 2020 15:44:38 +0200 Subject: [PATCH 0099/1047] style --- armsrc/BigBuf.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/armsrc/BigBuf.c b/armsrc/BigBuf.c index f5a64bfa2..7cb440d82 100644 --- a/armsrc/BigBuf.c +++ b/armsrc/BigBuf.c @@ -114,8 +114,6 @@ void BigBuf_free_keep_EM(void) { s_bigbuf_hi = emulator_memory - (uint8_t *)BigBuf; else s_bigbuf_hi = s_bigbuf_size; - - // shouldn't this empty BigBuf also? } void BigBuf_print_status(void) { From ce981d91247bdfc45a4bd568cfc4f2698afd1139 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Tue, 14 Jul 2020 15:46:05 +0200 Subject: [PATCH 0100/1047] fpga 14b merge p.N --- armsrc/iso14443b.c | 322 ++++++++++++++++++++++----------------------- 1 file changed, 159 insertions(+), 163 deletions(-) diff --git a/armsrc/iso14443b.c b/armsrc/iso14443b.c index b06dbcb44..d9d08a966 100644 --- a/armsrc/iso14443b.c +++ b/armsrc/iso14443b.c @@ -138,9 +138,9 @@ static uint32_t iso14b_timeout = TR0; // them yet, just leaves them ready to send in ToSend[]. //----------------------------------------------------------------------------- static void CodeIso14443bAsTag(const uint8_t *cmd, int len) { - int i; + int i; - tosend_reset(); + tosend_reset(); // Transmit a burst of ones, as the initial thing that lets the // reader get phase sync. @@ -152,56 +152,56 @@ static void CodeIso14443bAsTag(const uint8_t *cmd, int len) { // Send TR1. // 10-11 ETU * 4times samples ONES - for (i = 0; i < 20; i++) { - SEND4STUFFBIT(1); - } + for (i = 0; i < 20; i++) { + SEND4STUFFBIT(1); + } // Send SOF. // 10-11 ETU * 4times samples ZEROS - for (i = 0; i < 10; i++) { - SEND4STUFFBIT(0); - } + for (i = 0; i < 10; i++) { + SEND4STUFFBIT(0); + } // 2-3 ETU * 4times samples ONES - for (i = 0; i < 2; i++) { - SEND4STUFFBIT(1); - } + for (i = 0; i < 2; i++) { + SEND4STUFFBIT(1); + } // data - for (i = 0; i < len; i++) { + for (i = 0; i < len; i++) { // Start bit - SEND4STUFFBIT(0); + SEND4STUFFBIT(0); - // Data bits - uint8_t b = cmd[i]; - for (int j = 0; j < 8; j++) { + // Data bits + uint8_t b = cmd[i]; + for (int j = 0; j < 8; j++) { SEND4STUFFBIT(b & 1); - b >>= 1; - } + b >>= 1; + } - // Stop bit - SEND4STUFFBIT(1); + // Stop bit + SEND4STUFFBIT(1); // Extra Guard bit // For PICC it ranges 0-18us (1etu = 9us) //SEND4STUFFBIT(1); - } + } // Send EOF. // 10-11 ETU * 4 sample rate = ZEROS - for(i = 0; i < 10; i++) { - SEND4STUFFBIT(0); - } + for(i = 0; i < 10; i++) { + SEND4STUFFBIT(0); + } // why this? - for(i = 0; i < 2; i++) { - SEND4STUFFBIT(1); - } + for(i = 0; i < 2; i++) { + SEND4STUFFBIT(1); + } tosend_t *ts = get_tosend(); - // Convert from last byte pos to length - ts->max++; + // Convert from last byte pos to length + ts->max++; } //----------------------------------------------------------------------------- @@ -451,10 +451,10 @@ static int GetIso14443bCommandFromReader(uint8_t *received, uint16_t *len) { while (BUTTON_PRESS() == false) { WDT_HIT(); - if(AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_RXRDY)) { - uint8_t b = (uint8_t)AT91C_BASE_SSC->SSC_RHR; - for (uint8_t mask = 0x80; mask != 0x00; mask >>= 1) { - if (Handle14443bReaderUartBit(b & mask)) { + if(AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_RXRDY)) { + uint8_t b = (uint8_t)AT91C_BASE_SSC->SSC_RHR; + for (uint8_t mask = 0x80; mask != 0x00; mask >>= 1) { + if (Handle14443bReaderUartBit(b & mask)) { *len = Uart.byteCnt; return true; } @@ -497,13 +497,13 @@ static void TransmitFor14443b_AsTag(uint8_t *response, uint16_t len) { void SimulateIso14443bTag(uint32_t pupi) { LED_A_ON(); - // the only commands we understand is WUPB, AFI=0, Select All, N=1: + // the only commands we understand is WUPB, AFI=0, Select All, N=1: // static const uint8_t cmdWUPB[] = { ISO14443B_REQB, 0x00, 0x08, 0x39, 0x73 }; // WUPB - // ... and REQB, AFI=0, Normal Request, N=1: + // ... and REQB, AFI=0, Normal Request, N=1: // static const uint8_t cmdREQB[] = { ISO14443B_REQB, 0x00, 0x00, 0x71, 0xFF }; // REQB - // ... and HLTB -// static const uint8_t cmdHLTB[] = { 0x50, 0xff, 0xff, 0xff, 0xff }; // HLTB - // ... and ATTRIB + // ... and HLTB +// static const uint8_t cmdHLTB[] = { 0x50, 0xff, 0xff, 0xff, 0xff }; // HLTB + // ... and ATTRIB // static const uint8_t cmdATTRIB[] = { ISO14443B_ATTRIB, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; // ATTRIB // ... if not PUPI/UID is supplied we always respond with ATQB, PUPI = 820de174, Application Data = 0x20381922, @@ -532,7 +532,7 @@ void SimulateIso14443bTag(uint32_t pupi) { // connect Demodulated Signal to ADC: SetAdcMuxFor(GPIO_MUXSEL_HIPKD); - // Set up the synchronous serial port + // Set up the synchronous serial port FpgaSetupSsc(FPGA_MAJOR_MODE_HF_SIMULATOR); // allocate command receive buffer @@ -720,10 +720,7 @@ static RAMFUNC int Handle14443bTagSamplesDemod(int ci, int cq) { } \ } -// Subcarrier amplitude v = sqrt(ci^2 + cq^2), approximated here by abs(ci) + abs(cq) -// Subcarrier amplitude v = sqrt(ci^2 + cq^2), approximated here by max(abs(ci),abs(cq)) + 1/2*min(abs(ci),abs(cq))) - -#define SUBCARRIER_DETECT_THRESHOLD 8 +#define SUBCARRIER_DETECT_THRESHOLD 8 //note: couldn't we just use MAX(ABS(ci),ABS(cq)) + (MIN(ABS(ci),ABS(cq))/2) from common.h - marshmellow #define CHECK_FOR_SUBCARRIER(void) { v = MAX(myI, myQ) + (MIN(myI, myQ) >> 1); } @@ -773,8 +770,8 @@ static RAMFUNC int Handle14443bTagSamplesDemod(int ci, int cq) { } else { // maximum length of TR1 = 200 1/fs if (Demod.posCount > 200 / 4){ - Demod.state = DEMOD_UNSYNCD; - } + Demod.state = DEMOD_UNSYNCD; + } } Demod.posCount++; break; @@ -792,7 +789,7 @@ static RAMFUNC int Handle14443bTagSamplesDemod(int ci, int cq) { LED_C_ON(); // Got SOF Demod.state = DEMOD_AWAITING_START_BIT; Demod.posCount = 0; - Demod.bitCount = 0; + Demod.bitCount = 0; Demod.len = 0; } } else { @@ -811,12 +808,12 @@ static RAMFUNC int Handle14443bTagSamplesDemod(int ci, int cq) { if (v > 0) { if (Demod.posCount > 6 * 2) { // max 19us between characters = 16 1/fs, max 3 etu after low phase of SOF = 24 1/fs - LED_C_OFF(); - if (Demod.bitCount == 0 && Demod.len == 0) { // received SOF only, this is valid for iClass/Picopass - return true; - } else { - Demod.state = DEMOD_UNSYNCD; - } + LED_C_OFF(); + if (Demod.bitCount == 0 && Demod.len == 0) { // received SOF only, this is valid for iClass/Picopass + return true; + } else { + Demod.state = DEMOD_UNSYNCD; + } } } else { // start bit detected Demod.bitCount = 0; @@ -856,8 +853,8 @@ static RAMFUNC int Handle14443bTagSamplesDemod(int ci, int cq) { // left shift to drop the startbit uint8_t b = (s >> 1); Demod.output[Demod.len] = b; - Demod.len++; - Demod.bitCount = 0; + Demod.len++; + Demod.bitCount = 0; Demod.state = DEMOD_AWAITING_START_BIT; } else { // this one is a bit hard, either its a correc byte or its unsynced. @@ -883,27 +880,26 @@ static RAMFUNC int Handle14443bTagSamplesDemod(int ci, int cq) { /* * Demodulate the samples we received from the tag, also log to tracebuffer - * quiet: set to 'TRUE' to disable debug output */ static int GetTagSamplesFor14443bDemod(int timeout) { - int ret = 0; - int maxBehindBy = 0; - int lastRxCounter, samples = 0; - int8_t ci, cq; + int ret = 0; + int maxBehindBy = 0; + int lastRxCounter, samples = 0; + int8_t ci, cq; uint32_t time_0 = 0, time_stop = 0; BigBuf_free(); - // The response (tag -> reader) that we're receiving. - uint8_t *receivedResponse = BigBuf_malloc(MAX_FRAME_SIZE); + // The response (tag -> reader) that we're receiving. + uint8_t *receivedResponse = BigBuf_malloc(MAX_FRAME_SIZE); - // The DMA buffer, used to stream samples from the FPGA - uint16_t *dmaBuf = (uint16_t*) BigBuf_malloc(ISO14443B_DMA_BUFFER_SIZE * sizeof(uint16_t)); + // The DMA buffer, used to stream samples from the FPGA + uint16_t *dmaBuf = (uint16_t*) BigBuf_malloc(ISO14443B_DMA_BUFFER_SIZE * sizeof(uint16_t)); // Set up the demodulator for tag -> reader responses. Demod14bInit(receivedResponse); - // wait for last transfer to complete - while (!(AT91C_BASE_SSC->SSC_SR & AT91C_SSC_TXEMPTY)) + // wait for last transfer to complete + while (!(AT91C_BASE_SSC->SSC_SR & AT91C_SSC_TXEMPTY)) // Setup and start DMA. FpgaSetupSsc(FPGA_MAJOR_MODE_HF_READER); @@ -912,60 +908,60 @@ static int GetTagSamplesFor14443bDemod(int timeout) { return -1; } - uint16_t *upTo = dmaBuf; - lastRxCounter = ISO14443B_DMA_BUFFER_SIZE; + uint16_t *upTo = dmaBuf; + lastRxCounter = ISO14443B_DMA_BUFFER_SIZE; - // Signal field is ON with the appropriate LED: - LED_D_ON(); + // Signal field is ON with the appropriate LED: + LED_D_ON(); // And put the FPGA in the appropriate mode - FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER | FPGA_HF_READER_SUBCARRIER_848_KHZ | FPGA_HF_READER_MODE_RECEIVE_IQ); + FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER | FPGA_HF_READER_SUBCARRIER_848_KHZ | FPGA_HF_READER_MODE_RECEIVE_IQ); - for(;;) { - int behindBy = (lastRxCounter - AT91C_BASE_PDC_SSC->PDC_RCR) & (ISO14443B_DMA_BUFFER_SIZE-1); - if (behindBy > maxBehindBy) { - maxBehindBy = behindBy; - } + for(;;) { + int behindBy = (lastRxCounter - AT91C_BASE_PDC_SSC->PDC_RCR) & (ISO14443B_DMA_BUFFER_SIZE-1); + if (behindBy > maxBehindBy) { + maxBehindBy = behindBy; + } - if (behindBy < 1) continue; + if (behindBy < 1) continue; - ci = *upTo >> 8; - cq = *upTo; - upTo++; - lastRxCounter--; - if (upTo >= dmaBuf + ISO14443B_DMA_BUFFER_SIZE) { // we have read all of the DMA buffer content. - upTo = dmaBuf; // start reading the circular buffer from the beginning - lastRxCounter += ISO14443B_DMA_BUFFER_SIZE; - } + ci = *upTo >> 8; + cq = *upTo; + upTo++; + lastRxCounter--; + if (upTo >= dmaBuf + ISO14443B_DMA_BUFFER_SIZE) { // we have read all of the DMA buffer content. + upTo = dmaBuf; // start reading the circular buffer from the beginning + lastRxCounter += ISO14443B_DMA_BUFFER_SIZE; + } - if (AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_ENDRX)) { // DMA Counter Register had reached 0, already rotated. - AT91C_BASE_PDC_SSC->PDC_RNPR = (uint32_t) dmaBuf; // refresh the DMA Next Buffer and - AT91C_BASE_PDC_SSC->PDC_RNCR = ISO14443B_DMA_BUFFER_SIZE; // DMA Next Counter registers - } - samples++; + if (AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_ENDRX)) { // DMA Counter Register had reached 0, already rotated. + AT91C_BASE_PDC_SSC->PDC_RNPR = (uint32_t) dmaBuf; // refresh the DMA Next Buffer and + AT91C_BASE_PDC_SSC->PDC_RNCR = ISO14443B_DMA_BUFFER_SIZE; // DMA Next Counter registers + } + samples++; - if (Handle14443bTagSamplesDemod(ci, cq)) { - ret = Demod.len; - break; - } + if (Handle14443bTagSamplesDemod(ci, cq)) { + ret = Demod.len; + break; + } - if(samples > timeout && Demod.state < DEMOD_PHASE_REF_TRAINING) { - ret = -1; - LED_C_OFF(); - break; - } + if(samples > timeout && Demod.state < DEMOD_PHASE_REF_TRAINING) { + ret = -1; + LED_C_OFF(); + break; + } } FpgaDisableSscDma(); - if (ret < 0) { - return ret; - } - - if (Demod.len > 0) { - LogTrace(Demod.output, Demod.len, time_0, time_stop, NULL, false); + if (ret < 0) { + return ret; } - return ret; + if (Demod.len > 0) { + LogTrace(Demod.output, Demod.len, time_0, time_stop, NULL, false); + } + + return ret; } //----------------------------------------------------------------------------- @@ -973,27 +969,27 @@ static int GetTagSamplesFor14443bDemod(int timeout) { //----------------------------------------------------------------------------- static void TransmitFor14443b_AsReader(void) { - FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER | FPGA_HF_READER_MODE_SEND_SHALLOW_MOD); + FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER | FPGA_HF_READER_MODE_SEND_SHALLOW_MOD); - LED_B_ON(); + LED_B_ON(); tosend_t *ts = get_tosend(); - for (int c = 0; c < ts->max; c++) { - uint8_t data = ts->buf[c]; - for (int i = 0; i < 8; i++) { - uint16_t send_word = (data & 0x80) ? 0x0000 : 0xffff; - - while (!(AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_TXRDY))) ; - - AT91C_BASE_SSC->SSC_THR = send_word; - while (!(AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_TXRDY))) ; - AT91C_BASE_SSC->SSC_THR = send_word; + for (int c = 0; c < ts->max; c++) { + uint8_t data = ts->buf[c]; + for (int i = 0; i < 8; i++) { + uint16_t send_word = (data & 0x80) ? 0x0000 : 0xffff; + + while (!(AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_TXRDY))) ; + + AT91C_BASE_SSC->SSC_THR = send_word; + while (!(AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_TXRDY))) ; + AT91C_BASE_SSC->SSC_THR = send_word; - data <<= 1; - } + data <<= 1; + } WDT_HIT(); } - LED_B_OFF(); + LED_B_OFF(); } //----------------------------------------------------------------------------- @@ -1021,7 +1017,7 @@ static void CodeIso14443bAsReader(const uint8_t *cmd, int len) { // Send SOF // 10-11 ETUs of ZERO for (int i = 0; i < 10; i++) - tosend_stuffbit(0); + tosend_stuffbit(0); // 2-3 ETUs of ONE @@ -1057,16 +1053,16 @@ static void CodeIso14443bAsReader(const uint8_t *cmd, int len) { // Send EOF // 10-11 ETUs of ZERO for (int i = 0; i < 10; i++) - tosend_stuffbit(0); + tosend_stuffbit(0); // Transition time. TR0 - guard time // 8ETUS minum? // Per specification, Subcarrier must be stopped no later than 2 ETUs after EOF. // I'm guessing this is for the FPGA to be able to send all bits before we switch to listening mode - - // ensure that last byte is filled up + + // ensure that last byte is filled up for (int i = 0; i < 8 ; ++i) - tosend_stuffbit(1); + tosend_stuffbit(1); // TR1 - Synchronization time // Convert from last character reference to length @@ -1090,7 +1086,7 @@ static void CodeAndTransmit14443bAsReader(const uint8_t *cmd, int len) { * TODO: check CRC and preamble */ uint8_t iso14443b_apdu(uint8_t const *message, size_t message_length, uint8_t *response) { - LED_A_ON(); + LED_A_ON(); uint8_t message_frame[message_length + 4]; // PCB message_frame[0] = 0x0A | pcb_blocknum; @@ -1109,9 +1105,9 @@ uint8_t iso14443b_apdu(uint8_t const *message, size_t message_length, uint8_t *r FpgaDisableTracing(); if (ret < 3) { - LED_A_OFF(); + LED_A_OFF(); return 0; - } + } // VALIDATE CRC if (!check_crc(CRC_14443_B, Demod.output, Demod.len)) { @@ -1123,7 +1119,7 @@ uint8_t iso14443b_apdu(uint8_t const *message, size_t message_length, uint8_t *r memcpy(response, Demod.output, Demod.len); return Demod.len; - LED_A_OFF(); + LED_A_OFF(); } /** @@ -1280,7 +1276,7 @@ void iso14443b_setup(void) { SetAdcMuxFor(GPIO_MUXSEL_HIPKD); // Set up the synchronous serial port - FpgaSetupSsc(FPGA_MAJOR_MODE_HF_READER); + FpgaSetupSsc(FPGA_MAJOR_MODE_HF_READER); // Signal field is on with the appropriate LED FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER | FPGA_HF_READER_MODE_SEND_SHALLOW_MOD); @@ -1439,15 +1435,15 @@ void RAMFUNC SniffIso14443b(void) { iso1444b_setup_sniff(); // The DMA buffer, used to stream samples from the FPGA - uint16_t *dmaBuf = (uint16_t*) BigBuf_malloc(ISO14443B_DMA_BUFFER_SIZE * sizeof(uint16_t)); - uint16_t *upTo = dmaBuf; - int lastRxCounter = ISO14443B_DMA_BUFFER_SIZE; - int8_t ci, cq; - int maxBehindBy = 0; + uint16_t *dmaBuf = (uint16_t*) BigBuf_malloc(ISO14443B_DMA_BUFFER_SIZE * sizeof(uint16_t)); + uint16_t *upTo = dmaBuf; + int lastRxCounter = ISO14443B_DMA_BUFFER_SIZE; + int8_t ci, cq; + int maxBehindBy = 0; - // Count of samples received so far, so that we can include timing - // information in the trace buffer. - int samples = 0; + // Count of samples received so far, so that we can include timing + // information in the trace buffer. + int samples = 0; // Setup and start DMA. if (!FpgaSetupSscDma((uint8_t *) dmaBuf, ISO14443B_DMA_BUFFER_SIZE)) { @@ -1462,38 +1458,38 @@ void RAMFUNC SniffIso14443b(void) { // loop and listen for(;;) { - int behindBy = (lastRxCounter - AT91C_BASE_PDC_SSC->PDC_RCR) & (ISO14443B_DMA_BUFFER_SIZE - 1); - if (behindBy > maxBehindBy) { - maxBehindBy = behindBy; - } + int behindBy = (lastRxCounter - AT91C_BASE_PDC_SSC->PDC_RCR) & (ISO14443B_DMA_BUFFER_SIZE - 1); + if (behindBy > maxBehindBy) { + maxBehindBy = behindBy; + } if (behindBy < 1) continue; - ci = *upTo >> 8; - cq = *upTo; - upTo++; - lastRxCounter--; + ci = *upTo >> 8; + cq = *upTo; + upTo++; + lastRxCounter--; if (upTo >= dmaBuf + ISO14443B_DMA_BUFFER_SIZE) { // we have read all of the DMA buffer content. - upTo = dmaBuf; // start reading the circular buffer from the beginning again - lastRxCounter += ISO14443B_DMA_BUFFER_SIZE; - if (behindBy > (9 * ISO14443B_DMA_BUFFER_SIZE / 10)) { - Dbprintf("About to blow circular buffer - aborted! behindBy=%d", behindBy); - break; - } - } + upTo = dmaBuf; // start reading the circular buffer from the beginning again + lastRxCounter += ISO14443B_DMA_BUFFER_SIZE; + if (behindBy > (9 * ISO14443B_DMA_BUFFER_SIZE / 10)) { + Dbprintf("About to blow circular buffer - aborted! behindBy=%d", behindBy); + break; + } + } if (AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_ENDRX)) { // DMA Counter Register had reached 0, already rotated. - AT91C_BASE_PDC_SSC->PDC_RNPR = (uint32_t) dmaBuf; // refresh the DMA Next Buffer and - AT91C_BASE_PDC_SSC->PDC_RNCR = ISO14443B_DMA_BUFFER_SIZE; // DMA Next Counter registers + AT91C_BASE_PDC_SSC->PDC_RNPR = (uint32_t) dmaBuf; // refresh the DMA Next Buffer and + AT91C_BASE_PDC_SSC->PDC_RNCR = ISO14443B_DMA_BUFFER_SIZE; // DMA Next Counter registers - WDT_HIT(); - if (BUTTON_PRESS()) { - DbpString("Button pressed, cancelled"); - break; - } - } + WDT_HIT(); + if (BUTTON_PRESS()) { + DbpString("Button pressed, cancelled"); + break; + } + } - samples++; + samples++; // no need to try decoding reader data if the tag is sending if (TagIsActive == false) { @@ -1538,7 +1534,7 @@ void RAMFUNC SniffIso14443b(void) { } } - FpgaDisableSscDma(); + FpgaDisableSscDma(); if (DBGLEVEL >= 2) { DbpString("[+] Sniff statistics:"); Dbprintf("[+] uart State: %x ByteCount: %i ByteCountMax: %i", Uart.state, Uart.byteCnt, Uart.byteCntMax); From a95f4b3745481ca38520dc2310a68550dd4b46a5 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Tue, 14 Jul 2020 15:46:32 +0200 Subject: [PATCH 0101/1047] chg: check buttonpress --- armsrc/iso15693.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/armsrc/iso15693.c b/armsrc/iso15693.c index c12e2837b..ff59d260a 100644 --- a/armsrc/iso15693.c +++ b/armsrc/iso15693.c @@ -1066,16 +1066,16 @@ int GetIso15693CommandFromReader(uint8_t *received, size_t max_len, uint32_t *eo samples++; } - if (gotFrame) { - break; - } - if (BUTTON_PRESS()) { DecodeReader.byteCount = -1; break; } WDT_HIT(); + + if (gotFrame) { + break; + } } FpgaDisableSscDma(); From 49192ca4c47665b0478f98cfa1d9d8d772465ec2 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Tue, 14 Jul 2020 15:47:47 +0200 Subject: [PATCH 0102/1047] add: new standalone mode. hf_iceclass --- armsrc/Standalone/Makefile.hal | 7 +- armsrc/Standalone/Makefile.inc | 6 +- armsrc/Standalone/hf_iceclass.c | 163 ++++++++++++++++++++++++++++++++ 3 files changed, 173 insertions(+), 3 deletions(-) create mode 100644 armsrc/Standalone/hf_iceclass.c diff --git a/armsrc/Standalone/Makefile.hal b/armsrc/Standalone/Makefile.hal index c6dc9952e..bd66d538c 100644 --- a/armsrc/Standalone/Makefile.hal +++ b/armsrc/Standalone/Makefile.hal @@ -44,6 +44,9 @@ define KNOWN_STANDALONE_DEFINITIONS | HF_COLIN | Mifare ultra fast sniff/sim/clone | | (RDV4 only) | - Colin Brigato | +----------------------------------------------------------+ +| HF_ICECLASS | Simulate HID iCLASS legacy ags | +| (RDV4 only) | storing in flashmem | ++----------------------------------------------------------+ | HF_LEGIC | Read/simulate Legic Prime tags | | | storing in flashmem | +----------------------------------------------------------+ @@ -59,9 +62,9 @@ define KNOWN_STANDALONE_DEFINITIONS endef STANDALONE_MODES := LF_SKELETON LF_EM4100EMUL LF_EM4100RSWB LF_EM4100RWC LF_HIDBRUTE LF_ICEHID LF_PROXBRUTE LF_SAMYRUN -STANDALONE_MODES += HF_14ASNIFF HF_BOG HF_COLIN HF_LEGIC HF_MATTYRUN HF_MSDSAL HF_YOUNG +STANDALONE_MODES += HF_14ASNIFF HF_BOG HF_COLIN HF_ICECLASS HF_LEGIC HF_MATTYRUN HF_MSDSAL HF_YOUNG STANDALONE_MODES_REQ_SMARTCARD := -STANDALONE_MODES_REQ_FLASH := LF_ICEHID HF_14ASNIFF HF_BOG HF_COLIN +STANDALONE_MODES_REQ_FLASH := LF_ICEHID HF_14ASNIFF HF_BOG HF_COLIN HF_ICECLASS ifneq ($(filter $(STANDALONE),$(STANDALONE_MODES)),) STANDALONE_PLATFORM_DEFS += -DWITH_STANDALONE_$(STANDALONE) ifneq ($(filter $(STANDALONE),$(STANDALONE_MODES_REQ_SMARTCARD)),) diff --git a/armsrc/Standalone/Makefile.inc b/armsrc/Standalone/Makefile.inc index a06cfe75e..131e26e79 100644 --- a/armsrc/Standalone/Makefile.inc +++ b/armsrc/Standalone/Makefile.inc @@ -57,7 +57,11 @@ endif ifneq (,$(findstring WITH_STANDALONE_HF_LEGIC,$(APP_CFLAGS))) SRC_STANDALONE = hf_legic.c endif -# WITH_STANDALONE_LF_MSDSAL +# WITH_STANDALONE_HF_MSDSAL ifneq (,$(findstring WITH_STANDALONE_HF_MSDSAL,$(APP_CFLAGS))) SRC_STANDALONE = hf_msdsal.c endif +# WITH_STANDALONE_HF_ICECLASS +ifneq (,$(findstring WITH_STANDALONE_HF_ICECLASS,$(APP_CFLAGS))) + SRC_STANDALONE = hf_iceclass.c +endif diff --git a/armsrc/Standalone/hf_iceclass.c b/armsrc/Standalone/hf_iceclass.c new file mode 100644 index 000000000..778a9808a --- /dev/null +++ b/armsrc/Standalone/hf_iceclass.c @@ -0,0 +1,163 @@ +//----------------------------------------------------------------------------- +// Christian Herrmann, 2020 +// +// This code is licensed to you under the terms of the GNU GPL, version 2 or, +// at your option, any later version. See the LICENSE.txt file for the text of +// the license. +//----------------------------------------------------------------------------- +// main code for hf_iceclass by Iceman +//----------------------------------------------------------------------------- +#include "standalone.h" // standalone definitions +#include "proxmark3_arm.h" +#include "appmain.h" +#include "BigBuf.h" +#include "fpgaloader.h" +#include "util.h" +#include "dbprint.h" +#include "spiffs.h" +#include "iclass.h" +#include "optimized_cipher.h" + +#define NUM_CSNS 9 +#define MAC_RESPONSES_SIZE (16 * NUM_CSNS) +#define HF_ICLASS_FULLSIM_ORG_BIN "iceclass-orig.bin" +#define HF_ICLASS_FULLSIM_POST_BIN "iceclass-modified.bin" +#define HF_ICLASS_FULLSIM_POST_EML "iceclass-modified-lasttag.bin.eml" +#define HF_ICLASS_ATTACK_BIN "iceclass_mac_attack.bin" + +static uint8_t legacy_aa1_key[] = {0xAE, 0xA6, 0x84, 0xA6, 0xDA, 0xB2, 0x32, 0x78}; + +static uint8_t csns[8 * NUM_CSNS] = { + 0x01, 0x0A, 0x0F, 0xFF, 0xF7, 0xFF, 0x12, 0xE0, + 0x0C, 0x06, 0x0C, 0xFE, 0xF7, 0xFF, 0x12, 0xE0, + 0x10, 0x97, 0x83, 0x7B, 0xF7, 0xFF, 0x12, 0xE0, + 0x13, 0x97, 0x82, 0x7A, 0xF7, 0xFF, 0x12, 0xE0, + 0x07, 0x0E, 0x0D, 0xF9, 0xF7, 0xFF, 0x12, 0xE0, + 0x14, 0x96, 0x84, 0x76, 0xF7, 0xFF, 0x12, 0xE0, + 0x17, 0x96, 0x85, 0x71, 0xF7, 0xFF, 0x12, 0xE0, + 0xCE, 0xC5, 0x0F, 0x77, 0xF7, 0xFF, 0x12, 0xE0, + 0xD2, 0x5A, 0x82, 0xF8, 0xF7, 0xFF, 0x12, 0xE0 + //0x04, 0x08, 0x9F, 0x78, 0x6E, 0xFF, 0x12, 0xE0 +}; + +static void DownloadLogInstructions(uint8_t t) { + Dbprintf(""); + switch (t) { + case ICLASS_SIM_MODE_FULL: { + Dbprintf("The emulator memory was saved to flash. Try the following from flash and display it"); + Dbprintf("1. " _YELLOW_("mem spiffs dump o "HF_ICLASS_FULLSIM_POST_BIN" f "HF_ICLASS_FULLSIM_POST_BIN" e")); + Dbprintf("2. " _YELLOW_("exit proxmark3 client")); + Dbprintf("3. " _YELLOW_("cat "HF_ICLASS_FULLSIM_POST_EML)); + break; + } + case ICLASS_SIM_MODE_READER_ATTACK: { + Dbprintf("The emulator memory was saved to flash. Try the following from flash and display it"); + Dbprintf("1. " _YELLOW_("mem spiffs dump o "HF_ICLASS_FULLSIM_POST_BIN" f "HF_ICLASS_FULLSIM_POST_BIN" e")); + Dbprintf("2. " _YELLOW_("hf iclass loclass f "HF_ICLASS_ATTACK_BIN)); + break; + } + } +} + +void ModInfo(void) { + DbpString(" HF iCLASS mode - aka iceCLASS (iceman)"); +} + +void RunMod(void) { + + FpgaDownloadAndGo(FPGA_BITSTREAM_HF); + BigBuf_Clear(); + + StandAloneMode(); + Dbprintf(_YELLOW_("HF iCLASS mode a.k.a iceCLASS started")); + + uint8_t simtype = ICLASS_SIM_MODE_FULL; + + for (;;) { + WDT_HIT(); + + // exit from RunMod, send a usbcommand. + if (data_available()) break; + + // Was our button held down or pressed? + int button_pressed = BUTTON_HELD(1000); + if (button_pressed != BUTTON_NO_CLICK) { + break; + } + + switch (simtype) { + case ICLASS_SIM_MODE_FULL: { + + Dbprintf("enter full simulation mode"); + + rdv40_spiffs_lazy_mount(); + // Look for a dump file in FLASH MEM. + if (exists_in_spiffs(HF_ICLASS_FULLSIM_ORG_BIN) == false) { + Dbprintf("error, '" _YELLOW_(HF_ICLASS_FULLSIM_ORG_BIN) "' file missing"); + Dbprintf("changing to reader attack mode instead"); + simtype = ICLASS_SIM_MODE_READER_ATTACK; + break; + } + + SpinOff(0); + uint8_t *emul = BigBuf_get_EM_addr(); + uint32_t fsize = size_in_spiffs(HF_ICLASS_FULLSIM_ORG_BIN); + int res = rdv40_spiffs_read_as_filetype(HF_ICLASS_FULLSIM_ORG_BIN, emul, fsize, RDV40_SPIFFS_SAFETY_SAFE); + rdv40_spiffs_lazy_unmount(); + Dbprintf("Found `" _YELLOW_(HF_ICLASS_FULLSIM_ORG_BIN) "` , loaded %u bytes to emulator memory", fsize); + + if ( memcmp(emul + (3 * 8), "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF", 8) == 0) { + // create diversified key if not in dump. + uint8_t ccnr[12] = {0}; + memcpy(ccnr, emul + (2 * 8), 8); + bool use_elite = false; + + iclass_calc_div_key(emul, legacy_aa1_key, emul + (3 * 8), use_elite); + + Dbhexdump(8, emul + (3 * 8), false); + } + + iclass_simulate(ICLASS_SIM_MODE_FULL, 0 , false, NULL, NULL, NULL); + + LED_B_ON(); + rdv40_spiffs_lazy_mount(); + res = rdv40_spiffs_write(HF_ICLASS_FULLSIM_POST_BIN, emul, fsize, RDV40_SPIFFS_SAFETY_SAFE); + rdv40_spiffs_lazy_unmount(); + LED_B_OFF(); + if (res != 0) { + Dbprintf("error writing '"HF_ICLASS_FULLSIM_POST_BIN"' to flash ( %d )", res); + } + DownloadLogInstructions(simtype); + simtype = 0; + break; + } + case ICLASS_SIM_MODE_READER_ATTACK: { + + Dbprintf("enter reader attack mode"); + uint16_t mac_response_len = 0; + uint8_t mac_responses[MAC_RESPONSES_SIZE] = {0}; + + iclass_simulate(ICLASS_SIM_MODE_READER_ATTACK, NUM_CSNS, false, csns, mac_responses, &mac_response_len); + + if (mac_response_len > 0) { + + LED_B_ON(); + rdv40_spiffs_lazy_mount(); + int res = rdv40_spiffs_write(HF_ICLASS_ATTACK_BIN, mac_responses, mac_response_len, RDV40_SPIFFS_SAFETY_SAFE); + rdv40_spiffs_lazy_unmount(); + LED_B_OFF(); + if (res != 0) { + Dbprintf("error writing '"HF_ICLASS_ATTACK_BIN"' to flash ( %d )", res); + } + } + DownloadLogInstructions(simtype); + simtype = 0; + break; + } + } // switch + } // for loop + + + LEDsoff(); + FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); +} From 804e2661f3abf8e8d7a2e39c9bd9a9d9297f881c Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Tue, 14 Jul 2020 15:55:44 +0200 Subject: [PATCH 0103/1047] key file py script - @ikarus --- tools/pm3_key_file_diff.py | 80 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100755 tools/pm3_key_file_diff.py diff --git a/tools/pm3_key_file_diff.py b/tools/pm3_key_file_diff.py new file mode 100755 index 000000000..4069d6684 --- /dev/null +++ b/tools/pm3_key_file_diff.py @@ -0,0 +1,80 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +######################################################################## +# +# Copyright 2018 Gerhard Klostermeier +# +# 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 3 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, see . +# +######################################################################## +# +# Usage: ./key-file-diff.py +# +######################################################################## +# +# Info: +# - Read two key files and show the keys that are in file B but not in A. +# - Keys must be 12 hex characters long and at the beginning of a line. +# +######################################################################## + + +import re + + +def main(args): + """ + Read two key files and show the keys that are in file B but not in A. + :param args: Path to two key files A and B (positional shell parameters). + :return: 0 if everything went fine. + """ + key_file_a = args[1] + key_file_b = args[2] + + with open(key_file_a, 'r') as f: + keys_a = parse_keys(f) + with open(key_file_b, 'r') as f: + keys_b = parse_keys(f) + + # Show all keys that are in B but not in A. + keys_diff = keys_b.difference(keys_a) + for key in keys_diff: + print(key) + + return 0 + + +def parse_keys(file): + """ + Parse keys from a file and return them as a set. + Keys must be 12 hex characters long and at the beginning of a line. + :param file: Path to a file containing keys. + :return: A set of keys read from the file. + """ + keys = set() + key_regex = re.compile('^[0-9a-fA-F]{12}') + for line in file: + key = key_regex.match(line) + try: + key = key.group(0).upper() + keys.add(key) + except AttributeError: + pass + return keys + + +if __name__ == '__main__': + import sys + sys.exit(main(sys.argv)) From 99e61f82c03149e905296998d082bfe9d7d19977 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Tue, 14 Jul 2020 15:57:21 +0200 Subject: [PATCH 0104/1047] rework --- armsrc/Standalone/lf_em4100rwc.c | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/armsrc/Standalone/lf_em4100rwc.c b/armsrc/Standalone/lf_em4100rwc.c index c54e54fa2..7b269e89b 100644 --- a/armsrc/Standalone/lf_em4100rwc.c +++ b/armsrc/Standalone/lf_em4100rwc.c @@ -34,7 +34,7 @@ #endif #define MAX_IND 16 // 4 LEDs - 2^4 combinations -#define CLOCK 64 //for 125kHz +#define LF_CLOCK 64 // for 125kHz // low & high - array for storage IDs. Its length must be equal. // Predefined IDs must be stored in low[]. @@ -57,34 +57,35 @@ static uint64_t rev_quads(uint64_t bits) { } static void fillbuff(uint8_t bit) { - memset(bba + buflen, bit, CLOCK / 2); - buflen += (CLOCK / 2); - memset(bba + buflen, bit ^ 1, CLOCK / 2); - buflen += (CLOCK / 2); + memset(bba + buflen, bit, LF_CLOCK / 2); + buflen += (LF_CLOCK / 2); + memset(bba + buflen, bit ^ 1, LF_CLOCK / 2); + buflen += (LF_CLOCK / 2); } static void construct_EM410x_emul(uint64_t id) { - + + int i, j; int binary[4] = {0}; int parity[4] = {0}; buflen = 0; - for (uint8_t i = 0; i < 9; i++) + for (i = 0; i < 9; i++) fillbuff(1); - for (uint8_t i = 0; i < 10; i++) { - for (uint8_t j = 3; j > 0; j--, id /= 2) + for (i = 0; i < 10; i++) { + for (j = 3; j >= 0; j--, id /= 2) binary[j] = id % 2; - for (uint8_t j = 0; j < 4; j++) + for (j = 0; j < 4; j++) fillbuff(binary[j]); fillbuff(binary[0] ^ binary[1] ^ binary[2] ^ binary[3]); - for (uint8_t j = 0; j < 4; j++) + for (j = 0; j < 4; j++) parity[j] ^= binary[j]; } - for (uint8_t j = 0; j < 4; j++) + for (j = 0; j < 4; j++) fillbuff(parity[j]); fillbuff(0); @@ -207,7 +208,7 @@ void RunMod(void) { state = 0; } else if (button_pressed == BUTTON_SINGLE_CLICK) { // Click - write ID to tag - copy_em410x_to_t55xx(0, CLOCK, (uint32_t)(low[selected] >> 32), (uint32_t)(low[selected] & 0xffffffff)); + copy_em410x_to_t55xx(0, LF_CLOCK, (uint32_t)(low[selected] >> 32), (uint32_t)(low[selected] & 0xffffffff)); led_slot(selected); state = 0; // Switch to select mode } From 091f9fb94cbb0a6255a53c404288f5ec84f4f8a7 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Tue, 14 Jul 2020 23:11:44 +0200 Subject: [PATCH 0105/1047] chg: adapt the eml block size based on filename --- client/src/cmdflashmemspiffs.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/client/src/cmdflashmemspiffs.c b/client/src/cmdflashmemspiffs.c index b994ea56c..d7f2b016c 100644 --- a/client/src/cmdflashmemspiffs.c +++ b/client/src/cmdflashmemspiffs.c @@ -322,7 +322,14 @@ static int CmdFlashMemSpiFFSDump(const char *Cmd) { if (filename[0] != '\0') { saveFile(filename, "", dump, len); if (eml) { - saveFileEML(filename, dump, len, 16); + uint8_t eml_len = 16; + + if (strstr(filename, "iclass") != NULL) + eml_len = 8; + else if (strstr(filename, "mfu") != NULL) + eml_len = 4; + + saveFileEML(filename, dump, len, eml_len); } } From 1a1ebcc330ca306461752d3304c367b94f1513d1 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Tue, 14 Jul 2020 23:12:28 +0200 Subject: [PATCH 0106/1047] adapt for external auth calls --- armsrc/iclass.c | 22 ++++++++++++++++++---- armsrc/iclass.h | 13 ++++++++----- 2 files changed, 26 insertions(+), 9 deletions(-) diff --git a/armsrc/iclass.c b/armsrc/iclass.c index 078da13e5..f232c35ed 100644 --- a/armsrc/iclass.c +++ b/armsrc/iclass.c @@ -1153,6 +1153,10 @@ void iClass_ReadCheck(uint8_t blockno, uint8_t keytype) { // which needs to authenticate before doing more things like read/write // selects and authenticate to a card, sends back div_key and mac to client. void iClass_Authentication(uint8_t *bytes) { + iclass_auth(bytes, true, NULL); +} + +bool iclass_auth(uint8_t *bytes, bool send_reply, uint8_t *dataout) { struct p { uint8_t key[8]; @@ -1176,8 +1180,10 @@ void iClass_Authentication(uint8_t *bytes) { packet.isOK = select_iclass_tag(card_data, payload->use_credit_key, &eof_time); if (packet.isOK == false) { - reply_ng(CMD_HF_ICLASS_AUTH, PM3_ESOFT, (uint8_t *)&packet, sizeof(packet)); - return; + if (send_reply) + reply_ng(CMD_HF_ICLASS_AUTH, PM3_ESOFT, (uint8_t *)&packet, sizeof(packet)); + + return false; } uint32_t start_time = eof_time + DELAY_ICLASS_VICC_TO_VCD_READER; @@ -1201,7 +1207,15 @@ void iClass_Authentication(uint8_t *bytes) { uint8_t resp[ICLASS_BUFFER_SIZE]; packet.isOK = iclass_send_cmd_with_retries(check, sizeof(check), resp, sizeof(resp), 4, 3, start_time, ICLASS_READER_TIMEOUT_OTHERS, &eof_time); - reply_ng(CMD_HF_ICLASS_AUTH, (packet.isOK)? PM3_SUCCESS : PM3_ESOFT, (uint8_t *)&packet, sizeof(packet)); + if (send_reply) + reply_ng(CMD_HF_ICLASS_AUTH, (packet.isOK)? PM3_SUCCESS : PM3_ESOFT, (uint8_t *)&packet, sizeof(packet)); + + if (dataout) { + memcpy(dataout, card_data, sizeof(card_data)); + memcpy(dataout + (3 * 8), packet.div_key, sizeof(packet.div_key)); + } + + return true; } typedef struct iclass_premac { @@ -1300,7 +1314,7 @@ out: // Tries to read block. // retries 10times. -static bool iclass_readblock(uint8_t blockno, uint8_t *data) { +bool iclass_readblock(uint8_t blockno, uint8_t *data) { uint8_t resp[10]; uint8_t c[] = {ICLASS_CMD_READ_OR_IDENTIFY, blockno, 0x00, 0x00}; AddCrc(c + 1, 1); diff --git a/armsrc/iclass.h b/armsrc/iclass.h index 3b4de40f0..fa256c925 100644 --- a/armsrc/iclass.h +++ b/armsrc/iclass.h @@ -16,17 +16,20 @@ void SniffIClass(uint8_t jam_search_len, uint8_t *jam_search_string); void ReaderIClass(uint8_t arg0); void ReaderIClass_Replay(uint8_t arg0, uint8_t *mac); -void iClass_Authentication(uint8_t *mac); -void iClass_Authentication_fast(uint64_t arg0, uint64_t arg1, uint8_t *datain); + void iClass_WriteBlock(uint8_t blockno, uint8_t *data); -void iClass_ReadBlk(uint8_t blockno); void iClass_Dump(uint8_t blockno, uint8_t numblks); void iClass_Clone(uint8_t startblock, uint8_t endblock, uint8_t *data); void iClass_ReadCheck(uint8_t blockno, uint8_t keytype); - int doIClassSimulation(int simulationMode, uint8_t *reader_mac_buf); - void SimulateIClass(uint32_t arg0, uint32_t arg1, uint32_t arg2, uint8_t *datain); void iclass_simulate(uint8_t sim_type, uint8_t num_csns, bool send_reply, uint8_t *datain, uint8_t *dataout, uint16_t *dataoutlen); + +void iClass_Authentication_fast(uint64_t arg0, uint64_t arg1, uint8_t *datain); +void iClass_Authentication(uint8_t *bytes); +bool iclass_auth(uint8_t *bytes, bool send_reply, uint8_t *dataout); + +void iClass_ReadBlk(uint8_t blockno); +bool iclass_readblock(uint8_t blockno, uint8_t *data); #endif From 5039d69c6bc5c412ba9cc22cae2ebc68d18b52bd Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Tue, 14 Jul 2020 23:12:54 +0200 Subject: [PATCH 0107/1047] rename fct --- client/src/cmdhficlass.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/src/cmdhficlass.c b/client/src/cmdhficlass.c index 4f51042e9..2aeb9a03f 100644 --- a/client/src/cmdhficlass.c +++ b/client/src/cmdhficlass.c @@ -1057,7 +1057,7 @@ static int CmdHFiClassDecrypt(const char *Cmd) { return PM3_SUCCESS; } -static void iClassEncryptBlkData(uint8_t *blk_data, uint8_t *key) { +static void iclass_encrypt_block_data(uint8_t *blk_data, uint8_t *key) { uint8_t encrypted_data[16]; uint8_t *encrypted = encrypted_data; mbedtls_des3_context ctx; @@ -1118,7 +1118,7 @@ static int CmdHFiClassEncryptBlk(const char *Cmd) { if (use_sc) { Encrypt(blk_data, blk_data); } else { - iClassEncryptBlkData(blk_data, key); + iclass_encrypt_block_data(blk_data, key); } PrintAndLogEx(SUCCESS, "encrypted block %s", sprint_hex(blk_data, 8)); return PM3_SUCCESS; From c99ed14c6e2486d7e36de3e86c7a17d7c5050338 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 15 Jul 2020 01:29:44 +0200 Subject: [PATCH 0108/1047] textual --- client/src/cmdflashmemspiffs.c | 57 ++++++++++++++++++++-------------- 1 file changed, 33 insertions(+), 24 deletions(-) diff --git a/client/src/cmdflashmemspiffs.c b/client/src/cmdflashmemspiffs.c index d7f2b016c..887784428 100644 --- a/client/src/cmdflashmemspiffs.c +++ b/client/src/cmdflashmemspiffs.c @@ -19,49 +19,58 @@ static int CmdHelp(const char *Cmd); static int usage_flashmemspiffs_remove(void) { - PrintAndLogEx(NORMAL, "Remove a file from spiffs filesystem"); - PrintAndLogEx(NORMAL, " Usage: mem spiffs remove "); + PrintAndLogEx(NORMAL, "Remove a file from spiffs filesystem\n"); + PrintAndLogEx(NORMAL, "Usage: mem spiffs remove "); + PrintAndLogEx(NORMAL, ""); + PrintAndLogEx(NORMAL, "Examples:"); + PrintAndLogEx(NORMAL, _YELLOW_(" mem spiffs remove lasttag.bin")); return PM3_SUCCESS; } static int usage_flashmemspiffs_rename(void) { - PrintAndLogEx(NORMAL, "Rename/move a file in spiffs filesystem"); - PrintAndLogEx(NORMAL, " Usage: mem spiffs rename "); + PrintAndLogEx(NORMAL, "Rename/move a file in spiffs filesystem\n"); + PrintAndLogEx(NORMAL, "Usage: mem spiffs rename "); + PrintAndLogEx(NORMAL, ""); + PrintAndLogEx(NORMAL, "Examples:"); + PrintAndLogEx(NORMAL, _YELLOW_(" mem spiffs rename lasttag.bin oldtag.bin")); return PM3_SUCCESS; } static int usage_flashmemspiffs_copy(void) { - PrintAndLogEx(NORMAL, "Copy a file to another (destructively) in spiffs filesystem"); - PrintAndLogEx(NORMAL, " Usage: mem spiffs copy "); + PrintAndLogEx(NORMAL, "Copy a file to another (destructively) in spiffs filesystem\n"); + PrintAndLogEx(NORMAL, "Usage: mem spiffs copy "); + PrintAndLogEx(NORMAL, ""); + PrintAndLogEx(NORMAL, "Examples:"); + PrintAndLogEx(NORMAL, _YELLOW_(" mem spiffs copy lasttag.bin lasttag_cpy.bin")); return PM3_SUCCESS; } static int usage_flashmemspiffs_dump(void) { PrintAndLogEx(NORMAL, "Dumps flash memory on device into a file or in console"); - PrintAndLogEx(NORMAL, "Size is handled by first sending a STAT command against file existence"); - PrintAndLogEx(NORMAL, " Usage: mem spiffs dump o [f [e]] [p]"); - PrintAndLogEx(NORMAL, " o : filename in SPIFFS"); - PrintAndLogEx(NORMAL, " f : file name to save to"); - PrintAndLogEx(NORMAL, " p : print dump in console"); - PrintAndLogEx(NORMAL, " e : also save in EML format (good for tags save and dictonnary files)"); + PrintAndLogEx(NORMAL, "Size is handled by first sending a STAT command against file existence\n"); + PrintAndLogEx(NORMAL, "Usage: mem spiffs dump o [f [e]] [p]"); + PrintAndLogEx(NORMAL, " o - filename in SPIFFS"); + PrintAndLogEx(NORMAL, " f - file name to save to "); + PrintAndLogEx(NORMAL, " p - print dump in console"); + PrintAndLogEx(NORMAL, " e - also save in EML format (good for tags save and dictonnary files)"); PrintAndLogEx(NORMAL, " You must specify at lease option f or option p, both if you wish"); PrintAndLogEx(NORMAL, ""); PrintAndLogEx(NORMAL, "Examples:"); - PrintAndLogEx(NORMAL, " mem spiffs dump o hf_colin/lasttag f lasttag e"); - PrintAndLogEx(NORMAL, " mem spiffs dump o hf_colin/lasttag p"); + PrintAndLogEx(NORMAL, _YELLOW_(" mem spiffs dump o lasttag.bin f lasttag e")); + PrintAndLogEx(NORMAL, _YELLOW_(" mem spiffs dump o lasttag.bin p")); return PM3_SUCCESS; } static int usage_flashmemspiffs_load(void) { PrintAndLogEx(NORMAL, "Uploads binary-wise file into device filesystem"); - PrintAndLogEx(NORMAL, "Usage: mem spiffs load o f "); PrintAndLogEx(NORMAL, "Warning: mem area to be written must have been wiped first"); - PrintAndLogEx(NORMAL, "(this is already taken care when loading dictionaries)"); - PrintAndLogEx(NORMAL, " o : destination filename"); - PrintAndLogEx(NORMAL, " f : local filename"); + PrintAndLogEx(NORMAL, "(this is already taken care when loading dictionaries)\n"); + PrintAndLogEx(NORMAL, "Usage: mem spiffs load o f "); + PrintAndLogEx(NORMAL, " o - destination filename"); + PrintAndLogEx(NORMAL, " f - local filename"); PrintAndLogEx(NORMAL, ""); PrintAndLogEx(NORMAL, "Examples:"); - PrintAndLogEx(NORMAL, " mem spiffs load f myfile o myapp.conf"); + PrintAndLogEx(NORMAL, _YELLOW_(" mem spiffs load f myfile o myapp.conf")); return PM3_SUCCESS; } @@ -277,12 +286,12 @@ static int CmdFlashMemSpiFFSDump(const char *Cmd) { } if ((filename[0] == '\0') && (!print)) { - PrintAndLogEx(FAILED, "No print asked and Local dump Filename missing or invalid"); + PrintAndLogEx(FAILED, "No print asked and local dump filename missing or invalid"); errors = true; } if (destfilename[0] == '\0') { - PrintAndLogEx(FAILED, "SPIFFS Filename missing or invalid"); + PrintAndLogEx(FAILED, "SPIFFS filename missing or invalid"); errors = true; } @@ -320,15 +329,15 @@ static int CmdFlashMemSpiFFSDump(const char *Cmd) { } if (filename[0] != '\0') { - saveFile(filename, "", dump, len); + saveFile(filename, ".bin", dump, len); if (eml) { uint8_t eml_len = 16; - if (strstr(filename, "iclass") != NULL) + if (strstr(filename, "class") != NULL) eml_len = 8; else if (strstr(filename, "mfu") != NULL) eml_len = 4; - + saveFileEML(filename, dump, len, eml_len); } } From ce0a2744cb719b0fe5515377c67c4ce3e86514cd Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 15 Jul 2020 01:31:13 +0200 Subject: [PATCH 0109/1047] hf_iceclass --- armsrc/Standalone/hf_iceclass.c | 323 ++++++++++++++++++++++++-------- 1 file changed, 248 insertions(+), 75 deletions(-) diff --git a/armsrc/Standalone/hf_iceclass.c b/armsrc/Standalone/hf_iceclass.c index 778a9808a..2d5bbb22f 100644 --- a/armsrc/Standalone/hf_iceclass.c +++ b/armsrc/Standalone/hf_iceclass.c @@ -20,11 +20,51 @@ #define NUM_CSNS 9 #define MAC_RESPONSES_SIZE (16 * NUM_CSNS) -#define HF_ICLASS_FULLSIM_ORG_BIN "iceclass-orig.bin" -#define HF_ICLASS_FULLSIM_POST_BIN "iceclass-modified.bin" -#define HF_ICLASS_FULLSIM_POST_EML "iceclass-modified-lasttag.bin.eml" -#define HF_ICLASS_ATTACK_BIN "iceclass_mac_attack.bin" +#define HF_ICLASS_FULLSIM_ORIG_BIN "iceclass-orig.bin" +#define HF_ICLASS_FULLSIM_MOD "iceclass-modified" +#define HF_ICLASS_FULLSIM_MOD_BIN HF_ICLASS_FULLSIM_MOD".bin" +#define HF_ICLASS_FULLSIM_MOD_EML HF_ICLASS_FULLSIM_MOD".eml" +#define HF_ICLASS_ATTACK_BIN "iclass_mac_attack.bin" +#define ICE_STATE_NONE 0 +#define ICE_STATE_FULLSIM 1 +#define ICE_STATE_ATTACK 2 +#define ICE_STATE_READER 3 + +typedef struct { + uint8_t app_limit; //[8] + uint8_t otp[2]; //[9-10] + uint8_t block_writelock;//[11] + uint8_t chip_config; //[12] + uint8_t mem_config; //[13] + uint8_t eas; //[14] + uint8_t fuses; //[15] +} picopass_conf_block_t; + +// iclass card descriptors +char * card_types[] = { + "PicoPass 16K / 16", // 000 + "PicoPass 32K with current book 16K / 16", // 001 + "Unknown Card Type!", // 010 + "Unknown Card Type!", // 011 + "PicoPass 2K", // 100 + "Unknown Card Type!", // 101 + "PicoPass 16K / 2", // 110 + "PicoPass 32K with current book 16K / 2", // 111 +}; + +uint8_t card_app2_limit[] = { + 0xff, + 0xff, + 0xff, + 0xff, + 0x1f, + 0xff, + 0xff, + 0xff, +}; + +static uint8_t aa2_key[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; static uint8_t legacy_aa1_key[] = {0xAE, 0xA6, 0x84, 0xA6, 0xDA, 0xB2, 0x32, 0x78}; static uint8_t csns[8 * NUM_CSNS] = { @@ -40,25 +80,198 @@ static uint8_t csns[8 * NUM_CSNS] = { //0x04, 0x08, 0x9F, 0x78, 0x6E, 0xFF, 0x12, 0xE0 }; -static void DownloadLogInstructions(uint8_t t) { +static void download_instructions(uint8_t t) { Dbprintf(""); switch (t) { - case ICLASS_SIM_MODE_FULL: { + case ICE_STATE_FULLSIM: { Dbprintf("The emulator memory was saved to flash. Try the following from flash and display it"); - Dbprintf("1. " _YELLOW_("mem spiffs dump o "HF_ICLASS_FULLSIM_POST_BIN" f "HF_ICLASS_FULLSIM_POST_BIN" e")); + Dbprintf("1. " _YELLOW_("mem spiffs dump o "HF_ICLASS_FULLSIM_MOD_BIN" f "HF_ICLASS_FULLSIM_MOD" e")); Dbprintf("2. " _YELLOW_("exit proxmark3 client")); - Dbprintf("3. " _YELLOW_("cat "HF_ICLASS_FULLSIM_POST_EML)); + Dbprintf("3. " _YELLOW_("cat "HF_ICLASS_FULLSIM_MOD_EML)); break; } - case ICLASS_SIM_MODE_READER_ATTACK: { + case ICE_STATE_ATTACK: { Dbprintf("The emulator memory was saved to flash. Try the following from flash and display it"); - Dbprintf("1. " _YELLOW_("mem spiffs dump o "HF_ICLASS_FULLSIM_POST_BIN" f "HF_ICLASS_FULLSIM_POST_BIN" e")); + Dbprintf("1. " _YELLOW_("mem spiffs dump o "HF_ICLASS_ATTACK_BIN" f "HF_ICLASS_ATTACK_BIN)); Dbprintf("2. " _YELLOW_("hf iclass loclass f "HF_ICLASS_ATTACK_BIN)); break; } + case ICE_STATE_READER: { + Dbprintf("The found tags was saved to flash. Try to download from flash and display it"); + Dbprintf("1. " _YELLOW_("mem spiffs tree")); + Dbprintf("2. " _YELLOW_("mem spiffs dump h")); + break; + } } } +static void save_to_flash(uint8_t *data, uint16_t datalen) { + + rdv40_spiffs_lazy_mount(); + + char fn[SPIFFS_OBJ_NAME_LEN]; + sprintf(fn, "iclass-%02X%02X%02X%02X%02X%02X%02X%02X.bin", + data[0], data[1], data[2], data[3], + data[4], data[5], data[6], data[7] + ); + + if (exists_in_spiffs(fn) == false) { + int res = rdv40_spiffs_write(fn, data, datalen, RDV40_SPIFFS_SAFETY_SAFE); + if (res == SPIFFS_OK) { + Dbprintf("Saved to `" _YELLOW_("%s") "`", fn); + } else { + Dbprintf("error writing `" _YELLOW_("%s") "`", fn); + } + } + + rdv40_spiffs_lazy_unmount(); +} + +static int fullsim_mode(void) { + + rdv40_spiffs_lazy_mount(); + + // Look for a dump file in FLASH MEM. + if (exists_in_spiffs(HF_ICLASS_FULLSIM_ORIG_BIN) == false) { + Dbprintf("error, '" _YELLOW_(HF_ICLASS_FULLSIM_ORIG_BIN) "' file missing"); + return PM3_EIO; + } + + SpinOff(0); + uint8_t *emul = BigBuf_get_EM_addr(); + uint32_t fsize = size_in_spiffs(HF_ICLASS_FULLSIM_ORIG_BIN); + int res = rdv40_spiffs_read_as_filetype(HF_ICLASS_FULLSIM_ORIG_BIN, emul, fsize, RDV40_SPIFFS_SAFETY_SAFE); + rdv40_spiffs_lazy_unmount(); + Dbprintf("Found `" _YELLOW_(HF_ICLASS_FULLSIM_ORIG_BIN) "` , loaded %u bytes to emulator memory", fsize); + + if ( memcmp(emul + (3 * 8), "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF", 8) == 0) { + // create diversified key if not in dump. + uint8_t ccnr[12] = {0}; + memcpy(ccnr, emul + (2 * 8), 8); + bool use_elite = false; + + iclass_calc_div_key(emul, legacy_aa1_key, emul + (3 * 8), use_elite); +// Dbhexdump(8, emul + (3 * 8), false); + } + + iclass_simulate(ICLASS_SIM_MODE_FULL, 0 , false, NULL, NULL, NULL); + + LED_B_ON(); + rdv40_spiffs_lazy_mount(); + res = rdv40_spiffs_write(HF_ICLASS_FULLSIM_MOD_BIN, emul, fsize, RDV40_SPIFFS_SAFETY_SAFE); + rdv40_spiffs_lazy_unmount(); + LED_B_OFF(); + if (res != 0) { + Dbprintf("error writing '"HF_ICLASS_FULLSIM_MOD_BIN"' to flash ( %d )", res); + } + + return PM3_SUCCESS; +} + +static int reader_attack_mode(void) { + + BigBuf_free(); + uint16_t mac_response_len = 0; + uint8_t *mac_responses = BigBuf_malloc(MAC_RESPONSES_SIZE); + + iclass_simulate(ICLASS_SIM_MODE_READER_ATTACK, NUM_CSNS, false, csns, mac_responses, &mac_response_len); + + if (mac_response_len > 0) { + + LED_B_ON(); + rdv40_spiffs_lazy_mount(); + int res = rdv40_spiffs_write(HF_ICLASS_ATTACK_BIN, mac_responses, mac_response_len, RDV40_SPIFFS_SAFETY_SAFE); + rdv40_spiffs_lazy_unmount(); + LED_B_OFF(); + if (res != 0) { + Dbprintf("error writing '"HF_ICLASS_ATTACK_BIN"' to flash ( %d )", res); + } + } + return PM3_SUCCESS; +} + +static int reader_dump_mode(void) { + + BigBuf_free(); + uint8_t *card_data = BigBuf_malloc(0xFF * 8); + memset(card_data, 0xFF, sizeof(card_data)); + + struct p { + uint8_t key[8]; + bool use_raw; + bool use_elite; + bool use_credit_key; + } PACKED; + + for (;;) { + + if (BUTTON_PRESS()) { + DbpString("button pressed"); + break; + } + + // AA1 + struct p payload = { + .use_raw = false, + .use_elite = false, + .use_credit_key = false, + }; + memcpy(payload.key, legacy_aa1_key, sizeof(payload.key)); + + bool isOK = iclass_auth((uint8_t*)&payload, false, card_data); + if (isOK == false) { + continue; + } + + picopass_conf_block_t *conf = (picopass_conf_block_t*)(card_data + 8); + + // get 3 config bits + uint8_t type = (conf->chip_config & 0x10) >> 2; + type |= (conf->mem_config & 0x80) >> 6; + type |= (conf->mem_config & 0x20) >> 5; + + uint8_t app1_limit = conf->app_limit - 5; // minus header blocks + uint8_t app2_limit = card_app2_limit[type]; + + + uint16_t dumped = 0; + uint8_t block; + for (block = 5; block < app1_limit; block++) { + isOK = iclass_readblock(block, card_data + (8 * block)); + if (isOK) { + dumped++; + } + } + + // AA2 + payload.use_credit_key = true; + memcpy(payload.key, aa2_key, sizeof(payload.key)); + + isOK = iclass_auth((uint8_t*)&payload, false, card_data); + if (isOK) { + for (; block < app2_limit; block++) { + isOK = iclass_readblock(block, card_data + (8 * block)); + if (isOK) { + dumped++; + } + } + } + + Dbprintf("Found %s", card_types[type]); +/* + Dbprintf("APP1 Blocks: %d", app1_limit); + Dbprintf("APP2 Blocks: %d", app2_limit - app1_limit - 5); // minus app1 and header + Dbprintf("Got %d blocks (saving %u, %u bytes )", dumped, dumped + 5, ((dumped+5)*8) ); +*/ + if (5 + dumped > app1_limit) { + save_to_flash(card_data, (5 + dumped) * 8 ); + } + } + + Dbprintf("exit read & dump mode"); + return PM3_SUCCESS; +} + void ModInfo(void) { DbpString(" HF iCLASS mode - aka iceCLASS (iceman)"); } @@ -71,12 +284,10 @@ void RunMod(void) { StandAloneMode(); Dbprintf(_YELLOW_("HF iCLASS mode a.k.a iceCLASS started")); - uint8_t simtype = ICLASS_SIM_MODE_FULL; + uint8_t mode = ICE_STATE_READER; for (;;) { WDT_HIT(); - - // exit from RunMod, send a usbcommand. if (data_available()) break; // Was our button held down or pressed? @@ -85,78 +296,40 @@ void RunMod(void) { break; } - switch (simtype) { - case ICLASS_SIM_MODE_FULL: { + int res; + switch (mode) { + case ICE_STATE_FULLSIM: { Dbprintf("enter full simulation mode"); + res = fullsim_mode(); + if (res == PM3_SUCCESS) + download_instructions(mode); - rdv40_spiffs_lazy_mount(); - // Look for a dump file in FLASH MEM. - if (exists_in_spiffs(HF_ICLASS_FULLSIM_ORG_BIN) == false) { - Dbprintf("error, '" _YELLOW_(HF_ICLASS_FULLSIM_ORG_BIN) "' file missing"); - Dbprintf("changing to reader attack mode instead"); - simtype = ICLASS_SIM_MODE_READER_ATTACK; - break; - } - - SpinOff(0); - uint8_t *emul = BigBuf_get_EM_addr(); - uint32_t fsize = size_in_spiffs(HF_ICLASS_FULLSIM_ORG_BIN); - int res = rdv40_spiffs_read_as_filetype(HF_ICLASS_FULLSIM_ORG_BIN, emul, fsize, RDV40_SPIFFS_SAFETY_SAFE); - rdv40_spiffs_lazy_unmount(); - Dbprintf("Found `" _YELLOW_(HF_ICLASS_FULLSIM_ORG_BIN) "` , loaded %u bytes to emulator memory", fsize); - - if ( memcmp(emul + (3 * 8), "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF", 8) == 0) { - // create diversified key if not in dump. - uint8_t ccnr[12] = {0}; - memcpy(ccnr, emul + (2 * 8), 8); - bool use_elite = false; - - iclass_calc_div_key(emul, legacy_aa1_key, emul + (3 * 8), use_elite); - - Dbhexdump(8, emul + (3 * 8), false); - } - - iclass_simulate(ICLASS_SIM_MODE_FULL, 0 , false, NULL, NULL, NULL); - - LED_B_ON(); - rdv40_spiffs_lazy_mount(); - res = rdv40_spiffs_write(HF_ICLASS_FULLSIM_POST_BIN, emul, fsize, RDV40_SPIFFS_SAFETY_SAFE); - rdv40_spiffs_lazy_unmount(); - LED_B_OFF(); - if (res != 0) { - Dbprintf("error writing '"HF_ICLASS_FULLSIM_POST_BIN"' to flash ( %d )", res); - } - DownloadLogInstructions(simtype); - simtype = 0; + switch_off(); break; } - case ICLASS_SIM_MODE_READER_ATTACK: { - + case ICE_STATE_ATTACK: { Dbprintf("enter reader attack mode"); - uint16_t mac_response_len = 0; - uint8_t mac_responses[MAC_RESPONSES_SIZE] = {0}; + res = reader_attack_mode(); + if (res == PM3_SUCCESS) + download_instructions(mode); - iclass_simulate(ICLASS_SIM_MODE_READER_ATTACK, NUM_CSNS, false, csns, mac_responses, &mac_response_len); - - if (mac_response_len > 0) { - - LED_B_ON(); - rdv40_spiffs_lazy_mount(); - int res = rdv40_spiffs_write(HF_ICLASS_ATTACK_BIN, mac_responses, mac_response_len, RDV40_SPIFFS_SAFETY_SAFE); - rdv40_spiffs_lazy_unmount(); - LED_B_OFF(); - if (res != 0) { - Dbprintf("error writing '"HF_ICLASS_ATTACK_BIN"' to flash ( %d )", res); - } - } - DownloadLogInstructions(simtype); - simtype = 0; + mode = ICE_STATE_NONE; + switch_off(); break; } - } // switch - } // for loop + case ICE_STATE_READER: { + Dbprintf("enter read & dump mode"); + res = reader_dump_mode(); + if (res == PM3_SUCCESS) + download_instructions(mode); + mode = ICE_STATE_NONE; + switch_off(); + break; + } + } + } LEDsoff(); FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); From 8d5315b6afeeb20141ace10072d6e87c358aa33a Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 15 Jul 2020 11:34:14 +0200 Subject: [PATCH 0110/1047] fixes to mode --- armsrc/Standalone/hf_iceclass.c | 132 +++++++++++++++++++++++++------- include/pm3_cmd.h | 1 + 2 files changed, 107 insertions(+), 26 deletions(-) diff --git a/armsrc/Standalone/hf_iceclass.c b/armsrc/Standalone/hf_iceclass.c index 2d5bbb22f..19aa9626d 100644 --- a/armsrc/Standalone/hf_iceclass.c +++ b/armsrc/Standalone/hf_iceclass.c @@ -26,10 +26,15 @@ #define HF_ICLASS_FULLSIM_MOD_EML HF_ICLASS_FULLSIM_MOD".eml" #define HF_ICLASS_ATTACK_BIN "iclass_mac_attack.bin" -#define ICE_STATE_NONE 0 -#define ICE_STATE_FULLSIM 1 -#define ICE_STATE_ATTACK 2 -#define ICE_STATE_READER 3 +#define HF_ICLASS_CC_A "iceclass_cc_a.bin" +#define HF_ICLASS_CC_B "iceclass_cc_b.bin" +char* cc_files[] = { HF_ICLASS_CC_A, HF_ICLASS_CC_B }; + +#define ICE_STATE_NONE 0 +#define ICE_STATE_FULLSIM 1 +#define ICE_STATE_ATTACK 2 +#define ICE_STATE_READER 3 +#define ICE_STATE_CONFIGCARD 4 typedef struct { uint8_t app_limit; //[8] @@ -130,28 +135,23 @@ static void save_to_flash(uint8_t *data, uint16_t datalen) { static int fullsim_mode(void) { rdv40_spiffs_lazy_mount(); - - // Look for a dump file in FLASH MEM. - if (exists_in_spiffs(HF_ICLASS_FULLSIM_ORIG_BIN) == false) { - Dbprintf("error, '" _YELLOW_(HF_ICLASS_FULLSIM_ORIG_BIN) "' file missing"); - return PM3_EIO; - } SpinOff(0); uint8_t *emul = BigBuf_get_EM_addr(); uint32_t fsize = size_in_spiffs(HF_ICLASS_FULLSIM_ORIG_BIN); int res = rdv40_spiffs_read_as_filetype(HF_ICLASS_FULLSIM_ORIG_BIN, emul, fsize, RDV40_SPIFFS_SAFETY_SAFE); rdv40_spiffs_lazy_unmount(); - Dbprintf("Found `" _YELLOW_(HF_ICLASS_FULLSIM_ORIG_BIN) "` , loaded %u bytes to emulator memory", fsize); + if (res == SPIFFS_OK) { + Dbprintf("loaded '" _YELLOW_(HF_ICLASS_FULLSIM_ORIG_BIN) "' (%u bytes) to emulator memory", fsize); + } + // create diversified key if not in dump. if ( memcmp(emul + (3 * 8), "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF", 8) == 0) { - // create diversified key if not in dump. uint8_t ccnr[12] = {0}; memcpy(ccnr, emul + (2 * 8), 8); bool use_elite = false; - + iclass_calc_div_key(emul, legacy_aa1_key, emul + (3 * 8), use_elite); -// Dbhexdump(8, emul + (3 * 8), false); } iclass_simulate(ICLASS_SIM_MODE_FULL, 0 , false, NULL, NULL, NULL); @@ -161,7 +161,7 @@ static int fullsim_mode(void) { res = rdv40_spiffs_write(HF_ICLASS_FULLSIM_MOD_BIN, emul, fsize, RDV40_SPIFFS_SAFETY_SAFE); rdv40_spiffs_lazy_unmount(); LED_B_OFF(); - if (res != 0) { + if (res != SPIFFS_OK) { Dbprintf("error writing '"HF_ICLASS_FULLSIM_MOD_BIN"' to flash ( %d )", res); } @@ -177,13 +177,36 @@ static int reader_attack_mode(void) { iclass_simulate(ICLASS_SIM_MODE_READER_ATTACK, NUM_CSNS, false, csns, mac_responses, &mac_response_len); if (mac_response_len > 0) { + + bool success = (mac_response_len == MAC_RESPONSES_SIZE); + uint8_t num_mac = (mac_response_len >> 4); + Dbprintf("%u out of %d MAC obtained [%s]", num_mac, NUM_CSNS, (success) ? _GREEN_("OK") : _RED_("FAIL")); + + size_t dumplen = NUM_CSNS * 24; + + uint8_t *dump = BigBuf_malloc(dumplen); + if (dump == false) { + Dbprintf("failed to allocate memory"); + return PM3_EMALLOC; + } + + memset(dump, 0, dumplen);//<-- Need zeroes for the EPURSE - field + + for (uint8_t i = 0 ; i < NUM_CSNS ; i++) { + //copy CSN + memcpy(dump + (i * 24), csns + (i * 8), 8); + //copy epurse + memcpy(dump + (i * 24) + 8, mac_responses + (i * 16), 8); + // NR_MAC (eight bytes from the response) ( 8b csn + 8b epurse == 16) + memcpy(dump + (i * 24) + 16, mac_responses + (i * 16) + 8, 8); + } LED_B_ON(); rdv40_spiffs_lazy_mount(); - int res = rdv40_spiffs_write(HF_ICLASS_ATTACK_BIN, mac_responses, mac_response_len, RDV40_SPIFFS_SAFETY_SAFE); + int res = rdv40_spiffs_write(HF_ICLASS_ATTACK_BIN, dump, dumplen, RDV40_SPIFFS_SAFETY_SAFE); rdv40_spiffs_lazy_unmount(); LED_B_OFF(); - if (res != 0) { + if (res != SPIFFS_OK) { Dbprintf("error writing '"HF_ICLASS_ATTACK_BIN"' to flash ( %d )", res); } } @@ -272,6 +295,29 @@ static int reader_dump_mode(void) { return PM3_SUCCESS; } +static int config_sim_mode(void) { + + uint8_t *emul = BigBuf_get_EM_addr(); + + for (uint8_t i = 0; i < 2; i++) { + SpinOff(0); + uint32_t fsize = size_in_spiffs(cc_files[i]); + + rdv40_spiffs_lazy_mount(); + int res = rdv40_spiffs_read_as_filetype(cc_files[i], emul, fsize, RDV40_SPIFFS_SAFETY_SAFE); + rdv40_spiffs_lazy_unmount(); + + if (res == SPIFFS_OK) { + Dbprintf("loaded '" _YELLOW_("%s") "' (%u bytes) to emulator memory", cc_files[i], fsize); + } + + iclass_simulate(ICLASS_SIM_MODE_FULL, 0 , false, NULL, NULL, NULL); + } + + rdv40_spiffs_lazy_unmount(); + return PM3_SUCCESS; +} + void ModInfo(void) { DbpString(" HF iCLASS mode - aka iceCLASS (iceman)"); } @@ -284,28 +330,45 @@ void RunMod(void) { StandAloneMode(); Dbprintf(_YELLOW_("HF iCLASS mode a.k.a iceCLASS started")); - uint8_t mode = ICE_STATE_READER; + uint8_t mode = ICE_STATE_ATTACK; for (;;) { + WDT_HIT(); + + if (mode == ICE_STATE_NONE) break; if (data_available()) break; +/* // Was our button held down or pressed? int button_pressed = BUTTON_HELD(1000); if (button_pressed != BUTTON_NO_CLICK) { break; } + */ int res; switch (mode) { case ICE_STATE_FULLSIM: { Dbprintf("enter full simulation mode"); - res = fullsim_mode(); - if (res == PM3_SUCCESS) - download_instructions(mode); + + // Look for iCLASS dump file + rdv40_spiffs_lazy_mount(); + if (exists_in_spiffs(HF_ICLASS_FULLSIM_ORIG_BIN) == false) { + Dbprintf("error, '" _YELLOW_(HF_ICLASS_FULLSIM_ORIG_BIN) "' file missing"); + mode = ICE_STATE_NONE; + } + rdv40_spiffs_lazy_unmount(); - switch_off(); + if (mode == ICE_STATE_FULLSIM) { + res = fullsim_mode(); + if (res == PM3_SUCCESS) { + download_instructions(mode); + } + } + // the button press to exit sim, is captured in main loop here + mode = ICE_STATE_NONE; break; } case ICE_STATE_ATTACK: { @@ -315,7 +378,6 @@ void RunMod(void) { download_instructions(mode); mode = ICE_STATE_NONE; - switch_off(); break; } case ICE_STATE_READER: { @@ -325,12 +387,30 @@ void RunMod(void) { download_instructions(mode); mode = ICE_STATE_NONE; - switch_off(); + break; + } + case ICE_STATE_CONFIGCARD: { + Dbprintf("enter config card simulation mode"); + + // Look for config cards + rdv40_spiffs_lazy_mount(); + for (uint8_t i =0; i < 2; i++) { + if (exists_in_spiffs(cc_files[i]) == false) { + Dbprintf("error, '" _YELLOW_("%s") "' file missing", cc_files[i]); + mode = ICE_STATE_NONE; + } + } + rdv40_spiffs_lazy_unmount(); + + if (mode == ICE_STATE_CONFIGCARD) + config_sim_mode(); + + mode = ICE_STATE_NONE; break; } } } - LEDsoff(); - FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); + switch_off(); + Dbprintf("-=[ exit iceCLASS ]=-"); } diff --git a/include/pm3_cmd.h b/include/pm3_cmd.h index b85d996d6..3568bd50a 100644 --- a/include/pm3_cmd.h +++ b/include/pm3_cmd.h @@ -601,6 +601,7 @@ typedef struct { #define ICLASS_SIM_MODE_FULL 3 #define ICLASS_SIM_MODE_READER_ATTACK_KEYROLL 4 #define ICLASS_SIM_MODE_EXIT_AFTER_MAC 5 // note: device internal only +#define ICLASS_SIM_MODE_CONFIG_CARD 6 #define MODE_SIM_CSN 0 #define MODE_EXIT_AFTER_MAC 1 From d9571d8df7b28c8c98f924b51d8c1172c45e8d89 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 15 Jul 2020 11:35:03 +0200 Subject: [PATCH 0111/1047] loclass, print helptxt --- client/src/cmdhficlass.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/client/src/cmdhficlass.c b/client/src/cmdhficlass.c index 2aeb9a03f..80f6dfab5 100644 --- a/client/src/cmdhficlass.c +++ b/client/src/cmdhficlass.c @@ -2018,9 +2018,6 @@ static int CmdHFiClass_loclass(const char *Cmd) { char fileName[FILE_PATH_SIZE] = {0}; if (param_getstr(Cmd, 1, fileName, sizeof(fileName)) > 0) { return bruteforceFileNoKeys(fileName); - } else { - PrintAndLogEx(WARNING, "You must specify a filename"); - return PM3_EFILE; } } else if (opt == 't') { char opt2 = tolower(param_getchar(Cmd, 1)); @@ -2035,7 +2032,8 @@ static int CmdHFiClass_loclass(const char *Cmd) { return PM3_ESOFT; } - return PM3_SUCCESS; + + return usage_hf_iclass_loclass(); } void printIclassDumpContents(uint8_t *iclass_dump, uint8_t startblock, uint8_t endblock, size_t filesize) { From a59aa7a570056129867da5575dfa831c933d6ad4 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 15 Jul 2020 11:35:27 +0200 Subject: [PATCH 0112/1047] rename fct --- armsrc/iclass.c | 18 +++++++++++------- armsrc/iclass.h | 2 +- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/armsrc/iclass.c b/armsrc/iclass.c index f232c35ed..d8892a74c 100644 --- a/armsrc/iclass.c +++ b/armsrc/iclass.c @@ -166,14 +166,14 @@ void iclass_simulate(uint8_t sim_type, uint8_t num_csns, bool send_reply, uint8_ if (sim_type == ICLASS_SIM_MODE_CSN) { // Use the CSN from commandline memcpy(emulator, datain, 8); - doIClassSimulation(ICLASS_SIM_MODE_CSN, NULL); + do_iclass_simulation(ICLASS_SIM_MODE_CSN, NULL); } else if (sim_type == ICLASS_SIM_MODE_CSN_DEFAULT) { //Default CSN uint8_t csn[] = { 0x03, 0x1f, 0xec, 0x8a, 0xf7, 0xff, 0x12, 0xe0 }; // Use the CSN from commandline memcpy(emulator, csn, 8); - doIClassSimulation(ICLASS_SIM_MODE_CSN, NULL); + do_iclass_simulation(ICLASS_SIM_MODE_CSN, NULL); } else if (sim_type == ICLASS_SIM_MODE_READER_ATTACK) { @@ -187,7 +187,7 @@ void iclass_simulate(uint8_t sim_type, uint8_t num_csns, bool send_reply, uint8_ memcpy(emulator, datain + (i * 8), 8); - if (doIClassSimulation(ICLASS_SIM_MODE_EXIT_AFTER_MAC, mac_responses + i * EPURSE_MAC_SIZE)) { + if (do_iclass_simulation(ICLASS_SIM_MODE_EXIT_AFTER_MAC, mac_responses + i * EPURSE_MAC_SIZE)) { if (dataoutlen) *dataoutlen = i * EPURSE_MAC_SIZE; @@ -207,7 +207,11 @@ void iclass_simulate(uint8_t sim_type, uint8_t num_csns, bool send_reply, uint8_ } else if (sim_type == ICLASS_SIM_MODE_FULL) { //This is 'full sim' mode, where we use the emulator storage for data. //ie: BigBuf_get_EM_addr should be previously filled with data from the "eload" command - doIClassSimulation(ICLASS_SIM_MODE_FULL, NULL); + do_iclass_simulation(ICLASS_SIM_MODE_FULL, NULL); + } else if (sim_type == ICLASS_SIM_MODE_CONFIG_CARD) { + // config card + do_iclass_simulation(ICLASS_SIM_MODE_FULL, NULL); + // swap bin } else if (sim_type == ICLASS_SIM_MODE_READER_ATTACK_KEYROLL) { @@ -229,7 +233,7 @@ void iclass_simulate(uint8_t sim_type, uint8_t num_csns, bool send_reply, uint8_ memcpy(emulator, datain + (i * 8), 8); // keyroll 1 - if (doIClassSimulation(ICLASS_SIM_MODE_EXIT_AFTER_MAC, mac_responses + i * EPURSE_MAC_SIZE)) { + if (do_iclass_simulation(ICLASS_SIM_MODE_EXIT_AFTER_MAC, mac_responses + i * EPURSE_MAC_SIZE)) { if (dataoutlen) *dataoutlen = i * EPURSE_MAC_SIZE * 2; @@ -242,7 +246,7 @@ void iclass_simulate(uint8_t sim_type, uint8_t num_csns, bool send_reply, uint8_ } // keyroll 2 - if (doIClassSimulation(ICLASS_SIM_MODE_EXIT_AFTER_MAC, mac_responses + (i + num_csns) * EPURSE_MAC_SIZE)) { + if (do_iclass_simulation(ICLASS_SIM_MODE_EXIT_AFTER_MAC, mac_responses + (i + num_csns) * EPURSE_MAC_SIZE)) { if (dataoutlen) *dataoutlen = i * EPURSE_MAC_SIZE * 2; @@ -281,7 +285,7 @@ out: * @param csn - csn to use * @param breakAfterMacReceived if true, returns after reader MAC has been received. */ -int doIClassSimulation(int simulationMode, uint8_t *reader_mac_buf) { +int do_iclass_simulation(int simulationMode, uint8_t *reader_mac_buf) { // free eventually allocated BigBuf memory BigBuf_free_keep_EM(); diff --git a/armsrc/iclass.h b/armsrc/iclass.h index fa256c925..cc93f771c 100644 --- a/armsrc/iclass.h +++ b/armsrc/iclass.h @@ -22,7 +22,7 @@ void iClass_Dump(uint8_t blockno, uint8_t numblks); void iClass_Clone(uint8_t startblock, uint8_t endblock, uint8_t *data); void iClass_ReadCheck(uint8_t blockno, uint8_t keytype); -int doIClassSimulation(int simulationMode, uint8_t *reader_mac_buf); +int do_iclass_simulation(int simulationMode, uint8_t *reader_mac_buf); void SimulateIClass(uint32_t arg0, uint32_t arg1, uint32_t arg2, uint8_t *datain); void iclass_simulate(uint8_t sim_type, uint8_t num_csns, bool send_reply, uint8_t *datain, uint8_t *dataout, uint16_t *dataoutlen); From 85be784d26827ed467abb54e29980133de5ea654 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 15 Jul 2020 11:55:21 +0200 Subject: [PATCH 0113/1047] ev3 detection enabled --- client/src/cmdhfmfdes.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/client/src/cmdhfmfdes.c b/client/src/cmdhfmfdes.c index e7a8e3746..0e7e0f678 100644 --- a/client/src/cmdhfmfdes.c +++ b/client/src/cmdhfmfdes.c @@ -382,7 +382,7 @@ static char *getVersionStr(uint8_t major, uint8_t minor) { sprintf(retStr, "%x.%x (" _YELLOW_("DESFire EV1") ")", major, minor); else if (major == 0x12 && minor == 0x00) sprintf(retStr, "%x.%x (" _YELLOW_("DESFire EV2") ")", major, minor); - else if (major == 0x13 && minor == 0x00) + else if (major == 0x33 && minor == 0x00) sprintf(retStr, "%x.%x (" _YELLOW_("DESFire EV3") ")", major, minor); else if (major == 0x30 && minor == 0x00) sprintf(retStr, "%x.%x (" _YELLOW_("DESFire Light") ")", major, minor); @@ -644,8 +644,8 @@ static nxp_cardtype_t getCardType(uint8_t major, uint8_t minor) { return DESFIRE_EV1; if (major == 0x12 && minor == 0x00) return DESFIRE_EV2; -// if (major == 0x13 && minor == 0x00) -// return DESFIRE_EV3; + if (major == 0x33 && minor == 0x00) + return DESFIRE_EV3; if (major == 0x30 && minor == 0x00) return DESFIRE_LIGHT; if (major == 0x11 && minor == 0x00) From 3354f0d9d36ef171f5a3e3c43b9ddcf6f1844ea2 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 15 Jul 2020 15:16:35 +0200 Subject: [PATCH 0114/1047] unified static dma buffer as bigbuf_malloc, less pressure on stack size --- armsrc/BigBuf.c | 64 +++++++++++++--- armsrc/BigBuf.h | 14 +++- armsrc/iso14443a.c | 23 +++--- armsrc/iso14443b.c | 185 ++++++++++++++++++--------------------------- armsrc/iso15693.c | 83 ++++++++++---------- 5 files changed, 194 insertions(+), 175 deletions(-) diff --git a/armsrc/BigBuf.c b/armsrc/BigBuf.c index 7cb440d82..338206d6e 100644 --- a/armsrc/BigBuf.c +++ b/armsrc/BigBuf.c @@ -36,6 +36,33 @@ static uint32_t s_bigbuf_hi = 0; // pointer to the emulator memory. static uint8_t *emulator_memory = NULL; +//============================================================================= +// The ToSend buffer. +// A buffer where we can queue things up to be sent through the FPGA, for +// any purpose (fake tag, as reader, whatever). We go MSB first, since that +// is the order in which they go out on the wire. +//============================================================================= +static tosend_t toSend = { + .max = -1, + .bit = 8, + .buf = NULL +}; +//============================================================================= +// The dmaBuf 16bit buffer. +// A buffer where we recive IQ samples sent from the FPGA, for demodulating +//============================================================================= +static dmabuf16_t dma_16 = { + .size = DMA_BUFFER_SIZE, + .buf = NULL +}; +// dmaBuf 8bit buffer +static dmabuf8_t dma_8 = { + .size = DMA_BUFFER_SIZE, + .buf = NULL +}; + + + // trace related variables static uint32_t trace_len = 0; static bool tracing = true; @@ -106,6 +133,9 @@ void BigBuf_free(void) { s_bigbuf_hi = s_bigbuf_size; emulator_memory = NULL; // shouldn't this empty BigBuf also? + toSend.buf = NULL; + dma_16.buf = NULL; + dma_8.buf = NULL; } // free allocated chunks EXCEPT the emulator memory @@ -114,6 +144,10 @@ void BigBuf_free_keep_EM(void) { s_bigbuf_hi = emulator_memory - (uint8_t *)BigBuf; else s_bigbuf_hi = s_bigbuf_size; + + toSend.buf = NULL; + dma_16.buf = NULL; + dma_8.buf = NULL; } void BigBuf_print_status(void) { @@ -123,6 +157,10 @@ void BigBuf_print_status(void) { DbpString(_CYAN_("Tracing")); Dbprintf(" tracing ................%d", tracing); Dbprintf(" traceLen ...............%d", trace_len); + + Dbprintf(" dma8 memory.............%d", dma_8.buf - BigBuf_get_addr()); + Dbprintf(" dma16 memory............%d", (uint8_t*)dma_16.buf - BigBuf_get_addr()); + Dbprintf(" toSend memory...........%d", toSend.buf - BigBuf_get_addr() ); } // return the maximum trace length (i.e. the unallocated size of BigBuf) @@ -228,17 +266,6 @@ uint8_t emlSet(uint8_t *data, uint32_t offset, uint32_t length) { } -//============================================================================= -// The ToSend buffer. -// A buffer where we can queue things up to be sent through the FPGA, for -// any purpose (fake tag, as reader, whatever). We go MSB first, since that -// is the order in which they go out on the wire. -//============================================================================= -static tosend_t toSend = { - .max = -1, - .bit = 8, - .buf = NULL -}; // get the address of the ToSend buffer. Allocate part of Bigbuf for it, if not yet done tosend_t *get_tosend(void) { @@ -270,3 +297,18 @@ void tosend_stuffbit(int b) { toSend.bit = 0; } } + +dmabuf16_t *get_dma16(void) { + if (dma_16.buf == NULL) + dma_16.buf = (uint16_t*)BigBuf_malloc(DMA_BUFFER_SIZE); + + return &dma_16; +} + +dmabuf8_t *get_dma8(void) { + if (dma_8.buf == NULL) + dma_8.buf = BigBuf_malloc(DMA_BUFFER_SIZE); + + return &dma_8; +} + diff --git a/armsrc/BigBuf.h b/armsrc/BigBuf.h index 33c454226..2f381f36b 100644 --- a/armsrc/BigBuf.h +++ b/armsrc/BigBuf.h @@ -19,7 +19,7 @@ #define MAX_MIFARE_FRAME_SIZE 18 // biggest Mifare frame is answer to a read (one block = 16 Bytes) + 2 Bytes CRC #define MAX_MIFARE_PARITY_SIZE 3 // need 18 parity bits for the 18 Byte above. 3 Bytes are enough to store these #define CARD_MEMORY_SIZE 4096 -#define DMA_BUFFER_SIZE 128 +#define DMA_BUFFER_SIZE 256 // 8 data bits and 1 parity bit per payload byte, 1 correction bit, 1 SOC bit, 2 EOC bits #define TOSEND_BUFFER_SIZE (9 * MAX_FRAME_SIZE + 1 + 1 + 2) @@ -56,4 +56,16 @@ tosend_t *get_tosend(void); void tosend_reset(void); void tosend_stuffbit(int b); +typedef struct { + uint16_t size; + uint8_t *buf; +} dmabuf8_t; + +typedef struct { + uint16_t size; + uint16_t *buf; +} dmabuf16_t; + +dmabuf8_t *get_dma8(void); +dmabuf16_t *get_dma16(void); #endif /* __BIGBUF_H */ diff --git a/armsrc/iso14443a.c b/armsrc/iso14443a.c index bac3008f9..53d1f6814 100644 --- a/armsrc/iso14443a.c +++ b/armsrc/iso14443a.c @@ -585,10 +585,6 @@ void RAMFUNC SniffIso14443a(uint8_t param) { uint8_t *receivedResp = BigBuf_malloc(MAX_FRAME_SIZE); uint8_t *receivedRespPar = BigBuf_malloc(MAX_PARITY_SIZE); - // The DMA buffer, used to stream samples from the FPGA - uint8_t *dmaBuf = BigBuf_malloc(DMA_BUFFER_SIZE); - uint8_t *data = dmaBuf; - uint8_t previous_data = 0; int maxDataLen = 0, dataLen; bool TagIsActive = false; @@ -602,8 +598,12 @@ void RAMFUNC SniffIso14443a(uint8_t param) { DbpString("Starting to sniff"); + // The DMA buffer, used to stream samples from the FPGA + dmabuf8_t *dma = get_dma8(); + uint8_t *data = dma->buf; + // Setup and start DMA. - if (!FpgaSetupSscDma((uint8_t *) dmaBuf, DMA_BUFFER_SIZE)) { + if (!FpgaSetupSscDma((uint8_t *) dma->buf, DMA_BUFFER_SIZE)) { if (DBGLEVEL > 1) Dbprintf("FpgaSetupSscDma failed. Exiting"); return; } @@ -621,7 +621,7 @@ void RAMFUNC SniffIso14443a(uint8_t param) { WDT_HIT(); LED_A_ON(); - int register readBufDataP = data - dmaBuf; + int register readBufDataP = data - dma->buf; int register dmaBufDataP = DMA_BUFFER_SIZE - AT91C_BASE_PDC_SSC->PDC_RCR; if (readBufDataP <= dmaBufDataP) dataLen = dmaBufDataP - readBufDataP; @@ -640,13 +640,13 @@ void RAMFUNC SniffIso14443a(uint8_t param) { // primary buffer was stopped( <-- we lost data! if (!AT91C_BASE_PDC_SSC->PDC_RCR) { - AT91C_BASE_PDC_SSC->PDC_RPR = (uint32_t) dmaBuf; + AT91C_BASE_PDC_SSC->PDC_RPR = (uint32_t) dma->buf; AT91C_BASE_PDC_SSC->PDC_RCR = DMA_BUFFER_SIZE; Dbprintf("[-] RxEmpty ERROR | data length %d", dataLen); // temporary } // secondary buffer sets as primary, secondary buffer was stopped if (!AT91C_BASE_PDC_SSC->PDC_RNCR) { - AT91C_BASE_PDC_SSC->PDC_RNPR = (uint32_t) dmaBuf; + AT91C_BASE_PDC_SSC->PDC_RNPR = (uint32_t) dma->buf; AT91C_BASE_PDC_SSC->PDC_RNCR = DMA_BUFFER_SIZE; } @@ -710,16 +710,15 @@ void RAMFUNC SniffIso14443a(uint8_t param) { previous_data = *data; rx_samples++; data++; - if (data == dmaBuf + DMA_BUFFER_SIZE) { - data = dmaBuf; + if (data == dma->buf + DMA_BUFFER_SIZE) { + data = dma->buf; } } // end main loop FpgaDisableTracing(); if (DBGLEVEL >= DBG_ERROR) { - Dbprintf("maxDataLen=%d, Uart.state=%x, Uart.len=%d", maxDataLen, Uart.state, Uart.len); - Dbprintf("traceLen=" _YELLOW_("%d")", Uart.output[0]="_YELLOW_("%08x"), BigBuf_get_traceLen(), (uint32_t)Uart.output[0]); + Dbprintf("trace len = " _YELLOW_("%d"), BigBuf_get_traceLen()); } switch_off(); } diff --git a/armsrc/iso14443b.c b/armsrc/iso14443b.c index d9d08a966..e26ebb017 100644 --- a/armsrc/iso14443b.c +++ b/armsrc/iso14443b.c @@ -26,11 +26,8 @@ #include "ticks.h" -#ifndef ISO14443B_DMA_BUFFER_SIZE -# define ISO14443B_DMA_BUFFER_SIZE 128 -#endif #ifndef RECEIVE_MASK -# define RECEIVE_MASK (ISO14443B_DMA_BUFFER_SIZE-1) +# define RECEIVE_MASK (DMA_BUFFER_SIZE - 1) #endif #define RECEIVE_SAMPLES_TIMEOUT 64 @@ -480,13 +477,7 @@ static void TransmitFor14443b_AsTag(uint8_t *response, uint16_t len) { // Put byte into tx holding register as soon as it is ready if (AT91C_BASE_SSC->SSC_SR & AT91C_SSC_TXRDY) { - AT91C_BASE_SSC->SSC_THR = response[++i]; - } - - // Prevent rx holding register from overflowing - if (AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_RXRDY)) { - volatile uint32_t b = AT91C_BASE_SSC->SSC_RHR; - (void)b; + AT91C_BASE_SSC->SSC_THR = response[i++]; } } } @@ -702,40 +693,17 @@ void SimulateIso14443bTag(uint32_t pupi) { * false if we are still waiting for some more * */ -static RAMFUNC int Handle14443bTagSamplesDemod(int ci, int cq) { - int v = 0, myI = ABS(ci), myQ = ABS(cq); - -// The soft decision on the bit uses an estimate of just the -// quadrant of the reference angle, not the exact angle. -#define MAKE_SOFT_DECISION(void) { \ - if (Demod.sumI > 0) { \ - v = ci; \ - } else { \ - v = -ci; \ - } \ - if (Demod.sumQ > 0) { \ - v += cq; \ - } else { \ - v -= cq; \ - } \ - } +static RAMFUNC int Handle14443bTagSamplesDemod(uint16_t amplitude) { #define SUBCARRIER_DETECT_THRESHOLD 8 -//note: couldn't we just use MAX(ABS(ci),ABS(cq)) + (MIN(ABS(ci),ABS(cq))/2) from common.h - marshmellow -#define CHECK_FOR_SUBCARRIER(void) { v = MAX(myI, myQ) + (MIN(myI, myQ) >> 1); } - switch (Demod.state) { case DEMOD_UNSYNCD: - CHECK_FOR_SUBCARRIER(); - - // subcarrier detected - - if (v > SUBCARRIER_DETECT_THRESHOLD) { + if (amplitude > SUBCARRIER_DETECT_THRESHOLD) { Demod.state = DEMOD_PHASE_REF_TRAINING; - Demod.sumI = ci; - Demod.sumQ = cq; + Demod.sumI = amplitude; + Demod.sumQ = amplitude; Demod.posCount = 1; } break; @@ -743,13 +711,11 @@ static RAMFUNC int Handle14443bTagSamplesDemod(int ci, int cq) { case DEMOD_PHASE_REF_TRAINING: if (Demod.posCount < 8) { - CHECK_FOR_SUBCARRIER(); - - if (v > SUBCARRIER_DETECT_THRESHOLD) { + if (amplitude > SUBCARRIER_DETECT_THRESHOLD) { // set the reference phase (will code a logic '1') by averaging over 32 1/fs. // note: synchronization time > 80 1/fs - Demod.sumI += ci; - Demod.sumQ += cq; + Demod.sumI += amplitude; + Demod.sumQ += amplitude; Demod.posCount++; } else { // subcarrier lost @@ -762,9 +728,7 @@ static RAMFUNC int Handle14443bTagSamplesDemod(int ci, int cq) { case DEMOD_AWAITING_FALLING_EDGE_OF_SOF: - MAKE_SOFT_DECISION(); - - if (v < 0) { // logic '0' detected + if (amplitude == 0) { // logic '0' detected Demod.state = DEMOD_GOT_FALLING_EDGE_OF_SOF; Demod.posCount = 0; // start of SOF sequence } else { @@ -779,9 +743,7 @@ static RAMFUNC int Handle14443bTagSamplesDemod(int ci, int cq) { case DEMOD_GOT_FALLING_EDGE_OF_SOF: Demod.posCount++; - MAKE_SOFT_DECISION(); - - if (v > 0) { + if (amplitude > 0) { // low phase of SOF too short (< 9 etu). Note: spec is >= 10, but FPGA tends to "smear" edges if (Demod.posCount < 9 * 2) { Demod.state = DEMOD_UNSYNCD; @@ -804,9 +766,7 @@ static RAMFUNC int Handle14443bTagSamplesDemod(int ci, int cq) { case DEMOD_AWAITING_START_BIT: Demod.posCount++; - MAKE_SOFT_DECISION(); - - if (v > 0) { + if (amplitude > 0) { if (Demod.posCount > 6 * 2) { // max 19us between characters = 16 1/fs, max 3 etu after low phase of SOF = 24 1/fs LED_C_OFF(); if (Demod.bitCount == 0 && Demod.len == 0) { // received SOF only, this is valid for iClass/Picopass @@ -818,7 +778,7 @@ static RAMFUNC int Handle14443bTagSamplesDemod(int ci, int cq) { } else { // start bit detected Demod.bitCount = 0; Demod.posCount = 1; // this was the first half - Demod.thisBit = v; + Demod.thisBit = amplitude; Demod.shiftReg = 0; Demod.state = DEMOD_RECEIVING_DATA; } @@ -826,15 +786,13 @@ static RAMFUNC int Handle14443bTagSamplesDemod(int ci, int cq) { case DEMOD_RECEIVING_DATA: - MAKE_SOFT_DECISION(); - if (Demod.posCount == 0) { // first half of bit - Demod.thisBit = v; + Demod.thisBit = amplitude; Demod.posCount = 1; } else { // second half of bit - Demod.thisBit += v; + Demod.thisBit += amplitude; Demod.shiftReg >>= 1; // OR in a logic '1' @@ -882,64 +840,66 @@ static RAMFUNC int Handle14443bTagSamplesDemod(int ci, int cq) { * Demodulate the samples we received from the tag, also log to tracebuffer */ static int GetTagSamplesFor14443bDemod(int timeout) { - int ret = 0; - int maxBehindBy = 0; - int lastRxCounter, samples = 0; - int8_t ci, cq; - uint32_t time_0 = 0, time_stop = 0; + + int samples = 0, ret = 0; BigBuf_free(); - // The response (tag -> reader) that we're receiving. - uint8_t *receivedResponse = BigBuf_malloc(MAX_FRAME_SIZE); - - // The DMA buffer, used to stream samples from the FPGA - uint16_t *dmaBuf = (uint16_t*) BigBuf_malloc(ISO14443B_DMA_BUFFER_SIZE * sizeof(uint16_t)); // Set up the demodulator for tag -> reader responses. - Demod14bInit(receivedResponse); + Demod14bInit(BigBuf_malloc(MAX_FRAME_SIZE)); // wait for last transfer to complete while (!(AT91C_BASE_SSC->SSC_SR & AT91C_SSC_TXEMPTY)) // Setup and start DMA. FpgaSetupSsc(FPGA_MAJOR_MODE_HF_READER); - if (FpgaSetupSscDma((uint8_t *) dmaBuf, ISO14443B_DMA_BUFFER_SIZE) == false) { + + // The DMA buffer, used to stream samples from the FPGA + dmabuf16_t *dma = get_dma16(); + if (FpgaSetupSscDma((uint8_t *) dma->buf, DMA_BUFFER_SIZE) == false) { if (DBGLEVEL > 1) Dbprintf("FpgaSetupSscDma failed. Exiting"); return -1; } - uint16_t *upTo = dmaBuf; - lastRxCounter = ISO14443B_DMA_BUFFER_SIZE; - // Signal field is ON with the appropriate LED: LED_D_ON(); + // And put the FPGA in the appropriate mode FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER | FPGA_HF_READER_SUBCARRIER_848_KHZ | FPGA_HF_READER_MODE_RECEIVE_IQ); +// uint32_t dma_start_time; + uint16_t *upTo = dma->buf; + for(;;) { - int behindBy = (lastRxCounter - AT91C_BASE_PDC_SSC->PDC_RCR) & (ISO14443B_DMA_BUFFER_SIZE-1); - if (behindBy > maxBehindBy) { - maxBehindBy = behindBy; - } + uint16_t behindBy = ((uint16_t*)AT91C_BASE_PDC_SSC->PDC_RPR - upTo) & (DMA_BUFFER_SIZE - 1); - if (behindBy < 1) continue; + if (behindBy == 0) continue; - ci = *upTo >> 8; - cq = *upTo; - upTo++; - lastRxCounter--; - if (upTo >= dmaBuf + ISO14443B_DMA_BUFFER_SIZE) { // we have read all of the DMA buffer content. - upTo = dmaBuf; // start reading the circular buffer from the beginning - lastRxCounter += ISO14443B_DMA_BUFFER_SIZE; - } - - if (AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_ENDRX)) { // DMA Counter Register had reached 0, already rotated. - AT91C_BASE_PDC_SSC->PDC_RNPR = (uint32_t) dmaBuf; // refresh the DMA Next Buffer and - AT91C_BASE_PDC_SSC->PDC_RNCR = ISO14443B_DMA_BUFFER_SIZE; // DMA Next Counter registers - } samples++; + /* + if (samples == 1) { + // DMA has transferred the very first data + dma_start_time = GetCountSspClk() & 0xfffffff0; + } + */ - if (Handle14443bTagSamplesDemod(ci, cq)) { + volatile uint16_t tagdata = *upTo++; + + if (upTo >= dma->buf + DMA_BUFFER_SIZE) { // we have read all of the DMA buffer content. + upTo = dma->buf; // start reading the circular buffer from the beginning + if (behindBy > (9 * DMA_BUFFER_SIZE / 10)) { + Dbprintf("About to blow circular buffer - aborted! behindBy=%d", behindBy); + ret = -1; + break; + } + } + + if (AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_ENDRX)) { // DMA Counter Register had reached 0, already rotated. + AT91C_BASE_PDC_SSC->PDC_RNPR = (uint32_t) dma->buf; // refresh the DMA Next Buffer and + AT91C_BASE_PDC_SSC->PDC_RNCR = DMA_BUFFER_SIZE; // DMA Next Counter registers + } + + if (Handle14443bTagSamplesDemod(tagdata)) { ret = Demod.len; break; } @@ -958,7 +918,7 @@ static int GetTagSamplesFor14443bDemod(int timeout) { } if (Demod.len > 0) { - LogTrace(Demod.output, Demod.len, time_0, time_stop, NULL, false); + LogTrace(Demod.output, Demod.len, 0, 0, NULL, false); } return ret; @@ -976,12 +936,14 @@ static void TransmitFor14443b_AsReader(void) { for (int c = 0; c < ts->max; c++) { uint8_t data = ts->buf[c]; + for (int i = 0; i < 8; i++) { uint16_t send_word = (data & 0x80) ? 0x0000 : 0xffff; while (!(AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_TXRDY))) ; AT91C_BASE_SSC->SSC_THR = send_word; + while (!(AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_TXRDY))) ; AT91C_BASE_SSC->SSC_THR = send_word; @@ -1388,7 +1350,7 @@ static void iso1444b_setup_sniff(void) { Dbprintf("[+] trace: %i bytes", BigBuf_max_traceLen()); Dbprintf("[+] reader -> tag: %i bytes", MAX_FRAME_SIZE); Dbprintf("[+] tag -> reader: %i bytes", MAX_FRAME_SIZE); - Dbprintf("[+] DMA: %i bytes", ISO14443B_DMA_BUFFER_SIZE); + Dbprintf("[+] DMA: %i bytes", DMA_BUFFER_SIZE); } // connect Demodulated Signal to ADC: @@ -1432,12 +1394,7 @@ void RAMFUNC SniffIso14443b(void) { bool TagIsActive = false; bool ReaderIsActive = false; - iso1444b_setup_sniff(); - - // The DMA buffer, used to stream samples from the FPGA - uint16_t *dmaBuf = (uint16_t*) BigBuf_malloc(ISO14443B_DMA_BUFFER_SIZE * sizeof(uint16_t)); - uint16_t *upTo = dmaBuf; - int lastRxCounter = ISO14443B_DMA_BUFFER_SIZE; + int lastRxCounter = DMA_BUFFER_SIZE; int8_t ci, cq; int maxBehindBy = 0; @@ -1445,8 +1402,14 @@ void RAMFUNC SniffIso14443b(void) { // information in the trace buffer. int samples = 0; + iso1444b_setup_sniff(); + + // The DMA buffer, used to stream samples from the FPGA + dmabuf16_t *dma = get_dma16(); + uint16_t *upTo = dma->buf; + // Setup and start DMA. - if (!FpgaSetupSscDma((uint8_t *) dmaBuf, ISO14443B_DMA_BUFFER_SIZE)) { + if (!FpgaSetupSscDma((uint8_t *) dma->buf, DMA_BUFFER_SIZE)) { if (DBGLEVEL > 1) Dbprintf("[!] FpgaSetupSscDma failed. Exiting"); BigBuf_free(); return; @@ -1458,29 +1421,31 @@ void RAMFUNC SniffIso14443b(void) { // loop and listen for(;;) { - int behindBy = (lastRxCounter - AT91C_BASE_PDC_SSC->PDC_RCR) & (ISO14443B_DMA_BUFFER_SIZE - 1); + int behindBy = (lastRxCounter - AT91C_BASE_PDC_SSC->PDC_RCR) & (DMA_BUFFER_SIZE - 1); if (behindBy > maxBehindBy) { maxBehindBy = behindBy; } - if (behindBy < 1) continue; + if (behindBy == 0) continue; ci = *upTo >> 8; cq = *upTo; + uint16_t tagdata = *upTo; + upTo++; lastRxCounter--; - if (upTo >= dmaBuf + ISO14443B_DMA_BUFFER_SIZE) { // we have read all of the DMA buffer content. - upTo = dmaBuf; // start reading the circular buffer from the beginning again - lastRxCounter += ISO14443B_DMA_BUFFER_SIZE; - if (behindBy > (9 * ISO14443B_DMA_BUFFER_SIZE / 10)) { + if (upTo >= dma->buf + DMA_BUFFER_SIZE) { // we have read all of the DMA buffer content. + upTo = dma->buf; // start reading the circular buffer from the beginning again + lastRxCounter += DMA_BUFFER_SIZE; + if (behindBy > (9 * DMA_BUFFER_SIZE / 10)) { Dbprintf("About to blow circular buffer - aborted! behindBy=%d", behindBy); break; } } - if (AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_ENDRX)) { // DMA Counter Register had reached 0, already rotated. - AT91C_BASE_PDC_SSC->PDC_RNPR = (uint32_t) dmaBuf; // refresh the DMA Next Buffer and - AT91C_BASE_PDC_SSC->PDC_RNCR = ISO14443B_DMA_BUFFER_SIZE; // DMA Next Counter registers + if (AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_ENDRX)) { // DMA Counter Register had reached 0, already rotated. + AT91C_BASE_PDC_SSC->PDC_RNPR = (uint32_t) dma->buf; // refresh the DMA Next Buffer and + AT91C_BASE_PDC_SSC->PDC_RNCR = DMA_BUFFER_SIZE; // DMA Next Counter registers WDT_HIT(); if (BUTTON_PRESS()) { @@ -1522,7 +1487,7 @@ void RAMFUNC SniffIso14443b(void) { // is this | 0x01 the error? & 0xfe in https://github.com/Proxmark/proxmark3/issues/103 // LSB is a fpga signal bit. - if (Handle14443bTagSamplesDemod(ci/2, cq/2) >= 0) { + if (Handle14443bTagSamplesDemod(tagdata) >= 0) { time_stop = GetCountSspClk() - time_0; LogTrace(Demod.output, Demod.len, time_start, time_stop, NULL, false); Uart14bReset(); diff --git a/armsrc/iso15693.c b/armsrc/iso15693.c index ff59d260a..36530f72b 100644 --- a/armsrc/iso15693.c +++ b/armsrc/iso15693.c @@ -91,7 +91,7 @@ /////////////////////////////////////////////////////////////////////// // buffers -#define ISO15693_DMA_BUFFER_SIZE 256 // must be a power of 2 +//#define ISO15693_DMA_BUFFER_SIZE 256 // must be a power of 2 #define ISO15693_MAX_RESPONSE_LENGTH 36 // allows read single block with the maximum block size of 256bits. Read multiple blocks not supported yet #define ISO15693_MAX_COMMAND_LENGTH 45 // allows write single block with the maximum block size of 256bits. Write multiple blocks not supported yet @@ -305,7 +305,7 @@ void TransmitTo15693Reader(const uint8_t *cmd, size_t len, uint32_t *start_time, uint8_t bits_to_shift = 0x00; uint8_t bits_to_send = 0x00; for (size_t c = 0; c < len; c++) { - for (int i = (c==0?4:7); i >= 0; i--) { + for (int i = (c == 0 ? 4 : 7); i >= 0; i--) { uint8_t cmd_bits = ((cmd[c] >> i) & 0x01) ? 0xff : 0x00; for (int j = 0; j < (slow ? 4 : 1); ) { if (AT91C_BASE_SSC->SSC_SR & AT91C_SSC_TXRDY) { @@ -406,7 +406,7 @@ static RAMFUNC int Handle15693SamplesFromTag(uint16_t amplitude, DecodeTag_t *De DecodeTag->threshold_sof = (amplitude - DecodeTag->previous_amplitude) / 2; } else { DecodeTag->posCount = 2; - DecodeTag->threshold_sof = DecodeTag->threshold_sof/2; + DecodeTag->threshold_sof = DecodeTag->threshold_sof / 2; } // DecodeTag->posCount = 2; DecodeTag->state = STATE_TAG_SOF_HIGH; @@ -621,7 +621,6 @@ static void DecodeTagReset(DecodeTag_t *DecodeTag) { int GetIso15693AnswerFromTag(uint8_t* response, uint16_t max_len, uint16_t timeout, uint32_t *eof_time) { int samples = 0, ret = 0; - uint16_t dmaBuf[ISO15693_DMA_BUFFER_SIZE] = {0}; // the Decoder data structure DecodeTag_t DecodeTag = { 0 }; @@ -635,13 +634,18 @@ int GetIso15693AnswerFromTag(uint8_t* response, uint16_t max_len, uint16_t timeo // Setup and start DMA. FpgaSetupSsc(FPGA_MAJOR_MODE_HF_READER); - FpgaSetupSscDma((uint8_t*) dmaBuf, ISO15693_DMA_BUFFER_SIZE); + + // The DMA buffer, used to stream samples from the FPGA + dmabuf16_t *dma = get_dma16(); + + FpgaSetupSscDma((uint8_t*) dma->buf, DMA_BUFFER_SIZE); + uint32_t dma_start_time = 0; - uint16_t *upTo = dmaBuf; + uint16_t *upTo = dma->buf; for(;;) { - uint16_t behindBy = ((uint16_t*)AT91C_BASE_PDC_SSC->PDC_RPR - upTo) & (ISO15693_DMA_BUFFER_SIZE-1); + uint16_t behindBy = ((uint16_t*)AT91C_BASE_PDC_SSC->PDC_RPR - upTo) & (DMA_BUFFER_SIZE - 1); if (behindBy == 0) continue; @@ -653,17 +657,17 @@ int GetIso15693AnswerFromTag(uint8_t* response, uint16_t max_len, uint16_t timeo volatile uint16_t tagdata = *upTo++; - if (upTo >= dmaBuf + ISO15693_DMA_BUFFER_SIZE) { // we have read all of the DMA buffer content. - upTo = dmaBuf; // start reading the circular buffer from the beginning - if (behindBy > (9 * ISO15693_DMA_BUFFER_SIZE / 10)) { + if (upTo >= dma->buf + DMA_BUFFER_SIZE) { // we have read all of the DMA buffer content. + upTo = dma->buf; // start reading the circular buffer from the beginning + if (behindBy > (9 * DMA_BUFFER_SIZE / 10)) { Dbprintf("About to blow circular buffer - aborted! behindBy=%d", behindBy); ret = -1; break; } } - if (AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_ENDRX)) { // DMA Counter Register had reached 0, already rotated. - AT91C_BASE_PDC_SSC->PDC_RNPR = (uint32_t) dmaBuf; // refresh the DMA Next Buffer and - AT91C_BASE_PDC_SSC->PDC_RNCR = ISO15693_DMA_BUFFER_SIZE; // DMA Next Counter registers + if (AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_ENDRX)) { // DMA Counter Register had reached 0, already rotated. + AT91C_BASE_PDC_SSC->PDC_RNPR = (uint32_t) dma->buf; // refresh the DMA Next Buffer and + AT91C_BASE_PDC_SSC->PDC_RNCR = DMA_BUFFER_SIZE; // DMA Next Counter registers } if (Handle15693SamplesFromTag(tagdata, &DecodeTag)) { @@ -1016,8 +1020,6 @@ int GetIso15693CommandFromReader(uint8_t *received, size_t max_len, uint32_t *eo int samples = 0; bool gotFrame = false; - uint8_t dmaBuf[ISO15693_DMA_BUFFER_SIZE] = {0}; - // the decoder data structure DecodeReader_t DecodeReader = {0}; DecodeReaderInit(&DecodeReader, received, max_len, 0, NULL); @@ -1036,25 +1038,26 @@ int GetIso15693CommandFromReader(uint8_t *received, size_t max_len, uint32_t *eo uint32_t dma_start_time = GetCountSspClk() & 0xfffffff8; // Setup and start DMA. - FpgaSetupSscDma(dmaBuf, ISO15693_DMA_BUFFER_SIZE); - uint8_t *upTo = dmaBuf; + dmabuf8_t *dma = get_dma8(); + FpgaSetupSscDma(dma->buf, DMA_BUFFER_SIZE); + uint8_t *upTo = dma->buf; for (;;) { - uint16_t behindBy = ((uint8_t*)AT91C_BASE_PDC_SSC->PDC_RPR - upTo) & (ISO15693_DMA_BUFFER_SIZE - 1); + uint16_t behindBy = ((uint8_t*)AT91C_BASE_PDC_SSC->PDC_RPR - upTo) & (DMA_BUFFER_SIZE - 1); if (behindBy == 0) continue; volatile uint8_t b = *upTo++; - if (upTo >= dmaBuf + ISO15693_DMA_BUFFER_SIZE) { // we have read all of the DMA buffer content. - upTo = dmaBuf; // start reading the circular buffer from the beginning - if (behindBy > (9*ISO15693_DMA_BUFFER_SIZE/10)) { + if (upTo >= dma->buf + DMA_BUFFER_SIZE) { // we have read all of the DMA buffer content. + upTo = dma->buf; // start reading the circular buffer from the beginning + if (behindBy > (9 * DMA_BUFFER_SIZE / 10)) { Dbprintf("About to blow circular buffer - aborted! behindBy %d", behindBy); break; } } if (AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_ENDRX)) { // DMA Counter Register had reached 0, already rotated. - AT91C_BASE_PDC_SSC->PDC_RNPR = (uint32_t) dmaBuf; // refresh the DMA Next Buffer and - AT91C_BASE_PDC_SSC->PDC_RNCR = ISO15693_DMA_BUFFER_SIZE; // DMA Next Counter registers + AT91C_BASE_PDC_SSC->PDC_RNPR = (uint32_t) dma->buf; // refresh the DMA Next Buffer and + AT91C_BASE_PDC_SSC->PDC_RNCR = DMA_BUFFER_SIZE; // DMA Next Counter registers } for (int i = 7; i >= 0; i--) { @@ -1146,12 +1149,8 @@ void SniffIso15693(uint8_t jam_search_len, uint8_t *jam_search_string) { clear_trace(); set_tracing(true); - - // The DMA buffer, used to stream samples from the FPGA - uint16_t dmaBuf[ISO15693_DMA_BUFFER_SIZE] = {0}; - + // Count of samples received so far, so that we can include timing - // information in the trace buffer. int samples = 0; DecodeTag_t DecodeTag = {0}; @@ -1168,29 +1167,32 @@ void SniffIso15693(uint8_t jam_search_len, uint8_t *jam_search_string) { Dbprintf(" Trace: %i bytes", BigBuf_max_traceLen()); Dbprintf(" Reader -> tag: %i bytes", ISO15693_MAX_COMMAND_LENGTH); Dbprintf(" tag -> Reader: %i bytes", ISO15693_MAX_RESPONSE_LENGTH); - Dbprintf(" DMA: %i bytes", ISO15693_DMA_BUFFER_SIZE * sizeof(uint16_t)); + Dbprintf(" DMA: %i bytes", DMA_BUFFER_SIZE * sizeof(uint16_t)); } Dbprintf("Sniff started. Press PM3 Button to stop."); FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER | FPGA_HF_READER_MODE_SNIFF_AMPLITUDE); LED_D_OFF(); + SetAdcMuxFor(GPIO_MUXSEL_HIPKD); FpgaSetupSsc(FPGA_MAJOR_MODE_HF_READER); StartCountSspClk(); - FpgaSetupSscDma((uint8_t*) dmaBuf, ISO15693_DMA_BUFFER_SIZE); + + // The DMA buffer, used to stream samples from the FPGA + dmabuf16_t *dma = get_dma16(); + FpgaSetupSscDma((uint8_t*)dma->buf, DMA_BUFFER_SIZE); + uint16_t *upTo = dma->buf; bool TagIsActive = false; bool ReaderIsActive = false; bool ExpectTagAnswer = false; uint32_t dma_start_time = 0; - uint16_t *upTo = dmaBuf; - uint16_t max_behindBy = 0; // And now we loop, receiving samples. for(;;) { - uint16_t behindBy = ((uint16_t*)AT91C_BASE_PDC_SSC->PDC_RPR - upTo) & (ISO15693_DMA_BUFFER_SIZE-1); + uint16_t behindBy = ((uint16_t*)AT91C_BASE_PDC_SSC->PDC_RPR - upTo) & (DMA_BUFFER_SIZE - 1); if (behindBy > max_behindBy) { max_behindBy = behindBy; } @@ -1204,17 +1206,16 @@ void SniffIso15693(uint8_t jam_search_len, uint8_t *jam_search_string) { } uint16_t sniffdata = *upTo++; - - if (upTo >= dmaBuf + ISO15693_DMA_BUFFER_SIZE) { // we have read all of the DMA buffer content. - upTo = dmaBuf; // start reading the circular buffer from the beginning - if (behindBy > (9*ISO15693_DMA_BUFFER_SIZE/10)) { - + + if (upTo >= dma->buf + DMA_BUFFER_SIZE) { // we have read all of the DMA buffer content. + upTo = dma->buf; // start reading the circular buffer from the beginning + if (behindBy > (9 * DMA_BUFFER_SIZE / 10)) { Dbprintf("About to blow circular buffer - aborted! behindBy=%d, samples=%d", behindBy, samples); break; } - if (AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_ENDRX)) { // DMA Counter Register had reached 0, already rotated. - AT91C_BASE_PDC_SSC->PDC_RNPR = (uint32_t) dmaBuf; // refresh the DMA Next Buffer and - AT91C_BASE_PDC_SSC->PDC_RNCR = ISO15693_DMA_BUFFER_SIZE; // DMA Next Counter registers + if (AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_ENDRX)) { // DMA Counter Register had reached 0, already rotated. + AT91C_BASE_PDC_SSC->PDC_RNPR = (uint32_t) dma->buf; // refresh the DMA Next Buffer and + AT91C_BASE_PDC_SSC->PDC_RNCR = DMA_BUFFER_SIZE; // DMA Next Counter registers WDT_HIT(); if (BUTTON_PRESS()) { DbpString("Sniff stopped."); From 1f3e671443dc2784de6d7ec76aaecc14332f3b57 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 16 Jul 2020 10:54:30 +0200 Subject: [PATCH 0115/1047] fix #905 - memory corruptions when generating filename --- client/src/cmdhflto.c | 61 ++++++++++++++++++------------------------- 1 file changed, 25 insertions(+), 36 deletions(-) diff --git a/client/src/cmdhflto.c b/client/src/cmdhflto.c index c62289108..6623f9cd2 100644 --- a/client/src/cmdhflto.c +++ b/client/src/cmdhflto.c @@ -32,7 +32,7 @@ static int usage_lto_info(void) { PrintAndLogEx(NORMAL, " h this help"); PrintAndLogEx(NORMAL, ""); PrintAndLogEx(NORMAL, "Examples:"); - PrintAndLogEx(NORMAL, " hf lto info"); + PrintAndLogEx(NORMAL, _YELLOW_(" hf lto info")); return PM3_SUCCESS; } @@ -44,7 +44,7 @@ static int usage_lto_rdbl(void) { PrintAndLogEx(NORMAL, " e end block in decimal <= 254"); PrintAndLogEx(NORMAL, ""); PrintAndLogEx(NORMAL, "Examples:"); - PrintAndLogEx(NORMAL, " hf lto rdbl s 0 e 254 - Read data block from 0 to 254"); + PrintAndLogEx(NORMAL, _YELLOW_(" hf lto rdbl s 0 e 254") " - Read data block from 0 to 254"); return PM3_SUCCESS; } @@ -56,8 +56,7 @@ static int usage_lto_wrbl(void) { PrintAndLogEx(NORMAL, " d 32 bytes of data to write (64 hex characters, no space)"); PrintAndLogEx(NORMAL, ""); PrintAndLogEx(NORMAL, "Examples:"); - PrintAndLogEx(NORMAL, " hf lto wrbl b 128 d 0001020304050607080910111213141516171819202122232425262728293031 - write 00..31 to block address 128"); - PrintAndLogEx(NORMAL, " Use 'hf lto rdbl' for verification"); + PrintAndLogEx(NORMAL, _YELLOW_(" hf lto wrbl b 128 d 0001020304050607080910111213141516171819202122232425262728293031") " - write 00..31 to block address 128"); return PM3_SUCCESS; } @@ -68,7 +67,7 @@ static int usage_lto_dump(void) { PrintAndLogEx(NORMAL, " f file name"); PrintAndLogEx(NORMAL, ""); PrintAndLogEx(NORMAL, "Examples:"); - PrintAndLogEx(NORMAL, " hf lto dump f myfile"); + PrintAndLogEx(NORMAL, _YELLOW_(" hf lto dump f myfile")); return PM3_SUCCESS; } @@ -79,7 +78,7 @@ static int usage_lto_restore(void) { PrintAndLogEx(NORMAL, " f file name [.bin|.eml]"); PrintAndLogEx(NORMAL, ""); PrintAndLogEx(NORMAL, "Examples:"); - PrintAndLogEx(NORMAL, " hf lto restore f hf_lto_92C7842CFF.bin|.eml"); + PrintAndLogEx(NORMAL, _YELLOW_(" hf lto restore f hf_lto_92C7842CFF.bin|.eml")); return PM3_SUCCESS; } @@ -180,8 +179,7 @@ static int CmdHfLTOInfo(const char *Cmd) { //Validations if (errors) { - usage_lto_info(); - return PM3_EINVARG; + return usage_lto_info(); } return infoLTO(true); @@ -384,7 +382,7 @@ static int CmdHfLTOWriteBlock(const char *Cmd) { bool b_opt_selected = false; bool d_opt_selected = false; uint8_t blk = 128; - uint8_t blkData[32] = {0}; + uint8_t block_data[32] = {0}; while (param_getchar(Cmd, cmdp) != 0x00 && !errors) { switch (tolower(param_getchar(Cmd, cmdp))) { @@ -396,7 +394,7 @@ static int CmdHfLTOWriteBlock(const char *Cmd) { cmdp += 2; break; case 'd': - if (param_gethex(Cmd, cmdp + 1, blkData, 64)) { + if (param_gethex(Cmd, cmdp + 1, block_data, 64)) { PrintAndLogEx(WARNING, "block data must include 64 HEX symbols"); errors = true; break; @@ -413,14 +411,17 @@ static int CmdHfLTOWriteBlock(const char *Cmd) { //Validations if (errors) { - usage_lto_wrbl(); - return PM3_EINVARG; + return usage_lto_wrbl(); } else if (b_opt_selected == false || d_opt_selected == false) { - PrintAndLogEx(WARNING, "Need to specify block address and data. See usage, h option"); - return PM3_EINVARG; + PrintAndLogEx(WARNING, "Need to specify block address and data."); + return usage_lto_wrbl(); } - return wrblLTO(blk, blkData, true); + int res = wrblLTO(blk, block_data, true); + if (res == PM3_SUCCESS) + PrintAndLogEx(HINT, "Try use 'hf lto rdbl' for verification"); + + return res; } int dumpLTO(uint8_t *dump, bool verbose) { @@ -446,11 +447,9 @@ int dumpLTO(uint8_t *dump, bool verbose) { ret_val = lto_rdbl(i, block_data_d00_d15, block_data_d16_d31, verbose); if (ret_val == PM3_SUCCESS) { - //Remove CRCs - for (int t = 0; t < 16; t++) { - dump[t + i * 32] = block_data_d00_d15[t]; - dump[t + i * 32 + 16] = block_data_d16_d31[t]; - } + // remove CRCs + memcpy(dump + i * 32, block_data_d00_d15, 16); + memcpy(dump + (i * 32) + 16, block_data_d16_d31, 16); } else { lto_switch_off_field(); return ret_val; @@ -467,7 +466,6 @@ static int CmdHfLTODump(const char *Cmd) { bool errors = false; uint32_t dump_len = CM_MEM_MAX_SIZE; char filename[FILE_PATH_SIZE] = {0}; - char serial_number[10] = {0}; while (param_getchar(Cmd, cmdp) != 0x00 && !errors) { switch (tolower(param_getchar(Cmd, cmdp))) { @@ -488,39 +486,32 @@ static int CmdHfLTODump(const char *Cmd) { } } - //Validations if (errors) { usage_lto_dump(); return PM3_EINVARG; } - // alloc memory uint8_t *dump = calloc(dump_len, sizeof(uint8_t)); if (!dump) { PrintAndLogEx(ERR, "error, cannot allocate memory"); return PM3_EMALLOC; } - // loop all blocks int ret_val = dumpLTO(dump, true); if (ret_val != PM3_SUCCESS) { free(dump); return ret_val; } - // save to file if (filename[0] == '\0') { - memcpy(serial_number, sprint_hex_inrow(dump, sizeof(serial_number)), sizeof(serial_number)); - char tmp_name[17] = "hf_lto_"; - strcat(tmp_name, serial_number); - memcpy(filename, tmp_name, sizeof(tmp_name)); + char *fptr = filename; + fptr += sprintf(fptr, "hf-lto-"); + FillFileNameByUID(fptr, dump, "-dump", 5); } saveFile(filename, ".bin", dump, dump_len); saveFileEML(filename, dump, dump_len, 32); - // free memory free(dump); - return PM3_SUCCESS; } @@ -539,16 +530,14 @@ int restoreLTO(uint8_t *dump, bool verbose) { return ret_val; } - uint8_t blkData[32] = {0}; + uint8_t block_data[32] = {0}; //Block address 0 and 1 are read-only for (uint8_t blk = 2; blk < 255; blk++) { - for (int i = 0; i < 32; i++) { - blkData[i] = dump[i + blk * 32]; - } + memcpy(block_data, dump + (blk * 32), 32); - ret_val = lto_wrbl(blk, blkData, verbose); + ret_val = lto_wrbl(blk, block_data, verbose); if (ret_val == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "Block %03d - " _YELLOW_("write success"), blk); From 1cef42b742a7a75d933d4ccd042294b1bdd3c9e9 Mon Sep 17 00:00:00 2001 From: David Berdik Date: Sat, 18 Jul 2020 19:26:45 -0400 Subject: [PATCH 0116/1047] Changed file extension used on output file usage example in gen_pm3mfsim_script.sh --- client/gen_pm3mfsim_script.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/gen_pm3mfsim_script.sh b/client/gen_pm3mfsim_script.sh index 73c7a4dd4..3adb8e420 100644 --- a/client/gen_pm3mfsim_script.sh +++ b/client/gen_pm3mfsim_script.sh @@ -11,7 +11,7 @@ show_usage() { echo echo "Usage:" - echo "${0##/} input_eml_without_extension output.pm3scr" + echo "${0##/} input_eml_without_extension output.cmd" exit } From 8ed1f131193452b89fe50a93b20ca9f0c3145379 Mon Sep 17 00:00:00 2001 From: David Berdik Date: Sat, 18 Jul 2020 19:34:17 -0400 Subject: [PATCH 0117/1047] Added missing 'u' parameter to file generated by gen_pm3mfsim_script.sh --- client/gen_pm3mfsim_script.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/gen_pm3mfsim_script.sh b/client/gen_pm3mfsim_script.sh index 3adb8e420..c3726d69c 100644 --- a/client/gen_pm3mfsim_script.sh +++ b/client/gen_pm3mfsim_script.sh @@ -32,4 +32,4 @@ rm $2 echo "hf mf eclr" >> $2 echo "hf mf eload" $1 >> $2 echo "hf mf ekeyprn" >> $2 -echo "hf mf sim" `cat $1.eml | (read -n 8 uid; echo $uid)` >> $2 \ No newline at end of file +echo "hf mf sim u" `cat $1.eml | (read -n 8 uid; echo $uid)` >> $2 \ No newline at end of file From a1529b44ca77236cc15fd099e39a2fa6fd0e9b3b Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sun, 19 Jul 2020 20:45:47 +0200 Subject: [PATCH 0118/1047] fix auth and --- armsrc/appmain.c | 6 + armsrc/iclass.c | 55 ++------ armsrc/iso15693.c | 228 +++++++++++++++++------------- client/src/cmdhficlass.c | 293 +++++++++++++++++++++++++-------------- client/src/cmdhficlass.h | 13 -- common/cardhelper.c | 11 ++ common/cardhelper.h | 1 + include/pm3_cmd.h | 17 +++ 8 files changed, 367 insertions(+), 257 deletions(-) diff --git a/armsrc/appmain.c b/armsrc/appmain.c index 094982a3c..7f4f24c43 100644 --- a/armsrc/appmain.c +++ b/armsrc/appmain.c @@ -960,6 +960,7 @@ static void PacketReceived(PacketCommandNG *packet) { case CMD_LF_HITAG_SNIFF: { // Eavesdrop Hitag tag, args = type SniffHitag2(); // SniffHitag2(packet->oldarg[0]); + reply_ng(CMD_LF_HITAG_SNIFF, PM3_SUCCESS, NULL, 0); break; } case CMD_LF_HITAG_SIMULATE: { // Simulate Hitag tag, args = memory content @@ -1027,6 +1028,7 @@ static void PacketReceived(PacketCommandNG *packet) { } PACKED; struct p *payload = (struct p *) packet->data.asBytes; SniffIso15693(payload->jam_search_len, payload->jam_search_string); + reply_ng(CMD_HF_ISO15693_SNIFF, PM3_SUCCESS, NULL, 0); break; } case CMD_HF_ISO15693_COMMAND: { @@ -1089,6 +1091,7 @@ static void PacketReceived(PacketCommandNG *packet) { } case CMD_HF_ISO14443B_SNIFF: { SniffIso14443b(); + reply_ng(CMD_HF_ISO14443B_SNIFF, PM3_SUCCESS, NULL, 0); break; } case CMD_HF_ISO14443B_SIMULATE: { @@ -1113,6 +1116,7 @@ static void PacketReceived(PacketCommandNG *packet) { } case CMD_HF_FELICA_SNIFF: { felica_sniff(packet->oldarg[0], packet->oldarg[1]); + reply_ng(CMD_HF_FELICA_SNIFF, PM3_SUCCESS, NULL, 0); break; } case CMD_HF_FELICALITE_DUMP: { @@ -1124,6 +1128,7 @@ static void PacketReceived(PacketCommandNG *packet) { #ifdef WITH_ISO14443a case CMD_HF_ISO14443A_SNIFF: { SniffIso14443a(packet->data.asBytes[0]); + reply_ng(CMD_HF_ISO14443A_SNIFF, PM3_SUCCESS, NULL, 0); break; } case CMD_HF_ISO14443A_READER: { @@ -1380,6 +1385,7 @@ static void PacketReceived(PacketCommandNG *packet) { } PACKED; struct p *payload = (struct p *) packet->data.asBytes; SniffIClass(payload->jam_search_len, payload->jam_search_string); + reply_ng(CMD_HF_ICLASS_SNIFF, PM3_SUCCESS, NULL, 0); break; } case CMD_HF_ICLASS_SIMULATE: { diff --git a/armsrc/iclass.c b/armsrc/iclass.c index d8892a74c..fa161b813 100644 --- a/armsrc/iclass.c +++ b/armsrc/iclass.c @@ -38,7 +38,7 @@ // The length of a received command will in most cases be no more than 18 bytes. // we expect max 34 bytes as tag answer (response to READ4) #ifndef ICLASS_BUFFER_SIZE -#define ICLASS_BUFFER_SIZE 34 +#define ICLASS_BUFFER_SIZE 34 + 2 #endif // iCLASS has a slightly different timing compared to ISO15693. According to the picopass data sheet the tag response is expected 330us after @@ -481,7 +481,7 @@ int do_iclass_simulation(int simulationMode, uint8_t *reader_mac_buf) { uint8_t cmd, options, block; int len = 0; - bool exit_loop = 0; + bool exit_loop = false; while (exit_loop == false) { WDT_HIT(); @@ -863,12 +863,11 @@ static bool select_iclass_tag(uint8_t *card_data, bool use_credit_key, uint32_t static uint8_t identify[] = { ICLASS_CMD_READ_OR_IDENTIFY, 0x00, 0x73, 0x33 }; static uint8_t select[] = { 0x80 | ICLASS_CMD_SELECT, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; static uint8_t read_conf[] = { ICLASS_CMD_READ_OR_IDENTIFY, 0x01, 0xfa, 0x22 }; - static uint8_t read_check_cc[] = { 0x80 | ICLASS_CMD_READCHECK, 0x02 }; + uint8_t read_check_cc[] = { 0x80 | ICLASS_CMD_READCHECK, 0x02 }; uint8_t resp[ICLASS_BUFFER_SIZE] = {0}; // Bit 4: K.If this bit equals to one, the READCHECK will use the Credit Key (Kc); if equals to zero, Debit Key (Kd) will be used // bit 7: parity. - if (use_credit_key) read_check_cc[0] = 0x10 | ICLASS_CMD_READCHECK; @@ -878,7 +877,6 @@ static bool select_iclass_tag(uint8_t *card_data, bool use_credit_key, uint32_t int len = GetIso15693AnswerFromTag(resp, sizeof(resp), ICLASS_READER_TIMEOUT_ACTALL, eof_time); if (len < 0) return false; - // send Identify start_time = *eof_time + DELAY_ICLASS_VICC_TO_VCD_READER; @@ -936,7 +934,7 @@ void ReaderIClass(uint8_t flags) { uint8_t card_data[6 * 8] = {0xFF}; // uint8_t last_csn[8] = {0, 0, 0, 0, 0, 0, 0, 0}; - uint8_t resp[ICLASS_BUFFER_SIZE]; + uint8_t resp[ICLASS_BUFFER_SIZE] = {0}; memset(resp, 0xFF, sizeof(resp)); // bool flag_readonce = flags & FLAG_ICLASS_READER_ONLY_ONCE; // flag to read until one tag is found successfully @@ -1162,21 +1160,9 @@ void iClass_Authentication(uint8_t *bytes) { bool iclass_auth(uint8_t *bytes, bool send_reply, uint8_t *dataout) { - struct p { - uint8_t key[8]; - bool use_raw; - bool use_elite; - bool use_credit_key; - } PACKED; - struct p *payload = (struct p *)bytes; - - // device response message - struct { - bool isOK; - uint8_t div_key[8]; - uint8_t mac[4]; - } PACKED packet; - + iclass_auth_req_t *payload = (iclass_auth_req_t *)bytes; + iclass_auth_resp_t packet; + Iso15693InitReader(); uint8_t card_data[3 * 8] = {0xFF}; @@ -1208,7 +1194,7 @@ bool iclass_auth(uint8_t *bytes, bool send_reply, uint8_t *dataout) { check[7] = packet.mac[2]; check[8] = packet.mac[3]; - uint8_t resp[ICLASS_BUFFER_SIZE]; + uint8_t resp[ICLASS_BUFFER_SIZE] = {0}; packet.isOK = iclass_send_cmd_with_retries(check, sizeof(check), resp, sizeof(resp), 4, 3, start_time, ICLASS_READER_TIMEOUT_OTHERS, &eof_time); if (send_reply) @@ -1236,12 +1222,12 @@ typedef struct iclass_premac { void iClass_Authentication_fast(uint64_t arg0, uint64_t arg1, uint8_t *datain) { uint8_t i = 0, isOK = 0; - uint8_t lastChunk = ((arg0 >> 8) & 0xFF); +// uint8_t lastChunk = ((arg0 >> 8) & 0xFF); bool use_credit_key = ((arg0 >> 16) & 0xFF); uint8_t keyCount = arg1 & 0xFF; uint8_t check[9] = { ICLASS_CMD_CHECK }; - uint8_t resp[ICLASS_BUFFER_SIZE]; + uint8_t resp[ICLASS_BUFFER_SIZE] = {0}; uint8_t readcheck_cc[] = { 0x80 | ICLASS_CMD_READCHECK, 0x02 }; if (use_credit_key) @@ -1260,8 +1246,8 @@ void iClass_Authentication_fast(uint64_t arg0, uint64_t arg1, uint8_t *datain) { Iso15693InitReader(); - uint32_t start_time = 0; - uint32_t eof_time = 0; + uint32_t start_time = 0, eof_time = 0; + if (select_iclass_tag(card_data, use_credit_key, &eof_time) == false) goto out; @@ -1305,15 +1291,7 @@ void iClass_Authentication_fast(uint64_t arg0, uint64_t arg1, uint8_t *datain) { out: // send keyindex. reply_mix(CMD_HF_ICLASS_CHKKEYS, isOK, i, 0, 0, 0); - - if (isOK >= 1 || lastChunk) { - LED_A_OFF(); - } - switch_off(); - - LED_B_OFF(); - LED_C_OFF(); } // Tries to read block. @@ -1338,8 +1316,8 @@ void iClass_ReadBlk(uint8_t blockno) { LED_A_ON(); result.isOK = iclass_readblock(blockno, result.blockdata); - switch_off(); reply_ng(CMD_HF_ICLASS_READBL, PM3_SUCCESS, (uint8_t *)&result, sizeof(result)); + switch_off(); } // Dump command seems to dump a block related portion of card memory. @@ -1372,11 +1350,6 @@ void iClass_Dump(uint8_t start_blockno, uint8_t numblks) { switch_off(); - // return pointer to dump memory in arg3 - // iceman: why not return | dataout - getbigbuf ? Should give exact location. -// Dbprintf("ICE:: dataout, %u max trace %u, bb start %u, data-bb %u ", dataout, BigBuf_max_traceLen(), BigBuf_get_addr(), dataout - BigBuf_get_addr() ); -// Dbprintf("ICE:: bb size %u, malloced %u (255*8)", BigBuf_get_size(), BigBuf_get_size() - (dataout - BigBuf_get_addr()) ); -// reply_mix(CMD_ACK, isOK, blkcnt, BigBuf_max_traceLen(), 0, 0); struct p { bool isOK; uint8_t block_cnt; @@ -1384,7 +1357,7 @@ void iClass_Dump(uint8_t start_blockno, uint8_t numblks) { } PACKED payload; payload.isOK = isOK; payload.block_cnt = blkcnt; - payload.bb_offset = BigBuf_max_traceLen(); + payload.bb_offset = dataout - BigBuf_get_addr(); reply_ng(CMD_HF_ICLASS_DUMP, PM3_SUCCESS, (uint8_t *)&payload, sizeof(payload)); BigBuf_free(); } diff --git a/armsrc/iso15693.c b/armsrc/iso15693.c index 36530f72b..df576d3b3 100644 --- a/armsrc/iso15693.c +++ b/armsrc/iso15693.c @@ -91,7 +91,6 @@ /////////////////////////////////////////////////////////////////////// // buffers -//#define ISO15693_DMA_BUFFER_SIZE 256 // must be a power of 2 #define ISO15693_MAX_RESPONSE_LENGTH 36 // allows read single block with the maximum block size of 256bits. Read multiple blocks not supported yet #define ISO15693_MAX_COMMAND_LENGTH 45 // allows write single block with the maximum block size of 256bits. Write multiple blocks not supported yet @@ -106,7 +105,6 @@ #define AddCrc15(data, len) compute_crc(CRC_15693, (data), (len), (data)+(len), (data)+(len)+1) static void BuildIdentifyRequest(uint8_t *cmd); -static void BuildInventoryResponse(uint8_t *uid); // --------------------------- // Signal Processing @@ -255,12 +253,13 @@ void TransmitTo15693Tag(const uint8_t *cmd, int len, uint32_t *start_time) { *start_time = (GetCountSspClk() + 16) & 0xfffffff0; // next possible time } - while (GetCountSspClk() < *start_time) - /* wait */ ; + // wait + while (GetCountSspClk() < *start_time) ; LED_B_ON(); for (int c = 0; c < len; c++) { volatile uint8_t data = cmd[c]; + for (uint8_t i = 0; i < 8; i++) { uint16_t send_word = (data & 0x80) ? 0xffff : 0x0000; while (!(AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_TXRDY))) ; @@ -294,8 +293,8 @@ void TransmitTo15693Reader(const uint8_t *cmd, size_t len, uint32_t *start_time, } } - while (GetCountSspClk() < (modulation_start_time & 0xfffffff8)) - /* wait */ ; + // wait + while (GetCountSspClk() < (modulation_start_time & 0xfffffff8)) ; uint8_t shift_delay = modulation_start_time & 0x00000007; @@ -304,9 +303,12 @@ void TransmitTo15693Reader(const uint8_t *cmd, size_t len, uint32_t *start_time, LED_C_ON(); uint8_t bits_to_shift = 0x00; uint8_t bits_to_send = 0x00; + for (size_t c = 0; c < len; c++) { for (int i = (c == 0 ? 4 : 7); i >= 0; i--) { + uint8_t cmd_bits = ((cmd[c] >> i) & 0x01) ? 0xff : 0x00; + for (int j = 0; j < (slow ? 4 : 1); ) { if (AT91C_BASE_SSC->SSC_SR & AT91C_SSC_TXRDY) { bits_to_send = bits_to_shift << (8 - shift_delay) | cmd_bits >> shift_delay; @@ -380,7 +382,7 @@ typedef struct DecodeTag { //----------------------------------------------------------------------------- static RAMFUNC int Handle15693SamplesFromTag(uint16_t amplitude, DecodeTag_t *DecodeTag) { switch (DecodeTag->state) { - case STATE_TAG_SOF_LOW: + case STATE_TAG_SOF_LOW: { // waiting for a rising edge if (amplitude > NOISE_THRESHOLD + DecodeTag->previous_amplitude) { if (DecodeTag->posCount > 10) { @@ -395,8 +397,8 @@ static RAMFUNC int Handle15693SamplesFromTag(uint16_t amplitude, DecodeTag_t *De DecodeTag->previous_amplitude = amplitude; } break; - - case STATE_TAG_SOF_RISING_EDGE: + } + case STATE_TAG_SOF_RISING_EDGE: { if (amplitude > DecodeTag->threshold_sof + DecodeTag->previous_amplitude) { // edge still rising if (amplitude > DecodeTag->threshold_sof + DecodeTag->threshold_sof) { // steeper edge, take this as time reference DecodeTag->posCount = 1; @@ -411,8 +413,8 @@ static RAMFUNC int Handle15693SamplesFromTag(uint16_t amplitude, DecodeTag_t *De // DecodeTag->posCount = 2; DecodeTag->state = STATE_TAG_SOF_HIGH; break; - - case STATE_TAG_SOF_HIGH: + } + case STATE_TAG_SOF_HIGH: { // waiting for 10 times high. Take average over the last 8 if (amplitude > DecodeTag->threshold_sof) { DecodeTag->posCount++; @@ -429,8 +431,8 @@ static RAMFUNC int Handle15693SamplesFromTag(uint16_t amplitude, DecodeTag_t *De DecodeTag->state = STATE_TAG_SOF_LOW; } break; - - case STATE_TAG_SOF_HIGH_END: + } + case STATE_TAG_SOF_HIGH_END: { // check for falling edge if (DecodeTag->posCount == 13 && amplitude < DecodeTag->threshold_sof) { DecodeTag->lastBit = SOF_PART1; // detected 1st part of SOF (12 samples low and 12 samples high) @@ -458,8 +460,8 @@ static RAMFUNC int Handle15693SamplesFromTag(uint16_t amplitude, DecodeTag_t *De } } break; - - case STATE_TAG_RECEIVING_DATA: + } + case STATE_TAG_RECEIVING_DATA: { // FpgaDisableTracing(); // DEBUGGING // Dbprintf("amplitude = %d, threshold_sof = %d, threshold_half/4 = %d, previous_amplitude = %d", // amplitude, @@ -547,8 +549,8 @@ static RAMFUNC int Handle15693SamplesFromTag(uint16_t amplitude, DecodeTag_t *De } DecodeTag->posCount++; break; - - case STATE_TAG_EOF: + } + case STATE_TAG_EOF: { if (DecodeTag->posCount == 1) { DecodeTag->sum1 = 0; DecodeTag->sum2 = 0; @@ -571,8 +573,8 @@ static RAMFUNC int Handle15693SamplesFromTag(uint16_t amplitude, DecodeTag_t *De } DecodeTag->posCount++; break; - - case STATE_TAG_EOF_TAIL: + } + case STATE_TAG_EOF_TAIL: { if (DecodeTag->posCount == 1) { DecodeTag->sum1 = 0; DecodeTag->sum2 = 0; @@ -595,6 +597,7 @@ static RAMFUNC int Handle15693SamplesFromTag(uint16_t amplitude, DecodeTag_t *De } DecodeTag->posCount++; break; + } } return false; @@ -690,20 +693,22 @@ int GetIso15693AnswerFromTag(uint8_t* response, uint16_t max_len, uint16_t timeo FpgaDisableSscDma(); + uint32_t sof_time = *eof_time - (DecodeTag.len * 8 * 8 * 16) // time for byte transfers - (32 * 16) // time for SOF transfer - (DecodeTag.lastBit != SOF_PART2 ? (32 * 16) : 0); // time for EOF transfer if (DBGLEVEL >= DBG_EXTENDED) { - Dbprintf("samples = %d, ret = %d, Decoder: state = %d, lastBit = %d, len = %d, bitCount = %d, posCount = %d", + Dbprintf("samples = %d, ret = %d, Decoder: state = %d, lastBit = %d, len = %d, bitCount = %d, posCount = %d, maxlen = %u", samples, ret, DecodeTag.state, DecodeTag.lastBit, DecodeTag.len, DecodeTag.bitCount, - DecodeTag.posCount + DecodeTag.posCount, + DecodeTag.max_len ); Dbprintf("timing: sof_time = %d, eof_time = %d", (sof_time * 4), (*eof_time * 4)); } @@ -890,11 +895,11 @@ static RAMFUNC int Handle15693SampleFromReader(bool bit, DecodeReader_t *DecodeR case STATE_READER_RECEIVE_DATA_1_OUT_OF_4: DecodeReader->posCount++; if (DecodeReader->posCount == 1) { - DecodeReader->sum1 = bit?1:0; + DecodeReader->sum1 = bit ? 1 : 0; } else if (DecodeReader->posCount <= 4) { if (bit) DecodeReader->sum1++; } else if (DecodeReader->posCount == 5) { - DecodeReader->sum2 = bit?1:0; + DecodeReader->sum2 = bit ? 1 : 0; } else { if (bit) DecodeReader->sum2++; } @@ -935,11 +940,11 @@ static RAMFUNC int Handle15693SampleFromReader(bool bit, DecodeReader_t *DecodeR case STATE_READER_RECEIVE_DATA_1_OUT_OF_256: DecodeReader->posCount++; if (DecodeReader->posCount == 1) { - DecodeReader->sum1 = bit?1:0; + DecodeReader->sum1 = bit ? 1 : 0; } else if (DecodeReader->posCount <= 4) { if (bit) DecodeReader->sum1++; } else if (DecodeReader->posCount == 5) { - DecodeReader->sum2 = bit?1:0; + DecodeReader->sum2 = bit ? 1 : 0; } else if (bit) { DecodeReader->sum2++; } @@ -976,20 +981,20 @@ static RAMFUNC int Handle15693SampleFromReader(bool bit, DecodeReader_t *DecodeR case STATE_READER_RECEIVE_JAMMING: DecodeReader->posCount++; if (DecodeReader->Coding == CODING_1_OUT_OF_4) { - if (DecodeReader->posCount == 7*16) { // 7 bits jammed + if (DecodeReader->posCount == 7 * 16) { // 7 bits jammed FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER | FPGA_HF_READER_MODE_SNIFF_AMPLITUDE); // stop jamming // FpgaDisableTracing(); LED_D_OFF(); - } else if (DecodeReader->posCount == 8*16) { + } else if (DecodeReader->posCount == 8 * 16) { DecodeReader->posCount = 0; DecodeReader->output[DecodeReader->byteCount++] = 0x00; DecodeReader->state = STATE_READER_RECEIVE_DATA_1_OUT_OF_4; } } else { - if (DecodeReader->posCount == 7*256) { // 7 bits jammend + if (DecodeReader->posCount == 7 * 256) { // 7 bits jammend FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER | FPGA_HF_READER_MODE_SNIFF_AMPLITUDE); // stop jamming LED_D_OFF(); - } else if (DecodeReader->posCount == 8*256) { + } else if (DecodeReader->posCount == 8 * 256) { DecodeReader->posCount = 0; DecodeReader->output[DecodeReader->byteCount++] = 0x00; DecodeReader->state = STATE_READER_RECEIVE_DATA_1_OUT_OF_256; @@ -1083,8 +1088,11 @@ int GetIso15693CommandFromReader(uint8_t *received, size_t max_len, uint32_t *eo FpgaDisableSscDma(); - if (DBGLEVEL >= DBG_EXTENDED) Dbprintf("samples = %d, gotFrame = %d, Decoder: state = %d, len = %d, bitCount = %d, posCount = %d", - samples, gotFrame, DecodeReader.state, DecodeReader.byteCount, DecodeReader.bitCount, DecodeReader.posCount); + if (DBGLEVEL >= DBG_EXTENDED) { + Dbprintf("samples = %d, gotFrame = %d, Decoder: state = %d, len = %d, bitCount = %d, posCount = %d", + samples, gotFrame, DecodeReader.state, DecodeReader.byteCount, + DecodeReader.bitCount, DecodeReader.posCount); + } if (DecodeReader.byteCount > 0) { uint32_t sof_time = *eof_time @@ -1154,11 +1162,11 @@ void SniffIso15693(uint8_t jam_search_len, uint8_t *jam_search_string) { int samples = 0; DecodeTag_t DecodeTag = {0}; - uint8_t response[ISO15693_MAX_RESPONSE_LENGTH]; + uint8_t response[ISO15693_MAX_RESPONSE_LENGTH] = {0}; DecodeTagInit(&DecodeTag, response, sizeof(response)); DecodeReader_t DecodeReader = {0}; - uint8_t cmd[ISO15693_MAX_COMMAND_LENGTH]; + uint8_t cmd[ISO15693_MAX_COMMAND_LENGTH] = {0}; DecodeReaderInit(&DecodeReader, cmd, sizeof(cmd), jam_search_len, jam_search_string); // Print some debug information about the buffer sizes @@ -1166,7 +1174,7 @@ void SniffIso15693(uint8_t jam_search_len, uint8_t *jam_search_string) { Dbprintf("Sniffing buffers initialized:"); Dbprintf(" Trace: %i bytes", BigBuf_max_traceLen()); Dbprintf(" Reader -> tag: %i bytes", ISO15693_MAX_COMMAND_LENGTH); - Dbprintf(" tag -> Reader: %i bytes", ISO15693_MAX_RESPONSE_LENGTH); + Dbprintf(" Tag -> Reader: %i bytes", ISO15693_MAX_RESPONSE_LENGTH); Dbprintf(" DMA: %i bytes", DMA_BUFFER_SIZE * sizeof(uint16_t)); } @@ -1184,9 +1192,9 @@ void SniffIso15693(uint8_t jam_search_len, uint8_t *jam_search_string) { FpgaSetupSscDma((uint8_t*)dma->buf, DMA_BUFFER_SIZE); uint16_t *upTo = dma->buf; - bool TagIsActive = false; - bool ReaderIsActive = false; - bool ExpectTagAnswer = false; + bool tag_is_active = false; + bool reader_is_active = false; + bool expect_tag_answer = false; uint32_t dma_start_time = 0; uint16_t max_behindBy = 0; @@ -1225,7 +1233,7 @@ void SniffIso15693(uint8_t jam_search_len, uint8_t *jam_search_string) { } // no need to try decoding reader data if the tag is sending - if (TagIsActive == false) { + if (tag_is_active == false) { if (Handle15693SampleFromReader(sniffdata & 0x02, &DecodeReader)) { @@ -1242,8 +1250,8 @@ void SniffIso15693(uint8_t jam_search_len, uint8_t *jam_search_string) { // And also reset the demod code, which might have been // false-triggered by the commands from the reader. DecodeTagReset(&DecodeTag); - ReaderIsActive = false; - ExpectTagAnswer = true; + reader_is_active = false; + expect_tag_answer = true; } else if (Handle15693SampleFromReader(sniffdata & 0x01, &DecodeReader)) { @@ -1261,15 +1269,15 @@ void SniffIso15693(uint8_t jam_search_len, uint8_t *jam_search_string) { // And also reset the demod code, which might have been // false-triggered by the commands from the reader. DecodeTagReset(&DecodeTag); - ReaderIsActive = false; - ExpectTagAnswer = true; + reader_is_active = false; + expect_tag_answer = true; } else { - ReaderIsActive = (DecodeReader.state >= STATE_READER_RECEIVE_DATA_1_OUT_OF_4); + reader_is_active = (DecodeReader.state >= STATE_READER_RECEIVE_DATA_1_OUT_OF_4); } } - if (!ReaderIsActive && ExpectTagAnswer) { // no need to try decoding tag data if the reader is currently sending or no answer expected yet + if (!reader_is_active && expect_tag_answer) { // no need to try decoding tag data if the reader is currently sending or no answer expected yet if (Handle15693SamplesFromTag(sniffdata >> 2, &DecodeTag)) { uint32_t eof_time = dma_start_time + (samples * 16) - DELAY_TAG_TO_ARM_SNIFF; // end of EOF @@ -1285,19 +1293,18 @@ void SniffIso15693(uint8_t jam_search_len, uint8_t *jam_search_string) { // And ready to receive another response. DecodeTagReset(&DecodeTag); DecodeReaderReset(&DecodeReader); - ExpectTagAnswer = false; - TagIsActive = false; + expect_tag_answer = false; + tag_is_active = false; } else { - TagIsActive = (DecodeTag.state >= STATE_TAG_RECEIVING_DATA); + tag_is_active = (DecodeTag.state >= STATE_TAG_RECEIVING_DATA); } } } - - FpgaDisableSscDma(); + switch_off(); DbpString("Sniff statistics:"); - Dbprintf(" ExpectTagAnswer: %d, TagIsActive: %d, ReaderIsActive: %d", ExpectTagAnswer, TagIsActive, ReaderIsActive); + Dbprintf(" ExpectTagAnswer: %d, TagIsActive: %d, ReaderIsActive: %d", expect_tag_answer, tag_is_active, reader_is_active); Dbprintf(" DecodeTag State: %d", DecodeTag.state); Dbprintf(" DecodeTag byteCnt: %d", DecodeTag.len); Dbprintf(" DecodeTag posCount: %d", DecodeTag.posCount); @@ -1305,18 +1312,18 @@ void SniffIso15693(uint8_t jam_search_len, uint8_t *jam_search_string) { Dbprintf(" DecodeReader byteCnt: %d", DecodeReader.byteCount); Dbprintf(" DecodeReader posCount: %d", DecodeReader.posCount); Dbprintf(" Trace length: %d", BigBuf_get_traceLen()); - Dbprintf(" Max behindBy: %d", max_behindBy); + Dbprintf(" Max behindBy: %d", max_behindBy); } // Initialize Proxmark3 as ISO15693 reader void Iso15693InitReader(void) { - + + LEDsoff(); FpgaDownloadAndGo(FPGA_BITSTREAM_HF); // Start from off (no field generated) FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); - LEDsoff(); - SpinDelay(50); + SpinDelay(10); // switch field on FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER); @@ -1329,7 +1336,7 @@ void Iso15693InitReader(void) { set_tracing(true); // give tags some time to energize - SpinDelay(200); + SpinDelay(250); StartCountSspClk(); } @@ -1354,31 +1361,6 @@ static void BuildIdentifyRequest(uint8_t *cmd) { AddCrc15(cmd, 3); } -// uid is in transmission order (which is reverse of display order) - -// When SIM: now the VICC>VCD responses when we are simulating a tag -static void BuildInventoryResponse(uint8_t *uid) { - - uint8_t cmd[CMD_INV_RESP] = {0}; - - cmd[0] = 0; // No error, no protocol format extension - cmd[1] = 0; // DSFID (data storage format identifier). 0x00 = not supported - - // 64-bit UID - cmd[2] = uid[7]; - cmd[3] = uid[6]; - cmd[4] = uid[5]; - cmd[5] = uid[4]; - cmd[6] = uid[3]; - cmd[7] = uid[2]; - cmd[8] = uid[1]; - cmd[9] = uid[0]; - - // CRC - AddCrc15(cmd, 10); - CodeIso15693AsTag(cmd, CMD_INV_RESP); -} - // Universal Method for sending to and recv bytes from a tag // init ... should we initialize the reader? // speed ... 0 low speed, 1 hi speed @@ -1403,7 +1385,7 @@ int SendDataTag(uint8_t *send, int sendlen, bool init, bool speed_fast, uint8_t tosend_t *ts = get_tosend(); TransmitTo15693Tag(ts->buf, ts->max, &start_time); - uint32_t end_time = start_time + 32 * (8 * ts->max - 4); // substract the 4 padding bits after EOF + uint32_t end_time = start_time + 32 * ((8 * ts->max) - 4); // substract the 4 padding bits after EOF LogTrace(send, sendlen, (start_time * 4), (end_time * 4), NULL, true); int res = 0; @@ -1573,9 +1555,9 @@ void Iso15693InitTag(void) { FpgaSetupSsc(FPGA_MAJOR_MODE_HF_SIMULATOR); SetAdcMuxFor(GPIO_MUXSEL_HIPKD); + clear_trace(); set_tracing(true); - // turn on clock StartCountSspClk(); } @@ -1583,44 +1565,90 @@ void Iso15693InitTag(void) { // all demodulation performed in arm rather than host. - greg void SimTagIso15693(uint8_t *uid) { + // free eventually allocated BigBuf memory + BigBuf_free_keep_EM(); + Iso15693InitTag(); LED_A_ON(); Dbprintf("ISO-15963 Simulating uid: %02X%02X%02X%02X%02X%02X%02X%02X", uid[0], uid[1], uid[2], uid[3], uid[4], uid[5], uid[6], uid[7]); - uint8_t buf[ISO15_MAX_FRAME]; - memset(buf, 0x00, sizeof(buf)); - LED_C_ON(); - // Build a suitable reponse to the reader INVENTORY cocmmand - // not so obvious, but in the call to BuildInventoryResponse, the command is copied to the global ToSend buffer used below. - BuildInventoryResponse(uid); + // Build INVENTORY command + uint8_t resp_inv[CMD_INV_RESP] = {0}; + + resp_inv[0] = 0; // No error, no protocol format extension + resp_inv[1] = 0; // DSFID (data storage format identifier). 0x00 = not supported + + // 64-bit UID + resp_inv[2] = uid[7]; + resp_inv[3] = uid[6]; + resp_inv[4] = uid[5]; + resp_inv[5] = uid[4]; + resp_inv[6] = uid[3]; + resp_inv[7] = uid[2]; + resp_inv[8] = uid[1]; + resp_inv[9] = uid[0]; + + // CRC + AddCrc15(resp_inv, 10); + CodeIso15693AsTag(resp_inv, CMD_INV_RESP); tosend_t *ts = get_tosend(); - while (!BUTTON_PRESS()) { + enum { NO_FIELD, IDLE, ACTIVATED, SELECTED, HALTED } chip_state = NO_FIELD; + + bool button_pressed = false; + int vHf = 0; // in mV + + bool exit_loop = false; + while (exit_loop == false) { WDT_HIT(); + // find reader field + if (chip_state == NO_FIELD) { + +#if defined RDV4 + vHf = (MAX_ADC_HF_VOLTAGE_RDV40 * SumAdc(ADC_CHAN_HF_RDV40, 32)) >> 15; +#else + vHf = (MAX_ADC_HF_VOLTAGE * SumAdc(ADC_CHAN_HF, 32)) >> 15; +#endif + if (vHf > MF_MINFIELDV) { + chip_state = IDLE; + LED_A_ON(); + } else { + continue; + } + } + // Listen to reader uint8_t cmd[ISO15693_MAX_COMMAND_LENGTH]; - uint32_t eof_time = 0, start_time = 0; - int cmd_len = GetIso15693CommandFromReader(cmd, sizeof(cmd), &eof_time); - - if ((cmd_len >= 5) && (cmd[0] & ISO15_REQ_INVENTORY) && (cmd[1] == ISO15_CMD_INVENTORY)) { // TODO: check more flags - bool slow = !(cmd[0] & ISO15_REQ_DATARATE_HIGH); - start_time = eof_time + DELAY_ISO15693_VCD_TO_VICC_SIM; - TransmitTo15693Reader(ts->buf, ts->max, &start_time, 0, slow); + uint32_t reader_eof_time = 0; + int cmd_len = GetIso15693CommandFromReader(cmd, sizeof(cmd), &reader_eof_time); + if (cmd_len < 0) { + Dbprintf("button pressed, exiting"); + button_pressed = true; + exit_loop = true; + break; } - if (DBGLEVEL >= DBG_EXTENDED) { - Dbprintf(" %d bytes read from reader:", cmd_len); - Dbhexdump(cmd_len, cmd, false); + // TODO: check more flags + if ((cmd_len >= 5) && (cmd[0] & ISO15_REQ_INVENTORY) && (cmd[1] == ISO15_CMD_INVENTORY)) { + bool slow = !(cmd[0] & ISO15_REQ_DATARATE_HIGH); + uint32_t response_time = reader_eof_time + DELAY_ISO15693_VCD_TO_VICC_SIM; + TransmitTo15693Reader(ts->buf, ts->max, &response_time, 0, slow); + LogTrace(resp_inv, CMD_INV_RESP, response_time * 32, (response_time * 32) + (ts->max * 32 * 64), NULL, false); + + chip_state = SELECTED; } } - + switch_off(); + + if (button_pressed) + DbpString("button pressed"); } // Since there is no standardized way of reading the AFI out of a tag, we will brute force it diff --git a/client/src/cmdhficlass.c b/client/src/cmdhficlass.c index 80f6dfab5..d063f1607 100644 --- a/client/src/cmdhficlass.c +++ b/client/src/cmdhficlass.c @@ -47,7 +47,7 @@ static uint8_t iClass_Key_Table[ICLASS_KEYS_MAX][8] = { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, }; static int usage_hf_iclass_sim(void) { @@ -379,6 +379,28 @@ static inline uint32_t leadingzeros(uint64_t a) { #endif } +// iclass card descriptors +const char * card_types[] = { + "PicoPass 16K / 16", // 000 + "PicoPass 32K with current book 16K / 16", // 001 + "Unknown Card Type!", // 010 + "Unknown Card Type!", // 011 + "PicoPass 2K", // 100 + "Unknown Card Type!", // 101 + "PicoPass 16K / 2", // 110 + "PicoPass 32K with current book 16K / 2", // 111 +}; + +uint8_t card_app2_limit[] = { + 0xff, + 0xff, + 0xff, + 0xff, + 0x1f, + 0xff, + 0xff, + 0xff, +}; static uint8_t isset(uint8_t val, uint8_t mask) { return (val & mask); @@ -434,7 +456,7 @@ static void fuse_config(const picopass_hdr *hdr) { ); } -static void getMemConfig(uint8_t mem_cfg, uint8_t chip_cfg, uint8_t *max_blk, uint8_t *app_areas, uint8_t *kb) { +static void getMemConfig(uint8_t mem_cfg, uint8_t chip_cfg, uint8_t *app_areas, uint8_t *kb) { // mem-bit 5, mem-bit 7, chip-bit 4: defines chip type uint8_t k16 = isset(mem_cfg, 0x80); //uint8_t k2 = isset(mem_cfg, 0x08); @@ -443,47 +465,54 @@ static void getMemConfig(uint8_t mem_cfg, uint8_t chip_cfg, uint8_t *max_blk, ui if (isset(chip_cfg, 0x10) && !k16 && !book) { *kb = 2; *app_areas = 2; - *max_blk = 31; } else if (isset(chip_cfg, 0x10) && k16 && !book) { *kb = 16; *app_areas = 2; - *max_blk = 255; //16kb } else if (notset(chip_cfg, 0x10) && !k16 && !book) { *kb = 16; *app_areas = 16; - *max_blk = 255; //16kb } else if (isset(chip_cfg, 0x10) && k16 && book) { *kb = 32; *app_areas = 3; - *max_blk = 255; //16kb } else if (notset(chip_cfg, 0x10) && !k16 && book) { *kb = 32; *app_areas = 17; - *max_blk = 255; //16kb } else { *kb = 32; *app_areas = 2; - *max_blk = 255; } } +static uint8_t get_mem_config(const picopass_hdr *hdr) { + uint8_t mem = hdr->conf.mem_config; + uint8_t chip = hdr->conf.chip_config; + // three configuration bits that decides sizes + uint8_t type = (chip & 0x10) >> 2; + type |= (mem & 0x80) >> 6; + type |= (mem & 0x20) >> 5; + return type; +} + static void mem_app_config(const picopass_hdr *hdr) { uint8_t mem = hdr->conf.mem_config; uint8_t chip = hdr->conf.chip_config; - uint8_t applimit = hdr->conf.app_limit; uint8_t kb = 2; uint8_t app_areas = 2; - uint8_t max_blk = 31; - getMemConfig(mem, chip, &max_blk, &app_areas, &kb); + getMemConfig(mem, chip, &app_areas, &kb); - if (applimit < 6) applimit = 26; - if (kb == 2 && (applimit > 0x1f)) applimit = 26; + // three configuration bits that decides sizes + uint8_t type = (chip & 0x10) >> 2; + type |= (mem & 0x80) >> 6; + type |= (mem & 0x20) >> 5; + + uint8_t app1_limit = hdr->conf.app_limit - 5; // minus header blocks + uint8_t app2_limit = card_app2_limit[type]; PrintAndLogEx(INFO, "------ " _CYAN_("Memory") " ------"); - PrintAndLogEx(INFO, " %u KBits/%u App Areas (%u bytes), max blocks 0x%02X (%02d)", kb, app_areas, max_blk * 8, mem, mem); - PrintAndLogEx(INFO, " AA1 blocks %u { 0x06 - 0x%02X (06 - %02d) }", applimit - 5 , applimit, applimit); - PrintAndLogEx(INFO, " AA2 blocks %u { 0x%02X - 0x%02X (%02d - %02d) }", max_blk - applimit, applimit + 1, max_blk, applimit + 1, max_blk); + PrintAndLogEx(INFO, " %u KBits/%u App Areas (%u bytes)", kb, app_areas, app2_limit * 8); + PrintAndLogEx(INFO, " AA1 blocks %u { 0x06 - 0x%02X (06 - %02d) }", app1_limit , app1_limit + 5, app1_limit + 5); + PrintAndLogEx(INFO, " AA2 blocks %u { 0x%02X - 0x%02X (%02d - %02d) }", app2_limit - app1_limit, app1_limit + 5 + 1, app2_limit, app1_limit + 5 + 1, app2_limit); PrintAndLogEx(INFO, "------ " _CYAN_("KeyAccess") " ------"); PrintAndLogEx(INFO, " Kd = Debit key (AA1), Kc = Credit key (AA2)"); @@ -552,7 +581,15 @@ static int CmdHFiClassSniff(const char *Cmd) { payload.jam_search_len = sizeof(update_epurse_sequence); memcpy(payload.jam_search_string, update_epurse_sequence, sizeof(payload.jam_search_string)); } + + PacketResponseNG resp; + clearCommandBuffer(); SendCommandNG(CMD_HF_ICLASS_SNIFF, (uint8_t *)&payload, sizeof(payload)); + + WaitForResponse(CMD_HF_ICLASS_SNIFF, &resp); + + PrintAndLogEx(HINT, "Try `" _YELLOW_("hf iclass list") "` to look at the collected trace"); + PrintAndLogEx(HINT, "Try `" _YELLOW_("trace save h") "` to save tracelog for later analysing"); return PM3_SUCCESS; } @@ -956,6 +993,7 @@ static int CmdHFiClassDecrypt(const char *Cmd) { } if (have_file) { + picopass_hdr *hdr = (picopass_hdr *)decrypted; uint8_t mem = hdr->conf.mem_config; @@ -963,10 +1001,7 @@ static int CmdHFiClassDecrypt(const char *Cmd) { uint8_t applimit = hdr->conf.app_limit; uint8_t kb = 2; uint8_t app_areas = 2; - uint8_t max_blk = 31; - getMemConfig(mem, chip, &max_blk, &app_areas, &kb); - - + getMemConfig(mem, chip, &app_areas, &kb); BLOCK79ENCRYPTION aa1_encryption = (decrypted[(6 * 8) + 7] & 0x03); @@ -976,7 +1011,8 @@ static int CmdHFiClassDecrypt(const char *Cmd) { PrintAndLogEx(WARNING, "Actual file len " _YELLOW_("%zu") " vs HID app-limit len " _YELLOW_("%u"), decryptedlen, applimit * 8); PrintAndLogEx(INFO, "Setting limit to " _GREEN_("%u"), limit * 8); } - uint8_t numblocks4userid = GetNumberBlocksForUserId(decrypted + (6 * 8)); + + //uint8_t numblocks4userid = GetNumberBlocksForUserId(decrypted + (6 * 8)); for (uint16_t blocknum = 0; blocknum < limit; ++blocknum) { @@ -987,7 +1023,7 @@ static int CmdHFiClassDecrypt(const char *Cmd) { continue; // Decrypted block 7,8,9 if configured. - if (blocknum > 6 && blocknum <= 6 + numblocks4userid && memcmp(enc_data, empty, 8) != 0) { + if (blocknum > 6 && blocknum <= 9 && memcmp(enc_data, empty, 8) != 0) { if (use_sc) { Decrypt(enc_data, decrypted + idx); } else { @@ -996,13 +1032,14 @@ static int CmdHFiClassDecrypt(const char *Cmd) { } } - //Use the first block (CSN) for filename + // use the first block (CSN) for filename char *fptr = calloc(50, sizeof(uint8_t)); - if (!fptr) { + if (fptr == false) { PrintAndLogEx(WARNING, "Failed to allocate memory"); free(decrypted); return PM3_EMALLOC; } + strcat(fptr, "hf-iclass-"); FillFileNameByUID(fptr, hdr->csn, "-dump-decrypted", sizeof(hdr->csn)); @@ -1013,6 +1050,8 @@ static int CmdHFiClassDecrypt(const char *Cmd) { PrintAndLogEx(INFO, "Following output skips CSN / block0"); printIclassDumpContents(decrypted, 1, (decryptedlen / 8), decryptedlen); + PrintAndLogEx(NORMAL, ""); + // decode block 6 if (memcmp(decrypted + (8 * 6), empty, 8) != 0) { if (use_sc) { @@ -1029,7 +1068,7 @@ static int CmdHFiClassDecrypt(const char *Cmd) { mid = bytes_to_num(decrypted + (8 * 7), 4); bot = bytes_to_num(decrypted + (8 * 7) + 4, 4); - PrintAndLogEx(INFO, "Block 7 binary"); + PrintAndLogEx(INFO, "Block 7 decoder"); char hexstr[8 + 1] = {0}; hex_to_buffer((uint8_t *)hexstr, decrypted + (8 * 7), 8, sizeof(hexstr) - 1, 0, 0, true); @@ -1039,15 +1078,36 @@ static int CmdHFiClassDecrypt(const char *Cmd) { uint8_t i = 0; while (i < strlen(binstr) && binstr[i++] == '0'); - PrintAndLogEx(SUCCESS, "%s", binstr + i); + PrintAndLogEx(SUCCESS, "Binary..................... " _GREEN_("%s"), binstr + i); PrintAndLogEx(INFO, "Wiegand decode"); wiegand_message_t packed = initialize_message_object(top, mid, bot); HIDTryUnpack(&packed, true); - PrintAndLogEx(INFO, "-----------------------------------------------------------------"); + } else { PrintAndLogEx(INFO, "No credential found."); } + + // decode block 9 + if (memcmp(decrypted + (8 * 9), empty, 8) != 0) { + + uint8_t usr_blk_len = GetNumberBlocksForUserId(decrypted + (8 * 6)); + if (usr_blk_len < 3) { + + PrintAndLogEx(NORMAL, ""); + PrintAndLogEx(INFO, "Block 9 decoder"); + uint8_t pinsize = 10; + if (use_sc) { + pinsize = GetPinSize(decrypted + (8 * 6)); + } + uint64_t pin = bytes_to_num(decrypted + (8 * 9), 5); + char tmp[17] = {0}; + sprintf(tmp, "%."PRIu64, BCD2DEC(pin)); + PrintAndLogEx(INFO, "PIN........................ " _GREEN_("%.*s"), pinsize, tmp); + } + } + + PrintAndLogEx(INFO, "-----------------------------------------------------------------"); free(decrypted); free(fptr); @@ -1178,7 +1238,7 @@ static bool select_and_auth(uint8_t *KEY, uint8_t *MAC, uint8_t *div_key, bool u .use_credit_key = use_credit_key }; memcpy(payload.key, KEY, 8); - + SendCommandNG(CMD_HF_ICLASS_AUTH, (uint8_t*)&payload, sizeof(payload)); PacketResponseNG resp; clearCommandBuffer(); @@ -1205,7 +1265,9 @@ static bool select_and_auth(uint8_t *KEY, uint8_t *MAC, uint8_t *div_key, bool u if (MAC) memcpy(MAC, packet->mac, sizeof(packet->mac)); - if (verbose) PrintAndLogEx(SUCCESS, "authing with %s: %s", rawkey ? "raw key" : "diversified key", sprint_hex(div_key, 8)); + if (verbose) + PrintAndLogEx(SUCCESS, "authing with %s: %s", rawkey ? "raw key" : "diversified key", sprint_hex(div_key, 8)); + return true; } @@ -1214,15 +1276,11 @@ static int CmdHFiClassDump(const char *Cmd) { uint8_t MAC[4] = {0x00, 0x00, 0x00, 0x00}; uint8_t div_key[8] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; uint8_t c_div_key[8] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; - uint8_t blockno = 0; - uint8_t numblks = 0; - uint8_t maxBlk = 31; - uint8_t app_areas = 1; - uint8_t kb = 2; uint8_t KEY[8] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; uint8_t CreditKEY[8] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; uint8_t keyNbr = 0; uint8_t dataLen = 0; + uint8_t app_limit1, app_limit2 = 0; uint8_t fileNameLen = 0; char filename[FILE_PATH_SIZE] = {0}; char tempStr[50] = {0}; @@ -1329,6 +1387,7 @@ static int CmdHFiClassDump(const char *Cmd) { uint8_t readStatus = resp.oldarg[0] & 0xff; uint8_t *data = resp.data.asBytes; + picopass_hdr *hdr = (picopass_hdr *)data; if (readStatus == 0) { PrintAndLogEx(FAILED, "no tag found"); @@ -1338,11 +1397,14 @@ static int CmdHFiClassDump(const char *Cmd) { if (readStatus & (FLAG_ICLASS_CSN | FLAG_ICLASS_CONF | FLAG_ICLASS_CC)) { memcpy(tag_data, data, 8 * 3); - blockno += 2; // 2 to force re-read of block 2 later. (seems to respond differently..) - numblks = data[8]; - getMemConfig(data[13], data[12], &maxBlk, &app_areas, &kb); - // large memory - not able to dump pages currently - if (numblks > maxBlk) numblks = maxBlk; + + uint8_t type = get_mem_config(hdr); + app_limit1 = hdr->conf.app_limit; + app_limit2 = card_app2_limit[type]; + } else { + PrintAndLogEx(FAILED, "failed to read block 0,1,2"); + DropField(); + return PM3_ESOFT; } // authenticate debit key and get div_key - later store in dump block 3 @@ -1356,8 +1418,8 @@ static int CmdHFiClassDump(const char *Cmd) { uint8_t start_blockno; uint8_t numblks; } PACKED payload; - payload.start_blockno = blockno; - payload.numblks = numblks - blockno + 1; + payload.start_blockno = 5; + payload.numblks = app_limit1 - 5; clearCommandBuffer(); SendCommandNG(CMD_HF_ICLASS_DUMP, (uint8_t*)&payload, sizeof(payload)); @@ -1397,20 +1459,24 @@ static int CmdHFiClassDump(const char *Cmd) { return PM3_ESOFT; } + uint16_t offset = (5 * 8); uint32_t startindex = packet->bb_offset; - if (blocks_read * 8 > sizeof(tag_data) - (blockno * 8)) { + if (blocks_read * 8 > sizeof(tag_data) - offset) { PrintAndLogEx(FAILED, "data exceeded buffer size!"); - blocks_read = (sizeof(tag_data) / 8) - blockno; + blocks_read = (sizeof(tag_data) / 8) - 5; } // response ok - now get bigbuf content of the dump - if (!GetFromDevice(BIG_BUF, tag_data + (blockno * 8), blocks_read * 8, startindex, NULL, 0, NULL, 2500, false)) { + if (!GetFromDevice(BIG_BUF, tag_data + offset, blocks_read * 8, startindex, NULL, 0, NULL, 2500, false)) { PrintAndLogEx(WARNING, "command execution time out"); return PM3_ETIMEOUT; } + + PrintAndLogEx(INFO, "BB start index :: %u", startindex); + PrintAndLogEx(INFO, "BB :: %s", sprint_hex(tag_data + (5*8), 32)); - size_t gotBytes = blocks_read * 8 + blockno * 8; + offset += (blocks_read * 8); // try AA2 Kc, Credit if (have_credit_key) { @@ -1424,46 +1490,44 @@ static int CmdHFiClassDump(const char *Cmd) { return PM3_ESOFT; } - // do we still need to read more block? (aa2 enabled?) - if (maxBlk > blockno + numblks + 1) { + payload.start_blockno = app_limit1; + payload.numblks = app_limit2 - app_limit1 - 5; - payload.start_blockno = blockno + blocks_read; - payload.numblks = maxBlk - (blockno + blocks_read); + clearCommandBuffer(); + SendCommandNG(CMD_HF_ICLASS_DUMP, (uint8_t*)&payload, sizeof(payload)); - clearCommandBuffer(); - SendCommandNG(CMD_HF_ICLASS_DUMP, (uint8_t*)&payload, sizeof(payload)); - - if (!WaitForResponseTimeout(CMD_HF_ICLASS_DUMP, &resp, 2000)) { - PrintAndLogEx(WARNING, "command execute timeout 2"); - return PM3_ETIMEOUT; - } - - if (resp.status != PM3_SUCCESS) { - PrintAndLogEx(ERR, "failed to communicate with card"); - return resp.status; - } - - packet = (struct p_resp *)resp.data.asBytes; - if (packet->isOK == false) { - PrintAndLogEx(WARNING, "read block failed using credit key"); - return PM3_ESOFT; - } - - blocks_read = packet->block_cnt; - startindex = packet->bb_offset; - - if (blocks_read * 8 > sizeof(tag_data) - gotBytes) { - PrintAndLogEx(FAILED, "data exceeded buffer size!"); - blocks_read = (sizeof(tag_data) - gotBytes) / 8; - } - // get dumped data from bigbuf - if (!GetFromDevice(BIG_BUF, tag_data + gotBytes, blocks_read * 8, startindex, NULL, 0, NULL, 2500, false)) { - PrintAndLogEx(WARNING, "command execution time out"); - return PM3_ETIMEOUT; - } - - gotBytes += blocks_read * 8; + if (!WaitForResponseTimeout(CMD_HF_ICLASS_DUMP, &resp, 2000)) { + PrintAndLogEx(WARNING, "command execute timeout 2"); + return PM3_ETIMEOUT; } + + if (resp.status != PM3_SUCCESS) { + PrintAndLogEx(ERR, "failed to communicate with card"); + return resp.status; + } + + packet = (struct p_resp *)resp.data.asBytes; + if (packet->isOK == false) { + PrintAndLogEx(WARNING, "read block failed using credit key"); + return PM3_ESOFT; + } + + // + blocks_read = packet->block_cnt; + startindex = packet->bb_offset; + + if (blocks_read * 8 > sizeof(tag_data) - offset) { + PrintAndLogEx(FAILED, "data exceeded buffer size!"); + blocks_read = (sizeof(tag_data) - offset) / 8; + } + + // get dumped data from bigbuf + if (!GetFromDevice(BIG_BUF, tag_data + offset, blocks_read * 8, startindex, NULL, 0, NULL, 2500, false)) { + PrintAndLogEx(WARNING, "command execution time out"); + return PM3_ETIMEOUT; + } + + offset += blocks_read * 8; } DropField(); @@ -1480,7 +1544,7 @@ static int CmdHFiClassDump(const char *Cmd) { PrintAndLogEx(NORMAL, ""); PrintAndLogEx(INFO, "------+--+-------------------------+----------"); PrintAndLogEx(INFO, " CSN |00| " _GREEN_("%s") "|", sprint_hex(tag_data, 8)); - printIclassDumpContents(tag_data, 1, (gotBytes / 8), gotBytes); + printIclassDumpContents(tag_data, 1, (offset / 8), offset); if (filename[0] == 0) { //Use the first block (CSN) for filename @@ -1489,10 +1553,10 @@ static int CmdHFiClassDump(const char *Cmd) { } // save the dump to .bin file - PrintAndLogEx(SUCCESS, "saving dump file - %zu blocks read", gotBytes / 8); - saveFile(filename, ".bin", tag_data, gotBytes); - saveFileEML(filename, tag_data, gotBytes, 8); - saveFileJSON(filename, jsfIclass, tag_data, gotBytes, NULL); + PrintAndLogEx(SUCCESS, "saving dump file - %zu blocks read", offset / 8); + saveFile(filename, ".bin", tag_data, offset); + saveFileEML(filename, tag_data, offset, 8); + saveFileJSON(filename, jsfIclass, tag_data, offset, NULL); return PM3_SUCCESS; } @@ -1825,25 +1889,22 @@ static int CmdHFiClassCloneTag(const char *Cmd) { static int iclass_read_block(uint8_t *KEY, uint8_t blockno, uint8_t keyType, bool elite, bool rawkey, bool verbose, bool auth) { - // return data. - struct p { - bool isOK; - uint8_t blockdata[8]; - } PACKED; - struct p *result = NULL; - // block 0,1 should always be able to read, and block 5 on some cards. if (auth || blockno >= 2) { uint8_t MAC[4] = {0x00, 0x00, 0x00, 0x00}; uint8_t div_key[8] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; if (select_and_auth(KEY, MAC, div_key, (keyType == 0x18), elite, rawkey, verbose) == false) { + if (verbose) PrintAndLogEx(FAILED, "select/auth failed"); + DropField(); return PM3_ESOFT; } } else { uint8_t CSN[8] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; uint8_t CCNR[12] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; if (select_only(CSN, CCNR, (keyType == 0x18), verbose) == false) { - return PM3_ESOFT; + if (verbose) PrintAndLogEx(FAILED, "select only failed"); + DropField(); + return PM3_ESOFT; } } @@ -1851,22 +1912,29 @@ static int iclass_read_block(uint8_t *KEY, uint8_t blockno, uint8_t keyType, boo clearCommandBuffer(); SendCommandNG(CMD_HF_ICLASS_READBL, (uint8_t *)&blockno, sizeof(uint8_t)); - if (WaitForResponseTimeout(CMD_HF_ICLASS_READBL, &resp, 2000) == 0) { + if (WaitForResponseTimeout(CMD_HF_ICLASS_READBL, &resp, 2000) == false) { if (verbose) PrintAndLogEx(WARNING, "Command execute timeout"); DropField(); return PM3_ETIMEOUT; } + DropField(); + if (resp.status != PM3_SUCCESS) { if (verbose) PrintAndLogEx(ERR, "failed to communicate with card"); return PM3_EWRONGANSWER; } - result = (struct p *)resp.data.asBytes; - if (result->isOK == false) - return PM3_ESOFT; + // return data. + struct p { + bool isOK; + uint8_t blockdata[8]; + } PACKED; - DropField(); + struct p *result = (struct p *)resp.data.asBytes; + if (result->isOK == false) { + return PM3_ESOFT; + } PrintAndLogEx(SUCCESS, " block %02X : " _GREEN_("%s"), blockno, sprint_hex(result->blockdata, sizeof(result->blockdata))); @@ -1943,6 +2011,7 @@ static int CmdHFiClass_ReadBlock(const char *Cmd) { bool auth = false; bool verbose = false; uint8_t cmdp = 0; + while (param_getchar(Cmd, cmdp) != 0x00 && !errors) { switch (tolower(param_getchar(Cmd, cmdp))) { case 'h': @@ -2000,10 +2069,10 @@ static int CmdHFiClass_ReadBlock(const char *Cmd) { if (got_blockno == false) errors = true; - if (errors || cmdp < 4) return usage_hf_iclass_readblock(); + if (errors) return usage_hf_iclass_readblock(); - if (!auth) - PrintAndLogEx(FAILED, "warning: no authentication used with read, only a few specific blocks can be read accurately without authentication."); + if (auth == false) + PrintAndLogEx(WARNING, "warning: no authentication used with read, only a few specific blocks can be read accurately without authentication."); return iclass_read_block(KEY, blockno, keyType, elite, rawkey, verbose, auth); } @@ -2993,6 +3062,20 @@ int CmdHFiClass(const char *Cmd) { return CmdsParse(CommandTable, Cmd); } + +//static void test_credential_type(void) { + // need AA1 key + // Block 5 -> tells if its a legacy or SIO, also tells which key to use. + + // tech | blocks used | desc | num of payloads + // -------+-----------------------+-----------------------------------+------ + // legacy | 6,7,8,9 | AA!, Access control payload | 1 + // SE | 6,7,8,9,10,11,12 | AA1, Secure identity object (SIO) | 1 + // SR | 6,7,8,9, | AA1, Access control payload | 2 + // | 10,11,12,13,14,15,16 | AA1, Secure identity object (SIO) | + // SEOS | | | +//} + int readIclass(bool loop, bool verbose) { bool tagFound = false; @@ -3079,6 +3162,10 @@ int readIclass(bool loop, bool verbose) { } } + uint8_t cardtype = get_mem_config(hdr); + PrintAndLogEx(SUCCESS, "%s", card_types[cardtype]); + + if (tagFound && !loop) { PrintAndLogEx(NORMAL, ""); DropField(); diff --git a/client/src/cmdhficlass.h b/client/src/cmdhficlass.h index 19b994d0c..53880d647 100644 --- a/client/src/cmdhficlass.h +++ b/client/src/cmdhficlass.h @@ -27,19 +27,6 @@ typedef struct iclass_prekey { uint8_t key[8]; } iclass_prekey_t; -typedef struct { - uint8_t key[8]; - bool use_raw; - bool use_elite; - bool use_credit_key; -} PACKED iclass_auth_req_t; - -typedef struct { - bool isOK; - uint8_t div_key[8]; - uint8_t mac[4]; -} PACKED iclass_auth_resp_t; - int CmdHFiClass(const char *Cmd); int readIclass(bool loop, bool verbose); diff --git a/common/cardhelper.c b/common/cardhelper.c index fbdaf2002..e34780896 100644 --- a/common/cardhelper.c +++ b/common/cardhelper.c @@ -19,6 +19,7 @@ #define CARD_INS_ENCRYPT 0x02 #define CARD_INS_DECODE 0x06 #define CARD_INS_NUMBLOCKS 0x07 +#define CARD_INS_PINSIZE 0x08 static uint8_t cmd[] = {0x96, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; // look for CryptoHelper @@ -91,3 +92,13 @@ uint8_t GetNumberBlocksForUserId(uint8_t *src) { ExchangeAPDUSC(true, c, sizeof(c), false, true, resp, sizeof(resp), &resp_len); return resp[8]; } + +// Call with block6 +uint8_t GetPinSize(uint8_t *src) { + int resp_len = 0; + uint8_t resp[254] = {0}; + uint8_t c[] = {0x96, CARD_INS_PINSIZE, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; + memcpy(c + 5, src, 8); + ExchangeAPDUSC(true, c, sizeof(c), false, true, resp, sizeof(resp), &resp_len); + return resp[8]; +} diff --git a/common/cardhelper.h b/common/cardhelper.h index eaf7ff38f..d55ae6701 100644 --- a/common/cardhelper.h +++ b/common/cardhelper.h @@ -19,4 +19,5 @@ bool Encrypt(uint8_t *src, uint8_t *dest); bool Decrypt(uint8_t *src, uint8_t *dest); void DecodeBlock6(uint8_t *src); uint8_t GetNumberBlocksForUserId(uint8_t *src); +uint8_t GetPinSize(uint8_t *src); #endif diff --git a/include/pm3_cmd.h b/include/pm3_cmd.h index 3568bd50a..766e78c54 100644 --- a/include/pm3_cmd.h +++ b/include/pm3_cmd.h @@ -289,6 +289,23 @@ typedef struct { const char *value; } PACKED ecdsa_publickey_t; + +// iCLASS auth request data structure +typedef struct { + uint8_t key[8]; + bool use_raw; + bool use_elite; + bool use_credit_key; +} PACKED iclass_auth_req_t; + +// iCLASS auth response data structure +typedef struct { + bool isOK; + uint8_t div_key[8]; + uint8_t mac[4]; +} PACKED iclass_auth_resp_t; + + // For the bootloader #define CMD_DEVICE_INFO 0x0000 //#define CMD_SETUP_WRITE 0x0001 From 53174faaf6b0b21b74f38ca051ed28bed4570b3c Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sun, 19 Jul 2020 23:08:53 +0200 Subject: [PATCH 0119/1047] adapt return value --- common/cardhelper.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/common/cardhelper.c b/common/cardhelper.c index e34780896..3a5def846 100644 --- a/common/cardhelper.c +++ b/common/cardhelper.c @@ -100,5 +100,9 @@ uint8_t GetPinSize(uint8_t *src) { uint8_t c[] = {0x96, CARD_INS_PINSIZE, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; memcpy(c + 5, src, 8); ExchangeAPDUSC(true, c, sizeof(c), false, true, resp, sizeof(resp), &resp_len); - return resp[8]; + + if ( resp[resp_len - 2] == 0x90 && resp[resp_len - 1] == 0x00) { + return resp[8]; + } + return 0; } From 20ad16bfca7f8179bff241de1e0c606152e896cf Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sun, 19 Jul 2020 23:09:21 +0200 Subject: [PATCH 0120/1047] fix iclass dump.. --- client/src/cmdhficlass.c | 53 +++++++++++++++++++++------------------- 1 file changed, 28 insertions(+), 25 deletions(-) diff --git a/client/src/cmdhficlass.c b/client/src/cmdhficlass.c index d063f1607..614555cb0 100644 --- a/client/src/cmdhficlass.c +++ b/client/src/cmdhficlass.c @@ -1096,14 +1096,18 @@ static int CmdHFiClassDecrypt(const char *Cmd) { PrintAndLogEx(NORMAL, ""); PrintAndLogEx(INFO, "Block 9 decoder"); - uint8_t pinsize = 10; + uint8_t pinsize = 0; if (use_sc) { pinsize = GetPinSize(decrypted + (8 * 6)); + + if (pinsize > 0) { + + uint64_t pin = bytes_to_num(decrypted + (8 * 9), 5); + char tmp[17] = {0}; + sprintf(tmp, "%."PRIu64, BCD2DEC(pin)); + PrintAndLogEx(INFO, "PIN........................ " _GREEN_("%.*s"), pinsize, tmp); + } } - uint64_t pin = bytes_to_num(decrypted + (8 * 9), 5); - char tmp[17] = {0}; - sprintf(tmp, "%."PRIu64, BCD2DEC(pin)); - PrintAndLogEx(INFO, "PIN........................ " _GREEN_("%.*s"), pinsize, tmp); } } @@ -1280,7 +1284,7 @@ static int CmdHFiClassDump(const char *Cmd) { uint8_t CreditKEY[8] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; uint8_t keyNbr = 0; uint8_t dataLen = 0; - uint8_t app_limit1, app_limit2 = 0; + uint8_t app_limit1 = 0, app_limit2 = 0; uint8_t fileNameLen = 0; char filename[FILE_PATH_SIZE] = {0}; char tempStr[50] = {0}; @@ -1370,7 +1374,7 @@ static int CmdHFiClassDump(const char *Cmd) { // if no debit key given try credit key on AA1 (not for iclass but for some picopass this will work) if (!have_debit_key && have_credit_key) use_credit_key = true; - uint32_t flags = (FLAG_ICLASS_READER_INIT | FLAG_ICLASS_READER_CLEARTRACE); + uint32_t flags = (FLAG_ICLASS_READER_INIT | FLAG_ICLASS_READER_CLEARTRACE | FLAG_ICLASS_READER_AIA); //get config and first 3 blocks PacketResponseNG resp; @@ -1395,8 +1399,8 @@ static int CmdHFiClassDump(const char *Cmd) { return PM3_ESOFT; } - if (readStatus & (FLAG_ICLASS_CSN | FLAG_ICLASS_CONF | FLAG_ICLASS_CC)) { - memcpy(tag_data, data, 8 * 3); + if (readStatus & (FLAG_ICLASS_CSN | FLAG_ICLASS_CONF | FLAG_ICLASS_CC | FLAG_ICLASS_AIA)) { + memcpy(tag_data, data, 8 * 6); uint8_t type = get_mem_config(hdr); app_limit1 = hdr->conf.app_limit; @@ -1418,7 +1422,7 @@ static int CmdHFiClassDump(const char *Cmd) { uint8_t start_blockno; uint8_t numblks; } PACKED payload; - payload.start_blockno = 5; + payload.start_blockno = 6; payload.numblks = app_limit1 - 5; clearCommandBuffer(); @@ -1443,7 +1447,7 @@ static int CmdHFiClassDump(const char *Cmd) { return resp.status; } - // dump cmd switch off at device when finised. + // dump cmd switch off at device when finished. struct p_resp { bool isOK; @@ -1452,30 +1456,26 @@ static int CmdHFiClassDump(const char *Cmd) { } PACKED; struct p_resp *packet = (struct p_resp *)resp.data.asBytes; - uint32_t blocks_read = packet->block_cnt; - if (packet->isOK == false) { PrintAndLogEx(WARNING, "read block failed"); return PM3_ESOFT; } - uint16_t offset = (5 * 8); - uint32_t startindex = packet->bb_offset; - - if (blocks_read * 8 > sizeof(tag_data) - offset) { - PrintAndLogEx(FAILED, "data exceeded buffer size!"); - blocks_read = (sizeof(tag_data) / 8) - 5; + uint32_t blocks_read = packet->block_cnt; + if (blocks_read == app_limit1 - 5) { + PrintAndLogEx(INFO, "ICE: got all AA1"); } + uint16_t offset = (6 * 8); + uint32_t startindex = packet->bb_offset; + // response ok - now get bigbuf content of the dump if (!GetFromDevice(BIG_BUF, tag_data + offset, blocks_read * 8, startindex, NULL, 0, NULL, 2500, false)) { PrintAndLogEx(WARNING, "command execution time out"); return PM3_ETIMEOUT; } - - PrintAndLogEx(INFO, "BB start index :: %u", startindex); - PrintAndLogEx(INFO, "BB :: %s", sprint_hex(tag_data + (5*8), 32)); + PrintAndLogEx(INFO, "ICE: blocks_read (13) == %u (0x%02x)", blocks_read, blocks_read); offset += (blocks_read * 8); // try AA2 Kc, Credit @@ -1491,12 +1491,12 @@ static int CmdHFiClassDump(const char *Cmd) { } payload.start_blockno = app_limit1; - payload.numblks = app_limit2 - app_limit1 - 5; + payload.numblks = app_limit2 - app_limit1; clearCommandBuffer(); SendCommandNG(CMD_HF_ICLASS_DUMP, (uint8_t*)&payload, sizeof(payload)); - if (!WaitForResponseTimeout(CMD_HF_ICLASS_DUMP, &resp, 2000)) { + if (WaitForResponseTimeout(CMD_HF_ICLASS_DUMP, &resp, 2000) == false) { PrintAndLogEx(WARNING, "command execute timeout 2"); return PM3_ETIMEOUT; } @@ -1511,10 +1511,13 @@ static int CmdHFiClassDump(const char *Cmd) { PrintAndLogEx(WARNING, "read block failed using credit key"); return PM3_ESOFT; } - // blocks_read = packet->block_cnt; startindex = packet->bb_offset; + + if (blocks_read == app_limit2 - app_limit1) { + PrintAndLogEx(INFO, "ICE: got all AA2"); + } if (blocks_read * 8 > sizeof(tag_data) - offset) { PrintAndLogEx(FAILED, "data exceeded buffer size!"); From 9eb479fc7f0bbd37f23be73bafd4b9630827c555 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Mon, 20 Jul 2020 00:16:16 +0200 Subject: [PATCH 0121/1047] iceclass calc diversified key if not present --- armsrc/Standalone/hf_iceclass.c | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/armsrc/Standalone/hf_iceclass.c b/armsrc/Standalone/hf_iceclass.c index 19aa9626d..d8df74773 100644 --- a/armsrc/Standalone/hf_iceclass.c +++ b/armsrc/Standalone/hf_iceclass.c @@ -70,6 +70,7 @@ uint8_t card_app2_limit[] = { }; static uint8_t aa2_key[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; + static uint8_t legacy_aa1_key[] = {0xAE, 0xA6, 0x84, 0xA6, 0xDA, 0xB2, 0x32, 0x78}; static uint8_t csns[8 * NUM_CSNS] = { @@ -145,15 +146,22 @@ static int fullsim_mode(void) { Dbprintf("loaded '" _YELLOW_(HF_ICLASS_FULLSIM_ORIG_BIN) "' (%u bytes) to emulator memory", fsize); } - // create diversified key if not in dump. + // create diversified key AA1/KD if not in dump. if ( memcmp(emul + (3 * 8), "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF", 8) == 0) { uint8_t ccnr[12] = {0}; memcpy(ccnr, emul + (2 * 8), 8); bool use_elite = false; - iclass_calc_div_key(emul, legacy_aa1_key, emul + (3 * 8), use_elite); } + // create diversified key AA2/KC if not in dump. + if ( memcmp(emul + (4 * 8), "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF", 8) == 0) { + uint8_t ccnr[12] = {0}; + memcpy(ccnr, emul + (2 * 8), 8); + bool use_elite = false; + iclass_calc_div_key(emul, aa2_key, emul + (4 * 8), use_elite); + } + iclass_simulate(ICLASS_SIM_MODE_FULL, 0 , false, NULL, NULL, NULL); LED_B_ON(); @@ -298,23 +306,21 @@ static int reader_dump_mode(void) { static int config_sim_mode(void) { uint8_t *emul = BigBuf_get_EM_addr(); - + for (uint8_t i = 0; i < 2; i++) { SpinOff(0); - uint32_t fsize = size_in_spiffs(cc_files[i]); - + rdv40_spiffs_lazy_mount(); + uint32_t fsize = size_in_spiffs(cc_files[i]); int res = rdv40_spiffs_read_as_filetype(cc_files[i], emul, fsize, RDV40_SPIFFS_SAFETY_SAFE); rdv40_spiffs_lazy_unmount(); if (res == SPIFFS_OK) { Dbprintf("loaded '" _YELLOW_("%s") "' (%u bytes) to emulator memory", cc_files[i], fsize); + iclass_simulate(ICLASS_SIM_MODE_FULL, 0 , false, NULL, NULL, NULL); } - - iclass_simulate(ICLASS_SIM_MODE_FULL, 0 , false, NULL, NULL, NULL); } - rdv40_spiffs_lazy_unmount(); return PM3_SUCCESS; } @@ -330,7 +336,7 @@ void RunMod(void) { StandAloneMode(); Dbprintf(_YELLOW_("HF iCLASS mode a.k.a iceCLASS started")); - uint8_t mode = ICE_STATE_ATTACK; + uint8_t mode = ICE_STATE_FULLSIM; for (;;) { From 2d368ba2d8264db7e7e9335b1fdb8f8d3a701efe Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Mon, 20 Jul 2020 00:52:46 +0200 Subject: [PATCH 0122/1047] fix sim reply --- client/src/cmdhficlass.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/client/src/cmdhficlass.c b/client/src/cmdhficlass.c index 614555cb0..29c5eee98 100644 --- a/client/src/cmdhficlass.c +++ b/client/src/cmdhficlass.c @@ -649,9 +649,9 @@ static int CmdHFiClassSim(const char *Cmd) { PrintAndLogEx(INFO, "press " _YELLOW_("`enter`") " to cancel"); PacketResponseNG resp; clearCommandBuffer(); - SendCommandMIX(CMD_HF_ICLASS_SIMULATE, sim_type, NUM_CSNS, 0, csns, 8 * NUM_CSNS); + SendCommandMIX(CMD_HF_ICLASS_SIMULATE, sim_type, NUM_CSNS, 1, csns, 8 * NUM_CSNS); - while (!WaitForResponseTimeout(CMD_ACK, &resp, 2000)) { + while (WaitForResponseTimeout(CMD_ACK, &resp, 2000) == false) { tries++; if (kbd_enter_pressed()) { PrintAndLogEx(WARNING, "\naborted via keyboard."); @@ -698,9 +698,9 @@ static int CmdHFiClassSim(const char *Cmd) { PrintAndLogEx(INFO, "press Enter to cancel"); PacketResponseNG resp; clearCommandBuffer(); - SendCommandMIX(CMD_HF_ICLASS_SIMULATE, sim_type, NUM_CSNS, 0, csns, 8 * NUM_CSNS); + SendCommandMIX(CMD_HF_ICLASS_SIMULATE, sim_type, NUM_CSNS, 1, csns, 8 * NUM_CSNS); - while (!WaitForResponseTimeout(CMD_ACK, &resp, 2000)) { + while (WaitForResponseTimeout(CMD_ACK, &resp, 2000) == false) { tries++; if (kbd_enter_pressed()) { PrintAndLogEx(WARNING, "\naborted via keyboard."); @@ -1457,10 +1457,11 @@ static int CmdHFiClassDump(const char *Cmd) { struct p_resp *packet = (struct p_resp *)resp.data.asBytes; if (packet->isOK == false) { - PrintAndLogEx(WARNING, "read block failed"); + PrintAndLogEx(WARNING, "read AA1 blocks failed"); return PM3_ESOFT; } + // 13 uint32_t blocks_read = packet->block_cnt; if (blocks_read == app_limit1 - 5) { PrintAndLogEx(INFO, "ICE: got all AA1"); From 0f5e58a81c07554fb74375450b1333e882b4671e Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Mon, 20 Jul 2020 17:42:10 +0200 Subject: [PATCH 0123/1047] fix iclass sof tracelog --- client/src/cmdtrace.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/client/src/cmdtrace.c b/client/src/cmdtrace.c index f2b20ab68..750bc9953 100644 --- a/client/src/cmdtrace.c +++ b/client/src/cmdtrace.c @@ -275,13 +275,12 @@ static uint16_t printTraceLine(uint16_t tracepos, uint16_t traceLen, uint8_t *tr if (data_len == 0) { if (protocol == ICLASS && duration == 2048) { - sprintf(line[0], " "); + sprintf(line[0], ""); } else if (protocol == ISO_15693 && duration == 512) { - sprintf(line[0], " "); + sprintf(line[0], ""); } else { sprintf(line[0], ""); } - return tracepos; } for (int j = 0; j < data_len && j / 18 < 18; j++) { From e94cbd8da58a9e2d41fb609e06282c72277a0d54 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Tue, 21 Jul 2020 10:48:29 +0200 Subject: [PATCH 0124/1047] list 15693 --- client/src/cmdhflist.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/client/src/cmdhflist.c b/client/src/cmdhflist.c index 8ade2f7dc..202e5b41d 100644 --- a/client/src/cmdhflist.c +++ b/client/src/cmdhflist.c @@ -507,8 +507,10 @@ void annotateIso15693(char *exp, size_t size, uint8_t *cmd, uint8_t cmdsize) { break; } - if (cmd[1] >= 0x2D && cmd[1] <= 0x9F) snprintf(exp, size, "Optional RFU"); - else if (cmd[1] >= 0xA0 && cmd[1] <= 0xDF) snprintf(exp, size, "Cust IC MFG dependent"); + if (cmd[1] > ISO15693_STAYQUIET && cmd[1] < ISO15693_READBLOCK) snprintf(exp, size, "Mandatory RFU"); + else if (cmd[1] > ISO15693_READ_MULTI_SECSTATUS && cmd[1] <= 0x9F) snprintf(exp, size, "Optional RFU"); +// else if (cmd[1] >= 0xA0 && cmd[1] <= 0xDF) snprintf(exp, size, "Cust IC MFG dependent"); + else if (cmd[1] > ISO15693_READ_SIGNATURE && cmd[1] <= 0xDF) snprintf(exp, size, "Cust IC MFG dependent"); else if (cmd[1] >= 0xE0) snprintf(exp, size, "Proprietary IC MFG dependent"); else snprintf(exp, size, "?"); From df404a652a4a1294249400fc4b9410d555810907 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Tue, 21 Jul 2020 10:49:29 +0200 Subject: [PATCH 0125/1047] duration isnt 15bits, its 16. length is 15bits. --- armsrc/BigBuf.c | 17 +++++++++++++---- armsrc/BigBuf.h | 4 ++++ 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/armsrc/BigBuf.c b/armsrc/BigBuf.c index 338206d6e..608c38040 100644 --- a/armsrc/BigBuf.c +++ b/armsrc/BigBuf.c @@ -221,17 +221,17 @@ bool RAMFUNC LogTrace(const uint8_t *btBytes, uint16_t iLen, uint32_t timestamp_ duration = (UINT32_MAX - timestamp_start) + timestamp_end; } - if (duration > 0x7FFF) { + if (duration > 0xFFFF) { /* if (DBGLEVEL >= DBG_DEBUG) { - Dbprintf("Error in LogTrace: duration too long for 15 bits encoding: 0x%08x start: 0x%08x end: 0x%08x", duration, timestamp_start, timestamp_end); + Dbprintf("Error in LogTrace: duration too long for 16 bits encoding: 0x%08x start: 0x%08x end: 0x%08x", duration, timestamp_start, timestamp_end); } */ - duration /= 32; + duration = 0; } hdr->timestamp = timestamp_start; - hdr->duration = duration & 0x7FFF; + hdr->duration = duration & 0xFFFF; hdr->data_len = iLen; hdr->isResponse = !readerToTag; trace_len += TRACELOG_HDR_LEN; @@ -254,6 +254,15 @@ bool RAMFUNC LogTrace(const uint8_t *btBytes, uint16_t iLen, uint32_t timestamp_ return true; } +// specific LogTrace function for ISO15693: the duration needs to be scaled because otherwise it won't fit into a uint16_t +bool LogTrace_ISO15693(const uint8_t *bytes, uint16_t len, uint32_t ts_start, uint32_t ts_end, uint8_t *parity, bool reader2tag) { + uint32_t duration = ts_end - ts_start; + duration /= 32; + ts_end = ts_start + duration; + return LogTrace(bytes, len, ts_start, ts_end, parity, reader2tag); +} + + // Emulator memory uint8_t emlSet(uint8_t *data, uint32_t offset, uint32_t length) { uint8_t *mem = BigBuf_get_EM_addr(); diff --git a/armsrc/BigBuf.h b/armsrc/BigBuf.h index 2f381f36b..8b570cb8c 100644 --- a/armsrc/BigBuf.h +++ b/armsrc/BigBuf.h @@ -42,7 +42,11 @@ void clear_trace(void); void set_tracing(bool enable); void set_tracelen(uint32_t value); bool get_tracing(void); + bool RAMFUNC LogTrace(const uint8_t *btBytes, uint16_t iLen, uint32_t timestamp_start, uint32_t timestamp_end, uint8_t *parity, bool readerToTag); +bool LogTrace_ISO15693(const uint8_t *bytes, uint16_t len, uint32_t ts_start, uint32_t ts_end, uint8_t *parity, bool reader2tag); + + uint8_t emlSet(uint8_t *data, uint32_t offset, uint32_t length); From 42f21e8d658bf60077e260d60c0fe09c9eb63ec9 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Tue, 21 Jul 2020 10:50:23 +0200 Subject: [PATCH 0126/1047] adapt iclass sim --- armsrc/iclass.c | 65 ++++++++++++++++++++++++++----------------------- 1 file changed, 34 insertions(+), 31 deletions(-) diff --git a/armsrc/iclass.c b/armsrc/iclass.c index fa161b813..16988f74e 100644 --- a/armsrc/iclass.c +++ b/armsrc/iclass.c @@ -393,7 +393,7 @@ int do_iclass_simulation(int simulationMode, uint8_t *reader_mac_buf) { int trace_data_size = 0; // Respond SOF -- takes 1 bytes - uint8_t *resp_sof = BigBuf_malloc(1); + uint8_t *resp_sof = BigBuf_malloc(2); int resp_sof_len; // Anticollision CSN (rotated CSN) @@ -524,6 +524,32 @@ int do_iclass_simulation(int simulationMode, uint8_t *reader_mac_buf) { } goto send; + } else if (cmd == ICLASS_CMD_SELECT && len == 9) { + // Reader selects anticollision CSN. + // Tag sends the corresponding real CSN + if (chip_state == ACTIVATED || chip_state == SELECTED) { + if (!memcmp(receivedCmd + 1, anticoll_data, 8)) { + modulated_response = resp_csn; + modulated_response_size = resp_csn_len; + trace_data = csn_data; + trace_data_size = sizeof(csn_data); + chip_state = SELECTED; + } else { + chip_state = IDLE; + } + } else if (chip_state == HALTED) { + // RESELECT with CSN + if (!memcmp(receivedCmd + 1, csn_data, 8)) { + modulated_response = resp_csn; + modulated_response_size = resp_csn_len; + trace_data = csn_data; + trace_data_size = sizeof(csn_data); + chip_state = SELECTED; + } + } + goto send; + + } else if (cmd == ICLASS_CMD_READ_OR_IDENTIFY && len == 4) { // 0x0C if (chip_state != SELECTED) { @@ -580,38 +606,14 @@ int do_iclass_simulation(int simulationMode, uint8_t *reader_mac_buf) { trace_data = data_generic_trace; trace_data_size = 10; CodeIso15693AsTag(trace_data, trace_data_size); - memcpy(modulated_response, ts->buf, ts->max); + memcpy(data_response, ts->buf, ts->max); + modulated_response = data_response; modulated_response_size = ts->max; } goto send; } } // swith - } else if (cmd == ICLASS_CMD_SELECT && len == 9) { // 0x81 - // Reader selects anticollission CSN. - // Tag sends the corresponding real CSN - if (chip_state == ACTIVATED || chip_state == SELECTED) { - if (!memcmp(receivedCmd + 1, anticoll_data, 8)) { - modulated_response = resp_csn; - modulated_response_size = resp_csn_len; - trace_data = csn_data; - trace_data_size = sizeof(csn_data); - chip_state = SELECTED; - } else { - chip_state = IDLE; - } - } else if (chip_state == HALTED) { - // RESELECT with CSN - if (!memcmp(receivedCmd + 1, csn_data, 8)) { - modulated_response = resp_csn; - modulated_response_size = resp_csn_len; - trace_data = csn_data; - trace_data_size = sizeof(csn_data); - chip_state = SELECTED; - } - } - goto send; - } else if (cmd == ICLASS_CMD_READCHECK) { // 0x88 // Read e-purse KD (88 02) KC (18 02) if (chip_state != SELECTED) { @@ -701,11 +703,12 @@ int do_iclass_simulation(int simulationMode, uint8_t *reader_mac_buf) { trace_data = data_generic_trace; trace_data_size = 34; CodeIso15693AsTag(trace_data, trace_data_size); - memcpy(modulated_response, ts->buf, ts->max); + memcpy(data_response, ts->buf, ts->max); + modulated_response = data_response; modulated_response_size = ts->max; goto send; - } else if (simulationMode == ICLASS_SIM_MODE_FULL && cmd == ICLASS_CMD_UPDATE && (len == 12 || len == 14)) { + } else if (cmd == ICLASS_CMD_UPDATE && (len == 12 || len == 14)) { // We're expected to respond with the data+crc, exactly what's already in the receivedCmd // receivedCmd is now UPDATE 1b | ADDRESS 1b | DATA 8b | Signature 4b or CRC 2b @@ -810,7 +813,7 @@ send: if (modulated_response_size > 0) { uint32_t response_time = reader_eof_time + DELAY_ICLASS_VCD_TO_VICC_SIM; TransmitTo15693Reader(modulated_response, modulated_response_size, &response_time, 0, false); - LogTrace(trace_data, trace_data_size, response_time * 32, (response_time * 32) + (modulated_response_size * 32 * 64), NULL, false); + LogTrace_ISO15693(trace_data, trace_data_size, response_time * 32, (response_time * 32) + (modulated_response_size * 32 * 64), NULL, false); } } @@ -829,7 +832,7 @@ static void iclass_send_as_reader(uint8_t *frame, int len, uint32_t *start_time, tosend_t *ts = get_tosend(); TransmitTo15693Tag(ts->buf, ts->max, start_time); *end_time = *start_time + (32 * ((8 * ts->max) - 4)); // substract the 4 padding bits after EOF - LogTrace(frame, len, (*start_time * 4), (*end_time * 4), NULL, true); + LogTrace_ISO15693(frame, len, (*start_time * 4), (*end_time * 4), NULL, true); } static bool iclass_send_cmd_with_retries(uint8_t* cmd, size_t cmdsize, uint8_t* resp, size_t max_resp_size, From c51565fd7cae3dd96d3db06cc29f847361275753 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Tue, 21 Jul 2020 10:51:48 +0200 Subject: [PATCH 0127/1047] iso15 sim, make decoders dynamic bigbuff malloc --- armsrc/iso15693.c | 797 ++++++++++++++++++++++++++-------------------- armsrc/iso15693.h | 2 +- 2 files changed, 444 insertions(+), 355 deletions(-) diff --git a/armsrc/iso15693.c b/armsrc/iso15693.c index df576d3b3..379d094af 100644 --- a/armsrc/iso15693.c +++ b/armsrc/iso15693.c @@ -106,14 +106,22 @@ static void BuildIdentifyRequest(uint8_t *cmd); -// --------------------------- +// --------------------------- + // Signal Processing // --------------------------- // prepare data using "1 out of 4" code for later transmission // resulting data rate is 26.48 kbit/s (fc/512) // cmd ... data -// n ... length of data +// n ... length of data +static uint8_t encode15_lut[] = { + 0x40, // 01000000 + 0x10, // 00010000 + 0x04, // 00000100 + 0x01 // 00000001 +}; + void CodeIso15693AsReader(uint8_t *cmd, int n) { tosend_reset(); @@ -124,23 +132,18 @@ void CodeIso15693AsReader(uint8_t *cmd, int n) { // data for (int i = 0; i < n; i++) { - for (int j = 0; j < 8; j += 2) { - uint8_t these = (cmd[i] >> j) & 0x03; - switch(these) { - case 0: - ts->buf[++ts->max] = 0x40; //01000000 - break; - case 1: - ts->buf[++ts->max] = 0x10; //00010000 - break; - case 2: - ts->buf[++ts->max] = 0x04; //00000100 - break; - case 3: - ts->buf[++ts->max] = 0x01; //00000001 - break; - } - } + + volatile uint8_t b = (cmd[i] >> 0) & 0x03; + ts->buf[++ts->max] = encode15_lut[b]; + + b = (cmd[i] >> 2) & 0x03; + ts->buf[++ts->max] = encode15_lut[b]; + + b = (cmd[i] >> 4) & 0x03; + ts->buf[++ts->max] = encode15_lut[b]; + + b = (cmd[i] >> 6) & 0x03; + ts->buf[++ts->max] = encode15_lut[b]; } // EOF @@ -234,7 +237,6 @@ void CodeIso15693AsTag(uint8_t *cmd, size_t len) { // EOF ts->buf[++ts->max] = 0xB8; // 10111000 - ts->max++; } @@ -348,7 +350,7 @@ void TransmitTo15693Reader(const uint8_t *cmd, size_t len, uint32_t *start_time, #define NOISE_THRESHOLD 80 // don't try to correlate noise #define MAX_PREVIOUS_AMPLITUDE (-1 - NOISE_THRESHOLD) -typedef struct DecodeTag { +typedef struct { enum { STATE_TAG_SOF_LOW, STATE_TAG_SOF_RISING_EDGE, @@ -380,222 +382,211 @@ typedef struct DecodeTag { //----------------------------------------------------------------------------- // DEMODULATE tag answer //----------------------------------------------------------------------------- -static RAMFUNC int Handle15693SamplesFromTag(uint16_t amplitude, DecodeTag_t *DecodeTag) { - switch (DecodeTag->state) { +static RAMFUNC int Handle15693SamplesFromTag(uint16_t amplitude, DecodeTag_t *tag) { + + switch (tag->state) { case STATE_TAG_SOF_LOW: { // waiting for a rising edge - if (amplitude > NOISE_THRESHOLD + DecodeTag->previous_amplitude) { - if (DecodeTag->posCount > 10) { - DecodeTag->threshold_sof = amplitude - DecodeTag->previous_amplitude; // to be divided by 2 - DecodeTag->threshold_half = 0; - DecodeTag->state = STATE_TAG_SOF_RISING_EDGE; + if (amplitude > NOISE_THRESHOLD + tag->previous_amplitude) { + if (tag->posCount > 10) { + tag->threshold_sof = amplitude - tag->previous_amplitude; // to be divided by 2 + tag->threshold_half = 0; + tag->state = STATE_TAG_SOF_RISING_EDGE; } else { - DecodeTag->posCount = 0; + tag->posCount = 0; } } else { - DecodeTag->posCount++; - DecodeTag->previous_amplitude = amplitude; + tag->posCount++; + tag->previous_amplitude = amplitude; } break; } case STATE_TAG_SOF_RISING_EDGE: { - if (amplitude > DecodeTag->threshold_sof + DecodeTag->previous_amplitude) { // edge still rising - if (amplitude > DecodeTag->threshold_sof + DecodeTag->threshold_sof) { // steeper edge, take this as time reference - DecodeTag->posCount = 1; + if (amplitude > tag->threshold_sof + tag->previous_amplitude) { // edge still rising + if (amplitude > tag->threshold_sof + tag->threshold_sof) { // steeper edge, take this as time reference + tag->posCount = 1; } else { - DecodeTag->posCount = 2; + tag->posCount = 2; } - DecodeTag->threshold_sof = (amplitude - DecodeTag->previous_amplitude) / 2; + tag->threshold_sof = (amplitude - tag->previous_amplitude) / 2; } else { - DecodeTag->posCount = 2; - DecodeTag->threshold_sof = DecodeTag->threshold_sof / 2; + tag->posCount = 2; + tag->threshold_sof = tag->threshold_sof / 2; } - // DecodeTag->posCount = 2; - DecodeTag->state = STATE_TAG_SOF_HIGH; + tag->state = STATE_TAG_SOF_HIGH; break; } case STATE_TAG_SOF_HIGH: { // waiting for 10 times high. Take average over the last 8 - if (amplitude > DecodeTag->threshold_sof) { - DecodeTag->posCount++; - if (DecodeTag->posCount > 2) { - DecodeTag->threshold_half += amplitude; // keep track of average high value + if (amplitude > tag->threshold_sof) { + tag->posCount++; + if (tag->posCount > 2) { + tag->threshold_half += amplitude; // keep track of average high value } - if (DecodeTag->posCount == 10) { - DecodeTag->threshold_half >>= 2; // (4 times 1/2 average) - DecodeTag->state = STATE_TAG_SOF_HIGH_END; + if (tag->posCount == 10) { + tag->threshold_half >>= 2; // (4 times 1/2 average) + tag->state = STATE_TAG_SOF_HIGH_END; } } else { // high phase was too short - DecodeTag->posCount = 1; - DecodeTag->previous_amplitude = amplitude; - DecodeTag->state = STATE_TAG_SOF_LOW; + tag->posCount = 1; + tag->previous_amplitude = amplitude; + tag->state = STATE_TAG_SOF_LOW; } break; } case STATE_TAG_SOF_HIGH_END: { // check for falling edge - if (DecodeTag->posCount == 13 && amplitude < DecodeTag->threshold_sof) { - DecodeTag->lastBit = SOF_PART1; // detected 1st part of SOF (12 samples low and 12 samples high) - DecodeTag->shiftReg = 0; - DecodeTag->bitCount = 0; - DecodeTag->len = 0; - DecodeTag->sum1 = amplitude; - DecodeTag->sum2 = 0; - DecodeTag->posCount = 2; - DecodeTag->state = STATE_TAG_RECEIVING_DATA; - // FpgaDisableTracing(); // DEBUGGING - // Dbprintf("amplitude = %d, threshold_sof = %d, threshold_half/4 = %d, previous_amplitude = %d", - // amplitude, - // DecodeTag->threshold_sof, - // DecodeTag->threshold_half/4, - // DecodeTag->previous_amplitude); // DEBUGGING + if (tag->posCount == 13 && amplitude < tag->threshold_sof) { + tag->lastBit = SOF_PART1; // detected 1st part of SOF (12 samples low and 12 samples high) + tag->shiftReg = 0; + tag->bitCount = 0; + tag->len = 0; + tag->sum1 = amplitude; + tag->sum2 = 0; + tag->posCount = 2; + tag->state = STATE_TAG_RECEIVING_DATA; LED_C_ON(); } else { - DecodeTag->posCount++; - if (DecodeTag->posCount > 13) { // high phase too long - DecodeTag->posCount = 0; - DecodeTag->previous_amplitude = amplitude; - DecodeTag->state = STATE_TAG_SOF_LOW; + tag->posCount++; + if (tag->posCount > 13) { // high phase too long + tag->posCount = 0; + tag->previous_amplitude = amplitude; + tag->state = STATE_TAG_SOF_LOW; LED_C_OFF(); } } break; } case STATE_TAG_RECEIVING_DATA: { - // FpgaDisableTracing(); // DEBUGGING - // Dbprintf("amplitude = %d, threshold_sof = %d, threshold_half/4 = %d, previous_amplitude = %d", - // amplitude, - // DecodeTag->threshold_sof, - // DecodeTag->threshold_half/4, - // DecodeTag->previous_amplitude); // DEBUGGING - if (DecodeTag->posCount == 1) { - DecodeTag->sum1 = 0; - DecodeTag->sum2 = 0; + if (tag->posCount == 1) { + tag->sum1 = 0; + tag->sum2 = 0; } - if (DecodeTag->posCount <= 4) { - DecodeTag->sum1 += amplitude; + if (tag->posCount <= 4) { + tag->sum1 += amplitude; } else { - DecodeTag->sum2 += amplitude; + tag->sum2 += amplitude; } - if (DecodeTag->posCount == 8) { - if (DecodeTag->sum1 > DecodeTag->threshold_half && DecodeTag->sum2 > DecodeTag->threshold_half) { // modulation in both halves - if (DecodeTag->lastBit == LOGIC0) { // this was already part of EOF - DecodeTag->state = STATE_TAG_EOF; + if (tag->posCount == 8) { + if (tag->sum1 > tag->threshold_half && tag->sum2 > tag->threshold_half) { // modulation in both halves + if (tag->lastBit == LOGIC0) { // this was already part of EOF + tag->state = STATE_TAG_EOF; } else { - DecodeTag->posCount = 0; - DecodeTag->previous_amplitude = amplitude; - DecodeTag->state = STATE_TAG_SOF_LOW; + tag->posCount = 0; + tag->previous_amplitude = amplitude; + tag->state = STATE_TAG_SOF_LOW; LED_C_OFF(); } - } else if (DecodeTag->sum1 < DecodeTag->threshold_half && DecodeTag->sum2 > DecodeTag->threshold_half) { // modulation in second half + } else if (tag->sum1 < tag->threshold_half && tag->sum2 > tag->threshold_half) { // modulation in second half // logic 1 - if (DecodeTag->lastBit == SOF_PART1) { // still part of SOF - DecodeTag->lastBit = SOF_PART2; // SOF completed + if (tag->lastBit == SOF_PART1) { // still part of SOF + tag->lastBit = SOF_PART2; // SOF completed } else { - DecodeTag->lastBit = LOGIC1; - DecodeTag->shiftReg >>= 1; - DecodeTag->shiftReg |= 0x80; - DecodeTag->bitCount++; - if (DecodeTag->bitCount == 8) { - DecodeTag->output[DecodeTag->len] = DecodeTag->shiftReg; - DecodeTag->len++; - // if (DecodeTag->shiftReg == 0x12 && DecodeTag->len == 1) FpgaDisableTracing(); // DEBUGGING - if (DecodeTag->len > DecodeTag->max_len) { + tag->lastBit = LOGIC1; + tag->shiftReg >>= 1; + tag->shiftReg |= 0x80; + tag->bitCount++; + if (tag->bitCount == 8) { + tag->output[tag->len] = tag->shiftReg; + tag->len++; + + if (tag->len > tag->max_len) { // buffer overflow, give up LED_C_OFF(); return true; } - DecodeTag->bitCount = 0; - DecodeTag->shiftReg = 0; + tag->bitCount = 0; + tag->shiftReg = 0; } } - } else if (DecodeTag->sum1 > DecodeTag->threshold_half && DecodeTag->sum2 < DecodeTag->threshold_half) { // modulation in first half + } else if (tag->sum1 > tag->threshold_half && tag->sum2 < tag->threshold_half) { // modulation in first half // logic 0 - if (DecodeTag->lastBit == SOF_PART1) { // incomplete SOF - DecodeTag->posCount = 0; - DecodeTag->previous_amplitude = amplitude; - DecodeTag->state = STATE_TAG_SOF_LOW; + if (tag->lastBit == SOF_PART1) { // incomplete SOF + tag->posCount = 0; + tag->previous_amplitude = amplitude; + tag->state = STATE_TAG_SOF_LOW; LED_C_OFF(); } else { - DecodeTag->lastBit = LOGIC0; - DecodeTag->shiftReg >>= 1; - DecodeTag->bitCount++; - if (DecodeTag->bitCount == 8) { - DecodeTag->output[DecodeTag->len] = DecodeTag->shiftReg; - DecodeTag->len++; - // if (DecodeTag->shiftReg == 0x12 && DecodeTag->len == 1) FpgaDisableTracing(); // DEBUGGING - if (DecodeTag->len > DecodeTag->max_len) { + tag->lastBit = LOGIC0; + tag->shiftReg >>= 1; + tag->bitCount++; + + if (tag->bitCount == 8) { + tag->output[tag->len] = tag->shiftReg; + tag->len++; + + if (tag->len > tag->max_len) { // buffer overflow, give up - DecodeTag->posCount = 0; - DecodeTag->previous_amplitude = amplitude; - DecodeTag->state = STATE_TAG_SOF_LOW; + tag->posCount = 0; + tag->previous_amplitude = amplitude; + tag->state = STATE_TAG_SOF_LOW; LED_C_OFF(); } - DecodeTag->bitCount = 0; - DecodeTag->shiftReg = 0; + tag->bitCount = 0; + tag->shiftReg = 0; } } } else { // no modulation - if (DecodeTag->lastBit == SOF_PART2) { // only SOF (this is OK for iClass) + if (tag->lastBit == SOF_PART2) { // only SOF (this is OK for iClass) LED_C_OFF(); return true; } else { - DecodeTag->posCount = 0; - DecodeTag->state = STATE_TAG_SOF_LOW; + tag->posCount = 0; + tag->state = STATE_TAG_SOF_LOW; LED_C_OFF(); } } - DecodeTag->posCount = 0; + tag->posCount = 0; } - DecodeTag->posCount++; + tag->posCount++; break; } case STATE_TAG_EOF: { - if (DecodeTag->posCount == 1) { - DecodeTag->sum1 = 0; - DecodeTag->sum2 = 0; + if (tag->posCount == 1) { + tag->sum1 = 0; + tag->sum2 = 0; } - if (DecodeTag->posCount <= 4) { - DecodeTag->sum1 += amplitude; + if (tag->posCount <= 4) { + tag->sum1 += amplitude; } else { - DecodeTag->sum2 += amplitude; + tag->sum2 += amplitude; } - if (DecodeTag->posCount == 8) { - if (DecodeTag->sum1 > DecodeTag->threshold_half && DecodeTag->sum2 < DecodeTag->threshold_half) { // modulation in first half - DecodeTag->posCount = 0; - DecodeTag->state = STATE_TAG_EOF_TAIL; + if (tag->posCount == 8) { + if (tag->sum1 > tag->threshold_half && tag->sum2 < tag->threshold_half) { // modulation in first half + tag->posCount = 0; + tag->state = STATE_TAG_EOF_TAIL; } else { - DecodeTag->posCount = 0; - DecodeTag->previous_amplitude = amplitude; - DecodeTag->state = STATE_TAG_SOF_LOW; + tag->posCount = 0; + tag->previous_amplitude = amplitude; + tag->state = STATE_TAG_SOF_LOW; LED_C_OFF(); } } - DecodeTag->posCount++; + tag->posCount++; break; } case STATE_TAG_EOF_TAIL: { - if (DecodeTag->posCount == 1) { - DecodeTag->sum1 = 0; - DecodeTag->sum2 = 0; + if (tag->posCount == 1) { + tag->sum1 = 0; + tag->sum2 = 0; } - if (DecodeTag->posCount <= 4) { - DecodeTag->sum1 += amplitude; + if (tag->posCount <= 4) { + tag->sum1 += amplitude; } else { - DecodeTag->sum2 += amplitude; + tag->sum2 += amplitude; } - if (DecodeTag->posCount == 8) { - if (DecodeTag->sum1 < DecodeTag->threshold_half && DecodeTag->sum2 < DecodeTag->threshold_half) { // no modulation in both halves + if (tag->posCount == 8) { + if (tag->sum1 < tag->threshold_half && tag->sum2 < tag->threshold_half) { // no modulation in both halves LED_C_OFF(); return true; } else { - DecodeTag->posCount = 0; - DecodeTag->previous_amplitude = amplitude; - DecodeTag->state = STATE_TAG_SOF_LOW; + tag->posCount = 0; + tag->previous_amplitude = amplitude; + tag->state = STATE_TAG_SOF_LOW; LED_C_OFF(); } } - DecodeTag->posCount++; + tag->posCount++; break; } } @@ -603,21 +594,18 @@ static RAMFUNC int Handle15693SamplesFromTag(uint16_t amplitude, DecodeTag_t *De return false; } -static void DecodeTagInit(DecodeTag_t *DecodeTag, uint8_t *data, uint16_t max_len) { - DecodeTag->previous_amplitude = MAX_PREVIOUS_AMPLITUDE; - DecodeTag->posCount = 0; - DecodeTag->state = STATE_TAG_SOF_LOW; - DecodeTag->output = data; - DecodeTag->max_len = max_len; +static void DecodeTagReset(DecodeTag_t *tag) { + tag->posCount = 0; + tag->state = STATE_TAG_SOF_LOW; + tag->previous_amplitude = MAX_PREVIOUS_AMPLITUDE; } -static void DecodeTagReset(DecodeTag_t *DecodeTag) { - DecodeTag->posCount = 0; - DecodeTag->state = STATE_TAG_SOF_LOW; - DecodeTag->previous_amplitude = MAX_PREVIOUS_AMPLITUDE; +static void DecodeTagInit(DecodeTag_t *tag, uint8_t *data, uint16_t max_len) { + tag->output = data; + tag->max_len = max_len; + DecodeTagReset(tag); } - /* * Receive and decode the tag response, also log to tracebuffer */ @@ -641,14 +629,18 @@ int GetIso15693AnswerFromTag(uint8_t* response, uint16_t max_len, uint16_t timeo // The DMA buffer, used to stream samples from the FPGA dmabuf16_t *dma = get_dma16(); - FpgaSetupSscDma((uint8_t*) dma->buf, DMA_BUFFER_SIZE); + // Setup and start DMA. + if (FpgaSetupSscDma((uint8_t *) dma->buf, DMA_BUFFER_SIZE) == false) { + if (DBGLEVEL > DBG_ERROR) Dbprintf("FpgaSetupSscDma failed. Exiting"); + return -4; + } uint32_t dma_start_time = 0; uint16_t *upTo = dma->buf; for(;;) { - uint16_t behindBy = ((uint16_t*)AT91C_BASE_PDC_SSC->PDC_RPR - upTo) & (DMA_BUFFER_SIZE - 1); + volatile uint16_t behindBy = ((uint16_t*)AT91C_BASE_PDC_SSC->PDC_RPR - upTo) & (DMA_BUFFER_SIZE - 1); if (behindBy == 0) continue; @@ -693,7 +685,6 @@ int GetIso15693AnswerFromTag(uint8_t* response, uint16_t max_len, uint16_t timeo FpgaDisableSscDma(); - uint32_t sof_time = *eof_time - (DecodeTag.len * 8 * 8 * 16) // time for byte transfers - (32 * 16) // time for SOF transfer @@ -713,11 +704,11 @@ int GetIso15693AnswerFromTag(uint8_t* response, uint16_t max_len, uint16_t timeo Dbprintf("timing: sof_time = %d, eof_time = %d", (sof_time * 4), (*eof_time * 4)); } - if (ret == -1) { + if (ret < 0) { return ret; } - - LogTrace(DecodeTag.output, DecodeTag.len, (sof_time * 4), (*eof_time * 4), NULL, false); + + LogTrace_ISO15693(DecodeTag.output, DecodeTag.len, (sof_time * 4), (*eof_time * 4), NULL, false); return DecodeTag.len; } @@ -735,7 +726,7 @@ int GetIso15693AnswerFromTag(uint8_t* response, uint16_t max_len, uint16_t timeo // false if we are still waiting for some more //============================================================================= -typedef struct DecodeReader { +typedef struct { enum { STATE_READER_UNSYNCD, STATE_READER_AWAIT_1ST_FALLING_EDGE_OF_SOF, @@ -762,50 +753,50 @@ typedef struct DecodeReader { uint8_t *jam_search_string; } DecodeReader_t; -static void DecodeReaderInit(DecodeReader_t* DecodeReader, uint8_t *data, uint16_t max_len, uint8_t jam_search_len, uint8_t *jam_search_string) { - DecodeReader->output = data; - DecodeReader->byteCountMax = max_len; - DecodeReader->state = STATE_READER_UNSYNCD; - DecodeReader->byteCount = 0; - DecodeReader->bitCount = 0; - DecodeReader->posCount = 1; - DecodeReader->shiftReg = 0; - DecodeReader->jam_search_len = jam_search_len; - DecodeReader->jam_search_string = jam_search_string; +static void DecodeReaderInit(DecodeReader_t* reader, uint8_t *data, uint16_t max_len, uint8_t jam_search_len, uint8_t *jam_search_string) { + reader->output = data; + reader->byteCountMax = max_len; + reader->state = STATE_READER_UNSYNCD; + reader->byteCount = 0; + reader->bitCount = 0; + reader->posCount = 1; + reader->shiftReg = 0; + reader->jam_search_len = jam_search_len; + reader->jam_search_string = jam_search_string; } -static void DecodeReaderReset(DecodeReader_t* DecodeReader) { - DecodeReader->state = STATE_READER_UNSYNCD; +static void DecodeReaderReset(DecodeReader_t* reader) { + reader->state = STATE_READER_UNSYNCD; } -static RAMFUNC int Handle15693SampleFromReader(bool bit, DecodeReader_t *DecodeReader) { - switch (DecodeReader->state) { +static RAMFUNC int Handle15693SampleFromReader(bool bit, DecodeReader_t *reader) { + switch (reader->state) { case STATE_READER_UNSYNCD: // wait for unmodulated carrier if (bit) { - DecodeReader->state = STATE_READER_AWAIT_1ST_FALLING_EDGE_OF_SOF; + reader->state = STATE_READER_AWAIT_1ST_FALLING_EDGE_OF_SOF; } break; case STATE_READER_AWAIT_1ST_FALLING_EDGE_OF_SOF: if (!bit) { // we went low, so this could be the beginning of a SOF - DecodeReader->posCount = 1; - DecodeReader->state = STATE_READER_AWAIT_1ST_RISING_EDGE_OF_SOF; + reader->posCount = 1; + reader->state = STATE_READER_AWAIT_1ST_RISING_EDGE_OF_SOF; } break; case STATE_READER_AWAIT_1ST_RISING_EDGE_OF_SOF: - DecodeReader->posCount++; + reader->posCount++; if (bit) { // detected rising edge - if (DecodeReader->posCount < 4) { // rising edge too early (nominally expected at 5) - DecodeReader->state = STATE_READER_AWAIT_1ST_FALLING_EDGE_OF_SOF; + if (reader->posCount < 4) { // rising edge too early (nominally expected at 5) + reader->state = STATE_READER_AWAIT_1ST_FALLING_EDGE_OF_SOF; } else { // SOF - DecodeReader->state = STATE_READER_AWAIT_2ND_FALLING_EDGE_OF_SOF; + reader->state = STATE_READER_AWAIT_2ND_FALLING_EDGE_OF_SOF; } } else { - if (DecodeReader->posCount > 5) { // stayed low for too long - DecodeReaderReset(DecodeReader); + if (reader->posCount > 5) { // stayed low for too long + DecodeReaderReset(reader); } else { // do nothing, keep waiting } @@ -813,22 +804,26 @@ static RAMFUNC int Handle15693SampleFromReader(bool bit, DecodeReader_t *DecodeR break; case STATE_READER_AWAIT_2ND_FALLING_EDGE_OF_SOF: - DecodeReader->posCount++; - if (!bit) { // detected a falling edge - if (DecodeReader->posCount < 20) { // falling edge too early (nominally expected at 21 earliest) - DecodeReaderReset(DecodeReader); - } else if (DecodeReader->posCount < 23) { // SOF for 1 out of 4 coding - DecodeReader->Coding = CODING_1_OUT_OF_4; - DecodeReader->state = STATE_READER_AWAIT_2ND_RISING_EDGE_OF_SOF; - } else if (DecodeReader->posCount < 28) { // falling edge too early (nominally expected at 29 latest) - DecodeReaderReset(DecodeReader); + + reader->posCount++; + + if (bit == false) { // detected a falling edge + + if (reader->posCount < 20) { // falling edge too early (nominally expected at 21 earliest) + DecodeReaderReset(reader); + } else if (reader->posCount < 23) { // SOF for 1 out of 4 coding + reader->Coding = CODING_1_OUT_OF_4; + reader->state = STATE_READER_AWAIT_2ND_RISING_EDGE_OF_SOF; + } else if (reader->posCount < 28) { // falling edge too early (nominally expected at 29 latest) + DecodeReaderReset(reader); } else { // SOF for 1 out of 256 coding - DecodeReader->Coding = CODING_1_OUT_OF_256; - DecodeReader->state = STATE_READER_AWAIT_2ND_RISING_EDGE_OF_SOF; + reader->Coding = CODING_1_OUT_OF_256; + reader->state = STATE_READER_AWAIT_2ND_RISING_EDGE_OF_SOF; } + } else { - if (DecodeReader->posCount > 29) { // stayed high for too long - DecodeReader->state = STATE_READER_AWAIT_1ST_FALLING_EDGE_OF_SOF; + if (reader->posCount > 29) { // stayed high for too long + reader->state = STATE_READER_AWAIT_1ST_FALLING_EDGE_OF_SOF; } else { // do nothing, keep waiting } @@ -836,37 +831,39 @@ static RAMFUNC int Handle15693SampleFromReader(bool bit, DecodeReader_t *DecodeR break; case STATE_READER_AWAIT_2ND_RISING_EDGE_OF_SOF: - DecodeReader->posCount++; + + reader->posCount++; + if (bit) { // detected rising edge - if (DecodeReader->Coding == CODING_1_OUT_OF_256) { - if (DecodeReader->posCount < 32) { // rising edge too early (nominally expected at 33) - DecodeReader->state = STATE_READER_AWAIT_1ST_FALLING_EDGE_OF_SOF; + if (reader->Coding == CODING_1_OUT_OF_256) { + if (reader->posCount < 32) { // rising edge too early (nominally expected at 33) + reader->state = STATE_READER_AWAIT_1ST_FALLING_EDGE_OF_SOF; } else { - DecodeReader->posCount = 1; - DecodeReader->bitCount = 0; - DecodeReader->byteCount = 0; - DecodeReader->sum1 = 1; - DecodeReader->state = STATE_READER_RECEIVE_DATA_1_OUT_OF_256; + reader->posCount = 1; + reader->bitCount = 0; + reader->byteCount = 0; + reader->sum1 = 1; + reader->state = STATE_READER_RECEIVE_DATA_1_OUT_OF_256; LED_B_ON(); } } else { // CODING_1_OUT_OF_4 - if (DecodeReader->posCount < 24) { // rising edge too early (nominally expected at 25) - DecodeReader->state = STATE_READER_AWAIT_1ST_FALLING_EDGE_OF_SOF; + if (reader->posCount < 24) { // rising edge too early (nominally expected at 25) + reader->state = STATE_READER_AWAIT_1ST_FALLING_EDGE_OF_SOF; } else { - DecodeReader->posCount = 1; - DecodeReader->state = STATE_READER_AWAIT_END_OF_SOF_1_OUT_OF_4; + reader->posCount = 1; + reader->state = STATE_READER_AWAIT_END_OF_SOF_1_OUT_OF_4; } } } else { - if (DecodeReader->Coding == CODING_1_OUT_OF_256) { - if (DecodeReader->posCount > 34) { // signal stayed low for too long - DecodeReaderReset(DecodeReader); + if (reader->Coding == CODING_1_OUT_OF_256) { + if (reader->posCount > 34) { // signal stayed low for too long + DecodeReaderReset(reader); } else { // do nothing, keep waiting } } else { // CODING_1_OUT_OF_4 - if (DecodeReader->posCount > 26) { // signal stayed low for too long - DecodeReaderReset(DecodeReader); + if (reader->posCount > 26) { // signal stayed low for too long + DecodeReaderReset(reader); } else { // do nothing, keep waiting } @@ -875,136 +872,162 @@ static RAMFUNC int Handle15693SampleFromReader(bool bit, DecodeReader_t *DecodeR break; case STATE_READER_AWAIT_END_OF_SOF_1_OUT_OF_4: - DecodeReader->posCount++; + + reader->posCount++; + if (bit) { - if (DecodeReader->posCount == 9) { - DecodeReader->posCount = 1; - DecodeReader->bitCount = 0; - DecodeReader->byteCount = 0; - DecodeReader->sum1 = 1; - DecodeReader->state = STATE_READER_RECEIVE_DATA_1_OUT_OF_4; + if (reader->posCount == 9) { + reader->posCount = 1; + reader->bitCount = 0; + reader->byteCount = 0; + reader->sum1 = 1; + reader->state = STATE_READER_RECEIVE_DATA_1_OUT_OF_4; LED_B_ON(); } else { // do nothing, keep waiting } } else { // unexpected falling edge - DecodeReaderReset(DecodeReader); + DecodeReaderReset(reader); } break; case STATE_READER_RECEIVE_DATA_1_OUT_OF_4: - DecodeReader->posCount++; - if (DecodeReader->posCount == 1) { - DecodeReader->sum1 = bit ? 1 : 0; - } else if (DecodeReader->posCount <= 4) { - if (bit) DecodeReader->sum1++; - } else if (DecodeReader->posCount == 5) { - DecodeReader->sum2 = bit ? 1 : 0; + + reader->posCount++; + + if (reader->posCount == 1) { + + reader->sum1 = bit ? 1 : 0; + + } else if (reader->posCount <= 4) { + + if (bit) + reader->sum1++; + + } else if (reader->posCount == 5) { + + reader->sum2 = bit ? 1 : 0; + } else { - if (bit) DecodeReader->sum2++; + if (bit) + reader->sum2++; } - if (DecodeReader->posCount == 8) { - DecodeReader->posCount = 0; - if (DecodeReader->sum1 <= 1 && DecodeReader->sum2 >= 3) { // EOF + + if (reader->posCount == 8) { + reader->posCount = 0; + if (reader->sum1 <= 1 && reader->sum2 >= 3) { // EOF LED_B_OFF(); // Finished receiving - DecodeReaderReset(DecodeReader); - if (DecodeReader->byteCount != 0) { + DecodeReaderReset(reader); + if (reader->byteCount != 0) { return true; } - } else if (DecodeReader->sum1 >= 3 && DecodeReader->sum2 <= 1) { // detected a 2bit position - DecodeReader->shiftReg >>= 2; - DecodeReader->shiftReg |= (DecodeReader->bitCount << 6); + + } else if (reader->sum1 >= 3 && reader->sum2 <= 1) { // detected a 2bit position + reader->shiftReg >>= 2; + reader->shiftReg |= (reader->bitCount << 6); } - if (DecodeReader->bitCount == 15) { // we have a full byte - DecodeReader->output[DecodeReader->byteCount++] = DecodeReader->shiftReg; - if (DecodeReader->byteCount > DecodeReader->byteCountMax) { + + if (reader->bitCount == 15) { // we have a full byte + + reader->output[reader->byteCount++] = reader->shiftReg; + if (reader->byteCount > reader->byteCountMax) { // buffer overflow, give up LED_B_OFF(); - DecodeReaderReset(DecodeReader); + DecodeReaderReset(reader); } - DecodeReader->bitCount = 0; - DecodeReader->shiftReg = 0; - if (DecodeReader->byteCount == DecodeReader->jam_search_len) { - if (!memcmp(DecodeReader->output, DecodeReader->jam_search_string, DecodeReader->jam_search_len)) { + + reader->bitCount = 0; + reader->shiftReg = 0; + if (reader->byteCount == reader->jam_search_len) { + if (!memcmp(reader->output, reader->jam_search_string, reader->jam_search_len)) { LED_D_ON(); FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER | FPGA_HF_READER_MODE_SEND_JAM); - DecodeReader->state = STATE_READER_RECEIVE_JAMMING; + reader->state = STATE_READER_RECEIVE_JAMMING; } } + } else { - DecodeReader->bitCount++; + reader->bitCount++; } } break; case STATE_READER_RECEIVE_DATA_1_OUT_OF_256: - DecodeReader->posCount++; - if (DecodeReader->posCount == 1) { - DecodeReader->sum1 = bit ? 1 : 0; - } else if (DecodeReader->posCount <= 4) { - if (bit) DecodeReader->sum1++; - } else if (DecodeReader->posCount == 5) { - DecodeReader->sum2 = bit ? 1 : 0; + + reader->posCount++; + + if (reader->posCount == 1) { + reader->sum1 = bit ? 1 : 0; + } else if (reader->posCount <= 4) { + if (bit) reader->sum1++; + } else if (reader->posCount == 5) { + reader->sum2 = bit ? 1 : 0; } else if (bit) { - DecodeReader->sum2++; + reader->sum2++; } - if (DecodeReader->posCount == 8) { - DecodeReader->posCount = 0; - if (DecodeReader->sum1 <= 1 && DecodeReader->sum2 >= 3) { // EOF + + if (reader->posCount == 8) { + reader->posCount = 0; + if (reader->sum1 <= 1 && reader->sum2 >= 3) { // EOF LED_B_OFF(); // Finished receiving - DecodeReaderReset(DecodeReader); - if (DecodeReader->byteCount != 0) { + DecodeReaderReset(reader); + if (reader->byteCount != 0) { return true; } - } else if (DecodeReader->sum1 >= 3 && DecodeReader->sum2 <= 1) { // detected the bit position - DecodeReader->shiftReg = DecodeReader->bitCount; + + } else if (reader->sum1 >= 3 && reader->sum2 <= 1) { // detected the bit position + reader->shiftReg = reader->bitCount; } - if (DecodeReader->bitCount == 255) { // we have a full byte - DecodeReader->output[DecodeReader->byteCount++] = DecodeReader->shiftReg; - if (DecodeReader->byteCount > DecodeReader->byteCountMax) { + + if (reader->bitCount == 255) { // we have a full byte + reader->output[reader->byteCount++] = reader->shiftReg; + if (reader->byteCount > reader->byteCountMax) { // buffer overflow, give up LED_B_OFF(); - DecodeReaderReset(DecodeReader); + DecodeReaderReset(reader); } - if (DecodeReader->byteCount == DecodeReader->jam_search_len) { - if (!memcmp(DecodeReader->output, DecodeReader->jam_search_string, DecodeReader->jam_search_len)) { + + if (reader->byteCount == reader->jam_search_len) { + if (!memcmp(reader->output, reader->jam_search_string, reader->jam_search_len)) { LED_D_ON(); FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER | FPGA_HF_READER_MODE_SEND_JAM); - DecodeReader->state = STATE_READER_RECEIVE_JAMMING; + reader->state = STATE_READER_RECEIVE_JAMMING; } } } - DecodeReader->bitCount++; + reader->bitCount++; } break; case STATE_READER_RECEIVE_JAMMING: - DecodeReader->posCount++; - if (DecodeReader->Coding == CODING_1_OUT_OF_4) { - if (DecodeReader->posCount == 7 * 16) { // 7 bits jammed + + reader->posCount++; + + if (reader->Coding == CODING_1_OUT_OF_4) { + if (reader->posCount == 7 * 16) { // 7 bits jammed FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER | FPGA_HF_READER_MODE_SNIFF_AMPLITUDE); // stop jamming // FpgaDisableTracing(); LED_D_OFF(); - } else if (DecodeReader->posCount == 8 * 16) { - DecodeReader->posCount = 0; - DecodeReader->output[DecodeReader->byteCount++] = 0x00; - DecodeReader->state = STATE_READER_RECEIVE_DATA_1_OUT_OF_4; + } else if (reader->posCount == 8 * 16) { + reader->posCount = 0; + reader->output[reader->byteCount++] = 0x00; + reader->state = STATE_READER_RECEIVE_DATA_1_OUT_OF_4; } } else { - if (DecodeReader->posCount == 7 * 256) { // 7 bits jammend + if (reader->posCount == 7 * 256) { // 7 bits jammend FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER | FPGA_HF_READER_MODE_SNIFF_AMPLITUDE); // stop jamming LED_D_OFF(); - } else if (DecodeReader->posCount == 8 * 256) { - DecodeReader->posCount = 0; - DecodeReader->output[DecodeReader->byteCount++] = 0x00; - DecodeReader->state = STATE_READER_RECEIVE_DATA_1_OUT_OF_256; + } else if (reader->posCount == 8 * 256) { + reader->posCount = 0; + reader->output[reader->byteCount++] = 0x00; + reader->state = STATE_READER_RECEIVE_DATA_1_OUT_OF_256; } } break; default: LED_B_OFF(); - DecodeReaderReset(DecodeReader); + DecodeReaderReset(reader); break; } @@ -1040,17 +1063,25 @@ int GetIso15693CommandFromReader(uint8_t *received, size_t max_len, uint32_t *eo (void) temp; while (!(AT91C_BASE_SSC->SSC_SR & AT91C_SSC_RXRDY)) ; - uint32_t dma_start_time = GetCountSspClk() & 0xfffffff8; - // Setup and start DMA. dmabuf8_t *dma = get_dma8(); - FpgaSetupSscDma(dma->buf, DMA_BUFFER_SIZE); + if (FpgaSetupSscDma(dma->buf, DMA_BUFFER_SIZE) == false) { + if (DBGLEVEL > DBG_ERROR) Dbprintf("FpgaSetupSscDma failed. Exiting"); + return -4; + } uint8_t *upTo = dma->buf; - for (;;) { - uint16_t behindBy = ((uint8_t*)AT91C_BASE_PDC_SSC->PDC_RPR - upTo) & (DMA_BUFFER_SIZE - 1); +// uint32_t dma_start_time = GetCountSspClk() & 0xfffffff8; + uint32_t dma_start_time; + for (;;) { + volatile uint16_t behindBy = ((uint8_t*)AT91C_BASE_PDC_SSC->PDC_RPR - upTo) & (DMA_BUFFER_SIZE - 1); if (behindBy == 0) continue; + + if (samples == 0) { + // DMA has transferred the very first data + dma_start_time = GetCountSspClk() & 0xfffffff0; + } volatile uint8_t b = *upTo++; if (upTo >= dma->buf + DMA_BUFFER_SIZE) { // we have read all of the DMA buffer content. @@ -1074,16 +1105,16 @@ int GetIso15693CommandFromReader(uint8_t *received, size_t max_len, uint32_t *eo samples++; } + if (gotFrame) { + break; + } + if (BUTTON_PRESS()) { DecodeReader.byteCount = -1; break; } WDT_HIT(); - - if (gotFrame) { - break; - } } FpgaDisableSscDma(); @@ -1094,12 +1125,12 @@ int GetIso15693CommandFromReader(uint8_t *received, size_t max_len, uint32_t *eo DecodeReader.bitCount, DecodeReader.posCount); } - if (DecodeReader.byteCount > 0) { + if (DecodeReader.byteCount >= 0) { uint32_t sof_time = *eof_time - DecodeReader.byteCount * (DecodeReader.Coding == CODING_1_OUT_OF_4 ? 128 : 2048) // time for byte transfers - 32 // time for SOF transfer - 16; // time for EOF transfer - LogTrace(DecodeReader.output, DecodeReader.byteCount, (sof_time * 32), (*eof_time * 32), NULL, true); + LogTrace_ISO15693(DecodeReader.output, DecodeReader.byteCount, (sof_time * 32), (*eof_time * 32), NULL, true); } return DecodeReader.byteCount; @@ -1155,19 +1186,26 @@ void SniffIso15693(uint8_t jam_search_len, uint8_t *jam_search_string) { FpgaDownloadAndGo(FPGA_BITSTREAM_HF); + BigBuf_free(); clear_trace(); set_tracing(true); // Count of samples received so far, so that we can include timing int samples = 0; - DecodeTag_t DecodeTag = {0}; - uint8_t response[ISO15693_MAX_RESPONSE_LENGTH] = {0}; - DecodeTagInit(&DecodeTag, response, sizeof(response)); +// DecodeTag_t dtag = {0}; +// uint8_t response[ISO15693_MAX_RESPONSE_LENGTH] = {0}; +// DecodeTagInit(&dtag, response, sizeof(response)); + DecodeTag_t *dtag = (DecodeTag_t *)BigBuf_malloc(sizeof(DecodeTag_t)); + uint8_t *response = BigBuf_malloc(ISO15693_MAX_RESPONSE_LENGTH); + DecodeTagInit(dtag, response, ISO15693_MAX_RESPONSE_LENGTH); - DecodeReader_t DecodeReader = {0}; - uint8_t cmd[ISO15693_MAX_COMMAND_LENGTH] = {0}; - DecodeReaderInit(&DecodeReader, cmd, sizeof(cmd), jam_search_len, jam_search_string); +// DecodeReader_t dreader = {0}; +// uint8_t cmd[ISO15693_MAX_COMMAND_LENGTH] = {0}; +// DecodeReaderInit(&dreader, cmd, sizeof(cmd), jam_search_len, jam_search_string); + DecodeReader_t *dreader = (DecodeReader_t *)BigBuf_malloc(sizeof(DecodeReader_t)); + uint8_t *cmd = BigBuf_malloc(ISO15693_MAX_COMMAND_LENGTH); + DecodeReaderInit(dreader, cmd, ISO15693_MAX_COMMAND_LENGTH, jam_search_len, jam_search_string); // Print some debug information about the buffer sizes if (DBGLEVEL >= DBG_EXTENDED) { @@ -1178,7 +1216,7 @@ void SniffIso15693(uint8_t jam_search_len, uint8_t *jam_search_string) { Dbprintf(" DMA: %i bytes", DMA_BUFFER_SIZE * sizeof(uint16_t)); } - Dbprintf("Sniff started. Press PM3 Button to stop."); + Dbprintf("Starting to sniff. Press PM3 Button to stop."); FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER | FPGA_HF_READER_MODE_SNIFF_AMPLITUDE); LED_D_OFF(); @@ -1189,38 +1227,79 @@ void SniffIso15693(uint8_t jam_search_len, uint8_t *jam_search_string) { // The DMA buffer, used to stream samples from the FPGA dmabuf16_t *dma = get_dma16(); - FpgaSetupSscDma((uint8_t*)dma->buf, DMA_BUFFER_SIZE); uint16_t *upTo = dma->buf; + // Setup and start DMA. + if (FpgaSetupSscDma((uint8_t *) dma->buf, DMA_BUFFER_SIZE) == false) { + if (DBGLEVEL > DBG_ERROR) Dbprintf("FpgaSetupSscDma failed. Exiting"); + switch_off(); + return; + } + bool tag_is_active = false; bool reader_is_active = false; bool expect_tag_answer = false; - uint32_t dma_start_time = 0; - uint16_t max_behindBy = 0; + int dma_start_time = 0; + +// int max_data_len = 0, data_len; // And now we loop, receiving samples. for(;;) { - uint16_t behindBy = ((uint16_t*)AT91C_BASE_PDC_SSC->PDC_RPR - upTo) & (DMA_BUFFER_SIZE - 1); - if (behindBy > max_behindBy) { - max_behindBy = behindBy; - } - - if (behindBy == 0) continue; samples++; if (samples == 1) { // DMA has transferred the very first data dma_start_time = GetCountSspClk() & 0xfffffff0; } - uint16_t sniffdata = *upTo++; + /* if (upTo >= dma->buf + DMA_BUFFER_SIZE) { // we have read all of the DMA buffer content. + + upTo = dma->buf; + + int register read_bufdata_p = upTo - dma->buf; + int register dma_buf_data_p = DMA_BUFFER_SIZE - AT91C_BASE_PDC_SSC->PDC_RCR; + if (read_bufdata_p <= dma_buf_data_p) + data_len = dma_buf_data_p - read_bufdata_p; + else + data_len = DMA_BUFFER_SIZE - read_bufdata_p + dma_buf_data_p; + + // test for length of buffer + if (data_len > max_data_len) { + max_data_len = data_len; + if (data_len > (9 * DMA_BUFFER_SIZE / 10)) { + Dbprintf("[!] blew circular buffer! | datalen %u", data_len); + break; + } + } + + // primary buffer was stopped( <-- we lost data! + if (AT91C_BASE_PDC_SSC->PDC_RCR == false) { + AT91C_BASE_PDC_SSC->PDC_RPR = (uint32_t) dma->buf; + AT91C_BASE_PDC_SSC->PDC_RCR = DMA_BUFFER_SIZE; + } + // secondary buffer sets as primary, secondary buffer was stopped + if (AT91C_BASE_PDC_SSC->PDC_RNCR == false) { + AT91C_BASE_PDC_SSC->PDC_RNPR = (uint32_t) dma->buf; + AT91C_BASE_PDC_SSC->PDC_RNCR = DMA_BUFFER_SIZE; + } + + + } +*/ + + uint16_t behindBy = ((uint16_t*)AT91C_BASE_PDC_SSC->PDC_RPR - upTo) & (DMA_BUFFER_SIZE - 1); + if (behindBy == 0) continue; + + if (upTo >= dma->buf + DMA_BUFFER_SIZE) { // we have read all of the DMA buffer content. + upTo = dma->buf; // start reading the circular buffer from the beginning if (behindBy > (9 * DMA_BUFFER_SIZE / 10)) { Dbprintf("About to blow circular buffer - aborted! behindBy=%d, samples=%d", behindBy, samples); break; } + if (AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_ENDRX)) { // DMA Counter Register had reached 0, already rotated. AT91C_BASE_PDC_SSC->PDC_RNPR = (uint32_t) dma->buf; // refresh the DMA Next Buffer and AT91C_BASE_PDC_SSC->PDC_RNCR = DMA_BUFFER_SIZE; // DMA Next Counter registers @@ -1232,87 +1311,97 @@ void SniffIso15693(uint8_t jam_search_len, uint8_t *jam_search_string) { } } +/* + WDT_HIT(); + if (BUTTON_PRESS()) { + DbpString("Sniff stopped."); + break; + } +*/ // no need to try decoding reader data if the tag is sending if (tag_is_active == false) { - if (Handle15693SampleFromReader(sniffdata & 0x02, &DecodeReader)) { + if (Handle15693SampleFromReader(sniffdata & 0x02, dreader)) { uint32_t eof_time = dma_start_time + (samples * 16) + 8 - DELAY_READER_TO_ARM_SNIFF; // end of EOF - if (DecodeReader.byteCount > 0) { + if (dreader->byteCount > 0) { uint32_t sof_time = eof_time - - DecodeReader.byteCount * (DecodeReader.Coding == CODING_1_OUT_OF_4 ? 128 * 16 : 2048 * 16) // time for byte transfers + - dreader->byteCount * (dreader->Coding == CODING_1_OUT_OF_4 ? 128 * 16 : 2048 * 16) // time for byte transfers - 32 * 16 // time for SOF transfer - 16 * 16; // time for EOF transfer - LogTrace(DecodeReader.output, DecodeReader.byteCount, (sof_time * 4), (eof_time * 4), NULL, true); + LogTrace_ISO15693(dreader->output, dreader->byteCount, (sof_time * 4), (eof_time * 4), NULL, true); } // And ready to receive another command. - DecodeReaderReset(&DecodeReader); + DecodeReaderReset(dreader); // And also reset the demod code, which might have been // false-triggered by the commands from the reader. - DecodeTagReset(&DecodeTag); + DecodeTagReset(dtag); reader_is_active = false; expect_tag_answer = true; - } else if (Handle15693SampleFromReader(sniffdata & 0x01, &DecodeReader)) { + } else if (Handle15693SampleFromReader(sniffdata & 0x01, dreader)) { uint32_t eof_time = dma_start_time + (samples * 16) + 16 - DELAY_READER_TO_ARM_SNIFF; // end of EOF - if (DecodeReader.byteCount > 0) { + if (dreader->byteCount > 0) { uint32_t sof_time = eof_time - - DecodeReader.byteCount * (DecodeReader.Coding == CODING_1_OUT_OF_4 ? 128 * 16 : 2048 * 16) // time for byte transfers + - dreader->byteCount * (dreader->Coding == CODING_1_OUT_OF_4 ? 128 * 16 : 2048 * 16) // time for byte transfers - 32 * 16 // time for SOF transfer - 16 * 16; // time for EOF transfer - LogTrace(DecodeReader.output, DecodeReader.byteCount, (sof_time * 4), (eof_time * 4), NULL, true); + LogTrace_ISO15693(dreader->output, dreader->byteCount, (sof_time * 4), (eof_time * 4), NULL, true); } // And ready to receive another command - DecodeReaderReset(&DecodeReader); + DecodeReaderReset(dreader); // And also reset the demod code, which might have been // false-triggered by the commands from the reader. - DecodeTagReset(&DecodeTag); + DecodeTagReset(dtag); reader_is_active = false; expect_tag_answer = true; } else { - reader_is_active = (DecodeReader.state >= STATE_READER_RECEIVE_DATA_1_OUT_OF_4); + reader_is_active = (dreader->state >= STATE_READER_RECEIVE_DATA_1_OUT_OF_4); } } - if (!reader_is_active && expect_tag_answer) { // no need to try decoding tag data if the reader is currently sending or no answer expected yet - if (Handle15693SamplesFromTag(sniffdata >> 2, &DecodeTag)) { + if (reader_is_active == false && expect_tag_answer) { // no need to try decoding tag data if the reader is currently sending or no answer expected yet + + if (Handle15693SamplesFromTag(sniffdata >> 2, dtag)) { uint32_t eof_time = dma_start_time + (samples * 16) - DELAY_TAG_TO_ARM_SNIFF; // end of EOF - if (DecodeTag.lastBit == SOF_PART2) { + if (dtag->lastBit == SOF_PART2) { eof_time -= (8 * 16); // needed 8 additional samples to confirm single SOF (iCLASS) } uint32_t sof_time = eof_time - - DecodeTag.len * 8 * 8 * 16 // time for byte transfers + - dtag->len * 8 * 8 * 16 // time for byte transfers - (32 * 16) // time for SOF transfer - - (DecodeTag.lastBit != SOF_PART2 ? (32 * 16) : 0); // time for EOF transfer + - (dtag->lastBit != SOF_PART2 ? (32 * 16) : 0); // time for EOF transfer - LogTrace(DecodeTag.output, DecodeTag.len, (sof_time * 4), (eof_time * 4), NULL, false); + LogTrace_ISO15693(dtag->output, dtag->len, (sof_time * 4), (eof_time * 4), NULL, false); // And ready to receive another response. - DecodeTagReset(&DecodeTag); - DecodeReaderReset(&DecodeReader); + DecodeTagReset(dtag); + DecodeReaderReset(dreader); expect_tag_answer = false; tag_is_active = false; } else { - tag_is_active = (DecodeTag.state >= STATE_TAG_RECEIVING_DATA); + tag_is_active = (dtag->state >= STATE_TAG_RECEIVING_DATA); } } } + FpgaDisableTracing(); + switch_off(); DbpString("Sniff statistics:"); Dbprintf(" ExpectTagAnswer: %d, TagIsActive: %d, ReaderIsActive: %d", expect_tag_answer, tag_is_active, reader_is_active); - Dbprintf(" DecodeTag State: %d", DecodeTag.state); - Dbprintf(" DecodeTag byteCnt: %d", DecodeTag.len); - Dbprintf(" DecodeTag posCount: %d", DecodeTag.posCount); - Dbprintf(" DecodeReader State: %d", DecodeReader.state); - Dbprintf(" DecodeReader byteCnt: %d", DecodeReader.byteCount); - Dbprintf(" DecodeReader posCount: %d", DecodeReader.posCount); + Dbprintf(" DecodeTag State: %d", dtag->state); + Dbprintf(" DecodeTag byteCnt: %d", dtag->len); + Dbprintf(" DecodeTag posCount: %d", dtag->posCount); + Dbprintf(" DecodeReader State: %d", dreader->state); + Dbprintf(" DecodeReader byteCnt: %d", dreader->byteCount); + Dbprintf(" DecodeReader posCount: %d", dreader->posCount); Dbprintf(" Trace length: %d", BigBuf_get_traceLen()); - Dbprintf(" Max behindBy: %d", max_behindBy); +// Dbprintf(" Max behindBy: %d", max_behindBy); } // Initialize Proxmark3 as ISO15693 reader @@ -1386,7 +1475,7 @@ int SendDataTag(uint8_t *send, int sendlen, bool init, bool speed_fast, uint8_t tosend_t *ts = get_tosend(); TransmitTo15693Tag(ts->buf, ts->max, &start_time); uint32_t end_time = start_time + 32 * ((8 * ts->max) - 4); // substract the 4 padding bits after EOF - LogTrace(send, sendlen, (start_time * 4), (end_time * 4), NULL, true); + LogTrace_ISO15693(send, sendlen, (start_time * 4), (end_time * 4), NULL, true); int res = 0; if (recv != NULL) { @@ -1401,7 +1490,7 @@ int SendDataTagEOF(uint8_t *recv, uint16_t max_recv_len, uint32_t start_time, ui tosend_t *ts = get_tosend(); TransmitTo15693Tag(ts->buf, ts->max, &start_time); uint32_t end_time = start_time + 32 * (8 * ts->max - 4); // substract the 4 padding bits after EOF - LogTrace(NULL, 0, (start_time * 4), (end_time * 4), NULL, true); + LogTrace_ISO15693(NULL, 0, (start_time * 4), (end_time * 4), NULL, true); int res = 0; if (recv != NULL) { @@ -1639,7 +1728,7 @@ void SimTagIso15693(uint8_t *uid) { bool slow = !(cmd[0] & ISO15_REQ_DATARATE_HIGH); uint32_t response_time = reader_eof_time + DELAY_ISO15693_VCD_TO_VICC_SIM; TransmitTo15693Reader(ts->buf, ts->max, &response_time, 0, slow); - LogTrace(resp_inv, CMD_INV_RESP, response_time * 32, (response_time * 32) + (ts->max * 32 * 64), NULL, false); + LogTrace_ISO15693(resp_inv, CMD_INV_RESP, response_time * 32, (response_time * 32) + (ts->max * 32 * 64), NULL, false); chip_state = SELECTED; } diff --git a/armsrc/iso15693.h b/armsrc/iso15693.h index fcca9491c..d650ab0ef 100644 --- a/armsrc/iso15693.h +++ b/armsrc/iso15693.h @@ -27,7 +27,7 @@ void Iso15693InitReader(void); void Iso15693InitTag(void); void CodeIso15693AsReader(uint8_t *cmd, int n); void CodeIso15693AsTag(uint8_t *cmd, size_t len); - + void TransmitTo15693Reader(const uint8_t *cmd, size_t len, uint32_t *start_time, uint32_t slot_time, bool slow); int GetIso15693CommandFromReader(uint8_t *received, size_t max_len, uint32_t *eof_time); void TransmitTo15693Tag(const uint8_t *cmd, int len, uint32_t *start_time); From ca14b92dd560e53b208b0f483595457ee006d7d5 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Tue, 21 Jul 2020 10:53:19 +0200 Subject: [PATCH 0128/1047] iclass info - some cards configured to take all available mem. ie no AA2 area. --- client/src/cmdhficlass.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/client/src/cmdhficlass.c b/client/src/cmdhficlass.c index 29c5eee98..14a796743 100644 --- a/client/src/cmdhficlass.c +++ b/client/src/cmdhficlass.c @@ -512,7 +512,10 @@ static void mem_app_config(const picopass_hdr *hdr) { PrintAndLogEx(INFO, "------ " _CYAN_("Memory") " ------"); PrintAndLogEx(INFO, " %u KBits/%u App Areas (%u bytes)", kb, app_areas, app2_limit * 8); PrintAndLogEx(INFO, " AA1 blocks %u { 0x06 - 0x%02X (06 - %02d) }", app1_limit , app1_limit + 5, app1_limit + 5); - PrintAndLogEx(INFO, " AA2 blocks %u { 0x%02X - 0x%02X (%02d - %02d) }", app2_limit - app1_limit, app1_limit + 5 + 1, app2_limit, app1_limit + 5 + 1, app2_limit); + if (app1_limit <= app2_limit) + PrintAndLogEx(INFO, " AA2 blocks %u { 0x%02X - 0x%02X (%02d - %02d) }", app2_limit - app1_limit, app1_limit + 5 + 1, app2_limit, app1_limit + 5 + 1, app2_limit); + else + PrintAndLogEx(INFO, " AA1 is configured to take all available space"); PrintAndLogEx(INFO, "------ " _CYAN_("KeyAccess") " ------"); PrintAndLogEx(INFO, " Kd = Debit key (AA1), Kc = Credit key (AA2)"); From 1f2c03ce8a76a9ef12f93f6a07829a77766b57d7 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Tue, 21 Jul 2020 13:00:52 +0200 Subject: [PATCH 0129/1047] iclass rdbl textual --- client/src/cmdhficlass.c | 62 +++++++++++++++++++++++++++------------- 1 file changed, 42 insertions(+), 20 deletions(-) diff --git a/client/src/cmdhficlass.c b/client/src/cmdhficlass.c index 14a796743..916ddd303 100644 --- a/client/src/cmdhficlass.c +++ b/client/src/cmdhficlass.c @@ -377,6 +377,14 @@ static inline uint32_t leadingzeros(uint64_t a) { #else return 0; #endif +} +static inline uint32_t countones(uint64_t a) { +#if defined __GNUC__ + return __builtin_popcountll(a); +#else + return 0; +#endif + } // iclass card descriptors @@ -1943,8 +1951,10 @@ static int iclass_read_block(uint8_t *KEY, uint8_t blockno, uint8_t keyType, boo return PM3_ESOFT; } + PrintAndLogEx(NORMAL, ""); PrintAndLogEx(SUCCESS, " block %02X : " _GREEN_("%s"), blockno, sprint_hex(result->blockdata, sizeof(result->blockdata))); - + PrintAndLogEx(NORMAL, ""); + if (memcmp(result->blockdata, empty, 8) == 0) return PM3_SUCCESS; @@ -1962,14 +1972,19 @@ static int iclass_read_block(uint8_t *KEY, uint8_t blockno, uint8_t keyType, boo break; } case 7: { - PrintAndLogEx(INFO, "-----------------------------------------------------------------"); + PrintAndLogEx(INFO, "----------------------------- " _CYAN_("cardhelper") " -----------------------------"); uint8_t dec_data[8]; + uint64_t a = bytes_to_num(result->blockdata, 8); - if (leadingzeros(a) < 12) { - PrintAndLogEx(INFO, "data looks encrypted, false positive is possible"); + bool starts = (leadingzeros(a) < 12); + bool ones = (countones(a) > 16 && countones(a) < 48); + + if (starts && ones) { + PrintAndLogEx(INFO, "data looks encrypted, False Positives " _YELLOW_("ARE") " possible"); Decrypt(result->blockdata, dec_data); PrintAndLogEx(SUCCESS, "decrypted : " _GREEN_("%s"), sprint_hex(dec_data, sizeof(dec_data))); } else { + memcpy(dec_data, result->blockdata, sizeof(dec_data)); PrintAndLogEx(INFO, "data looks unencrypted, trying to decode"); } @@ -1990,14 +2005,14 @@ static int iclass_read_block(uint8_t *KEY, uint8_t blockno, uint8_t keyType, boo i &= 0x3C; PrintAndLogEx(SUCCESS, " bin : %s", binstr + i); - PrintAndLogEx(INFO, "-----------------------------------------------------------------"); + PrintAndLogEx(INFO, ""); + PrintAndLogEx(INFO, "------------------------------ " _CYAN_("wiegand") " -------------------------------"); wiegand_message_t packed = initialize_message_object(top, mid, bot); HIDTryUnpack(&packed, true); } else { PrintAndLogEx(INFO, "no credential found"); } - - PrintAndLogEx(INFO, "-----------------------------------------------------------------"); + PrintAndLogEx(INFO, "----------------------------------------------------------------------"); break; } } @@ -2008,8 +2023,8 @@ static int CmdHFiClass_ReadBlock(const char *Cmd) { uint8_t blockno = 0; uint8_t keyType = 0x88; //debit key uint8_t KEY[8] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; - uint8_t keyNbr = 0; - uint8_t dataLen = 0; + uint8_t key_idx = 0; + uint8_t key_len = 0; char tempStr[50] = {0}; bool got_blockno = false; bool elite = false; @@ -2029,7 +2044,7 @@ static int CmdHFiClass_ReadBlock(const char *Cmd) { cmdp += 2; break; case 'c': - PrintAndLogEx(SUCCESS, "Using " _YELLOW_("CREDIT")); + PrintAndLogEx(SUCCESS, "Using " _YELLOW_("KC credit")); keyType = 0x18; cmdp++; break; @@ -2040,20 +2055,19 @@ static int CmdHFiClass_ReadBlock(const char *Cmd) { break; case 'k': auth = true; - dataLen = param_getstr(Cmd, cmdp + 1, tempStr, sizeof(tempStr)); - if (dataLen == 16) { - errors = param_gethex(tempStr, 0, KEY, dataLen); - } else if (dataLen == 1) { - keyNbr = param_get8(Cmd, cmdp + 1); - if (keyNbr < ICLASS_KEYS_MAX) { - PrintAndLogEx(SUCCESS, "Using key[%d] %s", keyNbr, sprint_hex(iClass_Key_Table[keyNbr], 8)); - memcpy(KEY, iClass_Key_Table[keyNbr], 8); + key_len = param_getstr(Cmd, cmdp + 1, tempStr, sizeof(tempStr)); + if (key_len == 16) { + errors = param_gethex(tempStr, 0, KEY, key_len); + } else if (key_len == 1) { + key_idx = param_get8(Cmd, cmdp + 1); + if (key_idx < ICLASS_KEYS_MAX) { + memcpy(KEY, iClass_Key_Table[key_idx], 8); } else { - PrintAndLogEx(WARNING, "\nERROR: Credit KeyNbr is invalid\n"); + PrintAndLogEx(WARNING, "\nERROR: key index is invalid\n"); errors = true; } } else { - PrintAndLogEx(WARNING, "\nERROR: Credit Key is incorrect length\n"); + PrintAndLogEx(WARNING, "\nERROR: incorrect key length\n"); errors = true; } cmdp += 2; @@ -2078,6 +2092,14 @@ static int CmdHFiClass_ReadBlock(const char *Cmd) { if (errors) return usage_hf_iclass_readblock(); + if (verbose) { + if (key_len == 1) + PrintAndLogEx(SUCCESS, "Using key[%d] %s", key_idx, sprint_hex(KEY, 8)); + else + PrintAndLogEx(SUCCESS, "Using key %s", sprint_hex(KEY, 8)); + } + + if (auth == false) PrintAndLogEx(WARNING, "warning: no authentication used with read, only a few specific blocks can be read accurately without authentication."); From a85fd925b71169b657d3cfbc8df09e58a374c56d Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Tue, 21 Jul 2020 13:01:19 +0200 Subject: [PATCH 0130/1047] colors to wiegand decode --- client/src/wiegand_formats.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/client/src/wiegand_formats.c b/client/src/wiegand_formats.c index 7c25cd7ff..e04fc29f0 100644 --- a/client/src/wiegand_formats.c +++ b/client/src/wiegand_formats.c @@ -671,21 +671,21 @@ static void HIDDisplayUnpackedCard(wiegand_card_t *card, const cardformat_t form PrintAndLogEx(SUCCESS, " Parity: %s",card->ParityValid ? "Valid" : "Invalid"); */ - char s[80] = {0}; + char s[110] = {0}; if (format.Fields.hasFacilityCode) - snprintf(s, sizeof(s), "FC: %u", card->FacilityCode); + snprintf(s, sizeof(s), "FC: " _GREEN_("%u"), card->FacilityCode); if (format.Fields.hasCardNumber) - snprintf(s + strlen(s), sizeof(s) - strlen(s), " CN: %" PRIu64, card->CardNumber); + snprintf(s + strlen(s), sizeof(s) - strlen(s), " CN: " _GREEN_("%"PRIu64), card->CardNumber); if (format.Fields.hasIssueLevel) - snprintf(s + strlen(s), sizeof(s) - strlen(s), " Issue %u", card->IssueLevel); + snprintf(s + strlen(s), sizeof(s) - strlen(s), " Issue " _GREEN_("%u"), card->IssueLevel); if (format.Fields.hasOEMCode) - snprintf(s + strlen(s), sizeof(s) - strlen(s), " OEM: %u", card->OEM); + snprintf(s + strlen(s), sizeof(s) - strlen(s), " OEM: " _GREEN_("%u"), card->OEM); if (format.Fields.hasParity) - snprintf(s + strlen(s), sizeof(s) - strlen(s), " parity: %s", card->ParityValid ? "valid" : "invalid"); + snprintf(s + strlen(s), sizeof(s) - strlen(s), " parity: %s", card->ParityValid ? _GREEN_("valid") : _RED_("invalid")); PrintAndLogEx(SUCCESS, "[%s] - %s; %s", format.Name, format.Descrp, s); } From 06c02d3b404f9a6bd46968b997ed16bf1d045338 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Tue, 21 Jul 2020 14:09:05 +0200 Subject: [PATCH 0131/1047] added iclass esave, textual --- client/src/cmdhficlass.c | 199 +++++++++++++++++++++++++++++++-------- 1 file changed, 159 insertions(+), 40 deletions(-) diff --git a/client/src/cmdhficlass.c b/client/src/cmdhficlass.c index 916ddd303..6a99c0db7 100644 --- a/client/src/cmdhficlass.c +++ b/client/src/cmdhficlass.c @@ -51,8 +51,8 @@ static uint8_t iClass_Key_Table[ICLASS_KEYS_MAX][8] = { }; static int usage_hf_iclass_sim(void) { - PrintAndLogEx(NORMAL, "Simulate a iclass legacy/standard tag\n"); - PrintAndLogEx(NORMAL, "Usage: hf iclass sim [h]
- + if (request_receive_mode()) { // send write command @@ -893,8 +893,8 @@ static bool write(uint8_t word[4], uint8_t address) { } } else { - if (DBGLEVEL >= DBG_DEBUG) - Dbprintf("error in command request"); + if (DBGLEVEL >= DBG_DEBUG) + Dbprintf("error in command request"); } return false; @@ -903,7 +903,7 @@ static bool write(uint8_t word[4], uint8_t address) { static bool write_password(uint8_t password[4], uint8_t new_password[4]) { // changes password from to - + if (request_receive_mode()) { // send write password command @@ -932,36 +932,36 @@ static bool write_password(uint8_t password[4], uint8_t new_password[4]) { } } else { - if (DBGLEVEL >= DBG_DEBUG) - Dbprintf("error in command request"); + if (DBGLEVEL >= DBG_DEBUG) + Dbprintf("error in command request"); } return false; } void em4x50_write(em4x50_data_t *etd) { - + // write operation process for EM4x50 tag, // single word is written to given address, verified by selective read operation - + bool bsuccess = false, blogin = false; uint8_t status = 0; uint8_t word[4] = {0x00, 0x00, 0x00, 0x00}; uint8_t addresses[4] = {0x00, 0x00, 0x00, 0x00}; - + init_tag(); em4x50_setup_read(); - + // set gHigh and gLow if (get_signalproperties() && find_em4x50_tag()) { - + // reorder word according to datasheet msb2lsb_word(etd->word); - + // if password is given try to login first if (etd->pwd_given) blogin = login(etd->password); - + // write word to given address if (write(etd->word, etd->address)) { @@ -982,7 +982,7 @@ void em4x50_write(em4x50_data_t *etd) { word[2] = tag.sectors[etd->address][2]; word[3] = tag.sectors[etd->address][3]; msb2lsb_word(word); - + bsuccess = true; for (int i = 0; i < 4; i++) bsuccess &= (word[i] == etd->word[i]) ? true : false; @@ -993,20 +993,20 @@ void em4x50_write(em4x50_data_t *etd) { } status = (bsuccess << 1) + blogin; - + lf_finalize(); reply_ng(CMD_ACK, status, (uint8_t *)tag.sectors, 238); } void em4x50_write_password(em4x50_data_t *etd) { - + // sinmple change of password - + bool bsuccess = false; - + init_tag(); em4x50_setup_read(); - + // set gHigh and gLow if (get_signalproperties() && find_em4x50_tag()) { @@ -1021,19 +1021,19 @@ void em4x50_write_password(em4x50_data_t *etd) { } void em4x50_wipe(em4x50_data_t *etd) { - + // set all data of EM4x50 tag to 0x0 including password - + bool bsuccess = false; uint8_t zero[4] = {0, 0, 0, 0}; uint8_t addresses[4] = {0, 0, EM4X50_NO_WORDS - 3, 1}; - + init_tag(); em4x50_setup_read(); - + // set gHigh and gLow if (get_signalproperties() && find_em4x50_tag()) { - + // login first if (login(etd->password)) { @@ -1058,9 +1058,9 @@ void em4x50_wipe(em4x50_data_t *etd) { bsuccess &= (tag.sectors[i][j] == 0) ? true : false; } - + if (bsuccess) { - + // so far everything is fine // last task: reset password if (login(etd->password)) diff --git a/armsrc/fpgaloader.c b/armsrc/fpgaloader.c index f76d1a189..002e7c157 100644 --- a/armsrc/fpgaloader.c +++ b/armsrc/fpgaloader.c @@ -152,16 +152,16 @@ void FpgaSetupSsc(uint16_t fpga_mode) { // data and frame signal is sampled on falling edge of RK AT91C_BASE_SSC->SSC_RCMR = SSC_CLOCK_MODE_SELECT(1) | SSC_CLOCK_MODE_START(1); - // 8, 16 or 32 bits per transfer, no loopback, MSB first, 1 transfer per sync + // 8, 16 or 32 bits per transfer, no loopback, MSB first, 1 transfer per sync // pulse, no output sync - if ((fpga_mode & FPGA_MAJOR_MODE_MASK) == FPGA_MAJOR_MODE_HF_READER && FpgaGetCurrent() == FPGA_BITSTREAM_HF) { - AT91C_BASE_SSC->SSC_RFMR = SSC_FRAME_MODE_BITS_IN_WORD(16) | AT91C_SSC_MSBF | SSC_FRAME_MODE_WORDS_PER_TRANSFER(0); - } else { + if ((fpga_mode & FPGA_MAJOR_MODE_MASK) == FPGA_MAJOR_MODE_HF_READER && FpgaGetCurrent() == FPGA_BITSTREAM_HF) { + AT91C_BASE_SSC->SSC_RFMR = SSC_FRAME_MODE_BITS_IN_WORD(16) | AT91C_SSC_MSBF | SSC_FRAME_MODE_WORDS_PER_TRANSFER(0); + } else { AT91C_BASE_SSC->SSC_RFMR = SSC_FRAME_MODE_BITS_IN_WORD(8) | AT91C_SSC_MSBF | SSC_FRAME_MODE_WORDS_PER_TRANSFER(0); - } + } - // TX clock comes from TK pin, no clock output, outputs change on rising edge of TK, - // TF (frame sync) is sampled on falling edge of TK, start TX on rising edge of TF + // TX clock comes from TK pin, no clock output, outputs change on rising edge of TK, + // TF (frame sync) is sampled on falling edge of TK, start TX on rising edge of TF AT91C_BASE_SSC->SSC_TCMR = SSC_CLOCK_MODE_SELECT(2) | SSC_CLOCK_MODE_START(5); // tx framing is the same as the rx framing diff --git a/armsrc/hfsnoop.c b/armsrc/hfsnoop.c index ab2517187..ec13dbc85 100644 --- a/armsrc/hfsnoop.c +++ b/armsrc/hfsnoop.c @@ -52,7 +52,7 @@ int HfSniff(uint32_t samplesToSkip, uint32_t triggersToSkip, uint16_t *len) { *len = (BigBuf_max_traceLen() & 0xFFFE); uint8_t *mem = BigBuf_malloc(*len); - uint32_t trigger_cnt = 0; + uint32_t trigger_cnt = 0; uint16_t r = 0, interval = 0; bool pressed = false; @@ -77,7 +77,7 @@ int HfSniff(uint32_t samplesToSkip, uint32_t triggersToSkip, uint16_t *len) { // 180 (0xB4) arbitary value to see if a strong RF field is near. if (r > 180) { - + if (++trigger_cnt > triggersToSkip) { break; } @@ -97,7 +97,7 @@ int HfSniff(uint32_t samplesToSkip, uint32_t triggersToSkip, uint16_t *len) { } } - optimizedSniff((uint16_t*)mem, *len); + optimizedSniff((uint16_t *)mem, *len); if (DBGLEVEL >= DBG_INFO) { Dbprintf("Trigger kicked in (%d >= 180)", r); diff --git a/armsrc/hitag2.c b/armsrc/hitag2.c index 79b09395f..eab276bad 100644 --- a/armsrc/hitag2.c +++ b/armsrc/hitag2.c @@ -1002,7 +1002,7 @@ void SniffHitag2(void) { size_t periods = 0; uint8_t periods_bytes[4]; - // int16_t checked = 0; +// int16_t checked = 0; /*bool waiting_for_first_edge = true;*/ LED_C_ON(); @@ -1015,18 +1015,18 @@ void SniffHitag2(void) { WDT_HIT(); -/* - // only every 1000th times, in order to save time when collecting samples. - if (checked == 1000) { - if (data_available()) { - checked = -1; - break; - } else { - checked = 0; - } - } - ++checked; - */ + /* + // only every 1000th times, in order to save time when collecting samples. + if (checked == 1000) { + if (data_available()) { + checked = -1; + break; + } else { + checked = 0; + } + } + ++checked; + */ // Receive frame, watch for at most T0*EOF periods diff --git a/armsrc/i2c.c b/armsrc/i2c.c index 27af218f0..1ca742893 100644 --- a/armsrc/i2c.c +++ b/armsrc/i2c.c @@ -736,7 +736,7 @@ void SmartCardRaw(uint64_t arg0, uint64_t arg1, uint8_t *data) { if ((flags & SC_LOG) == SC_LOG) set_tracing(true); - else + else set_tracing(false); if ((flags & SC_CONNECT)) { diff --git a/armsrc/iclass.c b/armsrc/iclass.c index 9721a5ec2..b543a268c 100644 --- a/armsrc/iclass.c +++ b/armsrc/iclass.c @@ -162,9 +162,9 @@ void iclass_simulate(uint8_t sim_type, uint8_t num_csns, bool send_reply, uint8_ LEDsoff(); Iso15693InitTag(); - + clear_trace(); - + // only logg if we are called from the client. set_tracing(send_reply); @@ -190,15 +190,15 @@ void iclass_simulate(uint8_t sim_type, uint8_t num_csns, bool send_reply, uint8_ // In this mode, a number of csns are within datain. We'll simulate each one, one at a time // in order to collect MAC's from the reader. This can later be used in an offlne-attack // in order to obtain the keys, as in the "dismantling iclass"-paper. - #define EPURSE_MAC_SIZE 16 +#define EPURSE_MAC_SIZE 16 int i = 0; for (; i < num_csns && i * EPURSE_MAC_SIZE + 8 < PM3_CMD_DATA_SIZE; i++) { memcpy(emulator, datain + (i * 8), 8); if (do_iclass_simulation(ICLASS_SIM_MODE_EXIT_AFTER_MAC, mac_responses + i * EPURSE_MAC_SIZE)) { - - if (dataoutlen) + + if (dataoutlen) *dataoutlen = i * EPURSE_MAC_SIZE; // Button pressed @@ -207,7 +207,7 @@ void iclass_simulate(uint8_t sim_type, uint8_t num_csns, bool send_reply, uint8_ goto out; } } - if (dataoutlen) + if (dataoutlen) *dataoutlen = i * EPURSE_MAC_SIZE; if (send_reply) @@ -227,7 +227,7 @@ void iclass_simulate(uint8_t sim_type, uint8_t num_csns, bool send_reply, uint8_ } else if (sim_type == ICLASS_SIM_MODE_CONFIG_CARD) { - // config card + // config card do_iclass_simulation(ICLASS_SIM_MODE_FULL, NULL); // swap bin @@ -252,11 +252,11 @@ void iclass_simulate(uint8_t sim_type, uint8_t num_csns, bool send_reply, uint8_ // keyroll 1 if (do_iclass_simulation(ICLASS_SIM_MODE_EXIT_AFTER_MAC, mac_responses + i * EPURSE_MAC_SIZE)) { - - if (dataoutlen) + + if (dataoutlen) *dataoutlen = i * EPURSE_MAC_SIZE * 2; - if (send_reply) + if (send_reply) reply_old(CMD_ACK, CMD_HF_ICLASS_SIMULATE, i * 2, 0, mac_responses, i * EPURSE_MAC_SIZE * 2); // Button pressed @@ -266,10 +266,10 @@ void iclass_simulate(uint8_t sim_type, uint8_t num_csns, bool send_reply, uint8_ // keyroll 2 if (do_iclass_simulation(ICLASS_SIM_MODE_EXIT_AFTER_MAC, mac_responses + (i + num_csns) * EPURSE_MAC_SIZE)) { - if (dataoutlen) + if (dataoutlen) *dataoutlen = i * EPURSE_MAC_SIZE * 2; - if (send_reply) + if (send_reply) reply_old(CMD_ACK, CMD_HF_ICLASS_SIMULATE, i * 2, 0, mac_responses, i * EPURSE_MAC_SIZE * 2); // Button pressed @@ -277,13 +277,13 @@ void iclass_simulate(uint8_t sim_type, uint8_t num_csns, bool send_reply, uint8_ } } - if (dataoutlen) + if (dataoutlen) *dataoutlen = i * EPURSE_MAC_SIZE * 2; // double the amount of collected data. if (send_reply) reply_old(CMD_ACK, CMD_HF_ICLASS_SIMULATE, i * 2, 0, mac_responses, i * EPURSE_MAC_SIZE * 2); - + } else { // We may want a mode here where we hardcode the csns to use (from proxclone). // That will speed things up a little, but not required just yet. @@ -300,7 +300,7 @@ out: /** * Simulation assumes a SECURE PAGE simulation with authentication and application areas. - * + * * * @brief Does the actual simulation * @param csn - csn to use @@ -318,7 +318,7 @@ int do_iclass_simulation(int simulationMode, uint8_t *reader_mac_buf) { State cipher_state_KD[8]; State cipher_state_KC[8]; State *cipher_state = &cipher_state_KD[0]; - + uint8_t *emulator = BigBuf_get_EM_addr(); uint8_t *csn = emulator; @@ -346,14 +346,14 @@ int do_iclass_simulation(int simulationMode, uint8_t *reader_mac_buf) { // AIA uint8_t aia_data[10] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00}; - + if (simulationMode == ICLASS_SIM_MODE_FULL) { memcpy(conf_block, emulator + (8 * 1), 8); // blk 1 memcpy(card_challenge_data, emulator + (8 * 2), 8); // e-purse, blk 2 memcpy(diversified_kd, emulator + (8 * 3), 8); // Kd, blk 3 memcpy(diversified_kc, emulator + (8 * 4), 8); // Kc, blk 4 - + // (iceman) this only works for 2KS / 16KS tags. // Use application data from block 5 memcpy(aia_data, emulator + (8 * 5), 8); @@ -378,7 +378,7 @@ int do_iclass_simulation(int simulationMode, uint8_t *reader_mac_buf) { bool personalization_mode = conf_block[7] & 0x80; uint8_t block_wr_lock = conf_block[3]; - + // chip memory may be divided in 8 pages uint8_t max_page = ((conf_block[4] & 0x10) == 0x10) ? 0 : 7; @@ -512,7 +512,7 @@ int do_iclass_simulation(int simulationMode, uint8_t *reader_mac_buf) { modulated_response_size = 0; trace_data = NULL; trace_data_size = 0; - + uint32_t reader_eof_time = 0; len = GetIso15693CommandFromReader(receivedCmd, MAX_FRAME_SIZE, &reader_eof_time); if (len < 0) { @@ -520,7 +520,7 @@ int do_iclass_simulation(int simulationMode, uint8_t *reader_mac_buf) { exit_loop = true; continue; } - + // extra response data cmd = receivedCmd[0] & 0xF; options = (receivedCmd[0] >> 4) & 0xFF; @@ -532,7 +532,7 @@ int do_iclass_simulation(int simulationMode, uint8_t *reader_mac_buf) { modulated_response_size = resp_sof_len; chip_state = ACTIVATED; goto send; - + } else if (cmd == ICLASS_CMD_READ_OR_IDENTIFY && len == 1) { // 0x0C // Reader asks for anti collision CSN if (chip_state == SELECTED || chip_state == ACTIVATED) { @@ -576,7 +576,7 @@ int do_iclass_simulation(int simulationMode, uint8_t *reader_mac_buf) { } if (simulationMode == ICLASS_SIM_MODE_EXIT_AFTER_MAC) { // provide defaults for blocks 0 ... 5 - + // block0,1,2,5 is always readable. switch (block) { case 0: { // csn (0c 00) @@ -646,7 +646,7 @@ int do_iclass_simulation(int simulationMode, uint8_t *reader_mac_buf) { } // debit key - if (receivedCmd[0] == 0x88 ){ + if (receivedCmd[0] == 0x88) { cipher_state = &cipher_state_KD[current_page]; diversified_key = diversified_kd; using_kc = false; @@ -662,7 +662,7 @@ int do_iclass_simulation(int simulationMode, uint8_t *reader_mac_buf) { trace_data_size = sizeof(card_challenge_data); goto send; - } else if (cmd == ICLASS_CMD_CHECK && len == 9) { // 0x05 + } else if (cmd == ICLASS_CMD_CHECK && len == 9) { // 0x05 // Reader random and reader MAC!!! if (chip_state != SELECTED) { @@ -677,14 +677,14 @@ int do_iclass_simulation(int simulationMode, uint8_t *reader_mac_buf) { opt_doReaderMAC_2(*cipher_state, receivedCmd + 1, _mac, diversified_key); if (_mac[0] != receivedCmd[5] || _mac[1] != receivedCmd[6] || _mac[2] != receivedCmd[7] || _mac[3] != receivedCmd[8]) { - Dbprintf("reader auth " _RED_("failed")); + Dbprintf("reader auth " _RED_("failed")); Dbprintf("hf iclass lookup u %02x%02x%02x%02x%02x%02x%02x%02x p %02x%02x%02x%02x%02x%02x%02x%02x m %02x%02x%02x%02x%02x%02x%02x%02x f iclass_default_keys.dic", - csn_data[0],csn_data[1],csn_data[2],csn_data[3],csn_data[4],csn_data[5],csn_data[6],csn_data[7], - card_challenge_data[0],card_challenge_data[1],card_challenge_data[2],card_challenge_data[3], - card_challenge_data[4],card_challenge_data[5],card_challenge_data[6],card_challenge_data[7], - receivedCmd[1],receivedCmd[2],receivedCmd[3],receivedCmd[4], - receivedCmd[5],receivedCmd[6],receivedCmd[7],receivedCmd[8] - ); + csn_data[0], csn_data[1], csn_data[2], csn_data[3], csn_data[4], csn_data[5], csn_data[6], csn_data[7], + card_challenge_data[0], card_challenge_data[1], card_challenge_data[2], card_challenge_data[3], + card_challenge_data[4], card_challenge_data[5], card_challenge_data[6], card_challenge_data[7], + receivedCmd[1], receivedCmd[2], receivedCmd[3], receivedCmd[4], + receivedCmd[5], receivedCmd[6], receivedCmd[7], receivedCmd[8] + ); goto send; } @@ -760,13 +760,13 @@ int do_iclass_simulation(int simulationMode, uint8_t *reader_mac_buf) { // is chip in ReadOnly (RO) if ((block_wr_lock & 0x80) == 0) goto send; - if ( block == 12 && (block_wr_lock & 0x40) == 0) goto send; - if ( block == 11 && (block_wr_lock & 0x20) == 0) goto send; - if ( block == 10 && (block_wr_lock & 0x10) == 0) goto send; - if ( block == 9 && (block_wr_lock & 0x08) == 0) goto send; - if ( block == 8 && (block_wr_lock & 0x04) == 0) goto send; - if ( block == 7 && (block_wr_lock & 0x02) == 0) goto send; - if ( block == 6 && (block_wr_lock & 0x01) == 0) goto send; + if (block == 12 && (block_wr_lock & 0x40) == 0) goto send; + if (block == 11 && (block_wr_lock & 0x20) == 0) goto send; + if (block == 10 && (block_wr_lock & 0x10) == 0) goto send; + if (block == 9 && (block_wr_lock & 0x08) == 0) goto send; + if (block == 8 && (block_wr_lock & 0x04) == 0) goto send; + if (block == 7 && (block_wr_lock & 0x02) == 0) goto send; + if (block == 6 && (block_wr_lock & 0x01) == 0) goto send; if (block == 2) { // update e-purse memcpy(card_challenge_data, receivedCmd + 2, 8); @@ -777,7 +777,7 @@ int do_iclass_simulation(int simulationMode, uint8_t *reader_mac_buf) { cipher_state_KC[current_page] = opt_doTagMAC_1(card_challenge_data, diversified_kc); if (simulationMode == ICLASS_SIM_MODE_FULL) { memcpy(emulator + (current_page * page_size) + (8 * 2), card_challenge_data, 8); - } + } } else if (block == 3) { // update Kd for (int i = 0; i < 8; i++) { if (personalization_mode) { @@ -830,7 +830,7 @@ int do_iclass_simulation(int simulationMode, uint8_t *reader_mac_buf) { // if on 2k, always ignore 3msb, & 0x1F) uint8_t page = receivedCmd[1] & 0x1F; - if ( page > max_page) { + if (page > max_page) { goto send; } @@ -844,7 +844,7 @@ int do_iclass_simulation(int simulationMode, uint8_t *reader_mac_buf) { personalization_mode = data_generic_trace[7] & 0x80; block_wr_lock = data_generic_trace[3]; - + AddCrc(data_generic_trace, 8); trace_data = data_generic_trace; @@ -856,8 +856,8 @@ int do_iclass_simulation(int simulationMode, uint8_t *reader_mac_buf) { modulated_response_size = ts->max; } goto send; - - } else if(cmd == ICLASS_CMD_DETECT) { // 0x0F + + } else if (cmd == ICLASS_CMD_DETECT) { // 0x0F // not supported yet, ignore } else if (cmd == 0x26 && len == 5) { // standard ISO15693 INVENTORY command. Ignore. @@ -876,7 +876,7 @@ send: TransmitTo15693Reader(modulated_response, modulated_response_size, &response_time, 0, false); LogTrace_ISO15693(trace_data, trace_data_size, response_time * 32, (response_time * 32) + (modulated_response_size * 32 * 64), NULL, false); } - + if (chip_state == HALTED) { uint32_t wait_time = GetCountSspClk() + ICLASS_READER_TIMEOUT_ACTALL; while (GetCountSspClk() < wait_time) {}; @@ -927,8 +927,8 @@ int do_iclass_simulation_nonsec(void) { // AIA uint8_t aia_data[10] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00}; - - memcpy(conf_block, emulator + (8 * 1), 8); + + memcpy(conf_block, emulator + (8 * 1), 8); memcpy(aia_data, emulator + (8 * 2), 8); AddCrc(conf_block, 8); @@ -1025,7 +1025,7 @@ int do_iclass_simulation_nonsec(void) { bool exit_loop = false; while (exit_loop == false) { WDT_HIT(); - + uint32_t reader_eof_time = 0; len = GetIso15693CommandFromReader(receivedCmd, MAX_FRAME_SIZE, &reader_eof_time); if (len < 0) { @@ -1048,13 +1048,13 @@ int do_iclass_simulation_nonsec(void) { if (cmd == ICLASS_CMD_ACTALL && len == 1) { // 0x0A // Reader in anti collision phase - if (chip_state != HALTED) { + if (chip_state != HALTED) { modulated_response = resp_sof; modulated_response_size = resp_sof_len; chip_state = ACTIVATED; } goto send; - + } else if (cmd == ICLASS_CMD_READ_OR_IDENTIFY && len == 1) { // 0x0C // Reader asks for anti collision CSN if (chip_state == SELECTED || chip_state == ACTIVATED) { @@ -1135,7 +1135,7 @@ int do_iclass_simulation_nonsec(void) { } else if (cmd == ICLASS_CMD_READCHECK) { // 0x88 goto send; - } else if (cmd == ICLASS_CMD_CHECK && len == 9) { // 0x05 + } else if (cmd == ICLASS_CMD_CHECK && len == 9) { // 0x05 goto send; } else if (cmd == ICLASS_CMD_HALT && options == 0 && len == 1) { @@ -1210,7 +1210,7 @@ int do_iclass_simulation_nonsec(void) { modulated_response_size = ts->max; } goto send; - + // } else if(cmd == ICLASS_CMD_DETECT) { // 0x0F } else if (cmd == 0x26 && len == 5) { // standard ISO15693 INVENTORY command. Ignore. @@ -1249,15 +1249,15 @@ static void iclass_send_as_reader(uint8_t *frame, int len, uint32_t *start_time, LogTrace_ISO15693(frame, len, (*start_time * 4), (*end_time * 4), NULL, true); } -static bool iclass_send_cmd_with_retries(uint8_t* cmd, size_t cmdsize, uint8_t* resp, size_t max_resp_size, - uint8_t expected_size, uint8_t tries, uint32_t *start_time, - uint16_t timeout, uint32_t *eof_time) { +static bool iclass_send_cmd_with_retries(uint8_t *cmd, size_t cmdsize, uint8_t *resp, size_t max_resp_size, + uint8_t expected_size, uint8_t tries, uint32_t *start_time, + uint16_t timeout, uint32_t *eof_time) { while (tries-- > 0) { iclass_send_as_reader(cmd, cmdsize, start_time, eof_time); - + if (resp == NULL) { - return true; + return true; } if (expected_size == GetIso15693AnswerFromTag(resp, max_resp_size, timeout, eof_time)) { @@ -1285,7 +1285,7 @@ static bool select_iclass_tag_ex(uint8_t *card_data, bool use_credit_key, uint32 uint8_t resp[ICLASS_BUFFER_SIZE] = {0}; picopass_hdr *hdr = (picopass_hdr *)card_data; - + // Bit 4: K.If this bit equals to one, the READCHECK will use the Credit Key (Kc); if equals to zero, Debit Key (Kd) will be used // bit 7: parity. if (use_credit_key) @@ -1297,14 +1297,14 @@ static bool select_iclass_tag_ex(uint8_t *card_data, bool use_credit_key, uint32 int len = GetIso15693AnswerFromTag(resp, sizeof(resp), ICLASS_READER_TIMEOUT_ACTALL, eof_time); if (len < 0) return false; - + // send Identify start_time = *eof_time + DELAY_ICLASS_VICC_TO_VCD_READER; iclass_send_as_reader(identify, 1, &start_time, eof_time); // expect a 10-byte response here, 8 byte anticollision-CSN and 2 byte CRC len = GetIso15693AnswerFromTag(resp, sizeof(resp), ICLASS_READER_TIMEOUT_OTHERS, eof_time); - if (len != 10) + if (len != 10) return false; // copy the Anti-collision CSN to our select-packet @@ -1325,17 +1325,17 @@ static bool select_iclass_tag_ex(uint8_t *card_data, bool use_credit_key, uint32 // card selected, now read config (block1) (only 8 bytes no CRC) start_time = *eof_time + DELAY_ICLASS_VICC_TO_VCD_READER; iclass_send_as_reader(read_conf, sizeof(read_conf), &start_time, eof_time); - + // expect a 8-byte response here len = GetIso15693AnswerFromTag(resp, sizeof(resp), ICLASS_READER_TIMEOUT_OTHERS, eof_time); if (len != 10) return false; // save CONF - memcpy( (uint8_t*)&hdr->conf, resp, sizeof(hdr->conf)); - - if (status) - *status |= (FLAG_ICLASS_CSN | FLAG_ICLASS_CONF); + memcpy((uint8_t *)&hdr->conf, resp, sizeof(hdr->conf)); + + if (status) + *status |= (FLAG_ICLASS_CSN | FLAG_ICLASS_CONF); uint8_t pagemap = get_pagemap(hdr); if (pagemap != PICOPASS_NON_SECURE_PAGEMODE) { @@ -1343,12 +1343,12 @@ static bool select_iclass_tag_ex(uint8_t *card_data, bool use_credit_key, uint32 // read App Issuer Area block 5 start_time = *eof_time + DELAY_ICLASS_VICC_TO_VCD_READER; iclass_send_as_reader(read_aia, sizeof(read_aia), &start_time, eof_time); - - // expect a 10-byte response here + + // expect a 10-byte response here len = GetIso15693AnswerFromTag(resp, sizeof(resp), ICLASS_READER_TIMEOUT_OTHERS, eof_time); if (len != 10) return false; - + if (status) { *status |= FLAG_ICLASS_AIA; memcpy(hdr->app_issuer_area, resp, sizeof(hdr->app_issuer_area)); @@ -1357,7 +1357,7 @@ static bool select_iclass_tag_ex(uint8_t *card_data, bool use_credit_key, uint32 // card selected, now read e-purse (cc) (block2) (only 8 bytes no CRC) start_time = *eof_time + DELAY_ICLASS_VICC_TO_VCD_READER; iclass_send_as_reader(read_check_cc, sizeof(read_check_cc), &start_time, eof_time); - + // expect a 8-byte response here len = GetIso15693AnswerFromTag(resp, sizeof(resp), ICLASS_READER_TIMEOUT_OTHERS, eof_time); if (len != 8) @@ -1365,7 +1365,7 @@ static bool select_iclass_tag_ex(uint8_t *card_data, bool use_credit_key, uint32 memcpy(hdr->epurse, resp, sizeof(hdr->epurse)); *status |= FLAG_ICLASS_CC; - + } else { // read App Issuer Area block 2 @@ -1375,18 +1375,18 @@ static bool select_iclass_tag_ex(uint8_t *card_data, bool use_credit_key, uint32 start_time = *eof_time + DELAY_ICLASS_VICC_TO_VCD_READER; iclass_send_as_reader(read_aia, sizeof(read_aia), &start_time, eof_time); - + // expect a 10-byte response here len = GetIso15693AnswerFromTag(resp, sizeof(resp), ICLASS_READER_TIMEOUT_OTHERS, eof_time); if (len != 10) return false; - if (status) { + if (status) { *status |= FLAG_ICLASS_AIA; memcpy(card_data + (8 * 2), resp, 8); } - } - + } + return true; } @@ -1424,8 +1424,8 @@ void ReaderIClass(uint8_t flags) { return; } - - // Page mapping for secure mode + + // Page mapping for secure mode // 0 : CSN // 1 : Configuration // 2 : e-purse @@ -1433,22 +1433,22 @@ void ReaderIClass(uint8_t flags) { // 4 : kc / credit / aa1 (write-only) // 5 : AIA, Application issuer area // - // Page mapping for non secure mode + // Page mapping for non secure mode // 0 : CSN // 1 : Configuration // 2 : AIA, Application issuer area // Return to client, e 6 * 8 bytes of data. // with 0xFF:s in block 3 and 4. - + LED_B_ON(); reply_mix(CMD_ACK, result_status, 0, 0, card_data, sizeof(card_data)); - + //Send back to client, but don't bother if we already sent this - // only useful if looping in arm (not try_once && not abort_after_read) /* if (memcmp(last_csn, card_data, 8) != 0) { - + reply_mix(CMD_ACK, result_status, 0, 0, card_data, sizeof(card_data)); if (flag_readonce) { LED_B_OFF(); @@ -1465,12 +1465,12 @@ void ReaderIClass(uint8_t flags) { // reply_mix(CMD_ACK, result_status, 0, 0, card_data, 0); // } - switch_off(); + switch_off(); } // turn off afterwards void ReaderIClass_Replay(uint8_t *rnr, uint8_t *mac) { - + BigBuf_free(); uint8_t check[] = { ICLASS_CMD_CHECK, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; @@ -1488,11 +1488,11 @@ void ReaderIClass_Replay(uint8_t *rnr, uint8_t *mac) { uint32_t start_time = 0; uint32_t eof_time = 0; - + Iso15693InitReader(); picopass_hdr hdr = {0}; - bool res = select_iclass_tag( (uint8_t *)&hdr, false, &eof_time); + bool res = select_iclass_tag((uint8_t *)&hdr, false, &eof_time); if (res == false) { reply_ng(CMD_HF_ICLASS_REPLAY, PM3_ETIMEOUT, NULL, 0); switch_off(); @@ -1513,22 +1513,22 @@ void ReaderIClass_Replay(uint8_t *rnr, uint8_t *mac) { uint8_t mem = hdr.conf.mem_config; uint8_t cardsize = ((mem & 0x80) == 0x80) ? 255 : 32; -/* - static struct memory_t { - int k16; - int book; - int k2; - int lockauth; - int keyaccess; - } memory; + /* + static struct memory_t { + int k16; + int book; + int k2; + int lockauth; + int keyaccess; + } memory; -// memory.k16 = ((mem & 0x80) == 0x80); -// memory.book = ((mem & 0x20) == 0x20); -// memory.k2 = ((mem & 0x08) == 0x08); -// memory.lockauth = ((mem & 0x02) == 0x02); -// memory.keyaccess = ((mem & 0x01) == 0x01); -// uint8_t cardsize = memory.k16 ? 255 : 32; -*/ + // memory.k16 = ((mem & 0x80) == 0x80); + // memory.book = ((mem & 0x20) == 0x20); + // memory.k2 = ((mem & 0x08) == 0x08); + // memory.lockauth = ((mem & 0x02) == 0x02); + // memory.keyaccess = ((mem & 0x01) == 0x01); + // uint8_t cardsize = memory.k16 ? 255 : 32; + */ bool dumpsuccess = true; @@ -1576,11 +1576,11 @@ bool authenticate_iclass_tag(iclass_auth_req_t *payload, picopass_hdr *hdr, uint uint8_t mac[4] = {0}; uint8_t resp_auth[4] = {0}; uint8_t ccnr[12] = {0}; - + uint8_t *pmac = mac; if (mac_out) pmac = mac_out; - + memcpy(ccnr, hdr->epurse, sizeof(hdr->epurse)); if (payload->use_raw) @@ -1639,14 +1639,14 @@ void iClass_Authentication_fast(uint64_t arg0, uint64_t arg1, uint8_t *datain) { // fresh start switch_off(); SpinDelay(20); - + Iso15693InitReader(); uint32_t start_time = 0, eof_time = 0; if (select_iclass_tag(card_data, use_credit_key, &eof_time) == false) goto out; - + start_time = eof_time + DELAY_ICLASS_VICC_TO_VCD_READER; // since select_iclass_tag call sends s readcheck, we start with sending first response. @@ -1715,13 +1715,13 @@ void iClass_ReadBlock(uint8_t *msg) { uint8_t cmd_read[] = {ICLASS_CMD_READ_OR_IDENTIFY, payload->blockno, 0x00, 0x00}; AddCrc(cmd_read + 1, 1); - + Iso15693InitReader(); - + // select tag. uint32_t eof_time = 0; picopass_hdr hdr = {0}; - bool res = select_iclass_tag( (uint8_t *)&hdr, payload->use_credit_key, &eof_time); + bool res = select_iclass_tag((uint8_t *)&hdr, payload->use_credit_key, &eof_time); if (res == false) { if (payload->send_reply) { response.isOK = res; @@ -1731,10 +1731,10 @@ void iClass_ReadBlock(uint8_t *msg) { } uint32_t start_time = eof_time + DELAY_ICLASS_VICC_TO_VCD_READER; - - // authenticate + + // authenticate if (payload->do_auth) { - + res = authenticate_iclass_tag(payload, &hdr, &start_time, &eof_time, NULL); if (res == false) { if (payload->send_reply) { @@ -1751,8 +1751,8 @@ void iClass_ReadBlock(uint8_t *msg) { uint8_t resp[10]; res = iclass_send_cmd_with_retries(cmd_read, sizeof(cmd_read), resp, sizeof(resp), 10, 3, &start_time, ICLASS_READER_TIMEOUT_OTHERS, &eof_time); if (res) { - memcpy(response.data, resp, sizeof(response.data)); - if (payload->send_reply) { + memcpy(response.data, resp, sizeof(response.data)); + if (payload->send_reply) { reply_ng(CMD_HF_ICLASS_READBL, PM3_SUCCESS, (uint8_t *)&response, sizeof(response)); } } else { @@ -1763,16 +1763,16 @@ void iClass_ReadBlock(uint8_t *msg) { } out: - switch_off(); + switch_off(); } - + // Dump command seems to dump a block related portion of card memory. // I suppose it will need to do an authentatication to AA1, read its blocks by calling this. // then authenticate AA2, and read those blocks by calling this. // By the looks at it only 2K cards is supported, or first page dumps on larger cards. -// turn off afterwards +// turn off afterwards void iClass_Dump(uint8_t *msg) { - + BigBuf_free(); iclass_dump_req_t *cmd = (iclass_dump_req_t *)msg; @@ -1790,11 +1790,11 @@ void iClass_Dump(uint8_t *msg) { memset(dataout, 0xFF, ICLASS_16KS_SIZE); Iso15693InitReader(); - + // select tag. uint32_t eof_time = 0; picopass_hdr hdr = {0}; - bool res = select_iclass_tag( (uint8_t *)&hdr, req->use_credit_key, &eof_time); + bool res = select_iclass_tag((uint8_t *)&hdr, req->use_credit_key, &eof_time); if (res == false) { if (req->send_reply) { reply_ng(CMD_HF_ICLASS_DUMP, PM3_ETIMEOUT, NULL, 0); @@ -1802,10 +1802,10 @@ void iClass_Dump(uint8_t *msg) { switch_off(); return; } - + uint32_t start_time = eof_time + DELAY_ICLASS_VICC_TO_VCD_READER; - - // authenticate + + // authenticate if (req->do_auth) { res = authenticate_iclass_tag(req, &hdr, &start_time, &eof_time, NULL); if (res == false) { @@ -1838,7 +1838,7 @@ void iClass_Dump(uint8_t *msg) { } } - switch_off(); + switch_off(); // copy diversified key back. if (req->do_auth) { @@ -1870,27 +1870,27 @@ static bool iclass_writeblock_ext(uint8_t blockno, uint8_t *data) { memcpy(write + 2, data, 12); // data + mac AddCrc(write + 1, 13); - uint8_t resp[10] = {0}; + uint8_t resp[10] = {0}; uint32_t eof_time = 0, start_time = 0; bool isOK = iclass_send_cmd_with_retries(write, sizeof(write), resp, sizeof(resp), 10, 3, &start_time, ICLASS_READER_TIMEOUT_UPDATE, &eof_time); if (isOK == false) { return false; } - + uint8_t all_ff[8] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; if (blockno == 2) { // check response. e-purse update swaps first and second half - if (memcmp(data + 4, resp, 4) || memcmp(data, resp + 4, 4)) { + if (memcmp(data + 4, resp, 4) || memcmp(data, resp + 4, 4)) { return false; } } else if (blockno == 3 || blockno == 4) { // check response. Key updates always return 0xffffffffffffffff - if (memcmp(all_ff, resp, 8)) { + if (memcmp(all_ff, resp, 8)) { return false; } } else { // check response. All other updates return unchanged data - if (memcmp(data, resp, 8)) { + if (memcmp(data, resp, 8)) { return false; } } @@ -1900,19 +1900,19 @@ static bool iclass_writeblock_ext(uint8_t blockno, uint8_t *data) { // turn off afterwards void iClass_WriteBlock(uint8_t *msg) { - + LED_A_ON(); - + iclass_writeblock_req_t *payload = (iclass_writeblock_req_t *)msg; uint8_t write[16] = { 0x80 | ICLASS_CMD_UPDATE, payload->req.blockno }; - + Iso15693InitReader(); - + // select tag. uint32_t eof_time = 0; picopass_hdr hdr = {0}; - bool res = select_iclass_tag( (uint8_t *)&hdr, payload->req.use_credit_key, &eof_time); + bool res = select_iclass_tag((uint8_t *)&hdr, payload->req.use_credit_key, &eof_time); if (res == false) { goto out; } @@ -1921,7 +1921,7 @@ void iClass_WriteBlock(uint8_t *msg) { uint8_t mac[4] = {0}; - // authenticate + // authenticate if (payload->req.do_auth) { res = authenticate_iclass_tag(&payload->req, &hdr, &start_time, &eof_time, mac); @@ -1939,13 +1939,13 @@ void iClass_WriteBlock(uint8_t *msg) { doMAC_N(wb, sizeof(wb), hdr.key_c, mac); else doMAC_N(wb, sizeof(wb), hdr.key_d, mac); - + memcpy(write + 2, payload->data, 8); // data memcpy(write + 10, mac, sizeof(mac)); // mac AddCrc(write + 1, 13); start_time = eof_time + DELAY_ICLASS_VICC_TO_VCD_READER; - + uint8_t resp[10] = {0}; res = iclass_send_cmd_with_retries(write, sizeof(write), resp, sizeof(resp), 10, 3, &start_time, ICLASS_READER_TIMEOUT_UPDATE, &eof_time); if (res == false) { @@ -1956,19 +1956,19 @@ void iClass_WriteBlock(uint8_t *msg) { uint8_t all_ff[8] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; if (payload->req.blockno == 2) { // check response. e-purse update swaps first and second half - if (memcmp(payload->data + 4, resp, 4) || memcmp(payload->data, resp + 4, 4)) { + if (memcmp(payload->data + 4, resp, 4) || memcmp(payload->data, resp + 4, 4)) { res = false; goto out; } } else if (payload->req.blockno == 3 || payload->req.blockno == 4) { // check response. Key updates always return 0xffffffffffffffff - if (memcmp(all_ff, resp, 8)) { + if (memcmp(all_ff, resp, 8)) { res = false; goto out; } } else { // check response. All other updates return unchanged data - if (memcmp(payload->data, resp, 8)) { + if (memcmp(payload->data, resp, 8)) { res = false; goto out; } @@ -1986,10 +1986,10 @@ void iClass_Clone(uint8_t startblock, uint8_t endblock, uint8_t *data) { } void iClass_Restore(uint8_t *msg) { - + iclass_restore_req_t *cmd = (iclass_restore_req_t *)msg; // iclass_auth_req_t *req = &cmd->req; - + LED_A_ON(); uint16_t written = 0; uint16_t total_blocks = (cmd->end_block - cmd->start_block) + 1; diff --git a/armsrc/iso14443a.c b/armsrc/iso14443a.c index ce5d1bd0c..d5417f108 100644 --- a/armsrc/iso14443a.c +++ b/armsrc/iso14443a.c @@ -729,7 +729,7 @@ void RAMFUNC SniffIso14443a(uint8_t param) { static void CodeIso14443aAsTagPar(const uint8_t *cmd, uint16_t len, uint8_t *par, bool collision) { tosend_reset(); - + tosend_t *ts = get_tosend(); // Correction bit, might be removed when not needed @@ -798,7 +798,7 @@ static void Code4bitAnswerAsTag(uint8_t cmd) { uint8_t b = cmd; tosend_reset(); - + tosend_t *ts = get_tosend(); // Correction bit, might be removed when not needed @@ -888,7 +888,7 @@ bool prepare_tag_modulation(tag_response_info_t *response_info, size_t max_buffe CodeIso14443aAsTag(response_info->response, response_info->response_n); tosend_t *ts = get_tosend(); - + // Make sure we do not exceed the free buffer space if (ts->max > max_buffer_size) { Dbprintf("ToSend buffer, Out-of-bound, when modulating bits for tag answer:"); @@ -908,7 +908,7 @@ bool prepare_tag_modulation(tag_response_info_t *response_info, size_t max_buffe bool prepare_allocated_tag_modulation(tag_response_info_t *response_info, uint8_t **buffer, size_t *max_buffer_size) { tosend_t *ts = get_tosend(); - + // Retrieve and store the current buffer index response_info->modulation = *buffer; @@ -1977,7 +1977,7 @@ int EmSendCmd14443aRaw(uint8_t *resp, uint16_t respLen) { int EmSend4bit(uint8_t resp) { Code4bitAnswerAsTag(resp); - tosend_t *ts = get_tosend(); + tosend_t *ts = get_tosend(); int res = EmSendCmd14443aRaw(ts->buf, ts->max); // do the tracing for the previous reader request and this tag answer: uint8_t par[1] = {0x00}; @@ -1999,7 +1999,7 @@ int EmSendCmdPar(uint8_t *resp, uint16_t respLen, uint8_t *par) { } int EmSendCmdParEx(uint8_t *resp, uint16_t respLen, uint8_t *par, bool collision) { CodeIso14443aAsTagPar(resp, respLen, par, collision); - tosend_t *ts = get_tosend(); + tosend_t *ts = get_tosend(); int res = EmSendCmd14443aRaw(ts->buf, ts->max); // do the tracing for the previous reader request and this tag answer: @@ -2162,7 +2162,7 @@ void ReaderTransmitBitsPar(uint8_t *frame, uint16_t bits, uint8_t *par, uint32_t CodeIso14443aBitsAsReaderPar(frame, bits, par); // Send command to tag - tosend_t *ts = get_tosend(); + tosend_t *ts = get_tosend(); TransmitFor14443a(ts->buf, ts->max, timing); if (g_trigger) LED_A_ON(); diff --git a/armsrc/iso14443b.c b/armsrc/iso14443b.c index e26ebb017..b75834a5d 100644 --- a/armsrc/iso14443b.c +++ b/armsrc/iso14443b.c @@ -187,12 +187,12 @@ static void CodeIso14443bAsTag(const uint8_t *cmd, int len) { // Send EOF. // 10-11 ETU * 4 sample rate = ZEROS - for(i = 0; i < 10; i++) { + for (i = 0; i < 10; i++) { SEND4STUFFBIT(0); } - + // why this? - for(i = 0; i < 2; i++) { + for (i = 0; i < 2; i++) { SEND4STUFFBIT(1); } @@ -448,7 +448,7 @@ static int GetIso14443bCommandFromReader(uint8_t *received, uint16_t *len) { while (BUTTON_PRESS() == false) { WDT_HIT(); - if(AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_RXRDY)) { + if (AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_RXRDY)) { uint8_t b = (uint8_t)AT91C_BASE_SSC->SSC_RHR; for (uint8_t mask = 0x80; mask != 0x00; mask >>= 1) { if (Handle14443bReaderUartBit(b & mask)) { @@ -501,11 +501,11 @@ void SimulateIso14443bTag(uint32_t pupi) { // supports only 106kBit/s in both directions, max frame size = 32Bytes, // supports ISO14443-4, FWI=8 (77ms), NAD supported, CID not supported: uint8_t respATQB[] = { - 0x50, - 0x82, 0x0d, 0xe1, 0x74, - 0x20, 0x38, 0x19, - 0x22, 0x00, 0x21, 0x85, - 0x5e, 0xd7 + 0x50, + 0x82, 0x0d, 0xe1, 0x74, + 0x20, 0x38, 0x19, + 0x22, 0x00, 0x21, 0x85, + 0x5e, 0xd7 }; // response to HLTB and ATTRIB @@ -516,7 +516,7 @@ void SimulateIso14443bTag(uint32_t pupi) { num_to_bytes(pupi, 4, respATQB + 1); AddCrc14B(respATQB, 12); } - + // setup device. FpgaDownloadAndGo(FPGA_BITSTREAM_HF); @@ -537,7 +537,7 @@ void SimulateIso14443bTag(uint32_t pupi) { int vHf = 0; // in mV tosend_t *ts = get_tosend(); - + uint8_t *receivedCmd = BigBuf_malloc(MAX_FRAME_SIZE); // prepare "ATQB" tag answer (encoded): @@ -556,7 +556,7 @@ void SimulateIso14443bTag(uint32_t pupi) { // Simulation loop while (BUTTON_PRESS() == false) { WDT_HIT(); - + //iceman: limit with 2000 times.. if (data_available()) { break; @@ -588,7 +588,7 @@ void SimulateIso14443bTag(uint32_t pupi) { // WUP in HALTED state if (len == 5) { if ((receivedCmd[0] == ISO14443B_REQB && (receivedCmd[2] & 0x8) == 0x8 && cardSTATE == SIM_HALTED) || - receivedCmd[0] == ISO14443B_REQB) { + receivedCmd[0] == ISO14443B_REQB) { LogTrace(receivedCmd, len, 0, 0, NULL, true); cardSTATE = SIM_SELECTING; } @@ -668,7 +668,7 @@ void SimulateIso14443bTag(uint32_t pupi) { if (DBGLEVEL >= DBG_DEBUG) Dbprintf("Emulator stopped. Trace length: %d ", BigBuf_get_traceLen()); - + switch_off(); //simulate } @@ -733,7 +733,7 @@ static RAMFUNC int Handle14443bTagSamplesDemod(uint16_t amplitude) { Demod.posCount = 0; // start of SOF sequence } else { // maximum length of TR1 = 200 1/fs - if (Demod.posCount > 200 / 4){ + if (Demod.posCount > 200 / 4) { Demod.state = DEMOD_UNSYNCD; } } @@ -851,9 +851,9 @@ static int GetTagSamplesFor14443bDemod(int timeout) { // wait for last transfer to complete while (!(AT91C_BASE_SSC->SSC_SR & AT91C_SSC_TXEMPTY)) - // Setup and start DMA. - FpgaSetupSsc(FPGA_MAJOR_MODE_HF_READER); - + // Setup and start DMA. + FpgaSetupSsc(FPGA_MAJOR_MODE_HF_READER); + // The DMA buffer, used to stream samples from the FPGA dmabuf16_t *dma = get_dma16(); if (FpgaSetupSscDma((uint8_t *) dma->buf, DMA_BUFFER_SIZE) == false) { @@ -870,8 +870,8 @@ static int GetTagSamplesFor14443bDemod(int timeout) { // uint32_t dma_start_time; uint16_t *upTo = dma->buf; - for(;;) { - uint16_t behindBy = ((uint16_t*)AT91C_BASE_PDC_SSC->PDC_RPR - upTo) & (DMA_BUFFER_SIZE - 1); + for (;;) { + uint16_t behindBy = ((uint16_t *)AT91C_BASE_PDC_SSC->PDC_RPR - upTo) & (DMA_BUFFER_SIZE - 1); if (behindBy == 0) continue; @@ -884,7 +884,7 @@ static int GetTagSamplesFor14443bDemod(int timeout) { */ volatile uint16_t tagdata = *upTo++; - + if (upTo >= dma->buf + DMA_BUFFER_SIZE) { // we have read all of the DMA buffer content. upTo = dma->buf; // start reading the circular buffer from the beginning if (behindBy > (9 * DMA_BUFFER_SIZE / 10)) { @@ -893,7 +893,7 @@ static int GetTagSamplesFor14443bDemod(int timeout) { break; } } - + if (AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_ENDRX)) { // DMA Counter Register had reached 0, already rotated. AT91C_BASE_PDC_SSC->PDC_RNPR = (uint32_t) dma->buf; // refresh the DMA Next Buffer and AT91C_BASE_PDC_SSC->PDC_RNCR = DMA_BUFFER_SIZE; // DMA Next Counter registers @@ -904,7 +904,7 @@ static int GetTagSamplesFor14443bDemod(int timeout) { break; } - if(samples > timeout && Demod.state < DEMOD_PHASE_REF_TRAINING) { + if (samples > timeout && Demod.state < DEMOD_PHASE_REF_TRAINING) { ret = -1; LED_C_OFF(); break; @@ -918,7 +918,7 @@ static int GetTagSamplesFor14443bDemod(int timeout) { } if (Demod.len > 0) { - LogTrace(Demod.output, Demod.len, 0, 0, NULL, false); + LogTrace(Demod.output, Demod.len, 0, 0, NULL, false); } return ret; @@ -933,23 +933,23 @@ static void TransmitFor14443b_AsReader(void) { LED_B_ON(); tosend_t *ts = get_tosend(); - + for (int c = 0; c < ts->max; c++) { uint8_t data = ts->buf[c]; for (int i = 0; i < 8; i++) { uint16_t send_word = (data & 0x80) ? 0x0000 : 0xffff; - + while (!(AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_TXRDY))) ; - - AT91C_BASE_SSC->SSC_THR = send_word; + + AT91C_BASE_SSC->SSC_THR = send_word; while (!(AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_TXRDY))) ; AT91C_BASE_SSC->SSC_THR = send_word; data <<= 1; } - WDT_HIT(); + WDT_HIT(); } LED_B_OFF(); } @@ -978,7 +978,7 @@ static void CodeIso14443bAsReader(const uint8_t *cmd, int len) { // Send SOF // 10-11 ETUs of ZERO - for (int i = 0; i < 10; i++) + for (int i = 0; i < 10; i++) tosend_stuffbit(0); @@ -1021,7 +1021,7 @@ static void CodeIso14443bAsReader(const uint8_t *cmd, int len) { // 8ETUS minum? // Per specification, Subcarrier must be stopped no later than 2 ETUs after EOF. // I'm guessing this is for the FPGA to be able to send all bits before we switch to listening mode - + // ensure that last byte is filled up for (int i = 0; i < 8 ; ++i) tosend_stuffbit(1); @@ -1068,7 +1068,7 @@ uint8_t iso14443b_apdu(uint8_t const *message, size_t message_length, uint8_t *r if (ret < 3) { LED_A_OFF(); - return 0; + return 0; } // VALIDATE CRC @@ -1081,7 +1081,7 @@ uint8_t iso14443b_apdu(uint8_t const *message, size_t message_length, uint8_t *r memcpy(response, Demod.output, Demod.len); return Demod.len; - LED_A_OFF(); + LED_A_OFF(); } /** @@ -1322,7 +1322,7 @@ void ReadSTMemoryIso14443b(uint8_t numofblocks) { if (i == 0xff) break; ++i; } - + // Todo: iceman: send back read data to client. // reply_ng(..., ); @@ -1419,7 +1419,7 @@ void RAMFUNC SniffIso14443b(void) { time_0 = GetCountSspClk(); // loop and listen - for(;;) { + for (;;) { int behindBy = (lastRxCounter - AT91C_BASE_PDC_SSC->PDC_RCR) & (DMA_BUFFER_SIZE - 1); if (behindBy > maxBehindBy) { @@ -1437,7 +1437,7 @@ void RAMFUNC SniffIso14443b(void) { if (upTo >= dma->buf + DMA_BUFFER_SIZE) { // we have read all of the DMA buffer content. upTo = dma->buf; // start reading the circular buffer from the beginning again lastRxCounter += DMA_BUFFER_SIZE; - if (behindBy > (9 * DMA_BUFFER_SIZE / 10)) { + if (behindBy > (9 * DMA_BUFFER_SIZE / 10)) { Dbprintf("About to blow circular buffer - aborted! behindBy=%d", behindBy); break; } @@ -1462,7 +1462,7 @@ void RAMFUNC SniffIso14443b(void) { LED_A_INV(); if (Handle14443bReaderUartBit(ci & 0x01)) { - + time_stop = GetCountSspClk() - time_0; LogTrace(Uart.output, Uart.byteCnt, time_start, time_stop, NULL, true); Uart14bReset(); diff --git a/armsrc/iso15693.c b/armsrc/iso15693.c index a2f74f4b5..911dd1f07 100644 --- a/armsrc/iso15693.c +++ b/armsrc/iso15693.c @@ -66,7 +66,7 @@ #include "ticks.h" #include "BigBuf.h" #include "crc16.h" - + // Delays in SSP_CLK ticks. // SSP_CLK runs at 13,56MHz / 32 = 423.75kHz when simulating a tag #define DELAY_READER_TO_ARM 8 @@ -106,7 +106,7 @@ static void BuildIdentifyRequest(uint8_t *cmd); -// --------------------------- +// --------------------------- // Signal Processing // --------------------------- @@ -114,12 +114,12 @@ static void BuildIdentifyRequest(uint8_t *cmd); // prepare data using "1 out of 4" code for later transmission // resulting data rate is 26.48 kbit/s (fc/512) // cmd ... data -// n ... length of data -static uint8_t encode15_lut[] = { - 0x40, // 01000000 - 0x10, // 00010000 - 0x04, // 00000100 - 0x01 // 00000001 +// n ... length of data +static uint8_t encode15_lut[] = { + 0x40, // 01000000 + 0x10, // 00010000 + 0x04, // 00000100 + 0x01 // 00000001 }; void CodeIso15693AsReader(uint8_t *cmd, int n) { @@ -132,16 +132,16 @@ void CodeIso15693AsReader(uint8_t *cmd, int n) { // data for (int i = 0; i < n; i++) { - + volatile uint8_t b = (cmd[i] >> 0) & 0x03; ts->buf[++ts->max] = encode15_lut[b]; - + b = (cmd[i] >> 2) & 0x03; ts->buf[++ts->max] = encode15_lut[b]; b = (cmd[i] >> 4) & 0x03; ts->buf[++ts->max] = encode15_lut[b]; - + b = (cmd[i] >> 6) & 0x03; ts->buf[++ts->max] = encode15_lut[b]; } @@ -167,12 +167,12 @@ static void CodeIso15693AsReader256(uint8_t *cmd, int n) { tosend_reset(); tosend_t *ts = get_tosend(); - + // SOF for 1of256 ts->buf[++ts->max] = 0x81; //10000001 // data - for(int i = 0; i < n; i++) { + for (int i = 0; i < n; i++) { for (int j = 0; j <= 255; j++) { if (cmd[i] == j) { tosend_stuffbit(0); @@ -189,7 +189,7 @@ static void CodeIso15693AsReader256(uint8_t *cmd, int n) { ts->max++; } -static const uint8_t encode_4bits[16] = { +static const uint8_t encode_4bits[16] = { // 0 1 2 3 0xaa, 0x6a, 0x9a, 0x5a, // 4 5 6 7 @@ -292,7 +292,7 @@ void TransmitTo15693Reader(const uint8_t *cmd, size_t len, uint32_t *start_time, FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_SIMULATOR | FPGA_HF_SIMULATOR_MODULATE_424K); uint32_t modulation_start_time = *start_time - DELAY_ARM_TO_READER + 3 * 8; // no need to transfer the unmodulated start of SOF - + while (GetCountSspClk() > (modulation_start_time & 0xfffffff8) + 3) { // we will miss the intended time if (slot_time) { modulation_start_time += slot_time; // use next available slot @@ -310,14 +310,14 @@ void TransmitTo15693Reader(const uint8_t *cmd, size_t len, uint32_t *start_time, LED_C_ON(); uint8_t bits_to_shift = 0x00; - uint8_t bits_to_send = 0x00; - + uint8_t bits_to_send = 0x00; + for (size_t c = 0; c < len; c++) { for (int i = (c == 0 ? 4 : 7); i >= 0; i--) { uint8_t cmd_bits = ((cmd[c] >> i) & 0x01) ? 0xff : 0x00; - for (int j = 0; j < (slow ? 4 : 1); ) { + for (int j = 0; j < (slow ? 4 : 1);) { if (AT91C_BASE_SSC->SSC_SR & AT91C_SSC_TXRDY) { bits_to_send = bits_to_shift << (8 - shift_delay) | cmd_bits >> shift_delay; AT91C_BASE_SSC->SSC_THR = bits_to_send; @@ -332,7 +332,7 @@ void TransmitTo15693Reader(const uint8_t *cmd, size_t len, uint32_t *start_time, // send the remaining bits, padded with 0: bits_to_send = bits_to_shift << (8 - shift_delay); if (bits_to_send) { - for ( ; ; ) { + for (; ;) { if (AT91C_BASE_SSC->SSC_SR & AT91C_SSC_TXRDY) { AT91C_BASE_SSC->SSC_THR = bits_to_send; break; @@ -631,7 +631,7 @@ static void DecodeTagInit(DecodeTag_t *tag, uint8_t *data, uint16_t max_len) { /* * Receive and decode the tag response, also log to tracebuffer */ -int GetIso15693AnswerFromTag(uint8_t* response, uint16_t max_len, uint16_t timeout, uint32_t *eof_time) { +int GetIso15693AnswerFromTag(uint8_t *response, uint16_t max_len, uint16_t timeout, uint32_t *eof_time) { int samples = 0, ret = 0; @@ -661,10 +661,10 @@ int GetIso15693AnswerFromTag(uint8_t* response, uint16_t max_len, uint16_t timeo uint32_t dma_start_time = 0; uint16_t *upTo = dma->buf; - for(;;) { + for (;;) { - volatile uint16_t behindBy = ((uint16_t*)AT91C_BASE_PDC_SSC->PDC_RPR - upTo) & (DMA_BUFFER_SIZE - 1); - if (behindBy == 0) + volatile uint16_t behindBy = ((uint16_t *)AT91C_BASE_PDC_SSC->PDC_RPR - upTo) & (DMA_BUFFER_SIZE - 1); + if (behindBy == 0) continue; samples++; @@ -715,14 +715,14 @@ int GetIso15693AnswerFromTag(uint8_t* response, uint16_t max_len, uint16_t timeo if (DBGLEVEL >= DBG_EXTENDED) { Dbprintf("samples = %d, ret = %d, Decoder: state = %d, lastBit = %d, len = %d, bitCount = %d, posCount = %d, maxlen = %u", - samples, - ret, - dt->state, - dt->lastBit, - dt->len, - dt->bitCount, - dt->posCount, - dt->max_len + samples, + ret, + dt->state, + dt->lastBit, + dt->len, + dt->bitCount, + dt->posCount, + dt->max_len ); Dbprintf("timing: sof_time = %d, eof_time = %d", (sof_time * 4), (*eof_time * 4)); } @@ -776,7 +776,7 @@ typedef struct { uint8_t *jam_search_string; } DecodeReader_t; -static void DecodeReaderInit(DecodeReader_t* reader, uint8_t *data, uint16_t max_len, uint8_t jam_search_len, uint8_t *jam_search_string) { +static void DecodeReaderInit(DecodeReader_t *reader, uint8_t *data, uint16_t max_len, uint8_t jam_search_len, uint8_t *jam_search_string) { reader->output = data; reader->byteCountMax = max_len; reader->state = STATE_READER_UNSYNCD; @@ -788,12 +788,12 @@ static void DecodeReaderInit(DecodeReader_t* reader, uint8_t *data, uint16_t max reader->jam_search_string = jam_search_string; } -static void DecodeReaderReset(DecodeReader_t* reader) { +static void DecodeReaderReset(DecodeReader_t *reader) { reader->state = STATE_READER_UNSYNCD; } //static inline __attribute__((always_inline)) - static int RAMFUNC Handle15693SampleFromReader(bool bit, DecodeReader_t *reader) { +static int RAMFUNC Handle15693SampleFromReader(bool bit, DecodeReader_t *reader) { switch (reader->state) { case STATE_READER_UNSYNCD: // wait for unmodulated carrier @@ -832,7 +832,7 @@ static void DecodeReaderReset(DecodeReader_t* reader) { reader->posCount++; if (bit == false) { // detected a falling edge - + if (reader->posCount < 20) { // falling edge too early (nominally expected at 21 earliest) DecodeReaderReset(reader); } else if (reader->posCount < 23) { // SOF for 1 out of 4 coding @@ -911,7 +911,7 @@ static void DecodeReaderReset(DecodeReader_t* reader) { // do nothing, keep waiting } } else { // unexpected falling edge - DecodeReaderReset(reader); + DecodeReaderReset(reader); } break; @@ -924,14 +924,14 @@ static void DecodeReaderReset(DecodeReader_t* reader) { reader->sum1 = bit ? 1 : 0; } else if (reader->posCount <= 4) { - + if (bit) reader->sum1++; - + } else if (reader->posCount == 5) { - + reader->sum2 = bit ? 1 : 0; - + } else { if (bit) reader->sum2++; @@ -1098,9 +1098,9 @@ int GetIso15693CommandFromReader(uint8_t *received, size_t max_len, uint32_t *eo uint32_t dma_start_time = GetCountSspClk() & 0xfffffff8; for (;;) { - volatile uint16_t behindBy = ((uint8_t*)AT91C_BASE_PDC_SSC->PDC_RPR - upTo) & (DMA_BUFFER_SIZE - 1); + volatile uint16_t behindBy = ((uint8_t *)AT91C_BASE_PDC_SSC->PDC_RPR - upTo) & (DMA_BUFFER_SIZE - 1); if (behindBy == 0) continue; - + if (samples == 0) { // DMA has transferred the very first data dma_start_time = GetCountSspClk() & 0xfffffff0; @@ -1144,15 +1144,15 @@ int GetIso15693CommandFromReader(uint8_t *received, size_t max_len, uint32_t *eo if (DBGLEVEL >= DBG_EXTENDED) { Dbprintf("samples = %d, gotFrame = %d, Decoder: state = %d, len = %d, bitCount = %d, posCount = %d", - samples, gotFrame, dr->state, dr->byteCount, - dr->bitCount, dr->posCount); + samples, gotFrame, dr->state, dr->byteCount, + dr->bitCount, dr->posCount); } if (dr->byteCount >= 0) { uint32_t sof_time = *eof_time - - dr->byteCount * (dr->Coding == CODING_1_OUT_OF_4 ? 128 : 2048) // time for byte transfers - - 32 // time for SOF transfer - - 16; // time for EOF transfer + - dr->byteCount * (dr->Coding == CODING_1_OUT_OF_4 ? 128 : 2048) // time for byte transfers + - 32 // time for SOF transfer + - 16; // time for EOF transfer LogTrace_ISO15693(dr->output, dr->byteCount, (sof_time * 32), (*eof_time * 32), NULL, true); } @@ -1192,8 +1192,8 @@ void AcquireRawAdcSamplesIso15693(void) { FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER | FPGA_HF_READER_SUBCARRIER_424_KHZ | FPGA_HF_READER_MODE_RECEIVE_AMPLITUDE); - for(int c = 0; c < 4000; ) { - if(AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_RXRDY)) { + for (int c = 0; c < 4000;) { + if (AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_RXRDY)) { uint16_t r = AT91C_BASE_SSC->SSC_RHR; dest[c++] = r >> 5; } @@ -1212,7 +1212,7 @@ void SniffIso15693(uint8_t jam_search_len, uint8_t *jam_search_string) { BigBuf_free(); clear_trace(); set_tracing(true); - + DecodeTag_t dtag = {0}; uint8_t response[ISO15693_MAX_RESPONSE_LENGTH] = {0}; DecodeTagInit(&dtag, response, sizeof(response)); @@ -1228,7 +1228,7 @@ void SniffIso15693(uint8_t jam_search_len, uint8_t *jam_search_string) { FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER | FPGA_HF_READER_MODE_SNIFF_AMPLITUDE); LED_D_OFF(); - + SetAdcMuxFor(GPIO_MUXSEL_HIPKD); FpgaSetupSsc(FPGA_MAJOR_MODE_HF_READER); StartCountSspClk(); @@ -1247,12 +1247,12 @@ void SniffIso15693(uint8_t jam_search_len, uint8_t *jam_search_string) { // Count of samples received so far, so that we can include timing int samples = 0; - + uint16_t *upTo = dma->buf; for (;;) { - volatile int behind_by = ((uint16_t*)AT91C_BASE_PDC_SSC->PDC_RPR - upTo) & (DMA_BUFFER_SIZE - 1); + volatile int behind_by = ((uint16_t *)AT91C_BASE_PDC_SSC->PDC_RPR - upTo) & (DMA_BUFFER_SIZE - 1); if (behind_by < 1) continue; samples++; @@ -1264,10 +1264,10 @@ void SniffIso15693(uint8_t jam_search_len, uint8_t *jam_search_string) { volatile uint16_t sniffdata = *upTo++; // we have read all of the DMA buffer content - if (upTo >= dma->buf + DMA_BUFFER_SIZE) { + if (upTo >= dma->buf + DMA_BUFFER_SIZE) { // start reading the circular buffer from the beginning - upTo = dma->buf; + upTo = dma->buf; // DMA Counter Register had reached 0, already rotated. if (AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_ENDRX)) { @@ -1282,7 +1282,7 @@ void SniffIso15693(uint8_t jam_search_len, uint8_t *jam_search_string) { AT91C_BASE_PDC_SSC->PDC_RNPR = (uint32_t) dma->buf; AT91C_BASE_PDC_SSC->PDC_RNCR = DMA_BUFFER_SIZE; } - + WDT_HIT(); if (BUTTON_PRESS()) { DbpString("Sniff stopped"); @@ -1299,9 +1299,9 @@ void SniffIso15693(uint8_t jam_search_len, uint8_t *jam_search_string) { uint32_t eof_time = dma_start_time + (samples * 16) + 8 - DELAY_READER_TO_ARM_SNIFF; // end of EOF if (dreader.byteCount > 0) { uint32_t sof_time = eof_time - - dreader.byteCount * (dreader.Coding == CODING_1_OUT_OF_4 ? 128 * 16 : 2048 * 16) // time for byte transfers - - 32 * 16 // time for SOF transfer - - 16 * 16; // time for EOF transfer + - dreader.byteCount * (dreader.Coding == CODING_1_OUT_OF_4 ? 128 * 16 : 2048 * 16) // time for byte transfers + - 32 * 16 // time for SOF transfer + - 16 * 16; // time for EOF transfer LogTrace_ISO15693(dreader.output, dreader.byteCount, (sof_time * 4), (eof_time * 4), NULL, true); } // And ready to receive another command. @@ -1315,9 +1315,9 @@ void SniffIso15693(uint8_t jam_search_len, uint8_t *jam_search_string) { uint32_t eof_time = dma_start_time + (samples * 16) + 16 - DELAY_READER_TO_ARM_SNIFF; // end of EOF if (dreader.byteCount > 0) { uint32_t sof_time = eof_time - - dreader.byteCount * (dreader.Coding == CODING_1_OUT_OF_4 ? 128 * 16 : 2048 * 16) // time for byte transfers - - 32 * 16 // time for SOF transfer - - 16 * 16; // time for EOF transfer + - dreader.byteCount * (dreader.Coding == CODING_1_OUT_OF_4 ? 128 * 16 : 2048 * 16) // time for byte transfers + - 32 * 16 // time for SOF transfer + - 16 * 16; // time for EOF transfer LogTrace_ISO15693(dreader.output, dreader.byteCount, (sof_time * 4), (eof_time * 4), NULL, true); } // And ready to receive another command @@ -1370,14 +1370,14 @@ void SniffIso15693(uint8_t jam_search_len, uint8_t *jam_search_string) { Dbprintf(" DecodeReader byteCnt...%d", dreader.byteCount); Dbprintf(" DecodeReader posCount..%d", dreader.posCount); Dbprintf(" Trace length..........." _YELLOW_("%d"), BigBuf_get_traceLen()); - DbpString(""); + DbpString(""); } // Initialize Proxmark3 as ISO15693 reader void Iso15693InitReader(void) { - LEDsoff(); + LEDsoff(); FpgaDownloadAndGo(FPGA_BITSTREAM_HF); // Start from off (no field generated) @@ -1387,7 +1387,7 @@ void Iso15693InitReader(void) { // switch field on FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER); LED_D_ON(); - + // initialize SSC and select proper AD input FpgaSetupSsc(FPGA_MAJOR_MODE_HF_READER); SetAdcMuxFor(GPIO_MUXSEL_HIPKD); @@ -1427,7 +1427,7 @@ static void BuildIdentifyRequest(uint8_t *cmd) { // If you do not need the answer use NULL for *recv[] // return: length of received data // logging enabled -int SendDataTag(uint8_t *send, int sendlen, bool init, bool speed_fast, uint8_t *recv, +int SendDataTag(uint8_t *send, int sendlen, bool init, bool speed_fast, uint8_t *recv, uint16_t max_recv_len, uint32_t start_time, uint16_t timeout, uint32_t *eof_time) { if (init) { @@ -1599,7 +1599,7 @@ void ReaderIso15693(uint32_t parameter) { // When SIM: initialize the Proxmark3 as ISO15693 tag void Iso15693InitTag(void) { - + FpgaDownloadAndGo(FPGA_BITSTREAM_HF); // Start from off (no field generated) @@ -1658,10 +1658,10 @@ void SimTagIso15693(uint8_t *uid) { tosend_t *ts = get_tosend(); enum { NO_FIELD, IDLE, ACTIVATED, SELECTED, HALTED } chip_state = NO_FIELD; - + bool button_pressed = false; - int vHf = 0; // in mV - + int vHf = 0; // in mV + bool exit_loop = false; while (exit_loop == false) { WDT_HIT(); @@ -1678,7 +1678,7 @@ void SimTagIso15693(uint8_t *uid) { chip_state = IDLE; LED_A_ON(); } else { - continue; + continue; } } @@ -1699,7 +1699,7 @@ void SimTagIso15693(uint8_t *uid) { uint32_t response_time = reader_eof_time + DELAY_ISO15693_VCD_TO_VICC_SIM; TransmitTo15693Reader(ts->buf, ts->max, &response_time, 0, slow); LogTrace_ISO15693(resp_inv, CMD_INV_RESP, response_time * 32, (response_time * 32) + (ts->max * 32 * 64), NULL, false); - + chip_state = SELECTED; } } @@ -1715,7 +1715,7 @@ void SimTagIso15693(uint8_t *uid) { void BruteforceIso15693Afi(uint32_t speed) { uint8_t data[7] = {0}; - uint8_t recv[ISO15693_MAX_RESPONSE_LENGTH]; + uint8_t recv[ISO15693_MAX_RESPONSE_LENGTH]; Iso15693InitReader(); // first without AFI @@ -1726,7 +1726,7 @@ void BruteforceIso15693Afi(uint32_t speed) { data[2] = 0; // AFI AddCrc15(data, 3); - int datalen = 5; + int datalen = 5; uint32_t eof_time = 0; uint32_t start_time = GetCountSspClk(); int recvlen = SendDataTag(data, datalen, true, speed, recv, sizeof(recv), 0, ISO15693_READER_TIMEOUT, &eof_time); @@ -1754,7 +1754,7 @@ void BruteforceIso15693Afi(uint32_t speed) { recvlen = SendDataTag(data, datalen, false, speed, recv, sizeof(recv), start_time, ISO15693_READER_TIMEOUT, &eof_time); start_time = eof_time + DELAY_ISO15693_VICC_TO_VCD_READER; - + WDT_HIT(); if (recvlen >= 12) { @@ -1790,7 +1790,7 @@ void DirectTag15693Command(uint32_t datalen, uint32_t speed, uint32_t recv, uint uint32_t eof_time; uint16_t timeout; bool request_answer = false; - + switch (data[1]) { case ISO15_CMD_WRITE: case ISO15_CMD_LOCK: @@ -1804,7 +1804,7 @@ void DirectTag15693Command(uint32_t datalen, uint32_t speed, uint32_t recv, uint break; default: timeout = ISO15693_READER_TIMEOUT; - } + } if (DBGLEVEL >= DBG_EXTENDED) { Dbprintf("SEND:"); @@ -1814,10 +1814,10 @@ void DirectTag15693Command(uint32_t datalen, uint32_t speed, uint32_t recv, uint recvlen = SendDataTag(data, datalen, true, speed, (recv ? recvbuf : NULL), sizeof(recvbuf), 0, timeout, &eof_time); // send a single EOF to get the tag response - if (request_answer) { + if (request_answer) { recvlen = SendDataTagEOF((recv ? recvbuf : NULL), sizeof(recvbuf), 0, ISO15693_READER_TIMEOUT, &eof_time); } - + // for the time being, switch field off to protect rdv4.0 // note: this prevents using hf 15 cmd with s option - which isn't implemented yet anyway FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); @@ -1882,9 +1882,9 @@ void SetTag15693Uid(uint8_t *uid) { AddCrc15(cmd[3], 7); uint32_t start_time = 0; - + for (int i = 0; i < 4; i++) { - + recvlen = SendDataTag(cmd[i], sizeof(cmd[i]), i == 0 ? true : false, true, recvbuf, sizeof(recvbuf), start_time, ISO15693_READER_TIMEOUT_WRITE, &eof_time); start_time = eof_time + DELAY_ISO15693_VICC_TO_VCD_READER; diff --git a/armsrc/iso15693.h b/armsrc/iso15693.h index d650ab0ef..168cee42c 100644 --- a/armsrc/iso15693.h +++ b/armsrc/iso15693.h @@ -13,7 +13,7 @@ #include "common.h" #include "pm3_cmd.h" // struct - + // Delays in SSP_CLK ticks. // SSP_CLK runs at 13,56MHz / 32 = 423.75kHz when simulating a tag @@ -27,11 +27,11 @@ void Iso15693InitReader(void); void Iso15693InitTag(void); void CodeIso15693AsReader(uint8_t *cmd, int n); void CodeIso15693AsTag(uint8_t *cmd, size_t len); - + void TransmitTo15693Reader(const uint8_t *cmd, size_t len, uint32_t *start_time, uint32_t slot_time, bool slow); int GetIso15693CommandFromReader(uint8_t *received, size_t max_len, uint32_t *eof_time); void TransmitTo15693Tag(const uint8_t *cmd, int len, uint32_t *start_time); -int GetIso15693AnswerFromTag(uint8_t* response, uint16_t max_len, uint16_t timeout, uint32_t *eof_time); +int GetIso15693AnswerFromTag(uint8_t *response, uint16_t max_len, uint16_t timeout, uint32_t *eof_time); //void RecordRawAdcSamplesIso15693(void); void AcquireRawAdcSamplesIso15693(void); @@ -43,9 +43,9 @@ void Iso15693InitReader(void); void SniffIso15693(uint8_t jam_search_len, uint8_t *jam_search_string); -int SendDataTag(uint8_t *send, int sendlen, bool init, bool speed_fast, uint8_t *recv, +int SendDataTag(uint8_t *send, int sendlen, bool init, bool speed_fast, uint8_t *recv, uint16_t max_recv_len, uint32_t start_time, uint16_t timeout, uint32_t *eof_time); - + int SendDataTagEOF(uint8_t *recv, uint16_t max_recv_len, uint32_t start_time, uint16_t timeout, uint32_t *eof_time); void SetTag15693Uid(uint8_t *uid); diff --git a/armsrc/lfadc.c b/armsrc/lfadc.c index 2c46f5581..1fb1bccde 100644 --- a/armsrc/lfadc.c +++ b/armsrc/lfadc.c @@ -148,7 +148,7 @@ bool lf_get_reader_modulation(void) { } void lf_wait_periods(size_t periods) { - // wait detect gap + // wait detect gap lf_count_edge_periods_ex(periods, true, false); } @@ -238,40 +238,40 @@ void lf_finalize(void) { } size_t lf_detect_field_drop(size_t max) { -/* - size_t periods = 0; -// int16_t checked = 0; + /* + size_t periods = 0; + // int16_t checked = 0; - while (BUTTON_PRESS() == false) { + while (BUTTON_PRESS() == false) { - // // only every 1000th times, in order to save time when collecting samples. - // if (checked == 4000) { - // if (data_available()) { - // checked = -1; - // break; - // } else { - // checked = 0; + // // only every 1000th times, in order to save time when collecting samples. + // if (checked == 4000) { + // if (data_available()) { + // checked = -1; + // break; + // } else { + // checked = 0; + // } // } - // } - // ++checked; + // ++checked; - WDT_HIT(); + WDT_HIT(); - if (AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_RXRDY)) { - periods++; - volatile uint8_t adc_val = AT91C_BASE_SSC->SSC_RHR; + if (AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_RXRDY)) { + periods++; + volatile uint8_t adc_val = AT91C_BASE_SSC->SSC_RHR; - if (g_logging) logSampleSimple(adc_val); + if (g_logging) logSampleSimple(adc_val); - if (adc_val == 0) { - rising_edge = false; - return periods; + if (adc_val == 0) { + rising_edge = false; + return periods; + } + + if (periods == max) return 0; } - - if (periods == max) return 0; } - } -*/ + */ return 0; } diff --git a/armsrc/lfops.c b/armsrc/lfops.c index 4a9373cec..612458c9b 100644 --- a/armsrc/lfops.c +++ b/armsrc/lfops.c @@ -1245,7 +1245,7 @@ int lf_hid_watch(int findone, uint32_t *high, uint32_t *low) { while (BUTTON_PRESS() == false) { WDT_HIT(); - + // cancel w usb command. if (interval == 4000) { if (data_available()) { @@ -1262,7 +1262,7 @@ int lf_hid_watch(int findone, uint32_t *high, uint32_t *low) { // FSK demodulator // 50 * 128 * 2 - big enough to catch 2 sequences of largest format size = MIN(12800, BigBuf_max_traceLen()); - + int idx = HIDdemodFSK(dest, &size, &hi2, &hi, &lo, &dummyIdx); if (idx < 0) continue; @@ -1354,7 +1354,7 @@ int lf_awid_watch(int findone, uint32_t *high, uint32_t *low) { while (BUTTON_PRESS() == false) { WDT_HIT(); - + // cancel w usb command. if (interval == 4000) { if (data_available()) { @@ -1535,7 +1535,7 @@ int lf_io_watch(int findone, uint32_t *high, uint32_t *low) { while (BUTTON_PRESS() == false) { WDT_HIT(); - + // cancel w usb command. if (interval == 4000) { if (data_available()) { @@ -2601,12 +2601,12 @@ void Cotag(uint32_t arg0) { BigBuf_Clear_ext(false); //send COTAG start pulse -/* - ON(740) OFF(2035) - ON(3330) OFF(2035) - ON(740) OFF(2035) - ON(1000) -*/ + /* + ON(740) OFF(2035) + ON(3330) OFF(2035) + ON(740) OFF(2035) + ON(1000) + */ ON(800) OFF(2200) ON(3600) OFF(2200) diff --git a/armsrc/lfsampling.c b/armsrc/lfsampling.c index aaf7ec86c..cd93e63d7 100644 --- a/armsrc/lfsampling.c +++ b/armsrc/lfsampling.c @@ -171,7 +171,7 @@ void logSample(uint8_t sample, uint8_t decimation, uint8_t bits_per_sample, bool // keep track of total gather samples regardless how many was discarded. if (samples.counter-- == 0) return; - if (bits_per_sample == 0) bits_per_sample = 1; + if (bits_per_sample == 0) bits_per_sample = 1; if (bits_per_sample > 8) bits_per_sample = 8; if (decimation == 0) decimation = 1; @@ -323,7 +323,7 @@ uint32_t DoAcquisition(uint8_t decimation, uint8_t bits_per_sample, bool avg, in if (samples.total_saved >= sample_size) break; } } - + if (checked == -1 && verbose) { Dbprintf("lf sampling aborted"); } @@ -414,14 +414,14 @@ void doT55x7Acquisition(size_t sample_size) { bool lowFound = false; uint16_t checker = 0; - + if (DBGLEVEL >= DBG_DEBUG) { Dbprintf("doT55x7Acquisition - after init"); print_stack_usage(); } while (skipCnt < 1000 && (i < bufsize)) { - + if (BUTTON_PRESS()) break; @@ -493,17 +493,17 @@ void doCotagAcquisition() { dest[0] = 0; uint8_t firsthigh = 0, firstlow = 0; uint16_t i = 0, noise_counter = 0; - + if (DBGLEVEL >= DBG_DEBUG) { Dbprintf("doCotagAcquisition - after init"); print_stack_usage(); } while ((i < bufsize) && (noise_counter < (COTAG_T1 << 1))) { - + if (BUTTON_PRESS()) break; - + WDT_HIT(); if (AT91C_BASE_SSC->SSC_SR & AT91C_SSC_RXRDY) { @@ -557,15 +557,15 @@ uint32_t doCotagAcquisitionManchester(void) { uint8_t curr = 0, prev = 0; uint16_t sample_counter = 0, period = 0; uint16_t noise_counter = 0; - + if (DBGLEVEL >= DBG_DEBUG) { Dbprintf("doCotagAcquisitionManchester - after init"); print_stack_usage(); } - + while ((sample_counter < bufsize) && (noise_counter < (COTAG_T1 << 1))) { - - if (BUTTON_PRESS()) + + if (BUTTON_PRESS()) break; WDT_HIT(); diff --git a/armsrc/spiffs.c b/armsrc/spiffs.c index a7be6cedf..dac1de449 100644 --- a/armsrc/spiffs.c +++ b/armsrc/spiffs.c @@ -483,9 +483,9 @@ int rdv40_spiffs_read_as_symlink(char *filename, uint8_t *dst, uint32_t size, RD if (DBGLEVEL > 1) Dbprintf("Symlink destination is : " _YELLOW_("%s"), linkdest); - read_from_spiffs((char *)linkdest, (uint8_t *)dst, size); - ) -} + read_from_spiffs((char *)linkdest, (uint8_t *)dst, size); + ) + } // BEWARE ! This function is DESTRUCTIVE as it will UPDATE an existing symlink // Since it creates a .lnk extension file it may be minor to mistake the order of arguments @@ -516,18 +516,18 @@ int rdv40_spiffs_make_symlink(char *linkdest, char *filename, RDV40SpiFFSSafetyL int rdv40_spiffs_read_as_filetype(char *filename, uint8_t *dst, uint32_t size, RDV40SpiFFSSafetyLevel level) { RDV40_SPIFFS_SAFE_FUNCTION( RDV40SpiFFSFileType filetype = filetype_in_spiffs((char *)filename); - switch (filetype) { - case RDV40_SPIFFS_FILETYPE_REAL: - rdv40_spiffs_read((char *)filename, (uint8_t *)dst, size, level); - break; - case RDV40_SPIFFS_FILETYPE_SYMLINK: - rdv40_spiffs_read_as_symlink((char *)filename, (uint8_t *)dst, size, level); - break; - case RDV40_SPIFFS_FILETYPE_BOTH: - case RDV40_SPIFFS_FILETYPE_UNKNOWN: - default: + switch (filetype) { + case RDV40_SPIFFS_FILETYPE_REAL: + rdv40_spiffs_read((char *)filename, (uint8_t *)dst, size, level); + break; + case RDV40_SPIFFS_FILETYPE_SYMLINK: + rdv40_spiffs_read_as_symlink((char *)filename, (uint8_t *)dst, size, level); + break; + case RDV40_SPIFFS_FILETYPE_BOTH: + case RDV40_SPIFFS_FILETYPE_UNKNOWN: + default: ; - } + } ) } @@ -617,7 +617,7 @@ void rdv40_spiffs_safe_wipe(void) { while ((pe = SPIFFS_readdir(&d, pe))) { if (rdv40_spiffs_is_symlink((const char *)pe->name)) { - + char linkdest[SPIFFS_OBJ_NAME_LEN]; read_from_spiffs((char *)pe->name, (uint8_t *)linkdest, SPIFFS_OBJ_NAME_LEN); diff --git a/armsrc/thinfilm.c b/armsrc/thinfilm.c index dcc2ff36f..dc99bf4c7 100644 --- a/armsrc/thinfilm.c +++ b/armsrc/thinfilm.c @@ -63,7 +63,7 @@ static void CodeThinfilmAsTag(const uint8_t *cmd, uint16_t len) { tosend_reset(); tosend_t *ts = get_tosend(); - + for (uint16_t i = 0; i < len; i++) { uint8_t b = cmd[i]; for (uint8_t j = 0; j < 8; j++) { diff --git a/armsrc/ticks.c b/armsrc/ticks.c index e9cbea219..e8ac13f89 100644 --- a/armsrc/ticks.c +++ b/armsrc/ticks.c @@ -157,20 +157,20 @@ void StartCountSspClk(void) { // synchronize the counter with the ssp_frame signal. // Note: FPGA must be in a FPGA mode with SSC transfer, otherwise SSC_FRAME and SSC_CLK signals would not be present // - while(AT91C_BASE_PIOA->PIO_PDSR & GPIO_SSC_FRAME); // wait for ssp_frame to be low - while(!(AT91C_BASE_PIOA->PIO_PDSR & GPIO_SSC_FRAME)); // wait for ssp_frame to go high (start of frame) - while(!(AT91C_BASE_PIOA->PIO_PDSR & GPIO_SSC_CLK)); // wait for ssp_clk to go high; 1st ssp_clk after start of frame - while(AT91C_BASE_PIOA->PIO_PDSR & GPIO_SSC_CLK); // wait for ssp_clk to go low; - while(!(AT91C_BASE_PIOA->PIO_PDSR & GPIO_SSC_CLK)); // wait for ssp_clk to go high; 2nd ssp_clk after start of frame + while (AT91C_BASE_PIOA->PIO_PDSR & GPIO_SSC_FRAME); // wait for ssp_frame to be low + while (!(AT91C_BASE_PIOA->PIO_PDSR & GPIO_SSC_FRAME)); // wait for ssp_frame to go high (start of frame) + while (!(AT91C_BASE_PIOA->PIO_PDSR & GPIO_SSC_CLK)); // wait for ssp_clk to go high; 1st ssp_clk after start of frame + while (AT91C_BASE_PIOA->PIO_PDSR & GPIO_SSC_CLK); // wait for ssp_clk to go low; + while (!(AT91C_BASE_PIOA->PIO_PDSR & GPIO_SSC_CLK)); // wait for ssp_clk to go high; 2nd ssp_clk after start of frame if ((AT91C_BASE_SSC->SSC_RFMR & SSC_FRAME_MODE_BITS_IN_WORD(32)) == SSC_FRAME_MODE_BITS_IN_WORD(16)) { // 16bit frame - while(AT91C_BASE_PIOA->PIO_PDSR & GPIO_SSC_CLK); // wait for ssp_clk to go low; - while(!(AT91C_BASE_PIOA->PIO_PDSR & GPIO_SSC_CLK)); // wait for ssp_clk to go high; 3rd ssp_clk after start of frame - while(AT91C_BASE_PIOA->PIO_PDSR & GPIO_SSC_CLK); // wait for ssp_clk to go low; - while(!(AT91C_BASE_PIOA->PIO_PDSR & GPIO_SSC_CLK)); // wait for ssp_clk to go high; 4th ssp_clk after start of frame - while(AT91C_BASE_PIOA->PIO_PDSR & GPIO_SSC_CLK); // wait for ssp_clk to go low; - while(!(AT91C_BASE_PIOA->PIO_PDSR & GPIO_SSC_CLK)); // wait for ssp_clk to go high; 5th ssp_clk after start of frame - while(AT91C_BASE_PIOA->PIO_PDSR & GPIO_SSC_CLK); // wait for ssp_clk to go low; - while(!(AT91C_BASE_PIOA->PIO_PDSR & GPIO_SSC_CLK)); // wait for ssp_clk to go high; 6th ssp_clk after start of frame + while (AT91C_BASE_PIOA->PIO_PDSR & GPIO_SSC_CLK); // wait for ssp_clk to go low; + while (!(AT91C_BASE_PIOA->PIO_PDSR & GPIO_SSC_CLK)); // wait for ssp_clk to go high; 3rd ssp_clk after start of frame + while (AT91C_BASE_PIOA->PIO_PDSR & GPIO_SSC_CLK); // wait for ssp_clk to go low; + while (!(AT91C_BASE_PIOA->PIO_PDSR & GPIO_SSC_CLK)); // wait for ssp_clk to go high; 4th ssp_clk after start of frame + while (AT91C_BASE_PIOA->PIO_PDSR & GPIO_SSC_CLK); // wait for ssp_clk to go low; + while (!(AT91C_BASE_PIOA->PIO_PDSR & GPIO_SSC_CLK)); // wait for ssp_clk to go high; 5th ssp_clk after start of frame + while (AT91C_BASE_PIOA->PIO_PDSR & GPIO_SSC_CLK); // wait for ssp_clk to go low; + while (!(AT91C_BASE_PIOA->PIO_PDSR & GPIO_SSC_CLK)); // wait for ssp_clk to go high; 6th ssp_clk after start of frame } // note: up to now two ssp_clk rising edges have passed since the rising edge of ssp_frame diff --git a/client/android/pm3_main.c b/client/android/pm3_main.c index fc4e0b2dc..0da684e01 100644 --- a/client/android/pm3_main.c +++ b/client/android/pm3_main.c @@ -86,7 +86,7 @@ jint Console(JNIEnv *env, jobject instance, jstring cmd_) { PrintAndLogEx(NORMAL, ""); - char *cmd = (char *) ((*env)->GetStringUTFChars(env, cmd_, 0)); + char *cmd = (char *)((*env)->GetStringUTFChars(env, cmd_, 0)); int ret = CommandReceived(cmd); if (ret == 99) { // exit / quit @@ -102,7 +102,7 @@ jint Console(JNIEnv *env, jobject instance, jstring cmd_) { * Is client running! * */ jboolean IsClientRunning(JNIEnv *env, jobject instance) { - return (jboolean) ((jboolean) conn.run); + return (jboolean)((jboolean) conn.run); } /* @@ -114,7 +114,7 @@ jboolean TestPm3(JNIEnv *env, jobject instance) { return false; } bool ret = (TestProxmark() == PM3_SUCCESS); - return (jboolean) (ret); + return (jboolean)(ret); } /* @@ -141,18 +141,18 @@ JNIEXPORT jint JNI_OnLoad(JavaVM *vm, void *reserved) { } jclass clz_test = (*jniEnv)->FindClass(jniEnv, "cn/rrg/devices/Proxmark3RRGRdv4"); JNINativeMethod methods[] = { - {"startExecute", "(Ljava/lang/String;)I", (void *) Console}, - {"stopExecute", "()V", (void *) ClosePm3}, - {"isExecuting", "()Z", (void *) IsClientRunning} + {"startExecute", "(Ljava/lang/String;)I", (void *) Console}, + {"stopExecute", "()V", (void *) ClosePm3}, + {"isExecuting", "()Z", (void *) IsClientRunning} }; JNINativeMethod methods1[] = { - {"testPm3", "()Z", (void *) TestPm3}, - {"closePm3", "()V", ClosePm3} + {"testPm3", "()Z", (void *) TestPm3}, + {"closePm3", "()V", ClosePm3} }; if ((*jniEnv)->RegisterNatives(jniEnv, clazz, methods, sizeof(methods) / sizeof(methods[0])) != - JNI_OK) { + JNI_OK) { return -1; } @@ -164,4 +164,4 @@ JNIEXPORT jint JNI_OnLoad(JavaVM *vm, void *reserved) { (*jniEnv)->DeleteLocalRef(jniEnv, clazz); (*jniEnv)->DeleteLocalRef(jniEnv, clz_test); return JNI_VERSION_1_4; -} \ No newline at end of file +} diff --git a/client/src/cmddata.c b/client/src/cmddata.c index 3765c2ded..75179ce5e 100644 --- a/client/src/cmddata.c +++ b/client/src/cmddata.c @@ -2317,7 +2317,7 @@ static int CmdDataNDEF(const char *Cmd) { "Samples:\n" _YELLOW_("\tdata ndef -d 9101085402656e48656c6c6f5101085402656e576f726c64\n") _YELLOW_("\tdata ndef -d 0103d020240203e02c040300fe\n") - ); + ); void *argtable[] = { arg_param_begin, diff --git a/client/src/cmdflashmemspiffs.c b/client/src/cmdflashmemspiffs.c index d419fa131..11c4db2d7 100644 --- a/client/src/cmdflashmemspiffs.c +++ b/client/src/cmdflashmemspiffs.c @@ -339,7 +339,7 @@ static int CmdFlashMemSpiFFSDump(const char *Cmd) { saveFile(filename, ".bin", dump, len); if (eml) { uint8_t eml_len = 16; - + if (strstr(filename, "class") != NULL) eml_len = 8; else if (strstr(filename, "mfu") != NULL) @@ -421,12 +421,12 @@ out: } static int CmdFlashMemSpiFFSWipe(const char *Cmd) { - + char ctmp = tolower(param_getchar(Cmd, 0)); if (ctmp == 'h') { return usage_flashmemspiffs_wipe(); } - + PrintAndLogEx(INFO, "Wiping all files from SPIFFS FileSystem"); PacketResponseNG resp; clearCommandBuffer(); diff --git a/client/src/cmdhf.c b/client/src/cmdhf.c index f0c967205..cdcce5557 100644 --- a/client/src/cmdhf.c +++ b/client/src/cmdhf.c @@ -285,16 +285,16 @@ int CmdHFSniff(const char *Cmd) { uint16_t len; } PACKED; struct r *retval = (struct r *)resp.data.asBytes; - + PrintAndLogEx(INFO, "HF sniff (%u samples)", retval->len); PrintAndLogEx(HINT, "Use `" _YELLOW_("data hpf") "` to remove offset"); PrintAndLogEx(HINT, "Use `" _YELLOW_("data plot") "` to view"); PrintAndLogEx(HINT, "Use `" _YELLOW_("data save") "` to save"); - // download bigbuf_malloc:d. + // download bigbuf_malloc:d. // it reserve memory from the higher end. - // At the moment, sniff takes all free memory in bigbuff. If this changes, + // At the moment, sniff takes all free memory in bigbuff. If this changes, // we can't start from beginning idx 0 but from that hi-to-start-of-allocated. uint32_t start = pm3_capabilities.bigbuf_size - retval->len; int res = getSamplesEx(start, start, false); diff --git a/client/src/cmdhficlass.c b/client/src/cmdhficlass.c index b186b2496..eecf4c3f9 100644 --- a/client/src/cmdhficlass.c +++ b/client/src/cmdhficlass.c @@ -384,8 +384,8 @@ static inline uint32_t countones(uint64_t a) { #endif } - -const char * card_types[] = { + +const char *card_types[] = { "PicoPass 16K / 16", // 000 "PicoPass 32K with current book 16K / 16", // 001 "Unknown Card Type!", // 010 @@ -435,7 +435,7 @@ static void fuse_config(const picopass_hdr *hdr) { else PrintAndLogEx(SUCCESS, "Coding: " _YELLOW_("ISO 14443-B only")); } - + uint8_t pagemap = get_pagemap(hdr); switch (pagemap) { case 0x0: @@ -458,25 +458,25 @@ static void fuse_config(const picopass_hdr *hdr) { PrintAndLogEx(INFO, " RA: Read access not enabled"); PrintAndLogEx(INFO, - "App limit " _YELLOW_("0x%02X") ", OTP " _YELLOW_("0x%02X%02X") ", Block write lock " _YELLOW_("0x%02X") - , hdr->conf.app_limit - , hdr->conf.otp[1] - , hdr->conf.otp[0] - , hdr->conf.block_writelock - ); + "App limit " _YELLOW_("0x%02X") ", OTP " _YELLOW_("0x%02X%02X") ", Block write lock " _YELLOW_("0x%02X") + , hdr->conf.app_limit + , hdr->conf.otp[1] + , hdr->conf.otp[0] + , hdr->conf.block_writelock + ); PrintAndLogEx(INFO, - " Chip " _YELLOW_("0x%02X") ", Mem " _YELLOW_("0x%02X") ", EAS " _YELLOW_("0x%02X") ", Fuses " _YELLOW_("0x%02X") - , hdr->conf.chip_config - , hdr->conf.mem_config - , hdr->conf.eas - , hdr->conf.fuses - ); + " Chip " _YELLOW_("0x%02X") ", Mem " _YELLOW_("0x%02X") ", EAS " _YELLOW_("0x%02X") ", Fuses " _YELLOW_("0x%02X") + , hdr->conf.chip_config + , hdr->conf.mem_config + , hdr->conf.eas + , hdr->conf.fuses + ); } static void getMemConfig(uint8_t mem_cfg, uint8_t chip_cfg, uint8_t *app_areas, uint8_t *kb) { - // How to determine chip type + // How to determine chip type - // mem-bit 7 = 16K + // mem-bit 7 = 16K // mem-bit 5 = Book // mem-bit 4 = 2K // chip-bit 4 = Multi App @@ -532,7 +532,7 @@ static void mem_app_config(const picopass_hdr *hdr) { uint8_t pagemap = get_pagemap(hdr); PrintAndLogEx(INFO, "------ " _CYAN_("Memory") " ------"); - + if (pagemap == PICOPASS_NON_SECURE_PAGEMODE) { PrintAndLogEx(INFO, " %u KBits (%u bytes)", kb, app2_limit * 8); PrintAndLogEx(INFO, " Tag has not App Areas"); @@ -540,7 +540,7 @@ static void mem_app_config(const picopass_hdr *hdr) { } PrintAndLogEx(INFO, " %u KBits/%u App Areas (%u bytes)", kb, app_areas, (app2_limit + 1) * 8); - PrintAndLogEx(INFO, " AA1 blocks %u { 0x06 - 0x%02X (06 - %02d) }", app1_limit , app1_limit + 5, app1_limit + 5); + PrintAndLogEx(INFO, " AA1 blocks %u { 0x06 - 0x%02X (06 - %02d) }", app1_limit, app1_limit + 5, app1_limit + 5); PrintAndLogEx(INFO, " AA2 blocks %u { 0x%02X - 0x%02X (%02d - %02d) }", app2_limit - app1_limit, app1_limit + 5 + 1, app2_limit, app1_limit + 5 + 1, app2_limit); PrintAndLogEx(INFO, "------ " _CYAN_("KeyAccess") " ------"); @@ -592,18 +592,18 @@ static int CmdHFiClassSniff(const char *Cmd) { "Usage:\n" _YELLOW_("\thf iclass sniff") "\n" _YELLOW_("\thf iclass sniff -j") " -> jam e-purse updates\n" - ); - - void* argtable[] = { + ); + + void *argtable[] = { arg_param_begin, arg_lit0("j", "jam", "Jam (prevent) e-purse updates"), arg_param_end }; - CLIExecWithReturn(ctx, Cmd, argtable, true); + CLIExecWithReturn(ctx, Cmd, argtable, true); bool jam_epurse_update = arg_get_lit(ctx, 1); CLIParserFree(ctx); - + const uint8_t update_epurse_sequence[2] = {0x87, 0x02}; struct { @@ -611,17 +611,17 @@ static int CmdHFiClassSniff(const char *Cmd) { uint8_t jam_search_string[2]; } PACKED payload; - if (jam_epurse_update) { + if (jam_epurse_update) { payload.jam_search_len = sizeof(update_epurse_sequence); memcpy(payload.jam_search_string, update_epurse_sequence, sizeof(payload.jam_search_string)); } - + PacketResponseNG resp; clearCommandBuffer(); SendCommandNG(CMD_HF_ICLASS_SNIFF, (uint8_t *)&payload, sizeof(payload)); - + WaitForResponse(CMD_HF_ICLASS_SNIFF, &resp); - + PrintAndLogEx(HINT, "Try `" _YELLOW_("hf iclass list") "` to look at the collected trace"); PrintAndLogEx(HINT, "Try `" _YELLOW_("trace save h") "` to save tracelog for later analysing"); return PM3_SUCCESS; @@ -790,7 +790,7 @@ static int CmdHFiClassSim(const char *Cmd) { } saveFile("iclass_mac_attack_keyroll_B", ".bin", dump, datalen); free(dump); - + PrintAndLogEx(HINT, "Try `" _YELLOW_("hf iclass loclass h") "` to recover elite key"); break; } @@ -801,7 +801,7 @@ static int CmdHFiClassSim(const char *Cmd) { uint8_t numberOfCSNs = 0; clearCommandBuffer(); SendCommandMIX(CMD_HF_ICLASS_SIMULATE, sim_type, numberOfCSNs, 1, CSN, 8); - + if (sim_type == ICLASS_SIM_MODE_FULL) PrintAndLogEx(HINT, "Try `" _YELLOW_("hf iclass esave h") "` to save the emulator memory to file"); break; @@ -819,7 +819,7 @@ int read_iclass_csn(bool loop, bool verbose) { uint32_t flags = (FLAG_ICLASS_READER_INIT | FLAG_ICLASS_READER_CLEARTRACE); int res = PM3_SUCCESS; - while (kbd_enter_pressed() == false) { + while (kbd_enter_pressed() == false) { clearCommandBuffer(); SendCommandMIX(CMD_HF_ICLASS_READER, flags, 0, 0, NULL, 0); @@ -840,17 +840,17 @@ int read_iclass_csn(bool loop, bool verbose) { } picopass_hdr *hdr = (picopass_hdr *)resp.data.asBytes; - + PrintAndLogEx(NORMAL, ""); PrintAndLogEx(SUCCESS, " CSN: " _GREEN_("%s"), sprint_hex(hdr->csn, sizeof(hdr->csn))); PrintAndLogEx(SUCCESS, " Config: " _GREEN_("%s"), sprint_hex((uint8_t *)&hdr->conf, sizeof(hdr->conf))); - + if (loop == false) break; } } - DropField(); + DropField(); return res; } @@ -858,7 +858,7 @@ static int CmdHFiClassReader(const char *Cmd) { char cmdp = tolower(param_getchar(Cmd, 0)); if (cmdp == 'h') return usage_hf_iclass_reader(); bool loop_read = (cmdp == '1') ? false : true; - + return read_iclass_csn(loop_read, true); } @@ -919,7 +919,7 @@ static int CmdHFiClassReader_Replay(const char *Cmd) { PacketResponseNG resp; clearCommandBuffer(); - SendCommandNG(CMD_HF_ICLASS_REPLAY, (uint8_t *)&payload, sizeof(payload)); + SendCommandNG(CMD_HF_ICLASS_REPLAY, (uint8_t *)&payload, sizeof(payload)); while (true) { printf("."); @@ -980,7 +980,7 @@ static int CmdHFiClassReader_Replay(const char *Cmd) { saveFile(filename, ".bin", tag_data, bytes_got); saveFileEML(filename, tag_data, bytes_got, 8); saveFileJSON(filename, jsfIclass, tag_data, bytes_got, NULL); - + PrintAndLogEx(HINT, "Try `" _YELLOW_("hf iclass decrypt") "` to decrypt dump file"); PrintAndLogEx(HINT, "Try `" _YELLOW_("hf iclass view") "` to view dump file"); PrintAndLogEx(NORMAL, ""); @@ -1157,9 +1157,9 @@ static int CmdHFiClassESave(const char *Cmd) { saveFileEML(filename, dump, bytes, 8); saveFileJSON(filename, jsfIclass, dump, bytes, NULL); free(dump); - + PrintAndLogEx(HINT, "Try `" _YELLOW_("hf iclass readtagfile ") "` to view dump file"); - return PM3_SUCCESS; + return PM3_SUCCESS; } static int CmdHFiClassDecrypt(const char *Cmd) { @@ -1351,7 +1351,7 @@ static int CmdHFiClassDecrypt(const char *Cmd) { } else { PrintAndLogEx(INFO, "No credential found."); } - + // decode block 9 if (memcmp(decrypted + (8 * 9), empty, 8) != 0) { @@ -1363,9 +1363,9 @@ static int CmdHFiClassDecrypt(const char *Cmd) { uint8_t pinsize = 0; if (use_sc) { pinsize = GetPinSize(decrypted + (8 * 6)); - + if (pinsize > 0) { - + uint64_t pin = bytes_to_num(decrypted + (8 * 9), 5); char tmp[17] = {0}; sprintf(tmp, "%."PRIu64, BCD2DEC(pin)); @@ -1502,17 +1502,17 @@ static bool select_only(uint8_t *CSN, uint8_t *CCNR, bool verbose) { } static bool select_and_auth(uint8_t *KEY, uint8_t *MAC, uint8_t *div_key, bool use_credit_key, bool elite, bool rawkey, bool verbose) { - + iclass_auth_req_t payload = { .use_raw = rawkey, .use_elite = elite, .use_credit_key = use_credit_key }; memcpy(payload.key, KEY, 8); - - SendCommandNG(CMD_HF_ICLASS_AUTH, (uint8_t*)&payload, sizeof(payload)); + + SendCommandNG(CMD_HF_ICLASS_AUTH, (uint8_t *)&payload, sizeof(payload)); PacketResponseNG resp; - clearCommandBuffer(); + clearCommandBuffer(); if (WaitForResponseTimeout(CMD_HF_ICLASS_AUTH, &resp, 2000) == 0) { if (verbose) PrintAndLogEx(WARNING, "Command execute timeout"); return false; @@ -1529,14 +1529,14 @@ static bool select_and_auth(uint8_t *KEY, uint8_t *MAC, uint8_t *div_key, bool u if (verbose) PrintAndLogEx(FAILED, "authentication error"); return false; } - + if (div_key) memcpy(div_key, packet->div_key, sizeof(packet->div_key)); - + if (MAC) memcpy(MAC, packet->mac, sizeof(packet->mac)); - - if (verbose) + + if (verbose) PrintAndLogEx(SUCCESS, "authing with %s: %s", rawkey ? "raw key" : "diversified key", sprint_hex(div_key, 8)); return true; @@ -1658,7 +1658,7 @@ static int CmdHFiClassDump(const char *Cmd) { uint8_t pagemap = get_pagemap(hdr); if (readStatus & (FLAG_ICLASS_CSN | FLAG_ICLASS_CONF | FLAG_ICLASS_CC)) { - + memcpy(tag_data, hdr, 24); uint8_t type = get_mem_config(hdr); @@ -1667,22 +1667,22 @@ static int CmdHFiClassDump(const char *Cmd) { if (pagemap == PICOPASS_NON_SECURE_PAGEMODE) { PrintAndLogEx(INFO, "Card in non-secure page mode detected"); - + app_limit1 = card_app2_limit[type]; app_limit2 = 0; } else { app_limit1 = hdr->conf.app_limit; app_limit2 = card_app2_limit[type]; } - + } else { PrintAndLogEx(FAILED, "failed to read block 0,1,2"); DropField(); - return PM3_ESOFT; + return PM3_ESOFT; } if (pagemap == PICOPASS_NON_SECURE_PAGEMODE) { - PrintAndLogEx(INFO, "Dumping all available memory, block 3 - %u (0x%02x)",app_limit1 , app_limit1); + PrintAndLogEx(INFO, "Dumping all available memory, block 3 - %u (0x%02x)", app_limit1, app_limit1); if (auth) { PrintAndLogEx(INFO, "No keys needed, ignoring user supplied key"); } @@ -1703,7 +1703,7 @@ static int CmdHFiClassDump(const char *Cmd) { .end_block = app_limit1, }; memcpy(payload.req.key, KEY, 8); - + // tags configured for NON SECURE PAGE, acts different if (pagemap == PICOPASS_NON_SECURE_PAGEMODE) { payload.start_block = 3; @@ -1711,9 +1711,9 @@ static int CmdHFiClassDump(const char *Cmd) { } else { payload.start_block = 6; } - + clearCommandBuffer(); - SendCommandNG(CMD_HF_ICLASS_DUMP, (uint8_t*)&payload, sizeof(payload)); + SendCommandNG(CMD_HF_ICLASS_DUMP, (uint8_t *)&payload, sizeof(payload)); while (true) { printf("."); @@ -1757,20 +1757,20 @@ static int CmdHFiClassDump(const char *Cmd) { return PM3_ETIMEOUT; } - if (pagemap == PICOPASS_NON_SECURE_PAGEMODE) { + if (pagemap == PICOPASS_NON_SECURE_PAGEMODE) { // all memory available - memcpy(tag_data + (8 * 3), tempbuf + (8 * 3), (blocks_read * 8) ); + memcpy(tag_data + (8 * 3), tempbuf + (8 * 3), (blocks_read * 8)); } else { // div key KD memcpy(tag_data + (8 * 3), tempbuf + (8 * 3), 8); // AIA data memcpy(tag_data + (8 * 5), tempbuf + (8 * 5), 8); // AA1 data - memcpy(tag_data + (8 * 6), tempbuf + (8 * 6), (blocks_read * 8) ); + memcpy(tag_data + (8 * 6), tempbuf + (8 * 6), (blocks_read * 8)); } uint16_t bytes_got = (app_limit1 + 1) * 8; - + // try AA2 Kc, Credit bool aa2_success = false; @@ -1778,14 +1778,14 @@ static int CmdHFiClassDump(const char *Cmd) { // AA2 authenticate credit key memcpy(payload.req.key, CreditKEY, 8); - + payload.req.use_credit_key = true; payload.start_block = app_limit1 + 1; payload.end_block = app_limit2; payload.req.do_auth = true; clearCommandBuffer(); - SendCommandNG(CMD_HF_ICLASS_DUMP, (uint8_t*)&payload, sizeof(payload)); + SendCommandNG(CMD_HF_ICLASS_DUMP, (uint8_t *)&payload, sizeof(payload)); while (true) { printf("."); @@ -1825,20 +1825,20 @@ static int CmdHFiClassDump(const char *Cmd) { PrintAndLogEx(WARNING, "command execution time out"); goto write_dump; } - + // div key KC memcpy(tag_data + (8 * 4), tempbuf + (8 * 4), 8); // AA2 data - memcpy(tag_data + (8 * (app_limit1 + 1)), tempbuf + (8 * (app_limit1 + 1)), (blocks_read * 8) ); + memcpy(tag_data + (8 * (app_limit1 + 1)), tempbuf + (8 * (app_limit1 + 1)), (blocks_read * 8)); bytes_got = (blocks_read * 8); - + aa2_success = true; } write_dump: - + if (have_credit_key && pagemap != 0x01 && aa2_success == false) PrintAndLogEx(INFO, "Reading AA2 failed. dumping AA1 data to file"); @@ -1859,7 +1859,7 @@ write_dump: saveFile(filename, ".bin", tag_data, bytes_got); saveFileEML(filename, tag_data, bytes_got, 8); saveFileJSON(filename, jsfIclass, tag_data, bytes_got, NULL); - + PrintAndLogEx(HINT, "Try `" _YELLOW_("hf iclass decrypt") "` to decrypt dump file"); PrintAndLogEx(HINT, "Try `" _YELLOW_("hf iclass view") "` to view dump file"); PrintAndLogEx(NORMAL, ""); @@ -1867,55 +1867,55 @@ write_dump: } static int iclass_write_block(uint8_t blockno, uint8_t *bldata, uint8_t *KEY, bool use_credit_key, bool elite, bool rawkey, bool verbose) { -/* - uint8_t MAC[4] = {0x00, 0x00, 0x00, 0x00}; - uint8_t div_key[8] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; - if (select_and_auth(KEY, MAC, div_key, use_credit_key, elite, rawkey, verbose) == false) { - return PM3_ESOFT; - } + /* + uint8_t MAC[4] = {0x00, 0x00, 0x00, 0x00}; + uint8_t div_key[8] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; + if (select_and_auth(KEY, MAC, div_key, use_credit_key, elite, rawkey, verbose) == false) { + return PM3_ESOFT; + } - calc_wb_mac(blockno, bldata, div_key, MAC); + calc_wb_mac(blockno, bldata, div_key, MAC); - struct p { + struct p { + uint8_t blockno; + uint8_t data[12]; + } PACKED payload; + payload.blockno = blockno; + + memcpy(payload.data, bldata, 8); + memcpy(payload.data + 8, MAC, 4); + + + // + typedef struct { + uint8_t key[8]; + bool use_raw; + bool use_elite; + bool use_credit_key; + bool send_reply; + bool do_auth; uint8_t blockno; - uint8_t data[12]; - } PACKED payload; - payload.blockno = blockno; + } PACKED iclass_auth_req_t; - memcpy(payload.data, bldata, 8); - memcpy(payload.data + 8, MAC, 4); - - -// -typedef struct { - uint8_t key[8]; - bool use_raw; - bool use_elite; - bool use_credit_key; - bool send_reply; - bool do_auth; - uint8_t blockno; -} PACKED iclass_auth_req_t; + // iCLASS write block request data structure + typedef struct { + iclass_auth_req_t req; + uint8_t data[8]; + } PACKED iclass_writeblock_req_t; -// iCLASS write block request data structure -typedef struct { - iclass_auth_req_t req; - uint8_t data[8]; -} PACKED iclass_writeblock_req_t; - - -*/ -iclass_writeblock_req_t payload = { + + */ + iclass_writeblock_req_t payload = { .req.use_raw = rawkey, .req.use_elite = elite, .req.use_credit_key = use_credit_key, .req.blockno = blockno, .req.send_reply = true, - .req.do_auth = true, + .req.do_auth = true, }; memcpy(payload.req.key, KEY, 8); memcpy(payload.data, bldata, sizeof(payload.data)); - + clearCommandBuffer(); SendCommandNG(CMD_HF_ICLASS_WRITEBL, (uint8_t *)&payload, sizeof(payload)); PacketResponseNG resp; @@ -2230,26 +2230,26 @@ static int CmdHFiClassRestore(const char *Cmd) { } static int iclass_read_block(uint8_t *KEY, uint8_t blockno, uint8_t keyType, bool elite, bool rawkey, bool verbose, bool auth, uint8_t *out) { - + iclass_auth_req_t payload = { .use_raw = rawkey, .use_elite = elite, .use_credit_key = (keyType == 0x18), .blockno = blockno, .send_reply = true, - .do_auth = auth, + .do_auth = auth, }; memcpy(payload.key, KEY, 8); - + PacketResponseNG resp; - clearCommandBuffer(); - SendCommandNG(CMD_HF_ICLASS_READBL, (uint8_t*)&payload, sizeof(payload)); + clearCommandBuffer(); + SendCommandNG(CMD_HF_ICLASS_READBL, (uint8_t *)&payload, sizeof(payload)); if (WaitForResponseTimeout(CMD_HF_ICLASS_READBL, &resp, 2000) == false) { if (verbose) PrintAndLogEx(WARNING, "Command execute timeout"); return PM3_ETIMEOUT; } - + if (resp.status != PM3_SUCCESS) { if (verbose) PrintAndLogEx(ERR, "failed to communicate with card"); return PM3_EWRONGANSWER; @@ -2355,24 +2355,24 @@ static int CmdHFiClass_ReadBlock(const char *Cmd) { if (auth == false && verbose) { PrintAndLogEx(WARNING, "warning: no authentication used with read. Typical for cards configured toin `non-secure page`"); - + } uint8_t data[8] = {0}; int res = iclass_read_block(KEY, blockno, keyType, elite, rawkey, verbose, auth, data); if (res != PM3_SUCCESS) return res; - + if (blockno < 6 || blockno > 7) return PM3_SUCCESS; - + if (memcmp(data, empty, 8) == 0) return PM3_SUCCESS; bool use_sc = IsCryptoHelperPresent(verbose); - if (use_sc == false) + if (use_sc == false) return PM3_SUCCESS; - + // crypto helper available. PrintAndLogEx(INFO, "----------------------------- " _CYAN_("cardhelper") " -----------------------------"); @@ -2415,7 +2415,7 @@ static int CmdHFiClass_ReadBlock(const char *Cmd) { i &= 0x3C; PrintAndLogEx(SUCCESS, " bin : %s", binstr + i); - PrintAndLogEx(INFO, ""); + PrintAndLogEx(INFO, ""); PrintAndLogEx(INFO, "------------------------------ " _CYAN_("wiegand") " -------------------------------"); wiegand_message_t packed = initialize_message_object(top, mid, bot); HIDTryUnpack(&packed, true); @@ -2465,8 +2465,8 @@ void printIclassDumpContents(uint8_t *iclass_dump, uint8_t startblock, uint8_t e picopass_hdr *hdr = (picopass_hdr *)iclass_dump; // picopass_ns_hdr *ns_hdr = (picopass_ns_hdr *)iclass_dump; // uint8_t pagemap = get_pagemap(hdr); -// if (pagemap == PICOPASS_NON_SECURE_PAGEMODE) { } - +// if (pagemap == PICOPASS_NON_SECURE_PAGEMODE) { } + uint8_t lock = hdr->conf.block_writelock; // is chip in ReadOnly (RO) @@ -2505,11 +2505,11 @@ void printIclassDumpContents(uint8_t *iclass_dump, uint8_t startblock, uint8_t e PrintAndLogEx(INFO, "------+----+-------------------------+----------"); while (i <= endblock) { uint8_t *blk = iclass_dump + (i * 8); - + bool bl_lock = false; - if ( ro == false ) { - switch(i) { - case 12: { + if (ro == false) { + switch (i) { + case 12: { bl_lock = ((lock & 0x40) == 0); break; } @@ -2541,7 +2541,7 @@ void printIclassDumpContents(uint8_t *iclass_dump, uint8_t startblock, uint8_t e } else { bl_lock = true; } - + PrintAndLogEx(INFO, " %c |0x%02X| %s", (bl_lock) ? 'x' : ' ', i, sprint_hex_ascii(blk, 8)); i++; } @@ -2600,7 +2600,7 @@ static int CmdHFiClassView(const char *Cmd) { PrintAndLogEx(INFO, "Printing blocks from"); PrintAndLogEx(INFO, "start " _YELLOW_("0x%02x") " end " _YELLOW_("0x%02x"), (startblock == 0) ? 6 : startblock, endblock); } - + print_picopass_header((picopass_hdr *) dump); print_picopass_info((picopass_hdr *) dump); @@ -2666,7 +2666,7 @@ static int CmdHFiClassCalcNewKey(const char *Cmd) { bool elite = false; bool errors = false; uint8_t cmdp = 0; - + while (param_getchar(Cmd, cmdp) != 0x00 && !errors) { switch (tolower(param_getchar(Cmd, cmdp))) { case 'h': @@ -2737,7 +2737,7 @@ static int CmdHFiClassCalcNewKey(const char *Cmd) { } HFiClassCalcNewKey(CSN, OLDKEY, NEWKEY, xor_div_key, elite, old_elite, true); - + return PM3_SUCCESS; } @@ -3045,7 +3045,7 @@ static int CmdHFiClassCheckKeys(const char *Cmd) { clearCommandBuffer(); SendCommandOLD(CMD_HF_ICLASS_CHKKEYS, flags, keys, 0, pre + key_offset, 4 * keys); PacketResponseNG resp; - + bool looped = false; while (!WaitForResponseTimeout(CMD_HF_ICLASS_CHKKEYS, &resp, 2000)) { timeout++; @@ -3252,7 +3252,7 @@ static int CmdHFiClassLookUp(const char *Cmd) { // binsearch item = (iclass_prekey_t *) bsearch(&lookup, prekey, keycount, sizeof(iclass_prekey_t), cmp_uint32); - + if (item != NULL) { PrintAndLogEx(SUCCESS, "Found valid key " _GREEN_("%s"), sprint_hex(item->key, 8)); add_key(item->key); @@ -3453,15 +3453,15 @@ static command_t CommandTable[] = { {"-----------", CmdHelp, AlwaysAvailable, "--------------------- " _CYAN_("recovery") " ---------------------"}, {"chk", CmdHFiClassCheckKeys, AlwaysAvailable, "[options..] Check keys"}, {"loclass", CmdHFiClass_loclass, AlwaysAvailable, "[options..] Use loclass to perform bruteforce reader attack"}, - {"lookup", CmdHFiClassLookUp, AlwaysAvailable, "[options..] Uses authentication trace to check for key in dictionary file"}, + {"lookup", CmdHFiClassLookUp, AlwaysAvailable, "[options..] Uses authentication trace to check for key in dictionary file"}, {"replay", CmdHFiClassReader_Replay, IfPm3Iclass, " Read Picopass / iCLASS tag via replay attack"}, {"-----------", CmdHelp, AlwaysAvailable, "--------------------- " _CYAN_("simulation") " ---------------------"}, {"sim", CmdHFiClassSim, IfPm3Iclass, "[options..] Simulate iCLASS tag"}, {"eload", CmdHFiClassELoad, IfPm3Iclass, "[f ] Load Picopass / iCLASS dump file into emulator memory"}, - {"esave", CmdHFiClassESave, IfPm3Iclass, "[f ] Save emulator memory to file"}, + {"esave", CmdHFiClassESave, IfPm3Iclass, "[f ] Save emulator memory to file"}, - {"-----------", CmdHelp, AlwaysAvailable, "--------------------- " _CYAN_("utils") " ---------------------"}, + {"-----------", CmdHelp, AlwaysAvailable, "--------------------- " _CYAN_("utils") " ---------------------"}, {"calcnewkey", CmdHFiClassCalcNewKey, AlwaysAvailable, "[options..] Calc diversified keys (blocks 3 & 4) to write new keys"}, {"encrypt", CmdHFiClassEncryptBlk, AlwaysAvailable, "[options..] Encrypt given block data"}, {"decrypt", CmdHFiClassDecrypt, AlwaysAvailable, "[options..] Decrypt given block data or tag dump file" }, @@ -3484,16 +3484,16 @@ int CmdHFiClass(const char *Cmd) { } //static void test_credential_type(void) { - // need AA1 key - // Block 5 -> tells if its a legacy or SIO, also tells which key to use. - - // tech | blocks used | desc | num of payloads - // -------+-----------------------+-----------------------------------+------ - // legacy | 6,7,8,9 | AA!, Access control payload | 1 - // SE | 6,7,8,9,10,11,12 | AA1, Secure identity object (SIO) | 1 - // SR | 6,7,8,9, | AA1, Access control payload | 2 - // | 10,11,12,13,14,15,16 | AA1, Secure identity object (SIO) | - // SEOS | | | +// need AA1 key +// Block 5 -> tells if its a legacy or SIO, also tells which key to use. + +// tech | blocks used | desc | num of payloads +// -------+-----------------------+-----------------------------------+------ +// legacy | 6,7,8,9 | AA!, Access control payload | 1 +// SE | 6,7,8,9,10,11,12 | AA1, Secure identity object (SIO) | 1 +// SR | 6,7,8,9, | AA1, Access control payload | 2 +// | 10,11,12,13,14,15,16 | AA1, Secure identity object (SIO) | +// SEOS | | | //} int info_iclass(void) { @@ -3528,32 +3528,32 @@ int info_iclass(void) { if (readStatus & FLAG_ICLASS_CONF) { PrintAndLogEx(SUCCESS, " Config: %s (Card configuration)", sprint_hex((uint8_t *)&hdr->conf, sizeof(hdr->conf))); } - + // page mapping. If fuse0|1 == 0x01, card is in non-secure mode, with CSN, CONF, AIA as top 3 blocks. // page9 in http://www.proxmark.org/files/Documents/13.56%20MHz%20-%20iClass/DS%20Picopass%202KS%20V1-0.pdf uint8_t pagemap = get_pagemap(hdr); if (pagemap == PICOPASS_NON_SECURE_PAGEMODE) { PrintAndLogEx(SUCCESS, " AIA: %s (Application Issuer area)", sprint_hex(ns_hdr->app_issuer_area, sizeof(ns_hdr->app_issuer_area))); - } else { + } else { if (readStatus & FLAG_ICLASS_CC) { PrintAndLogEx(SUCCESS, "E-purse: %s (Card challenge, CC)", sprint_hex(hdr->epurse, sizeof(hdr->epurse))); } - + PrintAndLogEx(SUCCESS, " Kd: %s (Debit key, hidden)", sprint_hex(hdr->key_d, sizeof(hdr->key_d))); PrintAndLogEx(SUCCESS, " Kc: %s (Credit key, hidden)", sprint_hex(hdr->key_c, sizeof(hdr->key_c))); if (readStatus & FLAG_ICLASS_AIA) { PrintAndLogEx(SUCCESS, " AIA: %s (Application Issuer area)", sprint_hex(hdr->app_issuer_area, sizeof(hdr->app_issuer_area))); - } + } } if (readStatus & FLAG_ICLASS_CONF) { - print_picopass_info(hdr); + print_picopass_info(hdr); } PrintAndLogEx(INFO, "------ " _CYAN_("Fingerprint") " ------"); - + uint8_t aia[8]; if (pagemap == PICOPASS_NON_SECURE_PAGEMODE) memcpy(aia, ns_hdr->app_issuer_area, sizeof(aia)); @@ -3565,7 +3565,7 @@ int info_iclass(void) { bool legacy = (memcmp(aia, "\xff\xff\xff\xff\xff\xff\xff\xff", 8) == 0); bool se_enabled = (memcmp(aia, "\xff\xff\xff\x00\x06\xff\xff\xff", 8) == 0); - + if (isHidRange) { PrintAndLogEx(SUCCESS, "CSN is in HID range"); if (legacy) diff --git a/client/src/cmdhfmf.c b/client/src/cmdhfmf.c index 5c554a792..89429dcf9 100644 --- a/client/src/cmdhfmf.c +++ b/client/src/cmdhfmf.c @@ -1720,7 +1720,7 @@ static int CmdHF14AMfNestedHard(const char *Cmd) { } cmdp++; break; - } + } case 't': tests = param_get32ex(Cmd, cmdp + 1, 100, 10); if (!param_gethex(Cmd, cmdp + 2, trgkey, 12)) { @@ -1858,8 +1858,8 @@ static int CmdHF14AMfNestedHard(const char *Cmd) { trgKeyType ? 'B' : 'A', trgkey[0], trgkey[1], trgkey[2], trgkey[3], trgkey[4], trgkey[5], know_target_key ? "" : " (not set)" - ); - PrintAndLogEx(INFO , "File action: %s, Slow: %s, Tests: %d ", + ); + PrintAndLogEx(INFO, "File action: %s, Slow: %s, Tests: %d ", nonce_file_write ? "write" : nonce_file_read ? "read" : "none", slow ? "Yes" : "No", tests); @@ -1867,7 +1867,7 @@ static int CmdHF14AMfNestedHard(const char *Cmd) { uint64_t foundkey = 0; int16_t isOK = mfnestedhard(blockNo, keyType, key, trgBlockNo, trgKeyType, know_target_key ? trgkey : NULL, nonce_file_read, nonce_file_write, slow, tests, &foundkey, filename); - if (tests == 0) + if (tests == 0) DropField(); if (isOK) { diff --git a/client/src/cmdhfmfdes.c b/client/src/cmdhfmfdes.c index 0e7e0f678..c7fa78e0f 100644 --- a/client/src/cmdhfmfdes.c +++ b/client/src/cmdhfmfdes.c @@ -1864,7 +1864,7 @@ static int getKeySettings(uint8_t *aid) { // KEY Settings - AMK uint8_t num_keys = 0; uint8_t key_setting = 0; - mifare_des_authalgo_t algo=MFDES_ALGO_DES; + mifare_des_authalgo_t algo = MFDES_ALGO_DES; res = key_setting_to_algo(aid, &key_setting, &algo, &num_keys); if (res == PM3_SUCCESS) { @@ -1916,7 +1916,7 @@ static int getKeySettings(uint8_t *aid) { // KEY Settings - AMK uint8_t num_keys = 0; uint8_t key_setting = 0; - mifare_des_authalgo_t algo=MFDES_ALGO_DES; + mifare_des_authalgo_t algo = MFDES_ALGO_DES; res = key_setting_to_algo(aid, &key_setting, &algo, &num_keys); if (res == PM3_SUCCESS) { desfire_print_keysetting(key_setting, num_keys, algo); @@ -2669,7 +2669,7 @@ static int CmdHF14ADesReadData(const char *Cmd) { if (res_flen) { PrintAndLogEx(ERR, "File size input error"); - return PM3_EINVARG; + return PM3_EINVARG; } swap24(filesize); @@ -2859,7 +2859,7 @@ static int CmdHF14ADesWriteData(const char *Cmd) { // with 2char hex, 512bytes could be input. // Instead large binary inputs should be BINARY files and written to card. int dlength = 512; - uint8_t data[512] = {0}; + uint8_t data[512] = {0}; int res_data = CLIParamHexToBuf(arg_get_str(ctx, 3), data, 512, &dlength); int type = arg_get_int(ctx, 4); @@ -3767,12 +3767,12 @@ static int CmdHF14ADesChangeKey(const char *Cmd) { uint8_t key[24] = {0}; int keylen = 0; int res_klen = CLIParamHexToBuf(arg_get_str(ctx, 3), key, 24, &keylen); - + uint8_t newcmdAuthAlgo = arg_get_int_def(ctx, 4, 0); uint8_t newkey[24] = {0}; int newkeylen = 0; int res_newklen = CLIParamHexToBuf(arg_get_str(ctx, 5), newkey, 24, &newkeylen); - + uint8_t aesversion = arg_get_int_def(ctx, 6, 0); CLIParserFree(ctx); @@ -4535,7 +4535,7 @@ static int CmdHF14aDesNDEF(const char *Cmd) { if (res == PM3_SUCCESS) { uint32_t len = le24toh(fdata.length); NDEFDecodeAndPrint(data, datalen, verbose); - + } else { PrintAndLogEx(ERR, "Couldn't read value. Error %d", res); res = handler_desfire_select_application(aid); diff --git a/client/src/cmdlf.c b/client/src/cmdlf.c index 3daf91e2f..7d12fa972 100644 --- a/client/src/cmdlf.c +++ b/client/src/cmdlf.c @@ -1206,7 +1206,7 @@ static bool CheckChipType(bool getDeviceData) { PrintAndLogEx(HINT, "Hint: try " _YELLOW_("`lf t55xx`") " commands"); retval = true; } - + // check for em4x50 chips if (detect_4x50_block()) { PrintAndLogEx(SUCCESS, "Chipset detection: " _GREEN_("EM4x50")); @@ -1293,7 +1293,7 @@ int CmdLFfind(const char *Cmd) { if (demodParadox() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("Paradox ID") " found!"); goto out;} if (demodNexWatch() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("NexWatch ID") " found!"); goto out;} if (demodIndala() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("Indala ID") " found!"); goto out;} - + if (demodEM410x() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("EM410x ID") " found!"); goto out;} if (demodFDX() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("FDX-B ID") " found!"); goto out;} if (demodGuard() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("Guardall G-Prox II ID") " found!"); goto out; } @@ -1310,7 +1310,7 @@ int CmdLFfind(const char *Cmd) { if (demodSecurakey() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("Securakey ID") " found!"); goto out;} if (demodViking() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("Viking ID") " found!"); goto out;} if (demodGallagher() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("GALLAGHER ID") " found!"); goto out;} - + // if (demodTI() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("Texas Instrument ID") " found!"); goto out;} //if (demodFermax() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("Fermax ID") " found!"); goto out;} diff --git a/client/src/cmdlfem4x.c b/client/src/cmdlfem4x.c index bb07adaaa..423c06c58 100644 --- a/client/src/cmdlfem4x.c +++ b/client/src/cmdlfem4x.c @@ -111,7 +111,7 @@ static int usage_lf_em410x_brute(void) { PrintAndLogEx(NORMAL, "Examples:"); PrintAndLogEx(NORMAL, _YELLOW_(" lf em 410x_brute ids.txt")); PrintAndLogEx(NORMAL, _YELLOW_(" lf em 410x_brute ids.txt c 32")); - PrintAndLogEx(NORMAL, _YELLOW_( " lf em 410x_brute ids.txt d 3000")); + PrintAndLogEx(NORMAL, _YELLOW_(" lf em 410x_brute ids.txt d 3000")); PrintAndLogEx(NORMAL, _YELLOW_(" lf em 410x_brute ids.txt d 3000 c 32")); return PM3_SUCCESS; } @@ -408,7 +408,7 @@ int AskEm410xDemod(const char *Cmd, uint32_t *hi, uint64_t *lo, bool verbose) { static int CmdEM410xWatch(const char *Cmd) { uint8_t c = tolower(param_getchar(Cmd, 0)); if (c == 'h') return usage_lf_em410x_watch(); - + PrintAndLogEx(SUCCESS, "Watching for EM410x cards - place tag on antenna"); PrintAndLogEx(INFO, "Press pm3-button to stop reading cards"); clearCommandBuffer(); @@ -639,7 +639,7 @@ static int CmdEM410xWrite(const char *Cmd) { } else if (card == 0) { PrintAndLogEx(SUCCESS, "Writing %s tag with UID 0x%010" PRIx64 "(clock rate: %d)", _GREEN_("T5555"), id, clock1); } - + struct { uint8_t card; uint8_t clock; @@ -657,7 +657,7 @@ static int CmdEM410xWrite(const char *Cmd) { PacketResponseNG resp; WaitForResponse(CMD_LF_EM410X_WRITE, &resp); - switch(resp.status) { + switch (resp.status) { case PM3_SUCCESS: { PrintAndLogEx(SUCCESS, "Done"); PrintAndLogEx(HINT, "Hint: try " _YELLOW_("`lf em 410x_read`") " to verify"); diff --git a/client/src/cmdlfem4x50.c b/client/src/cmdlfem4x50.c index c3a5f2dec..03ec3f5dc 100644 --- a/client/src/cmdlfem4x50.c +++ b/client/src/cmdlfem4x50.c @@ -114,8 +114,8 @@ static void prepare_result(const uint8_t *byte, int fwr, int lwr, em4x50_word_t c[j] = 0; for (int j = 0; j < 4; j++) { - words[i].byte[j] = byte[i*7+j]; - words[i].row_parity[j] = (byte[i*7+4] >> (3-j)) & 1; + words[i].byte[j] = byte[i * 7 + j]; + words[i].row_parity[j] = (byte[i * 7 + 4] >> (3 - j)) & 1; // collect parities p = 0; @@ -126,7 +126,7 @@ static void prepare_result(const uint8_t *byte, int fwr, int lwr, em4x50_word_t p ^= (words[i].byte[j] >> k) & 1; // column parity - c[k] ^= (words[i].byte[j] >> (7-k)) & 1; + c[k] ^= (words[i].byte[j] >> (7 - k)) & 1; } // check row parities @@ -137,17 +137,17 @@ static void prepare_result(const uint8_t *byte, int fwr, int lwr, em4x50_word_t } // check column parities - words[i].col_parity = byte[i*7+5]; + words[i].col_parity = byte[i * 7 + 5]; for (int j = 0; j < 8; j++) { - words[i].cparity[j] = (((words[i].col_parity >> (7-j)) & 1) == c[j]) ? true : false; + words[i].cparity[j] = (((words[i].col_parity >> (7 - j)) & 1) == c[j]) ? true : false; if (!words[i].cparity[j]) - words[i].parity = false; + words[i].parity = false; } // check stop bit - words[i].stopbit = byte[i*7+6] & 1; + words[i].stopbit = byte[i * 7 + 6] & 1; if (words[i].stopbit == 1) words[i].stopparity = false; @@ -166,7 +166,7 @@ static void print_result(const em4x50_word_t *words, int fwr, int lwr) { for (int i = fwr; i <= lwr; i++) { char s[50] = {0}; - switch(i) { + switch (i) { case EM4X50_DEVICE_PASSWORD: sprintf(s, _YELLOW_("password, write only")); break; @@ -191,13 +191,13 @@ static void print_result(const em4x50_word_t *words, int fwr, int lwr) { for (int j = 3; j >= 0; j--) { sprintf(r + strlen(r), "%02x ", reflect8(words[i].byte[j])); } - + PrintAndLogEx(INFO, " %2i | " _GREEN_("%s") "| %s| %s", - i, - sprint_hex(words[i].byte, 4), - r, - s - ); + i, + sprint_hex(words[i].byte, 4), + r, + s + ); } PrintAndLogEx(INFO, "----+-------------+-------------+--------------------"); } @@ -226,14 +226,14 @@ static void print_info_result(uint8_t *data, bool verbose) { PrintAndLogEx(NORMAL, ""); PrintAndLogEx(INFO, _YELLOW_("EM4x50 data:")); print_result(words, 0, EM4X50_NO_WORDS - 1); - + // configuration section PrintAndLogEx(NORMAL, ""); PrintAndLogEx(INFO, "---- " _CYAN_("Configuration") " ----"); PrintAndLogEx(INFO, "first word read %3i", fwr); PrintAndLogEx(INFO, "last word read %3i", lwr); - PrintAndLogEx(INFO, "password check %3s", (bpwc) ? _RED_("on"): _GREEN_("off")); + PrintAndLogEx(INFO, "password check %3s", (bpwc) ? _RED_("on") : _GREEN_("off")); PrintAndLogEx(INFO, "read after write %3s", (braw) ? "on" : "off"); PrintAndLogEx(NORMAL, ""); PrintAndLogEx(INFO, "--------- " _CYAN_("Protection") " ---------"); @@ -288,9 +288,9 @@ int CmdEM4x50Info(const char *Cmd) { case 'p': if (param_gethex(Cmd, cmdp + 1, etd.password, 8)) { - PrintAndLogEx(FAILED, "\n password has to be 8 hex symbols\n"); - return PM3_EINVARG; - } + PrintAndLogEx(FAILED, "\n password has to be 8 hex symbols\n"); + return PM3_EINVARG; + } etd.pwd_given = true; cmdp += 2; break; @@ -308,8 +308,8 @@ int CmdEM4x50Info(const char *Cmd) { } // validation - if (errors) - return usage_lf_em4x50_info(); + if (errors) + return usage_lf_em4x50_info(); clearCommandBuffer(); SendCommandNG(CMD_LF_EM4X50_INFO, (uint8_t *)&etd, sizeof(etd)); @@ -346,17 +346,17 @@ int CmdEM4x50Write(const char *Cmd) { } case 'p': { if (param_gethex(Cmd, cmdp + 1, etd.password, 8)) { - PrintAndLogEx(FAILED, "\n password has to be 8 hex symbols\n"); - return PM3_EINVARG; - } + PrintAndLogEx(FAILED, "\n password has to be 8 hex symbols\n"); + return PM3_EINVARG; + } etd.pwd_given = true; cmdp += 2; break; } case 'w': { if (param_gethex(Cmd, cmdp + 1, etd.word, 8)) { - PrintAndLogEx(FAILED, "\n word has to be 8 hex symbols\n"); - return PM3_EINVARG; + PrintAndLogEx(FAILED, "\n word has to be 8 hex symbols\n"); + return PM3_EINVARG; } bword = true; cmdp += 2; @@ -383,7 +383,7 @@ int CmdEM4x50Write(const char *Cmd) { } if (errors || !bword || !baddr) - return usage_lf_em4x50_write(); + return usage_lf_em4x50_write(); clearCommandBuffer(); SendCommandNG(CMD_LF_EM4X50_WRITE, (uint8_t *)&etd, sizeof(etd)); @@ -428,7 +428,7 @@ static void print_write_password_result(PacketResponseNG *resp, const em4x50_dat sprintf(pstring, "\n writing new password " _GREEN_("ok")); strcat(string, pstring); - PrintAndLogEx(NORMAL,"%s\n", string); + PrintAndLogEx(NORMAL, "%s\n", string); } int CmdEM4x50WritePassword(const char *Cmd) { @@ -452,8 +452,8 @@ int CmdEM4x50WritePassword(const char *Cmd) { case 'p': if (param_gethex(Cmd, cmdp + 1, etd.password, 8)) { - PrintAndLogEx(FAILED, "\n password has to be 8 hex symbols\n"); - return PM3_EINVARG; + PrintAndLogEx(FAILED, "\n password has to be 8 hex symbols\n"); + return PM3_EINVARG; } bpwd = true; etd.pwd_given = true; @@ -462,9 +462,9 @@ int CmdEM4x50WritePassword(const char *Cmd) { case 'n': if (param_gethex(Cmd, cmdp + 1, etd.new_password, 8)) { - PrintAndLogEx(FAILED, "\n password has to be 8 hex symbols\n"); - return PM3_EINVARG; - } + PrintAndLogEx(FAILED, "\n password has to be 8 hex symbols\n"); + return PM3_EINVARG; + } bnpwd = true; etd.newpwd_given = true; cmdp += 2; @@ -478,7 +478,7 @@ int CmdEM4x50WritePassword(const char *Cmd) { } if (errors || !bpwd || !bnpwd) - return usage_lf_em4x50_write_password(); + return usage_lf_em4x50_write_password(); clearCommandBuffer(); SendCommandNG(CMD_LF_EM4X50_WRITE_PASSWORD, (uint8_t *)&etd, sizeof(etd)); @@ -493,7 +493,7 @@ int CmdEM4x50WritePassword(const char *Cmd) { if (success) print_write_password_result(&resp, &etd); else - PrintAndLogEx(NORMAL,"\nwriting password " _RED_("failed") "\n"); + PrintAndLogEx(NORMAL, "\nwriting password " _RED_("failed") "\n"); return (success) ? PM3_SUCCESS : PM3_ESOFT; } @@ -583,9 +583,9 @@ int CmdEM4x50Read(const char *Cmd) { } case 'p': { if (param_gethex(Cmd, cmdp + 1, etd.password, 8)) { - PrintAndLogEx(FAILED, "\n password has to be 8 hex symbols\n"); - return PM3_EINVARG; - } + PrintAndLogEx(FAILED, "\n password has to be 8 hex symbols\n"); + return PM3_EINVARG; + } etd.pwd_given = true; cmdp += 2; break; @@ -599,7 +599,7 @@ int CmdEM4x50Read(const char *Cmd) { } if (errors || strlen(Cmd) == 0 || etd.addr_given == false) - return usage_lf_em4x50_read(); + return usage_lf_em4x50_read(); return em4x50_read(&etd, NULL, true); } @@ -627,9 +627,9 @@ int CmdEM4x50Dump(const char *Cmd) { break; case 'p': { if (param_gethex(Cmd, cmdp + 1, etd.password, 8)) { - PrintAndLogEx(FAILED, "\n password has to be 8 hex symbols\n"); - return PM3_EINVARG; - } + PrintAndLogEx(FAILED, "\n password has to be 8 hex symbols\n"); + return PM3_EINVARG; + } etd.pwd_given = true; cmdp += 2; break; @@ -642,8 +642,8 @@ int CmdEM4x50Dump(const char *Cmd) { } // validation - if (errors) - return usage_lf_em4x50_dump(); + if (errors) + return usage_lf_em4x50_dump(); PrintAndLogEx(INFO, "reading EM4x50 tag"); clearCommandBuffer(); @@ -675,8 +675,8 @@ int CmdEM4x50Dump(const char *Cmd) { } uint8_t data[EM4X50_NO_WORDS * 4] = {0}; - for (int i=0; i < EM4X50_NO_WORDS; i++) { - memcpy(data + (i*4), words[i].byte, 4); + for (int i = 0; i < EM4X50_NO_WORDS; i++) { + memcpy(data + (i * 4), words[i].byte, 4); } // saveFileEML will add .eml extension to filename @@ -704,8 +704,8 @@ int CmdEM4x50Wipe(const char *Cmd) { case 'p': if (param_gethex(Cmd, cmdp + 1, etd.password, 8)) { - PrintAndLogEx(FAILED, "\npassword has to be 8 hex symbols\n"); - return PM3_EINVARG; + PrintAndLogEx(FAILED, "\npassword has to be 8 hex symbols\n"); + return PM3_EINVARG; } bpwd = true; cmdp += 2; @@ -719,12 +719,12 @@ int CmdEM4x50Wipe(const char *Cmd) { } if (errors || !bpwd) - return usage_lf_em4x50_wipe(); + return usage_lf_em4x50_wipe(); clearCommandBuffer(); SendCommandNG(CMD_LF_EM4X50_WIPE, (uint8_t *)&etd, sizeof(etd)); - if (!WaitForResponseTimeout(CMD_ACK, &resp, 2*TIMEOUT)) { + if (!WaitForResponseTimeout(CMD_ACK, &resp, 2 * TIMEOUT)) { PrintAndLogEx(WARNING, "\ntimeout while waiting for reply.\n"); return PM3_ETIMEOUT; } @@ -732,9 +732,9 @@ int CmdEM4x50Wipe(const char *Cmd) { // print response bool isOK = resp.status; if (isOK) { - PrintAndLogEx(SUCCESS,"\nwiping data " _GREEN_("ok") "\n"); + PrintAndLogEx(SUCCESS, "\nwiping data " _GREEN_("ok") "\n"); } else { - PrintAndLogEx(FAILED,"\nwiping data " _RED_("failed") "\n"); + PrintAndLogEx(FAILED, "\nwiping data " _RED_("failed") "\n"); return PM3_ESOFT; } diff --git a/client/src/cmdlfhid.c b/client/src/cmdlfhid.c index be34148a6..d73235788 100644 --- a/client/src/cmdlfhid.c +++ b/client/src/cmdlfhid.c @@ -246,10 +246,10 @@ static int CmdHIDDemod(const char *Cmd) { } if (fmtLen == 32 && (lo & 0x40000000)) { //if 32 bit and Kastle bit set PrintAndLogEx(SUCCESS, - "HID Prox (Kastle format) - " _GREEN_("%x%08x (%u)") " - len: " _GREEN_("32") " bit CC: " _GREEN_("%u") " FC: " _GREEN_("%u") " Card: " _GREEN_("%u"), hi, lo, (lo >> 1) & 0xFFFF, cc, fc, cardnum); + "HID Prox (Kastle format) - " _GREEN_("%x%08x (%u)") " - len: " _GREEN_("32") " bit CC: " _GREEN_("%u") " FC: " _GREEN_("%u") " Card: " _GREEN_("%u"), hi, lo, (lo >> 1) & 0xFFFF, cc, fc, cardnum); } else { - PrintAndLogEx(SUCCESS, - "HID Prox - " _GREEN_("%x%08x (%u)") " - len: " _GREEN_("%u") " bit - OEM: " _GREEN_("%03u") " FC: " _GREEN_("%u")" Card: " _GREEN_("%u"), + PrintAndLogEx(SUCCESS, + "HID Prox - " _GREEN_("%x%08x (%u)") " - len: " _GREEN_("%u") " bit - OEM: " _GREEN_("%03u") " FC: " _GREEN_("%u")" Card: " _GREEN_("%u"), hi, lo, cardnum, fmtLen, oem, fc, cardnum); } } @@ -276,7 +276,7 @@ static int CmdHIDWatch(const char *Cmd) { PrintAndLogEx(SUCCESS, "Watching for HID Prox cards - place tag on antenna"); PrintAndLogEx(INFO, "Press pm3-button to stop reading cards"); clearCommandBuffer(); - SendCommandNG(CMD_LF_HID_WATCH, NULL, 0); + SendCommandNG(CMD_LF_HID_WATCH, NULL, 0); PacketResponseNG resp; WaitForResponse(CMD_LF_HID_WATCH, &resp); PrintAndLogEx(INFO, "Done"); diff --git a/client/src/cmdlfhitag.c b/client/src/cmdlfhitag.c index 2bd3b93f4..17a71b8e4 100644 --- a/client/src/cmdlfhitag.c +++ b/client/src/cmdlfhitag.c @@ -738,7 +738,7 @@ void annotateHitag1(char *exp, size_t size, uint8_t *cmd, uint8_t cmdsize, bool } void annotateHitag2(char *exp, size_t size, uint8_t *cmd, uint8_t cmdsize, bool is_response) { - + // iceman: live decrypt of trace? if (is_response) { @@ -774,18 +774,18 @@ void annotateHitag2(char *exp, size_t size, uint8_t *cmd, uint8_t cmdsize, bool } if (cmdsize == 9) { - snprintf(exp, size, "Nr Ar Is response"); - return; + snprintf(exp, size, "Nr Ar Is response"); + return; } } else { if (cmdsize == 9) { - snprintf(exp, size, "Nr Ar"); - return; + snprintf(exp, size, "Nr Ar"); + return; } } - -} + +} void annotateHitagS(char *exp, size_t size, uint8_t *cmd, uint8_t cmdsize, bool is_reader) { diff --git a/client/src/cmdlfindala.c b/client/src/cmdlfindala.c index 421c3001a..4e9cf467b 100644 --- a/client/src/cmdlfindala.c +++ b/client/src/cmdlfindala.c @@ -54,7 +54,7 @@ static int usage_lf_indala_demod(void) { PrintAndLogEx(NORMAL, _YELLOW_(" lf indala demod 32") " = demod a Indala tag from GraphBuffer using a clock of RF/32"); PrintAndLogEx(NORMAL, _YELLOW_(" lf indala demod 32 1") " = demod a Indala tag from GraphBuffer using a clock of RF/32 and inverting data"); PrintAndLogEx(NORMAL, _YELLOW_(" lf indala demod 64 1 0") " = demod a Indala tag from GraphBuffer using a clock of RF/64, inverting data and allowing 0 demod errors"); - PrintAndLogEx(NORMAL, ""); + PrintAndLogEx(NORMAL, ""); return PM3_SUCCESS; } diff --git a/client/src/cmdlfio.c b/client/src/cmdlfio.c index 421ed6927..ce49804a3 100644 --- a/client/src/cmdlfio.c +++ b/client/src/cmdlfio.c @@ -172,7 +172,7 @@ static int CmdIOProxDemod(const char *Cmd) { char crc_str[36] = {0}; if (crc == calccrc) { - snprintf(crc_str, sizeof(crc_str), "(" _GREEN_("ok") ")" ); + snprintf(crc_str, sizeof(crc_str), "(" _GREEN_("ok") ")"); } else { snprintf(crc_str, sizeof(crc_str), "(" _RED_("fail") ") 0x%02X != 0x%02X", crc, calccrc); retval = PM3_ESOFT; diff --git a/client/src/cmdlfkeri.c b/client/src/cmdlfkeri.c index d05c159c0..7bf36c18e 100644 --- a/client/src/cmdlfkeri.c +++ b/client/src/cmdlfkeri.c @@ -190,7 +190,7 @@ int demodKeri(void) { Might be a hash of FC & CN to generate Internal ID */ - PrintAndLogEx(SUCCESS, "KERI - Internal ID: " _GREEN_("%u") ", Raw: %08X%08X" , ID, raw1, raw2); + PrintAndLogEx(SUCCESS, "KERI - Internal ID: " _GREEN_("%u") ", Raw: %08X%08X", ID, raw1, raw2); /* Descramble Data. */ diff --git a/client/src/cmdlfmotorola.c b/client/src/cmdlfmotorola.c index 16d1d8dc5..0a52f570a 100644 --- a/client/src/cmdlfmotorola.c +++ b/client/src/cmdlfmotorola.c @@ -35,7 +35,7 @@ static int CmdMotorolaDemod(const char *Cmd) { } int demodMotorola(void) { - + //PSK1 if (PSKDemod("32 1", true) != PM3_SUCCESS) { PrintAndLogEx(DEBUG, "DEBUG: Error - Motorola: PSK Demod failed"); @@ -118,7 +118,7 @@ int demodMotorola(void) { checksum |= DemodBuffer[62] << 1; // b2 checksum |= DemodBuffer[63] << 0; // b1 - + PrintAndLogEx(SUCCESS, "Motorola - fmt: " _GREEN_("26") " FC: " _GREEN_("%u") " Card: " _GREEN_("%u") ", Raw: %08X%08X", fc, csn, raw1, raw2); PrintAndLogEx(DEBUG, "checksum: " _GREEN_("%1d%1d"), checksum >> 1 & 0x01, checksum & 0x01); return PM3_SUCCESS; diff --git a/client/src/cmdlfnexwatch.c b/client/src/cmdlfnexwatch.c index 11541b29c..57f7ab03b 100644 --- a/client/src/cmdlfnexwatch.c +++ b/client/src/cmdlfnexwatch.c @@ -250,7 +250,7 @@ int demodNexWatch(void) { } else { PrintAndLogEx(DEBUG, " parity : %s (0x%X != 0x%X)", _RED_("fail"), parity, calc_parity); } - + PrintAndLogEx(DEBUG, " checksum : %s (0x%02X)", (m_idx < ARRAYLEN(items)) ? _GREEN_("ok") : _RED_("fail"), chk); PrintAndLogEx(INFO, " Raw : " _YELLOW_("%"PRIX32"%"PRIX32"%"PRIX32), raw1, raw2, raw3); diff --git a/client/src/cmdlfpac.c b/client/src/cmdlfpac.c index f162b7342..a35079794 100644 --- a/client/src/cmdlfpac.c +++ b/client/src/cmdlfpac.c @@ -88,7 +88,7 @@ static int demodbuf_to_pacid(uint8_t *src, const size_t src_size, uint8_t *dst, } // overwrite checksum byte with null terminator - dst[dataLength - 1] = 0; + dst[dataLength - 1] = 0; return PM3_SUCCESS; } diff --git a/client/src/cmdlfparadox.c b/client/src/cmdlfparadox.c index 7d82f8437..1cf7c5c47 100644 --- a/client/src/cmdlfparadox.c +++ b/client/src/cmdlfparadox.c @@ -64,7 +64,7 @@ const uint8_t paradox_lut[] = { 0x9F, 0xED, 0x7D, 0x59, 0x22, 0x84, 0x21, 0x4E, 0x39, 0x48, 0x12, 0x88, 0x53, 0xDE, 0xBB, 0xE4, 0xB4, 0x2D, 0x4D, 0x55, 0xCA, 0xBE, 0xA3, 0xE2 - }; +}; // FC:108, Card01827 // 00000000 01101100 00000111 00100011 // hex(0xED xor 0x7D xor 0x22 xor 0x84 xor 0xDE xor 0xBB xor 0xE4 xor 0x4D xor 0xA3 xor 0xE2 xor 0x47) 0xFC @@ -132,7 +132,7 @@ int demodParadox(void) { // not manchester data if (bits[i] == bits[i + 1]) { - PrintAndLogEx(WARNING, "Error Manchester at %u", i); + PrintAndLogEx(WARNING, "Error Manchester at %u", i); error++; } @@ -144,7 +144,7 @@ int demodParadox(void) { lo |= 1; // 10 } } - + setDemodBuff(bits, size, idx); setClockGrid(50, wave_idx + (idx * 50)); @@ -163,11 +163,11 @@ int demodParadox(void) { // checksum? uint8_t calc_chksum = 0x47; uint8_t pos = 0; - for(uint8_t i = 0; i < 8; i++ ) { - - uint8_t ice = rawhex[i+1]; - for(uint8_t j = 0x80; j > 0; j >>= 2) { - + for (uint8_t i = 0; i < 8; i++) { + + uint8_t ice = rawhex[i + 1]; + for (uint8_t j = 0x80; j > 0; j >>= 2) { + if (ice & j) { calc_chksum ^= paradox_lut[pos]; } @@ -178,7 +178,7 @@ int demodParadox(void) { uint32_t crc = CRC8Maxim(rawhex + 1, 8); PrintAndLogEx(DEBUG, " FSK/MAN raw : %s", sprint_hex(rawhex, sizeof(rawhex))); PrintAndLogEx(DEBUG, " raw : %s = (maxim crc8) %02x == %02x", sprint_hex(rawhex + 1, 8), crc, calc_chksum); -// PrintAndLogEx(DEBUG, " OTHER sample CRC-8/MAXIM : 55 55 69 A5 55 6A 59 5A = FC"); +// PrintAndLogEx(DEBUG, " OTHER sample CRC-8/MAXIM : 55 55 69 A5 55 6A 59 5A = FC"); uint32_t rawLo = bytebits_to_byte(bits + idx + 64, 32); uint32_t rawHi = bytebits_to_byte(bits + idx + 32, 32); diff --git a/client/src/cmdlft55xx.c b/client/src/cmdlft55xx.c index 4c3f0816e..e9fad9b9d 100644 --- a/client/src/cmdlft55xx.c +++ b/client/src/cmdlft55xx.c @@ -1359,8 +1359,8 @@ bool testKnownConfigBlock(uint32_t block0) { case T55X7_NEDAP_128_CONFIG_BLOCK: case T55X7_VISA2000_CONFIG_BLOCK: case T55X7_SECURAKEY_CONFIG_BLOCK: - case T55X7_PAC_CONFIG_BLOCK: - case T55X7_VERICHIP_CONFIG_BLOCK: + case T55X7_PAC_CONFIG_BLOCK: + case T55X7_VERICHIP_CONFIG_BLOCK: case T55X7_KERI_CONFIG_BLOCK: case T55X7_NEXWATCH_CONFIG_BLOCK: case T55X7_JABLOTRON_CONFIG_BLOCK: @@ -2109,7 +2109,7 @@ static void printT5x7KnownBlock0(uint32_t b0) { break; case T55X7_NEXWATCH_CONFIG_BLOCK: snprintf(s + strlen(s), sizeof(s) - strlen(s), "NexWatch, Quadrakey "); - break; + break; default: break; } diff --git a/client/src/cmdlft55xx.h b/client/src/cmdlft55xx.h index 155e23c77..46043d277 100644 --- a/client/src/cmdlft55xx.h +++ b/client/src/cmdlft55xx.h @@ -38,7 +38,7 @@ // and it should actually be "10000" (16) // #define T55X7_FDXB_CONFIG_BLOCK 0x903F8080 // BiPhase, fdx-b - xtended mode, BiPhase ('57), data rate 32, 4 data blocks #define T55X7_FDXB_CONFIG_BLOCK 0x903F0082 // BiPhase, fdx-b - xtended mode, BiPhase ('50), invert data, data rate 32, 4 data blocks -#define T55X7_FDXB_2_CONFIG_BLOCK 0x00098080 // +#define T55X7_FDXB_2_CONFIG_BLOCK 0x00098080 // #define T55X7_HID_26_CONFIG_BLOCK 0x00107060 // FSK2a, hid 26 bit - compat mode, data rate 50, 3 data blocks #define T55X7_PARADOX_CONFIG_BLOCK 0x00107060 // FSK2a, hid 26 bit - compat mode, data rate 50, 3 data blocks diff --git a/client/src/cmdmain.c b/client/src/cmdmain.c index 1c6cbd82c..e6ecc0919 100644 --- a/client/src/cmdmain.c +++ b/client/src/cmdmain.c @@ -249,7 +249,7 @@ static int CmdPref(const char *Cmd) { static command_t CommandTable[] = { - {"--------",CmdHelp, AlwaysAvailable, "----------------------- " _CYAN_("Technology") " -----------------------"}, + {"--------", CmdHelp, AlwaysAvailable, "----------------------- " _CYAN_("Technology") " -----------------------"}, {"analyse", CmdAnalyse, AlwaysAvailable, "{ Analyse utils... }"}, {"data", CmdData, AlwaysAvailable, "{ Plot window / data buffer manipulation... }"}, @@ -264,7 +264,7 @@ static command_t CommandTable[] = { {"trace", CmdTrace, AlwaysAvailable, "{ Trace manipulation... }"}, {"usart", CmdUsart, IfPm3FpcUsartFromUsb, "{ USART commands... }"}, {"wiegand", CmdWiegand, AlwaysAvailable, "{ Wiegand format manipulation... }"}, - {"--------",CmdHelp, AlwaysAvailable, "----------------------- " _CYAN_("General") " -----------------------"}, + {"--------", CmdHelp, AlwaysAvailable, "----------------------- " _CYAN_("General") " -----------------------"}, {"auto", CmdAuto, IfPm3Present, "Automated detection process for unknown tags"}, {"help", CmdHelp, AlwaysAvailable, "This help. Use " _YELLOW_("' help'") " for details of a particular command."}, {"hints", CmdHints, AlwaysAvailable, "Turn hints on / off"}, diff --git a/client/src/cmdsmartcard.c b/client/src/cmdsmartcard.c index 1265262c2..bc4753b6a 100644 --- a/client/src/cmdsmartcard.c +++ b/client/src/cmdsmartcard.c @@ -467,7 +467,7 @@ static int CmdSmartRaw(const char *Cmd) { uint8_t flags = SC_LOG; if (active || active_select) { - + flags |= (SC_CONNECT | SC_CLEARLOG); if (active_select) flags |= SC_SELECT; diff --git a/client/src/cmdtrace.c b/client/src/cmdtrace.c index a1bcfd184..3458fbad5 100644 --- a/client/src/cmdtrace.c +++ b/client/src/cmdtrace.c @@ -206,10 +206,10 @@ static uint16_t printTraceLine(uint16_t tracepos, uint16_t traceLen, uint8_t *tr return traceLen; } - // adjust for different time scales - if (protocol == ICLASS || protocol == ISO_15693) { - duration *= 32; - } + // adjust for different time scales + if (protocol == ICLASS || protocol == ISO_15693) { + duration *= 32; + } uint8_t *frame = hdr->frame; @@ -275,10 +275,10 @@ static uint16_t printTraceLine(uint16_t tracepos, uint16_t traceLen, uint8_t *tr if (data_len == 0) { if (protocol == ICLASS && duration == 2048) { - sprintf(line[0], ""); - } else if (protocol == ISO_15693 && duration == 512) { - sprintf(line[0], ""); - } else { + sprintf(line[0], ""); + } else if (protocol == ISO_15693 && duration == 512) { + sprintf(line[0], ""); + } else { sprintf(line[0], ""); } } @@ -334,11 +334,11 @@ static uint16_t printTraceLine(uint16_t tracepos, uint16_t traceLen, uint8_t *tr uint32_t previous_end_of_transmission_timestamp = 0; if (prev_eot) { - if (*prev_eot) { - previous_end_of_transmission_timestamp = *prev_eot; - } else { - previous_end_of_transmission_timestamp = hdr->timestamp; - } + if (*prev_eot) { + previous_end_of_transmission_timestamp = *prev_eot; + } else { + previous_end_of_transmission_timestamp = hdr->timestamp; + } } end_of_transmission_timestamp = hdr->timestamp + duration; @@ -355,7 +355,7 @@ static uint16_t printTraceLine(uint16_t tracepos, uint16_t traceLen, uint8_t *tr if (protocol == FELICA) annotateFelica(explanation, sizeof(explanation), frame, data_len); - + if (protocol == PROTO_HITAG1) { annotateHitag1(explanation, sizeof(explanation), frame, data_len, hdr->isResponse); } @@ -405,38 +405,38 @@ static uint16_t printTraceLine(uint16_t tracepos, uint16_t traceLen, uint8_t *tr if (j == 0) { uint32_t time1 = hdr->timestamp - first_hdr->timestamp; - uint32_t time2 = end_of_transmission_timestamp - first_hdr->timestamp; - if (prev_eot) { - time1 = hdr->timestamp - previous_end_of_transmission_timestamp; - time2 = duration; - } + uint32_t time2 = end_of_transmission_timestamp - first_hdr->timestamp; + if (prev_eot) { + time1 = hdr->timestamp - previous_end_of_transmission_timestamp; + time2 = duration; + } if (use_us) { PrintAndLogEx(NORMAL, " %10.1f | %10.1f | %s |%-72s | %s| %s", - (float)time1/13.56, - (float)time2/13.56, - (hdr->isResponse ? "Tag" : _YELLOW_("Rdr")), - line[j], - (j == num_lines - 1) ? crc : " ", - (j == num_lines - 1) ? explanation : "" - ); + (float)time1 / 13.56, + (float)time2 / 13.56, + (hdr->isResponse ? "Tag" : _YELLOW_("Rdr")), + line[j], + (j == num_lines - 1) ? crc : " ", + (j == num_lines - 1) ? explanation : "" + ); } else { PrintAndLogEx(NORMAL, " %10u | %10u | %s |%-72s | %s| %s", - (hdr->timestamp - first_hdr->timestamp), - (end_of_transmission_timestamp - first_hdr->timestamp), - (hdr->isResponse ? "Tag" : _YELLOW_("Rdr")), - line[j], - (j == num_lines - 1) ? crc : " ", - (j == num_lines - 1) ? explanation : "" - ); + (hdr->timestamp - first_hdr->timestamp), + (end_of_transmission_timestamp - first_hdr->timestamp), + (hdr->isResponse ? "Tag" : _YELLOW_("Rdr")), + line[j], + (j == num_lines - 1) ? crc : " ", + (j == num_lines - 1) ? explanation : "" + ); } } else { PrintAndLogEx(NORMAL, " | | |%-72s | %s| %s", - line[j], - (j == num_lines - 1) ? crc : " ", - (j == num_lines - 1) ? explanation : "" - ); + line[j], + (j == num_lines - 1) ? crc : " ", + (j == num_lines - 1) ? explanation : "" + ); } } @@ -683,11 +683,11 @@ int CmdTraceList(const char *Cmd) { } } else { - if (use_relative) { + if (use_relative) { PrintAndLogEx(INFO, _YELLOW_("gap") " = time between transfers. " _YELLOW_("duration") " = duration of data transfer. " _YELLOW_("src") " = source of transfer"); - } else { + } else { PrintAndLogEx(INFO, _YELLOW_("start") " = start of start frame " _YELLOW_("end") " = end of frame. " _YELLOW_("src") " = source of transfer"); - } + } if (protocol == ISO_14443A || protocol == PROTO_MIFARE || protocol == MFDES || protocol == TOPAZ || protocol == LTO) { if (use_us) @@ -736,9 +736,9 @@ int CmdTraceList(const char *Cmd) { PrintAndLogEx(NORMAL, ""); - if (use_relative) { - PrintAndLogEx(NORMAL, " Gap | Duration | Src | Data (! denotes parity error, ' denotes short bytes) | CRC | Annotation"); - } else { + if (use_relative) { + PrintAndLogEx(NORMAL, " Gap | Duration | Src | Data (! denotes parity error, ' denotes short bytes) | CRC | Annotation"); + } else { PrintAndLogEx(NORMAL, " Start | End | Src | Data (! denotes parity error) | CRC | Annotation"); } PrintAndLogEx(NORMAL, "------------+------------+-----+-------------------------------------------------------------------------+-----+--------------------"); diff --git a/client/src/mifare/ndef.c b/client/src/mifare/ndef.c index 9e480cde4..785b822db 100644 --- a/client/src/mifare/ndef.c +++ b/client/src/mifare/ndef.c @@ -497,7 +497,7 @@ int NDEFDecodeAndPrint(uint8_t *ndef, size_t ndefLen, bool verbose) { uint16_t len = ndefTLVGetLength(&ndef[indx], &indx); PrintAndLogEx(SUCCESS, "--- " _CYAN_("NDEF Message") " ---"); if (len == 0) { - PrintAndLogEx(SUCCESS, "Found NDEF message w zero length"); + PrintAndLogEx(SUCCESS, "Found NDEF message w zero length"); } else { PrintAndLogEx(SUCCESS, "Found NDEF message (%d bytes)", len); @@ -505,7 +505,7 @@ int NDEFDecodeAndPrint(uint8_t *ndef, size_t ndefLen, bool verbose) { if (res != PM3_SUCCESS) return res; } - + indx += len; break; } diff --git a/client/src/preferences.c b/client/src/preferences.c index 02e0b80cb..40a93a948 100644 --- a/client/src/preferences.c +++ b/client/src/preferences.c @@ -909,7 +909,7 @@ static int CmdPrefShow(const char *Cmd) { if (session.preferences_loaded) { char *fn = prefGetFilename(); PrintAndLogEx(NORMAL, ""); - PrintAndLogEx(INFO, "Using "_YELLOW_("%s"), fn); + PrintAndLogEx(INFO, "Using "_YELLOW_("%s"), fn); free(fn); } else { PrintAndLogEx(ERR, "Preferences not loaded"); diff --git a/common/cardhelper.c b/common/cardhelper.c index 3a5def846..ce57f6051 100644 --- a/common/cardhelper.c +++ b/common/cardhelper.c @@ -100,8 +100,8 @@ uint8_t GetPinSize(uint8_t *src) { uint8_t c[] = {0x96, CARD_INS_PINSIZE, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; memcpy(c + 5, src, 8); ExchangeAPDUSC(true, c, sizeof(c), false, true, resp, sizeof(resp), &resp_len); - - if ( resp[resp_len - 2] == 0x90 && resp[resp_len - 1] == 0x00) { + + if (resp[resp_len - 2] == 0x90 && resp[resp_len - 1] == 0x00) { return resp[8]; } return 0; diff --git a/common/commonutil.c b/common/commonutil.c index fc287fe9d..6b7444045 100644 --- a/common/commonutil.c +++ b/common/commonutil.c @@ -68,7 +68,7 @@ uint8_t reflect8(uint8_t b) { } -// Reverse the bits in a byte with 4 operations (64-bit multiply, no division): +// Reverse the bits in a byte with 4 operations (64-bit multiply, no division): /* uint8_t reflect8(uint8_t b) { return ((b * 0x80200802ULL) & 0x0884422110ULL) * 0x0101010101ULL >> 32; diff --git a/fpga/fpga_felica.v b/fpga/fpga_felica.v index 84df3b787..a569e9f5b 100644 --- a/fpga/fpga_felica.v +++ b/fpga/fpga_felica.v @@ -207,7 +207,7 @@ hi_get_trace gt( // 110 -- unused // 111 -- FPGA_MAJOR_MODE_OFF -// 000 001 010 011 100 101 110 111 +// 000 001 010 011 100 101 110 111 mux8 mux_ssp_clk (major_mode, ssp_clk, hr_ssp_clk, hs_ssp_clk, 1'b0, he_ssp_clk, hfl_ssp_clk, gt_ssp_clk, 1'b0, 1'b0); mux8 mux_ssp_din (major_mode, ssp_din, hr_ssp_din, hs_ssp_din, 1'b0, he_ssp_din, hfl_ssp_din, gt_ssp_din, 1'b0, 1'b0); mux8 mux_ssp_frame (major_mode, ssp_frame, hr_ssp_frame, hs_ssp_frame, 1'b0, he_ssp_frame, hfl_ssp_frame, gt_ssp_frame, 1'b0, 1'b0); diff --git a/fpga/fpga_hf.v b/fpga/fpga_hf.v index 35178a996..df3780fc6 100644 --- a/fpga/fpga_hf.v +++ b/fpga/fpga_hf.v @@ -219,7 +219,7 @@ hi_get_trace gt( // 110 -- unused // 111 -- FPGA_MAJOR_MODE_OFF -// 000 001 010 011 100 101 110 111 +// 000 001 010 011 100 101 110 111 mux8 mux_ssp_clk (major_mode, ssp_clk, hr_ssp_clk, hs_ssp_clk, hisn_ssp_clk, he_ssp_clk, hfl_ssp_clk, gt_ssp_clk, 1'b0, 1'b0); mux8 mux_ssp_din (major_mode, ssp_din, hr_ssp_din, hs_ssp_din, hisn_ssp_din, he_ssp_din, hfl_ssp_din, gt_ssp_din, 1'b0, 1'b0); diff --git a/fpga/hi_iso14443a.v b/fpga/hi_iso14443a.v index 6b09847ec..958436e69 100644 --- a/fpga/hi_iso14443a.v +++ b/fpga/hi_iso14443a.v @@ -176,7 +176,7 @@ reg [3:0] mod_detect_reset_time; always @(negedge adc_clk) begin - if (mod_type == `FPGA_HF_ISO14443A_READER_LISTEN) + if (mod_type == `FPGA_HF_ISO14443A_READER_LISTEN) // (our) reader signal changes at negedge_cnt[3:0]=9, tag response expected to start n*16+4 ticks later, further delayed by // 3 ticks ADC conversion. The maximum filter output (edge detected) will be detected after subcarrier zero crossing (+7 ticks). // To allow some timing variances, we want to have the maximum filter outputs well within the detection window, i.e. @@ -516,7 +516,7 @@ begin if(negedge_cnt[3:0] == 4'd0) begin // What do we communicate to the ARM - if(mod_type == `FPGA_HF_ISO14443A_TAGSIM_LISTEN) + if(mod_type == `FPGA_HF_ISO14443A_TAGSIM_LISTEN) sendbit = after_hysteresis; else if(mod_type == `FPGA_HF_ISO14443A_TAGSIM_MOD) /* if(fdt_counter > 11'd772) sendbit = mod_sig_coil; // huh? @@ -550,7 +550,7 @@ wire sub_carrier; assign sub_carrier = ~sub_carrier_cnt[3]; // in FPGA_HF_ISO14443A_READER_MOD: drop carrier for mod_sig_coil==1 (pause); in FPGA_HF_ISO14443A_READER_LISTEN: carrier always on; in other modes: carrier always off -assign pwr_hi = (ck_1356meg & (((mod_type == `FPGA_HF_ISO14443A_READER_MOD) & ~mod_sig_coil) || (mod_type == `FPGA_HF_ISO14443A_READER_LISTEN))); +assign pwr_hi = (ck_1356meg & (((mod_type == `FPGA_HF_ISO14443A_READER_MOD) & ~mod_sig_coil) || (mod_type == `FPGA_HF_ISO14443A_READER_LISTEN))); // Enable HF antenna drivers: diff --git a/fpga/hi_reader.v b/fpga/hi_reader.v index ab03f7ba4..b90f9a99c 100644 --- a/fpga/hi_reader.v +++ b/fpga/hi_reader.v @@ -59,7 +59,7 @@ reg [5:0] corr_i_cnt; always @(negedge adc_clk) begin corr_i_cnt <= corr_i_cnt + 1; -end +end // A couple of registers in which to accumulate the correlations. From the 64 samples @@ -67,7 +67,7 @@ end // be safe to assume that a tag will not be able to modulate the carrier signal by more than 25%. // 32 * 255 * 0,25 = 2040, which can be held in 11 bits. Add 1 bit for sign. // Temporary we might need more bits. For the 212kHz subcarrier we could possible add 32 times the -// maximum signal value before a first subtraction would occur. 32 * 255 = 8160 can be held in 13 bits. +// maximum signal value before a first subtraction would occur. 32 * 255 = 8160 can be held in 13 bits. // Add one bit for sign -> need 14 bit registers but final result will fit into 12 bits. reg signed [13:0] corr_i_accum; reg signed [13:0] corr_q_accum; @@ -87,12 +87,12 @@ begin abs_ci <= corr_i_accum; else abs_ci <= -corr_i_accum; - + if (corr_q_accum[13] == 1'b0) abs_cq <= corr_q_accum; else abs_cq <= -corr_q_accum; - + if (abs_ci > abs_cq) begin max_ci_cq <= abs_ci; @@ -120,7 +120,7 @@ begin subcarrier_I = ~corr_i_cnt[3]; subcarrier_Q = ~(corr_i_cnt[3] ^ corr_i_cnt[2]); end - else if (subcarrier_frequency == `FPGA_HF_READER_SUBCARRIER_212_KHZ) + else if (subcarrier_frequency == `FPGA_HF_READER_SUBCARRIER_212_KHZ) begin subcarrier_I = ~corr_i_cnt[5]; subcarrier_Q = ~(corr_i_cnt[5] ^ corr_i_cnt[4]); @@ -146,12 +146,12 @@ begin // send amplitude plus 2 bits reader signal corr_i_out <= corr_amplitude[13:6]; corr_q_out <= {corr_amplitude[5:0], after_hysteresis_prev_prev, after_hysteresis_prev}; - end + end else if (minor_mode == `FPGA_HF_READER_MODE_SNIFF_IQ) begin // Send 7 most significant bits of in phase tag signal (signed), plus 1 bit reader signal - if (corr_i_accum[13:11] == 3'b000 || corr_i_accum[13:11] == 3'b111) + if (corr_i_accum[13:11] == 3'b000 || corr_i_accum[13:11] == 3'b111) corr_i_out <= {corr_i_accum[11:5], after_hysteresis_prev_prev}; else // truncate to maximum value if (corr_i_accum[13] == 1'b0) @@ -160,7 +160,7 @@ begin corr_i_out <= {7'b1000000, after_hysteresis_prev_prev}; // Send 7 most significant bits of quadrature phase tag signal (signed), plus 1 bit reader signal - if (corr_q_accum[13:11] == 3'b000 || corr_q_accum[13:11] == 3'b111) + if (corr_q_accum[13:11] == 3'b000 || corr_q_accum[13:11] == 3'b111) corr_q_out <= {corr_q_accum[11:5], after_hysteresis_prev}; else // truncate to maximum value if (corr_q_accum[13] == 1'b0) @@ -173,12 +173,12 @@ begin // send amplitude corr_i_out <= {2'b00, corr_amplitude[13:8]}; corr_q_out <= corr_amplitude[7:0]; - end + end else if (minor_mode == `FPGA_HF_READER_MODE_RECEIVE_IQ) begin // Send 8 bits of in phase tag signal - if (corr_i_accum[13:11] == 3'b000 || corr_i_accum[13:11] == 3'b111) + if (corr_i_accum[13:11] == 3'b000 || corr_i_accum[13:11] == 3'b111) corr_i_out <= corr_i_accum[11:4]; else // truncate to maximum value if (corr_i_accum[13] == 1'b0) @@ -187,7 +187,7 @@ begin corr_i_out <= 8'b10000000; // Send 8 bits of quadrature phase tag signal - if (corr_q_accum[13:11] == 3'b000 || corr_q_accum[13:11] == 3'b111) + if (corr_q_accum[13:11] == 3'b000 || corr_q_accum[13:11] == 3'b111) corr_q_out <= corr_q_accum[11:4]; else // truncate to maximum value if (corr_q_accum[13] == 1'b0) @@ -199,7 +199,7 @@ begin // for each Q/I pair report two reader signal samples when sniffing. Store the 1st. after_hysteresis_prev_prev <= after_hysteresis; - // Initialize next correlation. + // Initialize next correlation. // Both I and Q reference signals are high when corr_i_nct == 0. Therefore need to accumulate. corr_i_accum <= $signed({1'b0, adc_d}); corr_q_accum <= $signed({1'b0, adc_d}); @@ -223,7 +223,7 @@ begin // Then the result from last time is serialized and send out to the ARM. // We get one report each cycle, and each report is 16 bits, so the - // ssp_clk should be the adc_clk divided by 64/16 = 4. + // ssp_clk should be the adc_clk divided by 64/16 = 4. // ssp_clk frequency = 13,56MHz / 4 = 3.39MHz if (corr_i_cnt[1:0] == 2'b00) @@ -307,7 +307,7 @@ begin pwr_hi = ck_1356meg & jam_signal; pwr_oe4 = 1'b0; end - else if (minor_mode == `FPGA_HF_READER_MODE_SNIFF_IQ + else if (minor_mode == `FPGA_HF_READER_MODE_SNIFF_IQ || minor_mode == `FPGA_HF_READER_MODE_SNIFF_AMPLITUDE || minor_mode == `FPGA_HF_READER_MODE_SNIFF_PHASE) begin // all off @@ -319,7 +319,7 @@ begin pwr_hi = ck_1356meg; pwr_oe4 = 1'b0; end -end +end // always on assign pwr_oe1 = 1'b0; diff --git a/fpga/hi_simulate.v b/fpga/hi_simulate.v index 737dd4586..87a3aa39e 100644 --- a/fpga/hi_simulate.v +++ b/fpga/hi_simulate.v @@ -42,7 +42,7 @@ assign pwr_lo = 1'b0; // LF antenna connected to GND assign pwr_oe2 = 1'b0; assign adc_clk = ck_1356meg; -assign dbg = ssp_frame; +assign dbg = ssp_frame; // The comparator with hysteresis on the output from the peak detector. reg after_hysteresis; @@ -67,7 +67,7 @@ begin else begin has_been_low_for <= has_been_low_for + 1; - end + end end end @@ -95,7 +95,7 @@ begin end -// Produce the byte framing signal; the phase of this signal +// Produce the byte framing signal; the phase of this signal // is arbitrary, because it's just a bit stream in this module. reg ssp_frame; always @(negedge adc_clk) diff --git a/tools/fpga_compress/fpga_compress.c b/tools/fpga_compress/fpga_compress.c index 5da59f2db..c588fd5f7 100644 --- a/tools/fpga_compress/fpga_compress.c +++ b/tools/fpga_compress/fpga_compress.c @@ -51,7 +51,7 @@ static int zlib_compress(FILE *infile[], uint8_t num_infiles, FILE *outfile) { fprintf(stderr, "Input files too big (total > %li bytes). These are probably not PM3 FPGA config files.\n" , num_infiles * FPGA_CONFIG_SIZE - ); + ); for (uint16_t j = 0; j < num_infiles; j++) { fclose(infile[j]); diff --git a/tools/pm3_amii_bin2eml.pl b/tools/pm3_amii_bin2eml.pl index 2c46c95ea..35c95e8e4 100755 --- a/tools/pm3_amii_bin2eml.pl +++ b/tools/pm3_amii_bin2eml.pl @@ -702,4 +702,4 @@ D232A3D1 7F8185C6 00000000 00000000 -00000000 \ No newline at end of file +00000000 From aff439953f9aa758ea94a22c30c8caf3b307bc4f Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Thu, 13 Aug 2020 12:33:27 +0200 Subject: [PATCH 0192/1047] tune stype exceptions --- Makefile | 2 +- fpga/fpga_felica.bit | Bin 42179 -> 42179 bytes fpga/fpga_hf.bit | Bin 42175 -> 42175 bytes fpga/fpga_lf.bit | Bin 42175 -> 42175 bytes 4 files changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index f7a434d3b..1f3b0b44b 100644 --- a/Makefile +++ b/Makefile @@ -249,7 +249,7 @@ style: # Make sure astyle is installed @which astyle >/dev/null || ( echo "Please install 'astyle' package first" ; exit 1 ) # Remove spaces & tabs at EOL, add LF at EOF if needed on *.c, *.h, *.cpp. *.lua, *.py, *.pl, Makefile - find . \( -not -path "./cov-int/*" -and \( -name "*.[ch]" -or \( -name "*.cpp" -and -not -name "*.moc.cpp" \) -or -name "*.lua" -or -name "*.py" -or -name "*.pl" -or -name "Makefile" -or -name "*.v" \) \) \ + find . \( -not -path "./cov-int/*" -and -not -path "./fpga/xst/*" -and \( -name "*.[ch]" -or \( -name "*.cpp" -and -not -name "*.moc.cpp" \) -or -name "*.lua" -or -name "*.py" -or -name "*.pl" -or -name "Makefile" -or -name "*.v" \) \) \ -exec perl -pi -e 's/[ \t]+$$//' {} \; \ -exec sh -c "tail -c1 {} | xxd -p | tail -1 | grep -q -v 0a$$" \; \ -exec sh -c "echo >> {}" \; diff --git a/fpga/fpga_felica.bit b/fpga/fpga_felica.bit index 3b222908030eefbd6206997787560745d21124d8..04aeede8abb44ffcc003fa8386c6a0b80de9cad0 100644 GIT binary patch delta 29 lcmX?nlIieCrU|wJ7W#(93@HqphDKIK=2oWW8-2@`0058J2=)K~ delta 29 lcmX?nlIieCrU|wJ=K2a23@HqpM#feO7FNav8-2@`0053P2+;rl diff --git a/fpga/fpga_hf.bit b/fpga/fpga_hf.bit index 3651d4db3cf5825da32aa5166789ea1251cc624d..c45599764abc6e2e59b728bee9b735137dcb4a5b 100644 GIT binary patch delta 29 lcmdmgl4<`*rU{k;7W#(93@HqphDKIK=2j-g8$HXG0054D2;l$# delta 29 lcmdmgl4<`*rU{k;=K2a23@HqpM#feO7FLFq8$HXG004~^2*>~c diff --git a/fpga/fpga_lf.bit b/fpga/fpga_lf.bit index c5b2ace9d8085e87615ccad1cf4dc24b4b2a8d02..2765acfd54183dd7b2bb8bcfd9fb9c0eabcc4776 100644 GIT binary patch delta 29 lcmdmgl4<`*rU{k;7W#(93@HqphDKIK=2k|Q8$HXG0054V2;~3( delta 29 lcmdmgl4<`*rU{k;=K2a23@HqpM#feO7FG)88$HXG004}p2( Date: Thu, 13 Aug 2020 12:48:46 +0200 Subject: [PATCH 0193/1047] Revert "tune stype exceptions" This reverts commit aff439953f9aa758ea94a22c30c8caf3b307bc4f. --- Makefile | 2 +- fpga/fpga_felica.bit | Bin 42179 -> 42179 bytes fpga/fpga_hf.bit | Bin 42175 -> 42175 bytes fpga/fpga_lf.bit | Bin 42175 -> 42175 bytes 4 files changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 1f3b0b44b..f7a434d3b 100644 --- a/Makefile +++ b/Makefile @@ -249,7 +249,7 @@ style: # Make sure astyle is installed @which astyle >/dev/null || ( echo "Please install 'astyle' package first" ; exit 1 ) # Remove spaces & tabs at EOL, add LF at EOF if needed on *.c, *.h, *.cpp. *.lua, *.py, *.pl, Makefile - find . \( -not -path "./cov-int/*" -and -not -path "./fpga/xst/*" -and \( -name "*.[ch]" -or \( -name "*.cpp" -and -not -name "*.moc.cpp" \) -or -name "*.lua" -or -name "*.py" -or -name "*.pl" -or -name "Makefile" -or -name "*.v" \) \) \ + find . \( -not -path "./cov-int/*" -and \( -name "*.[ch]" -or \( -name "*.cpp" -and -not -name "*.moc.cpp" \) -or -name "*.lua" -or -name "*.py" -or -name "*.pl" -or -name "Makefile" -or -name "*.v" \) \) \ -exec perl -pi -e 's/[ \t]+$$//' {} \; \ -exec sh -c "tail -c1 {} | xxd -p | tail -1 | grep -q -v 0a$$" \; \ -exec sh -c "echo >> {}" \; diff --git a/fpga/fpga_felica.bit b/fpga/fpga_felica.bit index 04aeede8abb44ffcc003fa8386c6a0b80de9cad0..3b222908030eefbd6206997787560745d21124d8 100644 GIT binary patch delta 29 lcmX?nlIieCrU|wJ=K2a23@HqpM#feO7FNav8-2@`0053P2+;rl delta 29 lcmX?nlIieCrU|wJ7W#(93@HqphDKIK=2oWW8-2@`0058J2=)K~ diff --git a/fpga/fpga_hf.bit b/fpga/fpga_hf.bit index c45599764abc6e2e59b728bee9b735137dcb4a5b..3651d4db3cf5825da32aa5166789ea1251cc624d 100644 GIT binary patch delta 29 lcmdmgl4<`*rU{k;=K2a23@HqpM#feO7FLFq8$HXG004~^2*>~c delta 29 lcmdmgl4<`*rU{k;7W#(93@HqphDKIK=2j-g8$HXG0054D2;l$# diff --git a/fpga/fpga_lf.bit b/fpga/fpga_lf.bit index 2765acfd54183dd7b2bb8bcfd9fb9c0eabcc4776..c5b2ace9d8085e87615ccad1cf4dc24b4b2a8d02 100644 GIT binary patch delta 29 lcmdmgl4<`*rU{k;=K2a23@HqpM#feO7FG)88$HXG004}p2( Date: Thu, 13 Aug 2020 12:49:11 +0200 Subject: [PATCH 0194/1047] tune make style exceptions --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index f7a434d3b..1f3b0b44b 100644 --- a/Makefile +++ b/Makefile @@ -249,7 +249,7 @@ style: # Make sure astyle is installed @which astyle >/dev/null || ( echo "Please install 'astyle' package first" ; exit 1 ) # Remove spaces & tabs at EOL, add LF at EOF if needed on *.c, *.h, *.cpp. *.lua, *.py, *.pl, Makefile - find . \( -not -path "./cov-int/*" -and \( -name "*.[ch]" -or \( -name "*.cpp" -and -not -name "*.moc.cpp" \) -or -name "*.lua" -or -name "*.py" -or -name "*.pl" -or -name "Makefile" -or -name "*.v" \) \) \ + find . \( -not -path "./cov-int/*" -and -not -path "./fpga/xst/*" -and \( -name "*.[ch]" -or \( -name "*.cpp" -and -not -name "*.moc.cpp" \) -or -name "*.lua" -or -name "*.py" -or -name "*.pl" -or -name "Makefile" -or -name "*.v" \) \) \ -exec perl -pi -e 's/[ \t]+$$//' {} \; \ -exec sh -c "tail -c1 {} | xxd -p | tail -1 | grep -q -v 0a$$" \; \ -exec sh -c "echo >> {}" \; From 700f0624a4911340b5a3355730bbe93e2d51c453 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 13 Aug 2020 14:04:09 +0200 Subject: [PATCH 0195/1047] coverity 298509, 298508, 294394 --- client/src/cmdhficlass.c | 4 ++-- client/src/cmdtrace.c | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/client/src/cmdhficlass.c b/client/src/cmdhficlass.c index eecf4c3f9..e74475e2e 100644 --- a/client/src/cmdhficlass.c +++ b/client/src/cmdhficlass.c @@ -976,7 +976,7 @@ static int CmdHFiClassReader_Replay(const char *Cmd) { FillFileNameByUID(filename, tag_data, "-dump", 8); // save the dump to .bin file - PrintAndLogEx(SUCCESS, "saving dump file - %zu blocks read", bytes_got / 8); + PrintAndLogEx(SUCCESS, "saving dump file - %u blocks read", bytes_got / 8); saveFile(filename, ".bin", tag_data, bytes_got); saveFileEML(filename, tag_data, bytes_got, 8); saveFileJSON(filename, jsfIclass, tag_data, bytes_got, NULL); @@ -1855,7 +1855,7 @@ write_dump: } // save the dump to .bin file - PrintAndLogEx(SUCCESS, "saving dump file - %zu blocks read", bytes_got / 8); + PrintAndLogEx(SUCCESS, "saving dump file - %u blocks read", bytes_got / 8); saveFile(filename, ".bin", tag_data, bytes_got); saveFileEML(filename, tag_data, bytes_got, 8); saveFileJSON(filename, jsfIclass, tag_data, bytes_got, NULL); diff --git a/client/src/cmdtrace.c b/client/src/cmdtrace.c index 3458fbad5..567e1f9ab 100644 --- a/client/src/cmdtrace.c +++ b/client/src/cmdtrace.c @@ -202,7 +202,7 @@ static uint16_t printTraceLine(uint16_t tracepos, uint16_t traceLen, uint8_t *tr data_len = hdr->data_len; if (tracepos + TRACELOG_HDR_LEN + data_len + TRACELOG_PARITY_LEN(hdr) > traceLen) { - PrintAndLogEx(DEBUG, "trace pos offset %d larger than reported tracelen %d", tracepos + TRACELOG_HDR_LEN + data_len + TRACELOG_PARITY_LEN(hdr), traceLen); + PrintAndLogEx(DEBUG, "trace pos offset %u larger than reported tracelen %u", tracepos + TRACELOG_HDR_LEN + data_len + TRACELOG_PARITY_LEN(hdr), traceLen); return traceLen; } From 6bd0138f1408c38164d67ac14478318bd17a8374 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 13 Aug 2020 17:42:46 +0200 Subject: [PATCH 0196/1047] add a clear screen for ansi enabled terms --- client/src/cmdmain.c | 8 +++++++- include/ansi.h | 3 +++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/client/src/cmdmain.c b/client/src/cmdmain.c index e6ecc0919..f66e5016c 100644 --- a/client/src/cmdmain.c +++ b/client/src/cmdmain.c @@ -247,6 +247,11 @@ static int CmdPref(const char *Cmd) { return PM3_SUCCESS; } +static int CmdClear(const char *Cmd) { + PrintAndLogEx(NORMAL, _CLEAR_ _TOP_ ""); + return PM3_SUCCESS; +} + static command_t CommandTable[] = { {"--------", CmdHelp, AlwaysAvailable, "----------------------- " _CYAN_("Technology") " -----------------------"}, @@ -265,7 +270,8 @@ static command_t CommandTable[] = { {"usart", CmdUsart, IfPm3FpcUsartFromUsb, "{ USART commands... }"}, {"wiegand", CmdWiegand, AlwaysAvailable, "{ Wiegand format manipulation... }"}, {"--------", CmdHelp, AlwaysAvailable, "----------------------- " _CYAN_("General") " -----------------------"}, - {"auto", CmdAuto, IfPm3Present, "Automated detection process for unknown tags"}, + {"auto", CmdAuto, IfPm3Present, "Automated detection process for unknown tags"}, + {"clear", CmdClear, AlwaysAvailable, "clear screen"}, {"help", CmdHelp, AlwaysAvailable, "This help. Use " _YELLOW_("' help'") " for details of a particular command."}, {"hints", CmdHints, AlwaysAvailable, "Turn hints on / off"}, {"msleep", CmdMsleep, AlwaysAvailable, "Add a pause in milliseconds"}, diff --git a/include/ansi.h b/include/ansi.h index 28784ba8c..6c808d10e 100644 --- a/include/ansi.h +++ b/include/ansi.h @@ -11,6 +11,9 @@ #define _CYAN_(s) "\x1b[36m" s AEND #define _WHITE_(s) "\x1b[37m" s AEND +#define _CLEAR_ "\x1b[2J" +#define _TOP_ "\x1b[1;1f" + // https://wiki.hackzine.org/development/misc/readline-color-prompt.html // Applications may indicate that the prompt contains // characters that take up no physical screen space when displayed by From 80d9b4c5dee03a048b176f46a667b77de238070c Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Thu, 13 Aug 2020 22:46:52 +0200 Subject: [PATCH 0197/1047] PrintAndLogEx: Allow to skip carriage return by appending NOLF --- client/src/ui.c | 15 +++++++++++---- client/src/ui.h | 1 + 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/client/src/ui.c b/client/src/ui.c index e84d4203c..f05a96682 100644 --- a/client/src/ui.c +++ b/client/src/ui.c @@ -302,6 +302,7 @@ static void fPrintAndLog(FILE *stream, const char *fmt, ...) { char buffer3[MAX_PRINT_BUFFER] = {0}; // lock this section to avoid interlacing prints from different threads pthread_mutex_lock(&print_lock); + bool linefeed = true; if ((g_printAndLog & PRINTANDLOG_LOG) && logging && !logfile) { char *my_logfile_path = NULL; @@ -354,13 +355,17 @@ static void fPrintAndLog(FILE *stream, const char *fmt, ...) { va_start(argptr, fmt); vsnprintf(buffer, sizeof(buffer), fmt, argptr); va_end(argptr); - + if (buffer[strlen(buffer) - 1] == NOLF[0]) { + linefeed = false; + buffer[strlen(buffer) - 1] = 0; + } bool filter_ansi = !session.supports_colors; memcpy_filter_ansi(buffer2, buffer, sizeof(buffer), filter_ansi); if (g_printAndLog & PRINTANDLOG_PRINT) { memcpy_filter_emoji(buffer3, buffer2, sizeof(buffer2), session.emoji_mode); fprintf(stream, "%s", buffer3); - fprintf(stream, "\n"); + if (linefeed) + fprintf(stream, "\n"); } #ifdef RL_STATE_READCMD @@ -377,11 +382,13 @@ static void fPrintAndLog(FILE *stream, const char *fmt, ...) { if ((g_printAndLog & PRINTANDLOG_LOG) && logging && logfile) { memcpy_filter_emoji(buffer3, buffer2, sizeof(buffer2), ALTTEXT); if (filter_ansi) { // already done - fprintf(logfile, "%s\n", buffer3); + fprintf(logfile, "%s", buffer3); } else { memcpy_filter_ansi(buffer, buffer3, sizeof(buffer3), true); - fprintf(logfile, "%s\n", buffer); + fprintf(logfile, "%s", buffer); } + if (linefeed) + fprintf(logfile, "\n"); fflush(logfile); } diff --git a/client/src/ui.h b/client/src/ui.h index 7a5b7911d..b466b9c84 100644 --- a/client/src/ui.h +++ b/client/src/ui.h @@ -22,6 +22,7 @@ extern "C" { #define _USE_MATH_DEFINES typedef enum logLevel {NORMAL, SUCCESS, INFO, FAILED, WARNING, ERR, DEBUG, INPLACE, HINT} logLevel_t; +#define NOLF "\xff" typedef enum emojiMode {ALIAS, EMOJI, ALTTEXT, ERASE} emojiMode_t; typedef enum clientdebugLevel {cdbOFF, cdbSIMPLE, cdbFULL} clientdebugLevel_t; // typedef enum devicedebugLevel {ddbOFF, ddbERROR, ddbINFO, ddbDEBUG, ddbEXTENDED} devicedebugLevel_t; From 6d3c1d022322b5177e4699afe125f4b60518c1da Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Thu, 13 Aug 2020 23:09:46 +0200 Subject: [PATCH 0198/1047] script list: recurse in subdirs --- client/src/cmdscript.c | 5 ++++- client/src/fileutils.c | 35 ++++++++++++++++++++++++++--------- 2 files changed, 30 insertions(+), 10 deletions(-) diff --git a/client/src/cmdscript.c b/client/src/cmdscript.c index 89301e1f4..bb2ee72dc 100644 --- a/client/src/cmdscript.c +++ b/client/src/cmdscript.c @@ -7,7 +7,7 @@ //----------------------------------------------------------------------------- // Some lua scripting glue to proxmark core. //----------------------------------------------------------------------------- -// 2020, added Python support (@iceman100) +// 2020, added Python support (@iceman1001) #include @@ -192,14 +192,17 @@ static void set_python_paths(void) { */ static int CmdScriptList(const char *Cmd) { (void)Cmd; // Cmd is not used so far + PrintAndLogEx(NORMAL, "\n" _YELLOW_("[ Lua scripts ]")); int ret = searchAndList(LUA_SCRIPTS_SUBDIR, ".lua"); if (ret != PM3_SUCCESS) return ret; + PrintAndLogEx(NORMAL, "\n" _YELLOW_("[ Cmd scripts ]")); ret = searchAndList(CMD_SCRIPTS_SUBDIR, ".cmd"); if (ret != PM3_SUCCESS) return ret; #ifdef HAVE_PYTHON + PrintAndLogEx(NORMAL, "\n" _YELLOW_("[ Python scripts ]")); return searchAndList(PYTHON_SCRIPTS_SUBDIR, ".py"); #else return ret; diff --git a/client/src/fileutils.c b/client/src/fileutils.c index e222e54da..741545b24 100644 --- a/client/src/fileutils.c +++ b/client/src/fileutils.c @@ -1439,21 +1439,38 @@ int convert_mfu_dump_format(uint8_t **dump, size_t *dumplen, bool verbose) { } } -static int filelist(const char *path, const char *ext, bool last, bool tentative) { +static int filelist(const char *path, const char *ext, uint8_t last, bool tentative, uint8_t indent, uint16_t strip) { struct dirent **namelist; int n; n = scandir(path, &namelist, NULL, alphasort); if (n == -1) { - if (!tentative) - PrintAndLogEx(NORMAL, "%s── %s", last ? "└" : "├", path); + if (!tentative) { + for (uint8_t j = 0; j < indent; j++) + PrintAndLogEx(NORMAL, "%s " NOLF, ((last >> j) & 1) ? " " : "│"); + PrintAndLogEx(NORMAL, "%s── "_GREEN_("%s"), last ? "└" : "├", &path[strip]); + } return PM3_EFILE; } - PrintAndLogEx(NORMAL, "%s── %s", last ? "└" : "├", path); + for (uint8_t j = 0; j < indent; j++) + PrintAndLogEx(NORMAL, "%s " NOLF, ((last >> j) & 1) ? " " : "│"); + PrintAndLogEx(NORMAL, "%s── "_GREEN_("%s"), last ? "└" : "├", &path[strip]); for (uint16_t i = 0; i < n; i++) { - if (((ext == NULL) && (namelist[i]->d_name[0] != '.')) || (ext && (str_endswith(namelist[i]->d_name, ext)))) { - PrintAndLogEx(NORMAL, "%s   %s── %-21s", last ? " " : "│", i == n - 1 ? "└" : "├", namelist[i]->d_name); + if (namelist[i]->d_type == DT_DIR) { + char newpath[1024]; + if (strcmp(namelist[i]->d_name, ".") == 0 || strcmp(namelist[i]->d_name, "..") == 0) + continue; + snprintf(newpath, sizeof(newpath), "%s", path); + strncat(newpath, namelist[i]->d_name, sizeof(newpath) - strlen(newpath)); + strncat(newpath, "/", sizeof(newpath) - strlen(newpath)); + filelist(newpath, ext, last + ((i == n - 1) << (indent + 1)), tentative, indent + 1, strlen(path)); + } else { + if ((ext == NULL) || (ext && (str_endswith(namelist[i]->d_name, ext)))) { + for (uint8_t j = 0; j < indent + 1; j++) + PrintAndLogEx(NORMAL, "%s " NOLF, ((last >> j) & 1) ? " " : "│"); + PrintAndLogEx(NORMAL, "%s── %-21s", i == n - 1 ? "└" : "├", namelist[i]->d_name); + } } free(namelist[i]); } @@ -1468,7 +1485,7 @@ int searchAndList(const char *pm3dir, const char *ext) { char script_directory_path[strlen(get_my_executable_directory()) + strlen(pm3dir) + 1]; strcpy(script_directory_path, get_my_executable_directory()); strcat(script_directory_path, pm3dir); - filelist(script_directory_path, ext, false, true); + filelist(script_directory_path, ext, false, true, 0, 0); } // try pm3 dirs in user .proxmark3 (user mode) const char *user_path = get_my_user_directory(); @@ -1477,7 +1494,7 @@ int searchAndList(const char *pm3dir, const char *ext) { strcpy(script_directory_path, user_path); strcat(script_directory_path, PM3_USER_DIRECTORY); strcat(script_directory_path, pm3dir); - filelist(script_directory_path, ext, false, false); + filelist(script_directory_path, ext, false, false, 0, 0); } // try pm3 dirs in pm3 installation dir (install mode) const char *exec_path = get_my_executable_directory(); @@ -1486,7 +1503,7 @@ int searchAndList(const char *pm3dir, const char *ext) { strcpy(script_directory_path, exec_path); strcat(script_directory_path, PM3_SHARE_RELPATH); strcat(script_directory_path, pm3dir); - filelist(script_directory_path, ext, true, false); + filelist(script_directory_path, ext, true, false, 0, 0); } return PM3_SUCCESS; } From b59becbeb6bf42a77ebd43eb5da6e9b6e4ec15cc Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Fri, 14 Aug 2020 00:14:46 +0200 Subject: [PATCH 0199/1047] Add LF before first pm3 dbg msg when there is a pending prompt --- client/src/comms.c | 5 +++++ client/src/proxmark3.c | 2 ++ client/src/util.c | 2 ++ client/src/util.h | 1 + 4 files changed, 10 insertions(+) diff --git a/client/src/comms.c b/client/src/comms.c index 209fd47cd..ad82725f3 100644 --- a/client/src/comms.c +++ b/client/src/comms.c @@ -18,6 +18,7 @@ #include "uart/uart.h" #include "ui.h" #include "crc16.h" +#include "util.h" // g_pendingPrompt #include "util_posix.h" // msclock #include "util_darwin.h" // en/dis-ableNapp(); @@ -289,6 +290,10 @@ static void PacketResponseReceived(PacketResponseNG *packet) { } if (flag & FLAG_LOG) { + if (g_pendingPrompt) { + PrintAndLogEx(NORMAL, ""); + g_pendingPrompt = false; + } //PrintAndLogEx(NORMAL, "[" _MAGENTA_("pm3") "] ["_BLUE_("#")"] " "%s", s); PrintAndLogEx(NORMAL, "[" _BLUE_("#") "] %s", s); } else { diff --git a/client/src/proxmark3.c b/client/src/proxmark3.c index 179b3f343..d04008c03 100644 --- a/client/src/proxmark3.c +++ b/client/src/proxmark3.c @@ -349,6 +349,7 @@ check_script: prompt_compose(prompt, sizeof(prompt), prompt_ctx, prompt_dev); char prompt_filtered[PROXPROMPT_MAX_SIZE] = {0}; memcpy_filter_ansi(prompt_filtered, prompt, sizeof(prompt_filtered), !session.supports_colors); + g_pendingPrompt = true; #ifdef HAVE_READLINE cmd = readline(prompt_filtered); #else @@ -411,6 +412,7 @@ check_script: } #endif // process cmd + g_pendingPrompt = false; int ret = CommandReceived(cmd); // exit or quit if (ret == PM3_EFATAL) diff --git a/client/src/util.c b/client/src/util.c index 808f147f0..e469dc095 100644 --- a/client/src/util.c +++ b/client/src/util.c @@ -30,6 +30,8 @@ uint8_t g_debugMode = 0; // global client disable logging variable uint8_t g_printAndLog = PRINTANDLOG_PRINT | PRINTANDLOG_LOG; +// global client tell if a pending prompt is present +bool g_pendingPrompt = false; #ifdef _WIN32 #include diff --git a/client/src/util.h b/client/src/util.h index 156c3a089..663abbc55 100644 --- a/client/src/util.h +++ b/client/src/util.h @@ -23,6 +23,7 @@ extern uint8_t g_debugMode; extern uint8_t g_printAndLog; +extern bool g_pendingPrompt; #define PRINTANDLOG_PRINT 1 #define PRINTANDLOG_LOG 2 From 6921fdafdeae81174492e7219f8060dfea294cf7 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Fri, 14 Aug 2020 05:44:40 +0200 Subject: [PATCH 0200/1047] fix DT_DIR on mingw / proxspace --- client/src/fileutils.c | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/client/src/fileutils.c b/client/src/fileutils.c index 741545b24..c55e7facb 100644 --- a/client/src/fileutils.c +++ b/client/src/fileutils.c @@ -1445,30 +1445,41 @@ static int filelist(const char *path, const char *ext, uint8_t last, bool tentat n = scandir(path, &namelist, NULL, alphasort); if (n == -1) { - if (!tentative) { - for (uint8_t j = 0; j < indent; j++) + + if (tentative == false) { + + for (uint8_t j = 0; j < indent; j++) { PrintAndLogEx(NORMAL, "%s " NOLF, ((last >> j) & 1) ? " " : "│"); + } PrintAndLogEx(NORMAL, "%s── "_GREEN_("%s"), last ? "└" : "├", &path[strip]); } return PM3_EFILE; } - for (uint8_t j = 0; j < indent; j++) + for (uint8_t j = 0; j < indent; j++) { PrintAndLogEx(NORMAL, "%s " NOLF, ((last >> j) & 1) ? " " : "│"); + } + PrintAndLogEx(NORMAL, "%s── "_GREEN_("%s"), last ? "└" : "├", &path[strip]); + for (uint16_t i = 0; i < n; i++) { - if (namelist[i]->d_type == DT_DIR) { + + if (is_directory(namelist[i]->d_name)) { char newpath[1024]; if (strcmp(namelist[i]->d_name, ".") == 0 || strcmp(namelist[i]->d_name, "..") == 0) continue; + snprintf(newpath, sizeof(newpath), "%s", path); strncat(newpath, namelist[i]->d_name, sizeof(newpath) - strlen(newpath)); strncat(newpath, "/", sizeof(newpath) - strlen(newpath)); filelist(newpath, ext, last + ((i == n - 1) << (indent + 1)), tentative, indent + 1, strlen(path)); } else { + if ((ext == NULL) || (ext && (str_endswith(namelist[i]->d_name, ext)))) { - for (uint8_t j = 0; j < indent + 1; j++) + + for (uint8_t j = 0; j < indent + 1; j++) { PrintAndLogEx(NORMAL, "%s " NOLF, ((last >> j) & 1) ? " " : "│"); + } PrintAndLogEx(NORMAL, "%s── %-21s", i == n - 1 ? "└" : "├", namelist[i]->d_name); } } From 2b903a77bd8d1dedd9f437f757666524bfc6e878 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Fri, 14 Aug 2020 06:31:19 +0200 Subject: [PATCH 0201/1047] really fix dt_dir on proxspace --- client/src/fileutils.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/client/src/fileutils.c b/client/src/fileutils.c index c55e7facb..4d6de8fd0 100644 --- a/client/src/fileutils.c +++ b/client/src/fileutils.c @@ -1464,7 +1464,12 @@ static int filelist(const char *path, const char *ext, uint8_t last, bool tentat for (uint16_t i = 0; i < n; i++) { - if (is_directory(namelist[i]->d_name)) { + char tmp_fullpath[1024] = {0}; + strcat(tmp_fullpath, path); + strcat(tmp_fullpath, namelist[i]->d_name); + + if (is_directory(tmp_fullpath)) { + char newpath[1024]; if (strcmp(namelist[i]->d_name, ".") == 0 || strcmp(namelist[i]->d_name, "..") == 0) continue; @@ -1472,6 +1477,7 @@ static int filelist(const char *path, const char *ext, uint8_t last, bool tentat snprintf(newpath, sizeof(newpath), "%s", path); strncat(newpath, namelist[i]->d_name, sizeof(newpath) - strlen(newpath)); strncat(newpath, "/", sizeof(newpath) - strlen(newpath)); + filelist(newpath, ext, last + ((i == n - 1) << (indent + 1)), tentative, indent + 1, strlen(path)); } else { From cf36e26add076708f75866a4804ccf088ba04084 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Fri, 14 Aug 2020 14:54:47 +0200 Subject: [PATCH 0202/1047] hf 15 client side got some love --- client/src/cmdhf15.c | 1010 +++++++++++++++++++++--------------------- 1 file changed, 504 insertions(+), 506 deletions(-) diff --git a/client/src/cmdhf15.c b/client/src/cmdhf15.c index ad69d5615..eacd18ac5 100644 --- a/client/src/cmdhf15.c +++ b/client/src/cmdhf15.c @@ -62,7 +62,6 @@ typedef struct { const char *desc; } productName; - const productName uidmapping[] = { // UID, #significant Bits, "Vendor(+Product)" @@ -210,6 +209,165 @@ const productName uidmapping[] = { static int CmdHF15Help(const char *Cmd); +static int usage_15_demod(void) { + PrintAndLogEx(NORMAL, "Tries to demodulate / decode ISO15693, from downloaded samples.\n" + "Gather samples with 'hf 15 read' / 'hf 15 record'"); + return PM3_SUCCESS; +} +static int usage_15_samples(void) { + PrintAndLogEx(NORMAL, "Acquire samples as Reader (enables carrier, send inquiry\n" + "and download it to graphbuffer. Try 'hf 15 demod' to try to demodulate/decode signal"); + return PM3_SUCCESS; +} +static int usage_15_info(void) { + PrintAndLogEx(NORMAL, "Uses the optional command 'get_systeminfo' 0x2B to try and extract information\n" + "command may fail, depending on tag.\n" + "defaults to '1 out of 4' mode\n" + "\n" + "Usage: hf 15 info [options] \n" + "Options:\n" + "\t-2 use slower '1 out of 256' mode\n" + "\tuid (either): \n" + "\t <8B hex> full UID eg E011223344556677\n" + "\t u unaddressed mode\n" + "\t * scan for tag\n" + "Examples:\n" + _YELLOW_("\thf 15 info u")); + return PM3_SUCCESS; +} +static int usage_15_record(void) { + PrintAndLogEx(NORMAL, "Record activity without enabling carrier"); + return PM3_SUCCESS; +} +static int usage_15_reader(void) { + PrintAndLogEx(NORMAL, "This command identifies a ISO 15693 tag\n" + "\n" + "Usage: hf 15 reader [h]\n" + "Options:\n" + "\th this help\n" + "\n" + "Example:\n" + _YELLOW_("\thf 15 reader")); + return PM3_SUCCESS; +} +static int usage_15_sim(void) { + PrintAndLogEx(NORMAL, "Usage: hf 15 sim \n" + "\n" + "Example:\n" + _YELLOW_("\thf 15 sim E016240000000000")); + return PM3_SUCCESS; +} +static int usage_15_findafi(void) { + PrintAndLogEx(NORMAL, "This command attempts to brute force AFI of an ISO15693 tag\n" + "\n" + "Usage: hf 15 findafi"); + return PM3_SUCCESS; +} +static int usage_15_writeafi(void) { + PrintAndLogEx(NORMAL, "Usage: hf 15 writeafi \n" + "\tuid (either): \n" + "\t <8B hex> full UID eg E011223344556677\n" + "\t u unaddressed mode\n" + "\t * scan for tag\n" + "\t AFI number 0-255"); + return PM3_SUCCESS; +} +static int usage_15_writedsfid(void) { + PrintAndLogEx(NORMAL, "Usage: hf 15 writedsfid \n" + "\tuid (either): \n" + "\t <8B hex> full UID eg E011223344556677\n" + "\t u unaddressed mode\n" + "\t * scan for tag\n" + "\t DSFID number 0-255"); + return PM3_SUCCESS; +} +static int usage_15_dump(void) { + PrintAndLogEx(NORMAL, "This command dumps the contents of a ISO-15693 tag and save it to file\n" + "\n" + "Usage: hf 15 dump [h] \n" + "Options:\n" + "\th this help\n" + "\tf filename, if no UID will be used as filename\n" + "\n" + "Example:\n" + _YELLOW_("\thf 15 dump f\n") + _YELLOW_("\thf 15 dump f mydump")); + return PM3_SUCCESS; +} +static int usage_15_restore(void) { + const char *options[][2] = { + {"h", "this help"}, + {"-2", "use slower '1 out of 256' mode"}, + {"-o", "set OPTION Flag (needed for TI)"}, + {"a", "use addressed mode"}, + {"r ", "numbers of retries on error, default is 3"}, + {"f ", "load "}, + {"b ", "block size, default is 4"} + }; + PrintAndLogEx(NORMAL, "Usage: hf 15 restore [-2] [-o] [h] [r ] [u ] [f ] [b ]"); + PrintAndLogOptions(options, 7, 3); + return PM3_SUCCESS; +} +static int usage_15_raw(void) { + const char *options[][2] = { + {"-r", "do not read response" }, + {"-2", "use slower '1 out of 256' mode" }, + {"-c", "calculate and append CRC" }, + {"-p", "leave the signal field ON" }, + {"", "Tip: turn on debugging for verbose output"}, + }; + PrintAndLogEx(NORMAL, "Usage: hf 15 raw [-r] [-2] [-c] <0A 0B 0C ... hex>\n"); + PrintAndLogOptions(options, 4, 3); + return PM3_SUCCESS; +} +static int usage_15_read(void) { + PrintAndLogEx(NORMAL, "Usage: hf 15 read [options] \n" + "Options:\n" + "\t-2 use slower '1 out of 256' mode\n" + "\tuid (either): \n" + "\t <8B hex> full UID eg E011223344556677\n" + "\t u unaddressed mode\n" + "\t * scan for tag\n" + "\t page number 0-255"); + return PM3_SUCCESS; +} +static int usage_15_write(void) { + PrintAndLogEx(NORMAL, "Usage: hf 15 write [options] \n" + "Options:\n" + "\t-2 use slower '1 out of 256' mode\n" + "\t-o set OPTION Flag (needed for TI)\n" + "\tuid (either): \n" + "\t <8B hex> full UID eg E011223344556677\n" + "\t u unaddressed mode\n" + "\t * scan for tag\n" + "\t page number 0-255\n" + "\t data to be written eg AA BB CC DD"); + return PM3_SUCCESS; +} +static int usage_15_readmulti(void) { + PrintAndLogEx(NORMAL, "Usage: hf 15 readmulti [options] \n" + "Options:\n" + "\t-2 use slower '1 out of 256' mode\n" + "\tuid (either): \n" + "\t <8B hex> full UID eg E011223344556677\n" + "\t u unaddressed mode\n" + "\t * scan for tag\n" + "\t 0-255, page number to start\n" + "\t 1-6, number of pages"); + return PM3_SUCCESS; +} +static int usage_15_csetuid(void) { + PrintAndLogEx(NORMAL, "Set UID for magic Chinese card (only works with such cards)\n" + "\n" + "Usage: hf 15 csetuid \n" + "Options:\n" + "\tuid : <8B hex> full UID eg E011223344556677\n" + "\n" + "Example:\n" + _YELLOW_("\thf 15 csetuid E011223344556677")); + return PM3_SUCCESS; +} + static int nxp_15693_print_signature(uint8_t *uid, uint8_t *signature) { #define PUBLIC_ECDA_KEYLEN 33 @@ -260,8 +418,7 @@ static int nxp_15693_print_signature(uint8_t *uid, uint8_t *signature) { 0x29, 0x29, 0xfd, 0xcd, 0x69, 0x8b, 0x34, 0x68, 0xf2 } }; - */ - + */ uint8_t i; bool is_valid = false; for (i = 0; i < ARRAYLEN(nxp_15693_public_keys); i++) { @@ -291,42 +448,6 @@ static int nxp_15693_print_signature(uint8_t *uid, uint8_t *signature) { return PM3_SUCCESS; } -// fast method to just read the UID of a tag (collision detection not supported) -// *buf should be large enough to fit the 64bit uid -// returns 1 if succeeded -static bool getUID(uint8_t *buf) { - - PacketResponseNG resp; - uint8_t data[5]; - data[0] = ISO15_REQ_SUBCARRIER_SINGLE | ISO15_REQ_DATARATE_HIGH | ISO15_REQ_INVENTORY | ISO15_REQINV_SLOT1; - data[1] = ISO15_CMD_INVENTORY; - data[2] = 0; // mask length - - AddCrc15(data, 3); - - uint8_t retry; - - // don't give up the at the first try - for (retry = 0; retry < 3; retry++) { - - clearCommandBuffer(); - SendCommandOLD(CMD_HF_ISO15693_COMMAND, sizeof(data), 1, 1, data, sizeof(data)); - - if (WaitForResponseTimeout(CMD_ACK, &resp, 2000)) { - - uint8_t resplen = resp.oldarg[0]; - if (resplen >= 12 && CheckCrc15(resp.data.asBytes, 12)) { - memcpy(buf, resp.data.asBytes + 2, 8); - DropField(); - return true; - } - } - } // retry - - DropField(); - return false; -} - // get a product description based on the UID // uid[8] tag uid // returns description of the best match @@ -379,163 +500,63 @@ static const char *TagErrorStr(uint8_t error) { } } -static int usage_15_demod(void) { - PrintAndLogEx(NORMAL, "Tries to demodulate / decode ISO15693, from downloaded samples.\n" - "Gather samples with 'hf 15 read' / 'hf 15 record'"); - return PM3_SUCCESS; +// fast method to just read the UID of a tag (collision detection not supported) +// *buf should be large enough to fit the 64bit uid +// returns 1 if succeeded +static bool getUID(bool loop, uint8_t *buf) { + + uint8_t data[5]; + data[0] = ISO15_REQ_SUBCARRIER_SINGLE | ISO15_REQ_DATARATE_HIGH | ISO15_REQ_INVENTORY | ISO15_REQINV_SLOT1; + data[1] = ISO15_CMD_INVENTORY; + data[2] = 0; // mask length + + AddCrc15(data, 3); + + // params + uint8_t fast = 1; + uint8_t reply = 1; + + while (kbd_enter_pressed() == false) { + + // don't give up the at the first try + uint8_t retry = 3; + while (retry--) { + + clearCommandBuffer(); + SendCommandMIX(CMD_HF_ISO15693_COMMAND, sizeof(data), fast, reply, data, sizeof(data)); + PacketResponseNG resp; + if (WaitForResponseTimeout(CMD_ACK, &resp, 2000)) { + + int resplen = resp.oldarg[0]; + if (resplen >= 12 && CheckCrc15(resp.data.asBytes, 12)) { + + if (buf) + memcpy(buf, resp.data.asBytes + 2, 8); + + DropField(); + + PrintAndLogEx(NORMAL, ""); + PrintAndLogEx(SUCCESS, " UID: " _GREEN_("%s"), iso15693_sprintUID(NULL, buf)); + PrintAndLogEx(SUCCESS, "TYPE: " _YELLOW_("%s"), getTagInfo_15(buf)); + + if (loop == false) + return true; + } + } + } + } + DropField(); + return false; } -static int usage_15_samples(void) { - PrintAndLogEx(NORMAL, "Acquire samples as Reader (enables carrier, send inquiry\n" - "and download it to graphbuffer. Try 'hf 15 demod' to try to demodulate/decode signal"); - return PM3_SUCCESS; -} -static int usage_15_info(void) { - PrintAndLogEx(NORMAL, "Uses the optional command 'get_systeminfo' 0x2B to try and extract information\n" - "command may fail, depending on tag.\n" - "defaults to '1 out of 4' mode\n" - "\n" - "Usage: hf 15 info [options] \n" - "Options:\n" - "\t-2 use slower '1 out of 256' mode\n" - "\tuid (either): \n" - "\t <8B hex> full UID eg E011223344556677\n" - "\t u unaddressed mode\n" - "\t * scan for tag\n" - "Examples:\n" - "\thf 15 info u"); - return PM3_SUCCESS; -} -static int usage_15_record(void) { - PrintAndLogEx(NORMAL, "Record activity without enabling carrier"); - return PM3_SUCCESS; -} -static int usage_15_reader(void) { - PrintAndLogEx(NORMAL, "This command identifies a ISO 15693 tag\n" - "\n" - "Usage: hf 15 reader [h]\n" - "Options:\n" - "\th this help\n" - "\n" - "Example:\n" - "\thf 15 reader"); - return PM3_SUCCESS; -} -static int usage_15_sim(void) { - PrintAndLogEx(NORMAL, "Usage: hf 15 sim \n" - "\n" - "Example:\n" - "\thf 15 sim E016240000000000"); - return PM3_SUCCESS; -} -static int usage_15_findafi(void) { - PrintAndLogEx(NORMAL, "This command attempts to brute force AFI of an ISO15693 tag\n" - "\n" - "Usage: hf 15 findafi"); - return PM3_SUCCESS; -} -static int usage_15_writeafi(void) { - PrintAndLogEx(NORMAL, "Usage: hf 15 writeafi \n" - "\tuid (either): \n" - "\t <8B hex> full UID eg E011223344556677\n" - "\t u unaddressed mode\n" - "\t * scan for tag\n" - "\tafi#: AFI number 0-255"); - return PM3_SUCCESS; -} -static int usage_15_writedsfid(void) { - PrintAndLogEx(NORMAL, "Usage: hf 15 writedsfid \n" - "\tuid (either): \n" - "\t <8B hex> full UID eg E011223344556677\n" - "\t u unaddressed mode\n" - "\t * scan for tag\n" - "\tdsfid#: DSFID number 0-255"); - return PM3_SUCCESS; -} -static int usage_15_dump(void) { - PrintAndLogEx(NORMAL, "This command dumps the contents of a ISO-15693 tag and save it to file\n" - "\n" - "Usage: hf 15 dump [h] \n" - "Options:\n" - "\th this help\n" - "\tf filename, if no UID will be used as filename\n" - "\n" - "Example:\n" - "\thf 15 dump f\n" - "\thf 15 dump f mydump"); - return PM3_SUCCESS; -} -static int usage_15_restore(void) { - const char *options[][2] = { - {"h", "this help"}, - {"-2", "use slower '1 out of 256' mode"}, - {"-o", "set OPTION Flag (needed for TI)"}, - {"a", "use addressed mode"}, - {"r ", "numbers of retries on error, default is 3"}, - {"f ", "load "}, - {"b ", "block size, default is 4"} - }; - PrintAndLogEx(NORMAL, "Usage: hf 15 restore [-2] [-o] [h] [r ] [u ] [f ] [b ]"); - PrintAndLogOptions(options, 7, 3); - return PM3_SUCCESS; -} -static int usage_15_raw(void) { - const char *options[][2] = { - {"-r", "do not read response" }, - {"-2", "use slower '1 out of 256' mode" }, - {"-c", "calculate and append CRC" }, - {"-p", "leave the signal field ON" }, - {"", "Tip: turn on debugging for verbose output"}, - }; - PrintAndLogEx(NORMAL, "Usage: hf 15 raw [-r] [-2] [-c] <0A 0B 0C ... hex>\n"); - PrintAndLogOptions(options, 4, 3); - return PM3_SUCCESS; -} -static int usage_15_read(void) { - PrintAndLogEx(NORMAL, "Usage: hf 15 read [options] \n" - "Options:\n" - "\t-2 use slower '1 out of 256' mode\n" - "\tuid (either): \n" - "\t <8B hex> full UID eg E011223344556677\n" - "\t u unaddressed mode\n" - "\t * scan for tag\n" - "\tpage#: page number 0-255"); - return PM3_SUCCESS; -} -static int usage_15_write(void) { - PrintAndLogEx(NORMAL, "Usage: hf 15 write [options] \n" - "Options:\n" - "\t-2 use slower '1 out of 256' mode\n" - "\t-o set OPTION Flag (needed for TI)\n" - "\tuid (either): \n" - "\t <8B hex> full UID eg E011223344556677\n" - "\t u unaddressed mode\n" - "\t * scan for tag\n" - "\tpage#: page number 0-255\n" - "\thexdata: data to be written eg AA BB CC DD"); - return PM3_SUCCESS; -} -static int usage_15_readmulti(void) { - PrintAndLogEx(NORMAL, "Usage: hf 15 readmulti [options] \n" - "Options:\n" - "\t-2 use slower '1 out of 256' mode\n" - "\tuid (either): \n" - "\t <8B hex> full UID eg E011223344556677\n" - "\t u unaddressed mode\n" - "\t * scan for tag\n" - "\tstart#: page number to start 0-255\n" - "\tcount#: number of pages"); - return PM3_SUCCESS; -} -static int usage_15_csetuid(void) { - PrintAndLogEx(NORMAL, "Set UID for magic Chinese card (only works with such cards)\n" - "\n" - "Usage: hf 15 csetuid \n" - "Options:\n" - "\tuid : <8B hex> full UID eg E011223344556677\n" - "\n" - "Example:\n" - "\thf 15 csetuid E011223344556677"); - return PM3_SUCCESS; + +// used with 'hf search' +bool readHF15Uid(bool loop, bool verbose) { + uint8_t uid[8] = {0}; + if (getUID(loop, uid) == false) { + if (verbose) PrintAndLogEx(WARNING, "No tag found"); + return false; + } + return true; } /** @@ -583,7 +604,7 @@ static bool prepareHF15Cmd(char **cmd, uint16_t *reqlen, uint8_t *arg1, uint8_t req[tmpreqlen++] |= ISO15_REQ_SUBCARRIER_SINGLE | ISO15_REQ_DATARATE_HIGH | ISO15_REQ_NONINVENTORY | ISO15_REQ_ADDRESS; req[tmpreqlen++] = iso15cmd; - if (!getUID(uid)) { + if (getUID(false, uid) == false) { PrintAndLogEx(WARNING, "No tag found"); return false; } @@ -594,7 +615,6 @@ static bool prepareHF15Cmd(char **cmd, uint16_t *reqlen, uint8_t *arg1, uint8_t default: req[tmpreqlen++] |= ISO15_REQ_SUBCARRIER_SINGLE | ISO15_REQ_DATARATE_HIGH | ISO15_REQ_NONINVENTORY | ISO15_REQ_ADDRESS; req[tmpreqlen++] = iso15cmd; - // parse UID for (int i = 0; i < 8 && (*cmd)[i * 2] && (*cmd)[i * 2 + 1]; i++) { sscanf((char[]) {(*cmd)[i * 2], (*cmd)[i * 2 + 1], 0}, "%X", &temp); @@ -710,17 +730,85 @@ static int CmdHF15Samples(const char *Cmd) { // Get NXP system information from SLIX2 tag/VICC static int NxpSysInfo(uint8_t *uid) { - PacketResponseNG resp; - uint8_t *recv; - uint8_t req[PM3_CMD_DATA_SIZE] = {0}; - uint16_t reqlen; - uint32_t status; - uint8_t arg1 = 1; - if (uid != NULL) { + if (uid == NULL) { + return PM3_EINVARG; + } + + uint8_t req[PM3_CMD_DATA_SIZE] = {0}; + uint8_t fast = 1; + uint8_t reply = 1; + uint16_t reqlen = 0; + + req[reqlen++] |= ISO15_REQ_SUBCARRIER_SINGLE | ISO15_REQ_DATARATE_HIGH | ISO15_REQ_NONINVENTORY | ISO15_REQ_ADDRESS; + req[reqlen++] = ISO15_CMD_GETNXPSYSTEMINFO; + req[reqlen++] = 0x04; // IC manufacturer code + memcpy(req + 3, uid, 8); // add UID + reqlen += 8; + + AddCrc15(req, reqlen); + reqlen += 2; + + PacketResponseNG resp; + clearCommandBuffer(); + SendCommandMIX(CMD_HF_ISO15693_COMMAND, reqlen, fast, reply, req, reqlen); + if (!WaitForResponseTimeout(CMD_ACK, &resp, 2000)) { + PrintAndLogEx(WARNING, "iso15693 timeout"); + DropField(); + return PM3_ETIMEOUT; + } + + DropField(); + + int status = resp.oldarg[0]; + if (status < 2) { + PrintAndLogEx(WARNING, "iso15693 card doesn't answer to NXP systeminfo command"); + return PM3_EWRONGANSWER; + } + + uint8_t *recv = resp.data.asBytes; + + if ((recv[0] & ISO15_RES_ERROR) == ISO15_RES_ERROR) { + PrintAndLogEx(ERR, "iso15693 card returned error %i: %s", recv[0], TagErrorStr(recv[0])); + return PM3_EWRONGANSWER; + } + + bool support_signature = (recv[5] & 0x01); + bool support_easmode = (recv[4] & 0x03); + + PrintAndLogEx(INFO, "--------- " _CYAN_("NXP Sysinfo") " ---------"); + PrintAndLogEx(INFO, " raw : %s", sprint_hex(recv, 8)); + PrintAndLogEx(INFO, " Password protection configuration:"); + PrintAndLogEx(INFO, " * Page L read%s password protected", ((recv[2] & 0x01) ? "" : " not")); + PrintAndLogEx(INFO, " * Page L write%s password protected", ((recv[2] & 0x02) ? "" : " not")); + PrintAndLogEx(INFO, " * Page H read%s password protected", ((recv[2] & 0x08) ? "" : " not")); + PrintAndLogEx(INFO, " * Page H write%s password protected", ((recv[2] & 0x20) ? "" : " not")); + + PrintAndLogEx(INFO, " Lock bits:"); + PrintAndLogEx(INFO, " * AFI%s locked", ((recv[3] & 0x01) ? "" : " not")); // AFI lock bit + PrintAndLogEx(INFO, " * EAS%s locked", ((recv[3] & 0x02) ? "" : " not")); // EAS lock bit + PrintAndLogEx(INFO, " * DSFID%s locked", ((recv[3] & 0x03) ? "" : " not")); // DSFID lock bit + PrintAndLogEx(INFO, " * Password protection configuration%s locked", ((recv[3] & 0x04) ? "" : " not")); // Password protection pointer address and access conditions lock bit + + PrintAndLogEx(INFO, " Features:"); + PrintAndLogEx(INFO, " * User memory password protection%s supported", ((recv[4] & 0x01) ? "" : " not")); + PrintAndLogEx(INFO, " * Counter feature%s supported", ((recv[4] & 0x02) ? "" : " not")); + PrintAndLogEx(INFO, " * EAS ID%s supported by EAS ALARM command", support_easmode ? "" : " not"); + PrintAndLogEx(INFO, " * EAS password protection%s supported", ((recv[4] & 0x04) ? "" : " not")); + PrintAndLogEx(INFO, " * AFI password protection%s supported", ((recv[4] & 0x10) ? "" : " not")); + PrintAndLogEx(INFO, " * Extended mode%s supported by INVENTORY READ command", ((recv[4] & 0x20) ? "" : " not")); + PrintAndLogEx(INFO, " * EAS selection%s supported by extended mode in INVENTORY READ command", ((recv[4] & 0x40) ? "" : " not")); + PrintAndLogEx(INFO, " * READ SIGNATURE command%s supported", support_signature ? "" : " not"); + PrintAndLogEx(INFO, " * Password protection for READ SIGNATURE command%s supported", ((recv[5] & 0x02) ? "" : " not")); + PrintAndLogEx(INFO, " * STAY QUIET PERSISTENT command%s supported", ((recv[5] & 0x03) ? "" : " not")); + PrintAndLogEx(INFO, " * ENABLE PRIVACY command%s supported", ((recv[5] & 0x10) ? "" : " not")); + PrintAndLogEx(INFO, " * DESTROY command%s supported", ((recv[5] & 0x20) ? "" : " not")); + PrintAndLogEx(INFO, " * Additional 32 bits feature flags are%s transmitted", ((recv[5] & 0x80) ? "" : " not")); + + if (support_easmode) { reqlen = 0; req[reqlen++] |= ISO15_REQ_SUBCARRIER_SINGLE | ISO15_REQ_DATARATE_HIGH | ISO15_REQ_NONINVENTORY | ISO15_REQ_ADDRESS; - req[reqlen++] = ISO15_CMD_GETNXPSYSTEMINFO; + req[reqlen++] = ISO15_CMD_EASALARM; req[reqlen++] = 0x04; // IC manufacturer code memcpy(req + 3, uid, 8); // add UID reqlen += 8; @@ -728,13 +816,45 @@ static int NxpSysInfo(uint8_t *uid) { AddCrc15(req, reqlen); reqlen += 2; - //PrintAndLogEx(NORMAL, "cmd %s", sprint_hex(req, reqlen) ); - clearCommandBuffer(); - SendCommandOLD(CMD_HF_ISO15693_COMMAND, reqlen, arg1, 1, req, reqlen); + SendCommandMIX(CMD_HF_ISO15693_COMMAND, reqlen, fast, reply, req, reqlen); if (!WaitForResponseTimeout(CMD_ACK, &resp, 2000)) { - PrintAndLogEx(WARNING, "iso15693 card select failed"); + PrintAndLogEx(WARNING, "iso15693 timeout"); + } else { + PrintAndLogEx(NORMAL, ""); + + status = resp.oldarg[0]; + if (status < 2) { + PrintAndLogEx(INFO, " EAS (Electronic Article Surveillance) is not active"); + } else { + recv = resp.data.asBytes; + + if (!(recv[0] & ISO15_RES_ERROR)) { + PrintAndLogEx(INFO, " EAS (Electronic Article Surveillance) is active."); + PrintAndLogEx(INFO, " EAS sequence: %s", sprint_hex(recv + 1, 32)); + } + } + } + } + + if (support_signature) { + // Check if we can also read the signature + reqlen = 0; + req[reqlen++] |= ISO15_REQ_SUBCARRIER_SINGLE | ISO15_REQ_DATARATE_HIGH | ISO15_REQ_NONINVENTORY | ISO15_REQ_ADDRESS; + req[reqlen++] = ISO15_CMD_READSIGNATURE; + req[reqlen++] = 0x04; // IC manufacturer code + memcpy(req + 3, uid, 8); // add UID + reqlen += 8; + + AddCrc15(req, reqlen); + reqlen += 2; + + clearCommandBuffer(); + SendCommandMIX(CMD_HF_ISO15693_COMMAND, reqlen, fast, reply, req, reqlen); + + if (!WaitForResponseTimeout(CMD_ACK, &resp, 2000)) { + PrintAndLogEx(WARNING, "iso15693 timeout"); DropField(); return PM3_ETIMEOUT; } @@ -742,134 +862,22 @@ static int NxpSysInfo(uint8_t *uid) { DropField(); status = resp.oldarg[0]; - if (status < 2) { - PrintAndLogEx(WARNING, "iso15693 card doesn't answer to NXP systeminfo command"); + PrintAndLogEx(WARNING, "iso15693 card doesn't answer to READ SIGNATURE command"); return PM3_EWRONGANSWER; } recv = resp.data.asBytes; - if (recv[0] & ISO15_RES_ERROR) { + if ((recv[0] & ISO15_RES_ERROR) == ISO15_RES_ERROR) { PrintAndLogEx(ERR, "iso15693 card returned error %i: %s", recv[0], TagErrorStr(recv[0])); return PM3_EWRONGANSWER; } - bool support_signature = (recv[5] & 0x01); - bool support_easmode = (recv[4] & 0x03); + uint8_t signature[32] = {0x00}; + memcpy(signature, recv + 1, 32); - PrintAndLogEx(NORMAL, ""); - PrintAndLogEx(NORMAL, " NXP SYSINFO : %s", sprint_hex(recv, 8)); - PrintAndLogEx(NORMAL, " Password protection configuration:"); - PrintAndLogEx(NORMAL, " * Page L read%s password protected", ((recv[2] & 0x01) ? "" : " not")); - PrintAndLogEx(NORMAL, " * Page L write%s password protected", ((recv[2] & 0x02) ? "" : " not")); - PrintAndLogEx(NORMAL, " * Page H read%s password protected", ((recv[2] & 0x08) ? "" : " not")); - PrintAndLogEx(NORMAL, " * Page H write%s password protected", ((recv[2] & 0x20) ? "" : " not")); - - PrintAndLogEx(NORMAL, " Lock bits:"); - PrintAndLogEx(NORMAL, " * AFI%s locked", ((recv[3] & 0x01) ? "" : " not")); // AFI lock bit - PrintAndLogEx(NORMAL, " * EAS%s locked", ((recv[3] & 0x02) ? "" : " not")); // EAS lock bit - PrintAndLogEx(NORMAL, " * DSFID%s locked", ((recv[3] & 0x03) ? "" : " not")); // DSFID lock bit - PrintAndLogEx(NORMAL, " * Password protection configuration%s locked", ((recv[3] & 0x04) ? "" : " not")); // Password protection pointer address and access conditions lock bit - - PrintAndLogEx(NORMAL, " Features:"); - PrintAndLogEx(NORMAL, " * User memory password protection%s supported", ((recv[4] & 0x01) ? "" : " not")); - PrintAndLogEx(NORMAL, " * Counter feature%s supported", ((recv[4] & 0x02) ? "" : " not")); - PrintAndLogEx(NORMAL, " * EAS ID%s supported by EAS ALARM command", support_easmode ? "" : " not"); - - PrintAndLogEx(NORMAL, " * EAS password protection%s supported", ((recv[4] & 0x04) ? "" : " not")); - PrintAndLogEx(NORMAL, " * AFI password protection%s supported", ((recv[4] & 0x10) ? "" : " not")); - PrintAndLogEx(NORMAL, " * Extended mode%s supported by INVENTORY READ command", ((recv[4] & 0x20) ? "" : " not")); - PrintAndLogEx(NORMAL, " * EAS selection%s supported by extended mode in INVENTORY READ command", ((recv[4] & 0x40) ? "" : " not")); - PrintAndLogEx(NORMAL, " * READ SIGNATURE command%s supported", support_signature ? "" : " not"); - - PrintAndLogEx(NORMAL, " * Password protection for READ SIGNATURE command%s supported", ((recv[5] & 0x02) ? "" : " not")); - PrintAndLogEx(NORMAL, " * STAY QUIET PERSISTENT command%s supported", ((recv[5] & 0x03) ? "" : " not")); - PrintAndLogEx(NORMAL, " * ENABLE PRIVACY command%s supported", ((recv[5] & 0x10) ? "" : " not")); - PrintAndLogEx(NORMAL, " * DESTROY command%s supported", ((recv[5] & 0x20) ? "" : " not")); - PrintAndLogEx(NORMAL, " * Additional 32 bits feature flags are%s transmitted", ((recv[5] & 0x80) ? "" : " not")); - - if (support_easmode) { - reqlen = 0; - req[reqlen++] |= ISO15_REQ_SUBCARRIER_SINGLE | ISO15_REQ_DATARATE_HIGH | ISO15_REQ_NONINVENTORY | ISO15_REQ_ADDRESS; - req[reqlen++] = ISO15_CMD_EASALARM; - req[reqlen++] = 0x04; // IC manufacturer code - memcpy(req + 3, uid, 8); // add UID - reqlen += 8; - - AddCrc15(req, reqlen); - reqlen += 2; - - //PrintAndLogEx(NORMAL, "cmd %s", sprint_hex(req, reqlen) ); - - clearCommandBuffer(); - SendCommandOLD(CMD_HF_ISO15693_COMMAND, reqlen, arg1, 1, req, reqlen); - - if (!WaitForResponseTimeout(CMD_ACK, &resp, 2000)) { - PrintAndLogEx(WARNING, "iso15693 card select failed"); - } else { - status = resp.oldarg[0]; - - PrintAndLogEx(NORMAL, ""); - - if (status < 2) { - PrintAndLogEx(INFO, " EAS (Electronic Article Surveillance) is not active"); - } else { - recv = resp.data.asBytes; - - if (!(recv[0] & ISO15_RES_ERROR)) { - PrintAndLogEx(INFO, " EAS (Electronic Article Surveillance) is active."); - PrintAndLogEx(INFO, " EAS sequence: %s", sprint_hex(recv + 1, 32)); - } - } - } - } - - if (support_signature) { - // Check if we can also read the signature - reqlen = 0; - req[reqlen++] |= ISO15_REQ_SUBCARRIER_SINGLE | ISO15_REQ_DATARATE_HIGH | ISO15_REQ_NONINVENTORY | ISO15_REQ_ADDRESS; - req[reqlen++] = ISO15_CMD_READSIGNATURE; - req[reqlen++] = 0x04; // IC manufacturer code - memcpy(req + 3, uid, 8); // add UID - reqlen += 8; - - AddCrc15(req, reqlen); - reqlen += 2; - - //PrintAndLogEx(NORMAL, "cmd %s", sprint_hex(req, reqlen) ); - - clearCommandBuffer(); - SendCommandOLD(CMD_HF_ISO15693_COMMAND, reqlen, arg1, 1, req, reqlen); - - if (!WaitForResponseTimeout(CMD_ACK, &resp, 2000)) { - PrintAndLogEx(WARNING, "iso15693 card select failed"); - DropField(); - return PM3_ETIMEOUT; - } - - DropField(); - - status = resp.oldarg[0]; - - if (status < 2) { - PrintAndLogEx(WARNING, "iso15693 card doesn't answer to READ SIGNATURE command"); - return PM3_EWRONGANSWER; - } - - recv = resp.data.asBytes; - - if (recv[0] & ISO15_RES_ERROR) { - PrintAndLogEx(ERR, "iso15693 card returned error %i: %s", recv[0], TagErrorStr(recv[0])); - return PM3_EWRONGANSWER; - } - - uint8_t signature[32] = {0x00}; - memcpy(signature, recv + 1, 32); - - nxp_15693_print_signature(uid, signature); - - } + nxp_15693_print_signature(uid, signature); } return PM3_SUCCESS; @@ -885,85 +893,84 @@ static int CmdHF15Info(const char *Cmd) { if (strlen(Cmd) < 1 || cmdp == 'h') return usage_15_info(); PacketResponseNG resp; - uint8_t *recv; uint8_t req[PM3_CMD_DATA_SIZE] = {0}; uint16_t reqlen; - uint8_t arg1 = 1; - char cmdbuf[100] = {0}; - char *cmd = cmdbuf; + uint8_t fast = 1; + uint8_t reply = 1; uint8_t uid[8] = {0, 0, 0, 0, 0, 0, 0, 0}; + char cmdbuf[100] = {0}; + char *cmd = cmdbuf; strncpy(cmd, Cmd, sizeof(cmdbuf) - 1); - if (!prepareHF15Cmd(&cmd, &reqlen, &arg1, req, ISO15_CMD_SYSINFO)) + if (prepareHF15Cmd(&cmd, &reqlen, &fast, req, ISO15_CMD_SYSINFO) == false) return PM3_SUCCESS; AddCrc15(req, reqlen); reqlen += 2; clearCommandBuffer(); - SendCommandOLD(CMD_HF_ISO15693_COMMAND, reqlen, arg1, 1, req, reqlen); + SendCommandMIX(CMD_HF_ISO15693_COMMAND, reqlen, fast, reply, req, reqlen); if (!WaitForResponseTimeout(CMD_ACK, &resp, 2000)) { - PrintAndLogEx(WARNING, "iso15693 card select failed"); + PrintAndLogEx(WARNING, "iso15693 timeout"); DropField(); return PM3_ETIMEOUT; } DropField(); - uint32_t status = resp.oldarg[0]; - + int status = resp.oldarg[0]; if (status < 2) { PrintAndLogEx(WARNING, "iso15693 card doesn't answer to systeminfo command"); return PM3_EWRONGANSWER; } - recv = resp.data.asBytes; + uint8_t *data = resp.data.asBytes; - if (recv[0] & ISO15_RES_ERROR) { - PrintAndLogEx(ERR, "iso15693 card returned error %i: %s", recv[0], TagErrorStr(recv[0])); + if ((data[0] & ISO15_RES_ERROR) == ISO15_RES_ERROR) { + PrintAndLogEx(ERR, "iso15693 card returned error %i: %s", data[0], TagErrorStr(data[0])); return PM3_EWRONGANSWER; } - memcpy(uid, recv + 2, sizeof(uid)); + memcpy(uid, data + 2, sizeof(uid)); PrintAndLogEx(NORMAL, ""); PrintAndLogEx(INFO, "--- " _CYAN_("Tag Information") " ---------------------------"); PrintAndLogEx(INFO, "-------------------------------------------------------------"); - PrintAndLogEx(SUCCESS, " TYPE: " _YELLOW_("%s"), getTagInfo_15(recv + 2)); + PrintAndLogEx(SUCCESS, " TYPE: " _YELLOW_("%s"), getTagInfo_15(data + 2)); PrintAndLogEx(SUCCESS, " UID: " _GREEN_("%s"), iso15693_sprintUID(NULL, uid)); - PrintAndLogEx(SUCCESS, " SYSINFO: %s", sprint_hex(recv, status - 2)); + PrintAndLogEx(SUCCESS, " SYSINFO: %s", sprint_hex(data, status - 2)); // DSFID - if (recv[1] & 0x01) - PrintAndLogEx(SUCCESS, " - DSFID supported [0x%02X]", recv[10]); + if (data[1] & 0x01) + PrintAndLogEx(SUCCESS, " - DSFID supported [0x%02X]", data[10]); else PrintAndLogEx(SUCCESS, " - DSFID not supported"); // AFI - if (recv[1] & 0x02) - PrintAndLogEx(SUCCESS, " - AFI supported [0x%02X]", recv[11]); + if (data[1] & 0x02) + PrintAndLogEx(SUCCESS, " - AFI supported [0x%02X]", data[11]); else PrintAndLogEx(SUCCESS, " - AFI not supported"); // IC reference - if (recv[1] & 0x08) - PrintAndLogEx(SUCCESS, " - IC reference supported [0x%02X]", recv[14]); + if (data[1] & 0x08) + PrintAndLogEx(SUCCESS, " - IC reference supported [0x%02X]", data[14]); else PrintAndLogEx(SUCCESS, " - IC reference not supported"); // memory - if (recv[1] & 0x04) { + if (data[1] & 0x04) { PrintAndLogEx(SUCCESS, " - Tag provides info on memory layout (vendor dependent)"); - uint8_t blocks = recv[12] + 1; - uint8_t size = (recv[13] & 0x1F); + uint8_t blocks = data[12] + 1; + uint8_t size = (data[13] & 0x1F); PrintAndLogEx(SUCCESS, " %u (or %u) bytes/blocks x %u blocks", size + 1, size, blocks); } else { PrintAndLogEx(SUCCESS, " - Tag does not provide information on memory layout"); } // Check if SLIX2 and attempt to get NXP System Information - PrintAndLogEx(DEBUG, "4 & 08 :: %02x 7 == 1 :: %u 8 == 4 :: %u", recv[4], recv[7], recv[8]); - if (recv[8] == 0x04 && recv[7] == 0x01 && recv[4] & 0x80) { + PrintAndLogEx(DEBUG, "4 & 08 :: %02x 7 == 1 :: %u 8 == 4 :: %u", data[4], data[7], data[8]); + if (data[8] == 0x04 && data[7] == 0x01 && data[4] & 0x80) { return NxpSysInfo(uid); } @@ -977,16 +984,23 @@ static int CmdHF15Sniff(const char *Cmd) { char cmdp = tolower(param_getchar(Cmd, 0)); if (cmdp == 'h') return usage_15_record(); + PacketResponseNG resp; clearCommandBuffer(); SendCommandNG(CMD_HF_ISO15693_SNIFF, NULL, 0); + + WaitForResponse(CMD_HF_ISO15693_SNIFF, &resp); + + PrintAndLogEx(HINT, "Try `" _YELLOW_("hf 15 list") "` to view captured tracelog"); + PrintAndLogEx(HINT, "Try `" _YELLOW_("trace save h") "` to save tracelog for later analysing"); return PM3_SUCCESS; } static int CmdHF15Reader(const char *Cmd) { char cmdp = tolower(param_getchar(Cmd, 0)); if (cmdp == 'h') return usage_15_reader(); + bool loop_read = (cmdp == '1') ? false : true; - readHF15Uid(true); + readHF15Uid(loop_read, true); return PM3_SUCCESS; } @@ -1005,7 +1019,7 @@ static int CmdHF15Sim(const char *Cmd) { PrintAndLogEx(SUCCESS, "Starting simulating UID " _YELLOW_("%s"), iso15693_sprintUID(NULL, uid)); clearCommandBuffer(); - SendCommandOLD(CMD_HF_ISO15693_SIMULATE, 0, 0, 0, uid, 8); + SendCommandMIX(CMD_HF_ISO15693_SIMULATE, 0, 0, 0, uid, 8); return PM3_SUCCESS; } @@ -1042,11 +1056,8 @@ static int CmdHF15FindAfi(const char *Cmd) { // Writes the AFI (Application Family Identifier) of a card static int CmdHF15WriteAfi(const char *Cmd) { - char cmdp = param_getchar(Cmd, 0); - if (strlen(Cmd) < 3 || cmdp == 'h' || cmdp == 'H') return usage_15_writeafi(); - - PacketResponseNG resp; - uint8_t *recv; + char cmdp = tolower(param_getchar(Cmd, 0)); + if (strlen(Cmd) < 3 || cmdp == 'h') return usage_15_writeafi(); // arg: len, speed, recv? // arg0 (datalen, cmd len? .arg0 == crc?) @@ -1054,58 +1065,54 @@ static int CmdHF15WriteAfi(const char *Cmd) { // arg2 (recv == 1 == expect a response) uint8_t req[PM3_CMD_DATA_SIZE] = {0}; uint16_t reqlen = 0; - uint8_t arg1 = 1; - int afinum; + uint8_t fast = 1; + uint8_t reply = 1; + char cmdbuf[100] = {0}; char *cmd = cmdbuf; strncpy(cmd, Cmd, sizeof(cmdbuf) - 1); - if (!prepareHF15Cmd(&cmd, &reqlen, &arg1, req, ISO15_CMD_WRITEAFI)) + if (!prepareHF15Cmd(&cmd, &reqlen, &fast, req, ISO15_CMD_WRITEAFI)) return PM3_SUCCESS; req[0] |= ISO15_REQ_OPTION; // Since we are writing - afinum = strtol(cmd, NULL, 0); + int afinum = strtol(cmd, NULL, 0); req[reqlen++] = (uint8_t)afinum; AddCrc15(req, reqlen); reqlen += 2; - // PrintAndLogEx(NORMAL, "cmd %s", sprint_hex(req, reqlen) ); - + PacketResponseNG resp; clearCommandBuffer(); - SendCommandOLD(CMD_HF_ISO15693_COMMAND, reqlen, arg1, 1, req, reqlen); + SendCommandMIX(CMD_HF_ISO15693_COMMAND, reqlen, fast, reply, req, reqlen); if (!WaitForResponseTimeout(CMD_ACK, &resp, 2000)) { - PrintAndLogEx(ERR, "iso15693 card select failed"); + PrintAndLogEx(ERR, "iso15693 timeout"); DropField(); return PM3_ETIMEOUT; } DropField(); - recv = resp.data.asBytes; + uint8_t *data = resp.data.asBytes; - if (recv[0] & ISO15_RES_ERROR) { - PrintAndLogEx(ERR, "iso15693 card returned error %i: %s", recv[0], TagErrorStr(recv[0])); + if ((data[0] & ISO15_RES_ERROR) == ISO15_RES_ERROR) { + PrintAndLogEx(ERR, "iso15693 card returned error %i: %s", data[0], TagErrorStr(data[0])); return PM3_EWRONGANSWER; } PrintAndLogEx(NORMAL, ""); PrintAndLogEx(SUCCESS, "Wrote AFI 0x%02X", afinum); - return PM3_SUCCESS; } // Writes the DSFID (Data Storage Format Identifier) of a card static int CmdHF15WriteDsfid(const char *Cmd) { - char cmdp = param_getchar(Cmd, 0); - if (strlen(Cmd) < 3 || cmdp == 'h' || cmdp == 'H') return usage_15_writedsfid(); - - PacketResponseNG resp; - uint8_t *recv; + char cmdp = tolower(param_getchar(Cmd, 0)); + if (strlen(Cmd) < 3 || cmdp == 'h') return usage_15_writedsfid(); // arg: len, speed, recv? // arg0 (datalen, cmd len? .arg0 == crc?) @@ -1113,13 +1120,15 @@ static int CmdHF15WriteDsfid(const char *Cmd) { // arg2 (recv == 1 == expect a response) uint8_t req[PM3_CMD_DATA_SIZE] = {0}; uint16_t reqlen = 0; - uint8_t arg1 = 1; + uint8_t fast = 1; + uint8_t reply = 1; int dsfidnum; + char cmdbuf[100] = {0}; char *cmd = cmdbuf; strncpy(cmd, Cmd, sizeof(cmdbuf) - 1); - if (!prepareHF15Cmd(&cmd, &reqlen, &arg1, req, ISO15_CMD_WRITEDSFID)) + if (prepareHF15Cmd(&cmd, &reqlen, &fast, req, ISO15_CMD_WRITEDSFID) == false) return PM3_SUCCESS; req[0] |= ISO15_REQ_OPTION; // Since we are writing @@ -1132,28 +1141,27 @@ static int CmdHF15WriteDsfid(const char *Cmd) { reqlen += 2; // PrintAndLogEx(NORMAL, "cmd %s", sprint_hex(req, reqlen) ); - + PacketResponseNG resp; clearCommandBuffer(); - SendCommandOLD(CMD_HF_ISO15693_COMMAND, reqlen, arg1, 1, req, reqlen); + SendCommandMIX(CMD_HF_ISO15693_COMMAND, reqlen, fast, reply, req, reqlen); if (!WaitForResponseTimeout(CMD_ACK, &resp, 2000)) { - PrintAndLogEx(ERR, "iso15693 card select failed"); + PrintAndLogEx(ERR, "iso15693 timeout"); DropField(); return PM3_ETIMEOUT; } DropField(); - recv = resp.data.asBytes; + uint8_t *data = resp.data.asBytes; - if (recv[0] & ISO15_RES_ERROR) { - PrintAndLogEx(ERR, "iso15693 card returned error %i: %s", recv[0], TagErrorStr(recv[0])); + if ((data[0] & ISO15_RES_ERROR) == ISO15_RES_ERROR) { + PrintAndLogEx(ERR, "iso15693 card returned error %i: %s", data[0], TagErrorStr(data[0])); return PM3_EWRONGANSWER; } PrintAndLogEx(NORMAL, ""); PrintAndLogEx(SUCCESS, "Wrote DSFID 0x%02X", dsfidnum); - return PM3_SUCCESS; } @@ -1186,15 +1194,13 @@ static int CmdHF15Dump(const char *Cmd) { //Validations if (errors) return usage_15_dump(); - if (!getUID(uid)) { + if (getUID(false, uid) == false) { PrintAndLogEx(WARNING, "No tag found."); return PM3_ESOFT; } if (fileNameLen < 1) { - PrintAndLogEx(INFO, "Using UID as filename"); - fptr += sprintf(fptr, "hf-15-"); FillFileNameByUID(fptr, uid, "-dump", sizeof(uid)); } @@ -1225,24 +1231,24 @@ static int CmdHF15Dump(const char *Cmd) { AddCrc15(req, 11); clearCommandBuffer(); - SendCommandOLD(CMD_HF_ISO15693_COMMAND, sizeof(req), 1, 1, req, sizeof(req)); + SendCommandMIX(CMD_HF_ISO15693_COMMAND, sizeof(req), 1, 1, req, sizeof(req)); if (WaitForResponseTimeout(CMD_ACK, &resp, 2000)) { - uint8_t len = resp.oldarg[0]; + int len = resp.oldarg[0]; if (len < 2) { - PrintAndLogEx(FAILED, "iso15693 card select failed"); + PrintAndLogEx(FAILED, "iso15693 command failed"); continue; } recv = resp.data.asBytes; - if (!CheckCrc15(recv, len)) { - PrintAndLogEx(FAILED, "crc fail"); + if (CheckCrc15(recv, len) == false) { + PrintAndLogEx(FAILED, "crc (" _RED_("fail") ")"); continue; } - if (recv[0] & ISO15_RES_ERROR) { + if ((recv[0] & ISO15_RES_ERROR) == ISO15_RES_ERROR) { PrintAndLogEx(FAILED, "Tag returned Error %i: %s", recv[1], TagErrorStr(recv[1])); break; } @@ -1282,21 +1288,11 @@ static int CmdHF15List(const char *Cmd) { return PM3_SUCCESS; } -/* -// Record Activity without enabling carrier -static int CmdHF15Sniff(const char *Cmd) { - clearCommandBuffer(); - SendCommandNG(CMD_HF_ISO15693_SNIFF, NULL, 0); - return PM3_SUCCESS; -} -*/ - static int CmdHF15Raw(const char *Cmd) { - char cmdp = param_getchar(Cmd, 0); - if (strlen(Cmd) < 3 || cmdp == 'h' || cmdp == 'H') return usage_15_raw(); + char cmdp = tolower(param_getchar(Cmd, 0)); + if (strlen(Cmd) < 3 || cmdp == 'h') return usage_15_raw(); - PacketResponseNG resp; int reply = 1, fast = 1, i = 0; bool crc = false, leaveSignalON = false; char buf[5] = ""; @@ -1356,20 +1352,25 @@ static int CmdHF15Raw(const char *Cmd) { datalen += 2; } - clearCommandBuffer(); - SendCommandOLD(CMD_HF_ISO15693_COMMAND, datalen, fast, reply, data, datalen); + PacketResponseNG resp; + clearCommandBuffer(); + SendCommandMIX(CMD_HF_ISO15693_COMMAND, datalen, fast, reply, data, datalen); if (reply) { if (WaitForResponseTimeout(CMD_ACK, &resp, 2000)) { - uint8_t len = resp.oldarg[0]; - PrintAndLogEx(INFO, "received %i octets", len); - PrintAndLogEx(SUCCESS, "%s", sprint_hex(resp.data.asBytes, len)); + int len = resp.oldarg[0]; + if (len < 2) { + PrintAndLogEx(WARNING, "command failed"); + } else { + PrintAndLogEx(SUCCESS, "received %i octets", len); + PrintAndLogEx(SUCCESS, "%s", sprint_hex(resp.data.asBytes, len)); + } } else { - PrintAndLogEx(WARNING, "timeout while waiting for reply."); + PrintAndLogEx(WARNING, "timeout while waiting for reply"); } } - if (!leaveSignalON) + if (leaveSignalON == false) DropField(); return PM3_SUCCESS; @@ -1381,30 +1382,32 @@ static int CmdHF15Raw(const char *Cmd) { */ static int CmdHF15Readmulti(const char *Cmd) { - char cmdp = param_getchar(Cmd, 0); - if (strlen(Cmd) < 3 || cmdp == 'h' || cmdp == 'H') return usage_15_readmulti(); + char cmdp = tolower(param_getchar(Cmd, 0)); + if (strlen(Cmd) < 3 || cmdp == 'h') return usage_15_readmulti(); - PacketResponseNG resp; - uint8_t *recv; uint8_t req[PM3_CMD_DATA_SIZE] = {0}; uint16_t reqlen = 0; - uint8_t arg1 = 1; - uint8_t pagenum, pagecount; + uint8_t fast = 1; + uint8_t reply = 1; + char cmdbuf[100] = {0}; char *cmd = cmdbuf; strncpy(cmd, Cmd, sizeof(cmdbuf) - 1); - if (!prepareHF15Cmd(&cmd, &reqlen, &arg1, req, ISO15_CMD_READMULTI)) + if (!prepareHF15Cmd(&cmd, &reqlen, &fast, req, ISO15_CMD_READMULTI)) return PM3_SUCCESS; // add OPTION flag, in order to get lock-info req[0] |= ISO15_REQ_OPTION; // decimal - pagenum = param_get8ex(cmd, 0, 0, 10); - pagecount = param_get8ex(cmd, 1, 0, 10); + uint8_t pagenum = param_get8ex(cmd, 0, 0, 10); + uint8_t pagecount = param_get8ex(cmd, 1, 0, 10); - // PrintAndLogEx(NORMAL, "ice %d %d\n", pagenum, pagecount); + if (pagecount > 6) { + PrintAndLogEx(WARNING, "Page count must be 6 or less (%d)", pagecount); + return PM3_EINVARG; + } // 0 means 1 page, // 1 means 2 pages, ... @@ -1415,32 +1418,33 @@ static int CmdHF15Readmulti(const char *Cmd) { AddCrc15(req, reqlen); reqlen += 2; + PacketResponseNG resp; clearCommandBuffer(); - SendCommandOLD(CMD_HF_ISO15693_COMMAND, reqlen, arg1, 1, req, reqlen); + SendCommandMIX(CMD_HF_ISO15693_COMMAND, reqlen, fast, reply, req, reqlen); if (!WaitForResponseTimeout(CMD_ACK, &resp, 2000)) { - PrintAndLogEx(FAILED, "iso15693 card select failed"); + PrintAndLogEx(FAILED, "iso15693 card timeout"); DropField(); return PM3_ETIMEOUT; } DropField(); - uint32_t status = resp.oldarg[0]; + int status = resp.oldarg[0]; if (status < 2) { - PrintAndLogEx(FAILED, "iso15693 card select failed"); + PrintAndLogEx(FAILED, "iso15693 card readmulti failed"); return PM3_EWRONGANSWER; } - recv = resp.data.asBytes; - - if (!CheckCrc15(recv, status)) { - PrintAndLogEx(FAILED, "CRC failed"); + uint8_t *data = resp.data.asBytes; + + if (CheckCrc15(data, status) == false) { + PrintAndLogEx(FAILED, "crc (" _RED_("fail") ")"); return PM3_ESOFT; } - if (recv[0] & ISO15_RES_ERROR) { - PrintAndLogEx(FAILED, "iso15693 card returned error %i: %s", recv[0], TagErrorStr(recv[0])); + if ((data[0] & ISO15_RES_ERROR) == ISO15_RES_ERROR) { + PrintAndLogEx(FAILED, "iso15693 card returned error %i: %s", data[0], TagErrorStr(data[0])); return PM3_EWRONGANSWER; } @@ -1448,12 +1452,14 @@ static int CmdHF15Readmulti(const char *Cmd) { int start = 1; int stop = (pagecount + 1) * 5; int currblock = pagenum; - // print response + + PrintAndLogEx(NORMAL, ""); PrintAndLogEx(NORMAL, "block# | data |lck| ascii"); PrintAndLogEx(NORMAL, "---------+--------------+---+----------"); + for (int i = start; i < stop; i += 5) { - PrintAndLogEx(NORMAL, "%3d/0x%02X | %s | %d | %s", currblock, currblock, sprint_hex(recv + i + 1, 4), recv[i], sprint_ascii(recv + i + 1, 4)); + PrintAndLogEx(NORMAL, "%3d/0x%02X | %s | %d | %s", currblock, currblock, sprint_hex(data + i + 1, 4), data[i], sprint_ascii(data + i + 1, 4)); currblock++; } @@ -1466,11 +1472,8 @@ static int CmdHF15Readmulti(const char *Cmd) { */ static int CmdHF15Read(const char *Cmd) { - char cmdp = param_getchar(Cmd, 0); - if (strlen(Cmd) < 3 || cmdp == 'h' || cmdp == 'H') return usage_15_read(); - - PacketResponseNG resp; - uint8_t *recv; + char cmdp = tolower(param_getchar(Cmd, 0)); + if (strlen(Cmd) < 3 || cmdp == 'h') return usage_15_read(); // arg: len, speed, recv? // arg0 (datalen, cmd len? .arg0 == crc?) @@ -1478,13 +1481,14 @@ static int CmdHF15Read(const char *Cmd) { // arg2 (recv == 1 == expect a response) uint8_t req[PM3_CMD_DATA_SIZE] = {0}; uint16_t reqlen = 0; - uint8_t arg1 = 1; + uint8_t fast = 1; + uint8_t reply = 1; int blocknum; char cmdbuf[100] = {0}; char *cmd = cmdbuf; strncpy(cmd, Cmd, sizeof(cmdbuf) - 1); - if (!prepareHF15Cmd(&cmd, &reqlen, &arg1, req, ISO15_CMD_READ)) + if (prepareHF15Cmd(&cmd, &reqlen, &fast, req, ISO15_CMD_READ) == false) return PM3_SUCCESS; // add OPTION flag, in order to get lock-info @@ -1497,32 +1501,33 @@ static int CmdHF15Read(const char *Cmd) { AddCrc15(req, reqlen); reqlen += 2; + PacketResponseNG resp; clearCommandBuffer(); - SendCommandOLD(CMD_HF_ISO15693_COMMAND, reqlen, arg1, 1, req, reqlen); + SendCommandMIX(CMD_HF_ISO15693_COMMAND, reqlen, fast, reply, req, reqlen); if (!WaitForResponseTimeout(CMD_ACK, &resp, 2000)) { - PrintAndLogEx(ERR, "iso15693 card select failed"); + PrintAndLogEx(ERR, "iso15693 timeout"); DropField(); return PM3_ETIMEOUT; } DropField(); - uint32_t status = resp.oldarg[0]; + int status = resp.oldarg[0]; if (status < 2) { - PrintAndLogEx(ERR, "iso15693 card select failed"); + PrintAndLogEx(ERR, "iso15693 command failed"); return PM3_EWRONGANSWER; } - recv = resp.data.asBytes; + uint8_t *data = resp.data.asBytes; - if (!CheckCrc15(recv, status)) { - PrintAndLogEx(ERR, "CRC failed"); + if (CheckCrc15(data, status) == false) { + PrintAndLogEx(FAILED, "crc (" _RED_("fail") ")"); return PM3_ESOFT; } - if (recv[0] & ISO15_RES_ERROR) { - PrintAndLogEx(ERR, "iso15693 card returned error %i: %s", recv[0], TagErrorStr(recv[0])); + if ((data[0] & ISO15_RES_ERROR) == ISO15_RES_ERROR) { + PrintAndLogEx(ERR, "iso15693 card returned error %i: %s", data[0], TagErrorStr(data[0])); return PM3_EWRONGANSWER; } @@ -1530,7 +1535,7 @@ static int CmdHF15Read(const char *Cmd) { PrintAndLogEx(NORMAL, ""); PrintAndLogEx(NORMAL, "block #%3d |lck| ascii", blocknum); PrintAndLogEx(NORMAL, "------------+---+------"); - PrintAndLogEx(NORMAL, "%s| %d | %s", sprint_hex(recv + 2, status - 4), recv[1], sprint_ascii(recv + 2, status - 4)); + PrintAndLogEx(NORMAL, "%s| %d | %s", sprint_hex(data + 2, status - 4), data[1], sprint_ascii(data + 2, status - 4)); PrintAndLogEx(NORMAL, ""); return PM3_SUCCESS; } @@ -1541,22 +1546,22 @@ static int CmdHF15Read(const char *Cmd) { */ static int CmdHF15Write(const char *Cmd) { - char cmdp = param_getchar(Cmd, 0); - if (strlen(Cmd) < 3 || cmdp == 'h' || cmdp == 'H') return usage_15_write(); + char cmdp = tolower(param_getchar(Cmd, 0)); + if (strlen(Cmd) < 3 || cmdp == 'h') return usage_15_write(); - PacketResponseNG resp; - uint8_t *recv; uint8_t req[PM3_CMD_DATA_SIZE] = {0}; uint16_t reqlen = 0; - uint8_t arg1 = 1; + uint8_t fast = 1; + uint8_t reply = 1; int pagenum, temp; + char cmdbuf[100] = {0}; char *cmd = cmdbuf; char *cmd2; strncpy(cmd, Cmd, sizeof(cmdbuf) - 1); - if (!prepareHF15Cmd(&cmd, &reqlen, &arg1, req, ISO15_CMD_WRITE)) + if (prepareHF15Cmd(&cmd, &reqlen, &fast, req, ISO15_CMD_WRITE) == false) return PM3_SUCCESS; // *cmd -> page num ; *cmd2 -> data @@ -1583,8 +1588,9 @@ static int CmdHF15Write(const char *Cmd) { PrintAndLogEx(INFO, "iso15693 writing to page %02d (0x%02X) | data ", pagenum, pagenum); + PacketResponseNG resp; clearCommandBuffer(); - SendCommandOLD(CMD_HF_ISO15693_COMMAND, reqlen, arg1, 1, req, reqlen); + SendCommandMIX(CMD_HF_ISO15693_COMMAND, reqlen, fast, reply, req, reqlen); if (!WaitForResponseTimeout(CMD_ACK, &resp, 2000)) { PrintAndLogEx(FAILED, "iso15693 card timeout, data may be written anyway"); @@ -1594,25 +1600,25 @@ static int CmdHF15Write(const char *Cmd) { DropField(); - uint32_t status = resp.oldarg[0]; + int status = resp.oldarg[0]; if (status < 2) { - PrintAndLogEx(FAILED, "iso15693 card select failed"); + PrintAndLogEx(FAILED, "iso15693 command failed"); return PM3_EWRONGANSWER; } - recv = resp.data.asBytes; + uint8_t *data = resp.data.asBytes; - if (!CheckCrc15(recv, status)) { - PrintAndLogEx(FAILED, "CRC failed"); + if (CheckCrc15(data, status) == false) { + PrintAndLogEx(FAILED, "crc (" _RED_("fail") ")"); return PM3_ESOFT; } - if (recv[0] & ISO15_RES_ERROR) { - PrintAndLogEx(ERR, "iso15693 card returned error %i: %s", recv[0], TagErrorStr(recv[0])); + if ((data[0] & ISO15_RES_ERROR) == ISO15_RES_ERROR) { + PrintAndLogEx(ERR, "iso15693 card returned error %i: %s", data[0], TagErrorStr(data[0])); return PM3_EWRONGANSWER; } - PrintAndLogEx(NORMAL, "OK"); + PrintAndLogEx(SUCCESS, "Write " _GREEN_("OK")); return PM3_SUCCESS; } @@ -1635,7 +1641,7 @@ static int CmdHF15Restore(const char *Cmd) { sprintf(newPrefix, " %s", param); break; default: - PrintAndLogEx(WARNING, "11 Unknown parameter " _YELLOW_("'%s'"), param); + PrintAndLogEx(WARNING, "11 unknown parameter " _YELLOW_("'%s'"), param); return usage_15_restore(); } break; @@ -1658,39 +1664,39 @@ static int CmdHF15Restore(const char *Cmd) { case 'h': return usage_15_restore(); default: - PrintAndLogEx(WARNING, "Unknown parameter " _YELLOW_("'%c'"), param_getchar(Cmd, cmdp)); + PrintAndLogEx(WARNING, "unknown parameter " _YELLOW_("'%c'"), param_getchar(Cmd, cmdp)); return usage_15_restore(); } cmdp++; } - PrintAndLogEx(INFO, "Blocksize: %zu", blocksize); + PrintAndLogEx(INFO, "blocksize: %zu", blocksize); if (!strlen(filename)) { - PrintAndLogEx(WARNING, "Please provide a filename"); + PrintAndLogEx(WARNING, "please provide a filename"); return usage_15_restore(); } uint8_t uid[8] = {0x00}; - if (!getUID(uid)) { - PrintAndLogEx(WARNING, "No tag found"); + if (getUID(false, uid) == false) { + PrintAndLogEx(WARNING, "no tag found"); return PM3_ESOFT; } size_t datalen = 0; uint8_t *data = NULL; if (loadFile_safe(filename, ".bin", (void **)&data, &datalen) != PM3_SUCCESS) { - PrintAndLogEx(WARNING, "Could not find file " _YELLOW_("%s"), filename); + PrintAndLogEx(WARNING, "could not find file " _YELLOW_("%s"), filename); return PM3_EFILE; } if ((datalen % blocksize) != 0) { - PrintAndLogEx(WARNING, "Datalen %zu isn't dividable with blocksize %zu", datalen, blocksize); + PrintAndLogEx(WARNING, "datalen %zu isn't dividable with blocksize %zu", datalen, blocksize); free(data); return PM3_ESOFT; } - PrintAndLogEx(INFO, "Restoring data blocks."); + PrintAndLogEx(INFO, "restoring data blocks"); int retval = PM3_SUCCESS; size_t bytes = 0; @@ -1714,14 +1720,15 @@ static int CmdHF15Restore(const char *Cmd) { PrintAndLogEx(DEBUG, "hf 15 write %s", tmpCmd); for (tried = 0; tried < retries; tried++) { - if (!(retval = CmdHF15Write(tmpCmd))) { + retval = CmdHF15Write(tmpCmd); + if (retval == false) { break; } } if (tried >= retries) { free(data); - PrintAndLogEx(FAILED, "Restore failed. Too many retries."); + PrintAndLogEx(FAILED, "restore failed. Too many retries."); return retval; } bytes += blocksize; @@ -1729,7 +1736,7 @@ static int CmdHF15Restore(const char *Cmd) { } free(data); PrintAndLogEx(INFO, "done"); - PrintAndLogEx(HINT, "Try reading your card to verify with " _YELLOW_("`hf 15 dump`")); + PrintAndLogEx(HINT, "try `" _YELLOW_("hf 15 dump") "` to read your card to verify" ); return PM3_SUCCESS; } @@ -1757,14 +1764,14 @@ static int CmdHF15CSetUID(const char *Cmd) { return PM3_EINVARG; } - PrintAndLogEx(SUCCESS, "Input new UID | " _YELLOW_("%s"), iso15693_sprintUID(NULL, uid)); + PrintAndLogEx(SUCCESS, "input new UID | " _YELLOW_("%s"), iso15693_sprintUID(NULL, uid)); - if (!getUID(oldUid)) { - PrintAndLogEx(FAILED, "Can't get old/current UID."); + if (getUID(false, oldUid) == false) { + PrintAndLogEx(FAILED, "can't get old/current UID."); return PM3_ESOFT; } - PrintAndLogEx(INFO, "Using backdoor magic tag function"); + PrintAndLogEx(INFO, "using backdoor magic tag function"); // Command 1 : 02213E00000000 data[0][0] = 0x02; @@ -1806,30 +1813,34 @@ static int CmdHF15CSetUID(const char *Cmd) { AddCrc15(data[i], 7); clearCommandBuffer(); - SendCommandOLD(CMD_HF_ISO15693_COMMAND, sizeof(data[i]), fast, reply, data[i], sizeof(data[i])); + SendCommandMIX(CMD_HF_ISO15693_COMMAND, sizeof(data[i]), fast, reply, data[i], sizeof(data[i])); if (reply) { if (WaitForResponseTimeout(CMD_ACK, &resp, 2000)) { - uint8_t len = resp.oldarg[0]; - PrintAndLogEx(INFO, "received %i octets", len); - PrintAndLogEx(INFO, "%s", sprint_hex(resp.data.asBytes, len)); + int len = resp.oldarg[0]; + if (len < 2) { + PrintAndLogEx(WARNING, "command failed"); + } else { + PrintAndLogEx(INFO, "received %i octets", len); + PrintAndLogEx(INFO, "%s", sprint_hex(resp.data.asBytes, len)); + } } else { - PrintAndLogEx(WARNING, "timeout while waiting for reply."); + PrintAndLogEx(WARNING, "timeout while waiting for reply"); } } } - if (!getUID(newUid)) { - PrintAndLogEx(FAILED, "Can't get new UID."); + if (getUID(false, newUid) == false) { + PrintAndLogEx(FAILED, "can't get new UID"); return PM3_ESOFT; } if (memcmp(newUid, uid, 8) != 0) { - PrintAndLogEx(FAILED, "Setting UID on tag failed."); + PrintAndLogEx(FAILED, "setting UID on tag failed"); return PM3_ESOFT; } else { - PrintAndLogEx(SUCCESS, "Old: %s", iso15693_sprintUID(NULL, oldUid)); - PrintAndLogEx(SUCCESS, "New: " _GREEN_("%s"), iso15693_sprintUID(NULL, newUid)); + PrintAndLogEx(SUCCESS, "old: %s", iso15693_sprintUID(NULL, oldUid)); + PrintAndLogEx(SUCCESS, "new: " _GREEN_("%s"), iso15693_sprintUID(NULL, newUid)); return PM3_SUCCESS; } } @@ -1869,16 +1880,3 @@ int CmdHF15(const char *Cmd) { clearCommandBuffer(); return CmdsParse(CommandTable, Cmd); } - -// used with 'hf search' -bool readHF15Uid(bool verbose) { - uint8_t uid[8] = {0}; - if (!getUID(uid)) { - if (verbose) PrintAndLogEx(WARNING, "No tag found."); - return false; - } - PrintAndLogEx(NORMAL, ""); - PrintAndLogEx(SUCCESS, " UID: " _GREEN_("%s"), iso15693_sprintUID(NULL, uid)); - PrintAndLogEx(SUCCESS, "TYPE: " _YELLOW_("%s"), getTagInfo_15(uid)); - return true; -} From 61201a3aafe026f5d7e451130f22e4a201650c36 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Fri, 14 Aug 2020 14:55:07 +0200 Subject: [PATCH 0203/1047] textual --- client/src/cmdhficlass.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/src/cmdhficlass.c b/client/src/cmdhficlass.c index e74475e2e..ee6fc457e 100644 --- a/client/src/cmdhficlass.c +++ b/client/src/cmdhficlass.c @@ -622,7 +622,7 @@ static int CmdHFiClassSniff(const char *Cmd) { WaitForResponse(CMD_HF_ICLASS_SNIFF, &resp); - PrintAndLogEx(HINT, "Try `" _YELLOW_("hf iclass list") "` to look at the collected trace"); + PrintAndLogEx(HINT, "Try `" _YELLOW_("hf iclass list") "` to view captured tracelog"); PrintAndLogEx(HINT, "Try `" _YELLOW_("trace save h") "` to save tracelog for later analysing"); return PM3_SUCCESS; } From 1ca66ddf474dd268da09c8084b9c0d51e294916d Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Fri, 14 Aug 2020 14:55:26 +0200 Subject: [PATCH 0204/1047] remove debug stuff --- armsrc/appmain.c | 9 --------- 1 file changed, 9 deletions(-) diff --git a/armsrc/appmain.c b/armsrc/appmain.c index d9c53a2bd..179cb063f 100644 --- a/armsrc/appmain.c +++ b/armsrc/appmain.c @@ -1024,15 +1024,6 @@ static void PacketReceived(PacketCommandNG *packet) { break; } case CMD_HF_ISO15693_SNIFF: { - /* - struct p { - uint8_t jam_search_len; - uint8_t jam_search_string[]; - } PACKED; - struct p *payload = (struct p *) packet->data.asBytes; - - SniffIso15693(payload->jam_search_len, payload->jam_search_string); - */ SniffIso15693(0, NULL); reply_ng(CMD_HF_ISO15693_SNIFF, PM3_SUCCESS, NULL, 0); break; From 07af67c6e025ade3e7391422b47bbd5bc51af382 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Fri, 14 Aug 2020 14:56:20 +0200 Subject: [PATCH 0205/1047] iso15 device side got some love --- armsrc/iso15693.c | 66 ++++++++++++++++++++++++++++++----------------- 1 file changed, 43 insertions(+), 23 deletions(-) diff --git a/armsrc/iso15693.c b/armsrc/iso15693.c index 911dd1f07..a9b5efdf1 100644 --- a/armsrc/iso15693.c +++ b/armsrc/iso15693.c @@ -677,19 +677,33 @@ int GetIso15693AnswerFromTag(uint8_t *response, uint16_t max_len, uint16_t timeo if (upTo >= dma->buf + DMA_BUFFER_SIZE) { // we have read all of the DMA buffer content. upTo = dma->buf; // start reading the circular buffer from the beginning - if (behindBy > (9 * DMA_BUFFER_SIZE / 10)) { - Dbprintf("About to blow circular buffer - aborted! behindBy=%d", behindBy); - ret = -1; - break; + + // DMA Counter Register had reached 0, already rotated. + if (AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_ENDRX)) { + + // primary buffer was stopped + if (AT91C_BASE_PDC_SSC->PDC_RCR == false) { + AT91C_BASE_PDC_SSC->PDC_RPR = (uint32_t) dma->buf; + AT91C_BASE_PDC_SSC->PDC_RCR = DMA_BUFFER_SIZE; + } + // secondary buffer sets as primary, secondary buffer was stopped + if (AT91C_BASE_PDC_SSC->PDC_RNCR == false) { + AT91C_BASE_PDC_SSC->PDC_RNPR = (uint32_t) dma->buf; + AT91C_BASE_PDC_SSC->PDC_RNCR = DMA_BUFFER_SIZE; + } + + WDT_HIT(); + if (BUTTON_PRESS()) { + DbpString("stopped"); + break; + } } } - if (AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_ENDRX)) { // DMA Counter Register had reached 0, already rotated. - AT91C_BASE_PDC_SSC->PDC_RNPR = (uint32_t) dma->buf; // refresh the DMA Next Buffer and - AT91C_BASE_PDC_SSC->PDC_RNCR = DMA_BUFFER_SIZE; // DMA Next Counter registers - } if (Handle15693SamplesFromTag(tagdata, dt)) { + *eof_time = dma_start_time + (samples * 16) - DELAY_TAG_TO_ARM; // end of EOF + if (dt->lastBit == SOF_PART2) { *eof_time -= (8 * 16); // needed 8 additional samples to confirm single SOF (iCLASS) } @@ -699,8 +713,9 @@ int GetIso15693AnswerFromTag(uint8_t *response, uint16_t max_len, uint16_t timeo break; } + // timeout if (samples > timeout && dt->state < STATE_TAG_RECEIVING_DATA) { - ret = -3; // timeout + ret = -3; break; } @@ -730,8 +745,9 @@ int GetIso15693AnswerFromTag(uint8_t *response, uint16_t max_len, uint16_t timeo if (ret < 0) { return ret; } - - LogTrace_ISO15693(dt->output, dt->len, (sof_time * 4), (*eof_time * 4), NULL, false); + if (dt->len > 0) { + LogTrace_ISO15693(dt->output, dt->len, (sof_time * 4), (*eof_time * 4), NULL, false); + } return dt->len; } @@ -1205,10 +1221,13 @@ void AcquireRawAdcSamplesIso15693(void) { void SniffIso15693(uint8_t jam_search_len, uint8_t *jam_search_string) { + LEDsoff(); LED_A_ON(); FpgaDownloadAndGo(FPGA_BITSTREAM_HF); + DbpString("Starting to sniff. Press PM3 Button to stop."); + BigBuf_free(); clear_trace(); set_tracing(true); @@ -1221,21 +1240,20 @@ void SniffIso15693(uint8_t jam_search_len, uint8_t *jam_search_string) { uint8_t cmd[ISO15693_MAX_COMMAND_LENGTH] = {0}; DecodeReaderInit(&dreader, cmd, sizeof(cmd), jam_search_len, jam_search_string); - // The DMA buffer, used to stream samples from the FPGA - dmabuf16_t *dma = get_dma16(); - - Dbprintf("Starting to sniff. Press PM3 Button to stop."); - FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER | FPGA_HF_READER_MODE_SNIFF_AMPLITUDE); LED_D_OFF(); SetAdcMuxFor(GPIO_MUXSEL_HIPKD); FpgaSetupSsc(FPGA_MAJOR_MODE_HF_READER); + StartCountSspClk(); + // The DMA buffer, used to stream samples from the FPGA + dmabuf16_t *dma = get_dma16(); + // Setup and start DMA. if (FpgaSetupSscDma((uint8_t *) dma->buf, DMA_BUFFER_SIZE) == false) { - if (DBGLEVEL > DBG_ERROR) Dbprintf("FpgaSetupSscDma failed. Exiting"); + if (DBGLEVEL > DBG_ERROR) DbpString("FpgaSetupSscDma failed. Exiting"); switch_off(); return; } @@ -1432,6 +1450,7 @@ int SendDataTag(uint8_t *send, int sendlen, bool init, bool speed_fast, uint8_t if (init) { Iso15693InitReader(); + start_time = GetCountSspClk(); } if (speed_fast) { @@ -1444,8 +1463,8 @@ int SendDataTag(uint8_t *send, int sendlen, bool init, bool speed_fast, uint8_t tosend_t *ts = get_tosend(); TransmitTo15693Tag(ts->buf, ts->max, &start_time); - uint32_t end_time = start_time + 32 * ((8 * ts->max) - 4); // substract the 4 padding bits after EOF - LogTrace_ISO15693(send, sendlen, (start_time * 4), (end_time * 4), NULL, true); + *eof_time = start_time + 32 * ((8 * ts->max) - 4); // substract the 4 padding bits after EOF + LogTrace_ISO15693(send, sendlen, (start_time * 4), (*eof_time * 4), NULL, true); int res = 0; if (recv != NULL) { @@ -1787,7 +1806,7 @@ void DirectTag15693Command(uint32_t datalen, uint32_t speed, uint32_t recv, uint int recvlen = 0; uint8_t recvbuf[ISO15693_MAX_RESPONSE_LENGTH]; - uint32_t eof_time; + uint32_t eof_time = 0; uint16_t timeout; bool request_answer = false; @@ -1811,11 +1830,13 @@ void DirectTag15693Command(uint32_t datalen, uint32_t speed, uint32_t recv, uint Dbhexdump(datalen, data, false); } - recvlen = SendDataTag(data, datalen, true, speed, (recv ? recvbuf : NULL), sizeof(recvbuf), 0, timeout, &eof_time); + uint32_t start_time = 0; + recvlen = SendDataTag(data, datalen, true, speed, (recv ? recvbuf : NULL), sizeof(recvbuf), start_time, timeout, &eof_time); // send a single EOF to get the tag response if (request_answer) { - recvlen = SendDataTagEOF((recv ? recvbuf : NULL), sizeof(recvbuf), 0, ISO15693_READER_TIMEOUT, &eof_time); + start_time = eof_time + DELAY_ISO15693_VICC_TO_VCD_READER; + recvlen = SendDataTagEOF((recv ? recvbuf : NULL), sizeof(recvbuf), start_time, ISO15693_READER_TIMEOUT, &eof_time); } // for the time being, switch field off to protect rdv4.0 @@ -1842,7 +1863,6 @@ void DirectTag15693Command(uint32_t datalen, uint32_t speed, uint32_t recv, uint } } - //----------------------------------------------------------------------------- // Work with "magic Chinese" card. // From ede0059b10cb24cde2d851a7d4604df04272086c Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Fri, 14 Aug 2020 14:57:02 +0200 Subject: [PATCH 0206/1047] more params --- client/src/cmdhf.c | 2 +- client/src/cmdhf15.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/client/src/cmdhf.c b/client/src/cmdhf.c index cdcce5557..6a3742b3d 100644 --- a/client/src/cmdhf.c +++ b/client/src/cmdhf.c @@ -123,7 +123,7 @@ int CmdHFSearch(const char *Cmd) { PROMPT_CLEARLINE; PrintAndLogEx(INPLACE, " Searching for ISO15693 tag..."); if (IfPm3Iso15693()) { - if (readHF15Uid(false)) { + if (readHF15Uid(false, false)) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("ISO15693 tag") " found\n"); res = PM3_SUCCESS; } diff --git a/client/src/cmdhf15.h b/client/src/cmdhf15.h index 81530a58c..42e5e12c0 100644 --- a/client/src/cmdhf15.h +++ b/client/src/cmdhf15.h @@ -15,6 +15,6 @@ int CmdHF15(const char *Cmd); -bool readHF15Uid(bool verbose); +bool readHF15Uid(bool loop, bool verbose); #endif From eaf0ecfe6e5350ca993e27733f276205dbb89e9d Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Fri, 14 Aug 2020 14:57:30 +0200 Subject: [PATCH 0207/1047] trace list 15 annotation --- client/src/cmdhflist.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/client/src/cmdhflist.c b/client/src/cmdhflist.c index 202e5b41d..5d0578441 100644 --- a/client/src/cmdhflist.c +++ b/client/src/cmdhflist.c @@ -392,9 +392,15 @@ void annotateIso15693(char *exp, size_t size, uint8_t *cmd, uint8_t cmdsize) { case ISO15693_STAYQUIET: snprintf(exp, size, "STAY_QUIET"); return; - case ISO15693_READBLOCK: - snprintf(exp, size, "READBLOCK"); + case ISO15693_READBLOCK: { + + uint8_t block = 0; + if (cmdsize == 13) + block = cmd[10]; + + snprintf(exp, size, "READBLOCK(%d)", block); return; + } case ISO15693_WRITEBLOCK: snprintf(exp, size, "WRITEBLOCK"); return; From 8b25c952f430e16b5eaacd1225e15f9a563100e7 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Fri, 14 Aug 2020 14:58:27 +0200 Subject: [PATCH 0208/1047] 14b sniff works better. Still missing tag response amplitude demodulation code --- armsrc/iso14443b.c | 541 +++++++++++++++++++++++++++------------------ 1 file changed, 326 insertions(+), 215 deletions(-) diff --git a/armsrc/iso14443b.c b/armsrc/iso14443b.c index b75834a5d..cf1bed825 100644 --- a/armsrc/iso14443b.c +++ b/armsrc/iso14443b.c @@ -26,11 +26,32 @@ #include "ticks.h" +// Delays in SSP_CLK ticks. +// SSP_CLK runs at 13,56MHz / 32 = 423.75kHz when simulating a tag +#define DELAY_READER_TO_ARM 8 +#define DELAY_ARM_TO_READER 0 + +//SSP_CLK runs at 13.56MHz / 4 = 3,39MHz when acting as reader. All values should be multiples of 16 +#define DELAY_ARM_TO_TAG 16 +#define DELAY_TAG_TO_ARM 32 + +//SSP_CLK runs at 13.56MHz / 4 = 3,39MHz when sniffing. All values should be multiples of 16 +#define DELAY_TAG_TO_ARM_SNIFF 32 +#define DELAY_READER_TO_ARM_SNIFF 32 + + // 330/848kHz = 1558us / 4 == 400us, +#define ISO14443B_READER_TIMEOUT 330 + +// 1024/3.39MHz = 302.1us between end of tag response and next reader cmd +#define DELAY_ISO14443B_VICC_TO_VCD_READER 1024 + + + #ifndef RECEIVE_MASK # define RECEIVE_MASK (DMA_BUFFER_SIZE - 1) #endif -#define RECEIVE_SAMPLES_TIMEOUT 64 +#define RECEIVE_SAMPLES_TIMEOUT 330 // Guard Time (per 14443-2) #ifndef TR0 @@ -237,6 +258,10 @@ static void Uart14bInit(uint8_t *data) { //----------------------------------------------------------------------------- // The software Demod that receives commands from the tag, and its state variables. //----------------------------------------------------------------------------- + +#define NOISE_THRESHOLD 80 // don't try to correlate noise +#define MAX_PREVIOUS_AMPLITUDE (-1 - NOISE_THRESHOLD) + static struct { enum { DEMOD_UNSYNCD, @@ -250,11 +275,14 @@ static struct { int posCount; int thisBit; uint16_t shiftReg; + uint16_t max_len; uint8_t *output; uint16_t len; int sumI; int sumQ; - uint32_t startTime, endTime; + int sum1; + int sum2; + uint16_t previous_amplitude; } Demod; // Clear out the state of the "UART" that receives from the tag. @@ -267,12 +295,12 @@ static void Demod14bReset(void) { Demod.len = 0; Demod.sumI = 0; Demod.sumQ = 0; - Demod.startTime = 0; - Demod.endTime = 0; + Demod.previous_amplitude = MAX_PREVIOUS_AMPLITUDE; } -static void Demod14bInit(uint8_t *data) { +static void Demod14bInit(uint8_t *data, uint16_t max_len) { Demod.output = data; + Demod.max_len = max_len; Demod14bReset(); } @@ -319,7 +347,7 @@ static void iso14b_set_maxframesize(uint16_t size) { * Returns: true if we received a EOF * false if we are still waiting for some more */ -static RAMFUNC int Handle14443bReaderUartBit(uint8_t bit) { +static RAMFUNC int Handle14443bSampleFromReader(uint8_t bit) { switch (Uart.state) { case STATE_14B_UNSYNCD: if (!bit) { @@ -451,7 +479,7 @@ static int GetIso14443bCommandFromReader(uint8_t *received, uint16_t *len) { if (AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_RXRDY)) { uint8_t b = (uint8_t)AT91C_BASE_SSC->SSC_RHR; for (uint8_t mask = 0x80; mask != 0x00; mask >>= 1) { - if (Handle14443bReaderUartBit(b & mask)) { + if (Handle14443bSampleFromReader(b & mask)) { *len = Uart.byteCnt; return true; } @@ -693,29 +721,31 @@ void SimulateIso14443bTag(uint32_t pupi) { * false if we are still waiting for some more * */ -static RAMFUNC int Handle14443bTagSamplesDemod(uint16_t amplitude) { - -#define SUBCARRIER_DETECT_THRESHOLD 8 +static RAMFUNC int Handle14443bSamplesFromTag(uint16_t amplitude) { switch (Demod.state) { - case DEMOD_UNSYNCD: - if (amplitude > SUBCARRIER_DETECT_THRESHOLD) { + case DEMOD_UNSYNCD: { + // subcarrier detected + if (amplitude > NOISE_THRESHOLD + Demod.previous_amplitude) { Demod.state = DEMOD_PHASE_REF_TRAINING; - Demod.sumI = amplitude; - Demod.sumQ = amplitude; + //Demod.sumI = ci; + //Demod.sumQ = cq; Demod.posCount = 1; + } else { + Demod.posCount++; + Demod.previous_amplitude = amplitude; } break; + } - case DEMOD_PHASE_REF_TRAINING: + case DEMOD_PHASE_REF_TRAINING: { if (Demod.posCount < 8) { - - if (amplitude > SUBCARRIER_DETECT_THRESHOLD) { + if (amplitude > NOISE_THRESHOLD + Demod.previous_amplitude) { // set the reference phase (will code a logic '1') by averaging over 32 1/fs. // note: synchronization time > 80 1/fs - Demod.sumI += amplitude; - Demod.sumQ += amplitude; + //Demod.sumI += ci; + //Demod.sumQ += cq; Demod.posCount++; } else { // subcarrier lost @@ -725,12 +755,15 @@ static RAMFUNC int Handle14443bTagSamplesDemod(uint16_t amplitude) { Demod.state = DEMOD_AWAITING_FALLING_EDGE_OF_SOF; } break; + } - case DEMOD_AWAITING_FALLING_EDGE_OF_SOF: + case DEMOD_AWAITING_FALLING_EDGE_OF_SOF: { - if (amplitude == 0) { // logic '0' detected + // logic '0' detected + if (amplitude == 0) { Demod.state = DEMOD_GOT_FALLING_EDGE_OF_SOF; - Demod.posCount = 0; // start of SOF sequence + // start of SOF sequence + Demod.posCount = 0; } else { // maximum length of TR1 = 200 1/fs if (Demod.posCount > 200 / 4) { @@ -739,8 +772,9 @@ static RAMFUNC int Handle14443bTagSamplesDemod(uint16_t amplitude) { } Demod.posCount++; break; + } - case DEMOD_GOT_FALLING_EDGE_OF_SOF: + case DEMOD_GOT_FALLING_EDGE_OF_SOF: { Demod.posCount++; if (amplitude > 0) { @@ -758,12 +792,14 @@ static RAMFUNC int Handle14443bTagSamplesDemod(uint16_t amplitude) { // low phase of SOF too long (> 12 etu) if (Demod.posCount > 14 * 2) { Demod.state = DEMOD_UNSYNCD; + Demod.previous_amplitude = amplitude; LED_C_OFF(); } } break; + } - case DEMOD_AWAITING_START_BIT: + case DEMOD_AWAITING_START_BIT: { Demod.posCount++; if (amplitude > 0) { @@ -783,8 +819,9 @@ static RAMFUNC int Handle14443bTagSamplesDemod(uint16_t amplitude) { Demod.state = DEMOD_RECEIVING_DATA; } break; + } - case DEMOD_RECEIVING_DATA: + case DEMOD_RECEIVING_DATA: { if (Demod.posCount == 0) { // first half of bit @@ -809,8 +846,7 @@ static RAMFUNC int Handle14443bTagSamplesDemod(uint16_t amplitude) { // stop bit == '1', start bit == '0' if ((s & 0x200) && ((s & 0x001) == 0)) { // left shift to drop the startbit - uint8_t b = (s >> 1); - Demod.output[Demod.len] = b; + Demod.output[Demod.len] = (s >> 1); Demod.len++; Demod.bitCount = 0; Demod.state = DEMOD_AWAITING_START_BIT; @@ -820,17 +856,21 @@ static RAMFUNC int Handle14443bTagSamplesDemod(uint16_t amplitude) { LED_C_OFF(); // This is EOF (start, stop and all data bits == '0' - if (s == 0) return true; + if (s == 0) { + return true; + } } } Demod.posCount = 0; } break; + } - default: + default: { Demod.state = DEMOD_UNSYNCD; LED_C_OFF(); break; + } } return false; } @@ -839,103 +879,135 @@ static RAMFUNC int Handle14443bTagSamplesDemod(uint16_t amplitude) { /* * Demodulate the samples we received from the tag, also log to tracebuffer */ -static int GetTagSamplesFor14443bDemod(int timeout) { +static int Get14443bAnswerFromTag(int timeout, uint32_t *eof_time) { int samples = 0, ret = 0; - BigBuf_free(); - // Set up the demodulator for tag -> reader responses. - Demod14bInit(BigBuf_malloc(MAX_FRAME_SIZE)); + uint8_t dm_buf[MAX_FRAME_SIZE]; + Demod14bInit(dm_buf, sizeof(dm_buf)); + //Demod14bInit(BigBuf_malloc(MAX_FRAME_SIZE), MAX_FRAME_SIZE); // wait for last transfer to complete - while (!(AT91C_BASE_SSC->SSC_SR & AT91C_SSC_TXEMPTY)) + while (!(AT91C_BASE_SSC->SSC_SR & AT91C_SSC_TXEMPTY)) {}; - // Setup and start DMA. - FpgaSetupSsc(FPGA_MAJOR_MODE_HF_READER); + // And put the FPGA in the appropriate mode + FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER | FPGA_HF_READER_SUBCARRIER_848_KHZ | FPGA_HF_READER_MODE_RECEIVE_AMPLITUDE); + + // Setup and start DMA. + FpgaSetupSsc(FPGA_MAJOR_MODE_HF_READER); // The DMA buffer, used to stream samples from the FPGA dmabuf16_t *dma = get_dma16(); if (FpgaSetupSscDma((uint8_t *) dma->buf, DMA_BUFFER_SIZE) == false) { - if (DBGLEVEL > 1) Dbprintf("FpgaSetupSscDma failed. Exiting"); + if (DBGLEVEL > DBG_ERROR) Dbprintf("FpgaSetupSscDma failed. Exiting"); return -1; } - // Signal field is ON with the appropriate LED: - LED_D_ON(); - - // And put the FPGA in the appropriate mode - FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER | FPGA_HF_READER_SUBCARRIER_848_KHZ | FPGA_HF_READER_MODE_RECEIVE_IQ); - -// uint32_t dma_start_time; + uint32_t dma_start_time = 0; uint16_t *upTo = dma->buf; for (;;) { - uint16_t behindBy = ((uint16_t *)AT91C_BASE_PDC_SSC->PDC_RPR - upTo) & (DMA_BUFFER_SIZE - 1); - if (behindBy == 0) continue; + volatile uint16_t behindBy = ((uint16_t *)AT91C_BASE_PDC_SSC->PDC_RPR - upTo) & (DMA_BUFFER_SIZE - 1); + if (behindBy == 0) + continue; samples++; - /* if (samples == 1) { // DMA has transferred the very first data dma_start_time = GetCountSspClk() & 0xfffffff0; } - */ volatile uint16_t tagdata = *upTo++; - if (upTo >= dma->buf + DMA_BUFFER_SIZE) { // we have read all of the DMA buffer content. - upTo = dma->buf; // start reading the circular buffer from the beginning - if (behindBy > (9 * DMA_BUFFER_SIZE / 10)) { - Dbprintf("About to blow circular buffer - aborted! behindBy=%d", behindBy); - ret = -1; - break; + // we have read all of the DMA buffer content. + if (upTo >= dma->buf + DMA_BUFFER_SIZE) { + + // start reading the circular buffer from the beginning again + upTo = dma->buf; + + // DMA Counter Register had reached 0, already rotated. + if (AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_ENDRX)) { + + // primary buffer was stopped + if (AT91C_BASE_PDC_SSC->PDC_RCR == false) { + AT91C_BASE_PDC_SSC->PDC_RPR = (uint32_t) dma->buf; + AT91C_BASE_PDC_SSC->PDC_RCR = DMA_BUFFER_SIZE; + } + // secondary buffer sets as primary, secondary buffer was stopped + if (AT91C_BASE_PDC_SSC->PDC_RNCR == false) { + AT91C_BASE_PDC_SSC->PDC_RNPR = (uint32_t) dma->buf; + AT91C_BASE_PDC_SSC->PDC_RNCR = DMA_BUFFER_SIZE; + } + + WDT_HIT(); + if (BUTTON_PRESS()) { + DbpString("Sniff stopped"); + break; + } } } - if (AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_ENDRX)) { // DMA Counter Register had reached 0, already rotated. - AT91C_BASE_PDC_SSC->PDC_RNPR = (uint32_t) dma->buf; // refresh the DMA Next Buffer and - AT91C_BASE_PDC_SSC->PDC_RNCR = DMA_BUFFER_SIZE; // DMA Next Counter registers - } +// if (Handle14443bSamplesFromTag( (tagdata >> 8) & 0xFF, tagdata & 0xFF )) { + if (Handle14443bSamplesFromTag(tagdata)) { - if (Handle14443bTagSamplesDemod(tagdata)) { - ret = Demod.len; + *eof_time = dma_start_time + (samples * 16); // - DELAY_TAG_TO_ARM; // end of EOF + + if (Demod.len > Demod.max_len) { + ret = -2; // buffer overflow + } break; } if (samples > timeout && Demod.state < DEMOD_PHASE_REF_TRAINING) { - ret = -1; - LED_C_OFF(); + ret = -1; // timeout break; } } FpgaDisableSscDma(); + uint32_t sof_time = *eof_time + - (Demod.len * 8 * 8 * 16) // time for byte transfers + - (32 * 16) // time for SOF transfer + - 0; // time for EOF transfer if (ret < 0) { return ret; } if (Demod.len > 0) { - LogTrace(Demod.output, Demod.len, 0, 0, NULL, false); + LogTrace(Demod.output, Demod.len, (sof_time * 4), (*eof_time * 4), NULL, false); } - return ret; + return Demod.len; } //----------------------------------------------------------------------------- // Transmit the command (to the tag) that was placed in ToSend[]. //----------------------------------------------------------------------------- -static void TransmitFor14443b_AsReader(void) { - +static void TransmitFor14443b_AsReader(uint32_t *start_time) { + + tosend_t *ts = get_tosend(); + FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER | FPGA_HF_READER_MODE_SEND_SHALLOW_MOD); - LED_B_ON(); - tosend_t *ts = get_tosend(); + if (*start_time < DELAY_ARM_TO_TAG) { + *start_time = DELAY_ARM_TO_TAG; + } + *start_time = (*start_time - DELAY_ARM_TO_TAG) & 0xfffffff0; + + if (GetCountSspClk() > *start_time) { // we may miss the intended time + *start_time = (GetCountSspClk() + 16) & 0xfffffff0; // next possible time + } + + // wait + while (GetCountSspClk() < *start_time) ; + + LED_B_ON(); for (int c = 0; c < ts->max; c++) { - uint8_t data = ts->buf[c]; + volatile uint8_t data = ts->buf[c]; for (int i = 0; i < 8; i++) { uint16_t send_word = (data & 0x80) ? 0x0000 : 0xffff; @@ -952,6 +1024,8 @@ static void TransmitFor14443b_AsReader(void) { WDT_HIT(); } LED_B_OFF(); + + *start_time = *start_time + DELAY_ARM_TO_TAG; } //----------------------------------------------------------------------------- @@ -1035,13 +1109,12 @@ static void CodeIso14443bAsReader(const uint8_t *cmd, int len) { /* * Convenience function to encode, transmit and trace iso 14443b comms */ -static void CodeAndTransmit14443bAsReader(const uint8_t *cmd, int len) { - - uint32_t time_start = GetCountSspClk(); - +static void CodeAndTransmit14443bAsReader(const uint8_t *cmd, int len, uint32_t *start_time) { + tosend_t *ts = get_tosend(); CodeIso14443bAsReader(cmd, len); - TransmitFor14443b_AsReader(); - LogTrace(cmd, len, time_start, GetCountSspClk(), NULL, true); + TransmitFor14443b_AsReader(start_time); + uint32_t end_time = *start_time + 32 * ((8 * ts->max)); + LogTrace(cmd, len, *start_time, end_time, NULL, true); } /* Sends an APDU to the tag @@ -1059,10 +1132,16 @@ uint8_t iso14443b_apdu(uint8_t const *message, size_t message_length, uint8_t *r memcpy(message_frame + 2, message, message_length); // EDC (CRC) AddCrc14B(message_frame, message_length + 2); + // send - CodeAndTransmit14443bAsReader(message_frame, message_length + 4); + uint32_t start_time = 0; + CodeAndTransmit14443bAsReader(message_frame, message_length + 4, &start_time); // get response - int ret = GetTagSamplesFor14443bDemod(RECEIVE_SAMPLES_TIMEOUT); + uint32_t eof_time = 0; + int ret = Get14443bAnswerFromTag(RECEIVE_SAMPLES_TIMEOUT, &eof_time); + + start_time = eof_time + DELAY_ISO14443B_VICC_TO_VCD_READER; + FpgaDisableTracing(); @@ -1093,8 +1172,10 @@ static uint8_t iso14443b_select_srx_card(iso14b_card_select_t *card) { // SELECT command (with space for CRC) uint8_t select_srx[] = { ISO14443B_SELECT, 0x00, 0x00, 0x00}; - CodeAndTransmit14443bAsReader(init_srx, sizeof(init_srx)); - int ret = GetTagSamplesFor14443bDemod(RECEIVE_SAMPLES_TIMEOUT); + uint32_t start_time = 0; + CodeAndTransmit14443bAsReader(init_srx, sizeof(init_srx), &start_time); + uint32_t eof_time = start_time + 0; + int ret = Get14443bAnswerFromTag(RECEIVE_SAMPLES_TIMEOUT, &eof_time); FpgaDisableTracing(); if (Demod.len == 0 || ret < 0) @@ -1109,8 +1190,9 @@ static uint8_t iso14443b_select_srx_card(iso14b_card_select_t *card) { AddCrc14B(select_srx, 2); - CodeAndTransmit14443bAsReader(select_srx, sizeof(select_srx)); - ret = GetTagSamplesFor14443bDemod(RECEIVE_SAMPLES_TIMEOUT); + CodeAndTransmit14443bAsReader(select_srx, sizeof(select_srx), &start_time); + eof_time += 0; + ret = Get14443bAnswerFromTag(RECEIVE_SAMPLES_TIMEOUT, &eof_time); FpgaDisableTracing(); if (Demod.len != 3 || ret < 0) @@ -1128,8 +1210,10 @@ static uint8_t iso14443b_select_srx_card(iso14b_card_select_t *card) { select_srx[0] = ISO14443B_GET_UID; AddCrc14B(select_srx, 1); - CodeAndTransmit14443bAsReader(select_srx, 3); // Only first three bytes for this one - ret = GetTagSamplesFor14443bDemod(RECEIVE_SAMPLES_TIMEOUT); + CodeAndTransmit14443bAsReader(select_srx, 3, &start_time); // Only first three bytes for this one + + eof_time += 0; + ret = Get14443bAnswerFromTag(RECEIVE_SAMPLES_TIMEOUT, &eof_time); FpgaDisableTracing(); if (Demod.len != 10 || ret < 0) @@ -1160,8 +1244,10 @@ int iso14443b_select_card(iso14b_card_select_t *card) { uint8_t attrib[] = { ISO14443B_ATTRIB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00}; // first, wake up the tag - CodeAndTransmit14443bAsReader(wupb, sizeof(wupb)); - int ret = GetTagSamplesFor14443bDemod(RECEIVE_SAMPLES_TIMEOUT); + uint32_t start_time = 0; + CodeAndTransmit14443bAsReader(wupb, sizeof(wupb), &start_time); + uint32_t eof_time = start_time + 0; + int ret = Get14443bAnswerFromTag(RECEIVE_SAMPLES_TIMEOUT, &eof_time); FpgaDisableTracing(); // ATQB too short? @@ -1185,8 +1271,10 @@ int iso14443b_select_card(iso14b_card_select_t *card) { attrib[7] = Demod.output[10] & 0x0F; AddCrc14B(attrib, 9); - CodeAndTransmit14443bAsReader(attrib, sizeof(attrib)); - ret = GetTagSamplesFor14443bDemod(RECEIVE_SAMPLES_TIMEOUT); + CodeAndTransmit14443bAsReader(attrib, sizeof(attrib), &start_time); + + eof_time = start_time + 0; + ret = Get14443bAnswerFromTag(RECEIVE_SAMPLES_TIMEOUT, &eof_time); FpgaDisableTracing(); // Answer to ATTRIB too short? @@ -1231,7 +1319,7 @@ void iso14443b_setup(void) { FpgaDownloadAndGo(FPGA_BITSTREAM_HF); // Initialize Demod and Uart structs - Demod14bInit(BigBuf_malloc(MAX_FRAME_SIZE)); + Demod14bInit(BigBuf_malloc(MAX_FRAME_SIZE), MAX_FRAME_SIZE); Uart14bInit(BigBuf_malloc(MAX_FRAME_SIZE)); // connect Demodulated Signal to ADC: @@ -1262,8 +1350,10 @@ void iso14443b_setup(void) { static bool ReadSTBlock(uint8_t block) { uint8_t cmd[] = {ISO14443B_READ_BLK, block, 0x00, 0x00}; AddCrc14B(cmd, 2); - CodeAndTransmit14443bAsReader(cmd, sizeof(cmd)); - int res = GetTagSamplesFor14443bDemod(RECEIVE_SAMPLES_TIMEOUT); + uint32_t start_time = 0; + CodeAndTransmit14443bAsReader(cmd, sizeof(cmd), &start_time); + uint32_t eof_time = start_time + 0; + int res = Get14443bAnswerFromTag(RECEIVE_SAMPLES_TIMEOUT, &eof_time); FpgaDisableTracing(); // Check if we got an answer from the tag @@ -1331,42 +1421,6 @@ out: SpinDelay(20); } -static void iso1444b_setup_sniff(void) { - - LEDsoff(); - FpgaDownloadAndGo(FPGA_BITSTREAM_HF); - BigBuf_free(); - BigBuf_Clear_ext(false); - clear_trace(); - set_tracing(true); - - // Initialize Demod and Uart structs - Demod14bInit(BigBuf_malloc(MAX_FRAME_SIZE)); - Uart14bInit(BigBuf_malloc(MAX_FRAME_SIZE)); - - if (DBGLEVEL > 1) { - // Print debug information about the buffer sizes - Dbprintf("[+] Sniff buffers initialized:"); - Dbprintf("[+] trace: %i bytes", BigBuf_max_traceLen()); - Dbprintf("[+] reader -> tag: %i bytes", MAX_FRAME_SIZE); - Dbprintf("[+] tag -> reader: %i bytes", MAX_FRAME_SIZE); - Dbprintf("[+] DMA: %i bytes", DMA_BUFFER_SIZE); - } - - // connect Demodulated Signal to ADC: - SetAdcMuxFor(GPIO_MUXSEL_HIPKD); - - // Setup for the DMA. - FpgaSetupSsc(FPGA_MAJOR_MODE_HF_READER); - - // Set FPGA in the appropriate mode - FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER | FPGA_HF_READER_SUBCARRIER_848_KHZ | FPGA_HF_READER_MODE_SNIFF_IQ); - SpinDelay(20); - - // Start the SSP timer - StartCountSspClk(); -} - //============================================================================= // Finally, the `sniffer' combines elements from both the reader and // simulated tag, to show both sides of the conversation. @@ -1384,129 +1438,184 @@ static void iso1444b_setup_sniff(void) { * DMA Buffer - ISO14443B_DMA_BUFFER_SIZE * Demodulated samples received - all the rest */ -void RAMFUNC SniffIso14443b(void) { +void SniffIso14443b(void) { - uint32_t time_0 = 0, time_start = 0, time_stop; + LEDsoff(); + LED_A_ON(); + + FpgaDownloadAndGo(FPGA_BITSTREAM_HF); + + DbpString("Starting to sniff. Press PM3 Button to stop."); + + BigBuf_free(); + clear_trace(); + set_tracing(true); + + // Initialize Demod and Uart structs + uint8_t dm_buf[MAX_FRAME_SIZE] = {0}; + Demod14bInit(dm_buf, sizeof(dm_buf)); + + uint8_t ua_buf[MAX_FRAME_SIZE] = {0}; + Uart14bInit(ua_buf); + + //Demod14bInit(BigBuf_malloc(MAX_FRAME_SIZE), MAX_FRAME_SIZE); + //Uart14bInit(BigBuf_malloc(MAX_FRAME_SIZE)); + + // Set FPGA in the appropriate mode + //FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER | FPGA_HF_READER_SUBCARRIER_848_KHZ | FPGA_HF_READER_MODE_SNIFF_IQ); + FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER | FPGA_HF_READER_SUBCARRIER_848_KHZ | FPGA_HF_READER_MODE_SNIFF_AMPLITUDE); + + // connect Demodulated Signal to ADC: + SetAdcMuxFor(GPIO_MUXSEL_HIPKD); + FpgaSetupSsc(FPGA_MAJOR_MODE_HF_READER); + + StartCountSspClk(); + + // The DMA buffer, used to stream samples from the FPGA + dmabuf16_t *dma = get_dma16(); + + // Setup and start DMA. + if (!FpgaSetupSscDma((uint8_t *) dma->buf, DMA_BUFFER_SIZE)) { + if (DBGLEVEL > DBG_ERROR) DbpString("FpgaSetupSscDma failed. Exiting"); + switch_off(); + return; + } // We won't start recording the frames that we acquire until we trigger; // a good trigger condition to get started is probably when we see a // response from the tag. - bool TagIsActive = false; - bool ReaderIsActive = false; - - int lastRxCounter = DMA_BUFFER_SIZE; - int8_t ci, cq; - int maxBehindBy = 0; - + bool tag_is_active = false; + bool reader_is_active = false; + bool expect_tag_answer = false; + int dma_start_time = 0; + // Count of samples received so far, so that we can include timing - // information in the trace buffer. int samples = 0; - iso1444b_setup_sniff(); - - // The DMA buffer, used to stream samples from the FPGA - dmabuf16_t *dma = get_dma16(); uint16_t *upTo = dma->buf; - // Setup and start DMA. - if (!FpgaSetupSscDma((uint8_t *) dma->buf, DMA_BUFFER_SIZE)) { - if (DBGLEVEL > 1) Dbprintf("[!] FpgaSetupSscDma failed. Exiting"); - BigBuf_free(); - return; - } - - // time ZERO, the point from which it all is calculated. - time_0 = GetCountSspClk(); - - // loop and listen for (;;) { - int behindBy = (lastRxCounter - AT91C_BASE_PDC_SSC->PDC_RCR) & (DMA_BUFFER_SIZE - 1); - if (behindBy > maxBehindBy) { - maxBehindBy = behindBy; - } - - if (behindBy == 0) continue; - - ci = *upTo >> 8; - cq = *upTo; - uint16_t tagdata = *upTo; - - upTo++; - lastRxCounter--; - if (upTo >= dma->buf + DMA_BUFFER_SIZE) { // we have read all of the DMA buffer content. - upTo = dma->buf; // start reading the circular buffer from the beginning again - lastRxCounter += DMA_BUFFER_SIZE; - if (behindBy > (9 * DMA_BUFFER_SIZE / 10)) { - Dbprintf("About to blow circular buffer - aborted! behindBy=%d", behindBy); - break; - } - } - - if (AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_ENDRX)) { // DMA Counter Register had reached 0, already rotated. - AT91C_BASE_PDC_SSC->PDC_RNPR = (uint32_t) dma->buf; // refresh the DMA Next Buffer and - AT91C_BASE_PDC_SSC->PDC_RNCR = DMA_BUFFER_SIZE; // DMA Next Counter registers - - WDT_HIT(); - if (BUTTON_PRESS()) { - DbpString("Button pressed, cancelled"); - break; - } - } + volatile int behind_by = ((uint16_t *)AT91C_BASE_PDC_SSC->PDC_RPR - upTo) & (DMA_BUFFER_SIZE - 1); + if (behind_by < 1) continue; samples++; + if (samples == 1) { + // DMA has transferred the very first data + dma_start_time = GetCountSspClk() & 0xfffffff0; + } + + volatile uint16_t sniffdata = *upTo++; + + // we have read all of the DMA buffer content. + if (upTo >= dma->buf + DMA_BUFFER_SIZE) { + + // start reading the circular buffer from the beginning again + upTo = dma->buf; + + // DMA Counter Register had reached 0, already rotated. + if (AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_ENDRX)) { + + // primary buffer was stopped + if (AT91C_BASE_PDC_SSC->PDC_RCR == false) { + AT91C_BASE_PDC_SSC->PDC_RPR = (uint32_t) dma->buf; + AT91C_BASE_PDC_SSC->PDC_RCR = DMA_BUFFER_SIZE; + } + // secondary buffer sets as primary, secondary buffer was stopped + if (AT91C_BASE_PDC_SSC->PDC_RNCR == false) { + AT91C_BASE_PDC_SSC->PDC_RNPR = (uint32_t) dma->buf; + AT91C_BASE_PDC_SSC->PDC_RNCR = DMA_BUFFER_SIZE; + } + + WDT_HIT(); + if (BUTTON_PRESS()) { + DbpString("Sniff stopped"); + break; + } + } + } // no need to try decoding reader data if the tag is sending - if (TagIsActive == false) { + if (tag_is_active == false) { - LED_A_INV(); + if (Handle14443bSampleFromReader((sniffdata & 0x2) >> 1)) { + //if (Handle14443bSampleFromReader((sniffdata & 0x0100) >> 8)) { + //if (Handle14443bSampleFromReader(ci & 0x01)) { - if (Handle14443bReaderUartBit(ci & 0x01)) { - - time_stop = GetCountSspClk() - time_0; - LogTrace(Uart.output, Uart.byteCnt, time_start, time_stop, NULL, true); + uint32_t eof_time = dma_start_time + (samples * 16) + 8; // - DELAY_READER_TO_ARM_SNIFF; // end of EOF + if (Uart.byteCnt > 0) { + uint32_t sof_time = eof_time + - Uart.byteCnt * 1 // time for byte transfers + - 32 * 16 // time for SOF transfer + - 16 * 16; // time for EOF transfer + LogTrace(Uart.output, Uart.byteCnt, (sof_time * 4), (eof_time * 4), NULL, true); + } + // And ready to receive another command. Uart14bReset(); Demod14bReset(); - } else { - time_start = GetCountSspClk() - time_0; + reader_is_active = false; + expect_tag_answer = true; } - if (Handle14443bReaderUartBit(cq & 0x01)) { - time_stop = GetCountSspClk() - time_0; - LogTrace(Uart.output, Uart.byteCnt, time_start, time_stop, NULL, true); + if (Handle14443bSampleFromReader(sniffdata & 0x01)) { + //if (Handle14443bSampleFromReader(cq & 0x01)) { + + uint32_t eof_time = dma_start_time + (samples * 16) + 16; // - DELAY_READER_TO_ARM_SNIFF; // end of EOF + if (Uart.byteCnt > 0) { + uint32_t sof_time = eof_time + - Uart.byteCnt * 1 // time for byte transfers + - 32 * 16 // time for SOF transfer + - 16 * 16; // time for EOF transfer + LogTrace(Uart.output, Uart.byteCnt, (sof_time * 4), (eof_time * 4), NULL, true); + } + // And ready to receive another command Uart14bReset(); Demod14bReset(); - } else { - time_start = GetCountSspClk() - time_0; + reader_is_active = false; + expect_tag_answer = true; } - ReaderIsActive = (Uart.state > STATE_14B_GOT_FALLING_EDGE_OF_SOF); + + reader_is_active = (Uart.state > STATE_14B_GOT_FALLING_EDGE_OF_SOF); } // no need to try decoding tag data if the reader is sending - and we cannot afford the time - if (!ReaderIsActive) { + if (reader_is_active == false && expect_tag_answer) { - // is this | 0x01 the error? & 0xfe in https://github.com/Proxmark/proxmark3/issues/103 - // LSB is a fpga signal bit. - if (Handle14443bTagSamplesDemod(tagdata) >= 0) { - time_stop = GetCountSspClk() - time_0; - LogTrace(Demod.output, Demod.len, time_start, time_stop, NULL, false); + if (Handle14443bSamplesFromTag( sniffdata >> 2 )) { +// if (Handle14443bSamplesFromTag(((sniffdata >> 8) & 0xFF), sniffdata & 0xFF)) { + + uint32_t eof_time = dma_start_time + (samples * 16); // - DELAY_TAG_TO_ARM_SNIFF; // end of EOF + uint32_t sof_time = eof_time + - Demod.len * 8 * 8 * 16 // time for byte transfers + - (32 * 16) // time for SOF transfer + - 0; // time for EOF transfer + + LogTrace(Demod.output, Demod.len, (sof_time * 4), (eof_time * 4), NULL, false); + // And ready to receive another response. Uart14bReset(); Demod14bReset(); + expect_tag_answer = false; + tag_is_active = false; } else { - time_start = GetCountSspClk() - time_0; + tag_is_active = (Demod.state > DEMOD_GOT_FALLING_EDGE_OF_SOF); } - TagIsActive = (Demod.state > DEMOD_GOT_FALLING_EDGE_OF_SOF); } } - FpgaDisableSscDma(); - if (DBGLEVEL >= 2) { - DbpString("[+] Sniff statistics:"); - Dbprintf("[+] uart State: %x ByteCount: %i ByteCountMax: %i", Uart.state, Uart.byteCnt, Uart.byteCntMax); - Dbprintf("[+] trace length: %i", BigBuf_get_traceLen()); - } - + FpgaDisableTracing(); switch_off(); + + DbpString(""); + DbpString(_CYAN_("Sniff statistics")); + DbpString("================================="); + Dbprintf(" DecodeTag State........%d", Demod.state); + Dbprintf(" DecodeTag byteCnt......%d", Demod.len); + Dbprintf(" DecodeTag posCount.....%d", Demod.posCount); + Dbprintf(" DecodeReader State.....%d", Uart.state); + Dbprintf(" DecodeReader byteCnt...%d", Uart.byteCnt); + Dbprintf(" DecodeReader posCount..%d", Uart.posCnt); + Dbprintf(" Trace length..........." _YELLOW_("%d"), BigBuf_get_traceLen()); + DbpString(""); } static void iso14b_set_trigger(bool enable) { @@ -1577,9 +1686,11 @@ void SendRawCommand14443B_Ex(PacketCommandNG *c) { AddCrc14B(cmd, len); len += 2; } - - CodeAndTransmit14443bAsReader(cmd, len); // raw - status = GetTagSamplesFor14443bDemod(RECEIVE_SAMPLES_TIMEOUT); // raw + + uint32_t start_time = 0; + CodeAndTransmit14443bAsReader(cmd, len, &start_time); // raw + uint32_t eof_time = start_time + 0; + status = Get14443bAnswerFromTag(RECEIVE_SAMPLES_TIMEOUT, &eof_time); // raw FpgaDisableTracing(); sendlen = MIN(Demod.len, PM3_CMD_DATA_SIZE); From edc9727e4bb0cdc353452c8db0e8e44348341be1 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Fri, 14 Aug 2020 19:26:44 +0200 Subject: [PATCH 0209/1047] make travis happy --- client/src/fileutils.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/src/fileutils.c b/client/src/fileutils.c index 4d6de8fd0..c1e41bfdd 100644 --- a/client/src/fileutils.c +++ b/client/src/fileutils.c @@ -1475,8 +1475,8 @@ static int filelist(const char *path, const char *ext, uint8_t last, bool tentat continue; snprintf(newpath, sizeof(newpath), "%s", path); - strncat(newpath, namelist[i]->d_name, sizeof(newpath) - strlen(newpath)); - strncat(newpath, "/", sizeof(newpath) - strlen(newpath)); + strncat(newpath, namelist[i]->d_name, sizeof(newpath) - strlen(newpath) - 1); + strncat(newpath, "/", sizeof(newpath) - strlen(newpath) - 1); filelist(newpath, ext, last + ((i == n - 1) << (indent + 1)), tentative, indent + 1, strlen(path)); } else { From b3348a74e90a082b652b23e4795185e36dceca86 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sat, 15 Aug 2020 08:49:39 +0200 Subject: [PATCH 0210/1047] textual --- client/src/cmdhficlass.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/client/src/cmdhficlass.c b/client/src/cmdhficlass.c index ee6fc457e..69d89373c 100644 --- a/client/src/cmdhficlass.c +++ b/client/src/cmdhficlass.c @@ -156,22 +156,22 @@ static int usage_hf_iclass_dump(void) { PrintAndLogEx(NORMAL, ""); return PM3_SUCCESS; } -static int usage_hf_iclass_clone(void) { +static int usage_hf_iclass_restore(void) { PrintAndLogEx(NORMAL, "Restore data from dumpfile onto a iCLASS tag\n"); - PrintAndLogEx(NORMAL, "Usage: hf iclass clone f b l k c e|r\n"); + PrintAndLogEx(NORMAL, "Usage: hf iclass restore f b l k c e|r\n"); PrintAndLogEx(NORMAL, "Options:"); PrintAndLogEx(NORMAL, " h : Show this help"); - PrintAndLogEx(NORMAL, " f : specify a filename to clone from"); - PrintAndLogEx(NORMAL, " b : The first block to clone as 2 hex symbols"); - PrintAndLogEx(NORMAL, " l : Set the data to write as 16 hex symbols"); + PrintAndLogEx(NORMAL, " f : specify a filename to restore"); + PrintAndLogEx(NORMAL, " b : The first block to restore as 2 hex symbols"); + PrintAndLogEx(NORMAL, " l : The last block to restore as 2 hex symbols"); PrintAndLogEx(NORMAL, " k : Access key as 16 hex symbols or 1 hex to select key from memory"); PrintAndLogEx(NORMAL, " c : If 'c' is specified, the key set is assumed to be the credit key\n"); PrintAndLogEx(NORMAL, " e : If 'e' is specified, elite computations applied to key"); PrintAndLogEx(NORMAL, " r : If 'r' is specified, no computations applied to key (raw)"); PrintAndLogEx(NORMAL, "Examples:"); - PrintAndLogEx(NORMAL, _YELLOW_("\thf iclass clone f hf-iclass-AA162D30F8FF12F1-dump.bin b 06 l 1A k 1122334455667788 e")); - PrintAndLogEx(NORMAL, _YELLOW_("\thf iclass clone f hf-iclass-AA162D30F8FF12F1-dump b 05 l 19 k 0")); - PrintAndLogEx(NORMAL, _YELLOW_("\thf iclass clone f hf-iclass-AA162D30F8FF12F1-dump b 06 l 19 k 0 e")); + PrintAndLogEx(NORMAL, _YELLOW_("\thf iclass restore f hf-iclass-AA162D30F8FF12F1-dump.bin b 06 l 1A k 1122334455667788 e")); + PrintAndLogEx(NORMAL, _YELLOW_("\thf iclass restore f hf-iclass-AA162D30F8FF12F1-dump b 05 l 19 k 0")); + PrintAndLogEx(NORMAL, _YELLOW_("\thf iclass restore f hf-iclass-AA162D30F8FF12F1-dump b 06 l 19 k 0 e")); PrintAndLogEx(NORMAL, ""); return PM3_SUCCESS; } @@ -2045,7 +2045,7 @@ static int CmdHFiClassRestore(const char *Cmd) { while (param_getchar(Cmd, cmdp) != 0x00 && !errors) { switch (tolower(param_getchar(Cmd, cmdp))) { case 'h': - return usage_hf_iclass_clone(); + return usage_hf_iclass_restore(); case 'b': startblock = param_get8ex(Cmd, cmdp + 1, 07, 16); got_startblk = true; @@ -2111,7 +2111,7 @@ static int CmdHFiClassRestore(const char *Cmd) { if (got_endblk == false || got_startblk == false) errors = true; - if (errors || cmdp < 8) return usage_hf_iclass_clone(); + if (errors || cmdp < 8) return usage_hf_iclass_restore(); if (startblock < 5) { PrintAndLogEx(WARNING, "you cannot write key blocks this way. yet... make your start block > 4"); From b12727349bdc83165846d46ad35c3d0da131ce7c Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sat, 15 Aug 2020 10:59:21 +0200 Subject: [PATCH 0211/1047] fix timeout for hf 15 info/reader --- client/src/cmdhf15.c | 39 +++++++++++++++++++-------------------- 1 file changed, 19 insertions(+), 20 deletions(-) diff --git a/client/src/cmdhf15.c b/client/src/cmdhf15.c index eacd18ac5..bed6179eb 100644 --- a/client/src/cmdhf15.c +++ b/client/src/cmdhf15.c @@ -517,34 +517,33 @@ static bool getUID(bool loop, uint8_t *buf) { uint8_t reply = 1; while (kbd_enter_pressed() == false) { + clearCommandBuffer(); + SendCommandMIX(CMD_HF_ISO15693_COMMAND, sizeof(data), fast, reply, data, sizeof(data)); + PacketResponseNG resp; + if (WaitForResponseTimeout(CMD_ACK, &resp, 2000)) { - // don't give up the at the first try - uint8_t retry = 3; - while (retry--) { + int resplen = resp.oldarg[0]; + if (resplen >= 12 && CheckCrc15(resp.data.asBytes, 12)) { + + if (buf) + memcpy(buf, resp.data.asBytes + 2, 8); - clearCommandBuffer(); - SendCommandMIX(CMD_HF_ISO15693_COMMAND, sizeof(data), fast, reply, data, sizeof(data)); - PacketResponseNG resp; - if (WaitForResponseTimeout(CMD_ACK, &resp, 2000)) { + DropField(); - int resplen = resp.oldarg[0]; - if (resplen >= 12 && CheckCrc15(resp.data.asBytes, 12)) { - - if (buf) - memcpy(buf, resp.data.asBytes + 2, 8); + PrintAndLogEx(NORMAL, ""); + PrintAndLogEx(SUCCESS, " UID: " _GREEN_("%s"), iso15693_sprintUID(NULL, buf)); + PrintAndLogEx(SUCCESS, "TYPE: " _YELLOW_("%s"), getTagInfo_15(buf)); - DropField(); - - PrintAndLogEx(NORMAL, ""); - PrintAndLogEx(SUCCESS, " UID: " _GREEN_("%s"), iso15693_sprintUID(NULL, buf)); - PrintAndLogEx(SUCCESS, "TYPE: " _YELLOW_("%s"), getTagInfo_15(buf)); - - if (loop == false) - return true; + if (loop == false) { + return true; } } } + if (loop == false) { + break; + } } + DropField(); return false; } From 49f49288a6af5e2b5a9b6f44a43157633d2bdc61 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sat, 15 Aug 2020 11:00:27 +0200 Subject: [PATCH 0212/1047] no inline --- armsrc/appmain.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/armsrc/appmain.c b/armsrc/appmain.c index 179cb063f..0b8bc8097 100644 --- a/armsrc/appmain.c +++ b/armsrc/appmain.c @@ -68,7 +68,7 @@ struct common_area common_area __attribute__((section(".commonarea"))); static int button_status = BUTTON_NO_CLICK; static bool allow_send_wtx = false; -inline void send_wtx(uint16_t wtx) { +void send_wtx(uint16_t wtx) { if (allow_send_wtx) { reply_ng(CMD_WTX, PM3_SUCCESS, (uint8_t *)&wtx, sizeof(wtx)); } From cd26b298982f9a2623338b71e988299d7db66bb7 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sat, 15 Aug 2020 11:00:49 +0200 Subject: [PATCH 0213/1047] style --- armsrc/fpgaloader.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/armsrc/fpgaloader.c b/armsrc/fpgaloader.c index 002e7c157..2df952214 100644 --- a/armsrc/fpgaloader.c +++ b/armsrc/fpgaloader.c @@ -188,8 +188,7 @@ bool FpgaSetupSscDma(uint8_t *buf, uint16_t len) { } //---------------------------------------------------------------------------- -// Uncompress (inflate) the FPGA data. Returns one decompressed byte with -// each call. +// Uncompress (inflate) the FPGA data. Returns one decompressed byte with each call. //---------------------------------------------------------------------------- static int get_from_fpga_combined_stream(lz4_streamp compressed_fpga_stream, uint8_t *output_buffer) { if (fpga_image_ptr == output_buffer + FPGA_RING_BUFFER_BYTES) { // need more data @@ -526,10 +525,13 @@ int FpgaGetCurrent(void) { // if HF, Disable SSC DMA // turn off trace and leds off. void switch_off(void) { - if (DBGLEVEL > 3) Dbprintf("switch_off"); + if (DBGLEVEL > 3) { + Dbprintf("switch_off"); + } FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); - if (downloaded_bitstream == FPGA_BITSTREAM_HF) + if (downloaded_bitstream == FPGA_BITSTREAM_HF) { FpgaDisableSscDma(); + } set_tracing(false); LEDsoff(); } From 762381237d04c0710fa24ff984a17268e979310e Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sat, 15 Aug 2020 11:01:26 +0200 Subject: [PATCH 0214/1047] no inline --- armsrc/usart.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/armsrc/usart.c b/armsrc/usart.c index 203572f90..b6ed97310 100644 --- a/armsrc/usart.c +++ b/armsrc/usart.c @@ -51,25 +51,32 @@ static size_t us_rxfifo_high = 0; static void usart_fill_rxfifo(void) { uint16_t rxfifo_free ; if (pUS1->US_RNCR == 0) { // One buffer got filled, backup buffer being used + if (us_rxfifo_low > us_rxfifo_high) rxfifo_free = us_rxfifo_low - us_rxfifo_high; else rxfifo_free = sizeof(us_rxfifo) - us_rxfifo_high + us_rxfifo_low; + uint16_t available = USART_BUFFLEN - usart_cur_inbuf_off; + if (available <= rxfifo_free) { + for (uint16_t i = 0; i < available; i++) { us_rxfifo[us_rxfifo_high++] = usart_cur_inbuf[usart_cur_inbuf_off + i]; if (us_rxfifo_high == sizeof(us_rxfifo)) us_rxfifo_high = 0; } + // Give next buffer pUS1->US_RNPR = (uint32_t)usart_cur_inbuf; pUS1->US_RNCR = USART_BUFFLEN; + // Swap current buff if (usart_cur_inbuf == us_inbuf1) usart_cur_inbuf = us_inbuf2; else usart_cur_inbuf = us_inbuf1; + usart_cur_inbuf_off = 0; } else { // Take only what we have room for @@ -83,12 +90,16 @@ static void usart_fill_rxfifo(void) { return; } } + if (pUS1->US_RCR < USART_BUFFLEN - usart_cur_inbuf_off) { // Current buffer partially filled + if (us_rxfifo_low > us_rxfifo_high) rxfifo_free = us_rxfifo_low - us_rxfifo_high; else rxfifo_free = sizeof(us_rxfifo) - us_rxfifo_high + us_rxfifo_low; + uint16_t available = USART_BUFFLEN - pUS1->US_RCR - usart_cur_inbuf_off; + if (available > rxfifo_free) available = rxfifo_free; for (uint16_t i = 0; i < available; i++) { @@ -150,7 +161,7 @@ uint32_t usart_read_ng(uint8_t *data, size_t len) { } // transfer from device to client -inline int usart_writebuffer_sync(uint8_t *data, size_t len) { +int usart_writebuffer_sync(uint8_t *data, size_t len) { // Wait for current PDC bank to be free // (and check next bank too, in case there will be a usart_writebuffer_async) From 2c29f95077f445e38899da26898bb15d66a3930d Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sat, 15 Aug 2020 11:02:06 +0200 Subject: [PATCH 0215/1047] annotation 15 only when we got bytes --- client/src/cmdhflist.c | 268 +++++++++++++++++++++-------------------- 1 file changed, 135 insertions(+), 133 deletions(-) diff --git a/client/src/cmdhflist.c b/client/src/cmdhflist.c index 5d0578441..3c519cbe5 100644 --- a/client/src/cmdhflist.c +++ b/client/src/cmdhflist.c @@ -385,141 +385,143 @@ void annotateIclass(char *exp, size_t size, uint8_t *cmd, uint8_t cmdsize) { void annotateIso15693(char *exp, size_t size, uint8_t *cmd, uint8_t cmdsize) { - switch (cmd[1]) { - case ISO15693_INVENTORY: - snprintf(exp, size, "INVENTORY"); - return; - case ISO15693_STAYQUIET: - snprintf(exp, size, "STAY_QUIET"); - return; - case ISO15693_READBLOCK: { - - uint8_t block = 0; - if (cmdsize == 13) - block = cmd[10]; - - snprintf(exp, size, "READBLOCK(%d)", block); - return; + if (cmdsize >= 2) { + switch (cmd[1]) { + case ISO15693_INVENTORY: + snprintf(exp, size, "INVENTORY"); + return; + case ISO15693_STAYQUIET: + snprintf(exp, size, "STAY_QUIET"); + return; + case ISO15693_READBLOCK: { + + uint8_t block = 0; + if (cmdsize == 13) + block = cmd[10]; + + snprintf(exp, size, "READBLOCK(%d)", block); + return; + } + case ISO15693_WRITEBLOCK: + snprintf(exp, size, "WRITEBLOCK"); + return; + case ISO15693_LOCKBLOCK: + snprintf(exp, size, "LOCKBLOCK"); + return; + case ISO15693_READ_MULTI_BLOCK: + snprintf(exp, size, "READ_MULTI_BLOCK"); + return; + case ISO15693_WRITE_MULTI_BLOCK: + snprintf(exp, size, "WRITE_MULTI_BLOCK"); + return; + case ISO15693_SELECT: + snprintf(exp, size, "SELECT"); + return; + case ISO15693_RESET_TO_READY: + snprintf(exp, size, "RESET_TO_READY"); + return; + case ISO15693_WRITE_AFI: + snprintf(exp, size, "WRITE_AFI"); + return; + case ISO15693_LOCK_AFI: + snprintf(exp, size, "LOCK_AFI"); + return; + case ISO15693_WRITE_DSFID: + snprintf(exp, size, "WRITE_DSFID"); + return; + case ISO15693_LOCK_DSFID: + snprintf(exp, size, "LOCK_DSFID"); + return; + case ISO15693_GET_SYSTEM_INFO: + snprintf(exp, size, "GET_SYSTEM_INFO"); + return; + case ISO15693_READ_MULTI_SECSTATUS: + snprintf(exp, size, "READ_MULTI_SECSTATUS"); + return; + case ISO15693_INVENTORY_READ: + snprintf(exp, size, "INVENTORY_READ"); + return; + case ISO15693_FAST_INVENTORY_READ: + snprintf(exp, size, "FAST_INVENTORY_READ"); + return; + case ISO15693_SET_EAS: + snprintf(exp, size, "SET_EAS"); + return; + case ISO15693_RESET_EAS: + snprintf(exp, size, "RESET_EAS"); + return; + case ISO15693_LOCK_EAS: + snprintf(exp, size, "LOCK_EAS"); + return; + case ISO15693_EAS_ALARM: + snprintf(exp, size, "EAS_ALARM"); + return; + case ISO15693_PASSWORD_PROTECT_EAS: + snprintf(exp, size, "PASSWORD_PROTECT_EAS"); + return; + case ISO15693_WRITE_EAS_ID: + snprintf(exp, size, "WRITE_EAS_ID"); + return; + case ISO15693_READ_EPC: + snprintf(exp, size, "READ_EPC"); + return; + case ISO15693_GET_NXP_SYSTEM_INFO: + snprintf(exp, size, "GET_NXP_SYSTEM_INFO"); + return; + case ISO15693_INVENTORY_PAGE_READ: + snprintf(exp, size, "INVENTORY_PAGE_READ"); + return; + case ISO15693_FAST_INVENTORY_PAGE_READ: + snprintf(exp, size, "FAST_INVENTORY_PAGE_READ"); + return; + case ISO15693_GET_RANDOM_NUMBER: + snprintf(exp, size, "GET_RANDOM_NUMBER"); + return; + case ISO15693_SET_PASSWORD: + snprintf(exp, size, "SET_PASSWORD"); + return; + case ISO15693_WRITE_PASSWORD: + snprintf(exp, size, "WRITE_PASSWORD"); + return; + case ISO15693_LOCK_PASSWORD: + snprintf(exp, size, "LOCK_PASSWORD"); + return; + case ISO15693_PROTECT_PAGE: + snprintf(exp, size, "PROTECT_PAGE"); + return; + case ISO15693_LOCK_PAGE_PROTECTION: + snprintf(exp, size, "LOCK_PAGE_PROTECTION"); + return; + case ISO15693_GET_MULTI_BLOCK_PROTECTION: + snprintf(exp, size, "GET_MULTI_BLOCK_PROTECTION"); + return; + case ISO15693_DESTROY: + snprintf(exp, size, "DESTROY"); + return; + case ISO15693_ENABLE_PRIVACY: + snprintf(exp, size, "ENABLE_PRIVACY"); + return; + case ISO15693_64BIT_PASSWORD_PROTECTION: + snprintf(exp, size, "64BIT_PASSWORD_PROTECTION"); + return; + case ISO15693_STAYQUIET_PERSISTENT: + snprintf(exp, size, "STAYQUIET_PERSISTENT"); + return; + case ISO15693_READ_SIGNATURE: + snprintf(exp, size, "READ_SIGNATURE"); + return; + default: + break; } - case ISO15693_WRITEBLOCK: - snprintf(exp, size, "WRITEBLOCK"); - return; - case ISO15693_LOCKBLOCK: - snprintf(exp, size, "LOCKBLOCK"); - return; - case ISO15693_READ_MULTI_BLOCK: - snprintf(exp, size, "READ_MULTI_BLOCK"); - return; - case ISO15693_WRITE_MULTI_BLOCK: - snprintf(exp, size, "WRITE_MULTI_BLOCK"); - return; - case ISO15693_SELECT: - snprintf(exp, size, "SELECT"); - return; - case ISO15693_RESET_TO_READY: - snprintf(exp, size, "RESET_TO_READY"); - return; - case ISO15693_WRITE_AFI: - snprintf(exp, size, "WRITE_AFI"); - return; - case ISO15693_LOCK_AFI: - snprintf(exp, size, "LOCK_AFI"); - return; - case ISO15693_WRITE_DSFID: - snprintf(exp, size, "WRITE_DSFID"); - return; - case ISO15693_LOCK_DSFID: - snprintf(exp, size, "LOCK_DSFID"); - return; - case ISO15693_GET_SYSTEM_INFO: - snprintf(exp, size, "GET_SYSTEM_INFO"); - return; - case ISO15693_READ_MULTI_SECSTATUS: - snprintf(exp, size, "READ_MULTI_SECSTATUS"); - return; - case ISO15693_INVENTORY_READ: - snprintf(exp, size, "INVENTORY_READ"); - return; - case ISO15693_FAST_INVENTORY_READ: - snprintf(exp, size, "FAST_INVENTORY_READ"); - return; - case ISO15693_SET_EAS: - snprintf(exp, size, "SET_EAS"); - return; - case ISO15693_RESET_EAS: - snprintf(exp, size, "RESET_EAS"); - return; - case ISO15693_LOCK_EAS: - snprintf(exp, size, "LOCK_EAS"); - return; - case ISO15693_EAS_ALARM: - snprintf(exp, size, "EAS_ALARM"); - return; - case ISO15693_PASSWORD_PROTECT_EAS: - snprintf(exp, size, "PASSWORD_PROTECT_EAS"); - return; - case ISO15693_WRITE_EAS_ID: - snprintf(exp, size, "WRITE_EAS_ID"); - return; - case ISO15693_READ_EPC: - snprintf(exp, size, "READ_EPC"); - return; - case ISO15693_GET_NXP_SYSTEM_INFO: - snprintf(exp, size, "GET_NXP_SYSTEM_INFO"); - return; - case ISO15693_INVENTORY_PAGE_READ: - snprintf(exp, size, "INVENTORY_PAGE_READ"); - return; - case ISO15693_FAST_INVENTORY_PAGE_READ: - snprintf(exp, size, "FAST_INVENTORY_PAGE_READ"); - return; - case ISO15693_GET_RANDOM_NUMBER: - snprintf(exp, size, "GET_RANDOM_NUMBER"); - return; - case ISO15693_SET_PASSWORD: - snprintf(exp, size, "SET_PASSWORD"); - return; - case ISO15693_WRITE_PASSWORD: - snprintf(exp, size, "WRITE_PASSWORD"); - return; - case ISO15693_LOCK_PASSWORD: - snprintf(exp, size, "LOCK_PASSWORD"); - return; - case ISO15693_PROTECT_PAGE: - snprintf(exp, size, "PROTECT_PAGE"); - return; - case ISO15693_LOCK_PAGE_PROTECTION: - snprintf(exp, size, "LOCK_PAGE_PROTECTION"); - return; - case ISO15693_GET_MULTI_BLOCK_PROTECTION: - snprintf(exp, size, "GET_MULTI_BLOCK_PROTECTION"); - return; - case ISO15693_DESTROY: - snprintf(exp, size, "DESTROY"); - return; - case ISO15693_ENABLE_PRIVACY: - snprintf(exp, size, "ENABLE_PRIVACY"); - return; - case ISO15693_64BIT_PASSWORD_PROTECTION: - snprintf(exp, size, "64BIT_PASSWORD_PROTECTION"); - return; - case ISO15693_STAYQUIET_PERSISTENT: - snprintf(exp, size, "STAYQUIET_PERSISTENT"); - return; - case ISO15693_READ_SIGNATURE: - snprintf(exp, size, "READ_SIGNATURE"); - return; - default: - break; - } - if (cmd[1] > ISO15693_STAYQUIET && cmd[1] < ISO15693_READBLOCK) snprintf(exp, size, "Mandatory RFU"); - else if (cmd[1] > ISO15693_READ_MULTI_SECSTATUS && cmd[1] <= 0x9F) snprintf(exp, size, "Optional RFU"); -// else if (cmd[1] >= 0xA0 && cmd[1] <= 0xDF) snprintf(exp, size, "Cust IC MFG dependent"); - else if (cmd[1] > ISO15693_READ_SIGNATURE && cmd[1] <= 0xDF) snprintf(exp, size, "Cust IC MFG dependent"); - else if (cmd[1] >= 0xE0) snprintf(exp, size, "Proprietary IC MFG dependent"); - else - snprintf(exp, size, "?"); + if (cmd[1] > ISO15693_STAYQUIET && cmd[1] < ISO15693_READBLOCK) snprintf(exp, size, "Mandatory RFU"); + else if (cmd[1] > ISO15693_READ_MULTI_SECSTATUS && cmd[1] <= 0x9F) snprintf(exp, size, "Optional RFU"); + // else if (cmd[1] >= 0xA0 && cmd[1] <= 0xDF) snprintf(exp, size, "Cust IC MFG dependent"); + else if (cmd[1] > ISO15693_READ_SIGNATURE && cmd[1] <= 0xDF) snprintf(exp, size, "Cust IC MFG dependent"); + else if (cmd[1] >= 0xE0) snprintf(exp, size, "Proprietary IC MFG dependent"); + else + snprintf(exp, size, "?"); + } } void annotateTopaz(char *exp, size_t size, uint8_t *cmd, uint8_t cmdsize) { From 4965f40c24e2d57f074f60101557c2bd97f93cf1 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sat, 15 Aug 2020 11:03:59 +0200 Subject: [PATCH 0216/1047] 14b, handle sof --- client/src/cmdhf14b.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/client/src/cmdhf14b.c b/client/src/cmdhf14b.c index 141fefda5..f1eaf843c 100644 --- a/client/src/cmdhf14b.c +++ b/client/src/cmdhf14b.c @@ -147,15 +147,18 @@ static bool waitCmd14b(bool verbose) { if (len >= 3) { bool crc = check_crc(CRC_14443_B, data, len); - PrintAndLogEx(SUCCESS, "[LEN %u] %s[%02X %02X] %s", + PrintAndLogEx(SUCCESS, "len %u | %s[%02X %02X] %s", len, sprint_hex(data, len - 2), data[len - 2], data[len - 1], - (crc) ? _GREEN_("OK") : _RED_("FAIL") + (crc) ? _GREEN_("ok") : _RED_("fail") ); + } else if (len == 0) { + PrintAndLogEx(SUCCESS, "received SOF only (maybe iCLASS/Picopass)"); + } else { - PrintAndLogEx(SUCCESS, "[LEN %u] %s", len, sprint_hex(data, len)); + PrintAndLogEx(SUCCESS, "len %u | %s", len, sprint_hex(data, len)); } } return true; @@ -168,7 +171,7 @@ static bool waitCmd14b(bool verbose) { static int CmdHF14BList(const char *Cmd) { (void)Cmd; // Cmd is not used so far CmdTraceList("14b"); - return 0; + return PM3_SUCCESS; } static int CmdHF14BSim(const char *Cmd) { @@ -204,7 +207,7 @@ static int CmdHF14BCmdRaw(const char *Cmd) { uint32_t flags = ISO14B_CONNECT; uint32_t temp = 0, user_timeout = 0, time_wait = 0; - if (strlen(Cmd) < 3) return usage_hf_14b_raw(); + if (strlen(Cmd) < 2) return usage_hf_14b_raw(); // strip while (*Cmd == ' ' || *Cmd == '\t') ++Cmd; From 006f9c4f200d8329ec6ca503c28586fa8684cf6c Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sat, 15 Aug 2020 11:54:13 +0200 Subject: [PATCH 0217/1047] disable felica in hf search until it is more stable --- client/src/cmdhf.c | 39 ++++++++++++++++++++------------------- 1 file changed, 20 insertions(+), 19 deletions(-) diff --git a/client/src/cmdhf.c b/client/src/cmdhf.c index 6a3742b3d..5fea3c61e 100644 --- a/client/src/cmdhf.c +++ b/client/src/cmdhf.c @@ -156,25 +156,6 @@ int CmdHFSearch(const char *Cmd) { } } - PROMPT_CLEARLINE; - PrintAndLogEx(INPLACE, " Searching for FeliCa tag..."); - if (IfPm3Felica()) { - if (readFelicaUid(false) == PM3_SUCCESS) { - PrintAndLogEx(NORMAL, "\nValid " _GREEN_("ISO18092 / FeliCa tag") " found\n"); - res = PM3_SUCCESS; - } - } - /* - PROMPT_CLEARLINE; - PrintAndLogEx(INPLACE, " Searching for CryptoRF tag..."); - if (IfPm3Iso14443b()) { - if (readHFCryptoRF(false) == PM3_SUCCESS) { - PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("CryptoRF tag") " found\n"); - res = PM3_SUCCESS; - } - } - */ - // 14b is the longest test (put last) PROMPT_CLEARLINE; PrintAndLogEx(INPLACE, " Searching for ISO14443-B tag..."); @@ -185,6 +166,26 @@ int CmdHFSearch(const char *Cmd) { } } +/* + PROMPT_CLEARLINE; + PrintAndLogEx(INPLACE, " Searching for FeliCa tag..."); + if (IfPm3Felica()) { + if (readFelicaUid(false) == PM3_SUCCESS) { + PrintAndLogEx(NORMAL, "\nValid " _GREEN_("ISO18092 / FeliCa tag") " found\n"); + res = PM3_SUCCESS; + } + } +*/ + /* + PROMPT_CLEARLINE; + PrintAndLogEx(INPLACE, " Searching for CryptoRF tag..."); + if (IfPm3Iso14443b()) { + if (readHFCryptoRF(false) == PM3_SUCCESS) { + PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("CryptoRF tag") " found\n"); + res = PM3_SUCCESS; + } + } + */ PROMPT_CLEARLINE; if (res != PM3_SUCCESS) { From 858a93fb35717c81b5a49677631d41176d1865d9 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sun, 16 Aug 2020 09:23:34 +0200 Subject: [PATCH 0218/1047] prepp cryptorf @baloncu --- include/protocols.h | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/include/protocols.h b/include/protocols.h index 4c63872d8..527e326a3 100644 --- a/include/protocols.h +++ b/include/protocols.h @@ -240,6 +240,41 @@ ISO 7816-4 Basic interindustry commands. For command APDU's. #define ISO14443B_PING 0xBA #define ISO14443B_PONG 0xAB +//meltem +//defined crypto RF commands +//only interpreting channel 1 communication +#define CRYPTORF_SET_USER_ZONE 0x11 +#define CRYPTORF_READ_USER_ZONE 0x12 +#define CRYPTORF_WRITE_USER_ZONE 0x13 +#define CRYPTORF_WRITE_SYSTEM_ZONE 0x14 +#define CRYPTORF_READ_SYSTEM_ZONE 0x16 +#define CRYPTORF_VERIFY_CRYPTO 0x18 +#define CRYPTORF_SEND_CHECKSUM 0x19 +#define CRYPTORF_DESELECT 0x1A +#define CRYPTORF_IDLE 0x1B +#define CRYPTORF_CHECK_PASSWORD 0x1C + +//meltem +//defined Crypto RF errors +#define CRYPTORF_ERR_ACCESS_DENIED_ZONE 0x99 +#define CRYPTORF_ERR_PARAM_INVALID 0xA1 +#define CRYPTORF_ERR_ADDRES_INVALID 0xA2 +#define CRYPTORF_ERR_LENGTH_INVALID 0xA3 +#define CRYPTORF_ERR_AUTH_ENC_REQ 0xA9 +#define CRYPTORF_ERR_ACCESS_DENIED_WLOCK 0xB9 +#define CRYPTORF_ERR_BYTE_ACCESS_DENIED_NOT_ALLOWED 0xBA +#define CRYPTORF_ERR_ACCESS_DENIED_NOT_ALLOWED 0xBA +#define CRYPTORF_ERR_BYTE_ACCESS_DENIED_PASSWD_REQ 0xBC +#define CRYPTORF_ERR_CHECKSUM_FAIL2 0xC8 +#define CRYPTORF_ERR_CHECKSUM_FAIL 0xC9 +#define CRYPTORF_ERR_PASSWD_REQ 0xD9 +#define CRYPTORF_ERR_FUSE_ACCESS_DENIED 0xDF +#define CRYPTORF_ERR_MODIFY_FORBIDDEN 0xE9 +#define CRYPTORF_ERR_ACCESS_DENIED_FUSE_ORDR 0xE9 +#define CRYPTORF_ERR_MEMORY_WRITE_DATA_M 0xED +#define CRYPTORF_ERR_MEMORY_ACCESS 0xEE +#define CRYPTORF_ERR_MEMORY_ACCESS_SEC 0xF9 + //First byte is 26 #define ISO15693_INVENTORY 0x01 #define ISO15693_STAYQUIET 0x02 From 729cbb1874849634aadbda524171e36d23c38c6e Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sun, 16 Aug 2020 09:28:49 +0200 Subject: [PATCH 0219/1047] prepp cryptorf @baloncu --- include/pm3_cmd.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/include/pm3_cmd.h b/include/pm3_cmd.h index a28de4264..97b914284 100644 --- a/include/pm3_cmd.h +++ b/include/pm3_cmd.h @@ -643,6 +643,9 @@ typedef struct { #define CMD_HF_THINFILM_READ 0x0810 #define CMD_HF_THINFILM_SIMULATE 0x0811 +//For Atmel CryptoRF +#define CMD_HF_CRYPTORF_SIM 0x0820 + #define CMD_UNKNOWN 0xFFFF //Mifare simulation flags From 49aa198c88655ccc139fe1297a61e529cf5aca23 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sun, 16 Aug 2020 09:59:41 +0200 Subject: [PATCH 0220/1047] annotate cryptorf --- client/src/cmdhfcryptorf.c | 32 ++++-------------------- client/src/cmdhflist.c | 43 +++++++++++++++++++++++++++++++- client/src/cmdhflist.h | 1 + client/src/cmdtrace.c | 51 ++++++++++++++++++++++---------------- include/protocols.h | 10 ++++---- 5 files changed, 83 insertions(+), 54 deletions(-) diff --git a/client/src/cmdhfcryptorf.c b/client/src/cmdhfcryptorf.c index 7f727d4bf..cd3bc93a4 100644 --- a/client/src/cmdhfcryptorf.c +++ b/client/src/cmdhfcryptorf.c @@ -58,11 +58,10 @@ static int usage_hf_cryptorf_sniff(void) { return PM3_SUCCESS; } static int usage_hf_cryptorf_sim(void) { - PrintAndLogEx(NORMAL, "Emulating CryptoRF tag with 4 UID / PUPI\n" - "Usage: hf cryptorf sim [h] [u ]\n" + PrintAndLogEx(NORMAL, "Emulating CryptoRF tag with emulator memory\n" + "Usage: hf cryptorf sim [h] \n" "Options:\n" " h this help\n" - " u 4byte UID/PUPI\n" "\n" "Example:\n" _YELLOW_(" hf cryptorf sim") @@ -116,7 +115,7 @@ static int switch_off_field_cryptorf(void) { static int CmdHFCryptoRFList(const char *Cmd) { (void)Cmd; // Cmd is not used so far - CmdTraceList("14b"); + CmdTraceList("cryptorf"); return PM3_SUCCESS; } @@ -124,13 +123,8 @@ static int CmdHFCryptoRFSim(const char *Cmd) { char cmdp = tolower(param_getchar(Cmd, 0)); if (cmdp == 'h') return usage_hf_cryptorf_sim(); - uint32_t pupi = 0; - if (cmdp == 'u') { - pupi = param_get32ex(Cmd, 1, 0, 16); - } - clearCommandBuffer(); - SendCommandMIX(CMD_HF_ISO14443B_SIMULATE, pupi, 0, 0, NULL, 0); + SendCommandMIX(CMD_HF_CRYPTORF_SIM, 0, 0, 0, NULL, 0); return PM3_SUCCESS; } @@ -152,23 +146,7 @@ static bool get_14b_UID(iso14b_card_select_t *card) { int8_t retry = 3; PacketResponseNG resp; - // test for 14b SR - while (retry--) { - - clearCommandBuffer(); - SendCommandMIX(CMD_HF_ISO14443B_COMMAND, ISO14B_CONNECT | ISO14B_SELECT_SR | ISO14B_DISCONNECT, 0, 0, NULL, 0); - if (WaitForResponseTimeout(CMD_ACK, &resp, TIMEOUT)) { - - uint8_t status = resp.oldarg[0]; - if (status == 0) { - memcpy(card, (iso14b_card_select_t *)resp.data.asBytes, sizeof(iso14b_card_select_t)); - return true; - } - } - } // retry - - // test 14b standard - retry = 3; + // test while (retry--) { clearCommandBuffer(); diff --git a/client/src/cmdhflist.c b/client/src/cmdhflist.c index 3c519cbe5..02abfef20 100644 --- a/client/src/cmdhflist.c +++ b/client/src/cmdhflist.c @@ -857,7 +857,7 @@ void annotateMfDesfire(char *exp, size_t size, uint8_t *cmd, uint8_t cmdsize) { **/ void annotateIso14443b(char *exp, size_t size, uint8_t *cmd, uint8_t cmdsize) { switch (cmd[0]) { - case ISO14443B_REQB : { + case ISO14443B_REQB : { switch (cmd[2] & 0x07) { case 0: @@ -924,6 +924,47 @@ void annotateIso14443b(char *exp, size_t size, uint8_t *cmd, uint8_t cmdsize) { } } +// CryptoRF which is based on ISO-14443B +void annotateCryptoRF(char *exp, size_t size, uint8_t *cmd, uint8_t cmdsize) { + + switch (cmd[0]) { + case CRYPTORF_SET_USER_ZONE: + snprintf(exp, size, "SET USR ZONE"); + break; + case CRYPTORF_READ_USER_ZONE: + snprintf(exp, size, "READ USR ZONE"); + break; + case CRYPTORF_WRITE_USER_ZONE: + snprintf(exp, size, "WRITE USR ZONE"); + break; + case CRYPTORF_WRITE_SYSTEM_ZONE: + snprintf(exp, size, "WRITE SYSTEM ZONE"); + break; + case CRYPTORF_READ_SYSTEM_ZONE: + snprintf(exp, size, "READ SYSTEM ZONE"); + break; + case CRYPTORF_VERIFY_CRYPTO: + snprintf(exp, size, "VERIFY CRYPTO"); + break; + case CRYPTORF_SEND_CHECKSUM: + snprintf(exp, size, "SEND CHKSUM"); + break; + case CRYPTORF_DESELECT: + snprintf(exp, size, "DESELECT"); + break; + case CRYPTORF_IDLE: + snprintf(exp, size, "IDLE"); + break; + case CRYPTORF_CHECK_PASSWORD: + snprintf(exp, size, "CHECK PWD"); + break; + default: + snprintf(exp, size, "?"); + break; + } +} + + // LEGIC // 1 = read // 0 = write diff --git a/client/src/cmdhflist.h b/client/src/cmdhflist.h index fbc8700d6..6a7a60bbe 100644 --- a/client/src/cmdhflist.h +++ b/client/src/cmdhflist.h @@ -49,6 +49,7 @@ void annotateIso14443a(char *exp, size_t size, uint8_t *cmd, uint8_t cmdsize); void annotateMfDesfire(char *exp, size_t size, uint8_t *cmd, uint8_t cmdsize); void annotateMifare(char *exp, size_t size, uint8_t *cmd, uint8_t cmdsize, uint8_t *parity, uint8_t paritysize, bool isResponse); void annotateLTO(char *exp, size_t size, uint8_t *cmd, uint8_t cmdsize); +void annotateCryptoRF(char *exp, size_t size, uint8_t *cmd, uint8_t cmdsize); bool DecodeMifareData(uint8_t *cmd, uint8_t cmdsize, uint8_t *parity, bool isResponse, uint8_t *mfData, size_t *mfDataLen); bool NTParityChk(TAuthData *ad, uint32_t ntx); diff --git a/client/src/cmdtrace.c b/client/src/cmdtrace.c index 567e1f9ab..d426e9c75 100644 --- a/client/src/cmdtrace.c +++ b/client/src/cmdtrace.c @@ -53,6 +53,7 @@ static int usage_trace_list(void) { PrintAndLogEx(NORMAL, " hitag2 - interpret data as Hitag2 communications"); PrintAndLogEx(NORMAL, " hitags - interpret data as HitagS communications"); PrintAndLogEx(NORMAL, " lto - interpret data as LTO-CM communications"); + PrintAndLogEx(NORMAL, " cryptorf - interpret data as CryptoRF communitcations"); PrintAndLogEx(NORMAL, ""); PrintAndLogEx(NORMAL, "Examples:"); PrintAndLogEx(NORMAL, _YELLOW_(" trace list 14a f")); @@ -258,6 +259,7 @@ static uint16_t printTraceLine(uint16_t tracepos, uint16_t traceLen, uint8_t *tr case ISO_15693: crcStatus = iso15693_CRC_check(frame, data_len); break; + case PROTO_CRYPTORF: case ISO_7816_4: case PROTO_HITAG1: case PROTO_HITAG2: @@ -297,6 +299,7 @@ static uint16_t printTraceLine(uint16_t tracepos, uint16_t traceLen, uint8_t *tr && protocol != THINFILM && protocol != FELICA && protocol != LTO + && protocol != PROTO_CRYPTORF && (hdr->isResponse || protocol == ISO_14443A) && (oddparity8(frame[j]) != ((parityBits >> (7 - (j & 0x0007))) & 0x01))) { @@ -346,28 +349,30 @@ static uint16_t printTraceLine(uint16_t tracepos, uint16_t traceLen, uint8_t *tr if (prev_eot) *prev_eot = end_of_transmission_timestamp; - // Always annotate LEGIC read/tag - if (protocol == LEGIC) - annotateLegic(explanation, sizeof(explanation), frame, data_len); - - if (protocol == PROTO_MIFARE) - annotateMifare(explanation, sizeof(explanation), frame, data_len, parityBytes, TRACELOG_PARITY_LEN(hdr), hdr->isResponse); - - if (protocol == FELICA) - annotateFelica(explanation, sizeof(explanation), frame, data_len); - - if (protocol == PROTO_HITAG1) { - annotateHitag1(explanation, sizeof(explanation), frame, data_len, hdr->isResponse); - } - if (protocol == PROTO_HITAG2) { - annotateHitag2(explanation, sizeof(explanation), frame, data_len, hdr->isResponse); - } - if (protocol == PROTO_HITAGS) { - annotateHitagS(explanation, sizeof(explanation), frame, data_len, hdr->isResponse); + // Always annotate these protocols both reader/tag messages + switch (protocol) { + case PROTO_MIFARE: + annotateMifare(explanation, sizeof(explanation), frame, data_len, parityBytes, TRACELOG_PARITY_LEN(hdr), hdr->isResponse); + break; + case PROTO_HITAG1: + annotateHitag1(explanation, sizeof(explanation), frame, data_len, hdr->isResponse); + break; + case PROTO_HITAG2: + annotateHitag2(explanation, sizeof(explanation), frame, data_len, hdr->isResponse); + break; + case PROTO_HITAGS: + annotateHitagS(explanation, sizeof(explanation), frame, data_len, hdr->isResponse); + break; + default: + break; } if (hdr->isResponse == false) { + switch (protocol) { + case LEGIC: + annotateLegic(explanation, sizeof(explanation), frame, data_len); + break; case ICLASS: annotateIclass(explanation, sizeof(explanation), frame, data_len); break; @@ -395,6 +400,9 @@ static uint16_t printTraceLine(uint16_t tracepos, uint16_t traceLen, uint8_t *tr case LTO: annotateLTO(explanation, sizeof(explanation), frame, data_len); break; + case PROTO_CRYPTORF: + annotateCryptoRF(explanation, sizeof(explanation), frame, data_len); + break; default: break; } @@ -645,10 +653,11 @@ int CmdTraceList(const char *Cmd) { else if (strcmp(type, "felica") == 0) protocol = FELICA; else if (strcmp(type, "mf") == 0) protocol = PROTO_MIFARE; else if (strcmp(type, "hitag1") == 0) protocol = PROTO_HITAG1; - else if (strcmp(type, "hitag2") == 0) protocol = PROTO_HITAG2; - else if (strcmp(type, "hitags") == 0) protocol = PROTO_HITAGS; + else if (strcmp(type, "hitag2") == 0) protocol = PROTO_HITAG2; + else if (strcmp(type, "hitags") == 0) protocol = PROTO_HITAGS; else if (strcmp(type, "thinfilm") == 0) protocol = THINFILM; else if (strcmp(type, "lto") == 0) protocol = LTO; + else if (strcmp(type, "cryptorf") == 0) protocol = PROTO_CRYPTORF; else if (strcmp(type, "raw") == 0) protocol = -1; //No crc, no annotations else errors = true; @@ -714,7 +723,7 @@ int CmdTraceList(const char *Cmd) { PrintAndLogEx(INFO, _YELLOW_("LEGIC") " - Reader Mode: Timings are in ticks (1us == 1.5ticks)\n" " Tag Mode: Timings are in sub carrier periods (1/212 kHz == 4.7us)"); - if (protocol == ISO_14443B) { + if (protocol == ISO_14443B || protocol == PROTO_CRYPTORF) { if (use_us) PrintAndLogEx(INFO, _YELLOW_("ISO14443B") " - all times are in microseconds"); else diff --git a/include/protocols.h b/include/protocols.h index 527e326a3..add711563 100644 --- a/include/protocols.h +++ b/include/protocols.h @@ -240,9 +240,9 @@ ISO 7816-4 Basic interindustry commands. For command APDU's. #define ISO14443B_PING 0xBA #define ISO14443B_PONG 0xAB -//meltem -//defined crypto RF commands -//only interpreting channel 1 communication + +// defined crypto RF commands +// only interpreting channel 1 communication #define CRYPTORF_SET_USER_ZONE 0x11 #define CRYPTORF_READ_USER_ZONE 0x12 #define CRYPTORF_WRITE_USER_ZONE 0x13 @@ -254,8 +254,7 @@ ISO 7816-4 Basic interindustry commands. For command APDU's. #define CRYPTORF_IDLE 0x1B #define CRYPTORF_CHECK_PASSWORD 0x1C -//meltem -//defined Crypto RF errors +// defined Crypto RF errors #define CRYPTORF_ERR_ACCESS_DENIED_ZONE 0x99 #define CRYPTORF_ERR_PARAM_INVALID 0xA1 #define CRYPTORF_ERR_ADDRES_INVALID 0xA2 @@ -348,6 +347,7 @@ ISO 7816-4 Basic interindustry commands. For command APDU's. #define LTO 12 #define PROTO_HITAG2 13 #define PROTO_HITAGS 14 +#define PROTO_CRYPTORF 15 // Picopass fuses #define FUSE_FPERS 0x80 From 8ff8ccb9a7c4505a6303e1c36cc996f259546227 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sun, 16 Aug 2020 21:13:10 +0200 Subject: [PATCH 0221/1047] adapt 14b mergehell --- armsrc/epa.c | 24 +- armsrc/iso14443b.c | 597 ++++++++++++++++++++++++--------------------- armsrc/iso14443b.h | 3 +- 3 files changed, 339 insertions(+), 285 deletions(-) diff --git a/armsrc/epa.c b/armsrc/epa.c index cdc83fe5d..5382b02cd 100644 --- a/armsrc/epa.c +++ b/armsrc/epa.c @@ -113,13 +113,13 @@ static char iso_type = 0; //----------------------------------------------------------------------------- // Wrapper for sending APDUs to type A and B cards //----------------------------------------------------------------------------- -static int EPA_APDU(uint8_t *apdu, size_t length, uint8_t *response) { +static int EPA_APDU(uint8_t *apdu, size_t length, uint8_t *response, uint16_t respmaxlen) { switch (iso_type) { case 'a': return iso14_apdu(apdu, (uint16_t) length, false, response, NULL); break; case 'b': - return iso14443b_apdu(apdu, length, response); + return iso14443b_apdu(apdu, length, response, respmaxlen); break; default: return 0; @@ -227,7 +227,9 @@ int EPA_Read_CardAccess(uint8_t *buffer, size_t max_length) { // select the file EF.CardAccess rapdu_length = EPA_APDU((uint8_t *)apdu_select_binary_cardaccess, sizeof(apdu_select_binary_cardaccess), - response_apdu); + response_apdu, + sizeof(response_apdu) + ); if (rapdu_length < 6 || response_apdu[rapdu_length - 4] != 0x90 || response_apdu[rapdu_length - 3] != 0x00) { @@ -238,7 +240,9 @@ int EPA_Read_CardAccess(uint8_t *buffer, size_t max_length) { // read the file rapdu_length = EPA_APDU((uint8_t *)apdu_read_binary, sizeof(apdu_read_binary), - response_apdu); + response_apdu, + sizeof(response_apdu) + ); if (rapdu_length <= 6 || response_apdu[rapdu_length - 4] != 0x90 || response_apdu[rapdu_length - 3] != 0x00) { @@ -356,7 +360,9 @@ int EPA_PACE_Get_Nonce(uint8_t requested_length, uint8_t *nonce) { uint8_t response_apdu[262]; int send_return = EPA_APDU(apdu, sizeof(apdu), - response_apdu); + response_apdu, + sizeof(response_apdu) + ); // check if the command succeeded if (send_return < 6 || response_apdu[send_return - 4] != 0x90 @@ -423,7 +429,9 @@ int EPA_PACE_MSE_Set_AT(pace_version_info_t pace_version_info, uint8_t password) uint8_t response_apdu[6]; int send_return = EPA_APDU(apdu, apdu_length, - response_apdu); + response_apdu, + sizeof(response_apdu) + ); // check if the command succeeded if (send_return != 6 || response_apdu[send_return - 4] != 0x90 @@ -480,7 +488,9 @@ void EPA_PACE_Replay(PacketCommandNG *c) { StartCountUS(); func_return = EPA_APDU(apdus_replay[i].data, apdu_lengths_replay[i], - response_apdu); + response_apdu, + sizeof(response_apdu) + ); timings[i] = GetCountUS(); // every step but the last one should succeed if (i < ARRAYLEN(apdu_lengths_replay) - 1 diff --git a/armsrc/iso14443b.c b/armsrc/iso14443b.c index cf1bed825..3c6c811ed 100644 --- a/armsrc/iso14443b.c +++ b/armsrc/iso14443b.c @@ -39,20 +39,22 @@ #define DELAY_TAG_TO_ARM_SNIFF 32 #define DELAY_READER_TO_ARM_SNIFF 32 +// defaults to 2000ms +#ifndef FWT_TIMEOUT_14B +# define FWT_TIMEOUT_14B 35312 +#endif + // 330/848kHz = 1558us / 4 == 400us, -#define ISO14443B_READER_TIMEOUT 330 +#define ISO14443B_READER_TIMEOUT 1700 //330 // 1024/3.39MHz = 302.1us between end of tag response and next reader cmd -#define DELAY_ISO14443B_VICC_TO_VCD_READER 1024 - - +#define DELAY_ISO14443B_VICC_TO_VCD_READER 600 // 1024 +#define DELAY_ISO14443B_VCD_TO_VICC_READER 600// 1056 #ifndef RECEIVE_MASK # define RECEIVE_MASK (DMA_BUFFER_SIZE - 1) #endif -#define RECEIVE_SAMPLES_TIMEOUT 330 - // Guard Time (per 14443-2) #ifndef TR0 # define TR0 64 // TR0 max is 256/fs = 256/(848kHz) = 302us or 64 samples from FPGA @@ -75,7 +77,7 @@ static void iso14b_set_maxframesize(uint16_t size); // the block number for the ISO14443-4 PCB (used with APDUs) static uint8_t pcb_blocknum = 0; -static uint32_t iso14b_timeout = TR0; +static uint32_t iso14b_timeout = FWT_TIMEOUT_14B; /* ISO 14443 B @@ -138,6 +140,10 @@ static uint32_t iso14b_timeout = TR0; * bit rate of 106 kbit/s, or fc/128. Oversample by 4, which ought to make * things practical for the ARM (fc/32, 423.8 kbits/s, ~50 kbytes/s) * +* Let us report a correlation every 64 samples. I.e. +* one Q/I pair after 4 subcarrier cycles for the 848kHz subcarrier, +* one Q/I pair after 2 subcarrier cycles for the 424kHz subcarrier, +* one Q/I pair for each subcarrier cyle for the 212kHz subcarrier. */ @@ -280,9 +286,6 @@ static struct { uint16_t len; int sumI; int sumQ; - int sum1; - int sum2; - uint16_t previous_amplitude; } Demod; // Clear out the state of the "UART" that receives from the tag. @@ -295,7 +298,6 @@ static void Demod14bReset(void) { Demod.len = 0; Demod.sumI = 0; Demod.sumQ = 0; - Demod.previous_amplitude = MAX_PREVIOUS_AMPLITUDE; } static void Demod14bInit(uint8_t *data, uint16_t max_len) { @@ -324,7 +326,7 @@ static void iso14b_set_timeout(uint32_t timeout) { timeout = MAX_TIMEOUT; iso14b_timeout = timeout; - if (DBGLEVEL >= 3) Dbprintf("ISO14443B Timeout set to %ld fwt", iso14b_timeout); + if (DBGLEVEL >= DBG_DEBUG) Dbprintf("ISO14443B Timeout set to %ld fwt", iso14b_timeout); } static void iso14b_set_maxframesize(uint16_t size) { @@ -332,7 +334,7 @@ static void iso14b_set_maxframesize(uint16_t size) { size = MAX_FRAME_SIZE; Uart.byteCntMax = size; - if (DBGLEVEL >= 3) Dbprintf("ISO14443B Max frame size set to %d bytes", Uart.byteCntMax); + if (DBGLEVEL >= DBG_DEBUG) Dbprintf("ISO14443B Max frame size set to %d bytes", Uart.byteCntMax); } /* Receive & handle a bit coming from the reader. @@ -350,7 +352,7 @@ static void iso14b_set_maxframesize(uint16_t size) { static RAMFUNC int Handle14443bSampleFromReader(uint8_t bit) { switch (Uart.state) { case STATE_14B_UNSYNCD: - if (!bit) { + if (bit == false) { // we went low, so this could be the beginning of an SOF Uart.state = STATE_14B_GOT_FALLING_EDGE_OF_SOF; Uart.posCnt = 0; @@ -360,7 +362,9 @@ static RAMFUNC int Handle14443bSampleFromReader(uint8_t bit) { case STATE_14B_GOT_FALLING_EDGE_OF_SOF: Uart.posCnt++; + if (Uart.posCnt == 2) { // sample every 4 1/fs in the middle of a bit + if (bit) { if (Uart.bitCnt > 9) { // we've seen enough consecutive @@ -378,7 +382,11 @@ static RAMFUNC int Handle14443bSampleFromReader(uint8_t bit) { } Uart.bitCnt++; } - if (Uart.posCnt >= 4) Uart.posCnt = 0; + + if (Uart.posCnt >= 4) { + Uart.posCnt = 0; + } + if (Uart.bitCnt > 12) { // Give up if we see too many zeros without a one, too. LED_A_OFF(); @@ -388,11 +396,16 @@ static RAMFUNC int Handle14443bSampleFromReader(uint8_t bit) { case STATE_14B_AWAITING_START_BIT: Uart.posCnt++; + if (bit) { - if (Uart.posCnt > 50 / 2) { // max 57us between characters = 49 1/fs, max 3 etus after low phase of SOF = 24 1/fs + + // max 57us between characters = 49 1/fs, + // max 3 etus after low phase of SOF = 24 1/fs + if (Uart.posCnt > 50 / 2) { // stayed high for too long between characters, error Uart.state = STATE_14B_UNSYNCD; } + } else { // falling edge, this starts the data byte Uart.posCnt = 0; @@ -403,7 +416,9 @@ static RAMFUNC int Handle14443bSampleFromReader(uint8_t bit) { break; case STATE_14B_RECEIVING_DATA: + Uart.posCnt++; + if (Uart.posCnt == 2) { // time to sample a bit Uart.shiftReg >>= 1; @@ -412,14 +427,16 @@ static RAMFUNC int Handle14443bSampleFromReader(uint8_t bit) { } Uart.bitCnt++; } + if (Uart.posCnt >= 4) { Uart.posCnt = 0; } + if (Uart.bitCnt == 10) { if ((Uart.shiftReg & 0x200) && !(Uart.shiftReg & 0x001)) { // this is a data byte, with correct // start and stop bits - Uart.output[Uart.byteCnt] = (Uart.shiftReg >> 1) & 0xff; + Uart.output[Uart.byteCnt] = (Uart.shiftReg >> 1) & 0xFF; Uart.byteCnt++; if (Uart.byteCnt >= Uart.byteCntMax) { @@ -721,178 +738,178 @@ void SimulateIso14443bTag(uint32_t pupi) { * false if we are still waiting for some more * */ -static RAMFUNC int Handle14443bSamplesFromTag(uint16_t amplitude) { +static RAMFUNC int Handle14443bSamplesFromTag(int ci, int cq) { - switch (Demod.state) { + int v; - case DEMOD_UNSYNCD: { - // subcarrier detected - if (amplitude > NOISE_THRESHOLD + Demod.previous_amplitude) { - Demod.state = DEMOD_PHASE_REF_TRAINING; - //Demod.sumI = ci; - //Demod.sumQ = cq; - Demod.posCount = 1; - } else { - Demod.posCount++; - Demod.previous_amplitude = amplitude; - } - break; +// The soft decision on the bit uses an estimate of just the +// quadrant of the reference angle, not the exact angle. +#define MAKE_SOFT_DECISION() { \ + if(Demod.sumI > 0) { \ + v = ci; \ + } else { \ + v = -ci; \ + } \ + if(Demod.sumQ > 0) { \ + v += cq; \ + } else { \ + v -= cq; \ + } \ + } + +#define SUBCARRIER_DETECT_THRESHOLD 8 +// Subcarrier amplitude v = sqrt(ci^2 + cq^2), approximated here by max(abs(ci),abs(cq)) + 1/2*min(abs(ci),abs(cq))) +#define AMPLITUDE(ci,cq) (MAX(ABS(ci),ABS(cq)) + (MIN(ABS(ci),ABS(cq))/2)) + + switch(Demod.state) { + + case DEMOD_UNSYNCD: { + if (AMPLITUDE(ci, cq) > SUBCARRIER_DETECT_THRESHOLD) { // subcarrier detected + Demod.state = DEMOD_PHASE_REF_TRAINING; + Demod.sumI = ci; + Demod.sumQ = cq; + Demod.posCount = 1; + } + break; } - - case DEMOD_PHASE_REF_TRAINING: { - if (Demod.posCount < 8) { - if (amplitude > NOISE_THRESHOLD + Demod.previous_amplitude) { - // set the reference phase (will code a logic '1') by averaging over 32 1/fs. - // note: synchronization time > 80 1/fs - //Demod.sumI += ci; - //Demod.sumQ += cq; - Demod.posCount++; - } else { + case DEMOD_PHASE_REF_TRAINING: { + if (Demod.posCount < 8) { + if (AMPLITUDE(ci, cq) > SUBCARRIER_DETECT_THRESHOLD) { + // set the reference phase (will code a logic '1') by averaging over 32 1/fs. + // note: synchronization time > 80 1/fs + Demod.sumI += ci; + Demod.sumQ += cq; + Demod.posCount++; + } else { // subcarrier lost - Demod.state = DEMOD_UNSYNCD; - } - } else { - Demod.state = DEMOD_AWAITING_FALLING_EDGE_OF_SOF; - } - break; + Demod.state = DEMOD_UNSYNCD; + } + } else { + Demod.state = DEMOD_AWAITING_FALLING_EDGE_OF_SOF; + } + break; } + case DEMOD_AWAITING_FALLING_EDGE_OF_SOF: { - case DEMOD_AWAITING_FALLING_EDGE_OF_SOF: { + MAKE_SOFT_DECISION(); - // logic '0' detected - if (amplitude == 0) { - Demod.state = DEMOD_GOT_FALLING_EDGE_OF_SOF; - // start of SOF sequence - Demod.posCount = 0; - } else { - // maximum length of TR1 = 200 1/fs - if (Demod.posCount > 200 / 4) { - Demod.state = DEMOD_UNSYNCD; - } - } - Demod.posCount++; - break; + if (v < 0) { // logic '0' detected + Demod.state = DEMOD_GOT_FALLING_EDGE_OF_SOF; + Demod.posCount = 0; // start of SOF sequence + } else { + if (Demod.posCount > 200 / 4) { // maximum length of TR1 = 200 1/fs + Demod.state = DEMOD_UNSYNCD; + } + } + Demod.posCount++; + break; } + case DEMOD_GOT_FALLING_EDGE_OF_SOF: { - case DEMOD_GOT_FALLING_EDGE_OF_SOF: { - Demod.posCount++; + Demod.posCount++; + MAKE_SOFT_DECISION(); - if (amplitude > 0) { - // low phase of SOF too short (< 9 etu). Note: spec is >= 10, but FPGA tends to "smear" edges - if (Demod.posCount < 9 * 2) { - Demod.state = DEMOD_UNSYNCD; - } else { - LED_C_ON(); // Got SOF - Demod.state = DEMOD_AWAITING_START_BIT; - Demod.posCount = 0; - Demod.bitCount = 0; - Demod.len = 0; - } - } else { - // low phase of SOF too long (> 12 etu) - if (Demod.posCount > 14 * 2) { - Demod.state = DEMOD_UNSYNCD; - Demod.previous_amplitude = amplitude; - LED_C_OFF(); - } - } - break; + if (v > 0) { + if (Demod.posCount < 9 * 2) { // low phase of SOF too short (< 9 etu). Note: spec is >= 10, but FPGA tends to "smear" edges + Demod.state = DEMOD_UNSYNCD; + } else { + LED_C_ON(); // Got SOF + Demod.posCount = 0; + Demod.bitCount = 0; + Demod.len = 0; + Demod.state = DEMOD_AWAITING_START_BIT; + } + } else { + if (Demod.posCount > 14 * 2) { // low phase of SOF too long (> 12 etu) + Demod.state = DEMOD_UNSYNCD; + LED_C_OFF(); + } + } + break; } - - case DEMOD_AWAITING_START_BIT: { - Demod.posCount++; - - if (amplitude > 0) { - if (Demod.posCount > 6 * 2) { // max 19us between characters = 16 1/fs, max 3 etu after low phase of SOF = 24 1/fs - LED_C_OFF(); - if (Demod.bitCount == 0 && Demod.len == 0) { // received SOF only, this is valid for iClass/Picopass - return true; - } else { - Demod.state = DEMOD_UNSYNCD; - } - } - } else { // start bit detected - Demod.bitCount = 0; - Demod.posCount = 1; // this was the first half - Demod.thisBit = amplitude; - Demod.shiftReg = 0; - Demod.state = DEMOD_RECEIVING_DATA; - } - break; + case DEMOD_AWAITING_START_BIT: { + Demod.posCount++; + MAKE_SOFT_DECISION(); + if (v > 0) { + if (Demod.posCount > 6 * 2) { // max 19us between characters = 16 1/fs, max 3 etu after low phase of SOF = 24 1/fs + LED_C_OFF(); + if (Demod.bitCount == 0 && Demod.len == 0) { // received SOF only, this is valid for iClass/Picopass + return true; + } else { + Demod.state = DEMOD_UNSYNCD; + } + } + } else { // start bit detected + Demod.posCount = 1; // this was the first half + Demod.thisBit = v; + Demod.shiftReg = 0; + Demod.state = DEMOD_RECEIVING_DATA; + } + break; } + case DEMOD_RECEIVING_DATA: { - case DEMOD_RECEIVING_DATA: { + MAKE_SOFT_DECISION(); - if (Demod.posCount == 0) { - // first half of bit - Demod.thisBit = amplitude; - Demod.posCount = 1; - } else { - // second half of bit - Demod.thisBit += amplitude; - Demod.shiftReg >>= 1; + if (Demod.posCount == 0) { // first half of bit + Demod.thisBit = v; + Demod.posCount = 1; + } else { // second half of bit + Demod.thisBit += v; - // OR in a logic '1' - if (Demod.thisBit > 0) - Demod.shiftReg |= 0x200; + Demod.shiftReg >>= 1; + if (Demod.thisBit > 0) { // logic '1' + Demod.shiftReg |= 0x200; + } - Demod.bitCount++; + Demod.bitCount++; + if (Demod.bitCount == 10) { - // 1 start 8 data 1 stop = 10 - if (Demod.bitCount == 10) { + uint16_t s = Demod.shiftReg; - uint16_t s = Demod.shiftReg; - - // stop bit == '1', start bit == '0' - if ((s & 0x200) && ((s & 0x001) == 0)) { - // left shift to drop the startbit - Demod.output[Demod.len] = (s >> 1); - Demod.len++; - Demod.bitCount = 0; - Demod.state = DEMOD_AWAITING_START_BIT; - } else { - // this one is a bit hard, either its a correc byte or its unsynced. - Demod.state = DEMOD_UNSYNCD; - LED_C_OFF(); - - // This is EOF (start, stop and all data bits == '0' - if (s == 0) { - return true; - } - } - } - Demod.posCount = 0; - } - break; + if ((s & 0x200) && !(s & 0x001)) { // stop bit == '1', start bit == '0' + Demod.output[Demod.len] = (s >> 1); + Demod.len++; + Demod.bitCount = 0; + Demod.state = DEMOD_AWAITING_START_BIT; + } else { + Demod.state = DEMOD_UNSYNCD; + LED_C_OFF(); + if (s == 0x000) { + // This is EOF (start, stop and all data bits == '0' + return true; + } + } + } + Demod.posCount = 0; + } + break; } - - default: { - Demod.state = DEMOD_UNSYNCD; - LED_C_OFF(); - break; + default: { + Demod.state = DEMOD_UNSYNCD; + LED_C_OFF(); + break; } - } - return false; + } + return false; } /* * Demodulate the samples we received from the tag, also log to tracebuffer */ -static int Get14443bAnswerFromTag(int timeout, uint32_t *eof_time) { +static int Get14443bAnswerFromTag(uint8_t *response, uint16_t max_len, int timeout, uint32_t *eof_time) { int samples = 0, ret = 0; // Set up the demodulator for tag -> reader responses. - uint8_t dm_buf[MAX_FRAME_SIZE]; - Demod14bInit(dm_buf, sizeof(dm_buf)); - //Demod14bInit(BigBuf_malloc(MAX_FRAME_SIZE), MAX_FRAME_SIZE); + Demod14bInit(response, max_len); // wait for last transfer to complete while (!(AT91C_BASE_SSC->SSC_SR & AT91C_SSC_TXEMPTY)) {}; // And put the FPGA in the appropriate mode - FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER | FPGA_HF_READER_SUBCARRIER_848_KHZ | FPGA_HF_READER_MODE_RECEIVE_AMPLITUDE); + FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER | FPGA_HF_READER_SUBCARRIER_848_KHZ | FPGA_HF_READER_MODE_RECEIVE_IQ); // Setup and start DMA. FpgaSetupSsc(FPGA_MAJOR_MODE_HF_READER); @@ -914,13 +931,16 @@ static int Get14443bAnswerFromTag(int timeout, uint32_t *eof_time) { continue; samples++; + if (samples == 1) { // DMA has transferred the very first data dma_start_time = GetCountSspClk() & 0xfffffff0; } - volatile uint16_t tagdata = *upTo++; - + volatile int8_t ci = *upTo >> 8; + volatile int8_t cq = *upTo; + upTo++; + // we have read all of the DMA buffer content. if (upTo >= dma->buf + DMA_BUFFER_SIZE) { @@ -943,40 +963,39 @@ static int Get14443bAnswerFromTag(int timeout, uint32_t *eof_time) { WDT_HIT(); if (BUTTON_PRESS()) { - DbpString("Sniff stopped"); + DbpString("stopped"); break; } } } -// if (Handle14443bSamplesFromTag( (tagdata >> 8) & 0xFF, tagdata & 0xFF )) { - if (Handle14443bSamplesFromTag(tagdata)) { + if (Handle14443bSamplesFromTag(ci, cq)) { - *eof_time = dma_start_time + (samples * 16); // - DELAY_TAG_TO_ARM; // end of EOF + *eof_time = dma_start_time + (samples * 16) - DELAY_TAG_TO_ARM; // end of EOF if (Demod.len > Demod.max_len) { - ret = -2; // buffer overflow + ret = -2; // overflow } break; } if (samples > timeout && Demod.state < DEMOD_PHASE_REF_TRAINING) { - ret = -1; // timeout + ret = -1; break; } } FpgaDisableSscDma(); - uint32_t sof_time = *eof_time - - (Demod.len * 8 * 8 * 16) // time for byte transfers - - (32 * 16) // time for SOF transfer - - 0; // time for EOF transfer if (ret < 0) { return ret; } if (Demod.len > 0) { + uint32_t sof_time = *eof_time + - (Demod.len * 8 * 8 * 16) // time for byte transfers + - (32 * 16) // time for SOF transfer + - 0; // time for EOF transfer LogTrace(Demod.output, Demod.len, (sof_time * 4), (*eof_time * 4), NULL, false); } @@ -1120,7 +1139,8 @@ static void CodeAndTransmit14443bAsReader(const uint8_t *cmd, int len, uint32_t /* Sends an APDU to the tag * TODO: check CRC and preamble */ -uint8_t iso14443b_apdu(uint8_t const *message, size_t message_length, uint8_t *response) { +uint8_t iso14443b_apdu(uint8_t const *message, size_t message_length, uint8_t *response, uint16_t respmaxlen) { + LED_A_ON(); uint8_t message_frame[message_length + 4]; // PCB @@ -1136,30 +1156,28 @@ uint8_t iso14443b_apdu(uint8_t const *message, size_t message_length, uint8_t *r // send uint32_t start_time = 0; CodeAndTransmit14443bAsReader(message_frame, message_length + 4, &start_time); - // get response - uint32_t eof_time = 0; - int ret = Get14443bAnswerFromTag(RECEIVE_SAMPLES_TIMEOUT, &eof_time); - start_time = eof_time + DELAY_ISO14443B_VICC_TO_VCD_READER; + // get response + if (response) { + uint32_t eof_time = start_time + DELAY_ISO14443B_VCD_TO_VICC_READER; + int retlen = Get14443bAnswerFromTag(response, respmaxlen, ISO14443B_READER_TIMEOUT, &eof_time); + FpgaDisableTracing(); + if (retlen < 3) { + LED_A_OFF(); + return 0; + } - FpgaDisableTracing(); + // VALIDATE CRC + if (!check_crc(CRC_14443_B, response, retlen)) { + if (DBGLEVEL > DBG_DEBUG) DbpString("CRC fail"); + return 0; + } - if (ret < 3) { - LED_A_OFF(); + return retlen; + } else { return 0; } - - // VALIDATE CRC - if (!check_crc(CRC_14443_B, Demod.output, Demod.len)) { - if (DBGLEVEL > 3) DbpString("CRC fail"); - return 0; - } - // copy response contents - if (response != NULL) - memcpy(response, Demod.output, Demod.len); - - return Demod.len; LED_A_OFF(); } @@ -1169,63 +1187,78 @@ uint8_t iso14443b_apdu(uint8_t const *message, size_t message_length, uint8_t *r static uint8_t iso14443b_select_srx_card(iso14b_card_select_t *card) { // INITIATE command: wake up the tag using the INITIATE static const uint8_t init_srx[] = { ISO14443B_INITIATE, 0x00, 0x97, 0x5b }; - // SELECT command (with space for CRC) - uint8_t select_srx[] = { ISO14443B_SELECT, 0x00, 0x00, 0x00}; - + uint8_t r_init[3] = {0x0}; + uint8_t r_select[3] = {0x0}; + uint8_t r_papid[10] = {0x0}; + uint32_t start_time = 0; CodeAndTransmit14443bAsReader(init_srx, sizeof(init_srx), &start_time); - uint32_t eof_time = start_time + 0; - int ret = Get14443bAnswerFromTag(RECEIVE_SAMPLES_TIMEOUT, &eof_time); + + uint32_t eof_time = start_time + DELAY_ISO14443B_VCD_TO_VICC_READER; + int retlen = Get14443bAnswerFromTag(r_init, sizeof(r_init), ISO14443B_READER_TIMEOUT, &eof_time); FpgaDisableTracing(); - if (Demod.len == 0 || ret < 0) + if (retlen <= 0) return 2; - Dbprintf("Randomly generated Chip ID (+ 2 byte CRC): %02x [%02x %02x]", Demod.output[0], Demod.output[1], Demod.output[2]); +// Dbprintf("Randomly generated Chip ID (+ 2 byte CRC): %02x [%02x %02x]", r_init[0], r_init[1], r_init[2]); // Randomly generated Chip ID - if (card) card->chipid = Demod.output[0]; - - select_srx[1] = Demod.output[0]; + if (card) { + card->chipid = Demod.output[0]; + } + // SELECT command (with space for CRC) + uint8_t select_srx[] = { ISO14443B_SELECT, 0x00, 0x00, 0x00}; + select_srx[1] = r_init[0]; + AddCrc14B(select_srx, 2); + start_time = eof_time + DELAY_ISO14443B_VICC_TO_VCD_READER; CodeAndTransmit14443bAsReader(select_srx, sizeof(select_srx), &start_time); - eof_time += 0; - ret = Get14443bAnswerFromTag(RECEIVE_SAMPLES_TIMEOUT, &eof_time); + + eof_time = start_time + DELAY_ISO14443B_VCD_TO_VICC_READER; + retlen = Get14443bAnswerFromTag(r_select, sizeof(r_select), ISO14443B_READER_TIMEOUT, &eof_time); FpgaDisableTracing(); - if (Demod.len != 3 || ret < 0) + if (retlen != 3) { return 2; + } // Check the CRC of the answer: - if (!check_crc(CRC_14443_B, Demod.output, Demod.len)) + if (!check_crc(CRC_14443_B, r_select, retlen)) { return 3; + } // Check response from the tag: should be the same UID as the command we just sent: - if (select_srx[1] != Demod.output[0]) + if (select_srx[1] != r_select[0]) { return 1; + } // First get the tag's UID: select_srx[0] = ISO14443B_GET_UID; AddCrc14B(select_srx, 1); + + start_time = eof_time + DELAY_ISO14443B_VICC_TO_VCD_READER; CodeAndTransmit14443bAsReader(select_srx, 3, &start_time); // Only first three bytes for this one - eof_time += 0; - ret = Get14443bAnswerFromTag(RECEIVE_SAMPLES_TIMEOUT, &eof_time); + eof_time = start_time + DELAY_ISO14443B_VCD_TO_VICC_READER; + retlen = Get14443bAnswerFromTag(r_papid, sizeof(r_papid), ISO14443B_READER_TIMEOUT, &eof_time); FpgaDisableTracing(); - if (Demod.len != 10 || ret < 0) + if (retlen != 10) { return 2; + } // The check the CRC of the answer - if (!check_crc(CRC_14443_B, Demod.output, Demod.len)) + if (!check_crc(CRC_14443_B, r_papid, retlen)) { return 3; - + } + if (card) { card->uidlen = 8; - memcpy(card->uid, Demod.output, 8); + memcpy(card->uid, r_papid, 8); } return 0; @@ -1243,52 +1276,60 @@ int iso14443b_select_card(iso14b_card_select_t *card) { // ATTRIB command (with space for CRC) uint8_t attrib[] = { ISO14443B_ATTRIB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00}; + uint8_t r_pupid[14] = {0x0}; + uint8_t r_attrib[3] = {0x0}; + // first, wake up the tag uint32_t start_time = 0; CodeAndTransmit14443bAsReader(wupb, sizeof(wupb), &start_time); - uint32_t eof_time = start_time + 0; - int ret = Get14443bAnswerFromTag(RECEIVE_SAMPLES_TIMEOUT, &eof_time); + + uint32_t eof_time = start_time + DELAY_ISO14443B_VCD_TO_VICC_READER;; + int retlen = Get14443bAnswerFromTag(r_pupid, sizeof(r_pupid), ISO14443B_READER_TIMEOUT, &eof_time); FpgaDisableTracing(); // ATQB too short? - if (ret < 14) + if (retlen < 14) { return -1; + } // VALIDATE CRC - if (!check_crc(CRC_14443_B, Demod.output, Demod.len)) + if (!check_crc(CRC_14443_B, r_pupid, retlen)) { return -2; + } if (card) { card->uidlen = 4; - memcpy(card->uid, Demod.output + 1, 4); - memcpy(card->atqb, Demod.output + 5, 7); + memcpy(card->uid, r_pupid + 1, 4); + memcpy(card->atqb, r_pupid + 5, 7); } // copy the PUPI to ATTRIB ( PUPI == UID ) - memcpy(attrib + 1, Demod.output + 1, 4); + memcpy(attrib + 1, r_pupid + 1, 4); // copy the protocol info from ATQB (Protocol Info -> Protocol_Type) into ATTRIB (Param 3) - attrib[7] = Demod.output[10] & 0x0F; + attrib[7] = r_pupid[10] & 0x0F; AddCrc14B(attrib, 9); - + start_time = eof_time + DELAY_ISO14443B_VICC_TO_VCD_READER; CodeAndTransmit14443bAsReader(attrib, sizeof(attrib), &start_time); - eof_time = start_time + 0; - ret = Get14443bAnswerFromTag(RECEIVE_SAMPLES_TIMEOUT, &eof_time); + eof_time = start_time + DELAY_ISO14443B_VCD_TO_VICC_READER; + retlen = Get14443bAnswerFromTag(r_attrib, sizeof(r_attrib), ISO14443B_READER_TIMEOUT, &eof_time); FpgaDisableTracing(); // Answer to ATTRIB too short? - if (ret < 3) + if (retlen < 3) { return -1; + } // VALIDATE CRC - if (!check_crc(CRC_14443_B, Demod.output, Demod.len)) + if (!check_crc(CRC_14443_B, r_attrib, retlen)) { return -2; + } if (card) { // CID - card->cid = Demod.output[0]; + card->cid = r_attrib[0]; // MAX FRAME uint16_t maxFrame = card->atqb[5] >> 4; @@ -1318,6 +1359,10 @@ void iso14443b_setup(void) { LEDsoff(); FpgaDownloadAndGo(FPGA_BITSTREAM_HF); + // allocate command receive buffer + BigBuf_free(); + BigBuf_Clear_ext(false); + // Initialize Demod and Uart structs Demod14bInit(BigBuf_malloc(MAX_FRAME_SIZE), MAX_FRAME_SIZE); Uart14bInit(BigBuf_malloc(MAX_FRAME_SIZE)); @@ -1347,40 +1392,48 @@ void iso14443b_setup(void) { // // I tried to be systematic and check every answer of the tag, every CRC, etc... //----------------------------------------------------------------------------- -static bool ReadSTBlock(uint8_t block) { - uint8_t cmd[] = {ISO14443B_READ_BLK, block, 0x00, 0x00}; +static bool ReadSTBlock(uint8_t blocknr, uint8_t *block) { + uint8_t cmd[] = {ISO14443B_READ_BLK, blocknr, 0x00, 0x00}; AddCrc14B(cmd, 2); + + uint8_t r_block[6] = {0}; + uint32_t start_time = 0; CodeAndTransmit14443bAsReader(cmd, sizeof(cmd), &start_time); - uint32_t eof_time = start_time + 0; - int res = Get14443bAnswerFromTag(RECEIVE_SAMPLES_TIMEOUT, &eof_time); + + uint32_t eof_time = start_time + DELAY_ISO14443B_VCD_TO_VICC_READER; + int retlen = Get14443bAnswerFromTag(r_block, sizeof(r_block), ISO14443B_READER_TIMEOUT, &eof_time); FpgaDisableTracing(); // Check if we got an answer from the tag - if (Demod.len != 6 || res < 0) { + if (retlen != 6) { DbpString("[!] expected 6 bytes from tag, got less..."); return false; } // The check the CRC of the answer - if (!check_crc(CRC_14443_B, Demod.output, Demod.len)) { + if (!check_crc(CRC_14443_B, r_block, retlen)) { DbpString("CRC fail"); return false; } + + if (block) { + memcpy(block, r_block, 4); + } + + Dbprintf("Address=%02x, Contents=%08x, CRC=%04x", + blocknr, + (r_block[3] << 24) + (r_block[2] << 16) + (r_block[1] << 8) + r_block[0], + (r_block[4] << 8) + r_block[5]); + return true; } void ReadSTMemoryIso14443b(uint8_t numofblocks) { - // Make sure that we start from off, since the tags are stateful; - // confusing things will happen if we don't reset them between reads. - //switch_off(); - - uint8_t i = 0x00; - uint8_t *buf = BigBuf_malloc(sizeof(iso14b_card_select_t)); iso14443b_setup(); - iso14b_card_select_t *card = (iso14b_card_select_t *)buf; - uint8_t res = iso14443b_select_srx_card(card); + iso14b_card_select_t card; + uint8_t res = iso14443b_select_srx_card(&card); // 0: OK 2: attrib fail, 3:crc fail, if (res > 0) goto out; @@ -1388,29 +1441,21 @@ void ReadSTMemoryIso14443b(uint8_t numofblocks) { Dbprintf("[+] Tag memory dump, block 0 to %d", numofblocks); ++numofblocks; + + uint8_t data[4] = {0}; - for (;;) { + for (uint8_t i = 0; i != 0xFF; i++) { + if (i == numofblocks) { DbpString("System area block (0xFF):"); i = 0xff; } - uint8_t retries = 3; - do { - res = ReadSTBlock(i); - } while (!res && --retries); + if (ReadSTBlock(i, data ) == false) + break; - if (!res && !retries) { - goto out; - } - - // Now print out the memory location: - Dbprintf("Address=%02x, Contents=%08x, CRC=%04x", i, - (Demod.output[3] << 24) + (Demod.output[2] << 16) + (Demod.output[1] << 8) + Demod.output[0], - (Demod.output[4] << 8) + Demod.output[5]); - - if (i == 0xff) break; - ++i; + if (i == 0xFF) + break; } // Todo: iceman: send back read data to client. @@ -1462,8 +1507,8 @@ void SniffIso14443b(void) { //Uart14bInit(BigBuf_malloc(MAX_FRAME_SIZE)); // Set FPGA in the appropriate mode - //FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER | FPGA_HF_READER_SUBCARRIER_848_KHZ | FPGA_HF_READER_MODE_SNIFF_IQ); - FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER | FPGA_HF_READER_SUBCARRIER_848_KHZ | FPGA_HF_READER_MODE_SNIFF_AMPLITUDE); + FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER | FPGA_HF_READER_SUBCARRIER_848_KHZ | FPGA_HF_READER_MODE_SNIFF_IQ); +// FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER | FPGA_HF_READER_SUBCARRIER_848_KHZ | FPGA_HF_READER_MODE_SNIFF_AMPLITUDE); // connect Demodulated Signal to ADC: SetAdcMuxFor(GPIO_MUXSEL_HIPKD); @@ -1505,7 +1550,9 @@ void SniffIso14443b(void) { dma_start_time = GetCountSspClk() & 0xfffffff0; } - volatile uint16_t sniffdata = *upTo++; + volatile int8_t ci = *upTo >> 8; + volatile int8_t cq = *upTo; + upTo++; // we have read all of the DMA buffer content. if (upTo >= dma->buf + DMA_BUFFER_SIZE) { @@ -1538,10 +1585,7 @@ void SniffIso14443b(void) { // no need to try decoding reader data if the tag is sending if (tag_is_active == false) { - if (Handle14443bSampleFromReader((sniffdata & 0x2) >> 1)) { - //if (Handle14443bSampleFromReader((sniffdata & 0x0100) >> 8)) { - //if (Handle14443bSampleFromReader(ci & 0x01)) { - + if (Handle14443bSampleFromReader(ci & 0x01)) { uint32_t eof_time = dma_start_time + (samples * 16) + 8; // - DELAY_READER_TO_ARM_SNIFF; // end of EOF if (Uart.byteCnt > 0) { uint32_t sof_time = eof_time @@ -1557,8 +1601,7 @@ void SniffIso14443b(void) { expect_tag_answer = true; } - if (Handle14443bSampleFromReader(sniffdata & 0x01)) { - //if (Handle14443bSampleFromReader(cq & 0x01)) { + if (Handle14443bSampleFromReader(cq & 0x01)) { uint32_t eof_time = dma_start_time + (samples * 16) + 16; // - DELAY_READER_TO_ARM_SNIFF; // end of EOF if (Uart.byteCnt > 0) { @@ -1581,8 +1624,7 @@ void SniffIso14443b(void) { // no need to try decoding tag data if the reader is sending - and we cannot afford the time if (reader_is_active == false && expect_tag_answer) { - if (Handle14443bSamplesFromTag( sniffdata >> 2 )) { -// if (Handle14443bSamplesFromTag(((sniffdata >> 8) & 0xFF), sniffdata & 0xFF)) { + if (Handle14443bSamplesFromTag((ci >> 1), (cq >> 1)) >= 0) { uint32_t eof_time = dma_start_time + (samples * 16); // - DELAY_TAG_TO_ARM_SNIFF; // end of EOF uint32_t sof_time = eof_time @@ -1639,12 +1681,8 @@ void SendRawCommand14443B_Ex(PacketCommandNG *c) { size_t len = c->oldarg[1] & 0xffff; uint32_t timeout = c->oldarg[2]; uint8_t *cmd = c->data.asBytes; - int status; - uint32_t sendlen = sizeof(iso14b_card_select_t); - uint8_t buf[PM3_CMD_DATA_SIZE] = {0x00}; - - if (DBGLEVEL > 3) Dbprintf("14b raw: param, %04x", param); + if (DBGLEVEL > DBG_DEBUG) Dbprintf("14b raw: param, %04x", param); // turn on trigger (LED_A) if ((param & ISO14B_REQUEST_TRIGGER) == ISO14B_REQUEST_TRIGGER) @@ -1660,24 +1698,27 @@ void SendRawCommand14443B_Ex(PacketCommandNG *c) { set_tracing(true); + int status; + uint32_t sendlen = sizeof(iso14b_card_select_t); + iso14b_card_select_t card; + if ((param & ISO14B_SELECT_STD) == ISO14B_SELECT_STD) { - iso14b_card_select_t *card = (iso14b_card_select_t *)buf; - status = iso14443b_select_card(card); - reply_mix(CMD_HF_ISO14443B_COMMAND, status, sendlen, 0, buf, sendlen); + status = iso14443b_select_card(&card); + reply_mix(CMD_HF_ISO14443B_COMMAND, status, sendlen, 0, (uint8_t*)&card, sendlen); // 0: OK -1: attrib fail, -2:crc fail, if (status != 0) goto out; } if ((param & ISO14B_SELECT_SR) == ISO14B_SELECT_SR) { - iso14b_card_select_t *card = (iso14b_card_select_t *)buf; - status = iso14443b_select_srx_card(card); - reply_mix(CMD_HF_ISO14443B_COMMAND, status, sendlen, 0, buf, sendlen); + status = iso14443b_select_srx_card(&card); + reply_mix(CMD_HF_ISO14443B_COMMAND, status, sendlen, 0, (uint8_t*)&card, sendlen); // 0: OK 2: demod fail, 3:crc fail, if (status > 0) goto out; } if ((param & ISO14B_APDU) == ISO14B_APDU) { - status = iso14443b_apdu(cmd, len, buf); + uint8_t buf[100] = {0}; + status = iso14443b_apdu(cmd, len, buf, sizeof(buf)); reply_mix(CMD_HF_ISO14443B_COMMAND, status, status, 0, buf, status); } @@ -1686,15 +1727,17 @@ void SendRawCommand14443B_Ex(PacketCommandNG *c) { AddCrc14B(cmd, len); len += 2; } - + uint8_t buf[100] = {0}; + uint32_t start_time = 0; CodeAndTransmit14443bAsReader(cmd, len, &start_time); // raw - uint32_t eof_time = start_time + 0; - status = Get14443bAnswerFromTag(RECEIVE_SAMPLES_TIMEOUT, &eof_time); // raw + + uint32_t eof_time = start_time + DELAY_ISO14443B_VCD_TO_VICC_READER; + status = Get14443bAnswerFromTag(buf, sizeof(buf), 5 * ISO14443B_READER_TIMEOUT, &eof_time); // raw FpgaDisableTracing(); sendlen = MIN(Demod.len, PM3_CMD_DATA_SIZE); - reply_old(CMD_HF_ISO14443B_COMMAND, status, sendlen, 0, Demod.output, sendlen); + reply_mix(CMD_HF_ISO14443B_COMMAND, status, sendlen, 0, Demod.output, sendlen); } out: diff --git a/armsrc/iso14443b.h b/armsrc/iso14443b.h index 0013ad313..4f36ae62f 100644 --- a/armsrc/iso14443b.h +++ b/armsrc/iso14443b.h @@ -27,7 +27,8 @@ #endif void iso14443b_setup(void); -uint8_t iso14443b_apdu(uint8_t const *message, size_t message_length, uint8_t *response); +uint8_t iso14443b_apdu(uint8_t const *message, size_t message_length, uint8_t *response, uint16_t respmaxlen); + int iso14443b_select_card(iso14b_card_select_t *card); uint8_t iso14443b_select_card_srx(iso14b_card_select_t *card); From 7c9711eb080423a24f8815b0ab305a11f122497c Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sun, 16 Aug 2020 21:14:37 +0200 Subject: [PATCH 0222/1047] 14b colors --- client/src/cmdhf14b.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/client/src/cmdhf14b.c b/client/src/cmdhf14b.c index f1eaf843c..d26354785 100644 --- a/client/src/cmdhf14b.c +++ b/client/src/cmdhf14b.c @@ -485,9 +485,9 @@ static int print_ST_Lock_info(uint8_t model) { // print UID info from SRx chips (ST Microelectronics) static void print_st_general_info(uint8_t *data, uint8_t len) { //uid = first 8 bytes in data - PrintAndLogEx(NORMAL, " UID: %s", sprint_hex(SwapEndian64(data, 8, 8), len)); - PrintAndLogEx(NORMAL, " MFG: %02X, %s", data[6], getTagInfo(data[6])); - PrintAndLogEx(NORMAL, "Chip: %02X, %s", data[5] >> 2, get_ST_Chip_Model(data[5] >> 2)); + PrintAndLogEx(NORMAL, " UID: " _GREEN_("%s"), sprint_hex(SwapEndian64(data, 8, 8), len)); + PrintAndLogEx(NORMAL, " MFG: %02X, " _YELLOW_("%s"), data[6], getTagInfo(data[6])); + PrintAndLogEx(NORMAL, "Chip: %02X, " _YELLOW_("%s"), data[5] >> 2, get_ST_Chip_Model(data[5] >> 2)); } //05 00 00 = find one tag in field @@ -532,7 +532,7 @@ static bool HF14B_Std_Info(bool verbose) { switch (status) { case 0: PrintAndLogEx(NORMAL, ""); - PrintAndLogEx(SUCCESS, " UID : %s", sprint_hex(card.uid, card.uidlen)); + PrintAndLogEx(SUCCESS, " UID : " _GREEN_("%s"), sprint_hex(card.uid, card.uidlen)); PrintAndLogEx(SUCCESS, " ATQB : %s", sprint_hex(card.atqb, sizeof(card.atqb))); PrintAndLogEx(SUCCESS, " CHIPID : %02X", card.chipid); print_atqb_resp(card.atqb, card.cid); @@ -667,7 +667,7 @@ static bool HF14B_Std_Reader(bool verbose) { switch (status) { case 0: PrintAndLogEx(NORMAL, ""); - PrintAndLogEx(SUCCESS, " UID : %s", sprint_hex(card.uid, card.uidlen)); + PrintAndLogEx(SUCCESS, " UID : " _GREEN_("%s"), sprint_hex(card.uid, card.uidlen)); PrintAndLogEx(SUCCESS, " ATQB : %s", sprint_hex(card.atqb, sizeof(card.atqb))); PrintAndLogEx(SUCCESS, " CHIPID : %02X", card.chipid); print_atqb_resp(card.atqb, card.cid); @@ -744,7 +744,6 @@ static bool HF14B_Other_Reader(void) { static int CmdHF14BReader(const char *Cmd) { char cmdp = tolower(param_getchar(Cmd, 0)); if (cmdp == 'h') return usage_hf_14b_reader(); - bool verbose = !(cmdp == 's'); return readHF14B(verbose); } @@ -764,6 +763,7 @@ static int CmdHF14BReadSri(const char *Cmd) { SendCommandMIX(CMD_HF_SRI_READ, blocks, 0, 0, NULL, 0); return 0; } + // New command to write a SRI512/SRIX4K tag. static int CmdHF14BWriteSri(const char *Cmd) { /* @@ -1099,7 +1099,7 @@ static command_t CommandTable[] = { {"sniff", CmdHF14BSniff, IfPm3Iso14443b, "Eavesdrop ISO 14443B"}, {"sriread", CmdHF14BReadSri, IfPm3Iso14443b, "Read contents of a SRI512 | SRIX4K tag"}, {"sriwrite", CmdHF14BWriteSri, IfPm3Iso14443b, "Write data to a SRI512 | SRIX4K tag"}, - //{"valid", srix4kValid, AlwaysAvailable, "srix4k checksum test"}, +// {"valid", srix4kValid, AlwaysAvailable, "srix4k checksum test"}, {NULL, NULL, NULL, NULL} }; From 4cc30de78852a56d2692df2e16d4d1d59be097c9 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sun, 16 Aug 2020 21:32:16 +0200 Subject: [PATCH 0223/1047] textual --- client/src/cmdhf14b.c | 113 +++++++++++++++++++----------------------- 1 file changed, 52 insertions(+), 61 deletions(-) diff --git a/client/src/cmdhf14b.c b/client/src/cmdhf14b.c index d26354785..71c4d0a03 100644 --- a/client/src/cmdhf14b.c +++ b/client/src/cmdhf14b.c @@ -127,7 +127,7 @@ static void switch_on_field_14b(void) { static int switch_off_field_14b(void) { clearCommandBuffer(); SendCommandMIX(CMD_HF_ISO14443B_COMMAND, ISO14B_DISCONNECT, 0, 0, NULL, 0); - return 0; + return PM3_SUCCESS; } static bool waitCmd14b(bool verbose) { @@ -289,7 +289,7 @@ static int CmdHF14BCmdRaw(const char *Cmd) { datalen = (datalen > PM3_CMD_DATA_SIZE) ? PM3_CMD_DATA_SIZE : datalen; clearCommandBuffer(); - SendCommandOLD(CMD_HF_ISO14443B_COMMAND, flags, datalen, time_wait, data, datalen); + SendCommandMIX(CMD_HF_ISO14443B_COMMAND, flags, datalen, time_wait, data, datalen); if (!reply) return PM3_SUCCESS; @@ -306,46 +306,34 @@ static int CmdHF14BCmdRaw(const char *Cmd) { static bool get_14b_UID(iso14b_card_select_t *card) { - if (!card) + if (card == NULL) return false; - int8_t retry = 3; PacketResponseNG resp; + clearCommandBuffer(); + SendCommandMIX(CMD_HF_ISO14443B_COMMAND, ISO14B_CONNECT | ISO14B_SELECT_SR | ISO14B_DISCONNECT, 0, 0, NULL, 0); + if (WaitForResponseTimeout(CMD_HF_ISO14443B_COMMAND, &resp, TIMEOUT)) { - // test for 14b SR - while (retry--) { - - clearCommandBuffer(); - SendCommandMIX(CMD_HF_ISO14443B_COMMAND, ISO14B_CONNECT | ISO14B_SELECT_SR | ISO14B_DISCONNECT, 0, 0, NULL, 0); - if (WaitForResponseTimeout(CMD_HF_ISO14443B_COMMAND, &resp, TIMEOUT)) { - - uint8_t status = resp.oldarg[0]; - if (status == 0) { - memcpy(card, (iso14b_card_select_t *)resp.data.asBytes, sizeof(iso14b_card_select_t)); - return true; - } + uint8_t status = resp.oldarg[0]; + if (status == 0) { + memcpy(card, (iso14b_card_select_t *)resp.data.asBytes, sizeof(iso14b_card_select_t)); + return true; } - } // retry + } // test 14b standard - retry = 3; - while (retry--) { + clearCommandBuffer(); + SendCommandMIX(CMD_HF_ISO14443B_COMMAND, ISO14B_CONNECT | ISO14B_SELECT_STD | ISO14B_DISCONNECT, 0, 0, NULL, 0); + if (WaitForResponseTimeout(CMD_HF_ISO14443B_COMMAND, &resp, TIMEOUT)) { - clearCommandBuffer(); - SendCommandMIX(CMD_HF_ISO14443B_COMMAND, ISO14B_CONNECT | ISO14B_SELECT_STD | ISO14B_DISCONNECT, 0, 0, NULL, 0); - if (WaitForResponseTimeout(CMD_HF_ISO14443B_COMMAND, &resp, TIMEOUT)) { - - uint8_t status = resp.oldarg[0]; - if (status == 0) { - memcpy(card, (iso14b_card_select_t *)resp.data.asBytes, sizeof(iso14b_card_select_t)); - return true; - } + uint8_t status = resp.oldarg[0]; + if (status == 0) { + memcpy(card, (iso14b_card_select_t *)resp.data.asBytes, sizeof(iso14b_card_select_t)); + return true; } - } // retry - - if (retry <= 0) - PrintAndLogEx(WARNING, "timeout while waiting for reply."); + } + PrintAndLogEx(WARNING, "timeout while waiting for reply."); return false; } @@ -356,18 +344,18 @@ static bool get_14b_UID(iso14b_card_select_t *card) { // 5 = max frame size / -4 info // 6 = FWI / Coding options static void print_atqb_resp(uint8_t *data, uint8_t cid) { - //PrintAndLogEx(NORMAL, " UID: %s", sprint_hex(data+1,4)); - PrintAndLogEx(NORMAL, " App Data: %s", sprint_hex(data, 4)); - PrintAndLogEx(NORMAL, " Protocol: %s", sprint_hex(data + 4, 3)); + //PrintAndLogEx(SUCCESS, " UID: %s", sprint_hex(data+1,4)); + PrintAndLogEx(SUCCESS, " App Data: %s", sprint_hex(data, 4)); + PrintAndLogEx(SUCCESS, " Protocol: %s", sprint_hex(data + 4, 3)); uint8_t BitRate = data[4]; - if (!BitRate) PrintAndLogEx(NORMAL, " Bit Rate: 106 kbit/s only PICC <-> PCD"); - if (BitRate & 0x10) PrintAndLogEx(NORMAL, " Bit Rate: 212 kbit/s PICC -> PCD supported"); - if (BitRate & 0x20) PrintAndLogEx(NORMAL, " Bit Rate: 424 kbit/s PICC -> PCD supported"); - if (BitRate & 0x40) PrintAndLogEx(NORMAL, " Bit Rate: 847 kbit/s PICC -> PCD supported"); - if (BitRate & 0x01) PrintAndLogEx(NORMAL, " Bit Rate: 212 kbit/s PICC <- PCD supported"); - if (BitRate & 0x02) PrintAndLogEx(NORMAL, " Bit Rate: 424 kbit/s PICC <- PCD supported"); - if (BitRate & 0x04) PrintAndLogEx(NORMAL, " Bit Rate: 847 kbit/s PICC <- PCD supported"); - if (BitRate & 0x80) PrintAndLogEx(NORMAL, " Same bit rate <-> required"); + if (!BitRate) PrintAndLogEx(SUCCESS, " Bit Rate: 106 kbit/s only PICC <-> PCD"); + if (BitRate & 0x10) PrintAndLogEx(SUCCESS, " Bit Rate: 212 kbit/s PICC -> PCD supported"); + if (BitRate & 0x20) PrintAndLogEx(SUCCESS, " Bit Rate: 424 kbit/s PICC -> PCD supported"); + if (BitRate & 0x40) PrintAndLogEx(SUCCESS, " Bit Rate: 847 kbit/s PICC -> PCD supported"); + if (BitRate & 0x01) PrintAndLogEx(SUCCESS, " Bit Rate: 212 kbit/s PICC <- PCD supported"); + if (BitRate & 0x02) PrintAndLogEx(SUCCESS, " Bit Rate: 424 kbit/s PICC <- PCD supported"); + if (BitRate & 0x04) PrintAndLogEx(SUCCESS, " Bit Rate: 847 kbit/s PICC <- PCD supported"); + if (BitRate & 0x80) PrintAndLogEx(SUCCESS, " Same bit rate <-> required"); uint16_t maxFrame = data[5] >> 4; if (maxFrame < 5) maxFrame = 8 * maxFrame + 16; @@ -377,26 +365,26 @@ static void print_atqb_resp(uint8_t *data, uint8_t cid) { else if (maxFrame == 8) maxFrame = 256; else maxFrame = 257; - PrintAndLogEx(NORMAL, "Max Frame Size: %u%s bytes", maxFrame, (maxFrame == 257) ? "+ RFU" : ""); + PrintAndLogEx(SUCCESS, "Max Frame Size: %u%s bytes", maxFrame, (maxFrame == 257) ? "+ RFU" : ""); uint8_t protocolT = data[5] & 0xF; - PrintAndLogEx(NORMAL, " Protocol Type: Protocol is %scompliant with ISO/IEC 14443-4", (protocolT) ? "" : "not "); + PrintAndLogEx(SUCCESS, " Protocol Type: Protocol is %scompliant with ISO/IEC 14443-4", (protocolT) ? "" : "not "); uint8_t fwt = data[6] >> 4; if (fwt < 16) { uint32_t etus = (32 << fwt); uint32_t fwt_time = (302 << fwt); - PrintAndLogEx(NORMAL, "Frame Wait Integer: %u - %u ETUs | %u us", fwt, etus, fwt_time); + PrintAndLogEx(SUCCESS, "Frame Wait Integer: %u - %u ETUs | %u us", fwt, etus, fwt_time); } else { - PrintAndLogEx(NORMAL, "Frame Wait Integer: %u - RFU", fwt); + PrintAndLogEx(SUCCESS, "Frame Wait Integer: %u - RFU", fwt); } - PrintAndLogEx(NORMAL, " App Data Code: Application is %s", (data[6] & 4) ? "Standard" : "Proprietary"); - PrintAndLogEx(NORMAL, " Frame Options: NAD is %ssupported", (data[6] & 2) ? "" : "not "); - PrintAndLogEx(NORMAL, " Frame Options: CID is %ssupported", (data[6] & 1) ? "" : "not "); - PrintAndLogEx(NORMAL, "Tag :"); - PrintAndLogEx(NORMAL, " Max Buf Length: %u (MBLI) %s", cid >> 4, (cid & 0xF0) ? "" : "chained frames not supported"); - PrintAndLogEx(NORMAL, " CID : %u", cid & 0x0f); + PrintAndLogEx(SUCCESS, " App Data Code: Application is %s", (data[6] & 4) ? "Standard" : "Proprietary"); + PrintAndLogEx(SUCCESS, " Frame Options: NAD is %ssupported", (data[6] & 2) ? "" : "not "); + PrintAndLogEx(SUCCESS, " Frame Options: CID is %ssupported", (data[6] & 1) ? "" : "not "); + PrintAndLogEx(SUCCESS, "Tag :"); + PrintAndLogEx(SUCCESS, " Max Buf Length: %u (MBLI) %s", cid >> 4, (cid & 0xF0) ? "" : "chained frames not supported"); + PrintAndLogEx(SUCCESS, " CID : %u", cid & 0x0f); return; } @@ -485,9 +473,10 @@ static int print_ST_Lock_info(uint8_t model) { // print UID info from SRx chips (ST Microelectronics) static void print_st_general_info(uint8_t *data, uint8_t len) { //uid = first 8 bytes in data - PrintAndLogEx(NORMAL, " UID: " _GREEN_("%s"), sprint_hex(SwapEndian64(data, 8, 8), len)); - PrintAndLogEx(NORMAL, " MFG: %02X, " _YELLOW_("%s"), data[6], getTagInfo(data[6])); - PrintAndLogEx(NORMAL, "Chip: %02X, " _YELLOW_("%s"), data[5] >> 2, get_ST_Chip_Model(data[5] >> 2)); + PrintAndLogEx(NORMAL, ""); + PrintAndLogEx(SUCCESS, " UID: " _GREEN_("%s"), sprint_hex(SwapEndian64(data, 8, 8), len)); + PrintAndLogEx(SUCCESS, " MFG: %02X, " _YELLOW_("%s"), data[6], getTagInfo(data[6])); + PrintAndLogEx(SUCCESS, "Chip: %02X, " _YELLOW_("%s"), data[5] >> 2, get_ST_Chip_Model(data[5] >> 2)); } //05 00 00 = find one tag in field @@ -761,7 +750,9 @@ static int CmdHF14BReadSri(const char *Cmd) { clearCommandBuffer(); SendCommandMIX(CMD_HF_SRI_READ, blocks, 0, 0, NULL, 0); - return 0; + + // iceman: should download read data and print in client. + return PM3_SUCCESS; } // New command to write a SRI512/SRIX4K tag. @@ -928,7 +919,7 @@ static int CmdHF14BDump(const char *Cmd) { uint16_t len = (resp.oldarg[1] & 0xFFFF); recv = resp.data.asBytes; - if (!check_crc(CRC_14443_B, recv, len)) { + if (check_crc(CRC_14443_B, recv, len) == false) { PrintAndLogEx(FAILED, "crc fail, retrying one more time"); continue; } @@ -940,7 +931,6 @@ static int CmdHF14BDump(const char *Cmd) { break; } - retry = 0; blocknum++; if (blocknum > blocks) { @@ -958,7 +948,7 @@ static int CmdHF14BDump(const char *Cmd) { goto out; } - PrintAndLogEx(NORMAL, "\n"); + PrintAndLogEx(NORMAL, ""); PrintAndLogEx(NORMAL, "block# | data | ascii"); PrintAndLogEx(NORMAL, "---------+--------------+----------"); @@ -972,12 +962,13 @@ static int CmdHF14BDump(const char *Cmd) { ); } - PrintAndLogEx(NORMAL, "\n"); + PrintAndLogEx(NORMAL, ""); size_t datalen = (blocks + 1) * 4; saveFileEML(filename, data, datalen, 4); saveFile(filename, ".bin", data, datalen); + // JSON? out: return switch_off_field_14b(); } From 641349f6be0c3dc0183a5943729be72d0e711c57 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sun, 16 Aug 2020 22:47:07 +0200 Subject: [PATCH 0224/1047] true.. --- armsrc/iso14443b.c | 52 +++++++++++++++++++++++----------------------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/armsrc/iso14443b.c b/armsrc/iso14443b.c index 3c6c811ed..2381bc778 100644 --- a/armsrc/iso14443b.c +++ b/armsrc/iso14443b.c @@ -1428,42 +1428,42 @@ static bool ReadSTBlock(uint8_t blocknr, uint8_t *block) { return true; } -void ReadSTMemoryIso14443b(uint8_t numofblocks) { +void ReadSTMemoryIso14443b(uint16_t numofblocks) { iso14443b_setup(); + uint8_t *mem = BigBuf_malloc((numofblocks + 1) * 4 ); + iso14b_card_select_t card; uint8_t res = iso14443b_select_srx_card(&card); + int isOK = PM3_SUCCESS; // 0: OK 2: attrib fail, 3:crc fail, - if (res > 0) goto out; - - Dbprintf("[+] Tag memory dump, block 0 to %d", numofblocks); - - ++numofblocks; - - uint8_t data[4] = {0}; - - for (uint8_t i = 0; i != 0xFF; i++) { - - if (i == numofblocks) { - DbpString("System area block (0xFF):"); - i = 0xff; - } - - if (ReadSTBlock(i, data ) == false) - break; - - if (i == 0xFF) - break; + if (res > 0) { + isOK = PM3_ETIMEOUT; + goto out; } - // Todo: iceman: send back read data to client. - // reply_ng(..., ); + ++numofblocks; + + for (uint8_t i = 0; i < numofblocks; i++) { + + if (ReadSTBlock(i, mem + ( i * 4)) == false) { + isOK = PM3_ETIMEOUT; + break; + } + } + + // System area block (0xFF) + if (ReadSTBlock(0xFF, mem + (numofblocks * 4)) == false) + isOK = PM3_ETIMEOUT; out: - switch_off(); // disconnect raw - SpinDelay(20); + + reply_ng(CMD_HF_SRI_READ, isOK, mem, numofblocks * 4); + + BigBuf_free(); + switch_off(); } //============================================================================= @@ -1624,7 +1624,7 @@ void SniffIso14443b(void) { // no need to try decoding tag data if the reader is sending - and we cannot afford the time if (reader_is_active == false && expect_tag_answer) { - if (Handle14443bSamplesFromTag((ci >> 1), (cq >> 1)) >= 0) { + if (Handle14443bSamplesFromTag((ci >> 1), (cq >> 1))) { uint32_t eof_time = dma_start_time + (samples * 16); // - DELAY_TAG_TO_ARM_SNIFF; // end of EOF uint32_t sof_time = eof_time From 8ebeebe7c240f518e6d2b06def831f8be5604239 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sun, 16 Aug 2020 22:47:45 +0200 Subject: [PATCH 0225/1047] u16 --- armsrc/iso14443b.h | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/armsrc/iso14443b.h b/armsrc/iso14443b.h index 4f36ae62f..ac2c4f831 100644 --- a/armsrc/iso14443b.h +++ b/armsrc/iso14443b.h @@ -34,15 +34,11 @@ uint8_t iso14443b_select_card_srx(iso14b_card_select_t *card); void SimulateIso14443bTag(uint32_t pupi); void AcquireRawAdcSamplesIso14443b(uint32_t parameter); -void ReadSTMemoryIso14443b(uint8_t numofblocks); -void RAMFUNC SniffIso14443b(void); +void ReadSTMemoryIso14443b(uint16_t numofblocks); +void SniffIso14443b(void); void SendRawCommand14443B(uint32_t, uint32_t, uint8_t, uint8_t[]); void SendRawCommand14443B_Ex(PacketCommandNG *c); -// testfunctions -void WaitForFpgaDelayQueueIsEmpty(uint16_t delay); -void ClearFpgaShiftingRegisters(void); - // States for 14B SIM command #define SIM_NOFIELD 0 #define SIM_IDLE 1 From 65f174ad9ff382a215fa14a6c0a816a330382efc Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sun, 16 Aug 2020 22:47:58 +0200 Subject: [PATCH 0226/1047] no inline --- armsrc/optimized_elite.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/armsrc/optimized_elite.c b/armsrc/optimized_elite.c index d2c57ac68..c84dd58be 100644 --- a/armsrc/optimized_elite.c +++ b/armsrc/optimized_elite.c @@ -103,7 +103,7 @@ void permutekey_rev(uint8_t key[8], uint8_t dest[8]) { * @param val * @return */ -static inline uint8_t rr(uint8_t val) { +static uint8_t rr(uint8_t val) { return val >> 1 | ((val & 1) << 7); } @@ -113,7 +113,7 @@ static inline uint8_t rr(uint8_t val) { * @param val * @return */ -static inline uint8_t rl(uint8_t val) { +static uint8_t rl(uint8_t val) { return val << 1 | ((val & 0x80) >> 7); } @@ -123,7 +123,7 @@ static inline uint8_t rl(uint8_t val) { * @param val * @return */ -static inline uint8_t swap(uint8_t val) { +static uint8_t swap(uint8_t val) { return ((val >> 4) & 0xFF) | ((val & 0xFF) << 4); } From 2be85939f7070ac6e0128990a76dda8a72b66e58 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Mon, 17 Aug 2020 08:52:24 +0200 Subject: [PATCH 0227/1047] fix: hf 15 cetsuid. hf 15 sim --- armsrc/appmain.c | 10 ++- armsrc/iso15693.c | 175 +++++++++++++++++++++++++++++++++++-------- client/src/cmdhf15.c | 121 +++++++++++------------------- include/pm3_cmd.h | 4 +- 4 files changed, 201 insertions(+), 109 deletions(-) diff --git a/armsrc/appmain.c b/armsrc/appmain.c index 0b8bc8097..eefe97f1f 100644 --- a/armsrc/appmain.c +++ b/armsrc/appmain.c @@ -1042,12 +1042,20 @@ static void PacketReceived(PacketCommandNG *packet) { } case CMD_HF_ISO15693_SIMULATE: { struct p { - uint8_t uid[10]; + uint8_t uid[8]; } PACKED; struct p *payload = (struct p *) packet->data.asBytes; SimTagIso15693(payload->uid); break; } + case CMD_HF_ISO15693_CSETUID: { + struct p { + uint8_t uid[8]; + } PACKED; + struct p *payload = (struct p *) packet->data.asBytes; + SetTag15693Uid(payload->uid); + break; + } #endif #ifdef WITH_LEGICRF diff --git a/armsrc/iso15693.c b/armsrc/iso15693.c index a9b5efdf1..da9501ecd 100644 --- a/armsrc/iso15693.c +++ b/armsrc/iso15693.c @@ -2,7 +2,7 @@ // Jonathan Westhues, split Nov 2006 // Modified by Greg Jones, Jan 2009 // Modified by Adrian Dabrowski "atrox", Mar-Sept 2010,Oct 2011 -// Modified by Christian Herrmann "iceman", 2017 +// Modified by Christian Herrmann "iceman", 2017, 2020 // Modified by piwi, Oct 2018 // // This code is licensed to you under the terms of the GNU GPL, version 2 or, @@ -81,9 +81,18 @@ #define DELAY_READER_TO_ARM_SNIFF 32 // times in samples @ 212kHz when acting as reader -#define ISO15693_READER_TIMEOUT 330 // 330/212kHz = 1558us, should be even enough for iClass tags responding to ACTALL +#define ISO15693_READER_TIMEOUT 330 // 330/212kHz = 1558us #define ISO15693_READER_TIMEOUT_WRITE 4700 // 4700/212kHz = 22ms, nominal 20ms +// iceman: This defines below exists in the header file, just here for my easy reading +// Delays in SSP_CLK ticks. +// SSP_CLK runs at 13,56MHz / 32 = 423.75kHz when simulating a tag +//#define DELAY_ISO15693_VCD_TO_VICC_SIM 132 // 132/423.75kHz = 311.5us from end of command EOF to start of tag response + +//SSP_CLK runs at 13.56MHz / 4 = 3,39MHz when acting as reader. All values should be multiples of 16 +//#define DELAY_ISO15693_VCD_TO_VICC_READER 1056 // 1056/3,39MHz = 311.5us from end of command EOF to start of tag response +//#define DELAY_ISO15693_VICC_TO_VCD_READER 1024 // 1024/3.39MHz = 302.1us between end of tag response and next reader command + /////////////////////////////////////////////////////////////////////// // ISO 15693 Part 2 - Air Interface @@ -506,7 +515,7 @@ static RAMFUNC int Handle15693SamplesFromTag(uint16_t amplitude, DecodeTag_t *ta tag->output[tag->len] = tag->shiftReg; tag->len++; - if (tag->len > tag->max_len) { + if (tag->len >= tag->max_len) { // buffer overflow, give up LED_C_OFF(); return true; @@ -531,7 +540,7 @@ static RAMFUNC int Handle15693SamplesFromTag(uint16_t amplitude, DecodeTag_t *ta tag->output[tag->len] = tag->shiftReg; tag->len++; - if (tag->len > tag->max_len) { + if (tag->len >= tag->max_len) { // buffer overflow, give up tag->posCount = 0; tag->previous_amplitude = amplitude; @@ -707,8 +716,9 @@ int GetIso15693AnswerFromTag(uint8_t *response, uint16_t max_len, uint16_t timeo if (dt->lastBit == SOF_PART2) { *eof_time -= (8 * 16); // needed 8 additional samples to confirm single SOF (iCLASS) } - if (dt->len > dt->max_len) { + if (dt->len >= dt->max_len) { ret = -2; // buffer overflow + Dbprintf("overflow (%d >= %d", dt->len, dt->max_len); } break; } @@ -1727,6 +1737,8 @@ void SimTagIso15693(uint8_t *uid) { if (button_pressed) DbpString("button pressed"); + + reply_ng(CMD_HF_ISO15693_SIMULATE, PM3_SUCCESS, NULL, 0); } // Since there is no standardized way of reading the AFI out of a tag, we will brute force it @@ -1849,9 +1861,10 @@ void DirectTag15693Command(uint32_t datalen, uint32_t speed, uint32_t recv, uint if (recvlen > ISO15693_MAX_RESPONSE_LENGTH) { recvlen = ISO15693_MAX_RESPONSE_LENGTH; } - reply_mix(CMD_ACK, recvlen, 0, 0, recvbuf, ISO15693_MAX_RESPONSE_LENGTH); + reply_mix(CMD_ACK, recvlen, 0, 0, recvbuf, recvlen); if (DBGLEVEL >= DBG_EXTENDED) { + Dbprintf("RECV:"); if (recvlen > 0) { Dbhexdump(recvlen, recvbuf, false); @@ -1863,6 +1876,122 @@ void DirectTag15693Command(uint32_t datalen, uint32_t speed, uint32_t recv, uint } } +/* +SLIx functions from official master forks. + +void LockPassSlixIso15693(uint32_t pass_id, uint32_t password) { + + LED_A_ON(); + + uint8_t cmd_inventory[] = {ISO15693_REQ_DATARATE_HIGH | ISO15693_REQ_INVENTORY | ISO15693_REQINV_SLOT1, 0x01, 0x00, 0x00, 0x00 }; + uint8_t cmd_get_rnd[] = {ISO15693_REQ_DATARATE_HIGH, 0xB2, 0x04, 0x00, 0x00 }; + uint8_t cmd_set_pass[] = {ISO15693_REQ_DATARATE_HIGH, 0xB3, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; + //uint8_t cmd_write_pass[] = {ISO15693_REQ_DATARATE_HIGH | ISO15693_REQ_ADDRESS, 0xB4, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; + uint8_t cmd_lock_pass[] = {ISO15693_REQ_DATARATE_HIGH | ISO15693_REQ_ADDRESS, 0xB5, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00 }; + uint16_t crc; + int recvlen = 0; + uint8_t recvbuf[ISO15693_MAX_RESPONSE_LENGTH]; + uint32_t start_time = 0; + bool done = false; + + // setup 'get random number' command + crc = Iso15693Crc(cmd_get_rnd, 3); + cmd_get_rnd[3] = crc & 0xff; + cmd_get_rnd[4] = crc >> 8; + + Dbprintf("LockPass: Press button lock password, long-press to terminate."); + + while (!done) { + + LED_D_ON(); + switch(BUTTON_HELD(1000)) { + case BUTTON_SINGLE_CLICK: + Dbprintf("LockPass: Reset 'DONE'-LED (A)"); + LED_A_OFF(); + LED_B_OFF(); + LED_C_OFF(); + break; + case BUTTON_HOLD: + Dbprintf("LockPass: Terminating"); + done = true; + break; + default: + SpinDelay(50); + continue; + } + + if (done) [ + break; + } + + recvlen = SendDataTag(cmd_get_rnd, sizeof(cmd_get_rnd), true, true, recvbuf, sizeof(recvbuf), start_time); + if (recvlen != 5) { + LED_C_ON(); + } else { + Dbprintf("LockPass: Received random 0x%02X%02X (%d)", recvbuf[1], recvbuf[2], recvlen); + + // setup 'set password' command + cmd_set_pass[4] = ((password>>0) &0xFF) ^ recvbuf[1]; + cmd_set_pass[5] = ((password>>8) &0xFF) ^ recvbuf[2]; + cmd_set_pass[6] = ((password>>16) &0xFF) ^ recvbuf[1]; + cmd_set_pass[7] = ((password>>24) &0xFF) ^ recvbuf[2]; + + crc = Iso15693Crc(cmd_set_pass, 8); + cmd_set_pass[8] = crc & 0xff; + cmd_set_pass[9] = crc >> 8; + + Dbprintf("LockPass: Sending old password to end privacy mode", cmd_set_pass[4], cmd_set_pass[5], cmd_set_pass[6], cmd_set_pass[7]); + recvlen = SendDataTag(cmd_set_pass, sizeof(cmd_set_pass), false, true, recvbuf, sizeof(recvbuf), start_time); + if (recvlen != 3) { + Dbprintf("LockPass: Failed to set password (%d)", recvlen); + LED_B_ON(); + } else { + crc = Iso15693Crc(cmd_inventory, 3); + cmd_inventory[3] = crc & 0xff; + cmd_inventory[4] = crc >> 8; + + Dbprintf("LockPass: Searching for tag..."); + recvlen = SendDataTag(cmd_inventory, sizeof(cmd_inventory), false, true, recvbuf, sizeof(recvbuf), start_time); + if (recvlen != 12) { + Dbprintf("LockPass: Failed to read inventory (%d)", recvlen); + LED_B_ON(); + LED_C_ON(); + } else { + + Dbprintf("LockPass: Answer from %02X%02X%02X%02X%02X%02X%02X%02X", recvbuf[9], recvbuf[8], recvbuf[7], recvbuf[6], recvbuf[5], recvbuf[4], recvbuf[3], recvbuf[2]); + + memcpy(&cmd_lock_pass[3], &recvbuf[2], 8); + + cmd_lock_pass[8+3] = pass_id; + + crc = Iso15693Crc(cmd_lock_pass, 8+4); + cmd_lock_pass[8+4] = crc & 0xff; + cmd_lock_pass[8+5] = crc >> 8; + + Dbprintf("LockPass: locking to password 0x%02X%02X%02X%02X for ID %02X", cmd_set_pass[4], cmd_set_pass[5], cmd_set_pass[6], cmd_set_pass[7], pass_id); + + recvlen = SendDataTag(cmd_lock_pass, sizeof(cmd_lock_pass), false, true, recvbuf, sizeof(recvbuf), start_time); + if (recvlen != 3) { + Dbprintf("LockPass: Failed to lock password (%d)", recvlen); + } else { + Dbprintf("LockPass: Successful (%d)", recvlen); + } + LED_A_ON(); + } + } } + } + + Dbprintf("LockPass: Finishing"); + FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); + + cmd_send(CMD_ACK, recvlen, 0, 0, recvbuf, recvlen); + LED_A_OFF(); + LED_B_OFF(); + LED_C_OFF(); + LED_D_OFF(); +} +*/ + //----------------------------------------------------------------------------- // Work with "magic Chinese" card. // @@ -1880,17 +2009,13 @@ void SetTag15693Uid(uint8_t *uid) { {ISO15_REQ_DATARATE_HIGH, ISO15_CMD_WRITE, 0x39} }; - int recvlen = 0; - uint8_t recvbuf[ISO15693_MAX_RESPONSE_LENGTH]; - uint32_t eof_time; - - // Command 3 : 022138u8u7u6u5 (where uX = uid byte X) + // Command 3 : 02 21 38 u8u7u6u5 (where uX = uid byte X) cmd[2][3] = uid[7]; cmd[2][4] = uid[6]; cmd[2][5] = uid[5]; cmd[2][6] = uid[4]; - // Command 4 : 022139u4u3u2u1 (where uX = uid byte X) + // Command 4 : 02 21 39 u4u3u2u1 (where uX = uid byte X) cmd[3][3] = uid[3]; cmd[3][4] = uid[2]; cmd[3][5] = uid[1]; @@ -1901,25 +2026,15 @@ void SetTag15693Uid(uint8_t *uid) { AddCrc15(cmd[2], 7); AddCrc15(cmd[3], 7); + uint8_t recvbuf[ISO15693_MAX_RESPONSE_LENGTH]; + uint32_t start_time = 0; - + uint32_t eof_time = 0; for (int i = 0; i < 4; i++) { - - recvlen = SendDataTag(cmd[i], sizeof(cmd[i]), i == 0 ? true : false, true, recvbuf, sizeof(recvbuf), start_time, ISO15693_READER_TIMEOUT_WRITE, &eof_time); + SendDataTag(cmd[i], sizeof(cmd[i]), i == 0 ? true : false, true, recvbuf, sizeof(recvbuf), start_time, ISO15693_READER_TIMEOUT_WRITE, &eof_time); start_time = eof_time + DELAY_ISO15693_VICC_TO_VCD_READER; - - if (DBGLEVEL >= DBG_EXTENDED) { - Dbprintf("SEND:"); - Dbhexdump(sizeof(cmd[i]), cmd[i], false); - Dbprintf("RECV:"); - if (recvlen > 0) { - Dbhexdump(recvlen, recvbuf, false); - DbdecodeIso15693Answer(recvlen, recvbuf); - } - } } - - FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); - LEDsoff(); - reply_mix(CMD_ACK, recvlen, 0, 0, recvbuf, recvlen); -} + + reply_ng(CMD_HF_ISO15693_CSETUID, PM3_SUCCESS, NULL, 0); + switch_off(); +} \ No newline at end of file diff --git a/client/src/cmdhf15.c b/client/src/cmdhf15.c index bed6179eb..69251f97f 100644 --- a/client/src/cmdhf15.c +++ b/client/src/cmdhf15.c @@ -25,7 +25,7 @@ #include "cmdhf15.h" #include #include "cmdparser.h" // command_t -#include "commonutil.h" // ARRAYLEN +#include "commonutil.h" // ARRAYLEN #include "comms.h" // clearCommandBuffer #include "cmdtrace.h" #include "iso15693tools.h" @@ -1009,16 +1009,21 @@ static int CmdHF15Sim(const char *Cmd) { char cmdp = tolower(param_getchar(Cmd, 0)); if (strlen(Cmd) < 1 || cmdp == 'h') return usage_15_sim(); - uint8_t uid[8] = {0, 0, 0, 0, 0, 0, 0, 0}; - if (param_gethex(Cmd, 0, uid, 16)) { + struct { + uint8_t uid[8]; + } PACKED payload; + + if (param_gethex(Cmd, 0, payload.uid, 16)) { PrintAndLogEx(WARNING, "UID must include 16 HEX symbols"); return PM3_EINVARG; } - PrintAndLogEx(SUCCESS, "Starting simulating UID " _YELLOW_("%s"), iso15693_sprintUID(NULL, uid)); + PrintAndLogEx(SUCCESS, "Starting simulating UID " _YELLOW_("%s"), iso15693_sprintUID(NULL, payload.uid)); + PacketResponseNG resp; clearCommandBuffer(); - SendCommandMIX(CMD_HF_ISO15693_SIMULATE, 0, 0, 0, uid, 8); + SendCommandNG(CMD_HF_ISO15693_SIMULATE, (uint8_t*)&payload, sizeof(payload)); + WaitForResponse(CMD_HF_ISO15693_SIMULATE, &resp); return PM3_SUCCESS; } @@ -1744,102 +1749,64 @@ static int CmdHF15Restore(const char *Cmd) { * Set UID for magic Chinese card */ static int CmdHF15CSetUID(const char *Cmd) { - uint8_t uid[8] = {0x00}; - uint8_t oldUid[8], newUid[8] = {0x00}; - PacketResponseNG resp; - int reply = 1, fast = 0; - uint8_t data[4][9] = {{0x00}}; char cmdp = tolower(param_getchar(Cmd, 0)); if (strlen(Cmd) < 1 || cmdp == 'h') return usage_15_csetuid(); - if (param_gethex(Cmd, 0, uid, 16)) { + + struct { + uint8_t uid[8]; + } PACKED payload; + + if (param_gethex(Cmd, 0, payload.uid, 16)) { PrintAndLogEx(WARNING, "UID must include 16 HEX symbols"); return PM3_EINVARG; } - if (uid[0] != 0xe0) { + if (payload.uid[0] != 0xE0) { PrintAndLogEx(WARNING, "UID must begin with the byte " _YELLOW_("E0")); return PM3_EINVARG; } - PrintAndLogEx(SUCCESS, "input new UID | " _YELLOW_("%s"), iso15693_sprintUID(NULL, uid)); + PrintAndLogEx(SUCCESS, "reverse input UID " _YELLOW_("%s"), iso15693_sprintUID(NULL, payload.uid)); - if (getUID(false, oldUid) == false) { - PrintAndLogEx(FAILED, "can't get old/current UID."); + PrintAndLogEx(INFO, "getting current card details..."); + uint8_t carduid[8] = {0x00}; + if (getUID(false, carduid) == false) { + PrintAndLogEx(FAILED, "can't read card UID"); return PM3_ESOFT; } - PrintAndLogEx(INFO, "using backdoor magic tag function"); + PrintAndLogEx(INFO, "updating tag uid..."); + + PacketResponseNG resp; + clearCommandBuffer(); + SendCommandNG(CMD_HF_ISO15693_CSETUID, (uint8_t*)&payload, sizeof(payload)); - // Command 1 : 02213E00000000 - data[0][0] = 0x02; - data[0][1] = 0x21; - data[0][2] = 0x3e; - data[0][3] = 0x00; - data[0][4] = 0x00; - data[0][5] = 0x00; - data[0][6] = 0x00; - - // Command 2 : 02213F69960000 - data[1][0] = 0x02; - data[1][1] = 0x21; - data[1][2] = 0x3f; - data[1][3] = 0x69; - data[1][4] = 0x96; - data[1][5] = 0x00; - data[1][6] = 0x00; - - // Command 3 : 022138u8u7u6u5 (where uX = uid byte X) - data[2][0] = 0x02; - data[2][1] = 0x21; - data[2][2] = 0x38; - data[2][3] = uid[7]; - data[2][4] = uid[6]; - data[2][5] = uid[5]; - data[2][6] = uid[4]; - - // Command 4 : 022139u4u3u2u1 (where uX = uid byte X) - data[3][0] = 0x02; - data[3][1] = 0x21; - data[3][2] = 0x39; - data[3][3] = uid[3]; - data[3][4] = uid[2]; - data[3][5] = uid[1]; - data[3][6] = uid[0]; - - for (int i = 0; i < 4; i++) { - AddCrc15(data[i], 7); - - clearCommandBuffer(); - SendCommandMIX(CMD_HF_ISO15693_COMMAND, sizeof(data[i]), fast, reply, data[i], sizeof(data[i])); - - if (reply) { - if (WaitForResponseTimeout(CMD_ACK, &resp, 2000)) { - int len = resp.oldarg[0]; - if (len < 2) { - PrintAndLogEx(WARNING, "command failed"); - } else { - PrintAndLogEx(INFO, "received %i octets", len); - PrintAndLogEx(INFO, "%s", sprint_hex(resp.data.asBytes, len)); - } - } else { - PrintAndLogEx(WARNING, "timeout while waiting for reply"); - } - } + if (WaitForResponseTimeout(CMD_HF_ISO15693_CSETUID, &resp, 2000) == false) { + PrintAndLogEx(WARNING, "timeout while waiting for reply"); } - if (getUID(false, newUid) == false) { - PrintAndLogEx(FAILED, "can't get new UID"); + PrintAndLogEx(INFO, "getting updated card details..."); + + if (getUID(false, carduid) == false) { + PrintAndLogEx(FAILED, "can't read card UID"); return PM3_ESOFT; } - if (memcmp(newUid, uid, 8) != 0) { - PrintAndLogEx(FAILED, "setting UID on tag failed"); + // reverse cardUID to compare + uint8_t revuid[8] = {0}; + uint8_t i = 0; + while (i < sizeof(revuid)) { + revuid[i] = carduid[7-i]; + i++; + } + + if (memcmp(revuid, payload.uid, 8) != 0) { + PrintAndLogEx(FAILED, "setting new UID (" _RED_("failed") ")"); return PM3_ESOFT; } else { - PrintAndLogEx(SUCCESS, "old: %s", iso15693_sprintUID(NULL, oldUid)); - PrintAndLogEx(SUCCESS, "new: " _GREEN_("%s"), iso15693_sprintUID(NULL, newUid)); + PrintAndLogEx(SUCCESS, "setting new UID (" _GREEN_("ok") ")"); return PM3_SUCCESS; } } diff --git a/include/pm3_cmd.h b/include/pm3_cmd.h index 97b914284..a7ba0a4d0 100644 --- a/include/pm3_cmd.h +++ b/include/pm3_cmd.h @@ -512,7 +512,9 @@ typedef struct { #define CMD_HF_ISO15693_SNIFF 0x0312 #define CMD_HF_ISO15693_COMMAND 0x0313 #define CMD_HF_ISO15693_FINDAFI 0x0315 -#define CMD_LF_SNIFF_RAW_ADC 0x0317 +#define CMD_HF_ISO15693_CSETUID 0x0316 + +#define CMD_LF_SNIFF_RAW_ADC 0x0360 // For Hitag2 transponders #define CMD_LF_HITAG_SNIFF 0x0370 From 0f94fa5a5482a4c6426ba8c3c3b66859e6b3be60 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Mon, 17 Aug 2020 09:01:18 +0200 Subject: [PATCH 0228/1047] fix coverity 298566 --- client/src/fileutils.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/src/fileutils.c b/client/src/fileutils.c index c1e41bfdd..2c62238cd 100644 --- a/client/src/fileutils.c +++ b/client/src/fileutils.c @@ -1465,8 +1465,8 @@ static int filelist(const char *path, const char *ext, uint8_t last, bool tentat for (uint16_t i = 0; i < n; i++) { char tmp_fullpath[1024] = {0}; - strcat(tmp_fullpath, path); - strcat(tmp_fullpath, namelist[i]->d_name); + strncat(tmp_fullpath, path, sizeof(tmp_fullpath) - 1); + strncat(tmp_fullpath, namelist[i]->d_name, strlen(tmp_fullpath) - 1); if (is_directory(tmp_fullpath)) { From 730a233149e8fc17c10eaab78531c01dbd4d4a0d Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Mon, 17 Aug 2020 09:12:28 +0200 Subject: [PATCH 0229/1047] clear bigbuff also should reset tracelen --- armsrc/BigBuf.c | 1 + 1 file changed, 1 insertion(+) diff --git a/armsrc/BigBuf.c b/armsrc/BigBuf.c index 18098a27f..f6c111d85 100644 --- a/armsrc/BigBuf.c +++ b/armsrc/BigBuf.c @@ -105,6 +105,7 @@ void BigBuf_Clear(void) { // clear ALL of BigBuf void BigBuf_Clear_ext(bool verbose) { memset(BigBuf, 0, s_bigbuf_size); + clear_trace(); if (verbose) Dbprintf("Buffer cleared (%i bytes)", s_bigbuf_size); } From b941e6aab9ab519df44861906034bf4c9afe73f0 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Mon, 17 Aug 2020 12:35:42 +0200 Subject: [PATCH 0230/1047] fix #874 - 14a, mifare, shows bits if a partial byte --- client/src/cmdtrace.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/client/src/cmdtrace.c b/client/src/cmdtrace.c index d426e9c75..aad064289 100644 --- a/client/src/cmdtrace.c +++ b/client/src/cmdtrace.c @@ -334,6 +334,30 @@ static uint16_t printTraceLine(uint16_t tracepos, uint16_t traceLen, uint8_t *tr // Draw the CRC column const char *crc = (crcStatus == 0 ? "!crc" : (crcStatus == 1 ? " ok " : " ")); + // mark short bytes (less than 8 Bit + Parity) + if (protocol == ISO_14443A || + protocol == PROTO_MIFARE || + protocol == THINFILM) { + + // approximated with 128 * (9 * data_len); + uint16_t bitime = 1056 + 32; + + if (duration < bitime) { + + uint8_t m = 7; + while (m > 0) { + bitime -= 128; + if ( duration > bitime) { + break; + } + m--; + } + line[(data_len-1)/16][((data_len-1)%16) * 4 + 2] = '('; + line[(data_len-1)/16][((data_len-1)%16) * 4 + 3] = m + 0x30; + line[(data_len-1)/16][((data_len-1)%16) * 4 + 4] = ')'; + } + } + uint32_t previous_end_of_transmission_timestamp = 0; if (prev_eot) { From 179ef4cf8482943d9c0e0d079f70ce484cbf83c7 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Mon, 17 Aug 2020 14:05:15 +0200 Subject: [PATCH 0231/1047] f --- client/src/cmdhf15.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/client/src/cmdhf15.c b/client/src/cmdhf15.c index 69251f97f..49ed24c43 100644 --- a/client/src/cmdhf15.c +++ b/client/src/cmdhf15.c @@ -245,9 +245,11 @@ static int usage_15_reader(void) { "Usage: hf 15 reader [h]\n" "Options:\n" "\th this help\n" + "\t1 read once\n" "\n" "Example:\n" - _YELLOW_("\thf 15 reader")); + _YELLOW_("\thf 15 reader\n") + _YELLOW_("\thf 15 reader 1\n")); return PM3_SUCCESS; } static int usage_15_sim(void) { @@ -920,7 +922,7 @@ static int CmdHF15Info(const char *Cmd) { int status = resp.oldarg[0]; if (status < 2) { - PrintAndLogEx(WARNING, "iso15693 card doesn't answer to systeminfo command"); + PrintAndLogEx(WARNING, "iso15693 card doesn't answer to systeminfo command (%d)", status); return PM3_EWRONGANSWER; } From e0c5995ab273a8e62214f2232461218eb2c6f38f Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Mon, 17 Aug 2020 22:04:35 +0200 Subject: [PATCH 0232/1047] fix hf14braw --- client/src/cmdhf14b.c | 50 ++++++++++++++++++++++--------------------- 1 file changed, 26 insertions(+), 24 deletions(-) diff --git a/client/src/cmdhf14b.c b/client/src/cmdhf14b.c index 71c4d0a03..315ef6cd4 100644 --- a/client/src/cmdhf14b.c +++ b/client/src/cmdhf14b.c @@ -31,7 +31,7 @@ static int usage_hf_14b_info(void) { PrintAndLogEx(NORMAL, " h this help"); PrintAndLogEx(NORMAL, " s silently"); PrintAndLogEx(NORMAL, "Example:"); - PrintAndLogEx(NORMAL, " hf 14b info"); + PrintAndLogEx(NORMAL, _YELLOW_(" hf 14b info")); return 0; } static int usage_hf_14b_reader(void) { @@ -40,7 +40,7 @@ static int usage_hf_14b_reader(void) { PrintAndLogEx(NORMAL, " h this help"); PrintAndLogEx(NORMAL, " s silently"); PrintAndLogEx(NORMAL, "Example:"); - PrintAndLogEx(NORMAL, " hf 14b reader"); + PrintAndLogEx(NORMAL, _YELLOW_(" hf 14b reader")); return 0; } static int usage_hf_14b_raw(void) { @@ -54,7 +54,7 @@ static int usage_hf_14b_raw(void) { PrintAndLogEx(NORMAL, " -ss active signal field ON with select for SRx ST Microelectronics tags"); PrintAndLogEx(NORMAL, " -t timeout in ms"); PrintAndLogEx(NORMAL, "Example:"); - PrintAndLogEx(NORMAL, " hf 14b raw -s -c -p 0200a40400"); + PrintAndLogEx(NORMAL, _YELLOW_(" hf 14b raw -s -c -p 0200a40400")); return 0; } static int usage_hf_14b_sniff(void) { @@ -64,7 +64,7 @@ static int usage_hf_14b_sniff(void) { PrintAndLogEx(NORMAL, "Options:"); PrintAndLogEx(NORMAL, " h this help"); PrintAndLogEx(NORMAL, "Example:"); - PrintAndLogEx(NORMAL, " hf 14b sniff"); + PrintAndLogEx(NORMAL, _YELLOW_(" hf 14b sniff")); return 0; } static int usage_hf_14b_sim(void) { @@ -74,8 +74,8 @@ static int usage_hf_14b_sim(void) { PrintAndLogEx(NORMAL, " h this help"); PrintAndLogEx(NORMAL, " u 4byte UID/PUPI"); PrintAndLogEx(NORMAL, "Example:"); - PrintAndLogEx(NORMAL, " hf 14b sim"); - PrintAndLogEx(NORMAL, " hf 14b sim u 11223344"); + PrintAndLogEx(NORMAL, _YELLOW_(" hf 14b sim")); + PrintAndLogEx(NORMAL, _YELLOW_(" hf 14b sim u 11223344")); return 0; } static int usage_hf_14b_read_srx(void) { @@ -84,8 +84,8 @@ static int usage_hf_14b_read_srx(void) { PrintAndLogEx(NORMAL, " h this help"); PrintAndLogEx(NORMAL, " <1|2> 1 = SRIX4K , 2 = SRI512"); PrintAndLogEx(NORMAL, "Example:"); - PrintAndLogEx(NORMAL, " hf 14b sriread 1"); - PrintAndLogEx(NORMAL, " hf 14b sriread 2"); + PrintAndLogEx(NORMAL, _YELLOW_(" hf 14b sriread 1")); + PrintAndLogEx(NORMAL, _YELLOW_(" hf 14b sriread 2")); return 0; } static int usage_hf_14b_write_srx(void) { @@ -96,10 +96,10 @@ static int usage_hf_14b_write_srx(void) { PrintAndLogEx(NORMAL, " BLOCK number depends on tag, special block == FF"); PrintAndLogEx(NORMAL, " hex bytes of data to be written"); PrintAndLogEx(NORMAL, "Example:"); - PrintAndLogEx(NORMAL, " hf 14b sriwrite 1 7F 11223344"); - PrintAndLogEx(NORMAL, " hf 14b sriwrite 1 FF 11223344"); - PrintAndLogEx(NORMAL, " hf 14b sriwrite 2 15 11223344"); - PrintAndLogEx(NORMAL, " hf 14b sriwrite 2 FF 11223344"); + PrintAndLogEx(NORMAL, _YELLOW_(" hf 14b sriwrite 1 7F 11223344")); + PrintAndLogEx(NORMAL, _YELLOW_(" hf 14b sriwrite 1 FF 11223344")); + PrintAndLogEx(NORMAL, _YELLOW_(" hf 14b sriwrite 2 15 11223344")); + PrintAndLogEx(NORMAL, _YELLOW_(" hf 14b sriwrite 2 FF 11223344")); return 0; } static int usage_hf_14b_dump(void) { @@ -112,8 +112,9 @@ static int usage_hf_14b_dump(void) { "\tf filename, if no UID will be used as filename\n" "\n" "Example:\n" - "\thf 14b dump f\n" - "\thf 14b dump 2 f mydump"); + _YELLOW_("\thf 14b dump f\n") + _YELLOW_("\thf 14b dump 2 f mydump") + ); return 0; } @@ -136,14 +137,11 @@ static bool waitCmd14b(bool verbose) { if (WaitForResponseTimeout(CMD_HF_ISO14443B_COMMAND, &resp, TIMEOUT)) { - if ((resp.oldarg[0] & 0xFF) > 0) return false; - uint16_t len = (resp.oldarg[1] & 0xFFFF); - - uint8_t data[PM3_CMD_DATA_SIZE] = {0x00}; - memcpy(data, resp.data.asBytes, len); + uint8_t *data = resp.data.asBytes; if (verbose) { + if (len >= 3) { bool crc = check_crc(CRC_14443_B, data, len); @@ -156,7 +154,6 @@ static bool waitCmd14b(bool verbose) { ); } else if (len == 0) { PrintAndLogEx(SUCCESS, "received SOF only (maybe iCLASS/Picopass)"); - } else { PrintAndLogEx(SUCCESS, "len %u | %s", len, sprint_hex(data, len)); } @@ -291,15 +288,20 @@ static int CmdHF14BCmdRaw(const char *Cmd) { clearCommandBuffer(); SendCommandMIX(CMD_HF_ISO14443B_COMMAND, flags, datalen, time_wait, data, datalen); - if (!reply) return PM3_SUCCESS; + if (reply == false) { + return PM3_SUCCESS; + } bool success = true; // get back iso14b_card_select_t, don't print it. - if (select) + if (select) { success = waitCmd14b(false); + } // get back response from the raw bytes you sent. - if (success && datalen > 0) waitCmd14b(true); + if (success && datalen > 0) { + waitCmd14b(true); + } return PM3_SUCCESS; } @@ -868,7 +870,7 @@ static int CmdHF14BDump(const char *Cmd) { break; } - if (!get_14b_UID(&card)) { + if (get_14b_UID(&card) == false) { PrintAndLogEx(WARNING, "No tag found."); return PM3_SUCCESS; } From 6b8c5e0d24ee0d8e20bf7c4ac62dbd53dc7815fc Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Mon, 17 Aug 2020 22:06:54 +0200 Subject: [PATCH 0233/1047] adapting epa cnonces --- armsrc/epa.c | 118 +++++++++++++++++++++++------------------- client/src/cmdhfepa.c | 37 +++++++++++-- 2 files changed, 97 insertions(+), 58 deletions(-) diff --git a/armsrc/epa.c b/armsrc/epa.c index 5382b02cd..777549728 100644 --- a/armsrc/epa.c +++ b/armsrc/epa.c @@ -117,13 +117,10 @@ static int EPA_APDU(uint8_t *apdu, size_t length, uint8_t *response, uint16_t re switch (iso_type) { case 'a': return iso14_apdu(apdu, (uint16_t) length, false, response, NULL); - break; case 'b': return iso14443b_apdu(apdu, length, response, respmaxlen); - break; default: return 0; - break; } } @@ -149,9 +146,8 @@ void EPA_Finish(void) { // TODO: Support elements with long tags (tag is longer than 1 byte) // TODO: Support proprietary PACE domain parameters //----------------------------------------------------------------------------- -size_t EPA_Parse_CardAccess(uint8_t *data, - size_t length, - pace_version_info_t *pace_info) { +size_t EPA_Parse_CardAccess(uint8_t *data, size_t length, pace_version_info_t *pace_info) { + size_t index = 0; while (index <= length - 2) { @@ -165,19 +161,22 @@ size_t EPA_Parse_CardAccess(uint8_t *data, index += (data[index - 1] & 0x7F); } } + // OID else if (data[index] == 0x06) { // is this a PACE OID? if (data[index + 1] == 0x0A // length matches - && memcmp(data + index + 2, - oid_pace_start, - sizeof(oid_pace_start)) == 0 // content matches + && memcmp(data + index + 2, oid_pace_start, sizeof(oid_pace_start)) == 0 // content matches && pace_info != NULL) { + // first, clear the pace_info struct memset(pace_info, 0, sizeof(pace_version_info_t)); + memcpy(pace_info->oid, data + index + 2, sizeof(pace_info->oid)); + // a PACE OID is followed by the version index += data[index + 1] + 2; + if (data[index] == 02 && data[index + 1] == 01) { pace_info->version = data[index + 2]; index += 3; @@ -189,6 +188,7 @@ size_t EPA_Parse_CardAccess(uint8_t *data, pace_info->parameter_id = data[index + 2]; index += 3; } + } else { // skip this OID index += 2 + data[index + 1]; @@ -230,6 +230,7 @@ int EPA_Read_CardAccess(uint8_t *buffer, size_t max_length) { response_apdu, sizeof(response_apdu) ); + if (rapdu_length < 6 || response_apdu[rapdu_length - 4] != 0x90 || response_apdu[rapdu_length - 3] != 0x00) { @@ -243,6 +244,7 @@ int EPA_Read_CardAccess(uint8_t *buffer, size_t max_length) { response_apdu, sizeof(response_apdu) ); + if (rapdu_length <= 6 || response_apdu[rapdu_length - 4] != 0x90 || response_apdu[rapdu_length - 3] != 0x00) { @@ -252,22 +254,22 @@ int EPA_Read_CardAccess(uint8_t *buffer, size_t max_length) { // copy the content into the buffer // length of data available: apdu_length - 4 (ISO frame) - 2 (SW) - size_t to_copy = rapdu_length - 6; - to_copy = to_copy < max_length ? to_copy : max_length; - memcpy(buffer, response_apdu + 2, to_copy); - return to_copy; + size_t len = rapdu_length - 6; + len = len < max_length ? len : max_length; + memcpy(buffer, response_apdu + 2, len); + return len; } //----------------------------------------------------------------------------- // Abort helper function for EPA_PACE_Collect_Nonce // sets relevant data in ack, sends the response //----------------------------------------------------------------------------- -static void EPA_PACE_Collect_Nonce_Abort(uint8_t step, int func_return) { +static void EPA_PACE_Collect_Nonce_Abort(uint32_t cmd, uint8_t step, int func_return) { // power down the field EPA_Finish(); // send the USB packet - reply_mix(CMD_ACK, step, func_return, 0, 0, 0); + reply_mix(cmd, step, func_return, 0, 0, 0); } //----------------------------------------------------------------------------- @@ -287,28 +289,28 @@ void EPA_PACE_Collect_Nonce(PacketCommandNG *c) { // set up communication int func_return = EPA_Setup(); if (func_return != 0) { - EPA_PACE_Collect_Nonce_Abort(1, func_return); + EPA_PACE_Collect_Nonce_Abort(CMD_HF_EPA_COLLECT_NONCE, 1, func_return); return; } // read the CardAccess file // this array will hold the CardAccess file uint8_t card_access[256] = {0}; - int card_access_length = EPA_Read_CardAccess(card_access, 256); + int cardlen = EPA_Read_CardAccess(card_access, 256); // the response has to be at least this big to hold the OID - if (card_access_length < 18) { - EPA_PACE_Collect_Nonce_Abort(2, card_access_length); + if (cardlen < 18) { + EPA_PACE_Collect_Nonce_Abort(CMD_HF_EPA_COLLECT_NONCE, 2, cardlen); return; } // this will hold the PACE info of the card pace_version_info_t pace_version_info; + // search for the PACE OID - func_return = EPA_Parse_CardAccess(card_access, - card_access_length, - &pace_version_info); + func_return = EPA_Parse_CardAccess(card_access, cardlen, &pace_version_info); + if (func_return != 0 || pace_version_info.version == 0) { - EPA_PACE_Collect_Nonce_Abort(3, func_return); + EPA_PACE_Collect_Nonce_Abort(CMD_HF_EPA_COLLECT_NONCE, 3, func_return); return; } @@ -317,25 +319,29 @@ void EPA_PACE_Collect_Nonce(PacketCommandNG *c) { func_return = EPA_PACE_MSE_Set_AT(pace_version_info, 2); // check if the command succeeded if (func_return != 0) { - EPA_PACE_Collect_Nonce_Abort(4, func_return); + EPA_PACE_Collect_Nonce_Abort(CMD_HF_EPA_COLLECT_NONCE, 4, func_return); return; } // now get the nonce uint8_t nonce[256] = {0}; - uint8_t requested_size = (uint8_t)c->oldarg[0]; - func_return = EPA_PACE_Get_Nonce(requested_size, nonce); + + struct p { + uint32_t m; + } PACKED; + struct p *packet = (struct p*)c->data.asBytes; + + func_return = EPA_PACE_Get_Nonce(packet->m, nonce); // check if the command succeeded if (func_return < 0) { - EPA_PACE_Collect_Nonce_Abort(5, func_return); + EPA_PACE_Collect_Nonce_Abort(CMD_HF_EPA_COLLECT_NONCE, 5, func_return); return; } - // all done, return EPA_Finish(); // save received information - reply_mix(CMD_ACK, 0, func_return, 0, nonce, func_return); + reply_mix(CMD_HF_EPA_COLLECT_NONCE, 0, func_return, 0, nonce, func_return); } //----------------------------------------------------------------------------- @@ -347,23 +353,18 @@ void EPA_PACE_Collect_Nonce(PacketCommandNG *c) { // code on failure. //----------------------------------------------------------------------------- int EPA_PACE_Get_Nonce(uint8_t requested_length, uint8_t *nonce) { + // build the APDU uint8_t apdu[sizeof(apdu_general_authenticate_pace_get_nonce) + 1]; + // copy the constant part - memcpy(apdu, - apdu_general_authenticate_pace_get_nonce, - sizeof(apdu_general_authenticate_pace_get_nonce)); + memcpy(apdu, apdu_general_authenticate_pace_get_nonce, sizeof(apdu_general_authenticate_pace_get_nonce)); + // append Le (requested length + 2 due to tag/length taking 2 bytes) in RAPDU apdu[sizeof(apdu_general_authenticate_pace_get_nonce)] = requested_length + 4; - // send it uint8_t response_apdu[262]; - int send_return = EPA_APDU(apdu, - sizeof(apdu), - response_apdu, - sizeof(response_apdu) - ); - // check if the command succeeded + int send_return = EPA_APDU(apdu, sizeof(apdu), response_apdu, sizeof(response_apdu)); if (send_return < 6 || response_apdu[send_return - 4] != 0x90 || response_apdu[send_return - 3] != 0x00) { @@ -393,26 +394,31 @@ int EPA_PACE_Get_Nonce(uint8_t requested_length, uint8_t *nonce) { int EPA_PACE_MSE_Set_AT(pace_version_info_t pace_version_info, uint8_t password) { // create the MSE: Set AT APDU uint8_t apdu[23]; + // the minimum length (will be increased as more data is added) size_t apdu_length = 20; + // copy the constant part - memcpy(apdu, - apdu_mse_set_at_start, - sizeof(apdu_mse_set_at_start)); + memcpy(apdu, apdu_mse_set_at_start, sizeof(apdu_mse_set_at_start)); + // type: OID apdu[5] = 0x80; + // length of the OID apdu[6] = sizeof(pace_version_info.oid); + // copy the OID - memcpy(apdu + 7, - pace_version_info.oid, - sizeof(pace_version_info.oid)); + memcpy(apdu + 7, pace_version_info.oid, sizeof(pace_version_info.oid)); + // type: password apdu[17] = 0x83; + // length: 1 apdu[18] = 1; + // password apdu[19] = password; + // if standardized domain parameters are used, copy the ID if (pace_version_info.parameter_id != 0) { apdu_length += 3; @@ -423,19 +429,23 @@ int EPA_PACE_MSE_Set_AT(pace_version_info_t pace_version_info, uint8_t password) // copy the parameter ID apdu[22] = pace_version_info.parameter_id; } + // now set Lc to the actual length apdu[4] = apdu_length - 5; + // send it uint8_t response_apdu[6]; - int send_return = EPA_APDU(apdu, - apdu_length, - response_apdu, - sizeof(response_apdu) - ); + int send_return = EPA_APDU(apdu, apdu_length, response_apdu, sizeof(response_apdu)); + + Dbprintf("send ret %d bytes", send_return); + +// Dbhexdump(send_return, response_apdu, false); + // check if the command succeeded - if (send_return != 6 - || response_apdu[send_return - 4] != 0x90 - || response_apdu[send_return - 3] != 0x00) { + if (send_return != 6) +// && response_apdu[send_return - 4] != 0x90 +// || response_apdu[send_return - 3] != 0x00) + { return 1; } return 0; @@ -546,6 +556,6 @@ int EPA_Setup(void) { iso_type = 'b'; return 0; } - Dbprintf("No card found."); + Dbprintf("No card found"); return 1; } diff --git a/client/src/cmdhfepa.c b/client/src/cmdhfepa.c index b7c49bd83..eb4efc9f1 100644 --- a/client/src/cmdhfepa.c +++ b/client/src/cmdhfepa.c @@ -14,6 +14,7 @@ #include #include #include +#include // tolower #include "cmdparser.h" // command_t #include "commonutil.h" // ARRAYLEN @@ -23,8 +24,27 @@ static int CmdHelp(const char *Cmd); +static int usage_epa_collect(void) { + PrintAndLogEx(NORMAL, "Tries to collect nonces when doing part of PACE protocol.\n" + "\n" + "Usage: hf epa cnonces \n" + "Options:\n" + "\t nonce size\n" + "\t number of nonces to collect\n" + "\t delay between\n" + "\n" + "Example:\n" + _YELLOW_("\thf epa cnonces 4 4 1") + ); + return PM3_SUCCESS; +} + // Perform (part of) the PACE protocol static int CmdHFEPACollectPACENonces(const char *Cmd) { + + char cmdp = tolower(param_getchar(Cmd, 0)); + if (cmdp == 'h') return usage_epa_collect(); + // requested nonce size uint32_t m = 0; // requested number of Nonces @@ -40,13 +60,20 @@ static int CmdHFEPACollectPACENonces(const char *Cmd) { PrintAndLogEx(SUCCESS, "Collecting %u %u byte nonces", n, m); PrintAndLogEx(SUCCESS, "Start: %" PRIu64, msclock() / 1000); - // repeat n times + + struct p { + uint32_t m; + } PACKED payload; + payload.m = m; + for (uint32_t i = 0; i < n; i++) { // execute PACE - clearCommandBuffer(); - SendCommandMIX(CMD_HF_EPA_COLLECT_NONCE, (int)m, 0, 0, NULL, 0); + PacketResponseNG resp; - WaitForResponse(CMD_ACK, &resp); + clearCommandBuffer(); + SendCommandNG(CMD_HF_EPA_COLLECT_NONCE, (uint8_t*)&payload, sizeof(payload)); + + WaitForResponse(CMD_HF_EPA_COLLECT_NONCE, &resp); // check if command failed if (resp.oldarg[0] != 0) { @@ -65,6 +92,7 @@ static int CmdHFEPACollectPACENonces(const char *Cmd) { sleep(d); } } + PrintAndLogEx(SUCCESS, "End: %" PRIu64, msclock() / 1000); return PM3_SUCCESS; } @@ -155,6 +183,7 @@ static int CmdHFEPAPACEReplay(const char *Cmd) { clearCommandBuffer(); SendCommandMIX(CMD_HF_EPA_REPLAY, 0, 0, 0, NULL, 0); WaitForResponse(CMD_ACK, &resp); + if (resp.oldarg[0] != 0) { PrintAndLogEx(SUCCESS, "\nPACE replay failed in step %u!", (uint32_t)resp.oldarg[0]); PrintAndLogEx(SUCCESS, "Measured times:"); From 7d6401ce49eaa245bae7c98c572325aa5ec1c8f0 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Mon, 17 Aug 2020 22:07:50 +0200 Subject: [PATCH 0234/1047] adapt start time end time --- armsrc/iso14443b.c | 83 ++++++++++++++++++++++++---------------------- 1 file changed, 43 insertions(+), 40 deletions(-) diff --git a/armsrc/iso14443b.c b/armsrc/iso14443b.c index 2381bc778..f2738f7b4 100644 --- a/armsrc/iso14443b.c +++ b/armsrc/iso14443b.c @@ -1044,7 +1044,7 @@ static void TransmitFor14443b_AsReader(uint32_t *start_time) { } LED_B_OFF(); - *start_time = *start_time + DELAY_ARM_TO_TAG; + *start_time += DELAY_ARM_TO_TAG; } //----------------------------------------------------------------------------- @@ -1128,12 +1128,12 @@ static void CodeIso14443bAsReader(const uint8_t *cmd, int len) { /* * Convenience function to encode, transmit and trace iso 14443b comms */ -static void CodeAndTransmit14443bAsReader(const uint8_t *cmd, int len, uint32_t *start_time) { +static void CodeAndTransmit14443bAsReader(const uint8_t *cmd, int len, uint32_t *start_time, uint32_t *eof_time) { tosend_t *ts = get_tosend(); CodeIso14443bAsReader(cmd, len); TransmitFor14443b_AsReader(start_time); - uint32_t end_time = *start_time + 32 * ((8 * ts->max)); - LogTrace(cmd, len, *start_time, end_time, NULL, true); + *eof_time = *start_time + (32 * (8 * ts->max)); + LogTrace(cmd, len, *start_time, *eof_time, NULL, true); } /* Sends an APDU to the tag @@ -1155,30 +1155,31 @@ uint8_t iso14443b_apdu(uint8_t const *message, size_t message_length, uint8_t *r // send uint32_t start_time = 0; - CodeAndTransmit14443bAsReader(message_frame, message_length + 4, &start_time); + uint32_t eof_time = 0; + CodeAndTransmit14443bAsReader(message_frame, sizeof(message_frame), &start_time, &eof_time); // get response - if (response) { - uint32_t eof_time = start_time + DELAY_ISO14443B_VCD_TO_VICC_READER; - int retlen = Get14443bAnswerFromTag(response, respmaxlen, ISO14443B_READER_TIMEOUT, &eof_time); - FpgaDisableTracing(); - - if (retlen < 3) { - LED_A_OFF(); - return 0; - } - - // VALIDATE CRC - if (!check_crc(CRC_14443_B, response, retlen)) { - if (DBGLEVEL > DBG_DEBUG) DbpString("CRC fail"); - return 0; - } - - return retlen; - } else { + if (response == NULL) { + LED_A_OFF(); return 0; } - LED_A_OFF(); + + eof_time += DELAY_ISO14443B_VCD_TO_VICC_READER; + int retlen = Get14443bAnswerFromTag(response, respmaxlen, ISO14443B_READER_TIMEOUT, &eof_time); + FpgaDisableTracing(); + + if (retlen < 3) { + LED_A_OFF(); + return 0; + } + + // VALIDATE CRC + if (!check_crc(CRC_14443_B, response, retlen)) { + if (DBGLEVEL > DBG_DEBUG) DbpString("CRC fail"); + return 0; + } + + return retlen; } /** @@ -1192,17 +1193,16 @@ static uint8_t iso14443b_select_srx_card(iso14b_card_select_t *card) { uint8_t r_papid[10] = {0x0}; uint32_t start_time = 0; - CodeAndTransmit14443bAsReader(init_srx, sizeof(init_srx), &start_time); + uint32_t eof_time = 0; + CodeAndTransmit14443bAsReader(init_srx, sizeof(init_srx), &start_time, &eof_time); - uint32_t eof_time = start_time + DELAY_ISO14443B_VCD_TO_VICC_READER; + eof_time += DELAY_ISO14443B_VCD_TO_VICC_READER; int retlen = Get14443bAnswerFromTag(r_init, sizeof(r_init), ISO14443B_READER_TIMEOUT, &eof_time); FpgaDisableTracing(); if (retlen <= 0) return 2; -// Dbprintf("Randomly generated Chip ID (+ 2 byte CRC): %02x [%02x %02x]", r_init[0], r_init[1], r_init[2]); - // Randomly generated Chip ID if (card) { card->chipid = Demod.output[0]; @@ -1215,9 +1215,9 @@ static uint8_t iso14443b_select_srx_card(iso14b_card_select_t *card) { AddCrc14B(select_srx, 2); start_time = eof_time + DELAY_ISO14443B_VICC_TO_VCD_READER; - CodeAndTransmit14443bAsReader(select_srx, sizeof(select_srx), &start_time); + CodeAndTransmit14443bAsReader(select_srx, sizeof(select_srx), &start_time, &eof_time); - eof_time = start_time + DELAY_ISO14443B_VCD_TO_VICC_READER; + eof_time += DELAY_ISO14443B_VCD_TO_VICC_READER; retlen = Get14443bAnswerFromTag(r_select, sizeof(r_select), ISO14443B_READER_TIMEOUT, &eof_time); FpgaDisableTracing(); @@ -1241,9 +1241,9 @@ static uint8_t iso14443b_select_srx_card(iso14b_card_select_t *card) { AddCrc14B(select_srx, 1); start_time = eof_time + DELAY_ISO14443B_VICC_TO_VCD_READER; - CodeAndTransmit14443bAsReader(select_srx, 3, &start_time); // Only first three bytes for this one + CodeAndTransmit14443bAsReader(select_srx, 3, &start_time, &eof_time); // Only first three bytes for this one - eof_time = start_time + DELAY_ISO14443B_VCD_TO_VICC_READER; + eof_time += DELAY_ISO14443B_VCD_TO_VICC_READER; retlen = Get14443bAnswerFromTag(r_papid, sizeof(r_papid), ISO14443B_READER_TIMEOUT, &eof_time); FpgaDisableTracing(); @@ -1281,9 +1281,10 @@ int iso14443b_select_card(iso14b_card_select_t *card) { // first, wake up the tag uint32_t start_time = 0; - CodeAndTransmit14443bAsReader(wupb, sizeof(wupb), &start_time); + uint32_t eof_time = 0; + CodeAndTransmit14443bAsReader(wupb, sizeof(wupb), &start_time, &eof_time); - uint32_t eof_time = start_time + DELAY_ISO14443B_VCD_TO_VICC_READER;; + eof_time += DELAY_ISO14443B_VCD_TO_VICC_READER;; int retlen = Get14443bAnswerFromTag(r_pupid, sizeof(r_pupid), ISO14443B_READER_TIMEOUT, &eof_time); FpgaDisableTracing(); @@ -1310,9 +1311,9 @@ int iso14443b_select_card(iso14b_card_select_t *card) { attrib[7] = r_pupid[10] & 0x0F; AddCrc14B(attrib, 9); start_time = eof_time + DELAY_ISO14443B_VICC_TO_VCD_READER; - CodeAndTransmit14443bAsReader(attrib, sizeof(attrib), &start_time); + CodeAndTransmit14443bAsReader(attrib, sizeof(attrib), &start_time, &eof_time); - eof_time = start_time + DELAY_ISO14443B_VCD_TO_VICC_READER; + eof_time += DELAY_ISO14443B_VCD_TO_VICC_READER; retlen = Get14443bAnswerFromTag(r_attrib, sizeof(r_attrib), ISO14443B_READER_TIMEOUT, &eof_time); FpgaDisableTracing(); @@ -1399,9 +1400,10 @@ static bool ReadSTBlock(uint8_t blocknr, uint8_t *block) { uint8_t r_block[6] = {0}; uint32_t start_time = 0; - CodeAndTransmit14443bAsReader(cmd, sizeof(cmd), &start_time); + uint32_t eof_time = 0; + CodeAndTransmit14443bAsReader(cmd, sizeof(cmd), &start_time, &eof_time); - uint32_t eof_time = start_time + DELAY_ISO14443B_VCD_TO_VICC_READER; + eof_time += DELAY_ISO14443B_VCD_TO_VICC_READER; int retlen = Get14443bAnswerFromTag(r_block, sizeof(r_block), ISO14443B_READER_TIMEOUT, &eof_time); FpgaDisableTracing(); @@ -1730,9 +1732,10 @@ void SendRawCommand14443B_Ex(PacketCommandNG *c) { uint8_t buf[100] = {0}; uint32_t start_time = 0; - CodeAndTransmit14443bAsReader(cmd, len, &start_time); // raw + uint32_t eof_time = 0; + CodeAndTransmit14443bAsReader(cmd, len, &start_time, &eof_time); - uint32_t eof_time = start_time + DELAY_ISO14443B_VCD_TO_VICC_READER; + eof_time += DELAY_ISO14443B_VCD_TO_VICC_READER; status = Get14443bAnswerFromTag(buf, sizeof(buf), 5 * ISO14443B_READER_TIMEOUT, &eof_time); // raw FpgaDisableTracing(); From 7af9fd3fb5a120aab3c04d765c88606fabe50b1a Mon Sep 17 00:00:00 2001 From: Iceman Date: Mon, 17 Aug 2020 23:42:01 +0200 Subject: [PATCH 0235/1047] Update appveyor.yml --- appveyor.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/appveyor.yml b/appveyor.yml index 240724d80..6e268ccb7 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -55,6 +55,11 @@ clone_script: Write-Host "[ OK ]" -ForegroundColor Green + Write-Host "Removing ps startup_check.sh ..." -NoNewLine + + Remove-Item -Recurse -Force -Path c:\ProxSpace\msys2\ps\startup_checks.sh + + Write-Host "[ OK ]" -ForegroundColor Green Write-Host "Cloning repository <$env:appveyor_repo_name> to $env:appveyor_build_folder ..." -NoNewLine From 1689a7310199b792b89f32eb1c480bce635e534a Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Tue, 18 Aug 2020 11:11:43 +0200 Subject: [PATCH 0236/1047] hf iclass chk , textual --- client/src/cmdhficlass.c | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/client/src/cmdhficlass.c b/client/src/cmdhficlass.c index 69d89373c..526b14765 100644 --- a/client/src/cmdhficlass.c +++ b/client/src/cmdhficlass.c @@ -2997,11 +2997,11 @@ static int CmdHFiClassCheckKeys(const char *Cmd) { PrintAndLogEx(SUCCESS, " CSN: " _GREEN_("%s"), sprint_hex(CSN, sizeof(CSN))); PrintAndLogEx(SUCCESS, " CCNR: " _GREEN_("%s"), sprint_hex(CCNR, sizeof(CCNR))); - PrintAndLogEx(SUCCESS, "Generating diversified keys..."); + PrintAndLogEx(SUCCESS, "Generating diversified keys %s", (use_elite || use_raw) ? NOLF : ""); if (use_elite) - PrintAndLogEx(SUCCESS, "Using " _YELLOW_("elite algo")); + PrintAndLogEx(NORMAL, "using " _YELLOW_("elite algo")); if (use_raw) - PrintAndLogEx(SUCCESS, "Using " _YELLOW_("raw mode")); + PrintAndLogEx(NORMAL, "using " _YELLOW_("raw mode")); GenerateMacFrom(CSN, CCNR, use_raw, use_elite, keyBlock, keycount, pre); @@ -3024,7 +3024,8 @@ static int CmdHFiClassCheckKeys(const char *Cmd) { uint8_t timeout = 0; if (kbd_enter_pressed()) { - PrintAndLogEx(WARNING, "Aborted via keyboard!\n"); + PrintAndLogEx(NORMAL, ""); + PrintAndLogEx(WARNING, "Aborted via keyboard!"); goto out; } @@ -3069,13 +3070,14 @@ static int CmdHFiClassCheckKeys(const char *Cmd) { switch (isOK) { case 1: { found_key = true; + PrintAndLogEx(NORMAL, ""); PrintAndLogEx(SUCCESS, "Found valid key " _GREEN_("%s") , sprint_hex(keyBlock + (key_offset + found_offset) * 8, 8) ); break; } case 0: { - PrintAndLogEx(INFO, "Chunk [%d/%d] : %.1fs - no luck" + PrintAndLogEx(INPLACE, "Chunk [%d/%d] : %.1fs - no luck" , key_offset , keycount , (float)(t2 / 1000.0) @@ -3084,8 +3086,9 @@ static int CmdHFiClassCheckKeys(const char *Cmd) { } case 99: { } - default: + default: { break; + } } // both keys found. @@ -3098,7 +3101,8 @@ static int CmdHFiClassCheckKeys(const char *Cmd) { out: t1 = msclock() - t1; - PrintAndLogEx(SUCCESS, "Time in iclass chk: " _YELLOW_("%.0f") " seconds\n", (float)t1 / 1000.0); + PrintAndLogEx(NORMAL, ""); + PrintAndLogEx(SUCCESS, "Time in iclass chk: " _YELLOW_("%.0f") " seconds", (float)t1 / 1000.0); DropField(); if (found_key) { From 073e79553e193811d32c88c039d2307fe7b6524b Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 19 Aug 2020 15:24:32 +0200 Subject: [PATCH 0237/1047] added the securememory simulator_recovery code by @Roel et al --- tools/cryptorf/Makefile | 30 + tools/cryptorf/cm.c | 89 +++ tools/cryptorf/crf.c | 294 +++++++++ tools/cryptorf/cryptolib.c | 359 +++++++++++ tools/cryptorf/cryptolib.h | 56 ++ tools/cryptorf/defines.h | 36 ++ tools/cryptorf/laundry.sh | 2 + tools/cryptorf/sm.c | 77 +++ tools/cryptorf/sma.cpp | 918 +++++++++++++++++++++++++++ tools/cryptorf/sma_multi.cpp | 1126 ++++++++++++++++++++++++++++++++++ tools/cryptorf/test.sh | 9 + tools/cryptorf/util.c | 23 + tools/cryptorf/util.h | 43 ++ 13 files changed, 3062 insertions(+) create mode 100644 tools/cryptorf/Makefile create mode 100644 tools/cryptorf/cm.c create mode 100644 tools/cryptorf/crf.c create mode 100644 tools/cryptorf/cryptolib.c create mode 100644 tools/cryptorf/cryptolib.h create mode 100644 tools/cryptorf/defines.h create mode 100755 tools/cryptorf/laundry.sh create mode 100644 tools/cryptorf/sm.c create mode 100644 tools/cryptorf/sma.cpp create mode 100644 tools/cryptorf/sma_multi.cpp create mode 100755 tools/cryptorf/test.sh create mode 100644 tools/cryptorf/util.c create mode 100644 tools/cryptorf/util.h diff --git a/tools/cryptorf/Makefile b/tools/cryptorf/Makefile new file mode 100644 index 000000000..3dd27d3ab --- /dev/null +++ b/tools/cryptorf/Makefile @@ -0,0 +1,30 @@ +CC = gcc +CXX = g++ +LD = gcc +LXX = g++ +CFLAGS = -W -Wall -O4 +CXXFLAGS = -W -Wall -O4 -std=c++11 +LDFLAGS = +LXXFLAGS = -lpthread + +OBJS = cryptolib.o util.o +HEADERS = cryptolib.h util.h +SRC = cryptolib.c util.c +EXES = cm sm sma sma_multi crf + +all: $(OBJS) $(EXES) + +%.o : %.c + $(CC) $(CFLAGS) -c -o $@ $< + +% : %.c $(OBJS) + $(LD) $(CFLAGS) $(LDFLAGS) -o $@ $< $(OBJS) + +% : %.cpp $(SRC) + $(LXX) $(CXXFLAGS) -o $@ $< $(SRC) $(LXXFLAGS) + +crf: crf.c $(OBJS) + $(LD) $(CFLAGS) $(LDFLAGS) -o crf $< $(OBJS) -lnfc + +clean: + rm -f $(OBJS) $(EXES) crf diff --git a/tools/cryptorf/cm.c b/tools/cryptorf/cm.c new file mode 100644 index 000000000..14e32844a --- /dev/null +++ b/tools/cryptorf/cm.c @@ -0,0 +1,89 @@ +/* + * + * CryptoMemory simulation + * + * Copyright (C) 2010, Flavio D. Garcia, Peter van Rossum, Roel Verdult + * and Ronny Wichers Schreur. Radboud University Nijmegen + * + * 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 3 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, see . + * + */ + +#include "defines.h" +#include "cryptolib.h" +#include "util.h" + +int main(int argc, const char* argv[]) +{ + // Cryptomemory state + crypto_state_t s; + + // Main authentication values + byte_t Q[8]; // Reader key-auth random + byte_t Gc[8]; // Secret seed + byte_t Ci[8]; // Card random (last state) + byte_t Ch[8]; // Reader answer (challenge) + byte_t Ci_1[8]; // Card answer + byte_t Ci_2[8]; // Session key + + // Session authentication values + byte_t Qs[8]; // Reader session-auth random + byte_t Chs[8]; // Reader session-answer (challenge) + byte_t Ci_1s[8]; // Card answer for session + byte_t Ci_2s[8]; // Is this used? + + // Various argument options + ui64 nGc; // Card secret + ui64 nCi; // Card random + ui64 nQ; // Reader main-random + ui64 nQs; // Reader session-random + + // Show header and help syntax + printf("CryptoMemory simulator - (c) Radboud University Nijmegen\n"); + if (argc < 5) + { + printf("\nsyntax: cm \n"); + return 1; + } + + // Parse arguments + sscanf(argv[1],"%016llx",&nGc); num_to_bytes(nGc,8,Gc); + sscanf(argv[2],"%016llx",&nCi); num_to_bytes(nCi,8,Ci); + sscanf(argv[3],"%016llx",&nQ); num_to_bytes(nQ,8,Q); + sscanf(argv[4],"%016llx",&nQs); num_to_bytes(nQs,8,Qs); + + // Calculate authentication + cm_auth(Gc,Ci,Q,Ch,Ci_1,Ci_2,&s); + + printf("\nAuthenticate\n"); + printf(" Gc: "); print_bytes(Gc,8); + printf(" Ci: "); print_bytes(Ci,8); + printf(" Q: "); print_bytes(Q,8); + printf(" Ch: "); print_bytes(Ch,8); + printf(" Ci+1: "); print_bytes(Ci_1,8); + printf(" Ci+2: "); print_bytes(Ci_2,8); + + cm_auth(Ci_2,Ci_1,Qs,Chs,Ci_1s,Ci_2s,&s); + + printf("\nVerify Crypto (Session Key)\n"); + printf(" Gc(s): "); print_bytes(Ci_2,8); + printf(" Ci(s): "); print_bytes(Ci_1,8); + printf(" Q(s): "); print_bytes(Qs,8); + printf(" Ch(s): "); print_bytes(Chs,8); + printf("Ci+1(s): "); print_bytes(Ci_1s,8); + printf("Ci+2(s): "); print_bytes(Ci_2s,8); + + printf("\n"); + return 0; +} diff --git a/tools/cryptorf/crf.c b/tools/cryptorf/crf.c new file mode 100644 index 000000000..044acce05 --- /dev/null +++ b/tools/cryptorf/crf.c @@ -0,0 +1,294 @@ +/* + * + * CryptoRF simulation + * + * Copyright (C) 2010, Flavio D. Garcia, Peter van Rossum, Roel Verdult + * and Ronny Wichers Schreur. Radboud University Nijmegen + * + * 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 3 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, see . + * + */ + +#include "defines.h" +#include +#include +#include +#include "cryptolib.h" +#include "util.h" + +// ~dirty globals for lazy use of libnfc +static dev_info* pdi; // NFC device info +static tag_info ti; // Tag info (card serial, etc.) +byte_t abtRx[MAX_FRAME_LEN]; // Communication buffer +size_t szRxLen; // Length of communication buffer + +void print_decryption(const byte_t* ct, const byte_t* pt, size_t len) { + size_t pos,count; + + for (count = 0; count < len; count += 8) { + printf(" "); + for (pos = 0; pos < 8; pos++){ + if ((count+pos) "); + for (pos = 0; pos < 8; pos++) { + if ((count + pos) < len) { + printf("%02x ", pt[count + pos]); + } else { + printf(" "); + } + } + printf("\n"); + } +} + +bool transmit_bytes(const byte_t* pbtTx, const size_t szTxLen) { + printf("R: "); + print_bytes(pbtTx, szTxLen); + + // Transmit the command bytes + if (!nfc_initiator_transceive_bytes(pdi, pbtTx, szTxLen, abtRx, (uint32_t*)&szRxLen)) { + printf("\nERROR: Communication failed\n\n"); + nfc_disconnect(pdi); + exit(1); + } + + printf("T: "); + print_bytes(abtRx, szRxLen); + + // Succesful transfer + return true; +} + + +#define PWD_NOT_USED (uint32_t)(~0) + +int main(int argc, char* argv[]) { + // Various parameters + crypto_state_t s; // Cryptomemory state + size_t pos; // Position counter + + // Main authentication values + byte_t Q[8]; // Reader key-auth random + byte_t Gc[8]; // Secret seed + byte_t Ci[8]; // Card random (last state) + byte_t Ch[8]; // Reader answer (challenge) + byte_t Ci_1[8]; // Card answer + byte_t Ci_2[8]; // Session key + + // Session authentication values + byte_t Qs[8]; // Reader session-auth random + byte_t Chs[8]; // Reader session-answer (challenge) + byte_t Ci_1s[8]; // Card answer for session + byte_t Ci_2s[8]; // Is this used? + + // Various argument options + ui64 Gc0; // First card secret + uint32_t zone; // Number of userzone + uint32_t offset; // Offset address + uint32_t len; // Length + uint32_t pwd; // Optional read password + + // Application buffers + byte_t pt[MAX_FRAME_LEN]; // Plaintext + byte_t ct[MAX_FRAME_LEN]; // Ciphertext + byte_t mac[2]; + + byte_t crf_read_ci[2 + 2] = { 0x16,0x00,0x50,0x07 }; // Read first card random Ci0 (offset 50, len 8) + byte_t crf_check_pwd[2 + 3] = { 0x1c,0x00 }; // Provide (optional) read password + byte_t crf_auth[2 + 16] = { 0x18,0x00 }; // Authenticate using card secret Gc0 and Ci + byte_t crf_verify[2 + 16] = { 0x18,0x10 }; // Authenticate with session key + byte_t crf_set_zone[1 + 1] = { 0x11 }; // Set the userzone to read from + byte_t crf_read_zone[2 + 2] = { 0x12,0x00 }; // Read n-bytes from offset + byte_t crf_read_mac[ 4] = { 0x16,0x02,0xff,0x01 }; // Read n-bytes from offset + + // Show header and help syntax + printf("CryptoRF example - (c) Radboud University Nijmegen\n\n"); + if (argc < 5) { + printf("syntax: crf [pwd]\n\n"); + return 1; + } + + // Parse command-line arguments + sscanf(argv[1],"%016llx", &Gc0); + sscanf(argv[2],"%02x", &zone); + sscanf(argv[3],"%02x", &offset); + sscanf(argv[4],"%02x", &len); + + // Construct CryptoRF frames + num_to_bytes(Gc0, 8, Gc); + crf_set_zone[1] = zone; + crf_read_zone[2] = offset; + crf_read_zone[3] = (len == 0) ? 0 : (len - 1); + + // Check if the optional password argument was used + if (argc == 6) { + sscanf(argv[5], "%06x", &pwd); + num_to_bytes(pwd, 3, crf_check_pwd + 2); + } else { + pwd = PWD_NOT_USED; + } + + // Initialize randoms + srand((uint32_t)time(0)); + + for (pos = 0; pos < 8; pos++) { + Q[pos] = rand(); + Qs[pos] = rand(); + } + + // Try to open the NFC device + pdi = nfc_connect(NULL); + if (pdi == INVALID_DEVICE_INFO) { + printf("ERROR: Unable to connect to NFC device.\n"); + return 1; + } + nfc_initiator_init(pdi); + + // Drop the field for a while + nfc_configure(pdi, DCO_ACTIVATE_FIELD, true); + + // Let the reader only try once to find a tag + nfc_configure(pdi, DCO_INFINITE_SELECT, false); + + // Configure the CRC and Parity settings + nfc_configure(pdi, DCO_HANDLE_CRC, true); + nfc_configure(pdi, DCO_HANDLE_PARITY, true); + + printf("Connected to NFC device: %s\n\n", pdi->acName); + + // Poll for a ISO14443-B cryptomemory tag + if (!nfc_initiator_select_tag(pdi, IM_ISO14443B_106, (byte_t*)"\x00", 1, &ti)) { + printf("ERROR: Can not find a Atmel CryptoRF card.\n\n"); + nfc_disconnect(pdi); + return 1; + } + + printf("The following (NFC) ISO14443-B tag was found:\n\n"); + printf(" ATQB: "); print_bytes(ti.tib.abtAtqb, 12); + printf(" ID: "); print_bytes(ti.tib.abtId, 4); + printf(" CID: %02x\n", ti.tib.btCid); + printf(" PARAMS: %02x %02x %02x %02x\n\n" + ,ti.tib.btParam1 + ,ti.tib.btParam2 + ,ti.tib.btParam3 + ,ti.tib.btParam4 + ); + + + printf("Changing active userzone\n"); + transmit_bytes(crf_set_zone, sizeof(crf_set_zone)); + printf("\n"); + + if (pwd != PWD_NOT_USED) { + printf("Suppling password for communication\n"); + transmit_bytes(crf_check_pwd, sizeof(crf_check_pwd)); + printf("\n"); + } + + printf("Reading first Ci(0) from the system zone (offset = 0x50)\n"); + transmit_bytes(crf_read_ci, sizeof(crf_read_ci)); + printf("\n"); + + // Save the retrieved value of Ci + memcpy(Ci, abtRx + 2, 8); + + // Calculate key-authentication + printf("* Computing authentication values with card secret\n\n"); + cm_auth(Gc, Ci, Q, Ch, Ci_1, Ci_2, &s); + memcpy(crf_auth + 2, Q, 8); + memcpy(crf_auth + 10, Ch, 8); + + printf("Authenticate using Gc, Ci and random Q\n"); + transmit_bytes(crf_auth, sizeof(crf_auth)); + printf("\n"); + + printf("Reading new Ci value from the system zone (tag-answer)\n"); + transmit_bytes(crf_read_ci, sizeof(crf_read_ci)); + printf("\n"); + + if (memcmp(Ci_1, abtRx + 2, 8) != 0) { + printf("ERROR: Authentication failed\n\n"); + nfc_disconnect(pdi); + return 1; + } + + // Calculate session-authentication + printf("* Computing authentication values with session key\n\n"); + cm_auth(Ci_2, Ci_1, Qs, Chs, Ci_1s, Ci_2s, &s); + memcpy(crf_verify + 2, Qs, 8); + memcpy(crf_verify + 10, Chs, 8); + + printf("VerifyCrypto using session key and initialize encryption\n"); + transmit_bytes(crf_verify, sizeof(crf_verify)); + printf("\n"); + + printf("Reading new Ci value from the system zone (tag-answer)\n"); + transmit_bytes(crf_read_ci, sizeof(crf_read_ci)); + printf("\n"); + + if (memcmp(Ci_1s, abtRx + 2, 8) != 0) { + printf("ERROR: Session authentication failed\n\n"); + nfc_disconnect(pdi); + return 1; + } + + printf("* Updating the cipher by grinding Ci (offset,len,data)\n\n"); + cm_grind_read_system_zone(0x50, 8, Ci_1s, &s); + + printf("Read the data from the offset using the encrypted channel\n"); + transmit_bytes(crf_read_zone, sizeof(crf_read_zone)); + printf("\n"); + + if (abtRx[1] != 0) { + printf("ERROR: Reading failed, maybe you need to supply a password\n\n"); + nfc_disconnect(pdi); + return 1; + } + memcpy(ct, abtRx + 2, len); + + printf("* Decrypting..."); + cm_decrypt(offset, len, ct, pt, &s); + printf("done\n\n"); + print_decryption(ct, pt, len); + printf("\n"); + + if (pwd != PWD_NOT_USED) { + num_to_bytes(pwd, 3, pt); + cm_password(pt, crf_check_pwd + 2, &s); + printf("Testing the feature to supply an encrypted password\n"); + transmit_bytes(crf_check_pwd, sizeof(crf_check_pwd)); + printf("\n"); + } + + // Calculate and check mac + cm_mac(mac, &s); + printf("Verify checksum for the transaction: %02x %02x\n", mac[0], mac[1]); + transmit_bytes(crf_read_mac, sizeof(crf_read_mac)); + if (memcmp(mac, abtRx + 2, 2) != 0) { + printf("ERROR: MAC checksum failed\n\n"); + nfc_disconnect(pdi); + return 1; + } + + printf("Communication succesful!\n\n"); + nfc_disconnect(pdi); + return 0; +} + diff --git a/tools/cryptorf/cryptolib.c b/tools/cryptorf/cryptolib.c new file mode 100644 index 000000000..7390f0438 --- /dev/null +++ b/tools/cryptorf/cryptolib.c @@ -0,0 +1,359 @@ +/* + * + * SecureMemory, CryptoMemory and CryptoRF library + * + * Copyright (C) 2010, Flavio D. Garcia, Peter van Rossum, Roel Verdult + * and Ronny Wichers Schreur. Radboud University Nijmegen + * + * 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 3 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, see . + * + */ + +#include "cryptolib.h" + +typedef enum { + CA_ENCRYPT = 0x01, + CA_DECRYPT = 0x02 +} CryptoAction; + +int counter=0; + +byte_t nibbles_to_byte(nibble b0, nibble b1) +{ + // Combine both nibbles + return ((b0<<4)|b1); +} + +byte_t funny_mod(byte_t a, byte_t m) +{ + // Just return the input when this is less or equal than the modular value + if (a> (n_bits - 1))) & mask; +} + +void reconstruct_nibbles(crypto_state s) +{ + byte_t b1,b5,b8,b15,b18; + byte_t b0,b4,b7,b14,b17; + + // Extract the bytes that generated the "previous" nibble + b1 = (byte_t)((s->l >> 25) & 0x1f); + b5 = (byte_t)((s->l >> 5) & 0x1f); + b8 = (byte_t)((s->m >> 35) & 0x1f); + b15 = (byte_t)((s->r >> 15) & 0x1f); + b18 = (byte_t)(s->r & 0x1f); + + // Reconstruct the b0 nibble + s->b0 = ((b1 ^ b5) & 0x0f) & ~(b8); + s->b0 |= ((b15 ^ b18) & 0x0f) & b8; + + // Extract the bytes for the current nibble + b0 = (byte_t)((s->l >> 30) & 0x1f); + b4 = (byte_t)((s->l >> 10) & 0x1f); + b7 = (byte_t)((s->m >> 42) & 0x1f); + b14 = (byte_t)((s->r >> 20) & 0x1f); + b17 = (byte_t)((s->r >> 5) & 0x1f); + + // Construct the values for b1 generation + s->b1l = ((b0 ^ b4) & 0x0f); + s->b1r = ((b14 ^ b17) & 0x0f); + s->b1s = b7; + + // Reconstruct the b1 nibble + s->b1 = s->b1l & ~(s->b1s); + s->b1 |= s->b1r & s->b1s; +} + +void next_left(byte_t in, crypto_state s) +{ + byte_t b3, b6, bx; + + // Update the left cipher state with the input byte + s->l ^= ((in & 0x1f) << 20); + + // Extract the two (5 bits) values used for modular addtion + b3 = (byte_t)((s->l >> 15) & 0x1f); + b6 = (byte_t)(s->l & 0x1f); + + // Compute the modular addition + bx = funny_mod(b3 + bit_rotate_left(b6,5),0x1f); + + // Rotate the left cipher state 5 bits + s->l = ((s->l >> 5)| ((uint64_t)bx << 30)); + + // Save the 4 left output bits used for b1 + s->b1l = ((bx^b3) & 0x0f); +} + +void next_right(byte_t in, crypto_state s) +{ + byte_t b16, b18, bx; + + // Update the right cipher state with the input byte + s->r ^= ((in & 0xf8) << 12); + + // Extract the two (5 bits) values used for modular addtion + b16 = (byte_t)((s->r >> 10) & 0x1f); + b18 = (byte_t)(s->r & 0x1f); + + // Compute the modular addition + bx = funny_mod(b18 + b16,0x1f); + + // Rotate the right cipher state 5 bits + s->r = ((s->r >> 5) | ((uint64_t)bx << 20)); + + // Save the 4 right output bits used for b1 + s->b1r = ((bx^b16) & 0x0f); +} + +void next_middle(byte_t in, crypto_state s) +{ + byte_t b12, b13, bx; + + // Update the middle cipher state with the input byte + s->m ^= (((((uint64_t)in << 3) & 0x7f) | (in >> 5)) << 14); + + // Extract the two (7 bits) values used for modular addtion + b12 = (byte_t)((s->m >> 7) & 0x7f); + b13 = (byte_t)(s->m & 0x7f); + + // Compute the modular addition + bx = (funny_mod(b12 + bit_rotate_left(b13,7),0x7f)); + + // Rotate the middle cipher state 7 bits + s->m = ((s->m >> 7)| ((uint64_t)bx << 42)); + + // Save the 4 middle selector bits used for b1 + s->b1s = bx & 0x0f; +} + +void next(const bool feedback, byte_t in, crypto_state s) +{ + // Initialize the (optional) input parameter + byte_t a = in; + + // Only Cryptomemory uses feedback + if (feedback) + { + // Construct the cipher update 'a' from (input ^ feedback) + a = in ^ nibbles_to_byte(s->b0,s->b1); + } + + // Shift the cipher state + next_left(a,s); + next_middle(a,s); + next_right(a,s); + + // For active states we can use the available (previous) 'b1' nibble, + // otherwise use reconstruct_nibbles() to generate them + // reconstruct_nibbles(s) + + // The nible from b1 shifts to b0 + s->b0 = s->b1; + + // Construct the new value of nible b1 + s->b1 = s->b1l & ~(s->b1s); + s->b1 |= s->b1r & s->b1s; +} + +void next_n(const bool feedback, size_t n, byte_t in, crypto_state s) +{ + // While n-rounds left, shift the cipher + while (n--) next(feedback,in, s); +} + +void initialize(const bool feedback, const byte_t* Gc, const byte_t* Ci, const byte_t* Q, const size_t n, crypto_state s) +{ + size_t pos; + + // Reset the cipher state + memset(s,0x00,sizeof(crypto_state_t)); + + // Load in the ci (tag-nonce), together with the first half of Q (reader-nonce) + for (pos = 0; pos < 4; pos++) + { + next_n(feedback,n,Ci[2*pos ],s); + next_n(feedback,n,Ci[2*pos+1],s); + next(feedback,Q[pos],s); + } + + // Load in the diversified key (Gc), together with the second half of Q (reader-nonce) + for (pos = 0; pos < 4; pos++) + { + next_n(feedback,n,Gc[2*pos ],s); + next_n(feedback,n,Gc[2*pos+1],s); + next(feedback,Q[pos+4],s); + } +} + +byte_t cm_byte(crypto_state s) +{ + // Construct keystream byte by combining both nibbles + return nibbles_to_byte(s->b0,s->b1); +} + +byte_t sm_byte(crypto_state s) { + byte_t ks; + + // Construct keystream byte by combining 2 parts from 4 nibbles + next_n(false,2,0,s); + ks = s->b1 << 4; + next_n(false,2,0,s); + ks |= s->b1; + + return ks; +} + +void print_crypto_state(const char* text,crypto_state s) { + int pos; + + printf("%s",text); + for(pos = 6; pos >= 0; pos--) + printf(" %02x", (byte_t)(s->l >> (pos * 5)) & 0x1f); + + printf(" |"); + for(pos = 6; pos >= 0; pos--) + printf(" %02x", (byte_t)(s->m >> (pos * 7)) & 0x7f); + + printf(" |"); + for(pos = 4; pos >= 0; pos--) + printf(" %02x", (byte_t)(s->r >> (pos * 5)) & 0x1f); + + printf(" | %02x",cm_byte(s)); + printf("\n"); +} + +void sm_auth(const byte_t* Gc, const byte_t* Ci, const byte_t* Q, byte_t* Ch, byte_t* Ci_1, crypto_state s) { + size_t pos; + + initialize(false,Gc,Ci,Q,1,s); + + // Generate challange answer for Tag and Reader + for (pos=0; pos<8; pos++) { + Ci_1[pos] = sm_byte(s); + Ch[pos] = sm_byte(s); + } +} + +void cm_auth(const byte_t* Gc, const byte_t* Ci, const byte_t* Q, byte_t* Ch, byte_t* Ci_1, byte_t* Ci_2, crypto_state s) { + size_t pos; + + initialize(true,Gc,Ci,Q,3,s); + + // Construct the reader-answer (challange) + next_n(true,6,0,s); + Ch[0] = cm_byte(s); + for (pos = 1; pos < 8; pos++) + { + next_n(true,7,0,s); + Ch [pos] = cm_byte(s); + } + + // Construct the tag-answer (Ci+1 = ff .. .. .. .. .. .. ..) + Ci_1[0] = 0xff; + for (pos = 1; pos < 8; pos++) + { + next_n(true,2,0,s); + Ci_1[pos] = cm_byte(s); + } + + // Construct the session key (Ci+2) + for (pos = 0; pos < 8; pos++) + { + next_n(true,2,0,s); + Ci_2[pos] = cm_byte(s); + } + + // Prepare the cipher for encryption by shifting 3 more times + next_n(true,3,0,s); +} + +void cm_crypt(const CryptoAction ca, const byte_t offset, const byte_t len, const byte_t* in, byte_t* out, crypto_state s) { + size_t pos; + byte_t bt; + + next_n(true,5,0,s); + next(true,offset,s); + next_n(true,5,0,s); + next(true,len,s); + for (pos=0; pos. + * + */ + +#ifndef _CRYPTOLIB_H_ +#define _CRYPTOLIB_H_ + +#include "defines.h" +#include +#include +#include + +// A nibble is actually only 4 bits, but there is no such type ;) +typedef byte_t nibble; + +typedef struct { + uint64_t l; + uint64_t m; + uint64_t r; + nibble b0; + nibble b1; + nibble b1l; + nibble b1r; + nibble b1s; +}crypto_state_t; +typedef crypto_state_t* crypto_state; + +void print_crypto_state(const char* text,crypto_state s); +void sm_auth(const byte_t* Gc, const byte_t* Ci, const byte_t* Q, byte_t* Ch, byte_t* Ci_1, crypto_state s); +void cm_auth(const byte_t* Gc, const byte_t* Ci, const byte_t* Q, byte_t* Ch, byte_t* Ci_1, byte_t* Ci_2, crypto_state s); +void cm_encrypt(const byte_t offset, const byte_t len, const byte_t* pt, byte_t* ct, crypto_state s); +void cm_decrypt(const byte_t offset, const byte_t len, const byte_t* ct, byte_t* pt, crypto_state s); +void cm_grind_read_system_zone(const byte_t offset, const byte_t len, const byte_t* pt, crypto_state s); +void cm_grind_set_user_zone(const byte_t zone, crypto_state s); +void cm_mac(byte_t* mac, crypto_state s); +void cm_password(const byte_t* pt, byte_t* ct, crypto_state s); + +#endif // _CRYPTOLIB_H_ diff --git a/tools/cryptorf/defines.h b/tools/cryptorf/defines.h new file mode 100644 index 000000000..4962d7981 --- /dev/null +++ b/tools/cryptorf/defines.h @@ -0,0 +1,36 @@ +/* + * + * Defines + * + * Copyright (C) 2010, Flavio D. Garcia, Peter van Rossum, Roel Verdult + * and Ronny Wichers Schreur. Radboud University Nijmegen + * + * 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 3 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, see . + * + */ + +#ifndef _DEFINES_H_ +#define _DEFINES_H_ + +#define _CRT_SECURE_NO_WARNINGS +#define _CRT_SECURE_NO_DEPRECATE +#include +#include +#include +#include +#define null 0 +typedef unsigned char byte_t; +typedef long long unsigned int ui64; + +#endif // _DEFINES_H_ diff --git a/tools/cryptorf/laundry.sh b/tools/cryptorf/laundry.sh new file mode 100755 index 000000000..46fd94bfe --- /dev/null +++ b/tools/cryptorf/laundry.sh @@ -0,0 +1,2 @@ +#!/bin/sh +./crf 4f794a463ff81d81 2 0 80 546dae diff --git a/tools/cryptorf/sm.c b/tools/cryptorf/sm.c new file mode 100644 index 000000000..c432440e6 --- /dev/null +++ b/tools/cryptorf/sm.c @@ -0,0 +1,77 @@ +/* + * + * SecureMemory simulation + * + * Copyright (C) 2010, Flavio D. Garcia, Peter van Rossum, Roel Verdult + * and Ronny Wichers Schreur. Radboud University Nijmegen + * + * 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 3 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, see . + * + */ + +#include "defines.h" +#include "cryptolib.h" +#include "util.h" +#include + +int main(int argc, const char* argv[]) +{ + // Cryptomemory state + crypto_state_t s; + size_t pos; + + byte_t Q[8] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; // Reader random + byte_t Gc[8] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; // Secret seed + byte_t Ci[8] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; // Card random (last state) + byte_t Ch[8] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; // Reader answer + byte_t Ci_1[8] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; // Card answer + + // Various argument options + ui64 nGc; // Card secret + ui64 nCi; // Card random + ui64 nQ; // Reader main-random + + // Show header and help syntax + printf("SecureMemory simulator - (c) Radboud University Nijmegen\n"); + if (argc < 4) + { + printf("\nsyntax: sm \n"); + return 1; + } + + // Parse arguments + sscanf(argv[1],"%016llx",&nGc); num_to_bytes(nGc,8,Gc); + sscanf(argv[2],"%016llx",&nCi); num_to_bytes(nCi,8,Ci); + sscanf(argv[3],"%016llx",&nQ); num_to_bytes(nQ,8,Q); + + // Calculate authentication + sm_auth(Gc,Ci,Q,Ch,Ci_1,&s); + + printf("\nAuthentication info\n\n"); + printf(" Gc: "); print_bytes(Gc,8); + printf(" Ci: "); print_bytes(Ci,8); + printf(" Q: "); print_bytes(Q,8); + printf(" Ch: "); print_bytes(Ch,8); + printf("Ci+1: "); print_bytes(Ci_1,8); + printf("\n"); + printf(" Ks: "); + for (pos=0; pos<8; pos++) + { + printf("%02x ",Ci_1[pos]); + printf("%02x ",Ch[pos]); + } + printf("\n\n"); + + return 0; +} diff --git a/tools/cryptorf/sma.cpp b/tools/cryptorf/sma.cpp new file mode 100644 index 000000000..e8f1145fd --- /dev/null +++ b/tools/cryptorf/sma.cpp @@ -0,0 +1,918 @@ +/* + * + * SecureMemory recovery + * + * Copyright (C) 2010, Flavio D. Garcia, Peter van Rossum, Roel Verdult + * and Ronny Wichers Schreur. Radboud University Nijmegen + * + * 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 3 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, see . + * + * Modified Iceman, 2020 + */ + +#include "defines.h" +#include "cryptolib.h" +#include "util.h" +#include +#include +#include +#include +#include +#include // sort, max_element, random_shuffle, remove_if, lower_bound +#include // greater, bind2nd + +using namespace std; + +#ifdef _MSC_VER + #define inline __inline +#endif + +/* +>./sm 4f794a463ff81d81 ffffffffffffffff 1234567812345678 +SecureMemory simulator - (c) Radboud University Nijmegen + +Authenticate + Gc: 4f 79 4a 46 3f f8 1d 81 + Ci: ff ff ff ff ff ff ff ff + Q: 12 34 56 78 12 34 56 78 + Ch: 88 c9 d4 46 6a 50 1a 87 +Ci+1: de c2 ee 1b 1c 92 76 e9 + + Ks: de 88 c2 c9 ee d4 1b 46 1c 6a 92 50 76 1a e9 87 + + left: 1ddeac626 + right: 19aba45 + + left-candidates bins: + 004df8a64 (74) + 0059ff7d5 (81) + 00d2ff4ed (80) + 032df8b12 (78) + 0337b8b7d (87) + 036f7b607 (77) + 03a6f882a (79) + 03b2ff59b (76) + 04445c715 (74) + 0452175be (80) + 0b29f2a5b (78) + 0f6c834fb (76) + 0f78aac5b (75) + 0f79c8d49 (78) + 109691f61 (70) + 159d1687e (86) + 176e73456 (77) + 1ddeac626 (92) + 1facee6e5 (78) + 2049ed469 (80) + 205078bba (74) + 31c277406 (81) + 31c2777e6 (81) + 3770cdaf3 (74) + 48916e84e (77) + 4ba9b6520 (78) + 4ba9b653f (78) + 4c51c6463 (82) + 4c9432733 (76) + 4e3d88819 (81) + 4e3d88bf9 (81) + 51c8755b5 (76) + 5b2aeb858 (76) + 5fb612b96 (80) + 60531191a (78) + 6221539d9 (92) + 68918cba9 (79) + 6c9a11672 (78) + 6f696e09e (70) + 7086372b6 (78) + 7bade8a41 (82) + 7c90849f8 (77) + 7cc847482 (87) + +*/ + +const uint64_t left_candidates[43] = { + 0x6221539d9ull, 0x1ddeac626ull, 0x7cc847482ull, 0x0337b8b7dull, + 0x159d1687eull, 0x7bade8a41ull, 0x4c51c6463ull, 0x4e3d88bf9ull, + 0x4e3d88819ull, 0x31c2777e6ull, 0x31c277406ull, 0x0059ff7d5ull, + 0x5fb612b96ull, 0x2049ed469ull, 0x0452175beull, 0x00d2ff4edull, + 0x68918cba9ull, 0x03a6f882aull, 0x7086372b6ull, 0x6c9a11672ull, + 0x60531191aull, 0x4ba9b653full, 0x4ba9b6520ull, 0x1facee6e5ull, + 0x0f79c8d49ull, 0x0b29f2a5bull, 0x032df8b12ull, 0x7c90849f8ull, + 0x48916e84eull, 0x176e73456ull, 0x036f7b607ull, 0x5b2aeb858ull, + 0x51c8755b5ull, 0x4c9432733ull, 0x0f6c834fbull, 0x03b2ff59bull, + 0x0f78aac5bull, 0x3770cdaf3ull, 0x205078bbaull, 0x04445c715ull, + 0x004df8a64ull, 0x6f696e09eull, 0x109691f61ull +}; + +typedef struct { + uint64_t l; + uint64_t m; + uint64_t r; + nibble b0; + nibble b1; + nibble b1l; + nibble b1r; + nibble b1s; + bool invalid; + byte_t Gc[8]; +}cs_t; +typedef cs_t* pcs; + +typedef struct { + byte_t addition; + byte_t out; +} lookup_entry; + +enum cipher_state_side { + CSS_LEFT, + CSS_RIGHT +}; + +void print_cs(const char* text,pcs s) +{ + int pos; + + printf("%s",text); + for(pos=6;pos>=0;pos--) + printf(" %02x",(byte_t)(s->l>>(pos*5))&0x1f); + printf(" |"); + for(pos=6;pos>=0;pos--) + printf(" %02x",(byte_t)(s->m>>(pos*7))&0x7f); + printf(" |"); + for(pos=4;pos>=0;pos--) + printf(" %02x",(byte_t)(s->r>>(pos*5))&0x1f); + + printf("\n"); +} + +static inline byte_t mod(byte_t a, byte_t m) +{ + // Just return the input when this is less or equal than the modular value + if (a> (n_bits - 1))) & mask; +} + +static inline byte_t bit_rotate_r(byte_t a, byte_t n_bits) +{ + return ((a >> 1) | ((a&1) << (n_bits - 1))); +} + +static byte_t lookup_left_substraction[0x400]; +static byte_t lookup_right_subtraction[0x400]; +static lookup_entry lookup_left[0x100000]; +static lookup_entry lookup_right[0x8000]; +static byte_t left_addition[0x100000]; + +static inline void init_lookup_left() +{ + byte_t b3,b6,temp; + int i,index; + + for(i = 0; i <0x400; i++) + { + b6 = i & 0x1f; + b3 = (i >> 5) & 0x1f; + index = (b3 << 15) | b6; + b6 = bit_rotate_l(b6, 5); + + temp = mod(b3 + b6,0x1f); + left_addition[index] = temp; + lookup_left[index].addition = temp; + lookup_left[index].out = ((temp^b3) & 0x0f); + } +} + +static inline void init_lookup_right() +{ + byte_t b16,b18,temp; + int i,index; + + for(i = 0; i <0x400; i++) + { + b18 = i & 0x1f; + b16 = (i >> 5) & 0x1f; + index = (b16 << 10) | b18; + + temp = mod(b18 + b16,0x1f); + lookup_right[index].addition = temp; + lookup_right[index].out = ((temp^b16) & 0x0f); + } +} + +static void init_lookup_left_substraction() +{ + for(int index = 0; index < 0x400 ; index++) + { + byte_t b3 = (index >> 5 & 0x1f); + byte_t bx = (index & 0x1f); + lookup_left_substraction[index] = bit_rotate_r(mod((bx+0x1f)-b3,0x1f),5); + } +} + +static void init_lookup_right_substraction() +{ + for(int index = 0; index < 0x400 ; index++) + { + int b16 = (index >>5); + byte_t bx = (index & 0x1f); + lookup_right_subtraction[index] = mod((bx+0x1f)-b16,0x1f); + } +} + +static inline void previous_left(byte_t in, vector *candidate_states) +{ + pcs state; + size_t size = candidate_states->size(); + for(size_t pos=0; posl >> 30) & 0x1f); + unsigned b3 = (unsigned)(state->l >> 5) & 0x3e0; + state->l = (state->l << 5); + + //Ignore impossible states + if (bx == 0) + { + // Are we dealing with an impossible state? + if (b3 != 0) + { + state->invalid = true; + } else { + // We only need to consider b6=0 + state->l &= 0x7ffffffe0ull; + state->l ^= (((uint64_t)in & 0x1f) << 20); + } + } else { + byte_t b6 = lookup_left_substraction[b3|bx]; + state->l = (state->l & 0x7ffffffe0ull) | b6; + state->l ^= (((uint64_t)in & 0x1f) << 20); + + // Check if we have a second candidate + if (b6 == 0x1f) + { + cs_t nstate = *state; + nstate.l &= 0x7ffffffe0ull; + candidate_states->push_back(nstate); + } + } + } +} + +static inline void previous_right(byte_t in, vector *candidate_states) +{ + pcs state; + size_t size = candidate_states->size(); + for(size_t pos=0; posr >> 20) & 0x1f); + unsigned b16 = (unsigned)(state->r & 0x3e0);//(state->buffer_r >> 10) & 0x1f; + + state->r = (state->r << 5); + + // Ignore impossible states + if (bx == 0) + { + if (b16 != 0) + { + state->invalid=true; + } else { + // We only need to consider b18=0 + state->r &= 0x1ffffe0ull; + state->r ^= (((uint64_t)in & 0xf8) << 12); + } + } else{ + byte_t b18 = lookup_right_subtraction[b16|bx]; + state->r = (state->r & 0x1ffffe0ull) | b18; + state->r ^= (((uint64_t)in & 0xf8) << 12); + //state->b_right = ((b14^b17) & 0x0f); + + // Check if we have a second candidate + if (b18 == 0x1f) + { + cs_t nstate = *state; + nstate.r &= 0x1ffffe0ull; + candidate_states->push_back(nstate); + } + } + } +} + +static inline byte_t next_left_fast(byte_t in, uint64_t* left) +{ + if (in) *left ^= ((in & 0x1f) << 20); + lookup_entry* lookup = &(lookup_left[((*left) & 0xf801f)]); + *left = (((*left) >> 5)| ((uint64_t)lookup->addition << 30)); + return lookup->out; +} + +static inline byte_t next_left_ksbyte(uint64_t* left) +{ + lookup_entry* lookup; + byte_t bt; + + *left = (((*left) >> 5)| ((uint64_t)left_addition[((*left) & 0xf801f)] << 30)); + lookup = &(lookup_left[((*left) & 0xf801f)]); + *left = (((*left) >> 5)| ((uint64_t)lookup->addition << 30)); + bt = lookup->out << 4; + *left = (((*left) >> 5)| ((uint64_t)left_addition[((*left) & 0xf801f)] << 30)); + lookup = &(lookup_left[((*left) & 0xf801f)]); + *left = (((*left) >> 5)| ((uint64_t)lookup->addition << 30)); + bt |= lookup->out; + return bt; +} + +static inline byte_t next_right_fast(byte_t in, uint64_t* right) +{ + if (in) *right ^= ((in&0xf8) << 12); + lookup_entry* lookup = &(lookup_right[((*right) & 0x7c1f)]); + *right = (((*right) >> 5) | (lookup->addition << 20)); + return lookup->out; +} + +static inline void sm_left_mask(const byte_t* ks, byte_t* mask, uint64_t rstate) +{ + size_t pos; + byte_t bt; + + for (pos=0; pos<16; pos++) + { + next_right_fast(0,&rstate); + bt = next_right_fast(0,&rstate) << 4; + next_right_fast(0,&rstate); + bt |= next_right_fast(0,&rstate); + + // xor the bits with the keystream and count the "correct" bits + bt ^= ks[pos]; + + // Save the mask for the left produced bits + mask[pos] = bt; + } +} + +static inline uint32_t sm_right(const byte_t* ks, byte_t* mask, vector* pcrstates) +{ + byte_t tmp_mask[16]; + size_t pos,bits,bit,topbits; + uint64_t rstate,counter; + map bincstates; + map::iterator it; + byte_t bt; + + topbits = 0; + for (counter=0; counter<0x2000000; counter++) + { + // Reset the current bitcount of correct bits + bits = 0; + + // Copy the state we are going to test + rstate = counter; + + for (pos=0; pos<16; pos++) + { + next_right_fast(0,&rstate); + bt = next_right_fast(0,&rstate) << 4; + next_right_fast(0,&rstate); + bt |= next_right_fast(0,&rstate); + + // xor the bits with the keystream and count the "correct" bits + bt ^= ks[pos]; + + // Save the mask for the left produced bits + tmp_mask[pos] = bt; + + for (bit=0; bit<8; bit++) + { + // When the bit is xored away (=zero), it was the same, so correct ;) + if ((bt & 0x01) == 0) bits++; + bt >>= 1; + } + } + + if (bits > topbits) + { + topbits = bits; + // Copy the winning mask + memcpy(mask,tmp_mask,16); + } + + // Ignore states under 90 + if (bits >= 90) + { + // Make sure the bits are used for ordering + bincstates[(((uint64_t)bits)<<56) | counter] = counter; + } + + if ((counter&0xfffff) == 0) + { + printf("."); + fflush(stdout); + } + } + printf("\n"); + + // Clear the candidate state vector + pcrstates->clear(); + + // Copy the order the states from lowest-bin to highest-bin + for(it=bincstates.begin();it!=bincstates.end();++it) + { + pcrstates->push_back(it->second); + } + // Reverse the vector order (so the higest bin comes first) + reverse(pcrstates->begin(),pcrstates->end()); + + return topbits; +} + +static inline void previous_all_input(vector *pcstates, uint32_t gc_byte_index, cipher_state_side css) +{ + byte_t btGc,in; + vector ncstates; + vector prev_ncstates; + vector::iterator it,itnew; + + // Loop through the complete entryphy of 5 bits for each candidate + // We ignore zero (xor 0x00) to avoid duplicates + for (btGc=0; btGc<0x20; btGc++) + { + // Copy the original candidates that are supplied + ncstates = *pcstates; + + // Rollback the (candidate) cipher states with this input + if (css == CSS_RIGHT) + { + in = btGc << 3; + previous_right(in,&ncstates); + } else { + in = btGc; + previous_left(in,&ncstates); + } + + for(itnew=ncstates.begin();itnew!=ncstates.end();++itnew) + { + // Wipe away the invalid states + if (itnew->invalid == false) + { + itnew->Gc[gc_byte_index] = in; + prev_ncstates.push_back(*itnew); + } + } + } + + // Copy the previous states into the vector + *pcstates = prev_ncstates; +} + +static inline void search_gc_candidates_right(const uint64_t rstate_before_gc, const uint64_t rstate_after_gc, const byte_t* Q, vector* pcstates) +{ + vector::iterator it; + vector csl_cand; + map matchbox; + map::iterator itmatch; + uint64_t rstate; + size_t counter; + cs_t state; + + // Generate 2^20 different (5 bits) values for the first 4 Gc bytes (0,1,2,3) + for (counter=0; counter<0x100000; counter++) + { + rstate = rstate_before_gc; + next_right_fast((counter >> 12) & 0xf8,&rstate); + next_right_fast((counter >> 7) & 0xf8,&rstate); + next_right_fast(Q[4],&rstate); + next_right_fast((counter >> 2) & 0xf8,&rstate); + next_right_fast((counter << 3) & 0xf8,&rstate); + next_right_fast(Q[5],&rstate); + matchbox[rstate] = counter; + } + + // Reset and initialize the cryptostate and vecctor + memset(&state,0x00,sizeof(cs_t)); + state.invalid = false; + state.r = rstate_after_gc; + csl_cand.clear(); + csl_cand.push_back(state); + + // Generate 2^20(+splitting) different (5 bits) values for the last 4 Gc bytes (4,5,6,7) + previous_right(Q[7],&csl_cand); + previous_all_input(&csl_cand,7,CSS_RIGHT); + previous_all_input(&csl_cand,6,CSS_RIGHT); + previous_right(Q[6],&csl_cand); + previous_all_input(&csl_cand,5,CSS_RIGHT); + previous_all_input(&csl_cand,4,CSS_RIGHT); + + pcstates->clear(); + + // Take the intersection of the corresponding states ~2^15 values (40-25 = 15 bits) + for(it=csl_cand.begin();it!=csl_cand.end();++it) + { + itmatch = matchbox.find(it->r); + if (itmatch != matchbox.end()) + { + it->Gc[0] = (itmatch->second >> 12) & 0xf8; + it->Gc[1] = (itmatch->second >> 7) & 0xf8; + it->Gc[2] = (itmatch->second >> 2) & 0xf8; + it->Gc[3] = (itmatch->second << 3) & 0xf8; + /* + printf("%07llx ",it->r); + printf("(%x)\n",itmatch->second); + */ +/* + if (it->r == 0xff459b) + { + print_cs("previous:",&(*it)); + printf("%07llx\n",it->r); + print_bytes(it->Gc,8); + } +*/ + pcstates->push_back(*it); + } + } +} + +static inline void sm_left(const byte_t* ks, byte_t* mask, vector* pcstates) +{ + map bincstates; + map::iterator it; + uint64_t counter,lstate; + size_t pos,bits,bit; + byte_t correct_bits[16]; + byte_t bt; + cs_t state; + lookup_entry* lookup; + + // Reset and initialize the cryptostate and vecctor + memset(&state,0x00,sizeof(cs_t)); + state.invalid = false; + + for (counter=0; counter<0x800000000ull; counter++) + { + lstate = counter; + + for (pos=0; pos<16; pos++) + { + lstate = (((lstate) >> 5)| ((uint64_t)left_addition[((lstate) & 0xf801f)] << 30)); + lookup = &(lookup_left[((lstate) & 0xf801f)]); + lstate = (((lstate) >> 5)| ((uint64_t)lookup->addition << 30)); + bt = lookup->out << 4; + lstate = (((lstate) >> 5)| ((uint64_t)left_addition[((lstate) & 0xf801f)] << 30)); + lookup = &(lookup_left[((lstate) & 0xf801f)]); + lstate = (((lstate) >> 5)| ((uint64_t)lookup->addition << 30)); + bt |= lookup->out; + + // xor the bits with the keystream and count the "correct" bits + bt ^= ks[pos]; + + // When the REQUIRED bits are NOT xored away (=zero), ignore this wrong state + if ((bt & mask[pos]) != 0) break; + + // Save the correct bits for statistical information + correct_bits[pos] = bt; + } + + // If we have parsed all 16 bytes of keystream, we have a valid CANDIDATE! + if (pos == 16) + { + // Count the total correct bits + bits=0; + for (pos=0; pos<16; pos++) + { + // Get the next byte-value with correct bits + bt = correct_bits[pos]; + + // Count all the (correct) bits + for (bit=0; bit<8; bit++) + { + // When the bit is xored away (=zero), it was the same, so correct ;) + if ((bt & 0x01) == 0) bits++; + bt >>= 1; + } + } + + // Print the left candidate +// printf("%09llx (%d)\n",counter,bits); + printf("."); + fflush(stdout); + + state.l = counter; + // Make sure the bits are used for ordering + bincstates[(((uint64_t)bits)<<56) | counter] = state; + } + + if ((counter&0xffffffffull) == 0) + { + printf("%02.1f%%.",((float)100/8)*(counter>>32)); + fflush(stdout); + } + } + printf("100%%\n"); + + // Clear the candidate state vector + pcstates->clear(); + + // Copy the order the states from lowest-bin to highest-bin + for(it=bincstates.begin();it!=bincstates.end();++it) + { + pcstates->push_back(it->second); + } + // Reverse the vector order (so the higest bin comes first) + reverse(pcstates->begin(),pcstates->end()); +} + +static inline void search_gc_candidates_left(const uint64_t lstate_before_gc, const byte_t* Q, vector* pcstates) +{ + vector csl_cand,csl_search; + vector::iterator itsearch,itcand; + map matchbox; + map::iterator itmatch; + uint64_t lstate; + size_t counter; + + // Generate 2^20 different (5 bits) values for the first 4 Gc bytes (0,1,2,3) + for (counter=0; counter<0x100000; counter++) + { + lstate = lstate_before_gc; + next_left_fast((counter >> 15) & 0x1f,&lstate); + next_left_fast((counter >> 10) & 0x1f,&lstate); + next_left_fast(Q[4],&lstate); + next_left_fast((counter >> 5) & 0x1f,&lstate); + next_left_fast(counter & 0x1f,&lstate); + next_left_fast(Q[5],&lstate); + matchbox[lstate] = counter; + } + + // Copy the input candidate states and clean the output vector + csl_cand = *pcstates; + pcstates->clear(); + + for(itcand=csl_cand.begin();itcand!=csl_cand.end();++itcand) + { + csl_search.clear(); + csl_search.push_back(*itcand); + + // Generate 2^20(+splitting) different (5 bits) values for the last 4 Gc bytes (4,5,6,7) + previous_left(Q[7],&csl_search); + previous_all_input(&csl_search,7,CSS_LEFT); + previous_all_input(&csl_search,6,CSS_LEFT); + previous_left(Q[6],&csl_search); + previous_all_input(&csl_search,5,CSS_LEFT); + previous_all_input(&csl_search,4,CSS_LEFT); + + // Take the intersection of the corresponding states ~2^15 values (40-25 = 15 bits) + for(itsearch=csl_search.begin();itsearch!=csl_search.end();++itsearch) + { + itmatch = matchbox.find(itsearch->l); + if (itmatch != matchbox.end()) + { + itsearch->Gc[0] = (itmatch->second >> 15) & 0x1f; + itsearch->Gc[1] = (itmatch->second >> 10) & 0x1f; + itsearch->Gc[2] = (itmatch->second >> 5) & 0x1f; + itsearch->Gc[3] = itmatch->second & 0x1f; + + /* + printf("%07llx ",it->l); + printf("(%x) ",itmatch->second); + print_cs("",&(*it)); + */ +/* + if (itsearch->l == 0x405162420ull) + { + print_cs("previous:",&(*itsearch)); + printf("%09llx\n",itsearch->l); + print_bytes(itsearch->Gc,8); + } + count++; +*/ + pcstates->push_back(*itsearch); + } + } +// printf("%09llx: ",itcand->l); +// printf("%d - %d\n",csl_search.size(),count); + printf("."); + fflush(stdout); + } + printf("\n"); +} + +void combine_valid_left_right_states(vector* plcstates, vector* prcstates, vector* pgc_candidates) +{ + vector::iterator itl, itr; + size_t pos,count; + uint64_t gc; + bool valid; + + // Clean up the candidate list + pgc_candidates->clear(); + count = 0; + for(itl=plcstates->begin();itl!=plcstates->end();++itl) + { + for(itr=prcstates->begin();itr!=prcstates->end();++itr) + { + valid = true; + // Check for left and right candidates that share the overlapping bits (8 x 2bits of Gc) + for (pos=0; pos<8; pos++) + { + if ((itl->Gc[pos] & 0x18) != (itr->Gc[pos] & 0x18)) + { + valid = false; + break; + } + } + + if (valid) + { + gc = 0; + for (pos=0; pos<8; pos++) + { + gc <<= 8; + gc |= (itl->Gc[pos] | itr->Gc[pos]); + } +// printf("%016llx\n",gc); + pgc_candidates->push_back(gc); +// printf("%09llx - ",itl->l); +// printf("%07llx\n",itr->r); + } + count++; + } + } + printf("Found a total of " _YELLOW_("%llu")" combinations, ",((unsigned long long)plcstates->size()) * prcstates->size()); + printf("but only " _GREEN_("%lu")" were valid!\n", pgc_candidates->size()); +} + +int main(int argc, const char* argv[]) +{ + size_t pos; + crypto_state_t ostate; + uint64_t rstate_before_gc,rstate_after_gc; + uint64_t lstate_before_gc; + vector rstates,lstates_after_gc,pgc_candidates; + vector::iterator itrstates,itgc; + vector crstates; + vector clcandidates,clstates; + vector::iterator it; + uint32_t rbits; + +// byte_t Gc[ 8] = {0x4f,0x79,0x4a,0x46,0x3f,0xf8,0x1d,0x81}; +// byte_t Gc[ 8] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; +// byte_t Ci[ 8] = {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff}; +// byte_t Q[ 8] = {0x12,0x34,0x56,0x78,0x12,0x34,0x56,0x78}; + byte_t Gc[ 8]; + byte_t Ci[ 8]; + byte_t Q[ 8]; + byte_t Ch[ 8]; + byte_t Ci_1[ 8]; + + byte_t Gc_chk[ 8]; + byte_t Ch_chk[ 8]; + byte_t Ci_1_chk[ 8]; + + // byte_t ks[16] = {0xde,0x88,0xc2,0xc9,0xee,0xd4,0x1b,0x46,0x1c,0x6a,0x92,0x50,0x76,0x1a,0xe9,0x87}; + // byte_t mask[16] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; + // byte_t mask[16] = {0x04,0xb0,0xe1,0x10,0xc0,0x33,0x44,0x20,0x20,0x00,0x70,0x8c,0x22,0x04,0x10,0x80}; + + byte_t ks[16]; + byte_t mask[16]; + + ui64 nCi; // Card random + ui64 nQ; // Reader random + ui64 nCh; // Reader challange + ui64 nCi_1; // Card anwser + + if ((argc != 2) && (argc != 5)) + { + printf("SecureMemory recovery - (c) Radboud University Nijmegen\n\n"); + printf("syntax: sma simulate\n"); + printf(" sma \n\n"); + return 1; + } + + printf(_CYAN_("\nAuthentication info\n\n")); + + // Check if this is a simulation + if (argc == 2) + { + // Generate random values for the key and randoms + srand((uint32_t)time(null)); + for (pos = 0; pos<8; pos++) + { + Gc[pos] = rand(); + Ci[pos] = rand(); + Q[pos] = rand(); + } + sm_auth(Gc,Ci,Q,Ch,Ci_1,&ostate); + printf(" Gc: "); print_bytes(Gc,8); + } else { + sscanf(argv[1],"%016llx",&nCi); num_to_bytes(nCi,8,Ci); + sscanf(argv[2],"%016llx",&nQ); num_to_bytes(nQ,8,Q); + sscanf(argv[3],"%016llx",&nCh); num_to_bytes(nCh,8,Ch); + sscanf(argv[4],"%016llx",&nCi_1); num_to_bytes(nCi_1,8,Ci_1); + printf(" Gc: unknown\n"); + } + + for (pos = 0; pos<8; pos++) + { + ks[2*pos] = Ci_1[pos]; + ks[(2*pos)+1] = Ch[pos]; + } + + printf(" Ci: "); print_bytes(Ci,8); + printf(" Q: "); print_bytes(Q,8); + printf(" Ch: "); print_bytes(Ch,8); + printf("Ci+1: "); print_bytes(Ci_1,8); + printf("\n"); + printf(" Ks: "); print_bytes(ks,16); + printf("\n"); + + printf("Initializing lookup tables for increasing cipher speed\n"); + init_lookup_left(); + init_lookup_right(); + init_lookup_left_substraction(); + init_lookup_right_substraction(); + + // Load in the ci (tag-nonce), together with the first half of Q (reader-nonce) + rstate_before_gc = 0; + lstate_before_gc = 0; + for (pos = 0; pos < 4; pos++) + { + next_right_fast(Ci[2*pos ],&rstate_before_gc); + next_right_fast(Ci[2*pos+1],&rstate_before_gc); + next_right_fast(Q[pos],&rstate_before_gc); + + next_left_fast(Ci[2*pos ],&lstate_before_gc); + next_left_fast(Ci[2*pos+1],&lstate_before_gc); + next_left_fast(Q[pos],&lstate_before_gc); + } + + printf("Determing the right states that correspond to the keystream\n"); + rbits = sm_right(ks,mask,&rstates); + printf("Top-bin for the right state contains " _GREEN_("%d")" correct bits\n",rbits); + printf("Total count of right bins: " _YELLOW_("%lu") "\n",(unsigned long)rstates.size()); + + if (rbits < 96) + { + printf(_RED_("\n WARNING!!! Better find another trace, the right top-bin is < 96 bits\n\n")); + } + + for(itrstates=rstates.begin();itrstates!=rstates.end();++itrstates) + { + rstate_after_gc = *itrstates; + sm_left_mask(ks,mask,rstate_after_gc); + printf("Using the state from the top-right bin: " _YELLOW_("0x%07llx")"\n",(unsigned long long)rstate_after_gc); + + search_gc_candidates_right(rstate_before_gc,rstate_after_gc,Q,&crstates); + printf("Found " _YELLOW_("%lu")" right candidates using the meet-in-the-middle attack\n",crstates.size()); + if (crstates.size() == 0) continue; + + printf("Calculating left states using the (unknown bits) mask from the top-right state\n"); + sm_left(ks,mask,&clstates); + printf("Found a total of " _YELLOW_("%lu")" left cipher states, recovering left candidates...\n",clstates.size()); + if (clstates.size() == 0) continue; + + search_gc_candidates_left(lstate_before_gc,Q,&clstates); + printf("The meet-in-the-middle attack returned " _YELLOW_("%lu")" left cipher candidates\n",clstates.size()); + if (clstates.size() == 0) continue; + + printf("Combining left and right states, disposing invalid combinations\n"); + combine_valid_left_right_states(&clstates,&crstates,&pgc_candidates); + + printf("Filtering the correct one using the middle part\n"); + for(itgc=pgc_candidates.begin();itgc!=pgc_candidates.end();++itgc) + { + num_to_bytes(*itgc,8,Gc_chk); + sm_auth(Gc_chk,Ci,Q,Ch_chk,Ci_1_chk,&ostate); + if ((memcmp(Ch_chk,Ch,8) == 0) && (memcmp(Ci_1_chk,Ci_1,8) == 0)) + { + printf("\nFound valid key: " _GREEN_("%016llX")"\n\n",(unsigned long long)*itgc); + return 0; + } + } + printf(_RED_("Could not find key using this right cipher state.\n\n")); + } + return 0; +} diff --git a/tools/cryptorf/sma_multi.cpp b/tools/cryptorf/sma_multi.cpp new file mode 100644 index 000000000..5c05e2e04 --- /dev/null +++ b/tools/cryptorf/sma_multi.cpp @@ -0,0 +1,1126 @@ +/* + * + * SecureMemory recovery Multithread + * + * Copyright (C) 2010, Flavio D. Garcia, Peter van Rossum, Roel Verdult + * and Ronny Wichers Schreur. Radboud University Nijmegen + * + * 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 3 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, see . + * + * Modifed Iceman, 2020 + */ + +#include "defines.h" +#include "cryptolib.h" +#include "util.h" +#include +#include +#include +#include +#include +#include // sort, max_element, random_shuffle, remove_if, lower_bound +#include // greater, bind2nd +#include // std::thread +#include +#include +using namespace std; + +#ifdef _MSC_VER + #define inline __inline +#endif + +/* +>./sm 4f794a463ff81d81 ffffffffffffffff 1234567812345678 +SecureMemory simulator - (c) Radboud University Nijmegen + +Authenticate + Gc: 4f 79 4a 46 3f f8 1d 81 + Ci: ff ff ff ff ff ff ff ff + Q: 12 34 56 78 12 34 56 78 + Ch: 88 c9 d4 46 6a 50 1a 87 +Ci+1: de c2 ee 1b 1c 92 76 e9 + + Ks: de 88 c2 c9 ee d4 1b 46 1c 6a 92 50 76 1a e9 87 + + left: 1ddeac626 + right: 19aba45 + + left-candidates bins: + 004df8a64 (74) + 0059ff7d5 (81) + 00d2ff4ed (80) + 032df8b12 (78) + 0337b8b7d (87) + 036f7b607 (77) + 03a6f882a (79) + 03b2ff59b (76) + 04445c715 (74) + 0452175be (80) + 0b29f2a5b (78) + 0f6c834fb (76) + 0f78aac5b (75) + 0f79c8d49 (78) + 109691f61 (70) + 159d1687e (86) + 176e73456 (77) + 1ddeac626 (92) + 1facee6e5 (78) + 2049ed469 (80) + 205078bba (74) + 31c277406 (81) + 31c2777e6 (81) + 3770cdaf3 (74) + 48916e84e (77) + 4ba9b6520 (78) + 4ba9b653f (78) + 4c51c6463 (82) + 4c9432733 (76) + 4e3d88819 (81) + 4e3d88bf9 (81) + 51c8755b5 (76) + 5b2aeb858 (76) + 5fb612b96 (80) + 60531191a (78) + 6221539d9 (92) + 68918cba9 (79) + 6c9a11672 (78) + 6f696e09e (70) + 7086372b6 (78) + 7bade8a41 (82) + 7c90849f8 (77) + 7cc847482 (87) + +*/ + +const uint64_t left_candidates[43] = { + 0x6221539d9ull, 0x1ddeac626ull, 0x7cc847482ull, 0x0337b8b7dull, + 0x159d1687eull, 0x7bade8a41ull, 0x4c51c6463ull, 0x4e3d88bf9ull, + 0x4e3d88819ull, 0x31c2777e6ull, 0x31c277406ull, 0x0059ff7d5ull, + 0x5fb612b96ull, 0x2049ed469ull, 0x0452175beull, 0x00d2ff4edull, + 0x68918cba9ull, 0x03a6f882aull, 0x7086372b6ull, 0x6c9a11672ull, + 0x60531191aull, 0x4ba9b653full, 0x4ba9b6520ull, 0x1facee6e5ull, + 0x0f79c8d49ull, 0x0b29f2a5bull, 0x032df8b12ull, 0x7c90849f8ull, + 0x48916e84eull, 0x176e73456ull, 0x036f7b607ull, 0x5b2aeb858ull, + 0x51c8755b5ull, 0x4c9432733ull, 0x0f6c834fbull, 0x03b2ff59bull, + 0x0f78aac5bull, 0x3770cdaf3ull, 0x205078bbaull, 0x04445c715ull, + 0x004df8a64ull, 0x6f696e09eull, 0x109691f61ull +}; + +typedef struct { + uint64_t l; + uint64_t m; + uint64_t r; + nibble b0; + nibble b1; + nibble b1l; + nibble b1r; + nibble b1s; + bool invalid; + byte_t Gc[8]; +}cs_t; +typedef cs_t* pcs; + +typedef struct { + byte_t addition; + byte_t out; +} lookup_entry; + +enum cipher_state_side { + CSS_LEFT, + CSS_RIGHT +}; + +void print_cs(const char* text,pcs s) { + int pos; + + printf("%s",text); + + for(pos=6;pos>=0;pos--) + printf(" %02x",(byte_t)(s->l>>(pos*5))&0x1f); + + printf(" |"); + for(pos=6;pos>=0;pos--) + printf(" %02x",(byte_t)(s->m>>(pos*7))&0x7f); + + printf(" |"); + + for(pos=4;pos>=0;pos--) + printf(" %02x",(byte_t)(s->r>>(pos*5))&0x1f); + + printf("\n"); +} + +static inline byte_t mod(byte_t a, byte_t m) { + // Just return the input when this is less or equal than the modular value + if (a> (n_bits - 1))) & mask; +} + +static inline byte_t bit_rotate_r(byte_t a, byte_t n_bits) { + return ((a >> 1) | ((a&1) << (n_bits - 1))); +} +*/ + +#define BIT_ROL_MASK ((1 << 5) - 1) +#define BIT_ROL(a) ((((a) << 1) | ((a) >> 4)) & BIT_ROL_MASK) +#define BIT_ROR(a) (((a) >> 1) | (((a) & 1) << 4)) + + +static byte_t lookup_left_substraction[0x400]; +static byte_t lookup_right_subtraction[0x400]; +static lookup_entry lookup_left[0x100000]; +static lookup_entry lookup_right[0x8000]; +static byte_t left_addition[0x100000]; + +static inline void init_lookup_left() { + byte_t b3, b6, temp; + int i, index; + + for (i = 0; i <0x400; i++){ + b6 = i & 0x1f; + b3 = (i >> 5) & 0x1f; + index = (b3 << 15) | b6; + +// b6 = bit_rotate_l(b6, 5); + b6 = BIT_ROL(b6); + + temp = mod(b3 + b6,0x1f); + left_addition[index] = temp; + lookup_left[index].addition = temp; + lookup_left[index].out = ((temp^b3) & 0x0f); + } +} + +static inline void init_lookup_right() { + byte_t b16, b18, temp; + int i, index; + + for(i = 0; i <0x400; i++) { + b18 = i & 0x1f; + b16 = (i >> 5) & 0x1f; + index = (b16 << 10) | b18; + + temp = mod(b18 + b16,0x1f); + lookup_right[index].addition = temp; + lookup_right[index].out = ((temp^b16) & 0x0f); + } +} + +static void init_lookup_left_substraction() { + for(int index = 0; index < 0x400 ; index++) { + byte_t b3 = (index >> 5 & 0x1f); + byte_t bx = (index & 0x1f); + + //lookup_left_substraction[index] = bit_rotate_r(mod((bx+0x1f)-b3,0x1f),5); + lookup_left_substraction[index] = BIT_ROR( mod((bx + 0x1F) - b3, 0x1F)); + } +} + +static void init_lookup_right_substraction() { + for(int index = 0; index < 0x400 ; index++) { + int b16 = (index >>5); + byte_t bx = (index & 0x1f); + lookup_right_subtraction[index] = mod((bx + 0x1F) - b16, 0x1F); + } +} + +static inline void previous_left(byte_t in, vector *candidate_states) { + pcs state; + size_t size = candidate_states->size(); + for(size_t pos=0; posl >> 30) & 0x1f); + unsigned b3 = (unsigned)(state->l >> 5) & 0x3e0; + state->l = (state->l << 5); + + //Ignore impossible states + if (bx == 0) { + // Are we dealing with an impossible state? + if (b3 != 0) { + state->invalid = true; + } else { + // We only need to consider b6=0 + state->l &= 0x7ffffffe0ull; + state->l ^= (((uint64_t)in & 0x1f) << 20); + } + } else { + byte_t b6 = lookup_left_substraction[b3|bx]; + state->l = (state->l & 0x7ffffffe0ull) | b6; + state->l ^= (((uint64_t)in & 0x1f) << 20); + + // Check if we have a second candidate + if (b6 == 0x1f) { + cs_t nstate = *state; + nstate.l &= 0x7ffffffe0ull; + candidate_states->push_back(nstate); + } + } + } +} + +static inline void previous_right(byte_t in, vector *candidate_states) { + pcs state; + size_t size = candidate_states->size(); + for(size_t pos=0; posr >> 20) & 0x1f); + unsigned b16 = (unsigned)(state->r & 0x3e0);//(state->buffer_r >> 10) & 0x1f; + + state->r = (state->r << 5); + + // Ignore impossible states + if (bx == 0) { + if (b16 != 0) { + state->invalid=true; + } else { + // We only need to consider b18=0 + state->r &= 0x1ffffe0ull; + state->r ^= (((uint64_t)in & 0xf8) << 12); + } + } else { + byte_t b18 = lookup_right_subtraction[b16|bx]; + state->r = (state->r & 0x1ffffe0ull) | b18; + state->r ^= (((uint64_t)in & 0xf8) << 12); + //state->b_right = ((b14^b17) & 0x0f); + + // Check if we have a second candidate + if (b18 == 0x1f) { + cs_t nstate = *state; + nstate.r &= 0x1ffffe0ull; + candidate_states->push_back(nstate); + } + } + } +} + +static inline byte_t next_left_fast(byte_t in, uint64_t* left) { + if (in) + *left ^= ((in & 0x1f) << 20); + + lookup_entry* lookup = &(lookup_left[((*left) & 0xf801f)]); + *left = (((*left) >> 5)| ((uint64_t)lookup->addition << 30)); + return lookup->out; +} + +static inline byte_t next_left_ksbyte(uint64_t* left) { + lookup_entry* lookup; + byte_t bt; + + *left = (((*left) >> 5)| ((uint64_t)left_addition[((*left) & 0xf801f)] << 30)); + lookup = &(lookup_left[((*left) & 0xf801f)]); + *left = (((*left) >> 5)| ((uint64_t)lookup->addition << 30)); + bt = lookup->out << 4; + *left = (((*left) >> 5)| ((uint64_t)left_addition[((*left) & 0xf801f)] << 30)); + lookup = &(lookup_left[((*left) & 0xf801f)]); + *left = (((*left) >> 5)| ((uint64_t)lookup->addition << 30)); + bt |= lookup->out; + return bt; +} + +static inline byte_t next_right_fast(byte_t in, uint64_t* right) { + if (in) *right ^= ((in&0xf8) << 12); + lookup_entry* lookup = &(lookup_right[((*right) & 0x7c1f)]); + *right = (((*right) >> 5) | (lookup->addition << 20)); + return lookup->out; +} + +static inline void sm_left_mask(const byte_t* ks, byte_t* mask, uint64_t rstate) { + for (uint8_t pos = 0; pos < 16; pos++) { + next_right_fast(0,&rstate); + byte_t bt = next_right_fast(0,&rstate) << 4; + next_right_fast(0,&rstate); + bt |= next_right_fast(0,&rstate); + + // xor the bits with the keystream and count the "correct" bits + bt ^= ks[pos]; + + // Save the mask for the left produced bits + mask[pos] = bt; + } +} + + +std::atomic key_found{0}; +std::atomic key{0}; +std::atomic topbits{0}; +std::mutex g_ice_mtx; +uint32_t g_num_cpus = std::thread::hardware_concurrency(); + + +static void ice_sm_right_thread( + uint8_t offset, + uint8_t skips, + const byte_t* ks, + map* bincstates, + byte_t* mask + ) { + + byte_t tmp_mask[16]; + byte_t bt; + + for (uint64_t counter = offset; counter < 0x2000000; counter += skips) { + // Reset the current bitcount of correct bits + size_t bits = 0; + + // Copy the state we are going to test + uint64_t rstate = counter; + + for (uint8_t pos = 0; pos < 16; pos++) { + + next_right_fast(0, &rstate); + + bt = next_right_fast(0, &rstate) << 4; + + next_right_fast(0, &rstate); + + bt |= next_right_fast(0, &rstate); + + // xor the bits with the keystream and count the "correct" bits + bt ^= ks[pos]; + + // Save the mask for the left produced bits + tmp_mask[pos] = bt; + + // When the bit is xored away (=zero), it was the same, so correct ;) + if ((bt & 0x01) == 0) bits++; + if (((bt >> 1) & 0x01) == 0) bits++; + if (((bt >> 2) & 0x01) == 0) bits++; + if (((bt >> 3) & 0x01) == 0) bits++; + if (((bt >> 4) & 0x01) == 0) bits++; + if (((bt >> 5) & 0x01) == 0) bits++; + if (((bt >> 6) & 0x01) == 0) bits++; + if (((bt >> 7) & 0x01) == 0) bits++; + } + + g_ice_mtx.lock(); + if (bits > topbits.load(std::memory_order_relaxed)) { + // Copy the winning mask + topbits = bits; + memcpy(mask, tmp_mask, 16); + } + g_ice_mtx.unlock(); + + // Ignore states under 90 + if (bits >= 90) { + // Make sure the bits are used for ordering + g_ice_mtx.lock(); + if (bincstates->find((((uint64_t)bits) << 56) | counter) != bincstates->end()) + bincstates->at((((uint64_t)bits) << 56) | counter) = counter; + else + bincstates->insert( std::pair( (((uint64_t)bits) << 56) | counter, counter)); + g_ice_mtx.unlock(); + } + + if ((counter & 0xfffff) == 0) { + g_ice_mtx.lock(); + printf("."); + fflush(stdout); + g_ice_mtx.unlock(); + } + } +} +static uint32_t ice_sm_right(const byte_t* ks, byte_t* mask, vector* pcrstates) { + + uint32_t g_num_cpus = std::thread::hardware_concurrency(); + map bincstates; + topbits = ATOMIC_VAR_INIT(0); + + std::vector threads(g_num_cpus); + for (uint8_t m = 0; m < g_num_cpus; m++) { + threads[m] = std::thread( ice_sm_right_thread, m, g_num_cpus, ks, &bincstates, mask); + } + for (auto& t : threads) { + t.join(); + } + + printf("\n"); + + // Clear the candidate state vector + pcrstates->clear(); + + // Copy the order the states from lowest-bin to highest-bin + map::iterator it; + for (it = bincstates.begin(); it != bincstates.end(); ++it) { + pcrstates->push_back(it->second); + } + + // Reverse the vector order (so the higest bin comes first) + reverse(pcrstates->begin(), pcrstates->end()); + + return topbits; +} + +static void ice_sm_left_thread( + uint8_t offset, + uint8_t skips, + const byte_t* ks, + map* bincstates, + byte_t* mask + ) { + + size_t pos, bits; + byte_t correct_bits[16]; + byte_t bt; + lookup_entry* lookup; + + // Reset and initialize the cryptostate and vector + cs_t state; + memset(&state, 0x00, sizeof(cs_t)); + state.invalid = false; + + + for (uint64_t counter = offset; counter < 0x800000000ull; counter += skips) { + uint64_t lstate = counter; + + for (pos = 0; pos < 16; pos++) { + + lstate = (((lstate) >> 5)| ((uint64_t)left_addition[((lstate) & 0xf801f)] << 30)); + lookup = &(lookup_left[((lstate) & 0xf801f)]); + lstate = (((lstate) >> 5)| ((uint64_t)lookup->addition << 30)); + bt = lookup->out << 4; + lstate = (((lstate) >> 5)| ((uint64_t)left_addition[((lstate) & 0xf801f)] << 30)); + lookup = &(lookup_left[((lstate) & 0xf801f)]); + lstate = (((lstate) >> 5)| ((uint64_t)lookup->addition << 30)); + bt |= lookup->out; + + // xor the bits with the keystream and count the "correct" bits + bt ^= ks[pos]; + + // When the REQUIRED bits are NOT xored away (=zero), ignore this wrong state + if ((bt & mask[pos]) != 0) break; + + // Save the correct bits for statistical information + correct_bits[pos] = bt; + } + + // If we have parsed all 16 bytes of keystream, we have a valid CANDIDATE! + if (pos == 16) { + // Count the total correct bits + bits = 0; + for (pos = 0; pos < 16; pos++) { + // Get the next byte-value with correct bits + bt = correct_bits[pos]; + + // Count all the (correct) bits + // When the bit is xored away (=zero), it was the same, so correct ;) + if ((bt & 0x01) == 0) bits++; + if (((bt >> 1) & 0x01) == 0) bits++; + if (((bt >> 2) & 0x01) == 0) bits++; + if (((bt >> 3) & 0x01) == 0) bits++; + if (((bt >> 4) & 0x01) == 0) bits++; + if (((bt >> 5) & 0x01) == 0) bits++; + if (((bt >> 6) & 0x01) == 0) bits++; + if (((bt >> 7) & 0x01) == 0) bits++; + } + + state.l = counter; + + // Make sure the bits are used for ordering + g_ice_mtx.lock(); + printf("."); + fflush(stdout); + if (bincstates->find((((uint64_t)bits) << 56) | counter) != bincstates->end()) + bincstates->at((((uint64_t)bits) << 56) | counter) = state; + else + bincstates->insert( std::pair( (((uint64_t)bits) << 56) | counter, state)); + g_ice_mtx.unlock(); + + } + + if ((counter & 0xffffffffull) == 0) { + g_ice_mtx.lock(); + printf("%02.1f%%.", ((float)100/8) * (counter >> 32)); + fflush(stdout); + g_ice_mtx.unlock(); + } + } +} + +static void ice_sm_left(const byte_t* ks, byte_t* mask, vector* pcstates) { + + uint32_t g_num_cpus = std::thread::hardware_concurrency(); + + map bincstates; + std::vector threads(g_num_cpus); + for (uint8_t m = 0; m < g_num_cpus; m++) { + threads[m] = std::thread( ice_sm_left_thread, m, g_num_cpus, ks, &bincstates, mask); + } + + for (auto& t : threads) { + t.join(); + } + + printf("100%%\n"); + + // Clear the candidate state vector + pcstates->clear(); + + // Copy the order the states from lowest-bin to highest-bin + map::iterator it; + for(it = bincstates.begin(); it != bincstates.end(); ++it) { + pcstates->push_back(it->second); + } + // Reverse the vector order (so the higest bin comes first) + reverse(pcstates->begin(), pcstates->end()); +} + +static inline uint32_t sm_right(const byte_t* ks, byte_t* mask, vector* pcrstates) { + byte_t tmp_mask[16]; + size_t pos, bits, bit, topbits; + map bincstates; + map::iterator it; + byte_t bt; + topbits = 0; + + + for (uint64_t counter = 0; counter < 0x2000000; counter++) { + // Reset the current bitcount of correct bits + bits = 0; + + // Copy the state we are going to test + uint64_t rstate = counter; + + for (pos = 0; pos < 16; pos++) { + next_right_fast(0, &rstate); + bt = next_right_fast(0, &rstate) << 4; + next_right_fast(0, &rstate); + bt |= next_right_fast(0, &rstate); + + // xor the bits with the keystream and count the "correct" bits + bt ^= ks[pos]; + + // Save the mask for the left produced bits + tmp_mask[pos] = bt; + + for (bit = 0; bit < 8; bit++) { + // When the bit is xored away (=zero), it was the same, so correct ;) + if ((bt & 0x01) == 0) bits++; + bt >>= 1; + } + } + + if (bits > topbits) { + topbits = bits; + // Copy the winning mask + memcpy(mask, tmp_mask, 16); + } + + // Ignore states under 90 + if (bits >= 90) { + // Make sure the bits are used for ordering + bincstates[(((uint64_t)bits) << 56) | counter] = counter; + } + + if ((counter & 0xfffff) == 0) { + printf("."); + fflush(stdout); + } + } + printf("\n"); + + // Clear the candidate state vector + pcrstates->clear(); + + // Copy the order the states from lowest-bin to highest-bin + for (it = bincstates.begin(); it != bincstates.end(); ++it) { + pcrstates->push_back(it->second); + } + + // Reverse the vector order (so the higest bin comes first) + reverse(pcrstates->begin(), pcrstates->end()); + + return topbits; +} + +static inline void previous_all_input(vector *pcstates, uint32_t gc_byte_index, cipher_state_side css) { + byte_t btGc,in; + vector ncstates; + vector prev_ncstates; + vector::iterator it,itnew; + + // Loop through the complete entryphy of 5 bits for each candidate + // We ignore zero (xor 0x00) to avoid duplicates + for (btGc=0; btGc<0x20; btGc++) { + // Copy the original candidates that are supplied + ncstates = *pcstates; + + // Rollback the (candidate) cipher states with this input + if (css == CSS_RIGHT) { + in = btGc << 3; + previous_right(in,&ncstates); + } else { + in = btGc; + previous_left(in,&ncstates); + } + + for(itnew = ncstates.begin(); itnew != ncstates.end(); ++itnew) { + // Wipe away the invalid states + if (itnew->invalid == false) { + itnew->Gc[gc_byte_index] = in; + prev_ncstates.push_back(*itnew); + } + } + } + + // Copy the previous states into the vector + *pcstates = prev_ncstates; +} + +static inline void search_gc_candidates_right(const uint64_t rstate_before_gc, const uint64_t rstate_after_gc, const byte_t* Q, vector* pcstates) { + vector::iterator it; + vector csl_cand; + map matchbox; + map::iterator itmatch; + uint64_t rstate; + size_t counter; + cs_t state; + + // Generate 2^20 different (5 bits) values for the first 4 Gc bytes (0,1,2,3) + for (counter=0; counter<0x100000; counter++) { + rstate = rstate_before_gc; + next_right_fast((counter >> 12) & 0xf8,&rstate); + next_right_fast((counter >> 7) & 0xf8,&rstate); + next_right_fast(Q[4],&rstate); + next_right_fast((counter >> 2) & 0xf8,&rstate); + next_right_fast((counter << 3) & 0xf8,&rstate); + next_right_fast(Q[5],&rstate); + matchbox[rstate] = counter; + } + + // Reset and initialize the cryptostate and vecctor + memset(&state,0x00,sizeof(cs_t)); + state.invalid = false; + state.r = rstate_after_gc; + csl_cand.clear(); + csl_cand.push_back(state); + + // Generate 2^20(+splitting) different (5 bits) values for the last 4 Gc bytes (4,5,6,7) + previous_right(Q[7],&csl_cand); + previous_all_input(&csl_cand,7,CSS_RIGHT); + previous_all_input(&csl_cand,6,CSS_RIGHT); + previous_right(Q[6],&csl_cand); + previous_all_input(&csl_cand,5,CSS_RIGHT); + previous_all_input(&csl_cand,4,CSS_RIGHT); + + pcstates->clear(); + + // Take the intersection of the corresponding states ~2^15 values (40-25 = 15 bits) + for (it=csl_cand.begin();it!=csl_cand.end();++it) { + itmatch = matchbox.find(it->r); + if (itmatch != matchbox.end()) { + it->Gc[0] = (itmatch->second >> 12) & 0xf8; + it->Gc[1] = (itmatch->second >> 7) & 0xf8; + it->Gc[2] = (itmatch->second >> 2) & 0xf8; + it->Gc[3] = (itmatch->second << 3) & 0xf8; + + pcstates->push_back(*it); + } + } +} + +static inline void sm_left(const byte_t* ks, byte_t* mask, vector* pcstates) { + map bincstates; + map::iterator it; + uint64_t counter, lstate; + size_t pos, bits; + byte_t correct_bits[16]; + byte_t bt; + cs_t state; + lookup_entry* lookup; + + // Reset and initialize the cryptostate and vecctor + memset(&state, 0x00, sizeof(cs_t)); + state.invalid = false; + + for (counter = 0; counter < 0x800000000ull; counter++) { + lstate = counter; + + for (pos = 0; pos < 16; pos++) { + + lstate = (((lstate) >> 5)| ((uint64_t)left_addition[((lstate) & 0xf801f)] << 30)); + lookup = &(lookup_left[((lstate) & 0xf801f)]); + lstate = (((lstate) >> 5)| ((uint64_t)lookup->addition << 30)); + bt = lookup->out << 4; + lstate = (((lstate) >> 5)| ((uint64_t)left_addition[((lstate) & 0xf801f)] << 30)); + lookup = &(lookup_left[((lstate) & 0xf801f)]); + lstate = (((lstate) >> 5)| ((uint64_t)lookup->addition << 30)); + bt |= lookup->out; + + // xor the bits with the keystream and count the "correct" bits + bt ^= ks[pos]; + + // When the REQUIRED bits are NOT xored away (=zero), ignore this wrong state + if ((bt & mask[pos]) != 0) break; + + // Save the correct bits for statistical information + correct_bits[pos] = bt; + } + + // If we have parsed all 16 bytes of keystream, we have a valid CANDIDATE! + if (pos == 16) { + // Count the total correct bits + bits = 0; + for (pos = 0; pos < 16; pos++) { + // Get the next byte-value with correct bits + bt = correct_bits[pos]; + + // Count all the (correct) bits + // When the bit is xored away (=zero), it was the same, so correct ;) + if ((bt & 0x01) == 0) bits++; + if (((bt >> 1) & 0x01) == 0) bits++; + if (((bt >> 2) & 0x01) == 0) bits++; + if (((bt >> 3) & 0x01) == 0) bits++; + if (((bt >> 4) & 0x01) == 0) bits++; + if (((bt >> 5) & 0x01) == 0) bits++; + if (((bt >> 6) & 0x01) == 0) bits++; + if (((bt >> 7) & 0x01) == 0) bits++; + + } + + // Print the left candidate + // printf("%09llx (%d)\n",counter,bits); + printf("."); + fflush(stdout); + + state.l = counter; + // Make sure the bits are used for ordering + bincstates[(((uint64_t)bits)<<56) | counter] = state; + } + + if ((counter & 0xffffffffull) == 0) { + printf("%02.1f%%.", ((float)100/8)*(counter>>32)); + fflush(stdout); + } + } + + printf("100%%\n"); + + // Clear the candidate state vector + pcstates->clear(); + + // Copy the order the states from lowest-bin to highest-bin + for(it = bincstates.begin(); it != bincstates.end(); ++it) { + pcstates->push_back(it->second); + } + // Reverse the vector order (so the higest bin comes first) + reverse(pcstates->begin(), pcstates->end()); +} + +static inline void search_gc_candidates_left(const uint64_t lstate_before_gc, const byte_t* Q, vector* pcstates) { + vector csl_cand,csl_search; + vector::iterator itsearch,itcand; + map matchbox; + map::iterator itmatch; + uint64_t lstate; + size_t counter; + + // Generate 2^20 different (5 bits) values for the first 4 Gc bytes (0,1,2,3) + for (counter=0; counter < 0x100000; counter++) { + lstate = lstate_before_gc; + next_left_fast((counter >> 15) & 0x1f, &lstate); + next_left_fast((counter >> 10) & 0x1f, &lstate); + next_left_fast(Q[4], &lstate); + next_left_fast((counter >> 5) & 0x1f, &lstate); + next_left_fast(counter & 0x1f, &lstate); + next_left_fast(Q[5], &lstate); + matchbox[lstate] = counter; + } + + // Copy the input candidate states and clean the output vector + csl_cand = *pcstates; + pcstates->clear(); + + for (itcand = csl_cand.begin(); itcand != csl_cand.end(); ++itcand) { + csl_search.clear(); + csl_search.push_back(*itcand); + + // Generate 2^20(+splitting) different (5 bits) values for the last 4 Gc bytes (4,5,6,7) + previous_left(Q[7], &csl_search); + previous_all_input(&csl_search, 7, CSS_LEFT); + previous_all_input(&csl_search, 6, CSS_LEFT); + previous_left(Q[6], &csl_search); + previous_all_input(&csl_search, 5, CSS_LEFT); + previous_all_input(&csl_search, 4, CSS_LEFT); + + // Take the intersection of the corresponding states ~2^15 values (40-25 = 15 bits) + for(itsearch = csl_search.begin(); itsearch != csl_search.end(); ++itsearch) { + itmatch = matchbox.find(itsearch->l); + if (itmatch != matchbox.end()){ + itsearch->Gc[0] = (itmatch->second >> 15) & 0x1f; + itsearch->Gc[1] = (itmatch->second >> 10) & 0x1f; + itsearch->Gc[2] = (itmatch->second >> 5) & 0x1f; + itsearch->Gc[3] = itmatch->second & 0x1f; + + pcstates->push_back(*itsearch); + } + } + printf("."); + fflush(stdout); + } + printf("\n"); +} + +void combine_valid_left_right_states(vector* plcstates, vector* prcstates, vector* pgc_candidates) { + vector::iterator itl, itr; + size_t pos,count; + uint64_t gc; + bool valid; + + vector outer, inner; + if ( plcstates->size() > prcstates->size()) { + outer = *plcstates; + inner = *prcstates; + } else { + outer = *prcstates; + inner = *plcstates; + } + + printf("Outer " _YELLOW_("%lu")" , inner " _YELLOW_("%lu") "\n", outer.size(), inner.size()); + + // Clean up the candidate list + pgc_candidates->clear(); + count = 0; + for( itl = outer.begin(); itl != outer.end(); ++itl) { + for(itr = inner.begin(); itr != inner.end(); ++itr) { + valid = true; + // Check for left and right candidates that share the overlapping bits (8 x 2bits of Gc) + for (pos = 0; pos < 8; pos++) { + if ((itl->Gc[pos] & 0x18) != (itr->Gc[pos] & 0x18)) { + valid = false; + break; + } + } + + if (valid) { + gc = 0; + for (pos = 0; pos < 8; pos++) { + gc <<= 8; + gc |= (itl->Gc[pos] | itr->Gc[pos]); + } + + pgc_candidates->push_back(gc); + } + count++; + } + } + printf("Found a total of " _YELLOW_("%llu")" combinations, ",((unsigned long long)plcstates->size()) * prcstates->size()); + printf("but only " _GREEN_("%lu")" were valid!\n", pgc_candidates->size()); +} + +static void ice_compare( + uint8_t offset, + uint8_t skips, + vector* candidates, + crypto_state_t* ostate, + byte_t *Ci, + byte_t *Q, + byte_t *Ch, + byte_t *Ci_1 + ) { + byte_t Gc_chk[8]; + byte_t Ch_chk[ 8]; + byte_t Ci_1_chk[ 8]; + + for (std::size_t i = offset; i < candidates->size(); i += skips) { + if (key_found.load(std::memory_order_relaxed)) + break; + + uint64_t tkey = candidates->at(i); + num_to_bytes(tkey, 8, Gc_chk); + + sm_auth(Gc_chk, Ci, Q, Ch_chk, Ci_1_chk, ostate); + if ((memcmp(Ch_chk, Ch, 8) == 0) && (memcmp(Ci_1_chk, Ci_1, 8) == 0)) { + key_found = true; + key = tkey; + break; + } + } + return; +} + + +int main(int argc, const char* argv[]) { + size_t pos; + crypto_state_t ostate; + uint64_t rstate_before_gc, rstate_after_gc; + uint64_t lstate_before_gc; + vector rstates, lstates_after_gc, pgc_candidates; + vector::iterator itrstates, itgc; + vector crstates; + vector clcandidates, clstates; + vector::iterator it; + uint32_t rbits; + + // byte_t Gc[ 8] = {0x4f,0x79,0x4a,0x46,0x3f,0xf8,0x1d,0x81}; + // byte_t Gc[ 8] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; + // byte_t Ci[ 8] = {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff}; + // byte_t Q[ 8] = {0x12,0x34,0x56,0x78,0x12,0x34,0x56,0x78}; + byte_t Gc[ 8]; + byte_t Ci[ 8]; + byte_t Q[ 8]; + byte_t Ch[ 8]; + byte_t Ci_1[ 8]; + + // byte_t ks[16] = {0xde,0x88,0xc2,0xc9,0xee,0xd4,0x1b,0x46,0x1c,0x6a,0x92,0x50,0x76,0x1a,0xe9,0x87}; + // byte_t mask[16] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; + // byte_t mask[16] = {0x04,0xb0,0xe1,0x10,0xc0,0x33,0x44,0x20,0x20,0x00,0x70,0x8c,0x22,0x04,0x10,0x80}; + + byte_t ks[16]; + byte_t mask[16]; + + ui64 nCi; // Card random + ui64 nQ; // Reader random + ui64 nCh; // Reader challange + ui64 nCi_1; // Card anwser + + if ((argc != 2) && (argc != 5)) { + printf("SecureMemory recovery - (c) Radboud University Nijmegen\n\n"); + printf("syntax: sma_multi simulate\n"); + printf(" sma_multi \n\n"); + return 1; + } + + printf(_CYAN_("\nAuthentication info\n\n")); + + // Check if this is a simulation + if (argc == 2) { + // Generate random values for the key and randoms + srand((uint32_t)time(null)); + for (pos = 0; pos<8; pos++) { + Gc[pos] = rand(); + Ci[pos] = rand(); + Q[pos] = rand(); + } + sm_auth(Gc,Ci,Q,Ch,Ci_1,&ostate); + printf(" Gc: "); print_bytes(Gc,8); + } else { + sscanf(argv[1],"%016llx",&nCi); num_to_bytes(nCi,8,Ci); + sscanf(argv[2],"%016llx",&nQ); num_to_bytes(nQ,8,Q); + sscanf(argv[3],"%016llx",&nCh); num_to_bytes(nCh,8,Ch); + sscanf(argv[4],"%016llx",&nCi_1); num_to_bytes(nCi_1,8,Ci_1); + printf(" Gc: unknown\n"); + } + + for (pos = 0; pos<8; pos++) { + ks[2*pos] = Ci_1[pos]; + ks[(2*pos)+1] = Ch[pos]; + } + + printf(" Ci: "); print_bytes(Ci,8); + printf(" Q: "); print_bytes(Q,8); + printf(" Ch: "); print_bytes(Ch,8); + printf("Ci+1: "); print_bytes(Ci_1,8); + printf("\n"); + printf(" Ks: "); print_bytes(ks,16); + printf("\n"); + + printf("\nMultithreaded, will use " _YELLOW_("%u") " threads\n", g_num_cpus); + printf("Initializing lookup tables for increasing cipher speed\n"); + + std::thread foo_left(init_lookup_left); + std::thread foo_right(init_lookup_right); + std::thread foo_leftsub(init_lookup_left_substraction); + std::thread foo_rightsub(init_lookup_right_substraction); + + foo_left.join(); + foo_right.join(); + foo_leftsub.join(); + foo_rightsub.join(); + + // Load in the ci (tag-nonce), together with the first half of Q (reader-nonce) + rstate_before_gc = 0; + lstate_before_gc = 0; + + for (pos = 0; pos < 4; pos++) { + next_right_fast(Ci[2*pos ], &rstate_before_gc); + next_right_fast(Ci[2*pos+1], &rstate_before_gc); + next_right_fast(Q[pos], &rstate_before_gc); + + next_left_fast(Ci[2*pos ], &lstate_before_gc); + next_left_fast(Ci[2*pos+1], &lstate_before_gc); + next_left_fast(Q[pos], &lstate_before_gc); + } + + printf("Determing the right states that correspond to the keystream\n"); + //rbits = sm_right(ks, mask, &rstates); + rbits = ice_sm_right(ks, mask, &rstates); + + printf("Top-bin for the right state contains " _GREEN_("%d")" correct bits\n", rbits); + printf("Total count of right bins: " _YELLOW_("%lu") "\n", (unsigned long)rstates.size()); + + if (rbits < 96) { + printf(_RED_("\n WARNING!!! Better find another trace, the right top-bin is < 96 bits\n\n")); + } + + for (itrstates = rstates.begin(); itrstates != rstates.end(); ++itrstates) { + rstate_after_gc = *itrstates; + sm_left_mask(ks, mask, rstate_after_gc); + printf("Using the state from the top-right bin: " _YELLOW_("0x%07llx")"\n", (unsigned long long)rstate_after_gc); + + search_gc_candidates_right(rstate_before_gc, rstate_after_gc, Q, &crstates); + printf("Found " _YELLOW_("%lu")" right candidates using the meet-in-the-middle attack\n", crstates.size()); + if (crstates.size() == 0) continue; + + printf("Calculating left states using the (unknown bits) mask from the top-right state\n"); + //sm_left(ks, mask, &clstates); + ice_sm_left(ks, mask, &clstates); + + printf("Found a total of " _YELLOW_("%lu")" left cipher states, recovering left candidates...\n", clstates.size()); + if (clstates.size() == 0) continue; + search_gc_candidates_left(lstate_before_gc, Q, &clstates); + + + printf("The meet-in-the-middle attack returned " _YELLOW_("%lu")" left cipher candidates\n", clstates.size()); + if (clstates.size() == 0) continue; + + printf("Combining left and right states, disposing invalid combinations\n"); + combine_valid_left_right_states(&clstates, &crstates, &pgc_candidates); + + printf("Filtering the correct one using the middle part\n"); + + + key_found = ATOMIC_VAR_INIT(false); + + std::vector threads(g_num_cpus); + for (uint8_t m = 0; m < g_num_cpus; m++) { + threads[m] = std::thread( ice_compare, m, g_num_cpus, &pgc_candidates, &ostate, ref(Ci), ref(Q), ref(Ch), ref(Ci_1) ); + } + + for (auto& t : threads) { + t.join(); + } + + if (key_found) { + printf("\nFound valid key: " _GREEN_("%016lX")"\n\n", key.load()); + break; + } + + printf(_RED_("\nCould not find key using this right cipher state.\n\n")); + } + return 0; +} diff --git a/tools/cryptorf/test.sh b/tools/cryptorf/test.sh new file mode 100755 index 000000000..5fe828689 --- /dev/null +++ b/tools/cryptorf/test.sh @@ -0,0 +1,9 @@ +#!/bin/sh + +# harder test +time ./sma c2fa94a5231d14e1 d291eeef5f76e6df 586385693a9b0f2c ec9aba404505b0fa +time ./sma_multi c2fa94a5231d14e1 d291eeef5f76e6df 586385693a9b0f2c ec9aba404505b0fa + +# simpler +time ./sma ffffffffffffffff 1234567812345678 88c9d4466a501a87 dec2ee1b1c9276e9 +time ./sma_multi ffffffffffffffff 1234567812345678 88c9d4466a501a87 dec2ee1b1c9276e9 diff --git a/tools/cryptorf/util.c b/tools/cryptorf/util.c new file mode 100644 index 000000000..4da252ab5 --- /dev/null +++ b/tools/cryptorf/util.c @@ -0,0 +1,23 @@ +#include "util.h" +#include + +void num_to_bytes(uint64_t n, size_t len, byte_t* dst) +{ + while (len--) + { + dst[len] = (byte_t)n; + n >>= 8; + } +} + +void print_bytes(const byte_t* pbtData, const size_t szLen) { + size_t uiPos; + for (uiPos=0; uiPos < szLen; uiPos++) { + printf("%02x ",pbtData[uiPos]); + if (uiPos>20){ + printf("..."); + break; + } + } + printf("\n"); +} diff --git a/tools/cryptorf/util.h b/tools/cryptorf/util.h new file mode 100644 index 000000000..68a16ecf1 --- /dev/null +++ b/tools/cryptorf/util.h @@ -0,0 +1,43 @@ +/* + * + * Various Utilities + * + * Copyright (C) 2010, Flavio D. Garcia, Peter van Rossum, Roel Verdult + * and Ronny Wichers Schreur. Radboud University Nijmegen + * + * 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 3 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, see . + * + */ + +#ifndef _UTIL_H_ +#define _UTIL_H_ + +#include +#include "defines.h" + + +#define AEND "\x1b[0m" + +#define _BLUE_(s) "\x1b[34m" s AEND +#define _RED_(s) "\x1b[31m" s AEND +#define _GREEN_(s) "\x1b[32m" s AEND +#define _YELLOW_(s) "\x1b[33m" s AEND +#define _MAGENTA_(s) "\x1b[35m" s AEND +#define _CYAN_(s) "\x1b[36m" s AEND +#define _WHITE_(s) "\x1b[37m" s AEND + +void num_to_bytes(uint64_t n, size_t len, byte_t* dst); +void print_bytes(const byte_t* pbtData, const size_t szLen); + +#endif // _UTIL_H_ From 5525cefd190d19b5e06b628c1e632fe04e73b028 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 19 Aug 2020 15:25:50 +0200 Subject: [PATCH 0238/1047] commented out crf since it needs to be adapted for a modern libnfc --- tools/cryptorf/Makefile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tools/cryptorf/Makefile b/tools/cryptorf/Makefile index 3dd27d3ab..55842bd32 100644 --- a/tools/cryptorf/Makefile +++ b/tools/cryptorf/Makefile @@ -10,7 +10,8 @@ LXXFLAGS = -lpthread OBJS = cryptolib.o util.o HEADERS = cryptolib.h util.h SRC = cryptolib.c util.c -EXES = cm sm sma sma_multi crf +EXES = cm sm sma sma_multi +#EXES = cm sm sma sma_multi crf all: $(OBJS) $(EXES) From ea86edc723909f2072a0f08f0127aa4bbc2e0ce8 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 19 Aug 2020 16:11:44 +0200 Subject: [PATCH 0239/1047] reverse a check change --- armsrc/iso15693.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/armsrc/iso15693.c b/armsrc/iso15693.c index da9501ecd..991a21a0e 100644 --- a/armsrc/iso15693.c +++ b/armsrc/iso15693.c @@ -716,7 +716,7 @@ int GetIso15693AnswerFromTag(uint8_t *response, uint16_t max_len, uint16_t timeo if (dt->lastBit == SOF_PART2) { *eof_time -= (8 * 16); // needed 8 additional samples to confirm single SOF (iCLASS) } - if (dt->len >= dt->max_len) { + if (dt->len > dt->max_len) { ret = -2; // buffer overflow Dbprintf("overflow (%d >= %d", dt->len, dt->max_len); } From 815e004b8d870794f48ca9e76c5ad56bdf1ce7a3 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 19 Aug 2020 16:22:56 +0200 Subject: [PATCH 0240/1047] log zero length responses again... sof.. --- armsrc/iso15693.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/armsrc/iso15693.c b/armsrc/iso15693.c index 991a21a0e..8e01c9555 100644 --- a/armsrc/iso15693.c +++ b/armsrc/iso15693.c @@ -718,7 +718,7 @@ int GetIso15693AnswerFromTag(uint8_t *response, uint16_t max_len, uint16_t timeo } if (dt->len > dt->max_len) { ret = -2; // buffer overflow - Dbprintf("overflow (%d >= %d", dt->len, dt->max_len); + Dbprintf("overflow (%d > %d", dt->len, dt->max_len); } break; } @@ -755,9 +755,8 @@ int GetIso15693AnswerFromTag(uint8_t *response, uint16_t max_len, uint16_t timeo if (ret < 0) { return ret; } - if (dt->len > 0) { - LogTrace_ISO15693(dt->output, dt->len, (sof_time * 4), (*eof_time * 4), NULL, false); - } + + LogTrace_ISO15693(dt->output, dt->len, (sof_time * 4), (*eof_time * 4), NULL, false); return dt->len; } From b273a6c831c44fd077f050580254da82bf095195 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 19 Aug 2020 16:26:26 +0200 Subject: [PATCH 0241/1047] reverse length check --- armsrc/iso15693.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/armsrc/iso15693.c b/armsrc/iso15693.c index 8e01c9555..428cf80ff 100644 --- a/armsrc/iso15693.c +++ b/armsrc/iso15693.c @@ -515,7 +515,7 @@ static RAMFUNC int Handle15693SamplesFromTag(uint16_t amplitude, DecodeTag_t *ta tag->output[tag->len] = tag->shiftReg; tag->len++; - if (tag->len >= tag->max_len) { + if (tag->len > tag->max_len) { // buffer overflow, give up LED_C_OFF(); return true; @@ -540,7 +540,7 @@ static RAMFUNC int Handle15693SamplesFromTag(uint16_t amplitude, DecodeTag_t *ta tag->output[tag->len] = tag->shiftReg; tag->len++; - if (tag->len >= tag->max_len) { + if (tag->len > tag->max_len) { // buffer overflow, give up tag->posCount = 0; tag->previous_amplitude = amplitude; From 9cbf6c441ee2ab1da01a306cc42c0ab604e0f536 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 19 Aug 2020 16:41:28 +0200 Subject: [PATCH 0242/1047] fix - running esave after fchk gave empty accessrights --- armsrc/mifarecmd.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/armsrc/mifarecmd.c b/armsrc/mifarecmd.c index 9e19cbc53..d99698ba8 100644 --- a/armsrc/mifarecmd.c +++ b/armsrc/mifarecmd.c @@ -1644,7 +1644,7 @@ OUT: bar |= ((uint16_t)(found[m] & 1) << j++); } - uint8_t *tmp = BigBuf_malloc(480 + 10); + uint8_t *tmp = BigBuf_malloc(480 + 10); memcpy(tmp, k_sector, sectorcnt * sizeof(sector_t)); num_to_bytes(foo, 8, tmp + 480); tmp[488] = bar & 0xFF; @@ -1974,7 +1974,7 @@ int MifareECardLoad(uint8_t sectorcnt, uint8_t keytype) { emlSetMem(dataoutbuf, FirstBlockOfSector(sectorNo) + blockNo, 1); } else { // sector trailer, keep the keys, set only the AC emlGetMem(dataoutbuf2, FirstBlockOfSector(sectorNo) + blockNo, 1); - memcpy(&dataoutbuf2[6], &dataoutbuf[6], 4); + memcpy(dataoutbuf2 + 6, dataoutbuf + 6, 4); emlSetMem(dataoutbuf2, FirstBlockOfSector(sectorNo) + blockNo, 1); } } From 9ade745f07a8ae90a4a6b700fbb7666e2ef0a39a Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Wed, 19 Aug 2020 21:38:21 +0200 Subject: [PATCH 0243/1047] rework cryptorf --- Makefile.defs | 1 + Makefile.host | 22 ++- common/cryptorf/cryptolib.c | 367 +++++++++++++++++++++++++++++++++++ common/cryptorf/cryptolib.h | 60 ++++++ tools/cryptorf/Makefile | 46 ++--- tools/cryptorf/cm.c | 45 +++-- tools/cryptorf/crf.c | 294 ---------------------------- tools/cryptorf/cryptolib.c | 359 ---------------------------------- tools/cryptorf/cryptolib.h | 56 ------ tools/cryptorf/defines.h | 36 ---- tools/cryptorf/laundry.sh | 2 - tools/cryptorf/sm.c | 32 +-- tools/cryptorf/sma.cpp | 147 +++++++------- tools/cryptorf/sma_multi.cpp | 174 +++++++++-------- tools/cryptorf/util.c | 18 +- tools/cryptorf/util.h | 19 +- 16 files changed, 693 insertions(+), 985 deletions(-) create mode 100644 common/cryptorf/cryptolib.c create mode 100644 common/cryptorf/cryptolib.h delete mode 100644 tools/cryptorf/crf.c delete mode 100644 tools/cryptorf/cryptolib.c delete mode 100644 tools/cryptorf/cryptolib.h delete mode 100644 tools/cryptorf/defines.h delete mode 100755 tools/cryptorf/laundry.sh diff --git a/Makefile.defs b/Makefile.defs index fb8a7a45b..1c702930a 100644 --- a/Makefile.defs +++ b/Makefile.defs @@ -48,6 +48,7 @@ else RANLIB= ranlib endif +DEFCXXFLAGS = -Wall -Werror -O3 -pipe DEFCFLAGS = -Wall -Werror -O3 -fstrict-aliasing -pipe # Some more warnings we want as errors: DEFCFLAGS += -Wbad-function-cast -Wredundant-decls -Wmissing-prototypes -Wchar-subscripts -Wshadow -Wundef -Wwrite-strings -Wunused -Wuninitialized -Wpointer-arith -Winline -Wformat -Wformat-security -Winit-self -Wmissing-include-dirs -Wnested-externs -Wmissing-declarations -Wempty-body -Wignored-qualifiers -Wmissing-field-initializers -Wtype-limits -Wold-style-definition diff --git a/Makefile.host b/Makefile.host index 07b8c2199..e374a9294 100644 --- a/Makefile.host +++ b/Makefile.host @@ -17,6 +17,8 @@ endif CFLAGS ?= $(DEFCFLAGS) CFLAGS += $(MYDEFS) $(MYCFLAGS) $(MYINCLUDES) +CXXFLAGS ?= $(DEFCXXFLAGS) +CXXFLAGS += $(MYDEFS) $(MYCXXFLAGS) $(MYINCLUDES) LDFLAGS += $(MYLDFLAGS) LDLIBS += $(MYLDLIBS) @@ -31,6 +33,7 @@ BINDIR := . OBJDIR := obj MYOBJS ?= $(MYSRCS:%.c=$(OBJDIR)/%.o) +MYCXXOBJS ?= $(MYCXXSRCS:%.cpp=$(OBJDIR)/%.o) CLEAN = $(foreach bin,$(MYLIBS) $(BINS) $(LIB_A),$(BINDIR)/$(bin)) all: $(foreach bin,$(MYLIBS) $(BINS) $(LIB_A),$(BINDIR)/$(bin)) @@ -61,24 +64,31 @@ endif .PHONY: all clean install uninstall -$(BINDIR)/$(LIB_A): $(MYOBJS) +$(BINDIR)/$(LIB_A): $(MYOBJS) $(MYCXXOBJS) $(info [=] AR $(notdir $@)) - $(Q)$(AR) $@ $(MYOBJS) + $(Q)$(AR) $@ $(MYOBJS) $(MYCXXOBJS) $(Q)$(RANLIB) $@ -$(BINDIR)/% : $(OBJDIR)/%.o $(MYOBJS) $(MYLIBS) +$(BINDIR)/% : $(OBJDIR)/%.o $(MYOBJS) $(MYCXXOBJS) $(MYLIBS) $(info [=] LD $(notdir $@)) - $(Q)$(LD) $(LDFLAGS) $(MYOBJS) $< -o $@ $(MYLIBS) $(MYLDLIBS) + $(Q)$(LD) $(LDFLAGS) $(MYOBJS) $(MYCXXOBJS) $< -o $@ $(MYLIBS) $(MYLDLIBS) -$(OBJDIR)/%.o : %.c | $(OBJDIR) +%.o: %.c +$(OBJDIR)/%.o : %.c $(OBJDIR)/%.d | $(OBJDIR) $(info [-] CC $<) $(Q)$(CC) $(DEPFLAGS) $(CFLAGS) -c -o $@ $< $(Q)$(POSTCOMPILE) +%.o: %.cpp +$(OBJDIR)/%.o : %.cpp $(OBJDIR)/%.d | $(OBJDIR) + $(info [-] CXX $<) + $(Q)$(CXX) $(DEPFLAGS) $(CXXFLAGS) -c -o $@ $< + $(Q)$(POSTCOMPILE) + $(OBJDIR): $(Q)$(MKDIR) $(OBJDIR) -DEPENDENCY_FILES = $(MYOBJS:%.o=%.d) $(BINS:%=$(OBJDIR)/%.d) +DEPENDENCY_FILES = $(MYOBJS:%.o=%.d) $(MYCXXOBJS:%.o=%.d) $(BINS:%=$(OBJDIR)/%.d) $(DEPENDENCY_FILES): ; .PRECIOUS: $(DEPENDENCY_FILES) diff --git a/common/cryptorf/cryptolib.c b/common/cryptorf/cryptolib.c new file mode 100644 index 000000000..26b07f824 --- /dev/null +++ b/common/cryptorf/cryptolib.c @@ -0,0 +1,367 @@ +/* + * + * SecureMemory, CryptoMemory and CryptoRF library + * + * Copyright (C) 2010, Flavio D. Garcia, Peter van Rossum, Roel Verdult + * and Ronny Wichers Schreur. Radboud University Nijmegen + * + * 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 3 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, see . + * + */ + +#include "cryptolib.h" +#include +#include +#include +#include + +typedef enum { + CA_ENCRYPT = 0x01, + CA_DECRYPT = 0x02 +} CryptoAction; + +int counter = 0; + +static uint8_t nibbles_to_byte(nibble b0, nibble b1) +{ + // Combine both nibbles + return ((b0 << 4) | b1); +} + +static uint8_t funny_mod(uint8_t a, uint8_t m) +{ + // Just return the input when this is less or equal than the modular value + if (a < m) return a; + + // Compute the modular value + a %= m; + + // Return the funny value, when the output was now zero, return the modular value + return (a == 0) ? m : a; +} + +static uint8_t bit_rotate_left(uint8_t a, uint8_t n_bits) +{ + // Rotate value a with the length of n_bits only 1 time + uint8_t mask = (1 << n_bits) - 1; + return ((a << 1) | (a >> (n_bits - 1))) & mask; +} + +/* +static void reconstruct_nibbles(crypto_state s) +{ + uint8_t b1, b5, b8, b15, b18; + uint8_t b0, b4, b7, b14, b17; + + // Extract the bytes that generated the "previous" nibble + b1 = (uint8_t)((s->l >> 25) & 0x1f); + b5 = (uint8_t)((s->l >> 5) & 0x1f); + b8 = (uint8_t)((s->m >> 35) & 0x1f); + b15 = (uint8_t)((s->r >> 15) & 0x1f); + b18 = (uint8_t)(s->r & 0x1f); + + // Reconstruct the b0 nibble + s->b0 = ((b1 ^ b5) & 0x0f) & ~(b8); + s->b0 |= ((b15 ^ b18) & 0x0f) & b8; + + // Extract the bytes for the current nibble + b0 = (uint8_t)((s->l >> 30) & 0x1f); + b4 = (uint8_t)((s->l >> 10) & 0x1f); + b7 = (uint8_t)((s->m >> 42) & 0x1f); + b14 = (uint8_t)((s->r >> 20) & 0x1f); + b17 = (uint8_t)((s->r >> 5) & 0x1f); + + // Construct the values for b1 generation + s->b1l = ((b0 ^ b4) & 0x0f); + s->b1r = ((b14 ^ b17) & 0x0f); + s->b1s = b7; + + // Reconstruct the b1 nibble + s->b1 = s->b1l & ~(s->b1s); + s->b1 |= s->b1r & s->b1s; +} +*/ +static void next_left(uint8_t in, crypto_state s) +{ + uint8_t b3, b6, bx; + + // Update the left cipher state with the input byte + s->l ^= ((in & 0x1f) << 20); + + // Extract the two (5 bits) values used for modular addtion + b3 = (uint8_t)((s->l >> 15) & 0x1f); + b6 = (uint8_t)(s->l & 0x1f); + + // Compute the modular addition + bx = funny_mod(b3 + bit_rotate_left(b6, 5), 0x1f); + + // Rotate the left cipher state 5 bits + s->l = ((s->l >> 5) | ((uint64_t)bx << 30)); + + // Save the 4 left output bits used for b1 + s->b1l = ((bx ^ b3) & 0x0f); +} + +static void next_right(uint8_t in, crypto_state s) +{ + uint8_t b16, b18, bx; + + // Update the right cipher state with the input byte + s->r ^= ((in & 0xf8) << 12); + + // Extract the two (5 bits) values used for modular addtion + b16 = (uint8_t)((s->r >> 10) & 0x1f); + b18 = (uint8_t)(s->r & 0x1f); + + // Compute the modular addition + bx = funny_mod(b18 + b16, 0x1f); + + // Rotate the right cipher state 5 bits + s->r = ((s->r >> 5) | ((uint64_t)bx << 20)); + + // Save the 4 right output bits used for b1 + s->b1r = ((bx ^ b16) & 0x0f); +} + +static void next_middle(uint8_t in, crypto_state s) +{ + uint8_t b12, b13, bx; + + // Update the middle cipher state with the input byte + s->m ^= (((((uint64_t)in << 3) & 0x7f) | (in >> 5)) << 14); + + // Extract the two (7 bits) values used for modular addtion + b12 = (uint8_t)((s->m >> 7) & 0x7f); + b13 = (uint8_t)(s->m & 0x7f); + + // Compute the modular addition + bx = (funny_mod(b12 + bit_rotate_left(b13, 7), 0x7f)); + + // Rotate the middle cipher state 7 bits + s->m = ((s->m >> 7) | ((uint64_t)bx << 42)); + + // Save the 4 middle selector bits used for b1 + s->b1s = bx & 0x0f; +} + +static void next(const bool feedback, uint8_t in, crypto_state s) +{ + // Initialize the (optional) input parameter + uint8_t a = in; + + // Only Cryptomemory uses feedback + if (feedback) { + // Construct the cipher update 'a' from (input ^ feedback) + a = in ^ nibbles_to_byte(s->b0, s->b1); + } + + // Shift the cipher state + next_left(a, s); + next_middle(a, s); + next_right(a, s); + + // For active states we can use the available (previous) 'b1' nibble, + // otherwise use reconstruct_nibbles() to generate them + // reconstruct_nibbles(s) + + // The nible from b1 shifts to b0 + s->b0 = s->b1; + + // Construct the new value of nible b1 + s->b1 = s->b1l & ~(s->b1s); + s->b1 |= s->b1r & s->b1s; +} + +static void next_n(const bool feedback, size_t n, uint8_t in, crypto_state s) +{ + // While n-rounds left, shift the cipher + while (n--) next(feedback, in, s); +} + +static void initialize(const bool feedback, const uint8_t *Gc, const uint8_t *Ci, const uint8_t *Q, const size_t n, crypto_state s) +{ + size_t pos; + + // Reset the cipher state + memset(s, 0x00, sizeof(crypto_state_t)); + + // Load in the ci (tag-nonce), together with the first half of Q (reader-nonce) + for (pos = 0; pos < 4; pos++) { + next_n(feedback, n, Ci[2 * pos ], s); + next_n(feedback, n, Ci[2 * pos + 1], s); + next(feedback, Q[pos], s); + } + + // Load in the diversified key (Gc), together with the second half of Q (reader-nonce) + for (pos = 0; pos < 4; pos++) { + next_n(feedback, n, Gc[2 * pos ], s); + next_n(feedback, n, Gc[2 * pos + 1], s); + next(feedback, Q[pos + 4], s); + } +} + +static uint8_t cm_byte(crypto_state s) +{ + // Construct keystream byte by combining both nibbles + return nibbles_to_byte(s->b0, s->b1); +} + +static uint8_t sm_byte(crypto_state s) +{ + uint8_t ks; + + // Construct keystream byte by combining 2 parts from 4 nibbles + next_n(false, 2, 0, s); + ks = s->b1 << 4; + next_n(false, 2, 0, s); + ks |= s->b1; + + return ks; +} + +void print_crypto_state(const char *text, crypto_state s) +{ + int pos; + + printf("%s", text); + for (pos = 6; pos >= 0; pos--) + printf(" %02x", (uint8_t)(s->l >> (pos * 5)) & 0x1f); + + printf(" |"); + for (pos = 6; pos >= 0; pos--) + printf(" %02x", (uint8_t)(s->m >> (pos * 7)) & 0x7f); + + printf(" |"); + for (pos = 4; pos >= 0; pos--) + printf(" %02x", (uint8_t)(s->r >> (pos * 5)) & 0x1f); + + printf(" | %02x", cm_byte(s)); + printf("\n"); +} + +void sm_auth(const uint8_t *Gc, const uint8_t *Ci, const uint8_t *Q, uint8_t *Ch, uint8_t *Ci_1, crypto_state s) +{ + size_t pos; + + initialize(false, Gc, Ci, Q, 1, s); + + // Generate challange answer for Tag and Reader + for (pos = 0; pos < 8; pos++) { + Ci_1[pos] = sm_byte(s); + Ch[pos] = sm_byte(s); + } +} + +void cm_auth(const uint8_t *Gc, const uint8_t *Ci, const uint8_t *Q, uint8_t *Ch, uint8_t *Ci_1, uint8_t *Ci_2, crypto_state s) +{ + size_t pos; + + initialize(true, Gc, Ci, Q, 3, s); + + // Construct the reader-answer (challange) + next_n(true, 6, 0, s); + Ch[0] = cm_byte(s); + for (pos = 1; pos < 8; pos++) { + next_n(true, 7, 0, s); + Ch [pos] = cm_byte(s); + } + + // Construct the tag-answer (Ci+1 = ff .. .. .. .. .. .. ..) + Ci_1[0] = 0xff; + for (pos = 1; pos < 8; pos++) { + next_n(true, 2, 0, s); + Ci_1[pos] = cm_byte(s); + } + + // Construct the session key (Ci+2) + for (pos = 0; pos < 8; pos++) { + next_n(true, 2, 0, s); + Ci_2[pos] = cm_byte(s); + } + + // Prepare the cipher for encryption by shifting 3 more times + next_n(true, 3, 0, s); +} + +static void cm_crypt(const CryptoAction ca, const uint8_t offset, const uint8_t len, const uint8_t *in, uint8_t *out, crypto_state s) +{ + size_t pos; + uint8_t bt; + + next_n(true, 5, 0, s); + next(true, offset, s); + next_n(true, 5, 0, s); + next(true, len, s); + for (pos = 0; pos < len; pos++) { + // Perform the crypto operation + bt = in[pos] ^ cm_byte(s); + + // Generate output + if (out) out[pos] = bt; + + // Detect where to find the plaintext for loading into cipher state + if (ca == CA_DECRYPT) { + next(true, bt, s); + } else { + next(true, in[pos], s); + } + + // Shift the cipher state 5 times + next_n(true, 5, 0, s); + } +} + +void cm_encrypt(const uint8_t offset, const uint8_t len, const uint8_t *ct, uint8_t *pt, crypto_state s) +{ + next_n(true, 5, 0, s); + next(true, 0, s); + cm_crypt(CA_ENCRYPT, offset, len, ct, pt, s); +} + +void cm_decrypt(const uint8_t offset, const uint8_t len, const uint8_t *ct, uint8_t *pt, crypto_state s) +{ + next_n(true, 5, 0, s); + next(true, 0, s); + cm_crypt(CA_DECRYPT, offset, len, ct, pt, s); +} + +void cm_grind_read_system_zone(const uint8_t offset, const uint8_t len, const uint8_t *pt, crypto_state s) +{ + cm_crypt(CA_ENCRYPT, offset, len, pt, NULL, s); +} + +void cm_grind_set_user_zone(const uint8_t zone, crypto_state s) +{ + next(true, zone, s); +} + +void cm_mac(uint8_t *mac, crypto_state s) +{ + next_n(true, 10, 0, s); + if (mac) + mac[0] = cm_byte(s); + + next_n(true, 5, 0, s); + if (mac) + mac[1] = cm_byte(s); +} + +void cm_password(const uint8_t *pt, uint8_t *ct, crypto_state s) +{ + for (size_t pos = 0; pos < 3; pos++) { + next_n(true, 5, pt[pos], s); + ct[pos] = cm_byte(s); + } +} + diff --git a/common/cryptorf/cryptolib.h b/common/cryptorf/cryptolib.h new file mode 100644 index 000000000..0f31d8870 --- /dev/null +++ b/common/cryptorf/cryptolib.h @@ -0,0 +1,60 @@ +/* + * + * SecureMemory, CryptoMemory and CryptoRF library + * + * Copyright (C) 2010, Flavio D. Garcia, Peter van Rossum, Roel Verdult + * and Ronny Wichers Schreur. Radboud University Nijmegen + * + * 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 3 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, see . + * + */ + +#ifndef _CRYPTOLIB_H_ +#define _CRYPTOLIB_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +// A nibble is actually only 4 bits, but there is no such type ;) +typedef uint8_t nibble; + +typedef struct { + uint64_t l; + uint64_t m; + uint64_t r; + nibble b0; + nibble b1; + nibble b1l; + nibble b1r; + nibble b1s; +} crypto_state_t; +typedef crypto_state_t *crypto_state; + +void print_crypto_state(const char *text, crypto_state s); +void sm_auth(const uint8_t *Gc, const uint8_t *Ci, const uint8_t *Q, uint8_t *Ch, uint8_t *Ci_1, crypto_state s); +void cm_auth(const uint8_t *Gc, const uint8_t *Ci, const uint8_t *Q, uint8_t *Ch, uint8_t *Ci_1, uint8_t *Ci_2, crypto_state s); +void cm_encrypt(const uint8_t offset, const uint8_t len, const uint8_t *pt, uint8_t *ct, crypto_state s); +void cm_decrypt(const uint8_t offset, const uint8_t len, const uint8_t *ct, uint8_t *pt, crypto_state s); +void cm_grind_read_system_zone(const uint8_t offset, const uint8_t len, const uint8_t *pt, crypto_state s); +void cm_grind_set_user_zone(const uint8_t zone, crypto_state s); +void cm_mac(uint8_t *mac, crypto_state s); +void cm_password(const uint8_t *pt, uint8_t *ct, crypto_state s); + +#ifdef __cplusplus +} +#endif +#endif // _CRYPTOLIB_H_ diff --git a/tools/cryptorf/Makefile b/tools/cryptorf/Makefile index 55842bd32..5ff3250e6 100644 --- a/tools/cryptorf/Makefile +++ b/tools/cryptorf/Makefile @@ -1,31 +1,23 @@ -CC = gcc -CXX = g++ -LD = gcc -LXX = g++ -CFLAGS = -W -Wall -O4 -CXXFLAGS = -W -Wall -O4 -std=c++11 -LDFLAGS = -LXXFLAGS = -lpthread +MYSRCPATHS = ../../common ../../common/cryptorf +MYSRCS = cryptolib.c util.c +MYINCLUDES = -I../../common/cryptorf +MYCFLAGS = +MYDEFS = +MYLDLIBS = -lpthread -OBJS = cryptolib.o util.o -HEADERS = cryptolib.h util.h -SRC = cryptolib.c util.c -EXES = cm sm sma sma_multi -#EXES = cm sm sma sma_multi crf +BINS = cm sm sma sma_multi +INSTALLTOOLS = $(BINS) -all: $(OBJS) $(EXES) +include ../../Makefile.host -%.o : %.c - $(CC) $(CFLAGS) -c -o $@ $< +# checking platform can be done only after Makefile.host +ifneq (,$(findstring MINGW,$(platform))) + # Mingw uses by default Microsoft printf, we want the GNU printf (e.g. for %z) + # and setting _ISOC99_SOURCE sets internally __USE_MINGW_ANSI_STDIO=1 + CFLAGS += -D_ISOC99_SOURCE +endif -% : %.c $(OBJS) - $(LD) $(CFLAGS) $(LDFLAGS) -o $@ $< $(OBJS) - -% : %.cpp $(SRC) - $(LXX) $(CXXFLAGS) -o $@ $< $(SRC) $(LXXFLAGS) - -crf: crf.c $(OBJS) - $(LD) $(CFLAGS) $(LDFLAGS) -o crf $< $(OBJS) -lnfc - -clean: - rm -f $(OBJS) $(EXES) crf +cm : $(OBJDIR)/cm.o $(MYOBJS) +sm : $(OBJDIR)/sm.o $(MYOBJS) +sma : $(OBJDIR)/sma.o $(MYOBJS) +sma_multi : $(OBJDIR)/sma_multi.o $(MYOBJS) diff --git a/tools/cryptorf/cm.c b/tools/cryptorf/cm.c index 14e32844a..87e577b36 100644 --- a/tools/cryptorf/cm.c +++ b/tools/cryptorf/cm.c @@ -20,9 +20,16 @@ * */ -#include "defines.h" +#include +#include +#include #include "cryptolib.h" #include "util.h" +#ifdef _MSC_VER + // avoid scanf warnings in Visual Studio + #define _CRT_SECURE_NO_WARNINGS + #define _CRT_SECURE_NO_DEPRECATE +#endif int main(int argc, const char* argv[]) { @@ -30,24 +37,24 @@ int main(int argc, const char* argv[]) crypto_state_t s; // Main authentication values - byte_t Q[8]; // Reader key-auth random - byte_t Gc[8]; // Secret seed - byte_t Ci[8]; // Card random (last state) - byte_t Ch[8]; // Reader answer (challenge) - byte_t Ci_1[8]; // Card answer - byte_t Ci_2[8]; // Session key + uint8_t Q[8]; // Reader key-auth random + uint8_t Gc[8]; // Secret seed + uint8_t Ci[8]; // Card random (last state) + uint8_t Ch[8]; // Reader answer (challenge) + uint8_t Ci_1[8]; // Card answer + uint8_t Ci_2[8]; // Session key // Session authentication values - byte_t Qs[8]; // Reader session-auth random - byte_t Chs[8]; // Reader session-answer (challenge) - byte_t Ci_1s[8]; // Card answer for session - byte_t Ci_2s[8]; // Is this used? + uint8_t Qs[8]; // Reader session-auth random + uint8_t Chs[8]; // Reader session-answer (challenge) + uint8_t Ci_1s[8]; // Card answer for session + uint8_t Ci_2s[8]; // Is this used? // Various argument options - ui64 nGc; // Card secret - ui64 nCi; // Card random - ui64 nQ; // Reader main-random - ui64 nQs; // Reader session-random + uint64_t nGc; // Card secret + uint64_t nCi; // Card random + uint64_t nQ; // Reader main-random + uint64_t nQs; // Reader session-random // Show header and help syntax printf("CryptoMemory simulator - (c) Radboud University Nijmegen\n"); @@ -58,10 +65,10 @@ int main(int argc, const char* argv[]) } // Parse arguments - sscanf(argv[1],"%016llx",&nGc); num_to_bytes(nGc,8,Gc); - sscanf(argv[2],"%016llx",&nCi); num_to_bytes(nCi,8,Ci); - sscanf(argv[3],"%016llx",&nQ); num_to_bytes(nQ,8,Q); - sscanf(argv[4],"%016llx",&nQs); num_to_bytes(nQs,8,Qs); + sscanf(argv[1],"%016" SCNx64,&nGc); num_to_bytes(nGc,8,Gc); + sscanf(argv[2],"%016" SCNx64,&nCi); num_to_bytes(nCi,8,Ci); + sscanf(argv[3],"%016" SCNx64,&nQ); num_to_bytes(nQ,8,Q); + sscanf(argv[4],"%016" SCNx64,&nQs); num_to_bytes(nQs,8,Qs); // Calculate authentication cm_auth(Gc,Ci,Q,Ch,Ci_1,Ci_2,&s); diff --git a/tools/cryptorf/crf.c b/tools/cryptorf/crf.c deleted file mode 100644 index 044acce05..000000000 --- a/tools/cryptorf/crf.c +++ /dev/null @@ -1,294 +0,0 @@ -/* - * - * CryptoRF simulation - * - * Copyright (C) 2010, Flavio D. Garcia, Peter van Rossum, Roel Verdult - * and Ronny Wichers Schreur. Radboud University Nijmegen - * - * 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 3 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, see . - * - */ - -#include "defines.h" -#include -#include -#include -#include "cryptolib.h" -#include "util.h" - -// ~dirty globals for lazy use of libnfc -static dev_info* pdi; // NFC device info -static tag_info ti; // Tag info (card serial, etc.) -byte_t abtRx[MAX_FRAME_LEN]; // Communication buffer -size_t szRxLen; // Length of communication buffer - -void print_decryption(const byte_t* ct, const byte_t* pt, size_t len) { - size_t pos,count; - - for (count = 0; count < len; count += 8) { - printf(" "); - for (pos = 0; pos < 8; pos++){ - if ((count+pos) "); - for (pos = 0; pos < 8; pos++) { - if ((count + pos) < len) { - printf("%02x ", pt[count + pos]); - } else { - printf(" "); - } - } - printf("\n"); - } -} - -bool transmit_bytes(const byte_t* pbtTx, const size_t szTxLen) { - printf("R: "); - print_bytes(pbtTx, szTxLen); - - // Transmit the command bytes - if (!nfc_initiator_transceive_bytes(pdi, pbtTx, szTxLen, abtRx, (uint32_t*)&szRxLen)) { - printf("\nERROR: Communication failed\n\n"); - nfc_disconnect(pdi); - exit(1); - } - - printf("T: "); - print_bytes(abtRx, szRxLen); - - // Succesful transfer - return true; -} - - -#define PWD_NOT_USED (uint32_t)(~0) - -int main(int argc, char* argv[]) { - // Various parameters - crypto_state_t s; // Cryptomemory state - size_t pos; // Position counter - - // Main authentication values - byte_t Q[8]; // Reader key-auth random - byte_t Gc[8]; // Secret seed - byte_t Ci[8]; // Card random (last state) - byte_t Ch[8]; // Reader answer (challenge) - byte_t Ci_1[8]; // Card answer - byte_t Ci_2[8]; // Session key - - // Session authentication values - byte_t Qs[8]; // Reader session-auth random - byte_t Chs[8]; // Reader session-answer (challenge) - byte_t Ci_1s[8]; // Card answer for session - byte_t Ci_2s[8]; // Is this used? - - // Various argument options - ui64 Gc0; // First card secret - uint32_t zone; // Number of userzone - uint32_t offset; // Offset address - uint32_t len; // Length - uint32_t pwd; // Optional read password - - // Application buffers - byte_t pt[MAX_FRAME_LEN]; // Plaintext - byte_t ct[MAX_FRAME_LEN]; // Ciphertext - byte_t mac[2]; - - byte_t crf_read_ci[2 + 2] = { 0x16,0x00,0x50,0x07 }; // Read first card random Ci0 (offset 50, len 8) - byte_t crf_check_pwd[2 + 3] = { 0x1c,0x00 }; // Provide (optional) read password - byte_t crf_auth[2 + 16] = { 0x18,0x00 }; // Authenticate using card secret Gc0 and Ci - byte_t crf_verify[2 + 16] = { 0x18,0x10 }; // Authenticate with session key - byte_t crf_set_zone[1 + 1] = { 0x11 }; // Set the userzone to read from - byte_t crf_read_zone[2 + 2] = { 0x12,0x00 }; // Read n-bytes from offset - byte_t crf_read_mac[ 4] = { 0x16,0x02,0xff,0x01 }; // Read n-bytes from offset - - // Show header and help syntax - printf("CryptoRF example - (c) Radboud University Nijmegen\n\n"); - if (argc < 5) { - printf("syntax: crf [pwd]\n\n"); - return 1; - } - - // Parse command-line arguments - sscanf(argv[1],"%016llx", &Gc0); - sscanf(argv[2],"%02x", &zone); - sscanf(argv[3],"%02x", &offset); - sscanf(argv[4],"%02x", &len); - - // Construct CryptoRF frames - num_to_bytes(Gc0, 8, Gc); - crf_set_zone[1] = zone; - crf_read_zone[2] = offset; - crf_read_zone[3] = (len == 0) ? 0 : (len - 1); - - // Check if the optional password argument was used - if (argc == 6) { - sscanf(argv[5], "%06x", &pwd); - num_to_bytes(pwd, 3, crf_check_pwd + 2); - } else { - pwd = PWD_NOT_USED; - } - - // Initialize randoms - srand((uint32_t)time(0)); - - for (pos = 0; pos < 8; pos++) { - Q[pos] = rand(); - Qs[pos] = rand(); - } - - // Try to open the NFC device - pdi = nfc_connect(NULL); - if (pdi == INVALID_DEVICE_INFO) { - printf("ERROR: Unable to connect to NFC device.\n"); - return 1; - } - nfc_initiator_init(pdi); - - // Drop the field for a while - nfc_configure(pdi, DCO_ACTIVATE_FIELD, true); - - // Let the reader only try once to find a tag - nfc_configure(pdi, DCO_INFINITE_SELECT, false); - - // Configure the CRC and Parity settings - nfc_configure(pdi, DCO_HANDLE_CRC, true); - nfc_configure(pdi, DCO_HANDLE_PARITY, true); - - printf("Connected to NFC device: %s\n\n", pdi->acName); - - // Poll for a ISO14443-B cryptomemory tag - if (!nfc_initiator_select_tag(pdi, IM_ISO14443B_106, (byte_t*)"\x00", 1, &ti)) { - printf("ERROR: Can not find a Atmel CryptoRF card.\n\n"); - nfc_disconnect(pdi); - return 1; - } - - printf("The following (NFC) ISO14443-B tag was found:\n\n"); - printf(" ATQB: "); print_bytes(ti.tib.abtAtqb, 12); - printf(" ID: "); print_bytes(ti.tib.abtId, 4); - printf(" CID: %02x\n", ti.tib.btCid); - printf(" PARAMS: %02x %02x %02x %02x\n\n" - ,ti.tib.btParam1 - ,ti.tib.btParam2 - ,ti.tib.btParam3 - ,ti.tib.btParam4 - ); - - - printf("Changing active userzone\n"); - transmit_bytes(crf_set_zone, sizeof(crf_set_zone)); - printf("\n"); - - if (pwd != PWD_NOT_USED) { - printf("Suppling password for communication\n"); - transmit_bytes(crf_check_pwd, sizeof(crf_check_pwd)); - printf("\n"); - } - - printf("Reading first Ci(0) from the system zone (offset = 0x50)\n"); - transmit_bytes(crf_read_ci, sizeof(crf_read_ci)); - printf("\n"); - - // Save the retrieved value of Ci - memcpy(Ci, abtRx + 2, 8); - - // Calculate key-authentication - printf("* Computing authentication values with card secret\n\n"); - cm_auth(Gc, Ci, Q, Ch, Ci_1, Ci_2, &s); - memcpy(crf_auth + 2, Q, 8); - memcpy(crf_auth + 10, Ch, 8); - - printf("Authenticate using Gc, Ci and random Q\n"); - transmit_bytes(crf_auth, sizeof(crf_auth)); - printf("\n"); - - printf("Reading new Ci value from the system zone (tag-answer)\n"); - transmit_bytes(crf_read_ci, sizeof(crf_read_ci)); - printf("\n"); - - if (memcmp(Ci_1, abtRx + 2, 8) != 0) { - printf("ERROR: Authentication failed\n\n"); - nfc_disconnect(pdi); - return 1; - } - - // Calculate session-authentication - printf("* Computing authentication values with session key\n\n"); - cm_auth(Ci_2, Ci_1, Qs, Chs, Ci_1s, Ci_2s, &s); - memcpy(crf_verify + 2, Qs, 8); - memcpy(crf_verify + 10, Chs, 8); - - printf("VerifyCrypto using session key and initialize encryption\n"); - transmit_bytes(crf_verify, sizeof(crf_verify)); - printf("\n"); - - printf("Reading new Ci value from the system zone (tag-answer)\n"); - transmit_bytes(crf_read_ci, sizeof(crf_read_ci)); - printf("\n"); - - if (memcmp(Ci_1s, abtRx + 2, 8) != 0) { - printf("ERROR: Session authentication failed\n\n"); - nfc_disconnect(pdi); - return 1; - } - - printf("* Updating the cipher by grinding Ci (offset,len,data)\n\n"); - cm_grind_read_system_zone(0x50, 8, Ci_1s, &s); - - printf("Read the data from the offset using the encrypted channel\n"); - transmit_bytes(crf_read_zone, sizeof(crf_read_zone)); - printf("\n"); - - if (abtRx[1] != 0) { - printf("ERROR: Reading failed, maybe you need to supply a password\n\n"); - nfc_disconnect(pdi); - return 1; - } - memcpy(ct, abtRx + 2, len); - - printf("* Decrypting..."); - cm_decrypt(offset, len, ct, pt, &s); - printf("done\n\n"); - print_decryption(ct, pt, len); - printf("\n"); - - if (pwd != PWD_NOT_USED) { - num_to_bytes(pwd, 3, pt); - cm_password(pt, crf_check_pwd + 2, &s); - printf("Testing the feature to supply an encrypted password\n"); - transmit_bytes(crf_check_pwd, sizeof(crf_check_pwd)); - printf("\n"); - } - - // Calculate and check mac - cm_mac(mac, &s); - printf("Verify checksum for the transaction: %02x %02x\n", mac[0], mac[1]); - transmit_bytes(crf_read_mac, sizeof(crf_read_mac)); - if (memcmp(mac, abtRx + 2, 2) != 0) { - printf("ERROR: MAC checksum failed\n\n"); - nfc_disconnect(pdi); - return 1; - } - - printf("Communication succesful!\n\n"); - nfc_disconnect(pdi); - return 0; -} - diff --git a/tools/cryptorf/cryptolib.c b/tools/cryptorf/cryptolib.c deleted file mode 100644 index 7390f0438..000000000 --- a/tools/cryptorf/cryptolib.c +++ /dev/null @@ -1,359 +0,0 @@ -/* - * - * SecureMemory, CryptoMemory and CryptoRF library - * - * Copyright (C) 2010, Flavio D. Garcia, Peter van Rossum, Roel Verdult - * and Ronny Wichers Schreur. Radboud University Nijmegen - * - * 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 3 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, see . - * - */ - -#include "cryptolib.h" - -typedef enum { - CA_ENCRYPT = 0x01, - CA_DECRYPT = 0x02 -} CryptoAction; - -int counter=0; - -byte_t nibbles_to_byte(nibble b0, nibble b1) -{ - // Combine both nibbles - return ((b0<<4)|b1); -} - -byte_t funny_mod(byte_t a, byte_t m) -{ - // Just return the input when this is less or equal than the modular value - if (a> (n_bits - 1))) & mask; -} - -void reconstruct_nibbles(crypto_state s) -{ - byte_t b1,b5,b8,b15,b18; - byte_t b0,b4,b7,b14,b17; - - // Extract the bytes that generated the "previous" nibble - b1 = (byte_t)((s->l >> 25) & 0x1f); - b5 = (byte_t)((s->l >> 5) & 0x1f); - b8 = (byte_t)((s->m >> 35) & 0x1f); - b15 = (byte_t)((s->r >> 15) & 0x1f); - b18 = (byte_t)(s->r & 0x1f); - - // Reconstruct the b0 nibble - s->b0 = ((b1 ^ b5) & 0x0f) & ~(b8); - s->b0 |= ((b15 ^ b18) & 0x0f) & b8; - - // Extract the bytes for the current nibble - b0 = (byte_t)((s->l >> 30) & 0x1f); - b4 = (byte_t)((s->l >> 10) & 0x1f); - b7 = (byte_t)((s->m >> 42) & 0x1f); - b14 = (byte_t)((s->r >> 20) & 0x1f); - b17 = (byte_t)((s->r >> 5) & 0x1f); - - // Construct the values for b1 generation - s->b1l = ((b0 ^ b4) & 0x0f); - s->b1r = ((b14 ^ b17) & 0x0f); - s->b1s = b7; - - // Reconstruct the b1 nibble - s->b1 = s->b1l & ~(s->b1s); - s->b1 |= s->b1r & s->b1s; -} - -void next_left(byte_t in, crypto_state s) -{ - byte_t b3, b6, bx; - - // Update the left cipher state with the input byte - s->l ^= ((in & 0x1f) << 20); - - // Extract the two (5 bits) values used for modular addtion - b3 = (byte_t)((s->l >> 15) & 0x1f); - b6 = (byte_t)(s->l & 0x1f); - - // Compute the modular addition - bx = funny_mod(b3 + bit_rotate_left(b6,5),0x1f); - - // Rotate the left cipher state 5 bits - s->l = ((s->l >> 5)| ((uint64_t)bx << 30)); - - // Save the 4 left output bits used for b1 - s->b1l = ((bx^b3) & 0x0f); -} - -void next_right(byte_t in, crypto_state s) -{ - byte_t b16, b18, bx; - - // Update the right cipher state with the input byte - s->r ^= ((in & 0xf8) << 12); - - // Extract the two (5 bits) values used for modular addtion - b16 = (byte_t)((s->r >> 10) & 0x1f); - b18 = (byte_t)(s->r & 0x1f); - - // Compute the modular addition - bx = funny_mod(b18 + b16,0x1f); - - // Rotate the right cipher state 5 bits - s->r = ((s->r >> 5) | ((uint64_t)bx << 20)); - - // Save the 4 right output bits used for b1 - s->b1r = ((bx^b16) & 0x0f); -} - -void next_middle(byte_t in, crypto_state s) -{ - byte_t b12, b13, bx; - - // Update the middle cipher state with the input byte - s->m ^= (((((uint64_t)in << 3) & 0x7f) | (in >> 5)) << 14); - - // Extract the two (7 bits) values used for modular addtion - b12 = (byte_t)((s->m >> 7) & 0x7f); - b13 = (byte_t)(s->m & 0x7f); - - // Compute the modular addition - bx = (funny_mod(b12 + bit_rotate_left(b13,7),0x7f)); - - // Rotate the middle cipher state 7 bits - s->m = ((s->m >> 7)| ((uint64_t)bx << 42)); - - // Save the 4 middle selector bits used for b1 - s->b1s = bx & 0x0f; -} - -void next(const bool feedback, byte_t in, crypto_state s) -{ - // Initialize the (optional) input parameter - byte_t a = in; - - // Only Cryptomemory uses feedback - if (feedback) - { - // Construct the cipher update 'a' from (input ^ feedback) - a = in ^ nibbles_to_byte(s->b0,s->b1); - } - - // Shift the cipher state - next_left(a,s); - next_middle(a,s); - next_right(a,s); - - // For active states we can use the available (previous) 'b1' nibble, - // otherwise use reconstruct_nibbles() to generate them - // reconstruct_nibbles(s) - - // The nible from b1 shifts to b0 - s->b0 = s->b1; - - // Construct the new value of nible b1 - s->b1 = s->b1l & ~(s->b1s); - s->b1 |= s->b1r & s->b1s; -} - -void next_n(const bool feedback, size_t n, byte_t in, crypto_state s) -{ - // While n-rounds left, shift the cipher - while (n--) next(feedback,in, s); -} - -void initialize(const bool feedback, const byte_t* Gc, const byte_t* Ci, const byte_t* Q, const size_t n, crypto_state s) -{ - size_t pos; - - // Reset the cipher state - memset(s,0x00,sizeof(crypto_state_t)); - - // Load in the ci (tag-nonce), together with the first half of Q (reader-nonce) - for (pos = 0; pos < 4; pos++) - { - next_n(feedback,n,Ci[2*pos ],s); - next_n(feedback,n,Ci[2*pos+1],s); - next(feedback,Q[pos],s); - } - - // Load in the diversified key (Gc), together with the second half of Q (reader-nonce) - for (pos = 0; pos < 4; pos++) - { - next_n(feedback,n,Gc[2*pos ],s); - next_n(feedback,n,Gc[2*pos+1],s); - next(feedback,Q[pos+4],s); - } -} - -byte_t cm_byte(crypto_state s) -{ - // Construct keystream byte by combining both nibbles - return nibbles_to_byte(s->b0,s->b1); -} - -byte_t sm_byte(crypto_state s) { - byte_t ks; - - // Construct keystream byte by combining 2 parts from 4 nibbles - next_n(false,2,0,s); - ks = s->b1 << 4; - next_n(false,2,0,s); - ks |= s->b1; - - return ks; -} - -void print_crypto_state(const char* text,crypto_state s) { - int pos; - - printf("%s",text); - for(pos = 6; pos >= 0; pos--) - printf(" %02x", (byte_t)(s->l >> (pos * 5)) & 0x1f); - - printf(" |"); - for(pos = 6; pos >= 0; pos--) - printf(" %02x", (byte_t)(s->m >> (pos * 7)) & 0x7f); - - printf(" |"); - for(pos = 4; pos >= 0; pos--) - printf(" %02x", (byte_t)(s->r >> (pos * 5)) & 0x1f); - - printf(" | %02x",cm_byte(s)); - printf("\n"); -} - -void sm_auth(const byte_t* Gc, const byte_t* Ci, const byte_t* Q, byte_t* Ch, byte_t* Ci_1, crypto_state s) { - size_t pos; - - initialize(false,Gc,Ci,Q,1,s); - - // Generate challange answer for Tag and Reader - for (pos=0; pos<8; pos++) { - Ci_1[pos] = sm_byte(s); - Ch[pos] = sm_byte(s); - } -} - -void cm_auth(const byte_t* Gc, const byte_t* Ci, const byte_t* Q, byte_t* Ch, byte_t* Ci_1, byte_t* Ci_2, crypto_state s) { - size_t pos; - - initialize(true,Gc,Ci,Q,3,s); - - // Construct the reader-answer (challange) - next_n(true,6,0,s); - Ch[0] = cm_byte(s); - for (pos = 1; pos < 8; pos++) - { - next_n(true,7,0,s); - Ch [pos] = cm_byte(s); - } - - // Construct the tag-answer (Ci+1 = ff .. .. .. .. .. .. ..) - Ci_1[0] = 0xff; - for (pos = 1; pos < 8; pos++) - { - next_n(true,2,0,s); - Ci_1[pos] = cm_byte(s); - } - - // Construct the session key (Ci+2) - for (pos = 0; pos < 8; pos++) - { - next_n(true,2,0,s); - Ci_2[pos] = cm_byte(s); - } - - // Prepare the cipher for encryption by shifting 3 more times - next_n(true,3,0,s); -} - -void cm_crypt(const CryptoAction ca, const byte_t offset, const byte_t len, const byte_t* in, byte_t* out, crypto_state s) { - size_t pos; - byte_t bt; - - next_n(true,5,0,s); - next(true,offset,s); - next_n(true,5,0,s); - next(true,len,s); - for (pos=0; pos. - * - */ - -#ifndef _CRYPTOLIB_H_ -#define _CRYPTOLIB_H_ - -#include "defines.h" -#include -#include -#include - -// A nibble is actually only 4 bits, but there is no such type ;) -typedef byte_t nibble; - -typedef struct { - uint64_t l; - uint64_t m; - uint64_t r; - nibble b0; - nibble b1; - nibble b1l; - nibble b1r; - nibble b1s; -}crypto_state_t; -typedef crypto_state_t* crypto_state; - -void print_crypto_state(const char* text,crypto_state s); -void sm_auth(const byte_t* Gc, const byte_t* Ci, const byte_t* Q, byte_t* Ch, byte_t* Ci_1, crypto_state s); -void cm_auth(const byte_t* Gc, const byte_t* Ci, const byte_t* Q, byte_t* Ch, byte_t* Ci_1, byte_t* Ci_2, crypto_state s); -void cm_encrypt(const byte_t offset, const byte_t len, const byte_t* pt, byte_t* ct, crypto_state s); -void cm_decrypt(const byte_t offset, const byte_t len, const byte_t* ct, byte_t* pt, crypto_state s); -void cm_grind_read_system_zone(const byte_t offset, const byte_t len, const byte_t* pt, crypto_state s); -void cm_grind_set_user_zone(const byte_t zone, crypto_state s); -void cm_mac(byte_t* mac, crypto_state s); -void cm_password(const byte_t* pt, byte_t* ct, crypto_state s); - -#endif // _CRYPTOLIB_H_ diff --git a/tools/cryptorf/defines.h b/tools/cryptorf/defines.h deleted file mode 100644 index 4962d7981..000000000 --- a/tools/cryptorf/defines.h +++ /dev/null @@ -1,36 +0,0 @@ -/* - * - * Defines - * - * Copyright (C) 2010, Flavio D. Garcia, Peter van Rossum, Roel Verdult - * and Ronny Wichers Schreur. Radboud University Nijmegen - * - * 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 3 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, see . - * - */ - -#ifndef _DEFINES_H_ -#define _DEFINES_H_ - -#define _CRT_SECURE_NO_WARNINGS -#define _CRT_SECURE_NO_DEPRECATE -#include -#include -#include -#include -#define null 0 -typedef unsigned char byte_t; -typedef long long unsigned int ui64; - -#endif // _DEFINES_H_ diff --git a/tools/cryptorf/laundry.sh b/tools/cryptorf/laundry.sh deleted file mode 100755 index 46fd94bfe..000000000 --- a/tools/cryptorf/laundry.sh +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/sh -./crf 4f794a463ff81d81 2 0 80 546dae diff --git a/tools/cryptorf/sm.c b/tools/cryptorf/sm.c index c432440e6..fde70d3a5 100644 --- a/tools/cryptorf/sm.c +++ b/tools/cryptorf/sm.c @@ -20,10 +20,16 @@ * */ -#include "defines.h" +#include +#include +#include #include "cryptolib.h" #include "util.h" -#include +#ifdef _MSC_VER + // avoid scanf warnings in Visual Studio + #define _CRT_SECURE_NO_WARNINGS + #define _CRT_SECURE_NO_DEPRECATE +#endif int main(int argc, const char* argv[]) { @@ -31,16 +37,16 @@ int main(int argc, const char* argv[]) crypto_state_t s; size_t pos; - byte_t Q[8] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; // Reader random - byte_t Gc[8] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; // Secret seed - byte_t Ci[8] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; // Card random (last state) - byte_t Ch[8] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; // Reader answer - byte_t Ci_1[8] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; // Card answer + uint8_t Q[8] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; // Reader random + uint8_t Gc[8] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; // Secret seed + uint8_t Ci[8] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; // Card random (last state) + uint8_t Ch[8] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; // Reader answer + uint8_t Ci_1[8] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; // Card answer // Various argument options - ui64 nGc; // Card secret - ui64 nCi; // Card random - ui64 nQ; // Reader main-random + uint64_t nGc; // Card secret + uint64_t nCi; // Card random + uint64_t nQ; // Reader main-random // Show header and help syntax printf("SecureMemory simulator - (c) Radboud University Nijmegen\n"); @@ -51,9 +57,9 @@ int main(int argc, const char* argv[]) } // Parse arguments - sscanf(argv[1],"%016llx",&nGc); num_to_bytes(nGc,8,Gc); - sscanf(argv[2],"%016llx",&nCi); num_to_bytes(nCi,8,Ci); - sscanf(argv[3],"%016llx",&nQ); num_to_bytes(nQ,8,Q); + sscanf(argv[1],"%016" SCNx64,&nGc); num_to_bytes(nGc,8,Gc); + sscanf(argv[2],"%016" SCNx64,&nCi); num_to_bytes(nCi,8,Ci); + sscanf(argv[3],"%016" SCNx64,&nQ); num_to_bytes(nQ,8,Q); // Calculate authentication sm_auth(Gc,Ci,Q,Ch,Ci_1,&s); diff --git a/tools/cryptorf/sma.cpp b/tools/cryptorf/sma.cpp index e8f1145fd..705658651 100644 --- a/tools/cryptorf/sma.cpp +++ b/tools/cryptorf/sma.cpp @@ -20,21 +20,24 @@ * * Modified Iceman, 2020 */ - -#include "defines.h" -#include "cryptolib.h" -#include "util.h" + #include -#include +#include +#include #include #include #include #include // sort, max_element, random_shuffle, remove_if, lower_bound #include // greater, bind2nd +#include "cryptolib.h" +#include "util.h" using namespace std; #ifdef _MSC_VER + // avoid scanf warnings in Visual Studio + #define _CRT_SECURE_NO_WARNINGS + #define _CRT_SECURE_NO_DEPRECATE #define inline __inline #endif @@ -125,13 +128,13 @@ typedef struct { nibble b1r; nibble b1s; bool invalid; - byte_t Gc[8]; + uint8_t Gc[8]; }cs_t; typedef cs_t* pcs; typedef struct { - byte_t addition; - byte_t out; + uint8_t addition; + uint8_t out; } lookup_entry; enum cipher_state_side { @@ -145,18 +148,18 @@ void print_cs(const char* text,pcs s) printf("%s",text); for(pos=6;pos>=0;pos--) - printf(" %02x",(byte_t)(s->l>>(pos*5))&0x1f); + printf(" %02x",(uint8_t)(s->l>>(pos*5))&0x1f); printf(" |"); for(pos=6;pos>=0;pos--) - printf(" %02x",(byte_t)(s->m>>(pos*7))&0x7f); + printf(" %02x",(uint8_t)(s->m>>(pos*7))&0x7f); printf(" |"); for(pos=4;pos>=0;pos--) - printf(" %02x",(byte_t)(s->r>>(pos*5))&0x1f); + printf(" %02x",(uint8_t)(s->r>>(pos*5))&0x1f); printf("\n"); } -static inline byte_t mod(byte_t a, byte_t m) +static inline uint8_t mod(uint8_t a, uint8_t m) { // Just return the input when this is less or equal than the modular value if (a> (n_bits - 1))) & mask; } -static inline byte_t bit_rotate_r(byte_t a, byte_t n_bits) +static inline uint8_t bit_rotate_r(uint8_t a, uint8_t n_bits) { return ((a >> 1) | ((a&1) << (n_bits - 1))); } -static byte_t lookup_left_substraction[0x400]; -static byte_t lookup_right_subtraction[0x400]; +static uint8_t lookup_left_substraction[0x400]; +static uint8_t lookup_right_subtraction[0x400]; static lookup_entry lookup_left[0x100000]; static lookup_entry lookup_right[0x8000]; -static byte_t left_addition[0x100000]; +static uint8_t left_addition[0x100000]; static inline void init_lookup_left() { - byte_t b3,b6,temp; + uint8_t b3,b6,temp; int i,index; for(i = 0; i <0x400; i++) @@ -207,7 +210,7 @@ static inline void init_lookup_left() static inline void init_lookup_right() { - byte_t b16,b18,temp; + uint8_t b16,b18,temp; int i,index; for(i = 0; i <0x400; i++) @@ -226,8 +229,8 @@ static void init_lookup_left_substraction() { for(int index = 0; index < 0x400 ; index++) { - byte_t b3 = (index >> 5 & 0x1f); - byte_t bx = (index & 0x1f); + uint8_t b3 = (index >> 5 & 0x1f); + uint8_t bx = (index & 0x1f); lookup_left_substraction[index] = bit_rotate_r(mod((bx+0x1f)-b3,0x1f),5); } } @@ -237,12 +240,12 @@ static void init_lookup_right_substraction() for(int index = 0; index < 0x400 ; index++) { int b16 = (index >>5); - byte_t bx = (index & 0x1f); + uint8_t bx = (index & 0x1f); lookup_right_subtraction[index] = mod((bx+0x1f)-b16,0x1f); } } -static inline void previous_left(byte_t in, vector *candidate_states) +static inline void previous_left(uint8_t in, vector *candidate_states) { pcs state; size_t size = candidate_states->size(); @@ -250,7 +253,7 @@ static inline void previous_left(byte_t in, vector *candidate_states) { state = &((*candidate_states)[pos]); - byte_t bx = (byte_t)((state->l >> 30) & 0x1f); + uint8_t bx = (uint8_t)((state->l >> 30) & 0x1f); unsigned b3 = (unsigned)(state->l >> 5) & 0x3e0; state->l = (state->l << 5); @@ -267,7 +270,7 @@ static inline void previous_left(byte_t in, vector *candidate_states) state->l ^= (((uint64_t)in & 0x1f) << 20); } } else { - byte_t b6 = lookup_left_substraction[b3|bx]; + uint8_t b6 = lookup_left_substraction[b3|bx]; state->l = (state->l & 0x7ffffffe0ull) | b6; state->l ^= (((uint64_t)in & 0x1f) << 20); @@ -282,7 +285,7 @@ static inline void previous_left(byte_t in, vector *candidate_states) } } -static inline void previous_right(byte_t in, vector *candidate_states) +static inline void previous_right(uint8_t in, vector *candidate_states) { pcs state; size_t size = candidate_states->size(); @@ -290,7 +293,7 @@ static inline void previous_right(byte_t in, vector *candidate_states) { state = &((*candidate_states)[pos]); - byte_t bx = (byte_t)((state->r >> 20) & 0x1f); + uint8_t bx = (uint8_t)((state->r >> 20) & 0x1f); unsigned b16 = (unsigned)(state->r & 0x3e0);//(state->buffer_r >> 10) & 0x1f; state->r = (state->r << 5); @@ -307,7 +310,7 @@ static inline void previous_right(byte_t in, vector *candidate_states) state->r ^= (((uint64_t)in & 0xf8) << 12); } } else{ - byte_t b18 = lookup_right_subtraction[b16|bx]; + uint8_t b18 = lookup_right_subtraction[b16|bx]; state->r = (state->r & 0x1ffffe0ull) | b18; state->r ^= (((uint64_t)in & 0xf8) << 12); //state->b_right = ((b14^b17) & 0x0f); @@ -323,7 +326,7 @@ static inline void previous_right(byte_t in, vector *candidate_states) } } -static inline byte_t next_left_fast(byte_t in, uint64_t* left) +static inline uint8_t next_left_fast(uint8_t in, uint64_t* left) { if (in) *left ^= ((in & 0x1f) << 20); lookup_entry* lookup = &(lookup_left[((*left) & 0xf801f)]); @@ -331,10 +334,10 @@ static inline byte_t next_left_fast(byte_t in, uint64_t* left) return lookup->out; } -static inline byte_t next_left_ksbyte(uint64_t* left) +static inline uint8_t next_left_ksbyte(uint64_t* left) { lookup_entry* lookup; - byte_t bt; + uint8_t bt; *left = (((*left) >> 5)| ((uint64_t)left_addition[((*left) & 0xf801f)] << 30)); lookup = &(lookup_left[((*left) & 0xf801f)]); @@ -347,7 +350,7 @@ static inline byte_t next_left_ksbyte(uint64_t* left) return bt; } -static inline byte_t next_right_fast(byte_t in, uint64_t* right) +static inline uint8_t next_right_fast(uint8_t in, uint64_t* right) { if (in) *right ^= ((in&0xf8) << 12); lookup_entry* lookup = &(lookup_right[((*right) & 0x7c1f)]); @@ -355,10 +358,10 @@ static inline byte_t next_right_fast(byte_t in, uint64_t* right) return lookup->out; } -static inline void sm_left_mask(const byte_t* ks, byte_t* mask, uint64_t rstate) +static inline void sm_left_mask(const uint8_t* ks, uint8_t* mask, uint64_t rstate) { size_t pos; - byte_t bt; + uint8_t bt; for (pos=0; pos<16; pos++) { @@ -375,14 +378,14 @@ static inline void sm_left_mask(const byte_t* ks, byte_t* mask, uint64_t rstate) } } -static inline uint32_t sm_right(const byte_t* ks, byte_t* mask, vector* pcrstates) +static inline uint32_t sm_right(const uint8_t* ks, uint8_t* mask, vector* pcrstates) { - byte_t tmp_mask[16]; + uint8_t tmp_mask[16]; size_t pos,bits,bit,topbits; uint64_t rstate,counter; map bincstates; map::iterator it; - byte_t bt; + uint8_t bt; topbits = 0; for (counter=0; counter<0x2000000; counter++) @@ -452,7 +455,7 @@ static inline uint32_t sm_right(const byte_t* ks, byte_t* mask, vector static inline void previous_all_input(vector *pcstates, uint32_t gc_byte_index, cipher_state_side css) { - byte_t btGc,in; + uint8_t btGc,in; vector ncstates; vector prev_ncstates; vector::iterator it,itnew; @@ -489,7 +492,7 @@ static inline void previous_all_input(vector *pcstates, uint32_t gc_byte_i *pcstates = prev_ncstates; } -static inline void search_gc_candidates_right(const uint64_t rstate_before_gc, const uint64_t rstate_after_gc, const byte_t* Q, vector* pcstates) +static inline void search_gc_candidates_right(const uint64_t rstate_before_gc, const uint64_t rstate_after_gc, const uint8_t* Q, vector* pcstates) { vector::iterator it; vector csl_cand; @@ -556,14 +559,14 @@ static inline void search_gc_candidates_right(const uint64_t rstate_before_gc, c } } -static inline void sm_left(const byte_t* ks, byte_t* mask, vector* pcstates) +static inline void sm_left(const uint8_t* ks, uint8_t* mask, vector* pcstates) { map bincstates; map::iterator it; uint64_t counter,lstate; size_t pos,bits,bit; - byte_t correct_bits[16]; - byte_t bt; + uint8_t correct_bits[16]; + uint8_t bt; cs_t state; lookup_entry* lookup; @@ -645,7 +648,7 @@ static inline void sm_left(const byte_t* ks, byte_t* mask, vector* pcstate reverse(pcstates->begin(),pcstates->end()); } -static inline void search_gc_candidates_left(const uint64_t lstate_before_gc, const byte_t* Q, vector* pcstates) +static inline void search_gc_candidates_left(const uint64_t lstate_before_gc, const uint8_t* Q, vector* pcstates) { vector csl_cand,csl_search; vector::iterator itsearch,itcand; @@ -778,31 +781,31 @@ int main(int argc, const char* argv[]) vector::iterator it; uint32_t rbits; -// byte_t Gc[ 8] = {0x4f,0x79,0x4a,0x46,0x3f,0xf8,0x1d,0x81}; -// byte_t Gc[ 8] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; -// byte_t Ci[ 8] = {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff}; -// byte_t Q[ 8] = {0x12,0x34,0x56,0x78,0x12,0x34,0x56,0x78}; - byte_t Gc[ 8]; - byte_t Ci[ 8]; - byte_t Q[ 8]; - byte_t Ch[ 8]; - byte_t Ci_1[ 8]; +// uint8_t Gc[ 8] = {0x4f,0x79,0x4a,0x46,0x3f,0xf8,0x1d,0x81}; +// uint8_t Gc[ 8] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; +// uint8_t Ci[ 8] = {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff}; +// uint8_t Q[ 8] = {0x12,0x34,0x56,0x78,0x12,0x34,0x56,0x78}; + uint8_t Gc[ 8]; + uint8_t Ci[ 8]; + uint8_t Q[ 8]; + uint8_t Ch[ 8]; + uint8_t Ci_1[ 8]; - byte_t Gc_chk[ 8]; - byte_t Ch_chk[ 8]; - byte_t Ci_1_chk[ 8]; + uint8_t Gc_chk[ 8]; + uint8_t Ch_chk[ 8]; + uint8_t Ci_1_chk[ 8]; - // byte_t ks[16] = {0xde,0x88,0xc2,0xc9,0xee,0xd4,0x1b,0x46,0x1c,0x6a,0x92,0x50,0x76,0x1a,0xe9,0x87}; - // byte_t mask[16] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; - // byte_t mask[16] = {0x04,0xb0,0xe1,0x10,0xc0,0x33,0x44,0x20,0x20,0x00,0x70,0x8c,0x22,0x04,0x10,0x80}; + // uint8_t ks[16] = {0xde,0x88,0xc2,0xc9,0xee,0xd4,0x1b,0x46,0x1c,0x6a,0x92,0x50,0x76,0x1a,0xe9,0x87}; + // uint8_t mask[16] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; + // uint8_t mask[16] = {0x04,0xb0,0xe1,0x10,0xc0,0x33,0x44,0x20,0x20,0x00,0x70,0x8c,0x22,0x04,0x10,0x80}; - byte_t ks[16]; - byte_t mask[16]; + uint8_t ks[16]; + uint8_t mask[16]; - ui64 nCi; // Card random - ui64 nQ; // Reader random - ui64 nCh; // Reader challange - ui64 nCi_1; // Card anwser + uint64_t nCi; // Card random + uint64_t nQ; // Reader random + uint64_t nCh; // Reader challange + uint64_t nCi_1; // Card anwser if ((argc != 2) && (argc != 5)) { @@ -818,7 +821,7 @@ int main(int argc, const char* argv[]) if (argc == 2) { // Generate random values for the key and randoms - srand((uint32_t)time(null)); + srand((uint32_t)time(NULL)); for (pos = 0; pos<8; pos++) { Gc[pos] = rand(); @@ -828,10 +831,10 @@ int main(int argc, const char* argv[]) sm_auth(Gc,Ci,Q,Ch,Ci_1,&ostate); printf(" Gc: "); print_bytes(Gc,8); } else { - sscanf(argv[1],"%016llx",&nCi); num_to_bytes(nCi,8,Ci); - sscanf(argv[2],"%016llx",&nQ); num_to_bytes(nQ,8,Q); - sscanf(argv[3],"%016llx",&nCh); num_to_bytes(nCh,8,Ch); - sscanf(argv[4],"%016llx",&nCi_1); num_to_bytes(nCi_1,8,Ci_1); + sscanf(argv[1],"%016" SCNx64,&nCi); num_to_bytes(nCi,8,Ci); + sscanf(argv[2],"%016" SCNx64,&nQ); num_to_bytes(nQ,8,Q); + sscanf(argv[3],"%016" SCNx64,&nCh); num_to_bytes(nCh,8,Ch); + sscanf(argv[4],"%016" SCNx64,&nCi_1); num_to_bytes(nCi_1,8,Ci_1); printf(" Gc: unknown\n"); } @@ -883,7 +886,7 @@ int main(int argc, const char* argv[]) { rstate_after_gc = *itrstates; sm_left_mask(ks,mask,rstate_after_gc); - printf("Using the state from the top-right bin: " _YELLOW_("0x%07llx")"\n",(unsigned long long)rstate_after_gc); + printf("Using the state from the top-right bin: " _YELLOW_("0x%07" PRIx64)"\n",rstate_after_gc); search_gc_candidates_right(rstate_before_gc,rstate_after_gc,Q,&crstates); printf("Found " _YELLOW_("%lu")" right candidates using the meet-in-the-middle attack\n",crstates.size()); @@ -908,7 +911,7 @@ int main(int argc, const char* argv[]) sm_auth(Gc_chk,Ci,Q,Ch_chk,Ci_1_chk,&ostate); if ((memcmp(Ch_chk,Ch,8) == 0) && (memcmp(Ci_1_chk,Ci_1,8) == 0)) { - printf("\nFound valid key: " _GREEN_("%016llX")"\n\n",(unsigned long long)*itgc); + printf("\nFound valid key: " _GREEN_("%016" PRIx64)"\n\n",*itgc); return 0; } } diff --git a/tools/cryptorf/sma_multi.cpp b/tools/cryptorf/sma_multi.cpp index 5c05e2e04..d3658ff23 100644 --- a/tools/cryptorf/sma_multi.cpp +++ b/tools/cryptorf/sma_multi.cpp @@ -20,12 +20,10 @@ * * Modifed Iceman, 2020 */ - -#include "defines.h" -#include "cryptolib.h" -#include "util.h" + #include -#include +#include +#include #include #include #include @@ -34,9 +32,15 @@ #include // std::thread #include #include +#include "cryptolib.h" +#include "util.h" + using namespace std; #ifdef _MSC_VER + // avoid scanf warnings in Visual Studio + #define _CRT_SECURE_NO_WARNINGS + #define _CRT_SECURE_NO_DEPRECATE #define inline __inline #endif @@ -127,13 +131,13 @@ typedef struct { nibble b1r; nibble b1s; bool invalid; - byte_t Gc[8]; + uint8_t Gc[8]; }cs_t; typedef cs_t* pcs; typedef struct { - byte_t addition; - byte_t out; + uint8_t addition; + uint8_t out; } lookup_entry; enum cipher_state_side { @@ -147,21 +151,21 @@ void print_cs(const char* text,pcs s) { printf("%s",text); for(pos=6;pos>=0;pos--) - printf(" %02x",(byte_t)(s->l>>(pos*5))&0x1f); + printf(" %02x",(uint8_t)(s->l>>(pos*5))&0x1f); printf(" |"); for(pos=6;pos>=0;pos--) - printf(" %02x",(byte_t)(s->m>>(pos*7))&0x7f); + printf(" %02x",(uint8_t)(s->m>>(pos*7))&0x7f); printf(" |"); for(pos=4;pos>=0;pos--) - printf(" %02x",(byte_t)(s->r>>(pos*5))&0x1f); + printf(" %02x",(uint8_t)(s->r>>(pos*5))&0x1f); printf("\n"); } -static inline byte_t mod(byte_t a, byte_t m) { +static inline uint8_t mod(uint8_t a, uint8_t m) { // Just return the input when this is less or equal than the modular value if (a> (n_bits - 1))) & mask; } -static inline byte_t bit_rotate_r(byte_t a, byte_t n_bits) { +static inline uint8_t bit_rotate_r(uint8_t a, uint8_t n_bits) { return ((a >> 1) | ((a&1) << (n_bits - 1))); } */ @@ -189,14 +193,14 @@ static inline byte_t bit_rotate_r(byte_t a, byte_t n_bits) { #define BIT_ROR(a) (((a) >> 1) | (((a) & 1) << 4)) -static byte_t lookup_left_substraction[0x400]; -static byte_t lookup_right_subtraction[0x400]; +static uint8_t lookup_left_substraction[0x400]; +static uint8_t lookup_right_subtraction[0x400]; static lookup_entry lookup_left[0x100000]; static lookup_entry lookup_right[0x8000]; -static byte_t left_addition[0x100000]; +static uint8_t left_addition[0x100000]; static inline void init_lookup_left() { - byte_t b3, b6, temp; + uint8_t b3, b6, temp; int i, index; for (i = 0; i <0x400; i++){ @@ -215,7 +219,7 @@ static inline void init_lookup_left() { } static inline void init_lookup_right() { - byte_t b16, b18, temp; + uint8_t b16, b18, temp; int i, index; for(i = 0; i <0x400; i++) { @@ -231,8 +235,8 @@ static inline void init_lookup_right() { static void init_lookup_left_substraction() { for(int index = 0; index < 0x400 ; index++) { - byte_t b3 = (index >> 5 & 0x1f); - byte_t bx = (index & 0x1f); + uint8_t b3 = (index >> 5 & 0x1f); + uint8_t bx = (index & 0x1f); //lookup_left_substraction[index] = bit_rotate_r(mod((bx+0x1f)-b3,0x1f),5); lookup_left_substraction[index] = BIT_ROR( mod((bx + 0x1F) - b3, 0x1F)); @@ -242,18 +246,18 @@ static void init_lookup_left_substraction() { static void init_lookup_right_substraction() { for(int index = 0; index < 0x400 ; index++) { int b16 = (index >>5); - byte_t bx = (index & 0x1f); + uint8_t bx = (index & 0x1f); lookup_right_subtraction[index] = mod((bx + 0x1F) - b16, 0x1F); } } -static inline void previous_left(byte_t in, vector *candidate_states) { +static inline void previous_left(uint8_t in, vector *candidate_states) { pcs state; size_t size = candidate_states->size(); for(size_t pos=0; posl >> 30) & 0x1f); + uint8_t bx = (uint8_t)((state->l >> 30) & 0x1f); unsigned b3 = (unsigned)(state->l >> 5) & 0x3e0; state->l = (state->l << 5); @@ -268,7 +272,7 @@ static inline void previous_left(byte_t in, vector *candidate_states) { state->l ^= (((uint64_t)in & 0x1f) << 20); } } else { - byte_t b6 = lookup_left_substraction[b3|bx]; + uint8_t b6 = lookup_left_substraction[b3|bx]; state->l = (state->l & 0x7ffffffe0ull) | b6; state->l ^= (((uint64_t)in & 0x1f) << 20); @@ -282,13 +286,13 @@ static inline void previous_left(byte_t in, vector *candidate_states) { } } -static inline void previous_right(byte_t in, vector *candidate_states) { +static inline void previous_right(uint8_t in, vector *candidate_states) { pcs state; size_t size = candidate_states->size(); for(size_t pos=0; posr >> 20) & 0x1f); + uint8_t bx = (uint8_t)((state->r >> 20) & 0x1f); unsigned b16 = (unsigned)(state->r & 0x3e0);//(state->buffer_r >> 10) & 0x1f; state->r = (state->r << 5); @@ -303,7 +307,7 @@ static inline void previous_right(byte_t in, vector *candidate_states) { state->r ^= (((uint64_t)in & 0xf8) << 12); } } else { - byte_t b18 = lookup_right_subtraction[b16|bx]; + uint8_t b18 = lookup_right_subtraction[b16|bx]; state->r = (state->r & 0x1ffffe0ull) | b18; state->r ^= (((uint64_t)in & 0xf8) << 12); //state->b_right = ((b14^b17) & 0x0f); @@ -318,7 +322,7 @@ static inline void previous_right(byte_t in, vector *candidate_states) { } } -static inline byte_t next_left_fast(byte_t in, uint64_t* left) { +static inline uint8_t next_left_fast(uint8_t in, uint64_t* left) { if (in) *left ^= ((in & 0x1f) << 20); @@ -327,9 +331,9 @@ static inline byte_t next_left_fast(byte_t in, uint64_t* left) { return lookup->out; } -static inline byte_t next_left_ksbyte(uint64_t* left) { +static inline uint8_t next_left_ksbyte(uint64_t* left) { lookup_entry* lookup; - byte_t bt; + uint8_t bt; *left = (((*left) >> 5)| ((uint64_t)left_addition[((*left) & 0xf801f)] << 30)); lookup = &(lookup_left[((*left) & 0xf801f)]); @@ -342,17 +346,17 @@ static inline byte_t next_left_ksbyte(uint64_t* left) { return bt; } -static inline byte_t next_right_fast(byte_t in, uint64_t* right) { +static inline uint8_t next_right_fast(uint8_t in, uint64_t* right) { if (in) *right ^= ((in&0xf8) << 12); lookup_entry* lookup = &(lookup_right[((*right) & 0x7c1f)]); *right = (((*right) >> 5) | (lookup->addition << 20)); return lookup->out; } -static inline void sm_left_mask(const byte_t* ks, byte_t* mask, uint64_t rstate) { +static inline void sm_left_mask(const uint8_t* ks, uint8_t* mask, uint64_t rstate) { for (uint8_t pos = 0; pos < 16; pos++) { next_right_fast(0,&rstate); - byte_t bt = next_right_fast(0,&rstate) << 4; + uint8_t bt = next_right_fast(0,&rstate) << 4; next_right_fast(0,&rstate); bt |= next_right_fast(0,&rstate); @@ -375,13 +379,13 @@ uint32_t g_num_cpus = std::thread::hardware_concurrency(); static void ice_sm_right_thread( uint8_t offset, uint8_t skips, - const byte_t* ks, + const uint8_t* ks, map* bincstates, - byte_t* mask + uint8_t* mask ) { - byte_t tmp_mask[16]; - byte_t bt; + uint8_t tmp_mask[16]; + uint8_t bt; for (uint64_t counter = offset; counter < 0x2000000; counter += skips) { // Reset the current bitcount of correct bits @@ -444,7 +448,7 @@ static void ice_sm_right_thread( } } } -static uint32_t ice_sm_right(const byte_t* ks, byte_t* mask, vector* pcrstates) { +static uint32_t ice_sm_right(const uint8_t* ks, uint8_t* mask, vector* pcrstates) { uint32_t g_num_cpus = std::thread::hardware_concurrency(); map bincstates; @@ -478,14 +482,14 @@ static uint32_t ice_sm_right(const byte_t* ks, byte_t* mask, vector* p static void ice_sm_left_thread( uint8_t offset, uint8_t skips, - const byte_t* ks, + const uint8_t* ks, map* bincstates, - byte_t* mask + uint8_t* mask ) { size_t pos, bits; - byte_t correct_bits[16]; - byte_t bt; + uint8_t correct_bits[16]; + uint8_t bt; lookup_entry* lookup; // Reset and initialize the cryptostate and vector @@ -561,7 +565,7 @@ static void ice_sm_left_thread( } } -static void ice_sm_left(const byte_t* ks, byte_t* mask, vector* pcstates) { +static void ice_sm_left(const uint8_t* ks, uint8_t* mask, vector* pcstates) { uint32_t g_num_cpus = std::thread::hardware_concurrency(); @@ -589,12 +593,12 @@ static void ice_sm_left(const byte_t* ks, byte_t* mask, vector* pcstates) reverse(pcstates->begin(), pcstates->end()); } -static inline uint32_t sm_right(const byte_t* ks, byte_t* mask, vector* pcrstates) { - byte_t tmp_mask[16]; +static inline uint32_t sm_right(const uint8_t* ks, uint8_t* mask, vector* pcrstates) { + uint8_t tmp_mask[16]; size_t pos, bits, bit, topbits; map bincstates; map::iterator it; - byte_t bt; + uint8_t bt; topbits = 0; @@ -658,7 +662,7 @@ static inline uint32_t sm_right(const byte_t* ks, byte_t* mask, vector } static inline void previous_all_input(vector *pcstates, uint32_t gc_byte_index, cipher_state_side css) { - byte_t btGc,in; + uint8_t btGc,in; vector ncstates; vector prev_ncstates; vector::iterator it,itnew; @@ -691,7 +695,7 @@ static inline void previous_all_input(vector *pcstates, uint32_t gc_byte_i *pcstates = prev_ncstates; } -static inline void search_gc_candidates_right(const uint64_t rstate_before_gc, const uint64_t rstate_after_gc, const byte_t* Q, vector* pcstates) { +static inline void search_gc_candidates_right(const uint64_t rstate_before_gc, const uint64_t rstate_after_gc, const uint8_t* Q, vector* pcstates) { vector::iterator it; vector csl_cand; map matchbox; @@ -743,13 +747,13 @@ static inline void search_gc_candidates_right(const uint64_t rstate_before_gc, c } } -static inline void sm_left(const byte_t* ks, byte_t* mask, vector* pcstates) { +static inline void sm_left(const uint8_t* ks, uint8_t* mask, vector* pcstates) { map bincstates; map::iterator it; uint64_t counter, lstate; size_t pos, bits; - byte_t correct_bits[16]; - byte_t bt; + uint8_t correct_bits[16]; + uint8_t bt; cs_t state; lookup_entry* lookup; @@ -831,7 +835,7 @@ static inline void sm_left(const byte_t* ks, byte_t* mask, vector* pcstate reverse(pcstates->begin(), pcstates->end()); } -static inline void search_gc_candidates_left(const uint64_t lstate_before_gc, const byte_t* Q, vector* pcstates) { +static inline void search_gc_candidates_left(const uint64_t lstate_before_gc, const uint8_t* Q, vector* pcstates) { vector csl_cand,csl_search; vector::iterator itsearch,itcand; map matchbox; @@ -937,14 +941,14 @@ static void ice_compare( uint8_t skips, vector* candidates, crypto_state_t* ostate, - byte_t *Ci, - byte_t *Q, - byte_t *Ch, - byte_t *Ci_1 + uint8_t *Ci, + uint8_t *Q, + uint8_t *Ch, + uint8_t *Ci_1 ) { - byte_t Gc_chk[8]; - byte_t Ch_chk[ 8]; - byte_t Ci_1_chk[ 8]; + uint8_t Gc_chk[8]; + uint8_t Ch_chk[ 8]; + uint8_t Ci_1_chk[ 8]; for (std::size_t i = offset; i < candidates->size(); i += skips) { if (key_found.load(std::memory_order_relaxed)) @@ -976,27 +980,27 @@ int main(int argc, const char* argv[]) { vector::iterator it; uint32_t rbits; - // byte_t Gc[ 8] = {0x4f,0x79,0x4a,0x46,0x3f,0xf8,0x1d,0x81}; - // byte_t Gc[ 8] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; - // byte_t Ci[ 8] = {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff}; - // byte_t Q[ 8] = {0x12,0x34,0x56,0x78,0x12,0x34,0x56,0x78}; - byte_t Gc[ 8]; - byte_t Ci[ 8]; - byte_t Q[ 8]; - byte_t Ch[ 8]; - byte_t Ci_1[ 8]; + // uint8_t Gc[ 8] = {0x4f,0x79,0x4a,0x46,0x3f,0xf8,0x1d,0x81}; + // uint8_t Gc[ 8] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; + // uint8_t Ci[ 8] = {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff}; + // uint8_t Q[ 8] = {0x12,0x34,0x56,0x78,0x12,0x34,0x56,0x78}; + uint8_t Gc[ 8]; + uint8_t Ci[ 8]; + uint8_t Q[ 8]; + uint8_t Ch[ 8]; + uint8_t Ci_1[ 8]; - // byte_t ks[16] = {0xde,0x88,0xc2,0xc9,0xee,0xd4,0x1b,0x46,0x1c,0x6a,0x92,0x50,0x76,0x1a,0xe9,0x87}; - // byte_t mask[16] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; - // byte_t mask[16] = {0x04,0xb0,0xe1,0x10,0xc0,0x33,0x44,0x20,0x20,0x00,0x70,0x8c,0x22,0x04,0x10,0x80}; + // uint8_t ks[16] = {0xde,0x88,0xc2,0xc9,0xee,0xd4,0x1b,0x46,0x1c,0x6a,0x92,0x50,0x76,0x1a,0xe9,0x87}; + // uint8_t mask[16] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; + // uint8_t mask[16] = {0x04,0xb0,0xe1,0x10,0xc0,0x33,0x44,0x20,0x20,0x00,0x70,0x8c,0x22,0x04,0x10,0x80}; - byte_t ks[16]; - byte_t mask[16]; + uint8_t ks[16]; + uint8_t mask[16]; - ui64 nCi; // Card random - ui64 nQ; // Reader random - ui64 nCh; // Reader challange - ui64 nCi_1; // Card anwser + uint64_t nCi; // Card random + uint64_t nQ; // Reader random + uint64_t nCh; // Reader challange + uint64_t nCi_1; // Card anwser if ((argc != 2) && (argc != 5)) { printf("SecureMemory recovery - (c) Radboud University Nijmegen\n\n"); @@ -1010,7 +1014,7 @@ int main(int argc, const char* argv[]) { // Check if this is a simulation if (argc == 2) { // Generate random values for the key and randoms - srand((uint32_t)time(null)); + srand((uint32_t)time(NULL)); for (pos = 0; pos<8; pos++) { Gc[pos] = rand(); Ci[pos] = rand(); @@ -1019,10 +1023,10 @@ int main(int argc, const char* argv[]) { sm_auth(Gc,Ci,Q,Ch,Ci_1,&ostate); printf(" Gc: "); print_bytes(Gc,8); } else { - sscanf(argv[1],"%016llx",&nCi); num_to_bytes(nCi,8,Ci); - sscanf(argv[2],"%016llx",&nQ); num_to_bytes(nQ,8,Q); - sscanf(argv[3],"%016llx",&nCh); num_to_bytes(nCh,8,Ch); - sscanf(argv[4],"%016llx",&nCi_1); num_to_bytes(nCi_1,8,Ci_1); + sscanf(argv[1],"%016" SCNx64,&nCi); num_to_bytes(nCi,8,Ci); + sscanf(argv[2],"%016" SCNx64,&nQ); num_to_bytes(nQ,8,Q); + sscanf(argv[3],"%016" SCNx64,&nCh); num_to_bytes(nCh,8,Ch); + sscanf(argv[4],"%016" SCNx64,&nCi_1); num_to_bytes(nCi_1,8,Ci_1); printf(" Gc: unknown\n"); } @@ -1080,7 +1084,7 @@ int main(int argc, const char* argv[]) { for (itrstates = rstates.begin(); itrstates != rstates.end(); ++itrstates) { rstate_after_gc = *itrstates; sm_left_mask(ks, mask, rstate_after_gc); - printf("Using the state from the top-right bin: " _YELLOW_("0x%07llx")"\n", (unsigned long long)rstate_after_gc); + printf("Using the state from the top-right bin: " _YELLOW_("0x%07" PRIx64)"\n", rstate_after_gc); search_gc_candidates_right(rstate_before_gc, rstate_after_gc, Q, &crstates); printf("Found " _YELLOW_("%lu")" right candidates using the meet-in-the-middle attack\n", crstates.size()); diff --git a/tools/cryptorf/util.c b/tools/cryptorf/util.c index 4da252ab5..383991b96 100644 --- a/tools/cryptorf/util.c +++ b/tools/cryptorf/util.c @@ -1,20 +1,20 @@ -#include "util.h" #include +#include "util.h" -void num_to_bytes(uint64_t n, size_t len, byte_t* dst) +void num_to_bytes(uint64_t n, size_t len, uint8_t *dst) { - while (len--) - { - dst[len] = (byte_t)n; + while (len--) { + dst[len] = (uint8_t)n; n >>= 8; } } -void print_bytes(const byte_t* pbtData, const size_t szLen) { +void print_bytes(const uint8_t *pbtData, const size_t szLen) +{ size_t uiPos; - for (uiPos=0; uiPos < szLen; uiPos++) { - printf("%02x ",pbtData[uiPos]); - if (uiPos>20){ + for (uiPos = 0; uiPos < szLen; uiPos++) { + printf("%02x ", pbtData[uiPos]); + if (uiPos > 20) { printf("..."); break; } diff --git a/tools/cryptorf/util.h b/tools/cryptorf/util.h index 68a16ecf1..844f3e954 100644 --- a/tools/cryptorf/util.h +++ b/tools/cryptorf/util.h @@ -1,9 +1,9 @@ /* - * + * * Various Utilities * * Copyright (C) 2010, Flavio D. Garcia, Peter van Rossum, Roel Verdult - * and Ronny Wichers Schreur. Radboud University Nijmegen + * and Ronny Wichers Schreur. Radboud University Nijmegen * * 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 @@ -17,15 +17,17 @@ * * You should have received a copy of the GNU General Public License * along with this program. If not, see . - * + * */ #ifndef _UTIL_H_ #define _UTIL_H_ -#include -#include "defines.h" +#ifdef __cplusplus +extern "C" { +#endif +#include #define AEND "\x1b[0m" @@ -37,7 +39,10 @@ #define _CYAN_(s) "\x1b[36m" s AEND #define _WHITE_(s) "\x1b[37m" s AEND -void num_to_bytes(uint64_t n, size_t len, byte_t* dst); -void print_bytes(const byte_t* pbtData, const size_t szLen); +void num_to_bytes(uint64_t n, size_t len, uint8_t *dst); +void print_bytes(const uint8_t *pbtData, const size_t szLen); +#ifdef __cplusplus +} +#endif #endif // _UTIL_H_ From 508151ee3a33624f0b1fc9e06548fd3d93050cf1 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 19 Aug 2020 21:51:10 +0200 Subject: [PATCH 0244/1047] hf iclass list - now tries to recovery key --- client/src/cmdhficlass.c | 60 ++++++++++++----- client/src/cmdhficlass.h | 4 ++ client/src/cmdhflist.c | 141 +++++++++++++++++++++++++-------------- client/src/cmdhflist.h | 2 +- client/src/cmdtrace.c | 6 +- 5 files changed, 141 insertions(+), 72 deletions(-) diff --git a/client/src/cmdhficlass.c b/client/src/cmdhficlass.c index 526b14765..c766769cb 100644 --- a/client/src/cmdhficlass.c +++ b/client/src/cmdhficlass.c @@ -362,6 +362,46 @@ static int usage_hf_iclass_permutekey(void) { return PM3_SUCCESS; } +static int cmp_uint32(const void *a, const void *b) { + + const iclass_prekey_t *x = (const iclass_prekey_t *)a; + const iclass_prekey_t *y = (const iclass_prekey_t *)b; + + uint32_t mx = bytes_to_num((uint8_t *)x->mac, 4); + uint32_t my = bytes_to_num((uint8_t *)y->mac, 4); + + if (mx < my) + return -1; + else + return mx > my; +} + +bool check_known_default(uint8_t *csn, uint8_t *epurse, uint8_t* rmac, uint8_t* tmac, uint8_t* key) { + + iclass_prekey_t *prekey = calloc(ICLASS_KEYS_MAX, sizeof(iclass_prekey_t)); + if (prekey == false) { + return PM3_EMALLOC; + } + + uint8_t ccnr[12]; + memcpy(ccnr, epurse, 8); + memcpy(ccnr + 8, rmac, 4); + + GenerateMacKeyFrom(csn, ccnr, false, false, (uint8_t*)iClass_Key_Table, ICLASS_KEYS_MAX, prekey); + qsort(prekey, ICLASS_KEYS_MAX, sizeof(iclass_prekey_t), cmp_uint32); + + iclass_prekey_t lookup; + memcpy(lookup.mac, tmac, 4); + + // binsearch + iclass_prekey_t * item = (iclass_prekey_t *) bsearch(&lookup, prekey, ICLASS_KEYS_MAX, sizeof(iclass_prekey_t), cmp_uint32); + if (item != NULL) { + memcpy(key, item->key, 8); + return true; + } + return false; +} + typedef enum { None = 0, DES, @@ -415,7 +455,7 @@ static uint8_t notset(uint8_t val, uint8_t mask) { return !(val & mask); } -static uint8_t get_pagemap(const picopass_hdr *hdr) { +uint8_t get_pagemap(const picopass_hdr *hdr) { return (hdr->conf.fuses & (FUSE_CRYPT0 | FUSE_CRYPT1)) >> 3; } @@ -2926,9 +2966,7 @@ static int CmdHFiClassCheckKeys(const char *Cmd) { char filename[FILE_PATH_SIZE] = {0}; uint8_t fileNameLen = 0; - iclass_premac_t *pre = NULL; - // time uint64_t t1 = msclock(); while (param_getchar(Cmd, cmdp) != 0x00 && !errors) { @@ -2973,7 +3011,7 @@ static int CmdHFiClassCheckKeys(const char *Cmd) { return res; } - pre = calloc(keycount, sizeof(iclass_premac_t)); + iclass_premac_t *pre = calloc(keycount, sizeof(iclass_premac_t)); if (!pre) { free(keyBlock); return PM3_EMALLOC; @@ -3116,20 +3154,6 @@ out: return PM3_SUCCESS; } -static int cmp_uint32(const void *a, const void *b) { - - const iclass_prekey_t *x = (const iclass_prekey_t *)a; - const iclass_prekey_t *y = (const iclass_prekey_t *)b; - - uint32_t mx = bytes_to_num((uint8_t *)x->mac, 4); - uint32_t my = bytes_to_num((uint8_t *)y->mac, 4); - - if (mx < my) - return -1; - else - return mx > my; -} - // this method tries to identify in which configuration mode a iCLASS / iCLASS SE reader is in. // Standard or Elite / HighSecurity mode. It uses a default key dictionary list in order to work. static int CmdHFiClassLookUp(const char *Cmd) { diff --git a/client/src/cmdhficlass.h b/client/src/cmdhficlass.h index 50152fd6c..afc612c33 100644 --- a/client/src/cmdhficlass.h +++ b/client/src/cmdhficlass.h @@ -13,6 +13,7 @@ #include "common.h" #include "fileutils.h" +#include "pm3_cmd.h" typedef struct iclass_block { uint8_t d[8]; @@ -38,4 +39,7 @@ void GenerateMacFrom(uint8_t *CSN, uint8_t *CCNR, bool use_raw, bool use_elite, void GenerateMacKeyFrom(uint8_t *CSN, uint8_t *CCNR, bool use_raw, bool use_elite, uint8_t *keys, uint32_t keycnt, iclass_prekey_t *list); void PrintPreCalcMac(uint8_t *keys, uint32_t keycnt, iclass_premac_t *pre_list); void PrintPreCalc(iclass_prekey_t *list, uint32_t itemcnt); + +uint8_t get_pagemap(const picopass_hdr *hdr); +bool check_known_default(uint8_t *csn, uint8_t *epurse, uint8_t* rmac, uint8_t* tmac, uint8_t* key); #endif diff --git a/client/src/cmdhflist.c b/client/src/cmdhflist.c index 02abfef20..0e2b40a50 100644 --- a/client/src/cmdhflist.c +++ b/client/src/cmdhflist.c @@ -23,6 +23,7 @@ #include "crc16.h" #include "crapto1/crapto1.h" #include "protocols.h" +#include "cmdhficlass.h" enum MifareAuthSeq { masNone, @@ -326,59 +327,99 @@ void annotateIso14443a(char *exp, size_t size, uint8_t *cmd, uint8_t cmdsize) { applyIso14443a(exp, size, cmd, cmdsize); } -void annotateIclass(char *exp, size_t size, uint8_t *cmd, uint8_t cmdsize) { - uint8_t c = cmd[0] & 0x0F; - uint8_t parity = 0; - for (uint8_t i = 0; i < 7; i++) { - parity ^= (cmd[0] >> i) & 1; - } +void annotateIclass(char *exp, size_t size, uint8_t *cmd, uint8_t cmdsize, bool isResponse) { - switch (c) { - case ICLASS_CMD_HALT: - snprintf(exp, size, "HALT"); - break; - case ICLASS_CMD_SELECT: - snprintf(exp, size, "SELECT"); - break; - case ICLASS_CMD_ACTALL: - snprintf(exp, size, "ACTALL"); - break; - case ICLASS_CMD_DETECT: - snprintf(exp, size, "DETECT"); - break; - case ICLASS_CMD_CHECK: - snprintf(exp, size, "CHECK"); - break; - case ICLASS_CMD_READ4: - snprintf(exp, size, "READ4(%d)", cmd[1]); - break; - case ICLASS_CMD_READ_OR_IDENTIFY: { - if (cmdsize > 1) { - snprintf(exp, size, "READ(%d)", cmd[1]); - } else { - snprintf(exp, size, "IDENTIFY"); - } - break; + enum pico_state {PICO_NONE, PICO_SELECT, PICO_AUTH_EPURSE, PICO_AUTH_MACS }; + static enum pico_state curr_state = PICO_NONE; + static uint8_t csn[8]; + static uint8_t epurse[8]; + static uint8_t rmac[4]; + static uint8_t tmac[4]; + + if ( isResponse == false ) { + uint8_t c = cmd[0] & 0x0F; + uint8_t parity = 0; + for (uint8_t i = 0; i < 7; i++) { + parity ^= (cmd[0] >> i) & 1; } - case ICLASS_CMD_PAGESEL: - snprintf(exp, size, "PAGESEL(%d)", cmd[1]); - break; - case ICLASS_CMD_UPDATE: - snprintf(exp, size, "UPDATE(%d)", cmd[1]); - break; - case ICLASS_CMD_READCHECK: - if (ICLASS_CREDIT(cmd[0])) { - snprintf(exp, size, "READCHECK[Kc](%d)", cmd[1]); - } else { - snprintf(exp, size, "READCHECK[Kd](%d)", cmd[1]); + + switch (c) { + case ICLASS_CMD_HALT: + snprintf(exp, size, "HALT"); + curr_state = PICO_NONE; + break; + case ICLASS_CMD_SELECT: + snprintf(exp, size, "SELECT"); + curr_state = PICO_SELECT; + break; + case ICLASS_CMD_ACTALL: + snprintf(exp, size, "ACTALL"); + curr_state = PICO_NONE; + break; + case ICLASS_CMD_DETECT: + snprintf(exp, size, "DETECT"); + curr_state = PICO_NONE; + break; + case ICLASS_CMD_CHECK: + snprintf(exp, size, "CHECK"); + curr_state = PICO_AUTH_MACS; + memcpy(rmac, cmd + 1, 4); + memcpy(tmac, cmd + 5, 4); + break; + case ICLASS_CMD_READ4: + snprintf(exp, size, "READ4(%d)", cmd[1]); + break; + case ICLASS_CMD_READ_OR_IDENTIFY: { + + if (cmdsize > 1) { + snprintf(exp, size, "READ(%d)", cmd[1]); + } else { + snprintf(exp, size, "IDENTIFY"); + } + break; } - break; - case ICLASS_CMD_ACT: - snprintf(exp, size, "ACT"); - break; - default: - snprintf(exp, size, "?"); - break; + case ICLASS_CMD_PAGESEL: + snprintf(exp, size, "PAGESEL(%d)", cmd[1]); + curr_state = PICO_NONE; + break; + case ICLASS_CMD_UPDATE: + snprintf(exp, size, "UPDATE(%d)", cmd[1]); + curr_state = PICO_NONE; + break; + case ICLASS_CMD_READCHECK: + if (ICLASS_CREDIT(cmd[0])) { + snprintf(exp, size, "READCHECK[Kc](%d)", cmd[1]); + curr_state = PICO_AUTH_EPURSE; + } else { + snprintf(exp, size, "READCHECK[Kd](%d)", cmd[1]); + curr_state = PICO_AUTH_EPURSE; + } + break; + case ICLASS_CMD_ACT: + snprintf(exp, size, "ACT"); + curr_state = PICO_NONE; + break; + default: + snprintf(exp, size, "?"); + curr_state = PICO_NONE; + break; + } + + } else { + + if (curr_state == PICO_SELECT) { + memcpy(csn, cmd, 8); + curr_state = PICO_NONE; + } else if (curr_state == PICO_AUTH_EPURSE) { + memcpy(epurse, cmd, 8); + } else if ( curr_state == PICO_AUTH_MACS) { + + uint8_t key[8]; + if (check_known_default(csn, epurse, rmac, tmac, key)) { + snprintf(exp, size, "( " _GREEN_("%s") ")", sprint_hex(key, 8) ); + } + curr_state = PICO_NONE; + } } return; } diff --git a/client/src/cmdhflist.h b/client/src/cmdhflist.h index 6a7a60bbe..f12f2a61d 100644 --- a/client/src/cmdhflist.h +++ b/client/src/cmdhflist.h @@ -38,7 +38,7 @@ uint8_t iclass_CRC_check(bool isResponse, uint8_t *d, uint8_t n); int applyIso14443a(char *exp, size_t size, uint8_t *cmd, uint8_t cmdsize); -void annotateIclass(char *exp, size_t size, uint8_t *cmd, uint8_t cmdsize); +void annotateIclass(char *exp, size_t size, uint8_t *cmd, uint8_t cmdsize, bool isResponse); void annotateIso15693(char *exp, size_t size, uint8_t *cmd, uint8_t cmdsize); void annotateTopaz(char *exp, size_t size, uint8_t *cmd, uint8_t cmdsize); void annotateLegic(char *exp, size_t size, uint8_t *cmd, uint8_t cmdsize); diff --git a/client/src/cmdtrace.c b/client/src/cmdtrace.c index aad064289..04bb64f95 100644 --- a/client/src/cmdtrace.c +++ b/client/src/cmdtrace.c @@ -387,6 +387,9 @@ static uint16_t printTraceLine(uint16_t tracepos, uint16_t traceLen, uint8_t *tr case PROTO_HITAGS: annotateHitagS(explanation, sizeof(explanation), frame, data_len, hdr->isResponse); break; + case ICLASS: + annotateIclass(explanation, sizeof(explanation), frame, data_len, hdr->isResponse); + break; default: break; } @@ -397,9 +400,6 @@ static uint16_t printTraceLine(uint16_t tracepos, uint16_t traceLen, uint8_t *tr case LEGIC: annotateLegic(explanation, sizeof(explanation), frame, data_len); break; - case ICLASS: - annotateIclass(explanation, sizeof(explanation), frame, data_len); - break; case ISO_14443A: annotateIso14443a(explanation, sizeof(explanation), frame, data_len); break; From bba5de517afab84722b4dcff0f2c0485332b79c2 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 19 Aug 2020 21:52:12 +0200 Subject: [PATCH 0245/1047] iclass save to json now have more verbose file --- client/src/fileutils.c | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/client/src/fileutils.c b/client/src/fileutils.c index 2c62238cd..0010eae0c 100644 --- a/client/src/fileutils.c +++ b/client/src/fileutils.c @@ -47,6 +47,9 @@ #include "commonutil.h" #include "proxmark3.h" #include "util.h" +#include "cmdhficlass.h" // pagemap +#include "protocols.h" // iclass defines + #ifdef _WIN32 #include "scandir.h" #include @@ -426,15 +429,28 @@ int saveFileJSONex(const char *preferredName, JSONFileType ftype, uint8_t *data, } case jsfIclass: { JsonSaveStr(root, "FileType", "iclass"); - uint8_t csn[8] = {0}; - memcpy(csn, data, 8); - JsonSaveBufAsHexCompact(root, "$.Card.CSN", csn, sizeof(csn)); + + picopass_hdr *hdr = (picopass_hdr *)data; + JsonSaveBufAsHexCompact(root, "$.Card.CSN", hdr->csn, sizeof(hdr->csn)); + JsonSaveBufAsHexCompact(root, "$.Card.Configuration",(uint8_t *)&hdr->conf, sizeof(hdr->conf)); + + uint8_t pagemap = get_pagemap(hdr); + if (pagemap == PICOPASS_NON_SECURE_PAGEMODE) { + picopass_ns_hdr *ns_hdr = (picopass_ns_hdr *)data; + JsonSaveBufAsHexCompact(root, "$.Card.AIA", ns_hdr->app_issuer_area, sizeof(ns_hdr->app_issuer_area)); + } else { + JsonSaveBufAsHexCompact(root, "$.Card.Epurse", hdr->epurse, sizeof(hdr->epurse)); + JsonSaveBufAsHexCompact(root, "$.Card.Kd",hdr->key_d, sizeof(hdr->key_d)); + JsonSaveBufAsHexCompact(root, "$.Card.Kc", hdr->key_c, sizeof(hdr->key_c)); + JsonSaveBufAsHexCompact(root, "$.Card.AIA", hdr->app_issuer_area, sizeof(hdr->app_issuer_area)); + } for (size_t i = 0; i < (datalen / 8); i++) { char path[PATH_MAX_LENGTH] = {0}; sprintf(path, "$.blocks.%zu", i); JsonSaveBufAsHexCompact(root, path, data + (i * 8), 8); } + break; } case jsfT55x7: { From a76596c3fe4f9f15215a182b84fb09e1cc61c578 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Wed, 19 Aug 2020 21:56:22 +0200 Subject: [PATCH 0246/1047] cryptorf: minor tweak --- tools/cryptorf/util.c | 2 +- tools/cryptorf/util.h | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/tools/cryptorf/util.c b/tools/cryptorf/util.c index 383991b96..081fb43cf 100644 --- a/tools/cryptorf/util.c +++ b/tools/cryptorf/util.c @@ -1,5 +1,5 @@ -#include #include "util.h" +#include void num_to_bytes(uint64_t n, size_t len, uint8_t *dst) { diff --git a/tools/cryptorf/util.h b/tools/cryptorf/util.h index 844f3e954..4f08469e3 100644 --- a/tools/cryptorf/util.h +++ b/tools/cryptorf/util.h @@ -28,6 +28,7 @@ extern "C" { #endif #include +#include #define AEND "\x1b[0m" From b134753a08d7a1a40aee1e66a44cd5cd91656ec3 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Wed, 19 Aug 2020 22:19:46 +0200 Subject: [PATCH 0247/1047] cryptorf: style --- common/cryptorf/cryptolib.c | 483 +++++----- common/cryptorf/cryptolib.h | 16 +- common/cryptorf/cryptolib_baloncu.c | 222 +++++ common/cryptorf/cryptolib_baloncu.h | 41 + tools/cryptorf/cm.c | 132 +-- tools/cryptorf/sm.c | 101 +- tools/cryptorf/sma.cpp | 1334 +++++++++++++-------------- tools/cryptorf/sma_multi.cpp | 842 ++++++++--------- tools/cryptorf/util.c | 30 +- 9 files changed, 1703 insertions(+), 1498 deletions(-) create mode 100644 common/cryptorf/cryptolib_baloncu.c create mode 100644 common/cryptorf/cryptolib_baloncu.h diff --git a/common/cryptorf/cryptolib.c b/common/cryptorf/cryptolib.c index 26b07f824..bf597317b 100644 --- a/common/cryptorf/cryptolib.c +++ b/common/cryptorf/cryptolib.c @@ -27,35 +27,32 @@ #include typedef enum { - CA_ENCRYPT = 0x01, - CA_DECRYPT = 0x02 + CA_ENCRYPT = 0x01, + CA_DECRYPT = 0x02 } CryptoAction; int counter = 0; -static uint8_t nibbles_to_byte(nibble b0, nibble b1) -{ - // Combine both nibbles - return ((b0 << 4) | b1); +static uint8_t nibbles_to_byte(nibble b0, nibble b1) { + // Combine both nibbles + return ((b0 << 4) | b1); } -static uint8_t funny_mod(uint8_t a, uint8_t m) -{ - // Just return the input when this is less or equal than the modular value - if (a < m) return a; +static uint8_t funny_mod(uint8_t a, uint8_t m) { + // Just return the input when this is less or equal than the modular value + if (a < m) return a; - // Compute the modular value - a %= m; + // Compute the modular value + a %= m; - // Return the funny value, when the output was now zero, return the modular value - return (a == 0) ? m : a; + // Return the funny value, when the output was now zero, return the modular value + return (a == 0) ? m : a; } -static uint8_t bit_rotate_left(uint8_t a, uint8_t n_bits) -{ - // Rotate value a with the length of n_bits only 1 time - uint8_t mask = (1 << n_bits) - 1; - return ((a << 1) | (a >> (n_bits - 1))) & mask; +static uint8_t bit_rotate_left(uint8_t a, uint8_t n_bits) { + // Rotate value a with the length of n_bits only 1 time + uint8_t mask = (1 << n_bits) - 1; + return ((a << 1) | (a >> (n_bits - 1))) & mask; } /* @@ -92,276 +89,258 @@ static void reconstruct_nibbles(crypto_state s) s->b1 |= s->b1r & s->b1s; } */ -static void next_left(uint8_t in, crypto_state s) -{ - uint8_t b3, b6, bx; +static void next_left(uint8_t in, crypto_state s) { + uint8_t b3, b6, bx; - // Update the left cipher state with the input byte - s->l ^= ((in & 0x1f) << 20); + // Update the left cipher state with the input byte + s->l ^= ((in & 0x1f) << 20); - // Extract the two (5 bits) values used for modular addtion - b3 = (uint8_t)((s->l >> 15) & 0x1f); - b6 = (uint8_t)(s->l & 0x1f); + // Extract the two (5 bits) values used for modular addtion + b3 = (uint8_t)((s->l >> 15) & 0x1f); + b6 = (uint8_t)(s->l & 0x1f); - // Compute the modular addition - bx = funny_mod(b3 + bit_rotate_left(b6, 5), 0x1f); + // Compute the modular addition + bx = funny_mod(b3 + bit_rotate_left(b6, 5), 0x1f); - // Rotate the left cipher state 5 bits - s->l = ((s->l >> 5) | ((uint64_t)bx << 30)); + // Rotate the left cipher state 5 bits + s->l = ((s->l >> 5) | ((uint64_t)bx << 30)); - // Save the 4 left output bits used for b1 - s->b1l = ((bx ^ b3) & 0x0f); + // Save the 4 left output bits used for b1 + s->b1l = ((bx ^ b3) & 0x0f); } -static void next_right(uint8_t in, crypto_state s) -{ - uint8_t b16, b18, bx; +static void next_right(uint8_t in, crypto_state s) { + uint8_t b16, b18, bx; - // Update the right cipher state with the input byte - s->r ^= ((in & 0xf8) << 12); + // Update the right cipher state with the input byte + s->r ^= ((in & 0xf8) << 12); - // Extract the two (5 bits) values used for modular addtion - b16 = (uint8_t)((s->r >> 10) & 0x1f); - b18 = (uint8_t)(s->r & 0x1f); + // Extract the two (5 bits) values used for modular addtion + b16 = (uint8_t)((s->r >> 10) & 0x1f); + b18 = (uint8_t)(s->r & 0x1f); - // Compute the modular addition - bx = funny_mod(b18 + b16, 0x1f); + // Compute the modular addition + bx = funny_mod(b18 + b16, 0x1f); - // Rotate the right cipher state 5 bits - s->r = ((s->r >> 5) | ((uint64_t)bx << 20)); + // Rotate the right cipher state 5 bits + s->r = ((s->r >> 5) | ((uint64_t)bx << 20)); - // Save the 4 right output bits used for b1 - s->b1r = ((bx ^ b16) & 0x0f); + // Save the 4 right output bits used for b1 + s->b1r = ((bx ^ b16) & 0x0f); } -static void next_middle(uint8_t in, crypto_state s) -{ - uint8_t b12, b13, bx; +static void next_middle(uint8_t in, crypto_state s) { + uint8_t b12, b13, bx; - // Update the middle cipher state with the input byte - s->m ^= (((((uint64_t)in << 3) & 0x7f) | (in >> 5)) << 14); + // Update the middle cipher state with the input byte + s->m ^= (((((uint64_t)in << 3) & 0x7f) | (in >> 5)) << 14); - // Extract the two (7 bits) values used for modular addtion - b12 = (uint8_t)((s->m >> 7) & 0x7f); - b13 = (uint8_t)(s->m & 0x7f); + // Extract the two (7 bits) values used for modular addtion + b12 = (uint8_t)((s->m >> 7) & 0x7f); + b13 = (uint8_t)(s->m & 0x7f); - // Compute the modular addition - bx = (funny_mod(b12 + bit_rotate_left(b13, 7), 0x7f)); + // Compute the modular addition + bx = (funny_mod(b12 + bit_rotate_left(b13, 7), 0x7f)); - // Rotate the middle cipher state 7 bits - s->m = ((s->m >> 7) | ((uint64_t)bx << 42)); + // Rotate the middle cipher state 7 bits + s->m = ((s->m >> 7) | ((uint64_t)bx << 42)); - // Save the 4 middle selector bits used for b1 - s->b1s = bx & 0x0f; + // Save the 4 middle selector bits used for b1 + s->b1s = bx & 0x0f; } -static void next(const bool feedback, uint8_t in, crypto_state s) -{ - // Initialize the (optional) input parameter - uint8_t a = in; +static void next(const bool feedback, uint8_t in, crypto_state s) { + // Initialize the (optional) input parameter + uint8_t a = in; - // Only Cryptomemory uses feedback - if (feedback) { - // Construct the cipher update 'a' from (input ^ feedback) - a = in ^ nibbles_to_byte(s->b0, s->b1); - } - - // Shift the cipher state - next_left(a, s); - next_middle(a, s); - next_right(a, s); - - // For active states we can use the available (previous) 'b1' nibble, - // otherwise use reconstruct_nibbles() to generate them - // reconstruct_nibbles(s) - - // The nible from b1 shifts to b0 - s->b0 = s->b1; - - // Construct the new value of nible b1 - s->b1 = s->b1l & ~(s->b1s); - s->b1 |= s->b1r & s->b1s; -} - -static void next_n(const bool feedback, size_t n, uint8_t in, crypto_state s) -{ - // While n-rounds left, shift the cipher - while (n--) next(feedback, in, s); -} - -static void initialize(const bool feedback, const uint8_t *Gc, const uint8_t *Ci, const uint8_t *Q, const size_t n, crypto_state s) -{ - size_t pos; - - // Reset the cipher state - memset(s, 0x00, sizeof(crypto_state_t)); - - // Load in the ci (tag-nonce), together with the first half of Q (reader-nonce) - for (pos = 0; pos < 4; pos++) { - next_n(feedback, n, Ci[2 * pos ], s); - next_n(feedback, n, Ci[2 * pos + 1], s); - next(feedback, Q[pos], s); - } - - // Load in the diversified key (Gc), together with the second half of Q (reader-nonce) - for (pos = 0; pos < 4; pos++) { - next_n(feedback, n, Gc[2 * pos ], s); - next_n(feedback, n, Gc[2 * pos + 1], s); - next(feedback, Q[pos + 4], s); - } -} - -static uint8_t cm_byte(crypto_state s) -{ - // Construct keystream byte by combining both nibbles - return nibbles_to_byte(s->b0, s->b1); -} - -static uint8_t sm_byte(crypto_state s) -{ - uint8_t ks; - - // Construct keystream byte by combining 2 parts from 4 nibbles - next_n(false, 2, 0, s); - ks = s->b1 << 4; - next_n(false, 2, 0, s); - ks |= s->b1; - - return ks; -} - -void print_crypto_state(const char *text, crypto_state s) -{ - int pos; - - printf("%s", text); - for (pos = 6; pos >= 0; pos--) - printf(" %02x", (uint8_t)(s->l >> (pos * 5)) & 0x1f); - - printf(" |"); - for (pos = 6; pos >= 0; pos--) - printf(" %02x", (uint8_t)(s->m >> (pos * 7)) & 0x7f); - - printf(" |"); - for (pos = 4; pos >= 0; pos--) - printf(" %02x", (uint8_t)(s->r >> (pos * 5)) & 0x1f); - - printf(" | %02x", cm_byte(s)); - printf("\n"); -} - -void sm_auth(const uint8_t *Gc, const uint8_t *Ci, const uint8_t *Q, uint8_t *Ch, uint8_t *Ci_1, crypto_state s) -{ - size_t pos; - - initialize(false, Gc, Ci, Q, 1, s); - - // Generate challange answer for Tag and Reader - for (pos = 0; pos < 8; pos++) { - Ci_1[pos] = sm_byte(s); - Ch[pos] = sm_byte(s); - } -} - -void cm_auth(const uint8_t *Gc, const uint8_t *Ci, const uint8_t *Q, uint8_t *Ch, uint8_t *Ci_1, uint8_t *Ci_2, crypto_state s) -{ - size_t pos; - - initialize(true, Gc, Ci, Q, 3, s); - - // Construct the reader-answer (challange) - next_n(true, 6, 0, s); - Ch[0] = cm_byte(s); - for (pos = 1; pos < 8; pos++) { - next_n(true, 7, 0, s); - Ch [pos] = cm_byte(s); - } - - // Construct the tag-answer (Ci+1 = ff .. .. .. .. .. .. ..) - Ci_1[0] = 0xff; - for (pos = 1; pos < 8; pos++) { - next_n(true, 2, 0, s); - Ci_1[pos] = cm_byte(s); - } - - // Construct the session key (Ci+2) - for (pos = 0; pos < 8; pos++) { - next_n(true, 2, 0, s); - Ci_2[pos] = cm_byte(s); - } - - // Prepare the cipher for encryption by shifting 3 more times - next_n(true, 3, 0, s); -} - -static void cm_crypt(const CryptoAction ca, const uint8_t offset, const uint8_t len, const uint8_t *in, uint8_t *out, crypto_state s) -{ - size_t pos; - uint8_t bt; - - next_n(true, 5, 0, s); - next(true, offset, s); - next_n(true, 5, 0, s); - next(true, len, s); - for (pos = 0; pos < len; pos++) { - // Perform the crypto operation - bt = in[pos] ^ cm_byte(s); - - // Generate output - if (out) out[pos] = bt; - - // Detect where to find the plaintext for loading into cipher state - if (ca == CA_DECRYPT) { - next(true, bt, s); - } else { - next(true, in[pos], s); + // Only Cryptomemory uses feedback + if (feedback) { + // Construct the cipher update 'a' from (input ^ feedback) + a = in ^ nibbles_to_byte(s->b0, s->b1); } - // Shift the cipher state 5 times + // Shift the cipher state + next_left(a, s); + next_middle(a, s); + next_right(a, s); + + // For active states we can use the available (previous) 'b1' nibble, + // otherwise use reconstruct_nibbles() to generate them + // reconstruct_nibbles(s) + + // The nible from b1 shifts to b0 + s->b0 = s->b1; + + // Construct the new value of nible b1 + s->b1 = s->b1l & ~(s->b1s); + s->b1 |= s->b1r & s->b1s; +} + +static void next_n(const bool feedback, size_t n, uint8_t in, crypto_state s) { + // While n-rounds left, shift the cipher + while (n--) next(feedback, in, s); +} + +static void initialize(const bool feedback, const uint8_t *Gc, const uint8_t *Ci, const uint8_t *Q, const size_t n, crypto_state s) { + size_t pos; + + // Reset the cipher state + memset(s, 0x00, sizeof(crypto_state_t)); + + // Load in the ci (tag-nonce), together with the first half of Q (reader-nonce) + for (pos = 0; pos < 4; pos++) { + next_n(feedback, n, Ci[2 * pos ], s); + next_n(feedback, n, Ci[2 * pos + 1], s); + next(feedback, Q[pos], s); + } + + // Load in the diversified key (Gc), together with the second half of Q (reader-nonce) + for (pos = 0; pos < 4; pos++) { + next_n(feedback, n, Gc[2 * pos ], s); + next_n(feedback, n, Gc[2 * pos + 1], s); + next(feedback, Q[pos + 4], s); + } +} + +static uint8_t cm_byte(crypto_state s) { + // Construct keystream byte by combining both nibbles + return nibbles_to_byte(s->b0, s->b1); +} + +static uint8_t sm_byte(crypto_state s) { + uint8_t ks; + + // Construct keystream byte by combining 2 parts from 4 nibbles + next_n(false, 2, 0, s); + ks = s->b1 << 4; + next_n(false, 2, 0, s); + ks |= s->b1; + + return ks; +} + +void print_crypto_state(const char *text, crypto_state s) { + int pos; + + printf("%s", text); + for (pos = 6; pos >= 0; pos--) + printf(" %02x", (uint8_t)(s->l >> (pos * 5)) & 0x1f); + + printf(" |"); + for (pos = 6; pos >= 0; pos--) + printf(" %02x", (uint8_t)(s->m >> (pos * 7)) & 0x7f); + + printf(" |"); + for (pos = 4; pos >= 0; pos--) + printf(" %02x", (uint8_t)(s->r >> (pos * 5)) & 0x1f); + + printf(" | %02x", cm_byte(s)); + printf("\n"); +} + +void sm_auth(const uint8_t *Gc, const uint8_t *Ci, const uint8_t *Q, uint8_t *Ch, uint8_t *Ci_1, crypto_state s) { + size_t pos; + + initialize(false, Gc, Ci, Q, 1, s); + + // Generate challange answer for Tag and Reader + for (pos = 0; pos < 8; pos++) { + Ci_1[pos] = sm_byte(s); + Ch[pos] = sm_byte(s); + } +} + +void cm_auth(const uint8_t *Gc, const uint8_t *Ci, const uint8_t *Q, uint8_t *Ch, uint8_t *Ci_1, uint8_t *Ci_2, crypto_state s) { + size_t pos; + + initialize(true, Gc, Ci, Q, 3, s); + + // Construct the reader-answer (challange) + next_n(true, 6, 0, s); + Ch[0] = cm_byte(s); + for (pos = 1; pos < 8; pos++) { + next_n(true, 7, 0, s); + Ch [pos] = cm_byte(s); + } + + // Construct the tag-answer (Ci+1 = ff .. .. .. .. .. .. ..) + Ci_1[0] = 0xff; + for (pos = 1; pos < 8; pos++) { + next_n(true, 2, 0, s); + Ci_1[pos] = cm_byte(s); + } + + // Construct the session key (Ci+2) + for (pos = 0; pos < 8; pos++) { + next_n(true, 2, 0, s); + Ci_2[pos] = cm_byte(s); + } + + // Prepare the cipher for encryption by shifting 3 more times + next_n(true, 3, 0, s); +} + +static void cm_crypt(const CryptoAction ca, const uint8_t offset, const uint8_t len, const uint8_t *in, uint8_t *out, crypto_state s) { + size_t pos; + uint8_t bt; + next_n(true, 5, 0, s); - } + next(true, offset, s); + next_n(true, 5, 0, s); + next(true, len, s); + for (pos = 0; pos < len; pos++) { + // Perform the crypto operation + bt = in[pos] ^ cm_byte(s); + + // Generate output + if (out) out[pos] = bt; + + // Detect where to find the plaintext for loading into cipher state + if (ca == CA_DECRYPT) { + next(true, bt, s); + } else { + next(true, in[pos], s); + } + + // Shift the cipher state 5 times + next_n(true, 5, 0, s); + } } -void cm_encrypt(const uint8_t offset, const uint8_t len, const uint8_t *ct, uint8_t *pt, crypto_state s) -{ - next_n(true, 5, 0, s); - next(true, 0, s); - cm_crypt(CA_ENCRYPT, offset, len, ct, pt, s); +void cm_encrypt(const uint8_t offset, const uint8_t len, const uint8_t *ct, uint8_t *pt, crypto_state s) { + next_n(true, 5, 0, s); + next(true, 0, s); + cm_crypt(CA_ENCRYPT, offset, len, ct, pt, s); } -void cm_decrypt(const uint8_t offset, const uint8_t len, const uint8_t *ct, uint8_t *pt, crypto_state s) -{ - next_n(true, 5, 0, s); - next(true, 0, s); - cm_crypt(CA_DECRYPT, offset, len, ct, pt, s); +void cm_decrypt(const uint8_t offset, const uint8_t len, const uint8_t *ct, uint8_t *pt, crypto_state s) { + next_n(true, 5, 0, s); + next(true, 0, s); + cm_crypt(CA_DECRYPT, offset, len, ct, pt, s); } -void cm_grind_read_system_zone(const uint8_t offset, const uint8_t len, const uint8_t *pt, crypto_state s) -{ - cm_crypt(CA_ENCRYPT, offset, len, pt, NULL, s); +void cm_grind_read_system_zone(const uint8_t offset, const uint8_t len, const uint8_t *pt, crypto_state s) { + cm_crypt(CA_ENCRYPT, offset, len, pt, NULL, s); } -void cm_grind_set_user_zone(const uint8_t zone, crypto_state s) -{ - next(true, zone, s); +void cm_grind_set_user_zone(const uint8_t zone, crypto_state s) { + next(true, zone, s); } -void cm_mac(uint8_t *mac, crypto_state s) -{ - next_n(true, 10, 0, s); - if (mac) - mac[0] = cm_byte(s); +void cm_mac(uint8_t *mac, crypto_state s) { + next_n(true, 10, 0, s); + if (mac) + mac[0] = cm_byte(s); - next_n(true, 5, 0, s); - if (mac) - mac[1] = cm_byte(s); + next_n(true, 5, 0, s); + if (mac) + mac[1] = cm_byte(s); } -void cm_password(const uint8_t *pt, uint8_t *ct, crypto_state s) -{ - for (size_t pos = 0; pos < 3; pos++) { - next_n(true, 5, pt[pos], s); - ct[pos] = cm_byte(s); - } +void cm_password(const uint8_t *pt, uint8_t *ct, crypto_state s) { + for (size_t pos = 0; pos < 3; pos++) { + next_n(true, 5, pt[pos], s); + ct[pos] = cm_byte(s); + } } diff --git a/common/cryptorf/cryptolib.h b/common/cryptorf/cryptolib.h index 0f31d8870..978afd27b 100644 --- a/common/cryptorf/cryptolib.h +++ b/common/cryptorf/cryptolib.h @@ -33,14 +33,14 @@ extern "C" { typedef uint8_t nibble; typedef struct { - uint64_t l; - uint64_t m; - uint64_t r; - nibble b0; - nibble b1; - nibble b1l; - nibble b1r; - nibble b1s; + uint64_t l; + uint64_t m; + uint64_t r; + nibble b0; + nibble b1; + nibble b1l; + nibble b1r; + nibble b1s; } crypto_state_t; typedef crypto_state_t *crypto_state; diff --git a/common/cryptorf/cryptolib_baloncu.c b/common/cryptorf/cryptolib_baloncu.c new file mode 100644 index 000000000..6a69250d3 --- /dev/null +++ b/common/cryptorf/cryptolib_baloncu.c @@ -0,0 +1,222 @@ +#include "cryptolib.h" + +static byte_t rotate5_lut[] = {0x00, 0x02, 0x04, 0x06, 0x08, 0x0a, 0x0c, 0x0e, 0x10, 0x12, 0x14, 0x16, 0x18, 0x1a, 0x1c, 0x1e, 0x01, 0x03, 0x05, 0x07, 0x09, 0x0b, 0x0d, 0x0f, 0x11, 0x13, 0x15, 0x17, 0x19, 0x1b, 0x1d, 0x1f, 0x02, 0x02, 0x06, 0x06, 0x0a, 0x0a, 0x0e, 0x0e, 0x12, 0x12, 0x16, 0x16, 0x1a, 0x1a, 0x1e, 0x1e, 0x03, 0x03, 0x07, 0x07, 0x0b, 0x0b, 0x0f, 0x0f, 0x13, 0x13, 0x17, 0x17, 0x1b, 0x1b, 0x1f, 0x1f, 0x04, 0x06, 0x04, 0x06, 0x0c, 0x0e, 0x0c, 0x0e, 0x14, 0x16, 0x14, 0x16, 0x1c, 0x1e, 0x1c, 0x1e, 0x05, 0x07, 0x05, 0x07, 0x0d, 0x0f, 0x0d, 0x0f, 0x15, 0x17, 0x15, 0x17, 0x1d, 0x1f, 0x1d, 0x1f, 0x06, 0x06, 0x06, 0x06, 0x0e, 0x0e, 0x0e, 0x0e, 0x16, 0x16, 0x16, 0x16, 0x1e, 0x1e, 0x1e, 0x1e, 0x07, 0x07, 0x07, 0x07, 0x0f, 0x0f, 0x0f, 0x0f, 0x17, 0x17, 0x17, 0x17, 0x1f, 0x1f, 0x1f, 0x1f, 0x08, 0x0a, 0x0c, 0x0e, 0x08, 0x0a, 0x0c, 0x0e, 0x18, 0x1a, 0x1c, 0x1e, 0x18, 0x1a, 0x1c, 0x1e, 0x09, 0x0b, 0x0d, 0x0f, 0x09, 0x0b, 0x0d, 0x0f, 0x19, 0x1b, 0x1d, 0x1f, 0x19, 0x1b, 0x1d, 0x1f, 0x0a, 0x0a, 0x0e, 0x0e, 0x0a, 0x0a, 0x0e, 0x0e, 0x1a, 0x1a, 0x1e, 0x1e, 0x1a, 0x1a, 0x1e, 0x1e, 0x0b, 0x0b, 0x0f, 0x0f, 0x0b, 0x0b, 0x0f, 0x0f, 0x1b, 0x1b, 0x1f, 0x1f, 0x1b, 0x1b, 0x1f, 0x1f, 0x0c, 0x0e, 0x0c, 0x0e, 0x0c, 0x0e, 0x0c, 0x0e, 0x1c, 0x1e, 0x1c, 0x1e, 0x1c, 0x1e, 0x1c, 0x1e, 0x0d, 0x0f, 0x0d, 0x0f, 0x0d, 0x0f, 0x0d, 0x0f, 0x1d, 0x1f, 0x1d, 0x1f, 0x1d, 0x1f, 0x1d, 0x1f, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f}; + +static byte_t rotate7_lut[] = {0x00, 0x02, 0x04, 0x06, 0x08, 0x0a, 0x0c, 0x0e, 0x10, 0x12, 0x14, 0x16, 0x18, 0x1a, 0x1c, 0x1e, 0x20, 0x22, 0x24, 0x26, 0x28, 0x2a, 0x2c, 0x2e, 0x30, 0x32, 0x34, 0x36, 0x38, 0x3a, 0x3c, 0x3e, 0x40, 0x42, 0x44, 0x46, 0x48, 0x4a, 0x4c, 0x4e, 0x50, 0x52, 0x54, 0x56, 0x58, 0x5a, 0x5c, 0x5e, 0x60, 0x62, 0x64, 0x66, 0x68, 0x6a, 0x6c, 0x6e, 0x70, 0x72, 0x74, 0x76, 0x78, 0x7a, 0x7c, 0x7e, 0x01, 0x03, 0x05, 0x07, 0x09, 0x0b, 0x0d, 0x0f, 0x11, 0x13, 0x15, 0x17, 0x19, 0x1b, 0x1d, 0x1f, 0x21, 0x23, 0x25, 0x27, 0x29, 0x2b, 0x2d, 0x2f, 0x31, 0x33, 0x35, 0x37, 0x39, 0x3b, 0x3d, 0x3f, 0x41, 0x43, 0x45, 0x47, 0x49, 0x4b, 0x4d, 0x4f, 0x51, 0x53, 0x55, 0x57, 0x59, 0x5b, 0x5d, 0x5f, 0x61, 0x63, 0x65, 0x67, 0x69, 0x6b, 0x6d, 0x6f, 0x71, 0x73, 0x75, 0x77, 0x79, 0x7b, 0x7d, 0x7f, 0x02, 0x02, 0x06, 0x06, 0x0a, 0x0a, 0x0e, 0x0e, 0x12, 0x12, 0x16, 0x16, 0x1a, 0x1a, 0x1e, 0x1e, 0x22, 0x22, 0x26, 0x26, 0x2a, 0x2a, 0x2e, 0x2e, 0x32, 0x32, 0x36, 0x36, 0x3a, 0x3a, 0x3e, 0x3e, 0x42, 0x42, 0x46, 0x46, 0x4a, 0x4a, 0x4e, 0x4e, 0x52, 0x52, 0x56, 0x56, 0x5a, 0x5a, 0x5e, 0x5e, 0x62, 0x62, 0x66, 0x66, 0x6a, 0x6a, 0x6e, 0x6e, 0x72, 0x72, 0x76, 0x76, 0x7a, 0x7a, 0x7e, 0x7e, 0x03, 0x03, 0x07, 0x07, 0x0b, 0x0b, 0x0f, 0x0f, 0x13, 0x13, 0x17, 0x17, 0x1b, 0x1b, 0x1f, 0x1f, 0x23, 0x23, 0x27, 0x27, 0x2b, 0x2b, 0x2f, 0x2f, 0x33, 0x33, 0x37, 0x37, 0x3b, 0x3b, 0x3f, 0x3f, 0x43, 0x43, 0x47, 0x47, 0x4b, 0x4b, 0x4f, 0x4f, 0x53, 0x53, 0x57, 0x57, 0x5b, 0x5b, 0x5f, 0x5f, 0x63, 0x63, 0x67, 0x67, 0x6b, 0x6b, 0x6f, 0x6f, 0x73, 0x73, 0x77, 0x77, 0x7b, 0x7b, 0x7f, 0x7f}; + +static byte_t funny_mod1f_lut[] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07}; + +static byte_t funny_mod7f_lut[] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x01}; + + +typedef enum { + CA_ENCRYPT = 0x01, + CA_DECRYPT = 0x02 +} CryptoAction; + +int counter = 0; + +byte_t nibbles_to_byte(nibble b0, nibble b1) { + // Combine both nibbles + return ((b0 << 4) | b1); +} + +byte_t funny_mod(byte_t a, byte_t m) { + // Just return the input when this is less or equal than the modular value + if (a < m) return a; + + // Compute the modular value + a %= m; + + // Return the funny value, when the output was now zero, return the modular value + return (a == 0) ? m : a; +} + +byte_t bit_rotate_left(byte_t a, byte_t n_bits) { + // Rotate value a with the length of n_bits only 1 time + byte_t mask = (1 << n_bits) - 1; + return ((a << 1) | (a >> (n_bits - 1))) & mask; +} + +//meltem changed this function to make it perform faster +//to get a better idea of the algorithm check out cryptorf inside the tools directory +void RAMFUNC next(size_t repeat, byte_t in, crypto_state s) { + size_t i = repeat; + byte_t a; + byte_t *cipher_p; + do { + // Construct the cipher update 'a' from (input ^ feedback) + a = in ^ ((s->b0 << 4) | s->b1); + + // Shift the cipher state + //left + cipher_p = (byte_t *) &s->l; + cipher_p[5] = cipher_p[5] ^ (a & 0x1f); + s->l = (s->l >> 8); + cipher_p[7] = funny_mod1f_lut[cipher_p[3] + rotate5_lut[cipher_p[0]]]; + s->b1l = cipher_p[7] ^ cipher_p[3]; + + //middle + cipher_p = (byte_t *) &s->m; + cipher_p[3] = cipher_p[3] ^ ((a << 3) | (a >> 5)); + s->m = (s->m >> 8); + cipher_p[7] = funny_mod7f_lut[(cipher_p[1] & 0x7f) + rotate7_lut[(cipher_p[0] & 0x7f)]]; + s->b1s = cipher_p[7] & 0x0f; + + //right + cipher_p = (byte_t *) &s->r; + cipher_p[6] = cipher_p[6] ^ (a >> 3); + s->r = (s->r >> 8); + cipher_p[7] = funny_mod1f_lut[cipher_p[4] + cipher_p[2]]; + s->b1r = cipher_p[7] ^ cipher_p[4]; + + + // The nible from b1 shifts to b0 + s->b0 = s->b1; + + // Construct the new value of nible b1 + s->b1 = (s->b1l & 0x0f) & ~(s->b1s); + s->b1 |= s->b1r & s->b1s; + } while (--i); +} + +void next_n(size_t n, byte_t in, crypto_state s) { + // While n-rounds left, shift the cipher + while (n--) next(1, in, s); +} + +void initialize(const byte_t *Gc, const byte_t *Ci, const byte_t *Q, const size_t n, crypto_state s) { + size_t pos; + + // Reset the cipher state + memset(s, 0x00, sizeof(crypto_state_t)); + + // Load in the ci (tag-nonce), together with the first half of Q (reader-nonce) + for (pos = 0; pos < 4; pos++) { + next(n, Ci[2 * pos ], s); + next(n, Ci[2 * pos + 1], s); + next(1, Q[pos], s); + } + + // Load in the diversified key (Gc), together with the second half of Q (reader-nonce) + for (pos = 0; pos < 4; pos++) { + next(n, Gc[2 * pos ], s); + next(n, Gc[2 * pos + 1], s); + next(1, Q[pos + 4], s); + } +} + +byte_t cm_byte(crypto_state s) { + // Construct keystream byte by combining both nibbles + return nibbles_to_byte(s->b0, s->b1); +} + +void print_crypto_state(const char *text, crypto_state s) { + int pos; + + printf("%s", text); + for (pos = 6; pos >= 0; pos--) + printf(" %02x", (byte_t)(s->l >> (pos * 5)) & 0x1f); + printf(" |"); + for (pos = 6; pos >= 0; pos--) + printf(" %02x", (byte_t)(s->m >> (pos * 7)) & 0x7f); + printf(" |"); + for (pos = 4; pos >= 0; pos--) + printf(" %02x", (byte_t)(s->r >> (pos * 5)) & 0x1f); + + printf(" | %02x", cm_byte(s)); + printf("\n"); +} + +void cm_auth(const byte_t *Gc, const byte_t *Ci, const byte_t *Q, byte_t *Ch, byte_t *Ci_1, byte_t *Ci_2, crypto_state s) { + size_t pos; + + initialize(Gc, Ci, Q, 3, s); + + // Construct the reader-answer (challange) + next(6, 0, s); + Ch[0] = cm_byte(s); + for (pos = 1; pos < 8; pos++) { + next(7, 0, s); + Ch [pos] = cm_byte(s); + } + + // Construct the tag-answer (Ci+1 = ff .. .. .. .. .. .. ..) + Ci_1[0] = 0xff; + for (pos = 1; pos < 8; pos++) { + next(2, 0, s); + Ci_1[pos] = cm_byte(s); + } + + // Construct the session key (Ci+2) + for (pos = 0; pos < 8; pos++) { + next(2, 0, s); + Ci_2[pos] = cm_byte(s); + } + + // Prepare the cipher for encryption by shifting 3 more times + next(3, 0, s); +} + +void cm_crypt(const CryptoAction ca, const byte_t offset, const byte_t len, const byte_t *in, byte_t *out, crypto_state s) { + size_t pos; + byte_t bt; + + next(5, 0, s); + next(1, offset, s); + next(5, 0, s); + next(1, len, s); + for (pos = 0; pos < len; pos++) { + // Perform the crypto operation + bt = in[pos] ^ cm_byte(s); + + // Generate output + if (out) out[pos] = bt; + + // Detect where to find the plaintext for loading into cipher state + if (ca == CA_DECRYPT) { + next(1, bt, s); + } else { + next(1, in[pos], s); + } + + // Shift the cipher state 5 times + next(5, 0, s); + } +} + +void cm_encrypt(const byte_t offset, const byte_t len, const byte_t *ct, byte_t *pt, crypto_state s) { + next(5, 0, s); + next(1, 0, s); + cm_crypt(CA_ENCRYPT, offset, len, ct, pt, s); +} + +void cm_decrypt(const byte_t offset, const byte_t len, const byte_t *ct, byte_t *pt, crypto_state s) { + next(5, 0, s); + next(1, 0, s); + cm_crypt(CA_DECRYPT, offset, len, ct, pt, s); +} + +void cm_grind_read_system_zone(const byte_t offset, const byte_t len, const byte_t *pt, crypto_state s) { + cm_crypt(CA_ENCRYPT, offset, len, pt, null, s); +} + +void cm_grind_set_user_zone(const byte_t zone, crypto_state s) { + next(1, zone, s); +} + +void cm_mac(byte_t *mac, crypto_state s) { + next(10, 0, s); + if (mac) mac[0] = cm_byte(s); + next(5, 0, s); + if (mac) mac[1] = cm_byte(s); +} + +void cm_password(const byte_t *pt, byte_t *ct, crypto_state s) { + size_t pos; + + for (pos = 0; pos < 3; pos++) { + next(5, pt[pos], s); + ct[pos] = cm_byte(s); + } +} diff --git a/common/cryptorf/cryptolib_baloncu.h b/common/cryptorf/cryptolib_baloncu.h new file mode 100644 index 000000000..3140b564c --- /dev/null +++ b/common/cryptorf/cryptolib_baloncu.h @@ -0,0 +1,41 @@ +#ifndef _CRYPTOLIB_H_ +#define _CRYPTOLIB_H_ + +#include +#include +#include +#include +#include +#include + +#define null 0 + +typedef unsigned char byte_t; +typedef long long unsigned int ui64; + +// A nibble is actually only 4 bits, but there is no such type ;) +typedef byte_t nibble; + +typedef struct { + uint64_t l; + uint64_t m; + uint64_t r; + nibble b0; + nibble b1; + nibble b1l; + nibble b1r; + nibble b1s; +} crypto_state_t; +typedef crypto_state_t *crypto_state; + +void print_crypto_state(const char *text, crypto_state s); +void cm_auth(const byte_t *Gc, const byte_t *Ci, const byte_t *Q, byte_t *Ch, byte_t *Ci_1, byte_t *Ci_2, crypto_state s); +void cm_encrypt(const byte_t offset, const byte_t len, const byte_t *pt, byte_t *ct, crypto_state s); +void cm_decrypt(const byte_t offset, const byte_t len, const byte_t *ct, byte_t *pt, crypto_state s); +void cm_grind_read_system_zone(const byte_t offset, const byte_t len, const byte_t *pt, crypto_state s); +void cm_grind_set_user_zone(const byte_t zone, crypto_state s); +void cm_mac(byte_t *mac, crypto_state s); +void cm_password(const byte_t *pt, byte_t *ct, crypto_state s); +void RAMFUNC next(size_t repeat, byte_t in, crypto_state s); + +#endif // _CRYPTOLIB_H_ diff --git a/tools/cryptorf/cm.c b/tools/cryptorf/cm.c index 87e577b36..be7b79f54 100644 --- a/tools/cryptorf/cm.c +++ b/tools/cryptorf/cm.c @@ -1,9 +1,9 @@ /* - * + * * CryptoMemory simulation * * Copyright (C) 2010, Flavio D. Garcia, Peter van Rossum, Roel Verdult - * and Ronny Wichers Schreur. Radboud University Nijmegen + * and Ronny Wichers Schreur. Radboud University Nijmegen * * 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 @@ -17,7 +17,7 @@ * * You should have received a copy of the GNU General Public License * along with this program. If not, see . - * + * */ #include @@ -26,71 +26,85 @@ #include "cryptolib.h" #include "util.h" #ifdef _MSC_VER - // avoid scanf warnings in Visual Studio - #define _CRT_SECURE_NO_WARNINGS - #define _CRT_SECURE_NO_DEPRECATE +// avoid scanf warnings in Visual Studio +#define _CRT_SECURE_NO_WARNINGS +#define _CRT_SECURE_NO_DEPRECATE #endif -int main(int argc, const char* argv[]) -{ - // Cryptomemory state - crypto_state_t s; +int main(int argc, const char *argv[]) { + // Cryptomemory state + crypto_state_t s; - // Main authentication values - uint8_t Q[8]; // Reader key-auth random - uint8_t Gc[8]; // Secret seed - uint8_t Ci[8]; // Card random (last state) - uint8_t Ch[8]; // Reader answer (challenge) - uint8_t Ci_1[8]; // Card answer - uint8_t Ci_2[8]; // Session key - - // Session authentication values - uint8_t Qs[8]; // Reader session-auth random - uint8_t Chs[8]; // Reader session-answer (challenge) - uint8_t Ci_1s[8]; // Card answer for session - uint8_t Ci_2s[8]; // Is this used? + // Main authentication values + uint8_t Q[8]; // Reader key-auth random + uint8_t Gc[8]; // Secret seed + uint8_t Ci[8]; // Card random (last state) + uint8_t Ch[8]; // Reader answer (challenge) + uint8_t Ci_1[8]; // Card answer + uint8_t Ci_2[8]; // Session key - // Various argument options - uint64_t nGc; // Card secret - uint64_t nCi; // Card random - uint64_t nQ; // Reader main-random - uint64_t nQs; // Reader session-random + // Session authentication values + uint8_t Qs[8]; // Reader session-auth random + uint8_t Chs[8]; // Reader session-answer (challenge) + uint8_t Ci_1s[8]; // Card answer for session + uint8_t Ci_2s[8]; // Is this used? - // Show header and help syntax - printf("CryptoMemory simulator - (c) Radboud University Nijmegen\n"); - if (argc < 5) - { - printf("\nsyntax: cm \n"); - return 1; - } + // Various argument options + uint64_t nGc; // Card secret + uint64_t nCi; // Card random + uint64_t nQ; // Reader main-random + uint64_t nQs; // Reader session-random - // Parse arguments - sscanf(argv[1],"%016" SCNx64,&nGc); num_to_bytes(nGc,8,Gc); - sscanf(argv[2],"%016" SCNx64,&nCi); num_to_bytes(nCi,8,Ci); - sscanf(argv[3],"%016" SCNx64,&nQ); num_to_bytes(nQ,8,Q); - sscanf(argv[4],"%016" SCNx64,&nQs); num_to_bytes(nQs,8,Qs); + // Show header and help syntax + printf("CryptoMemory simulator - (c) Radboud University Nijmegen\n"); + if (argc < 5) { + printf("\nsyntax: cm \n"); + return 1; + } - // Calculate authentication - cm_auth(Gc,Ci,Q,Ch,Ci_1,Ci_2,&s); + // Parse arguments + sscanf(argv[1], "%016" SCNx64, &nGc); + num_to_bytes(nGc, 8, Gc); + sscanf(argv[2], "%016" SCNx64, &nCi); + num_to_bytes(nCi, 8, Ci); + sscanf(argv[3], "%016" SCNx64, &nQ); + num_to_bytes(nQ, 8, Q); + sscanf(argv[4], "%016" SCNx64, &nQs); + num_to_bytes(nQs, 8, Qs); - printf("\nAuthenticate\n"); - printf(" Gc: "); print_bytes(Gc,8); - printf(" Ci: "); print_bytes(Ci,8); - printf(" Q: "); print_bytes(Q,8); - printf(" Ch: "); print_bytes(Ch,8); - printf(" Ci+1: "); print_bytes(Ci_1,8); - printf(" Ci+2: "); print_bytes(Ci_2,8); + // Calculate authentication + cm_auth(Gc, Ci, Q, Ch, Ci_1, Ci_2, &s); - cm_auth(Ci_2,Ci_1,Qs,Chs,Ci_1s,Ci_2s,&s); + printf("\nAuthenticate\n"); + printf(" Gc: "); + print_bytes(Gc, 8); + printf(" Ci: "); + print_bytes(Ci, 8); + printf(" Q: "); + print_bytes(Q, 8); + printf(" Ch: "); + print_bytes(Ch, 8); + printf(" Ci+1: "); + print_bytes(Ci_1, 8); + printf(" Ci+2: "); + print_bytes(Ci_2, 8); - printf("\nVerify Crypto (Session Key)\n"); - printf(" Gc(s): "); print_bytes(Ci_2,8); - printf(" Ci(s): "); print_bytes(Ci_1,8); - printf(" Q(s): "); print_bytes(Qs,8); - printf(" Ch(s): "); print_bytes(Chs,8); - printf("Ci+1(s): "); print_bytes(Ci_1s,8); - printf("Ci+2(s): "); print_bytes(Ci_2s,8); + cm_auth(Ci_2, Ci_1, Qs, Chs, Ci_1s, Ci_2s, &s); - printf("\n"); - return 0; + printf("\nVerify Crypto (Session Key)\n"); + printf(" Gc(s): "); + print_bytes(Ci_2, 8); + printf(" Ci(s): "); + print_bytes(Ci_1, 8); + printf(" Q(s): "); + print_bytes(Qs, 8); + printf(" Ch(s): "); + print_bytes(Chs, 8); + printf("Ci+1(s): "); + print_bytes(Ci_1s, 8); + printf("Ci+2(s): "); + print_bytes(Ci_2s, 8); + + printf("\n"); + return 0; } diff --git a/tools/cryptorf/sm.c b/tools/cryptorf/sm.c index fde70d3a5..b604c9dfa 100644 --- a/tools/cryptorf/sm.c +++ b/tools/cryptorf/sm.c @@ -1,9 +1,9 @@ /* - * + * * SecureMemory simulation * * Copyright (C) 2010, Flavio D. Garcia, Peter van Rossum, Roel Verdult - * and Ronny Wichers Schreur. Radboud University Nijmegen + * and Ronny Wichers Schreur. Radboud University Nijmegen * * 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 @@ -17,7 +17,7 @@ * * You should have received a copy of the GNU General Public License * along with this program. If not, see . - * + * */ #include @@ -26,58 +26,63 @@ #include "cryptolib.h" #include "util.h" #ifdef _MSC_VER - // avoid scanf warnings in Visual Studio - #define _CRT_SECURE_NO_WARNINGS - #define _CRT_SECURE_NO_DEPRECATE +// avoid scanf warnings in Visual Studio +#define _CRT_SECURE_NO_WARNINGS +#define _CRT_SECURE_NO_DEPRECATE #endif -int main(int argc, const char* argv[]) -{ - // Cryptomemory state - crypto_state_t s; - size_t pos; +int main(int argc, const char *argv[]) { + // Cryptomemory state + crypto_state_t s; + size_t pos; - uint8_t Q[8] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; // Reader random - uint8_t Gc[8] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; // Secret seed - uint8_t Ci[8] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; // Card random (last state) - uint8_t Ch[8] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; // Reader answer - uint8_t Ci_1[8] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; // Card answer + uint8_t Q[8] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; // Reader random + uint8_t Gc[8] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; // Secret seed + uint8_t Ci[8] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; // Card random (last state) + uint8_t Ch[8] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; // Reader answer + uint8_t Ci_1[8] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; // Card answer - // Various argument options - uint64_t nGc; // Card secret - uint64_t nCi; // Card random - uint64_t nQ; // Reader main-random + // Various argument options + uint64_t nGc; // Card secret + uint64_t nCi; // Card random + uint64_t nQ; // Reader main-random - // Show header and help syntax - printf("SecureMemory simulator - (c) Radboud University Nijmegen\n"); - if (argc < 4) - { - printf("\nsyntax: sm \n"); - return 1; - } + // Show header and help syntax + printf("SecureMemory simulator - (c) Radboud University Nijmegen\n"); + if (argc < 4) { + printf("\nsyntax: sm \n"); + return 1; + } - // Parse arguments - sscanf(argv[1],"%016" SCNx64,&nGc); num_to_bytes(nGc,8,Gc); - sscanf(argv[2],"%016" SCNx64,&nCi); num_to_bytes(nCi,8,Ci); - sscanf(argv[3],"%016" SCNx64,&nQ); num_to_bytes(nQ,8,Q); + // Parse arguments + sscanf(argv[1], "%016" SCNx64, &nGc); + num_to_bytes(nGc, 8, Gc); + sscanf(argv[2], "%016" SCNx64, &nCi); + num_to_bytes(nCi, 8, Ci); + sscanf(argv[3], "%016" SCNx64, &nQ); + num_to_bytes(nQ, 8, Q); - // Calculate authentication - sm_auth(Gc,Ci,Q,Ch,Ci_1,&s); + // Calculate authentication + sm_auth(Gc, Ci, Q, Ch, Ci_1, &s); - printf("\nAuthentication info\n\n"); - printf(" Gc: "); print_bytes(Gc,8); - printf(" Ci: "); print_bytes(Ci,8); - printf(" Q: "); print_bytes(Q,8); - printf(" Ch: "); print_bytes(Ch,8); - printf("Ci+1: "); print_bytes(Ci_1,8); - printf("\n"); - printf(" Ks: "); - for (pos=0; pos<8; pos++) - { - printf("%02x ",Ci_1[pos]); - printf("%02x ",Ch[pos]); - } - printf("\n\n"); + printf("\nAuthentication info\n\n"); + printf(" Gc: "); + print_bytes(Gc, 8); + printf(" Ci: "); + print_bytes(Ci, 8); + printf(" Q: "); + print_bytes(Q, 8); + printf(" Ch: "); + print_bytes(Ch, 8); + printf("Ci+1: "); + print_bytes(Ci_1, 8); + printf("\n"); + printf(" Ks: "); + for (pos = 0; pos < 8; pos++) { + printf("%02x ", Ci_1[pos]); + printf("%02x ", Ch[pos]); + } + printf("\n\n"); - return 0; + return 0; } diff --git a/tools/cryptorf/sma.cpp b/tools/cryptorf/sma.cpp index 705658651..05b9f344f 100644 --- a/tools/cryptorf/sma.cpp +++ b/tools/cryptorf/sma.cpp @@ -1,9 +1,9 @@ /* - * + * * SecureMemory recovery * * Copyright (C) 2010, Flavio D. Garcia, Peter van Rossum, Roel Verdult - * and Ronny Wichers Schreur. Radboud University Nijmegen + * and Ronny Wichers Schreur. Radboud University Nijmegen * * 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 @@ -17,7 +17,7 @@ * * You should have received a copy of the GNU General Public License * along with this program. If not, see . - * + * * Modified Iceman, 2020 */ @@ -27,7 +27,7 @@ #include #include #include -#include // sort, max_element, random_shuffle, remove_if, lower_bound +#include // sort, max_element, random_shuffle, remove_if, lower_bound #include // greater, bind2nd #include "cryptolib.h" #include "util.h" @@ -35,10 +35,10 @@ using namespace std; #ifdef _MSC_VER - // avoid scanf warnings in Visual Studio - #define _CRT_SECURE_NO_WARNINGS - #define _CRT_SECURE_NO_DEPRECATE - #define inline __inline +// avoid scanf warnings in Visual Studio +#define _CRT_SECURE_NO_WARNINGS +#define _CRT_SECURE_NO_DEPRECATE +#define inline __inline #endif /* @@ -53,7 +53,7 @@ Authenticate Ci+1: de c2 ee 1b 1c 92 76 e9 Ks: de 88 c2 c9 ee d4 1b 46 1c 6a 92 50 76 1a e9 87 - + left: 1ddeac626 right: 19aba45 @@ -105,21 +105,21 @@ Ci+1: de c2 ee 1b 1c 92 76 e9 */ const uint64_t left_candidates[43] = { - 0x6221539d9ull, 0x1ddeac626ull, 0x7cc847482ull, 0x0337b8b7dull, - 0x159d1687eull, 0x7bade8a41ull, 0x4c51c6463ull, 0x4e3d88bf9ull, - 0x4e3d88819ull, 0x31c2777e6ull, 0x31c277406ull, 0x0059ff7d5ull, - 0x5fb612b96ull, 0x2049ed469ull, 0x0452175beull, 0x00d2ff4edull, - 0x68918cba9ull, 0x03a6f882aull, 0x7086372b6ull, 0x6c9a11672ull, - 0x60531191aull, 0x4ba9b653full, 0x4ba9b6520ull, 0x1facee6e5ull, - 0x0f79c8d49ull, 0x0b29f2a5bull, 0x032df8b12ull, 0x7c90849f8ull, - 0x48916e84eull, 0x176e73456ull, 0x036f7b607ull, 0x5b2aeb858ull, - 0x51c8755b5ull, 0x4c9432733ull, 0x0f6c834fbull, 0x03b2ff59bull, - 0x0f78aac5bull, 0x3770cdaf3ull, 0x205078bbaull, 0x04445c715ull, - 0x004df8a64ull, 0x6f696e09eull, 0x109691f61ull + 0x6221539d9ull, 0x1ddeac626ull, 0x7cc847482ull, 0x0337b8b7dull, + 0x159d1687eull, 0x7bade8a41ull, 0x4c51c6463ull, 0x4e3d88bf9ull, + 0x4e3d88819ull, 0x31c2777e6ull, 0x31c277406ull, 0x0059ff7d5ull, + 0x5fb612b96ull, 0x2049ed469ull, 0x0452175beull, 0x00d2ff4edull, + 0x68918cba9ull, 0x03a6f882aull, 0x7086372b6ull, 0x6c9a11672ull, + 0x60531191aull, 0x4ba9b653full, 0x4ba9b6520ull, 0x1facee6e5ull, + 0x0f79c8d49ull, 0x0b29f2a5bull, 0x032df8b12ull, 0x7c90849f8ull, + 0x48916e84eull, 0x176e73456ull, 0x036f7b607ull, 0x5b2aeb858ull, + 0x51c8755b5ull, 0x4c9432733ull, 0x0f6c834fbull, 0x03b2ff59bull, + 0x0f78aac5bull, 0x3770cdaf3ull, 0x205078bbaull, 0x04445c715ull, + 0x004df8a64ull, 0x6f696e09eull, 0x109691f61ull }; typedef struct { - uint64_t l; + uint64_t l; uint64_t m; uint64_t r; nibble b0; @@ -127,10 +127,10 @@ typedef struct { nibble b1l; nibble b1r; nibble b1s; - bool invalid; - uint8_t Gc[8]; -}cs_t; -typedef cs_t* pcs; + bool invalid; + uint8_t Gc[8]; +} cs_t; +typedef cs_t *pcs; typedef struct { uint8_t addition; @@ -138,49 +138,45 @@ typedef struct { } lookup_entry; enum cipher_state_side { - CSS_LEFT, - CSS_RIGHT + CSS_LEFT, + CSS_RIGHT }; -void print_cs(const char* text,pcs s) -{ - int pos; - - printf("%s",text); - for(pos=6;pos>=0;pos--) - printf(" %02x",(uint8_t)(s->l>>(pos*5))&0x1f); - printf(" |"); - for(pos=6;pos>=0;pos--) - printf(" %02x",(uint8_t)(s->m>>(pos*7))&0x7f); - printf(" |"); - for(pos=4;pos>=0;pos--) - printf(" %02x",(uint8_t)(s->r>>(pos*5))&0x1f); - - printf("\n"); +void print_cs(const char *text, pcs s) { + int pos; + + printf("%s", text); + for (pos = 6; pos >= 0; pos--) + printf(" %02x", (uint8_t)(s->l >> (pos * 5)) & 0x1f); + printf(" |"); + for (pos = 6; pos >= 0; pos--) + printf(" %02x", (uint8_t)(s->m >> (pos * 7)) & 0x7f); + printf(" |"); + for (pos = 4; pos >= 0; pos--) + printf(" %02x", (uint8_t)(s->r >> (pos * 5)) & 0x1f); + + printf("\n"); } -static inline uint8_t mod(uint8_t a, uint8_t m) -{ - // Just return the input when this is less or equal than the modular value - if (a> (n_bits - 1))) & mask; +static inline uint8_t bit_rotate_l(uint8_t a, uint8_t n_bits) { + // Rotate value a with the length of n_bits only 1 time + uint8_t mask = (1 << n_bits) - 1; + return ((a << 1) | (a >> (n_bits - 1))) & mask; } -static inline uint8_t bit_rotate_r(uint8_t a, uint8_t n_bits) -{ - return ((a >> 1) | ((a&1) << (n_bits - 1))); +static inline uint8_t bit_rotate_r(uint8_t a, uint8_t n_bits) { + return ((a >> 1) | ((a & 1) << (n_bits - 1))); } static uint8_t lookup_left_substraction[0x400]; @@ -189,733 +185,673 @@ static lookup_entry lookup_left[0x100000]; static lookup_entry lookup_right[0x8000]; static uint8_t left_addition[0x100000]; -static inline void init_lookup_left() -{ - uint8_t b3,b6,temp; - int i,index; +static inline void init_lookup_left() { + uint8_t b3, b6, temp; + int i, index; - for(i = 0; i <0x400; i++) - { + for (i = 0; i < 0x400; i++) { b6 = i & 0x1f; b3 = (i >> 5) & 0x1f; index = (b3 << 15) | b6; b6 = bit_rotate_l(b6, 5); - temp = mod(b3 + b6,0x1f); - left_addition[index] = temp; + temp = mod(b3 + b6, 0x1f); + left_addition[index] = temp; lookup_left[index].addition = temp; - lookup_left[index].out = ((temp^b3) & 0x0f); + lookup_left[index].out = ((temp ^ b3) & 0x0f); } } -static inline void init_lookup_right() -{ - uint8_t b16,b18,temp; - int i,index; +static inline void init_lookup_right() { + uint8_t b16, b18, temp; + int i, index; - for(i = 0; i <0x400; i++) - { + for (i = 0; i < 0x400; i++) { b18 = i & 0x1f; b16 = (i >> 5) & 0x1f; index = (b16 << 10) | b18; - temp = mod(b18 + b16,0x1f); + temp = mod(b18 + b16, 0x1f); lookup_right[index].addition = temp; - lookup_right[index].out = ((temp^b16) & 0x0f); + lookup_right[index].out = ((temp ^ b16) & 0x0f); } } -static void init_lookup_left_substraction() -{ - for(int index = 0; index < 0x400 ; index++) - { +static void init_lookup_left_substraction() { + for (int index = 0; index < 0x400 ; index++) { uint8_t b3 = (index >> 5 & 0x1f); uint8_t bx = (index & 0x1f); - lookup_left_substraction[index] = bit_rotate_r(mod((bx+0x1f)-b3,0x1f),5); + lookup_left_substraction[index] = bit_rotate_r(mod((bx + 0x1f) - b3, 0x1f), 5); } } -static void init_lookup_right_substraction() -{ - for(int index = 0; index < 0x400 ; index++) - { - int b16 = (index >>5); +static void init_lookup_right_substraction() { + for (int index = 0; index < 0x400 ; index++) { + int b16 = (index >> 5); uint8_t bx = (index & 0x1f); - lookup_right_subtraction[index] = mod((bx+0x1f)-b16,0x1f); + lookup_right_subtraction[index] = mod((bx + 0x1f) - b16, 0x1f); } } -static inline void previous_left(uint8_t in, vector *candidate_states) -{ - pcs state; - size_t size = candidate_states->size(); - for(size_t pos=0; pos *candidate_states) { + pcs state; + size_t size = candidate_states->size(); + for (size_t pos = 0; pos < size; pos++) { + state = &((*candidate_states)[pos]); - uint8_t bx = (uint8_t)((state->l >> 30) & 0x1f); - unsigned b3 = (unsigned)(state->l >> 5) & 0x3e0; - state->l = (state->l << 5); + uint8_t bx = (uint8_t)((state->l >> 30) & 0x1f); + unsigned b3 = (unsigned)(state->l >> 5) & 0x3e0; + state->l = (state->l << 5); - //Ignore impossible states - if (bx == 0) - { - // Are we dealing with an impossible state? - if (b3 != 0) - { - state->invalid = true; - } else { - // We only need to consider b6=0 - state->l &= 0x7ffffffe0ull; - state->l ^= (((uint64_t)in & 0x1f) << 20); - } - } else { - uint8_t b6 = lookup_left_substraction[b3|bx]; - state->l = (state->l & 0x7ffffffe0ull) | b6; - state->l ^= (((uint64_t)in & 0x1f) << 20); + //Ignore impossible states + if (bx == 0) { + // Are we dealing with an impossible state? + if (b3 != 0) { + state->invalid = true; + } else { + // We only need to consider b6=0 + state->l &= 0x7ffffffe0ull; + state->l ^= (((uint64_t)in & 0x1f) << 20); + } + } else { + uint8_t b6 = lookup_left_substraction[b3 | bx]; + state->l = (state->l & 0x7ffffffe0ull) | b6; + state->l ^= (((uint64_t)in & 0x1f) << 20); - // Check if we have a second candidate - if (b6 == 0x1f) - { - cs_t nstate = *state; - nstate.l &= 0x7ffffffe0ull; - candidate_states->push_back(nstate); - } - } - } + // Check if we have a second candidate + if (b6 == 0x1f) { + cs_t nstate = *state; + nstate.l &= 0x7ffffffe0ull; + candidate_states->push_back(nstate); + } + } + } } -static inline void previous_right(uint8_t in, vector *candidate_states) -{ - pcs state; - size_t size = candidate_states->size(); - for(size_t pos=0; posr >> 20) & 0x1f); - unsigned b16 = (unsigned)(state->r & 0x3e0);//(state->buffer_r >> 10) & 0x1f; - - state->r = (state->r << 5); - - // Ignore impossible states - if (bx == 0) - { - if (b16 != 0) - { - state->invalid=true; - } else { - // We only need to consider b18=0 - state->r &= 0x1ffffe0ull; - state->r ^= (((uint64_t)in & 0xf8) << 12); - } - } else{ - uint8_t b18 = lookup_right_subtraction[b16|bx]; - state->r = (state->r & 0x1ffffe0ull) | b18; - state->r ^= (((uint64_t)in & 0xf8) << 12); - //state->b_right = ((b14^b17) & 0x0f); - - // Check if we have a second candidate - if (b18 == 0x1f) - { - cs_t nstate = *state; - nstate.r &= 0x1ffffe0ull; - candidate_states->push_back(nstate); - } - } - } +static inline void previous_right(uint8_t in, vector *candidate_states) { + pcs state; + size_t size = candidate_states->size(); + for (size_t pos = 0; pos < size; pos++) { + state = &((*candidate_states)[pos]); + + uint8_t bx = (uint8_t)((state->r >> 20) & 0x1f); + unsigned b16 = (unsigned)(state->r & 0x3e0);//(state->buffer_r >> 10) & 0x1f; + + state->r = (state->r << 5); + + // Ignore impossible states + if (bx == 0) { + if (b16 != 0) { + state->invalid = true; + } else { + // We only need to consider b18=0 + state->r &= 0x1ffffe0ull; + state->r ^= (((uint64_t)in & 0xf8) << 12); + } + } else { + uint8_t b18 = lookup_right_subtraction[b16 | bx]; + state->r = (state->r & 0x1ffffe0ull) | b18; + state->r ^= (((uint64_t)in & 0xf8) << 12); + //state->b_right = ((b14^b17) & 0x0f); + + // Check if we have a second candidate + if (b18 == 0x1f) { + cs_t nstate = *state; + nstate.r &= 0x1ffffe0ull; + candidate_states->push_back(nstate); + } + } + } } -static inline uint8_t next_left_fast(uint8_t in, uint64_t* left) -{ - if (in) *left ^= ((in & 0x1f) << 20); - lookup_entry* lookup = &(lookup_left[((*left) & 0xf801f)]); - *left = (((*left) >> 5)| ((uint64_t)lookup->addition << 30)); +static inline uint8_t next_left_fast(uint8_t in, uint64_t *left) { + if (in) *left ^= ((in & 0x1f) << 20); + lookup_entry *lookup = &(lookup_left[((*left) & 0xf801f)]); + *left = (((*left) >> 5) | ((uint64_t)lookup->addition << 30)); return lookup->out; } -static inline uint8_t next_left_ksbyte(uint64_t* left) -{ - lookup_entry* lookup; - uint8_t bt; - - *left = (((*left) >> 5)| ((uint64_t)left_addition[((*left) & 0xf801f)] << 30)); - lookup = &(lookup_left[((*left) & 0xf801f)]); - *left = (((*left) >> 5)| ((uint64_t)lookup->addition << 30)); - bt = lookup->out << 4; - *left = (((*left) >> 5)| ((uint64_t)left_addition[((*left) & 0xf801f)] << 30)); - lookup = &(lookup_left[((*left) & 0xf801f)]); - *left = (((*left) >> 5)| ((uint64_t)lookup->addition << 30)); - bt |= lookup->out; +static inline uint8_t next_left_ksbyte(uint64_t *left) { + lookup_entry *lookup; + uint8_t bt; + + *left = (((*left) >> 5) | ((uint64_t)left_addition[((*left) & 0xf801f)] << 30)); + lookup = &(lookup_left[((*left) & 0xf801f)]); + *left = (((*left) >> 5) | ((uint64_t)lookup->addition << 30)); + bt = lookup->out << 4; + *left = (((*left) >> 5) | ((uint64_t)left_addition[((*left) & 0xf801f)] << 30)); + lookup = &(lookup_left[((*left) & 0xf801f)]); + *left = (((*left) >> 5) | ((uint64_t)lookup->addition << 30)); + bt |= lookup->out; return bt; } -static inline uint8_t next_right_fast(uint8_t in, uint64_t* right) -{ - if (in) *right ^= ((in&0xf8) << 12); - lookup_entry* lookup = &(lookup_right[((*right) & 0x7c1f)]); +static inline uint8_t next_right_fast(uint8_t in, uint64_t *right) { + if (in) *right ^= ((in & 0xf8) << 12); + lookup_entry *lookup = &(lookup_right[((*right) & 0x7c1f)]); *right = (((*right) >> 5) | (lookup->addition << 20)); return lookup->out; } -static inline void sm_left_mask(const uint8_t* ks, uint8_t* mask, uint64_t rstate) -{ - size_t pos; - uint8_t bt; - - for (pos=0; pos<16; pos++) - { - next_right_fast(0,&rstate); - bt = next_right_fast(0,&rstate) << 4; - next_right_fast(0,&rstate); - bt |= next_right_fast(0,&rstate); - - // xor the bits with the keystream and count the "correct" bits - bt ^= ks[pos]; - - // Save the mask for the left produced bits - mask[pos] = bt; - } +static inline void sm_left_mask(const uint8_t *ks, uint8_t *mask, uint64_t rstate) { + size_t pos; + uint8_t bt; + + for (pos = 0; pos < 16; pos++) { + next_right_fast(0, &rstate); + bt = next_right_fast(0, &rstate) << 4; + next_right_fast(0, &rstate); + bt |= next_right_fast(0, &rstate); + + // xor the bits with the keystream and count the "correct" bits + bt ^= ks[pos]; + + // Save the mask for the left produced bits + mask[pos] = bt; + } } -static inline uint32_t sm_right(const uint8_t* ks, uint8_t* mask, vector* pcrstates) -{ - uint8_t tmp_mask[16]; - size_t pos,bits,bit,topbits; - uint64_t rstate,counter; - map bincstates; - map::iterator it; - uint8_t bt; +static inline uint32_t sm_right(const uint8_t *ks, uint8_t *mask, vector *pcrstates) { + uint8_t tmp_mask[16]; + size_t pos, bits, bit, topbits; + uint64_t rstate, counter; + map bincstates; + map::iterator it; + uint8_t bt; - topbits = 0; - for (counter=0; counter<0x2000000; counter++) - { - // Reset the current bitcount of correct bits - bits = 0; - - // Copy the state we are going to test - rstate = counter; + topbits = 0; + for (counter = 0; counter < 0x2000000; counter++) { + // Reset the current bitcount of correct bits + bits = 0; - for (pos=0; pos<16; pos++) - { - next_right_fast(0,&rstate); - bt = next_right_fast(0,&rstate) << 4; - next_right_fast(0,&rstate); - bt |= next_right_fast(0,&rstate); - - // xor the bits with the keystream and count the "correct" bits - bt ^= ks[pos]; + // Copy the state we are going to test + rstate = counter; - // Save the mask for the left produced bits - tmp_mask[pos] = bt; + for (pos = 0; pos < 16; pos++) { + next_right_fast(0, &rstate); + bt = next_right_fast(0, &rstate) << 4; + next_right_fast(0, &rstate); + bt |= next_right_fast(0, &rstate); - for (bit=0; bit<8; bit++) - { - // When the bit is xored away (=zero), it was the same, so correct ;) - if ((bt & 0x01) == 0) bits++; - bt >>= 1; - } - } + // xor the bits with the keystream and count the "correct" bits + bt ^= ks[pos]; - if (bits > topbits) - { - topbits = bits; - // Copy the winning mask - memcpy(mask,tmp_mask,16); - } - - // Ignore states under 90 - if (bits >= 90) - { - // Make sure the bits are used for ordering - bincstates[(((uint64_t)bits)<<56) | counter] = counter; - } - - if ((counter&0xfffff) == 0) - { - printf("."); - fflush(stdout); - } - } - printf("\n"); + // Save the mask for the left produced bits + tmp_mask[pos] = bt; - // Clear the candidate state vector - pcrstates->clear(); - - // Copy the order the states from lowest-bin to highest-bin - for(it=bincstates.begin();it!=bincstates.end();++it) - { - pcrstates->push_back(it->second); - } - // Reverse the vector order (so the higest bin comes first) - reverse(pcrstates->begin(),pcrstates->end()); - - return topbits; -} - -static inline void previous_all_input(vector *pcstates, uint32_t gc_byte_index, cipher_state_side css) -{ - uint8_t btGc,in; - vector ncstates; - vector prev_ncstates; - vector::iterator it,itnew; - - // Loop through the complete entryphy of 5 bits for each candidate - // We ignore zero (xor 0x00) to avoid duplicates - for (btGc=0; btGc<0x20; btGc++) - { - // Copy the original candidates that are supplied - ncstates = *pcstates; - - // Rollback the (candidate) cipher states with this input - if (css == CSS_RIGHT) - { - in = btGc << 3; - previous_right(in,&ncstates); - } else { - in = btGc; - previous_left(in,&ncstates); - } - - for(itnew=ncstates.begin();itnew!=ncstates.end();++itnew) - { - // Wipe away the invalid states - if (itnew->invalid == false) - { - itnew->Gc[gc_byte_index] = in; - prev_ncstates.push_back(*itnew); - } - } - } - - // Copy the previous states into the vector - *pcstates = prev_ncstates; -} - -static inline void search_gc_candidates_right(const uint64_t rstate_before_gc, const uint64_t rstate_after_gc, const uint8_t* Q, vector* pcstates) -{ - vector::iterator it; - vector csl_cand; - map matchbox; - map::iterator itmatch; - uint64_t rstate; - size_t counter; - cs_t state; - - // Generate 2^20 different (5 bits) values for the first 4 Gc bytes (0,1,2,3) - for (counter=0; counter<0x100000; counter++) - { - rstate = rstate_before_gc; - next_right_fast((counter >> 12) & 0xf8,&rstate); - next_right_fast((counter >> 7) & 0xf8,&rstate); - next_right_fast(Q[4],&rstate); - next_right_fast((counter >> 2) & 0xf8,&rstate); - next_right_fast((counter << 3) & 0xf8,&rstate); - next_right_fast(Q[5],&rstate); - matchbox[rstate] = counter; - } - - // Reset and initialize the cryptostate and vecctor - memset(&state,0x00,sizeof(cs_t)); - state.invalid = false; - state.r = rstate_after_gc; - csl_cand.clear(); - csl_cand.push_back(state); - - // Generate 2^20(+splitting) different (5 bits) values for the last 4 Gc bytes (4,5,6,7) - previous_right(Q[7],&csl_cand); - previous_all_input(&csl_cand,7,CSS_RIGHT); - previous_all_input(&csl_cand,6,CSS_RIGHT); - previous_right(Q[6],&csl_cand); - previous_all_input(&csl_cand,5,CSS_RIGHT); - previous_all_input(&csl_cand,4,CSS_RIGHT); - - pcstates->clear(); - - // Take the intersection of the corresponding states ~2^15 values (40-25 = 15 bits) - for(it=csl_cand.begin();it!=csl_cand.end();++it) - { - itmatch = matchbox.find(it->r); - if (itmatch != matchbox.end()) - { - it->Gc[0] = (itmatch->second >> 12) & 0xf8; - it->Gc[1] = (itmatch->second >> 7) & 0xf8; - it->Gc[2] = (itmatch->second >> 2) & 0xf8; - it->Gc[3] = (itmatch->second << 3) & 0xf8; - /* - printf("%07llx ",it->r); - printf("(%x)\n",itmatch->second); - */ -/* - if (it->r == 0xff459b) - { - print_cs("previous:",&(*it)); - printf("%07llx\n",it->r); - print_bytes(it->Gc,8); - } -*/ - pcstates->push_back(*it); - } - } -} - -static inline void sm_left(const uint8_t* ks, uint8_t* mask, vector* pcstates) -{ - map bincstates; - map::iterator it; - uint64_t counter,lstate; - size_t pos,bits,bit; - uint8_t correct_bits[16]; - uint8_t bt; - cs_t state; - lookup_entry* lookup; - - // Reset and initialize the cryptostate and vecctor - memset(&state,0x00,sizeof(cs_t)); - state.invalid = false; - - for (counter=0; counter<0x800000000ull; counter++) - { - lstate = counter; - - for (pos=0; pos<16; pos++) - { - lstate = (((lstate) >> 5)| ((uint64_t)left_addition[((lstate) & 0xf801f)] << 30)); - lookup = &(lookup_left[((lstate) & 0xf801f)]); - lstate = (((lstate) >> 5)| ((uint64_t)lookup->addition << 30)); - bt = lookup->out << 4; - lstate = (((lstate) >> 5)| ((uint64_t)left_addition[((lstate) & 0xf801f)] << 30)); - lookup = &(lookup_left[((lstate) & 0xf801f)]); - lstate = (((lstate) >> 5)| ((uint64_t)lookup->addition << 30)); - bt |= lookup->out; - - // xor the bits with the keystream and count the "correct" bits - bt ^= ks[pos]; - - // When the REQUIRED bits are NOT xored away (=zero), ignore this wrong state - if ((bt & mask[pos]) != 0) break; - - // Save the correct bits for statistical information - correct_bits[pos] = bt; - } - - // If we have parsed all 16 bytes of keystream, we have a valid CANDIDATE! - if (pos == 16) - { - // Count the total correct bits - bits=0; - for (pos=0; pos<16; pos++) - { - // Get the next byte-value with correct bits - bt = correct_bits[pos]; - - // Count all the (correct) bits - for (bit=0; bit<8; bit++) - { - // When the bit is xored away (=zero), it was the same, so correct ;) - if ((bt & 0x01) == 0) bits++; - bt >>= 1; + for (bit = 0; bit < 8; bit++) { + // When the bit is xored away (=zero), it was the same, so correct ;) + if ((bt & 0x01) == 0) bits++; + bt >>= 1; + } } - } - // Print the left candidate -// printf("%09llx (%d)\n",counter,bits); - printf("."); - fflush(stdout); + if (bits > topbits) { + topbits = bits; + // Copy the winning mask + memcpy(mask, tmp_mask, 16); + } - state.l = counter; - // Make sure the bits are used for ordering - bincstates[(((uint64_t)bits)<<56) | counter] = state; + // Ignore states under 90 + if (bits >= 90) { + // Make sure the bits are used for ordering + bincstates[(((uint64_t)bits) << 56) | counter] = counter; + } + + if ((counter & 0xfffff) == 0) { + printf("."); + fflush(stdout); + } } - - if ((counter&0xffffffffull) == 0) - { - printf("%02.1f%%.",((float)100/8)*(counter>>32)); - fflush(stdout); - } - } - printf("100%%\n"); - - // Clear the candidate state vector - pcstates->clear(); + printf("\n"); - // Copy the order the states from lowest-bin to highest-bin - for(it=bincstates.begin();it!=bincstates.end();++it) - { - pcstates->push_back(it->second); - } - // Reverse the vector order (so the higest bin comes first) - reverse(pcstates->begin(),pcstates->end()); + // Clear the candidate state vector + pcrstates->clear(); + + // Copy the order the states from lowest-bin to highest-bin + for (it = bincstates.begin(); it != bincstates.end(); ++it) { + pcrstates->push_back(it->second); + } + // Reverse the vector order (so the higest bin comes first) + reverse(pcrstates->begin(), pcrstates->end()); + + return topbits; } -static inline void search_gc_candidates_left(const uint64_t lstate_before_gc, const uint8_t* Q, vector* pcstates) -{ - vector csl_cand,csl_search; - vector::iterator itsearch,itcand; - map matchbox; - map::iterator itmatch; - uint64_t lstate; - size_t counter; - - // Generate 2^20 different (5 bits) values for the first 4 Gc bytes (0,1,2,3) - for (counter=0; counter<0x100000; counter++) - { - lstate = lstate_before_gc; - next_left_fast((counter >> 15) & 0x1f,&lstate); - next_left_fast((counter >> 10) & 0x1f,&lstate); - next_left_fast(Q[4],&lstate); - next_left_fast((counter >> 5) & 0x1f,&lstate); - next_left_fast(counter & 0x1f,&lstate); - next_left_fast(Q[5],&lstate); - matchbox[lstate] = counter; - } - - // Copy the input candidate states and clean the output vector - csl_cand = *pcstates; - pcstates->clear(); - - for(itcand=csl_cand.begin();itcand!=csl_cand.end();++itcand) - { - csl_search.clear(); - csl_search.push_back(*itcand); - +static inline void previous_all_input(vector *pcstates, uint32_t gc_byte_index, cipher_state_side css) { + uint8_t btGc, in; + vector ncstates; + vector prev_ncstates; + vector::iterator it, itnew; + + // Loop through the complete entryphy of 5 bits for each candidate + // We ignore zero (xor 0x00) to avoid duplicates + for (btGc = 0; btGc < 0x20; btGc++) { + // Copy the original candidates that are supplied + ncstates = *pcstates; + + // Rollback the (candidate) cipher states with this input + if (css == CSS_RIGHT) { + in = btGc << 3; + previous_right(in, &ncstates); + } else { + in = btGc; + previous_left(in, &ncstates); + } + + for (itnew = ncstates.begin(); itnew != ncstates.end(); ++itnew) { + // Wipe away the invalid states + if (itnew->invalid == false) { + itnew->Gc[gc_byte_index] = in; + prev_ncstates.push_back(*itnew); + } + } + } + + // Copy the previous states into the vector + *pcstates = prev_ncstates; +} + +static inline void search_gc_candidates_right(const uint64_t rstate_before_gc, const uint64_t rstate_after_gc, const uint8_t *Q, vector *pcstates) { + vector::iterator it; + vector csl_cand; + map matchbox; + map::iterator itmatch; + uint64_t rstate; + size_t counter; + cs_t state; + + // Generate 2^20 different (5 bits) values for the first 4 Gc bytes (0,1,2,3) + for (counter = 0; counter < 0x100000; counter++) { + rstate = rstate_before_gc; + next_right_fast((counter >> 12) & 0xf8, &rstate); + next_right_fast((counter >> 7) & 0xf8, &rstate); + next_right_fast(Q[4], &rstate); + next_right_fast((counter >> 2) & 0xf8, &rstate); + next_right_fast((counter << 3) & 0xf8, &rstate); + next_right_fast(Q[5], &rstate); + matchbox[rstate] = counter; + } + + // Reset and initialize the cryptostate and vecctor + memset(&state, 0x00, sizeof(cs_t)); + state.invalid = false; + state.r = rstate_after_gc; + csl_cand.clear(); + csl_cand.push_back(state); + // Generate 2^20(+splitting) different (5 bits) values for the last 4 Gc bytes (4,5,6,7) - previous_left(Q[7],&csl_search); - previous_all_input(&csl_search,7,CSS_LEFT); - previous_all_input(&csl_search,6,CSS_LEFT); - previous_left(Q[6],&csl_search); - previous_all_input(&csl_search,5,CSS_LEFT); - previous_all_input(&csl_search,4,CSS_LEFT); - + previous_right(Q[7], &csl_cand); + previous_all_input(&csl_cand, 7, CSS_RIGHT); + previous_all_input(&csl_cand, 6, CSS_RIGHT); + previous_right(Q[6], &csl_cand); + previous_all_input(&csl_cand, 5, CSS_RIGHT); + previous_all_input(&csl_cand, 4, CSS_RIGHT); + + pcstates->clear(); + // Take the intersection of the corresponding states ~2^15 values (40-25 = 15 bits) - for(itsearch=csl_search.begin();itsearch!=csl_search.end();++itsearch) - { - itmatch = matchbox.find(itsearch->l); - if (itmatch != matchbox.end()) - { - itsearch->Gc[0] = (itmatch->second >> 15) & 0x1f; - itsearch->Gc[1] = (itmatch->second >> 10) & 0x1f; - itsearch->Gc[2] = (itmatch->second >> 5) & 0x1f; - itsearch->Gc[3] = itmatch->second & 0x1f; - - /* - printf("%07llx ",it->l); - printf("(%x) ",itmatch->second); - print_cs("",&(*it)); - */ -/* - if (itsearch->l == 0x405162420ull) - { - print_cs("previous:",&(*itsearch)); - printf("%09llx\n",itsearch->l); - print_bytes(itsearch->Gc,8); + for (it = csl_cand.begin(); it != csl_cand.end(); ++it) { + itmatch = matchbox.find(it->r); + if (itmatch != matchbox.end()) { + it->Gc[0] = (itmatch->second >> 12) & 0xf8; + it->Gc[1] = (itmatch->second >> 7) & 0xf8; + it->Gc[2] = (itmatch->second >> 2) & 0xf8; + it->Gc[3] = (itmatch->second << 3) & 0xf8; + /* + printf("%07llx ",it->r); + printf("(%x)\n",itmatch->second); + */ + /* + if (it->r == 0xff459b) + { + print_cs("previous:",&(*it)); + printf("%07llx\n",it->r); + print_bytes(it->Gc,8); + } + */ + pcstates->push_back(*it); } - count++; -*/ - pcstates->push_back(*itsearch); - } } +} + +static inline void sm_left(const uint8_t *ks, uint8_t *mask, vector *pcstates) { + map bincstates; + map::iterator it; + uint64_t counter, lstate; + size_t pos, bits, bit; + uint8_t correct_bits[16]; + uint8_t bt; + cs_t state; + lookup_entry *lookup; + + // Reset and initialize the cryptostate and vecctor + memset(&state, 0x00, sizeof(cs_t)); + state.invalid = false; + + for (counter = 0; counter < 0x800000000ull; counter++) { + lstate = counter; + + for (pos = 0; pos < 16; pos++) { + lstate = (((lstate) >> 5) | ((uint64_t)left_addition[((lstate) & 0xf801f)] << 30)); + lookup = &(lookup_left[((lstate) & 0xf801f)]); + lstate = (((lstate) >> 5) | ((uint64_t)lookup->addition << 30)); + bt = lookup->out << 4; + lstate = (((lstate) >> 5) | ((uint64_t)left_addition[((lstate) & 0xf801f)] << 30)); + lookup = &(lookup_left[((lstate) & 0xf801f)]); + lstate = (((lstate) >> 5) | ((uint64_t)lookup->addition << 30)); + bt |= lookup->out; + + // xor the bits with the keystream and count the "correct" bits + bt ^= ks[pos]; + + // When the REQUIRED bits are NOT xored away (=zero), ignore this wrong state + if ((bt & mask[pos]) != 0) break; + + // Save the correct bits for statistical information + correct_bits[pos] = bt; + } + + // If we have parsed all 16 bytes of keystream, we have a valid CANDIDATE! + if (pos == 16) { + // Count the total correct bits + bits = 0; + for (pos = 0; pos < 16; pos++) { + // Get the next byte-value with correct bits + bt = correct_bits[pos]; + + // Count all the (correct) bits + for (bit = 0; bit < 8; bit++) { + // When the bit is xored away (=zero), it was the same, so correct ;) + if ((bt & 0x01) == 0) bits++; + bt >>= 1; + } + } + + // Print the left candidate +// printf("%09llx (%d)\n",counter,bits); + printf("."); + fflush(stdout); + + state.l = counter; + // Make sure the bits are used for ordering + bincstates[(((uint64_t)bits) << 56) | counter] = state; + } + + if ((counter & 0xffffffffull) == 0) { + printf("%02.1f%%.", ((float)100 / 8) * (counter >> 32)); + fflush(stdout); + } + } + printf("100%%\n"); + + // Clear the candidate state vector + pcstates->clear(); + + // Copy the order the states from lowest-bin to highest-bin + for (it = bincstates.begin(); it != bincstates.end(); ++it) { + pcstates->push_back(it->second); + } + // Reverse the vector order (so the higest bin comes first) + reverse(pcstates->begin(), pcstates->end()); +} + +static inline void search_gc_candidates_left(const uint64_t lstate_before_gc, const uint8_t *Q, vector *pcstates) { + vector csl_cand, csl_search; + vector::iterator itsearch, itcand; + map matchbox; + map::iterator itmatch; + uint64_t lstate; + size_t counter; + + // Generate 2^20 different (5 bits) values for the first 4 Gc bytes (0,1,2,3) + for (counter = 0; counter < 0x100000; counter++) { + lstate = lstate_before_gc; + next_left_fast((counter >> 15) & 0x1f, &lstate); + next_left_fast((counter >> 10) & 0x1f, &lstate); + next_left_fast(Q[4], &lstate); + next_left_fast((counter >> 5) & 0x1f, &lstate); + next_left_fast(counter & 0x1f, &lstate); + next_left_fast(Q[5], &lstate); + matchbox[lstate] = counter; + } + + // Copy the input candidate states and clean the output vector + csl_cand = *pcstates; + pcstates->clear(); + + for (itcand = csl_cand.begin(); itcand != csl_cand.end(); ++itcand) { + csl_search.clear(); + csl_search.push_back(*itcand); + + // Generate 2^20(+splitting) different (5 bits) values for the last 4 Gc bytes (4,5,6,7) + previous_left(Q[7], &csl_search); + previous_all_input(&csl_search, 7, CSS_LEFT); + previous_all_input(&csl_search, 6, CSS_LEFT); + previous_left(Q[6], &csl_search); + previous_all_input(&csl_search, 5, CSS_LEFT); + previous_all_input(&csl_search, 4, CSS_LEFT); + + // Take the intersection of the corresponding states ~2^15 values (40-25 = 15 bits) + for (itsearch = csl_search.begin(); itsearch != csl_search.end(); ++itsearch) { + itmatch = matchbox.find(itsearch->l); + if (itmatch != matchbox.end()) { + itsearch->Gc[0] = (itmatch->second >> 15) & 0x1f; + itsearch->Gc[1] = (itmatch->second >> 10) & 0x1f; + itsearch->Gc[2] = (itmatch->second >> 5) & 0x1f; + itsearch->Gc[3] = itmatch->second & 0x1f; + + /* + printf("%07llx ",it->l); + printf("(%x) ",itmatch->second); + print_cs("",&(*it)); + */ + /* + if (itsearch->l == 0x405162420ull) + { + print_cs("previous:",&(*itsearch)); + printf("%09llx\n",itsearch->l); + print_bytes(itsearch->Gc,8); + } + count++; + */ + pcstates->push_back(*itsearch); + } + } // printf("%09llx: ",itcand->l); // printf("%d - %d\n",csl_search.size(),count); - printf("."); - fflush(stdout); - } - printf("\n"); + printf("."); + fflush(stdout); + } + printf("\n"); } -void combine_valid_left_right_states(vector* plcstates, vector* prcstates, vector* pgc_candidates) -{ +void combine_valid_left_right_states(vector *plcstates, vector *prcstates, vector *pgc_candidates) { vector::iterator itl, itr; - size_t pos,count; - uint64_t gc; - bool valid; + size_t pos, count; + uint64_t gc; + bool valid; - // Clean up the candidate list - pgc_candidates->clear(); - count = 0; - for(itl=plcstates->begin();itl!=plcstates->end();++itl) - { - for(itr=prcstates->begin();itr!=prcstates->end();++itr) - { - valid = true; - // Check for left and right candidates that share the overlapping bits (8 x 2bits of Gc) - for (pos=0; pos<8; pos++) - { - if ((itl->Gc[pos] & 0x18) != (itr->Gc[pos] & 0x18)) - { - valid = false; - break; - } - } - - if (valid) - { - gc = 0; - for (pos=0; pos<8; pos++) - { - gc <<= 8; - gc |= (itl->Gc[pos] | itr->Gc[pos]); - } + // Clean up the candidate list + pgc_candidates->clear(); + count = 0; + for (itl = plcstates->begin(); itl != plcstates->end(); ++itl) { + for (itr = prcstates->begin(); itr != prcstates->end(); ++itr) { + valid = true; + // Check for left and right candidates that share the overlapping bits (8 x 2bits of Gc) + for (pos = 0; pos < 8; pos++) { + if ((itl->Gc[pos] & 0x18) != (itr->Gc[pos] & 0x18)) { + valid = false; + break; + } + } + + if (valid) { + gc = 0; + for (pos = 0; pos < 8; pos++) { + gc <<= 8; + gc |= (itl->Gc[pos] | itr->Gc[pos]); + } // printf("%016llx\n",gc); - pgc_candidates->push_back(gc); + pgc_candidates->push_back(gc); // printf("%09llx - ",itl->l); // printf("%07llx\n",itr->r); - } - count++; + } + count++; + } } - } - printf("Found a total of " _YELLOW_("%llu")" combinations, ",((unsigned long long)plcstates->size()) * prcstates->size()); - printf("but only " _GREEN_("%lu")" were valid!\n", pgc_candidates->size()); + printf("Found a total of " _YELLOW_("%llu")" combinations, ", ((unsigned long long)plcstates->size()) * prcstates->size()); + printf("but only " _GREEN_("%lu")" were valid!\n", pgc_candidates->size()); } -int main(int argc, const char* argv[]) -{ - size_t pos; - crypto_state_t ostate; - uint64_t rstate_before_gc,rstate_after_gc; - uint64_t lstate_before_gc; - vector rstates,lstates_after_gc,pgc_candidates; - vector::iterator itrstates,itgc; - vector crstates; - vector clcandidates,clstates; +int main(int argc, const char *argv[]) { + size_t pos; + crypto_state_t ostate; + uint64_t rstate_before_gc, rstate_after_gc; + uint64_t lstate_before_gc; + vector rstates, lstates_after_gc, pgc_candidates; + vector::iterator itrstates, itgc; + vector crstates; + vector clcandidates, clstates; vector::iterator it; - uint32_t rbits; - + uint32_t rbits; + // uint8_t Gc[ 8] = {0x4f,0x79,0x4a,0x46,0x3f,0xf8,0x1d,0x81}; // uint8_t Gc[ 8] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; // uint8_t Ci[ 8] = {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff}; // uint8_t Q[ 8] = {0x12,0x34,0x56,0x78,0x12,0x34,0x56,0x78}; - uint8_t Gc[ 8]; - uint8_t Ci[ 8]; - uint8_t Q[ 8]; - uint8_t Ch[ 8]; - uint8_t Ci_1[ 8]; + uint8_t Gc[ 8]; + uint8_t Ci[ 8]; + uint8_t Q[ 8]; + uint8_t Ch[ 8]; + uint8_t Ci_1[ 8]; - uint8_t Gc_chk[ 8]; - uint8_t Ch_chk[ 8]; - uint8_t Ci_1_chk[ 8]; + uint8_t Gc_chk[ 8]; + uint8_t Ch_chk[ 8]; + uint8_t Ci_1_chk[ 8]; - // uint8_t ks[16] = {0xde,0x88,0xc2,0xc9,0xee,0xd4,0x1b,0x46,0x1c,0x6a,0x92,0x50,0x76,0x1a,0xe9,0x87}; - // uint8_t mask[16] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; - // uint8_t mask[16] = {0x04,0xb0,0xe1,0x10,0xc0,0x33,0x44,0x20,0x20,0x00,0x70,0x8c,0x22,0x04,0x10,0x80}; + // uint8_t ks[16] = {0xde,0x88,0xc2,0xc9,0xee,0xd4,0x1b,0x46,0x1c,0x6a,0x92,0x50,0x76,0x1a,0xe9,0x87}; + // uint8_t mask[16] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; + // uint8_t mask[16] = {0x04,0xb0,0xe1,0x10,0xc0,0x33,0x44,0x20,0x20,0x00,0x70,0x8c,0x22,0x04,0x10,0x80}; - uint8_t ks[16]; - uint8_t mask[16]; - - uint64_t nCi; // Card random - uint64_t nQ; // Reader random - uint64_t nCh; // Reader challange - uint64_t nCi_1; // Card anwser - - if ((argc != 2) && (argc != 5)) - { - printf("SecureMemory recovery - (c) Radboud University Nijmegen\n\n"); - printf("syntax: sma simulate\n"); - printf(" sma \n\n"); - return 1; - } - - printf(_CYAN_("\nAuthentication info\n\n")); + uint8_t ks[16]; + uint8_t mask[16]; - // Check if this is a simulation - if (argc == 2) - { - // Generate random values for the key and randoms - srand((uint32_t)time(NULL)); - for (pos = 0; pos<8; pos++) - { - Gc[pos] = rand(); - Ci[pos] = rand(); - Q[pos] = rand(); + uint64_t nCi; // Card random + uint64_t nQ; // Reader random + uint64_t nCh; // Reader challange + uint64_t nCi_1; // Card anwser + + if ((argc != 2) && (argc != 5)) { + printf("SecureMemory recovery - (c) Radboud University Nijmegen\n\n"); + printf("syntax: sma simulate\n"); + printf(" sma \n\n"); + return 1; } - sm_auth(Gc,Ci,Q,Ch,Ci_1,&ostate); - printf(" Gc: "); print_bytes(Gc,8); - } else { - sscanf(argv[1],"%016" SCNx64,&nCi); num_to_bytes(nCi,8,Ci); - sscanf(argv[2],"%016" SCNx64,&nQ); num_to_bytes(nQ,8,Q); - sscanf(argv[3],"%016" SCNx64,&nCh); num_to_bytes(nCh,8,Ch); - sscanf(argv[4],"%016" SCNx64,&nCi_1); num_to_bytes(nCi_1,8,Ci_1); - printf(" Gc: unknown\n"); - } - - for (pos = 0; pos<8; pos++) - { - ks[2*pos] = Ci_1[pos]; - ks[(2*pos)+1] = Ch[pos]; - } - - printf(" Ci: "); print_bytes(Ci,8); - printf(" Q: "); print_bytes(Q,8); - printf(" Ch: "); print_bytes(Ch,8); - printf("Ci+1: "); print_bytes(Ci_1,8); - printf("\n"); - printf(" Ks: "); print_bytes(ks,16); - printf("\n"); - - printf("Initializing lookup tables for increasing cipher speed\n"); - init_lookup_left(); - init_lookup_right(); - init_lookup_left_substraction(); - init_lookup_right_substraction(); - - // Load in the ci (tag-nonce), together with the first half of Q (reader-nonce) - rstate_before_gc = 0; - lstate_before_gc = 0; - for (pos = 0; pos < 4; pos++) - { - next_right_fast(Ci[2*pos ],&rstate_before_gc); - next_right_fast(Ci[2*pos+1],&rstate_before_gc); - next_right_fast(Q[pos],&rstate_before_gc); - next_left_fast(Ci[2*pos ],&lstate_before_gc); - next_left_fast(Ci[2*pos+1],&lstate_before_gc); - next_left_fast(Q[pos],&lstate_before_gc); - } - - printf("Determing the right states that correspond to the keystream\n"); - rbits = sm_right(ks,mask,&rstates); - printf("Top-bin for the right state contains " _GREEN_("%d")" correct bits\n",rbits); - printf("Total count of right bins: " _YELLOW_("%lu") "\n",(unsigned long)rstates.size()); + printf(_CYAN_("\nAuthentication info\n\n")); - if (rbits < 96) - { - printf(_RED_("\n WARNING!!! Better find another trace, the right top-bin is < 96 bits\n\n")); - } - - for(itrstates=rstates.begin();itrstates!=rstates.end();++itrstates) - { - rstate_after_gc = *itrstates; - sm_left_mask(ks,mask,rstate_after_gc); - printf("Using the state from the top-right bin: " _YELLOW_("0x%07" PRIx64)"\n",rstate_after_gc); - - search_gc_candidates_right(rstate_before_gc,rstate_after_gc,Q,&crstates); - printf("Found " _YELLOW_("%lu")" right candidates using the meet-in-the-middle attack\n",crstates.size()); - if (crstates.size() == 0) continue; - - printf("Calculating left states using the (unknown bits) mask from the top-right state\n"); - sm_left(ks,mask,&clstates); - printf("Found a total of " _YELLOW_("%lu")" left cipher states, recovering left candidates...\n",clstates.size()); - if (clstates.size() == 0) continue; - - search_gc_candidates_left(lstate_before_gc,Q,&clstates); - printf("The meet-in-the-middle attack returned " _YELLOW_("%lu")" left cipher candidates\n",clstates.size()); - if (clstates.size() == 0) continue; - - printf("Combining left and right states, disposing invalid combinations\n"); - combine_valid_left_right_states(&clstates,&crstates,&pgc_candidates); - - printf("Filtering the correct one using the middle part\n"); - for(itgc=pgc_candidates.begin();itgc!=pgc_candidates.end();++itgc) - { - num_to_bytes(*itgc,8,Gc_chk); - sm_auth(Gc_chk,Ci,Q,Ch_chk,Ci_1_chk,&ostate); - if ((memcmp(Ch_chk,Ch,8) == 0) && (memcmp(Ci_1_chk,Ci_1,8) == 0)) - { - printf("\nFound valid key: " _GREEN_("%016" PRIx64)"\n\n",*itgc); - return 0; - } + // Check if this is a simulation + if (argc == 2) { + // Generate random values for the key and randoms + srand((uint32_t)time(NULL)); + for (pos = 0; pos < 8; pos++) { + Gc[pos] = rand(); + Ci[pos] = rand(); + Q[pos] = rand(); + } + sm_auth(Gc, Ci, Q, Ch, Ci_1, &ostate); + printf(" Gc: "); + print_bytes(Gc, 8); + } else { + sscanf(argv[1], "%016" SCNx64, &nCi); + num_to_bytes(nCi, 8, Ci); + sscanf(argv[2], "%016" SCNx64, &nQ); + num_to_bytes(nQ, 8, Q); + sscanf(argv[3], "%016" SCNx64, &nCh); + num_to_bytes(nCh, 8, Ch); + sscanf(argv[4], "%016" SCNx64, &nCi_1); + num_to_bytes(nCi_1, 8, Ci_1); + printf(" Gc: unknown\n"); } - printf(_RED_("Could not find key using this right cipher state.\n\n")); - } - return 0; + + for (pos = 0; pos < 8; pos++) { + ks[2 * pos] = Ci_1[pos]; + ks[(2 * pos) + 1] = Ch[pos]; + } + + printf(" Ci: "); + print_bytes(Ci, 8); + printf(" Q: "); + print_bytes(Q, 8); + printf(" Ch: "); + print_bytes(Ch, 8); + printf("Ci+1: "); + print_bytes(Ci_1, 8); + printf("\n"); + printf(" Ks: "); + print_bytes(ks, 16); + printf("\n"); + + printf("Initializing lookup tables for increasing cipher speed\n"); + init_lookup_left(); + init_lookup_right(); + init_lookup_left_substraction(); + init_lookup_right_substraction(); + + // Load in the ci (tag-nonce), together with the first half of Q (reader-nonce) + rstate_before_gc = 0; + lstate_before_gc = 0; + for (pos = 0; pos < 4; pos++) { + next_right_fast(Ci[2 * pos ], &rstate_before_gc); + next_right_fast(Ci[2 * pos + 1], &rstate_before_gc); + next_right_fast(Q[pos], &rstate_before_gc); + + next_left_fast(Ci[2 * pos ], &lstate_before_gc); + next_left_fast(Ci[2 * pos + 1], &lstate_before_gc); + next_left_fast(Q[pos], &lstate_before_gc); + } + + printf("Determing the right states that correspond to the keystream\n"); + rbits = sm_right(ks, mask, &rstates); + printf("Top-bin for the right state contains " _GREEN_("%d")" correct bits\n", rbits); + printf("Total count of right bins: " _YELLOW_("%lu") "\n", (unsigned long)rstates.size()); + + if (rbits < 96) { + printf(_RED_("\n WARNING!!! Better find another trace, the right top-bin is < 96 bits\n\n")); + } + + for (itrstates = rstates.begin(); itrstates != rstates.end(); ++itrstates) { + rstate_after_gc = *itrstates; + sm_left_mask(ks, mask, rstate_after_gc); + printf("Using the state from the top-right bin: " _YELLOW_("0x%07" PRIx64)"\n", rstate_after_gc); + + search_gc_candidates_right(rstate_before_gc, rstate_after_gc, Q, &crstates); + printf("Found " _YELLOW_("%lu")" right candidates using the meet-in-the-middle attack\n", crstates.size()); + if (crstates.size() == 0) continue; + + printf("Calculating left states using the (unknown bits) mask from the top-right state\n"); + sm_left(ks, mask, &clstates); + printf("Found a total of " _YELLOW_("%lu")" left cipher states, recovering left candidates...\n", clstates.size()); + if (clstates.size() == 0) continue; + + search_gc_candidates_left(lstate_before_gc, Q, &clstates); + printf("The meet-in-the-middle attack returned " _YELLOW_("%lu")" left cipher candidates\n", clstates.size()); + if (clstates.size() == 0) continue; + + printf("Combining left and right states, disposing invalid combinations\n"); + combine_valid_left_right_states(&clstates, &crstates, &pgc_candidates); + + printf("Filtering the correct one using the middle part\n"); + for (itgc = pgc_candidates.begin(); itgc != pgc_candidates.end(); ++itgc) { + num_to_bytes(*itgc, 8, Gc_chk); + sm_auth(Gc_chk, Ci, Q, Ch_chk, Ci_1_chk, &ostate); + if ((memcmp(Ch_chk, Ch, 8) == 0) && (memcmp(Ci_1_chk, Ci_1, 8) == 0)) { + printf("\nFound valid key: " _GREEN_("%016" PRIx64)"\n\n", *itgc); + return 0; + } + } + printf(_RED_("Could not find key using this right cipher state.\n\n")); + } + return 0; } diff --git a/tools/cryptorf/sma_multi.cpp b/tools/cryptorf/sma_multi.cpp index d3658ff23..5c64ceeb0 100644 --- a/tools/cryptorf/sma_multi.cpp +++ b/tools/cryptorf/sma_multi.cpp @@ -1,9 +1,9 @@ /* - * + * * SecureMemory recovery Multithread * * Copyright (C) 2010, Flavio D. Garcia, Peter van Rossum, Roel Verdult - * and Ronny Wichers Schreur. Radboud University Nijmegen + * and Ronny Wichers Schreur. Radboud University Nijmegen * * 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 @@ -17,7 +17,7 @@ * * You should have received a copy of the GNU General Public License * along with this program. If not, see . - * + * * Modifed Iceman, 2020 */ @@ -27,7 +27,7 @@ #include #include #include -#include // sort, max_element, random_shuffle, remove_if, lower_bound +#include // sort, max_element, random_shuffle, remove_if, lower_bound #include // greater, bind2nd #include // std::thread #include @@ -38,10 +38,10 @@ using namespace std; #ifdef _MSC_VER - // avoid scanf warnings in Visual Studio - #define _CRT_SECURE_NO_WARNINGS - #define _CRT_SECURE_NO_DEPRECATE - #define inline __inline +// avoid scanf warnings in Visual Studio +#define _CRT_SECURE_NO_WARNINGS +#define _CRT_SECURE_NO_DEPRECATE +#define inline __inline #endif /* @@ -56,7 +56,7 @@ Authenticate Ci+1: de c2 ee 1b 1c 92 76 e9 Ks: de 88 c2 c9 ee d4 1b 46 1c 6a 92 50 76 1a e9 87 - + left: 1ddeac626 right: 19aba45 @@ -108,21 +108,21 @@ Ci+1: de c2 ee 1b 1c 92 76 e9 */ const uint64_t left_candidates[43] = { - 0x6221539d9ull, 0x1ddeac626ull, 0x7cc847482ull, 0x0337b8b7dull, - 0x159d1687eull, 0x7bade8a41ull, 0x4c51c6463ull, 0x4e3d88bf9ull, - 0x4e3d88819ull, 0x31c2777e6ull, 0x31c277406ull, 0x0059ff7d5ull, - 0x5fb612b96ull, 0x2049ed469ull, 0x0452175beull, 0x00d2ff4edull, - 0x68918cba9ull, 0x03a6f882aull, 0x7086372b6ull, 0x6c9a11672ull, - 0x60531191aull, 0x4ba9b653full, 0x4ba9b6520ull, 0x1facee6e5ull, - 0x0f79c8d49ull, 0x0b29f2a5bull, 0x032df8b12ull, 0x7c90849f8ull, - 0x48916e84eull, 0x176e73456ull, 0x036f7b607ull, 0x5b2aeb858ull, - 0x51c8755b5ull, 0x4c9432733ull, 0x0f6c834fbull, 0x03b2ff59bull, - 0x0f78aac5bull, 0x3770cdaf3ull, 0x205078bbaull, 0x04445c715ull, - 0x004df8a64ull, 0x6f696e09eull, 0x109691f61ull + 0x6221539d9ull, 0x1ddeac626ull, 0x7cc847482ull, 0x0337b8b7dull, + 0x159d1687eull, 0x7bade8a41ull, 0x4c51c6463ull, 0x4e3d88bf9ull, + 0x4e3d88819ull, 0x31c2777e6ull, 0x31c277406ull, 0x0059ff7d5ull, + 0x5fb612b96ull, 0x2049ed469ull, 0x0452175beull, 0x00d2ff4edull, + 0x68918cba9ull, 0x03a6f882aull, 0x7086372b6ull, 0x6c9a11672ull, + 0x60531191aull, 0x4ba9b653full, 0x4ba9b6520ull, 0x1facee6e5ull, + 0x0f79c8d49ull, 0x0b29f2a5bull, 0x032df8b12ull, 0x7c90849f8ull, + 0x48916e84eull, 0x176e73456ull, 0x036f7b607ull, 0x5b2aeb858ull, + 0x51c8755b5ull, 0x4c9432733ull, 0x0f6c834fbull, 0x03b2ff59bull, + 0x0f78aac5bull, 0x3770cdaf3ull, 0x205078bbaull, 0x04445c715ull, + 0x004df8a64ull, 0x6f696e09eull, 0x109691f61ull }; typedef struct { - uint64_t l; + uint64_t l; uint64_t m; uint64_t r; nibble b0; @@ -130,10 +130,10 @@ typedef struct { nibble b1l; nibble b1r; nibble b1s; - bool invalid; - uint8_t Gc[8]; -}cs_t; -typedef cs_t* pcs; + bool invalid; + uint8_t Gc[8]; +} cs_t; +typedef cs_t *pcs; typedef struct { uint8_t addition; @@ -141,39 +141,39 @@ typedef struct { } lookup_entry; enum cipher_state_side { - CSS_LEFT, - CSS_RIGHT + CSS_LEFT, + CSS_RIGHT }; -void print_cs(const char* text,pcs s) { - int pos; - - printf("%s",text); +void print_cs(const char *text, pcs s) { + int pos; - for(pos=6;pos>=0;pos--) - printf(" %02x",(uint8_t)(s->l>>(pos*5))&0x1f); + printf("%s", text); - printf(" |"); - for(pos=6;pos>=0;pos--) - printf(" %02x",(uint8_t)(s->m>>(pos*7))&0x7f); + for (pos = 6; pos >= 0; pos--) + printf(" %02x", (uint8_t)(s->l >> (pos * 5)) & 0x1f); - printf(" |"); + printf(" |"); + for (pos = 6; pos >= 0; pos--) + printf(" %02x", (uint8_t)(s->m >> (pos * 7)) & 0x7f); - for(pos=4;pos>=0;pos--) - printf(" %02x",(uint8_t)(s->r>>(pos*5))&0x1f); - - printf("\n"); + printf(" |"); + + for (pos = 4; pos >= 0; pos--) + printf(" %02x", (uint8_t)(s->r >> (pos * 5)) & 0x1f); + + printf("\n"); } static inline uint8_t mod(uint8_t a, uint8_t m) { - // Just return the input when this is less or equal than the modular value - if (a> 5) & 0x1f; index = (b3 << 15) | b6; - + // b6 = bit_rotate_l(b6, 5); b6 = BIT_ROL(b6); - temp = mod(b3 + b6,0x1f); + temp = mod(b3 + b6, 0x1f); left_addition[index] = temp; lookup_left[index].addition = temp; - lookup_left[index].out = ((temp^b3) & 0x0f); + lookup_left[index].out = ((temp ^ b3) & 0x0f); } } @@ -222,143 +222,143 @@ static inline void init_lookup_right() { uint8_t b16, b18, temp; int i, index; - for(i = 0; i <0x400; i++) { + for (i = 0; i < 0x400; i++) { b18 = i & 0x1f; b16 = (i >> 5) & 0x1f; index = (b16 << 10) | b18; - temp = mod(b18 + b16,0x1f); + temp = mod(b18 + b16, 0x1f); lookup_right[index].addition = temp; - lookup_right[index].out = ((temp^b16) & 0x0f); + lookup_right[index].out = ((temp ^ b16) & 0x0f); } } static void init_lookup_left_substraction() { - for(int index = 0; index < 0x400 ; index++) { + for (int index = 0; index < 0x400 ; index++) { uint8_t b3 = (index >> 5 & 0x1f); uint8_t bx = (index & 0x1f); //lookup_left_substraction[index] = bit_rotate_r(mod((bx+0x1f)-b3,0x1f),5); - lookup_left_substraction[index] = BIT_ROR( mod((bx + 0x1F) - b3, 0x1F)); + lookup_left_substraction[index] = BIT_ROR(mod((bx + 0x1F) - b3, 0x1F)); } } static void init_lookup_right_substraction() { - for(int index = 0; index < 0x400 ; index++) { - int b16 = (index >>5); + for (int index = 0; index < 0x400 ; index++) { + int b16 = (index >> 5); uint8_t bx = (index & 0x1f); lookup_right_subtraction[index] = mod((bx + 0x1F) - b16, 0x1F); } } static inline void previous_left(uint8_t in, vector *candidate_states) { - pcs state; - size_t size = candidate_states->size(); - for(size_t pos=0; possize(); + for (size_t pos = 0; pos < size; pos++) { + state = &((*candidate_states)[pos]); - uint8_t bx = (uint8_t)((state->l >> 30) & 0x1f); - unsigned b3 = (unsigned)(state->l >> 5) & 0x3e0; - state->l = (state->l << 5); + uint8_t bx = (uint8_t)((state->l >> 30) & 0x1f); + unsigned b3 = (unsigned)(state->l >> 5) & 0x3e0; + state->l = (state->l << 5); - //Ignore impossible states - if (bx == 0) { - // Are we dealing with an impossible state? - if (b3 != 0) { - state->invalid = true; - } else { - // We only need to consider b6=0 - state->l &= 0x7ffffffe0ull; - state->l ^= (((uint64_t)in & 0x1f) << 20); - } - } else { - uint8_t b6 = lookup_left_substraction[b3|bx]; - state->l = (state->l & 0x7ffffffe0ull) | b6; - state->l ^= (((uint64_t)in & 0x1f) << 20); + //Ignore impossible states + if (bx == 0) { + // Are we dealing with an impossible state? + if (b3 != 0) { + state->invalid = true; + } else { + // We only need to consider b6=0 + state->l &= 0x7ffffffe0ull; + state->l ^= (((uint64_t)in & 0x1f) << 20); + } + } else { + uint8_t b6 = lookup_left_substraction[b3 | bx]; + state->l = (state->l & 0x7ffffffe0ull) | b6; + state->l ^= (((uint64_t)in & 0x1f) << 20); - // Check if we have a second candidate - if (b6 == 0x1f) { - cs_t nstate = *state; - nstate.l &= 0x7ffffffe0ull; - candidate_states->push_back(nstate); - } + // Check if we have a second candidate + if (b6 == 0x1f) { + cs_t nstate = *state; + nstate.l &= 0x7ffffffe0ull; + candidate_states->push_back(nstate); + } + } } - } } static inline void previous_right(uint8_t in, vector *candidate_states) { - pcs state; - size_t size = candidate_states->size(); - for(size_t pos=0; posr >> 20) & 0x1f); - unsigned b16 = (unsigned)(state->r & 0x3e0);//(state->buffer_r >> 10) & 0x1f; - - state->r = (state->r << 5); - - // Ignore impossible states - if (bx == 0) { - if (b16 != 0) { - state->invalid=true; - } else { - // We only need to consider b18=0 - state->r &= 0x1ffffe0ull; - state->r ^= (((uint64_t)in & 0xf8) << 12); - } - } else { - uint8_t b18 = lookup_right_subtraction[b16|bx]; - state->r = (state->r & 0x1ffffe0ull) | b18; - state->r ^= (((uint64_t)in & 0xf8) << 12); - //state->b_right = ((b14^b17) & 0x0f); - - // Check if we have a second candidate - if (b18 == 0x1f) { - cs_t nstate = *state; - nstate.r &= 0x1ffffe0ull; - candidate_states->push_back(nstate); - } - } - } + pcs state; + size_t size = candidate_states->size(); + for (size_t pos = 0; pos < size; pos++) { + state = &((*candidate_states)[pos]); + + uint8_t bx = (uint8_t)((state->r >> 20) & 0x1f); + unsigned b16 = (unsigned)(state->r & 0x3e0);//(state->buffer_r >> 10) & 0x1f; + + state->r = (state->r << 5); + + // Ignore impossible states + if (bx == 0) { + if (b16 != 0) { + state->invalid = true; + } else { + // We only need to consider b18=0 + state->r &= 0x1ffffe0ull; + state->r ^= (((uint64_t)in & 0xf8) << 12); + } + } else { + uint8_t b18 = lookup_right_subtraction[b16 | bx]; + state->r = (state->r & 0x1ffffe0ull) | b18; + state->r ^= (((uint64_t)in & 0xf8) << 12); + //state->b_right = ((b14^b17) & 0x0f); + + // Check if we have a second candidate + if (b18 == 0x1f) { + cs_t nstate = *state; + nstate.r &= 0x1ffffe0ull; + candidate_states->push_back(nstate); + } + } + } } -static inline uint8_t next_left_fast(uint8_t in, uint64_t* left) { - if (in) +static inline uint8_t next_left_fast(uint8_t in, uint64_t *left) { + if (in) *left ^= ((in & 0x1f) << 20); - lookup_entry* lookup = &(lookup_left[((*left) & 0xf801f)]); - *left = (((*left) >> 5)| ((uint64_t)lookup->addition << 30)); + lookup_entry *lookup = &(lookup_left[((*left) & 0xf801f)]); + *left = (((*left) >> 5) | ((uint64_t)lookup->addition << 30)); return lookup->out; } -static inline uint8_t next_left_ksbyte(uint64_t* left) { - lookup_entry* lookup; - uint8_t bt; - - *left = (((*left) >> 5)| ((uint64_t)left_addition[((*left) & 0xf801f)] << 30)); - lookup = &(lookup_left[((*left) & 0xf801f)]); - *left = (((*left) >> 5)| ((uint64_t)lookup->addition << 30)); - bt = lookup->out << 4; - *left = (((*left) >> 5)| ((uint64_t)left_addition[((*left) & 0xf801f)] << 30)); - lookup = &(lookup_left[((*left) & 0xf801f)]); - *left = (((*left) >> 5)| ((uint64_t)lookup->addition << 30)); - bt |= lookup->out; +static inline uint8_t next_left_ksbyte(uint64_t *left) { + lookup_entry *lookup; + uint8_t bt; + + *left = (((*left) >> 5) | ((uint64_t)left_addition[((*left) & 0xf801f)] << 30)); + lookup = &(lookup_left[((*left) & 0xf801f)]); + *left = (((*left) >> 5) | ((uint64_t)lookup->addition << 30)); + bt = lookup->out << 4; + *left = (((*left) >> 5) | ((uint64_t)left_addition[((*left) & 0xf801f)] << 30)); + lookup = &(lookup_left[((*left) & 0xf801f)]); + *left = (((*left) >> 5) | ((uint64_t)lookup->addition << 30)); + bt |= lookup->out; return bt; } -static inline uint8_t next_right_fast(uint8_t in, uint64_t* right) { - if (in) *right ^= ((in&0xf8) << 12); - lookup_entry* lookup = &(lookup_right[((*right) & 0x7c1f)]); +static inline uint8_t next_right_fast(uint8_t in, uint64_t *right) { + if (in) *right ^= ((in & 0xf8) << 12); + lookup_entry *lookup = &(lookup_right[((*right) & 0x7c1f)]); *right = (((*right) >> 5) | (lookup->addition << 20)); return lookup->out; } -static inline void sm_left_mask(const uint8_t* ks, uint8_t* mask, uint64_t rstate) { +static inline void sm_left_mask(const uint8_t *ks, uint8_t *mask, uint64_t rstate) { for (uint8_t pos = 0; pos < 16; pos++) { - next_right_fast(0,&rstate); - uint8_t bt = next_right_fast(0,&rstate) << 4; - next_right_fast(0,&rstate); - bt |= next_right_fast(0,&rstate); + next_right_fast(0, &rstate); + uint8_t bt = next_right_fast(0, &rstate) << 4; + next_right_fast(0, &rstate); + bt |= next_right_fast(0, &rstate); // xor the bits with the keystream and count the "correct" bits bt ^= ks[pos]; @@ -374,19 +374,19 @@ std::atomic key{0}; std::atomic topbits{0}; std::mutex g_ice_mtx; uint32_t g_num_cpus = std::thread::hardware_concurrency(); - - + + static void ice_sm_right_thread( uint8_t offset, - uint8_t skips, - const uint8_t* ks, - map* bincstates, - uint8_t* mask - ) { - + uint8_t skips, + const uint8_t *ks, + map *bincstates, + uint8_t *mask +) { + uint8_t tmp_mask[16]; uint8_t bt; - + for (uint64_t counter = offset; counter < 0x2000000; counter += skips) { // Reset the current bitcount of correct bits size_t bits = 0; @@ -428,7 +428,7 @@ static void ice_sm_right_thread( memcpy(mask, tmp_mask, 16); } g_ice_mtx.unlock(); - + // Ignore states under 90 if (bits >= 90) { // Make sure the bits are used for ordering @@ -436,39 +436,39 @@ static void ice_sm_right_thread( if (bincstates->find((((uint64_t)bits) << 56) | counter) != bincstates->end()) bincstates->at((((uint64_t)bits) << 56) | counter) = counter; else - bincstates->insert( std::pair( (((uint64_t)bits) << 56) | counter, counter)); + bincstates->insert(std::pair((((uint64_t)bits) << 56) | counter, counter)); g_ice_mtx.unlock(); } - + if ((counter & 0xfffff) == 0) { g_ice_mtx.lock(); printf("."); fflush(stdout); g_ice_mtx.unlock(); } - } + } } -static uint32_t ice_sm_right(const uint8_t* ks, uint8_t* mask, vector* pcrstates) { +static uint32_t ice_sm_right(const uint8_t *ks, uint8_t *mask, vector *pcrstates) { uint32_t g_num_cpus = std::thread::hardware_concurrency(); - map bincstates; + map bincstates; topbits = ATOMIC_VAR_INIT(0); std::vector threads(g_num_cpus); for (uint8_t m = 0; m < g_num_cpus; m++) { - threads[m] = std::thread( ice_sm_right_thread, m, g_num_cpus, ks, &bincstates, mask); + threads[m] = std::thread(ice_sm_right_thread, m, g_num_cpus, ks, &bincstates, mask); } - for (auto& t : threads) { + for (auto &t : threads) { t.join(); } printf("\n"); - // Clear the candidate state vector + // Clear the candidate state vector pcrstates->clear(); // Copy the order the states from lowest-bin to highest-bin - map::iterator it; + map::iterator it; for (it = bincstates.begin(); it != bincstates.end(); ++it) { pcrstates->push_back(it->second); } @@ -481,35 +481,35 @@ static uint32_t ice_sm_right(const uint8_t* ks, uint8_t* mask, vector* static void ice_sm_left_thread( uint8_t offset, - uint8_t skips, - const uint8_t* ks, - map* bincstates, - uint8_t* mask - ) { + uint8_t skips, + const uint8_t *ks, + map *bincstates, + uint8_t *mask +) { size_t pos, bits; uint8_t correct_bits[16]; - uint8_t bt; - lookup_entry* lookup; + uint8_t bt; + lookup_entry *lookup; // Reset and initialize the cryptostate and vector cs_t state; memset(&state, 0x00, sizeof(cs_t)); state.invalid = false; - + for (uint64_t counter = offset; counter < 0x800000000ull; counter += skips) { uint64_t lstate = counter; for (pos = 0; pos < 16; pos++) { - lstate = (((lstate) >> 5)| ((uint64_t)left_addition[((lstate) & 0xf801f)] << 30)); + lstate = (((lstate) >> 5) | ((uint64_t)left_addition[((lstate) & 0xf801f)] << 30)); lookup = &(lookup_left[((lstate) & 0xf801f)]); - lstate = (((lstate) >> 5)| ((uint64_t)lookup->addition << 30)); + lstate = (((lstate) >> 5) | ((uint64_t)lookup->addition << 30)); bt = lookup->out << 4; - lstate = (((lstate) >> 5)| ((uint64_t)left_addition[((lstate) & 0xf801f)] << 30)); + lstate = (((lstate) >> 5) | ((uint64_t)left_addition[((lstate) & 0xf801f)] << 30)); lookup = &(lookup_left[((lstate) & 0xf801f)]); - lstate = (((lstate) >> 5)| ((uint64_t)lookup->addition << 30)); + lstate = (((lstate) >> 5) | ((uint64_t)lookup->addition << 30)); bt |= lookup->out; // xor the bits with the keystream and count the "correct" bits @@ -521,10 +521,10 @@ static void ice_sm_left_thread( // Save the correct bits for statistical information correct_bits[pos] = bt; } - + // If we have parsed all 16 bytes of keystream, we have a valid CANDIDATE! if (pos == 16) { - // Count the total correct bits + // Count the total correct bits bits = 0; for (pos = 0; pos < 16; pos++) { // Get the next byte-value with correct bits @@ -541,9 +541,9 @@ static void ice_sm_left_thread( if (((bt >> 6) & 0x01) == 0) bits++; if (((bt >> 7) & 0x01) == 0) bits++; } - + state.l = counter; - + // Make sure the bits are used for ordering g_ice_mtx.lock(); printf("."); @@ -551,53 +551,53 @@ static void ice_sm_left_thread( if (bincstates->find((((uint64_t)bits) << 56) | counter) != bincstates->end()) bincstates->at((((uint64_t)bits) << 56) | counter) = state; else - bincstates->insert( std::pair( (((uint64_t)bits) << 56) | counter, state)); + bincstates->insert(std::pair((((uint64_t)bits) << 56) | counter, state)); g_ice_mtx.unlock(); - + } - + if ((counter & 0xffffffffull) == 0) { g_ice_mtx.lock(); - printf("%02.1f%%.", ((float)100/8) * (counter >> 32)); + printf("%02.1f%%.", ((float)100 / 8) * (counter >> 32)); fflush(stdout); g_ice_mtx.unlock(); } } } -static void ice_sm_left(const uint8_t* ks, uint8_t* mask, vector* pcstates) { +static void ice_sm_left(const uint8_t *ks, uint8_t *mask, vector *pcstates) { uint32_t g_num_cpus = std::thread::hardware_concurrency(); map bincstates; std::vector threads(g_num_cpus); for (uint8_t m = 0; m < g_num_cpus; m++) { - threads[m] = std::thread( ice_sm_left_thread, m, g_num_cpus, ks, &bincstates, mask); + threads[m] = std::thread(ice_sm_left_thread, m, g_num_cpus, ks, &bincstates, mask); } - for (auto& t : threads) { + for (auto &t : threads) { t.join(); } printf("100%%\n"); - // Clear the candidate state vector + // Clear the candidate state vector pcstates->clear(); // Copy the order the states from lowest-bin to highest-bin map::iterator it; - for(it = bincstates.begin(); it != bincstates.end(); ++it) { + for (it = bincstates.begin(); it != bincstates.end(); ++it) { pcstates->push_back(it->second); } // Reverse the vector order (so the higest bin comes first) - reverse(pcstates->begin(), pcstates->end()); + reverse(pcstates->begin(), pcstates->end()); } -static inline uint32_t sm_right(const uint8_t* ks, uint8_t* mask, vector* pcrstates) { +static inline uint32_t sm_right(const uint8_t *ks, uint8_t *mask, vector *pcrstates) { uint8_t tmp_mask[16]; size_t pos, bits, bit, topbits; - map bincstates; - map::iterator it; + map bincstates; + map::iterator it; uint8_t bt; topbits = 0; @@ -624,7 +624,7 @@ static inline uint32_t sm_right(const uint8_t* ks, uint8_t* mask, vector>= 1; + bt >>= 1; } } @@ -633,13 +633,13 @@ static inline uint32_t sm_right(const uint8_t* ks, uint8_t* mask, vector= 90) { - // Make sure the bits are used for ordering + // Make sure the bits are used for ordering bincstates[(((uint64_t)bits) << 56) | counter] = counter; } - + if ((counter & 0xfffff) == 0) { printf("."); fflush(stdout); @@ -647,7 +647,7 @@ static inline uint32_t sm_right(const uint8_t* ks, uint8_t* mask, vectorclear(); // Copy the order the states from lowest-bin to highest-bin @@ -662,189 +662,189 @@ static inline uint32_t sm_right(const uint8_t* ks, uint8_t* mask, vector *pcstates, uint32_t gc_byte_index, cipher_state_side css) { - uint8_t btGc,in; + uint8_t btGc, in; vector ncstates; vector prev_ncstates; - vector::iterator it,itnew; + vector::iterator it, itnew; - // Loop through the complete entryphy of 5 bits for each candidate - // We ignore zero (xor 0x00) to avoid duplicates - for (btGc=0; btGc<0x20; btGc++) { - // Copy the original candidates that are supplied - ncstates = *pcstates; + // Loop through the complete entryphy of 5 bits for each candidate + // We ignore zero (xor 0x00) to avoid duplicates + for (btGc = 0; btGc < 0x20; btGc++) { + // Copy the original candidates that are supplied + ncstates = *pcstates; - // Rollback the (candidate) cipher states with this input - if (css == CSS_RIGHT) { - in = btGc << 3; - previous_right(in,&ncstates); - } else { - in = btGc; - previous_left(in,&ncstates); - } - - for(itnew = ncstates.begin(); itnew != ncstates.end(); ++itnew) { - // Wipe away the invalid states - if (itnew->invalid == false) { - itnew->Gc[gc_byte_index] = in; - prev_ncstates.push_back(*itnew); - } - } - } - - // Copy the previous states into the vector - *pcstates = prev_ncstates; -} - -static inline void search_gc_candidates_right(const uint64_t rstate_before_gc, const uint64_t rstate_after_gc, const uint8_t* Q, vector* pcstates) { - vector::iterator it; - vector csl_cand; - map matchbox; - map::iterator itmatch; - uint64_t rstate; - size_t counter; - cs_t state; - - // Generate 2^20 different (5 bits) values for the first 4 Gc bytes (0,1,2,3) - for (counter=0; counter<0x100000; counter++) { - rstate = rstate_before_gc; - next_right_fast((counter >> 12) & 0xf8,&rstate); - next_right_fast((counter >> 7) & 0xf8,&rstate); - next_right_fast(Q[4],&rstate); - next_right_fast((counter >> 2) & 0xf8,&rstate); - next_right_fast((counter << 3) & 0xf8,&rstate); - next_right_fast(Q[5],&rstate); - matchbox[rstate] = counter; - } - - // Reset and initialize the cryptostate and vecctor - memset(&state,0x00,sizeof(cs_t)); - state.invalid = false; - state.r = rstate_after_gc; - csl_cand.clear(); - csl_cand.push_back(state); - - // Generate 2^20(+splitting) different (5 bits) values for the last 4 Gc bytes (4,5,6,7) - previous_right(Q[7],&csl_cand); - previous_all_input(&csl_cand,7,CSS_RIGHT); - previous_all_input(&csl_cand,6,CSS_RIGHT); - previous_right(Q[6],&csl_cand); - previous_all_input(&csl_cand,5,CSS_RIGHT); - previous_all_input(&csl_cand,4,CSS_RIGHT); - - pcstates->clear(); - - // Take the intersection of the corresponding states ~2^15 values (40-25 = 15 bits) - for (it=csl_cand.begin();it!=csl_cand.end();++it) { - itmatch = matchbox.find(it->r); - if (itmatch != matchbox.end()) { - it->Gc[0] = (itmatch->second >> 12) & 0xf8; - it->Gc[1] = (itmatch->second >> 7) & 0xf8; - it->Gc[2] = (itmatch->second >> 2) & 0xf8; - it->Gc[3] = (itmatch->second << 3) & 0xf8; - - pcstates->push_back(*it); - } - } -} - -static inline void sm_left(const uint8_t* ks, uint8_t* mask, vector* pcstates) { - map bincstates; - map::iterator it; - uint64_t counter, lstate; - size_t pos, bits; - uint8_t correct_bits[16]; - uint8_t bt; - cs_t state; - lookup_entry* lookup; - - // Reset and initialize the cryptostate and vecctor - memset(&state, 0x00, sizeof(cs_t)); - state.invalid = false; - - for (counter = 0; counter < 0x800000000ull; counter++) { - lstate = counter; - - for (pos = 0; pos < 16; pos++) { - - lstate = (((lstate) >> 5)| ((uint64_t)left_addition[((lstate) & 0xf801f)] << 30)); - lookup = &(lookup_left[((lstate) & 0xf801f)]); - lstate = (((lstate) >> 5)| ((uint64_t)lookup->addition << 30)); - bt = lookup->out << 4; - lstate = (((lstate) >> 5)| ((uint64_t)left_addition[((lstate) & 0xf801f)] << 30)); - lookup = &(lookup_left[((lstate) & 0xf801f)]); - lstate = (((lstate) >> 5)| ((uint64_t)lookup->addition << 30)); - bt |= lookup->out; - - // xor the bits with the keystream and count the "correct" bits - bt ^= ks[pos]; - - // When the REQUIRED bits are NOT xored away (=zero), ignore this wrong state - if ((bt & mask[pos]) != 0) break; - - // Save the correct bits for statistical information - correct_bits[pos] = bt; - } - - // If we have parsed all 16 bytes of keystream, we have a valid CANDIDATE! - if (pos == 16) { - // Count the total correct bits - bits = 0; - for (pos = 0; pos < 16; pos++) { - // Get the next byte-value with correct bits - bt = correct_bits[pos]; - - // Count all the (correct) bits - // When the bit is xored away (=zero), it was the same, so correct ;) - if ((bt & 0x01) == 0) bits++; - if (((bt >> 1) & 0x01) == 0) bits++; - if (((bt >> 2) & 0x01) == 0) bits++; - if (((bt >> 3) & 0x01) == 0) bits++; - if (((bt >> 4) & 0x01) == 0) bits++; - if (((bt >> 5) & 0x01) == 0) bits++; - if (((bt >> 6) & 0x01) == 0) bits++; - if (((bt >> 7) & 0x01) == 0) bits++; - + // Rollback the (candidate) cipher states with this input + if (css == CSS_RIGHT) { + in = btGc << 3; + previous_right(in, &ncstates); + } else { + in = btGc; + previous_left(in, &ncstates); } - // Print the left candidate - // printf("%09llx (%d)\n",counter,bits); - printf("."); - fflush(stdout); - - state.l = counter; - // Make sure the bits are used for ordering - bincstates[(((uint64_t)bits)<<56) | counter] = state; + for (itnew = ncstates.begin(); itnew != ncstates.end(); ++itnew) { + // Wipe away the invalid states + if (itnew->invalid == false) { + itnew->Gc[gc_byte_index] = in; + prev_ncstates.push_back(*itnew); + } + } } - - if ((counter & 0xffffffffull) == 0) { - printf("%02.1f%%.", ((float)100/8)*(counter>>32)); - fflush(stdout); - } - } - printf("100%%\n"); - - // Clear the candidate state vector - pcstates->clear(); - - // Copy the order the states from lowest-bin to highest-bin - for(it = bincstates.begin(); it != bincstates.end(); ++it) { - pcstates->push_back(it->second); - } - // Reverse the vector order (so the higest bin comes first) - reverse(pcstates->begin(), pcstates->end()); + // Copy the previous states into the vector + *pcstates = prev_ncstates; } -static inline void search_gc_candidates_left(const uint64_t lstate_before_gc, const uint8_t* Q, vector* pcstates) { - vector csl_cand,csl_search; - vector::iterator itsearch,itcand; - map matchbox; - map::iterator itmatch; +static inline void search_gc_candidates_right(const uint64_t rstate_before_gc, const uint64_t rstate_after_gc, const uint8_t *Q, vector *pcstates) { + vector::iterator it; + vector csl_cand; + map matchbox; + map::iterator itmatch; + uint64_t rstate; + size_t counter; + cs_t state; + + // Generate 2^20 different (5 bits) values for the first 4 Gc bytes (0,1,2,3) + for (counter = 0; counter < 0x100000; counter++) { + rstate = rstate_before_gc; + next_right_fast((counter >> 12) & 0xf8, &rstate); + next_right_fast((counter >> 7) & 0xf8, &rstate); + next_right_fast(Q[4], &rstate); + next_right_fast((counter >> 2) & 0xf8, &rstate); + next_right_fast((counter << 3) & 0xf8, &rstate); + next_right_fast(Q[5], &rstate); + matchbox[rstate] = counter; + } + + // Reset and initialize the cryptostate and vecctor + memset(&state, 0x00, sizeof(cs_t)); + state.invalid = false; + state.r = rstate_after_gc; + csl_cand.clear(); + csl_cand.push_back(state); + + // Generate 2^20(+splitting) different (5 bits) values for the last 4 Gc bytes (4,5,6,7) + previous_right(Q[7], &csl_cand); + previous_all_input(&csl_cand, 7, CSS_RIGHT); + previous_all_input(&csl_cand, 6, CSS_RIGHT); + previous_right(Q[6], &csl_cand); + previous_all_input(&csl_cand, 5, CSS_RIGHT); + previous_all_input(&csl_cand, 4, CSS_RIGHT); + + pcstates->clear(); + + // Take the intersection of the corresponding states ~2^15 values (40-25 = 15 bits) + for (it = csl_cand.begin(); it != csl_cand.end(); ++it) { + itmatch = matchbox.find(it->r); + if (itmatch != matchbox.end()) { + it->Gc[0] = (itmatch->second >> 12) & 0xf8; + it->Gc[1] = (itmatch->second >> 7) & 0xf8; + it->Gc[2] = (itmatch->second >> 2) & 0xf8; + it->Gc[3] = (itmatch->second << 3) & 0xf8; + + pcstates->push_back(*it); + } + } +} + +static inline void sm_left(const uint8_t *ks, uint8_t *mask, vector *pcstates) { + map bincstates; + map::iterator it; + uint64_t counter, lstate; + size_t pos, bits; + uint8_t correct_bits[16]; + uint8_t bt; + cs_t state; + lookup_entry *lookup; + + // Reset and initialize the cryptostate and vecctor + memset(&state, 0x00, sizeof(cs_t)); + state.invalid = false; + + for (counter = 0; counter < 0x800000000ull; counter++) { + lstate = counter; + + for (pos = 0; pos < 16; pos++) { + + lstate = (((lstate) >> 5) | ((uint64_t)left_addition[((lstate) & 0xf801f)] << 30)); + lookup = &(lookup_left[((lstate) & 0xf801f)]); + lstate = (((lstate) >> 5) | ((uint64_t)lookup->addition << 30)); + bt = lookup->out << 4; + lstate = (((lstate) >> 5) | ((uint64_t)left_addition[((lstate) & 0xf801f)] << 30)); + lookup = &(lookup_left[((lstate) & 0xf801f)]); + lstate = (((lstate) >> 5) | ((uint64_t)lookup->addition << 30)); + bt |= lookup->out; + + // xor the bits with the keystream and count the "correct" bits + bt ^= ks[pos]; + + // When the REQUIRED bits are NOT xored away (=zero), ignore this wrong state + if ((bt & mask[pos]) != 0) break; + + // Save the correct bits for statistical information + correct_bits[pos] = bt; + } + + // If we have parsed all 16 bytes of keystream, we have a valid CANDIDATE! + if (pos == 16) { + // Count the total correct bits + bits = 0; + for (pos = 0; pos < 16; pos++) { + // Get the next byte-value with correct bits + bt = correct_bits[pos]; + + // Count all the (correct) bits + // When the bit is xored away (=zero), it was the same, so correct ;) + if ((bt & 0x01) == 0) bits++; + if (((bt >> 1) & 0x01) == 0) bits++; + if (((bt >> 2) & 0x01) == 0) bits++; + if (((bt >> 3) & 0x01) == 0) bits++; + if (((bt >> 4) & 0x01) == 0) bits++; + if (((bt >> 5) & 0x01) == 0) bits++; + if (((bt >> 6) & 0x01) == 0) bits++; + if (((bt >> 7) & 0x01) == 0) bits++; + + } + + // Print the left candidate + // printf("%09llx (%d)\n",counter,bits); + printf("."); + fflush(stdout); + + state.l = counter; + // Make sure the bits are used for ordering + bincstates[(((uint64_t)bits) << 56) | counter] = state; + } + + if ((counter & 0xffffffffull) == 0) { + printf("%02.1f%%.", ((float)100 / 8) * (counter >> 32)); + fflush(stdout); + } + } + + printf("100%%\n"); + + // Clear the candidate state vector + pcstates->clear(); + + // Copy the order the states from lowest-bin to highest-bin + for (it = bincstates.begin(); it != bincstates.end(); ++it) { + pcstates->push_back(it->second); + } + // Reverse the vector order (so the higest bin comes first) + reverse(pcstates->begin(), pcstates->end()); +} + +static inline void search_gc_candidates_left(const uint64_t lstate_before_gc, const uint8_t *Q, vector *pcstates) { + vector csl_cand, csl_search; + vector::iterator itsearch, itcand; + map matchbox; + map::iterator itmatch; uint64_t lstate; size_t counter; // Generate 2^20 different (5 bits) values for the first 4 Gc bytes (0,1,2,3) - for (counter=0; counter < 0x100000; counter++) { + for (counter = 0; counter < 0x100000; counter++) { lstate = lstate_before_gc; next_left_fast((counter >> 15) & 0x1f, &lstate); next_left_fast((counter >> 10) & 0x1f, &lstate); @@ -872,9 +872,9 @@ static inline void search_gc_candidates_left(const uint64_t lstate_before_gc, co previous_all_input(&csl_search, 4, CSS_LEFT); // Take the intersection of the corresponding states ~2^15 values (40-25 = 15 bits) - for(itsearch = csl_search.begin(); itsearch != csl_search.end(); ++itsearch) { + for (itsearch = csl_search.begin(); itsearch != csl_search.end(); ++itsearch) { itmatch = matchbox.find(itsearch->l); - if (itmatch != matchbox.end()){ + if (itmatch != matchbox.end()) { itsearch->Gc[0] = (itmatch->second >> 15) & 0x1f; itsearch->Gc[1] = (itmatch->second >> 10) & 0x1f; itsearch->Gc[2] = (itmatch->second >> 5) & 0x1f; @@ -889,14 +889,14 @@ static inline void search_gc_candidates_left(const uint64_t lstate_before_gc, co printf("\n"); } -void combine_valid_left_right_states(vector* plcstates, vector* prcstates, vector* pgc_candidates) { +void combine_valid_left_right_states(vector *plcstates, vector *prcstates, vector *pgc_candidates) { vector::iterator itl, itr; - size_t pos,count; + size_t pos, count; uint64_t gc; bool valid; vector outer, inner; - if ( plcstates->size() > prcstates->size()) { + if (plcstates->size() > prcstates->size()) { outer = *plcstates; inner = *prcstates; } else { @@ -909,8 +909,8 @@ void combine_valid_left_right_states(vector* plcstates, vector* prcs // Clean up the candidate list pgc_candidates->clear(); count = 0; - for( itl = outer.begin(); itl != outer.end(); ++itl) { - for(itr = inner.begin(); itr != inner.end(); ++itr) { + for (itl = outer.begin(); itl != outer.end(); ++itl) { + for (itr = inner.begin(); itr != inner.end(); ++itr) { valid = true; // Check for left and right candidates that share the overlapping bits (8 x 2bits of Gc) for (pos = 0; pos < 8; pos++) { @@ -932,26 +932,26 @@ void combine_valid_left_right_states(vector* plcstates, vector* prcs count++; } } - printf("Found a total of " _YELLOW_("%llu")" combinations, ",((unsigned long long)plcstates->size()) * prcstates->size()); + printf("Found a total of " _YELLOW_("%llu")" combinations, ", ((unsigned long long)plcstates->size()) * prcstates->size()); printf("but only " _GREEN_("%lu")" were valid!\n", pgc_candidates->size()); } static void ice_compare( - uint8_t offset, - uint8_t skips, - vector* candidates, - crypto_state_t* ostate, - uint8_t *Ci, - uint8_t *Q, - uint8_t *Ch, - uint8_t *Ci_1 - ) { + uint8_t offset, + uint8_t skips, + vector *candidates, + crypto_state_t *ostate, + uint8_t *Ci, + uint8_t *Q, + uint8_t *Ch, + uint8_t *Ci_1 +) { uint8_t Gc_chk[8]; - uint8_t Ch_chk[ 8]; + uint8_t Ch_chk[ 8]; uint8_t Ci_1_chk[ 8]; for (std::size_t i = offset; i < candidates->size(); i += skips) { - if (key_found.load(std::memory_order_relaxed)) + if (key_found.load(std::memory_order_relaxed)) break; uint64_t tkey = candidates->at(i); @@ -968,7 +968,7 @@ static void ice_compare( } -int main(int argc, const char* argv[]) { +int main(int argc, const char *argv[]) { size_t pos; crypto_state_t ostate; uint64_t rstate_before_gc, rstate_after_gc; @@ -984,7 +984,7 @@ int main(int argc, const char* argv[]) { // uint8_t Gc[ 8] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; // uint8_t Ci[ 8] = {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff}; // uint8_t Q[ 8] = {0x12,0x34,0x56,0x78,0x12,0x34,0x56,0x78}; - uint8_t Gc[ 8]; + uint8_t Gc[ 8]; uint8_t Ci[ 8]; uint8_t Q[ 8]; uint8_t Ch[ 8]; @@ -1015,32 +1015,42 @@ int main(int argc, const char* argv[]) { if (argc == 2) { // Generate random values for the key and randoms srand((uint32_t)time(NULL)); - for (pos = 0; pos<8; pos++) { + for (pos = 0; pos < 8; pos++) { Gc[pos] = rand(); Ci[pos] = rand(); Q[pos] = rand(); } - sm_auth(Gc,Ci,Q,Ch,Ci_1,&ostate); - printf(" Gc: "); print_bytes(Gc,8); + sm_auth(Gc, Ci, Q, Ch, Ci_1, &ostate); + printf(" Gc: "); + print_bytes(Gc, 8); } else { - sscanf(argv[1],"%016" SCNx64,&nCi); num_to_bytes(nCi,8,Ci); - sscanf(argv[2],"%016" SCNx64,&nQ); num_to_bytes(nQ,8,Q); - sscanf(argv[3],"%016" SCNx64,&nCh); num_to_bytes(nCh,8,Ch); - sscanf(argv[4],"%016" SCNx64,&nCi_1); num_to_bytes(nCi_1,8,Ci_1); + sscanf(argv[1], "%016" SCNx64, &nCi); + num_to_bytes(nCi, 8, Ci); + sscanf(argv[2], "%016" SCNx64, &nQ); + num_to_bytes(nQ, 8, Q); + sscanf(argv[3], "%016" SCNx64, &nCh); + num_to_bytes(nCh, 8, Ch); + sscanf(argv[4], "%016" SCNx64, &nCi_1); + num_to_bytes(nCi_1, 8, Ci_1); printf(" Gc: unknown\n"); } - for (pos = 0; pos<8; pos++) { - ks[2*pos] = Ci_1[pos]; - ks[(2*pos)+1] = Ch[pos]; + for (pos = 0; pos < 8; pos++) { + ks[2 * pos] = Ci_1[pos]; + ks[(2 * pos) + 1] = Ch[pos]; } - printf(" Ci: "); print_bytes(Ci,8); - printf(" Q: "); print_bytes(Q,8); - printf(" Ch: "); print_bytes(Ch,8); - printf("Ci+1: "); print_bytes(Ci_1,8); + printf(" Ci: "); + print_bytes(Ci, 8); + printf(" Q: "); + print_bytes(Q, 8); + printf(" Ch: "); + print_bytes(Ch, 8); + printf("Ci+1: "); + print_bytes(Ci_1, 8); printf("\n"); - printf(" Ks: "); print_bytes(ks,16); + printf(" Ks: "); + print_bytes(ks, 16); printf("\n"); printf("\nMultithreaded, will use " _YELLOW_("%u") " threads\n", g_num_cpus); @@ -1061,17 +1071,17 @@ int main(int argc, const char* argv[]) { lstate_before_gc = 0; for (pos = 0; pos < 4; pos++) { - next_right_fast(Ci[2*pos ], &rstate_before_gc); - next_right_fast(Ci[2*pos+1], &rstate_before_gc); + next_right_fast(Ci[2 * pos ], &rstate_before_gc); + next_right_fast(Ci[2 * pos + 1], &rstate_before_gc); next_right_fast(Q[pos], &rstate_before_gc); - next_left_fast(Ci[2*pos ], &lstate_before_gc); - next_left_fast(Ci[2*pos+1], &lstate_before_gc); + next_left_fast(Ci[2 * pos ], &lstate_before_gc); + next_left_fast(Ci[2 * pos + 1], &lstate_before_gc); next_left_fast(Q[pos], &lstate_before_gc); } printf("Determing the right states that correspond to the keystream\n"); - //rbits = sm_right(ks, mask, &rstates); + //rbits = sm_right(ks, mask, &rstates); rbits = ice_sm_right(ks, mask, &rstates); printf("Top-bin for the right state contains " _GREEN_("%d")" correct bits\n", rbits); @@ -1080,7 +1090,7 @@ int main(int argc, const char* argv[]) { if (rbits < 96) { printf(_RED_("\n WARNING!!! Better find another trace, the right top-bin is < 96 bits\n\n")); } - + for (itrstates = rstates.begin(); itrstates != rstates.end(); ++itrstates) { rstate_after_gc = *itrstates; sm_left_mask(ks, mask, rstate_after_gc); @@ -1097,8 +1107,8 @@ int main(int argc, const char* argv[]) { printf("Found a total of " _YELLOW_("%lu")" left cipher states, recovering left candidates...\n", clstates.size()); if (clstates.size() == 0) continue; search_gc_candidates_left(lstate_before_gc, Q, &clstates); - - + + printf("The meet-in-the-middle attack returned " _YELLOW_("%lu")" left cipher candidates\n", clstates.size()); if (clstates.size() == 0) continue; @@ -1106,16 +1116,16 @@ int main(int argc, const char* argv[]) { combine_valid_left_right_states(&clstates, &crstates, &pgc_candidates); printf("Filtering the correct one using the middle part\n"); - + key_found = ATOMIC_VAR_INIT(false); std::vector threads(g_num_cpus); for (uint8_t m = 0; m < g_num_cpus; m++) { - threads[m] = std::thread( ice_compare, m, g_num_cpus, &pgc_candidates, &ostate, ref(Ci), ref(Q), ref(Ch), ref(Ci_1) ); + threads[m] = std::thread(ice_compare, m, g_num_cpus, &pgc_candidates, &ostate, ref(Ci), ref(Q), ref(Ch), ref(Ci_1)); } - for (auto& t : threads) { + for (auto &t : threads) { t.join(); } @@ -1123,7 +1133,7 @@ int main(int argc, const char* argv[]) { printf("\nFound valid key: " _GREEN_("%016lX")"\n\n", key.load()); break; } - + printf(_RED_("\nCould not find key using this right cipher state.\n\n")); } return 0; diff --git a/tools/cryptorf/util.c b/tools/cryptorf/util.c index 081fb43cf..81db9f6ef 100644 --- a/tools/cryptorf/util.c +++ b/tools/cryptorf/util.c @@ -1,23 +1,21 @@ #include "util.h" #include -void num_to_bytes(uint64_t n, size_t len, uint8_t *dst) -{ - while (len--) { - dst[len] = (uint8_t)n; - n >>= 8; - } +void num_to_bytes(uint64_t n, size_t len, uint8_t *dst) { + while (len--) { + dst[len] = (uint8_t)n; + n >>= 8; + } } -void print_bytes(const uint8_t *pbtData, const size_t szLen) -{ - size_t uiPos; - for (uiPos = 0; uiPos < szLen; uiPos++) { - printf("%02x ", pbtData[uiPos]); - if (uiPos > 20) { - printf("..."); - break; +void print_bytes(const uint8_t *pbtData, const size_t szLen) { + size_t uiPos; + for (uiPos = 0; uiPos < szLen; uiPos++) { + printf("%02x ", pbtData[uiPos]); + if (uiPos > 20) { + printf("..."); + break; + } } - } - printf("\n"); + printf("\n"); } From 33b2b1e8b9391fed3f191aab0dc0bed2296e9379 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 19 Aug 2020 22:37:37 +0200 Subject: [PATCH 0248/1047] test: reverse the "check reader mac" in iclass sim3 --- armsrc/iclass.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/armsrc/iclass.c b/armsrc/iclass.c index b543a268c..7f22b59cc 100644 --- a/armsrc/iclass.c +++ b/armsrc/iclass.c @@ -673,6 +673,7 @@ int do_iclass_simulation(int simulationMode, uint8_t *reader_mac_buf) { // NR, from reader, is in receivedCmd +1 opt_doTagMAC_2(*cipher_state, receivedCmd + 1, data_generic_trace, diversified_key); + /* uint8_t _mac[4] = {0}; opt_doReaderMAC_2(*cipher_state, receivedCmd + 1, _mac, diversified_key); @@ -688,6 +689,7 @@ int do_iclass_simulation(int simulationMode, uint8_t *reader_mac_buf) { goto send; } + */ trace_data = data_generic_trace; trace_data_size = 4; From 2c930064a32176467ab463bd4793911f3abd4a0b Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 19 Aug 2020 23:00:08 +0200 Subject: [PATCH 0249/1047] clean up and proper init --- tools/cryptorf/sma_multi.cpp | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/tools/cryptorf/sma_multi.cpp b/tools/cryptorf/sma_multi.cpp index 5c64ceeb0..3623d3c80 100644 --- a/tools/cryptorf/sma_multi.cpp +++ b/tools/cryptorf/sma_multi.cpp @@ -375,7 +375,6 @@ std::atomic topbits{0}; std::mutex g_ice_mtx; uint32_t g_num_cpus = std::thread::hardware_concurrency(); - static void ice_sm_right_thread( uint8_t offset, uint8_t skips, @@ -450,7 +449,6 @@ static void ice_sm_right_thread( } static uint32_t ice_sm_right(const uint8_t *ks, uint8_t *mask, vector *pcrstates) { - uint32_t g_num_cpus = std::thread::hardware_concurrency(); map bincstates; topbits = ATOMIC_VAR_INIT(0); @@ -497,7 +495,6 @@ static void ice_sm_left_thread( memset(&state, 0x00, sizeof(cs_t)); state.invalid = false; - for (uint64_t counter = offset; counter < 0x800000000ull; counter += skips) { uint64_t lstate = counter; @@ -567,8 +564,6 @@ static void ice_sm_left_thread( static void ice_sm_left(const uint8_t *ks, uint8_t *mask, vector *pcstates) { - uint32_t g_num_cpus = std::thread::hardware_concurrency(); - map bincstates; std::vector threads(g_num_cpus); for (uint8_t m = 0; m < g_num_cpus; m++) { @@ -967,7 +962,6 @@ static void ice_compare( return; } - int main(int argc, const char *argv[]) { size_t pos; crypto_state_t ostate; @@ -1119,7 +1113,7 @@ int main(int argc, const char *argv[]) { key_found = ATOMIC_VAR_INIT(false); - + key = ATOMIC_VAR_INIT(0); std::vector threads(g_num_cpus); for (uint8_t m = 0; m < g_num_cpus; m++) { threads[m] = std::thread(ice_compare, m, g_num_cpus, &pgc_candidates, &ostate, ref(Ci), ref(Q), ref(Ch), ref(Ci_1)); From 113ca294a1d4dd395aa2d3bf3b142d60afac7d13 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 20 Aug 2020 10:41:00 +0200 Subject: [PATCH 0250/1047] lock --- tools/cryptorf/sma_multi.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tools/cryptorf/sma_multi.cpp b/tools/cryptorf/sma_multi.cpp index 3623d3c80..390c98495 100644 --- a/tools/cryptorf/sma_multi.cpp +++ b/tools/cryptorf/sma_multi.cpp @@ -373,7 +373,7 @@ std::atomic key_found{0}; std::atomic key{0}; std::atomic topbits{0}; std::mutex g_ice_mtx; -uint32_t g_num_cpus = std::thread::hardware_concurrency(); +static uint32_t g_num_cpus = std::thread::hardware_concurrency(); static void ice_sm_right_thread( uint8_t offset, @@ -954,8 +954,10 @@ static void ice_compare( sm_auth(Gc_chk, Ci, Q, Ch_chk, Ci_1_chk, ostate); if ((memcmp(Ch_chk, Ch, 8) == 0) && (memcmp(Ci_1_chk, Ci_1, 8) == 0)) { + g_ice_mtx.lock(); key_found = true; key = tkey; + g_ice_mtx.unlock(); break; } } From 8d97698bd542d68c46b52ab60b721b183578b171 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Thu, 20 Aug 2020 20:59:17 +0200 Subject: [PATCH 0251/1047] remove files committed by error --- common/cryptorf/cryptolib_baloncu.c | 222 ---------------------------- common/cryptorf/cryptolib_baloncu.h | 41 ----- 2 files changed, 263 deletions(-) delete mode 100644 common/cryptorf/cryptolib_baloncu.c delete mode 100644 common/cryptorf/cryptolib_baloncu.h diff --git a/common/cryptorf/cryptolib_baloncu.c b/common/cryptorf/cryptolib_baloncu.c deleted file mode 100644 index 6a69250d3..000000000 --- a/common/cryptorf/cryptolib_baloncu.c +++ /dev/null @@ -1,222 +0,0 @@ -#include "cryptolib.h" - -static byte_t rotate5_lut[] = {0x00, 0x02, 0x04, 0x06, 0x08, 0x0a, 0x0c, 0x0e, 0x10, 0x12, 0x14, 0x16, 0x18, 0x1a, 0x1c, 0x1e, 0x01, 0x03, 0x05, 0x07, 0x09, 0x0b, 0x0d, 0x0f, 0x11, 0x13, 0x15, 0x17, 0x19, 0x1b, 0x1d, 0x1f, 0x02, 0x02, 0x06, 0x06, 0x0a, 0x0a, 0x0e, 0x0e, 0x12, 0x12, 0x16, 0x16, 0x1a, 0x1a, 0x1e, 0x1e, 0x03, 0x03, 0x07, 0x07, 0x0b, 0x0b, 0x0f, 0x0f, 0x13, 0x13, 0x17, 0x17, 0x1b, 0x1b, 0x1f, 0x1f, 0x04, 0x06, 0x04, 0x06, 0x0c, 0x0e, 0x0c, 0x0e, 0x14, 0x16, 0x14, 0x16, 0x1c, 0x1e, 0x1c, 0x1e, 0x05, 0x07, 0x05, 0x07, 0x0d, 0x0f, 0x0d, 0x0f, 0x15, 0x17, 0x15, 0x17, 0x1d, 0x1f, 0x1d, 0x1f, 0x06, 0x06, 0x06, 0x06, 0x0e, 0x0e, 0x0e, 0x0e, 0x16, 0x16, 0x16, 0x16, 0x1e, 0x1e, 0x1e, 0x1e, 0x07, 0x07, 0x07, 0x07, 0x0f, 0x0f, 0x0f, 0x0f, 0x17, 0x17, 0x17, 0x17, 0x1f, 0x1f, 0x1f, 0x1f, 0x08, 0x0a, 0x0c, 0x0e, 0x08, 0x0a, 0x0c, 0x0e, 0x18, 0x1a, 0x1c, 0x1e, 0x18, 0x1a, 0x1c, 0x1e, 0x09, 0x0b, 0x0d, 0x0f, 0x09, 0x0b, 0x0d, 0x0f, 0x19, 0x1b, 0x1d, 0x1f, 0x19, 0x1b, 0x1d, 0x1f, 0x0a, 0x0a, 0x0e, 0x0e, 0x0a, 0x0a, 0x0e, 0x0e, 0x1a, 0x1a, 0x1e, 0x1e, 0x1a, 0x1a, 0x1e, 0x1e, 0x0b, 0x0b, 0x0f, 0x0f, 0x0b, 0x0b, 0x0f, 0x0f, 0x1b, 0x1b, 0x1f, 0x1f, 0x1b, 0x1b, 0x1f, 0x1f, 0x0c, 0x0e, 0x0c, 0x0e, 0x0c, 0x0e, 0x0c, 0x0e, 0x1c, 0x1e, 0x1c, 0x1e, 0x1c, 0x1e, 0x1c, 0x1e, 0x0d, 0x0f, 0x0d, 0x0f, 0x0d, 0x0f, 0x0d, 0x0f, 0x1d, 0x1f, 0x1d, 0x1f, 0x1d, 0x1f, 0x1d, 0x1f, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f}; - -static byte_t rotate7_lut[] = {0x00, 0x02, 0x04, 0x06, 0x08, 0x0a, 0x0c, 0x0e, 0x10, 0x12, 0x14, 0x16, 0x18, 0x1a, 0x1c, 0x1e, 0x20, 0x22, 0x24, 0x26, 0x28, 0x2a, 0x2c, 0x2e, 0x30, 0x32, 0x34, 0x36, 0x38, 0x3a, 0x3c, 0x3e, 0x40, 0x42, 0x44, 0x46, 0x48, 0x4a, 0x4c, 0x4e, 0x50, 0x52, 0x54, 0x56, 0x58, 0x5a, 0x5c, 0x5e, 0x60, 0x62, 0x64, 0x66, 0x68, 0x6a, 0x6c, 0x6e, 0x70, 0x72, 0x74, 0x76, 0x78, 0x7a, 0x7c, 0x7e, 0x01, 0x03, 0x05, 0x07, 0x09, 0x0b, 0x0d, 0x0f, 0x11, 0x13, 0x15, 0x17, 0x19, 0x1b, 0x1d, 0x1f, 0x21, 0x23, 0x25, 0x27, 0x29, 0x2b, 0x2d, 0x2f, 0x31, 0x33, 0x35, 0x37, 0x39, 0x3b, 0x3d, 0x3f, 0x41, 0x43, 0x45, 0x47, 0x49, 0x4b, 0x4d, 0x4f, 0x51, 0x53, 0x55, 0x57, 0x59, 0x5b, 0x5d, 0x5f, 0x61, 0x63, 0x65, 0x67, 0x69, 0x6b, 0x6d, 0x6f, 0x71, 0x73, 0x75, 0x77, 0x79, 0x7b, 0x7d, 0x7f, 0x02, 0x02, 0x06, 0x06, 0x0a, 0x0a, 0x0e, 0x0e, 0x12, 0x12, 0x16, 0x16, 0x1a, 0x1a, 0x1e, 0x1e, 0x22, 0x22, 0x26, 0x26, 0x2a, 0x2a, 0x2e, 0x2e, 0x32, 0x32, 0x36, 0x36, 0x3a, 0x3a, 0x3e, 0x3e, 0x42, 0x42, 0x46, 0x46, 0x4a, 0x4a, 0x4e, 0x4e, 0x52, 0x52, 0x56, 0x56, 0x5a, 0x5a, 0x5e, 0x5e, 0x62, 0x62, 0x66, 0x66, 0x6a, 0x6a, 0x6e, 0x6e, 0x72, 0x72, 0x76, 0x76, 0x7a, 0x7a, 0x7e, 0x7e, 0x03, 0x03, 0x07, 0x07, 0x0b, 0x0b, 0x0f, 0x0f, 0x13, 0x13, 0x17, 0x17, 0x1b, 0x1b, 0x1f, 0x1f, 0x23, 0x23, 0x27, 0x27, 0x2b, 0x2b, 0x2f, 0x2f, 0x33, 0x33, 0x37, 0x37, 0x3b, 0x3b, 0x3f, 0x3f, 0x43, 0x43, 0x47, 0x47, 0x4b, 0x4b, 0x4f, 0x4f, 0x53, 0x53, 0x57, 0x57, 0x5b, 0x5b, 0x5f, 0x5f, 0x63, 0x63, 0x67, 0x67, 0x6b, 0x6b, 0x6f, 0x6f, 0x73, 0x73, 0x77, 0x77, 0x7b, 0x7b, 0x7f, 0x7f}; - -static byte_t funny_mod1f_lut[] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07}; - -static byte_t funny_mod7f_lut[] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x01}; - - -typedef enum { - CA_ENCRYPT = 0x01, - CA_DECRYPT = 0x02 -} CryptoAction; - -int counter = 0; - -byte_t nibbles_to_byte(nibble b0, nibble b1) { - // Combine both nibbles - return ((b0 << 4) | b1); -} - -byte_t funny_mod(byte_t a, byte_t m) { - // Just return the input when this is less or equal than the modular value - if (a < m) return a; - - // Compute the modular value - a %= m; - - // Return the funny value, when the output was now zero, return the modular value - return (a == 0) ? m : a; -} - -byte_t bit_rotate_left(byte_t a, byte_t n_bits) { - // Rotate value a with the length of n_bits only 1 time - byte_t mask = (1 << n_bits) - 1; - return ((a << 1) | (a >> (n_bits - 1))) & mask; -} - -//meltem changed this function to make it perform faster -//to get a better idea of the algorithm check out cryptorf inside the tools directory -void RAMFUNC next(size_t repeat, byte_t in, crypto_state s) { - size_t i = repeat; - byte_t a; - byte_t *cipher_p; - do { - // Construct the cipher update 'a' from (input ^ feedback) - a = in ^ ((s->b0 << 4) | s->b1); - - // Shift the cipher state - //left - cipher_p = (byte_t *) &s->l; - cipher_p[5] = cipher_p[5] ^ (a & 0x1f); - s->l = (s->l >> 8); - cipher_p[7] = funny_mod1f_lut[cipher_p[3] + rotate5_lut[cipher_p[0]]]; - s->b1l = cipher_p[7] ^ cipher_p[3]; - - //middle - cipher_p = (byte_t *) &s->m; - cipher_p[3] = cipher_p[3] ^ ((a << 3) | (a >> 5)); - s->m = (s->m >> 8); - cipher_p[7] = funny_mod7f_lut[(cipher_p[1] & 0x7f) + rotate7_lut[(cipher_p[0] & 0x7f)]]; - s->b1s = cipher_p[7] & 0x0f; - - //right - cipher_p = (byte_t *) &s->r; - cipher_p[6] = cipher_p[6] ^ (a >> 3); - s->r = (s->r >> 8); - cipher_p[7] = funny_mod1f_lut[cipher_p[4] + cipher_p[2]]; - s->b1r = cipher_p[7] ^ cipher_p[4]; - - - // The nible from b1 shifts to b0 - s->b0 = s->b1; - - // Construct the new value of nible b1 - s->b1 = (s->b1l & 0x0f) & ~(s->b1s); - s->b1 |= s->b1r & s->b1s; - } while (--i); -} - -void next_n(size_t n, byte_t in, crypto_state s) { - // While n-rounds left, shift the cipher - while (n--) next(1, in, s); -} - -void initialize(const byte_t *Gc, const byte_t *Ci, const byte_t *Q, const size_t n, crypto_state s) { - size_t pos; - - // Reset the cipher state - memset(s, 0x00, sizeof(crypto_state_t)); - - // Load in the ci (tag-nonce), together with the first half of Q (reader-nonce) - for (pos = 0; pos < 4; pos++) { - next(n, Ci[2 * pos ], s); - next(n, Ci[2 * pos + 1], s); - next(1, Q[pos], s); - } - - // Load in the diversified key (Gc), together with the second half of Q (reader-nonce) - for (pos = 0; pos < 4; pos++) { - next(n, Gc[2 * pos ], s); - next(n, Gc[2 * pos + 1], s); - next(1, Q[pos + 4], s); - } -} - -byte_t cm_byte(crypto_state s) { - // Construct keystream byte by combining both nibbles - return nibbles_to_byte(s->b0, s->b1); -} - -void print_crypto_state(const char *text, crypto_state s) { - int pos; - - printf("%s", text); - for (pos = 6; pos >= 0; pos--) - printf(" %02x", (byte_t)(s->l >> (pos * 5)) & 0x1f); - printf(" |"); - for (pos = 6; pos >= 0; pos--) - printf(" %02x", (byte_t)(s->m >> (pos * 7)) & 0x7f); - printf(" |"); - for (pos = 4; pos >= 0; pos--) - printf(" %02x", (byte_t)(s->r >> (pos * 5)) & 0x1f); - - printf(" | %02x", cm_byte(s)); - printf("\n"); -} - -void cm_auth(const byte_t *Gc, const byte_t *Ci, const byte_t *Q, byte_t *Ch, byte_t *Ci_1, byte_t *Ci_2, crypto_state s) { - size_t pos; - - initialize(Gc, Ci, Q, 3, s); - - // Construct the reader-answer (challange) - next(6, 0, s); - Ch[0] = cm_byte(s); - for (pos = 1; pos < 8; pos++) { - next(7, 0, s); - Ch [pos] = cm_byte(s); - } - - // Construct the tag-answer (Ci+1 = ff .. .. .. .. .. .. ..) - Ci_1[0] = 0xff; - for (pos = 1; pos < 8; pos++) { - next(2, 0, s); - Ci_1[pos] = cm_byte(s); - } - - // Construct the session key (Ci+2) - for (pos = 0; pos < 8; pos++) { - next(2, 0, s); - Ci_2[pos] = cm_byte(s); - } - - // Prepare the cipher for encryption by shifting 3 more times - next(3, 0, s); -} - -void cm_crypt(const CryptoAction ca, const byte_t offset, const byte_t len, const byte_t *in, byte_t *out, crypto_state s) { - size_t pos; - byte_t bt; - - next(5, 0, s); - next(1, offset, s); - next(5, 0, s); - next(1, len, s); - for (pos = 0; pos < len; pos++) { - // Perform the crypto operation - bt = in[pos] ^ cm_byte(s); - - // Generate output - if (out) out[pos] = bt; - - // Detect where to find the plaintext for loading into cipher state - if (ca == CA_DECRYPT) { - next(1, bt, s); - } else { - next(1, in[pos], s); - } - - // Shift the cipher state 5 times - next(5, 0, s); - } -} - -void cm_encrypt(const byte_t offset, const byte_t len, const byte_t *ct, byte_t *pt, crypto_state s) { - next(5, 0, s); - next(1, 0, s); - cm_crypt(CA_ENCRYPT, offset, len, ct, pt, s); -} - -void cm_decrypt(const byte_t offset, const byte_t len, const byte_t *ct, byte_t *pt, crypto_state s) { - next(5, 0, s); - next(1, 0, s); - cm_crypt(CA_DECRYPT, offset, len, ct, pt, s); -} - -void cm_grind_read_system_zone(const byte_t offset, const byte_t len, const byte_t *pt, crypto_state s) { - cm_crypt(CA_ENCRYPT, offset, len, pt, null, s); -} - -void cm_grind_set_user_zone(const byte_t zone, crypto_state s) { - next(1, zone, s); -} - -void cm_mac(byte_t *mac, crypto_state s) { - next(10, 0, s); - if (mac) mac[0] = cm_byte(s); - next(5, 0, s); - if (mac) mac[1] = cm_byte(s); -} - -void cm_password(const byte_t *pt, byte_t *ct, crypto_state s) { - size_t pos; - - for (pos = 0; pos < 3; pos++) { - next(5, pt[pos], s); - ct[pos] = cm_byte(s); - } -} diff --git a/common/cryptorf/cryptolib_baloncu.h b/common/cryptorf/cryptolib_baloncu.h deleted file mode 100644 index 3140b564c..000000000 --- a/common/cryptorf/cryptolib_baloncu.h +++ /dev/null @@ -1,41 +0,0 @@ -#ifndef _CRYPTOLIB_H_ -#define _CRYPTOLIB_H_ - -#include -#include -#include -#include -#include -#include - -#define null 0 - -typedef unsigned char byte_t; -typedef long long unsigned int ui64; - -// A nibble is actually only 4 bits, but there is no such type ;) -typedef byte_t nibble; - -typedef struct { - uint64_t l; - uint64_t m; - uint64_t r; - nibble b0; - nibble b1; - nibble b1l; - nibble b1r; - nibble b1s; -} crypto_state_t; -typedef crypto_state_t *crypto_state; - -void print_crypto_state(const char *text, crypto_state s); -void cm_auth(const byte_t *Gc, const byte_t *Ci, const byte_t *Q, byte_t *Ch, byte_t *Ci_1, byte_t *Ci_2, crypto_state s); -void cm_encrypt(const byte_t offset, const byte_t len, const byte_t *pt, byte_t *ct, crypto_state s); -void cm_decrypt(const byte_t offset, const byte_t len, const byte_t *ct, byte_t *pt, crypto_state s); -void cm_grind_read_system_zone(const byte_t offset, const byte_t len, const byte_t *pt, crypto_state s); -void cm_grind_set_user_zone(const byte_t zone, crypto_state s); -void cm_mac(byte_t *mac, crypto_state s); -void cm_password(const byte_t *pt, byte_t *ct, crypto_state s); -void RAMFUNC next(size_t repeat, byte_t in, crypto_state s); - -#endif // _CRYPTOLIB_H_ From e3767a3e284b2f7b9b804cf1cb34475896ade807 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Fri, 21 Aug 2020 14:10:32 +0200 Subject: [PATCH 0252/1047] lf t55 chk m (works again!). lf t55 config (prints correct pwd if used) --- armsrc/lfops.c | 84 ++++++++++++++++++++++------------------- client/src/cmdlft55xx.c | 69 ++++++++++++++++----------------- client/src/cmdlft55xx.h | 3 +- 3 files changed, 80 insertions(+), 76 deletions(-) diff --git a/armsrc/lfops.c b/armsrc/lfops.c index 612458c9b..fe502a87d 100644 --- a/armsrc/lfops.c +++ b/armsrc/lfops.c @@ -2010,13 +2010,12 @@ void T55xxReadBlock(uint8_t page, bool pwd_mode, bool brute_mem, uint8_t block, flags |= (downlink_mode & 3) << 3; if (brute_mem) flags |= 0x0100; -// T55xxReadBlockExt (flags,block,pwd); + size_t samples = 12000; - // bool brute_mem = (flags & 0x0100) >> 8; LED_A_ON(); - if (brute_mem) samples = 1024; + if (brute_mem) samples = 2048; //-- Set Read Flag to ensure SendCMD does not add "data" to the packet //-- flags |= 0x40; @@ -2044,44 +2043,56 @@ void T55xxReadBlock(uint8_t page, bool pwd_mode, bool brute_mem, uint8_t block, DoPartialAcquisition(0, false, samples, 0); // Turn the field off - if (!brute_mem) { + if (brute_mem == false) { FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); reply_ng(CMD_LF_T55XX_READBL, PM3_SUCCESS, NULL, 0); LED_A_OFF(); } - } + void T55xx_ChkPwds(uint8_t flags) { - DbpString("[+] T55XX Check pwds using flashmemory starting"); +#define CHK_SAMPLES_SIGNAL 2048 + +#ifdef WITH_FLASH + DbpString(_CYAN_("T55XX Check pwds using flashmemory starting")); +#else + DbpString(_CYAN_("T55XX Check pwds starting")); +#endif // First get baseline and setup LF mode. - // tends to mess up BigBuf uint8_t *buf = BigBuf_get_addr(); - uint8_t ret = 0; uint8_t downlink_mode = (flags >> 3) & 0x03; - uint32_t b1, baseline = 0; + uint64_t b1, baseline_faulty = 0; - // collect baseline for failed attempt + DbpString("Determine baseline..."); + + // collect baseline for failed attempt ( should give me block1 ) uint8_t x = 32; while (x--) { b1 = 0; - T55xxReadBlock(0, 0, true, 1, 0, downlink_mode); - for (uint16_t j = 0; j < 1024; ++j) + T55xxReadBlock(0, 0, true, 0, 0, downlink_mode); + for (uint16_t j = 0; j < CHK_SAMPLES_SIGNAL; ++j) { b1 += buf[j]; - + } b1 *= b1; b1 >>= 8; - baseline += b1; + baseline_faulty += b1; } - - baseline >>= 5; - Dbprintf("[=] Baseline determined [%u]", baseline); + baseline_faulty >>= 5; uint8_t *pwds = BigBuf_get_EM_addr(); uint16_t pwd_count = 0; - uint32_t candidate = 0; + + struct p { + bool found; + uint32_t candidate; + } PACKED payload; + + payload.found = false; + payload.candidate = 0; + #ifdef WITH_FLASH BigBuf_Clear_EM(); @@ -2107,48 +2118,45 @@ void T55xx_ChkPwds(uint8_t flags) { if (isok != pwd_size_available) goto OUT; - Dbprintf("[=] Password dictionary count %d ", pwd_count); + Dbprintf("Password dictionary count " _YELLOW_("%d"), pwd_count); + #endif - uint32_t pwd = 0, curr = 0, prev = 0; - for (uint16_t i = 0; i < pwd_count; ++i) { + uint64_t curr = 0, prev = 0; + int32_t idx = -1; - if (BUTTON_PRESS() && !data_available()) { - goto OUT; - } + for (uint32_t i = 0; i < pwd_count; i++) { - pwd = bytes_to_num(pwds + i * 4, 4); + uint32_t pwd = bytes_to_num(pwds + (i * 4), 4); T55xxReadBlock(0, true, true, 0, pwd, downlink_mode); - // calc mean of BigBuf 1024 samples. - uint32_t sum = 0; - for (uint16_t j = 0; j < 1024; ++j) { + uint64_t sum = 0; + for (uint16_t j = 0; j < CHK_SAMPLES_SIGNAL; ++j) { sum += buf[j]; } - sum *= sum; sum >>= 8; - int32_t tmp = (sum - baseline); - curr = ABS(tmp); - - Dbprintf("[=] Pwd %08X | ABS %u", pwd, curr); + int64_t tmp_dist = (baseline_faulty - sum); + curr = ABS(tmp_dist); if (curr > prev) { - Dbprintf("[=] --> ABS %u Candidate %08X <--", curr, pwd); - candidate = pwd; + idx = i; prev = curr; } } - if (candidate) - ret = 1; + if (idx != -1) { + payload.found = true; + payload.candidate = bytes_to_num(pwds + (idx * 4), 4); + } OUT: FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); - reply_mix(CMD_ACK, ret, candidate, 0, 0, 0); LEDsoff(); + reply_ng(CMD_LF_T55XX_CHK_PWDS, PM3_SUCCESS, (uint8_t*)&payload, sizeof(payload)); + BigBuf_free(); } void T55xxWakeUp(uint32_t pwd, uint8_t flags) { diff --git a/client/src/cmdlft55xx.c b/client/src/cmdlft55xx.c index e9fad9b9d..bfa8e12db 100644 --- a/client/src/cmdlft55xx.c +++ b/client/src/cmdlft55xx.c @@ -575,18 +575,11 @@ bool t55xxAquireAndDetect(bool usepwd, uint32_t password, uint32_t known_block0, if (verbose) PrintAndLogEx(INFO, "Block0 write detected, running `detect` to see if validation is possible"); - // Update flags for usepwd pwd assume its correct - config.usepwd = usepwd; - if (usepwd) - config.pwd = password; - else - config.pwd = 0x00; - for (uint8_t m = 0; m < 4; m++) { if (AcquireData(T55x7_PAGE0, T55x7_CONFIGURATION_BLOCK, usepwd, password, m) == false) continue; - if (tryDetectModulationEx(m, verbose, known_block0) == false) + if (tryDetectModulationEx(m, verbose, known_block0, (usepwd) ? password : -1) == false) continue; config.downlink_mode = m; @@ -594,7 +587,6 @@ bool t55xxAquireAndDetect(bool usepwd, uint32_t password, uint32_t known_block0, } config.usepwd = false; // unknown so assume no password config.pwd = 0x00; - return false; } @@ -850,7 +842,7 @@ int T55xxReadBlockEx(uint8_t block, bool page1, bool usepwd, uint8_t override, u if (AcquireData(T55x7_PAGE0, T55x7_CONFIGURATION_BLOCK, false, 0, downlink_mode) == false) return PM3_ERFTRANS; - if (tryDetectModulation(downlink_mode, false) == false) { + if (tryDetectModulationEx(downlink_mode, false, 0, password) == false) { PrintAndLogEx(WARNING, "Safety check: Could not detect if PWD bit is set in config block. Exits."); return PM3_EWRONGANSWER; } else { @@ -1079,28 +1071,15 @@ static int CmdT55xxDetect(const char *Cmd) { if (AcquireData(T55x7_PAGE0, T55x7_CONFIGURATION_BLOCK, try_with_pwd && usepwd, password, m) == false) continue; - // pre fill to save passing in. - config.usepwd = try_with_pwd; - if (try_with_pwd) - config.pwd = password; - else - config.pwd = 0x00; - - if (tryDetectModulation(m, T55XX_PrintConfig) == false) + if (tryDetectModulationEx(m, T55XX_PrintConfig, 0, password) == false) continue; found = true; break; } } else { - config.usepwd = try_with_pwd; - if (try_with_pwd) - config.pwd = password; - else - config.pwd = 0x00; - if (AcquireData(T55x7_PAGE0, T55x7_CONFIGURATION_BLOCK, usepwd, password, downlink_mode)) { - found = tryDetectModulation(downlink_mode, T55XX_PrintConfig); + found = tryDetectModulationEx(downlink_mode, T55XX_PrintConfig, 0, password); } } @@ -1126,10 +1105,10 @@ static int CmdT55xxDetect(const char *Cmd) { // detect configuration? bool tryDetectModulation(uint8_t downlink_mode, bool print_config) { - return tryDetectModulationEx(downlink_mode, print_config, 0); + return tryDetectModulationEx(downlink_mode, print_config, 0, -1); } -bool tryDetectModulationEx(uint8_t downlink_mode, bool print_config, uint32_t wanted_conf) { +bool tryDetectModulationEx(uint8_t downlink_mode, bool print_config, uint32_t wanted_conf, uint64_t pwd) { t55xx_conf_block_t tests[15]; int bitRate = 0, clk = 0, firstClockEdge = 0; @@ -1301,6 +1280,10 @@ bool tryDetectModulationEx(uint8_t downlink_mode, bool print_config, uint32_t wa config.Q5 = tests[0].Q5; config.ST = tests[0].ST; config.downlink_mode = downlink_mode; + if (pwd != -1) { + config.usepwd = true; + config.pwd = pwd & 0xffffffff; + } if (print_config) printConfiguration(config); @@ -1328,6 +1311,11 @@ bool tryDetectModulationEx(uint8_t downlink_mode, bool print_config, uint32_t wa config.Q5 = tests[i].Q5; config.ST = tests[i].ST; config.downlink_mode = tests[i].downlink_mode; + + if (pwd != -1) { + config.usepwd = true; + config.pwd = pwd & 0xffffffff; + } } else { PrintAndLogEx(NORMAL, "--[%d]---------------", i + 1); } @@ -2553,8 +2541,10 @@ bool AcquireData(uint8_t page, uint8_t block, bool pwdmode, uint32_t password, u } getSamples(12000, false); + bool ok = !getSignalProperties()->isnoise; - return !getSignalProperties()->isnoise; + config.usepwd = pwdmode; + return ok; } char *GetPskCfStr(uint32_t id, bool q5) { @@ -3044,7 +3034,7 @@ static int CmdT55xxChkPwds(const char *Cmd) { SendCommandNG(CMD_LF_T55XX_CHK_PWDS, &flags, sizeof(flags)); PacketResponseNG resp; - while (!WaitForResponseTimeout(CMD_ACK, &resp, 2000)) { + while (!WaitForResponseTimeout(CMD_LF_T55XX_CHK_PWDS, &resp, 2000)) { timeout++; printf("."); fflush(stdout); @@ -3053,14 +3043,19 @@ static int CmdT55xxChkPwds(const char *Cmd) { return PM3_ENODATA; } } + struct p { + bool found; + uint32_t candidate; + } PACKED; + struct p* packet = (struct p*)resp.data.asBytes; - if (resp.oldarg[0]) { - PrintAndLogEx(SUCCESS, "\nFound a candidate [ " _YELLOW_("%08"PRIX64) " ]. Trying to validate", resp.oldarg[1]); + if (packet->found) { + PrintAndLogEx(SUCCESS, "\nFound a candidate [ " _YELLOW_("%08"PRIX64) " ]", packet->candidate); - if (AcquireData(T55x7_PAGE0, T55x7_CONFIGURATION_BLOCK, true, resp.oldarg[1], downlink_mode)) { - found = tryDetectModulation(downlink_mode, T55XX_PrintConfig); + if (AcquireData(T55x7_PAGE0, T55x7_CONFIGURATION_BLOCK, true, packet->candidate, downlink_mode)) { + found = tryDetectModulationEx(downlink_mode, T55XX_PrintConfig, 0, packet->candidate); if (found) { - PrintAndLogEx(SUCCESS, "Found valid password: [ " _GREEN_("%08"PRIX64) " ]", resp.oldarg[1]); + PrintAndLogEx(SUCCESS, "Found valid password [ " _GREEN_("%08"PRIX64) " ]", packet->candidate); } else { PrintAndLogEx(WARNING, "Check pwd failed"); @@ -3108,7 +3103,7 @@ static int CmdT55xxChkPwds(const char *Cmd) { continue; } - found = tryDetectModulation(dl_mode, T55XX_PrintConfig); + found = tryDetectModulationEx(dl_mode, T55XX_PrintConfig, 0, curr_password); if (found) { PrintAndLogEx(SUCCESS, "Found valid password: [ " _GREEN_("%08"PRIX64) " ]", curr_password); dl_mode = 4; // Exit other downlink mode checks @@ -3126,7 +3121,7 @@ static int CmdT55xxChkPwds(const char *Cmd) { out: t1 = msclock() - t1; - PrintAndLogEx(SUCCESS, "\nTime in check pwd: %.0f seconds\n", (float)t1 / 1000.0); + PrintAndLogEx(SUCCESS, "\nTime in check pwd " _YELLOW_("%.0f") " seconds\n", (float)t1 / 1000.0); return PM3_SUCCESS; } @@ -3225,7 +3220,7 @@ uint8_t tryOnePassword(uint32_t password, uint8_t downlink_mode) { if (AcquireData(T55x7_PAGE0, T55x7_CONFIGURATION_BLOCK, true, password, dl_mode)) { // if (getSignalProperties()->isnoise == false) { // } else { - if (tryDetectModulation(dl_mode, T55XX_PrintConfig)) { + if (tryDetectModulationEx(dl_mode, T55XX_PrintConfig, 0 ,password)) { return 1 + (dl_mode << 1); } // } diff --git a/client/src/cmdlft55xx.h b/client/src/cmdlft55xx.h index 46043d277..c710876cf 100644 --- a/client/src/cmdlft55xx.h +++ b/client/src/cmdlft55xx.h @@ -181,7 +181,8 @@ int t55xxWrite(uint8_t block, bool page1, bool usepwd, bool testMode, uint32_t p bool GetT55xxBlockData(uint32_t *blockdata); bool DecodeT55xxBlock(void); bool tryDetectModulation(uint8_t downlink_mode, bool print_config); -bool tryDetectModulationEx(uint8_t downlink_mode, bool print_config, uint32_t wanted_conf); +//bool tryDetectModulationEx(uint8_t downlink_mode, bool print_config, uint32_t wanted_conf); +bool tryDetectModulationEx(uint8_t downlink_mode, bool print_config, uint32_t wanted_conf, uint64_t pwd); bool testKnownConfigBlock(uint32_t block0); bool tryDetectP1(bool getData); From db9818abe48b4951637a94e8fa7fe8891c0cf539 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Fri, 21 Aug 2020 14:11:24 +0200 Subject: [PATCH 0253/1047] add ref for cryptorf which uses 14b crc --- common/crc16.c | 5 +++++ common/crc16.h | 1 + 2 files changed, 6 insertions(+) diff --git a/common/crc16.c b/common/crc16.c index b1c2ac248..9fea3d54a 100644 --- a/common/crc16.c +++ b/common/crc16.c @@ -31,6 +31,7 @@ void init_table(CrcType_t crctype) { case CRC_14443_B: case CRC_15693: case CRC_ICLASS: + case CRC_CRYPTORF: generate_table(CRC16_POLY_CCITT, true); break; case CRC_FELICA: @@ -171,6 +172,7 @@ void compute_crc(CrcType_t ct, const uint8_t *d, size_t n, uint8_t *first, uint8 case CRC_14443_A: crc = crc16_a(d, n); break; + case CRC_CRYPTORF: case CRC_14443_B: case CRC_15693: crc = crc16_x25(d, n); @@ -209,6 +211,7 @@ uint16_t Crc16ex(CrcType_t ct, const uint8_t *d, size_t n) { switch (ct) { case CRC_14443_A: return crc16_a(d, n); + case CRC_CRYPTORF: case CRC_14443_B: case CRC_15693: return crc16_x25(d, n); @@ -252,6 +255,7 @@ bool check_crc(CrcType_t ct, const uint8_t *d, size_t n) { switch (ct) { case CRC_14443_A: return (crc16_a(d, n) == 0); + case CRC_CRYPTORF: case CRC_14443_B: return (crc16_x25(d, n) == X25_CRC_CHECK); case CRC_15693: @@ -329,3 +333,4 @@ uint16_t crc16_legic(uint8_t const *d, size_t n, uint8_t uidcrc) { uint16_t initial = uidcrc << 8 | uidcrc; return crc16_fast(d, n, initial, true, true); } + diff --git a/common/crc16.h b/common/crc16.h index 7a273683c..8a726fcaf 100644 --- a/common/crc16.h +++ b/common/crc16.h @@ -29,6 +29,7 @@ typedef enum { CRC_CCITT, CRC_KERMIT, CRC_XMODEM, + CRC_CRYPTORF, } CrcType_t; uint16_t update_crc16_ex(uint16_t crc, uint8_t c, uint16_t polynomial); From d5a92a7c17a7dd55859442acde05fa24c6df0b8c Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Fri, 21 Aug 2020 14:13:26 +0200 Subject: [PATCH 0254/1047] update gitignore to skip tools/cryptorf executables --- .gitignore | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.gitignore b/.gitignore index 31f4e1595..db6ff9138 100644 --- a/.gitignore +++ b/.gitignore @@ -66,6 +66,10 @@ tools/fpga_compress/fpga_compress tools/mfkey/mfkey32 tools/mfkey/mfkey64 tools/nonce2key/nonce2key +tools/cryptorf/cm +tools/cryptorf/sm +tools/cryptorf/sma +tools/cryptorf/sma_multi fpga/* !fpga/tests From 0641ada091dbcf03e1992798bddf4c28bb358de6 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Fri, 21 Aug 2020 14:50:14 +0200 Subject: [PATCH 0255/1047] since t55xx chkpwd uses EM for pwd storage --- armsrc/lfsampling.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/armsrc/lfsampling.c b/armsrc/lfsampling.c index cd93e63d7..a1747fd03 100644 --- a/armsrc/lfsampling.c +++ b/armsrc/lfsampling.c @@ -127,7 +127,7 @@ void initSampleBufferEx(uint32_t *sample_size, bool use_malloc) { Dbprintf("initSampleBufferEx, param NULL"); return; } - BigBuf_free(); + BigBuf_free_keep_EM(); // We can't erase the buffer now, it would drastically delay the acquisition if (use_malloc) { From 832bdf7a668ae24ac2cc7c79fa1b3a2450902317 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Fri, 21 Aug 2020 15:47:19 +0200 Subject: [PATCH 0256/1047] guarding the OUT --- armsrc/lfops.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/armsrc/lfops.c b/armsrc/lfops.c index fe502a87d..7507e3441 100644 --- a/armsrc/lfops.c +++ b/armsrc/lfops.c @@ -2152,7 +2152,10 @@ void T55xx_ChkPwds(uint8_t flags) { payload.candidate = bytes_to_num(pwds + (idx * 4), 4); } +#ifdef WITH_FLASH OUT: +#endif + FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); LEDsoff(); reply_ng(CMD_LF_T55XX_CHK_PWDS, PM3_SUCCESS, (uint8_t*)&payload, sizeof(payload)); From fde22a3980a25ac89416d27dd4bd9295113b32b1 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Fri, 21 Aug 2020 16:47:18 +0200 Subject: [PATCH 0257/1047] textual --- client/src/cmdhficlass.c | 12 ++++-------- client/src/cmdhfmf.c | 10 +++++----- client/src/cmdlft55xx.c | 8 ++++---- 3 files changed, 13 insertions(+), 17 deletions(-) diff --git a/client/src/cmdhficlass.c b/client/src/cmdhficlass.c index c766769cb..4527d2dd5 100644 --- a/client/src/cmdhficlass.c +++ b/client/src/cmdhficlass.c @@ -2155,7 +2155,7 @@ static int CmdHFiClassRestore(const char *Cmd) { if (startblock < 5) { PrintAndLogEx(WARNING, "you cannot write key blocks this way. yet... make your start block > 4"); - return PM3_EINVARG; + return PM3_EINVARG; } int total_bytes = (((endblock - startblock) + 1) * 12); @@ -3115,11 +3115,7 @@ static int CmdHFiClassCheckKeys(const char *Cmd) { break; } case 0: { - PrintAndLogEx(INPLACE, "Chunk [%d/%d] : %.1fs - no luck" - , key_offset - , keycount - , (float)(t2 / 1000.0) - ); + PrintAndLogEx(INPLACE, "Chunk [%d/%d]", key_offset, keycount); break; } case 99: { @@ -3140,7 +3136,7 @@ out: t1 = msclock() - t1; PrintAndLogEx(NORMAL, ""); - PrintAndLogEx(SUCCESS, "Time in iclass chk: " _YELLOW_("%.0f") " seconds", (float)t1 / 1000.0); + PrintAndLogEx(SUCCESS, "time in iclass chk " _YELLOW_("%.0f") " seconds", (float)t1 / 1000.0); DropField(); if (found_key) { @@ -3287,7 +3283,7 @@ static int CmdHFiClassLookUp(const char *Cmd) { } t1 = msclock() - t1; - PrintAndLogEx(SUCCESS, "Time in iclass lookup: " _YELLOW_("%.0f") " seconds", (float)t1 / 1000.0); + PrintAndLogEx(SUCCESS, "time in iclass lookup " _YELLOW_("%.0f") " seconds", (float)t1 / 1000.0); free(prekey); free(keyBlock); diff --git a/client/src/cmdhfmf.c b/client/src/cmdhfmf.c index 89429dcf9..5b3dccc57 100644 --- a/client/src/cmdhfmf.c +++ b/client/src/cmdhfmf.c @@ -1399,7 +1399,7 @@ static int CmdHF14AMfNested(const char *Cmd) { } t1 = msclock() - t1; - PrintAndLogEx(SUCCESS, "time in nested: " _YELLOW_("%.0f") " seconds\n", (float)t1 / 1000.0); + PrintAndLogEx(SUCCESS, "time in nested " _YELLOW_("%.0f") " seconds\n", (float)t1 / 1000.0); // 20160116 If Sector A is found, but not Sector B, try just reading it of the tag? @@ -1604,7 +1604,7 @@ static int CmdHF14AMfNestedStatic(const char *Cmd) { } t1 = msclock() - t1; - PrintAndLogEx(SUCCESS, "time in static nested: " _YELLOW_("%.0f") " seconds\n", (float)t1 / 1000.0); + PrintAndLogEx(SUCCESS, "time in static nested " _YELLOW_("%.0f") " seconds\n", (float)t1 / 1000.0); // 20160116 If Sector A is found, but not Sector B, try just reading it of the tag? @@ -2754,7 +2754,7 @@ static int CmdHF14AMfChk_fast(const char *Cmd) { } out: t1 = msclock() - t1; - PrintAndLogEx(INFO, "Time in checkkeys (fast): %.1fs\n", (float)(t1 / 1000.0)); + PrintAndLogEx(INFO, "time in checkkeys (fast) " _YELLOW_("%.1fs") "\n", (float)(t1 / 1000.0)); // check.. uint8_t found_keys = 0; @@ -3035,7 +3035,7 @@ static int CmdHF14AMfChk(const char *Cmd) { } } t1 = msclock() - t1; - PrintAndLogEx(INFO, "\nTime in checkkeys: %.0f seconds\n", (float)t1 / 1000.0); + PrintAndLogEx(INFO, "\ntime in checkkeys " _YELLOW_("%.0f") " seconds\n", (float)t1 / 1000.0); // 20160116 If Sector A is found, but not Sector B, try just reading it of the tag? @@ -3388,7 +3388,7 @@ static int CmdHF14AMfKeyBrute(const char *Cmd) { PrintAndLogEx(FAILED, "key not found"); t1 = msclock() - t1; - PrintAndLogEx(SUCCESS, "\ntime in keybrute: %.0f seconds\n", (float)t1 / 1000.0); + PrintAndLogEx(SUCCESS, "\ntime in keybrute " _YELLOW_("%.0f") " seconds\n", (float)t1 / 1000.0); return PM3_SUCCESS; } */ diff --git a/client/src/cmdlft55xx.c b/client/src/cmdlft55xx.c index bfa8e12db..776334de8 100644 --- a/client/src/cmdlft55xx.c +++ b/client/src/cmdlft55xx.c @@ -1071,7 +1071,7 @@ static int CmdT55xxDetect(const char *Cmd) { if (AcquireData(T55x7_PAGE0, T55x7_CONFIGURATION_BLOCK, try_with_pwd && usepwd, password, m) == false) continue; - if (tryDetectModulationEx(m, T55XX_PrintConfig, 0, password) == false) + if (tryDetectModulationEx(m, T55XX_PrintConfig, 0, (try_with_pwd && usepwd) ? password : -1) == false) continue; found = true; @@ -1079,7 +1079,7 @@ static int CmdT55xxDetect(const char *Cmd) { } } else { if (AcquireData(T55x7_PAGE0, T55x7_CONFIGURATION_BLOCK, usepwd, password, downlink_mode)) { - found = tryDetectModulationEx(downlink_mode, T55XX_PrintConfig, 0, password); + found = tryDetectModulationEx(downlink_mode, T55XX_PrintConfig, 0, (usepwd) ? password : -1); } } @@ -3121,7 +3121,7 @@ static int CmdT55xxChkPwds(const char *Cmd) { out: t1 = msclock() - t1; - PrintAndLogEx(SUCCESS, "\nTime in check pwd " _YELLOW_("%.0f") " seconds\n", (float)t1 / 1000.0); + PrintAndLogEx(SUCCESS, "\ntime in check pwd " _YELLOW_("%.0f") " seconds\n", (float)t1 / 1000.0); return PM3_SUCCESS; } @@ -3199,7 +3199,7 @@ static int CmdT55xxBruteForce(const char *Cmd) { PrintAndLogEx(WARNING, "Bruteforce failed, last tried: [ " _YELLOW_("%08X") " ]", curr); t1 = msclock() - t1; - PrintAndLogEx(SUCCESS, "\nTime in bruteforce: %.0f seconds\n", (float)t1 / 1000.0); + PrintAndLogEx(SUCCESS, "\ntime in bruteforce " _YELLOW_("%.0f") " seconds\n", (float)t1 / 1000.0); return PM3_SUCCESS; } From 4a09a1e17f6b5ea56be3ff8a65dee877938688a0 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Fri, 21 Aug 2020 17:15:58 +0200 Subject: [PATCH 0258/1047] textual --- client/src/cmdlft55xx.c | 89 +++++++++++++++++++++-------------------- 1 file changed, 46 insertions(+), 43 deletions(-) diff --git a/client/src/cmdlft55xx.c b/client/src/cmdlft55xx.c index 776334de8..4039ba80c 100644 --- a/client/src/cmdlft55xx.c +++ b/client/src/cmdlft55xx.c @@ -92,9 +92,9 @@ static int usage_t55xx_config(void) { print_usage_t55xx_downloadlink(T55XX_DLMODE_SINGLE, config.downlink_mode); PrintAndLogEx(NORMAL, ""); PrintAndLogEx(NORMAL, "Examples:"); - PrintAndLogEx(NORMAL, " lf t55xx config d FSK - FSK demodulation"); - PrintAndLogEx(NORMAL, " lf t55xx config d FSK i 1 - FSK demodulation, inverse data"); - PrintAndLogEx(NORMAL, " lf t55xx config d FSK i 1 o 3 - FSK demodulation, inverse data, offset=3,start from position 3 to decode data"); + PrintAndLogEx(NORMAL, _YELLOW_(" lf t55xx config d FSK") " - FSK demodulation"); + PrintAndLogEx(NORMAL, _YELLOW_(" lf t55xx config d FSK i 1") " - FSK demodulation, inverse data"); + PrintAndLogEx(NORMAL, _YELLOW_(" lf t55xx config d FSK i 1 o 3") " - FSK demodulation, inverse data, offset=3,start from position 3 to decode data"); PrintAndLogEx(NORMAL, ""); return PM3_SUCCESS; } @@ -112,9 +112,9 @@ static int usage_t55xx_read(void) { PrintAndLogEx(NORMAL, " " _RED_("*****************")); PrintAndLogEx(NORMAL, ""); PrintAndLogEx(NORMAL, "Examples:"); - PrintAndLogEx(NORMAL, " lf t55xx read b 0 - read data from block 0"); - PrintAndLogEx(NORMAL, " lf t55xx read b 0 p feedbeef - read data from block 0 password feedbeef"); - PrintAndLogEx(NORMAL, " lf t55xx read b 0 p feedbeef o - read data from block 0 password feedbeef safety check"); + PrintAndLogEx(NORMAL, _YELLOW_(" lf t55xx read b 0") " - read data from block 0"); + PrintAndLogEx(NORMAL, _YELLOW_(" lf t55xx read b 0 p feedbeef") " - read data from block 0 password feedbeef"); + PrintAndLogEx(NORMAL, _YELLOW_(" lf t55xx read b 0 p feedbeef o") " - read data from block 0 password feedbeef safety check"); PrintAndLogEx(NORMAL, ""); return PM3_SUCCESS; } @@ -125,7 +125,7 @@ static int usage_t55xx_resetread(void) { print_usage_t55xx_downloadlink(T55XX_DLMODE_SINGLE, config.downlink_mode); PrintAndLogEx(NORMAL, ""); PrintAndLogEx(NORMAL, "Examples:"); - PrintAndLogEx(NORMAL, " lf t55xx resetread"); + PrintAndLogEx(NORMAL, _YELLOW_(" lf t55xx resetread")); PrintAndLogEx(NORMAL, ""); return PM3_SUCCESS; } @@ -141,9 +141,9 @@ static int usage_t55xx_write(void) { print_usage_t55xx_downloadlink(T55XX_DLMODE_SINGLE, config.downlink_mode); PrintAndLogEx(NORMAL, ""); PrintAndLogEx(NORMAL, "Examples:"); - PrintAndLogEx(NORMAL, " lf t55xx write b 3 d 11223344 - write 11223344 to block 3"); - PrintAndLogEx(NORMAL, " lf t55xx write b 3 d 11223344 p feedbeef - write 11223344 to block 3 password feedbeef"); - PrintAndLogEx(NORMAL, " lf t55xx write b 3 d 11223344 v - write 11223344 to block 3 and try to validate data"); + PrintAndLogEx(NORMAL, _YELLOW_(" lf t55xx write b 3 d 11223344") " - write 11223344 to block 3"); + PrintAndLogEx(NORMAL, _YELLOW_(" lf t55xx write b 3 d 11223344 p feedbeef") " - write 11223344 to block 3 password feedbeef"); + PrintAndLogEx(NORMAL, _YELLOW_(" lf t55xx write b 3 d 11223344 v") " - write 11223344 to block 3 and try to validate data"); PrintAndLogEx(NORMAL, ""); return PM3_SUCCESS; } @@ -154,8 +154,8 @@ static int usage_t55xx_trace(void) { PrintAndLogEx(NORMAL, " 1 - if set, use Graphbuffer otherwise read data from tag."); PrintAndLogEx(NORMAL, ""); PrintAndLogEx(NORMAL, "Examples:"); - PrintAndLogEx(NORMAL, " lf t55xx trace"); - PrintAndLogEx(NORMAL, " lf t55xx trace 1"); + PrintAndLogEx(NORMAL, _YELLOW_(" lf t55xx trace")); + PrintAndLogEx(NORMAL, _YELLOW_(" lf t55xx trace 1")); PrintAndLogEx(NORMAL, ""); return PM3_SUCCESS; } @@ -171,11 +171,11 @@ static int usage_t55xx_info(void) { print_usage_t55xx_downloadlink(T55XX_DLMODE_SINGLE, config.downlink_mode); PrintAndLogEx(NORMAL, ""); PrintAndLogEx(NORMAL, "Examples:"); - PrintAndLogEx(NORMAL, " lf t55xx info"); - PrintAndLogEx(NORMAL, " lf t55xx info 1"); - PrintAndLogEx(NORMAL, " lf t55xx info d 00083040"); - PrintAndLogEx(NORMAL, " lf t55xx info d 6001805A q"); - PrintAndLogEx(NORMAL, " lf t55xx info p 11223344"); + PrintAndLogEx(NORMAL, _YELLOW_(" lf t55xx info")); + PrintAndLogEx(NORMAL, _YELLOW_(" lf t55xx info 1")); + PrintAndLogEx(NORMAL, _YELLOW_(" lf t55xx info d 00083040")); + PrintAndLogEx(NORMAL, _YELLOW_(" lf t55xx info d 6001805A q")); + PrintAndLogEx(NORMAL, _YELLOW_(" lf t55xx info p 11223344")); PrintAndLogEx(NORMAL, ""); return PM3_SUCCESS; } @@ -188,8 +188,8 @@ static int usage_t55xx_dump(void) { print_usage_t55xx_downloadlink(T55XX_DLMODE_SINGLE, config.downlink_mode); PrintAndLogEx(NORMAL, ""); PrintAndLogEx(NORMAL, "Examples:"); - PrintAndLogEx(NORMAL, " lf t55xx dump"); - PrintAndLogEx(NORMAL, " lf t55xx dump p feedbeef o"); + PrintAndLogEx(NORMAL, _YELLOW_(" lf t55xx dump")); + PrintAndLogEx(NORMAL, _YELLOW_(" lf t55xx dump p feedbeef o")); PrintAndLogEx(NORMAL, ""); return PM3_SUCCESS; } @@ -202,7 +202,7 @@ static int usage_t55xx_restore(void) { PrintAndLogEx(NORMAL, _YELLOW_(" Assumes lf t55 detect has been run first!")); PrintAndLogEx(NORMAL, ""); PrintAndLogEx(NORMAL, "Examples:"); - PrintAndLogEx(NORMAL, " lf t55xx restore f lf-t55xx-00148040-dump.bin"); + PrintAndLogEx(NORMAL, _YELLOW_(" lf t55xx restore f lf-t55xx-00148040-dump.bin")); PrintAndLogEx(NORMAL, ""); return PM3_SUCCESS; } @@ -215,9 +215,9 @@ static int usage_t55xx_detect(void) { print_usage_t55xx_downloadlink(T55XX_DLMODE_ALL, T55XX_DLMODE_ALL); PrintAndLogEx(NORMAL, ""); PrintAndLogEx(NORMAL, "Examples:"); - PrintAndLogEx(NORMAL, " lf t55xx detect"); - PrintAndLogEx(NORMAL, " lf t55xx detect 1"); - PrintAndLogEx(NORMAL, " lf t55xx detect p 11223344"); + PrintAndLogEx(NORMAL, _YELLOW_(" lf t55xx detect")); + PrintAndLogEx(NORMAL, _YELLOW_(" lf t55xx detect 1")); + PrintAndLogEx(NORMAL, _YELLOW_(" lf t55xx detect p 11223344")); PrintAndLogEx(NORMAL, ""); return PM3_SUCCESS; } @@ -230,9 +230,9 @@ static int usage_t55xx_detectP1(void) { print_usage_t55xx_downloadlink(T55XX_DLMODE_SINGLE, config.downlink_mode); // Need to setup to try all modes PrintAndLogEx(NORMAL, ""); PrintAndLogEx(NORMAL, "Examples:"); - PrintAndLogEx(NORMAL, " lf t55xx p1detect"); - PrintAndLogEx(NORMAL, " lf t55xx p1detect 1"); - PrintAndLogEx(NORMAL, " lf t55xx p1detect p 11223344"); + PrintAndLogEx(NORMAL, _YELLOW_(" lf t55xx p1detect")); + PrintAndLogEx(NORMAL, _YELLOW_(" lf t55xx p1detect 1")); + PrintAndLogEx(NORMAL, _YELLOW_(" lf t55xx p1detect p 11223344")); PrintAndLogEx(NORMAL, ""); return PM3_SUCCESS; } @@ -245,7 +245,7 @@ static int usage_t55xx_wakup(void) { print_usage_t55xx_downloadlink(T55XX_DLMODE_SINGLE, config.downlink_mode); PrintAndLogEx(NORMAL, ""); PrintAndLogEx(NORMAL, "Examples:"); - PrintAndLogEx(NORMAL, " lf t55xx wakeup p 11223344 - send wakeup password"); + PrintAndLogEx(NORMAL, _YELLOW_(" lf t55xx wakeup p 11223344") " - send wakeup password"); return PM3_SUCCESS; } static int usage_t55xx_chk(void) { @@ -261,8 +261,8 @@ static int usage_t55xx_chk(void) { PrintAndLogEx(NORMAL, " i <*.dic> - loads a default keys dictionary file <*.dic>"); PrintAndLogEx(NORMAL, ""); PrintAndLogEx(NORMAL, "Examples:"); - PrintAndLogEx(NORMAL, " lf t55xx chk m"); - PrintAndLogEx(NORMAL, " lf t55xx chk i t55xx_default_pwds"); + PrintAndLogEx(NORMAL, _YELLOW_(" lf t55xx chk m")); + PrintAndLogEx(NORMAL, _YELLOW_(" lf t55xx chk i t55xx_default_pwds")); PrintAndLogEx(NORMAL, ""); return PM3_SUCCESS; } @@ -280,7 +280,7 @@ static int usage_t55xx_bruteforce(void) { PrintAndLogEx(NORMAL, " e - 4 byte hex value to end pwd search at"); PrintAndLogEx(NORMAL, ""); PrintAndLogEx(NORMAL, "Examples:"); - PrintAndLogEx(NORMAL, " lf t55xx bruteforce r 2 s aaaaaa77 e aaaaaa99"); + PrintAndLogEx(NORMAL, _YELLOW_(" lf t55xx bruteforce r 2 s aaaaaa77 e aaaaaa99")); PrintAndLogEx(NORMAL, ""); return PM3_SUCCESS; } @@ -298,9 +298,9 @@ static int usage_t55xx_recoverpw(void) { PrintAndLogEx(NORMAL, " p - 4 byte hex value of password written by cloner"); PrintAndLogEx(NORMAL, ""); PrintAndLogEx(NORMAL, "Examples:"); - PrintAndLogEx(NORMAL, " lf t55xx recoverpw"); - PrintAndLogEx(NORMAL, " lf t55xx recoverpw p 51243648"); - PrintAndLogEx(NORMAL, " lf t55xx recoverpw r 3 p 51243648"); + PrintAndLogEx(NORMAL, _YELLOW_(" lf t55xx recoverpw")); + PrintAndLogEx(NORMAL, _YELLOW_(" lf t55xx recoverpw p 51243648")); + PrintAndLogEx(NORMAL, _YELLOW_(" lf t55xx recoverpw r 3 p 51243648")); PrintAndLogEx(NORMAL, ""); return PM3_SUCCESS; @@ -314,8 +314,8 @@ static int usage_t55xx_wipe(void) { PrintAndLogEx(NORMAL, " q - indicates to use T5555 ( Q5 ) default configuration block"); PrintAndLogEx(NORMAL, ""); PrintAndLogEx(NORMAL, "Examples:"); - PrintAndLogEx(NORMAL, " lf t55xx wipe - wipes a T55x7 tag, config block 0x000880E0"); - PrintAndLogEx(NORMAL, " lf t55xx wipe q - wipes a T5555 ( Q5 ) tag, config block 0x6001F004"); + PrintAndLogEx(NORMAL, _YELLOW_(" lf t55xx wipe") " - wipes a T55x7 tag, config block 0x000880E0"); + PrintAndLogEx(NORMAL, _YELLOW_(" lf t55xx wipe q") " - wipes a T5555 ( Q5 ) tag, config block 0x6001F004"); return PM3_SUCCESS; } static int usage_t55xx_deviceconfig(void) { @@ -334,8 +334,8 @@ static int usage_t55xx_deviceconfig(void) { PrintAndLogEx(NORMAL, " z - Set default t55x7 timings (use p to save if required)"); PrintAndLogEx(NORMAL, ""); PrintAndLogEx(NORMAL, "Examples:"); - PrintAndLogEx(NORMAL, " lf t55xx deviceconfig a 29 b 17 c 15 d 47 e 15 - default T55XX"); - PrintAndLogEx(NORMAL, " lf t55xx deviceconfig a 55 b 14 c 21 d 30 - default EM4305"); + PrintAndLogEx(NORMAL, _YELLOW_(" lf t55xx deviceconfig a 29 b 17 c 15 d 47 e 15") " - default T55XX"); + PrintAndLogEx(NORMAL, _YELLOW_(" lf t55xx deviceconfig a 55 b 14 c 21 d 30") " - default EM4305"); PrintAndLogEx(NORMAL, ""); return PM3_SUCCESS; } @@ -350,8 +350,8 @@ static int usage_t55xx_protect(void) { print_usage_t55xx_downloadlink(T55XX_DLMODE_SINGLE, config.downlink_mode); PrintAndLogEx(NORMAL, ""); PrintAndLogEx(NORMAL, "Examples:"); - PrintAndLogEx(NORMAL, " lf t55xx protect n 01020304 - sets new password to 01020304"); - PrintAndLogEx(NORMAL, " lf t55xx protect p 11223344 - use pwd 11223344 to set newpwd to 00000000"); + PrintAndLogEx(NORMAL, _YELLOW_(" lf t55xx protect n 01020304") " - sets new password to 01020304"); + PrintAndLogEx(NORMAL, _YELLOW_(" lf t55xx protect p 11223344") " - use pwd 11223344 to set newpwd to 00000000"); PrintAndLogEx(NORMAL, ""); return PM3_SUCCESS; } @@ -1022,7 +1022,7 @@ static int CmdT55xxDetect(const char *Cmd) { bool try_with_pwd = false; bool try_all_dl_modes = true; bool found = false; - uint32_t password = 0; + uint64_t password = -1; uint8_t cmdp = 0; uint8_t downlink_mode = 0; @@ -1068,13 +1068,14 @@ static int CmdT55xxDetect(const char *Cmd) { if (try_all_dl_modes) { for (uint8_t m = downlink_mode; m < 4; m++) { - if (AcquireData(T55x7_PAGE0, T55x7_CONFIGURATION_BLOCK, try_with_pwd && usepwd, password, m) == false) + if (AcquireData(T55x7_PAGE0, T55x7_CONFIGURATION_BLOCK, (try_with_pwd && usepwd), password, m) == false) continue; if (tryDetectModulationEx(m, T55XX_PrintConfig, 0, (try_with_pwd && usepwd) ? password : -1) == false) continue; found = true; + break; } } else { @@ -1083,11 +1084,13 @@ static int CmdT55xxDetect(const char *Cmd) { } } + // toggle so we loop back if not found and try with pwd if (!found && usepwd) - try_with_pwd = !try_with_pwd; // toggle so we loop back if not found and try with pwd + try_with_pwd = !try_with_pwd; + // force exit as detect block has been found if (found) - try_with_pwd = false; // force exit as decect block has been found. + try_with_pwd = false; } while (try_with_pwd); From dc6e4ea4ea672097cef4de8df1e53ff8dce9ec62 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Fri, 21 Aug 2020 17:46:29 +0200 Subject: [PATCH 0259/1047] lf t55xx chk m - tweaking the algo --- armsrc/lfops.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/armsrc/lfops.c b/armsrc/lfops.c index 7507e3441..b96bef250 100644 --- a/armsrc/lfops.c +++ b/armsrc/lfops.c @@ -2074,7 +2074,7 @@ void T55xx_ChkPwds(uint8_t flags) { b1 = 0; T55xxReadBlock(0, 0, true, 0, 0, downlink_mode); for (uint16_t j = 0; j < CHK_SAMPLES_SIGNAL; ++j) { - b1 += buf[j]; + b1 += (buf[j] * buf[j]); } b1 *= b1; b1 >>= 8; @@ -2082,6 +2082,9 @@ void T55xx_ChkPwds(uint8_t flags) { } baseline_faulty >>= 5; + if (DBGLEVEL >= DBG_DEBUG) + Dbprintf("Baseline " _YELLOW_("%llu"), baseline_faulty); + uint8_t *pwds = BigBuf_get_EM_addr(); uint16_t pwd_count = 0; @@ -2133,7 +2136,7 @@ void T55xx_ChkPwds(uint8_t flags) { uint64_t sum = 0; for (uint16_t j = 0; j < CHK_SAMPLES_SIGNAL; ++j) { - sum += buf[j]; + sum += (buf[j] * buf[j]); } sum *= sum; sum >>= 8; @@ -2141,6 +2144,9 @@ void T55xx_ChkPwds(uint8_t flags) { int64_t tmp_dist = (baseline_faulty - sum); curr = ABS(tmp_dist); + if (DBGLEVEL >= DBG_DEBUG) + Dbprintf("%08x has distance " _YELLOW_("%llu"), pwd, curr); + if (curr > prev) { idx = i; prev = curr; From 41375a1d091d3e6e99b30a3588a737c70e34f958 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Fri, 21 Aug 2020 17:58:07 +0200 Subject: [PATCH 0260/1047] cleaner banner --- armsrc/appmain.c | 9 +++++++-- client/src/cmdhw.c | 12 ++++++------ client/src/proxmark3.c | 4 ++-- 3 files changed, 15 insertions(+), 10 deletions(-) diff --git a/armsrc/appmain.c b/armsrc/appmain.c index eefe97f1f..ae57ef03a 100644 --- a/armsrc/appmain.c +++ b/armsrc/appmain.c @@ -33,6 +33,7 @@ #include "em4x50.h" #include "iclass.h" #include "legicrfsim.h" +//#include "cryptorfsim.h" #include "epa.h" #include "hfsnoop.h" #include "lfops.h" @@ -237,7 +238,7 @@ static void SendVersion(void) { */ char *bootrom_version = *(char **)&_bootphase1_version_pointer; - strncat(VersionString, " "_YELLOW_("[ ARM ]")"\n", sizeof(VersionString) - strlen(VersionString) - 1); + strncat(VersionString, " [ "_YELLOW_("ARM")" ]\n", sizeof(VersionString) - strlen(VersionString) - 1); if (bootrom_version < &_flash_start || bootrom_version >= &_flash_end) { strcat(VersionString, "bootrom version information appears invalid\n"); @@ -257,7 +258,7 @@ static void SendVersion(void) { strncat(VersionString, " compiled with GCC "__VERSION__"\n", sizeof(VersionString) - strlen(VersionString) - 1); #endif - strncat(VersionString, "\n "_YELLOW_("[ FPGA ]")"\n ", sizeof(VersionString) - strlen(VersionString) - 1); + strncat(VersionString, "\n [ "_YELLOW_("FPGA")" ] \n ", sizeof(VersionString) - strlen(VersionString) - 1); for (int i = 0; i < g_fpga_bitstream_num; i++) { strncat(VersionString, g_fpga_version_information[i], sizeof(VersionString) - strlen(VersionString) - 1); @@ -1108,6 +1109,10 @@ static void PacketReceived(PacketCommandNG *packet) { SendRawCommand14443B_Ex(packet); break; } + case CMD_HF_CRYPTORF_SIM : { +// simulate_crf_tag(); + break; + } #endif #ifdef WITH_FELICA diff --git a/client/src/cmdhw.c b/client/src/cmdhw.c index 6b83bd0cc..64518c3ae 100644 --- a/client/src/cmdhw.c +++ b/client/src/cmdhw.c @@ -87,7 +87,7 @@ static void lookupChipID(uint32_t iChipID, uint32_t mem_used) { char asBuff[120]; memset(asBuff, 0, sizeof(asBuff)); uint32_t mem_avail = 0; - PrintAndLogEx(NORMAL, "\n " _YELLOW_("[ Hardware ]")); + PrintAndLogEx(NORMAL, "\n [ " _YELLOW_("Hardware") " ]"); switch (iChipID) { case 0x270B0A40: @@ -710,19 +710,19 @@ void pm3_version(bool verbose, bool oneliner) { if (WaitForResponseTimeout(CMD_VERSION, &resp, 1000)) { char temp[PM3_CMD_DATA_SIZE - 12]; // same limit as for ARM image - PrintAndLogEx(NORMAL, "\n " _YELLOW_("[ Proxmark3 RFID instrument ]")); - PrintAndLogEx(NORMAL, "\n " _YELLOW_("[ CLIENT ]")); + PrintAndLogEx(NORMAL, "\n [ " _CYAN_("Proxmark3 RFID instrument") " ]"); + PrintAndLogEx(NORMAL, "\n [ " _YELLOW_("CLIENT") " ]"); FormatVersionInformation(temp, sizeof(temp), " client: ", &version_information); PrintAndLogEx(NORMAL, "%s", temp); PrintAndLogEx(NORMAL, " compiled with " PM3CLIENTCOMPILER __VERSION__ PM3HOSTOS PM3HOSTARCH); if (IfPm3Flash() == false && IfPm3Smartcard() == false && IfPm3FpcUsartHost() == false) { - PrintAndLogEx(NORMAL, "\n " _YELLOW_("[ PROXMARK3 ]")); + PrintAndLogEx(NORMAL, "\n [ " _YELLOW_("PROXMARK3") " ]"); } else { - PrintAndLogEx(NORMAL, "\n " _YELLOW_("[ PROXMARK3 RDV4 ]")); + PrintAndLogEx(NORMAL, "\n [ " _YELLOW_("PROXMARK3 RDV4") " ]"); PrintAndLogEx(NORMAL, " external flash: %s", IfPm3Flash() ? _GREEN_("present") : _YELLOW_("absent")); PrintAndLogEx(NORMAL, " smartcard reader: %s", IfPm3Smartcard() ? _GREEN_("present") : _YELLOW_("absent")); - PrintAndLogEx(NORMAL, "\n " _YELLOW_("[ PROXMARK3 RDV4 Extras ]")); + PrintAndLogEx(NORMAL, "\n [ " _YELLOW_("PROXMARK3 RDV4 Extras") " ]"); PrintAndLogEx(NORMAL, " FPC USART for BT add-on support: %s", IfPm3FpcUsartHost() ? _GREEN_("present") : _YELLOW_("absent")); if (IfPm3FpcUsartDevFromUsb()) { diff --git a/client/src/proxmark3.c b/client/src/proxmark3.c index d04008c03..a6ac33bd4 100644 --- a/client/src/proxmark3.c +++ b/client/src/proxmark3.c @@ -34,8 +34,8 @@ #include "flash.h" #include "preferences.h" -#define BANNERMSG1 " :snowflake: iceman@icesql.net" -#define BANNERMSG2 " bleeding edge :coffee:" +#define BANNERMSG1 "" +#define BANNERMSG2 " :snowflake: bleeding edge :coffee:" #define BANNERMSG3 " https://github.com/rfidresearchgroup/proxmark3/" typedef enum LogoMode { UTF8, ANSI, ASCII } LogoMode; From c551a94afcfe9a36b5547c0e08049388b6902d6a Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Fri, 21 Aug 2020 19:28:38 +0200 Subject: [PATCH 0261/1047] cmake generates error in appveyor --- client/CMakeLists.txt | 50 +++++++++++++++++++++---------------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/client/CMakeLists.txt b/client/CMakeLists.txt index ef0aeb7ab..3ac98578b 100644 --- a/client/CMakeLists.txt +++ b/client/CMakeLists.txt @@ -310,7 +310,7 @@ set(X86_CPUS x86 x86_64 i686) message(STATUS "CMAKE_SYSTEM_PROCESSOR := ${CMAKE_SYSTEM_PROCESSOR}") if (APPLE) - message("Apple device detected.") + message(STATUS "Apple device detected.") set(ADDITIONAL_SRC ${PM3_ROOT}/client/src/util_darwin.h ${PM3_ROOT}/client/src/util_darwin.m ${ADDITIONAL_SRC}) set(ADDITIONAL_LNK "-framework Foundation" "-framework AppKit") endif (APPLE) @@ -376,79 +376,79 @@ if (WHEREAMI_FOUND) set(ADDITIONAL_LNK ${WHEREAMI_LIBRARIES} ${ADDITIONAL_LNK}) endif (WHEREAMI_FOUND) -message("===================================================================") +message(STATUS "===================================================================") if (SKIPQT EQUAL 1) - message("GUI support: skipped") + message(STATUS "GUI support: skipped") else (SKIPQT EQUAL 1) if (Qt5_FOUND) - message("GUI support: QT5 found, enabled") + message(STATUS "GUI support: QT5 found, enabled") else (Qt5_FOUND) - message("GUI support: QT5 not found, disabled") + message(STATUS "GUI support: QT5 not found, disabled") endif (Qt5_FOUND) endif (SKIPQT EQUAL 1) if (SKIPBT EQUAL 1) - message("native BT support: skipped") + message(STATUS "native BT support: skipped") else (SKIPBT EQUAL 1) if (BLUEZ_FOUND) - message("native BT support: Bluez found, enabled") + message(STATUS "native BT support: Bluez found, enabled") else (BLUEZ_FOUND) - message("native BT support: Bluez not found, disabled") + message(STATUS "native BT support: Bluez not found, disabled") endif (BLUEZ_FOUND) endif(SKIPBT EQUAL 1) if (EMBED_BZIP2) - message("Bzip2 library: embedded") + message(STATUS "Bzip2 library: embedded") else (EMBED_BZIP2) - message("Bzip2 library: system library found") + message(STATUS "Bzip2 library: system library found") endif (EMBED_BZIP2) if (SKIPJANSSONSYSTEM EQUAL 1) - message("Jansson library: local library forced") + message(STATUS "Jansson library: local library forced") else (SKIPJANSSONSYSTEM EQUAL 1) if (JANSSON_FOUND) - message("Jansson library: system library found") + message(STATUS "Jansson library: system library found") else (JANSSON_FOUND) - message("Jansson library: system library not found, using local library") + message(STATUS "Jansson library: system library not found, using local library") endif (JANSSON_FOUND) endif (SKIPJANSSONSYSTEM EQUAL 1) if (SKIPPYTHON EQUAL 1) - message("Python3 library: skipped") + message(STATUS "Python3 library: skipped") else (SKIPPYTHON EQUAL 1) if (PYTHON3EMBED_FOUND) - message("Python3 library: Python3 embed found, enabled") + message(STATUS "Python3 library: Python3 embed found, enabled") elseif (PYTHON_FOUND) - message("Python3 library: Python3 found, enabled") + message(STATUS "Python3 library: Python3 found, enabled") else (PYTHON3EMBED_FOUND) - message("Python3 library: Python3 not found, disabled") + message(STATUS "Python3 library: Python3 not found, disabled") endif (PYTHON3EMBED_FOUND) endif(SKIPPYTHON EQUAL 1) if (SKIPREADLINE EQUAL 1) - message("Readline library: skipped") + message(STATUS "Readline library: skipped") else (SKIPREADLINE EQUAL 1) if (READLINE_FOUND) if (EMBED_READLINE) - message("Readline library: embedded") + message(STATUS "Readline library: embedded") else (EMBED_READLINE) - message("Readline library: system library found") + message(STATUS "Readline library: system library found") endif (EMBED_READLINE) else (READLINE_FOUND) - message("Readline library: Readline not found, disabled") + message(STATUS "Readline library: Readline not found, disabled") endif (READLINE_FOUND) endif(SKIPREADLINE EQUAL 1) if (SKIPWHEREAMISYSTEM EQUAL 1) - message("Whereami library: local library forced") + message(STATUS "Whereami library: local library forced") else (SKIPWHEREAMISYSTEM EQUAL 1) if (WHEREAMI_FOUND) - message("Whereami library: system library found") + message(STATUS "Whereami library: system library found") else (WHEREAMI_FOUND) - message("Whereami library: system library not found, using local library") + message(STATUS "Whereami library: system library not found, using local library") endif (WHEREAMI_FOUND) endif (SKIPWHEREAMISYSTEM EQUAL 1) -message("===================================================================") +message(STATUS "===================================================================") add_executable(proxmark3 ${PM3_ROOT}/client/src/proxmark3.c From 4dcc15fb957412a1aad98381cc2137ccdcf51f6b Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Fri, 21 Aug 2020 19:30:15 +0200 Subject: [PATCH 0262/1047] style --- armsrc/desfire_crypto.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/armsrc/desfire_crypto.h b/armsrc/desfire_crypto.h index f8a99a991..bad89294b 100644 --- a/armsrc/desfire_crypto.h +++ b/armsrc/desfire_crypto.h @@ -69,8 +69,6 @@ enum DESFIRE_AUTH_SCHEME { AS_NEW }; - - #define DESFIRE_KEY(key) ((struct desfire_key *) key) struct desfire_key { enum DESFIRE_CRYPTOALGO type; From 1f1eff56878e13b9c0a95e02d2c002ab0cd6979e Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Fri, 21 Aug 2020 23:16:15 +0200 Subject: [PATCH 0263/1047] textual --- client/src/cmdhfmf.c | 34 +++++++++++++++++++--------------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/client/src/cmdhfmf.c b/client/src/cmdhfmf.c index 5b3dccc57..011b30033 100644 --- a/client/src/cmdhfmf.c +++ b/client/src/cmdhfmf.c @@ -3865,8 +3865,9 @@ static int CmdHF14AMfCWipe(const char *cmd) { CLIParserContext *ctx; CLIParserInit(&ctx, "hf mf cwipe", "Wipe gen1 magic chinese card. Set UID/ATQA/SAK/Data/Keys/Access to default values.", - "Usage:\n\thf mf cwipe -> wipe card.\n" - "\thf mf cwipe -u 09080706 -a 0004 -s 18 -- set UID, ATQA and SAK and wipe card."); + "Usage:\n" + _YELLOW_("\thf mf cwipe") " -> wipe card\n" + _YELLOW_("\thf mf cwipe -u 09080706 -a 0004 -s 18") " -- set UID, ATQA and SAK and wipe card"); void *argtable[] = { arg_param_begin, @@ -4452,8 +4453,9 @@ static int CmdHF14AMfAuth4(const char *Cmd) { CLIParserContext *ctx; CLIParserInit(&ctx, "hf mf auth4", "Executes AES authentication command in ISO14443-4", - "Usage:\n\thf mf auth4 4000 000102030405060708090a0b0c0d0e0f -> executes authentication\n" - "\thf mf auth4 9003 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -> executes authentication\n"); + "Usage:\n" + _YELLOW_("\thf mf auth4 4000 000102030405060708090a0b0c0d0e0f") " -> executes authentication\n" + _YELLOW_("\thf mf auth4 9003 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF") " -> executes authentication\n"); void *argtable[] = { arg_param_begin, @@ -4487,9 +4489,9 @@ static int CmdHF14AMfMAD(const char *Cmd) { CLIParserInit(&ctx, "hf mf mad", "Checks and prints Mifare Application Directory (MAD)", "Usage:\n" - "\thf mf mad -> shows MAD if exists\n" - "\thf mf mad --aid e103 -k ffffffffffff -b -> shows NDEF data if exists. read card with custom key and key B\n" - "\thf mf mad --dch -k ffffffffffff -> decode CardHolder information\n"); + _YELLOW_("\thf mf mad") " -> shows MAD if exists\n" + _YELLOW_("\thf mf mad --aid e103 -k ffffffffffff -b") " -> shows NDEF data if exists. read card with custom key and key B\n" + _YELLOW_("\thf mf mad --dch -k ffffffffffff") " -> decode CardHolder information\n"); void *argtable[] = { arg_param_begin, @@ -4628,9 +4630,10 @@ static int CmdHFMFNDEF(const char *Cmd) { CLIParserContext *ctx; CLIParserInit(&ctx, "hf mf ndef", "Prints NFC Data Exchange Format (NDEF)", - "Usage:\n\thf mf ndef -> shows NDEF parsed data\n" - "\thf mf ndef -vv -> shows NDEF parsed and raw data\n" - "\thf mf ndef --aid e103 -k ffffffffffff -b -> shows NDEF data with custom AID, key and with key B\n"); + "Usage:\n" + _YELLOW_("\thf mf ndef") " -> shows NDEF parsed data\n" + _YELLOW_("\thf mf ndef -vv") " -> shows NDEF parsed and raw data\n" + _YELLOW_("\thf mf ndef --aid e103 -k ffffffffffff -b") " -> shows NDEF data with custom AID, key and with key B\n"); void *argtable[] = { arg_param_begin, @@ -4743,11 +4746,12 @@ static int CmdHFMFPersonalize(const char *cmd) { CLIParserContext *ctx; CLIParserInit(&ctx, "hf mf personalize", "Personalize the UID of a Mifare Classic EV1 card. This is only possible if it is a 7Byte UID card and if it is not already personalized.", - "Usage:\n\thf mf personalize UIDF0 -> double size UID according to ISO/IEC14443-3\n" - "\thf mf personalize UIDF1 -> double size UID according to ISO/IEC14443-3, optional usage of selection process shortcut\n" - "\thf mf personalize UIDF2 -> single size random ID according to ISO/IEC14443-3\n" - "\thf mf personalize UIDF3 -> single size NUID according to ISO/IEC14443-3\n" - "\thf mf personalize -t B -k B0B1B2B3B4B5 UIDF3 -> use key B = 0xB0B1B2B3B4B5 instead of default key A\n"); + "Usage:\n" + _YELLOW_("\thf mf personalize UIDF0") " -> double size UID according to ISO/IEC14443-3\n" + _YELLOW_("\thf mf personalize UIDF1") " -> double size UID according to ISO/IEC14443-3, optional usage of selection process shortcut\n" + _YELLOW_("\thf mf personalize UIDF2") " -> single size random ID according to ISO/IEC14443-3\n" + _YELLOW_("\thf mf personalize UIDF3") " -> single size NUID according to ISO/IEC14443-3\n" + _YELLOW_("\thf mf personalize -t B -k B0B1B2B3B4B5 UIDF3") " -> use key B = 0xB0B1B2B3B4B5 instead of default key A\n"); void *argtable[] = { arg_param_begin, From ccad4a6559adfdd581e8377c369bd3ca9ac7cecf Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sat, 22 Aug 2020 08:18:27 +0200 Subject: [PATCH 0264/1047] lf t55xx chk - change parameter for i to f --- client/src/cmdlft55xx.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/client/src/cmdlft55xx.c b/client/src/cmdlft55xx.c index 4039ba80c..455814b3b 100644 --- a/client/src/cmdlft55xx.c +++ b/client/src/cmdlft55xx.c @@ -253,16 +253,16 @@ static int usage_t55xx_chk(void) { PrintAndLogEx(NORMAL, "press " _YELLOW_("'enter'") " to cancel the command"); PrintAndLogEx(NORMAL, _RED_("WARNING:") " this may brick non-password protected chips!"); PrintAndLogEx(NORMAL, "Try to reading block 7 before\n"); - PrintAndLogEx(NORMAL, "Usage: lf t55xx chk [h] [m] [r ] [i <*.dic>]"); + PrintAndLogEx(NORMAL, "Usage: lf t55xx chk [h] [m] [r ] [f <*.dic>]"); PrintAndLogEx(NORMAL, "Options:"); PrintAndLogEx(NORMAL, " h - this help"); PrintAndLogEx(NORMAL, " m - use dictionary from flashmemory\n"); print_usage_t55xx_downloadlink(T55XX_DLMODE_ALL, T55XX_DLMODE_ALL); - PrintAndLogEx(NORMAL, " i <*.dic> - loads a default keys dictionary file <*.dic>"); + PrintAndLogEx(NORMAL, " f <*.dic> - loads a default keys dictionary file <*.dic>"); PrintAndLogEx(NORMAL, ""); PrintAndLogEx(NORMAL, "Examples:"); PrintAndLogEx(NORMAL, _YELLOW_(" lf t55xx chk m")); - PrintAndLogEx(NORMAL, _YELLOW_(" lf t55xx chk i t55xx_default_pwds")); + PrintAndLogEx(NORMAL, _YELLOW_(" lf t55xx chk f t55xx_default_pwds")); PrintAndLogEx(NORMAL, ""); return PM3_SUCCESS; } @@ -3002,7 +3002,7 @@ static int CmdT55xxChkPwds(const char *Cmd) { from_flash = true; cmdp++; break; - case 'i': + case 'f': if (param_getstr(Cmd, cmdp + 1, filename, sizeof(filename)) == 0) { PrintAndLogEx(ERR, "Error, no filename after 'f' was found"); errors = true; From 6d5b12a7b3b0b596b4343b4ab51a8488a1394be3 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sun, 23 Aug 2020 15:27:31 +0200 Subject: [PATCH 0265/1047] coverity fix, wrong printf args --- client/src/cmdlft55xx.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/client/src/cmdlft55xx.c b/client/src/cmdlft55xx.c index 455814b3b..dd28071cd 100644 --- a/client/src/cmdlft55xx.c +++ b/client/src/cmdlft55xx.c @@ -3053,12 +3053,12 @@ static int CmdT55xxChkPwds(const char *Cmd) { struct p* packet = (struct p*)resp.data.asBytes; if (packet->found) { - PrintAndLogEx(SUCCESS, "\nFound a candidate [ " _YELLOW_("%08"PRIX64) " ]", packet->candidate); + PrintAndLogEx(SUCCESS, "\nFound a candidate [ " _YELLOW_("%08"PRIX32) " ]", packet->candidate); if (AcquireData(T55x7_PAGE0, T55x7_CONFIGURATION_BLOCK, true, packet->candidate, downlink_mode)) { found = tryDetectModulationEx(downlink_mode, T55XX_PrintConfig, 0, packet->candidate); if (found) { - PrintAndLogEx(SUCCESS, "Found valid password [ " _GREEN_("%08"PRIX64) " ]", packet->candidate); + PrintAndLogEx(SUCCESS, "Found valid password [ " _GREEN_("%08"PRIX32) " ]", packet->candidate); } else { PrintAndLogEx(WARNING, "Check pwd failed"); @@ -3097,9 +3097,9 @@ static int CmdT55xxChkPwds(const char *Cmd) { return PM3_EOPABORTED; } - uint64_t curr_password = bytes_to_num(keyBlock + 4 * c, 4); + uint32_t curr_password = bytes_to_num(keyBlock + 4 * c, 4); - PrintAndLogEx(INFO, "Testing %08"PRIX64, curr_password); + PrintAndLogEx(INFO, "Testing %08"PRIX32, curr_password); for (dl_mode = downlink_mode; dl_mode <= 3; dl_mode++) { if (!AcquireData(T55x7_PAGE0, T55x7_CONFIGURATION_BLOCK, true, curr_password, dl_mode)) { @@ -3108,7 +3108,7 @@ static int CmdT55xxChkPwds(const char *Cmd) { found = tryDetectModulationEx(dl_mode, T55XX_PrintConfig, 0, curr_password); if (found) { - PrintAndLogEx(SUCCESS, "Found valid password: [ " _GREEN_("%08"PRIX64) " ]", curr_password); + PrintAndLogEx(SUCCESS, "Found valid password: [ " _GREEN_("%08"PRIX32) " ]", curr_password); dl_mode = 4; // Exit other downlink mode checks c = keycount; // Exit loop } From 32c614db7bf5bbee682bce9a917e43f5a0167513 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Tue, 25 Aug 2020 15:34:10 +0200 Subject: [PATCH 0266/1047] fix cotag memory bugs. was off-by-one --- armsrc/lfops.c | 40 ++++++++------ armsrc/lfsampling.c | 117 +++++++++++++++++----------------------- armsrc/lfsampling.h | 2 +- client/src/cmdlfcotag.c | 11 ++-- 4 files changed, 81 insertions(+), 89 deletions(-) diff --git a/armsrc/lfops.c b/armsrc/lfops.c index b96bef250..b29844476 100644 --- a/armsrc/lfops.c +++ b/armsrc/lfops.c @@ -27,6 +27,7 @@ #include "protocols.h" #include "pmflash.h" #include "flashmem.h" // persistence on flash +#include "appmain.h" // print stack /* Notes about EM4xxx timings. @@ -2611,44 +2612,53 @@ void Cotag(uint32_t arg0) { LED_A_ON(); - LFSetupFPGAForADC(LF_FREQ2DIV(132), true); + LFSetupFPGAForADC(LF_DIVISOR_125, true); //clear buffer now so it does not interfere with timing later BigBuf_free(); BigBuf_Clear_ext(false); //send COTAG start pulse - /* - ON(740) OFF(2035) - ON(3330) OFF(2035) - ON(740) OFF(2035) - ON(1000) - */ + ON(740) OFF(2035) + ON(3330) OFF(2035) + ON(740) OFF(2035) + ON(1000) + +/* ON(800) OFF(2200) ON(3600) OFF(2200) ON(800) OFF(2200) ON(3400) - - FpgaSendCommand(FPGA_CMD_SET_DIVISOR, LF_FREQ2DIV(125)); - +*/ switch (rawsignal) { - case 0: + case 0: { doCotagAcquisition(); + reply_ng(CMD_LF_COTAG_READ, PM3_SUCCESS, NULL, 0); break; - case 1: - doCotagAcquisitionManchester(); + } + case 1: { + uint8_t *dest = BigBuf_malloc(COTAG_BITS); + uint16_t bits = doCotagAcquisitionManchester(dest, COTAG_BITS); + reply_ng(CMD_LF_COTAG_READ, PM3_SUCCESS, dest, bits); break; + } case 2: { DoAcquisition_config(false, 0); + reply_ng(CMD_LF_COTAG_READ, PM3_SUCCESS, NULL, 0); + break; + } + default: { + reply_ng(CMD_LF_COTAG_READ, PM3_SUCCESS, NULL, 0); break; } } + // Turn the field off - FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); // field off - reply_ng(CMD_LF_COTAG_READ, PM3_SUCCESS, NULL, 0); + FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); LEDsoff(); + } /* diff --git a/armsrc/lfsampling.c b/armsrc/lfsampling.c index a1747fd03..6d58250d1 100644 --- a/armsrc/lfsampling.c +++ b/armsrc/lfsampling.c @@ -236,15 +236,15 @@ void LFSetupFPGAForADC(int divisor, bool reader_field) { // Connect the A/D to the peak-detected low-frequency path. SetAdcMuxFor(GPIO_MUXSEL_LOPKD); - // 50ms for the resonant antenna to settle. - if (reader_field) - SpinDelay(50); - // Now set up the SSC to get the ADC samples that are now streaming at us. FpgaSetupSsc(FPGA_MAJOR_MODE_LF_READER); // start a 1.5ticks is 1us StartTicks(); + + // 50ms for the resonant antenna to settle. + if (reader_field) + WaitMS(50); } /** @@ -277,9 +277,9 @@ uint32_t DoAcquisition(uint8_t decimation, uint8_t bits_per_sample, bool avg, in while (BUTTON_PRESS() == false) { - // only every 1000th times, in order to save time when collecting samples. + // only every 4000th times, in order to save time when collecting samples. // interruptible only when logging not yet triggered - if ((checked == 4000) && (trigger_threshold > 0)) { + if ((checked >= 4000) && (trigger_threshold > 0)) { if (data_available()) { checked = -1; break; @@ -479,27 +479,23 @@ void doT55x7Acquisition(size_t sample_size) { **/ #define COTAG_T1 384 -#define COTAG_T2 (COTAG_T1>>1) -#define COTAG_ONE_THRESHOLD 128+5 -#define COTAG_ZERO_THRESHOLD 128-5 +#define COTAG_T2 (COTAG_T1 >> 1) +#define COTAG_ONE_THRESHOLD 127+5 +#define COTAG_ZERO_THRESHOLD 127-5 #ifndef COTAG_BITS #define COTAG_BITS 264 #endif -void doCotagAcquisition() { +void doCotagAcquisition(void) { - uint8_t *dest = BigBuf_get_addr(); uint16_t bufsize = BigBuf_max_traceLen(); + uint8_t *dest = BigBuf_malloc(bufsize); dest[0] = 0; - uint8_t firsthigh = 0, firstlow = 0; + + bool firsthigh = false, firstlow = false; uint16_t i = 0, noise_counter = 0; - if (DBGLEVEL >= DBG_DEBUG) { - Dbprintf("doCotagAcquisition - after init"); - print_stack_usage(); - } - - while ((i < bufsize) && (noise_counter < (COTAG_T1 << 1))) { + while ((i < bufsize) && (noise_counter < COTAG_T1 << 1)) { if (BUTTON_PRESS()) break; @@ -507,93 +503,79 @@ void doCotagAcquisition() { WDT_HIT(); if (AT91C_BASE_SSC->SSC_SR & AT91C_SSC_RXRDY) { + volatile uint8_t sample = (uint8_t)AT91C_BASE_SSC->SSC_RHR; // find first peak - if (!firsthigh) { + if (firsthigh == false) { if (sample < COTAG_ONE_THRESHOLD) { noise_counter++; continue; } + noise_counter = 0; - firsthigh = 1; + firsthigh = true; } - if (!firstlow) { + + if (firstlow == false) { if (sample > COTAG_ZERO_THRESHOLD) { noise_counter++; continue; } + noise_counter = 0; - firstlow = 1; + firstlow = true; } - ++i; - - if (sample > COTAG_ONE_THRESHOLD) - dest[i] = 255; - else if (sample < COTAG_ZERO_THRESHOLD) - dest[i] = 0; - else - dest[i] = dest[i - 1]; + if (++i < bufsize) { + if (sample > COTAG_ONE_THRESHOLD) { + dest[i] = 255; + } else if (sample < COTAG_ZERO_THRESHOLD) { + dest[i] = 0; + } else { + dest[i] = dest[i - 1]; + } + } } } - Dbprintf("doCotagAcquisition - %u high %u == 1 low %u == 1", i, firsthigh, firstlow); - // Ensure that DC offset removal and noise check is performed for any device-side processing - removeSignalOffset(dest, bufsize); - printSamples(); - computeSignalProperties(dest, bufsize); - printSamples(); + removeSignalOffset(dest, i); + computeSignalProperties(dest, i); } -uint32_t doCotagAcquisitionManchester(void) { - - uint8_t *dest = BigBuf_get_addr(); - uint16_t bufsize = MIN(COTAG_BITS, BigBuf_max_traceLen()); +uint16_t doCotagAcquisitionManchester(uint8_t *dest, uint16_t destlen) { + if (dest == NULL) + return 0; + dest[0] = 0; - uint8_t firsthigh = 0, firstlow = 0; + + bool firsthigh = false, firstlow = false; uint8_t curr = 0, prev = 0; - uint16_t sample_counter = 0, period = 0; - uint16_t noise_counter = 0; + uint16_t i = 0; + uint16_t period = 0; - if (DBGLEVEL >= DBG_DEBUG) { - Dbprintf("doCotagAcquisitionManchester - after init"); - print_stack_usage(); - } - - while ((sample_counter < bufsize) && (noise_counter < (COTAG_T1 << 1))) { - - if (BUTTON_PRESS()) - break; + while ((i < destlen) && BUTTON_PRESS() == false) { WDT_HIT(); - if (AT91C_BASE_SSC->SSC_SR & AT91C_SSC_TXRDY) { - LED_D_ON(); - } - if (AT91C_BASE_SSC->SSC_SR & AT91C_SSC_RXRDY) { volatile uint8_t sample = (uint8_t)AT91C_BASE_SSC->SSC_RHR; // find first peak - if (!firsthigh) { + if (firsthigh == false) { if (sample < COTAG_ONE_THRESHOLD) { - noise_counter++; continue; } - noise_counter = 0; - firsthigh = 1; + firsthigh = true; } - if (!firstlow) { + if (firstlow == false) { if (sample > COTAG_ZERO_THRESHOLD) { - noise_counter++; continue; } - noise_counter = 0; - firstlow = 1; + firstlow = true; } // set sample 255, 0, or previous @@ -613,10 +595,11 @@ uint32_t doCotagAcquisitionManchester(void) { continue; } - dest[sample_counter] = curr; - ++sample_counter; + dest[i] = curr; + ++i; period = COTAG_T1; } } - return sample_counter; + + return i; } diff --git a/armsrc/lfsampling.h b/armsrc/lfsampling.h index 28721f6ca..137738163 100644 --- a/armsrc/lfsampling.h +++ b/armsrc/lfsampling.h @@ -22,7 +22,7 @@ typedef struct { * and is Manchester?, we directly gather the manchester data into bigbuff **/ void doCotagAcquisition(void); -uint32_t doCotagAcquisitionManchester(void); +uint16_t doCotagAcquisitionManchester(uint8_t *dest, uint16_t destlen); /** * acquisition of T55x7 LF signal. Similar to other LF, but adjusted with @marshmellows thresholds diff --git a/client/src/cmdlfcotag.c b/client/src/cmdlfcotag.c index abe78a4ea..0b691c25d 100644 --- a/client/src/cmdlfcotag.c +++ b/client/src/cmdlfcotag.c @@ -84,9 +84,11 @@ static int CmdCOTAGRead(const char *Cmd) { uint32_t rawsignal = 1; sscanf(Cmd, "%u", &rawsignal); + PacketResponseNG resp; clearCommandBuffer(); SendCommandMIX(CMD_LF_COTAG_READ, rawsignal, 0, 0, NULL, 0); - if (!WaitForResponseTimeout(CMD_LF_COTAG_READ, NULL, 7000)) { + + if (!WaitForResponseTimeout(CMD_LF_COTAG_READ, &resp, 7000)) { PrintAndLogEx(WARNING, "command execution time out"); return PM3_ETIMEOUT; } @@ -100,11 +102,8 @@ static int CmdCOTAGRead(const char *Cmd) { break; } case 1: { - - if (!GetFromDevice(BIG_BUF, DemodBuffer, COTAG_BITS, 0, NULL, 0, NULL, 1000, false)) { - PrintAndLogEx(WARNING, "timeout while waiting for reply."); - return PM3_ETIMEOUT; - } + PrintAndLogEx(INFO, "ICE_:: bits %u", resp.length); + memcpy(DemodBuffer, resp.data.asBytes, COTAG_BITS); DemodBufferLen = COTAG_BITS; return CmdCOTAGDemod(""); } From 42d1a20dc9bf7d50dc5a2ec7fbce39f02f94debb Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 26 Aug 2020 12:28:43 +0200 Subject: [PATCH 0267/1047] renaming --- client/src/cmdlfcotag.c | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/client/src/cmdlfcotag.c b/client/src/cmdlfcotag.c index 0b691c25d..821e3f38e 100644 --- a/client/src/cmdlfcotag.c +++ b/client/src/cmdlfcotag.c @@ -37,8 +37,7 @@ static int usage_lf_cotag_read(void) { // COTAG demod should be able to use GraphBuffer, // when data load samples -static int CmdCOTAGDemod(const char *Cmd) { - (void)Cmd; // Cmd is not used so far +int demodCOTAG(void) { uint8_t bits[COTAG_BITS] = {0}; size_t bitlen = COTAG_BITS; @@ -73,6 +72,10 @@ static int CmdCOTAGDemod(const char *Cmd) { return PM3_SUCCESS; } +static int CmdCOTAGDemod(const char *Cmd) { + (void)Cmd; + return demodCOTAG(); +} // When reading a COTAG. // 0 = HIGH/LOW signal - maxlength bigbuff // 1 = translation for HI/LO into bytes with manchester 0,1 - length 300 @@ -102,8 +105,7 @@ static int CmdCOTAGRead(const char *Cmd) { break; } case 1: { - PrintAndLogEx(INFO, "ICE_:: bits %u", resp.length); - memcpy(DemodBuffer, resp.data.asBytes, COTAG_BITS); + memcpy(DemodBuffer, resp.data.asBytes, resp.length); DemodBufferLen = COTAG_BITS; return CmdCOTAGDemod(""); } @@ -129,10 +131,6 @@ int CmdLFCOTAG(const char *Cmd) { return CmdsParse(CommandTable, Cmd); } -int demodCOTAG(void) { - return CmdCOTAGDemod(""); -} - int readCOTAGUid(void) { return (CmdCOTAGRead("") == PM3_SUCCESS); } From 3776b2ed6b08b8ebc0544e6b29f68d404c733b8b Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 26 Aug 2020 12:46:16 +0200 Subject: [PATCH 0268/1047] dont forget these ones --- client/src/cmdlfcotag.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/src/cmdlfcotag.c b/client/src/cmdlfcotag.c index 821e3f38e..b84e07b64 100644 --- a/client/src/cmdlfcotag.c +++ b/client/src/cmdlfcotag.c @@ -106,8 +106,8 @@ static int CmdCOTAGRead(const char *Cmd) { } case 1: { memcpy(DemodBuffer, resp.data.asBytes, resp.length); - DemodBufferLen = COTAG_BITS; - return CmdCOTAGDemod(""); + DemodBufferLen = resp.length; + return demodCOTAG(); } } return PM3_SUCCESS; From d6e3366c43ff4371ac7620c537056b00ad47d46e Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 26 Aug 2020 14:37:39 +0200 Subject: [PATCH 0269/1047] mix->ng --- armsrc/appmain.c | 6 +++++- client/src/cmdlfcotag.c | 28 ++++++++++++++++++++-------- 2 files changed, 25 insertions(+), 9 deletions(-) diff --git a/armsrc/appmain.c b/armsrc/appmain.c index ae57ef03a..ebb58a23f 100644 --- a/armsrc/appmain.c +++ b/armsrc/appmain.c @@ -954,7 +954,11 @@ static void PacketReceived(PacketCommandNG *packet) { break; } case CMD_LF_COTAG_READ: { - Cotag(packet->oldarg[0]); + struct p { + uint8_t mode; + } PACKED; + struct p *payload = (struct p *)packet->data.asBytes; + Cotag(payload->mode); break; } #endif diff --git a/client/src/cmdlfcotag.c b/client/src/cmdlfcotag.c index b84e07b64..d53a545dd 100644 --- a/client/src/cmdlfcotag.c +++ b/client/src/cmdlfcotag.c @@ -82,21 +82,33 @@ static int CmdCOTAGDemod(const char *Cmd) { // 2 = raw signal - maxlength bigbuff static int CmdCOTAGRead(const char *Cmd) { - if (tolower(Cmd[0]) == 'h') return usage_lf_cotag_read(); + if (tolower(Cmd[0]) == 'h') + return usage_lf_cotag_read(); - uint32_t rawsignal = 1; - sscanf(Cmd, "%u", &rawsignal); + struct p { + uint8_t mode; + } PACKED payload; + payload.mode = param_get8ex(Cmd, 0, 1, 10); PacketResponseNG resp; clearCommandBuffer(); - SendCommandMIX(CMD_LF_COTAG_READ, rawsignal, 0, 0, NULL, 0); + SendCommandNG(CMD_LF_COTAG_READ, (uint8_t*)&payload, sizeof(payload)); - if (!WaitForResponseTimeout(CMD_LF_COTAG_READ, &resp, 7000)) { - PrintAndLogEx(WARNING, "command execution time out"); - return PM3_ETIMEOUT; + uint8_t timeout = 3; + while (!WaitForResponseTimeout(CMD_LF_COTAG_READ, &resp, 2000)) { + timeout--; + printf("."); + fflush(stdout); + + if (timeout == 0) { + PrintAndLogEx(WARNING, "command execution time out"); + return PM3_ETIMEOUT; + } } + if (timeout != 3) + PrintAndLogEx(NORMAL, ""); - switch (rawsignal) { + switch (payload.mode) { case 0: case 2: { CmdPlot(""); From bf77599fda6cf637f294be0679ef67c43446945f Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Fri, 28 Aug 2020 07:57:23 +0200 Subject: [PATCH 0270/1047] lf keri demod - q5 has less decoded bytes --- client/src/cmdlfkeri.c | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/client/src/cmdlfkeri.c b/client/src/cmdlfkeri.c index 7bf36c18e..6b43c3003 100644 --- a/client/src/cmdlfkeri.c +++ b/client/src/cmdlfkeri.c @@ -28,21 +28,21 @@ static int CmdHelp(const char *Cmd); static int usage_lf_keri_clone(void) { - PrintAndLogEx(NORMAL, "clone a KERI tag to a T55x7 tag."); + PrintAndLogEx(NORMAL, "clone a KERI tag to a T55x7 / T5555 (Q5) tag\n"); PrintAndLogEx(NORMAL, "Usage: lf keri clone [h] "); - PrintAndLogEx(NORMAL, "Usage extended: lf keri clone [h] t [f ] c [Q5]"); + PrintAndLogEx(NORMAL, "Usage extended: lf keri clone [h] t [f ] [c ] [Q5]"); PrintAndLogEx(NORMAL, "Options:"); PrintAndLogEx(NORMAL, " h : This help"); PrintAndLogEx(NORMAL, " : Keri Internal ID"); PrintAndLogEx(NORMAL, " : specify write to Q5 (t5555 instead of t55x7)"); // New format - PrintAndLogEx(NORMAL, " [m|i] : Type. m - MS, i - Internal ID"); + PrintAndLogEx(NORMAL, " [m|i] : Type m - MS, i - Internal ID"); PrintAndLogEx(NORMAL, " : Facility Code"); PrintAndLogEx(NORMAL, " : Card Number"); PrintAndLogEx(NORMAL, ""); PrintAndLogEx(NORMAL, "Examples:"); PrintAndLogEx(NORMAL, _YELLOW_(" lf keri clone 112233")); - PrintAndLogEx(NORMAL, _YELLOW_(" lf keri clone type ms fc 6 cn 12345")); + PrintAndLogEx(NORMAL, _YELLOW_(" lf keri clone t i fc 6 cn 12345")); PrintAndLogEx(NORMAL, _YELLOW_(" lf keri clone t m f 6 c 12345")); PrintAndLogEx(NORMAL, ""); return PM3_SUCCESS; @@ -221,6 +221,7 @@ static int CmdKeriRead(const char *Cmd) { static int CmdKeriClone(const char *Cmd) { + bool q5 = false; uint8_t cmdidx = 0; char keritype = 'i'; // default to internalid uint32_t fc = 0; @@ -268,6 +269,7 @@ static int CmdKeriClone(const char *Cmd) { T5555_SET_BITRATE(128) | T5555_PSK_RF_2 | 2 << T5555_MAXBLOCK_SHIFT; + q5 = true; cmdidx++; break; default: @@ -290,7 +292,7 @@ static int CmdKeriClone(const char *Cmd) { // Prepare and write to card // 3 LSB is ONE uint64_t data = ((uint64_t)internalid << 3) + 7; - PrintAndLogEx(INFO, "Preparing to clone KERI to T55x7 with Internal Id: %" PRIx32, internalid); + PrintAndLogEx(INFO, "Preparing to clone KERI to " _YELLOW_("%s") " with Internal Id " _YELLOW_("%" PRIx32), (q5) ? "T5555/Q5" : "T55x77",internalid); blocks[1] = data >> 32; blocks[2] = data & 0xFFFFFFFF; @@ -370,21 +372,25 @@ int detectKeri(uint8_t *dest, size_t *size, bool *invert) { uint8_t preamble[] = {1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}; // sanity check. - if (*size < sizeof(preamble) + 100) return -1; + if (*size < sizeof(preamble) ) return -1; size_t startIdx = 0; + size_t found_size = *size; - if (!preambleSearch(dest, preamble, sizeof(preamble), size, &startIdx)) { + if (!preambleSearch(dest, preamble, sizeof(preamble), &found_size, &startIdx)) { + found_size = *size; // if didn't find preamble try again inverting uint8_t preamble_i[] = {0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0}; - if (!preambleSearch(DemodBuffer, preamble_i, sizeof(preamble_i), size, &startIdx)) + if (!preambleSearch(DemodBuffer, preamble_i, sizeof(preamble_i), &found_size, &startIdx)) return -2; *invert ^= 1; } - if (*size < 64) return -3; //wrong demoded size + if (found_size < 64) return -3; //wrong demoded size + + *size = found_size; return (int)startIdx; } From af1bf08e331abce6813ced70204901cda5752804 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Fri, 28 Aug 2020 07:59:25 +0200 Subject: [PATCH 0271/1047] lf search - a bit more verbose when looking for motorola / cotag (noice) which takes longer time --- client/src/cmdlf.c | 54 ++++++++++++++++++++++++---------------------- 1 file changed, 28 insertions(+), 26 deletions(-) diff --git a/client/src/cmdlf.c b/client/src/cmdlf.c index 7d12fa972..017d2b804 100644 --- a/client/src/cmdlf.c +++ b/client/src/cmdlf.c @@ -1242,6 +1242,7 @@ int CmdLFfind(const char *Cmd) { return PM3_ESOFT; } + PrintAndLogEx(NORMAL, ""); PrintAndLogEx(INFO, "NOTE: some demods output possible binary"); PrintAndLogEx(INFO, "if it finds something that looks like a tag"); PrintAndLogEx(INFO, "False Positives " _YELLOW_("ARE") " possible"); @@ -1270,49 +1271,50 @@ int CmdLFfind(const char *Cmd) { // The improved noise detection will find Cotag. if (getSignalProperties()->isnoise) { + PrintAndLogEx(INPLACE, "Searching for MOTOROLA tag..."); if (readMotorolaUid()) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("Motorola FlexPass ID") " found!"); return PM3_SUCCESS; } if (readCOTAGUid()) { + PrintAndLogEx(INPLACE, "Searching for COTAG tag..."); PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("COTAG ID") " found!"); return PM3_SUCCESS; } + PrintAndLogEx(NORMAL, ""); PrintAndLogEx(FAILED, _RED_("No data found!")); PrintAndLogEx(INFO, "Signal looks like noise. Maybe not an LF tag?"); + PrintAndLogEx(NORMAL, ""); return PM3_ESOFT; } } - if (demodVisa2k() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("Visa2000 ID") " found!"); goto out;} - if (demodHID() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("HID Prox ID") " found!"); goto out;} - if (demodAWID() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("AWID ID") " found!"); goto out;} - if (demodIOProx() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("IO Prox ID") " found!"); goto out;} - if (demodParadox() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("Paradox ID") " found!"); goto out;} - if (demodNexWatch() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("NexWatch ID") " found!"); goto out;} - if (demodIndala() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("Indala ID") " found!"); goto out;} + if (demodVisa2k() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("Visa2000 ID") " found!"); goto out;} + if (demodHID() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("HID Prox ID") " found!"); goto out;} + if (demodAWID() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("AWID ID") " found!"); goto out;} + if (demodIOProx() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("IO Prox ID") " found!"); goto out;} + if (demodParadox() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("Paradox ID") " found!"); goto out;} + if (demodNexWatch() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("NexWatch ID") " found!"); goto out;} + if (demodIndala() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("Indala ID") " found!"); goto out;} + if (demodEM410x() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("EM410x ID") " found!"); goto out;} + if (demodFDX() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("FDX-B ID") " found!"); goto out;} + if (demodGuard() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("Guardall G-Prox II ID") " found!"); goto out; } + if (demodIdteck() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("Idteck ID") " found!"); goto out;} + if (demodJablotron() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("Jablotron ID") " found!"); goto out;} + if (demodNedap() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("NEDAP ID") " found!"); goto out;} + if (demodNoralsy() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("Noralsy ID") " found!"); goto out;} + if (demodKeri() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("KERI ID") " found!"); goto out;} + if (demodPac() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("PAC/Stanley ID") " found!"); goto out;} + if (demodPresco() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("Presco ID") " found!"); goto out;} + if (demodPyramid() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("Pyramid ID") " found!"); goto out;} + if (demodSecurakey() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("Securakey ID") " found!"); goto out;} + if (demodViking() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("Viking ID") " found!"); goto out;} + if (demodGallagher() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("GALLAGHER ID") " found!"); goto out;} - if (demodEM410x() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("EM410x ID") " found!"); goto out;} - if (demodFDX() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("FDX-B ID") " found!"); goto out;} - if (demodGuard() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("Guardall G-Prox II ID") " found!"); goto out; } - if (demodIdteck() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("Idteck ID") " found!"); goto out;} - - if (demodJablotron() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("Jablotron ID") " found!"); goto out;} - if (demodNedap() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("NEDAP ID") " found!"); goto out;} - if (demodNoralsy() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("Noralsy ID") " found!"); goto out;} - if (demodKeri() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("KERI ID") " found!"); goto out;} - if (demodPac() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("PAC/Stanley ID") " found!"); goto out;} - - if (demodPresco() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("Presco ID") " found!"); goto out;} - if (demodPyramid() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("Pyramid ID") " found!"); goto out;} - if (demodSecurakey() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("Securakey ID") " found!"); goto out;} - if (demodViking() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("Viking ID") " found!"); goto out;} - if (demodGallagher() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("GALLAGHER ID") " found!"); goto out;} - -// if (demodTI() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("Texas Instrument ID") " found!"); goto out;} - //if (demodFermax() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("Fermax ID") " found!"); goto out;} +// if (demodTI() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("Texas Instrument ID") " found!"); goto out;} +// if (demodFermax() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("Fermax ID") " found!"); goto out;} PrintAndLogEx(FAILED, _RED_("No known 125/134 kHz tags found!")); From cda72aef4044edbf037242c52b6c7cf9f9d652ec Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Fri, 28 Aug 2020 10:03:33 +0200 Subject: [PATCH 0272/1047] Q5/T5555 has a fix 06 first byte in the configblock. Thanks @mwalker33! --- client/src/cmdlfpresco.c | 2 +- client/src/cmdlfpyramid.c | 4 ++-- client/src/cmdlfvisa2000.c | 2 +- include/protocols.h | 1 + 4 files changed, 5 insertions(+), 4 deletions(-) diff --git a/client/src/cmdlfpresco.c b/client/src/cmdlfpresco.c index c9eb2ce29..f29439ce9 100644 --- a/client/src/cmdlfpresco.c +++ b/client/src/cmdlfpresco.c @@ -116,7 +116,7 @@ static int CmdPrescoClone(const char *Cmd) { if (getWiegandFromPresco(Cmd, &sitecode, &usercode, &fullcode, &Q5) == PM3_EINVARG) return usage_lf_presco_clone(); if (Q5) - blocks[0] = T5555_MODULATION_MANCHESTER | T5555_SET_BITRATE(32) | 4 << T5555_MAXBLOCK_SHIFT | T5555_ST_TERMINATOR; + blocks[0] = T5555_FIXED | T5555_MODULATION_MANCHESTER | T5555_SET_BITRATE(32) | 4 << T5555_MAXBLOCK_SHIFT | T5555_ST_TERMINATOR; if ((sitecode & 0xFF) != sitecode) { sitecode &= 0xFF; diff --git a/client/src/cmdlfpyramid.c b/client/src/cmdlfpyramid.c index 71fe1ab7e..9549a71e3 100644 --- a/client/src/cmdlfpyramid.c +++ b/client/src/cmdlfpyramid.c @@ -242,8 +242,8 @@ static int CmdPyramidClone(const char *Cmd) { blocks[0] = T55x7_MODULATION_FSK2a | T55x7_BITRATE_RF_50 | 4 << T55x7_MAXBLOCK_SHIFT; // Q5 - if (param_getchar(Cmd, 2) == 'Q' || param_getchar(Cmd, 2) == 'q') - blocks[0] = T5555_MODULATION_FSK2 | T5555_INVERT_OUTPUT | T5555_SET_BITRATE(50) | 4 << T5555_MAXBLOCK_SHIFT; + if (tolower(param_getchar(Cmd, 2)) == 'q') + blocks[0] = T5555_FIXED | T5555_MODULATION_FSK2 | T5555_INVERT_OUTPUT | T5555_SET_BITRATE(50) | 4 << T5555_MAXBLOCK_SHIFT; blocks[1] = bytebits_to_byte(bs, 32); blocks[2] = bytebits_to_byte(bs + 32, 32); diff --git a/client/src/cmdlfvisa2000.c b/client/src/cmdlfvisa2000.c index 4260fe6d4..b2a9f97b2 100644 --- a/client/src/cmdlfvisa2000.c +++ b/client/src/cmdlfvisa2000.c @@ -178,7 +178,7 @@ static int CmdVisa2kClone(const char *Cmd) { //Q5 if (tolower(param_getchar(Cmd, 1)) == 'q') - blocks[0] = T5555_MODULATION_MANCHESTER | T5555_SET_BITRATE(64) | T5555_ST_TERMINATOR | 3 << T5555_MAXBLOCK_SHIFT; + blocks[0] = T5555_FIXED | T5555_MODULATION_MANCHESTER | T5555_SET_BITRATE(64) | T5555_ST_TERMINATOR | 3 << T5555_MAXBLOCK_SHIFT; blocks[2] = id; blocks[3] = (visa_parity(id) << 4) | visa_chksum(id); diff --git a/include/protocols.h b/include/protocols.h index add711563..41954d713 100644 --- a/include/protocols.h +++ b/include/protocols.h @@ -519,6 +519,7 @@ ISO 7816-4 Basic interindustry commands. For command APDU's. #define T5555_BITRATE_SHIFT 12 //(RF=2n+2) ie 64=2*0x1F+2 or n = (RF-2)/2 #define T5555_FAST_WRITE 0x00004000 #define T5555_PAGE_SELECT 0x00008000 +#define T5555_FIXED 0x06000000 #define T55XX_WRITE_TIMEOUT 1500 From b16b71944a5ebf62e9ba6693de14514e6390c0e0 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Fri, 28 Aug 2020 10:05:15 +0200 Subject: [PATCH 0273/1047] Q5/T5555 has a fix 06 first byte in the configblock. Thanks @mwalker33! --- client/src/cmdlfnedap.c | 4 ++-- client/src/cmdlfnoralsy.c | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/client/src/cmdlfnedap.c b/client/src/cmdlfnedap.c index ddd734eb3..4d8580352 100644 --- a/client/src/cmdlfnedap.c +++ b/client/src/cmdlfnedap.c @@ -455,8 +455,8 @@ static int CmdLFNedapClone(const char *Cmd) { //NEDAP - compat mode, ASK/DIphase, data rate 64, 4 data blocks // DI-phase (CDP) T55x7_MODULATION_DIPHASE // blocks[0] = T55x7_MODULATION_DIPHASE | T55x7_BITRATE_RF_64 | 7 << T55x7_MAXBLOCK_SHIFT; -// if (param_getchar(Cmd, 3) == 'Q' || param_getchar(Cmd, 3) == 'q') -// blocks[0] = T5555_MODULATION_BIPHASE | T5555_INVERT_OUTPUT | T5555_SET_BITRATE(64) | 7 < Date: Fri, 28 Aug 2020 10:06:21 +0200 Subject: [PATCH 0274/1047] Q5/T5555 has a fix 06 first byte in the configblock. Thanks @mwalker33! --- client/src/cmdlfawid.c | 2 +- client/src/cmdlfio.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/client/src/cmdlfawid.c b/client/src/cmdlfawid.c index fcabbbd2b..b60b27780 100644 --- a/client/src/cmdlfawid.c +++ b/client/src/cmdlfawid.c @@ -407,7 +407,7 @@ static int CmdAWIDClone(const char *Cmd) { if (tolower(param_getchar(Cmd, 3)) == 'q') //t5555 (Q5) BITRATE = (RF-2)/2 (iceman) - blocks[0] = T5555_MODULATION_FSK2 | T5555_INVERT_OUTPUT | T5555_SET_BITRATE(50) | 3 << T5555_MAXBLOCK_SHIFT; + blocks[0] = T5555_FIXED | T5555_MODULATION_FSK2 | T5555_INVERT_OUTPUT | T5555_SET_BITRATE(50) | 3 << T5555_MAXBLOCK_SHIFT; verify_values(&fmtlen, &fc, &cn); diff --git a/client/src/cmdlfio.c b/client/src/cmdlfio.c index ce49804a3..aa48b75ab 100644 --- a/client/src/cmdlfio.c +++ b/client/src/cmdlfio.c @@ -275,7 +275,7 @@ static int CmdIOProxClone(const char *Cmd) { uint32_t blocks[3] = {T55x7_MODULATION_FSK2a | T55x7_BITRATE_RF_64 | 2 << T55x7_MAXBLOCK_SHIFT, 0, 0}; if (tolower(param_getchar(Cmd, 3) == 'q')) - blocks[0] = T5555_MODULATION_FSK2 | T5555_INVERT_OUTPUT | T5555_SET_BITRATE(64) | 2 << T5555_MAXBLOCK_SHIFT; + blocks[0] = T5555_FIXED | T5555_MODULATION_FSK2 | T5555_INVERT_OUTPUT | T5555_SET_BITRATE(64) | 2 << T5555_MAXBLOCK_SHIFT; blocks[1] = bytebits_to_byte(bits, 32); blocks[2] = bytebits_to_byte(bits + 32, 32); From 967c2fe6f9491c2d78e39e1491237a65f46f8e42 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Fri, 28 Aug 2020 10:08:18 +0200 Subject: [PATCH 0275/1047] Q5/T5555 has a fix 06 first byte in the configblock. Thanks @mwalker33! --- client/src/cmdlfindala.c | 4 ++-- client/src/cmdlfjablotron.c | 2 +- client/src/cmdlfmotorola.c | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/client/src/cmdlfindala.c b/client/src/cmdlfindala.c index 4e9cf467b..7fd640378 100644 --- a/client/src/cmdlfindala.c +++ b/client/src/cmdlfindala.c @@ -604,7 +604,7 @@ static int CmdIndalaClone(const char *Cmd) { PrintAndLogEx(INFO, "RawID %s", sprint_hex(data, datalen)); if (is_t5555) - blocks[0] = T5555_SET_BITRATE(32) | T5555_MODULATION_PSK2 | (7 << T5555_MAXBLOCK_SHIFT); + blocks[0] = T5555_FIXED | T5555_SET_BITRATE(32) | T5555_MODULATION_PSK2 | (7 << T5555_MAXBLOCK_SHIFT); else blocks[0] = T55x7_BITRATE_RF_32 | T55x7_MODULATION_PSK2 | (7 << T55x7_MAXBLOCK_SHIFT); @@ -656,7 +656,7 @@ static int CmdIndalaClone(const char *Cmd) { PrintAndLogEx(INFO, "RawID %s", sprint_hex(data, datalen)); if (is_t5555) - blocks[0] = T5555_SET_BITRATE(32) | T5555_MODULATION_PSK1 | (2 << T5555_MAXBLOCK_SHIFT); + blocks[0] = T5555_FIXED | T5555_SET_BITRATE(32) | T5555_MODULATION_PSK1 | (2 << T5555_MAXBLOCK_SHIFT); else blocks[0] = T55x7_BITRATE_RF_32 | T55x7_MODULATION_PSK1 | (2 << T55x7_MAXBLOCK_SHIFT); diff --git a/client/src/cmdlfjablotron.c b/client/src/cmdlfjablotron.c index a2859fbb4..415e3e9af 100644 --- a/client/src/cmdlfjablotron.c +++ b/client/src/cmdlfjablotron.c @@ -154,7 +154,7 @@ static int CmdJablotronClone(const char *Cmd) { //Q5 if (tolower(param_getchar(Cmd, 1)) == 'q') - blocks[0] = T5555_MODULATION_BIPHASE | T5555_INVERT_OUTPUT | T5555_SET_BITRATE(64) | 2 << T5555_MAXBLOCK_SHIFT; + blocks[0] = T5555_FIXED | T5555_MODULATION_BIPHASE | T5555_INVERT_OUTPUT | T5555_SET_BITRATE(64) | 2 << T5555_MAXBLOCK_SHIFT; // clearing the topbit needed for the preambl detection. if ((fullcode & 0x7FFFFFFFFF) != fullcode) { diff --git a/client/src/cmdlfmotorola.c b/client/src/cmdlfmotorola.c index 0a52f570a..5cad8028c 100644 --- a/client/src/cmdlfmotorola.c +++ b/client/src/cmdlfmotorola.c @@ -173,7 +173,7 @@ static int CmdMotorolaClone(const char *Cmd) { CLIParserFree(ctx); //TODO add selection of chip for Q5 or T55x7 - // data[0] = T5555_SET_BITRATE(32 | T5555_MODULATION_PSK1 | 2 << T5555_MAXBLOCK_SHIFT; + // data[0] = T5555_FIXED | T5555_SET_BITRATE(32 | T5555_MODULATION_PSK1 | 2 << T5555_MAXBLOCK_SHIFT; // config for Motorola 64 format (RF/32;PSK1 with RF/2; Maxblock=2) PrintAndLogEx(INFO, "Preparing to clone Motorola 64bit tag with RawID %s", sprint_hex(data, datalen)); From 3cc722e44ce2b7b4fc52177dae1e68adab414ef0 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Fri, 28 Aug 2020 10:11:11 +0200 Subject: [PATCH 0276/1047] Q5/T5555 has a fix 06 first byte in the configblock. Thanks @mwalker33! --- client/src/cmdlffdx.c | 2 +- client/src/cmdlfguard.c | 4 ++-- client/src/cmdlfkeri.c | 6 +----- 3 files changed, 4 insertions(+), 8 deletions(-) diff --git a/client/src/cmdlffdx.c b/client/src/cmdlffdx.c index 28d3ff12c..b30d673ef 100644 --- a/client/src/cmdlffdx.c +++ b/client/src/cmdlffdx.c @@ -322,7 +322,7 @@ static int CmdFdxClone(const char *Cmd) { //Q5 if (tolower(param_getchar(Cmd, 2)) == 'q') - blocks[0] = T5555_MODULATION_BIPHASE | T5555_INVERT_OUTPUT | T5555_SET_BITRATE(32) | 4 << T5555_MAXBLOCK_SHIFT; + blocks[0] = T5555_FIXED | T5555_MODULATION_BIPHASE | T5555_INVERT_OUTPUT | T5555_SET_BITRATE(32) | 4 << T5555_MAXBLOCK_SHIFT; // convert from bit stream to block data blocks[1] = bytebits_to_byte(bits, 32); diff --git a/client/src/cmdlfguard.c b/client/src/cmdlfguard.c index 746ef7f11..64573a03c 100644 --- a/client/src/cmdlfguard.c +++ b/client/src/cmdlfguard.c @@ -175,8 +175,8 @@ static int CmdGuardClone(const char *Cmd) { } // Q5 - if (param_getchar(Cmd, 3) == 'Q' || param_getchar(Cmd, 3) == 'q') - blocks[0] = T5555_MODULATION_FSK2 | T5555_SET_BITRATE(50) | 3 << T5555_MAXBLOCK_SHIFT; + if (tolower(param_getchar(Cmd, 3)) == 'q') + blocks[0] = T5555_FIXED | T5555_MODULATION_FSK2 | T5555_SET_BITRATE(50) | 3 << T5555_MAXBLOCK_SHIFT; blocks[1] = bytebits_to_byte(bs, 32); blocks[2] = bytebits_to_byte(bs + 32, 32); diff --git a/client/src/cmdlfkeri.c b/client/src/cmdlfkeri.c index 6b43c3003..db96a98f5 100644 --- a/client/src/cmdlfkeri.c +++ b/client/src/cmdlfkeri.c @@ -264,11 +264,7 @@ static int CmdKeriClone(const char *Cmd) { cmdidx += 2; break; case 'q': // q5 - blocks[0] = - T5555_MODULATION_PSK1 | - T5555_SET_BITRATE(128) | - T5555_PSK_RF_2 | - 2 << T5555_MAXBLOCK_SHIFT; + blocks[0] = T5555_FIXED | T5555_MODULATION_PSK1 | T5555_SET_BITRATE(128) | T5555_PSK_RF_2 | 2 << T5555_MAXBLOCK_SHIFT; q5 = true; cmdidx++; break; From 09faa2fc138e702cce62bc5411e35653881ed9fd Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Fri, 28 Aug 2020 10:14:36 +0200 Subject: [PATCH 0277/1047] first nibble --- include/protocols.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/protocols.h b/include/protocols.h index 41954d713..82e250993 100644 --- a/include/protocols.h +++ b/include/protocols.h @@ -519,7 +519,7 @@ ISO 7816-4 Basic interindustry commands. For command APDU's. #define T5555_BITRATE_SHIFT 12 //(RF=2n+2) ie 64=2*0x1F+2 or n = (RF-2)/2 #define T5555_FAST_WRITE 0x00004000 #define T5555_PAGE_SELECT 0x00008000 -#define T5555_FIXED 0x06000000 +#define T5555_FIXED 0x60000000 #define T55XX_WRITE_TIMEOUT 1500 From 5a8f7d5c7485f3b4edff1bc84bcc76a30f157f0c Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Fri, 28 Aug 2020 10:38:36 +0200 Subject: [PATCH 0278/1047] keri clone - q5 should use RF/32, thanks @mwalker33! --- client/src/cmdlfkeri.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/src/cmdlfkeri.c b/client/src/cmdlfkeri.c index db96a98f5..91ff23f49 100644 --- a/client/src/cmdlfkeri.c +++ b/client/src/cmdlfkeri.c @@ -264,7 +264,7 @@ static int CmdKeriClone(const char *Cmd) { cmdidx += 2; break; case 'q': // q5 - blocks[0] = T5555_FIXED | T5555_MODULATION_PSK1 | T5555_SET_BITRATE(128) | T5555_PSK_RF_2 | 2 << T5555_MAXBLOCK_SHIFT; + blocks[0] = T5555_FIXED | T5555_MODULATION_PSK1 | T5555_SET_BITRATE(32) | T5555_PSK_RF_2 | 2 << T5555_MAXBLOCK_SHIFT; q5 = true; cmdidx++; break; From 7098618ad8f534a3f25ce3cc4c95e36479d60d3c Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Fri, 28 Aug 2020 10:49:13 +0200 Subject: [PATCH 0279/1047] textual --- client/src/cmdlfawid.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/client/src/cmdlfawid.c b/client/src/cmdlfawid.c index b60b27780..959455c69 100644 --- a/client/src/cmdlfawid.c +++ b/client/src/cmdlfawid.c @@ -405,7 +405,8 @@ static int CmdAWIDClone(const char *Cmd) { uint32_t blocks[4] = {T55x7_MODULATION_FSK2a | T55x7_BITRATE_RF_50 | 3 << T55x7_MAXBLOCK_SHIFT, 0, 0, 0}; - if (tolower(param_getchar(Cmd, 3)) == 'q') + bool q5 = tolower(param_getchar(Cmd, 3)) == 'q'; + if (q5) //t5555 (Q5) BITRATE = (RF-2)/2 (iceman) blocks[0] = T5555_FIXED | T5555_MODULATION_FSK2 | T5555_INVERT_OUTPUT | T5555_SET_BITRATE(50) | 3 << T5555_MAXBLOCK_SHIFT; @@ -425,7 +426,7 @@ static int CmdAWIDClone(const char *Cmd) { free(bits); - PrintAndLogEx(INFO, "Preparing to clone AWID %u to T55x7 with FC: %u, CN: %u", fmtlen, fc, cn); + PrintAndLogEx(INFO, "Preparing to clone AWID %u to " _YELLOW_("%s") " with FC: %u, CN: %u", fmtlen, (q5) ? "T5555 / Q5" : "T55x7", fc, cn); print_blocks(blocks, ARRAYLEN(blocks)); int res = clone_t55xx_tag(blocks, ARRAYLEN(blocks)); From be9f7eda371d1507d034d4de13bae8b43c378991 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Fri, 28 Aug 2020 11:02:34 +0200 Subject: [PATCH 0280/1047] textual --- client/src/cmdlfem4x.c | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/client/src/cmdlfem4x.c b/client/src/cmdlfem4x.c index 423c06c58..18a1fdb60 100644 --- a/client/src/cmdlfem4x.c +++ b/client/src/cmdlfem4x.c @@ -64,13 +64,13 @@ static int usage_lf_em410x_watch(void) { } static int usage_lf_em410x_write(void) { - PrintAndLogEx(NORMAL, "Writes EM410x ID to a T55x7 / T5555 (Q5) tag"); + PrintAndLogEx(NORMAL, "Writes EM410x ID to a T55x7 or Q5/T5555 tag"); PrintAndLogEx(NORMAL, ""); PrintAndLogEx(NORMAL, "Usage: lf em 410x_write [h] [clock]"); PrintAndLogEx(NORMAL, "Options:"); PrintAndLogEx(NORMAL, " h - this help"); PrintAndLogEx(NORMAL, " - ID number"); - PrintAndLogEx(NORMAL, " - 0|1 T5555 (Q5) / T55x7"); + PrintAndLogEx(NORMAL, " - 0|1 0 = Q5/T5555, 1 = T55x7"); PrintAndLogEx(NORMAL, " - 16|32|40|64, optional, set R/F clock rate, defaults to 64"); PrintAndLogEx(NORMAL, "Examples:"); PrintAndLogEx(NORMAL, _YELLOW_(" lf em 410x_write 0F0368568B 1") " = write ID to t55x7 card"); @@ -630,15 +630,11 @@ static int CmdEM410xWrite(const char *Cmd) { return PM3_EINVARG; } - if (card == 1) { - PrintAndLogEx(SUCCESS, "Writing %s tag with UID 0x%010" PRIx64 " (clock rate: %d)", _GREEN_("T55x7"), id, clock1); - // NOTE: We really should pass the clock in as a separate argument, but to - // provide for backwards-compatibility for older firmware, and to avoid - // having to add another argument to CMD_LF_EM410X_WRITE, we just store - // the clock rate in bits 8-15 of the card value - } else if (card == 0) { - PrintAndLogEx(SUCCESS, "Writing %s tag with UID 0x%010" PRIx64 "(clock rate: %d)", _GREEN_("T5555"), id, clock1); - } + PrintAndLogEx(SUCCESS, "Writing " _YELLOW_("%s") " tag with UID 0x%010" PRIx64 " (clock rate: %d)", (card==1) ? "T55x7" : "Q5/T5555", id, clock1); + // NOTE: We really should pass the clock in as a separate argument, but to + // provide for backwards-compatibility for older firmware, and to avoid + // having to add another argument to CMD_LF_EM410X_WRITE, we just store + // the clock rate in bits 8-15 of the card value struct { uint8_t card; @@ -1386,7 +1382,7 @@ static command_t CommandTable[] = { {"410x_brute", CmdEM410xBrute, IfPm3Lf, "reader bruteforce attack by simulating EM410x tags"}, {"410x_watch", CmdEM410xWatch, IfPm3Lf, "watches for EM410x 125/134 kHz tags (option 'h' for 134)"}, {"410x_spoof", CmdEM410xWatchnSpoof, IfPm3Lf, "watches for EM410x 125/134 kHz tags, and replays them. (option 'h' for 134)" }, - {"410x_write", CmdEM410xWrite, IfPm3Lf, "write EM410x UID to T5555(Q5) or T55x7 tag"}, + {"410x_write", CmdEM410xWrite, IfPm3Lf, "write EM410x UID to Q5/T5555 or T55x7 tag"}, {"----------", CmdHelp, AlwaysAvailable, "-------------------- " _CYAN_("EM 4x05 / 4x69") " -------------------"}, {"4x05_demod", CmdEM4x05Demod, AlwaysAvailable, "demodulate a EM4x05/EM4x69 tag from the GraphBuffer"}, {"4x05_dump", CmdEM4x05Dump, IfPm3Lf, "dump EM4x05/EM4x69 tag"}, From e9fd3369023d4cf85847179930ec02fba19094cb Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Fri, 28 Aug 2020 11:08:59 +0200 Subject: [PATCH 0281/1047] textual Q5 --- client/src/cmdlfawid.c | 8 ++++---- client/src/cmdlfem4x.c | 2 +- client/src/cmdlfvisa2000.c | 12 +++++++----- 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/client/src/cmdlfawid.c b/client/src/cmdlfawid.c index 959455c69..765c7e9c6 100644 --- a/client/src/cmdlfawid.c +++ b/client/src/cmdlfawid.c @@ -60,7 +60,7 @@ static int usage_lf_awid_sim(void) { } static int usage_lf_awid_clone(void) { - PrintAndLogEx(NORMAL, "Enables cloning of AWID card with specified facility-code and card number onto T55x7."); + PrintAndLogEx(NORMAL, "Enables cloning of AWID card with specified facility-code and card number onto T55x7 or Q5/T5555."); PrintAndLogEx(NORMAL, "The T55x7 must be on the antenna when issuing this command. T55x7 blocks are calculated and printed in the process."); PrintAndLogEx(NORMAL, ""); PrintAndLogEx(NORMAL, "Usage: lf awid clone [h] [Q5]"); @@ -69,7 +69,7 @@ static int usage_lf_awid_clone(void) { PrintAndLogEx(NORMAL, " : format length 26|34|37|50"); PrintAndLogEx(NORMAL, " : 8|16bit value facility code"); PrintAndLogEx(NORMAL, " : 16|32-bit value card number"); - PrintAndLogEx(NORMAL, " Q5 : optional - clone to Q5 (T5555) instead of T55x7 chip"); + PrintAndLogEx(NORMAL, " Q5 : optional - specify writing to Q5/T5555 tag"); PrintAndLogEx(NORMAL, ""); PrintAndLogEx(NORMAL, "Examples:"); PrintAndLogEx(NORMAL, _YELLOW_(" lf awid clone 26 224 1337")); @@ -426,7 +426,7 @@ static int CmdAWIDClone(const char *Cmd) { free(bits); - PrintAndLogEx(INFO, "Preparing to clone AWID %u to " _YELLOW_("%s") " with FC: %u, CN: %u", fmtlen, (q5) ? "T5555 / Q5" : "T55x7", fc, cn); + PrintAndLogEx(INFO, "Preparing to clone AWID %u to " _YELLOW_("%s") " with FC: %u, CN: %u", fmtlen, (q5) ? "Q5/T5555" : "T55x7", fc, cn); print_blocks(blocks, ARRAYLEN(blocks)); int res = clone_t55xx_tag(blocks, ARRAYLEN(blocks)); @@ -533,7 +533,7 @@ static command_t CommandTable[] = { {"help", CmdHelp, AlwaysAvailable, "this help"}, {"demod", CmdAWIDDemod, AlwaysAvailable, "demodulate an AWID FSK tag from the GraphBuffer"}, {"read", CmdAWIDRead, IfPm3Lf, "attempt to read and extract tag data"}, - {"clone", CmdAWIDClone, IfPm3Lf, "clone AWID tag to T55x7 (or to q5/T5555)"}, + {"clone", CmdAWIDClone, IfPm3Lf, "clone AWID tag to T55x7 or Q5/T5555"}, {"sim", CmdAWIDSim, IfPm3Lf, "simulate AWID tag"}, {"brute", CmdAWIDBrute, IfPm3Lf, "Bruteforce card number against reader"}, {"watch", CmdAWIDWatch, IfPm3Lf, "continuously watch for cards. Reader mode"}, diff --git a/client/src/cmdlfem4x.c b/client/src/cmdlfem4x.c index 18a1fdb60..a9d6c9794 100644 --- a/client/src/cmdlfem4x.c +++ b/client/src/cmdlfem4x.c @@ -1382,7 +1382,7 @@ static command_t CommandTable[] = { {"410x_brute", CmdEM410xBrute, IfPm3Lf, "reader bruteforce attack by simulating EM410x tags"}, {"410x_watch", CmdEM410xWatch, IfPm3Lf, "watches for EM410x 125/134 kHz tags (option 'h' for 134)"}, {"410x_spoof", CmdEM410xWatchnSpoof, IfPm3Lf, "watches for EM410x 125/134 kHz tags, and replays them. (option 'h' for 134)" }, - {"410x_write", CmdEM410xWrite, IfPm3Lf, "write EM410x UID to Q5/T5555 or T55x7 tag"}, + {"410x_write", CmdEM410xWrite, IfPm3Lf, "write EM410x UID to T55x7 or Q5/T5555 tag"}, {"----------", CmdHelp, AlwaysAvailable, "-------------------- " _CYAN_("EM 4x05 / 4x69") " -------------------"}, {"4x05_demod", CmdEM4x05Demod, AlwaysAvailable, "demodulate a EM4x05/EM4x69 tag from the GraphBuffer"}, {"4x05_dump", CmdEM4x05Dump, IfPm3Lf, "dump EM4x05/EM4x69 tag"}, diff --git a/client/src/cmdlfvisa2000.c b/client/src/cmdlfvisa2000.c index b2a9f97b2..bd25d9d89 100644 --- a/client/src/cmdlfvisa2000.c +++ b/client/src/cmdlfvisa2000.c @@ -33,15 +33,16 @@ static int CmdHelp(const char *Cmd); static int usage_lf_visa2k_clone(void) { - PrintAndLogEx(NORMAL, "clone a Visa2000 tag to a T55x7 tag."); + PrintAndLogEx(NORMAL, "clone a Visa2000 tag to a T55x7 or Q5/T5555 tag."); PrintAndLogEx(NORMAL, "Usage: lf visa2000 clone [h] "); PrintAndLogEx(NORMAL, "Options:"); PrintAndLogEx(NORMAL, " h : This help"); PrintAndLogEx(NORMAL, " : Visa2k card ID"); - PrintAndLogEx(NORMAL, " : specify write to Q5 (t5555 instead of t55x7)"); + PrintAndLogEx(NORMAL, " : specify writing to Q5/T5555 tag"); PrintAndLogEx(NORMAL, ""); PrintAndLogEx(NORMAL, "Examples:"); PrintAndLogEx(NORMAL, _YELLOW_(" lf visa2000 clone 112233")); + PrintAndLogEx(NORMAL, _YELLOW_(" lf visa2000 clone 112233 q5") " -- encode for Q5/T5555"); return PM3_SUCCESS; } @@ -177,13 +178,14 @@ static int CmdVisa2kClone(const char *Cmd) { id = param_get32ex(Cmd, 0, 0, 10); //Q5 - if (tolower(param_getchar(Cmd, 1)) == 'q') + bool q5 = tolower(param_getchar(Cmd, 1)) == 'q'; + if (q5) blocks[0] = T5555_FIXED | T5555_MODULATION_MANCHESTER | T5555_SET_BITRATE(64) | T5555_ST_TERMINATOR | 3 << T5555_MAXBLOCK_SHIFT; blocks[2] = id; blocks[3] = (visa_parity(id) << 4) | visa_chksum(id); - PrintAndLogEx(INFO, "Preparing to clone Visa2000 to T55x7 with CardId: %"PRIu64, id); + PrintAndLogEx(INFO, "Preparing to clone Visa2000 to " _YELLOW_("%s") " with CardId: %"PRIu64, (q5) ? "Q5/T5555" : "T55x7", id); print_blocks(blocks, ARRAYLEN(blocks)); int res = clone_t55xx_tag(blocks, ARRAYLEN(blocks)); @@ -233,7 +235,7 @@ static command_t CommandTable[] = { {"help", CmdHelp, AlwaysAvailable, "This help"}, {"demod", CmdVisa2kDemod, AlwaysAvailable, "demodulate an VISA2000 tag from the GraphBuffer"}, {"read", CmdVisa2kRead, IfPm3Lf, "attempt to read and extract tag data from the antenna"}, - {"clone", CmdVisa2kClone, IfPm3Lf, "clone Visa2000 tag to T55x7 (or to q5/T5555)"}, + {"clone", CmdVisa2kClone, IfPm3Lf, "clone Visa2000 tag to T55x7 or Q5/T5555"}, {"sim", CmdVisa2kSim, IfPm3Lf, "simulate Visa2000 tag"}, {NULL, NULL, NULL, NULL} }; From 290eddddc6bd53f6eea216721e99182c5ca11775 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Fri, 28 Aug 2020 11:14:42 +0200 Subject: [PATCH 0282/1047] textual Q5 --- client/src/cmdlffdx.c | 11 ++++++----- client/src/cmdlfguard.c | 18 ++++++++++-------- 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/client/src/cmdlffdx.c b/client/src/cmdlffdx.c index b30d673ef..868a567c5 100644 --- a/client/src/cmdlffdx.c +++ b/client/src/cmdlffdx.c @@ -49,7 +49,7 @@ static int CmdHelp(const char *Cmd); static int usage_lf_fdx_clone(void) { - PrintAndLogEx(NORMAL, "Clone a FDX-B animal tag to a T55x7 tag."); + PrintAndLogEx(NORMAL, "Clone a FDX-B animal tag to a T55x7 or Q5/T5555 tag."); PrintAndLogEx(NORMAL, "Usage: lf fdx clone [h] "); PrintAndLogEx(NORMAL, "Options:"); PrintAndLogEx(NORMAL, " h : This help"); @@ -58,7 +58,7 @@ static int usage_lf_fdx_clone(void) { PrintAndLogEx(NORMAL, " : Extended data"); //reserved/rfu //is animal tag - PrintAndLogEx(NORMAL, " : Specify write to Q5 (t5555 instead of t55x7)"); + PrintAndLogEx(NORMAL, " : Specify writing to Q5/T5555 tag"); PrintAndLogEx(NORMAL, ""); PrintAndLogEx(NORMAL, "Examples:"); PrintAndLogEx(NORMAL, _YELLOW_(" lf fdx clone 999 112233")); @@ -321,7 +321,8 @@ static int CmdFdxClone(const char *Cmd) { uint32_t blocks[5] = {T55x7_MODULATION_DIPHASE | T55x7_BITRATE_RF_32 | 4 << T55x7_MAXBLOCK_SHIFT, 0, 0, 0, 0}; //Q5 - if (tolower(param_getchar(Cmd, 2)) == 'q') + bool q5 = tolower(param_getchar(Cmd, 2)) == 'q'; + if (q5) blocks[0] = T5555_FIXED | T5555_MODULATION_BIPHASE | T5555_INVERT_OUTPUT | T5555_SET_BITRATE(32) | 4 << T5555_MAXBLOCK_SHIFT; // convert from bit stream to block data @@ -332,7 +333,7 @@ static int CmdFdxClone(const char *Cmd) { free(bits); - PrintAndLogEx(INFO, "Preparing to clone FDX-B to T55x7 with animal ID: " _GREEN_("%04u-%"PRIu64)" (extended 0x%X)", countryid, animalid, extended); + PrintAndLogEx(INFO, "Preparing to clone FDX-B to " _YELLOW_("%s") " with animal ID: " _GREEN_("%04u-%"PRIu64)" (extended 0x%X)", (q5) ? "Q5/T5555" : "T55x7", countryid, animalid, extended); print_blocks(blocks, ARRAYLEN(blocks)); int res = clone_t55xx_tag(blocks, ARRAYLEN(blocks)); @@ -393,7 +394,7 @@ static command_t CommandTable[] = { {"help", CmdHelp, AlwaysAvailable, "this help"}, {"demod", CmdFdxDemod, AlwaysAvailable, "demodulate a FDX-B ISO11784/85 tag from the GraphBuffer"}, {"read", CmdFdxRead, IfPm3Lf, "attempt to read and extract tag data"}, - {"clone", CmdFdxClone, IfPm3Lf, "clone animal ID tag to T55x7 (or to q5/T5555)"}, + {"clone", CmdFdxClone, IfPm3Lf, "clone animal ID tag to T55x7 or Q5/T5555"}, {"sim", CmdFdxSim, IfPm3Lf, "simulate Animal ID tag"}, {NULL, NULL, NULL, NULL} }; diff --git a/client/src/cmdlfguard.c b/client/src/cmdlfguard.c index 64573a03c..12d39ac71 100644 --- a/client/src/cmdlfguard.c +++ b/client/src/cmdlfguard.c @@ -27,15 +27,16 @@ static int CmdHelp(const char *Cmd); static int usage_lf_guard_clone(void) { - PrintAndLogEx(NORMAL, "clone a Guardall tag to a T55x7 tag."); + PrintAndLogEx(NORMAL, "clone a Guardall tag to a T55x7 or Q5/T5555 tag."); PrintAndLogEx(NORMAL, "The facility-code is 8-bit and the card number is 16-bit. Larger values are truncated. "); PrintAndLogEx(NORMAL, "Currently work only on 26bit"); PrintAndLogEx(NORMAL, ""); - PrintAndLogEx(NORMAL, "Usage: lf gprox clone [h] "); + PrintAndLogEx(NORMAL, "Usage: lf gprox clone [h] "); PrintAndLogEx(NORMAL, "Options:"); - PrintAndLogEx(NORMAL, " : format length 26|32|36|40"); - PrintAndLogEx(NORMAL, " : 8-bit value facility code"); - PrintAndLogEx(NORMAL, " : 16-bit value card number"); + PrintAndLogEx(NORMAL, " : format length 26|32|36|40"); + PrintAndLogEx(NORMAL, " : 8-bit value facility code"); + PrintAndLogEx(NORMAL, " : 16-bit value card number"); + PrintAndLogEx(NORMAL, " : Specify writing to Q5/T5555 tag"); PrintAndLogEx(NORMAL, ""); PrintAndLogEx(NORMAL, "Examples:"); PrintAndLogEx(NORMAL, _YELLOW_(" lf gprox clone 26 123 11223")); @@ -175,7 +176,8 @@ static int CmdGuardClone(const char *Cmd) { } // Q5 - if (tolower(param_getchar(Cmd, 3)) == 'q') + bool q5 = tolower(param_getchar(Cmd, 3)) == 'q'; + if (q5) blocks[0] = T5555_FIXED | T5555_MODULATION_FSK2 | T5555_SET_BITRATE(50) | 3 << T5555_MAXBLOCK_SHIFT; blocks[1] = bytebits_to_byte(bs, 32); @@ -184,7 +186,7 @@ static int CmdGuardClone(const char *Cmd) { free(bs); - PrintAndLogEx(INFO, "Preparing to clone Guardall to T55x7 with Facility Code: %u, Card Number: %u", facilitycode, cardnumber); + PrintAndLogEx(INFO, "Preparing to clone Guardall to " _YELLOW_("%s") " with Facility Code: %u, Card Number: %u", (q5) ? "Q5/T5555" : "T55x7", facilitycode, cardnumber); print_blocks(blocks, ARRAYLEN(blocks)); int res = clone_t55xx_tag(blocks, ARRAYLEN(blocks)); @@ -241,7 +243,7 @@ static command_t CommandTable[] = { {"help", CmdHelp, AlwaysAvailable, "this help"}, {"demod", CmdGuardDemod, AlwaysAvailable, "demodulate a G Prox II tag from the GraphBuffer"}, {"read", CmdGuardRead, IfPm3Lf, "attempt to read and extract tag data from the antenna"}, - {"clone", CmdGuardClone, IfPm3Lf, "clone Guardall tag to T55x7"}, + {"clone", CmdGuardClone, IfPm3Lf, "clone Guardall tag to T55x7 or Q5/T5555"}, {"sim", CmdGuardSim, IfPm3Lf, "simulate Guardall tag"}, {NULL, NULL, NULL, NULL} }; From 15df8d1ce761aec946df059b9159fdcff3704227 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Fri, 28 Aug 2020 11:23:04 +0200 Subject: [PATCH 0283/1047] textual Q5 --- client/src/cmdlfindala.c | 14 +++++++------- client/src/cmdlfio.c | 13 +++++++------ 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/client/src/cmdlfindala.c b/client/src/cmdlfindala.c index 7fd640378..94500dbcf 100644 --- a/client/src/cmdlfindala.c +++ b/client/src/cmdlfindala.c @@ -557,7 +557,7 @@ static int CmdIndalaClone(const char *Cmd) { CLIParserContext *ctx; CLIParserInit(&ctx, "lf indala clone", - "clone INDALA tag to T55x7 (or to q5/T5555)", + "clone INDALA UID to T55x7 or Q5/T5555 tag", "Examples:\n" _YELLOW_("\tlf indala clone --heden 888\n") _YELLOW_("\tlf indala clone --fc 123 --cn 1337\n") @@ -566,11 +566,11 @@ static int CmdIndalaClone(const char *Cmd) { void *argtable[] = { arg_param_begin, - arg_lit0("lL", "long", "optional - long UID 224 bits"), - arg_int0("cC", "heden", "", "Cardnumber for Heden 2L format"), - arg_strx0("rR", "raw", "", "raw bytes"), - arg_lit0("qQ", "Q5", "optional - specify write to Q5 (t5555 instead of t55x7)"), - arg_int0("", "fc", "", "Facility Code (26 bit format)"), + arg_lit0("lL", "long", "optional - long UID 224 bits"), + arg_int0("cC", "heden", "", "Cardnumber for Heden 2L format"), + arg_strx0("rR", "raw", "", "raw bytes"), + arg_lit0("qQ", "Q5", "optional - specify writing to Q5/T5555 tag"), + arg_int0("", "fc", "", "Facility Code (26 bit format)"), arg_int0("", "cn", "", "Cardnumber (26 bit format)"), arg_param_end }; @@ -677,7 +677,7 @@ static command_t CommandTable[] = { {"demod", CmdIndalaDemod, AlwaysAvailable, "demodulate an indala tag (PSK1) from GraphBuffer"}, {"altdemod", CmdIndalaDemodAlt, AlwaysAvailable, "alternative method to Demodulate samples for Indala 64 bit UID (option '224' for 224 bit)"}, {"read", CmdIndalaRead, IfPm3Lf, "read an Indala Prox tag from the antenna"}, - {"clone", CmdIndalaClone, IfPm3Lf, "clone Indala tag to T55x7"}, + {"clone", CmdIndalaClone, IfPm3Lf, "clone Indala tag to T55x7 or Q5/T5555"}, {"sim", CmdIndalaSim, IfPm3Lf, "simulate Indala tag"}, {NULL, NULL, NULL, NULL} }; diff --git a/client/src/cmdlfio.c b/client/src/cmdlfio.c index aa48b75ab..1c3b676f6 100644 --- a/client/src/cmdlfio.c +++ b/client/src/cmdlfio.c @@ -59,16 +59,16 @@ static int usage_lf_io_sim(void) { } static int usage_lf_io_clone(void) { - PrintAndLogEx(NORMAL, "Enables cloning of IOProx card with specified facility-code and card number onto T55x7."); + PrintAndLogEx(NORMAL, "Enables cloning of IOProx card with specified facility-code and card number onto T55x7 or Q5/T5555 tag"); PrintAndLogEx(NORMAL, "The T55x7 must be on the antenna when issuing this command. T55x7 blocks are calculated and printed in the process."); PrintAndLogEx(NORMAL, ""); - PrintAndLogEx(NORMAL, "Usage: lf io clone [h] [Q5]"); + PrintAndLogEx(NORMAL, "Usage: lf io clone [h] "); PrintAndLogEx(NORMAL, "Options:"); PrintAndLogEx(NORMAL, " h : This help"); PrintAndLogEx(NORMAL, " : 8bit version (" _YELLOW_("decimal") ")"); PrintAndLogEx(NORMAL, " : 8bit value facility code (" _YELLOW_("hex") ")"); PrintAndLogEx(NORMAL, " : 16bit value card number (" _YELLOW_("decimal") ")"); - PrintAndLogEx(NORMAL, " Q5 : optional - clone to Q5 (T5555) instead of T55x7 chip"); + PrintAndLogEx(NORMAL, " : optional - specify writing to Q5/T5555 tag"); PrintAndLogEx(NORMAL, ""); PrintAndLogEx(NORMAL, "Examples:"); PrintAndLogEx(NORMAL, _YELLOW_(" lf io clone 01 101 1337")); @@ -274,13 +274,14 @@ static int CmdIOProxClone(const char *Cmd) { uint32_t blocks[3] = {T55x7_MODULATION_FSK2a | T55x7_BITRATE_RF_64 | 2 << T55x7_MAXBLOCK_SHIFT, 0, 0}; - if (tolower(param_getchar(Cmd, 3) == 'q')) + bool q5 = tolower(param_getchar(Cmd, 3) == 'q'); + if (q5) blocks[0] = T5555_FIXED | T5555_MODULATION_FSK2 | T5555_INVERT_OUTPUT | T5555_SET_BITRATE(64) | 2 << T5555_MAXBLOCK_SHIFT; blocks[1] = bytebits_to_byte(bits, 32); blocks[2] = bytebits_to_byte(bits + 32, 32); - PrintAndLogEx(INFO, "Preparing to clone IOProx to T55x7 with Version: %u FC: %u, CN: %u", version, fc, cn); + PrintAndLogEx(INFO, "Preparing to clone IOProx to " _YELLOW_("%s") " with Version: %u FC: %u, CN: %u", (q5) ? "Q5/T5555" : "T55x7", version, fc, cn); print_blocks(blocks, ARRAYLEN(blocks)); int res = clone_t55xx_tag(blocks, ARRAYLEN(blocks)); @@ -293,7 +294,7 @@ static command_t CommandTable[] = { {"help", CmdHelp, AlwaysAvailable, "this help"}, {"demod", CmdIOProxDemod, AlwaysAvailable, "demodulate an IOProx tag from the GraphBuffer"}, {"read", CmdIOProxRead, IfPm3Lf, "attempt to read and extract tag data"}, - {"clone", CmdIOProxClone, IfPm3Lf, "clone IOProx tag to T55x7 (or to q5/T5555)"}, + {"clone", CmdIOProxClone, IfPm3Lf, "clone IOProx tag to T55x7 or Q5/T5555"}, {"sim", CmdIOProxSim, IfPm3Lf, "simulate IOProx tag"}, {"watch", CmdIOProxWatch, IfPm3Lf, "continuously watch for cards. Reader mode"}, {NULL, NULL, NULL, NULL} From e182e805575b41a6f30a93eb77170ef8121ab2c9 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Fri, 28 Aug 2020 11:27:53 +0200 Subject: [PATCH 0284/1047] textual Q5 --- client/src/cmdlfjablotron.c | 11 ++++++----- client/src/cmdlfkeri.c | 12 +++++------- 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/client/src/cmdlfjablotron.c b/client/src/cmdlfjablotron.c index 415e3e9af..a831436e2 100644 --- a/client/src/cmdlfjablotron.c +++ b/client/src/cmdlfjablotron.c @@ -30,12 +30,12 @@ static int CmdHelp(const char *Cmd); static int usage_lf_jablotron_clone(void) { - PrintAndLogEx(NORMAL, "clone a Jablotron tag to a T55x7 tag."); + PrintAndLogEx(NORMAL, "clone a Jablotron tag to a T55x7 or Q5/T5555 tag."); PrintAndLogEx(NORMAL, "Usage: lf jablotron clone [h] "); PrintAndLogEx(NORMAL, "Options:"); PrintAndLogEx(NORMAL, " h : This help"); PrintAndLogEx(NORMAL, " : jablotron card ID"); - PrintAndLogEx(NORMAL, " : specify write to Q5 (t5555 instead of t55x7)"); + PrintAndLogEx(NORMAL, " : specify writing to Q5/T5555 tag"); PrintAndLogEx(NORMAL, ""); PrintAndLogEx(NORMAL, "Examples:"); PrintAndLogEx(NORMAL, _YELLOW_(" lf jablotron clone 112233")); @@ -153,7 +153,8 @@ static int CmdJablotronClone(const char *Cmd) { fullcode = param_get64ex(Cmd, 0, 0, 16); //Q5 - if (tolower(param_getchar(Cmd, 1)) == 'q') + bool q5 = tolower(param_getchar(Cmd, 1)) == 'q'; + if (q5) blocks[0] = T5555_FIXED | T5555_MODULATION_BIPHASE | T5555_INVERT_OUTPUT | T5555_SET_BITRATE(64) | 2 << T5555_MAXBLOCK_SHIFT; // clearing the topbit needed for the preambl detection. @@ -178,7 +179,7 @@ static int CmdJablotronClone(const char *Cmd) { free(bits); - PrintAndLogEx(INFO, "Preparing to clone Jablotron to T55x7 with FullCode: %"PRIx64, fullcode); + PrintAndLogEx(INFO, "Preparing to clone Jablotron to " _YELLOW_("%s") " with FullCode: %"PRIx64, (q5) ? "Q5/T5555" : "T55x7", fullcode); print_blocks(blocks, ARRAYLEN(blocks)); return clone_t55xx_tag(blocks, ARRAYLEN(blocks)); @@ -234,7 +235,7 @@ static command_t CommandTable[] = { {"help", CmdHelp, AlwaysAvailable, "This help"}, {"demod", CmdJablotronDemod, AlwaysAvailable, "Demodulate an Jablotron tag from the GraphBuffer"}, {"read", CmdJablotronRead, IfPm3Lf, "Attempt to read and extract tag data from the antenna"}, - {"clone", CmdJablotronClone, IfPm3Lf, "clone jablotron tag to T55x7 (or to q5/T5555)"}, + {"clone", CmdJablotronClone, IfPm3Lf, "clone jablotron tag to T55x7 or Q5/T5555"}, {"sim", CmdJablotronSim, IfPm3Lf, "simulate jablotron tag"}, {NULL, NULL, NULL, NULL} }; diff --git a/client/src/cmdlfkeri.c b/client/src/cmdlfkeri.c index 91ff23f49..0d4c6e8b8 100644 --- a/client/src/cmdlfkeri.c +++ b/client/src/cmdlfkeri.c @@ -28,13 +28,13 @@ static int CmdHelp(const char *Cmd); static int usage_lf_keri_clone(void) { - PrintAndLogEx(NORMAL, "clone a KERI tag to a T55x7 / T5555 (Q5) tag\n"); + PrintAndLogEx(NORMAL, "clone a KERI tag to a T55x7 or Q5/T5555 tag\n"); PrintAndLogEx(NORMAL, "Usage: lf keri clone [h] "); - PrintAndLogEx(NORMAL, "Usage extended: lf keri clone [h] t [f ] [c ] [Q5]"); + PrintAndLogEx(NORMAL, "Usage extended: lf keri clone [h] t [f ] [c ] "); PrintAndLogEx(NORMAL, "Options:"); PrintAndLogEx(NORMAL, " h : This help"); PrintAndLogEx(NORMAL, " : Keri Internal ID"); - PrintAndLogEx(NORMAL, " : specify write to Q5 (t5555 instead of t55x7)"); + PrintAndLogEx(NORMAL, " : specify writing to Q5/T5555 tag"); // New format PrintAndLogEx(NORMAL, " [m|i] : Type m - MS, i - Internal ID"); PrintAndLogEx(NORMAL, " : Facility Code"); @@ -212,8 +212,6 @@ int demodKeri(void) { return PM3_SUCCESS; } - - static int CmdKeriRead(const char *Cmd) { lf_read(false, 10000); return CmdKeriDemod(Cmd); @@ -288,7 +286,7 @@ static int CmdKeriClone(const char *Cmd) { // Prepare and write to card // 3 LSB is ONE uint64_t data = ((uint64_t)internalid << 3) + 7; - PrintAndLogEx(INFO, "Preparing to clone KERI to " _YELLOW_("%s") " with Internal Id " _YELLOW_("%" PRIx32), (q5) ? "T5555/Q5" : "T55x77",internalid); + PrintAndLogEx(INFO, "Preparing to clone KERI to " _YELLOW_("%s") " with Internal Id " _YELLOW_("%" PRIx32), (q5) ? "Q5/T5555" : "T55x7",internalid); blocks[1] = data >> 32; blocks[2] = data & 0xFFFFFFFF; @@ -346,7 +344,7 @@ static command_t CommandTable[] = { {"help", CmdHelp, AlwaysAvailable, "This help"}, {"demod", CmdKeriDemod, AlwaysAvailable, "Demodulate an KERI tag from the GraphBuffer"}, {"read", CmdKeriRead, IfPm3Lf, "Attempt to read and extract tag data from the antenna"}, - {"clone", CmdKeriClone, IfPm3Lf, "clone KERI tag to T55x7 (or to q5/T5555)"}, + {"clone", CmdKeriClone, IfPm3Lf, "clone KERI tag to T55x7 or Q5/T5555"}, {"sim", CmdKeriSim, IfPm3Lf, "simulate KERI tag"}, {NULL, NULL, NULL, NULL} }; From 5cc9705ccfea8bc36016a3c551235d9c34287ac4 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Fri, 28 Aug 2020 15:45:55 +0200 Subject: [PATCH 0285/1047] textual Q5 --- client/src/cmdlfnoralsy.c | 11 ++++++----- client/src/cmdlfpresco.c | 8 ++++---- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/client/src/cmdlfnoralsy.c b/client/src/cmdlfnoralsy.c index d19de0e1d..ab6884abc 100644 --- a/client/src/cmdlfnoralsy.c +++ b/client/src/cmdlfnoralsy.c @@ -26,13 +26,13 @@ static int CmdHelp(const char *Cmd); static int usage_lf_noralsy_clone(void) { - PrintAndLogEx(NORMAL, "clone a Noralsy tag to a T55x7 tag."); + PrintAndLogEx(NORMAL, "clone a Noralsy tag to a T55x7 or Q5/T5555 tag."); PrintAndLogEx(NORMAL, "Usage: lf noralsy clone [h] "); PrintAndLogEx(NORMAL, "Options:"); PrintAndLogEx(NORMAL, " h : This help"); PrintAndLogEx(NORMAL, " : Noralsy card ID"); PrintAndLogEx(NORMAL, " : Tag allocation year"); - PrintAndLogEx(NORMAL, " : specify write to Q5 (t5555 instead of t55x7)"); + PrintAndLogEx(NORMAL, " : specify writing to Q5/T5555 tag"); PrintAndLogEx(NORMAL, ""); PrintAndLogEx(NORMAL, "Examples:"); PrintAndLogEx(NORMAL, _YELLOW_(" lf noralsy clone 112233")); @@ -150,7 +150,8 @@ static int CmdNoralsyClone(const char *Cmd) { year = param_get32ex(Cmd, 1, 2000, 10); //Q5 - if (tolower(param_getchar(Cmd, 2) == 'q')) + bool q5 = tolower(param_getchar(Cmd, 2) == 'q'); + if (q5) blocks[0] = T5555_FIXED | T5555_MODULATION_MANCHESTER | T5555_SET_BITRATE(32) | T5555_ST_TERMINATOR | 3 << T5555_MAXBLOCK_SHIFT; uint8_t *bits = calloc(96, sizeof(uint8_t)); @@ -166,7 +167,7 @@ static int CmdNoralsyClone(const char *Cmd) { free(bits); - PrintAndLogEx(INFO, "Preparing to clone Noralsy to T55x7 with CardId: %u", id); + PrintAndLogEx(INFO, "Preparing to clone Noralsy to " _YELLOW_("%s") " with CardId: %u", (q5) ? "Q5/T5555" : "T55x7", id); print_blocks(blocks, ARRAYLEN(blocks)); int res = clone_t55xx_tag(blocks, ARRAYLEN(blocks)); @@ -222,7 +223,7 @@ static command_t CommandTable[] = { {"help", CmdHelp, AlwaysAvailable, "This help"}, {"demod", CmdNoralsyDemod, AlwaysAvailable, "Demodulate an Noralsy tag from the GraphBuffer"}, {"read", CmdNoralsyRead, IfPm3Lf, "Attempt to read and extract tag data from the antenna"}, - {"clone", CmdNoralsyClone, IfPm3Lf, "clone Noralsy tag to T55x7 (or to q5/T5555)"}, + {"clone", CmdNoralsyClone, IfPm3Lf, "clone Noralsy tag to T55x7 or Q5/T5555"}, {"sim", CmdNoralsySim, IfPm3Lf, "simulate Noralsy tag"}, {NULL, NULL, NULL, NULL} }; diff --git a/client/src/cmdlfpresco.c b/client/src/cmdlfpresco.c index f29439ce9..5e1ab1611 100644 --- a/client/src/cmdlfpresco.c +++ b/client/src/cmdlfpresco.c @@ -27,13 +27,13 @@ static int CmdHelp(const char *Cmd); static int usage_lf_presco_clone(void) { - PrintAndLogEx(NORMAL, "clone a Presco tag to a T55x7 tag."); + PrintAndLogEx(NORMAL, "clone a Presco tag to a T55x7 or Q5/T555 tag."); PrintAndLogEx(NORMAL, "Usage: lf presco clone [h] d c "); PrintAndLogEx(NORMAL, "Options:"); PrintAndLogEx(NORMAL, " h : this help"); PrintAndLogEx(NORMAL, " d : 9 digit presco card ID"); PrintAndLogEx(NORMAL, " c : 8 digit hex card number"); - PrintAndLogEx(NORMAL, " : specify write to Q5 (t5555 instead of t55x7)"); + PrintAndLogEx(NORMAL, " : specify writing to Q5/T5555 tag"); PrintAndLogEx(NORMAL, ""); PrintAndLogEx(NORMAL, "Examples:"); PrintAndLogEx(NORMAL, _YELLOW_(" lf presco clone d 123456789")); @@ -133,7 +133,7 @@ static int CmdPrescoClone(const char *Cmd) { blocks[3] = 0x00000000; blocks[4] = fullcode; - PrintAndLogEx(INFO, "Preparing to clone Presco to T55x7 with SiteCode: %u, UserCode: %u, FullCode: %08x", sitecode, usercode, fullcode); + PrintAndLogEx(INFO, "Preparing to clone Presco to " _YELLOW_("%s") " with SiteCode: %u, UserCode: %u, FullCode: %08x", (Q5) ? "Q5/T5555" : "T55x7", sitecode, usercode, fullcode); print_blocks(blocks, ARRAYLEN(blocks)); int res = clone_t55xx_tag(blocks, ARRAYLEN(blocks)); @@ -179,7 +179,7 @@ static int CmdPrescoSim(const char *Cmd) { static command_t CommandTable[] = { {"help", CmdHelp, AlwaysAvailable, "This help"}, {"read", CmdPrescoRead, IfPm3Lf, "Attempt to read and Extract tag data"}, - {"clone", CmdPrescoClone, IfPm3Lf, "clone presco tag to T55x7 (or to q5/T5555)"}, + {"clone", CmdPrescoClone, IfPm3Lf, "clone presco tag to T55x7 or Q5/T5555"}, {"sim", CmdPrescoSim, IfPm3Lf, "simulate presco tag"}, {NULL, NULL, NULL, NULL} }; From 96819da54a73f509e64a8b05f49cc122b2b63c63 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Fri, 28 Aug 2020 15:50:23 +0200 Subject: [PATCH 0286/1047] textual Q5 --- client/src/cmdlfpyramid.c | 11 ++++++----- client/src/cmdlfviking.c | 14 +++++++++----- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/client/src/cmdlfpyramid.c b/client/src/cmdlfpyramid.c index 9549a71e3..6b4fcda0f 100644 --- a/client/src/cmdlfpyramid.c +++ b/client/src/cmdlfpyramid.c @@ -31,7 +31,7 @@ static int CmdHelp(const char *Cmd); static int usage_lf_pyramid_clone(void) { - PrintAndLogEx(NORMAL, "clone a Farpointe/Pyramid tag to a T55x7 tag."); + PrintAndLogEx(NORMAL, "clone a Farpointe/Pyramid tag to a T55x7 or Q5/T5555 tag."); PrintAndLogEx(NORMAL, "The facility-code is 8-bit and the card number is 16-bit. Larger values are truncated. "); PrintAndLogEx(NORMAL, "Currently only works on 26bit"); PrintAndLogEx(NORMAL, ""); @@ -40,7 +40,7 @@ static int usage_lf_pyramid_clone(void) { PrintAndLogEx(NORMAL, " h : this help"); PrintAndLogEx(NORMAL, " : 8-bit value facility code"); PrintAndLogEx(NORMAL, " : 16-bit value card number"); - PrintAndLogEx(NORMAL, " Q5 : optional - clone to Q5 (T5555) instead of T55x7 chip"); + PrintAndLogEx(NORMAL, " Q5 : optional - specify writing to Q5/T5555 tag"); PrintAndLogEx(NORMAL, ""); PrintAndLogEx(NORMAL, "Examples:"); PrintAndLogEx(NORMAL, _YELLOW_(" lf pyramid clone 123 11223")); @@ -242,7 +242,8 @@ static int CmdPyramidClone(const char *Cmd) { blocks[0] = T55x7_MODULATION_FSK2a | T55x7_BITRATE_RF_50 | 4 << T55x7_MAXBLOCK_SHIFT; // Q5 - if (tolower(param_getchar(Cmd, 2)) == 'q') + bool q5 = tolower(param_getchar(Cmd, 2)) == 'q'; + if (q5) blocks[0] = T5555_FIXED | T5555_MODULATION_FSK2 | T5555_INVERT_OUTPUT | T5555_SET_BITRATE(50) | 4 << T5555_MAXBLOCK_SHIFT; blocks[1] = bytebits_to_byte(bs, 32); @@ -252,7 +253,7 @@ static int CmdPyramidClone(const char *Cmd) { free(bs); - PrintAndLogEx(INFO, "Preparing to clone Farpointe/Pyramid to T55x7 with Facility Code: %u, Card Number: %u", facilitycode, cardnumber); + PrintAndLogEx(INFO, "Preparing to clone Farpointe/Pyramid to " _YELLOW_("%s") " with Facility Code: %u, Card Number: %u", (q5) ? "Q5/T5555" : "T55x7" , facilitycode, cardnumber); print_blocks(blocks, ARRAYLEN(blocks)); int res = clone_t55xx_tag(blocks, ARRAYLEN(blocks)); @@ -308,7 +309,7 @@ static command_t CommandTable[] = { {"help", CmdHelp, AlwaysAvailable, "this help"}, {"demod", CmdPyramidDemod, AlwaysAvailable, "demodulate a Pyramid FSK tag from the GraphBuffer"}, {"read", CmdPyramidRead, IfPm3Lf, "attempt to read and extract tag data"}, - {"clone", CmdPyramidClone, IfPm3Lf, "clone pyramid tag to T55x7 (or to q5/T5555)"}, + {"clone", CmdPyramidClone, IfPm3Lf, "clone pyramid tag to T55x7 or Q5/T5555"}, {"sim", CmdPyramidSim, IfPm3Lf, "simulate pyramid tag"}, {NULL, NULL, NULL, NULL} }; diff --git a/client/src/cmdlfviking.c b/client/src/cmdlfviking.c index 445dbc209..614442460 100644 --- a/client/src/cmdlfviking.c +++ b/client/src/cmdlfviking.c @@ -27,15 +27,15 @@ static int CmdHelp(const char *Cmd); static int usage_lf_viking_clone(void) { - PrintAndLogEx(NORMAL, "clone a Viking AM tag to a T55x7 tag."); + PrintAndLogEx(NORMAL, "clone a Viking AM tag to a T55x7 or Q5/T5555 tag."); PrintAndLogEx(NORMAL, "Usage: lf viking clone "); PrintAndLogEx(NORMAL, "Options:"); PrintAndLogEx(NORMAL, " : 8 digit hex viking card number"); - PrintAndLogEx(NORMAL, " : specify write to Q5 (t5555 instead of t55x7)"); + PrintAndLogEx(NORMAL, " : specify writing to Q5/T5555 tag)"); PrintAndLogEx(NORMAL, ""); PrintAndLogEx(NORMAL, "Examples:"); PrintAndLogEx(NORMAL, _YELLOW_(" lf viking clone 1A337")); - PrintAndLogEx(NORMAL, _YELLOW_(" lf viking clone 1A337 Q5")); + PrintAndLogEx(NORMAL, _YELLOW_(" lf viking clone 1A337 Q5") " - encode for Q5/T5555 tag"); return PM3_SUCCESS; } @@ -114,7 +114,11 @@ static int CmdVikingClone(const char *Cmd) { num_to_bytes(rawID, 8, &payload.blocks[0]); - PrintAndLogEx(INFO, "Preparing to clone Viking tag - ID " _YELLOW_("%08X")" raw " _YELLOW_("%s"), id, sprint_hex(payload.blocks, sizeof(payload.blocks))); + PrintAndLogEx(INFO, "Preparing to clone Viking tag on " _YELLOW_("%s") " - ID " _YELLOW_("%08X")" raw " _YELLOW_("%s") + , (Q5) ? "Q5/T5555" : "T55x7" + , id + , sprint_hex(payload.blocks, sizeof(payload.blocks)) + ); clearCommandBuffer(); @@ -169,7 +173,7 @@ static command_t CommandTable[] = { {"help", CmdHelp, AlwaysAvailable, "This help"}, {"demod", CmdVikingDemod, AlwaysAvailable, "Demodulate a Viking tag from the GraphBuffer"}, {"read", CmdVikingRead, IfPm3Lf, "Attempt to read and Extract tag data from the antenna"}, - {"clone", CmdVikingClone, IfPm3Lf, "clone Viking tag to T55x7 (or to q5/T5555)"}, + {"clone", CmdVikingClone, IfPm3Lf, "clone Viking tag to T55x7 or Q5/T5555"}, {"sim", CmdVikingSim, IfPm3Lf, "simulate Viking tag"}, {NULL, NULL, NULL, NULL} }; From 1f8bad379836922a0e1e07283679314fb3267306 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Fri, 28 Aug 2020 15:53:34 +0200 Subject: [PATCH 0287/1047] textual Q5 --- client/src/cmdlft55xx.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/client/src/cmdlft55xx.c b/client/src/cmdlft55xx.c index dd28071cd..c038f6973 100644 --- a/client/src/cmdlft55xx.c +++ b/client/src/cmdlft55xx.c @@ -86,7 +86,7 @@ static int usage_t55xx_config(void) { PrintAndLogEx(NORMAL, " d - Set demodulation FSK / ASK / PSK / NRZ / Biphase / Biphase A"); PrintAndLogEx(NORMAL, " i [0/1] - Set/reset data signal inversion"); PrintAndLogEx(NORMAL, " o [offset] - Set offset, where data should start decode in bitstream"); - PrintAndLogEx(NORMAL, " Q5 [0/1] - Set/reset as T5555 ( Q5 ) chip instead of T55x7"); + PrintAndLogEx(NORMAL, " Q5 [0/1] - Set/reset as Q5/T5555 chip instead of T55x7"); PrintAndLogEx(NORMAL, " ST [0/1] - Set/reset Sequence Terminator on"); PrintAndLogEx(NORMAL, ""); // layout is a little differnet, so seperate until a better fix print_usage_t55xx_downloadlink(T55XX_DLMODE_SINGLE, config.downlink_mode); @@ -311,11 +311,11 @@ static int usage_t55xx_wipe(void) { PrintAndLogEx(NORMAL, "Options:"); PrintAndLogEx(NORMAL, " h - this help"); PrintAndLogEx(NORMAL, " c - set configuration from a block0"); - PrintAndLogEx(NORMAL, " q - indicates to use T5555 ( Q5 ) default configuration block"); + PrintAndLogEx(NORMAL, " q - indicates to use Q5/T5555 default configuration block"); PrintAndLogEx(NORMAL, ""); PrintAndLogEx(NORMAL, "Examples:"); PrintAndLogEx(NORMAL, _YELLOW_(" lf t55xx wipe") " - wipes a T55x7 tag, config block 0x000880E0"); - PrintAndLogEx(NORMAL, _YELLOW_(" lf t55xx wipe q") " - wipes a T5555 ( Q5 ) tag, config block 0x6001F004"); + PrintAndLogEx(NORMAL, _YELLOW_(" lf t55xx wipe q") " - wipes a Q5/T5555 tag, config block 0x6001F004"); return PM3_SUCCESS; } static int usage_t55xx_deviceconfig(void) { @@ -1587,7 +1587,7 @@ int special(const char *Cmd) { } int printConfiguration(t55xx_conf_block_t b) { - PrintAndLogEx(INFO, " Chip Type : " _GREEN_("%s"), (b.Q5) ? "T5555 ( Q5 )" : "T55x7"); + PrintAndLogEx(INFO, " Chip Type : " _GREEN_("%s"), (b.Q5) ? "Q5/T5555" : "T55x7"); PrintAndLogEx(INFO, " Modulation : " _GREEN_("%s"), GetSelectedModulationStr(b.modulation)); PrintAndLogEx(INFO, " Bit Rate : %s", GetBitRateStr(b.bitrate, (b.block0 & T55x7_X_MODE && (b.block0 >> 28 == 6 || b.block0 >> 28 == 9)))); PrintAndLogEx(INFO, " Inverted : %s", (b.inverted) ? _GREEN_("Yes") : "No"); @@ -1864,7 +1864,7 @@ static int CmdT55xxReadTrace(const char *Cmd) { si += 9; if (hdr != 0x1FF) { - PrintAndLogEx(FAILED, "Invalid T555 ( Q5 ) Trace data header (expected 0x1FF, found %X)", hdr); + PrintAndLogEx(FAILED, "Invalid Q5/T5555 Trace data header (expected 0x1FF, found %X)", hdr); return PM3_ESOFT; } @@ -1955,7 +1955,7 @@ static int CmdT55xxReadTrace(const char *Cmd) { } void printT55x7Trace(t55x7_tracedata_t data, uint8_t repeat) { - PrintAndLogEx(NORMAL, "-- T55x7 Trace Information ----------------------------------"); + PrintAndLogEx(NORMAL, "--- " _CYAN_("T55x7 Trace Information") " ----------------------------------"); PrintAndLogEx(NORMAL, "-------------------------------------------------------------"); PrintAndLogEx(NORMAL, " ACL Allocation class (ISO/IEC 15963-1) : 0x%02X (%d)", data.acl, data.acl); PrintAndLogEx(NORMAL, " MFC Manufacturer ID (ISO/IEC 7816-6) : 0x%02X (%d) - %s", data.mfc, data.mfc, getTagInfo(data.mfc)); @@ -2002,7 +2002,7 @@ void printT55x7Trace(t55x7_tracedata_t data, uint8_t repeat) { } void printT5555Trace(t5555_tracedata_t data, uint8_t repeat) { - PrintAndLogEx(NORMAL, "-- T5555 ( Q5 ) Trace Information ---------------------------"); + PrintAndLogEx(NORMAL, "--- " _CYAN_("Q5/T5555 Trace Information") " ---------------------------"); PrintAndLogEx(NORMAL, "-------------------------------------------------------------"); PrintAndLogEx(NORMAL, " ICR IC Revision : %d", data.icr); PrintAndLogEx(NORMAL, " Lot : %c%d", data.lotidc, data.lotid); @@ -2811,7 +2811,7 @@ static void t55x7_create_config_block(int tagtype) { snprintf(retStr, sizeof(buf), "%08X - T55X7 Raw", T55X7_RAW_CONFIG_BLOCK); break; case 2: - snprintf(retStr, sizeof(buf), "%08X - T5555 ( Q5 ) Default", T5555_DEFAULT_CONFIG_BLOCK); + snprintf(retStr, sizeof(buf), "%08X - Q5/T5555 Default", T5555_DEFAULT_CONFIG_BLOCK); break; default: break; @@ -2916,7 +2916,7 @@ static int CmdT55xxWipe(const char *Cmd) { if (errors) return usage_t55xx_wipe(); - PrintAndLogEx(INFO, "\nBegin wiping %s", (Q5) ? "T5555 ( Q5 ) tag" : "T55x7 tag"); + PrintAndLogEx(INFO, "\nBegin wiping " _YELLOW_("%s")" tag", (Q5) ? "Q5/T5555" : "T55x7"); // default config blocks. if (gotconf == false) { From 57feefcfcb16dfa8488ebdf185e90e5525bf9d30 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Fri, 28 Aug 2020 15:57:15 +0200 Subject: [PATCH 0288/1047] textual Q5 --- client/src/cmdlfpresco.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/src/cmdlfpresco.c b/client/src/cmdlfpresco.c index 5e1ab1611..051be2126 100644 --- a/client/src/cmdlfpresco.c +++ b/client/src/cmdlfpresco.c @@ -27,7 +27,7 @@ static int CmdHelp(const char *Cmd); static int usage_lf_presco_clone(void) { - PrintAndLogEx(NORMAL, "clone a Presco tag to a T55x7 or Q5/T555 tag."); + PrintAndLogEx(NORMAL, "clone a Presco tag to a T55x7 or Q5/T5555 tag."); PrintAndLogEx(NORMAL, "Usage: lf presco clone [h] d c "); PrintAndLogEx(NORMAL, "Options:"); PrintAndLogEx(NORMAL, " h : this help"); From 5c343f653727a045b7cc12b4f6691cfd8e6c64a1 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Fri, 28 Aug 2020 19:05:05 +0200 Subject: [PATCH 0289/1047] adapt Q5/T5555 for nedap clone --- client/src/cmdlfnedap.c | 34 +++++++++++++++++++++------------- 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/client/src/cmdlfnedap.c b/client/src/cmdlfnedap.c index 4d8580352..b2e2b9bf4 100644 --- a/client/src/cmdlfnedap.c +++ b/client/src/cmdlfnedap.c @@ -9,18 +9,21 @@ #include "cmdlfnedap.h" +#define _GNU_SOURCE #include #include #include + #include "cmdparser.h" // command_t #include "comms.h" #include "crc16.h" -#include "cmdlft55xx.h" // verifywrite +#include "cmdlft55xx.h" // verify write #include "ui.h" #include "cmddata.h" #include "cmdlf.h" #include "lfdemod.h" +#include "protocols.h" #define FIXED_71 0x71 #define FIXED_40 0x40 @@ -47,16 +50,16 @@ static int usage_lf_nedap_gen(void) { } static int usage_lf_nedap_clone(void) { - PrintAndLogEx(NORMAL, "clone a Nedap tag to a T55x7 tag."); + PrintAndLogEx(NORMAL, "clone a Nedap tag to a T55x7 or Q5/T5555 tag."); PrintAndLogEx(NORMAL, ""); - PrintAndLogEx(NORMAL, "Usage: lf nedap clone [h] [s ] c i [l]"); + PrintAndLogEx(NORMAL, "Usage: lf nedap clone [h] [s ] c i [l] "); PrintAndLogEx(NORMAL, "Options:"); PrintAndLogEx(NORMAL, " h : This help"); PrintAndLogEx(NORMAL, " s : optional, default=5"); PrintAndLogEx(NORMAL, " c : customerCode"); PrintAndLogEx(NORMAL, " i : ID (max 99999)"); PrintAndLogEx(NORMAL, " l : optional - long (128), default to short (64)"); -// PrintAndLogEx(NORMAL, " Q5 : optional - clone to Q5 (T5555) instead of T55x7 chip"); + PrintAndLogEx(NORMAL, " Q5 : optional - specify writing to Q5/T5555 tag"); PrintAndLogEx(NORMAL, ""); PrintAndLogEx(NORMAL, "Examples:"); PrintAndLogEx(NORMAL, _YELLOW_(" lf nedap clone s 1 c 123 i 12345")); @@ -399,6 +402,9 @@ static int CmdLfNedapGen(const char *Cmd) { isLong = true; cmdp++; break; + case 'q': + cmdp++; + break; default: PrintAndLogEx(WARNING, "Unknown parameter '%c'", param_getchar(Cmd, cmdp)); errors = true; @@ -449,14 +455,8 @@ static int CmdLFNedapClone(const char *Cmd) { return PM3_ESOFT; } - //CmdPrintDemodBuff("x"); - -// What we had before in commented code: //NEDAP - compat mode, ASK/DIphase, data rate 64, 4 data blocks // DI-phase (CDP) T55x7_MODULATION_DIPHASE -// blocks[0] = T55x7_MODULATION_DIPHASE | T55x7_BITRATE_RF_64 | 7 << T55x7_MAXBLOCK_SHIFT; -// if (tolower(param_getchar(Cmd, 3)) == 'q') -// blocks[0] = T5555_FIXED | T5555_MODULATION_BIPHASE | T5555_INVERT_OUTPUT | T5555_SET_BITRATE(64) | 7 < Date: Fri, 28 Aug 2020 19:17:11 +0200 Subject: [PATCH 0290/1047] no printf --- client/src/cmddata.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/client/src/cmddata.c b/client/src/cmddata.c index 75179ce5e..d85733370 100644 --- a/client/src/cmddata.c +++ b/client/src/cmddata.c @@ -2104,11 +2104,10 @@ static int Cmdhex2bin(const char *Cmd) { else continue; - //Uses printf instead of PrintAndLog since the latter adds linebreaks to each printout for (int i = 0 ; i < 4 ; ++i) - printf("%d", (x >> (3 - i)) & 1); + PrintAndLogEx(NORMAL, "%d" NOLF, (x >> (3 - i)) & 1); } - PrintAndLogEx(NORMAL, "\n"); + PrintAndLogEx(NORMAL, ""); return PM3_SUCCESS; } From 0270a25808ef949c777cbed7b2cf4f5ae862087c Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Fri, 28 Aug 2020 19:24:10 +0200 Subject: [PATCH 0291/1047] no printf --- client/src/cmdhf.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/client/src/cmdhf.c b/client/src/cmdhf.c index 5fea3c61e..ba3710e6e 100644 --- a/client/src/cmdhf.c +++ b/client/src/cmdhf.c @@ -85,6 +85,7 @@ static int usage_hf_tune(void) { } #define PROMPT_CLEARLINE PrintAndLogEx(INPLACE, " ") +#define PROMPT_EMPTYLINE PrintAndLogEx(NORMAL, "\r "); int CmdHFSearch(const char *Cmd) { @@ -193,7 +194,8 @@ int CmdHFSearch(const char *Cmd) { PrintAndLogEx(INPLACE, _RED_("No known/supported 13.56 MHz tags found")); res = PM3_ESOFT; } - printf("\n"); + + PROMPT_EMPTYLINE; return res; } From 7bd008dde3d1b54d43c106d7ea85b4ef2f138aa6 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sat, 29 Aug 2020 11:31:03 +0200 Subject: [PATCH 0292/1047] analyze freq, calculates wavelengths. --- client/src/cmdanalyse.c | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/client/src/cmdanalyse.c b/client/src/cmdanalyse.c index c4fe2d795..b701dbd3b 100644 --- a/client/src/cmdanalyse.c +++ b/client/src/cmdanalyse.c @@ -12,7 +12,7 @@ #include // size_t #include #include // tolower -#include // printf +//#include // printf #include "commonutil.h" // reflect... #include "comms.h" // clearCommandBuffer #include "cmdparser.h" // command_t @@ -914,16 +914,33 @@ static int CmdAnalyseDemodBuffer(const char *Cmd) { if (c == '0') DemodBuffer[i] = 0; - printf("%c", c); + PrintAndLogEx(NORMAL, "%c" NOLF, c); } - printf("\n"); + PrintAndLogEx(NORMAL, ""); DemodBufferLen = len; free(data); return PM3_SUCCESS; } +static int CmdAnalyseFreq(const char *Cmd) { + +// char cmdp = tolower(param_getchar(Cmd, 0)); +// if (strlen(Cmd) == 0 || cmdp == 'h') return usage_analyse_freq(); + + const double c = 299792458; + double len_125 = c / 125000; + double len_134 = c / 134000; + double len_1356 = c / 13560000; + + PrintAndLogEx(INFO, "Wavelengths"); + PrintAndLogEx(INFO, " 125 kHz has %f meters", len_125); + PrintAndLogEx(INFO, " 134 kHz has %f meters", len_134); + PrintAndLogEx(INFO, " 13.56 mHz has %f meters", len_1356); + return PM3_SUCCESS; +} + static command_t CommandTable[] = { {"help", CmdHelp, AlwaysAvailable, "This help"}, {"lcr", CmdAnalyseLCR, AlwaysAvailable, "Generate final byte for XOR LRC"}, @@ -934,7 +951,8 @@ static command_t CommandTable[] = { {"lfsr", CmdAnalyseLfsr, AlwaysAvailable, "LFSR tests"}, {"a", CmdAnalyseA, AlwaysAvailable, "num bits test"}, {"nuid", CmdAnalyseNuid, AlwaysAvailable, "create NUID from 7byte UID"}, - {"demodbuff", CmdAnalyseDemodBuffer, AlwaysAvailable, "Load binary string to demodbuffer"}, + {"demodbuff", CmdAnalyseDemodBuffer, AlwaysAvailable, "Load binary string to demodbuffer"}, + {"freq", CmdAnalyseFreq, AlwaysAvailable, "Calc wave lengths"}, {NULL, NULL, NULL, NULL} }; From a34b9293e891e72a7eb44a7e484c8028d055853f Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sat, 29 Aug 2020 11:55:36 +0200 Subject: [PATCH 0293/1047] printf remove --- client/src/cmdhf14b.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/client/src/cmdhf14b.c b/client/src/cmdhf14b.c index 315ef6cd4..106fa0890 100644 --- a/client/src/cmdhf14b.c +++ b/client/src/cmdhf14b.c @@ -909,7 +909,7 @@ static int CmdHF14BDump(const char *Cmd) { req[1] = blocknum; clearCommandBuffer(); - SendCommandMIX(CMD_HF_ISO14443B_COMMAND, ISO14B_APPEND_CRC | ISO14B_RAW, 2, 0, req, sizeof(req)); + SendCommandMIX(CMD_HF_ISO14443B_COMMAND, ISO14B_APPEND_CRC | ISO14B_RAW, 2, 0, req, sizeof(req)); if (WaitForResponseTimeout(CMD_HF_ISO14443B_COMMAND, &resp, 2000)) { @@ -940,17 +940,16 @@ static int CmdHF14BDump(const char *Cmd) { blocknum = 0xFF; } - printf("."); - fflush(stdout); + PrintAndLogEx(NORMAL, "." NOLF); } } + PrintAndLogEx(NORMAL, ""); if (blocknum != 0xFF) { - PrintAndLogEx(NORMAL, "\n Dump failed"); + PrintAndLogEx(NORMAL, "Dump failed"); goto out; } - PrintAndLogEx(NORMAL, ""); PrintAndLogEx(NORMAL, "block# | data | ascii"); PrintAndLogEx(NORMAL, "---------+--------------+----------"); From 04c5091018a02f551ab3ff58af67ed5b53d36601 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sat, 29 Aug 2020 11:57:31 +0200 Subject: [PATCH 0294/1047] printf remove --- client/src/cmdhf15.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/client/src/cmdhf15.c b/client/src/cmdhf15.c index 49ed24c43..ceadb5c23 100644 --- a/client/src/cmdhf15.c +++ b/client/src/cmdhf15.c @@ -1266,8 +1266,7 @@ static int CmdHF15Dump(const char *Cmd) { retry = 0; blocknum++; - printf("."); - fflush(stdout); + PrintAndLogEx(NORMAL, "." NOLF); } } From 7b14c9853050f1949b47d92be2a4bd8834e0169c Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sat, 29 Aug 2020 11:58:36 +0200 Subject: [PATCH 0295/1047] printf remove --- client/src/wiegand_formatutils.c | 1 - 1 file changed, 1 deletion(-) diff --git a/client/src/wiegand_formatutils.c b/client/src/wiegand_formatutils.c index 0d58e9d6f..3879e616e 100644 --- a/client/src/wiegand_formatutils.c +++ b/client/src/wiegand_formatutils.c @@ -134,7 +134,6 @@ static uint8_t get_length_from_header(wiegand_message_t *data) { hfmt = 0; len = 37; } else if ((data->Mid & 0x0000001F) > 0) { // 36-32 bits - printf("a\n"); hfmt = data->Mid & 0x0000001F; len = 32; } else { From f31aea23bdd1fbbf66b3df6cf9461eaeb72d78ae Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sat, 29 Aug 2020 13:58:48 +0200 Subject: [PATCH 0296/1047] no printf --- client/src/cmdhffelica.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/client/src/cmdhffelica.c b/client/src/cmdhffelica.c index f62a9a8ff..1cbcf6171 100644 --- a/client/src/cmdhffelica.c +++ b/client/src/cmdhffelica.c @@ -1630,27 +1630,30 @@ static int CmdHFFelicaDumpLite(const char *Cmd) { uint8_t timeout = 0; while (!WaitForResponseTimeout(CMD_ACK, &resp, 2000)) { timeout++; - printf("."); + PrintAndLogEx(NORMAL, "." NOLF); fflush(stdout); if (kbd_enter_pressed()) { - PrintAndLogEx(WARNING, "aborted via keyboard!\n"); + PrintAndLogEx(WARNING, "\naborted via keyboard!\n"); DropField(); return PM3_EOPABORTED; } - if (timeout > 100) { - PrintAndLogEx(WARNING, "timeout while waiting for reply."); + if (timeout > 10) { + PrintAndLogEx(WARNING, "\ntimeout while waiting for reply."); DropField(); return PM3_ETIMEOUT; } } + + PrintAndLogEx(NORMAL, ""); + if (resp.oldarg[0] == 0) { - PrintAndLogEx(WARNING, "\nButton pressed. Aborted."); + PrintAndLogEx(WARNING, "Button pressed, aborted"); return PM3_EOPABORTED; } uint32_t tracelen = resp.oldarg[1]; if (tracelen == 0) { - PrintAndLogEx(WARNING, "\nNo trace data! Maybe not a FeliCa Lite card?"); + PrintAndLogEx(WARNING, "No trace data! Maybe not a FeliCa Lite card?"); return PM3_ESOFT; } From 7c3e8335c34212686bdae14ed46f2c6230aeba62 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sat, 29 Aug 2020 14:00:18 +0200 Subject: [PATCH 0297/1047] no printf --- client/src/cmdhfmfu.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/client/src/cmdhfmfu.c b/client/src/cmdhfmfu.c index c4a8ce0eb..fc98385cc 100644 --- a/client/src/cmdhfmfu.c +++ b/client/src/cmdhfmfu.c @@ -2306,8 +2306,7 @@ static int CmdHF14AMfURestore(const char *Cmd) { clearCommandBuffer(); SendCommandMIX(CMD_HF_MIFAREU_WRITEBL, b, keytype, 0, data, sizeof(data)); wait4response(b); - printf("."); - fflush(stdout); + PrintAndLogEx(NORMAL, "." NOLF); } PrintAndLogEx(NORMAL, "\n"); From 92442dcbefcc9304c88c41ef1da36527b19e9deb Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sat, 29 Aug 2020 14:01:15 +0200 Subject: [PATCH 0298/1047] no printf --- client/src/cmdhw.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/client/src/cmdhw.c b/client/src/cmdhw.c index 64518c3ae..4c93210eb 100644 --- a/client/src/cmdhw.c +++ b/client/src/cmdhw.c @@ -696,7 +696,7 @@ void pm3_version(bool verbose, bool oneliner) { // For "proxmark3 -v", simple printf, avoid logging char temp[PM3_CMD_DATA_SIZE - 12]; // same limit as for ARM image FormatVersionInformation(temp, sizeof(temp), "Client: ", &version_information); - printf("%s compiled with " PM3CLIENTCOMPILER __VERSION__ PM3HOSTOS PM3HOSTARCH "\n", temp); + PrintAndLogEx(NORMAL, "%s compiled with " PM3CLIENTCOMPILER __VERSION__ PM3HOSTOS PM3HOSTARCH "\n", temp); return; } @@ -705,7 +705,6 @@ void pm3_version(bool verbose, bool oneliner) { PacketResponseNG resp; clearCommandBuffer(); - SendCommandNG(CMD_VERSION, NULL, 0); if (WaitForResponseTimeout(CMD_VERSION, &resp, 1000)) { From f79a4803c58b2f6fec9e6ff663f33c611fd7264a Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sat, 29 Aug 2020 14:04:01 +0200 Subject: [PATCH 0299/1047] no printf --- client/src/cmdlfcotag.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/client/src/cmdlfcotag.c b/client/src/cmdlfcotag.c index d53a545dd..1ca5be432 100644 --- a/client/src/cmdlfcotag.c +++ b/client/src/cmdlfcotag.c @@ -97,14 +97,13 @@ static int CmdCOTAGRead(const char *Cmd) { uint8_t timeout = 3; while (!WaitForResponseTimeout(CMD_LF_COTAG_READ, &resp, 2000)) { timeout--; - printf("."); - fflush(stdout); - + PrintAndLogEx(NORMAL, "." NOLF); if (timeout == 0) { PrintAndLogEx(WARNING, "command execution time out"); return PM3_ETIMEOUT; } } + if (timeout != 3) PrintAndLogEx(NORMAL, ""); From 73369069231c5b01e867e91e1840aec365acdb34 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sat, 29 Aug 2020 14:05:13 +0200 Subject: [PATCH 0300/1047] no printf --- client/src/cmdlfgallagher.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/src/cmdlfgallagher.c b/client/src/cmdlfgallagher.c index 3bd68a89d..3a717bc61 100644 --- a/client/src/cmdlfgallagher.c +++ b/client/src/cmdlfgallagher.c @@ -103,9 +103,9 @@ static int CmdGallagherDemod(const char *Cmd) { for (int i = 0, pos = 0; i < ARRAYLEN(arr); i++) { pos = (i * 8) + i; arr[i] = bytebits_to_byte(DemodBuffer + pos, 8); - printf("%d -", pos); + PrintAndLogEx(NORMAL, "%d -" NOLF, pos); } - printf("\n"); + PrintAndLogEx(NORMAL, ""); // crc uint8_t crc = bytebits_to_byte(DemodBuffer + 72, 8); From 10c64d755d6b745eff703bfdd844f55a64289e15 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sat, 29 Aug 2020 14:13:18 +0200 Subject: [PATCH 0301/1047] no printf, sprintf --- client/src/cmdlft55xx.c | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/client/src/cmdlft55xx.c b/client/src/cmdlft55xx.c index c038f6973..7deddedb1 100644 --- a/client/src/cmdlft55xx.c +++ b/client/src/cmdlft55xx.c @@ -994,7 +994,7 @@ static int SanityOfflineCheck(bool useGraphBuffer) { static void T55xx_Print_DownlinkMode(uint8_t downlink_mode) { char msg[80]; - sprintf(msg, "Downlink Mode used : "); + snprintf(msg, sizeof(msg) ,"Downlink Mode used : "); switch (downlink_mode) { case 1 : @@ -2327,7 +2327,7 @@ static int CmdT55xxDump(const char *Cmd) { strcpy(preferredName, "lf-t55xx"); for (uint8_t i = 1; i <= 7; i++) { if ((cardmem[i].blockdata != 0x00) && (cardmem[i].blockdata != 0xFFFFFFFF)) - sprintf(preferredName + strlen(preferredName), "-%08X", cardmem[i].blockdata); + snprintf(preferredName + strlen(preferredName), sizeof(preferredName) - strlen(preferredName) , "-%08X", cardmem[i].blockdata); else break; } @@ -2416,7 +2416,7 @@ static int CmdT55xxRestore(const char *Cmd) { if (success == PM3_SUCCESS) { // Got data, so write to cards if (datalen == T55x7_BLOCK_COUNT * 4) { // 12 blocks * 4 bytes per block if (usepwd) - sprintf(pwdOpt, "p %08X", password); + snprintf(pwdOpt, sizeof(pwdOpt), "p %08X", password); // Restore endien for writing to card for (blockidx = 0; blockidx < 12; blockidx++) @@ -2433,18 +2433,20 @@ static int CmdT55xxRestore(const char *Cmd) { // write out blocks 1-7 page 0 for (blockidx = 1; blockidx <= 7; blockidx++) { - sprintf(writeCmdOpt, "b %d d %08X %s", blockidx, data[blockidx], pwdOpt); + snprintf(writeCmdOpt, sizeof(writeCmdOpt), "b %d d %08X %s", blockidx, data[blockidx], pwdOpt); + if (CmdT55xxWriteBlock(writeCmdOpt) != PM3_SUCCESS) PrintAndLogEx(WARNING, "Warning: error writing blk %d", blockidx); } // if password was set on the "blank" update as we may have just changed it if (usepwd) - sprintf(pwdOpt, "p %08X", data[7]); + snprintf(pwdOpt, sizeof(pwdOpt), "p %08X", data[7]); // write out blocks 1-3 page 1 for (blockidx = 9; blockidx <= 11; blockidx++) { - sprintf(writeCmdOpt, "b %d 1 d %08X %s", blockidx - 8, data[blockidx], pwdOpt); + snprintf(writeCmdOpt, sizeof(writeCmdOpt), "b %d 1 d %08X %s", blockidx - 8, data[blockidx], pwdOpt); + if (CmdT55xxWriteBlock(writeCmdOpt) != PM3_SUCCESS) PrintAndLogEx(WARNING, "Warning: error writing blk %d", blockidx); } @@ -2453,7 +2455,7 @@ static int CmdT55xxRestore(const char *Cmd) { config.downlink_mode = downlink_mode; // Write the page 0 config - sprintf(writeCmdOpt, "b 0 d %08X %s", data[0], pwdOpt); + snprintf(writeCmdOpt, sizeof(writeCmdOpt), "b 0 d %08X %s", data[0], pwdOpt); if (CmdT55xxWriteBlock(writeCmdOpt) != PM3_SUCCESS) PrintAndLogEx(WARNING, "Warning: error writing blk 0"); } @@ -3039,13 +3041,13 @@ static int CmdT55xxChkPwds(const char *Cmd) { while (!WaitForResponseTimeout(CMD_LF_T55XX_CHK_PWDS, &resp, 2000)) { timeout++; - printf("."); - fflush(stdout); + PrintAndLogEx(NORMAL, "." NOLF); if (timeout > 180) { PrintAndLogEx(WARNING, "\nNo response from Proxmark3. Aborting..."); return PM3_ENODATA; } } + PrintAndLogEx(NORMAL, ""); struct p { bool found; uint32_t candidate; @@ -3178,8 +3180,7 @@ static int CmdT55xxBruteForce(const char *Cmd) { while (found == 0) { - printf("."); - fflush(stdout); + PrintAndLogEx(NORMAL, "." NOLF); if (IsCancelled()) { return PM3_EOPABORTED; From da3e5dff8297924a402af56f121b76de6d9a9022 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sat, 29 Aug 2020 14:17:05 +0200 Subject: [PATCH 0302/1047] no printf, sprintf --- client/src/cmdsmartcard.c | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/client/src/cmdsmartcard.c b/client/src/cmdsmartcard.c index bc4753b6a..69539362f 100644 --- a/client/src/cmdsmartcard.c +++ b/client/src/cmdsmartcard.c @@ -885,7 +885,7 @@ static void smart_brute_prim(void) { static int smart_brute_sfi(bool decodeTLV) { uint8_t *buf = calloc(PM3_CMD_DATA_SIZE, sizeof(uint8_t)); - if (!buf) + if (buf == NULL) return 1; int len; @@ -895,8 +895,7 @@ static int smart_brute_sfi(bool decodeTLV) { for (uint8_t sfi = 1; sfi <= 31; sfi++) { - printf("."); - fflush(stdout); + PrintAndLogEx(NORMAL, "." NOLF); for (uint16_t rec = 1; rec <= 255; rec++) { @@ -1024,8 +1023,7 @@ static int CmdSmartBruteforceSFI(const char *Cmd) { for (int i = 0; i < json_array_size(root); i++) { - printf("+"); - fflush(stdout); + PrintAndLogEx(NORMAL, "+" NOLF); if (caid) free(caid); @@ -1033,21 +1031,21 @@ static int CmdSmartBruteforceSFI(const char *Cmd) { json_t *data, *jaid; data = json_array_get(root, i); - if (!json_is_object(data)) { - PrintAndLogEx(ERR, "data %d is not an object\n", i + 1); + if (json_is_object(data) == false) { + PrintAndLogEx(ERR, "\ndata %d is not an object\n", i + 1); json_decref(root); return PM3_ESOFT; } jaid = json_object_get(data, "AID"); - if (!json_is_string(jaid)) { - PrintAndLogEx(ERR, "AID data [%d] is not a string", i + 1); + if (json_is_string(jaid) == false) { + PrintAndLogEx(ERR, "\nAID data [%d] is not a string", i + 1); json_decref(root); return PM3_ESOFT; } const char *aid = json_string_value(jaid); - if (!aid) + if (aid == false) continue; size_t aidlen = strlen(aid); @@ -1069,7 +1067,7 @@ static int CmdSmartBruteforceSFI(const char *Cmd) { json_t *jvendor, *jname; jvendor = json_object_get(data, "Vendor"); - if (!json_is_string(jvendor)) { + if (json_is_string(jvendor) == false) { PrintAndLogEx(ERR, "Vendor data [%d] is not a string", i + 1); continue; } @@ -1079,7 +1077,7 @@ static int CmdSmartBruteforceSFI(const char *Cmd) { continue; jname = json_object_get(data, "Name"); - if (!json_is_string(jname)) { + if (json_is_string(jname) == false) { PrintAndLogEx(ERR, "Name data [%d] is not a string", i + 1); continue; } From 43803947c316b83a10a21bbb1b7fdc3ca7e69f15 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sat, 29 Aug 2020 14:21:09 +0200 Subject: [PATCH 0303/1047] no printf --- client/src/emv/emv_roca.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/client/src/emv/emv_roca.c b/client/src/emv/emv_roca.c index 4c42be7e2..95e2eb77a 100644 --- a/client/src/emv/emv_roca.c +++ b/client/src/emv/emv_roca.c @@ -71,7 +71,8 @@ static mbedtls_mpi_uint mpi_get_uint(const mbedtls_mpi *X) { if (X->n == 1 && X->s > 0) { return X->p[0]; } - printf("ZERRRRO!!!\n"); + + PrintAndLogEx(WARNING, "ZERRRRO!!!\n"); return 0; } @@ -82,7 +83,7 @@ static void print_mpi(const char *msg, int radix, const mbedtls_mpi *X) { size_t len = 0; mbedtls_mpi_write_string(X, radix, Xchar, sizeof(Xchar), &len); - printf("%s[%zu] %s\n", msg, len, Xchar); + PrintAndLogEx(INFO, "%s[%zu] %s\n", msg, len, Xchar); } */ bool emv_rocacheck(const unsigned char *buf, size_t buflen, bool verbose) { From 32452dec4b9e090cf22985a88fe7bcf2e216ed38 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sat, 29 Aug 2020 14:29:07 +0200 Subject: [PATCH 0304/1047] no printf --- client/src/uart/uart_posix.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/client/src/uart/uart_posix.c b/client/src/uart/uart_posix.c index 1a6cf32a0..406bf6d7c 100644 --- a/client/src/uart/uart_posix.c +++ b/client/src/uart/uart_posix.c @@ -359,7 +359,7 @@ void uart_close(const serial_port sp) { int err = fcntl(spu->fd, F_SETLK, &fl); if (err == -1) { //silent error message as it can be called from uart_open failing modes, e.g. when waiting for port to appear - //printf("[!] UART error while closing port\n"); + //PrintAndLogEx(ERR, "UART error while closing port"); } close(spu->fd); free(sp); @@ -401,12 +401,12 @@ int uart_receive(const serial_port sp, uint8_t *pbtRx, uint32_t pszMaxRxLen, uin // Retrieve the count of the incoming bytes res = ioctl(((serial_port_unix *)sp)->fd, FIONREAD, &byteCount); -// printf("UART:: RX ioctl res %d byteCount %u\n", res, byteCount); +// PrintAndLogEx(ERR, "UART:: RX ioctl res %d byteCount %u", res, byteCount); if (res < 0) return PM3_ENOTTY; // Cap the number of bytes, so we don't overrun the buffer if (pszMaxRxLen - (*pszRxLen) < byteCount) { -// printf("UART:: RX prevent overrun (have %u, need %u)\n", pszMaxRxLen - (*pszRxLen), byteCount); +// PrintAndLogEx(ERR, "UART:: RX prevent overrun (have %u, need %u)", pszMaxRxLen - (*pszRxLen), byteCount); byteCount = pszMaxRxLen - (*pszRxLen); } @@ -443,13 +443,13 @@ int uart_send(const serial_port sp, const uint8_t *pbtTx, const uint32_t len) { // Write error if (res < 0) { - printf("UART:: write error (%d)\n", res); + PrintAndLogEx(ERR, "UART:: write error (%d)", res); return PM3_ENOTTY; } // Write time-out if (res == 0) { - printf("UART:: write time-out\n"); + PrintAndLogEx(ERR, "UART:: write time-out"); return PM3_ETIMEOUT; } From 631a4e853ad35304580f6d0798ce4e34c3a3a89d Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sat, 29 Aug 2020 14:31:09 +0200 Subject: [PATCH 0305/1047] no printf --- client/src/loclass/elite_crack.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/client/src/loclass/elite_crack.c b/client/src/loclass/elite_crack.c index a811106d3..a559b4e7b 100644 --- a/client/src/loclass/elite_crack.c +++ b/client/src/loclass/elite_crack.c @@ -383,7 +383,7 @@ int bruteforceItem(dumpdata item, uint16_t keytable[]) { // success if (memcmp(calculated_MAC, item.mac, 4) == 0) { - printf("\r\n"); + PrintAndLogEx(NORMAL, ""); for (i = 0 ; i < numbytes_to_recover; i++) { PrintAndLogEx(INFO, "%d: 0x%02x", bytes_to_recover[i], 0xFF & keytable[bytes_to_recover[i]]); } @@ -393,16 +393,15 @@ int bruteforceItem(dumpdata item, uint16_t keytable[]) { brute++; if ((brute & 0xFFFF) == 0) { - printf("%3d,", (brute >> 16) & 0xFF); + PrintAndLogEx(NORMAL, "%3d," NOLF, (brute >> 16) & 0xFF); if (((brute >> 16) % 0x10) == 0) - printf("\n"); - fflush(stdout); + PrintAndLogEx(NORMAL, ""); } } int errors = PM3_SUCCESS; - if (!found) { + if (found == false) { PrintAndLogEx(NORMAL, ""); PrintAndLogEx(WARNING, "Failed to recover %d bytes using the following CSN", numbytes_to_recover); PrintAndLogEx(INFO, "CSN %s", sprint_hex(item.csn, 8)); From cbd35c49a62159846cfdebcb24f299c5c34b6b16 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sat, 29 Aug 2020 14:33:35 +0200 Subject: [PATCH 0306/1047] no printf --- client/src/comms.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/client/src/comms.c b/client/src/comms.c index ad82725f3..416225c0f 100644 --- a/client/src/comms.c +++ b/client/src/comms.c @@ -298,13 +298,13 @@ static void PacketResponseReceived(PacketResponseNG *packet) { PrintAndLogEx(NORMAL, "[" _BLUE_("#") "] %s", s); } else { if (flag & FLAG_INPLACE) - printf("\r"); - printf("%s", s); - if (flag & FLAG_NEWLINE) - printf("\r\n"); - } + PrintAndLogEx(NORMAL, "\r" NOLF); - fflush(stdout); + PrintAndLogEx(NORMAL, "%s" NOLF, s); + + if (flag & FLAG_NEWLINE) + PrintAndLogEx(NORMAL, ""); + } break; } case CMD_DEBUG_PRINT_INTEGERS: { From 110a173e6d019deb4bdf4a9ce970d70d2f81a2ff Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sat, 29 Aug 2020 14:38:46 +0200 Subject: [PATCH 0307/1047] no printf --- client/src/mifare/mifarehost.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/client/src/mifare/mifarehost.c b/client/src/mifare/mifarehost.c index 393495152..6f1138cee 100644 --- a/client/src/mifare/mifarehost.c +++ b/client/src/mifare/mifarehost.c @@ -58,8 +58,8 @@ int mfDarkside(uint8_t blockno, uint8_t key_type, uint64_t *key) { // wait cycle while (true) { - printf("."); - fflush(stdout); + PrintAndLogEx(NORMAL, "." NOLF); + if (kbd_enter_pressed()) { return PM3_EOPABORTED; } @@ -206,8 +206,7 @@ int mfCheckKeys_fast(uint8_t sectorsCnt, uint8_t firstChunk, uint8_t lastChunk, while (!WaitForResponseTimeout(CMD_ACK, &resp, 2000)) { timeout++; - printf("."); - fflush(stdout); + PrintAndLogEx(NORMAL, "." NOLF); // max timeout for one chunk of 85keys, 60*3sec = 180seconds // s70 with 40*2 keys to check, 80*85 = 6800 auth. // takes about 97s, still some margin before abort @@ -1037,14 +1036,16 @@ int detect_classic_nackbug(bool verbose) { PrintAndLogEx(SUCCESS, "press pm3-button on the Proxmark3 device to abort both Proxmark3 and client.\n"); while (true) { - printf("."); - fflush(stdout); + + PrintAndLogEx(NORMAL, "." NOLF); if (kbd_enter_pressed()) { return PM3_EOPABORTED; } if (WaitForResponseTimeout(CMD_HF_MIFARE_NACK_DETECT, &resp, 500)) { + PrintAndLogEx(NORMAL, ""); + if (resp.status == PM3_EOPABORTED) { PrintAndLogEx(WARNING, "button pressed. Aborted."); return PM3_EOPABORTED; @@ -1053,7 +1054,6 @@ int detect_classic_nackbug(bool verbose) { uint8_t ok = resp.data.asBytes[0]; uint8_t nacks = resp.data.asBytes[1]; uint16_t auths = bytes_to_num(resp.data.asBytes + 2, 2); - PrintAndLogEx(NORMAL, ""); if (verbose) { PrintAndLogEx(SUCCESS, "num of auth requests : %u", auths); @@ -1070,7 +1070,7 @@ int detect_classic_nackbug(bool verbose) { case 97 : { if (verbose) { PrintAndLogEx(FAILED, "card random number generator seems to be based on the well-known generating polynomial"); - PrintAndLogEx(NORMAL, "[- ]with 16 effective bits only, but shows unexpected behavior, try again."); + PrintAndLogEx(FAILED, "with 16 effective bits only, but shows unexpected behavior, try again."); } return PM3_SUCCESS; } From cccee38597a3aac3289d0724d2d98112feedff58 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sat, 29 Aug 2020 14:48:41 +0200 Subject: [PATCH 0308/1047] no printf --- client/src/loclass/hash1_brute.c | 25 ++++++----- client/src/loclass/ikeys.c | 77 ++++++++++++++------------------ 2 files changed, 46 insertions(+), 56 deletions(-) diff --git a/client/src/loclass/hash1_brute.c b/client/src/loclass/hash1_brute.c index 1c944b99e..99e8f49f6 100644 --- a/client/src/loclass/hash1_brute.c +++ b/client/src/loclass/hash1_brute.c @@ -41,34 +41,33 @@ static void calc_score(uint8_t *csn, uint8_t *k) { } if (score >= 2 && badscore < 2) { - printf("CSN\t%02x%02x%02x%02x%02x%02x%02x%02x\t%02x %02x %02x %02x %02x %02x %02x %02x\t" + PrintAndLogEx(NORMAL, "CSN\t%02x%02x%02x%02x%02x%02x%02x%02x\t%02x %02x %02x %02x %02x %02x %02x %02x\t" NOLF , csn[0], csn[1], csn[2], csn[3], csn[4], csn[5], csn[6], csn[7] , k[0], k[1], k[2], k[3], k[4], k[5], k[6], k[7] ); for (i = 0 ; i < score; i++) { - printf("%d,", uniq_vals[i]); + PrintAndLogEx(NORMAL, "%d," NOLF, uniq_vals[i]); } - printf("\tbadscore: %d (%02x)", badscore, badval); - printf("\r\n"); + PrintAndLogEx(NORMAL, "\tbadscore: %d (%02x)" NOLF, badscore, badval); + PrintAndLogEx(NORMAL, ""); } } void brute_hash1(void) { - uint16_t a, b, c, d; + uint8_t csn[8] = {0, 0, 0, 0, 0xf7, 0xff, 0x12, 0xe0}; uint8_t k[8] = {0, 0, 0, 0, 0, 0, 0, 0}; uint8_t testcsn[8] = {0x00, 0x0d, 0x0f, 0xfd, 0xf7, 0xff, 0x12, 0xe0} ; uint8_t testkey[8] = {0x05, 0x01, 0x00, 0x10, 0x45, 0x08, 0x45, 0x56} ; calc_score(testcsn, testkey); - printf("Brute forcing hashones\n"); - //exit(1); - for (a = 0; a < 256; a++) { - //if(a > 0)printf("%d/256 done...\n", a); - for (b = 0; b < 256; b++) - for (c = 0; c < 256; c++) - for (d = 0; d < 256; d++) { + PrintAndLogEx(INFO, "Brute forcing hashones"); + + for (uint16_t a = 0; a < 256; a++) { + for (uint16_t b = 0; b < 256; b++) { + for (uint16_t c = 0; c < 256; c++) { + for (uint16_t d = 0; d < 256; d++) { csn[0] = a; csn[1] = b; csn[2] = c; @@ -80,6 +79,8 @@ void brute_hash1(void) { hash1(csn, k); calc_score(csn, k); } + } + } } } diff --git a/client/src/loclass/ikeys.c b/client/src/loclass/ikeys.c index 3adcd97bb..181f23db1 100644 --- a/client/src/loclass/ikeys.c +++ b/client/src/loclass/ikeys.c @@ -333,7 +333,7 @@ void hash0(uint64_t c, uint8_t k[8]) { uint8_t p_i = p >> i & 0x1; if (k[i]) { // yi = 1 - //printf("k[%d] +1\n", i); + // PrintAndLogEx(NORMAL, "k[%d] + 1", i); k[i] |= ~zTilde_i & 0x7E; k[i] |= p_i & 1; k[i] += 1; @@ -399,7 +399,7 @@ static void testPermute(void) { permute(&p_in, x, 0, 4, &out); uint64_t permuted = x_bytes_to_num(outbuffer, 8); - //printf("zTilde 0x%"PRIX64"\n", zTilde); + // PrintAndLogEx(NORMAL, "zTilde 0x%"PRIX64, zTilde); permuted >>= 16; uint8_t res[8] = { getSixBitByte(permuted, 0), @@ -694,28 +694,21 @@ int doKeyTests(void) { /** -void checkParity2(uint8_t* key) -{ +void checkParity2(uint8_t* key) { uint8_t stored_parity = key[7]; - printf("Parity byte: 0x%02x\n", stored_parity); - int i; - int byte; - int fails =0; + PrintAndLogEx(NORMAL, "Parity byte: 0x%02x", stored_parity); + int i, byte, fails = 0; BitstreamIn bits = {key, 56, 0}; - bool parity = 0; - for(i =0 ; i < 56; i++) - { + for (i = 0; i < 56; i++) { - if ( i > 0 && i % 7 == 0) - { + if ( i > 0 && i % 7 == 0){ parity = !parity; bool pbit = stored_parity & (0x80 >> (byte)); - if(parity != pbit) - { - printf("parity2 fail byte %d, should be %d, was %d\n", (i / 7), parity, pbit); + if (parity != pbit) { + PrintAndLogEx(NORMAL, "parity2 fail byte %d, should be %d, was %d", (i / 7), parity, pbit); fails++; } parity =0 ; @@ -723,35 +716,32 @@ void checkParity2(uint8_t* key) } parity = parity ^ headBit(&bits); } - if(fails) - { - printf("parity2 fails: %d\n", fails); - }else - { - printf("Key syntax is with parity bits grouped in the last byte!\n"); + if (fails) { + PrintAndLogEx(FAILED, "parity2 fails: %d", fails); + } else { + PrintAndLogEx(INFO, "Key syntax is with parity bits grouped in the last byte!"); } } -void modifyKey_put_parity_last(uint8_t * key, uint8_t* output) -{ + +void modifyKey_put_parity_last(uint8_t * key, uint8_t* output) { + uint8_t paritybits = 0; bool parity =0; - BitstreamOut out = { output, 0,0}; + BitstreamOut out = { output, 0, 0}; unsigned int bbyte, bbit; - for(bbyte=0; bbyte <8 ; bbyte++ ) - { - for(bbit =0 ; bbit< 7 ; bbit++) - { - bool bit = *(key+bbyte) & (1 << (7-bbit)); - pushBit(&out,bit); + for (bbyte = 0; bbyte <8; bbyte++ ) { + for(bbit = 0; bbit < 7; bbit++) { + bool bit = *(key + bbyte) & (1 << (7 - bbit)); + pushBit(&out, bit); parity ^= bit; } - bool paritybit = *(key+bbyte) & 1; - paritybits |= paritybit << (7-bbyte); + bool paritybit = *(key + bbyte) & 1; + paritybits |= paritybit << (7 - bbyte); parity = 0; } output[7] = paritybits; - printf("Parity byte: %02x\n", paritybits); + PrintAndLogEx(INFO, "Parity byte: %02x", paritybits); } * @brief Modifies a key with parity bits last, so that it is formed with parity @@ -759,25 +749,24 @@ void modifyKey_put_parity_last(uint8_t * key, uint8_t* output) * @param key * @param output -void modifyKey_put_parity_allover(uint8_t * key, uint8_t* output) -{ +void modifyKey_put_parity_allover(uint8_t * key, uint8_t* output) { bool parity =0; - BitstreamOut out = { output, 0,0}; - BitstreamIn in = {key, 0,0}; + BitstreamOut out = {output, 0, 0}; + BitstreamIn in = {key, 0, 0}; unsigned int bbyte, bbit; - for(bbit =0 ; bbit < 56 ; bbit++) { - if( bbit > 0 && bbit % 7 == 0) { - pushBit(&out,!parity); + for (bbit = 0; bbit < 56; bbit++) { + if (bbit > 0 && bbit % 7 == 0) { + pushBit(&out, !parity); parity = 0; } bool bit = headBit(&in); - pushBit(&out,bit ); + pushBit(&out, bit); parity ^= bit; } pushBit(&out, !parity); - if( des_key_check_key_parity(output)) - printf("modifyKey_put_parity_allover fail, DES key invalid parity!"); + if (des_key_check_key_parity(output)) + PrintAndLogEx(FAILED, "modifyKey_put_parity_allover fail, DES key invalid parity!"); } */ From 7fd4d5f158a7d965a06da9ca35a3df9959739ac5 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sat, 29 Aug 2020 14:52:11 +0200 Subject: [PATCH 0309/1047] no printf --- client/src/cmdlf.c | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/client/src/cmdlf.c b/client/src/cmdlf.c index 017d2b804..a5004c5c8 100644 --- a/client/src/cmdlf.c +++ b/client/src/cmdlf.c @@ -364,11 +364,10 @@ int CmdLFCommandRead(const char *Cmd) { uint8_t i = 10; // 20sec wait loop while (!WaitForResponseTimeout(CMD_LF_MOD_THEN_ACQ_RAW_ADC, &resp, 2000) && i != 0) { - printf("."); - fflush(stdout); + PrintAndLogEx(NORMAL, "." NOLF); i--; } - printf("\n"); + PrintAndLogEx(NORMAL, ""); if (resp.status == PM3_SUCCESS) { if (i) { @@ -736,15 +735,13 @@ int CmdLFSim(const char *Cmd) { PrintAndLogEx(INFO, "Bigbuf is full."); break; } - printf("."); - fflush(stdout); + PrintAndLogEx(NORMAL, "." NOLF); payload_up.flag = 0; } // Disable fast mode before last command conn.block_after_ACK = false; - printf("\n"); - + PrintAndLogEx(NORMAL, ""); PrintAndLogEx(INFO, "Simulating"); struct p { From d09ed2eec01ac5be354201a831d978fb9768422c Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sat, 29 Aug 2020 14:57:05 +0200 Subject: [PATCH 0310/1047] no printf --- client/src/cmdhfmfdes.c | 45 +++++++++++++++++++++++------------------ 1 file changed, 25 insertions(+), 20 deletions(-) diff --git a/client/src/cmdhfmfdes.c b/client/src/cmdhfmfdes.c index c7fa78e0f..11e8b79c3 100644 --- a/client/src/cmdhfmfdes.c +++ b/client/src/cmdhfmfdes.c @@ -347,9 +347,9 @@ static char *getCardSizeStr(uint8_t fsize) { // is LSB set? if (fsize & 1) - sprintf(retStr, "0x%02X (" _YELLOW_("%d - %d bytes") ")", fsize, usize, lsize); + snprintf(retStr, sizeof(buf), "0x%02X (" _YELLOW_("%d - %d bytes") ")", fsize, usize, lsize); else - sprintf(retStr, "0x%02X (" _YELLOW_("%d bytes") ")", fsize, lsize); + snprintf(retStr, sizeof(buf), "0x%02X (" _YELLOW_("%d bytes") ")", fsize, lsize); return buf; } @@ -359,14 +359,14 @@ static char *getProtocolStr(uint8_t id, bool hw) { char *retStr = buf; if (id == 0x04) { - sprintf(retStr, "0x%02X (" _YELLOW_("ISO 14443-3 MIFARE, 14443-4") ")", id); + snprintf(retStr, sizeof(buf), "0x%02X (" _YELLOW_("ISO 14443-3 MIFARE, 14443-4") ")", id); } else if (id == 0x05) { if (hw) - sprintf(retStr, "0x%02X (" _YELLOW_("ISO 14443-2, 14443-3") ")", id); + snprintf(retStr, sizeof(buf), "0x%02X (" _YELLOW_("ISO 14443-2, 14443-3") ")", id); else - sprintf(retStr, "0x%02X (" _YELLOW_("ISO 14443-3, 14443-4") ")", id); + snprintf(retStr, sizeof(buf), "0x%02X (" _YELLOW_("ISO 14443-3, 14443-4") ")", id); } else { - sprintf(retStr, "0x%02X (" _YELLOW_("Unknown") ")", id); + snprintf(retStr, sizeof(buf), "0x%02X (" _YELLOW_("Unknown") ")", id); } return buf; } @@ -377,17 +377,17 @@ static char *getVersionStr(uint8_t major, uint8_t minor) { char *retStr = buf; if (major == 0x00) - sprintf(retStr, "%x.%x (" _YELLOW_("DESFire MF3ICD40") ")", major, minor); + snprintf(retStr, sizeof(buf), "%x.%x (" _YELLOW_("DESFire MF3ICD40") ")", major, minor); else if (major == 0x01 && minor == 0x00) - sprintf(retStr, "%x.%x (" _YELLOW_("DESFire EV1") ")", major, minor); + snprintf(retStr, sizeof(buf), "%x.%x (" _YELLOW_("DESFire EV1") ")", major, minor); else if (major == 0x12 && minor == 0x00) - sprintf(retStr, "%x.%x (" _YELLOW_("DESFire EV2") ")", major, minor); + snprintf(retStr, sizeof(buf), "%x.%x (" _YELLOW_("DESFire EV2") ")", major, minor); else if (major == 0x33 && minor == 0x00) - sprintf(retStr, "%x.%x (" _YELLOW_("DESFire EV3") ")", major, minor); + snprintf(retStr, sizeof(buf), "%x.%x (" _YELLOW_("DESFire EV3") ")", major, minor); else if (major == 0x30 && minor == 0x00) - sprintf(retStr, "%x.%x (" _YELLOW_("DESFire Light") ")", major, minor); + snprintf(retStr, sizeof(buf), "%x.%x (" _YELLOW_("DESFire Light") ")", major, minor); else - sprintf(retStr, "%x.%x (" _YELLOW_("Unknown") ")", major, minor); + snprintf(retStr, sizeof(buf), "%x.%x (" _YELLOW_("Unknown") ")", major, minor); return buf; } @@ -3401,6 +3401,7 @@ static void DecodeComSet(uint8_t comset) { } static char *DecodeAccessValue(uint8_t value) { + char *car = (char *)calloc(255, sizeof(char)); if (car == NULL) return NULL; @@ -3413,7 +3414,7 @@ static char *DecodeAccessValue(uint8_t value) { strcat(car, "(Denied Access)"); break; default: - sprintf(car, "(Access Key: %d)", value); + snprintf(car, 255, "(Access Key: %d)", value); break; } return car; @@ -4364,7 +4365,7 @@ static int CmdHF14aDesChk(const char *Cmd) { } if (!verbose) - printf("Search keys:\n"); + PrintAndLogEx(INFO, "Search keys:"); bool result = false; uint8_t app_ids[78] = {0}; @@ -4382,25 +4383,29 @@ static int CmdHF14aDesChk(const char *Cmd) { } for (uint32_t x = 0; x < app_ids_len / 3; x++) { + uint32_t curaid = (app_ids[x * 3] & 0xFF) + ((app_ids[(x * 3) + 1] & 0xFF) << 8) + ((app_ids[(x * 3) + 2] & 0xFF) << 16); PrintAndLogEx(ERR, "Checking aid 0x%06X...", curaid); + res = AuthCheckDesfire(&app_ids[x * 3], deskeyList, deskeyListLen, aeskeyList, aeskeyListLen, k3kkeyList, k3kkeyListLen, foundKeys, &result); if (res == PM3_EOPABORTED) { break; } if (pattern2b && startPattern < 0x10000) { - if (!verbose) - printf("p"); + if (verbose == false) + PrintAndLogEx(NORMAL, "p" NOLF); + aeskeyListLen = 0; deskeyListLen = 0; k3kkeyListLen = 0; DesFill2bPattern(deskeyList, &deskeyListLen, aeskeyList, &aeskeyListLen, k3kkeyList, &k3kkeyListLen, &startPattern); continue; } + if (dict_filenamelen && endFilePosition) { - if (!verbose) - printf("d"); + if (verbose == false) + PrintAndLogEx(NORMAL, "d" NOLF); uint32_t keycnt = 0; res = loadFileDICTIONARYEx((char *)dict_filename, deskeyList, sizeof(deskeyList), NULL, 16, &keycnt, endFilePosition, &endFilePosition, false); @@ -4420,8 +4425,8 @@ static int CmdHF14aDesChk(const char *Cmd) { continue; } } - if (!verbose) - printf("\n"); + if (verbose == false) + PrintAndLogEx(NORMAL, ""); // save keys to json if ((jsonnamelen > 0) && result) { From ab3e9983f8d0cd1fa460b7e0ee18b5943f1afa0b Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sat, 29 Aug 2020 15:03:56 +0200 Subject: [PATCH 0311/1047] no printf --- client/src/crypto/libpcrypto.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/client/src/crypto/libpcrypto.c b/client/src/crypto/libpcrypto.c index a00918b91..2ed0b6bc7 100644 --- a/client/src/crypto/libpcrypto.c +++ b/client/src/crypto/libpcrypto.c @@ -24,8 +24,8 @@ #include #include #include -#include - +#include "util.h" +#include "ui.h" // NIST Special Publication 800-38A — Recommendation for block cipher modes of operation: methods and techniques, 2001. int aes_encode(uint8_t *iv, uint8_t *key, uint8_t *input, uint8_t *output, int length) { uint8_t iiv[16] = {0}; @@ -416,10 +416,10 @@ int ecdsa_nist_test(bool verbose) { // NIST ecdsa test if (verbose) - printf(" ECDSA NIST test: "); + PrintAndLogEx(INFO, " ECDSA NIST test: " NOLF); // make signature res = ecdsa_signature_create_test(curveid, T_PRIVATE_KEY, T_Q_X, T_Q_Y, T_K, input, length, signature, &siglen); -// printf("res: %x signature[%x]: %s\n", (res<0)?-res:res, siglen, sprint_hex(signature, siglen)); +// PrintAndLogEx(INFO, "res: %x signature[%x]: %s", (res < 0)? -res : res, siglen, sprint_hex(signature, siglen)); if (res) goto exit; @@ -436,7 +436,7 @@ int ecdsa_nist_test(bool verbose) { uint8_t sval_s[33] = {0}; param_gethex_to_eol(T_S, 0, sval_s, sizeof(sval_s), &slen); if (strncmp((char *)rval, (char *)rval_s, 32) || strncmp((char *)sval, (char *)sval_s, 32)) { - printf("R or S check error\n"); + PrintAndLogEx(INFO, "R or S check error"); res = 100; goto exit; } @@ -449,14 +449,14 @@ int ecdsa_nist_test(bool verbose) { // verify wrong signature input[0] ^= 0xFF; res = ecdsa_signature_verify_keystr(curveid, T_Q_X, T_Q_Y, input, length, signature, siglen, true); - if (!res) { + if (res == false) { res = 1; goto exit; } if (verbose) { - printf("passed\n"); - printf(" ECDSA binary signature create/check test: "); + PrintAndLogEx(NORMAL, _GREEN_("passed")); + PrintAndLogEx(INFO, " ECDSA binary signature create/check test: " NOLF); } // random ecdsa test @@ -483,11 +483,11 @@ int ecdsa_nist_test(bool verbose) { goto exit; if (verbose) - printf("passed\n\n"); + PrintAndLogEx(NORMAL, _GREEN_("passed\n")); return 0; exit: if (verbose) - printf("failed\n\n"); + PrintAndLogEx(NORMAL, _RED_("failed\n")); return res; } From 502fbeeaab0908c18e5e5901516bfb82563bacb2 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sat, 29 Aug 2020 15:12:19 +0200 Subject: [PATCH 0312/1047] no printf --- client/src/cmdhfmf.c | 51 +++++++++++++++++++------------------------- 1 file changed, 22 insertions(+), 29 deletions(-) diff --git a/client/src/cmdhfmf.c b/client/src/cmdhfmf.c index 011b30033..4462cd82e 100644 --- a/client/src/cmdhfmf.c +++ b/client/src/cmdhfmf.c @@ -938,8 +938,7 @@ static int CmdHF14AMfDump(const char *Cmd) { mf_readblock_t payload; for (sectorNo = 0; sectorNo < numSectors; sectorNo++) { for (tries = 0; tries < MIFARE_SECTOR_RETRY; tries++) { - printf("."); - fflush(NULL); + PrintAndLogEx(NORMAL, "." NOLF); payload.blockno = FirstBlockOfSector(sectorNo) + NumBlocksPerSector(sectorNo) - 1; payload.keytype = 0; @@ -958,18 +957,18 @@ static int CmdHF14AMfDump(const char *Cmd) { rights[sectorNo][3] = ((data[7] & 0x80) >> 5) | ((data[8] & 0x8) >> 2) | ((data[8] & 0x80) >> 7); // C1C2C3 for sector trailer break; } else if (tries == 2) { // on last try set defaults - PrintAndLogEx(FAILED, "could not get access rights for sector %2d. Trying with defaults...", sectorNo); + PrintAndLogEx(FAILED, "\ncould not get access rights for sector %2d. Trying with defaults...", sectorNo); rights[sectorNo][0] = rights[sectorNo][1] = rights[sectorNo][2] = 0x00; rights[sectorNo][3] = 0x01; } } else { - PrintAndLogEx(FAILED, "command execute timeout when trying to read access rights for sector %2d. Trying with defaults...", sectorNo); + PrintAndLogEx(FAILED, "\ncommand execute timeout when trying to read access rights for sector %2d. Trying with defaults...", sectorNo); rights[sectorNo][0] = rights[sectorNo][1] = rights[sectorNo][2] = 0x00; rights[sectorNo][3] = 0x01; } } } - printf("\n"); + PrintAndLogEx(NORMAL, ""); PrintAndLogEx(SUCCESS, "Finished reading sector access bits"); PrintAndLogEx(INFO, "Dumping all blocks from card..."); @@ -2161,8 +2160,8 @@ static int CmdHF14AMfAutoPWN(const char *Cmd) { // Check if the key is known if (e_sector[i].foundKey[j] == 0) { for (uint32_t k = 0; k < key_cnt; k++) { - printf("."); - fflush(stdout); + PrintAndLogEx(NORMAL, "." NOLF); + if (mfCheckKeys(FirstBlockOfSector(i), j, true, 1, (keyBlock + (6 * k)), &key64) == PM3_SUCCESS) { e_sector[i].Key[j] = bytes_to_num((keyBlock + (6 * k)), 6); e_sector[i].foundKey[j] = 'D'; @@ -2173,8 +2172,7 @@ static int CmdHF14AMfAutoPWN(const char *Cmd) { } } } - printf("\n"); - fflush(stdout); + PrintAndLogEx(NORMAL, ""); } else { uint32_t chunksize = key_cnt > (PM3_CMD_DATA_SIZE / 6) ? (PM3_CMD_DATA_SIZE / 6) : key_cnt; @@ -3014,8 +3012,8 @@ static int CmdHF14AMfChk(const char *Cmd) { for (uint16_t c = 0; c < keycnt; c += max_keys) { - printf("."); - fflush(stdout); + PrintAndLogEx(NORMAL, "." NOLF); + if (kbd_enter_pressed()) { PrintAndLogEx(INFO, "\naborted via keyboard!\n"); goto out; @@ -3037,7 +3035,6 @@ static int CmdHF14AMfChk(const char *Cmd) { t1 = msclock() - t1; PrintAndLogEx(INFO, "\ntime in checkkeys " _YELLOW_("%.0f") " seconds\n", (float)t1 / 1000.0); - // 20160116 If Sector A is found, but not Sector B, try just reading it of the tag? if (keyType != 1) { PrintAndLogEx(INFO, "testing to read key B..."); @@ -3225,22 +3222,22 @@ static int CmdHF14AMfSim(const char *Cmd) { switch (param_get8(Cmd, cmdp + 1)) { case 0: flags |= FLAG_MF_MINI; - sprintf(csize, "MINI"); + snprintf(csize, sizeof(csize), "MINI"); k_sectorsCount = MIFARE_MINI_MAXSECTOR; break; case 1: flags |= FLAG_MF_1K; - sprintf(csize, "1K"); + snprintf(csize, sizeof(csize), "1K"); k_sectorsCount = MIFARE_1K_MAXSECTOR; break; case 2: flags |= FLAG_MF_2K; - sprintf(csize, "2K with RATS"); + snprintf(csize, sizeof(csize), "2K with RATS"); k_sectorsCount = MIFARE_2K_MAXSECTOR; break; case 4: flags |= FLAG_MF_4K; - sprintf(csize, "4K"); + snprintf(csize, sizeof(csize), "4K"); k_sectorsCount = MIFARE_4K_MAXSECTOR; break; default: @@ -3276,15 +3273,15 @@ static int CmdHF14AMfSim(const char *Cmd) { switch (uidlen) { case 10: flags |= FLAG_10B_UID_IN_DATA; - sprintf(uidsize, "10 byte"); + snprintf(uidsize, sizeof(uidsize), "10 byte"); break; case 7: flags |= FLAG_7B_UID_IN_DATA; - sprintf(uidsize, "7 byte"); + snprintf(uidsize, sizeof(uidsize), "7 byte"); break; case 4: flags |= FLAG_4B_UID_IN_DATA; - sprintf(uidsize, "4 byte"); + snprintf(uidsize, sizeof(uidsize), "4 byte"); break; default: return usage_hf14_mfsim(); @@ -3592,8 +3589,7 @@ int CmdHF14AMfELoad(const char *Cmd) { free(data); return PM3_ESOFT; } - printf("."); - fflush(stdout); + PrintAndLogEx(NORMAL, "." NOLF); blockNum++; counter += blockWidth; @@ -3663,7 +3659,7 @@ static int CmdHF14AMfESave(const char *Cmd) { // user supplied filename? if (len < 1) { - fnameptr += sprintf(fnameptr, "hf-mf-"); + fnameptr += snprintf(fnameptr, sizeof(filename), "hf-mf-"); FillFileNameByUID(fnameptr, dump, "-dump", 4); } @@ -3968,8 +3964,7 @@ static int CmdHF14AMfCLoad(const char *Cmd) { PrintAndLogEx(WARNING, "Cant set magic card block: %d", blockNum); return PM3_ESOFT; } - printf("."); - fflush(stdout); + PrintAndLogEx(NORMAL, "." NOLF); } PrintAndLogEx(NORMAL, "\n"); return PM3_SUCCESS; @@ -4030,8 +4025,7 @@ static int CmdHF14AMfCLoad(const char *Cmd) { datalen -= 16; - printf("."); - fflush(stdout); + PrintAndLogEx(NORMAL, "." NOLF); blockNum++; // magic card type - mifare 1K @@ -4225,7 +4219,7 @@ static int CmdHF14AMfCSave(const char *Cmd) { } if (useuid) { - fnameptr += sprintf(fnameptr, "hf-mf-"); + fnameptr += snprintf(fnameptr, sizeof(filename), "hf-mf-"); FillFileNameByUID(fnameptr, card.uid, "-dump", card.uidlen); } @@ -4241,8 +4235,7 @@ static int CmdHF14AMfCSave(const char *Cmd) { if (mfEmlSetMem(dump + (i * MFBLOCK_SIZE), i, 5) != PM3_SUCCESS) { PrintAndLogEx(WARNING, "Cant set emul block: %d", i); } - printf("."); - fflush(stdout); + PrintAndLogEx(NORMAL, "." NOLF); } PrintAndLogEx(NORMAL, "\n"); PrintAndLogEx(SUCCESS, "uploaded %d bytes to emulator memory", bytes); From 2f86958451c5a1540ec9842ce78d10d1db24735c Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sat, 29 Aug 2020 15:12:57 +0200 Subject: [PATCH 0313/1047] no sprintf --- client/src/cmdhfmf.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/src/cmdhfmf.c b/client/src/cmdhfmf.c index 4462cd82e..7051fac5f 100644 --- a/client/src/cmdhfmf.c +++ b/client/src/cmdhfmf.c @@ -3779,7 +3779,7 @@ static int CmdHF14AMfEKeyPrn(const char *Cmd) { char filename[FILE_PATH_SIZE] = {0}; char *fptr = filename; - fptr += sprintf(fptr, "hf-mf-"); + fptr += snprintf(fptr, sizeof(filename), "hf-mf-"); FillFileNameByUID(fptr + strlen(fptr), uid, "-key", sizeof(uid)); createMfcKeyDump(filename, sectors_cnt, e_sector); From 11052fabf7118955cb41b4855a07c2ac7587ea40 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sat, 29 Aug 2020 15:22:26 +0200 Subject: [PATCH 0314/1047] no printf --- client/src/cmdhficlass.c | 38 +++++++++++++++++--------------------- 1 file changed, 17 insertions(+), 21 deletions(-) diff --git a/client/src/cmdhficlass.c b/client/src/cmdhficlass.c index 4527d2dd5..ad29754e9 100644 --- a/client/src/cmdhficlass.c +++ b/client/src/cmdhficlass.c @@ -962,11 +962,10 @@ static int CmdHFiClassReader_Replay(const char *Cmd) { SendCommandNG(CMD_HF_ICLASS_REPLAY, (uint8_t *)&payload, sizeof(payload)); while (true) { - printf("."); - fflush(stdout); + PrintAndLogEx(NORMAL, "." NOLF); + if (kbd_enter_pressed()) { - PrintAndLogEx(NORMAL, ""); - PrintAndLogEx(WARNING, "aborted via keyboard!\n"); + PrintAndLogEx(WARNING, "\naborted via keyboard!\n"); DropField(); return PM3_EOPABORTED; } @@ -975,6 +974,7 @@ static int CmdHFiClassReader_Replay(const char *Cmd) { break; } + PrintAndLogEx(NORMAL, ""); if (resp.status != PM3_SUCCESS) { PrintAndLogEx(ERR, "failed to communicate with card"); return resp.status; @@ -1189,7 +1189,7 @@ static int CmdHFiClassESave(const char *Cmd) { // user supplied filename? if (len < 1) { - fnameptr += sprintf(fnameptr, "hf-iclass-"); + fnameptr += snprintf(fnameptr, sizeof(filename), "hf-iclass-"); FillFileNameByUID(fnameptr, dump, "-dump", 8); } @@ -1408,7 +1408,7 @@ static int CmdHFiClassDecrypt(const char *Cmd) { uint64_t pin = bytes_to_num(decrypted + (8 * 9), 5); char tmp[17] = {0}; - sprintf(tmp, "%."PRIu64, BCD2DEC(pin)); + snprintf(tmp, sizeof(tmp), "%."PRIu64, BCD2DEC(pin)); PrintAndLogEx(INFO, "PIN........................ " _GREEN_("%.*s"), pinsize, tmp); } } @@ -1756,11 +1756,10 @@ static int CmdHFiClassDump(const char *Cmd) { SendCommandNG(CMD_HF_ICLASS_DUMP, (uint8_t *)&payload, sizeof(payload)); while (true) { - printf("."); - fflush(stdout); + + PrintAndLogEx(NORMAL, "." NOLF); if (kbd_enter_pressed()) { - PrintAndLogEx(NORMAL, ""); - PrintAndLogEx(WARNING, "aborted via keyboard!\n"); + PrintAndLogEx(WARNING, "\naborted via keyboard!\n"); DropField(); return PM3_EOPABORTED; } @@ -1769,6 +1768,7 @@ static int CmdHFiClassDump(const char *Cmd) { break; } + PrintAndLogEx(NORMAL, ""); if (resp.status != PM3_SUCCESS) { PrintAndLogEx(ERR, "failed to communicate with card"); return resp.status; @@ -1828,11 +1828,9 @@ static int CmdHFiClassDump(const char *Cmd) { SendCommandNG(CMD_HF_ICLASS_DUMP, (uint8_t *)&payload, sizeof(payload)); while (true) { - printf("."); - fflush(stdout); + PrintAndLogEx(NORMAL, "." NOLF); if (kbd_enter_pressed()) { - PrintAndLogEx(NORMAL, ""); - PrintAndLogEx(WARNING, "aborted via keyboard!\n"); + PrintAndLogEx(WARNING, "\naborted via keyboard!\n"); DropField(); return PM3_EOPABORTED; } @@ -1840,7 +1838,7 @@ static int CmdHFiClassDump(const char *Cmd) { if (WaitForResponseTimeout(CMD_HF_ICLASS_DUMP, &resp, 2000)) break; } - + PrintAndLogEx(NORMAL, ""); if (resp.status != PM3_SUCCESS) { PrintAndLogEx(ERR, "failed to communicate with card"); goto write_dump; @@ -2233,8 +2231,8 @@ static int CmdHFiClassRestore(const char *Cmd) { for (i = 0; i <= endblock - startblock; i++) { memcpy(p, data + (i * 12), 12); char *s = calloc(70, sizeof(uint8_t)); - sprintf(s, "| %s ", sprint_hex(p, 8)); - sprintf(s + strlen(s), "| %s", sprint_hex(p + 8, 4)); + snprintf(s, 70, "| %s ", sprint_hex(p, 8)); + snprintf(s + strlen(s), 70 - strlen(s), "| %s", sprint_hex(p + 8, 4)); PrintAndLogEx(NORMAL, " %02X %s", i + startblock, s); free(s); } @@ -3088,11 +3086,9 @@ static int CmdHFiClassCheckKeys(const char *Cmd) { bool looped = false; while (!WaitForResponseTimeout(CMD_HF_ICLASS_CHKKEYS, &resp, 2000)) { timeout++; - printf("."); - fflush(stdout); + PrintAndLogEx(NORMAL, "." NOLF); if (timeout > 120) { - PrintAndLogEx(NORMAL, ""); - PrintAndLogEx(WARNING, "No response from Proxmark3. Aborting..."); + PrintAndLogEx(WARNING, "\nNo response from Proxmark3. Aborting..."); goto out; } looped = true; From a6ab383d1d1a67c830183ff10d6ae9bc83298717 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sat, 29 Aug 2020 15:30:11 +0200 Subject: [PATCH 0315/1047] no printf, no sprinft, enabled Ev3 detection --- client/src/cmdhfmfp.c | 80 +++++++++++++++++++++++-------------------- 1 file changed, 43 insertions(+), 37 deletions(-) diff --git a/client/src/cmdhfmfp.c b/client/src/cmdhfmfp.c index 1e1f7aeef..ab06ef619 100644 --- a/client/src/cmdhfmfp.c +++ b/client/src/cmdhfmfp.c @@ -58,9 +58,9 @@ static char *getCardSizeStr(uint8_t fsize) { // is LSB set? if (fsize & 1) - sprintf(retStr, "0x%02X (" _YELLOW_("%d - %d bytes") ")", fsize, usize, lsize); + snprintf(retStr, sizeof(buf), "0x%02X (" _YELLOW_("%d - %d bytes") ")", fsize, usize, lsize); else - sprintf(retStr, "0x%02X (" _YELLOW_("%d bytes") ")", fsize, lsize); + snprintf(retStr, sizeof(buf), "0x%02X (" _YELLOW_("%d bytes") ")", fsize, lsize); return buf; } @@ -70,14 +70,14 @@ static char *getProtocolStr(uint8_t id, bool hw) { char *retStr = buf; if (id == 0x04) { - sprintf(retStr, "0x%02X (" _YELLOW_("ISO 14443-3 MIFARE, 14443-4") ")", id); + snprintf(retStr, sizeof(buf), "0x%02X (" _YELLOW_("ISO 14443-3 MIFARE, 14443-4") ")", id); } else if (id == 0x05) { if (hw) - sprintf(retStr, "0x%02X (" _YELLOW_("ISO 14443-2, 14443-3") ")", id); + snprintf(retStr, sizeof(buf), "0x%02X (" _YELLOW_("ISO 14443-2, 14443-3") ")", id); else - sprintf(retStr, "0x%02X (" _YELLOW_("ISO 14443-3, 14443-4") ")", id); + snprintf(retStr, sizeof(buf), "0x%02X (" _YELLOW_("ISO 14443-3, 14443-4") ")", id); } else { - sprintf(retStr, "0x%02X (" _YELLOW_("Unknown") ")", id); + snprintf(retStr, sizeof(buf), "0x%02X (" _YELLOW_("Unknown") ")", id); } return buf; } @@ -88,20 +88,20 @@ static char *getVersionStr(uint8_t major, uint8_t minor) { char *retStr = buf; if (major == 0x00) - sprintf(retStr, "%x.%x (" _YELLOW_("DESFire MF3ICD40") ")", major, minor); + snprintf(retStr, sizeof(buf), "%x.%x (" _YELLOW_("DESFire MF3ICD40") ")", major, minor); else if (major == 0x01 && minor == 0x00) - sprintf(retStr, "%x.%x (" _YELLOW_("DESFire EV1") ")", major, minor); + snprintf(retStr, sizeof(buf), "%x.%x (" _YELLOW_("DESFire EV1") ")", major, minor); else if (major == 0x12 && minor == 0x00) - sprintf(retStr, "%x.%x (" _YELLOW_("DESFire EV2") ")", major, minor); -// else if (major == 0x13 && minor == 0x00) -// sprintf(retStr, "%x.%x (" _YELLOW_("DESFire EV3") ")", major, minor); + snprintf(retStr, sizeof(buf), "%x.%x (" _YELLOW_("DESFire EV2") ")", major, minor); + else if (major == 0x33 && minor == 0x00) + snprintf(retStr, sizeof(buf), "%x.%x (" _YELLOW_("DESFire EV3") ")", major, minor); else if (major == 0x30 && minor == 0x00) - sprintf(retStr, "%x.%x (" _YELLOW_("DESFire Light") ")", major, minor); + snprintf(retStr, sizeof(buf), "%x.%x (" _YELLOW_("DESFire Light") ")", major, minor); else if (major == 0x11 && minor == 0x00) - sprintf(retStr, "%x.%x (" _YELLOW_("Plus EV1") ")", major, minor); + snprintf(retStr, sizeof(buf), "%x.%x (" _YELLOW_("Plus EV1") ")", major, minor); else - sprintf(retStr, "%x.%x (" _YELLOW_("Unknown") ")", major, minor); + snprintf(retStr, sizeof(buf), "%x.%x (" _YELLOW_("Unknown") ")", major, minor); return buf; } @@ -112,16 +112,16 @@ static char *getTypeStr(uint8_t type) { switch (type) { case 1: - sprintf(retStr, "0x%02X (" _YELLOW_("DESFire") ")", type); + snprintf(retStr, sizeof(buf), "0x%02X (" _YELLOW_("DESFire") ")", type); break; case 2: - sprintf(retStr, "0x%02X (" _YELLOW_("Plus") ")", type); + snprintf(retStr, sizeof(buf), "0x%02X (" _YELLOW_("Plus") ")", type); break; case 3: - sprintf(retStr, "0x%02X (" _YELLOW_("Ultralight") ")", type); + snprintf(retStr, sizeof(buf), "0x%02X (" _YELLOW_("Ultralight") ")", type); break; case 4: - sprintf(retStr, "0x%02X (" _YELLOW_("NTAG") ")", type); + snprintf(retStr, sizeof(buf), "0x%02X (" _YELLOW_("NTAG") ")", type); break; default: break; @@ -144,8 +144,8 @@ static nxp_cardtype_t getCardType(uint8_t major, uint8_t minor) { return DESFIRE_EV2; // DESFire EV3 -// if (major == 0x13 && minor == 0x00 ) -// return DESFIRE_EV3; + if (major == 0x33 && minor == 0x00 ) + return DESFIRE_EV3; // DESFire Light if (major == 0x30 && minor == 0x00) @@ -969,8 +969,10 @@ static int MFPKeyCheck(uint8_t startSector, uint8_t endSector, uint8_t startKeyA // main cycle with key check for (int i = 0; i < keyListLen; i++) { if (i % 10 == 0) { - if (!verbose) - printf("."); + + if (verbose == false) + PrintAndLogEx(NORMAL, "." NOLF); + if (kbd_enter_pressed()) { PrintAndLogEx(WARNING, "\nAborted via keyboard!\n"); DropField(); @@ -988,9 +990,9 @@ static int MFPKeyCheck(uint8_t startSector, uint8_t endSector, uint8_t startKeyA break; if (verbose) - PrintAndLogEx(WARNING, "retried[%d]...", retry); + PrintAndLogEx(WARNING, "\nretried[%d]...", retry); else - printf("R"); + PrintAndLogEx(NORMAL, "R" NOLF); DropField(); selectCard = true; @@ -998,14 +1000,15 @@ static int MFPKeyCheck(uint8_t startSector, uint8_t endSector, uint8_t startKeyA } if (verbose) - PrintAndLogEx(WARNING, "sector %02d key %d [%s] res: %d", sector, keyAB, sprint_hex_inrow(keyList[i], 16), res); + PrintAndLogEx(WARNING, "\nsector %02d key %d [%s] res: %d", sector, keyAB, sprint_hex_inrow(keyList[i], 16), res); // key for [sector,keyAB] found if (res == 0) { if (verbose) - PrintAndLogEx(INFO, "Found key for sector %d key %s [%s]", sector, keyAB == 0 ? "A" : "B", sprint_hex_inrow(keyList[i], 16)); + PrintAndLogEx(INFO, "\nFound key for sector %d key %s [%s]", sector, keyAB == 0 ? "A" : "B", sprint_hex_inrow(keyList[i], 16)); else - printf("+"); + PrintAndLogEx(NORMAL, "+" NOLF); + foundKeys[keyAB][sector][0] = 0x01; memcpy(&foundKeys[keyAB][sector][1], keyList[i], AES_KEY_LEN); DropField(); @@ -1017,9 +1020,10 @@ static int MFPKeyCheck(uint8_t startSector, uint8_t endSector, uint8_t startKeyA // 5 - auth error (rnd not equal) if (res != 5) { if (verbose) - PrintAndLogEx(ERR, "Exchange error. Aborted."); + PrintAndLogEx(ERR, "\nExchange error. Aborted."); else - printf("E"); + PrintAndLogEx(NORMAL, "E" NOLF); + DropField(); return PM3_ECARDEXCHANGE; } @@ -1201,23 +1205,25 @@ static int CmdHFMFPChk(const char *Cmd) { PrintAndLogEx(INFO, "Loaded " _YELLOW_("%"PRIu32) " keys", keyListLen); } - if (!verbose) - printf("Search keys:"); + if (verbose == false) + PrintAndLogEx(NORMAL, "Search keys"); while (true) { res = MFPKeyCheck(startSector, endSector, startKeyAB, endKeyAB, keyList, keyListLen, foundKeys, verbose); if (res == PM3_EOPABORTED) break; if (pattern2b && startPattern < 0x10000) { - if (!verbose) - printf("p"); + if (verbose == false) + PrintAndLogEx(NORMAL, "p" NOLF); + keyListLen = 0; Fill2bPattern(keyList, &keyListLen, &startPattern); continue; } if (dict_filenamelen && endFilePosition) { - if (!verbose) - printf("d"); + if (verbose == false) + PrintAndLogEx(NORMAL, "d" NOLF); + uint32_t keycnt = 0; res = loadFileDICTIONARYEx((char *)dict_filename, keyList, sizeof(keyList), NULL, 16, &keycnt, endFilePosition, &endFilePosition, false); keyListLen = keycnt; @@ -1225,8 +1231,8 @@ static int CmdHFMFPChk(const char *Cmd) { } break; } - if (!verbose) - printf("\n"); + if (verbose == false) + PrintAndLogEx(NORMAL, ""); // print result bool printedHeader = false; From 30c0f857606d6a530fe299ec21d7a4ccd654ff74 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sat, 29 Aug 2020 15:35:16 +0200 Subject: [PATCH 0316/1047] no printf, no sprintf --- client/src/cmdhflegic.c | 39 +++++++++++++++++---------------------- 1 file changed, 17 insertions(+), 22 deletions(-) diff --git a/client/src/cmdhflegic.c b/client/src/cmdhflegic.c index a91c1a418..8ae88b7fb 100644 --- a/client/src/cmdhflegic.c +++ b/client/src/cmdhflegic.c @@ -709,16 +709,17 @@ static int CmdLegicWrbl(const char *Cmd) { char *answer = readline(confirm); overwrite = (answer[0] == 'y' || answer[0] == 'Y'); #else - printf("%s", confirm); + PrintAndLogEx(NORMAL, "%s" NOLF, confirm); char *answer = NULL; size_t anslen = 0; if (getline(&answer, &anslen, stdin) > 0) { overwrite = (answer[0] == 'y' || answer[0] == 'Y'); } + PrintAndLogEx(NORMAL, ""); #endif free(answer); - if (!overwrite) { - PrintAndLogEx(NORMAL, "command cancelled"); + if (overwrite == false) { + PrintAndLogEx(WARNING, "command cancelled"); return PM3_EOPABORTED; } } @@ -731,18 +732,16 @@ static int CmdLegicWrbl(const char *Cmd) { clearCommandBuffer(); SendCommandOLD(CMD_HF_LEGIC_WRITER, offset, len, IV, data, len); - uint8_t timeout = 0; while (!WaitForResponseTimeout(CMD_ACK, &resp, 2000)) { ++timeout; - printf("."); - fflush(stdout); + PrintAndLogEx(NORMAL, "." NOLF); if (timeout > 7) { PrintAndLogEx(WARNING, "\ncommand execution time out"); return PM3_ETIMEOUT; } } - PrintAndLogEx(NORMAL, "\n"); + PrintAndLogEx(NORMAL, ""); uint8_t isOK = resp.oldarg[0] & 0xFF; if (!isOK) { @@ -846,8 +845,7 @@ int legic_read_mem(uint32_t offset, uint32_t len, uint32_t iv, uint8_t *out, uin uint8_t timeout = 0; while (!WaitForResponseTimeout(CMD_ACK, &resp, 1000)) { ++timeout; - printf("."); - fflush(stdout); + PrintAndLogEx(NORMAL, "." NOLF); if (timeout > 14) { PrintAndLogEx(WARNING, "\ncommand execution time out"); return PM3_ETIMEOUT; @@ -990,14 +988,13 @@ static int CmdLegicDump(const char *Cmd) { uint8_t timeout = 0; while (!WaitForResponseTimeout(CMD_ACK, &resp, 2000)) { ++timeout; - printf("."); - fflush(stdout); + PrintAndLogEx(NORMAL, "." NOLF); if (timeout > 7) { PrintAndLogEx(WARNING, "\ncommand execution time out"); return PM3_ETIMEOUT; } } - PrintAndLogEx(NORMAL, "\n"); + PrintAndLogEx(NORMAL, ""); uint8_t isOK = resp.oldarg[0] & 0xFF; if (!isOK) { @@ -1025,7 +1022,7 @@ static int CmdLegicDump(const char *Cmd) { // user supplied filename? if (fileNameLen < 1) { PrintAndLogEx(INFO, "Using UID as filename"); - fptr += sprintf(fptr, "hf-legic-"); + fptr += snprintf(fptr, sizeof(filename), "hf-legic-"); FillFileNameByUID(fptr, data, "-dump", 4); } @@ -1134,15 +1131,14 @@ static int CmdLegicRestore(const char *Cmd) { uint8_t timeout = 0; while (!WaitForResponseTimeout(CMD_ACK, &resp, 2000)) { ++timeout; - printf("."); - fflush(stdout); + PrintAndLogEx(NORMAL, "." NOLF); if (timeout > 7) { PrintAndLogEx(WARNING, "\ncommand execution time out"); free(data); return PM3_ETIMEOUT; } } - PrintAndLogEx(NORMAL, "\n"); + PrintAndLogEx(NORMAL, ""); uint8_t isOK = resp.oldarg[0] & 0xFF; if (!isOK) { @@ -1300,7 +1296,7 @@ static int CmdLegicESave(const char *Cmd) { // user supplied filename? if (fileNameLen < 1) { PrintAndLogEx(INFO, "Using UID as filename"); - fptr += sprintf(fptr, "hf-legic-"); + fptr += snprintf(fptr, sizeof(filename), "hf-legic-"); FillFileNameByUID(fptr, data, "-dump", 4); } @@ -1344,8 +1340,8 @@ static int CmdLegicWipe(const char *Cmd) { PacketResponseNG resp; for (size_t i = 7; i < card.cardsize; i += PM3_CMD_DATA_SIZE) { - printf("."); - fflush(stdout); + PrintAndLogEx(NORMAL, "." NOLF); + size_t len = MIN((card.cardsize - i), PM3_CMD_DATA_SIZE); if (len == card.cardsize - i) { // Disable fast mode on last packet @@ -1357,15 +1353,14 @@ static int CmdLegicWipe(const char *Cmd) { uint8_t timeout = 0; while (!WaitForResponseTimeout(CMD_ACK, &resp, 2000)) { ++timeout; - printf("."); - fflush(stdout); + PrintAndLogEx(NORMAL, "." NOLF); if (timeout > 7) { PrintAndLogEx(WARNING, "\ncommand execution time out"); free(data); return PM3_ETIMEOUT; } } - PrintAndLogEx(NORMAL, "\n"); + PrintAndLogEx(NORMAL, ""); uint8_t isOK = resp.oldarg[0] & 0xFF; if (!isOK) { From c502b1a4f144df28ffc7d70e97fe986782dda244 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sat, 29 Aug 2020 15:55:15 +0200 Subject: [PATCH 0317/1047] no printf --- client/src/scripting.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/client/src/scripting.c b/client/src/scripting.c index a1fdb8a31..416ef2c77 100644 --- a/client/src/scripting.c +++ b/client/src/scripting.c @@ -474,14 +474,14 @@ static int l_mfDarkside(lua_State *L) { static int l_foobar(lua_State *L) { //Check number of arguments int n = lua_gettop(L); - printf("foobar called with %d arguments", n); + PrintAndLogEx(INFO, "foobar called with %d arguments", n); lua_settop(L, 0); - printf("Arguments discarded, stack now contains %d elements", lua_gettop(L)); + PrintAndLogEx(INFO, "Arguments discarded, stack now contains %d elements", lua_gettop(L)); // todo: this is not used, where was it intended for? // PacketCommandOLD response = {CMD_HF_MIFARE_READBL, {1337, 1338, 1339}, {{0}}}; - printf("Now returning a uint64_t as a string"); + PrintAndLogEx(INFO, "Now returning a uint64_t as a string"); uint64_t x = 0xDEADC0DE; uint8_t destination[8]; num_to_bytes(x, sizeof(x), destination); @@ -1046,7 +1046,7 @@ static int l_T55xx_detect(lua_State *L) { sscanf(p_gb, "%u", &gb); useGB = (gb) ? true : false; - printf("p_gb size %zu | %c \n", size, useGB ? 'Y' : 'N'); + PrintAndLogEx(INFO, "p_gb size %zu | %c", size, useGB ? 'Y' : 'N'); } case 1: { const char *p_pwd = luaL_checklstring(L, 1, &size); From dab9554ed9397e736962317cccb2d556ac55473b Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sat, 29 Aug 2020 16:00:27 +0200 Subject: [PATCH 0318/1047] no printf --- client/src/util.c | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/client/src/util.c b/client/src/util.c index e469dc095..161115993 100644 --- a/client/src/util.c +++ b/client/src/util.c @@ -96,6 +96,7 @@ void FillFileNameByUID(char *filenamePrefix, const uint8_t *uid, const char *ext for (int j = 0; j < uidlen; j++) sprintf(filenamePrefix + len + j * 2, "%02X", uid[j]); + strcat(filenamePrefix, ext); } @@ -176,26 +177,27 @@ void print_hex(const uint8_t *data, const size_t len) { if (data == NULL || len == 0) return; for (size_t i = 0; i < len; i++) - printf("%02x ", data[i]); - printf("\n"); + PrintAndLogEx(NORMAL, "%02x " NOLF, data[i]); + + PrintAndLogEx(NORMAL, ""); } void print_hex_break(const uint8_t *data, const size_t len, uint8_t breaks) { if (data == NULL || len == 0) return; int rownum = 0; - printf("[%02d] | ", rownum); + PrintAndLogEx(NORMAL, "[%02d] | " NOLF, rownum); for (size_t i = 0; i < len; ++i) { - printf("%02X ", data[i]); + PrintAndLogEx(NORMAL, "%02X " NOLF, data[i]); // check if a line break is needed if (breaks > 0 && !((i + 1) % breaks) && (i + 1 < len)) { ++rownum; - printf("\n[%02d] | ", rownum); + PrintAndLogEx(NORMAL, "\n[%02d] | " NOLF, rownum); } } - printf("\n"); + PrintAndLogEx(NORMAL, ""); } char *sprint_hex(const uint8_t *data, const size_t len) { @@ -229,7 +231,7 @@ char *sprint_bin_break(const uint8_t *data, const size_t len, const uint8_t brea if (breaks > 0 && len % breaks != 0) rowlen = (len + (len / breaks) > MAX_BIN_BREAK_LENGTH) ? MAX_BIN_BREAK_LENGTH : len + (len / breaks); - //printf("(sprint_bin_break) rowlen %d\n", rowlen); + //PrintAndLogEx(NORMAL, "(sprint_bin_break) rowlen %d", rowlen); static char buf[MAX_BIN_BREAK_LENGTH]; // 3072 + end of line characters if broken at 8 bits //clear memory @@ -267,7 +269,7 @@ void sprint_bin_break_ex(uint8_t *src, size_t srclen, char *dest , uint8_t break else rowlen = ( len+(len/breaks) > MAX_BIN_BREAK_LENGTH ) ? MAX_BIN_BREAK_LENGTH : len+(len/breaks); - printf("(sprint_bin_break) rowlen %d\n", rowlen); + PrintAndLogEx(NORMAL, "(sprint_bin_break) rowlen %d", rowlen); // 3072 + end of line characters if broken at 8 bits dest = (char *)calloc(MAX_BIN_BREAK_LENGTH, sizeof(uint8_t)); @@ -307,10 +309,13 @@ char *sprint_hex_ascii(const uint8_t *data, const size_t len) { size_t i = 0; size_t pos = (max_len * 3) + 2; + while (i < max_len) { + char c = data[i]; if ((c < 32) || (c == 127)) c = '.'; + sprintf(tmp + pos + i, "%c", c); ++i; } @@ -682,7 +687,7 @@ int hextobinarray(char *target, char *source) { else if (x >= 'A' && x <= 'F') x -= 'A' - 10; else { - printf("Discovered unknown character %c %d at idx %d of %s\n", x, x, (int16_t)(source - start), start); + PrintAndLogEx(INFO, "(hextobinarray) discovered unknown character %c %d at idx %d of %s", x, x, (int16_t)(source - start), start); return 0; } // output From 941c6f5d2536347db51f1b78e7838006afb41d7f Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sat, 29 Aug 2020 16:06:08 +0200 Subject: [PATCH 0319/1047] no printf --- client/src/fido/cbortools.c | 49 +++++++++++++++++++++---------------- 1 file changed, 28 insertions(+), 21 deletions(-) diff --git a/client/src/fido/cbortools.c b/client/src/fido/cbortools.c index a7b08e619..85566a954 100644 --- a/client/src/fido/cbortools.c +++ b/client/src/fido/cbortools.c @@ -11,16 +11,15 @@ // #include "cbortools.h" - #include - #include "emv/emvjson.h" #include "util.h" +#include "ui.h" // PrintAndLogEx( #include "fidocore.h" static void indent(int nestingLevel) { while (nestingLevel--) - printf(" "); + PrintAndLogEx(NORMAL, " " NOLF); } static CborError dumpelm(CborValue *it, bool *got_next, int nestingLevel) { @@ -32,14 +31,14 @@ static CborError dumpelm(CborValue *it, bool *got_next, int nestingLevel) { switch (type) { case CborMapType: case CborArrayType: { - printf(type == CborArrayType ? "Array[" : "Map["); + PrintAndLogEx(NORMAL, "%s" NOLF, (type == CborArrayType) ? "Array[" : "Map["); break; } case CborIntegerType: { int64_t val; cbor_value_get_int64(it, &val); // can't fail - printf("%lld", (long long)val); + PrintAndLogEx(NORMAL, "%lld" NOLF, (long long)val); break; } @@ -50,7 +49,8 @@ static CborError dumpelm(CborValue *it, bool *got_next, int nestingLevel) { *got_next = true; if (err) return err; // parse error - printf("%s", sprint_hex(buf, n)); + + PrintAndLogEx(NORMAL, "%s" NOLF, sprint_hex(buf, n)); free(buf); break; } @@ -62,7 +62,8 @@ static CborError dumpelm(CborValue *it, bool *got_next, int nestingLevel) { *got_next = true; if (err) return err; // parse error - printf("%s", buf); + + PrintAndLogEx(NORMAL, "%s" NOLF, buf); free(buf); break; } @@ -70,29 +71,29 @@ static CborError dumpelm(CborValue *it, bool *got_next, int nestingLevel) { case CborTagType: { CborTag tag; cbor_value_get_tag(it, &tag); - printf("Tag(%lld)", (long long)tag); + PrintAndLogEx(NORMAL, "Tag(%lld)" NOLF, (long long)tag); break; } case CborSimpleType: { uint8_t t; cbor_value_get_simple_type(it, &t); - printf("simple(%u)", t); + PrintAndLogEx(NORMAL, "simple(%u)" NOLF, t); break; } case CborNullType: - printf("null"); + PrintAndLogEx(NORMAL, "null" NOLF); break; case CborUndefinedType: - printf("undefined"); + PrintAndLogEx(NORMAL, "undefined" NOLF); break; case CborBooleanType: { bool val; cbor_value_get_boolean(it, &val); // can't fail - printf("%s", val ? "true" : "false"); + PrintAndLogEx(NORMAL, "%s" NOLF, (val) ? "true" : "false"); break; } @@ -106,18 +107,18 @@ static CborError dumpelm(CborValue *it, bool *got_next, int nestingLevel) { } else { cbor_value_get_double(it, &val); } - printf("%g", val); + PrintAndLogEx(NORMAL, "%g" NOLF, val); break; } case CborHalfFloatType: { uint16_t val; cbor_value_get_half_float(it, &val); - printf("__f16(%04x)", val); + PrintAndLogEx(NORMAL, "__f16(%04x)" NOLF, val); break; } case CborInvalidType: - printf("CborInvalidType!!!"); + PrintAndLogEx(NORMAL, _RED_("CborInvalidType!!!") NOLF); break; } @@ -129,7 +130,7 @@ static CborError dumprecursive(uint8_t cmdCode, bool isResponse, CborValue *it, while (!cbor_value_at_end(it)) { CborError err; CborType type = cbor_value_get_type(it); -//printf("^%x^", type); + bool got_next = false; switch (type) { @@ -140,18 +141,23 @@ static CborError dumprecursive(uint8_t cmdCode, bool isResponse, CborValue *it, assert(cbor_value_is_container(it)); if (!(isMapType && (elmCount % 2))) indent(nestingLevel); - printf(type == CborArrayType ? "Array[\n" : "Map[\n"); + + PrintAndLogEx(NORMAL, "%s" NOLF, (type == CborArrayType) ? "Array[\n" : "Map[\n"); + err = cbor_value_enter_container(it, &recursed); if (err) return err; // parse error + err = dumprecursive(cmdCode, isResponse, &recursed, (type == CborMapType), nestingLevel + 1); if (err) return err; // parse error + err = cbor_value_leave_container(it, &recursed); if (err) return err; // parse error + indent(nestingLevel); - printf("]"); + PrintAndLogEx(NORMAL, "]" NOLF); got_next = true; break; } @@ -170,12 +176,13 @@ static CborError dumprecursive(uint8_t cmdCode, bool isResponse, CborValue *it, err = dumpelm(it, &got_next, (isMapType && (elmCount % 2)) ? 0 : nestingLevel); if (err) return err; + if (cmdCode > 0 && nestingLevel == 1 && isMapType && !(elmCount % 2)) { int64_t val; cbor_value_get_int64(it, &val); const char *desc = fido2GetCmdMemberDescription(cmdCode, isResponse, val); if (desc) - printf(" (%s)", desc); + PrintAndLogEx(NORMAL, " (%s)" NOLF, desc); } break; } @@ -187,9 +194,9 @@ static CborError dumprecursive(uint8_t cmdCode, bool isResponse, CborValue *it, return err; } if (isMapType && !(elmCount % 2)) { - printf(": "); + PrintAndLogEx(NORMAL, ": " NOLF); } else { - printf("\n"); + PrintAndLogEx(NORMAL, ""); } elmCount++; } From dfaba2ee8ca3cd7675ddf49aa5e69fd0741a4296 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sat, 29 Aug 2020 16:15:04 +0200 Subject: [PATCH 0320/1047] no printf --- client/deps/hardnested/hardnested_bf_core.c | 30 ++++++++++----------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/client/deps/hardnested/hardnested_bf_core.c b/client/deps/hardnested/hardnested_bf_core.c index 5f4fcf991..719578331 100644 --- a/client/deps/hardnested/hardnested_bf_core.c +++ b/client/deps/hardnested/hardnested_bf_core.c @@ -59,7 +59,7 @@ THE SOFTWARE. #include #include "crapto1/crapto1.h" #include "parity.h" -//#include "util.h" +#include "ui.h" // PrintAndLogEx //#include "common.h" // bitslice type @@ -238,18 +238,18 @@ uint64_t CRACK_STATES_BITSLICED(uint32_t cuid, uint8_t *best_first_bytes, statel // bitslice all the even states bitslice_t **restrict bitsliced_even_states = (bitslice_t **)malloc(((p->len[EVEN_STATE] - 1) / MAX_BITSLICES + 1) * sizeof(bitslice_t *)); if (bitsliced_even_states == NULL) { - printf("Out of memory error in brute_force. Aborting..."); + PrintAndLogEx(WARNING, "Out of memory error in brute_force. Aborting..."); exit(4); } bitslice_value_t *restrict bitsliced_even_feedback = malloc_bitslice(((p->len[EVEN_STATE] - 1) / MAX_BITSLICES + 1) * sizeof(bitslice_value_t)); if (bitsliced_even_feedback == NULL) { - printf("Out of memory error in brute_force. Aborting..."); + PrintAndLogEx(WARNING, "Out of memory error in brute_force. Aborting..."); exit(4); } for (uint32_t *restrict p_even = p->states[EVEN_STATE]; p_even < p_even_end; p_even += MAX_BITSLICES) { bitslice_t *restrict lstate_p = malloc_bitslice(STATE_SIZE / 2 * sizeof(bitslice_t)); if (lstate_p == NULL) { - printf("Out of memory error in brute_force. Aborting... \n"); + PrintAndLogEx(WARNING, "Out of memory error in brute_force. Aborting... \n"); exit(4); } memset(lstate_p, 0x00, STATE_SIZE / 2 * sizeof(bitslice_t)); // zero even bits @@ -265,8 +265,8 @@ uint64_t CRACK_STATES_BITSLICED(uint32_t cuid, uint8_t *best_first_bytes, statel #ifdef DEBUG_KEY_ELIMINATION if (known_target_key != -1 && e == test_state[EVEN_STATE]) { bucket_contains_test_key[bitsliced_blocks] = true; - // printf("bucket %d contains test key even state\n", bitsliced_blocks); - // printf("in slice %d\n", slice_idx); + // PrintAndLogEx(INFO, "bucket %d contains test key even state", bitsliced_blocks); + // PrintAndLogEx(INFO, "in slice %d", slice_idx); } #endif for (uint32_t bit_idx = 0; bit_idx < STATE_SIZE / 2; bit_idx++, e >>= 1) { @@ -336,8 +336,8 @@ uint64_t CRACK_STATES_BITSLICED(uint32_t cuid, uint8_t *best_first_bytes, statel #ifdef DEBUG_KEY_ELIMINATION // if (known_target_key != -1 && bucket_contains_test_key[block_idx] && *p_odd == test_state[ODD_STATE]) { - // printf("Now testing known target key.\n"); - // printf("block_idx = %d/%d\n", block_idx, bitsliced_blocks); + // PrintAndLogEx(INFO, "Now testing known target key."); + // PrintAndLogEx(INFO, "block_idx = %d/%d", block_idx, bitsliced_blocks); // } #endif // add the even state bits @@ -444,8 +444,8 @@ uint64_t CRACK_STATES_BITSLICED(uint32_t cuid, uint8_t *best_first_bytes, statel #endif #ifdef DEBUG_KEY_ELIMINATION if (known_target_key != -1 && bucket_contains_test_key[block_idx] && *p_odd == test_state[ODD_STATE]) { - printf("Known target key eliminated in brute_force.\n"); - printf("block_idx = %d/%d, nonce = %d/%d\n", block_idx, bitsliced_blocks, tests, nonces_to_bruteforce); + PrintAndLogEx(INFO, "Known target key eliminated in brute_force."); + PrintAndLogEx(INFO, "block_idx = %d/%d, nonce = %d/%d", block_idx, bitsliced_blocks, tests, nonces_to_bruteforce); } #endif goto stop_tests; @@ -495,15 +495,15 @@ uint64_t CRACK_STATES_BITSLICED(uint32_t cuid, uint8_t *best_first_bytes, statel } #ifdef DEBUG_KEY_ELIMINATION if (known_target_key != -1 && *p_even_test == test_state[EVEN_STATE] && *p_odd == test_state[ODD_STATE]) { - printf("Known target key eliminated in brute_force verification.\n"); - printf("block_idx = %d/%d\n", block_idx, bitsliced_blocks); + PrintAndLogEx(INFO, "Known target key eliminated in brute_force verification."); + PrintAndLogEx(INFO, "block_idx = %d/%d", block_idx, bitsliced_blocks); } #endif } #ifdef DEBUG_KEY_ELIMINATION if (known_target_key != -1 && *p_even_test == test_state[EVEN_STATE] && *p_odd == test_state[ODD_STATE]) { - printf("Known target key eliminated in brute_force (results_bit == 0).\n"); - printf("block_idx = %d/%d\n", block_idx, bitsliced_blocks); + PrintAndLogEx(INFO, "Known target key eliminated in brute_force (results_bit == 0)."); + PrintAndLogEx(INFO, "block_idx = %d/%d", block_idx, bitsliced_blocks); } #endif results64 >>= 1; @@ -533,7 +533,7 @@ out: #if defined (DEBUG_BRUTE_FORCE) for (uint32_t i = 0; i < MAX_ELIMINATION_STEP; i++) { - printf("Eliminated after %2u test_bytes: %5.2f%%\n", i + 1, (float)keys_eliminated[i] / bucket_states_tested * 100); + PrintAndLogEx(INFO, "Eliminated after %2u test_bytes: %5.2f%%", i + 1, (float)keys_eliminated[i] / bucket_states_tested * 100); } #endif return key; From bb926587926cbe6d590ec6528898a007d5f68728 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sat, 29 Aug 2020 16:21:17 +0200 Subject: [PATCH 0321/1047] no printf --- client/src/proxmark3.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/src/proxmark3.c b/client/src/proxmark3.c index a6ac33bd4..ba2c00de1 100644 --- a/client/src/proxmark3.c +++ b/client/src/proxmark3.c @@ -108,7 +108,7 @@ static void showBanner(void) { #endif // PrintAndLogEx(NORMAL, "\nSupport iceman on patreon - https://www.patreon.com/iceman1001/"); // PrintAndLogEx(NORMAL, " on paypal - https://www.paypal.me/iceman1001"); -// printf("\nMonero: 43mNJLpgBVaTvyZmX9ajcohpvVkaRy1kbZPm8tqAb7itZgfuYecgkRF36rXrKFUkwEGeZedPsASRxgv4HPBHvJwyJdyvQuP"); +// PrintAndLogEx(NORMAL, "\nMonero: 43mNJLpgBVaTvyZmX9ajcohpvVkaRy1kbZPm8tqAb7itZgfuYecgkRF36rXrKFUkwEGeZedPsASRxgv4HPBHvJwyJdyvQuP"); PrintAndLogEx(NORMAL, ""); fflush(stdout); g_printAndLog = PRINTANDLOG_PRINT | PRINTANDLOG_LOG; From bf3f2da73dbbcfdc1f6d608b29f2da3de6da4773 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sat, 29 Aug 2020 17:27:55 +0200 Subject: [PATCH 0322/1047] link in file --- client/src/loclass/hash1_brute.c | 1 + 1 file changed, 1 insertion(+) diff --git a/client/src/loclass/hash1_brute.c b/client/src/loclass/hash1_brute.c index 99e8f49f6..19a18077a 100644 --- a/client/src/loclass/hash1_brute.c +++ b/client/src/loclass/hash1_brute.c @@ -7,6 +7,7 @@ #include #include #include "elite_crack.h" +#include "ui.h" static void calc_score(uint8_t *csn, uint8_t *k) { uint8_t score = 0 ; From e9f84f1e2de7ed4d22e2774f3c806a2f5a3adde5 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Sat, 29 Aug 2020 22:54:55 +0200 Subject: [PATCH 0323/1047] noprintf: fix cmake --- client/deps/hardnested.cmake | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/client/deps/hardnested.cmake b/client/deps/hardnested.cmake index 6ec4f0297..f9248b82d 100644 --- a/client/deps/hardnested.cmake +++ b/client/deps/hardnested.cmake @@ -7,7 +7,8 @@ set_property(TARGET pm3rrg_rdv4_hardnested_nosimd PROPERTY POSITION_INDEPENDENT_ target_include_directories(pm3rrg_rdv4_hardnested_nosimd PRIVATE ../../common - ../../include) + ../../include + ../src) ## CPU-specific code ## These are mostly for x86-based architectures, which is not useful for many Android devices. @@ -34,7 +35,8 @@ if ("${CMAKE_SYSTEM_PROCESSOR}" IN_LIST X86_CPUS) target_include_directories(pm3rrg_rdv4_hardnested_mmx PRIVATE ../../common - ../../include) + ../../include + ../src) ## x86 / SSE2 add_library(pm3rrg_rdv4_hardnested_sse2 OBJECT @@ -48,7 +50,8 @@ if ("${CMAKE_SYSTEM_PROCESSOR}" IN_LIST X86_CPUS) target_include_directories(pm3rrg_rdv4_hardnested_sse2 PRIVATE ../../common - ../../include) + ../../include + ../src) ## x86 / AVX add_library(pm3rrg_rdv4_hardnested_avx OBJECT @@ -62,7 +65,8 @@ if ("${CMAKE_SYSTEM_PROCESSOR}" IN_LIST X86_CPUS) target_include_directories(pm3rrg_rdv4_hardnested_avx PRIVATE ../../common - ../../include) + ../../include + ../src) ## x86 / AVX2 add_library(pm3rrg_rdv4_hardnested_avx2 OBJECT @@ -76,7 +80,8 @@ if ("${CMAKE_SYSTEM_PROCESSOR}" IN_LIST X86_CPUS) target_include_directories(pm3rrg_rdv4_hardnested_avx2 PRIVATE ../../common - ../../include) + ../../include + ../src) ## x86 / AVX512 add_library(pm3rrg_rdv4_hardnested_avx512 OBJECT @@ -90,7 +95,8 @@ if ("${CMAKE_SYSTEM_PROCESSOR}" IN_LIST X86_CPUS) target_include_directories(pm3rrg_rdv4_hardnested_avx512 PRIVATE ../../common - ../../include) + ../../include + ../src) set(SIMD_TARGETS $ From 5b6bd2fcbaf633b3fe1a58226dc1d3662ab695a1 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sun, 30 Aug 2020 01:04:18 +0200 Subject: [PATCH 0324/1047] add "hf mf cview" --- client/src/cmdhfmf.c | 102 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 101 insertions(+), 1 deletion(-) diff --git a/client/src/cmdhfmf.c b/client/src/cmdhfmf.c index 7051fac5f..0c989d959 100644 --- a/client/src/cmdhfmf.c +++ b/client/src/cmdhfmf.c @@ -9,7 +9,6 @@ //----------------------------------------------------------------------------- #include "cmdhfmf.h" - #include #include "cmdparser.h" // command_t @@ -467,6 +466,18 @@ static int usage_hf14_csave(void) { PrintAndLogEx(NORMAL, _YELLOW_(" hf mf csave 4 o filename")); return PM3_SUCCESS; } +static int usage_hf14_cview(void) { + PrintAndLogEx(NORMAL, "View `magic Chinese` card "); + PrintAndLogEx(NORMAL, ""); + PrintAndLogEx(NORMAL, "Usage: hf mf cview [h] [card memory]"); + PrintAndLogEx(NORMAL, "Options:"); + PrintAndLogEx(NORMAL, " h this help"); + PrintAndLogEx(NORMAL, " card memory 0 = 320 bytes (Mifare Mini), 1 = 1K (default), 2 = 2K, 4 = 4K"); + PrintAndLogEx(NORMAL, ""); + PrintAndLogEx(NORMAL, "Examples:"); + PrintAndLogEx(NORMAL, _YELLOW_(" hf mf cview 1")); + return PM3_SUCCESS; +} static int usage_hf14_nack(void) { PrintAndLogEx(NORMAL, "Test a mifare classic based card for the NACK bug."); PrintAndLogEx(NORMAL, ""); @@ -4248,6 +4259,93 @@ static int CmdHF14AMfCSave(const char *Cmd) { return PM3_SUCCESS; } +static int CmdHF14AMfCView(const char *Cmd) { + + bool errors = false; + int flags; + uint8_t numblocks = 0, cmdp = 0; + uint16_t bytes = 0; + + while (param_getchar(Cmd, cmdp) != 0x00 && !errors) { + char ctmp = tolower(param_getchar(Cmd, cmdp)); + switch (ctmp) { + case 'h': + return usage_hf14_cview(); + case '0': + case '1': + case '2': + case '4': + numblocks = NumOfBlocks(ctmp); + bytes = numblocks * MFBLOCK_SIZE; + PrintAndLogEx(SUCCESS, "View magic mifare %cK", ctmp); + cmdp++; + break; + default: + PrintAndLogEx(WARNING, "Unknown parameter '%c'", param_getchar(Cmd, cmdp)); + errors = true; + break; + } + } + + if (errors || cmdp == 0) return usage_hf14_cview(); + + uint8_t *dump = calloc(bytes, sizeof(uint8_t)); + if (!dump) { + PrintAndLogEx(WARNING, "Fail, cannot allocate memory"); + return PM3_EMALLOC; + } + + // Select card to get UID/UIDLEN information + clearCommandBuffer(); + SendCommandMIX(CMD_HF_ISO14443A_READER, ISO14A_CONNECT, 0, 0, NULL, 0); + PacketResponseNG resp; + if (!WaitForResponseTimeout(CMD_ACK, &resp, 1500)) { + PrintAndLogEx(WARNING, "iso14443a card select failed"); + free(dump); + return PM3_ESOFT; + } + + /* + 0: couldn't read + 1: OK, with ATS + 2: OK, no ATS + 3: proprietary Anticollision + */ + uint64_t select_status = resp.oldarg[0]; + + if (select_status == 0) { + PrintAndLogEx(WARNING, "iso14443a card select failed"); + free(dump); + return select_status; + } + + iso14a_card_select_t card; + memcpy(&card, (iso14a_card_select_t *)resp.data.asBytes, sizeof(iso14a_card_select_t)); + + flags = MAGIC_INIT + MAGIC_WUPC; + for (uint16_t i = 0; i < numblocks; i++) { + if (i == 1) flags = 0; + if (i == numblocks - 1) flags = MAGIC_HALT + MAGIC_OFF; + + if (mfCGetBlock(i, dump + (i * MFBLOCK_SIZE), flags)) { + PrintAndLogEx(WARNING, "Cant get block: %d", i); + free(dump); + return PM3_ESOFT; + } + } + + // print + PrintAndLogEx(INFO, " blk | data | ascii"); + PrintAndLogEx(INFO, "------+--------------------------------+----------------------"); + for (uint16_t i = 0; i < numblocks; i++){ + PrintAndLogEx(INFO, "%03d | %s ", i, sprint_hex_ascii(dump + (i * 16) , 16) ); + } + PrintAndLogEx(INFO, "------+--------------------------------+----------------------"); + + free(dump); + return PM3_SUCCESS; +} + //needs nt, ar, at, Data to decrypt static int CmdHf14AMfDecryptBytes(const char *Cmd) { @@ -4873,6 +4971,8 @@ static command_t CommandTable[] = { {"cgetsc", CmdHF14AMfCGetSc, IfPm3Iso14443a, "Read sector (magic chinese card)"}, {"cload", CmdHF14AMfCLoad, IfPm3Iso14443a, "Load dump (magic chinese card)"}, {"csave", CmdHF14AMfCSave, IfPm3Iso14443a, "Save dump from magic chinese card into file or emulator"}, + {"cview", CmdHF14AMfCView, IfPm3Iso14443a, "view card"}, + {"-----------", CmdHelp, IfPm3Iso14443a, "----------------------- " _CYAN_("i") " -----------------------"}, {"ice", CmdHF14AMfice, IfPm3Iso14443a, "collect MIFARE Classic nonces to file"}, {NULL, NULL, NULL, NULL} From 85b3687ae574c63025737761fb3ec078784d2268 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sun, 30 Aug 2020 01:10:52 +0200 Subject: [PATCH 0325/1047] hf mf cview --- client/src/cmdhfmf.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/client/src/cmdhfmf.c b/client/src/cmdhfmf.c index 0c989d959..be450c69c 100644 --- a/client/src/cmdhfmf.c +++ b/client/src/cmdhfmf.c @@ -4335,12 +4335,14 @@ static int CmdHF14AMfCView(const char *Cmd) { } // print - PrintAndLogEx(INFO, " blk | data | ascii"); - PrintAndLogEx(INFO, "------+--------------------------------+----------------------"); + PrintAndLogEx(NORMAL, ""); + PrintAndLogEx(INFO, "----+-------------------------------------------------+-----------------"); + PrintAndLogEx(INFO, "blk | data | ascii"); + PrintAndLogEx(INFO, "----+-------------------------------------------------+-----------------"); for (uint16_t i = 0; i < numblocks; i++){ PrintAndLogEx(INFO, "%03d | %s ", i, sprint_hex_ascii(dump + (i * 16) , 16) ); } - PrintAndLogEx(INFO, "------+--------------------------------+----------------------"); + PrintAndLogEx(INFO, "----+-------------------------------------------------+-----------------"); free(dump); return PM3_SUCCESS; From 62d734dbfc3d3e13135af4c846c04f3f4fc6428b Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sun, 30 Aug 2020 01:12:27 +0200 Subject: [PATCH 0326/1047] hf mf cview --- client/src/cmdhfmf.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/client/src/cmdhfmf.c b/client/src/cmdhfmf.c index be450c69c..9062acac4 100644 --- a/client/src/cmdhfmf.c +++ b/client/src/cmdhfmf.c @@ -4340,7 +4340,12 @@ static int CmdHF14AMfCView(const char *Cmd) { PrintAndLogEx(INFO, "blk | data | ascii"); PrintAndLogEx(INFO, "----+-------------------------------------------------+-----------------"); for (uint16_t i = 0; i < numblocks; i++){ - PrintAndLogEx(INFO, "%03d | %s ", i, sprint_hex_ascii(dump + (i * 16) , 16) ); + + if (mfIsSectorTrailer(blockNo)) { + PrintAndLogEx(INFO, "%03d | " _YELLOW_("%s")", i, sprint_hex_ascii(dump + (i * 16) , 16) ); + } else { + PrintAndLogEx(INFO, "%03d | %s ", i, sprint_hex_ascii(dump + (i * 16) , 16) ); + } } PrintAndLogEx(INFO, "----+-------------------------------------------------+-----------------"); From 63b92a37827ec33dbf25998c61a5b48cfbfa618c Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sun, 30 Aug 2020 01:14:50 +0200 Subject: [PATCH 0327/1047] hf mf cview --- client/src/cmdhfmf.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/client/src/cmdhfmf.c b/client/src/cmdhfmf.c index 9062acac4..283c9eddd 100644 --- a/client/src/cmdhfmf.c +++ b/client/src/cmdhfmf.c @@ -4341,8 +4341,10 @@ static int CmdHF14AMfCView(const char *Cmd) { PrintAndLogEx(INFO, "----+-------------------------------------------------+-----------------"); for (uint16_t i = 0; i < numblocks; i++){ - if (mfIsSectorTrailer(blockNo)) { - PrintAndLogEx(INFO, "%03d | " _YELLOW_("%s")", i, sprint_hex_ascii(dump + (i * 16) , 16) ); + if (i == 0) { + PrintAndLogEx(INFO, "%03d | " _RED_("%s"), i, sprint_hex_ascii(dump + (i * 16) , 16) ); + } else if (mfIsSectorTrailer(i)) { + PrintAndLogEx(INFO, "%03d | " _YELLOW_("%s"), i, sprint_hex_ascii(dump + (i * 16) , 16) ); } else { PrintAndLogEx(INFO, "%03d | %s ", i, sprint_hex_ascii(dump + (i * 16) , 16) ); } From dec5c3fa97a08c6fa7a96b4afcfe058280c91e1d Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sun, 30 Aug 2020 01:29:43 +0200 Subject: [PATCH 0328/1047] textual for @doegox and @jirvin --- client/src/cmdhfmf.c | 68 +++++++++++++++++++++++--------------------- 1 file changed, 35 insertions(+), 33 deletions(-) diff --git a/client/src/cmdhfmf.c b/client/src/cmdhfmf.c index 283c9eddd..3b39f3bb6 100644 --- a/client/src/cmdhfmf.c +++ b/client/src/cmdhfmf.c @@ -54,7 +54,7 @@ static int usage_hf14_ice(void) { static int usage_hf14_dump(void) { PrintAndLogEx(NORMAL, "Usage: hf mf dump [card memory] [k ] [f ]"); - PrintAndLogEx(NORMAL, " [card memory]: 0 = 320 bytes (Mifare Mini), 1 = 1K (default), 2 = 2K, 4 = 4K"); + PrintAndLogEx(NORMAL, " [card memory]: 0 = 320 bytes (MIFARE Mini), 1 = 1K (default), 2 = 2K, 4 = 4K"); PrintAndLogEx(NORMAL, " k : key filename, if no given, UID will be used as filename"); PrintAndLogEx(NORMAL, " f : data filename, if no given, UID will be used as filename"); PrintAndLogEx(NORMAL, ""); @@ -191,7 +191,7 @@ static int usage_hf14_autopwn(void) { PrintAndLogEx(NORMAL, " [* ] [f [.dic]] [s] [i ] [l] [v]"); PrintAndLogEx(NORMAL, ""); PrintAndLogEx(NORMAL, "Description:"); - PrintAndLogEx(NORMAL, " This command automates the key recovery process on Mifare classic cards."); + PrintAndLogEx(NORMAL, " This command automates the key recovery process on MIFARE Classic cards."); PrintAndLogEx(NORMAL, " It uses the darkside, nested and hardnested attack to extract the keys and card content."); PrintAndLogEx(NORMAL, ""); PrintAndLogEx(NORMAL, "Options:"); @@ -219,9 +219,9 @@ static int usage_hf14_autopwn(void) { PrintAndLogEx(NORMAL, " i n = none (use CPU regular instruction set)"); PrintAndLogEx(NORMAL, ""); PrintAndLogEx(NORMAL, "Examples:"); - PrintAndLogEx(NORMAL, _YELLOW_(" hf mf autopwn")" -- target Mifare classic card with default keys"); - PrintAndLogEx(NORMAL, _YELLOW_(" hf mf autopwn * 1 f mfc_default_keys")" -- target Mifare classic card (size 1k) with default dictionary"); - PrintAndLogEx(NORMAL, _YELLOW_(" hf mf autopwn k 0 A FFFFFFFFFFFF")" -- target Mifare classic card with Sector0 typeA with known key 'FFFFFFFFFFFF'"); + PrintAndLogEx(NORMAL, _YELLOW_(" hf mf autopwn")" -- target MIFARE Classic card with default keys"); + PrintAndLogEx(NORMAL, _YELLOW_(" hf mf autopwn * 1 f mfc_default_keys")" -- target MIFARE Classic card (size 1k) with default dictionary"); + PrintAndLogEx(NORMAL, _YELLOW_(" hf mf autopwn k 0 A FFFFFFFFFFFF")" -- target MIFARE Classic card with Sector0 typeA with known key 'FFFFFFFFFFFF'"); PrintAndLogEx(NORMAL, _YELLOW_(" hf mf autopwn k 0 A FFFFFFFFFFFF * 1 f mfc_default_keys")" -- this command combines the two above (reduce the need for nested / hardnested attacks, by using a dictionary)"); return PM3_SUCCESS; } @@ -245,7 +245,7 @@ static int usage_hf14_chk(void) { return PM3_SUCCESS; } static int usage_hf14_chk_fast(void) { - PrintAndLogEx(NORMAL, "This is a improved checkkeys method speedwise. It checks Mifare Classic tags sector keys against a dictionary file with keys"); + PrintAndLogEx(NORMAL, "This is a improved checkkeys method speedwise. It checks MIFARE Classic tags sector keys against a dictionary file with keys"); PrintAndLogEx(NORMAL, "Usage: hf mf fchk [h] [t|d|f] [] []"); PrintAndLogEx(NORMAL, "Options:"); PrintAndLogEx(NORMAL, " h this help"); @@ -289,7 +289,7 @@ static int usage_hf14_keybrute(void) { static int usage_hf14_restore(void) { PrintAndLogEx(NORMAL, "Usage: hf mf restore [card memory] u k f "); PrintAndLogEx(NORMAL, "Options:"); - PrintAndLogEx(NORMAL, " [card memory]: 0 = 320 bytes (Mifare Mini), 1 = 1K (default), 2 = 2K, 4 = 4K"); + PrintAndLogEx(NORMAL, " [card memory]: 0 = 320 bytes (MIFARE Mini), 1 = 1K (default), 2 = 2K, 4 = 4K"); PrintAndLogEx(NORMAL, " u : uid, try to restore from hf-mf--key.bin and hf-mf--dump.bin"); PrintAndLogEx(NORMAL, " k : key filename, specific the full filename of key file"); PrintAndLogEx(NORMAL, " f : data filename, specific the full filename of data file"); @@ -338,7 +338,7 @@ static int usage_hf14_eset(void) { static int usage_hf14_eload(void) { PrintAndLogEx(NORMAL, "It loads emul dump from the file `filename.eml`"); PrintAndLogEx(NORMAL, "Usage: hf mf eload [card memory] [numblocks]"); - PrintAndLogEx(NORMAL, " [card memory]: 0 = 320 bytes (Mifare Mini), 1 = 1K (default), 2 = 2K, 4 = 4K, u = UL"); + PrintAndLogEx(NORMAL, " [card memory]: 0 = 320 bytes (MIFARE Mini), 1 = 1K (default), 2 = 2K, 4 = 4K, u = UL"); PrintAndLogEx(NORMAL, ""); PrintAndLogEx(NORMAL, "Examples:"); PrintAndLogEx(NORMAL, _YELLOW_(" hf mf eload filename")); @@ -348,7 +348,7 @@ static int usage_hf14_eload(void) { static int usage_hf14_esave(void) { PrintAndLogEx(NORMAL, "It saves emul dump into the file `filename.eml` or `cardID.eml`"); PrintAndLogEx(NORMAL, " Usage: hf mf esave [card memory] [file name w/o `.eml`]"); - PrintAndLogEx(NORMAL, " [card memory]: 0 = 320 bytes (Mifare Mini), 1 = 1K (default), 2 = 2K, 4 = 4K"); + PrintAndLogEx(NORMAL, " [card memory]: 0 = 320 bytes (MIFARE Mini), 1 = 1K (default), 2 = 2K, 4 = 4K"); PrintAndLogEx(NORMAL, ""); PrintAndLogEx(NORMAL, "Examples:"); PrintAndLogEx(NORMAL, _YELLOW_(" hf mf esave")); @@ -360,7 +360,7 @@ static int usage_hf14_ecfill(void) { PrintAndLogEx(NORMAL, "Read card and transfer its data to emulator memory."); PrintAndLogEx(NORMAL, "Keys must be laid in the emulator memory. \n"); PrintAndLogEx(NORMAL, "Usage: hf mf ecfill [card memory]"); - PrintAndLogEx(NORMAL, " [card memory]: 0 = 320 bytes (Mifare Mini), 1 = 1K (default), 2 = 2K, 4 = 4K"); + PrintAndLogEx(NORMAL, " [card memory]: 0 = 320 bytes (MIFARE Mini), 1 = 1K (default), 2 = 2K, 4 = 4K"); PrintAndLogEx(NORMAL, ""); PrintAndLogEx(NORMAL, "Examples:"); PrintAndLogEx(NORMAL, _YELLOW_(" hf mf ecfill A")); @@ -457,7 +457,7 @@ static int usage_hf14_csave(void) { PrintAndLogEx(NORMAL, " h this help"); PrintAndLogEx(NORMAL, " e save data to emulator memory"); PrintAndLogEx(NORMAL, " u save data to file, use carduid as filename"); - PrintAndLogEx(NORMAL, " card memory 0 = 320 bytes (Mifare Mini), 1 = 1K (default), 2 = 2K, 4 = 4K"); + PrintAndLogEx(NORMAL, " card memory 0 = 320 bytes (MIFARE Mini), 1 = 1K (default), 2 = 2K, 4 = 4K"); PrintAndLogEx(NORMAL, " o save data to file"); PrintAndLogEx(NORMAL, ""); PrintAndLogEx(NORMAL, "Examples:"); @@ -472,14 +472,14 @@ static int usage_hf14_cview(void) { PrintAndLogEx(NORMAL, "Usage: hf mf cview [h] [card memory]"); PrintAndLogEx(NORMAL, "Options:"); PrintAndLogEx(NORMAL, " h this help"); - PrintAndLogEx(NORMAL, " card memory 0 = 320 bytes (Mifare Mini), 1 = 1K (default), 2 = 2K, 4 = 4K"); + PrintAndLogEx(NORMAL, " card memory 0 = 320 bytes (MIFARE Mini), 1 = 1K (default), 2 = 2K, 4 = 4K"); PrintAndLogEx(NORMAL, ""); PrintAndLogEx(NORMAL, "Examples:"); PrintAndLogEx(NORMAL, _YELLOW_(" hf mf cview 1")); return PM3_SUCCESS; } static int usage_hf14_nack(void) { - PrintAndLogEx(NORMAL, "Test a mifare classic based card for the NACK bug."); + PrintAndLogEx(NORMAL, "Test a MIFARE Classic based card for the NACK bug."); PrintAndLogEx(NORMAL, ""); PrintAndLogEx(NORMAL, "Usage: hf mf nack [h] [v]"); PrintAndLogEx(NORMAL, "Options:"); @@ -3321,7 +3321,7 @@ static int CmdHF14AMfSim(const char *Cmd) { flags |= FLAG_UID_IN_EMUL; } - PrintAndLogEx(INFO, _YELLOW_("Mifare %s") " | %s UID " _YELLOW_("%s") "" + PrintAndLogEx(INFO, _YELLOW_("MIFARE %s") " | %s UID " _YELLOW_("%s") "" , csize , uidsize , (uidlen == 0) ? "N/A" : sprint_hex(uid, uidlen) @@ -4154,7 +4154,7 @@ static int CmdHF14AMfCSave(const char *Cmd) { case '4': numblocks = NumOfBlocks(ctmp); bytes = numblocks * MFBLOCK_SIZE; - PrintAndLogEx(SUCCESS, "Saving magic mifare %cK", ctmp); + PrintAndLogEx(SUCCESS, "Saving magic MIFARE %cK", ctmp); cmdp++; break; case 'u': @@ -4263,11 +4263,13 @@ static int CmdHF14AMfCView(const char *Cmd) { bool errors = false; int flags; - uint8_t numblocks = 0, cmdp = 0; - uint16_t bytes = 0; - + char ctmp = '1'; + uint8_t cmdp = 0; + uint8_t numblocks = NumOfBlocks(ctmp); + uint16_t bytes = numblocks * MFBLOCK_SIZE; + while (param_getchar(Cmd, cmdp) != 0x00 && !errors) { - char ctmp = tolower(param_getchar(Cmd, cmdp)); + ctmp = tolower(param_getchar(Cmd, cmdp)); switch (ctmp) { case 'h': return usage_hf14_cview(); @@ -4277,7 +4279,6 @@ static int CmdHF14AMfCView(const char *Cmd) { case '4': numblocks = NumOfBlocks(ctmp); bytes = numblocks * MFBLOCK_SIZE; - PrintAndLogEx(SUCCESS, "View magic mifare %cK", ctmp); cmdp++; break; default: @@ -4286,8 +4287,10 @@ static int CmdHF14AMfCView(const char *Cmd) { break; } } + + if (errors) return usage_hf14_cview(); - if (errors || cmdp == 0) return usage_hf14_cview(); + PrintAndLogEx(SUCCESS, "View magic MIFARE " _GREEN_("%cK"), ctmp); uint8_t *dump = calloc(bytes, sizeof(uint8_t)); if (!dump) { @@ -4334,7 +4337,6 @@ static int CmdHF14AMfCView(const char *Cmd) { } } - // print PrintAndLogEx(NORMAL, ""); PrintAndLogEx(INFO, "----+-------------------------------------------------+-----------------"); PrintAndLogEx(INFO, "blk | data | ascii"); @@ -4350,7 +4352,7 @@ static int CmdHF14AMfCView(const char *Cmd) { } } PrintAndLogEx(INFO, "----+-------------------------------------------------+-----------------"); - + PrintAndLogEx(NORMAL, ""); free(dump); return PM3_SUCCESS; } @@ -4428,7 +4430,7 @@ static int CmdHf14AMfSetMod(const char *Cmd) { return PM3_SUCCESS; } -// Mifare NACK bug detection +// MIFARE NACK bug detection static int CmdHf14AMfNack(const char *Cmd) { char ctmp = tolower(param_getchar(Cmd, 0)); @@ -4587,7 +4589,7 @@ static int CmdHF14AMfMAD(const char *Cmd) { CLIParserContext *ctx; CLIParserInit(&ctx, "hf mf mad", - "Checks and prints Mifare Application Directory (MAD)", + "Checks and prints MIFARE Application Directory (MAD)", "Usage:\n" _YELLOW_("\thf mf mad") " -> shows MAD if exists\n" _YELLOW_("\thf mf mad --aid e103 -k ffffffffffff -b") " -> shows NDEF data if exists. read card with custom key and key B\n" @@ -4629,7 +4631,7 @@ static int CmdHF14AMfMAD(const char *Cmd) { } PrintAndLogEx(NORMAL, ""); - PrintAndLogEx(INFO, "--- " _CYAN_("Mifare App Directory Information") " ----------------"); + PrintAndLogEx(INFO, "--- " _CYAN_("MIFARE App Directory Information") " ----------------"); PrintAndLogEx(INFO, "-----------------------------------------------------"); bool haveMAD2 = false; @@ -4845,7 +4847,7 @@ static int CmdHFMFPersonalize(const char *cmd) { CLIParserContext *ctx; CLIParserInit(&ctx, "hf mf personalize", - "Personalize the UID of a Mifare Classic EV1 card. This is only possible if it is a 7Byte UID card and if it is not already personalized.", + "Personalize the UID of a MIFARE Classic EV1 card. This is only possible if it is a 7Byte UID card and if it is not already personalized.", "Usage:\n" _YELLOW_("\thf mf personalize UIDF0") " -> double size UID according to ISO/IEC14443-3\n" _YELLOW_("\thf mf personalize UIDF1") " -> double size UID according to ISO/IEC14443-3, optional usage of selection process shortcut\n" @@ -4953,15 +4955,15 @@ static command_t CommandTable[] = { {"decrypt", CmdHf14AMfDecryptBytes, AlwaysAvailable, "[nt] [ar_enc] [at_enc] [data] - to decrypt sniff or trace"}, {"-----------", CmdHelp, IfPm3Iso14443a, "----------------------- " _CYAN_("operations") " -----------------------"}, {"auth4", CmdHF14AMfAuth4, IfPm3Iso14443a, "ISO14443-4 AES authentication"}, - {"dump", CmdHF14AMfDump, IfPm3Iso14443a, "Dump MIFARE classic tag to binary file"}, + {"dump", CmdHF14AMfDump, IfPm3Iso14443a, "Dump MIFARE Classic tag to binary file"}, {"mad", CmdHF14AMfMAD, IfPm3Iso14443a, "Checks and prints MAD"}, {"ndef", CmdHFMFNDEF, IfPm3Iso14443a, "Prints NDEF records from card"}, - {"personalize", CmdHFMFPersonalize, IfPm3Iso14443a, "Personalize UID (Mifare Classic EV1 only)"}, - {"rdbl", CmdHF14AMfRdBl, IfPm3Iso14443a, "Read MIFARE classic block"}, - {"rdsc", CmdHF14AMfRdSc, IfPm3Iso14443a, "Read MIFARE classic sector"}, - {"restore", CmdHF14AMfRestore, IfPm3Iso14443a, "Restore MIFARE classic binary file to BLANK tag"}, + {"personalize", CmdHFMFPersonalize, IfPm3Iso14443a, "Personalize UID (MIFARE Classic EV1 only)"}, + {"rdbl", CmdHF14AMfRdBl, IfPm3Iso14443a, "Read MIFARE Classic block"}, + {"rdsc", CmdHF14AMfRdSc, IfPm3Iso14443a, "Read MIFARE Classic sector"}, + {"restore", CmdHF14AMfRestore, IfPm3Iso14443a, "Restore MIFARE Classic binary file to BLANK tag"}, {"setmod", CmdHf14AMfSetMod, IfPm3Iso14443a, "Set MIFARE Classic EV1 load modulation strength"}, - {"wrbl", CmdHF14AMfWrBl, IfPm3Iso14443a, "Write MIFARE classic block"}, + {"wrbl", CmdHF14AMfWrBl, IfPm3Iso14443a, "Write MIFARE Classic block"}, // {"sniff", CmdHF14AMfSniff, 0, "Sniff card-reader communication"}, {"-----------", CmdHelp, IfPm3Iso14443a, "----------------------- " _CYAN_("simulation") " -----------------------"}, {"sim", CmdHF14AMfSim, IfPm3Iso14443a, "Simulate MIFARE card"}, From aee5528fbd0c869d4126ac228b449060765720c0 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Sun, 30 Aug 2020 01:48:42 +0200 Subject: [PATCH 0329/1047] Add hf mf eview --- client/src/cmdhfmf.c | 61 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/client/src/cmdhfmf.c b/client/src/cmdhfmf.c index 3b39f3bb6..b08913712 100644 --- a/client/src/cmdhfmf.c +++ b/client/src/cmdhfmf.c @@ -356,6 +356,16 @@ static int usage_hf14_esave(void) { PrintAndLogEx(NORMAL, _YELLOW_(" hf mf esave 4 filename")); return PM3_SUCCESS; } +static int usage_hf14_eview(void) { + PrintAndLogEx(NORMAL, "It displays emul memory"); + PrintAndLogEx(NORMAL, " Usage: hf mf eview [card memory]"); + PrintAndLogEx(NORMAL, " [card memory]: 0 = 320 bytes (MIFARE Mini), 1 = 1K (default), 2 = 2K, 4 = 4K"); + PrintAndLogEx(NORMAL, ""); + PrintAndLogEx(NORMAL, "Examples:"); + PrintAndLogEx(NORMAL, _YELLOW_(" hf mf eview")); + PrintAndLogEx(NORMAL, _YELLOW_(" hf mf eview 4")); + return PM3_SUCCESS; +} static int usage_hf14_ecfill(void) { PrintAndLogEx(NORMAL, "Read card and transfer its data to emulator memory."); PrintAndLogEx(NORMAL, "Keys must be laid in the emulator memory. \n"); @@ -3681,6 +3691,56 @@ static int CmdHF14AMfESave(const char *Cmd) { return PM3_SUCCESS; } +static int CmdHF14AMfEView(const char *Cmd) { + + uint8_t *dump; + int bytes; + uint16_t blocks; + + char c = tolower(param_getchar(Cmd, 0)); + if (c == 'h') return usage_hf14_eview(); + + if (c != 0) { + blocks = NumOfBlocks(c); + if (blocks == 0) return usage_hf14_eview(); + } else { + blocks = MIFARE_1K_MAXBLOCK; + } + bytes = blocks * MFBLOCK_SIZE; + + dump = calloc(bytes, sizeof(uint8_t)); + if (!dump) { + PrintAndLogEx(WARNING, "Fail, cannot allocate memory"); + return PM3_EMALLOC; + } + memset(dump, 0, bytes); + + PrintAndLogEx(INFO, "downloading from emulator memory"); + if (!GetFromDevice(BIG_BUF_EML, dump, bytes, 0, NULL, 0, NULL, 2500, false)) { + PrintAndLogEx(WARNING, "Fail, transfer from device time-out"); + free(dump); + return PM3_ETIMEOUT; + } + + PrintAndLogEx(NORMAL, ""); + PrintAndLogEx(INFO, "----+-------------------------------------------------+-----------------"); + PrintAndLogEx(INFO, "blk | data | ascii"); + PrintAndLogEx(INFO, "----+-------------------------------------------------+-----------------"); + for (uint16_t i = 0; i < blocks; i++){ + if (i == 0) { + PrintAndLogEx(INFO, "%03d | " _RED_("%s"), i, sprint_hex_ascii(dump + (i * 16) , 16) ); + } else if (mfIsSectorTrailer(i)) { + PrintAndLogEx(INFO, "%03d | " _YELLOW_("%s"), i, sprint_hex_ascii(dump + (i * 16) , 16) ); + } else { + PrintAndLogEx(INFO, "%03d | %s ", i, sprint_hex_ascii(dump + (i * 16) , 16) ); + } + } + PrintAndLogEx(INFO, "----+-------------------------------------------------+-----------------"); + PrintAndLogEx(NORMAL, ""); + free(dump); + return PM3_SUCCESS; +} + static int CmdHF14AMfECFill(const char *Cmd) { uint8_t keyType = 0; uint8_t numSectors = 16; @@ -4972,6 +5032,7 @@ static command_t CommandTable[] = { {"eset", CmdHF14AMfESet, IfPm3Iso14443a, "Set simulator memory block"}, {"eload", CmdHF14AMfELoad, IfPm3Iso14443a, "Load from file emul dump"}, {"esave", CmdHF14AMfESave, IfPm3Iso14443a, "Save to file emul dump"}, + {"eview", CmdHF14AMfEView, IfPm3Iso14443a, "View emul memory"}, {"ecfill", CmdHF14AMfECFill, IfPm3Iso14443a, "Fill simulator memory with help of keys from simulator"}, {"ekeyprn", CmdHF14AMfEKeyPrn, IfPm3Iso14443a, "Print keys from simulator memory"}, {"-----------", CmdHelp, IfPm3Iso14443a, "----------------------- " _CYAN_("magic") " -----------------------"}, From e3da69410b0563903fad448051522f8ff04a4c1a Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sun, 30 Aug 2020 02:06:07 +0200 Subject: [PATCH 0330/1047] reenable manual wipe --- client/src/mifare/mifarehost.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/client/src/mifare/mifarehost.c b/client/src/mifare/mifarehost.c index 6f1138cee..122bdfb34 100644 --- a/client/src/mifare/mifarehost.c +++ b/client/src/mifare/mifarehost.c @@ -864,7 +864,7 @@ int mfCSetUID(uint8_t *uid, uint8_t *atqa, uint8_t *sak, uint8_t *oldUID, uint8_ int mfCWipe(uint8_t *uid, uint8_t *atqa, uint8_t *sak) { uint8_t block0[16] = {0x01, 0x02, 0x03, 0x04, 0x04, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xBE, 0xAF}; - //uint8_t blockD[16] = {0x00}; + uint8_t blockD[16] = {0x00}; uint8_t blockK[16] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x08, 0x77, 0x8F, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; uint8_t params = MAGIC_SINGLE; @@ -890,8 +890,8 @@ int mfCWipe(uint8_t *uid, uint8_t *atqa, uint8_t *sak) { } else { if (mfIsSectorTrailer(blockNo)) res = mfCSetBlock(blockNo, blockK, NULL, params); -// else -// res = mfCSetBlock(blockNo, blockD, NULL, params); + else + res = mfCSetBlock(blockNo, blockD, NULL, params); } if (res == PM3_SUCCESS) From 4cb6e0d42e46bc9f29775455e2eef7f14e4546d4 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sun, 30 Aug 2020 02:08:17 +0200 Subject: [PATCH 0331/1047] remore magic wipe --- client/src/mifare/mifarehost.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/src/mifare/mifarehost.c b/client/src/mifare/mifarehost.c index 122bdfb34..fdb255a5f 100644 --- a/client/src/mifare/mifarehost.c +++ b/client/src/mifare/mifarehost.c @@ -886,7 +886,7 @@ int mfCWipe(uint8_t *uid, uint8_t *atqa, uint8_t *sak) { PrintAndLogEx(INPLACE, "wipe block %d", blockNo); if (blockNo == 0) { - res = mfCSetBlock(blockNo, block0, NULL, (params | MAGIC_WIPE)); + res = mfCSetBlock(blockNo, block0, NULL, params); } else { if (mfIsSectorTrailer(blockNo)) res = mfCSetBlock(blockNo, blockK, NULL, params); From 91a79c23188f8a498771c7b2b1ffeec56df4f75c Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sun, 30 Aug 2020 09:55:57 +0200 Subject: [PATCH 0332/1047] added: hf iclass eview --- client/src/cmdhficlass.c | 97 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 96 insertions(+), 1 deletion(-) diff --git a/client/src/cmdhficlass.c b/client/src/cmdhficlass.c index ad29754e9..25c380253 100644 --- a/client/src/cmdhficlass.c +++ b/client/src/cmdhficlass.c @@ -97,6 +97,18 @@ static int usage_hf_iclass_esave(void) { PrintAndLogEx(NORMAL, ""); return PM3_SUCCESS; } +static int usage_hf_iclass_eview(void) { + PrintAndLogEx(NORMAL, "It displays emulator memory"); + PrintAndLogEx(NORMAL, "Number of bytes to download defaults to 256. Other value is 2048\n"); + PrintAndLogEx(NORMAL, " Usage: hf iclass eview [s ] "); + PrintAndLogEx(NORMAL, " s : (256|2048) number of bytes to save (default 256)"); + PrintAndLogEx(NORMAL, " v : verbose output"); + PrintAndLogEx(NORMAL, ""); + PrintAndLogEx(NORMAL, "Examples:"); + PrintAndLogEx(NORMAL, _YELLOW_(" hf iclass eview")); + PrintAndLogEx(NORMAL, _YELLOW_(" hf iclass eview s 2048 v")); + return PM3_SUCCESS; +} static int usage_hf_iclass_decrypt(void) { PrintAndLogEx(NORMAL, "3DES decrypt data\n"); PrintAndLogEx(NORMAL, "This is naive implementation, it tries to decrypt every block after block 6."); @@ -1175,7 +1187,7 @@ static int CmdHFiClassESave(const char *Cmd) { } uint8_t *dump = calloc(bytes, sizeof(uint8_t)); - if (!dump) { + if (dump == NULL) { PrintAndLogEx(WARNING, "Fail, cannot allocate memory"); return PM3_EMALLOC; } @@ -1202,6 +1214,88 @@ static int CmdHFiClassESave(const char *Cmd) { return PM3_SUCCESS; } +static int CmdHFiClassEView(const char *Cmd) { + + uint16_t blocks = 32, bytes = 256; + bool errors = false, verbose = false; + uint8_t cmdp = 0; + while (param_getchar(Cmd, cmdp) != 0x00 && !errors) { + switch (tolower(param_getchar(Cmd, cmdp))) { + case 'h': + return usage_hf_iclass_eview(); + case 's': + bytes = param_get32ex(Cmd, cmdp + 1, 256, 10); + + if (bytes > 4096) { + PrintAndLogEx(WARNING, "Emulator memory is max 4096bytes. Truncating %u to 4096", bytes); + bytes = 4096; + } + + if (bytes % 8 != 0) { + bytes &= 0xFFF8; + PrintAndLogEx(WARNING, "Number not divided by 8, truncating to %u", bytes); + } + + blocks = bytes / 8; + cmdp += 2; + break; + case 'v': + verbose = true; + cmdp++; + break; + default: + PrintAndLogEx(WARNING, "Unknown parameter '%c'", param_getchar(Cmd, cmdp)); + errors = true; + break; + } + } + + //Validations + if (errors || bytes == 0) { + return usage_hf_iclass_eview(); + } + + uint8_t *dump = calloc(bytes, sizeof(uint8_t)); + if (dump == NULL) { + PrintAndLogEx(WARNING, "Fail, cannot allocate memory"); + return PM3_EMALLOC; + } + memset(dump, 0, bytes); + + PrintAndLogEx(INFO, "downloading from emulator memory"); + if (!GetFromDevice(BIG_BUF_EML, dump, bytes, 0, NULL, 0, NULL, 2500, false)) { + PrintAndLogEx(WARNING, "Fail, transfer from device time-out"); + free(dump); + return PM3_ETIMEOUT; + } + + if (verbose) { + print_picopass_header((picopass_hdr *) dump); + print_picopass_info((picopass_hdr *) dump); + } + + PrintAndLogEx(NORMAL, ""); + uint8_t *csn = dump; + PrintAndLogEx(INFO, "------+----+-------------------------+----------"); + PrintAndLogEx(INFO, " CSN |0x00| " _GREEN_("%s") "|", sprint_hex(csn, 8)); + printIclassDumpContents(dump, 1, blocks, bytes); + +/* + PrintAndLogEx(NORMAL, ""); + PrintAndLogEx(INFO, "----+-------------------------+---------"); + PrintAndLogEx(INFO, "blk | data | ascii"); + PrintAndLogEx(INFO, "----+-------------------------+---------"); + for (uint16_t i = 0; i < blocks; i++){ + PrintAndLogEx(INFO, "%03d | %s ", i, sprint_hex_ascii(dump + (i * 8) , 8) ); + } + PrintAndLogEx(INFO, "----+-------------------------+---------"); + PrintAndLogEx(NORMAL, ""); +*/ + free(dump); + return PM3_SUCCESS; +} + + static int CmdHFiClassDecrypt(const char *Cmd) { bool errors = false; @@ -3480,6 +3574,7 @@ static command_t CommandTable[] = { {"sim", CmdHFiClassSim, IfPm3Iclass, "[options..] Simulate iCLASS tag"}, {"eload", CmdHFiClassELoad, IfPm3Iclass, "[f ] Load Picopass / iCLASS dump file into emulator memory"}, {"esave", CmdHFiClassESave, IfPm3Iclass, "[f ] Save emulator memory to file"}, + {"eview", CmdHFiClassEView, IfPm3Iclass, "[options..] View emulator memory"}, {"-----------", CmdHelp, AlwaysAvailable, "--------------------- " _CYAN_("utils") " ---------------------"}, {"calcnewkey", CmdHFiClassCalcNewKey, AlwaysAvailable, "[options..] Calc diversified keys (blocks 3 & 4) to write new keys"}, From 9639ee8e813c0327b2cddd3bd5127aa25e7d1cc7 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Mon, 31 Aug 2020 01:15:49 +0200 Subject: [PATCH 0333/1047] less checks for dataavailable --- armsrc/mifaresim.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/armsrc/mifaresim.c b/armsrc/mifaresim.c index 60f9a7810..d0a70a528 100644 --- a/armsrc/mifaresim.c +++ b/armsrc/mifaresim.c @@ -529,11 +529,21 @@ void Mifare1ksim(uint16_t flags, uint8_t exitAfterNReads, uint8_t *datain, uint1 LED_D_ON(); ResetSspClk(); + int counter = 0; bool finished = false; bool button_pushed = BUTTON_PRESS(); + while (!button_pushed && !finished) { - while (!button_pushed && !finished && !data_available()) { WDT_HIT(); + + if (counter == 2000) { + if (data_available()) { + break; + } + counter = 0; + } else { + counter++; + } // find reader field if (cardSTATE == MFEMUL_NOFIELD) { From bd3047f31608a96351b96f9f04ec0563441c506e Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Mon, 31 Aug 2020 01:16:13 +0200 Subject: [PATCH 0334/1047] less checks for dataavailable --- armsrc/iso14443a.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/armsrc/iso14443a.c b/armsrc/iso14443a.c index d5417f108..97f17396a 100644 --- a/armsrc/iso14443a.c +++ b/armsrc/iso14443a.c @@ -1832,8 +1832,8 @@ int EmGetCmd(uint8_t *received, uint16_t *len, uint8_t *par) { for (;;) { WDT_HIT(); - if (check == 1000) { - if (BUTTON_PRESS() || data_available()) + if (check == 2000) { + if (BUTTON_PRESS()) return 1; check = 0; } @@ -1959,7 +1959,6 @@ int EmSendCmd14443aRaw(uint8_t *resp, uint16_t respLen) { b = (uint16_t)(AT91C_BASE_SSC->SSC_RHR); (void)b; } - if (BUTTON_PRESS()) break; } // Ensure that the FPGA Delay Queue is empty before we switch to TAGSIM_LISTEN again: From 11695eb55ca0d5834bb402de2f4099bae3fda175 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Mon, 31 Aug 2020 01:16:56 +0200 Subject: [PATCH 0335/1047] textual --- client/src/mifare/mifarehost.c | 30 ++++++++++++++---------------- 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/client/src/mifare/mifarehost.c b/client/src/mifare/mifarehost.c index fdb255a5f..bb9f71d53 100644 --- a/client/src/mifare/mifarehost.c +++ b/client/src/mifare/mifarehost.c @@ -34,10 +34,10 @@ int mfDarkside(uint8_t blockno, uint8_t key_type, uint64_t *key) { bool first_run = true; // message - PrintAndLogEx(INFO, "--------------------------------------------------------------------------------\n"); - PrintAndLogEx(INFO, "executing Darkside attack. Expected execution time: 25sec on average"); - PrintAndLogEx(INFO, "press pm3-button on the Proxmark3 device to abort both Proxmark3 and client."); - PrintAndLogEx(INFO, "--------------------------------------------------------------------------------\n"); + PrintAndLogEx(INFO, "--------------------------------------------------------------------------------"); + PrintAndLogEx(INFO, "Executing darkside attack. Expected execution time: 25sec on average"); + PrintAndLogEx(INFO, "press pm3-button on the Proxmark3 device to abort both Proxmark3 and client"); + PrintAndLogEx(INFO, "--------------------------------------------------------------------------------"); while (true) { clearCommandBuffer(); @@ -220,7 +220,7 @@ int mfCheckKeys_fast(uint8_t sectorsCnt, uint8_t firstChunk, uint8_t lastChunk, // time to convert the returned data. uint8_t curr_keys = resp.oldarg[0]; - PrintAndLogEx(INFO, "\nChunk: %.1fs | found %u/%u keys (%u)", (float)(t2 / 1000.0), curr_keys, (sectorsCnt << 1), size); + PrintAndLogEx(INFO, "Chunk: %.1fs | found %u/%u keys (%u)", (float)(t2 / 1000.0), curr_keys, (sectorsCnt << 1), size); // all keys? if (curr_keys == sectorsCnt * 2 || lastChunk) { @@ -537,7 +537,7 @@ int mfnested(uint8_t blockNo, uint8_t keyType, uint8_t *key, uint8_t trgBlockNo, free(statelists[1].head.slhead); num_to_bytes(key64, 6, resultKey); - PrintAndLogEx(SUCCESS, "target block:%3u key type: %c -- found valid key [" _YELLOW_("%s") "]", + PrintAndLogEx(SUCCESS, "\ntarget block:%3u key type: %c -- found valid key [" _YELLOW_("%s") "]", package->block, package->keytype ? 'B' : 'A', sprint_hex(resultKey, 6) @@ -545,15 +545,12 @@ int mfnested(uint8_t blockNo, uint8_t keyType, uint8_t *key, uint8_t trgBlockNo, return -5; } -// if (i + 1 % 10 == 0) { float bruteforce_per_second = (float)(i + max_keys) / ((msclock() - start_time) / 1000.0); - PrintAndLogEx(INFO, "%6d/%u keys | %5.1f keys/sec | worst case %6.1f seconds remaining", i, keycnt, bruteforce_per_second, (keycnt - i) / bruteforce_per_second); -// } - + PrintAndLogEx(INPLACE, "%6d/%u keys | %5.1f keys/sec | worst case %6.1f seconds remaining", i, keycnt, bruteforce_per_second, (keycnt - i) / bruteforce_per_second); } out: - PrintAndLogEx(SUCCESS, "target block:%3u key type: %c", + PrintAndLogEx(SUCCESS, "\ntarget block:%3u key type: %c", package->block, package->keytype ? 'B' : 'A' ); @@ -677,6 +674,7 @@ int mfStaticNested(uint8_t blockNo, uint8_t keyType, uint8_t *key, uint8_t trgBl //flush queue while (kbd_enter_pressed()) { SendCommandNG(CMD_BREAK_LOOP, NULL, 0); + PrintAndLogEx(NORMAL, ""); free(mem); return PM3_EOPABORTED; } @@ -696,7 +694,7 @@ int mfStaticNested(uint8_t blockNo, uint8_t keyType, uint8_t *key, uint8_t trgBl // upload to flash. res = flashmem_spiffs_load(destfn, mem, 5 + (chunk * 6)); if (res != PM3_SUCCESS) { - PrintAndLogEx(WARNING, "SPIFFS upload failed"); + PrintAndLogEx(WARNING, "\nSPIFFS upload failed"); free(mem); return res; } @@ -713,6 +711,7 @@ int mfStaticNested(uint8_t blockNo, uint8_t keyType, uint8_t *key, uint8_t trgBl num_to_bytes(key64, 6, resultKey); + PrintAndLogEx(NORMAL, ""); PrintAndLogEx(SUCCESS, "target block:%3u key type: %c -- found valid key [" _YELLOW_("%s") "]", package->block, package->keytype ? 'B' : 'A', @@ -720,21 +719,20 @@ int mfStaticNested(uint8_t blockNo, uint8_t keyType, uint8_t *key, uint8_t trgBl ); return PM3_SUCCESS; } else if (res == PM3_ETIMEOUT || res == PM3_EOPABORTED) { + PrintAndLogEx(NORMAL, ""); free(mem); return res; } -// if (i%10 == 0) { float bruteforce_per_second = (float)(i + max_keys_chunk) / ((msclock() - start_time) / 1000.0); - PrintAndLogEx(INFO, "%6u/%u keys | %5.1f keys/sec | worst case %6.1f seconds remaining", i, keycnt, bruteforce_per_second, (keycnt - i) / bruteforce_per_second); -// } + PrintAndLogEx(INPLACE, "%6u/%u keys | %5.1f keys/sec | worst case %6.1f seconds", i, keycnt, bruteforce_per_second, (keycnt - i) / bruteforce_per_second); } p_keyblock = NULL; free(mem); out: - PrintAndLogEx(SUCCESS, "target block:%3u key type: %c", + PrintAndLogEx(SUCCESS, "\ntarget block:%3u key type: %c", package->block, package->keytype ? 'B' : 'A' ); From 7f14ebc84bac28253b908d3e795d88df83f065a6 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Mon, 31 Aug 2020 01:19:06 +0200 Subject: [PATCH 0336/1047] take care of type when shifting --- armsrc/util.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/armsrc/util.h b/armsrc/util.h index c6523a813..1d8586c43 100644 --- a/armsrc/util.h +++ b/armsrc/util.h @@ -63,7 +63,7 @@ #endif #ifndef REV64 -#define REV64(x) (REV32(x) + (REV32((x) >> 32) << 32)) +#define REV64(x) (REV32(x) + ((uint64_t)(REV32((x) >> 32) << 32))) #endif #ifndef BIT32 From 6b6e038d1c85c3551af05acb3936875d8c4f89a1 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Mon, 31 Aug 2020 01:40:02 +0200 Subject: [PATCH 0337/1047] debug textual --- armsrc/appmain.c | 27 +++++++++++---------------- 1 file changed, 11 insertions(+), 16 deletions(-) diff --git a/armsrc/appmain.c b/armsrc/appmain.c index ebb58a23f..d0925b6d4 100644 --- a/armsrc/appmain.c +++ b/armsrc/appmain.c @@ -1806,12 +1806,9 @@ static void PacketReceived(PacketCommandNG *packet) { uint8_t filename[32]; uint8_t *pfilename = packet->data.asBytes; memcpy(filename, pfilename, SPIFFS_OBJ_NAME_LEN); - if (DBGLEVEL > 1) Dbprintf("> Filename received for spiffs dump : %s", filename); + if (DBGLEVEL >= DBG_DEBUG) Dbprintf("Filename received for spiffs dump : %s", filename); - //uint32_t size = 0; - //rdv40_spiffs_stat((char *)filename, (uint32_t *)size,RDV40_SPIFFS_SAFETY_SAFE); uint32_t size = packet->oldarg[1]; - //uint8_t buff[size]; uint8_t *buff = BigBuf_malloc(size); rdv40_spiffs_read_as_filetype((char *)filename, (uint8_t *)buff, size, RDV40_SPIFFS_SAFETY_SAFE); @@ -1836,7 +1833,7 @@ static void PacketReceived(PacketCommandNG *packet) { uint8_t filename[32]; uint8_t *pfilename = packet->data.asBytes; memcpy(filename, pfilename, SPIFFS_OBJ_NAME_LEN); - if (DBGLEVEL > 1) Dbprintf("> Filename received for spiffs STAT : %s", filename); + if (DBGLEVEL >= DBG_DEBUG) Dbprintf("Filename received for spiffs STAT : %s", filename); int changed = rdv40_spiffs_lazy_mount(); uint32_t size = size_in_spiffs((char *)filename); if (changed) rdv40_spiffs_lazy_unmount(); @@ -1849,7 +1846,7 @@ static void PacketReceived(PacketCommandNG *packet) { uint8_t filename[32]; uint8_t *pfilename = packet->data.asBytes; memcpy(filename, pfilename, SPIFFS_OBJ_NAME_LEN); - if (DBGLEVEL > 1) Dbprintf("> Filename received for spiffs REMOVE : %s", filename); + if (DBGLEVEL >= DBG_DEBUG) Dbprintf("Filename received for spiffs REMOVE : %s", filename); rdv40_spiffs_remove((char *) filename, RDV40_SPIFFS_SAFETY_SAFE); LED_B_OFF(); break; @@ -1864,9 +1861,9 @@ static void PacketReceived(PacketCommandNG *packet) { strncpy((char *)src, token, sizeof(src) - 1); token = strtok(NULL, ","); strncpy((char *)dest, token, sizeof(dest) - 1); - if (DBGLEVEL > 1) { - Dbprintf("> Filename received as source for spiffs RENAME : %s", src); - Dbprintf("> Filename received as destination for spiffs RENAME : %s", dest); + if (DBGLEVEL >= DBG_DEBUG) { + Dbprintf("Filename received as source for spiffs RENAME : %s", src); + Dbprintf("Filename received as destination for spiffs RENAME : %s", dest); } rdv40_spiffs_rename((char *) src, (char *)dest, RDV40_SPIFFS_SAFETY_SAFE); LED_B_OFF(); @@ -1882,9 +1879,9 @@ static void PacketReceived(PacketCommandNG *packet) { strncpy((char *)src, token, sizeof(src) - 1); token = strtok(NULL, ","); strncpy((char *)dest, token, sizeof(dest) - 1); - if (DBGLEVEL > 1) { - Dbprintf("> Filename received as source for spiffs COPY : %s", src); - Dbprintf("> Filename received as destination for spiffs COPY : %s", dest); + if (DBGLEVEL >= DBG_DEBUG) { + Dbprintf("Filename received as source for spiffs COPY : %s", src); + Dbprintf("Filename received as destination for spiffs COPY : %s", dest); } rdv40_spiffs_copy((char *) src, (char *)dest, RDV40_SPIFFS_SAFETY_SAFE); LED_B_OFF(); @@ -1896,14 +1893,12 @@ static void PacketReceived(PacketCommandNG *packet) { uint32_t append = packet->oldarg[0]; uint32_t size = packet->oldarg[1]; uint8_t *data = packet->data.asBytes; - - //rdv40_spiffs_lazy_mount(); - uint8_t *pfilename = packet->data.asBytes; memcpy(filename, pfilename, SPIFFS_OBJ_NAME_LEN); data += SPIFFS_OBJ_NAME_LEN; - if (DBGLEVEL > 1) Dbprintf("> Filename received for spiffs WRITE : %s with APPEND SET TO : %d", filename, append); + if (DBGLEVEL >= DBG_DEBUG) Dbprintf("> Filename received for spiffs WRITE : %s with APPEND SET TO : %d", filename, append); + if (!append) { rdv40_spiffs_write((char *) filename, (uint8_t *)data, size, RDV40_SPIFFS_SAFETY_SAFE); } else { From b356a2e18c8d2c31ae428e94f1969e73e6a204c5 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Mon, 31 Aug 2020 01:41:11 +0200 Subject: [PATCH 0338/1047] debug textual --- armsrc/spiffs.c | 56 +++++++++++++++++++++++------------------- armsrc/spiffs_config.h | 2 -- 2 files changed, 31 insertions(+), 27 deletions(-) diff --git a/armsrc/spiffs.c b/armsrc/spiffs.c index dac1de449..e07b21ad4 100644 --- a/armsrc/spiffs.c +++ b/armsrc/spiffs.c @@ -67,30 +67,33 @@ static s32_t rdv40_spiffs_llwrite(u32_t addr, u32_t size, u8_t *src) { } static s32_t rdv40_spiffs_llerase(u32_t addr, u32_t size) { - - uint8_t erased = 0; if (!FlashInit()) { return 130; } - if (DBGLEVEL > 2) Dbprintf("LLERASEDBG : Orig addr : %d\n", addr); + + if (DBGLEVEL >= DBG_DEBUG) Dbprintf("LLERASEDBG : Orig addr : %d\n", addr); + uint8_t block, sector = 0; block = addr / RDV40_LLERASE_BLOCKSIZE; if (block) { addr = addr - (block * RDV40_LLERASE_BLOCKSIZE); } - if (DBGLEVEL > 2) Dbprintf("LLERASEDBG : Result addr : %d\n", addr); + + if (DBGLEVEL >= DBG_DEBUG) Dbprintf("LLERASEDBG : Result addr : %d\n", addr); + sector = addr / SPIFFS_CFG_LOG_BLOCK_SZ; Flash_CheckBusy(BUSY_TIMEOUT); Flash_WriteEnable(); - if (DBGLEVEL > 2) Dbprintf("LLERASEDBG : block : %d, sector : %d \n", block, sector); - erased = Flash_Erase4k(block, sector); + if (DBGLEVEL >= DBG_DEBUG) Dbprintf("LLERASEDBG : block : %d, sector : %d \n", block, sector); + + erased = Flash_Erase4k(block, sector); Flash_CheckBusy(BUSY_TIMEOUT); FlashStop(); - return SPIFFS_OK == erased ; + return (SPIFFS_OK == erased); } //////////////////////////////////////////////////////////////////////////////// @@ -252,7 +255,7 @@ static RDV40SpiFFSFileType filetype_in_spiffs(const char *filename) { filetype = RDV40_SPIFFS_FILETYPE_SYMLINK; } } - if (DBGLEVEL > 1) { + if (DBGLEVEL >= DBG_DEBUG) { switch (filetype) { case RDV40_SPIFFS_FILETYPE_REAL: Dbprintf("Filetype is : RDV40_SPIFFS_FILETYPE_REAL"); @@ -472,20 +475,23 @@ int rdv40_spiffs_is_symlink(const char *s) { // ATTENTION : you must NOT provide the whole filename (so please do not include the .lnk extension) // TODO : integrate in read_function int rdv40_spiffs_read_as_symlink(char *filename, uint8_t *dst, uint32_t size, RDV40SpiFFSSafetyLevel level) { + RDV40_SPIFFS_SAFE_FUNCTION( char linkdest[SPIFFS_OBJ_NAME_LEN]; char linkfilename[SPIFFS_OBJ_NAME_LEN]; sprintf(linkfilename, "%s.lnk", filename); - if (DBGLEVEL > 1) Dbprintf("Linkk real filename is : " _YELLOW_("%s"), linkfilename); + if (DBGLEVEL >= DBG_DEBUG) + Dbprintf("Linkk real filename is : " _YELLOW_("%s"), linkfilename); read_from_spiffs((char *)linkfilename, (uint8_t *)linkdest, SPIFFS_OBJ_NAME_LEN); - if (DBGLEVEL > 1) Dbprintf("Symlink destination is : " _YELLOW_("%s"), linkdest); + if (DBGLEVEL >= DBG_DEBUG) + Dbprintf("Symlink destination is : " _YELLOW_("%s"), linkdest); - read_from_spiffs((char *)linkdest, (uint8_t *)dst, size); - ) - } + read_from_spiffs((char *)linkdest, (uint8_t *)dst, size); + ) +} // BEWARE ! This function is DESTRUCTIVE as it will UPDATE an existing symlink // Since it creates a .lnk extension file it may be minor to mistake the order of arguments @@ -516,18 +522,18 @@ int rdv40_spiffs_make_symlink(char *linkdest, char *filename, RDV40SpiFFSSafetyL int rdv40_spiffs_read_as_filetype(char *filename, uint8_t *dst, uint32_t size, RDV40SpiFFSSafetyLevel level) { RDV40_SPIFFS_SAFE_FUNCTION( RDV40SpiFFSFileType filetype = filetype_in_spiffs((char *)filename); - switch (filetype) { - case RDV40_SPIFFS_FILETYPE_REAL: - rdv40_spiffs_read((char *)filename, (uint8_t *)dst, size, level); - break; - case RDV40_SPIFFS_FILETYPE_SYMLINK: - rdv40_spiffs_read_as_symlink((char *)filename, (uint8_t *)dst, size, level); - break; - case RDV40_SPIFFS_FILETYPE_BOTH: - case RDV40_SPIFFS_FILETYPE_UNKNOWN: - default: - ; - } + switch (filetype) { + case RDV40_SPIFFS_FILETYPE_REAL: + rdv40_spiffs_read((char *)filename, (uint8_t *)dst, size, level); + break; + case RDV40_SPIFFS_FILETYPE_SYMLINK: + rdv40_spiffs_read_as_symlink((char *)filename, (uint8_t *)dst, size, level); + break; + case RDV40_SPIFFS_FILETYPE_BOTH: + case RDV40_SPIFFS_FILETYPE_UNKNOWN: + default: + ; + } ) } diff --git a/armsrc/spiffs_config.h b/armsrc/spiffs_config.h index 0cf3b96f5..85997903b 100644 --- a/armsrc/spiffs_config.h +++ b/armsrc/spiffs_config.h @@ -58,8 +58,6 @@ typedef uint8_t u8_t; #define SPIFFS_API_DBGF(str) SPIFFS_API_DBG(str,NULL) #endif - - // Defines spiffs debug print formatters // some general signed number #ifndef _SPIPRIi From 441bf920fc09f97a85f4da8202b427b4b3309abe Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Mon, 31 Aug 2020 03:04:32 +0200 Subject: [PATCH 0339/1047] check all keys... --- armsrc/appmain.c | 2 +- armsrc/mifarecmd.c | 27 +++++++++++++++------------ armsrc/mifarecmd.h | 2 +- 3 files changed, 17 insertions(+), 14 deletions(-) diff --git a/armsrc/appmain.c b/armsrc/appmain.c index d0925b6d4..26a62bf9b 100644 --- a/armsrc/appmain.c +++ b/armsrc/appmain.c @@ -1248,7 +1248,7 @@ static void PacketReceived(PacketCommandNG *packet) { break; } case CMD_HF_MIFARE_CHKKEYS: { - MifareChkKeys(packet->data.asBytes); + MifareChkKeys(packet->data.asBytes, false); break; } case CMD_HF_MIFARE_CHKKEYS_FAST: { diff --git a/armsrc/mifarecmd.c b/armsrc/mifarecmd.c index d99698ba8..b32953cd7 100644 --- a/armsrc/mifarecmd.c +++ b/armsrc/mifarecmd.c @@ -34,6 +34,7 @@ #include "ticks.h" #include "usb_cdc.h" // usb_poll_validate_length #include "spiffs.h" // spiffs +#include "appmain.h" // print_stack_usage #ifndef HARDNESTED_AUTHENTICATION_TIMEOUT # define HARDNESTED_AUTHENTICATION_TIMEOUT 848 // card times out 1ms after wrong authentication (according to NXP documentation) @@ -1108,13 +1109,10 @@ void MifareStaticNested(uint8_t blockNo, uint8_t keyType, uint8_t targetBlockNo, uint64_t ui64Key = 0; ui64Key = bytes_to_num(key, 6); - - // variables uint16_t len; - uint8_t uid[10] = {0x00}; uint32_t cuid = 0, nt1, nt2; - uint32_t target_nt = {0x00}, target_ks = {0x00}; + uint32_t target_nt = 0, target_ks = 0; uint8_t par[1] = {0x00}; uint8_t receivedAnswer[10] = {0x00}; @@ -1132,7 +1130,6 @@ void MifareStaticNested(uint8_t blockNo, uint8_t keyType, uint8_t targetBlockNo, set_tracing(true); int16_t isOK = 0; - LED_C_ON(); for (uint8_t retry = 0; retry < 3 && (isOK == 0); retry++) { @@ -1152,7 +1149,7 @@ void MifareStaticNested(uint8_t blockNo, uint8_t keyType, uint8_t targetBlockNo, continue; }; - // First authenticatoin. Normal auth. + // First authentication. Normal auth. if (mifare_classic_authex(pcs, cuid, blockNo, keyType, ui64Key, AUTH_FIRST, &nt1, NULL)) { if (DBGLEVEL >= DBG_INFO) Dbprintf("Nested: Auth1 error"); retry--; @@ -1167,9 +1164,8 @@ void MifareStaticNested(uint8_t blockNo, uint8_t keyType, uint8_t targetBlockNo, }; nt2 = bytes_to_num(receivedAnswer, 4); - uint32_t nt_tmp = prng_successor(nt1, 160); - target_ks = nt2 ^ nt_tmp; - target_nt = nt_tmp; + target_nt = prng_successor(nt1, 160); + target_ks = nt2 ^ target_nt; isOK = 1; if (DBGLEVEL >= DBG_DEBUG) Dbprintf("Testing nt1=%08x nt2enc=%08x nt2par=%02x ks=%08x", nt1, nt2, par[0], target_ks); @@ -1689,7 +1685,7 @@ OUT: DBGLEVEL = oldbg; } -void MifareChkKeys(uint8_t *datain) { +void MifareChkKeys(uint8_t *datain, uint8_t reserved_mem) { FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); @@ -1715,7 +1711,12 @@ void MifareChkKeys(uint8_t *datain) { bool clearTrace = datain[2]; uint16_t key_count = (datain[3] << 8) | datain[4]; - uint16_t key_mem_available = MIN((PM3_CMD_DATA_SIZE - 5), key_count * 6); + uint16_t key_mem_available; + if (reserved_mem) + key_mem_available = key_count * 6; + else + key_mem_available = MIN((PM3_CMD_DATA_SIZE - 5), key_count * 6); + key_count = key_mem_available / 6; datain += 5; @@ -1793,6 +1794,8 @@ void MifareChkKeys(uint8_t *datain) { void MifareChkKeys_file(uint8_t *fn) { #ifdef WITH_FLASH + BigBuf_free(); + SpinOff(0); int changed = rdv40_spiffs_lazy_mount(); @@ -1807,7 +1810,7 @@ void MifareChkKeys_file(uint8_t *fn) { SpinOff(0); - MifareChkKeys(mem); + MifareChkKeys(mem, true); BigBuf_free(); #endif diff --git a/armsrc/mifarecmd.h b/armsrc/mifarecmd.h index 2d9a4799a..3da2b2f00 100644 --- a/armsrc/mifarecmd.h +++ b/armsrc/mifarecmd.h @@ -29,7 +29,7 @@ void MifareStaticNested(uint8_t blockNo, uint8_t keyType, uint8_t targetBlockNo, void MifareAcquireEncryptedNonces(uint32_t arg0, uint32_t arg1, uint32_t flags, uint8_t *datain); void MifareAcquireNonces(uint32_t arg0, uint32_t flags); -void MifareChkKeys(uint8_t *datain); +void MifareChkKeys(uint8_t *datain, uint8_t reserved_mem); void MifareChkKeys_fast(uint32_t arg0, uint32_t arg1, uint32_t arg2, uint8_t *datain); void MifareChkKeys_file(uint8_t *fn); From 2089edbba9677344487cc6ef92e52531df384888 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Mon, 31 Aug 2020 03:05:18 +0200 Subject: [PATCH 0340/1047] adapt chunksize as we progress --- client/src/mifare/mifarehost.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/client/src/mifare/mifarehost.c b/client/src/mifare/mifarehost.c index bb9f71d53..f50e77bce 100644 --- a/client/src/mifare/mifarehost.c +++ b/client/src/mifare/mifarehost.c @@ -310,6 +310,7 @@ int mfCheckKeys_file(uint8_t *destfn, uint64_t *key) { } PACKED; struct kr *keyresult = (struct kr *)&resp.data.asBytes; if (!keyresult->found) return PM3_ESOFT; + *key = bytes_to_num(keyresult->key, sizeof(keyresult->key)); return PM3_SUCCESS; } @@ -560,6 +561,7 @@ out: return -4; } + int mfStaticNested(uint8_t blockNo, uint8_t keyType, uint8_t *key, uint8_t trgBlockNo, uint8_t trgKeyType, uint8_t *resultKey) { uint32_t uid; @@ -608,7 +610,7 @@ int mfStaticNested(uint8_t blockNo, uint8_t keyType, uint8_t *key, uint8_t trgBl statelists[0].keyType = package->keytype; statelists[0].uid = uid; - memcpy(&statelists[0].nt_enc, package->nt, sizeof(package->nt)); + memcpy(&statelists[0].nt_enc, package->nt, sizeof(package->nt)); memcpy(&statelists[0].ks1, package->ks, sizeof(package->ks)); // calc keys @@ -691,6 +693,10 @@ int mfStaticNested(uint8_t blockNo, uint8_t keyType, uint8_t *key, uint8_t trgBl // check a block of generated key candidates. if (IfPm3Flash()) { + + mem[3] = ((chunk >> 8) & 0xFF); + mem[4] = (chunk & 0xFF); + // upload to flash. res = flashmem_spiffs_load(destfn, mem, 5 + (chunk * 6)); if (res != PM3_SUCCESS) { @@ -698,7 +704,6 @@ int mfStaticNested(uint8_t blockNo, uint8_t keyType, uint8_t *key, uint8_t trgBl free(mem); return res; } - res = mfCheckKeys_file(destfn, &key64); } else { res = mfCheckKeys(statelists[0].blockNo, statelists[0].keyType, false, chunk, mem, &key64); From ff5f5656193e4b7cbd3693137b3c94f52c6bc6e9 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Mon, 31 Aug 2020 11:36:35 +0200 Subject: [PATCH 0341/1047] redirect LUA print to Proxmark PrintAndLogEx --- client/src/scripting.c | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/client/src/scripting.c b/client/src/scripting.c index 416ef2c77..091e951bc 100644 --- a/client/src/scripting.c +++ b/client/src/scripting.c @@ -1129,9 +1129,7 @@ static int l_remark(lua_State *L) { } size_t size; - // data const char *s = luaL_checklstring(L, 1, &size); - int res = CmdRem(s); lua_pushinteger(L, res); return 1; @@ -1199,6 +1197,19 @@ static int l_cwd(lua_State *L) { return 1; } +// ref: https://github.com/RfidResearchGroup/proxmark3/issues/891 +// redirect LUA's print to Proxmark3 PrintAndLogEx +static int l_printandlogex(lua_State* L) { + + int n = lua_gettop(L); + for (int i = 1; i <= n; i++) { + if (lua_isstring(L, i)) { + PrintAndLogEx(NORMAL, "%s", lua_tostring(L, i)); + } + } + return 0; +} + /** * @brief Sets the lua path to include "./lualibs/?.lua", in order for a script to be * able to do "require('foobar')" if foobar.lua is within lualibs folder. @@ -1269,21 +1280,24 @@ int set_pm3_libraries(lua_State *L) { lua_pushglobaltable(L); // Core library is in this table. Contains ' - //this is 'pm3' table + // this is 'pm3' table lua_newtable(L); - //Put the function into the hash table. + // put the function into the hash table. for (int i = 0; libs[i].name; i++) { lua_pushcfunction(L, libs[i].func); lua_setfield(L, -2, libs[i].name);//set the name, pop stack } - //Name of 'core' + // Name of 'core' lua_setfield(L, -2, "core"); - //-- remove the global environment table from the stack + // remove the global environment table from the stack lua_pop(L, 1); + + // print redirect here + lua_register(L, "print", l_printandlogex); - //--add to the LUA_PATH (package.path in lua) + // add to the LUA_PATH (package.path in lua) // so we can load scripts from various places: const char *exec_path = get_my_executable_directory(); if (exec_path != NULL) { From cb55e256e3400554407377106f28bda28f204d49 Mon Sep 17 00:00:00 2001 From: Gator96100 Date: Mon, 31 Aug 2020 14:41:40 +0200 Subject: [PATCH 0342/1047] Registry entries are not needed when calling SetConsoleMode --- client/src/proxmark3.c | 51 +----------------------------------------- 1 file changed, 1 insertion(+), 50 deletions(-) diff --git a/client/src/proxmark3.c b/client/src/proxmark3.c index ba2c00de1..1358137bf 100644 --- a/client/src/proxmark3.c +++ b/client/src/proxmark3.c @@ -678,55 +678,8 @@ finish2: return ret; } -// Check if windows AnsiColor Support is enabled in the registery -// [HKEY_CURRENT_USER\Console] -// "VirtualTerminalLevel"=dword:00000001 -// 2nd Key needs to be enabled... This key takes the console out of legacy mode. -// [HKEY_CURRENT_USER\Console] -// "ForceV2"=dword:00000001 - #if defined(_WIN32) static bool DetectWindowsAnsiSupport(void) { - HKEY hKey = NULL; - bool virtualTerminalLevelSet = false; - bool forceV2Set = false; - - if (RegOpenKeyA(HKEY_CURRENT_USER, "Console", &hKey) == ERROR_SUCCESS) { - DWORD dwType = REG_SZ; - BYTE KeyValue[sizeof(dwType)]; - DWORD len = sizeof(KeyValue); - - if (RegQueryValueEx(hKey, "VirtualTerminalLevel", NULL, &dwType, KeyValue, &len) != ERROR_FILE_NOT_FOUND) { - uint8_t i; - uint32_t Data = 0; - for (i = 0; i < 4; i++) - Data += KeyValue[i] << (8 * i); - - if (Data == 1) { // Reg key is set to 1, Ansi Color Enabled - virtualTerminalLevelSet = true; - } - } - RegCloseKey(hKey); - } - - if (RegOpenKeyA(HKEY_CURRENT_USER, "Console", &hKey) == ERROR_SUCCESS) { - DWORD dwType = REG_SZ; - BYTE KeyValue[sizeof(dwType)]; - DWORD len = sizeof(KeyValue); - - if (RegQueryValueEx(hKey, "ForceV2", NULL, &dwType, KeyValue, &len) != ERROR_FILE_NOT_FOUND) { - uint8_t i; - uint32_t Data = 0; - for (i = 0; i < 4; i++) - Data += KeyValue[i] << (8 * i); - - if (Data == 1) { // Reg key is set to 1, Not using legacy Mode. - forceV2Set = true; - } - } - RegCloseKey(hKey); - } - #ifndef ENABLE_VIRTUAL_TERMINAL_PROCESSING #define ENABLE_VIRTUAL_TERMINAL_PROCESSING 0x0004 #endif @@ -735,10 +688,8 @@ static bool DetectWindowsAnsiSupport(void) { DWORD dwMode = 0; GetConsoleMode(hOut, &dwMode); dwMode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING; - SetConsoleMode(hOut, dwMode); - // If both VirtualTerminalLevel and ForceV2 is set, AnsiColor should work - return virtualTerminalLevelSet && forceV2Set; + return SetConsoleMode(hOut, dwMode) ? true : false; } #endif From b1b4bac5ed3153f02932410149d2e89583d45b3c Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Mon, 31 Aug 2020 15:19:02 +0200 Subject: [PATCH 0343/1047] library card SL1 --- client/dictionaries/mfc_default_keys.dic | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/client/dictionaries/mfc_default_keys.dic b/client/dictionaries/mfc_default_keys.dic index cc68b0d88..d19c572e9 100644 --- a/client/dictionaries/mfc_default_keys.dic +++ b/client/dictionaries/mfc_default_keys.dic @@ -1115,3 +1115,21 @@ fe04ecfe5577 C1E51C63B8F5 # RATB key 1DB710648A65 18F34C92A56E # E-GO card key +# +# Library Card MFP - SL1 +4a832584637d +ca679d6291b0 +30d9690fc5bc +5296c26109d4 +e77952748484 +91c2376005a1 +30b7680b2bc9 +e2a9e88bfe16 +43b04995d234 +aade86b1f9c1 +5ea088c824c9 +c67beb41ffbf +5ea088c824c9 +c67beb41ffbf +b84d52971107 +52b0d3f6116e From fa751e4c17ce00481c8b895a8b4876701e518e16 Mon Sep 17 00:00:00 2001 From: Iceman Date: Mon, 31 Aug 2020 19:36:45 +0200 Subject: [PATCH 0344/1047] added release template --- .../ISSUE_TEMPLATE/checklist-for-release.md | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/checklist-for-release.md diff --git a/.github/ISSUE_TEMPLATE/checklist-for-release.md b/.github/ISSUE_TEMPLATE/checklist-for-release.md new file mode 100644 index 000000000..bb43dbcc5 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/checklist-for-release.md @@ -0,0 +1,48 @@ +--- +name: Checklist for release +about: A template when making a release +title: "[RELEASE]" +labels: Release +assignees: doegox, iceman1001 + +--- + +Checklist + +- [ ] CHANGELOG.md +- [ ] `make style` +- [ ] `make clean; make -j; ./pm3tests` +- [ ] `( cd client;mkdir build;cd build;cmake ..;make -j ); PM3BIN=./client/build/proxmark3 ./pm3test.sh client` +- [ ] `make clean; make client CC=clang CXX=clang++ LD=clang++` +- [ ] `mymanualchecks.sh` +- [ ] `mycppcheck.sh` no alarming warning? +- [ ] `mymakeclang.sh` no alarming error/warning ? +- [ ] `mystandalone_makes.sh` compile all standalone modes (linux only) +- [ ] [Travis](https://travis-ci.org/github/RfidResearchGroup/proxmark3/builds) green (linux noqt / osx+qt ; with makefile (w/wo bt) / with cmake) +- [ ] [Appveyor](https://ci.appveyor.com/project/RfidResearchGroup/proxmark3/history) green (PS) +- [ ] WSL +- [ ] RPI Zero + + + + +``` +#!/usr/bin/env bash + +make clean; make -j PLATFORM=PM3OTHER; ./pm3test.sh +make clean; make -j PLATFORM=PM3RDV4; ./pm3test.sh +make clean; make -j PLATFORM=PM3RDV4 PLATFORM_EXTRAS=BTADDON; ./pm3test.sh + +( cd client; rm -rf build; mkdir build;cd build;cmake ..;make -j PLATFORM=PM3OTHER ); PM3BIN=./client/build/proxmark3 ./pm3test.sh client +( cd client; rm -rf build; mkdir build;cd build;cmake ..;make -j PLATFORM=PM3RDV4 ); PM3BIN=./client/build/proxmark3 ./pm3test.sh client +( cd client; rm -rf build; mkdir build;cd build;cmake ..;make -j PLATFORM=PM3RDV4 PLATFORM_EXTRAS=BTADDON ); PM3BIN=./client/build/proxmark3 ./tools/pm3test.sh client +``` + +Also test on Debian10 / Ubuntu19.10 +```make clean; make client CC=clang CXX=clang++ LD=clang++``` + +``` +- [ ] make PLATFORM=PM3OTHER +- [ ] make PLATFORM=PM3RDV4 +- [ ] make PLATFORM=PM3RDV4 PLATFORM_EXTRAS=BTADDON +``` From ba884b37ab85cbe7757f17d72ce4521cc8219466 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Mon, 31 Aug 2020 20:19:46 +0200 Subject: [PATCH 0345/1047] few changes on checklist template --- .../ISSUE_TEMPLATE/checklist-for-release.md | 59 +++++++++---------- 1 file changed, 29 insertions(+), 30 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/checklist-for-release.md b/.github/ISSUE_TEMPLATE/checklist-for-release.md index bb43dbcc5..aae8ab053 100644 --- a/.github/ISSUE_TEMPLATE/checklist-for-release.md +++ b/.github/ISSUE_TEMPLATE/checklist-for-release.md @@ -1,48 +1,47 @@ --- name: Checklist for release -about: A template when making a release -title: "[RELEASE]" +about: A template when making a release (usage reserved to repo maintainers) +title: "[RELEASE 4.x] Checklist" labels: Release assignees: doegox, iceman1001 --- -Checklist +# Checklist - [ ] CHANGELOG.md - [ ] `make style` -- [ ] `make clean; make -j; ./pm3tests` -- [ ] `( cd client;mkdir build;cd build;cmake ..;make -j ); PM3BIN=./client/build/proxmark3 ./pm3test.sh client` -- [ ] `make clean; make client CC=clang CXX=clang++ LD=clang++` +- [ ] `make clean; make client CC=clang CXX=clang++ LD=clang++` on recent Debian or Ubuntu - [ ] `mymanualchecks.sh` - [ ] `mycppcheck.sh` no alarming warning? - [ ] `mymakeclang.sh` no alarming error/warning ? - [ ] `mystandalone_makes.sh` compile all standalone modes (linux only) - [ ] [Travis](https://travis-ci.org/github/RfidResearchGroup/proxmark3/builds) green (linux noqt / osx+qt ; with makefile (w/wo bt) / with cmake) - [ ] [Appveyor](https://ci.appveyor.com/project/RfidResearchGroup/proxmark3/history) green (PS) -- [ ] WSL + +# OS compilation and tests + +```bash +make clean && make -j PLATFORM=PM3OTHER && tools/pm3test.sh +make clean && make -j PLATFORM=PM3RDV4 && tools/pm3test.sh +make clean && make -j PLATFORM=PM3RDV4 PLATFORM_EXTRAS=BTADDON && tools/pm3test.sh +make install; pushd /tmp; proxmark3 -c 'data load em4x05.pm3;lf search 1'; popd; make uninstall + +( cd client; rm -rf build; mkdir build;cd build;cmake .. && make -j PLATFORM=PM3OTHER && PM3BIN=./proxmark3 ../../tools/pm3test.sh client ) +( cd client; rm -rf build; mkdir build;cd build;cmake .. && make -j PLATFORM=PM3RDV4 && PM3BIN=./proxmark3 ../../tools/pm3test.sh client ) +( cd client; rm -rf build; mkdir build;cd build;cmake .. && make -j PLATFORM=PM3RDV4 PLATFORM_EXTRAS=BTADDON && PM3BIN=./proxmark3 ../../tools/pm3test.sh client ) +``` + - [ ] RPI Zero +- [ ] WSL +- [ ] PSv3.3 +- [ ] Kali +- [ ] Debian +- [ ] Ubuntu20 +- [ ] ParrotOS +- [ ] Fedora +- [ ] OpenSuse +- [ ] OSX +- [ ] Android +- [ ] Termux - - - -``` -#!/usr/bin/env bash - -make clean; make -j PLATFORM=PM3OTHER; ./pm3test.sh -make clean; make -j PLATFORM=PM3RDV4; ./pm3test.sh -make clean; make -j PLATFORM=PM3RDV4 PLATFORM_EXTRAS=BTADDON; ./pm3test.sh - -( cd client; rm -rf build; mkdir build;cd build;cmake ..;make -j PLATFORM=PM3OTHER ); PM3BIN=./client/build/proxmark3 ./pm3test.sh client -( cd client; rm -rf build; mkdir build;cd build;cmake ..;make -j PLATFORM=PM3RDV4 ); PM3BIN=./client/build/proxmark3 ./pm3test.sh client -( cd client; rm -rf build; mkdir build;cd build;cmake ..;make -j PLATFORM=PM3RDV4 PLATFORM_EXTRAS=BTADDON ); PM3BIN=./client/build/proxmark3 ./tools/pm3test.sh client -``` - -Also test on Debian10 / Ubuntu19.10 -```make clean; make client CC=clang CXX=clang++ LD=clang++``` - -``` -- [ ] make PLATFORM=PM3OTHER -- [ ] make PLATFORM=PM3RDV4 -- [ ] make PLATFORM=PM3RDV4 PLATFORM_EXTRAS=BTADDON -``` From 71fc3e18d97a24897d8f6020d03ec56d84c1fcb3 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 2 Sep 2020 12:16:11 +0200 Subject: [PATCH 0346/1047] fixing return codes for Autopwn, added staticnested to autopwn --- armsrc/mifarecmd.c | 13 +-- client/src/cmdhfmf.c | 197 +++++++++++++++++++++++---------- client/src/mifare/mifarehost.c | 13 +-- 3 files changed, 145 insertions(+), 78 deletions(-) diff --git a/armsrc/mifarecmd.c b/armsrc/mifarecmd.c index b32953cd7..8169a3393 100644 --- a/armsrc/mifarecmd.c +++ b/armsrc/mifarecmd.c @@ -906,7 +906,7 @@ void MifareNested(uint8_t blockNo, uint8_t keyType, uint8_t targetBlockNo, uint8 set_tracing(true); // statistics on nonce distance - int16_t isOK = 0; + int16_t isOK = PM3_SUCCESS; #define NESTED_MAX_TRIES 12 if (calibrate) { // calibrate: for first call only. Otherwise reuse previous calibration LED_B_ON(); @@ -922,7 +922,7 @@ void MifareNested(uint8_t blockNo, uint8_t keyType, uint8_t targetBlockNo, uint8 // Test if the action was cancelled if (BUTTON_PRESS() || data_available()) { - isOK = -2; + isOK = PM3_EOPABORTED; break; } @@ -977,7 +977,7 @@ void MifareNested(uint8_t blockNo, uint8_t keyType, uint8_t targetBlockNo, uint8 } else { unsuccessful_tries++; if (unsuccessful_tries > NESTED_MAX_TRIES) { // card isn't vulnerable to nested attack (random numbers are not predictable) - isOK = -3; + isOK = PM3_EFAILED; } } } @@ -1003,7 +1003,7 @@ void MifareNested(uint8_t blockNo, uint8_t keyType, uint8_t targetBlockNo, uint8 // Test if the action was cancelled if (BUTTON_PRESS() || data_available()) { - isOK = -2; + isOK = PM3_EOPABORTED; break; } @@ -1092,12 +1092,7 @@ void MifareNested(uint8_t blockNo, uint8_t keyType, uint8_t targetBlockNo, uint8 memcpy(payload.nt_b, &target_nt[1], 4); memcpy(payload.ks_b, &target_ks[1], 4); - LED_B_ON(); reply_ng(CMD_HF_MIFARE_NESTED, PM3_SUCCESS, (uint8_t *)&payload, sizeof(payload)); - LED_B_OFF(); - - if (DBGLEVEL >= 3) DbpString("NESTED FINISHED"); - FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); LEDsoff(); set_tracing(false); diff --git a/client/src/cmdhfmf.c b/client/src/cmdhfmf.c index b08913712..1e351a913 100644 --- a/client/src/cmdhfmf.c +++ b/client/src/cmdhfmf.c @@ -1306,19 +1306,19 @@ static int CmdHF14AMfNested(const char *Cmd) { if (cmdp == 'o') { int16_t isOK = mfnested(blockNo, keyType, key, trgBlockNo, trgKeyType, keyBlock, true); switch (isOK) { - case -1 : + case PM3_ETIMEOUT: PrintAndLogEx(ERR, "Command execute timeout\n"); break; - case -2 : + case PM3_EOPABORTED: PrintAndLogEx(WARNING, "Button pressed. Aborted.\n"); break; - case -3 : + case PM3_EFAILED: PrintAndLogEx(FAILED, "Tag isn't vulnerable to Nested Attack (PRNG is not predictable).\n"); break; - case -4 : + case PM3_ESOFT: PrintAndLogEx(FAILED, "No valid key found"); break; - case -5 : + case PM3_SUCCESS: key64 = bytes_to_num(keyBlock, 6); // transfer key to the emulator @@ -1366,7 +1366,6 @@ static int CmdHF14AMfNested(const char *Cmd) { PrintAndLogEx(SUCCESS, "Testing known keys. Sector count "_YELLOW_("%d"), SectorsCnt); int res = mfCheckKeys_fast(SectorsCnt, true, true, 1, ARRAYLEN(g_mifare_default_keys) + 1, keyBlock, e_sector, false); if (res == PM3_SUCCESS) { - // all keys found PrintAndLogEx(SUCCESS, "Fast check found all keys"); goto jumptoend; } @@ -1376,7 +1375,6 @@ static int CmdHF14AMfNested(const char *Cmd) { PrintAndLogEx(SUCCESS, "enter nested key recovery"); // nested sectors -// int iterations = 0; bool calibrate = true; for (trgKeyType = 0; trgKeyType < 2; ++trgKeyType) { @@ -1387,28 +1385,26 @@ static int CmdHF14AMfNested(const char *Cmd) { int16_t isOK = mfnested(blockNo, keyType, key, FirstBlockOfSector(sectorNo), trgKeyType, keyBlock, calibrate); switch (isOK) { - case -1 : + case PM3_ETIMEOUT: PrintAndLogEx(ERR, "Command execute timeout\n"); break; - case -2 : + case PM3_EOPABORTED: PrintAndLogEx(WARNING, "button pressed. Aborted.\n"); break; - case -3 : + case PM3_EFAILED : PrintAndLogEx(FAILED, "Tag isn't vulnerable to Nested Attack (PRNG is not predictable).\n"); break; - case -4 : //key not found + case PM3_ESOFT: + //key not found calibrate = false; -// iterations++; continue; - case -5 : + case PM3_SUCCESS: calibrate = false; -// iterations++; e_sector[sectorNo].foundKey[trgKeyType] = 1; e_sector[sectorNo].Key[trgKeyType] = bytes_to_num(keyBlock, 6); mfCheckKeys_fast(SectorsCnt, true, true, 2, 1, keyBlock, e_sector, false); continue; - default : PrintAndLogEx(ERR, "Unknown error.\n"); } @@ -1940,6 +1936,7 @@ static int CmdHF14AMfAutoPWN(const char *Cmd) { bool slow = false; bool legacy_mfchk = false; int prng_type = PM3_EUNDEF; + int has_staticnonce = 2; bool verbose = false; bool has_filename = false; bool errors = false; @@ -2061,33 +2058,43 @@ static int CmdHF14AMfAutoPWN(const char *Cmd) { free(e_sector); return prng_type; } + + // check if tag doesn't have static nonce + has_staticnonce = detect_classic_static_nonce(); // print parameters if (verbose) { - PrintAndLogEx(INFO, _YELLOW_("======================= SETTINGS =======================")); + PrintAndLogEx(INFO, "======================= " _YELLOW_("SETTINGS") " ======================="); PrintAndLogEx(INFO, " card sectors .. " _YELLOW_("%d"), sectors_cnt); PrintAndLogEx(INFO, " key supplied .. " _YELLOW_("%s"), know_target_key ? "True" : "False"); PrintAndLogEx(INFO, " known sector .. " _YELLOW_("%d"), blockNo); PrintAndLogEx(INFO, " keytype ....... " _YELLOW_("%c"), keyType ? 'B' : 'A'); PrintAndLogEx(INFO, " known key ..... " _YELLOW_("%s"), sprint_hex(key, sizeof(key))); - PrintAndLogEx(INFO, " card PRNG ..... " _YELLOW_("%s"), prng_type ? "WEAK" : "HARD"); + + if (has_staticnonce) + PrintAndLogEx(INFO, " card PRNG ..... " _YELLOW_("%s & STATIC"), prng_type ? "WEAK" : "HARD"); + else + PrintAndLogEx(INFO, " card PRNG ..... " _YELLOW_("%s"), prng_type ? "WEAK" : "HARD"); + PrintAndLogEx(INFO, " dictionary .... " _YELLOW_("%s"), strlen(filename) ? filename : "NONE"); PrintAndLogEx(INFO, " legacy mode ... " _YELLOW_("%s"), legacy_mfchk ? "True" : "False"); - PrintAndLogEx(INFO, _YELLOW_("======================= SETTINGS =======================")); + + PrintAndLogEx(INFO, "========================================================================"); } // Start the timer t1 = msclock(); // check the user supplied key - if (know_target_key == false) + if (know_target_key == false) { PrintAndLogEx(WARNING, "no known key was supplied, key recovery might fail"); - else { + } else { if (verbose) { - PrintAndLogEx(INFO, _YELLOW_("======================= START KNOWN KEY ATTACK =======================")); + PrintAndLogEx(INFO, "======================= " _YELLOW_("START KNOWN KEY ATTACK") " ======================="); } + if (mfCheckKeys(FirstBlockOfSector(blockNo), keyType, true, 1, key, &key64) == PM3_SUCCESS) { - PrintAndLogEx(INFO, "target sector:%3u key type: %c -- using valid key [" _YELLOW_("%s") "] (used for nested / hardnested attack)", + PrintAndLogEx(INFO, "target sector:%3u key type: %c -- using valid key [ " _YELLOW_("%s") "] (used for nested / hardnested attack)", blockNo, keyType ? 'B' : 'A', sprint_hex(key, sizeof(key)) @@ -2139,9 +2146,14 @@ static int CmdHF14AMfAutoPWN(const char *Cmd) { } } } - if (verbose) PrintAndLogEx(INFO, _YELLOW_("======================= STOP KNOWN KEY ATTACK =======================")); - if (num_found_keys == sectors_cnt * 2) + + if (verbose) { + PrintAndLogEx(INFO, "======================= " _YELLOW_("STOP KNOWN KEY ATTACK") " ======================="); + } + + if (num_found_keys == sectors_cnt * 2) { goto all_found; + } } bool load_success = true; @@ -2150,9 +2162,9 @@ static int CmdHF14AMfAutoPWN(const char *Cmd) { res = loadFileDICTIONARY_safe(filename, (void **) &keyBlock, 6, &key_cnt); if (res != PM3_SUCCESS || key_cnt == 0 || keyBlock == NULL) { PrintAndLogEx(FAILED, "An error occurred while loading the dictionary! (we will use the default keys now)"); - if (keyBlock != NULL) + if (keyBlock != NULL) { free(keyBlock); - + } load_success = false; } } @@ -2172,7 +2184,7 @@ static int CmdHF14AMfAutoPWN(const char *Cmd) { } // Use the dictionary to find sector keys on the card - if (verbose) PrintAndLogEx(INFO, _YELLOW_("======================= START DICTIONARY ATTACK =======================")); + if (verbose) PrintAndLogEx(INFO, "======================= " _YELLOW_("START DICTIONARY ATTACK") " ======================="); if (legacy_mfchk) { // Check all the sectors @@ -2229,7 +2241,7 @@ static int CmdHF14AMfAutoPWN(const char *Cmd) { lastChunk = false; } // end strategy } - if (verbose) PrintAndLogEx(INFO, _YELLOW_("======================= STOP DICTIONARY ATTACK =======================")); + if (verbose) PrintAndLogEx(INFO, "======================= " _YELLOW_("STOP DICTIONARY ATTACK") " ======================="); // Analyse the dictionary attack @@ -2245,13 +2257,13 @@ static int CmdHF14AMfAutoPWN(const char *Cmd) { know_target_key = true; blockNo = i; keyType = j; - PrintAndLogEx(SUCCESS, "target sector:%3u key type: %c -- found valid key [" _YELLOW_("%s") "] (used for nested / hardnested attack)", + PrintAndLogEx(SUCCESS, "target sector:%3u key type: %c -- found valid key [ " _YELLOW_("%s") "] (used for nested / hardnested attack)", i, j ? 'B' : 'A', sprint_hex(tmp_key, sizeof(tmp_key)) ); } else { - PrintAndLogEx(SUCCESS, "target sector:%3u key type: %c -- found valid key [" _YELLOW_("%s") "]", + PrintAndLogEx(SUCCESS, "target sector:%3u key type: %c -- found valid key [ " _YELLOW_("%s") "]", i, j ? 'B' : 'A', sprint_hex(tmp_key, sizeof(tmp_key)) @@ -2264,10 +2276,17 @@ static int CmdHF14AMfAutoPWN(const char *Cmd) { // Check if at least one sector key was found if (know_target_key == false) { // Check if the darkside attack can be used - if (prng_type) { - if (verbose) PrintAndLogEx(INFO, _YELLOW_("======================= START DARKSIDE ATTACK =======================")); + if (prng_type && has_staticnonce == false) { + if (verbose) { + PrintAndLogEx(INFO, "======================= " _YELLOW_("START DARKSIDE ATTACK") " ======================="); + } + isOK = mfDarkside(FirstBlockOfSector(blockNo), keyType, &key64); - if (verbose) PrintAndLogEx(INFO, _YELLOW_("======================= STOP DARKSIDE ATTACK =======================")); + + if (verbose) { + PrintAndLogEx(INFO, "======================= " _YELLOW_("STOP DARKSIDE ATTACK") " ======================="); + } + switch (isOK) { case -1 : PrintAndLogEx(WARNING, "\nButton pressed. Aborted."); @@ -2293,7 +2312,7 @@ static int CmdHF14AMfAutoPWN(const char *Cmd) { // Store the keys e_sector[blockNo].Key[keyType] = key64; e_sector[blockNo].foundKey[keyType] = 'S'; - PrintAndLogEx(SUCCESS, "target sector:%3u key type: %c -- found valid key [" _YELLOW_("%s") "] (used for nested / hardnested attack)", + PrintAndLogEx(SUCCESS, "target sector:%3u key type: %c -- found valid key [ " _YELLOW_("%s") "] (used for nested / hardnested attack)", blockNo, keyType ? 'B' : 'A', sprint_hex(key, sizeof(key)) @@ -2333,7 +2352,7 @@ noValidKeyFound: if (mfCheckKeys(FirstBlockOfSector(i), j, true, 1, tmp_key, &key64) == PM3_SUCCESS) { e_sector[i].Key[j] = bytes_to_num(tmp_key, 6); e_sector[i].foundKey[j] = 'R'; - PrintAndLogEx(SUCCESS, "target sector:%3u key type: %c -- found valid key [" _YELLOW_("%s") "]", + PrintAndLogEx(SUCCESS, "target sector:%3u key type: %c -- found valid key [ " _YELLOW_("%s") "]", i, j ? 'B' : 'A', sprint_hex(tmp_key, sizeof(tmp_key)) @@ -2348,7 +2367,7 @@ noValidKeyFound: if (current_key_type_i == 1) { if (e_sector[current_sector_i].foundKey[0] && !e_sector[current_sector_i].foundKey[1]) { if (verbose) { - PrintAndLogEx(INFO, _YELLOW_("======================= START READ B KEY ATTACK =======================")); + PrintAndLogEx(INFO, "======================= " _YELLOW_("START READ B KEY ATTACK") " ======================="); PrintAndLogEx(INFO, "reading B key: sector: %3d key type: %c", current_sector_i, current_key_type_i ? 'B' : 'A'); @@ -2375,48 +2394,61 @@ noValidKeyFound: e_sector[current_sector_i].foundKey[current_key_type_i] = 'A'; e_sector[current_sector_i].Key[current_key_type_i] = key64; num_to_bytes(key64, 6, tmp_key); - PrintAndLogEx(SUCCESS, "target sector:%3u key type: %c -- found valid key [" _YELLOW_("%s") "]", + PrintAndLogEx(SUCCESS, "target sector:%3u key type: %c -- found valid key [ " _YELLOW_("%s") "]", current_sector_i, current_key_type_i ? 'B' : 'A', sprint_hex(tmp_key, sizeof(tmp_key)) ); } else { - if (verbose) PrintAndLogEx(WARNING, "unknown B key: sector: %3d key type: %c (reading the B key was not possible, maybe due to insufficient access rights) ", + if (verbose) { + PrintAndLogEx(WARNING, "unknown B key: sector: %3d key type: %c", current_sector_i, current_key_type_i ? 'B' : 'A' ); + PrintAndLogEx(INFO, " -- reading the B key was not possible, maybe due to access rights?"); + + } + + } + if (verbose) { + PrintAndLogEx(INFO, "======================= " _YELLOW_("STOP READ B KEY ATTACK") " ======================="); } - if (verbose) PrintAndLogEx(INFO, _YELLOW_("======================= STOP READ B KEY ATTACK =======================")); } } // Use the nested / hardnested attack skipReadBKey: if (e_sector[current_sector_i].foundKey[current_key_type_i] == 0) { - if (prng_type && (! nested_failed)) { + + if (prng_type && (nested_failed == false) && (has_staticnonce == false)) { uint8_t retries = 0; if (verbose) { - PrintAndLogEx(INFO, _YELLOW_("======================= START NESTED ATTACK =======================")); + PrintAndLogEx(INFO, "======================= " _YELLOW_("START NESTED ATTACK") " ======================="); PrintAndLogEx(INFO, "sector no: %3d, target key type: %c", current_sector_i, current_key_type_i ? 'B' : 'A'); } tryNested: isOK = mfnested(FirstBlockOfSector(blockNo), keyType, key, FirstBlockOfSector(current_sector_i), current_key_type_i, tmp_key, calibrate); + switch (isOK) { - case -1 : + case PM3_ETIMEOUT: { PrintAndLogEx(ERR, "\nError: No response from Proxmark3."); free(e_sector); return PM3_ESOFT; - case -2 : + } + case PM3_EOPABORTED: { PrintAndLogEx(WARNING, "\nButton pressed. Aborted."); free(e_sector); - return PM3_ESOFT; - case -3 : + return PM3_EOPABORTED; + } + case PM3_EFAILED: { PrintAndLogEx(FAILED, "Tag isn't vulnerable to Nested Attack (PRNG is probably not predictable)."); PrintAndLogEx(FAILED, "Nested attack failed --> try hardnested"); goto tryHardnested; - case -4 : //key not found + } + case PM3_ESOFT: { + // key not found calibrate = false; // this can happen on some old cards, it's worth trying some more before switching to slower hardnested if (retries++ < MIFARE_SECTOR_RETRY) { @@ -2428,21 +2460,27 @@ tryNested: goto tryHardnested; } break; - case -5 : + } + case PM3_SUCCESS: { calibrate = false; e_sector[current_sector_i].Key[current_key_type_i] = bytes_to_num(tmp_key, 6); e_sector[current_sector_i].foundKey[current_key_type_i] = 'N'; break; - default : + } + default: { PrintAndLogEx(ERR, "unknown Error.\n"); free(e_sector); return PM3_ESOFT; + } } - if (verbose) PrintAndLogEx(INFO, _YELLOW_("======================= STOP NESTED ATTACK =======================")); + if (verbose) { + PrintAndLogEx(INFO, "======================= " _YELLOW_("STOP NESTED ATTACK") " ======================="); + } + } else { tryHardnested: // If the nested attack fails then we try the hardnested attack if (verbose) { - PrintAndLogEx(INFO, _YELLOW_("======================= START HARDNESTED ATTACK =======================")); + PrintAndLogEx(INFO, "======================= " _YELLOW_("START HARDNESTED ATTACK") " ======================="); PrintAndLogEx(INFO, "sector no: %3d, target key type: %c, Slow: %s", current_sector_i, current_key_type_i ? 'B' : 'A', @@ -2453,14 +2491,17 @@ tryHardnested: // If the nested attack fails then we try the hardnested attack DropField(); if (isOK) { switch (isOK) { - case 1 : + case 1: { PrintAndLogEx(ERR, "\nError: No response from Proxmark3."); break; - case 2 : + } + case 2: { PrintAndLogEx(NORMAL, "\nButton pressed. Aborted."); break; - default : + } + default: { break; + } } free(e_sector); return PM3_ESOFT; @@ -2471,8 +2512,48 @@ tryHardnested: // If the nested attack fails then we try the hardnested attack e_sector[current_sector_i].Key[current_key_type_i] = foundkey; e_sector[current_sector_i].foundKey[current_key_type_i] = 'H'; - if (verbose) PrintAndLogEx(INFO, _YELLOW_("======================= STOP HARDNESTED ATTACK =======================")); + if (verbose) { + PrintAndLogEx(INFO, "======================= " _YELLOW_("STOP HARDNESTED ATTACK") " ======================="); + } } + + if (has_staticnonce) { + + if (verbose) { + PrintAndLogEx(INFO, "======================= " _YELLOW_("START STATIC NESTED ATTACK") " ======================="); + PrintAndLogEx(INFO, "sector no: %3d, target key type: %c", + current_sector_i, + current_key_type_i ? 'B' : 'A'); + } + + isOK = mfStaticNested(blockNo, keyType, key, FirstBlockOfSector(current_sector_i), current_key_type_i, tmp_key); + DropField(); + switch (isOK) { + case PM3_ETIMEOUT: { + PrintAndLogEx(ERR, "\nError: No response from Proxmark3."); + free(e_sector); + return PM3_ESOFT; + } + case PM3_EOPABORTED: { + PrintAndLogEx(WARNING, "\nButton pressed. Aborted."); + free(e_sector); + return PM3_EOPABORTED; + } + case PM3_SUCCESS: { + e_sector[current_sector_i].Key[current_key_type_i] = bytes_to_num(tmp_key, 6); + e_sector[current_sector_i].foundKey[current_key_type_i] = 'C'; + break; + } + default: { + break; + } + } + + if (verbose) { + PrintAndLogEx(INFO, "======================= " _YELLOW_("STOP STATIC NESTED ATTACK") " ======================="); + } + } + // Check if the key was found if (e_sector[current_sector_i].foundKey[current_key_type_i]) { PrintAndLogEx(SUCCESS, "target sector:%3u key type: %c -- found valid key [" _YELLOW_("%s") "]", @@ -2554,14 +2635,7 @@ all_found: free(e_sector); return PM3_SUCCESS; } -/* -static int CmdHF14AMfNestedFixed(const char *Cmd){ - if (strlen(Cmd) < 3) return usage_hf14_fixednested(); - - return PM3_SUCCESS; -} -*/ /* static int randInRange(int min, int max) { return min + (int)(rand() / (double)(RAND_MAX) * (max - min + 1)); @@ -3461,6 +3535,7 @@ void printKeyTableEx(uint8_t sectorscnt, sector_t *e_sector, uint8_t start_secto _YELLOW_("R") ":Reused / " _YELLOW_("N") ":Nested / " _YELLOW_("H") ":Hardnested / " + _YELLOW_("C") ":statiCnested / " _YELLOW_("A") ":keyA " ")" ); diff --git a/client/src/mifare/mifarehost.c b/client/src/mifare/mifarehost.c index f50e77bce..31b88bec9 100644 --- a/client/src/mifare/mifarehost.c +++ b/client/src/mifare/mifarehost.c @@ -418,9 +418,6 @@ int mfnested(uint8_t blockNo, uint8_t keyType, uint8_t *key, uint8_t trgBlockNo, return PM3_ETIMEOUT; } - if (resp.status != PM3_SUCCESS) - return PM3_ESOFT; - struct p { int16_t isOK; uint8_t block; @@ -433,8 +430,9 @@ int mfnested(uint8_t blockNo, uint8_t keyType, uint8_t *key, uint8_t trgBlockNo, } PACKED; struct p *package = (struct p *)resp.data.asBytes; - // error during nested - if (package->isOK) return package->isOK; + // error during nested on device side + if (package->isOK != PM3_SUCCESS) + return package->isOK; memcpy(&uid, package->cuid, sizeof(package->cuid)); @@ -450,7 +448,6 @@ int mfnested(uint8_t blockNo, uint8_t keyType, uint8_t *key, uint8_t trgBlockNo, memcpy(&statelists[1].nt_enc, package->nt_b, sizeof(package->nt_b)); memcpy(&statelists[1].ks1, package->ks_b, sizeof(package->ks_b)); - // calc keys pthread_t thread_id[2]; @@ -543,7 +540,7 @@ int mfnested(uint8_t blockNo, uint8_t keyType, uint8_t *key, uint8_t trgBlockNo, package->keytype ? 'B' : 'A', sprint_hex(resultKey, 6) ); - return -5; + return PM3_SUCCESS; } float bruteforce_per_second = (float)(i + max_keys) / ((msclock() - start_time) / 1000.0); @@ -558,7 +555,7 @@ out: free(statelists[0].head.slhead); free(statelists[1].head.slhead); - return -4; + return PM3_ESOFT; } From 0a6ec76f6595dedc1d39b4c1193b482f2fb99c2f Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 2 Sep 2020 12:18:24 +0200 Subject: [PATCH 0347/1047] textual --- client/src/cmdhfmf.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/client/src/cmdhfmf.c b/client/src/cmdhfmf.c index 1e351a913..f98e972fd 100644 --- a/client/src/cmdhfmf.c +++ b/client/src/cmdhfmf.c @@ -192,7 +192,8 @@ static int usage_hf14_autopwn(void) { PrintAndLogEx(NORMAL, ""); PrintAndLogEx(NORMAL, "Description:"); PrintAndLogEx(NORMAL, " This command automates the key recovery process on MIFARE Classic cards."); - PrintAndLogEx(NORMAL, " It uses the darkside, nested and hardnested attack to extract the keys and card content."); + PrintAndLogEx(NORMAL, " It uses the darkside, nested, hardnested and staticnested to recover keys."); + PrintAndLogEx(NORMAL, " If all keys are found, try dumping card content."); PrintAndLogEx(NORMAL, ""); PrintAndLogEx(NORMAL, "Options:"); PrintAndLogEx(NORMAL, " h this help"); From 8097faa449176e86e56499a956a1a43e113e1557 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 2 Sep 2020 12:37:45 +0200 Subject: [PATCH 0348/1047] better looping for when to enter staticnested --- client/src/cmdhfmf.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/client/src/cmdhfmf.c b/client/src/cmdhfmf.c index f98e972fd..d24f2382e 100644 --- a/client/src/cmdhfmf.c +++ b/client/src/cmdhfmf.c @@ -2421,7 +2421,10 @@ noValidKeyFound: skipReadBKey: if (e_sector[current_sector_i].foundKey[current_key_type_i] == 0) { - if (prng_type && (nested_failed == false) && (has_staticnonce == false)) { + if (has_staticnonce) + goto tryStaticnested; + + if (prng_type && (nested_failed == false)) { uint8_t retries = 0; if (verbose) { PrintAndLogEx(INFO, "======================= " _YELLOW_("START NESTED ATTACK") " ======================="); @@ -2519,7 +2522,7 @@ tryHardnested: // If the nested attack fails then we try the hardnested attack } if (has_staticnonce) { - +tryStaticnested: if (verbose) { PrintAndLogEx(INFO, "======================= " _YELLOW_("START STATIC NESTED ATTACK") " ======================="); PrintAndLogEx(INFO, "sector no: %3d, target key type: %c", From e10333e21acce7cb67d3ae828be7271fac5f45fd Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 2 Sep 2020 12:38:19 +0200 Subject: [PATCH 0349/1047] new error define --- include/pm3_cmd.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/include/pm3_cmd.h b/include/pm3_cmd.h index a7ba0a4d0..566fb0b6a 100644 --- a/include/pm3_cmd.h +++ b/include/pm3_cmd.h @@ -745,6 +745,10 @@ typedef struct { #define PM3_EAPDU_ENCODEFAIL -19 // APDU responded with a failure code #define PM3_EAPDU_FAIL -20 + +// execute pm3 cmd failed client/pm3: when one of our pm3 cmd tries and fails. oppsite from PM3_SUCCESS +#define PM3_EFAILED -21 + // No data pm3: no data available, no host frame available (not really an error) #define PM3_ENODATA -98 // Quit program client: reserved, order to quit the program From e03d7e3894f41ff529f29291e4735901d40363e2 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 2 Sep 2020 13:22:07 +0200 Subject: [PATCH 0350/1047] hf mf autopwn - moved generate filename call --- client/src/cmdhfmf.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/client/src/cmdhfmf.c b/client/src/cmdhfmf.c index d24f2382e..bc947d075 100644 --- a/client/src/cmdhfmf.c +++ b/client/src/cmdhfmf.c @@ -2052,6 +2052,9 @@ static int CmdHF14AMfAutoPWN(const char *Cmd) { return PM3_EMALLOC; } + // read uid to generate a filename for the key file + char *fptr = GenerateFilename("hf-mf-", "-key.bin"); + // card prng type (weak=1 / hard=0 / select/card comm error = negative value) prng_type = detect_classic_prng(); if (prng_type < 0) { @@ -2582,7 +2585,6 @@ all_found: // Dump the keys PrintAndLogEx(NORMAL, ""); - char *fptr = GenerateFilename("hf-mf-", "-key.bin"); if (createMfcKeyDump(fptr, sectors_cnt, e_sector) != PM3_SUCCESS) { PrintAndLogEx(ERR, "Failed to save keys to file"); } From 247dfd40b291689e6c52c51e0a0d720b96211fe0 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 2 Sep 2020 15:09:23 +0200 Subject: [PATCH 0351/1047] unified ST printing for rdbl, rdsc, cgetblk, cgetsc --- client/src/cmdhfmf.c | 74 ++++++++++++++++++++++---------------------- 1 file changed, 37 insertions(+), 37 deletions(-) diff --git a/client/src/cmdhfmf.c b/client/src/cmdhfmf.c index bc947d075..a41c022fa 100644 --- a/client/src/cmdhfmf.c +++ b/client/src/cmdhfmf.c @@ -552,6 +552,26 @@ static int32_t initSectorTable(sector_t **src, int32_t items) { return items; } +static void decode_print_st(uint16_t blockno, uint8_t* data) { + if (mfIsSectorTrailer(blockno)) { + PrintAndLogEx(NORMAL, ""); + PrintAndLogEx(NORMAL, "Sector trailer decoded:"); + PrintAndLogEx(NORMAL, "----------------------------------------------"); + PrintAndLogEx(NORMAL, "Key A " _GREEN_("%s"), sprint_hex_inrow(data, 6)); + PrintAndLogEx(NORMAL, "Key B " _GREEN_("%s"), sprint_hex_inrow(data + 10, 6)); + PrintAndLogEx(NORMAL, "Access rights"); + + int bln = mfFirstBlockOfSector(mfSectorNum(blockno)); + int blinc = (mfNumBlocksPerSector(mfSectorNum(blockno)) > 4) ? 5 : 1; + for (int i = 0; i < 4; i++) { + PrintAndLogEx(NORMAL, " block %d%s " _YELLOW_("%s"), bln, ((blinc > 1) && (i < 3) ? "+" : ""), mfGetAccessConditionsDesc(i, &data[6])); + bln += blinc; + } + PrintAndLogEx(NORMAL, "UserData " _YELLOW_("0x%02x"), data[9]); + PrintAndLogEx(NORMAL, "----------------------------------------------"); + } +} + static int CmdHF14AMfDarkside(const char *Cmd) { uint8_t blockno = 0, key_type = MIFARE_AUTH_KEYA; uint64_t key = 0; @@ -626,7 +646,7 @@ static int CmdHF14AMfWrBl(const char *Cmd) { return 1; } - PrintAndLogEx(NORMAL, "--block no:%d, key type:%c, key:%s", blockNo, keyType ? 'B' : 'A', sprint_hex(key, 6)); + PrintAndLogEx(NORMAL, "--block no %d, key %c - %s", blockNo, keyType ? 'B' : 'A', sprint_hex(key, 6)); PrintAndLogEx(NORMAL, "--data: %s", sprint_hex(bldata, 16)); uint8_t data[26]; @@ -673,7 +693,7 @@ static int CmdHF14AMfRdBl(const char *Cmd) { PrintAndLogEx(NORMAL, "Key must include 12 HEX symbols"); return PM3_ESOFT; } - PrintAndLogEx(NORMAL, "--block no:%d, key type:%c, key:%s ", blockNo, keyType ? 'B' : 'A', sprint_hex(key, 6)); + PrintAndLogEx(NORMAL, "--block no %d, key %c - %s", blockNo, keyType ? 'B' : 'A', sprint_hex(key, 6)); mf_readblock_t payload; payload.blockno = blockNo; @@ -694,15 +714,8 @@ static int CmdHF14AMfRdBl(const char *Cmd) { return PM3_ESOFT; } - if (mfIsSectorTrailer(blockNo) && (data[6] || data[7] || data[8])) { - PrintAndLogEx(NORMAL, "Trailer decoded:"); - int bln = mfFirstBlockOfSector(mfSectorNum(blockNo)); - int blinc = (mfNumBlocksPerSector(mfSectorNum(blockNo)) > 4) ? 5 : 1; - for (int i = 0; i < 4; i++) { - PrintAndLogEx(NORMAL, "Access block %d%s: %s", bln, ((blinc > 1) && (i < 3) ? "+" : ""), mfGetAccessConditionsDesc(i, &data[6])); - bln += blinc; - } - PrintAndLogEx(NORMAL, "UserData: %s", sprint_hex_inrow(&data[9], 1)); + if ((data[6] || data[7] || data[8])) { + decode_print_st(blockNo, data); } } else { PrintAndLogEx(WARNING, "Command execute timeout"); @@ -743,7 +756,7 @@ static int CmdHF14AMfRdSc(const char *Cmd) { PrintAndLogEx(NORMAL, "Key must include 12 HEX symbols"); return PM3_ESOFT; } - PrintAndLogEx(NORMAL, "--sector no:%d key type:%c key:%s ", sectorNo, keyType ? 'B' : 'A', sprint_hex(key, 6)); + PrintAndLogEx(NORMAL, "--sector no %d, key %c - %s ", sectorNo, keyType ? 'B' : 'A', sprint_hex(key, 6)); clearCommandBuffer(); SendCommandMIX(CMD_HF_MIFARE_READSC, sectorNo, keyType, 0, key, 6); @@ -756,19 +769,17 @@ static int CmdHF14AMfRdSc(const char *Cmd) { PrintAndLogEx(NORMAL, "isOk:%02x", isOK); if (isOK) { - for (int i = 0; i < (sectorNo < 32 ? 3 : 15); i++) { - PrintAndLogEx(NORMAL, "data : %s", sprint_hex(data + i * 16, 16)); + + uint8_t blocks = 4; + uint8_t start = sectorNo * 4; + if (sectorNo > 32) { + blocks = 16; + start = 128 + (sectorNo - 32) * 16; } - PrintAndLogEx(NORMAL, "trailer: %s", sprint_hex(data + (sectorNo < 32 ? 3 : 15) * 16, 16)); - - PrintAndLogEx(NORMAL, "Trailer decoded:"); - int bln = mfFirstBlockOfSector(sectorNo); - int blinc = (mfNumBlocksPerSector(sectorNo) > 4) ? 5 : 1; - for (int i = 0; i < 4; i++) { - PrintAndLogEx(NORMAL, "Access block %d%s: %s", bln, ((blinc > 1) && (i < 3) ? "+" : ""), mfGetAccessConditionsDesc(i, &(data + (sectorNo < 32 ? 3 : 15) * 16)[6])); - bln += blinc; + for (int i = 0; i < blocks; i++) { + PrintAndLogEx(NORMAL, "%3d | %s", start + i, sprint_hex(data + (i * 16) , 16)); } - PrintAndLogEx(NORMAL, "UserData: %s", sprint_hex_inrow(&(data + (sectorNo < 32 ? 3 : 15) * 16)[9], 1)); + decode_print_st(start + blocks - 1, data + ((blocks - 1) * 16) ); } } else { PrintAndLogEx(WARNING, "Command execute timeout"); @@ -4215,19 +4226,7 @@ static int CmdHF14AMfCGetBlk(const char *Cmd) { PrintAndLogEx(NORMAL, "data: %s", sprint_hex(data, sizeof(data))); - if (mfIsSectorTrailer(blockNo)) { - PrintAndLogEx(NORMAL, "Trailer decoded:"); - PrintAndLogEx(NORMAL, "Key A: %s", sprint_hex_inrow(data, 6)); - PrintAndLogEx(NORMAL, "Key B: %s", sprint_hex_inrow(&data[10], 6)); - int bln = mfFirstBlockOfSector(mfSectorNum(blockNo)); - int blinc = (mfNumBlocksPerSector(mfSectorNum(blockNo)) > 4) ? 5 : 1; - for (int i = 0; i < 4; i++) { - PrintAndLogEx(NORMAL, "Access block %d%s: %s", bln, ((blinc > 1) && (i < 3) ? "+" : ""), mfGetAccessConditionsDesc(i, &data[6])); - bln += blinc; - } - PrintAndLogEx(NORMAL, "UserData: %s", sprint_hex_inrow(&data[9], 1)); - } - + decode_print_st(blockNo, data); return PM3_SUCCESS; } @@ -4243,7 +4242,7 @@ static int CmdHF14AMfCGetSc(const char *Cmd) { return PM3_ESOFT; } - PrintAndLogEx(NORMAL, "\n # | data | Sector | %02d/ 0x%02X ", sector, sector); + PrintAndLogEx(NORMAL, "\n # | data - sector %02d / 0x%02X ", sector, sector); PrintAndLogEx(NORMAL, "----+------------------------------------------------"); uint8_t blocks = 4; uint8_t start = sector * 4; @@ -4265,6 +4264,7 @@ static int CmdHF14AMfCGetSc(const char *Cmd) { } PrintAndLogEx(NORMAL, "%3d | %s", start + i, sprint_hex(data, 16)); } + decode_print_st(start + blocks - 1, data); return PM3_SUCCESS; } From 00800fd7804e35c954090d3839372d8c3981c1f2 Mon Sep 17 00:00:00 2001 From: Iceman Date: Thu, 3 Sep 2020 10:22:35 +0200 Subject: [PATCH 0352/1047] Update 2_Configuration-and-Verification.md --- .../Use_of_Proxmark/2_Configuration-and-Verification.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/doc/md/Use_of_Proxmark/2_Configuration-and-Verification.md b/doc/md/Use_of_Proxmark/2_Configuration-and-Verification.md index 8264e3245..b1c79e27d 100644 --- a/doc/md/Use_of_Proxmark/2_Configuration-and-Verification.md +++ b/doc/md/Use_of_Proxmark/2_Configuration-and-Verification.md @@ -1,6 +1,13 @@ ### First things on your RDV40 + You will need to run these commands to make sure your rdv4 is prepared ``` +[usb] pm3 --> script run init_rdv4 +``` + + +The lua script actually executes the following commands below. These are here because of documentation, you can jump down to *Verify sim module firmware version* part. +``` [usb] pm3 --> mem load f mfc_default_keys m [usb] pm3 --> mem load f t55xx_default_pwds t [usb] pm3 --> mem load f iclass_default_keys i @@ -13,6 +20,7 @@ Set all t55xx settings to defaults (will set all 4 at once) [usb] pm3 --> lf t55xx deviceconfig z p ``` + ### Verify sim module firmware version To make sure you got the latest sim module firmware. From d98ffd43aacd03f47ab28e3f0b4ea47d82d46cff Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 3 Sep 2020 10:22:59 +0200 Subject: [PATCH 0353/1047] textual --- armsrc/mifareutil.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/armsrc/mifareutil.c b/armsrc/mifareutil.c index 71c57a963..1f04743e9 100644 --- a/armsrc/mifareutil.c +++ b/armsrc/mifareutil.c @@ -203,14 +203,14 @@ int mifare_classic_authex(struct Crypto1State *pcs, uint32_t uid, uint8_t blockN iso14a_set_timeout(save_timeout); if (!len) { - if (DBGLEVEL >= DBG_EXTENDED) Dbprintf("Authentication failed. Card timeout."); + if (DBGLEVEL >= DBG_EXTENDED) Dbprintf("Authentication failed. Card timeout"); return 2; } ntpp = prng_successor(nt, 32) ^ crypto1_word(pcs, 0, 0); if (ntpp != bytes_to_num(receivedAnswer, 4)) { - if (DBGLEVEL >= DBG_EXTENDED) Dbprintf("Authentication failed. Error card response."); + if (DBGLEVEL >= DBG_EXTENDED) Dbprintf("Authentication failed. Error card response"); return 3; } return 0; @@ -225,18 +225,18 @@ int mifare_classic_readblock(struct Crypto1State *pcs, uint32_t uid, uint8_t blo len = mifare_sendcmd_short(pcs, 1, ISO14443A_CMD_READBLOCK, blockNo, receivedAnswer, receivedAnswerPar, NULL); if (len == 1) { - if (DBGLEVEL >= DBG_ERROR) Dbprintf("Cmd Error: %02x", receivedAnswer[0]); + if (DBGLEVEL >= DBG_ERROR) Dbprintf("Cmd Error %02x", receivedAnswer[0]); return 1; } if (len != 18) { - if (DBGLEVEL >= DBG_ERROR) Dbprintf("Cmd Error: wrong response len: %x (expected 18)", len); + if (DBGLEVEL >= DBG_ERROR) Dbprintf("wrong response len %d (expected 18)", len); return 2; } memcpy(bt, receivedAnswer + 16, 2); AddCrc14A(receivedAnswer, 16); if (bt[0] != receivedAnswer[16] || bt[1] != receivedAnswer[17]) { - if (DBGLEVEL >= DBG_INFO) Dbprintf("Cmd CRC response error."); + if (DBGLEVEL >= DBG_INFO) Dbprintf("CRC response error"); return 3; } From c9f853de2fafb16f71d4a3c2daa92d8fadd6125a Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 3 Sep 2020 10:29:25 +0200 Subject: [PATCH 0354/1047] added references to youtube videos --- armsrc/Standalone/hf_iceclass.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/armsrc/Standalone/hf_iceclass.c b/armsrc/Standalone/hf_iceclass.c index 82c48b316..2a0ef6236 100644 --- a/armsrc/Standalone/hf_iceclass.c +++ b/armsrc/Standalone/hf_iceclass.c @@ -7,6 +7,15 @@ //----------------------------------------------------------------------------- // main code for hf_iceclass by Iceman //----------------------------------------------------------------------------- +// +// Created for the live streamed talk 'DEFCON 28 Wireless Village-Omikron and Iceman - Ghosting the PACS-man: New Tools and Techniques' +// https://www.youtube.com/watch?v=ghiHXK4GEzE +// +// I created a youtube video demostrating the HF_ICECLASS standalone mode +// https://youtu.be/w_1GnAscNIU +// +// + #include "standalone.h" // standalone definitions #include "proxmark3_arm.h" #include "appmain.h" From 9d43bfbb01aada0bc9a312c61327fb80217a6b1a Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 3 Sep 2020 10:30:30 +0200 Subject: [PATCH 0355/1047] textual and added one new error code PM3_EPARTIAL --- include/pm3_cmd.h | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/include/pm3_cmd.h b/include/pm3_cmd.h index 566fb0b6a..b2eff0ddb 100644 --- a/include/pm3_cmd.h +++ b/include/pm3_cmd.h @@ -714,7 +714,7 @@ typedef struct { #define PM3_ETIMEOUT -4 // Operation aborted (by user) client/pm3: kbd/button pressed #define PM3_EOPABORTED -5 -// Not (yet) implemented client/pm3: TBD placeholder +// Not (yet) implemented client/pm3: TBD place holder #define PM3_ENOTIMPL -6 // Error while RF transmission client/pm3: fail between pm3 & card #define PM3_ERFTRANS -7 @@ -732,7 +732,7 @@ typedef struct { #define PM3_EFILE -13 // Generic TTY error #define PM3_ENOTTY -14 -// Initialization error pm3: error related to trying to initalize the pm3 / fpga for different operations +// Initialization error pm3: error related to trying to initialize the pm3 / fpga for different operations #define PM3_EINIT -15 // Expected a different answer error client/pm3: error when expecting one answer and got another one #define PM3_EWRONGANSWER -16 @@ -746,8 +746,10 @@ typedef struct { // APDU responded with a failure code #define PM3_EAPDU_FAIL -20 -// execute pm3 cmd failed client/pm3: when one of our pm3 cmd tries and fails. oppsite from PM3_SUCCESS +// execute pm3 cmd failed client/pm3: when one of our pm3 cmd tries and fails. opposite from PM3_SUCCESS #define PM3_EFAILED -21 +// partial success client/pm3: when tring to dump a tag and fails on some blocks. Partial dump. +#define PM3_EPARTIAL -22 // No data pm3: no data available, no host frame available (not really an error) #define PM3_ENODATA -98 From c0c580bc6663253a01daa797e6573fc3becdc23a Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 3 Sep 2020 10:31:50 +0200 Subject: [PATCH 0356/1047] ecfill - dont break of a bad read, fill w zeros and report back partial dump --- armsrc/mifarecmd.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/armsrc/mifarecmd.c b/armsrc/mifarecmd.c index 8169a3393..6f84fd80a 100644 --- a/armsrc/mifarecmd.c +++ b/armsrc/mifarecmd.c @@ -1964,10 +1964,13 @@ int MifareECardLoad(uint8_t sectorcnt, uint8_t keytype) { for (uint8_t blockNo = 0; blockNo < NumBlocksPerSector(sectorNo); blockNo++) { if (mifare_classic_readblock(pcs, cuid, FirstBlockOfSector(sectorNo) + blockNo, dataoutbuf)) { - retval = PM3_ESOFT; + retval = PM3_EPARTIAL; + emlSetMem("\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", FirstBlockOfSector(sectorNo) + blockNo, 1); + if (DBGLEVEL > DBG_ERROR) Dbprintf("Error reading sector %2d block %2d", sectorNo, blockNo); - break; + continue; } + if (blockNo < NumBlocksPerSector(sectorNo) - 1) { emlSetMem(dataoutbuf, FirstBlockOfSector(sectorNo) + blockNo, 1); } else { // sector trailer, keep the keys, set only the AC From 4893bce4b5ee3c1eb14231097755147bda5eb899 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 3 Sep 2020 10:32:19 +0200 Subject: [PATCH 0357/1047] more logging --- client/src/cmdhfmf.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/client/src/cmdhfmf.c b/client/src/cmdhfmf.c index a41c022fa..5e6b764f1 100644 --- a/client/src/cmdhfmf.c +++ b/client/src/cmdhfmf.c @@ -869,6 +869,7 @@ static int FastDumpWithEcFill(uint8_t numsectors) { int res = WaitForResponseTimeout(CMD_HF_MIFARE_EML_LOAD, &resp, 2000); if (res != PM3_SUCCESS) { + PrintAndLogEx(INFO, "fast dump reported back failure, when trying keyA"); } // ecfill key B @@ -878,7 +879,7 @@ static int FastDumpWithEcFill(uint8_t numsectors) { SendCommandNG(CMD_HF_MIFARE_EML_LOAD, (uint8_t *)&payload, sizeof(payload)); res = WaitForResponseTimeout(CMD_HF_MIFARE_EML_LOAD, &resp, 2000); if (res != PM3_SUCCESS) { - + PrintAndLogEx(INFO, "fast dump reported back failure, when trying keyB"); } return PM3_SUCCESS; } From d6548d1c80ac00ccf8fc284d4db73e046afc16ff Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 3 Sep 2020 12:31:31 +0200 Subject: [PATCH 0358/1047] use array instead --- armsrc/mifarecmd.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/armsrc/mifarecmd.c b/armsrc/mifarecmd.c index 6f84fd80a..972a97a40 100644 --- a/armsrc/mifarecmd.c +++ b/armsrc/mifarecmd.c @@ -1965,7 +1965,9 @@ int MifareECardLoad(uint8_t sectorcnt, uint8_t keytype) { for (uint8_t blockNo = 0; blockNo < NumBlocksPerSector(sectorNo); blockNo++) { if (mifare_classic_readblock(pcs, cuid, FirstBlockOfSector(sectorNo) + blockNo, dataoutbuf)) { retval = PM3_EPARTIAL; - emlSetMem("\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", FirstBlockOfSector(sectorNo) + blockNo, 1); + + memset(dataoutbuf2, 0, sizeof(dataoutbuf2)); + emlSetMem(dataoutbuf2, FirstBlockOfSector(sectorNo) + blockNo, 1); if (DBGLEVEL > DBG_ERROR) Dbprintf("Error reading sector %2d block %2d", sectorNo, blockNo); continue; From ec877e04ea930ceed65b020b20c32db0e7117fde Mon Sep 17 00:00:00 2001 From: Ave Date: Thu, 3 Sep 2020 17:33:36 +0300 Subject: [PATCH 0359/1047] Add hf_aveul standalone mode --- armsrc/Standalone/Makefile.hal | 5 +- armsrc/Standalone/Makefile.inc | 4 ++ armsrc/Standalone/hf_aveul.c | 119 +++++++++++++++++++++++++++++++++ 3 files changed, 127 insertions(+), 1 deletion(-) create mode 100644 armsrc/Standalone/hf_aveul.c diff --git a/armsrc/Standalone/Makefile.hal b/armsrc/Standalone/Makefile.hal index bd66d538c..bab78be83 100644 --- a/armsrc/Standalone/Makefile.hal +++ b/armsrc/Standalone/Makefile.hal @@ -59,10 +59,13 @@ define KNOWN_STANDALONE_DEFINITIONS | HF_YOUNG | Mifare sniff/simulation | | | - Craig Young | +----------------------------------------------------------+ +| HF_AVEUL | Mifare ultralight read/simulation | +| | - Ave Ozkal | ++----------------------------------------------------------+ endef STANDALONE_MODES := LF_SKELETON LF_EM4100EMUL LF_EM4100RSWB LF_EM4100RWC LF_HIDBRUTE LF_ICEHID LF_PROXBRUTE LF_SAMYRUN -STANDALONE_MODES += HF_14ASNIFF HF_BOG HF_COLIN HF_ICECLASS HF_LEGIC HF_MATTYRUN HF_MSDSAL HF_YOUNG +STANDALONE_MODES += HF_14ASNIFF HF_BOG HF_COLIN HF_ICECLASS HF_LEGIC HF_MATTYRUN HF_MSDSAL HF_YOUNG HF_AVEUL STANDALONE_MODES_REQ_SMARTCARD := STANDALONE_MODES_REQ_FLASH := LF_ICEHID HF_14ASNIFF HF_BOG HF_COLIN HF_ICECLASS ifneq ($(filter $(STANDALONE),$(STANDALONE_MODES)),) diff --git a/armsrc/Standalone/Makefile.inc b/armsrc/Standalone/Makefile.inc index 131e26e79..d903b02f8 100644 --- a/armsrc/Standalone/Makefile.inc +++ b/armsrc/Standalone/Makefile.inc @@ -37,6 +37,10 @@ endif ifneq (,$(findstring WITH_STANDALONE_HF_14ASNIFF,$(APP_CFLAGS))) SRC_STANDALONE = hf_14asniff.c endif +# WITH_STANDALONE_HF_AVEUL +ifneq (,$(findstring WITH_STANDALONE_HF_AVEUL,$(APP_CFLAGS))) + SRC_STANDALONE = hf_aveul.c +endif # WITH_STANDALONE_LF_ICEHID ifneq (,$(findstring WITH_STANDALONE_LF_ICEHID,$(APP_CFLAGS))) SRC_STANDALONE = lf_icehid.c diff --git a/armsrc/Standalone/hf_aveul.c b/armsrc/Standalone/hf_aveul.c new file mode 100644 index 000000000..64d2b9f22 --- /dev/null +++ b/armsrc/Standalone/hf_aveul.c @@ -0,0 +1,119 @@ +//----------------------------------------------------------------------------- +// A. Ozkal, 2020 +// +// This code is licensed to you under the terms of the GNU GPL, version 2 or, +// at your option, any later version. See the LICENSE.txt file for the text of +// the license. +//----------------------------------------------------------------------------- +// main code for HF Mifare Ultralight read/simulation by Ave Ozkal +//----------------------------------------------------------------------------- + +/* Several parts of this code is based on code by Craig Young from HF_YOUNG */ + +#include "standalone.h" // standalone definitions +#include "proxmark3_arm.h" +#include "appmain.h" +#include "fpgaloader.h" +#include "util.h" +#include "dbprint.h" + +#include "ticks.h" // SpinDelay +#include "mifareutil.h" +#include "iso14443a.h" + +typedef struct { + uint8_t uid[10]; + uint8_t uidlen; + uint8_t atqa[2]; + uint8_t sak; +} PACKED card_clone_t; + +void ModInfo(void) { + DbpString(" HF Mifare Ultralight read/simulation by Ave Ozkal"); +} + +void RunMod(void) { + StandAloneMode(); + Dbprintf("[=] AveUL (MF Ultralight read/emul) started"); + FpgaDownloadAndGo(FPGA_BITSTREAM_HF); + + // the main loop for your standalone mode + for (;;) { + WDT_HIT(); + + // exit from RunMod, send a usbcommand. + if (data_available()) break; + + iso14a_card_select_t card; + + SpinDelay(500); + iso14443a_setup(FPGA_HF_ISO14443A_READER_MOD); + + // 0 = search, 1 = read, 2 = emul + int stage = 0; + + DbpString("Scanning..."); + for (;;) { + // Was our button held down or pressed? + int button_pressed = BUTTON_HELD(1000); + + if (button_pressed != BUTTON_NO_CLICK || data_available()) + break; + else if (stage == 0) { + if (!iso14443a_select_card(NULL, &card, NULL, true, 0, true)) { + continue; + } else { + if (card.sak == 0x00 && card.atqa[0] == 0x44 && card.atqa[1] == 0 && card.uidlen == 7) { + DbpString("Found ultralight with UID: "); + Dbhexdump(7, card.uid, 0); + stage = 1; + } + else { + DbpString("Found non-ultralight card, ignoring"); + } + } + } + else if (stage == 1) { + iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN); + iso14443a_select_card(NULL, NULL, NULL, true, 0, true); + int i; + bool read_successful = true; + Dbprintf("Contents:"); + + for (i = 0; i < 16; ++i) + { + uint8_t dataout[4] = {0x00}; + if (mifare_ultra_readblock(i, dataout)) { + // If there's an error reading, go back to stage 0 + read_successful = false; + break; + } + // TODO: I'm not 100% on why I need to do + 14. The bin->eml results have 14 blocks of almost all 0 at start. + // and the bins just don't, so I'll admit that I am a little confused, but it works, so I won't question it much. + emlSetMem_xt(dataout, 14 + i, 1, 4); + Dbhexdump(4, dataout, 0); + } + + if (read_successful) { + Dbprintf("Successfully loaded into emulator memory"); + stage = 2; + } else { + Dbprintf("Read failure, going back to stage 0."); + stage = 0; + } + } + else if (stage == 2) { + uint8_t flags = FLAG_7B_UID_IN_DATA; + + Dbprintf("Starting simulation, press pm3-button to stop and go back to scan"); + SimulateIso14443aTag(2, flags, card.uid); + + // Go back to stage 0 if user presses pm3-button + stage = 0; + } + } + } + + DbpString("[=] exiting"); + LEDsoff(); +} From 51360c4d1a3bc6676ebbed187bc8b5999d3df164 Mon Sep 17 00:00:00 2001 From: Ave Date: Thu, 3 Sep 2020 17:43:47 +0300 Subject: [PATCH 0360/1047] hf_aveul: Extend comments --- armsrc/Standalone/hf_aveul.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/armsrc/Standalone/hf_aveul.c b/armsrc/Standalone/hf_aveul.c index 64d2b9f22..49f9c6f6f 100644 --- a/armsrc/Standalone/hf_aveul.c +++ b/armsrc/Standalone/hf_aveul.c @@ -10,6 +10,10 @@ /* Several parts of this code is based on code by Craig Young from HF_YOUNG */ +/* This code does not account for: +- Cards with block counts other than 16 +- Cards with authentication (MFU EV1 etc) */ + #include "standalone.h" // standalone definitions #include "proxmark3_arm.h" #include "appmain.h" @@ -34,7 +38,7 @@ void ModInfo(void) { void RunMod(void) { StandAloneMode(); - Dbprintf("[=] AveUL (MF Ultralight read/emul) started"); + Dbprintf("AveUL (MF Ultralight read/emul) started"); FpgaDownloadAndGo(FPGA_BITSTREAM_HF); // the main loop for your standalone mode @@ -88,8 +92,8 @@ void RunMod(void) { read_successful = false; break; } - // TODO: I'm not 100% on why I need to do + 14. The bin->eml results have 14 blocks of almost all 0 at start. - // and the bins just don't, so I'll admit that I am a little confused, but it works, so I won't question it much. + // We're skipping 14 blocks (56 bytes) here, as that "[...] has version/signature/counter data here" according to comments on dumptoemul-mfu + // When converting a bin, it's almost all 0 other than one 0x0F byte, and functionality seems to be unaffected if that byte is set to 0x00. emlSetMem_xt(dataout, 14 + i, 1, 4); Dbhexdump(4, dataout, 0); } @@ -114,6 +118,6 @@ void RunMod(void) { } } - DbpString("[=] exiting"); + DbpString("exiting"); LEDsoff(); } From c4e01ce81ebc28fa39c99efd0a193e46b35c6715 Mon Sep 17 00:00:00 2001 From: Ave Date: Thu, 3 Sep 2020 18:29:18 +0300 Subject: [PATCH 0361/1047] hf_aveul: Use defines to make the code easier to configure for other card types --- armsrc/Standalone/hf_aveul.c | 50 +++++++++++++++++++++--------------- 1 file changed, 29 insertions(+), 21 deletions(-) diff --git a/armsrc/Standalone/hf_aveul.c b/armsrc/Standalone/hf_aveul.c index 49f9c6f6f..3c3388fb2 100644 --- a/armsrc/Standalone/hf_aveul.c +++ b/armsrc/Standalone/hf_aveul.c @@ -10,9 +10,9 @@ /* Several parts of this code is based on code by Craig Young from HF_YOUNG */ -/* This code does not account for: -- Cards with block counts other than 16 -- Cards with authentication (MFU EV1 etc) */ +/* This code does not: +- Account for cards with authentication (MFU EV1 etc) +- Determine if cards have block count that's not the same as the BLOCKS def */ #include "standalone.h" // standalone definitions #include "proxmark3_arm.h" @@ -25,6 +25,15 @@ #include "mifareutil.h" #include "iso14443a.h" +#define BLOCKS 16 +#define SAK 0x00 +#define ATQA0 0x44 +#define ATQA1 0x00 + +#define STATE_SEARCH 0 +#define STATE_READ 1 +#define STATE_EMUL 2 + typedef struct { uint8_t uid[10]; uint8_t uidlen; @@ -54,7 +63,7 @@ void RunMod(void) { iso14443a_setup(FPGA_HF_ISO14443A_READER_MOD); // 0 = search, 1 = read, 2 = emul - int stage = 0; + int state = STATE_SEARCH; DbpString("Scanning..."); for (;;) { @@ -63,32 +72,31 @@ void RunMod(void) { if (button_pressed != BUTTON_NO_CLICK || data_available()) break; - else if (stage == 0) { + else if (state == STATE_SEARCH) { if (!iso14443a_select_card(NULL, &card, NULL, true, 0, true)) { continue; } else { - if (card.sak == 0x00 && card.atqa[0] == 0x44 && card.atqa[1] == 0 && card.uidlen == 7) { + if (card.sak == SAK && card.atqa[0] == ATQA0 && card.atqa[1] == ATQA1 && card.uidlen == 7) { DbpString("Found ultralight with UID: "); - Dbhexdump(7, card.uid, 0); - stage = 1; + Dbhexdump(card.uidlen, card.uid, 0); + state = STATE_READ; } else { - DbpString("Found non-ultralight card, ignoring"); + DbpString("Found non-ultralight card, ignoring."); } } } - else if (stage == 1) { + else if (state == STATE_READ) { iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN); iso14443a_select_card(NULL, NULL, NULL, true, 0, true); - int i; bool read_successful = true; Dbprintf("Contents:"); - for (i = 0; i < 16; ++i) + for (int i = 0; i < BLOCKS; i++) { uint8_t dataout[4] = {0x00}; if (mifare_ultra_readblock(i, dataout)) { - // If there's an error reading, go back to stage 0 + // If there's an error reading, go back to search state read_successful = false; break; } @@ -99,21 +107,21 @@ void RunMod(void) { } if (read_successful) { - Dbprintf("Successfully loaded into emulator memory"); - stage = 2; + Dbprintf("Successfully loaded into emulator memory..."); + state = STATE_EMUL; } else { - Dbprintf("Read failure, going back to stage 0."); - stage = 0; + Dbprintf("Read failure, going back to search state."); + state = STATE_SEARCH; } } - else if (stage == 2) { + else if (state == 2) { uint8_t flags = FLAG_7B_UID_IN_DATA; - Dbprintf("Starting simulation, press pm3-button to stop and go back to scan"); + Dbprintf("Starting simulation, press pm3-button to stop and go back to search state."); SimulateIso14443aTag(2, flags, card.uid); - // Go back to stage 0 if user presses pm3-button - stage = 0; + // Go back to search state if user presses pm3-button + state = STATE_SEARCH; } } } From 6c92b9d1ed2d332ab56f4d2b6a28b0f205cab0c2 Mon Sep 17 00:00:00 2001 From: Ave Date: Thu, 3 Sep 2020 18:38:58 +0300 Subject: [PATCH 0362/1047] hf_aveful: rename from hf_aveul to hf_aveful --- armsrc/Standalone/Makefile.hal | 4 ++-- armsrc/Standalone/Makefile.inc | 6 +++--- armsrc/Standalone/{hf_aveul.c => hf_aveful.c} | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) rename armsrc/Standalone/{hf_aveul.c => hf_aveful.c} (98%) diff --git a/armsrc/Standalone/Makefile.hal b/armsrc/Standalone/Makefile.hal index bab78be83..1c3bfb02a 100644 --- a/armsrc/Standalone/Makefile.hal +++ b/armsrc/Standalone/Makefile.hal @@ -59,13 +59,13 @@ define KNOWN_STANDALONE_DEFINITIONS | HF_YOUNG | Mifare sniff/simulation | | | - Craig Young | +----------------------------------------------------------+ -| HF_AVEUL | Mifare ultralight read/simulation | +| HF_AVEFUL | Mifare ultralight read/simulation | | | - Ave Ozkal | +----------------------------------------------------------+ endef STANDALONE_MODES := LF_SKELETON LF_EM4100EMUL LF_EM4100RSWB LF_EM4100RWC LF_HIDBRUTE LF_ICEHID LF_PROXBRUTE LF_SAMYRUN -STANDALONE_MODES += HF_14ASNIFF HF_BOG HF_COLIN HF_ICECLASS HF_LEGIC HF_MATTYRUN HF_MSDSAL HF_YOUNG HF_AVEUL +STANDALONE_MODES += HF_14ASNIFF HF_BOG HF_COLIN HF_ICECLASS HF_LEGIC HF_MATTYRUN HF_MSDSAL HF_YOUNG HF_AVEFUL STANDALONE_MODES_REQ_SMARTCARD := STANDALONE_MODES_REQ_FLASH := LF_ICEHID HF_14ASNIFF HF_BOG HF_COLIN HF_ICECLASS ifneq ($(filter $(STANDALONE),$(STANDALONE_MODES)),) diff --git a/armsrc/Standalone/Makefile.inc b/armsrc/Standalone/Makefile.inc index d903b02f8..c5730965b 100644 --- a/armsrc/Standalone/Makefile.inc +++ b/armsrc/Standalone/Makefile.inc @@ -37,9 +37,9 @@ endif ifneq (,$(findstring WITH_STANDALONE_HF_14ASNIFF,$(APP_CFLAGS))) SRC_STANDALONE = hf_14asniff.c endif -# WITH_STANDALONE_HF_AVEUL -ifneq (,$(findstring WITH_STANDALONE_HF_AVEUL,$(APP_CFLAGS))) - SRC_STANDALONE = hf_aveul.c +# WITH_STANDALONE_HF_AVEFUL +ifneq (,$(findstring WITH_STANDALONE_HF_AVEFUL,$(APP_CFLAGS))) + SRC_STANDALONE = hf_aveful.c endif # WITH_STANDALONE_LF_ICEHID ifneq (,$(findstring WITH_STANDALONE_LF_ICEHID,$(APP_CFLAGS))) diff --git a/armsrc/Standalone/hf_aveul.c b/armsrc/Standalone/hf_aveful.c similarity index 98% rename from armsrc/Standalone/hf_aveul.c rename to armsrc/Standalone/hf_aveful.c index 3c3388fb2..cc2cffbf6 100644 --- a/armsrc/Standalone/hf_aveul.c +++ b/armsrc/Standalone/hf_aveful.c @@ -47,7 +47,7 @@ void ModInfo(void) { void RunMod(void) { StandAloneMode(); - Dbprintf("AveUL (MF Ultralight read/emul) started"); + Dbprintf("AveFUL (MF Ultralight read/emul) started"); FpgaDownloadAndGo(FPGA_BITSTREAM_HF); // the main loop for your standalone mode From 2687d9f3ecbff0e7683a410c2ab7b1abece93af3 Mon Sep 17 00:00:00 2001 From: Ave Date: Thu, 3 Sep 2020 18:44:30 +0300 Subject: [PATCH 0363/1047] hf_aveful: last minute code formatting --- armsrc/Standalone/hf_aveful.c | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/armsrc/Standalone/hf_aveful.c b/armsrc/Standalone/hf_aveful.c index cc2cffbf6..a619459f5 100644 --- a/armsrc/Standalone/hf_aveful.c +++ b/armsrc/Standalone/hf_aveful.c @@ -8,11 +8,11 @@ // main code for HF Mifare Ultralight read/simulation by Ave Ozkal //----------------------------------------------------------------------------- -/* Several parts of this code is based on code by Craig Young from HF_YOUNG */ +// Several parts of this code is based on code by Craig Young from HF_YOUNG -/* This code does not: -- Account for cards with authentication (MFU EV1 etc) -- Determine if cards have block count that's not the same as the BLOCKS def */ +// This code does not: +// - Account for cards with authentication (MFU EV1 etc) +// - Determine if cards have block count that's not the same as the BLOCKS def #include "standalone.h" // standalone definitions #include "proxmark3_arm.h" @@ -80,20 +80,17 @@ void RunMod(void) { DbpString("Found ultralight with UID: "); Dbhexdump(card.uidlen, card.uid, 0); state = STATE_READ; - } - else { + } else { DbpString("Found non-ultralight card, ignoring."); } } - } - else if (state == STATE_READ) { + } else if (state == STATE_READ) { iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN); iso14443a_select_card(NULL, NULL, NULL, true, 0, true); bool read_successful = true; Dbprintf("Contents:"); - for (int i = 0; i < BLOCKS; i++) - { + for (int i = 0; i < BLOCKS; i++) { uint8_t dataout[4] = {0x00}; if (mifare_ultra_readblock(i, dataout)) { // If there's an error reading, go back to search state @@ -113,8 +110,7 @@ void RunMod(void) { Dbprintf("Read failure, going back to search state."); state = STATE_SEARCH; } - } - else if (state == 2) { + } else if (state == 2) { uint8_t flags = FLAG_7B_UID_IN_DATA; Dbprintf("Starting simulation, press pm3-button to stop and go back to search state."); From befb5f1c01feae7f7e0cd8b2f1468f5cab4e37cd Mon Sep 17 00:00:00 2001 From: Ave Date: Fri, 4 Sep 2020 00:13:41 +0300 Subject: [PATCH 0364/1047] hf_aveful: Move Makefile.hal entry to be alphabetic --- armsrc/Standalone/Makefile.hal | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/armsrc/Standalone/Makefile.hal b/armsrc/Standalone/Makefile.hal index 1c3bfb02a..eef4ecf6f 100644 --- a/armsrc/Standalone/Makefile.hal +++ b/armsrc/Standalone/Makefile.hal @@ -38,6 +38,9 @@ define KNOWN_STANDALONE_DEFINITIONS | HF_14ASNIFF | 14a sniff to flashmem | | (RDV4 only) | | +----------------------------------------------------------+ +| HF_AVEFUL | Mifare ultralight read/simulation | +| | - Ave Ozkal | ++----------------------------------------------------------+ | HF_BOG | 14a sniff with ULC/ULEV1/NTAG auth | | (RDV4 only) | storing in flashmem - Bogito | +----------------------------------------------------------+ @@ -59,13 +62,10 @@ define KNOWN_STANDALONE_DEFINITIONS | HF_YOUNG | Mifare sniff/simulation | | | - Craig Young | +----------------------------------------------------------+ -| HF_AVEFUL | Mifare ultralight read/simulation | -| | - Ave Ozkal | -+----------------------------------------------------------+ endef STANDALONE_MODES := LF_SKELETON LF_EM4100EMUL LF_EM4100RSWB LF_EM4100RWC LF_HIDBRUTE LF_ICEHID LF_PROXBRUTE LF_SAMYRUN -STANDALONE_MODES += HF_14ASNIFF HF_BOG HF_COLIN HF_ICECLASS HF_LEGIC HF_MATTYRUN HF_MSDSAL HF_YOUNG HF_AVEFUL +STANDALONE_MODES += HF_14ASNIFF HF_AVEFUL HF_BOG HF_COLIN HF_ICECLASS HF_LEGIC HF_MATTYRUN HF_MSDSAL HF_YOUNG STANDALONE_MODES_REQ_SMARTCARD := STANDALONE_MODES_REQ_FLASH := LF_ICEHID HF_14ASNIFF HF_BOG HF_COLIN HF_ICECLASS ifneq ($(filter $(STANDALONE),$(STANDALONE_MODES)),) From c46d22d38fad7c036a89acdb79cf0111596ae592 Mon Sep 17 00:00:00 2001 From: Winds Date: Thu, 23 Apr 2020 20:26:28 +0200 Subject: [PATCH 0365/1047] Moving mfc_gen3_writer.lua to a branch till it becomes useable --- client/luascripts/mfc_gen3_writer.lua | 390 ++++++++++++++++++++++++++ 1 file changed, 390 insertions(+) create mode 100644 client/luascripts/mfc_gen3_writer.lua diff --git a/client/luascripts/mfc_gen3_writer.lua b/client/luascripts/mfc_gen3_writer.lua new file mode 100644 index 000000000..5222c0d39 --- /dev/null +++ b/client/luascripts/mfc_gen3_writer.lua @@ -0,0 +1,390 @@ +local utils = require('utils') +local getopt = require('getopt') +local cmds = require('commands') +local read14a = require('read14a') +-- +--- +------------------------------- +-- Notes +------------------------------- +--- +-- +--[[ +---Suggestions of improvement: +--- Add support another types of dumps: BIN, JSON +--- Maybe it will be not only as `mfc_gen3_writer`, like a universal dump manager. +--- Add undependence from the operation system. At the moment code not working in Linux. +--- Add more chinesse backdoors RAW commands for UID changing (find RAW for the 4 byte familiar chinese card, from native it soft: http://bit.ly/39VIDsU) +--- Hide system messages when you writing a dumps, replace it to some of like [#####----------] 40% + +-- iceman notes: +-- doesn't take consideration filepaths for dump files. +-- doesn't allow A keys for authenticating when writing +-- doesn't verify that card is magic gen3. +-- doesn't take several versions of same dump ( -1, -2, -3 ) styles. +--]] +-- +--- +------------------------------- +-- Script hat +------------------------------- +--- +-- +copyright = '' +author = 'Winds' +version = 'v1.0.0' +desc = [[ + The script gives you a easy way to write your *.eml dumps onto normal MFC and magic Gen3 cards. + + Works with both 4 and 7 bytes NXP MIFARE Classic 1K cards. + The script also has the possibility to change UID and permanent lock uid on magic Gen3 cards. + + It supports the following functionality. + + 1. Write it to the same of current card UID. + 2. Write it to magic Gen3 card. + 3. Change uid to match dump on magic Gen3 card. + 4. Permanent lock UID on magic Gen3 card. + 5. Erase all data at the card and set the FF FF FF FF FF FF keys, and Access Conditions to 78778800. + + Script works in a wizard styled way. +]] +example = [[ + 1. script run mfc_gen3_writer +]] +usage = [[ + Select your *.eml dump from list to write to the card. +]] +-- +--- +------------------------------- +-- Global variables +------------------------------- +--- +-- +local DEBUG = false -- the debug flag +local files = {} -- Array for eml files +local b_keys = {} -- Array for B keys +local eml = {} -- Array for data in block 32 +local num_dumps = 0 -- num of found eml dump files +local tab = string.rep('-', 64) +local empty = string.rep('0', 32) -- Writing blocks +local default_key = 'FFFFFFFFFFFF' -- Writing blocks +local default_key_type = '01' --KeyA: 00, KeyB: 01 +local default_key_blk = 'FFFFFFFFFFFF78778800FFFFFFFFFFFF' -- Writing blocks +local piswords_uid_lock = 'hf 14a raw -s -c -t 2000 90fd111100' +local piswords_uid_change = 'hf 14a raw -s -c -t 2000 90f0cccc10' +local cmd_wrbl = 'hf mf wrbl %d B %s %s' -- Writing blocks +-- +--- +------------------------------- +-- A debug printout-function +------------------------------- +--- +-- +local function dbg(args) + if not DEBUG then return end + if type(args) == 'table' then + local i = 1 + while args[i] do + dbg(args[i]) + i = i+1 + end + else + print('###', args) + end +end +-- +--- +------------------------------- +-- This is only meant to be used when errors occur +------------------------------- +--- +-- +local function oops(err) + print('ERROR:', err) + core.clearCommandBuffer() + return nil, err +end +-- +--- +------------------------------- +-- Usage help +------------------------------- +--- +-- +local function help() + print(copyright) + print(author) + print(version) + print(desc) + print('Example usage') + print(example) + print(usage) +end +-- +--- +------------------------------- +-- GetUID +------------------------------- +--- +-- +local function GetUID() + return read14a.read(true, true).uid +end +-- +local function dropfield() + read14a.disconnect() + core.clearCommandBuffer() +end +-- +--- +------------------------------- +-- Wait for tag (MFC) +------------------------------- +--- +-- +local function wait() + read14a.waitFor14443a() +end +-- +--- +------------------------------- +-- Return key code 00/01 to string +------------------------------- +--- +-- +local function KeyAB() + if default_key_type == '00' then + return 'KeyA' + else + return 'KeyB' + end +end +-- +--- +------------------------------- +-- Check response from Proxmark +------------------------------- +--- +-- +local function getblockdata(response) + if response.Status == 0 then + return true + else + return false + end +end +-- +--- +------------------------------- +-- Check 0xFFFFFFFFFFFF key for tag (MFC) +------------------------------- +--- +-- +local function checkkey() + local status = 0 + for i = 1, #eml do + cmd = Command:newNG{cmd = cmds.CMD_HF_MIFARE_READBL, data = ('%02x%02x%s'):format((i-1), default_key_type, default_key)} + if (getblockdata(cmd:sendNG(false)) == true) then + status = status + 1 + print(('%s %02s %s %s %s'):format(' ', (i-1), KeyAB(), default_key, 'OK')) + else + break + end + end + if status == #eml then + return true + end +end +-- +--- +------------------------------- +-- Check Pissword backdor +------------------------------- +--- +-- +local function checkmagic() + --Have no RAW ISO14443A command in appmain.c + cmd = Command:newNG{cmd = cmds.CMD_HF_ISO14443A_READER, data = piswords_uid_change .. GetUID()} -- sample check to pull the same UID to card and check response + if (getblockdata(cmd:sendNG(false)) == true) then + print('Magic') + else + print('Not magic') + end +end +-- +--- +------------------------------- +-- Main function +------------------------------- +--- +-- +local function main(args) + -- + --- + ------------------------------- + -- Arguments for script + ------------------------------- + --- + -- + for o, a in getopt.getopt(args, 'hd') do + if o == 'h' then return help() end + if o == 'd' then DEBUG = true end + end + -- + wait() + print(tab) + -- + --- + ------------------------------- + -- Detect 7/4 byte card + ------------------------------- + --- + -- + if string.len(GetUID()) == 14 then + eml_file_uid_start = 18 -- For windows with '---------- ' prefix + eml_file_uid_end = 31 + eml_file_lengt = 40 + else + eml_file_uid_start = 18 -- For windows with '---------- ' prefix + eml_file_uid_end = 25 + eml_file_lengt = 34 + end + dropfield() + -- + --- + ------------------------------- + -- List all EML files in /client + ------------------------------- + --- + -- + local dumpEML = 'find "." "*dump.eml"' -- Fixed for windows + local p = assert(io.popen(dumpEML)) + for _ in p:lines() do + -- The length of eml file + if string.len(_) == eml_file_lengt then + num_dumps = num_dumps + 1 + -- cut UID from eml file + files[num_dumps] = string.sub(_, eml_file_uid_start, eml_file_uid_end) -- cut numeretic UID + print(' '..num_dumps..' | '..files[num_dumps]) + end + end + -- + p.close() + -- + if num_dumps == 0 then return oops("Didn't find any dump files") end + -- + print(tab) + print(' Your card has UID '..GetUID()) + print('') + print(' Select which dump to write (1 until '..num_dumps..')') + print(tab) + io.write(' --> ') + -- + local uid_no = tonumber(io.read()) + print(tab) + print(' You have been selected card dump No ' .. uid_no .. ', with UID: ' .. files[uid_no] .. '. Your card UID: ' .. GetUID()) + -- + -- + --- + ------------------------------- + -- Load eml file + ------------------------------- + --- + -- + local dumpfile = assert(io.open('./hf-mf-' .. files[uid_no] .. '-dump.eml', 'r')) + for _ in dumpfile:lines() do table.insert(eml, _); end + dumpfile.close() + -- + --- + ------------------------------- + -- Extract B key from EML file + ------------------------------- + --- + -- + local b = 0 + for i = 1, #eml do + if (i % 4 == 0) then + repeat + b = b + 1 + -- Cut key from block + b_keys[b] = string.sub(eml[i], (#eml[i] - 11), #eml[i]) + until b % 4 == 0 + end + end + print(tab) + dbg(b_keys) + dbg(eml) + -- + --- + ------------------------------- + -- Change UID on certain version of magic Gen3 card. + ------------------------------- + --- + -- + if (utils.confirm(' Change UID ?') == true) then + wait() + core.console(piswords_uid_change .. tostring(eml[1])) + print(tab) + print(' The new card UID : ' .. GetUID()) + end + print(tab) + --checkmagic() + -- + --- + ------------------------------- + -- Lock UID + ------------------------------- + --- + -- + if (utils.confirm(' Permanent lock UID ? (card can never change uid again) ') == true) then + wait() + core.console(piswords_uid_lock) + end + -- + print(tab) + print(' Going to check the all ' .. KeyAB() .. ' by ' .. default_key) + print(tab) + -- + if checkkey() == true then + print(tab) + if (utils.confirm(' Card is Empty. Write selected dump to card ?') == true) then + for i = 1, #eml do + core.console(string.format(cmd_wrbl, (i-1), default_key, eml[i])) + end + end + else + print(tab) + if (utils.confirm(' Delete ALL data and write all keys to 0x' .. default_key .. ' ?') == true) then + wait() + for i = 1, #eml do + if (i % 4 == 0) then + core.console(string.format(cmd_wrbl, (i-1), b_keys[i], default_key_blk)) + else + core.console(string.format(cmd_wrbl, (i-1), b_keys[i], empty)) + end + end + else + print(tab) + if (utils.confirm(' Write selected dump to card ?') == true) then + print(tab) + wait() + for i = 1, #eml do + core.console(string.format(cmd_wrbl, (i-1), b_keys[i], eml[i])) + end + end + end + end + dropfield() + print(tab) + print('You are welcome') +end +-- +--- +------------------------------- +-- Start Main function +------------------------------- +--- +-- +main(args) From ea6dbec7502d15d4975e1a8d0233104ba923beb0 Mon Sep 17 00:00:00 2001 From: Winds Date: Thu, 3 Sep 2020 22:55:35 +0200 Subject: [PATCH 0366/1047] Now it's working both with WIN and UNX --- client/luascripts/mfc_gen3_writer.lua | 105 ++++++++++++++++++-------- 1 file changed, 73 insertions(+), 32 deletions(-) diff --git a/client/luascripts/mfc_gen3_writer.lua b/client/luascripts/mfc_gen3_writer.lua index 5222c0d39..22eae4387 100644 --- a/client/luascripts/mfc_gen3_writer.lua +++ b/client/luascripts/mfc_gen3_writer.lua @@ -14,7 +14,6 @@ local read14a = require('read14a') --- Add support another types of dumps: BIN, JSON --- Maybe it will be not only as `mfc_gen3_writer`, like a universal dump manager. --- Add undependence from the operation system. At the moment code not working in Linux. ---- Add more chinesse backdoors RAW commands for UID changing (find RAW for the 4 byte familiar chinese card, from native it soft: http://bit.ly/39VIDsU) --- Hide system messages when you writing a dumps, replace it to some of like [#####----------] 40% -- iceman notes: @@ -30,13 +29,13 @@ local read14a = require('read14a') ------------------------------- --- -- -copyright = '' +copyright = 'RRG Team' author = 'Winds' version = 'v1.0.0' desc = [[ - The script gives you a easy way to write your *.eml dumps onto normal MFC and magic Gen3 cards. + This script gives you an easy way to write your *.eml dumps into normal MIFARE Classic and Magic Gen3 cards. - Works with both 4 and 7 bytes NXP MIFARE Classic 1K cards. + Works with both 4 and 7 bytes NXP MIFARE Classic 1K cards. The script also has the possibility to change UID and permanent lock uid on magic Gen3 cards. It supports the following functionality. @@ -48,12 +47,19 @@ desc = [[ 5. Erase all data at the card and set the FF FF FF FF FF FF keys, and Access Conditions to 78778800. Script works in a wizard styled way. + + Author Youtube channel: https://yev.ooo/ + + Many Thanks, + Best Regards ]] example = [[ 1. script run mfc_gen3_writer ]] usage = [[ + Give script to know if you uses an Windows OS Select your *.eml dump from list to write to the card. + Follow the wizard. ]] -- --- @@ -63,6 +69,7 @@ usage = [[ --- -- local DEBUG = false -- the debug flag +local dumpEML -- Find all *.EML files local files = {} -- Array for eml files local b_keys = {} -- Array for B keys local eml = {} -- Array for data in block 32 @@ -71,10 +78,11 @@ local tab = string.rep('-', 64) local empty = string.rep('0', 32) -- Writing blocks local default_key = 'FFFFFFFFFFFF' -- Writing blocks local default_key_type = '01' --KeyA: 00, KeyB: 01 -local default_key_blk = 'FFFFFFFFFFFF78778800FFFFFFFFFFFF' -- Writing blocks +local default_key_blk = 'FFFFFFFFFFFF7C378800FFFFFFFFFFFF' -- Writing blocks local piswords_uid_lock = 'hf 14a raw -s -c -t 2000 90fd111100' local piswords_uid_change = 'hf 14a raw -s -c -t 2000 90f0cccc10' -local cmd_wrbl = 'hf mf wrbl %d B %s %s' -- Writing blocks +local cmd_wrbl_a = 'hf mf wrbl %d A %s %s' -- Writing blocks by A key +local cmd_wrbl_b = 'hf mf wrbl %d B %s %s' -- Writing blocks by B key -- --- ------------------------------- @@ -155,11 +163,11 @@ end --- -- local function KeyAB() - if default_key_type == '00' then + if default_key_type == '00' then return 'KeyA' - else + else return 'KeyB' - end + end end -- --- @@ -200,17 +208,15 @@ end -- --- ------------------------------- --- Check Pissword backdor +-- Check user input A or B for blank tag (MFC) ------------------------------- --- -- -local function checkmagic() - --Have no RAW ISO14443A command in appmain.c - cmd = Command:newNG{cmd = cmds.CMD_HF_ISO14443A_READER, data = piswords_uid_change .. GetUID()} -- sample check to pull the same UID to card and check response - if (getblockdata(cmd:sendNG(false)) == true) then - print('Magic') - else - print('Not magic') +local function check_user_key(user_key_type) + if user_key_type == 'A' then + return cmd_wrbl_a + elseif user_key_type == 'B' then + return cmd_wrbl_b end end -- @@ -242,15 +248,30 @@ local function main(args) ------------------------------- --- -- - if string.len(GetUID()) == 14 then - eml_file_uid_start = 18 -- For windows with '---------- ' prefix - eml_file_uid_end = 31 - eml_file_lengt = 40 + if (utils.confirm(' Are you use a Windwos OS ?') == true) then + dumpEML = 'find "." "*dump.eml"' + if string.len(GetUID()) == 14 then + eml_file_uid_start = 18 + eml_file_uid_end = 31 + eml_file_lengt = 40 + else + eml_file_uid_start = 18 + eml_file_uid_end = 25 + eml_file_lengt = 34 + end else - eml_file_uid_start = 18 -- For windows with '---------- ' prefix - eml_file_uid_end = 25 - eml_file_lengt = 34 + dumpEML = "find '.' -iname '*dump.eml' -type f" + if string.len(GetUID()) == 14 then + eml_file_uid_start = 9 + eml_file_uid_end = 22 + eml_file_lengt = 31 + else + eml_file_uid_start = 9 + eml_file_uid_end = 16 + eml_file_lengt = 25 + end end + print(tab) dropfield() -- --- @@ -259,7 +280,6 @@ local function main(args) ------------------------------- --- -- - local dumpEML = 'find "." "*dump.eml"' -- Fixed for windows local p = assert(io.popen(dumpEML)) for _ in p:lines() do -- The length of eml file @@ -293,7 +313,7 @@ local function main(args) ------------------------------- --- -- - local dumpfile = assert(io.open('./hf-mf-' .. files[uid_no] .. '-dump.eml', 'r')) + local dumpfile = assert(io.open('hf-mf-' .. files[uid_no] .. '-dump.eml', 'r')) for _ in dumpfile:lines() do table.insert(eml, _); end dumpfile.close() -- @@ -330,7 +350,6 @@ local function main(args) print(' The new card UID : ' .. GetUID()) end print(tab) - --checkmagic() -- --- ------------------------------- @@ -351,18 +370,28 @@ local function main(args) print(tab) if (utils.confirm(' Card is Empty. Write selected dump to card ?') == true) then for i = 1, #eml do - core.console(string.format(cmd_wrbl, (i-1), default_key, eml[i])) + core.console(string.format(cmd_wrbl_b, (i-1), default_key, eml[i])) end end else print(tab) - if (utils.confirm(' Delete ALL data and write all keys to 0x' .. default_key .. ' ?') == true) then + if (utils.confirm(' It this is a new blank card ? Do you wishing to change Access Conditions to using B key ' .. default_key .. ' as main ?') == true) then + print(tab) + print(' With one key type we will use, A or B ?') + print(tab) + io.write(' --> ') + local user_key_type = tostring(io.read()) + print(tab) + print(' Enter 12 HEX chars of the key for access to card. By default ' .. default_key .. '.') + print(tab) + io.write(' --> ') + local user_key_input = tostring(io.read()) wait() for i = 1, #eml do if (i % 4 == 0) then - core.console(string.format(cmd_wrbl, (i-1), b_keys[i], default_key_blk)) + core.console(string.format(check_user_key(user_key_type), (i-1), user_key_input, default_key_blk)) else - core.console(string.format(cmd_wrbl, (i-1), b_keys[i], empty)) + core.console(string.format(check_user_key(user_key_type), (i-1), user_key_input, empty)) end end else @@ -371,7 +400,19 @@ local function main(args) print(tab) wait() for i = 1, #eml do - core.console(string.format(cmd_wrbl, (i-1), b_keys[i], eml[i])) + core.console(string.format(cmd_wrbl_b, (i-1), b_keys[i], eml[i])) + end + else + print(tab) + if (utils.confirm(' Delete ALL data and write all keys to 0x' .. default_key .. ' ?') == true) then + wait() + for i = 1, #eml do + if (i % 4 == 0) then + core.console(string.format(cmd_wrbl_b, (i-1), b_keys[i], default_key_blk)) + else + core.console(string.format(cmd_wrbl_b, (i-1), b_keys[i], empty)) + end + end end end end From 9814aa56e115a66e6a1a7b640f75569bf13ded62 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Sat, 5 Sep 2020 00:12:38 +0200 Subject: [PATCH 0367/1047] Switch to 134kHz for --- client/src/cmdlffdx.c | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/client/src/cmdlffdx.c b/client/src/cmdlffdx.c index 868a567c5..496dad691 100644 --- a/client/src/cmdlffdx.c +++ b/client/src/cmdlffdx.c @@ -292,7 +292,36 @@ static int CmdFdxDemod(const char *Cmd) { } static int CmdFdxRead(const char *Cmd) { - lf_read(false, 10000); + sample_config config; + memset(&config, 0, sizeof(sample_config)); + int retval = lf_getconfig(&config); + if (retval != PM3_SUCCESS) { + PrintAndLogEx(ERR, "failed to get current device LF config"); + return retval; + } + int16_t tmp_div = config.divisor; + if (tmp_div != LF_DIVISOR_134) { + config.divisor = LF_DIVISOR_134; + config.verbose = false; + retval = lf_config(&config); + if (retval != PM3_SUCCESS) { + PrintAndLogEx(ERR, "failed to change LF configuration"); + return retval; + } + } + retval = lf_read(false, 10000); + if (retval != PM3_SUCCESS) { + PrintAndLogEx(ERR, "failed to get LF read from device"); + return retval; + } + if (tmp_div != LF_DIVISOR_134) { + config.divisor = tmp_div; + retval = lf_config(&config); + if (retval != PM3_SUCCESS) { + PrintAndLogEx(ERR, "failed to restore LF configuration"); + return retval; + } + } return CmdFdxDemod(Cmd); } @@ -393,7 +422,7 @@ static int CmdFdxSim(const char *Cmd) { static command_t CommandTable[] = { {"help", CmdHelp, AlwaysAvailable, "this help"}, {"demod", CmdFdxDemod, AlwaysAvailable, "demodulate a FDX-B ISO11784/85 tag from the GraphBuffer"}, - {"read", CmdFdxRead, IfPm3Lf, "attempt to read and extract tag data"}, + {"read", CmdFdxRead, IfPm3Lf, "attempt to read at 134kHz and extract tag data"}, {"clone", CmdFdxClone, IfPm3Lf, "clone animal ID tag to T55x7 or Q5/T5555"}, {"sim", CmdFdxSim, IfPm3Lf, "simulate Animal ID tag"}, {NULL, NULL, NULL, NULL} From 6aa65b735b3767e4d824f12477f0c93efaed8976 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sat, 5 Sep 2020 07:40:56 +0200 Subject: [PATCH 0368/1047] timeout in listening window EM4x50 --- armsrc/em4x50.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/armsrc/em4x50.c b/armsrc/em4x50.c index ab8df0d55..bcc646fcc 100644 --- a/armsrc/em4x50.c +++ b/armsrc/em4x50.c @@ -90,6 +90,7 @@ static em4x50_tag_t tag = { #define EM4X50_COMMAND_WRITE_PASSWORD 0x11 #define EM4X50_COMMAND_SELECTIVE_READ 0x0A +#define EM4X50_COMMAND_TIMEOUT 5000 #define FPGA_TIMER_0 0 int gHigh = 0; @@ -412,13 +413,13 @@ static void em4x50_send_word(const uint8_t bytes[4]) { em4x50_send_bit(0); } -static bool find_single_listen_window(void) { +static bool find_single_listen_window(int16_t timeout) { // find single listen window int cnt_pulses = 0; - while (cnt_pulses < EM4X50_T_WAITING_FOR_SNGLLIW) { + while (cnt_pulses < EM4X50_T_WAITING_FOR_SNGLLIW && timeout--) { // identification of listen window is done via evaluation of // pulse lengths @@ -440,7 +441,7 @@ static bool find_single_listen_window(void) { return false; } -static bool find_double_listen_window(bool bcommand) { +static bool find_double_listen_window(bool bcommand, int16_t timeout) { // find two successive listen windows that indicate the beginning of // data transmission @@ -450,7 +451,7 @@ static bool find_double_listen_window(bool bcommand) { int cnt_pulses = 0; - while (cnt_pulses < EM4X50_T_WAITING_FOR_DBLLIW) { + while (cnt_pulses < EM4X50_T_WAITING_FOR_DBLLIW && timeout--) { // identification of listen window is done via evaluation of // pulse lengths @@ -507,7 +508,7 @@ static bool find_em4x50_tag(void) { // function is used to check wether a tag on the proxmark is an // EM4x50 tag or not -> speed up "lf search" process - return (find_single_listen_window()); + return (find_single_listen_window(EM4X50_COMMAND_TIMEOUT)); } @@ -519,7 +520,7 @@ static bool request_receive_mode(void) { bool bcommand = true; - return find_double_listen_window(bcommand); + return find_double_listen_window(bcommand, EM4X50_COMMAND_TIMEOUT); } static bool check_ack(bool bliw) { @@ -725,7 +726,7 @@ static bool standard_read(int *now) { uint8_t bits[EM4X50_TAG_WORD] = {0}; // start with the identification of two succsessive listening windows - if (find_double_listen_window(false)) { + if (find_double_listen_window(false, EM4X50_COMMAND_TIMEOUT)) { // read and save words until following double listen window is detected while (get_word_from_bitstream(bits) == EM4X50_TAG_WORD) From 137517111fdd117043e353440a92688cdfd7a3e3 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sat, 5 Sep 2020 08:03:29 +0200 Subject: [PATCH 0369/1047] clear emulator mem before fillig it --- client/src/cmdhfmf.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/client/src/cmdhfmf.c b/client/src/cmdhfmf.c index 5e6b764f1..5e4af4015 100644 --- a/client/src/cmdhfmf.c +++ b/client/src/cmdhfmf.c @@ -2601,6 +2601,10 @@ all_found: PrintAndLogEx(ERR, "Failed to save keys to file"); } + // clear emulator mem + clearCommandBuffer(); + SendCommandNG(CMD_HF_MIFARE_EML_MEMCLR, NULL, 0); + PrintAndLogEx(SUCCESS, "transferring keys to simulator memory (Cmd Error: 04 can occur)"); for (current_sector_i = 0; current_sector_i < sectors_cnt; current_sector_i++) { From 65e6af8aef3d76e40fc738972bea0d49ad5e636e Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sat, 5 Sep 2020 08:04:46 +0200 Subject: [PATCH 0370/1047] dont set empty any longer --- armsrc/mifarecmd.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/armsrc/mifarecmd.c b/armsrc/mifarecmd.c index 972a97a40..0b5ab761c 100644 --- a/armsrc/mifarecmd.c +++ b/armsrc/mifarecmd.c @@ -1965,9 +1965,6 @@ int MifareECardLoad(uint8_t sectorcnt, uint8_t keytype) { for (uint8_t blockNo = 0; blockNo < NumBlocksPerSector(sectorNo); blockNo++) { if (mifare_classic_readblock(pcs, cuid, FirstBlockOfSector(sectorNo) + blockNo, dataoutbuf)) { retval = PM3_EPARTIAL; - - memset(dataoutbuf2, 0, sizeof(dataoutbuf2)); - emlSetMem(dataoutbuf2, FirstBlockOfSector(sectorNo) + blockNo, 1); if (DBGLEVEL > DBG_ERROR) Dbprintf("Error reading sector %2d block %2d", sectorNo, blockNo); continue; From fa532a0e1bbd15a4cfab7373001e8beae140c872 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sat, 5 Sep 2020 08:19:25 +0200 Subject: [PATCH 0371/1047] dont check KEYB if KEYA dumped it all --- client/src/cmdhfmf.c | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/client/src/cmdhfmf.c b/client/src/cmdhfmf.c index 5e4af4015..c51f3aa23 100644 --- a/client/src/cmdhfmf.c +++ b/client/src/cmdhfmf.c @@ -869,17 +869,18 @@ static int FastDumpWithEcFill(uint8_t numsectors) { int res = WaitForResponseTimeout(CMD_HF_MIFARE_EML_LOAD, &resp, 2000); if (res != PM3_SUCCESS) { - PrintAndLogEx(INFO, "fast dump reported back failure, when trying keyA"); - } + PrintAndLogEx(INFO, "fast dump reported back failure w KEY A, swapping to KEY B"); + + // ecfill key B + payload.keytype = 1; - // ecfill key B - payload.keytype = 1; - - clearCommandBuffer(); - SendCommandNG(CMD_HF_MIFARE_EML_LOAD, (uint8_t *)&payload, sizeof(payload)); - res = WaitForResponseTimeout(CMD_HF_MIFARE_EML_LOAD, &resp, 2000); - if (res != PM3_SUCCESS) { - PrintAndLogEx(INFO, "fast dump reported back failure, when trying keyB"); + clearCommandBuffer(); + SendCommandNG(CMD_HF_MIFARE_EML_LOAD, (uint8_t *)&payload, sizeof(payload)); + res = WaitForResponseTimeout(CMD_HF_MIFARE_EML_LOAD, &resp, 2000); + if (res != PM3_SUCCESS) { + PrintAndLogEx(INFO, "fast dump reported back failure w KEY B"); + PrintAndLogEx(INFO, "Dump file is " _RED_("PARTIAL") "complete"); + } } return PM3_SUCCESS; } From 643a53c592b48feb16f67c3b3f6fe52d6a4e1fbb Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sat, 5 Sep 2020 08:32:26 +0200 Subject: [PATCH 0372/1047] skip all zeros response that "hf mf sim" might answer.. (wrongly) --- armsrc/mifarecmd.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/armsrc/mifarecmd.c b/armsrc/mifarecmd.c index 0b5ab761c..ba1f6201a 100644 --- a/armsrc/mifarecmd.c +++ b/armsrc/mifarecmd.c @@ -1970,6 +1970,10 @@ int MifareECardLoad(uint8_t sectorcnt, uint8_t keytype) { continue; } + if (memcmp(dataoutbuf, "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 16) == 0) { + continue; + } + if (blockNo < NumBlocksPerSector(sectorNo) - 1) { emlSetMem(dataoutbuf, FirstBlockOfSector(sectorNo) + blockNo, 1); } else { // sector trailer, keep the keys, set only the AC From 57975d8ada4c12756c18d480ab37e46c60f99c53 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sat, 5 Sep 2020 10:54:00 +0200 Subject: [PATCH 0373/1047] textual --- client/src/cmdhfmf.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/src/cmdhfmf.c b/client/src/cmdhfmf.c index c51f3aa23..cab2160cc 100644 --- a/client/src/cmdhfmf.c +++ b/client/src/cmdhfmf.c @@ -879,7 +879,7 @@ static int FastDumpWithEcFill(uint8_t numsectors) { res = WaitForResponseTimeout(CMD_HF_MIFARE_EML_LOAD, &resp, 2000); if (res != PM3_SUCCESS) { PrintAndLogEx(INFO, "fast dump reported back failure w KEY B"); - PrintAndLogEx(INFO, "Dump file is " _RED_("PARTIAL") "complete"); + PrintAndLogEx(INFO, "Dump file is " _RED_("PARTIAL") " complete"); } } return PM3_SUCCESS; From 7904d962aaff9c40e3253858bfb0f59b66ff804a Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sat, 5 Sep 2020 12:50:30 +0200 Subject: [PATCH 0374/1047] timeout in waiting loops 4x50 --- armsrc/em4x50.c | 42 +++++++++++++++++++++++++++--------------- 1 file changed, 27 insertions(+), 15 deletions(-) diff --git a/armsrc/em4x50.c b/armsrc/em4x50.c index bcc646fcc..45ffc8bbd 100644 --- a/armsrc/em4x50.c +++ b/armsrc/em4x50.c @@ -313,22 +313,36 @@ static int get_next_bit(void) { static uint32_t get_pulse_length(void) { + int32_t timeout = (T0 * 3 * EM4X50_T_TAG_FULL_PERIOD); + // iterates pulse length (low -> high -> low) - uint8_t sample = 0; + volatile uint8_t sample = (uint8_t)AT91C_BASE_SSC->SSC_RHR; - sample = (uint8_t)AT91C_BASE_SSC->SSC_RHR; - - while (sample > gLow) + while (sample > gLow || (timeout--)) { sample = (uint8_t)AT91C_BASE_SSC->SSC_RHR; + } + + if (timeout == 0) + return 0; AT91C_BASE_TC1->TC_CCR = AT91C_TC_SWTRG; + timeout = (T0 * 3 * EM4X50_T_TAG_FULL_PERIOD); - while (sample < gHigh) + while (sample < gHigh || (timeout--)) { sample = (uint8_t)AT91C_BASE_SSC->SSC_RHR; + } - while (sample > gLow) + if (timeout == 0) + return 0; + + timeout = (T0 * 3 * EM4X50_T_TAG_FULL_PERIOD); + while (sample > gLow || (timeout--)) { sample = (uint8_t)AT91C_BASE_SSC->SSC_RHR; + } + + if (timeout == 0) + return 0; return (uint32_t)AT91C_BASE_TC1->TC_CV; } @@ -413,13 +427,13 @@ static void em4x50_send_word(const uint8_t bytes[4]) { em4x50_send_bit(0); } -static bool find_single_listen_window(int16_t timeout) { +static bool find_single_listen_window(void) { // find single listen window int cnt_pulses = 0; - while (cnt_pulses < EM4X50_T_WAITING_FOR_SNGLLIW && timeout--) { + while (cnt_pulses < EM4X50_T_WAITING_FOR_SNGLLIW) { // identification of listen window is done via evaluation of // pulse lengths @@ -432,16 +446,14 @@ static bool find_single_listen_window(int16_t timeout) { } } else { - cnt_pulses++; - } } return false; } -static bool find_double_listen_window(bool bcommand, int16_t timeout) { +static bool find_double_listen_window(bool bcommand) { // find two successive listen windows that indicate the beginning of // data transmission @@ -451,7 +463,7 @@ static bool find_double_listen_window(bool bcommand, int16_t timeout) { int cnt_pulses = 0; - while (cnt_pulses < EM4X50_T_WAITING_FOR_DBLLIW && timeout--) { + while (cnt_pulses < EM4X50_T_WAITING_FOR_DBLLIW) { // identification of listen window is done via evaluation of // pulse lengths @@ -508,7 +520,7 @@ static bool find_em4x50_tag(void) { // function is used to check wether a tag on the proxmark is an // EM4x50 tag or not -> speed up "lf search" process - return (find_single_listen_window(EM4X50_COMMAND_TIMEOUT)); + return (find_single_listen_window()); } @@ -520,7 +532,7 @@ static bool request_receive_mode(void) { bool bcommand = true; - return find_double_listen_window(bcommand, EM4X50_COMMAND_TIMEOUT); + return find_double_listen_window(bcommand); } static bool check_ack(bool bliw) { @@ -726,7 +738,7 @@ static bool standard_read(int *now) { uint8_t bits[EM4X50_TAG_WORD] = {0}; // start with the identification of two succsessive listening windows - if (find_double_listen_window(false, EM4X50_COMMAND_TIMEOUT)) { + if (find_double_listen_window(false)) { // read and save words until following double listen window is detected while (get_word_from_bitstream(bits) == EM4X50_TAG_WORD) From 70be7ef4d83e02f482addd96a66fa64e7a0580ad Mon Sep 17 00:00:00 2001 From: Eloff Date: Sat, 5 Sep 2020 22:32:11 +0300 Subject: [PATCH 0375/1047] Magic gen 3 cards support --- CHANGELOG.md | 1 + armsrc/appmain.c | 13 +++ armsrc/mifarecmd.c | 148 +++++++++++++++++++++++++++++++++ armsrc/mifarecmd.h | 5 ++ client/src/cmdhfmf.c | 109 ++++++++++++++++++++++++ client/src/mifare/mifarehost.c | 42 ++++++++++ client/src/mifare/mifarehost.h | 4 + include/pm3_cmd.h | 5 ++ 8 files changed, 327 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 492c67794..0392833f4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ All notable changes to this project will be documented in this file. This project uses the changelog in accordance with [keepchangelog](http://keepachangelog.com/). Please use this to write notable changes, which is not the same as git commit log... ## [unreleased][unreleased] + - Added `hf mf gen3*`magic gen 3 card operations (@McEloff) - Readded verichip command which seems missing (@iceman1001) - Fix missing t55x7 config block detection (@iceman1001) - Fix missing define on proxspace (@mwalker33) diff --git a/armsrc/appmain.c b/armsrc/appmain.c index 26a62bf9b..940d71b32 100644 --- a/armsrc/appmain.c +++ b/armsrc/appmain.c @@ -1318,6 +1318,19 @@ static void PacketReceived(PacketCommandNG *packet) { MifareCIdent(); break; } + // Gen 3 magic cards + case CMD_HF_MIFARE_GEN3UID: { + MifareGen3UID(packet->oldarg[0], packet->data.asBytes); + break; + } + case CMD_HF_MIFARE_GEN3BLK: { + MifareGen3Blk(packet->oldarg[0], packet->data.asBytes); + break; + } + case CMD_HF_MIFARE_GEN3FREEZ: { + MifareGen3Freez(); + break; + } // mifare sniffer // case CMD_HF_MIFARE_SNIFF: { // SniffMifare(packet->oldarg[0]); diff --git a/armsrc/mifarecmd.c b/armsrc/mifarecmd.c index ba1f6201a..decaf39fb 100644 --- a/armsrc/mifarecmd.c +++ b/armsrc/mifarecmd.c @@ -2319,6 +2319,154 @@ void OnErrorMagic(uint8_t reason) { OnSuccessMagic(); } +int DoGen3Cmd(uint8_t *cmd, uint8_t cmd_len) { + int retval = PM3_SUCCESS; + uint8_t *par = BigBuf_malloc(MAX_PARITY_SIZE); + uint8_t *buf = BigBuf_malloc(PM3_CMD_DATA_SIZE); + + LED_B_ON(); + uint32_t save_iso14a_timeout = iso14a_get_timeout(); + iso14a_set_timeout(13560000 / 1000 / (8 * 16) * 2000); // 2 seconds timeout + + ReaderTransmit(cmd, cmd_len, NULL); + int res = ReaderReceive(buf, par); + if (res == 4 || memcmp(buf, "\x90\x00\xfd\x07", 4) == 0) { + // timeout for card memory reset + SpinDelay(1000); + } else { + if (DBGLEVEL >= DBG_ERROR) Dbprintf("Card operation not completed"); + retval = PM3_ESOFT; + } + iso14a_set_timeout(save_iso14a_timeout); + LED_B_OFF(); + + return retval; +} + +void MifareGen3UID(uint8_t uidlen, uint8_t *uid) { + int retval = PM3_SUCCESS; + uint8_t uid_cmd[5] = { 0x90, 0xfb, 0xcc, 0xcc, 0x07 }; + uint8_t *old_uid = BigBuf_malloc(10); + uint8_t *cmd = BigBuf_malloc(sizeof(uid_cmd) + uidlen + 2); + iso14a_card_select_t *card_info = (iso14a_card_select_t *) BigBuf_malloc(sizeof(iso14a_card_select_t)); + + iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN); + clear_trace(); + set_tracing(true); + + if (!iso14443a_select_card(old_uid, card_info, NULL, true, 0, true)) { + if (DBGLEVEL >= DBG_ERROR) Dbprintf("Card not selected"); + retval = PM3_ESOFT; + goto OUT; + } + if (card_info->uidlen != uidlen) { + if (DBGLEVEL >= DBG_ERROR) Dbprintf("Wrong UID length"); + retval = PM3_ESOFT; + goto OUT; + } + + memcpy(cmd, uid_cmd, sizeof(uid_cmd)); + memcpy(&cmd[sizeof(uid_cmd)], uid, uidlen); + AddCrc14A(cmd, sizeof(uid_cmd) + uidlen); + + retval = DoGen3Cmd(cmd, sizeof(uid_cmd) + uidlen + 2); + +OUT: + reply_ng(CMD_HF_MIFARE_GEN3UID, retval, old_uid, uidlen); + // turns off + OnSuccessMagic(); + BigBuf_free(); +} + +void MifareGen3Blk(uint8_t block_len, uint8_t *block) { +#define MIFARE_BLOCK_SIZE (MAX_MIFARE_FRAME_SIZE - 2) + int retval = PM3_SUCCESS; + uint8_t block_cmd[5] = { 0x90, 0xf0, 0xcc, 0xcc, 0x10 }; + uint8_t *uid = BigBuf_malloc(10); + uint8_t *cmd = BigBuf_malloc(sizeof(block_cmd) + MAX_MIFARE_FRAME_SIZE); + iso14a_card_select_t *card_info = (iso14a_card_select_t *) BigBuf_malloc(sizeof(iso14a_card_select_t)); + + iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN); + clear_trace(); + set_tracing(true); + + if (!iso14443a_select_card(uid, card_info, NULL, true, 0, true)) { + if (DBGLEVEL >= DBG_ERROR) Dbprintf("Card not selected"); + retval = PM3_ESOFT; + goto OUT; + } + + bool doReselect = false; + if (block_len < MIFARE_BLOCK_SIZE) { + if ((mifare_sendcmd_short(NULL, CRYPT_NONE, ISO14443A_CMD_READBLOCK, 0, &cmd[sizeof(block_cmd)], NULL, NULL) != MAX_MIFARE_FRAME_SIZE)) { + if (DBGLEVEL >= DBG_ERROR) Dbprintf("Read manufacturer block failed"); + retval = PM3_ESOFT; + goto OUT; + } + doReselect = true; + } + + if (block_len > 0) { + memcpy(cmd, block_cmd, sizeof(block_cmd)); + memcpy(&cmd[sizeof(block_cmd)], block, block_len); + int ofs = sizeof(block_cmd); + if (card_info->uidlen == 4) { + cmd[ofs + 4] = cmd[ofs + 0] ^ cmd[ofs + 1] ^ cmd[ofs + 2] ^ cmd[ofs + 3]; + ofs += 5; + } else if (card_info->uidlen == 7) { + ofs += 7; + } else { + if (DBGLEVEL >= DBG_ERROR) Dbprintf("Wrong Card UID length"); + retval = PM3_ESOFT; + goto OUT; + } + cmd[ofs++] = card_info->sak; + cmd[ofs++] = card_info->atqa[0]; + cmd[ofs++] = card_info->atqa[1]; + AddCrc14A(cmd, sizeof(block_cmd) + MIFARE_BLOCK_SIZE); + + if (doReselect) { + if (!iso14443a_select_card(uid, NULL, NULL, true, 0, true)) { + if (DBGLEVEL >= DBG_ERROR) Dbprintf("Card not selected"); + retval = PM3_ESOFT; + goto OUT; + } + } + + retval = DoGen3Cmd(cmd, sizeof(block_cmd) + MAX_MIFARE_FRAME_SIZE); + } + +OUT: + reply_ng(CMD_HF_MIFARE_GEN3BLK, retval, &cmd[sizeof(block_cmd)], MIFARE_BLOCK_SIZE); + // turns off + OnSuccessMagic(); + BigBuf_free(); +} + +void MifareGen3Freez(void) { + int retval = PM3_SUCCESS; + uint8_t freeze_cmd[7] = { 0x90, 0xfd, 0x11, 0x11, 0x00, 0xe7, 0x91 }; + uint8_t *uid = BigBuf_malloc(10); + + iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN); + clear_trace(); + set_tracing(true); + + if (!iso14443a_select_card(uid, NULL, NULL, true, 0, true)) { + if (DBGLEVEL >= DBG_ERROR) Dbprintf("Card not selected"); + retval = PM3_ESOFT; + goto OUT; + } + + retval = DoGen3Cmd(freeze_cmd, sizeof(freeze_cmd)); + +OUT: + reply_ng(CMD_HF_MIFARE_GEN3FREEZ, retval, NULL, 0); + // turns off + OnSuccessMagic(); + BigBuf_free(); +} + void MifareSetMod(uint8_t *datain) { uint8_t mod = datain[0]; diff --git a/armsrc/mifarecmd.h b/armsrc/mifarecmd.h index 3da2b2f00..4adceb4db 100644 --- a/armsrc/mifarecmd.h +++ b/armsrc/mifarecmd.h @@ -44,6 +44,11 @@ void MifareCGetBlock(uint32_t arg0, uint32_t arg1, uint8_t *datain); void MifareCIdent(void); // is "magic chinese" card? void MifareHasStaticNonce(void); // Has the tag a static nonce? +int DoGen3Cmd(uint8_t *cmd, uint8_t cmd_len); +void MifareGen3UID(uint8_t uidlen, uint8_t *uid); // Gen 3 magic card set UID without manufacturer block +void MifareGen3Blk(uint8_t block_len, uint8_t *block); // Gen 3 magic card overwrite manufacturer block +void MifareGen3Freez(void); // Gen 3 magic card lock further UID changes + void MifareSetMod(uint8_t *datain); void MifarePersonalizeUID(uint8_t keyType, uint8_t perso_option, uint64_t key); diff --git a/client/src/cmdhfmf.c b/client/src/cmdhfmf.c index cab2160cc..1af89f0f8 100644 --- a/client/src/cmdhfmf.c +++ b/client/src/cmdhfmf.c @@ -500,6 +500,48 @@ static int usage_hf14_nack(void) { PrintAndLogEx(NORMAL, _YELLOW_(" hf mf nack")); return PM3_SUCCESS; } +static int usage_hf14_gen3uid(void) { + PrintAndLogEx(NORMAL, "Set UID for magic GEN 3 card without manufacturer block changing"); + PrintAndLogEx(NORMAL, ""); + PrintAndLogEx(NORMAL, "Usage: hf mf gen3uid [h] "); + PrintAndLogEx(NORMAL, "Options:"); + PrintAndLogEx(NORMAL, " h this help"); + PrintAndLogEx(NORMAL, " UID 8/14 hex symbols"); + PrintAndLogEx(NORMAL, "Examples:"); + PrintAndLogEx(NORMAL, _YELLOW_(" hf mf gen3uid 01020304")); + PrintAndLogEx(NORMAL, _YELLOW_(" hf mf gen3uid 01020304050607")); + return PM3_SUCCESS; +} +static int usage_hf14_gen3blk(void) { + PrintAndLogEx(NORMAL, "Overwrite full manufacturer block for magic GEN 3 card"); + PrintAndLogEx(NORMAL, ""); + PrintAndLogEx(NORMAL, "Usage: hf mf gen3blk [h] [block data (up to 32 hex symbols)]"); + PrintAndLogEx(NORMAL, "Options:"); + PrintAndLogEx(NORMAL, " h this help"); + PrintAndLogEx(NORMAL, " [block] manufacturer block data up to 32 hex symbols to write"); + PrintAndLogEx(NORMAL, " - If block data not specified, it prints current"); + PrintAndLogEx(NORMAL, " data without changes"); + PrintAndLogEx(NORMAL, " - You can specify part of manufacturer block as"); + PrintAndLogEx(NORMAL, " 4/7-bytes for UID change only for example"); + PrintAndLogEx(NORMAL, " NOTE: BCC, SAK, ATQA will be calculated automatically"); + PrintAndLogEx(NORMAL, "Examples:"); + PrintAndLogEx(NORMAL, _YELLOW_(" hf mf gen3blk 01020304FFFFFFFF0102030405060708")); + PrintAndLogEx(NORMAL, _YELLOW_(" hf mf gen3blk 01020304")); + PrintAndLogEx(NORMAL, _YELLOW_(" hf mf gen3blk 01020304050607")); + PrintAndLogEx(NORMAL, _YELLOW_(" hf mf gen3blk")); + return PM3_SUCCESS; +} +static int usage_hf14_gen3freez(void) { + PrintAndLogEx(NORMAL, "Lock further UID changes. No more UID changes available after operation completed"); + PrintAndLogEx(NORMAL, ""); + PrintAndLogEx(NORMAL, "Usage: hf mf gen3freez [h] "); + PrintAndLogEx(NORMAL, "Options:"); + PrintAndLogEx(NORMAL, " h this help"); + PrintAndLogEx(NORMAL, " confirm UID locks operation"); + PrintAndLogEx(NORMAL, "Examples:"); + PrintAndLogEx(NORMAL, _YELLOW_(" hf mf gen3freez Y")); + return PM3_SUCCESS; +} static int GetHFMF14AUID(uint8_t *uid, int *uidlen) { clearCommandBuffer(); @@ -5086,6 +5128,69 @@ static int CmdHF14AMfList(const char *Cmd) { return CmdTraceList("mf"); } +static int CmdHf14AGen3UID(const char *Cmd) { + uint8_t uid[7] = {0x00}; + uint8_t oldUid[10] = {0x00}; + uint8_t uidlen; + + char ctmp = tolower(param_getchar(Cmd, 0)); + if (ctmp == 'h') return usage_hf14_gen3uid(); + + if (param_gethex(Cmd, 0, uid, 8)) + if (param_gethex(Cmd, 0, uid, 14)) + return usage_hf14_gen3uid(); + else + uidlen = 7; + else + uidlen = 4; + + int res = mfGen3UID(uid, uidlen, oldUid); + if (res) { + PrintAndLogEx(ERR, "Can't set UID. Error=%d", res); + return PM3_ESOFT; + } + + PrintAndLogEx(SUCCESS, "Old UID : %s", sprint_hex(oldUid, uidlen)); + PrintAndLogEx(SUCCESS, "New UID : %s", sprint_hex(uid, uidlen)); + return PM3_SUCCESS; +} + +static int CmdHf14AGen3Blk(const char *Cmd) { + uint8_t block[16] = {0x00}; + int blocklen = 0; + uint8_t newBlock[16] = {0x00}; + + char ctmp = tolower(param_getchar(Cmd, 0)); + if (ctmp == 'h') return usage_hf14_gen3blk(); + + if (ctmp != '\0' && param_gethex_to_eol(Cmd, 0, block, sizeof(block), &blocklen)) + return usage_hf14_gen3blk(); + + int res = mfGen3Blk(block, blocklen, newBlock); + if (res) { + PrintAndLogEx(ERR, "Can't change manufacturer block data. Error=%d", res); + return PM3_ESOFT; + } + + PrintAndLogEx(SUCCESS, "Current Block : %s", sprint_hex(newBlock, 16)); + return PM3_SUCCESS; +} + +static int CmdHf14AGen3Freez(const char *Cmd) { + char ctmp = param_getchar(Cmd, 0); + if (tolower(ctmp) == 'h') return usage_hf14_gen3freez(); + if (ctmp != 'Y') return usage_hf14_gen3freez(); + + int res = mfGen3Freez(); + if (res) { + PrintAndLogEx(ERR, "Can't lock UID changes. Error=%d", res); + return PM3_ESOFT; + } + + PrintAndLogEx(SUCCESS, "Gen 3 UID locked"); + return PM3_SUCCESS; +} + static command_t CommandTable[] = { {"help", CmdHelp, AlwaysAvailable, "This help"}, {"list", CmdHF14AMfList, AlwaysAvailable, "List MIFARE history"}, @@ -5131,6 +5236,10 @@ static command_t CommandTable[] = { {"cload", CmdHF14AMfCLoad, IfPm3Iso14443a, "Load dump (magic chinese card)"}, {"csave", CmdHF14AMfCSave, IfPm3Iso14443a, "Save dump from magic chinese card into file or emulator"}, {"cview", CmdHF14AMfCView, IfPm3Iso14443a, "view card"}, + {"-----------", CmdHelp, IfPm3Iso14443a, "----------------------- " _CYAN_("magic gen3") " -----------------------"}, + {"gen3uid", CmdHf14AGen3UID, IfPm3Iso14443a, "Set UID without manufacturer block (magic gen3 card)"}, + {"gen3blk", CmdHf14AGen3Blk, IfPm3Iso14443a, "Overwrite full manufacturer block (magic gen 3 card)"}, + {"gen3freez", CmdHf14AGen3Freez, IfPm3Iso14443a, "Lock further UID changes (magic gen 3 card)"}, {"-----------", CmdHelp, IfPm3Iso14443a, "----------------------- " _CYAN_("i") " -----------------------"}, {"ice", CmdHF14AMfice, IfPm3Iso14443a, "collect MIFARE Classic nonces to file"}, diff --git a/client/src/mifare/mifarehost.c b/client/src/mifare/mifarehost.c index 31b88bec9..26b25b831 100644 --- a/client/src/mifare/mifarehost.c +++ b/client/src/mifare/mifarehost.c @@ -944,6 +944,48 @@ int mfCGetBlock(uint8_t blockNo, uint8_t *data, uint8_t params) { return PM3_SUCCESS; } +int mfGen3UID(uint8_t *uid, uint8_t uidlen, uint8_t *oldUid) { + clearCommandBuffer(); + SendCommandMIX(CMD_HF_MIFARE_GEN3UID, uidlen, 0, 0, uid, uidlen); + PacketResponseNG resp; + if (WaitForResponseTimeout(CMD_HF_MIFARE_GEN3UID, &resp, 3500)) { + if (resp.status == PM3_SUCCESS && oldUid) { + memcpy(oldUid, resp.data.asBytes, uidlen); + } + return resp.status; + } else { + PrintAndLogEx(WARNING, "Command execute timeout"); + return PM3_ETIMEOUT; + } +} + +int mfGen3Blk(uint8_t *block, int blockLen, uint8_t *newBlock) { + clearCommandBuffer(); + SendCommandMIX(CMD_HF_MIFARE_GEN3BLK, blockLen, 0, 0, block, 16); + PacketResponseNG resp; + if (WaitForResponseTimeout(CMD_HF_MIFARE_GEN3BLK, &resp, 3500)) { + if (resp.status == PM3_SUCCESS && newBlock) { + memcpy(newBlock, resp.data.asBytes, 16); + } + return resp.status; + } else { + PrintAndLogEx(WARNING, "Command execute timeout"); + return PM3_ETIMEOUT; + } +} + +int mfGen3Freez(void) { + clearCommandBuffer(); + SendCommandNG(CMD_HF_MIFARE_GEN3FREEZ, NULL, 0); + PacketResponseNG resp; + if (WaitForResponseTimeout(CMD_HF_MIFARE_GEN3FREEZ, &resp, 3500)) { + return resp.status; + } else { + PrintAndLogEx(WARNING, "Command execute timeout"); + return PM3_ETIMEOUT; + } +} + // SNIFFER // [iceman] so many global variables.... diff --git a/client/src/mifare/mifarehost.h b/client/src/mifare/mifarehost.h index f8205732f..4864d9357 100644 --- a/client/src/mifare/mifarehost.h +++ b/client/src/mifare/mifarehost.h @@ -80,6 +80,10 @@ int mfCWipe(uint8_t *uid, uint8_t *atqa, uint8_t *sak); int mfCSetBlock(uint8_t blockNo, uint8_t *data, uint8_t *uid, uint8_t params); int mfCGetBlock(uint8_t blockNo, uint8_t *data, uint8_t params); +int mfGen3UID(uint8_t *uid, uint8_t uidlen, uint8_t *oldUid); +int mfGen3Blk(uint8_t *block, int blockLen, uint8_t *newBlock); +int mfGen3Freez(void); + int tryDecryptWord(uint32_t nt, uint32_t ar_enc, uint32_t at_enc, uint8_t *data, int len); int detect_classic_prng(void); diff --git a/include/pm3_cmd.h b/include/pm3_cmd.h index b2eff0ddb..21409bbec 100644 --- a/include/pm3_cmd.h +++ b/include/pm3_cmd.h @@ -648,6 +648,11 @@ typedef struct { //For Atmel CryptoRF #define CMD_HF_CRYPTORF_SIM 0x0820 +// Gen 3 magic cards +#define CMD_HF_MIFARE_GEN3UID 0x0850 +#define CMD_HF_MIFARE_GEN3BLK 0x0851 +#define CMD_HF_MIFARE_GEN3FREEZ 0x0852 + #define CMD_UNKNOWN 0xFFFF //Mifare simulation flags From e8d829218d1d80d79e8b9df4cd1342d4373d3024 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sat, 5 Sep 2020 22:05:59 +0200 Subject: [PATCH 0376/1047] do stupid stuff, win stupid prices --- client/src/cmdhfmf.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/client/src/cmdhfmf.c b/client/src/cmdhfmf.c index cab2160cc..7cd1e022a 100644 --- a/client/src/cmdhfmf.c +++ b/client/src/cmdhfmf.c @@ -867,8 +867,13 @@ static int FastDumpWithEcFill(uint8_t numsectors) { clearCommandBuffer(); SendCommandNG(CMD_HF_MIFARE_EML_LOAD, (uint8_t *)&payload, sizeof(payload)); - int res = WaitForResponseTimeout(CMD_HF_MIFARE_EML_LOAD, &resp, 2000); - if (res != PM3_SUCCESS) { + bool res = WaitForResponseTimeout(CMD_HF_MIFARE_EML_LOAD, &resp, 2000); + if (res == false) { + PrintAndLogEx(WARNING, "Command execute timeout"); + return PM3_ETIMEOUT; + } + + if (resp.status != PM3_SUCCESS) { PrintAndLogEx(INFO, "fast dump reported back failure w KEY A, swapping to KEY B"); // ecfill key B @@ -877,7 +882,12 @@ static int FastDumpWithEcFill(uint8_t numsectors) { clearCommandBuffer(); SendCommandNG(CMD_HF_MIFARE_EML_LOAD, (uint8_t *)&payload, sizeof(payload)); res = WaitForResponseTimeout(CMD_HF_MIFARE_EML_LOAD, &resp, 2000); - if (res != PM3_SUCCESS) { + if (res == false) { + PrintAndLogEx(WARNING, "Command execute timeout"); + return PM3_ETIMEOUT; + } + + if (resp.status != PM3_SUCCESS) { PrintAndLogEx(INFO, "fast dump reported back failure w KEY B"); PrintAndLogEx(INFO, "Dump file is " _RED_("PARTIAL") " complete"); } From 2d7eca08a2c0521cf65e587aae2b6f8711430385 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sat, 5 Sep 2020 23:57:06 +0200 Subject: [PATCH 0377/1047] textual --- client/src/cmdlfem4x50.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/src/cmdlfem4x50.c b/client/src/cmdlfem4x50.c index 03ec3f5dc..124ffe8c0 100644 --- a/client/src/cmdlfem4x50.c +++ b/client/src/cmdlfem4x50.c @@ -516,7 +516,7 @@ int em4x50_read(em4x50_data_t *etd, em4x50_word_t *out, bool verbose) { PacketResponseNG resp; if (!WaitForResponseTimeout(CMD_ACK, &resp, TIMEOUT)) { - PrintAndLogEx(WARNING, "timeout while waiting for reply."); + PrintAndLogEx(WARNING, "(em4x50) timeout while waiting for reply."); return PM3_ETIMEOUT; } From b98b51c279c88b1b63a757c1d60665414d39705b Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sat, 5 Sep 2020 23:57:44 +0200 Subject: [PATCH 0378/1047] textual --- client/src/cmdlf.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/client/src/cmdlf.c b/client/src/cmdlf.c index a5004c5c8..3015f5deb 100644 --- a/client/src/cmdlf.c +++ b/client/src/cmdlf.c @@ -595,7 +595,7 @@ int lf_read(bool verbose, uint32_t samples) { if (!session.pm3_present) return PM3_ENOTTY; struct p { - uint8_t verbose; + bool verbose; uint32_t samples; } PACKED; @@ -605,21 +605,19 @@ int lf_read(bool verbose, uint32_t samples) { clearCommandBuffer(); SendCommandNG(CMD_LF_ACQ_RAW_ADC, (uint8_t *)&payload, sizeof(payload)); - PacketResponseNG resp; if (g_lf_threshold_set) { WaitForResponse(CMD_LF_ACQ_RAW_ADC, &resp); } else { if (!WaitForResponseTimeout(CMD_LF_ACQ_RAW_ADC, &resp, 2500)) { - PrintAndLogEx(WARNING, "command execution time out"); + PrintAndLogEx(WARNING, "(lf_read) command execution time out"); return PM3_ETIMEOUT; } } - // resp.oldarg[0] is bits read not bytes read. - uint32_t bits = (resp.data.asDwords[0] / 8); - getSamples(bits, verbose); - + // response is number of bits read + uint32_t size = (resp.data.asDwords[0] / 8); + getSamples(size, verbose); return PM3_SUCCESS; } @@ -1190,14 +1188,16 @@ static bool CheckChipType(bool getDeviceData) { //check for em4x05/em4x69 chips first uint32_t word = 0; + PrintAndLogEx(INFO, "Checking for 4x05 chipset"); if (EM4x05IsBlock0(&word)) { - PrintAndLogEx(SUCCESS, "Chipset detection: " _GREEN_("EM4x05/EM4x69")); + PrintAndLogEx(SUCCESS, "Chipset detection: " _GREEN_("EM4x05 / EM4x69")); PrintAndLogEx(HINT, "Hint: try " _YELLOW_("`lf em 4x05`") " commands"); retval = true; goto out; } //check for t55xx chip... + PrintAndLogEx(INFO, "Checking for T55x7 chipset"); if (tryDetectP1(true)) { PrintAndLogEx(SUCCESS, "Chipset detection: " _GREEN_("T55xx")); PrintAndLogEx(HINT, "Hint: try " _YELLOW_("`lf t55xx`") " commands"); @@ -1205,6 +1205,7 @@ static bool CheckChipType(bool getDeviceData) { } // check for em4x50 chips + PrintAndLogEx(INFO, "Checking for 4x50 chipset"); if (detect_4x50_block()) { PrintAndLogEx(SUCCESS, "Chipset detection: " _GREEN_("EM4x50")); PrintAndLogEx(HINT, "Hint: try " _YELLOW_("`lf em 4x50`") " commands"); @@ -1212,6 +1213,7 @@ static bool CheckChipType(bool getDeviceData) { goto out; } + PrintAndLogEx(NORMAL, "Couldn't identify a chipset"); out: save_restoreGB(GRAPH_RESTORE); save_restoreDB(GRAPH_RESTORE); @@ -1251,6 +1253,7 @@ int CmdLFfind(const char *Cmd) { if (isOnline) { if (IfPm3Hitag()) { + PrintAndLogEx(INFO, "check hitag"); if (readHitagUid()) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("Hitag") " found!"); return PM3_SUCCESS; @@ -1258,6 +1261,7 @@ int CmdLFfind(const char *Cmd) { } if (IfPm3EM4x50()) { + PrintAndLogEx(INFO, "check 4x50"); if (read_em4x50_uid() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("EM4x50 ID") " found!"); return PM3_SUCCESS; From 70ba690c065712593f560b0c3610a203a43edc72 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sat, 5 Sep 2020 23:58:21 +0200 Subject: [PATCH 0379/1047] adapt timeout --- armsrc/em4x50.c | 40 +++++++++++++++------------------------- 1 file changed, 15 insertions(+), 25 deletions(-) diff --git a/armsrc/em4x50.c b/armsrc/em4x50.c index 45ffc8bbd..0c895ee71 100644 --- a/armsrc/em4x50.c +++ b/armsrc/em4x50.c @@ -100,6 +100,8 @@ int gLow = 0; static void init_tag(void) { + // iceman: memset(tag.sectors, 0x00, sizeof)); + // initialize global tag structure for (int i = 0; i < 34; i++) for (int j = 0; j < 7; j++) @@ -186,10 +188,9 @@ static void em4x50_setup_read(void) { // 50ms for the resonant antenna to settle. SpinDelay(50); + // Now set up the SSC to get the ADC samples that are now streaming at us. FpgaSetupSsc(FPGA_MAJOR_MODE_LF_READER); - // start a 1.5ticks is 1us - StartTicks(); FpgaSendCommand(FPGA_CMD_SET_DIVISOR, LF_DIVISOR_125); @@ -256,10 +257,9 @@ static bool get_signalproperties(void) { signal_found = true; break; } - } - if (!signal_found) + if (signal_found == false) return false; // calculate mean maximum value of 32 periods, each period has a length of @@ -313,13 +313,15 @@ static int get_next_bit(void) { static uint32_t get_pulse_length(void) { +// Dbprintf( _CYAN_("4x50 get_pulse_length A") ); + int32_t timeout = (T0 * 3 * EM4X50_T_TAG_FULL_PERIOD); // iterates pulse length (low -> high -> low) volatile uint8_t sample = (uint8_t)AT91C_BASE_SSC->SSC_RHR; - while (sample > gLow || (timeout--)) { + while (sample > gLow && (timeout--)) { sample = (uint8_t)AT91C_BASE_SSC->SSC_RHR; } @@ -329,7 +331,7 @@ static uint32_t get_pulse_length(void) { AT91C_BASE_TC1->TC_CCR = AT91C_TC_SWTRG; timeout = (T0 * 3 * EM4X50_T_TAG_FULL_PERIOD); - while (sample < gHigh || (timeout--)) { + while (sample < gHigh && (timeout--)) { sample = (uint8_t)AT91C_BASE_SSC->SSC_RHR; } @@ -337,25 +339,20 @@ static uint32_t get_pulse_length(void) { return 0; timeout = (T0 * 3 * EM4X50_T_TAG_FULL_PERIOD); - while (sample > gLow || (timeout--)) { + while (sample > gLow && (timeout--)) { sample = (uint8_t)AT91C_BASE_SSC->SSC_RHR; } if (timeout == 0) return 0; - return (uint32_t)AT91C_BASE_TC1->TC_CV; + return (uint32_t)AT91C_BASE_TC1->TC_CV; + } static bool check_pulse_length(uint32_t pl, int length) { - // check if pulse length corresponds to given length - - if ((pl >= T0 * (length - EM4X50_TAG_TOLERANCE)) & - (pl <= T0 * (length + EM4X50_TAG_TOLERANCE))) - return true; - else - return false; + return ((pl >= T0 * (length - EM4X50_TAG_TOLERANCE)) & (pl <= T0 * (length + EM4X50_TAG_TOLERANCE))); } static void em4x50_send_bit(int bit) { @@ -443,11 +440,9 @@ static bool find_single_listen_window(void) { // listen window found return true; - } - } else { - cnt_pulses++; } + cnt_pulses++; } return false; @@ -507,7 +502,6 @@ static bool find_double_listen_window(bool bcommand) { return true; } } - } else { cnt_pulses++; } } @@ -519,9 +513,7 @@ static bool find_em4x50_tag(void) { // function is used to check wether a tag on the proxmark is an // EM4x50 tag or not -> speed up "lf search" process - - return (find_single_listen_window()); - + return find_single_listen_window(); } static bool request_receive_mode(void) { @@ -529,9 +521,7 @@ static bool request_receive_mode(void) { // To issue a command we have to find a listen window first. // Because identification and sychronization at the same time is not // possible when using pulse lengths a double listen window is used. - bool bcommand = true; - return find_double_listen_window(bcommand); } @@ -846,7 +836,7 @@ void em4x50_read(em4x50_data_t *etd) { // set gHigh and gLow if (get_signalproperties() && find_em4x50_tag()) { - + if (etd->addr_given) { // selective read mode From 744649136dfe83cd8499c5e95a56d2e26622dfd2 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sat, 5 Sep 2020 23:58:42 +0200 Subject: [PATCH 0380/1047] change struct --- armsrc/appmain.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/armsrc/appmain.c b/armsrc/appmain.c index 26a62bf9b..fb5dc029d 100644 --- a/armsrc/appmain.c +++ b/armsrc/appmain.c @@ -756,7 +756,7 @@ static void PacketReceived(PacketCommandNG *packet) { } case CMD_LF_ACQ_RAW_ADC: { struct p { - uint8_t verbose; + bool verbose; uint32_t samples; } PACKED; struct p *payload = (struct p *)packet->data.asBytes; From 6da92df6cc7462df33b92d2208a04fabcd78b0e6 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sun, 6 Sep 2020 00:07:14 +0200 Subject: [PATCH 0381/1047] for testing, increase to 10000 --- client/src/cmdlfem4x.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/client/src/cmdlfem4x.c b/client/src/cmdlfem4x.c index a9d6c9794..9d9ed57db 100644 --- a/client/src/cmdlfem4x.c +++ b/client/src/cmdlfem4x.c @@ -691,7 +691,7 @@ static bool downloadSamplesEM(void) { // 8 bit preamble + 32 bit word response (max clock (128) * 40bits = 5120 samples) uint8_t got[6000]; if (!GetFromDevice(BIG_BUF, got, sizeof(got), 0, NULL, 0, NULL, 2500, false)) { - PrintAndLogEx(WARNING, "command execution time out"); + PrintAndLogEx(WARNING, "(downloadSamplesEM) command execution time out"); return false; } @@ -855,6 +855,7 @@ static int demodEM4x05resp(uint32_t *word) { } //////////////// 4205 / 4305 commands +#include "util_posix.h" // msclock static int EM4x05ReadWord_ext(uint8_t addr, uint32_t pwd, bool usePwd, uint32_t *word) { struct { @@ -870,14 +871,14 @@ static int EM4x05ReadWord_ext(uint8_t addr, uint32_t pwd, bool usePwd, uint32_t clearCommandBuffer(); SendCommandNG(CMD_LF_EM4X_READWORD, (uint8_t *)&payload, sizeof(payload)); PacketResponseNG resp; - if (!WaitForResponseTimeout(CMD_LF_EM4X_READWORD, &resp, 2500)) { - PrintAndLogEx(DEBUG, "timeout while waiting for reply."); + if (!WaitForResponseTimeout(CMD_LF_EM4X_READWORD, &resp, 10000)) { + PrintAndLogEx(WARNING, "(EM4x05ReadWord_ext) timeout while waiting for reply."); return PM3_ETIMEOUT; } - if (!downloadSamplesEM()) { + + if (downloadSamplesEM() == false) { return PM3_ESOFT; } - return demodEM4x05resp(word); } From 424f2810c5b631d620d1ba067e8a1599a2db531b Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sun, 6 Sep 2020 00:08:20 +0200 Subject: [PATCH 0382/1047] adapt timeout for 4x05 --- armsrc/lfops.c | 67 ++++++++++++++++++++++++++++---------------------- 1 file changed, 37 insertions(+), 30 deletions(-) diff --git a/armsrc/lfops.c b/armsrc/lfops.c index b29844476..b9dbe64ea 100644 --- a/armsrc/lfops.c +++ b/armsrc/lfops.c @@ -2041,7 +2041,7 @@ void T55xxReadBlock(uint8_t page, bool pwd_mode, bool brute_mem, uint8_t block, // Acquisition // Now do the acquisition - DoPartialAcquisition(0, false, samples, 0); + DoPartialAcquisition(0, true, samples, 1000); // Turn the field off if (brute_mem == false) { @@ -2492,36 +2492,37 @@ static void SendForward(uint8_t fwd_bit_count) { } static void EM4xLogin(uint32_t pwd) { - uint8_t len; forward_ptr = forwardLink_data; - len = Prepare_Cmd(FWD_CMD_LOGIN); + uint8_t len = Prepare_Cmd(FWD_CMD_LOGIN); len += Prepare_Data(pwd & 0xFFFF, pwd >> 16); SendForward(len); //WaitUS(20); // no wait for login command. // should receive - // 0000 1010 ok. + // 0000 1010 ok // 0000 0001 fail } void EM4xReadWord(uint8_t addr, uint32_t pwd, uint8_t usepwd) { - LED_A_ON(); - uint8_t len; + StartTicks(); + FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); + WaitMS(20); - //clear buffer now so it does not interfere with timing later + LED_A_ON(); + + // clear buffer now so it does not interfere with timing later BigBuf_Clear_ext(false); - StartTicks(); /* should we read answer from Logincommand? * * should receive - * 0000 1010 ok. + * 0000 1010 ok * 0000 0001 fail **/ if (usepwd) EM4xLogin(pwd); forward_ptr = forwardLink_data; - len = Prepare_Cmd(FWD_CMD_READ); + uint8_t len = Prepare_Cmd(FWD_CMD_READ); len += Prepare_Addr(addr); SendForward(len); @@ -2529,20 +2530,24 @@ void EM4xReadWord(uint8_t addr, uint32_t pwd, uint8_t usepwd) { WaitUS(400); DoPartialAcquisition(20, false, 6000, 1000); - + + StopTicks(); FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); reply_ng(CMD_LF_EM4X_READWORD, PM3_SUCCESS, NULL, 0); - LED_A_OFF(); + LEDsoff(); } void EM4xWriteWord(uint8_t addr, uint32_t data, uint32_t pwd, uint8_t usepwd) { - LED_A_ON(); - uint8_t len; - - //clear buffer now so it does not interfere with timing later - BigBuf_Clear_ext(false); StartTicks(); + FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); + WaitMS(50); + + LED_A_ON(); + + // clear buffer now so it does not interfere with timing later + BigBuf_Clear_ext(false); + /* should we read answer from Logincommand? * * should receive @@ -2552,20 +2557,21 @@ void EM4xWriteWord(uint8_t addr, uint32_t data, uint32_t pwd, uint8_t usepwd) { if (usepwd) EM4xLogin(pwd); forward_ptr = forwardLink_data; - len = Prepare_Cmd(FWD_CMD_WRITE); + uint8_t len = Prepare_Cmd(FWD_CMD_WRITE); len += Prepare_Addr(addr); len += Prepare_Data(data & 0xFFFF, data >> 16); SendForward(len); - //Wait 20ms for write to complete? + // Wait 20ms for write to complete? WaitMS(7); - + DoPartialAcquisition(20, false, 6000, 1000); + StopTicks(); FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); reply_ng(CMD_LF_EM4X_WRITEWORD, PM3_SUCCESS, NULL, 0); - LED_A_OFF(); + LEDsoff(); } /* @@ -2612,25 +2618,27 @@ void Cotag(uint32_t arg0) { LED_A_ON(); - LFSetupFPGAForADC(LF_DIVISOR_125, true); + LFSetupFPGAForADC(LF_FREQ2DIV(132), true); //132 //clear buffer now so it does not interfere with timing later BigBuf_free(); BigBuf_Clear_ext(false); - //send COTAG start pulse + // send COTAG start pulse + // http://www.proxmark.org/forum/viewtopic.php?id=4455 +/* ON(740) OFF(2035) ON(3330) OFF(2035) ON(740) OFF(2035) - ON(1000) - - -/* + ON(2000) +*/ ON(800) OFF(2200) ON(3600) OFF(2200) ON(800) OFF(2200) - ON(3400) -*/ + ON(2000) // ON(3400) + + FpgaSendCommand(FPGA_CMD_SET_DIVISOR, LF_FREQ2DIV(66)); // 66kHz + switch (rawsignal) { case 0: { doCotagAcquisition(); @@ -2658,7 +2666,6 @@ void Cotag(uint32_t arg0) { // Turn the field off FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); LEDsoff(); - } /* From 2168d3ea7d41ac26ca7abe698766e8d00d04f786 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sun, 6 Sep 2020 11:09:44 +0200 Subject: [PATCH 0383/1047] textual --- client/src/cmdlf.c | 5 ----- 1 file changed, 5 deletions(-) diff --git a/client/src/cmdlf.c b/client/src/cmdlf.c index 3015f5deb..832161cef 100644 --- a/client/src/cmdlf.c +++ b/client/src/cmdlf.c @@ -1188,7 +1188,6 @@ static bool CheckChipType(bool getDeviceData) { //check for em4x05/em4x69 chips first uint32_t word = 0; - PrintAndLogEx(INFO, "Checking for 4x05 chipset"); if (EM4x05IsBlock0(&word)) { PrintAndLogEx(SUCCESS, "Chipset detection: " _GREEN_("EM4x05 / EM4x69")); PrintAndLogEx(HINT, "Hint: try " _YELLOW_("`lf em 4x05`") " commands"); @@ -1197,7 +1196,6 @@ static bool CheckChipType(bool getDeviceData) { } //check for t55xx chip... - PrintAndLogEx(INFO, "Checking for T55x7 chipset"); if (tryDetectP1(true)) { PrintAndLogEx(SUCCESS, "Chipset detection: " _GREEN_("T55xx")); PrintAndLogEx(HINT, "Hint: try " _YELLOW_("`lf t55xx`") " commands"); @@ -1205,7 +1203,6 @@ static bool CheckChipType(bool getDeviceData) { } // check for em4x50 chips - PrintAndLogEx(INFO, "Checking for 4x50 chipset"); if (detect_4x50_block()) { PrintAndLogEx(SUCCESS, "Chipset detection: " _GREEN_("EM4x50")); PrintAndLogEx(HINT, "Hint: try " _YELLOW_("`lf em 4x50`") " commands"); @@ -1253,7 +1250,6 @@ int CmdLFfind(const char *Cmd) { if (isOnline) { if (IfPm3Hitag()) { - PrintAndLogEx(INFO, "check hitag"); if (readHitagUid()) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("Hitag") " found!"); return PM3_SUCCESS; @@ -1261,7 +1257,6 @@ int CmdLFfind(const char *Cmd) { } if (IfPm3EM4x50()) { - PrintAndLogEx(INFO, "check 4x50"); if (read_em4x50_uid() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("EM4x50 ID") " found!"); return PM3_SUCCESS; From 7c0510a0b25ce7d2722e3392bba88df93a2ea412 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sun, 6 Sep 2020 11:29:51 +0200 Subject: [PATCH 0384/1047] added PPS --- include/protocols.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/include/protocols.h b/include/protocols.h index 82e250993..ca6d32637 100644 --- a/include/protocols.h +++ b/include/protocols.h @@ -15,6 +15,9 @@ ISO14443A (usually NFC tags) 95 20 = Anticollision of cascade level2 95 70 = Select of cascade level2 50 00 = Halt (usage: 5000+2bytes ISO14443A-CRC - no answer from card) + + E0 = RATS + D0 = PPS Mifare 60 = Authenticate with KeyA 61 = Authenticate with KeyB @@ -148,6 +151,7 @@ ISO 7816-4 Basic interindustry commands. For command APDU's. #define ISO14443A_CMD_WRITEBLOCK 0xA0 #define ISO14443A_CMD_HALT 0x50 #define ISO14443A_CMD_RATS 0xE0 +#define ISO14443A_CMD_PPS 0xD0 #define ISO14443A_CMD_NXP_DESELECT 0xC2 #define MIFARE_SELECT_CT 0x88 From e1365ba3345a1225bc3eab8fe4e4de5fa9ae923b Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sun, 6 Sep 2020 11:31:23 +0200 Subject: [PATCH 0385/1047] PPS in annotation --- client/src/cmdhflist.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/client/src/cmdhflist.c b/client/src/cmdhflist.c index 0e2b40a50..9f7f2dbc2 100644 --- a/client/src/cmdhflist.c +++ b/client/src/cmdhflist.c @@ -215,6 +215,9 @@ int applyIso14443a(char *exp, size_t size, uint8_t *cmd, uint8_t cmdsize) { case ISO14443A_CMD_RATS: snprintf(exp, size, "RATS"); break; + case ISO14443A_CMD_PPS: + snprintf(exp, size, "PPS"); + break; case ISO14443A_CMD_OPTS: snprintf(exp, size, "OPTIONAL TIMESLOT"); break; @@ -608,6 +611,10 @@ void annotateTopaz(char *exp, size_t size, uint8_t *cmd, uint8_t cmdsize) { // iso 7816-3 void annotateIso7816(char *exp, size_t size, uint8_t *cmd, uint8_t cmdsize) { + + if (cmdsize < 2) + return; + // S-block if ((cmd[0] & 0xC0) && (cmdsize == 3)) { switch ((cmd[0] & 0x3f)) { @@ -715,7 +722,7 @@ void annotateIso7816(char *exp, size_t size, uint8_t *cmd, uint8_t cmdsize) { snprintf(exp, size, "GET RESPONSE"); break; default: - snprintf(exp, size, "?"); + //snprintf(exp, size, "?"); break; } } From 57ea5f3ef14e4a2c234132efee96b06f4d164658 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sun, 6 Sep 2020 11:32:03 +0200 Subject: [PATCH 0386/1047] 7816 also does 14a annotations --- client/src/cmdtrace.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/client/src/cmdtrace.c b/client/src/cmdtrace.c index 04bb64f95..d87b78995 100644 --- a/client/src/cmdtrace.c +++ b/client/src/cmdtrace.c @@ -245,6 +245,7 @@ static uint16_t printTraceLine(uint16_t tracepos, uint16_t traceLen, uint8_t *tr case ISO_14443A: case MFDES: case LTO: + case ISO_7816_4: crcStatus = iso14443A_CRC_check(hdr->isResponse, frame, data_len); break; case THINFILM: @@ -260,7 +261,6 @@ static uint16_t printTraceLine(uint16_t tracepos, uint16_t traceLen, uint8_t *tr crcStatus = iso15693_CRC_check(frame, data_len); break; case PROTO_CRYPTORF: - case ISO_7816_4: case PROTO_HITAG1: case PROTO_HITAG2: case PROTO_HITAGS: @@ -413,6 +413,7 @@ static uint16_t printTraceLine(uint16_t tracepos, uint16_t traceLen, uint8_t *tr annotateTopaz(explanation, sizeof(explanation), frame, data_len); break; case ISO_7816_4: + annotateIso14443a(explanation, sizeof(explanation), frame, data_len); annotateIso7816(explanation, sizeof(explanation), frame, data_len); break; case ISO_15693: From 6641d0802d82e4369fd6e51e745979799e91643d Mon Sep 17 00:00:00 2001 From: Iceman Date: Sun, 6 Sep 2020 14:49:09 +0200 Subject: [PATCH 0387/1047] Update Windows-Installation-Instructions.md --- .../Windows-Installation-Instructions.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/md/Installation_Instructions/Windows-Installation-Instructions.md b/doc/md/Installation_Instructions/Windows-Installation-Instructions.md index bddb267bd..02e8a2201 100644 --- a/doc/md/Installation_Instructions/Windows-Installation-Instructions.md +++ b/doc/md/Installation_Instructions/Windows-Installation-Instructions.md @@ -15,7 +15,7 @@ There are two ways to install, build and use Proxmark3 on Windows: ## Driver Installation Install required drivers for your Windows installation. You may need admin privileges to do this. -Step by step guides are online such as [RiscCorps](https://store.ryscc.com/blogs/news/how-to-install-a-proxmark3-driver-on-windows-10). +Step by step guides are online such as [RyscCorps](https://store.ryscc.com/blogs/news/how-to-install-a-proxmark3-driver-on-windows-10). ## Download / clone ProxSpace repo From 4cf23357199209a35c0aca0ff1d1caa06bcdf483 Mon Sep 17 00:00:00 2001 From: Iceman Date: Sun, 6 Sep 2020 14:56:28 +0200 Subject: [PATCH 0388/1047] Update 4_Advanced-compilation-parameters.md --- doc/md/Use_of_Proxmark/4_Advanced-compilation-parameters.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/doc/md/Use_of_Proxmark/4_Advanced-compilation-parameters.md b/doc/md/Use_of_Proxmark/4_Advanced-compilation-parameters.md index 0780ec87b..4b7b665e7 100644 --- a/doc/md/Use_of_Proxmark/4_Advanced-compilation-parameters.md +++ b/doc/md/Use_of_Proxmark/4_Advanced-compilation-parameters.md @@ -80,17 +80,19 @@ Here are the supported values you can assign to `STANDALONE` in `Makefile.platfo | STANDALONE | DESCRIPTION | |-----------------|----------------------------------------| | | No standalone mode -| LF_SKELETON | standalone mode skeleton - Iceman +| LF_SKELETON | standalone mode skeleton - Iceman1001 | LF_EM4100EMUL | LF EM4100 simulator standalone mode - temskiy | LF_EM4100RSWB | LF EM4100 read/write/clone/brute mode - Monster1024 | LF_EM4100RWC | LF EM4100 read/write/clone mode - temskiy | LF_HIDBRUTE | HID corporate 1000 bruteforce - Federico dotta & Maurizio Agazzini -| LF_ICEHID | LF HID collector to flashmem - Iceman +| LF_ICEHID | LF HID collector to flashmem - Iceman1001 | LF_PROXBRUTE | HID ProxII bruteforce - Brad Antoniewicz | LF_SAMYRUN | HID26 read/clone/sim - Samy Kamkar | HF_14ASNIFF | 14a sniff storing to flashmem - Micolous +| HF_AVEFUL | MIFARE Ultralight read/simulation - Ave Ozkal | HF_BOG | 14a sniff with ULC/ULEV1/NTAG auth storing in flashmem - Bogito | HF_COLIN | Mifare ultra fast sniff/sim/clone - Colin Brigato +| HF_ICECLASS | iCLASS 4-1 mode sim/read & dump/loclass/glitch & config to flashmem - Iceman1001 | HF_LEGIC | HF Legic Prime standalone - uhei | HF_MATTYRUN | Mifare sniff/clone - Matías A. Ré Medina | HF_MSDSAL (def)| EMV Read and emulation - Salvador Mendoza From f8f5d878446e80a431f7840bdaabd869ba2f92b2 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sun, 6 Sep 2020 16:15:12 +0200 Subject: [PATCH 0389/1047] fix "hf mfu dump" bb malloc --- armsrc/mifarecmd.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/armsrc/mifarecmd.c b/armsrc/mifarecmd.c index decaf39fb..bfa6bb1cd 100644 --- a/armsrc/mifarecmd.c +++ b/armsrc/mifarecmd.c @@ -370,7 +370,7 @@ void MifareUReadCard(uint8_t arg0, uint16_t arg1, uint8_t arg2, uint8_t *datain) countblocks *= 4; - reply_mix(CMD_ACK, 1, countblocks, BigBuf_max_traceLen(), 0, 0); + reply_mix(CMD_ACK, 1, countblocks, dataout - BigBuf_get_addr(), 0, 0); FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); LEDsoff(); BigBuf_free(); From e0b491fc769bd445bc1490031f9b1469a30b931a Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sun, 6 Sep 2020 17:00:21 +0200 Subject: [PATCH 0390/1047] less messages --- client/src/cmdlf.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/src/cmdlf.c b/client/src/cmdlf.c index 832161cef..c4a0be2fd 100644 --- a/client/src/cmdlf.c +++ b/client/src/cmdlf.c @@ -372,7 +372,7 @@ int CmdLFCommandRead(const char *Cmd) { if (resp.status == PM3_SUCCESS) { if (i) { PrintAndLogEx(SUCCESS, "downloading response signal data"); - getSamples(0, true); + getSamples(0, false); return PM3_SUCCESS; } else { PrintAndLogEx(WARNING, "timeout while waiting for reply."); From e524c3e89eda2d4d0901cae2d3cd1d67fbd94309 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sun, 6 Sep 2020 17:02:51 +0200 Subject: [PATCH 0391/1047] less messages in t55xx --- client/src/cmdlft55xx.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/src/cmdlft55xx.c b/client/src/cmdlft55xx.c index 7deddedb1..44d9baf8c 100644 --- a/client/src/cmdlft55xx.c +++ b/client/src/cmdlft55xx.c @@ -829,7 +829,7 @@ static int CmdT55xxSetConfig(const char *Cmd) { return printConfiguration(config); } int T55xxReadBlock(uint8_t block, bool page1, bool usepwd, uint8_t override, uint32_t password, uint8_t downlink_mode) { - return T55xxReadBlockEx(block, page1, usepwd, override, password, downlink_mode, true); + return T55xxReadBlockEx(block, page1, usepwd, override, password, downlink_mode, false); } int T55xxReadBlockEx(uint8_t block, bool page1, bool usepwd, uint8_t override, uint32_t password, uint8_t downlink_mode, bool verbose) { From 8ae5fef830743e5f10d16500c95ea69b7bc9753a Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Sun, 6 Sep 2020 17:21:16 +0200 Subject: [PATCH 0392/1047] less messages in t55xx, arm side --- armsrc/lfops.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/armsrc/lfops.c b/armsrc/lfops.c index b9dbe64ea..682c4ac5b 100644 --- a/armsrc/lfops.c +++ b/armsrc/lfops.c @@ -2041,7 +2041,7 @@ void T55xxReadBlock(uint8_t page, bool pwd_mode, bool brute_mem, uint8_t block, // Acquisition // Now do the acquisition - DoPartialAcquisition(0, true, samples, 1000); + DoPartialAcquisition(0, false, samples, 1000); // Turn the field off if (brute_mem == false) { From 97a7349510b8c2349d52252f47e7235ee800a3ba Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Sun, 6 Sep 2020 17:41:55 +0200 Subject: [PATCH 0393/1047] hf search: fix 'no tag found' message display --- client/src/cmdhf.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/src/cmdhf.c b/client/src/cmdhf.c index ba3710e6e..bb2491e91 100644 --- a/client/src/cmdhf.c +++ b/client/src/cmdhf.c @@ -189,13 +189,13 @@ int CmdHFSearch(const char *Cmd) { */ PROMPT_CLEARLINE; + PROMPT_EMPTYLINE; if (res != PM3_SUCCESS) { - PrintAndLogEx(INPLACE, _RED_("No known/supported 13.56 MHz tags found")); + PrintAndLogEx(WARNING, _RED_("No known/supported 13.56 MHz tags found")); res = PM3_ESOFT; } - PROMPT_EMPTYLINE; return res; } From 3d18f44d35213b53736581e333d2dd4285933996 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Sun, 6 Sep 2020 17:48:01 +0200 Subject: [PATCH 0394/1047] hf search output: simplify prompt handling --- client/src/cmdhf.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/client/src/cmdhf.c b/client/src/cmdhf.c index bb2491e91..a58559945 100644 --- a/client/src/cmdhf.c +++ b/client/src/cmdhf.c @@ -84,8 +84,7 @@ static int usage_hf_tune(void) { return PM3_SUCCESS; } -#define PROMPT_CLEARLINE PrintAndLogEx(INPLACE, " ") -#define PROMPT_EMPTYLINE PrintAndLogEx(NORMAL, "\r "); +#define PROMPT_CLEARLINE PrintAndLogEx(INPLACE, " \r") int CmdHFSearch(const char *Cmd) { @@ -189,7 +188,6 @@ int CmdHFSearch(const char *Cmd) { */ PROMPT_CLEARLINE; - PROMPT_EMPTYLINE; if (res != PM3_SUCCESS) { PrintAndLogEx(WARNING, _RED_("No known/supported 13.56 MHz tags found")); From 47f1bd2d6c5e8aa44561fb70c0182f0a8a5c58df Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sun, 6 Sep 2020 18:32:23 +0200 Subject: [PATCH 0395/1047] lfsampling adaptations --- armsrc/lfsampling.c | 38 ++++++++++++++++++++++++-------------- 1 file changed, 24 insertions(+), 14 deletions(-) diff --git a/armsrc/lfsampling.c b/armsrc/lfsampling.c index 6d58250d1..eec8d7ab4 100644 --- a/armsrc/lfsampling.c +++ b/armsrc/lfsampling.c @@ -268,10 +268,10 @@ uint32_t DoAcquisition(uint8_t decimation, uint8_t bits_per_sample, bool avg, in initSampleBuffer(&sample_size); if (DBGLEVEL >= DBG_DEBUG) { - Dbprintf("lf sampling - after init"); printSamples(); } + bool trigger_hit = false; uint32_t cancel_counter = 0; int16_t checked = 0; @@ -279,7 +279,7 @@ uint32_t DoAcquisition(uint8_t decimation, uint8_t bits_per_sample, bool avg, in // only every 4000th times, in order to save time when collecting samples. // interruptible only when logging not yet triggered - if ((checked >= 4000) && (trigger_threshold > 0)) { + if ((checked >= 4000) && trigger_hit == false) { if (data_available()) { checked = -1; break; @@ -298,10 +298,11 @@ uint32_t DoAcquisition(uint8_t decimation, uint8_t bits_per_sample, bool avg, in if (AT91C_BASE_SSC->SSC_SR & AT91C_SSC_RXRDY) { volatile uint8_t sample = (uint8_t)AT91C_BASE_SSC->SSC_RHR; - // Testpoint 8 (TP8) can be used to trigger oscilliscope + // Test point 8 (TP8) can be used to trigger oscilloscope LED_D_OFF(); // threshold either high or low values 128 = center 0. if trigger = 178 + if (trigger_hit == false) { if ((trigger_threshold > 0) && (sample < (trigger_threshold + 128)) && (sample > (128 - trigger_threshold))) { if (cancel_after > 0) { cancel_counter++; @@ -310,8 +311,9 @@ uint32_t DoAcquisition(uint8_t decimation, uint8_t bits_per_sample, bool avg, in } continue; } + } - trigger_threshold = 0; + trigger_hit = true; if (samples_to_skip > 0) { samples_to_skip--; @@ -324,18 +326,19 @@ uint32_t DoAcquisition(uint8_t decimation, uint8_t bits_per_sample, bool avg, in } } - if (checked == -1 && verbose) { - Dbprintf("lf sampling aborted"); - } - if (verbose) { + if (checked == -1) { + Dbprintf("lf sampling aborted"); + } else if (cancel_counter == cancel_after) { + Dbprintf("lf sampling cancelled after %u", cancel_counter); + } + Dbprintf("Done, saved " _YELLOW_("%d")" out of " _YELLOW_("%d")" seen samples at " _YELLOW_("%d")" bits/sample", samples.total_saved, samples.counter, bits_per_sample); } // Ensure that DC offset removal and noise check is performed for any device-side processing removeSignalOffset(data.buffer, samples.total_saved); computeSignalProperties(data.buffer, samples.total_saved); - return data.numbits; } /** @@ -356,12 +359,19 @@ uint32_t DoAcquisition_config(bool verbose, uint32_t sample_size) { , config.trigger_threshold , verbose , sample_size - , 0 + , 0 // cancel_after , config.samples_to_skip); } uint32_t DoPartialAcquisition(int trigger_threshold, bool verbose, uint32_t sample_size, uint32_t cancel_after) { - return DoAcquisition(1, 8, 0, trigger_threshold, verbose, sample_size, cancel_after, 0); + return DoAcquisition(config.decimation + , config.bits_per_sample + , config.averaging + , trigger_threshold + , verbose + , sample_size + , cancel_after + , 0); // samples to skip } static uint32_t ReadLF(bool reader_field, bool verbose, uint32_t sample_size) { @@ -370,6 +380,7 @@ static uint32_t ReadLF(bool reader_field, bool verbose, uint32_t sample_size) { LFSetupFPGAForADC(config.divisor, reader_field); uint32_t ret = DoAcquisition_config(verbose, sample_size); + StopTicks(); FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); return ret; } @@ -495,7 +506,7 @@ void doCotagAcquisition(void) { bool firsthigh = false, firstlow = false; uint16_t i = 0, noise_counter = 0; - while ((i < bufsize) && (noise_counter < COTAG_T1 << 1)) { + while ((i < bufsize - 1) && (noise_counter < COTAG_T1 << 1)) { if (BUTTON_PRESS()) break; @@ -527,14 +538,13 @@ void doCotagAcquisition(void) { firstlow = true; } - if (++i < bufsize) { + ++i; if (sample > COTAG_ONE_THRESHOLD) { dest[i] = 255; } else if (sample < COTAG_ZERO_THRESHOLD) { dest[i] = 0; } else { dest[i] = dest[i - 1]; - } } } } From ae7fc5006e2021a5ea246e4dc83232cd3beda400 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sun, 6 Sep 2020 20:06:24 +0200 Subject: [PATCH 0396/1047] mergehell, piwi's legic changes --- armsrc/legicrf.c | 101 +++++++++++++++++++++++++---------------------- 1 file changed, 53 insertions(+), 48 deletions(-) diff --git a/armsrc/legicrf.c b/armsrc/legicrf.c index 1d2693347..e3ff018c6 100644 --- a/armsrc/legicrf.c +++ b/armsrc/legicrf.c @@ -64,11 +64,11 @@ static uint32_t last_frame_end; /* ts of last bit of previews rx or tx frame */ //----------------------------------------------------------------------------- // I/O interface abstraction (FPGA -> ARM) //----------------------------------------------------------------------------- -static uint8_t rx_byte_from_fpga(void) { +static uint16_t rx_frame_from_fpga(void) { for (;;) { WDT_HIT(); - // wait for byte be become available in rx holding register + // wait for frame be become available in rx holding register if (AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_RXRDY)) { return AT91C_BASE_SSC->SSC_RHR; } @@ -76,48 +76,53 @@ static uint8_t rx_byte_from_fpga(void) { } //----------------------------------------------------------------------------- -// Demodulation +// Demodulation (Reader) //----------------------------------------------------------------------------- -// Returns am aproximated power measurement +// Returns a demedulated bit // -// The FPGA running on the xcorrelation kernel samples the subcarrier at ~3 MHz. -// The kernel was initialy designed to receive BSPK/2-PSK. Hance, it reports an -// I/Q pair every 18.9us (8 bits i and 8 bits q). +// The FPGA running xcorrelation samples the subcarrier at ~13.56 MHz. The mode +// was initialy designed to receive BSPK/2-PSK. Hance, it reports an I/Q pair +// every 4.7us (8 bits i and 8 bits q). // // The subcarrier amplitude can be calculated using Pythagoras sqrt(i^2 + q^2). // To reduce CPU time the amplitude is approximated by using linear functions: // am = MAX(ABS(i),ABS(q)) + 1/2*MIN(ABS(i),ABSq)) // -// Note: The SSC receiver is never synchronized the calculation may be performed -// on a i/q pair from two subsequent correlations, but does not matter. -// Note: inlining this function would fail with -Os -static int32_t sample_power(void) { - int32_t q = (int8_t)rx_byte_from_fpga(); - q = ABS(q); - int32_t i = (int8_t)rx_byte_from_fpga(); - i = ABS(i); - - return MAX(i, q) + (MIN(i, q) >> 1); -} - -// Returns a demedulated bit +// The bit time is 99.1us (21 I/Q pairs). The receiver skips the first 5 samples +// and averages the next (most stable) 8 samples. The final 8 samples are dropped +// also. // -// An aproximated power measurement is available every 18.9us. The bit time -// is 100us. The code samples 5 times and uses the last (most stable) sample. +// The demodulated should be alligned to the bit period by the caller. This is +// done in rx_bit and rx_ack. // // Note: The demodulator would be drifting (18.9us * 5 != 100us), rx_frame // has a delay loop that aligns rx_bit calls to the TAG tx timeslots. - +// // Note: inlining this function would fail with -Os static bool rx_bit(void) { - int32_t power; + int32_t sum_cq = 0; + int32_t sum_ci = 0; - for (size_t i = 0; i < 5; ++i) { - power = sample_power(); - } + // skip first 5 I/Q pairs + for(size_t i = 0; i<5; ++i) { + (void)rx_frame_from_fpga(); + } - return (power > INPUT_THRESHOLD); + // sample next 8 I/Q pairs + for (uint8_t i = 0; i < 8; ++i) { + uint16_t iq = rx_frame_from_fpga(); + int8_t ci = (int8_t)(iq >> 8); + int8_t cq = (int8_t)(iq & 0xff); + sum_ci += ci; + sum_cq += cq; + } + + // calculate power + int32_t power = (MAX(ABS(sum_ci), ABS(sum_cq)) + (MIN(ABS(sum_ci), ABS(sum_cq)) >> 1)); + + // compare average (power / 8) to threshold + return ((power >> 3) > INPUT_THRESHOLD); } //----------------------------------------------------------------------------- @@ -131,18 +136,18 @@ static bool rx_bit(void) { static void tx_bit(bool bit) { // insert pause - LOW(GPIO_SSC_DOUT); + HIGH(GPIO_SSC_DOUT); last_frame_end += RWD_TIME_PAUSE; while (GET_TICKS < last_frame_end) { }; - HIGH(GPIO_SSC_DOUT); - // return to high, wait for bit periode to end + // return to carrier on, wait for bit periode to end + LOW(GPIO_SSC_DOUT); last_frame_end += (bit ? RWD_TIME_1 : RWD_TIME_0) - RWD_TIME_PAUSE; while (GET_TICKS < last_frame_end) { }; } //----------------------------------------------------------------------------- -// Frame Handling +// Frame Handling (Reader) // // The LEGIC RF protocol from card to reader does not include explicit frame // start/stop information or length information. The reader must know beforehand @@ -169,10 +174,10 @@ static void tx_frame(uint32_t frame, uint8_t len) { }; // add pause to mark end of the frame - LOW(GPIO_SSC_DOUT); + HIGH(GPIO_SSC_DOUT); last_frame_end += RWD_TIME_PAUSE; while (GET_TICKS < last_frame_end) { }; - HIGH(GPIO_SSC_DOUT); + LOW(GPIO_SSC_DOUT); // log uint8_t cmdbytes[] = {len, BYTEx(frame, 0), BYTEx(frame, 1), BYTEx(frame, 2)}; @@ -267,12 +272,12 @@ static int init_card(uint8_t cardtype, legic_card_select_t *p_card) { p_card->cmdsize = 0; p_card->addrsize = 0; p_card->cardsize = 0; - return 2; + return PM3_ESOFT; } - return 0; + return PM3_SUCCESS; } -static void init_reader(bool clear_mem) { +static void init_reader(void) { // configure FPGA FpgaDownloadAndGo(FPGA_BITSTREAM_HF); FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER | FPGA_HF_READER_SUBCARRIER_212_KHZ | FPGA_HF_READER_MODE_RECEIVE_IQ); @@ -285,7 +290,7 @@ static void init_reader(bool clear_mem) { // re-claim GPIO_SSC_DOUT as GPIO and enable output AT91C_BASE_PIOA->PIO_OER = GPIO_SSC_DOUT; AT91C_BASE_PIOA->PIO_PER = GPIO_SSC_DOUT; - HIGH(GPIO_SSC_DOUT); + LOW(GPIO_SSC_DOUT); // reserve a cardmem, meaning we can use the tracelog function in bigbuff easier. legic_mem = BigBuf_get_EM_addr(); @@ -406,11 +411,11 @@ legic_card_select_t *getLegicCardInfo(void) { void LegicRfInfo(void) { // configure ARM and FPGA - init_reader(false); + init_reader(); // establish shared secret and detect card type uint8_t card_type = setup_phase(0x01); - if (init_card(card_type, &card) != 0) { + if (init_card(card_type, &card) != PM3_SUCCESS) { reply_mix(CMD_ACK, 0, 0, 0, 0, 0); goto OUT; } @@ -446,11 +451,11 @@ int LegicRfReaderEx(uint16_t offset, uint16_t len, uint8_t iv) { int res = PM3_SUCCESS; // configure ARM and FPGA - init_reader(false); + init_reader(); // establish shared secret and detect card type uint8_t card_type = setup_phase(iv); - if (init_card(card_type, &card) != 0) { + if (init_card(card_type, &card) != PM3_SUCCESS) { res = PM3_ESOFT; goto OUT; } @@ -481,11 +486,11 @@ OUT: void LegicRfReader(uint16_t offset, uint16_t len, uint8_t iv) { // configure ARM and FPGA - init_reader(false); + init_reader(); // establish shared secret and detect card type uint8_t card_type = setup_phase(iv); - if (init_card(card_type, &card) != 0) { + if (init_card(card_type, &card) != PM3_SUCCESS) { reply_mix(CMD_ACK, 0, 0, 0, 0, 0); goto OUT; } @@ -518,7 +523,7 @@ OUT: void LegicRfWriter(uint16_t offset, uint16_t len, uint8_t iv, uint8_t *data) { // configure ARM and FPGA - init_reader(false); + init_reader(); // uid is not writeable if (offset <= WRITE_LOWERLIMIT) { @@ -528,7 +533,7 @@ void LegicRfWriter(uint16_t offset, uint16_t len, uint8_t iv, uint8_t *data) { // establish shared secret and detect card type uint8_t card_type = setup_phase(iv); - if (init_card(card_type, &card) != 0) { + if (init_card(card_type, &card) != PM3_SUCCESS) { reply_mix(CMD_ACK, 0, 0, 0, 0, 0); goto OUT; } @@ -539,8 +544,8 @@ void LegicRfWriter(uint16_t offset, uint16_t len, uint8_t iv, uint8_t *data) { } // write in reverse order, only then is DCF (decremental field) writable - while (len-- > 0 && !BUTTON_PRESS()) { - if (!write_byte(len + offset, data[len], card.addrsize)) { + while (len-- > 0 && BUTTON_PRESS() == false) { + if (write_byte(len + offset, data[len], card.addrsize) == false) { Dbprintf("operation failed | %02X | %02X | %02X", len + offset, len, data[len]); reply_mix(CMD_ACK, 0, 0, 0, 0, 0); goto OUT; From a928fade9ce2c2a63473197f1b093abda249e743 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sun, 6 Sep 2020 21:40:06 +0200 Subject: [PATCH 0397/1047] textual --- armsrc/mifaresim.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/armsrc/mifaresim.c b/armsrc/mifaresim.c index d0a70a528..ceeedf2d5 100644 --- a/armsrc/mifaresim.c +++ b/armsrc/mifaresim.c @@ -85,7 +85,6 @@ static bool IsTrailerAccessAllowed(uint8_t blockNo, uint8_t keytype, uint8_t act } } - static bool IsDataAccessAllowed(uint8_t blockNo, uint8_t keytype, uint8_t action) { uint8_t sector_trailer[16]; @@ -243,7 +242,7 @@ static bool MifareSimInit(uint16_t flags, uint8_t *datain, uint16_t atqa, uint8_ rSAK[0] = block0[7]; memcpy(rATQA, &block0[8], sizeof(rATQA)); } else { - Dbprintf("[-] ERROR: Invalid dump. UID/SAK/ATQA not found"); + Dbprintf("ERROR: " _RED_("Invalid dump. UID/SAK/ATQA not found")); return false; } } @@ -342,7 +341,7 @@ static bool MifareSimInit(uint16_t flags, uint8_t *datain, uint16_t atqa, uint8_ // Correct uid size bits in ATQA rATQA[0] = (rATQA[0] & 0x3f) | 0x80; // triple size uid } else { - Dbprintf("[-] ERROR: UID size not defined"); + Dbprintf("ERROR: " _RED_("UID size not defined")); return false; } if (flags & FLAG_FORCED_ATQA) { From 9d8618528718d2b7c957a106fbb72f8444693caa Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sun, 6 Sep 2020 21:40:19 +0200 Subject: [PATCH 0398/1047] textual --- armsrc/iso15693.c | 1 - 1 file changed, 1 deletion(-) diff --git a/armsrc/iso15693.c b/armsrc/iso15693.c index 428cf80ff..7ce267ec3 100644 --- a/armsrc/iso15693.c +++ b/armsrc/iso15693.c @@ -1715,7 +1715,6 @@ void SimTagIso15693(uint8_t *uid) { uint32_t reader_eof_time = 0; int cmd_len = GetIso15693CommandFromReader(cmd, sizeof(cmd), &reader_eof_time); if (cmd_len < 0) { - Dbprintf("button pressed, exiting"); button_pressed = true; exit_loop = true; break; From 718e6d2ce8a9a3b58388d0751e1bbf4d52fee669 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sun, 6 Sep 2020 21:41:04 +0200 Subject: [PATCH 0399/1047] hf legic sim -> text, use NG, report back --- armsrc/appmain.c | 7 +++++- armsrc/legicrfsim.c | 48 +++++++++++++++++++++++++++++++---------- armsrc/legicrfsim.h | 5 +++-- client/src/cmdhflegic.c | 34 +++++++++++++++++++++++++---- 4 files changed, 76 insertions(+), 18 deletions(-) diff --git a/armsrc/appmain.c b/armsrc/appmain.c index 99839ad12..53ca77793 100644 --- a/armsrc/appmain.c +++ b/armsrc/appmain.c @@ -1065,7 +1065,12 @@ static void PacketReceived(PacketCommandNG *packet) { #ifdef WITH_LEGICRF case CMD_HF_LEGIC_SIMULATE: { - LegicRfSimulate(packet->oldarg[0]); + struct p { + uint8_t tagtype; + bool send_reply; + } PACKED; + struct p *payload = (struct p *) packet->data.asBytes; + LegicRfSimulate(payload->tagtype, payload->send_reply); break; } case CMD_HF_LEGIC_WRITER: { diff --git a/armsrc/legicrfsim.c b/armsrc/legicrfsim.c index 2ca65f54a..f70536372 100644 --- a/armsrc/legicrfsim.c +++ b/armsrc/legicrfsim.c @@ -15,7 +15,7 @@ #include "crc.h" /* legic crc-4 */ #include "legic_prng.h" /* legic PRNG impl */ #include "legic.h" /* legic_card_select_t struct */ - +#include "cmd.h" #include "proxmark3_arm.h" #include "BigBuf.h" #include "fpgaloader.h" @@ -295,9 +295,9 @@ static int32_t init_card(uint8_t cardtype, legic_card_select_t *p_card) { p_card->cmdsize = 0; p_card->addrsize = 0; p_card->cardsize = 0; - return 2; + return PM3_ESOFT; } - return 0; + return PM3_SUCCESS; } static void init_tag(void) { @@ -455,23 +455,37 @@ static int32_t connected_phase(legic_card_select_t *p_card) { // Only this function is public / called from appmain.c //----------------------------------------------------------------------------- -void LegicRfSimulate(uint8_t cardtype) { +void LegicRfSimulate(uint8_t tagtype, bool send_reply) { // configure ARM and FPGA init_tag(); + int res = PM3_SUCCESS; // verify command line input - if (init_card(cardtype, &card) != 0) { - DbpString("[!] Unknown tagtype."); + if (init_card(tagtype, &card) != PM3_SUCCESS) { + DbpString("Unknown tagtype to simulate"); + res = PM3_ESOFT; goto OUT; } + uint16_t counter = 0; LED_A_ON(); - DbpString("[=] Starting Legic emulator, press " _YELLOW_("button") " to end"); - while (!BUTTON_PRESS() && !data_available()) { + + Dbprintf("Legic Prime, simulating uid: %02X%02X%02X%02X", legic_mem[0], legic_mem[1], legic_mem[2], legic_mem[3]); + + while (BUTTON_PRESS() == false) { WDT_HIT(); + + if (counter >= 2000) { + if (data_available()) { + res = PM3_EOPABORTED; + break; + } + counter = 0; + } + counter++; // wait for carrier, restart after timeout - if (!wait_for(RWD_PULSE, GetCountSspClk() + TAG_BIT_PERIOD)) { + if (wait_for(RWD_PULSE, GetCountSspClk() + TAG_BIT_PERIOD) == false) { continue; } @@ -481,13 +495,25 @@ void LegicRfSimulate(uint8_t cardtype) { } // conection is established, process commands until one fails - while (!connected_phase(&card)) { + while (connected_phase(&card) == false) { WDT_HIT(); } } OUT: - DbpString("[=] Sim stopped"); + + if (DBGLEVEL >= DBG_ERROR) { + Dbprintf("Emulator stopped. Tracing: %d trace length: %d ", get_tracing(), BigBuf_get_traceLen()); + } + + if (res == PM3_EOPABORTED) + DbpString("aborted by user"); + switch_off(); StopTicks(); + + if (send_reply) + reply_ng(CMD_HF_LEGIC_SIMULATE, res, NULL, 0); + + BigBuf_free_keep_EM(); } diff --git a/armsrc/legicrfsim.h b/armsrc/legicrfsim.h index f7be94165..0b0bdbd9c 100644 --- a/armsrc/legicrfsim.h +++ b/armsrc/legicrfsim.h @@ -1,7 +1,8 @@ //----------------------------------------------------------------------------- // (c) 2009 Henryk Plötz // 2018 AntiCat -// +// 2019 Piwi +// 2020 Iceman // This code is licensed to you under the terms of the GNU GPL, version 2 or, // at your option, any later version. See the LICENSE.txt file for the text of // the license. @@ -14,6 +15,6 @@ #include "common.h" -void LegicRfSimulate(uint8_t cardtype); +void LegicRfSimulate(uint8_t tagtype, bool send_reply); #endif /* __LEGICRFSIM_H */ diff --git a/client/src/cmdhflegic.c b/client/src/cmdhflegic.c index 8ae88b7fb..2a1282262 100644 --- a/client/src/cmdhflegic.c +++ b/client/src/cmdhflegic.c @@ -145,7 +145,7 @@ static int usage_legic_eload(void) { PrintAndLogEx(NORMAL, " f : filename w/o .bin to load"); PrintAndLogEx(NORMAL, ""); PrintAndLogEx(NORMAL, "Examples:"); - PrintAndLogEx(NORMAL, _YELLOW_(" hf legic eload 2 myfile")); + PrintAndLogEx(NORMAL, _YELLOW_(" hf legic eload 2 f myfile")); return PM3_SUCCESS; } static int usage_legic_esave(void) { @@ -582,13 +582,39 @@ static int CmdLegicRdbl(const char *Cmd) { } static int CmdLegicSim(const char *Cmd) { + char cmdp = tolower(param_getchar(Cmd, 0)); if (strlen(Cmd) == 0 || cmdp == 'h') return usage_legic_sim(); - uint64_t id = 1; - sscanf(Cmd, " %" SCNi64, &id); + struct { + uint8_t tagtype; + bool send_reply; + } PACKED payload; + + payload.send_reply = true; + payload.tagtype = param_get8ex(Cmd, 0, 1, 10); + if (payload.tagtype > 2 ) { + return usage_legic_sim(); + } + clearCommandBuffer(); - SendCommandMIX(CMD_HF_LEGIC_SIMULATE, id, 0, 0, NULL, 0); + SendCommandNG(CMD_HF_LEGIC_SIMULATE, (uint8_t *)&payload, sizeof(payload)); + PacketResponseNG resp; + + PrintAndLogEx(INFO, "Press pm3-button to abort simulation"); + bool keypress = kbd_enter_pressed(); + while (keypress == false) { + keypress = kbd_enter_pressed(); + + if (WaitForResponseTimeout(CMD_HF_LEGIC_SIMULATE, &resp, 1500)) { + break; + } + + } + if (keypress) + SendCommandNG(CMD_BREAK_LOOP, NULL, 0); + + PrintAndLogEx(INFO, "Done"); return PM3_SUCCESS; } From 53831a4a3c51f79ee32a6700928a3637ba03a661 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sun, 6 Sep 2020 21:42:50 +0200 Subject: [PATCH 0400/1047] adapt standalone --- armsrc/Standalone/hf_legic.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/armsrc/Standalone/hf_legic.c b/armsrc/Standalone/hf_legic.c index 73590268e..6ebe6eff6 100644 --- a/armsrc/Standalone/hf_legic.c +++ b/armsrc/Standalone/hf_legic.c @@ -22,7 +22,6 @@ #include "legic.h" // legic_card_select_t struct #include "spiffs.h" // flashmem - /* * To list all dump files from flash: * @@ -106,6 +105,7 @@ void RunMod(void) { FpgaDownloadAndGo(FPGA_BITSTREAM_HF); Dbprintf("[=] >> HF Legic Prime Read/Simulate Started <<"); DbpString("[=] press and HOLD button to exit standalone mode"); + for (;;) { WDT_HIT(); @@ -163,7 +163,7 @@ void RunMod(void) { } // The read data is migrated to a MIM1024 card - LegicRfSimulate(ct); + LegicRfSimulate(ct, false); } } From a1b37179ca893a9d1918f4e70166a2319c329ff6 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sun, 6 Sep 2020 21:49:55 +0200 Subject: [PATCH 0401/1047] mikron JSC russan ev1 @mceloff --- client/src/cmdhfmfu.c | 1 + 1 file changed, 1 insertion(+) diff --git a/client/src/cmdhfmfu.c b/client/src/cmdhfmfu.c index fc98385cc..bfa0982c7 100644 --- a/client/src/cmdhfmfu.c +++ b/client/src/cmdhfmfu.c @@ -1096,6 +1096,7 @@ uint32_t GetHF14AMfU_Type(void) { else if (memcmp(version, "\x00\x04\x03\x02\x01\x00\x0B", 7) == 0) { tagtype = UL_EV1_48; break; } else if (memcmp(version, "\x00\x04\x03\x01\x01\x00\x0E", 7) == 0) { tagtype = UL_EV1_128; break; } else if (memcmp(version, "\x00\x04\x03\x02\x01\x00\x0E", 7) == 0) { tagtype = UL_EV1_128; break; } + else if (memcmp(version, "\x00\x34\x21\x01\x01\x00\x0E", 7) == 0) { tagtype = UL_EV1_128; break; } // Mikron JSC Russia EV1 41 pages tag else if (memcmp(version, "\x00\x04\x04\x01\x01\x00\x0B", 7) == 0) { tagtype = NTAG_210; break; } else if (memcmp(version, "\x00\x04\x04\x01\x01\x00\x0E", 7) == 0) { tagtype = NTAG_212; break; } else if (memcmp(version, "\x00\x04\x04\x02\x01\x00\x0F", 7) == 0) { tagtype = NTAG_213; break; } From 007fc0893d1eb119d6c8a243bf78184aab5b05ca Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sun, 6 Sep 2020 21:56:20 +0200 Subject: [PATCH 0402/1047] some gen2 identification (@mceloff) --- CHANGELOG.md | 3 +++ armsrc/mifarecmd.c | 10 ++++++++++ 2 files changed, 13 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0392833f4..0db55155d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,9 @@ All notable changes to this project will be documented in this file. This project uses the changelog in accordance with [keepchangelog](http://keepachangelog.com/). Please use this to write notable changes, which is not the same as git commit log... ## [unreleased][unreleased] + - Mikron JSC Russia Ultralight EV1 41 pages tag type support (@McEloff) + - Add test for Ultralight gen2 magic 'hf search' (@McEloff) + - Add test for Ultralight EV1 gen2 magic 'hf search' (@McEloff) - Added `hf mf gen3*`magic gen 3 card operations (@McEloff) - Readded verichip command which seems missing (@iceman1001) - Fix missing t55x7 config block detection (@iceman1001) diff --git a/armsrc/mifarecmd.c b/armsrc/mifarecmd.c index bfa6bb1cd..63faa25d3 100644 --- a/armsrc/mifarecmd.c +++ b/armsrc/mifarecmd.c @@ -2248,6 +2248,16 @@ void MifareCIdent(void) { if (memcmp(buf, "\x0D\x78\x00\x71\x02\x88\x49\xA1\x30\x20\x15\x06\x08\x56\x3D", 15) == 0) { isGen = MAGIC_GEN_2; } + // test for Ultralight magic gen2 + if (memcmp(buf, "\x0A\x78\x00\x81\x02\xDB\xA0\xC1\x19\x40\x2A\xB5", 12) == 0) { + isGen = MAGIC_GEN_2; + goto OUT; + } + // test for Ultralight EV1 magic gen2 + if (memcmp(buf, "\x85\x00\x00\xA0\x00\x00\x0A\xC3\x00\x04\x03\x01\x01\x00\x0B\x03\x41\xDF", 18) == 0) { + isGen = MAGIC_GEN_2; + goto OUT; + } }; OUT: From b751354ea2ae11134b974ef7f303058239ff0c5c Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Mon, 7 Sep 2020 00:48:36 +0200 Subject: [PATCH 0403/1047] hf 14a: add config loopholes to deal with badly configured cards: invalid ATQA, invalid BCC, invalid SAK --- CHANGELOG.md | 1 + armsrc/appmain.c | 26 ++++++++-- armsrc/iso14443a.c | 96 +++++++++++++++++++++++++++++++----- armsrc/iso14443a.h | 3 ++ armsrc/lfsampling.c | 6 +-- armsrc/lfsampling.h | 2 +- client/src/cmdhf14a.c | 110 ++++++++++++++++++++++++++++++++++++++++++ client/src/cmdhf14a.h | 4 +- client/src/ui.h | 1 - include/ansi.h | 3 ++ include/pm3_cmd.h | 13 +++++ 11 files changed, 243 insertions(+), 22 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0db55155d..eccad5f86 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ All notable changes to this project will be documented in this file. This project uses the changelog in accordance with [keepchangelog](http://keepachangelog.com/). Please use this to write notable changes, which is not the same as git commit log... ## [unreleased][unreleased] + - Add `hf 14a config` to deal with badly configured cards: invalid ATQA/BCC/SAK (@doegox)" - Mikron JSC Russia Ultralight EV1 41 pages tag type support (@McEloff) - Add test for Ultralight gen2 magic 'hf search' (@McEloff) - Add test for Ultralight EV1 gen2 magic 'hf search' (@McEloff) diff --git a/armsrc/appmain.c b/armsrc/appmain.c index 53ca77793..1a62155b9 100644 --- a/armsrc/appmain.c +++ b/armsrc/appmain.c @@ -355,8 +355,11 @@ static void SendStatus(void) { I2C_print_status(); #endif #ifdef WITH_LF - printConfig(); // LF Sampling config + printLFConfig(); // LF Sampling config printT55xxConfig(); // LF T55XX Config +#endif +#ifdef WITH_ISO14443a + printHf14aConfig(); // HF 14a config #endif printConnSpeed(); DbpString(_CYAN_("Various")); @@ -739,7 +742,7 @@ static void PacketReceived(PacketCommandNG *packet) { break; } case CMD_LF_SAMPLING_PRINT_CONFIG: { - printConfig(); + printLFConfig(); break; } case CMD_LF_SAMPLING_GET_CONFIG: { @@ -1058,8 +1061,8 @@ static void PacketReceived(PacketCommandNG *packet) { uint8_t uid[8]; } PACKED; struct p *payload = (struct p *) packet->data.asBytes; - SetTag15693Uid(payload->uid); - break; + SetTag15693Uid(payload->uid); + break; } #endif @@ -1145,6 +1148,21 @@ static void PacketReceived(PacketCommandNG *packet) { #endif #ifdef WITH_ISO14443a + case CMD_HF_ISO14443A_PRINT_CONFIG: { + printHf14aConfig(); + break; + } + case CMD_HF_ISO14443A_GET_CONFIG: { + hf14a_config *hf14aconfig = getHf14aConfig(); + reply_ng(CMD_HF_ISO14443A_GET_CONFIG, PM3_SUCCESS, (uint8_t *)hf14aconfig, sizeof(hf14a_config)); + break; + } + case CMD_HF_ISO14443A_SET_CONFIG: { + hf14a_config c; + memcpy(&c, packet->data.asBytes, sizeof(hf14a_config)); + setHf14aConfig(&c); + break; + } case CMD_HF_ISO14443A_SNIFF: { SniffIso14443a(packet->data.asBytes[0]); reply_ng(CMD_HF_ISO14443A_SNIFF, PM3_SUCCESS, NULL, 0); diff --git a/armsrc/iso14443a.c b/armsrc/iso14443a.c index 97f17396a..d3563ceec 100644 --- a/armsrc/iso14443a.c +++ b/armsrc/iso14443a.c @@ -122,6 +122,47 @@ static uint32_t LastProxToAirDuration; #define SEC_Y 0x00 #define SEC_Z 0xc0 +/* +Default HF 14a config is set to: + forceanticol = false + obeybadbcc = false + forcecl2 = 0 (auto) + forcecl3 = 0 (auto) +*/ +static hf14a_config hf14aconfig = { 0, 0, 0, 0 } ; + +void printHf14aConfig(void) { + DbpString(_CYAN_("HF 14a config")); + Dbprintf("[a] Force std anticol.....%s", (hf14aconfig.forceanticol) ? _RED_("Yes") " (even if bad ATQA)" : _GREEN_("No")); + Dbprintf("[b] Force obey bad BCC....%s", (hf14aconfig.obeybadbcc) ? _RED_("Yes") : _GREEN_("No")); + Dbprintf("[2] Force CL2 override ...%s%s%s", (hf14aconfig.forcecl2==0) ? _GREEN_("No") : "", (hf14aconfig.forcecl2==1) ? _RED_("Yes: Always do CL2") : "", (hf14aconfig.forcecl2==-1) ? _RED_("Yes: Always skip CL2") : ""); + Dbprintf("[3] Force CL3 override ...%s%s%s", (hf14aconfig.forcecl3==0) ? _GREEN_("No") : "", (hf14aconfig.forcecl3==1) ? _RED_("Yes: Always do CL3") : "", (hf14aconfig.forcecl3==-1) ? _RED_("Yes: Always skip CL3") : ""); +} + +/** + * Called from the USB-handler to set the 14a configuration + * The 14a config is used for card selection sequence. + * + * Values set to '-1' implies no change + * @brief setSamplingConfig + * @param sc + */ +void setHf14aConfig(hf14a_config *hc) { + + if (hc->forceanticol > -1) + hf14aconfig.forceanticol = (hc->forceanticol > 0) ? 1 : 0; + if (hc->obeybadbcc > -1) + hf14aconfig.obeybadbcc = (hc->obeybadbcc > 0) ? 1 : 0; + if ((hc->forcecl2 >= -1) && (hc->forcecl2 <= 1)) + hf14aconfig.forcecl2 = hc->forcecl2; + if ((hc->forcecl3 >= -1) && (hc->forcecl3 <= 1)) + hf14aconfig.forcecl3 = hc->forcecl3; +} + +hf14a_config *getHf14aConfig(void) { + return &hf14aconfig; +} + void iso14a_set_trigger(bool enable) { g_trigger = enable; } @@ -2335,7 +2376,8 @@ int iso14443a_select_card(uint8_t *uid_ptr, iso14a_card_select_t *p_card, uint32 uint8_t resp[MAX_FRAME_SIZE] = {0}; // theoretically. A usual RATS will be much smaller uint8_t resp_par[MAX_PARITY_SIZE] = {0}; - uint8_t sak = 0x04; // cascade uid + uint8_t sak; // cascade uid + bool do_cascade = 1; int cascade_level = 0; if (p_card) { @@ -2359,17 +2401,19 @@ int iso14443a_select_card(uint8_t *uid_ptr, iso14a_card_select_t *p_card, uint32 memset(uid_ptr, 0, 10); } - // check for proprietary anticollision: - if ((resp[0] & 0x1F) == 0) return 3; + if ( ! hf14aconfig.forceanticol ) { + // check for proprietary anticollision: + if ((resp[0] & 0x1F) == 0) return 3; + } // OK we will select at least at cascade 1, lets see if first byte of UID was 0x88 in // which case we need to make a cascade 2 request and select - this is a long UID // While the UID is not complete, the 3nd bit (from the right) is set in the SAK. - for (; sak & 0x04; cascade_level++) { + for (; do_cascade; cascade_level++) { // SELECT_* (L1: 0x93, L2: 0x95, L3: 0x97) uint8_t sel_all[] = { ISO14443A_CMD_ANTICOLL_OR_SELECT, 0x20 }; uint8_t sel_uid[] = { ISO14443A_CMD_ANTICOLL_OR_SELECT, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; - uint8_t uid_resp[4] = {0}; + uint8_t uid_resp[5] = {0}; // UID + original BCC sel_uid[0] = sel_all[0] = 0x93 + cascade_level * 2; if (anticollision) { @@ -2378,7 +2422,7 @@ int iso14443a_select_card(uint8_t *uid_ptr, iso14a_card_select_t *p_card, uint32 if (!ReaderReceive(resp, resp_par)) return 0; if (Demod.collisionPos) { // we had a collision and need to construct the UID bit by bit - memset(uid_resp, 0, 4); + memset(uid_resp, 0, 5); uint16_t uid_resp_bits = 0; uint16_t collision_answer_offset = 0; // anti-collision-loop: @@ -2390,7 +2434,7 @@ int iso14443a_select_card(uint8_t *uid_ptr, iso14a_card_select_t *p_card, uint32 } uid_resp[uid_resp_bits / 8] |= 1 << (uid_resp_bits % 8); // next time select the card(s) with a 1 in the collision position uid_resp_bits++; - // construct anticollosion command: + // construct anticollision command: sel_uid[1] = ((2 + uid_resp_bits / 8) << 4) | (uid_resp_bits & 0x07); // length of data in bytes and bits for (uint16_t i = 0; i <= uid_resp_bits / 8; i++) { sel_uid[2 + i] = uid_resp[i]; @@ -2406,7 +2450,7 @@ int iso14443a_select_card(uint8_t *uid_ptr, iso14a_card_select_t *p_card, uint32 } } else { // no collision, use the response to SELECT_ALL as current uid - memcpy(uid_resp, resp, 4); + memcpy(uid_resp, resp, 5); // UID + original BCC } } else { @@ -2425,8 +2469,22 @@ int iso14443a_select_card(uint8_t *uid_ptr, iso14a_card_select_t *p_card, uint32 // Construct SELECT UID command sel_uid[1] = 0x70; // transmitting a full UID (1 Byte cmd, 1 Byte NVB, 4 Byte UID, 1 Byte BCC, 2 Bytes CRC) - memcpy(sel_uid + 2, uid_resp, 4); // the UID received during anticollision, or the provided UID - sel_uid[6] = sel_uid[2] ^ sel_uid[3] ^ sel_uid[4] ^ sel_uid[5]; // calculate and add BCC + + if (anticollision) { + memcpy(sel_uid + 2, uid_resp, 5); // the UID received during anticollision with original BCC + uint8_t bcc = sel_uid[2] ^ sel_uid[3] ^ sel_uid[4] ^ sel_uid[5]; // calculate BCC + if (sel_uid[6] != bcc) { + Dbprintf("BCC%d incorrect, got 0x%02x, expected 0x%02x. Will use " NOLF, cascade_level, sel_uid[6], bcc); + if (! hf14aconfig.obeybadbcc) { + sel_uid[6] = bcc; + } + Dbprintf("0x%02x", sel_uid[6]); + } + } else { + memcpy(sel_uid + 2, uid_resp, 4); // the provided UID + sel_uid[6] = sel_uid[2] ^ sel_uid[3] ^ sel_uid[4] ^ sel_uid[5]; // calculate and add BCC + } + AddCrc14A(sel_uid, 7); // calculate and add CRC ReaderTransmit(sel_uid, sizeof(sel_uid), NULL); @@ -2436,7 +2494,21 @@ int iso14443a_select_card(uint8_t *uid_ptr, iso14a_card_select_t *p_card, uint32 sak = resp[0]; // Test if more parts of the uid are coming - if ((sak & 0x04) /* && uid_resp[0] == 0x88 */) { + do_cascade = (((sak & 0x04) /* && uid_resp[0] == 0x88 */) > 0); + if (cascade_level==0) { + if (hf14aconfig.forcecl2==-1) { + do_cascade = false; + } else if (hf14aconfig.forcecl2==1) { + do_cascade = true; + } // else 0==auto + } else if (cascade_level==1) { + if (hf14aconfig.forcecl3==-1) { + do_cascade = false; + } else if (hf14aconfig.forcecl3==1) { + do_cascade = true; + } // else 0==auto + } + if (do_cascade) { // Remove first byte, 0x88 is not an UID byte, it CT, see page 3 of: // http://www.nxp.com/documents/application_note/AN10927.pdf uid_resp[0] = uid_resp[1]; @@ -2458,7 +2530,7 @@ int iso14443a_select_card(uint8_t *uid_ptr, iso14a_card_select_t *p_card, uint32 p_card->sak = sak; } - // PICC compilant with iso14443a-4 ---> (SAK & 0x20 != 0) + // PICC compliant with iso14443a-4 ---> (SAK & 0x20 != 0) if ((sak & 0x20) == 0) return 2; // RATS, Request for answer to select diff --git a/armsrc/iso14443a.h b/armsrc/iso14443a.h index 94b1d5a2d..d1df5534c 100644 --- a/armsrc/iso14443a.h +++ b/armsrc/iso14443a.h @@ -96,6 +96,9 @@ typedef struct { # define CheckCrc14A(data, len) check_crc(CRC_14443_A, (data), (len)) #endif +void printHf14aConfig(void); +void setHf14aConfig(hf14a_config *hc); +hf14a_config *getHf14aConfig(void); void iso14a_set_timeout(uint32_t timeout); uint32_t iso14a_get_timeout(void); diff --git a/armsrc/lfsampling.c b/armsrc/lfsampling.c index eec8d7ab4..d5f66c22e 100644 --- a/armsrc/lfsampling.c +++ b/armsrc/lfsampling.c @@ -36,7 +36,7 @@ static BitstreamOut data = {0, 0, 0}; // internal struct to keep track of samples gathered static sampling_t samples = {0, 0, 0, 0}; -void printConfig(void) { +void printLFConfig(void) { uint32_t d = config.divisor; DbpString(_CYAN_("LF Sampling config")); Dbprintf(" [q] divisor.............%d ( "_GREEN_("%d.%02d kHz")" )", d, 12000 / (d + 1), ((1200000 + (d + 1) / 2) / (d + 1)) - ((12000 / (d + 1)) * 100)); @@ -97,7 +97,7 @@ void setSamplingConfig(sample_config *sc) { config.samples_to_skip = sc->samples_to_skip; if (sc->verbose) - printConfig(); + printLFConfig(); } sample_config *getSamplingConfig(void) { @@ -376,7 +376,7 @@ uint32_t DoPartialAcquisition(int trigger_threshold, bool verbose, uint32_t samp static uint32_t ReadLF(bool reader_field, bool verbose, uint32_t sample_size) { if (verbose) - printConfig(); + printLFConfig(); LFSetupFPGAForADC(config.divisor, reader_field); uint32_t ret = DoAcquisition_config(verbose, sample_size); diff --git a/armsrc/lfsampling.h b/armsrc/lfsampling.h index 137738163..f60324d70 100644 --- a/armsrc/lfsampling.h +++ b/armsrc/lfsampling.h @@ -99,7 +99,7 @@ void setSamplingConfig(sample_config *sc); sample_config *getSamplingConfig(void); -void printConfig(void); +void printLFConfig(void); void printSamples(void); #endif // __LFSAMPLING_H diff --git a/client/src/cmdhf14a.c b/client/src/cmdhf14a.c index 6ce4d077e..46daffefe 100644 --- a/client/src/cmdhf14a.c +++ b/client/src/cmdhf14a.c @@ -168,6 +168,23 @@ const char *getTagInfo(uint8_t uid) { static uint16_t frameLength = 0; uint16_t atsFSC[] = {16, 24, 32, 40, 48, 64, 96, 128, 256}; +static int usage_hf_14a_config(void) { + PrintAndLogEx(NORMAL, "Usage: hf 14a config [a 0|1] [b 0|1]"); + PrintAndLogEx(NORMAL, "Options:"); + PrintAndLogEx(NORMAL, " h This help"); + PrintAndLogEx(NORMAL, " a 0|1 Force standard anticollision sequence even if ATQA tells not to do it"); + PrintAndLogEx(NORMAL, " b 0|1 Obey bad BCC in anticollision sequence"); + PrintAndLogEx(NORMAL, " 2 0|1|-1 Override CL2 decision: 0=auto, 1=always perform CL2, -1=never perform CL2"); + PrintAndLogEx(NORMAL, " 3 0|1|-1 Override CL3 decision: 0=auto, 1=always perform CL3, -1=never perform CL3"); + PrintAndLogEx(NORMAL, "Examples:"); + PrintAndLogEx(NORMAL, _YELLOW_(" hf 14a config ")" Print current configuration"); + PrintAndLogEx(NORMAL, _YELLOW_(" hf 14a config a ")" Force standard anticollision"); + PrintAndLogEx(NORMAL, _YELLOW_(" hf 14a config a 0 ")" Restore ATQA interpretation"); + PrintAndLogEx(NORMAL, _YELLOW_(" hf 14a config b ")" Force obey bad BCC in anticollision"); + PrintAndLogEx(NORMAL, _YELLOW_(" hf 14a config b 0 ")" Restore BCC computation in anticollision"); + return PM3_SUCCESS; +} + static int usage_hf_14a_sim(void) { // PrintAndLogEx(NORMAL, "\n Emulating ISO/IEC 14443 type A tag with 4,7 or 10 byte UID\n"); PrintAndLogEx(NORMAL, "\n Emulating ISO/IEC 14443 type A tag with 4,7 byte UID\n"); @@ -234,6 +251,98 @@ static int CmdHF14AList(const char *Cmd) { return 0; } +int hf14a_getconfig(hf14a_config *config) { + if (!session.pm3_present) return PM3_ENOTTY; + + if (config == NULL) + return PM3_EINVARG; + + clearCommandBuffer(); + + SendCommandNG(CMD_HF_ISO14443A_GET_CONFIG, NULL, 0); + PacketResponseNG resp; + if (!WaitForResponseTimeout(CMD_HF_ISO14443A_GET_CONFIG, &resp, 2000)) { + PrintAndLogEx(WARNING, "command execution time out"); + return PM3_ETIMEOUT; + } + memcpy(config, resp.data.asBytes, sizeof(hf14a_config)); + return PM3_SUCCESS; +} + +int hf14a_setconfig(hf14a_config *config) { + if (!session.pm3_present) return PM3_ENOTTY; + + clearCommandBuffer(); + if (config != NULL) + SendCommandNG(CMD_HF_ISO14443A_SET_CONFIG, (uint8_t *)config, sizeof(hf14a_config)); + else + SendCommandNG(CMD_HF_ISO14443A_PRINT_CONFIG, NULL, 0); + + return PM3_SUCCESS; +} + +static int CmdHf14AConfig(const char *Cmd) { + + if (!session.pm3_present) return PM3_ENOTTY; + + // if called with no params, just print the device config + if (strlen(Cmd) == 0) { + return hf14a_setconfig(NULL); + } + + hf14a_config config = { + .forceanticol = -1, + .obeybadbcc = -1, + .forcecl2 = -2, + .forcecl3 = -2 + }; + + bool errors = false; + char cl[3] = {0}; + uint8_t cmdp = 0; + while (param_getchar(Cmd, cmdp) != 0x00 && !errors) { + switch (param_getchar(Cmd, cmdp)) { + case 'h': + return usage_hf_14a_config(); + case 'a': + config.forceanticol = (param_getchar(Cmd, cmdp + 1) == '1'); + cmdp += 2; + break; + case 'b': + config.obeybadbcc = (param_getchar(Cmd, cmdp + 1) == '1'); + cmdp += 2; + break; + case '2': + param_getstr(Cmd, cmdp + 1, cl, sizeof(cl)); + if (strcmp(cl, "-1") == 0) { + config.forcecl2 = -1; + } else { + config.forcecl2 = strcmp(cl, "1") == 0; + } + cmdp += 2; + break; + case '3': + param_getstr(Cmd, cmdp + 1, cl, sizeof(cl)); + if (strcmp(cl, "-1") == 0) { + config.forcecl3 = -1; + } else { + config.forcecl3 = strcmp(cl, "1") == 0; + } + cmdp += 2; + break; + default: + PrintAndLogEx(WARNING, "Unknown parameter '%c'", param_getchar(Cmd, cmdp)); + errors = 1; + break; + } + } + + // validations + if (errors) return usage_hf_14a_config(); + + return hf14a_setconfig(&config); +} + int Hf14443_4aGetCardData(iso14a_card_select_t *card) { SendCommandMIX(CMD_HF_ISO14443A_READER, ISO14A_CONNECT, 0, 0, NULL, 0); @@ -1241,6 +1350,7 @@ static command_t CommandTable[] = { {"chaining", CmdHF14AChaining, IfPm3Iso14443a, "Control ISO 14443-4 input chaining"}, {"raw", CmdHF14ACmdRaw, IfPm3Iso14443a, "Send raw hex data to tag"}, {"antifuzz", CmdHF14AAntiFuzz, IfPm3Iso14443a, "Fuzzing the anticollision phase. Warning! Readers may react strange"}, + {"config", CmdHf14AConfig, IfPm3Iso14443a, "Configure 14a settings (use with caution)"}, {NULL, NULL, NULL, NULL} }; diff --git a/client/src/cmdhf14a.h b/client/src/cmdhf14a.h index 83fb2c69d..925bf8bef 100644 --- a/client/src/cmdhf14a.h +++ b/client/src/cmdhf14a.h @@ -13,7 +13,7 @@ #define CMDHF14A_H__ #include "common.h" - +#include "pm3_cmd.h" //hf14a_config #include "mifare.h" // structs // structure and database for uid -> tagtype lookups @@ -26,6 +26,8 @@ int CmdHF14A(const char *Cmd); int CmdHF14ASniff(const char *Cmd); // used by hf topaz sniff int CmdHF14ASim(const char *Cmd); // used by hf mfu sim +int hf14a_getconfig(hf14a_config *config); +int hf14a_setconfig(hf14a_config *config); int infoHF14A(bool verbose, bool do_nack_test, bool do_aid_search); const char *getTagInfo(uint8_t uid); int Hf14443_4aGetCardData(iso14a_card_select_t *card); diff --git a/client/src/ui.h b/client/src/ui.h index b466b9c84..7a5b7911d 100644 --- a/client/src/ui.h +++ b/client/src/ui.h @@ -22,7 +22,6 @@ extern "C" { #define _USE_MATH_DEFINES typedef enum logLevel {NORMAL, SUCCESS, INFO, FAILED, WARNING, ERR, DEBUG, INPLACE, HINT} logLevel_t; -#define NOLF "\xff" typedef enum emojiMode {ALIAS, EMOJI, ALTTEXT, ERASE} emojiMode_t; typedef enum clientdebugLevel {cdbOFF, cdbSIMPLE, cdbFULL} clientdebugLevel_t; // typedef enum devicedebugLevel {ddbOFF, ddbERROR, ddbINFO, ddbDEBUG, ddbEXTENDED} devicedebugLevel_t; diff --git a/include/ansi.h b/include/ansi.h index 6c808d10e..27d0dc2e7 100644 --- a/include/ansi.h +++ b/include/ansi.h @@ -1,6 +1,9 @@ #ifndef __ANSI_H #define __ANSI_H +// Not ANSI but dirty trick to specify we don't want a \n +#define NOLF "\xff" + #define AEND "\x1b[0m" #define _BLUE_(s) "\x1b[34m" s AEND diff --git a/include/pm3_cmd.h b/include/pm3_cmd.h index 21409bbec..5dbf3631a 100644 --- a/include/pm3_cmd.h +++ b/include/pm3_cmd.h @@ -122,6 +122,14 @@ typedef struct { bool verbose; } PACKED sample_config; +// A struct used to send hf14a-configs over USB +typedef struct { + int8_t forceanticol; // bool but also -1 if to be ignored + int8_t obeybadbcc; // bool but also -1 if to be ignored + int8_t forcecl2; // 0:auto 1:force executing CL2 -1:force skipping CL2 + int8_t forcecl3; // 0:auto 1:force executing CL3 -1:force skipping CL3 +} PACKED hf14a_config; + // Tracelog Header struct typedef struct { uint32_t timestamp; @@ -569,6 +577,11 @@ typedef struct { #define CMD_HF_FELICALITE_DUMP 0x03AA #define CMD_HF_FELICALITE_SIMULATE 0x03AB +// For 14a config +#define CMD_HF_ISO14443A_PRINT_CONFIG 0x03B0 +#define CMD_HF_ISO14443A_GET_CONFIG 0x03B1 +#define CMD_HF_ISO14443A_SET_CONFIG 0x03B2 + // For measurements of the antenna tuning #define CMD_MEASURE_ANTENNA_TUNING 0x0400 #define CMD_MEASURE_ANTENNA_TUNING_HF 0x0401 From 289f1c234c82faa828f94e8331bad17f14195883 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Mon, 7 Sep 2020 10:21:29 +0200 Subject: [PATCH 0404/1047] make sure magic wipe cmd gets 2000ms timeout --- armsrc/mifarecmd.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/armsrc/mifarecmd.c b/armsrc/mifarecmd.c index 63faa25d3..b07772107 100644 --- a/armsrc/mifarecmd.c +++ b/armsrc/mifarecmd.c @@ -2062,6 +2062,12 @@ void MifareCSetBlock(uint32_t arg0, uint32_t arg1, uint8_t *datain) { errormsg = MAGIC_WIPE; break; } + + uint32_t old_timeout = iso14a_get_timeout(); + + // 2000 ms timeout + // 13560000 / 1000 / (8 * 16) * timeout + iso14a_set_timeout(21190); ReaderTransmit(wipeC, sizeof(wipeC), NULL); if (!ReaderReceive(receivedAnswer, receivedAnswerPar) || (receivedAnswer[0] != 0x0a)) { @@ -2069,6 +2075,7 @@ void MifareCSetBlock(uint32_t arg0, uint32_t arg1, uint8_t *datain) { errormsg = MAGIC_WIPE; break; } + iso14a_set_timeout(old_timeout); mifare_classic_halt_ex(NULL); } From 2fc36d73c99d45344538ee07042c850a1423e93e Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Mon, 7 Sep 2020 10:24:04 +0200 Subject: [PATCH 0405/1047] hf 14a config: better options --- armsrc/iso14443a.c | 57 +++++++++++++++----------- client/src/cmdhf14a.c | 93 ++++++++++++++++++++++++++++++++----------- include/pm3_cmd.h | 8 ++-- 3 files changed, 106 insertions(+), 52 deletions(-) diff --git a/armsrc/iso14443a.c b/armsrc/iso14443a.c index d3563ceec..8a325aa2d 100644 --- a/armsrc/iso14443a.c +++ b/armsrc/iso14443a.c @@ -124,8 +124,8 @@ static uint32_t LastProxToAirDuration; /* Default HF 14a config is set to: - forceanticol = false - obeybadbcc = false + forceanticol = 0 (auto) + forcebcc = 0 (expect valid BCC) forcecl2 = 0 (auto) forcecl3 = 0 (auto) */ @@ -133,10 +133,10 @@ static hf14a_config hf14aconfig = { 0, 0, 0, 0 } ; void printHf14aConfig(void) { DbpString(_CYAN_("HF 14a config")); - Dbprintf("[a] Force std anticol.....%s", (hf14aconfig.forceanticol) ? _RED_("Yes") " (even if bad ATQA)" : _GREEN_("No")); - Dbprintf("[b] Force obey bad BCC....%s", (hf14aconfig.obeybadbcc) ? _RED_("Yes") : _GREEN_("No")); - Dbprintf("[2] Force CL2 override ...%s%s%s", (hf14aconfig.forcecl2==0) ? _GREEN_("No") : "", (hf14aconfig.forcecl2==1) ? _RED_("Yes: Always do CL2") : "", (hf14aconfig.forcecl2==-1) ? _RED_("Yes: Always skip CL2") : ""); - Dbprintf("[3] Force CL3 override ...%s%s%s", (hf14aconfig.forcecl3==0) ? _GREEN_("No") : "", (hf14aconfig.forcecl3==1) ? _RED_("Yes: Always do CL3") : "", (hf14aconfig.forcecl3==-1) ? _RED_("Yes: Always skip CL3") : ""); + Dbprintf("[a] Anticol override......%s%s%s", (hf14aconfig.forceanticol==0) ? _GREEN_("No") " (follow standard)" : "", (hf14aconfig.forceanticol==1) ? _RED_("Yes: Always do anticol") : "", (hf14aconfig.forceanticol==2) ? _RED_("Yes: Always skip anticol") : ""); + Dbprintf("[b] BCC override..........%s%s%s", (hf14aconfig.forcebcc==0) ? _GREEN_("No") " (follow standard)" : "", (hf14aconfig.forcebcc==1) ? _RED_("Yes: Always do CL2") : "", (hf14aconfig.forcebcc==2) ? _RED_("Yes: Always use card BCC") : ""); + Dbprintf("[2] CL2 override..........%s%s%s", (hf14aconfig.forcecl2==0) ? _GREEN_("No") " (follow standard)" : "", (hf14aconfig.forcecl2==1) ? _RED_("Yes: Always do CL2") : "", (hf14aconfig.forcecl2==2) ? _RED_("Yes: Always skip CL2") : ""); + Dbprintf("[3] CL3 override..........%s%s%s", (hf14aconfig.forcecl3==0) ? _GREEN_("No") " (follow standard)" : "", (hf14aconfig.forcecl3==1) ? _RED_("Yes: Always do CL3") : "", (hf14aconfig.forcecl3==2) ? _RED_("Yes: Always skip CL3") : ""); } /** @@ -149,13 +149,13 @@ void printHf14aConfig(void) { */ void setHf14aConfig(hf14a_config *hc) { - if (hc->forceanticol > -1) - hf14aconfig.forceanticol = (hc->forceanticol > 0) ? 1 : 0; - if (hc->obeybadbcc > -1) - hf14aconfig.obeybadbcc = (hc->obeybadbcc > 0) ? 1 : 0; - if ((hc->forcecl2 >= -1) && (hc->forcecl2 <= 1)) + if ((hc->forceanticol >= 0) && (hc->forceanticol <= 2)) + hf14aconfig.forceanticol = hc->forceanticol; + if ((hc->forcebcc >= 0) && (hc->forcebcc <= 2)) + hf14aconfig.forcebcc = hc->forcebcc; + if ((hc->forcecl2 >= 0) && (hc->forcecl2 <= 2)) hf14aconfig.forcecl2 = hc->forcecl2; - if ((hc->forcecl3 >= -1) && (hc->forcecl3 <= 1)) + if ((hc->forcecl3 >= 0) && (hc->forcecl3 <= 2)) hf14aconfig.forcecl3 = hc->forcecl3; } @@ -2401,10 +2401,12 @@ int iso14443a_select_card(uint8_t *uid_ptr, iso14a_card_select_t *p_card, uint32 memset(uid_ptr, 0, 10); } - if ( ! hf14aconfig.forceanticol ) { + if ( hf14aconfig.forceanticol == 0 ) { // check for proprietary anticollision: if ((resp[0] & 0x1F) == 0) return 3; - } + } else if ( hf14aconfig.forceanticol == 2 ) { + return 3; // force skipping anticol + } // else force executing // OK we will select at least at cascade 1, lets see if first byte of UID was 0x88 in // which case we need to make a cascade 2 request and select - this is a long UID @@ -2419,8 +2421,10 @@ int iso14443a_select_card(uint8_t *uid_ptr, iso14a_card_select_t *p_card, uint32 if (anticollision) { // SELECT_ALL ReaderTransmit(sel_all, sizeof(sel_all), NULL); - if (!ReaderReceive(resp, resp_par)) return 0; - + if (!ReaderReceive(resp, resp_par)) { + Dbprintf("Card didn't answer to CL%i select all", cascade_level + 1); + return 0; + } if (Demod.collisionPos) { // we had a collision and need to construct the UID bit by bit memset(uid_resp, 0, 5); uint16_t uid_resp_bits = 0; @@ -2474,11 +2478,14 @@ int iso14443a_select_card(uint8_t *uid_ptr, iso14a_card_select_t *p_card, uint32 memcpy(sel_uid + 2, uid_resp, 5); // the UID received during anticollision with original BCC uint8_t bcc = sel_uid[2] ^ sel_uid[3] ^ sel_uid[4] ^ sel_uid[5]; // calculate BCC if (sel_uid[6] != bcc) { - Dbprintf("BCC%d incorrect, got 0x%02x, expected 0x%02x. Will use " NOLF, cascade_level, sel_uid[6], bcc); - if (! hf14aconfig.obeybadbcc) { + Dbprintf("BCC%d incorrect, got 0x%02x, expected 0x%02x", cascade_level, sel_uid[6], bcc); + if (hf14aconfig.forcebcc==0) { + Dbprintf("Aborting"); + return 0; + } else if (hf14aconfig.forcebcc==1) { sel_uid[6] = bcc; - } - Dbprintf("0x%02x", sel_uid[6]); + } // else use card BCC + Dbprintf("Using BCC=" _YELLOW_("0x%02x") " to perform anticollision", sel_uid[6]); } } else { memcpy(sel_uid + 2, uid_resp, 4); // the provided UID @@ -2489,20 +2496,22 @@ int iso14443a_select_card(uint8_t *uid_ptr, iso14a_card_select_t *p_card, uint32 ReaderTransmit(sel_uid, sizeof(sel_uid), NULL); // Receive the SAK - if (!ReaderReceive(resp, resp_par)) return 0; - + if (!ReaderReceive(resp, resp_par)) { + Dbprintf("Card didn't answer to select"); + return 0; + } sak = resp[0]; // Test if more parts of the uid are coming do_cascade = (((sak & 0x04) /* && uid_resp[0] == 0x88 */) > 0); if (cascade_level==0) { - if (hf14aconfig.forcecl2==-1) { + if (hf14aconfig.forcecl2==2) { do_cascade = false; } else if (hf14aconfig.forcecl2==1) { do_cascade = true; } // else 0==auto } else if (cascade_level==1) { - if (hf14aconfig.forcecl3==-1) { + if (hf14aconfig.forcecl3==2) { do_cascade = false; } else if (hf14aconfig.forcecl3==1) { do_cascade = true; diff --git a/client/src/cmdhf14a.c b/client/src/cmdhf14a.c index 46daffefe..e1c84b76e 100644 --- a/client/src/cmdhf14a.c +++ b/client/src/cmdhf14a.c @@ -169,19 +169,19 @@ static uint16_t frameLength = 0; uint16_t atsFSC[] = {16, 24, 32, 40, 48, 64, 96, 128, 256}; static int usage_hf_14a_config(void) { - PrintAndLogEx(NORMAL, "Usage: hf 14a config [a 0|1] [b 0|1]"); + PrintAndLogEx(NORMAL, "Usage: hf 14a config [a 0|1|2] [b 0|1|2] [2 0|1|2] [3 0|1|2]"); PrintAndLogEx(NORMAL, "Options:"); PrintAndLogEx(NORMAL, " h This help"); - PrintAndLogEx(NORMAL, " a 0|1 Force standard anticollision sequence even if ATQA tells not to do it"); - PrintAndLogEx(NORMAL, " b 0|1 Obey bad BCC in anticollision sequence"); - PrintAndLogEx(NORMAL, " 2 0|1|-1 Override CL2 decision: 0=auto, 1=always perform CL2, -1=never perform CL2"); - PrintAndLogEx(NORMAL, " 3 0|1|-1 Override CL3 decision: 0=auto, 1=always perform CL3, -1=never perform CL3"); + PrintAndLogEx(NORMAL, " a 0|1|2 ATQA<>anticollision: 0=follow standard 1=execute anticol 2=skip anticol"); + PrintAndLogEx(NORMAL, " b 0|1|2 BCC: 0=follow standard 1=use fixed BCC 2=use card BCC"); + PrintAndLogEx(NORMAL, " 2 0|1|2 SAK<>CL2: 0=follow standard 1=execute CL2 2=skip CL2"); + PrintAndLogEx(NORMAL, " 3 0|1|2 SAK<>CL3: 0=follow standard 1=execute CL3 2=skip CL3"); PrintAndLogEx(NORMAL, "Examples:"); PrintAndLogEx(NORMAL, _YELLOW_(" hf 14a config ")" Print current configuration"); - PrintAndLogEx(NORMAL, _YELLOW_(" hf 14a config a ")" Force standard anticollision"); + PrintAndLogEx(NORMAL, _YELLOW_(" hf 14a config a 1 ")" Force execution of anticollision"); PrintAndLogEx(NORMAL, _YELLOW_(" hf 14a config a 0 ")" Restore ATQA interpretation"); - PrintAndLogEx(NORMAL, _YELLOW_(" hf 14a config b ")" Force obey bad BCC in anticollision"); - PrintAndLogEx(NORMAL, _YELLOW_(" hf 14a config b 0 ")" Restore BCC computation in anticollision"); + PrintAndLogEx(NORMAL, _YELLOW_(" hf 14a config b 1 ")" Force fix of bad BCC in anticollision"); + PrintAndLogEx(NORMAL, _YELLOW_(" hf 14a config b 0 ")" Restore BCC check"); return PM3_SUCCESS; } @@ -292,41 +292,86 @@ static int CmdHf14AConfig(const char *Cmd) { hf14a_config config = { .forceanticol = -1, - .obeybadbcc = -1, - .forcecl2 = -2, - .forcecl3 = -2 + .forcebcc = -1, + .forcecl2 = -1, + .forcecl3 = -1 }; bool errors = false; - char cl[3] = {0}; uint8_t cmdp = 0; while (param_getchar(Cmd, cmdp) != 0x00 && !errors) { switch (param_getchar(Cmd, cmdp)) { case 'h': return usage_hf_14a_config(); case 'a': - config.forceanticol = (param_getchar(Cmd, cmdp + 1) == '1'); + switch (param_getchar(Cmd, cmdp + 1)) { + case '0': + config.forceanticol = 0; + break; + case '1': + config.forceanticol = 1; + break; + case '2': + config.forceanticol = 2; + break; + default: + PrintAndLogEx(WARNING, "Unknown value '%c'", param_getchar(Cmd, cmdp + 1)); + errors = 1; + break; + } cmdp += 2; break; case 'b': - config.obeybadbcc = (param_getchar(Cmd, cmdp + 1) == '1'); + switch (param_getchar(Cmd, cmdp + 1)) { + case '0': + config.forcebcc = 0; + break; + case '1': + config.forcebcc = 1; + break; + case '2': + config.forcebcc = 2; + break; + default: + PrintAndLogEx(WARNING, "Unknown value '%c'", param_getchar(Cmd, cmdp + 1)); + errors = 1; + break; + } cmdp += 2; break; case '2': - param_getstr(Cmd, cmdp + 1, cl, sizeof(cl)); - if (strcmp(cl, "-1") == 0) { - config.forcecl2 = -1; - } else { - config.forcecl2 = strcmp(cl, "1") == 0; + switch (param_getchar(Cmd, cmdp + 1)) { + case '0': + config.forcecl2 = 0; + break; + case '1': + config.forcecl2 = 1; + break; + case '2': + config.forcecl2 = 2; + break; + default: + PrintAndLogEx(WARNING, "Unknown value '%c'", param_getchar(Cmd, cmdp + 1)); + errors = 1; + break; } cmdp += 2; break; case '3': - param_getstr(Cmd, cmdp + 1, cl, sizeof(cl)); - if (strcmp(cl, "-1") == 0) { - config.forcecl3 = -1; - } else { - config.forcecl3 = strcmp(cl, "1") == 0; + switch (param_getchar(Cmd, cmdp + 1)) { + case '0': + config.forcecl3 = 0; + break; + case '1': + config.forcecl3 = 1; + break; + case '2': + config.forcecl3 = 2; + break; + default: + PrintAndLogEx(WARNING, "Unknown value '%c'", param_getchar(Cmd, cmdp + 1)); + errors = 1; + break; } cmdp += 2; break; diff --git a/include/pm3_cmd.h b/include/pm3_cmd.h index 5dbf3631a..3738fe6ad 100644 --- a/include/pm3_cmd.h +++ b/include/pm3_cmd.h @@ -124,10 +124,10 @@ typedef struct { // A struct used to send hf14a-configs over USB typedef struct { - int8_t forceanticol; // bool but also -1 if to be ignored - int8_t obeybadbcc; // bool but also -1 if to be ignored - int8_t forcecl2; // 0:auto 1:force executing CL2 -1:force skipping CL2 - int8_t forcecl3; // 0:auto 1:force executing CL3 -1:force skipping CL3 + int8_t forceanticol; // 0:auto 1:force executing anticol 2:force skipping anticol + int8_t forcebcc; // 0:expect valid BCC 1:force using computed BCC 2:force using card BCC + int8_t forcecl2; // 0:auto 1:force executing CL2 2:force skipping CL2 + int8_t forcecl3; // 0:auto 1:force executing CL3 2:force skipping CL3 } PACKED hf14a_config; // Tracelog Header struct From 0be35a8e7e0d027650f360380db4d4b2fd3280b9 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Mon, 7 Sep 2020 10:35:09 +0200 Subject: [PATCH 0406/1047] style --- armsrc/appmain.c | 10 +- armsrc/epa.c | 16 +- armsrc/iso14443a.c | 28 +-- armsrc/iso14443b.c | 316 +++++++++++++++---------------- armsrc/legicrf.c | 40 ++-- armsrc/legicrfsim.c | 36 ++-- armsrc/lfops.c | 26 +-- armsrc/lfsampling.c | 28 +-- armsrc/mifarecmd.c | 26 +-- armsrc/spiffs.c | 34 ++-- client/src/cmdhf.c | 18 +- client/src/cmdhf14b.c | 4 +- client/src/cmdhf15.c | 22 +-- client/src/cmdhfcryptorf.c | 2 +- client/src/cmdhfepa.c | 28 +-- client/src/cmdhficlass.c | 34 ++-- client/src/cmdhficlass.h | 2 +- client/src/cmdhflegic.c | 24 +-- client/src/cmdhflist.c | 24 +-- client/src/cmdhfmf.c | 74 ++++---- client/src/cmdhfmfp.c | 4 +- client/src/cmdhfmfu.c | 2 +- client/src/cmdlfcotag.c | 2 +- client/src/cmdlfem4x.c | 4 +- client/src/cmdlfkeri.c | 4 +- client/src/cmdlfnedap.c | 12 +- client/src/cmdlfpyramid.c | 2 +- client/src/cmdlft55xx.c | 10 +- client/src/cmdlfviking.c | 8 +- client/src/cmdtrace.c | 28 +-- client/src/fileutils.c | 16 +- client/src/loclass/hash1_brute.c | 6 +- client/src/scripting.c | 6 +- 33 files changed, 448 insertions(+), 448 deletions(-) diff --git a/armsrc/appmain.c b/armsrc/appmain.c index 1a62155b9..230e69eb0 100644 --- a/armsrc/appmain.c +++ b/armsrc/appmain.c @@ -1068,11 +1068,11 @@ static void PacketReceived(PacketCommandNG *packet) { #ifdef WITH_LEGICRF case CMD_HF_LEGIC_SIMULATE: { - struct p { - uint8_t tagtype; - bool send_reply; - } PACKED; - struct p *payload = (struct p *) packet->data.asBytes; + struct p { + uint8_t tagtype; + bool send_reply; + } PACKED; + struct p *payload = (struct p *) packet->data.asBytes; LegicRfSimulate(payload->tagtype, payload->send_reply); break; } diff --git a/armsrc/epa.c b/armsrc/epa.c index 777549728..25a70c885 100644 --- a/armsrc/epa.c +++ b/armsrc/epa.c @@ -229,7 +229,7 @@ int EPA_Read_CardAccess(uint8_t *buffer, size_t max_length) { sizeof(apdu_select_binary_cardaccess), response_apdu, sizeof(response_apdu) - ); + ); if (rapdu_length < 6 || response_apdu[rapdu_length - 4] != 0x90 @@ -243,7 +243,7 @@ int EPA_Read_CardAccess(uint8_t *buffer, size_t max_length) { sizeof(apdu_read_binary), response_apdu, sizeof(response_apdu) - ); + ); if (rapdu_length <= 6 || response_apdu[rapdu_length - 4] != 0x90 @@ -325,11 +325,11 @@ void EPA_PACE_Collect_Nonce(PacketCommandNG *c) { // now get the nonce uint8_t nonce[256] = {0}; - + struct p { uint32_t m; } PACKED; - struct p *packet = (struct p*)c->data.asBytes; + struct p *packet = (struct p *)c->data.asBytes; func_return = EPA_PACE_Get_Nonce(packet->m, nonce); // check if the command succeeded @@ -359,7 +359,7 @@ int EPA_PACE_Get_Nonce(uint8_t requested_length, uint8_t *nonce) { // copy the constant part memcpy(apdu, apdu_general_authenticate_pace_get_nonce, sizeof(apdu_general_authenticate_pace_get_nonce)); - + // append Le (requested length + 2 due to tag/length taking 2 bytes) in RAPDU apdu[sizeof(apdu_general_authenticate_pace_get_nonce)] = requested_length + 4; @@ -444,8 +444,8 @@ int EPA_PACE_MSE_Set_AT(pace_version_info_t pace_version_info, uint8_t password) // check if the command succeeded if (send_return != 6) // && response_apdu[send_return - 4] != 0x90 -// || response_apdu[send_return - 3] != 0x00) - { +// || response_apdu[send_return - 3] != 0x00) + { return 1; } return 0; @@ -500,7 +500,7 @@ void EPA_PACE_Replay(PacketCommandNG *c) { apdu_lengths_replay[i], response_apdu, sizeof(response_apdu) - ); + ); timings[i] = GetCountUS(); // every step but the last one should succeed if (i < ARRAYLEN(apdu_lengths_replay) - 1 diff --git a/armsrc/iso14443a.c b/armsrc/iso14443a.c index 8a325aa2d..7eff6b3d7 100644 --- a/armsrc/iso14443a.c +++ b/armsrc/iso14443a.c @@ -133,10 +133,10 @@ static hf14a_config hf14aconfig = { 0, 0, 0, 0 } ; void printHf14aConfig(void) { DbpString(_CYAN_("HF 14a config")); - Dbprintf("[a] Anticol override......%s%s%s", (hf14aconfig.forceanticol==0) ? _GREEN_("No") " (follow standard)" : "", (hf14aconfig.forceanticol==1) ? _RED_("Yes: Always do anticol") : "", (hf14aconfig.forceanticol==2) ? _RED_("Yes: Always skip anticol") : ""); - Dbprintf("[b] BCC override..........%s%s%s", (hf14aconfig.forcebcc==0) ? _GREEN_("No") " (follow standard)" : "", (hf14aconfig.forcebcc==1) ? _RED_("Yes: Always do CL2") : "", (hf14aconfig.forcebcc==2) ? _RED_("Yes: Always use card BCC") : ""); - Dbprintf("[2] CL2 override..........%s%s%s", (hf14aconfig.forcecl2==0) ? _GREEN_("No") " (follow standard)" : "", (hf14aconfig.forcecl2==1) ? _RED_("Yes: Always do CL2") : "", (hf14aconfig.forcecl2==2) ? _RED_("Yes: Always skip CL2") : ""); - Dbprintf("[3] CL3 override..........%s%s%s", (hf14aconfig.forcecl3==0) ? _GREEN_("No") " (follow standard)" : "", (hf14aconfig.forcecl3==1) ? _RED_("Yes: Always do CL3") : "", (hf14aconfig.forcecl3==2) ? _RED_("Yes: Always skip CL3") : ""); + Dbprintf("[a] Anticol override......%s%s%s", (hf14aconfig.forceanticol == 0) ? _GREEN_("No") " (follow standard)" : "", (hf14aconfig.forceanticol == 1) ? _RED_("Yes: Always do anticol") : "", (hf14aconfig.forceanticol == 2) ? _RED_("Yes: Always skip anticol") : ""); + Dbprintf("[b] BCC override..........%s%s%s", (hf14aconfig.forcebcc == 0) ? _GREEN_("No") " (follow standard)" : "", (hf14aconfig.forcebcc == 1) ? _RED_("Yes: Always do CL2") : "", (hf14aconfig.forcebcc == 2) ? _RED_("Yes: Always use card BCC") : ""); + Dbprintf("[2] CL2 override..........%s%s%s", (hf14aconfig.forcecl2 == 0) ? _GREEN_("No") " (follow standard)" : "", (hf14aconfig.forcecl2 == 1) ? _RED_("Yes: Always do CL2") : "", (hf14aconfig.forcecl2 == 2) ? _RED_("Yes: Always skip CL2") : ""); + Dbprintf("[3] CL3 override..........%s%s%s", (hf14aconfig.forcecl3 == 0) ? _GREEN_("No") " (follow standard)" : "", (hf14aconfig.forcecl3 == 1) ? _RED_("Yes: Always do CL3") : "", (hf14aconfig.forcecl3 == 2) ? _RED_("Yes: Always skip CL3") : ""); } /** @@ -2401,10 +2401,10 @@ int iso14443a_select_card(uint8_t *uid_ptr, iso14a_card_select_t *p_card, uint32 memset(uid_ptr, 0, 10); } - if ( hf14aconfig.forceanticol == 0 ) { + if (hf14aconfig.forceanticol == 0) { // check for proprietary anticollision: if ((resp[0] & 0x1F) == 0) return 3; - } else if ( hf14aconfig.forceanticol == 2 ) { + } else if (hf14aconfig.forceanticol == 2) { return 3; // force skipping anticol } // else force executing @@ -2479,10 +2479,10 @@ int iso14443a_select_card(uint8_t *uid_ptr, iso14a_card_select_t *p_card, uint32 uint8_t bcc = sel_uid[2] ^ sel_uid[3] ^ sel_uid[4] ^ sel_uid[5]; // calculate BCC if (sel_uid[6] != bcc) { Dbprintf("BCC%d incorrect, got 0x%02x, expected 0x%02x", cascade_level, sel_uid[6], bcc); - if (hf14aconfig.forcebcc==0) { + if (hf14aconfig.forcebcc == 0) { Dbprintf("Aborting"); return 0; - } else if (hf14aconfig.forcebcc==1) { + } else if (hf14aconfig.forcebcc == 1) { sel_uid[6] = bcc; } // else use card BCC Dbprintf("Using BCC=" _YELLOW_("0x%02x") " to perform anticollision", sel_uid[6]); @@ -2504,16 +2504,16 @@ int iso14443a_select_card(uint8_t *uid_ptr, iso14a_card_select_t *p_card, uint32 // Test if more parts of the uid are coming do_cascade = (((sak & 0x04) /* && uid_resp[0] == 0x88 */) > 0); - if (cascade_level==0) { - if (hf14aconfig.forcecl2==2) { + if (cascade_level == 0) { + if (hf14aconfig.forcecl2 == 2) { do_cascade = false; - } else if (hf14aconfig.forcecl2==1) { + } else if (hf14aconfig.forcecl2 == 1) { do_cascade = true; } // else 0==auto - } else if (cascade_level==1) { - if (hf14aconfig.forcecl3==2) { + } else if (cascade_level == 1) { + if (hf14aconfig.forcecl3 == 2) { do_cascade = false; - } else if (hf14aconfig.forcecl3==1) { + } else if (hf14aconfig.forcecl3 == 1) { do_cascade = true; } // else 0==auto } diff --git a/armsrc/iso14443b.c b/armsrc/iso14443b.c index f2738f7b4..0844b5e4d 100644 --- a/armsrc/iso14443b.c +++ b/armsrc/iso14443b.c @@ -44,12 +44,12 @@ # define FWT_TIMEOUT_14B 35312 #endif - // 330/848kHz = 1558us / 4 == 400us, +// 330/848kHz = 1558us / 4 == 400us, #define ISO14443B_READER_TIMEOUT 1700 //330 // 1024/3.39MHz = 302.1us between end of tag response and next reader cmd #define DELAY_ISO14443B_VICC_TO_VCD_READER 600 // 1024 -#define DELAY_ISO14443B_VCD_TO_VICC_READER 600// 1056 +#define DELAY_ISO14443B_VCD_TO_VICC_READER 600// 1056 #ifndef RECEIVE_MASK # define RECEIVE_MASK (DMA_BUFFER_SIZE - 1) @@ -740,7 +740,7 @@ void SimulateIso14443bTag(uint32_t pupi) { */ static RAMFUNC int Handle14443bSamplesFromTag(int ci, int cq) { - int v; + int v; // The soft decision on the bit uses an estimate of just the // quadrant of the reference angle, not the exact angle. @@ -761,137 +761,137 @@ static RAMFUNC int Handle14443bSamplesFromTag(int ci, int cq) { // Subcarrier amplitude v = sqrt(ci^2 + cq^2), approximated here by max(abs(ci),abs(cq)) + 1/2*min(abs(ci),abs(cq))) #define AMPLITUDE(ci,cq) (MAX(ABS(ci),ABS(cq)) + (MIN(ABS(ci),ABS(cq))/2)) - switch(Demod.state) { + switch (Demod.state) { - case DEMOD_UNSYNCD: { - if (AMPLITUDE(ci, cq) > SUBCARRIER_DETECT_THRESHOLD) { // subcarrier detected - Demod.state = DEMOD_PHASE_REF_TRAINING; - Demod.sumI = ci; - Demod.sumQ = cq; - Demod.posCount = 1; - } - break; + case DEMOD_UNSYNCD: { + if (AMPLITUDE(ci, cq) > SUBCARRIER_DETECT_THRESHOLD) { // subcarrier detected + Demod.state = DEMOD_PHASE_REF_TRAINING; + Demod.sumI = ci; + Demod.sumQ = cq; + Demod.posCount = 1; + } + break; } - case DEMOD_PHASE_REF_TRAINING: { - if (Demod.posCount < 8) { - if (AMPLITUDE(ci, cq) > SUBCARRIER_DETECT_THRESHOLD) { - // set the reference phase (will code a logic '1') by averaging over 32 1/fs. - // note: synchronization time > 80 1/fs - Demod.sumI += ci; - Demod.sumQ += cq; - Demod.posCount++; - } else { + case DEMOD_PHASE_REF_TRAINING: { + if (Demod.posCount < 8) { + if (AMPLITUDE(ci, cq) > SUBCARRIER_DETECT_THRESHOLD) { + // set the reference phase (will code a logic '1') by averaging over 32 1/fs. + // note: synchronization time > 80 1/fs + Demod.sumI += ci; + Demod.sumQ += cq; + Demod.posCount++; + } else { // subcarrier lost - Demod.state = DEMOD_UNSYNCD; - } - } else { - Demod.state = DEMOD_AWAITING_FALLING_EDGE_OF_SOF; - } - break; + Demod.state = DEMOD_UNSYNCD; + } + } else { + Demod.state = DEMOD_AWAITING_FALLING_EDGE_OF_SOF; + } + break; } - case DEMOD_AWAITING_FALLING_EDGE_OF_SOF: { + case DEMOD_AWAITING_FALLING_EDGE_OF_SOF: { - MAKE_SOFT_DECISION(); + MAKE_SOFT_DECISION(); - if (v < 0) { // logic '0' detected - Demod.state = DEMOD_GOT_FALLING_EDGE_OF_SOF; - Demod.posCount = 0; // start of SOF sequence - } else { - if (Demod.posCount > 200 / 4) { // maximum length of TR1 = 200 1/fs - Demod.state = DEMOD_UNSYNCD; - } - } - Demod.posCount++; - break; + if (v < 0) { // logic '0' detected + Demod.state = DEMOD_GOT_FALLING_EDGE_OF_SOF; + Demod.posCount = 0; // start of SOF sequence + } else { + if (Demod.posCount > 200 / 4) { // maximum length of TR1 = 200 1/fs + Demod.state = DEMOD_UNSYNCD; + } + } + Demod.posCount++; + break; } - case DEMOD_GOT_FALLING_EDGE_OF_SOF: { + case DEMOD_GOT_FALLING_EDGE_OF_SOF: { - Demod.posCount++; - MAKE_SOFT_DECISION(); + Demod.posCount++; + MAKE_SOFT_DECISION(); - if (v > 0) { - if (Demod.posCount < 9 * 2) { // low phase of SOF too short (< 9 etu). Note: spec is >= 10, but FPGA tends to "smear" edges - Demod.state = DEMOD_UNSYNCD; - } else { - LED_C_ON(); // Got SOF - Demod.posCount = 0; - Demod.bitCount = 0; - Demod.len = 0; - Demod.state = DEMOD_AWAITING_START_BIT; - } - } else { - if (Demod.posCount > 14 * 2) { // low phase of SOF too long (> 12 etu) - Demod.state = DEMOD_UNSYNCD; - LED_C_OFF(); - } - } - break; + if (v > 0) { + if (Demod.posCount < 9 * 2) { // low phase of SOF too short (< 9 etu). Note: spec is >= 10, but FPGA tends to "smear" edges + Demod.state = DEMOD_UNSYNCD; + } else { + LED_C_ON(); // Got SOF + Demod.posCount = 0; + Demod.bitCount = 0; + Demod.len = 0; + Demod.state = DEMOD_AWAITING_START_BIT; + } + } else { + if (Demod.posCount > 14 * 2) { // low phase of SOF too long (> 12 etu) + Demod.state = DEMOD_UNSYNCD; + LED_C_OFF(); + } + } + break; } - case DEMOD_AWAITING_START_BIT: { - Demod.posCount++; - MAKE_SOFT_DECISION(); - if (v > 0) { - if (Demod.posCount > 6 * 2) { // max 19us between characters = 16 1/fs, max 3 etu after low phase of SOF = 24 1/fs - LED_C_OFF(); - if (Demod.bitCount == 0 && Demod.len == 0) { // received SOF only, this is valid for iClass/Picopass - return true; - } else { - Demod.state = DEMOD_UNSYNCD; - } - } - } else { // start bit detected - Demod.posCount = 1; // this was the first half - Demod.thisBit = v; - Demod.shiftReg = 0; - Demod.state = DEMOD_RECEIVING_DATA; - } - break; + case DEMOD_AWAITING_START_BIT: { + Demod.posCount++; + MAKE_SOFT_DECISION(); + if (v > 0) { + if (Demod.posCount > 6 * 2) { // max 19us between characters = 16 1/fs, max 3 etu after low phase of SOF = 24 1/fs + LED_C_OFF(); + if (Demod.bitCount == 0 && Demod.len == 0) { // received SOF only, this is valid for iClass/Picopass + return true; + } else { + Demod.state = DEMOD_UNSYNCD; + } + } + } else { // start bit detected + Demod.posCount = 1; // this was the first half + Demod.thisBit = v; + Demod.shiftReg = 0; + Demod.state = DEMOD_RECEIVING_DATA; + } + break; } - case DEMOD_RECEIVING_DATA: { + case DEMOD_RECEIVING_DATA: { - MAKE_SOFT_DECISION(); + MAKE_SOFT_DECISION(); - if (Demod.posCount == 0) { // first half of bit - Demod.thisBit = v; - Demod.posCount = 1; - } else { // second half of bit - Demod.thisBit += v; + if (Demod.posCount == 0) { // first half of bit + Demod.thisBit = v; + Demod.posCount = 1; + } else { // second half of bit + Demod.thisBit += v; - Demod.shiftReg >>= 1; - if (Demod.thisBit > 0) { // logic '1' - Demod.shiftReg |= 0x200; - } + Demod.shiftReg >>= 1; + if (Demod.thisBit > 0) { // logic '1' + Demod.shiftReg |= 0x200; + } - Demod.bitCount++; - if (Demod.bitCount == 10) { + Demod.bitCount++; + if (Demod.bitCount == 10) { - uint16_t s = Demod.shiftReg; + uint16_t s = Demod.shiftReg; - if ((s & 0x200) && !(s & 0x001)) { // stop bit == '1', start bit == '0' - Demod.output[Demod.len] = (s >> 1); - Demod.len++; - Demod.bitCount = 0; - Demod.state = DEMOD_AWAITING_START_BIT; - } else { - Demod.state = DEMOD_UNSYNCD; - LED_C_OFF(); - if (s == 0x000) { - // This is EOF (start, stop and all data bits == '0' - return true; - } - } - } - Demod.posCount = 0; - } - break; + if ((s & 0x200) && !(s & 0x001)) { // stop bit == '1', start bit == '0' + Demod.output[Demod.len] = (s >> 1); + Demod.len++; + Demod.bitCount = 0; + Demod.state = DEMOD_AWAITING_START_BIT; + } else { + Demod.state = DEMOD_UNSYNCD; + LED_C_OFF(); + if (s == 0x000) { + // This is EOF (start, stop and all data bits == '0' + return true; + } + } + } + Demod.posCount = 0; + } + break; } - default: { - Demod.state = DEMOD_UNSYNCD; - LED_C_OFF(); - break; + default: { + Demod.state = DEMOD_UNSYNCD; + LED_C_OFF(); + break; } - } - return false; + } + return false; } @@ -938,9 +938,9 @@ static int Get14443bAnswerFromTag(uint8_t *response, uint16_t max_len, int timeo } volatile int8_t ci = *upTo >> 8; - volatile int8_t cq = *upTo; - upTo++; - + volatile int8_t cq = *upTo; + upTo++; + // we have read all of the DMA buffer content. if (upTo >= dma->buf + DMA_BUFFER_SIZE) { @@ -960,7 +960,7 @@ static int Get14443bAnswerFromTag(uint8_t *response, uint16_t max_len, int timeo AT91C_BASE_PDC_SSC->PDC_RNPR = (uint32_t) dma->buf; AT91C_BASE_PDC_SSC->PDC_RNCR = DMA_BUFFER_SIZE; } - + WDT_HIT(); if (BUTTON_PRESS()) { DbpString("stopped"); @@ -993,9 +993,9 @@ static int Get14443bAnswerFromTag(uint8_t *response, uint16_t max_len, int timeo if (Demod.len > 0) { uint32_t sof_time = *eof_time - - (Demod.len * 8 * 8 * 16) // time for byte transfers - - (32 * 16) // time for SOF transfer - - 0; // time for EOF transfer + - (Demod.len * 8 * 8 * 16) // time for byte transfers + - (32 * 16) // time for SOF transfer + - 0; // time for EOF transfer LogTrace(Demod.output, Demod.len, (sof_time * 4), (*eof_time * 4), NULL, false); } @@ -1006,9 +1006,9 @@ static int Get14443bAnswerFromTag(uint8_t *response, uint16_t max_len, int timeo // Transmit the command (to the tag) that was placed in ToSend[]. //----------------------------------------------------------------------------- static void TransmitFor14443b_AsReader(uint32_t *start_time) { - + tosend_t *ts = get_tosend(); - + FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER | FPGA_HF_READER_MODE_SEND_SHALLOW_MOD); if (*start_time < DELAY_ARM_TO_TAG) { @@ -1016,7 +1016,7 @@ static void TransmitFor14443b_AsReader(uint32_t *start_time) { } *start_time = (*start_time - DELAY_ARM_TO_TAG) & 0xfffffff0; - + if (GetCountSspClk() > *start_time) { // we may miss the intended time *start_time = (GetCountSspClk() + 16) & 0xfffffff0; // next possible time } @@ -1132,7 +1132,7 @@ static void CodeAndTransmit14443bAsReader(const uint8_t *cmd, int len, uint32_t tosend_t *ts = get_tosend(); CodeIso14443bAsReader(cmd, len); TransmitFor14443b_AsReader(start_time); - *eof_time = *start_time + (32 * (8 * ts->max)); + *eof_time = *start_time + (32 * (8 * ts->max)); LogTrace(cmd, len, *start_time, *eof_time, NULL, true); } @@ -1152,12 +1152,12 @@ uint8_t iso14443b_apdu(uint8_t const *message, size_t message_length, uint8_t *r memcpy(message_frame + 2, message, message_length); // EDC (CRC) AddCrc14B(message_frame, message_length + 2); - + // send uint32_t start_time = 0; uint32_t eof_time = 0; CodeAndTransmit14443bAsReader(message_frame, sizeof(message_frame), &start_time, &eof_time); - + // get response if (response == NULL) { LED_A_OFF(); @@ -1191,7 +1191,7 @@ static uint8_t iso14443b_select_srx_card(iso14b_card_select_t *card) { uint8_t r_init[3] = {0x0}; uint8_t r_select[3] = {0x0}; uint8_t r_papid[10] = {0x0}; - + uint32_t start_time = 0; uint32_t eof_time = 0; CodeAndTransmit14443bAsReader(init_srx, sizeof(init_srx), &start_time, &eof_time); @@ -1211,7 +1211,7 @@ static uint8_t iso14443b_select_srx_card(iso14b_card_select_t *card) { // SELECT command (with space for CRC) uint8_t select_srx[] = { ISO14443B_SELECT, 0x00, 0x00, 0x00}; select_srx[1] = r_init[0]; - + AddCrc14B(select_srx, 2); start_time = eof_time + DELAY_ISO14443B_VICC_TO_VCD_READER; @@ -1242,7 +1242,7 @@ static uint8_t iso14443b_select_srx_card(iso14b_card_select_t *card) { start_time = eof_time + DELAY_ISO14443B_VICC_TO_VCD_READER; CodeAndTransmit14443bAsReader(select_srx, 3, &start_time, &eof_time); // Only first three bytes for this one - + eof_time += DELAY_ISO14443B_VCD_TO_VICC_READER; retlen = Get14443bAnswerFromTag(r_papid, sizeof(r_papid), ISO14443B_READER_TIMEOUT, &eof_time); FpgaDisableTracing(); @@ -1255,7 +1255,7 @@ static uint8_t iso14443b_select_srx_card(iso14b_card_select_t *card) { if (!check_crc(CRC_14443_B, r_papid, retlen)) { return 3; } - + if (card) { card->uidlen = 8; memcpy(card->uid, r_papid, 8); @@ -1312,7 +1312,7 @@ int iso14443b_select_card(iso14b_card_select_t *card) { AddCrc14B(attrib, 9); start_time = eof_time + DELAY_ISO14443B_VICC_TO_VCD_READER; CodeAndTransmit14443bAsReader(attrib, sizeof(attrib), &start_time, &eof_time); - + eof_time += DELAY_ISO14443B_VCD_TO_VICC_READER; retlen = Get14443bAnswerFromTag(r_attrib, sizeof(r_attrib), ISO14443B_READER_TIMEOUT, &eof_time); FpgaDisableTracing(); @@ -1423,10 +1423,10 @@ static bool ReadSTBlock(uint8_t blocknr, uint8_t *block) { } Dbprintf("Address=%02x, Contents=%08x, CRC=%04x", - blocknr, + blocknr, (r_block[3] << 24) + (r_block[2] << 16) + (r_block[1] << 8) + r_block[0], (r_block[4] << 8) + r_block[5]); - + return true; } @@ -1434,7 +1434,7 @@ void ReadSTMemoryIso14443b(uint16_t numofblocks) { iso14443b_setup(); - uint8_t *mem = BigBuf_malloc((numofblocks + 1) * 4 ); + uint8_t *mem = BigBuf_malloc((numofblocks + 1) * 4); iso14b_card_select_t card; uint8_t res = iso14443b_select_srx_card(&card); @@ -1450,15 +1450,15 @@ void ReadSTMemoryIso14443b(uint16_t numofblocks) { for (uint8_t i = 0; i < numofblocks; i++) { - if (ReadSTBlock(i, mem + ( i * 4)) == false) { + if (ReadSTBlock(i, mem + (i * 4)) == false) { isOK = PM3_ETIMEOUT; break; } } - - // System area block (0xFF) - if (ReadSTBlock(0xFF, mem + (numofblocks * 4)) == false) - isOK = PM3_ETIMEOUT; + + // System area block (0xFF) + if (ReadSTBlock(0xFF, mem + (numofblocks * 4)) == false) + isOK = PM3_ETIMEOUT; out: @@ -1535,7 +1535,7 @@ void SniffIso14443b(void) { bool reader_is_active = false; bool expect_tag_answer = false; int dma_start_time = 0; - + // Count of samples received so far, so that we can include timing int samples = 0; @@ -1544,7 +1544,7 @@ void SniffIso14443b(void) { for (;;) { volatile int behind_by = ((uint16_t *)AT91C_BASE_PDC_SSC->PDC_RPR - upTo) & (DMA_BUFFER_SIZE - 1); - if (behind_by < 1) continue; + if (behind_by < 1) continue; samples++; if (samples == 1) { @@ -1554,7 +1554,7 @@ void SniffIso14443b(void) { volatile int8_t ci = *upTo >> 8; volatile int8_t cq = *upTo; - upTo++; + upTo++; // we have read all of the DMA buffer content. if (upTo >= dma->buf + DMA_BUFFER_SIZE) { @@ -1575,7 +1575,7 @@ void SniffIso14443b(void) { AT91C_BASE_PDC_SSC->PDC_RNPR = (uint32_t) dma->buf; AT91C_BASE_PDC_SSC->PDC_RNCR = DMA_BUFFER_SIZE; } - + WDT_HIT(); if (BUTTON_PRESS()) { DbpString("Sniff stopped"); @@ -1600,7 +1600,7 @@ void SniffIso14443b(void) { Uart14bReset(); Demod14bReset(); reader_is_active = false; - expect_tag_answer = true; + expect_tag_answer = true; } if (Handle14443bSampleFromReader(cq & 0x01)) { @@ -1619,20 +1619,20 @@ void SniffIso14443b(void) { reader_is_active = false; expect_tag_answer = true; } - + reader_is_active = (Uart.state > STATE_14B_GOT_FALLING_EDGE_OF_SOF); } // no need to try decoding tag data if the reader is sending - and we cannot afford the time if (reader_is_active == false && expect_tag_answer) { - if (Handle14443bSamplesFromTag((ci >> 1), (cq >> 1))) { + if (Handle14443bSamplesFromTag((ci >> 1), (cq >> 1))) { - uint32_t eof_time = dma_start_time + (samples * 16); // - DELAY_TAG_TO_ARM_SNIFF; // end of EOF + uint32_t eof_time = dma_start_time + (samples * 16); // - DELAY_TAG_TO_ARM_SNIFF; // end of EOF uint32_t sof_time = eof_time - - Demod.len * 8 * 8 * 16 // time for byte transfers - - (32 * 16) // time for SOF transfer - - 0; // time for EOF transfer + - Demod.len * 8 * 8 * 16 // time for byte transfers + - (32 * 16) // time for SOF transfer + - 0; // time for EOF transfer LogTrace(Demod.output, Demod.len, (sof_time * 4), (eof_time * 4), NULL, false); // And ready to receive another response. @@ -1657,7 +1657,7 @@ void SniffIso14443b(void) { Dbprintf(" DecodeTag posCount.....%d", Demod.posCount); Dbprintf(" DecodeReader State.....%d", Uart.state); Dbprintf(" DecodeReader byteCnt...%d", Uart.byteCnt); - Dbprintf(" DecodeReader posCount..%d", Uart.posCnt); + Dbprintf(" DecodeReader posCount..%d", Uart.posCnt); Dbprintf(" Trace length..........." _YELLOW_("%d"), BigBuf_get_traceLen()); DbpString(""); } @@ -1703,17 +1703,17 @@ void SendRawCommand14443B_Ex(PacketCommandNG *c) { int status; uint32_t sendlen = sizeof(iso14b_card_select_t); iso14b_card_select_t card; - + if ((param & ISO14B_SELECT_STD) == ISO14B_SELECT_STD) { status = iso14443b_select_card(&card); - reply_mix(CMD_HF_ISO14443B_COMMAND, status, sendlen, 0, (uint8_t*)&card, sendlen); + reply_mix(CMD_HF_ISO14443B_COMMAND, status, sendlen, 0, (uint8_t *)&card, sendlen); // 0: OK -1: attrib fail, -2:crc fail, if (status != 0) goto out; } if ((param & ISO14B_SELECT_SR) == ISO14B_SELECT_SR) { status = iso14443b_select_srx_card(&card); - reply_mix(CMD_HF_ISO14443B_COMMAND, status, sendlen, 0, (uint8_t*)&card, sendlen); + reply_mix(CMD_HF_ISO14443B_COMMAND, status, sendlen, 0, (uint8_t *)&card, sendlen); // 0: OK 2: demod fail, 3:crc fail, if (status > 0) goto out; } @@ -1730,10 +1730,10 @@ void SendRawCommand14443B_Ex(PacketCommandNG *c) { len += 2; } uint8_t buf[100] = {0}; - + uint32_t start_time = 0; uint32_t eof_time = 0; - CodeAndTransmit14443bAsReader(cmd, len, &start_time, &eof_time); + CodeAndTransmit14443bAsReader(cmd, len, &start_time, &eof_time); eof_time += DELAY_ISO14443B_VCD_TO_VICC_READER; status = Get14443bAnswerFromTag(buf, sizeof(buf), 5 * ISO14443B_READER_TIMEOUT, &eof_time); // raw diff --git a/armsrc/legicrf.c b/armsrc/legicrf.c index e3ff018c6..92961fd4a 100644 --- a/armsrc/legicrf.c +++ b/armsrc/legicrf.c @@ -101,27 +101,27 @@ static uint16_t rx_frame_from_fpga(void) { // // Note: inlining this function would fail with -Os static bool rx_bit(void) { - int32_t sum_cq = 0; - int32_t sum_ci = 0; + int32_t sum_cq = 0; + int32_t sum_ci = 0; - // skip first 5 I/Q pairs - for(size_t i = 0; i<5; ++i) { - (void)rx_frame_from_fpga(); - } + // skip first 5 I/Q pairs + for (size_t i = 0; i < 5; ++i) { + (void)rx_frame_from_fpga(); + } - // sample next 8 I/Q pairs - for (uint8_t i = 0; i < 8; ++i) { - uint16_t iq = rx_frame_from_fpga(); - int8_t ci = (int8_t)(iq >> 8); - int8_t cq = (int8_t)(iq & 0xff); - sum_ci += ci; - sum_cq += cq; - } + // sample next 8 I/Q pairs + for (uint8_t i = 0; i < 8; ++i) { + uint16_t iq = rx_frame_from_fpga(); + int8_t ci = (int8_t)(iq >> 8); + int8_t cq = (int8_t)(iq & 0xff); + sum_ci += ci; + sum_cq += cq; + } - // calculate power - int32_t power = (MAX(ABS(sum_ci), ABS(sum_cq)) + (MIN(ABS(sum_ci), ABS(sum_cq)) >> 1)); + // calculate power + int32_t power = (MAX(ABS(sum_ci), ABS(sum_cq)) + (MIN(ABS(sum_ci), ABS(sum_cq)) >> 1)); - // compare average (power / 8) to threshold + // compare average (power / 8) to threshold return ((power >> 3) > INPUT_THRESHOLD); } @@ -136,12 +136,12 @@ static bool rx_bit(void) { static void tx_bit(bool bit) { // insert pause - HIGH(GPIO_SSC_DOUT); + HIGH(GPIO_SSC_DOUT); last_frame_end += RWD_TIME_PAUSE; while (GET_TICKS < last_frame_end) { }; - // return to carrier on, wait for bit periode to end - LOW(GPIO_SSC_DOUT); + // return to carrier on, wait for bit periode to end + LOW(GPIO_SSC_DOUT); last_frame_end += (bit ? RWD_TIME_1 : RWD_TIME_0) - RWD_TIME_PAUSE; while (GET_TICKS < last_frame_end) { }; } diff --git a/armsrc/legicrfsim.c b/armsrc/legicrfsim.c index f70536372..74609b326 100644 --- a/armsrc/legicrfsim.c +++ b/armsrc/legicrfsim.c @@ -459,30 +459,30 @@ void LegicRfSimulate(uint8_t tagtype, bool send_reply) { // configure ARM and FPGA init_tag(); - int res = PM3_SUCCESS; + int res = PM3_SUCCESS; // verify command line input if (init_card(tagtype, &card) != PM3_SUCCESS) { DbpString("Unknown tagtype to simulate"); - res = PM3_ESOFT; + res = PM3_ESOFT; goto OUT; } - uint16_t counter = 0; + uint16_t counter = 0; LED_A_ON(); Dbprintf("Legic Prime, simulating uid: %02X%02X%02X%02X", legic_mem[0], legic_mem[1], legic_mem[2], legic_mem[3]); - + while (BUTTON_PRESS() == false) { WDT_HIT(); - - if (counter >= 2000) { - if (data_available()) { - res = PM3_EOPABORTED; - break; - } - counter = 0; - } - counter++; + + if (counter >= 2000) { + if (data_available()) { + res = PM3_EOPABORTED; + break; + } + counter = 0; + } + counter++; // wait for carrier, restart after timeout if (wait_for(RWD_PULSE, GetCountSspClk() + TAG_BIT_PERIOD) == false) { @@ -511,9 +511,9 @@ OUT: switch_off(); StopTicks(); - - if (send_reply) - reply_ng(CMD_HF_LEGIC_SIMULATE, res, NULL, 0); - - BigBuf_free_keep_EM(); + + if (send_reply) + reply_ng(CMD_HF_LEGIC_SIMULATE, res, NULL, 0); + + BigBuf_free_keep_EM(); } diff --git a/armsrc/lfops.c b/armsrc/lfops.c index 682c4ac5b..93e9cd230 100644 --- a/armsrc/lfops.c +++ b/armsrc/lfops.c @@ -2084,7 +2084,7 @@ void T55xx_ChkPwds(uint8_t flags) { baseline_faulty >>= 5; if (DBGLEVEL >= DBG_DEBUG) - Dbprintf("Baseline " _YELLOW_("%llu"), baseline_faulty); + Dbprintf("Baseline " _YELLOW_("%llu"), baseline_faulty); uint8_t *pwds = BigBuf_get_EM_addr(); uint16_t pwd_count = 0; @@ -2147,7 +2147,7 @@ void T55xx_ChkPwds(uint8_t flags) { if (DBGLEVEL >= DBG_DEBUG) Dbprintf("%08x has distance " _YELLOW_("%llu"), pwd, curr); - + if (curr > prev) { idx = i; prev = curr; @@ -2165,7 +2165,7 @@ OUT: FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); LEDsoff(); - reply_ng(CMD_LF_T55XX_CHK_PWDS, PM3_SUCCESS, (uint8_t*)&payload, sizeof(payload)); + reply_ng(CMD_LF_T55XX_CHK_PWDS, PM3_SUCCESS, (uint8_t *)&payload, sizeof(payload)); BigBuf_free(); } @@ -2509,7 +2509,7 @@ void EM4xReadWord(uint8_t addr, uint32_t pwd, uint8_t usepwd) { WaitMS(20); LED_A_ON(); - + // clear buffer now so it does not interfere with timing later BigBuf_Clear_ext(false); @@ -2530,7 +2530,7 @@ void EM4xReadWord(uint8_t addr, uint32_t pwd, uint8_t usepwd) { WaitUS(400); DoPartialAcquisition(20, false, 6000, 1000); - + StopTicks(); FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); reply_ng(CMD_LF_EM4X_READWORD, PM3_SUCCESS, NULL, 0); @@ -2565,7 +2565,7 @@ void EM4xWriteWord(uint8_t addr, uint32_t data, uint32_t pwd, uint8_t usepwd) { // Wait 20ms for write to complete? WaitMS(7); - + DoPartialAcquisition(20, false, 6000, 1000); StopTicks(); @@ -2626,19 +2626,19 @@ void Cotag(uint32_t arg0) { // send COTAG start pulse // http://www.proxmark.org/forum/viewtopic.php?id=4455 -/* - ON(740) OFF(2035) - ON(3330) OFF(2035) - ON(740) OFF(2035) - ON(2000) -*/ + /* + ON(740) OFF(2035) + ON(3330) OFF(2035) + ON(740) OFF(2035) + ON(2000) + */ ON(800) OFF(2200) ON(3600) OFF(2200) ON(800) OFF(2200) ON(2000) // ON(3400) FpgaSendCommand(FPGA_CMD_SET_DIVISOR, LF_FREQ2DIV(66)); // 66kHz - + switch (rawsignal) { case 0: { doCotagAcquisition(); diff --git a/armsrc/lfsampling.c b/armsrc/lfsampling.c index d5f66c22e..b5e074e5b 100644 --- a/armsrc/lfsampling.c +++ b/armsrc/lfsampling.c @@ -303,14 +303,14 @@ uint32_t DoAcquisition(uint8_t decimation, uint8_t bits_per_sample, bool avg, in // threshold either high or low values 128 = center 0. if trigger = 178 if (trigger_hit == false) { - if ((trigger_threshold > 0) && (sample < (trigger_threshold + 128)) && (sample > (128 - trigger_threshold))) { - if (cancel_after > 0) { - cancel_counter++; - if (cancel_after == cancel_counter) - break; + if ((trigger_threshold > 0) && (sample < (trigger_threshold + 128)) && (sample > (128 - trigger_threshold))) { + if (cancel_after > 0) { + cancel_counter++; + if (cancel_after == cancel_counter) + break; + } + continue; } - continue; - } } trigger_hit = true; @@ -539,12 +539,12 @@ void doCotagAcquisition(void) { } ++i; - if (sample > COTAG_ONE_THRESHOLD) { - dest[i] = 255; - } else if (sample < COTAG_ZERO_THRESHOLD) { - dest[i] = 0; - } else { - dest[i] = dest[i - 1]; + if (sample > COTAG_ONE_THRESHOLD) { + dest[i] = 255; + } else if (sample < COTAG_ZERO_THRESHOLD) { + dest[i] = 0; + } else { + dest[i] = dest[i - 1]; } } } @@ -558,7 +558,7 @@ uint16_t doCotagAcquisitionManchester(uint8_t *dest, uint16_t destlen) { if (dest == NULL) return 0; - + dest[0] = 0; bool firsthigh = false, firstlow = false; diff --git a/armsrc/mifarecmd.c b/armsrc/mifarecmd.c index b07772107..4cd4eee67 100644 --- a/armsrc/mifarecmd.c +++ b/armsrc/mifarecmd.c @@ -1708,10 +1708,10 @@ void MifareChkKeys(uint8_t *datain, uint8_t reserved_mem) { uint16_t key_mem_available; if (reserved_mem) - key_mem_available = key_count * 6; + key_mem_available = key_count * 6; else - key_mem_available = MIN((PM3_CMD_DATA_SIZE - 5), key_count * 6); - + key_mem_available = MIN((PM3_CMD_DATA_SIZE - 5), key_count * 6); + key_count = key_mem_available / 6; datain += 5; @@ -1965,7 +1965,7 @@ int MifareECardLoad(uint8_t sectorcnt, uint8_t keytype) { for (uint8_t blockNo = 0; blockNo < NumBlocksPerSector(sectorNo); blockNo++) { if (mifare_classic_readblock(pcs, cuid, FirstBlockOfSector(sectorNo) + blockNo, dataoutbuf)) { retval = PM3_EPARTIAL; - + if (DBGLEVEL > DBG_ERROR) Dbprintf("Error reading sector %2d block %2d", sectorNo, blockNo); continue; } @@ -2062,12 +2062,12 @@ void MifareCSetBlock(uint32_t arg0, uint32_t arg1, uint8_t *datain) { errormsg = MAGIC_WIPE; break; } - - uint32_t old_timeout = iso14a_get_timeout(); - - // 2000 ms timeout - // 13560000 / 1000 / (8 * 16) * timeout - iso14a_set_timeout(21190); + + uint32_t old_timeout = iso14a_get_timeout(); + + // 2000 ms timeout + // 13560000 / 1000 / (8 * 16) * timeout + iso14a_set_timeout(21190); ReaderTransmit(wipeC, sizeof(wipeC), NULL); if (!ReaderReceive(receivedAnswer, receivedAnswerPar) || (receivedAnswer[0] != 0x0a)) { @@ -2075,7 +2075,7 @@ void MifareCSetBlock(uint32_t arg0, uint32_t arg1, uint8_t *datain) { errormsg = MAGIC_WIPE; break; } - iso14a_set_timeout(old_timeout); + iso14a_set_timeout(old_timeout); mifare_classic_halt_ex(NULL); } @@ -2255,12 +2255,12 @@ void MifareCIdent(void) { if (memcmp(buf, "\x0D\x78\x00\x71\x02\x88\x49\xA1\x30\x20\x15\x06\x08\x56\x3D", 15) == 0) { isGen = MAGIC_GEN_2; } - // test for Ultralight magic gen2 + // test for Ultralight magic gen2 if (memcmp(buf, "\x0A\x78\x00\x81\x02\xDB\xA0\xC1\x19\x40\x2A\xB5", 12) == 0) { isGen = MAGIC_GEN_2; goto OUT; } - // test for Ultralight EV1 magic gen2 + // test for Ultralight EV1 magic gen2 if (memcmp(buf, "\x85\x00\x00\xA0\x00\x00\x0A\xC3\x00\x04\x03\x01\x01\x00\x0B\x03\x41\xDF", 18) == 0) { isGen = MAGIC_GEN_2; goto OUT; diff --git a/armsrc/spiffs.c b/armsrc/spiffs.c index e07b21ad4..a1b3e8e39 100644 --- a/armsrc/spiffs.c +++ b/armsrc/spiffs.c @@ -482,16 +482,16 @@ int rdv40_spiffs_read_as_symlink(char *filename, uint8_t *dst, uint32_t size, RD sprintf(linkfilename, "%s.lnk", filename); if (DBGLEVEL >= DBG_DEBUG) - Dbprintf("Linkk real filename is : " _YELLOW_("%s"), linkfilename); + Dbprintf("Linkk real filename is : " _YELLOW_("%s"), linkfilename); read_from_spiffs((char *)linkfilename, (uint8_t *)linkdest, SPIFFS_OBJ_NAME_LEN); - if (DBGLEVEL >= DBG_DEBUG) + if (DBGLEVEL >= DBG_DEBUG) Dbprintf("Symlink destination is : " _YELLOW_("%s"), linkdest); - read_from_spiffs((char *)linkdest, (uint8_t *)dst, size); - ) -} + read_from_spiffs((char *)linkdest, (uint8_t *)dst, size); + ) + } // BEWARE ! This function is DESTRUCTIVE as it will UPDATE an existing symlink // Since it creates a .lnk extension file it may be minor to mistake the order of arguments @@ -522,18 +522,18 @@ int rdv40_spiffs_make_symlink(char *linkdest, char *filename, RDV40SpiFFSSafetyL int rdv40_spiffs_read_as_filetype(char *filename, uint8_t *dst, uint32_t size, RDV40SpiFFSSafetyLevel level) { RDV40_SPIFFS_SAFE_FUNCTION( RDV40SpiFFSFileType filetype = filetype_in_spiffs((char *)filename); - switch (filetype) { - case RDV40_SPIFFS_FILETYPE_REAL: - rdv40_spiffs_read((char *)filename, (uint8_t *)dst, size, level); - break; - case RDV40_SPIFFS_FILETYPE_SYMLINK: - rdv40_spiffs_read_as_symlink((char *)filename, (uint8_t *)dst, size, level); - break; - case RDV40_SPIFFS_FILETYPE_BOTH: - case RDV40_SPIFFS_FILETYPE_UNKNOWN: - default: - ; - } + switch (filetype) { + case RDV40_SPIFFS_FILETYPE_REAL: + rdv40_spiffs_read((char *)filename, (uint8_t *)dst, size, level); + break; + case RDV40_SPIFFS_FILETYPE_SYMLINK: + rdv40_spiffs_read_as_symlink((char *)filename, (uint8_t *)dst, size, level); + break; + case RDV40_SPIFFS_FILETYPE_BOTH: + case RDV40_SPIFFS_FILETYPE_UNKNOWN: + default: + ; + } ) } diff --git a/client/src/cmdhf.c b/client/src/cmdhf.c index a58559945..dd3bf4b51 100644 --- a/client/src/cmdhf.c +++ b/client/src/cmdhf.c @@ -166,16 +166,16 @@ int CmdHFSearch(const char *Cmd) { } } -/* - PROMPT_CLEARLINE; - PrintAndLogEx(INPLACE, " Searching for FeliCa tag..."); - if (IfPm3Felica()) { - if (readFelicaUid(false) == PM3_SUCCESS) { - PrintAndLogEx(NORMAL, "\nValid " _GREEN_("ISO18092 / FeliCa tag") " found\n"); - res = PM3_SUCCESS; + /* + PROMPT_CLEARLINE; + PrintAndLogEx(INPLACE, " Searching for FeliCa tag..."); + if (IfPm3Felica()) { + if (readFelicaUid(false) == PM3_SUCCESS) { + PrintAndLogEx(NORMAL, "\nValid " _GREEN_("ISO18092 / FeliCa tag") " found\n"); + res = PM3_SUCCESS; + } } - } -*/ + */ /* PROMPT_CLEARLINE; PrintAndLogEx(INPLACE, " Searching for CryptoRF tag..."); diff --git a/client/src/cmdhf14b.c b/client/src/cmdhf14b.c index 106fa0890..b0ce49f50 100644 --- a/client/src/cmdhf14b.c +++ b/client/src/cmdhf14b.c @@ -114,7 +114,7 @@ static int usage_hf_14b_dump(void) { "Example:\n" _YELLOW_("\thf 14b dump f\n") _YELLOW_("\thf 14b dump 2 f mydump") - ); + ); return 0; } @@ -752,7 +752,7 @@ static int CmdHF14BReadSri(const char *Cmd) { clearCommandBuffer(); SendCommandMIX(CMD_HF_SRI_READ, blocks, 0, 0, NULL, 0); - + // iceman: should download read data and print in client. return PM3_SUCCESS; } diff --git a/client/src/cmdhf15.c b/client/src/cmdhf15.c index ceadb5c23..1cba1e6a0 100644 --- a/client/src/cmdhf15.c +++ b/client/src/cmdhf15.c @@ -420,7 +420,7 @@ static int nxp_15693_print_signature(uint8_t *uid, uint8_t *signature) { 0x29, 0x29, 0xfd, 0xcd, 0x69, 0x8b, 0x34, 0x68, 0xf2 } }; - */ + */ uint8_t i; bool is_valid = false; for (i = 0; i < ARRAYLEN(nxp_15693_public_keys); i++) { @@ -526,7 +526,7 @@ static bool getUID(bool loop, uint8_t *buf) { int resplen = resp.oldarg[0]; if (resplen >= 12 && CheckCrc15(resp.data.asBytes, 12)) { - + if (buf) memcpy(buf, resp.data.asBytes + 2, 8); @@ -990,7 +990,7 @@ static int CmdHF15Sniff(const char *Cmd) { SendCommandNG(CMD_HF_ISO15693_SNIFF, NULL, 0); WaitForResponse(CMD_HF_ISO15693_SNIFF, &resp); - + PrintAndLogEx(HINT, "Try `" _YELLOW_("hf 15 list") "` to view captured tracelog"); PrintAndLogEx(HINT, "Try `" _YELLOW_("trace save h") "` to save tracelog for later analysing"); return PM3_SUCCESS; @@ -1024,7 +1024,7 @@ static int CmdHF15Sim(const char *Cmd) { PacketResponseNG resp; clearCommandBuffer(); - SendCommandNG(CMD_HF_ISO15693_SIMULATE, (uint8_t*)&payload, sizeof(payload)); + SendCommandNG(CMD_HF_ISO15693_SIMULATE, (uint8_t *)&payload, sizeof(payload)); WaitForResponse(CMD_HF_ISO15693_SIMULATE, &resp); return PM3_SUCCESS; } @@ -1358,7 +1358,7 @@ static int CmdHF15Raw(const char *Cmd) { } PacketResponseNG resp; - clearCommandBuffer(); + clearCommandBuffer(); SendCommandMIX(CMD_HF_ISO15693_COMMAND, datalen, fast, reply, data, datalen); if (reply) { @@ -1442,7 +1442,7 @@ static int CmdHF15Readmulti(const char *Cmd) { } uint8_t *data = resp.data.asBytes; - + if (CheckCrc15(data, status) == false) { PrintAndLogEx(FAILED, "crc (" _RED_("fail") ")"); return PM3_ESOFT; @@ -1741,7 +1741,7 @@ static int CmdHF15Restore(const char *Cmd) { } free(data); PrintAndLogEx(INFO, "done"); - PrintAndLogEx(HINT, "try `" _YELLOW_("hf 15 dump") "` to read your card to verify" ); + PrintAndLogEx(HINT, "try `" _YELLOW_("hf 15 dump") "` to read your card to verify"); return PM3_SUCCESS; } @@ -1779,10 +1779,10 @@ static int CmdHF15CSetUID(const char *Cmd) { } PrintAndLogEx(INFO, "updating tag uid..."); - + PacketResponseNG resp; clearCommandBuffer(); - SendCommandNG(CMD_HF_ISO15693_CSETUID, (uint8_t*)&payload, sizeof(payload)); + SendCommandNG(CMD_HF_ISO15693_CSETUID, (uint8_t *)&payload, sizeof(payload)); if (WaitForResponseTimeout(CMD_HF_ISO15693_CSETUID, &resp, 2000) == false) { PrintAndLogEx(WARNING, "timeout while waiting for reply"); @@ -1799,10 +1799,10 @@ static int CmdHF15CSetUID(const char *Cmd) { uint8_t revuid[8] = {0}; uint8_t i = 0; while (i < sizeof(revuid)) { - revuid[i] = carduid[7-i]; + revuid[i] = carduid[7 - i]; i++; } - + if (memcmp(revuid, payload.uid, 8) != 0) { PrintAndLogEx(FAILED, "setting new UID (" _RED_("failed") ")"); return PM3_ESOFT; diff --git a/client/src/cmdhfcryptorf.c b/client/src/cmdhfcryptorf.c index cd3bc93a4..98eada2ba 100644 --- a/client/src/cmdhfcryptorf.c +++ b/client/src/cmdhfcryptorf.c @@ -59,7 +59,7 @@ static int usage_hf_cryptorf_sniff(void) { } static int usage_hf_cryptorf_sim(void) { PrintAndLogEx(NORMAL, "Emulating CryptoRF tag with emulator memory\n" - "Usage: hf cryptorf sim [h] \n" + "Usage: hf cryptorf sim [h] \n" "Options:\n" " h this help\n" "\n" diff --git a/client/src/cmdhfepa.c b/client/src/cmdhfepa.c index eb4efc9f1..83f347604 100644 --- a/client/src/cmdhfepa.c +++ b/client/src/cmdhfepa.c @@ -26,16 +26,16 @@ static int CmdHelp(const char *Cmd); static int usage_epa_collect(void) { PrintAndLogEx(NORMAL, "Tries to collect nonces when doing part of PACE protocol.\n" - "\n" - "Usage: hf epa cnonces \n" - "Options:\n" - "\t nonce size\n" - "\t number of nonces to collect\n" - "\t delay between\n" - "\n" - "Example:\n" - _YELLOW_("\thf epa cnonces 4 4 1") - ); + "\n" + "Usage: hf epa cnonces \n" + "Options:\n" + "\t nonce size\n" + "\t number of nonces to collect\n" + "\t delay between\n" + "\n" + "Example:\n" + _YELLOW_("\thf epa cnonces 4 4 1") + ); return PM3_SUCCESS; } @@ -60,18 +60,18 @@ static int CmdHFEPACollectPACENonces(const char *Cmd) { PrintAndLogEx(SUCCESS, "Collecting %u %u byte nonces", n, m); PrintAndLogEx(SUCCESS, "Start: %" PRIu64, msclock() / 1000); - + struct p { uint32_t m; } PACKED payload; payload.m = m; - + for (uint32_t i = 0; i < n; i++) { // execute PACE PacketResponseNG resp; clearCommandBuffer(); - SendCommandNG(CMD_HF_EPA_COLLECT_NONCE, (uint8_t*)&payload, sizeof(payload)); + SendCommandNG(CMD_HF_EPA_COLLECT_NONCE, (uint8_t *)&payload, sizeof(payload)); WaitForResponse(CMD_HF_EPA_COLLECT_NONCE, &resp); @@ -92,7 +92,7 @@ static int CmdHFEPACollectPACENonces(const char *Cmd) { sleep(d); } } - + PrintAndLogEx(SUCCESS, "End: %" PRIu64, msclock() / 1000); return PM3_SUCCESS; } diff --git a/client/src/cmdhficlass.c b/client/src/cmdhficlass.c index 25c380253..28b74f422 100644 --- a/client/src/cmdhficlass.c +++ b/client/src/cmdhficlass.c @@ -388,7 +388,7 @@ static int cmp_uint32(const void *a, const void *b) { return mx > my; } -bool check_known_default(uint8_t *csn, uint8_t *epurse, uint8_t* rmac, uint8_t* tmac, uint8_t* key) { +bool check_known_default(uint8_t *csn, uint8_t *epurse, uint8_t *rmac, uint8_t *tmac, uint8_t *key) { iclass_prekey_t *prekey = calloc(ICLASS_KEYS_MAX, sizeof(iclass_prekey_t)); if (prekey == false) { @@ -399,14 +399,14 @@ bool check_known_default(uint8_t *csn, uint8_t *epurse, uint8_t* rmac, uint8_t* memcpy(ccnr, epurse, 8); memcpy(ccnr + 8, rmac, 4); - GenerateMacKeyFrom(csn, ccnr, false, false, (uint8_t*)iClass_Key_Table, ICLASS_KEYS_MAX, prekey); + GenerateMacKeyFrom(csn, ccnr, false, false, (uint8_t *)iClass_Key_Table, ICLASS_KEYS_MAX, prekey); qsort(prekey, ICLASS_KEYS_MAX, sizeof(iclass_prekey_t), cmp_uint32); iclass_prekey_t lookup; memcpy(lookup.mac, tmac, 4); // binsearch - iclass_prekey_t * item = (iclass_prekey_t *) bsearch(&lookup, prekey, ICLASS_KEYS_MAX, sizeof(iclass_prekey_t), cmp_uint32); + iclass_prekey_t *item = (iclass_prekey_t *) bsearch(&lookup, prekey, ICLASS_KEYS_MAX, sizeof(iclass_prekey_t), cmp_uint32); if (item != NULL) { memcpy(key, item->key, 8); return true; @@ -1268,7 +1268,7 @@ static int CmdHFiClassEView(const char *Cmd) { free(dump); return PM3_ETIMEOUT; } - + if (verbose) { print_picopass_header((picopass_hdr *) dump); print_picopass_info((picopass_hdr *) dump); @@ -1279,18 +1279,18 @@ static int CmdHFiClassEView(const char *Cmd) { PrintAndLogEx(INFO, "------+----+-------------------------+----------"); PrintAndLogEx(INFO, " CSN |0x00| " _GREEN_("%s") "|", sprint_hex(csn, 8)); printIclassDumpContents(dump, 1, blocks, bytes); - -/* - PrintAndLogEx(NORMAL, ""); - PrintAndLogEx(INFO, "----+-------------------------+---------"); - PrintAndLogEx(INFO, "blk | data | ascii"); - PrintAndLogEx(INFO, "----+-------------------------+---------"); - for (uint16_t i = 0; i < blocks; i++){ - PrintAndLogEx(INFO, "%03d | %s ", i, sprint_hex_ascii(dump + (i * 8) , 8) ); - } - PrintAndLogEx(INFO, "----+-------------------------+---------"); - PrintAndLogEx(NORMAL, ""); -*/ + + /* + PrintAndLogEx(NORMAL, ""); + PrintAndLogEx(INFO, "----+-------------------------+---------"); + PrintAndLogEx(INFO, "blk | data | ascii"); + PrintAndLogEx(INFO, "----+-------------------------+---------"); + for (uint16_t i = 0; i < blocks; i++){ + PrintAndLogEx(INFO, "%03d | %s ", i, sprint_hex_ascii(dump + (i * 8) , 8) ); + } + PrintAndLogEx(INFO, "----+-------------------------+---------"); + PrintAndLogEx(NORMAL, ""); + */ free(dump); return PM3_SUCCESS; } @@ -2247,7 +2247,7 @@ static int CmdHFiClassRestore(const char *Cmd) { if (startblock < 5) { PrintAndLogEx(WARNING, "you cannot write key blocks this way. yet... make your start block > 4"); - return PM3_EINVARG; + return PM3_EINVARG; } int total_bytes = (((endblock - startblock) + 1) * 12); diff --git a/client/src/cmdhficlass.h b/client/src/cmdhficlass.h index afc612c33..d060d1275 100644 --- a/client/src/cmdhficlass.h +++ b/client/src/cmdhficlass.h @@ -41,5 +41,5 @@ void PrintPreCalcMac(uint8_t *keys, uint32_t keycnt, iclass_premac_t *pre_list); void PrintPreCalc(iclass_prekey_t *list, uint32_t itemcnt); uint8_t get_pagemap(const picopass_hdr *hdr); -bool check_known_default(uint8_t *csn, uint8_t *epurse, uint8_t* rmac, uint8_t* tmac, uint8_t* key); +bool check_known_default(uint8_t *csn, uint8_t *epurse, uint8_t *rmac, uint8_t *tmac, uint8_t *key); #endif diff --git a/client/src/cmdhflegic.c b/client/src/cmdhflegic.c index 2a1282262..5d9147896 100644 --- a/client/src/cmdhflegic.c +++ b/client/src/cmdhflegic.c @@ -590,13 +590,13 @@ static int CmdLegicSim(const char *Cmd) { uint8_t tagtype; bool send_reply; } PACKED payload; - + payload.send_reply = true; payload.tagtype = param_get8ex(Cmd, 0, 1, 10); - if (payload.tagtype > 2 ) { - return usage_legic_sim(); - } - + if (payload.tagtype > 2) { + return usage_legic_sim(); + } + clearCommandBuffer(); SendCommandNG(CMD_HF_LEGIC_SIMULATE, (uint8_t *)&payload, sizeof(payload)); PacketResponseNG resp; @@ -605,15 +605,15 @@ static int CmdLegicSim(const char *Cmd) { bool keypress = kbd_enter_pressed(); while (keypress == false) { keypress = kbd_enter_pressed(); - - if (WaitForResponseTimeout(CMD_HF_LEGIC_SIMULATE, &resp, 1500)) { - break; - } - } - if (keypress) + if (WaitForResponseTimeout(CMD_HF_LEGIC_SIMULATE, &resp, 1500)) { + break; + } + + } + if (keypress) SendCommandNG(CMD_BREAK_LOOP, NULL, 0); - + PrintAndLogEx(INFO, "Done"); return PM3_SUCCESS; } diff --git a/client/src/cmdhflist.c b/client/src/cmdhflist.c index 9f7f2dbc2..d898e9ab9 100644 --- a/client/src/cmdhflist.c +++ b/client/src/cmdhflist.c @@ -339,7 +339,7 @@ void annotateIclass(char *exp, size_t size, uint8_t *cmd, uint8_t cmdsize, bool static uint8_t rmac[4]; static uint8_t tmac[4]; - if ( isResponse == false ) { + if (isResponse == false) { uint8_t c = cmd[0] & 0x0F; uint8_t parity = 0; for (uint8_t i = 0; i < 7; i++) { @@ -409,17 +409,17 @@ void annotateIclass(char *exp, size_t size, uint8_t *cmd, uint8_t cmdsize, bool } } else { - + if (curr_state == PICO_SELECT) { memcpy(csn, cmd, 8); curr_state = PICO_NONE; } else if (curr_state == PICO_AUTH_EPURSE) { memcpy(epurse, cmd, 8); - } else if ( curr_state == PICO_AUTH_MACS) { + } else if (curr_state == PICO_AUTH_MACS) { uint8_t key[8]; if (check_known_default(csn, epurse, rmac, tmac, key)) { - snprintf(exp, size, "( " _GREEN_("%s") ")", sprint_hex(key, 8) ); + snprintf(exp, size, "( " _GREEN_("%s") ")", sprint_hex(key, 8)); } curr_state = PICO_NONE; } @@ -438,11 +438,11 @@ void annotateIso15693(char *exp, size_t size, uint8_t *cmd, uint8_t cmdsize) { snprintf(exp, size, "STAY_QUIET"); return; case ISO15693_READBLOCK: { - + uint8_t block = 0; if (cmdsize == 13) block = cmd[10]; - + snprintf(exp, size, "READBLOCK(%d)", block); return; } @@ -560,7 +560,7 @@ void annotateIso15693(char *exp, size_t size, uint8_t *cmd, uint8_t cmdsize) { if (cmd[1] > ISO15693_STAYQUIET && cmd[1] < ISO15693_READBLOCK) snprintf(exp, size, "Mandatory RFU"); else if (cmd[1] > ISO15693_READ_MULTI_SECSTATUS && cmd[1] <= 0x9F) snprintf(exp, size, "Optional RFU"); - // else if (cmd[1] >= 0xA0 && cmd[1] <= 0xDF) snprintf(exp, size, "Cust IC MFG dependent"); + // else if (cmd[1] >= 0xA0 && cmd[1] <= 0xDF) snprintf(exp, size, "Cust IC MFG dependent"); else if (cmd[1] > ISO15693_READ_SIGNATURE && cmd[1] <= 0xDF) snprintf(exp, size, "Cust IC MFG dependent"); else if (cmd[1] >= 0xE0) snprintf(exp, size, "Proprietary IC MFG dependent"); else @@ -612,8 +612,8 @@ void annotateTopaz(char *exp, size_t size, uint8_t *cmd, uint8_t cmdsize) { // iso 7816-3 void annotateIso7816(char *exp, size_t size, uint8_t *cmd, uint8_t cmdsize) { - if (cmdsize < 2) - return; + if (cmdsize < 2) + return; // S-block if ((cmd[0] & 0xC0) && (cmdsize == 3)) { @@ -999,13 +999,13 @@ void annotateCryptoRF(char *exp, size_t size, uint8_t *cmd, uint8_t cmdsize) { break; case CRYPTORF_DESELECT: snprintf(exp, size, "DESELECT"); - break; + break; case CRYPTORF_IDLE: snprintf(exp, size, "IDLE"); - break; + break; case CRYPTORF_CHECK_PASSWORD: snprintf(exp, size, "CHECK PWD"); - break; + break; default: snprintf(exp, size, "?"); break; diff --git a/client/src/cmdhfmf.c b/client/src/cmdhfmf.c index 4c7e38910..4392c1cd8 100644 --- a/client/src/cmdhfmf.c +++ b/client/src/cmdhfmf.c @@ -594,9 +594,9 @@ static int32_t initSectorTable(sector_t **src, int32_t items) { return items; } -static void decode_print_st(uint16_t blockno, uint8_t* data) { +static void decode_print_st(uint16_t blockno, uint8_t *data) { if (mfIsSectorTrailer(blockno)) { - PrintAndLogEx(NORMAL, ""); + PrintAndLogEx(NORMAL, ""); PrintAndLogEx(NORMAL, "Sector trailer decoded:"); PrintAndLogEx(NORMAL, "----------------------------------------------"); PrintAndLogEx(NORMAL, "Key A " _GREEN_("%s"), sprint_hex_inrow(data, 6)); @@ -756,7 +756,7 @@ static int CmdHF14AMfRdBl(const char *Cmd) { return PM3_ESOFT; } - if ((data[6] || data[7] || data[8])) { + if ((data[6] || data[7] || data[8])) { decode_print_st(blockNo, data); } } else { @@ -811,7 +811,7 @@ static int CmdHF14AMfRdSc(const char *Cmd) { PrintAndLogEx(NORMAL, "isOk:%02x", isOK); if (isOK) { - + uint8_t blocks = 4; uint8_t start = sectorNo * 4; if (sectorNo > 32) { @@ -819,9 +819,9 @@ static int CmdHF14AMfRdSc(const char *Cmd) { start = 128 + (sectorNo - 32) * 16; } for (int i = 0; i < blocks; i++) { - PrintAndLogEx(NORMAL, "%3d | %s", start + i, sprint_hex(data + (i * 16) , 16)); + PrintAndLogEx(NORMAL, "%3d | %s", start + i, sprint_hex(data + (i * 16), 16)); } - decode_print_st(start + blocks - 1, data + ((blocks - 1) * 16) ); + decode_print_st(start + blocks - 1, data + ((blocks - 1) * 16)); } } else { PrintAndLogEx(WARNING, "Command execute timeout"); @@ -914,10 +914,10 @@ static int FastDumpWithEcFill(uint8_t numsectors) { PrintAndLogEx(WARNING, "Command execute timeout"); return PM3_ETIMEOUT; } - + if (resp.status != PM3_SUCCESS) { PrintAndLogEx(INFO, "fast dump reported back failure w KEY A, swapping to KEY B"); - + // ecfill key B payload.keytype = 1; @@ -928,7 +928,7 @@ static int FastDumpWithEcFill(uint8_t numsectors) { PrintAndLogEx(WARNING, "Command execute timeout"); return PM3_ETIMEOUT; } - + if (resp.status != PM3_SUCCESS) { PrintAndLogEx(INFO, "fast dump reported back failure w KEY B"); PrintAndLogEx(INFO, "Dump file is " _RED_("PARTIAL") " complete"); @@ -2127,7 +2127,7 @@ static int CmdHF14AMfAutoPWN(const char *Cmd) { free(e_sector); return prng_type; } - + // check if tag doesn't have static nonce has_staticnonce = detect_classic_static_nonce(); @@ -2471,13 +2471,13 @@ noValidKeyFound: } else { if (verbose) { PrintAndLogEx(WARNING, "unknown B key: sector: %3d key type: %c", - current_sector_i, - current_key_type_i ? 'B' : 'A' - ); + current_sector_i, + current_key_type_i ? 'B' : 'A' + ); PrintAndLogEx(INFO, " -- reading the B key was not possible, maybe due to access rights?"); - + } - + } if (verbose) { PrintAndLogEx(INFO, "======================= " _YELLOW_("STOP READ B KEY ATTACK") " ======================="); @@ -2489,7 +2489,7 @@ noValidKeyFound: skipReadBKey: if (e_sector[current_sector_i].foundKey[current_key_type_i] == 0) { - if (has_staticnonce) + if (has_staticnonce) goto tryStaticnested; if (prng_type && (nested_failed == false)) { @@ -2502,7 +2502,7 @@ skipReadBKey: } tryNested: isOK = mfnested(FirstBlockOfSector(blockNo), keyType, key, FirstBlockOfSector(current_sector_i), current_key_type_i, tmp_key, calibrate); - + switch (isOK) { case PM3_ETIMEOUT: { PrintAndLogEx(ERR, "\nError: No response from Proxmark3."); @@ -2543,7 +2543,7 @@ tryNested: PrintAndLogEx(ERR, "unknown Error.\n"); free(e_sector); return PM3_ESOFT; - } + } } if (verbose) { PrintAndLogEx(INFO, "======================= " _YELLOW_("STOP NESTED ATTACK") " ======================="); @@ -2588,16 +2588,16 @@ tryHardnested: // If the nested attack fails then we try the hardnested attack PrintAndLogEx(INFO, "======================= " _YELLOW_("STOP HARDNESTED ATTACK") " ======================="); } } - + if (has_staticnonce) { tryStaticnested: - if (verbose) { + if (verbose) { PrintAndLogEx(INFO, "======================= " _YELLOW_("START STATIC NESTED ATTACK") " ======================="); PrintAndLogEx(INFO, "sector no: %3d, target key type: %c", current_sector_i, current_key_type_i ? 'B' : 'A'); } - + isOK = mfStaticNested(blockNo, keyType, key, FirstBlockOfSector(current_sector_i), current_key_type_i, tmp_key); DropField(); switch (isOK) { @@ -2620,12 +2620,12 @@ tryStaticnested: break; } } - + if (verbose) { PrintAndLogEx(INFO, "======================= " _YELLOW_("STOP STATIC NESTED ATTACK") " ======================="); } } - + // Check if the key was found if (e_sector[current_sector_i].foundKey[current_key_type_i]) { PrintAndLogEx(SUCCESS, "target sector:%3u key type: %c -- found valid key [" _YELLOW_("%s") "]", @@ -2657,7 +2657,7 @@ all_found: // clear emulator mem clearCommandBuffer(); SendCommandNG(CMD_HF_MIFARE_EML_MEMCLR, NULL, 0); - + PrintAndLogEx(SUCCESS, "transferring keys to simulator memory (Cmd Error: 04 can occur)"); for (current_sector_i = 0; current_sector_i < sectors_cnt; current_sector_i++) { @@ -3876,13 +3876,13 @@ static int CmdHF14AMfEView(const char *Cmd) { PrintAndLogEx(INFO, "----+-------------------------------------------------+-----------------"); PrintAndLogEx(INFO, "blk | data | ascii"); PrintAndLogEx(INFO, "----+-------------------------------------------------+-----------------"); - for (uint16_t i = 0; i < blocks; i++){ + for (uint16_t i = 0; i < blocks; i++) { if (i == 0) { - PrintAndLogEx(INFO, "%03d | " _RED_("%s"), i, sprint_hex_ascii(dump + (i * 16) , 16) ); + PrintAndLogEx(INFO, "%03d | " _RED_("%s"), i, sprint_hex_ascii(dump + (i * 16), 16)); } else if (mfIsSectorTrailer(i)) { - PrintAndLogEx(INFO, "%03d | " _YELLOW_("%s"), i, sprint_hex_ascii(dump + (i * 16) , 16) ); + PrintAndLogEx(INFO, "%03d | " _YELLOW_("%s"), i, sprint_hex_ascii(dump + (i * 16), 16)); } else { - PrintAndLogEx(INFO, "%03d | %s ", i, sprint_hex_ascii(dump + (i * 16) , 16) ); + PrintAndLogEx(INFO, "%03d | %s ", i, sprint_hex_ascii(dump + (i * 16), 16)); } } PrintAndLogEx(INFO, "----+-------------------------------------------------+-----------------"); @@ -4462,11 +4462,11 @@ static int CmdHF14AMfCView(const char *Cmd) { bool errors = false; int flags; - char ctmp = '1'; + char ctmp = '1'; uint8_t cmdp = 0; uint8_t numblocks = NumOfBlocks(ctmp); uint16_t bytes = numblocks * MFBLOCK_SIZE; - + while (param_getchar(Cmd, cmdp) != 0x00 && !errors) { ctmp = tolower(param_getchar(Cmd, cmdp)); switch (ctmp) { @@ -4486,7 +4486,7 @@ static int CmdHF14AMfCView(const char *Cmd) { break; } } - + if (errors) return usage_hf14_cview(); PrintAndLogEx(SUCCESS, "View magic MIFARE " _GREEN_("%cK"), ctmp); @@ -4540,14 +4540,14 @@ static int CmdHF14AMfCView(const char *Cmd) { PrintAndLogEx(INFO, "----+-------------------------------------------------+-----------------"); PrintAndLogEx(INFO, "blk | data | ascii"); PrintAndLogEx(INFO, "----+-------------------------------------------------+-----------------"); - for (uint16_t i = 0; i < numblocks; i++){ - + for (uint16_t i = 0; i < numblocks; i++) { + if (i == 0) { - PrintAndLogEx(INFO, "%03d | " _RED_("%s"), i, sprint_hex_ascii(dump + (i * 16) , 16) ); + PrintAndLogEx(INFO, "%03d | " _RED_("%s"), i, sprint_hex_ascii(dump + (i * 16), 16)); } else if (mfIsSectorTrailer(i)) { - PrintAndLogEx(INFO, "%03d | " _YELLOW_("%s"), i, sprint_hex_ascii(dump + (i * 16) , 16) ); + PrintAndLogEx(INFO, "%03d | " _YELLOW_("%s"), i, sprint_hex_ascii(dump + (i * 16), 16)); } else { - PrintAndLogEx(INFO, "%03d | %s ", i, sprint_hex_ascii(dump + (i * 16) , 16) ); + PrintAndLogEx(INFO, "%03d | %s ", i, sprint_hex_ascii(dump + (i * 16), 16)); } } PrintAndLogEx(INFO, "----+-------------------------------------------------+-----------------"); @@ -5250,7 +5250,7 @@ static command_t CommandTable[] = { {"gen3uid", CmdHf14AGen3UID, IfPm3Iso14443a, "Set UID without manufacturer block (magic gen3 card)"}, {"gen3blk", CmdHf14AGen3Blk, IfPm3Iso14443a, "Overwrite full manufacturer block (magic gen 3 card)"}, {"gen3freez", CmdHf14AGen3Freez, IfPm3Iso14443a, "Lock further UID changes (magic gen 3 card)"}, - + {"-----------", CmdHelp, IfPm3Iso14443a, "----------------------- " _CYAN_("i") " -----------------------"}, {"ice", CmdHF14AMfice, IfPm3Iso14443a, "collect MIFARE Classic nonces to file"}, {NULL, NULL, NULL, NULL} diff --git a/client/src/cmdhfmfp.c b/client/src/cmdhfmfp.c index ab06ef619..4ee04e781 100644 --- a/client/src/cmdhfmfp.c +++ b/client/src/cmdhfmfp.c @@ -144,7 +144,7 @@ static nxp_cardtype_t getCardType(uint8_t major, uint8_t minor) { return DESFIRE_EV2; // DESFire EV3 - if (major == 0x33 && minor == 0x00 ) + if (major == 0x33 && minor == 0x00) return DESFIRE_EV3; // DESFire Light @@ -1023,7 +1023,7 @@ static int MFPKeyCheck(uint8_t startSector, uint8_t endSector, uint8_t startKeyA PrintAndLogEx(ERR, "\nExchange error. Aborted."); else PrintAndLogEx(NORMAL, "E" NOLF); - + DropField(); return PM3_ECARDEXCHANGE; } diff --git a/client/src/cmdhfmfu.c b/client/src/cmdhfmfu.c index bfa0982c7..9b983dd4b 100644 --- a/client/src/cmdhfmfu.c +++ b/client/src/cmdhfmfu.c @@ -1096,7 +1096,7 @@ uint32_t GetHF14AMfU_Type(void) { else if (memcmp(version, "\x00\x04\x03\x02\x01\x00\x0B", 7) == 0) { tagtype = UL_EV1_48; break; } else if (memcmp(version, "\x00\x04\x03\x01\x01\x00\x0E", 7) == 0) { tagtype = UL_EV1_128; break; } else if (memcmp(version, "\x00\x04\x03\x02\x01\x00\x0E", 7) == 0) { tagtype = UL_EV1_128; break; } - else if (memcmp(version, "\x00\x34\x21\x01\x01\x00\x0E", 7) == 0) { tagtype = UL_EV1_128; break; } // Mikron JSC Russia EV1 41 pages tag + else if (memcmp(version, "\x00\x34\x21\x01\x01\x00\x0E", 7) == 0) { tagtype = UL_EV1_128; break; } // Mikron JSC Russia EV1 41 pages tag else if (memcmp(version, "\x00\x04\x04\x01\x01\x00\x0B", 7) == 0) { tagtype = NTAG_210; break; } else if (memcmp(version, "\x00\x04\x04\x01\x01\x00\x0E", 7) == 0) { tagtype = NTAG_212; break; } else if (memcmp(version, "\x00\x04\x04\x02\x01\x00\x0F", 7) == 0) { tagtype = NTAG_213; break; } diff --git a/client/src/cmdlfcotag.c b/client/src/cmdlfcotag.c index 1ca5be432..b0160e335 100644 --- a/client/src/cmdlfcotag.c +++ b/client/src/cmdlfcotag.c @@ -92,7 +92,7 @@ static int CmdCOTAGRead(const char *Cmd) { PacketResponseNG resp; clearCommandBuffer(); - SendCommandNG(CMD_LF_COTAG_READ, (uint8_t*)&payload, sizeof(payload)); + SendCommandNG(CMD_LF_COTAG_READ, (uint8_t *)&payload, sizeof(payload)); uint8_t timeout = 3; while (!WaitForResponseTimeout(CMD_LF_COTAG_READ, &resp, 2000)) { diff --git a/client/src/cmdlfem4x.c b/client/src/cmdlfem4x.c index 9d9ed57db..3b00686b1 100644 --- a/client/src/cmdlfem4x.c +++ b/client/src/cmdlfem4x.c @@ -630,7 +630,7 @@ static int CmdEM410xWrite(const char *Cmd) { return PM3_EINVARG; } - PrintAndLogEx(SUCCESS, "Writing " _YELLOW_("%s") " tag with UID 0x%010" PRIx64 " (clock rate: %d)", (card==1) ? "T55x7" : "Q5/T5555", id, clock1); + PrintAndLogEx(SUCCESS, "Writing " _YELLOW_("%s") " tag with UID 0x%010" PRIx64 " (clock rate: %d)", (card == 1) ? "T55x7" : "Q5/T5555", id, clock1); // NOTE: We really should pass the clock in as a separate argument, but to // provide for backwards-compatibility for older firmware, and to avoid // having to add another argument to CMD_LF_EM410X_WRITE, we just store @@ -875,7 +875,7 @@ static int EM4x05ReadWord_ext(uint8_t addr, uint32_t pwd, bool usePwd, uint32_t PrintAndLogEx(WARNING, "(EM4x05ReadWord_ext) timeout while waiting for reply."); return PM3_ETIMEOUT; } - + if (downloadSamplesEM() == false) { return PM3_ESOFT; } diff --git a/client/src/cmdlfkeri.c b/client/src/cmdlfkeri.c index 0d4c6e8b8..a0edff920 100644 --- a/client/src/cmdlfkeri.c +++ b/client/src/cmdlfkeri.c @@ -286,7 +286,7 @@ static int CmdKeriClone(const char *Cmd) { // Prepare and write to card // 3 LSB is ONE uint64_t data = ((uint64_t)internalid << 3) + 7; - PrintAndLogEx(INFO, "Preparing to clone KERI to " _YELLOW_("%s") " with Internal Id " _YELLOW_("%" PRIx32), (q5) ? "Q5/T5555" : "T55x7",internalid); + PrintAndLogEx(INFO, "Preparing to clone KERI to " _YELLOW_("%s") " with Internal Id " _YELLOW_("%" PRIx32), (q5) ? "Q5/T5555" : "T55x7", internalid); blocks[1] = data >> 32; blocks[2] = data & 0xFFFFFFFF; @@ -366,7 +366,7 @@ int detectKeri(uint8_t *dest, size_t *size, bool *invert) { uint8_t preamble[] = {1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}; // sanity check. - if (*size < sizeof(preamble) ) return -1; + if (*size < sizeof(preamble)) return -1; size_t startIdx = 0; size_t found_size = *size; diff --git a/client/src/cmdlfnedap.c b/client/src/cmdlfnedap.c index b2e2b9bf4..8fd01ff9f 100644 --- a/client/src/cmdlfnedap.c +++ b/client/src/cmdlfnedap.c @@ -404,7 +404,7 @@ static int CmdLfNedapGen(const char *Cmd) { break; case 'q': cmdp++; - break; + break; default: PrintAndLogEx(WARNING, "Unknown parameter '%c'", param_getchar(Cmd, cmdp)); errors = true; @@ -467,13 +467,13 @@ static int CmdLFNedapClone(const char *Cmd) { } bool q5 = (strstr(Cmd, "q") != NULL); if (q5) { - if (DemodBufferLen == 64) { + if (DemodBufferLen == 64) { blocks[0] = T5555_FIXED | T5555_MODULATION_BIPHASE | T5555_INVERT_OUTPUT | T5555_SET_BITRATE(64) | 2 << T5555_MAXBLOCK_SHIFT; - } else { + } else { blocks[0] = T5555_FIXED | T5555_MODULATION_BIPHASE | T5555_INVERT_OUTPUT | T5555_SET_BITRATE(64) | 4 << T5555_MAXBLOCK_SHIFT; - } - } - + } + } + for (uint8_t i = 1; i < max ; i++) { blocks[i] = bytebits_to_byte(DemodBuffer + ((i - 1) * 32), 32); } diff --git a/client/src/cmdlfpyramid.c b/client/src/cmdlfpyramid.c index 6b4fcda0f..b4ad5564f 100644 --- a/client/src/cmdlfpyramid.c +++ b/client/src/cmdlfpyramid.c @@ -253,7 +253,7 @@ static int CmdPyramidClone(const char *Cmd) { free(bs); - PrintAndLogEx(INFO, "Preparing to clone Farpointe/Pyramid to " _YELLOW_("%s") " with Facility Code: %u, Card Number: %u", (q5) ? "Q5/T5555" : "T55x7" , facilitycode, cardnumber); + PrintAndLogEx(INFO, "Preparing to clone Farpointe/Pyramid to " _YELLOW_("%s") " with Facility Code: %u, Card Number: %u", (q5) ? "Q5/T5555" : "T55x7", facilitycode, cardnumber); print_blocks(blocks, ARRAYLEN(blocks)); int res = clone_t55xx_tag(blocks, ARRAYLEN(blocks)); diff --git a/client/src/cmdlft55xx.c b/client/src/cmdlft55xx.c index 44d9baf8c..bc84fc3f8 100644 --- a/client/src/cmdlft55xx.c +++ b/client/src/cmdlft55xx.c @@ -994,7 +994,7 @@ static int SanityOfflineCheck(bool useGraphBuffer) { static void T55xx_Print_DownlinkMode(uint8_t downlink_mode) { char msg[80]; - snprintf(msg, sizeof(msg) ,"Downlink Mode used : "); + snprintf(msg, sizeof(msg), "Downlink Mode used : "); switch (downlink_mode) { case 1 : @@ -1075,7 +1075,7 @@ static int CmdT55xxDetect(const char *Cmd) { continue; found = true; - + break; } } else { @@ -2327,7 +2327,7 @@ static int CmdT55xxDump(const char *Cmd) { strcpy(preferredName, "lf-t55xx"); for (uint8_t i = 1; i <= 7; i++) { if ((cardmem[i].blockdata != 0x00) && (cardmem[i].blockdata != 0xFFFFFFFF)) - snprintf(preferredName + strlen(preferredName), sizeof(preferredName) - strlen(preferredName) , "-%08X", cardmem[i].blockdata); + snprintf(preferredName + strlen(preferredName), sizeof(preferredName) - strlen(preferredName), "-%08X", cardmem[i].blockdata); else break; } @@ -3052,7 +3052,7 @@ static int CmdT55xxChkPwds(const char *Cmd) { bool found; uint32_t candidate; } PACKED; - struct p* packet = (struct p*)resp.data.asBytes; + struct p *packet = (struct p *)resp.data.asBytes; if (packet->found) { PrintAndLogEx(SUCCESS, "\nFound a candidate [ " _YELLOW_("%08"PRIX32) " ]", packet->candidate); @@ -3224,7 +3224,7 @@ uint8_t tryOnePassword(uint32_t password, uint8_t downlink_mode) { if (AcquireData(T55x7_PAGE0, T55x7_CONFIGURATION_BLOCK, true, password, dl_mode)) { // if (getSignalProperties()->isnoise == false) { // } else { - if (tryDetectModulationEx(dl_mode, T55XX_PrintConfig, 0 ,password)) { + if (tryDetectModulationEx(dl_mode, T55XX_PrintConfig, 0, password)) { return 1 + (dl_mode << 1); } // } diff --git a/client/src/cmdlfviking.c b/client/src/cmdlfviking.c index 614442460..205ea94b3 100644 --- a/client/src/cmdlfviking.c +++ b/client/src/cmdlfviking.c @@ -115,10 +115,10 @@ static int CmdVikingClone(const char *Cmd) { num_to_bytes(rawID, 8, &payload.blocks[0]); PrintAndLogEx(INFO, "Preparing to clone Viking tag on " _YELLOW_("%s") " - ID " _YELLOW_("%08X")" raw " _YELLOW_("%s") - , (Q5) ? "Q5/T5555" : "T55x7" - , id - , sprint_hex(payload.blocks, sizeof(payload.blocks)) - ); + , (Q5) ? "Q5/T5555" : "T55x7" + , id + , sprint_hex(payload.blocks, sizeof(payload.blocks)) + ); clearCommandBuffer(); diff --git a/client/src/cmdtrace.c b/client/src/cmdtrace.c index d87b78995..0af9de005 100644 --- a/client/src/cmdtrace.c +++ b/client/src/cmdtrace.c @@ -334,10 +334,10 @@ static uint16_t printTraceLine(uint16_t tracepos, uint16_t traceLen, uint8_t *tr // Draw the CRC column const char *crc = (crcStatus == 0 ? "!crc" : (crcStatus == 1 ? " ok " : " ")); - // mark short bytes (less than 8 Bit + Parity) - if (protocol == ISO_14443A || - protocol == PROTO_MIFARE || - protocol == THINFILM) { + // mark short bytes (less than 8 Bit + Parity) + if (protocol == ISO_14443A || + protocol == PROTO_MIFARE || + protocol == THINFILM) { // approximated with 128 * (9 * data_len); uint16_t bitime = 1056 + 32; @@ -346,17 +346,17 @@ static uint16_t printTraceLine(uint16_t tracepos, uint16_t traceLen, uint8_t *tr uint8_t m = 7; while (m > 0) { - bitime -= 128; - if ( duration > bitime) { + bitime -= 128; + if (duration > bitime) { break; - } + } m--; } - line[(data_len-1)/16][((data_len-1)%16) * 4 + 2] = '('; - line[(data_len-1)/16][((data_len-1)%16) * 4 + 3] = m + 0x30; - line[(data_len-1)/16][((data_len-1)%16) * 4 + 4] = ')'; - } - } + line[(data_len - 1) / 16][((data_len - 1) % 16) * 4 + 2] = '('; + line[(data_len - 1) / 16][((data_len - 1) % 16) * 4 + 3] = m + 0x30; + line[(data_len - 1) / 16][((data_len - 1) % 16) * 4 + 4] = ')'; + } + } uint32_t previous_end_of_transmission_timestamp = 0; @@ -388,8 +388,8 @@ static uint16_t printTraceLine(uint16_t tracepos, uint16_t traceLen, uint8_t *tr annotateHitagS(explanation, sizeof(explanation), frame, data_len, hdr->isResponse); break; case ICLASS: - annotateIclass(explanation, sizeof(explanation), frame, data_len, hdr->isResponse); - break; + annotateIclass(explanation, sizeof(explanation), frame, data_len, hdr->isResponse); + break; default: break; } diff --git a/client/src/fileutils.c b/client/src/fileutils.c index 0010eae0c..d70fe508d 100644 --- a/client/src/fileutils.c +++ b/client/src/fileutils.c @@ -429,18 +429,18 @@ int saveFileJSONex(const char *preferredName, JSONFileType ftype, uint8_t *data, } case jsfIclass: { JsonSaveStr(root, "FileType", "iclass"); - + picopass_hdr *hdr = (picopass_hdr *)data; JsonSaveBufAsHexCompact(root, "$.Card.CSN", hdr->csn, sizeof(hdr->csn)); - JsonSaveBufAsHexCompact(root, "$.Card.Configuration",(uint8_t *)&hdr->conf, sizeof(hdr->conf)); + JsonSaveBufAsHexCompact(root, "$.Card.Configuration", (uint8_t *)&hdr->conf, sizeof(hdr->conf)); uint8_t pagemap = get_pagemap(hdr); if (pagemap == PICOPASS_NON_SECURE_PAGEMODE) { picopass_ns_hdr *ns_hdr = (picopass_ns_hdr *)data; JsonSaveBufAsHexCompact(root, "$.Card.AIA", ns_hdr->app_issuer_area, sizeof(ns_hdr->app_issuer_area)); - } else { + } else { JsonSaveBufAsHexCompact(root, "$.Card.Epurse", hdr->epurse, sizeof(hdr->epurse)); - JsonSaveBufAsHexCompact(root, "$.Card.Kd",hdr->key_d, sizeof(hdr->key_d)); + JsonSaveBufAsHexCompact(root, "$.Card.Kd", hdr->key_d, sizeof(hdr->key_d)); JsonSaveBufAsHexCompact(root, "$.Card.Kc", hdr->key_c, sizeof(hdr->key_c)); JsonSaveBufAsHexCompact(root, "$.Card.AIA", hdr->app_issuer_area, sizeof(hdr->app_issuer_area)); } @@ -1483,9 +1483,9 @@ static int filelist(const char *path, const char *ext, uint8_t last, bool tentat char tmp_fullpath[1024] = {0}; strncat(tmp_fullpath, path, sizeof(tmp_fullpath) - 1); strncat(tmp_fullpath, namelist[i]->d_name, strlen(tmp_fullpath) - 1); - + if (is_directory(tmp_fullpath)) { - + char newpath[1024]; if (strcmp(namelist[i]->d_name, ".") == 0 || strcmp(namelist[i]->d_name, "..") == 0) continue; @@ -1496,9 +1496,9 @@ static int filelist(const char *path, const char *ext, uint8_t last, bool tentat filelist(newpath, ext, last + ((i == n - 1) << (indent + 1)), tentative, indent + 1, strlen(path)); } else { - + if ((ext == NULL) || (ext && (str_endswith(namelist[i]->d_name, ext)))) { - + for (uint8_t j = 0; j < indent + 1; j++) { PrintAndLogEx(NORMAL, "%s " NOLF, ((last >> j) & 1) ? " " : "│"); } diff --git a/client/src/loclass/hash1_brute.c b/client/src/loclass/hash1_brute.c index 19a18077a..49f2cd3de 100644 --- a/client/src/loclass/hash1_brute.c +++ b/client/src/loclass/hash1_brute.c @@ -43,9 +43,9 @@ static void calc_score(uint8_t *csn, uint8_t *k) { if (score >= 2 && badscore < 2) { PrintAndLogEx(NORMAL, "CSN\t%02x%02x%02x%02x%02x%02x%02x%02x\t%02x %02x %02x %02x %02x %02x %02x %02x\t" NOLF - , csn[0], csn[1], csn[2], csn[3], csn[4], csn[5], csn[6], csn[7] - , k[0], k[1], k[2], k[3], k[4], k[5], k[6], k[7] - ); + , csn[0], csn[1], csn[2], csn[3], csn[4], csn[5], csn[6], csn[7] + , k[0], k[1], k[2], k[3], k[4], k[5], k[6], k[7] + ); for (i = 0 ; i < score; i++) { PrintAndLogEx(NORMAL, "%d," NOLF, uniq_vals[i]); diff --git a/client/src/scripting.c b/client/src/scripting.c index 091e951bc..64dd0f84a 100644 --- a/client/src/scripting.c +++ b/client/src/scripting.c @@ -1199,11 +1199,11 @@ static int l_cwd(lua_State *L) { // ref: https://github.com/RfidResearchGroup/proxmark3/issues/891 // redirect LUA's print to Proxmark3 PrintAndLogEx -static int l_printandlogex(lua_State* L) { +static int l_printandlogex(lua_State *L) { int n = lua_gettop(L); for (int i = 1; i <= n; i++) { - if (lua_isstring(L, i)) { + if (lua_isstring(L, i)) { PrintAndLogEx(NORMAL, "%s", lua_tostring(L, i)); } } @@ -1293,7 +1293,7 @@ int set_pm3_libraries(lua_State *L) { // remove the global environment table from the stack lua_pop(L, 1); - + // print redirect here lua_register(L, "print", l_printandlogex); From 95cf57138c7e94a2528e00594a192d58be62ac5f Mon Sep 17 00:00:00 2001 From: Ave Date: Mon, 7 Sep 2020 11:38:05 +0300 Subject: [PATCH 0407/1047] Fix last block of dumps on my-d move/move lean --- client/src/cmdhfmfu.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/src/cmdhfmfu.c b/client/src/cmdhfmfu.c index 9b983dd4b..4634b181b 100644 --- a/client/src/cmdhfmfu.c +++ b/client/src/cmdhfmfu.c @@ -1983,7 +1983,7 @@ static int CmdHF14AMfUDump(const char *Cmd) { // not ul_c and not std ul then attempt to collect info like // VERSION, SIGNATURE, COUNTERS, TEARING, PACK, - if (!(tagtype & UL_C || tagtype & UL)) { + if (!(tagtype & UL_C || tagtype & UL || tagtype & MY_D_MOVE || tagtype & MY_D_MOVE_LEAN)) { //attempt to read pack uint8_t get_pack[] = {0, 0}; if (ul_auth_select(&card, tagtype, true, authKeyPtr, get_pack, sizeof(get_pack)) != PM3_SUCCESS) { From 5d357a6039548baed94a9c83b032ae56682ce49a Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Mon, 7 Sep 2020 10:39:15 +0200 Subject: [PATCH 0408/1047] style --- armsrc/em4x50.c | 8 ++++---- armsrc/iso15693.c | 18 +++++++++--------- armsrc/mifaresim.c | 2 +- armsrc/usart.c | 2 +- client/luascripts/mfc_gen3_writer.lua | 6 +++--- client/src/cmdanalyse.c | 2 +- client/src/cmdhffelica.c | 4 ++-- client/src/cmdhfmfdes.c | 2 +- client/src/cmdlf.c | 4 ++-- client/src/emv/emv_roca.c | 2 +- client/src/fido/cbortools.c | 2 +- client/src/mifare/mifarehost.c | 6 +++--- include/protocols.h | 2 +- 13 files changed, 30 insertions(+), 30 deletions(-) diff --git a/armsrc/em4x50.c b/armsrc/em4x50.c index 0c895ee71..3f0ad9b6b 100644 --- a/armsrc/em4x50.c +++ b/armsrc/em4x50.c @@ -101,7 +101,7 @@ int gLow = 0; static void init_tag(void) { // iceman: memset(tag.sectors, 0x00, sizeof)); - + // initialize global tag structure for (int i = 0; i < 34; i++) for (int j = 0; j < 7; j++) @@ -324,7 +324,7 @@ static uint32_t get_pulse_length(void) { while (sample > gLow && (timeout--)) { sample = (uint8_t)AT91C_BASE_SSC->SSC_RHR; } - + if (timeout == 0) return 0; @@ -346,7 +346,7 @@ static uint32_t get_pulse_length(void) { if (timeout == 0) return 0; - return (uint32_t)AT91C_BASE_TC1->TC_CV; + return (uint32_t)AT91C_BASE_TC1->TC_CV; } @@ -836,7 +836,7 @@ void em4x50_read(em4x50_data_t *etd) { // set gHigh and gLow if (get_signalproperties() && find_em4x50_tag()) { - + if (etd->addr_given) { // selective read mode diff --git a/armsrc/iso15693.c b/armsrc/iso15693.c index 7ce267ec3..3125f90bf 100644 --- a/armsrc/iso15693.c +++ b/armsrc/iso15693.c @@ -84,7 +84,7 @@ #define ISO15693_READER_TIMEOUT 330 // 330/212kHz = 1558us #define ISO15693_READER_TIMEOUT_WRITE 4700 // 4700/212kHz = 22ms, nominal 20ms -// iceman: This defines below exists in the header file, just here for my easy reading +// iceman: This defines below exists in the header file, just here for my easy reading // Delays in SSP_CLK ticks. // SSP_CLK runs at 13,56MHz / 32 = 423.75kHz when simulating a tag //#define DELAY_ISO15693_VCD_TO_VICC_SIM 132 // 132/423.75kHz = 311.5us from end of command EOF to start of tag response @@ -700,7 +700,7 @@ int GetIso15693AnswerFromTag(uint8_t *response, uint16_t max_len, uint16_t timeo AT91C_BASE_PDC_SSC->PDC_RNPR = (uint32_t) dma->buf; AT91C_BASE_PDC_SSC->PDC_RNCR = DMA_BUFFER_SIZE; } - + WDT_HIT(); if (BUTTON_PRESS()) { DbpString("stopped"); @@ -725,7 +725,7 @@ int GetIso15693AnswerFromTag(uint8_t *response, uint16_t max_len, uint16_t timeo // timeout if (samples > timeout && dt->state < STATE_TAG_RECEIVING_DATA) { - ret = -3; + ret = -3; break; } @@ -1735,7 +1735,7 @@ void SimTagIso15693(uint8_t *uid) { if (button_pressed) DbpString("button pressed"); - + reply_ng(CMD_HF_ISO15693_SIMULATE, PM3_SUCCESS, NULL, 0); } @@ -1880,7 +1880,7 @@ SLIx functions from official master forks. void LockPassSlixIso15693(uint32_t pass_id, uint32_t password) { LED_A_ON(); - + uint8_t cmd_inventory[] = {ISO15693_REQ_DATARATE_HIGH | ISO15693_REQ_INVENTORY | ISO15693_REQINV_SLOT1, 0x01, 0x00, 0x00, 0x00 }; uint8_t cmd_get_rnd[] = {ISO15693_REQ_DATARATE_HIGH, 0xB2, 0x04, 0x00, 0x00 }; uint8_t cmd_set_pass[] = {ISO15693_REQ_DATARATE_HIGH, 0xB3, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; @@ -1892,7 +1892,7 @@ void LockPassSlixIso15693(uint32_t pass_id, uint32_t password) { uint32_t start_time = 0; bool done = false; - // setup 'get random number' command + // setup 'get random number' command crc = Iso15693Crc(cmd_get_rnd, 3); cmd_get_rnd[3] = crc & 0xff; cmd_get_rnd[4] = crc >> 8; @@ -1900,7 +1900,7 @@ void LockPassSlixIso15693(uint32_t pass_id, uint32_t password) { Dbprintf("LockPass: Press button lock password, long-press to terminate."); while (!done) { - + LED_D_ON(); switch(BUTTON_HELD(1000)) { case BUTTON_SINGLE_CLICK: @@ -2032,7 +2032,7 @@ void SetTag15693Uid(uint8_t *uid) { SendDataTag(cmd[i], sizeof(cmd[i]), i == 0 ? true : false, true, recvbuf, sizeof(recvbuf), start_time, ISO15693_READER_TIMEOUT_WRITE, &eof_time); start_time = eof_time + DELAY_ISO15693_VICC_TO_VCD_READER; } - + reply_ng(CMD_HF_ISO15693_CSETUID, PM3_SUCCESS, NULL, 0); switch_off(); -} \ No newline at end of file +} diff --git a/armsrc/mifaresim.c b/armsrc/mifaresim.c index ceeedf2d5..4eaf711b3 100644 --- a/armsrc/mifaresim.c +++ b/armsrc/mifaresim.c @@ -534,7 +534,7 @@ void Mifare1ksim(uint16_t flags, uint8_t exitAfterNReads, uint8_t *datain, uint1 while (!button_pushed && !finished) { WDT_HIT(); - + if (counter == 2000) { if (data_available()) { break; diff --git a/armsrc/usart.c b/armsrc/usart.c index b6ed97310..b3ed42978 100644 --- a/armsrc/usart.c +++ b/armsrc/usart.c @@ -56,7 +56,7 @@ static void usart_fill_rxfifo(void) { rxfifo_free = us_rxfifo_low - us_rxfifo_high; else rxfifo_free = sizeof(us_rxfifo) - us_rxfifo_high + us_rxfifo_low; - + uint16_t available = USART_BUFFLEN - usart_cur_inbuf_off; if (available <= rxfifo_free) { diff --git a/client/luascripts/mfc_gen3_writer.lua b/client/luascripts/mfc_gen3_writer.lua index 22eae4387..9e78b2aee 100644 --- a/client/luascripts/mfc_gen3_writer.lua +++ b/client/luascripts/mfc_gen3_writer.lua @@ -47,9 +47,9 @@ desc = [[ 5. Erase all data at the card and set the FF FF FF FF FF FF keys, and Access Conditions to 78778800. Script works in a wizard styled way. - + Author Youtube channel: https://yev.ooo/ - + Many Thanks, Best Regards ]] @@ -261,7 +261,7 @@ local function main(args) end else dumpEML = "find '.' -iname '*dump.eml' -type f" - if string.len(GetUID()) == 14 then + if string.len(GetUID()) == 14 then eml_file_uid_start = 9 eml_file_uid_end = 22 eml_file_lengt = 31 diff --git a/client/src/cmdanalyse.c b/client/src/cmdanalyse.c index b701dbd3b..ecf8e50de 100644 --- a/client/src/cmdanalyse.c +++ b/client/src/cmdanalyse.c @@ -951,7 +951,7 @@ static command_t CommandTable[] = { {"lfsr", CmdAnalyseLfsr, AlwaysAvailable, "LFSR tests"}, {"a", CmdAnalyseA, AlwaysAvailable, "num bits test"}, {"nuid", CmdAnalyseNuid, AlwaysAvailable, "create NUID from 7byte UID"}, - {"demodbuff", CmdAnalyseDemodBuffer, AlwaysAvailable, "Load binary string to demodbuffer"}, + {"demodbuff", CmdAnalyseDemodBuffer, AlwaysAvailable, "Load binary string to demodbuffer"}, {"freq", CmdAnalyseFreq, AlwaysAvailable, "Calc wave lengths"}, {NULL, NULL, NULL, NULL} }; diff --git a/client/src/cmdhffelica.c b/client/src/cmdhffelica.c index 1cbcf6171..9e48f1577 100644 --- a/client/src/cmdhffelica.c +++ b/client/src/cmdhffelica.c @@ -1643,9 +1643,9 @@ static int CmdHFFelicaDumpLite(const char *Cmd) { return PM3_ETIMEOUT; } } - + PrintAndLogEx(NORMAL, ""); - + if (resp.oldarg[0] == 0) { PrintAndLogEx(WARNING, "Button pressed, aborted"); return PM3_EOPABORTED; diff --git a/client/src/cmdhfmfdes.c b/client/src/cmdhfmfdes.c index 11e8b79c3..a5ecf561b 100644 --- a/client/src/cmdhfmfdes.c +++ b/client/src/cmdhfmfdes.c @@ -4395,7 +4395,7 @@ static int CmdHF14aDesChk(const char *Cmd) { if (pattern2b && startPattern < 0x10000) { if (verbose == false) PrintAndLogEx(NORMAL, "p" NOLF); - + aeskeyListLen = 0; deskeyListLen = 0; k3kkeyListLen = 0; diff --git a/client/src/cmdlf.c b/client/src/cmdlf.c index c4a0be2fd..7bae8618d 100644 --- a/client/src/cmdlf.c +++ b/client/src/cmdlf.c @@ -615,8 +615,8 @@ int lf_read(bool verbose, uint32_t samples) { } } - // response is number of bits read - uint32_t size = (resp.data.asDwords[0] / 8); + // response is number of bits read + uint32_t size = (resp.data.asDwords[0] / 8); getSamples(size, verbose); return PM3_SUCCESS; } diff --git a/client/src/emv/emv_roca.c b/client/src/emv/emv_roca.c index 95e2eb77a..0faf59ffb 100644 --- a/client/src/emv/emv_roca.c +++ b/client/src/emv/emv_roca.c @@ -71,7 +71,7 @@ static mbedtls_mpi_uint mpi_get_uint(const mbedtls_mpi *X) { if (X->n == 1 && X->s > 0) { return X->p[0]; } - + PrintAndLogEx(WARNING, "ZERRRRO!!!\n"); return 0; } diff --git a/client/src/fido/cbortools.c b/client/src/fido/cbortools.c index 85566a954..7a7a1d25e 100644 --- a/client/src/fido/cbortools.c +++ b/client/src/fido/cbortools.c @@ -49,7 +49,7 @@ static CborError dumpelm(CborValue *it, bool *got_next, int nestingLevel) { *got_next = true; if (err) return err; // parse error - + PrintAndLogEx(NORMAL, "%s" NOLF, sprint_hex(buf, n)); free(buf); break; diff --git a/client/src/mifare/mifarehost.c b/client/src/mifare/mifarehost.c index 26b25b831..6b66de2cb 100644 --- a/client/src/mifare/mifarehost.c +++ b/client/src/mifare/mifarehost.c @@ -690,7 +690,7 @@ int mfStaticNested(uint8_t blockNo, uint8_t keyType, uint8_t *key, uint8_t trgBl // check a block of generated key candidates. if (IfPm3Flash()) { - + mem[3] = ((chunk >> 8) & 0xFF); mem[4] = (chunk & 0xFF); @@ -915,7 +915,7 @@ int mfCSetBlock(uint8_t blockNo, uint8_t *data, uint8_t *uid, uint8_t params) { clearCommandBuffer(); SendCommandMIX(CMD_HF_MIFARE_CSETBL, params, blockNo, 0, data, 16); PacketResponseNG resp; - if (WaitForResponseTimeout(CMD_ACK, &resp, 1500)) { + if (WaitForResponseTimeout(CMD_ACK, &resp, 3500)) { uint8_t isOK = resp.oldarg[0] & 0xff; if (uid != NULL) memcpy(uid, resp.data.asBytes, 4); @@ -1078,7 +1078,7 @@ int detect_classic_nackbug(bool verbose) { PrintAndLogEx(SUCCESS, "press pm3-button on the Proxmark3 device to abort both Proxmark3 and client.\n"); while (true) { - + PrintAndLogEx(NORMAL, "." NOLF); if (kbd_enter_pressed()) { return PM3_EOPABORTED; diff --git a/include/protocols.h b/include/protocols.h index ca6d32637..62bb9f276 100644 --- a/include/protocols.h +++ b/include/protocols.h @@ -15,7 +15,7 @@ ISO14443A (usually NFC tags) 95 20 = Anticollision of cascade level2 95 70 = Select of cascade level2 50 00 = Halt (usage: 5000+2bytes ISO14443A-CRC - no answer from card) - + E0 = RATS D0 = PPS Mifare From 7b763353f749fbb070faf636f4ead77c98004d58 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Mon, 7 Sep 2020 11:30:25 +0200 Subject: [PATCH 0409/1047] hf mf cview/csave: fix mfc 4k bug --- client/src/cmdhfmf.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/src/cmdhfmf.c b/client/src/cmdhfmf.c index 4392c1cd8..342df0143 100644 --- a/client/src/cmdhfmf.c +++ b/client/src/cmdhfmf.c @@ -4334,7 +4334,7 @@ static int CmdHF14AMfCSave(const char *Cmd) { bool fillEmulator = false; bool errors = false, hasname = false, useuid = false; int i, len, flags; - uint8_t numblocks = 0, cmdp = 0; + uint16_t numblocks = 0, cmdp = 0; uint16_t bytes = 0; while (param_getchar(Cmd, cmdp) != 0x00 && !errors) { @@ -4464,7 +4464,7 @@ static int CmdHF14AMfCView(const char *Cmd) { int flags; char ctmp = '1'; uint8_t cmdp = 0; - uint8_t numblocks = NumOfBlocks(ctmp); + uint16_t numblocks = NumOfBlocks(ctmp); uint16_t bytes = numblocks * MFBLOCK_SIZE; while (param_getchar(Cmd, cmdp) != 0x00 && !errors) { From 5d6f8053c6b3443cc48b8e9bf7e99f396d631884 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Mon, 7 Sep 2020 12:11:21 +0200 Subject: [PATCH 0410/1047] textual --- client/src/mifare/mifarehost.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/client/src/mifare/mifarehost.c b/client/src/mifare/mifarehost.c index 6b66de2cb..b33872cdc 100644 --- a/client/src/mifare/mifarehost.c +++ b/client/src/mifare/mifarehost.c @@ -986,9 +986,6 @@ int mfGen3Freez(void) { } } -// SNIFFER -// [iceman] so many global variables.... - // variables uint32_t cuid = 0; // uid part used for crypto1. From e3b8e868ea2e03aefb8661a6ba1a934852d2a0a4 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Mon, 7 Sep 2020 15:09:18 +0200 Subject: [PATCH 0411/1047] hf 14a config: force RATS --- armsrc/iso14443a.c | 14 +++++++++++--- client/src/cmdhf14a.c | 22 +++++++++++++++++++++- include/pm3_cmd.h | 1 + 3 files changed, 33 insertions(+), 4 deletions(-) diff --git a/armsrc/iso14443a.c b/armsrc/iso14443a.c index 7eff6b3d7..061dfe9ae 100644 --- a/armsrc/iso14443a.c +++ b/armsrc/iso14443a.c @@ -128,8 +128,9 @@ Default HF 14a config is set to: forcebcc = 0 (expect valid BCC) forcecl2 = 0 (auto) forcecl3 = 0 (auto) + forcerats = 0 (auto) */ -static hf14a_config hf14aconfig = { 0, 0, 0, 0 } ; +static hf14a_config hf14aconfig = { 0, 0, 0, 0, 0 } ; void printHf14aConfig(void) { DbpString(_CYAN_("HF 14a config")); @@ -137,6 +138,7 @@ void printHf14aConfig(void) { Dbprintf("[b] BCC override..........%s%s%s", (hf14aconfig.forcebcc == 0) ? _GREEN_("No") " (follow standard)" : "", (hf14aconfig.forcebcc == 1) ? _RED_("Yes: Always do CL2") : "", (hf14aconfig.forcebcc == 2) ? _RED_("Yes: Always use card BCC") : ""); Dbprintf("[2] CL2 override..........%s%s%s", (hf14aconfig.forcecl2 == 0) ? _GREEN_("No") " (follow standard)" : "", (hf14aconfig.forcecl2 == 1) ? _RED_("Yes: Always do CL2") : "", (hf14aconfig.forcecl2 == 2) ? _RED_("Yes: Always skip CL2") : ""); Dbprintf("[3] CL3 override..........%s%s%s", (hf14aconfig.forcecl3 == 0) ? _GREEN_("No") " (follow standard)" : "", (hf14aconfig.forcecl3 == 1) ? _RED_("Yes: Always do CL3") : "", (hf14aconfig.forcecl3 == 2) ? _RED_("Yes: Always skip CL3") : ""); + Dbprintf("[r] RATS override.........%s%s%s", (hf14aconfig.forcerats == 0) ? _GREEN_("No") " (follow standard)" : "", (hf14aconfig.forcerats == 1) ? _RED_("Yes: Always do RATS") : "", (hf14aconfig.forcerats == 2) ? _RED_("Yes: Always skip RATS") : ""); } /** @@ -157,6 +159,8 @@ void setHf14aConfig(hf14a_config *hc) { hf14aconfig.forcecl2 = hc->forcecl2; if ((hc->forcecl3 >= 0) && (hc->forcecl3 <= 2)) hf14aconfig.forcecl3 = hc->forcecl3; + if ((hc->forcerats >= 0) && (hc->forcerats <= 2)) + hf14aconfig.forcerats = hc->forcerats; } hf14a_config *getHf14aConfig(void) { @@ -2539,8 +2543,12 @@ int iso14443a_select_card(uint8_t *uid_ptr, iso14a_card_select_t *p_card, uint32 p_card->sak = sak; } - // PICC compliant with iso14443a-4 ---> (SAK & 0x20 != 0) - if ((sak & 0x20) == 0) return 2; + if (hf14aconfig.forcerats == 0) { + // PICC compliant with iso14443a-4 ---> (SAK & 0x20 != 0) + if ((sak & 0x20) == 0) return 2; + } else if (hf14aconfig.forcerats == 2) { + return 2; + } // else force RATS // RATS, Request for answer to select if (!no_rats) { diff --git a/client/src/cmdhf14a.c b/client/src/cmdhf14a.c index e1c84b76e..4a53ef021 100644 --- a/client/src/cmdhf14a.c +++ b/client/src/cmdhf14a.c @@ -176,6 +176,7 @@ static int usage_hf_14a_config(void) { PrintAndLogEx(NORMAL, " b 0|1|2 BCC: 0=follow standard 1=use fixed BCC 2=use card BCC"); PrintAndLogEx(NORMAL, " 2 0|1|2 SAK<>CL2: 0=follow standard 1=execute CL2 2=skip CL2"); PrintAndLogEx(NORMAL, " 3 0|1|2 SAK<>CL3: 0=follow standard 1=execute CL3 2=skip CL3"); + PrintAndLogEx(NORMAL, " r 0|1|2 SAK<>ATS: 0=follow standard 1=execute RATS 2=skip RATS"); PrintAndLogEx(NORMAL, "Examples:"); PrintAndLogEx(NORMAL, _YELLOW_(" hf 14a config ")" Print current configuration"); PrintAndLogEx(NORMAL, _YELLOW_(" hf 14a config a 1 ")" Force execution of anticollision"); @@ -294,7 +295,8 @@ static int CmdHf14AConfig(const char *Cmd) { .forceanticol = -1, .forcebcc = -1, .forcecl2 = -1, - .forcecl3 = -1 + .forcecl3 = -1, + .forcerats = -1 }; bool errors = false; @@ -375,6 +377,24 @@ static int CmdHf14AConfig(const char *Cmd) { } cmdp += 2; break; + case 'r': + switch (param_getchar(Cmd, cmdp + 1)) { + case '0': + config.forcerats = 0; + break; + case '1': + config.forcerats = 1; + break; + case '2': + config.forcerats = 2; + break; + default: + PrintAndLogEx(WARNING, "Unknown value '%c'", param_getchar(Cmd, cmdp + 1)); + errors = 1; + break; + } + cmdp += 2; + break; default: PrintAndLogEx(WARNING, "Unknown parameter '%c'", param_getchar(Cmd, cmdp)); errors = 1; diff --git a/include/pm3_cmd.h b/include/pm3_cmd.h index 3738fe6ad..58e527f40 100644 --- a/include/pm3_cmd.h +++ b/include/pm3_cmd.h @@ -128,6 +128,7 @@ typedef struct { int8_t forcebcc; // 0:expect valid BCC 1:force using computed BCC 2:force using card BCC int8_t forcecl2; // 0:auto 1:force executing CL2 2:force skipping CL2 int8_t forcecl3; // 0:auto 1:force executing CL3 2:force skipping CL3 + int8_t forcerats; // 0:auto 1:force executing RATS 2:force skipping RATS } PACKED hf14a_config; // Tracelog Header struct From 974e9d8bb11ca2e7a5a29984bbf17076e89eeab5 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Mon, 7 Sep 2020 15:37:19 +0200 Subject: [PATCH 0412/1047] Fix hf mf eclr trailer sectors on 4K --- armsrc/mifareutil.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/armsrc/mifareutil.c b/armsrc/mifareutil.c index 1f04743e9..001043a0d 100644 --- a/armsrc/mifareutil.c +++ b/armsrc/mifareutil.c @@ -613,7 +613,7 @@ void emlClearMem(void) { memset(emCARD, 0, CARD_MEMORY_SIZE); // fill sectors trailer data - for (uint16_t b = 3; b <= MIFARE_4K_MAXBLOCK; ((b <= MIFARE_2K_MAXBLOCK) ? (b += 4) : (b += 16))) + for (uint16_t b = 3; b <= MIFARE_4K_MAXBLOCK; ((b < MIFARE_2K_MAXBLOCK - 4) ? (b += 4) : (b += 16))) emlSetMem((uint8_t *)trailer, b, 1); // uid From a06f1c8858349a6d80a6a72f5ec6c8b3294cb679 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Mon, 7 Sep 2020 15:43:34 +0200 Subject: [PATCH 0413/1047] hf mf eclr: cleaner end cond, even if it doesn't change behavior --- armsrc/mifareutil.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/armsrc/mifareutil.c b/armsrc/mifareutil.c index 001043a0d..6f2629ba6 100644 --- a/armsrc/mifareutil.c +++ b/armsrc/mifareutil.c @@ -613,7 +613,7 @@ void emlClearMem(void) { memset(emCARD, 0, CARD_MEMORY_SIZE); // fill sectors trailer data - for (uint16_t b = 3; b <= MIFARE_4K_MAXBLOCK; ((b < MIFARE_2K_MAXBLOCK - 4) ? (b += 4) : (b += 16))) + for (uint16_t b = 3; b < MIFARE_4K_MAXBLOCK; ((b < MIFARE_2K_MAXBLOCK - 4) ? (b += 4) : (b += 16))) emlSetMem((uint8_t *)trailer, b, 1); // uid From f1146d360fa6380ec220878d6102ed0eb4d401a7 Mon Sep 17 00:00:00 2001 From: Ave Date: Mon, 7 Sep 2020 22:34:44 +0300 Subject: [PATCH 0414/1047] Introduce compatible write support to hf mfu wrbl --- armsrc/appmain.c | 4 +++ armsrc/mifarecmd.c | 69 +++++++++++++++++++++++++++++++++++++++++++ armsrc/mifarecmd.h | 2 +- armsrc/mifareutil.c | 24 +++++++-------- armsrc/mifareutil.h | 2 +- client/src/cmdhfmfu.c | 26 +++++++++++----- include/pm3_cmd.h | 1 + 7 files changed, 106 insertions(+), 22 deletions(-) diff --git a/armsrc/appmain.c b/armsrc/appmain.c index 230e69eb0..92e9f82f0 100644 --- a/armsrc/appmain.c +++ b/armsrc/appmain.c @@ -1237,6 +1237,10 @@ static void PacketReceived(PacketCommandNG *packet) { MifareUWriteBlock(packet->oldarg[0], packet->oldarg[1], packet->data.asBytes); break; } + case CMD_HF_MIFAREU_WRITEBL_COMPAT: { + MifareUWriteBlockCompat(packet->oldarg[0], packet->oldarg[1], packet->data.asBytes); + break; + } case CMD_HF_MIFARE_ACQ_ENCRYPTED_NONCES: { MifareAcquireEncryptedNonces(packet->oldarg[0], packet->oldarg[1], packet->oldarg[2], packet->data.asBytes); break; diff --git a/armsrc/mifarecmd.c b/armsrc/mifarecmd.c index 4cd4eee67..9a4a7e984 100644 --- a/armsrc/mifarecmd.c +++ b/armsrc/mifarecmd.c @@ -554,6 +554,75 @@ void MifareUWriteBlock(uint8_t arg0, uint8_t arg1, uint8_t *datain) { set_tracing(false); } +// Arg0 : Block to write to. +// Arg1 : 0 = use no authentication. +// 1 = use 0x1A authentication. +// 2 = use 0x1B authentication. +// datain : 16 first bytes is data to be written. +// : 4/16 next bytes is authentication key. +void MifareUWriteBlockCompat(uint8_t arg0, uint8_t arg1, uint8_t *datain) { + uint8_t blockNo = arg0; + bool useKey = (arg1 == 1); //UL_C + bool usePwd = (arg1 == 2); //UL_EV1/NTAG + uint8_t blockdata[16] = {0x00}; + + memcpy(blockdata, datain, 16); + + LEDsoff(); + LED_A_ON(); + iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN); + + clear_trace(); + set_tracing(true); + + if (!iso14443a_select_card(NULL, NULL, NULL, true, 0, true)) { + if (DBGLEVEL >= DBG_ERROR) Dbprintf("Can't select card"); + OnError(0); + return; + }; + + // UL-C authentication + if (useKey) { + uint8_t key[16] = {0x00}; + memcpy(key, datain + 16, sizeof(key)); + + if (!mifare_ultra_auth(key)) { + OnError(1); + return; + } + } + + // UL-EV1 / NTAG authentication + if (usePwd) { + uint8_t pwd[4] = {0x00}; + memcpy(pwd, datain + 16, 4); + uint8_t pack[4] = {0, 0, 0, 0}; + if (!mifare_ul_ev1_auth(pwd, pack)) { + OnError(1); + return; + } + } + + if (mifare_ultra_writeblock_compat(blockNo, blockdata)) { + if (DBGLEVEL >= DBG_ERROR) Dbprintf("Write block error"); + OnError(0); + return; + }; + + if (mifare_ultra_halt()) { + if (DBGLEVEL >= DBG_ERROR) Dbprintf("Halt error"); + OnError(0); + return; + }; + + if (DBGLEVEL >= 2) DbpString("WRITE BLOCK FINISHED"); + + reply_mix(CMD_ACK, 1, 0, 0, 0, 0); + FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); + LEDsoff(); + set_tracing(false); +} + void MifareUSetPwd(uint8_t arg0, uint8_t *datain) { uint8_t pwd[16] = {0x00}; diff --git a/armsrc/mifarecmd.h b/armsrc/mifarecmd.h index 4adceb4db..b024d2d1b 100644 --- a/armsrc/mifarecmd.h +++ b/armsrc/mifarecmd.h @@ -20,7 +20,7 @@ void MifareUC_Auth(uint8_t arg0, uint8_t *keybytes); void MifareUReadCard(uint8_t arg0, uint16_t arg1, uint8_t arg2, uint8_t *datain); void MifareReadSector(uint8_t arg0, uint8_t arg1, uint8_t *datain); void MifareWriteBlock(uint8_t arg0, uint8_t arg1, uint8_t *datain); -//void MifareUWriteBlockCompat(uint8_t arg0,uint8_t *datain); +void MifareUWriteBlockCompat(uint8_t arg0, uint8_t arg1, uint8_t *datain); void MifareUWriteBlock(uint8_t arg0, uint8_t arg1, uint8_t *datain); void MifareNested(uint8_t blockNo, uint8_t keyType, uint8_t targetBlockNo, uint8_t targetKeyType, bool calibrate, uint8_t *key); diff --git a/armsrc/mifareutil.c b/armsrc/mifareutil.c index 6f2629ba6..5d8989ef8 100644 --- a/armsrc/mifareutil.c +++ b/armsrc/mifareutil.c @@ -446,37 +446,37 @@ int mifare_classic_writeblock(struct Crypto1State *pcs, uint32_t uid, uint8_t bl return 0; } -/* // command not needed, but left for future testing int mifare_ultra_writeblock_compat(uint8_t blockNo, uint8_t *blockData) { - uint16_t len; - uint8_t par[3] = {0}; // enough for 18 parity bits - uint8_t d_block[18] = {0x00}; - uint8_t receivedAnswer[MAX_FRAME_SIZE]; - uint8_t receivedAnswerPar[MAX_PARITY_SIZE]; + // variables + uint16_t len = 0; + + uint8_t d_block[18]; + uint8_t receivedAnswer[MAX_MIFARE_FRAME_SIZE] = {0x00}; + uint8_t receivedAnswerPar[MAX_MIFARE_PARITY_SIZE] = {0x00}; len = mifare_sendcmd_short(NULL, CRYPT_NONE, ISO14443A_CMD_WRITEBLOCK, blockNo, receivedAnswer, receivedAnswerPar, NULL); - if ((len != 1) || (receivedAnswer[0] != 0x0A)) { // 0x0a - ACK + if (receivedAnswer[0] != 0x0A) { // 0x0a - ACK if (DBGLEVEL >= DBG_ERROR) - Dbprintf("Cmd Addr Error: %02x", receivedAnswer[0]); + Dbprintf("Cmd Send Error: %02x %d", receivedAnswer[0], len); return 1; } memcpy(d_block, blockData, 16); AddCrc14A(d_block, 16); - ReaderTransmitPar(d_block, sizeof(d_block), par, NULL); + ReaderTransmit(d_block, sizeof(d_block), NULL); + // Receive the response len = ReaderReceive(receivedAnswer, receivedAnswerPar); - if ((len != 1) || (receivedAnswer[0] != 0x0A)) { // 0x0a - ACK + if (receivedAnswer[0] != 0x0A) { // 0x0a - ACK if (DBGLEVEL >= DBG_ERROR) - Dbprintf("Cmd Data Error: %02x %d", receivedAnswer[0],len); + Dbprintf("Cmd Send Data Error: %02x %d", receivedAnswer[0], len); return 2; } return 0; } -*/ int mifare_ultra_writeblock(uint8_t blockNo, uint8_t *blockData) { uint16_t len = 0; diff --git a/armsrc/mifareutil.h b/armsrc/mifareutil.h index b1d6396d5..d444dc81f 100644 --- a/armsrc/mifareutil.h +++ b/armsrc/mifareutil.h @@ -73,7 +73,7 @@ int mifare_classic_writeblock(struct Crypto1State *pcs, uint32_t uid, uint8_t bl int mifare_ul_ev1_auth(uint8_t *keybytes, uint8_t *pack); int mifare_ultra_auth(uint8_t *keybytes); int mifare_ultra_readblock(uint8_t blockNo, uint8_t *blockData); -//int mifare_ultra_writeblock_compat(uint8_t blockNo, uint8_t *blockData); +int mifare_ultra_writeblock_compat(uint8_t blockNo, uint8_t *blockData); int mifare_ultra_writeblock(uint8_t blockNo, uint8_t *blockData); int mifare_ultra_halt(void); diff --git a/client/src/cmdhfmfu.c b/client/src/cmdhfmfu.c index 4634b181b..524faa9ce 100644 --- a/client/src/cmdhfmfu.c +++ b/client/src/cmdhfmfu.c @@ -1474,8 +1474,9 @@ static int CmdHF14AMfUWrBl(const char *Cmd) { uint8_t cmdp = 0; uint8_t keylen = 0; - uint8_t blockdata[20] = {0x00}; + uint8_t blockdata[16] = {0x00}; uint8_t data[16] = {0x00}; + uint8_t datalen = 4; uint8_t authenticationkey[16] = {0x00}; uint8_t *authKeyPtr = authenticationkey; @@ -1517,9 +1518,13 @@ static int CmdHF14AMfUWrBl(const char *Cmd) { break; case 'd': if (param_gethex(Cmd, cmdp + 1, blockdata, 8)) { - PrintAndLogEx(WARNING, "Block data must include 8 HEX symbols"); - errors = true; - break; + if (param_gethex(Cmd, cmdp + 1, blockdata, 32)) { + PrintAndLogEx(WARNING, "Block data must include 8 or 32 HEX symbols"); + errors = true; + break; + } else { + datalen = 16; + } } cmdp += 2; break; @@ -1559,9 +1564,8 @@ static int CmdHF14AMfUWrBl(const char *Cmd) { PrintAndLogEx(NORMAL, "Block: %0d (0x%02X) [ %s]", blockNo, blockNo, sprint_hex(blockdata, 4)); //Send write Block - uint8_t cmddata[20]; - memcpy(cmddata, blockdata, 4); - uint8_t datalen = 4; + uint8_t cmddata[32]; + memcpy(cmddata, blockdata, datalen); uint8_t keytype = 0; if (hasAuthKey) { keytype = 1; @@ -1574,7 +1578,13 @@ static int CmdHF14AMfUWrBl(const char *Cmd) { } clearCommandBuffer(); - SendCommandMIX(CMD_HF_MIFAREU_WRITEBL, blockNo, keytype, 0, cmddata, datalen); + if (datalen == 16) { + SendCommandMIX(CMD_HF_MIFAREU_WRITEBL_COMPAT, blockNo, keytype, 0, cmddata, datalen); + } + else + { + SendCommandMIX(CMD_HF_MIFAREU_WRITEBL, blockNo, keytype, 0, cmddata, datalen); + } PacketResponseNG resp; if (WaitForResponseTimeout(CMD_ACK, &resp, 1500)) { uint8_t isOK = resp.oldarg[0] & 0xff; diff --git a/include/pm3_cmd.h b/include/pm3_cmd.h index 58e527f40..dd11d49d5 100644 --- a/include/pm3_cmd.h +++ b/include/pm3_cmd.h @@ -618,6 +618,7 @@ typedef struct { #define CMD_HF_MIFAREU_READCARD 0x0721 #define CMD_HF_MIFARE_WRITEBL 0x0622 #define CMD_HF_MIFAREU_WRITEBL 0x0722 +#define CMD_HF_MIFAREU_WRITEBL_COMPAT 0x0723 #define CMD_HF_MIFARE_CHKKEYS 0x0623 #define CMD_HF_MIFARE_SETMOD 0x0624 From 19f563910763cb48035ad1abad43a3f0bfb2d113 Mon Sep 17 00:00:00 2001 From: Ave Date: Mon, 7 Sep 2020 22:38:11 +0300 Subject: [PATCH 0415/1047] hf mfu wrbl: Extend help text and do style pass --- client/src/cmdhfmfu.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/client/src/cmdhfmfu.c b/client/src/cmdhfmfu.c index 524faa9ce..58dc9a300 100644 --- a/client/src/cmdhfmfu.c +++ b/client/src/cmdhfmfu.c @@ -123,7 +123,7 @@ static int usage_hf_mfu_wrbl(void) { PrintAndLogEx(NORMAL, "Usage: hf mfu wrbl b d k l\n"); PrintAndLogEx(NORMAL, "Options:"); PrintAndLogEx(NORMAL, " b : block to write"); - PrintAndLogEx(NORMAL, " d : block data - (8 hex symbols)"); + PrintAndLogEx(NORMAL, " d : block data - (8 or 32 hex symbols, 32 hex symbols will do a compatibility write)"); PrintAndLogEx(NORMAL, " k : (optional) key for authentication [UL-C 16bytes, EV1/NTAG 4bytes]"); PrintAndLogEx(NORMAL, " l : (optional) swap entered key's endianness"); PrintAndLogEx(NORMAL, ""); @@ -1580,9 +1580,7 @@ static int CmdHF14AMfUWrBl(const char *Cmd) { clearCommandBuffer(); if (datalen == 16) { SendCommandMIX(CMD_HF_MIFAREU_WRITEBL_COMPAT, blockNo, keytype, 0, cmddata, datalen); - } - else - { + } else { SendCommandMIX(CMD_HF_MIFAREU_WRITEBL, blockNo, keytype, 0, cmddata, datalen); } PacketResponseNG resp; From c06e5d0ac734d2b18daf2246c226955f78c71568 Mon Sep 17 00:00:00 2001 From: Ave Date: Mon, 7 Sep 2020 22:44:01 +0300 Subject: [PATCH 0416/1047] Remove old commented MifareUWriteBlockCompat --- armsrc/mifarecmd.c | 41 ----------------------------------------- 1 file changed, 41 deletions(-) diff --git a/armsrc/mifarecmd.c b/armsrc/mifarecmd.c index 9a4a7e984..400804a8f 100644 --- a/armsrc/mifarecmd.c +++ b/armsrc/mifarecmd.c @@ -444,47 +444,6 @@ void MifareWriteBlock(uint8_t arg0, uint8_t arg1, uint8_t *datain) { set_tracing(false); } -/* // Command not needed but left for future testing -void MifareUWriteBlockCompat(uint8_t arg0, uint8_t *datain) -{ - uint8_t blockNo = arg0; - uint8_t blockdata[16] = {0x00}; - - memcpy(blockdata, datain, 16); - - uint8_t uid[10] = {0x00}; - - LED_A_ON(); LED_B_OFF(); LED_C_OFF(); - - clear_trace(); - set_tracing(true); - iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN); - - if(!iso14443a_select_card(uid, NULL, NULL, true, 0, true)) { - if (DBGLEVEL >= DBG_ERROR) Dbprintf("Can't select card"); - OnError(0); - return; - }; - - if(mifare_ultra_writeblock_compat(blockNo, blockdata)) { - if (DBGLEVEL >= DBG_ERROR) Dbprintf("Write block error"); - OnError(0); - return; }; - - if(mifare_ultra_halt()) { - if (DBGLEVEL >= DBG_ERROR) Dbprintf("Halt error"); - OnError(0); - return; - }; - - if (DBGLEVEL >= 2) DbpString("WRITE BLOCK FINISHED"); - - reply_mix(CMD_ACK,1,0,0,0,0); - FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); - LEDsoff(); -} -*/ - // Arg0 : Block to write to. // Arg1 : 0 = use no authentication. // 1 = use 0x1A authentication. From be3c93c33b75e974cc4f2c383c9751c0763d1aa3 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Tue, 8 Sep 2020 08:57:09 +0200 Subject: [PATCH 0417/1047] added cmd file to test current psk based clone commands --- client/cmdscripts/test_psk_clone.cmd | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 client/cmdscripts/test_psk_clone.cmd diff --git a/client/cmdscripts/test_psk_clone.cmd b/client/cmdscripts/test_psk_clone.cmd new file mode 100644 index 000000000..f37ddcfea --- /dev/null +++ b/client/cmdscripts/test_psk_clone.cmd @@ -0,0 +1,28 @@ +clear + +rem Test of Motorola clone & read +lf t55xx wipe +lf motorola clone a0000000a0002021 +lf motorola read +lf search + +rem Test of Nexwatch clone & read +lf t55xx wipe +lf nexwatch clone c 1337 m 1 n +lf nexwatch read +lf search + +rem Test of keri clone & read +lf t55xx wipe +lf keri clone 1337 +lf keri read +lf search + +rem Test of Indala clone & read +lf t55xx wipe +lf indala clone --fc 7 --cn 1337 +lf indala read +lf search + +rem done, just wiping your tag. +lf t55xx wipe From bdae1bc2a35353e5ff7296ba1ffe6efbf00bf9b8 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Tue, 8 Sep 2020 08:57:28 +0200 Subject: [PATCH 0418/1047] updated PSK lua test script --- client/luascripts/test_t55x7.lua | 59 +++++++++++++++++++++++++++++++- 1 file changed, 58 insertions(+), 1 deletion(-) diff --git a/client/luascripts/test_t55x7.lua b/client/luascripts/test_t55x7.lua index 4be0ed4b6..034ad1c58 100644 --- a/client/luascripts/test_t55x7.lua +++ b/client/luascripts/test_t55x7.lua @@ -9,7 +9,7 @@ local floor = math.floor copyright = '' author = "Iceman" -version = 'v1.0.3' +version = 'v1.0.4' desc =[[ This script will program a T55x7 TAG with a configuration and four blocks of data. It will then try to detect and read back those block data and compare if read data matches the expected data. @@ -106,6 +106,7 @@ local function GetConfigs( modulation ) local t = {} t['PSK1'] = { + -- Rf2 [1] = '00001040', [2] = '00041040', [3] = '00081040', @@ -114,9 +115,28 @@ local function GetConfigs( modulation ) [6] = '00141040', [7] = '00181040', [8] = '001c1040', + -- Rf4 + [9] = '00001440', + [10] = '00041440', + [11] = '00081440', + [12] = '000c1440', + [13] = '00101440', + [14] = '00141440', + [15] = '00181440', + [16] = '001c1440', + -- Rf8 + [17] = '00001840', + [18] = '00041840', + [19] = '00081840', + [20] = '000c1840', + [21] = '00101840', + [22] = '00141840', + [23] = '00181840', + [24] = '001c1840', } t['PSK2'] = { + -- Rf2 [1] = '00002040', [2] = '00042040', [3] = '00082040', @@ -125,9 +145,28 @@ local function GetConfigs( modulation ) [6] = '00142040', [7] = '00182040', [8] = '001c2040', + -- Rf4 + [9] = '00002440', + [10] = '00042440', + [11] = '00082440', + [12] = '000c2440', + [13] = '00102440', + [14] = '00142440', + [15] = '00182440', + [16] = '001c2440', + -- Rf8 + [17] = '00002840', + [18] = '00042840', + [19] = '00082840', + [20] = '000c2840', + [21] = '00102840', + [22] = '00142840', + [23] = '00182840', + [24] = '001c2840', } t['PSK3'] = { + -- Rf2 [1] = '00003040', [2] = '00043040', [3] = '00083040', @@ -136,6 +175,24 @@ local function GetConfigs( modulation ) [6] = '00143040', [7] = '00183040', [8] = '001c3040', + -- Rf4 + [1] = '00003440', + [2] = '00043440', + [3] = '00083440', + [4] = '000c3440', + [5] = '00103440', + [6] = '00143440', + [7] = '00183440', + [8] = '001c3440', + -- Rf2 + [1] = '00003840', + [2] = '00043840', + [3] = '00083840', + [4] = '000c3840', + [5] = '00103840', + [6] = '00143840', + [7] = '00183840', + [8] = '001c3840', } t['FSK1'] = { From 4d665f6a22c4c6037a07802808787dc619d0bebf Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Tue, 8 Sep 2020 10:48:51 +0200 Subject: [PATCH 0419/1047] test_t55x7.lua, reindex psk3 test, remove invalid combos --- client/luascripts/test_t55x7.lua | 144 +++++++++++++++---------------- 1 file changed, 72 insertions(+), 72 deletions(-) diff --git a/client/luascripts/test_t55x7.lua b/client/luascripts/test_t55x7.lua index 034ad1c58..3c4b83441 100644 --- a/client/luascripts/test_t55x7.lua +++ b/client/luascripts/test_t55x7.lua @@ -107,92 +107,92 @@ local function GetConfigs( modulation ) t['PSK1'] = { -- Rf2 - [1] = '00001040', - [2] = '00041040', - [3] = '00081040', - [4] = '000c1040', - [5] = '00101040', - [6] = '00141040', - [7] = '00181040', - [8] = '001c1040', + [1] = '00001040', -- 8 + [2] = '00041040', -- 16 + [3] = '00081040', -- 32 + [4] = '000c1040', -- 40 + [5] = '00101040', -- 50 + [6] = '00141040', -- 64 + [7] = '00181040', -- 100 + [8] = '001c1040', -- 128 -- Rf4 - [9] = '00001440', - [10] = '00041440', - [11] = '00081440', - [12] = '000c1440', - [13] = '00101440', - [14] = '00141440', - [15] = '00181440', - [16] = '001c1440', + [9] = '00001440', -- 8 + [10] = '00041440', -- 16 + [11] = '00081440', -- 32 + [12] = '000c1440', -- 40 +-- [] = '00101440', -- 50 50/4 == 12.5 invalid + [13] = '00141440', -- 64 + [14] = '00181440', -- 100 + [15] = '001c1440', -- 128 -- Rf8 - [17] = '00001840', - [18] = '00041840', - [19] = '00081840', - [20] = '000c1840', - [21] = '00101840', - [22] = '00141840', - [23] = '00181840', - [24] = '001c1840', + [16] = '00001840', -- 8 + [17] = '00041840', -- 16 + [18] = '00081840', -- 32 + [19] = '000c1840', -- 40 +-- [] = '00101840', -- 50 50/8 = 6.25 invalid + [20] = '00141840', -- 64 +-- [] = '00181840', -- 100 100/8 == 12.5 invalid + [21] = '001c1840', -- 128 } t['PSK2'] = { -- Rf2 - [1] = '00002040', - [2] = '00042040', - [3] = '00082040', - [4] = '000c2040', - [5] = '00102040', - [6] = '00142040', - [7] = '00182040', - [8] = '001c2040', + [1] = '00002040', -- 8 + [2] = '00042040', -- 16 + [3] = '00082040', -- 32 + [4] = '000c2040', -- 40 + [5] = '00102040', -- 50 + [6] = '00142040', -- 64 + [7] = '00182040', -- 100 + [8] = '001c2040', -- 128 -- Rf4 - [9] = '00002440', - [10] = '00042440', - [11] = '00082440', - [12] = '000c2440', - [13] = '00102440', - [14] = '00142440', - [15] = '00182440', - [16] = '001c2440', + [9] = '00002440', -- 8 + [10] = '00042440', -- 16 + [11] = '00082440', -- 32 + [12] = '000c2440', -- 40 +-- [] = '00102440', -- 50 50/4 == 12.5 invalid + [13] = '00142440', -- 64 + [14] = '00182440', -- 100 + [15] = '001c2440', -- 128 -- Rf8 - [17] = '00002840', - [18] = '00042840', - [19] = '00082840', - [20] = '000c2840', - [21] = '00102840', - [22] = '00142840', - [23] = '00182840', - [24] = '001c2840', + [16] = '00002840', -- 8 + [17] = '00042840', -- 16 + [18] = '00082840', -- 32 + [19] = '000c2840', -- 40 +-- [] = '00102840', -- 50 50/8 == 6.25 invalid + [20] = '00142840', -- 64 +-- [] = '00182840', -- 100 100/8 == 12.5 invalid + [21] = '001c2840', -- 128 } t['PSK3'] = { -- Rf2 - [1] = '00003040', - [2] = '00043040', - [3] = '00083040', - [4] = '000c3040', - [5] = '00103040', - [6] = '00143040', - [7] = '00183040', - [8] = '001c3040', + [1] = '00003040', -- 8 + [2] = '00043040', -- 16 + [3] = '00083040', -- 32 + [4] = '000c3040', -- 40 + [5] = '00103040', -- 50 + [6] = '00143040', -- 64 + [7] = '00183040', -- 100 + [8] = '001c3040', -- 128 -- Rf4 - [1] = '00003440', - [2] = '00043440', - [3] = '00083440', - [4] = '000c3440', - [5] = '00103440', - [6] = '00143440', - [7] = '00183440', - [8] = '001c3440', + [9] = '00003440', -- 8 + [10] = '00043440', -- 16 + [11] = '00083440', -- 32 + [12] = '000c3440', -- 40 +-- [] = '00103440', -- 50 50/4 == 12.5 invalid + [13] = '00143440', -- 64 + [14] = '00183440', -- 100 + [15] = '001c3440', -- 128 -- Rf2 - [1] = '00003840', - [2] = '00043840', - [3] = '00083840', - [4] = '000c3840', - [5] = '00103840', - [6] = '00143840', - [7] = '00183840', - [8] = '001c3840', + [16] = '00003840', -- 8 + [17] = '00043840', -- 16 + [18] = '00083840', -- 32 + [19] = '000c3840', -- 40 +-- [] = '00103840', -- 50 50/8 == 6.25 invalid + [20] = '00143840', -- 64 +-- [] = '00183840', -- 100 100/8 == 12.5 invalid + [21] = '001c3840', -- 128 } t['FSK1'] = { From 64e68cd1584a2edafce705d02386d80d95ecda01 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Tue, 8 Sep 2020 11:27:20 +0200 Subject: [PATCH 0420/1047] need flush to print those dots --- client/src/cmdhfmf.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/client/src/cmdhfmf.c b/client/src/cmdhfmf.c index 342df0143..c42387063 100644 --- a/client/src/cmdhfmf.c +++ b/client/src/cmdhfmf.c @@ -4247,6 +4247,8 @@ static int CmdHF14AMfCLoad(const char *Cmd) { datalen -= 16; PrintAndLogEx(NORMAL, "." NOLF); + fflush(stdout); + blockNum++; // magic card type - mifare 1K @@ -4534,6 +4536,9 @@ static int CmdHF14AMfCView(const char *Cmd) { free(dump); return PM3_ESOFT; } + + PrintAndLogEx(NORMAL, "." NOLF); + fflush(stdout); } PrintAndLogEx(NORMAL, ""); From 589b0142e0eee5e96d64052fdd2bf01c8eb48ffa Mon Sep 17 00:00:00 2001 From: Eloff Date: Tue, 8 Sep 2020 23:01:39 +0300 Subject: [PATCH 0421/1047] Fix: magic gen 3 card response check --- armsrc/mifarecmd.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/armsrc/mifarecmd.c b/armsrc/mifarecmd.c index 4cd4eee67..d635ecc0f 100644 --- a/armsrc/mifarecmd.c +++ b/armsrc/mifarecmd.c @@ -2347,7 +2347,7 @@ int DoGen3Cmd(uint8_t *cmd, uint8_t cmd_len) { ReaderTransmit(cmd, cmd_len, NULL); int res = ReaderReceive(buf, par); - if (res == 4 || memcmp(buf, "\x90\x00\xfd\x07", 4) == 0) { + if (res == 4 && memcmp(buf, "\x90\x00\xfd\x07", 4) == 0) { // timeout for card memory reset SpinDelay(1000); } else { From 22938f15ddb1033709ea867093a23eb270ecb031 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Wed, 9 Sep 2020 01:09:44 +0200 Subject: [PATCH 0422/1047] Add ATS of other MFUL Gen2 --- armsrc/mifarecmd.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/armsrc/mifarecmd.c b/armsrc/mifarecmd.c index acc3baaf8..11d0cc30a 100644 --- a/armsrc/mifarecmd.c +++ b/armsrc/mifarecmd.c @@ -2293,6 +2293,11 @@ void MifareCIdent(void) { isGen = MAGIC_GEN_2; goto OUT; } + // test for some other Ultralight EV1 magic gen2 + if (memcmp(buf, "\x85\x00\x00\xA0\x0A\x00\x0A\xC3\x00\x04\x03\x01\x01\x00\x0B\x03\x16\xD7", 18) == 0) { + isGen = MAGIC_GEN_2; + goto OUT; + } }; OUT: From 9f33e52ae0ccc4e7a77e9d7efbcdfbdac2aedf7b Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Wed, 9 Sep 2020 01:16:29 +0200 Subject: [PATCH 0423/1047] Add ATS of other MFUL Gen2 --- armsrc/mifarecmd.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/armsrc/mifarecmd.c b/armsrc/mifarecmd.c index 11d0cc30a..dd2bffedf 100644 --- a/armsrc/mifarecmd.c +++ b/armsrc/mifarecmd.c @@ -2298,6 +2298,11 @@ void MifareCIdent(void) { isGen = MAGIC_GEN_2; goto OUT; } + // test for some other Ultralight magic gen2 + if (memcmp(buf, "\x85\x00\x00\xA0\x0A\x00\x0A\xB0\x00\x00\x00\x00\x00\x00\x00\x00\x18\x4D", 18) == 0) { + isGen = MAGIC_GEN_2; + goto OUT; + } }; OUT: From 9778b272a8e2a84cf940ebb22b6895d82974b8e2 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Wed, 9 Sep 2020 02:01:36 +0200 Subject: [PATCH 0424/1047] Add ATS of NTAG Gen2 --- armsrc/mifarecmd.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/armsrc/mifarecmd.c b/armsrc/mifarecmd.c index dd2bffedf..6e500bc70 100644 --- a/armsrc/mifarecmd.c +++ b/armsrc/mifarecmd.c @@ -2303,6 +2303,11 @@ void MifareCIdent(void) { isGen = MAGIC_GEN_2; goto OUT; } + // test for NTAG213 magic gen2 + if (memcmp(buf, "\x85\x00\x00\xA0\x00\x00\x0A\xA5\x00\x04\x04\x02\x01\x00\x0F\x03\x79\x0C", 18) == 0) { + isGen = MAGIC_GEN_2; + goto OUT; + } }; OUT: From ecc3623cad201af1be8e31981966fab7563719e3 Mon Sep 17 00:00:00 2001 From: Gator96100 Date: Wed, 9 Sep 2020 04:07:04 +0200 Subject: [PATCH 0425/1047] Fixed appveyor CI --- appveyor.yml | 237 ++++++++++++++++++++------------------------------- 1 file changed, 94 insertions(+), 143 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 6e268ccb7..328796653 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,6 +1,13 @@ version: 3.0.1.{build} image: Visual Studio 2019 -clone_folder: C:\ProxSpace\pm3 +clone_folder: C:\ProxSpace\pm3\proxmark +environment: + proxspace_url: https://github.com/Gator96100/ProxSpace/archive/master.zip + proxspace_zip_file: \proxspace.zip + proxspace_zip_folder_name: ProxSpace-* + proxspace_path: \ProxSpace + proxspace_home_path: \ProxSpace\pm3 + init: - ps: >- $psversiontable @@ -25,42 +32,79 @@ init: # iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1')) clone_script: - ps: >- + + Function ExecUpdate($Text, $firstStart) { + Write-Host "$Text" -NoNewLine + Start-Process "cmd.exe" "/c ""cd /D $env:proxspace_path && call msys2\ps\setup.cmd && msys2\msys2_shell.cmd -mingw64 -defterm -no-start -c ""exit""""" + $StartTime=[System.Environment]::TickCount + Start-Sleep -s 10 + while($true) { + $cmdprocess = Get-Process "cmd" -ErrorAction SilentlyContinue + + if (!$cmdprocess -Or $cmdprocess.HasExited) { + Write-Host "[ OK ]" -ForegroundColor Green + break + } + + if ($firstStart -And (Test-Path "$env:proxspace_path\msys2\etc\pacman.conf.pacnew")) { + Start-Sleep -s 5 + $tmp = $cmdprocess.CloseMainWindow() + Start-Sleep -s 5 + Stop-Process -Name "cmd" -Force -ErrorAction SilentlyContinue + Write-Host "Exit by pacman.conf" -ForegroundColor Green + break + } + + if ([System.Environment]::TickCount-$StartTime -gt 1000000) { + Write-host "Exit by timeout" -ForegroundColor Yellow + break + } + + Start-Sleep -s 1 + } + } + Write-Host "Removing ProxSpace..." -NoNewLine $CloneTime=[System.Environment]::TickCount - + cd \ - Remove-Item -Recurse -Force -Path c:\ProxSpace\* + Remove-Item -Recurse -Force -Path $env:proxspace_path Write-Host "[ OK ]" -ForegroundColor Green - - Write-Host "Git clone ProxSpace..." -NoNewLine - - git clone -q https://github.com/Gator96100/ProxSpace c:\ProxSpace - - Write-Host "[ OK ]" -ForegroundColor Green - - - if(!(Test-Path -Path C:\ProxSpace\pm3)){ - - New-Item -ItemType Directory -Force -Path C:\ProxSpace\pm3 - - } + Write-Host "Download ProxSpace..." -NoNewLine + + [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 + + Invoke-WebRequest "$env:proxspace_url" -outfile "$env:proxspace_zip_file" - Write-Host "Removing pm3 dir..." -NoNewLine - - Remove-Item -Recurse -Force -Path c:\ProxSpace\pm3\* - Write-Host "[ OK ]" -ForegroundColor Green - - Write-Host "Removing ps startup_check.sh ..." -NoNewLine - - Remove-Item -Recurse -Force -Path c:\ProxSpace\msys2\ps\startup_checks.sh - + + Write-Host "Extracting ProxSpace..." -NoNewLine + + Expand-Archive -LiteralPath "$env:proxspace_zip_file" -DestinationPath "\" + + Remove-Item "$env:proxspace_zip_file" + Write-Host "[ OK ]" -ForegroundColor Green + + Write-Host "Renaming ProxSpace folder..." -NoNewLine + + Get-ChildItem -Path "\$env:proxspace_zip_folder_name" | Rename-Item -NewName (Split-Path $env:proxspace_path -Leaf) + + Write-Host "[ OK ]" -ForegroundColor Gree + ExecUpdate "Initial msys2 startup..." $true + + ExecUpdate "Installing required packages..." $false + + + $psversion = (Select-String -Pattern 'PSVERSION=' -SimpleMatch -Path "$env:proxspace_path\msys2\ps\09-proxspace_setup.post").Line.Split("""")[1] + + Write-Host "ProxSpace version: $psversion" -ForegroundColor Yellow + Write-Host "Cloning repository <$env:appveyor_repo_name> to $env:appveyor_build_folder ..." -NoNewLine if(-not $env:appveyor_pull_request_number) { @@ -73,134 +117,45 @@ clone_script: git fetch -q origin +refs/pull/$env:appveyor_pull_request_number/merge: git checkout -qf FETCH_HEAD } - + Write-Host "[ OK ]" -ForegroundColor Green - - - Write-Host "Fill msys2\etc\fstab file..." -NoNewLine - - New-Item c:\ProxSpace\msys2\etc\fstab -type file -force -value "# For a description of the file format, see the Users Guide`n# http://cygwin.com/cygwin-ug-net/using.html#mount-table`nnone / cygdrive binary,posix=0,noacl,user 0 0 `nC:\ProxSpace\pm3 /pm3 ntfs noacl 0 0 `nC:\ProxSpace\gcc-arm-none-eabi /gcc-arm-none-eabi ntfs noacl 0 0 `n" - - Write-Host "[ OK ]" -ForegroundColor Green - - - Write-Host "Update msys2 packages..." - - $env:Path = "C:\ProxSpace\msys2\usr\bin;C:\ProxSpace\msys2\mingw32\bin;C:\ProxSpace\gcc-arm-none-eabi\bin;$env:Path" - - Function ExecUpdate($Name, $Cmd, $ErrorLine) { - - Write-Host "Exec [$Name]... " -NoNewLine - #--- begin Job - - $Job = Start-Job -Name "$Name" -ScriptBlock { - $env:Path = "C:\ProxSpace\msys\bin;$env:Path" - Set-Location $using:PWD - - $sb=[scriptblock]::Create("$using:Cmd") - #execute scriptblock - $Cond=&$sb - - return $Cond - } - - #--- end Job - - $JobTime=[System.Environment]::TickCount - while($true) { - Try { - $Res = Receive-Job -Job $Job -Keep 2>&1 6>&1 - } - Catch { - $Res = "" - Write-host "error in Receive-Job" - } - - if ($Res -is "String" -and $Res -like "*$ErrorLine*"){ - Write-host "Exit by stop phrase" -ForegroundColor Green - break - } - - if ($Res -is [Object]){ - [bool]$needexit = $false - ForEach($line in $Res){ - if ($line -like "*$ErrorLine*"){ - Write-host "Exit by stop phrase [obj]" -ForegroundColor Green - $needexit = $true - break - } - } - if ($needexit) { - break - } - } - - if(Wait-Job $Job -Timeout 5){ - Write-host "Exit by end job" -ForegroundColor Green - break - } - - if ([System.Environment]::TickCount-$JobTime -gt 1000000) { - Write-host "Exit by timeout" -ForegroundColor Yellow - break - } - } - - Remove-Job -Force $Job - } - - cd C:\ProxSpace\ - - C:\ProxSpace\msys2\ps\setup.cmd - - ExecUpdate "update1" "C:\ProxSpace\msys2\msys2_shell.cmd -mingw32 -defterm -no-start /dev/null" "terminate?MSYS2" - - ExecUpdate "update2" "C:\ProxSpace\msys2\msys2_shell.cmd -mingw32 -defterm -no-start /dev/null" "terminate?MSYS2" Add-AppveyorMessage -Message "ProxSpace download and update took $(([System.Environment]::TickCount-$CloneTime) / 1000) sec" -Category Information - Write-Host "Update " -NoNewLine - - Write-Host "[ OK ]" -ForegroundColor Green + install: build_script: - ps: >- - $env:Path="C:\ProxSpace\msys2\usr\bin;C:\ProxSpace\msys2\mingw32\bin;C:\ProxSpace\gcc-arm-none-eabi\bin;c:\Python38;c:\Python38\Scripts;$env:Path" - $env:MINGW_HOME="C:\ProxSpace\msys2\mingw32" - - $env:MSYS_HOME="C:\ProxSpace\msys2" - - $env:MSYSTEM="MINGW32" - - $env:MINGW_PREFIX="/mingw32" - - $env:SHELL="/bin/bash" - - $env:MSYSTEM_CHOST="i686-w64-mingw32" - - cd C:\ProxSpace\pm3 + $pmfolder = Split-Path $env:appveyor_build_folder -Leaf + + Function ExecMinGWCmd($Cmd) { + cd $env:proxspace_path + msys2\msys2_shell.cmd -mingw64 -defterm -no-start -c "cd $pmfolder && $Cmd" + } + Write-Host "---------- make ----------" -ForegroundColor Yellow - $TestTime=[System.Environment]::TickCount - + $TestTime=[System.Environment]::TickCount + #make - - bash -c -i 'echo $PATH;pwd;make clean;make V=1' - + + cd $env:proxspace_path + + msys2\ps\setup.cmd + + ExecMinGWCmd "make clean;make V=1" #some checks - if(!(Test-Path C:\ProxSpace\pm3\client\proxmark3.exe)){ + if(!(Test-Path "$env:proxspace_home_path\$pmfolder\client\proxmark3.exe")){ throw "Main file proxmark3.exe not exists." } - cd c:\ProxSpace\pm3 - - bash -c -i 'make check' + ExecMinGWCmd 'make check' $testspass = ($LASTEXITCODE -eq 0) @@ -219,11 +174,9 @@ build_script: $TestTime=[System.Environment]::TickCount - bash -c -i 'pwd;make clean;make PLATFORM_EXTRAS=BTADDON' + ExecMinGWCmd 'make clean;make V=1 PLATFORM_EXTRAS=BTADDON' - cd c:\ProxSpace\pm3 - - bash -c -i 'make check' + ExecMinGWCmd 'make check' $testspass = ($LASTEXITCODE -eq 0) @@ -239,19 +192,17 @@ build_script: Write-Host "---------- make clean ----------" -ForegroundColor Yellow - bash -c -i 'make clean' + ExecMinGWCmd 'make clean' Write-Host "---------- cmake ----------" -ForegroundColor Yellow $TestTime=[System.Environment]::TickCount - - cmd.exe /c 'C:\ProxSpace\msys2\msys2_shell.cmd -mingw32 -defterm -no-start -c "mkdir -p client/build; cd client/build; cmake -G""MSYS Makefiles"" ..; make VERBOSE=1;"' + + ExecMinGWCmd 'mkdir -p client/build; cd client/build; cmake -G""MSYS Makefiles"" ..; make VERBOSE=1;' Write-Host "---------- cmake tests ----------" -ForegroundColor Yellow - cd c:\ProxSpace\pm3 - - bash -c -i './tools/pm3_tests.sh --clientbin client/build/proxmark3.exe client' + ExecMinGWCmd './tools/pm3_tests.sh --clientbin client/build/proxmark3.exe client' $testspass = ($LASTEXITCODE -eq 0) From 2af4a8957be059ace3391713832f02cb00f85e56 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Wed, 9 Sep 2020 10:37:47 +0200 Subject: [PATCH 0426/1047] Fix hf mfu setuid for cards requiring valid BCC --- client/src/cmdhfmfu.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/client/src/cmdhfmfu.c b/client/src/cmdhfmfu.c index 58dc9a300..a9b03cb46 100644 --- a/client/src/cmdhfmfu.c +++ b/client/src/cmdhfmfu.c @@ -2540,6 +2540,7 @@ static int CmdHF14AMfUCSetUid(const char *Cmd) { return PM3_EINVARG; } + PrintAndLogEx(INFO, "Please ignore possible transient BCC warnings"); // read block2. clearCommandBuffer(); SendCommandMIX(CMD_HF_MIFAREU_READBL, 2, 0, 0, NULL, 0); @@ -2552,6 +2553,21 @@ static int CmdHF14AMfUCSetUid(const char *Cmd) { uint8_t oldblock2[4] = {0x00}; memcpy(resp.data.asBytes, oldblock2, 4); + // Enforce bad BCC handling temporarily as BCC will be wrong between + // block 1 write and block2 write + hf14a_config config; + SendCommandNG(CMD_HF_ISO14443A_GET_CONFIG, NULL, 0); + if (!WaitForResponseTimeout(CMD_HF_ISO14443A_GET_CONFIG, &resp, 2000)) { + PrintAndLogEx(WARNING, "command execution time out"); + return PM3_ETIMEOUT; + } + memcpy(&config, resp.data.asBytes, sizeof(hf14a_config)); + int8_t oldconfig_bcc = config.forcebcc; + if (oldconfig_bcc != 2) { + config.forcebcc = 2; + SendCommandNG(CMD_HF_ISO14443A_SET_CONFIG, (uint8_t *)&config, sizeof(hf14a_config)); + } + // block 0. uint8_t data[4]; data[0] = uid[0]; @@ -2588,6 +2604,12 @@ static int CmdHF14AMfUCSetUid(const char *Cmd) { PrintAndLogEx(WARNING, "Command execute timeout"); return PM3_ETIMEOUT; } + + // restore BCC config + if (oldconfig_bcc != 2) { + config.forcebcc = oldconfig_bcc; + SendCommandNG(CMD_HF_ISO14443A_SET_CONFIG, (uint8_t *)&config, sizeof(hf14a_config)); + } return PM3_SUCCESS; } From d60b9859bfb8bfaf715f05de347542f0b72513e3 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 9 Sep 2020 12:19:26 +0200 Subject: [PATCH 0427/1047] lf fdx clone, sim, demod - wrong bit, better naming and output --- client/src/cmdlffdx.c | 237 +++++++++++++++++++++++++++++------------- client/src/cmdlffdx.h | 2 +- 2 files changed, 168 insertions(+), 71 deletions(-) diff --git a/client/src/cmdlffdx.c b/client/src/cmdlffdx.c index 496dad691..564c4d6b6 100644 --- a/client/src/cmdlffdx.c +++ b/client/src/cmdlffdx.c @@ -50,19 +50,18 @@ static int CmdHelp(const char *Cmd); static int usage_lf_fdx_clone(void) { PrintAndLogEx(NORMAL, "Clone a FDX-B animal tag to a T55x7 or Q5/T5555 tag."); - PrintAndLogEx(NORMAL, "Usage: lf fdx clone [h] "); + PrintAndLogEx(NORMAL, "Usage: lf fdx clone [h] [c ] [a ] [e ] "); PrintAndLogEx(NORMAL, "Options:"); - PrintAndLogEx(NORMAL, " h : This help"); - PrintAndLogEx(NORMAL, " : Country id"); - PrintAndLogEx(NORMAL, " : Animal id"); - PrintAndLogEx(NORMAL, " : Extended data"); - //reserved/rfu - //is animal tag - PrintAndLogEx(NORMAL, " : Specify writing to Q5/T5555 tag"); + PrintAndLogEx(NORMAL, " h : This help"); + PrintAndLogEx(NORMAL, " c : (dec) Country code"); + PrintAndLogEx(NORMAL, " n : (dec) National code"); + PrintAndLogEx(NORMAL, " e : (hex) Extended data"); + PrintAndLogEx(NORMAL, " s : Set animal bit"); + PrintAndLogEx(NORMAL, " : Specify writing to Q5/T5555 tag"); PrintAndLogEx(NORMAL, ""); PrintAndLogEx(NORMAL, "Examples:"); - PrintAndLogEx(NORMAL, _YELLOW_(" lf fdx clone 999 112233")); - PrintAndLogEx(NORMAL, _YELLOW_(" lf fdx clone 999 112233 16a")); + PrintAndLogEx(NORMAL, _YELLOW_(" lf fdx clone c 999 n 112233 s")); + PrintAndLogEx(NORMAL, _YELLOW_(" lf fdx clone c 999 n 112233 e 16a")); return PM3_SUCCESS; } @@ -70,33 +69,37 @@ static int usage_lf_fdx_sim(void) { PrintAndLogEx(NORMAL, "Enables simulation of FDX-B animal tag"); PrintAndLogEx(NORMAL, "Simulation runs until the button is pressed or another USB command is issued."); PrintAndLogEx(NORMAL, ""); - PrintAndLogEx(NORMAL, "Usage: lf fdx sim [h] "); + PrintAndLogEx(NORMAL, "Usage: lf fdx sim [h] [c ] [n ] [e ] "); PrintAndLogEx(NORMAL, "Options:"); - PrintAndLogEx(NORMAL, " h : This help"); - PrintAndLogEx(NORMAL, " : Country ID"); - PrintAndLogEx(NORMAL, " : Animal ID"); - PrintAndLogEx(NORMAL, " : Extended data"); + PrintAndLogEx(NORMAL, " h : This help"); + PrintAndLogEx(NORMAL, " c : (dec) Country code"); + PrintAndLogEx(NORMAL, " n : (dec) National code"); + PrintAndLogEx(NORMAL, " e : (hex) Extended data"); + PrintAndLogEx(NORMAL, " s : Set animal bit"); + PrintAndLogEx(NORMAL, " : Specify writing to Q5/T5555 tag"); PrintAndLogEx(NORMAL, ""); PrintAndLogEx(NORMAL, "Examples:"); - PrintAndLogEx(NORMAL, _YELLOW_(" lf fdx sim 999 112233")); - PrintAndLogEx(NORMAL, _YELLOW_(" lf fdx sim 999 112233 16a")); + PrintAndLogEx(NORMAL, _YELLOW_(" lf fdx sim c 999 n 112233 s")); + PrintAndLogEx(NORMAL, _YELLOW_(" lf fdx sim c 999 n 112233 e 16a")); return PM3_SUCCESS; } // clearing the topbit needed for the preambl detection. -static void verify_values(uint64_t *animalid, uint32_t *countryid, uint32_t *extended) { +static void verify_values(uint64_t *animalid, uint32_t *countryid, uint32_t *extended, uint8_t *is_animal) { if ((*animalid & 0x3FFFFFFFFF) != *animalid) { *animalid &= 0x3FFFFFFFFF; PrintAndLogEx(INFO, "Animal ID truncated to 38bits: " _YELLOW_("%"PRIx64), *animalid); } - if ((*countryid & 0x3ff) != *countryid) { - *countryid &= 0x3ff; + if ((*countryid & 0x3FF) != *countryid) { + *countryid &= 0x3FF; PrintAndLogEx(INFO, "Country ID truncated to 10bits:" _YELLOW_("%03d"), *countryid); } - if ((*extended & 0xfff) != *extended) { - *extended &= 0xfff; + if ((*extended & 0xFFF) != *extended) { + *extended &= 0xFFF; PrintAndLogEx(INFO, "Extended truncated to 24bits: " _YELLOW_("0x%03X"), *extended); } + + *is_animal &= 0x01; } static inline uint32_t bitcount(uint32_t a) { @@ -228,6 +231,8 @@ int demodFDX(void) { // set and leave DemodBuffer intact setDemodBuff(DemodBuffer, 128, preambleIndex); setClockGrid(g_DemodClock, g_DemodStartIdx + (preambleIndex * g_DemodClock)); + + // remove marker bits (1's every 9th digit after preamble) (pType = 2) size = removeParity(DemodBuffer, 11, 9, 2, 117); if (size != 104) { @@ -236,29 +241,43 @@ int demodFDX(void) { } //got a good demod + uint8_t offset; uint64_t NationalCode = ((uint64_t)(bytebits_to_byteLSBF(DemodBuffer + 32, 6)) << 32) | bytebits_to_byteLSBF(DemodBuffer, 32); - uint16_t countryCode = bytebits_to_byteLSBF(DemodBuffer + 38, 10); - uint8_t dataBlockBit = DemodBuffer[48]; - uint32_t reservedCode = bytebits_to_byteLSBF(DemodBuffer + 49, 14); - uint8_t animalBit = DemodBuffer[63]; - uint16_t crc = bytebits_to_byteLSBF(DemodBuffer + 64, 16); - uint32_t extended = bytebits_to_byteLSBF(DemodBuffer + 80, 24); + + offset = 38; + uint16_t countryCode = bytebits_to_byteLSBF(DemodBuffer + offset, 10); + + offset += 10; + uint8_t dataBlockBit = DemodBuffer[offset]; + + offset++; + uint32_t reservedCode = bytebits_to_byteLSBF(DemodBuffer + offset, 14); + + offset += 14; + uint8_t animalBit = DemodBuffer[offset]; + + offset++; + uint16_t crc = bytebits_to_byteLSBF(DemodBuffer + offset, 16); + + offset += 16; + uint32_t extended = bytebits_to_byteLSBF(DemodBuffer + offset, 24); + uint64_t rawid = (uint64_t)(bytebits_to_byte(DemodBuffer, 32)) << 32 | bytebits_to_byte(DemodBuffer + 32, 32); uint8_t raw[8]; num_to_bytes(rawid, 8, raw); PrintAndLogEx(SUCCESS, "FDX-B / ISO 11784/5 Animal"); PrintAndLogEx(SUCCESS, "Animal ID " _GREEN_("%04u-%012"PRIu64), countryCode, NationalCode); - PrintAndLogEx(SUCCESS, "National Code " _GREEN_("%012" PRIu64) " (0x%" PRIx64 ")", NationalCode, NationalCode); - PrintAndLogEx(SUCCESS, "Country Code %04u", countryCode); - PrintAndLogEx(SUCCESS, "Reserved/RFU %u (0x04%X)", reservedCode, reservedCode); - PrintAndLogEx(SUCCESS, "Animal Tag %s", animalBit ? _YELLOW_("True") : "False"); - PrintAndLogEx(SUCCESS, "Has extended data %s [0x%X]", dataBlockBit ? _YELLOW_("True") : "False", extended); + PrintAndLogEx(SUCCESS, "National Code " _GREEN_("%012" PRIu64) " (0x%" PRIX64 ")", NationalCode, NationalCode); + PrintAndLogEx(SUCCESS, "Country Code " _GREEN_("%04u"), countryCode); + PrintAndLogEx(SUCCESS, "Reserved/RFU %u (0x%04X)", reservedCode, reservedCode); + PrintAndLogEx(SUCCESS, " Animal bit set? %s", animalBit ? _YELLOW_("True") : "False"); + PrintAndLogEx(SUCCESS, " Data block? %s [value 0x%X]", dataBlockBit ? _YELLOW_("True") : "False", extended); uint8_t c[] = {0, 0}; compute_crc(CRC_11784, raw, sizeof(raw), &c[0], &c[1]); - PrintAndLogEx(SUCCESS, "CRC-16 0x%04X (%s) ", crc, (crc == (c[1] << 8 | c[0])) ? _GREEN_("ok") : _RED_("fail")); - + PrintAndLogEx(SUCCESS, "CRC-16 0x%04X (%s)", crc, (crc == (c[1] << 8 | c[0])) ? _GREEN_("ok") : _RED_("fail")); + // iceman: crc doesn't protect the extended data? PrintAndLogEx(SUCCESS, "Raw " _GREEN_("%s"), sprint_hex(raw, 8)); if (g_debugMode) { @@ -327,21 +346,61 @@ static int CmdFdxRead(const char *Cmd) { static int CmdFdxClone(const char *Cmd) { - uint32_t countryid = 0, extended = 0; - uint64_t animalid = 0; + uint32_t country_code = 0, extended = 0; + uint64_t national_code = 0; + uint8_t is_animal = 0, cmdp = 0; + bool errors = false, has_extended = false, q5 = false; - char cmdp = tolower(param_getchar(Cmd, 0)); - if (strlen(Cmd) == 0 || cmdp == 'h') return usage_lf_fdx_clone(); + while (param_getchar(Cmd, cmdp) != 0x00 && !errors) { + switch (tolower(param_getchar(Cmd, cmdp))) { + case 'h': + return usage_lf_fdx_clone(); + case 'c': { + country_code = param_get32ex(Cmd, cmdp + 1, 0, 10); + cmdp += 2; + break; + } + case 'n': { + national_code = param_get64ex(Cmd, cmdp + 1, 0, 10); + cmdp += 2; + break; + } + case 'e': { + extended = param_get32ex(Cmd, cmdp + 1, 0, 16); + has_extended = true; + cmdp += 2; + break; + } + case 's': { + is_animal = 1; + cmdp++; + break; + } + case 'q': { + q5 = true; + cmdp++; + break; + } + default: { + PrintAndLogEx(WARNING, "Unknown parameter '%c'", param_getchar(Cmd, cmdp)); + errors = true; + break; + } + } + } + if (errors || strlen(Cmd) == 0) return usage_lf_fdx_clone(); + + verify_values(&national_code, &country_code, &extended, &is_animal); - countryid = param_get32ex(Cmd, 0, 0, 10); - animalid = param_get64ex(Cmd, 1, 0, 10); - extended = param_get32ex(Cmd, 2, 0, 16); - - verify_values(&animalid, &countryid, &extended); + PrintAndLogEx(INFO, " Country code %u", country_code); + PrintAndLogEx(INFO, " National code %u", national_code); + PrintAndLogEx(INFO, " Set animal bit %c", (is_animal) ? 'Y':'N'); + PrintAndLogEx(INFO, "Set data block bit %c", (has_extended) ? 'Y':'N'); + PrintAndLogEx(INFO, " Extended data 0x%X", extended); + PrintAndLogEx(INFO, " RFU 0"); uint8_t *bits = calloc(128, sizeof(uint8_t)); - - if (getFDXBits(animalid, countryid, 1, (extended > 0), extended, bits) != PM3_SUCCESS) { + if (getFDXBits(national_code, country_code, is_animal, has_extended, extended, bits) != PM3_SUCCESS) { PrintAndLogEx(ERR, "Error with tag bitstream generation."); free(bits); return PM3_ESOFT; @@ -350,7 +409,6 @@ static int CmdFdxClone(const char *Cmd) { uint32_t blocks[5] = {T55x7_MODULATION_DIPHASE | T55x7_BITRATE_RF_32 | 4 << T55x7_MAXBLOCK_SHIFT, 0, 0, 0, 0}; //Q5 - bool q5 = tolower(param_getchar(Cmd, 2)) == 'q'; if (q5) blocks[0] = T5555_FIXED | T5555_MODULATION_BIPHASE | T5555_INVERT_OUTPUT | T5555_SET_BITRATE(32) | 4 << T5555_MAXBLOCK_SHIFT; @@ -362,7 +420,7 @@ static int CmdFdxClone(const char *Cmd) { free(bits); - PrintAndLogEx(INFO, "Preparing to clone FDX-B to " _YELLOW_("%s") " with animal ID: " _GREEN_("%04u-%"PRIu64)" (extended 0x%X)", (q5) ? "Q5/T5555" : "T55x7", countryid, animalid, extended); + PrintAndLogEx(INFO, "Preparing to clone FDX-B to " _YELLOW_("%s") " with animal ID: " _GREEN_("%04u-%"PRIu64), (q5) ? "Q5/T5555" : "T55x7", country_code, national_code); print_blocks(blocks, ARRAYLEN(blocks)); int res = clone_t55xx_tag(blocks, ARRAYLEN(blocks)); @@ -372,24 +430,59 @@ static int CmdFdxClone(const char *Cmd) { } static int CmdFdxSim(const char *Cmd) { - uint32_t countryid = 0, extended = 0; - uint64_t animalid = 0; - char cmdp = tolower(param_getchar(Cmd, 0)); - if (strlen(Cmd) == 0 || cmdp == 'h') return usage_lf_fdx_sim(); + uint32_t country_code = 0, extended = 0; + uint64_t national_code = 0; + uint8_t is_animal = 0, cmdp = 0; + bool errors = false, has_extended = false; - countryid = param_get32ex(Cmd, 0, 0, 10); - animalid = param_get64ex(Cmd, 1, 0, 10); - extended = param_get32ex(Cmd, 2, 0, 16); + while (param_getchar(Cmd, cmdp) != 0x00 && !errors) { + switch (tolower(param_getchar(Cmd, cmdp))) { + case 'h': + return usage_lf_fdx_sim(); + case 'c': { + country_code = param_get32ex(Cmd, cmdp + 1, 0, 10); + cmdp += 2; + break; + } + case 'n': { + national_code = param_get64ex(Cmd, cmdp + 1, 0, 10); + cmdp += 2; + break; + } + case 'e': { + extended = param_get32ex(Cmd, cmdp + 1, 0, 10); + has_extended = true; + cmdp += 2; + break; + } + case 's': { + is_animal = 1; + cmdp++; + break; + } + default: { + PrintAndLogEx(WARNING, "Unknown parameter '%c'", param_getchar(Cmd, cmdp)); + errors = true; + break; + } + } + } + if (errors) return usage_lf_fdx_sim(); + + verify_values(&national_code, &country_code, &extended, &is_animal); - verify_values(&animalid, &countryid, &extended); + PrintAndLogEx(INFO, " Country code %u", country_code); + PrintAndLogEx(INFO, " National code %u", national_code); + PrintAndLogEx(INFO, " Set animal bit %c", (is_animal) ? 'Y':'N'); + PrintAndLogEx(INFO, "Set data block bit %c", (has_extended) ? 'Y':'N'); + PrintAndLogEx(INFO, " Extended data 0x%X", extended); + PrintAndLogEx(INFO, " RFU 0"); - PrintAndLogEx(SUCCESS, "Simulating FDX-B animal ID: " _GREEN_("%04u-%"PRIu64)" (extended 0x%X)", countryid, animalid, extended); + PrintAndLogEx(SUCCESS, "Simulating FDX-B animal ID: " _GREEN_("%04u-%"PRIu64), country_code, national_code); - //getFDXBits(uint64_t national_id, uint16_t country, uint8_t isanimal, uint8_t isextended, uint32_t extended, uint8_t *bits) uint8_t *bits = calloc(128, sizeof(uint8_t)); - - if (getFDXBits(animalid, countryid, 1, (extended > 0), extended, bits) != PM3_SUCCESS) { + if (getFDXBits(national_code, country_code, is_animal, (extended > 0), extended, bits) != PM3_SUCCESS) { PrintAndLogEx(ERR, "Error with tag bitstream generation."); free(bits); return PM3_ESOFT; @@ -453,7 +546,7 @@ int detectFDXB(uint8_t *dest, size_t *size) { return (int)startIdx; } -int getFDXBits(uint64_t national_id, uint16_t country, uint8_t is_animal, uint8_t is_extended, uint32_t extended, uint8_t *bits) { +int getFDXBits(uint64_t national_code, uint16_t country_code, uint8_t is_animal, uint8_t is_extended, uint32_t extended, uint8_t *bits) { // add preamble ten 0x00 and one 0x01 memset(bits, 0x00, 10); @@ -471,21 +564,21 @@ int getFDXBits(uint64_t national_id, uint16_t country, uint8_t is_animal, uint8_ num_to_bytebitsLSBF(0x00 >> 7, 7, bits + 74); // add animal flag - OK - bits[65] = is_animal; + bits[81] = is_animal; // add extended flag - OK - bits[81] = is_extended; + bits[65] = is_extended; // add national code 40bits - OK - num_to_bytebitsLSBF(national_id >> 0, 8, bits + 11); - num_to_bytebitsLSBF(national_id >> 8, 8, bits + 20); - num_to_bytebitsLSBF(national_id >> 16, 8, bits + 29); - num_to_bytebitsLSBF(national_id >> 24, 8, bits + 38); - num_to_bytebitsLSBF(national_id >> 32, 6, bits + 47); + num_to_bytebitsLSBF(national_code >> 0, 8, bits + 11); + num_to_bytebitsLSBF(national_code >> 8, 8, bits + 20); + num_to_bytebitsLSBF(national_code >> 16, 8, bits + 29); + num_to_bytebitsLSBF(national_code >> 24, 8, bits + 38); + num_to_bytebitsLSBF(national_code >> 32, 6, bits + 47); // add country code - OK - num_to_bytebitsLSBF(country >> 0, 2, bits + 53); - num_to_bytebitsLSBF(country >> 2, 8, bits + 56); + num_to_bytebitsLSBF(country_code >> 0, 2, bits + 53); + num_to_bytebitsLSBF(country_code >> 2, 8, bits + 56); // add crc-16 - OK uint8_t raw[8]; @@ -501,6 +594,10 @@ int getFDXBits(uint64_t national_id, uint16_t country, uint8_t is_animal, uint8_ num_to_bytebitsLSBF(extended >> 0, 8, bits + 101); num_to_bytebitsLSBF(extended >> 8, 8, bits + 110); num_to_bytebitsLSBF(extended >> 16, 8, bits + 119); + + // 8 16 24 32 40 48 49 + // A8 28 0C 92 EA 6F 00 01 + // A8 28 0C 92 EA 6F 80 00 return PM3_SUCCESS; } diff --git a/client/src/cmdlffdx.h b/client/src/cmdlffdx.h index 63043c7c2..faf1f2aa7 100644 --- a/client/src/cmdlffdx.h +++ b/client/src/cmdlffdx.h @@ -14,7 +14,7 @@ int CmdLFFdx(const char *Cmd); int detectFDXB(uint8_t *dest, size_t *size); int demodFDX(void); -int getFDXBits(uint64_t national_id, uint16_t country, uint8_t is_animal, uint8_t is_extended, uint32_t extended, uint8_t *bits); +int getFDXBits(uint64_t national_code, uint16_t country_code, uint8_t is_animal, uint8_t is_extended, uint32_t extended, uint8_t *bits); #endif From 539f33a3c9455f20e25d8e4b3adb85b1548d264e Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 9 Sep 2020 12:30:09 +0200 Subject: [PATCH 0428/1047] warning gcc10.2 (@mwalker33) --- client/src/fileutils.c | 1 + 1 file changed, 1 insertion(+) diff --git a/client/src/fileutils.c b/client/src/fileutils.c index d70fe508d..be6cab977 100644 --- a/client/src/fileutils.c +++ b/client/src/fileutils.c @@ -1482,6 +1482,7 @@ static int filelist(const char *path, const char *ext, uint8_t last, bool tentat char tmp_fullpath[1024] = {0}; strncat(tmp_fullpath, path, sizeof(tmp_fullpath) - 1); + tmp_fullpath[1023] = 0x00; strncat(tmp_fullpath, namelist[i]->d_name, strlen(tmp_fullpath) - 1); if (is_directory(tmp_fullpath)) { From 131ffbcb6ad3bffd74db1c36d1e7e19f52fffec1 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 9 Sep 2020 17:33:03 +0200 Subject: [PATCH 0429/1047] trace list 15 - now prints block for write /read annotations better --- client/src/cmdhflist.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/client/src/cmdhflist.c b/client/src/cmdhflist.c index d898e9ab9..dff2b6345 100644 --- a/client/src/cmdhflist.c +++ b/client/src/cmdhflist.c @@ -442,13 +442,19 @@ void annotateIso15693(char *exp, size_t size, uint8_t *cmd, uint8_t cmdsize) { uint8_t block = 0; if (cmdsize == 13) block = cmd[10]; + else if (cmdsize == 5) + block = cmd[2]; snprintf(exp, size, "READBLOCK(%d)", block); return; } - case ISO15693_WRITEBLOCK: - snprintf(exp, size, "WRITEBLOCK"); + case ISO15693_WRITEBLOCK: { + uint8_t block = 0; + if (cmdsize == 9) + block = cmd[2]; + snprintf(exp, size, "WRITEBLOCK(%d)", block); return; + } case ISO15693_LOCKBLOCK: snprintf(exp, size, "LOCKBLOCK"); return; From a785d7ea77c2fa45b8fdb24d4a7bf6b43cbc4784 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Wed, 9 Sep 2020 17:38:15 +0200 Subject: [PATCH 0430/1047] typo --- client/luascripts/mfu_magic.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/luascripts/mfu_magic.lua b/client/luascripts/mfu_magic.lua index d921a9fb2..5b817fe93 100644 --- a/client/luascripts/mfu_magic.lua +++ b/client/luascripts/mfu_magic.lua @@ -191,7 +191,7 @@ local function read_config() end print('Magic NTAG 21* Configuration') - print(' - Type ', typestr, '(geniune cardtype)') + print(' - Type ', typestr, '(genuine cardtype)') print(' - Password', pwd) print(' - Pack ', pack) print(' - Version ', version) From 420b29c7bf1b73051863e4ef446491b49cf954f7 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 10 Sep 2020 00:05:50 +0200 Subject: [PATCH 0431/1047] hf 14a sim t 10 - possibility to simulate IKEA rothult locks --- armsrc/iso14443a.c | 288 ++++++++++++++++++++++++------------------ client/src/cmdhf14a.c | 1 + 2 files changed, 169 insertions(+), 120 deletions(-) diff --git a/armsrc/iso14443a.c b/armsrc/iso14443a.c index 061dfe9ae..792d73400 100644 --- a/armsrc/iso14443a.c +++ b/armsrc/iso14443a.c @@ -899,13 +899,15 @@ bool GetIso14443aCommandFromReader(uint8_t *received, uint8_t *par, int *len) { uint16_t check = 0; for (;;) { - if (check == 1000) { - if (BUTTON_PRESS() || data_available()) + if (check == 4000) { +// if (BUTTON_PRESS() || data_available()) + if (BUTTON_PRESS()) return false; + check = 0; + WDT_HIT(); } ++check; - WDT_HIT(); if (AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_RXRDY)) { b = (uint8_t)AT91C_BASE_SSC->SSC_RHR; @@ -981,11 +983,15 @@ bool SimulateIso14443aInit(int tagType, int flags, uint8_t *data, tag_response_i // Prepare the optional second SAK (for 7 byte UID), drop the cascade bit static uint8_t rSAKc2[3] = { 0x00 }; // dummy ATS (pseudo-ATR), answer to RATS - static uint8_t rRATS[] = { 0x04, 0x58, 0x80, 0x02, 0x00, 0x00 }; +// static uint8_t rRATS[] = { 0x04, 0x58, 0x80, 0x02, 0x00, 0x00 }; + static uint8_t rRATS[] = { 0x05, 0x75, 0x80, 0x60, 0x02, 0x00, 0x00 }; + // GET_VERSION response for EV1/NTAG static uint8_t rVERSION[10] = { 0x00 }; // READ_SIG response for EV1/NTAG static uint8_t rSIGN[34] = { 0x00 }; + // PPS respoonse + static uint8_t rPPS[3] = { 0xD0 }; switch (tagType) { case 1: { // MIFARE Classic 1k @@ -1059,12 +1065,19 @@ bool SimulateIso14443aInit(int tagType, int flags, uint8_t *data, tag_response_i sak = 0x18; } break; - case 9 : { // FM11RF005SH (Shanghai Metro) + case 9: { // FM11RF005SH (Shanghai Metro) rATQA[0] = 0x03; rATQA[1] = 0x00; sak = 0x0A; } break; + case 10: { // JCOP31/41 Rothult + rATQA[0] = 0x42; + rATQA[1] = 0x00; + sak = 0x00; + } + break; + default: { if (DBGLEVEL >= DBG_ERROR) Dbprintf("Error: unknown tagtype (%d)", tagType); return false; @@ -1115,13 +1128,20 @@ bool SimulateIso14443aInit(int tagType, int flags, uint8_t *data, tag_response_i return false; } - // Calculate the BitCountCheck (BCC) for the first 4 bytes of the UID. + // Calculate BCC for the first 4 bytes of the UID. rUIDc1[4] = rUIDc1[0] ^ rUIDc1[1] ^ rUIDc1[2] ^ rUIDc1[3]; - rSAKc1[0] = sak; - AddCrc14A(rSAKc1, sizeof(rSAKc1) - 2); + + if (tagType == 10) { + rSAKc1[0] = 0x04; + rSAKc2[0] = 0x20; + } else { + rSAKc1[0] = sak; + rSAKc2[0] = sak & 0xFB; + } - rSAKc2[0] = sak & 0xFB; + // crc + AddCrc14A(rSAKc1, sizeof(rSAKc1) - 2); AddCrc14A(rSAKc2, sizeof(rSAKc2) - 2); // Format byte = 0x58: FSCI=0x08 (FSC=256), TA(1) and TC(1) present, @@ -1130,22 +1150,26 @@ bool SimulateIso14443aInit(int tagType, int flags, uint8_t *data, tag_response_i // TC(1) = 0x02: CID supported, NAD not supported AddCrc14A(rRATS, sizeof(rRATS) - 2); -#define TAG_RESPONSE_COUNT 8 + AddCrc14A(rPPS, sizeof(rPPS) - 2); + +#define TAG_RESPONSE_COUNT 9 static tag_response_info_t responses_init[TAG_RESPONSE_COUNT] = { - { .response = rATQA, .response_n = sizeof(rATQA) }, // Answer to request - respond with card type - { .response = rUIDc1, .response_n = sizeof(rUIDc1) }, // Anticollision cascade1 - respond with uid - { .response = rUIDc2, .response_n = sizeof(rUIDc2) }, // Anticollision cascade2 - respond with 2nd half of uid if asked - { .response = rSAKc1, .response_n = sizeof(rSAKc1) }, // Acknowledge select - cascade 1 - { .response = rSAKc2, .response_n = sizeof(rSAKc2) }, // Acknowledge select - cascade 2 - { .response = rRATS, .response_n = sizeof(rRATS) }, // dummy ATS (pseudo-ATR), answer to RATS - { .response = rVERSION, .response_n = sizeof(rVERSION) }, // EV1/NTAG GET_VERSION response - { .response = rSIGN, .response_n = sizeof(rSIGN) } // EV1/NTAG READ_SIG response + { .response = rATQA, .response_n = sizeof(rATQA) }, // Answer to request - respond with card type + { .response = rUIDc1, .response_n = sizeof(rUIDc1) }, // Anticollision cascade1 - respond with uid + { .response = rUIDc2, .response_n = sizeof(rUIDc2) }, // Anticollision cascade2 - respond with 2nd half of uid if asked + { .response = rSAKc1, .response_n = sizeof(rSAKc1) }, // Acknowledge select - cascade 1 + { .response = rSAKc2, .response_n = sizeof(rSAKc2) }, // Acknowledge select - cascade 2 + { .response = rRATS, .response_n = sizeof(rRATS) }, // dummy ATS (pseudo-ATR), answer to RATS + { .response = rVERSION, .response_n = sizeof(rVERSION) }, // EV1/NTAG GET_VERSION response + { .response = rSIGN, .response_n = sizeof(rSIGN) }, // EV1/NTAG READ_SIG response + { .response = rPPS, .response_n = sizeof(rPPS) } // PPS response }; - // "precompile" responses. There are 8 predefined responses with a total of 68 bytes data to transmit. + // "precompile" responses. There are 9 predefined responses with a total of 72 bytes data to transmit. // Coded responses need one byte per bit to transfer (data, parity, start, stop, correction) - // 68 * 8 data bits, 68 * 1 parity bits, 8 start bits, 8 stop bits, 8 correction bits -- 636 bytes buffer -#define ALLOCATED_TAG_MODULATION_BUFFER_SIZE 636 + // 72 * 8 data bits, 72 * 1 parity bits, 9 start bits, 9 stop bits, 9 correction bits -- 677 bytes buffer +#define ALLOCATED_TAG_MODULATION_BUFFER_SIZE 675 +// 576 + 72 + 9 + 9 + 9 == 675 uint8_t *free_buffer = BigBuf_malloc(ALLOCATED_TAG_MODULATION_BUFFER_SIZE); // modulation buffer pointer and current buffer free space size @@ -1173,7 +1197,7 @@ bool SimulateIso14443aInit(int tagType, int flags, uint8_t *data, tag_response_i #define RATS 5 #define VERSION 6 #define SIGNATURE 7 - +#define PPS 8 return true; } @@ -1232,6 +1256,8 @@ void SimulateIso14443aTag(uint8_t tagType, uint8_t flags, uint8_t *data) { // We need to listen to the high-frequency, peak-detected path. iso14443a_setup(FPGA_HF_ISO14443A_TAGSIM_LISTEN); + iso14a_set_timeout(201400); // 106 * 19ms default + int len = 0; // To control where we are in the protocol @@ -1246,8 +1272,8 @@ void SimulateIso14443aTag(uint8_t tagType, uint8_t flags, uint8_t *data) { #define ORDER_SELECT_CL2 30 #define ORDER_EV1_COMP_WRITE 40 #define ORDER_RATS 70 - uint8_t order = ORDER_NONE; + uint8_t order = ORDER_NONE; int retval = PM3_SUCCESS; // Just to allow some checks @@ -1257,28 +1283,27 @@ void SimulateIso14443aTag(uint8_t tagType, uint8_t flags, uint8_t *data) { // compatible write block number uint8_t wrblock = 0; + + bool odd_reply = true; clear_trace(); set_tracing(true); LED_A_ON(); + + // main loop for (;;) { WDT_HIT(); + tag_response_info_t *p_response = NULL; + // Clean receive command buffer - if (!GetIso14443aCommandFromReader(receivedCmd, receivedCmdPar, &len)) { - Dbprintf("Emulator stopped. Trace length: %d ", BigBuf_get_traceLen()); + if (GetIso14443aCommandFromReader(receivedCmd, receivedCmdPar, &len) == false) { + Dbprintf("Emulator stopped. Trace length: %d ", BigBuf_get_traceLen()); retval = PM3_EOPABORTED; break; } - tag_response_info_t *p_response = NULL; - // Okay, look at the command now. - int lastorder = order; - - // // we need to check "ordered" states before, because received data may be same to any command - is wrong!!! - // - if (order == ORDER_EV1_COMP_WRITE && len == 18) { // MIFARE_ULC_COMP_WRITE part 2 // 16 bytes data + 2 bytes crc, only least significant 4 bytes are written @@ -1361,28 +1386,22 @@ void SimulateIso14443aTag(uint8_t tagType, uint8_t flags, uint8_t *data) { order = ORDER_NONE; // back to work state p_response = NULL; - // - // now check commands in received buffer - // - - } else if (receivedCmd[0] == ISO14443A_CMD_REQA && len == 1) { // Received a REQUEST - p_response = &responses[ATQA]; - order = ORDER_REQA; + } else if (receivedCmd[0] == ISO14443A_CMD_REQA && len == 1) { // Received a REQUEST, but in HALTED, skip + odd_reply = !odd_reply; + if (odd_reply) + p_response = &responses[ATQA]; } else if (receivedCmd[0] == ISO14443A_CMD_WUPA && len == 1) { // Received a WAKEUP p_response = &responses[ATQA]; - order = ORDER_WUPA; } else if (receivedCmd[1] == 0x20 && receivedCmd[0] == ISO14443A_CMD_ANTICOLL_OR_SELECT && len == 2) { // Received request for UID (cascade 1) p_response = &responses[UIDC1]; - order = ORDER_SELECT_ALL_CL1; } else if (receivedCmd[1] == 0x20 && receivedCmd[0] == ISO14443A_CMD_ANTICOLL_OR_SELECT_2 && len == 2) { // Received request for UID (cascade 2) p_response = &responses[UIDC2]; - order = ORDER_SELECT_ALL_CL2; } else if (receivedCmd[1] == 0x70 && receivedCmd[0] == ISO14443A_CMD_ANTICOLL_OR_SELECT && len == 9) { // Received a SELECT (cascade 1) p_response = &responses[SAKC1]; - order = ORDER_SELECT_CL1; } else if (receivedCmd[1] == 0x70 && receivedCmd[0] == ISO14443A_CMD_ANTICOLL_OR_SELECT_2 && len == 9) { // Received a SELECT (cascade 2) p_response = &responses[SAKC2]; - order = ORDER_SELECT_CL2; + } else if (receivedCmd[0] == ISO14443A_CMD_PPS) { + p_response = &responses[PPS]; } else if (receivedCmd[0] == ISO14443A_CMD_READBLOCK && len == 4) { // Received a (plain) READ uint8_t block = receivedCmd[1]; // if Ultralight or NTAG (4 byte blocks) @@ -1410,8 +1429,6 @@ void SimulateIso14443aTag(uint8_t tagType, uint8_t flags, uint8_t *data) { emlGetMemBt(emdata, block, 16); AddCrc14A(emdata, 16); EmSendCmd(emdata, sizeof(emdata)); - // EmSendCmd(data+(4*receivedCmd[1]),16); - // Dbprintf("Read request from reader: %x %x",receivedCmd[0],receivedCmd[1]); // We already responded, do not send anything with the EmSendCmd14443aRaw() that is called below p_response = NULL; } @@ -1433,8 +1450,7 @@ void SimulateIso14443aTag(uint8_t tagType, uint8_t flags, uint8_t *data) { p_response = NULL; } else if (receivedCmd[0] == MIFARE_ULC_WRITE && len == 8 && (tagType == 2 || tagType == 7)) { // Received a WRITE // cmd + block + 4 bytes data + 2 bytes crc - bool isCrcCorrect = CheckCrc14A(receivedCmd, len); - if (isCrcCorrect) { + if (CheckCrc14A(receivedCmd, len)) { uint8_t block = receivedCmd[1]; if (block > pages) { // send NACK 0x0 == invalid argument @@ -1452,8 +1468,7 @@ void SimulateIso14443aTag(uint8_t tagType, uint8_t flags, uint8_t *data) { p_response = NULL; } else if (receivedCmd[0] == MIFARE_ULC_COMP_WRITE && len == 4 && (tagType == 2 || tagType == 7)) { // cmd + block + 2 bytes crc - bool isCrcCorrect = CheckCrc14A(receivedCmd, len); - if (isCrcCorrect) { + if (CheckCrc14A(receivedCmd, len)) { wrblock = receivedCmd[1]; if (wrblock > pages) { // send NACK 0x0 == invalid argument @@ -1538,7 +1553,6 @@ void SimulateIso14443aTag(uint8_t tagType, uint8_t flags, uint8_t *data) { p_response = NULL; } else { p_response = &responses[RATS]; - order = ORDER_RATS; } } else if (receivedCmd[0] == MIFARE_ULC_AUTH_1) { // ULC authentication, or Desfire Authentication LogTrace(receivedCmd, Uart.len, Uart.startTime * 16 - DELAY_AIR2ARM_AS_TAG, Uart.endTime * 16 - DELAY_AIR2ARM_AS_TAG, Uart.parity, true); @@ -1566,73 +1580,103 @@ void SimulateIso14443aTag(uint8_t tagType, uint8_t flags, uint8_t *data) { AddCrc14A(cmd, sizeof(cmd) - 2); EmSendCmd(cmd, sizeof(cmd)); p_response = NULL; + } else { - // Check for ISO 14443A-4 compliant commands, look at left nibble - switch (receivedCmd[0]) { - case 0x02: - case 0x03: { // IBlock (command no CID) + + // clear old dynamic responses + dynamic_response_info.response_n = 0; + dynamic_response_info.modulation_n = 0; + + // ST25TA512B IKEA Rothult + if (tagType == 10) { + // we replay 90 00 for all commands but the read bin and we deny the verify cmd. + + if (memcmp("\x02\xa2\xb0\x00\x00\x1d\x51\x69", receivedCmd, 8) == 0) { + dynamic_response_info.response[0] = receivedCmd[0]; + memcpy(dynamic_response_info.response + 1, "\x00\x1b\xd1\x01\x17\x54\x02\x7a\x68\xa2\x34\xcb\xd0\xe2\x03\xc7\x3e\x62\x0b\xe8\xc6\x3c\x85\x2c\xc5\x31\x31\x31\x32\x90\x00", 31); + dynamic_response_info.response_n = 32; + } else if (memcmp("\x02\x00\x20\x00\x01\x00\x6e\xa9", receivedCmd, 8) == 0) { + dynamic_response_info.response[0] = receivedCmd[0]; + dynamic_response_info.response[1] = 0x63; + dynamic_response_info.response[2] = 0x00; + dynamic_response_info.response_n = 3; + } else { dynamic_response_info.response[0] = receivedCmd[0]; dynamic_response_info.response[1] = 0x90; dynamic_response_info.response[2] = 0x00; dynamic_response_info.response_n = 3; } - break; - case 0x0B: - case 0x0A: { // IBlock (command CID) - dynamic_response_info.response[0] = receivedCmd[0]; - dynamic_response_info.response[1] = 0x00; - dynamic_response_info.response[2] = 0x90; - dynamic_response_info.response[3] = 0x00; - dynamic_response_info.response_n = 4; - } - break; + } else { - case 0x1A: - case 0x1B: { // Chaining command - dynamic_response_info.response[0] = 0xaa | ((receivedCmd[0]) & 1); - dynamic_response_info.response_n = 2; - } - break; - - case 0xAA: - case 0xBB: { - dynamic_response_info.response[0] = receivedCmd[0] ^ 0x11; - dynamic_response_info.response_n = 2; - } - break; - - case 0xBA: { // ping / pong - dynamic_response_info.response[0] = 0xAB; - dynamic_response_info.response[1] = 0x00; - dynamic_response_info.response_n = 2; - } - break; - - case 0xCA: - case 0xC2: { // Readers sends deselect command - dynamic_response_info.response[0] = 0xCA; - dynamic_response_info.response[1] = 0x00; - dynamic_response_info.response_n = 2; - } - break; - - default: { - // Never seen this command before - LogTrace(receivedCmd, Uart.len, Uart.startTime * 16 - DELAY_AIR2ARM_AS_TAG, Uart.endTime * 16 - DELAY_AIR2ARM_AS_TAG, Uart.parity, true); - if (DBGLEVEL >= DBG_DEBUG) { - Dbprintf("Received unknown command (len=%d):", len); - Dbhexdump(len, receivedCmd, false); + // Check for ISO 14443A-4 compliant commands, look at left nibble + switch (receivedCmd[0]) { + case 0x02: + case 0x03: { // IBlock (command no CID) + dynamic_response_info.response[0] = receivedCmd[0]; + dynamic_response_info.response[1] = 0x90; + dynamic_response_info.response[2] = 0x00; + dynamic_response_info.response_n = 3; } - // Do not respond - dynamic_response_info.response_n = 0; - order = ORDER_NONE; // back to work state - } - break; - } + break; + case 0x0B: + case 0x0A: { // IBlock (command CID) + dynamic_response_info.response[0] = receivedCmd[0]; + dynamic_response_info.response[1] = 0x00; + dynamic_response_info.response[2] = 0x90; + dynamic_response_info.response[3] = 0x00; + dynamic_response_info.response_n = 4; + } + break; + case 0x1A: + case 0x1B: { // Chaining command + dynamic_response_info.response[0] = 0xaa | ((receivedCmd[0]) & 1); + dynamic_response_info.response_n = 2; + } + break; + + case 0xAA: + case 0xBB: { + dynamic_response_info.response[0] = receivedCmd[0] ^ 0x11; + dynamic_response_info.response_n = 2; + } + break; + + case 0xBA: { // ping / pong + dynamic_response_info.response[0] = 0xAB; + dynamic_response_info.response[1] = 0x00; + dynamic_response_info.response_n = 2; + } + break; + + case 0xCA: + case 0xC2: { // Readers sends deselect command + dynamic_response_info.response[0] = 0xCA; + dynamic_response_info.response[1] = 0x00; + dynamic_response_info.response_n = 2; + } + break; + + default: { + // Never seen this command before + LogTrace(receivedCmd, Uart.len, Uart.startTime * 16 - DELAY_AIR2ARM_AS_TAG, Uart.endTime * 16 - DELAY_AIR2ARM_AS_TAG, Uart.parity, true); + if (DBGLEVEL >= DBG_DEBUG) { + Dbprintf("Received unknown command (len=%d):", len); + Dbhexdump(len, receivedCmd, false); + } + // Do not respond + dynamic_response_info.response_n = 0; + order = ORDER_NONE; // back to work state + } + break; + } + + } if (dynamic_response_info.response_n > 0) { + // Copy the CID from the reader query - dynamic_response_info.response[1] = receivedCmd[1]; + if (tagType != 10) + dynamic_response_info.response[1] = receivedCmd[1]; // Add CRC bytes, always used in ISO 14443A-4 compliant cards AddCrc14A(dynamic_response_info.response, dynamic_response_info.response_n); @@ -1648,16 +1692,15 @@ void SimulateIso14443aTag(uint8_t tagType, uint8_t flags, uint8_t *data) { } // Count number of wakeups received after a halt - if (order == ORDER_WUPA && lastorder == ORDER_HALTED) { happened++; } +// if (order == ORDER_WUPA && lastorder == ORDER_HALTED) { happened++; } // Count number of other messages after a halt - if (order != ORDER_WUPA && lastorder == ORDER_HALTED) { happened2++; } +// if (order != ORDER_WUPA && lastorder == ORDER_HALTED) { happened2++; } cmdsRecvd++; - if (p_response != NULL) { - EmSendPrecompiledCmd(p_response); - } + // Send response + EmSendPrecompiledCmd(p_response); } switch_off(); @@ -1958,7 +2001,7 @@ int EmSendCmd14443aRaw(uint8_t *resp, uint16_t respLen) { volatile uint8_t b; uint16_t i = 0; uint32_t ThisTransferTime; - bool correctionNeeded; + bool correction_needed; // Modulate Manchester FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_ISO14443A | FPGA_HF_ISO14443A_TAGSIM_MOD); @@ -1966,21 +2009,23 @@ int EmSendCmd14443aRaw(uint8_t *resp, uint16_t respLen) { // Include correction bit if necessary if (Uart.bitCount == 7) { // Short tags (7 bits) don't have parity, determine the correct value from MSB - correctionNeeded = Uart.output[0] & 0x40; + correction_needed = Uart.output[0] & 0x40; } else { // The parity bits are left-aligned - correctionNeeded = Uart.parity[(Uart.len - 1) / 8] & (0x80 >> ((Uart.len - 1) & 7)); + correction_needed = Uart.parity[(Uart.len - 1) / 8] & (0x80 >> ((Uart.len - 1) & 7)); } // 1236, so correction bit needed - i = (correctionNeeded) ? 0 : 1; + i = (correction_needed) ? 0 : 1; // clear receiving shift register and holding register while (!(AT91C_BASE_SSC->SSC_SR & AT91C_SSC_RXRDY)); b = AT91C_BASE_SSC->SSC_RHR; (void) b; - while (!(AT91C_BASE_SSC->SSC_SR & AT91C_SSC_RXRDY)); - b = AT91C_BASE_SSC->SSC_RHR; +/* + while (!(AT91C_BASE_SSC->SSC_SR & AT91C_SSC_TXRDY)); + b = AT91C_BASE_SSC->SSC_THR; (void) b; +*/ // wait for the FPGA to signal fdt_indicator == 1 (the FPGA is ready to queue new data in its delay line) for (uint8_t j = 0; j < 5; j++) { // allow timeout - better late than never @@ -2000,22 +2045,24 @@ int EmSendCmd14443aRaw(uint8_t *resp, uint16_t respLen) { FpgaSendQueueDelay = (uint8_t)AT91C_BASE_SSC->SSC_RHR; } +/* if (AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_RXRDY)) { b = (uint16_t)(AT91C_BASE_SSC->SSC_RHR); (void)b; } + */ } // Ensure that the FPGA Delay Queue is empty before we switch to TAGSIM_LISTEN again: uint8_t fpga_queued_bits = FpgaSendQueueDelay >> 3; - for (i = 0; i <= fpga_queued_bits / 8 + 1;) { + for (i = 0; i <= (fpga_queued_bits >> 3) + 1;) { if (AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_TXRDY)) { AT91C_BASE_SSC->SSC_THR = SEC_F; FpgaSendQueueDelay = (uint8_t)AT91C_BASE_SSC->SSC_RHR; i++; } } - LastTimeProxToAirStart = ThisTransferTime + (correctionNeeded ? 8 : 0); + LastTimeProxToAirStart = ThisTransferTime + (correction_needed ? 8 : 0); return 0; } @@ -2069,6 +2116,7 @@ int EmSendCmdEx(uint8_t *resp, uint16_t respLen, bool collision) { } int EmSendPrecompiledCmd(tag_response_info_t *p_response) { + if (p_response == NULL) return 0; int ret = EmSendCmd14443aRaw(p_response->modulation, p_response->modulation_n); // do the tracing for the previous reader request and this tag answer: uint8_t par[MAX_PARITY_SIZE] = {0x00}; diff --git a/client/src/cmdhf14a.c b/client/src/cmdhf14a.c index 4a53ef021..f8fc02f8f 100644 --- a/client/src/cmdhf14a.c +++ b/client/src/cmdhf14a.c @@ -201,6 +201,7 @@ static int usage_hf_14a_sim(void) { PrintAndLogEx(NORMAL, " 7 = AMIIBO (NTAG 215), pack 0x8080"); PrintAndLogEx(NORMAL, " 8 = MIFARE Classic 4k"); PrintAndLogEx(NORMAL, " 9 = FM11RF005SH Shanghai Metro"); + PrintAndLogEx(NORMAL, " 10 = JCOP 31/41 Rothult"); // PrintAndLogEx(NORMAL, " u : 4, 7 or 10 byte UID"); PrintAndLogEx(NORMAL, " u : 4, 7 byte UID"); PrintAndLogEx(NORMAL, " x : (Optional) Performs the 'reader attack', nr/ar attack against a reader"); From 945b9196fe122f8deb51ca32a38502a74e87a251 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Thu, 10 Sep 2020 00:14:08 +0200 Subject: [PATCH 0432/1047] magic_cards_notes --- doc/magic_cards_notes.md | 448 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 448 insertions(+) create mode 100644 doc/magic_cards_notes.md diff --git a/doc/magic_cards_notes.md b/doc/magic_cards_notes.md new file mode 100644 index 000000000..7d515598e --- /dev/null +++ b/doc/magic_cards_notes.md @@ -0,0 +1,448 @@ +This document is based mostly on information posted on http://www.proxmark.org/forum/viewtopic.php?pid=35372#p35372 + +- [MIFARE Classic](#mifare-classic) + * [MIFARE Classic block0](#mifare-classic-block0) + * [MIFARE Classic Gen1A aka UID](#mifare-classic-gen1a-aka-uid) + * [MIFARE Classic Gen1B](#mifare-classic-gen1b) + * [MIFARE Classic Gen2 aka CUID](#mifare-classic-gen2-aka-cuid) + * [MIFARE Classic Gen2, FUID version](#mifare-classic-gen2--fuid-version) + * [MIFARE Classic Gen2, UFUID version](#mifare-classic-gen2--ufuid-version) + * [MIFARE Classic, other versions](#mifare-classic--other-versions) + * [MIFARE Classic Gen3](#mifare-classic-gen3) + * [MIFARE Classic Super](#mifare-classic-super) +- [MIFARE Ultralight](#mifare-ultralight) + * [MIFARE Ultralight blocks 0..2](#mifare-ultralight-blocks-02) + * [MIFARE Ultralight Gen1A](#mifare-ultralight-gen1a) + * [MIFARE Ultralight Gen2](#mifare-ultralight-gen2) + * [MIFARE Ultralight EV1 Gen2](#mifare-ultralight-ev1-gen2) + * [MIFARE Ultralight C Gen1A](#mifare-ultralight-c-gen1a) + * [MIFARE Ultralight C Gen2](#mifare-ultralight-c-gen2) +- [NTAG](#ntag) + * [NTAG213 Gen2](#ntag213-gen2) + * [NTAG21x](#ntag21x) +- [DESFire](#desfire) + * [DESFire "Gen3", 7b UID](#desfire--gen3---7b-uid) + * [DESFire "Gen3", 4b UID](#desfire--gen3---4b-uid) +- [ISO14443B](#iso14443b) + * [ISO14443B magic](#iso14443b-magic) +- [ISO15693](#iso15693) + * [ISO15693 magic](#iso15693-magic) + + +# MIFARE Classic + +Referred as M1, S50 (1k), S70 (4k) + +## MIFARE Classic block0 + +UID 4b: + +``` +11223344440804006263646566676869 +^^^^^^^^ UID + ^^ BCC + ^^ SAK(*) + ^^^^ ATQA + ^^^^^^^^^^^^^^^^ Manufacturer data +(*) some cards have on purpose a different SAK in their anticollision and in block0 +``` + + +Computing BCC on UID 11223344: `hf analyse lcr 11223344` = `44` + +UID 7b: + +**todo** + +## MIFARE Classic Gen1A aka UID + +### Magic commands + +raw commands 40/41/43 + +**TODO** details, differences in global wipe command? + +### Characteristics + +* UID: Only 4b versions +* ATQA: + * all(?) cards play blindly the block0 ATQA bytes +* SAK: + * some cards play blindly the block0 SAK byte + * some cards use a fix "08" in anticollision, no matter the block0 +* BCC: +* ATS: + +### Proxmark3 commands + +``` +hf mf csetuid +hf mf cwipe +hf mf csetblk +hf mf cgetblk +hf mf cgetsc +hf mf cload +hf mf csave +hf mf cview +``` + +When "soft-bricked" (by writing invalid data in block0), these ones may help: + +``` +hf 14a config h +script run remagic +``` + +## MIFARE Classic Gen1B + +Similar to Gen1A, but supports only commands 40/43 + +## MIFARE Classic Gen2 aka CUID + +### Magic commands + +Android compatible + +* issue regular write to block0 + +### Characteristics + +* UID: 4b and 7b versions +* ATQA: +* SAK: +* BCC: +* ATS: + +**todo** + +* some card will die if invalid block0! (or can be recovered with anticol...? "hf 14a config a 1 b 1 ..." then "hf mf wrbl 0 ...") +* some card have always correct anticol no matter block0, e.g. ATS=0948009102DABC1910F005 + +### Proxmark3 commands + +``` +hf mf wrbl 0 A FFFFFFFFFFFF 11223344440804006263646566676869 +``` + +When "soft-bricked" (by writing invalid data in block0), these ones may help: + +``` +hf 14a config h +``` + +e.g. for 4b UID: + +``` +hf 14a config a 1 b 2 2 2 3 2 r 2 +hf mf wrbl 0 A FFFFFFFFFFFF 11223344440804006263646566676869 +hf 14a config a 0 b 0 2 0 3 0 r 0 +``` +## MIFARE Classic Gen2, FUID version + +Same as MIFARE Classic Gen2, but block0 can be written only once. + +Initial UID is AA55C396 + +## MIFARE Classic Gen2, UFUID version + +Same as MIFARE Classic Gen2, but block0 can be locked with special command. + +### Proxmark3 commands + +To lock definitively block0: +``` +hf 14a raw -a -p -b 7 40 +hf 14a raw -p 43 +hf 14a raw -p -c e000 +hf 14a raw -c 85000000000000000000000000000008 +``` + +## MIFARE Classic, other versions + +**todo** ZXUID, EUID, ICUID ? + +Some cards exhibit a specific SAK=28 ?? + +## MIFARE Classic Gen3 + +### Magic commands + +Android compatible + +* issue special APDUs + +``` +cla ins p1 p2 len + 90 F0 CC CC 10 - write block 0 + 90 FB CC CC 07 - write uid separated instead of block 0 + 90 FD 11 11 00 - lock uid permanently +``` + +### Characteristics + +* UID: 4b and 7b versions +* ATQA: +* SAK: +* BCC: +* ATS: + +### Proxmark3 commands + +``` +# change just UID: +hf mf gen3uid +# write block0: +hf mf gen3blk +# lock block0 forever: +hf mf gen3freez +``` +See also +``` +script run mfc_gen3_writer -h +``` + +Equivalent: +``` +# change just UID: +hf 14a raw -s -c -t 2000 90FBCCCC07 11223344556677 +# write block0: +hf 14a raw -s -c -t 2000 90F0CCCC10 041219c3219316984200e32000000000 +# lock block0 forever: +hf 14a raw -s -c 90fd11100 +``` + +## MIFARE Classic Super + +It behaves like Gen2 but records reader auth attempts. + +To change UID: same commands as for MFC Gen2 + +To do reader-only attack: at least two versions exist. + +* https://github.com/nfc-tools/nfc-supercard for card with ATS: 0978009102DABC1910F005 +* https://github.com/netscylla/super-card/blob/master/libnfc-1.7.1/utils/nfc-super.c for ?? + +# MIFARE Ultralight + +## MIFARE Ultralight blocks 0..2 + +``` +SN0 SN1 SN2 BCC0 +SN3 SN4 SN5 SN6 +BCC1 Int LCK0 LCK1 +``` + +UID is made of SN0..SN6 bytes + +Computing BCC0 on UID 04112233445566: `analyse lcr 88041122` = `bf` + +Computing BCC1 on UID 04112233445566: `analyse lcr 33445566` = `44` + +Int is internal, typically 0x48 + +## MIFARE Ultralight Gen1A + +### Characteristics + +#### Magic commands + +**todo** + +#### UID + +Only 7b versions + +#### SAK, ATQA, BCC, ATS + +**TODO** need more tests + +### Proxmark3 commands + +``` +script run ul_uid -h +``` + +When "soft-bricked" (by writing invalid data in block0), these ones may help: + +``` +hf 14a config h +script run remagic -u +``` + +## MIFARE Ultralight Gen2 + +### Characteristics + +#### Magic commands + +**todo** + +#### UID + +Only 7b versions + +#### SAK, ATQA, BCC, ATS + +Some fix their BCC in anticol, some don't, be careful! + +**TODO** need more tests + +### Proxmark3 commands + +``` +hf mfu setuid +``` + +Equivalent: don't use `hf mfu wrbl` as you need to write three blocks in a row, but do, with proper BCCx: + +``` +hf 14a raw -s -c -p a2 00 041122bf +hf 14a raw -c -p a2 01 33445566 +hf 14a raw -c a2 02 44480000 +``` + +When "soft-bricked" (by writing invalid data in block0), these ones may help: + +``` +hf 14a config h +``` + +## MIFARE Ultralight EV1 Gen2 + +Same commands as for MFUL Gen2 + +## MIFARE Ultralight C Gen1A + +Same commands as for MFUL Gen1A + +## MIFARE Ultralight C Gen2 + +Same commands as for MFUL Gen2 + +# NTAG + +## NTAG213 Gen2 + +Same commands as for MFUL Gen2 + +## NTAG21x + +### Characteristics + +Emulates fully NTAG213, 213F, 215, 216, 216F + +Emulates partially UL EV1 48k/128k, NTAG210, NTAG212, NTAGI2C 1K/2K, NTAGI2C 1K/2K PLUS + +### Proxmark3 commands + +``` +script run mfu_magic -h +``` + +# DESFire + +## DESFire "Gen3", 7b UID + +### Magic commands + +Android compatible + +* issue special APDUs + +### Characteristics + +* ATQA: 0344 +* SAK: 20 +* ATS: 0675338102005110 or 06757781028002F0 + +Only mimics DESFire anticollision (but wrong ATS), no further DESFire support + +### Proxmark commands + +UID 04112233445566 +``` +hf 14a raw -s -c 0200ab00000704112233445566 +``` +or equivalently +``` +hf 14a apdu -s 00ab00000704112233445566 +``` + +### pn53x-tamashell commands + +``` +4a0100 +420200ab00000704112233445566 +``` +## DESFire "Gen3", 4b UID + +### Magic commands + +Android compatible + +* issue special APDUs + +### Characteristics + +* ATQA: 0008 ??? This is not DESFire, 0008/20 doesn't match anything +* SAK: 20 +* ATS: 0675338102005110 or 06757781028002F0 + +Only mimics DESFire anticollision (but wrong ATS), no further DESFire support + +### Proxmark commands + +UID 04112233445566 +``` +hf 14a raw -s -c 0200ab00000411223344 +``` +or equivalently +``` +hf 14a apdu -s 00ab00000411223344 +``` + +It accepts longer UID but that doesn't affect BCC/ATQA/SAK + +### pn53x-tamashell commands +``` +4a0100 +420200ab00000411223344 +``` + +### Remarks + +The same effect (with better ATQA!) can be obtained with a MFC Gen1A that uses SAK defined in block0: + +``` +hf mf csetblk 0 1122334444204403A1A2A3A4A5A6A7A8 +hf 14a info +[+] UID: 11 22 33 44 +[+] ATQA: 03 44 +[+] SAK: 20 [1] +[+] Possible types: +[+] MIFARE DESFire MF3ICD40 +``` + +# ISO14443B + +## ISO14443B magic + +No such card is available. + +Some vendor allow to specify an ID (PUPI) when ordering a card. + +# ISO15693 + +## ISO15693 magic + +### Proxmark3 commands + +Always set a UID starting with `E0`. + +``` +hf 15 csetuid E011223344556677 +``` +or (ignore errors): +``` +script run iso15_magic -u E004013344556677 +``` From 014a3a4998a35b083fc769d35fdaaef11522ccaf Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 10 Sep 2020 00:24:56 +0200 Subject: [PATCH 0433/1047] desfire supports 7 and 4 bytes --- armsrc/mifaredesfire.c | 7 ------- 1 file changed, 7 deletions(-) diff --git a/armsrc/mifaredesfire.c b/armsrc/mifaredesfire.c index d578d026b..31b338d39 100644 --- a/armsrc/mifaredesfire.c +++ b/armsrc/mifaredesfire.c @@ -148,13 +148,6 @@ void MifareDesfireGetInformation(void) { return; } - if (card.uidlen != 7) { - if (DBGLEVEL >= DBG_ERROR) Dbprintf("Wrong UID size. Expected 7byte got %d", card.uidlen); - payload.isOK = 2; // 2 == WRONG UID - reply_ng(CMD_HF_DESFIRE_INFO, PM3_ESOFT, (uint8_t *)&payload, sizeof(payload)); - switch_off(); - return; - } // add uid. memcpy(payload.uid, card.uid, sizeof(payload.uid)); From 2514ec740c9d377c1450f54653c806d4b5202e3a Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 10 Sep 2020 00:33:46 +0200 Subject: [PATCH 0434/1047] uid 7 or 4 for desfire --- armsrc/mifaredesfire.c | 4 +++- client/src/cmdhfmfdes.c | 11 ++++++----- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/armsrc/mifaredesfire.c b/armsrc/mifaredesfire.c index 31b338d39..b6ca949c6 100644 --- a/armsrc/mifaredesfire.c +++ b/armsrc/mifaredesfire.c @@ -118,6 +118,7 @@ void MifareDesfireGetInformation(void) { struct p { uint8_t isOK; uint8_t uid[7]; + uint8_t uidlen; uint8_t versionHW[7]; uint8_t versionSW[7]; uint8_t details[14]; @@ -149,7 +150,8 @@ void MifareDesfireGetInformation(void) { } // add uid. - memcpy(payload.uid, card.uid, sizeof(payload.uid)); + memcpy(payload.uid, card.uid, card.uidlen); + payload.uidlen = card.uidlen; LED_A_ON(); uint8_t cmd[] = {0x90, MFDES_GET_VERSION, 0x00, 0x00, 0x00}; diff --git a/client/src/cmdhfmfdes.c b/client/src/cmdhfmfdes.c index a5ecf561b..e48e54958 100644 --- a/client/src/cmdhfmfdes.c +++ b/client/src/cmdhfmfdes.c @@ -1152,7 +1152,7 @@ static int mifare_desfire_change_key(uint8_t key_no, uint8_t *new_key, uint8_t n } // --- GET SIGNATURE -static int desfire_print_signature(uint8_t *uid, uint8_t *signature, size_t signature_len, nxp_cardtype_t card_type) { +static int desfire_print_signature(uint8_t *uid, uint8_t uidlen, uint8_t *signature, size_t signature_len, nxp_cardtype_t card_type) { (void)card_type; if (uid == NULL) { @@ -1185,7 +1185,7 @@ static int desfire_print_signature(uint8_t *uid, uint8_t *signature, size_t sign uint8_t key[PUBLIC_DESFIRE_ECDA_KEYLEN]; param_gethex_to_eol(nxp_desfire_public_keys[i].value, 0, key, PUBLIC_DESFIRE_ECDA_KEYLEN, &dl); - int res = ecdsa_signature_r_s_verify(MBEDTLS_ECP_DP_SECP224R1, key, uid, 7, signature, signature_len, false); + int res = ecdsa_signature_r_s_verify(MBEDTLS_ECP_DP_SECP224R1, key, uid, uidlen, signature, signature_len, false); is_valid = (res == 0); if (is_valid) break; @@ -3228,7 +3228,7 @@ static int CmdHF14ADesInfo(const char *Cmd) { SendCommandNG(CMD_HF_DESFIRE_INFO, NULL, 0); PacketResponseNG resp; - if (!WaitForResponseTimeout(CMD_HF_DESFIRE_INFO, &resp, 1500)) { + if (WaitForResponseTimeout(CMD_HF_DESFIRE_INFO, &resp, 1500) == false) { PrintAndLogEx(WARNING, "Command execute timeout"); DropField(); return PM3_ETIMEOUT; @@ -3237,6 +3237,7 @@ static int CmdHF14ADesInfo(const char *Cmd) { struct p { uint8_t isOK; uint8_t uid[7]; + uint8_t uidlen; uint8_t versionHW[7]; uint8_t versionSW[7]; uint8_t details[14]; @@ -3269,7 +3270,7 @@ static int CmdHF14ADesInfo(const char *Cmd) { PrintAndLogEx(NORMAL, ""); PrintAndLogEx(INFO, "--- " _CYAN_("Tag Information") " ---------------------------"); PrintAndLogEx(INFO, "-------------------------------------------------------------"); - PrintAndLogEx(SUCCESS, " UID: " _GREEN_("%s"), sprint_hex(package->uid, sizeof(package->uid))); + PrintAndLogEx(SUCCESS, " UID: " _GREEN_("%s"), sprint_hex(package->uid, package->uidlen)); PrintAndLogEx(SUCCESS, " Batch number: " _GREEN_("%s"), sprint_hex(package->details + 7, 5)); PrintAndLogEx(SUCCESS, " Production date: week " _GREEN_("%02x") " / " _GREEN_("20%02x"), package->details[12], package->details[13]); PrintAndLogEx(NORMAL, ""); @@ -3319,7 +3320,7 @@ static int CmdHF14ADesInfo(const char *Cmd) { PrintAndLogEx(NORMAL, ""); PrintAndLogEx(INFO, "--- " _CYAN_("Tag Signature")); if (handler_desfire_signature(signature, &signature_len) == PM3_SUCCESS) { - desfire_print_signature(package->uid, signature, signature_len, cardtype); + desfire_print_signature(package->uid, package->uidlen, signature, signature_len, cardtype); } else { PrintAndLogEx(WARNING, "--- Card doesn't support GetSignature cmd"); } From c11c553c28d73f07b58b113347c7ed19df1fdbdd Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Thu, 10 Sep 2020 00:36:13 +0200 Subject: [PATCH 0435/1047] add ref to new notes --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ac155f993..507c1a6cc 100644 --- a/README.md +++ b/README.md @@ -32,7 +32,7 @@ |[Notes on frame format](/doc/new_frame_format.md)|[Notes on tracelog / wireshark](/doc/trace_notes.md)|[Notes on EMV](/doc/emv_notes.md)| |[Notes on external flash](/doc/ext_flash_notes.md)|[Notes on loclass](/doc/loclass_notes.md)|[Notes on Coverity Scan Config & Run](/doc/md/Development/Coverity-Scan-Config-%26-Run.md)| |[Notes on file formats used with Proxmark3](/doc/extensions_notes.md)|[Notes on MFU binary format](/doc/mfu_binary_format_notes.md)|[Notes on FPGA & ARM](/doc/fpga_arm_notes.md)| -|[Developing standalone mode](/armsrc/Standalone/readme.md)|[Wiki about standalone mode](https://github.com/RfidResearchGroup/proxmark3/wiki/Standalone-mode)|| +|[Developing standalone mode](/armsrc/Standalone/readme.md)|[Wiki about standalone mode](https://github.com/RfidResearchGroup/proxmark3/wiki/Standalone-mode)|[Notes on Magic cards](/doc/magic_cards_notes.txt)| |[Notes on Color usage](/doc/colors_notes.md)|[Makefile vs CMake](/doc/md/Development/Makefile-vs-CMake.md)| From cc20c8e90cb6c8ec1346df18afa34eb4db7fe3d9 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Thu, 10 Sep 2020 00:37:48 +0200 Subject: [PATCH 0436/1047] fix typo --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 507c1a6cc..076161cbe 100644 --- a/README.md +++ b/README.md @@ -32,7 +32,7 @@ |[Notes on frame format](/doc/new_frame_format.md)|[Notes on tracelog / wireshark](/doc/trace_notes.md)|[Notes on EMV](/doc/emv_notes.md)| |[Notes on external flash](/doc/ext_flash_notes.md)|[Notes on loclass](/doc/loclass_notes.md)|[Notes on Coverity Scan Config & Run](/doc/md/Development/Coverity-Scan-Config-%26-Run.md)| |[Notes on file formats used with Proxmark3](/doc/extensions_notes.md)|[Notes on MFU binary format](/doc/mfu_binary_format_notes.md)|[Notes on FPGA & ARM](/doc/fpga_arm_notes.md)| -|[Developing standalone mode](/armsrc/Standalone/readme.md)|[Wiki about standalone mode](https://github.com/RfidResearchGroup/proxmark3/wiki/Standalone-mode)|[Notes on Magic cards](/doc/magic_cards_notes.txt)| +|[Developing standalone mode](/armsrc/Standalone/readme.md)|[Wiki about standalone mode](https://github.com/RfidResearchGroup/proxmark3/wiki/Standalone-mode)|[Notes on Magic cards](/doc/magic_cards_notes.md)| |[Notes on Color usage](/doc/colors_notes.md)|[Makefile vs CMake](/doc/md/Development/Makefile-vs-CMake.md)| From b0f962ee4e218b5e7a0f745df5b5cc0e6d8bfa78 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Thu, 10 Sep 2020 01:03:53 +0200 Subject: [PATCH 0437/1047] few renaming in magic cards... --- doc/magic_cards_notes.md | 52 ++++++++++++++++++++-------------------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/doc/magic_cards_notes.md b/doc/magic_cards_notes.md index 7d515598e..1344e40fb 100644 --- a/doc/magic_cards_notes.md +++ b/doc/magic_cards_notes.md @@ -4,25 +4,25 @@ This document is based mostly on information posted on http://www.proxmark.org/f * [MIFARE Classic block0](#mifare-classic-block0) * [MIFARE Classic Gen1A aka UID](#mifare-classic-gen1a-aka-uid) * [MIFARE Classic Gen1B](#mifare-classic-gen1b) - * [MIFARE Classic Gen2 aka CUID](#mifare-classic-gen2-aka-cuid) - * [MIFARE Classic Gen2, FUID version](#mifare-classic-gen2--fuid-version) - * [MIFARE Classic Gen2, UFUID version](#mifare-classic-gen2--ufuid-version) + * [MIFARE Classic DirectWrite aka Gen2 aka CUID](#mifare-classic-directwrite-aka-gen2-aka-cuid) + * [MIFARE Classic DirectWrite, FUID version aka 1-write](#mifare-classic-directwrite--fuid-version-aka-1-write) + * [MIFARE Classic DirectWrite, UFUID version](#mifare-classic-directwrite--ufuid-version) * [MIFARE Classic, other versions](#mifare-classic--other-versions) - * [MIFARE Classic Gen3](#mifare-classic-gen3) + * [MIFARE Classic APDU](#mifare-classic-apdu) * [MIFARE Classic Super](#mifare-classic-super) - [MIFARE Ultralight](#mifare-ultralight) * [MIFARE Ultralight blocks 0..2](#mifare-ultralight-blocks-02) * [MIFARE Ultralight Gen1A](#mifare-ultralight-gen1a) - * [MIFARE Ultralight Gen2](#mifare-ultralight-gen2) - * [MIFARE Ultralight EV1 Gen2](#mifare-ultralight-ev1-gen2) + * [MIFARE Ultralight DirectWrite](#mifare-ultralight-directwrite) + * [MIFARE Ultralight EV1 DirectWrite](#mifare-ultralight-ev1-directwrite) * [MIFARE Ultralight C Gen1A](#mifare-ultralight-c-gen1a) - * [MIFARE Ultralight C Gen2](#mifare-ultralight-c-gen2) + * [MIFARE Ultralight C DirectWrite](#mifare-ultralight-c-directwrite) - [NTAG](#ntag) - * [NTAG213 Gen2](#ntag213-gen2) + * [NTAG213 DirectWrite](#ntag213-directwrite) * [NTAG21x](#ntag21x) - [DESFire](#desfire) - * [DESFire "Gen3", 7b UID](#desfire--gen3---7b-uid) - * [DESFire "Gen3", 4b UID](#desfire--gen3---4b-uid) + * ["DESFire" APDU, 7b UID](#-desfire--apdu--7b-uid) + * ["DESFire" APDU, 4b UID](#-desfire--apdu--4b-uid) - [ISO14443B](#iso14443b) * [ISO14443B magic](#iso14443b-magic) - [ISO15693](#iso15693) @@ -97,7 +97,7 @@ script run remagic Similar to Gen1A, but supports only commands 40/43 -## MIFARE Classic Gen2 aka CUID +## MIFARE Classic DirectWrite aka Gen2 aka CUID ### Magic commands @@ -137,15 +137,15 @@ hf 14a config a 1 b 2 2 2 3 2 r 2 hf mf wrbl 0 A FFFFFFFFFFFF 11223344440804006263646566676869 hf 14a config a 0 b 0 2 0 3 0 r 0 ``` -## MIFARE Classic Gen2, FUID version +## MIFARE Classic DirectWrite, FUID version aka 1-write -Same as MIFARE Classic Gen2, but block0 can be written only once. +Same as MIFARE Classic DirectWrite, but block0 can be written only once. Initial UID is AA55C396 -## MIFARE Classic Gen2, UFUID version +## MIFARE Classic DirectWrite, UFUID version -Same as MIFARE Classic Gen2, but block0 can be locked with special command. +Same as MIFARE Classic DirectWrite, but block0 can be locked with special command. ### Proxmark3 commands @@ -213,9 +213,9 @@ hf 14a raw -s -c 90fd11100 ## MIFARE Classic Super -It behaves like Gen2 but records reader auth attempts. +It behaves like DirectWrite but records reader auth attempts. -To change UID: same commands as for MFC Gen2 +To change UID: same commands as for MFC DirectWrite To do reader-only attack: at least two versions exist. @@ -269,7 +269,7 @@ hf 14a config h script run remagic -u ``` -## MIFARE Ultralight Gen2 +## MIFARE Ultralight DirectWrite ### Characteristics @@ -307,23 +307,23 @@ When "soft-bricked" (by writing invalid data in block0), these ones may help: hf 14a config h ``` -## MIFARE Ultralight EV1 Gen2 +## MIFARE Ultralight EV1 DirectWrite -Same commands as for MFUL Gen2 +Same commands as for MFUL DirectWrite ## MIFARE Ultralight C Gen1A Same commands as for MFUL Gen1A -## MIFARE Ultralight C Gen2 +## MIFARE Ultralight C DirectWrite -Same commands as for MFUL Gen2 +Same commands as for MFUL DirectWrite # NTAG -## NTAG213 Gen2 +## NTAG213 DirectWrite -Same commands as for MFUL Gen2 +Same commands as for MFUL DirectWrite ## NTAG21x @@ -341,7 +341,7 @@ script run mfu_magic -h # DESFire -## DESFire "Gen3", 7b UID +## "DESFire" APDU, 7b UID ### Magic commands @@ -374,7 +374,7 @@ hf 14a apdu -s 00ab00000704112233445566 4a0100 420200ab00000704112233445566 ``` -## DESFire "Gen3", 4b UID +## "DESFire" APDU, 4b UID ### Magic commands From b5810abda250557fddba9c1044b01fc116395bbb Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Thu, 10 Sep 2020 01:06:18 +0200 Subject: [PATCH 0438/1047] few renaming in magic cards... --- doc/magic_cards_notes.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/magic_cards_notes.md b/doc/magic_cards_notes.md index 1344e40fb..4e6cca043 100644 --- a/doc/magic_cards_notes.md +++ b/doc/magic_cards_notes.md @@ -8,7 +8,7 @@ This document is based mostly on information posted on http://www.proxmark.org/f * [MIFARE Classic DirectWrite, FUID version aka 1-write](#mifare-classic-directwrite--fuid-version-aka-1-write) * [MIFARE Classic DirectWrite, UFUID version](#mifare-classic-directwrite--ufuid-version) * [MIFARE Classic, other versions](#mifare-classic--other-versions) - * [MIFARE Classic APDU](#mifare-classic-apdu) + * [MIFARE Classic APDU aka Gen3](#mifare-classic-apdu-aka-gen3) * [MIFARE Classic Super](#mifare-classic-super) - [MIFARE Ultralight](#mifare-ultralight) * [MIFARE Ultralight blocks 0..2](#mifare-ultralight-blocks-02) @@ -163,7 +163,7 @@ hf 14a raw -c 85000000000000000000000000000008 Some cards exhibit a specific SAK=28 ?? -## MIFARE Classic Gen3 +## MIFARE Classic APDU aka Gen3 ### Magic commands From cc2999d03b7c9d281af6f05aa12d77362fe9103b Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Thu, 10 Sep 2020 01:08:35 +0200 Subject: [PATCH 0439/1047] fix links --- doc/magic_cards_notes.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/doc/magic_cards_notes.md b/doc/magic_cards_notes.md index 4e6cca043..18efca59d 100644 --- a/doc/magic_cards_notes.md +++ b/doc/magic_cards_notes.md @@ -5,9 +5,9 @@ This document is based mostly on information posted on http://www.proxmark.org/f * [MIFARE Classic Gen1A aka UID](#mifare-classic-gen1a-aka-uid) * [MIFARE Classic Gen1B](#mifare-classic-gen1b) * [MIFARE Classic DirectWrite aka Gen2 aka CUID](#mifare-classic-directwrite-aka-gen2-aka-cuid) - * [MIFARE Classic DirectWrite, FUID version aka 1-write](#mifare-classic-directwrite--fuid-version-aka-1-write) - * [MIFARE Classic DirectWrite, UFUID version](#mifare-classic-directwrite--ufuid-version) - * [MIFARE Classic, other versions](#mifare-classic--other-versions) + * [MIFARE Classic DirectWrite, FUID version aka 1-write](#mifare-classic-directwrite-fuid-version-aka-1-write) + * [MIFARE Classic DirectWrite, UFUID version](#mifare-classic-directwrite-ufuid-version) + * [MIFARE Classic, other versions](#mifare-classic-other-versions) * [MIFARE Classic APDU aka Gen3](#mifare-classic-apdu-aka-gen3) * [MIFARE Classic Super](#mifare-classic-super) - [MIFARE Ultralight](#mifare-ultralight) @@ -21,8 +21,8 @@ This document is based mostly on information posted on http://www.proxmark.org/f * [NTAG213 DirectWrite](#ntag213-directwrite) * [NTAG21x](#ntag21x) - [DESFire](#desfire) - * ["DESFire" APDU, 7b UID](#-desfire--apdu--7b-uid) - * ["DESFire" APDU, 4b UID](#-desfire--apdu--4b-uid) + * ["DESFire" APDU, 7b UID](#desfire-apdu-7b-uid) + * ["DESFire" APDU, 4b UID](#desfire-apdu-4b-uid) - [ISO14443B](#iso14443b) * [ISO14443B magic](#iso14443b-magic) - [ISO15693](#iso15693) From 9ced99a8533d5606a7ea57ed8e4a5d967d2a7b49 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 10 Sep 2020 01:31:54 +0200 Subject: [PATCH 0440/1047] cident super card --- armsrc/mifarecmd.c | 9 +++++++++ client/src/mifare/mifarehost.c | 3 +++ include/protocols.h | 1 + 3 files changed, 13 insertions(+) diff --git a/armsrc/mifarecmd.c b/armsrc/mifarecmd.c index 6e500bc70..97e4bf42c 100644 --- a/armsrc/mifarecmd.c +++ b/armsrc/mifarecmd.c @@ -2308,6 +2308,15 @@ void MifareCIdent(void) { isGen = MAGIC_GEN_2; goto OUT; } + + // super card ident + uint8_t super[] = {0x0A, 0x00, 0x00, 0xA6, 0xB0, 0x00, 0x10}; + ReaderTransmit(super, sizeof(super), NULL); + res = ReaderReceive(buf, par); + if (res == 22) { + isGen = MAGIC_SUPER; + goto OUT; + } }; OUT: diff --git a/client/src/mifare/mifarehost.c b/client/src/mifare/mifarehost.c index b33872cdc..65c51f177 100644 --- a/client/src/mifare/mifarehost.c +++ b/client/src/mifare/mifarehost.c @@ -1184,6 +1184,9 @@ int detect_classic_magic(void) { case MAGIC_GEN_UNFUSED: PrintAndLogEx(SUCCESS, "Magic capabilities : " _GREEN_("Write Once / FUID")); break; + case MAGIC_SUPER: + PrintAndLogEx(SUCCESS, "Magic capabilities : " _GREEN_("super card")); + break; default: break; } diff --git a/include/protocols.h b/include/protocols.h index 62bb9f276..324d4b2fc 100644 --- a/include/protocols.h +++ b/include/protocols.h @@ -219,6 +219,7 @@ ISO 7816-4 Basic interindustry commands. For command APDU's. #define MAGIC_GEN_1B 2 #define MAGIC_GEN_2 4 #define MAGIC_GEN_UNFUSED 5 +#define MAGIC_SUPER 6 /** 06 00 = INITIATE 0E xx = SELECT ID (xx = Chip-ID) From eb353056dc47f5c6a301d77aa5927b5cbe24ac66 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 10 Sep 2020 01:34:29 +0200 Subject: [PATCH 0441/1047] fix super --- armsrc/mifarecmd.c | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/armsrc/mifarecmd.c b/armsrc/mifarecmd.c index 97e4bf42c..d57bae7cf 100644 --- a/armsrc/mifarecmd.c +++ b/armsrc/mifarecmd.c @@ -2277,6 +2277,16 @@ void MifareCIdent(void) { ReaderTransmit(rats, sizeof(rats), NULL); res = ReaderReceive(buf, par); if (memcmp(buf, "\x09\x78\x00\x91\x02\xDA\xBC\x19\x10\xF0\x05", 11) == 0) { + + // super card ident + uint8_t super[] = {0x0A, 0x00, 0x00, 0xA6, 0xB0, 0x00, 0x10}; + ReaderTransmit(super, sizeof(super), NULL); + res = ReaderReceive(buf, par); + if (res == 22) { + isGen = MAGIC_SUPER; + goto OUT; + } + isGen = MAGIC_GEN_2; goto OUT; } @@ -2308,15 +2318,8 @@ void MifareCIdent(void) { isGen = MAGIC_GEN_2; goto OUT; } - - // super card ident - uint8_t super[] = {0x0A, 0x00, 0x00, 0xA6, 0xB0, 0x00, 0x10}; - ReaderTransmit(super, sizeof(super), NULL); - res = ReaderReceive(buf, par); - if (res == 22) { - isGen = MAGIC_SUPER; - goto OUT; - } + + }; OUT: From 5689546ae0f5e601371efa2b840d87b1447350f2 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 10 Sep 2020 01:40:50 +0200 Subject: [PATCH 0442/1047] fix super --- armsrc/mifarecmd.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/armsrc/mifarecmd.c b/armsrc/mifarecmd.c index d57bae7cf..c1f3299b9 100644 --- a/armsrc/mifarecmd.c +++ b/armsrc/mifarecmd.c @@ -2279,7 +2279,7 @@ void MifareCIdent(void) { if (memcmp(buf, "\x09\x78\x00\x91\x02\xDA\xBC\x19\x10\xF0\x05", 11) == 0) { // super card ident - uint8_t super[] = {0x0A, 0x00, 0x00, 0xA6, 0xB0, 0x00, 0x10}; + uint8_t super[] = {0x0A, 0x00, 0x00, 0xA6, 0xB0, 0x00, 0x10, 0x14, 0x1D}; ReaderTransmit(super, sizeof(super), NULL); res = ReaderReceive(buf, par); if (res == 22) { From 3221fb32a1a137c193af9bd1a3628b53b3c8fedb Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 10 Sep 2020 11:44:32 +0200 Subject: [PATCH 0443/1047] fixes for 36b format --- client/src/cmdlfguard.c | 58 ++++++++++++++++++++--------------------- 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/client/src/cmdlfguard.c b/client/src/cmdlfguard.c index 12d39ac71..6bb566c0d 100644 --- a/client/src/cmdlfguard.c +++ b/client/src/cmdlfguard.c @@ -93,32 +93,35 @@ static int CmdGuardDemod(const char *Cmd) { return PM3_ESOFT; } - //got a good demod of 96 bits - uint8_t ByteStream[8] = {0x00}; + // got a good demod of 96 bits + + uint8_t plain[8] = {0x00}; uint8_t xorKey = 0; size_t startIdx = preambleIndex + 6; //start after 6 bit preamble - uint8_t bits_no_spacer[90]; - //so as to not mess with raw DemodBuffer copy to a new sample array + + // not mess with raw DemodBuffer copy to a new sample array memcpy(bits_no_spacer, DemodBuffer + startIdx, 90); + // remove the 18 (90/5=18) parity bits (down to 72 bits (96-6-18=72)) size_t len = removeParity(bits_no_spacer, 0, 5, 3, 90); //source, startloc, paritylen, ptype, length_to_run if (len != 72) { PrintAndLogEx(DEBUG, "DEBUG: Error - gProxII spacer removal did not produce 72 bits: %zu, start: %zu", len, startIdx); return PM3_ESOFT; } + // get key and then get all 8 bytes of payload decoded xorKey = (uint8_t)bytebits_to_byteLSBF(bits_no_spacer, 8); for (size_t idx = 0; idx < 8; idx++) { - ByteStream[idx] = ((uint8_t)bytebits_to_byteLSBF(bits_no_spacer + 8 + (idx * 8), 8)) ^ xorKey; - PrintAndLogEx(DEBUG, "DEBUG: gProxII byte %zu after xor: %02x", idx, ByteStream[idx]); + plain[idx] = ((uint8_t)bytebits_to_byteLSBF(bits_no_spacer + 8 + (idx * 8), 8)) ^ xorKey; + PrintAndLogEx(DEBUG, "DEBUG: gProxII byte %zu after xor: %02x", idx, plain[idx]); } setDemodBuff(DemodBuffer, 96, preambleIndex); setClockGrid(g_DemodClock, g_DemodStartIdx + (preambleIndex * g_DemodClock)); - //ByteStream contains 8 Bytes (64 bits) of decrypted raw tag data - uint8_t fmtLen = ByteStream[0] >> 2; + //plain contains 8 Bytes (64 bits) of decrypted raw tag data + uint8_t fmtLen = plain[0] >> 2; uint32_t FC = 0; uint32_t Card = 0; //get raw 96 bits to print @@ -128,12 +131,12 @@ static int CmdGuardDemod(const char *Cmd) { bool unknown = false; switch (fmtLen) { case 36: - FC = ((ByteStream[3] & 0x7F) << 7) | (ByteStream[4] >> 1); - Card = ((ByteStream[4] & 1) << 19) | (ByteStream[5] << 11) | (ByteStream[6] << 3) | (ByteStream[7] >> 5); + FC = ((plain[3] & 0x7F) << 7) | (plain[4] >> 1); + Card = ((plain[4] & 1) << 19) | (plain[5] << 11) | (plain[6] << 3) | ((plain[7] & 0xE0) >> 5); break; case 26: - FC = ((ByteStream[3] & 0x7F) << 1) | (ByteStream[4] >> 7); - Card = ((ByteStream[4] & 0x7F) << 9) | (ByteStream[5] << 1) | (ByteStream[6] >> 7); + FC = ((plain[3] & 0x7F) << 1) | (plain[4] >> 7); + Card = ((plain[4] & 0x7F) << 9) | (plain[5] << 1) | (plain[6] >> 7); break; default : unknown = true; @@ -309,14 +312,12 @@ int getGuardBits(uint8_t fmtlen, uint32_t fc, uint32_t cn, uint8_t *guardBits) { break; } case 36: { - // FC = ((ByteStream[3] & 0x7F)<<7) | (ByteStream[4]>>1); - // Card = ((ByteStream[4]&1)<<19) | (ByteStream[5]<<11) | (ByteStream[6]<<3) | (ByteStream[7]>>5); rawbytes[1] = (36 << 2); - // Get 26 wiegand from FacilityCode, CardNumber - uint8_t wiegand[34]; + // Get wiegand from FacilityCode 14bits, CardNumber 20bits + uint8_t wiegand[36]; memset(wiegand, 0x00, sizeof(wiegand)); - num_to_bytebits(fc, 8, wiegand); - num_to_bytebits(cn, 26, wiegand + 8); + num_to_bytebits(fc, 14, wiegand); + num_to_bytebits(cn, 20, wiegand + 14); // add wiegand parity bits (dest, source, len) wiegand_add_parity(pre, wiegand, 34); @@ -351,28 +352,27 @@ int getGuardBits(uint8_t fmtlen, uint32_t fc, uint32_t cn, uint8_t *guardBits) { rawbytes[3] = 0; // add wiegand to rawbytes - for (i = 0; i < 4; ++i) + for (i = 0; i < 5; ++i) rawbytes[i + 4] = bytebits_to_byte(pre + (i * 8), 8); - PrintAndLogEx(DEBUG, " WIE | %s\n", sprint_hex(rawbytes, sizeof(rawbytes))); - - + PrintAndLogEx(DEBUG, " WIE | %s", sprint_hex(rawbytes, sizeof(rawbytes))); + // XOR (only works on wiegand stuff) - for (i = 1; i < 12; ++i) + for (i = 1; i < sizeof(rawbytes); ++i) rawbytes[i] ^= xorKey ; - PrintAndLogEx(DEBUG, " XOR | %s \n", sprint_hex(rawbytes, sizeof(rawbytes))); + PrintAndLogEx(DEBUG, " XOR | %s", sprint_hex(rawbytes, sizeof(rawbytes))); // convert rawbytes to bits in pre - for (i = 0; i < 12; ++i) + for (i = 0; i < sizeof(rawbytes); ++i) num_to_bytebitsLSBF(rawbytes[i], 8, pre + (i * 8)); - PrintAndLogEx(DEBUG, "\n Raw | %s \n", sprint_hex(rawbytes, sizeof(rawbytes))); - PrintAndLogEx(DEBUG, " Raw | %s\n", sprint_bin(pre, 64)); + PrintAndLogEx(DEBUG, " Raw | %s", sprint_hex(rawbytes, sizeof(rawbytes))); + PrintAndLogEx(DEBUG, " Raw | %s", sprint_bin(pre, 96)); // add spacer bit 0 every 4 bits, starting with index 0, - // 12 bytes, 24 nibbles. 24+1 extra bites. 3bytes. ie 9bytes | 1byte xorkey, 8bytes rawdata (64bits, should be enough for a 40bit wiegand) - addParity(pre, guardBits + 6, 64, 5, 3); + // 12 bytes, 24 nibbles. 24+1 extra bites. 3bytes. ie 9bytes | 1byte xorkey, 8bytes rawdata (72bits, should be enough for a 40bit wiegand) + addParity(pre, guardBits + 6, 72, 5, 3); // preamble guardBits[0] = 1; From 3252bb1e31869c9d90d0a28d91b10d51c41f61a9 Mon Sep 17 00:00:00 2001 From: Iceman Date: Thu, 10 Sep 2020 13:52:56 +0200 Subject: [PATCH 0444/1047] Update magic_cards_notes.md --- doc/magic_cards_notes.md | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/magic_cards_notes.md b/doc/magic_cards_notes.md index 18efca59d..43d4ab199 100644 --- a/doc/magic_cards_notes.md +++ b/doc/magic_cards_notes.md @@ -1,3 +1,4 @@ +# Notes on Magic Cards, aka UID changeable This document is based mostly on information posted on http://www.proxmark.org/forum/viewtopic.php?pid=35372#p35372 - [MIFARE Classic](#mifare-classic) From 9db343b1c4bc48cdc69427d409bef1debbf60276 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 10 Sep 2020 14:01:38 +0200 Subject: [PATCH 0445/1047] fix printfs coverity 298929, 298928 --- client/src/cmdlffdx.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/client/src/cmdlffdx.c b/client/src/cmdlffdx.c index 564c4d6b6..2bb3b274c 100644 --- a/client/src/cmdlffdx.c +++ b/client/src/cmdlffdx.c @@ -392,11 +392,11 @@ static int CmdFdxClone(const char *Cmd) { verify_values(&national_code, &country_code, &extended, &is_animal); - PrintAndLogEx(INFO, " Country code %u", country_code); - PrintAndLogEx(INFO, " National code %u", national_code); + PrintAndLogEx(INFO, " Country code %"PRIu32, country_code); + PrintAndLogEx(INFO, " National code %"PRIu64, national_code); PrintAndLogEx(INFO, " Set animal bit %c", (is_animal) ? 'Y':'N'); PrintAndLogEx(INFO, "Set data block bit %c", (has_extended) ? 'Y':'N'); - PrintAndLogEx(INFO, " Extended data 0x%X", extended); + PrintAndLogEx(INFO, " Extended data 0x%"PRIX32, extended); PrintAndLogEx(INFO, " RFU 0"); uint8_t *bits = calloc(128, sizeof(uint8_t)); @@ -472,11 +472,11 @@ static int CmdFdxSim(const char *Cmd) { verify_values(&national_code, &country_code, &extended, &is_animal); - PrintAndLogEx(INFO, " Country code %u", country_code); - PrintAndLogEx(INFO, " National code %u", national_code); + PrintAndLogEx(INFO, " Country code %"PRIu32, country_code); + PrintAndLogEx(INFO, " National code %"PRIu64, national_code); PrintAndLogEx(INFO, " Set animal bit %c", (is_animal) ? 'Y':'N'); PrintAndLogEx(INFO, "Set data block bit %c", (has_extended) ? 'Y':'N'); - PrintAndLogEx(INFO, " Extended data 0x%X", extended); + PrintAndLogEx(INFO, " Extended data 0x%"PRIX32, extended); PrintAndLogEx(INFO, " RFU 0"); PrintAndLogEx(SUCCESS, "Simulating FDX-B animal ID: " _GREEN_("%04u-%"PRIu64), country_code, national_code); From 25c45ef659b8c0a2e45cb0c7214449ce7df333df Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 10 Sep 2020 16:20:29 +0200 Subject: [PATCH 0446/1047] textual --- client/src/cmdhfmf.c | 42 ++++++++-------------------------- client/src/mifare/mifarehost.c | 4 ++-- 2 files changed, 11 insertions(+), 35 deletions(-) diff --git a/client/src/cmdhfmf.c b/client/src/cmdhfmf.c index c42387063..666757c2d 100644 --- a/client/src/cmdhfmf.c +++ b/client/src/cmdhfmf.c @@ -2163,7 +2163,7 @@ static int CmdHF14AMfAutoPWN(const char *Cmd) { } if (mfCheckKeys(FirstBlockOfSector(blockNo), keyType, true, 1, key, &key64) == PM3_SUCCESS) { - PrintAndLogEx(INFO, "target sector:%3u key type: %c -- using valid key [ " _YELLOW_("%s") "] (used for nested / hardnested attack)", + PrintAndLogEx(INFO, "target sector:%3u key type: %c -- using valid key [ " _GREEN_("%s") "] (used for nested / hardnested attack)", blockNo, keyType ? 'B' : 'A', sprint_hex(key, sizeof(key)) @@ -2198,13 +2198,13 @@ static int CmdHF14AMfAutoPWN(const char *Cmd) { know_target_key = true; blockNo = i; keyType = j; - PrintAndLogEx(SUCCESS, "target sector:%3u key type: %c -- found valid key ["_YELLOW_("%s") "] (used for nested / hardnested attack)", + PrintAndLogEx(SUCCESS, "target sector:%3u key type: %c -- found valid key [ " _GREEN_("%s") "] (used for nested / hardnested attack)", i, j ? 'B' : 'A', sprint_hex(key, sizeof(key)) ); } else { - PrintAndLogEx(SUCCESS, "target sector:%3u key type: %c -- found valid key ["_YELLOW_("%s") "]", + PrintAndLogEx(SUCCESS, "target sector:%3u key type: %c -- found valid key [ " _GREEN_("%s") "]", i, j ? 'B' : 'A', sprint_hex(key, sizeof(key)) @@ -2216,10 +2216,6 @@ static int CmdHF14AMfAutoPWN(const char *Cmd) { } } - if (verbose) { - PrintAndLogEx(INFO, "======================= " _YELLOW_("STOP KNOWN KEY ATTACK") " ======================="); - } - if (num_found_keys == sectors_cnt * 2) { goto all_found; } @@ -2310,8 +2306,6 @@ static int CmdHF14AMfAutoPWN(const char *Cmd) { lastChunk = false; } // end strategy } - if (verbose) PrintAndLogEx(INFO, "======================= " _YELLOW_("STOP DICTIONARY ATTACK") " ======================="); - // Analyse the dictionary attack for (int i = 0; i < sectors_cnt; i++) { @@ -2326,13 +2320,13 @@ static int CmdHF14AMfAutoPWN(const char *Cmd) { know_target_key = true; blockNo = i; keyType = j; - PrintAndLogEx(SUCCESS, "target sector:%3u key type: %c -- found valid key [ " _YELLOW_("%s") "] (used for nested / hardnested attack)", + PrintAndLogEx(SUCCESS, "target sector:%3u key type: %c -- found valid key [ " _GREEN_("%s") "] (used for nested / hardnested attack)", i, j ? 'B' : 'A', sprint_hex(tmp_key, sizeof(tmp_key)) ); } else { - PrintAndLogEx(SUCCESS, "target sector:%3u key type: %c -- found valid key [ " _YELLOW_("%s") "]", + PrintAndLogEx(SUCCESS, "target sector:%3u key type: %c -- found valid key [ " _GREEN_("%s") "]", i, j ? 'B' : 'A', sprint_hex(tmp_key, sizeof(tmp_key)) @@ -2352,10 +2346,6 @@ static int CmdHF14AMfAutoPWN(const char *Cmd) { isOK = mfDarkside(FirstBlockOfSector(blockNo), keyType, &key64); - if (verbose) { - PrintAndLogEx(INFO, "======================= " _YELLOW_("STOP DARKSIDE ATTACK") " ======================="); - } - switch (isOK) { case -1 : PrintAndLogEx(WARNING, "\nButton pressed. Aborted."); @@ -2381,7 +2371,7 @@ static int CmdHF14AMfAutoPWN(const char *Cmd) { // Store the keys e_sector[blockNo].Key[keyType] = key64; e_sector[blockNo].foundKey[keyType] = 'S'; - PrintAndLogEx(SUCCESS, "target sector:%3u key type: %c -- found valid key [ " _YELLOW_("%s") "] (used for nested / hardnested attack)", + PrintAndLogEx(SUCCESS, "target sector:%3u key type: %c -- found valid key [ " _GREEN_("%s") "] (used for nested / hardnested attack)", blockNo, keyType ? 'B' : 'A', sprint_hex(key, sizeof(key)) @@ -2421,7 +2411,7 @@ noValidKeyFound: if (mfCheckKeys(FirstBlockOfSector(i), j, true, 1, tmp_key, &key64) == PM3_SUCCESS) { e_sector[i].Key[j] = bytes_to_num(tmp_key, 6); e_sector[i].foundKey[j] = 'R'; - PrintAndLogEx(SUCCESS, "target sector:%3u key type: %c -- found valid key [ " _YELLOW_("%s") "]", + PrintAndLogEx(SUCCESS, "target sector:%3u key type: %c -- found valid key [ " _GREEN_("%s") "]", i, j ? 'B' : 'A', sprint_hex(tmp_key, sizeof(tmp_key)) @@ -2463,7 +2453,7 @@ noValidKeyFound: e_sector[current_sector_i].foundKey[current_key_type_i] = 'A'; e_sector[current_sector_i].Key[current_key_type_i] = key64; num_to_bytes(key64, 6, tmp_key); - PrintAndLogEx(SUCCESS, "target sector:%3u key type: %c -- found valid key [ " _YELLOW_("%s") "]", + PrintAndLogEx(SUCCESS, "target sector:%3u key type: %c -- found valid key [ " _GREEN_("%s") "]", current_sector_i, current_key_type_i ? 'B' : 'A', sprint_hex(tmp_key, sizeof(tmp_key)) @@ -2479,9 +2469,6 @@ noValidKeyFound: } } - if (verbose) { - PrintAndLogEx(INFO, "======================= " _YELLOW_("STOP READ B KEY ATTACK") " ======================="); - } } } @@ -2545,9 +2532,6 @@ tryNested: return PM3_ESOFT; } } - if (verbose) { - PrintAndLogEx(INFO, "======================= " _YELLOW_("STOP NESTED ATTACK") " ======================="); - } } else { tryHardnested: // If the nested attack fails then we try the hardnested attack @@ -2583,10 +2567,6 @@ tryHardnested: // If the nested attack fails then we try the hardnested attack num_to_bytes(foundkey, 6, tmp_key); e_sector[current_sector_i].Key[current_key_type_i] = foundkey; e_sector[current_sector_i].foundKey[current_key_type_i] = 'H'; - - if (verbose) { - PrintAndLogEx(INFO, "======================= " _YELLOW_("STOP HARDNESTED ATTACK") " ======================="); - } } if (has_staticnonce) { @@ -2620,15 +2600,11 @@ tryStaticnested: break; } } - - if (verbose) { - PrintAndLogEx(INFO, "======================= " _YELLOW_("STOP STATIC NESTED ATTACK") " ======================="); - } } // Check if the key was found if (e_sector[current_sector_i].foundKey[current_key_type_i]) { - PrintAndLogEx(SUCCESS, "target sector:%3u key type: %c -- found valid key [" _YELLOW_("%s") "]", + PrintAndLogEx(SUCCESS, "target sector:%3u key type: %c -- found valid key [ " _GREEN_("%s") "]", current_sector_i, current_key_type_i ? 'B' : 'A', sprint_hex(tmp_key, sizeof(tmp_key)) diff --git a/client/src/mifare/mifarehost.c b/client/src/mifare/mifarehost.c index 65c51f177..8a567fb26 100644 --- a/client/src/mifare/mifarehost.c +++ b/client/src/mifare/mifarehost.c @@ -535,7 +535,7 @@ int mfnested(uint8_t blockNo, uint8_t keyType, uint8_t *key, uint8_t trgBlockNo, free(statelists[1].head.slhead); num_to_bytes(key64, 6, resultKey); - PrintAndLogEx(SUCCESS, "\ntarget block:%3u key type: %c -- found valid key [" _YELLOW_("%s") "]", + PrintAndLogEx(SUCCESS, "\ntarget block:%3u key type: %c -- found valid key [ " _GREEN_("%s") "]", package->block, package->keytype ? 'B' : 'A', sprint_hex(resultKey, 6) @@ -714,7 +714,7 @@ int mfStaticNested(uint8_t blockNo, uint8_t keyType, uint8_t *key, uint8_t trgBl num_to_bytes(key64, 6, resultKey); PrintAndLogEx(NORMAL, ""); - PrintAndLogEx(SUCCESS, "target block:%3u key type: %c -- found valid key [" _YELLOW_("%s") "]", + PrintAndLogEx(SUCCESS, "target block:%3u key type: %c -- found valid key [ " _GREEN_("%s") "]", package->block, package->keytype ? 'B' : 'A', sprint_hex(resultKey, 6) From a5026fbdf03b308172bc852a051753177c5420e6 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Thu, 10 Sep 2020 19:24:57 +0200 Subject: [PATCH 0447/1047] magic cards identification --- doc/magic_cards_notes.md | 89 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 83 insertions(+), 6 deletions(-) diff --git a/doc/magic_cards_notes.md b/doc/magic_cards_notes.md index 43d4ab199..e7129b782 100644 --- a/doc/magic_cards_notes.md +++ b/doc/magic_cards_notes.md @@ -57,6 +57,14 @@ UID 7b: ## MIFARE Classic Gen1A aka UID +### Identify + +``` +hf 14a info +... +[+] Magic capabilities : Gen 1a +``` + ### Magic commands raw commands 40/41/43 @@ -98,8 +106,24 @@ script run remagic Similar to Gen1A, but supports only commands 40/43 +### Identify + +``` +hf 14a info +... +[+] Magic capabilities : Gen 1b +``` + ## MIFARE Classic DirectWrite aka Gen2 aka CUID +### Identify + +``` +hf 14a info +... +[+] Magic capabilities : Gen 2 / CUID +``` + ### Magic commands Android compatible @@ -144,10 +168,24 @@ Same as MIFARE Classic DirectWrite, but block0 can be written only once. Initial UID is AA55C396 +### Identify + +Only possible before personalisation. + +``` +hf 14a info +... +[+] Magic capabilities : Write Once / FUID +``` + ## MIFARE Classic DirectWrite, UFUID version Same as MIFARE Classic DirectWrite, but block0 can be locked with special command. +### Identify + +**TODO** + ### Proxmark3 commands To lock definitively block0: @@ -160,12 +198,17 @@ hf 14a raw -c 85000000000000000000000000000008 ## MIFARE Classic, other versions -**todo** ZXUID, EUID, ICUID ? +**TODO** -Some cards exhibit a specific SAK=28 ?? +* ZXUID, EUID, ICUID ? +* Some cards exhibit a specific SAK=28 ?? ## MIFARE Classic APDU aka Gen3 +### Identify + +**TODO** + ### Magic commands Android compatible @@ -220,8 +263,18 @@ To change UID: same commands as for MFC DirectWrite To do reader-only attack: at least two versions exist. -* https://github.com/nfc-tools/nfc-supercard for card with ATS: 0978009102DABC1910F005 -* https://github.com/netscylla/super-card/blob/master/libnfc-1.7.1/utils/nfc-super.c for ?? +* type 1: https://github.com/nfc-tools/nfc-supercard for card with ATS: 0978009102DABC1910F005 +* type 2: https://github.com/netscylla/super-card/blob/master/libnfc-1.7.1/utils/nfc-super.c for ?? + +### Identify + +Only type 1 at the moment: + +``` +hf 14a info +... +[+] Magic capabilities : super card +``` # MIFARE Ultralight @@ -243,11 +296,15 @@ Int is internal, typically 0x48 ## MIFARE Ultralight Gen1A +### Identify + +**TODO** + ### Characteristics #### Magic commands -**todo** +**TOOD** #### UID @@ -272,11 +329,15 @@ script run remagic -u ## MIFARE Ultralight DirectWrite +### Identify + +**TODO** + ### Characteristics #### Magic commands -**todo** +**TODO** #### UID @@ -322,12 +383,20 @@ Same commands as for MFUL DirectWrite # NTAG +### Identify + +**TODO** + ## NTAG213 DirectWrite Same commands as for MFUL DirectWrite ## NTAG21x +### Identify + +**TODO** + ### Characteristics Emulates fully NTAG213, 213F, 215, 216, 216F @@ -344,6 +413,10 @@ script run mfu_magic -h ## "DESFire" APDU, 7b UID +### Identify + +**TODO** + ### Magic commands Android compatible @@ -436,6 +509,10 @@ Some vendor allow to specify an ID (PUPI) when ordering a card. ## ISO15693 magic +### Identify + +**TODO** + ### Proxmark3 commands Always set a UID starting with `E0`. From 866f4b6313af854b892921807744efc927005185 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 10 Sep 2020 20:40:12 +0200 Subject: [PATCH 0448/1047] hf 14a info - ntag21x identification --- armsrc/mifarecmd.c | 14 +++++++++++++- client/src/mifare/mifarehost.c | 3 +++ include/protocols.h | 11 ++++++----- 3 files changed, 22 insertions(+), 6 deletions(-) diff --git a/armsrc/mifarecmd.c b/armsrc/mifarecmd.c index c1f3299b9..cbba1f9c6 100644 --- a/armsrc/mifarecmd.c +++ b/armsrc/mifarecmd.c @@ -2242,6 +2242,7 @@ void MifareCIdent(void) { uint8_t rec[1] = {0x00}; uint8_t recpar[1] = {0x00}; uint8_t rats[4] = { ISO14443A_CMD_RATS, 0x80, 0x31, 0x73 }; + uint8_t rdbl[4] = { ISO14443A_CMD_READBLOCK, 0xF0, 0x8D, 0x5f}; uint8_t *par = BigBuf_malloc(MAX_PARITY_SIZE); uint8_t *buf = BigBuf_malloc(PM3_CMD_DATA_SIZE); uint8_t *uid = BigBuf_malloc(10); @@ -2319,7 +2320,18 @@ void MifareCIdent(void) { goto OUT; } - + // magic ntag test + FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); + SpinDelay(40); + iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN); + res = iso14443a_select_card(uid, NULL, &cuid, true, 0, true); + if (res == 2) { + ReaderTransmit(rdbl, sizeof(rdbl), NULL); + res = ReaderReceive(buf, par); + if (res == 18) { + isGen = MAGIC_NTAG21X; + } + } }; OUT: diff --git a/client/src/mifare/mifarehost.c b/client/src/mifare/mifarehost.c index 8a567fb26..821eaaf85 100644 --- a/client/src/mifare/mifarehost.c +++ b/client/src/mifare/mifarehost.c @@ -1187,6 +1187,9 @@ int detect_classic_magic(void) { case MAGIC_SUPER: PrintAndLogEx(SUCCESS, "Magic capabilities : " _GREEN_("super card")); break; + case MAGIC_NTAG21X: + PrintAndLogEx(SUCCESS, "Magic capabilities : " _GREEN_("NTAG21x")); + break; default: break; } diff --git a/include/protocols.h b/include/protocols.h index 324d4b2fc..e043b6418 100644 --- a/include/protocols.h +++ b/include/protocols.h @@ -215,11 +215,12 @@ ISO 7816-4 Basic interindustry commands. For command APDU's. #define MAGIC_SINGLE (MAGIC_WUPC | MAGIC_HALT | MAGIC_INIT | MAGIC_OFF) //0x1E // by CMD_HF_MIFARE_CIDENT -#define MAGIC_GEN_1A 1 -#define MAGIC_GEN_1B 2 -#define MAGIC_GEN_2 4 -#define MAGIC_GEN_UNFUSED 5 -#define MAGIC_SUPER 6 +#define MAGIC_GEN_1A 1 +#define MAGIC_GEN_1B 2 +#define MAGIC_GEN_2 4 +#define MAGIC_GEN_UNFUSED 5 +#define MAGIC_SUPER 6 +#define MAGIC_NTAG21X 7 /** 06 00 = INITIATE 0E xx = SELECT ID (xx = Chip-ID) From 282860034f28a598912c3e805d4b8ece30bc7917 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Thu, 10 Sep 2020 20:49:18 +0200 Subject: [PATCH 0449/1047] doc --- doc/magic_cards_notes.md | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/doc/magic_cards_notes.md b/doc/magic_cards_notes.md index e7129b782..30fe69bcc 100644 --- a/doc/magic_cards_notes.md +++ b/doc/magic_cards_notes.md @@ -1,6 +1,9 @@ # Notes on Magic Cards, aka UID changeable This document is based mostly on information posted on http://www.proxmark.org/forum/viewtopic.php?pid=35372#p35372 +Useful docs: +* [AN10833 MIFARE Type Identification Procedure](https://www.nxp.com/docs/en/application-note/AN10833.pdf) + - [MIFARE Classic](#mifare-classic) * [MIFARE Classic block0](#mifare-classic-block0) * [MIFARE Classic Gen1A aka UID](#mifare-classic-gen1a-aka-uid) @@ -36,7 +39,7 @@ Referred as M1, S50 (1k), S70 (4k) ## MIFARE Classic block0 -UID 4b: +UID 4b: (actually NUID as there are no more "unique" IDs on 4b) ``` 11223344440804006263646566676869 @@ -53,7 +56,14 @@ Computing BCC on UID 11223344: `hf analyse lcr 11223344` = `44` UID 7b: -**todo** +``` +04112233445566884400c82000000000 +^^ Manufacturer byte +^^^^^^^^^^^^^^ UID + ^^ SAK(*)?? + ^^^^ ATQA?? + ^^^^^^^^^^^^ Manufacturer data +``` ## MIFARE Classic Gen1A aka UID From a5de8aa7146275a92033ad5fa5cd8d7851dbdecb Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 10 Sep 2020 20:49:23 +0200 Subject: [PATCH 0450/1047] mixed messages --- client/src/cmdlf.c | 1 + 1 file changed, 1 insertion(+) diff --git a/client/src/cmdlf.c b/client/src/cmdlf.c index 7bae8618d..165108fb8 100644 --- a/client/src/cmdlf.c +++ b/client/src/cmdlf.c @@ -1200,6 +1200,7 @@ static bool CheckChipType(bool getDeviceData) { PrintAndLogEx(SUCCESS, "Chipset detection: " _GREEN_("T55xx")); PrintAndLogEx(HINT, "Hint: try " _YELLOW_("`lf t55xx`") " commands"); retval = true; + goto out; } // check for em4x50 chips From 35029ea624d336a217aeab33d4e6bdecafb4dcf1 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 10 Sep 2020 21:02:02 +0200 Subject: [PATCH 0451/1047] type --- client/src/wiegand_formats.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/src/wiegand_formats.c b/client/src/wiegand_formats.c index e04fc29f0..2d62d4cdb 100644 --- a/client/src/wiegand_formats.c +++ b/client/src/wiegand_formats.c @@ -591,7 +591,7 @@ static const cardformat_t FormatTable[] = { {"H10306", Pack_H10306, Unpack_H10306, "HID H10306 34-bit", {1, 1, 0, 0, 1}}, // imported from old pack/unpack {"N10002", Pack_N10002, Unpack_N10002, "HID N10002 34-bit", {1, 1, 0, 0, 1}}, // from cardinfo.barkweb.com.au {"C1k35s", Pack_C1k35s, Unpack_C1k35s, "HID Corporate 1000 35-bit standard layout", {1, 1, 0, 0, 1}}, // imported from old pack/unpack - {"C15001", Pack_C15001, Unpack_C15001, "HID KeySpan 36-bit", {1, 1, 0, 1, 1}}, // from Proxmark forums + {"C15001", Pack_C15001, Unpack_C15001, "HID KeyScan 36-bit", {1, 1, 0, 1, 1}}, // from Proxmark forums {"S12906", Pack_S12906, Unpack_S12906, "HID Simplex 36-bit", {1, 1, 1, 0, 1}}, // from cardinfo.barkweb.com.au {"Sie36", Pack_Sie36, Unpack_Sie36, "HID 36-bit Siemens", {1, 1, 0, 0, 1}}, // from cardinfo.barkweb.com.au {"H10320", Pack_H10320, Unpack_H10320, "HID H10320 36-bit BCD", {1, 0, 0, 0, 1}}, // from Proxmark forums From 19a6868daa14bd81a42dbaa54bc78b3180cb2ec7 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Thu, 10 Sep 2020 21:13:05 +0200 Subject: [PATCH 0452/1047] doc --- doc/magic_cards_notes.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/doc/magic_cards_notes.md b/doc/magic_cards_notes.md index 30fe69bcc..5e8c872b4 100644 --- a/doc/magic_cards_notes.md +++ b/doc/magic_cards_notes.md @@ -405,7 +405,11 @@ Same commands as for MFUL DirectWrite ### Identify -**TODO** +``` +hf 14a info +... +[+] Magic capabilities : NTAG21x +``` ### Characteristics From 3bf3e668a55fc1c33637eb8a7a0accebcf8815e3 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Fri, 11 Sep 2020 01:23:30 +0200 Subject: [PATCH 0453/1047] doc gen1a --- doc/magic_cards_notes.md | 100 ++++++++++++++++++++++++++++++++++++--- 1 file changed, 94 insertions(+), 6 deletions(-) diff --git a/doc/magic_cards_notes.md b/doc/magic_cards_notes.md index 5e8c872b4..3dcf5b296 100644 --- a/doc/magic_cards_notes.md +++ b/doc/magic_cards_notes.md @@ -77,20 +77,65 @@ hf 14a info ### Magic commands -raw commands 40/41/43 - -**TODO** details, differences in global wipe command? +* Wipe: `40(7)`, `41` (use 2000ms timeout) +* Read: `40(7)`, `43`, `30xx`+crc +* Write: `40(7)`, `43`, `A0xx`+crc, `xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx`+crc ### Characteristics * UID: Only 4b versions * ATQA: - * all(?) cards play blindly the block0 ATQA bytes + * all cards play blindly the block0 ATQA bytes, beware! * SAK: - * some cards play blindly the block0 SAK byte + * some cards play blindly the block0 SAK byte, beware! * some cards use a fix "08" in anticollision, no matter the block0 + * some cards use a fix "08" in anticollision, unless SAK in block0 has most significant bit "80" set, in which case SAK="88" * BCC: + * all cards play blindly the block0 BCC bytes, beware! * ATS: + * no card with ATS + +#### MIFARE Classic Gen1A flavour 1 + +* SAK: play blindly the block0 SAK byte, beware! +* PRNG: static 01200145 +* Wipe: filled with 0xFF + +#### MIFARE Classic Gen1A flavour 2 + +* SAK: play blindly the block0 SAK byte, beware! +* PRNG: static 01200145 +* Wipe: filled with 0x00 + +#### MIFARE Classic Gen1A flavour 3 + +* SAK: 08 +* PRNG: static 01200145 +* Wipe: filled with 0xFF + +#### MIFARE Classic Gen1A flavour 4 + +* SAK: 08 +* PRNG: weak +* Wipe: timeout, no wipe + +#### MIFARE Classic Gen1A flavour 5 + +* SAK: 08 +* PRNG: weak +* Wipe: reply ok but no wipe performed + +#### MIFARE Classic Gen1A flavour 6 + +* SAK: 08 or 88 if block0_SAK most significant bit is set +* PRNG: weak +* Wipe: timeout, no wipe + +#### MIFARE Classic Gen1A flavour 7 + +* SAK: 08 or 88 if block0_SAK most significant bit is set +* PRNG: weak +* Wipe: filled with 0x00 ### Proxmark3 commands @@ -107,11 +152,37 @@ hf mf cview When "soft-bricked" (by writing invalid data in block0), these ones may help: +``` +hf mf csetblk 0 11223344440804006263646566676869 +``` ``` hf 14a config h +``` +``` script run remagic ``` +To execute commands manually: +``` +hf 14a raw -a -p -b 7 40 +hf 14a raw -p 43 +hf 14a raw -p -c A000 +hf 14a raw -c -t 1000 11223344440804006263646566676869 +``` +wipe: +``` +hf 14a raw -a -p -b 7 40 +hf 14a raw -t 1000 41 +``` + +### libnfc commands + +``` +nfc-mfsetuid +nfc-mfclassic R a u mydump +nfc-mfclassic W a u mydump +``` + ## MIFARE Classic Gen1B Similar to Gen1A, but supports only commands 40/43 @@ -124,6 +195,11 @@ hf 14a info [+] Magic capabilities : Gen 1b ``` +### Magic commands + +* Read: `40(7)`, `30xx` +* Write: `40(7)`, `A0xx`+crc, `xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx`+crc + ## MIFARE Classic DirectWrite aka Gen2 aka CUID ### Identify @@ -379,6 +455,17 @@ When "soft-bricked" (by writing invalid data in block0), these ones may help: hf 14a config h ``` +### libnfc commands + +``` +nfc-mfultralight -h +``` +See `--uid` and `--full` + +### Android + +* MIFARE++ Ultralight + ## MIFARE Ultralight EV1 DirectWrite Same commands as for MFUL DirectWrite @@ -456,9 +543,10 @@ or equivalently hf 14a apdu -s 00ab00000704112233445566 ``` -### pn53x-tamashell commands +### libnfc commands ``` +pn53x-tamashell 4a0100 420200ab00000704112233445566 ``` From 5fc7948dc796a73049420c88687dfa8b79ca447e Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Fri, 11 Sep 2020 01:35:23 +0200 Subject: [PATCH 0454/1047] doc gen1b --- doc/magic_cards_notes.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/magic_cards_notes.md b/doc/magic_cards_notes.md index 3dcf5b296..1fbc0b758 100644 --- a/doc/magic_cards_notes.md +++ b/doc/magic_cards_notes.md @@ -185,7 +185,7 @@ nfc-mfclassic W a u mydump ## MIFARE Classic Gen1B -Similar to Gen1A, but supports only commands 40/43 +Similar to Gen1A, but supports directly read/write after command 40 ### Identify From 68e6df84a4d10ecc3778cb721e341bce5cba0f83 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Fri, 11 Sep 2020 11:02:19 +0200 Subject: [PATCH 0455/1047] t55 output --- client/src/cmdlft55xx.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/src/cmdlft55xx.c b/client/src/cmdlft55xx.c index bc84fc3f8..c3e69238b 100644 --- a/client/src/cmdlft55xx.c +++ b/client/src/cmdlft55xx.c @@ -829,7 +829,7 @@ static int CmdT55xxSetConfig(const char *Cmd) { return printConfiguration(config); } int T55xxReadBlock(uint8_t block, bool page1, bool usepwd, uint8_t override, uint32_t password, uint8_t downlink_mode) { - return T55xxReadBlockEx(block, page1, usepwd, override, password, downlink_mode, false); + return T55xxReadBlockEx(block, page1, usepwd, override, password, downlink_mode, true); } int T55xxReadBlockEx(uint8_t block, bool page1, bool usepwd, uint8_t override, uint32_t password, uint8_t downlink_mode, bool verbose) { From 1b3463dc6ae3c36d15cc768695d2da305b988052 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Fri, 11 Sep 2020 11:43:49 +0200 Subject: [PATCH 0456/1047] magic doc update --- doc/magic_cards_notes.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/doc/magic_cards_notes.md b/doc/magic_cards_notes.md index 1fbc0b758..682b268e6 100644 --- a/doc/magic_cards_notes.md +++ b/doc/magic_cards_notes.md @@ -48,7 +48,7 @@ UID 4b: (actually NUID as there are no more "unique" IDs on 4b) ^^ SAK(*) ^^^^ ATQA ^^^^^^^^^^^^^^^^ Manufacturer data -(*) some cards have on purpose a different SAK in their anticollision and in block0 +(*) some cards have a different SAK in their anticollision and in block0: +0x80 in the block0 (e.g. 08->88, 18->98) ``` @@ -60,9 +60,10 @@ UID 7b: 04112233445566884400c82000000000 ^^ Manufacturer byte ^^^^^^^^^^^^^^ UID - ^^ SAK(*)?? - ^^^^ ATQA?? + ^^ SAK(*) + ^^^^ ATQA ^^^^^^^^^^^^ Manufacturer data +(*) all? cards have a different SAK in their anticollision and in block0: +0x80 in the block0 (e.g. 08->88, 18->98) ``` ## MIFARE Classic Gen1A aka UID From 5896d85ab34afbc120ad52761669c4ffb9bfc8ea Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Fri, 11 Sep 2020 12:00:01 +0200 Subject: [PATCH 0457/1047] fix gen3 doc --- doc/magic_cards_notes.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/doc/magic_cards_notes.md b/doc/magic_cards_notes.md index 682b268e6..0e8707827 100644 --- a/doc/magic_cards_notes.md +++ b/doc/magic_cards_notes.md @@ -304,9 +304,9 @@ Android compatible ``` cla ins p1 p2 len - 90 F0 CC CC 10 - write block 0 - 90 FB CC CC 07 - write uid separated instead of block 0 - 90 FD 11 11 00 - lock uid permanently + 90 F0 CC CC 10 - write block 0 + 90 FB CC CC 07 - write uid separated instead of block 0 + 90 FD 11 11 00 - lock uid permanently ``` ### Characteristics @@ -339,7 +339,7 @@ hf 14a raw -s -c -t 2000 90FBCCCC07 11223344556677 # write block0: hf 14a raw -s -c -t 2000 90F0CCCC10 041219c3219316984200e32000000000 # lock block0 forever: -hf 14a raw -s -c 90fd11100 +hf 14a raw -s -c 90FD111100 ``` ## MIFARE Classic Super From 55e800e4cec55e3fe28354ec7ffef79bbcb5c378 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Fri, 11 Sep 2020 13:36:57 +0200 Subject: [PATCH 0458/1047] text --- armsrc/iso14443a.c | 10 +++++----- armsrc/mifarecmd.c | 2 ++ 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/armsrc/iso14443a.c b/armsrc/iso14443a.c index 792d73400..0b904be33 100644 --- a/armsrc/iso14443a.c +++ b/armsrc/iso14443a.c @@ -134,11 +134,11 @@ static hf14a_config hf14aconfig = { 0, 0, 0, 0, 0 } ; void printHf14aConfig(void) { DbpString(_CYAN_("HF 14a config")); - Dbprintf("[a] Anticol override......%s%s%s", (hf14aconfig.forceanticol == 0) ? _GREEN_("No") " (follow standard)" : "", (hf14aconfig.forceanticol == 1) ? _RED_("Yes: Always do anticol") : "", (hf14aconfig.forceanticol == 2) ? _RED_("Yes: Always skip anticol") : ""); - Dbprintf("[b] BCC override..........%s%s%s", (hf14aconfig.forcebcc == 0) ? _GREEN_("No") " (follow standard)" : "", (hf14aconfig.forcebcc == 1) ? _RED_("Yes: Always do CL2") : "", (hf14aconfig.forcebcc == 2) ? _RED_("Yes: Always use card BCC") : ""); - Dbprintf("[2] CL2 override..........%s%s%s", (hf14aconfig.forcecl2 == 0) ? _GREEN_("No") " (follow standard)" : "", (hf14aconfig.forcecl2 == 1) ? _RED_("Yes: Always do CL2") : "", (hf14aconfig.forcecl2 == 2) ? _RED_("Yes: Always skip CL2") : ""); - Dbprintf("[3] CL3 override..........%s%s%s", (hf14aconfig.forcecl3 == 0) ? _GREEN_("No") " (follow standard)" : "", (hf14aconfig.forcecl3 == 1) ? _RED_("Yes: Always do CL3") : "", (hf14aconfig.forcecl3 == 2) ? _RED_("Yes: Always skip CL3") : ""); - Dbprintf("[r] RATS override.........%s%s%s", (hf14aconfig.forcerats == 0) ? _GREEN_("No") " (follow standard)" : "", (hf14aconfig.forcerats == 1) ? _RED_("Yes: Always do RATS") : "", (hf14aconfig.forcerats == 2) ? _RED_("Yes: Always skip RATS") : ""); + Dbprintf("[a] Anticol override......%i: %s%s%s", hf14aconfig.forceanticol, (hf14aconfig.forceanticol == 0) ? _GREEN_("No") " (follow standard)" : "", (hf14aconfig.forceanticol == 1) ? _RED_("Yes: Always do anticol") : "", (hf14aconfig.forceanticol == 2) ? _RED_("Yes: Always skip anticol") : ""); + Dbprintf("[b] BCC override..........%i: %s%s%s", hf14aconfig.forcebcc, (hf14aconfig.forcebcc == 0) ? _GREEN_("No") " (follow standard)" : "", (hf14aconfig.forcebcc == 1) ? _RED_("Yes: Always do CL2") : "", (hf14aconfig.forcebcc == 2) ? _RED_("Yes: Always use card BCC") : ""); + Dbprintf("[2] CL2 override..........%i: %s%s%s", hf14aconfig.forcecl2, (hf14aconfig.forcecl2 == 0) ? _GREEN_("No") " (follow standard)" : "", (hf14aconfig.forcecl2 == 1) ? _RED_("Yes: Always do CL2") : "", (hf14aconfig.forcecl2 == 2) ? _RED_("Yes: Always skip CL2") : ""); + Dbprintf("[3] CL3 override..........%i: %s%s%s", hf14aconfig.forcecl3, (hf14aconfig.forcecl3 == 0) ? _GREEN_("No") " (follow standard)" : "", (hf14aconfig.forcecl3 == 1) ? _RED_("Yes: Always do CL3") : "", (hf14aconfig.forcecl3 == 2) ? _RED_("Yes: Always skip CL3") : ""); + Dbprintf("[r] RATS override.........%i: %s%s%s", hf14aconfig.forcerats, (hf14aconfig.forcerats == 0) ? _GREEN_("No") " (follow standard)" : "", (hf14aconfig.forcerats == 1) ? _RED_("Yes: Always do RATS") : "", (hf14aconfig.forcerats == 2) ? _RED_("Yes: Always skip RATS") : ""); } /** diff --git a/armsrc/mifarecmd.c b/armsrc/mifarecmd.c index cbba1f9c6..0746921ca 100644 --- a/armsrc/mifarecmd.c +++ b/armsrc/mifarecmd.c @@ -2277,6 +2277,7 @@ void MifareCIdent(void) { ReaderTransmit(rats, sizeof(rats), NULL); res = ReaderReceive(buf, par); + // test for some MFC gen2 if (memcmp(buf, "\x09\x78\x00\x91\x02\xDA\xBC\x19\x10\xF0\x05", 11) == 0) { // super card ident @@ -2291,6 +2292,7 @@ void MifareCIdent(void) { isGen = MAGIC_GEN_2; goto OUT; } + // test for some MFC 7b gen2 if (memcmp(buf, "\x0D\x78\x00\x71\x02\x88\x49\xA1\x30\x20\x15\x06\x08\x56\x3D", 15) == 0) { isGen = MAGIC_GEN_2; } From e488ef306c4bf182032684d9d3b853d5eb82dbe3 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Fri, 11 Sep 2020 14:09:38 +0200 Subject: [PATCH 0459/1047] Fix MFC static nonce detection on some cards and do it before prng det --- armsrc/mifarecmd.c | 3 +++ client/src/cmdhf14a.c | 24 ++++++++++++------------ 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/armsrc/mifarecmd.c b/armsrc/mifarecmd.c index 0746921ca..a5cf56bf3 100644 --- a/armsrc/mifarecmd.c +++ b/armsrc/mifarecmd.c @@ -2383,6 +2383,9 @@ void MifareHasStaticNonce(void) { nt = bytes_to_num(rec, 4); + // some cards with static nonce need to be reset before next query + FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); + LEDsoff(); CHK_TIMEOUT(); } diff --git a/client/src/cmdhf14a.c b/client/src/cmdhf14a.c index f8fc02f8f..4ce99c69a 100644 --- a/client/src/cmdhf14a.c +++ b/client/src/cmdhf14a.c @@ -1956,23 +1956,23 @@ int infoHF14A(bool verbose, bool do_nack_test, bool do_aid_search) { isMagic = detect_classic_magic(); if (isMifareClassic) { - int res = detect_classic_prng(); - if (res == 1) - PrintAndLogEx(SUCCESS, "Prng detection: " _GREEN_("weak")); - else if (res == 0) - PrintAndLogEx(SUCCESS, "Prng detection: " _YELLOW_("hard")); - else - PrintAndLogEx(FAILED, "Prng detection: " _RED_("fail")); - - if (do_nack_test) - detect_classic_nackbug(false); - - res = detect_classic_static_nonce(); + int res = detect_classic_static_nonce(); if (res == 1) PrintAndLogEx(SUCCESS, "Static nonce: " _YELLOW_("yes")); if (res == 2 && verbose) PrintAndLogEx(SUCCESS, "Static nonce: " _RED_("fail")); + if (res != 1) { // not static + res = detect_classic_prng(); + if (res == 1) + PrintAndLogEx(SUCCESS, "Prng detection: " _GREEN_("weak")); + else if (res == 0) + PrintAndLogEx(SUCCESS, "Prng detection: " _YELLOW_("hard")); + else + PrintAndLogEx(FAILED, "Prng detection: " _RED_("fail")); + if (do_nack_test) + detect_classic_nackbug(false); + } } } From 5cb12db5af9b32c6c7ee4d2a2239655f63b45604 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Fri, 11 Sep 2020 14:40:52 +0200 Subject: [PATCH 0460/1047] doc mfc gen2 --- doc/magic_cards_notes.md | 68 +++++++++++++++++++++++++++++++++------- 1 file changed, 57 insertions(+), 11 deletions(-) diff --git a/doc/magic_cards_notes.md b/doc/magic_cards_notes.md index 0e8707827..d8511082a 100644 --- a/doc/magic_cards_notes.md +++ b/doc/magic_cards_notes.md @@ -211,6 +211,8 @@ hf 14a info [+] Magic capabilities : Gen 2 / CUID ``` +Not all Gen2 cards can be identified with `hf 14a info`, only those replying to RATS. + ### Magic commands Android compatible @@ -221,14 +223,56 @@ Android compatible * UID: 4b and 7b versions * ATQA: + * some cards play blindly the block0 ATQA bytes, beware! + * some cards use a fix ATQA in anticollision, no matter the block0. Including all 7b. * SAK: + * some cards play blindly the block0 SAK byte, beware! + * some cards use a fix "08" or "18" in anticollision, no matter the block0. Including all 7b. * BCC: + * some cards play blindly the block0 BCC bytes, beware! + * some cards compute a proper BCC in anticollision. Including all 7b. * ATS: + * some cards don't reply to RATS + * some reply with 0978009102DABC1910F005 -**todo** +#### MIFARE Classic DirectWrite flavour 1 -* some card will die if invalid block0! (or can be recovered with anticol...? "hf 14a config a 1 b 1 ..." then "hf mf wrbl 0 ...") -* some card have always correct anticol no matter block0, e.g. ATS=0948009102DABC1910F005 +* UID 4b +* ATQA: play blindly the block0 ATQA bytes, beware! +* SAK: play blindly the block0 SAK byte, beware! +* BCC: play blindly the block0 BCC bytes, beware! +* ATS: no +* PRNG: weak + +F1 ATQAwarn SAKxx +BCCwarn Pweak + +#### MIFARE Classic DirectWrite flavour 2 + +* UID 4b +* ATQA: fixed +* SAK: fixed +* BCC: computed +* ATS: 0978009102DABC1910F005 +* PRNG: weak + +#### MIFARE Classic DirectWrite flavour 3 + +* UID 4b +* ATQA: play blindly the block0 ATQA bytes, beware! +* SAK: fixed +* BCC: play blindly the block0 BCC bytes, beware! +* ATS: no +* PRNG: weak + +#### MIFARE Classic DirectWrite flavour 4 + +* UID 7b +* ATQA: fixed +* SAK: fixed +* BCC: computed +* ATS: 0978009102DABC1910F005 +* PRNG: static 00000000 ### Proxmark3 commands @@ -305,17 +349,19 @@ Android compatible ``` cla ins p1 p2 len 90 F0 CC CC 10 - write block 0 - 90 FB CC CC 07 - write uid separated instead of block 0 - 90 FD 11 11 00 - lock uid permanently + 90 FB CC CC 07 - change uid (independently of block0 data) + 90 FD 11 11 00 - lock permanently ``` +It seems the length byte gets ignored anyway. + +Note: it seems some cards only accept the "change UID" command. ### Characteristics * UID: 4b and 7b versions -* ATQA: -* SAK: -* BCC: -* ATS: +* ATQA/SAK: fixed +* BCC: auto +* ATS: none ### Proxmark3 commands @@ -324,7 +370,7 @@ cla ins p1 p2 len hf mf gen3uid # write block0: hf mf gen3blk -# lock block0 forever: +# lock (uid/block0?) forever: hf mf gen3freez ``` See also @@ -338,7 +384,7 @@ Equivalent: hf 14a raw -s -c -t 2000 90FBCCCC07 11223344556677 # write block0: hf 14a raw -s -c -t 2000 90F0CCCC10 041219c3219316984200e32000000000 -# lock block0 forever: +# lock (uid/block0?) forever: hf 14a raw -s -c 90FD111100 ``` From bc19a532a9d45ae3ea9154f2f60d7fb08cde0672 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Fri, 11 Sep 2020 15:11:37 +0200 Subject: [PATCH 0461/1047] fix hf 14a raw to allow large timeouts --- client/src/cmdhf14a.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/client/src/cmdhf14a.c b/client/src/cmdhf14a.c index 4ce99c69a..698f1871e 100644 --- a/client/src/cmdhf14a.c +++ b/client/src/cmdhf14a.c @@ -31,7 +31,7 @@ bool APDUInFramingEnable = true; static int CmdHelp(const char *Cmd); -static int waitCmd(uint8_t iSelect); +static int waitCmd(uint8_t iSelect, uint32_t timeout); static const manufactureName manufactureMapping[] = { // ID, "Vendor Country" @@ -1309,17 +1309,17 @@ static int CmdHF14ACmdRaw(const char *Cmd) { if (reply) { int res = 0; if (active_select) - res = waitCmd(1); + res = waitCmd(1, timeout); if (!res && datalen > 0) - waitCmd(0); + waitCmd(0, timeout); } return 0; } -static int waitCmd(uint8_t iSelect) { +static int waitCmd(uint8_t iSelect, uint32_t timeout) { PacketResponseNG resp; - if (WaitForResponseTimeout(CMD_ACK, &resp, 1500)) { + if (WaitForResponseTimeout(CMD_ACK, &resp, timeout + 1500)) { uint16_t len = (resp.oldarg[0] & 0xFFFF); if (iSelect) { len = (resp.oldarg[1] & 0xFFFF); From 5b695153b61a68627840f53cc810611d3f59210d Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Fri, 11 Sep 2020 16:15:58 +0200 Subject: [PATCH 0462/1047] improved staticnonce tristate processing --- armsrc/mifarecmd.c | 31 +++++++++++++++++++------------ client/src/cmdhf14a.c | 13 +++++++++---- client/src/mifare/mifarehost.c | 13 ++++--------- include/pm3_cmd.h | 5 +++++ 4 files changed, 37 insertions(+), 25 deletions(-) diff --git a/armsrc/mifarecmd.c b/armsrc/mifarecmd.c index a5cf56bf3..d33feeff2 100644 --- a/armsrc/mifarecmd.c +++ b/armsrc/mifarecmd.c @@ -2348,29 +2348,29 @@ OUT: void MifareHasStaticNonce(void) { // variables - int retval = PM3_SUCCESS, len; - - uint32_t nt = 0 ; - uint8_t rec[1] = {0x00}; - uint8_t recpar[1] = {0x00}; + int retval = PM3_SUCCESS; + uint32_t nt = 0; uint8_t *uid = BigBuf_malloc(10); - uint8_t data[1] = {0x00}; - + uint8_t data[1] = { NONCE_FAIL }; struct Crypto1State mpcs = {0, 0}; struct Crypto1State *pcs; pcs = &mpcs; - iso14a_card_select_t card_info; - + iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN); - for (int i = 0; i < 3; i++) { + uint8_t counter = 0; + for (uint8_t i = 0; i < 3; i++) { + + iso14a_card_select_t card_info; if (!iso14443a_select_card(uid, &card_info, NULL, true, 0, true)) { retval = PM3_ESOFT; goto OUT; } + uint8_t rec[1] = {0x00}; + uint8_t recpar[1] = {0x00}; // Transmit MIFARE_CLASSIC_AUTH 0x60, block 0 - len = mifare_sendcmd_short(pcs, false, MIFARE_AUTH_KEYA, 0, rec, recpar, NULL); + int len = mifare_sendcmd_short(pcs, false, MIFARE_AUTH_KEYA, 0, rec, recpar, NULL); if (len != 4) { retval = PM3_ESOFT; goto OUT; @@ -2378,7 +2378,7 @@ void MifareHasStaticNonce(void) { // Save the tag nonce (nt) if (nt == bytes_to_num(rec, 4)) { - data[0]++; + counter++; } nt = bytes_to_num(rec, 4); @@ -2389,6 +2389,13 @@ void MifareHasStaticNonce(void) { CHK_TIMEOUT(); } + if (counter) { + Dbprintf("%u static nonce %08x", data[0], nt); + data[0] = NONCE_STATIC; + } else { + data[0] = NONCE_NORMAL; + } + OUT: reply_ng(CMD_HF_MIFARE_STATIC_NONCE, retval, data, sizeof(data)); // turns off diff --git a/client/src/cmdhf14a.c b/client/src/cmdhf14a.c index 698f1871e..9170d2fd7 100644 --- a/client/src/cmdhf14a.c +++ b/client/src/cmdhf14a.c @@ -1956,12 +1956,17 @@ int infoHF14A(bool verbose, bool do_nack_test, bool do_aid_search) { isMagic = detect_classic_magic(); if (isMifareClassic) { + int res = detect_classic_static_nonce(); - if (res == 1) + if (res == NONCE_STATIC) PrintAndLogEx(SUCCESS, "Static nonce: " _YELLOW_("yes")); - if (res == 2 && verbose) - PrintAndLogEx(SUCCESS, "Static nonce: " _RED_("fail")); - if (res != 1) { // not static + + if (res == NONCE_FAIL && verbose) + PrintAndLogEx(SUCCESS, "Static nonce: " _RED_("read failed")); + + if (res == NONCE_NORMAL) { + + // not static res = detect_classic_prng(); if (res == 1) PrintAndLogEx(SUCCESS, "Prng detection: " _GREEN_("weak")); diff --git a/client/src/mifare/mifarehost.c b/client/src/mifare/mifarehost.c index 821eaaf85..ed83a6498 100644 --- a/client/src/mifare/mifarehost.c +++ b/client/src/mifare/mifarehost.c @@ -1144,19 +1144,14 @@ int detect_classic_static_nonce(void) { clearCommandBuffer(); SendCommandNG(CMD_HF_MIFARE_STATIC_NONCE, NULL, 0); PacketResponseNG resp; - - if (WaitForResponseTimeout(CMD_HF_MIFARE_STATIC_NONCE, &resp, 500)) { + if (WaitForResponseTimeout(CMD_HF_MIFARE_STATIC_NONCE, &resp, 1000)) { if (resp.status == PM3_ESOFT) - return 2; + return NONCE_FAIL; - if (resp.data.asBytes[0] == 0) - return 0; - - if (resp.data.asBytes[0] != 0) - return 1; + return resp.data.asBytes[0]; } - return 2; + return NONCE_FAIL; } /* try to see if card responses to "chinese magic backdoor" commands. */ diff --git a/include/pm3_cmd.h b/include/pm3_cmd.h index dd11d49d5..78fca9c62 100644 --- a/include/pm3_cmd.h +++ b/include/pm3_cmd.h @@ -710,6 +710,11 @@ typedef struct { #define MODE_EXIT_AFTER_MAC 1 #define MODE_FULLSIM 2 +// Static Nonce detection +#define NONCE_FAIL 0x01 +#define NONCE_NORMAL 0x02 +#define NONCE_STATIC 0x03 + // Dbprintf flags #define FLAG_RAWPRINT 0x00 #define FLAG_LOG 0x01 From c15101e45b71bd831d649e5d45b61d7e79fc07e8 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Fri, 11 Sep 2020 16:27:14 +0200 Subject: [PATCH 0463/1047] add fflush back --- client/src/cmdhfmf.c | 47 ++++++++++++++++++++++++++++---------------- 1 file changed, 30 insertions(+), 17 deletions(-) diff --git a/client/src/cmdhfmf.c b/client/src/cmdhfmf.c index 666757c2d..0637599fc 100644 --- a/client/src/cmdhfmf.c +++ b/client/src/cmdhfmf.c @@ -995,6 +995,8 @@ static int CmdHF14AMfDump(const char *Cmd) { PrintAndLogEx(WARNING, "Could not find file " _YELLOW_("%s"), keyFilename); return PM3_EFILE; } + + PrintAndLogEx(INFO, "Using `" _YELLOW_("%s") "`", keyFilename); // Read keys A from file size_t bytes_read; @@ -1026,6 +1028,7 @@ static int CmdHF14AMfDump(const char *Cmd) { for (sectorNo = 0; sectorNo < numSectors; sectorNo++) { for (tries = 0; tries < MIFARE_SECTOR_RETRY; tries++) { PrintAndLogEx(NORMAL, "." NOLF); + fflush(stdout); payload.blockno = FirstBlockOfSector(sectorNo) + NumBlocksPerSector(sectorNo) - 1; payload.keytype = 0; @@ -1357,7 +1360,7 @@ static int CmdHF14AMfNested(const char *Cmd) { } // check if tag doesn't have static nonce - if (detect_classic_static_nonce() == 1) { + if (detect_classic_static_nonce()) { PrintAndLogEx(WARNING, "Static nonce detected. Quitting..."); PrintAndLogEx(INFO, "\t Try use " _YELLOW_("`hf mf staticnested`")); return PM3_EOPABORTED; @@ -1607,8 +1610,8 @@ static int CmdHF14AMfNestedStatic(const char *Cmd) { } // check if tag have static nonce - if (detect_classic_static_nonce() == 0) { - PrintAndLogEx(WARNING, "None static nonce detected. Quitting..."); + if (detect_classic_static_nonce() == false) { + PrintAndLogEx(WARNING, "Normal nonce detected, or failed read of card. Quitting..."); PrintAndLogEx(INFO, "\t Try use " _YELLOW_("`hf mf nested`")); return PM3_EOPABORTED; } @@ -1921,7 +1924,7 @@ static int CmdHF14AMfNestedHard(const char *Cmd) { if (!know_target_key && nonce_file_read == false) { // check if tag doesn't have static nonce - if (detect_classic_static_nonce() == 1) { + if (detect_classic_static_nonce()) { PrintAndLogEx(WARNING, "Static nonce detected. Quitting..."); PrintAndLogEx(HINT, "\tTry use `" _YELLOW_("hf mf staticnested") "`"); return PM3_EOPABORTED; @@ -2002,7 +2005,7 @@ static int CmdHF14AMfAutoPWN(const char *Cmd) { bool slow = false; bool legacy_mfchk = false; int prng_type = PM3_EUNDEF; - int has_staticnonce = 2; + int has_staticnonce; bool verbose = false; bool has_filename = false; bool errors = false; @@ -2120,17 +2123,20 @@ static int CmdHF14AMfAutoPWN(const char *Cmd) { // read uid to generate a filename for the key file char *fptr = GenerateFilename("hf-mf-", "-key.bin"); - // card prng type (weak=1 / hard=0 / select/card comm error = negative value) - prng_type = detect_classic_prng(); - if (prng_type < 0) { - PrintAndLogEx(FAILED, "\nNo tag detected or other tag communication error"); - free(e_sector); - return prng_type; - } // check if tag doesn't have static nonce has_staticnonce = detect_classic_static_nonce(); + // card prng type (weak=1 / hard=0 / select/card comm error = negative value) + if (has_staticnonce == NONCE_NORMAL) { + prng_type = detect_classic_prng(); + if (prng_type < 0) { + PrintAndLogEx(FAILED, "\nNo tag detected or other tag communication error"); + free(e_sector); + return prng_type; + } + } + // print parameters if (verbose) { PrintAndLogEx(INFO, "======================= " _YELLOW_("SETTINGS") " ======================="); @@ -2140,10 +2146,12 @@ static int CmdHF14AMfAutoPWN(const char *Cmd) { PrintAndLogEx(INFO, " keytype ....... " _YELLOW_("%c"), keyType ? 'B' : 'A'); PrintAndLogEx(INFO, " known key ..... " _YELLOW_("%s"), sprint_hex(key, sizeof(key))); - if (has_staticnonce) - PrintAndLogEx(INFO, " card PRNG ..... " _YELLOW_("%s & STATIC"), prng_type ? "WEAK" : "HARD"); - else + if (has_staticnonce == NONCE_STATIC) + PrintAndLogEx(INFO, " card PRNG ..... " _YELLOW_("STATIC")); + else if (has_staticnonce == NONCE_NORMAL) PrintAndLogEx(INFO, " card PRNG ..... " _YELLOW_("%s"), prng_type ? "WEAK" : "HARD"); + else + PrintAndLogEx(INFO, " card PRNG ..... " _YELLOW_("Could not determine PRNG,") " " _RED_("read failed.")); PrintAndLogEx(INFO, " dictionary .... " _YELLOW_("%s"), strlen(filename) ? filename : "NONE"); PrintAndLogEx(INFO, " legacy mode ... " _YELLOW_("%s"), legacy_mfchk ? "True" : "False"); @@ -2259,6 +2267,7 @@ static int CmdHF14AMfAutoPWN(const char *Cmd) { if (e_sector[i].foundKey[j] == 0) { for (uint32_t k = 0; k < key_cnt; k++) { PrintAndLogEx(NORMAL, "." NOLF); + fflush(stdout); if (mfCheckKeys(FirstBlockOfSector(i), j, true, 1, (keyBlock + (6 * k)), &key64) == PM3_SUCCESS) { e_sector[i].Key[j] = bytes_to_num((keyBlock + (6 * k)), 6); @@ -3159,7 +3168,8 @@ static int CmdHF14AMfChk(const char *Cmd) { for (uint16_t c = 0; c < keycnt; c += max_keys) { PrintAndLogEx(NORMAL, "." NOLF); - + fflush(stdout); + if (kbd_enter_pressed()) { PrintAndLogEx(INFO, "\naborted via keyboard!\n"); goto out; @@ -3737,7 +3747,8 @@ int CmdHF14AMfELoad(const char *Cmd) { return PM3_ESOFT; } PrintAndLogEx(NORMAL, "." NOLF); - + fflush(stdout); + blockNum++; counter += blockWidth; datalen -= blockWidth; @@ -4162,6 +4173,7 @@ static int CmdHF14AMfCLoad(const char *Cmd) { return PM3_ESOFT; } PrintAndLogEx(NORMAL, "." NOLF); + fflush(stdout); } PrintAndLogEx(NORMAL, "\n"); return PM3_SUCCESS; @@ -4424,6 +4436,7 @@ static int CmdHF14AMfCSave(const char *Cmd) { PrintAndLogEx(WARNING, "Cant set emul block: %d", i); } PrintAndLogEx(NORMAL, "." NOLF); + fflush(stdout); } PrintAndLogEx(NORMAL, "\n"); PrintAndLogEx(SUCCESS, "uploaded %d bytes to emulator memory", bytes); From 674dc38f5ec998442d32d62ff97b0aee4259b2ed Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Fri, 11 Sep 2020 16:36:41 +0200 Subject: [PATCH 0464/1047] doc new mfc gen2 --- doc/magic_cards_notes.md | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/doc/magic_cards_notes.md b/doc/magic_cards_notes.md index d8511082a..f77e2a38e 100644 --- a/doc/magic_cards_notes.md +++ b/doc/magic_cards_notes.md @@ -92,7 +92,7 @@ hf 14a info * some cards use a fix "08" in anticollision, no matter the block0 * some cards use a fix "08" in anticollision, unless SAK in block0 has most significant bit "80" set, in which case SAK="88" * BCC: - * all cards play blindly the block0 BCC bytes, beware! + * all cards play blindly the block0 BCC byte, beware! * ATS: * no card with ATS @@ -229,7 +229,7 @@ Android compatible * some cards play blindly the block0 SAK byte, beware! * some cards use a fix "08" or "18" in anticollision, no matter the block0. Including all 7b. * BCC: - * some cards play blindly the block0 BCC bytes, beware! + * some cards play blindly the block0 BCC byte, beware! * some cards compute a proper BCC in anticollision. Including all 7b. * ATS: * some cards don't reply to RATS @@ -240,13 +240,10 @@ Android compatible * UID 4b * ATQA: play blindly the block0 ATQA bytes, beware! * SAK: play blindly the block0 SAK byte, beware! -* BCC: play blindly the block0 BCC bytes, beware! +* BCC: play blindly the block0 BCC byte, beware! * ATS: no * PRNG: weak -F1 ATQAwarn SAKxx -BCCwarn Pweak - #### MIFARE Classic DirectWrite flavour 2 * UID 4b @@ -261,7 +258,7 @@ BCCwarn Pweak * UID 4b * ATQA: play blindly the block0 ATQA bytes, beware! * SAK: fixed -* BCC: play blindly the block0 BCC bytes, beware! +* BCC: play blindly the block0 BCC byte, beware! * ATS: no * PRNG: weak @@ -274,6 +271,15 @@ BCCwarn Pweak * ATS: 0978009102DABC1910F005 * PRNG: static 00000000 +#### MIFARE Classic DirectWrite flavour 5 + +* UID 4b +* ATQA: fixed +* SAK: play blindly the block0 SAK byte, beware! +* BCC: computed +* ATS: no +* PRNG: weak + ### Proxmark3 commands ``` From 28ecc8fea86ceb673820b6bcb7df9125c3e79d13 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Fri, 11 Sep 2020 16:38:12 +0200 Subject: [PATCH 0465/1047] renamed gen3, textual --- client/src/cmdhfmf.c | 51 +++++++++++++++++----------------- client/src/mifare/mifarehost.c | 4 +-- client/src/mifare/mifarehost.h | 4 +-- 3 files changed, 29 insertions(+), 30 deletions(-) diff --git a/client/src/cmdhfmf.c b/client/src/cmdhfmf.c index 0637599fc..7e635b503 100644 --- a/client/src/cmdhfmf.c +++ b/client/src/cmdhfmf.c @@ -512,7 +512,7 @@ static int usage_hf14_gen3uid(void) { PrintAndLogEx(NORMAL, _YELLOW_(" hf mf gen3uid 01020304050607")); return PM3_SUCCESS; } -static int usage_hf14_gen3blk(void) { +static int usage_hf14_gen3block(void) { PrintAndLogEx(NORMAL, "Overwrite full manufacturer block for magic GEN 3 card"); PrintAndLogEx(NORMAL, ""); PrintAndLogEx(NORMAL, "Usage: hf mf gen3blk [h] [block data (up to 32 hex symbols)]"); @@ -531,15 +531,15 @@ static int usage_hf14_gen3blk(void) { PrintAndLogEx(NORMAL, _YELLOW_(" hf mf gen3blk")); return PM3_SUCCESS; } -static int usage_hf14_gen3freez(void) { - PrintAndLogEx(NORMAL, "Lock further UID changes. No more UID changes available after operation completed"); +static int usage_hf14_gen3freeze(void) { + PrintAndLogEx(NORMAL, "Perma lock further UID changes. No more UID changes available after operation completed"); PrintAndLogEx(NORMAL, ""); - PrintAndLogEx(NORMAL, "Usage: hf mf gen3freez [h] "); + PrintAndLogEx(NORMAL, "Usage: hf mf gen3freeze [h] "); PrintAndLogEx(NORMAL, "Options:"); PrintAndLogEx(NORMAL, " h this help"); - PrintAndLogEx(NORMAL, " confirm UID locks operation"); + PrintAndLogEx(NORMAL, " confirm UID locks operation"); PrintAndLogEx(NORMAL, "Examples:"); - PrintAndLogEx(NORMAL, _YELLOW_(" hf mf gen3freez Y")); + PrintAndLogEx(NORMAL, _YELLOW_(" hf mf gen3freeze y")); return PM3_SUCCESS; } @@ -5159,18 +5159,18 @@ static int CmdHf14AGen3UID(const char *Cmd) { return PM3_SUCCESS; } -static int CmdHf14AGen3Blk(const char *Cmd) { +static int CmdHf14AGen3Block(const char *Cmd) { uint8_t block[16] = {0x00}; int blocklen = 0; uint8_t newBlock[16] = {0x00}; char ctmp = tolower(param_getchar(Cmd, 0)); - if (ctmp == 'h') return usage_hf14_gen3blk(); + if (ctmp == 'h') return usage_hf14_gen3block(); if (ctmp != '\0' && param_gethex_to_eol(Cmd, 0, block, sizeof(block), &blocklen)) - return usage_hf14_gen3blk(); + return usage_hf14_gen3block(); - int res = mfGen3Blk(block, blocklen, newBlock); + int res = mfGen3Block(block, blocklen, newBlock); if (res) { PrintAndLogEx(ERR, "Can't change manufacturer block data. Error=%d", res); return PM3_ESOFT; @@ -5180,18 +5180,17 @@ static int CmdHf14AGen3Blk(const char *Cmd) { return PM3_SUCCESS; } -static int CmdHf14AGen3Freez(const char *Cmd) { - char ctmp = param_getchar(Cmd, 0); - if (tolower(ctmp) == 'h') return usage_hf14_gen3freez(); - if (ctmp != 'Y') return usage_hf14_gen3freez(); +static int CmdHf14AGen3Freeze(const char *Cmd) { + char ctmp = tolower(param_getchar(Cmd, 0)); + if (ctmp == 'h') return usage_hf14_gen3freeze(); + if (ctmp != 'y') return usage_hf14_gen3freeze(); - int res = mfGen3Freez(); + int res = mfGen3Freeze(); if (res) { PrintAndLogEx(ERR, "Can't lock UID changes. Error=%d", res); return PM3_ESOFT; } - - PrintAndLogEx(SUCCESS, "Gen 3 UID locked"); + PrintAndLogEx(SUCCESS, "MFC Gen3 UID permalocked"); return PM3_SUCCESS; } @@ -5232,18 +5231,18 @@ static command_t CommandTable[] = { {"ecfill", CmdHF14AMfECFill, IfPm3Iso14443a, "Fill simulator memory with help of keys from simulator"}, {"ekeyprn", CmdHF14AMfEKeyPrn, IfPm3Iso14443a, "Print keys from simulator memory"}, {"-----------", CmdHelp, IfPm3Iso14443a, "----------------------- " _CYAN_("magic") " -----------------------"}, - {"csetuid", CmdHF14AMfCSetUID, IfPm3Iso14443a, "Set UID (magic chinese card)"}, + {"csetuid", CmdHF14AMfCSetUID, IfPm3Iso14443a, "Set UID"}, {"cwipe", CmdHF14AMfCWipe, IfPm3Iso14443a, "Wipe card to default UID/Sectors/Keys"}, - {"csetblk", CmdHF14AMfCSetBlk, IfPm3Iso14443a, "Write block (magic chinese card)"}, - {"cgetblk", CmdHF14AMfCGetBlk, IfPm3Iso14443a, "Read block (magic chinese card)"}, - {"cgetsc", CmdHF14AMfCGetSc, IfPm3Iso14443a, "Read sector (magic chinese card)"}, - {"cload", CmdHF14AMfCLoad, IfPm3Iso14443a, "Load dump (magic chinese card)"}, - {"csave", CmdHF14AMfCSave, IfPm3Iso14443a, "Save dump from magic chinese card into file or emulator"}, + {"csetblk", CmdHF14AMfCSetBlk, IfPm3Iso14443a, "Write block"}, + {"cgetblk", CmdHF14AMfCGetBlk, IfPm3Iso14443a, "Read block"}, + {"cgetsc", CmdHF14AMfCGetSc, IfPm3Iso14443a, "Read sector"}, + {"cload", CmdHF14AMfCLoad, IfPm3Iso14443a, "Load dump"}, + {"csave", CmdHF14AMfCSave, IfPm3Iso14443a, "Save dump from card into file or emulator"}, {"cview", CmdHF14AMfCView, IfPm3Iso14443a, "view card"}, {"-----------", CmdHelp, IfPm3Iso14443a, "----------------------- " _CYAN_("magic gen3") " -----------------------"}, - {"gen3uid", CmdHf14AGen3UID, IfPm3Iso14443a, "Set UID without manufacturer block (magic gen3 card)"}, - {"gen3blk", CmdHf14AGen3Blk, IfPm3Iso14443a, "Overwrite full manufacturer block (magic gen 3 card)"}, - {"gen3freez", CmdHf14AGen3Freez, IfPm3Iso14443a, "Lock further UID changes (magic gen 3 card)"}, + {"gen3uid", CmdHf14AGen3UID, IfPm3Iso14443a, "Set UID without manufacturer block"}, + {"gen3blk", CmdHf14AGen3Block, IfPm3Iso14443a, "Overwrite full manufacturer block"}, + {"gen3freeze", CmdHf14AGen3Freeze, IfPm3Iso14443a, "Perma lock further UID changes"}, {"-----------", CmdHelp, IfPm3Iso14443a, "----------------------- " _CYAN_("i") " -----------------------"}, {"ice", CmdHF14AMfice, IfPm3Iso14443a, "collect MIFARE Classic nonces to file"}, diff --git a/client/src/mifare/mifarehost.c b/client/src/mifare/mifarehost.c index ed83a6498..7a14c3100 100644 --- a/client/src/mifare/mifarehost.c +++ b/client/src/mifare/mifarehost.c @@ -959,7 +959,7 @@ int mfGen3UID(uint8_t *uid, uint8_t uidlen, uint8_t *oldUid) { } } -int mfGen3Blk(uint8_t *block, int blockLen, uint8_t *newBlock) { +int mfGen3Block(uint8_t *block, int blockLen, uint8_t *newBlock) { clearCommandBuffer(); SendCommandMIX(CMD_HF_MIFARE_GEN3BLK, blockLen, 0, 0, block, 16); PacketResponseNG resp; @@ -974,7 +974,7 @@ int mfGen3Blk(uint8_t *block, int blockLen, uint8_t *newBlock) { } } -int mfGen3Freez(void) { +int mfGen3Freeze(void) { clearCommandBuffer(); SendCommandNG(CMD_HF_MIFARE_GEN3FREEZ, NULL, 0); PacketResponseNG resp; diff --git a/client/src/mifare/mifarehost.h b/client/src/mifare/mifarehost.h index 4864d9357..f6a840550 100644 --- a/client/src/mifare/mifarehost.h +++ b/client/src/mifare/mifarehost.h @@ -81,8 +81,8 @@ int mfCSetBlock(uint8_t blockNo, uint8_t *data, uint8_t *uid, uint8_t params); int mfCGetBlock(uint8_t blockNo, uint8_t *data, uint8_t params); int mfGen3UID(uint8_t *uid, uint8_t uidlen, uint8_t *oldUid); -int mfGen3Blk(uint8_t *block, int blockLen, uint8_t *newBlock); -int mfGen3Freez(void); +int mfGen3Block(uint8_t *block, int blockLen, uint8_t *newBlock); +int mfGen3Freeze(void); int tryDecryptWord(uint32_t nt, uint32_t ar_enc, uint32_t at_enc, uint8_t *data, int len); From cc30f4ed9fa1b6e172b82cf346b4541b81252075 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Fri, 11 Sep 2020 16:46:13 +0200 Subject: [PATCH 0466/1047] adapt doc --- doc/magic_cards_notes.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/magic_cards_notes.md b/doc/magic_cards_notes.md index f77e2a38e..4bc67e273 100644 --- a/doc/magic_cards_notes.md +++ b/doc/magic_cards_notes.md @@ -377,7 +377,7 @@ hf mf gen3uid # write block0: hf mf gen3blk # lock (uid/block0?) forever: -hf mf gen3freez +hf mf gen3freeze ``` See also ``` From ecbcba18dd3db382d85f12b4f6a4c4181f695d2f Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Fri, 11 Sep 2020 18:17:58 +0200 Subject: [PATCH 0467/1047] identify gen3 --- armsrc/mifarecmd.c | 14 ++++++++++++++ client/src/mifare/mifarehost.c | 5 ++++- doc/magic_cards_notes.md | 8 +++++++- include/protocols.h | 1 + 4 files changed, 26 insertions(+), 2 deletions(-) diff --git a/armsrc/mifarecmd.c b/armsrc/mifarecmd.c index d33feeff2..9ee47f19f 100644 --- a/armsrc/mifarecmd.c +++ b/armsrc/mifarecmd.c @@ -2243,6 +2243,7 @@ void MifareCIdent(void) { uint8_t recpar[1] = {0x00}; uint8_t rats[4] = { ISO14443A_CMD_RATS, 0x80, 0x31, 0x73 }; uint8_t rdbl[4] = { ISO14443A_CMD_READBLOCK, 0xF0, 0x8D, 0x5f}; + uint8_t rdbl0[4] = { ISO14443A_CMD_READBLOCK, 0x00, 0x02, 0xa8}; uint8_t *par = BigBuf_malloc(MAX_PARITY_SIZE); uint8_t *buf = BigBuf_malloc(PM3_CMD_DATA_SIZE); uint8_t *uid = BigBuf_malloc(10); @@ -2334,6 +2335,19 @@ void MifareCIdent(void) { isGen = MAGIC_NTAG21X; } } + + // magic MFC Gen3 test + FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); + SpinDelay(40); + iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN); + res = iso14443a_select_card(uid, NULL, &cuid, true, 0, true); + if (res == 2) { + ReaderTransmit(rdbl0, sizeof(rdbl0), NULL); + res = ReaderReceive(buf, par); + if (res == 18) { + isGen = MAGIC_GEN_3; + } + } }; OUT: diff --git a/client/src/mifare/mifarehost.c b/client/src/mifare/mifarehost.c index 7a14c3100..032c9eccf 100644 --- a/client/src/mifare/mifarehost.c +++ b/client/src/mifare/mifarehost.c @@ -1174,7 +1174,10 @@ int detect_classic_magic(void) { PrintAndLogEx(SUCCESS, "Magic capabilities : " _GREEN_("Gen 1b")); break; case MAGIC_GEN_2: - PrintAndLogEx(SUCCESS, "Magic capabilities : " _GREEN_("Gen 2 / CUID")); + PrintAndLogEx(SUCCESS, "Magic capabilities : " _GREEN_("Gen 2 / CUID")); + break; + case MAGIC_GEN_3: + PrintAndLogEx(SUCCESS, "Magic capabilities : " _GREEN_("Gen 3 / APDU")); break; case MAGIC_GEN_UNFUSED: PrintAndLogEx(SUCCESS, "Magic capabilities : " _GREEN_("Write Once / FUID")); diff --git a/doc/magic_cards_notes.md b/doc/magic_cards_notes.md index 4bc67e273..71180d2fd 100644 --- a/doc/magic_cards_notes.md +++ b/doc/magic_cards_notes.md @@ -344,7 +344,11 @@ hf 14a raw -c 85000000000000000000000000000008 ### Identify -**TODO** +``` +hf 14a info +... +[+] Magic capabilities : Gen 3 / APDU +``` ### Magic commands @@ -362,6 +366,8 @@ It seems the length byte gets ignored anyway. Note: it seems some cards only accept the "change UID" command. +It accepts direct read of block0 (and only block0) without prior auth. + ### Characteristics * UID: 4b and 7b versions diff --git a/include/protocols.h b/include/protocols.h index e043b6418..7cd547fef 100644 --- a/include/protocols.h +++ b/include/protocols.h @@ -221,6 +221,7 @@ ISO 7816-4 Basic interindustry commands. For command APDU's. #define MAGIC_GEN_UNFUSED 5 #define MAGIC_SUPER 6 #define MAGIC_NTAG21X 7 +#define MAGIC_GEN_3 8 /** 06 00 = INITIATE 0E xx = SELECT ID (xx = Chip-ID) From 3c9ca8f5bc38bb7c6f34b930473ed0c22734ff05 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Fri, 11 Sep 2020 22:48:42 +0200 Subject: [PATCH 0468/1047] 14a info: identify waveshare --- client/src/cmdhf14a.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/client/src/cmdhf14a.c b/client/src/cmdhf14a.c index 9170d2fd7..c2b5b759b 100644 --- a/client/src/cmdhf14a.c +++ b/client/src/cmdhf14a.c @@ -1664,6 +1664,12 @@ int infoHF14A(bool verbose, bool do_nack_test, bool do_aid_search) { } getTagLabel(card.uid[0], card.uid[1]); break; + case 0x57: // Qualcomm + if (memcmp(card.uid, "WSDZ10m", 7) == 0) { + isMifareClassic = false; + printTag("Waveshare NFC-Powered e-Paper"); + } + break; default: getTagLabel(card.uid[0], card.uid[1]); switch (card.sak) { From 812d9cc46a68add6641c06ffacf234981d677a9a Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Sat, 12 Sep 2020 00:31:17 +0200 Subject: [PATCH 0469/1047] style --- armsrc/iso14443a.c | 46 ++++++++++++++++++++--------------------- armsrc/mifarecmd.c | 6 +++--- client/src/cmdhfmf.c | 8 +++---- client/src/cmdlffdx.c | 26 +++++++++++------------ client/src/cmdlfguard.c | 2 +- 5 files changed, 44 insertions(+), 44 deletions(-) diff --git a/armsrc/iso14443a.c b/armsrc/iso14443a.c index 0b904be33..d7de0b554 100644 --- a/armsrc/iso14443a.c +++ b/armsrc/iso14443a.c @@ -1077,7 +1077,7 @@ bool SimulateIso14443aInit(int tagType, int flags, uint8_t *data, tag_response_i sak = 0x00; } break; - + default: { if (DBGLEVEL >= DBG_ERROR) Dbprintf("Error: unknown tagtype (%d)", tagType); return false; @@ -1131,16 +1131,16 @@ bool SimulateIso14443aInit(int tagType, int flags, uint8_t *data, tag_response_i // Calculate BCC for the first 4 bytes of the UID. rUIDc1[4] = rUIDc1[0] ^ rUIDc1[1] ^ rUIDc1[2] ^ rUIDc1[3]; - + if (tagType == 10) { rSAKc1[0] = 0x04; rSAKc2[0] = 0x20; - } else { + } else { rSAKc1[0] = sak; rSAKc2[0] = sak & 0xFB; } - // crc + // crc AddCrc14A(rSAKc1, sizeof(rSAKc1) - 2); AddCrc14A(rSAKc2, sizeof(rSAKc2) - 2); @@ -1151,7 +1151,7 @@ bool SimulateIso14443aInit(int tagType, int flags, uint8_t *data, tag_response_i AddCrc14A(rRATS, sizeof(rRATS) - 2); AddCrc14A(rPPS, sizeof(rPPS) - 2); - + #define TAG_RESPONSE_COUNT 9 static tag_response_info_t responses_init[TAG_RESPONSE_COUNT] = { { .response = rATQA, .response_n = sizeof(rATQA) }, // Answer to request - respond with card type @@ -1257,7 +1257,7 @@ void SimulateIso14443aTag(uint8_t tagType, uint8_t flags, uint8_t *data) { iso14443a_setup(FPGA_HF_ISO14443A_TAGSIM_LISTEN); iso14a_set_timeout(201400); // 106 * 19ms default - + int len = 0; // To control where we are in the protocol @@ -1283,19 +1283,19 @@ void SimulateIso14443aTag(uint8_t tagType, uint8_t flags, uint8_t *data) { // compatible write block number uint8_t wrblock = 0; - + bool odd_reply = true; clear_trace(); set_tracing(true); LED_A_ON(); - + // main loop for (;;) { WDT_HIT(); tag_response_info_t *p_response = NULL; - + // Clean receive command buffer if (GetIso14443aCommandFromReader(receivedCmd, receivedCmdPar, &len) == false) { Dbprintf("Emulator stopped. Trace length: %d ", BigBuf_get_traceLen()); @@ -1580,17 +1580,17 @@ void SimulateIso14443aTag(uint8_t tagType, uint8_t flags, uint8_t *data) { AddCrc14A(cmd, sizeof(cmd) - 2); EmSendCmd(cmd, sizeof(cmd)); p_response = NULL; - + } else { // clear old dynamic responses dynamic_response_info.response_n = 0; dynamic_response_info.modulation_n = 0; - + // ST25TA512B IKEA Rothult if (tagType == 10) { // we replay 90 00 for all commands but the read bin and we deny the verify cmd. - + if (memcmp("\x02\xa2\xb0\x00\x00\x1d\x51\x69", receivedCmd, 8) == 0) { dynamic_response_info.response[0] = receivedCmd[0]; memcpy(dynamic_response_info.response + 1, "\x00\x1b\xd1\x01\x17\x54\x02\x7a\x68\xa2\x34\xcb\xd0\xe2\x03\xc7\x3e\x62\x0b\xe8\xc6\x3c\x85\x2c\xc5\x31\x31\x31\x32\x90\x00", 31); @@ -2021,11 +2021,11 @@ int EmSendCmd14443aRaw(uint8_t *resp, uint16_t respLen) { while (!(AT91C_BASE_SSC->SSC_SR & AT91C_SSC_RXRDY)); b = AT91C_BASE_SSC->SSC_RHR; (void) b; -/* - while (!(AT91C_BASE_SSC->SSC_SR & AT91C_SSC_TXRDY)); - b = AT91C_BASE_SSC->SSC_THR; - (void) b; -*/ + /* + while (!(AT91C_BASE_SSC->SSC_SR & AT91C_SSC_TXRDY)); + b = AT91C_BASE_SSC->SSC_THR; + (void) b; + */ // wait for the FPGA to signal fdt_indicator == 1 (the FPGA is ready to queue new data in its delay line) for (uint8_t j = 0; j < 5; j++) { // allow timeout - better late than never @@ -2045,12 +2045,12 @@ int EmSendCmd14443aRaw(uint8_t *resp, uint16_t respLen) { FpgaSendQueueDelay = (uint8_t)AT91C_BASE_SSC->SSC_RHR; } -/* - if (AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_RXRDY)) { - b = (uint16_t)(AT91C_BASE_SSC->SSC_RHR); - (void)b; - } - */ + /* + if (AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_RXRDY)) { + b = (uint16_t)(AT91C_BASE_SSC->SSC_RHR); + (void)b; + } + */ } // Ensure that the FPGA Delay Queue is empty before we switch to TAGSIM_LISTEN again: diff --git a/armsrc/mifarecmd.c b/armsrc/mifarecmd.c index 9ee47f19f..53e33ff38 100644 --- a/armsrc/mifarecmd.c +++ b/armsrc/mifarecmd.c @@ -2287,7 +2287,7 @@ void MifareCIdent(void) { res = ReaderReceive(buf, par); if (res == 22) { isGen = MAGIC_SUPER; - goto OUT; + goto OUT; } isGen = MAGIC_GEN_2; @@ -2322,7 +2322,7 @@ void MifareCIdent(void) { isGen = MAGIC_GEN_2; goto OUT; } - + // magic ntag test FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); SpinDelay(40); @@ -2369,7 +2369,7 @@ void MifareHasStaticNonce(void) { struct Crypto1State mpcs = {0, 0}; struct Crypto1State *pcs; pcs = &mpcs; - + iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN); uint8_t counter = 0; diff --git a/client/src/cmdhfmf.c b/client/src/cmdhfmf.c index 7e635b503..c62629b6f 100644 --- a/client/src/cmdhfmf.c +++ b/client/src/cmdhfmf.c @@ -995,7 +995,7 @@ static int CmdHF14AMfDump(const char *Cmd) { PrintAndLogEx(WARNING, "Could not find file " _YELLOW_("%s"), keyFilename); return PM3_EFILE; } - + PrintAndLogEx(INFO, "Using `" _YELLOW_("%s") "`", keyFilename); // Read keys A from file @@ -3169,7 +3169,7 @@ static int CmdHF14AMfChk(const char *Cmd) { PrintAndLogEx(NORMAL, "." NOLF); fflush(stdout); - + if (kbd_enter_pressed()) { PrintAndLogEx(INFO, "\naborted via keyboard!\n"); goto out; @@ -3748,7 +3748,7 @@ int CmdHF14AMfELoad(const char *Cmd) { } PrintAndLogEx(NORMAL, "." NOLF); fflush(stdout); - + blockNum++; counter += blockWidth; datalen -= blockWidth; @@ -4525,7 +4525,7 @@ static int CmdHF14AMfCView(const char *Cmd) { free(dump); return PM3_ESOFT; } - + PrintAndLogEx(NORMAL, "." NOLF); fflush(stdout); } diff --git a/client/src/cmdlffdx.c b/client/src/cmdlffdx.c index 2bb3b274c..af4f316ae 100644 --- a/client/src/cmdlffdx.c +++ b/client/src/cmdlffdx.c @@ -232,7 +232,7 @@ int demodFDX(void) { setDemodBuff(DemodBuffer, 128, preambleIndex); setClockGrid(g_DemodClock, g_DemodStartIdx + (preambleIndex * g_DemodClock)); - + // remove marker bits (1's every 9th digit after preamble) (pType = 2) size = removeParity(DemodBuffer, 11, 9, 2, 117); if (size != 104) { @@ -246,21 +246,21 @@ int demodFDX(void) { offset = 38; uint16_t countryCode = bytebits_to_byteLSBF(DemodBuffer + offset, 10); - + offset += 10; uint8_t dataBlockBit = DemodBuffer[offset]; - + offset++; uint32_t reservedCode = bytebits_to_byteLSBF(DemodBuffer + offset, 14); - + offset += 14; uint8_t animalBit = DemodBuffer[offset]; - + offset++; uint16_t crc = bytebits_to_byteLSBF(DemodBuffer + offset, 16); - + offset += 16; - uint32_t extended = bytebits_to_byteLSBF(DemodBuffer + offset, 24); + uint32_t extended = bytebits_to_byteLSBF(DemodBuffer + offset, 24); uint64_t rawid = (uint64_t)(bytebits_to_byte(DemodBuffer, 32)) << 32 | bytebits_to_byte(DemodBuffer + 32, 32); uint8_t raw[8]; @@ -389,13 +389,13 @@ static int CmdFdxClone(const char *Cmd) { } } if (errors || strlen(Cmd) == 0) return usage_lf_fdx_clone(); - + verify_values(&national_code, &country_code, &extended, &is_animal); PrintAndLogEx(INFO, " Country code %"PRIu32, country_code); PrintAndLogEx(INFO, " National code %"PRIu64, national_code); - PrintAndLogEx(INFO, " Set animal bit %c", (is_animal) ? 'Y':'N'); - PrintAndLogEx(INFO, "Set data block bit %c", (has_extended) ? 'Y':'N'); + PrintAndLogEx(INFO, " Set animal bit %c", (is_animal) ? 'Y' : 'N'); + PrintAndLogEx(INFO, "Set data block bit %c", (has_extended) ? 'Y' : 'N'); PrintAndLogEx(INFO, " Extended data 0x%"PRIX32, extended); PrintAndLogEx(INFO, " RFU 0"); @@ -469,13 +469,13 @@ static int CmdFdxSim(const char *Cmd) { } } if (errors) return usage_lf_fdx_sim(); - + verify_values(&national_code, &country_code, &extended, &is_animal); PrintAndLogEx(INFO, " Country code %"PRIu32, country_code); PrintAndLogEx(INFO, " National code %"PRIu64, national_code); - PrintAndLogEx(INFO, " Set animal bit %c", (is_animal) ? 'Y':'N'); - PrintAndLogEx(INFO, "Set data block bit %c", (has_extended) ? 'Y':'N'); + PrintAndLogEx(INFO, " Set animal bit %c", (is_animal) ? 'Y' : 'N'); + PrintAndLogEx(INFO, "Set data block bit %c", (has_extended) ? 'Y' : 'N'); PrintAndLogEx(INFO, " Extended data 0x%"PRIX32, extended); PrintAndLogEx(INFO, " RFU 0"); diff --git a/client/src/cmdlfguard.c b/client/src/cmdlfguard.c index 6bb566c0d..83a34d5fe 100644 --- a/client/src/cmdlfguard.c +++ b/client/src/cmdlfguard.c @@ -356,7 +356,7 @@ int getGuardBits(uint8_t fmtlen, uint32_t fc, uint32_t cn, uint8_t *guardBits) { rawbytes[i + 4] = bytebits_to_byte(pre + (i * 8), 8); PrintAndLogEx(DEBUG, " WIE | %s", sprint_hex(rawbytes, sizeof(rawbytes))); - + // XOR (only works on wiegand stuff) for (i = 1; i < sizeof(rawbytes); ++i) rawbytes[i] ^= xorKey ; From df60ba6b055dd7ada39fa56f130eed8a7075d0a8 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sat, 12 Sep 2020 14:23:04 +0200 Subject: [PATCH 0470/1047] added basic support for Rothult ST cards --- client/Makefile | 1 + client/src/cmdhf.c | 2 + client/src/cmdhfst.c | 309 +++++++++++++++++++++++++++++++++++++++++++ client/src/cmdhfst.h | 19 +++ 4 files changed, 331 insertions(+) create mode 100644 client/src/cmdhfst.c create mode 100644 client/src/cmdhfst.h diff --git a/client/Makefile b/client/Makefile index a4e8b193d..5af53463d 100644 --- a/client/Makefile +++ b/client/Makefile @@ -434,6 +434,7 @@ SRCS = aidsearch.c \ cmdhfmfp.c \ cmdhfthinfilm.c \ cmdhftopaz.c \ + cmdhfst.c \ cmdhw.c \ cmdlf.c \ cmdlfawid.c \ diff --git a/client/src/cmdhf.c b/client/src/cmdhf.c index dd3bf4b51..4d89cca62 100644 --- a/client/src/cmdhf.c +++ b/client/src/cmdhf.c @@ -35,6 +35,7 @@ #include "cmdhfthinfilm.h" // Thinfilm #include "cmdhflto.h" // LTO-CM #include "cmdhfcryptorf.h" // CryptoRF +#include "cmdhfst.h" // ST rothult #include "cmdtrace.h" // trace list #include "ui.h" #include "proxgui.h" @@ -365,6 +366,7 @@ static command_t CommandTable[] = { {"mfp", CmdHFMFP, AlwaysAvailable, "{ MIFARE Plus RFIDs... }"}, {"mfu", CmdHFMFUltra, AlwaysAvailable, "{ MIFARE Ultralight RFIDs... }"}, {"mfdes", CmdHFMFDes, AlwaysAvailable, "{ MIFARE Desfire RFIDs... }"}, + {"st", CmdHF_ST, AlwaysAvailable, "{ ST Rothult RFIDs... }"}, {"thinfilm", CmdHFThinfilm, AlwaysAvailable, "{ Thinfilm RFIDs... }"}, {"topaz", CmdHFTopaz, AlwaysAvailable, "{ TOPAZ (NFC Type 1) RFIDs... }"}, {"list", CmdTraceList, AlwaysAvailable, "List protocol data in trace buffer"}, diff --git a/client/src/cmdhfst.c b/client/src/cmdhfst.c new file mode 100644 index 000000000..ac4384cff --- /dev/null +++ b/client/src/cmdhfst.c @@ -0,0 +1,309 @@ +//----------------------------------------------------------------------------- +// Copyright (C) 2020 iceman1001 +// +// This code is licensed to you under the terms of the GNU GPL, version 2 or, +// at your option, any later version. See the LICENSE.txt file for the text of +// the license. +//----------------------------------------------------------------------------- +// High frequency ISO14443A / ST commands +//----------------------------------------------------------------------------- + +#include "cmdhfst.h" +#include +#include "fileutils.h" +#include "cmdparser.h" // command_t +#include "comms.h" // clearCommandBuffer +#include "cmdtrace.h" +#include "crc16.h" +#include "cmdhf14a.h" +#include "protocols.h" // definitions of ISO14A/7816 protocol +#include "emv/apduinfo.h" // GetAPDUCodeDescription + +#define TIMEOUT 2000 +static int CmdHelp(const char *Cmd); + +static int usage_hf_st_info(void) { + PrintAndLogEx(NORMAL, "Usage: hf st info [h]"); + PrintAndLogEx(NORMAL, "Options:"); + PrintAndLogEx(NORMAL, " h this help"); + PrintAndLogEx(NORMAL, "Example:"); + PrintAndLogEx(NORMAL, _YELLOW_(" hf st info")); + return PM3_SUCCESS; +} + +static int usage_hf_st_sim(void) { + PrintAndLogEx(NORMAL, "\n Emulating ST25TA512B tag with 7 byte UID\n"); + PrintAndLogEx(NORMAL, "Usage: hf st sim [h] u "); + PrintAndLogEx(NORMAL, "Options:"); + PrintAndLogEx(NORMAL, " h : This help"); + PrintAndLogEx(NORMAL, " u : 7 byte UID"); + PrintAndLogEx(NORMAL, "Examples:"); + PrintAndLogEx(NORMAL, _YELLOW_(" hf 14a sim u 02E2007D0FCA4C")); + return PM3_SUCCESS; +} +/* +// get ST chip model (from UID) // from ST Microelectronics +static char *get_st_chip_model(uint8_t data) { + static char model[20]; + char *s = model; + memset(model, 0, sizeof(model)); + switch (data) { + case 0x0: + sprintf(s, "SRIX4K (Special)"); + break; + case 0x2: + sprintf(s, "SR176"); + break; + case 0x3: + sprintf(s, "SRIX4K"); + break; + case 0x4: + sprintf(s, "SRIX512"); + break; + case 0x6: + sprintf(s, "SRI512"); + break; + case 0x7: + sprintf(s, "SRI4K"); + break; + case 0xC: + sprintf(s, "SRT512"); + break; + default : + sprintf(s, "Unknown"); + break; + } + return s; +} + +// print UID info from SRx chips (ST Microelectronics) +static void print_st_general_info(uint8_t *data, uint8_t len) { + //uid = first 8 bytes in data + PrintAndLogEx(NORMAL, ""); + PrintAndLogEx(SUCCESS, " UID: " _GREEN_("%s"), sprint_hex(SwapEndian64(data, 8, 8), len)); + PrintAndLogEx(SUCCESS, " MFG: %02X, " _YELLOW_("%s"), data[6], getTagInfo(data[6])); + PrintAndLogEx(SUCCESS, "Chip: %02X, " _YELLOW_("%s"), data[5] >> 2, get_st_chip_model(data[5] >> 2)); +} + +*/ +static void print_st_cc_info(uint8_t *d, uint8_t n) { + if (n < 0x0F) { + PrintAndLogEx(WARNING, "Not enought bytes read from system file"); + return; + } + + PrintAndLogEx(NORMAL, ""); + PrintAndLogEx(SUCCESS, "------------ " _CYAN_("Capability Container file") " ------------"); + PrintAndLogEx(SUCCESS, " len %u bytes (" _GREEN_("0x%02X") ")", d[1],d[1]); + PrintAndLogEx(SUCCESS, " version %s (" _GREEN_("0x%02X") ")", (d[2] == 0x20) ? "v2.0" : "v1.0", d[2]); + + uint16_t maxr = (d[3] << 8 | d[4]); + PrintAndLogEx(SUCCESS, " max bytes read %u bytes ( 0x%04X )", maxr, maxr); + uint16_t maxw = (d[5] << 8 | d[6]); + PrintAndLogEx(SUCCESS, " max bytes write %u bytes ( 0x%04X )", maxw, maxw); + PrintAndLogEx(NORMAL, ""); + PrintAndLogEx(SUCCESS, " NDEF file control TLV {"); + PrintAndLogEx(SUCCESS, " t ( %02X )", d[7]); + PrintAndLogEx(SUCCESS, " v ( %02X )", d[8]); + PrintAndLogEx(SUCCESS, " file id ( %02X%02X )", d[9], d[10]); + + uint16_t maxndef = (d[11] << 8 | d[12]); + PrintAndLogEx(SUCCESS, " max NDEF filesize %u bytes ( 0x%04X )", maxndef, maxndef); + PrintAndLogEx(SUCCESS, " ----- " _CYAN_("access rights") " -------"); + PrintAndLogEx(SUCCESS, " read ( %02X )", d[13]); + PrintAndLogEx(SUCCESS, " write ( %02X )", d[14]); + PrintAndLogEx(SUCCESS, " }"); + PrintAndLogEx(SUCCESS, "----------------- " _CYAN_("raw") " -----------------"); + PrintAndLogEx(SUCCESS, "%s", sprint_hex_inrow(d, n)); + PrintAndLogEx(NORMAL, ""); +} +static void print_st_system_info(uint8_t *d, uint8_t n) { + if (n < 0x12) { + PrintAndLogEx(WARNING, "Not enought bytes read from system file"); + return; + } + + PrintAndLogEx(NORMAL, ""); + PrintAndLogEx(SUCCESS, "------------ " _CYAN_("ST System file") " ------------"); + + uint16_t len = (d[0] << 8 | d[1]); + PrintAndLogEx(SUCCESS, " len %u bytes (" _GREEN_("0x%04X") ")", len, len); + + if (d[2] == 0x80) { + PrintAndLogEx(SUCCESS, " ST reserved ( 0x%02X )", d[2]); + } else { + PrintAndLogEx(SUCCESS, " GPO Config ( 0x%02X )", d[2]); + } + PrintAndLogEx(SUCCESS, " Event counter config ( 0x%02X )", d[3]); + + uint32_t counter = (d[4] << 16 | d[5] << 8 | d[6]); + PrintAndLogEx(SUCCESS, " 20bit counter ( 0x%05X )", counter & 0xFFFFF); + + PrintAndLogEx(SUCCESS, " Product version ( 0x%02X )", d[7]); + + PrintAndLogEx(SUCCESS, " UID " _GREEN_("%s"), sprint_hex_inrow(d + 8, 7)); + + uint16_t mem = (d[0xF] << 8 | d[0x10]); + PrintAndLogEx(SUCCESS, " Memory Size - 1 %u bytes (" _GREEN_("0x%04X") ")", mem, mem); + + PrintAndLogEx(SUCCESS, " IC Reference code %u ( 0x%02X )", d[0x12], d[0x12]); + + PrintAndLogEx(SUCCESS, "----------------- " _CYAN_("raw") " -----------------"); + PrintAndLogEx(SUCCESS, "%s", sprint_hex_inrow(d, n)); + PrintAndLogEx(NORMAL, ""); + + /* + 0012 + 80000000001302E2007D0E8DCC + */ +} + +static uint16_t get_sw(uint8_t *d, uint8_t n) { + if (n < 2) + return 0; + + n -= 2; + return d[n] * 0x0100 + d[n + 1]; +} + +// ST rothult +int infoHF_ST(void) { + + bool activate_field = true; + bool keep_field_on = true; + uint8_t response[PM3_CMD_DATA_SIZE]; + int resplen = 0; + + uint8_t aSELECT_AID[80]; + int aSELECT_AID_n = 0; + param_gethex_to_eol("00a4040007d276000085010100", 0, aSELECT_AID, sizeof(aSELECT_AID), &aSELECT_AID_n); + int res = ExchangeAPDU14a(aSELECT_AID, aSELECT_AID_n, activate_field, keep_field_on, response, sizeof(response), &resplen); + if (res) + return res; + + if (resplen < 2) + return PM3_ESOFT; + + uint16_t sw = get_sw(response, resplen); + if (sw != 0x9000) { + PrintAndLogEx(ERR, "Selecting NDEF aid failed (%04x - %s).", sw, GetAPDUCodeDescription(sw >> 8, sw & 0xff)); + return PM3_ESOFT; + } + + activate_field = false; + keep_field_on = true; + // --------------- CC file reading ---------------- + + uint8_t aSELECT_FILE_CC[30]; + int aSELECT_FILE_CC_n = 0; + param_gethex_to_eol("00a4000c02e103", 0, aSELECT_FILE_CC, sizeof(aSELECT_FILE_CC), &aSELECT_FILE_CC_n); + res = ExchangeAPDU14a(aSELECT_FILE_CC, aSELECT_FILE_CC_n, activate_field, keep_field_on, response, sizeof(response), &resplen); + if (res) + return res; + + sw = get_sw(response, resplen); + if (sw != 0x9000) { + PrintAndLogEx(ERR, "Selecting CC file failed (%04x - %s).", sw, GetAPDUCodeDescription(sw >> 8, sw & 0xff)); + return PM3_ESOFT; + } + + uint8_t aREAD_CC[30]; + int aREAD_CC_n = 0; + param_gethex_to_eol("00b000000f", 0, aREAD_CC, sizeof(aREAD_CC), &aREAD_CC_n); + res = ExchangeAPDU14a(aREAD_CC, aREAD_CC_n, activate_field, keep_field_on, response, sizeof(response), &resplen); + if (res) + return res; + + sw = get_sw(response, resplen); + if (sw != 0x9000) { + PrintAndLogEx(ERR, "reading CC file failed (%04x - %s).", sw, GetAPDUCodeDescription(sw >> 8, sw & 0xff)); + return PM3_ESOFT; + } + + print_st_cc_info(response, resplen - 2); + + + // --------------- System file reading ---------------- + uint8_t aSELECT_FILE_SYS[30]; + int aSELECT_FILE_SYS_n = 0; + param_gethex_to_eol("00a4000c02e101", 0, aSELECT_FILE_SYS, sizeof(aSELECT_FILE_SYS), &aSELECT_FILE_SYS_n); + res = ExchangeAPDU14a(aSELECT_FILE_SYS, aSELECT_FILE_SYS_n, activate_field, keep_field_on, response, sizeof(response), &resplen); + if (res) + return res; + + sw = get_sw(response, resplen); + if (sw != 0x9000) { + PrintAndLogEx(ERR, "Selecting system file failed (%04x - %s).", sw, GetAPDUCodeDescription(sw >> 8, sw & 0xff)); + return PM3_ESOFT; + } + + keep_field_on = false; + + uint8_t aREAD_SYS[30]; + int aREAD_SYS_n = 0; + param_gethex_to_eol("00b0000012", 0, aREAD_SYS, sizeof(aREAD_SYS), &aREAD_SYS_n); + res = ExchangeAPDU14a(aREAD_SYS, aREAD_SYS_n, activate_field, keep_field_on, response, sizeof(response), &resplen); + if (res) + return res; + + sw = get_sw(response, resplen); + if (sw != 0x9000) { + PrintAndLogEx(ERR, "reading system file failed (%04x - %s).", sw, GetAPDUCodeDescription(sw >> 8, sw & 0xff)); + return PM3_ESOFT; + } + print_st_system_info(response, resplen - 2); +// PrintAndLogEx(NORMAL, "<<<< %s", sprint_hex(response, resplen)); + return PM3_SUCCESS; +} + +// menu command to get and print all info known about any known 14b tag +static int cmd_hf_st_info(const char *Cmd) { + char c = tolower(param_getchar(Cmd, 0)); + if (c == 'h') return usage_hf_st_info(); + return infoHF_ST(); +} + +static int cmd_hf_st_sim(const char *Cmd) { + char c = tolower(param_getchar(Cmd, 0)); + if (c == 'h' || c == 0x00) return usage_hf_st_sim(); + + int uidlen = 0; + uint8_t cmdp = 0; + uint8_t uid[7] = {0}; + if (c == 'u') { + param_gethex_ex(Cmd, cmdp + 1, uid, &uidlen); + uidlen >>= 1; + if (uidlen != 7) { + return usage_hf_st_sim(); + } + } + + char param[40]; + snprintf(param, sizeof(param), "t 10 u %s", sprint_hex_inrow(uid, uidlen)); + return CmdHF14ASim(param); +} + +static int cmd_hf_st_list(const char *Cmd) { + (void)Cmd; // Cmd is not used so far + CmdTraceList("7816"); + return PM3_SUCCESS; +} + +static command_t CommandTable[] = { + {"help", CmdHelp, AlwaysAvailable, "This help"}, + {"info", cmd_hf_st_info, IfPm3Iso14443a, "Tag information"}, + {"list", cmd_hf_st_list, AlwaysAvailable, "List ISO 14443A/7816 history"}, + {"sim", cmd_hf_st_sim, IfPm3Iso14443a, "Fake ISO 14443A/ST tag"}, + {NULL, NULL, NULL, NULL} +}; + +static int CmdHelp(const char *Cmd) { + (void)Cmd; // Cmd is not used so far + CmdsHelp(CommandTable); + return PM3_SUCCESS; +} + +int CmdHF_ST(const char *Cmd) { + clearCommandBuffer(); + return CmdsParse(CommandTable, Cmd); +} diff --git a/client/src/cmdhfst.h b/client/src/cmdhfst.h new file mode 100644 index 000000000..c3772318d --- /dev/null +++ b/client/src/cmdhfst.h @@ -0,0 +1,19 @@ +//----------------------------------------------------------------------------- +// Copyright (C) 2020 iceman1001 +// +// This code is licensed to you under the terms of the GNU GPL, version 2 or, +// at your option, any later version. See the LICENSE.txt file for the text of +// the license. +//----------------------------------------------------------------------------- +// High frequency ISO14443A / ST commands +//----------------------------------------------------------------------------- + +#ifndef CMDHFST_H__ +#define CMDHFST_H__ + +#include "common.h" + +int CmdHF_ST(const char *Cmd); + +int infoHF_ST(void); +#endif From b16d895438aa5f0ae4f309bd5b5cec882a744a28 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sat, 12 Sep 2020 15:00:50 +0200 Subject: [PATCH 0471/1047] hf st info - more details GPO, Event --- client/src/cmdhfst.c | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/client/src/cmdhfst.c b/client/src/cmdhfst.c index ac4384cff..b987f88af 100644 --- a/client/src/cmdhfst.c +++ b/client/src/cmdhfst.c @@ -133,8 +133,40 @@ static void print_st_system_info(uint8_t *d, uint8_t n) { PrintAndLogEx(SUCCESS, " ST reserved ( 0x%02X )", d[2]); } else { PrintAndLogEx(SUCCESS, " GPO Config ( 0x%02X )", d[2]); + PrintAndLogEx(SUCCESS, " config lock bit ( %s )", ((d[2] & 0x80) == 0x80) ? _RED_("locked") : _GREEN_("unlocked")); + uint8_t conf = (d[2] & 0x70) >> 4; + switch(conf) { + case 0: + PrintAndLogEx(SUCCESS, ""); + break; + case 1: + PrintAndLogEx(SUCCESS, "Session opened"); + break; + case 2: + PrintAndLogEx(SUCCESS, "WIP"); + break; + case 3: + PrintAndLogEx(SUCCESS, "MIP"); + break; + case 4: + PrintAndLogEx(SUCCESS, "Interrupt"); + break; + case 5: + PrintAndLogEx(SUCCESS, "State Control"); + break; + case 6: + PrintAndLogEx(SUCCESS, "RF Busy"); + break; + case 7: + PrintAndLogEx(SUCCESS, "Field Detect"); + break; + } } + PrintAndLogEx(SUCCESS, " Event counter config ( 0x%02X )", d[3]); + PrintAndLogEx(SUCCESS, " config lock bit ( %s )", ((d[3] & 0x80) == 0x80) ? _RED_("locked") : _GREEN_("unlocked")); + PrintAndLogEx(SUCCESS, " counter ( %s )", ((d[3] & 0x02) == 0x02) ? _RED_("enabled") : _GREEN_("disable")); + PrintAndLogEx(SUCCESS, " counter increment on ( %s )", ((d[3] & 0x01) == 0x01) ? _YELLOW_("write") : _YELLOW_("read")); uint32_t counter = (d[4] << 16 | d[5] << 8 | d[6]); PrintAndLogEx(SUCCESS, " 20bit counter ( 0x%05X )", counter & 0xFFFFF); From 8736f60fdcde683e6fb5f78ce1a29838a528887c Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sat, 12 Sep 2020 15:11:43 +0200 Subject: [PATCH 0472/1047] hf st info - more details GPO, Event --- client/src/cmdhfst.c | 41 ++++++++++++++++++++++++++++++----------- 1 file changed, 30 insertions(+), 11 deletions(-) diff --git a/client/src/cmdhfst.c b/client/src/cmdhfst.c index b987f88af..c38009eed 100644 --- a/client/src/cmdhfst.c +++ b/client/src/cmdhfst.c @@ -41,13 +41,13 @@ static int usage_hf_st_sim(void) { PrintAndLogEx(NORMAL, _YELLOW_(" hf 14a sim u 02E2007D0FCA4C")); return PM3_SUCCESS; } -/* -// get ST chip model (from UID) // from ST Microelectronics -static char *get_st_chip_model(uint8_t data) { - static char model[20]; + +// get ST Microelectronics chip model (from UID) +static char *get_st_chip_model(uint8_t pc) { + static char model[40]; char *s = model; memset(model, 0, sizeof(model)); - switch (data) { + switch (pc) { case 0x0: sprintf(s, "SRIX4K (Special)"); break; @@ -69,13 +69,28 @@ static char *get_st_chip_model(uint8_t data) { case 0xC: sprintf(s, "SRT512"); break; + case 0xE2: + sprintf(s, "ST25??? IKEA Rothult"); + break; + case 0xE3: + sprintf(s, "ST25TA02KB"); + break; + case 0xE4: + sprintf(s, "ST25TA512B"); + break; + case 0xA3: + sprintf(s, "ST25TA02KB-P"); + break; + case 0xF3: + sprintf(s, "ST25TA02KB-D"); + break; default : sprintf(s, "Unknown"); break; } return s; } - +/* // print UID info from SRx chips (ST Microelectronics) static void print_st_general_info(uint8_t *data, uint8_t len) { //uid = first 8 bytes in data @@ -103,9 +118,9 @@ static void print_st_cc_info(uint8_t *d, uint8_t n) { PrintAndLogEx(SUCCESS, " max bytes write %u bytes ( 0x%04X )", maxw, maxw); PrintAndLogEx(NORMAL, ""); PrintAndLogEx(SUCCESS, " NDEF file control TLV {"); - PrintAndLogEx(SUCCESS, " t ( %02X )", d[7]); - PrintAndLogEx(SUCCESS, " v ( %02X )", d[8]); - PrintAndLogEx(SUCCESS, " file id ( %02X%02X )", d[9], d[10]); + PrintAndLogEx(SUCCESS, " (t) type of file ( %02X )", d[7]); + PrintAndLogEx(SUCCESS, " (v) ( %02X )", d[8]); + PrintAndLogEx(SUCCESS, " file id ( %02X%02X )", d[9], d[10]); uint16_t maxndef = (d[11] << 8 | d[12]); PrintAndLogEx(SUCCESS, " max NDEF filesize %u bytes ( 0x%04X )", maxndef, maxndef); @@ -173,7 +188,10 @@ static void print_st_system_info(uint8_t *d, uint8_t n) { PrintAndLogEx(SUCCESS, " Product version ( 0x%02X )", d[7]); - PrintAndLogEx(SUCCESS, " UID " _GREEN_("%s"), sprint_hex_inrow(d + 8, 7)); + PrintAndLogEx(SUCCESS, " UID " _GREEN_("%s"), sprint_hex_inrow(d + 8, 7)); + PrintAndLogEx(SUCCESS, " MFG 0x%02X, " _YELLOW_("%s"), d[8], getTagInfo(d[8])); + PrintAndLogEx(SUCCESS, " Product Code 0x%02X, " _YELLOW_("%s"), d[9], get_st_chip_model(d[9])); + PrintAndLogEx(SUCCESS, " Device# " _YELLOW_("%s"), sprint_hex_inrow(d + 10, 5)); uint16_t mem = (d[0xF] << 8 | d[0x10]); PrintAndLogEx(SUCCESS, " Memory Size - 1 %u bytes (" _GREEN_("0x%04X") ")", mem, mem); @@ -205,7 +223,8 @@ int infoHF_ST(void) { bool keep_field_on = true; uint8_t response[PM3_CMD_DATA_SIZE]; int resplen = 0; - + + // --------------- Select NDEF Tag application ---------------- uint8_t aSELECT_AID[80]; int aSELECT_AID_n = 0; param_gethex_to_eol("00a4040007d276000085010100", 0, aSELECT_AID, sizeof(aSELECT_AID), &aSELECT_AID_n); From 9abbcab4a5dfa17cbab243cff456d8adf5fb2c10 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sat, 12 Sep 2020 20:57:07 +0200 Subject: [PATCH 0473/1047] cmake --- client/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/client/CMakeLists.txt b/client/CMakeLists.txt index 3ac98578b..ab8f20c74 100644 --- a/client/CMakeLists.txt +++ b/client/CMakeLists.txt @@ -238,6 +238,7 @@ set (TARGET_SOURCES ${PM3_ROOT}/client/src/cmdhfmfhard.c ${PM3_ROOT}/client/src/cmdhfmfp.c ${PM3_ROOT}/client/src/cmdhfmfu.c + ${PM3_ROOT}/client/src/cmdhfst.c ${PM3_ROOT}/client/src/cmdhfthinfilm.c ${PM3_ROOT}/client/src/cmdhftopaz.c ${PM3_ROOT}/client/src/cmdhw.c From b9329ce555858116b109fe608fdfeeaa457aa844 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Sat, 12 Sep 2020 19:38:29 +0200 Subject: [PATCH 0474/1047] Add Waveshare support (bitmap ok, RGB maybe broken?) --- CHANGELOG.md | 3 +- client/CMakeLists.txt | 1 + client/Makefile | 3 +- client/android/CMakeLists.txt | 1 + client/src/cmdhf.c | 4 +- client/src/cmdhfwaveshare.c | 878 ++++++++++++++++++++++++++++++++++ client/src/cmdhfwaveshare.h | 10 + client/src/ui.h | 1 + 8 files changed, 897 insertions(+), 4 deletions(-) create mode 100644 client/src/cmdhfwaveshare.c create mode 100644 client/src/cmdhfwaveshare.h diff --git a/CHANGELOG.md b/CHANGELOG.md index eccad5f86..55d26c791 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,8 @@ All notable changes to this project will be documented in this file. This project uses the changelog in accordance with [keepchangelog](http://keepachangelog.com/). Please use this to write notable changes, which is not the same as git commit log... ## [unreleased][unreleased] - - Add `hf 14a config` to deal with badly configured cards: invalid ATQA/BCC/SAK (@doegox)" + - Add `hf waveshare` to upload picture to Waveshare NFC-Powered e-Paper (@doegox) + - Add `hf 14a config` to deal with badly configured cards: invalid ATQA/BCC/SAK (@doegox) - Mikron JSC Russia Ultralight EV1 41 pages tag type support (@McEloff) - Add test for Ultralight gen2 magic 'hf search' (@McEloff) - Add test for Ultralight EV1 gen2 magic 'hf search' (@McEloff) diff --git a/client/CMakeLists.txt b/client/CMakeLists.txt index ab8f20c74..fc56b594a 100644 --- a/client/CMakeLists.txt +++ b/client/CMakeLists.txt @@ -241,6 +241,7 @@ set (TARGET_SOURCES ${PM3_ROOT}/client/src/cmdhfst.c ${PM3_ROOT}/client/src/cmdhfthinfilm.c ${PM3_ROOT}/client/src/cmdhftopaz.c + ${PM3_ROOT}/client/src/cmdhfwaveshare.c ${PM3_ROOT}/client/src/cmdhw.c ${PM3_ROOT}/client/src/cmdlf.c ${PM3_ROOT}/client/src/cmdlfawid.c diff --git a/client/Makefile b/client/Makefile index 5af53463d..ebf07c4b4 100644 --- a/client/Makefile +++ b/client/Makefile @@ -432,9 +432,10 @@ SRCS = aidsearch.c \ cmdhfmfhard.c \ cmdhfmfu.c \ cmdhfmfp.c \ + cmdhfst.c \ cmdhfthinfilm.c \ cmdhftopaz.c \ - cmdhfst.c \ + cmdhfwaveshare.c \ cmdhw.c \ cmdlf.c \ cmdlfawid.c \ diff --git a/client/android/CMakeLists.txt b/client/android/CMakeLists.txt index cc827d143..a55055770 100644 --- a/client/android/CMakeLists.txt +++ b/client/android/CMakeLists.txt @@ -119,6 +119,7 @@ add_library(pm3rrg_rdv4 SHARED ${PM3_ROOT}/client/src/cmdhfmfu.c ${PM3_ROOT}/client/src/cmdhfthinfilm.c ${PM3_ROOT}/client/src/cmdhftopaz.c + ${PM3_ROOT}/client/src/cmdhfwaveshare.c ${PM3_ROOT}/client/src/cmdhw.c ${PM3_ROOT}/client/src/cmdlf.c ${PM3_ROOT}/client/src/cmdlfawid.c diff --git a/client/src/cmdhf.c b/client/src/cmdhf.c index 4d89cca62..dcd85c5d5 100644 --- a/client/src/cmdhf.c +++ b/client/src/cmdhf.c @@ -36,6 +36,7 @@ #include "cmdhflto.h" // LTO-CM #include "cmdhfcryptorf.h" // CryptoRF #include "cmdhfst.h" // ST rothult +#include "cmdhfwaveshare.h" // Waveshare #include "cmdtrace.h" // trace list #include "ui.h" #include "proxgui.h" @@ -85,8 +86,6 @@ static int usage_hf_tune(void) { return PM3_SUCCESS; } -#define PROMPT_CLEARLINE PrintAndLogEx(INPLACE, " \r") - int CmdHFSearch(const char *Cmd) { char cmdp = tolower(param_getchar(Cmd, 0)); @@ -369,6 +368,7 @@ static command_t CommandTable[] = { {"st", CmdHF_ST, AlwaysAvailable, "{ ST Rothult RFIDs... }"}, {"thinfilm", CmdHFThinfilm, AlwaysAvailable, "{ Thinfilm RFIDs... }"}, {"topaz", CmdHFTopaz, AlwaysAvailable, "{ TOPAZ (NFC Type 1) RFIDs... }"}, + {"waveshare", CmdHFWaveshare, AlwaysAvailable, "{ Waveshare NFC ePaper... }"}, {"list", CmdTraceList, AlwaysAvailable, "List protocol data in trace buffer"}, {"plot", CmdHFPlot, IfPm3Hfplot, "Plot signal"}, {"tune", CmdHFTune, IfPm3Present, "Continuously measure HF antenna tuning"}, diff --git a/client/src/cmdhfwaveshare.c b/client/src/cmdhfwaveshare.c new file mode 100644 index 000000000..8494f9f48 --- /dev/null +++ b/client/src/cmdhfwaveshare.c @@ -0,0 +1,878 @@ +//----------------------------------------------------------------------------- +// Waveshare commands +//----------------------------------------------------------------------------- +// from ST25R3911B-NFC-Demo source code by Waveshare team + +#include "cmdhfwaveshare.h" + +#include +#include +#include "comms.h" +#include "cmdparser.h" +#include "ui.h" +#include "util.h" +#include "fileutils.h" +#include "util_posix.h" // msleep + +// Currently the largest pixel 880*528 only needs 58.08K bytes +#define WSMAPSIZE 60000 + +#pragma pack(1) /* Mandatory to remove any padding */ +typedef struct { + uint8_t B; + uint8_t M; + uint32_t fsize; + uint16_t res1; + uint16_t res2; + uint32_t offset; + uint32_t Bit_Pixel; + uint32_t BMP_Width; + uint32_t BMP_Height; + uint16_t planes; + uint16_t bpp; + uint32_t ctype; + uint32_t dsize; + uint32_t hppm; + uint32_t vppm; + uint32_t colorsused; + uint32_t colorreq; + uint32_t Color_1; //Color palette + uint32_t Color_2; +} PACKED BMP_HEADER; + +#define EPD_1IN54B 0 +#define EPD_1IN54C 1 +#define EPD_1IN54V2 2 +#define EPD_1IN54BCV2 3 +#define EPD_2IN13V2 4 +#define EPD_2IN13BC 5 +#define EPD_2IN13D 6 +#define EPD_2IN9 7 +#define EPD_2IN9BC 8 +#define EPD_2IN9D 9 +#define EPD_4IN2 10 +#define EPD_4IN2BC 11 +#define EPD_7IN5 12 +#define EPD_7IN5BC 13 +#define EPD_7IN5V2 14 +#define EPD_7IN5BCV2 15 +#define EPD_2IN7 16 +#define EPD_7IN5HD 17 + +typedef struct model_s { + const char *desc; + uint8_t len; // The data sent in one time shall not be greater than 128-3 +} model_t; + +typedef enum { + M2in13 = 0, + M2in9, + M4in2, + M7in5, + M2in7, + M2in13B, + M1in54B, + M7in5HD, + MEND +} model_enum_t; + +static model_t models[] = { + {"2.13 inch e-paper", 16}, + {"2.9 inch e-paper", 16}, + {"4.2 inch e-paper", 100}, + {"7.5 inch e-paper", 120}, + {"2.7 inch e-paper", 121}, + {"2.13 inch e-paper B", 106}, + {"1.54 inch e-paper B", 100}, + {"7.5 inch e-paper HD", 120}, +}; + +static int CmdHelp(const char *Cmd); + +static int usage_hf_waveshare_loadbmp(void) { + PrintAndLogEx(NORMAL, "Load BMP file to Waveshare NFC ePaper."); + PrintAndLogEx(NORMAL, "Usage: hf waveshare loadbmp [h] f m "); + PrintAndLogEx(NORMAL, " Options :"); + PrintAndLogEx(NORMAL, " f : " _YELLOW_("filename[.bmp]") " to upload to tag"); + PrintAndLogEx(NORMAL, " m : " _YELLOW_("model number") " of your tag"); + for (uint8_t i=0; i< MEND; i++) { + PrintAndLogEx(NORMAL, " m %2i : %s", i, models[i].desc); + } + PrintAndLogEx(NORMAL, ""); + PrintAndLogEx(NORMAL, "Examples:"); + PrintAndLogEx(NORMAL, _YELLOW_(" hf waveshare loadbmp m 0 f myfile")); + PrintAndLogEx(NORMAL, ""); + return PM3_SUCCESS; +} + +static int picture_bit_depth(const uint8_t *bmp, const size_t bmpsize) { + if (bmpsize < sizeof(BMP_HEADER)) + return PM3_ESOFT; + BMP_HEADER *pbmpheader = (BMP_HEADER *)bmp; + PrintAndLogEx(DEBUG, "colorsused = %d", pbmpheader->colorsused); + PrintAndLogEx(DEBUG, "pbmpheader->bpp = %d", pbmpheader->bpp); + return pbmpheader->bpp; +} + + +static int read_bmp_bitmap(const uint8_t *bmp, const size_t bmpsize, uint8_t **black) { + BMP_HEADER *pbmpheader = (BMP_HEADER *)bmp; + // check file is bitmap + if (pbmpheader->bpp != 1) { + return PM3_ESOFT; + } + if (pbmpheader->B == 'M' || pbmpheader->M == 'B') { //0x4d42 + PrintAndLogEx(WARNING, "The file is not a BMP!"); + return PM3_ESOFT; + } + PrintAndLogEx(DEBUG, "file size = %d", pbmpheader->fsize); + PrintAndLogEx(DEBUG, "file offset = %d", pbmpheader->offset); + if (pbmpheader->fsize > bmpsize) { + PrintAndLogEx(WARNING, "The file is truncated!"); + return PM3_ESOFT; + } + uint8_t color_flag = pbmpheader->Color_1; + // Get BMP file data pointer + uint32_t offset = pbmpheader->offset; + + uint16_t X, Y; + uint16_t Image_Width_Byte = (pbmpheader->BMP_Width % 8 == 0) ? (pbmpheader->BMP_Width / 8) : (pbmpheader->BMP_Width / 8 + 1); + uint16_t Bmp_Width_Byte = (Image_Width_Byte % 4 == 0) ? Image_Width_Byte : ((Image_Width_Byte / 4 + 1) * 4); + + *black = calloc(WSMAPSIZE, sizeof(uint8_t)); + if (*black == NULL) { + return PM3_EMALLOC; + } + // Write data into RAM + for (Y = 0; Y < pbmpheader->BMP_Height; Y++) { // columns + for (X = 0; X < Bmp_Width_Byte; X++) { // lines + if ((X < Image_Width_Byte) && ((X + (pbmpheader->BMP_Height - Y - 1) * Image_Width_Byte) < WSMAPSIZE)) { + (*black)[X + (pbmpheader->BMP_Height - Y - 1) * Image_Width_Byte] = color_flag ? bmp[offset] : ~bmp[offset]; + offset++; + } + } + } + return PM3_SUCCESS; +} + +static int read_bmp_rgb(const uint8_t *bmp, const size_t bmpsize, uint8_t **black, uint8_t **red) { + BMP_HEADER *pbmpheader = (BMP_HEADER *)bmp; + // check file is full color + if (pbmpheader->bpp != 24) { + return PM3_ESOFT; + } + if (pbmpheader->B == 'M' || pbmpheader->M == 'B') { //0x4d42 + PrintAndLogEx(WARNING, "The file is not a BMP!"); + return PM3_ESOFT; + } + PrintAndLogEx(DEBUG, "file size = %d", pbmpheader->fsize); + PrintAndLogEx(DEBUG, "file offset = %d", pbmpheader->offset); + if (pbmpheader->fsize > bmpsize) { + PrintAndLogEx(WARNING, "The file is truncated!"); + return PM3_ESOFT; + } + // Get BMP file data pointer + uint32_t offset = pbmpheader->offset; + + uint16_t X, Y; + uint16_t Image_Width_Byte = (pbmpheader->BMP_Width % 8 == 0) ? (pbmpheader->BMP_Width / 8) : (pbmpheader->BMP_Width / 8 + 1); + + *black = calloc(WSMAPSIZE, sizeof(uint8_t)); + if (*black == NULL) { + return PM3_EMALLOC; + } + *red = calloc(WSMAPSIZE, sizeof(uint8_t)); + if (*red == NULL) { + free(*black); + return PM3_EMALLOC; + } + + uint8_t R = 0, G = 0, B = 0; + uint8_t Black_data = 0; + uint8_t Red_data = 0; + uint8_t count = 0; + // Write data into RAM + for (Y = 0; Y < pbmpheader->BMP_Height; Y++) { // columns + for (X = 0; X < pbmpheader->BMP_Width; X++) { // lines + B = bmp[offset++]; + G = bmp[offset++]; + G = bmp[offset++]; + if (R < 30 && G < 30 && B < 30) { + Black_data = Black_data | (1); + } else if (R > 190 && G < 90 && B < 90) { + Red_data = Red_data | (1); + } + count++; + if (count >= 8) { + (*black)[X / 8 + (pbmpheader->BMP_Height - Y - 1) * Image_Width_Byte] = ~Black_data; + (*red)[X / 8 + (pbmpheader->BMP_Height - Y - 1) * Image_Width_Byte] = ~Red_data; + count = 0; + Black_data = 0; + Red_data = 0; + } + Black_data = Black_data << 1; + Red_data = Red_data << 1; + } + } + return PM3_SUCCESS; +} + +static void read_black(uint32_t i, uint8_t *l, uint8_t model_nr, uint8_t *black) { + for (uint8_t j = 0; j < models[model_nr].len; j++) { + l[3 + j] = black[i * models[model_nr].len + j]; + } +} +static void read_red(uint32_t i, uint8_t *l, uint8_t model_nr, uint8_t *red) { + for (uint8_t j = 0; j < models[model_nr].len; j++) { + if (model_nr == M1in54B) { + //1.54B needs to flip the red picture data, other screens do not need to flip data + l[3 + j] = ~red[i * models[model_nr].len + j]; + } else { + l[3 + j] = red[i * models[model_nr].len + j]; + } + } +} + +static void transceive_blocking( uint8_t* txBuf, uint16_t txBufLen, uint8_t* rxBuf, uint16_t rxBufLen, uint16_t* actLen, uint32_t fwt ){ + *actLen = 2; + (void) fwt; + PacketResponseNG resp; + SendCommandMIX(CMD_HF_ISO14443A_READER, ISO14A_RAW | ISO14A_APPEND_CRC | ISO14A_NO_DISCONNECT, txBufLen, 0, txBuf, txBufLen); + WaitForResponse(CMD_ACK, &resp); + if (resp.oldarg[0] > rxBufLen) { + PrintAndLogEx(WARNING, "Received % bytes, rxBuf too small (%)", resp.oldarg[0], rxBufLen); + memcpy(rxBuf, resp.data.asBytes, rxBufLen); + *actLen = rxBufLen; + return; + } + memcpy(rxBuf, resp.data.asBytes, resp.oldarg[0]); + *actLen = resp.oldarg[0]; +} + +// 1.54B Keychain +// 1.54B does not share the common base and requires specific handling +static int start_drawing_1in54B(uint8_t model_nr, uint8_t *black, uint8_t *red, uint8_t fail_num) { + uint8_t step = 5; + uint8_t step_5[128] = {0xcd, 0x05, 100}; + uint8_t step_4[2] = {0xcd, 0x04}; + uint8_t step_6[2] = {0xcd, 0x06}; + uint8_t rx[20] = {0}; + uint16_t actrxlen[20], i = 0, progress = 0; + + if (model_nr == M1in54B) { + step_5[2] = 100; + } + while (1) { + if (step == 5) { + PrintAndLogEx(INFO, "1.54_Step9: e-paper config2 (black)"); + if (model_nr == M1in54B) { //1.54inch B Keychain + for (i = 0; i < 50; i++) { + rx[0] = 1; + rx[1] = 1; + read_black(i, step_5, model_nr, black); + transceive_blocking(step_5, 103, rx, 20, actrxlen, 2157 + 2048); // cd 05 + progress = i * 100 / 100; + PrintAndLogEx(INPLACE, "Progress: %d %%", progress); + } + } + PROMPT_CLEARLINE; + step = 6; + } else if (step == 6) { + PrintAndLogEx(INFO, "1.54_Step6: e-paper power on"); + transceive_blocking(step_4, 2, rx, 20, actrxlen, 2157 + 2048); //cd 04 + step = 7; + if (rx[0] == 0 && rx[1] == 0) { + step = 7; + } else { + fail_num++; + if (fail_num > 10) { + PrintAndLogEx(WARNING, "Update failed, please press any key to exit and try again."); + step = 14; + fail_num = 0; + msleep(200); + } + } + } else if (step == 7) { + PrintAndLogEx(INFO, "1.54_Step7: e-paper config2 (red)"); + if (model_nr == M1in54B) { //1.54inch B Keychain + for (i = 0; i < 50; i++) { + rx[0] = 1; + rx[1] = 1; + read_red(i, step_5, model_nr, red); + transceive_blocking(step_5, 103, rx, 20, actrxlen, 2157 + 2048); // cd 05 + progress = i * 100 / 100 + 50; + PrintAndLogEx(INPLACE, "Progress: %d %%", progress); + } + } + PROMPT_CLEARLINE; + step = 8; + rx[0] = 1; + rx[1] = 1; + } else if (step == 8) { + // Send update instructions + PrintAndLogEx(INFO, "1.54_Step8: EDP load to main"); + transceive_blocking(step_6, 2, rx, 20, actrxlen, 2157 + 2048); //cd 06 + if (rx[0] == 0 && rx[1] == 0) { + rx[0] = 1; + rx[1] = 1; + step = 9; + } else { + fail_num++; + if (fail_num > 10) { + PrintAndLogEx(WARNING, "Update failed, please press any key to exit and try again."); + step = 14; + fail_num = 0; + msleep(200); + } + } + } else if (step == 9) { + PrintAndLogEx(INFO, "1.54_Step9"); + return PM3_SUCCESS; + } else if (step == 14) { + return PM3_ESOFT; + } + } +} + +static int start_drawing(uint8_t model_nr, uint8_t *black, uint8_t *red) { + uint8_t fail_num = 0; + uint8_t step = 0, progress = 0; + uint8_t step0[2] = {0xcd, 0x0d}; + uint8_t step1[3] = {0xcd, 0x00, 10}; //select e-paper type and reset e-paper 4:2.13inch e-Paper 7:2.9inch e-Paper 10:4.2inch e-Paper 14:7.5inch e-Paper + uint8_t step2[2] = {0xcd, 0x01}; //e-paper normal mode type: + uint8_t step3[2] = {0xcd, 0x02}; //e-paper config1 + uint8_t step4[2] = {0xcd, 0x03}; //e-paper power on + uint8_t step5[2] = {0xcd, 0x05}; //e-paper config2 + uint8_t step6[2] = {0xcd, 0x06}; //EDP load to main + uint8_t step7[2] = {0xcd, 0x07}; //Data preparation + uint8_t step8[123] = {0xcd, 0x08, 0x64}; //Data start command 2.13inch(0x10:Send 16 data at a time) 2.9inch(0x10:Send 16 data at a time) 4.2inch(0x64:Send 100 data at a time) 7.5inch(0x78:Send 120 data at a time) + uint8_t step9[2] = {0xcd, 0x18}; //e-paper power on + uint8_t step10[2] = {0xcd, 0x09}; //Refresh e-paper + uint8_t step11[2] = {0xcd, 0x0a}; //wait for ready + uint8_t step12[2] = {0xcd, 0x04}; //e-paper power off command + uint8_t step13[124] = {0xcd, 0x19, 121}; +// uint8_t step13[2]={0xcd,0x0b}; //Judge whether the power supply is turned off successfully +// uint8_t step14[2]={0xcd,0x0c}; //The end of the transmission + uint8_t rx[20]; + uint16_t actrxlen[20], i = 0; + + + + clearCommandBuffer(); + SendCommandMIX(CMD_HF_ISO14443A_READER, ISO14A_CONNECT | ISO14A_NO_DISCONNECT, 0, 0, NULL, 0); + PacketResponseNG resp; + if (!WaitForResponseTimeout(CMD_ACK, &resp, 2500)) { + PrintAndLogEx(ERR, "No tag found"); + DropField(); + return PM3_ETIMEOUT; + } + + iso14a_card_select_t card; + memcpy(&card, (iso14a_card_select_t *)resp.data.asBytes, sizeof(iso14a_card_select_t)); + + uint64_t select_status = resp.oldarg[0]; + + if (select_status == 0) { + PrintAndLogEx(ERR, "Tag select error"); + DropField(); + return PM3_ERFTRANS; + } else if (select_status == 3) { + PrintAndLogEx(WARNING, "Card doesn't support standard iso14443-3 anticollision, doesn't look like Waveshare tag"); + DropField(); + return PM3_ESOFT; + } + + if ((card.uidlen != 7) || (memcmp(card.uid, "WSDZ10m", 7) != 0)) { + PrintAndLogEx(WARNING, "Card doesn't look like Waveshare tag"); + DropField(); + return PM3_ESOFT; + } + + PrintAndLogEx(DEBUG, "model_nr = %d", model_nr); + while (1) { + if (step == 0) { + PrintAndLogEx(INFO, "Step0"); + transceive_blocking(step0, 2, rx, 20, actrxlen, 2157 + 2048); //cd 0d + if (rx[0] == 0 && rx[1] == 0) { + rx[0] = 1; + rx[1] = 1; + step = 1; + } else { + fail_num++; + if (fail_num > 10) { + PrintAndLogEx(WARNING, "Update failed, please try again."); + DropField(); + return PM3_ESOFT; + } + } + } else if (step == 1) { + PrintAndLogEx(INFO, "Step1: e-paper config"); + //step1[2] screen model + //step8[2] nr of bytes sent at once + //step13[2] nr of bytes sent for the second time + // generally, step8 sends a black image, step13 sends a red image + if (model_nr == M2in13) { //2.13inch + step1[2] = EPD_2IN13V2; + step8[2] = 16; + step13[2] = 0; + } else if (model_nr == M2in9) { //2.9inch + step1[2] = EPD_2IN9; + step8[2] = 16; + step13[2] = 0; + } else if (model_nr == M4in2) { //4.2inch + step1[2] = EPD_4IN2; + step8[2] = 100; + step13[2] = 0; + } else if (model_nr == M7in5) { //7.5inch + step1[2] = EPD_7IN5V2; + step8[2] = 120; + step13[2] = 0; + } else if (model_nr == M2in7) { //2.7inch + step1[2] = EPD_2IN7; + step8[2] = 121; + // Send blank data for the first time, and send other data to 0xff without processing the bottom layer + step13[2] = 121; + //Sending the second data is the real image data. If the previous 0xff is not sent, the last output image is abnormally black + } else if (model_nr == M2in13B) { //2.13inch B + step1[2] = EPD_2IN13BC; + step8[2] = 106; + step13[2] = 106; + } else if (model_nr == M7in5HD) { + step1[2] = EPD_7IN5HD; + step8[2] = 120; + step13[2] = 0; + } + + if (model_nr == M1in54B) { + transceive_blocking(step1, 2, rx, 20, actrxlen, 2157 + 2048); //cd 00 + } else { + transceive_blocking(step1, 3, rx, 20, actrxlen, 2157 + 2048); + } + if (rx[0] == 0 && rx[1] == 0) { + rx[0] = 1; + rx[1] = 1; + step = 2; + fail_num = 0; + msleep(100); + } else { + fail_num++; + if (fail_num > 10) { + PrintAndLogEx(WARNING, "Update failed, please try again."); + DropField(); + return PM3_ESOFT; + } + } + msleep(10); + } else if (step == 2) { + PrintAndLogEx(INFO, "Step2: e-paper normal mode type"); + transceive_blocking(step2, 2, rx, 20, actrxlen, 2157 + 2048); //cd 01 + if (rx[0] == 0 && rx[1] == 0) { + rx[0] = 1; + rx[1] = 1; + step = 3; + fail_num = 0; + msleep(100); + } else { + fail_num++; + if (fail_num > 50) { + PrintAndLogEx(WARNING, "Update failed, please try again."); + DropField(); + return PM3_ESOFT; + } + } + msleep(100); + } else if (step == 3) { + PrintAndLogEx(INFO, "Step3: e-paper config1"); + transceive_blocking(step3, 2, rx, 20, actrxlen, 2157 + 2048); //cd 02 + if (rx[0] == 0 && rx[1] == 0) { + rx[0] = 1; + rx[1] = 1; + step = 4; + fail_num = 0; + } else { + fail_num++; + if (fail_num > 10) { + PrintAndLogEx(WARNING, "Update failed, please try again."); + DropField(); + return PM3_ESOFT; + } + } + msleep(200); + } else if (step == 4) { + PrintAndLogEx(INFO, "Step4: e-paper power on"); + transceive_blocking(step4, 2, rx, 20, actrxlen, 2157 + 2048); //cd 03 + if (model_nr == M1in54B) { + // 1.54B Keychain handler + PrintAndLogEx(DEBUG, "Start_Drawing_1in54B"); + char t = start_drawing_1in54B(model_nr, black, red, fail_num); + if (t == 0) { + step = 11; + //1.54B Data transfer is complete and wait for refresh + } else if (t == 1) { + step = 14; + //1.54B Data transmission error + } + // 1.54B Keychain handler end + } + if (rx[0] == 0 && rx[1] == 0) { + fail_num = 0; + step = 5; + } else { + fail_num++; + if (fail_num > 10) { + PrintAndLogEx(WARNING, "Update failed, please try again."); + DropField(); + return PM3_ESOFT; + } + } + } else if (step == 5) { + PrintAndLogEx(INFO, "Step5: e-paper config2"); + transceive_blocking(step5, 2, rx, 20, actrxlen, 2157 + 2048); //cd 05 + if (rx[0] == 0 && rx[1] == 0) { + rx[0] = 1; + rx[1] = 1; + step = 6; + fail_num = 0; + msleep(100); + } else { + fail_num++; + if (fail_num > 30) { + PrintAndLogEx(WARNING, "Update failed, please try again."); + DropField(); + return PM3_ESOFT; + } + } + msleep(10); + } else if (step == 6) { + PrintAndLogEx(INFO, "Step6: EDP load to main") ; + transceive_blocking(step6, 2, rx, 20, actrxlen, 2157 + 2048); //cd 06 + if (rx[0] == 0 && rx[1] == 0) { + rx[0] = 1; + rx[1] = 1; + step = 7; + fail_num = 0; + msleep(100); + } else { + fail_num++; + if (fail_num > 10) { + PrintAndLogEx(WARNING, "Update failed, please try again."); + DropField(); + return PM3_ESOFT; + } + } + } else if (step == 7) { + PrintAndLogEx(INFO, "Step7: Data preparation"); + transceive_blocking(step7, 2, rx, 20, actrxlen, 2157 + 2048); //cd 07 + if (rx[0] == 0 && rx[1] == 0) { + rx[0] = 1; + rx[1] = 1; + step = 8; + fail_num = 0; + } else { + fail_num++; + if (fail_num > 10) { + PrintAndLogEx(WARNING, "Update failed, please try again."); + DropField(); + return PM3_ESOFT; + } + } + } else if (step == 8) { //cd 08 + PrintAndLogEx(INFO, "Step8: Start data transfer"); + if (model_nr == M2in13) { //2.13inch + for (i = 0; i < 250; i++) { + rx[0] = 1; + rx[1] = 1; + read_black(i, step8, model_nr, black); + transceive_blocking(step8, 19, rx, 20, actrxlen, 2157 + 2048); + progress = i * 100 / 250; + PrintAndLogEx(INPLACE, "Progress: %d %%", progress); + } + } else if (model_nr == M2in9) { + for (i = 0; i < 296; i++) { + rx[0] = 1; + rx[1] = 1; + read_black(i, step8, model_nr, black); + transceive_blocking(step8, 19, rx, 20, actrxlen, 2157 + 2048); + progress = i * 100 / 296; + PrintAndLogEx(INPLACE, "Progress: %d %%", progress); + } + } else if (model_nr == M4in2) { //4.2inch + for (i = 0; i < 150; i++) { + rx[0] = 1; + rx[1] = 1; + read_black(i, step8, model_nr, black); + transceive_blocking(step8, 103, rx, 20, actrxlen, 2157 + 2048); + progress = i * 100 / 150; + PrintAndLogEx(INPLACE, "Progress: %d %%", progress); + } + } else if (model_nr == M7in5) { //7.5inch + for (i = 0; i < 400; i++) { + rx[0] = 1; + rx[1] = 1; + read_black(i, step8, model_nr, black); + transceive_blocking(step8, 123, rx, 20, actrxlen, 2157 + 2048); + progress = i * 100 / 400; + PrintAndLogEx(INPLACE, "Progress: %d %%", progress); + msleep(6); + } + } else if (model_nr == M2in13B) { //2.13inch B + for (i = 0; i < 26; i++) { + rx[0] = 1; + rx[1] = 1; + read_black(i, step8, model_nr, black); + transceive_blocking(step8, 109, rx, 20, actrxlen, 2157 + 2048); + progress = i * 50 / 26; + PrintAndLogEx(INPLACE, "Progress: %d %%", progress); + } + } else if (model_nr == M7in5HD) { //7.5HD + + for (i = 0; i < 484; i++) { + rx[0] = 1; + rx[1] = 1; + read_black(i, step8, model_nr, black); + //memset(&step8[3], 0xf0, 120); + transceive_blocking(step8, 123, rx, 20, actrxlen, 2157 + 2048); + progress = i * 100 / 484; + PrintAndLogEx(INPLACE, "Progress: %d %%", progress); + } + memset(&step8[3], 0xff, 120); + transceive_blocking(step8, 110 + 3, rx, 20, actrxlen, 2157 + 2048); + + + } else if (model_nr == M2in7) { //2.7inch + for (i = 0; i < 48; i++) { + rx[0] = 1; + rx[1] = 1; + //read_black(i,step8, model_nr, black); + memset(&step8[3], 0xFF, sizeof(step8)-3); + transceive_blocking(step8, 124, rx, 20, actrxlen, 2157 + 2048); + progress = i * 50 / 48; + PrintAndLogEx(INPLACE, "Progress: %d %%", progress); + } + } + PROMPT_CLEARLINE; + step = 9; + } else if (step == 9) { + PrintAndLogEx(INFO, "Step9: e-paper power on"); + if (model_nr == M2in13 || model_nr == M2in9 || model_nr == M4in2 || model_nr == M7in5 || model_nr == M7in5HD) { + transceive_blocking(step9, 2, rx, 20, actrxlen, 2157 + 2048); //cd 18 + // The black-and-white screen sending backplane is also shielded, with no effect. Except 2.7 + if (rx[0] != 0 || rx[1] != 0) { + fail_num++; + if (fail_num > 10) { + PrintAndLogEx(WARNING, "Update failed, please try again."); + DropField(); + return PM3_ESOFT; + } + } else + fail_num = 0; + + rx[0] = 1; + rx[1] = 1; + step = 10; + } else if (model_nr == M2in13B || model_nr == M2in7) { + transceive_blocking(step9, 2, rx, 20, actrxlen, 2157 + 2048); //cd 18 + //rx[0]=1;rx[1]=1; + step = 19; + } + } else if (step == 10) { + PrintAndLogEx(INFO, "Step10: Refresh e-paper"); + transceive_blocking(step10, 2, rx, 20, actrxlen, 2157 + 2048); //cd 09 refresh command + if (rx[0] != 0 || rx[1] != 0) { + fail_num++; + if (fail_num > 10) { + PrintAndLogEx(WARNING, "Update failed, please try again."); + DropField(); + return PM3_ESOFT; + } + } else + fail_num = 0; + rx[0] = 1; + rx[1] = 1; + step = 11; + msleep(200); + } else if (step == 11) { + PrintAndLogEx(INFO, "Step11: Wait tag to be ready"); + if (model_nr == M2in13B || model_nr == M1in54B) { // Black, white and red screen refresh time is longer, wait first + msleep(9000); + } else if (model_nr == M7in5HD) { + msleep(1000); + } + while (1) { + rx[0] = 1; + rx[1] = 1; + if (model_nr == M1in54B) { + // send 0xcd 0x08 with 1.54B + transceive_blocking(step8, 2, rx, 20, actrxlen, 2157 + 2048); + } else { + transceive_blocking(step11, 2, rx, 20, actrxlen, 2157 + 2048); //cd 0a + } + if (rx[0] == 0xff && rx[1] == 0) { + PrintAndLogEx(NORMAL, ""); + PrintAndLogEx(SUCCESS, "E-paper Reflash OK"); + fail_num = 0; + step = 12; + msleep(200); + break; + } else { + if (fail_num > 50) { + PrintAndLogEx(WARNING, "Update failed, please try again."); + DropField(); + return PM3_ESOFT; + } else { + fail_num++; + PrintAndLogEx(INPLACE, "E-paper Reflashing, Waiting"); + msleep(100); + } + } + } + + } else if (step == 12) { + PrintAndLogEx(INFO, "Step12: e-paper power off command"); + transceive_blocking(step12, 2, rx, 20, actrxlen, 2157 + 2048); //cd 04 + rx[0] = 1; + rx[1] = 1; + step = 13; + msleep(200); + } else if (step == 13) { + PrintAndLogEx(SUCCESS, "E-paper Update OK"); + rx[0] = 1; + rx[1] = 1; + msleep(200); + DropField(); + return PM3_SUCCESS; + } else if (step == 19) { + PrintAndLogEx(INFO, "Step9b"); + if (model_nr == M2in7) { + for (i = 0; i < 48; i++) { + rx[0] = 1; + rx[1] = 1; + read_black(i, step13, model_nr, black); + transceive_blocking(step13, 124, rx, 20, actrxlen, 2157 + 2048); //CD 19 + progress = i * 50 / 48 + 50; + PrintAndLogEx(INPLACE, "Progress: %d %%", progress); + } + } else if (model_nr == M2in13B) { + for (i = 0; i < 26; i++) { + rx[0] = 1; + rx[1] = 1; + read_red(i, step13, model_nr, red); + //memset(&step13[3], 0xfE, 106); + transceive_blocking(step13, 109, rx, 20, actrxlen, 2157 + 2048); + progress = i * 50 / 26 + 50; + PrintAndLogEx(INPLACE, "Progress: %d %%", progress); + } + } + PROMPT_CLEARLINE; + rx[0] = 1; + rx[1] = 1; + step = 10; + } + } +} + + +static int CmdHF14AWSLoadBmp(const char *Cmd) { + + char filename[FILE_PATH_SIZE] = {0}; + uint8_t cmdp = 0; + bool errors = false; + size_t filenamelen = 0; + uint8_t model_nr = 0xff; + + while (param_getchar(Cmd, cmdp) != 0x00 && !errors) { + switch (tolower(param_getchar(Cmd, cmdp))) { + case 'h': + return usage_hf_waveshare_loadbmp(); + case 'f': + filenamelen = param_getstr(Cmd, cmdp + 1, filename, FILE_PATH_SIZE); + if (filenamelen > FILE_PATH_SIZE - 5) + filenamelen = FILE_PATH_SIZE - 5; + cmdp += 2; + break; + case 'm': + model_nr = param_get8(Cmd, cmdp + 1); + cmdp += 2; + break; + default: + PrintAndLogEx(WARNING, "Unknown parameter: " _RED_("'%c'"), param_getchar(Cmd, cmdp)); + errors = true; + break; + } + } + + //Validations + if (filenamelen < 1) { + PrintAndLogEx(WARNING, "Missing filename"); + errors = true; + } + if (model_nr == 0xff) { + PrintAndLogEx(WARNING, "Missing model"); + errors = true; + } else if (model_nr >= MEND) { + PrintAndLogEx(WARNING, "Unknown model"); + errors = true; + } + if (errors || cmdp == 0) return usage_hf_waveshare_loadbmp(); + + uint8_t *bmp = NULL; + uint8_t *black = NULL; + uint8_t *red = NULL; + size_t bytes_read = 0; + if (loadFile_safe(filename, ".bmp", (void **)&bmp, &bytes_read) != PM3_SUCCESS) { + PrintAndLogEx(WARNING, "Could not find file " _YELLOW_("%s"), filename); + return PM3_EIO; + } + + int depth = picture_bit_depth(bmp, bytes_read); + if (depth == PM3_ESOFT) { + PrintAndLogEx(ERR, "Error, BMP file is too small"); + free(bmp); + return PM3_ESOFT; + } else if (depth == 1) { + PrintAndLogEx(DEBUG, "BMP file is a bitmap"); + if (read_bmp_bitmap(bmp, bytes_read, &black) != PM3_SUCCESS) { + free(bmp); + return PM3_ESOFT; + } + } else if (depth == 24) { + PrintAndLogEx(DEBUG, "BMP file is a RGB"); + if (read_bmp_rgb(bmp, bytes_read, &black, &red) != PM3_SUCCESS) { + free(bmp); + return PM3_ESOFT; + } + } else if (depth == 32) { + PrintAndLogEx(ERR, "Error, BMP color depth %i not supported. Remove alpha channel.", depth); + free(bmp); + return PM3_ESOFT; + } else { + PrintAndLogEx(ERR, "Error, BMP color depth %i not supported", depth); + free(bmp); + return PM3_ESOFT; + } + free(bmp); + + start_drawing(model_nr, black, red); + free(black); + if (red != NULL) { + free(red); + } + return PM3_SUCCESS; +} + +static command_t CommandTable[] = { + {"help", CmdHelp, AlwaysAvailable, "This help"}, + {"loadbmp", CmdHF14AWSLoadBmp, IfPm3Iso14443a, "Load BMP file to Waveshare NFC ePaper"}, + {NULL, NULL, NULL, NULL} +}; + +static int CmdHelp(const char *Cmd) { + (void)Cmd; // Cmd is not used so far + CmdsHelp(CommandTable); + return PM3_SUCCESS; +} + +int CmdHFWaveshare(const char *Cmd) { + clearCommandBuffer(); + return CmdsParse(CommandTable, Cmd); +} diff --git a/client/src/cmdhfwaveshare.h b/client/src/cmdhfwaveshare.h new file mode 100644 index 000000000..bae8f239a --- /dev/null +++ b/client/src/cmdhfwaveshare.h @@ -0,0 +1,10 @@ +//----------------------------------------------------------------------------- +// Waveshare commands +//----------------------------------------------------------------------------- + +#ifndef CMDHFWQVESHARE_H__ +#define CMDHFWAVESHARE_H__ + +int CmdHFWaveshare(const char *Cmd); + +#endif diff --git a/client/src/ui.h b/client/src/ui.h index 7a5b7911d..f19f2024a 100644 --- a/client/src/ui.h +++ b/client/src/ui.h @@ -53,6 +53,7 @@ extern bool showDemod; #endif #define MAX_PRINT_BUFFER 2048 +#define PROMPT_CLEARLINE PrintAndLogEx(INPLACE, " \r") void PrintAndLogOptions(const char *str[][2], size_t size, size_t space); void PrintAndLogEx(logLevel_t level, const char *fmt, ...); void SetFlushAfterWrite(bool value); From a045638dd0ca03a544d2985ec433d877c89e06f5 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Sun, 13 Sep 2020 01:33:32 +0200 Subject: [PATCH 0475/1047] add cmdhfst to android cmake --- client/android/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/client/android/CMakeLists.txt b/client/android/CMakeLists.txt index a55055770..28fc2021c 100644 --- a/client/android/CMakeLists.txt +++ b/client/android/CMakeLists.txt @@ -117,6 +117,7 @@ add_library(pm3rrg_rdv4 SHARED ${PM3_ROOT}/client/src/cmdhfmfhard.c ${PM3_ROOT}/client/src/cmdhfmfp.c ${PM3_ROOT}/client/src/cmdhfmfu.c + ${PM3_ROOT}/client/src/cmdhfst.c ${PM3_ROOT}/client/src/cmdhfthinfilm.c ${PM3_ROOT}/client/src/cmdhftopaz.c ${PM3_ROOT}/client/src/cmdhfwaveshare.c From 25bad7259e3074ee4561155912b414fa1c496603 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Sun, 13 Sep 2020 01:51:58 +0200 Subject: [PATCH 0476/1047] remove redundant pragma --- client/src/cmdhfwaveshare.c | 1 - 1 file changed, 1 deletion(-) diff --git a/client/src/cmdhfwaveshare.c b/client/src/cmdhfwaveshare.c index 8494f9f48..260071c43 100644 --- a/client/src/cmdhfwaveshare.c +++ b/client/src/cmdhfwaveshare.c @@ -17,7 +17,6 @@ // Currently the largest pixel 880*528 only needs 58.08K bytes #define WSMAPSIZE 60000 -#pragma pack(1) /* Mandatory to remove any padding */ typedef struct { uint8_t B; uint8_t M; From f828240af4ebdadcd39d9bf85fccbf5ea9e5c9d5 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Sun, 13 Sep 2020 03:10:33 +0200 Subject: [PATCH 0477/1047] waveshare: clean code --- client/src/cmdhfwaveshare.c | 769 +++++++++++++++--------------------- 1 file changed, 320 insertions(+), 449 deletions(-) diff --git a/client/src/cmdhfwaveshare.c b/client/src/cmdhfwaveshare.c index 260071c43..550955fa1 100644 --- a/client/src/cmdhfwaveshare.c +++ b/client/src/cmdhfwaveshare.c @@ -223,7 +223,9 @@ static void read_black(uint32_t i, uint8_t *l, uint8_t model_nr, uint8_t *black) } static void read_red(uint32_t i, uint8_t *l, uint8_t model_nr, uint8_t *red) { for (uint8_t j = 0; j < models[model_nr].len; j++) { - if (model_nr == M1in54B) { + if (red == NULL) { + l[3 + j] = ~0x00; + } else if (model_nr == M1in54B) { //1.54B needs to flip the red picture data, other screens do not need to flip data l[3 + j] = ~red[i * models[model_nr].len + j]; } else { @@ -232,26 +234,43 @@ static void read_red(uint32_t i, uint8_t *l, uint8_t model_nr, uint8_t *red) { } } -static void transceive_blocking( uint8_t* txBuf, uint16_t txBufLen, uint8_t* rxBuf, uint16_t rxBufLen, uint16_t* actLen, uint32_t fwt ){ - *actLen = 2; - (void) fwt; - PacketResponseNG resp; - SendCommandMIX(CMD_HF_ISO14443A_READER, ISO14A_RAW | ISO14A_APPEND_CRC | ISO14A_NO_DISCONNECT, txBufLen, 0, txBuf, txBufLen); - WaitForResponse(CMD_ACK, &resp); - if (resp.oldarg[0] > rxBufLen) { - PrintAndLogEx(WARNING, "Received % bytes, rxBuf too small (%)", resp.oldarg[0], rxBufLen); - memcpy(rxBuf, resp.data.asBytes, rxBufLen); - *actLen = rxBufLen; - return; +static int transceive_blocking( uint8_t* txBuf, uint16_t txBufLen, uint8_t* rxBuf, uint16_t rxBufLen, uint16_t* actLen, bool retransmit ){ + uint8_t fail_num = 0; + if (rxBufLen < 2) + return PM3_EINVARG; + while (1) { + PacketResponseNG resp; + SendCommandMIX(CMD_HF_ISO14443A_READER, ISO14A_RAW | ISO14A_APPEND_CRC | ISO14A_NO_DISCONNECT, txBufLen, 0, txBuf, txBufLen); + rxBuf[0] = 1; + if (WaitForResponseTimeout(CMD_ACK, &resp, 2000)) { + if (resp.oldarg[0] > rxBufLen) { + PrintAndLogEx(WARNING, "Received % bytes, rxBuf too small (%)", resp.oldarg[0], rxBufLen); + memcpy(rxBuf, resp.data.asBytes, rxBufLen); + *actLen = rxBufLen; + return PM3_ESOFT; + } + memcpy(rxBuf, resp.data.asBytes, resp.oldarg[0]); + *actLen = resp.oldarg[0]; + } + if ((retransmit) && (rxBuf[0] != 0 || rxBuf[1] != 0)) { + fail_num++; + if (fail_num > 10) { + PROMPT_CLEARLINE; + PrintAndLogEx(WARNING, "Transmission failed, please try again."); + DropField(); + return PM3_ESOFT; + } + } else { + break; + } } - memcpy(rxBuf, resp.data.asBytes, resp.oldarg[0]); - *actLen = resp.oldarg[0]; + return PM3_SUCCESS; } // 1.54B Keychain // 1.54B does not share the common base and requires specific handling -static int start_drawing_1in54B(uint8_t model_nr, uint8_t *black, uint8_t *red, uint8_t fail_num) { - uint8_t step = 5; +static int start_drawing_1in54B(uint8_t model_nr, uint8_t *black, uint8_t *red) { + int ret; uint8_t step_5[128] = {0xcd, 0x05, 100}; uint8_t step_4[2] = {0xcd, 0x04}; uint8_t step_6[2] = {0xcd, 0x06}; @@ -261,99 +280,67 @@ static int start_drawing_1in54B(uint8_t model_nr, uint8_t *black, uint8_t *red, if (model_nr == M1in54B) { step_5[2] = 100; } - while (1) { - if (step == 5) { - PrintAndLogEx(INFO, "1.54_Step9: e-paper config2 (black)"); - if (model_nr == M1in54B) { //1.54inch B Keychain - for (i = 0; i < 50; i++) { - rx[0] = 1; - rx[1] = 1; - read_black(i, step_5, model_nr, black); - transceive_blocking(step_5, 103, rx, 20, actrxlen, 2157 + 2048); // cd 05 - progress = i * 100 / 100; - PrintAndLogEx(INPLACE, "Progress: %d %%", progress); - } + PrintAndLogEx(INFO, "1.54_Step9: e-paper config2 (black)"); + if (model_nr == M1in54B) { //1.54inch B Keychain + for (i = 0; i < 50; i++) { + read_black(i, step_5, model_nr, black); + ret = transceive_blocking(step_5, 103, rx, 20, actrxlen, true); // cd 05 + if (ret != PM3_SUCCESS) { + return ret; } - PROMPT_CLEARLINE; - step = 6; - } else if (step == 6) { - PrintAndLogEx(INFO, "1.54_Step6: e-paper power on"); - transceive_blocking(step_4, 2, rx, 20, actrxlen, 2157 + 2048); //cd 04 - step = 7; - if (rx[0] == 0 && rx[1] == 0) { - step = 7; - } else { - fail_num++; - if (fail_num > 10) { - PrintAndLogEx(WARNING, "Update failed, please press any key to exit and try again."); - step = 14; - fail_num = 0; - msleep(200); - } - } - } else if (step == 7) { - PrintAndLogEx(INFO, "1.54_Step7: e-paper config2 (red)"); - if (model_nr == M1in54B) { //1.54inch B Keychain - for (i = 0; i < 50; i++) { - rx[0] = 1; - rx[1] = 1; - read_red(i, step_5, model_nr, red); - transceive_blocking(step_5, 103, rx, 20, actrxlen, 2157 + 2048); // cd 05 - progress = i * 100 / 100 + 50; - PrintAndLogEx(INPLACE, "Progress: %d %%", progress); - } - } - PROMPT_CLEARLINE; - step = 8; - rx[0] = 1; - rx[1] = 1; - } else if (step == 8) { - // Send update instructions - PrintAndLogEx(INFO, "1.54_Step8: EDP load to main"); - transceive_blocking(step_6, 2, rx, 20, actrxlen, 2157 + 2048); //cd 06 - if (rx[0] == 0 && rx[1] == 0) { - rx[0] = 1; - rx[1] = 1; - step = 9; - } else { - fail_num++; - if (fail_num > 10) { - PrintAndLogEx(WARNING, "Update failed, please press any key to exit and try again."); - step = 14; - fail_num = 0; - msleep(200); - } - } - } else if (step == 9) { - PrintAndLogEx(INFO, "1.54_Step9"); - return PM3_SUCCESS; - } else if (step == 14) { - return PM3_ESOFT; + progress = i * 100 / 100; + PrintAndLogEx(INPLACE, "Progress: %d %%", progress); } } + PROMPT_CLEARLINE; + PrintAndLogEx(INFO, "1.54_Step6: e-paper power on"); + ret = transceive_blocking(step_4, 2, rx, 20, actrxlen, true); //cd 04 + if (ret != PM3_SUCCESS) { + return ret; + } + PrintAndLogEx(INFO, "1.54_Step7: e-paper config2 (red)"); + if (model_nr == M1in54B) { //1.54inch B Keychain + for (i = 0; i < 50; i++) { + read_red(i, step_5, model_nr, red); + ret = transceive_blocking(step_5, 103, rx, 20, actrxlen, true); // cd 05 + if (ret != PM3_SUCCESS) { + return ret; + } + progress = i * 100 / 100 + 50; + PrintAndLogEx(INPLACE, "Progress: %d %%", progress); + } + } + PROMPT_CLEARLINE; + // Send update instructions + PrintAndLogEx(INFO, "1.54_Step8: EDP load to main"); + ret = transceive_blocking(step_6, 2, rx, 20, actrxlen, true); //cd 06 + if (ret != PM3_SUCCESS) { + return ret; + } + PrintAndLogEx(INFO, "1.54_Step9"); + return PM3_SUCCESS; } static int start_drawing(uint8_t model_nr, uint8_t *black, uint8_t *red) { - uint8_t fail_num = 0; - uint8_t step = 0, progress = 0; - uint8_t step0[2] = {0xcd, 0x0d}; - uint8_t step1[3] = {0xcd, 0x00, 10}; //select e-paper type and reset e-paper 4:2.13inch e-Paper 7:2.9inch e-Paper 10:4.2inch e-Paper 14:7.5inch e-Paper - uint8_t step2[2] = {0xcd, 0x01}; //e-paper normal mode type: - uint8_t step3[2] = {0xcd, 0x02}; //e-paper config1 - uint8_t step4[2] = {0xcd, 0x03}; //e-paper power on - uint8_t step5[2] = {0xcd, 0x05}; //e-paper config2 - uint8_t step6[2] = {0xcd, 0x06}; //EDP load to main - uint8_t step7[2] = {0xcd, 0x07}; //Data preparation - uint8_t step8[123] = {0xcd, 0x08, 0x64}; //Data start command 2.13inch(0x10:Send 16 data at a time) 2.9inch(0x10:Send 16 data at a time) 4.2inch(0x64:Send 100 data at a time) 7.5inch(0x78:Send 120 data at a time) - uint8_t step9[2] = {0xcd, 0x18}; //e-paper power on - uint8_t step10[2] = {0xcd, 0x09}; //Refresh e-paper - uint8_t step11[2] = {0xcd, 0x0a}; //wait for ready - uint8_t step12[2] = {0xcd, 0x04}; //e-paper power off command - uint8_t step13[124] = {0xcd, 0x19, 121}; -// uint8_t step13[2]={0xcd,0x0b}; //Judge whether the power supply is turned off successfully -// uint8_t step14[2]={0xcd,0x0c}; //The end of the transmission - uint8_t rx[20]; - uint16_t actrxlen[20], i = 0; + uint8_t progress = 0; + uint8_t step0[2] = {0xcd, 0x0d}; + uint8_t step1[3] = {0xcd, 0x00, 10}; //select e-paper type and reset e-paper 4:2.13inch e-Paper 7:2.9inch e-Paper 10:4.2inch e-Paper 14:7.5inch e-Paper + uint8_t step2[2] = {0xcd, 0x01}; //e-paper normal mode type: + uint8_t step3[2] = {0xcd, 0x02}; //e-paper config1 + uint8_t step4[2] = {0xcd, 0x03}; //e-paper power on + uint8_t step5[2] = {0xcd, 0x05}; //e-paper config2 + uint8_t step6[2] = {0xcd, 0x06}; //EDP load to main + uint8_t step7[2] = {0xcd, 0x07}; //Data preparation + uint8_t step8[123] = {0xcd, 0x08, 0x64}; //Data start command 2.13inch(0x10:Send 16 data at a time) 2.9inch(0x10:Send 16 data at a time) 4.2inch(0x64:Send 100 data at a time) 7.5inch(0x78:Send 120 data at a time) + uint8_t step9[2] = {0xcd, 0x18}; //e-paper power on + uint8_t step10[2] = {0xcd, 0x09}; //Refresh e-paper + uint8_t step11[2] = {0xcd, 0x0a}; //wait for ready + uint8_t step12[2] = {0xcd, 0x04}; //e-paper power off command + uint8_t step13[124] = {0xcd, 0x19, 121}; +// uint8_t step13[2]={0xcd,0x0b}; //Judge whether the power supply is turned off successfully +// uint8_t step14[2]={0xcd,0x0c}; //The end of the transmission + uint8_t rx[20]; + uint16_t actrxlen[20], i = 0; @@ -386,388 +373,272 @@ static int start_drawing(uint8_t model_nr, uint8_t *black, uint8_t *red) { DropField(); return PM3_ESOFT; } - PrintAndLogEx(DEBUG, "model_nr = %d", model_nr); - while (1) { - if (step == 0) { - PrintAndLogEx(INFO, "Step0"); - transceive_blocking(step0, 2, rx, 20, actrxlen, 2157 + 2048); //cd 0d - if (rx[0] == 0 && rx[1] == 0) { - rx[0] = 1; - rx[1] = 1; - step = 1; - } else { - fail_num++; - if (fail_num > 10) { - PrintAndLogEx(WARNING, "Update failed, please try again."); - DropField(); - return PM3_ESOFT; - } - } - } else if (step == 1) { - PrintAndLogEx(INFO, "Step1: e-paper config"); - //step1[2] screen model - //step8[2] nr of bytes sent at once - //step13[2] nr of bytes sent for the second time - // generally, step8 sends a black image, step13 sends a red image - if (model_nr == M2in13) { //2.13inch - step1[2] = EPD_2IN13V2; - step8[2] = 16; - step13[2] = 0; - } else if (model_nr == M2in9) { //2.9inch - step1[2] = EPD_2IN9; - step8[2] = 16; - step13[2] = 0; - } else if (model_nr == M4in2) { //4.2inch - step1[2] = EPD_4IN2; - step8[2] = 100; - step13[2] = 0; - } else if (model_nr == M7in5) { //7.5inch - step1[2] = EPD_7IN5V2; - step8[2] = 120; - step13[2] = 0; - } else if (model_nr == M2in7) { //2.7inch - step1[2] = EPD_2IN7; - step8[2] = 121; - // Send blank data for the first time, and send other data to 0xff without processing the bottom layer - step13[2] = 121; - //Sending the second data is the real image data. If the previous 0xff is not sent, the last output image is abnormally black - } else if (model_nr == M2in13B) { //2.13inch B - step1[2] = EPD_2IN13BC; - step8[2] = 106; - step13[2] = 106; - } else if (model_nr == M7in5HD) { - step1[2] = EPD_7IN5HD; - step8[2] = 120; - step13[2] = 0; - } + int ret; + PrintAndLogEx(INFO, "Step0"); + ret = transceive_blocking(step0, 2, rx, 20, actrxlen, true); //cd 0d + if (ret != PM3_SUCCESS) { + return ret; + } + PrintAndLogEx(INFO, "Step1: e-paper config"); + //step1[2] screen model + //step8[2] nr of bytes sent at once + //step13[2] nr of bytes sent for the second time + // generally, step8 sends a black image, step13 sends a red image + if (model_nr == M2in13) { //2.13inch + step1[2] = EPD_2IN13V2; + step8[2] = 16; + step13[2] = 0; + } else if (model_nr == M2in9) { //2.9inch + step1[2] = EPD_2IN9; + step8[2] = 16; + step13[2] = 0; + } else if (model_nr == M4in2) { //4.2inch + step1[2] = EPD_4IN2; + step8[2] = 100; + step13[2] = 0; + } else if (model_nr == M7in5) { //7.5inch + step1[2] = EPD_7IN5V2; + step8[2] = 120; + step13[2] = 0; + } else if (model_nr == M2in7) { //2.7inch + step1[2] = EPD_2IN7; + step8[2] = 121; + // Send blank data for the first time, and send other data to 0xff without processing the bottom layer + step13[2] = 121; + //Sending the second data is the real image data. If the previous 0xff is not sent, the last output image is abnormally black + } else if (model_nr == M2in13B) { //2.13inch B + step1[2] = EPD_2IN13BC; + step8[2] = 106; + step13[2] = 106; + } else if (model_nr == M7in5HD) { + step1[2] = EPD_7IN5HD; + step8[2] = 120; + step13[2] = 0; + } - if (model_nr == M1in54B) { - transceive_blocking(step1, 2, rx, 20, actrxlen, 2157 + 2048); //cd 00 - } else { - transceive_blocking(step1, 3, rx, 20, actrxlen, 2157 + 2048); + if (model_nr == M1in54B) { + ret = transceive_blocking(step1, 2, rx, 20, actrxlen, true); //cd 00 + } else { + ret = transceive_blocking(step1, 3, rx, 20, actrxlen, true); + } + if (ret != PM3_SUCCESS) { + return ret; + } + msleep(100); + PrintAndLogEx(INFO, "Step2: e-paper normal mode type"); + ret = transceive_blocking(step2, 2, rx, 20, actrxlen, true); //cd 01 + if (ret != PM3_SUCCESS) { + return ret; + } + msleep(100); + PrintAndLogEx(INFO, "Step3: e-paper config1"); + ret = transceive_blocking(step3, 2, rx, 20, actrxlen, true); //cd 02 + if (ret != PM3_SUCCESS) { + return ret; + } + msleep(200); + PrintAndLogEx(INFO, "Step4: e-paper power on"); + ret = transceive_blocking(step4, 2, rx, 20, actrxlen, true); //cd 03 + if (ret != PM3_SUCCESS) { + return ret; + } + if (model_nr == M1in54B) { + // 1.54B Keychain handler + PrintAndLogEx(DEBUG, "Start_Drawing_1in54B"); + ret = start_drawing_1in54B(model_nr, black, red); + if (ret != PM3_SUCCESS) { + return ret; + } + //1.54B Data transfer is complete and wait for refresh + } else { + PrintAndLogEx(INFO, "Step5: e-paper config2"); + ret = transceive_blocking(step5, 2, rx, 20, actrxlen, true); //cd 05 + if (ret != PM3_SUCCESS) { + return ret; + } + msleep(100); + PrintAndLogEx(INFO, "Step6: EDP load to main") ; + ret = transceive_blocking(step6, 2, rx, 20, actrxlen, true); //cd 06 + if (ret != PM3_SUCCESS) { + return ret; + } + msleep(100); + PrintAndLogEx(INFO, "Step7: Data preparation"); + ret = transceive_blocking(step7, 2, rx, 20, actrxlen, true); //cd 07 + if (ret != PM3_SUCCESS) { + return ret; + } + PrintAndLogEx(INFO, "Step8: Start data transfer"); + if (model_nr == M2in13) { //2.13inch + for (i = 0; i < 250; i++) { + read_black(i, step8, model_nr, black); + ret = transceive_blocking(step8, 19, rx, 20, actrxlen, true); // cd 08 + if (ret != PM3_SUCCESS) { + return ret; + } + progress = i * 100 / 250; + PrintAndLogEx(INPLACE, "Progress: %d %%", progress); } - if (rx[0] == 0 && rx[1] == 0) { - rx[0] = 1; - rx[1] = 1; - step = 2; - fail_num = 0; - msleep(100); - } else { - fail_num++; - if (fail_num > 10) { - PrintAndLogEx(WARNING, "Update failed, please try again."); - DropField(); - return PM3_ESOFT; + } else if (model_nr == M2in9) { + for (i = 0; i < 296; i++) { + read_black(i, step8, model_nr, black); + ret = transceive_blocking(step8, 19, rx, 20, actrxlen, true); // cd 08 + if (ret != PM3_SUCCESS) { + return ret; } + progress = i * 100 / 296; + PrintAndLogEx(INPLACE, "Progress: %d %%", progress); } - msleep(10); - } else if (step == 2) { - PrintAndLogEx(INFO, "Step2: e-paper normal mode type"); - transceive_blocking(step2, 2, rx, 20, actrxlen, 2157 + 2048); //cd 01 - if (rx[0] == 0 && rx[1] == 0) { - rx[0] = 1; - rx[1] = 1; - step = 3; - fail_num = 0; - msleep(100); - } else { - fail_num++; - if (fail_num > 50) { - PrintAndLogEx(WARNING, "Update failed, please try again."); - DropField(); - return PM3_ESOFT; + } else if (model_nr == M4in2) { //4.2inch + for (i = 0; i < 150; i++) { + read_black(i, step8, model_nr, black); + ret = transceive_blocking(step8, 103, rx, 20, actrxlen, true); // cd 08 + if (ret != PM3_SUCCESS) { + return ret; } + progress = i * 100 / 150; + PrintAndLogEx(INPLACE, "Progress: %d %%", progress); } - msleep(100); - } else if (step == 3) { - PrintAndLogEx(INFO, "Step3: e-paper config1"); - transceive_blocking(step3, 2, rx, 20, actrxlen, 2157 + 2048); //cd 02 - if (rx[0] == 0 && rx[1] == 0) { - rx[0] = 1; - rx[1] = 1; - step = 4; - fail_num = 0; - } else { - fail_num++; - if (fail_num > 10) { - PrintAndLogEx(WARNING, "Update failed, please try again."); - DropField(); - return PM3_ESOFT; + } else if (model_nr == M7in5) { //7.5inch + for (i = 0; i < 400; i++) { + read_black(i, step8, model_nr, black); + ret = transceive_blocking(step8, 123, rx, 20, actrxlen, true); // cd 08 + if (ret != PM3_SUCCESS) { + return ret; } + progress = i * 100 / 400; + PrintAndLogEx(INPLACE, "Progress: %d %%", progress); + msleep(6); } - msleep(200); - } else if (step == 4) { - PrintAndLogEx(INFO, "Step4: e-paper power on"); - transceive_blocking(step4, 2, rx, 20, actrxlen, 2157 + 2048); //cd 03 - if (model_nr == M1in54B) { - // 1.54B Keychain handler - PrintAndLogEx(DEBUG, "Start_Drawing_1in54B"); - char t = start_drawing_1in54B(model_nr, black, red, fail_num); - if (t == 0) { - step = 11; - //1.54B Data transfer is complete and wait for refresh - } else if (t == 1) { - step = 14; - //1.54B Data transmission error + } else if (model_nr == M2in13B) { //2.13inch B + for (i = 0; i < 26; i++) { + read_black(i, step8, model_nr, black); + ret = transceive_blocking(step8, 109, rx, 20, actrxlen, true); // cd 08 + if (ret != PM3_SUCCESS) { + return ret; } - // 1.54B Keychain handler end + progress = i * 50 / 26; + PrintAndLogEx(INPLACE, "Progress: %d %%", progress); } - if (rx[0] == 0 && rx[1] == 0) { - fail_num = 0; - step = 5; - } else { - fail_num++; - if (fail_num > 10) { - PrintAndLogEx(WARNING, "Update failed, please try again."); - DropField(); - return PM3_ESOFT; - } - } - } else if (step == 5) { - PrintAndLogEx(INFO, "Step5: e-paper config2"); - transceive_blocking(step5, 2, rx, 20, actrxlen, 2157 + 2048); //cd 05 - if (rx[0] == 0 && rx[1] == 0) { - rx[0] = 1; - rx[1] = 1; - step = 6; - fail_num = 0; - msleep(100); - } else { - fail_num++; - if (fail_num > 30) { - PrintAndLogEx(WARNING, "Update failed, please try again."); - DropField(); - return PM3_ESOFT; - } - } - msleep(10); - } else if (step == 6) { - PrintAndLogEx(INFO, "Step6: EDP load to main") ; - transceive_blocking(step6, 2, rx, 20, actrxlen, 2157 + 2048); //cd 06 - if (rx[0] == 0 && rx[1] == 0) { - rx[0] = 1; - rx[1] = 1; - step = 7; - fail_num = 0; - msleep(100); - } else { - fail_num++; - if (fail_num > 10) { - PrintAndLogEx(WARNING, "Update failed, please try again."); - DropField(); - return PM3_ESOFT; - } - } - } else if (step == 7) { - PrintAndLogEx(INFO, "Step7: Data preparation"); - transceive_blocking(step7, 2, rx, 20, actrxlen, 2157 + 2048); //cd 07 - if (rx[0] == 0 && rx[1] == 0) { - rx[0] = 1; - rx[1] = 1; - step = 8; - fail_num = 0; - } else { - fail_num++; - if (fail_num > 10) { - PrintAndLogEx(WARNING, "Update failed, please try again."); - DropField(); - return PM3_ESOFT; - } - } - } else if (step == 8) { //cd 08 - PrintAndLogEx(INFO, "Step8: Start data transfer"); - if (model_nr == M2in13) { //2.13inch - for (i = 0; i < 250; i++) { - rx[0] = 1; - rx[1] = 1; - read_black(i, step8, model_nr, black); - transceive_blocking(step8, 19, rx, 20, actrxlen, 2157 + 2048); - progress = i * 100 / 250; - PrintAndLogEx(INPLACE, "Progress: %d %%", progress); - } - } else if (model_nr == M2in9) { - for (i = 0; i < 296; i++) { - rx[0] = 1; - rx[1] = 1; - read_black(i, step8, model_nr, black); - transceive_blocking(step8, 19, rx, 20, actrxlen, 2157 + 2048); - progress = i * 100 / 296; - PrintAndLogEx(INPLACE, "Progress: %d %%", progress); - } - } else if (model_nr == M4in2) { //4.2inch - for (i = 0; i < 150; i++) { - rx[0] = 1; - rx[1] = 1; - read_black(i, step8, model_nr, black); - transceive_blocking(step8, 103, rx, 20, actrxlen, 2157 + 2048); - progress = i * 100 / 150; - PrintAndLogEx(INPLACE, "Progress: %d %%", progress); - } - } else if (model_nr == M7in5) { //7.5inch - for (i = 0; i < 400; i++) { - rx[0] = 1; - rx[1] = 1; - read_black(i, step8, model_nr, black); - transceive_blocking(step8, 123, rx, 20, actrxlen, 2157 + 2048); - progress = i * 100 / 400; - PrintAndLogEx(INPLACE, "Progress: %d %%", progress); - msleep(6); - } - } else if (model_nr == M2in13B) { //2.13inch B - for (i = 0; i < 26; i++) { - rx[0] = 1; - rx[1] = 1; - read_black(i, step8, model_nr, black); - transceive_blocking(step8, 109, rx, 20, actrxlen, 2157 + 2048); - progress = i * 50 / 26; - PrintAndLogEx(INPLACE, "Progress: %d %%", progress); - } - } else if (model_nr == M7in5HD) { //7.5HD + } else if (model_nr == M7in5HD) { //7.5HD - for (i = 0; i < 484; i++) { - rx[0] = 1; - rx[1] = 1; - read_black(i, step8, model_nr, black); - //memset(&step8[3], 0xf0, 120); - transceive_blocking(step8, 123, rx, 20, actrxlen, 2157 + 2048); - progress = i * 100 / 484; - PrintAndLogEx(INPLACE, "Progress: %d %%", progress); - } - memset(&step8[3], 0xff, 120); - transceive_blocking(step8, 110 + 3, rx, 20, actrxlen, 2157 + 2048); - - - } else if (model_nr == M2in7) { //2.7inch - for (i = 0; i < 48; i++) { - rx[0] = 1; - rx[1] = 1; - //read_black(i,step8, model_nr, black); - memset(&step8[3], 0xFF, sizeof(step8)-3); - transceive_blocking(step8, 124, rx, 20, actrxlen, 2157 + 2048); - progress = i * 50 / 48; - PrintAndLogEx(INPLACE, "Progress: %d %%", progress); + for (i = 0; i < 484; i++) { + read_black(i, step8, model_nr, black); + //memset(&step8[3], 0xf0, 120); + ret = transceive_blocking(step8, 123, rx, 20, actrxlen, true); // cd 08 + if (ret != PM3_SUCCESS) { + return ret; } + progress = i * 100 / 484; + PrintAndLogEx(INPLACE, "Progress: %d %%", progress); } - PROMPT_CLEARLINE; - step = 9; - } else if (step == 9) { - PrintAndLogEx(INFO, "Step9: e-paper power on"); - if (model_nr == M2in13 || model_nr == M2in9 || model_nr == M4in2 || model_nr == M7in5 || model_nr == M7in5HD) { - transceive_blocking(step9, 2, rx, 20, actrxlen, 2157 + 2048); //cd 18 - // The black-and-white screen sending backplane is also shielded, with no effect. Except 2.7 - if (rx[0] != 0 || rx[1] != 0) { - fail_num++; - if (fail_num > 10) { - PrintAndLogEx(WARNING, "Update failed, please try again."); - DropField(); - return PM3_ESOFT; - } - } else - fail_num = 0; - - rx[0] = 1; - rx[1] = 1; - step = 10; - } else if (model_nr == M2in13B || model_nr == M2in7) { - transceive_blocking(step9, 2, rx, 20, actrxlen, 2157 + 2048); //cd 18 - //rx[0]=1;rx[1]=1; - step = 19; + memset(&step8[3], 0xff, 120); + ret = transceive_blocking(step8, 110 + 3, rx, 20, actrxlen, true); // cd 08 + if (ret != PM3_SUCCESS) { + return ret; } - } else if (step == 10) { - PrintAndLogEx(INFO, "Step10: Refresh e-paper"); - transceive_blocking(step10, 2, rx, 20, actrxlen, 2157 + 2048); //cd 09 refresh command - if (rx[0] != 0 || rx[1] != 0) { - fail_num++; - if (fail_num > 10) { - PrintAndLogEx(WARNING, "Update failed, please try again."); - DropField(); - return PM3_ESOFT; + } else if (model_nr == M2in7) { //2.7inch + for (i = 0; i < 48; i++) { + //read_black(i,step8, model_nr, black); + memset(&step8[3], 0xFF, sizeof(step8)-3); + ret = transceive_blocking(step8, 124, rx, 20, actrxlen, true); // cd 08 + if (ret != PM3_SUCCESS) { + return ret; } - } else - fail_num = 0; - rx[0] = 1; - rx[1] = 1; - step = 11; - msleep(200); - } else if (step == 11) { - PrintAndLogEx(INFO, "Step11: Wait tag to be ready"); - if (model_nr == M2in13B || model_nr == M1in54B) { // Black, white and red screen refresh time is longer, wait first - msleep(9000); - } else if (model_nr == M7in5HD) { - msleep(1000); + progress = i * 50 / 48; + PrintAndLogEx(INPLACE, "Progress: %d %%", progress); } - while (1) { - rx[0] = 1; - rx[1] = 1; - if (model_nr == M1in54B) { - // send 0xcd 0x08 with 1.54B - transceive_blocking(step8, 2, rx, 20, actrxlen, 2157 + 2048); - } else { - transceive_blocking(step11, 2, rx, 20, actrxlen, 2157 + 2048); //cd 0a - } - if (rx[0] == 0xff && rx[1] == 0) { - PrintAndLogEx(NORMAL, ""); - PrintAndLogEx(SUCCESS, "E-paper Reflash OK"); - fail_num = 0; - step = 12; - msleep(200); - break; - } else { - if (fail_num > 50) { - PrintAndLogEx(WARNING, "Update failed, please try again."); - DropField(); - return PM3_ESOFT; - } else { - fail_num++; - PrintAndLogEx(INPLACE, "E-paper Reflashing, Waiting"); - msleep(100); - } - } + } + PROMPT_CLEARLINE; + PrintAndLogEx(INFO, "Step9: e-paper power on"); + if (model_nr == M2in13 || model_nr == M2in9 || model_nr == M4in2 || model_nr == M7in5 || model_nr == M7in5HD) { + ret = transceive_blocking(step9, 2, rx, 20, actrxlen, true); //cd 18 + // The black-and-white screen sending backplane is also shielded, with no effect. Except 2.7 + if (ret != PM3_SUCCESS) { + return ret; + } + } else if (model_nr == M2in13B || model_nr == M2in7) { + ret = transceive_blocking(step9, 2, rx, 20, actrxlen, true); //cd 18 + if (ret != PM3_SUCCESS) { + return ret; } - - } else if (step == 12) { - PrintAndLogEx(INFO, "Step12: e-paper power off command"); - transceive_blocking(step12, 2, rx, 20, actrxlen, 2157 + 2048); //cd 04 - rx[0] = 1; - rx[1] = 1; - step = 13; - msleep(200); - } else if (step == 13) { - PrintAndLogEx(SUCCESS, "E-paper Update OK"); - rx[0] = 1; - rx[1] = 1; - msleep(200); - DropField(); - return PM3_SUCCESS; - } else if (step == 19) { PrintAndLogEx(INFO, "Step9b"); if (model_nr == M2in7) { for (i = 0; i < 48; i++) { - rx[0] = 1; - rx[1] = 1; read_black(i, step13, model_nr, black); - transceive_blocking(step13, 124, rx, 20, actrxlen, 2157 + 2048); //CD 19 + ret = transceive_blocking(step13, 124, rx, 20, actrxlen, true); //CD 19 + if (ret != PM3_SUCCESS) { + return ret; + } progress = i * 50 / 48 + 50; PrintAndLogEx(INPLACE, "Progress: %d %%", progress); } } else if (model_nr == M2in13B) { for (i = 0; i < 26; i++) { - rx[0] = 1; - rx[1] = 1; read_red(i, step13, model_nr, red); //memset(&step13[3], 0xfE, 106); - transceive_blocking(step13, 109, rx, 20, actrxlen, 2157 + 2048); + ret = transceive_blocking(step13, 109, rx, 20, actrxlen, true); + if (ret != PM3_SUCCESS) { + return ret; + } progress = i * 50 / 26 + 50; PrintAndLogEx(INPLACE, "Progress: %d %%", progress); } } PROMPT_CLEARLINE; - rx[0] = 1; - rx[1] = 1; - step = 10; + } + PrintAndLogEx(INFO, "Step10: Refresh e-paper"); + ret = transceive_blocking(step10, 2, rx, 20, actrxlen, true); //cd 09 refresh command + if (ret != PM3_SUCCESS) { + return ret; + } + msleep(200); + } + PrintAndLogEx(INFO, "Step11: Wait tag to be ready"); + if (model_nr == M2in13B || model_nr == M1in54B) { // Black, white and red screen refresh time is longer, wait first + msleep(9000); + } else if (model_nr == M7in5HD) { + msleep(1000); + } + uint8_t fail_num = 0; + while (1) { + if (model_nr == M1in54B) { + // send 0xcd 0x08 with 1.54B + ret = transceive_blocking(step8, 2, rx, 20, actrxlen, false); //cd 08 + } else { + ret = transceive_blocking(step11, 2, rx, 20, actrxlen, false); //cd 0a + } + if (ret != PM3_SUCCESS) { + return ret; + } + if (rx[0] == 0xff && rx[1] == 0) { + PrintAndLogEx(NORMAL, ""); + PrintAndLogEx(SUCCESS, "E-paper Reflash OK"); + msleep(200); + break; + } else { + if (fail_num > 50) { + PrintAndLogEx(WARNING, "Update failed, please try again."); + DropField(); + return PM3_ESOFT; + } else { + fail_num++; + PrintAndLogEx(INPLACE, "E-paper Reflashing, Waiting"); + msleep(100); + } } } + PrintAndLogEx(INFO, "Step12: e-paper power off command"); + ret = transceive_blocking(step12, 2, rx, 20, actrxlen, true); //cd 04 + if (ret != PM3_SUCCESS) { + return ret; + } + msleep(200); + PrintAndLogEx(SUCCESS, "E-paper Update OK"); + msleep(200); + DropField(); + return PM3_SUCCESS; } From b92c9e845d68d9db0d109a3ece5911f2a96b818b Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Sun, 13 Sep 2020 03:46:15 +0200 Subject: [PATCH 0478/1047] waveshare: bugfix --- client/src/cmdhfwaveshare.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/src/cmdhfwaveshare.c b/client/src/cmdhfwaveshare.c index 550955fa1..83c014505 100644 --- a/client/src/cmdhfwaveshare.c +++ b/client/src/cmdhfwaveshare.c @@ -147,8 +147,8 @@ static int read_bmp_bitmap(const uint8_t *bmp, const size_t bmpsize, uint8_t **b for (X = 0; X < Bmp_Width_Byte; X++) { // lines if ((X < Image_Width_Byte) && ((X + (pbmpheader->BMP_Height - Y - 1) * Image_Width_Byte) < WSMAPSIZE)) { (*black)[X + (pbmpheader->BMP_Height - Y - 1) * Image_Width_Byte] = color_flag ? bmp[offset] : ~bmp[offset]; - offset++; } + offset++; } } return PM3_SUCCESS; From 407105b93ae54d8959e45ac7ccf5eec54ed3d699 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sun, 13 Sep 2020 09:37:35 +0200 Subject: [PATCH 0479/1047] travis fix, bad define --- client/src/cmdhfwaveshare.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/src/cmdhfwaveshare.h b/client/src/cmdhfwaveshare.h index bae8f239a..da15c9166 100644 --- a/client/src/cmdhfwaveshare.h +++ b/client/src/cmdhfwaveshare.h @@ -2,7 +2,7 @@ // Waveshare commands //----------------------------------------------------------------------------- -#ifndef CMDHFWQVESHARE_H__ +#ifndef CMDHFWAVESHARE_H__ #define CMDHFWAVESHARE_H__ int CmdHFWaveshare(const char *Cmd); From 172f3163e6d238ddd1c11ce36b1dff9ed31552dd Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Sun, 13 Sep 2020 15:19:35 +0200 Subject: [PATCH 0480/1047] update magic cards doc --- armsrc/iso14443a.c | 2 +- doc/magic_cards_notes.md | 186 ++++++++++++++++++++++++++++++++------- 2 files changed, 155 insertions(+), 33 deletions(-) diff --git a/armsrc/iso14443a.c b/armsrc/iso14443a.c index d7de0b554..6ada61171 100644 --- a/armsrc/iso14443a.c +++ b/armsrc/iso14443a.c @@ -2537,7 +2537,7 @@ int iso14443a_select_card(uint8_t *uid_ptr, iso14a_card_select_t *p_card, uint32 } else if (hf14aconfig.forcebcc == 1) { sel_uid[6] = bcc; } // else use card BCC - Dbprintf("Using BCC=" _YELLOW_("0x%02x") " to perform anticollision", sel_uid[6]); + Dbprintf("Using BCC%d=" _YELLOW_("0x%02x") " to perform anticollision", cascade_level, sel_uid[6]); } } else { memcpy(sel_uid + 2, uid_resp, 4); // the provided UID diff --git a/doc/magic_cards_notes.md b/doc/magic_cards_notes.md index 71180d2fd..c7c2144a6 100644 --- a/doc/magic_cards_notes.md +++ b/doc/magic_cards_notes.md @@ -154,10 +154,10 @@ hf mf cview When "soft-bricked" (by writing invalid data in block0), these ones may help: ``` -hf mf csetblk 0 11223344440804006263646566676869 -``` -``` -hf 14a config h +# MFC Gen1A 1k: +hf mf cwipe -u 11223344 -a 0004 -s 08 +# MFC Gen1A 4k: +hf mf cwipe -u 11223344 -a 0044 -s 18 ``` ``` script run remagic @@ -213,6 +213,8 @@ hf 14a info Not all Gen2 cards can be identified with `hf 14a info`, only those replying to RATS. +To identify the other ones, you've to try to write to block0 and see if it works... + ### Magic commands Android compatible @@ -230,10 +232,10 @@ Android compatible * some cards use a fix "08" or "18" in anticollision, no matter the block0. Including all 7b. * BCC: * some cards play blindly the block0 BCC byte, beware! - * some cards compute a proper BCC in anticollision. Including all 7b. + * some cards compute a proper BCC in anticollision. Including all 7b comuting their BCC0 and BCC1. * ATS: * some cards don't reply to RATS - * some reply with 0978009102DABC1910F005 + * some reply with an ATS #### MIFARE Classic DirectWrite flavour 1 @@ -280,6 +282,13 @@ Android compatible * ATS: no * PRNG: weak +#### MIFARE Classic DirectWrite flavour 6 + +**TODO** need more info + +* UID 7b +* ATS: 0D780071028849A13020150608563D + ### Proxmark3 commands ``` @@ -295,9 +304,21 @@ hf 14a config h e.g. for 4b UID: ``` -hf 14a config a 1 b 2 2 2 3 2 r 2 -hf mf wrbl 0 A FFFFFFFFFFFF 11223344440804006263646566676869 +hf 14a config a 1 b 2 2 2 r 2 +hf mf wrbl 0 A FFFFFFFFFFFF 11223344440804006263646566676869 # for 1k +hf mf wrbl 0 A FFFFFFFFFFFF 11223344441802006263646566676869 # for 4k +hf 14a config a 0 b 0 2 0 r 0 +hf 14a reader +``` + +e.g. for 7b UID: + +``` +hf 14a config a 1 b 2 2 1 3 2 r 2 +hf mf wrbl 0 A FFFFFFFFFFFF 04112233445566084400626364656667 # for 1k +hf mf wrbl 0 A FFFFFFFFFFFF 04112233445566184200626364656667 # for 4k hf 14a config a 0 b 0 2 0 3 0 r 0 +hf 14a reader ``` ## MIFARE Classic DirectWrite, FUID version aka 1-write @@ -449,7 +470,7 @@ Int is internal, typically 0x48 #### Magic commands -**TOOD** +**TODO** #### UID @@ -476,23 +497,40 @@ script run remagic -u ### Identify -**TODO** +``` +hf 14a info +... +[+] Magic capabilities : Gen 2 / CUID +``` + +It seems so far that all MFUL DW have an ATS. + +### Magic commands + +Issue three regular MFU write commands in a row to write first three blocks. ### Characteristics -#### Magic commands +* UID: Only 7b versions +* ATQA: + * all cards play fix ATQA +* SAK: + * all cards play fix SAK +* BCC: + * some cards play blindly the block0 BCC0 and block2 BCC1 bytes, beware! + * some cards compute proper BCC0 and BCC1 in anticollision +* ATS: + * all cards reply with an ATS -**TODO** +#### MIFARE Ultralight DirectWrite flavour 1 -#### UID +* BCC: computed +* ATS: 0A78008102DBA0C119402AB5 -Only 7b versions +#### MIFARE Ultralight DirectWrite flavour 2 -#### SAK, ATQA, BCC, ATS - -Some fix their BCC in anticol, some don't, be careful! - -**TODO** need more tests +* BCC: play blindly the block0 BCC0 and block2 BCC1 bytes, beware! +* ATS: 850000A00A000AB00000000000000000184D ### Proxmark3 commands @@ -514,6 +552,14 @@ When "soft-bricked" (by writing invalid data in block0), these ones may help: hf 14a config h ``` +E.g.: +``` +hf 14a config a 1 b 2 2 1 3 2 r 2 +hf mfu setuid 04112233445566 +hf 14a config a 0 b 0 2 0 3 0 r 0 +hf 14a reader +``` + ### libnfc commands ``` @@ -527,25 +573,101 @@ See `--uid` and `--full` ## MIFARE Ultralight EV1 DirectWrite -Same commands as for MFUL DirectWrite - -## MIFARE Ultralight C Gen1A - -Same commands as for MFUL Gen1A - -## MIFARE Ultralight C DirectWrite - -Same commands as for MFUL DirectWrite - -# NTAG +Similar to MFUL DirectWrite ### Identify -**TODO** +``` +hf 14a info +... +[+] Magic capabilities : Gen 2 / CUID +``` + +### Characteristics + +* UID: Only 7b versions +* ATQA: + * all cards play fix ATQA +* SAK: + * all cards play fix SAK +* BCC: + * cards play blindly the block0 BCC0 and block2 BCC1 bytes, beware! +* ATS: + * all cards reply with an ATS + +#### MIFARE Ultralight EV1 DirectWrite flavour 1 + +* BCC: play blindly the block0 BCC0 and block2 BCC1 bytes, beware! +* ATS: 850000A000000AC30004030101000B0341DF + +#### MIFARE Ultralight EV1 DirectWrite flavour 2 + +* BCC: play blindly the block0 BCC0 and block2 BCC1 bytes, beware! +* ATS: 850000A00A000AC30004030101000B0316D7 + +## MIFARE Ultralight C Gen1A + +Similar to MFUL Gen1A + +## MIFARE Ultralight C DirectWrite + +Similar to MFUL DirectWrite + +### Identify + +``` +hf 14a info +... +[+] Magic capabilities : Gen 2 / CUID +``` + +### Characteristics + +* UID: Only 7b versions +* ATQA: + * all cards play fix ATQA +* SAK: + * all cards play fix SAK +* BCC: + * cards compute proper BCC0 and BCC1 in anticollision +* ATS: + * all cards reply with an ATS + +#### MIFARE Ultralight C DirectWrite flavour 1 + +* BCC: computed +* ATS: 0A78008102DBA0C119402AB5 + +# NTAG ## NTAG213 DirectWrite -Same commands as for MFUL DirectWrite +Similar to MFUL DirectWrite + +### Identify + +``` +hf 14a info +... +[+] Magic capabilities : Gen 2 / CUID +``` + +### Characteristics + +* UID: Only 7b versions +* ATQA: + * all cards play fix ATQA +* SAK: + * all cards play fix SAK +* BCC: + * cards play blindly the block0 BCC0 and block2 BCC1 bytes, beware! +* ATS: + * all cards reply with an ATS + +#### NTAG213 DirectWrite flavour 1 + +* BCC: play blindly the block0 BCC0 and block2 BCC1 bytes, beware! +* ATS: 0A78008102DBA0C119402AB5 ## NTAG21x From c62a721c22a8b8599ba04432f0c1e5f30bbaf197 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Sun, 13 Sep 2020 15:36:19 +0200 Subject: [PATCH 0481/1047] hf 14a config : Add useful recipes to unbrick cards --- client/src/cmdhf14a.c | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/client/src/cmdhf14a.c b/client/src/cmdhf14a.c index c2b5b759b..fbd9fc618 100644 --- a/client/src/cmdhf14a.c +++ b/client/src/cmdhf14a.c @@ -170,19 +170,40 @@ uint16_t atsFSC[] = {16, 24, 32, 40, 48, 64, 96, 128, 256}; static int usage_hf_14a_config(void) { PrintAndLogEx(NORMAL, "Usage: hf 14a config [a 0|1|2] [b 0|1|2] [2 0|1|2] [3 0|1|2]"); - PrintAndLogEx(NORMAL, "Options:"); + PrintAndLogEx(NORMAL, "\nOptions:"); PrintAndLogEx(NORMAL, " h This help"); PrintAndLogEx(NORMAL, " a 0|1|2 ATQA<>anticollision: 0=follow standard 1=execute anticol 2=skip anticol"); PrintAndLogEx(NORMAL, " b 0|1|2 BCC: 0=follow standard 1=use fixed BCC 2=use card BCC"); PrintAndLogEx(NORMAL, " 2 0|1|2 SAK<>CL2: 0=follow standard 1=execute CL2 2=skip CL2"); PrintAndLogEx(NORMAL, " 3 0|1|2 SAK<>CL3: 0=follow standard 1=execute CL3 2=skip CL3"); PrintAndLogEx(NORMAL, " r 0|1|2 SAK<>ATS: 0=follow standard 1=execute RATS 2=skip RATS"); - PrintAndLogEx(NORMAL, "Examples:"); + PrintAndLogEx(NORMAL, "\nExamples:"); PrintAndLogEx(NORMAL, _YELLOW_(" hf 14a config ")" Print current configuration"); PrintAndLogEx(NORMAL, _YELLOW_(" hf 14a config a 1 ")" Force execution of anticollision"); PrintAndLogEx(NORMAL, _YELLOW_(" hf 14a config a 0 ")" Restore ATQA interpretation"); PrintAndLogEx(NORMAL, _YELLOW_(" hf 14a config b 1 ")" Force fix of bad BCC in anticollision"); PrintAndLogEx(NORMAL, _YELLOW_(" hf 14a config b 0 ")" Restore BCC check"); + PrintAndLogEx(NORMAL, "\nExamples to revive Gen2/DirectWrite magic cards failing at anticollision:"); + PrintAndLogEx(NORMAL, _CYAN_(" MFC 1k 4b UID")":"); + PrintAndLogEx(NORMAL, _YELLOW_(" hf 14a config a 1 b 2 2 2 r 2")); + PrintAndLogEx(NORMAL, _YELLOW_(" hf mf wrbl 0 A FFFFFFFFFFFF 11223344440804006263646566676869")); + PrintAndLogEx(NORMAL, _YELLOW_(" hf 14a config a 0 b 0 2 0 r 0")); + PrintAndLogEx(NORMAL, _CYAN_(" MFC 4k 4b UID")":"); + PrintAndLogEx(NORMAL, _YELLOW_(" hf 14a config a 1 b 2 2 2 r 2")); + PrintAndLogEx(NORMAL, _YELLOW_(" hf mf wrbl 0 A FFFFFFFFFFFF 11223344441802006263646566676869")); + PrintAndLogEx(NORMAL, _YELLOW_(" hf 14a config a 0 b 0 2 0 r 0")); + PrintAndLogEx(NORMAL, _CYAN_(" MFC 1k 7b UID")":"); + PrintAndLogEx(NORMAL, _YELLOW_(" hf 14a config a 1 b 2 2 1 3 2 r 2")); + PrintAndLogEx(NORMAL, _YELLOW_(" hf mf wrbl 0 A FFFFFFFFFFFF 04112233445566084400626364656667")); + PrintAndLogEx(NORMAL, _YELLOW_(" hf 14a config a 0 b 0 2 0 3 0 r 0")); + PrintAndLogEx(NORMAL, _CYAN_(" MFC 4k 7b UID")":"); + PrintAndLogEx(NORMAL, _YELLOW_(" hf 14a config a 1 b 2 2 1 3 2 r 2")); + PrintAndLogEx(NORMAL, _YELLOW_(" hf mf wrbl 0 A FFFFFFFFFFFF 04112233445566184200626364656667")); + PrintAndLogEx(NORMAL, _YELLOW_(" hf 14a config a 0 b 0 2 0 3 0 r 0")); + PrintAndLogEx(NORMAL, _CYAN_(" MFUL ")"/" _CYAN_(" MFUL EV1 ")"/" _CYAN_(" MFULC")":"); + PrintAndLogEx(NORMAL, _YELLOW_(" hf 14a config a 1 b 2 2 1 3 2 r 2")); + PrintAndLogEx(NORMAL, _YELLOW_(" hf mfu setuid 04112233445566")); + PrintAndLogEx(NORMAL, _YELLOW_(" hf 14a config a 0 b 0 2 0 3 0 r 0")); return PM3_SUCCESS; } From 0650123b09d27e03dfd0ef6453fff4a63f50dcd8 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Sun, 13 Sep 2020 16:16:53 +0200 Subject: [PATCH 0482/1047] doc --- doc/magic_cards_notes.md | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/doc/magic_cards_notes.md b/doc/magic_cards_notes.md index c7c2144a6..a3d9627fd 100644 --- a/doc/magic_cards_notes.md +++ b/doc/magic_cards_notes.md @@ -4,6 +4,8 @@ This document is based mostly on information posted on http://www.proxmark.org/f Useful docs: * [AN10833 MIFARE Type Identification Procedure](https://www.nxp.com/docs/en/application-note/AN10833.pdf) +- [ISO14443A](#iso14443a) + * [Identifying broken ISO14443A magic](#identifying-broken-iso14443a-magic) - [MIFARE Classic](#mifare-classic) * [MIFARE Classic block0](#mifare-classic-block0) * [MIFARE Classic Gen1A aka UID](#mifare-classic-gen1a-aka-uid) @@ -33,6 +35,31 @@ Useful docs: * [ISO15693 magic](#iso15693-magic) +# ISO14443A + +## Identifying broken ISO14443A magic + +When a magic card configuration is really messed up and the card is not labeled, it may be hard to find out which type of card it is. + +Here are some tips if the card doesn't react or gives error on a simple `hf 14a reader`: + +Let's force a 4b UID anticollision and see what happens: +``` +hf 14a config a 1 b 2 2 2 r 2 +hf 14a reader +``` +It it responds, we know it's a TypeA card. But maybe it's a 7b UID, so let's force a 7b UID anticollision: +``` +hf 14a config a 1 b 2 2 1 3 2 r 2 +hf 14a reader +``` +At this stage, you know if it's a TypeA 4b or 7b card and you can check further on this page how to reconfigure different types of cards. + +To restore anticollision config of the Proxmark3: + +``` +hf 14a config a 0 b 0 2 0 3 0 r 0 +``` # MIFARE Classic Referred as M1, S50 (1k), S70 (4k) From aa756aa493b73f5bcc2c75fbc3239cd83346b3a2 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sun, 13 Sep 2020 18:38:02 +0200 Subject: [PATCH 0483/1047] fix #953 static nonce detection --- client/src/cmdhfmf.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/client/src/cmdhfmf.c b/client/src/cmdhfmf.c index c62629b6f..332821384 100644 --- a/client/src/cmdhfmf.c +++ b/client/src/cmdhfmf.c @@ -1360,7 +1360,7 @@ static int CmdHF14AMfNested(const char *Cmd) { } // check if tag doesn't have static nonce - if (detect_classic_static_nonce()) { + if (detect_classic_static_nonce() == NONCE_STATIC) { PrintAndLogEx(WARNING, "Static nonce detected. Quitting..."); PrintAndLogEx(INFO, "\t Try use " _YELLOW_("`hf mf staticnested`")); return PM3_EOPABORTED; @@ -1610,7 +1610,7 @@ static int CmdHF14AMfNestedStatic(const char *Cmd) { } // check if tag have static nonce - if (detect_classic_static_nonce() == false) { + if (detect_classic_static_nonce() != NONCE_STATIC) { PrintAndLogEx(WARNING, "Normal nonce detected, or failed read of card. Quitting..."); PrintAndLogEx(INFO, "\t Try use " _YELLOW_("`hf mf nested`")); return PM3_EOPABORTED; @@ -1924,7 +1924,7 @@ static int CmdHF14AMfNestedHard(const char *Cmd) { if (!know_target_key && nonce_file_read == false) { // check if tag doesn't have static nonce - if (detect_classic_static_nonce()) { + if (detect_classic_static_nonce() == NONCE_STATIC) { PrintAndLogEx(WARNING, "Static nonce detected. Quitting..."); PrintAndLogEx(HINT, "\tTry use `" _YELLOW_("hf mf staticnested") "`"); return PM3_EOPABORTED; From b4aebd140a8c019fb27f671d979c0b7e4bb1dc9c Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Mon, 14 Sep 2020 00:14:19 +0200 Subject: [PATCH 0484/1047] waveshare: fix multiple issues in BMP RGB handling --- client/src/cmdhfwaveshare.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/client/src/cmdhfwaveshare.c b/client/src/cmdhfwaveshare.c index 83c014505..aa89abaa7 100644 --- a/client/src/cmdhfwaveshare.c +++ b/client/src/cmdhfwaveshare.c @@ -195,14 +195,14 @@ static int read_bmp_rgb(const uint8_t *bmp, const size_t bmpsize, uint8_t **blac for (X = 0; X < pbmpheader->BMP_Width; X++) { // lines B = bmp[offset++]; G = bmp[offset++]; - G = bmp[offset++]; - if (R < 30 && G < 30 && B < 30) { + R = bmp[offset++]; + if (R < 128 && G < 128 && B < 128) { Black_data = Black_data | (1); } else if (R > 190 && G < 90 && B < 90) { Red_data = Red_data | (1); } count++; - if (count >= 8) { + if ((count >= 8) || (X == pbmpheader->BMP_Width - 1)) { (*black)[X / 8 + (pbmpheader->BMP_Height - Y - 1) * Image_Width_Byte] = ~Black_data; (*red)[X / 8 + (pbmpheader->BMP_Height - Y - 1) * Image_Width_Byte] = ~Red_data; count = 0; @@ -212,6 +212,8 @@ static int read_bmp_rgb(const uint8_t *bmp, const size_t bmpsize, uint8_t **blac Black_data = Black_data << 1; Red_data = Red_data << 1; } + // Skip BMP line padding + offset+=(((pbmpheader->BMP_Width*3/4)+1)*4)-pbmpheader->BMP_Width*3; } return PM3_SUCCESS; } From 8bb2f62f1ed82f09ddf919bd872587c4746f9b17 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Mon, 14 Sep 2020 00:31:24 +0200 Subject: [PATCH 0485/1047] doc csetuid --- doc/magic_cards_notes.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/doc/magic_cards_notes.md b/doc/magic_cards_notes.md index a3d9627fd..c02b59e53 100644 --- a/doc/magic_cards_notes.md +++ b/doc/magic_cards_notes.md @@ -186,6 +186,14 @@ hf mf cwipe -u 11223344 -a 0004 -s 08 # MFC Gen1A 4k: hf mf cwipe -u 11223344 -a 0044 -s 18 ``` +or just fixing block0: +``` +# MFC Gen1A 1k: +hf mf csetuid 11223344 0004 08 +# MFC Gen1A 4k: +hf mf csetuid 11223344 0044 18 +``` + ``` script run remagic ``` From 6304003a7a6e8e0b2da0b068d8142b4402715288 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Mon, 14 Sep 2020 01:16:28 +0200 Subject: [PATCH 0486/1047] waveshare: check image size --- client/src/cmdhfwaveshare.c | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/client/src/cmdhfwaveshare.c b/client/src/cmdhfwaveshare.c index aa89abaa7..6cf38de9d 100644 --- a/client/src/cmdhfwaveshare.c +++ b/client/src/cmdhfwaveshare.c @@ -61,6 +61,8 @@ typedef struct { typedef struct model_s { const char *desc; uint8_t len; // The data sent in one time shall not be greater than 128-3 + uint16_t width; + uint16_t height; } model_t; typedef enum { @@ -76,14 +78,14 @@ typedef enum { } model_enum_t; static model_t models[] = { - {"2.13 inch e-paper", 16}, - {"2.9 inch e-paper", 16}, - {"4.2 inch e-paper", 100}, - {"7.5 inch e-paper", 120}, - {"2.7 inch e-paper", 121}, - {"2.13 inch e-paper B", 106}, - {"1.54 inch e-paper B", 100}, - {"7.5 inch e-paper HD", 120}, + {"2.13 inch e-paper", 16, 122, 250}, // tested + {"2.9 inch e-paper", 16, 128, 296}, + {"4.2 inch e-paper", 100, 400, 300}, + {"7.5 inch e-paper", 120, 800, 480}, + {"2.7 inch e-paper", 121, 276, 176}, + {"2.13 inch e-paper B", 106, 104, 212}, + {"1.54 inch e-paper B", 100, 200, 200}, + {"7.5 inch e-paper HD", 120, 800, 480}, }; static int CmdHelp(const char *Cmd); @@ -104,16 +106,18 @@ static int usage_hf_waveshare_loadbmp(void) { return PM3_SUCCESS; } -static int picture_bit_depth(const uint8_t *bmp, const size_t bmpsize) { +static int picture_bit_depth(const uint8_t *bmp, const size_t bmpsize, const uint8_t model_nr) { if (bmpsize < sizeof(BMP_HEADER)) return PM3_ESOFT; BMP_HEADER *pbmpheader = (BMP_HEADER *)bmp; PrintAndLogEx(DEBUG, "colorsused = %d", pbmpheader->colorsused); PrintAndLogEx(DEBUG, "pbmpheader->bpp = %d", pbmpheader->bpp); + if ((pbmpheader->BMP_Width != models[model_nr].width) || (pbmpheader->BMP_Height != models[model_nr].height)) { + PrintAndLogEx(WARNING, "Invalid BMP size, expected %ix%i, got %ix%i", pbmpheader->BMP_Width, pbmpheader->BMP_Height, models[model_nr].width, models[model_nr].height); + } return pbmpheader->bpp; } - static int read_bmp_bitmap(const uint8_t *bmp, const size_t bmpsize, uint8_t **black) { BMP_HEADER *pbmpheader = (BMP_HEADER *)bmp; // check file is bitmap @@ -696,7 +700,7 @@ static int CmdHF14AWSLoadBmp(const char *Cmd) { return PM3_EIO; } - int depth = picture_bit_depth(bmp, bytes_read); + int depth = picture_bit_depth(bmp, bytes_read, model_nr); if (depth == PM3_ESOFT) { PrintAndLogEx(ERR, "Error, BMP file is too small"); free(bmp); From 9751f629409f55db2a8ec357fa906b069981bd2f Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Mon, 14 Sep 2020 01:31:16 +0200 Subject: [PATCH 0487/1047] waveshare: swap some screen dimensions, to be tested... --- client/src/cmdhfwaveshare.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/src/cmdhfwaveshare.c b/client/src/cmdhfwaveshare.c index 6cf38de9d..ec76c0c5b 100644 --- a/client/src/cmdhfwaveshare.c +++ b/client/src/cmdhfwaveshare.c @@ -81,9 +81,9 @@ static model_t models[] = { {"2.13 inch e-paper", 16, 122, 250}, // tested {"2.9 inch e-paper", 16, 128, 296}, {"4.2 inch e-paper", 100, 400, 300}, - {"7.5 inch e-paper", 120, 800, 480}, + {"7.5 inch e-paper", 120, 480, 800}, {"2.7 inch e-paper", 121, 276, 176}, - {"2.13 inch e-paper B", 106, 104, 212}, + {"2.13 inch e-paper B", 106, 212, 104}, {"1.54 inch e-paper B", 100, 200, 200}, {"7.5 inch e-paper HD", 120, 800, 480}, }; From 9247613c0b1fd6bed5d31d73671480fb9d2c5283 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Mon, 14 Sep 2020 01:54:19 +0200 Subject: [PATCH 0488/1047] waveshare: fix dimensions --- client/src/cmdhfwaveshare.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/src/cmdhfwaveshare.c b/client/src/cmdhfwaveshare.c index ec76c0c5b..02841e53f 100644 --- a/client/src/cmdhfwaveshare.c +++ b/client/src/cmdhfwaveshare.c @@ -85,7 +85,7 @@ static model_t models[] = { {"2.7 inch e-paper", 121, 276, 176}, {"2.13 inch e-paper B", 106, 212, 104}, {"1.54 inch e-paper B", 100, 200, 200}, - {"7.5 inch e-paper HD", 120, 800, 480}, + {"7.5 inch e-paper HD", 120, 880, 528}, }; static int CmdHelp(const char *Cmd); From 3146305de14bbb27a4c4333d44c54e5fe9043c4b Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Mon, 14 Sep 2020 09:48:33 +0200 Subject: [PATCH 0489/1047] waveshare: fix RGB for some screensizes --- client/src/cmdhfwaveshare.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/src/cmdhfwaveshare.c b/client/src/cmdhfwaveshare.c index 02841e53f..bcddce856 100644 --- a/client/src/cmdhfwaveshare.c +++ b/client/src/cmdhfwaveshare.c @@ -216,8 +216,8 @@ static int read_bmp_rgb(const uint8_t *bmp, const size_t bmpsize, uint8_t **blac Black_data = Black_data << 1; Red_data = Red_data << 1; } - // Skip BMP line padding - offset+=(((pbmpheader->BMP_Width*3/4)+1)*4)-pbmpheader->BMP_Width*3; + // Skip BMP line padding: we accumulate 3* %4 per line and need one more %4 as padding + offset += pbmpheader->BMP_Width % 4; } return PM3_SUCCESS; } From 8268be539017e0147380cdfa859d8bdedb3d359d Mon Sep 17 00:00:00 2001 From: byron1901 Date: Mon, 14 Sep 2020 17:09:30 +0100 Subject: [PATCH 0490/1047] hf mf autopwn: fix static nonce detection --- client/src/cmdhfmf.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/client/src/cmdhfmf.c b/client/src/cmdhfmf.c index 332821384..0220a026d 100644 --- a/client/src/cmdhfmf.c +++ b/client/src/cmdhfmf.c @@ -2348,7 +2348,7 @@ static int CmdHF14AMfAutoPWN(const char *Cmd) { // Check if at least one sector key was found if (know_target_key == false) { // Check if the darkside attack can be used - if (prng_type && has_staticnonce == false) { + if (prng_type && has_staticnonce != NONCE_STATIC) { if (verbose) { PrintAndLogEx(INFO, "======================= " _YELLOW_("START DARKSIDE ATTACK") " ======================="); } @@ -2485,7 +2485,7 @@ noValidKeyFound: skipReadBKey: if (e_sector[current_sector_i].foundKey[current_key_type_i] == 0) { - if (has_staticnonce) + if (has_staticnonce == NONCE_STATIC) goto tryStaticnested; if (prng_type && (nested_failed == false)) { @@ -2578,7 +2578,7 @@ tryHardnested: // If the nested attack fails then we try the hardnested attack e_sector[current_sector_i].foundKey[current_key_type_i] = 'H'; } - if (has_staticnonce) { + if (has_staticnonce == NONCE_STATIC) { tryStaticnested: if (verbose) { PrintAndLogEx(INFO, "======================= " _YELLOW_("START STATIC NESTED ATTACK") " ======================="); From daa23990663639a0d9ae6710146873882299afa6 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Mon, 14 Sep 2020 22:15:33 +0200 Subject: [PATCH 0491/1047] more traces --- traces/README.txt | 2 + traces/lf_gprox_36_30_14489.pm3 | 39999 ++++++++++++++++++++++++ traces/lf_idteck_4944544BAC40E069.pm3 | 30000 ++++++++++++++++++ 3 files changed, 70001 insertions(+) create mode 100644 traces/lf_gprox_36_30_14489.pm3 create mode 100644 traces/lf_idteck_4944544BAC40E069.pm3 diff --git a/traces/README.txt b/traces/README.txt index a55786807..8d6a6733d 100644 --- a/traces/README.txt +++ b/traces/README.txt @@ -13,6 +13,8 @@ indala-504278295.pm3: PSK 26 bit indala homeagain.pm3: HomeAgain animal (cat) tag - ID 985121004515220 homeagain1600.pm3: HomeAgain animal (cat) tag - ID 985121004515220 keri.pm3: Keri PSK-3 Key Ring tag (back of tag: 1460 3411) +lf_gprox_36_30_14489.pm3: G-Prox-II FC: 30 Card: 3949, Format 36b ASK/BIPHASE +lf_idteck_4944544BAC40E069.pm3: IDTECK raw 4944544BAC40E069 , PSK Transit999-best.pm3: Transit 999 format (UID 99531670) ATA5577-HIDemu-FC1-C9.pm3: ata5577 in hid prox 26 bit emulation facility code:1 card#:9 AWID-15-259.pm3: AWID FSK RF/50 FC: 15 Card: 259 diff --git a/traces/lf_gprox_36_30_14489.pm3 b/traces/lf_gprox_36_30_14489.pm3 new file mode 100644 index 000000000..89a75e390 --- /dev/null +++ b/traces/lf_gprox_36_30_14489.pm3 @@ -0,0 +1,39999 @@ +-22 +-25 +-22 +-24 +-22 +-26 +-25 +-19 +-17 +-12 +123 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +111 +103 +96 +91 +14 +-53 +-112 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +15 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +109 +103 +95 +90 +81 +6 +-61 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +12 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +110 +102 +90 +84 +77 +71 +65 +62 +60 +56 +48 +45 +38 +36 +32 +31 +29 +26 +26 +20 +19 +20 +17 +17 +16 +15 +18 +16 +17 +12 +11 +8 +7 +6 +5 +4 +4 +-63 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +6 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +112 +106 +98 +86 +80 +5 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +20 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +103 +98 +90 +85 +9 +-57 +-116 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +21 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +108 +100 +93 +86 +80 +5 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +113 +105 +100 +92 +86 +10 +-57 +-116 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +111 +104 +97 +89 +83 +8 +-59 +-118 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-112 +-103 +-100 +-91 +-88 +-80 +-78 +-70 +-64 +-56 +-50 +-47 +-43 +-41 +-37 +-35 +-30 +-31 +-28 +-29 +-27 +-27 +-22 +-22 +-17 +-19 +-17 +-19 +-18 +-21 +-18 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +117 +107 +100 +93 +85 +80 +75 +69 +65 +63 +61 +58 +48 +46 +38 +36 +31 +30 +26 +24 +24 +18 +16 +18 +17 +17 +14 +13 +13 +8 +7 +10 +6 +7 +5 +5 +-62 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-112 +-103 +-98 +-90 +-86 +-79 +-77 +-70 +-64 +-61 +-55 +-54 +-48 +-49 +-43 +-40 +-37 +-33 +-32 +-31 +-27 +-27 +-26 +-20 +-19 +-16 +-16 +-15 +-17 +-15 +117 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +117 +105 +98 +89 +13 +-54 +-113 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +112 +103 +97 +90 +86 +76 +72 +65 +61 +51 +49 +44 +41 +38 +35 +33 +30 +27 +26 +21 +20 +21 +17 +17 +15 +15 +12 +11 +11 +8 +7 +7 +6 +6 +10 +11 +10 +-57 +-116 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-116 +-106 +-98 +-94 +-88 +-84 +-76 +-72 +-65 +-63 +-58 +-58 +-52 +-51 +-48 +-44 +-41 +-42 +-37 +-36 +-33 +-31 +-30 +-24 +-19 +-18 +-16 +-15 +-12 +-14 +-13 +119 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +116 +107 +100 +94 +17 +-50 +-110 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +110 +103 +96 +90 +85 +84 +8 +-58 +-117 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +108 +102 +92 +86 +84 +80 +5 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +118 +105 +98 +87 +82 +75 +1 +-65 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +104 +96 +88 +82 +70 +65 +58 +54 +50 +46 +44 +38 +36 +36 +30 +29 +26 +25 +24 +22 +21 +17 +15 +14 +14 +12 +12 +11 +10 +9 +12 +14 +12 +8 +7 +6 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-120 +-117 +-106 +-100 +-91 +-86 +-82 +-76 +-73 +-66 +-60 +-57 +-54 +-51 +-48 +-42 +-38 +-37 +-36 +-36 +-35 +-35 +-31 +-32 +-29 +-30 +-26 +-24 +-22 +-19 +-22 +-18 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +109 +99 +94 +17 +-50 +-110 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +112 +106 +98 +94 +86 +11 +-56 +-115 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +14 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +115 +105 +98 +91 +84 +77 +66 +62 +54 +51 +49 +45 +42 +39 +38 +38 +31 +30 +24 +23 +21 +20 +19 +17 +16 +14 +13 +13 +9 +9 +9 +3 +2 +4 +3 +4 +4 +-63 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-115 +-106 +-96 +-91 +-86 +-82 +-78 +-73 +-68 +-64 +-57 +-55 +-50 +-49 +-46 +-44 +-39 +-36 +-31 +-31 +-29 +-29 +-28 +-28 +-23 +-22 +-18 +-20 +-18 +-20 +-18 +112 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +111 +105 +96 +90 +84 +77 +72 +68 +62 +58 +58 +53 +51 +43 +41 +36 +33 +30 +27 +26 +22 +20 +18 +15 +14 +14 +8 +6 +9 +9 +10 +5 +6 +2 +2 +5 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +3 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +115 +108 +96 +90 +80 +74 +0 +-66 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +19 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +110 +99 +93 +83 +78 +4 +-62 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-120 +-113 +-105 +-97 +-89 +-86 +-79 +-76 +-69 +-64 +-57 +-50 +-50 +-44 +-45 +-40 +-41 +-37 +-34 +-31 +-33 +-30 +-29 +-29 +-24 +-25 +-21 +-19 +-17 +-14 +-14 +-14 +121 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +116 +109 +97 +92 +82 +75 +73 +70 +67 +58 +54 +49 +45 +43 +38 +36 +34 +32 +29 +30 +28 +26 +26 +25 +20 +18 +15 +14 +15 +13 +13 +8 +7 +3 +2 +1 +-65 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +8 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +115 +107 +101 +90 +85 +75 +1 +-65 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-117 +-106 +-98 +-88 +-86 +-79 +-74 +-69 +-62 +-61 +-57 +-54 +-52 +-48 +-45 +-42 +-36 +-32 +-35 +-31 +-34 +-31 +-32 +-29 +-27 +-24 +-22 +-21 +-18 +-17 +-18 +-15 +116 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +113 +104 +98 +91 +15 +-52 +-112 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +21 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +109 +101 +94 +89 +85 +76 +71 +64 +62 +57 +55 +50 +45 +40 +37 +31 +30 +29 +27 +26 +20 +18 +16 +15 +14 +12 +12 +14 +13 +12 +13 +12 +7 +6 +4 +3 +-2 +-68 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-117 +-109 +-101 +-93 +-90 +-83 +-74 +-70 +-64 +-61 +-56 +-52 +-47 +-48 +-44 +-45 +-40 +-38 +-37 +-33 +-34 +-29 +-30 +-26 +-23 +-25 +-21 +-18 +-20 +-16 +-16 +117 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +114 +105 +100 +90 +14 +-53 +-112 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +14 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +113 +104 +97 +86 +79 +5 +-62 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +19 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +117 +105 +97 +94 +85 +81 +6 +-60 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +13 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +110 +102 +96 +87 +81 +6 +-60 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +20 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +113 +106 +97 +91 +86 +77 +71 +70 +65 +62 +55 +51 +46 +43 +36 +34 +28 +26 +28 +26 +26 +22 +21 +23 +18 +18 +13 +18 +16 +16 +12 +12 +12 +11 +8 +7 +5 +6 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-117 +-108 +-98 +-94 +-87 +-84 +-78 +-74 +-69 +-65 +-59 +-54 +-48 +-47 +-42 +-42 +-39 +-38 +-33 +-32 +-27 +-28 +-26 +-27 +-24 +-25 +-23 +-26 +-23 +-23 +-23 +114 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +112 +105 +104 +98 +90 +85 +80 +70 +65 +56 +53 +48 +45 +42 +38 +36 +31 +28 +27 +24 +22 +26 +25 +25 +24 +21 +17 +15 +12 +13 +12 +8 +6 +4 +5 +5 +-62 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +7 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +118 +109 +102 +96 +85 +81 +6 +-61 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-118 +-109 +-102 +-92 +-83 +-79 +-75 +-70 +-67 +-63 +-61 +-56 +-52 +-48 +-43 +-44 +-40 +-38 +-35 +-31 +-32 +-24 +-21 +-18 +-15 +-13 +-17 +-16 +-19 +-18 +-18 +-16 +115 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +116 +108 +99 +94 +86 +82 +76 +68 +63 +59 +49 +46 +39 +36 +36 +34 +33 +30 +28 +27 +23 +22 +21 +14 +12 +15 +12 +17 +17 +16 +17 +15 +12 +10 +7 +7 +-60 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +5 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +104 +95 +89 +83 +7 +-59 +-118 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +15 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +110 +103 +92 +86 +76 +2 +-64 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +14 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +112 +105 +93 +89 +79 +74 +0 +-66 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +13 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +110 +103 +96 +90 +82 +7 +-59 +-118 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-118 +-108 +-101 +-94 +-87 +-79 +-73 +-71 +-65 +-62 +-57 +-54 +-49 +-43 +-41 +-39 +-37 +-33 +-32 +-26 +-24 +-25 +-22 +-19 +-17 +-18 +-18 +-18 +-14 +-14 +-18 +-17 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +114 +108 +100 +95 +85 +79 +70 +64 +59 +55 +47 +45 +38 +35 +36 +33 +32 +30 +28 +27 +21 +20 +15 +13 +16 +13 +13 +12 +12 +9 +8 +8 +6 +6 +6 +4 +-62 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-115 +-107 +-100 +-91 +-83 +-77 +-74 +-71 +-67 +-61 +-58 +-52 +-48 +-49 +-45 +-43 +-39 +-35 +-33 +-32 +-30 +-30 +-27 +-27 +-23 +-19 +-19 +-18 +-17 +-18 +-17 +117 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +114 +106 +97 +91 +15 +-52 +-112 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +14 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +111 +104 +92 +85 +78 +74 +67 +62 +58 +49 +46 +46 +41 +39 +36 +34 +28 +27 +26 +27 +26 +23 +24 +23 +20 +17 +14 +11 +10 +10 +8 +7 +4 +4 +6 +5 +5 +-62 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-117 +-110 +-101 +-93 +-90 +-81 +-77 +-71 +-66 +-59 +-52 +-50 +-47 +-46 +-44 +-40 +-37 +-37 +-34 +-36 +-32 +-29 +-28 +-26 +-27 +-23 +-25 +-23 +-17 +-17 +-14 +121 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +114 +106 +100 +92 +16 +-52 +-111 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +110 +104 +97 +84 +79 +4 +-62 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +111 +103 +97 +89 +82 +7 +-59 +-118 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +117 +110 +98 +93 +82 +77 +3 +-63 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-120 +22 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +115 +106 +99 +88 +82 +75 +69 +66 +57 +56 +51 +48 +46 +39 +37 +34 +32 +31 +27 +26 +23 +21 +20 +15 +14 +15 +15 +15 +9 +10 +8 +8 +8 +7 +7 +7 +2 +2 +-64 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-120 +-115 +-105 +-99 +-91 +-86 +-79 +-73 +-66 +-64 +-59 +-57 +-52 +-52 +-47 +-42 +-42 +-36 +-36 +-33 +-28 +-23 +-19 +-20 +-19 +-20 +-19 +-19 +-16 +-15 +-11 +120 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +114 +106 +100 +92 +86 +79 +74 +70 +63 +58 +54 +49 +46 +43 +36 +35 +36 +33 +33 +28 +26 +22 +21 +23 +21 +20 +19 +18 +14 +12 +10 +10 +10 +8 +6 +5 +-62 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-119 +-115 +-104 +-100 +-91 +-86 +-81 +-73 +-70 +-63 +-62 +-55 +-50 +-46 +-41 +-42 +-37 +-38 +-33 +-28 +-27 +-23 +-19 +-18 +-18 +-17 +-16 +-13 +-11 +-13 +-12 +120 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +117 +108 +96 +90 +14 +-53 +-113 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-119 +20 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +114 +107 +100 +94 +86 +80 +75 +66 +62 +60 +54 +51 +48 +44 +42 +41 +38 +37 +35 +32 +28 +26 +18 +17 +14 +13 +13 +10 +9 +10 +5 +10 +11 +8 +10 +9 +6 +6 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-118 +-111 +-99 +-92 +-83 +-80 +-73 +-71 +-65 +-63 +-58 +-56 +-49 +-44 +-40 +-36 +-32 +-33 +-30 +-31 +-29 +-29 +-28 +-27 +-24 +-22 +-18 +-19 +-17 +-18 +-17 +116 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +119 +112 +104 +98 +92 +84 +75 +71 +67 +59 +53 +47 +45 +41 +37 +34 +27 +26 +23 +22 +19 +17 +16 +13 +13 +12 +10 +10 +8 +7 +8 +8 +10 +10 +9 +10 +-58 +-117 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +12 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +119 +111 +105 +94 +88 +77 +3 +-63 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +116 +110 +104 +96 +88 +80 +5 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-120 +-108 +-101 +-92 +-85 +-82 +-78 +-74 +-71 +-67 +-62 +-57 +-50 +-48 +-45 +-44 +-42 +-40 +-36 +-34 +-29 +-29 +-28 +-27 +-26 +-26 +-21 +-20 +-17 +-19 +-17 +-18 +-17 +117 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +109 +102 +91 +85 +10 +-57 +-116 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +14 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +117 +110 +102 +96 +84 +80 +5 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-120 +20 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +112 +103 +95 +88 +82 +77 +67 +63 +58 +54 +52 +48 +45 +47 +45 +44 +42 +38 +32 +29 +26 +25 +25 +22 +14 +13 +7 +6 +5 +5 +5 +4 +4 +8 +9 +9 +12 +11 +-57 +-116 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-118 +-108 +-104 +-96 +-92 +-86 +-77 +-71 +-64 +-60 +-54 +-50 +-44 +-42 +-40 +-36 +-32 +-32 +-31 +-30 +-30 +-28 +-26 +-26 +-21 +-22 +-20 +-20 +-17 +-16 +-13 +118 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +113 +107 +97 +95 +90 +83 +78 +74 +66 +62 +59 +55 +47 +43 +38 +35 +27 +26 +22 +20 +20 +14 +12 +12 +16 +17 +12 +13 +9 +9 +7 +7 +12 +11 +11 +6 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +8 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +115 +108 +99 +94 +86 +79 +4 +-62 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +15 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +103 +97 +86 +81 +6 +-60 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +21 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +111 +105 +98 +88 +82 +7 +-59 +-118 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +22 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +106 +98 +93 +82 +77 +3 +-63 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-119 +-109 +-104 +-94 +-88 +-80 +-73 +-71 +-64 +-61 +-56 +-51 +-49 +-44 +-41 +-37 +-39 +-35 +-37 +-35 +-29 +-27 +-24 +-23 +-18 +-17 +-13 +-15 +-14 +-16 +-15 +-14 +121 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +116 +109 +101 +94 +18 +-50 +-110 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +14 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +119 +110 +102 +91 +85 +78 +3 +-63 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-120 +19 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +112 +105 +98 +91 +82 +7 +-59 +-118 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +118 +110 +102 +95 +89 +82 +77 +68 +64 +55 +52 +50 +46 +44 +45 +42 +40 +39 +36 +33 +32 +31 +28 +22 +19 +12 +10 +7 +7 +2 +0 +4 +4 +6 +2 +3 +5 +7 +-60 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-116 +-110 +-99 +-93 +-84 +-82 +-74 +-72 +-67 +-64 +-60 +-56 +-50 +-51 +-46 +-47 +-42 +-39 +-35 +-31 +-33 +-30 +-30 +-27 +-22 +-22 +-18 +-20 +-17 +-16 +-14 +117 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +114 +107 +95 +90 +80 +76 +67 +65 +61 +54 +52 +52 +51 +48 +44 +42 +40 +36 +33 +26 +24 +17 +17 +14 +13 +13 +8 +10 +12 +13 +13 +16 +14 +15 +13 +13 +-55 +-114 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +6 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +114 +107 +95 +89 +82 +77 +2 +-64 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-120 +23 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +110 +103 +98 +87 +81 +6 +-60 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +111 +105 +95 +87 +80 +5 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-118 +-109 +-99 +-90 +-88 +-79 +-75 +-67 +-63 +-58 +-53 +-51 +-49 +-47 +-46 +-43 +-43 +-39 +-36 +-32 +-28 +-27 +-26 +-25 +-25 +-23 +-22 +-19 +-15 +-17 +-16 +-15 +119 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +115 +102 +96 +86 +79 +77 +71 +67 +63 +60 +52 +48 +47 +43 +41 +38 +36 +31 +29 +27 +23 +22 +21 +15 +12 +14 +14 +14 +12 +11 +11 +9 +8 +6 +6 +5 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-120 +-111 +-108 +-98 +-92 +-84 +-75 +-74 +-67 +-66 +-61 +-54 +-50 +-46 +-43 +-39 +-40 +-36 +-37 +-33 +-28 +-26 +-23 +-26 +-24 +-20 +-18 +-14 +-15 +-13 +-15 +119 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +114 +106 +99 +87 +11 +-55 +-114 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +117 +109 +103 +98 +87 +82 +72 +68 +61 +57 +54 +49 +46 +44 +40 +38 +38 +36 +34 +33 +32 +26 +23 +19 +17 +13 +12 +11 +6 +6 +4 +5 +6 +5 +5 +4 +3 +4 +-63 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-120 +-109 +-101 +-98 +-92 +-88 +-83 +-78 +-73 +-69 +-61 +-56 +-57 +-52 +-53 +-48 +-48 +-44 +-44 +-39 +-36 +-32 +-28 +-29 +-26 +-27 +-25 +-19 +-20 +-17 +-16 +-14 +117 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +112 +104 +92 +86 +10 +-57 +-116 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-120 +24 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +110 +103 +97 +84 +78 +68 +64 +58 +55 +49 +46 +44 +39 +37 +36 +32 +30 +32 +31 +30 +29 +26 +24 +21 +20 +18 +11 +10 +4 +4 +2 +2 +2 +4 +6 +1 +2 +-64 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +11 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +115 +107 +98 +91 +84 +77 +2 +-63 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +116 +109 +97 +91 +83 +78 +4 +-62 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-120 +-111 +-105 +-100 +-94 +-92 +-85 +-82 +-75 +-70 +-65 +-64 +-58 +-54 +-49 +-44 +-45 +-40 +-37 +-35 +-29 +-26 +-22 +-23 +-21 +-23 +-22 +-20 +-18 +-19 +-17 +-15 +-17 +118 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +113 +106 +98 +92 +15 +-52 +-111 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +111 +101 +94 +86 +83 +8 +-58 +-117 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +14 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +118 +105 +100 +91 +85 +81 +6 +-60 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +21 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +117 +108 +100 +95 +86 +79 +4 +-62 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +15 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +112 +103 +92 +85 +77 +2 +-64 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +112 +106 +95 +90 +84 +79 +79 +76 +72 +68 +64 +58 +53 +45 +41 +36 +32 +28 +22 +22 +17 +17 +13 +12 +15 +12 +17 +16 +17 +11 +11 +6 +7 +2 +4 +3 +3 +4 +-63 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-115 +-105 +-100 +-93 +-87 +-82 +-77 +-71 +-66 +-59 +-57 +-52 +-50 +-48 +-45 +-42 +-43 +-39 +-37 +-35 +-32 +-30 +-27 +-29 +-25 +-22 +-23 +-21 +-23 +-22 +-17 +118 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +120 +110 +102 +93 +86 +78 +74 +68 +57 +53 +46 +44 +43 +39 +38 +35 +35 +32 +23 +21 +15 +15 +12 +11 +12 +10 +10 +11 +9 +9 +7 +6 +6 +3 +2 +5 +-62 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +5 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +110 +103 +96 +90 +82 +77 +3 +-63 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-120 +-115 +-107 +-101 +-95 +-86 +-79 +-78 +-71 +-70 +-65 +-64 +-58 +-56 +-52 +-51 +-45 +-45 +-40 +-36 +-35 +-32 +-29 +-24 +-19 +-21 +-19 +-21 +-19 +-20 +-18 +-20 +-17 +118 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +105 +98 +94 +87 +84 +74 +70 +63 +59 +54 +50 +47 +39 +37 +30 +27 +28 +27 +27 +20 +20 +18 +17 +15 +10 +12 +17 +16 +17 +17 +15 +12 +11 +9 +7 +-60 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +7 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +109 +100 +93 +88 +81 +6 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +113 +107 +100 +91 +85 +10 +-57 +-116 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +12 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +114 +107 +99 +93 +86 +80 +5 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +20 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +117 +107 +100 +93 +83 +79 +4 +-62 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-112 +-104 +-100 +-92 +-87 +-81 +-73 +-68 +-64 +-61 +-58 +-55 +-53 +-48 +-46 +-44 +-41 +-39 +-34 +-31 +-26 +-27 +-24 +-25 +-24 +-23 +-20 +-22 +-20 +-23 +-20 +-19 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +110 +103 +96 +84 +78 +67 +63 +54 +51 +43 +42 +40 +37 +36 +30 +29 +31 +28 +27 +25 +24 +16 +16 +11 +10 +6 +6 +9 +10 +12 +14 +12 +14 +12 +12 +-55 +-115 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +14 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +111 +102 +90 +84 +76 +2 +-64 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +19 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +114 +107 +98 +92 +86 +79 +4 +-62 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-116 +-110 +-103 +-96 +-89 +-83 +-74 +-71 +-65 +-62 +-58 +-55 +-52 +-48 +-44 +-39 +-34 +-34 +-32 +-32 +-28 +-26 +-22 +-22 +-21 +-18 +-16 +-16 +-20 +-18 +-22 +-20 +112 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +112 +105 +97 +91 +85 +78 +73 +66 +58 +56 +48 +47 +43 +40 +38 +35 +33 +35 +35 +31 +30 +29 +28 +25 +20 +19 +18 +14 +12 +11 +10 +6 +5 +3 +2 +2 +-64 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-118 +-106 +-98 +-93 +-85 +-78 +-74 +-69 +-66 +-63 +-59 +-56 +-53 +-46 +-42 +-43 +-37 +-35 +-31 +-29 +-28 +-28 +-24 +-22 +-26 +-24 +-26 +-23 +-26 +-23 +-21 +116 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +114 +110 +104 +97 +21 +-47 +-107 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +14 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +112 +105 +94 +88 +80 +76 +1 +-64 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-120 +21 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +119 +113 +101 +95 +83 +79 +70 +66 +57 +53 +53 +49 +46 +44 +42 +35 +34 +28 +25 +26 +24 +25 +22 +21 +14 +15 +9 +7 +10 +10 +11 +7 +9 +9 +5 +5 +1 +2 +-64 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-115 +-107 +-99 +-91 +-88 +-81 +-80 +-73 +-72 +-67 +-60 +-55 +-48 +-47 +-43 +-41 +-37 +-39 +-35 +-37 +-32 +-34 +-31 +-25 +-24 +-21 +-20 +-19 +-19 +-15 +-14 +122 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +110 +103 +97 +89 +13 +-54 +-113 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +19 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +111 +104 +96 +90 +80 +75 +73 +66 +63 +56 +53 +48 +46 +44 +39 +37 +34 +27 +24 +25 +24 +25 +19 +20 +14 +12 +14 +15 +15 +10 +10 +6 +4 +8 +7 +7 +6 +6 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +6 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +117 +105 +99 +88 +84 +80 +5 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-117 +-110 +-102 +-93 +-87 +-79 +-76 +-70 +-68 +-63 +-60 +-56 +-52 +-47 +-48 +-43 +-41 +-37 +-35 +-32 +-29 +-30 +-27 +-27 +-24 +-23 +-19 +-15 +-18 +-15 +-18 +-16 +114 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +111 +104 +98 +90 +83 +78 +72 +68 +66 +64 +59 +55 +50 +48 +44 +40 +37 +35 +32 +24 +22 +16 +15 +12 +12 +15 +14 +14 +12 +11 +5 +4 +2 +2 +2 +1 +-65 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +0 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +113 +103 +95 +87 +81 +6 +-60 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +115 +106 +99 +91 +85 +81 +6 +-61 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +15 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +114 +102 +96 +88 +82 +73 +-1 +-67 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +110 +101 +96 +88 +81 +6 +-60 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-116 +-112 +-102 +-98 +-90 +-86 +-79 +-78 +-70 +-65 +-59 +-52 +-52 +-47 +-44 +-44 +-39 +-35 +-35 +-30 +-32 +-28 +-29 +-26 +-20 +-19 +-17 +-17 +-16 +-16 +-15 +-16 +120 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +112 +105 +98 +91 +85 +77 +72 +68 +62 +58 +54 +50 +47 +48 +45 +42 +40 +38 +30 +28 +24 +22 +18 +17 +18 +16 +15 +10 +9 +7 +7 +6 +4 +4 +8 +6 +-60 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-115 +-110 +-102 +-95 +-87 +-85 +-78 +-76 +-69 +-68 +-61 +-58 +-51 +-45 +-42 +-40 +-37 +-34 +-35 +-32 +-30 +-28 +-27 +-29 +-24 +-25 +-23 +-17 +-17 +-15 +-16 +119 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +119 +109 +104 +96 +19 +-49 +-108 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +110 +102 +92 +85 +78 +74 +71 +66 +57 +53 +45 +42 +37 +35 +32 +29 +28 +25 +23 +22 +20 +19 +19 +16 +15 +9 +7 +10 +6 +7 +5 +6 +6 +5 +6 +4 +4 +-62 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-114 +-105 +-97 +-89 +-88 +-82 +-81 +-75 +-72 +-67 +-62 +-57 +-57 +-51 +-51 +-46 +-38 +-38 +-32 +-32 +-29 +-27 +-24 +-27 +-24 +-26 +-22 +-21 +-19 +-19 +-15 +122 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +108 +98 +93 +16 +-51 +-111 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +116 +109 +100 +93 +88 +81 +6 +-61 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-119 +19 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +114 +106 +94 +88 +80 +75 +0 +-65 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +20 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +115 +104 +96 +87 +80 +5 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +116 +107 +101 +94 +87 +82 +72 +69 +60 +56 +56 +51 +48 +45 +42 +34 +33 +27 +26 +20 +18 +21 +18 +19 +18 +18 +15 +15 +14 +12 +11 +11 +6 +6 +9 +12 +10 +11 +-56 +-116 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-116 +-112 +-103 +-99 +-90 +-87 +-81 +-71 +-67 +-61 +-56 +-50 +-51 +-47 +-46 +-42 +-41 +-37 +-37 +-32 +-30 +-30 +-26 +-27 +-24 +-19 +-16 +-14 +-17 +-15 +-17 +118 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +116 +108 +100 +91 +87 +78 +72 +65 +62 +56 +54 +47 +44 +38 +35 +32 +30 +27 +25 +24 +21 +20 +19 +13 +10 +13 +12 +13 +8 +8 +3 +3 +6 +7 +8 +3 +-64 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +8 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +116 +104 +98 +87 +82 +76 +1 +-64 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-113 +-104 +-96 +-88 +-84 +-80 +-76 +-73 +-68 +-64 +-58 +-51 +-50 +-47 +-46 +-44 +-40 +-36 +-37 +-34 +-32 +-29 +-27 +-25 +-22 +-25 +-22 +-20 +-16 +-14 +-17 +-14 +116 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +115 +107 +100 +89 +84 +77 +71 +67 +62 +58 +53 +49 +47 +45 +41 +40 +36 +33 +30 +29 +28 +25 +22 +19 +18 +11 +11 +9 +8 +11 +11 +12 +6 +7 +4 +4 +-62 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +13 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +116 +107 +99 +91 +85 +78 +3 +-63 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-119 +23 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +111 +104 +92 +86 +77 +2 +-63 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +12 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +115 +108 +96 +90 +83 +77 +2 +-63 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-119 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +109 +102 +91 +86 +77 +2 +-63 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-113 +-105 +-96 +-90 +-86 +-81 +-75 +-71 +-63 +-58 +-59 +-54 +-55 +-50 +-51 +-46 +-43 +-39 +-36 +-30 +-26 +-28 +-25 +-27 +-24 +-26 +-22 +-20 +-21 +-13 +-12 +-9 +121 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +110 +103 +96 +86 +80 +73 +69 +64 +59 +56 +50 +44 +42 +40 +40 +39 +36 +35 +34 +30 +27 +24 +23 +16 +15 +9 +7 +9 +9 +9 +5 +6 +1 +2 +5 +5 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-116 +-108 +-101 +-94 +-85 +-80 +-74 +-71 +-67 +-62 +-57 +-57 +-52 +-51 +-47 +-44 +-40 +-40 +-36 +-29 +-29 +-26 +-26 +-24 +-23 +-20 +-23 +-21 +-22 +-19 +-16 +115 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +117 +107 +100 +87 +81 +71 +67 +62 +58 +55 +51 +48 +43 +40 +38 +34 +31 +29 +29 +29 +24 +24 +25 +21 +18 +17 +15 +13 +14 +11 +10 +8 +6 +2 +2 +1 +-65 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +10 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +109 +104 +98 +91 +86 +79 +4 +-62 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-117 +-114 +-106 +-101 +-93 +-90 +-82 +-79 +-71 +-66 +-58 +-51 +-48 +-42 +-38 +-33 +-34 +-31 +-33 +-31 +-31 +-30 +-28 +-25 +-27 +-24 +-22 +-18 +-14 +-14 +-12 +-12 +123 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +112 +106 +96 +90 +82 +78 +75 +68 +67 +61 +58 +52 +48 +39 +36 +32 +30 +22 +20 +22 +17 +18 +16 +16 +14 +13 +12 +15 +16 +15 +14 +15 +15 +11 +8 +5 +-62 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-118 +-111 +-102 +-97 +-88 +-82 +-78 +-70 +-68 +-63 +-57 +-50 +-44 +-43 +-40 +-38 +-33 +-30 +-26 +-28 +-25 +-27 +-25 +-25 +-20 +-19 +-15 +-18 +-16 +-18 +-16 +115 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +113 +104 +97 +87 +11 +-56 +-115 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +19 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +110 +102 +95 +88 +78 +3 +-63 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +113 +103 +96 +90 +81 +74 +69 +64 +63 +59 +56 +54 +50 +44 +41 +32 +29 +22 +22 +18 +18 +18 +15 +14 +14 +12 +12 +10 +9 +9 +9 +7 +8 +7 +6 +6 +1 +-65 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +11 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +110 +103 +95 +89 +83 +77 +2 +-64 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +113 +105 +96 +92 +81 +77 +2 +-64 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-113 +-103 +-96 +-89 +-81 +-74 +-74 +-69 +-68 +-63 +-63 +-58 +-56 +-51 +-50 +-44 +-45 +-40 +-36 +-30 +-26 +-28 +-25 +-27 +-23 +-26 +-22 +-20 +-18 +-15 +-15 +-13 +120 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +113 +105 +99 +88 +81 +76 +67 +62 +61 +59 +55 +52 +49 +41 +39 +32 +29 +30 +29 +28 +21 +21 +17 +16 +16 +14 +12 +11 +10 +10 +7 +6 +6 +7 +6 +6 +-60 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-118 +-114 +-103 +-99 +-90 +-82 +-74 +-66 +-65 +-58 +-58 +-53 +-53 +-48 +-48 +-43 +-42 +-39 +-35 +-32 +-27 +-23 +-20 +-21 +-18 +-20 +-19 +-19 +-15 +-14 +-10 +123 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +102 +94 +87 +11 +-56 +-115 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +115 +108 +96 +90 +80 +76 +1 +-64 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +114 +111 +104 +98 +93 +87 +12 +-55 +-115 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +113 +109 +101 +96 +85 +80 +6 +-61 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +22 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +112 +105 +94 +86 +78 +70 +65 +61 +52 +49 +45 +42 +39 +33 +32 +31 +32 +30 +28 +28 +29 +23 +25 +22 +22 +18 +17 +12 +11 +10 +7 +6 +1 +1 +2 +0 +1 +-66 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +14 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +116 +109 +101 +94 +89 +81 +6 +-60 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-119 +21 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +109 +98 +92 +84 +80 +5 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +15 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +112 +105 +93 +88 +78 +74 +0 +-66 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-116 +-109 +-100 +-93 +-87 +-78 +-75 +-69 +-65 +-62 +-58 +-53 +-50 +-43 +-42 +-39 +-38 +-35 +-34 +-33 +-31 +-27 +-26 +-22 +-22 +-20 +-21 +-20 +-19 +-17 +-17 +-16 +118 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +111 +105 +98 +92 +85 +79 +75 +68 +62 +58 +56 +53 +47 +45 +45 +41 +39 +35 +34 +30 +26 +25 +23 +20 +17 +14 +14 +12 +12 +9 +8 +6 +6 +1 +2 +-3 +-69 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-116 +-113 +-104 +-101 +-91 +-89 +-81 +-75 +-66 +-59 +-55 +-51 +-48 +-43 +-41 +-35 +-33 +-35 +-31 +-34 +-30 +-33 +-30 +-26 +-22 +-18 +-21 +-19 +-22 +-19 +-22 +114 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +116 +106 +99 +92 +16 +-52 +-111 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-120 +23 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +112 +104 +91 +85 +74 +0 +-65 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +20 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +114 +102 +96 +88 +82 +75 +1 +-65 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +109 +101 +94 +86 +83 +76 +68 +65 +62 +58 +49 +46 +41 +37 +33 +32 +32 +27 +24 +22 +22 +19 +17 +16 +14 +13 +16 +17 +14 +13 +14 +14 +9 +8 +6 +5 +4 +-62 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-115 +-106 +-97 +-95 +-87 +-85 +-78 +-76 +-69 +-67 +-61 +-58 +-52 +-52 +-47 +-42 +-41 +-37 +-38 +-33 +-31 +-31 +-26 +-28 +-24 +-20 +-21 +-19 +-21 +-18 +-11 +124 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +99 +92 +85 +79 +74 +69 +64 +58 +51 +49 +43 +41 +42 +39 +37 +34 +31 +29 +26 +20 +20 +18 +17 +16 +11 +12 +13 +9 +11 +6 +7 +5 +5 +6 +2 +-64 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +9 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +112 +108 +99 +95 +88 +81 +6 +-60 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-120 +-111 +-109 +-101 +-96 +-92 +-86 +-80 +-75 +-67 +-61 +-56 +-52 +-49 +-44 +-41 +-39 +-40 +-37 +-40 +-37 +-39 +-35 +-36 +-32 +-26 +-26 +-22 +-21 +-19 +-18 +-15 +-15 +117 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +110 +101 +93 +88 +83 +76 +65 +61 +52 +47 +45 +44 +42 +36 +38 +35 +33 +26 +24 +21 +20 +18 +16 +15 +12 +10 +11 +12 +14 +13 +12 +12 +13 +10 +8 +-60 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +5 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +111 +104 +100 +92 +86 +80 +5 +-61 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-116 +-109 +-100 +-91 +-87 +-80 +-78 +-70 +-66 +-60 +-54 +-54 +-49 +-50 +-44 +-39 +-40 +-34 +-32 +-29 +-26 +-28 +-25 +-22 +-20 +-16 +-16 +-14 +-16 +-15 +-18 +-15 +116 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +111 +103 +92 +90 +14 +-53 +-112 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +109 +101 +94 +86 +80 +5 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +20 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +114 +107 +103 +96 +91 +81 +77 +68 +64 +58 +53 +50 +46 +43 +37 +35 +33 +29 +28 +26 +23 +22 +18 +17 +17 +14 +14 +14 +12 +11 +13 +15 +12 +13 +14 +12 +10 +10 +-58 +-117 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +5 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +116 +103 +96 +88 +82 +77 +3 +-63 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +117 +110 +101 +95 +89 +80 +5 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-119 +21 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +114 +106 +98 +92 +86 +80 +5 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +12 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +107 +100 +92 +86 +81 +6 +-60 +-118 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +15 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +112 +103 +94 +86 +78 +3 +-63 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-119 +-115 +-106 +-101 +-95 +-91 +-83 +-78 +-72 +-68 +-61 +-54 +-52 +-49 +-46 +-44 +-41 +-38 +-36 +-30 +-27 +-30 +-27 +-30 +-27 +-29 +-25 +-26 +-23 +-21 +-18 +-22 +-18 +119 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +111 +104 +97 +90 +84 +79 +73 +68 +62 +55 +53 +49 +46 +44 +39 +38 +35 +32 +30 +24 +22 +16 +14 +16 +15 +16 +11 +11 +9 +9 +10 +8 +7 +12 +12 +12 +-55 +-115 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-116 +-109 +-98 +-91 +-88 +-82 +-78 +-71 +-67 +-60 +-58 +-54 +-53 +-49 +-47 +-42 +-40 +-34 +-32 +-30 +-26 +-23 +-22 +-26 +-23 +-27 +-25 +-24 +-22 +-22 +-20 +116 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +118 +109 +102 +91 +15 +-53 +-112 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +15 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +109 +102 +94 +87 +82 +75 +68 +62 +58 +53 +51 +47 +40 +38 +37 +35 +27 +25 +19 +18 +16 +14 +18 +17 +18 +18 +17 +15 +13 +13 +10 +8 +5 +2 +2 +2 +0 +-66 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-111 +-106 +-96 +-93 +-84 +-79 +-72 +-67 +-60 +-54 +-50 +-47 +-44 +-42 +-39 +-36 +-32 +-28 +-29 +-27 +-26 +-24 +-28 +-25 +-27 +-24 +-23 +-21 +-18 +-17 +118 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +116 +104 +98 +93 +17 +-50 +-110 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +20 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +109 +102 +95 +89 +81 +6 +-60 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +22 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +111 +106 +96 +89 +87 +82 +7 +-59 +-118 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +15 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +110 +103 +93 +88 +80 +77 +2 +-64 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +14 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +118 +110 +103 +93 +87 +84 +78 +73 +67 +63 +57 +53 +50 +42 +40 +37 +35 +33 +30 +28 +28 +26 +26 +28 +26 +24 +23 +17 +14 +11 +10 +4 +4 +-1 +-2 +3 +2 +3 +-63 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-117 +-109 +-104 +-96 +-90 +-82 +-74 +-70 +-66 +-61 +-59 +-55 +-51 +-46 +-41 +-40 +-38 +-37 +-33 +-31 +-27 +-28 +-26 +-26 +-24 +-26 +-21 +-20 +-16 +-17 +-15 +117 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +112 +106 +106 +99 +22 +-46 +-107 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +111 +99 +93 +82 +76 +1 +-64 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +15 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +110 +100 +94 +85 +81 +75 +68 +64 +61 +56 +51 +46 +44 +39 +38 +33 +31 +26 +25 +18 +17 +14 +14 +14 +11 +11 +9 +8 +10 +11 +12 +11 +10 +11 +12 +8 +6 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-117 +-114 +-104 +-99 +-93 +-88 +-82 +-75 +-69 +-68 +-61 +-58 +-51 +-45 +-44 +-41 +-39 +-35 +-33 +-28 +-29 +-26 +-27 +-25 +-25 +-21 +-20 +-17 +-19 +-17 +-16 +119 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +114 +107 +99 +92 +86 +76 +72 +63 +58 +58 +52 +50 +45 +42 +35 +34 +27 +26 +27 +26 +26 +24 +23 +22 +16 +16 +12 +12 +12 +10 +10 +13 +12 +13 +10 +8 +-59 +-118 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +10 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +116 +107 +99 +92 +86 +10 +-57 +-116 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +15 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +116 +106 +99 +90 +86 +10 +-57 +-116 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-117 +-108 +-104 +-95 +-91 +-84 +-80 +-73 +-71 +-64 +-63 +-56 +-52 +-48 +-44 +-38 +-34 +-34 +-32 +-31 +-26 +-25 +-21 +-23 +-20 +-21 +-20 +-19 +-16 +-20 +-17 +-20 +117 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +109 +102 +96 +86 +79 +71 +68 +62 +59 +52 +48 +40 +38 +34 +32 +27 +27 +26 +22 +21 +20 +16 +20 +21 +20 +20 +17 +17 +16 +16 +11 +8 +7 +6 +0 +-67 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +8 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +114 +105 +98 +91 +86 +82 +7 +-59 +-118 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-118 +-107 +-99 +-93 +-87 +-79 +-73 +-72 +-64 +-60 +-55 +-52 +-52 +-48 +-50 +-45 +-46 +-43 +-37 +-34 +-28 +-29 +-26 +-27 +-25 +-26 +-20 +-18 +-15 +-17 +-15 +-15 +120 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +115 +106 +103 +96 +91 +15 +-52 +-112 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-117 +25 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +108 +101 +93 +87 +80 +73 +69 +60 +57 +49 +45 +43 +44 +43 +42 +39 +36 +35 +33 +29 +25 +21 +21 +17 +15 +12 +13 +11 +12 +7 +8 +4 +4 +3 +4 +-2 +-1 +-67 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-119 +-111 +-108 +-99 +-97 +-90 +-87 +-80 +-78 +-70 +-65 +-61 +-52 +-48 +-42 +-42 +-38 +-39 +-36 +-34 +-30 +-33 +-29 +-31 +-28 +-22 +-22 +-20 +-20 +-18 +-17 +-14 +117 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +116 +104 +97 +20 +-48 +-108 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +14 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +109 +100 +94 +87 +81 +6 +-60 +-118 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +102 +94 +86 +81 +6 +-60 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +15 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +108 +101 +94 +88 +85 +10 +-57 +-116 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-120 +23 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +104 +97 +91 +85 +79 +67 +62 +52 +49 +44 +42 +38 +36 +38 +36 +34 +33 +31 +26 +24 +21 +19 +17 +9 +10 +7 +6 +6 +5 +5 +6 +5 +5 +9 +10 +8 +-59 +-118 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-118 +-105 +-98 +-90 +-85 +-80 +-75 +-72 +-67 +-65 +-58 +-52 +-48 +-50 +-45 +-47 +-42 +-43 +-38 +-38 +-34 +-35 +-30 +-32 +-27 +-22 +-22 +-18 +-19 +-17 +-19 +117 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +116 +107 +102 +94 +87 +82 +78 +72 +61 +57 +47 +44 +39 +37 +35 +28 +28 +32 +31 +31 +30 +28 +24 +21 +18 +18 +18 +14 +12 +9 +10 +8 +9 +5 +4 +2 +-64 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +10 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +112 +105 +94 +89 +81 +76 +2 +-64 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-115 +-110 +-101 +-97 +-88 +-80 +-74 +-69 +-64 +-60 +-57 +-52 +-47 +-47 +-43 +-43 +-39 +-36 +-33 +-30 +-30 +-26 +-28 +-26 +-20 +-21 +-18 +-20 +-16 +-16 +-14 +-11 +119 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +113 +106 +100 +94 +85 +79 +72 +68 +61 +57 +53 +48 +44 +41 +34 +34 +35 +35 +34 +27 +25 +22 +20 +19 +16 +15 +9 +9 +9 +11 +11 +10 +11 +13 +10 +12 +-56 +-115 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +5 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +116 +105 +98 +90 +85 +80 +5 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +115 +104 +97 +94 +88 +83 +7 +-59 +-118 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +13 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +114 +100 +94 +83 +79 +4 +-62 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +15 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +115 +106 +97 +90 +82 +75 +1 +-65 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-110 +-101 +-94 +-89 +-84 +-76 +-72 +-67 +-61 +-57 +-58 +-54 +-54 +-50 +-49 +-44 +-43 +-37 +-34 +-28 +-30 +-27 +-27 +-25 +-27 +-23 +-26 +-22 +-24 +-20 +-22 +-20 +119 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +101 +93 +84 +78 +71 +68 +62 +56 +53 +51 +45 +40 +37 +35 +27 +26 +22 +21 +17 +18 +19 +14 +14 +9 +10 +8 +8 +8 +7 +7 +7 +5 +6 +6 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-118 +-108 +-104 +-96 +-92 +-85 +-82 +-76 +-66 +-63 +-56 +-52 +-47 +-48 +-43 +-43 +-39 +-39 +-34 +-32 +-30 +-25 +-23 +-18 +-20 +-17 +-19 +-18 +-17 +-16 +-16 +119 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +114 +106 +100 +92 +16 +-51 +-111 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +114 +108 +103 +97 +90 +80 +75 +68 +64 +57 +54 +53 +49 +44 +41 +40 +33 +30 +26 +25 +22 +21 +20 +14 +13 +16 +12 +12 +11 +10 +10 +8 +8 +3 +4 +-1 +-1 +3 +-64 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-118 +-111 +-106 +-96 +-92 +-85 +-79 +-72 +-70 +-65 +-59 +-58 +-52 +-53 +-47 +-43 +-40 +-36 +-34 +-34 +-29 +-30 +-27 +-28 +-26 +-20 +-19 +-17 +-15 +-11 +-7 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +115 +107 +99 +22 +-46 +-106 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +15 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +109 +100 +93 +82 +77 +2 +-64 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +21 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +116 +104 +97 +93 +85 +81 +6 +-60 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +15 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +112 +104 +97 +86 +81 +6 +-61 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +109 +100 +95 +88 +85 +79 +71 +64 +58 +54 +49 +45 +43 +41 +39 +31 +29 +22 +21 +15 +14 +15 +13 +14 +13 +12 +10 +10 +10 +6 +5 +7 +5 +6 +5 +5 +1 +-65 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-116 +-111 +-103 +-96 +-88 +-86 +-78 +-73 +-67 +-62 +-55 +-49 +-47 +-44 +-42 +-41 +-39 +-38 +-35 +-32 +-27 +-23 +-23 +-18 +-18 +-15 +-18 +-17 +-20 +-18 +-19 +115 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +111 +104 +96 +90 +79 +75 +66 +62 +60 +57 +54 +49 +47 +46 +39 +38 +31 +28 +26 +24 +23 +21 +20 +17 +16 +16 +17 +17 +16 +15 +15 +11 +9 +8 +6 +1 +-65 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-118 +-107 +-96 +-92 +-85 +-79 +-72 +-71 +-65 +-64 +-59 +-55 +-50 +-50 +-46 +-40 +-37 +-31 +-31 +-28 +-29 +-26 +-29 +-26 +-28 +-24 +-26 +-22 +-19 +-20 +-17 +117 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +118 +109 +101 +94 +18 +-50 +-110 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +14 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +105 +98 +88 +82 +76 +72 +64 +61 +60 +55 +52 +48 +46 +40 +37 +33 +30 +26 +26 +24 +25 +19 +19 +14 +12 +10 +10 +8 +5 +6 +2 +2 +6 +6 +7 +6 +7 +-60 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-113 +-106 +-97 +-91 +-83 +-76 +-73 +-65 +-62 +-57 +-55 +-54 +-51 +-48 +-46 +-41 +-39 +-37 +-35 +-35 +-33 +-29 +-28 +-24 +-24 +-21 +-22 +-21 +-20 +-17 +-16 +121 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +115 +108 +97 +89 +87 +82 +78 +68 +65 +59 +56 +53 +49 +45 +41 +38 +37 +30 +29 +30 +25 +24 +22 +21 +20 +17 +16 +13 +8 +9 +6 +5 +8 +7 +8 +7 +7 +-60 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +10 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +117 +105 +98 +90 +84 +79 +4 +-62 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +118 +110 +103 +98 +92 +84 +9 +-58 +-117 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-114 +-106 +-96 +-89 +-84 +-80 +-72 +-67 +-67 +-61 +-59 +-55 +-52 +-45 +-42 +-45 +-42 +-43 +-39 +-40 +-35 +-36 +-31 +-27 +-28 +-25 +-17 +-15 +-11 +-14 +-12 +-15 +120 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +114 +105 +97 +91 +15 +-52 +-112 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-120 +22 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +118 +116 +108 +102 +93 +84 +9 +-58 +-117 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +14 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +114 +106 +98 +90 +85 +74 +69 +63 +59 +57 +52 +49 +46 +42 +40 +36 +33 +32 +27 +26 +25 +22 +20 +23 +22 +21 +21 +19 +15 +14 +10 +8 +4 +5 +5 +4 +5 +4 +-62 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-115 +-105 +-96 +-89 +-88 +-82 +-80 +-73 +-68 +-60 +-58 +-54 +-52 +-49 +-47 +-44 +-41 +-37 +-32 +-28 +-31 +-27 +-29 +-26 +-25 +-23 +-19 +-22 +-19 +-18 +-17 +118 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +114 +106 +93 +88 +80 +76 +72 +63 +60 +58 +53 +49 +46 +43 +40 +34 +32 +32 +29 +29 +25 +22 +21 +16 +15 +17 +16 +15 +13 +12 +10 +8 +6 +4 +4 +5 +-62 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +7 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +108 +102 +95 +83 +78 +3 +-63 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-119 +22 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +107 +99 +90 +83 +78 +4 +-62 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +12 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +111 +104 +97 +89 +84 +8 +-58 +-117 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +110 +98 +91 +83 +78 +3 +-63 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-112 +-106 +-100 +-95 +-87 +-82 +-74 +-71 +-67 +-63 +-57 +-52 +-51 +-49 +-46 +-42 +-37 +-32 +-33 +-30 +-30 +-29 +-27 +-24 +-28 +-25 +-23 +-19 +-16 +-15 +-15 +-14 +120 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +115 +103 +96 +85 +10 +-57 +-116 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +117 +108 +100 +93 +86 +81 +6 +-60 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +21 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +118 +104 +98 +87 +80 +78 +4 +-62 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +116 +109 +100 +94 +83 +78 +68 +64 +63 +57 +55 +50 +50 +47 +45 +43 +41 +36 +33 +27 +25 +22 +20 +13 +13 +8 +7 +10 +8 +8 +8 +9 +4 +5 +0 +0 +4 +4 +-62 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-120 +-112 +-105 +-99 +-92 +-86 +-78 +-70 +-67 +-62 +-58 +-54 +-54 +-49 +-50 +-46 +-46 +-41 +-39 +-35 +-32 +-33 +-29 +-31 +-28 +-25 +-26 +-22 +-21 +-21 +-17 +-19 +117 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +114 +104 +98 +91 +80 +77 +68 +64 +64 +57 +54 +49 +46 +41 +40 +40 +36 +35 +27 +26 +22 +21 +18 +18 +19 +17 +16 +9 +9 +7 +7 +12 +12 +13 +13 +11 +-57 +-116 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +10 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +113 +102 +95 +86 +82 +7 +-60 +-118 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +110 +104 +93 +88 +80 +76 +2 +-64 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +12 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +106 +99 +91 +85 +75 +1 +-65 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-116 +-110 +-101 +-94 +-88 +-79 +-74 +-66 +-65 +-60 +-59 +-54 +-53 +-49 +-46 +-41 +-43 +-38 +-39 +-35 +-32 +-29 +-26 +-25 +-23 +-19 +-22 +-20 +-18 +-13 +-10 +-14 +125 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +104 +96 +85 +79 +70 +66 +63 +58 +56 +52 +48 +45 +45 +44 +41 +38 +37 +35 +30 +27 +24 +22 +15 +15 +12 +11 +11 +5 +5 +6 +5 +5 +6 +1 +1 +-65 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-119 +-110 +-101 +-97 +-89 +-86 +-78 +-74 +-66 +-58 +-57 +-51 +-51 +-46 +-47 +-43 +-41 +-34 +-31 +-27 +-28 +-26 +-27 +-24 +-23 +-21 +-21 +-20 +-17 +-20 +-18 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +118 +111 +102 +96 +94 +18 +-50 +-110 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-118 +19 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +110 +102 +96 +85 +80 +73 +69 +63 +58 +55 +51 +47 +45 +40 +38 +35 +32 +30 +27 +22 +22 +19 +18 +18 +12 +10 +11 +12 +14 +12 +13 +14 +14 +8 +7 +3 +2 +-65 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-120 +-110 +-106 +-97 +-94 +-86 +-78 +-72 +-65 +-64 +-61 +-53 +-46 +-41 +-40 +-37 +-37 +-31 +-29 +-25 +-28 +-25 +-28 +-26 +-27 +-25 +-23 +-20 +-20 +-18 +-15 +118 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +119 +107 +100 +90 +14 +-53 +-113 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-120 +21 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +109 +101 +90 +83 +75 +70 +65 +56 +54 +50 +47 +45 +41 +39 +37 +33 +31 +33 +32 +30 +30 +28 +23 +21 +18 +14 +14 +12 +10 +8 +9 +7 +8 +4 +4 +1 +4 +-62 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +7 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +111 +105 +97 +91 +86 +79 +4 +-62 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-119 +23 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +119 +113 +103 +97 +90 +86 +10 +-57 +-116 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-117 +-107 +-97 +-90 +-84 +-78 +-73 +-69 +-62 +-59 +-55 +-53 +-50 +-48 +-46 +-42 +-41 +-37 +-35 +-34 +-28 +-26 +-25 +-24 +-24 +-23 +-22 +-18 +-15 +-16 +-16 +-16 +117 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +114 +105 +98 +93 +16 +-51 +-111 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-118 +19 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +116 +109 +102 +95 +89 +82 +6 +-60 +-118 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +15 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +111 +104 +97 +86 +83 +8 +-59 +-118 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +19 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +111 +104 +94 +87 +80 +5 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +21 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +115 +107 +95 +90 +81 +75 +1 +-65 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +117 +110 +103 +96 +89 +79 +74 +65 +60 +60 +53 +51 +47 +45 +40 +37 +35 +31 +29 +28 +25 +23 +20 +15 +14 +16 +12 +14 +10 +10 +9 +10 +8 +7 +7 +3 +3 +4 +-62 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-117 +-110 +-104 +-98 +-92 +-85 +-76 +-69 +-66 +-61 +-58 +-55 +-53 +-51 +-47 +-43 +-37 +-33 +-33 +-28 +-26 +-23 +-23 +-22 +-22 +-18 +-20 +-19 +-20 +-20 +-20 +116 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +112 +105 +99 +89 +83 +73 +70 +65 +61 +59 +56 +51 +47 +45 +38 +36 +37 +35 +33 +33 +30 +28 +25 +25 +22 +15 +14 +8 +7 +4 +4 +5 +3 +4 +4 +4 +-63 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +14 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +117 +109 +102 +97 +92 +85 +9 +-58 +-116 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-117 +-109 +-103 +-94 +-88 +-79 +-74 +-70 +-67 +-59 +-55 +-57 +-52 +-53 +-48 +-48 +-43 +-43 +-38 +-39 +-34 +-34 +-30 +-25 +-20 +-16 +-18 +-16 +-18 +-17 +-19 +-16 +117 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +110 +102 +93 +88 +83 +74 +68 +62 +59 +50 +47 +42 +39 +34 +33 +33 +30 +28 +24 +21 +20 +20 +21 +16 +18 +15 +15 +10 +10 +5 +5 +3 +4 +4 +-1 +-67 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +7 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +115 +106 +98 +93 +81 +77 +2 +-64 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +117 +108 +102 +98 +90 +86 +10 +-56 +-116 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +15 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +114 +108 +99 +92 +85 +79 +4 +-62 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +11 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +113 +106 +95 +89 +82 +76 +2 +-64 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-115 +-111 +-102 +-98 +-90 +-87 +-79 +-76 +-69 +-64 +-61 +-56 +-54 +-48 +-48 +-42 +-39 +-39 +-34 +-31 +-29 +-26 +-27 +-23 +-25 +-21 +-20 +-20 +-14 +-12 +-9 +-12 +124 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +115 +107 +99 +95 +88 +78 +72 +65 +62 +60 +57 +49 +46 +40 +38 +34 +31 +29 +23 +21 +22 +18 +18 +16 +16 +14 +13 +13 +7 +8 +3 +2 +5 +4 +9 +11 +-56 +-116 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +3 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +118 +104 +99 +88 +82 +79 +5 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +117 +109 +102 +95 +90 +80 +5 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-115 +-106 +-100 +-94 +-88 +-83 +-78 +-71 +-67 +-59 +-58 +-53 +-51 +-48 +-44 +-40 +-41 +-38 +-36 +-33 +-32 +-31 +-28 +-26 +-23 +-22 +-20 +-19 +-20 +-14 +-13 +-10 +126 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +105 +98 +89 +82 +74 +70 +68 +62 +60 +55 +53 +47 +42 +40 +39 +34 +30 +26 +25 +21 +22 +17 +17 +15 +14 +7 +7 +10 +12 +11 +11 +9 +10 +7 +6 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-113 +-107 +-99 +-97 +-89 +-87 +-80 +-78 +-71 +-69 +-62 +-60 +-57 +-49 +-45 +-42 +-38 +-33 +-28 +-25 +-26 +-24 +-23 +-22 +-25 +-22 +-25 +-22 +-24 +-21 +-18 +117 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +109 +105 +99 +94 +18 +-50 +-110 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +109 +98 +93 +82 +78 +4 +-63 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +112 +100 +94 +84 +78 +76 +69 +65 +59 +54 +51 +49 +41 +39 +33 +31 +24 +24 +26 +21 +22 +17 +17 +15 +15 +15 +14 +14 +13 +9 +10 +7 +8 +8 +6 +6 +11 +-57 +-116 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-118 +-110 +-102 +-92 +-84 +-80 +-74 +-71 +-67 +-63 +-60 +-56 +-52 +-47 +-42 +-41 +-38 +-37 +-33 +-31 +-27 +-26 +-25 +-25 +-21 +-21 +-20 +-20 +-16 +-16 +-13 +118 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +116 +106 +99 +86 +10 +-56 +-116 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +14 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +117 +104 +98 +89 +83 +78 +69 +66 +62 +58 +55 +48 +45 +41 +39 +37 +34 +31 +28 +27 +26 +19 +19 +21 +19 +19 +18 +14 +14 +11 +10 +10 +7 +7 +7 +2 +3 +5 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +10 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +118 +106 +100 +92 +86 +81 +6 +-60 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-120 +-115 +-106 +-100 +-90 +-87 +-79 +-73 +-65 +-57 +-54 +-51 +-48 +-43 +-45 +-41 +-41 +-37 +-36 +-31 +-26 +-25 +-24 +-23 +-21 +-17 +-13 +-15 +-14 +-16 +-16 +-16 +121 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +117 +103 +95 +87 +80 +74 +70 +68 +62 +59 +50 +47 +40 +44 +42 +40 +39 +34 +30 +28 +26 +21 +19 +17 +14 +13 +12 +11 +11 +11 +12 +12 +11 +9 +10 +6 +-60 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +12 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +117 +104 +98 +90 +83 +77 +3 +-63 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +19 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +113 +105 +98 +87 +81 +6 +-60 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +110 +101 +96 +86 +80 +5 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-120 +22 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +112 +104 +97 +90 +79 +5 +-62 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-116 +-105 +-99 +-92 +-86 +-81 +-76 +-72 +-66 +-61 +-58 +-51 +-49 +-45 +-43 +-41 +-39 +-35 +-33 +-28 +-26 +-27 +-25 +-21 +-21 +-21 +-21 +-21 +-20 +-19 +-16 +-12 +120 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +111 +98 +92 +82 +77 +70 +68 +66 +61 +57 +47 +44 +40 +37 +35 +29 +28 +31 +30 +30 +31 +29 +30 +26 +24 +22 +17 +14 +9 +6 +5 +4 +5 +6 +0 +-66 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-115 +-104 +-100 +-92 +-90 +-83 +-79 +-73 +-68 +-62 +-62 +-56 +-56 +-51 +-47 +-41 +-35 +-35 +-29 +-27 +-23 +-26 +-23 +-25 +-23 +-24 +-22 +-23 +-18 +-17 +-13 +118 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +114 +102 +101 +95 +18 +-50 +-109 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +14 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +117 +109 +101 +93 +87 +82 +75 +70 +66 +60 +56 +51 +46 +44 +36 +34 +29 +26 +27 +25 +24 +23 +22 +19 +18 +17 +11 +12 +12 +8 +8 +5 +6 +8 +8 +9 +7 +7 +-60 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-113 +-104 +-95 +-87 +-79 +-74 +-71 +-66 +-59 +-55 +-56 +-52 +-51 +-46 +-41 +-38 +-38 +-36 +-36 +-34 +-33 +-28 +-26 +-22 +-24 +-21 +-22 +-21 +-20 +-17 +-20 +116 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +108 +98 +93 +17 +-50 +-110 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +14 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +117 +107 +100 +94 +86 +81 +6 +-61 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +22 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +113 +104 +94 +87 +76 +2 +-64 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +20 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +114 +106 +102 +93 +88 +81 +6 +-60 +-118 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +19 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +117 +105 +98 +87 +82 +75 +70 +66 +60 +56 +48 +46 +44 +40 +38 +36 +33 +32 +28 +26 +25 +21 +19 +19 +16 +16 +20 +19 +18 +18 +16 +14 +11 +11 +10 +4 +3 +-1 +-67 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-114 +-106 +-96 +-91 +-84 +-80 +-75 +-71 +-65 +-61 +-54 +-50 +-51 +-47 +-48 +-44 +-45 +-40 +-40 +-35 +-31 +-32 +-28 +-27 +-23 +-20 +-23 +-19 +-21 +-20 +-15 +119 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +109 +100 +95 +89 +80 +70 +64 +57 +54 +52 +48 +45 +37 +34 +30 +27 +25 +22 +21 +24 +23 +22 +22 +20 +19 +15 +16 +14 +8 +7 +2 +3 +-2 +-2 +1 +-65 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +4 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +114 +103 +94 +86 +80 +5 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-115 +-105 +-96 +-95 +-86 +-80 +-72 +-71 +-66 +-64 +-60 +-58 +-54 +-52 +-48 +-44 +-40 +-40 +-36 +-34 +-31 +-30 +-28 +-25 +-27 +-24 +-21 +-16 +-15 +-14 +-11 +-8 +123 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +114 +107 +95 +89 +80 +75 +69 +65 +63 +57 +52 +47 +45 +40 +38 +36 +32 +30 +26 +23 +22 +17 +16 +11 +10 +13 +11 +12 +11 +12 +9 +8 +8 +4 +2 +6 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +10 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +117 +107 +99 +87 +81 +75 +0 +-65 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +15 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +115 +106 +99 +92 +82 +78 +3 +-63 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-118 +21 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +111 +104 +93 +88 +81 +76 +2 +-64 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +14 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +114 +105 +97 +88 +82 +7 +-59 +-118 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-114 +-104 +-98 +-91 +-86 +-82 +-77 +-73 +-68 +-63 +-57 +-51 +-49 +-46 +-44 +-42 +-40 +-37 +-37 +-34 +-33 +-30 +-28 +-27 +-22 +-18 +-16 +-17 +-15 +-16 +-14 +-11 +122 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +109 +104 +100 +96 +90 +83 +76 +69 +65 +62 +56 +54 +49 +46 +41 +38 +31 +28 +25 +23 +16 +16 +11 +10 +13 +10 +11 +10 +10 +14 +15 +13 +13 +11 +12 +7 +-60 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-119 +-109 +-102 +-94 +-86 +-84 +-78 +-75 +-70 +-67 +-60 +-53 +-49 +-48 +-44 +-43 +-37 +-33 +-32 +-31 +-28 +-30 +-28 +-30 +-27 +-27 +-24 +-23 +-21 +-17 +-20 +116 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +110 +100 +93 +84 +79 +68 +64 +55 +49 +49 +44 +42 +39 +38 +34 +32 +31 +27 +26 +25 +19 +18 +20 +15 +15 +13 +13 +12 +10 +10 +10 +5 +6 +9 +11 +-57 +-116 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +3 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +114 +102 +95 +88 +82 +75 +1 +-65 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-117 +-108 +-101 +-92 +-86 +-79 +-72 +-68 +-64 +-61 +-59 +-55 +-56 +-51 +-49 +-44 +-38 +-36 +-35 +-32 +-29 +-25 +-22 +-22 +-21 +-22 +-21 +-21 +-18 +-18 +-14 +-16 +119 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +117 +109 +96 +90 +78 +73 +64 +61 +55 +52 +48 +44 +42 +41 +41 +39 +35 +32 +30 +26 +24 +15 +14 +15 +14 +14 +10 +9 +4 +5 +8 +8 +9 +4 +5 +3 +-63 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-120 +-111 +-104 +-93 +-86 +-78 +-72 +-70 +-65 +-60 +-58 +-55 +-51 +-46 +-48 +-43 +-45 +-40 +-37 +-32 +-27 +-28 +-25 +-27 +-24 +-23 +-21 +-20 +-15 +-12 +-13 +124 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +110 +107 +100 +96 +19 +-49 +-109 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +114 +106 +94 +89 +82 +77 +2 +-64 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-120 +22 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +110 +104 +96 +86 +80 +74 +65 +60 +55 +50 +45 +42 +40 +36 +33 +30 +31 +31 +24 +23 +18 +18 +13 +13 +8 +8 +11 +12 +12 +12 +7 +7 +6 +6 +6 +1 +2 +-64 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +6 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +121 +113 +107 +96 +90 +82 +6 +-60 +-118 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +15 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +113 +105 +101 +93 +88 +82 +7 +-59 +-118 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-111 +-106 +-96 +-90 +-83 +-78 +-69 +-63 +-57 +-51 +-45 +-46 +-42 +-42 +-40 +-40 +-37 +-35 +-31 +-26 +-23 +-25 +-23 +-23 +-19 +-18 +-15 +-17 +-15 +-18 +-16 +115 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +118 +109 +105 +97 +91 +82 +75 +69 +65 +60 +53 +47 +45 +44 +39 +36 +32 +32 +27 +28 +26 +22 +20 +13 +12 +9 +8 +8 +6 +6 +10 +10 +10 +13 +12 +13 +-54 +-114 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-116 +-108 +-102 +-97 +-90 +-84 +-76 +-69 +-66 +-62 +-59 +-57 +-53 +-48 +-46 +-40 +-39 +-37 +-37 +-34 +-33 +-32 +-29 +-26 +-22 +-19 +-20 +-19 +-20 +-19 +-18 +117 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +115 +108 +101 +93 +17 +-51 +-110 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-118 +23 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +116 +108 +101 +91 +86 +10 +-56 +-116 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +15 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +110 +100 +95 +88 +80 +5 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +116 +106 +100 +92 +80 +6 +-61 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +15 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +113 +100 +95 +84 +80 +73 +69 +64 +60 +56 +48 +46 +44 +36 +35 +34 +30 +29 +27 +25 +24 +18 +18 +13 +14 +16 +15 +16 +18 +14 +16 +14 +14 +9 +9 +6 +5 +-62 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +3 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +114 +107 +98 +91 +86 +76 +2 +-64 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +113 +106 +99 +86 +81 +6 +-60 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +117 +108 +101 +94 +84 +79 +4 +-62 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-117 +-107 +-98 +-89 +-83 +-83 +-77 +-76 +-70 +-69 +-63 +-61 +-56 +-55 +-50 +-45 +-41 +-36 +-37 +-32 +-34 +-30 +-27 +-25 +-22 +-21 +-19 +-16 +-18 +-16 +-19 +-16 +120 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +116 +105 +99 +94 +86 +82 +75 +72 +66 +61 +58 +51 +46 +40 +39 +35 +34 +30 +27 +26 +25 +21 +21 +18 +18 +13 +12 +8 +7 +6 +5 +1 +1 +4 +3 +4 +-63 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-111 +-104 +-93 +-86 +-80 +-74 +-69 +-70 +-66 +-66 +-61 +-61 +-56 +-55 +-50 +-44 +-40 +-36 +-37 +-34 +-29 +-30 +-27 +-29 +-25 +-23 +-25 +-20 +-19 +-20 +-16 +118 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +114 +102 +95 +18 +-49 +-109 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +12 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +107 +100 +89 +84 +75 +0 +-65 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +14 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +112 +106 +98 +90 +85 +9 +-58 +-116 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +115 +107 +100 +92 +86 +80 +76 +78 +72 +68 +60 +57 +50 +48 +40 +37 +32 +30 +22 +21 +15 +15 +11 +12 +12 +8 +10 +12 +8 +10 +5 +6 +5 +5 +5 +5 +5 +10 +-58 +-117 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-119 +-111 +-101 +-91 +-86 +-81 +-76 +-72 +-67 +-62 +-55 +-50 +-46 +-49 +-45 +-47 +-43 +-44 +-39 +-35 +-34 +-26 +-24 +-20 +-23 +-20 +-24 +-21 +-23 +-20 +-17 +114 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +116 +108 +101 +90 +85 +77 +72 +67 +61 +57 +54 +49 +46 +46 +45 +42 +38 +34 +33 +29 +26 +23 +22 +14 +13 +9 +8 +4 +3 +6 +7 +9 +6 +7 +7 +6 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +9 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +116 +104 +96 +90 +84 +74 +0 +-66 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-114 +-111 +-103 +-99 +-92 +-87 +-81 +-77 +-70 +-68 +-61 +-60 +-54 +-50 +-45 +-41 +-42 +-38 +-32 +-26 +-22 +-23 +-21 +-20 +-19 +-19 +-18 +-16 +-20 +-17 +-20 +-19 +118 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +117 +106 +100 +92 +87 +77 +72 +63 +58 +49 +47 +40 +38 +38 +38 +36 +35 +35 +34 +29 +26 +23 +21 +15 +14 +11 +10 +10 +5 +6 +8 +4 +6 +2 +2 +6 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +10 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +116 +106 +99 +87 +82 +72 +-1 +-67 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-118 +-112 +-104 +-97 +-88 +-85 +-78 +-76 +-69 +-64 +-60 +-51 +-47 +-40 +-42 +-37 +-38 +-35 +-35 +-28 +-27 +-23 +-26 +-23 +-25 +-22 +-25 +-22 +-19 +-18 +-15 +-18 +118 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +112 +102 +94 +17 +-50 +-110 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +111 +99 +94 +83 +78 +4 +-62 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +15 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +110 +102 +95 +88 +83 +72 +69 +63 +60 +57 +53 +49 +44 +41 +39 +32 +29 +30 +28 +27 +21 +20 +14 +13 +13 +15 +16 +14 +15 +16 +14 +15 +13 +15 +12 +13 +11 +-57 +-116 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +6 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +108 +99 +93 +85 +79 +4 +-62 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +115 +102 +96 +88 +83 +78 +3 +-63 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-119 +19 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +117 +108 +100 +94 +82 +78 +4 +-62 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +19 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +117 +109 +99 +96 +90 +86 +10 +-56 +-115 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +12 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +115 +107 +96 +90 +83 +79 +4 +-62 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-117 +-111 +-101 +-93 +-85 +-78 +-76 +-69 +-67 +-61 +-58 +-53 +-49 +-47 +-42 +-42 +-37 +-38 +-34 +-30 +-25 +-21 +-24 +-20 +-23 +-20 +-22 +-19 +-21 +-18 +-20 +-16 +119 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +110 +102 +96 +90 +80 +74 +64 +60 +53 +49 +45 +42 +38 +36 +34 +30 +29 +31 +31 +26 +23 +21 +21 +17 +16 +14 +12 +11 +8 +7 +6 +1 +2 +-2 +0 +-66 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-115 +-110 +-101 +-98 +-90 +-87 +-82 +-72 +-67 +-62 +-56 +-50 +-50 +-46 +-44 +-41 +-38 +-34 +-36 +-33 +-29 +-30 +-26 +-25 +-22 +-20 +-22 +-19 +-19 +-19 +-16 +115 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +108 +101 +95 +18 +-49 +-109 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +111 +100 +95 +85 +81 +77 +71 +67 +62 +58 +54 +52 +51 +49 +44 +43 +41 +38 +29 +28 +21 +19 +17 +16 +16 +10 +10 +12 +8 +10 +8 +9 +8 +7 +7 +6 +5 +6 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-116 +-113 +-104 +-101 +-92 +-89 +-81 +-76 +-69 +-65 +-58 +-51 +-51 +-43 +-41 +-36 +-34 +-33 +-30 +-26 +-25 +-28 +-26 +-29 +-26 +-28 +-25 +-25 +-18 +-15 +-14 +123 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +115 +105 +96 +90 +14 +-53 +-112 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +19 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +116 +107 +100 +94 +84 +79 +4 +-62 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +107 +98 +89 +81 +74 +0 +-66 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +19 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +114 +108 +96 +91 +86 +80 +5 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-119 +22 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +107 +103 +95 +89 +79 +74 +65 +60 +56 +53 +44 +42 +38 +36 +35 +28 +26 +28 +27 +26 +20 +20 +17 +16 +16 +14 +13 +12 +7 +7 +9 +4 +6 +5 +5 +6 +5 +-62 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-120 +-114 +-105 +-99 +-91 +-88 +-79 +-77 +-71 +-63 +-59 +-53 +-50 +-44 +-39 +-38 +-35 +-33 +-32 +-30 +-28 +-24 +-20 +-22 +-22 +-21 +-18 +-15 +-13 +-16 +-15 +118 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +112 +106 +101 +94 +17 +-50 +-110 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +23 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +106 +98 +91 +86 +82 +6 +-60 +-118 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +13 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +112 +104 +96 +91 +84 +73 +68 +58 +55 +50 +46 +43 +42 +41 +38 +36 +28 +27 +22 +21 +15 +15 +15 +11 +9 +12 +9 +11 +7 +8 +6 +6 +7 +3 +5 +8 +9 +-58 +-118 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-117 +-109 +-102 +-94 +-88 +-80 +-78 +-72 +-68 +-62 +-53 +-50 +-44 +-46 +-42 +-43 +-39 +-39 +-36 +-34 +-30 +-32 +-28 +-23 +-24 +-21 +-22 +-19 +-18 +-17 +-20 +116 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +115 +109 +102 +93 +84 +77 +72 +68 +64 +59 +50 +46 +41 +37 +34 +34 +32 +29 +28 +29 +26 +26 +22 +22 +19 +16 +15 +15 +12 +11 +5 +5 +2 +2 +2 +1 +-65 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +10 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +112 +105 +94 +88 +84 +79 +4 +-62 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +116 +104 +97 +90 +84 +74 +0 +-65 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-116 +-106 +-96 +-92 +-86 +-81 +-77 +-72 +-69 +-63 +-58 +-54 +-49 +-44 +-44 +-42 +-40 +-38 +-36 +-33 +-29 +-25 +-26 +-25 +-24 +-21 +-24 +-22 +-24 +-21 +-20 +-18 +117 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +118 +110 +97 +91 +79 +74 +67 +63 +58 +54 +50 +51 +47 +45 +43 +40 +37 +34 +32 +29 +27 +26 +23 +16 +14 +8 +8 +3 +8 +10 +10 +11 +9 +7 +6 +5 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +4 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +115 +105 +99 +92 +82 +6 +-60 +-118 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-117 +-109 +-103 +-94 +-84 +-82 +-75 +-74 +-67 +-65 +-59 +-57 +-52 +-48 +-43 +-44 +-40 +-41 +-36 +-31 +-32 +-28 +-24 +-22 +-20 +-19 +-18 +-15 +-18 +-15 +-16 +-14 +119 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +114 +105 +98 +91 +15 +-52 +-112 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-119 +22 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +99 +93 +81 +76 +67 +64 +59 +53 +51 +47 +45 +44 +37 +34 +35 +33 +32 +25 +24 +19 +18 +20 +16 +17 +15 +15 +12 +12 +11 +8 +8 +8 +6 +6 +6 +5 +-62 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-117 +-108 +-101 +-92 +-87 +-78 +-71 +-68 +-65 +-62 +-60 +-56 +-52 +-47 +-42 +-40 +-37 +-36 +-35 +-32 +-30 +-32 +-29 +-31 +-27 +-26 +-26 +-23 +-25 +-21 +-18 +120 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +113 +105 +98 +90 +14 +-53 +-112 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +14 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +116 +109 +97 +90 +87 +82 +7 +-60 +-118 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +21 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +116 +106 +99 +87 +82 +72 +-2 +-68 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +117 +106 +98 +90 +84 +77 +2 +-63 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +111 +102 +96 +88 +81 +74 +70 +68 +61 +58 +53 +51 +44 +41 +36 +34 +27 +25 +26 +26 +26 +21 +19 +16 +15 +12 +11 +11 +9 +8 +8 +6 +5 +9 +11 +10 +9 +-58 +-118 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-120 +-113 +-103 +-93 +-86 +-85 +-78 +-76 +-70 +-68 +-62 +-61 +-55 +-52 +-48 +-43 +-43 +-38 +-33 +-34 +-30 +-31 +-30 +-25 +-22 +-20 +-18 +-16 +-15 +-11 +-13 +121 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +104 +97 +91 +83 +78 +73 +63 +60 +57 +53 +50 +42 +41 +38 +35 +32 +30 +28 +26 +23 +22 +21 +15 +14 +16 +13 +14 +12 +13 +16 +14 +15 +10 +10 +5 +-61 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +3 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +114 +106 +93 +86 +75 +0 +-65 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-113 +-104 +-102 +-94 +-89 +-82 +-81 +-74 +-72 +-66 +-64 +-58 +-53 +-48 +-44 +-44 +-40 +-35 +-30 +-26 +-27 +-25 +-26 +-24 +-24 +-20 +-18 +-14 +-16 +-14 +-17 +-16 +118 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +115 +103 +97 +93 +86 +83 +76 +76 +70 +65 +55 +51 +43 +41 +33 +32 +28 +27 +25 +24 +22 +24 +21 +22 +18 +16 +14 +12 +11 +5 +5 +1 +2 +4 +2 +4 +-63 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +6 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +117 +107 +98 +90 +85 +78 +4 +-63 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +19 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +111 +102 +93 +89 +82 +6 +-60 +-118 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +110 +105 +97 +88 +84 +8 +-58 +-117 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +15 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +114 +105 +100 +92 +84 +9 +-58 +-117 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-120 +-109 +-105 +-96 +-87 +-80 +-71 +-66 +-60 +-54 +-53 +-50 +-48 +-46 +-44 +-42 +-39 +-34 +-32 +-29 +-26 +-24 +-27 +-26 +-27 +-25 +-26 +-24 +-24 +-18 +-16 +-12 +119 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +116 +107 +99 +94 +89 +80 +73 +68 +64 +55 +52 +46 +43 +41 +37 +35 +34 +32 +31 +25 +24 +19 +18 +16 +15 +15 +17 +18 +17 +16 +13 +14 +10 +8 +5 +4 +-63 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-118 +-108 +-103 +-95 +-90 +-84 +-82 +-74 +-72 +-65 +-60 +-55 +-51 +-45 +-39 +-42 +-37 +-38 +-33 +-32 +-29 +-27 +-26 +-24 +-24 +-21 +-18 +-19 +-16 +-14 +-17 +118 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +116 +107 +100 +96 +20 +-48 +-108 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +113 +106 +94 +88 +81 +77 +72 +67 +62 +61 +57 +56 +50 +47 +42 +38 +32 +31 +31 +28 +26 +20 +18 +15 +13 +13 +11 +11 +14 +13 +13 +12 +12 +7 +6 +4 +4 +-2 +-68 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-118 +-111 +-101 +-91 +-84 +-82 +-76 +-75 +-69 +-67 +-62 +-60 +-55 +-51 +-46 +-47 +-42 +-42 +-39 +-32 +-31 +-28 +-27 +-24 +-25 +-22 +-24 +-22 +-19 +-21 +-17 +118 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +112 +105 +96 +89 +12 +-54 +-114 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +19 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +111 +102 +96 +89 +78 +3 +-63 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +113 +107 +99 +86 +80 +5 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +21 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +117 +107 +100 +88 +82 +75 +1 +-65 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-119 +21 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +106 +98 +90 +85 +79 +72 +66 +59 +56 +52 +44 +40 +35 +34 +31 +30 +25 +24 +21 +20 +14 +14 +11 +10 +11 +6 +5 +9 +9 +9 +7 +8 +8 +5 +5 +5 +-61 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-116 +-106 +-96 +-89 +-87 +-81 +-79 +-73 +-70 +-65 +-61 +-57 +-57 +-52 +-51 +-46 +-39 +-38 +-33 +-31 +-28 +-30 +-27 +-30 +-26 +-23 +-19 +-15 +-18 +-15 +-18 +118 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +117 +105 +98 +87 +80 +78 +71 +68 +64 +60 +51 +48 +41 +38 +38 +37 +36 +29 +28 +25 +23 +23 +20 +19 +18 +13 +13 +11 +11 +11 +9 +9 +8 +7 +7 +10 +-57 +-117 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-119 +-114 +-105 +-100 +-92 +-89 +-81 +-78 +-70 +-61 +-59 +-53 +-51 +-47 +-47 +-42 +-42 +-38 +-32 +-29 +-24 +-25 +-22 +-23 +-22 +-25 +-21 +-24 +-20 +-17 +-12 +124 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +116 +106 +97 +92 +16 +-52 +-111 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +19 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +110 +96 +91 +81 +76 +67 +62 +61 +59 +54 +51 +48 +41 +39 +32 +30 +31 +27 +27 +25 +24 +18 +18 +18 +13 +12 +15 +14 +15 +9 +10 +12 +11 +11 +12 +12 +9 +-58 +-118 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-116 +-106 +-98 +-90 +-80 +-76 +-70 +-66 +-62 +-58 +-52 +-49 +-43 +-42 +-39 +-38 +-36 +-36 +-32 +-29 +-25 +-26 +-24 +-25 +-23 +-23 +-18 +-17 +-14 +-13 +121 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +112 +105 +96 +90 +86 +79 +72 +65 +61 +58 +55 +49 +45 +36 +34 +27 +26 +21 +20 +20 +24 +23 +23 +22 +20 +20 +17 +14 +12 +10 +10 +10 +9 +8 +2 +2 +-64 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +7 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +113 +103 +97 +91 +83 +8 +-59 +-118 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +101 +94 +86 +80 +5 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-120 +-111 +-102 +-95 +-85 +-78 +-77 +-70 +-67 +-62 +-56 +-56 +-51 +-52 +-47 +-42 +-39 +-34 +-37 +-32 +-34 +-30 +-26 +-26 +-19 +-17 +-14 +-16 +-15 +-18 +-16 +-16 +118 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +115 +103 +100 +93 +17 +-51 +-110 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +117 +108 +101 +93 +86 +81 +6 +-60 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +118 +111 +99 +98 +93 +88 +83 +76 +70 +64 +55 +50 +42 +44 +40 +38 +32 +30 +22 +22 +19 +17 +18 +16 +16 +20 +18 +18 +17 +17 +11 +10 +7 +6 +3 +4 +8 +7 +-60 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-117 +-108 +-99 +-92 +-90 +-82 +-77 +-69 +-64 +-59 +-54 +-53 +-50 +-47 +-49 +-45 +-46 +-43 +-44 +-39 +-36 +-36 +-31 +-32 +-28 +-24 +-25 +-21 +-16 +-18 +-16 +116 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +115 +106 +99 +91 +84 +78 +71 +66 +63 +54 +51 +44 +40 +41 +39 +38 +34 +32 +31 +25 +24 +21 +19 +24 +22 +21 +15 +15 +11 +10 +10 +7 +6 +6 +4 +5 +-62 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +6 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +114 +105 +97 +91 +86 +82 +7 +-59 +-118 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +107 +99 +88 +82 +75 +1 +-65 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +13 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +115 +106 +98 +93 +85 +80 +5 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +14 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +109 +101 +92 +89 +82 +7 +-59 +-118 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-112 +-104 +-97 +-92 +-84 +-78 +-73 +-66 +-61 +-61 +-58 +-58 +-53 +-52 +-48 +-44 +-40 +-42 +-37 +-39 +-36 +-29 +-28 +-24 +-26 +-21 +-24 +-20 +-17 +-18 +-16 +-18 +116 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +103 +97 +93 +17 +-50 +-110 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-118 +23 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +117 +109 +97 +91 +83 +77 +2 +-63 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-120 +22 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +112 +109 +102 +97 +91 +86 +10 +-57 +-116 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +13 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +108 +100 +91 +85 +81 +75 +72 +65 +63 +57 +55 +50 +46 +44 +39 +34 +30 +26 +24 +22 +20 +19 +12 +12 +9 +9 +9 +4 +3 +6 +6 +8 +4 +5 +1 +2 +2 +-65 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-118 +-109 +-105 +-96 +-93 +-85 +-80 +-75 +-68 +-62 +-61 +-56 +-51 +-47 +-43 +-41 +-39 +-33 +-31 +-26 +-27 +-25 +-26 +-24 +-24 +-22 +-21 +-19 +-22 +-20 +-22 +114 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +110 +102 +98 +94 +84 +80 +70 +67 +61 +57 +53 +49 +45 +41 +35 +35 +33 +34 +33 +31 +30 +30 +26 +24 +21 +19 +13 +12 +9 +9 +12 +12 +12 +14 +11 +10 +-57 +-117 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +7 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +105 +100 +97 +89 +83 +8 +-59 +-118 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +20 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +112 +106 +99 +90 +82 +7 +-60 +-118 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +20 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +117 +109 +102 +91 +86 +76 +2 +-64 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-116 +-112 +-99 +-92 +-84 +-80 +-73 +-69 +-62 +-60 +-56 +-54 +-48 +-44 +-43 +-41 +-39 +-35 +-32 +-28 +-28 +-27 +-28 +-26 +-26 +-23 +-19 +-16 +-18 +-16 +-18 +-17 +118 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +115 +108 +98 +92 +86 +78 +73 +69 +63 +60 +53 +50 +47 +40 +38 +34 +32 +34 +32 +31 +24 +23 +18 +17 +16 +14 +13 +11 +10 +10 +7 +4 +5 +4 +4 +4 +-62 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-120 +-111 +-101 +-97 +-89 +-85 +-78 +-72 +-66 +-63 +-58 +-52 +-52 +-48 +-48 +-45 +-39 +-35 +-31 +-32 +-29 +-31 +-27 +-25 +-20 +-16 +-18 +-16 +-16 +-16 +-15 +120 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +115 +106 +100 +90 +14 +-53 +-113 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +117 +108 +101 +96 +92 +85 +81 +72 +68 +61 +57 +52 +46 +44 +36 +34 +28 +28 +22 +20 +22 +20 +20 +19 +19 +14 +13 +15 +12 +13 +11 +11 +8 +7 +7 +2 +3 +-1 +-67 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-113 +-110 +-101 +-99 +-91 +-88 +-81 +-77 +-70 +-68 +-61 +-57 +-54 +-48 +-47 +-42 +-42 +-37 +-38 +-33 +-27 +-28 +-25 +-26 +-23 +-24 +-22 +-20 +-17 +-18 +-15 +122 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +115 +107 +95 +89 +14 +-54 +-113 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +12 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +117 +105 +98 +95 +87 +83 +76 +72 +62 +60 +52 +48 +48 +43 +41 +38 +36 +30 +27 +22 +21 +23 +20 +20 +17 +21 +19 +20 +20 +17 +17 +14 +14 +12 +11 +9 +7 +8 +-59 +-118 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +5 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +112 +102 +97 +90 +85 +78 +4 +-62 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +11 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +111 +104 +91 +85 +83 +7 +-59 +-118 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-115 +-107 +-97 +-89 +-88 +-80 +-77 +-69 +-65 +-58 +-57 +-52 +-50 +-44 +-42 +-40 +-36 +-38 +-36 +-37 +-34 +-34 +-30 +-28 +-26 +-27 +-26 +-20 +-15 +-13 +-13 +-11 +121 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +114 +108 +100 +94 +18 +-50 +-110 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +117 +111 +103 +95 +88 +82 +7 +-59 +-118 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +15 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +109 +100 +94 +89 +83 +8 +-59 +-117 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +15 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +116 +109 +98 +91 +81 +6 +-60 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +116 +111 +103 +98 +88 +83 +8 +-59 +-118 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +112 +102 +94 +88 +79 +72 +66 +62 +57 +55 +50 +46 +40 +37 +33 +31 +24 +23 +20 +18 +18 +13 +14 +15 +11 +12 +8 +8 +12 +8 +8 +8 +8 +6 +6 +6 +1 +-65 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-120 +-111 +-106 +-98 +-92 +-82 +-75 +-67 +-66 +-60 +-59 +-55 +-53 +-50 +-47 +-44 +-44 +-39 +-40 +-35 +-29 +-30 +-26 +-28 +-24 +-26 +-22 +-19 +-14 +-11 +-13 +121 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +116 +108 +94 +89 +78 +74 +66 +62 +59 +58 +56 +51 +50 +49 +46 +38 +36 +29 +27 +24 +23 +22 +20 +19 +15 +14 +13 +11 +11 +10 +9 +10 +12 +12 +12 +11 +-56 +-116 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +2 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +111 +100 +94 +85 +78 +4 +-62 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-116 +-110 +-102 +-95 +-90 +-81 +-74 +-71 +-65 +-58 +-55 +-53 +-49 +-51 +-46 +-45 +-38 +-35 +-30 +-33 +-29 +-31 +-28 +-30 +-27 +-26 +-23 +-25 +-22 +-18 +-18 +-16 +119 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +118 +114 +107 +101 +90 +85 +78 +71 +68 +66 +63 +58 +54 +49 +45 +37 +35 +30 +28 +26 +20 +20 +22 +17 +18 +12 +10 +12 +10 +11 +8 +8 +7 +8 +6 +2 +5 +-62 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +12 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +111 +103 +96 +90 +84 +79 +4 +-62 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +114 +105 +97 +85 +80 +73 +-1 +-67 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +24 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +114 +106 +98 +92 +89 +83 +7 +-59 +-118 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-119 +22 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +105 +98 +89 +83 +73 +-1 +-66 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-117 +-108 +-97 +-89 +-85 +-80 +-76 +-71 +-67 +-60 +-56 +-49 +-48 +-44 +-43 +-40 +-40 +-37 +-38 +-34 +-35 +-31 +-29 +-26 +-23 +-25 +-21 +-22 +-20 +-15 +-16 +-12 +119 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +111 +105 +99 +91 +86 +85 +78 +74 +65 +61 +52 +49 +44 +42 +39 +36 +34 +30 +28 +27 +23 +22 +21 +19 +18 +21 +19 +18 +19 +16 +14 +14 +14 +10 +7 +6 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +9 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +113 +103 +95 +86 +81 +6 +-60 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +116 +108 +99 +93 +85 +79 +4 +-62 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-117 +-108 +-98 +-91 +-84 +-79 +-72 +-66 +-67 +-62 +-62 +-57 +-57 +-52 +-48 +-42 +-35 +-36 +-32 +-34 +-30 +-31 +-28 +-29 +-26 +-24 +-22 +-21 +-19 +-16 +-19 +-17 +121 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +109 +101 +92 +86 +79 +71 +69 +63 +59 +57 +54 +50 +45 +42 +40 +35 +34 +30 +29 +25 +22 +18 +19 +17 +10 +10 +5 +6 +1 +2 +3 +2 +2 +3 +2 +-64 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-117 +-109 +-100 +-95 +-85 +-76 +-72 +-69 +-65 +-60 +-56 +-49 +-45 +-47 +-44 +-43 +-41 +-39 +-34 +-29 +-25 +-26 +-24 +-26 +-20 +-19 +-16 +-19 +-17 +-19 +-17 +114 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +111 +104 +96 +90 +14 +-54 +-113 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-119 +26 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +110 +103 +95 +88 +82 +7 +-59 +-118 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +14 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +104 +96 +90 +82 +75 +69 +63 +59 +52 +49 +49 +46 +44 +37 +35 +31 +28 +27 +24 +23 +18 +17 +18 +14 +14 +10 +10 +9 +9 +5 +5 +8 +7 +7 +6 +7 +-60 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-120 +-112 +-102 +-96 +-87 +-82 +-76 +-73 +-67 +-64 +-58 +-54 +-48 +-45 +-45 +-41 +-40 +-36 +-31 +-30 +-29 +-29 +-29 +-27 +-27 +-23 +-19 +-20 +-19 +-18 +-14 +120 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +109 +101 +90 +85 +9 +-57 +-116 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-118 +25 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +116 +109 +101 +94 +89 +82 +76 +72 +63 +60 +61 +58 +55 +47 +44 +38 +34 +33 +29 +27 +25 +23 +21 +15 +15 +10 +8 +12 +8 +14 +14 +15 +15 +13 +11 +9 +7 +7 +-59 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +9 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +117 +108 +101 +89 +83 +73 +-1 +-66 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-112 +-106 +-99 +-93 +-88 +-81 +-74 +-73 +-67 +-66 +-60 +-56 +-51 +-51 +-47 +-41 +-38 +-32 +-32 +-29 +-30 +-27 +-28 +-25 +-27 +-24 +-26 +-24 +-18 +-20 +-16 +-18 +118 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +117 +105 +98 +94 +85 +81 +72 +68 +62 +59 +49 +47 +40 +37 +38 +36 +34 +32 +30 +29 +22 +22 +16 +14 +16 +16 +16 +15 +14 +8 +8 +8 +6 +6 +6 +4 +-62 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +11 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +114 +108 +97 +90 +81 +6 +-60 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +118 +106 +100 +98 +92 +87 +12 +-55 +-115 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +111 +104 +100 +93 +88 +81 +6 +-60 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +118 +110 +102 +94 +89 +85 +10 +-57 +-116 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-120 +-111 +-107 +-98 +-92 +-86 +-77 +-71 +-68 +-65 +-61 +-57 +-53 +-47 +-43 +-46 +-41 +-43 +-39 +-39 +-35 +-36 +-32 +-29 +-28 +-22 +-18 +-15 +-12 +-10 +-12 +-11 +-16 +119 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +112 +105 +97 +90 +84 +81 +78 +72 +68 +62 +59 +54 +50 +46 +43 +38 +34 +32 +31 +25 +22 +18 +16 +14 +14 +9 +9 +7 +6 +6 +6 +6 +4 +1 +3 +4 +-63 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-112 +-107 +-98 +-94 +-86 +-83 +-74 +-69 +-62 +-54 +-53 +-47 +-47 +-42 +-42 +-38 +-36 +-33 +-32 +-30 +-25 +-21 +-19 +-17 +-16 +-13 +-14 +-13 +-15 +-15 +118 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +114 +104 +96 +89 +13 +-54 +-113 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +22 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +111 +101 +97 +90 +82 +76 +65 +60 +52 +49 +41 +38 +38 +36 +36 +30 +29 +22 +22 +24 +21 +21 +19 +18 +16 +15 +15 +12 +11 +11 +9 +9 +8 +7 +7 +2 +2 +-65 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-114 +-105 +-99 +-93 +-88 +-84 +-77 +-71 +-63 +-57 +-52 +-54 +-50 +-52 +-47 +-44 +-41 +-38 +-33 +-28 +-28 +-21 +-20 +-18 +-21 +-19 +-21 +-20 +-22 +-20 +-20 +115 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +109 +101 +89 +13 +-54 +-113 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-118 +24 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +113 +106 +99 +90 +83 +7 +-59 +-118 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +114 +106 +98 +92 +86 +78 +4 +-62 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +22 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +114 +107 +96 +87 +80 +5 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +114 +106 +99 +94 +86 +80 +75 +70 +65 +57 +51 +50 +47 +44 +42 +41 +38 +35 +31 +30 +27 +27 +24 +21 +19 +20 +15 +13 +11 +10 +5 +5 +0 +-1 +2 +2 +6 +6 +-60 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-115 +-103 +-99 +-91 +-87 +-81 +-77 +-72 +-68 +-63 +-61 +-56 +-52 +-48 +-45 +-45 +-40 +-40 +-35 +-36 +-31 +-27 +-25 +-23 +-22 +-20 +-17 +-18 +-17 +-15 +-12 +124 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +118 +111 +103 +97 +95 +89 +84 +80 +75 +65 +60 +51 +47 +42 +40 +35 +32 +30 +24 +21 +22 +20 +19 +18 +18 +12 +12 +7 +7 +10 +10 +10 +9 +8 +8 +3 +4 +-63 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +8 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +109 +102 +91 +86 +79 +74 +0 +-65 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-116 +-107 +-103 +-94 +-88 +-82 +-76 +-72 +-66 +-64 +-58 +-57 +-51 +-45 +-44 +-40 +-41 +-36 +-35 +-34 +-29 +-30 +-27 +-28 +-24 +-21 +-19 +-16 +-18 +-15 +-12 +-13 +123 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +111 +102 +93 +87 +82 +74 +68 +61 +57 +52 +50 +44 +41 +36 +33 +30 +29 +22 +21 +16 +16 +11 +9 +12 +11 +14 +13 +15 +11 +10 +8 +7 +5 +4 +5 +-62 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +10 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +113 +101 +95 +85 +81 +78 +4 +-62 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +115 +108 +101 +91 +86 +81 +6 +-60 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +21 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +114 +106 +98 +85 +80 +5 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +116 +107 +100 +91 +85 +9 +-57 +-116 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-119 +-112 +-105 +-99 +-90 +-83 +-75 +-68 +-65 +-59 +-54 +-52 +-49 +-46 +-45 +-42 +-39 +-37 +-32 +-30 +-32 +-29 +-32 +-28 +-29 +-26 +-28 +-24 +-23 +-19 +-14 +-14 +121 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +112 +101 +94 +91 +86 +81 +72 +68 +62 +59 +50 +48 +43 +41 +38 +35 +33 +31 +28 +28 +28 +28 +26 +24 +23 +23 +18 +15 +12 +13 +10 +11 +5 +6 +4 +3 +-63 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-111 +-107 +-99 +-96 +-88 +-85 +-78 +-72 +-66 +-66 +-59 +-53 +-49 +-43 +-42 +-38 +-37 +-34 +-36 +-33 +-34 +-30 +-26 +-27 +-24 +-26 +-22 +-19 +-17 +-15 +-18 +118 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +114 +104 +97 +88 +80 +72 +67 +59 +53 +51 +50 +47 +40 +38 +34 +32 +29 +26 +25 +24 +22 +21 +22 +21 +14 +13 +10 +9 +10 +5 +5 +3 +3 +3 +-1 +-67 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +10 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +117 +106 +100 +96 +86 +81 +6 +-60 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-111 +-107 +-98 +-95 +-87 +-83 +-75 +-70 +-63 +-58 +-56 +-51 +-47 +-44 +-44 +-39 +-36 +-36 +-34 +-28 +-26 +-23 +-22 +-17 +-17 +-13 +-15 +-14 +-15 +-14 +-16 +119 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +112 +99 +93 +82 +76 +74 +67 +63 +58 +54 +46 +44 +37 +36 +29 +29 +30 +27 +28 +29 +26 +25 +22 +22 +17 +16 +17 +16 +12 +11 +9 +7 +3 +3 +0 +-66 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-116 +-108 +-100 +-92 +-89 +-81 +-78 +-72 +-67 +-61 +-58 +-57 +-51 +-51 +-45 +-40 +-40 +-37 +-33 +-30 +-26 +-28 +-25 +-21 +-23 +-20 +-23 +-19 +-16 +-18 +-14 +120 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +108 +98 +91 +15 +-52 +-112 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +22 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +114 +102 +96 +89 +84 +83 +8 +-59 +-117 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +22 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +111 +99 +93 +82 +78 +68 +64 +62 +59 +57 +49 +46 +42 +39 +38 +34 +32 +30 +27 +25 +27 +25 +25 +24 +22 +21 +17 +17 +16 +11 +8 +6 +5 +0 +1 +-1 +0 +-66 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +10 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +112 +105 +97 +91 +84 +77 +3 +-63 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +15 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +115 +106 +99 +92 +84 +8 +-58 +-117 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-116 +-105 +-98 +-95 +-88 +-83 +-78 +-72 +-67 +-60 +-54 +-52 +-49 +-45 +-47 +-42 +-43 +-40 +-41 +-36 +-32 +-31 +-28 +-28 +-25 +-27 +-24 +-18 +-18 +-14 +-16 +-14 +116 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +109 +96 +90 +78 +74 +68 +63 +59 +55 +52 +48 +43 +41 +39 +35 +33 +31 +28 +27 +24 +22 +22 +18 +16 +22 +20 +18 +14 +14 +15 +12 +10 +4 +4 +1 +-65 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-119 +-111 +-103 +-92 +-85 +-76 +-73 +-67 +-65 +-60 +-58 +-55 +-50 +-46 +-46 +-41 +-39 +-36 +-35 +-32 +-29 +-31 +-27 +-29 +-25 +-27 +-25 +-19 +-19 +-16 +-15 +121 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +118 +105 +99 +91 +15 +-53 +-112 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +113 +105 +95 +91 +84 +9 +-58 +-117 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +19 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +108 +100 +89 +82 +73 +-1 +-66 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-119 +22 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +110 +101 +93 +86 +82 +7 +-59 +-118 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +20 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +114 +104 +98 +89 +85 +78 +70 +65 +61 +56 +47 +43 +35 +33 +27 +26 +24 +22 +21 +17 +17 +12 +13 +16 +13 +13 +11 +12 +10 +9 +9 +5 +4 +6 +7 +8 +6 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +8 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +106 +100 +88 +84 +80 +5 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +14 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +112 +104 +93 +85 +78 +4 +-63 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +19 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +110 +102 +95 +85 +79 +4 +-62 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-118 +-110 +-103 +-97 +-90 +-83 +-76 +-68 +-67 +-58 +-54 +-48 +-46 +-46 +-43 +-41 +-37 +-33 +-32 +-31 +-30 +-30 +-28 +-28 +-25 +-24 +-21 +-17 +-17 +-17 +-16 +-17 +117 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +106 +99 +90 +84 +78 +70 +66 +57 +54 +51 +50 +48 +45 +43 +42 +37 +37 +33 +32 +28 +24 +23 +22 +18 +14 +12 +12 +6 +6 +1 +2 +3 +2 +2 +6 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-119 +-111 +-100 +-91 +-89 +-82 +-81 +-74 +-73 +-66 +-64 +-53 +-48 +-43 +-43 +-41 +-36 +-34 +-29 +-30 +-27 +-27 +-25 +-24 +-24 +-20 +-18 +-16 +-13 +-11 +-13 +121 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +114 +106 +98 +90 +14 +-53 +-112 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +21 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +108 +102 +94 +89 +84 +78 +3 +-63 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +111 +102 +94 +88 +80 +5 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +117 +105 +98 +95 +86 +82 +76 +72 +65 +61 +57 +49 +47 +40 +38 +37 +34 +33 +30 +28 +27 +23 +21 +20 +17 +17 +20 +18 +18 +11 +11 +9 +7 +7 +8 +8 +3 +4 +-63 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-114 +-105 +-97 +-88 +-81 +-81 +-75 +-74 +-68 +-67 +-61 +-60 +-54 +-52 +-43 +-38 +-35 +-30 +-26 +-28 +-25 +-25 +-20 +-21 +-20 +-21 +-21 +-20 +-18 +-21 +-18 +114 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +114 +106 +94 +88 +80 +74 +67 +63 +59 +53 +50 +47 +42 +40 +37 +31 +30 +24 +23 +25 +21 +21 +19 +17 +15 +14 +14 +16 +16 +16 +14 +15 +14 +11 +8 +7 +-60 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +6 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +110 +102 +92 +85 +77 +2 +-64 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-113 +-102 +-95 +-93 +-86 +-85 +-78 +-76 +-70 +-67 +-60 +-57 +-52 +-49 +-44 +-37 +-38 +-34 +-34 +-31 +-32 +-28 +-30 +-26 +-27 +-24 +-26 +-22 +-20 +-20 +-17 +-19 +118 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +103 +96 +91 +80 +76 +72 +66 +62 +62 +60 +56 +47 +44 +39 +36 +34 +30 +28 +26 +22 +20 +16 +15 +15 +13 +12 +17 +16 +16 +16 +13 +10 +8 +8 +6 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +7 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +116 +107 +100 +94 +82 +78 +3 +-63 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-116 +-105 +-97 +-88 +-81 +-80 +-73 +-72 +-67 +-66 +-60 +-58 +-53 +-50 +-45 +-47 +-42 +-42 +-37 +-37 +-35 +-28 +-25 +-21 +-24 +-20 +-23 +-20 +-16 +-18 +-16 +-14 +122 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +105 +98 +88 +12 +-55 +-114 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-118 +22 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +114 +105 +98 +90 +82 +7 +-60 +-118 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +114 +102 +96 +89 +82 +75 +70 +67 +58 +56 +48 +44 +44 +43 +41 +35 +34 +30 +26 +26 +23 +22 +22 +20 +19 +17 +16 +15 +12 +11 +10 +9 +8 +13 +12 +12 +12 +10 +-57 +-117 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +10 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +107 +100 +92 +86 +79 +5 +-62 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +23 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +111 +100 +94 +85 +81 +6 +-61 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +112 +102 +95 +89 +81 +6 +-60 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +110 +101 +94 +87 +76 +2 +-64 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +19 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +115 +104 +97 +90 +85 +74 +0 +-66 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-120 +-113 +-104 +-102 +-93 +-91 +-83 +-80 +-74 +-66 +-58 +-52 +-50 +-46 +-44 +-38 +-36 +-33 +-32 +-29 +-28 +-26 +-23 +-26 +-24 +-24 +-23 +-22 +-19 +-16 +-13 +-16 +-14 +118 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +118 +111 +104 +92 +85 +75 +70 +63 +58 +55 +51 +48 +43 +40 +38 +34 +32 +29 +26 +25 +18 +19 +21 +17 +16 +14 +13 +11 +10 +10 +6 +6 +6 +5 +5 +6 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-113 +-109 +-102 +-97 +-90 +-84 +-78 +-76 +-70 +-68 +-62 +-58 +-54 +-50 +-50 +-44 +-44 +-40 +-34 +-28 +-24 +-25 +-22 +-22 +-19 +-23 +-20 +-23 +-21 +-23 +-22 +118 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +117 +110 +100 +93 +17 +-50 +-110 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +20 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +116 +106 +98 +91 +86 +81 +73 +68 +61 +58 +49 +46 +41 +38 +36 +33 +32 +34 +31 +30 +30 +28 +21 +20 +15 +13 +10 +9 +9 +7 +6 +7 +5 +5 +4 +3 +4 +2 +-65 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-115 +-107 +-97 +-93 +-87 +-84 +-79 +-74 +-68 +-61 +-55 +-53 +-50 +-48 +-46 +-43 +-39 +-37 +-32 +-32 +-29 +-29 +-23 +-22 +-19 +-19 +-17 +-18 +-15 +-17 +-16 +116 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +110 +104 +97 +93 +17 +-51 +-110 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +12 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +97 +91 +80 +75 +1 +-65 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-118 +25 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +116 +106 +98 +89 +84 +9 +-58 +-117 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +15 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +114 +106 +98 +92 +86 +10 +-57 +-116 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +21 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +118 +108 +102 +95 +90 +79 +74 +68 +64 +60 +55 +51 +46 +42 +40 +33 +32 +26 +24 +26 +25 +25 +24 +22 +21 +17 +15 +15 +10 +10 +5 +6 +10 +11 +10 +11 +11 +10 +-58 +-117 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-118 +-113 +-104 +-95 +-86 +-77 +-72 +-67 +-63 +-60 +-55 +-50 +-50 +-47 +-46 +-43 +-40 +-36 +-38 +-35 +-32 +-29 +-26 +-25 +-22 +-25 +-22 +-20 +-22 +-19 +-21 +115 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +114 +108 +101 +89 +13 +-54 +-114 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +21 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +102 +95 +88 +83 +7 +-59 +-118 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +20 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +114 +102 +94 +86 +80 +69 +65 +59 +55 +52 +45 +43 +36 +35 +29 +28 +30 +26 +26 +24 +23 +21 +20 +19 +17 +16 +16 +12 +12 +11 +5 +6 +9 +7 +8 +6 +5 +-62 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-118 +-109 +-101 +-93 +-85 +-83 +-76 +-75 +-68 +-63 +-59 +-53 +-54 +-48 +-48 +-43 +-36 +-36 +-31 +-31 +-28 +-26 +-23 +-26 +-23 +-26 +-23 +-20 +-16 +-13 +-16 +120 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +112 +104 +92 +87 +76 +72 +66 +63 +60 +55 +52 +52 +49 +46 +44 +43 +36 +33 +28 +26 +22 +20 +18 +13 +12 +10 +10 +10 +6 +6 +8 +5 +6 +2 +3 +-1 +-67 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +9 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +100 +93 +90 +85 +81 +6 +-61 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +15 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +114 +108 +100 +95 +89 +13 +-54 +-114 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-112 +-100 +-95 +-86 +-82 +-75 +-71 +-67 +-62 +-56 +-52 +-46 +-42 +-45 +-41 +-38 +-35 +-37 +-33 +-34 +-31 +-32 +-28 +-26 +-23 +-20 +-22 +-20 +-18 +-17 +-14 +121 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +106 +95 +90 +87 +82 +78 +74 +70 +64 +57 +54 +51 +45 +40 +36 +34 +27 +25 +21 +20 +19 +17 +16 +10 +10 +5 +5 +8 +6 +6 +6 +7 +2 +3 +5 +-61 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +8 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +115 +108 +99 +92 +83 +80 +5 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-118 +-108 +-100 +-90 +-87 +-79 +-76 +-71 +-68 +-63 +-60 +-54 +-54 +-49 +-47 +-42 +-44 +-38 +-37 +-33 +-28 +-30 +-28 +-22 +-22 +-19 +-18 +-16 +-19 +-17 +-20 +-17 +124 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +114 +107 +101 +91 +15 +-52 +-112 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +118 +113 +103 +97 +90 +85 +79 +72 +65 +63 +59 +53 +46 +42 +40 +35 +32 +30 +26 +25 +18 +18 +13 +12 +15 +12 +12 +12 +12 +16 +14 +15 +9 +9 +4 +4 +0 +1 +-66 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-118 +-109 +-102 +-93 +-87 +-81 +-76 +-71 +-66 +-60 +-57 +-50 +-49 +-45 +-44 +-42 +-40 +-35 +-32 +-29 +-26 +-23 +-21 +-26 +-24 +-26 +-23 +-20 +-18 +-16 +-15 +122 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +112 +103 +96 +88 +12 +-55 +-114 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +100 +93 +90 +81 +6 +-60 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +12 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +110 +102 +95 +84 +80 +5 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +15 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +113 +104 +96 +91 +84 +8 +-58 +-117 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +110 +102 +95 +84 +79 +72 +68 +62 +57 +53 +49 +46 +44 +40 +37 +33 +30 +29 +22 +22 +22 +23 +21 +20 +21 +21 +20 +12 +11 +4 +5 +2 +3 +4 +3 +4 +2 +-64 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-120 +-112 +-104 +-96 +-93 +-87 +-84 +-78 +-74 +-68 +-67 +-61 +-61 +-56 +-52 +-51 +-45 +-44 +-39 +-32 +-32 +-28 +-26 +-24 +-23 +-23 +-21 +-23 +-20 +-22 +-18 +-16 +116 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +112 +105 +97 +91 +85 +73 +70 +67 +61 +56 +52 +48 +46 +39 +37 +37 +32 +31 +29 +27 +22 +22 +23 +22 +20 +14 +13 +10 +10 +9 +8 +7 +3 +3 +6 +2 +-64 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +12 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +109 +105 +98 +86 +81 +6 +-60 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-118 +-109 +-102 +-91 +-84 +-83 +-77 +-73 +-69 +-63 +-59 +-55 +-48 +-44 +-46 +-38 +-36 +-31 +-33 +-30 +-30 +-26 +-24 +-27 +-24 +-27 +-25 +-23 +-21 +-19 +-15 +-12 +119 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +112 +104 +96 +90 +81 +75 +71 +64 +59 +54 +50 +48 +42 +39 +37 +31 +28 +30 +26 +25 +22 +25 +23 +22 +22 +21 +16 +15 +12 +12 +12 +10 +8 +6 +6 +8 +-59 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +8 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +114 +108 +100 +96 +90 +82 +7 +-59 +-118 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +14 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +114 +107 +99 +93 +87 +80 +5 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +109 +102 +91 +86 +76 +2 +-64 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +19 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +109 +101 +94 +89 +84 +9 +-58 +-116 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-118 +-114 +-103 +-99 +-90 +-85 +-72 +-66 +-60 +-59 +-54 +-54 +-50 +-50 +-45 +-45 +-40 +-37 +-35 +-28 +-26 diff --git a/traces/lf_idteck_4944544BAC40E069.pm3 b/traces/lf_idteck_4944544BAC40E069.pm3 new file mode 100644 index 000000000..7ef46247e --- /dev/null +++ b/traces/lf_idteck_4944544BAC40E069.pm3 @@ -0,0 +1,30000 @@ +-42 +-11 +-20 +5 +-9 +10 +-6 +14 +-3 +15 +-4 +15 +-3 +14 +-4 +14 +-3 +15 +-5 +13 +-4 +14 +-4 +12 +-6 +13 +-5 +12 +-7 +12 +-5 +11 +24 +0 +17 +-4 +11 +-8 +11 +-7 +11 +-10 +10 +-8 +11 +-9 +9 +-8 +11 +-9 +10 +-9 +12 +-8 +10 +-9 +11 +-7 +11 +-9 +10 +-8 +12 +-8 +-42 +-11 +-19 +5 +-10 +10 +-5 +14 +-4 +14 +-4 +16 +-3 +13 +-5 +14 +-3 +14 +-5 +13 +-4 +14 +-5 +12 +-5 +14 +-5 +12 +-6 +13 +-5 +11 +-7 +12 +-5 +12 +-8 +11 +-6 +11 +-7 +10 +-7 +12 +-7 +11 +-7 +12 +-6 +10 +-8 +11 +-6 +11 +-9 +10 +-7 +11 +-7 +10 +-7 +11 +-8 +10 +23 +1 +17 +-6 +11 +-8 +11 +-9 +8 +-10 +10 +-9 +10 +-11 +10 +-8 +10 +-9 +10 +-7 +12 +-9 +10 +-9 +11 +-8 +9 +-10 +11 +-8 +11 +-9 +-41 +-9 +-20 +4 +-10 +12 +-5 +13 +-5 +14 +-3 +15 +-5 +13 +-4 +15 +-4 +13 +-5 +14 +-5 +13 +-6 +14 +-4 +12 +-6 +12 +-5 +13 +-7 +11 +25 +1 +17 +-6 +12 +-7 +11 +-9 +10 +-8 +11 +-9 +10 +-9 +12 +-7 +10 +-9 +11 +-7 +11 +-9 +11 +-7 +11 +-8 +11 +-7 +12 +-9 +10 +-8 +-40 +-9 +-21 +3 +-9 +12 +-5 +13 +-4 +16 +-3 +15 +-4 +16 +-2 +14 +-4 +14 +-3 +14 +-6 +12 +-5 +14 +-5 +11 +-6 +13 +-6 +11 +-7 +12 +-5 +11 +-7 +11 +-5 +12 +-8 +10 +-7 +12 +-6 +10 +-8 +12 +-6 +11 +-8 +11 +-6 +11 +-7 +11 +-6 +12 +-8 +10 +-7 +12 +-6 +10 +-8 +11 +25 +0 +15 +-6 +13 +-8 +10 +-10 +11 +-9 +9 +-10 +10 +-8 +11 +-10 +9 +-8 +11 +-9 +9 +-9 +11 +-9 +10 +-9 +11 +-8 +10 +-9 +11 +-7 +-40 +-11 +-21 +5 +-9 +11 +-7 +13 +-4 +14 +-4 +14 +-3 +15 +-4 +14 +-4 +15 +-4 +12 +-6 +13 +-4 +13 +-7 +12 +-5 +12 +-6 +11 +-5 +13 +-6 +11 +-6 +13 +-5 +11 +-7 +12 +-5 +12 +-8 +11 +-6 +12 +-7 +10 +-6 +12 +-7 +11 +-7 +12 +-6 +10 +-8 +11 +-6 +11 +-8 +11 +-6 +11 +24 +0 +17 +-4 +12 +-8 +10 +-8 +11 +-11 +9 +-9 +11 +-9 +9 +-10 +10 +-9 +10 +-10 +11 +-8 +10 +-9 +10 +-7 +11 +-9 +10 +-8 +12 +-8 +-43 +-11 +-19 +4 +-10 +10 +-5 +14 +-4 +14 +-4 +16 +-2 +14 +-4 +14 +-3 +14 +-5 +13 +-4 +14 +-5 +12 +-5 +14 +-6 +12 +-6 +13 +-5 +11 +24 +1 +18 +-4 +12 +-8 +12 +-8 +10 +-10 +10 +-8 +10 +-10 +10 +-8 +11 +-10 +10 +-8 +12 +-8 +10 +-9 +11 +-8 +11 +-9 +11 +-7 +11 +-9 +-42 +-9 +-19 +3 +-11 +10 +-5 +14 +-5 +13 +-4 +15 +-4 +13 +-4 +15 +-4 +13 +-5 +14 +-4 +12 +-6 +12 +-4 +13 +-7 +11 +-6 +13 +-6 +11 +-6 +13 +-6 +12 +-7 +12 +-5 +11 +-7 +11 +-5 +12 +-7 +11 +-6 +12 +-6 +10 +-8 +11 +-7 +11 +-8 +11 +-7 +10 +-8 +10 +-7 +11 +-9 +10 +-8 +12 +-7 +10 +-8 +11 +-7 +11 +-9 +11 +-7 +10 +-8 +10 +-7 +11 +-8 +10 +-7 +12 +-7 +10 +-9 +11 +-7 +11 +-9 +10 +-6 +11 +-7 +11 +25 +2 +16 +-5 +13 +-6 +12 +-10 +9 +-9 +11 +-9 +8 +-10 +11 +-9 +10 +-9 +11 +-8 +10 +-9 +10 +-7 +11 +-10 +10 +-8 +12 +-8 +10 +-9 +-40 +-10 +-20 +3 +-10 +12 +-6 +13 +-4 +16 +-2 +14 +-4 +15 +-2 +15 +-5 +13 +-4 +14 +-5 +12 +-5 +13 +-5 +12 +-7 +13 +-5 +11 +-7 +11 +-5 +12 +-8 +11 +-6 +12 +-6 +10 +-7 +12 +-7 +11 +-8 +11 +-6 +10 +-8 +11 +-6 +12 +-8 +10 +-7 +12 +-7 +10 +-8 +12 +-6 +11 +-8 +12 +-6 +11 +-7 +11 +-6 +12 +-8 +10 +-7 +12 +-7 +10 +-8 +12 +-6 +11 +-8 +11 +-6 +10 +-8 +10 +-6 +11 +-8 +10 +-7 +12 +-6 +10 +-8 +11 +25 +0 +15 +-6 +13 +-8 +10 +-10 +10 +-9 +9 +-10 +10 +-8 +11 +-10 +9 +-8 +11 +-8 +9 +-9 +11 +-9 +10 +-9 +11 +-8 +10 +-9 +11 +-7 +-41 +-11 +-21 +5 +-9 +11 +-7 +13 +-3 +15 +-3 +14 +-3 +16 +-4 +13 +-5 +15 +-4 +12 +-6 +13 +-5 +13 +-7 +12 +-5 +13 +-5 +12 +-5 +13 +25 +1 +17 +-3 +14 +-8 +10 +-8 +12 +-8 +9 +-10 +11 +-9 +10 +-10 +11 +-8 +10 +-9 +10 +-7 +12 +-9 +10 +-8 +12 +-8 +9 +-9 +11 +-8 +-41 +-11 +-19 +5 +-10 +10 +-6 +15 +-3 +14 +-5 +14 +-3 +15 +-5 +13 +-4 +15 +-4 +12 +-5 +14 +-6 +12 +-6 +14 +-5 +12 +-6 +12 +-5 +12 +24 +0 +17 +-4 +13 +-8 +11 +-8 +10 +-10 +9 +-9 +11 +-10 +9 +-9 +11 +-9 +9 +-10 +10 +-9 +10 +-10 +11 +-8 +11 +-9 +10 +-8 +11 +-9 +-42 +-11 +-19 +4 +-11 +10 +-5 +14 +-4 +14 +-3 +16 +-3 +15 +-4 +16 +-3 +13 +-5 +14 +-3 +14 +-6 +12 +-5 +13 +-6 +11 +-6 +12 +-6 +11 +-7 +12 +-5 +11 +-7 +11 +-5 +12 +-8 +11 +-6 +12 +-7 +10 +-8 +12 +-7 +10 +-8 +11 +-6 +10 +-8 +11 +-6 +12 +-8 +10 +-6 +12 +-7 +10 +-7 +12 +-7 +11 +-8 +12 +-6 +10 +-8 +11 +-6 +12 +-8 +10 +-7 +12 +-7 +10 +-7 +12 +-7 +11 +-8 +12 +-6 +10 +-8 +11 +-6 +11 +-9 +10 +24 +1 +16 +-7 +11 +-8 +11 +-9 +9 +-9 +11 +-10 +9 +-10 +11 +-8 +9 +-10 +11 +-7 +11 +-10 +10 +-8 +11 +-8 +10 +-8 +11 +-9 +10 +-9 +-41 +-10 +-21 +3 +-10 +12 +-5 +12 +-5 +15 +-3 +15 +-4 +15 +-3 +14 +-4 +14 +-3 +15 +-5 +13 +-5 +14 +-5 +11 +-7 +12 +-5 +12 +-7 +12 +-5 +12 +-6 +11 +-5 +13 +-7 +11 +-7 +12 +-6 +10 +-8 +11 +-6 +11 +-8 +11 +-6 +11 +-7 +10 +-7 +12 +-8 +10 +-8 +11 +-7 +9 +-8 +11 +25 +1 +15 +-6 +13 +-7 +11 +-10 +10 +-8 +10 +-10 +10 +-8 +11 +-10 +9 +-9 +11 +-8 +9 +-10 +11 +-8 +10 +-10 +10 +-8 +10 +-9 +10 +-7 +-40 +-11 +-21 +5 +-8 +12 +-6 +13 +-3 +15 +-3 +14 +-3 +15 +-4 +14 +-4 +15 +-4 +13 +-5 +13 +-4 +14 +-6 +12 +-5 +14 +-5 +12 +-6 +13 +26 +1 +16 +-5 +13 +-8 +10 +-9 +11 +-8 +9 +-10 +10 +-8 +11 +-9 +10 +-8 +11 +-9 +10 +-8 +11 +-9 +10 +-9 +12 +-8 +10 +-9 +11 +-7 +11 +-9 +10 +-7 +12 +-8 +10 +-8 +12 +-8 +11 +-9 +12 +-7 +10 +-9 +11 +-7 +11 +-9 +10 +-8 +12 +-8 +10 +-8 +12 +-8 +11 +-9 +12 +-7 +10 +-9 +12 +-6 +12 +-9 +11 +-7 +13 +-7 +11 +-7 +12 +-8 +11 +-8 +12 +-7 +11 +-9 +11 +-6 +12 +-9 +11 +-7 +12 +-8 +10 +-8 +12 +-7 +-41 +-10 +-19 +5 +-10 +10 +-6 +15 +-3 +14 +-4 +15 +-2 +15 +-5 +14 +-3 +14 +-5 +13 +-4 +14 +-6 +12 +-6 +14 +-5 +11 +-7 +12 +-5 +12 +24 +1 +18 +-5 +13 +-7 +13 +-7 +10 +-9 +11 +-8 +11 +-10 +9 +-9 +11 +-9 +9 +-10 +10 +-10 +9 +-10 +11 +-8 +9 +-10 +11 +-7 +12 +-9 +-42 +-10 +-19 +4 +-11 +11 +-5 +14 +-4 +14 +-3 +15 +-4 +14 +-4 +15 +-4 +12 +-6 +14 +-4 +13 +-6 +12 +-5 +13 +-6 +12 +-6 +13 +-6 +12 +25 +2 +18 +-5 +13 +-7 +13 +-8 +10 +-10 +11 +-8 +10 +-10 +10 +-8 +10 +-9 +10 +-8 +11 +-9 +10 +-9 +12 +-8 +10 +-9 +11 +-8 +11 +-9 +11 +-7 +11 +-9 +10 +-7 +12 +-9 +11 +-8 +13 +-7 +10 +-9 +12 +-7 +12 +-9 +11 +-7 +12 +-8 +11 +-7 +12 +-8 +11 +-8 +12 +-7 +10 +-9 +-40 +-9 +-19 +4 +-10 +12 +-5 +14 +-5 +15 +-3 +14 +-4 +14 +-3 +15 +-5 +13 +-4 +15 +-4 +12 +-6 +13 +-5 +12 +-7 +12 +-5 +12 +-7 +11 +-5 +13 +-7 +11 +-6 +13 +-6 +11 +-7 +12 +-6 +12 +-8 +12 +-5 +12 +-7 +11 +-5 +13 +-7 +11 +-6 +13 +-6 +11 +-7 +12 +-6 +12 +-8 +11 +-7 +11 +-8 +10 +-7 +11 +-8 +10 +-8 +12 +-7 +9 +-9 +11 +-7 +11 +-9 +10 +-7 +11 +-8 +10 +-7 +11 +-8 +10 +-8 +12 +-7 +10 +-8 +11 +25 +1 +15 +-6 +13 +-8 +10 +-10 +10 +-9 +9 +-10 +9 +-9 +10 +-10 +9 +-9 +11 +-9 +9 +-10 +11 +-8 +10 +-10 +10 +-8 +10 +-9 +10 +-8 +-40 +-11 +-21 +4 +-9 +11 +-7 +13 +-4 +16 +-3 +13 +-4 +15 +-4 +14 +-5 +14 +-4 +13 +-5 +13 +-4 +14 +-6 +12 +-5 +14 +-5 +12 +-6 +13 +-5 +13 +-7 +13 +-5 +12 +-6 +12 +-5 +13 +-7 +11 +-7 +12 +-7 +10 +-8 +11 +-6 +11 +-8 +11 +-6 +11 +-8 +10 +-7 +12 +-8 +10 +-8 +12 +-7 +9 +-9 +11 +-7 +11 +-8 +11 +-6 +11 +-7 +10 +-7 +12 +-8 +10 +-8 +12 +-7 +10 +-8 +11 +-6 +11 +-8 +10 +-7 +11 +-7 +10 +-7 +12 +-8 +10 +-8 +12 +-7 +9 +-9 +11 +-6 +11 +-9 +10 +-6 +11 +-7 +10 +-7 +12 +-7 +11 +-7 +12 +-6 +10 +-8 +11 +-6 +11 +-9 +10 +-7 +11 +-8 +9 +-7 +11 +-8 +10 +-8 +12 +-6 +11 +-7 +12 +-6 +12 +-8 +10 +-6 +12 +-7 +11 +-7 +12 +-7 +10 +-8 +12 +-7 +10 +-8 +11 +-6 +11 +-9 +10 +-7 +11 +-8 +10 +-7 +11 +-8 +10 +-8 +12 +-7 +10 +-8 +11 +-6 +11 +-9 +9 +-8 +11 +-8 +9 +-8 +11 +-8 +10 +-8 +11 +-6 +10 +24 +0 +18 +-4 +11 +-9 +11 +-8 +11 +-10 +10 +-9 +10 +-10 +9 +-9 +11 +-10 +9 +-10 +11 +-8 +9 +-10 +11 +-8 +11 +-10 +10 +-8 +11 +-9 +10 +-8 +11 +-9 +10 +-9 +12 +-7 +10 +-9 +11 +-7 +11 +-9 +11 +-7 +12 +-8 +11 +-7 +12 +-8 +11 +-8 +13 +-7 +10 +-9 +12 +-7 +12 +-9 +11 +-7 +11 +-8 +10 +-7 +12 +-9 +11 +-8 +13 +-7 +10 +-9 +12 +-6 +12 +-9 +11 +-7 +12 +-8 +11 +-7 +12 +-8 +11 +-8 +12 +-7 +10 +-9 +-41 +-9 +-19 +3 +-11 +11 +-5 +14 +-5 +15 +-3 +15 +-4 +14 +-3 +15 +-5 +13 +-4 +15 +-4 +12 +-6 +13 +-5 +12 +-7 +12 +-5 +12 +-6 +11 +-6 +13 +-7 +11 +-7 +13 +-6 +10 +-8 +12 +-6 +11 +-8 +11 +-6 +11 +-7 +11 +-6 +13 +-7 +11 +-7 +12 +-6 +10 +-8 +11 +-6 +11 +-8 +11 +-6 +11 +-7 +10 +-6 +12 +-8 +10 +-8 +12 +-7 +10 +-8 +11 +-6 +12 +-8 +11 +-6 +11 +-7 +10 +-7 +12 +-8 +10 +-8 +12 +-7 +10 +-9 +11 +-6 +11 +-9 +10 +-7 +11 +-7 +10 +-8 +12 +-8 +10 +-8 +12 +-6 +10 +-8 +11 +-6 +12 +-8 +10 +-7 +11 +-8 +10 +-8 +11 +-8 +10 +-8 +11 +-7 +10 +-8 +11 +-6 +11 +-9 +10 +-7 +11 +-8 +10 +-8 +11 +-8 +10 +-8 +11 +-7 +10 +-8 +11 +-6 +12 +-8 +10 +-7 +12 +-7 +10 +-8 +12 +-7 +11 +-7 +12 +-6 +11 +-8 +11 +-6 +12 +-8 +10 +-7 +12 +-7 +10 +-8 +12 +-7 +11 +-8 +11 +-7 +10 +-8 +10 +-6 +12 +-8 +10 +-7 +12 +24 +-1 +15 +-5 +13 +-8 +10 +-9 +11 +-10 +9 +-10 +11 +-9 +9 +-10 +10 +-8 +11 +-10 +10 +-9 +10 +-10 +9 +-9 +11 +-10 +10 +-9 +12 +-8 +10 +-9 +11 +-7 +11 +-9 +11 +-7 +12 +-8 +11 +-7 +13 +-8 +11 +-8 +12 +-7 +10 +-9 +11 +-7 +12 +-9 +11 +-7 +12 +-7 +11 +-8 +12 +-8 +-41 +-10 +-19 +5 +-11 +10 +-6 +15 +-4 +13 +-5 +15 +-3 +15 +-5 +14 +-3 +14 +-4 +13 +-4 +15 +-5 +13 +-5 +14 +-5 +11 +-7 +12 +-6 +12 +23 +0 +17 +-5 +12 +-9 +11 +-8 +10 +-10 +10 +-8 +11 +-10 +9 +-9 +11 +-8 +10 +-9 +11 +-8 +11 +-9 +11 +-7 +11 +-8 +11 +-7 +13 +-8 +-42 +-10 +-19 +5 +-11 +10 +-5 +15 +-4 +14 +-3 +16 +-3 +14 +-4 +15 +-3 +13 +-5 +14 +-4 +14 +-6 +12 +-5 +14 +-5 +12 +-6 +13 +-6 +12 +-7 +13 +-5 +11 +-7 +12 +-5 +12 +-8 +10 +-7 +12 +-7 +10 +-8 +12 +-7 +11 +-8 +12 +-6 +10 +-8 +11 +-6 +12 +-8 +10 +-7 +12 +-7 +10 +23 +1 +16 +-6 +11 +-8 +11 +-10 +9 +-10 +11 +-9 +9 +-10 +10 +-8 +11 +-10 +10 +-8 +11 +-9 +9 +-9 +11 +-9 +10 +-9 +12 +-8 +10 +-9 +-41 +-9 +-20 +3 +-11 +11 +-6 +13 +-6 +14 +-3 +14 +-5 +14 +-3 +15 +-5 +13 +-5 +14 +-5 +12 +-6 +13 +-5 +13 +-7 +13 +-5 +12 +-7 +11 +26 +2 +16 +-6 +12 +-7 +11 +-10 +9 +-9 +11 +-9 +9 +-9 +11 +-9 +10 +-10 +11 +-8 +10 +-9 +11 +-7 +12 +-9 +11 +-8 +12 +-8 +10 +-8 +-40 +-10 +-20 +4 +-9 +12 +-6 +13 +-4 +16 +-3 +14 +-4 +15 +-3 +14 +-5 +14 +-4 +14 +-5 +13 +-4 +14 +-6 +12 +-6 +13 +-5 +11 +-7 +12 +-5 +12 +-8 +11 +-6 +12 +-7 +10 +-7 +12 +-7 +11 +-7 +12 +-6 +11 +-8 +11 +-6 +12 +-8 +10 +-6 +12 +-7 +10 +-7 +12 +-7 +11 +-8 +12 +25 +-1 +15 +-6 +13 +-8 +9 +-10 +10 +-9 +10 +-11 +10 +-9 +10 +-10 +9 +-9 +11 +-10 +9 +-10 +11 +-9 +9 +-10 +10 +-8 +11 +-10 +11 +-8 +-42 +-11 +-21 +5 +-9 +10 +-6 +14 +-3 +16 +-4 +14 +-3 +16 +-3 +14 +-4 +15 +-4 +14 +-5 +14 +-4 +12 +-6 +12 +-5 +13 +-7 +11 +-6 +13 +-6 +11 +-7 +12 +-6 +12 +-8 +12 +-6 +11 +-8 +11 +-6 +12 +-8 +10 +-7 +13 +-6 +10 +-8 +12 +-7 +11 +-8 +12 +-6 +11 +-8 +11 +-6 +12 +23 +-1 +16 +-5 +12 +-10 +10 +-9 +10 +-10 +9 +-10 +10 +-10 +10 +-10 +11 +-8 +10 +-10 +11 +-7 +12 +-9 +11 +-8 +12 +-8 +10 +-8 +12 +-9 +-42 +-11 +-19 +5 +-11 +10 +-6 +15 +-4 +14 +-5 +15 +-3 +15 +-5 +14 +-4 +14 +-5 +12 +-4 +14 +-6 +12 +-5 +14 +-5 +11 +-7 +13 +-6 +12 +24 +1 +17 +-5 +12 +-8 +12 +-8 +10 +-10 +10 +-8 +11 +-10 +10 +-9 +11 +-9 +10 +-8 +12 +-8 +11 +-9 +11 +-8 +10 +-10 +10 +-8 +11 +-10 +-43 +-10 +-19 +5 +-11 +10 +-5 +14 +-4 +14 +-3 +16 +-4 +14 +-4 +15 +-3 +13 +-5 +14 +-4 +14 +-7 +12 +-5 +13 +-6 +12 +-6 +13 +-6 +12 +-6 +13 +-5 +11 +-7 +12 +-6 +12 +-8 +11 +-7 +12 +-7 +10 +-7 +12 +-7 +11 +-8 +12 +-6 +11 +-8 +11 +-6 +12 +-8 +10 +-7 +12 +-7 +10 +-7 +12 +-7 +11 +-8 +11 +-7 +10 +-8 +10 +-7 +11 +-9 +10 +-7 +12 +-7 +10 +-8 +12 +-6 +11 +-8 +11 +-6 +11 +-8 +11 +-6 +12 +-8 +10 +24 +1 +17 +-7 +11 +-8 +11 +-9 +9 +-9 +11 +-10 +10 +-10 +11 +-9 +9 +-10 +10 +-8 +11 +-10 +10 +-8 +12 +-8 +10 +-8 +12 +-8 +11 +-9 +-41 +-9 +-21 +3 +-11 +12 +-5 +12 +-5 +15 +-2 +16 +-4 +14 +-3 +15 +-4 +13 +-5 +14 +-5 +13 +-5 +15 +-4 +12 +-6 +13 +-5 +13 +-7 +11 +-6 +12 +-6 +11 +-6 +13 +-7 +11 +-7 +12 +-6 +11 +-8 +11 +-6 +12 +-8 +10 +-7 +12 +-7 +10 +-7 +12 +-8 +10 +-8 +12 +-7 +10 +-8 +11 +-6 +12 +-9 +10 +-7 +12 +-7 +10 +-8 +12 +-8 +11 +-8 +12 +-6 +10 +-8 +11 +-6 +12 +-8 +10 +-7 +12 +-7 +10 +-7 +12 +-7 +11 +-8 +12 +25 +-1 +15 +-6 +13 +-8 +9 +-10 +10 +-9 +10 +-11 +10 +-9 +10 +-10 +9 +-9 +11 +-10 +10 +-9 +12 +-8 +10 +-10 +11 +-8 +11 +-10 +10 +-8 +-41 +-10 +-21 +5 +-9 +11 +-6 +13 +-3 +16 +-5 +14 +-4 +16 +-4 +13 +-5 +14 +-4 +13 +-6 +13 +-5 +13 +-6 +12 +-5 +14 +-7 +12 +-6 +14 +26 +0 +16 +-4 +14 +-7 +10 +-8 +11 +-9 +10 +-10 +11 +-8 +9 +-10 +10 +-8 +11 +-10 +10 +-9 +11 +-9 +10 +-9 +12 +-9 +10 +-9 +12 +-8 +-42 +-11 +-20 +6 +-9 +10 +-6 +14 +-3 +15 +-4 +15 +-3 +15 +-4 +14 +-4 +14 +-6 +12 +-5 +14 +-5 +12 +-6 +13 +-5 +13 +-7 +12 +-5 +12 +25 +1 +18 +-4 +13 +-8 +11 +-7 +11 +-10 +10 +-8 +11 +-9 +10 +-9 +11 +-9 +10 +-9 +11 +-8 +10 +-10 +10 +-8 +11 +-10 +10 +-8 +12 +-8 +-43 +-11 +-19 +4 +-11 +10 +-5 +15 +-5 +14 +-4 +16 +-3 +14 +-4 +15 +-3 +15 +-6 +13 +-4 +13 +-6 +12 +-5 +14 +-6 +12 +-6 +14 +-5 +11 +-7 +12 +-5 +12 +-8 +11 +-6 +12 +-7 +10 +-7 +12 +-7 +11 +-8 +12 +-6 +10 +-8 +11 +-6 +12 +-8 +11 +-7 +12 +-7 +10 +-7 +12 +-7 +11 +-8 +12 +-6 +10 +-8 +11 +-6 +11 +-9 +10 +-7 +11 +-8 +10 +-7 +12 +-7 +11 +-8 +12 +-6 +11 +-8 +11 +-6 +12 +-8 +10 +-7 +12 +-7 +10 +24 +1 +17 +-6 +12 +-7 +12 +-10 +9 +-10 +10 +-10 +8 +-11 +10 +-9 +10 +-11 +10 +-9 +10 +-10 +10 +-8 +11 +-10 +10 +-9 +12 +-8 +10 +-9 +-41 +-9 +-19 +4 +-10 +12 +-6 +13 +-5 +16 +-3 +14 +-4 +15 +-3 +15 +-5 +13 +-4 +15 +-5 +12 +-5 +14 +-5 +13 +-6 +13 +-5 +12 +-7 +12 +-5 +13 +-7 +11 +-6 +13 +-6 +10 +-7 +12 +-7 +11 +-8 +12 +-6 +11 +-8 +11 +-6 +12 +-8 +10 +-7 +12 +-7 +10 +-8 +12 +-7 +11 +-8 +12 +25 +-1 +16 +-6 +14 +-7 +10 +-10 +10 +-9 +10 +-11 +9 +-9 +10 +-10 +9 +-9 +11 +-9 +10 +-10 +11 +-8 +10 +-10 +11 +-8 +11 +-10 +10 +-8 +-41 +-10 +-21 +4 +-10 +11 +-6 +13 +-3 +15 +-5 +14 +-4 +16 +-3 +13 +-5 +15 +-3 +14 +-5 +14 +-4 +14 +-5 +12 +-5 +14 +-6 +12 +-6 +14 +26 +0 +16 +-5 +14 +-7 +10 +-9 +11 +-9 +10 +-10 +11 +-8 +10 +-10 +10 +-8 +11 +-10 +10 +-9 +12 +-9 +10 +-9 +12 +-8 +11 +-9 +12 +-7 +11 +-9 +11 +-7 +12 +-9 +11 +-8 +12 +-8 +10 +-9 +12 +-8 +11 +-9 +12 +-7 +11 +-9 +11 +-7 +12 +-9 +11 +-8 +12 +-8 +10 +-8 +13 +-7 +12 +-8 +13 +-7 +11 +-8 +11 +-7 +12 +-9 +11 +-7 +13 +-7 +11 +-8 +12 +-7 +11 +-9 +12 +-7 +11 +-9 +11 +-7 +12 +-9 +11 +-8 +13 +-7 +-42 +-10 +-19 +5 +-10 +10 +-5 +15 +-4 +14 +-4 +16 +-3 +14 +-5 +15 +-3 +15 +-5 +13 +-4 +14 +-5 +12 +-5 +14 +-6 +13 +-6 +14 +-5 +12 +25 +1 +18 +-5 +11 +-9 +11 +-9 +10 +-11 +10 +-8 +10 +-9 +10 +-8 +12 +-9 +10 +-9 +12 +-9 +9 +-10 +11 +-8 +11 +-10 +10 +-8 +11 +-9 +-42 +-9 +-19 +4 +-11 +10 +-5 +14 +-5 +14 +-3 +16 +-3 +14 +-4 +16 +-3 +14 +-5 +15 +-4 +13 +-5 +13 +-4 +14 +-6 +12 +-6 +14 +-6 +11 +25 +2 +18 +-5 +12 +-7 +12 +-9 +10 +-10 +11 +-9 +9 +-10 +10 +-8 +11 +-10 +10 +-9 +11 +-9 +10 +-9 +11 +-9 +10 +-9 +12 +-8 +10 +-9 +11 +-7 +12 +-10 +10 +-8 +12 +-8 +10 +-8 +12 +-8 +11 +-9 +12 +-7 +11 +-9 +11 +-7 +12 +-9 +11 +-8 +12 +-8 +10 +-8 +12 +-8 +11 +-9 +-41 +-9 +-21 +3 +-11 +12 +-6 +12 +-6 +14 +-3 +15 +-5 +14 +-4 +15 +-4 +14 +-3 +15 +-5 +13 +-5 +15 +-5 +12 +-7 +13 +-5 +13 +-7 +11 +-5 +13 +-6 +11 +-6 +13 +-7 +11 +-7 +12 +-6 +11 +-8 +12 +-5 +12 +-8 +10 +-7 +11 +-8 +10 +-8 +12 +-8 +10 +-8 +12 +-7 +10 +-8 +11 +-6 +12 +-8 +11 +-7 +12 +-7 +10 +-8 +12 +-8 +10 +-8 +12 +-6 +11 +-8 +11 +-6 +12 +-8 +11 +-7 +12 +-7 +10 +-8 +11 +-8 +10 +-9 +11 +25 +-1 +15 +-6 +13 +-8 +9 +-10 +10 +-8 +10 +-11 +10 +-9 +11 +-9 +10 +-9 +11 +-9 +10 +-9 +12 +-8 +10 +-10 +11 +-8 +11 +-10 +10 +-8 +-41 +-10 +-21 +4 +-10 +10 +-7 +13 +-3 +16 +-4 +14 +-4 +16 +-3 +14 +-5 +15 +-4 +14 +-6 +13 +-5 +13 +-6 +12 +-4 +14 +-6 +12 +-6 +14 +-5 +11 +-7 +12 +-6 +12 +-8 +11 +-6 +11 +-7 +11 +-6 +12 +-8 +10 +-8 +12 +-7 +10 +-8 +12 +-6 +12 +-8 +10 +-7 +11 +-8 +10 +-7 +12 +-8 +10 +-8 +12 +-6 +10 +-8 +12 +-6 +12 +-8 +10 +-7 +12 +-7 +10 +-7 +12 +-8 +11 +-8 +12 +-7 +10 +-8 +11 +-6 +11 +-9 +10 +-7 +12 +-7 +10 +-7 +12 +-7 +11 +-8 +12 +-6 +10 +-8 +11 +-6 +12 +-8 +10 +-7 +12 +-7 +10 +-8 +12 +-7 +11 +-8 +11 +-7 +10 +-9 +10 +-7 +11 +-9 +10 +-7 +12 +-7 +10 +-8 +12 +-7 +11 +-8 +12 +-6 +11 +-8 +11 +-6 +12 +-8 +10 +-7 +12 +-7 +10 +-8 +12 +-7 +11 +-8 +11 +-6 +11 +-7 +11 +-6 +12 +-8 +10 +-8 +12 +-7 +10 +-9 +11 +-7 +11 +-9 +10 +-7 +11 +-7 +11 +-7 +12 +-7 +11 +-7 +13 +-6 +10 +-8 +11 +-6 +12 +23 +-1 +17 +-5 +12 +-10 +10 +-9 +9 +-10 +9 +-9 +11 +-10 +9 +-9 +11 +-9 +9 +-10 +11 +-8 +11 +-10 +11 +-8 +11 +-9 +11 +-7 +12 +-9 +11 +-8 +13 +-7 +11 +-9 +12 +-7 +12 +-9 +11 +-7 +11 +-9 +10 +-8 +12 +-9 +10 +-8 +13 +-7 +11 +-9 +12 +-7 +12 +-9 +11 +-7 +11 +-9 +10 +-8 +12 +-9 +10 +-9 +12 +-8 +10 +-10 +11 +-8 +11 +-10 +11 +-8 +12 +-8 +10 +-8 +12 +-9 +10 +-9 +12 +-7 +10 +-9 +12 +-7 +12 +-9 +-42 +-9 +-20 +4 +-11 +11 +-5 +13 +-5 +14 +-3 +16 +-5 +14 +-4 +16 +-3 +13 +-5 +15 +-4 +14 +-6 +14 +-4 +13 +-6 +13 +-4 +14 +-6 +12 +-6 +13 +-6 +11 +-8 +12 +-6 +12 +-8 +11 +-6 +11 +-8 +11 +-6 +12 +-8 +11 +-7 +12 +-7 +10 +-8 +12 +-6 +12 +-8 +12 +-6 +11 +-8 +11 +-6 +12 +-8 +10 +-7 +12 +-7 +10 +-8 +11 +-7 +11 +-8 +11 +-7 +11 +-8 +10 +-7 +12 +-8 +10 +-7 +13 +-6 +10 +-8 +12 +-6 +11 +-8 +11 +-7 +11 +-8 +10 +-7 +12 +-8 +10 +-7 +12 +-7 +10 +-8 +11 +-7 +11 +-9 +11 +-7 +11 +-8 +10 +-7 +12 +-8 +10 +-8 +12 +-7 +10 +-8 +11 +-6 +11 +-8 +11 +-7 +11 +-8 +11 +-6 +12 +-8 +10 +-8 +12 +-7 +10 +-8 +12 +-6 +12 +-8 +11 +-7 +11 +-8 +10 +-7 +12 +-8 +10 +-8 +12 +-7 +10 +-8 +12 +-6 +12 +-8 +11 +-6 +12 +-7 +10 +-7 +12 +-8 +11 +-7 +12 +-6 +10 +-8 +12 +-6 +12 +-9 +10 +-7 +11 +-8 +10 +-8 +11 +24 +-1 +15 +-5 +13 +-9 +10 +-9 +11 +-9 +9 +-10 +11 +-9 +10 +-10 +10 +-8 +10 +-10 +10 +-8 +11 +-10 +10 +-9 +12 +-8 +10 +-9 +12 +-8 +11 +-10 +11 +-8 +11 +-9 +10 +-8 +12 +-9 +10 +-9 +12 +-8 +10 +-9 +12 +-8 +11 +-10 +11 +-7 +11 +-8 +11 +-7 +13 +-8 +11 +-8 +12 +-7 +-42 +-11 +-19 +6 +-10 +10 +-6 +15 +-4 +15 +-4 +16 +-2 +15 +-4 +14 +-3 +15 +-5 +13 +-5 +15 +-5 +12 +-6 +13 +-5 +13 +-7 +13 +-5 +12 +25 +1 +18 +-4 +12 +-8 +11 +-8 +11 +-10 +9 +-9 +11 +-9 +9 +-9 +11 +-9 +10 +-9 +12 +-7 +10 +-9 +11 +-7 +12 +-9 +11 +-8 +12 +-8 +-42 +-10 +-20 +4 +-11 +10 +-5 +14 +-5 +14 +-3 +16 +-3 +14 +-4 +15 +-3 +14 +-5 +14 +-4 +13 +-6 +12 +-5 +13 +-7 +12 +-6 +14 +-5 +11 +-7 +13 +-5 +12 +-8 +12 +-6 +11 +-7 +11 +-6 +12 +-8 +11 +-7 +12 +-7 +10 +-8 +11 +-7 +11 +-9 +11 +-7 +11 +-8 +10 +-7 +12 +-8 +10 +23 +1 +17 +-7 +11 +-8 +11 +-9 +8 +-11 +10 +-10 +9 +-11 +10 +-9 +10 +-10 +10 +-8 +11 +-10 +10 +-9 +12 +-8 +10 +-10 +11 +-8 +11 +-9 +-41 +-9 +-20 +4 +-10 +12 +-5 +13 +-5 +15 +-2 +16 +-5 +14 +-4 +15 +-4 +13 +-5 +14 +-5 +13 +-6 +14 +-5 +12 +-7 +13 +-5 +13 +-7 +12 +26 +2 +18 +-5 +13 +-7 +11 +-9 +10 +-8 +11 +-10 +9 +-9 +11 +-9 +9 +-10 +11 +-9 +10 +-11 +10 +-9 +10 +-9 +10 +-8 +12 +-9 +10 +-9 +-41 +-10 +-22 +3 +-10 +12 +-6 +13 +-4 +16 +-4 +15 +-4 +16 +-3 +14 +-5 +14 +-3 +14 +-6 +13 +-5 +14 +-5 +12 +-6 +13 +-6 +12 +-7 +12 +-6 +11 +-7 +11 +-6 +12 +-8 +11 +-6 +13 +-6 +11 +-7 +12 +-7 +11 +-8 +11 +-6 +11 +-8 +11 +-6 +13 +-8 +11 +-7 +12 +-7 +10 +-8 +12 +25 +0 +15 +-6 +13 +-9 +10 +-10 +11 +-9 +9 +-11 +10 +-8 +11 +-10 +10 +-8 +11 +-9 +9 +-9 +11 +-9 +10 +-9 +12 +-7 +11 +-9 +12 +-7 +-40 +-11 +-21 +5 +-9 +11 +-7 +13 +-4 +14 +-4 +14 +-3 +15 +-5 +14 +-4 +16 +-4 +13 +-6 +14 +-4 +13 +-7 +12 +-6 +12 +-7 +11 +-6 +13 +-7 +11 +-7 +13 +-6 +11 +-8 +12 +-5 +12 +-8 +11 +-7 +12 +-7 +10 +-7 +12 +-7 +11 +-7 +12 +-6 +11 +-8 +12 +-6 +12 +-9 +10 +-7 +11 +24 +-1 +16 +-5 +12 +-9 +10 +-9 +11 +-11 +9 +-10 +11 +-9 +9 +-10 +11 +-8 +11 +-10 +11 +-7 +12 +-8 +11 +-8 +12 +-9 +10 +-9 +12 +-8 +-43 +-12 +-21 +4 +-11 +9 +-7 +14 +-4 +14 +-4 +15 +-3 +14 +-5 +14 +-3 +15 +-6 +12 +-5 +14 +-5 +11 +-7 +13 +-6 +12 +-7 +12 +-6 +12 +25 +1 +18 +-4 +12 +-9 +11 +-8 +11 +-10 +10 +-8 +12 +-8 +10 +-8 +12 +-9 +10 +-9 +12 +-8 +10 +-9 +11 +-7 +12 +-10 +10 +-8 +12 +-8 +-42 +-10 +-19 +5 +-10 +10 +-5 +15 +-5 +14 +-4 +16 +-3 +14 +-5 +15 +-3 +15 +-6 +13 +-4 +14 +-6 +12 +-6 +13 +-6 +12 +-6 +13 +-5 +11 +-7 +12 +-5 +12 +-8 +11 +-7 +12 +-7 +10 +-7 +12 +-7 +11 +-8 +12 +-6 +10 +-8 +11 +-6 +12 +-8 +11 +-7 +12 +-7 +10 +-7 +12 +-7 +11 +-8 +12 +-6 +10 +-8 +11 +-6 +12 +-9 +10 +-8 +11 +-8 +10 +-8 +12 +-7 +11 +-8 +12 +-6 +11 +-8 +11 +-6 +12 +-9 +10 +-8 +12 +-7 +10 +24 +1 +17 +-6 +12 +-8 +12 +-10 +10 +-10 +11 +-9 +9 +-10 +10 +-8 +11 +-11 +9 +-9 +11 +-10 +9 +-9 +11 +-9 +10 +-9 +11 +-8 +10 +-10 +-42 +-10 +-20 +3 +-11 +11 +-5 +14 +-5 +15 +-3 +15 +-4 +14 +-3 +16 +-5 +14 +-4 +15 +-4 +12 +-6 +13 +-5 +13 +-7 +12 +-5 +12 +-7 +11 +-6 +13 +-7 +11 +-7 +13 +-6 +11 +-8 +12 +-6 +12 +-8 +11 +-7 +11 +-7 +10 +-7 +12 +-7 +11 +-8 +12 +-6 +10 +-8 +12 +-6 +12 +-8 +11 +-7 +11 +-8 +10 +-8 +12 +-8 +10 +-8 +12 +-7 +10 +-8 +11 +-6 +11 +-9 +10 +-8 +11 +-8 +10 +-8 +11 +-7 +11 +-8 +12 +-6 +10 +-8 +11 +26 +1 +15 +-6 +13 +-7 +11 +-11 +9 +-9 +10 +-10 +9 +-9 +11 +-10 +10 +-9 +12 +-8 +10 +-10 +11 +-7 +11 +-9 +11 +-7 +12 +-8 +11 +-8 +-40 +-10 +-21 +4 +-9 +12 +-7 +13 +-4 +16 +-3 +14 +-5 +15 +-4 +14 +-6 +14 +-4 +13 +-6 +13 +-5 +14 +-6 +12 +-6 +14 +-6 +11 +-7 +12 +26 +1 +16 +-5 +14 +-8 +11 +-9 +11 +-8 +10 +-10 +10 +-8 +11 +-10 +9 +-9 +11 +-9 +10 +-9 +12 +-8 +11 +-9 +12 +-7 +11 +-9 +11 +-7 +-40 +-11 +-21 +5 +-9 +11 +-7 +13 +-4 +15 +-4 +14 +-4 +15 +-5 +14 +-5 +15 +-4 +13 +-5 +14 +-3 +14 +-6 +12 +-5 +13 +-6 +11 +-7 +12 +25 +0 +16 +-4 +14 +-9 +10 +-9 +11 +-9 +9 +-10 +11 +-9 +10 +-10 +10 +-8 +11 +-9 +10 +-8 +12 +-9 +10 +-9 +12 +-8 +10 +-9 +12 +-8 +-41 +-11 +-20 +5 +-10 +11 +-6 +15 +-3 +14 +-4 +15 +-2 +16 +-5 +13 +-4 +15 +-5 +12 +-6 +14 +-5 +13 +-6 +13 +-5 +12 +-7 +12 +-5 +13 +-7 +11 +-6 +13 +-6 +10 +-8 +12 +-7 +11 +-8 +12 +-6 +11 +-8 +11 +-6 +12 +-8 +11 +-7 +13 +-7 +10 +-8 +12 +-7 +11 +-8 +11 +-6 +11 +-7 +11 +-6 +12 +-8 +11 +-7 +13 +-7 +10 +-8 +11 +-7 +11 +-9 +11 +-7 +11 +-8 +11 +-6 +12 +-8 +10 +-7 +12 +-7 +10 +-8 +11 +-7 +11 +23 +0 +17 +-6 +11 +-10 +11 +-9 +9 +-11 +9 +-9 +10 +-11 +9 +-9 +11 +-9 +9 +-10 +11 +-9 +10 +-10 +11 +-8 +10 +-10 +10 +-8 +11 +-10 +-43 +-10 +-19 +5 +-12 +10 +-5 +14 +-5 +14 +-4 +15 +-4 +14 +-4 +16 +-3 +13 +-5 +14 +-4 +14 +-7 +12 +-5 +14 +-6 +12 +-6 +13 +-6 +12 +-6 +14 +-5 +12 +-7 +13 +-5 +13 +-8 +11 +-7 +12 +-7 +10 +-7 +12 +-8 +10 +-8 +12 +-7 +10 +-8 +11 +-6 +12 +-8 +11 +-7 +12 +-7 +10 +25 +1 +17 +-6 +12 +-7 +12 +-9 +10 +-9 +11 +-9 +9 +-11 +10 +-9 +10 +-11 +10 +-9 +10 +-10 +9 +-9 +11 +-10 +10 +-10 +12 +-8 +10 +-10 +-42 +-9 +-20 +3 +-11 +12 +-5 +14 +-5 +15 +-3 +15 +-4 +14 +-3 +15 +-5 +13 +-4 +15 +-4 +12 +-6 +14 +-5 +13 +-6 +13 +-5 +13 +-6 +12 +27 +2 +17 +-6 +13 +-7 +11 +-11 +9 +-10 +10 +-10 +9 +-10 +11 +-9 +10 +-9 +12 +-8 +10 +-9 +11 +-7 +12 +-10 +10 +-9 +12 +-9 +10 +-9 +12 +-8 +11 +-9 +12 +-8 +11 +-9 +11 +-7 +12 +-9 +11 +-8 +13 +-7 +10 +-9 +12 +-7 +12 +-9 +12 +-7 +12 +-8 +12 +-6 +13 +-9 +10 +-8 +12 +-8 +10 +-9 +12 +-7 +12 +-9 +12 +-7 +12 +-8 +11 +-7 +13 +-9 +11 +-8 +13 +-8 +10 +-9 +12 +-7 +12 +-9 +12 +-7 +11 +-9 +11 +-7 +-40 +-10 +-20 +5 +-8 +12 +-6 +14 +-3 +16 +-3 +14 +-3 +16 +-4 +14 +-4 +15 +-3 +13 +-5 +14 +-4 +14 +-7 +12 +-6 +13 +-6 +11 +-7 +12 +25 +0 +16 +-5 +14 +-8 +11 +-9 +12 +-8 +10 +-10 +11 +-8 +11 +-10 +10 +-8 +11 +-9 +10 +-8 +12 +-9 +10 +-9 +12 +-8 +10 +-10 +11 +-7 +-41 +-11 +-20 +5 +-9 +11 +-6 +14 +-3 +15 +-4 +14 +-3 +15 +-5 +13 +-5 +15 +-4 +12 +-6 +14 +-4 +13 +-6 +13 +-5 +13 +-6 +12 +-5 +13 +25 +0 +17 +-4 +14 +-9 +10 +-9 +11 +-9 +9 +-9 +11 +-9 +10 +-10 +11 +-8 +10 +-9 +11 +-8 +12 +-10 +10 +-8 +12 +-8 +10 +-9 +12 +-8 +11 +-9 +12 +-7 +11 +-9 +11 +-7 +12 +-9 +10 +-8 +13 +-7 +10 +-9 +12 +-7 +11 +-9 +12 +-7 +11 +-8 +11 +-7 +13 +-9 +11 +-8 +13 +-7 +-42 +-11 +-20 +5 +-10 +10 +-6 +15 +-4 +14 +-4 +15 +-3 +14 +-5 +14 +-3 +15 +-5 +13 +-5 +14 +-5 +12 +-7 +13 +-6 +12 +-7 +13 +-5 +12 +-7 +12 +-5 +13 +-7 +11 +-6 +13 +-6 +11 +-8 +12 +-7 +11 +-8 +12 +-6 +11 +-7 +12 +-5 +13 +-8 +11 +-7 +12 +-7 +10 +-8 +11 +-7 +11 +-8 +11 +-7 +10 +-8 +10 +-7 +12 +-8 +10 +-7 +13 +-6 +10 +-8 +12 +-6 +12 +-8 +11 +-6 +11 +-8 +10 +-7 +12 +-8 +11 +-7 +12 +-6 +10 +24 +1 +18 +-5 +11 +-8 +12 +-9 +10 +-11 +10 +-9 +9 +-11 +10 +-9 +11 +-11 +9 +-9 +11 +-9 +9 +-9 +11 +-9 +10 +-10 +11 +-8 +10 +-9 +-42 +-9 +-19 +3 +-11 +11 +-5 +14 +-5 +14 +-3 +15 +-4 +14 +-3 +15 +-4 +14 +-5 +15 +-4 +12 +-7 +13 +-5 +13 +-7 +12 +-5 +13 +-6 +11 +-6 +13 +-7 +11 +-8 +12 +-6 +10 +-8 +11 +-6 +12 +-9 +10 +-7 +12 +-7 +10 +-7 +12 +-7 +11 +-8 +12 +-7 +10 +-9 +11 +-7 +11 +-9 +10 +-7 +12 +-7 +10 +-8 +12 +-8 +10 +-8 +12 +-7 +10 +-9 +10 +-7 +12 +-8 +10 +-7 +12 +-7 +10 +-8 +12 +-7 +11 +-8 +12 +-6 +11 +-8 +11 +-6 +12 +-8 +11 +-6 +13 +-6 +10 +-8 +12 +-7 +11 +-8 +11 +-7 +10 +-8 +10 +-7 +12 +-9 +10 +-7 +12 +-7 +10 +-8 +12 +-7 +11 +-8 +11 +-7 +10 +-9 +10 +-7 +11 +-9 +10 +-8 +12 +-7 +9 +-9 +11 +-7 +11 +-9 +11 +-7 +11 +-8 +11 +-6 +12 +-8 +11 +-7 +12 +-7 +10 +-8 +11 +-7 +11 +-9 +11 +-7 +11 +-8 +11 +-6 +12 +-8 +11 +-7 +13 +-6 +10 +-8 +12 +-7 +11 +-8 +11 +-6 +11 +-7 +11 +-6 +12 +-8 +10 +-7 +12 +25 +-1 +16 +-5 +13 +-8 +9 +-10 +11 +-10 +9 +-11 +10 +-9 +9 +-10 +10 +-8 +11 +-10 +10 +-9 +12 +-9 +9 +-10 +11 +-9 +10 +-10 +11 +-8 +10 +-9 +11 +-7 +12 +-9 +11 +-8 +13 +-7 +11 +-9 +12 +-7 +11 +-9 +12 +-7 +11 +-9 +11 +-7 +12 +-9 +11 +-7 +13 +-7 +11 +-9 +12 +-7 +12 +-9 +12 +-7 +11 +-9 +11 +-7 +12 +-9 +11 +-8 +13 +-7 +11 +-9 +12 +-7 +12 +-9 +12 +-7 +12 +-8 +11 +-7 +13 +-9 +11 +-8 +13 +-7 +-42 +-10 +-19 +6 +-10 +10 +-6 +14 +-5 +14 +-5 +15 +-3 +14 +-5 +14 +-3 +15 +-5 +13 +-4 +14 +-5 +12 +-6 +13 +-6 +12 +-7 +12 +-6 +11 +-8 +11 +-6 +12 +-8 +11 +-7 +13 +-6 +10 +-8 +12 +-6 +12 +-8 +12 +-6 +11 +-8 +11 +-6 +12 +-8 +11 +-7 +12 +-7 +10 +-8 +11 +-7 +11 +-9 +11 +-7 +11 +-8 +10 +-7 +12 +-8 +10 +-7 +12 +-7 +10 +-8 +11 +-6 +11 +-8 +11 +-7 +11 +-8 +10 +-7 +12 +-8 +11 +-7 +13 +-6 +10 +-8 +12 +-6 +12 +-8 +11 +-7 +11 +-8 +10 +-7 +11 +-8 +10 +-8 +12 +-7 +10 +-8 +11 +-6 +11 +-9 +10 +-7 +11 +-8 +10 +-7 +12 +-8 +10 +-8 +12 +-6 +11 +-8 +12 +-6 +12 +-8 +11 +-7 +11 +-8 +10 +-7 +12 +-8 +11 +-8 +12 +-7 +10 +-8 +11 +-7 +11 +-9 +10 +-7 +12 +-7 +10 +-7 +12 +-8 +10 +-8 +12 +-7 +10 +-8 +11 +-6 +11 +-9 +10 +-7 +12 +-7 +10 +-7 +12 +-8 +10 +-8 +12 +-7 +10 +-8 +11 +-6 +12 +-8 +10 +25 +1 +16 +-7 +12 +-7 +11 +-10 +9 +-9 +10 +-12 +8 +-11 +10 +-10 +8 +-11 +10 +-9 +10 +-11 +10 +-8 +11 +-9 +10 +-8 +12 +-9 +11 +-8 +13 +-7 +11 +-9 +12 +-7 +12 +-10 +10 +-8 +11 +-9 +10 +-8 +12 +-9 +11 +-9 +13 +-7 +11 +-9 +12 +-6 +12 +-9 +11 +-7 +12 +-8 +11 +-8 +-41 +-11 +-21 +4 +-9 +12 +-7 +13 +-4 +16 +-2 +14 +-4 +16 +-3 +15 +-5 +14 +-4 +13 +-6 +12 +-5 +14 +-7 +12 +-6 +13 +-6 +11 +-7 +13 +27 +2 +16 +-5 +14 +-7 +11 +-10 +11 +-9 +9 +-11 +10 +-9 +10 +-11 +9 +-9 +11 +-9 +10 +-9 +11 +-9 +11 +-9 +12 +-8 +10 +-9 +11 +-7 +-41 +-12 +-21 +5 +-9 +11 +-6 +14 +-3 +15 +-3 +14 +-3 +16 +-4 +14 +-4 +16 +-3 +13 +-5 +14 +-4 +14 +-6 +13 +-5 +13 +-6 +11 +-6 +13 +-7 +11 +-7 +13 +-6 +10 +-8 +12 +-6 +12 +-8 +11 +-6 +12 +-7 +11 +-6 +13 +-7 +11 +-7 +12 +-6 +10 +-8 +11 +-6 +11 +-9 +10 +-7 +11 +24 +-1 +16 +-5 +12 +-9 +11 +-8 +11 +-10 +10 +-9 +11 +-9 +9 +-11 +10 +-9 +10 +-11 +10 +-9 +10 +-10 +9 +-9 +11 +-10 +10 +-9 +12 +-8 +-43 +-11 +-20 +5 +-10 +10 +-6 +15 +-3 +15 +-4 +16 +-3 +14 +-5 +14 +-4 +14 +-6 +12 +-5 +14 +-5 +12 +-6 +14 +-6 +12 +-7 +13 +-5 +12 +25 +1 +18 +-4 +12 +-9 +11 +-8 +11 +-11 +9 +-9 +10 +-10 +10 +-8 +12 +-9 +10 +-9 +12 +-7 +10 +-9 +11 +-7 +11 +-9 +11 +-7 +11 +-8 +-42 +-9 +-19 +4 +-11 +11 +-4 +15 +-5 +14 +-3 +16 +-3 +14 +-4 +15 +-4 +14 +-5 +14 +-4 +13 +-6 +13 +-4 +14 +-7 +12 +-6 +14 +-5 +11 +-7 +13 +-5 +12 +-7 +12 +-5 +12 +-7 +11 +-6 +13 +-7 +11 +-7 +13 +-6 +11 +-8 +12 +-6 +12 +-8 +12 +-6 +12 +-7 +10 +-7 +12 +-8 +10 +24 +1 +16 +-7 +11 +-8 +11 +-9 +9 +-10 +10 +-10 +10 +-11 +10 +-8 +10 +-10 +10 +-8 +11 +-10 +9 +-9 +11 +-9 +9 +-10 +11 +-8 +11 +-10 +-42 +-10 +-21 +3 +-11 +12 +-5 +13 +-4 +15 +-2 +16 +-4 +14 +-3 +15 +-4 +13 +-5 +14 +-5 +13 +-6 +14 +-5 +12 +-6 +13 +-5 +13 +-7 +11 +-6 +13 +-6 +11 +-7 +12 +-6 +12 +-8 +12 +-6 +11 +-8 +11 +-6 +12 +-8 +11 +-7 +12 +-7 +10 +-8 +12 +-7 +11 +-8 +11 +-6 +11 +-8 +11 +25 +1 +16 +-6 +12 +-7 +11 +-11 +9 +-9 +10 +-10 +8 +-10 +10 +-10 +10 +-10 +11 +-8 +10 +-9 +11 +-7 +12 +-10 +10 +-8 +12 +-8 +10 +-9 +-41 +-10 +-20 +4 +-9 +12 +-6 +13 +-4 +16 +-3 +14 +-5 +15 +-3 +14 +-6 +13 +-4 +14 +-5 +12 +-5 +14 +-6 +12 +-6 +14 +-5 +12 +-7 +12 +27 +2 +16 +-6 +13 +-7 +11 +-10 +10 +-9 +10 +-10 +10 +-8 +11 +-10 +10 +-9 +12 +-8 +9 +-10 +11 +-7 +11 +-9 +11 +-7 +11 +-9 +10 +-8 +-41 +-11 +-21 +4 +-9 +11 +-7 +12 +-4 +15 +-4 +13 +-5 +15 +-4 +14 +-5 +14 +-4 +13 +-6 +12 +-4 +14 +-7 +12 +-6 +14 +-6 +11 +-7 +12 +-6 +12 +-8 +12 +-6 +12 +-7 +11 +-6 +12 +-8 +11 +-7 +13 +-6 +11 +-7 +12 +-6 +12 +-8 +12 +-6 +11 +-8 +10 +-7 +12 +-8 +10 +-8 +12 +-6 +10 +-8 +12 +-6 +11 +-9 +11 +-7 +11 +-8 +10 +-7 +12 +-8 +10 +-8 +12 +-7 +10 +-8 +11 +-6 +11 +-9 +10 +-7 +11 +-8 +10 +-7 +12 +24 +-1 +15 +-5 +13 +-9 +9 +-10 +11 +-9 +8 +-11 +10 +-9 +10 +-10 +11 +-8 +10 +-9 +11 +-7 +12 +-9 +10 +-9 +12 +-8 +10 +-10 +11 +-8 +-42 +-11 +-20 +5 +-10 +10 +-6 +15 +-3 +14 +-4 +15 +-2 +15 +-5 +13 +-4 +14 +-5 +12 +-5 +14 +-5 +13 +-6 +14 +-5 +12 +-7 +12 +-5 +12 +-8 +11 +-6 +12 +-6 +11 +-7 +12 +-6 +11 +-8 +12 +-6 +11 +-8 +11 +-5 +12 +-8 +11 +-7 +12 +-7 +10 +-8 +12 +-6 +11 +-8 +12 +-6 +11 +-8 +10 +-7 +12 +-9 +10 +-8 +12 +-7 +10 +-8 +11 +-7 +11 +-9 +11 +-7 +11 +-8 +10 +-7 +11 +-9 +10 +-8 +12 +-7 +10 +-8 +11 +-6 +11 +23 +-1 +17 +-5 +12 +-9 +11 +-8 +10 +-10 +9 +-9 +11 +-10 +9 +-9 +12 +-8 +9 +-10 +11 +-8 +11 +-10 +10 +-8 +11 +-9 +10 +-8 +12 +-9 +-42 +-10 +-19 +5 +-11 +10 +-5 +15 +-4 +13 +-4 +15 +-4 +14 +-5 +14 +-4 +14 +-5 +13 +-4 +15 +-6 +12 +-5 +14 +-5 +11 +-7 +13 +-5 +12 +24 +1 +18 +-5 +13 +-8 +12 +-8 +10 +-10 +10 +-8 +11 +-10 +9 +-9 +11 +-9 +9 +-9 +11 +-9 +10 +-10 +11 +-8 +10 +-9 +10 +-8 +11 +-10 +-43 +-10 +-20 +4 +-12 +10 +-5 +14 +-4 +14 +-3 +16 +-4 +14 +-4 +16 +-3 +13 +-5 +14 +-4 +14 +-6 +12 +-5 +13 +-6 +12 +-5 +13 +-6 +12 +25 +2 +18 +-5 +12 +-7 +13 +-8 +10 +-10 +11 +-8 +11 +-10 +10 +-8 +10 +-9 +10 +-8 +12 +-9 +10 +-9 +12 +-8 +10 +-10 +11 +-8 +11 +-10 +-42 +-10 +-20 +4 +-11 +11 +-5 +13 +-5 +14 +-2 +16 +-4 +14 +-3 +16 +-3 +14 +-4 +15 +-4 +13 +-6 +14 +-4 +12 +-6 +13 +-4 +14 +-6 +12 +-5 +13 +-6 +11 +-7 +12 +-6 +11 +-8 +12 +-6 +11 +-7 +11 +-6 +12 +-8 +10 +-7 +12 +-7 +10 +-8 +12 +-6 +11 +-8 +11 +-6 +11 +-7 +11 +-6 +12 +-8 +10 +-8 +12 +-7 +10 +-8 +11 +-6 +11 +-9 +10 +-7 +11 +-8 +10 +-7 +12 +-8 +10 +-8 +12 +-6 +10 +-8 +11 +-6 +12 +-8 +10 +25 +1 +16 +-7 +12 +-7 +10 +-10 +10 +-9 +11 +-10 +9 +-9 +11 +-8 +9 +-10 +11 +-8 +11 +-10 +10 +-8 +11 +-9 +10 +-8 +12 +-9 +10 +-8 +-40 +-10 +-21 +3 +-10 +12 +-5 +12 +-5 +15 +-4 +14 +-5 +15 +-3 +13 +-5 +13 +-4 +14 +-6 +12 +-5 +14 +-5 +11 +-7 +13 +-5 +12 +-7 +12 +-5 +12 +-7 +11 +-5 +13 +-7 +11 +-7 +13 +-6 +10 +-8 +12 +-6 +11 +-8 +11 +-6 +12 +-7 +11 +-6 +12 +-7 +11 +-7 +12 +-6 +10 +-8 +11 +25 +0 +15 +-6 +12 +-8 +10 +-11 +10 +-9 +9 +-10 +9 +-8 +11 +-10 +9 +-9 +11 +-9 +9 +-10 +11 +-8 +11 +-9 +11 +-7 +11 +-8 +11 +-7 +-40 +-11 +-21 +4 +-9 +11 +-7 +13 +-3 +15 +-3 +14 +-3 +16 +-4 +14 +-5 +15 +-4 +12 +-6 +13 +-4 +13 +-7 +12 +-5 +14 +-6 +11 +-6 +13 +26 +1 +17 +-4 +14 +-8 +10 +-9 +11 +-9 +9 +-10 +11 +-8 +11 +-10 +10 +-8 +11 +-9 +10 +-8 +12 +-9 +10 +-9 +12 +-8 +10 +-9 +11 +-7 +12 +-9 +11 +-7 +12 +-8 +11 +-7 +13 +-8 +11 +-8 +13 +-7 +10 +-9 +11 +-7 +11 +-9 +10 +-8 +11 +-9 +10 +-9 +11 +-9 +10 +-9 +12 +-7 +10 +-8 +12 +-6 +13 +-8 +11 +-7 +13 +-7 +11 +-7 +12 +-8 +11 +-8 +13 +-7 +11 +-9 +12 +-6 +12 +-9 +11 +-7 +12 +-8 +11 +-8 +12 +-8 +-41 +-10 +-19 +5 +-11 +10 +-6 +15 +-3 +14 +-4 +16 +-2 +15 +-4 +14 +-3 +14 +-5 +13 +-4 +14 +-6 +12 +-6 +14 +-5 +11 +-7 +12 +-6 +12 +23 +0 +17 +-5 +12 +-8 +11 +-8 +10 +-10 +10 +-8 +11 +-10 +9 +-9 +11 +-8 +9 +-9 +11 +-8 +11 +-9 +11 +-7 +11 +-9 +11 +-7 +12 +-9 +-42 +-10 +-19 +5 +-11 +10 +-5 +15 +-4 +14 +-4 +16 +-4 +14 +-4 +15 +-3 +13 +-5 +13 +-4 +14 +-6 +12 +-5 +14 +-5 +12 +-6 +13 +-6 +12 +24 +2 +18 +-5 +12 +-7 +13 +-8 +10 +-10 +11 +-8 +11 +-10 +10 +-8 +11 +-9 +10 +-8 +11 +-9 +10 +-9 +12 +-8 +9 +-10 +11 +-8 +11 +-10 +10 +-8 +11 +-9 +10 +-8 +12 +-9 +11 +-8 +13 +-7 +11 +-8 +12 +-7 +12 +-9 +11 +-8 +12 +-8 +11 +-8 +12 +-8 +11 +-8 +13 +-7 +11 +-9 +-41 +-9 +-19 +3 +-11 +11 +-5 +14 +-5 +15 +-3 +15 +-4 +14 +-3 +15 +-4 +13 +-4 +15 +-4 +12 +-6 +14 +-4 +13 +-7 +12 +-5 +12 +-7 +11 +-6 +12 +-7 +11 +-7 +12 +-6 +10 +-8 +11 +-6 +12 +-8 +11 +-7 +11 +-7 +10 +-7 +12 +-8 +10 +-7 +12 +-6 +10 +-8 +12 +-6 +12 +-8 +11 +-6 +12 +-7 +10 +-7 +12 +-7 +11 +-7 +12 +-6 +10 +-8 +11 +-6 +12 +-8 +10 +-7 +11 +-8 +10 +-7 +12 +-7 +11 +-8 +12 +-6 +10 +-8 +11 +25 +1 +15 +-6 +12 +-7 +11 +-11 +10 +-9 +9 +-10 +9 +-9 +10 +-11 +8 +-10 +11 +-9 +9 +-10 +11 +-7 +11 +-9 +11 +-8 +11 +-9 +10 +-8 +-41 +-12 +-21 +4 +-9 +11 +-7 +13 +-3 +16 +-3 +14 +-3 +16 +-3 +14 +-5 +14 +-4 +13 +-6 +13 +-4 +13 +-7 +12 +-5 +14 +-5 +11 +-7 +13 +-6 +12 +-7 +12 +-5 +11 +-7 +11 +-6 +12 +-8 +10 +-7 +12 +-7 +10 +-8 +12 +-6 +11 +-8 +11 +-6 +11 +-8 +10 +-7 +11 +-8 +10 +-8 +12 +-7 +10 +-8 +11 +-6 +11 +-8 +11 +-6 +11 +-7 +11 +-6 +12 +-8 +10 +-8 +12 +-7 +9 +-9 +11 +-6 +12 +-8 +11 +-6 +12 +-7 +11 +-6 +12 +-8 +10 +-8 +12 +-7 +9 +-9 +11 +-7 +11 +-9 +10 +-7 +11 +-8 +10 +-7 +12 +-8 +10 +-8 +12 +-6 +10 +-8 +11 +-6 +12 +-8 +11 +-7 +12 +-7 +10 +-7 +11 +-8 +10 +-8 +11 +-7 +10 +-8 +11 +-6 +12 +-8 +10 +-7 +12 +-7 +10 +-7 +12 +-7 +11 +-8 +11 +-7 +10 +-8 +10 +-6 +11 +-9 +9 +-8 +11 +-8 +9 +-8 +12 +-7 +11 +-7 +12 +-6 +11 +-7 +11 +-6 +12 +-8 +10 +-7 +12 +-6 +10 +-7 +12 +-6 +12 +-8 +12 +-6 +10 +23 +0 +17 +-5 +11 +-9 +10 +-8 +10 +-11 +9 +-9 +10 +-10 +9 +-9 +11 +-10 +10 +-9 +12 +-8 +10 +-9 +11 +-8 +11 +-10 +9 +-9 +11 +-9 +10 +-8 +12 +-8 +11 +-8 +12 +-7 +10 +-9 +11 +-7 +11 +-10 +10 +-8 +12 +-7 +10 +-8 +12 +-8 +11 +-9 +12 +-7 +11 +-9 +11 +-7 +12 +-9 +10 +-8 +12 +-8 +10 +-8 +12 +-8 +11 +-9 +12 +-7 +11 +-8 +11 +-6 +12 +-9 +10 +-8 +12 +-8 +10 +-8 +12 +-7 +12 +-8 +12 +-6 +12 +-8 +-40 +-8 +-18 +4 +-10 +11 +-5 +14 +-5 +14 +-3 +15 +-4 +14 +-3 +15 +-4 +14 +-4 +15 +-4 +12 +-6 +13 +-4 +13 +-6 +12 +-5 +13 +-6 +11 +-6 +13 +-6 +11 +-7 +12 +-6 +11 +-7 +12 +-5 +13 +-7 +11 +-6 +12 +-7 +10 +-7 +12 +-7 +11 +-8 +12 +-6 +10 +-8 +11 +-6 +12 +-8 +10 +-7 +12 +-7 +10 +-8 +11 +-7 +10 +-8 +11 +-6 +10 +-8 +11 +-6 +12 +-8 +10 +-7 +11 +-8 +9 +-8 +11 +-8 +10 +-9 +11 +-6 +10 +-8 +11 +-6 +12 +-8 +10 +-7 +12 +-7 +10 +-8 +12 +-7 +11 +-8 +12 +-6 +11 +-8 +11 +-6 +12 +-8 +10 +-7 +12 +-6 +10 +-8 +12 +-6 +11 +-8 +11 +-6 +11 +-8 +10 +-7 +11 +-9 +10 +-8 +12 +-7 +9 +-9 +11 +-7 +11 +-8 +11 +-6 +11 +-7 +10 +-6 +12 +-8 +10 +-8 +12 +-7 +10 +-8 +11 +-7 +11 +-9 +10 +-7 +11 +-7 +10 +-6 +12 +-7 +11 +-7 +13 +-6 +10 +-8 +11 +-6 +11 +-8 +11 +-6 +11 +-7 +10 +-7 +12 +-8 +10 +-8 +12 +25 +-1 +15 +-5 +13 +-8 +9 +-10 +11 +-9 +9 +-10 +10 +-9 +9 +-10 +10 +-8 +11 +-10 +10 +-8 +12 +-8 +10 +-9 +12 +-8 +11 +-9 +11 +-7 +10 +-9 +11 +-7 +12 +-9 +11 +-8 +12 +-7 +10 +-9 +12 +-7 +11 +-8 +12 +-6 +11 +-8 +11 +-7 +12 +-10 +10 +-9 +12 +-8 +9 +-10 +11 +-9 +-42 +-12 +-20 +5 +-10 +11 +-5 +15 +-3 +14 +-4 +15 +-2 +15 +-5 +13 +-4 +15 +-4 +12 +-5 +14 +-5 +12 +-6 +13 +-5 +11 +-7 +12 +-5 +13 +24 +0 +17 +-4 +13 +-9 +11 +-8 +11 +-9 +9 +-9 +11 +-9 +10 +-9 +12 +-7 +10 +-9 +12 +-7 +12 +-9 +11 +-8 +11 +-9 +10 +-8 +12 +-9 +-42 +-11 +-19 +5 +-11 +10 +-5 +15 +-3 +14 +-4 +15 +-3 +14 +-5 +14 +-4 +13 +-5 +13 +-4 +14 +-6 +12 +-6 +13 +-5 +11 +-7 +12 +-5 +12 +-7 +12 +-5 +11 +-7 +11 +-6 +12 +-7 +11 +-7 +12 +-6 +10 +-8 +12 +-6 +12 +-8 +11 +-6 +11 +-7 +10 +-6 +12 +-8 +10 +-7 +12 +-7 +10 +23 +0 +17 +-5 +11 +-8 +11 +-9 +10 +-10 +10 +-9 +9 +-11 +9 +-9 +10 +-11 +9 +-9 +11 +-9 +9 +-9 +11 +-8 +11 +-9 +12 +-7 +11 +-8 +-41 +-9 +-19 +3 +-11 +11 +-5 +14 +-5 +14 +-3 +15 +-4 +13 +-4 +15 +-5 +13 +-6 +14 +-4 +12 +-6 +12 +-5 +13 +-7 +11 +-6 +13 +-6 +11 +24 +2 +17 +-5 +12 +-7 +12 +-9 +10 +-9 +12 +-8 +10 +-9 +11 +-8 +11 +-10 +10 +-8 +11 +-9 +10 +-9 +11 +-9 +10 +-9 +11 +-8 +10 +-9 +-41 +-9 +-19 +4 +-10 +12 +-4 +14 +-4 +15 +-2 +14 +-4 +14 +-3 +15 +-5 +12 +-5 +14 +-4 +12 +-6 +13 +-4 +13 +-7 +12 +-5 +12 +-6 +12 +-5 +13 +-7 +11 +-7 +13 +-6 +10 +-8 +12 +-6 +11 +-8 +11 +-6 +11 +-8 +10 +-7 +12 +-8 +10 +-7 +12 +-6 +10 +-8 +11 +-6 +11 +-8 +10 +24 +0 +15 +-7 +12 +-7 +10 +-10 +9 +-9 +10 +-11 +9 +-9 +11 +-9 +9 +-9 +11 +-9 +10 +-10 +11 +-8 +10 +-10 +10 +-7 +11 +-10 +10 +-8 +-40 +-10 +-21 +4 +-9 +11 +-6 +13 +-4 +15 +-4 +14 +-4 +16 +-3 +13 +-5 +14 +-3 +14 +-6 +13 +-4 +13 +-6 +12 +-5 +13 +-7 +11 +-7 +13 +-6 +11 +-7 +12 +-5 +12 +-8 +11 +-6 +11 +-7 +11 +-6 +13 +-7 +11 +-7 +12 +-6 +10 +-8 +11 +-7 +11 +-9 +10 +-7 +11 +-8 +10 +-7 +12 +24 +0 +15 +-5 +12 +-10 +9 +-10 +10 +-10 +8 +-11 +10 +-9 +10 +-10 +11 +-8 +11 +-9 +10 +-8 +11 +-10 +10 +-9 +11 +-8 +9 +-9 +11 +-7 +-41 +-11 +-20 +5 +-10 +11 +-6 +14 +-3 +14 +-4 +14 +-2 +15 +-5 +13 +-4 +14 +-5 +12 +-6 +13 +-5 +12 +-6 +13 +-5 +12 +-6 +12 +-5 +13 +25 +1 +17 +-3 +14 +-8 +11 +-7 +11 +-9 +9 +-9 +11 +-10 +9 +-10 +11 +-8 +9 +-10 +10 +-7 +11 +-9 +10 +-8 +12 +-8 +10 +-8 +12 +-8 +-42 +-11 +-19 +5 +-11 +10 +-6 +15 +-3 +14 +-4 +15 +-2 +15 +-5 +14 +-3 +14 +-4 +13 +-4 +15 +-5 +13 +-5 +14 +-5 +11 +-7 +13 +-5 +13 +-7 +11 +-5 +12 +-7 +10 +-7 +12 +-8 +10 +-8 +12 +-7 +10 +-8 +11 +-6 +12 +-8 +11 +-6 +11 +-7 +10 +-7 +12 +-7 +11 +-7 +12 +-6 +10 +-8 +11 +-6 +11 +-8 +10 +-7 +11 +-7 +10 +-7 +12 +-7 +10 +-8 +11 +-7 +9 +-9 +10 +-7 +11 +-9 +10 +-7 +12 +-7 +10 +-7 +12 +-7 +11 +23 +1 +16 +-7 +11 +-8 +12 +-8 +9 +-10 +11 +-8 +11 +-10 +10 +-8 +11 +-9 +9 +-8 +11 +-9 +10 +-9 +12 +-8 +10 +-9 +11 +-7 +11 +-9 +-41 +-9 +-19 +4 +-11 +11 +-5 +13 +-5 +14 +-3 +15 +-5 +13 +-4 +15 +-4 +12 +-5 +14 +-4 +14 +-5 +14 +-4 +13 +-6 +12 +-5 +13 +-7 +11 +-6 +12 +-6 +10 +-8 +12 +-6 +11 +-8 +12 +-6 +11 +-7 +11 +-5 +12 +-7 +11 +-6 +13 +-6 +10 +-8 +12 +-6 +11 +-8 +11 +-6 +11 +-8 +10 +-6 +12 +-8 +10 +-7 +12 +-7 +10 +-8 +11 +-6 +11 +-8 +10 +-7 +11 +-8 +10 +-7 +11 +-8 +10 +-8 +12 +-6 +10 +-8 +11 +-6 +12 +-8 +11 +25 +1 +16 +-6 +13 +-7 +11 +-9 +10 +-8 +11 +-11 +9 +-9 +11 +-9 +9 +-10 +10 +-9 +10 +-10 +10 +-8 +10 +-10 +9 +-8 +11 +-10 +9 +-9 +-40 +-10 +-21 +4 +-9 +12 +-5 +13 +-3 +16 +-3 +15 +-4 +15 +-3 +13 +-5 +13 +-4 +14 +-6 +12 +-5 +14 +-5 +11 +-6 +12 +-6 +11 +-7 +13 +26 +1 +16 +-5 +14 +-6 +10 +-9 +11 +-8 +11 +-10 +10 +-8 +10 +-9 +10 +-8 +11 +-9 +10 +-9 +11 +-8 +9 +-9 +11 +-7 +11 +-9 +11 +-7 +-41 +-10 +-21 +4 +-9 +10 +-6 +14 +-2 +16 +-4 +14 +-3 +16 +-3 +13 +-5 +14 +-4 +14 +-6 +13 +-4 +13 +-6 +12 +-5 +13 +-6 +12 +-5 +14 +26 +1 +16 +-4 +14 +-7 +10 +-9 +11 +-9 +10 +-10 +10 +-9 +9 +-10 +10 +-8 +11 +-9 +10 +-8 +12 +-8 +10 +-8 +12 +-8 +11 +-9 +12 +-7 +-42 +-11 +-20 +5 +-9 +10 +-6 +14 +-3 +15 +-5 +14 +-3 +15 +-4 +13 +-4 +14 +-5 +12 +-5 +14 +-5 +11 +-7 +12 +-5 +12 +-7 +11 +-6 +12 +-6 +11 +-6 +13 +-6 +12 +-7 +12 +-6 +10 +-8 +11 +-6 +12 +-8 +11 +-6 +12 +-6 +11 +-7 +12 +-7 +11 +-7 +12 +-6 +11 +-7 +11 +-6 +12 +-8 +10 +-7 +12 +-7 +10 +-8 +11 +-7 +10 +-8 +11 +-7 +10 +-8 +10 +-6 +12 +-8 +10 +-7 +12 +-7 +10 +-8 +11 +-7 +10 +-8 +11 +-7 +10 +23 +-1 +17 +-5 +11 +-9 +10 +-8 +10 +-11 +9 +-9 +10 +-10 +8 +-9 +11 +-10 +9 +-10 +11 +-8 +9 +-10 +10 +-8 +11 +-10 +10 +-8 +12 +-8 +-42 +-10 +-19 +5 +-10 +10 +-5 +15 +-4 +14 +-3 +16 +-2 +14 +-4 +15 +-3 +14 +-5 +13 +-4 +13 +-5 +12 +-4 +14 +-6 +12 +-6 +14 +-5 +11 +-7 +12 +-6 +12 +-8 +10 +-6 +12 +-7 +10 +-7 +12 +-8 +10 +-8 +12 +-6 +10 +-8 +11 +-6 +11 +-8 +10 +-6 +12 +-7 +10 +-7 +12 +-7 +11 +24 +1 +17 +-6 +11 +-8 +12 +-8 +9 +-10 +10 +-9 +10 +-10 +10 +-8 +10 +-9 +10 +-8 +11 +-9 +10 +-9 +12 +-8 +10 +-9 +11 +-7 +11 +-9 +-41 +-9 +-20 +4 +-10 +12 +-5 +13 +-5 +15 +-2 +15 +-5 +13 +-4 +15 +-4 +13 +-4 +14 +-4 +13 +-5 +14 +-4 +12 +-6 +12 +-5 +13 +-8 +10 +24 +1 +16 +-7 +11 +-8 +10 +-9 +9 +-9 +11 +-10 +9 +-9 +11 +-8 +9 +-10 +11 +-8 +11 +-10 +10 +-8 +11 +-8 +10 +-7 +12 +-8 +11 +-9 +12 +-7 +10 +-9 +11 +-6 +12 +-9 +11 +-7 +12 +-7 +11 +-7 +12 +-8 +11 +-8 +12 +-7 +10 +-9 +11 +-7 +12 +-9 +10 +-8 +12 +-8 +10 +-8 +12 +-7 +11 +-8 +12 +-7 +11 +-8 +11 +-6 +12 +-9 +10 +-8 +12 +-8 +10 +-9 +12 +-7 +11 +-8 +12 +-7 +11 +-8 +11 +-6 +12 +-9 +10 +-8 +-39 +-9 +-20 +4 +-9 +12 +-5 +13 +-4 +16 +-4 +14 +-4 +16 +-3 +13 +-5 +14 +-3 +14 +-6 +12 +-5 +13 +-5 +11 +-6 +13 +-6 +12 +-7 +13 +26 +1 +16 +-5 +14 +-7 +10 +-10 +10 +-8 +10 +-10 +9 +-8 +11 +-9 +9 +-8 +11 +-9 +10 +-9 +12 +-8 +10 +-9 +11 +-7 +11 +-9 +10 +-8 +-40 +-10 +-21 +4 +-9 +11 +-6 +13 +-3 +15 +-4 +14 +-4 +16 +-3 +13 +-5 +14 +-3 +14 +-6 +12 +-5 +13 +-6 +11 +-5 +13 +-7 +11 +-7 +13 +25 +0 +16 +-4 +14 +-7 +10 +-9 +11 +-8 +10 +-10 +11 +-8 +10 +-10 +10 +-8 +11 +-9 +10 +-8 +12 +-7 +10 +-8 +12 +-7 +11 +-9 +11 +-7 +11 +-9 +11 +-7 +12 +-9 +11 +-7 +13 +-7 +10 +-9 +11 +-7 +11 +-9 +11 +-7 +11 +-8 +11 +-7 +12 +-9 +10 +-8 +12 +-8 +10 +-9 +11 +-8 +-41 +-11 +-19 +5 +-10 +11 +-5 +15 +-2 +15 +-3 +16 +-1 +16 +-4 +14 +-3 +15 +-4 +12 +-5 +14 +-5 +13 +-6 +13 +-5 +12 +-6 +12 +-5 +13 +-7 +11 +-6 +13 +-6 +10 +-7 +12 +-6 +11 +-7 +12 +-6 +11 +-8 +11 +-6 +12 +-8 +10 +-7 +12 +-7 +10 +-8 +11 +-7 +11 +-8 +11 +-6 +10 +-8 +11 +-6 +11 +-8 +10 +-7 +12 +-7 +9 +-8 +11 +-7 +10 +-8 +11 +-6 +10 +-8 +10 +-6 +12 +-8 +10 +-7 +12 +-6 +10 +-8 +11 +-7 +11 +22 +0 +16 +-6 +11 +-9 +11 +-8 +9 +-10 +10 +-8 +10 +-10 +9 +-9 +11 +-9 +9 +-9 +11 +-8 +10 +-9 +11 +-8 +10 +-9 +11 +-7 +11 +-10 +-42 +-10 +-19 +4 +-11 +10 +-5 +14 +-4 +14 +-3 +16 +-4 +14 +-3 +16 +-3 +13 +-5 +13 +-4 +13 +-7 +11 +-5 +12 +-6 +11 +-6 +13 +-6 +12 +-7 +13 +-5 +11 +-7 +12 +-5 +12 +-8 +11 +-6 +12 +-7 +10 +-7 +12 +-7 +11 +-8 +12 +-6 +10 +-8 +11 +-6 +11 +-8 +10 +-6 +12 +-7 +10 +-7 +12 +-7 +11 +-8 +11 +-6 +10 +-8 +10 +-7 +11 +-9 +9 +-8 +11 +-7 +10 +-8 +12 +-7 +11 +-8 +12 +-6 +10 +-8 +10 +-6 +11 +-8 +10 +-7 +12 +-6 +10 +-7 +12 +-7 +11 +-7 +12 +-6 +10 +-8 +10 +-6 +11 +-8 +10 +-7 +11 +-7 +9 +-8 +11 +-7 +11 +-8 +11 +-6 +10 +-8 +11 +-6 +12 +-8 +10 +-7 +12 +-7 +9 +-9 +11 +-7 +11 +-8 +11 +-6 +11 +-7 +11 +-6 +12 +-8 +10 +-8 +11 +-7 +9 +-9 +11 +-7 +10 +-9 +11 +-7 +10 +-8 +10 +-6 +12 +-8 +10 +-7 +12 +-6 +10 +-8 +11 +-7 +11 +-9 +10 +-7 +10 +-8 +9 +-7 +11 +-8 +10 +-8 +12 +-6 +10 +-8 +11 +25 +1 +15 +-6 +13 +-8 +11 +-10 +11 +-8 +9 +-10 +9 +-9 +10 +-11 +8 +-10 +11 +-9 +9 +-10 +11 +-7 +11 +-9 +11 +-7 +12 +-8 +11 +-6 +13 +-8 +11 +-8 +13 +-7 +10 +-9 +12 +-7 +11 +-9 +11 +-7 +11 +-8 +10 +-7 +12 +-9 +10 +-9 +12 +-8 +10 +-9 +11 +-7 +11 +-9 +12 +-7 +12 +-8 +11 +-7 +13 +-8 +11 +-8 +13 +-7 +10 +-9 +11 +-7 +11 +-9 +11 +-7 +12 +-8 +11 +-6 +13 +-7 +12 +-7 +13 +-6 +11 +-8 +12 +-7 +-40 +-11 +-20 +5 +-10 +11 +-6 +14 +-3 +14 +-4 +15 +-2 +16 +-4 +14 +-4 +15 +-4 +12 +-6 +13 +-5 +12 +-7 +13 +-5 +12 +-7 +12 +-5 +12 +-7 +11 +-6 +12 +-6 +10 +-8 +12 +-6 +11 +-8 +11 +-6 +11 +-8 +10 +-7 +12 +-8 +10 +-7 +12 +-6 +10 +-8 +11 +-6 +11 +-8 +11 +-6 +11 +-7 +10 +-6 +12 +-7 +10 +-7 +12 +-6 +10 +-7 +12 +-5 +12 +-8 +11 +-6 +12 +-7 +10 +-7 +11 +-8 +10 +-8 +11 +-7 +10 +-8 +11 +-6 +11 +-8 +10 +-7 +11 +-7 +9 +-8 +11 +-8 +10 +-8 +11 +-7 +10 +-8 +11 +-5 +12 +-8 +11 +-6 +12 +-6 +10 +-7 +12 +-7 +11 +-8 +11 +-6 +10 +-8 +10 +-6 +11 +-9 +9 +-7 +11 +-7 +10 +-8 +11 +-7 +11 +-8 +11 +-6 +10 +-8 +10 +-6 +11 +-9 +10 +-7 +12 +-7 +10 +-8 +12 +-6 +11 +-8 +11 +-6 +11 +-7 +11 +-6 +12 +-8 +10 +-7 +12 +-6 +10 +-7 +12 +-6 +11 +-8 +11 +-6 +11 +-8 +10 +-7 +11 +-9 +9 +-8 +12 +-7 +10 +23 +1 +18 +-5 +12 +-8 +12 +-9 +9 +-10 +10 +-9 +9 +-10 +9 +-8 +10 +-11 +9 +-9 +10 +-9 +9 +-9 +11 +-9 +10 +-9 +11 +-8 +10 +-9 +11 +-7 +11 +-9 +10 +-8 +12 +-8 +10 +-9 +12 +-8 +11 +-9 +12 +-7 +11 +-8 +11 +-7 +12 +-9 +11 +-7 +12 +-7 +10 +-8 +12 +-8 +11 +-9 +-40 +-9 +-20 +4 +-10 +12 +-4 +13 +-4 +15 +-2 +15 +-5 +14 +-4 +14 +-5 +12 +-5 +14 +-5 +12 +-6 +13 +-5 +12 +-6 +12 +-4 +13 +-7 +11 +25 +2 +17 +-6 +12 +-7 +11 +-9 +9 +-9 +10 +-10 +9 +-10 +11 +-8 +9 +-10 +11 +-8 +11 +-10 +10 +-8 +11 +-8 +11 +-7 +13 +-7 +11 +-7 +-39 +-8 +-20 +4 +-9 +12 +-5 +12 +-5 +15 +-3 +14 +-5 +14 +-3 +14 +-5 +13 +-3 +15 +-5 +13 +-4 +15 +-4 +12 +-6 +13 +-5 +12 +-7 +12 +-6 +12 +-7 +11 +-6 +12 +-8 +10 +-7 +12 +-6 +10 +-8 +11 +-6 +11 +-8 +11 +-6 +11 +-7 +11 +-5 +13 +-7 +11 +-6 +13 +-5 +10 +-8 +12 +25 +1 +15 +-6 +12 +-8 +9 +-11 +9 +-10 +8 +-11 +8 +-9 +10 +-11 +8 +-9 +11 +-9 +9 +-10 +11 +-8 +10 +-10 +11 +-8 +10 +-9 +10 +-7 +-40 +-11 +-21 +4 +-9 +11 +-7 +13 +-3 +16 +-3 +14 +-3 +16 +-3 +14 +-4 +15 +-3 +13 +-5 +13 +-4 +14 +-6 +11 +-5 +13 +-5 +11 +-7 +13 +26 +1 +16 +-4 +14 +-7 +11 +-9 +11 +-8 +9 +-10 +10 +-9 +10 +-11 +9 +-9 +11 +-9 +9 +-8 +11 +-9 +10 +-9 +12 +-7 +10 +-9 +11 +-7 +-41 +-12 +-21 +4 +-10 +11 +-7 +13 +-3 +14 +-4 +14 +-2 +16 +-4 +14 +-3 +16 +-3 +13 +-5 +14 +-4 +14 +-6 +12 +-5 +12 +-6 +11 +-5 +13 +-6 +11 +-6 +13 +-6 +10 +-8 +11 +-6 +11 +-8 +10 +-6 +11 +-7 +10 +-7 +12 +-7 +11 +-8 +12 +-7 +10 +-8 +11 +-6 +11 +-8 +10 +-7 +11 +24 +-1 +16 +-5 +12 +-8 +10 +-8 +11 +-10 +9 +-9 +11 +-8 +9 +-10 +11 +-8 +10 +-10 +11 +-8 +10 +-9 +10 +-7 +12 +-9 +10 +-8 +12 +-7 +-42 +-11 +-19 +5 +-10 +9 +-6 +14 +-4 +14 +-4 +15 +-3 +14 +-4 +14 +-3 +15 +-5 +13 +-4 +14 +-5 +11 +-6 +13 +-6 +12 +-7 +12 +-5 +11 +-7 +11 +-6 +12 +-8 +10 +-7 +12 +-6 +10 +-8 +12 +-7 +11 +-8 +11 +-6 +10 +-8 +10 +-6 +11 +-9 +10 +-7 +12 +-7 +10 +-8 +12 +-6 +11 +23 +1 +17 +-6 +12 +-8 +11 +-8 +9 +-10 +10 +-8 +10 +-10 +9 +-9 +10 +-9 +9 +-9 +11 +-9 +10 +-9 +11 +-7 +10 +-9 +11 +-7 +12 +-9 +-42 +-10 +-19 +4 +-11 +11 +-5 +14 +-4 +14 +-2 +16 +-3 +15 +-3 +16 +-3 +13 +-5 +14 +-4 +13 +-6 +12 +-5 +12 +-6 +11 +-6 +12 +-7 +11 +24 +2 +18 +-6 +12 +-7 +12 +-8 +9 +-10 +10 +-9 +10 +-10 +10 +-8 +10 +-9 +10 +-8 +11 +-9 +10 +-9 +12 +-8 +10 +-9 +11 +-7 +11 +-9 +-41 +-9 +-19 +4 +-10 +12 +-4 +13 +-4 +14 +-2 +16 +-4 +13 +-4 +15 +-4 +12 +-5 +14 +-4 +13 +-6 +13 +-4 +13 +-6 +12 +-5 +13 +-6 +11 +-6 +13 +-5 +10 +-7 +12 +-6 +11 +-8 +11 +-6 +11 +-7 +10 +-6 +12 +-7 +11 +-7 +13 +-5 +11 +-7 +12 +-5 +12 +-8 +11 +-6 +11 +-7 +10 +-7 +12 +-7 +11 +-7 +12 +-6 +10 +-8 +11 +-6 +12 +-8 +11 +-6 +12 +-7 +10 +-7 +11 +-8 +10 +-8 +12 +-6 +10 +-8 +11 +-6 +11 +-8 +10 +24 +1 +16 +-6 +12 +-7 +10 +-10 +9 +-9 +10 +-10 +9 +-9 +11 +-8 +9 +-10 +10 +-8 +10 +-10 +10 +-8 +10 +-9 +10 +-8 +11 +-9 +10 +-8 +-40 +-10 +-21 +3 +-10 +11 +-5 +12 +-4 +15 +-4 +14 +-4 +15 +-3 +14 +-4 +14 +-3 +15 +-5 +13 +-4 +14 +-5 +11 +-6 +13 +-6 +12 +-7 +12 +-5 +11 +-7 +12 +-5 +13 +-7 +11 +-6 +12 +-6 +10 +-8 +12 +-7 +11 +-8 +11 +-6 +11 +-8 +10 +-6 +12 +-8 +10 +-7 +12 +-7 +10 +-8 +11 +-6 +11 +-8 +11 +-6 +11 +-7 +10 +-6 +12 +-8 +10 +-7 +12 +-7 +10 +-8 +11 +-6 +11 +-8 +10 +-7 +11 +-8 +10 +-7 +11 +-8 +10 +-7 +12 +25 +-1 +15 +-5 +13 +-7 +9 +-10 +10 +-9 +10 +-11 +10 +-8 +9 +-10 +9 +-8 +11 +-10 +9 +-10 +11 +-9 +8 +-10 +10 +-9 +10 +-10 +10 +-8 +-41 +-11 +-20 +5 +-9 +10 +-6 +13 +-3 +15 +-4 +14 +-3 +16 +-3 +13 +-4 +15 +-4 +14 +-5 +14 +-4 +12 +-6 +12 +-5 +13 +-7 +11 +-6 +13 +25 +0 +16 +-4 +14 +-7 +11 +-8 +12 +-9 +10 +-9 +11 +-8 +10 +-9 +10 +-8 +11 +-10 +9 +-9 +11 +-9 +9 +-9 +11 +-9 +10 +-9 +11 +-7 +-42 +-11 +-19 +6 +-9 +10 +-6 +15 +-2 +15 +-4 +14 +-3 +14 +-5 +13 +-4 +14 +-5 +12 +-5 +14 +-4 +12 +-6 +13 +-5 +13 +-7 +11 +-6 +12 +24 +0 +17 +-4 +13 +-8 +11 +-7 +12 +-9 +10 +-8 +12 +-8 +10 +-9 +11 +-8 +11 +-9 +11 +-7 +11 +-9 +10 +-7 +12 +-9 +10 +-9 +12 +-8 +-42 +-12 +-20 +4 +-10 +9 +-6 +14 +-4 +14 +-4 +15 +-3 +13 +-5 +14 +-3 +15 +-5 +13 +-4 +14 +-5 +12 +-5 +13 +-5 +12 +-6 +13 +-5 +11 +-7 +12 +-5 +12 +-7 +11 +-6 +12 +-7 +10 +-7 +12 +-7 +11 +-8 +11 +-6 +10 +-8 +11 +-6 +12 +-8 +10 +-7 +12 +-7 +10 +-8 +12 +-6 +11 +-8 +12 +-6 +11 +-7 +10 +-6 +11 +-8 +10 +-8 +12 +-7 +9 +-9 +11 +-7 +11 +-8 +11 +-6 +10 +-8 +10 +-6 +12 +-8 +10 +-7 +12 +-6 +10 +23 +1 +17 +-5 +11 +-8 +11 +-9 +9 +-10 +11 +-8 +9 +-10 +9 +-8 +10 +-11 +9 +-9 +11 +-9 +9 +-9 +11 +-8 +11 +-9 +12 +-7 +11 +-9 +-41 +-9 +-19 +3 +-10 +11 +-4 +14 +-4 +15 +-2 +15 +-3 +14 +-3 +15 +-4 +13 +-5 +14 +-4 +11 +-7 +12 +-5 +13 +-7 +11 +-5 +13 +-6 +11 +-6 +13 +-6 +11 +-7 +13 +-5 +11 +-7 +11 +-6 +12 +-8 +10 +-7 +12 +-7 +10 +-7 +13 +-6 +12 +-6 +13 +-5 +11 +-7 +11 +-6 +11 +-9 +10 +24 +1 +16 +-6 +12 +-7 +11 +-9 +9 +-8 +11 +-9 +9 +-9 +11 +-9 +9 +-10 +10 +-9 +10 +-11 +9 +-8 +11 +-8 +10 +-8 +12 +-9 +10 +-9 +-40 +-10 +-21 +2 +-11 +11 +-6 +12 +-5 +15 +-3 +15 +-4 +15 +-3 +14 +-4 +14 +-3 +15 +-5 +12 +-5 +14 +-5 +11 +-6 +13 +-5 +12 +-7 +12 +25 +1 +16 +-5 +13 +-7 +10 +-10 +10 +-8 +10 +-10 +9 +-8 +12 +-8 +10 +-9 +11 +-9 +10 +-9 +11 +-8 +10 +-9 +11 +-7 +11 +-9 +10 +-8 +12 +-8 +9 +-9 +11 +-8 +10 +-9 +11 +-7 +11 +-8 +11 +-7 +12 +-9 +10 +-8 +12 +-8 +10 +-8 +12 +-7 +11 +-8 +12 +-6 +11 +-8 +11 +-7 +12 +-9 +10 +-8 +12 +-7 +10 +-9 +12 +-7 +11 +-9 +12 +-7 +11 +-8 +11 +-7 +12 +-9 +10 +-8 +13 +-7 +10 +-9 +12 +-7 +12 +-9 +11 +-7 +-40 +-10 +-20 +5 +-9 +10 +-6 +14 +-2 +16 +-4 +14 +-2 +16 +-3 +14 +-4 +15 +-4 +13 +-6 +13 +-5 +12 +-6 +12 +-4 +14 +-6 +12 +-5 +14 +26 +1 +17 +-3 +14 +-7 +11 +-8 +11 +-10 +9 +-10 +11 +-8 +9 +-10 +10 +-8 +11 +-10 +10 +-7 +12 +-8 +10 +-8 +12 +-9 +10 +-9 +12 +-7 +-42 +-11 +-20 +5 +-10 +9 +-7 +14 +-4 +14 +-4 +15 +-2 +14 +-4 +14 +-3 +15 +-5 +13 +-4 +15 +-4 +12 +-6 +13 +-5 +12 +-7 +11 +-6 +11 +24 +0 +17 +-4 +12 +-8 +11 +-7 +11 +-10 +10 +-8 +11 +-8 +9 +-9 +11 +-9 +10 +-10 +11 +-8 +10 +-9 +10 +-7 +12 +-9 +10 +-8 +12 +-8 +10 +-9 +11 +-8 +11 +-9 +11 +-7 +11 +-8 +11 +-6 +13 +-8 +11 +-7 +13 +-7 +10 +-9 +12 +-7 +11 +-9 +11 +-7 +11 +-8 +10 +-7 +12 +-9 +-42 +-10 +-18 +5 +-10 +10 +-5 +15 +-3 +14 +-3 +16 +-3 +15 +-4 +15 +-3 +14 +-5 +14 +-3 +14 +-6 +12 +-5 +14 +-5 +11 +-6 +13 +-5 +12 +-7 +12 +-5 +11 +-7 +11 +-5 +12 +-8 +10 +-7 +12 +-7 +10 +-8 +12 +-7 +11 +-8 +11 +-6 +10 +-8 +10 +-6 +12 +-8 +10 +-7 +12 +-7 +9 +-8 +11 +-7 +11 +-8 +11 +-6 +11 +-7 +10 +-6 +12 +-8 +10 +-7 +12 +-6 +10 +-8 +11 +-7 +10 +-9 +10 +-7 +10 +-8 +9 +-7 +11 +-8 +10 +24 +1 +17 +-6 +11 +-8 +11 +-9 +9 +-9 +11 +-9 +10 +-10 +11 +-8 +10 +-9 +10 +-8 +11 +-10 +9 +-9 +11 +-8 +9 +-9 +11 +-8 +11 +-9 +-40 +-9 +-20 +4 +-10 +12 +-4 +13 +-4 +15 +-2 +15 +-5 +13 +-4 +14 +-4 +12 +-4 +14 +-5 +12 +-5 +14 +-4 +12 +-6 +12 +-4 +13 +-7 +11 +-5 +12 +-6 +11 +-6 +12 +-7 +11 +-7 +12 +-6 +10 +-7 +11 +-5 +12 +-8 +10 +-6 +12 +-7 +10 +-7 +12 +-7 +11 +-8 +11 +-7 +10 +-8 +10 +-6 +12 +-8 +10 +-7 +12 +-7 +10 +-8 +11 +-7 +10 +-9 +10 +-7 +10 +-8 +10 +-6 +12 +-8 +10 +-7 +12 +-7 +9 +-8 +11 +-7 +10 +-8 +11 +-6 +10 +-7 +10 +-6 +12 +-8 +10 +-8 +11 +-7 +9 +-8 +11 +-7 +11 +-8 +11 +-6 +11 +-7 +10 +-6 +12 +-7 +10 +-7 +12 +-6 +10 +-7 +12 +-6 +11 +-8 +10 +-6 +11 +-7 +10 +-7 +11 +-8 +10 +-7 +12 +-6 +10 +-8 +11 +-6 +12 +-8 +10 +-6 +12 +-7 +10 +-6 +12 +-7 +11 +-7 +12 +-6 +10 +-8 +10 +-6 +11 +-9 +10 +-7 +11 +-7 +9 +-7 +11 +-7 +10 +-7 +12 +-6 +11 +-7 +11 +-5 +12 +-8 +11 +-6 +12 +-7 +10 +-7 +12 +24 +0 +15 +-5 +13 +-9 +9 +-10 +10 +-9 +8 +-11 +10 +-8 +10 +-10 +9 +-8 +11 +-9 +10 +-8 +11 +-9 +10 +-9 +12 +-8 +9 +-10 +10 +-8 +11 +-10 +10 +-8 +11 +-8 +10 +-7 +13 +-7 +12 +-7 +13 +-6 +11 +-8 +11 +-7 +12 +-9 +10 +-7 +12 +-8 +11 +-7 +13 +-7 +11 +-8 +13 +-7 +10 +-9 +11 +-8 +11 +-10 +10 +-8 +11 +-8 +10 +-8 +12 +-8 +11 +-8 +12 +-7 +10 +-8 +12 +-6 +12 +-9 +11 +-7 +12 +-8 +10 +-8 +12 +-8 +-41 +-10 +-18 +6 +-10 +11 +-4 +16 +-3 +14 +-4 +16 +-3 +14 +-5 +13 +-4 +13 +-5 +12 +-4 +14 +-5 +12 +-5 +14 +-5 +11 +-6 +13 +-4 +12 +-7 +12 +-5 +12 +-7 +11 +-6 +12 +-7 +10 +-7 +12 +-6 +10 +-8 +12 +-6 +11 +-8 +10 +-7 +10 +-8 +10 +-6 +12 +-8 +10 +-7 +12 +-7 +10 +-8 +11 +-6 +11 +-8 +11 +-6 +11 +-8 +10 +-7 +11 +-8 +9 +-8 +11 +-7 +10 +-8 +11 +-6 +12 +-7 +11 +-6 +11 +-7 +10 +-7 +11 +-8 +10 +-8 +12 +-7 +10 +-8 +11 +-6 +12 +-8 +10 +-7 +11 +-8 +9 +-8 +11 +-8 +10 +-8 +12 +-6 +10 +-8 +11 +-5 +12 +-8 +10 +-6 +11 +-7 +10 +-7 +11 +-8 +10 +-8 +11 +-6 +10 +-8 +11 +-6 +11 +-8 +10 +-6 +12 +-6 +10 +-7 +12 +-7 +10 +-8 +11 +-6 +10 +-8 +11 +-6 +12 +-8 +11 +-6 +12 +-6 +10 +-7 +12 +-7 +11 +-8 +11 +-6 +10 +-7 +11 +-5 +12 +-8 +10 +-6 +12 +-6 +10 +-7 +12 +-6 +11 +-7 +12 +-6 +10 +-8 +10 +25 +1 +15 +-6 +12 +-7 +11 +-10 +9 +-9 +10 +-9 +9 +-9 +11 +-10 +10 +-9 +11 +-8 +10 +-9 +11 +-7 +11 +-10 +9 +-8 +11 +-9 +9 +-9 +11 +-9 +10 +-9 +11 +-7 +10 +-9 +11 +-7 +11 +-9 +10 +-8 +12 +-7 +10 +-8 +12 +-7 +11 +-8 +12 +-6 +11 +-8 +11 +-6 +12 +-8 +11 +-7 +-39 +-9 +-20 +4 +-9 +11 +-5 +13 +-3 +16 +-4 +14 +-4 +15 +-3 +12 +-5 +13 +-4 +14 +-6 +12 +-5 +13 +-5 +11 +-5 +13 +-6 +12 +-6 +13 +26 +0 +16 +-5 +14 +-7 +10 +-10 +10 +-9 +9 +-11 +9 +-9 +9 +-10 +9 +-8 +11 +-10 +10 +-8 +12 +-8 +10 +-9 +11 +-7 +11 +-9 +11 +-7 +-40 +-10 +-20 +5 +-8 +11 +-6 +14 +-3 +15 +-5 +13 +-3 +15 +-3 +13 +-4 +15 +-3 +14 +-5 +14 +-4 +13 +-6 +12 +-4 +13 +-7 +11 +-5 +13 +-5 +11 +-7 +12 +-6 +11 +-8 +11 +-6 +10 +-8 +10 +-6 +12 +-8 +10 +-8 +12 +-7 +9 +-8 +11 +-7 +11 +-8 +11 +-6 +11 +-7 +11 +-6 +12 +23 +0 +16 +-4 +13 +-9 +9 +-9 +10 +-10 +8 +-10 +10 +-10 +9 +-10 +11 +-8 +10 +-9 +10 +-7 +11 +-9 +10 +-8 +11 +-8 +9 +-9 +11 +-8 +-41 +-11 +-19 +5 +-10 +10 +-6 +15 +-3 +14 +-4 +15 +-2 +15 +-5 +13 +-3 +14 +-4 +12 +-4 +14 +-5 +12 +-6 +14 +-5 +11 +-6 +12 +-5 +13 +24 +1 +18 +-3 +14 +-8 +11 +-8 +10 +-10 +9 +-9 +10 +-10 +9 +-10 +11 +-9 +9 +-10 +10 +-8 +11 +-9 +10 +-7 +11 +-8 +10 +-7 +12 +-8 +-41 +-10 +-18 +5 +-11 +10 +-5 +14 +-4 +13 +-4 +15 +-3 +15 +-4 +15 +-3 +13 +-5 +13 +-4 +13 +-7 +11 +-6 +13 +-6 +11 +-7 +12 +-5 +12 +-7 +12 +-5 +12 +-7 +10 +-6 +12 +-7 +11 +-7 +13 +-6 +10 +-7 +11 +-6 +11 +-8 +11 +-6 +11 +-7 +10 +-6 +12 +-8 +10 +-7 +12 +-7 +9 +23 +1 +17 +-5 +11 +-8 +11 +-8 +10 +-10 +10 +-9 +9 +-10 +9 +-8 +10 +-11 +8 +-9 +11 +-9 +9 +-10 +11 +-9 +10 +-9 +11 +-7 +11 +-8 +-41 +-9 +-18 +4 +-11 +11 +-4 +14 +-5 +14 +-3 +15 +-3 +13 +-4 +15 +-4 +14 +-4 +15 +-4 +12 +-6 +13 +-4 +13 +-7 +11 +-5 +13 +-6 +11 +-6 +13 +-6 +11 +-7 +12 +-6 +10 +-8 +11 +-5 +12 +-7 +11 +-6 +12 +-6 +11 +-6 +12 +-6 +11 +-7 +12 +-6 +11 +-7 +11 +-6 +12 +-8 +10 +23 +1 +16 +-7 +11 +-7 +11 +-9 +9 +-9 +10 +-10 +9 +-10 +11 +-9 +9 +-10 +10 +-7 +11 +-10 +10 +-8 +11 +-9 +9 +-8 +11 +-9 +10 +-9 +-41 +-10 +-22 +2 +-11 +11 +-5 +12 +-5 +15 +-3 +15 +-4 +15 +-2 +14 +-4 +13 +-4 +14 +-6 +12 +-5 +14 +-5 +12 +-6 +13 +-4 +13 +-6 +12 +26 +1 +16 +-6 +13 +-7 +10 +-10 +10 +-8 +10 +-10 +9 +-9 +11 +-8 +10 +-9 +11 +-8 +10 +-9 +11 +-8 +10 +-9 +10 +-7 +11 +-9 +10 +-8 +-40 +-10 +-20 +4 +-9 +11 +-5 +13 +-3 +16 +-4 +14 +-3 +16 +-3 +13 +-5 +14 +-3 +14 +-6 +12 +-5 +13 +-5 +12 +-5 +14 +-6 +12 +-6 +13 +-5 +11 +-7 +12 +-5 +12 +-7 +11 +-6 +12 +-6 +11 +-6 +12 +-7 +11 +-7 +12 +-6 +10 +-8 +11 +-6 +12 +-8 +10 +-7 +11 +-7 +10 +-7 +12 +-7 +11 +-8 +12 +-6 +10 +-8 +10 +-6 +11 +-9 +9 +-7 +11 +-7 +9 +-8 +11 +-7 +10 +-8 +11 +-7 +10 +-8 +10 +-6 +11 +-8 +10 +-6 +12 +25 +0 +16 +-4 +13 +-8 +10 +-8 +10 +-10 +8 +-10 +10 +-9 +8 +-11 +9 +-8 +10 +-10 +10 +-8 +11 +-8 +10 +-8 +12 +-8 +11 +-9 +12 +-8 +-42 +-12 +-20 +5 +-10 +9 +-7 +14 +-3 +15 +-4 +15 +-2 +15 +-4 +14 +-3 +15 +-5 +12 +-5 +14 +-5 +11 +-7 +12 +-5 +12 +-7 +12 +-5 +12 +-6 +11 +-5 +13 +-7 +11 +-6 +13 +-6 +10 +-8 +11 +-6 +11 +-9 +10 +-7 +11 +-7 +10 +-7 +12 +-8 +10 +-8 +12 +-7 +10 +-8 +11 +-6 +12 +-8 +11 +-6 +12 +-7 +10 +-7 +11 +-8 +9 +-8 +11 +-7 +9 +-8 +11 +-6 +11 +-8 +10 +-6 +12 +-7 +10 +-6 +12 +-7 +11 +-8 +12 +-6 +10 +23 +0 +17 +-4 +11 +-8 +11 +-8 +10 +-10 +10 +-9 +9 +-10 +9 +-9 +11 +-10 +9 +-9 +11 +-8 +9 +-9 +11 +-7 +11 +-9 +10 +-7 +11 +-8 +-41 +-9 +-18 +4 +-10 +11 +-4 +15 +-4 +14 +-4 +15 +-3 +12 +-5 +14 +-4 +14 +-6 +13 +-4 +13 +-5 +13 +-4 +14 +-6 +12 +-6 +13 +-5 +11 +24 +1 +18 +-4 +12 +-7 +12 +-8 +10 +-10 +10 +-8 +9 +-10 +9 +-8 +10 +-11 +9 +-9 +11 +-8 +9 +-9 +11 +-8 +11 +-9 +12 +-6 +11 +-8 +-41 +-9 +-19 +3 +-11 +11 +-5 +14 +-5 +13 +-3 +15 +-3 +13 +-4 +15 +-4 +13 +-5 +14 +-4 +12 +-6 +13 +-4 +13 +-6 +12 +-5 +13 +-5 +11 +25 +2 +16 +-5 +12 +-7 +12 +-9 +10 +-9 +11 +-8 +9 +-10 +10 +-8 +10 +-10 +10 +-8 +10 +-9 +9 +-8 +11 +-9 +10 +-8 +12 +-7 +10 +-9 +-40 +-9 +-19 +3 +-10 +11 +-5 +13 +-5 +15 +-2 +14 +-4 +15 +-2 +15 +-5 +13 +-4 +15 +-4 +12 +-5 +13 +-5 +12 +-7 +12 +-6 +11 +-7 +11 +-5 +12 +-8 +10 +-7 +12 +-6 +10 +-8 +12 +-6 +11 +-8 +11 +-6 +11 +-7 +10 +-6 +11 +-8 +10 +-7 +12 +-6 +10 +-7 +12 +-6 +11 +-7 +12 +-5 +11 +-7 +11 +-6 +12 +-8 +10 +-7 +12 +-6 +10 +-8 +11 +-6 +11 +-9 +10 +-7 +10 +-8 +9 +-7 +11 +-8 +9 +-8 +11 +-7 +9 +-8 +10 +24 +0 +14 +-6 +13 +-8 +10 +-10 +11 +-8 +9 +-10 +9 +-8 +10 +-11 +9 +-9 +11 +-9 +9 +-9 +11 +-8 +11 +-9 +11 +-7 +11 +-8 +11 +-7 +-40 +-11 +-20 +5 +-8 +12 +-6 +13 +-4 +15 +-3 +13 +-4 +15 +-3 +14 +-4 +15 +-3 +13 +-5 +13 +-4 +14 +-6 +12 +-5 +14 +-5 +12 +-6 +13 +-5 +12 +-7 +12 +-5 +11 +-7 +11 +-6 +12 +-8 +9 +-8 +11 +-8 +9 +-8 +11 +-7 +11 +-8 +11 +-6 +11 +-7 +11 +-5 +12 +-8 +10 +-7 +12 +24 +-1 +15 +-5 +13 +-8 +10 +-9 +10 +-10 +9 +-10 +10 +-9 +8 +-10 +10 +-8 +10 +-10 +9 +-8 +11 +-8 +10 +-8 +12 +-8 +10 +-8 +12 +-7 +-41 +-11 +-19 +6 +-9 +10 +-6 +15 +-3 +15 +-4 +15 +-2 +14 +-4 +14 +-2 +15 +-5 +13 +-4 +14 +-5 +11 +-7 +12 +-6 +12 +-7 +12 +-5 +12 +24 +1 +18 +-3 +12 +-8 +11 +-7 +11 +-10 +9 +-8 +10 +-9 +9 +-9 +11 +-9 +10 +-9 +11 +-8 +9 +-10 +10 +-7 +11 +-10 +9 +-9 +11 +-8 +9 +-8 +12 +-8 +11 +-8 +12 +-6 +11 +-8 +11 +-6 +12 +-8 +11 +-7 +12 +-7 +10 +-8 +11 +-8 +11 +-9 +11 +-7 +11 +-8 +11 +-7 +12 +-9 +10 +-7 +13 +-7 +10 +-8 +12 +-7 +12 +-8 +12 +-6 +11 +-7 +12 +-6 +13 +-8 +11 +-7 +13 +-7 +10 +-9 +12 +-7 +11 +-9 +11 +-7 +11 +-8 +-40 +-9 +-18 +4 +-10 +11 +-4 +14 +-5 +14 +-2 +16 +-3 +14 +-3 +15 +-4 +13 +-4 +14 +-4 +12 +-6 +12 +-5 +12 +-7 +11 +-6 +12 +-6 +10 +24 +2 +16 +-5 +12 +-6 +12 +-9 +10 +-9 +11 +-8 +9 +-10 +10 +-8 +11 +-9 +11 +-7 +11 +-8 +10 +-8 +11 +-9 +10 +-9 +12 +-7 +10 +-9 +-40 +-9 +-19 +3 +-10 +11 +-5 +13 +-5 +14 +-3 +14 +-4 +13 +-3 +14 +-6 +12 +-5 +14 +-5 +11 +-6 +13 +-5 +12 +-6 +13 +-4 +13 +-5 +12 +26 +2 +16 +-6 +12 +-6 +11 +-10 +9 +-8 +11 +-9 +9 +-9 +11 +-9 +10 +-9 +11 +-8 +10 +-9 +10 +-7 +11 +-9 +10 +-8 +12 +-8 +10 +-9 +12 +-8 +11 +-9 +11 +-7 +10 +-8 +11 +-6 +12 +-8 +11 +-7 +13 +-6 +11 +-8 +12 +-7 +11 +-9 +11 +-7 +11 +-8 +11 +-7 +12 +-8 +11 +-8 +-39 +-9 +-20 +4 +-9 +12 +-5 +13 +-4 +15 +-3 +15 +-4 +15 +-2 +14 +-4 +13 +-3 +14 +-6 +12 +-5 +13 +-5 +11 +-6 +13 +-5 +12 +-6 +13 +-5 +11 +-7 +11 +-6 +12 +-8 +10 +-7 +12 +-6 +10 +-7 +12 +-6 +11 +-7 +12 +-5 +11 +-7 +11 +-6 +12 +-8 +10 +-7 +12 +-6 +10 +-7 +12 +-5 +12 +-7 +11 +-5 +11 +-7 +10 +-6 +12 +-8 +10 +-7 +12 +-6 +10 +-7 +12 +-6 +12 +-8 +11 +-6 +11 +-7 +10 +-7 +11 +-8 +9 +-8 +11 +24 +-2 +14 +-5 +12 +-8 +9 +-9 +10 +-9 +9 +-11 +10 +-9 +9 +-10 +10 +-7 +11 +-9 +10 +-8 +11 +-8 +10 +-8 +11 +-8 +10 +-9 +11 +-8 +-42 +-12 +-21 +5 +-10 +9 +-7 +13 +-3 +15 +-4 +14 +-3 +15 +-4 +13 +-4 +14 +-5 +13 +-5 +14 +-4 +12 +-6 +12 +-4 +13 +-7 +11 +-6 +12 +-6 +10 +-6 +12 +-6 +11 +-7 +12 +-5 +10 +-8 +11 +-6 +11 +-8 +10 +-7 +12 +-7 +10 +-7 +12 +-7 +11 +-8 +12 +-6 +10 +-8 +11 +-6 +11 +-8 +10 +-7 +11 +-7 +9 +-8 +12 +-7 +11 +-8 +12 +-5 +11 +-7 +11 +-5 +12 +-8 +10 +-7 +12 +-7 +9 +-8 +11 +-7 +10 +-8 +11 +-6 +10 +-7 +10 +-6 +12 +-8 +10 +-7 +12 +-7 +10 +-8 +11 +-7 +10 +-8 +11 +-6 +10 +-7 +10 +-7 +11 +-8 +10 +-8 +12 +-7 +9 +-8 +11 +-6 +11 +-8 +10 +-6 +11 +-7 +10 +-6 +12 +-7 +10 +-7 +12 +-6 +10 +-8 +11 +-5 +11 +-8 +10 +-7 +11 +-8 +9 +-7 +11 +-7 +10 +-8 +12 +-6 +10 +-8 +11 +-6 +11 +-8 +10 +-6 +12 +-7 +10 +-7 +12 +-7 +11 +-7 +12 +-6 +10 +-8 +10 +-6 +11 +-9 +10 +-7 +11 +-7 +10 +-6 +12 +-7 +11 +24 +2 +17 +-6 +12 +-8 +11 +-9 +8 +-11 +10 +-9 +9 +-10 +10 +-8 +9 +-10 +9 +-8 +11 +-10 +9 +-8 +12 +-7 +9 +-9 +11 +-7 +11 +-9 +10 +-7 +11 +-8 +10 +-7 +12 +-8 +11 +-8 +12 +-7 +10 +-9 +11 +-7 +11 +-9 +10 +-8 +11 +-8 +10 +-8 +12 +-8 +11 +-8 +12 +-7 +10 +-8 +11 +-6 +12 +-9 +10 +-7 +11 +-8 +9 +-8 +11 +-8 +11 +-8 +12 +-6 +11 +-8 +12 +-6 +13 +-8 +11 +-7 +13 +-7 +10 +-8 +12 +-7 +11 +-8 +-40 +-9 +-19 +4 +-10 +12 +-5 +12 +-5 +15 +-2 +15 +-4 +14 +-3 +15 +-3 +13 +-3 +15 +-5 +12 +-5 +14 +-4 +11 +-7 +12 +-5 +12 +-8 +11 +-6 +12 +-6 +11 +-6 +13 +-6 +11 +-7 +12 +-6 +10 +-8 +10 +-6 +12 +-8 +10 +-6 +12 +-7 +10 +-7 +11 +-7 +10 +-7 +12 +-6 +10 +-7 +11 +-6 +11 +-8 +10 +-7 +12 +-7 +9 +-8 +11 +-7 +10 +-8 +11 +-6 +10 +-8 +10 +-6 +11 +-8 +10 +-7 +12 +-6 +10 +-7 +12 +-6 +11 +-8 +11 +-6 +10 +-8 +10 +-6 +11 +-8 +9 +-8 +11 +-7 +9 +-9 +10 +-7 +10 +-9 +10 +-7 +10 +-8 +10 +-6 +12 +-7 +10 +-7 +12 +-6 +10 +-8 +11 +-6 +11 +-8 +10 +-6 +11 +-8 +10 +-7 +11 +-8 +10 +-7 +12 +-6 +10 +-8 +11 +-6 +11 +-8 +10 +-7 +11 +-7 +10 +-6 +12 +-7 +10 +-7 +12 +-6 +9 +-8 +11 +-6 +11 +-8 +10 +-7 +11 +-7 +10 +-7 +11 +-8 +10 +-7 +12 +-6 +10 +-8 +11 +-6 +11 +-8 +10 +-6 +11 +-7 +10 +-7 +11 +23 +-1 +15 +-5 +12 +-9 +9 +-9 +11 +-9 +8 +-10 +11 +-8 +10 +-10 +10 +-8 +10 +-9 +9 +-8 +11 +-9 +10 +-8 +12 +-7 +10 +-9 +11 +-7 +11 +-9 +11 +-7 +10 +-8 +10 +-7 +12 +-8 +11 +-8 +12 +-7 +10 +-9 +11 +-7 +11 +-9 +11 +-7 +11 +-8 +11 +-6 +13 +-8 +11 +-7 +13 +-6 +-41 +-10 +-19 +5 +-9 +10 +-6 +14 +-4 +14 +-4 +16 +-2 +14 +-4 +14 +-3 +14 +-6 +12 +-5 +13 +-5 +11 +-6 +13 +-6 +12 +-7 +12 +-5 +11 +23 +1 +18 +-4 +11 +-8 +11 +-7 +11 +-10 +9 +-8 +11 +-8 +10 +-8 +12 +-8 +11 +-8 +12 +-7 +10 +-9 +11 +-7 +11 +-9 +10 +-8 +11 +-8 +-42 +-10 +-19 +3 +-10 +10 +-4 +14 +-4 +14 +-3 +16 +-3 +13 +-4 +15 +-3 +14 +-5 +13 +-4 +12 +-6 +11 +-5 +12 +-7 +11 +-6 +13 +-5 +11 +-7 +12 +-5 +12 +-7 +11 +-5 +11 +-6 +11 +-5 +12 +-7 +11 +-6 +12 +-6 +10 +-8 +11 +-6 +11 +-8 +10 +-7 +10 +-8 +10 +-6 +11 +-8 +9 +22 +1 +16 +-7 +10 +-8 +11 +-9 +8 +-10 +10 +-9 +9 +-10 +11 +-7 +10 +-9 +10 +-7 +12 +-9 +10 +-7 +12 +-7 +10 +-9 +11 +-8 +10 +-9 +-40 +-9 +-20 +4 +-10 +12 +-4 +12 +-4 +15 +-2 +15 +-4 +14 +-3 +14 +-4 +12 +-4 +14 +-5 +12 +-5 +14 +-4 +12 +-6 +13 +-4 +13 +-6 +11 +25 +2 +17 +-6 +12 +-7 +10 +-9 +9 +-9 +10 +-11 +8 +-10 +11 +-8 +9 +-9 +11 +-7 +11 +-9 +10 +-7 +11 +-8 +10 +-8 +11 +-9 +10 +-8 +-39 +-9 +-21 +3 +-10 +11 +-5 +12 +-4 +15 +-3 +14 +-4 +15 +-3 +14 +-4 +14 +-3 +15 +-5 +13 +-4 +14 +-5 +11 +-6 +12 +-5 +12 +-6 +12 +-5 +11 +-6 +11 +-5 +12 +-7 +10 +-7 +12 +-6 +10 +-7 +12 +-6 +11 +-8 +11 +-6 +10 +-8 +9 +-7 +11 +-8 +10 +-7 +11 +-7 +9 +-8 +11 +24 +0 +14 +-6 +13 +-8 +10 +-9 +11 +-8 +9 +-10 +9 +-8 +10 +-10 +9 +-9 +11 +-8 +9 +-9 +11 +-8 +10 +-9 +11 +-7 +10 +-8 +11 +-6 +-39 +-11 +-20 +5 +-9 +11 +-7 +12 +-3 +15 +-3 +13 +-3 +15 +-4 +13 +-4 +14 +-3 +12 +-5 +13 +-3 +14 +-6 +12 +-5 +13 +-5 +11 +-5 +13 +-5 +12 +-6 +12 +-5 +11 +-7 +11 +-6 +11 +-8 +10 +-7 +12 +-6 +10 +-7 +12 +-6 +11 +-7 +12 +-5 +11 +-7 +11 +-5 +12 +-8 +10 +-7 +11 +23 +-1 +15 +-5 +12 +-8 +9 +-9 +11 +-9 +9 +-10 +11 +-8 +9 +-10 +10 +-7 +11 +-9 +10 +-8 +11 +-9 +9 +-9 +11 +-9 +10 +-9 +11 +-7 +-41 +-11 +-19 +6 +-8 +10 +-6 +14 +-3 +14 +-5 +14 +-3 +14 +-4 +13 +-3 +15 +-4 +13 +-4 +14 +-4 +12 +-6 +12 +-5 +12 +-7 +11 +-6 +11 +23 +-1 +16 +-5 +11 +-9 +10 +-7 +11 +-9 +9 +-8 +11 +-8 +9 +-9 +11 +-8 +10 +-10 +10 +-8 +10 +-9 +10 +-7 +12 +-8 +10 +-7 +12 +-7 +-42 +-11 +-19 +4 +-10 +9 +-5 +14 +-4 +14 +-3 +16 +-1 +14 +-4 +15 +-2 +14 +-5 +12 +-4 +13 +-5 +11 +-6 +12 +-6 +11 +-6 +13 +-5 +11 +-7 +11 +-5 +12 +-8 +10 +-7 +11 +-7 +10 +-7 +12 +-6 +11 +-7 +12 +-5 +11 +-7 +11 +-5 +12 +-8 +10 +-7 +11 +-7 +9 +-8 +11 +-7 +10 +-7 +11 +-6 +10 +-7 +10 +-6 +12 +-8 +10 +-7 +12 +-6 +10 +-8 +11 +-6 +11 +-8 +11 +-6 +10 +-7 +10 +-6 +11 +-8 +10 +-7 +12 +-7 +9 +22 +1 +16 +-5 +11 +-7 +11 +-9 +9 +-9 +10 +-8 +8 +-10 +9 +-8 +10 +-11 +8 +-9 +11 +-9 +9 +-8 +11 +-9 +10 +-9 +11 +-7 +10 +-9 +-40 +-9 +-18 +3 +-10 +11 +-4 +14 +-5 +14 +-3 +15 +-3 +14 +-2 +16 +-4 +14 +-4 +15 +-3 +12 +-6 +13 +-5 +12 +-7 +11 +-6 +11 +-7 +10 +-6 +12 +-6 +11 +-6 +13 +-5 +10 +-8 +11 +-6 +11 +-8 +10 +-7 +11 +-7 +9 +-7 +11 +-8 +10 +-7 +12 +-6 +10 +-7 +11 +-5 +12 +-7 +11 +-6 +12 +-6 +10 +-6 +12 +-7 +10 +-8 +11 +-6 +10 +-8 +10 +-6 +11 +-8 +10 +-7 +11 +-7 +9 +-7 +11 +-7 +10 +-8 +11 +-6 +10 +-7 +11 +25 +1 +15 +-6 +12 +-7 +10 +-10 +9 +-9 +9 +-10 +9 +-9 +10 +-9 +9 +-9 +11 +-7 +9 +-9 +10 +-7 +11 +-9 +10 +-8 +11 +-8 +10 +-8 +-40 +-11 +-20 +4 +-8 +11 +-6 +12 +-4 +15 +-3 +13 +-4 +15 +-2 +15 +-4 +14 +-3 +14 +-4 +13 +-3 +14 +-6 +11 +-6 +13 +-5 +10 +-7 +12 +25 +2 +15 +-4 +14 +-7 +11 +-9 +11 +-8 +9 +-9 +9 +-8 +11 +-9 +9 +-8 +11 +-8 +9 +-9 +11 +-8 +10 +-9 +11 +-7 +10 +-9 +10 +-7 +-40 +-11 +-20 +4 +-9 +11 +-6 +13 +-3 +15 +-3 +14 +-3 +16 +-3 +14 +-4 +14 +-3 +12 +-6 +12 +-4 +12 +-7 +11 +-5 +13 +-5 +11 +-5 +13 +24 +1 +16 +-4 +13 +-8 +10 +-9 +11 +-8 +9 +-10 +10 +-8 +11 +-9 +10 +-7 +11 +-8 +10 +-7 +12 +-8 +10 +-9 +11 +-8 +9 +-9 +10 +-7 +-40 +-11 +-20 +5 +-8 +11 +-5 +14 +-2 +15 +-3 +14 +-2 +16 +-4 +13 +-3 +15 +-4 +12 +-6 +13 +-4 +12 +-6 +12 +-5 +12 +-6 +11 +-5 +13 +-6 +11 +-6 +13 +-5 +10 +-7 +11 +-6 +11 +-8 +10 +-6 +10 +-7 +10 +-7 +11 +-8 +10 +-7 +12 +-6 +9 +-8 +11 +-6 +11 +-8 +10 +-6 +11 +-7 +9 +-7 +11 +-8 +9 +-8 +11 +-6 +10 +-8 +11 +-5 +11 +-8 +10 +-6 +11 +-7 +9 +-7 +11 +-7 +10 +-7 +12 +-6 +10 +-8 +10 +-6 +11 +22 +-1 +16 +-5 +12 +-9 +10 +-8 +10 +-9 +9 +-8 +11 +-9 +10 +-8 +11 +-7 +9 +-9 +11 +-7 +11 +-9 +10 +-8 +10 +-9 +9 +-8 +11 +-9 +-41 +-10 +-18 +5 +-10 +10 +-5 +15 +-3 +13 +-4 +15 +-3 +14 +-5 +14 +-3 +13 +-5 +13 +-3 +14 +-5 +12 +-4 +14 +-4 +11 +-6 +12 +-5 +12 +-7 +11 +-6 +11 +-7 +10 +-6 +12 +-7 +10 +-6 +12 +-5 +10 +-8 +11 +-6 +11 +-8 +11 +-5 +12 +-6 +11 +-5 +12 +-6 +11 +-7 +12 +-5 +10 +23 +1 +17 +-4 +11 +-8 +11 +-7 +10 +-10 +10 +-8 +9 +-10 +9 +-8 +11 +-9 +9 +-8 +11 +-8 +9 +-9 +10 +-8 +10 +-10 +10 +-8 +9 +-9 +-42 +-11 +-20 +2 +-11 +10 +-5 +13 +-5 +13 +-3 +15 +-3 +13 +-4 +15 +-4 +13 +-5 +14 +-4 +12 +-5 +13 +-4 +13 +-6 +11 +-5 +12 +-6 +10 +24 +2 +16 +-5 +11 +-7 +11 +-9 +9 +-9 +11 +-8 +9 +-9 +10 +-7 +11 +-9 +10 +-7 +11 +-8 +10 +-7 +11 +-8 +10 +-8 +12 +-7 +10 +-9 +11 +-6 +11 +-9 +11 +-7 +12 +-7 +10 +-7 +12 +-8 +10 +-8 +12 +-7 +10 +-9 +11 +-7 +11 +-9 +9 +-8 +11 +-8 +10 +-7 +12 +-8 +11 +-8 +12 +-6 +11 +-8 +11 +-6 +12 +-9 +10 +-7 +11 +-8 +9 +-8 +11 +-8 +10 +-8 +12 +-7 +10 +-8 +11 +-6 +12 +-8 +11 +-7 +12 +-7 +10 +-7 +-39 +-10 +-19 +4 +-8 +12 +-6 +13 +-3 +16 +-2 +14 +-3 +15 +-2 +15 +-5 +13 +-3 +13 +-5 +12 +-5 +13 +-6 +11 +-6 +13 +-5 +11 +-6 +12 +26 +2 +15 +-6 +12 +-7 +10 +-10 +10 +-8 +9 +-9 +9 +-7 +11 +-9 +10 +-8 +12 +-7 +9 +-9 +11 +-7 +11 +-9 +10 +-8 +10 +-9 +10 +-7 +-39 +-11 +-20 +5 +-8 +12 +-6 +13 +-3 +15 +-3 +14 +-3 +15 +-4 +13 +-5 +14 +-3 +12 +-5 +12 +-4 +13 +-7 +11 +-6 +12 +-6 +10 +-7 +12 +24 +1 +15 +-4 +14 +-7 +11 +-8 +12 +-7 +9 +-9 +11 +-7 +11 +-9 +10 +-8 +10 +-9 +9 +-9 +11 +-9 +10 +-9 +11 +-7 +9 +-9 +11 +-7 +11 +-9 +10 +-7 +11 +-7 +10 +-7 +12 +-8 +11 +-8 +12 +-7 +10 +-9 +10 +-7 +11 +-9 +10 +-7 +12 +-7 +10 +-7 +12 +-7 +11 +-8 +12 +-6 +-40 +-10 +-19 +5 +-9 +10 +-6 +14 +-3 +14 +-5 +13 +-3 +14 +-4 +12 +-4 +14 +-5 +13 +-4 +15 +-3 +12 +-5 +13 +-4 +13 +-6 +12 +-4 +13 +-5 +11 +-5 +12 +-6 +11 +-7 +12 +-6 +10 +-7 +11 +-5 +11 +-7 +11 +-5 +12 +-5 +11 +-6 +12 +-6 +11 +-7 +12 +-5 +10 +-7 +11 +-6 +11 +-8 +10 +-6 +12 +-6 +10 +-7 +11 +-7 +10 +-8 +11 +-6 +9 +-8 +10 +-7 +10 +-9 +9 +-7 +11 +-7 +9 +-7 +11 +-7 +10 +-8 +11 +-6 +10 +23 +1 +18 +-4 +11 +-8 +11 +-7 +10 +-10 +9 +-8 +9 +-10 +8 +-9 +10 +-10 +9 +-9 +11 +-8 +9 +-9 +11 +-7 +11 +-9 +10 +-8 +10 +-9 +-42 +-11 +-19 +3 +-10 +10 +-4 +14 +-4 +13 +-3 +16 +-3 +13 +-4 +14 +-4 +13 +-5 +14 +-4 +12 +-5 +12 +-4 +13 +-7 +11 +-6 +12 +-5 +10 +-7 +12 +-5 +12 +-7 +12 +-5 +12 +-6 +11 +-5 +12 +-7 +11 +-6 +12 +-5 +10 +-7 +12 +-5 +11 +-8 +10 +-6 +10 +-7 +10 +-6 +11 +-8 +10 +-7 +12 +-6 +10 +-8 +11 +-5 +11 +-8 +10 +-6 +11 +-7 +10 +-6 +11 +-7 +10 +-7 +11 +-6 +9 +-8 +10 +-6 +10 +-9 +9 +-7 +11 +-7 +9 +-7 +11 +-7 +10 +-7 +12 +-6 +10 +-8 +10 +-6 +11 +-8 +9 +-7 +11 +-7 +9 +-7 +11 +-7 +10 +-7 +12 +-6 +10 +-8 +11 +-6 +11 +-8 +9 +-7 +11 +-7 +9 +-7 +11 +-7 +10 +-7 +11 +-6 +10 +-8 +10 +-6 +11 +-8 +10 +-6 +11 +-7 +9 +-7 +11 +-7 +10 +-8 +11 +-6 +10 +-8 +10 +-6 +11 +-8 +10 +-6 +11 +-7 +10 +-7 +11 +-7 +11 +-7 +11 +-6 +10 +-7 +10 +-5 +11 +-8 +10 +-7 +11 +-7 +9 +-8 +11 +-7 +10 +-8 +11 +24 +0 +15 +-5 +13 +-6 +9 +-9 +10 +-8 +9 +-11 +8 +-9 +9 +-10 +8 +-9 +10 +-9 +9 +-9 +11 +-8 +9 +-9 +10 +-7 +11 +-9 +10 +-7 +10 +-9 +9 +-8 +11 +-9 +9 +-9 +11 +-7 +10 +-9 +11 +-6 +11 +-9 +11 +-6 +12 +-7 +10 +-7 +12 +-8 +10 +-9 +11 +-7 +9 +-9 +11 +-6 +12 +-8 +11 +-7 +12 +-7 +11 +-7 +12 +-7 +11 +-8 +11 +-7 +10 +-9 +10 +-7 +11 +-9 +10 +-7 +12 +-7 +11 +-7 +13 +-6 +11 +-7 +12 +-6 +-40 +-10 +-19 +5 +-9 +9 +-6 +13 +-3 +14 +-5 +13 +-3 +14 +-4 +13 +-3 +15 +-4 +13 +-4 +15 +-3 +12 +-5 +13 +-4 +13 +-6 +11 +-5 +12 +-6 +11 +-6 +12 +-6 +11 +-7 +11 +-6 +9 +-8 +10 +-6 +11 +-7 +10 +-5 +12 +-6 +10 +-6 +12 +-7 +10 +-8 +11 +-6 +9 +-8 +10 +-6 +10 +-9 +9 +-7 +11 +-7 +10 +-7 +12 +-6 +11 +-7 +12 +-6 +10 +-7 +10 +-6 +11 +-8 +10 +-6 +11 +-7 +9 +-7 +11 +-7 +10 +-7 +11 +-6 +10 +-7 +10 +-5 +11 +-8 +10 +-6 +12 +-6 +9 +-7 +11 +-7 +10 +-8 +11 +-6 +10 +-7 +10 +-5 +12 +-7 +10 +-6 +12 +-6 +9 +-8 +11 +-7 +10 +-8 +10 +-6 +10 +-8 +10 +-6 +11 +-8 +10 +-7 +12 +-6 +10 +-7 +11 +-6 +11 +-7 +11 +-6 +10 +-7 +10 +-6 +11 +-8 +9 +-7 +11 +-7 +9 +-8 +10 +-6 +10 +-8 +10 +-6 +11 +-7 +10 +-6 +12 +-7 +10 +-7 +12 +-6 +10 +-8 +11 +-6 +11 +-8 +10 +-6 +10 +-7 +9 +-6 +11 +-8 +10 +23 +1 +16 +-6 +11 +-7 +12 +-8 +9 +-9 +11 +-8 +10 +-10 +10 +-8 +9 +-9 +9 +-7 +11 +-9 +9 +-8 +11 +-8 +9 +-9 +11 +-8 +10 +-9 +11 +-6 +10 +-8 +11 +-6 +12 +-9 +10 +-8 +12 +-8 +9 +-9 +11 +-7 +11 +-9 +11 +-7 +10 +-9 +10 +-7 +11 +-9 +10 +-8 +12 +-7 +10 +-8 +-39 +-9 +-18 +4 +-8 +12 +-5 +13 +-4 +15 +-2 +13 +-4 +14 +-3 +14 +-5 +12 +-3 +14 +-4 +12 +-4 +14 +-5 +12 +-6 +13 +-5 +11 +-7 +11 +25 +1 +14 +-6 +13 +-6 +11 +-9 +10 +-7 +10 +-9 +9 +-8 +10 +-10 +9 +-9 +11 +-8 +9 +-9 +10 +-7 +11 +-9 +11 +-7 +11 +-7 +10 +-7 +-39 +-11 +-20 +3 +-8 +11 +-7 +12 +-3 +15 +-3 +13 +-4 +15 +-3 +14 +-5 +14 +-3 +13 +-5 +12 +-3 +13 +-6 +11 +-5 +13 +-5 +11 +-6 +13 +-5 +11 +-7 +11 +-6 +10 +-7 +10 +-6 +11 +-8 +10 +-6 +12 +-6 +10 +-7 +12 +-6 +11 +-7 +11 +-5 +11 +-7 +11 +-5 +12 +-8 +10 +-7 +11 +23 +-1 +14 +-5 +12 +-8 +9 +-9 +10 +-9 +9 +-10 +10 +-8 +9 +-9 +10 +-7 +11 +-9 +10 +-7 +12 +-7 +10 +-8 +12 +-7 +11 +-8 +12 +-6 +-40 +-11 +-19 +5 +-9 +9 +-7 +13 +-3 +14 +-4 +14 +-2 +15 +-3 +13 +-3 +15 +-4 +12 +-5 +13 +-4 +11 +-7 +11 +-5 +12 +-7 +11 +-5 +12 +24 +0 +17 +-3 +12 +-7 +10 +-7 +11 +-9 +9 +-8 +11 +-8 +9 +-9 +10 +-7 +10 +-9 +10 +-8 +10 +-9 +9 +-8 +11 +-9 +10 +-8 +12 +-6 +-41 +-11 +-18 +5 +-9 +9 +-5 +14 +-4 +14 +-4 +15 +-2 +13 +-4 +14 +-2 +15 +-5 +12 +-4 +14 +-4 +11 +-6 +13 +-5 +12 +-7 +12 +-5 +11 +-7 +11 +-5 +12 +-7 +10 +-6 +12 +-6 +9 +-8 +10 +-7 +10 +-9 +10 +-6 +10 +-7 +10 +-6 +12 +-7 +10 +-7 +12 +-6 +9 +-8 +11 +-6 +10 +22 +0 +16 +-5 +12 +-8 +11 +-8 +9 +-10 +9 +-8 +10 +-10 +9 +-8 +11 +-8 +9 +-9 +11 +-8 +10 +-8 +11 +-7 +11 +-8 +11 +-6 +12 +-8 +-40 +-9 +-17 +5 +-10 +10 +-4 +14 +-4 +13 +-3 +15 +-4 +13 +-4 +14 +-3 +12 +-5 +13 +-3 +13 +-6 +11 +-4 +13 +-5 +11 +-5 +12 +-6 +11 +-7 +12 +-5 +10 +-7 +11 +-5 +11 +-8 +10 +-6 +11 +-6 +10 +-7 +11 +-7 +10 +-8 +11 +-6 +10 +-8 +10 +-6 +11 +-8 +9 +-7 +11 +-7 +9 +22 +1 +16 +-5 +11 +-7 +11 +-9 +9 +-9 +11 +-8 +8 +-10 +10 +-7 +10 +-9 +10 +-7 +11 +-7 +10 +-7 +12 +-8 +10 +-8 +12 +-7 +9 +-9 +-41 +-10 +-19 +2 +-11 +10 +-5 +13 +-4 +14 +-2 +14 +-3 +14 +-2 +15 +-4 +12 +-4 +14 +-4 +11 +-6 +13 +-4 +12 +-6 +12 +-5 +11 +-6 +11 +25 +2 +16 +-5 +13 +-5 +12 +-9 +9 +-8 +10 +-9 +8 +-9 +10 +-9 +9 +-9 +10 +-8 +9 +-9 +10 +-7 +11 +-9 +10 +-7 +11 +-8 +9 +-8 +-39 +-10 +-19 +4 +-8 +12 +-6 +12 +-4 +15 +-3 +12 +-5 +13 +-3 +13 +-5 +13 +-3 +13 +-5 +12 +-4 +13 +-5 +12 +-5 +13 +-5 +11 +-7 +12 +-5 +12 +-7 +11 +-5 +12 +-6 +10 +-6 +12 +-6 +11 +-6 +12 +-5 +10 +-7 +12 +-5 +11 +-8 +10 +-7 +11 +-7 +9 +-7 +11 +-6 +10 +-8 +11 +-6 +9 +-8 +10 +-6 +10 +-9 +9 +-7 +10 +-7 +9 +-7 +11 +-7 +10 +-7 +11 +-5 +10 +-7 +11 +-5 +11 +-8 +10 +-7 +11 +-7 +8 +-9 +10 +22 +-1 +14 +-6 +12 +-8 +10 +-9 +10 +-8 +8 +-10 +9 +-8 +10 +-10 +9 +-7 +11 +-8 +10 +-7 +12 +-8 +11 +-8 +12 +-6 +10 +-8 +11 +-6 +-39 +-11 +-20 +5 +-8 +11 +-7 +13 +-3 +14 +-4 +14 +-2 +15 +-4 +13 +-4 +14 +-4 +11 +-6 +12 +-4 +12 +-7 +11 +-5 +12 +-6 +11 +-6 +12 +-6 +11 +-7 +12 +-6 +10 +-8 +10 +-6 +11 +-8 +10 +-6 +11 +-6 +10 +-6 +12 +-6 +11 +-7 +12 +-5 +10 +-7 +11 +-5 +12 +-7 +10 +-6 +12 +-6 +10 +-7 +11 +-7 +10 +-7 +11 +-6 +10 +-8 +10 +-6 +11 +-8 +10 +-6 +12 +-6 +10 +-7 +11 +-7 +10 +-8 +11 +-6 +10 +-8 +10 +-6 +11 +21 +-1 +15 +-4 +12 +-9 +10 +-8 +10 +-9 +9 +-8 +10 +-9 +9 +-10 +10 +-8 +8 +-10 +9 +-8 +10 +-10 +9 +-8 +11 +-8 +10 +-7 +12 +-7 +-40 +-10 +-18 +5 +-10 +10 +-5 +14 +-3 +13 +-4 +15 +-2 +14 +-4 +13 +-4 +13 +-5 +11 +-5 +13 +-6 +11 +-6 +13 +-5 +11 +-6 +12 +-4 +13 +24 +1 +17 +-3 +13 +-7 +11 +-7 +10 +-9 +9 +-8 +11 +-10 +9 +-9 +11 +-8 +9 +-9 +11 +-7 +10 +-9 +10 +-8 +10 +-9 +9 +-8 +11 +-9 +-41 +-11 +-18 +5 +-10 +10 +-5 +14 +-3 +13 +-4 +15 +-3 +14 +-4 +14 +-3 +13 +-4 +13 +-3 +14 +-6 +11 +-5 +13 +-5 +11 +-6 +13 +-5 +12 +23 +2 +17 +-4 +12 +-7 +11 +-8 +8 +-10 +8 +-9 +9 +-11 +8 +-8 +11 +-8 +9 +-8 +11 +-7 +10 +-9 +11 +-7 +9 +-9 +10 +-7 +11 +-8 +-41 +-9 +-18 +5 +-10 +10 +-4 +14 +-3 +13 +-3 +15 +-4 +13 +-4 +15 +-3 +13 +-5 +13 +-3 +14 +-5 +12 +-4 +14 +-5 +11 +-5 +13 +-5 +11 +-6 +12 +-5 +10 +-7 +11 +-5 +12 +-8 +10 +-6 +12 +-6 +9 +-7 +11 +-6 +10 +-7 +11 +-5 +10 +-7 +11 +-5 +12 +-7 +10 +-6 +11 +-7 +9 +-8 +11 +-7 +10 +-8 +10 +-6 +9 +-8 +9 +-7 +11 +-8 +9 +-7 +11 +-6 +9 +-8 +11 +-6 +11 +-8 +11 +-5 +11 +-6 +11 +-5 +12 +-6 +11 +24 +2 +16 +-6 +11 +-8 +11 +-8 +8 +-10 +10 +-9 +9 +-10 +10 +-8 +9 +-9 +10 +-7 +11 +-9 +10 +-8 +11 +-7 +9 +-9 +11 +-8 +10 +-9 +-40 +-9 +-20 +3 +-10 +11 +-5 +12 +-5 +14 +-3 +14 +-5 +13 +-3 +14 +-4 +12 +-4 +14 +-5 +12 +-6 +13 +-5 +11 +-7 +11 +-5 +12 +-7 +11 +-5 +12 +-5 +11 +-5 +13 +-5 +11 +-7 +12 +-6 +10 +-8 +10 +-5 +12 +-7 +10 +-6 +12 +-6 +10 +-7 +11 +-6 +11 +-7 +11 +-6 +10 +-7 +10 +24 +1 +14 +-6 +12 +-7 +10 +-9 +10 +-8 +10 +-9 +9 +-8 +10 +-10 +9 +-9 +11 +-8 +9 +-9 +10 +-8 +10 +-10 +10 +-7 +11 +-8 +10 +-7 +-39 +-11 +-20 +4 +-8 +11 +-6 +12 +-3 +15 +-3 +13 +-4 +14 +-3 +13 +-5 +14 +-3 +13 +-5 +12 +-4 +13 +-6 +11 +-5 +13 +-5 +10 +-6 +12 +24 +1 +15 +-4 +13 +-7 +10 +-8 +11 +-7 +9 +-9 +10 +-8 +10 +-10 +9 +-8 +11 +-8 +9 +-8 +11 +-8 +10 +-8 +11 +-7 +10 +-8 +11 +-6 +12 +-8 +10 +-7 +12 +-7 +9 +-8 +11 +-8 +10 +-9 +11 +-7 +10 +-8 +11 +-6 +12 +-8 +10 +-7 +12 +-6 +10 +-8 +12 +-7 +11 +-9 +11 +-7 +11 +-8 +10 +-6 +12 +-8 +10 +-7 +12 +-7 +10 +-8 +12 +-7 +11 +-8 +11 +-6 +11 +-7 +11 +-6 +12 +-8 +10 +-7 +12 +-7 +10 +-8 +11 +-7 +-40 +-12 +-20 +4 +-10 +10 +-6 +14 +-3 +13 +-4 +14 +-1 +15 +-4 +14 +-2 +15 +-3 +13 +-4 +14 +-4 +12 +-6 +12 +-5 +11 +-7 +11 +-5 +12 +22 +0 +17 +-3 +13 +-8 +11 +-7 +10 +-9 +9 +-8 +11 +-9 +9 +-9 +11 +-7 +9 +-9 +11 +-7 +11 +-9 +10 +-7 +11 +-7 +10 +-7 +11 +-8 +-41 +-11 +-19 +4 +-11 +9 +-5 +14 +-3 +13 +-4 +15 +-3 +14 +-4 +14 +-3 +13 +-5 +12 +-4 +13 +-6 +11 +-5 +13 +-5 +10 +-7 +12 +-5 +12 +23 +2 +17 +-4 +12 +-7 +12 +-7 +9 +-9 +10 +-7 +11 +-9 +9 +-8 +11 +-8 +9 +-9 +11 +-8 +10 +-9 +11 +-7 +10 +-8 +10 +-6 +12 +-8 +10 +-7 +12 +-7 +10 +-9 +11 +-7 +10 +-9 +11 +-7 +10 +-8 +10 +-7 +11 +-8 +10 +-7 +12 +-6 +10 +-8 +11 +-6 +11 +-8 +11 +-6 +11 +-7 +-40 +-9 +-18 +4 +-10 +11 +-4 +14 +-4 +13 +-2 +15 +-3 +13 +-3 +14 +-4 +13 +-5 +13 +-4 +11 +-6 +12 +-4 +13 +-6 +11 +-5 +12 +-5 +10 +-6 +12 +-6 +11 +-7 +12 +-5 +11 +-6 +11 +-5 +12 +-7 +10 +-7 +11 +-6 +9 +-7 +11 +-6 +11 +-8 +11 +-6 +10 +-7 +10 +-6 +11 +-8 +10 +-7 +11 +-6 +9 +-7 +11 +-6 +11 +-7 +11 +-5 +11 +-7 +10 +-5 +12 +-7 +10 +-7 +11 +-6 +9 +-8 +10 +-6 +10 +-8 +9 +-6 +11 +-7 +10 +24 +2 +15 +-5 +12 +-6 +11 +-9 +9 +-9 +10 +-8 +8 +-10 +10 +-8 +9 +-10 +10 +-7 +10 +-8 +10 +-7 +11 +-9 +10 +-8 +11 +-7 +9 +-9 +-40 +-10 +-19 +3 +-10 +11 +-5 +13 +-4 +15 +-2 +14 +-4 +14 +-2 +14 +-5 +13 +-4 +14 +-4 +11 +-5 +13 +-5 +12 +-6 +13 +-4 +11 +-6 +11 +-5 +12 +-7 +10 +-6 +12 +-6 +10 +-6 +12 +-6 +11 +-7 +11 +-6 +10 +-7 +10 +-6 +11 +-8 +9 +-7 +11 +-7 +9 +-8 +11 +-6 +11 +-8 +11 +-5 +11 +-7 +10 +-5 +12 +-7 +10 +-7 +12 +-6 +9 +-8 +11 +-6 +10 +-8 +10 +-6 +10 +-7 +10 +-6 +12 +-7 +10 +-7 +12 +-6 +9 +-8 +10 +-7 +10 +-8 +10 +-6 +10 +-7 +10 +-6 +11 +-8 +9 +-7 +12 +-6 +10 +-7 +11 +-5 +11 +-7 +11 +-5 +12 +-6 +10 +-6 +12 +-7 +10 +-7 +12 +-6 +9 +-8 +10 +-6 +11 +-8 +9 +-6 +11 +-7 +9 +-7 +11 +-8 +9 +-8 +11 +-6 +9 +-8 +10 +-6 +11 +-8 +10 +-6 +12 +-6 +10 +-6 +12 +-7 +10 +-7 +11 +-6 +9 +-8 +10 +-6 +11 +-8 +9 +-7 +11 +-7 +9 +-7 +11 +-7 +10 +-8 +11 +-6 +10 +-8 +10 +-5 +11 +-8 +10 +-6 +12 +23 +-1 +15 +-5 +11 +-8 +9 +-8 +11 +-9 +9 +-9 +10 +-9 +8 +-10 +9 +-8 +10 +-10 +9 +-8 +11 +-8 +9 +-8 +11 +-8 +10 +-8 +11 +-7 +10 +-8 +11 +-6 +11 +-9 +10 +-7 +11 +-7 +10 +-7 +12 +-7 +11 +-8 +12 +-6 +10 +-8 +10 +-6 +11 +-9 +10 +-7 +12 +-7 +10 +-7 +12 +-6 +11 +-8 +12 +-6 +11 +-8 +11 +-6 +12 +-8 +10 +-7 +12 +-7 +10 +-8 +12 +-6 +11 +-8 +11 +-6 +11 +-7 +11 +-6 +12 +-8 +10 +-7 +12 +-7 +-41 +-11 +-18 +5 +-9 +9 +-5 +14 +-3 +14 +-3 +15 +-2 +13 +-4 +13 +-3 +13 +-6 +11 +-5 +13 +-5 +10 +-6 +12 +-5 +12 +-6 +12 +-5 +11 +-6 +12 +-4 +13 +-6 +11 +-5 +13 +-5 +10 +-7 +12 +-6 +11 +-7 +11 +-6 +10 +-7 +10 +-5 +11 +-8 +10 +-7 +12 +-6 +10 +-7 +11 +-5 +11 +-7 +11 +-5 +10 +-7 +10 +-6 +11 +-8 +9 +-7 +11 +-7 +9 +-8 +11 +-6 +10 +-8 +10 +-6 +10 +-8 +9 +-6 +11 +-8 +9 +-7 +11 +-6 +9 +-8 +10 +-6 +10 +-8 +10 +-6 +10 +-7 +9 +-6 +11 +-7 +10 +-6 +12 +-6 +9 +-7 +11 +-6 +11 +-7 +11 +-6 +11 +-7 +10 +-6 +11 +-7 +10 +-7 +12 +-6 +10 +-7 +11 +-5 +11 +-7 +11 +-6 +11 +-7 +10 +-6 +11 +-7 +10 +-7 +11 +-6 +9 +-8 +11 +-5 +11 +-7 +11 +-5 +11 +-6 +10 +-6 +11 +-7 +10 +-7 +11 +-6 +9 +-8 +10 +-6 +11 +-8 +10 +-6 +11 +-7 +10 +-7 +11 +-7 +10 +-8 +11 +-6 +9 +-8 +10 +-6 +11 +-8 +10 +24 +1 +16 +-6 +12 +-7 +10 +-9 +9 +-8 +10 +-10 +9 +-9 +10 +-8 +8 +-9 +10 +-8 +10 +-9 +10 +-7 +10 +-9 +10 +-7 +11 +-9 +9 +-8 +11 +-7 +9 +-8 +11 +-7 +11 +-8 +11 +-6 +11 +-8 +10 +-7 +11 +-9 +9 +-8 +11 +-7 +9 +-8 +11 +-7 +11 +-8 +11 +-6 +11 +-8 +10 +-6 +-39 +-11 +-20 +4 +-8 +11 +-6 +12 +-3 +15 +-3 +13 +-3 +15 +-3 +14 +-4 +14 +-3 +12 +-5 +12 +-4 +13 +-6 +11 +-5 +13 +-5 +10 +-6 +12 +24 +1 +15 +-4 +13 +-7 +10 +-8 +11 +-7 +9 +-9 +10 +-7 +11 +-9 +10 +-7 +11 +-8 +10 +-8 +11 +-9 +9 +-9 +11 +-8 +9 +-9 +10 +-7 +-40 +-11 +-20 +5 +-8 +11 +-5 +14 +-2 +14 +-4 +13 +-3 +14 +-5 +12 +-4 +14 +-4 +12 +-5 +13 +-4 +13 +-5 +12 +-4 +12 +-5 +11 +-4 +12 +-6 +11 +-6 +13 +-5 +10 +-7 +12 +-5 +11 +-7 +10 +-6 +11 +-7 +9 +-6 +11 +-7 +10 +-7 +12 +-6 +10 +-7 +11 +-5 +11 +-8 +10 +-6 +11 +22 +-1 +15 +-5 +11 +-8 +9 +-8 +10 +-10 +8 +-9 +10 +-9 +8 +-9 +10 +-8 +10 +-9 +11 +-7 +10 +-9 +10 +-7 +11 +-9 +9 +-8 +11 +-7 +-42 +-12 +-19 +4 +-10 +9 +-5 +14 +-3 +14 +-3 +15 +-2 +13 +-5 +13 +-3 +14 +-5 +12 +-4 +14 +-4 +12 +-5 +13 +-5 +11 +-6 +12 +-5 +10 +22 +0 +17 +-4 +11 +-8 +11 +-7 +11 +-9 +10 +-7 +11 +-8 +9 +-8 +11 +-9 +9 +-9 +11 +-7 +9 +-9 +10 +-7 +11 +-9 +10 +-7 +11 +-7 +-40 +-10 +-18 +3 +-10 +9 +-5 +13 +-5 +13 +-3 +16 +-2 +13 +-4 +15 +-3 +14 +-5 +13 +-3 +12 +-5 +12 +-4 +13 +-6 +11 +-5 +13 +-5 +11 +-6 +12 +-5 +12 +-7 +11 +-5 +11 +-6 +10 +-5 +11 +-7 +10 +-7 +11 +-6 +9 +-8 +10 +-6 +10 +-8 +9 +-7 +10 +-7 +9 +-7 +11 +-7 +10 +22 +1 +16 +-6 +11 +-7 +11 +-8 +8 +-10 +10 +-8 +9 +-10 +10 +-7 +10 +-9 +9 +-7 +11 +-9 +9 +-8 +11 +-8 +9 +-9 +11 +-7 +10 +-9 +-40 +-9 +-19 +4 +-9 +12 +-4 +13 +-4 +14 +-1 +15 +-4 +13 +-3 +15 +-3 +12 +-4 +14 +-4 +12 +-5 +13 +-4 +12 +-6 +12 +-4 +13 +-6 +11 +-5 +12 +-5 +10 +-7 +11 +-6 +10 +-8 +10 +-6 +10 +-7 +10 +-5 +12 +-7 +10 +-6 +12 +-6 +10 +-7 +11 +-6 +10 +-8 +10 +-6 +10 +-7 +9 +23 +1 +14 +-6 +12 +-6 +11 +-9 +9 +-8 +10 +-8 +9 +-9 +10 +-8 +9 +-9 +10 +-8 +8 +-10 +9 +-7 +11 +-9 +9 +-8 +11 +-8 +9 +-8 +-39 +-10 +-19 +3 +-9 +11 +-5 +12 +-4 +15 +-2 +13 +-4 +14 +-3 +14 +-5 +12 +-4 +13 +-5 +11 +-5 +13 +-6 +11 +-6 +12 +-5 +10 +-7 +11 +25 +2 +15 +-5 +13 +-6 +11 +-9 +10 +-8 +9 +-9 +9 +-8 +11 +-9 +9 +-8 +11 +-7 +9 +-9 +11 +-7 +11 +-9 +10 +-7 +11 +-7 +10 +-7 +-39 +-11 +-20 +3 +-8 +11 +-6 +12 +-3 +16 +-2 +14 +-3 +15 +-2 +14 +-4 +14 +-3 +13 +-5 +12 +-3 +14 +-5 +12 +-5 +14 +-4 +11 +-6 +12 +-4 +12 +-6 +11 +-5 +11 +-6 +10 +-5 +12 +-7 +10 +-7 +11 +-6 +9 +-8 +11 +-6 +11 +-8 +10 +-6 +11 +-7 +10 +-6 +11 +-7 +10 +-7 +11 +-6 +9 +-8 +10 +-6 +10 +-8 +9 +-6 +11 +-7 +10 +-6 +11 +-7 +10 +-7 +11 +-6 +9 +-8 +10 +-6 +11 +-8 +9 +-6 +11 +-7 +9 +-7 +11 +22 +-1 +14 +-5 +12 +-8 +9 +-9 +10 +-8 +8 +-10 +10 +-8 +10 +-10 +9 +-8 +9 +-9 +9 +-7 +11 +-9 +10 +-8 +12 +-7 +10 +-8 +11 +-7 +-40 +-11 +-19 +5 +-9 +10 +-6 +13 +-3 +14 +-4 +14 +-2 +15 +-4 +13 +-3 +14 +-4 +12 +-5 +13 +-4 +12 +-6 +12 +-4 +12 +-6 +11 +-4 +12 +-6 +10 +-6 +12 +-5 +10 +-7 +12 +-5 +11 +-7 +11 +-6 +10 +-7 +10 +-6 +11 +-8 +9 +-7 +11 +-6 +9 +-8 +11 +-6 +11 +-8 +11 +-5 +11 +-6 +10 +-5 +12 +-7 +10 +-7 +12 +-6 +10 +-7 +11 +-6 +11 +-8 +10 +-5 +11 +-7 +10 +-6 +11 +-8 +10 +-7 +11 +-6 +9 +-8 +10 +-6 +11 +21 +-1 +16 +-5 +11 +-8 +11 +-7 +9 +-9 +9 +-7 +10 +-10 +9 +-8 +11 +-8 +9 +-9 +11 +-7 +10 +-9 +10 +-7 +10 +-9 +9 +-7 +11 +-9 +-41 +-11 +-18 +4 +-11 +9 +-4 +14 +-3 +13 +-3 +15 +-3 +14 +-4 +14 +-3 +13 +-4 +13 +-3 +14 +-5 +12 +-4 +13 +-5 +11 +-6 +12 +-5 +11 +23 +2 +17 +-5 +12 +-7 +12 +-7 +9 +-9 +10 +-7 +10 +-9 +9 +-7 +10 +-8 +9 +-7 +11 +-8 +10 +-8 +12 +-7 +10 +-9 +10 +-7 +11 +-9 +-41 +-10 +-19 +3 +-10 +10 +-5 +12 +-4 +13 +-3 +14 +-4 +13 +-4 +15 +-3 +12 +-5 +13 +-4 +12 +-6 +11 +-5 +12 +-5 +11 +-4 +13 +-6 +11 +24 +2 +17 +-6 +11 +-7 +11 +-8 +8 +-9 +10 +-9 +9 +-9 +10 +-7 +10 +-9 +10 +-7 +11 +-9 +9 +-8 +11 +-8 +9 +-8 +11 +-7 +11 +-8 +-39 +-9 +-19 +4 +-9 +12 +-4 +12 +-4 +14 +-2 +15 +-4 +13 +-2 +15 +-3 +13 +-3 +14 +-4 +12 +-5 +13 +-4 +11 +-6 +11 +-5 +12 +-7 +11 +-5 +12 +-5 +10 +-6 +12 +-6 +11 +-6 +12 +-5 +10 +-7 +10 +-5 +11 +-7 +10 +-6 +11 +-6 +9 +-7 +11 +-6 +11 +-7 +11 +-5 +10 +-7 +10 +-5 +11 +-8 +10 +-6 +11 +-6 +9 +-7 +11 +-6 +11 +-7 +11 +-5 +10 +-7 +10 +-5 +11 +-8 +9 +-7 +11 +-7 +9 +-8 +10 +-7 +10 +-8 +10 +23 +0 +15 +-5 +13 +-6 +9 +-9 +10 +-8 +10 +-10 +8 +-8 +10 +-9 +8 +-9 +10 +-9 +9 +-10 +10 +-8 +9 +-9 +10 +-7 +11 +-9 +10 +-7 +-39 +-10 +-20 +4 +-8 +10 +-5 +13 +-2 +16 +-3 +14 +-3 +15 +-2 +13 +-4 +14 +-3 +14 +-5 +12 +-3 +13 +-4 +11 +-5 +12 +-6 +11 +-6 +12 +-5 +10 +-7 +11 +-5 +12 +-7 +10 +-5 +12 +-6 +10 +-6 +12 +-6 +11 +-7 +11 +-5 +10 +-7 +10 +-5 +11 +-8 +9 +-6 +11 +-7 +9 +-7 +11 +23 +0 +14 +-5 +12 +-8 +9 +-9 +10 +-8 +8 +-10 +9 +-8 +10 +-10 +9 +-8 +10 +-9 +9 +-7 +11 +-9 +10 +-8 +11 +-7 +9 +-9 +11 +-7 +-39 +-11 +-19 +5 +-9 +10 +-5 +14 +-3 +12 +-5 +13 +-3 +13 +-5 +12 +-4 +14 +-4 +12 +-5 +13 +-4 +12 +-6 +12 +-4 +12 +-6 +11 +-4 +12 +22 +0 +16 +-4 +12 +-8 +10 +-8 +10 +-9 +8 +-9 +10 +-9 +9 +-9 +11 +-7 +9 +-9 +10 +-7 +11 +-9 +10 +-7 +11 +-8 +9 +-7 +11 +-8 +10 +-8 +11 +-7 +9 +-9 +10 +-7 +11 +-9 +10 +-7 +12 +-7 +10 +-7 +12 +-7 +11 +-8 +12 +-6 +10 +-8 +11 +-6 +11 +-9 +10 +-7 +11 +-7 +9 +-7 +12 +-7 +11 +-7 +12 +-6 +11 +-7 +11 +-6 +12 +-8 +10 +-7 +12 +-7 +10 +-7 +11 +-7 +10 +-8 +11 +-6 +10 +-8 +11 +-6 +12 +-8 +-40 +-9 +-18 +5 +-10 +10 +-4 +13 +-3 +13 +-2 +15 +-3 +14 +-3 +15 +-2 +12 +-4 +14 +-3 +13 +-5 +12 +-4 +12 +-5 +11 +-5 +12 +-6 +11 +23 +2 +16 +-6 +11 +-7 +11 +-8 +9 +-9 +10 +-8 +10 +-9 +10 +-7 +10 +-8 +10 +-7 +11 +-9 +9 +-8 +11 +-7 +9 +-9 +11 +-7 +11 +-9 +-40 +-9 +-19 +3 +-10 +11 +-4 +12 +-4 +14 +-1 +15 +-4 +14 +-2 +15 +-3 +13 +-3 +14 +-4 +12 +-5 +13 +-4 +11 +-6 +11 +-4 +12 +-7 +10 +24 +2 +16 +-5 +12 +-6 +11 +-8 +10 +-7 +11 +-9 +9 +-8 +11 +-8 +9 +-9 +10 +-7 +10 +-9 +9 +-7 +11 +-8 +10 +-7 +12 +-8 +10 +-7 +12 +-6 +10 +-8 +11 +-6 +11 +-8 +10 +-7 +11 +-7 +9 +-7 +11 +-8 +10 +-8 +12 +-6 +10 +-8 +11 +-6 +11 +-8 +10 +-7 +11 +-7 +10 +-7 +-39 +-11 +-20 +3 +-9 +11 +-6 +11 +-4 +15 +-3 +12 +-4 +14 +-3 +14 +-4 +14 +-2 +14 +-4 +13 +-3 +13 +-6 +11 +-5 +13 +-5 +10 +-7 +11 +-5 +11 +-8 +10 +-6 +11 +-7 +9 +-6 +11 +-7 +10 +-7 +12 +-5 +10 +-7 +11 +-5 +11 +-7 +10 +-6 +11 +-7 +9 +-7 +11 +-7 +10 +-7 +11 +-5 +10 +-7 +11 +-5 +11 +-8 +10 +-6 +11 +-6 +10 +-6 +11 +-6 +10 +-7 +11 +-5 +10 +-7 +10 +-5 +11 +-7 +10 +-6 +11 +-6 +9 +-6 +11 +22 +0 +15 +-4 +12 +-8 +9 +-8 +11 +-8 +8 +-9 +10 +-8 +10 +-10 +9 +-8 +9 +-9 +8 +-8 +10 +-10 +9 +-9 +11 +-7 +9 +-8 +11 +-6 +-39 +-11 +-19 +4 +-9 +10 +-6 +13 +-3 +13 +-3 +14 +-1 +15 +-4 +13 +-3 +15 +-3 +12 +-4 +14 +-4 +12 +-5 +13 +-4 +12 +-6 +11 +-4 +12 +-6 +11 +-6 +12 +-5 +10 +-7 +11 +-6 +11 +-8 +10 +-6 +10 +-8 +9 +-6 +11 +-7 +10 +-6 +12 +-5 +10 +-7 +11 +-5 +11 +-7 +11 +-5 +11 +-7 +10 +-6 +11 +-7 +9 +-7 +11 +-6 +9 +-8 +10 +-6 +11 +-8 +10 +-6 +11 +-6 +10 +-6 +11 +-7 +10 +-7 +12 +-5 +10 +-7 +11 +-5 +11 +-8 +10 +-6 +10 +-7 +9 +-7 +10 +-8 +9 +-7 +11 +-5 +10 +-7 +10 +-5 +11 +-8 +9 +-6 +10 +-7 +9 +-7 +11 +-7 +9 +-7 +11 +-6 +9 +-7 +10 +-5 +11 +-8 +10 +-6 +11 +-7 +9 +-7 +11 +-7 +9 +-7 +11 +-6 +9 +-8 +10 +-6 +10 +-8 +9 +-7 +10 +-7 +9 +-6 +11 +-7 +10 +-7 +12 +-5 +10 +-7 +11 +-5 +11 +-7 +10 +-6 +11 +-6 +9 +-7 +11 +-7 +10 +-7 +11 +-6 +9 +-8 +10 +-6 +11 +-8 +9 +-7 +11 +-7 +9 +22 +1 +15 +-5 +11 +-6 +11 +-9 +9 +-9 +11 +-8 +8 +-9 +10 +-8 +10 +-9 +10 +-7 +10 +-8 +10 +-7 +11 +-9 +9 +-8 +11 +-7 +9 +-8 +11 +-6 +11 +-8 +11 +-6 +11 +-7 +10 +-6 +12 +-7 +11 +-7 +12 +-6 +10 +-8 +11 +-6 +11 +-8 +10 +-6 +11 +-8 +10 +-7 +12 +-8 +10 +-8 +12 +-6 +10 +-8 +11 +-6 +12 +-8 +10 +-6 +11 +-7 +10 +-6 +12 +-8 +10 +-8 +12 +-6 +10 +-8 +11 +-6 +12 +-8 +10 +-7 +11 +-7 +10 +-7 +-38 +-10 +-19 +4 +-8 +11 +-6 +12 +-3 +15 +-2 +13 +-4 +14 +-3 +14 +-4 +13 +-3 +12 +-5 +12 +-4 +13 +-6 +11 +-5 +13 +-5 +10 +-7 +11 +-5 +11 +-7 +11 +-5 +11 +-7 +10 +-5 +11 +-7 +10 +-6 +12 +-5 +10 +-7 +11 +-5 +11 +-7 +10 +-6 +11 +-7 +9 +-6 +11 +-8 +9 +-7 +11 +-6 +9 +-7 +11 +-5 +11 +-7 +10 +-5 +11 +-6 +10 +-6 +11 +-7 +10 +-7 +11 +-6 +9 +-8 +10 +-5 +11 +-8 +9 +-6 +11 +-7 +9 +-7 +11 +-6 +10 +-7 +12 +-5 +10 +-7 +11 +-5 +11 +-8 +10 +-6 +11 +-6 +10 +-6 +12 +-5 +11 +-7 +11 +-5 +10 +-8 +10 +-6 +11 +-8 +8 +-7 +11 +-7 +9 +-8 +10 +-6 +10 +-8 +10 +-6 +10 +-7 +10 +-5 +12 +-7 +10 +-6 +12 +-5 +10 +-7 +11 +-5 +11 +-7 +10 +-6 +10 +-7 +9 +-6 +11 +-8 +9 +-7 +11 +-6 +9 +-8 +11 +-5 +11 +-7 +11 +-5 +11 +-6 +10 +-6 +11 +-7 +10 +-6 +12 +-5 +9 +-7 +11 +-6 +11 +-8 +10 +-6 +11 +22 +-1 +15 +-5 +10 +-9 +9 +-8 +10 +-10 +8 +-9 +10 +-8 +8 +-9 +10 +-8 +10 +-9 +10 +-7 +9 +-9 +10 +-7 +11 +-9 +9 +-8 +12 +-7 +10 +-8 +11 +-7 +10 +-9 +10 +-7 +9 +-9 +9 +-8 +11 +-9 +9 +-8 +11 +-7 +9 +-8 +11 +-6 +11 +-8 +10 +-7 +11 +-8 +10 +-6 +12 +-8 +-40 +-10 +-17 +5 +-10 +10 +-4 +14 +-2 +13 +-3 +15 +-2 +14 +-4 +14 +-3 +12 +-5 +12 +-3 +14 +-5 +11 +-5 +13 +-4 +11 +-6 +12 +-5 +11 +22 +1 +16 +-5 +11 +-7 +11 +-7 +9 +-9 +10 +-7 +10 +-9 +9 +-7 +11 +-8 +9 +-8 +11 +-8 +9 +-8 +11 +-7 +9 +-8 +10 +-7 +11 +-9 +-41 +-10 +-18 +4 +-11 +9 +-5 +12 +-5 +12 +-3 +15 +-4 +13 +-4 +15 +-3 +12 +-5 +13 +-3 +13 +-6 +11 +-4 +12 +-5 +10 +-5 +12 +-6 +11 +-7 +12 +-5 +10 +-7 +11 +-4 +12 +-7 +10 +-5 +12 +-6 +9 +-7 +11 +-6 +10 +-7 +11 +-5 +10 +-7 +10 +-5 +11 +-7 +10 +-6 +12 +-5 +10 +22 +1 +16 +-5 +11 +-7 +11 +-8 +9 +-9 +11 +-7 +9 +-9 +10 +-7 +10 +-9 +9 +-8 +10 +-8 +9 +-7 +11 +-8 +10 +-8 +11 +-7 +9 +-9 +-40 +-9 +-19 +3 +-10 +11 +-4 +14 +-3 +15 +-1 +15 +-3 +14 +-2 +14 +-5 +12 +-5 +13 +-4 +11 +-6 +12 +-4 +12 +-6 +12 +-4 +12 +-5 +11 +24 +2 +15 +-5 +12 +-6 +11 +-9 +9 +-8 +10 +-8 +8 +-9 +10 +-8 +10 +-8 +11 +-7 +9 +-9 +9 +-7 +10 +-9 +9 +-8 +11 +-7 +9 +-8 +-39 +-9 +-18 +3 +-8 +11 +-5 +13 +-4 +15 +-2 +13 +-4 +14 +-2 +14 +-4 +12 +-3 +14 +-4 +12 +-4 +13 +-5 +11 +-6 +13 +-4 +10 +-7 +11 +-5 +12 +-7 +10 +-5 +12 +-6 +10 +-6 +11 +-6 +11 +-6 +12 +-5 +10 +-7 +10 +-5 +11 +-7 +10 +-6 +12 +-6 +10 +-7 +11 +-6 +10 +-7 +11 +23 +0 +14 +-5 +13 +-6 +9 +-9 +10 +-7 +10 +-10 +9 +-8 +10 +-9 +8 +-8 +10 +-9 +9 +-9 +11 +-7 +9 +-9 +10 +-7 +11 +-9 +10 +-7 +-39 +-11 +-20 +4 +-9 +9 +-6 +12 +-3 +14 +-4 +13 +-2 +16 +-2 +13 +-4 +14 +-3 +13 +-5 +13 +-3 +12 +-5 +11 +-4 +12 +-6 +10 +-6 +12 +-6 +9 +-8 +10 +-6 +11 +-7 +10 +-5 +11 +-6 +10 +-5 +11 +-7 +10 +-6 +12 +-6 +9 +-8 +11 +-6 +11 +-8 +10 +-6 +10 +-7 +10 +-5 +12 +22 +0 +15 +-4 +12 +-8 +9 +-8 +10 +-9 +8 +-9 +9 +-9 +9 +-10 +9 +-8 +8 +-9 +9 +-7 +11 +-9 +9 +-8 +11 +-7 +9 +-8 +11 +-7 +-39 +-11 +-18 +5 +-10 +9 +-6 +14 +-3 +13 +-4 +14 +-2 +14 +-4 +13 +-3 +14 +-3 +12 +-4 +14 +-5 +12 +-5 +13 +-4 +11 +-6 +11 +-4 +12 +22 +0 +16 +-4 +12 +-8 +10 +-7 +10 +-8 +9 +-7 +11 +-8 +9 +-8 +11 +-8 +8 +-9 +10 +-7 +10 +-9 +9 +-7 +10 +-8 +9 +-7 +11 +-8 +-40 +-10 +-17 +5 +-10 +10 +-4 +14 +-3 +13 +-3 +15 +-3 +14 +-4 +14 +-3 +13 +-5 +12 +-3 +13 +-6 +11 +-5 +13 +-5 +10 +-6 +12 +-5 +11 +-6 +11 +-5 +11 +-6 +10 +-5 +12 +-7 +10 +-6 +12 +-6 +9 +-7 +11 +-6 +11 +-7 +11 +-5 +11 +-6 +10 +-5 +11 +-7 +9 +-7 +11 +-6 +9 +-8 +11 +-6 +10 +-8 +10 +-6 +10 +-7 +10 +-6 +11 +-7 +10 +-7 +12 +-5 +10 +-7 +11 +-5 +11 +-7 +10 +-6 +10 +-7 +10 +-6 +11 +-7 +10 +22 +1 +15 +-6 +10 +-7 +11 +-8 +9 +-9 +10 +-8 +9 +-9 +10 +-8 +8 +-10 +9 +-7 +10 +-9 +9 +-8 +11 +-8 +9 +-8 +11 +-7 +10 +-9 +-40 +-10 +-20 +3 +-10 +10 +-5 +12 +-5 +13 +-2 +14 +-4 +13 +-3 +14 +-3 +12 +-4 +13 +-4 +12 +-5 +13 +-4 +12 +-5 +12 +-3 +13 +-6 +11 +-5 +12 +-5 +10 +-6 +11 +-6 +10 +-7 +11 +-5 +10 +-7 +10 +-5 +11 +-7 +10 +-6 +12 +-6 +9 +-7 +11 +-6 +10 +-8 +10 +-6 +10 +-7 +10 +-6 +11 +-7 +10 +-6 +12 +-6 +9 +-8 +10 +-6 +11 +-7 +10 +-6 +10 +-7 +9 +-6 +11 +-8 +9 +-7 +11 +-6 +9 +-7 +11 +-5 +11 +-7 +11 +24 +1 +15 +-5 +13 +-6 +10 +-9 +9 +-7 +10 +-10 +8 +-9 +10 +-9 +8 +-9 +10 +-8 +9 +-9 +10 +-7 +9 +-9 +10 +-7 +11 +-9 +9 +-7 +-39 +-10 +-20 +3 +-8 +11 +-5 +12 +-3 +14 +-3 +13 +-4 +15 +-2 +12 +-4 +13 +-3 +13 +-5 +11 +-4 +13 +-5 +11 +-5 +12 +-5 +11 +-6 +12 +25 +1 +15 +-4 +14 +-6 +9 +-8 +11 +-7 +10 +-9 +10 +-7 +10 +-8 +10 +-7 +11 +-8 +10 +-7 +11 +-7 +9 +-9 +10 +-7 +10 +-9 +10 +-7 +-40 +-12 +-20 +4 +-9 +9 +-6 +12 +-2 +14 +-4 +13 +-3 +15 +-3 +12 +-3 +14 +-4 +12 +-5 +13 +-4 +11 +-6 +11 +-4 +12 +-6 +11 +-5 +12 +24 +0 +15 +-3 +13 +-6 +10 +-7 +11 +-8 +9 +-9 +10 +-8 +8 +-10 +9 +-8 +10 +-10 +8 +-8 +10 +-8 +9 +-8 +11 +-8 +10 +-8 +11 +-6 +-40 +-11 +-19 +5 +-8 +9 +-6 +13 +-3 +14 +-4 +14 +-2 +14 +-3 +13 +-3 +14 +-4 +12 +-4 +14 +-4 +11 +-6 +12 +-4 +12 +-6 +11 +-5 +11 +-6 +10 +-6 +12 +-6 +10 +-7 +12 +-5 +10 +-7 +11 +-5 +12 +-7 +10 +-5 +12 +-6 +10 +-6 +12 +-6 +10 +-7 +11 +-6 +10 +-7 +10 +-5 +11 +-8 +9 +-7 +11 +-6 +9 +-7 +11 +-6 +11 +-7 +11 +-5 +11 +-7 +10 +-5 +11 +-8 +9 +-6 +11 +-6 +9 +-7 +11 +-5 +11 +-7 +10 +-6 +11 +22 +0 +16 +-4 +11 +-8 +10 +-7 +11 +-9 +9 +-8 +10 +-8 +8 +-9 +10 +-8 +9 +-9 +10 +-7 +10 +-9 +10 +-7 +11 +-9 +9 +-8 +11 +-7 +-41 +-11 +-18 +4 +-9 +9 +-5 +13 +-4 +13 +-3 +15 +-2 +13 +-4 +14 +-2 +14 +-5 +12 +-4 +13 +-5 +11 +-5 +12 +-5 +11 +-6 +12 +-4 +11 +-6 +11 +-5 +12 +-7 +10 +-6 +11 +-6 +9 +-7 +11 +-6 +10 +-7 +11 +-5 +10 +-6 +10 +-5 +11 +-7 +10 +-6 +12 +-6 +9 +-7 +11 +-6 +11 +22 +0 +16 +-5 +11 +-8 +10 +-8 +9 +-9 +9 +-7 +10 +-9 +9 +-8 +11 +-8 +8 +-9 +10 +-8 +9 +-9 +10 +-8 +9 +-9 +10 +-6 +11 +-8 +-40 +-9 +-17 +5 +-10 +10 +-4 +13 +-3 +13 +-2 +15 +-3 +13 +-4 +14 +-3 +12 +-5 +12 +-3 +13 +-6 +11 +-5 +12 +-5 +10 +-6 +12 +-6 +11 +23 +2 +17 +-5 +12 +-6 +12 +-7 +9 +-9 +10 +-7 +10 +-9 +9 +-8 +10 +-8 +9 +-7 +11 +-8 +9 +-8 +11 +-7 +9 +-8 +11 +-6 +11 +-8 +10 +-6 +11 +-7 +10 +-6 +12 +-7 +10 +-7 +12 +-6 +10 +-8 +11 +-6 +11 +-8 +10 +-7 +11 +-7 +10 +-7 +11 +-7 +10 +-8 +12 +-6 +10 +-8 +10 +-6 +11 +-9 +10 +-7 +12 +-7 +10 +-7 +12 +-7 +10 +-8 +11 +-6 +10 +-8 +10 +-6 +11 +-9 +9 +-7 +11 +-7 +9 +-8 +11 +-7 +10 +-8 +-39 +-9 +-19 +3 +-9 +12 +-4 +12 +-4 +14 +-2 +15 +-3 +14 +-2 +15 +-3 +13 +-3 +14 +-4 +12 +-5 +12 +-5 +10 +-7 +11 +-5 +11 +-7 +10 +24 +1 +16 +-5 +13 +-6 +11 +-8 +10 +-7 +11 +-8 +9 +-8 +11 +-7 +9 +-9 +10 +-7 +10 +-9 +10 +-7 +11 +-7 +10 +-7 +11 +-8 +10 +-8 +-39 +-10 +-20 +2 +-9 +11 +-5 +12 +-4 +15 +-2 +14 +-4 +14 +-2 +13 +-4 +12 +-3 +13 +-5 +11 +-5 +13 +-4 +11 +-6 +12 +-5 +11 +-7 +11 +24 +1 +16 +-5 +13 +-6 +10 +-8 +10 +-7 +11 +-9 +8 +-8 +10 +-8 +8 +-9 +10 +-8 +10 +-9 +10 +-7 +9 +-8 +10 +-6 +11 +-8 +10 +-7 +12 +-6 +10 +-7 +12 +-6 +11 +-8 +11 +-6 +10 +-8 +10 +-6 +11 +-8 +10 +-7 +12 +-6 +10 +-7 +12 +-6 +11 +-8 +11 +-6 +11 +-7 +10 +-6 +-38 +-11 +-19 +4 +-8 +11 +-6 +12 +-3 +14 +-3 +13 +-3 +14 +-3 +13 +-4 +14 +-3 +12 +-5 +12 +-3 +13 +-6 +11 +-4 +13 +-4 +11 +-5 +12 +-5 +11 +-7 +11 +-5 +10 +-7 +10 +-5 +11 +-7 +10 +-6 +12 +-6 +9 +-7 +11 +-6 +10 +-7 +11 +-5 +10 +-7 +10 +-5 +11 +-7 +10 +-6 +12 +-6 +9 +-7 +11 +-6 +10 +-8 +10 +-6 +10 +-7 +10 +-6 +11 +-8 +9 +-7 +11 +-6 +9 +-8 +10 +-6 +10 +-7 +10 +-6 +10 +-7 +10 +-6 +11 +22 +-1 +14 +-4 +12 +-9 +8 +-9 +10 +-9 +7 +-10 +10 +-8 +10 +-9 +10 +-7 +10 +-8 +10 +-7 +11 +-9 +9 +-8 +11 +-7 +9 +-9 +10 +-7 +-40 +-12 +-19 +4 +-10 +10 +-5 +14 +-2 +14 +-3 +15 +-1 +15 +-4 +13 +-3 +14 +-4 +11 +-5 +12 +-5 +11 +-6 +12 +-5 +11 +-6 +11 +-4 +12 +-7 +10 +-5 +12 +-5 +10 +-5 +12 +-5 +11 +-6 +12 +-5 +10 +-7 +10 +-5 +11 +-8 +9 +-6 +11 +-6 +9 +-7 +11 +-6 +10 +-7 +11 +-5 +10 +-7 +10 +-5 +11 +-7 +10 +-6 +12 +-5 +10 +-7 +11 +-6 +10 +-7 +10 +-5 +10 +-7 +10 +-5 +11 +-8 +9 +-7 +11 +-6 +9 +-7 +10 +-6 +10 +-8 +10 +-6 +10 +-7 +9 +-6 +11 +-8 +9 +-7 +11 +-6 +9 +-8 +10 +-6 +10 +-7 +10 +-5 +11 +-6 +10 +-6 +11 +-7 +10 +-7 +11 +-6 +9 +-7 +11 +-5 +11 +-7 +10 +-5 +11 +-6 +10 +-6 +11 +-7 +9 +-7 +11 +-6 +9 +-8 +10 +-5 +11 +-7 +10 +-6 +11 +-6 +9 +-6 +11 +-7 +10 +-7 +10 +-6 +9 +-8 +9 +-6 +11 +-8 +9 +-6 +11 +-6 +9 +-6 +12 +-6 +10 +-6 +11 +-5 +10 +-7 +10 +-6 +11 +-8 +9 +-6 +11 +-6 +9 +21 +0 +15 +-6 +10 +-7 +11 +-9 +9 +-9 +10 +-8 +8 +-10 +9 +-7 +10 +-9 +9 +-7 +11 +-8 +9 +-7 +11 +-8 +10 +-8 +11 +-6 +10 +-8 +11 +-6 +11 +-9 +9 +-7 +11 +-7 +10 +-7 +11 +-7 +10 +-8 +11 +-7 +9 +-9 +10 +-7 +11 +-9 +9 +-7 +11 +-7 +9 +-8 +11 +-7 +10 +-8 +11 +-6 +10 +-8 +11 +-6 +12 +-8 +10 +-7 +12 +-7 +10 +-8 +11 +-6 +11 +-7 +12 +-5 +11 +-7 +11 +-6 +12 +-8 +10 +-7 +12 +-7 +10 +-8 +-39 +-9 +-18 +3 +-8 +11 +-4 +13 +-3 +15 +-2 +13 +-4 +13 +-2 +14 +-5 +12 +-3 +14 +-4 +11 +-4 +13 +-5 +11 +-6 +12 +-5 +10 +-7 +11 +-4 +12 +-6 +10 +-5 +12 +-5 +10 +-6 +11 +-6 +10 +-7 +11 +-5 +10 +-7 +10 +-5 +11 +-7 +10 +-6 +11 +-6 +9 +-7 +11 +-7 +9 +-8 +10 +-6 +9 +-7 +10 +-5 +11 +-7 +10 +-6 +12 +-6 +9 +-7 +11 +-6 +10 +-7 +11 +-5 +10 +-7 +10 +-6 +11 +-8 +9 +-6 +11 +-6 +9 +-7 +11 +-6 +10 +-7 +10 +-6 +10 +-7 +9 +-6 +11 +-8 +9 +-7 +11 +-6 +9 +-7 +10 +-6 +10 +-8 +10 +-6 +10 +-7 +9 +-6 +11 +-7 +9 +-7 +11 +-6 +9 +-7 +11 +-6 +10 +-7 +10 +-5 +11 +-6 +10 +-5 +12 +-6 +10 +-6 +12 +-5 +9 +-7 +10 +-6 +10 +-8 +9 +-7 +10 +-7 +8 +-7 +10 +-7 +10 +-7 +11 +-5 +10 +-7 +10 +-5 +11 +-7 +10 +-6 +11 +-6 +10 +-6 +11 +-6 +10 +-7 +11 +-6 +9 +-8 +9 +-6 +10 +-8 +9 +-7 +11 +22 +-1 +15 +-4 +12 +-7 +9 +-8 +10 +-9 +8 +-9 +10 +-8 +8 +-10 +9 +-7 +10 +-9 +9 +-8 +10 +-8 +9 +-7 +11 +-8 +10 +-8 +12 +-6 +10 +-8 +11 +-6 +11 +-8 +10 +-7 +11 +-7 +9 +-7 +11 +-8 +10 +-8 +11 +-6 +9 +-8 +10 +-6 +11 +-8 +10 +-6 +12 +-7 +10 +-7 +11 +-7 +-40 +-11 +-18 +4 +-10 +9 +-5 +14 +-2 +13 +-3 +14 +-2 +14 +-4 +13 +-3 +13 +-4 +12 +-3 +14 +-5 +12 +-4 +14 +-4 +11 +-6 +12 +-4 +12 +22 +1 +17 +-4 +12 +-7 +11 +-7 +9 +-9 +9 +-7 +10 +-9 +9 +-8 +11 +-7 +9 +-9 +10 +-8 +9 +-9 +10 +-7 +9 +-9 +10 +-7 +11 +-8 +-40 +-10 +-17 +5 +-10 +10 +-4 +14 +-3 +13 +-2 +15 +-3 +13 +-4 +14 +-3 +12 +-4 +13 +-3 +13 +-5 +11 +-4 +12 +-5 +10 +-6 +12 +-6 +10 +-7 +11 +-5 +10 +-7 +10 +-5 +11 +-7 +10 +-6 +12 +-5 +10 +-7 +11 +-6 +10 +-8 +10 +-6 +10 +-7 +10 +-5 +11 +-7 +9 +-6 +12 +-6 +9 +22 +1 +16 +-5 +11 +-7 +11 +-8 +9 +-8 +11 +-7 +9 +-9 +10 +-7 +10 +-9 +9 +-8 +10 +-8 +9 +-8 +11 +-8 +10 +-9 +10 +-7 +10 +-8 +-39 +-8 +-17 +3 +-9 +11 +-4 +13 +-4 +13 +-2 +14 +-3 +13 +-3 +14 +-4 +12 +-4 +14 +-3 +11 +-5 +12 +-3 +12 +-6 +11 +-4 +12 +-5 +11 +24 +2 +16 +-5 +11 +-6 +11 +-9 +8 +-9 +10 +-8 +8 +-10 +9 +-8 +9 +-9 +9 +-7 +10 +-8 +9 +-7 +11 +-8 +9 +-8 +11 +-7 +9 +-8 +-39 +-9 +-18 +3 +-9 +12 +-4 +13 +-3 +15 +-1 +13 +-3 +14 +-2 +14 +-4 +12 +-3 +14 +-4 +11 +-6 +12 +-5 +11 +-7 +11 +-5 +10 +-7 +10 +-5 +12 +-6 +10 +-6 +12 +-5 +9 +-7 +11 +-6 +10 +-7 +11 +-5 +10 +-7 +10 +-5 +11 +-7 +10 +-6 +11 +-6 +9 +-7 +11 +-6 +10 +-7 +10 +23 +0 +14 +-5 +12 +-6 +9 +-9 +10 +-7 +10 +-9 +9 +-8 +10 +-8 +9 +-8 +11 +-8 +10 +-8 +11 +-7 +9 +-8 +10 +-6 +11 +-9 +9 +-7 +-38 +-10 +-20 +3 +-8 +10 +-5 +12 +-3 +15 +-3 +13 +-3 +15 +-2 +12 +-4 +13 +-3 +13 +-5 +12 +-4 +12 +-5 +11 +-5 +12 +-6 +11 +-6 +12 +-5 +9 +-7 +10 +-5 +11 +-7 +10 +-5 +12 +-6 +10 +-6 +12 +-6 +10 +-6 +11 +-5 +10 +-7 +10 +-5 +11 +-8 +9 +-6 +11 +-6 +9 +-6 +11 +23 +0 +15 +-4 +12 +-8 +9 +-8 +10 +-8 +8 +-9 +9 +-7 +9 +-10 +9 +-8 +9 +-9 +8 +-8 +10 +-9 +9 +-8 +11 +-7 +9 +-8 +10 +-6 +-39 +-12 +-19 +4 +-9 +10 +-6 +13 +-2 +13 +-3 +14 +-1 +15 +-4 +13 +-3 +14 +-3 +11 +-5 +12 +-4 +12 +-6 +12 +-4 +12 +-5 +11 +-4 +12 +22 +0 +16 +-3 +13 +-7 +10 +-7 +11 +-7 +9 +-8 +10 +-8 +9 +-9 +10 +-8 +8 +-9 +9 +-7 +10 +-9 +9 +-7 +11 +-7 +9 +-8 +11 +-7 +-39 +-11 +-18 +5 +-9 +10 +-5 +14 +-3 +12 +-4 +14 +-2 +14 +-4 +13 +-3 +14 +-4 +11 +-4 +13 +-5 +11 +-5 +12 +-4 +10 +-6 +11 +-4 +12 +-6 +10 +-5 +12 +-5 +10 +-6 +12 +-5 +11 +-6 +11 +-5 +10 +-6 +10 +-5 +11 +-7 +9 +-6 +11 +-6 +9 +-7 +10 +-6 +10 +-8 +10 +-6 +9 +-7 +9 +-5 +11 +-7 +9 +-6 +12 +-5 +9 +-7 +10 +-6 +10 +-8 +10 +-6 +10 +-7 +9 +-6 +11 +-7 +9 +-7 +11 +-6 +8 +-8 +10 +-6 +10 +20 +-1 +15 +-5 +11 +-8 +10 +-8 +8 +-9 +8 +-8 +10 +-10 +8 +-8 +11 +-7 +9 +-8 +11 +-7 +10 +-8 +11 +-6 +10 +-8 +10 +-6 +11 +-8 +-40 +-10 +-17 +4 +-10 +9 +-4 +14 +-3 +13 +-3 +15 +-3 +14 +-4 +14 +-2 +12 +-4 +12 +-3 +13 +-5 +11 +-5 +12 +-5 +10 +-6 +12 +-4 +11 +-6 +12 +-4 +11 +-6 +11 +-4 +12 +-6 +10 +-6 +12 +-5 +9 +-7 +11 +-5 +10 +-8 +10 +-6 +10 +-7 +9 +-6 +11 +-7 +9 +-7 +11 +-6 +9 +-7 +10 +-5 +11 +-7 +10 +-5 +10 +-7 +9 +-6 +11 +-7 +9 +-7 +11 +-6 +9 +-7 +10 +-5 +11 +-8 +9 +-6 +10 +-7 +9 +-6 +11 +-7 +10 +22 +1 +16 +-6 +11 +-7 +11 +-7 +8 +-9 +10 +-8 +9 +-9 +9 +-7 +9 +-8 +9 +-7 +10 +-9 +8 +-8 +10 +-8 +8 +-8 +11 +-6 +11 +-8 +-39 +-9 +-18 +4 +-10 +10 +-4 +12 +-4 +13 +-1 +15 +-3 +13 +-2 +15 +-2 +13 +-4 +14 +-3 +13 +-5 +12 +-3 +12 +-5 +11 +-4 +12 +-6 +10 +23 +2 +16 +-5 +11 +-7 +10 +-8 +8 +-9 +10 +-9 +9 +-9 +10 +-7 +9 +-8 +10 +-6 +11 +-8 +9 +-7 +11 +-7 +9 +-7 +11 +-7 +10 +-8 +-39 +-9 +-19 +3 +-9 +11 +-4 +12 +-4 +14 +-2 +14 +-4 +13 +-3 +13 +-4 +12 +-3 +13 +-5 +11 +-5 +13 +-4 +10 +-6 +11 +-4 +12 +-6 +11 +24 +2 +16 +-5 +13 +-6 +10 +-8 +9 +-7 +10 +-9 +8 +-8 +10 +-8 +8 +-9 +10 +-7 +10 +-8 +10 +-7 +9 +-8 +10 +-6 +11 +-8 +10 +-7 +-38 +-9 +-20 +3 +-8 +10 +-5 +12 +-3 +14 +-3 +13 +-4 +14 +-2 +13 +-4 +13 +-2 +13 +-5 +12 +-4 +13 +-4 +10 +-6 +11 +-6 +10 +-7 +11 +-5 +10 +-6 +11 +-4 +12 +-7 +10 +-5 +12 +-5 +10 +-6 +12 +-5 +11 +-6 +11 +-5 +10 +-7 +10 +-5 +11 +-7 +9 +-6 +11 +-6 +9 +-7 +11 +-5 +10 +-7 +10 +-5 +10 +-7 +10 +-5 +11 +-7 +9 +-7 +11 +-6 +8 +-8 +10 +-6 +10 +-8 +9 +-6 +10 +-7 +9 +-6 +11 +-7 +10 +-6 +12 +23 +-1 +14 +-5 +12 +-7 +9 +-9 +10 +-8 +9 +-9 +9 +-7 +9 +-9 +9 +-7 +10 +-9 +8 +-8 +11 +-7 +8 +-9 +10 +-7 +10 +-9 +10 +-7 +-39 +-11 +-19 +4 +-8 +10 +-5 +13 +-2 +15 +-4 +13 +-3 +15 +-3 +12 +-4 +13 +-3 +12 +-5 +13 +-3 +12 +-5 +11 +-4 +12 +-6 +10 +-5 +12 +-5 +10 +-6 +12 +-5 +11 +-7 +10 +-5 +10 +-6 +10 +-5 +11 +-7 +10 +-6 +12 +-5 +10 +-7 +11 +-5 +11 +-7 +10 +-6 +10 +-7 +9 +-6 +11 +21 +-1 +14 +-4 +12 +-8 +9 +-8 +10 +-8 +7 +-10 +9 +-9 +9 +-9 +9 +-7 +9 +-9 +9 +-7 +10 +-9 +9 +-8 +11 +-7 +9 +-8 +11 +-7 +-39 +-11 +-18 +5 +-9 +10 +-5 +14 +-2 +13 +-3 +14 +-1 +14 +-4 +13 +-3 +13 +-4 +12 +-4 +13 +-4 +11 +-5 +12 +-4 +10 +-6 +11 +-4 +12 +22 +1 +16 +-3 +12 +-7 +11 +-6 +10 +-8 +9 +-8 +10 +-9 +8 +-9 +10 +-7 +8 +-8 +10 +-7 +10 +-8 +11 +-6 +11 +-7 +11 +-6 +12 +-7 +10 +-7 +11 +-6 +9 +-8 +11 +-6 +11 +-7 +11 +-6 +10 +-7 +10 +-6 +11 +-8 +10 +-7 +11 +-6 +9 +-8 +11 +-6 +11 +-8 +10 +-6 +10 +-8 +9 +-7 +11 +-8 +10 +-7 +12 +-6 +9 +-8 +11 +-6 +11 +-8 +10 +-6 +11 +-7 +10 +-6 +12 +-7 +10 +-8 +11 +-7 +9 +-8 +10 +-6 +11 +-8 +-40 +-9 +-17 +4 +-10 +10 +-4 +12 +-4 +12 +-2 +14 +-4 +12 +-3 +14 +-3 +12 +-4 +13 +-3 +12 +-5 +12 +-4 +12 +-5 +11 +-4 +12 +-5 +10 +22 +2 +16 +-5 +11 +-6 +11 +-7 +9 +-8 +11 +-7 +10 +-9 +10 +-7 +9 +-8 +10 +-6 +11 +-9 +9 +-7 +11 +-7 +9 +-8 +11 +-7 +10 +-8 +-38 +-9 +-18 +3 +-9 +11 +-4 +12 +-4 +14 +-2 +14 +-4 +13 +-2 +13 +-4 +12 +-4 +13 +-5 +11 +-5 +12 +-4 +10 +-6 +10 +-5 +11 +-7 +10 +23 +2 +16 +-5 +12 +-5 +11 +-8 +9 +-7 +10 +-9 +9 +-8 +11 +-7 +9 +-8 +11 +-6 +11 +-7 +11 +-6 +10 +-8 +9 +-7 +11 +-8 +9 +-7 +11 +-7 +9 +-8 +11 +-6 +11 +-7 +11 +-6 +11 +-7 +10 +-6 +11 +-8 +10 +-7 +12 +-6 +9 +-8 +11 +-6 +11 +-8 +10 +-6 +11 +-7 +10 +-6 +-37 +-10 +-19 +4 +-7 +11 +-5 +12 +-3 +15 +-2 +12 +-4 +14 +-3 +13 +-4 +13 +-3 +13 +-4 +12 +-3 +13 +-5 +11 +-5 +13 +-4 +10 +-6 +11 +-4 +11 +-6 +10 +-5 +11 +-5 +10 +-5 +12 +-6 +10 +-6 +11 +-5 +9 +-7 +10 +-5 +11 +-7 +10 +-5 +11 +-6 +10 +-6 +11 +-6 +9 +-7 +11 +-6 +9 +-7 +10 +-5 +10 +-7 +9 +-6 +11 +-6 +9 +-6 +11 +-6 +10 +-7 +11 +-5 +9 +-7 +10 +-6 +10 +-8 +9 +-6 +10 +-6 +9 +-6 +11 +22 +0 +14 +-4 +12 +-8 +9 +-8 +10 +-8 +8 +-9 +10 +-7 +10 +-9 +9 +-7 +9 +-8 +9 +-7 +11 +-8 +10 +-7 +11 +-7 +9 +-8 +10 +-6 +-38 +-11 +-19 +4 +-9 +9 +-6 +13 +-2 +13 +-3 +13 +-2 +14 +-4 +12 +-3 +14 +-3 +12 +-4 +13 +-3 +12 +-5 +12 +-4 +11 +-6 +10 +-4 +12 +-6 +10 +-5 +12 +-5 +9 +-7 +11 +-5 +11 +-7 +11 +-5 +11 +-6 +10 +-5 +11 +-7 +9 +-6 +11 +-6 +9 +-7 +10 +-6 +10 +-8 +10 +-6 +10 +-6 +9 +-6 +11 +-6 +9 +-7 +11 +-6 +9 +-7 +10 +-5 +11 +-7 +10 +-5 +11 +-6 +9 +-6 +11 +-6 +10 +-7 +11 +-5 +9 +-7 +10 +-5 +10 +-8 +9 +-6 +10 +-6 +9 +-7 +11 +-6 +10 +-7 +11 +-5 +10 +-7 +10 +-5 +11 +-7 +9 +-6 +11 +-6 +9 +-7 +10 +-6 +10 +-7 +10 +-5 +9 +-7 +10 +-5 +11 +-7 +9 +-6 +11 +-6 +9 +-7 +11 +-6 +10 +-7 +11 +-5 +10 +-6 +10 +-5 +11 +-7 +9 +-6 +11 +-6 +8 +-8 +10 +-6 +10 +-8 +10 +-6 +10 +-7 +9 +-5 +11 +-7 +9 +-7 +11 +-6 +9 +-7 +11 +-5 +11 +-7 +10 +-5 +10 +-7 +9 +-6 +10 +-8 +9 +-7 +10 +-6 +9 +21 +1 +16 +-4 +10 +-7 +11 +-8 +9 +-9 +10 +-7 +9 +-9 +9 +-7 +10 +-9 +9 +-8 +11 +-7 +9 +-9 +10 +-7 +10 +-8 +10 +-6 +10 +-7 +10 +-5 +12 +-7 +10 +-7 +11 +-7 +9 +-8 +11 +-6 +11 +-8 +11 +-6 +10 +-7 +10 +-6 +11 +-8 +9 +-7 +11 +-7 +9 +-8 +10 +-7 +10 +-8 +10 +-6 +10 +-7 +9 +-6 +11 +-8 +9 +-7 +11 +-6 +9 +-8 +11 +-6 +11 +-8 +10 +-6 +11 +-7 +10 +-7 +11 +-8 +9 +-8 +11 +-6 +9 +-8 +-38 +-9 +-18 +3 +-9 +11 +-4 +13 +-4 +14 +-2 +13 +-3 +13 +-2 +14 +-4 +12 +-3 +14 +-3 +11 +-5 +12 +-4 +12 +-6 +11 +-4 +11 +-6 +10 +-5 +11 +-6 +10 +-5 +12 +-4 +10 +-6 +11 +-4 +11 +-7 +10 +-5 +11 +-6 +10 +-5 +12 +-6 +10 +-5 +12 +-4 +10 +-6 +11 +-5 +11 +-7 +10 +-5 +10 +-6 +9 +-5 +11 +-7 +10 +-7 +11 +-5 +9 +-7 +10 +-5 +11 +-7 +10 +-5 +10 +-6 +9 +-6 +11 +-7 +9 +-7 +11 +-6 +9 +-7 +10 +-5 +10 +-7 +9 +-6 +10 +-6 +9 +-6 +11 +-7 +9 +-7 +11 +-6 +9 +-7 +10 +-5 +11 +-7 +9 +-6 +11 +-6 +9 +-6 +11 +-6 +9 +-7 +11 +-6 +9 +-7 +10 +-5 +11 +-7 +10 +-5 +11 +-6 +9 +-7 +10 +-7 +9 +-8 +10 +-6 +9 +-7 +10 +-5 +11 +-7 +9 +-6 +10 +-6 +8 +-7 +10 +-7 +9 +-7 +10 +-6 +9 +-8 +9 +-6 +10 +-8 +9 +-6 +11 +-6 +9 +-6 +11 +-5 +10 +-7 +11 +-5 +10 +-7 +9 +-5 +11 +-7 +9 +-6 +11 +22 +-1 +14 +-4 +12 +-7 +9 +-8 +10 +-8 +8 +-9 +10 +-8 +8 +-9 +9 +-7 +10 +-9 +9 +-7 +10 +-8 +8 +-8 +10 +-8 +9 +-9 +10 +-7 +9 +-8 +10 +-6 +11 +-8 +10 +-6 +12 +-6 +10 +-7 +11 +-7 +10 +-8 +11 +-6 +10 +-7 +10 +-6 +11 +-8 +10 +-7 +11 +-7 +9 +-8 +10 +-7 +-39 +-11 +-18 +4 +-9 +9 +-5 +14 +-2 +13 +-3 +14 +-1 +15 +-3 +13 +-2 +14 +-3 +11 +-4 +13 +-4 +11 +-5 +12 +-4 +11 +-5 +11 +-3 +12 +22 +1 +16 +-3 +12 +-7 +11 +-6 +10 +-8 +9 +-7 +10 +-9 +8 +-8 +11 +-7 +8 +-8 +10 +-7 +10 +-8 +11 +-6 +10 +-7 +10 +-6 +11 +-8 +-40 +-11 +-17 +4 +-10 +9 +-5 +13 +-4 +12 +-3 +14 +-3 +13 +-4 +13 +-3 +12 +-5 +12 +-3 +12 +-6 +10 +-5 +12 +-4 +10 +-6 +12 +-5 +11 +-7 +11 +-5 +10 +-6 +10 +-5 +11 +-7 +10 +-6 +12 +-5 +9 +-7 +11 +-4 +11 +-7 +10 +-5 +11 +-6 +10 +-5 +11 +-6 +10 +-6 +11 +-5 +9 +21 +1 +15 +-5 +10 +-7 +11 +-8 +9 +-9 +9 +-7 +8 +-9 +9 +-6 +10 +-8 +9 +-7 +11 +-7 +8 +-8 +10 +-7 +9 +-8 +10 +-6 +9 +-8 +-39 +-9 +-18 +2 +-10 +10 +-4 +12 +-4 +13 +-2 +14 +-3 +12 +-2 +14 +-4 +12 +-4 +14 +-3 +11 +-5 +12 +-4 +12 +-6 +10 +-5 +11 +-5 +10 +23 +2 +15 +-4 +11 +-6 +11 +-8 +9 +-8 +11 +-7 +8 +-8 +10 +-6 +10 +-8 +9 +-7 +10 +-8 +9 +-7 +11 +-8 +9 +-8 +11 +-7 +9 +-8 +-38 +-9 +-18 +3 +-9 +11 +-4 +13 +-4 +14 +-2 +13 +-3 +13 +-2 +14 +-5 +11 +-4 +13 +-4 +10 +-5 +12 +-4 +11 +-6 +11 +-5 +10 +-6 +10 +-5 +12 +-6 +10 +-5 +12 +-5 +10 +-6 +11 +-5 +10 +-7 +10 +-5 +10 +-6 +10 +-5 +11 +-7 +9 +-6 +11 +-5 +9 +-7 +10 +-5 +10 +-8 +9 +22 +0 +14 +-6 +11 +-6 +9 +-8 +9 +-7 +10 +-9 +8 +-8 +11 +-7 +9 +-8 +11 +-7 +10 +-8 +10 +-6 +9 +-8 +10 +-6 +11 +-8 +9 +-7 +-38 +-10 +-19 +3 +-8 +10 +-5 +11 +-3 +14 +-4 +12 +-4 +13 +-3 +11 +-4 +12 +-2 +13 +-5 +11 +-3 +13 +-4 +11 +-4 +12 +-5 +11 +-6 +12 +-4 +10 +-6 +10 +-5 +11 +-7 +9 +-6 +10 +-6 +8 +-6 +11 +-6 +10 +-6 +11 +-5 +9 +-7 +10 +-5 +11 +-7 +9 +-6 +11 +-6 +9 +-6 +11 +22 +0 +14 +-4 +12 +-7 +9 +-8 +10 +-7 +8 +-9 +9 +-8 +9 +-10 +8 +-7 +10 +-8 +9 +-7 +10 +-8 +9 +-8 +11 +-6 +9 +-8 +11 +-6 +-38 +-11 +-18 +5 +-8 +10 +-5 +13 +-2 +13 +-3 +13 +-1 +14 +-3 +13 +-3 +14 +-3 +11 +-4 +13 +-4 +12 +-5 +12 +-4 +11 +-5 +10 +-4 +12 +22 +0 +15 +-4 +12 +-8 +9 +-7 +10 +-8 +8 +-8 +10 +-8 +9 +-9 +10 +-7 +8 +-8 +10 +-6 +11 +-8 +9 +-7 +11 +-7 +9 +-7 +11 +-7 +-39 +-11 +-18 +4 +-10 +9 +-4 +14 +-2 +13 +-3 +14 +-1 +14 +-3 +13 +-2 +13 +-4 +11 +-4 +12 +-5 +11 +-5 +13 +-4 +10 +-6 +11 +-4 +11 +-6 +10 +-4 +11 +-6 +9 +-6 +11 +-7 +9 +-7 +10 +-6 +8 +-8 +10 +-5 +10 +-7 +9 +-5 +11 +-6 +9 +-6 +11 +-6 +10 +-7 +11 +-5 +9 +-7 +10 +-5 +11 +-7 +10 +-5 +11 +-5 +10 +-5 +12 +-6 +10 +-6 +11 +-5 +9 +-7 +9 +-5 +10 +-8 +8 +-6 +11 +-6 +8 +-7 +10 +-6 +9 +20 +0 +15 +-6 +10 +-7 +11 +-7 +8 +-9 +9 +-7 +9 +-9 +9 +-7 +9 +-9 +8 +-7 +10 +-8 +9 +-7 +11 +-6 +9 +-8 +11 +-6 +11 +-8 +-39 +-9 +-18 +3 +-10 +9 +-5 +11 +-5 +12 +-2 +14 +-4 +12 +-3 +14 +-3 +12 +-4 +13 +-3 +12 +-5 +12 +-4 +11 +-5 +11 +-4 +12 +-6 +10 +-5 +12 +-5 +10 +-6 +11 +-5 +10 +-7 +10 +-5 +10 +-6 +9 +-5 +11 +-7 +9 +-6 +11 +-5 +9 +-7 +11 +-5 +11 +-7 +10 +-5 +10 +-6 +9 +-6 +11 +-7 +9 +-6 +11 +-5 +9 +-7 +10 +-6 +10 +-8 +9 +-6 +10 +-7 +9 +-5 +11 +-7 +10 +-6 +11 +-5 +9 +-6 +11 +-5 +11 +-7 +9 +22 +1 +14 +-6 +11 +-6 +9 +-9 +8 +-7 +10 +-9 +8 +-8 +11 +-7 +9 +-8 +11 +-7 +10 +-8 +10 +-7 +9 +-8 +9 +-6 +11 +-8 +10 +-6 +-37 +-9 +-19 +3 +-8 +10 +-5 +11 +-4 +14 +-3 +12 +-4 +14 +-2 +12 +-4 +13 +-2 +13 +-5 +11 +-4 +12 +-4 +10 +-5 +11 +-5 +11 +-6 +11 +23 +1 +15 +-5 +13 +-5 +9 +-8 +10 +-6 +10 +-9 +8 +-7 +10 +-8 +8 +-8 +10 +-8 +9 +-8 +11 +-6 +9 +-7 +11 +-6 +11 +-8 +9 +-6 +-38 +-10 +-19 +4 +-8 +10 +-5 +12 +-2 +15 +-3 +13 +-2 +15 +-2 +12 +-4 +13 +-3 +13 +-5 +12 +-4 +12 +-5 +10 +-4 +12 +-6 +10 +-5 +12 +23 +0 +14 +-4 +13 +-6 +9 +-8 +10 +-8 +9 +-9 +9 +-7 +8 +-9 +8 +-7 +10 +-9 +8 +-7 +11 +-7 +9 +-8 +11 +-7 +10 +-8 +10 +-6 +-39 +-11 +-19 +4 +-8 +8 +-6 +12 +-2 +14 +-4 +13 +-2 +14 +-3 +12 +-3 +14 +-4 +12 +-4 +13 +-3 +11 +-5 +12 +-3 +12 +-6 +10 +-5 +12 +-5 +10 +-6 +11 +-6 +10 +-7 +11 +-5 +9 +-7 +10 +-5 +11 +-7 +10 +-5 +11 +-5 +10 +-5 +12 +-5 +11 +-6 +11 +-4 +10 +-6 +10 +-5 +11 +-7 +9 +-6 +10 +-6 +9 +-7 +10 +-6 +10 +-7 +10 +-5 +9 +-7 +9 +-5 +11 +-7 +9 +-6 +11 +-5 +9 +-7 +11 +-5 +10 +-7 +10 +-6 +9 +21 +-1 +15 +-4 +10 +-8 +9 +-7 +9 +-10 +8 +-8 +9 +-8 +8 +-8 +10 +-8 +9 +-8 +10 +-7 +9 +-8 +10 +-6 +11 +-8 +9 +-6 +11 +-6 +-39 +-10 +-17 +4 +-9 +9 +-4 +13 +-4 +12 +-3 +14 +-2 +12 +-4 +13 +-2 +13 +-5 +11 +-3 +12 +-4 +11 +-4 +12 +-5 +11 +-5 +12 +-4 +10 +-6 +11 +-4 +11 +-7 +9 +-5 +11 +-5 +9 +-6 +11 +-6 +10 +-7 +11 +-5 +9 +-7 +10 +-5 +10 +-7 +9 +-6 +11 +-6 +9 +-7 +10 +-6 +10 +21 +1 +15 +-5 +10 +-7 +11 +-7 +8 +-9 +9 +-7 +10 +-9 +9 +-7 +10 +-8 +8 +-8 +10 +-9 +8 +-9 +10 +-7 +9 +-8 +10 +-6 +10 +-8 +-39 +-10 +-18 +4 +-9 +10 +-4 +12 +-4 +13 +-1 +15 +-3 +13 +-2 +15 +-2 +12 +-4 +13 +-3 +12 +-5 +12 +-4 +11 +-5 +10 +-4 +12 +-6 +10 +22 +2 +16 +-5 +11 +-6 +11 +-7 +8 +-8 +10 +-8 +9 +-9 +10 +-7 +8 +-9 +8 +-7 +10 +-9 +8 +-7 +10 +-7 +9 +-8 +11 +-7 +9 +-8 +10 +-7 +9 +-8 +10 +-6 +11 +-8 +9 +-6 +11 +-6 +9 +-7 +11 +-7 +10 +-8 +10 +-6 +9 +-8 +10 +-6 +11 +-8 +10 +-6 +12 +-6 +10 +-7 +11 +-6 +11 +-7 +11 +-6 +10 +-7 +10 +-6 +11 +-8 +10 +-6 +11 +-6 +9 +-7 +11 +-6 +10 +-8 +10 +-6 +10 +-7 +10 +-6 +11 +-7 +10 +-6 +-37 +-9 +-19 +3 +-8 +11 +-4 +12 +-2 +14 +-2 +13 +-3 +14 +-2 +12 +-4 +13 +-2 +13 +-5 +11 +-4 +12 +-5 +10 +-5 +12 +-5 +11 +-6 +12 +24 +1 +15 +-4 +13 +-6 +9 +-8 +10 +-7 +9 +-9 +9 +-7 +10 +-8 +9 +-7 +10 +-8 +9 +-8 +11 +-6 +9 +-8 +10 +-6 +10 +-8 +9 +-6 +-38 +-11 +-19 +4 +-8 +9 +-5 +12 +-2 +15 +-3 +13 +-2 +15 +-2 +12 +-4 +13 +-3 +12 +-5 +12 +-4 +11 +-5 +11 +-4 +12 +-6 +10 +-5 +12 +23 +0 +14 +-4 +12 +-6 +9 +-8 +10 +-8 +9 +-8 +10 +-7 +9 +-8 +10 +-6 +10 +-9 +8 +-7 +10 +-8 +8 +-8 +10 +-7 +9 +-8 +11 +-6 +9 +-8 +10 +-6 +11 +-8 +9 +-6 +11 +-6 +10 +-7 +11 +-6 +10 +-7 +11 +-6 +10 +-7 +10 +-6 +11 +-8 +9 +-6 +11 +-6 +10 +-7 +11 +-6 +-38 +-11 +-17 +5 +-9 +9 +-5 +14 +-2 +12 +-3 +14 +-2 +14 +-4 +12 +-2 +13 +-3 +12 +-3 +13 +-4 +11 +-4 +12 +-4 +10 +-6 +11 +-4 +11 +-7 +10 +-5 +11 +-6 +9 +-6 +11 +-6 +10 +-6 +11 +-5 +9 +-7 +10 +-5 +11 +-7 +9 +-5 +11 +-5 +9 +-6 +11 +-6 +10 +-6 +11 +-5 +9 +-7 +10 +-5 +10 +-7 +9 +-6 +11 +-6 +9 +-6 +11 +-6 +10 +-7 +10 +-5 +9 +-7 +9 +-5 +10 +-8 +9 +-6 +11 +-6 +9 +-6 +11 +-5 +10 +21 +1 +15 +-5 +10 +-7 +11 +-7 +8 +-9 +9 +-7 +10 +-9 +9 +-7 +10 +-8 +9 +-7 +10 +-8 +9 +-7 +11 +-6 +9 +-8 +10 +-6 +10 +-8 +-40 +-10 +-18 +3 +-10 +10 +-4 +12 +-4 +13 +-2 +14 +-3 +12 +-3 +14 +-3 +11 +-5 +12 +-3 +12 +-6 +11 +-4 +11 +-5 +11 +-4 +12 +-5 +10 +-5 +12 +-5 +9 +-7 +11 +-5 +11 +-7 +10 +-5 +10 +-6 +9 +-5 +11 +-6 +10 +-6 +11 +-5 +9 +-6 +10 +-5 +11 +-7 +10 +-5 +10 +-6 +9 +-5 +11 +-6 +9 +-6 +11 +-5 +9 +-7 +10 +-5 +10 +-7 +9 +-5 +10 +-6 +9 +-6 +11 +-6 +9 +-7 +11 +-6 +8 +-7 +10 +-5 +10 +-7 +9 +-6 +10 +-6 +9 +-6 +11 +-6 +10 +-6 +11 +-5 +10 +-6 +10 +-5 +10 +-7 +8 +-6 +10 +-7 +8 +-6 +10 +-6 +10 +-7 +11 +-5 +9 +-7 +9 +-5 +10 +-7 +9 +-6 +11 +-6 +9 +-6 +11 +-6 +10 +-7 +11 +-5 +9 +-7 +9 +-5 +10 +-8 +9 +-6 +10 +-6 +8 +-7 +10 +-6 +9 +-7 +10 +-5 +9 +-7 +10 +-5 +11 +-7 +9 +-6 +11 +-6 +9 +-7 +10 +-6 +10 +-7 +10 +-5 +9 +-7 +10 +-5 +11 +-6 +10 +-5 +11 +-5 +9 +-7 +10 +21 +0 +13 +-5 +12 +-7 +9 +-8 +10 +-7 +8 +-9 +9 +-7 +10 +-9 +8 +-7 +10 +-8 +8 +-8 +10 +-8 +9 +-8 +10 +-7 +9 +-8 +10 +-6 +11 +-8 +10 +-6 +11 +-7 +9 +-6 +11 +-7 +10 +-7 +11 +-6 +9 +-8 +10 +-6 +11 +-8 +10 +-6 +11 +-7 +9 +-7 +11 +-7 +9 +-8 +11 +-6 +10 +-7 +10 +-6 +11 +-8 +9 +-6 +11 +-7 +9 +-7 +11 +-7 +10 +-7 +11 +-6 +10 +-7 +10 +-6 +11 +-8 +9 +-6 +11 +-6 +10 +-7 +11 +-6 +-38 +-10 +-17 +5 +-8 +10 +-4 +14 +-2 +13 +-3 +14 +-1 +14 +-4 +13 +-2 +13 +-4 +11 +-3 +13 +-4 +11 +-5 +13 +-4 +10 +-5 +11 +-4 +12 +-6 +11 +-4 +11 +-5 +10 +-5 +11 +-6 +10 +-6 +11 +-5 +9 +-7 +10 +-4 +11 +-6 +10 +-5 +10 +-6 +8 +-7 +10 +-7 +9 +-7 +10 +-5 +9 +-7 +10 +-4 +11 +-7 +9 +-5 +11 +-6 +9 +-6 +11 +-6 +9 +-7 +11 +-5 +9 +-7 +10 +-5 +10 +-7 +9 +-6 +11 +-6 +9 +-6 +11 +-6 +9 +-7 +10 +-5 +9 +-7 +9 +-5 +10 +-7 +9 +-5 +11 +-5 +10 +-5 +11 +-5 +10 +-6 +11 +-5 +9 +-7 +10 +-5 +10 +-7 +9 +-6 +11 +-6 +8 +-7 +10 +-6 +9 +-7 +10 +-5 +9 +-7 +9 +-5 +10 +-7 +9 +-6 +11 +-6 +9 +-7 +10 +-6 +10 +-7 +10 +-6 +9 +-7 +9 +-5 +10 +-7 +9 +-6 +11 +-6 +9 +-7 +10 +-6 +10 +-7 +10 +-5 +9 +-7 +10 +-5 +11 +-7 +9 +-6 +11 +-6 +8 +-7 +10 +-6 +9 +-7 +11 +-5 +9 +-6 +10 +23 +1 +13 +-5 +11 +-6 +10 +-9 +8 +-8 +9 +-9 +8 +-8 +10 +-9 +8 +-8 +10 +-7 +8 +-9 +9 +-6 +10 +-8 +9 +-7 +10 +-7 +9 +-7 +11 +-7 +10 +-7 +11 +-6 +9 +-8 +10 +-6 +10 +-8 +9 +-7 +10 +-7 +9 +-7 +11 +-7 +10 +-7 +11 +-6 +9 +-8 +10 +-6 +10 +-8 +10 +-6 +-37 +-10 +-18 +5 +-7 +10 +-4 +13 +-1 +15 +-3 +13 +-2 +14 +-3 +11 +-4 +13 +-3 +12 +-5 +11 +-4 +11 +-5 +10 +-4 +12 +-6 +10 +-5 +12 +23 +0 +14 +-4 +12 +-6 +9 +-7 +10 +-8 +9 +-8 +10 +-7 +8 +-8 +9 +-6 +10 +-9 +9 +-7 +10 +-7 +9 +-7 +10 +-8 +9 +-8 +10 +-6 +-39 +-11 +-18 +5 +-8 +9 +-5 +13 +-2 +14 +-3 +14 +-1 +14 +-3 +12 +-3 +13 +-4 +11 +-4 +13 +-4 +10 +-5 +12 +-4 +12 +-6 +11 +-4 +11 +-5 +10 +-5 +11 +-6 +9 +-6 +11 +-5 +9 +-6 +11 +-5 +11 +-7 +10 +-5 +10 +-6 +9 +-5 +11 +-7 +9 +-7 +11 +-5 +9 +-7 +10 +-5 +10 +20 +-1 +15 +-5 +11 +-8 +10 +-7 +9 +-9 +8 +-7 +9 +-9 +8 +-8 +10 +-7 +8 +-8 +10 +-7 +10 +-8 +10 +-7 +9 +-8 +9 +-6 +11 +-8 +-39 +-10 +-17 +4 +-10 +9 +-4 +13 +-3 +12 +-2 +14 +-3 +13 +-3 +14 +-2 +12 +-4 +13 +-2 +13 +-4 +11 +-4 +12 +-4 +10 +-5 +11 +-5 +10 +21 +2 +16 +-5 +11 +-6 +11 +-6 +8 +-8 +10 +-7 +9 +-9 +9 +-7 +9 +-8 +9 +-6 +11 +-7 +9 +-7 +11 +-6 +9 +-8 +10 +-6 +11 +-8 +-38 +-9 +-18 +3 +-9 +10 +-4 +12 +-4 +13 +-1 +14 +-4 +12 +-3 +14 +-3 +11 +-4 +13 +-4 +11 +-5 +12 +-4 +10 +-6 +10 +-4 +11 +-6 +10 +-5 +11 +-5 +9 +-6 +11 +-6 +10 +-7 +10 +-5 +9 +-7 +9 +-5 +10 +-7 +9 +-6 +11 +-5 +9 +-6 +11 +-5 +10 +-7 +10 +-5 +9 +-7 +9 +22 +1 +13 +-5 +11 +-6 +10 +-9 +8 +-7 +10 +-7 +9 +-7 +11 +-7 +9 +-8 +10 +-7 +8 +-8 +9 +-6 +10 +-9 +9 +-7 +10 +-7 +8 +-8 +-38 +-11 +-19 +2 +-8 +10 +-5 +11 +-3 +15 +-2 +12 +-3 +14 +-2 +13 +-4 +12 +-3 +12 +-4 +11 +-4 +12 +-5 +10 +-5 +12 +-4 +10 +-6 +11 +-4 +11 +-6 +10 +-4 +11 +-5 +9 +-5 +11 +-6 +10 +-6 +11 +-5 +9 +-7 +10 +-5 +10 +-7 +10 +-5 +11 +-5 +10 +-5 +11 +-6 +10 +-6 +11 +23 +0 +14 +-5 +12 +-6 +8 +-9 +9 +-7 +9 +-9 +9 +-7 +9 +-8 +9 +-6 +11 +-8 +9 +-7 +11 +-7 +8 +-8 +10 +-6 +10 +-8 +10 +-6 +-39 +-11 +-19 +4 +-8 +8 +-6 +11 +-3 +13 +-4 +12 +-3 +14 +-3 +12 +-3 +14 +-3 +12 +-4 +13 +-3 +11 +-5 +11 +-3 +12 +-6 +10 +-5 +11 +22 +0 +15 +-3 +12 +-6 +9 +-7 +10 +-9 +8 +-8 +10 +-7 +8 +-9 +9 +-7 +9 +-8 +9 +-6 +10 +-7 +9 +-7 +11 +-8 +9 +-7 +11 +-6 +-40 +-11 +-18 +4 +-9 +8 +-5 +13 +-2 +14 +-3 +14 +-1 +13 +-2 +13 +-1 +14 +-4 +12 +-4 +13 +-4 +10 +-5 +12 +-4 +11 +-6 +11 +-4 +11 +-5 +11 +-4 +12 +-6 +10 +-5 +12 +-5 +9 +-6 +10 +-5 +10 +-7 +10 +-5 +10 +-6 +9 +-5 +11 +-7 +9 +-6 +11 +-5 +9 +-7 +10 +-5 +10 +-7 +10 +-5 +10 +-6 +9 +-5 +11 +-7 +9 +-6 +11 +-6 +9 +-7 +10 +-6 +9 +-8 +9 +-6 +9 +-7 +9 +-5 +10 +-7 +9 +-6 +11 +-5 +9 +20 +1 +15 +-4 +10 +-7 +10 +-7 +9 +-9 +10 +-7 +8 +-9 +8 +-7 +9 +-9 +8 +-8 +10 +-8 +8 +-8 +10 +-7 +9 +-7 +11 +-6 +10 +-7 +-38 +-9 +-17 +3 +-9 +10 +-4 +12 +-4 +12 +-2 +13 +-3 +12 +-2 +14 +-4 +12 +-4 +13 +-4 +10 +-5 +11 +-3 +12 +-5 +10 +-4 +12 +-4 +10 +-5 +12 +-5 +10 +-6 +11 +-5 +9 +-6 +10 +-4 +11 +-6 +10 +-5 +11 +-5 +9 +-6 +10 +-6 +9 +-7 +10 +-5 +9 +-7 +10 +-5 +11 +-7 +9 +-5 +11 +-5 +9 +-6 +11 +-6 +9 +-7 +10 +-6 +8 +-7 +9 +-5 +10 +-7 +9 +-6 +10 +-6 +8 +-6 +10 +-6 +9 +-7 +10 +-6 +8 +-7 +9 +22 +1 +13 +-5 +12 +-5 +10 +-8 +9 +-7 +9 +-8 +8 +-8 +9 +-9 +8 +-8 +10 +-7 +8 +-8 +10 +-6 +10 +-8 +9 +-7 +10 +-7 +9 +-6 +-37 +-10 +-18 +4 +-7 +11 +-5 +12 +-3 +15 +-2 +12 +-3 +13 +-2 +13 +-4 +12 +-3 +12 +-5 +11 +-4 +12 +-5 +10 +-5 +12 +-5 +9 +-6 +10 +23 +1 +14 +-5 +12 +-6 +10 +-8 +10 +-7 +9 +-8 +9 +-6 +10 +-8 +9 +-7 +11 +-7 +9 +-8 +10 +-7 +9 +-8 +10 +-6 +9 +-8 +9 +-6 +-38 +-11 +-19 +4 +-7 +10 +-5 +12 +-2 +14 +-2 +12 +-2 +14 +-3 +12 +-3 +13 +-3 +11 +-5 +11 +-3 +11 +-6 +10 +-4 +11 +-5 +10 +-5 +12 +23 +1 +15 +-3 +13 +-6 +10 +-7 +11 +-7 +8 +-9 +10 +-6 +10 +-9 +9 +-6 +10 +-7 +9 +-7 +10 +-8 +9 +-7 +11 +-6 +9 +-7 +10 +-6 +-38 +-11 +-18 +4 +-8 +9 +-5 +13 +-2 +13 +-3 +13 +-1 +14 +-3 +12 +-3 +14 +-3 +11 +-5 +12 +-4 +12 +-5 +11 +-4 +11 +-6 +10 +-4 +11 +-6 +10 +-5 +12 +-4 +10 +-6 +11 +-4 +11 +-6 +10 +-5 +10 +-6 +9 +-5 +11 +-6 +9 +-6 +11 +-5 +8 +-7 +10 +-5 +10 +-7 +9 +-5 +10 +-6 +9 +-6 +11 +-6 +9 +-6 +11 +-5 +9 +-7 +10 +-5 +10 +-7 +9 +-5 +10 +-6 +8 +-6 +10 +-7 +9 +-7 +10 +-5 +9 +-7 +10 +-5 +10 +20 +0 +15 +-4 +11 +-7 +10 +-7 +9 +-8 +8 +-7 +10 +-9 +8 +-8 +10 +-7 +8 +-8 +10 +-7 +9 +-9 +9 +-7 +9 +-8 +8 +-7 +10 +-8 +-39 +-11 +-17 +4 +-10 +8 +-4 +13 +-2 +12 +-3 +14 +-2 +13 +-3 +13 +-2 +12 +-4 +12 +-3 +12 +-5 +11 +-4 +12 +-4 +10 +-6 +11 +-4 +11 +-6 +10 +-4 +11 +-5 +10 +-5 +11 +-6 +9 +-6 +11 +-5 +9 +-7 +10 +-5 +10 +-7 +9 +-5 +10 +-6 +9 +-5 +11 +-6 +9 +-6 +11 +-5 +9 +21 +1 +15 +-4 +10 +-8 +10 +-7 +9 +-9 +9 +-7 +9 +-8 +9 +-7 +10 +-9 +8 +-8 +10 +-7 +8 +-8 +10 +-6 +10 +-8 +10 +-6 +10 +-6 +-38 +-9 +-16 +3 +-9 +10 +-3 +13 +-4 +12 +-2 +14 +-2 +12 +-3 +14 +-3 +12 +-4 +12 +-3 +11 +-5 +11 +-4 +12 +-6 +10 +-5 +12 +-4 +10 +21 +2 +15 +-4 +10 +-7 +10 +-8 +8 +-9 +9 +-7 +8 +-9 +9 +-6 +10 +-8 +9 +-6 +11 +-7 +9 +-7 +11 +-7 +10 +-7 +11 +-6 +9 +-8 +9 +-6 +10 +-8 +8 +-7 +11 +-7 +9 +-7 +11 +-6 +10 +-7 +11 +-6 +10 +-7 +10 +-5 +11 +-8 +9 +-7 +11 +-6 +9 +-8 +10 +-6 +10 +-7 +11 +-6 +10 +-7 +10 +-6 +11 +-8 +9 +-7 +11 +-7 +8 +-8 +10 +-6 +10 +-8 +10 +-6 +10 +-7 +10 +-5 +11 +-7 +10 +-6 +12 +-5 +10 +-7 +-37 +-9 +-17 +3 +-8 +11 +-4 +12 +-3 +15 +-1 +13 +-3 +14 +-1 +14 +-4 +12 +-3 +13 +-3 +11 +-4 +13 +-4 +11 +-5 +12 +-4 +10 +-6 +10 +23 +2 +14 +-5 +12 +-5 +11 +-8 +9 +-6 +10 +-7 +8 +-7 +10 +-8 +8 +-8 +10 +-7 +8 +-9 +9 +-6 +10 +-8 +9 +-6 +11 +-7 +9 +-7 +-37 +-10 +-18 +3 +-7 +10 +-5 +11 +-3 +14 +-2 +12 +-3 +14 +-2 +13 +-4 +12 +-3 +12 +-4 +11 +-3 +12 +-5 +10 +-5 +12 +-4 +10 +-6 +11 +23 +1 +14 +-4 +12 +-6 +9 +-8 +9 +-7 +8 +-9 +8 +-7 +10 +-9 +8 +-8 +10 +-7 +8 +-8 +10 +-6 +10 +-8 +10 +-6 +10 +-7 +10 +-6 +11 +-7 +9 +-7 +11 +-6 +9 +-8 +10 +-6 +10 +-8 +10 +-6 +10 +-7 +10 +-6 +11 +-7 +9 +-7 +11 +-6 +9 +-8 +11 +-5 +11 +-7 +10 +-5 +-37 +-9 +-18 +5 +-7 +10 +-5 +12 +-2 +14 +-3 +12 +-2 +14 +-2 +11 +-4 +12 +-3 +12 +-5 +11 +-3 +11 +-5 +11 +-3 +12 +-5 +10 +-5 +12 +-4 +10 +-6 +11 +-4 +10 +-7 +10 +-5 +10 +-6 +9 +-5 +11 +-6 +9 +-6 +11 +-5 +9 +-6 +11 +-4 +11 +-7 +9 +-5 +10 +-6 +9 +-5 +11 +-6 +9 +-6 +11 +-5 +9 +-7 +10 +-5 +10 +-7 +9 +-6 +10 +-6 +9 +-6 +11 +-6 +9 +-6 +10 +-5 +9 +-7 +9 +-5 +10 +-7 +9 +-6 +10 +21 +-1 +13 +-4 +11 +-7 +8 +-7 +10 +-8 +8 +-8 +10 +-7 +8 +-8 +9 +-7 +9 +-9 +9 +-7 +9 +-8 +8 +-7 +10 +-8 +9 +-7 +11 +-6 +-39 +-11 +-17 +5 +-8 +8 +-5 +12 +-3 +13 +-3 +14 +-2 +13 +-3 +12 +-2 +13 +-5 +11 +-4 +13 +-4 +10 +-5 +12 +-4 +11 +-5 +11 +-4 +11 +-5 +10 +-5 +11 +-6 +10 +-6 +11 +-5 +9 +-6 +10 +-5 +10 +-7 +10 +-5 +11 +-5 +9 +-5 +11 +-6 +9 +-6 +11 +-5 +9 +-7 +10 +-5 +10 +-7 +9 +-5 +10 +-6 +9 +-6 +10 +-6 +9 +-7 +10 +-5 +9 +-7 +10 +-5 +10 +-7 +9 +-5 +11 +-6 +9 +-6 +11 +-6 +10 +-6 +11 +-5 +9 +-6 +9 +-5 +10 +-7 +8 +-6 +10 +-6 +8 +-7 +10 +-6 +9 +-7 +10 +-5 +9 +-6 +10 +-5 +10 +-7 +9 +-6 +11 +-5 +8 +-6 +11 +-5 +10 +-6 +10 +-5 +9 +-7 +9 +-5 +10 +-7 +9 +-6 +11 +-5 +8 +-7 +10 +-5 +10 +-7 +10 +-5 +10 +-6 +10 +-5 +11 +-6 +9 +-5 +11 +-5 +9 +-7 +10 +-5 +10 +-7 +10 +-5 +9 +-7 +9 +-5 +10 +-7 +8 +-6 +10 +-6 +8 +-7 +10 +-5 +10 +-7 +10 +-5 +10 +-6 +9 +-5 +11 +-6 +9 +21 +2 +15 +-5 +10 +-6 +11 +-7 +8 +-8 +10 +-7 +9 +-9 +9 +-7 +9 +-8 +9 +-6 +10 +-8 +9 +-7 +11 +-6 +9 +-8 +10 +-6 +10 +-8 +10 +-6 +9 +-7 +9 +-6 +11 +-8 +9 +-7 +11 +-6 +9 +-7 +11 +-6 +10 +-7 +10 +-6 +10 +-7 +9 +-6 +11 +-7 +9 +-7 +11 +-6 +9 +-8 +10 +-6 +10 +-7 +10 +-5 +10 +-7 +10 +-6 +11 +-7 +9 +-7 +11 +-6 +9 +-7 +10 +-6 +10 +-9 +9 +-6 +10 +-7 +9 +-6 +11 +-7 +10 +-7 +-37 +-9 +-19 +2 +-8 +11 +-4 +11 +-3 +14 +-1 +14 +-3 +14 +-1 +13 +-3 +12 +-2 +13 +-4 +11 +-4 +12 +-4 +10 +-5 +11 +-4 +11 +-5 +11 +-4 +11 +-5 +10 +-5 +11 +-6 +9 +-6 +11 +-5 +8 +-7 +10 +-5 +10 +-7 +10 +-5 +10 +-6 +9 +-5 +11 +-5 +10 +-6 +11 +-5 +9 +-7 +10 +-5 +10 +-7 +9 +-5 +10 +-6 +8 +-6 +10 +-6 +9 +-6 +11 +-5 +9 +-7 +10 +-4 +11 +-7 +9 +-5 +10 +-6 +9 +-6 +10 +-7 +9 +-6 +11 +-5 +9 +-7 +10 +-4 +10 +-7 +9 +-5 +10 +-6 +9 +-5 +11 +-6 +10 +-6 +11 +-5 +9 +-6 +10 +-4 +11 +-7 +9 +-5 +11 +-6 +9 +-6 +10 +-6 +9 +-7 +10 +-5 +8 +-7 +9 +-5 +10 +-7 +9 +-5 +11 +-5 +9 +-6 +10 +-6 +9 +-7 +10 +-5 +9 +-7 +9 +-5 +10 +-7 +8 +-6 +10 +-6 +8 +-7 +10 +-5 +10 +-7 +10 +-5 +9 +-7 +9 +-5 +10 +-7 +8 +-6 +10 +-6 +8 +-7 +10 +-5 +10 +-7 +10 +-5 +10 +-6 +9 +-5 +11 +21 +0 +14 +-3 +11 +-8 +8 +-7 +10 +-8 +8 +-8 +9 +-8 +9 +-9 +9 +-7 +8 +-9 +8 +-7 +10 +-9 +8 +-7 +10 +-7 +8 +-8 +10 +-6 +10 +-8 +10 +-6 +9 +-8 +9 +-6 +10 +-8 +9 +-7 +11 +-6 +9 +-8 +10 +-6 +10 +-8 +10 +-6 +10 +-7 +10 +-6 +11 +-8 +9 +-7 +11 +-6 +-39 +-11 +-17 +5 +-8 +9 +-4 +13 +-2 +13 +-3 +14 +-1 +12 +-3 +12 +-2 +13 +-4 +11 +-3 +13 +-3 +11 +-5 +12 +-4 +11 +-5 +11 +-4 +11 +22 +1 +16 +-3 +11 +-7 +9 +-6 +10 +-9 +8 +-7 +10 +-7 +8 +-7 +10 +-7 +9 +-8 +10 +-6 +9 +-7 +10 +-6 +10 +-8 +9 +-6 +11 +-6 +-39 +-11 +-17 +4 +-8 +9 +-4 +13 +-3 +13 +-2 +14 +-2 +12 +-4 +12 +-2 +12 +-5 +11 +-4 +11 +-5 +10 +-5 +12 +-4 +11 +-5 +12 +-4 +10 +-5 +11 +-4 +11 +-6 +9 +-5 +11 +-5 +9 +-7 +10 +-6 +9 +-7 +10 +-5 +10 +-6 +10 +-4 +11 +-6 +9 +-5 +11 +-5 +9 +-6 +10 +-5 +10 +20 +1 +15 +-5 +10 +-7 +10 +-7 +8 +-9 +9 +-7 +9 +-9 +8 +-7 +10 +-7 +8 +-8 +10 +-8 +9 +-8 +10 +-7 +8 +-8 +9 +-6 +11 +-8 +-38 +-9 +-16 +4 +-9 +10 +-3 +13 +-3 +12 +-2 +14 +-3 +12 +-3 +14 +-2 +12 +-4 +12 +-2 +12 +-5 +11 +-4 +12 +-4 +10 +-5 +11 +-5 +11 +22 +3 +16 +-4 +11 +-6 +11 +-6 +8 +-8 +10 +-7 +9 +-9 +9 +-7 +9 +-8 +9 +-7 +10 +-8 +8 +-8 +10 +-7 +8 +-8 +10 +-6 +10 +-8 +-39 +-9 +-17 +3 +-9 +10 +-4 +11 +-4 +12 +-1 +14 +-3 +12 +-2 +14 +-2 +11 +-4 +13 +-3 +12 +-5 +11 +-4 +10 +-5 +10 +-4 +11 +-6 +10 +-5 +12 +-5 +9 +-6 +10 +-4 +10 +-6 +10 +-5 +10 +-6 +9 +-5 +11 +-6 +9 +-6 +11 +-5 +8 +-7 +10 +-5 +10 +-7 +9 +-5 +10 +-6 +8 +21 +1 +13 +-6 +10 +-5 +10 +-8 +8 +-7 +10 +-7 +8 +-8 +10 +-7 +9 +-8 +9 +-7 +9 +-8 +8 +-7 +10 +-8 +9 +-7 +11 +-6 +9 +-7 +-37 +-9 +-17 +2 +-8 +10 +-4 +12 +-3 +14 +-2 +12 +-3 +13 +-1 +14 +-4 +12 +-3 +13 +-3 +11 +-4 +12 +-3 +11 +-5 +11 +-4 +11 +-5 +10 +-4 +11 +-6 +9 +-6 +11 +-5 +9 +-7 +10 +-5 +10 +-7 +10 +-5 +10 +-6 +9 +-5 +11 +-6 +9 +-6 +11 +-5 +9 +-7 +10 +-5 +10 +-7 +10 +22 +0 +14 +-5 +11 +-6 +9 +-8 +8 +-7 +9 +-9 +8 +-8 +10 +-8 +7 +-9 +9 +-8 +8 +-9 +9 +-6 +9 +-7 +9 +-6 +11 +-7 +9 +-6 +-36 +-9 +-18 +3 +-7 +10 +-4 +11 +-2 +14 +-2 +12 +-3 +14 +-2 +12 +-4 +13 +-2 +13 +-4 +11 +-3 +12 +-4 +10 +-4 +12 +-5 +10 +-6 +11 +22 +-1 +13 +-5 +12 +-6 +8 +-9 +9 +-7 +9 +-9 +8 +-7 +9 +-7 +9 +-7 +10 +-8 +9 +-7 +11 +-6 +9 +-7 +10 +-6 +10 +-8 +9 +-6 +-37 +-10 +-19 +3 +-8 +9 +-5 +11 +-2 +13 +-4 +12 +-3 +14 +-2 +11 +-4 +13 +-2 +12 +-4 +12 +-3 +11 +-5 +10 +-4 +12 +-5 +10 +-5 +12 +-4 +9 +-6 +11 +-4 +10 +-7 +10 +-5 +10 +-6 +9 +-5 +11 +-6 +9 +-6 +11 +-5 +9 +-6 +10 +-4 +10 +-7 +9 +-5 +10 +-6 +9 +-5 +10 +-6 +9 +-6 +11 +-5 +9 +-6 +10 +-5 +10 +-7 +8 +-6 +10 +-6 +9 +-6 +11 +-6 +9 +-6 +11 +-5 +9 +-6 +10 +-5 +10 +-7 +9 +-5 +10 +21 +-1 +14 +-4 +11 +-7 +9 +-7 +10 +-9 +8 +-8 +10 +-7 +7 +-9 +9 +-7 +9 +-8 +9 +-6 +10 +-7 +9 +-7 +10 +-8 +8 +-7 +10 +-6 +-39 +-12 +-18 +4 +-9 +8 +-5 +12 +-3 +13 +-3 +14 +-2 +12 +-3 +12 +-2 +13 +-4 +11 +-3 +13 +-3 +11 +-4 +12 +-3 +11 +-5 +11 +-4 +10 +-5 +10 +-4 +11 +-6 +9 +-6 +11 +-5 +9 +-7 +10 +-5 +10 +-7 +10 +-5 +9 +-6 +9 +-5 +10 +-7 +9 +-6 +11 +-5 +8 +-7 +10 +-5 +10 +-7 +9 +-5 +10 +-6 +9 +-5 +11 +-6 +9 +-6 +11 +-5 +8 +-7 +9 +-5 +10 +-7 +9 +-6 +10 +-6 +8 +-6 +10 +-7 +9 +-7 +10 +-5 +8 +19 +0 +15 +-5 +9 +-8 +10 +-7 +9 +-9 +9 +-7 +9 +-8 +9 +-6 +10 +-8 +8 +-7 +10 +-7 +8 +-8 +10 +-7 +9 +-8 +9 +-6 +10 +-7 +-39 +-10 +-17 +3 +-9 +9 +-3 +13 +-4 +12 +-2 +14 +-2 +12 +-3 +13 +-3 +12 +-4 +12 +-3 +11 +-4 +11 +-3 +12 +-5 +11 +-4 +12 +-4 +9 +21 +1 +15 +-4 +10 +-6 +10 +-7 +9 +-8 +10 +-6 +8 +-8 +9 +-6 +10 +-8 +8 +-7 +10 +-7 +8 +-8 +9 +-8 +9 +-8 +10 +-6 +10 +-7 +-38 +-9 +-17 +2 +-9 +9 +-4 +12 +-4 +12 +-2 +13 +-3 +12 +-2 +14 +-3 +12 +-4 +13 +-3 +10 +-5 +11 +-3 +11 +-6 +10 +-4 +11 +-5 +9 +21 +1 +15 +-5 +10 +-6 +10 +-8 +8 +-8 +10 +-7 +8 +-8 +9 +-6 +10 +-8 +9 +-6 +10 +-7 +8 +-7 +10 +-8 +9 +-7 +11 +-6 +8 +-8 +-38 +-9 +-17 +2 +-9 +10 +-4 +12 +-4 +13 +-1 +13 +-3 +12 +-2 +14 +-3 +12 +-3 +14 +-2 +11 +-4 +12 +-3 +12 +-5 +10 +-4 +11 +-5 +9 +-5 +11 +-6 +9 +-6 +10 +-5 +8 +-7 +10 +-4 +10 +-7 +9 +-5 +10 +-5 +9 +-5 +11 +-6 +9 +-6 +10 +-5 +9 +-6 +9 +-4 +10 +-7 +9 +-5 +11 +-5 +9 +-6 +10 +-5 +9 +-7 +9 +-5 +9 +-7 +9 +-5 +10 +-7 +8 +-6 +10 +-6 +8 +-7 +10 +-6 +9 +-7 +10 +-5 +9 +-6 +9 +22 +1 +13 +-5 +11 +-5 +10 +-8 +9 +-6 +10 +-7 +8 +-7 +10 +-7 +9 +-8 +10 +-6 +8 +-8 +9 +-7 +9 +-9 +8 +-7 +11 +-7 +8 +-7 +-37 +-10 +-18 +3 +-7 +11 +-4 +12 +-3 +14 +-1 +12 +-3 +13 +-1 +14 +-4 +12 +-3 +13 +-4 +11 +-4 +12 +-5 +10 +-5 +12 +-4 +10 +-5 +10 +-4 +11 +-6 +9 +-5 +11 +-5 +9 +-6 +10 +-6 +9 +-7 +10 +-5 +8 +-7 +9 +-5 +10 +-7 +9 +-6 +10 +-6 +8 +-6 +10 +-6 +9 +-7 +10 +22 +0 +13 +-5 +12 +-6 +8 +-8 +9 +-7 +9 +-9 +8 +-7 +9 +-8 +8 +-7 +10 +-8 +8 +-8 +10 +-6 +8 +-8 +10 +-6 +10 +-8 +10 +-6 +-37 +-10 +-18 +4 +-7 +10 +-4 +12 +-1 +14 +-3 +12 +-2 +15 +-2 +12 +-3 +13 +-2 +12 +-4 +12 +-3 +11 +-5 +10 +-4 +11 +-6 +9 +-5 +11 +22 +0 +14 +-3 +13 +-6 +9 +-7 +10 +-7 +9 +-8 +9 +-7 +9 +-8 +9 +-6 +10 +-8 +8 +-7 +10 +-7 +8 +-8 +10 +-7 +9 +-8 +9 +-6 +9 +-8 +9 +-6 +10 +-8 +9 +-7 +11 +-6 +9 +-7 +11 +-6 +10 +-7 +11 +-5 +10 +-7 +9 +-6 +11 +-7 +9 +-6 +11 +-6 +9 +-7 +11 +-5 +10 +-7 +9 +-6 +10 +-7 +9 +-6 +11 +-7 +9 +-7 +11 +-6 +9 +-7 +10 +-5 +10 +-7 +9 +-6 +10 +-7 +9 +-6 +11 +-7 +10 +-7 +11 +-5 +-38 +-11 +-17 +5 +-8 +8 +-5 +13 +-2 +13 +-3 +14 +-1 +13 +-2 +12 +-2 +14 +-4 +12 +-3 +13 +-3 +11 +-5 +12 +-3 +11 +-6 +10 +-4 +11 +22 +1 +15 +-3 +11 +-7 +10 +-6 +10 +-8 +8 +-7 +10 +-7 +7 +-9 +9 +-7 +9 +-8 +9 +-7 +9 +-8 +9 +-6 +10 +-8 +9 +-7 +11 +-6 +-39 +-11 +-17 +4 +-8 +9 +-4 +13 +-3 +12 +-3 +14 +-1 +12 +-3 +12 +-2 +13 +-5 +11 +-4 +12 +-4 +10 +-5 +11 +-4 +10 +-6 +10 +-4 +10 +21 +0 +15 +-3 +10 +-7 +10 +-6 +10 +-8 +8 +-7 +10 +-7 +8 +-7 From ca3fe1db4a9c4f4e076a5c3807b89659c1afdbc1 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Mon, 14 Sep 2020 22:22:16 +0200 Subject: [PATCH 0492/1047] more regression test, gproxII, idteck --- tools/pm3_tests.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tools/pm3_tests.sh b/tools/pm3_tests.sh index 00af93ba5..f718cc6b1 100755 --- a/tools/pm3_tests.sh +++ b/tools/pm3_tests.sh @@ -348,7 +348,9 @@ while true; do if ! CheckExecute "lf VIKING test" "$CLIENTBIN -c 'data load traces/Transit999-best.pm3;lf search 1'" "Viking ID found"; then break; fi if ! CheckExecute "lf FDX-B test" "$CLIENTBIN -c 'data load traces/homeagain1600.pm3;lf search 1'" "FDX-B ID found"; then break; fi if ! CheckExecute "lf INDALA test" "$CLIENTBIN -c 'data load traces/indala-504278295.pm3;lf search 1'" "Indala ID found"; then break; fi - if ! CheckExecute "lf FDX/BioThermo test" "$CLIENTBIN -c 'data load traces/lf_fdx_biothermo.pm3; lf fdx demo'" "95.2 F / 35.1 C"; then break; fi + if ! CheckExecute "lf FDX/BioThermo test" "$CLIENTBIN -c 'data load traces/lf_fdx_biothermo.pm3; lf fdx demod'" "95.2 F / 35.1 C"; then break; fi + if ! CheckExecute "lf GPROXII test" "$CLIENTBIN -c 'data load traces/lf_gprox_36_30_14489.pm3; lf search 1'" "Guardall G-Prox II ID found"; then break; fi + if ! CheckExecute "lf IDTECK test" "$CLIENTBIN -c 'data load traces/lf_idteck_4944544BAC40E069.pm3; lf search 1'" "Idteck ID found"; then break; fi echo -e "\n${C_BLUE}Testing HF:${C_NC}" if ! CheckExecute "hf mf offline text" "$CLIENTBIN -c 'hf mf'" "at_enc"; then break; fi From 0d58488bec38d96d3c836fc3856dbfaa8d122671 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Mon, 14 Sep 2020 22:22:40 +0200 Subject: [PATCH 0493/1047] text --- tools/pm3_tests.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/pm3_tests.sh b/tools/pm3_tests.sh index f718cc6b1..9543bf5d2 100755 --- a/tools/pm3_tests.sh +++ b/tools/pm3_tests.sh @@ -349,8 +349,8 @@ while true; do if ! CheckExecute "lf FDX-B test" "$CLIENTBIN -c 'data load traces/homeagain1600.pm3;lf search 1'" "FDX-B ID found"; then break; fi if ! CheckExecute "lf INDALA test" "$CLIENTBIN -c 'data load traces/indala-504278295.pm3;lf search 1'" "Indala ID found"; then break; fi if ! CheckExecute "lf FDX/BioThermo test" "$CLIENTBIN -c 'data load traces/lf_fdx_biothermo.pm3; lf fdx demod'" "95.2 F / 35.1 C"; then break; fi - if ! CheckExecute "lf GPROXII test" "$CLIENTBIN -c 'data load traces/lf_gprox_36_30_14489.pm3; lf search 1'" "Guardall G-Prox II ID found"; then break; fi - if ! CheckExecute "lf IDTECK test" "$CLIENTBIN -c 'data load traces/lf_idteck_4944544BAC40E069.pm3; lf search 1'" "Idteck ID found"; then break; fi + if ! CheckExecute "lf GPROXII test" "$CLIENTBIN -c 'data load traces/lf_gprox_36_30_14489.pm3; lf search 1'" "Guardall G-Prox II ID found"; then break; fi + if ! CheckExecute "lf IDTECK test" "$CLIENTBIN -c 'data load traces/lf_idteck_4944544BAC40E069.pm3; lf search 1'" "Idteck ID found"; then break; fi echo -e "\n${C_BLUE}Testing HF:${C_NC}" if ! CheckExecute "hf mf offline text" "$CLIENTBIN -c 'hf mf'" "at_enc"; then break; fi From 903d1a1d3650f8be057b2da5696a88d3957b68eb Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Tue, 15 Sep 2020 00:59:08 +0200 Subject: [PATCH 0494/1047] waveshare: add dithering --- client/src/cmdhfwaveshare.c | 376 ++++++++++++++++++++++++++++++------ 1 file changed, 320 insertions(+), 56 deletions(-) diff --git a/client/src/cmdhfwaveshare.c b/client/src/cmdhfwaveshare.c index bcddce856..a6e0b1b3e 100644 --- a/client/src/cmdhfwaveshare.c +++ b/client/src/cmdhfwaveshare.c @@ -158,7 +158,198 @@ static int read_bmp_bitmap(const uint8_t *bmp, const size_t bmpsize, uint8_t **b return PM3_SUCCESS; } -static int read_bmp_rgb(const uint8_t *bmp, const size_t bmpsize, uint8_t **black, uint8_t **red) { +static void rgb_to_gray(int16_t *chanR, int16_t *chanG, int16_t *chanB, uint16_t width, uint16_t height, int16_t *chanGrey) { + for (uint16_t Y=0; Y 0.0031308 + chanGrey[X + Y * width] = Clinear; + } + } +} + +// Floyd-Steinberg dithering +static void dither_chan_inplace(int16_t *chan, uint16_t width, uint16_t height) { + for (uint16_t Y=0; Y 127 ? 255 : 0; + chan[X + Y * width] = newp; + int16_t err = oldp - newp; + float m[] = {7,3,5,1}; + if (X < width - 1){ + chan[X + 1 + Y * width] = chan[X + 1 + Y * width] + m[0]/16 * err; + } + if (Y < height - 1) { + chan[X - 1 + (Y + 1) * width] = chan[X - 1 + (Y + 1) * width] + m[1]/16 * err; + } + if (Y < height - 1){ + chan[X + (Y + 1) * width] = chan[X + (Y + 1) * width] + m[2]/16 * err; + } + if ((X < width - 1) && (Y < height - 1)){ + chan[X + 1 + (Y + 1) * width] = chan[X + 1 + (Y + 1) * width] + m[3]/16 * err; + } + } + } +} + +static uint32_t color_compare(int16_t r1, int16_t g1, int16_t b1, int16_t r2, int16_t g2, int16_t b2) { + // Compute (square of) distance from oldR/G/B to this color + int16_t inR = r1 - r2; + int16_t inG = g1 - g2; + int16_t inB = b1 - b2; + // use RGB-to-grey weighting + float dist = 0.2126 *inR*inR + 0.7152 *inG*inG + 0.0722 *inB*inB; + return dist; +} + +static void nearest_color(int16_t oldR, int16_t oldG, int16_t oldB, uint8_t *palette, uint16_t palettelen, uint8_t *newR, uint8_t *newG, uint8_t *newB) { + uint32_t bestdist=0x7FFFFFFF; + for (uint16_t i=0; i < palettelen; i++) { + uint8_t R = palette[i*3+0]; + uint8_t G = palette[i*3+1]; + uint8_t B = palette[i*3+2]; + uint32_t dist = color_compare(oldR, oldG, oldB, R, G, B); + if (dist < bestdist) { + bestdist = dist; + *newR = R; + *newG = G; + *newB = B; + } + } +} + +static void dither_rgb_inplace(int16_t *chanR, int16_t *chanG, int16_t *chanB, uint16_t width, uint16_t height, uint8_t *palette, uint16_t palettelen) { + for (uint16_t Y=0; Y 0) { + chanR[XX - 1 + Y * width] = (chanR[XX - 1 + Y * width] + m[0]/16 * errR); + chanG[XX - 1 + Y * width] = (chanG[XX - 1 + Y * width] + m[0]/16 * errG); + chanB[XX - 1 + Y * width] = (chanB[XX - 1 + Y * width] + m[0]/16 * errB); + } + if (Y < height - 1) { + chanR[XX - 1 + (Y + 1) * width] = (chanR[XX - 1 + (Y + 1) * width] + m[3]/16 * errR); + chanG[XX - 1 + (Y + 1) * width] = (chanG[XX - 1 + (Y + 1) * width] + m[3]/16 * errG); + chanB[XX - 1 + (Y + 1) * width] = (chanB[XX - 1 + (Y + 1) * width] + m[3]/16 * errB); + } + if (Y < height - 1) { + chanR[XX + (Y + 1) * width] = (chanR[XX + (Y + 1) * width] + m[2]/16 * errR); + chanG[XX + (Y + 1) * width] = (chanG[XX + (Y + 1) * width] + m[2]/16 * errG); + chanB[XX + (Y + 1) * width] = (chanB[XX + (Y + 1) * width] + m[2]/16 * errB); + } + if ((XX < width - 1) && (Y < height - 1)) { + chanR[XX + 1 + (Y + 1) * width] = (chanR[XX + 1 + (Y + 1) * width] + m[1]/16 * errR); + chanG[XX + 1 + (Y + 1) * width] = (chanG[XX + 1 + (Y + 1) * width] + m[1]/16 * errG); + chanB[XX + 1 + (Y + 1) * width] = (chanB[XX + 1 + (Y + 1) * width] + m[1]/16 * errB); + } + } else { + if (XX < width - 1) { + chanR[XX + 1 + Y * width] = (chanR[XX + 1 + Y * width] + m[0]/16 * errR); + chanG[XX + 1 + Y * width] = (chanG[XX + 1 + Y * width] + m[0]/16 * errG); + chanB[XX + 1 + Y * width] = (chanB[XX + 1 + Y * width] + m[0]/16 * errB); + } + if (Y < height - 1) { + chanR[XX - 1 + (Y + 1) * width] = (chanR[XX - 1 + (Y + 1) * width] + m[1]/16 * errR); + chanG[XX - 1 + (Y + 1) * width] = (chanG[XX - 1 + (Y + 1) * width] + m[1]/16 * errG); + chanB[XX - 1 + (Y + 1) * width] = (chanB[XX - 1 + (Y + 1) * width] + m[1]/16 * errB); + } + if (Y < height - 1) { + chanR[XX + (Y + 1) * width] = (chanR[XX + (Y + 1) * width] + m[2]/16 * errR); + chanG[XX + (Y + 1) * width] = (chanG[XX + (Y + 1) * width] + m[2]/16 * errG); + chanB[XX + (Y + 1) * width] = (chanB[XX + (Y + 1) * width] + m[2]/16 * errB); + } + if ((XX < width - 1) && (Y < height - 1)) { + chanR[XX + 1 + (Y + 1) * width] = (chanR[XX + 1 + (Y + 1) * width] + m[3]/16 * errR); + chanG[XX + 1 + (Y + 1) * width] = (chanG[XX + 1 + (Y + 1) * width] + m[3]/16 * errG); + chanB[XX + 1 + (Y + 1) * width] = (chanB[XX + 1 + (Y + 1) * width] + m[3]/16 * errB); + } + } + } + } +} + +static void rgb_to_gray_red_inplace(int16_t *chanR, int16_t *chanG, int16_t *chanB, uint16_t width, uint16_t height) { + for (uint16_t Y=0; Y threshold_red) && (chanG[X + Y * width] < threshold_black) && (chanB[X + Y * width] < threshold_black)) { + blackmap[X + Y * width] = 0; + redmap[X + Y * width] = 1; + } else { + blackmap[X + Y * width] = 0; + redmap[X + Y * width] = 0; + } + } + } +} + +static void map8to1(uint8_t *colormap, uint16_t width, uint16_t height, uint8_t *colormap8) { + uint16_t width8; + if (width % 8 == 0) { + width8 = width / 8; + } else { + width8 = width / 8 + 1; + } + uint8_t data = 0; + uint8_t count = 0; + for (uint16_t Y=0; Y= 8) || (X == width - 1)) { + colormap8[X / 8 + Y * width8] = (~data)&0xFF; + count = 0; + data = 0; + } + data = (data << 1)&0xFF; + } + } +} + +static int read_bmp_rgb(const uint8_t *bmp, const size_t bmpsize, uint8_t **black, uint8_t **black_minus_red, uint8_t **red) { BMP_HEADER *pbmpheader = (BMP_HEADER *)bmp; // check file is full color if (pbmpheader->bpp != 24) { @@ -176,49 +367,118 @@ static int read_bmp_rgb(const uint8_t *bmp, const size_t bmpsize, uint8_t **blac } // Get BMP file data pointer uint32_t offset = pbmpheader->offset; + uint16_t width = pbmpheader->BMP_Width; + uint16_t height = pbmpheader->BMP_Height; - uint16_t X, Y; - uint16_t Image_Width_Byte = (pbmpheader->BMP_Width % 8 == 0) ? (pbmpheader->BMP_Width / 8) : (pbmpheader->BMP_Width / 8 + 1); + int16_t *chanR = calloc(width*height, sizeof(int16_t)); + if (chanR == NULL) { + return PM3_EMALLOC; + } + int16_t *chanG = calloc(width*height, sizeof(int16_t)); + if (chanG == NULL) { + free(chanR); + return PM3_EMALLOC; + } + int16_t *chanB = calloc(width*height, sizeof(int16_t)); + if (chanB == NULL) { + free(chanR); + free(chanG); + return PM3_EMALLOC; + } + + // Extracting BMP chans + for (uint16_t Y=0; YBMP_Height; Y++) { // columns - for (X = 0; X < pbmpheader->BMP_Width; X++) { // lines - B = bmp[offset++]; - G = bmp[offset++]; - R = bmp[offset++]; - if (R < 128 && G < 128 && B < 128) { - Black_data = Black_data | (1); - } else if (R > 190 && G < 90 && B < 90) { - Red_data = Red_data | (1); - } - count++; - if ((count >= 8) || (X == pbmpheader->BMP_Width - 1)) { - (*black)[X / 8 + (pbmpheader->BMP_Height - Y - 1) * Image_Width_Byte] = ~Black_data; - (*red)[X / 8 + (pbmpheader->BMP_Height - Y - 1) * Image_Width_Byte] = ~Red_data; - count = 0; - Black_data = 0; - Red_data = 0; - } - Black_data = Black_data << 1; - Red_data = Red_data << 1; - } - // Skip BMP line padding: we accumulate 3* %4 per line and need one more %4 as padding - offset += pbmpheader->BMP_Width % 4; - } + map8to1(mapBlack, width, height, *black); + map8to1(mapBlackMinusRed, width, height, *black_minus_red); + map8to1(mapRed, width, height, *red); + free(mapBlack); + free(mapBlackMinusRed); + free(mapRed); + return PM3_SUCCESS; } @@ -286,7 +546,7 @@ static int start_drawing_1in54B(uint8_t model_nr, uint8_t *black, uint8_t *red) if (model_nr == M1in54B) { step_5[2] = 100; } - PrintAndLogEx(INFO, "1.54_Step9: e-paper config2 (black)"); + PrintAndLogEx(DEBUG, "1.54_Step9: e-paper config2 (black)"); if (model_nr == M1in54B) { //1.54inch B Keychain for (i = 0; i < 50; i++) { read_black(i, step_5, model_nr, black); @@ -299,12 +559,12 @@ static int start_drawing_1in54B(uint8_t model_nr, uint8_t *black, uint8_t *red) } } PROMPT_CLEARLINE; - PrintAndLogEx(INFO, "1.54_Step6: e-paper power on"); + PrintAndLogEx(DEBUG, "1.54_Step6: e-paper power on"); ret = transceive_blocking(step_4, 2, rx, 20, actrxlen, true); //cd 04 if (ret != PM3_SUCCESS) { return ret; } - PrintAndLogEx(INFO, "1.54_Step7: e-paper config2 (red)"); + PrintAndLogEx(DEBUG, "1.54_Step7: e-paper config2 (red)"); if (model_nr == M1in54B) { //1.54inch B Keychain for (i = 0; i < 50; i++) { read_red(i, step_5, model_nr, red); @@ -318,16 +578,16 @@ static int start_drawing_1in54B(uint8_t model_nr, uint8_t *black, uint8_t *red) } PROMPT_CLEARLINE; // Send update instructions - PrintAndLogEx(INFO, "1.54_Step8: EDP load to main"); + PrintAndLogEx(DEBUG, "1.54_Step8: EDP load to main"); ret = transceive_blocking(step_6, 2, rx, 20, actrxlen, true); //cd 06 if (ret != PM3_SUCCESS) { return ret; } - PrintAndLogEx(INFO, "1.54_Step9"); + PrintAndLogEx(DEBUG, "1.54_Step9"); return PM3_SUCCESS; } -static int start_drawing(uint8_t model_nr, uint8_t *black, uint8_t *red) { +static int start_drawing(uint8_t model_nr, uint8_t *black, uint8_t *black_minus_red, uint8_t *red) { uint8_t progress = 0; uint8_t step0[2] = {0xcd, 0x0d}; uint8_t step1[3] = {0xcd, 0x00, 10}; //select e-paper type and reset e-paper 4:2.13inch e-Paper 7:2.9inch e-Paper 10:4.2inch e-Paper 14:7.5inch e-Paper @@ -381,12 +641,12 @@ static int start_drawing(uint8_t model_nr, uint8_t *black, uint8_t *red) { } PrintAndLogEx(DEBUG, "model_nr = %d", model_nr); int ret; - PrintAndLogEx(INFO, "Step0"); + PrintAndLogEx(DEBUG, "Step0"); ret = transceive_blocking(step0, 2, rx, 20, actrxlen, true); //cd 0d if (ret != PM3_SUCCESS) { return ret; } - PrintAndLogEx(INFO, "Step1: e-paper config"); + PrintAndLogEx(DEBUG, "Step1: e-paper config"); //step1[2] screen model //step8[2] nr of bytes sent at once //step13[2] nr of bytes sent for the second time @@ -432,19 +692,19 @@ static int start_drawing(uint8_t model_nr, uint8_t *black, uint8_t *red) { return ret; } msleep(100); - PrintAndLogEx(INFO, "Step2: e-paper normal mode type"); + PrintAndLogEx(DEBUG, "Step2: e-paper normal mode type"); ret = transceive_blocking(step2, 2, rx, 20, actrxlen, true); //cd 01 if (ret != PM3_SUCCESS) { return ret; } msleep(100); - PrintAndLogEx(INFO, "Step3: e-paper config1"); + PrintAndLogEx(DEBUG, "Step3: e-paper config1"); ret = transceive_blocking(step3, 2, rx, 20, actrxlen, true); //cd 02 if (ret != PM3_SUCCESS) { return ret; } msleep(200); - PrintAndLogEx(INFO, "Step4: e-paper power on"); + PrintAndLogEx(DEBUG, "Step4: e-paper power on"); ret = transceive_blocking(step4, 2, rx, 20, actrxlen, true); //cd 03 if (ret != PM3_SUCCESS) { return ret; @@ -452,30 +712,30 @@ static int start_drawing(uint8_t model_nr, uint8_t *black, uint8_t *red) { if (model_nr == M1in54B) { // 1.54B Keychain handler PrintAndLogEx(DEBUG, "Start_Drawing_1in54B"); - ret = start_drawing_1in54B(model_nr, black, red); + ret = start_drawing_1in54B(model_nr, black_minus_red, red); if (ret != PM3_SUCCESS) { return ret; } //1.54B Data transfer is complete and wait for refresh } else { - PrintAndLogEx(INFO, "Step5: e-paper config2"); + PrintAndLogEx(DEBUG, "Step5: e-paper config2"); ret = transceive_blocking(step5, 2, rx, 20, actrxlen, true); //cd 05 if (ret != PM3_SUCCESS) { return ret; } msleep(100); - PrintAndLogEx(INFO, "Step6: EDP load to main") ; + PrintAndLogEx(DEBUG, "Step6: EDP load to main") ; ret = transceive_blocking(step6, 2, rx, 20, actrxlen, true); //cd 06 if (ret != PM3_SUCCESS) { return ret; } msleep(100); - PrintAndLogEx(INFO, "Step7: Data preparation"); + PrintAndLogEx(DEBUG, "Step7: Data preparation"); ret = transceive_blocking(step7, 2, rx, 20, actrxlen, true); //cd 07 if (ret != PM3_SUCCESS) { return ret; } - PrintAndLogEx(INFO, "Step8: Start data transfer"); + PrintAndLogEx(DEBUG, "Step8: Start data transfer"); if (model_nr == M2in13) { //2.13inch for (i = 0; i < 250; i++) { read_black(i, step8, model_nr, black); @@ -519,7 +779,7 @@ static int start_drawing(uint8_t model_nr, uint8_t *black, uint8_t *red) { } } else if (model_nr == M2in13B) { //2.13inch B for (i = 0; i < 26; i++) { - read_black(i, step8, model_nr, black); + read_black(i, step8, model_nr, black_minus_red); ret = transceive_blocking(step8, 109, rx, 20, actrxlen, true); // cd 08 if (ret != PM3_SUCCESS) { return ret; @@ -557,7 +817,7 @@ static int start_drawing(uint8_t model_nr, uint8_t *black, uint8_t *red) { } } PROMPT_CLEARLINE; - PrintAndLogEx(INFO, "Step9: e-paper power on"); + PrintAndLogEx(DEBUG, "Step9: e-paper power on"); if (model_nr == M2in13 || model_nr == M2in9 || model_nr == M4in2 || model_nr == M7in5 || model_nr == M7in5HD) { ret = transceive_blocking(step9, 2, rx, 20, actrxlen, true); //cd 18 // The black-and-white screen sending backplane is also shielded, with no effect. Except 2.7 @@ -569,7 +829,7 @@ static int start_drawing(uint8_t model_nr, uint8_t *black, uint8_t *red) { if (ret != PM3_SUCCESS) { return ret; } - PrintAndLogEx(INFO, "Step9b"); + PrintAndLogEx(DEBUG, "Step9b"); if (model_nr == M2in7) { for (i = 0; i < 48; i++) { read_black(i, step13, model_nr, black); @@ -594,14 +854,14 @@ static int start_drawing(uint8_t model_nr, uint8_t *black, uint8_t *red) { } PROMPT_CLEARLINE; } - PrintAndLogEx(INFO, "Step10: Refresh e-paper"); + PrintAndLogEx(DEBUG, "Step10: Refresh e-paper"); ret = transceive_blocking(step10, 2, rx, 20, actrxlen, true); //cd 09 refresh command if (ret != PM3_SUCCESS) { return ret; } msleep(200); } - PrintAndLogEx(INFO, "Step11: Wait tag to be ready"); + PrintAndLogEx(DEBUG, "Step11: Wait tag to be ready"); if (model_nr == M2in13B || model_nr == M1in54B) { // Black, white and red screen refresh time is longer, wait first msleep(9000); } else if (model_nr == M7in5HD) { @@ -635,7 +895,7 @@ static int start_drawing(uint8_t model_nr, uint8_t *black, uint8_t *red) { } } } - PrintAndLogEx(INFO, "Step12: e-paper power off command"); + PrintAndLogEx(DEBUG, "Step12: e-paper power off command"); ret = transceive_blocking(step12, 2, rx, 20, actrxlen, true); //cd 04 if (ret != PM3_SUCCESS) { return ret; @@ -693,6 +953,7 @@ static int CmdHF14AWSLoadBmp(const char *Cmd) { uint8_t *bmp = NULL; uint8_t *black = NULL; + uint8_t *black_minus_red = NULL; uint8_t *red = NULL; size_t bytes_read = 0; if (loadFile_safe(filename, ".bmp", (void **)&bmp, &bytes_read) != PM3_SUCCESS) { @@ -713,7 +974,7 @@ static int CmdHF14AWSLoadBmp(const char *Cmd) { } } else if (depth == 24) { PrintAndLogEx(DEBUG, "BMP file is a RGB"); - if (read_bmp_rgb(bmp, bytes_read, &black, &red) != PM3_SUCCESS) { + if (read_bmp_rgb(bmp, bytes_read, &black, &black_minus_red, &red) != PM3_SUCCESS) { free(bmp); return PM3_ESOFT; } @@ -728,8 +989,11 @@ static int CmdHF14AWSLoadBmp(const char *Cmd) { } free(bmp); - start_drawing(model_nr, black, red); + start_drawing(model_nr, black, black_minus_red, red); free(black); + if (black_minus_red != NULL) { + free(black_minus_red); + } if (red != NULL) { free(red); } From b4e513a2bbc3f421ba2a26fcda084dde92150163 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Tue, 15 Sep 2020 04:28:52 +0200 Subject: [PATCH 0495/1047] inital draft --- doc/cloner_notes.md | 52 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 doc/cloner_notes.md diff --git a/doc/cloner_notes.md b/doc/cloner_notes.md new file mode 100644 index 000000000..b3f33a1c4 --- /dev/null +++ b/doc/cloner_notes.md @@ -0,0 +1,52 @@ +# Notes on Cloner gunes + +This document is based mostly on information posted on http://www.proxmark.org/forum/viewtopic.php?pid=39903#p39903 + +- [Blue and black cloners](#blue-and-black-cloners) +- [White cloner (pre 2015)](#white-cloner-(pre-2015)) +- [White cloner (after 2016)](#white-cloner-(after-2016)) +- [White cloner (after 2016 D Quality)](#white-cloner-(after-2016-d-quality)) +- [restore page1 data](#restore-page1-data) + + +# Blue and black cloners + +3 variants: + 1) EM cloner + 2) HID cloner + 3) EM/HID cloner + +Quality varies my manufacturer (Quality A (Good) until D (Bad)) +They set a password on block 7 of the chip and set the password enable bit in block 0 +Standard password is normally: 51243648 +Be sure to purchase the EM/HID version + +# White cloner (pre 2015) +Multifrequency +Buttons light up BLUE +Reads data correctly +Standard password is normally (for T55xx): *AA55BBBB* +Standard password 13,56mHz: individual per white cloner +Coil performance acceptable + +# White cloner (after 2016) +Multifrequency +Buttons light up WHITE +Data scrambled (variable per individual cloner, possibly due to prevent legal issues) +Standard password is normally (for T55xx): *AA55BBBB* +Standard password 13,56mHz: individual per white cloner +Coil performance good + +# White cloner (after 2016 D Quality) +Multifrequency (Well it says so....but it doesn't....) +Only works for EM/HID card (125kHz) +High frequency not working +Standard password is normally (for T55xx): *AA55BBBB* +*Note: Sets the HID card in TEST MODE* + + +# Restore page1 data +``` +lf t55xx write b 1 d E0150A48 1 +If t55xx write b 2 d 2D782308 1 +``` From 85a86e30098cfb27cf623e8f99fa468b71889ace Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Tue, 15 Sep 2020 04:30:30 +0200 Subject: [PATCH 0496/1047] link --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 076161cbe..287648038 100644 --- a/README.md +++ b/README.md @@ -33,7 +33,7 @@ |[Notes on external flash](/doc/ext_flash_notes.md)|[Notes on loclass](/doc/loclass_notes.md)|[Notes on Coverity Scan Config & Run](/doc/md/Development/Coverity-Scan-Config-%26-Run.md)| |[Notes on file formats used with Proxmark3](/doc/extensions_notes.md)|[Notes on MFU binary format](/doc/mfu_binary_format_notes.md)|[Notes on FPGA & ARM](/doc/fpga_arm_notes.md)| |[Developing standalone mode](/armsrc/Standalone/readme.md)|[Wiki about standalone mode](https://github.com/RfidResearchGroup/proxmark3/wiki/Standalone-mode)|[Notes on Magic cards](/doc/magic_cards_notes.md)| -|[Notes on Color usage](/doc/colors_notes.md)|[Makefile vs CMake](/doc/md/Development/Makefile-vs-CMake.md)| +|[Notes on Color usage](/doc/colors_notes.md)|[Makefile vs CMake](/doc/md/Development/Makefile-vs-CMake.md)|[Notes on Cloner guns](/doc/cloner_notes.md)| ## Build for non-RDV4 Proxmark3 platforms From 5e06eb9ca529a7ea4c9c2dab26a4d3947bae821b Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Tue, 15 Sep 2020 04:33:50 +0200 Subject: [PATCH 0497/1047] text --- client/src/crypto/libpcrypto.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/client/src/crypto/libpcrypto.c b/client/src/crypto/libpcrypto.c index 2ed0b6bc7..3d8e7ffc4 100644 --- a/client/src/crypto/libpcrypto.c +++ b/client/src/crypto/libpcrypto.c @@ -372,7 +372,7 @@ int ecdsa_signature_verify(mbedtls_ecp_group_id curveid, uint8_t *key_xy, uint8_ return res; } - +// take signature bytes, converts to ASN1 signature and tries to verify int ecdsa_signature_r_s_verify(mbedtls_ecp_group_id curveid, uint8_t *key_xy, uint8_t *input, int length, uint8_t *r_s, size_t r_s_len, bool hash) { int res; uint8_t signature[MBEDTLS_ECDSA_MAX_LEN]; @@ -391,10 +391,8 @@ int ecdsa_signature_r_s_verify(mbedtls_ecp_group_id curveid, uint8_t *key_xy, ui } res = ecdsa_signature_verify(curveid, key_xy, input, length, signature, signature_len, hash); - mbedtls_mpi_free(&r); mbedtls_mpi_free(&s); - return res; } From dec00805cf4da6665b777adcbdbe61efb83ce324 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Tue, 15 Sep 2020 04:37:29 +0200 Subject: [PATCH 0498/1047] working links --- doc/cloner_notes.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/cloner_notes.md b/doc/cloner_notes.md index b3f33a1c4..378b5ba4a 100644 --- a/doc/cloner_notes.md +++ b/doc/cloner_notes.md @@ -3,9 +3,9 @@ This document is based mostly on information posted on http://www.proxmark.org/forum/viewtopic.php?pid=39903#p39903 - [Blue and black cloners](#blue-and-black-cloners) -- [White cloner (pre 2015)](#white-cloner-(pre-2015)) -- [White cloner (after 2016)](#white-cloner-(after-2016)) -- [White cloner (after 2016 D Quality)](#white-cloner-(after-2016-d-quality)) +- [White cloner (pre 2015)](#white-cloner-pre-2015) +- [White cloner (after 2016)](#white-cloner-after-2016) +- [White cloner (after 2016 D Quality)](#white-cloner-after-2016-d-quality) - [restore page1 data](#restore-page1-data) From 64a4abf60f052896a97579a1f3da0546eae8b4eb Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Tue, 15 Sep 2020 04:43:22 +0200 Subject: [PATCH 0499/1047] rework --- doc/cloner_notes.md | 33 ++++++++++++++++++++++----------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/doc/cloner_notes.md b/doc/cloner_notes.md index 378b5ba4a..6937e4c06 100644 --- a/doc/cloner_notes.md +++ b/doc/cloner_notes.md @@ -12,37 +12,48 @@ This document is based mostly on information posted on http://www.proxmark.org/f # Blue and black cloners 3 variants: - 1) EM cloner - 2) HID cloner - 3) EM/HID cloner +1. EM cloner +2. HID cloner +3. EM/HID cloner Quality varies my manufacturer (Quality A (Good) until D (Bad)) They set a password on block 7 of the chip and set the password enable bit in block 0 +``` Standard password is normally: 51243648 -Be sure to purchase the EM/HID version +``` +**Be sure to purchase the EM/HID version** # White cloner (pre 2015) + Multifrequency Buttons light up BLUE Reads data correctly -Standard password is normally (for T55xx): *AA55BBBB* -Standard password 13,56mHz: individual per white cloner Coil performance acceptable +``` +Standard password is normally (for T55xx): AA55BBBB +Standard password 13,56mHz: individual per white cloner +``` + # White cloner (after 2016) Multifrequency Buttons light up WHITE Data scrambled (variable per individual cloner, possibly due to prevent legal issues) -Standard password is normally (for T55xx): *AA55BBBB* -Standard password 13,56mHz: individual per white cloner Coil performance good +``` +Standard password is normally (for T55xx): AA55BBBB +Standard password 13,56mHz: individual per white cloner +``` + # White cloner (after 2016 D Quality) -Multifrequency (Well it says so....but it doesn't....) +Multifrequency (it says so but it doesn't) Only works for EM/HID card (125kHz) High frequency not working -Standard password is normally (for T55xx): *AA55BBBB* -*Note: Sets the HID card in TEST MODE* +``` +Standard password is normally (for T55xx): AA55BBBB +``` +**Note: Sets the HID card in TEST MODE** # Restore page1 data From 754a4520fb0a2f76d4ecd4212f9f0f5e1f2c5c5a Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Tue, 15 Sep 2020 06:02:24 +0200 Subject: [PATCH 0500/1047] spark1 public key --- client/src/cmdhf15.c | 1 + 1 file changed, 1 insertion(+) diff --git a/client/src/cmdhf15.c b/client/src/cmdhf15.c index 1cba1e6a0..421e7488f 100644 --- a/client/src/cmdhf15.c +++ b/client/src/cmdhf15.c @@ -381,6 +381,7 @@ static int nxp_15693_print_signature(uint8_t *uid, uint8_t *signature) { {"NXP Ultralight Ev1", "0490933BDCD6E99B4E255E3DA55389A827564E11718E017292FAF23226A96614B8"}, {"NXP NTAG21x (2013)", "04494E1A386D3D3CFE3DC10E5DE68A499B1C202DB5B132393E89ED19FE5BE8BC61"}, {"MICRON Public key", "04f971eda742a4a80d32dcf6a814a707cc3dc396d35902f72929fdcd698b3468f2"}, + {"Spark1 Public key", "04d64bb732c0d214e7ec580736acf847284b502c25c0f7f2fa86aace1dada4387a"}, }; /* uint8_t nxp_15693_public_keys[][PUBLIC_ECDA_KEYLEN] = { From 102d8830a1bf460bfee00f93708c6f3effd4c1b1 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Tue, 15 Sep 2020 06:46:24 +0200 Subject: [PATCH 0501/1047] rothult - read and decode NDEF --- client/src/cmdhfst.c | 112 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 110 insertions(+), 2 deletions(-) diff --git a/client/src/cmdhfst.c b/client/src/cmdhfst.c index c38009eed..fe741b002 100644 --- a/client/src/cmdhfst.c +++ b/client/src/cmdhfst.c @@ -18,6 +18,7 @@ #include "cmdhf14a.h" #include "protocols.h" // definitions of ISO14A/7816 protocol #include "emv/apduinfo.h" // GetAPDUCodeDescription +#include "mifare/ndef.h" // NDEFRecordsDecodeAndPrint #define TIMEOUT 2000 static int CmdHelp(const char *Cmd); @@ -30,7 +31,6 @@ static int usage_hf_st_info(void) { PrintAndLogEx(NORMAL, _YELLOW_(" hf st info")); return PM3_SUCCESS; } - static int usage_hf_st_sim(void) { PrintAndLogEx(NORMAL, "\n Emulating ST25TA512B tag with 7 byte UID\n"); PrintAndLogEx(NORMAL, "Usage: hf st sim [h] u "); @@ -38,7 +38,17 @@ static int usage_hf_st_sim(void) { PrintAndLogEx(NORMAL, " h : This help"); PrintAndLogEx(NORMAL, " u : 7 byte UID"); PrintAndLogEx(NORMAL, "Examples:"); - PrintAndLogEx(NORMAL, _YELLOW_(" hf 14a sim u 02E2007D0FCA4C")); + PrintAndLogEx(NORMAL, _YELLOW_(" hf st sim u 02E2007D0FCA4C")); + return PM3_SUCCESS; +} +static int usage_hf_st_ndef(void) { + PrintAndLogEx(NORMAL, "\n Print NFC Data Exchange Format (NDEF)\n"); + PrintAndLogEx(NORMAL, "Usage: hf st ndef [h] p "); + PrintAndLogEx(NORMAL, "Options:"); + PrintAndLogEx(NORMAL, " h : This help"); + PrintAndLogEx(NORMAL, " p : 16 byte password"); + PrintAndLogEx(NORMAL, "Examples:"); + PrintAndLogEx(NORMAL, _YELLOW_(" hf st ndef p 82E80053D4CA5C0B656D852CC696C8A1")); return PM3_SUCCESS; } @@ -334,6 +344,103 @@ static int cmd_hf_st_sim(const char *Cmd) { return CmdHF14ASim(param); } +static int cmd_hf_st_ndef(const char *Cmd) { + char c = tolower(param_getchar(Cmd, 0)); + if (c == 'h' || c == 0x00) return usage_hf_st_ndef(); + + int pwdlen = 0; + uint8_t cmdp = 0; + uint8_t pwd[16] = {0}; + if (c == 'p') { + param_gethex_ex(Cmd, cmdp + 1, pwd, &pwdlen); + pwdlen >>= 1; + if (pwdlen != 16) { + return usage_hf_st_ndef(); + } + } + + bool activate_field = true; + bool keep_field_on = true; + uint8_t response[PM3_CMD_DATA_SIZE]; + int resplen = 0; + + // --------------- Select NDEF Tag application ---------------- + uint8_t aSELECT_AID[80]; + int aSELECT_AID_n = 0; + param_gethex_to_eol("00a4040007d276000085010100", 0, aSELECT_AID, sizeof(aSELECT_AID), &aSELECT_AID_n); + int res = ExchangeAPDU14a(aSELECT_AID, aSELECT_AID_n, activate_field, keep_field_on, response, sizeof(response), &resplen); + if (res) + return res; + + if (resplen < 2) + return PM3_ESOFT; + + uint16_t sw = get_sw(response, resplen); + if (sw != 0x9000) { + PrintAndLogEx(ERR, "Selecting NDEF aid failed (%04x - %s).", sw, GetAPDUCodeDescription(sw >> 8, sw & 0xff)); + return PM3_ESOFT; + } + + activate_field = false; + keep_field_on = true; + + // --------------- NDEF file reading ---------------- + uint8_t aSELECT_FILE_NDEF[30]; + int aSELECT_FILE_NDEF_n = 0; + param_gethex_to_eol("00a4000c020001", 0, aSELECT_FILE_NDEF, sizeof(aSELECT_FILE_NDEF), &aSELECT_FILE_NDEF_n); + res = ExchangeAPDU14a(aSELECT_FILE_NDEF, aSELECT_FILE_NDEF_n, activate_field, keep_field_on, response, sizeof(response), &resplen); + if (res) + return res; + + sw = get_sw(response, resplen); + if (sw != 0x9000) { + PrintAndLogEx(ERR, "Selecting NDEF file failed (%04x - %s).", sw, GetAPDUCodeDescription(sw >> 8, sw & 0xff)); + return PM3_ESOFT; + } + + // --------------- VERIFY ---------------- + uint8_t aVERIFY[30]; + int aVERIFY_n = 0; + param_gethex_to_eol("0020000100", 0, aVERIFY, sizeof(aVERIFY), &aVERIFY_n); + res = ExchangeAPDU14a(aVERIFY, aVERIFY_n, activate_field, keep_field_on, response, sizeof(response), &resplen); + if (res) + return res; + + sw = get_sw(response, resplen); + if (sw == 0x6300) { + // need to provide 16byte password + param_gethex_to_eol("0020000110", 0, aVERIFY, sizeof(aVERIFY), &aVERIFY_n); + memcpy(aVERIFY + aVERIFY_n, pwd, pwdlen); + res = ExchangeAPDU14a(aVERIFY, aVERIFY_n + pwdlen, activate_field, keep_field_on, response, sizeof(response), &resplen); + if (res) + return res; + + sw = get_sw(response, resplen); + if (sw != 0x9000) { + PrintAndLogEx(ERR, "Verify password failed (%04x - %s).", sw, GetAPDUCodeDescription(sw >> 8, sw & 0xff)); + return PM3_ESOFT; + } + } + + keep_field_on = false; + uint8_t aREAD_NDEF[30]; + int aREAD_NDEF_n = 0; + param_gethex_to_eol("00b000001d", 0, aREAD_NDEF, sizeof(aREAD_NDEF), &aREAD_NDEF_n); + res = ExchangeAPDU14a(aREAD_NDEF, aREAD_NDEF_n, activate_field, keep_field_on, response, sizeof(response), &resplen); + if (res) + return res; + + sw = get_sw(response, resplen); + if (sw != 0x9000) { + PrintAndLogEx(ERR, "reading NDEF file failed (%04x - %s).", sw, GetAPDUCodeDescription(sw >> 8, sw & 0xff)); + return PM3_ESOFT; + } + + PrintAndLogEx(INFO, "ice: %s", sprint_hex_inrow(response + 2, resplen - 4)); + NDEFRecordsDecodeAndPrint(response + 2, resplen - 4); + return PM3_SUCCESS; +} + static int cmd_hf_st_list(const char *Cmd) { (void)Cmd; // Cmd is not used so far CmdTraceList("7816"); @@ -344,6 +451,7 @@ static command_t CommandTable[] = { {"help", CmdHelp, AlwaysAvailable, "This help"}, {"info", cmd_hf_st_info, IfPm3Iso14443a, "Tag information"}, {"list", cmd_hf_st_list, AlwaysAvailable, "List ISO 14443A/7816 history"}, + {"ndef", cmd_hf_st_ndef, AlwaysAvailable, "read NDEF file on tag"}, {"sim", cmd_hf_st_sim, IfPm3Iso14443a, "Fake ISO 14443A/ST tag"}, {NULL, NULL, NULL, NULL} }; From 2ae3a84db65b16c3eb0b2dfbf2913587370fea45 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Tue, 15 Sep 2020 11:46:41 +0200 Subject: [PATCH 0502/1047] remove debugstatement --- client/src/cmdhfst.c | 1 - 1 file changed, 1 deletion(-) diff --git a/client/src/cmdhfst.c b/client/src/cmdhfst.c index fe741b002..9aa44eea0 100644 --- a/client/src/cmdhfst.c +++ b/client/src/cmdhfst.c @@ -436,7 +436,6 @@ static int cmd_hf_st_ndef(const char *Cmd) { return PM3_ESOFT; } - PrintAndLogEx(INFO, "ice: %s", sprint_hex_inrow(response + 2, resplen - 4)); NDEFRecordsDecodeAndPrint(response + 2, resplen - 4); return PM3_SUCCESS; } From edebf17be558989b55071b9d9724aaaf2bc97428 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Tue, 15 Sep 2020 17:26:24 +0200 Subject: [PATCH 0503/1047] keep WDT happy --- armsrc/legicrfsim.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/armsrc/legicrfsim.c b/armsrc/legicrfsim.c index 74609b326..00b40efb2 100644 --- a/armsrc/legicrfsim.c +++ b/armsrc/legicrfsim.c @@ -53,7 +53,7 @@ static uint32_t last_frame_end; /* ts of last bit of previews rx or tx frame */ #define RWD_TIME_PAUSE 4 /* 18.9us */ #define RWD_TIME_1 21 /* RWD_TIME_PAUSE 18.9us off + 80.2us on = 99.1us */ #define RWD_TIME_0 13 /* RWD_TIME_PAUSE 18.9us off + 42.4us on = 61.3us */ -#define RWD_CMD_TIMEOUT 120 /* 120 * 99.1us (arbitrary value) */ +#define RWD_CMD_TIMEOUT 400 /* 120 * 99.1us (arbitrary value) */ #define RWD_MIN_FRAME_LEN 6 /* Shortest frame is 6 bits */ #define RWD_MAX_FRAME_LEN 23 /* Longest frame is 23 bits */ @@ -68,6 +68,7 @@ static uint32_t last_frame_end; /* ts of last bit of previews rx or tx frame */ // Note: inlining this function would fail with -Os static bool wait_for(bool value, const uint32_t timeout) { while ((bool)(AT91C_BASE_PIOA->PIO_PDSR & GPIO_SSC_DIN) != value) { + WDT_HIT(); if (GetCountSspClk() > timeout) { return false; } @@ -215,7 +216,7 @@ static int32_t rx_frame(uint8_t *len) { last_frame_end -= 2; // wait for first pause (start of frame) - for (uint8_t i = 0; true; ++i) { + for (uint16_t i = 0; true; ++i) { // increment prng every TAG_BIT_PERIOD last_frame_end += TAG_BIT_PERIOD; legic_prng_forward(1); From 002029d32d5c24ab62f57cffce858e887940cdcd Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Tue, 15 Sep 2020 17:36:07 +0200 Subject: [PATCH 0504/1047] textual --- .../Windows-Installation-Instructions.md | 7 +++++++ doc/md/Use_of_Proxmark/0_Compilation-Instructions.md | 7 +++++++ 2 files changed, 14 insertions(+) diff --git a/doc/md/Installation_Instructions/Windows-Installation-Instructions.md b/doc/md/Installation_Instructions/Windows-Installation-Instructions.md index 02e8a2201..8930c0a04 100644 --- a/doc/md/Installation_Instructions/Windows-Installation-Instructions.md +++ b/doc/md/Installation_Instructions/Windows-Installation-Instructions.md @@ -76,8 +76,15 @@ If you want to run the graphical components of the Proxmark3 client, you need to Enter WSL prompt (`wsl`) and from there, follow the [Linux Installation Instructions](/doc/md/Installation_Instructions/Linux-Installation-Instructions.md) for Ubuntu, summarized here below: +Make sure your WSL guest OS is up-to-date first ```sh sudo apt-get update +sudo apt-get upgrade -y +sudo apt-get auto-remove -y +``` + +Install dependencies +```sh sudo apt-get install --no-install-recommends git ca-certificates build-essential pkg-config \ libreadline-dev gcc-arm-none-eabi libnewlib-dev libbz2-dev qtbase5-dev ``` diff --git a/doc/md/Use_of_Proxmark/0_Compilation-Instructions.md b/doc/md/Use_of_Proxmark/0_Compilation-Instructions.md index e423752ab..c40d18458 100644 --- a/doc/md/Use_of_Proxmark/0_Compilation-Instructions.md +++ b/doc/md/Use_of_Proxmark/0_Compilation-Instructions.md @@ -24,6 +24,13 @@ git pull make clean && make all ``` +### if you got an error +Read the [troubleshooting guide](/doc/md/Installation_Instructions/Troubleshooting.md), + +For instance, on WSl-1 you usually get the _libQt5Core.so.5 not found_ message +[solution](/doc/md/Installation_Instructions/Troubleshooting.md#libQt5Coreso5-not-found) + + ## Install This is an optional step. If you do From 32e04483fc6b6f02609e4422e4eee20e067ec333 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Tue, 15 Sep 2020 20:01:34 +0200 Subject: [PATCH 0505/1047] ws 4.2 tested, thans @tcprst! --- client/src/cmdhfwaveshare.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/src/cmdhfwaveshare.c b/client/src/cmdhfwaveshare.c index a6e0b1b3e..a2cce258f 100644 --- a/client/src/cmdhfwaveshare.c +++ b/client/src/cmdhfwaveshare.c @@ -80,7 +80,7 @@ typedef enum { static model_t models[] = { {"2.13 inch e-paper", 16, 122, 250}, // tested {"2.9 inch e-paper", 16, 128, 296}, - {"4.2 inch e-paper", 100, 400, 300}, + {"4.2 inch e-paper", 100, 400, 300}, // tested {"7.5 inch e-paper", 120, 480, 800}, {"2.7 inch e-paper", 121, 276, 176}, {"2.13 inch e-paper B", 106, 212, 104}, From 6ac7d282838fad467adc421b4b2196481badb214 Mon Sep 17 00:00:00 2001 From: tcprst Date: Tue, 15 Sep 2020 16:51:36 -0400 Subject: [PATCH 0506/1047] add ST25TA64K chip model --- client/src/cmdhfst.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/client/src/cmdhfst.c b/client/src/cmdhfst.c index 9aa44eea0..e16b513e4 100644 --- a/client/src/cmdhfst.c +++ b/client/src/cmdhfst.c @@ -79,6 +79,9 @@ static char *get_st_chip_model(uint8_t pc) { case 0xC: sprintf(s, "SRT512"); break; + case 0xC4: + sprintf(s, "ST25TA64K"); + break; case 0xE2: sprintf(s, "ST25??? IKEA Rothult"); break; From 9209f8fb7f305d79afa943619ae343c1c76f0176 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Tue, 15 Sep 2020 23:00:13 +0200 Subject: [PATCH 0507/1047] ws: another guess at width/height based on Android SDK decompilation --- client/src/cmdhfwaveshare.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/src/cmdhfwaveshare.c b/client/src/cmdhfwaveshare.c index a2cce258f..ad260e988 100644 --- a/client/src/cmdhfwaveshare.c +++ b/client/src/cmdhfwaveshare.c @@ -79,9 +79,9 @@ typedef enum { static model_t models[] = { {"2.13 inch e-paper", 16, 122, 250}, // tested - {"2.9 inch e-paper", 16, 128, 296}, + {"2.9 inch e-paper", 16, 296, 128}, {"4.2 inch e-paper", 100, 400, 300}, // tested - {"7.5 inch e-paper", 120, 480, 800}, + {"7.5 inch e-paper", 120, 800, 480}, {"2.7 inch e-paper", 121, 276, 176}, {"2.13 inch e-paper B", 106, 212, 104}, {"1.54 inch e-paper B", 100, 200, 200}, From e15ebbe3d0737956e78c0e7d0d9444dc4168a03d Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Tue, 15 Sep 2020 23:59:53 +0200 Subject: [PATCH 0508/1047] ws: generate only needed version and add option to save conversion to file --- client/src/cmdhfwaveshare.c | 213 ++++++++++++++++++++++-------------- 1 file changed, 129 insertions(+), 84 deletions(-) diff --git a/client/src/cmdhfwaveshare.c b/client/src/cmdhfwaveshare.c index ad260e988..0483af94c 100644 --- a/client/src/cmdhfwaveshare.c +++ b/client/src/cmdhfwaveshare.c @@ -78,24 +78,25 @@ typedef enum { } model_enum_t; static model_t models[] = { - {"2.13 inch e-paper", 16, 122, 250}, // tested - {"2.9 inch e-paper", 16, 296, 128}, - {"4.2 inch e-paper", 100, 400, 300}, // tested - {"7.5 inch e-paper", 120, 800, 480}, - {"2.7 inch e-paper", 121, 276, 176}, - {"2.13 inch e-paper B", 106, 212, 104}, - {"1.54 inch e-paper B", 100, 200, 200}, - {"7.5 inch e-paper HD", 120, 880, 528}, + {"2.13 inch e-paper", 16, 122, 250}, // tested + {"2.9 inch e-paper", 16, 296, 128}, + {"4.2 inch e-paper", 100, 400, 300}, // tested + {"7.5 inch e-paper", 120, 800, 480}, + {"2.7 inch e-paper", 121, 276, 176}, + {"2.13 inch e-paper B (with red)", 106, 212, 104}, + {"1.54 inch e-paper B (with red)", 100, 200, 200}, + {"7.5 inch e-paper HD", 120, 880, 528}, }; static int CmdHelp(const char *Cmd); static int usage_hf_waveshare_loadbmp(void) { PrintAndLogEx(NORMAL, "Load BMP file to Waveshare NFC ePaper."); - PrintAndLogEx(NORMAL, "Usage: hf waveshare loadbmp [h] f m "); + PrintAndLogEx(NORMAL, "Usage: hf waveshare loadbmp [h] f m [s]"); PrintAndLogEx(NORMAL, " Options :"); PrintAndLogEx(NORMAL, " f : " _YELLOW_("filename[.bmp]") " to upload to tag"); PrintAndLogEx(NORMAL, " m : " _YELLOW_("model number") " of your tag"); + PrintAndLogEx(NORMAL, " s : save dithered version in filename-[n].bmp, only for RGB BMP"); for (uint8_t i=0; i< MEND; i++) { PrintAndLogEx(NORMAL, " m %2i : %s", i, models[i].desc); } @@ -349,7 +350,7 @@ static void map8to1(uint8_t *colormap, uint16_t width, uint16_t height, uint8_t } } -static int read_bmp_rgb(const uint8_t *bmp, const size_t bmpsize, uint8_t **black, uint8_t **black_minus_red, uint8_t **red) { +static int read_bmp_rgb(uint8_t *bmp, const size_t bmpsize, uint8_t model_nr, uint8_t **black, uint8_t **black_minus_red, uint8_t **red, char *filename, bool save_conversions) { BMP_HEADER *pbmpheader = (BMP_HEADER *)bmp; // check file is full color if (pbmpheader->bpp != 24) { @@ -397,88 +398,128 @@ static int read_bmp_rgb(const uint8_t *bmp, const size_t bmpsize, uint8_t **blac offset+=width%4; } - // for BW-only screens: - int16_t *chanGrey = calloc(width*height, sizeof(int16_t)); - if (chanGrey == NULL) { - free(chanR); - free(chanG); - free(chanB); - return PM3_EMALLOC; - } - rgb_to_gray(chanR, chanG, chanB, width, height, chanGrey); - dither_chan_inplace(chanGrey, width, height); + if ((model_nr == M1in54B) || (model_nr == M2in13B)) { + // for BW+Red screens: + uint8_t *mapBlackMinusRed = calloc(width*height, sizeof(uint8_t)); + if (mapBlackMinusRed == NULL) { + free(chanR); + free(chanG); + free(chanB); + return PM3_EMALLOC; + } + uint8_t *mapRed = calloc(width*height, sizeof(uint8_t)); + if (mapRed == NULL) { + free(chanR); + free(chanG); + free(chanB); + free(mapBlackMinusRed); + return PM3_EMALLOC; + } + rgb_to_gray_red_inplace(chanR, chanG, chanB, width, height); - uint8_t *mapBlack = calloc(width*height, sizeof(uint8_t)); - if (mapBlack == NULL) { + uint8_t palette[] ={0x00,0x00,0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00}; // black, white, red + dither_rgb_inplace(chanR, chanG, chanB, width, height, palette, sizeof(palette)/3); + + threshold_rgb_black_red(chanR, chanG, chanB, width, height, 128, 128, mapBlackMinusRed, mapRed); + if (save_conversions) { + // fill BMP chans + offset = pbmpheader->offset; + for (uint16_t Y=0; Yoffset; + for (uint16_t Y=0; Y Date: Wed, 16 Sep 2020 00:29:50 +0200 Subject: [PATCH 0509/1047] ws: fix few bugs --- client/src/cmdhfwaveshare.c | 57 ++++++++++++++++++++++++++----------- 1 file changed, 40 insertions(+), 17 deletions(-) diff --git a/client/src/cmdhfwaveshare.c b/client/src/cmdhfwaveshare.c index 0483af94c..364fda3c0 100644 --- a/client/src/cmdhfwaveshare.c +++ b/client/src/cmdhfwaveshare.c @@ -114,12 +114,12 @@ static int picture_bit_depth(const uint8_t *bmp, const size_t bmpsize, const uin PrintAndLogEx(DEBUG, "colorsused = %d", pbmpheader->colorsused); PrintAndLogEx(DEBUG, "pbmpheader->bpp = %d", pbmpheader->bpp); if ((pbmpheader->BMP_Width != models[model_nr].width) || (pbmpheader->BMP_Height != models[model_nr].height)) { - PrintAndLogEx(WARNING, "Invalid BMP size, expected %ix%i, got %ix%i", pbmpheader->BMP_Width, pbmpheader->BMP_Height, models[model_nr].width, models[model_nr].height); + PrintAndLogEx(WARNING, "Invalid BMP size, expected %ix%i, got %ix%i", models[model_nr].width, models[model_nr].height, pbmpheader->BMP_Width, pbmpheader->BMP_Height); } return pbmpheader->bpp; } -static int read_bmp_bitmap(const uint8_t *bmp, const size_t bmpsize, uint8_t **black) { +static int read_bmp_bitmap(const uint8_t *bmp, const size_t bmpsize, uint8_t model_nr, uint8_t **black, uint8_t **black_minus_red, uint8_t **red) { BMP_HEADER *pbmpheader = (BMP_HEADER *)bmp; // check file is bitmap if (pbmpheader->bpp != 1) { @@ -143,17 +143,40 @@ static int read_bmp_bitmap(const uint8_t *bmp, const size_t bmpsize, uint8_t **b uint16_t Image_Width_Byte = (pbmpheader->BMP_Width % 8 == 0) ? (pbmpheader->BMP_Width / 8) : (pbmpheader->BMP_Width / 8 + 1); uint16_t Bmp_Width_Byte = (Image_Width_Byte % 4 == 0) ? Image_Width_Byte : ((Image_Width_Byte / 4 + 1) * 4); - *black = calloc(WSMAPSIZE, sizeof(uint8_t)); - if (*black == NULL) { - return PM3_EMALLOC; - } - // Write data into RAM - for (Y = 0; Y < pbmpheader->BMP_Height; Y++) { // columns - for (X = 0; X < Bmp_Width_Byte; X++) { // lines - if ((X < Image_Width_Byte) && ((X + (pbmpheader->BMP_Height - Y - 1) * Image_Width_Byte) < WSMAPSIZE)) { - (*black)[X + (pbmpheader->BMP_Height - Y - 1) * Image_Width_Byte] = color_flag ? bmp[offset] : ~bmp[offset]; + if ((model_nr == M1in54B) || (model_nr == M2in13B)) { + // for BW+Red screens: + *black_minus_red = calloc(WSMAPSIZE, sizeof(uint8_t)); + if (*black_minus_red == NULL) { + return PM3_EMALLOC; + } + *red = calloc(WSMAPSIZE, sizeof(uint8_t)); + if (*red == NULL) { + free(*black_minus_red); + return PM3_EMALLOC; + } + // Write data into RAM + for (Y = 0; Y < pbmpheader->BMP_Height; Y++) { // columns + for (X = 0; X < Bmp_Width_Byte; X++) { // lines + if ((X < Image_Width_Byte) && ((X + (pbmpheader->BMP_Height - Y - 1) * Image_Width_Byte) < WSMAPSIZE)) { + (*black_minus_red)[X + (pbmpheader->BMP_Height - Y - 1) * Image_Width_Byte] = color_flag ? bmp[offset] : ~bmp[offset]; + } + offset++; + } + } + } else { + // for BW-only screens: + *black = calloc(WSMAPSIZE, sizeof(uint8_t)); + if (*black == NULL) { + return PM3_EMALLOC; + } + // Write data into RAM + for (Y = 0; Y < pbmpheader->BMP_Height; Y++) { // columns + for (X = 0; X < Bmp_Width_Byte; X++) { // lines + if ((X < Image_Width_Byte) && ((X + (pbmpheader->BMP_Height - Y - 1) * Image_Width_Byte) < WSMAPSIZE)) { + (*black)[X + (pbmpheader->BMP_Height - Y - 1) * Image_Width_Byte] = color_flag ? bmp[offset] : ~bmp[offset]; + } + offset++; } - offset++; } } return PM3_SUCCESS; @@ -530,9 +553,7 @@ static void read_black(uint32_t i, uint8_t *l, uint8_t model_nr, uint8_t *black) } static void read_red(uint32_t i, uint8_t *l, uint8_t model_nr, uint8_t *red) { for (uint8_t j = 0; j < models[model_nr].len; j++) { - if (red == NULL) { - l[3 + j] = ~0x00; - } else if (model_nr == M1in54B) { + if (model_nr == M1in54B) { //1.54B needs to flip the red picture data, other screens do not need to flip data l[3 + j] = ~red[i * models[model_nr].len + j]; } else { @@ -1013,7 +1034,7 @@ static int CmdHF14AWSLoadBmp(const char *Cmd) { return PM3_ESOFT; } else if (depth == 1) { PrintAndLogEx(DEBUG, "BMP file is a bitmap"); - if (read_bmp_bitmap(bmp, bytes_read, &black) != PM3_SUCCESS) { + if (read_bmp_bitmap(bmp, bytes_read, model_nr, &black, &black_minus_red, &red) != PM3_SUCCESS) { free(bmp); return PM3_ESOFT; } @@ -1035,7 +1056,9 @@ static int CmdHF14AWSLoadBmp(const char *Cmd) { free(bmp); start_drawing(model_nr, black, black_minus_red, red); - free(black); + if (black != NULL) { + free(black); + } if (black_minus_red != NULL) { free(black_minus_red); } From 1208eb9e100c5154d5a8f804a4446ced2cb4b37d Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Wed, 16 Sep 2020 02:38:28 +0200 Subject: [PATCH 0510/1047] Add option for continuous mode to `lf read`, try e.g. `data plot` then `lf read d 3000 s c` --- CHANGELOG.md | 1 + client/src/cmdlf.c | 22 +++++++++++++++++++--- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 55d26c791..786d2c0e6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ All notable changes to this project will be documented in this file. This project uses the changelog in accordance with [keepchangelog](http://keepachangelog.com/). Please use this to write notable changes, which is not the same as git commit log... ## [unreleased][unreleased] + - Add option for continuous mode to `lf read`, try e.g. `data plot` then `lf read d 3000 s c` (@doegox) - Add `hf waveshare` to upload picture to Waveshare NFC-Powered e-Paper (@doegox) - Add `hf 14a config` to deal with badly configured cards: invalid ATQA/BCC/SAK (@doegox) - Mikron JSC Russia Ultralight EV1 41 pages tag type support (@McEloff) diff --git a/client/src/cmdlf.c b/client/src/cmdlf.c index 165108fb8..eb79ca193 100644 --- a/client/src/cmdlf.c +++ b/client/src/cmdlf.c @@ -77,14 +77,16 @@ static int usage_lf_cmdread(void) { return PM3_SUCCESS; } static int usage_lf_read(void) { - PrintAndLogEx(NORMAL, "Usage: lf read [h] [s] [d numofsamples]"); + PrintAndLogEx(NORMAL, "Usage: lf read [h] [s] [d numofsamples] [c]"); PrintAndLogEx(NORMAL, "Options:"); PrintAndLogEx(NORMAL, " h This help"); PrintAndLogEx(NORMAL, " d #samples # samples to collect (optional)"); PrintAndLogEx(NORMAL, " s silent"); + PrintAndLogEx(NORMAL, " c run continuously until a key is pressed"); PrintAndLogEx(NORMAL, ""); PrintAndLogEx(NORMAL, "Examples:"); PrintAndLogEx(NORMAL, " lf read s d 12000 - collects 12000 samples silent"); + PrintAndLogEx(NORMAL, " lf read d 3000 s c - to be used with 'data plot' for live oscillo style"); PrintAndLogEx(NORMAL, " lf read"); PrintAndLogEx(NORMAL, "Extras:"); PrintAndLogEx(NORMAL, " use " _YELLOW_("'lf config'")" to set parameters."); @@ -627,6 +629,7 @@ int CmdLFRead(const char *Cmd) { bool errors = false; bool verbose = true; + bool continuous = false; uint32_t samples = 0; uint8_t cmdp = 0; while (param_getchar(Cmd, cmdp) != 0x00 && !errors) { @@ -641,6 +644,10 @@ int CmdLFRead(const char *Cmd) { verbose = false; cmdp++; break; + case 'c': + continuous = true; + cmdp++; + break; default: PrintAndLogEx(WARNING, "Unknown parameter '%c'", param_getchar(Cmd, cmdp)); errors = true; @@ -650,8 +657,17 @@ int CmdLFRead(const char *Cmd) { //Validations if (errors) return usage_lf_read(); - - return lf_read(verbose, samples); + if (continuous) { + PrintAndLogEx(INFO, "Press " _GREEN_("Enter") " to exit"); + } + int ret = PM3_SUCCESS; + do { + ret = lf_read(verbose, samples); + if (kbd_enter_pressed()) { + break; + } + } while (continuous); + return ret; } int CmdLFSniff(const char *Cmd) { From 7621af2e883cb698d54026507d929f1ef95e1bf0 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Wed, 16 Sep 2020 09:19:41 +0200 Subject: [PATCH 0511/1047] ws: simplify --- client/src/cmdhfwaveshare.c | 91 ++++++++++++++----------------------- 1 file changed, 35 insertions(+), 56 deletions(-) diff --git a/client/src/cmdhfwaveshare.c b/client/src/cmdhfwaveshare.c index 364fda3c0..bbcee4e18 100644 --- a/client/src/cmdhfwaveshare.c +++ b/client/src/cmdhfwaveshare.c @@ -119,7 +119,7 @@ static int picture_bit_depth(const uint8_t *bmp, const size_t bmpsize, const uin return pbmpheader->bpp; } -static int read_bmp_bitmap(const uint8_t *bmp, const size_t bmpsize, uint8_t model_nr, uint8_t **black, uint8_t **black_minus_red, uint8_t **red) { +static int read_bmp_bitmap(const uint8_t *bmp, const size_t bmpsize, uint8_t model_nr, uint8_t **black, uint8_t **red) { BMP_HEADER *pbmpheader = (BMP_HEADER *)bmp; // check file is bitmap if (pbmpheader->bpp != 1) { @@ -143,41 +143,26 @@ static int read_bmp_bitmap(const uint8_t *bmp, const size_t bmpsize, uint8_t mod uint16_t Image_Width_Byte = (pbmpheader->BMP_Width % 8 == 0) ? (pbmpheader->BMP_Width / 8) : (pbmpheader->BMP_Width / 8 + 1); uint16_t Bmp_Width_Byte = (Image_Width_Byte % 4 == 0) ? Image_Width_Byte : ((Image_Width_Byte / 4 + 1) * 4); + *black = calloc(WSMAPSIZE, sizeof(uint8_t)); + if (*black == NULL) { + return PM3_EMALLOC; + } + // Write data into RAM + for (Y = 0; Y < pbmpheader->BMP_Height; Y++) { // columns + for (X = 0; X < Bmp_Width_Byte; X++) { // lines + if ((X < Image_Width_Byte) && ((X + (pbmpheader->BMP_Height - Y - 1) * Image_Width_Byte) < WSMAPSIZE)) { + (*black)[X + (pbmpheader->BMP_Height - Y - 1) * Image_Width_Byte] = color_flag ? bmp[offset] : ~bmp[offset]; + } + offset++; + } + } if ((model_nr == M1in54B) || (model_nr == M2in13B)) { // for BW+Red screens: - *black_minus_red = calloc(WSMAPSIZE, sizeof(uint8_t)); - if (*black_minus_red == NULL) { - return PM3_EMALLOC; - } *red = calloc(WSMAPSIZE, sizeof(uint8_t)); if (*red == NULL) { - free(*black_minus_red); + free(*black); return PM3_EMALLOC; } - // Write data into RAM - for (Y = 0; Y < pbmpheader->BMP_Height; Y++) { // columns - for (X = 0; X < Bmp_Width_Byte; X++) { // lines - if ((X < Image_Width_Byte) && ((X + (pbmpheader->BMP_Height - Y - 1) * Image_Width_Byte) < WSMAPSIZE)) { - (*black_minus_red)[X + (pbmpheader->BMP_Height - Y - 1) * Image_Width_Byte] = color_flag ? bmp[offset] : ~bmp[offset]; - } - offset++; - } - } - } else { - // for BW-only screens: - *black = calloc(WSMAPSIZE, sizeof(uint8_t)); - if (*black == NULL) { - return PM3_EMALLOC; - } - // Write data into RAM - for (Y = 0; Y < pbmpheader->BMP_Height; Y++) { // columns - for (X = 0; X < Bmp_Width_Byte; X++) { // lines - if ((X < Image_Width_Byte) && ((X + (pbmpheader->BMP_Height - Y - 1) * Image_Width_Byte) < WSMAPSIZE)) { - (*black)[X + (pbmpheader->BMP_Height - Y - 1) * Image_Width_Byte] = color_flag ? bmp[offset] : ~bmp[offset]; - } - offset++; - } - } } return PM3_SUCCESS; } @@ -373,7 +358,7 @@ static void map8to1(uint8_t *colormap, uint16_t width, uint16_t height, uint8_t } } -static int read_bmp_rgb(uint8_t *bmp, const size_t bmpsize, uint8_t model_nr, uint8_t **black, uint8_t **black_minus_red, uint8_t **red, char *filename, bool save_conversions) { +static int read_bmp_rgb(uint8_t *bmp, const size_t bmpsize, uint8_t model_nr, uint8_t **black, uint8_t **red, char *filename, bool save_conversions) { BMP_HEADER *pbmpheader = (BMP_HEADER *)bmp; // check file is full color if (pbmpheader->bpp != 24) { @@ -423,8 +408,8 @@ static int read_bmp_rgb(uint8_t *bmp, const size_t bmpsize, uint8_t model_nr, ui if ((model_nr == M1in54B) || (model_nr == M2in13B)) { // for BW+Red screens: - uint8_t *mapBlackMinusRed = calloc(width*height, sizeof(uint8_t)); - if (mapBlackMinusRed == NULL) { + uint8_t *mapBlack = calloc(width*height, sizeof(uint8_t)); + if (mapBlack == NULL) { free(chanR); free(chanG); free(chanB); @@ -435,7 +420,7 @@ static int read_bmp_rgb(uint8_t *bmp, const size_t bmpsize, uint8_t model_nr, ui free(chanR); free(chanG); free(chanB); - free(mapBlackMinusRed); + free(mapBlack); return PM3_EMALLOC; } rgb_to_gray_red_inplace(chanR, chanG, chanB, width, height); @@ -443,7 +428,7 @@ static int read_bmp_rgb(uint8_t *bmp, const size_t bmpsize, uint8_t model_nr, ui uint8_t palette[] ={0x00,0x00,0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00}; // black, white, red dither_rgb_inplace(chanR, chanG, chanB, width, height, palette, sizeof(palette)/3); - threshold_rgb_black_red(chanR, chanG, chanB, width, height, 128, 128, mapBlackMinusRed, mapRed); + threshold_rgb_black_red(chanR, chanG, chanB, width, height, 128, 128, mapBlack, mapRed); if (save_conversions) { // fill BMP chans offset = pbmpheader->offset; @@ -462,7 +447,7 @@ static int read_bmp_rgb(uint8_t *bmp, const size_t bmpsize, uint8_t model_nr, ui free(chanR); free(chanG); free(chanB); - free(mapBlackMinusRed); + free(mapBlack); free(mapRed); return PM3_EIO; } @@ -470,18 +455,18 @@ static int read_bmp_rgb(uint8_t *bmp, const size_t bmpsize, uint8_t model_nr, ui free(chanR); free(chanG); free(chanB); - *black_minus_red = calloc(WSMAPSIZE, sizeof(uint8_t)); - if (*black_minus_red == NULL) { - free(mapBlackMinusRed); + *black = calloc(WSMAPSIZE, sizeof(uint8_t)); + if (*black == NULL) { + free(mapBlack); free(mapRed); return PM3_EMALLOC; } - map8to1(mapBlackMinusRed, width, height, *black_minus_red); - free(mapBlackMinusRed); + map8to1(mapBlack, width, height, *black); + free(mapBlack); *red = calloc(WSMAPSIZE, sizeof(uint8_t)); if (*red == NULL) { free(mapRed); - free(*black_minus_red); + free(*black); return PM3_EMALLOC; } map8to1(mapRed, width, height, *red); @@ -649,7 +634,7 @@ static int start_drawing_1in54B(uint8_t model_nr, uint8_t *black, uint8_t *red) return PM3_SUCCESS; } -static int start_drawing(uint8_t model_nr, uint8_t *black, uint8_t *black_minus_red, uint8_t *red) { +static int start_drawing(uint8_t model_nr, uint8_t *black, uint8_t *red) { uint8_t progress = 0; uint8_t step0[2] = {0xcd, 0x0d}; uint8_t step1[3] = {0xcd, 0x00, 10}; //select e-paper type and reset e-paper 4:2.13inch e-Paper 7:2.9inch e-Paper 10:4.2inch e-Paper 14:7.5inch e-Paper @@ -774,7 +759,7 @@ static int start_drawing(uint8_t model_nr, uint8_t *black, uint8_t *black_minus_ if (model_nr == M1in54B) { // 1.54B Keychain handler PrintAndLogEx(DEBUG, "Start_Drawing_1in54B"); - ret = start_drawing_1in54B(model_nr, black_minus_red, red); + ret = start_drawing_1in54B(model_nr, black, red); if (ret != PM3_SUCCESS) { return ret; } @@ -841,7 +826,7 @@ static int start_drawing(uint8_t model_nr, uint8_t *black, uint8_t *black_minus_ } } else if (model_nr == M2in13B) { //2.13inch B for (i = 0; i < 26; i++) { - read_black(i, step8, model_nr, black_minus_red); + read_black(i, step8, model_nr, black); ret = transceive_blocking(step8, 109, rx, 20, actrxlen, true); // cd 08 if (ret != PM3_SUCCESS) { return ret; @@ -1019,7 +1004,6 @@ static int CmdHF14AWSLoadBmp(const char *Cmd) { uint8_t *bmp = NULL; uint8_t *black = NULL; - uint8_t *black_minus_red = NULL; uint8_t *red = NULL; size_t bytes_read = 0; if (loadFile_safe(filename, ".bmp", (void **)&bmp, &bytes_read) != PM3_SUCCESS) { @@ -1034,13 +1018,13 @@ static int CmdHF14AWSLoadBmp(const char *Cmd) { return PM3_ESOFT; } else if (depth == 1) { PrintAndLogEx(DEBUG, "BMP file is a bitmap"); - if (read_bmp_bitmap(bmp, bytes_read, model_nr, &black, &black_minus_red, &red) != PM3_SUCCESS) { + if (read_bmp_bitmap(bmp, bytes_read, model_nr, &black, &red) != PM3_SUCCESS) { free(bmp); return PM3_ESOFT; } } else if (depth == 24) { PrintAndLogEx(DEBUG, "BMP file is a RGB"); - if (read_bmp_rgb(bmp, bytes_read, model_nr, &black, &black_minus_red, &red, filename, save_conversions) != PM3_SUCCESS) { + if (read_bmp_rgb(bmp, bytes_read, model_nr, &black, &red, filename, save_conversions) != PM3_SUCCESS) { free(bmp); return PM3_ESOFT; } @@ -1055,14 +1039,9 @@ static int CmdHF14AWSLoadBmp(const char *Cmd) { } free(bmp); - start_drawing(model_nr, black, black_minus_red, red); - if (black != NULL) { - free(black); - } - if (black_minus_red != NULL) { - free(black_minus_red); - } - if (red != NULL) { + start_drawing(model_nr, black, red); + free(black); + if ((model_nr == M1in54B) || (model_nr == M2in13B)) { free(red); } return PM3_SUCCESS; From c99432310509def4594f43868a80c42f9fd1a929 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Wed, 16 Sep 2020 12:52:04 +0200 Subject: [PATCH 0512/1047] Unify 'lf read' and 'lf cmdread options', add options to cmdread --- CHANGELOG.md | 3 +- armsrc/appmain.c | 8 +-- armsrc/lfops.c | 4 +- armsrc/lfops.h | 3 +- armsrc/lfsampling.c | 2 +- client/src/cmdlf.c | 128 ++++++++++++++++++++++++++++++-------------- 6 files changed, 100 insertions(+), 48 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 786d2c0e6..9b4bebe33 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,8 @@ All notable changes to this project will be documented in this file. This project uses the changelog in accordance with [keepchangelog](http://keepachangelog.com/). Please use this to write notable changes, which is not the same as git commit log... ## [unreleased][unreleased] - - Add option for continuous mode to `lf read`, try e.g. `data plot` then `lf read d 3000 s c` (@doegox) + - Add options to `lf read` and `lf cmdread` (@doegox) + - Change options of `lf read` to match `lf cmdread`, this affects historical `d` and `s` options (@doegox) - Add `hf waveshare` to upload picture to Waveshare NFC-Powered e-Paper (@doegox) - Add `hf 14a config` to deal with badly configured cards: invalid ATQA/BCC/SAK (@doegox) - Mikron JSC Russia Ultralight EV1 41 pages tag type support (@McEloff) diff --git a/armsrc/appmain.c b/armsrc/appmain.c index 92e9f82f0..0fc9dd63d 100644 --- a/armsrc/appmain.c +++ b/armsrc/appmain.c @@ -759,8 +759,8 @@ static void PacketReceived(PacketCommandNG *packet) { } case CMD_LF_ACQ_RAW_ADC: { struct p { - bool verbose; - uint32_t samples; + uint32_t samples : 31; + bool verbose : 1; } PACKED; struct p *payload = (struct p *)packet->data.asBytes; uint32_t bits = SampleLF(payload->verbose, payload->samples); @@ -772,9 +772,11 @@ static void PacketReceived(PacketCommandNG *packet) { uint32_t delay; uint16_t ones; uint16_t zeros; + uint32_t samples : 31; + bool verbose : 1; } PACKED; struct p *payload = (struct p *)packet->data.asBytes; - ModThenAcquireRawAdcSamples125k(payload->delay, payload->zeros, payload->ones, packet->data.asBytes + 8); + ModThenAcquireRawAdcSamples125k(payload->delay, payload->zeros, payload->ones, packet->data.asBytes + sizeof(struct p), payload->verbose, payload->samples); break; } case CMD_LF_SNIFF_RAW_ADC: { diff --git a/armsrc/lfops.c b/armsrc/lfops.c index 93e9cd230..8c4b1e454 100644 --- a/armsrc/lfops.c +++ b/armsrc/lfops.c @@ -383,7 +383,7 @@ void loadT55xxConfig(void) { * @param period_1 * @param command (in binary char array) */ -void ModThenAcquireRawAdcSamples125k(uint32_t delay_off, uint32_t period_0, uint32_t period_1, uint8_t *command) { +void ModThenAcquireRawAdcSamples125k(uint32_t delay_off, uint32_t period_0, uint32_t period_1, uint8_t *command, bool verbose, uint32_t samples) { FpgaDownloadAndGo(FPGA_BITSTREAM_LF); @@ -475,7 +475,7 @@ void ModThenAcquireRawAdcSamples125k(uint32_t delay_off, uint32_t period_0, uint FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_READER | FPGA_LF_ADC_READER_FIELD); // now do the read - DoAcquisition_config(true, 0); + DoAcquisition_config(verbose, samples); // Turn off antenna FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); diff --git a/armsrc/lfops.h b/armsrc/lfops.h index 2d76bef48..17c79ef61 100644 --- a/armsrc/lfops.h +++ b/armsrc/lfops.h @@ -15,8 +15,7 @@ #include "pm3_cmd.h" // struct -void AcquireRawAdcSamples125k(int divisor); -void ModThenAcquireRawAdcSamples125k(uint32_t delay_off, uint32_t period_0, uint32_t period_1, uint8_t *command); +void ModThenAcquireRawAdcSamples125k(uint32_t delay_off, uint32_t period_0, uint32_t period_1, uint8_t *command, bool verbose, uint32_t samples); void ReadTItag(void); void WriteTItag(uint32_t idhi, uint32_t idlo, uint16_t crc); diff --git a/armsrc/lfsampling.c b/armsrc/lfsampling.c index b5e074e5b..91bde7569 100644 --- a/armsrc/lfsampling.c +++ b/armsrc/lfsampling.c @@ -329,7 +329,7 @@ uint32_t DoAcquisition(uint8_t decimation, uint8_t bits_per_sample, bool avg, in if (verbose) { if (checked == -1) { Dbprintf("lf sampling aborted"); - } else if (cancel_counter == cancel_after) { + } else if ((cancel_counter == cancel_after) && (cancel_after > 0)){ Dbprintf("lf sampling cancelled after %u", cancel_counter); } diff --git a/client/src/cmdlf.c b/client/src/cmdlf.c index eb79ca193..c324a7ba9 100644 --- a/client/src/cmdlf.c +++ b/client/src/cmdlf.c @@ -61,33 +61,43 @@ static bool g_lf_threshold_set = false; static int CmdHelp(const char *Cmd); static int usage_lf_cmdread(void) { - PrintAndLogEx(NORMAL, "Usage: lf cmdread d z o c "); + PrintAndLogEx(NORMAL, "Usage: lf cmdread d z o c [q] [s #samples] [@]"); PrintAndLogEx(NORMAL, "Options:"); PrintAndLogEx(NORMAL, " h This help"); PrintAndLogEx(NORMAL, " d delay OFF period, (0 for bitbang mode) (decimal)"); PrintAndLogEx(NORMAL, " z ZERO time period (decimal)"); PrintAndLogEx(NORMAL, " o ONE time period (decimal)"); PrintAndLogEx(NORMAL, " c Command bytes (in ones and zeros)"); + PrintAndLogEx(NORMAL, " q silent (optional)"); + PrintAndLogEx(NORMAL, " s #samples number of samples to collect (optional)"); + PrintAndLogEx(NORMAL, " @ run continuously until a key is pressed (optional)"); PrintAndLogEx(NORMAL, ""); PrintAndLogEx(NORMAL, " ************* " _YELLOW_("All periods in microseconds (us)")); PrintAndLogEx(NORMAL, "Examples:"); - PrintAndLogEx(NORMAL, " lf cmdread d 80 z 100 o 200 c 11000"); + PrintAndLogEx(NORMAL, "- probing for HT2:"); + PrintAndLogEx(NORMAL, " lf cmdread d 50 z 116 o 166 c 011000"); + PrintAndLogEx(NORMAL, "- probing for HT2, oscilloscope style:"); + PrintAndLogEx(NORMAL, " data plot"); + PrintAndLogEx(NORMAL, " lf cmdread d 50 z 116 o 166 c 011000 q s 2000 @"); PrintAndLogEx(NORMAL, "Extras:"); PrintAndLogEx(NORMAL, " use " _YELLOW_("'lf config'")" to set parameters."); return PM3_SUCCESS; } static int usage_lf_read(void) { - PrintAndLogEx(NORMAL, "Usage: lf read [h] [s] [d numofsamples] [c]"); + PrintAndLogEx(NORMAL, "Usage: lf read [h] [q] [s #samples] [@]"); PrintAndLogEx(NORMAL, "Options:"); PrintAndLogEx(NORMAL, " h This help"); - PrintAndLogEx(NORMAL, " d #samples # samples to collect (optional)"); - PrintAndLogEx(NORMAL, " s silent"); - PrintAndLogEx(NORMAL, " c run continuously until a key is pressed"); + PrintAndLogEx(NORMAL, " q silent (optional)"); + PrintAndLogEx(NORMAL, " s #samples number of samples to collect (optional)"); + PrintAndLogEx(NORMAL, " @ run continuously until a key is pressed (optional)"); PrintAndLogEx(NORMAL, ""); PrintAndLogEx(NORMAL, "Examples:"); - PrintAndLogEx(NORMAL, " lf read s d 12000 - collects 12000 samples silent"); - PrintAndLogEx(NORMAL, " lf read d 3000 s c - to be used with 'data plot' for live oscillo style"); - PrintAndLogEx(NORMAL, " lf read"); + PrintAndLogEx(NORMAL, " lf read"); + PrintAndLogEx(NORMAL, "- collecting quietly 12000 samples:"); + PrintAndLogEx(NORMAL, " lf read q s 12000 - "); + PrintAndLogEx(NORMAL, "- oscilloscope style:"); + PrintAndLogEx(NORMAL, " data plot"); + PrintAndLogEx(NORMAL, " lf read q s 3000 @"); PrintAndLogEx(NORMAL, "Extras:"); PrintAndLogEx(NORMAL, " use " _YELLOW_("'lf config'")" to set parameters."); return PM3_SUCCESS; @@ -309,14 +319,22 @@ int CmdLFCommandRead(const char *Cmd) { if (!session.pm3_present) return PM3_ENOTTY; bool errors = false; + bool verbose = true; + bool continuous = false; + uint32_t samples = 0; uint16_t datalen = 0; + uint8_t payload_header_size = 12; struct p { uint32_t delay; uint16_t ones; uint16_t zeros; - uint8_t data[PM3_CMD_DATA_SIZE - 8]; + uint32_t samples : 31; + bool verbose : 1; + uint8_t data[PM3_CMD_DATA_SIZE - payload_header_size]; } PACKED payload; + payload.samples = samples; + payload.verbose = verbose; uint8_t cmdp = 0; while (param_getchar(Cmd, cmdp) != 0x00 && !errors) { @@ -339,6 +357,20 @@ int CmdLFCommandRead(const char *Cmd) { payload.ones = param_get32ex(Cmd, cmdp + 1, 0, 10) & 0xFFFF; cmdp += 2; break; + case 's': + samples = param_get32ex(Cmd, cmdp + 1, 0, 10); + payload.samples = samples; + cmdp += 2; + break; + case 'q': + verbose = false; + payload.verbose = verbose; + cmdp++; + break; + case '@': + continuous = true; + cmdp++; + break; default: PrintAndLogEx(WARNING, "Unknown parameter '%c'", param_getchar(Cmd, cmdp)); errors = true; @@ -356,33 +388,51 @@ int CmdLFCommandRead(const char *Cmd) { //Validations if (errors || cmdp == 0) return usage_lf_cmdread(); - - PrintAndLogEx(SUCCESS, "sending"); - clearCommandBuffer(); - SendCommandNG(CMD_LF_MOD_THEN_ACQ_RAW_ADC, (uint8_t *)&payload, 8 + datalen); - - PacketResponseNG resp; - - uint8_t i = 10; - // 20sec wait loop - while (!WaitForResponseTimeout(CMD_LF_MOD_THEN_ACQ_RAW_ADC, &resp, 2000) && i != 0) { - PrintAndLogEx(NORMAL, "." NOLF); - i--; + if (continuous) { + PrintAndLogEx(INFO, "Press " _GREEN_("Enter") " to exit"); + } + if (verbose) { + PrintAndLogEx(SUCCESS, "Sending command..."); } - PrintAndLogEx(NORMAL, ""); - if (resp.status == PM3_SUCCESS) { - if (i) { - PrintAndLogEx(SUCCESS, "downloading response signal data"); - getSamples(0, false); - return PM3_SUCCESS; - } else { - PrintAndLogEx(WARNING, "timeout while waiting for reply."); - return PM3_ETIMEOUT; + int ret = PM3_SUCCESS; + do { + clearCommandBuffer(); + SendCommandNG(CMD_LF_MOD_THEN_ACQ_RAW_ADC, (uint8_t *)&payload, payload_header_size + datalen); + + PacketResponseNG resp; + + uint8_t i = 10; + // 20sec wait loop + while (!WaitForResponseTimeout(CMD_LF_MOD_THEN_ACQ_RAW_ADC, &resp, 2000) && i != 0) { + if (verbose) { + PrintAndLogEx(NORMAL, "." NOLF); + } + i--; } - } - PrintAndLogEx(WARNING, "command failed."); - return PM3_ESOFT; + if (verbose) { + PrintAndLogEx(NORMAL, ""); + } + if (resp.status == PM3_SUCCESS) { + if (i) { + if (verbose) { + PrintAndLogEx(SUCCESS, "downloading response signal data"); + } + getSamples(samples, false); + ret = PM3_SUCCESS; + } else { + PrintAndLogEx(WARNING, "timeout while waiting for reply."); + return PM3_ETIMEOUT; + } + } else { + PrintAndLogEx(WARNING, "command failed."); + return PM3_ESOFT; + } + if (kbd_enter_pressed()) { + break; + } + } while (continuous); + return ret; } int CmdFlexdemod(const char *Cmd) { @@ -597,8 +647,8 @@ int lf_read(bool verbose, uint32_t samples) { if (!session.pm3_present) return PM3_ENOTTY; struct p { - bool verbose; - uint32_t samples; + uint32_t samples : 31; + bool verbose : 1; } PACKED; struct p payload; @@ -636,15 +686,15 @@ int CmdLFRead(const char *Cmd) { switch (tolower(param_getchar(Cmd, cmdp))) { case 'h': return usage_lf_read(); - case 'd': + case 's': samples = param_get32ex(Cmd, cmdp + 1, 0, 10); cmdp += 2; break; - case 's': + case 'q': verbose = false; cmdp++; break; - case 'c': + case '@': continuous = true; cmdp++; break; From 6f869cb462d862449d97f438d40effa0eade2168 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Wed, 16 Sep 2020 13:00:11 +0200 Subject: [PATCH 0513/1047] typo --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9b4bebe33..d95130493 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -104,7 +104,7 @@ This project uses the changelog in accordance with [keepchangelog](http://keepac - Change appveyor verbose (@doegox) - Change `lf nexwatch demod` - now detects type, and show parity /chksum (@iceman1001) - Change `lfsampling` - interruptible only when logging not yet triggered (@doegox) - - Change `lf keri demod - more leanient when it comes to bits (@iceman1001) + - Change `lf keri demod` - more leanient when it comes to bits (@iceman1001) - fix, proper filtering of RL markers (@doegox) - Change, clean deps [compiler trials] (@doegox) - Change, remove c99 restrictions [compiler trials] (@doegox) From 06dfa3c32de26ee5fa1862d16e9962d35b2a4dd2 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 16 Sep 2020 15:29:14 +0200 Subject: [PATCH 0514/1047] coffee --- client/src/cmdparser.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/client/src/cmdparser.c b/client/src/cmdparser.c index dee76a8fe..837c13fed 100644 --- a/client/src/cmdparser.c +++ b/client/src/cmdparser.c @@ -186,6 +186,12 @@ int CmdsParse(const command_t Commands[], const char *Cmd) { dumpCommandsRecursive(Commands, 1); return PM3_SUCCESS; } + + if (strcmp(Cmd, "coffee") == 0) { + PrintAndLogEx(NORMAL, ""); + PrintAndLogEx(NORMAL, " ((\n ))\n" _YELLOW_(" .______.\n | |]\n \\ /\n `----´\n\n")); + return PM3_SUCCESS; + } char cmd_name[128]; memset(cmd_name, 0, sizeof(cmd_name)); From 3e4400507724a88a99ea56b34a7dc9e37ed2b81c Mon Sep 17 00:00:00 2001 From: Gator96100 Date: Wed, 16 Sep 2020 23:03:47 +0200 Subject: [PATCH 0515/1047] Corrected ProxSpace installation. ProxSpace can not be cloned, as this causes errors during the installation. runme.bat does no longer exist. --- .../Windows-Installation-Instructions.md | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/doc/md/Installation_Instructions/Windows-Installation-Instructions.md b/doc/md/Installation_Instructions/Windows-Installation-Instructions.md index 8930c0a04..b51548108 100644 --- a/doc/md/Installation_Instructions/Windows-Installation-Instructions.md +++ b/doc/md/Installation_Instructions/Windows-Installation-Instructions.md @@ -17,12 +17,10 @@ There are two ways to install, build and use Proxmark3 on Windows: Install required drivers for your Windows installation. You may need admin privileges to do this. Step by step guides are online such as [RyscCorps](https://store.ryscc.com/blogs/news/how-to-install-a-proxmark3-driver-on-windows-10). -## Download / clone ProxSpace repo +## Download ProxSpace repo Download the Gator96100 ProxSpace package from https://github.com/Gator96100/ProxSpace/releases -If you prefer, you can clone it, provided that you installed Github for Windows https://desktop.github.com/. - Extract 'ProxSpace' to a location path without spaces. For example D:\OneDrive\Documents\GitHub is ok whereas C:\My Documents\My Projects\proxspace is not. @@ -30,7 +28,7 @@ If you're running Windows in a Virtualbox guest, make sure not to install ProxSp ## Launch ProxSpace -Run `runme.bat` or `runme64.bat` depending on your Windows architecture. +Run `runme64.bat`. You'll get a Bash prompt and your home directory should become the ProxSpace `pm3` sub-directory. From 2b2759e542e351f71000e5a9fd71370269db5093 Mon Sep 17 00:00:00 2001 From: mwalker33 Date: Thu, 17 Sep 2020 09:49:03 +1000 Subject: [PATCH 0516/1047] Update cmdlft55xx.c Add lf t55xx sniff to attemp to extract commands sent from a cloner/writter. --- client/src/cmdlft55xx.c | 306 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 305 insertions(+), 1 deletion(-) diff --git a/client/src/cmdlft55xx.c b/client/src/cmdlft55xx.c index c3e69238b..394253191 100644 --- a/client/src/cmdlft55xx.c +++ b/client/src/cmdlft55xx.c @@ -28,6 +28,7 @@ #include "cmdhf14a.h" // for getTagInfo #include "fileutils.h" // loadDictionary #include "util_posix.h" +#include "cmdlf.h" // for lf sniff // Some defines for readability #define T55XX_DLMODE_FIXED 0 // Default Mode @@ -399,7 +400,20 @@ static int usage_t55xx_clonehelp(void) { PrintAndLogEx(NORMAL, _GREEN_("lf visa2000 clone")); return PM3_SUCCESS; } - +static int usage_t55xx_sniff(void) { + PrintAndLogEx(NORMAL, "Usage: lf t55xx sniff [w ] [b] [h]"); + PrintAndLogEx(NORMAL, "Options:"); + PrintAndLogEx(NORMAL, " w <0> <1> - Set samples width for 0 and 1 matching (default auto detect)"); + PrintAndLogEx(NORMAL, " b - Extract from current sample buffer (default will get new samples)"); + PrintAndLogEx(NORMAL, " h - This help"); + PrintAndLogEx(NORMAL, ""); + PrintAndLogEx(NORMAL, "Examples:"); + PrintAndLogEx(NORMAL, _YELLOW_(" lf t55xx sniff")); + PrintAndLogEx(NORMAL, _YELLOW_(" lf t55xx sniff b")); + PrintAndLogEx(NORMAL, _YELLOW_(" lf t55xx sniff w 7 14 b")); + PrintAndLogEx(NORMAL, ""); + return PM3_SUCCESS; +} static int CmdHelp(const char *Cmd); static int CmdT55xxCloneHelp(const char *Cmd) { @@ -3709,6 +3723,295 @@ static int CmdT55xxProtect(const char *Cmd) { return PM3_SUCCESS; } +static int CmdT55xxSniff(const char *Cmd) { + uint8_t cmdp = 0; + bool sampleData = true; + uint8_t width0 = 0; + uint8_t width1 = 0; + int pulseSamples = 0; + bool eop; + uint8_t page; + uint32_t usedPassword; + uint32_t blockData; + uint8_t blockAddr; + char data[100]; // Max should be 80. + uint16_t dataLen = 0; + size_t idx = 0; + size_t start; + int minWidth; + int maxWidth; + char modeText [100]; + char pwdText [100]; + bool haveData = false; + + /* + Notes: + T55xx packet lengths (1 of 4 needs to be checked) + ----------------------------------------------- + | Default | LL 0 | Leading 0 | 1 of 4 | + ----------------------------------------------------------------| + | Standard Write | 38 | 39 | 39 | 40 | + | Protect Write | 70 | 71 | 73 | 74 | + | AOR | 34 | 35 | 37 | 38 | + | Standard Read | 5 | 6 | 7 | 8 | + | Protect Read | 38 | 39 | 41 | 42 | + | Regular Read | 2 | 3 | 3 | 4 | + | Reset | 2 | 3 | 3 | 4 | + ---------------------------------------------------------------- + + T55xx bit widths (decimation 1) - Expected, but may vary a little + Reference 0 for LL0 and Leading 0 can be longer + ----------------------------------------------- + | Default | LL 0 | Leading 0 | 1 of 4 | + ----------------------------------------------------| + | 0 | 16 - 32 | 9 - 33 | 5 - 80 | tbc | + | 1 | 48 - 64 | 41 - 72 | 21 - 96 | tbc | + ---------------------------------------------------- + 00 01 10 11 + + + */ + while (param_getchar(Cmd, cmdp) != 0x00) { + switch (tolower(param_getchar(Cmd, cmdp))) { + case 'h': + return usage_t55xx_sniff(); + case 'b': + sampleData = false; + cmdp ++; + break; + case 'w': + width0 = param_get8ex(Cmd, cmdp + 1, 0, 10); + width1 = param_get8ex(Cmd, cmdp + 2, 0, 10); + cmdp += 3; + + if (width0 == 0) PrintAndLogEx (ERR,"need both sample widths! "_RED_("Missing sample width for 0")); + if (width1 == 0) PrintAndLogEx (ERR,"need both sample widths! "_RED_("Missing sample width for 1")); + if ((width0 == 0) || (width1 == 0)) { + PrintAndLogEx (NORMAL,""); + return usage_t55xx_sniff(); + } + break; + default: + cmdp++; + PrintAndLogEx (ERR,"Invalid options supplied!"); + return usage_t55xx_sniff(); + } + } + + // setup and sample data from Proxmark (if not directed to existing sample/graphbuffer + if (sampleData) { + // get samples + CmdLFSniff (""); + } + + idx = 0; + + PrintAndLogEx(NORMAL, ""); + PrintAndLogEx(INFO,_CYAN_("T55xx write Detection")); + PrintAndLogEx(SUCCESS, "Downlink mode | password | Data | blk | page | 0 | 1 | raw"); + PrintAndLogEx(SUCCESS, "-----------------+----------+----------+-----+------+-----+-----+-------------------------------------------------------------------------------"); + + while (idx < GraphTraceLen) + { + start = idx; + minWidth = 1000; + maxWidth = 0; + + // Auto detect bit widths + if ((width0 == 0) && (width1 == 0)) { + // Skip till we get to a "non modulated section" + while ((idx < GraphTraceLen) && ((GraphBuffer[idx] < -5) || (GraphBuffer[idx] > 5))) + idx++; + + while ((idx < GraphTraceLen) && ((GraphBuffer[idx] > -20) && (GraphBuffer[idx] < 20))) + idx++; + + eop = false; + pulseSamples = 0; + + // Skip until start of next signal - Should be a positive rise above 0 + while ((idx < GraphTraceLen) && (GraphBuffer[idx] < 10)) idx++; + + while ((idx < GraphTraceLen) && !eop) { + + if ((GraphBuffer[idx-1] <= 0) && (GraphBuffer[idx] > 0)) + pulseSamples = 0; + + if ((GraphBuffer[idx-1] > 0) && (GraphBuffer[idx] <= 0)) { + if (pulseSamples > 0) { + + if (pulseSamples < minWidth) + minWidth = pulseSamples; + + if (pulseSamples > maxWidth) + maxWidth = pulseSamples; + + pulseSamples = 0; + } + } + + if ((GraphBuffer[idx-1] > 0) && (GraphBuffer[idx] <= 0) ) { + // End of Packet will have a High to zero drop and stay around 0, so if it drags on or does not keep going down + if (((GraphBuffer[idx+5] + 10) > GraphBuffer[idx]) || (pulseSamples > 50)) { // very high chance of being noise + eop = true; + } + } else { + pulseSamples++; + } + idx++; + } + + maxWidth = minWidth * 1.75;// + ((25 * MinWidth) / 100); + // minWidth = MinWidth;// - ((15 * MinWidth) / 100); + } else { + maxWidth = width1; + minWidth = width0; + } + + // ===================================================== + // go back and find first packet.... + idx = start; + haveData = false; + + // Skip till we get to a "non modulated section" - ie skip if sample is in mid packet + while ((idx < GraphTraceLen) && ((GraphBuffer[idx] < -5) || (GraphBuffer[idx] > 5))) + idx++; + while ((idx < GraphTraceLen) && ((GraphBuffer[idx] > -25) && (GraphBuffer[idx] < 25))) + idx++; + + dataLen = 0; + eop = false; + pulseSamples = 0; + + // Skip until start of next signal - Should be a positive rise above 0 + while ((idx < GraphTraceLen) && (GraphBuffer[idx] < 10)) idx++; + + while ((idx < GraphTraceLen) && !eop) { + if ((GraphBuffer[idx-1] <= 0) && (GraphBuffer[idx] > 0)) { + pulseSamples = 0; + } + // a return to 0 makes end of needed data. it should cross to negataive before rising to next bit + if ((GraphBuffer[idx-1] > 0) && (GraphBuffer[idx] <= 0) ) { + // End of Packet will have a High to zero drop and stay around 0, so if it drags on or does not keep going down + // + if (((GraphBuffer[idx+5] + 10) > GraphBuffer[idx]) || (pulseSamples > 50)) { // very high chance of being noise + eop = true; + } else { // if we have way too many samples, wont be a valid bit. + if (pulseSamples >= maxWidth) //16) // 30 ?? + data[dataLen++] = '1'; + else { + if (pulseSamples >= minWidth) // Since we found Min Width this should be hit + data[dataLen++] = '0'; + else { + eop = true; // Too short, not a bit - Something went wrong, as we found min width + } + } + } + } + else + pulseSamples++; + if (dataLen > 80) // to long for t55xx packets + eop = true; + idx++; + } + data[dataLen] = 0x00; + + // printf ("%d : %s\n",dataLen,data); + + sprintf(modeText, "Default"); + sprintf(pwdText, " "); + + if (dataLen == 73) { // Potential leading 0 password write. + if ((memcmp (data, "01100", 5) == 0) || (memcmp (data, "01000", 5) == 0)) { // Still looking good Page 1 or 0 + + page = data[2] - '0'; + usedPassword = 0; + for (uint8_t i = 5; i < 32+5; i++) { + usedPassword <<= 1; + if (data[i] == '1') + usedPassword |= 1; + } + blockData = 0; + for (uint8_t i = 38; i < 38+32; i++) { + blockData <<= 1; + if (data[i] == '1') + blockData |= 1; + } + blockAddr = 0; + for (uint8_t i = 70; i < 70+3; i++) { + blockAddr <<= 1; + if (data[i] == '1') + blockAddr |= 1; + } + haveData = true; + sprintf(modeText, "leading 0"); + sprintf(pwdText,"%08X", usedPassword); + } + } + + if (dataLen == 70) { // Potential default password write. + + if ((memcmp (data, "10", 2) == 0) || (memcmp (data, "11", 2) == 0)) { // Still looking good Page 1 or 0 + + page = data[1] - '0'; + usedPassword = 0; + for (uint8_t i = 2; i < 34; i++) { + usedPassword <<= 1; + if (data[i] == '1') + usedPassword |= 1; + } + blockData = 0; + for (uint8_t i = 35; i < 67; i++) { + blockData <<= 1; + if (data[i] == '1') + blockData |= 1; + } + blockAddr = 0; + for (uint8_t i = 67; i < 70; i++) { + blockAddr <<= 1; + if (data[i] == '1') + blockAddr |= 1; + } + haveData = true; + sprintf(pwdText, "%08X", usedPassword); + } + } + + + if (dataLen == 38) { // Potential defaukt write (no password). + + if ((memcmp (data, "10", 2) == 0) || (memcmp (data, "11", 2) == 0)) { // Still looking good Page 1 or 0 + + page = data[1] - '0'; + blockData = 0; + for (uint8_t i = 3; i < 35; i++) { + blockData <<= 1; + if (data[i] == '1') + blockData |= 1; + } + blockAddr = 0; + for (uint8_t i = 35; i < 38; i++) { + blockAddr <<= 1; + if (data[i] == '1') + blockAddr |= 1; + } + haveData = true; + } + } + + if (haveData) { + if (blockAddr == 7) + PrintAndLogEx (SUCCESS, "%-15s | "_GREEN_("%s")" | "_YELLOW_("%08X")" | "_YELLOW_("%d")" | "_GREEN_("%d")" | %3d | %3d | %s", modeText, pwdText, blockData, blockAddr, page, minWidth, maxWidth, data); + else + PrintAndLogEx (SUCCESS, "%-15s | "_GREEN_("%s")" | "_GREEN_("%08X")" | "_GREEN_("%d")" | "_GREEN_("%d")" | %3d | %3d | %s", modeText, pwdText, blockData, blockAddr, page, minWidth, maxWidth, data); + } + } + PrintAndLogEx (SUCCESS, "------------------------------------------------------------------------------------------------------------------------------------------------"); + PrintAndLogEx (NORMAL, ""); + + return PM3_SUCCESS; +} + static command_t CommandTable[] = { {"-----------", CmdHelp, AlwaysAvailable, "--------------------- " _CYAN_("operations") " ---------------------"}, {"help", CmdHelp, AlwaysAvailable, "This help"}, @@ -3732,6 +4035,7 @@ static command_t CommandTable[] = { {"chk", CmdT55xxChkPwds, IfPm3Lf, "Check passwords from dictionary/flash"}, {"protect", CmdT55xxProtect, IfPm3Lf, "Password protect tag"}, {"recoverpw", CmdT55xxRecoverPW, IfPm3Lf, "[password] Try to recover from bad password write from a cloner. Only use on PW protected chips!"}, + {"sniff", CmdT55xxSniff, AlwaysAvailable, "Attempt to recover T55xx commands from sample buffer"}, {"special", special, IfPm3Lf, "Show block changes with 64 different offsets"}, {"wipe", CmdT55xxWipe, IfPm3Lf, "[q] Wipe a T55xx tag and set defaults (will destroy any data on tag)"}, {NULL, NULL, NULL, NULL} From 820031eb034c36c0814d18354448be1594b51eb8 Mon Sep 17 00:00:00 2001 From: mwalker33 Date: Thu, 17 Sep 2020 11:27:13 +1000 Subject: [PATCH 0517/1047] Update cmdlft55xx.c Update lf t55 sniff Supports option to set min signal level and extra check for invalid data. --- client/src/cmdlft55xx.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/client/src/cmdlft55xx.c b/client/src/cmdlft55xx.c index 394253191..9cc15168b 100644 --- a/client/src/cmdlft55xx.c +++ b/client/src/cmdlft55xx.c @@ -401,9 +401,10 @@ static int usage_t55xx_clonehelp(void) { return PM3_SUCCESS; } static int usage_t55xx_sniff(void) { - PrintAndLogEx(NORMAL, "Usage: lf t55xx sniff [w ] [b] [h]"); + PrintAndLogEx(NORMAL, "Usage: lf t55xx sniff [w ] [l ] [b] [h]"); PrintAndLogEx(NORMAL, "Options:"); PrintAndLogEx(NORMAL, " w <0> <1> - Set samples width for 0 and 1 matching (default auto detect)"); + PrintAndLogEx(NORMAL, " l - Set minimum signal level (default 20)"); PrintAndLogEx(NORMAL, " b - Extract from current sample buffer (default will get new samples)"); PrintAndLogEx(NORMAL, " h - This help"); PrintAndLogEx(NORMAL, ""); @@ -3728,6 +3729,7 @@ static int CmdT55xxSniff(const char *Cmd) { bool sampleData = true; uint8_t width0 = 0; uint8_t width1 = 0; + uint8_t minLevel = 20; int pulseSamples = 0; bool eop; uint8_t page; @@ -3791,6 +3793,10 @@ static int CmdT55xxSniff(const char *Cmd) { return usage_t55xx_sniff(); } break; + case 'l': + minLevel = param_get8ex(Cmd, cmdp + 1, 0, 10); + cmdp += 2; + break; default: cmdp++; PrintAndLogEx (ERR,"Invalid options supplied!"); @@ -3808,6 +3814,7 @@ static int CmdT55xxSniff(const char *Cmd) { PrintAndLogEx(NORMAL, ""); PrintAndLogEx(INFO,_CYAN_("T55xx write Detection")); + PrintAndLogEx(INFO,"Minimum signal level : "_GREEN_("%d"),minLevel); PrintAndLogEx(SUCCESS, "Downlink mode | password | Data | blk | page | 0 | 1 | raw"); PrintAndLogEx(SUCCESS, "-----------------+----------+----------+-----+------+-----+-----+-------------------------------------------------------------------------------"); @@ -3823,7 +3830,7 @@ static int CmdT55xxSniff(const char *Cmd) { while ((idx < GraphTraceLen) && ((GraphBuffer[idx] < -5) || (GraphBuffer[idx] > 5))) idx++; - while ((idx < GraphTraceLen) && ((GraphBuffer[idx] > -20) && (GraphBuffer[idx] < 20))) + while ((idx < GraphTraceLen) && ((GraphBuffer[idx] > (-1 * minLevel)) && (GraphBuffer[idx] < minLevel))) idx++; eop = false; @@ -3876,7 +3883,7 @@ static int CmdT55xxSniff(const char *Cmd) { // Skip till we get to a "non modulated section" - ie skip if sample is in mid packet while ((idx < GraphTraceLen) && ((GraphBuffer[idx] < -5) || (GraphBuffer[idx] > 5))) idx++; - while ((idx < GraphTraceLen) && ((GraphBuffer[idx] > -25) && (GraphBuffer[idx] < 25))) + while ((idx < GraphTraceLen) && ((GraphBuffer[idx] > (-1 * minLevel)) && (GraphBuffer[idx] < minLevel))) idx++; dataLen = 0; @@ -3999,7 +4006,7 @@ static int CmdT55xxSniff(const char *Cmd) { } } - if (haveData) { + if ((haveData) && (minWidth > 1) && (maxWidth > minWidth)){ if (blockAddr == 7) PrintAndLogEx (SUCCESS, "%-15s | "_GREEN_("%s")" | "_YELLOW_("%08X")" | "_YELLOW_("%d")" | "_GREEN_("%d")" | %3d | %3d | %s", modeText, pwdText, blockData, blockAddr, page, minWidth, maxWidth, data); else From c836413e0e8b9a85003aa459a4f3b048846be077 Mon Sep 17 00:00:00 2001 From: Iceman Date: Thu, 17 Sep 2020 06:32:42 +0200 Subject: [PATCH 0518/1047] Update Windows-Installation-Instructions.md --- .../Windows-Installation-Instructions.md | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/doc/md/Installation_Instructions/Windows-Installation-Instructions.md b/doc/md/Installation_Instructions/Windows-Installation-Instructions.md index b51548108..af981d3b6 100644 --- a/doc/md/Installation_Instructions/Windows-Installation-Instructions.md +++ b/doc/md/Installation_Instructions/Windows-Installation-Instructions.md @@ -22,7 +22,17 @@ Step by step guides are online such as [RyscCorps](https://store.ryscc.com/blogs Download the Gator96100 ProxSpace package from https://github.com/Gator96100/ProxSpace/releases Extract 'ProxSpace' to a location path without spaces. -For example D:\OneDrive\Documents\GitHub is ok whereas C:\My Documents\My Projects\proxspace is not. + +Good example +``` +D:\OneDrive\Documents\GitHub +``` + +Bad example +``` +C:\My Documents\My Projects\proxspace + ^ +``` If you're running Windows in a Virtualbox guest, make sure not to install ProxSpace on a vbox shared drive. (It's ok later to move the `/pm3` subfolder to a shared drive and edit the `*.bat`) From 1933f1be540d374ca544bcdb1607da737d5afa7d Mon Sep 17 00:00:00 2001 From: Iceman Date: Thu, 17 Sep 2020 06:45:09 +0200 Subject: [PATCH 0519/1047] Update Windows-Installation-Instructions.md --- .../Windows-Installation-Instructions.md | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/doc/md/Installation_Instructions/Windows-Installation-Instructions.md b/doc/md/Installation_Instructions/Windows-Installation-Instructions.md index af981d3b6..bcef291cf 100644 --- a/doc/md/Installation_Instructions/Windows-Installation-Instructions.md +++ b/doc/md/Installation_Instructions/Windows-Installation-Instructions.md @@ -66,11 +66,13 @@ Now you're ready to follow the [compilation instructions](/doc/md/Use_of_Proxmar # Installing on Windows with WSL 1 -WSL 1 requires to run on Windows 10 version 1709 or above. Previous versions didn't have support for COM ports. +WSL 1 requires to run on Windows 10 version 1709 or above. Previous windows versions didn't have support for COM ports. +### stay away from WSL 2 *Microsoft introduced WSL 2 starting on Windows 10 version 2004 with Hyper-V powering its virtualization; As of 2020-08-13, WSL 2 does not support USB and Serial.* -Install WSL 1 with e.g. the standard Ubuntu. You can follow the guide on [Microsoft Docs](https://docs.microsoft.com/en-us/windows/wsl/install-win10) but be careful to follow WSL 1 specific instructions! +### +Install WSL 1 with e.g. the standard Ubuntu. You can follow the guide on [Microsoft Docs](https://docs.microsoft.com/en-us/windows/wsl/install-win10) but be careful to follow WSL 1 specific instructions! When they recommend you to restart, you must restart. For WSL configuration, see [Manage and configure Windows Subsystem for Linux](https://docs.microsoft.com/en-us/windows/wsl/wsl-config). @@ -80,9 +82,14 @@ Make sure your WSL can launch Windows processes to get the `pm3` scripts working If you want to run the graphical components of the Proxmark3 client, you need to install a X Server such as [VcXsrv](https://sourceforge.net/projects/vcxsrv/) or [Xming](https://sourceforge.net/projects/xming/) and launch it, e.g. by executing XLaunch. +## Window terminal Installation +Microsoft has recent released a new terminal for their OS. It is much better experience than old `cmd.exe` so we strongly recommend installing it. +It is also open sourced, ref [terminal](https://github.com/microsoft/terminal). You can download and install from here: [windows terminal](https://aka.ms/terminal) + + ## Dependencies -Enter WSL prompt (`wsl`) and from there, follow the [Linux Installation Instructions](/doc/md/Installation_Instructions/Linux-Installation-Instructions.md) for Ubuntu, summarized here below: +Enter WSL prompt (`wsl` or `start windows terminal`) and from there, follow the [Linux Installation Instructions](/doc/md/Installation_Instructions/Linux-Installation-Instructions.md) for Ubuntu, summarized here below: Make sure your WSL guest OS is up-to-date first ```sh @@ -96,7 +103,7 @@ Install dependencies sudo apt-get install --no-install-recommends git ca-certificates build-essential pkg-config \ libreadline-dev gcc-arm-none-eabi libnewlib-dev libbz2-dev qtbase5-dev ``` - +_note_ If you don't need the graphical components of the Proxmark3 client, you can skip the installation of `qtbase5-dev`. ## Clone the RRG/Iceman repository @@ -107,13 +114,13 @@ git clone https://github.com/RfidResearchGroup/proxmark3.git ## Compile and use the project -To use the compiled client, the only difference is that the Proxmark3 port is translated from your `comX` port where "X" is the com port number assigned to proxmark3 under Windows, to a `/dev/ttySX`, so commands become: +To use the compiled client, the only difference is that the Proxmark3 port is translated from your `comX` port where **"X"** is the com port number assigned to proxmark3 under Windows, to a `/dev/ttySX`, so commands become: ```sh proxmark3 /dev/ttyACM0 => proxmark3 /dev/ttySX ``` -Depending on the Windows version, you might need to give permission to the current user to access `/dev/ttySX`: (change X to your port number) +Depending on the Windows version, you might need to give permission to the current user to access `/dev/ttySX`: (change **X** to your port number) ```sh ls -al /dev/ttySX From 5c31ad2f91581b22d2715fa6ab7afbc26fc215d4 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 17 Sep 2020 06:49:01 +0200 Subject: [PATCH 0520/1047] text --- doc/cloner_notes.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/doc/cloner_notes.md b/doc/cloner_notes.md index 6937e4c06..e4bef427c 100644 --- a/doc/cloner_notes.md +++ b/doc/cloner_notes.md @@ -7,6 +7,7 @@ This document is based mostly on information posted on http://www.proxmark.org/f - [White cloner (after 2016)](#white-cloner-after-2016) - [White cloner (after 2016 D Quality)](#white-cloner-after-2016-d-quality) - [restore page1 data](#restore-page1-data) +- [Sniffing the comms](#sniffing-the-comms) # Blue and black cloners @@ -61,3 +62,10 @@ Standard password is normally (for T55xx): AA55BBBB lf t55xx write b 1 d E0150A48 1 If t55xx write b 2 d 2D782308 1 ``` + +# Sniffing the comms +The T55x7 protocol uses a pwm based protocol for writing to tags. In order to make decoding easier when doing lf sniffing try the new command as seen below instead + +``` +lf t55xx sniff +``` \ No newline at end of file From 600c53b28ce95a8ec746ca6b94878b009d75b266 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 17 Sep 2020 06:53:27 +0200 Subject: [PATCH 0521/1047] text --- doc/cloner_notes.md | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/doc/cloner_notes.md b/doc/cloner_notes.md index e4bef427c..f0d3df87f 100644 --- a/doc/cloner_notes.md +++ b/doc/cloner_notes.md @@ -64,8 +64,17 @@ If t55xx write b 2 d 2D782308 1 ``` # Sniffing the comms -The T55x7 protocol uses a pwm based protocol for writing to tags. In order to make decoding easier when doing lf sniffing try the new command as seen below instead +The T55x7 protocol uses a pwm based protocol for writing to tags. In order to make decoding easier try the new command as seen below instead. It will try to extract the data written. ``` +lf config s lf t55xx sniff -``` \ No newline at end of file + +-- if you have a save trace from before, try +data load xxxxxxx.pm3 +lf t55xx sniff b +``` + +It uses the existing `lf sniff` command to collect the data, so setting that first as per normal sniffing is recommended. Once you have a sniff, you can "re-sniff" from the stored sniffed data and try different settings, if you think the data is not clean. + +As normal, the cloner may write data past the end of the 40K sample buffer. So using the `lf config s ` then re-run the sniff to see if there is more data. \ No newline at end of file From 1a1c2bfee7792775fa8ed9fc49551f0c8b7cac42 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Thu, 17 Sep 2020 10:13:06 +0200 Subject: [PATCH 0522/1047] const payload_header_size --- client/src/cmdlf.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/src/cmdlf.c b/client/src/cmdlf.c index c324a7ba9..f7ffab795 100644 --- a/client/src/cmdlf.c +++ b/client/src/cmdlf.c @@ -324,7 +324,7 @@ int CmdLFCommandRead(const char *Cmd) { uint32_t samples = 0; uint16_t datalen = 0; - uint8_t payload_header_size = 12; + const uint8_t payload_header_size = 12; struct p { uint32_t delay; uint16_t ones; From a1738aee27992602ed864a503971546a2fa21048 Mon Sep 17 00:00:00 2001 From: mwalker33 Date: Thu, 17 Sep 2020 18:26:59 +1000 Subject: [PATCH 0523/1047] lf t55xx sniff - option fix change level samples to "s" and from buffer to "1" --- CHANGELOG.md | 1 + client/src/cmdlft55xx.c | 14 +++++++------- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d95130493..1049fd0d0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ All notable changes to this project will be documented in this file. This project uses the changelog in accordance with [keepchangelog](http://keepachangelog.com/). Please use this to write notable changes, which is not the same as git commit log... ## [unreleased][unreleased] + - Add lf t55xx sniff to allow extracting commands and passwords used be cloners. (@mwalker33) - Add options to `lf read` and `lf cmdread` (@doegox) - Change options of `lf read` to match `lf cmdread`, this affects historical `d` and `s` options (@doegox) - Add `hf waveshare` to upload picture to Waveshare NFC-Powered e-Paper (@doegox) diff --git a/client/src/cmdlft55xx.c b/client/src/cmdlft55xx.c index 9cc15168b..617cb4c92 100644 --- a/client/src/cmdlft55xx.c +++ b/client/src/cmdlft55xx.c @@ -401,17 +401,17 @@ static int usage_t55xx_clonehelp(void) { return PM3_SUCCESS; } static int usage_t55xx_sniff(void) { - PrintAndLogEx(NORMAL, "Usage: lf t55xx sniff [w ] [l ] [b] [h]"); + PrintAndLogEx(NORMAL, "Usage: lf t55xx sniff [w ] [l ] [s ] [1] [h]"); PrintAndLogEx(NORMAL, "Options:"); PrintAndLogEx(NORMAL, " w <0> <1> - Set samples width for 0 and 1 matching (default auto detect)"); - PrintAndLogEx(NORMAL, " l - Set minimum signal level (default 20)"); - PrintAndLogEx(NORMAL, " b - Extract from current sample buffer (default will get new samples)"); + PrintAndLogEx(NORMAL, " s - Set minimum signal level (default 20)"); + PrintAndLogEx(NORMAL, " 1 - Extract from current sample buffer (default will get new samples)"); PrintAndLogEx(NORMAL, " h - This help"); PrintAndLogEx(NORMAL, ""); PrintAndLogEx(NORMAL, "Examples:"); PrintAndLogEx(NORMAL, _YELLOW_(" lf t55xx sniff")); - PrintAndLogEx(NORMAL, _YELLOW_(" lf t55xx sniff b")); - PrintAndLogEx(NORMAL, _YELLOW_(" lf t55xx sniff w 7 14 b")); + PrintAndLogEx(NORMAL, _YELLOW_(" lf t55xx sniff 1")); + PrintAndLogEx(NORMAL, _YELLOW_(" lf t55xx sniff w 7 14 1")); PrintAndLogEx(NORMAL, ""); return PM3_SUCCESS; } @@ -3777,7 +3777,7 @@ static int CmdT55xxSniff(const char *Cmd) { switch (tolower(param_getchar(Cmd, cmdp))) { case 'h': return usage_t55xx_sniff(); - case 'b': + case '1': sampleData = false; cmdp ++; break; @@ -3793,7 +3793,7 @@ static int CmdT55xxSniff(const char *Cmd) { return usage_t55xx_sniff(); } break; - case 'l': + case 's': minLevel = param_get8ex(Cmd, cmdp + 1, 0, 10); cmdp += 2; break; From 8d2e26d741a481a07f6edc5c583c93f364060ffd Mon Sep 17 00:00:00 2001 From: Iceman Date: Thu, 17 Sep 2020 13:57:40 +0200 Subject: [PATCH 0524/1047] Update README.md --- README.md | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 287648038..87021e760 100644 --- a/README.md +++ b/README.md @@ -57,14 +57,14 @@ On the software side: quite a lot, see the [Changelog file](CHANGELOG.md). This repo compiles nicely on - Proxspace v3.x - - [latest release v3.5](https://github.com/Gator96100/ProxSpace/releases) + - [latest release v3.6](https://github.com/Gator96100/ProxSpace/releases) - Windows/mingw environment with Qt5.6.1 & GCC 4.9 - - Ubuntu 1604 -> 2004 + - Ubuntu 16.04 -> 20.04 - ParrotOS, Gentoo, Pentoo, Kali, Nethunter, Archlinux, Fedora, Debian - Rasbian - Android / Termux - Mac OS X / Homebrew - - WSL, WSL2 (Windows subsystem linux) on Windows 10 + - WSL1 (Windows subsystem linux) on Windows 10 - Docker container - [ RRG / Iceman repo based ubuntu 18.04 container ](https://hub.docker.com/r/secopsconsult/proxmark3) - [ Iceman fork based container v1.7 ](https://hub.docker.com/r/iceman1001/proxmark3/) @@ -73,7 +73,7 @@ Hardware to run client on - PC - Android - Raspberry Pi & Raspberry Pi Zero - - Jetson Nano + - Nvidia Jetson Nano ## Precompiled binaries We don't maintain any precompiled binaries in this repo. There is community effort over at the Proxmark3 forum where @gator96100 has set up a google drive with many mingw binaries which is up-to-date. We link to these files here as to make it easier for users. @@ -81,14 +81,15 @@ If you are having troubles with these files, contact the package maintainer @gat Ref: - +For Proxmark3 RDV4 - [Precompiled builds for RDV40 dedicated x86](https://drive.google.com/open?id=13zUs-aiQkYaSl5KWrBtuW5IWCoHJPsue) - [Precompiled builds for RDV40 dedicated x64](https://drive.google.com/open?id=1SyPB8t5Vo8O0Lh7PjNm3Kv-mO4BNbxjX) +For Proxmark3 RDV4 with blueshark addon - [Precompiled builds for RDV40 dedicated with Bluetooth addon x86](https://drive.google.com/open?id=1TqWYctkRvkLshQ1ZRBHPLDzYHR-asuMO) - [Precompiled builds for RDV40 dedicated with Bluetooth addon x64](https://drive.google.com/open?id=17ful7u2QyYmMQzQzc5fAf8nJvyoDJfSL) -Generice Proxmark3 devices (non RDV4) +Generice Proxmark3 devices (non RDV4), for Proxmark3 Easy, RDV1, RDV2, RDV3, etc etc - [Precompiled builds for RRG / Iceman repository x86](https://drive.google.com/open?id=1PI3Xr1mussPBPnYGu4ZjWzGPARK4N7JR) - [Precompiled builds for RRG / Iceman repository x64](https://drive.google.com/open?id=1uX9RtYGinuFrpHybu4xq_BE3HrobI20e) @@ -101,11 +102,12 @@ We usually merge your contributions fast since we do like the idea of getting a ## Issues & Troubleshooting -Please search the [issues](https://github.com/rfidresearchgroup/proxmark3/issues) page here and see if your issue is listed in the first instance. Next place to visit is the [Proxmark Forum](http://www.proxmark.org/forum/index.php). Learn to search it well and finally Google / duckduckgo is your friend :) You will find many blogposts, youtube videos, tweets, reddit - +Please search the [issues](https://github.com/rfidresearchgroup/proxmark3/issues) page here and see if your issue is listed in the first instance. Read the [Troubleshooting](/doc/md/Installation_Instructions/Troubleshooting.md) guide to weed out most known problems. -Offical channels +Next place to visit is the [Proxmark Forum](http://www.proxmark.org/forum/index.php). Learn to search it well and finally Google / duckduckgo is your friend :) You will find many blogposts, youtube videos, tweets, reddit + +### Offical channels - [Proxmark3 IRC channel](http://webchat.freenode.net/?channels=#proxmark3) - [Proxmark3 sub reddit](https://www.reddit.com/r/proxmark3/) - [Twitter](https://twitter.com/proxmark3/) @@ -131,7 +133,7 @@ The separation from official Proxmark3 repo gives us a lot of freedom to create ## Proxmark3 GUI The official PM3-GUI from Gaucho will not work. -The new universal GUI will work. [Proxmark3 Universal GUI](https://github.com/burma69/PM3UniversalGUI) Almost, change needed in order to show helptext when client isn't connected to a device. +The new [Proxmark3 Universal GUI](https://github.com/burma69/PM3UniversalGUI) will work more or less. Change is needed in order to show helptext when client isn't connected to a device. We don't know how active the maintainers. ## The end From 5a109122d3e8e75024f9670cd55cd524e6d45021 Mon Sep 17 00:00:00 2001 From: Iceman Date: Thu, 17 Sep 2020 14:22:07 +0200 Subject: [PATCH 0525/1047] Update README.md --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 87021e760..3155f8093 100644 --- a/README.md +++ b/README.md @@ -3,9 +3,9 @@ -| Releases | Linux & OSX CI | Windows CI | Coverity | -| ------------------- |:-------------------:| -------------------:| -------------------:| -| [![Latest release](https://img.shields.io/github/v/release/rfidresearchgroup/proxmark3)](https://github.com/RfidResearchGroup/proxmark3/releases/latest) | [![Build status](https://api.travis-ci.org/RfidResearchGroup/proxmark3.svg?branch=master)](https://travis-ci.org/RfidResearchGroup/proxmark3) | [![Build status](https://ci.appveyor.com/api/projects/status/b4gwrhq3nc876cuu/branch/master?svg=true)](https://ci.appveyor.com/project/RfidResearchGroup/proxmark3/branch/master) | [![Coverity Status](https://scan.coverity.com/projects/19334/badge.svg)](https://scan.coverity.com/projects/proxmark3-rrg-iceman-repo)| +| Releases | Linux & OSX CI | Windows CI | Coverity | Contributors | +| ------------------- |:-------------------:| -------------------:| -------------------:| -------------------:| +| [![Latest release](https://img.shields.io/github/v/release/rfidresearchgroup/proxmark3)](https://github.com/RfidResearchGroup/proxmark3/releases/latest) | [![Build status](https://api.travis-ci.org/RfidResearchGroup/proxmark3.svg?branch=master)](https://travis-ci.org/RfidResearchGroup/proxmark3) | [![Build status](https://ci.appveyor.com/api/projects/status/b4gwrhq3nc876cuu/branch/master?svg=true)](https://ci.appveyor.com/project/RfidResearchGroup/proxmark3/branch/master) | [![Coverity Status](https://scan.coverity.com/projects/19334/badge.svg)](https://scan.coverity.com/projects/proxmark3-rrg-iceman-repo)| ![GitHub contributors](https://img.shields.io/github/contributors/rfidresearchgroup/proxmark3) | From 4ec7bca270dca73cc3e3fcd0369137af1d8e335a Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Thu, 17 Sep 2020 17:17:28 +0200 Subject: [PATCH 0526/1047] Add option to define extra symbols for 'lf cmdread', required e.g. for Hitag Micro and for talking to HT2 in emulation mode --- armsrc/appmain.c | 8 ++++--- armsrc/lfops.c | 27 ++++++++++++++------- armsrc/lfops.h | 2 +- client/src/cmdlf.c | 59 +++++++++++++++++++++++++++++++--------------- include/pm3_cmd.h | 1 + 5 files changed, 65 insertions(+), 32 deletions(-) diff --git a/armsrc/appmain.c b/armsrc/appmain.c index 0fc9dd63d..5aaa46bd8 100644 --- a/armsrc/appmain.c +++ b/armsrc/appmain.c @@ -770,13 +770,15 @@ static void PacketReceived(PacketCommandNG *packet) { case CMD_LF_MOD_THEN_ACQ_RAW_ADC: { struct p { uint32_t delay; - uint16_t ones; - uint16_t zeros; + uint16_t period_0; + uint16_t period_1; + uint8_t symbol_extra[LF_CMDREAD_MAX_EXTRA_SYMBOLS]; + uint16_t period_extra[LF_CMDREAD_MAX_EXTRA_SYMBOLS]; uint32_t samples : 31; bool verbose : 1; } PACKED; struct p *payload = (struct p *)packet->data.asBytes; - ModThenAcquireRawAdcSamples125k(payload->delay, payload->zeros, payload->ones, packet->data.asBytes + sizeof(struct p), payload->verbose, payload->samples); + ModThenAcquireRawAdcSamples125k(payload->delay, payload->period_0, payload->period_1, payload->symbol_extra, payload->period_extra, packet->data.asBytes + sizeof(struct p), payload->verbose, payload->samples); break; } case CMD_LF_SNIFF_RAW_ADC: { diff --git a/armsrc/lfops.c b/armsrc/lfops.c index 8c4b1e454..324f8ae0e 100644 --- a/armsrc/lfops.c +++ b/armsrc/lfops.c @@ -383,13 +383,15 @@ void loadT55xxConfig(void) { * @param period_1 * @param command (in binary char array) */ -void ModThenAcquireRawAdcSamples125k(uint32_t delay_off, uint32_t period_0, uint32_t period_1, uint8_t *command, bool verbose, uint32_t samples) { +void ModThenAcquireRawAdcSamples125k(uint32_t delay_off, uint16_t period_0, uint16_t period_1, uint8_t *symbol_extra, uint16_t *period_extra, uint8_t *command, bool verbose, uint32_t samples) { FpgaDownloadAndGo(FPGA_BITSTREAM_LF); // use lf config settings sample_config *sc = getSamplingConfig(); + LFSetupFPGAForADC(sc->divisor, true); + // this causes the field to turn on for uncontrolled amount of time, so we'll turn it off // Make sure the tag is reset FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); @@ -402,15 +404,14 @@ void ModThenAcquireRawAdcSamples125k(uint32_t delay_off, uint32_t period_0, uint // clear read buffer BigBuf_Clear_keep_EM(); - LFSetupFPGAForADC(sc->divisor, true); - - // little more time for the tag to fully power up - WaitMS(20); - // if delay_off = 0 then just bitbang 1 = antenna on 0 = off for respective periods. bool bitbang = (delay_off == 0); // now modulate the reader field + + // Some tags need to be interrogated very soon after activation else they enter their emulation mode + // Therefore it's up to the caller to add an initial symbol of adequate duration, except for bitbang mode. if (bitbang) { + TurnReadLFOn(20000); // HACK it appears the loop and if statements take up about 7us so adjust waits accordingly... uint8_t hack_cnt = 7; if (period_0 < hack_cnt || period_1 < hack_cnt) { @@ -459,11 +460,19 @@ void ModThenAcquireRawAdcSamples125k(uint32_t delay_off, uint32_t period_0, uint } else { // old mode of cmd read using delay as off period while (*command != '\0' && *command != ' ') { LED_D_ON(); - if (*(command++) == '0') + if (*command == '0') { TurnReadLFOn(period_0); - else + } else if (*command == '1') { TurnReadLFOn(period_1); - + } else { + for (uint8_t i=0; i < LF_CMDREAD_MAX_EXTRA_SYMBOLS; i++) { + if (*command == symbol_extra[i]) { + TurnReadLFOn(period_extra[i]); + break; + } + } + } + command++; LED_D_OFF(); FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); WaitUS(delay_off); diff --git a/armsrc/lfops.h b/armsrc/lfops.h index 17c79ef61..0ac8066af 100644 --- a/armsrc/lfops.h +++ b/armsrc/lfops.h @@ -15,7 +15,7 @@ #include "pm3_cmd.h" // struct -void ModThenAcquireRawAdcSamples125k(uint32_t delay_off, uint32_t period_0, uint32_t period_1, uint8_t *command, bool verbose, uint32_t samples); +void ModThenAcquireRawAdcSamples125k(uint32_t delay_off, uint16_t period_0, uint16_t period_1, uint8_t *symbol_extra, uint16_t *period_extra, uint8_t *command, bool verbose, uint32_t samples); void ReadTItag(void); void WriteTItag(uint32_t idhi, uint32_t idlo, uint16_t crc); diff --git a/client/src/cmdlf.c b/client/src/cmdlf.c index f7ffab795..98c794b69 100644 --- a/client/src/cmdlf.c +++ b/client/src/cmdlf.c @@ -56,29 +56,36 @@ #include "cmdlfmotorola.h" // for Motorola menu #include "cmdlfgallagher.h" // for GALLAGHER menu +#define LF_CMDREAD_MAX_EXTRA_SYMBOLS 4 static bool g_lf_threshold_set = false; static int CmdHelp(const char *Cmd); static int usage_lf_cmdread(void) { - PrintAndLogEx(NORMAL, "Usage: lf cmdread d z o c [q] [s #samples] [@]"); + PrintAndLogEx(NORMAL, "Usage: lf cmdread d z o [e ] c [q] [s #samples] [@]"); PrintAndLogEx(NORMAL, "Options:"); PrintAndLogEx(NORMAL, " h This help"); - PrintAndLogEx(NORMAL, " d delay OFF period, (0 for bitbang mode) (decimal)"); - PrintAndLogEx(NORMAL, " z ZERO time period (decimal)"); - PrintAndLogEx(NORMAL, " o ONE time period (decimal)"); - PrintAndLogEx(NORMAL, " c Command bytes (in ones and zeros)"); - PrintAndLogEx(NORMAL, " q silent (optional)"); - PrintAndLogEx(NORMAL, " s #samples number of samples to collect (optional)"); - PrintAndLogEx(NORMAL, " @ run continuously until a key is pressed (optional)"); + PrintAndLogEx(NORMAL, " d delay OFF period, (0 for bitbang mode)"); + PrintAndLogEx(NORMAL, " z ZERO time period"); + PrintAndLogEx(NORMAL, " o ONE time period"); + PrintAndLogEx(NORMAL, " e Extra symbol definition and duration (up to %i)", LF_CMDREAD_MAX_EXTRA_SYMBOLS); + PrintAndLogEx(NORMAL, " b B period"); + PrintAndLogEx(NORMAL, " c Command symbols (0/1/...)"); + PrintAndLogEx(NORMAL, " q silent (optional)"); + PrintAndLogEx(NORMAL, " s #samples number of samples to collect (optional)"); + PrintAndLogEx(NORMAL, " @ run continuously until a key is pressed (optional)"); PrintAndLogEx(NORMAL, ""); - PrintAndLogEx(NORMAL, " ************* " _YELLOW_("All periods in microseconds (us)")); + PrintAndLogEx(NORMAL, " ************* " _YELLOW_("All periods in decimal and in microseconds (μs)")); PrintAndLogEx(NORMAL, "Examples:"); - PrintAndLogEx(NORMAL, "- probing for HT2:"); - PrintAndLogEx(NORMAL, " lf cmdread d 50 z 116 o 166 c 011000"); - PrintAndLogEx(NORMAL, "- probing for HT2, oscilloscope style:"); + PrintAndLogEx(NORMAL, "- probing for Hitag 1/Hitag S:"); + PrintAndLogEx(NORMAL, " lf cmdread d 50 z 116 o 166 e W 3000 c W00110"); + PrintAndLogEx(NORMAL, "- probing for Hitag 2:"); + PrintAndLogEx(NORMAL, " lf cmdread d 50 z 116 o 166 e W 3000 c W11000"); + PrintAndLogEx(NORMAL, "- probing for Hitag 2, oscilloscope style:"); PrintAndLogEx(NORMAL, " data plot"); - PrintAndLogEx(NORMAL, " lf cmdread d 50 z 116 o 166 c 011000 q s 2000 @"); + PrintAndLogEx(NORMAL, " lf cmdread d 50 z 116 o 166 e W 3000 c W11000 q s 2000 @"); + PrintAndLogEx(NORMAL, "- probing for Hitag μ:"); + PrintAndLogEx(NORMAL, " lf cmdread d 48 z 112 o 176 e W 3000 e S 240 e E 336 c W0S00000010000E"); PrintAndLogEx(NORMAL, "Extras:"); PrintAndLogEx(NORMAL, " use " _YELLOW_("'lf config'")" to set parameters."); return PM3_SUCCESS; @@ -324,17 +331,20 @@ int CmdLFCommandRead(const char *Cmd) { uint32_t samples = 0; uint16_t datalen = 0; - const uint8_t payload_header_size = 12; + const uint8_t payload_header_size = 12 + (3 * LF_CMDREAD_MAX_EXTRA_SYMBOLS); struct p { uint32_t delay; - uint16_t ones; - uint16_t zeros; + uint16_t period_0; + uint16_t period_1; + uint8_t symbol_extra[LF_CMDREAD_MAX_EXTRA_SYMBOLS]; + uint16_t period_extra[LF_CMDREAD_MAX_EXTRA_SYMBOLS]; uint32_t samples : 31; bool verbose : 1; uint8_t data[PM3_CMD_DATA_SIZE - payload_header_size]; } PACKED payload; payload.samples = samples; payload.verbose = verbose; + uint8_t index_extra = 0; uint8_t cmdp = 0; while (param_getchar(Cmd, cmdp) != 0x00 && !errors) { @@ -350,13 +360,24 @@ int CmdLFCommandRead(const char *Cmd) { cmdp += 2; break; case 'z': // zero - payload.zeros = param_get32ex(Cmd, cmdp + 1, 0, 10) & 0xFFFF; + payload.period_0 = param_get32ex(Cmd, cmdp + 1, 0, 10) & 0xFFFF; cmdp += 2; break; case 'o': // ones - payload.ones = param_get32ex(Cmd, cmdp + 1, 0, 10) & 0xFFFF; + payload.period_1 = param_get32ex(Cmd, cmdp + 1, 0, 10) & 0xFFFF; cmdp += 2; break; + case 'e': // extra symbol definition + if (index_extra < LF_CMDREAD_MAX_EXTRA_SYMBOLS - 1) { + payload.symbol_extra[index_extra] = param_getchar(Cmd, cmdp + 1); + payload.period_extra[index_extra] = param_get32ex(Cmd, cmdp + 2, 0, 10) & 0xFFFF; + index_extra++; + cmdp += 3; + } else { + PrintAndLogEx(WARNING, "Too many extra symbols, please define up to %i symbols", LF_CMDREAD_MAX_EXTRA_SYMBOLS); + errors = true; + } + break; case 's': samples = param_get32ex(Cmd, cmdp + 1, 0, 10); payload.samples = samples; @@ -380,7 +401,7 @@ int CmdLFCommandRead(const char *Cmd) { // bitbang mode if (payload.delay == 0) { - if (payload.zeros < 7 || payload.ones < 7) { + if (payload.period_0 < 7 || payload.period_1 < 7) { PrintAndLogEx(WARNING, "warning periods cannot be less than 7us in bit bang mode"); return PM3_EINVARG; } diff --git a/include/pm3_cmd.h b/include/pm3_cmd.h index 78fca9c62..6cacc5ef1 100644 --- a/include/pm3_cmd.h +++ b/include/pm3_cmd.h @@ -786,6 +786,7 @@ typedef struct { #define LF_DIVISOR_125 LF_FREQ2DIV(125) #define LF_DIVISOR_134 LF_FREQ2DIV(134.2) #define LF_DIV2FREQ(d) (12000.0/((d)+1)) +#define LF_CMDREAD_MAX_EXTRA_SYMBOLS 4 // Receiving from USART need more than 30ms as we used on USB // else we get errors about partial packet reception From b397839ec21a48c7064744eca2d89914f5eef711 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 17 Sep 2020 19:29:43 +0200 Subject: [PATCH 0527/1047] text --- doc/cloner_notes.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/doc/cloner_notes.md b/doc/cloner_notes.md index f0d3df87f..11d2b07b5 100644 --- a/doc/cloner_notes.md +++ b/doc/cloner_notes.md @@ -67,12 +67,13 @@ If t55xx write b 2 d 2D782308 1 The T55x7 protocol uses a pwm based protocol for writing to tags. In order to make decoding easier try the new command as seen below instead. It will try to extract the data written. ``` -lf config s +-- after threshold limit 20 is triggred, skip 10000 samples before collecting samples. +lf config s 10000 t 20 lf t55xx sniff -- if you have a save trace from before, try data load xxxxxxx.pm3 -lf t55xx sniff b +lf t55xx sniff 1 ``` It uses the existing `lf sniff` command to collect the data, so setting that first as per normal sniffing is recommended. Once you have a sniff, you can "re-sniff" from the stored sniffed data and try different settings, if you think the data is not clean. From 3d3784c9df88f82e77072e8e532264e556b0ae32 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 17 Sep 2020 19:30:42 +0200 Subject: [PATCH 0528/1047] ignore bmp files --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index db6ff9138..081c0f8e8 100644 --- a/.gitignore +++ b/.gitignore @@ -32,6 +32,7 @@ version.c *.swp *.json.bak *.pyc +*.bmp # new build file for add-ons. Makefile.platform From 8dd803cd6b934d100e620f3e59181812ac7c7aab Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Thu, 17 Sep 2020 19:40:49 +0200 Subject: [PATCH 0529/1047] hitag: avoid warning about unaligned pointer in packed struct --- armsrc/appmain.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/armsrc/appmain.c b/armsrc/appmain.c index 5aaa46bd8..184ac4090 100644 --- a/armsrc/appmain.c +++ b/armsrc/appmain.c @@ -778,7 +778,11 @@ static void PacketReceived(PacketCommandNG *packet) { bool verbose : 1; } PACKED; struct p *payload = (struct p *)packet->data.asBytes; - ModThenAcquireRawAdcSamples125k(payload->delay, payload->period_0, payload->period_1, payload->symbol_extra, payload->period_extra, packet->data.asBytes + sizeof(struct p), payload->verbose, payload->samples); + uint8_t symbol_extra[LF_CMDREAD_MAX_EXTRA_SYMBOLS]; + uint16_t period_extra[LF_CMDREAD_MAX_EXTRA_SYMBOLS]; + memcpy(symbol_extra, payload->symbol_extra, sizeof(symbol_extra)); + memcpy(period_extra, payload->period_extra, sizeof(period_extra)); + ModThenAcquireRawAdcSamples125k(payload->delay, payload->period_0, payload->period_1, symbol_extra, period_extra, packet->data.asBytes + sizeof(struct p), payload->verbose, payload->samples); break; } case CMD_LF_SNIFF_RAW_ADC: { From 8f2b9b9d66a74871f7d814c6b41443fe66629ccb Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 17 Sep 2020 22:17:16 +0200 Subject: [PATCH 0530/1047] less field timeup before first transmit --- armsrc/hitag2.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/armsrc/hitag2.c b/armsrc/hitag2.c index eab276bad..dc630e3fd 100644 --- a/armsrc/hitag2.c +++ b/armsrc/hitag2.c @@ -1431,13 +1431,14 @@ void ReaderHitag(hitag_function htf, hitag_data *htd) { // init as reader lf_init(true, false); + FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); uint8_t tag_modulation; size_t max_nrzs = (8 * HITAG_FRAME_LEN + 5) * 2; // up to 2 nrzs per bit uint8_t nrz_samples[max_nrzs]; + bool turn_on = true; size_t nrzs = 0; int16_t checked = 0; - uint32_t signal_size = 10000; while (bStop == false && BUTTON_PRESS() == false) { @@ -1498,6 +1499,11 @@ void ReaderHitag(hitag_function htf, hitag_data *htd) { goto out; } } + + if (turn_on) { + FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_ADC | FPGA_LF_ADC_READER_FIELD); + turn_on = false; + } // Wait for t_wait_2 carrier periods after the last tag bit before transmitting, lf_wait_periods(t_wait_2); From f00d9c22ef33c7f7c215a7f6c2739a18f68080f3 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 17 Sep 2020 23:08:29 +0200 Subject: [PATCH 0531/1047] fix appveyor illegal byte --- client/src/cmdlf.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/client/src/cmdlf.c b/client/src/cmdlf.c index 98c794b69..d810478a1 100644 --- a/client/src/cmdlf.c +++ b/client/src/cmdlf.c @@ -75,17 +75,17 @@ static int usage_lf_cmdread(void) { PrintAndLogEx(NORMAL, " s #samples number of samples to collect (optional)"); PrintAndLogEx(NORMAL, " @ run continuously until a key is pressed (optional)"); PrintAndLogEx(NORMAL, ""); - PrintAndLogEx(NORMAL, " ************* " _YELLOW_("All periods in decimal and in microseconds (μs)")); + PrintAndLogEx(NORMAL, " ************* " _YELLOW_("All periods in decimal and in microseconds (us)")); PrintAndLogEx(NORMAL, "Examples:"); PrintAndLogEx(NORMAL, "- probing for Hitag 1/Hitag S:"); - PrintAndLogEx(NORMAL, " lf cmdread d 50 z 116 o 166 e W 3000 c W00110"); + PrintAndLogEx(NORMAL, _YELLOW_(" lf cmdread d 50 z 116 o 166 e W 3000 c W00110")); PrintAndLogEx(NORMAL, "- probing for Hitag 2:"); - PrintAndLogEx(NORMAL, " lf cmdread d 50 z 116 o 166 e W 3000 c W11000"); + PrintAndLogEx(NORMAL, _YELLOW_(" lf cmdread d 50 z 116 o 166 e W 3000 c W11000")); PrintAndLogEx(NORMAL, "- probing for Hitag 2, oscilloscope style:"); - PrintAndLogEx(NORMAL, " data plot"); - PrintAndLogEx(NORMAL, " lf cmdread d 50 z 116 o 166 e W 3000 c W11000 q s 2000 @"); - PrintAndLogEx(NORMAL, "- probing for Hitag μ:"); - PrintAndLogEx(NORMAL, " lf cmdread d 48 z 112 o 176 e W 3000 e S 240 e E 336 c W0S00000010000E"); + PrintAndLogEx(NORMAL, _YELLOW_(" data plot")); + PrintAndLogEx(NORMAL, _YELLOW_(" lf cmdread d 50 z 116 o 166 e W 3000 c W11000 q s 2000 @")); + PrintAndLogEx(NORMAL, "- probing for Hitag (us):"); + PrintAndLogEx(NORMAL, _YELLOW_(" lf cmdread d 48 z 112 o 176 e W 3000 e S 240 e E 336 c W0S00000010000E")); PrintAndLogEx(NORMAL, "Extras:"); PrintAndLogEx(NORMAL, " use " _YELLOW_("'lf config'")" to set parameters."); return PM3_SUCCESS; From f7e6327fdfbb4d2a19750ebb7c742a07f57f5fa7 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 17 Sep 2020 23:08:49 +0200 Subject: [PATCH 0532/1047] coverity fixes --- client/src/cmdhfwaveshare.c | 45 ++++++++++++++++++++++--------------- 1 file changed, 27 insertions(+), 18 deletions(-) diff --git a/client/src/cmdhfwaveshare.c b/client/src/cmdhfwaveshare.c index bbcee4e18..b41ecefea 100644 --- a/client/src/cmdhfwaveshare.c +++ b/client/src/cmdhfwaveshare.c @@ -364,31 +364,36 @@ static int read_bmp_rgb(uint8_t *bmp, const size_t bmpsize, uint8_t model_nr, ui if (pbmpheader->bpp != 24) { return PM3_ESOFT; } + if (pbmpheader->B == 'M' || pbmpheader->M == 'B') { //0x4d42 PrintAndLogEx(WARNING, "The file is not a BMP!"); return PM3_ESOFT; } + PrintAndLogEx(DEBUG, "file size = %d", pbmpheader->fsize); PrintAndLogEx(DEBUG, "file offset = %d", pbmpheader->offset); if (pbmpheader->fsize > bmpsize) { PrintAndLogEx(WARNING, "The file is truncated!"); return PM3_ESOFT; } + // Get BMP file data pointer uint32_t offset = pbmpheader->offset; uint16_t width = pbmpheader->BMP_Width; uint16_t height = pbmpheader->BMP_Height; - int16_t *chanR = calloc(width*height, sizeof(int16_t)); + int16_t *chanR = calloc(width * height, sizeof(int16_t)); if (chanR == NULL) { return PM3_EMALLOC; } - int16_t *chanG = calloc(width*height, sizeof(int16_t)); + + int16_t *chanG = calloc(width * height, sizeof(int16_t)); if (chanG == NULL) { free(chanR); return PM3_EMALLOC; } - int16_t *chanB = calloc(width*height, sizeof(int16_t)); + + int16_t *chanB = calloc(width * height, sizeof(int16_t)); if (chanB == NULL) { free(chanR); free(chanG); @@ -396,26 +401,26 @@ static int read_bmp_rgb(uint8_t *bmp, const size_t bmpsize, uint8_t model_nr, ui } // Extracting BMP chans - for (uint16_t Y=0; Yoffset; - for (uint16_t Y=0; Yoffset; - for (uint16_t Y=0; Y rxBufLen) { - PrintAndLogEx(WARNING, "Received % bytes, rxBuf too small (%)", resp.oldarg[0], rxBufLen); + PrintAndLogEx(WARNING, "Received %u bytes, rxBuf too small (%u)", resp.oldarg[0], rxBufLen); memcpy(rxBuf, resp.data.asBytes, rxBufLen); *actLen = rxBufLen; return PM3_ESOFT; @@ -565,6 +573,7 @@ static int transceive_blocking( uint8_t* txBuf, uint16_t txBufLen, uint8_t* rxBu memcpy(rxBuf, resp.data.asBytes, resp.oldarg[0]); *actLen = resp.oldarg[0]; } + if ((retransmit) && (rxBuf[0] != 0 || rxBuf[1] != 0)) { fail_num++; if (fail_num > 10) { From 39892a028d164053d99e11955f0fb5f21528acfc Mon Sep 17 00:00:00 2001 From: Gator96100 Date: Thu, 17 Sep 2020 23:27:20 +0200 Subject: [PATCH 0533/1047] Appveyor add WSL support --- appveyor.yml | 159 ++++++++++++++++++++++++++++++++++----------------- 1 file changed, 106 insertions(+), 53 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 328796653..4eecb27f7 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -35,7 +35,7 @@ clone_script: Function ExecUpdate($Text, $firstStart) { Write-Host "$Text" -NoNewLine - Start-Process "cmd.exe" "/c ""cd /D $env:proxspace_path && call msys2\ps\setup.cmd && msys2\msys2_shell.cmd -mingw64 -defterm -no-start -c ""exit""""" + Start-Process "cmd.exe" "/c ""cd /D $env:proxspace_path && runme64.bat -c ""exit""""" $StartTime=[System.Environment]::TickCount Start-Sleep -s 10 while($true) { @@ -64,9 +64,15 @@ clone_script: } } + Function WSLExec($Text, $Cmd) { + Write-Host "$Text" -NoNewLine + wsl -- bash -c $Cmd + Write-Host "[ OK ]" -ForegroundColor Green + } + Write-Host "Removing ProxSpace..." -NoNewLine - $CloneTime=[System.Environment]::TickCount + $PSInstallTime=[System.Environment]::TickCount cd \ @@ -105,6 +111,22 @@ clone_script: Write-Host "ProxSpace version: $psversion" -ForegroundColor Yellow + Add-AppveyorMessage -Message "ProxSpace download and update took $(([System.Environment]::TickCount-$PSInstallTime) / 1000) sec" -Category Information + + $WSLInstallTime=[System.Environment]::TickCount + + WSLExec "WSL update..." "sudo apt-get update 1>/dev/null" + + WSLExec "WSL upgrade..." "sudo apt-get upgrade -y 1>/dev/null" + + WSLExec "WSL cleanup..." "sudo apt-get auto-remove -y 1>/dev/null" + + WSLExec "WSL install..." "sudo apt-get -y install --reinstall --no-install-recommends git ca-certificates build-essential pkg-config libreadline-dev gcc-arm-none-eabi libnewlib-dev libbz2-dev qtbase5-dev cmake 1>/dev/null" + + WSLExec "WSL QT fix..." "sudo strip --remove-section=.note.ABI-tag /usr/lib/x86_64-linux-gnu/libQt5Core.so.5" + + Add-AppveyorMessage -Message "WSL setup took $(([System.Environment]::TickCount-$WSLInstallTime) / 1000) sec" -Category Information + Write-Host "Cloning repository <$env:appveyor_repo_name> to $env:appveyor_build_folder ..." -NoNewLine if(-not $env:appveyor_pull_request_number) { @@ -118,9 +140,7 @@ clone_script: git checkout -qf FETCH_HEAD } - Write-Host "[ OK ]" -ForegroundColor Green - - Add-AppveyorMessage -Message "ProxSpace download and update took $(([System.Environment]::TickCount-$CloneTime) / 1000) sec" -Category Information + Write-Host "[ OK ]" -ForegroundColor Green install: @@ -131,91 +151,124 @@ build_script: Function ExecMinGWCmd($Cmd) { cd $env:proxspace_path - msys2\msys2_shell.cmd -mingw64 -defterm -no-start -c "cd $pmfolder && $Cmd" + ./runme64.bat -c "cd $pmfolder && $Cmd" } - - Write-Host "---------- make ----------" -ForegroundColor Yellow + Function ExecWSLCmd($Cmd) { + wsl -- bash -c $Cmd + } + + Function ExecCheck($Name) { + $testspass = ($LASTEXITCODE -eq 0) + + $global:TestsPassed=$testspass + + if ($testspass) { + Add-AppveyorTest -Name $Name -Framework NUnit -Filename $Name -Outcome Passed -Duration "$([System.Environment]::TickCount-$TestTime)" + Write-Host "$Name [ OK ]" -ForegroundColor Green + } else { + Add-AppveyorTest -Name $Name -Framework NUnit -Filename $Name -Outcome Failed -Duration "$([System.Environment]::TickCount-$TestTime)" + Write-Host "$Name [ ERROR ]" -ForegroundColor Red + throw "Tests error." + } + } + + #ProxSpace + + Write-Host "---------- PS make ----------" -ForegroundColor Yellow $TestTime=[System.Environment]::TickCount - #make - - cd $env:proxspace_path - - msys2\ps\setup.cmd - ExecMinGWCmd "make clean;make V=1" - #some checks - if(!(Test-Path "$env:proxspace_home_path\$pmfolder\client\proxmark3.exe")){ - throw "Main file proxmark3.exe not exists." + throw "Main file proxmark3.exe not exists." } ExecMinGWCmd 'make check' - $testspass = ($LASTEXITCODE -eq 0) + ExecCheck "PS make Tests" - $global:TestsPassed=$testspass - - if ($testspass) { - Add-AppveyorTest -Name "make Tests" -Framework NUnit -Filename "make check" -Outcome Passed -Duration "$([System.Environment]::TickCount-$TestTime)" - Write-Host "make Tests [ OK ]" -ForegroundColor Green - } else { - Add-AppveyorTest -Name "make Tests" -Framework NUnit -Filename "make check" -Outcome Failed -Duration "$([System.Environment]::TickCount-$TestTime)" - Write-Host "make Tests [ ERROR ]" -ForegroundColor Red - throw "Tests error." - } - - Write-Host "---------- btaddon ----------" -ForegroundColor Yellow + Write-Host "---------- PS btaddon ----------" -ForegroundColor Yellow $TestTime=[System.Environment]::TickCount ExecMinGWCmd 'make clean;make V=1 PLATFORM_EXTRAS=BTADDON' ExecMinGWCmd 'make check' - - $testspass = ($LASTEXITCODE -eq 0) - - $global:TestsPassed=(($global:TestsPassed) -and ($testspass)) - if ($testspass) { - Add-AppveyorTest -Name "BTaddon Tests" -Framework NUnit -Filename "make check" -Outcome Passed -Duration "$([System.Environment]::TickCount-$TestTime)" - Write-Host "BTaddon Tests [ OK ]" -ForegroundColor Green - } else { - Add-AppveyorTest -Name "BTaddon Tests" -Framework NUnit -Filename "make check" -Outcome Failed -Duration "$([System.Environment]::TickCount-$TestTime)" - Write-Host "BTaddon Tests [ ERROR ]" -ForegroundColor Red - } + ExecCheck "PS BTaddon Tests" - Write-Host "---------- make clean ----------" -ForegroundColor Yellow + Write-Host "---------- PS make clean ----------" -ForegroundColor Yellow ExecMinGWCmd 'make clean' - Write-Host "---------- cmake ----------" -ForegroundColor Yellow + Write-Host "---------- PS cmake ----------" -ForegroundColor Yellow $TestTime=[System.Environment]::TickCount ExecMinGWCmd 'mkdir -p client/build; cd client/build; cmake -G""MSYS Makefiles"" ..; make VERBOSE=1;' - Write-Host "---------- cmake tests ----------" -ForegroundColor Yellow + Write-Host "---------- PS cmake tests ----------" -ForegroundColor Yellow ExecMinGWCmd './tools/pm3_tests.sh --clientbin client/build/proxmark3.exe client' - $testspass = ($LASTEXITCODE -eq 0) - - $global:TestsPassed=(($global:TestsPassed) -and ($testspass)) + ExecCheck "PS cmake Tests" - if ($testspass) { - Add-AppveyorTest -Name "cmake Tests" -Framework NUnit -Filename "make client/check" -Outcome Passed -Duration "$([System.Environment]::TickCount-$TestTime)" - Write-Host "cmake Tests [ OK ]" -ForegroundColor Green - } else { - Add-AppveyorTest -Name "cmake Tests" -Framework NUnit -Filename "make client/check" -Outcome Failed -Duration "$([System.Environment]::TickCount-$TestTime)" - Write-Host "cmake Tests [ ERROR ]" -ForegroundColor Red + #Windows Subsystem for Linux (WSL) + + Write-Host "---------- WSL make ----------" -ForegroundColor Yellow + + cd $env:appveyor_build_folder + + $TestTime=[System.Environment]::TickCount + + ExecWSLCmd "make clean;make V=1" + + #some checks + + if(!(Test-Path "$env:proxspace_home_path\$pmfolder\client\proxmark3")){ + + throw "Main file proxmark3 not exists." + } + ExecWSLCmd "make check" + + ExecCheck "WSL make Tests" + + Start-Sleep -s 2 + + Write-Host "---------- WSL btaddon ----------" -ForegroundColor Yellow + + $TestTime=[System.Environment]::TickCount + + ExecWSLCmd "make clean;make V=1 PLATFORM_EXTRAS=BTADDON" + + ExecWSLCmd "make check" + + ExecCheck "WSL BTaddon Tests" + + Start-Sleep -s 2 + + Write-Host "---------- WSL make clean ----------" -ForegroundColor Yellow + + ExecWSLCmd 'make clean' + + Write-Host "---------- WSL cmake ----------" -ForegroundColor Yellow + + $TestTime=[System.Environment]::TickCount + + ExecWSLCmd 'rm -rf client/build;mkdir -p client/build; cd client/build; cmake ..; make VERBOSE=1;' + + Write-Host "---------- WSL cmake tests ----------" -ForegroundColor Yellow + + ExecWSLCmd './tools/pm3_tests.sh --clientbin client/build/proxmark3 client' + + ExecCheck "WSL cmake Tests" + test_script: - ps: >- if ($global:TestsPassed) { From e65b293043d632bf70d98d8f82983bb54a07f9d9 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Fri, 18 Sep 2020 11:01:50 +0200 Subject: [PATCH 0534/1047] add "hf mf egetsc", and renaming eget -> egetblk --- client/src/cmdhfmf.c | 70 ++++++++++++++++++++++++++++++++++++-------- 1 file changed, 58 insertions(+), 12 deletions(-) diff --git a/client/src/cmdhfmf.c b/client/src/cmdhfmf.c index 0220a026d..6bd4c9c28 100644 --- a/client/src/cmdhfmf.c +++ b/client/src/cmdhfmf.c @@ -317,10 +317,23 @@ static int usage_hf14_decryptbytes(void) { return PM3_SUCCESS; } -static int usage_hf14_eget(void) { - PrintAndLogEx(NORMAL, "Usage: hf mf eget "); +static int usage_hf14_egetblk(void) { + PrintAndLogEx(NORMAL, "Usage: hf mf egetblk "); + PrintAndLogEx(NORMAL, "Options:"); + PrintAndLogEx(NORMAL, " h this help"); + PrintAndLogEx(NORMAL, " block number"); PrintAndLogEx(NORMAL, "Examples:"); - PrintAndLogEx(NORMAL, _YELLOW_(" hf mf eget 0")); + PrintAndLogEx(NORMAL, _YELLOW_(" hf mf egetblk 0")); + return PM3_SUCCESS; +} +static int usage_hf14_egetsc(void) { + PrintAndLogEx(NORMAL, "Get sector data from emulator memory.\n"); + PrintAndLogEx(NORMAL, "Usage: hf mf egetsc [h] "); + PrintAndLogEx(NORMAL, "Options:"); + PrintAndLogEx(NORMAL, " h this help"); + PrintAndLogEx(NORMAL, " sector number"); + PrintAndLogEx(NORMAL, "Examples:"); + PrintAndLogEx(NORMAL, _YELLOW_(" hf mf egetsc 0")); return PM3_SUCCESS; } static int usage_hf14_eclr(void) { @@ -3607,9 +3620,9 @@ void printKeyTableEx(uint8_t sectorscnt, sector_t *e_sector, uint8_t start_secto // EMULATOR COMMANDS -static int CmdHF14AMfEGet(const char *Cmd) { +static int CmdHF14AMfEGetBlk(const char *Cmd) { char c = tolower(param_getchar(Cmd, 0)); - if (strlen(Cmd) < 1 || c == 'h') return usage_hf14_eget(); + if (strlen(Cmd) < 1 || c == 'h') return usage_hf14_egetblk(); uint8_t data[16] = {0x00}; uint8_t blockNo = param_get8(Cmd, 0); @@ -3620,6 +3633,38 @@ static int CmdHF14AMfEGet(const char *Cmd) { } return PM3_SUCCESS; } +static int CmdHF14AMfEGetSc(const char *Cmd) { + uint8_t data[16] = {0}; + + char ctmp = tolower(param_getchar(Cmd, 0)); + if (strlen(Cmd) < 1 || ctmp == 'h') return usage_hf14_egetsc(); + + uint8_t sector = param_get8(Cmd, 0); + if (sector > 39) { + PrintAndLogEx(WARNING, "Sector number must be less then 40"); + return PM3_ESOFT; + } + + PrintAndLogEx(NORMAL, "\n # | data - sector %02d / 0x%02X ", sector, sector); + PrintAndLogEx(NORMAL, "----+------------------------------------------------"); + uint8_t blocks = 4; + uint8_t start = sector * 4; + if (sector > 32) { + blocks = 16; + start = 128 + (sector - 32) * 16; + } + + for (int i = 0; i < blocks; i++) { + + int res = mfEmlGetMem(data, start + i, 1); + if (res == PM3_SUCCESS) { + PrintAndLogEx(NORMAL, "%3d | %s", start + i, sprint_hex(data, sizeof(data))); + } + } + decode_print_st(start + blocks - 1, data); + return PM3_SUCCESS; +} + static int CmdHF14AMfEClear(const char *Cmd) { char c = tolower(param_getchar(Cmd, 0)); @@ -5222,23 +5267,24 @@ static command_t CommandTable[] = { // {"sniff", CmdHF14AMfSniff, 0, "Sniff card-reader communication"}, {"-----------", CmdHelp, IfPm3Iso14443a, "----------------------- " _CYAN_("simulation") " -----------------------"}, {"sim", CmdHF14AMfSim, IfPm3Iso14443a, "Simulate MIFARE card"}, + {"ecfill", CmdHF14AMfECFill, IfPm3Iso14443a, "Fill simulator memory with help of keys from simulator"}, {"eclr", CmdHF14AMfEClear, IfPm3Iso14443a, "Clear simulator memory"}, - {"eget", CmdHF14AMfEGet, IfPm3Iso14443a, "Get simulator memory block"}, - {"eset", CmdHF14AMfESet, IfPm3Iso14443a, "Set simulator memory block"}, + {"egetblk", CmdHF14AMfEGetBlk, IfPm3Iso14443a, "Get simulator memory block"}, + {"egetsc", CmdHF14AMfEGetSc, IfPm3Iso14443a, "Get simulator memory sector"}, + {"ekeyprn", CmdHF14AMfEKeyPrn, IfPm3Iso14443a, "Print keys from simulator memory"}, {"eload", CmdHF14AMfELoad, IfPm3Iso14443a, "Load from file emul dump"}, {"esave", CmdHF14AMfESave, IfPm3Iso14443a, "Save to file emul dump"}, + {"eset", CmdHF14AMfESet, IfPm3Iso14443a, "Set simulator memory block"}, {"eview", CmdHF14AMfEView, IfPm3Iso14443a, "View emul memory"}, - {"ecfill", CmdHF14AMfECFill, IfPm3Iso14443a, "Fill simulator memory with help of keys from simulator"}, - {"ekeyprn", CmdHF14AMfEKeyPrn, IfPm3Iso14443a, "Print keys from simulator memory"}, {"-----------", CmdHelp, IfPm3Iso14443a, "----------------------- " _CYAN_("magic") " -----------------------"}, - {"csetuid", CmdHF14AMfCSetUID, IfPm3Iso14443a, "Set UID"}, - {"cwipe", CmdHF14AMfCWipe, IfPm3Iso14443a, "Wipe card to default UID/Sectors/Keys"}, - {"csetblk", CmdHF14AMfCSetBlk, IfPm3Iso14443a, "Write block"}, {"cgetblk", CmdHF14AMfCGetBlk, IfPm3Iso14443a, "Read block"}, {"cgetsc", CmdHF14AMfCGetSc, IfPm3Iso14443a, "Read sector"}, {"cload", CmdHF14AMfCLoad, IfPm3Iso14443a, "Load dump"}, {"csave", CmdHF14AMfCSave, IfPm3Iso14443a, "Save dump from card into file or emulator"}, + {"csetblk", CmdHF14AMfCSetBlk, IfPm3Iso14443a, "Write block"}, + {"csetuid", CmdHF14AMfCSetUID, IfPm3Iso14443a, "Set UID"}, {"cview", CmdHF14AMfCView, IfPm3Iso14443a, "view card"}, + {"cwipe", CmdHF14AMfCWipe, IfPm3Iso14443a, "Wipe card to default UID/Sectors/Keys"}, {"-----------", CmdHelp, IfPm3Iso14443a, "----------------------- " _CYAN_("magic gen3") " -----------------------"}, {"gen3uid", CmdHf14AGen3UID, IfPm3Iso14443a, "Set UID without manufacturer block"}, {"gen3blk", CmdHf14AGen3Block, IfPm3Iso14443a, "Overwrite full manufacturer block"}, From 8ce0407ad4b26a1ba947e9eb89c33b7b07d4c351 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Fri, 18 Sep 2020 11:14:01 +0200 Subject: [PATCH 0535/1047] text --- doc/commands.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/doc/commands.md b/doc/commands.md index 93e8d98fb..d5839fc52 100644 --- a/doc/commands.md +++ b/doc/commands.md @@ -291,12 +291,14 @@ Check column "offline" for their availability. |`hf mf auth4 `|N |`ISO14443-4 AES authentication` |`hf mf sim `|N |`Simulate MIFARE card` |`hf mf eclr `|N |`Clear simulator memory` -|`hf mf eget `|N |`Get simulator memory block` +|`hf mf egetblk `|N |`Get simulator memory block` +|`hf mf egetsc `|N |`Get simulator memory sector` |`hf mf eset `|N |`Set simulator memory block` |`hf mf eload `|N |`Load from file emul dump` |`hf mf esave `|N |`Save to file emul dump` |`hf mf ecfill `|N |`Fill simulator memory with help of keys from simulator` -|`hf mf ekeyprn `|N |`Print keys from simulator memory` +|`hf mf ekeyprn `|N |`Print keys from simulator memory` +|`hf mf eview `|N |`View simulator memory` |`hf mf csetuid `|N |`Set UID (magic chinese card)` |`hf mf cwipe `|N |`Wipe card to default UID/Sectors/Keys` |`hf mf csetblk `|N |`Write block (magic chinese card)` @@ -304,6 +306,7 @@ Check column "offline" for their availability. |`hf mf cgetsc `|N |`Read sector (magic chinese card)` |`hf mf cload `|N |`Load dump (magic chinese card)` |`hf mf csave `|N |`Save dump from magic chinese card into file or emulator` +|`hf mf cview `|N |`View card memory (magic chinese card)` |`hf mf mad `|N |`Checks and prints MAD` |`hf mf ndef `|N |`Prints NDEF records from card` |`hf mf ice `|N |`collect MIFARE Classic nonces to file` @@ -787,6 +790,7 @@ Check column "offline" for their availability. |`lf t55xx read `|N |`b p [password] [o] [1] -- Read T55xx block data. Optional [p password], [override], [page1]` |`lf t55xx resetread `|N |`Send Reset Cmd then lf read the stream to attempt to identify the start of it (needs a demod and/or plot after)` |`lf t55xx recoverpw `|N |`[password] Try to recover from bad password write from a cloner. Only use on PW protected chips!` +|`lf t55xx sniff `|N |`Attempt to recover T55xx commands from sample buffer` |`lf t55xx special `|N |`Show block changes with 64 different offsets` |`lf t55xx trace `|Y |`[1] Show T55x7 traceability data (page 1/ blk 0-1)` |`lf t55xx wakeup `|N |`Send AOR wakeup command` From 504b019e5780fa97199452672020ea82ee11526c Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Fri, 18 Sep 2020 11:43:55 +0200 Subject: [PATCH 0536/1047] hf mf egetsc - some colors --- client/src/cmdhfmf.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/client/src/cmdhfmf.c b/client/src/cmdhfmf.c index 6bd4c9c28..df9d07c54 100644 --- a/client/src/cmdhfmf.c +++ b/client/src/cmdhfmf.c @@ -922,7 +922,7 @@ static int FastDumpWithEcFill(uint8_t numsectors) { clearCommandBuffer(); SendCommandNG(CMD_HF_MIFARE_EML_LOAD, (uint8_t *)&payload, sizeof(payload)); - bool res = WaitForResponseTimeout(CMD_HF_MIFARE_EML_LOAD, &resp, 2000); + bool res = WaitForResponseTimeout(CMD_HF_MIFARE_EML_LOAD, &resp, 2500); if (res == false) { PrintAndLogEx(WARNING, "Command execute timeout"); return PM3_ETIMEOUT; @@ -936,7 +936,7 @@ static int FastDumpWithEcFill(uint8_t numsectors) { clearCommandBuffer(); SendCommandNG(CMD_HF_MIFARE_EML_LOAD, (uint8_t *)&payload, sizeof(payload)); - res = WaitForResponseTimeout(CMD_HF_MIFARE_EML_LOAD, &resp, 2000); + res = WaitForResponseTimeout(CMD_HF_MIFARE_EML_LOAD, &resp, 2500); if (res == false) { PrintAndLogEx(WARNING, "Command execute timeout"); return PM3_ETIMEOUT; @@ -3658,7 +3658,13 @@ static int CmdHF14AMfEGetSc(const char *Cmd) { int res = mfEmlGetMem(data, start + i, 1); if (res == PM3_SUCCESS) { - PrintAndLogEx(NORMAL, "%3d | %s", start + i, sprint_hex(data, sizeof(data))); + if (start + i == 0) { + PrintAndLogEx(INFO, "%03d | " _RED_("%s"), start + i, sprint_hex_ascii(data, sizeof(data))); + } else if (mfIsSectorTrailer(i)) { + PrintAndLogEx(INFO, "%03d | " _YELLOW_("%s"), start + i, sprint_hex_ascii(data, sizeof(data))); + } else { + PrintAndLogEx(INFO, "%03d | %s ", start + i, sprint_hex_ascii(data, sizeof(data))); + } } } decode_print_st(start + blocks - 1, data); From cedfea8149ca4b8e20dcdc74ab9477d2a17be64e Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Fri, 18 Sep 2020 12:07:34 +0200 Subject: [PATCH 0537/1047] continue testing next sector --- armsrc/mifarecmd.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/armsrc/mifarecmd.c b/armsrc/mifarecmd.c index 53e33ff38..3344368cf 100644 --- a/armsrc/mifarecmd.c +++ b/armsrc/mifarecmd.c @@ -1978,15 +1978,15 @@ int MifareECardLoad(uint8_t sectorcnt, uint8_t keytype) { uint64_t ui64Key = emlGetKey(sectorNo, keytype); if (sectorNo == 0) { if (mifare_classic_auth(pcs, cuid, FirstBlockOfSector(sectorNo), keytype, ui64Key, AUTH_FIRST)) { - retval = PM3_ESOFT; + retval = PM3_EPARTIAL; if (DBGLEVEL > DBG_ERROR) Dbprintf("Sector[%2d]. Auth error", sectorNo); - goto out; + continue; } } else { if (mifare_classic_auth(pcs, cuid, FirstBlockOfSector(sectorNo), keytype, ui64Key, AUTH_NESTED)) { - retval = PM3_ESOFT; + retval = PM3_EPARTIAL; if (DBGLEVEL > DBG_ERROR) Dbprintf("Sector[%2d]. Auth nested error", sectorNo); - goto out; + continue; } } From 0c7cdd8f93934c07dbfa84d885839f6bd5b4de00 Mon Sep 17 00:00:00 2001 From: BarikMana <42164118+BarikMana@users.noreply.github.com> Date: Fri, 18 Sep 2020 12:30:10 +0200 Subject: [PATCH 0538/1047] Update Linux-Installation-Instructions.md Fixing typo --- .../Linux-Installation-Instructions.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/md/Installation_Instructions/Linux-Installation-Instructions.md b/doc/md/Installation_Instructions/Linux-Installation-Instructions.md index 688091ee8..b39dc7eab 100644 --- a/doc/md/Installation_Instructions/Linux-Installation-Instructions.md +++ b/doc/md/Installation_Instructions/Linux-Installation-Instructions.md @@ -107,7 +107,7 @@ To test you have the proper read & write rights, plug the Proxmark3 and execute: ```sh [ -r /dev/ttyACM0 ] && [ -w /dev/ttyACM0 ] && echo ok ``` -It must return `ok`. Otherwise this means you've a permissions problem to fix. +It must return `ok`. Otherwise this means you've got a permission problem to fix. # Compile and use the project From cf1b12a640f5bc5f5b0d0e9061d1569e060d83e4 Mon Sep 17 00:00:00 2001 From: Gator96100 Date: Fri, 18 Sep 2020 16:37:56 +0200 Subject: [PATCH 0539/1047] Appveyor run WSL installation in parallel --- appveyor.yml | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 4eecb27f7..fb96b2a54 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -60,7 +60,8 @@ clone_script: break } - Start-Sleep -s 1 + Start-Sleep -s 5 + Receive-Job -Job $WSLjob } } @@ -70,6 +71,18 @@ clone_script: Write-Host "[ OK ]" -ForegroundColor Green } + $WSLjob = Start-Job -Name WSLInstall -ScriptBlock { + $WSLInstallTime=[System.Environment]::TickCount + WSLExec "WSL update..." "sudo apt-get update 1>/dev/null" + WSLExec "WSL upgrade..." "sudo apt-get upgrade -y 1>/dev/null" + WSLExec "WSL cleanup..." "sudo apt-get auto-remove -y 1>/dev/null" + WSLExec "WSL install..." "sudo apt-get -y install --reinstall --no-install-recommends git ca-certificates build-essential pkg-config libreadline-dev gcc-arm-none-eabi libnewlib-dev libbz2-dev qtbase5-dev cmake 1>/dev/null" + WSLExec "WSL QT fix..." "sudo strip --remove-section=.note.ABI-tag /usr/lib/x86_64-linux-gnu/libQt5Core.so.5" + Add-AppveyorMessage -Message "WSL setup took $(([System.Environment]::TickCount-$WSLInstallTime) / 1000) sec" -Category Information + } + + Receive-Job -Job $WSLjob + Write-Host "Removing ProxSpace..." -NoNewLine $PSInstallTime=[System.Environment]::TickCount @@ -113,20 +126,6 @@ clone_script: Add-AppveyorMessage -Message "ProxSpace download and update took $(([System.Environment]::TickCount-$PSInstallTime) / 1000) sec" -Category Information - $WSLInstallTime=[System.Environment]::TickCount - - WSLExec "WSL update..." "sudo apt-get update 1>/dev/null" - - WSLExec "WSL upgrade..." "sudo apt-get upgrade -y 1>/dev/null" - - WSLExec "WSL cleanup..." "sudo apt-get auto-remove -y 1>/dev/null" - - WSLExec "WSL install..." "sudo apt-get -y install --reinstall --no-install-recommends git ca-certificates build-essential pkg-config libreadline-dev gcc-arm-none-eabi libnewlib-dev libbz2-dev qtbase5-dev cmake 1>/dev/null" - - WSLExec "WSL QT fix..." "sudo strip --remove-section=.note.ABI-tag /usr/lib/x86_64-linux-gnu/libQt5Core.so.5" - - Add-AppveyorMessage -Message "WSL setup took $(([System.Environment]::TickCount-$WSLInstallTime) / 1000) sec" -Category Information - Write-Host "Cloning repository <$env:appveyor_repo_name> to $env:appveyor_build_folder ..." -NoNewLine if(-not $env:appveyor_pull_request_number) { @@ -142,6 +141,8 @@ clone_script: Write-Host "[ OK ]" -ForegroundColor Green + Receive-Job -Wait -Job $WSLjob + install: build_script: From 2d6a6ba5d92edaa03960e335b7d624c4def01559 Mon Sep 17 00:00:00 2001 From: Gator96100 Date: Fri, 18 Sep 2020 16:45:09 +0200 Subject: [PATCH 0540/1047] Appveyor moved function into scriptblock --- appveyor.yml | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index fb96b2a54..3a6f783b3 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -65,13 +65,13 @@ clone_script: } } - Function WSLExec($Text, $Cmd) { - Write-Host "$Text" -NoNewLine - wsl -- bash -c $Cmd - Write-Host "[ OK ]" -ForegroundColor Green - } - $WSLjob = Start-Job -Name WSLInstall -ScriptBlock { + Function WSLExec($Text, $Cmd) { + Write-Host "$Text" + wsl -- bash -c $Cmd + Write-Host "$Text[ OK ]" -ForegroundColor Green + } + $WSLInstallTime=[System.Environment]::TickCount WSLExec "WSL update..." "sudo apt-get update 1>/dev/null" WSLExec "WSL upgrade..." "sudo apt-get upgrade -y 1>/dev/null" @@ -81,8 +81,6 @@ clone_script: Add-AppveyorMessage -Message "WSL setup took $(([System.Environment]::TickCount-$WSLInstallTime) / 1000) sec" -Category Information } - Receive-Job -Job $WSLjob - Write-Host "Removing ProxSpace..." -NoNewLine $PSInstallTime=[System.Environment]::TickCount @@ -92,6 +90,8 @@ clone_script: Remove-Item -Recurse -Force -Path $env:proxspace_path Write-Host "[ OK ]" -ForegroundColor Green + + Receive-Job -Job $WSLjob Write-Host "Download ProxSpace..." -NoNewLine @@ -101,6 +101,8 @@ clone_script: Write-Host "[ OK ]" -ForegroundColor Green + Receive-Job -Job $WSLjob + Write-Host "Extracting ProxSpace..." -NoNewLine Expand-Archive -LiteralPath "$env:proxspace_zip_file" -DestinationPath "\" @@ -109,6 +111,8 @@ clone_script: Write-Host "[ OK ]" -ForegroundColor Green + Receive-Job -Job $WSLjob + Write-Host "Renaming ProxSpace folder..." -NoNewLine Get-ChildItem -Path "\$env:proxspace_zip_folder_name" | Rename-Item -NewName (Split-Path $env:proxspace_path -Leaf) From 3719fee8a34ccb2c61d9207f31824f2a0d59ffbf Mon Sep 17 00:00:00 2001 From: Gator96100 Date: Fri, 18 Sep 2020 16:47:24 +0200 Subject: [PATCH 0541/1047] Fixed color output --- appveyor.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index 3a6f783b3..769be4630 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -69,7 +69,8 @@ clone_script: Function WSLExec($Text, $Cmd) { Write-Host "$Text" wsl -- bash -c $Cmd - Write-Host "$Text[ OK ]" -ForegroundColor Green + Write-Host "$Text" -NoNewLine + Write-Host "[ OK ]" -ForegroundColor Green } $WSLInstallTime=[System.Environment]::TickCount From 59976aa5881592c335bf125ba268f4b3718664f2 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Fri, 18 Sep 2020 17:04:22 +0200 Subject: [PATCH 0542/1047] fix ht2 initial command timing --- armsrc/hitag2.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/armsrc/hitag2.c b/armsrc/hitag2.c index dc630e3fd..afe4704b8 100644 --- a/armsrc/hitag2.c +++ b/armsrc/hitag2.c @@ -130,6 +130,8 @@ static int hitag2_init(void) { #define HITAG_T_WAIT_2_MIN 90 /* T_wait2 should be at least 90 */ #define HITAG_T_WAIT_MAX 300 /* bit more than HITAG_T_WAIT_1 + HITAG_T_WAIT_2 */ #define HITAG_T_PROG 614 +#define HITAG_T_WAIT_POWERUP 313 /* transponder internal powerup time is 312.5 */ +#define HITAG_T_WAIT_START_AUTH_MAX 232 /* transponder waiting time to receive the START_AUTH command is 232.5, then it enters public mode */ #define HITAG_T_TAG_ONE_HALF_PERIOD 10 #define HITAG_T_TAG_TWO_HALF_PERIOD 25 @@ -1501,14 +1503,18 @@ void ReaderHitag(hitag_function htf, hitag_data *htd) { } if (turn_on) { + // Wait 50ms with field off to be sure the transponder gets reset + SpinDelay(50); FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_ADC | FPGA_LF_ADC_READER_FIELD); turn_on = false; + // Wait with field on to be in "Wait for START_AUTH" timeframe + lf_wait_periods(HITAG_T_WAIT_POWERUP + HITAG_T_WAIT_START_AUTH_MAX / 4); + command_start += HITAG_T_WAIT_POWERUP + HITAG_T_WAIT_START_AUTH_MAX / 4; + } else { + // Wait for t_wait_2 carrier periods after the last tag bit before transmitting, + lf_wait_periods(t_wait_2); + command_start += t_wait_2; } - - // Wait for t_wait_2 carrier periods after the last tag bit before transmitting, - lf_wait_periods(t_wait_2); - command_start += t_wait_2; - // Transmit the reader frame command_duration = hitag_reader_send_frame(tx, txlen); response_start = command_start + command_duration; From 426c08e2215bb697a0d25ac62642f670c76c7009 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Fri, 18 Sep 2020 17:04:45 +0200 Subject: [PATCH 0543/1047] ht2: avoid sending spurious command after command is finished --- armsrc/hitag2.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/armsrc/hitag2.c b/armsrc/hitag2.c index afe4704b8..a35fade72 100644 --- a/armsrc/hitag2.c +++ b/armsrc/hitag2.c @@ -1490,6 +1490,7 @@ void ReaderHitag(hitag_function htf, hitag_data *htd) { } case RHT2F_UID_ONLY: { bStop = !hitag2_read_uid(rx, rxlen, tx, &txlen); + if (bSuccessful) bStop = true; attempt_count++; //attempt 3 times to get uid then quit if (!bStop && attempt_count == 3) bStop = true; @@ -1501,7 +1502,7 @@ void ReaderHitag(hitag_function htf, hitag_data *htd) { goto out; } } - + if (bStop) break; if (turn_on) { // Wait 50ms with field off to be sure the transponder gets reset SpinDelay(50); From cbfa6d8876d15262dd96b6765aa697ad11d46474 Mon Sep 17 00:00:00 2001 From: Gator96100 Date: Fri, 18 Sep 2020 17:14:59 +0200 Subject: [PATCH 0544/1047] Fixed text output --- appveyor.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index 769be4630..131ac10d8 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -34,7 +34,7 @@ clone_script: - ps: >- Function ExecUpdate($Text, $firstStart) { - Write-Host "$Text" -NoNewLine + Write-Host "$Text" Start-Process "cmd.exe" "/c ""cd /D $env:proxspace_path && runme64.bat -c ""exit""""" $StartTime=[System.Environment]::TickCount Start-Sleep -s 10 @@ -42,6 +42,7 @@ clone_script: $cmdprocess = Get-Process "cmd" -ErrorAction SilentlyContinue if (!$cmdprocess -Or $cmdprocess.HasExited) { + Write-Host "$Text" -NoNewLine Write-Host "[ OK ]" -ForegroundColor Green break } @@ -51,11 +52,13 @@ clone_script: $tmp = $cmdprocess.CloseMainWindow() Start-Sleep -s 5 Stop-Process -Name "cmd" -Force -ErrorAction SilentlyContinue + Write-Host "$Text" -NoNewLine Write-Host "Exit by pacman.conf" -ForegroundColor Green break } if ([System.Environment]::TickCount-$StartTime -gt 1000000) { + Write-Host "$Text" -NoNewLine Write-host "Exit by timeout" -ForegroundColor Yellow break } From cdd860a0488f4536ba314286f8c5bdb209949a36 Mon Sep 17 00:00:00 2001 From: Gator96100 Date: Fri, 18 Sep 2020 18:00:16 +0200 Subject: [PATCH 0545/1047] Appveyor run compilation in parallel --- appveyor.yml | 149 ++++++++++++++++++++++++++------------------------- 1 file changed, 75 insertions(+), 74 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 131ac10d8..3ac706140 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -7,6 +7,7 @@ environment: proxspace_zip_folder_name: ProxSpace-* proxspace_path: \ProxSpace proxspace_home_path: \ProxSpace\pm3 + wsl_git_path: C:\wslgit init: - ps: >- @@ -85,7 +86,22 @@ clone_script: Add-AppveyorMessage -Message "WSL setup took $(([System.Environment]::TickCount-$WSLInstallTime) / 1000) sec" -Category Information } - Write-Host "Removing ProxSpace..." -NoNewLine + Function GitClone($Text, $Folder) { + Write-Host "$Text" -NoNewLine + if(-not $env:appveyor_pull_request_number) { + git clone -q --branch=$env:appveyor_repo_branch https://github.com/$env:appveyor_repo_name.git $Folder + cd $Folder + git checkout -qf $env:appveyor_repo_commit + } else { + git clone -q https://github.com/$env:appveyor_repo_name.git $Folder + cd $Folder + git fetch -q origin +refs/pull/$env:appveyor_pull_request_number/merge: + git checkout -qf FETCH_HEAD + } + Write-Host "[ OK ]" -ForegroundColor Green + } + + Write-Host "ProxSpace: Removing folder..." -NoNewLine $PSInstallTime=[System.Environment]::TickCount @@ -97,7 +113,7 @@ clone_script: Receive-Job -Job $WSLjob - Write-Host "Download ProxSpace..." -NoNewLine + Write-Host "ProxSpace: downloading..." -NoNewLine [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 @@ -107,7 +123,7 @@ clone_script: Receive-Job -Job $WSLjob - Write-Host "Extracting ProxSpace..." -NoNewLine + Write-Host "ProxSpace: extracting..." -NoNewLine Expand-Archive -LiteralPath "$env:proxspace_zip_file" -DestinationPath "\" @@ -117,15 +133,15 @@ clone_script: Receive-Job -Job $WSLjob - Write-Host "Renaming ProxSpace folder..." -NoNewLine + Write-Host "ProxSpace: renaming folder..." -NoNewLine Get-ChildItem -Path "\$env:proxspace_zip_folder_name" | Rename-Item -NewName (Split-Path $env:proxspace_path -Leaf) Write-Host "[ OK ]" -ForegroundColor Gree - ExecUpdate "Initial msys2 startup..." $true + ExecUpdate "ProxSpace: initial msys2 startup..." $true - ExecUpdate "Installing required packages..." $false + ExecUpdate "ProxSpace: installing required packages..." $false $psversion = (Select-String -Pattern 'PSVERSION=' -SimpleMatch -Path "$env:proxspace_path\msys2\ps\09-proxspace_setup.post").Line.Split("""")[1] @@ -134,23 +150,12 @@ clone_script: Add-AppveyorMessage -Message "ProxSpace download and update took $(([System.Environment]::TickCount-$PSInstallTime) / 1000) sec" -Category Information - Write-Host "Cloning repository <$env:appveyor_repo_name> to $env:appveyor_build_folder ..." -NoNewLine - - if(-not $env:appveyor_pull_request_number) { - git clone -q --branch=$env:appveyor_repo_branch https://github.com/$env:appveyor_repo_name.git $env:appveyor_build_folder - cd $env:appveyor_build_folder - git checkout -qf $env:appveyor_repo_commit - } else { - git clone -q https://github.com/$env:appveyor_repo_name.git $env:appveyor_build_folder - cd $env:appveyor_build_folder - git fetch -q origin +refs/pull/$env:appveyor_pull_request_number/merge: - git checkout -qf FETCH_HEAD - } - - Write-Host "[ OK ]" -ForegroundColor Green + GitClone "ProxSpace: Cloning repository <$env:appveyor_repo_name> to $env:appveyor_build_folder ..." $env:appveyor_build_folder Receive-Job -Wait -Job $WSLjob + GitClone "WSL: Cloning repository <$env:appveyor_repo_name> to $env:wsl_git_path ..." $env:wsl_git_path + install: build_script: @@ -163,10 +168,6 @@ build_script: ./runme64.bat -c "cd $pmfolder && $Cmd" } - Function ExecWSLCmd($Cmd) { - wsl -- bash -c $Cmd - } - Function ExecCheck($Name) { $testspass = ($LASTEXITCODE -eq 0) @@ -182,6 +183,55 @@ build_script: } } + $WSLjob = Start-Job -Name WSLCompile -ScriptBlock { + Function ExecWSLCmd($Cmd) { + wsl -- bash -c $Cmd + } + + Function ExecCheck($Name) { + $testspass = ($LASTEXITCODE -eq 0) + + $global:TestsPassed=$testspass + + if ($testspass) { + Add-AppveyorTest -Name $Name -Framework NUnit -Filename $Name -Outcome Passed -Duration "$([System.Environment]::TickCount-$TestTime)" + Write-Host "$Name [ OK ]" -ForegroundColor Green + } else { + Add-AppveyorTest -Name $Name -Framework NUnit -Filename $Name -Outcome Failed -Duration "$([System.Environment]::TickCount-$TestTime)" + Write-Host "$Name [ ERROR ]" -ForegroundColor Red + throw "Tests error." + } + } + + #Windows Subsystem for Linux (WSL) + Write-Host "---------- WSL make ----------" -ForegroundColor Yellow + cd $env:appveyor_build_folder + $TestTime=[System.Environment]::TickCount + ExecWSLCmd "make clean;make V=1" + #some checks + if(!(Test-Path "$env:proxspace_home_path\$pmfolder\client\proxmark3")){ + throw "Main file proxmark3 not exists." + } + + ExecWSLCmd "make check" + ExecCheck "WSL make Tests" + Start-Sleep -s 2 + Write-Host "---------- WSL btaddon ----------" -ForegroundColor Yellow + $TestTime=[System.Environment]::TickCount + ExecWSLCmd "make clean;make V=1 PLATFORM_EXTRAS=BTADDON" + ExecWSLCmd "make check" + ExecCheck "WSL BTaddon Tests" + Start-Sleep -s 2 + Write-Host "---------- WSL make clean ----------" -ForegroundColor Yellow + ExecWSLCmd 'make clean' + Write-Host "---------- WSL cmake ----------" -ForegroundColor Yellow + $TestTime=[System.Environment]::TickCount + ExecWSLCmd 'rm -rf client/build;mkdir -p client/build; cd client/build; cmake ..; make VERBOSE=1;' + Write-Host "---------- WSL cmake tests ----------" -ForegroundColor Yellow + ExecWSLCmd './tools/pm3_tests.sh --clientbin client/build/proxmark3 client' + ExecCheck "WSL cmake Tests" + } + #ProxSpace Write-Host "---------- PS make ----------" -ForegroundColor Yellow @@ -226,57 +276,8 @@ build_script: ExecCheck "PS cmake Tests" - #Windows Subsystem for Linux (WSL) - - Write-Host "---------- WSL make ----------" -ForegroundColor Yellow - - cd $env:appveyor_build_folder - - $TestTime=[System.Environment]::TickCount - - ExecWSLCmd "make clean;make V=1" - - #some checks + Receive-Job -Wait -Job $WSLjob -ErrorAction Stop - if(!(Test-Path "$env:proxspace_home_path\$pmfolder\client\proxmark3")){ - - throw "Main file proxmark3 not exists." - - } - - ExecWSLCmd "make check" - - ExecCheck "WSL make Tests" - - Start-Sleep -s 2 - - Write-Host "---------- WSL btaddon ----------" -ForegroundColor Yellow - - $TestTime=[System.Environment]::TickCount - - ExecWSLCmd "make clean;make V=1 PLATFORM_EXTRAS=BTADDON" - - ExecWSLCmd "make check" - - ExecCheck "WSL BTaddon Tests" - - Start-Sleep -s 2 - - Write-Host "---------- WSL make clean ----------" -ForegroundColor Yellow - - ExecWSLCmd 'make clean' - - Write-Host "---------- WSL cmake ----------" -ForegroundColor Yellow - - $TestTime=[System.Environment]::TickCount - - ExecWSLCmd 'rm -rf client/build;mkdir -p client/build; cd client/build; cmake ..; make VERBOSE=1;' - - Write-Host "---------- WSL cmake tests ----------" -ForegroundColor Yellow - - ExecWSLCmd './tools/pm3_tests.sh --clientbin client/build/proxmark3 client' - - ExecCheck "WSL cmake Tests" test_script: - ps: >- From 93848d5a1cb5e6e809b7a905fde0ea9ff50db1d7 Mon Sep 17 00:00:00 2001 From: Gator96100 Date: Fri, 18 Sep 2020 18:24:19 +0200 Subject: [PATCH 0546/1047] Fixed paths --- appveyor.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 3ac706140..81dd22f8f 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -205,11 +205,11 @@ build_script: #Windows Subsystem for Linux (WSL) Write-Host "---------- WSL make ----------" -ForegroundColor Yellow - cd $env:appveyor_build_folder + cd $env:wsl_git_path $TestTime=[System.Environment]::TickCount ExecWSLCmd "make clean;make V=1" #some checks - if(!(Test-Path "$env:proxspace_home_path\$pmfolder\client\proxmark3")){ + if(!(Test-Path "$env:wsl_git_path\client\proxmark3")){ throw "Main file proxmark3 not exists." } @@ -226,7 +226,7 @@ build_script: ExecWSLCmd 'make clean' Write-Host "---------- WSL cmake ----------" -ForegroundColor Yellow $TestTime=[System.Environment]::TickCount - ExecWSLCmd 'rm -rf client/build;mkdir -p client/build; cd client/build; cmake ..; make VERBOSE=1;' + ExecWSLCmd 'mkdir -p client/build; cd client/build; cmake ..; make VERBOSE=1;' Write-Host "---------- WSL cmake tests ----------" -ForegroundColor Yellow ExecWSLCmd './tools/pm3_tests.sh --clientbin client/build/proxmark3 client' ExecCheck "WSL cmake Tests" From a5c67ea4e62584302707f9cef301d31a2772e0a5 Mon Sep 17 00:00:00 2001 From: Gator96100 Date: Fri, 18 Sep 2020 18:51:12 +0200 Subject: [PATCH 0547/1047] Make sure throw works inside a job --- appveyor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index 81dd22f8f..ecc9646d1 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -209,7 +209,7 @@ build_script: $TestTime=[System.Environment]::TickCount ExecWSLCmd "make clean;make V=1" #some checks - if(!(Test-Path "$env:wsl_git_path\client\proxmark3")){ + if(!(Test-Path "$env:wsl_git_path\client\proxmark3fail")){ throw "Main file proxmark3 not exists." } From 23c81357c2d2fe8aac268c66f2d471ec37df4dd1 Mon Sep 17 00:00:00 2001 From: Gator96100 Date: Fri, 18 Sep 2020 19:13:13 +0200 Subject: [PATCH 0548/1047] Moved wsl git path --- appveyor.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index ecc9646d1..2f145c598 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -7,7 +7,7 @@ environment: proxspace_zip_folder_name: ProxSpace-* proxspace_path: \ProxSpace proxspace_home_path: \ProxSpace\pm3 - wsl_git_path: C:\wslgit + wsl_git_path: C:\proxmark init: - ps: >- @@ -209,7 +209,7 @@ build_script: $TestTime=[System.Environment]::TickCount ExecWSLCmd "make clean;make V=1" #some checks - if(!(Test-Path "$env:wsl_git_path\client\proxmark3fail")){ + if(!(Test-Path "$env:wsl_git_path\client\proxmark3")){ throw "Main file proxmark3 not exists." } From 8b2279dd05a58fea0cff1adac1655d074ff2cd80 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Fri, 18 Sep 2020 19:50:45 +0200 Subject: [PATCH 0549/1047] fix a potential overflow --- client/src/mifare/mifarehost.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/src/mifare/mifarehost.h b/client/src/mifare/mifarehost.h index f6a840550..1e693174e 100644 --- a/client/src/mifare/mifarehost.h +++ b/client/src/mifare/mifarehost.h @@ -54,7 +54,7 @@ typedef struct { //uint8_t foundKey[2]; } icesector_t; -#define KEYS_IN_BLOCK ((PM3_CMD_DATA_SIZE - 4) / 6) +#define KEYS_IN_BLOCK ((PM3_CMD_DATA_SIZE - 5) / 6) #define KEYBLOCK_SIZE (KEYS_IN_BLOCK * 6) #define CANDIDATE_SIZE (0xFFFF * 6) From a32fbd21bd480269799f301b2e3677433e481b05 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Fri, 18 Sep 2020 19:51:20 +0200 Subject: [PATCH 0550/1047] redundant declaration --- armsrc/usart.h | 3 --- 1 file changed, 3 deletions(-) diff --git a/armsrc/usart.h b/armsrc/usart.h index 5a7dea38f..abe495692 100644 --- a/armsrc/usart.h +++ b/armsrc/usart.h @@ -4,9 +4,6 @@ #include "common.h" #include "usart_defs.h" -#define USART_BUFFLEN 512 -#define USART_FIFOLEN (2*USART_BUFFLEN) - // Higher baudrates are pointless, only increasing overflow risk extern uint32_t g_usart_baudrate; From b7ad2cc5e534c073804dfa7f4660fcb71b795267 Mon Sep 17 00:00:00 2001 From: tcprst Date: Fri, 18 Sep 2020 22:01:31 -0400 Subject: [PATCH 0551/1047] add ST25TA ndef protection logic --- client/src/cmdhfst.c | 162 +++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 155 insertions(+), 7 deletions(-) diff --git a/client/src/cmdhfst.c b/client/src/cmdhfst.c index e16b513e4..758447d6a 100644 --- a/client/src/cmdhfst.c +++ b/client/src/cmdhfst.c @@ -52,6 +52,21 @@ static int usage_hf_st_ndef(void) { return PM3_SUCCESS; } +static int usage_hf_st_protect(void) { + PrintAndLogEx(NORMAL, "\n Change R/W protection for NFC Data Exchange Format (NDEF)\n"); + PrintAndLogEx(NORMAL, "Usage: hf st protect [h] p "); + PrintAndLogEx(NORMAL, "Options:"); + PrintAndLogEx(NORMAL, " h : This help"); + PrintAndLogEx(NORMAL, " p : 16 byte write password"); + PrintAndLogEx(NORMAL, " : Change (r)ead or (w)rite protection"); + PrintAndLogEx(NORMAL, " t : Enable / Disable protection"); + PrintAndLogEx(NORMAL, " 0 = Disable (default)"); + PrintAndLogEx(NORMAL, " 1 = Enable"); + PrintAndLogEx(NORMAL, "Examples:"); + PrintAndLogEx(NORMAL, _YELLOW_(" hf st protect p 82E80053D4CA5C0B656D852CC696C8A1 r 0")); + return PM3_SUCCESS; +} + // get ST Microelectronics chip model (from UID) static char *get_st_chip_model(uint8_t pc) { static char model[40]; @@ -138,8 +153,8 @@ static void print_st_cc_info(uint8_t *d, uint8_t n) { uint16_t maxndef = (d[11] << 8 | d[12]); PrintAndLogEx(SUCCESS, " max NDEF filesize %u bytes ( 0x%04X )", maxndef, maxndef); PrintAndLogEx(SUCCESS, " ----- " _CYAN_("access rights") " -------"); - PrintAndLogEx(SUCCESS, " read ( %02X )", d[13]); - PrintAndLogEx(SUCCESS, " write ( %02X )", d[14]); + PrintAndLogEx(SUCCESS, " read ( %02X ) protection: %s", d[13], ((d[13] & 0x80) == 0x80) ? _RED_("enabled") : _GREEN_("disabled")); + PrintAndLogEx(SUCCESS, " write ( %02X ) protection: %s", d[14], ((d[14] & 0x80) == 0x80) ? _RED_("enabled") : _GREEN_("disabled")); PrintAndLogEx(SUCCESS, " }"); PrintAndLogEx(SUCCESS, "----------------- " _CYAN_("raw") " -----------------"); PrintAndLogEx(SUCCESS, "%s", sprint_hex_inrow(d, n)); @@ -443,6 +458,138 @@ static int cmd_hf_st_ndef(const char *Cmd) { return PM3_SUCCESS; } +static int cmd_hf_st_protect(const char *Cmd) { + + uint8_t cmdp = 0; + bool errors = false; + int pwdlen = 0; + uint8_t pwd[16] = {0}; + int statelen = 3; + uint8_t state[3] = {0x26, 0, 0}; + + while (param_getchar(Cmd, cmdp) != 0x00 && !errors) { + switch (tolower(param_getchar(Cmd, cmdp))) { + case 'h': + return usage_hf_st_protect(); + case '0': + state[0] = 0x26; //Disable protection + cmdp++; + break; + case '1': + state[0] = 0x28; //Enable protection + cmdp++; + break; + case 'r': + state[2] = 0x01; + cmdp++; + break; + case 'w': + state[2] = 0x02; + cmdp++; + break; + case 'p': + param_gethex_ex(Cmd, cmdp + 1, pwd, &pwdlen); + pwdlen >>= 1; + cmdp += 2; + break; + default: + PrintAndLogEx(WARNING, "Unknown parameter '%c'", param_getchar(Cmd, cmdp)); + errors = true; + break; + } + } + + //Validations + + if (state[2] == 0x00) { + PrintAndLogEx(WARNING, "Missing action (r)ead or (w)rite"); + errors = true; + } + if (pwdlen != 16) { + PrintAndLogEx(WARNING, "Missing 16 byte password"); + errors = true; + } + + if (errors || cmdp == 0) return usage_hf_st_protect(); + + bool activate_field = true; + bool keep_field_on = true; + uint8_t response[PM3_CMD_DATA_SIZE]; + int resplen = 0; + + // --------------- Select NDEF Tag application ---------------- + uint8_t aSELECT_AID[80]; + int aSELECT_AID_n = 0; + param_gethex_to_eol("00a4040007d276000085010100", 0, aSELECT_AID, sizeof(aSELECT_AID), &aSELECT_AID_n); + int res = ExchangeAPDU14a(aSELECT_AID, aSELECT_AID_n, activate_field, keep_field_on, response, sizeof(response), &resplen); + if (res) + return res; + + if (resplen < 2) + return PM3_ESOFT; + + uint16_t sw = get_sw(response, resplen); + if (sw != 0x9000) { + PrintAndLogEx(ERR, "Selecting NDEF aid failed (%04x - %s).", sw, GetAPDUCodeDescription(sw >> 8, sw & 0xff)); + return PM3_ESOFT; + } + + activate_field = false; + keep_field_on = true; + + // --------------- Select NDEF file ---------------- + uint8_t aSELECT_FILE_NDEF[30]; + int aSELECT_FILE_NDEF_n = 0; + param_gethex_to_eol("00a4000c020001", 0, aSELECT_FILE_NDEF, sizeof(aSELECT_FILE_NDEF), &aSELECT_FILE_NDEF_n); + res = ExchangeAPDU14a(aSELECT_FILE_NDEF, aSELECT_FILE_NDEF_n, activate_field, keep_field_on, response, sizeof(response), &resplen); + if (res) + return res; + + sw = get_sw(response, resplen); + if (sw != 0x9000) { + PrintAndLogEx(ERR, "Selecting NDEF file failed (%04x - %s).", sw, GetAPDUCodeDescription(sw >> 8, sw & 0xff)); + return PM3_ESOFT; + } + + // --------------- VERIFY ---------------- + uint8_t aVERIFY[30]; + int aVERIFY_n = 0; + // need to provide 16byte password + param_gethex_to_eol("0020000210", 0, aVERIFY, sizeof(aVERIFY), &aVERIFY_n); + memcpy(aVERIFY + aVERIFY_n, pwd, pwdlen); + res = ExchangeAPDU14a(aVERIFY, aVERIFY_n + pwdlen, activate_field, keep_field_on, response, sizeof(response), &resplen); + if (res) + return res; + + sw = get_sw(response, resplen); + if (sw != 0x9000) { + PrintAndLogEx(ERR, "Verify password failed (%04x - %s).", sw, GetAPDUCodeDescription(sw >> 8, sw & 0xff)); + return PM3_ESOFT; + } + + // --------------- Change protection ---------------- + keep_field_on = false; + uint8_t aPROTECT[30]; + int aPROTECT_n = 0; + param_gethex_to_eol("00", 0, aPROTECT, sizeof(aPROTECT), &aPROTECT_n); + memcpy(aPROTECT + aPROTECT_n, state, statelen); + res = ExchangeAPDU14a(aPROTECT, aPROTECT_n + statelen, activate_field, keep_field_on, response, sizeof(response), &resplen); + if (res) + return res; + + sw = get_sw(response, resplen); + if (sw != 0x9000) { + PrintAndLogEx(ERR, "changing protection failed (%04x - %s).", sw, GetAPDUCodeDescription(sw >> 8, sw & 0xff)); + return PM3_ESOFT; + } + + PrintAndLogEx(SUCCESS, " %s protection ( %s )", ((state[2] & 0x01) == 0x01) ? _YELLOW_("read") : _YELLOW_("write"), + ((state[0] & 0x28) == 0x28) ? _RED_("enabled") : _GREEN_("disabled")); + + return PM3_SUCCESS; +} + + static int cmd_hf_st_list(const char *Cmd) { (void)Cmd; // Cmd is not used so far CmdTraceList("7816"); @@ -450,11 +597,12 @@ static int cmd_hf_st_list(const char *Cmd) { } static command_t CommandTable[] = { - {"help", CmdHelp, AlwaysAvailable, "This help"}, - {"info", cmd_hf_st_info, IfPm3Iso14443a, "Tag information"}, - {"list", cmd_hf_st_list, AlwaysAvailable, "List ISO 14443A/7816 history"}, - {"ndef", cmd_hf_st_ndef, AlwaysAvailable, "read NDEF file on tag"}, - {"sim", cmd_hf_st_sim, IfPm3Iso14443a, "Fake ISO 14443A/ST tag"}, + {"help", CmdHelp, AlwaysAvailable, "This help"}, + {"info", cmd_hf_st_info, IfPm3Iso14443a, "Tag information"}, + {"list", cmd_hf_st_list, AlwaysAvailable, "List ISO 14443A/7816 history"}, + {"ndef", cmd_hf_st_ndef, AlwaysAvailable, "read NDEF file on tag"}, + {"protect", cmd_hf_st_protect, IfPm3Iso14443a, "change protection on tag"}, + {"sim", cmd_hf_st_sim, IfPm3Iso14443a, "Fake ISO 14443A/ST tag"}, {NULL, NULL, NULL, NULL} }; From 1aa960004875ac04c8e23d21c846477ba5bb31aa Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sat, 19 Sep 2020 11:08:01 +0200 Subject: [PATCH 0552/1047] add white cloner pwdgen algo (thanks to @paleopterix!) --- common/commonutil.c | 12 ++++++++++++ common/commonutil.h | 4 ++++ common/generator.c | 18 +++++++++++++++++- common/generator.h | 2 ++ 4 files changed, 35 insertions(+), 1 deletion(-) diff --git a/common/commonutil.c b/common/commonutil.c index 6b7444045..9be805f31 100644 --- a/common/commonutil.c +++ b/common/commonutil.c @@ -142,3 +142,15 @@ void htole24(uint32_t val, uint8_t data[3]) { data[2] = (uint8_t)(val >> 16); } + +// ROL on u32 +uint32_t rotl(uint32_t a, uint8_t n) { + n &= 31; + return (a << n) | (a >> (32 - n)); +} + +// ROR on u32 +uint32_t rotr(uint32_t a, uint8_t n) { + n &= 31; + return (a >> n) | (a << (32 - n)); +} \ No newline at end of file diff --git a/common/commonutil.h b/common/commonutil.h index fdd2ac065..6bf330e7c 100644 --- a/common/commonutil.h +++ b/common/commonutil.h @@ -51,9 +51,13 @@ uint16_t reflect16(uint16_t b); // dedicated 16bit reversal void num_to_bytes(uint64_t n, size_t len, uint8_t *dest); uint64_t bytes_to_num(uint8_t *src, size_t len); +// rotate left byte array void rol(uint8_t *data, const size_t len); void lsl(uint8_t *data, size_t len); uint32_t le24toh(uint8_t data[3]); void htole24(uint32_t val, uint8_t data[3]); +// rol on a u32 +uint32_t rotl(uint32_t a, uint8_t n); +uint32_t rotr(uint32_t a, uint8_t n); #endif diff --git a/common/generator.c b/common/generator.c index f189d09e3..37a1aa4f7 100644 --- a/common/generator.c +++ b/common/generator.c @@ -414,12 +414,21 @@ int mfc_algo_sky_all(uint8_t *uid, uint8_t *keys) { return PM3_SUCCESS; } +// LF T55x7 White gun cloner algo +uint32_t lf_t55xx_white_pwdgen(uint32_t id) { + uint32_t r1 = rotl(id & 0x000000ec, 8); + uint32_t r2 = rotl(id & 0x86000000, 16); + uint32_t pwd = 0x10303; + pwd += ((id & 0x86ee00ec) ^ r1 ^ r2 ); + return pwd; +} + //------------------------------------ // Self tests //------------------------------------ int generator_selftest(void) { -#define NUM_OF_TEST 5 +#define NUM_OF_TEST 6 PrintAndLogEx(INFO, "PWD / KEY generator selftest"); PrintAndLogEx(INFO, "----------------------------"); @@ -468,6 +477,13 @@ int generator_selftest(void) { testresult++; PrintAndLogEx(success ? SUCCESS : WARNING, "UID | %s | %"PRIx64" - %s", sprint_hex(uid6, 4), key6, success ? "OK" : "->82C7E64BC565<--"); + + uint32_t lf_id = lf_t55xx_white_pwdgen(0x00000080); + success = (lf_id = 0x00018383); + if (success) + testresult++; + PrintAndLogEx(success ? SUCCESS : WARNING, "ID | 0x00000080 | %08"PRIx32 " - %s", lf_id, success ? "OK" : "->00018383<--"); + PrintAndLogEx(SUCCESS, "------------------- Selftest %s", (testresult == NUM_OF_TEST) ? "OK" : "fail"); return PM3_SUCCESS; } diff --git a/common/generator.h b/common/generator.h index c90fe483a..b1c3c82d0 100644 --- a/common/generator.h +++ b/common/generator.h @@ -41,5 +41,7 @@ int mfc_algo_di_all(uint8_t *uid, uint8_t *keys); int mfc_algo_sky_one(uint8_t *uid, uint8_t sector, uint8_t keytype, uint64_t *key); int mfc_algo_sky_all(uint8_t *uid, uint8_t *keys); +uint32_t lf_t55xx_white_pwdgen(uint32_t id); + int generator_selftest(void); #endif From ff5a121482c2ac8add7107c8a8b90dc4aab0401c Mon Sep 17 00:00:00 2001 From: BarikMana <42164118+BarikMana@users.noreply.github.com> Date: Sat, 19 Sep 2020 11:13:38 +0200 Subject: [PATCH 0553/1047] Create lf_idteck_idk50_PSK IDTEK Model IDK50 --- traces/lf_idteck_idk50_PSK | 16000 +++++++++++++++++++++++++++++++++++ 1 file changed, 16000 insertions(+) create mode 100644 traces/lf_idteck_idk50_PSK diff --git a/traces/lf_idteck_idk50_PSK b/traces/lf_idteck_idk50_PSK new file mode 100644 index 000000000..ec1fa9fb3 --- /dev/null +++ b/traces/lf_idteck_idk50_PSK @@ -0,0 +1,16000 @@ +8 +-20 +-45 +85 +44 +50 +14 +18 +-13 +5 +-24 +0 +-28 +0 +-28 +0 +-27 +1 +-27 +2 +-26 +3 +-25 +4 +-24 +5 +-24 +5 +-23 +6 +-23 +6 +-22 +-47 +60 +20 +61 +22 +24 +-9 +23 +-23 +1 +-28 +-1 +-29 +-1 +-29 +0 +-28 +1 +-27 +2 +-27 +3 +-26 +4 +-25 +5 +-25 +5 +-24 +6 +-24 +6 +-23 +7 +-23 +7 +-23 +8 +-22 +8 +-22 +8 +-22 +8 +-22 +9 +-21 +9 +-21 +10 +-20 +10 +-21 +9 +-21 +10 +-20 +9 +-21 +9 +-21 +9 +-21 +9 +-20 +9 +-20 +8 +-21 +9 +-21 +9 +-21 +10 +-20 +10 +-20 +9 +-21 +8 +-21 +9 +-21 +8 +-21 +9 +-20 +9 +-21 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +11 +-19 +11 +-19 +11 +-19 +12 +-19 +11 +-19 +11 +-20 +11 +-20 +11 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-19 +-44 +87 +45 +52 +15 +19 +-12 +5 +-24 +0 +-28 +-1 +-29 +0 +-28 +1 +-27 +1 +-27 +2 +-26 +3 +-25 +4 +-25 +4 +-24 +5 +-24 +5 +-23 +-48 +60 +20 +61 +22 +24 +-9 +23 +-23 +0 +-29 +-1 +-30 +-1 +-30 +0 +-28 +1 +-28 +2 +-27 +3 +-26 +4 +-25 +6 +-24 +6 +-23 +7 +-23 +6 +-23 +7 +-23 +6 +-23 +8 +-22 +8 +-22 +8 +-22 +8 +-22 +8 +-22 +8 +-22 +8 +-22 +8 +-22 +9 +-22 +9 +-21 +9 +-21 +9 +-21 +10 +-21 +10 +-20 +10 +-21 +10 +-21 +10 +-21 +10 +-20 +11 +-20 +10 +-21 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +9 +-20 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +10 +-21 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +11 +-20 +10 +-20 +11 +-20 +11 +-20 +11 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +11 +-20 +10 +-20 +10 +-20 +10 +-19 +-44 +86 +45 +50 +14 +18 +-13 +4 +-24 +-1 +-29 +-2 +-30 +-1 +-29 +0 +-28 +1 +-27 +2 +-26 +3 +-25 +4 +-24 +5 +-24 +5 +-23 +6 +-22 +-48 +60 +21 +62 +22 +25 +-8 +23 +-23 +1 +-28 +0 +-29 +0 +-29 +1 +-28 +1 +-28 +2 +-27 +3 +-26 +4 +-25 +5 +-25 +5 +-24 +6 +-24 +6 +-22 +-46 +84 +43 +48 +13 +16 +-14 +3 +-25 +-2 +-29 +-2 +-30 +-2 +-30 +-1 +-29 +-1 +-28 +1 +-27 +2 +-26 +3 +-25 +4 +-25 +5 +-24 +6 +-23 +-47 +59 +20 +60 +22 +24 +-9 +23 +-23 +0 +-28 +-1 +-30 +-1 +-29 +0 +-29 +1 +-28 +2 +-27 +3 +-26 +4 +-25 +4 +-25 +5 +-24 +5 +-24 +6 +-22 +-46 +82 +42 +48 +13 +16 +-15 +2 +-26 +-2 +-30 +-3 +-30 +-2 +-30 +-1 +-29 +0 +-28 +1 +-27 +2 +-26 +4 +-25 +5 +-24 +5 +-24 +6 +-23 +-47 +60 +21 +61 +22 +24 +-9 +23 +-23 +1 +-28 +-1 +-30 +-1 +-29 +0 +-29 +1 +-28 +2 +-27 +3 +-26 +5 +-25 +5 +-24 +6 +-24 +6 +-24 +7 +-23 +7 +-23 +7 +-23 +8 +-22 +8 +-22 +8 +-22 +9 +-21 +8 +-22 +8 +-22 +8 +-22 +8 +-22 +9 +-21 +9 +-21 +10 +-21 +10 +-20 +10 +-21 +10 +-19 +-44 +86 +45 +51 +15 +19 +-12 +4 +-24 +-1 +-29 +-1 +-29 +-1 +-28 +0 +-28 +1 +-27 +2 +-26 +3 +-25 +4 +-25 +4 +-24 +5 +-24 +6 +-23 +-48 +59 +20 +60 +21 +24 +-9 +22 +-24 +0 +-29 +-2 +-30 +-1 +-29 +0 +-28 +1 +-27 +2 +-27 +4 +-26 +4 +-25 +5 +-24 +6 +-24 +6 +-23 +7 +-23 +7 +-22 +7 +-22 +8 +-22 +9 +-22 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +10 +-21 +10 +-20 +10 +-20 +10 +-20 +9 +-19 +-44 +86 +45 +52 +15 +19 +-12 +5 +-24 +0 +-28 +-1 +-29 +-1 +-29 +0 +-28 +1 +-27 +2 +-26 +3 +-25 +4 +-24 +4 +-24 +5 +-23 +6 +-23 +-48 +60 +20 +61 +22 +24 +-9 +23 +-24 +0 +-29 +-1 +-30 +-1 +-29 +0 +-28 +1 +-28 +1 +-28 +2 +-27 +3 +-26 +5 +-25 +5 +-24 +5 +-24 +5 +-23 +-47 +83 +42 +48 +13 +16 +-14 +3 +-25 +-1 +-29 +-2 +-30 +-1 +-29 +0 +-28 +1 +-27 +2 +-26 +3 +-25 +4 +-24 +5 +-24 +5 +-24 +6 +-22 +-47 +60 +20 +61 +22 +24 +-9 +22 +-24 +0 +-29 +-1 +-30 +-1 +-30 +0 +-29 +1 +-28 +2 +-27 +3 +-26 +4 +-25 +5 +-24 +5 +-24 +6 +-24 +7 +-22 +-46 +84 +43 +49 +13 +16 +-14 +2 +-26 +-2 +-30 +-3 +-30 +-2 +-30 +-1 +-29 +0 +-28 +2 +-26 +3 +-26 +4 +-25 +4 +-24 +5 +-24 +6 +-23 +-47 +59 +20 +61 +22 +24 +-9 +23 +-23 +0 +-28 +-1 +-30 +-1 +-30 +0 +-29 +0 +-29 +1 +-28 +2 +-27 +3 +-26 +4 +-26 +5 +-24 +5 +-24 +6 +-24 +5 +-24 +6 +-23 +7 +-23 +8 +-22 +8 +-22 +8 +-22 +8 +-22 +9 +-21 +9 +-21 +8 +-22 +9 +-21 +9 +-22 +10 +-21 +9 +-21 +10 +-20 +9 +-20 +-44 +87 +45 +51 +15 +19 +-12 +4 +-24 +0 +-28 +-1 +-29 +0 +-28 +1 +-28 +1 +-27 +3 +-26 +4 +-24 +5 +-24 +6 +-23 +6 +-23 +7 +-22 +8 +-22 +7 +-22 +7 +-22 +7 +-22 +8 +-22 +8 +-22 +8 +-21 +9 +-21 +9 +-20 +8 +-20 +9 +-20 +9 +-20 +9 +-20 +10 +-19 +10 +-20 +9 +-19 +-45 +62 +23 +63 +24 +26 +-7 +24 +-22 +2 +-27 +0 +-29 +-1 +-29 +0 +-28 +0 +-28 +2 +-27 +2 +-27 +4 +-25 +5 +-24 +6 +-24 +6 +-24 +7 +-23 +7 +-23 +7 +-23 +7 +-23 +8 +-22 +9 +-22 +8 +-22 +9 +-22 +9 +-22 +9 +-21 +9 +-21 +9 +-21 +10 +-20 +9 +-21 +10 +-20 +10 +-20 +10 +-19 +-44 +87 +45 +52 +15 +20 +-12 +6 +-23 +1 +-28 +0 +-28 +0 +-28 +1 +-27 +2 +-26 +3 +-25 +4 +-25 +5 +-24 +6 +-23 +6 +-23 +6 +-22 +-47 +59 +20 +60 +21 +23 +-10 +22 +-24 +0 +-29 +-1 +-30 +0 +-29 +0 +-29 +1 +-28 +2 +-27 +3 +-26 +4 +-25 +5 +-24 +5 +-24 +6 +-24 +6 +-22 +-46 +84 +43 +49 +13 +17 +-14 +3 +-26 +-2 +-30 +-3 +-30 +-3 +-30 +-1 +-29 +-1 +-29 +0 +-28 +2 +-26 +3 +-25 +4 +-24 +5 +-23 +6 +-23 +6 +-23 +6 +-22 +7 +-22 +8 +-21 +8 +-21 +8 +-21 +8 +-21 +9 +-21 +8 +-21 +8 +-21 +9 +-20 +9 +-21 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +9 +-20 +9 +-20 +9 +-20 +9 +-20 +9 +-20 +9 +-20 +9 +-21 +9 +-20 +9 +-20 +8 +-21 +9 +-20 +10 +-19 +10 +-19 +10 +-19 +10 +-20 +9 +-20 +-45 +62 +23 +63 +24 +26 +-8 +24 +-22 +2 +-27 +1 +-28 +1 +-28 +2 +-27 +2 +-27 +3 +-26 +4 +-25 +5 +-24 +5 +-24 +6 +-24 +6 +-23 +7 +-23 +7 +-23 +7 +-22 +8 +-22 +7 +-22 +8 +-22 +8 +-22 +9 +-21 +8 +-22 +8 +-22 +9 +-21 +9 +-21 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-19 +-44 +87 +45 +52 +15 +20 +-12 +6 +-24 +0 +-28 +-1 +-29 +0 +-28 +1 +-28 +2 +-26 +3 +-26 +4 +-25 +5 +-24 +5 +-23 +6 +-23 +6 +-22 +-47 +59 +20 +60 +22 +24 +-9 +22 +-23 +0 +-28 +-1 +-30 +0 +-29 +0 +-28 +2 +-27 +2 +-26 +3 +-26 +4 +-25 +5 +-24 +5 +-24 +6 +-24 +6 +-22 +-47 +83 +42 +49 +13 +17 +-14 +3 +-25 +-1 +-29 +-2 +-29 +-1 +-29 +0 +-28 +0 +-27 +2 +-26 +3 +-25 +3 +-25 +4 +-24 +4 +-24 +5 +-23 +-48 +59 +20 +60 +21 +23 +-10 +22 +-24 +-1 +-29 +-2 +-31 +-2 +-30 +0 +-29 +0 +-28 +1 +-28 +2 +-26 +3 +-25 +5 +-24 +6 +-24 +6 +-23 +7 +-23 +7 +-22 +8 +-22 +8 +-22 +9 +-22 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +9 +-20 +10 +-20 +9 +-20 +9 +-21 +10 +-20 +10 +-20 +10 +-20 +11 +-19 +11 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +9 +-21 +9 +-21 +10 +-21 +10 +-20 +9 +-21 +9 +-21 +9 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +11 +-19 +11 +-19 +11 +-19 +11 +-19 +11 +-18 +-43 +88 +46 +52 +16 +20 +-12 +5 +-24 +1 +-27 +0 +-28 +1 +-27 +1 +-27 +2 +-26 +2 +-25 +3 +-25 +4 +-24 +5 +-24 +5 +-23 +5 +-23 +-48 +59 +20 +61 +22 +24 +-9 +23 +-23 +1 +-28 +-1 +-30 +0 +-29 +0 +-28 +1 +-28 +2 +-27 +2 +-26 +3 +-25 +4 +-25 +5 +-24 +6 +-24 +6 +-23 +6 +-23 +7 +-23 +8 +-22 +8 +-22 +8 +-22 +9 +-21 +9 +-21 +8 +-21 +8 +-22 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +9 +-19 +-44 +86 +45 +51 +15 +18 +-13 +4 +-24 +0 +-28 +-1 +-29 +0 +-28 +1 +-27 +2 +-26 +2 +-25 +4 +-24 +5 +-24 +6 +-23 +6 +-22 +7 +-22 +-47 +60 +21 +61 +22 +24 +-9 +23 +-23 +1 +-28 +-1 +-29 +0 +-29 +1 +-28 +1 +-28 +2 +-27 +3 +-26 +4 +-25 +5 +-24 +6 +-24 +6 +-23 +7 +-23 +7 +-23 +7 +-23 +7 +-22 +8 +-22 +8 +-21 +9 +-21 +9 +-21 +9 +-21 +8 +-22 +8 +-22 +8 +-22 +8 +-21 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +10 +-20 +9 +-21 +10 +-20 +10 +-20 +10 +-20 +10 +-21 +10 +-20 +9 +-20 +9 +-20 +10 +-20 +10 +-20 +10 +-20 +9 +-21 +10 +-20 +10 +-19 +-43 +87 +46 +52 +15 +19 +-12 +5 +-23 +1 +-27 +0 +-28 +0 +-27 +1 +-26 +2 +-26 +3 +-25 +4 +-24 +5 +-24 +5 +-23 +6 +-23 +6 +-22 +-47 +59 +20 +61 +22 +24 +-9 +23 +-23 +0 +-28 +0 +-29 +0 +-29 +0 +-28 +1 +-28 +2 +-27 +3 +-26 +4 +-25 +5 +-24 +5 +-24 +6 +-23 +6 +-22 +-46 +84 +43 +49 +14 +17 +-14 +3 +-25 +-1 +-29 +-2 +-30 +-2 +-30 +-1 +-29 +-1 +-28 +1 +-27 +2 +-26 +3 +-25 +4 +-24 +5 +-23 +6 +-23 +6 +-22 +6 +-22 +6 +-22 +6 +-22 +7 +-21 +7 +-22 +8 +-21 +8 +-21 +8 +-21 +8 +-21 +8 +-21 +9 +-20 +8 +-21 +8 +-21 +8 +-21 +9 +-20 +-45 +62 +23 +62 +24 +26 +-7 +24 +-22 +2 +-27 +1 +-28 +1 +-28 +2 +-27 +2 +-27 +3 +-26 +4 +-25 +6 +-24 +6 +-23 +6 +-23 +7 +-23 +7 +-22 +7 +-23 +7 +-22 +8 +-22 +9 +-21 +9 +-21 +9 +-20 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +9 +-20 +10 +-20 +10 +-20 +10 +-21 +9 +-21 +10 +-20 +9 +-21 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +9 +-21 +9 +-21 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +11 +-19 +10 +-19 +-44 +87 +46 +51 +15 +19 +-12 +4 +-24 +0 +-28 +-1 +-29 +0 +-28 +0 +-28 +1 +-27 +2 +-26 +3 +-25 +4 +-24 +5 +-23 +6 +-23 +6 +-22 +-47 +60 +22 +62 +23 +25 +-8 +23 +-23 +1 +-28 +0 +-29 +0 +-29 +0 +-28 +2 +-27 +2 +-26 +3 +-25 +4 +-25 +5 +-24 +5 +-24 +6 +-24 +6 +-23 +6 +-24 +7 +-23 +7 +-22 +8 +-22 +8 +-21 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +10 +-21 +10 +-20 +10 +-20 +10 +-19 +-44 +87 +45 +51 +15 +18 +-12 +4 +-24 +-1 +-29 +-2 +-30 +-1 +-29 +-1 +-28 +0 +-27 +2 +-26 +3 +-25 +4 +-25 +5 +-23 +6 +-23 +6 +-23 +-47 +59 +21 +60 +22 +23 +-10 +22 +-24 +0 +-29 +-1 +-30 +-1 +-30 +0 +-29 +1 +-28 +2 +-27 +3 +-26 +3 +-26 +5 +-24 +5 +-24 +6 +-23 +6 +-23 +6 +-23 +7 +-22 +8 +-22 +8 +-21 +8 +-21 +8 +-21 +8 +-21 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +9 +-20 +9 +-21 +10 +-20 +10 +-20 +10 +-20 +9 +-21 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +11 +-19 +11 +-19 +10 +-19 +10 +-20 +10 +-20 +10 +-19 +10 +-19 +10 +-19 +10 +-19 +10 +-19 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +9 +-21 +9 +-21 +10 +-20 +10 +-20 +9 +-21 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +9 +-20 +9 +-19 +-44 +86 +45 +52 +16 +19 +-12 +5 +-24 +0 +-28 +0 +-28 +0 +-28 +1 +-27 +2 +-27 +2 +-26 +4 +-25 +4 +-24 +5 +-23 +6 +-23 +6 +-22 +-47 +60 +21 +61 +22 +24 +-8 +23 +-23 +0 +-28 +-1 +-30 +0 +-29 +1 +-28 +1 +-28 +2 +-27 +3 +-26 +4 +-25 +5 +-24 +5 +-24 +6 +-23 +7 +-22 +7 +-22 +7 +-22 +8 +-22 +8 +-22 +8 +-21 +9 +-21 +8 +-21 +9 +-21 +8 +-21 +9 +-21 +9 +-21 +9 +-21 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +9 +-21 +9 +-21 +10 +-21 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +9 +-21 +9 +-21 +9 +-21 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-19 +10 +-20 +11 +-19 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +11 +-20 +11 +-20 +11 +-19 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-19 +-44 +86 +45 +51 +15 +19 +-12 +5 +-24 +0 +-28 +-1 +-28 +0 +-28 +1 +-28 +1 +-27 +2 +-26 +4 +-25 +4 +-24 +5 +-23 +6 +-23 +6 +-23 +-48 +59 +20 +60 +22 +23 +-9 +22 +-24 +0 +-28 +-2 +-30 +-1 +-30 +-1 +-29 +1 +-28 +2 +-27 +3 +-26 +4 +-25 +5 +-24 +6 +-24 +6 +-23 +6 +-22 +-47 +84 +43 +49 +14 +18 +-13 +4 +-24 +-1 +-29 +-2 +-29 +-1 +-29 +0 +-28 +0 +-27 +2 +-26 +3 +-25 +4 +-24 +5 +-24 +5 +-23 +6 +-23 +-47 +60 +20 +60 +22 +24 +-9 +23 +-23 +1 +-28 +-1 +-30 +-1 +-29 +0 +-29 +0 +-28 +2 +-27 +2 +-27 +4 +-25 +5 +-24 +6 +-24 +6 +-23 +6 +-22 +-47 +84 +42 +49 +14 +17 +-14 +3 +-25 +-2 +-29 +-2 +-30 +-2 +-29 +-1 +-28 +0 +-28 +1 +-27 +3 +-25 +4 +-24 +4 +-24 +4 +-24 +5 +-23 +-48 +59 +20 +60 +22 +23 +-9 +21 +-24 +-1 +-29 +-2 +-31 +-1 +-30 +0 +-29 +0 +-28 +1 +-27 +2 +-26 +3 +-26 +3 +-25 +4 +-24 +5 +-24 +6 +-23 +6 +-23 +7 +-23 +7 +-22 +8 +-22 +8 +-22 +9 +-21 +8 +-21 +9 +-21 +9 +-21 +9 +-21 +10 +-21 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-19 +-44 +88 +46 +52 +16 +19 +-12 +5 +-23 +0 +-28 +-1 +-29 +0 +-28 +0 +-27 +1 +-27 +2 +-26 +3 +-25 +4 +-25 +5 +-24 +6 +-23 +6 +-23 +-47 +59 +20 +60 +22 +24 +-9 +22 +-24 +0 +-29 +-1 +-30 +-1 +-29 +1 +-28 +0 +-28 +2 +-27 +3 +-26 +5 +-25 +5 +-25 +5 +-25 +6 +-24 +6 +-24 +6 +-24 +7 +-23 +6 +-23 +7 +-23 +8 +-22 +8 +-22 +8 +-22 +8 +-22 +8 +-22 +8 +-22 +9 +-21 +9 +-21 +9 +-21 +10 +-20 +10 +-20 +10 +-19 +-44 +86 +45 +52 +15 +19 +-12 +4 +-24 +0 +-28 +-1 +-29 +-1 +-28 +0 +-28 +1 +-27 +2 +-26 +3 +-25 +4 +-25 +5 +-24 +5 +-24 +6 +-23 +-47 +59 +20 +60 +22 +24 +-9 +23 +-23 +0 +-28 +-1 +-29 +-1 +-29 +0 +-29 +1 +-28 +2 +-27 +3 +-26 +4 +-25 +4 +-25 +6 +-24 +6 +-24 +7 +-22 +-46 +84 +43 +49 +14 +17 +-14 +3 +-25 +-1 +-29 +-2 +-30 +-1 +-29 +0 +-28 +1 +-27 +1 +-27 +3 +-25 +4 +-25 +4 +-25 +4 +-24 +4 +-24 +-48 +59 +20 +59 +20 +23 +-10 +21 +-25 +0 +-29 +-2 +-31 +-1 +-30 +0 +-29 +0 +-29 +1 +-28 +3 +-26 +4 +-25 +6 +-24 +6 +-24 +7 +-23 +8 +-21 +-45 +84 +43 +50 +14 +17 +-14 +3 +-25 +-1 +-29 +-2 +-30 +-1 +-29 +0 +-28 +1 +-28 +1 +-27 +3 +-26 +4 +-25 +4 +-24 +5 +-24 +6 +-22 +-47 +59 +20 +60 +21 +23 +-9 +22 +-24 +0 +-29 +-1 +-30 +-1 +-30 +0 +-29 +1 +-28 +2 +-27 +3 +-26 +4 +-25 +5 +-25 +6 +-24 +6 +-24 +7 +-23 +6 +-23 +7 +-23 +7 +-22 +8 +-22 +9 +-21 +8 +-22 +9 +-21 +8 +-22 +8 +-22 +8 +-22 +8 +-22 +9 +-21 +9 +-21 +9 +-22 +9 +-22 +9 +-20 +-45 +86 +44 +50 +14 +18 +-13 +4 +-24 +0 +-28 +-1 +-29 +0 +-28 +1 +-27 +2 +-27 +3 +-26 +4 +-24 +5 +-24 +6 +-23 +7 +-22 +7 +-22 +7 +-22 +7 +-22 +7 +-22 +8 +-22 +8 +-21 +8 +-21 +9 +-21 +9 +-21 +8 +-21 +8 +-21 +9 +-20 +9 +-20 +9 +-20 +9 +-20 +9 +-20 +9 +-20 +-45 +62 +22 +63 +24 +26 +-8 +24 +-22 +2 +-28 +0 +-29 +1 +-28 +1 +-28 +2 +-27 +2 +-27 +4 +-26 +4 +-25 +5 +-24 +6 +-24 +7 +-23 +7 +-23 +7 +-23 +7 +-23 +8 +-22 +8 +-22 +9 +-21 +9 +-21 +8 +-21 +9 +-21 +8 +-22 +8 +-22 +8 +-22 +9 +-21 +9 +-21 +9 +-22 +9 +-22 +9 +-20 +-44 +86 +45 +51 +15 +19 +-12 +4 +-24 +0 +-28 +0 +-28 +0 +-28 +1 +-27 +2 +-26 +3 +-25 +4 +-24 +5 +-24 +6 +-23 +6 +-23 +6 +-22 +-47 +60 +21 +60 +22 +24 +-9 +22 +-24 +1 +-28 +-1 +-30 +-1 +-30 +0 +-29 +1 +-28 +2 +-27 +3 +-26 +4 +-25 +5 +-24 +6 +-24 +6 +-24 +6 +-22 +-47 +84 +42 +49 +13 +16 +-14 +2 +-26 +-1 +-30 +-2 +-30 +-1 +-29 +-1 +-29 +0 +-28 +2 +-27 +2 +-26 +4 +-25 +4 +-24 +5 +-24 +5 +-23 +6 +-23 +6 +-23 +7 +-22 +7 +-21 +7 +-22 +8 +-21 +8 +-21 +8 +-21 +8 +-21 +8 +-21 +8 +-21 +8 +-21 +8 +-21 +8 +-21 +8 +-21 +9 +-20 +10 +-20 +9 +-20 +10 +-19 +10 +-19 +10 +-19 +10 +-19 +10 +-19 +10 +-19 +10 +-19 +10 +-19 +10 +-19 +10 +-19 +10 +-19 +10 +-20 +10 +-20 +9 +-20 +-45 +62 +23 +63 +24 +26 +-7 +24 +-22 +2 +-27 +0 +-28 +0 +-28 +2 +-27 +2 +-27 +3 +-26 +4 +-25 +5 +-25 +5 +-24 +6 +-24 +6 +-24 +6 +-23 +6 +-23 +7 +-23 +8 +-22 +8 +-22 +9 +-22 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-19 +-44 +87 +45 +51 +15 +18 +-13 +4 +-24 +-1 +-29 +-2 +-30 +-1 +-29 +0 +-28 +0 +-28 +1 +-27 +2 +-26 +4 +-25 +4 +-24 +5 +-23 +6 +-22 +-47 +60 +20 +60 +22 +24 +-9 +22 +-24 +1 +-28 +-1 +-30 +-1 +-29 +0 +-29 +1 +-28 +2 +-27 +3 +-26 +4 +-25 +5 +-24 +6 +-24 +6 +-23 +7 +-22 +-46 +85 +44 +50 +30 +18 +-13 +3 +-25 +-1 +-29 +-1 +-29 +-1 +-29 +0 +-28 +1 +-27 +2 +-26 +2 +-26 +3 +-25 +4 +-24 +5 +-24 +5 +-23 +-48 +59 +20 +60 +22 +24 +-9 +22 +-23 +0 +-29 +-2 +-30 +-1 +-30 +0 +-28 +2 +-27 +2 +-27 +3 +-26 +4 +-26 +4 +-25 +5 +-24 +6 +-24 +6 +-23 +7 +-23 +6 +-23 +7 +-23 +7 +-23 +7 +-23 +8 +-23 +8 +-22 +8 +-22 +8 +-22 +8 +-22 +9 +-21 +10 +-21 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +11 +-20 +11 +-20 +11 +-19 +11 +-20 +10 +-20 +10 +-20 +10 +-20 +11 +-20 +10 +-20 +10 +-20 +11 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-21 +10 +-20 +10 +-21 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +9 +-19 +-44 +86 +45 +50 +15 +19 +-12 +4 +-24 +0 +-28 +-2 +-30 +-1 +-29 +0 +-28 +1 +-27 +2 +-26 +2 +-26 +4 +-25 +4 +-24 +5 +-24 +6 +-22 +-47 +59 +20 +62 +22 +24 +-9 +23 +-23 +0 +-28 +-1 +-30 +0 +-29 +0 +-29 +1 +-28 +2 +-28 +3 +-26 +4 +-25 +5 +-24 +6 +-24 +6 +-24 +6 +-23 +7 +-23 +7 +-23 +8 +-22 +9 +-21 +9 +-21 +9 +-21 +10 +-21 +10 +-20 +10 +-21 +9 +-21 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-19 +-44 +87 +45 +51 +15 +19 +-12 +4 +-24 +0 +-28 +-1 +-28 +0 +-28 +0 +-27 +1 +-27 +2 +-26 +3 +-25 +4 +-25 +5 +-24 +5 +-24 +6 +-23 +-47 +58 +20 +60 +21 +23 +-10 +22 +-24 +-1 +-30 +-2 +-30 +-2 +-30 +0 +-29 +1 +-28 +2 +-27 +4 +-26 +4 +-25 +6 +-24 +6 +-24 +7 +-23 +7 +-23 +7 +-23 +8 +-22 +8 +-22 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +10 +-21 +9 +-21 +9 +-21 +9 +-20 +9 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +9 +-21 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-21 +10 +-21 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-19 +-44 +87 +45 +52 +15 +19 +-12 +5 +-24 +0 +-28 +-1 +-29 +0 +-28 +0 +-28 +1 +-27 +2 +-26 +3 +-25 +4 +-25 +4 +-25 +4 +-24 +5 +-24 +-48 +58 +20 +60 +21 +23 +-10 +22 +-24 +0 +-29 +-1 +-30 +0 +-29 +1 +-28 +2 +-27 +3 +-26 +4 +-25 +5 +-24 +6 +-23 +7 +-23 +7 +-23 +7 +-21 +-46 +85 +43 +50 +14 +18 +-13 +4 +-25 +-1 +-29 +-2 +-30 +-1 +-29 +0 +-28 +0 +-28 +2 +-26 +3 +-25 +4 +-25 +4 +-24 +4 +-24 +5 +-23 +6 +-22 +6 +-22 +6 +-22 +7 +-22 +8 +-21 +8 +-21 +8 +-21 +8 +-21 +8 +-21 +8 +-21 +8 +-21 +8 +-21 +8 +-21 +9 +-20 +10 +-20 +9 +-20 +-44 +62 +23 +63 +24 +26 +-7 +24 +-22 +2 +-27 +0 +-29 +0 +-29 +0 +-28 +2 +-27 +2 +-27 +3 +-26 +3 +-26 +4 +-25 +5 +-24 +6 +-24 +6 +-23 +7 +-23 +7 +-23 +8 +-22 +9 +-21 +9 +-21 +9 +-21 +8 +-21 +9 +-21 +8 +-21 +9 +-21 +9 +-21 +9 +-20 +9 +-21 +9 +-21 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +11 +-20 +10 +-20 +11 +-20 +11 +-20 +10 +-20 +10 +-20 +10 +-20 +11 +-20 +11 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-19 +-43 +87 +46 +52 +16 +19 +-12 +5 +-24 +0 +-28 +-1 +-29 +0 +-28 +0 +-28 +2 +-27 +2 +-26 +3 +-25 +4 +-24 +5 +-23 +6 +-23 +6 +-22 +-47 +59 +20 +61 +22 +24 +-9 +22 +-24 +0 +-29 +-2 +-30 +-1 +-30 +0 +-29 +0 +-28 +1 +-28 +3 +-26 +3 +-26 +4 +-25 +5 +-24 +6 +-24 +7 +-22 +7 +-22 +7 +-22 +8 +-22 +8 +-21 +9 +-21 +9 +-21 +9 +-21 +9 +-20 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +10 +-20 +10 +-20 +10 +-20 +10 +-19 +-44 +86 +45 +51 +15 +19 +-12 +5 +-24 +0 +-28 +-1 +-29 +0 +-28 +0 +-28 +1 +-27 +2 +-26 +3 +-25 +4 +-24 +5 +-24 +5 +-23 +6 +-22 +-47 +60 +21 +61 +22 +24 +-9 +22 +-23 +0 +-29 +-1 +-30 +-1 +-29 +0 +-28 +1 +-28 +2 +-27 +3 +-26 +4 +-25 +5 +-24 +5 +-24 +6 +-24 +6 +-24 +6 +-23 +6 +-23 +8 +-22 +8 +-22 +8 +-22 +7 +-22 +7 +-22 +8 +-22 +8 +-22 +8 +-22 +8 +-22 +9 +-21 +9 +-21 +9 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +11 +-20 +11 +-19 +11 +-19 +11 +-19 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +11 +-20 +11 +-20 +11 +-19 +10 +-19 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +9 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-21 +10 +-20 +10 +-19 +-43 +87 +46 +51 +16 +19 +-12 +5 +-24 +0 +-28 +-1 +-29 +0 +-28 +0 +-27 +2 +-26 +2 +-26 +4 +-24 +5 +-24 +5 +-23 +5 +-23 +6 +-23 +-47 +59 +20 +60 +22 +23 +-9 +22 +-24 +0 +-29 +-2 +-30 +-1 +-29 +0 +-28 +1 +-28 +2 +-27 +3 +-26 +4 +-25 +6 +-24 +7 +-23 +7 +-23 +7 +-22 +7 +-22 +8 +-22 +9 +-21 +9 +-21 +9 +-21 +10 +-20 +10 +-20 +10 +-20 +9 +-21 +9 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +9 +-20 +9 +-21 +9 +-21 +10 +-20 +9 +-20 +10 +-21 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +11 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-21 +10 +-20 +9 +-21 +10 +-20 +9 +-21 +10 +-20 +10 +-20 +9 +-21 +9 +-21 +9 +-21 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +9 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-19 +-43 +88 +46 +52 +16 +20 +-11 +6 +-22 +1 +-27 +0 +-28 +0 +-27 +1 +-27 +2 +-26 +3 +-25 +4 +-25 +4 +-24 +5 +-23 +6 +-23 +6 +-23 +-47 +59 +20 +61 +22 +24 +-8 +23 +-23 +0 +-28 +-1 +-30 +-1 +-29 +0 +-29 +0 +-28 +2 +-27 +2 +-26 +4 +-25 +5 +-25 +6 +-24 +6 +-23 +6 +-22 +-46 +84 +43 +49 +14 +16 +-14 +3 +-25 +-2 +-30 +-2 +-30 +-2 +-29 +-2 +-29 +-1 +-28 +0 +-28 +2 +-26 +3 +-25 +3 +-25 +4 +-24 +5 +-24 +-48 +58 +20 +60 +21 +23 +-9 +22 +-23 +0 +-28 +-1 +-29 +-1 +-29 +0 +-28 +1 +-28 +2 +-26 +4 +-26 +4 +-25 +5 +-24 +6 +-24 +7 +-23 +7 +-22 +-46 +84 +43 +49 +30 +17 +-13 +3 +-25 +-1 +-29 +-2 +-30 +-1 +-29 +0 +-28 +0 +-27 +2 +-26 +3 +-25 +4 +-24 +4 +-24 +5 +-24 +5 +-23 +-47 +59 +20 +60 +22 +24 +-9 +22 +-23 +0 +-28 +-1 +-30 +-1 +-29 +0 +-28 +1 +-28 +2 +-27 +3 +-26 +4 +-25 +5 +-25 +5 +-24 +6 +-23 +6 +-23 +7 +-22 +7 +-23 +7 +-22 +7 +-22 +8 +-22 +8 +-22 +8 +-21 +9 +-21 +8 +-21 +7 +-22 +8 +-22 +8 +-21 +9 +-21 +9 +-21 +9 +-21 +9 +-20 +-44 +86 +45 +50 +15 +19 +-12 +5 +-24 +0 +-28 +-1 +-29 +-1 +-29 +1 +-27 +1 +-26 +2 +-25 +3 +-25 +4 +-24 +4 +-24 +5 +-23 +5 +-23 +-48 +59 +20 +60 +22 +24 +-9 +22 +-24 +0 +-29 +-1 +-29 +-1 +-29 +0 +-28 +1 +-27 +2 +-27 +3 +-25 +4 +-25 +5 +-24 +6 +-23 +7 +-23 +8 +-22 +7 +-22 +8 +-22 +8 +-22 +8 +-22 +8 +-21 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +10 +-21 +10 +-21 +9 +-20 +10 +-20 +9 +-20 +9 +-20 +-44 +86 +45 +50 +15 +19 +-12 +5 +-24 +0 +-28 +-1 +-29 +-1 +-29 +0 +-28 +0 +-28 +2 +-26 +3 +-25 +4 +-24 +5 +-24 +5 +-23 +6 +-22 +-47 +60 +21 +62 +22 +25 +-8 +23 +-23 +1 +-28 +-1 +-30 +0 +-29 +1 +-28 +2 +-27 +2 +-26 +3 +-26 +4 +-25 +5 +-24 +6 +-23 +7 +-23 +7 +-22 +-46 +84 +43 +49 +30 +17 +-14 +4 +-25 +-1 +-29 +-2 +-29 +-1 +-29 +0 +-28 +0 +-27 +1 +-26 +2 +-26 +3 +-25 +4 +-24 +5 +-23 +5 +-23 +-48 +58 +20 +60 +22 +24 +-9 +22 +-24 +0 +-28 +-1 +-30 +-1 +-29 +0 +-28 +1 +-28 +2 +-27 +3 +-26 +3 +-25 +4 +-25 +5 +-24 +6 +-23 +6 +-22 +-47 +84 +43 +49 +13 +16 +-15 +2 +-26 +-3 +-30 +-3 +-30 +-2 +-30 +-2 +-29 +-1 +-28 +1 +-26 +2 +-26 +4 +-24 +4 +-24 +5 +-23 +6 +-22 +-47 +60 +21 +61 +22 +24 +-9 +22 +-23 +0 +-28 +-2 +-30 +-1 +-29 +0 +-28 +1 +-28 +2 +-27 +3 +-26 +5 +-25 +5 +-24 +6 +-24 +6 +-23 +7 +-23 +7 +-23 +7 +-23 +8 +-22 +8 +-21 +9 +-21 +9 +-21 +9 +-20 +9 +-20 +9 +-21 +9 +-21 +9 +-20 +9 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-19 +-44 +86 +45 +51 +15 +19 +-12 +5 +-24 +0 +-28 +-1 +-28 +0 +-28 +0 +-27 +1 +-27 +2 +-26 +3 +-25 +4 +-24 +4 +-24 +5 +-23 +5 +-23 +5 +-23 +5 +-23 +6 +-22 +7 +-22 +7 +-22 +7 +-22 +7 +-21 +8 +-22 +8 +-21 +8 +-21 +8 +-22 +8 +-21 +8 +-21 +9 +-20 +8 +-20 +9 +-20 +-45 +62 +23 +62 +24 +26 +-7 +24 +-22 +2 +-27 +0 +-29 +0 +-29 +1 +-28 +2 +-27 +3 +-26 +5 +-25 +6 +-24 +7 +-23 +7 +-22 +7 +-22 +8 +-22 +8 +-22 +8 +-21 +9 +-21 +9 +-21 +9 +-21 +9 +-20 +10 +-20 +9 +-20 +9 +-21 +9 +-21 +9 +-21 +9 +-20 +9 +-20 +9 +-20 +10 +-20 +10 +-20 +-44 +86 +45 +52 +16 +18 +-12 +4 +-24 +0 +-28 +-1 +-28 +0 +-28 +0 +-27 +1 +-27 +2 +-26 +2 +-26 +4 +-25 +4 +-24 +5 +-23 +6 +-23 +-47 +59 +20 +60 +21 +24 +-9 +22 +-23 +0 +-28 +-1 +-30 +-1 +-30 +0 +-29 +1 +-28 +2 +-27 +3 +-26 +4 +-25 +5 +-24 +6 +-24 +6 +-24 +6 +-22 +-47 +84 +43 +49 +13 +16 +-15 +2 +-26 +-3 +-30 +-2 +-30 +-2 +-30 +-1 +-29 +-1 +-29 +0 +-28 +2 +-26 +3 +-25 +4 +-25 +5 +-24 +6 +-23 +7 +-22 +7 +-22 +8 +-22 +8 +-21 +9 +-20 +9 +-20 +9 +-21 +9 +-20 +9 +-21 +9 +-21 +9 +-20 +9 +-20 +9 +-20 +9 +-20 +9 +-20 +9 +-20 +9 +-20 +9 +-20 +9 +-20 +9 +-20 +9 +-20 +9 +-20 +10 +-20 +9 +-20 +9 +-20 +8 +-21 +9 +-20 +9 +-20 +9 +-21 +9 +-21 +8 +-21 +9 +-20 +-45 +62 +22 +63 +24 +26 +-8 +24 +-22 +2 +-27 +0 +-28 +1 +-28 +2 +-28 +2 +-27 +4 +-26 +5 +-25 +6 +-24 +7 +-23 +7 +-23 +7 +-23 +7 +-23 +8 +-22 +8 +-22 +8 +-22 +8 +-22 +9 +-21 +9 +-21 +9 +-21 +10 +-20 +9 +-21 +9 +-21 +9 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-19 +-44 +87 +45 +51 +15 +19 +-12 +5 +-24 +0 +-28 +-1 +-29 +-1 +-28 +1 +-27 +1 +-27 +2 +-26 +3 +-25 +4 +-25 +5 +-24 +5 +-24 +6 +-23 +-47 +59 +20 +60 +22 +24 +-9 +22 +-24 +0 +-29 +-1 +-30 +-2 +-30 +-1 +-30 +0 +-29 +1 +-28 +2 +-27 +4 +-26 +4 +-26 +5 +-25 +6 +-24 +7 +-22 +-46 +84 +43 +49 +14 +17 +-14 +3 +-25 +-1 +-30 +-2 +-30 +-1 +-29 +0 +-28 +0 +-28 +2 +-26 +3 +-26 +4 +-25 +4 +-25 +4 +-24 +6 +-23 +-48 +59 +20 +60 +22 +24 +-9 +22 +-24 +0 +-29 +-1 +-30 +0 +-29 +0 +-28 +2 +-28 +2 +-27 +3 +-26 +4 +-25 +6 +-24 +6 +-24 +7 +-23 +7 +-23 +7 +-23 +7 +-22 +8 +-22 +8 +-22 +8 +-22 +8 +-22 +9 +-21 +9 +-21 +9 +-22 +8 +-22 +9 +-21 +9 +-21 +9 +-21 +10 +-21 +9 +-21 +10 +-20 +9 +-21 +9 +-21 +10 +-21 +9 +-21 +9 +-21 +9 +-22 +9 +-21 +9 +-21 +9 +-22 +9 +-21 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-21 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +11 +-20 +10 +-20 +11 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-19 +-44 +87 +46 +52 +16 +19 +-12 +5 +-24 +1 +-27 +0 +-28 +0 +-28 +1 +-27 +1 +-27 +2 +-26 +3 +-25 +4 +-24 +5 +-24 +6 +-23 +6 +-23 +-47 +59 +20 +61 +22 +24 +-9 +22 +-24 +0 +-29 +-2 +-30 +-2 +-30 +-1 +-29 +0 +-29 +2 +-28 +3 +-26 +4 +-25 +5 +-25 +6 +-24 +7 +-23 +7 +-22 +7 +-23 +7 +-22 +8 +-22 +8 +-22 +8 +-22 +9 +-22 +9 +-21 +10 +-21 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +10 +-21 +9 +-21 +10 +-20 +10 +-19 +-44 +87 +45 +52 +15 +19 +-12 +5 +-24 +1 +-27 +0 +-28 +0 +-28 +1 +-27 +1 +-27 +2 +-26 +4 +-25 +4 +-24 +5 +-24 +6 +-23 +6 +-22 +-47 +59 +20 +61 +22 +24 +-9 +23 +-23 +0 +-28 +-1 +-30 +-1 +-30 +0 +-29 +1 +-28 +2 +-27 +3 +-26 +3 +-26 +4 +-25 +5 +-24 +6 +-24 +6 +-23 +6 +-24 +6 +-24 +6 +-24 +7 +-23 +7 +-23 +7 +-22 +7 +-22 +8 +-22 +8 +-22 +8 +-22 +9 +-22 +10 +-21 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +11 +-19 +10 +-20 +10 +-20 +11 +-20 +10 +-20 +9 +-21 +9 +-21 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-19 +-44 +87 +46 +52 +16 +20 +-12 +5 +-24 +1 +-27 +0 +-28 +0 +-28 +1 +-27 +2 +-27 +2 +-26 +4 +-25 +4 +-24 +5 +-24 +6 +-23 +6 +-23 +-47 +59 +20 +60 +22 +24 +-9 +22 +-24 +0 +-28 +-1 +-30 +-1 +-30 +0 +-29 +1 +-28 +2 +-27 +3 +-26 +4 +-26 +5 +-25 +5 +-24 +5 +-24 +6 +-23 +-47 +83 +42 +48 +13 +16 +-15 +2 +-26 +-2 +-30 +-2 +-30 +-2 +-30 +-1 +-29 +0 +-28 +2 +-26 +3 +-25 +4 +-25 +5 +-24 +6 +-23 +6 +-23 +6 +-23 +7 +-22 +8 +-22 +8 +-22 +8 +-21 +8 +-21 +8 +-21 +8 +-21 +8 +-21 +8 +-21 +8 +-21 +8 +-21 +9 +-20 +9 +-20 +9 +-20 +9 +-20 +-45 +62 +23 +64 +24 +26 +-7 +25 +-22 +2 +-27 +0 +-28 +1 +-28 +2 +-27 +2 +-27 +3 +-26 +4 +-25 +5 +-24 +6 +-24 +6 +-24 +6 +-23 +7 +-23 +7 +-23 +8 +-23 +8 +-22 +8 +-22 +9 +-22 +9 +-22 +9 +-21 +8 +-22 +8 +-22 +9 +-22 +9 +-22 +9 +-21 +8 +-22 +9 +-21 +9 +-21 +9 +-21 +8 +-21 +9 +-21 +9 +-21 +9 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +11 +-19 +-43 +87 +45 +52 +16 +19 +-12 +5 +-24 +0 +-28 +-1 +-29 +-1 +-29 +0 +-28 +1 +-27 +2 +-26 +3 +-26 +4 +-24 +5 +-24 +6 +-23 +6 +-22 +-47 +60 +20 +61 +22 +24 +-9 +23 +-23 +1 +-28 +-1 +-30 +0 +-29 +0 +-29 +1 +-28 +2 +-27 +4 +-26 +5 +-25 +5 +-24 +6 +-24 +6 +-23 +7 +-23 +7 +-23 +7 +-22 +8 +-22 +8 +-22 +8 +-22 +9 +-21 +8 +-22 +8 +-22 +8 +-22 +8 +-22 +8 +-21 +8 +-22 +8 +-22 +8 +-22 +9 +-22 +8 +-20 +-45 +86 +44 +51 +15 +18 +-12 +5 +-24 +0 +-28 +-1 +-29 +-1 +-29 +0 +-28 +1 +-27 +2 +-26 +4 +-25 +4 +-24 +5 +-23 +6 +-23 +7 +-22 +-46 +60 +21 +62 +22 +25 +-8 +23 +-23 +0 +-28 +-1 +-30 +-1 +-29 +0 +-29 +1 +-28 +2 +-27 +3 +-26 +4 +-26 +5 +-25 +6 +-24 +6 +-24 +7 +-23 +7 +-23 +7 +-23 +8 +-22 +8 +-22 +9 +-22 +9 +-21 +10 +-21 +9 +-21 +9 +-21 +9 +-20 +9 +-20 +9 +-21 +9 +-20 +10 +-20 +10 +-20 +9 +-20 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +10 +-20 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +10 +-21 +9 +-21 +9 +-21 +9 +-21 +9 +-20 +9 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +11 +-19 +11 +-19 +11 +-19 +11 +-19 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-19 +-44 +87 +45 +51 +16 +19 +-12 +4 +-24 +0 +-28 +-1 +-28 +0 +-28 +0 +-27 +1 +-27 +2 +-26 +4 +-25 +5 +-24 +6 +-23 +6 +-23 +7 +-22 +-47 +60 +21 +62 +23 +24 +-8 +23 +-23 +0 +-28 +-1 +-30 +-1 +-29 +0 +-28 +2 +-28 +2 +-27 +3 +-26 +4 +-25 +5 +-24 +6 +-24 +6 +-23 +7 +-22 +7 +-22 +6 +-23 +7 +-22 +7 +-22 +7 +-22 +7 +-22 +8 +-21 +8 +-21 +8 +-22 +8 +-22 +8 +-21 +9 +-21 +9 +-21 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +11 +-19 +11 +-19 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +10 +-20 +10 +-20 +9 +-21 +10 +-21 +9 +-21 +9 +-21 +10 +-20 +10 +-20 +9 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +11 +-19 +10 +-20 +11 +-19 +11 +-20 +10 +-20 +10 +-20 +10 +-20 +11 +-20 +11 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +-44 +86 +45 +51 +15 +18 +-12 +4 +-24 +0 +-28 +-1 +-29 +-1 +-29 +0 +-28 +0 +-28 +2 +-26 +3 +-25 +4 +-24 +5 +-23 +6 +-23 +6 +-22 +-47 +60 +22 +62 +22 +25 +-8 +24 +-22 +2 +-28 +0 +-29 +0 +-29 +1 +-28 +1 +-27 +2 +-27 +4 +-25 +4 +-25 +5 +-24 +6 +-24 +6 +-23 +6 +-22 +-46 +84 +42 +49 +13 +17 +-14 +3 +-26 +-1 +-29 +-2 +-30 +-2 +-29 +0 +-28 +0 +-27 +2 +-26 +3 +-25 +4 +-24 +4 +-24 +5 +-24 +6 +-23 +-47 +59 +20 +60 +22 +24 +-9 +23 +-23 +1 +-28 +-1 +-29 +-1 +-29 +0 +-29 +1 +-28 +2 +-27 +2 +-26 +4 +-25 +5 +-24 +5 +-24 +6 +-24 +5 +-23 +-47 +82 +42 +48 +13 +16 +-15 +2 +-26 +-2 +-30 +-3 +-30 +-2 +-30 +-1 +-29 +-1 +-28 +1 +-26 +2 +-26 +3 +-25 +4 +-24 +5 +-23 +6 +-22 +-47 +60 +21 +62 +23 +25 +-8 +22 +-23 +1 +-28 +-1 +-29 +-1 +-29 +0 +-28 +1 +-28 +2 +-27 +3 +-26 +4 +-25 +4 +-25 +5 +-24 +6 +-23 +6 +-23 +7 +-23 +7 +-23 +8 +-22 +8 +-22 +8 +-22 +8 +-22 +9 +-22 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-19 +-44 +86 +45 +51 +15 +19 +-12 +5 +-24 +0 +-28 +-1 +-28 +0 +-28 +1 +-27 +1 +-27 +2 +-26 +2 +-26 +4 +-24 +4 +-24 +4 +-24 +5 +-23 +-48 +59 +20 +59 +21 +23 +-10 +21 +-24 +0 +-29 +-1 +-30 +-1 +-29 +-1 +-29 +0 +-28 +2 +-27 +2 +-26 +4 +-25 +5 +-24 +5 +-24 +6 +-23 +7 +-23 +7 +-22 +7 +-22 +8 +-22 +8 +-22 +9 +-21 +9 +-21 +10 +-20 +10 +-20 +9 +-21 +10 +-21 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-19 +-43 +87 +45 +52 +16 +19 +-12 +5 +-24 +0 +-28 +-1 +-29 +0 +-28 +1 +-27 +2 +-26 +2 +-26 +4 +-25 +4 +-24 +5 +-23 +6 +-23 +6 +-22 +-47 +59 +20 +61 +22 +24 +-9 +22 +-23 +0 +-29 +-1 +-30 +-1 +-30 +0 +-29 +1 +-28 +1 +-28 +2 +-26 +3 +-26 +4 +-25 +5 +-24 +5 +-24 +6 +-23 +-47 +83 +42 +48 +13 +16 +-15 +2 +-26 +-1 +-29 +-2 +-30 +-1 +-29 +0 +-28 +0 +-27 +2 +-26 +3 +-25 +4 +-24 +5 +-23 +6 +-23 +6 +-22 +-47 +60 +21 +61 +22 +24 +-9 +22 +-23 +0 +-28 +-1 +-29 +-1 +-29 +0 +-28 +1 +-28 +2 +-27 +3 +-26 +3 +-26 +4 +-25 +5 +-24 +6 +-24 +6 +-22 +-46 +84 +43 +49 +30 +17 +-13 +3 +-25 +-1 +-29 +-2 +-29 +-1 +-29 +0 +-28 +0 +-28 +2 +-26 +3 +-25 +4 +-25 +4 +-24 +5 +-24 +6 +-23 +-47 +59 +21 +60 +22 +23 +-9 +22 +-24 +-1 +-29 +-2 +-30 +-1 +-30 +0 +-29 +0 +-29 +1 +-28 +2 +-27 +3 +-26 +4 +-26 +5 +-24 +6 +-24 +6 +-23 +6 +-24 +7 +-23 +7 +-22 +8 +-21 +8 +-21 +9 +-21 +9 +-20 +9 +-21 +9 +-21 +9 +-21 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-19 +-43 +86 +45 +51 +16 +19 +-12 +4 +-24 +0 +-27 +-1 +-28 +0 +-28 +1 +-27 +1 +-27 +2 +-26 +3 +-25 +4 +-24 +5 +-24 +6 +-23 +6 +-23 +6 +-22 +6 +-22 +7 +-22 +7 +-22 +8 +-21 +8 +-21 +8 +-20 +8 +-20 +8 +-20 +8 +-20 +9 +-20 +9 +-20 +10 +-20 +9 +-20 +9 +-20 +9 +-19 +-44 +62 +23 +63 +24 +26 +-7 +24 +-21 +0 +-28 +-1 +-29 +-1 +-29 +1 +-28 +2 +-27 +2 +-27 +2 +-26 +4 +-25 +5 +-25 +5 +-24 +6 +-24 +6 +-24 +6 +-23 +7 +-23 +8 +-22 +8 +-22 +8 +-21 +8 +-22 +9 +-21 +9 +-21 +9 +-20 +9 +-20 +9 +-20 +10 +-20 +9 +-20 +10 +-20 +9 +-20 +9 +-20 +-44 +86 +45 +51 +15 +19 +-12 +5 +-24 +-1 +-28 +-1 +-29 +-1 +-29 +0 +-28 +1 +-27 +1 +-26 +3 +-25 +3 +-24 +4 +-24 +4 +-24 +5 +-23 +-48 +59 +20 +60 +22 +24 +-9 +22 +-23 +0 +-29 +-1 +-29 +-1 +-29 +0 +-28 +1 +-28 +2 +-26 +4 +-25 +4 +-25 +5 +-24 +6 +-23 +6 +-23 +7 +-22 +-46 +84 +43 +50 +15 +17 +-13 +3 +-25 +-2 +-29 +-2 +-29 +-1 +-29 +0 +-28 +1 +-27 +2 +-26 +2 +-26 +4 +-24 +4 +-24 +6 +-23 +6 +-23 +6 +-22 +7 +-22 +7 +-22 +8 +-21 +8 +-21 +8 +-21 +9 +-20 +9 +-20 +9 +-20 +9 +-20 +9 +-20 +10 +-20 +10 +-20 +9 +-20 +9 +-20 +9 +-20 +9 +-20 +8 +-20 +9 +-20 +10 +-19 +10 +-19 +10 +-19 +9 +-19 +9 +-20 +9 +-20 +9 +-20 +9 +-20 +9 +-19 +9 +-20 +10 +-20 +10 +-19 +10 +-19 +-44 +62 +23 +63 +25 +26 +-6 +25 +-21 +2 +-26 +1 +-27 +2 +-27 +2 +-27 +2 +-27 +3 +-26 +4 +-25 +5 +-24 +5 +-24 +6 +-24 +6 +-24 +7 +-23 +7 +-23 +6 +-23 +7 +-23 +7 +-23 +8 +-22 +8 +-22 +8 +-22 +9 +-21 +9 +-21 +8 +-22 +9 +-21 +10 +-20 +10 +-20 +9 +-20 +10 +-20 +10 +-19 +-44 +87 +45 +52 +16 +20 +-12 +5 +-23 +0 +-28 +0 +-28 +1 +-27 +1 +-27 +1 +-27 +2 +-25 +4 +-24 +4 +-24 +5 +-24 +5 +-23 +6 +-23 +-47 +59 +20 +60 +22 +24 +-9 +22 +-24 +0 +-29 +-2 +-30 +-1 +-29 +0 +-29 +0 +-28 +2 +-27 +2 +-27 +3 +-26 +4 +-25 +5 +-24 +6 +-24 +6 +-22 +-47 +84 +43 +50 +30 +17 +-14 +3 +-25 +-1 +-29 +-1 +-29 +-1 +-29 +0 +-28 +0 +-27 +1 +-26 +2 +-25 +3 +-25 +4 +-24 +5 +-23 +6 +-23 +-48 +59 +20 +60 +22 +23 +-9 +22 +-24 +0 +-29 +-2 +-30 +-1 +-30 +0 +-28 +1 +-27 +2 +-27 +3 +-26 +4 +-25 +5 +-24 +6 +-24 +6 +-23 +7 +-23 +7 +-22 +7 +-22 +8 +-22 +8 +-22 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +9 +-20 +9 +-20 +10 +-20 +9 +-20 +9 +-20 +9 +-21 +9 +-21 +9 +-21 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +9 +-21 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +11 +-19 +11 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-19 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +9 +-20 +10 +-20 +9 +-21 +9 +-20 +8 +-21 +9 +-21 +8 +-22 +9 +-21 +10 +-20 +9 +-21 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +9 +-21 +9 +-21 +10 +-20 +10 +-20 +11 +-20 +10 +-20 +10 +-20 +10 +-19 +-44 +87 +45 +52 +15 +20 +-12 +6 +-23 +1 +-27 +0 +-28 +1 +-27 +1 +-27 +2 +-26 +3 +-25 +4 +-24 +5 +-24 +6 +-22 +6 +-23 +6 +-22 +-46 +59 +20 +62 +22 +24 +-9 +23 +-23 +0 +-29 +-2 +-30 +-1 +-30 +-1 +-30 +0 +-28 +1 +-28 +2 +-27 +4 +-26 +4 +-25 +5 +-24 +6 +-23 +7 +-23 +7 +-23 +7 +-22 +8 +-22 +9 +-21 +9 +-21 +9 +-21 +8 +-22 +9 +-21 +9 +-22 +9 +-22 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +9 +-20 +-44 +86 +45 +51 +15 +19 +-12 +5 +-24 +0 +-28 +0 +-28 +0 +-28 +1 +-27 +1 +-27 +2 +-26 +4 +-25 +5 +-24 +6 +-23 +6 +-23 +6 +-22 +-47 +59 +20 +60 +22 +24 +-9 +22 +-24 +1 +-28 +-1 +-30 +-1 +-30 +0 +-29 +1 +-28 +2 +-28 +3 +-26 +4 +-25 +5 +-25 +6 +-24 +6 +-24 +6 +-24 +6 +-24 +7 +-23 +7 +-22 +8 +-22 +8 +-22 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-21 +10 +-20 +10 +-20 +10 +-21 +10 +-21 +9 +-21 +9 +-22 +8 +-22 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +10 +-20 +9 +-20 +-44 +86 +44 +50 +14 +19 +-13 +4 +-24 +0 +-28 +-1 +-29 +0 +-28 +1 +-27 +1 +-27 +2 +-26 +3 +-25 +4 +-24 +5 +-24 +6 +-23 +6 +-22 +-47 +60 +21 +62 +22 +25 +-8 +24 +-22 +2 +-28 +0 +-29 +0 +-29 +1 +-28 +1 +-28 +2 +-27 +3 +-26 +4 +-25 +5 +-24 +5 +-24 +6 +-24 +6 +-22 +-46 +84 +42 +49 +13 +17 +-14 +3 +-25 +-1 +-29 +-2 +-30 +-1 +-29 +0 +-28 +0 +-28 +2 +-27 +2 +-25 +4 +-25 +4 +-24 +5 +-23 +6 +-23 +6 +-22 +6 +-23 +6 +-22 +7 +-22 +7 +-22 +8 +-22 +7 +-22 +7 +-22 +7 +-22 +8 +-22 +7 +-22 +8 +-21 +8 +-21 +9 +-20 +9 +-20 +9 +-20 +-45 +62 +23 +63 +24 +26 +-7 +25 +-22 +3 +-26 +1 +-28 +1 +-28 +2 +-27 +3 +-26 +3 +-26 +4 +-25 +5 +-24 +6 +-24 +6 +-23 +7 +-23 +7 +-22 +7 +-23 +7 +-22 +8 +-22 +8 +-22 +8 +-22 +8 +-21 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +10 +-21 +9 +-21 +9 +-21 +9 +-21 +10 +-21 +10 +-21 +10 +-21 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-19 +-44 +86 +44 +51 +15 +18 +-13 +5 +-24 +0 +-28 +-1 +-29 +-1 +-28 +0 +-28 +1 +-27 +2 +-26 +3 +-25 +4 +-25 +4 +-24 +5 +-23 +5 +-23 +-48 +59 +20 +61 +22 +24 +-9 +23 +-23 +1 +-28 +0 +-29 +0 +-28 +2 +-27 +2 +-27 +3 +-26 +4 +-26 +4 +-25 +5 +-24 +6 +-24 +6 +-24 +7 +-23 +7 +-23 +7 +-23 +8 +-22 +8 +-22 +8 +-22 +9 +-22 +9 +-21 +9 +-21 +9 +-22 +9 +-21 +9 +-21 +9 +-21 +10 +-21 +9 +-21 +10 +-20 +10 +-20 +-44 +86 +45 +51 +15 +18 +-13 +4 +-24 +0 +-28 +-1 +-29 +0 +-28 +0 +-28 +1 +-27 +2 +-26 +3 +-25 +4 +-24 +4 +-24 +5 +-24 +5 +-23 +-48 +59 +20 +60 +22 +24 +-10 +22 +-24 +0 +-29 +-2 +-30 +-1 +-30 +0 +-29 +0 +-28 +2 +-27 +3 +-26 +4 +-25 +5 +-24 +5 +-24 +6 +-23 +7 +-23 +7 +-23 +8 +-22 +8 +-22 +8 +-22 +9 +-21 +10 +-21 +10 +-21 +10 +-21 +9 +-21 +9 +-21 +10 +-21 +9 +-21 +10 +-21 +10 +-21 +10 +-20 +10 +-20 +10 +-21 +9 +-21 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +9 +-21 +9 +-21 +10 +-21 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-21 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +11 +-20 +11 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +9 +-19 +-44 +86 +45 +51 +15 +19 +-12 +4 +-24 +0 +-28 +-1 +-29 +0 +-28 +1 +-27 +1 +-27 +3 +-26 +4 +-25 +5 +-24 +6 +-23 +6 +-23 +6 +-22 +-47 +60 +21 +62 +22 +24 +-9 +23 +-23 +1 +-28 +-1 +-29 +-1 +-29 +0 +-29 +1 +-28 +2 +-27 +3 +-26 +3 +-26 +5 +-25 +5 +-24 +6 +-24 +7 +-23 +7 +-23 +7 +-23 +7 +-22 +8 +-22 +8 +-22 +9 +-21 +9 +-21 +8 +-22 +8 +-22 +8 +-22 +8 +-21 +9 +-21 +9 +-21 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-21 +10 +-21 +10 +-21 +10 +-21 +9 +-21 +10 +-21 +9 +-21 +9 +-21 +9 +-21 +10 +-20 +10 +-20 +9 +-21 +9 +-21 +9 +-21 +10 +-20 +10 +-20 +10 +-20 +9 +-21 +10 +-20 +9 +-21 +10 +-20 +9 +-21 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +11 +-20 +10 +-20 +10 +-20 +11 +-20 +10 +-20 +11 +-20 +11 +-20 +11 +-20 +11 +-20 +10 +-20 +11 +-20 +11 +-19 +11 +-19 +11 +-20 +11 +-19 +11 +-20 +10 +-18 +-43 +87 +45 +52 +16 +20 +-12 +5 +-24 +1 +-28 +-1 +-29 +0 +-28 +0 +-28 +1 +-27 +2 +-26 +3 +-25 +4 +-24 +5 +-24 +5 +-24 +6 +-23 +-47 +59 +20 +61 +22 +24 +-9 +23 +-23 +0 +-28 +-1 +-30 +-1 +-29 +0 +-29 +0 +-28 +1 +-28 +2 +-26 +4 +-26 +4 +-25 +5 +-24 +5 +-24 +6 +-23 +-47 +84 +43 +49 +14 +18 +-13 +3 +-25 +-1 +-29 +-2 +-30 +-2 +-29 +-1 +-28 +0 +-28 +2 +-27 +3 +-25 +4 +-25 +5 +-24 +5 +-24 +6 +-23 +-47 +59 +20 +61 +22 +24 +-9 +22 +-24 +0 +-29 +-2 +-30 +-1 +-30 +0 +-29 +0 +-29 +2 +-28 +3 +-26 +4 +-25 +5 +-25 +5 +-24 +6 +-24 +7 +-22 +-46 +84 +43 +49 +14 +17 +-14 +3 +-26 +-2 +-30 +-3 +-30 +-2 +-30 +-1 +-29 +0 +-28 +1 +-27 +2 +-26 +3 +-25 +4 +-25 +5 +-24 +5 +-23 +-47 +59 +20 +61 +22 +24 +-9 +22 +-23 +0 +-28 +-1 +-30 +-1 +-30 +0 +-29 +0 +-28 +1 +-28 +2 +-27 +4 +-25 +4 +-25 +5 +-24 +6 +-24 +6 +-23 +7 +-23 +7 +-23 +7 +-23 +8 +-22 +9 +-22 +9 +-22 +9 +-21 +9 +-21 +10 +-21 +10 +-20 +10 +-20 +10 +-20 +11 +-20 +10 +-20 +10 +-20 +10 +-19 +-44 +87 +45 +52 +15 +19 +-12 +5 +-24 +0 +-28 +-1 +-29 +-1 +-29 +0 +-28 +1 +-27 +2 +-26 +3 +-25 +4 +-24 +4 +-24 +5 +-23 +5 +-23 +-48 +59 +20 +60 +22 +24 +-9 +22 +-23 +0 +-28 +-1 +-30 +-1 +-30 +0 +-28 +1 +-28 +2 +-27 +3 +-26 +4 +-25 +5 +-24 +6 +-23 +6 +-23 +7 +-22 +7 +-22 +7 +-22 +7 +-22 +8 +-22 +8 +-22 +8 +-22 +8 +-22 +8 +-22 +8 +-22 +8 +-22 +9 +-21 +10 +-21 +10 +-20 +10 +-20 +10 +-20 +10 +-19 +-44 +87 +45 +52 +16 +19 +-12 +5 +-24 +0 +-28 +-1 +-29 +0 +-28 +1 +-27 +2 +-27 +2 +-26 +4 +-25 +4 +-24 +5 +-23 +6 +-23 +6 +-22 +-47 +59 +20 +60 +22 +24 +-9 +22 +-24 +0 +-28 +-1 +-30 +-1 +-30 +0 +-28 +1 +-28 +2 +-27 +3 +-26 +4 +-25 +5 +-24 +5 +-24 +6 +-23 +7 +-22 +-46 +84 +43 +48 +13 +17 +-14 +2 +-26 +-1 +-29 +-2 +-30 +-2 +-30 +-1 +-28 +-1 +-28 +0 +-27 +1 +-26 +3 +-25 +3 +-25 +4 +-24 +4 +-23 +-48 +59 +20 +60 +22 +24 +-9 +22 +-23 +0 +-28 +-1 +-29 +-1 +-29 +0 +-28 +1 +-28 +2 +-26 +4 +-25 +5 +-24 +6 +-24 +6 +-23 +7 +-22 +7 +-22 +-46 +84 +44 +50 +30 +17 +-13 +3 +-25 +-1 +-29 +-2 +-30 +-2 +-29 +-1 +-29 +-1 +-28 +1 +-27 +2 +-26 +3 +-25 +4 +-24 +5 +-24 +5 +-24 +-48 +58 +20 +60 +22 +23 +-9 +22 +-24 +0 +-28 +-1 +-30 +-1 +-30 +0 +-29 +1 +-28 +2 +-27 +3 +-26 +4 +-25 +5 +-24 +6 +-24 +6 +-23 +7 +-23 +6 +-23 +7 +-23 +7 +-22 +7 +-22 +8 +-22 +8 +-21 +9 +-21 +9 +-21 +8 +-21 +9 +-21 +9 +-20 +9 +-21 +9 +-20 +9 +-21 +9 +-21 +9 +-20 +-44 +86 +45 +51 +15 +18 +-12 +4 +-24 +0 +-28 +-2 +-29 +0 +-28 +0 +-27 +0 +-28 +2 +-26 +2 +-26 +4 +-24 +5 +-24 +6 +-23 +6 +-22 +7 +-22 +7 +-22 +8 +-21 +8 +-21 +8 +-20 +9 +-20 +8 +-20 +9 +-20 +9 +-20 +9 +-20 +9 +-20 +9 +-20 +10 +-19 +10 +-20 +9 +-20 +9 +-20 +-44 +62 +23 +63 +24 +25 +-7 +24 +-22 +2 +-27 +1 +-28 +1 +-28 +1 +-28 +2 +-27 +3 +-26 +4 +-26 +5 +-25 +6 +-24 +6 +-24 +6 +-24 +7 +-23 +7 +-23 +7 +-23 +8 +-22 +7 +-22 +8 +-22 +7 +-22 +8 +-22 +8 +-22 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +10 +-20 +10 +-20 +-44 +86 +45 +52 +16 +18 +-12 +4 +-24 +0 +-28 +-1 +-28 +0 +-28 +0 +-27 +1 +-27 +2 +-25 +4 +-25 +4 +-24 +5 +-24 +5 +-23 +6 +-23 +-47 +59 +21 +61 +22 +24 +-9 +23 +-23 +0 +-28 +-1 +-29 +-1 +-29 +0 +-28 +0 +-28 +2 +-27 +3 +-26 +4 +-25 +5 +-25 +6 +-24 +6 +-23 +7 +-22 +-46 +84 +43 +50 +30 +17 +-13 +3 +-25 +-1 +-29 +-1 +-29 +-1 +-29 +0 +-28 +1 +-27 +2 +-26 +3 +-25 +4 +-25 +4 +-24 +5 +-24 +5 +-23 +6 +-23 +6 +-23 +6 +-22 +7 +-22 +8 +-21 +8 +-21 +8 +-21 +8 +-20 +8 +-21 +8 +-21 +8 +-21 +8 +-21 +8 +-20 +8 +-20 +8 +-20 +9 +-20 +9 +-20 +8 +-20 +9 +-20 +9 +-20 +9 +-20 +10 +-20 +10 +-19 +10 +-19 +10 +-19 +10 +-19 +10 +-19 +10 +-19 +10 +-19 +10 +-19 +10 +-19 +10 +-19 +-44 +63 +24 +64 +24 +26 +-7 +24 +-22 +2 +-27 +1 +-28 +1 +-28 +2 +-27 +2 +-26 +3 +-26 +4 +-25 +4 +-24 +5 +-24 +6 +-24 +6 +-23 +6 +-23 +7 +-22 +7 +-22 +7 +-22 +8 +-22 +8 +-21 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +10 +-20 +10 +-20 +10 +-19 +-44 +86 +45 +51 +15 +18 +-13 +4 +-24 +-1 +-29 +-1 +-29 +-1 +-29 +0 +-28 +0 +-28 +2 +-26 +3 +-25 +4 +-24 +5 +-24 +5 +-23 +6 +-23 +-48 +59 +20 +60 +22 +24 +-9 +23 +-23 +1 +-28 +0 +-29 +0 +-29 +1 +-28 +2 +-27 +2 +-27 +4 +-25 +4 +-25 +5 +-25 +5 +-24 +5 +-24 +6 +-22 +-46 +83 +42 +49 +13 +16 +-15 +3 +-26 +-1 +-29 +-2 +-30 +-2 +-30 +-1 +-28 +0 +-28 +1 +-27 +2 +-26 +2 +-25 +4 +-24 +4 +-24 +6 +-23 +-48 +59 +20 +61 +22 +24 +-9 +22 +-24 +0 +-29 +-1 +-30 +0 +-29 +1 +-28 +2 +-27 +2 +-27 +3 +-26 +4 +-25 +5 +-24 +6 +-23 +6 +-23 +6 +-23 +7 +-23 +6 +-23 +7 +-22 +7 +-22 +8 +-22 +8 +-22 +9 +-21 +8 +-22 +8 +-22 +8 +-22 +9 +-21 +10 +-20 +10 +-20 +10 +-21 +10 +-20 +10 +-20 +9 +-21 +10 +-21 +9 +-21 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +11 +-19 +11 +-19 +11 +-19 +11 +-19 +11 +-19 +11 +-19 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +9 +-20 +9 +-21 +9 +-20 +9 +-21 +9 +-20 +9 +-21 +10 +-20 +10 +-20 +-44 +86 +46 +51 +15 +19 +-12 +4 +-24 +0 +-28 +-1 +-28 +0 +-28 +0 +-27 +2 +-26 +3 +-25 +4 +-24 +5 +-23 +6 +-23 +6 +-23 +6 +-22 +-47 +60 +22 +62 +23 +25 +-8 +23 +-23 +0 +-28 +-1 +-29 +0 +-29 +0 +-28 +1 +-28 +2 +-27 +3 +-26 +4 +-25 +5 +-24 +6 +-24 +6 +-23 +7 +-23 +6 +-23 +7 +-22 +8 +-22 +8 +-22 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +8 +-21 +8 +-21 +9 +-21 +10 +-20 +9 +-20 +10 +-20 +9 +-20 +9 +-20 +-44 +86 +45 +51 +15 +19 +-12 +5 +-24 +0 +-28 +-1 +-29 +-1 +-28 +0 +-28 +0 +-28 +1 +-26 +2 +-26 +4 +-25 +4 +-24 +4 +-24 +5 +-23 +-48 +59 +20 +60 +22 +24 +-9 +22 +-23 +1 +-28 +0 +-29 +0 +-29 +1 +-27 +2 +-27 +3 +-26 +4 +-25 +4 +-24 +5 +-24 +6 +-24 +6 +-23 +7 +-23 +7 +-22 +7 +-22 +8 +-22 +8 +-22 +9 +-21 +9 +-21 +8 +-21 +9 +-21 +8 +-22 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +9 +-20 +10 +-20 +9 +-20 +9 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +9 +-20 +9 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-19 +-44 +87 +46 +52 +16 +19 +-12 +5 +-24 +0 +-28 +-2 +-29 +-1 +-29 +0 +-28 +1 +-27 +2 +-27 +3 +-25 +4 +-25 +4 +-24 +6 +-23 +6 +-23 +-47 +60 +21 +62 +22 +24 +-8 +23 +-23 +1 +-28 +0 +-29 +0 +-29 +1 +-28 +2 +-27 +3 +-26 +4 +-26 +5 +-25 +5 +-24 +6 +-24 +6 +-23 +7 +-22 +-46 +84 +43 +49 +14 +17 +-14 +3 +-26 +-2 +-30 +-2 +-30 +-2 +-30 +0 +-28 +0 +-28 +1 +-27 +2 +-26 +3 +-25 +4 +-24 +5 +-23 +6 +-23 +6 +-23 +6 +-22 +7 +-22 +7 +-21 +7 +-21 +8 +-21 +7 +-21 +8 +-21 +8 +-21 +7 +-21 +8 +-21 +9 +-20 +9 +-20 +9 +-20 +9 +-20 +9 +-20 +-45 +62 +23 +63 +24 +26 +-7 +23 +-22 +2 +-27 +0 +-29 +0 +-29 +1 +-28 +1 +-28 +2 +-27 +3 +-26 +4 +-25 +5 +-24 +5 +-24 +6 +-24 +6 +-24 +7 +-23 +7 +-23 +7 +-22 +8 +-22 +9 +-21 +9 +-21 +9 +-20 +9 +-20 +8 +-21 +9 +-21 +9 +-21 +10 +-20 +10 +-20 +9 +-20 +10 +-20 +10 +-20 +9 +-21 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +11 +-19 +11 +-19 +11 +-20 +11 +-18 +-43 +88 +46 +52 +16 +20 +-12 +6 +-23 +1 +-27 +0 +-28 +0 +-28 +1 +-27 +2 +-27 +3 +-26 +4 +-25 +4 +-24 +5 +-24 +6 +-23 +6 +-22 +-47 +60 +20 +60 +21 +23 +-10 +22 +-24 +0 +-29 +-1 +-30 +-1 +-30 +0 +-30 +0 +-28 +1 +-28 +3 +-27 +4 +-26 +5 +-25 +6 +-24 +7 +-23 +7 +-23 +7 +-23 +7 +-22 +8 +-22 +8 +-22 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +10 +-21 +10 +-21 +10 +-21 +10 +-21 +10 +-19 +-44 +86 +45 +51 +15 +19 +-12 +4 +-24 +0 +-28 +0 +-28 +0 +-28 +0 +-28 +1 +-27 +2 +-26 +3 +-26 +4 +-25 +5 +-24 +6 +-23 +6 +-22 +-47 +59 +21 +61 +22 +24 +-9 +22 +-23 +0 +-28 +-1 +-30 +-1 +-29 +0 +-29 +1 +-28 +2 +-27 +3 +-26 +4 +-26 +4 +-25 +5 +-25 +6 +-24 +6 +-24 +7 +-23 +7 +-23 +7 +-23 +7 +-23 +8 +-22 +9 +-22 +8 +-22 +9 +-22 +9 +-21 +9 +-21 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +9 +-21 +9 +-21 +10 +-20 +10 +-20 +9 +-20 +10 +-20 +10 +-20 +9 +-21 +8 +-21 +9 +-21 +10 +-20 +10 +-21 +9 +-21 +10 +-21 +9 +-20 +-44 +86 +45 +50 +15 +18 +-13 +4 +-24 +0 +-28 +-1 +-29 +0 +-28 +1 +-28 +2 +-27 +3 +-25 +4 +-25 +5 +-24 +5 +-24 +5 +-24 +6 +-23 +-48 +60 +20 +60 +21 +24 +-9 +22 +-24 +0 +-29 +-1 +-30 +-1 +-30 +0 +-29 +2 +-28 +2 +-27 +4 +-25 +5 +-25 +6 +-24 +6 +-23 +7 +-23 +8 +-22 +8 +-22 +8 +-22 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +10 +-21 +10 +-20 +10 +-21 +10 +-21 +10 +-21 +9 +-21 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-21 +10 +-21 +9 +-21 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +9 +-21 +9 +-21 +9 +-21 +10 +-21 +9 +-21 +10 +-21 +10 +-20 +9 +-21 +9 +-21 +9 +-21 +10 +-20 +9 +-21 +9 +-21 +9 +-21 +10 +-20 +10 +-20 +9 +-21 +9 +-21 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-19 +-44 +87 +46 +52 +16 +19 +-12 +5 +-24 +0 +-28 +0 +-28 +0 +-28 +2 +-27 +2 +-27 +3 +-25 +4 +-24 +6 +-23 +6 +-23 +6 +-23 +7 +-22 +-47 +60 +21 +62 +23 +24 +-8 +23 +-23 +0 +-28 +-1 +-30 +-1 +-29 +0 +-29 +1 +-28 +2 +-27 +4 +-26 +4 +-25 +5 +-25 +6 +-24 +6 +-24 +7 +-22 +-46 +84 +43 +49 +13 +17 +-14 +3 +-26 +-1 +-29 +-2 +-30 +-2 +-30 +-1 +-29 +0 +-28 +1 +-27 +2 +-26 +2 +-26 +3 +-25 +4 +-24 +4 +-24 +-48 +58 +20 +60 +21 +23 +-10 +22 +-24 +0 +-29 +-1 +-30 +-1 +-30 +1 +-28 +2 +-28 +3 +-27 +4 +-26 +5 +-25 +6 +-24 +6 +-23 +7 +-23 +7 +-21 +-46 +84 +43 +49 +13 +17 +-14 +3 +-26 +-1 +-30 +-2 +-30 +-1 +-29 +0 +-28 +0 +-28 +2 +-27 +3 +-25 +4 +-25 +4 +-24 +5 +-24 +6 +-23 +-47 +59 +20 +60 +21 +24 +-10 +22 +-24 +0 +-29 +-1 +-30 +-1 +-30 +0 +-29 +1 +-28 +2 +-27 +4 +-26 +4 +-25 +5 +-25 +5 +-24 +6 +-24 +6 +-23 +6 +-23 +7 +-23 +7 +-22 +8 +-22 +8 +-22 +8 +-22 +9 +-21 +8 +-22 +8 +-22 +8 +-22 +8 +-22 +8 +-22 +8 +-22 +9 +-21 +9 +-22 +9 +-20 +-44 +86 +45 +51 +15 +19 +-12 +5 +-24 +0 +-28 +0 +-28 +0 +-28 +1 +-27 +2 +-27 +3 +-25 +4 +-24 +5 +-24 +6 +-23 +6 +-23 +6 +-22 +-47 +59 +20 +61 +22 +24 +-9 +22 +-24 +0 +-29 +-1 +-30 +0 +-29 +1 +-28 +1 +-28 +2 +-27 +2 +-27 +3 +-26 +4 +-25 +5 +-24 +6 +-24 +6 +-24 +6 +-23 +7 +-23 +7 +-22 +8 +-22 +8 +-22 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +10 +-21 +9 +-21 +10 +-20 +10 +-20 +-44 +86 +45 +52 +16 +18 +-13 +5 +-24 +-1 +-28 +-2 +-29 +-1 +-29 +-1 +-29 +0 +-28 +1 +-27 +3 +-26 +4 +-25 +4 +-25 +5 +-24 +5 +-24 +-48 +59 +20 +60 +21 +23 +-10 +22 +-24 +1 +-28 +-1 +-30 +-1 +-30 +0 +-29 +1 +-28 +3 +-27 +4 +-26 +6 +-24 +7 +-24 +7 +-23 +7 +-22 +7 +-22 +-46 +84 +43 +49 +30 +17 +-14 +4 +-25 +-1 +-29 +-2 +-30 +-1 +-29 +0 +-28 +0 +-28 +1 +-27 +2 +-26 +4 +-24 +5 +-24 +5 +-24 +5 +-23 +-48 +59 +20 +60 +21 +24 +-9 +23 +-24 +0 +-28 +-1 +-30 +-1 +-29 +0 +-29 +1 +-28 +2 +-27 +3 +-26 +4 +-25 +4 +-25 +5 +-24 +6 +-24 +6 +-22 +-47 +84 +42 +48 +13 +17 +-14 +3 +-26 +-2 +-30 +-2 +-30 +-3 +-30 +-2 +-29 +-1 +-29 +0 +-27 +1 +-27 +3 +-25 +3 +-25 +5 +-24 +5 +-23 +-48 +59 +20 +60 +22 +23 +-9 +22 +-24 +0 +-29 +-1 +-30 +-1 +-30 +0 +-29 +1 +-28 +2 +-27 +3 +-26 +4 +-25 +4 +-25 +5 +-24 +6 +-24 +7 +-23 +6 +-24 +7 +-23 +8 +-23 +8 +-22 +8 +-22 +8 +-22 +8 +-22 +8 +-22 +9 +-22 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +10 +-20 +10 +-19 +-44 +86 +45 +51 +15 +19 +-12 +4 +-24 +0 +-28 +-1 +-29 +0 +-28 +0 +-27 +1 +-27 +2 +-26 +4 +-25 +5 +-24 +5 +-24 +5 +-23 +6 +-23 +7 +-22 +6 +-23 +7 +-22 +8 +-22 +7 +-22 +8 +-22 +8 +-22 +8 +-22 +8 +-21 +8 +-21 +9 +-21 +9 +-20 +10 +-20 +10 +-19 +10 +-20 +10 +-19 +-44 +62 +23 +64 +24 +27 +-7 +25 +-22 +2 +-27 +0 +-29 +1 +-28 +2 +-27 +2 +-26 +3 +-26 +4 +-25 +5 +-24 +6 +-24 +6 +-23 +6 +-23 +7 +-23 +7 +-22 +7 +-22 +8 +-22 +8 +-22 +9 +-21 +9 +-21 +8 +-22 +9 +-21 +8 +-22 +8 +-22 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +10 +-20 +-44 +86 +45 +52 +16 +19 +-12 +5 +-24 +0 +-28 +-1 +-29 +0 +-28 +0 +-28 +0 +-28 +1 +-26 +2 +-26 +4 +-25 +5 +-24 +5 +-24 +5 +-23 +-48 +59 +20 +60 +22 +23 +-9 +22 +-24 +0 +-28 +-1 +-30 +-1 +-30 +0 +-28 +1 +-28 +2 +-27 +4 +-26 +5 +-25 +6 +-24 +6 +-23 +7 +-23 +8 +-21 +-45 +85 +44 +50 +14 +18 +-13 +4 +-25 +-1 +-29 +-1 +-29 +-1 +-29 +0 +-28 +1 +-27 +2 +-26 +3 +-25 +4 +-24 +4 +-24 +5 +-23 +6 +-23 +5 +-23 +6 +-22 +6 +-22 +7 +-21 +8 +-21 +8 +-21 +8 +-21 +8 +-21 +8 +-21 +8 +-21 +8 +-21 +8 +-20 +9 +-20 +9 +-20 +9 +-20 +10 +-20 +9 +-20 +8 +-20 +9 +-20 +10 +-20 +10 +-20 +9 +-20 +10 +-20 +9 +-20 +10 +-19 +9 +-20 +8 +-20 +8 +-20 +8 +-21 +9 +-20 +9 +-20 +9 +-20 +-45 +62 +23 +63 +24 +26 +-8 +24 +-22 +2 +-27 +0 +-28 +1 +-28 +2 +-27 +2 +-26 +3 +-26 +4 +-24 +6 +-24 +6 +-23 +6 +-23 +7 +-22 +8 +-22 +7 +-22 +8 +-22 +8 +-22 +9 +-21 +9 +-21 +9 +-21 +10 +-20 +10 +-21 +9 +-21 +9 +-21 +9 +-21 +9 +-20 +10 +-20 +10 +-20 +9 +-20 +10 +-19 +-44 +86 +45 +52 +16 +19 +-12 +5 +-24 +0 +-28 +-1 +-28 +0 +-28 +0 +-27 +1 +-27 +2 +-26 +3 +-25 +4 +-25 +4 +-24 +5 +-23 +6 +-23 +-47 +60 +21 +61 +22 +24 +-9 +23 +-23 +0 +-28 +-1 +-30 +-1 +-30 +-1 +-29 +-1 +-29 +1 +-27 +3 +-26 +3 +-26 +4 +-25 +4 +-25 +6 +-24 +6 +-22 +-47 +83 +42 +49 +14 +16 +-14 +2 +-25 +-2 +-30 +-2 +-30 +-2 +-29 +-1 +-28 +0 +-27 +2 +-26 +3 +-25 +4 +-24 +5 +-23 +6 +-23 +6 +-22 +-46 +60 +21 +61 +22 +24 +-8 +23 +-23 +1 +-28 +0 +-29 +-1 +-29 +0 +-28 +1 +-28 +2 +-27 +3 +-26 +4 +-25 +5 +-24 +6 +-24 +6 +-24 +7 +-23 +7 +-23 +7 +-22 +8 +-22 +8 +-22 +8 +-22 +9 +-21 +9 +-21 +8 +-21 +9 +-21 +8 +-21 +8 +-21 +9 +-21 +9 +-20 +10 +-20 +10 +-20 +10 +-20 +9 +-21 +9 +-21 +8 +-21 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +10 +-21 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +11 +-19 +11 +-19 +11 +-19 +11 +-19 +10 +-20 +10 +-20 +10 +-20 +11 +-19 +11 +-19 +10 +-19 +10 +-20 +10 +-19 +10 +-20 +10 +-20 +10 +-20 +11 +-20 +11 +-19 +10 +-20 +11 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-19 +10 +-18 +-43 +87 +45 +52 +16 +20 +-12 +5 +-23 +0 +-28 +-1 +-28 +0 +-28 +0 +-27 +1 +-27 +2 +-25 +3 +-25 +4 +-24 +5 +-23 +4 +-24 +5 +-23 +-47 +58 +20 +60 +21 +23 +-10 +22 +-24 +-1 +-29 +-1 +-30 +-1 +-30 +0 +-29 +1 +-28 +2 +-27 +4 +-26 +5 +-24 +5 +-24 +6 +-23 +6 +-23 +6 +-23 +6 +-23 +7 +-22 +7 +-22 +8 +-22 +8 +-22 +9 +-21 +9 +-21 +10 +-20 +9 +-21 +9 +-21 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-19 +-43 +87 +46 +52 +16 +20 +-11 +5 +-23 +0 +-27 +-1 +-28 +-1 +-28 +0 +-28 +1 +-27 +2 +-26 +3 +-25 +4 +-24 +5 +-24 +6 +-23 +6 +-22 +-47 +59 +20 +61 +22 +24 +-8 +23 +-23 +0 +-28 +-1 +-30 +-1 +-30 +0 +-29 +1 +-28 +2 +-27 +4 +-26 +4 +-25 +5 +-24 +5 +-24 +6 +-24 +6 +-24 +6 +-23 +6 +-23 +7 +-23 +7 +-22 +7 +-22 +8 +-22 +8 +-22 +9 +-21 +9 +-21 +9 +-21 +10 +-21 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +9 +-20 +10 +-20 +10 +-20 +9 +-21 +10 +-20 +9 +-21 +9 +-21 +9 +-20 +9 +-21 +9 +-20 +10 +-20 +10 +-20 +10 +-19 +-43 +88 +46 +52 +16 +20 +-12 +5 +-23 +0 +-27 +-1 +-28 +0 +-28 +1 +-26 +2 +-26 +2 +-25 +3 +-25 +4 +-24 +5 +-23 +6 +-23 +6 +-23 +-47 +60 +21 +61 +23 +24 +-8 +22 +-23 +0 +-28 +-1 +-30 +-1 +-29 +0 +-28 +1 +-28 +2 +-27 +3 +-26 +4 +-25 +4 +-25 +5 +-25 +5 +-24 +6 +-22 +-46 +83 +42 +48 +13 +17 +-14 +2 +-26 +-2 +-30 +-3 +-30 +-2 +-29 +-1 +-28 +0 +-28 +1 +-26 +3 +-25 +3 +-25 +4 +-24 +4 +-24 +5 +-24 +5 +-23 +6 +-23 +6 +-22 +7 +-22 +8 +-21 +8 +-21 +9 +-21 +9 +-20 +10 +-19 +9 +-20 +9 +-20 +10 +-19 +10 +-19 +10 +-19 +10 +-19 +10 +-19 +-44 +62 +23 +63 +24 +26 +-7 +25 +-21 +2 +-27 +0 +-28 +1 +-28 +1 +-27 +2 +-27 +3 +-26 +4 +-25 +4 +-24 +5 +-24 +6 +-24 +7 +-23 +7 +-22 +7 +-23 +7 +-23 +7 +-22 +8 +-22 +8 +-22 +9 +-21 +8 +-22 +9 +-22 +9 +-21 +9 +-21 +8 +-22 +9 +-21 +9 +-21 +9 +-20 +9 +-21 +9 +-21 +9 +-21 +8 +-21 +9 +-21 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +11 +-20 +10 +-19 +-43 +87 +46 +52 +16 +19 +-12 +5 +-23 +0 +-27 +0 +-28 +0 +-28 +1 +-27 +1 +-27 +2 +-26 +4 +-25 +5 +-24 +5 +-23 +7 +-22 +6 +-22 +-47 +59 +21 +60 +22 +24 +-9 +22 +-23 +0 +-28 +-2 +-30 +0 +-29 +0 +-28 +1 +-28 +2 +-27 +3 +-26 +4 +-25 +5 +-24 +6 +-24 +7 +-23 +7 +-22 +7 +-23 +7 +-22 +8 +-22 +8 +-22 +8 +-22 +8 +-21 +9 +-21 +8 +-21 +8 +-21 +8 +-22 +8 +-22 +8 +-22 +9 +-20 +9 +-20 +9 +-20 +8 +-20 +-45 +86 +45 +50 +15 +18 +-12 +4 +-24 +0 +-28 +-2 +-29 +-1 +-28 +0 +-28 +1 +-27 +2 +-26 +3 +-25 +4 +-24 +5 +-23 +6 +-22 +7 +-22 +-46 +60 +22 +62 +23 +25 +-8 +23 +-22 +1 +-28 +0 +-29 +0 +-29 +1 +-28 +1 +-28 +3 +-26 +4 +-25 +5 +-25 +6 +-24 +6 +-24 +6 +-23 +7 +-23 +7 +-23 +7 +-22 +8 +-22 +8 +-22 +8 +-21 +8 +-22 +8 +-21 +8 +-21 +9 +-21 +9 +-21 +9 +-21 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +9 +-21 +9 +-21 +10 +-20 +9 +-21 +10 +-20 +9 +-21 +10 +-20 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +8 +-21 +9 +-20 +9 +-21 +10 +-20 +10 +-20 +9 +-21 +9 +-20 +9 +-21 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +11 +-20 +11 +-19 +11 +-20 +11 +-19 +11 +-19 +11 +-18 +-43 +88 +46 +52 +16 +20 +-11 +6 +-23 +1 +-27 +0 +-28 +0 +-28 +1 +-27 +2 +-26 +3 +-25 +4 +-24 +5 +-24 +5 +-23 +6 +-23 +6 +-23 +-47 +59 +20 +61 +22 +23 +-9 +22 +-23 +0 +-28 +-1 +-30 +-1 +-29 +0 +-28 +1 +-28 +2 +-27 +3 +-26 +4 +-25 +5 +-24 +5 +-24 +6 +-23 +6 +-23 +6 +-23 +6 +-23 +7 +-22 +7 +-22 +8 +-22 +8 +-22 +8 +-22 +8 +-22 +8 +-22 +8 +-21 +9 +-22 +9 +-21 +9 +-21 +9 +-21 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +9 +-20 +9 +-21 +10 +-20 +10 +-20 +10 +-20 +10 +-19 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +11 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-21 +10 +-19 +-44 +87 +45 +51 +15 +18 +-13 +4 +-24 +-1 +-28 +-1 +-29 +-1 +-29 +0 +-28 +0 +-28 +2 +-26 +3 +-26 +4 +-25 +5 +-24 +6 +-23 +7 +-22 +-47 +60 +21 +62 +22 +25 +-8 +23 +-23 +0 +-28 +-1 +-30 +-1 +-30 +0 +-29 +1 +-28 +2 +-27 +3 +-26 +4 +-25 +5 +-24 +6 +-24 +6 +-23 +7 +-22 +-46 +84 +43 +49 +29 +17 +-14 +3 +-26 +-1 +-29 +-2 +-30 +-1 +-29 +0 +-28 +0 +-28 +2 +-26 +3 +-26 +4 +-25 +4 +-24 +5 +-24 +6 +-22 +-47 +59 +20 +60 +22 +23 +-9 +22 +-23 +0 +-28 +-1 +-30 +-1 +-30 +0 +-29 +1 +-28 +2 +-27 +3 +-26 +4 +-26 +4 +-25 +5 +-25 +6 +-24 +6 +-22 +-46 +84 +43 +48 +13 +16 +-15 +2 +-26 +-3 +-30 +-4 +-31 +-3 +-31 +-1 +-29 +0 +-28 +0 +-28 +2 +-26 +2 +-26 +4 +-25 +4 +-24 +6 +-23 +-47 +59 +20 +60 +22 +24 +-9 +22 +-24 +0 +-29 +-2 +-30 +-1 +-30 +0 +-29 +1 +-28 +2 +-27 +4 +-25 +5 +-25 +6 +-24 +6 +-24 +7 +-23 +7 +-23 +7 +-22 +8 +-22 +8 +-22 +9 +-21 +9 +-21 +9 +-21 +10 +-20 +9 +-20 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +10 +-21 +10 +-19 +-44 +86 +45 +51 +15 +19 +-12 +5 +-24 +0 +-28 +-1 +-29 +0 +-28 +0 +-28 +1 +-27 +2 +-26 +2 +-26 +4 +-24 +4 +-24 +5 +-24 +5 +-24 +-48 +58 +20 +59 +21 +23 +-9 +22 +-24 +0 +-28 +-1 +-30 +-1 +-30 +0 +-29 +1 +-28 +2 +-27 +3 +-26 +5 +-25 +6 +-24 +6 +-23 +7 +-23 +8 +-22 +8 +-22 +7 +-23 +8 +-22 +8 +-22 +9 +-22 +9 +-22 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-19 +-44 +87 +45 +52 +15 +19 +-12 +5 +-24 +1 +-27 +-1 +-28 +-1 +-28 +0 +-28 +1 +-27 +2 +-26 +3 +-25 +4 +-24 +5 +-24 +5 +-24 +5 +-23 +-48 +59 +20 +61 +22 +24 +-9 +22 +-24 +0 +-29 +-1 +-30 +-1 +-29 +0 +-29 +0 +-28 +2 +-27 +2 +-27 +3 +-26 +4 +-25 +5 +-25 +5 +-24 +5 +-23 +-47 +82 +42 +48 +12 +16 +-15 +2 +-26 +-2 +-30 +-3 +-30 +-2 +-30 +-1 +-29 +0 +-28 +2 +-27 +3 +-25 +4 +-25 +5 +-24 +5 +-23 +6 +-23 +-48 +59 +20 +60 +22 +23 +-9 +22 +-24 +0 +-28 +-1 +-30 +-1 +-29 +0 +-29 +1 +-28 +2 +-27 +3 +-26 +4 +-25 +5 +-25 +6 +-24 +6 +-24 +7 +-22 +-46 +84 +43 +50 +30 +18 +-13 +4 +-25 +-1 +-29 +-2 +-30 +-1 +-29 +0 +-29 +0 +-28 +2 +-27 +2 +-26 +4 +-25 +4 +-25 +5 +-24 +5 +-23 +-48 +58 +20 +60 +21 +24 +-10 +22 +-24 +0 +-29 +-2 +-30 +-1 +-30 +-1 +-30 +0 +-28 +1 +-28 +3 +-26 +4 +-25 +4 +-25 +5 +-25 +5 +-24 +6 +-24 +5 +-24 +7 +-23 +7 +-23 +8 +-22 +8 +-22 +8 +-22 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +10 +-20 +11 +-20 +11 +-20 +10 +-20 +10 +-20 +10 +-19 +-44 +86 +45 +51 +15 +19 +-12 +5 +-24 +0 +-28 +-1 +-29 +0 +-28 +1 +-28 +2 +-27 +3 +-26 +3 +-25 +4 +-25 +5 +-24 +5 +-24 +6 +-23 +7 +-22 +7 +-22 +8 +-22 +8 +-21 +8 +-21 +8 +-21 +8 +-21 +8 +-21 +8 +-21 +8 +-21 +9 +-20 +9 +-20 +9 +-20 +9 +-20 +9 +-20 +10 +-20 +-45 +62 +23 +64 +24 +26 +-7 +24 +-22 +2 +-27 +0 +-29 +0 +-29 +0 +-29 +2 +-28 +2 +-27 +3 +-26 +4 +-25 +6 +-24 +6 +-24 +7 +-23 +7 +-23 +8 +-22 +8 +-22 +8 +-22 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +10 +-20 +10 +-20 +10 +-21 +9 +-21 +9 +-21 +9 +-20 +-44 +86 +45 +51 +15 +19 +-12 +5 +-24 +0 +-28 +0 +-28 +0 +-28 +1 +-27 +2 +-26 +2 +-26 +4 +-25 +5 +-24 +5 +-23 +6 +-23 +6 +-23 +-47 +60 +21 +61 +22 +24 +-9 +22 +-23 +0 +-28 +-1 +-30 +-1 +-29 +0 +-28 +1 +-28 +2 +-27 +2 +-27 +3 +-26 +3 +-26 +5 +-25 +5 +-24 +6 +-22 +-47 +83 +42 +48 +13 +16 +-15 +2 +-26 +-2 +-29 +-2 +-30 +-2 +-30 +-1 +-29 +0 +-28 +1 +-27 +2 +-26 +4 +-25 +5 +-24 +5 +-23 +6 +-23 +7 +-22 +7 +-22 +7 +-22 +8 +-22 +8 +-21 +8 +-21 +9 +-21 +8 +-21 +9 +-20 +9 +-20 +8 +-21 +8 +-21 +8 +-21 +8 +-21 +8 +-21 +8 +-21 +8 +-20 +8 +-20 +9 +-20 +9 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-19 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-19 +10 +-19 +10 +-19 +-44 +63 +24 +63 +24 +26 +-7 +24 +-22 +2 +-27 +0 +-28 +0 +-29 +1 +-28 +2 +-27 +3 +-27 +4 +-26 +5 +-24 +5 +-25 +6 +-24 +7 +-23 +6 +-24 +6 +-24 +6 +-24 +8 +-22 +8 +-22 +8 +-22 +8 +-22 +8 +-22 +8 +-22 +8 +-22 +8 +-21 +8 +-22 +9 +-21 +8 +-22 +9 +-21 +9 +-21 +9 +-20 +-44 +87 +45 +52 +15 +18 +-13 +4 +-24 +-1 +-28 +-1 +-28 +-1 +-29 +0 +-28 +1 +-27 +2 +-25 +3 +-25 +4 +-24 +5 +-24 +6 +-23 +6 +-22 +-47 +60 +21 +62 +22 +23 +-9 +22 +-23 +0 +-29 +-2 +-30 +-1 +-29 +0 +-28 +1 +-28 +2 +-27 +4 +-26 +5 +-25 +5 +-24 +6 +-23 +6 +-24 +7 +-22 +-46 +84 +42 +49 +14 +17 +-14 +3 +-25 +-2 +-30 +-2 +-30 +-2 +-30 +0 +-28 +0 +-28 +1 +-27 +2 +-26 +3 +-25 +4 +-24 +5 +-24 +5 +-23 +-48 +59 +20 +60 +22 +23 +-10 +22 +-24 +0 +-29 +-1 +-30 +-1 +-30 +0 +-29 +1 +-28 +2 +-27 +3 +-26 +4 +-26 +4 +-26 +6 +-24 +7 +-23 +7 +-23 +7 +-23 +7 +-23 +8 +-22 +8 +-22 +9 +-22 +8 +-22 +9 +-21 +8 +-22 +9 +-21 +8 +-22 +10 +-20 +10 +-20 +10 +-20 +10 +-21 +10 +-21 +10 +-21 +8 +-22 +9 +-21 +9 +-21 +10 +-20 +10 +-21 +10 +-20 +10 +-21 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +9 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +9 +-20 +9 +-21 +9 +-21 +10 +-20 +10 +-20 +10 +-20 +10 +-21 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +11 +-20 +11 +-19 +11 +-19 +11 +-19 +11 +-19 +10 +-20 +11 +-20 +11 +-19 +11 +-19 +11 +-19 +10 +-19 +10 +-20 +10 +-19 +-44 +87 +45 +52 +16 +20 +-12 +6 +-23 +1 +-27 +-1 +-28 +0 +-28 +0 +-28 +1 +-27 +2 +-26 +3 +-25 +4 +-24 +5 +-23 +5 +-23 +6 +-23 +-47 +60 +21 +62 +23 +25 +-8 +23 +-23 +1 +-28 +-1 +-29 +-1 +-29 +0 +-28 +1 +-28 +2 +-27 +3 +-25 +4 +-25 +5 +-24 +6 +-24 +6 +-24 +7 +-23 +7 +-23 +7 +-23 +8 +-22 +8 +-22 +8 +-21 +9 +-21 +8 +-21 +8 +-21 +8 +-22 +8 +-21 +8 +-22 +9 +-21 +9 +-21 +8 +-21 +8 +-21 +8 +-20 +-45 +86 +45 +51 +15 +18 +-12 +4 +-24 +0 +-28 +-1 +-28 +0 +-28 +1 +-27 +2 +-26 +3 +-25 +4 +-24 +5 +-24 +5 +-23 +6 +-23 +6 +-22 +-47 +60 +21 +61 +22 +24 +-8 +23 +-23 +0 +-28 +-1 +-30 +-1 +-30 +-1 +-29 +0 +-28 +2 +-27 +3 +-26 +4 +-25 +5 +-25 +5 +-24 +6 +-23 +7 +-23 +7 +-22 +8 +-22 +8 +-22 +8 +-22 +9 +-21 +9 +-21 +9 +-21 +9 +-20 +9 +-21 +9 +-20 +9 +-20 +9 +-20 +10 +-20 +9 +-20 +10 +-20 +9 +-20 +9 +-20 +9 +-21 +9 +-20 +9 +-21 +10 +-20 +9 +-21 +10 +-20 +10 +-20 +9 +-21 +8 +-22 +9 +-21 +8 +-21 +10 +-20 +10 +-21 +10 +-20 +9 +-20 +-44 +86 +45 +51 +16 +19 +-12 +5 +-23 +1 +-27 +0 +-28 +0 +-27 +1 +-27 +2 +-26 +3 +-25 +3 +-25 +4 +-24 +4 +-24 +6 +-23 +6 +-23 +-47 +60 +21 +60 +22 +23 +-9 +21 +-24 +0 +-28 +-1 +-29 +-1 +-30 +-1 +-29 +0 +-28 +1 +-28 +2 +-27 +4 +-25 +5 +-24 +6 +-24 +7 +-23 +8 +-21 +-45 +84 +44 +50 +30 +18 +-13 +4 +-24 +-1 +-28 +-1 +-29 +-1 +-28 +0 +-27 +1 +-27 +2 +-26 +3 +-25 +4 +-25 +4 +-24 +5 +-23 +6 +-23 +6 +-23 +6 +-23 +6 +-22 +7 +-22 +7 +-22 +7 +-22 +7 +-22 +8 +-21 +7 +-22 +7 +-22 +7 +-21 +8 +-20 +8 +-20 +8 +-20 +9 +-20 +9 +-20 +-45 +62 +23 +63 +24 +27 +-6 +25 +-21 +2 +-26 +1 +-28 +1 +-27 +2 +-27 +2 +-26 +3 +-26 +4 +-25 +5 +-24 +6 +-24 +6 +-23 +7 +-22 +7 +-22 +7 +-22 +7 +-22 +7 +-22 +8 +-22 +8 +-22 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +9 +-21 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-19 +-43 +86 +45 +51 +16 +19 +-12 +4 +-24 +0 +-28 +-2 +-30 +-1 +-29 +0 +-28 +0 +-28 +2 +-27 +3 +-26 +4 +-25 +4 +-24 +6 +-23 +6 +-22 +-47 +60 +21 +61 +22 +24 +-8 +23 +-23 +1 +-28 +-1 +-30 +0 +-29 +0 +-29 +0 +-28 +2 +-27 +3 +-26 +4 +-25 +5 +-24 +6 +-24 +7 +-22 +7 +-22 +7 +-22 +7 +-23 +7 +-22 +8 +-22 +8 +-22 +8 +-21 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +10 +-20 +10 +-20 +11 +-20 +10 +-20 +10 +-20 +10 +-19 +-43 +87 +46 +52 +16 +20 +-12 +5 +-24 +0 +-28 +0 +-28 +0 +-28 +1 +-27 +1 +-27 +2 +-26 +3 +-25 +4 +-25 +5 +-24 +5 +-24 +6 +-22 +-47 +59 +20 +60 +22 +23 +-9 +22 +-24 +-1 +-30 +-2 +-30 +-1 +-30 +-1 +-29 +0 +-28 +2 +-27 +3 +-26 +4 +-25 +5 +-24 +6 +-23 +6 +-23 +7 +-22 +7 +-22 +8 +-22 +8 +-21 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +8 +-21 +9 +-21 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +9 +-21 +9 +-21 +9 +-21 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +9 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +9 +-20 +-44 +86 +45 +50 +15 +18 +-13 +4 +-24 +0 +-28 +-1 +-29 +-1 +-29 +0 +-28 +1 +-27 +2 +-26 +4 +-25 +5 +-24 +5 +-23 +6 +-22 +6 +-22 +-47 +60 +21 +61 +22 +25 +-8 +23 +-23 +0 +-28 +-1 +-29 +-1 +-29 +0 +-28 +1 +-28 +2 +-27 +3 +-26 +5 +-24 +5 +-24 +5 +-24 +6 +-24 +6 +-23 +6 +-23 +6 +-23 +7 +-22 +8 +-22 +8 +-22 +8 +-22 +8 +-22 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +9 +-20 +10 +-20 +9 +-20 +9 +-20 +9 +-21 +10 +-20 +10 +-20 +9 +-21 +8 +-21 +9 +-21 +10 +-20 +9 +-21 +9 +-21 +9 +-21 +10 +-20 +10 +-21 +10 +-21 +10 +-20 +10 +-20 +11 +-19 +11 +-19 +11 +-19 +11 +-20 +10 +-19 +11 +-19 +11 +-19 +10 +-19 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +11 +-19 +11 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-19 +-44 +86 +45 +51 +16 +19 +-12 +5 +-24 +0 +-28 +-1 +-28 +0 +-28 +1 +-27 +2 +-26 +2 +-26 +3 +-25 +4 +-24 +5 +-24 +6 +-23 +6 +-22 +-47 +60 +21 +61 +22 +24 +-8 +23 +-23 +0 +-28 +-1 +-29 +0 +-29 +0 +-29 +1 +-28 +2 +-27 +2 +-27 +4 +-26 +4 +-25 +5 +-25 +6 +-24 +6 +-22 +-46 +83 +42 +48 +13 +16 +-15 +2 +-26 +-1 +-29 +-2 +-30 +-1 +-29 +0 +-28 +1 +-27 +2 +-26 +3 +-25 +4 +-24 +5 +-23 +5 +-23 +6 +-22 +-47 +60 +21 +60 +22 +24 +-9 +23 +-23 +0 +-28 +-1 +-30 +-1 +-29 +0 +-28 +1 +-28 +2 +-27 +3 +-26 +4 +-26 +4 +-25 +5 +-24 +5 +-24 +6 +-22 +-47 +84 +42 +49 +29 +17 +-14 +3 +-25 +-1 +-29 +-2 +-30 +-1 +-29 +0 +-28 +1 +-27 +2 +-26 +3 +-25 +4 +-24 +5 +-24 +5 +-23 +6 +-22 +-47 +60 +20 +60 +22 +23 +-9 +22 +-24 +0 +-29 +-1 +-30 +-1 +-30 +-1 +-29 +0 +-29 +1 +-27 +2 +-26 +3 +-26 +4 +-25 +4 +-25 +5 +-24 +6 +-23 +6 +-23 +6 +-23 +7 +-22 +8 +-22 +8 +-21 +8 +-21 +9 +-21 +9 +-21 +9 +-21 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-19 +-44 +86 +45 +51 +16 +19 +-12 +5 +-24 +0 +-28 +0 +-28 +0 +-28 +1 +-27 +1 +-27 +2 +-26 +3 +-25 +4 +-24 +5 +-24 +5 +-23 +6 +-23 +-47 +59 +20 +61 +22 +24 +-8 +23 +-23 +0 +-28 +-1 +-29 +0 +-29 +1 +-28 +1 +-28 +2 +-26 +4 +-26 +5 +-25 +5 +-24 +6 +-24 +7 +-23 +7 +-23 +6 +-23 +7 +-22 +7 +-22 +8 +-22 +8 +-22 +8 +-22 +8 +-22 +7 +-22 +7 +-22 +7 +-23 +8 +-22 +9 +-21 +9 +-21 +8 +-22 +8 +-22 +9 +-20 +-45 +86 +45 +51 +16 +19 +-12 +4 +-24 +1 +-27 +0 +-28 +0 +-28 +1 +-27 +2 +-26 +3 +-25 +4 +-25 +5 +-24 +6 +-23 +6 +-23 +6 +-22 +-47 +59 +20 +61 +22 +24 +-9 +23 +-23 +0 +-28 +-1 +-29 +0 +-29 +0 +-28 +1 +-28 +2 +-27 +3 +-26 +3 +-26 +4 +-24 +5 +-24 +6 +-23 +6 +-22 +-47 +84 +43 +49 +13 +17 +-14 +3 +-25 +-1 +-29 +-2 +-30 +-2 +-29 +-1 +-28 +0 +-28 +1 +-27 +2 +-26 +3 +-25 +3 +-25 +4 +-24 +4 +-24 +-48 +58 +20 +60 +21 +23 +-9 +22 +-24 +0 +-28 +-2 +-30 +-1 +-29 +0 +-28 +0 +-28 +2 +-27 +3 +-26 +4 +-25 +5 +-24 +6 +-24 +6 +-23 +7 +-22 +-46 +84 +43 +50 +30 +18 +-13 +4 +-24 +-1 +-29 +-2 +-29 +-1 +-28 +0 +-28 +0 +-28 +2 +-26 +3 +-25 +4 +-24 +4 +-24 +5 +-24 +5 +-23 +-48 +59 +20 +60 +21 +23 +-9 +22 +-24 +0 +-28 +-1 +-30 +-1 +-30 +0 +-29 +0 +-29 +2 +-27 +3 +-26 +4 +-26 +5 +-25 +6 +-24 +6 +-24 +7 +-23 +7 +-23 +7 +-22 +8 +-22 +9 +-22 +8 +-22 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +9 +-21 +9 +-20 +9 +-21 +9 +-21 +9 +-21 +9 +-20 +-44 +86 +45 +50 +15 +18 +-12 +4 +-24 +-1 +-29 +-2 +-30 +-2 +-29 +0 +-28 +0 +-28 +2 +-26 +4 +-25 +4 +-24 +5 +-24 +6 +-23 +6 +-23 +6 +-22 +6 +-22 +7 +-22 +8 +-22 +9 +-21 +9 +-21 +8 +-21 +8 +-21 +8 +-21 +8 +-21 +8 +-21 +8 +-21 +8 +-21 +9 +-20 +9 +-20 +9 +-20 +-45 +62 +22 +63 +23 +26 +-8 +24 +-22 +2 +-28 +0 +-29 +1 +-28 +1 +-28 +2 +-27 +3 +-26 +4 +-25 +6 +-24 +6 +-23 +7 +-23 +8 +-22 +8 +-22 +8 +-22 +8 +-22 +8 +-22 +8 +-22 +9 +-21 +9 +-21 +10 +-21 +9 +-21 +9 +-21 +8 +-22 +9 +-21 +10 +-21 +9 +-21 +9 +-22 +8 +-22 +9 +-20 +-44 +86 +45 +51 +15 +18 +-13 +4 +-25 +-1 +-29 +-1 +-29 +-1 +-29 +0 +-28 +0 +-28 +2 +-27 +3 +-26 +4 +-24 +5 +-24 +6 +-23 +7 +-22 +-46 +60 +21 +62 +23 +24 +-8 +23 +-23 +1 +-28 +0 +-29 +-1 +-29 +1 +-28 +1 +-28 +2 +-27 +4 +-26 +4 +-25 +5 +-24 +6 +-24 +7 +-24 +7 +-22 +-46 +84 +43 +49 +13 +16 +-14 +2 +-26 +-2 +-30 +-2 +-30 +-2 +-30 +-1 +-29 +0 +-28 +1 +-27 +2 +-26 +4 +-25 +5 +-24 +4 +-24 +5 +-24 +5 +-24 +5 +-23 +6 +-23 +6 +-22 +7 +-22 +8 +-21 +8 +-21 +8 +-21 +8 +-21 +8 +-21 +9 +-21 +8 +-21 +8 +-21 +9 +-21 +9 +-21 +9 +-21 +9 +-20 +9 +-21 +9 +-20 +9 +-20 +10 +-20 +10 +-19 +10 +-19 +10 +-19 +10 +-19 +10 +-20 +9 +-19 +10 +-20 +10 +-19 +10 +-20 +9 +-20 +10 +-20 +-44 +62 +23 +64 +24 +27 +-7 +25 +-21 +2 +-27 +1 +-28 +1 +-28 +2 +-27 +2 +-27 +3 +-26 +4 +-25 +5 +-25 +6 +-24 +6 +-24 +6 +-23 +7 +-23 +7 +-22 +8 +-22 +8 +-22 +8 +-22 +8 +-22 +9 +-22 +9 +-22 +9 +-21 +9 +-22 +9 +-21 +9 +-21 +9 +-21 +10 +-20 +10 +-20 +10 +-20 +10 +-19 +-44 +87 +45 +52 +15 +19 +-12 +5 +-24 +0 +-28 +-1 +-29 +-1 +-29 +0 +-28 +1 +-28 +2 +-26 +3 +-26 +3 +-25 +4 +-25 +4 +-24 +5 +-23 +-48 +59 +20 +60 +22 +24 +-9 +23 +-23 +1 +-29 +0 +-29 +0 +-29 +1 +-28 +2 +-28 +2 +-27 +4 +-26 +4 +-25 +5 +-24 +6 +-24 +6 +-23 +7 +-22 +-46 +84 +42 +49 +13 +17 +-14 +3 +-25 +-1 +-29 +-2 +-30 +-2 +-29 +-1 +-29 +0 +-28 +1 +-27 +2 +-26 +3 +-25 +4 +-24 +5 +-24 +6 +-23 +-48 +59 +20 +60 +21 +23 +-10 +22 +-24 +0 +-28 +-1 +-30 +-1 +-30 +0 +-29 +0 +-28 +2 +-27 +3 +-26 +4 +-25 +5 +-24 +6 +-24 +6 +-24 +6 +-23 +7 +-23 +7 +-23 +7 +-22 +7 +-22 +8 +-22 +8 +-23 +8 +-22 +9 +-22 +8 +-22 +8 +-22 +8 +-22 +9 +-21 +9 +-20 +10 +-20 +10 +-20 +10 +-21 +9 +-21 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +11 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +9 +-21 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +9 +-21 +9 +-21 +10 +-20 +10 +-21 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +10 +-20 +11 +-20 +11 +-20 +11 +-19 +10 +-20 +10 +-20 +10 +-19 +-44 +86 +45 +51 +15 +18 +-13 +4 +-25 +0 +-28 +-1 +-29 +-1 +-30 +0 +-29 +1 +-28 +2 +-26 +3 +-26 +4 +-25 +5 +-24 +5 +-24 +6 +-23 +-47 +60 +21 +61 +22 +24 +-9 +23 +-23 +1 +-28 +0 +-29 +0 +-29 +1 +-28 +2 +-28 +3 +-27 +4 +-26 +5 +-25 +5 +-24 +6 +-24 +7 +-23 +7 +-23 +7 +-23 +7 +-23 +8 +-22 +8 +-22 +8 +-22 +8 +-22 +8 +-22 +9 +-21 +8 +-22 +9 +-22 +9 +-21 +9 +-21 +10 +-21 +9 +-21 +9 +-21 +9 +-20 +-44 +86 +45 +51 +15 +19 +-12 +5 +-24 +0 +-28 +0 +-28 +0 +-28 +1 +-27 +2 +-26 +3 +-26 +3 +-25 +4 +-25 +5 +-24 +5 +-23 +6 +-23 +-47 +59 +20 +60 +21 +23 +-10 +22 +-24 +0 +-29 +-1 +-30 +-1 +-30 +0 +-29 +1 +-28 +2 +-27 +4 +-26 +4 +-25 +5 +-24 +6 +-24 +7 +-23 From 95b25da910a127d9769d6baae686b445f6b233c2 Mon Sep 17 00:00:00 2001 From: mwalker33 Date: Sat, 19 Sep 2020 19:52:04 +1000 Subject: [PATCH 0554/1047] Update cmdlft55xx.c re-work to imporve bit detection. now works with keysy --- client/src/cmdlft55xx.c | 436 +++++++++++++++++++++++----------------- 1 file changed, 247 insertions(+), 189 deletions(-) diff --git a/client/src/cmdlft55xx.c b/client/src/cmdlft55xx.c index 617cb4c92..ef7d3256a 100644 --- a/client/src/cmdlft55xx.c +++ b/client/src/cmdlft55xx.c @@ -401,16 +401,17 @@ static int usage_t55xx_clonehelp(void) { return PM3_SUCCESS; } static int usage_t55xx_sniff(void) { - PrintAndLogEx(NORMAL, "Usage: lf t55xx sniff [w ] [l ] [s ] [1] [h]"); + PrintAndLogEx(NORMAL, "Usage: lf t55xx sniff [w ] [l ] [s ] [t ] [1] [h]"); PrintAndLogEx(NORMAL, "Options:"); PrintAndLogEx(NORMAL, " w <0> <1> - Set samples width for 0 and 1 matching (default auto detect)"); - PrintAndLogEx(NORMAL, " s - Set minimum signal level (default 20)"); + // PrintAndLogEx(NORMAL, " s - Set minimum signal level (default 20)"); + PrintAndLogEx(NORMAL, " t - Set tolerance level (default 5). lower means tighter"); PrintAndLogEx(NORMAL, " 1 - Extract from current sample buffer (default will get new samples)"); PrintAndLogEx(NORMAL, " h - This help"); PrintAndLogEx(NORMAL, ""); PrintAndLogEx(NORMAL, "Examples:"); PrintAndLogEx(NORMAL, _YELLOW_(" lf t55xx sniff")); - PrintAndLogEx(NORMAL, _YELLOW_(" lf t55xx sniff 1")); + PrintAndLogEx(NORMAL, _YELLOW_(" lf t55xx sniff 1 t 2")); PrintAndLogEx(NORMAL, _YELLOW_(" lf t55xx sniff w 7 14 1")); PrintAndLogEx(NORMAL, ""); return PM3_SUCCESS; @@ -3724,27 +3725,67 @@ static int CmdT55xxProtect(const char *Cmd) { return PM3_SUCCESS; } +// if the difference bettwen a and b is less then or eq to d i.e. does a = b +/- d +#define approxEq(a,b,d) ((abs(a-b) <= d) ? true : false) + +static uint8_t t55sniffGetPacket(int *pulseBuffer, char *data, uint8_t width0, uint8_t width1, uint8_t tolerance) +{ + int ii = 0; + bool ok = true; + uint8_t dataLen = 0; + + while (ok && (ii < 73)) { // 70 bits max Fixed bit packet + if (approxEq(width0, pulseBuffer[ii], tolerance)) { + data[dataLen++] = '0'; + ii++; + continue; + } + if (approxEq(width1, pulseBuffer[ii], tolerance)) { + data[dataLen++] = '1'; + ii++; + continue; + } + + ok = false; + } + data[dataLen] = 0x00; + + return dataLen; +} + +static uint8_t t55sniffTrimSamples(int *pulseBuffer, int *pulseIdx, uint8_t len) +{ + for (uint8_t ii = 0; ii < (80 - len); ii++) + pulseBuffer[ii] = pulseBuffer[ii + len]; + + *pulseIdx = *pulseIdx - len; + + return PM3_SUCCESS; +} + static int CmdT55xxSniff(const char *Cmd) { uint8_t cmdp = 0; bool sampleData = true; uint8_t width0 = 0; uint8_t width1 = 0; - uint8_t minLevel = 20; + // uint8_t minLevel = 20; int pulseSamples = 0; - bool eop; + uint8_t tolerance = 5; uint8_t page; uint32_t usedPassword; uint32_t blockData; uint8_t blockAddr; - char data[100]; // Max should be 80. - uint16_t dataLen = 0; size_t idx = 0; - size_t start; - int minWidth; - int maxWidth; + int minWidth=1000; + int maxWidth=0; char modeText [100]; char pwdText [100]; + char dataText [100]; bool haveData = false; + int pulseBuffer[80] = { 0 }; // max should be 73 +/- - Holds Pulse widths + int pulseIdx = 0; + char data[80]; // linked to pulseBuffer. - Holds 0/1 from pulse widths + uint16_t dataLen = 0; /* Notes: @@ -3770,8 +3811,6 @@ static int CmdT55xxSniff(const char *Cmd) { | 1 | 48 - 64 | 41 - 72 | 21 - 96 | tbc | ---------------------------------------------------- 00 01 10 11 - - */ while (param_getchar(Cmd, cmdp) != 0x00) { switch (tolower(param_getchar(Cmd, cmdp))) { @@ -3785,7 +3824,7 @@ static int CmdT55xxSniff(const char *Cmd) { width0 = param_get8ex(Cmd, cmdp + 1, 0, 10); width1 = param_get8ex(Cmd, cmdp + 2, 0, 10); cmdp += 3; - + if (width0 == 0) PrintAndLogEx (ERR,"need both sample widths! "_RED_("Missing sample width for 0")); if (width1 == 0) PrintAndLogEx (ERR,"need both sample widths! "_RED_("Missing sample width for 1")); if ((width0 == 0) || (width1 == 0)) { @@ -3793,8 +3832,12 @@ static int CmdT55xxSniff(const char *Cmd) { return usage_t55xx_sniff(); } break; - case 's': - minLevel = param_get8ex(Cmd, cmdp + 1, 0, 10); + // case 's': + // minLevel = param_get8ex(Cmd, cmdp + 1, 0, 10); + // cmdp += 2; + // break; + case 't': + tolerance = param_get8ex(Cmd, cmdp + 1, 0, 10); cmdp += 2; break; default: @@ -3810,212 +3853,227 @@ static int CmdT55xxSniff(const char *Cmd) { CmdLFSniff (""); } - idx = 0; - + // Headings PrintAndLogEx(NORMAL, ""); - PrintAndLogEx(INFO,_CYAN_("T55xx write Detection")); - PrintAndLogEx(INFO,"Minimum signal level : "_GREEN_("%d"),minLevel); - PrintAndLogEx(SUCCESS, "Downlink mode | password | Data | blk | page | 0 | 1 | raw"); - PrintAndLogEx(SUCCESS, "-----------------+----------+----------+-----+------+-----+-----+-------------------------------------------------------------------------------"); + PrintAndLogEx(INFO,_CYAN_("T55xx command detection")); +// PrintAndLogEx(INFO,"Minimum signal level : "_GREEN_("%d"),minLevel); + PrintAndLogEx(SUCCESS, "Downlink mode | password | Data | blk | page | 0 | 1 | raw"); + PrintAndLogEx(SUCCESS, "----------------------+----------+----------+-----+------+-----+-----+-------------------------------------------------------------------------------"); + idx = 0; + // loop though sample buffer while (idx < GraphTraceLen) { - start = idx; + minWidth = 1000; maxWidth = 0; + dataLen = 0; + data[0] = 0; + haveData = false; + sprintf(modeText, "Default"); + sprintf(pwdText, " "); + sprintf(dataText, " "); - // Auto detect bit widths - if ((width0 == 0) && (width1 == 0)) { - // Skip till we get to a "non modulated section" - while ((idx < GraphTraceLen) && ((GraphBuffer[idx] < -5) || (GraphBuffer[idx] > 5))) - idx++; + if (pulseSamples == 0) idx++; - while ((idx < GraphTraceLen) && ((GraphBuffer[idx] > (-1 * minLevel)) && (GraphBuffer[idx] < minLevel))) - idx++; + // find high + while ((idx < GraphTraceLen) && (GraphBuffer[idx] < 0)) + idx++; - eop = false; - pulseSamples = 0; + // count high samples + pulseSamples = 0; + while ((idx < GraphTraceLen) && (GraphBuffer[idx] > 0)) { // last bit seems to be high to zero, but can vary in width.. + pulseSamples++; + idx++; + } - // Skip until start of next signal - Should be a positive rise above 0 - while ((idx < GraphTraceLen) && (GraphBuffer[idx] < 10)) idx++; + if (pulseSamples > 0) { + pulseBuffer[pulseIdx++] = pulseSamples; + if (pulseIdx > 79) { // make room for next sample - if not used by now, it wont be. + t55sniffTrimSamples (pulseBuffer,&pulseIdx,1); + } - while ((idx < GraphTraceLen) && !eop) { - - if ((GraphBuffer[idx-1] <= 0) && (GraphBuffer[idx] > 0)) - pulseSamples = 0; - - if ((GraphBuffer[idx-1] > 0) && (GraphBuffer[idx] <= 0)) { - if (pulseSamples > 0) { - - if (pulseSamples < minWidth) - minWidth = pulseSamples; - - if (pulseSamples > maxWidth) - maxWidth = pulseSamples; - - pulseSamples = 0; - } - } - - if ((GraphBuffer[idx-1] > 0) && (GraphBuffer[idx] <= 0) ) { - // End of Packet will have a High to zero drop and stay around 0, so if it drags on or does not keep going down - if (((GraphBuffer[idx+5] + 10) > GraphBuffer[idx]) || (pulseSamples > 50)) { // very high chance of being noise - eop = true; + // Check Samples for valid packets; + // We should find (outside of leading bits) we have a packet of "1" and "0" at same widths. + if (pulseIdx >= 6) {// min size for a read - ignoring 1of4 10 0 + + // We auto find widths + if ((width0 == 0) && (width1 == 0)) { + // We ignore bit 0 for the moment as it may be a ref. pulse, so check last + uint8_t ii = 2; + minWidth = pulseBuffer[1]; + maxWidth = pulseBuffer[1]; + bool done = false; + + while ((!done) && (ii < pulseIdx) && ((maxWidth <= minWidth) || (approxEq(minWidth,maxWidth,tolerance)))) { // min should be 8, 16-32 more normal + if (pulseBuffer[ii]+3 < minWidth) { + minWidth = pulseBuffer[ii]; + done = true; + } + if (pulseBuffer[ii]-1 > maxWidth) { + maxWidth = pulseBuffer[ii]; + done = true; + } + ii++; } } else { - pulseSamples++; + minWidth = width0; + maxWidth = width1; } - idx++; } - maxWidth = minWidth * 1.75;// + ((25 * MinWidth) / 100); - // minWidth = MinWidth;// - ((15 * MinWidth) / 100); - } else { - maxWidth = width1; - minWidth = width0; - } - - // ===================================================== - // go back and find first packet.... - idx = start; - haveData = false; - - // Skip till we get to a "non modulated section" - ie skip if sample is in mid packet - while ((idx < GraphTraceLen) && ((GraphBuffer[idx] < -5) || (GraphBuffer[idx] > 5))) - idx++; - while ((idx < GraphTraceLen) && ((GraphBuffer[idx] > (-1 * minLevel)) && (GraphBuffer[idx] < minLevel))) - idx++; - - dataLen = 0; - eop = false; - pulseSamples = 0; - - // Skip until start of next signal - Should be a positive rise above 0 - while ((idx < GraphTraceLen) && (GraphBuffer[idx] < 10)) idx++; - - while ((idx < GraphTraceLen) && !eop) { - if ((GraphBuffer[idx-1] <= 0) && (GraphBuffer[idx] > 0)) { - pulseSamples = 0; + // out of bounds... min max far enough appart and minWidth is large enough + if (((maxWidth - minWidth) < 6) || (minWidth < 6)) // min 8 +/- + continue; + + // At this point we should have + // - a min of 6 samples + // - the 0 and 1 sample widths + // - min 0 and min seperations (worst case) + // No max checks done (yet) as have seen samples > then specs in use. + + // Check first bit. + + // Long leading 0 + if (!haveData && (approxEq(pulseBuffer[0],136+minWidth,tolerance) && approxEq(pulseBuffer[1],maxWidth,tolerance))) { + printf ("Long Leading 0 - not yet hanled | have 1 Fisrt bit | Min : %-3d - Max : %-3d : diff : %d\n",minWidth,maxWidth, maxWidth-minWidth); + continue; } - // a return to 0 makes end of needed data. it should cross to negataive before rising to next bit - if ((GraphBuffer[idx-1] > 0) && (GraphBuffer[idx] <= 0) ) { - // End of Packet will have a High to zero drop and stay around 0, so if it drags on or does not keep going down - // - if (((GraphBuffer[idx+5] + 10) > GraphBuffer[idx]) || (pulseSamples > 50)) { // very high chance of being noise - eop = true; - } else { // if we have way too many samples, wont be a valid bit. - if (pulseSamples >= maxWidth) //16) // 30 ?? - data[dataLen++] = '1'; - else { - if (pulseSamples >= minWidth) // Since we found Min Width this should be hit - data[dataLen++] = '0'; - else { - eop = true; // Too short, not a bit - Something went wrong, as we found min width + + // Fixed bit - Default + if (!haveData && (approxEq(pulseBuffer[0], maxWidth, tolerance))) { + dataLen = t55sniffGetPacket (pulseBuffer, data, minWidth, maxWidth, tolerance); + + // if ((dataLen == 39) ) + // printf ("Fixed | Data end of 80 samples | offset : %llu - datalen %-2d - data : %s --- - Bit 0 width : %d\n",idx,dataLen,data,pulseBuffer[0]); + + if (data[0] == '0') { // should never get here.. + dataLen = 0; + data[0] = 0; + } else { + + // Default Read + if (dataLen == 6) { + t55sniffTrimSamples (pulseBuffer, &pulseIdx,4); // left 1 or 2 samples seemed to help + + page = data[1] - '0'; + blockAddr = 0; + for (uint8_t i = 3; i < 6; i++) { + blockAddr <<= 1; + if (data[i] == '1') + blockAddr |= 1; } + blockData = 0; + haveData = true; + sprintf(modeText, "Default Read"); + } + + // Password Write + if (dataLen == 70) { + t55sniffTrimSamples (pulseBuffer, &pulseIdx,70); + + page = data[1] - '0'; + usedPassword = 0; + for (uint8_t i = 2; i <= 33; i++) { + usedPassword <<= 1; + if (data[i] == '1') + usedPassword |= 1; + } + // Lock bit 34 + blockData = 0; + for (uint8_t i = 35; i <= 66; i++) { + blockData <<= 1; + if (data[i] == '1') + blockData |= 1; + } + blockAddr = 0; + for (uint8_t i = 67; i <= 69; i++) { + blockAddr <<= 1; + if (data[i] == '1') + blockAddr |= 1; + } + haveData = true; + sprintf(modeText, "Default pwd write"); + sprintf(pwdText, "%08X", usedPassword); + sprintf(dataText, "%08X",blockData ); + } + + // Default Write (or password read ??) + if ((dataLen == 38)) { + t55sniffTrimSamples (pulseBuffer, &pulseIdx,38); + + page = data[1] - '0'; + usedPassword = 0; + blockData = 0; + for (uint8_t i = 3; i <= 34; i++) { + blockData <<= 1; + if (data[i] == '1') + blockData |= 1; + } + blockAddr = 0; + for (uint8_t i = 35; i <= 37; i++) { + blockAddr <<= 1; + if (data[i] == '1') + blockAddr |= 1; + } + haveData = true; + sprintf(modeText, "Default write"); + sprintf(dataText, "%08X",blockData ); } } } - else - pulseSamples++; - if (dataLen > 80) // to long for t55xx packets - eop = true; - idx++; - } - data[dataLen] = 0x00; - // printf ("%d : %s\n",dataLen,data); - - sprintf(modeText, "Default"); - sprintf(pwdText, " "); + // Leading 0 + if (!haveData && (approxEq(pulseBuffer[0],minWidth,tolerance))) { + // leading 0 (should = 0 width) + // 1 of 4 (leads with 00) + dataLen = t55sniffGetPacket (pulseBuffer,data,minWidth,maxWidth,tolerance); + // **** Should check to 0 to be actual 0 as well i.e. 01 .... data .... + if ((data[0] == '0') && (data[1] == '1')) { + if (dataLen == 73) { + t55sniffTrimSamples (pulseBuffer, &pulseIdx, 73); - if (dataLen == 73) { // Potential leading 0 password write. - if ((memcmp (data, "01100", 5) == 0) || (memcmp (data, "01000", 5) == 0)) { // Still looking good Page 1 or 0 - - page = data[2] - '0'; - usedPassword = 0; - for (uint8_t i = 5; i < 32+5; i++) { - usedPassword <<= 1; - if (data[i] == '1') - usedPassword |= 1; + page = data[2] - '0'; + usedPassword = 0; + for (uint8_t i = 5; i <= 36; i++) { + usedPassword <<= 1; + if (data[i] == '1') + usedPassword |= 1; + } + blockData = 0; + for (uint8_t i = 38; i <= 69; i++) { + blockData <<= 1; + if (data[i] == '1') + blockData |= 1; + } + blockAddr = 0; + for (uint8_t i = 70; i <= 72; i++) { + blockAddr <<= 1; + if (data[i] == '1') + blockAddr |= 1; + } + haveData = true; + sprintf(modeText, "Leading 0 pwd write"); + sprintf(pwdText, "%08X", usedPassword); + sprintf(dataText, "%08X",blockData ); + } } - blockData = 0; - for (uint8_t i = 38; i < 38+32; i++) { - blockData <<= 1; - if (data[i] == '1') - blockData |= 1; - } - blockAddr = 0; - for (uint8_t i = 70; i < 70+3; i++) { - blockAddr <<= 1; - if (data[i] == '1') - blockAddr |= 1; - } - haveData = true; - sprintf(modeText, "leading 0"); - sprintf(pwdText,"%08X", usedPassword); - } - } - - if (dataLen == 70) { // Potential default password write. - - if ((memcmp (data, "10", 2) == 0) || (memcmp (data, "11", 2) == 0)) { // Still looking good Page 1 or 0 - - page = data[1] - '0'; - usedPassword = 0; - for (uint8_t i = 2; i < 34; i++) { - usedPassword <<= 1; - if (data[i] == '1') - usedPassword |= 1; - } - blockData = 0; - for (uint8_t i = 35; i < 67; i++) { - blockData <<= 1; - if (data[i] == '1') - blockData |= 1; - } - blockAddr = 0; - for (uint8_t i = 67; i < 70; i++) { - blockAddr <<= 1; - if (data[i] == '1') - blockAddr |= 1; - } - haveData = true; - sprintf(pwdText, "%08X", usedPassword); } } - - if (dataLen == 38) { // Potential defaukt write (no password). - - if ((memcmp (data, "10", 2) == 0) || (memcmp (data, "11", 2) == 0)) { // Still looking good Page 1 or 0 - - page = data[1] - '0'; - blockData = 0; - for (uint8_t i = 3; i < 35; i++) { - blockData <<= 1; - if (data[i] == '1') - blockData |= 1; - } - blockAddr = 0; - for (uint8_t i = 35; i < 38; i++) { - blockAddr <<= 1; - if (data[i] == '1') - blockAddr |= 1; - } - haveData = true; - } - } - - if ((haveData) && (minWidth > 1) && (maxWidth > minWidth)){ + // Print results + if (haveData) { //&& (minWidth > 1) && (maxWidth > minWidth)){ if (blockAddr == 7) - PrintAndLogEx (SUCCESS, "%-15s | "_GREEN_("%s")" | "_YELLOW_("%08X")" | "_YELLOW_("%d")" | "_GREEN_("%d")" | %3d | %3d | %s", modeText, pwdText, blockData, blockAddr, page, minWidth, maxWidth, data); + PrintAndLogEx (SUCCESS, "%-20s | "_GREEN_("%8s")" | "_YELLOW_("%8s")" | "_YELLOW_("%d")" | "_GREEN_("%d")" | %3d | %3d | %s", modeText, pwdText, dataText, blockAddr, page, minWidth, maxWidth, data); else - PrintAndLogEx (SUCCESS, "%-15s | "_GREEN_("%s")" | "_GREEN_("%08X")" | "_GREEN_("%d")" | "_GREEN_("%d")" | %3d | %3d | %s", modeText, pwdText, blockData, blockAddr, page, minWidth, maxWidth, data); + PrintAndLogEx (SUCCESS, "%-20s | "_GREEN_("%8s")" | "_GREEN_("%8s")" | "_GREEN_("%d")" | "_GREEN_("%d")" | %3d | %3d | %s", modeText, pwdText, dataText, blockAddr, page, minWidth, maxWidth, data); } } - PrintAndLogEx (SUCCESS, "------------------------------------------------------------------------------------------------------------------------------------------------"); - PrintAndLogEx (NORMAL, ""); + // footer + PrintAndLogEx (SUCCESS, "-----------------------------------------------------------------------------------------------------------------------------------------------------"); + PrintAndLogEx (NORMAL, ""); + return PM3_SUCCESS; } From 4804069f0528a8820be54794e2c8df93711b39cb Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sat, 19 Sep 2020 15:04:57 +0200 Subject: [PATCH 0555/1047] fixes warnings --- client/src/cmdlft55xx.c | 90 +++++++++++++++++++---------------------- 1 file changed, 41 insertions(+), 49 deletions(-) diff --git a/client/src/cmdlft55xx.c b/client/src/cmdlft55xx.c index ef7d3256a..92c78dfa6 100644 --- a/client/src/cmdlft55xx.c +++ b/client/src/cmdlft55xx.c @@ -3728,21 +3728,20 @@ static int CmdT55xxProtect(const char *Cmd) { // if the difference bettwen a and b is less then or eq to d i.e. does a = b +/- d #define approxEq(a,b,d) ((abs(a-b) <= d) ? true : false) -static uint8_t t55sniffGetPacket(int *pulseBuffer, char *data, uint8_t width0, uint8_t width1, uint8_t tolerance) -{ - int ii = 0; +static uint8_t t55sniffGetPacket(int *pulseBuffer, char *data, uint8_t width0, uint8_t width1, uint8_t tolerance) { + int i = 0; bool ok = true; uint8_t dataLen = 0; - while (ok && (ii < 73)) { // 70 bits max Fixed bit packet - if (approxEq(width0, pulseBuffer[ii], tolerance)) { + while (ok && (i < 73)) { // 70 bits max Fixed bit packet + if (approxEq(width0, pulseBuffer[i], tolerance)) { data[dataLen++] = '0'; - ii++; + i++; continue; } - if (approxEq(width1, pulseBuffer[ii], tolerance)) { + if (approxEq(width1, pulseBuffer[i], tolerance)) { data[dataLen++] = '1'; - ii++; + i++; continue; } @@ -3753,39 +3752,35 @@ static uint8_t t55sniffGetPacket(int *pulseBuffer, char *data, uint8_t width0, u return dataLen; } -static uint8_t t55sniffTrimSamples(int *pulseBuffer, int *pulseIdx, uint8_t len) -{ - for (uint8_t ii = 0; ii < (80 - len); ii++) +static uint8_t t55sniffTrimSamples(int *pulseBuffer, int *pulseIdx, uint8_t len) { + for (uint8_t ii = 0; ii < (80 - len); ii++) { pulseBuffer[ii] = pulseBuffer[ii + len]; - - *pulseIdx = *pulseIdx - len; - + } + + *pulseIdx -= len; return PM3_SUCCESS; } static int CmdT55xxSniff(const char *Cmd) { - uint8_t cmdp = 0; + bool sampleData = true; - uint8_t width0 = 0; - uint8_t width1 = 0; - // uint8_t minLevel = 20; - int pulseSamples = 0; - uint8_t tolerance = 5; - uint8_t page; - uint32_t usedPassword; - uint32_t blockData; - uint8_t blockAddr; + bool haveData = false; + uint8_t cmdp = 0; + uint8_t width0 = 0, width1 = 0; + uint8_t tolerance = 5, page, blockAddr; + uint16_t dataLen = 0; size_t idx = 0; - int minWidth=1000; - int maxWidth=0; + uint32_t usedPassword, blockData; + int pulseSamples = 0; + int pulseIdx = 0; + int minWidth = 1000; + int maxWidth = 0; char modeText [100]; char pwdText [100]; char dataText [100]; - bool haveData = false; int pulseBuffer[80] = { 0 }; // max should be 73 +/- - Holds Pulse widths - int pulseIdx = 0; char data[80]; // linked to pulseBuffer. - Holds 0/1 from pulse widths - uint16_t dataLen = 0; + /* Notes: @@ -3832,38 +3827,32 @@ static int CmdT55xxSniff(const char *Cmd) { return usage_t55xx_sniff(); } break; - // case 's': - // minLevel = param_get8ex(Cmd, cmdp + 1, 0, 10); - // cmdp += 2; - // break; case 't': tolerance = param_get8ex(Cmd, cmdp + 1, 0, 10); cmdp += 2; break; default: - cmdp++; - PrintAndLogEx (ERR,"Invalid options supplied!"); - return usage_t55xx_sniff(); + cmdp++; + PrintAndLogEx (ERR,"Invalid options supplied!"); + return usage_t55xx_sniff(); } } - // setup and sample data from Proxmark (if not directed to existing sample/graphbuffer + // setup and sample data from Proxmark + // if not directed to existing sample/graphbuffer if (sampleData) { - // get samples - CmdLFSniff (""); + CmdLFSniff (""); } // Headings PrintAndLogEx(NORMAL, ""); PrintAndLogEx(INFO,_CYAN_("T55xx command detection")); -// PrintAndLogEx(INFO,"Minimum signal level : "_GREEN_("%d"),minLevel); PrintAndLogEx(SUCCESS, "Downlink mode | password | Data | blk | page | 0 | 1 | raw"); PrintAndLogEx(SUCCESS, "----------------------+----------+----------+-----+------+-----+-----+-------------------------------------------------------------------------------"); idx = 0; // loop though sample buffer - while (idx < GraphTraceLen) - { + while (idx < GraphTraceLen) { minWidth = 1000; maxWidth = 0; @@ -3874,11 +3863,14 @@ static int CmdT55xxSniff(const char *Cmd) { sprintf(pwdText, " "); sprintf(dataText, " "); - if (pulseSamples == 0) idx++; + if (pulseSamples == 0) { + idx++; + } // find high - while ((idx < GraphTraceLen) && (GraphBuffer[idx] < 0)) + while ((idx < GraphTraceLen) && (GraphBuffer[idx] < 0)) { idx++; + } // count high samples pulseSamples = 0; @@ -3890,7 +3882,7 @@ static int CmdT55xxSniff(const char *Cmd) { if (pulseSamples > 0) { pulseBuffer[pulseIdx++] = pulseSamples; if (pulseIdx > 79) { // make room for next sample - if not used by now, it wont be. - t55sniffTrimSamples (pulseBuffer,&pulseIdx,1); + t55sniffTrimSamples (pulseBuffer, &pulseIdx, 1); } // Check Samples for valid packets; @@ -3935,13 +3927,13 @@ static int CmdT55xxSniff(const char *Cmd) { // Check first bit. // Long leading 0 - if (!haveData && (approxEq(pulseBuffer[0],136+minWidth,tolerance) && approxEq(pulseBuffer[1],maxWidth,tolerance))) { + if (haveData == false && (approxEq(pulseBuffer[0],136+minWidth,tolerance) && approxEq(pulseBuffer[1],maxWidth,tolerance))) { printf ("Long Leading 0 - not yet hanled | have 1 Fisrt bit | Min : %-3d - Max : %-3d : diff : %d\n",minWidth,maxWidth, maxWidth-minWidth); continue; } // Fixed bit - Default - if (!haveData && (approxEq(pulseBuffer[0], maxWidth, tolerance))) { + if (haveData == false && (approxEq(pulseBuffer[0], maxWidth, tolerance))) { dataLen = t55sniffGetPacket (pulseBuffer, data, minWidth, maxWidth, tolerance); // if ((dataLen == 39) ) @@ -3999,7 +3991,7 @@ static int CmdT55xxSniff(const char *Cmd) { } // Default Write (or password read ??) - if ((dataLen == 38)) { + if (dataLen == 38) { t55sniffTrimSamples (pulseBuffer, &pulseIdx,38); page = data[1] - '0'; @@ -4024,7 +4016,7 @@ static int CmdT55xxSniff(const char *Cmd) { } // Leading 0 - if (!haveData && (approxEq(pulseBuffer[0],minWidth,tolerance))) { + if (haveData == false && (approxEq(pulseBuffer[0], minWidth, tolerance))) { // leading 0 (should = 0 width) // 1 of 4 (leads with 00) dataLen = t55sniffGetPacket (pulseBuffer,data,minWidth,maxWidth,tolerance); From 4d2b2f0c646b19b5eb16570862f96b6be50fbf81 Mon Sep 17 00:00:00 2001 From: tcprst Date: Sat, 19 Sep 2020 11:45:19 -0400 Subject: [PATCH 0556/1047] add ST25TA password change logic --- client/src/cmdhfst.c | 149 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 149 insertions(+) diff --git a/client/src/cmdhfst.c b/client/src/cmdhfst.c index 758447d6a..e95eced6b 100644 --- a/client/src/cmdhfst.c +++ b/client/src/cmdhfst.c @@ -67,6 +67,19 @@ static int usage_hf_st_protect(void) { return PM3_SUCCESS; } +static int usage_hf_st_pwd(void) { + PrintAndLogEx(NORMAL, "\n Change R/W password for NFC Data Exchange Format (NDEF)\n"); + PrintAndLogEx(NORMAL, "Usage: hf st pwd [h] p n "); + PrintAndLogEx(NORMAL, "Options:"); + PrintAndLogEx(NORMAL, " h : This help"); + PrintAndLogEx(NORMAL, " p : 16 byte write password"); + PrintAndLogEx(NORMAL, " : Change (r)ead or (w)rite password"); + PrintAndLogEx(NORMAL, " n : New 16 byte password"); + PrintAndLogEx(NORMAL, "Examples:"); + PrintAndLogEx(NORMAL, _YELLOW_(" hf st pwd p 82E80053D4CA5C0B656D852CC696C8A1 r n 00000000000000000000000000000000")); + return PM3_SUCCESS; +} + // get ST Microelectronics chip model (from UID) static char *get_st_chip_model(uint8_t pc) { static char model[40]; @@ -589,6 +602,141 @@ static int cmd_hf_st_protect(const char *Cmd) { return PM3_SUCCESS; } +static int cmd_hf_st_pwd(const char *Cmd) { + char c = tolower(param_getchar(Cmd, 0)); + if (c == 'h' || c == 0x00) return usage_hf_st_pwd(); + + uint8_t cmdp = 0; + bool errors = false; + int pwdlen = 0; + uint8_t pwd[16] = {0}; + int newpwdlen = 0; + uint8_t newpwd[16] = {0}; + int changePwdlen = 4; + uint8_t changePwd[4] = {0x24, 0x00, 0x00, 0x10}; + + while (param_getchar(Cmd, cmdp) != 0x00 && !errors) { + switch (tolower(param_getchar(Cmd, cmdp))) { + case 'h': + return usage_hf_st_pwd(); + case 'r': + changePwd[2] = 0x01; + cmdp++; + break; + case 'w': + changePwd[2] = 0x02; + cmdp++; + break; + case 'p': + param_gethex_ex(Cmd, cmdp + 1, pwd, &pwdlen); + pwdlen >>= 1; + cmdp += 2; + break; + case 'n': + param_gethex_ex(Cmd, cmdp + 1, newpwd, &newpwdlen); + newpwdlen >>= 1; + cmdp += 2; + break; + default: + PrintAndLogEx(WARNING, "Unknown parameter '%c'", param_getchar(Cmd, cmdp)); + errors = true; + break; + } + } + + //Validations + + if (changePwd[2] == 0x00) { + PrintAndLogEx(WARNING, "Missing password specification: (r)ead or (w)rite"); + errors = true; + } + if (pwdlen != 16) { + PrintAndLogEx(WARNING, "Missing original 16 byte password"); + errors = true; + } + if (newpwdlen != 16) { + PrintAndLogEx(WARNING, "Missing new 16 byte password"); + errors = true; + } + if (errors || cmdp == 0) return usage_hf_st_pwd(); + + bool activate_field = true; + bool keep_field_on = true; + uint8_t response[PM3_CMD_DATA_SIZE]; + int resplen = 0; + + // --------------- Select NDEF Tag application ---------------- + uint8_t aSELECT_AID[80]; + int aSELECT_AID_n = 0; + param_gethex_to_eol("00a4040007d276000085010100", 0, aSELECT_AID, sizeof(aSELECT_AID), &aSELECT_AID_n); + int res = ExchangeAPDU14a(aSELECT_AID, aSELECT_AID_n, activate_field, keep_field_on, response, sizeof(response), &resplen); + if (res) + return res; + + if (resplen < 2) + return PM3_ESOFT; + + uint16_t sw = get_sw(response, resplen); + if (sw != 0x9000) { + PrintAndLogEx(ERR, "Selecting NDEF aid failed (%04x - %s).", sw, GetAPDUCodeDescription(sw >> 8, sw & 0xff)); + return PM3_ESOFT; + } + + activate_field = false; + keep_field_on = true; + + // --------------- Select NDEF file ---------------- + uint8_t aSELECT_FILE_NDEF[30]; + int aSELECT_FILE_NDEF_n = 0; + param_gethex_to_eol("00a4000c020001", 0, aSELECT_FILE_NDEF, sizeof(aSELECT_FILE_NDEF), &aSELECT_FILE_NDEF_n); + res = ExchangeAPDU14a(aSELECT_FILE_NDEF, aSELECT_FILE_NDEF_n, activate_field, keep_field_on, response, sizeof(response), &resplen); + if (res) + return res; + + sw = get_sw(response, resplen); + if (sw != 0x9000) { + PrintAndLogEx(ERR, "Selecting NDEF file failed (%04x - %s).", sw, GetAPDUCodeDescription(sw >> 8, sw & 0xff)); + return PM3_ESOFT; + } + + // --------------- VERIFY ---------------- + uint8_t aVERIFY[30]; + int aVERIFY_n = 0; + // need to provide 16byte password + param_gethex_to_eol("0020000210", 0, aVERIFY, sizeof(aVERIFY), &aVERIFY_n); + memcpy(aVERIFY + aVERIFY_n, pwd, pwdlen); + res = ExchangeAPDU14a(aVERIFY, aVERIFY_n + pwdlen, activate_field, keep_field_on, response, sizeof(response), &resplen); + if (res) + return res; + + sw = get_sw(response, resplen); + if (sw != 0x9000) { + PrintAndLogEx(ERR, "Verify password failed (%04x - %s).", sw, GetAPDUCodeDescription(sw >> 8, sw & 0xff)); + return PM3_ESOFT; + } + + // --------------- Change password ---------------- + + keep_field_on = false; + uint8_t aCHG_PWD[30]; + int aCHG_PWD_n = 0; + param_gethex_to_eol("00", 0, aCHG_PWD, sizeof(aCHG_PWD), &aCHG_PWD_n); + memcpy(aCHG_PWD + aCHG_PWD_n, changePwd, changePwdlen); + memcpy(aCHG_PWD + aCHG_PWD_n + changePwdlen, newpwd, newpwdlen); + res = ExchangeAPDU14a(aCHG_PWD, aCHG_PWD_n + changePwdlen + newpwdlen, activate_field, keep_field_on, response, sizeof(response), &resplen); + if (res) + return res; + + sw = get_sw(response, resplen); + if (sw != 0x9000) { + PrintAndLogEx(ERR, "password change failed (%04x - %s).", sw, GetAPDUCodeDescription(sw >> 8, sw & 0xff)); + return PM3_ESOFT; + } + PrintAndLogEx(SUCCESS, " %s password changed", ((changePwd[2] & 0x01) == 0x01) ? _YELLOW_("read") : _YELLOW_("write")); + + return PM3_SUCCESS; + +} static int cmd_hf_st_list(const char *Cmd) { (void)Cmd; // Cmd is not used so far @@ -602,6 +750,7 @@ static command_t CommandTable[] = { {"list", cmd_hf_st_list, AlwaysAvailable, "List ISO 14443A/7816 history"}, {"ndef", cmd_hf_st_ndef, AlwaysAvailable, "read NDEF file on tag"}, {"protect", cmd_hf_st_protect, IfPm3Iso14443a, "change protection on tag"}, + {"pwd", cmd_hf_st_pwd, IfPm3Iso14443a, "change password on tag"}, {"sim", cmd_hf_st_sim, IfPm3Iso14443a, "Fake ISO 14443A/ST tag"}, {NULL, NULL, NULL, NULL} }; From 69cdf10350dad0bd7e6a10d069fe1809757a9269 Mon Sep 17 00:00:00 2001 From: tcprst Date: Sat, 19 Sep 2020 12:02:04 -0400 Subject: [PATCH 0557/1047] rework ST25TA usage text to follow standards --- client/src/cmdhfst.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/client/src/cmdhfst.c b/client/src/cmdhfst.c index e95eced6b..acb6ee361 100644 --- a/client/src/cmdhfst.c +++ b/client/src/cmdhfst.c @@ -54,12 +54,12 @@ static int usage_hf_st_ndef(void) { static int usage_hf_st_protect(void) { PrintAndLogEx(NORMAL, "\n Change R/W protection for NFC Data Exchange Format (NDEF)\n"); - PrintAndLogEx(NORMAL, "Usage: hf st protect [h] p "); + PrintAndLogEx(NORMAL, "Usage: hf st protect [h] p r|w [0|1]"); PrintAndLogEx(NORMAL, "Options:"); PrintAndLogEx(NORMAL, " h : This help"); PrintAndLogEx(NORMAL, " p : 16 byte write password"); - PrintAndLogEx(NORMAL, " : Change (r)ead or (w)rite protection"); - PrintAndLogEx(NORMAL, " t : Enable / Disable protection"); + PrintAndLogEx(NORMAL, " r|w : Change (r)ead or (w)rite protection"); + PrintAndLogEx(NORMAL, " [0|1] : Enable / Disable protection"); PrintAndLogEx(NORMAL, " 0 = Disable (default)"); PrintAndLogEx(NORMAL, " 1 = Enable"); PrintAndLogEx(NORMAL, "Examples:"); @@ -69,12 +69,12 @@ static int usage_hf_st_protect(void) { static int usage_hf_st_pwd(void) { PrintAndLogEx(NORMAL, "\n Change R/W password for NFC Data Exchange Format (NDEF)\n"); - PrintAndLogEx(NORMAL, "Usage: hf st pwd [h] p n "); + PrintAndLogEx(NORMAL, "Usage: hf st pwd [h] p r|w n "); PrintAndLogEx(NORMAL, "Options:"); - PrintAndLogEx(NORMAL, " h : This help"); - PrintAndLogEx(NORMAL, " p : 16 byte write password"); - PrintAndLogEx(NORMAL, " : Change (r)ead or (w)rite password"); - PrintAndLogEx(NORMAL, " n : New 16 byte password"); + PrintAndLogEx(NORMAL, " h : This help"); + PrintAndLogEx(NORMAL, " p : 16 byte write password"); + PrintAndLogEx(NORMAL, " r|w : Change (r)ead or (w)rite password"); + PrintAndLogEx(NORMAL, " n : New 16 byte password"); PrintAndLogEx(NORMAL, "Examples:"); PrintAndLogEx(NORMAL, _YELLOW_(" hf st pwd p 82E80053D4CA5C0B656D852CC696C8A1 r n 00000000000000000000000000000000")); return PM3_SUCCESS; From 4cd1c512b9a1fd37175b09e86842c581d9755baf Mon Sep 17 00:00:00 2001 From: Ave Date: Sun, 20 Sep 2020 01:00:57 +0300 Subject: [PATCH 0558/1047] hf_aveful: Add Ultralight EV1 support, clean code, dynamically determine block size --- armsrc/Standalone/hf_aveful.c | 118 ++++++++++++++++++++++++++++++++-- 1 file changed, 111 insertions(+), 7 deletions(-) diff --git a/armsrc/Standalone/hf_aveful.c b/armsrc/Standalone/hf_aveful.c index a619459f5..2b8d6ef81 100644 --- a/armsrc/Standalone/hf_aveful.c +++ b/armsrc/Standalone/hf_aveful.c @@ -11,8 +11,15 @@ // Several parts of this code is based on code by Craig Young from HF_YOUNG // This code does not: -// - Account for cards with authentication (MFU EV1 etc) -// - Determine if cards have block count that's not the same as the BLOCKS def +// - Account for cards with non-default keys on authentication (MFU EV1 etc) + +// This code is designed to work with: +// - MIFARE Ultralight +// - MIFARE Ultralight EV1 (default keys) +// - MIFARE Ultralight Nano (untested, but should work) +// - Infineon My-d Move (without password set) +// - Infineon My-d Move Lean +// - Any other Ultralight clones that have no auth and MAX_DEFAULT_BLOCKS (16) blocks #include "standalone.h" // standalone definitions #include "proxmark3_arm.h" @@ -22,10 +29,11 @@ #include "dbprint.h" #include "ticks.h" // SpinDelay +#include "protocols.h" // MIFARE_ULEV1_VERSION, MIFARE_ULEV1_READSIG +#include // memcmp #include "mifareutil.h" #include "iso14443a.h" -#define BLOCKS 16 #define SAK 0x00 #define ATQA0 0x44 #define ATQA1 0x00 @@ -34,6 +42,15 @@ #define STATE_READ 1 #define STATE_EMUL 2 +// Taken from cmdhfmfu.c, increased by 01h to be 1 indexed +#define MAX_UL_BLOCKS 0x10 +#define MAX_UL_NANO_40 0x0B +#define MAX_ULEV1a_BLOCKS 0x14 +#define MAX_ULEV1b_BLOCKS 0x29 +#define MAX_MY_D_MOVE 0x26 +#define MAX_MY_D_MOVE_LEAN 0x10 +#define MAX_DEFAULT_BLOCKS 0x10 + typedef struct { uint8_t uid[10]; uint8_t uidlen; @@ -41,6 +58,56 @@ typedef struct { uint8_t sak; } PACKED card_clone_t; +int get_block_count(iso14a_card_select_t card, uint8_t version[], uint16_t version_len); +uint16_t get_ev1_version(iso14a_card_select_t card, uint8_t *version); +uint16_t get_ev1_signature(iso14a_card_select_t card, uint8_t *signature); + +uint16_t get_ev1_version(iso14a_card_select_t card, uint8_t *version) { + return mifare_sendcmd(MIFARE_ULEV1_VERSION, NULL, 0, version, NULL, NULL); +} + +uint16_t get_ev1_signature(iso14a_card_select_t card, uint8_t *signature) { + uint8_t cmd[4] = {MIFARE_ULEV1_READSIG, 0x00, 0x00, 0x00}; + AddCrc14A(cmd, 2); + + ReaderTransmit(cmd, sizeof(cmd), NULL); + + return ReaderReceive(signature, NULL); +} + +int get_block_count(iso14a_card_select_t card, uint8_t version[], uint16_t version_len) { + // Default to MAX_DEFAULT_BLOCKS blocks + int block_count = MAX_DEFAULT_BLOCKS; + // Most of this code is from cmdhfmfu.c + // Infineon manufacturer ID + if (card.uid[0] == 0x05) { + // Infinition MY-D tests Exam high nibble + uint8_t nib = (card.uid[1] & 0xf0) >> 4; + switch (nib) { + case 3: + block_count = MAX_MY_D_MOVE; + break; // or SLE 66R01P // 38 pages of 4 bytes + case 7: + block_count = MAX_MY_D_MOVE_LEAN; + break; // or SLE 66R01L // 16 pages of 4 bytes + } + } else { + // Moved this from case to if as I only care about non-ultralight ev0. + if (version_len == 0x0A) { + if (memcmp(version, "\x00\x04\x03\x01\x01\x00\x0B", 7) == 0) { block_count = MAX_ULEV1a_BLOCKS; } + else if (memcmp(version, "\x00\x04\x03\x01\x02\x00\x0B", 7) == 0) { block_count = MAX_UL_NANO_40; } + else if (memcmp(version, "\x00\x04\x03\x02\x01\x00\x0B", 7) == 0) { block_count = MAX_ULEV1a_BLOCKS; } + else if (memcmp(version, "\x00\x04\x03\x01\x01\x00\x0E", 7) == 0) { block_count = MAX_ULEV1b_BLOCKS; } + else if (memcmp(version, "\x00\x04\x03\x02\x01\x00\x0E", 7) == 0) { block_count = MAX_ULEV1b_BLOCKS; } + else if (memcmp(version, "\x00\x34\x21\x01\x01\x00\x0E", 7) == 0) { block_count = MAX_ULEV1b_BLOCKS; } // Mikron JSC Russia EV1 41 pages tag + else if (memcmp(version, "\x00\x34\x21\x01\x01\x00\x0E", 7) == 0) { block_count = MAX_UL_BLOCKS; } + else if (version[2] == 0x03) { block_count = MAX_ULEV1a_BLOCKS; } + } + } + + return block_count; +} + void ModInfo(void) { DbpString(" HF Mifare Ultralight read/simulation by Ave Ozkal"); } @@ -88,10 +155,19 @@ void RunMod(void) { iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN); iso14443a_select_card(NULL, NULL, NULL, true, 0, true); bool read_successful = true; + + // Get version and re-select card as UL EV0s like to shut off after a 0x60 + uint8_t version[10] = {0x00}; + uint16_t version_len = 0; + version_len = get_ev1_version(card, version); + iso14443a_select_card(NULL, NULL, NULL, true, 0, true); + + int block_count = get_block_count(card, version, version_len); + Dbprintf("Card was determined as having %d blocks.", block_count); Dbprintf("Contents:"); - for (int i = 0; i < BLOCKS; i++) { - uint8_t dataout[4] = {0x00}; + for (int i = 0; i < block_count; i++) { + uint8_t dataout[16] = {0x00}; if (mifare_ultra_readblock(i, dataout)) { // If there's an error reading, go back to search state read_successful = false; @@ -103,18 +179,46 @@ void RunMod(void) { Dbhexdump(4, dataout, 0); } + // It's not the best way to determine this, + // but with what I'm trying to support It Should Be Okay + bool is_ev1 = (version_len != 0) && (block_count != 16); + if (read_successful) { + uint8_t signature[32] = {0x00}; + if (is_ev1) { + get_ev1_signature(card, signature); + } + // Fill first 14 blocks with 0x00 (see comment above) + for (int i = 0; i < 14; i++) { + uint8_t dataout[4] = {0x00, 0x00, 0x00, 0x00}; + + if (is_ev1 && (i == 0 || i == 1)) { + // On block 0 and 1, set version on EV1 + memcpy(dataout, version + (i * 4), 4); + } else if (i == 2) { + // On block 2, set last byte to the card's block count + dataout[3] = block_count; + } else if (is_ev1 && ((i > 2 && i < 11))) { + // On 3-10 add signature on EV1 + memcpy(dataout, signature + (i * 4), 4); + } else if (is_ev1 && (i > 10)) { + // On 11-14 set tearing to 0xBD on EV1 + dataout[3] = 0xBD; + } + + emlSetMem_xt(dataout, i, 1, 4); + } Dbprintf("Successfully loaded into emulator memory..."); state = STATE_EMUL; } else { Dbprintf("Read failure, going back to search state."); state = STATE_SEARCH; } - } else if (state == 2) { + } else if (state == STATE_EMUL) { uint8_t flags = FLAG_7B_UID_IN_DATA; Dbprintf("Starting simulation, press pm3-button to stop and go back to search state."); - SimulateIso14443aTag(2, flags, card.uid); + SimulateIso14443aTag(7, flags, card.uid); // Go back to search state if user presses pm3-button state = STATE_SEARCH; From 5dc671f834ec91e2f3c280149ded51df1b63d74d Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Thu, 17 Sep 2020 02:43:46 +0200 Subject: [PATCH 0559/1047] Add continuous mode to 'lf fdx read [@]' --- client/src/cmdlf.c | 2 +- client/src/cmdlffdx.c | 62 ++++++++++++++++++++++++++++++++++++++----- client/src/cmdlffdx.h | 2 +- 3 files changed, 57 insertions(+), 9 deletions(-) diff --git a/client/src/cmdlf.c b/client/src/cmdlf.c index d810478a1..b6e63f06e 100644 --- a/client/src/cmdlf.c +++ b/client/src/cmdlf.c @@ -1383,7 +1383,7 @@ int CmdLFfind(const char *Cmd) { if (demodNexWatch() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("NexWatch ID") " found!"); goto out;} if (demodIndala() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("Indala ID") " found!"); goto out;} if (demodEM410x() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("EM410x ID") " found!"); goto out;} - if (demodFDX() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("FDX-B ID") " found!"); goto out;} + if (demodFDX(true) == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("FDX-B ID") " found!"); goto out;} if (demodGuard() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("Guardall G-Prox II ID") " found!"); goto out; } if (demodIdteck() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("Idteck ID") " found!"); goto out;} if (demodJablotron() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("Jablotron ID") " found!"); goto out;} diff --git a/client/src/cmdlffdx.c b/client/src/cmdlffdx.c index af4f316ae..431ec8216 100644 --- a/client/src/cmdlffdx.c +++ b/client/src/cmdlffdx.c @@ -65,6 +65,17 @@ static int usage_lf_fdx_clone(void) { return PM3_SUCCESS; } +static int usage_lf_fdx_read(void) { + PrintAndLogEx(NORMAL, "Read FDX-B animal tag"); + PrintAndLogEx(NORMAL, ""); + PrintAndLogEx(NORMAL, "Usage: lf fdx read [h] [@]"); + PrintAndLogEx(NORMAL, "Options:"); + PrintAndLogEx(NORMAL, " h : This help"); + PrintAndLogEx(NORMAL, " @ : run continuously until a key is pressed (optional)"); + PrintAndLogEx(NORMAL, "Note that the continuous mode is less verbose"); + return PM3_SUCCESS; +} + static int usage_lf_fdx_sim(void) { PrintAndLogEx(NORMAL, "Enables simulation of FDX-B animal tag"); PrintAndLogEx(NORMAL, "Simulation runs until the button is pressed or another USB command is issued."); @@ -206,7 +217,7 @@ static int CmdFDXBdemodBI(const char *Cmd) { //see ASKDemod for what args are accepted //almost the same demod as cmddata.c/CmdFDXBdemodBI -int demodFDX(void) { +int demodFDX(bool verbose) { //Differential Biphase / di-phase (inverted biphase) //get binary from ask wave if (ASKbiphaseDemod("0 32 1 100", false) != PM3_SUCCESS) { @@ -266,6 +277,11 @@ int demodFDX(void) { uint8_t raw[8]; num_to_bytes(rawid, 8, raw); + if (!verbose) { + PROMPT_CLEARLINE; + PrintAndLogEx(SUCCESS, "Animal ID " _GREEN_("%04u-%012"PRIu64), countryCode, NationalCode); + return PM3_SUCCESS; + } PrintAndLogEx(SUCCESS, "FDX-B / ISO 11784/5 Animal"); PrintAndLogEx(SUCCESS, "Animal ID " _GREEN_("%04u-%012"PRIu64), countryCode, NationalCode); PrintAndLogEx(SUCCESS, "National Code " _GREEN_("%012" PRIu64) " (0x%" PRIX64 ")", NationalCode, NationalCode); @@ -307,7 +323,7 @@ int demodFDX(void) { static int CmdFdxDemod(const char *Cmd) { (void)Cmd; // Cmd is not used so far - return demodFDX(); + return demodFDX(true); } static int CmdFdxRead(const char *Cmd) { @@ -318,6 +334,27 @@ static int CmdFdxRead(const char *Cmd) { PrintAndLogEx(ERR, "failed to get current device LF config"); return retval; } + + bool errors = false; + bool continuous = false; + uint8_t cmdp = 0; + while (param_getchar(Cmd, cmdp) != 0x00 && !errors) { + switch (tolower(param_getchar(Cmd, cmdp))) { + case 'h': + return usage_lf_fdx_read(); + case '@': + continuous = true; + cmdp++; + break; + default: + PrintAndLogEx(WARNING, "Unknown parameter '%c'", param_getchar(Cmd, cmdp)); + errors = true; + break; + } + } + + //Validations + if (errors) return usage_lf_fdx_read(); int16_t tmp_div = config.divisor; if (tmp_div != LF_DIVISOR_134) { config.divisor = LF_DIVISOR_134; @@ -328,11 +365,22 @@ static int CmdFdxRead(const char *Cmd) { return retval; } } - retval = lf_read(false, 10000); - if (retval != PM3_SUCCESS) { - PrintAndLogEx(ERR, "failed to get LF read from device"); - return retval; + if (continuous) { + PrintAndLogEx(INFO, "Press " _GREEN_("Enter") " to exit"); } + int ret = PM3_SUCCESS; + do { + retval = lf_read(false, 10000); + if (retval != PM3_SUCCESS) { + PrintAndLogEx(ERR, "failed to get LF read from device"); + return retval; + } + ret = demodFDX(!continuous); // be verbose only if not in continuous mode + if (kbd_enter_pressed()) { + break; + } + PrintAndLogEx(INPLACE, ""); + } while (continuous); if (tmp_div != LF_DIVISOR_134) { config.divisor = tmp_div; retval = lf_config(&config); @@ -341,7 +389,7 @@ static int CmdFdxRead(const char *Cmd) { return retval; } } - return CmdFdxDemod(Cmd); + return ret; } static int CmdFdxClone(const char *Cmd) { diff --git a/client/src/cmdlffdx.h b/client/src/cmdlffdx.h index faf1f2aa7..637a2d5c7 100644 --- a/client/src/cmdlffdx.h +++ b/client/src/cmdlffdx.h @@ -13,7 +13,7 @@ int CmdLFFdx(const char *Cmd); int detectFDXB(uint8_t *dest, size_t *size); -int demodFDX(void); +int demodFDX(bool verbose); int getFDXBits(uint64_t national_code, uint16_t country_code, uint8_t is_animal, uint8_t is_extended, uint32_t extended, uint8_t *bits); #endif From 26d6b555a7410ec30e5262150fbed20cd66e4189 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sun, 20 Sep 2020 00:35:46 +0200 Subject: [PATCH 0560/1047] default keys --- client/dictionaries/mfc_default_keys.dic | 67 ++++++++++++++++++++++++ 1 file changed, 67 insertions(+) diff --git a/client/dictionaries/mfc_default_keys.dic b/client/dictionaries/mfc_default_keys.dic index d19c572e9..d0318737c 100644 --- a/client/dictionaries/mfc_default_keys.dic +++ b/client/dictionaries/mfc_default_keys.dic @@ -1133,3 +1133,70 @@ c67beb41ffbf c67beb41ffbf b84d52971107 52b0d3f6116e +# +# Data from https://pastebin.com/cLSQQ9xN +ca3a24669d45 +4087c6a75a96 +160a91d29a9c +b7bf0c13066e +403f09848b87 +d73438698eea +5f31f6fcd3a0 +a0974382c4c5 +a82045a10949 +# +# Data from https://pastebin.com/2iV8h93h +# +# funnivarium +# forum ankara +# +2602FFFFFFFF +# +# macera adasi +# ankara kentpark +# INACTIVE +# +0A4600FF00FF +DFF293979FA7 +4D6F62692E45 +4118D7EF0902 +# +# petrol ofisi +# positive card +# ode-gec +# +0406080A0C0E +# +# konya elkart +# +988ACDECDFB0 +120D00FFFFFF +# +# bowlingo +# serdivan avym +# +4AE23A562A80 +# +# kart54 +# +2AFFD6F88B97 +A9F3F289B70C +DB6819558A25 +6130DFA578A0 +B16B2E573235 +42EF7BF572AB +274E6101FC5E +# +# crazy park +# kizilay avm +# +00DD300F4F10 +# +# kartsistem B +# +FEE2A3FBC5B6 +# +# toru ent +# taurus avm +# +005078565703 \ No newline at end of file From 2573f21a1e95efe09ad8e53a0528f573b1aa3a67 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sun, 20 Sep 2020 00:50:38 +0200 Subject: [PATCH 0561/1047] text --- traces/README.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/traces/README.txt b/traces/README.txt index 8d6a6733d..a6fd7b280 100644 --- a/traces/README.txt +++ b/traces/README.txt @@ -14,7 +14,7 @@ homeagain.pm3: HomeAgain animal (cat) tag - ID 985121004515220 homeagain1600.pm3: HomeAgain animal (cat) tag - ID 985121004515220 keri.pm3: Keri PSK-3 Key Ring tag (back of tag: 1460 3411) lf_gprox_36_30_14489.pm3: G-Prox-II FC: 30 Card: 3949, Format 36b ASK/BIPHASE -lf_idteck_4944544BAC40E069.pm3: IDTECK raw 4944544BAC40E069 , PSK +lf_idteck_4944544BAC40E069.pm3: IDTECK raw 4944544BAC40E069 , PSK, printed "806 082 43084" Transit999-best.pm3: Transit 999 format (UID 99531670) ATA5577-HIDemu-FC1-C9.pm3: ata5577 in hid prox 26 bit emulation facility code:1 card#:9 AWID-15-259.pm3: AWID FSK RF/50 FC: 15 Card: 259 @@ -41,4 +41,4 @@ are all encoded with identical data (hex 00 01 02 03 04 05 06 07 08 09 0A 0B) for the purpose of recognition and testing of demodulation schemes. They were created by writing Q5 tags appropriately configured. The raw data is in 'modulation-data.dat'. --- -hf_mfu.trace: Tracelog file for a MFU simulation \ No newline at end of file +hf_mfu.trace: Tracelog file for a MFU simulation From fe22eafcf13709e664e08937aac446ecdef8c666 Mon Sep 17 00:00:00 2001 From: Ave Date: Sun, 20 Sep 2020 02:07:21 +0300 Subject: [PATCH 0562/1047] hf_aveful: Pull proper counter and tearing, bugfixes --- armsrc/Standalone/hf_aveful.c | 37 +++++++++++++++++++++++++++-------- 1 file changed, 29 insertions(+), 8 deletions(-) diff --git a/armsrc/Standalone/hf_aveful.c b/armsrc/Standalone/hf_aveful.c index 2b8d6ef81..b59f1a34a 100644 --- a/armsrc/Standalone/hf_aveful.c +++ b/armsrc/Standalone/hf_aveful.c @@ -29,7 +29,7 @@ #include "dbprint.h" #include "ticks.h" // SpinDelay -#include "protocols.h" // MIFARE_ULEV1_VERSION, MIFARE_ULEV1_READSIG +#include "protocols.h" // MIFARE_ULEV1_VERSION, MIFARE_ULEV1_READSIG, MIFARE_ULEV1_READ_CNT, MIFARE_ULEV1_CHECKTEAR #include // memcmp #include "mifareutil.h" #include "iso14443a.h" @@ -61,18 +61,32 @@ typedef struct { int get_block_count(iso14a_card_select_t card, uint8_t version[], uint16_t version_len); uint16_t get_ev1_version(iso14a_card_select_t card, uint8_t *version); uint16_t get_ev1_signature(iso14a_card_select_t card, uint8_t *signature); +uint16_t get_ev1_counter(iso14a_card_select_t card, uint8_t counter, uint8_t *response); +uint16_t get_ev1_tearing(iso14a_card_select_t card, uint8_t counter, uint8_t *response); uint16_t get_ev1_version(iso14a_card_select_t card, uint8_t *version) { return mifare_sendcmd(MIFARE_ULEV1_VERSION, NULL, 0, version, NULL, NULL); } -uint16_t get_ev1_signature(iso14a_card_select_t card, uint8_t *signature) { +uint16_t get_ev1_signature(iso14a_card_select_t card, uint8_t *response) { uint8_t cmd[4] = {MIFARE_ULEV1_READSIG, 0x00, 0x00, 0x00}; AddCrc14A(cmd, 2); - ReaderTransmit(cmd, sizeof(cmd), NULL); + return ReaderReceive(response, NULL); +} - return ReaderReceive(signature, NULL); +uint16_t get_ev1_counter(iso14a_card_select_t card, uint8_t counter, uint8_t *response) { + uint8_t cmd[4] = {MIFARE_ULEV1_READ_CNT, counter, 0x00, 0x00}; + AddCrc14A(cmd, 2); + ReaderTransmit(cmd, sizeof(cmd), NULL); + return ReaderReceive(response, NULL); +} + +uint16_t get_ev1_tearing(iso14a_card_select_t card, uint8_t counter, uint8_t *response) { + uint8_t cmd[4] = {MIFARE_ULEV1_CHECKTEAR, counter, 0x00, 0x00}; + AddCrc14A(cmd, 2); + ReaderTransmit(cmd, sizeof(cmd), NULL); + return ReaderReceive(response, NULL); } int get_block_count(iso14a_card_select_t card, uint8_t version[], uint16_t version_len) { @@ -184,10 +198,11 @@ void RunMod(void) { bool is_ev1 = (version_len != 0) && (block_count != 16); if (read_successful) { - uint8_t signature[32] = {0x00}; + uint8_t signature[34] = {0x00}; if (is_ev1) { get_ev1_signature(card, signature); } + Dbprintf("Preparing emulator memory with:"); // Fill first 14 blocks with 0x00 (see comment above) for (int i = 0; i < 14; i++) { uint8_t dataout[4] = {0x00, 0x00, 0x00, 0x00}; @@ -200,12 +215,18 @@ void RunMod(void) { dataout[3] = block_count; } else if (is_ev1 && ((i > 2 && i < 11))) { // On 3-10 add signature on EV1 - memcpy(dataout, signature + (i * 4), 4); + memcpy(dataout, signature + ((i - 3) * 4), 4); } else if (is_ev1 && (i > 10)) { - // On 11-14 set tearing to 0xBD on EV1 - dataout[3] = 0xBD; + // On 11-14 read and set counter and tearing on EV1 + uint8_t counter[5]; + uint8_t tearing[3]; + get_ev1_counter(card, i - 11, counter); + get_ev1_tearing(card, i - 11, tearing); + memcpy(dataout, counter, 3); + memcpy(dataout + 3, tearing, 1); } + Dbhexdump(4, dataout, 0); emlSetMem_xt(dataout, i, 1, 4); } Dbprintf("Successfully loaded into emulator memory..."); From 1d1bb3fa1fa571f7d9de8f819f237fced689c2f8 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sun, 20 Sep 2020 11:24:48 +0200 Subject: [PATCH 0563/1047] defaults --- client/dictionaries/mfdes_default_keys.dic | 1 + 1 file changed, 1 insertion(+) diff --git a/client/dictionaries/mfdes_default_keys.dic b/client/dictionaries/mfdes_default_keys.dic index dac73fa04..b71a8a8af 100644 --- a/client/dictionaries/mfdes_default_keys.dic +++ b/client/dictionaries/mfdes_default_keys.dic @@ -42,3 +42,4 @@ eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee 100f0e0d0c0b0a090807060504030201 404142434445464748494a4b4c4d4e4f 303132333435363738393a3b3c3d3e3f +9CABF398358405AE2F0E2B3D31C99A8A # Default key From 35e276f8ed5710445679cafba182a459e943ccf9 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Sun, 20 Sep 2020 11:12:38 +0200 Subject: [PATCH 0564/1047] Add options to 'lf sniff' for repeated acquisitions --- CHANGELOG.md | 2 +- armsrc/appmain.c | 9 +++-- armsrc/lfsampling.c | 4 +-- armsrc/lfsampling.h | 2 +- client/src/cmdlf.c | 88 ++++++++++++++++++++++++++++++++++++++++----- client/src/cmdlf.h | 1 + 6 files changed, 91 insertions(+), 15 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1049fd0d0..b07ce95dc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,7 @@ This project uses the changelog in accordance with [keepchangelog](http://keepac ## [unreleased][unreleased] - Add lf t55xx sniff to allow extracting commands and passwords used be cloners. (@mwalker33) - - Add options to `lf read` and `lf cmdread` (@doegox) + - Add options to `lf read`, `lf cmdread`, `lf sniff` for repeated acquisitions (@doegox) - Change options of `lf read` to match `lf cmdread`, this affects historical `d` and `s` options (@doegox) - Add `hf waveshare` to upload picture to Waveshare NFC-Powered e-Paper (@doegox) - Add `hf 14a config` to deal with badly configured cards: invalid ATQA/BCC/SAK (@doegox) diff --git a/armsrc/appmain.c b/armsrc/appmain.c index 184ac4090..6a315999c 100644 --- a/armsrc/appmain.c +++ b/armsrc/appmain.c @@ -786,8 +786,13 @@ static void PacketReceived(PacketCommandNG *packet) { break; } case CMD_LF_SNIFF_RAW_ADC: { - uint32_t bits = SniffLF(); - reply_mix(CMD_ACK, bits, 0, 0, 0, 0); + struct p { + uint32_t samples : 31; + bool verbose : 1; + } PACKED; + struct p *payload = (struct p *)packet->data.asBytes; + uint32_t bits = SniffLF(payload->verbose, payload->samples); + reply_ng(CMD_LF_SNIFF_RAW_ADC, PM3_SUCCESS, (uint8_t *)&bits, sizeof(bits)); break; } case CMD_LF_HID_WATCH: { diff --git a/armsrc/lfsampling.c b/armsrc/lfsampling.c index 91bde7569..2455a851e 100644 --- a/armsrc/lfsampling.c +++ b/armsrc/lfsampling.c @@ -397,9 +397,9 @@ uint32_t SampleLF(bool verbose, uint32_t sample_size) { * Initializes the FPGA for sniffer-mode (field off), and acquires the samples. * @return number of bits sampled **/ -uint32_t SniffLF(void) { +uint32_t SniffLF(bool verbose, uint32_t sample_size) { BigBuf_Clear_ext(false); - return ReadLF(false, true, 0); + return ReadLF(false, verbose, sample_size); } /** diff --git a/armsrc/lfsampling.h b/armsrc/lfsampling.h index f60324d70..d10f8279e 100644 --- a/armsrc/lfsampling.h +++ b/armsrc/lfsampling.h @@ -40,7 +40,7 @@ uint32_t SampleLF(bool verbose, uint32_t sample_size); * Initializes the FPGA for sniff-mode (field off), and acquires the samples. * @return number of bits sampled **/ -uint32_t SniffLF(void); +uint32_t SniffLF(bool verbose, uint32_t sample_size); uint32_t DoAcquisition(uint8_t decimation, uint8_t bits_per_sample, bool avg, int16_t trigger_threshold, bool verbose, uint32_t sample_size, uint32_t cancel_after, int32_t samples_to_skip); diff --git a/client/src/cmdlf.c b/client/src/cmdlf.c index b6e63f06e..67042259c 100644 --- a/client/src/cmdlf.c +++ b/client/src/cmdlf.c @@ -124,12 +124,19 @@ static int usage_lf_sim(void) { } static int usage_lf_sniff(void) { PrintAndLogEx(NORMAL, "Sniff low frequence signal."); - PrintAndLogEx(NORMAL, "Usage: lf sniff [h]"); + PrintAndLogEx(NORMAL, "Usage: lf sniff [h] [q] [s #samples] [@]"); PrintAndLogEx(NORMAL, "Options:"); PrintAndLogEx(NORMAL, " h This help"); + PrintAndLogEx(NORMAL, " q silent (optional)"); + PrintAndLogEx(NORMAL, " s #samples number of samples to collect (optional)"); + PrintAndLogEx(NORMAL, " @ run continuously until a key is pressed (optional)"); + PrintAndLogEx(NORMAL, "Examples:"); + PrintAndLogEx(NORMAL, " lf sniff"); + PrintAndLogEx(NORMAL, "- oscilloscope style:"); + PrintAndLogEx(NORMAL, " data plot"); + PrintAndLogEx(NORMAL, " lf sniff q s 3000 @"); PrintAndLogEx(NORMAL, "Extras:"); PrintAndLogEx(NORMAL, " use " _YELLOW_("'lf config'")" to set parameters."); - PrintAndLogEx(NORMAL, " use " _YELLOW_("'data samples'")" command to download from device"); PrintAndLogEx(NORMAL, " use " _YELLOW_("'data plot'")" to look at it"); return PM3_SUCCESS; } @@ -741,18 +748,81 @@ int CmdLFRead(const char *Cmd) { return ret; } +int lf_sniff(bool verbose, uint32_t samples) { + if (!session.pm3_present) return PM3_ENOTTY; + + struct p { + uint32_t samples : 31; + bool verbose : 1; + } PACKED; + + struct p payload; + payload.verbose = verbose; + payload.samples = samples; + + clearCommandBuffer(); + SendCommandNG(CMD_LF_SNIFF_RAW_ADC, (uint8_t *)&payload, sizeof(payload)); + PacketResponseNG resp; + if (g_lf_threshold_set) { + WaitForResponse(CMD_LF_SNIFF_RAW_ADC, &resp); + } else { + if (!WaitForResponseTimeout(CMD_LF_SNIFF_RAW_ADC, &resp, 2500)) { + PrintAndLogEx(WARNING, "(lf_read) command execution time out"); + return PM3_ETIMEOUT; + } + } + + // response is number of bits read + uint32_t size = (resp.data.asDwords[0] / 8); + getSamples(size, verbose); + return PM3_SUCCESS; +} + int CmdLFSniff(const char *Cmd) { if (!session.pm3_present) return PM3_ENOTTY; - uint8_t cmdp = tolower(param_getchar(Cmd, 0)); - if (cmdp == 'h') return usage_lf_sniff(); + bool errors = false; + bool verbose = true; + bool continuous = false; + uint32_t samples = 0; + uint8_t cmdp = 0; + while (param_getchar(Cmd, cmdp) != 0x00 && !errors) { + switch (tolower(param_getchar(Cmd, cmdp))) { + case 'h': + return usage_lf_sniff(); + case 's': + samples = param_get32ex(Cmd, cmdp + 1, 0, 10); + cmdp += 2; + break; + case 'q': + verbose = false; + cmdp++; + break; + case '@': + continuous = true; + cmdp++; + break; + default: + PrintAndLogEx(WARNING, "Unknown parameter '%c'", param_getchar(Cmd, cmdp)); + errors = true; + break; + } + } - clearCommandBuffer(); - SendCommandNG(CMD_LF_SNIFF_RAW_ADC, NULL, 0); - WaitForResponse(CMD_ACK, NULL); - getSamples(0, true); - return PM3_SUCCESS; + //Validations + if (errors) return usage_lf_sniff(); + if (continuous) { + PrintAndLogEx(INFO, "Press " _GREEN_("Enter") " to exit"); + } + int ret = PM3_SUCCESS; + do { + ret = lf_sniff(verbose, samples); + if (kbd_enter_pressed()) { + break; + } + } while (continuous); + return ret; } static void ChkBitstream(void) { diff --git a/client/src/cmdlf.h b/client/src/cmdlf.h index bb0628609..bcc695764 100644 --- a/client/src/cmdlf.h +++ b/client/src/cmdlf.h @@ -33,6 +33,7 @@ int CmdVchDemod(const char *Cmd); int CmdLFfind(const char *Cmd); int lf_read(bool verbose, uint32_t samples); +int lf_sniff(bool verbose, uint32_t samples); int lf_config(sample_config *config); int lf_getconfig(sample_config *config); From 1e19a7216a9ed74ffe0f417ba39179d788a8d139 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Sun, 20 Sep 2020 12:59:30 +0200 Subject: [PATCH 0565/1047] Avoid first spurious samples in LF sniff modes, prevents false triggering --- armsrc/lfsampling.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/armsrc/lfsampling.c b/armsrc/lfsampling.c index 2455a851e..7b38bd346 100644 --- a/armsrc/lfsampling.c +++ b/armsrc/lfsampling.c @@ -243,8 +243,11 @@ void LFSetupFPGAForADC(int divisor, bool reader_field) { StartTicks(); // 50ms for the resonant antenna to settle. - if (reader_field) + if (reader_field) { WaitMS(50); + } else { + WaitMS(1); + } } /** From fe6cb9c3e73ad6dfd9b56ae6f9e5252cd08c3156 Mon Sep 17 00:00:00 2001 From: Costantino Beretta Date: Sun, 20 Sep 2020 14:25:28 +0200 Subject: [PATCH 0566/1047] 'hf 14b dump' without params now calls help and corrected a typo --- client/src/cmdhf14b.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/client/src/cmdhf14b.c b/client/src/cmdhf14b.c index b0ce49f50..811fcb195 100644 --- a/client/src/cmdhf14b.c +++ b/client/src/cmdhf14b.c @@ -105,10 +105,10 @@ static int usage_hf_14b_write_srx(void) { static int usage_hf_14b_dump(void) { PrintAndLogEx(NORMAL, "This command dumps the contents of a ISO-14443-B tag and save it to file\n" "\n" - "Usage: hf 14b dump [h] [card memory] \n" + "Usage: hf 14b dump [h] [card memory] \n" "Options:\n" "\th this help\n" - "\t[card memory] 1 = SRIX4K (default), 2 = SRI512" + "\t[card memory] 1 = SRIX4K (default), 2 = SRI512\n" "\tf filename, if no UID will be used as filename\n" "\n" "Example:\n" @@ -835,6 +835,8 @@ static int CmdHF14BDump(const char *Cmd) { uint8_t blocks = 0; iso14b_card_select_t card; + if (strlen(Cmd) < 1) return usage_hf_14b_dump(); + while (param_getchar(Cmd, cmdp) != 0x00 && !errors) { switch (tolower(param_getchar(Cmd, cmdp))) { case 'h': From 2aa197d81606873ca0952c2ea7ce3d343b68cf2a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marlin=20S=C3=B6=C3=B6se?= <30473690+msoose@users.noreply.github.com> Date: Thu, 13 Aug 2020 10:17:04 -0600 Subject: [PATCH 0567/1047] Update and rename 14araw.lua to hf_14a_raw.lua --- client/luascripts/{14araw.lua => hf_14a_raw.lua} | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) rename client/luascripts/{14araw.lua => hf_14a_raw.lua} (96%) diff --git a/client/luascripts/14araw.lua b/client/luascripts/hf_14a_raw.lua similarity index 96% rename from client/luascripts/14araw.lua rename to client/luascripts/hf_14a_raw.lua index e6a180bfb..3b747aa17 100644 --- a/client/luascripts/14araw.lua +++ b/client/luascripts/hf_14a_raw.lua @@ -11,19 +11,19 @@ This is a script to allow raw 1444a commands to be sent and received. ]] example = [[ # 1. Connect and don't disconnect - script run 14araw -p + script run hf_14a_raw -p # 2. Send mf auth, read response (nonce) - script run 14araw -o -x 6000F57b -p + script run hf_14a_raw -o -x 6000F57b -p # 3. disconnect - script run 14araw -o + script run hf_14a_raw -o # All three steps in one go: - script run 14araw -x 6000F57b + script run hf_14a_raw -x 6000F57b ]] usage = [[ -script run 14araw -x 6000F57b +script run hf_14a_raw -x 6000F57b ]] arguments = [[ -o do not connect - use this only if you previously used -p to stay connected From ada687e043da13d3ff3b5b490349707393992d5d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marlin=20S=C3=B6=C3=B6se?= <30473690+msoose@users.noreply.github.com> Date: Thu, 13 Aug 2020 10:20:25 -0600 Subject: [PATCH 0568/1047] Update and rename brutesim.lua to hf_lf_multi_bruteforce.lua --- .../luascripts/{brutesim.lua => hf_lf_multi_bruteforce.lua} | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename client/luascripts/{brutesim.lua => hf_lf_multi_bruteforce.lua} (98%) diff --git a/client/luascripts/brutesim.lua b/client/luascripts/hf_lf_multi_bruteforce.lua similarity index 98% rename from client/luascripts/brutesim.lua rename to client/luascripts/hf_lf_multi_bruteforce.lua index 4d8ba7d57..733c3feab 100644 --- a/client/luascripts/brutesim.lua +++ b/client/luascripts/hf_lf_multi_bruteforce.lua @@ -32,10 +32,10 @@ It uses both LF and HF simulations. example = [[ -- (the above example would bruteforce pyramid tags, starting at 10:1000, ending at 10:991, and waiting 1 second between each card) - script run brutesim -r pyramid -f 10 -b 1000 -c 10 -t 1 -d down + script run hf_lf_multi_bruteforce -r pyramid -f 10 -b 1000 -c 10 -t 1 -d down ]] usage = [[ -script run brutesim -r rfid_tag -f facility_code -b base_card_number -c count -t timeout -d direction +script run hf_lf_multi_bruteforce -r rfid_tag -f facility_code -b base_card_number -c count -t timeout -d direction ]] arguments = [[ -h this help From e57c55dc01948551f2c4901d69250bbfd8fe8585 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marlin=20S=C3=B6=C3=B6se?= <30473690+msoose@users.noreply.github.com> Date: Thu, 13 Aug 2020 10:21:58 -0600 Subject: [PATCH 0569/1047] Update and rename calc_di.lua to hf_mf_uidkeycalc.lua --- client/luascripts/{calc_di.lua => hf_mf_uidkeycalc.lua} | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) rename client/luascripts/{calc_di.lua => hf_mf_uidkeycalc.lua} (97%) diff --git a/client/luascripts/calc_di.lua b/client/luascripts/hf_mf_uidkeycalc.lua similarity index 97% rename from client/luascripts/calc_di.lua rename to client/luascripts/hf_mf_uidkeycalc.lua index 737d993af..88330ae85 100644 --- a/client/luascripts/calc_di.lua +++ b/client/luascripts/hf_mf_uidkeycalc.lua @@ -13,13 +13,13 @@ Algo not found by me. ]] example = [[ -- if called without, it reads tag uid - script run calc_di + script run hf_mf_uidkeycalc -- - script run calc_di -u 11223344556677 + script run hf_mf_uidkeycalc -u 11223344556677 ]] usage = [[ -script run calc_di -h -u +script run hf_mf_uidkeycalc -h -u ]] arguments = [[ -h : this help From a4249d027cbb689bfff5817c02bd32d316d70e7f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marlin=20S=C3=B6=C3=B6se?= <30473690+msoose@users.noreply.github.com> Date: Thu, 13 Aug 2020 10:23:57 -0600 Subject: [PATCH 0570/1047] Update and rename calc_ev1_it.lua to hf_mfu_uidkeycalc.lua --- .../luascripts/{calc_ev1_it.lua => hf_mfu_uidkeycalc.lua} | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) rename client/luascripts/{calc_ev1_it.lua => hf_mfu_uidkeycalc.lua} (97%) diff --git a/client/luascripts/calc_ev1_it.lua b/client/luascripts/hf_mfu_uidkeycalc.lua similarity index 97% rename from client/luascripts/calc_ev1_it.lua rename to client/luascripts/hf_mfu_uidkeycalc.lua index 2e333d147..f0e0b6b1f 100644 --- a/client/luascripts/calc_ev1_it.lua +++ b/client/luascripts/hf_mfu_uidkeycalc.lua @@ -13,13 +13,13 @@ Algo not found by me. ]] example =[[ -- if called without, it reads tag uid - script run calc_ev1_it + script run hf_mfu_uidkeycalc -- - script run calc_ev1_it -u 11223344556677 + script run hf_mfu_uidkeycalc -u 11223344556677 ]] usage = [[ -script run calc_ev1_it -h -u " +script run hf_mfu_uidkeycalc -h -u " ]] arguments = [[ -h : this help From 97ac8dbb169891b949a64a36007c91fde4467d98 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marlin=20S=C3=B6=C3=B6se?= <30473690+msoose@users.noreply.github.com> Date: Thu, 13 Aug 2020 10:24:52 -0600 Subject: [PATCH 0571/1047] Update and rename calc_mizip.lua to hf_mf_uidkeycalc-mizip.lua --- .../{calc_mizip.lua => hf_mf_uidkeycalc-mizip.lua} | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) rename client/luascripts/{calc_mizip.lua => hf_mf_uidkeycalc-mizip.lua} (97%) diff --git a/client/luascripts/calc_mizip.lua b/client/luascripts/hf_mf_uidkeycalc-mizip.lua similarity index 97% rename from client/luascripts/calc_mizip.lua rename to client/luascripts/hf_mf_uidkeycalc-mizip.lua index 79fbae75f..902aeeda8 100644 --- a/client/luascripts/calc_mizip.lua +++ b/client/luascripts/hf_mf_uidkeycalc-mizip.lua @@ -13,13 +13,13 @@ Algo not found by me. ]] example = [[ -- if called without, it reads tag uid - script run calc_mizip + script run hf_mf_uidkeycalc-mizip -- - script run calc_mizip -u 11223344 + script run hf_mf_uidkeycalc-mizip -u 11223344 ]] usage = [[ -script run calc_mizip -h -u +script run hf_mf_uidkeycalc-mizip -h -u ]] arguments = [[ -h : this help From e2e34b7e907d0f5cac922bd1ca527e7a41f7940c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marlin=20S=C3=B6=C3=B6se?= <30473690+msoose@users.noreply.github.com> Date: Thu, 13 Aug 2020 10:25:24 -0600 Subject: [PATCH 0572/1047] Update and rename hf_mfu_uidkeycalc.lua to hf_mfu_uidkeycalc-italy.lua --- .../{hf_mfu_uidkeycalc.lua => hf_mfu_uidkeycalc-italy.lua} | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) rename client/luascripts/{hf_mfu_uidkeycalc.lua => hf_mfu_uidkeycalc-italy.lua} (96%) diff --git a/client/luascripts/hf_mfu_uidkeycalc.lua b/client/luascripts/hf_mfu_uidkeycalc-italy.lua similarity index 96% rename from client/luascripts/hf_mfu_uidkeycalc.lua rename to client/luascripts/hf_mfu_uidkeycalc-italy.lua index f0e0b6b1f..4777a186d 100644 --- a/client/luascripts/hf_mfu_uidkeycalc.lua +++ b/client/luascripts/hf_mfu_uidkeycalc-italy.lua @@ -13,13 +13,13 @@ Algo not found by me. ]] example =[[ -- if called without, it reads tag uid - script run hf_mfu_uidkeycalc + script run hf_mfu_uidkeycalc-italy -- - script run hf_mfu_uidkeycalc -u 11223344556677 + script run hf_mfu_uidkeycalc-italy -u 11223344556677 ]] usage = [[ -script run hf_mfu_uidkeycalc -h -u " +script run hf_mfu_uidkeycalc-italy -h -u " ]] arguments = [[ -h : this help From 313f17fe3a95e1f9d21f948919b748e394398f45 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marlin=20S=C3=B6=C3=B6se?= <30473690+msoose@users.noreply.github.com> Date: Thu, 13 Aug 2020 10:26:36 -0600 Subject: [PATCH 0573/1047] Update and rename calypso.lua to hf_14b_calypso.lua --- client/luascripts/{calypso.lua => hf_14b_calypso.lua} | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename client/luascripts/{calypso.lua => hf_14b_calypso.lua} (98%) diff --git a/client/luascripts/calypso.lua b/client/luascripts/hf_14b_calypso.lua similarity index 98% rename from client/luascripts/calypso.lua rename to client/luascripts/hf_14b_calypso.lua index de72f41c6..0439ac800 100644 --- a/client/luascripts/calypso.lua +++ b/client/luascripts/hf_14b_calypso.lua @@ -12,11 +12,11 @@ desc = [[ This is a script to communicate with a CALYSPO / 14443b tag using the '14b raw' commands ]] example = [[ - script run calypso -b 11223344 + script run hf_14b_calypso -b 11223344 ]] usage = [[ -script run calypso -h -b +script run hf_14b_calypso -h -b ]] arguments = [[ h this helptext From e1f26fbbe28f4a5d348e039f56c47b95ca270bae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marlin=20S=C3=B6=C3=B6se?= <30473690+msoose@users.noreply.github.com> Date: Thu, 13 Aug 2020 10:28:22 -0600 Subject: [PATCH 0574/1047] Update and rename didump.lua to hf_mfm_dumpdecrypt.lua --- .../luascripts/{didump.lua => hf_mfm_dumpdecrypt.lua} | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) rename client/luascripts/{didump.lua => hf_mfm_dumpdecrypt.lua} (98%) diff --git a/client/luascripts/didump.lua b/client/luascripts/hf_mfm_dumpdecrypt.lua similarity index 98% rename from client/luascripts/didump.lua rename to client/luascripts/hf_mfm_dumpdecrypt.lua index 39207151e..4801aeb96 100644 --- a/client/luascripts/didump.lua +++ b/client/luascripts/hf_mfm_dumpdecrypt.lua @@ -16,19 +16,19 @@ This is a script to dump and decrypt the data of a specific type of Mifare Mini The dump is decrypted. If a raw dump is wanted, use the -r parameter ]] example = [[ - script run didump + script run hf_mfm_dumpdecrypt -- selftest - script run didump -t + script run hf_mfm_dumpdecrypt -t -- Generate raw dump, into json. - script run didump -r + script run hf_mfm_dumpdecrypt -r -- load file - script run didump -i dumpdata.json + script run hf_mfm_dumpdecrypt -i dumpdata.json ]] usage = [[ -script run didump -h -t -r -d -e -v -i dumpdata.json +script run hf_mfm_dumpdecrypt -h -t -r -d -e -v -i dumpdata.json ]] arguments = [[ h this helptext From c3fff8e9c99197bcd06da8026b6957a4ad8891c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marlin=20S=C3=B6=C3=B6se?= <30473690+msoose@users.noreply.github.com> Date: Thu, 13 Aug 2020 10:28:56 -0600 Subject: [PATCH 0575/1047] Update and rename dumptoemul-mfu.lua to hf_mfu_dumptoemulator.lua --- .../{dumptoemul-mfu.lua => hf_mfu_dumptoemulator.lua} | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename client/luascripts/{dumptoemul-mfu.lua => hf_mfu_dumptoemulator.lua} (97%) diff --git a/client/luascripts/dumptoemul-mfu.lua b/client/luascripts/hf_mfu_dumptoemulator.lua similarity index 97% rename from client/luascripts/dumptoemul-mfu.lua rename to client/luascripts/hf_mfu_dumptoemulator.lua index 0bd11e297..47f52e135 100644 --- a/client/luascripts/dumptoemul-mfu.lua +++ b/client/luascripts/hf_mfu_dumptoemulator.lua @@ -12,10 +12,10 @@ This script takes a dumpfile from 'hf mfu dump' and converts it to a format that by the emulator ]] example = [[ - script run dumptoemul-mfu -i dumpdata-foobar.bin + script run hf_mfu_dumptoemulator -i dumpdata-foobar.bin ]] usage = [[ -script run dumptoemul-mfu [-i ] [-o ] +script run hf_mfu_dumptoemulator [-i ] [-o ] ]] arguments = [[ -h This help From 383eecf8e502e2393dd6be5d7c35da6730da8bde Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marlin=20S=C3=B6=C3=B6se?= <30473690+msoose@users.noreply.github.com> Date: Thu, 13 Aug 2020 10:30:35 -0600 Subject: [PATCH 0576/1047] Update and rename dumptoemul.lua to hf_mf_dumptoemulator.lua --- .../luascripts/{dumptoemul.lua => hf_mf_dumptoemulator.lua} | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename client/luascripts/{dumptoemul.lua => hf_mf_dumptoemulator.lua} (96%) diff --git a/client/luascripts/dumptoemul.lua b/client/luascripts/hf_mf_dumptoemulator.lua similarity index 96% rename from client/luascripts/dumptoemul.lua rename to client/luascripts/hf_mf_dumptoemulator.lua index 88121f86d..2c7106928 100644 --- a/client/luascripts/dumptoemul.lua +++ b/client/luascripts/hf_mf_dumptoemulator.lua @@ -12,10 +12,10 @@ This script takes a dumpfile from 'hf mf dump' and converts it to a format that by the emulator ]] example = [[ - script run dumptoemul -i dumpdata-foobar.bin + script run hf_mf_dumptoemulator -i dumpdata-foobar.bin ]] usage = [[ -script run dumptoemul [-i ] [-o ] +script run hf_mf_dumptoemulator [-i ] [-o ] ]] arguments = [[ -h This help From f2e683f2488b72561ddcca50465dc6be5db0b84c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marlin=20S=C3=B6=C3=B6se?= <30473690+msoose@users.noreply.github.com> Date: Thu, 13 Aug 2020 10:31:20 -0600 Subject: [PATCH 0577/1047] Update and rename e.lua to data_hex_crc.lua --- client/luascripts/{e.lua => data_hex_crc.lua} | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) rename client/luascripts/{e.lua => data_hex_crc.lua} (94%) diff --git a/client/luascripts/e.lua b/client/luascripts/data_hex_crc.lua similarity index 94% rename from client/luascripts/e.lua rename to client/luascripts/data_hex_crc.lua index 43e0ab407..a970eaf93 100644 --- a/client/luascripts/e.lua +++ b/client/luascripts/data_hex_crc.lua @@ -9,11 +9,11 @@ desc = [[ This script calculates many checksums (CRC) over the provided hex input. ]] example = [[ - script run e -b 010203040506070809 - script run e -b 010203040506070809 -w 16 + script run data_hex_crc -b 010203040506070809 + script run data_hex_crc -b 010203040506070809 -w 16 ]] usage = [[ -script run e [-b ] +script run data_hex_crc [-b ] ]] arguments = [[ -b data in hex From 00e29aec135622bda817182874719230c78adad9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marlin=20S=C3=B6=C3=B6se?= <30473690+msoose@users.noreply.github.com> Date: Thu, 13 Aug 2020 10:33:54 -0600 Subject: [PATCH 0578/1047] Update and rename emul2dump.lua to data_emulatortodump.lua --- .../luascripts/{emul2dump.lua => data_emulatortodump.lua} | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) rename client/luascripts/{emul2dump.lua => data_emulatortodump.lua} (90%) diff --git a/client/luascripts/emul2dump.lua b/client/luascripts/data_emulatortodump.lua similarity index 90% rename from client/luascripts/emul2dump.lua rename to client/luascripts/data_emulatortodump.lua index e0286e625..e40875529 100644 --- a/client/luascripts/emul2dump.lua +++ b/client/luascripts/data_emulatortodump.lua @@ -10,12 +10,12 @@ desc =[[ This script takes an dumpfile in EML (ASCII) format and converts it to the PM3 dumpbin file to be used with `hf mf restore` ]] example =[[ - 1. script run emul2dump - 2. script run emul2dump -i myfile.eml - 3. script run emul2dump -i myfile.eml -o myfile.bin + 1. script run data_emulatortodump + 2. script run data_emulatortodump -i myfile.eml + 3. script run data_emulatortodump -i myfile.eml -o myfile.bin ]] usage = [[ -script run emul2dump [-i ] [-o ] +script run data_emulatortodump [-i ] [-o ] ]] arguments = [[ -h This help From db91059520fd35eb50cc89aad1f5642554d284bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marlin=20S=C3=B6=C3=B6se?= <30473690+msoose@users.noreply.github.com> Date: Thu, 13 Aug 2020 10:39:37 -0600 Subject: [PATCH 0579/1047] Update and rename formatMifare.lua to hf_mf_format.lua --- client/luascripts/{formatMifare.lua => hf_mf_format.lua} | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) rename client/luascripts/{formatMifare.lua => hf_mf_format.lua} (97%) diff --git a/client/luascripts/formatMifare.lua b/client/luascripts/hf_mf_format.lua similarity index 97% rename from client/luascripts/formatMifare.lua rename to client/luascripts/hf_mf_format.lua index 30ab20535..d949c25f2 100644 --- a/client/luascripts/formatMifare.lua +++ b/client/luascripts/hf_mf_format.lua @@ -20,16 +20,16 @@ The script will skip the manufactoring block 0. ]] example = [[ -- generate commands - 1. script run formatMifare + 1. script run hf_mf_format -- generate command, replacing key with new key. - 2. script run formatMifare -k aabbccddeeff -n 112233445566 -a FF0780 + 2. script run hf_mf_format -k aabbccddeeff -n 112233445566 -a FF0780 -- generate commands and execute them against card. - 3. script run formatMifare -x + 3. script run hf_mf_format -x ]] usage = [[ -script run formatMifare -k -n -a -x +script run hf_mf_format -k -n -a -x ]] arguments = [[ -h - this help From ffd0df24b09260a4f146f9a42da55de93e36103f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marlin=20S=C3=B6=C3=B6se?= <30473690+msoose@users.noreply.github.com> Date: Thu, 13 Aug 2020 10:40:27 -0600 Subject: [PATCH 0580/1047] Update and rename ul_uid.lua to hf_mfu_setuid.lua --- client/luascripts/{ul_uid.lua => hf_mfu_setuid.lua} | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) rename client/luascripts/{ul_uid.lua => hf_mfu_setuid.lua} (96%) diff --git a/client/luascripts/ul_uid.lua b/client/luascripts/hf_mfu_setuid.lua similarity index 96% rename from client/luascripts/ul_uid.lua rename to client/luascripts/hf_mfu_setuid.lua index ece368ce5..6b161b054 100644 --- a/client/luascripts/ul_uid.lua +++ b/client/luascripts/hf_mfu_setuid.lua @@ -12,13 +12,13 @@ This script tries to set UID on a mifare Ultralight magic card which either ]] example = [[ -- backdoor magic tag - script run ul_uid -u 11223344556677 + script run hf_mfu_setuid -u 11223344556677 -- brickable magic tag - script run ul_uid -b -u 11223344556677 + script run hf_mfu_setuid -b -u 11223344556677 ]] usage = [[ -script run ul_uid [-h] [-b] [-u ] +script run hf_mfu_setuid [-h] [-b] [-u ] ]] arguments = [[ -h : this help From bb42d5efd040d98dbb8e432b2a77f27fb9b2f407 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marlin=20S=C3=B6=C3=B6se?= <30473690+msoose@users.noreply.github.com> Date: Thu, 13 Aug 2020 10:41:31 -0600 Subject: [PATCH 0581/1047] Update and rename ufodump.lua to hf_14a_aztek.lua --- client/luascripts/{ufodump.lua => hf_14a_aztek.lua} | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) rename client/luascripts/{ufodump.lua => hf_14a_aztek.lua} (98%) diff --git a/client/luascripts/ufodump.lua b/client/luascripts/hf_14a_aztek.lua similarity index 98% rename from client/luascripts/ufodump.lua rename to client/luascripts/hf_14a_aztek.lua index d9a8faa68..c63a9f85c 100644 --- a/client/luascripts/ufodump.lua +++ b/client/luascripts/hf_14a_aztek.lua @@ -14,13 +14,13 @@ xor: the first three block (0,1,2) is not XORED. The rest seems to be xored. ]] example = [[ -- default - script run ufodump + script run hf_14a_aztek -- stop at block 10 - script run ufodump -b 10 + script run hf_14a_aztek -b 10 ]] usage = [[ -script run ufudump [-h] [-b] +script run hf_14a_aztek [-h] [-b] ]] arguments = [[ -h This help From 2f12a65913ceaeb31102671ff9cba2492c47fa1f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marlin=20S=C3=B6=C3=B6se?= <30473690+msoose@users.noreply.github.com> Date: Thu, 13 Aug 2020 10:42:05 -0600 Subject: [PATCH 0582/1047] Update and rename tracetest.lua to data_tracetest.lua --- client/luascripts/{tracetest.lua => data_tracetest.lua} | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename client/luascripts/{tracetest.lua => data_tracetest.lua} (97%) diff --git a/client/luascripts/tracetest.lua b/client/luascripts/data_tracetest.lua similarity index 97% rename from client/luascripts/tracetest.lua rename to client/luascripts/data_tracetest.lua index b7e931b99..2ce83116c 100644 --- a/client/luascripts/tracetest.lua +++ b/client/luascripts/data_tracetest.lua @@ -18,10 +18,10 @@ The following tracefiles will be loaded: modulation*.pm3 ]] example = [[ - 1. script run tracetest + 1. script run data_tracetest ]] usage = [[ -script run tracetest [-h] +script run data_tracetest [-h] ]] arguments = [[ -h : this help From d003b0135c1e60170534db72b0fd3447c1f69de9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marlin=20S=C3=B6=C3=B6se?= <30473690+msoose@users.noreply.github.com> Date: Thu, 13 Aug 2020 10:44:31 -0600 Subject: [PATCH 0583/1047] Update and rename tnp3sim.lua to hf_mf_autosim.lua --- client/luascripts/{tnp3sim.lua => hf_mf_autosim.lua} | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) rename client/luascripts/{tnp3sim.lua => hf_mf_autosim.lua} (98%) diff --git a/client/luascripts/tnp3sim.lua b/client/luascripts/hf_mf_autosim.lua similarity index 98% rename from client/luascripts/tnp3sim.lua rename to client/luascripts/hf_mf_autosim.lua index 069bbfe08..255b4e00b 100644 --- a/client/luascripts/tnp3sim.lua +++ b/client/luascripts/hf_mf_autosim.lua @@ -13,17 +13,17 @@ author = 'Iceman' version = 'v1.0.2' desc = [[ This script will try to load a binary datadump of a Mifare TNP3xxx card. -It vill try to validate all checksums and view some information stored in the dump +It will try to validate all checksums and view some information stored in the dump For an experimental mode, it tries to manipulate some data. At last it sends all data to the PM3 device memory where it can be used in the command "hf mf sim" ]] example = [[ - 1. script run tnp3sim - 2. script run tnp3sim -m - 3. script run tnp3sim -m -i myfile + 1. script run hf_mf_autosim + 2. script run hf_mf_autosim -m + 3. script run hf_mf_autosim -m -i myfile ]] usage = [[ -script run tnp3sim [-h] [-m] [-i ] +script run hf_mf_autosim [-h] [-m] [-i ] ]] arguments = [[ -h : this help From 6b853411f7b69b308435acfbb440b0d0715d8c72 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marlin=20S=C3=B6=C3=B6se?= <30473690+msoose@users.noreply.github.com> Date: Thu, 13 Aug 2020 10:46:02 -0600 Subject: [PATCH 0584/1047] Update and rename tnp3dump.lua to hf_mf_dump-tnp3.lua --- .../{tnp3dump.lua => hf_mf_dump-tnp3.lua} | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) rename client/luascripts/{tnp3dump.lua => hf_mf_dump-tnp3.lua} (94%) diff --git a/client/luascripts/tnp3dump.lua b/client/luascripts/hf_mf_dump-tnp3.lua similarity index 94% rename from client/luascripts/tnp3dump.lua rename to client/luascripts/hf_mf_dump-tnp3.lua index 0dea0a01a..6cfddd0bf 100644 --- a/client/luascripts/tnp3dump.lua +++ b/client/luascripts/hf_mf_dump-tnp3.lua @@ -16,18 +16,18 @@ This script will try to dump the contents of a Mifare TNP3xxx card. It will need a valid KeyA in order to find the other keys and decode the card. ]] example = [[ - script run tnp3dump - script run tnp3dump -n - script run tnp3dump -p - script run tnp3dump -k aabbccddeeff - script run tnp3dump -k aabbccddeeff -n - script run tnp3dump -o myfile - script run tnp3dump -n -o myfile - script run tnp3dump -p -o myfile - script run tnp3dump -k aabbccddeeff -n -o myfile + script run hf_mf_dump-tnp3 + script run hf_mf_dump-tnp3 -n + script run hf_mf_dump-tnp3 -p + script run hf_mf_dump-tnp3 -k aabbccddeeff + script run hf_mf_dump-tnp3 -k aabbccddeeff -n + script run hf_mf_dump-tnp3 -o myfile + script run hf_mf_dump-tnp3 -n -o myfile + script run hf_mf_dump-tnp3 -p -o myfile + script run hf_mf_dump-tnp3 -k aabbccddeeff -n -o myfile ]] usage = [[ -script run tnp3dump [-h] [-k ] [-n] [-p] [-o ] +script run hf_mf_dump-tnp3 [-h] [-k ] [-n] [-p] [-o ] ]] arguments = [[ -h : this help From 5029b4675465704b93b04045baaa96b6aa06fcda Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marlin=20S=C3=B6=C3=B6se?= <30473690+msoose@users.noreply.github.com> Date: Thu, 13 Aug 2020 10:46:54 -0600 Subject: [PATCH 0585/1047] Update and rename tnp3clone.lua to hf_mf_clone-tnp3.lua --- .../{tnp3clone.lua => hf_mf_clone-tnp3.lua} | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) rename client/luascripts/{tnp3clone.lua => hf_mf_clone-tnp3.lua} (94%) diff --git a/client/luascripts/tnp3clone.lua b/client/luascripts/hf_mf_clone-tnp3.lua similarity index 94% rename from client/luascripts/tnp3clone.lua rename to client/luascripts/hf_mf_clone-tnp3.lua index 056e7021b..59b954023 100644 --- a/client/luascripts/tnp3clone.lua +++ b/client/luascripts/hf_mf_clone-tnp3.lua @@ -15,17 +15,17 @@ copyright = '' author = "Iceman" version = 'v1.0.2' desc = [[ -This script will try making a barebone clone of a tnp3 tag on to a magic generation1 card. +This script will try to make a barebones clone of a tnp3 tag on to a magic generation1 card. ]] example = [[ - script run tnp3clone - script run tnp3clone -h - script run tnp3clone -l - script run tnp3clone -t aa00 -s 0030 + script run hf_mf_clone-tnp3 + script run hf_mf_clone-tnp3 -h + script run hf_mf_clone-tnp3 -l + script run hf_mf_clone-tnp3 -t aa00 -s 0030 ]] usage = [[ -script run tnp3clone [-h] [-t ] [-s ] +script run hf_mf_clone-tnp3 [-h] [-t ] [-s ] ]] arguments = [[ -h : this help From 08bf421f3cebf828d522d64543c295acd44a73d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marlin=20S=C3=B6=C3=B6se?= <30473690+msoose@users.noreply.github.com> Date: Thu, 13 Aug 2020 10:49:30 -0600 Subject: [PATCH 0586/1047] Update and rename test_t55x7_psk.lua to lf_t55xx_defaultpsk.lua --- .../{test_t55x7_psk.lua => lf_t55xx_defaultpsk.lua} | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename client/luascripts/{test_t55x7_psk.lua => lf_t55xx_defaultpsk.lua} (98%) diff --git a/client/luascripts/test_t55x7_psk.lua b/client/luascripts/lf_t55xx_defaultpsk.lua similarity index 98% rename from client/luascripts/test_t55x7_psk.lua rename to client/luascripts/lf_t55xx_defaultpsk.lua index 361b231c4..8b4f0447a 100644 --- a/client/luascripts/test_t55x7_psk.lua +++ b/client/luascripts/lf_t55xx_defaultpsk.lua @@ -30,10 +30,10 @@ Loop OUTER: In all 12 individual test for the PSK demod ]] example = [[ - 1. script run test_t55x7_psk + 1. script run lf_t55xx_defaultpsk ]] usage = [[ -script run test_t55x7_psk [-h] +script run lf_t55xx_defaultpsk [-h] ]] arguments = [[ -h : this help From 33edb06b4a62b576875b5990f6b4bd671a334216 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marlin=20S=C3=B6=C3=B6se?= <30473690+msoose@users.noreply.github.com> Date: Thu, 13 Aug 2020 10:50:11 -0600 Subject: [PATCH 0587/1047] Update and rename test_t55x7_fsk.lua to lf_t55xx_defaultfsk.lua --- .../{test_t55x7_fsk.lua => lf_t55xx_defaultfsk.lua} | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename client/luascripts/{test_t55x7_fsk.lua => lf_t55xx_defaultfsk.lua} (97%) diff --git a/client/luascripts/test_t55x7_fsk.lua b/client/luascripts/lf_t55xx_defaultfsk.lua similarity index 97% rename from client/luascripts/test_t55x7_fsk.lua rename to client/luascripts/lf_t55xx_defaultfsk.lua index 7a8d724a0..2a5c272c4 100644 --- a/client/luascripts/test_t55x7_fsk.lua +++ b/client/luascripts/lf_t55xx_defaultfsk.lua @@ -35,10 +35,10 @@ Loop: testsuit for the ASK/MANCHESTER demod ]] example = [[ - 1. script run test_t55x7_fsk + 1. script run lf_t55xx_defaultfsk ]] usage = [[ -script run test_t55x7_fsk [-h] +script run lf_t55xx_defaultfsk [-h] ]] arguments = [[ -h : this help From fe23f6b8b90dbd06c332645e0592ec2198183bbe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marlin=20S=C3=B6=C3=B6se?= <30473690+msoose@users.noreply.github.com> Date: Thu, 13 Aug 2020 10:50:44 -0600 Subject: [PATCH 0588/1047] Update and rename test_t55x7_bi.lua to lf_t55xx_defaultbi.lua --- .../luascripts/{test_t55x7_bi.lua => lf_t55xx_defaultbi.lua} | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename client/luascripts/{test_t55x7_bi.lua => lf_t55xx_defaultbi.lua} (97%) diff --git a/client/luascripts/test_t55x7_bi.lua b/client/luascripts/lf_t55xx_defaultbi.lua similarity index 97% rename from client/luascripts/test_t55x7_bi.lua rename to client/luascripts/lf_t55xx_defaultbi.lua index 4b897b367..495faef02 100644 --- a/client/luascripts/test_t55x7_bi.lua +++ b/client/luascripts/lf_t55xx_defaultbi.lua @@ -33,10 +33,10 @@ Loop: testsuit for the BIPHASE demod ]] example = [[ - 1. script run test_t55x7_bi + 1. script run lf_t55xx_defaultbi ]] usage = [[ -script run test_t55x7_bi [-h] +script run lf_t55xx_defaultbi [-h] ]] arguments = [[ -h : this help From 4537b85fcb2f739fe6d0b791cf1d41d6d53b734c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marlin=20S=C3=B6=C3=B6se?= <30473690+msoose@users.noreply.github.com> Date: Thu, 13 Aug 2020 10:51:20 -0600 Subject: [PATCH 0589/1047] Update and rename test_t55x7_ask.lua to lf_t55xx_defaultask.lua --- .../{test_t55x7_ask.lua => lf_t55xx_defaultask.lua} | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) rename client/luascripts/{test_t55x7_ask.lua => lf_t55xx_defaultask.lua} (96%) diff --git a/client/luascripts/test_t55x7_ask.lua b/client/luascripts/lf_t55xx_defaultask.lua similarity index 96% rename from client/luascripts/test_t55x7_ask.lua rename to client/luascripts/lf_t55xx_defaultask.lua index adfaf1eeb..efb6ce8fe 100644 --- a/client/luascripts/test_t55x7_ask.lua +++ b/client/luascripts/lf_t55xx_defaultask.lua @@ -36,13 +36,13 @@ Loop: -xx 1C xxxx = RF/128 -testsuit for the ASK/MANCHESTER demod +testsuite for the ASK/MANCHESTER demod ]] example =[[ - 1. script run test_t55x7_ask + 1. script run lf_t55xx_defaultask ]] usage = [[ -script run test_t55x7_ask [-h] +script run lf_t55xx_defaultask [-h] ]] arguments = [[ -h : this help From ac0bbd0c6a129d4d3107f786c46286e9dae3c57d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marlin=20S=C3=B6=C3=B6se?= <30473690+msoose@users.noreply.github.com> Date: Thu, 13 Aug 2020 10:52:09 -0600 Subject: [PATCH 0590/1047] Update and rename test_t55x7.lua to lf_t55xx_writetest.lua --- .../luascripts/{test_t55x7.lua => lf_t55xx_writetest.lua} | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) rename client/luascripts/{test_t55x7.lua => lf_t55xx_writetest.lua} (98%) diff --git a/client/luascripts/test_t55x7.lua b/client/luascripts/lf_t55xx_writetest.lua similarity index 98% rename from client/luascripts/test_t55x7.lua rename to client/luascripts/lf_t55xx_writetest.lua index 3c4b83441..c7caaffda 100644 --- a/client/luascripts/test_t55x7.lua +++ b/client/luascripts/lf_t55xx_writetest.lua @@ -30,9 +30,9 @@ testsuit for T55XX commands demodulation ]] example = [[ - 1. script run test_t55x7 - 2. script run test_t55x7 -t FSK2A - 3. script run test_t55x7 -t PSK1 + 1. script run lf_t55xx_writetest + 2. script run lf_t55xx_writetest -t FSK2A + 3. script run lf_t55xx_writetest -t PSK1 ]] usage = [[ script run test_t55x7 [-h] [-t From 9c86a60c1dedc0b3c10e8324d2a06127a98268f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marlin=20S=C3=B6=C3=B6se?= <30473690+msoose@users.noreply.github.com> Date: Thu, 13 Aug 2020 10:53:13 -0600 Subject: [PATCH 0591/1047] Update and rename remagic.lua to hf_mf_magicrevive.lua --- client/luascripts/{remagic.lua => hf_mf_magicrevive.lua} | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename client/luascripts/{remagic.lua => hf_mf_magicrevive.lua} (97%) diff --git a/client/luascripts/remagic.lua b/client/luascripts/hf_mf_magicrevive.lua similarity index 97% rename from client/luascripts/remagic.lua rename to client/luascripts/hf_mf_magicrevive.lua index 51aa0be40..dcbb886e1 100644 --- a/client/luascripts/remagic.lua +++ b/client/luascripts/hf_mf_magicrevive.lua @@ -11,11 +11,11 @@ or mifare Ultralight magic card which answers to chinese backdoor commands ]] example = [[ -- target a Ultralight based card - 1. script run remagic -u + 1. script run hf_mf_magicrevive -u ]] usage = [[ -script run remagic [-h] [-u] +script run hf_mf_magicrevive [-h] [-u] ]] arguments = [[ -h this help From bd44c5324754279f9e260b6cf137e5c81ef6c39f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marlin=20S=C3=B6=C3=B6se?= <30473690+msoose@users.noreply.github.com> Date: Thu, 13 Aug 2020 10:54:03 -0600 Subject: [PATCH 0592/1047] Update and rename read_pwd_mem_spiffs.lua to data_read_pwd_mem_spiffs.lua --- ...ad_pwd_mem_spiffs.lua => data_read_pwd_mem_spiffs.lua} | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) rename client/luascripts/{read_pwd_mem_spiffs.lua => data_read_pwd_mem_spiffs.lua} (92%) diff --git a/client/luascripts/read_pwd_mem_spiffs.lua b/client/luascripts/data_read_pwd_mem_spiffs.lua similarity index 92% rename from client/luascripts/read_pwd_mem_spiffs.lua rename to client/luascripts/data_read_pwd_mem_spiffs.lua index ae2f0ba99..11204a9d8 100644 --- a/client/luascripts/read_pwd_mem_spiffs.lua +++ b/client/luascripts/data_read_pwd_mem_spiffs.lua @@ -11,16 +11,16 @@ It was meant to be used as a help tool after using the BogRun standalone mode. ]] example = [[ -- This will read the hf_bog.log file in SPIFFS and print the stored passwords - script run read_pwd_mem_spiffs + script run data_read_pwd_mem_spiffs -- This will read the other.log file in SPIFFS and print the stored passwords - script run read_pwd_mem_spiffs -f other.log + script run data_read_pwd_mem_spiffs -f other.log -- This will delete the hf_bog.log file from SPIFFS - script run read_pwd_mem_spiffs -r + script run data_read_pwd_mem_spiffs -r ]] usage = [[ - script run read_pwd_mem_spiffs [-h] [-f ] [-r] + script run data_read_pwd_mem_spiffs [-h] [-f ] [-r] ]] arguments = [[ -h : this help From 4f7b1453ccc0b96c1ab7d6797a7d0e5e344b0e90 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marlin=20S=C3=B6=C3=B6se?= <30473690+msoose@users.noreply.github.com> Date: Thu, 13 Aug 2020 10:54:52 -0600 Subject: [PATCH 0593/1047] Update and rename read_pwd_mem.lua to data_readpwdmem.lua --- .../{read_pwd_mem.lua => data_readpwdmem.lua} | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) rename client/luascripts/{read_pwd_mem.lua => data_readpwdmem.lua} (93%) diff --git a/client/luascripts/read_pwd_mem.lua b/client/luascripts/data_readpwdmem.lua similarity index 93% rename from client/luascripts/read_pwd_mem.lua rename to client/luascripts/data_readpwdmem.lua index 0c786f6f9..29cd087fa 100644 --- a/client/luascripts/read_pwd_mem.lua +++ b/client/luascripts/data_readpwdmem.lua @@ -15,25 +15,25 @@ You should now use read_pwd_mem_spiffs instead after the updated BogRun standalo ]] example = [[ -- This will scan the first 256 bytes of flash memory for stored passwords - script run read_pwd_mem + script run data_readpwdmem -- This will scan 256 bytes of flash memory at offset 64 for stored passwords - script run read_pwd_mem -o 64 + script run data_readpwdmem -o 64 -- This will scan 32 bytes of flash memory at offset 64 for stored passwords - script run read_pwd_mem -o 64 -l 32 + script run data_readpwdmem -o 64 -l 32 -- This will print the stored Mifare dictionary keys - script run read_pwd_mem -m + script run data_readpwdmem -m -- This will print the stored t55xx dictionary passwords - script run read_pwd_mem -t + script run data_readpwdmem -t -- This will print the stored iClass dictionary keys - script run read_pwd_mem -i + script run data_readpwdmem -i ]] usage = [[ - script run read_pwd_mem [-h] [-o ] [-l ] [-k ] [-m] [-t] [-i] + script run data_readpwdmem [-h] [-o ] [-l ] [-k ] [-m] [-t] [-i] ]] arguments = [[ -h : this help From 94ae877f9351c4c7cfb9ee9edbe891ab43127bbd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marlin=20S=C3=B6=C3=B6se?= <30473690+msoose@users.noreply.github.com> Date: Thu, 13 Aug 2020 10:55:27 -0600 Subject: [PATCH 0594/1047] Update and rename data_read_pwd_mem_spiffs.lua to data_readpwdmem-spiffs.lua --- ...read_pwd_mem_spiffs.lua => data_readpwdmem-spiffs.lua} | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) rename client/luascripts/{data_read_pwd_mem_spiffs.lua => data_readpwdmem-spiffs.lua} (92%) diff --git a/client/luascripts/data_read_pwd_mem_spiffs.lua b/client/luascripts/data_readpwdmem-spiffs.lua similarity index 92% rename from client/luascripts/data_read_pwd_mem_spiffs.lua rename to client/luascripts/data_readpwdmem-spiffs.lua index 11204a9d8..1ad6876c0 100644 --- a/client/luascripts/data_read_pwd_mem_spiffs.lua +++ b/client/luascripts/data_readpwdmem-spiffs.lua @@ -11,16 +11,16 @@ It was meant to be used as a help tool after using the BogRun standalone mode. ]] example = [[ -- This will read the hf_bog.log file in SPIFFS and print the stored passwords - script run data_read_pwd_mem_spiffs + script run data_readpwdmem-spiffs -- This will read the other.log file in SPIFFS and print the stored passwords - script run data_read_pwd_mem_spiffs -f other.log + script run data_readpwdmem-spiffs -f other.log -- This will delete the hf_bog.log file from SPIFFS - script run data_read_pwd_mem_spiffs -r + script run data_readpwdmem-spiffs -r ]] usage = [[ - script run data_read_pwd_mem_spiffs [-h] [-f ] [-r] + script run data_readpwdmem-spiffs [-h] [-f ] [-r] ]] arguments = [[ -h : this help From 07e3fbcf34e770a0a94807d8c891c1436b08c7ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marlin=20S=C3=B6=C3=B6se?= <30473690+msoose@users.noreply.github.com> Date: Thu, 13 Aug 2020 10:55:55 -0600 Subject: [PATCH 0595/1047] Update and rename parameters.lua to data_example_parameters.lua --- .../{parameters.lua => data_example_parameters.lua} | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename client/luascripts/{parameters.lua => data_example_parameters.lua} (93%) diff --git a/client/luascripts/parameters.lua b/client/luascripts/data_example_parameters.lua similarity index 93% rename from client/luascripts/parameters.lua rename to client/luascripts/data_example_parameters.lua index dce215eb7..f31bb607c 100644 --- a/client/luascripts/parameters.lua +++ b/client/luascripts/data_example_parameters.lua @@ -12,10 +12,10 @@ This is an example script to demonstrate handle parameters in scripts. For more info, check the comments in the code ]] example = [[ - 1. script run parameters -a mytestparam_input -c + 1. script run data_example_parameters -a mytestparam_input -c ]] usage = [[ -script run parameters [-h] [-a ] [-b ] [-c] [-d] [-e] +script run data_example_parameters [-h] [-a ] [-b ] [-c] [-d] [-e] ]] arguments = [[ -h This help From 4a6aa15814c4a95870441d6c7f380d3cd979511c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marlin=20S=C3=B6=C3=B6se?= <30473690+msoose@users.noreply.github.com> Date: Thu, 13 Aug 2020 10:57:07 -0600 Subject: [PATCH 0596/1047] Update and rename ntag_3d.lua to hf_ntag-3d.lua --- client/luascripts/{ntag_3d.lua => hf_ntag-3d.lua} | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) rename client/luascripts/{ntag_3d.lua => hf_ntag-3d.lua} (96%) diff --git a/client/luascripts/ntag_3d.lua b/client/luascripts/hf_ntag-3d.lua similarity index 96% rename from client/luascripts/ntag_3d.lua rename to client/luascripts/hf_ntag-3d.lua index d986923ba..9b87d34ff 100644 --- a/client/luascripts/ntag_3d.lua +++ b/client/luascripts/hf_ntag-3d.lua @@ -13,16 +13,16 @@ Thanks to @jack for his invaluable input on some of the configuration. ]] example =[[ -- This will generate GOLD, PLA, TH, EU, 200m, tagbased uid. - script run ntag_3d -c 46 -m 50 -p 5448 -s 4555 -l 200 + script run hf_ntag-3d -c 46 -m 50 -p 5448 -s 4555 -l 200 -- This will generate GOLD, PLA, TH, EU, 200m, userbased uid. - script run ntag_3d -u 11223344556677 -c 46 -m 50 -p 5448 -s 4555 -l 200 + script run hf_ntag-3d -u 11223344556677 -c 46 -m 50 -p 5448 -s 4555 -l 200 -- This will generate GOLD, PLA, TH, EU, 200m, userbased uid. and configure a MAGIC NTAG. - script run ntag_3d -u 11223344556677 -c 46 -m 50 -p 5448 -s 4555 -l 200 -1 + script run hf_ntag-3d -u 11223344556677 -c 46 -m 50 -p 5448 -s 4555 -l 200 -1 ]] usage = [[ -script run ntag_3d [-h] [-t] [-u ] [-c ] [-m ] [-p ] [-s ] [-l ] +script run hf_ntag-3d [-h] [-t] [-u ] [-c ] [-m ] [-p ] [-s ] [-l ] ]] arguments = [[ -h : this help From c9c5a90ec811a4e941a1a2654c57bd198c9f0cfb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marlin=20S=C3=B6=C3=B6se?= <30473690+msoose@users.noreply.github.com> Date: Thu, 13 Aug 2020 10:58:19 -0600 Subject: [PATCH 0597/1047] Update and rename ndef_dump.lua to hf_ndef_dump.lua --- client/luascripts/{ndef_dump.lua => hf_ndef_dump.lua} | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename client/luascripts/{ndef_dump.lua => hf_ndef_dump.lua} (99%) diff --git a/client/luascripts/ndef_dump.lua b/client/luascripts/hf_ndef_dump.lua similarity index 99% rename from client/luascripts/ndef_dump.lua rename to client/luascripts/hf_ndef_dump.lua index 672beda1c..b2c282cf8 100644 --- a/client/luascripts/ndef_dump.lua +++ b/client/luascripts/hf_ndef_dump.lua @@ -21,10 +21,10 @@ Therefore, the .eml is better to use file when saving dumps.) ]] example = [[ - 1. script run ndef_dump + 1. script run hf_ndef_dump ]] usage = [[ -script run ndef_dump [-h] [-d] [-v] +script run hf_ndef_dump [-h] [-d] [-v] ]] arguments = [[ -h this help From 132f0bc8929454d33dc1749075b41fe6707b32aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marlin=20S=C3=B6=C3=B6se?= <30473690+msoose@users.noreply.github.com> Date: Thu, 13 Aug 2020 10:59:42 -0600 Subject: [PATCH 0598/1047] Update and rename mifareplus.lua to hf_mfp_raw.lua --- client/luascripts/{mifareplus.lua => hf_mfp_raw.lua} | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename client/luascripts/{mifareplus.lua => hf_mfp_raw.lua} (99%) diff --git a/client/luascripts/mifareplus.lua b/client/luascripts/hf_mfp_raw.lua similarity index 99% rename from client/luascripts/mifareplus.lua rename to client/luascripts/hf_mfp_raw.lua index a30f24f8b..e28c274a8 100644 --- a/client/luascripts/mifareplus.lua +++ b/client/luascripts/hf_mfp_raw.lua @@ -15,10 +15,10 @@ Please read the NXP manual before running this script to prevent making irrevers Small changes can be to made this script to communicate with the Mifare Plus S, X, or SE. ]] example = [[ - 1. script run mifareplus + 1. script run hf_mfp_raw ]] usage = [[ -script run mifareplus [-h] +script run hf_mfp_raw [-h] ]] arguments = [[ -h : this help From 2270ee0291a0dff3a28080b243ac596d4b9a3d46 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marlin=20S=C3=B6=C3=B6se?= <30473690+msoose@users.noreply.github.com> Date: Thu, 13 Aug 2020 11:00:12 -0600 Subject: [PATCH 0599/1047] Update and rename mifare_autopwn.lua to hf_mf_autopwn.lua --- client/luascripts/{mifare_autopwn.lua => hf_mf_autopwn.lua} | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename client/luascripts/{mifare_autopwn.lua => hf_mf_autopwn.lua} (98%) diff --git a/client/luascripts/mifare_autopwn.lua b/client/luascripts/hf_mf_autopwn.lua similarity index 98% rename from client/luascripts/mifare_autopwn.lua rename to client/luascripts/hf_mf_autopwn.lua index 6ff40a70d..831a1111e 100644 --- a/client/luascripts/mifare_autopwn.lua +++ b/client/luascripts/hf_mf_autopwn.lua @@ -13,10 +13,10 @@ This is a script which automates cracking and dumping mifare classic cards. It s place by the device. ]] example = [[ - 1. script run mifare_autopwn + 1. script run hf_mf_autopwn ]] usage = [[ -script run mifare_autopwn [-h] [-d] [-k ] +script run hf_mf_autopwn [-h] [-d] [-k ] ]] arguments = [[ -h this help From 22fca7c4daa7479977d2082399044400448827f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marlin=20S=C3=B6=C3=B6se?= <30473690+msoose@users.noreply.github.com> Date: Thu, 13 Aug 2020 11:01:07 -0600 Subject: [PATCH 0600/1047] Update and rename mifare_access.lua to data_mfc_accessdecode.lua --- .../{mifare_access.lua => data_mfc_accessdecode.lua} | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename client/luascripts/{mifare_access.lua => data_mfc_accessdecode.lua} (97%) diff --git a/client/luascripts/mifare_access.lua b/client/luascripts/data_mfc_accessdecode.lua similarity index 97% rename from client/luascripts/mifare_access.lua rename to client/luascripts/data_mfc_accessdecode.lua index 4c416e8d6..9c65036bb 100644 --- a/client/luascripts/mifare_access.lua +++ b/client/luascripts/data_mfc_accessdecode.lua @@ -8,10 +8,10 @@ desc = [[ This script tries to decode Mifare Classic Access bytes ]] example = [[ - 1. script run mifare_access -a 7F0F0869 + 1. script run data_mfc_accessdecode -a 7F0F0869 ]] usage = [[ -script run mifare_access [-h] [-a ] +script run data_mfc_accessdecode [-h] [-a ] ]] arguments = [[ -h : this help From 55775252c5646edc4afc6e6e15d1c2f640e2285b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marlin=20S=C3=B6=C3=B6se?= <30473690+msoose@users.noreply.github.com> Date: Thu, 13 Aug 2020 11:02:30 -0600 Subject: [PATCH 0601/1047] Update and rename mfu_magic.lua to hf_mfu_magicwrite.lua --- .../{mfu_magic.lua => hf_mfu_magicwrite.lua} | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) rename client/luascripts/{mfu_magic.lua => hf_mfu_magicwrite.lua} (97%) diff --git a/client/luascripts/mfu_magic.lua b/client/luascripts/hf_mfu_magicwrite.lua similarity index 97% rename from client/luascripts/mfu_magic.lua rename to client/luascripts/hf_mfu_magicwrite.lua index 5b817fe93..e29296f45 100644 --- a/client/luascripts/mfu_magic.lua +++ b/client/luascripts/hf_mfu_magicwrite.lua @@ -16,28 +16,28 @@ version = 'v1.1.3' desc = 'This script enables easy programming of a MAGIC NTAG 21* card' example = [[ -- wipe tag - script run mfu_magic -w + script run hf_mfu_magicwrite -w -- wipe a locked down tag by giving the password - script run mfu_magic -k ffffffff -w + script run hf_mfu_magicwrite -k ffffffff -w --read magic tag configuration - script run mfu_magic -c + script run hf_mfu_magicwrite -c -- set uid - script run mfu_magic -u 04112233445566 + script run hf_mfu_magicwrite -u 04112233445566 -- set pwd / pack - script run mfu_magic -p 11223344 -a 8080 + script run hf_mfu_magicwrite -p 11223344 -a 8080 -- set version to NTAG213 - script run mfu_magic -v 0004040201000f03 + script run hf_mfu_magicwrite -v 0004040201000f03 -- set signature - script run mfu_magic -s 1122334455667788990011223344556677889900112233445566778899001122 + script run hf_mfu_magicwrite -s 1122334455667788990011223344556677889900112233445566778899001122 ]] usage = [[ -script run mfu_magic -h -k -c -w -u -t -p -a -s -o -v +script run hf_mfu_easywrite -h -k -c -w -u -t -p -a -s -o -v ]] arguments = [[ -h this help From ea18586945c064865e185d0ca4a7b94db7ff6a59 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marlin=20S=C3=B6=C3=B6se?= <30473690+msoose@users.noreply.github.com> Date: Thu, 13 Aug 2020 11:03:02 -0600 Subject: [PATCH 0602/1047] Update and rename mfckeys.lua to hf_mf_keycheck.lua --- client/luascripts/{mfckeys.lua => hf_mf_keycheck.lua} | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename client/luascripts/{mfckeys.lua => hf_mf_keycheck.lua} (99%) diff --git a/client/luascripts/mfckeys.lua b/client/luascripts/hf_mf_keycheck.lua similarity index 99% rename from client/luascripts/mfckeys.lua rename to client/luascripts/hf_mf_keycheck.lua index bf0cccb45..d50bb00f9 100644 --- a/client/luascripts/mfckeys.lua +++ b/client/luascripts/hf_mf_keycheck.lua @@ -22,10 +22,10 @@ desc = ("This script implements Mifare check keys.\ It utilises a large list of default keys (currently %d keys).\ If you want to add more, just put them inside /lualibs/mfc_default_keys.lua\n"):format(#keylist) example = [[ - 1. script run mfckeys + 1. script run hf_mf_keycheck ]] usage = [[ -script run mfckeys [-p] +script run hf_mf_keycheck [-p] ]] arguments = [[ -h : this help From cf54f14849458089ecfdfc0b08217cce17dbe2b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marlin=20S=C3=B6=C3=B6se?= <30473690+msoose@users.noreply.github.com> Date: Thu, 13 Aug 2020 11:04:02 -0600 Subject: [PATCH 0603/1047] Update and rename luxeodump.lua to hf_mf_dump-laundromat.lua --- .../luascripts/{luxeodump.lua => hf_mf_dump-laundromat.lua} | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename client/luascripts/{luxeodump.lua => hf_mf_dump-laundromat.lua} (99%) diff --git a/client/luascripts/luxeodump.lua b/client/luascripts/hf_mf_dump-laundromat.lua similarity index 99% rename from client/luascripts/luxeodump.lua rename to client/luascripts/hf_mf_dump-laundromat.lua index 3efc8e7c0..7614bded4 100644 --- a/client/luascripts/luxeodump.lua +++ b/client/luascripts/hf_mf_dump-laundromat.lua @@ -17,10 +17,10 @@ desc = [[ This is a script that tries to dump and decrypt the data of a specific type of Mifare laundromat token. OBS! Tag must be on the antenna. ]] example = [[ - script run luxeodump + script run hf_mf_dump-laundromat ]] usage = [[ -script run luxeodump +script run hf_mf_dump-laundromat ]] arguments = [[ -h This help From 3fe14f95103fb7dff12ba34fab359000c0b23827 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marlin=20S=C3=B6=C3=B6se?= <30473690+msoose@users.noreply.github.com> Date: Thu, 13 Aug 2020 11:04:41 -0600 Subject: [PATCH 0604/1047] Update and rename lto_dump.lua to hf_14a_read-ltocm.lua --- client/luascripts/{lto_dump.lua => hf_14a_read-ltocm.lua} | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) rename client/luascripts/{lto_dump.lua => hf_14a_read-ltocm.lua} (97%) diff --git a/client/luascripts/lto_dump.lua b/client/luascripts/hf_14a_read-ltocm.lua similarity index 97% rename from client/luascripts/lto_dump.lua rename to client/luascripts/hf_14a_read-ltocm.lua index d2dd87762..f88cd2c67 100644 --- a/client/luascripts/lto_dump.lua +++ b/client/luascripts/hf_14a_read-ltocm.lua @@ -13,13 +13,13 @@ It starts from block 0 and ends at default block 254. ]] example = [[ -- default - script run lto_dump + script run hf_14a_read-ltocm -- stop at block 10 - script run lto_dump -e 10 + script run hf_14a_read-ltocm -e 10 ]] usage = [[ -script run lto_dump -h -s -e +script run hf_14a_read-ltocm -h -s -e ]] arguments = [[ h this helptext From a62286b470dad65aa22a006cfe73e18a7d3dd73e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marlin=20S=C3=B6=C3=B6se?= <30473690+msoose@users.noreply.github.com> Date: Thu, 13 Aug 2020 11:06:25 -0600 Subject: [PATCH 0605/1047] Update and rename lf_bulk.lua to lf_hid_bulkclone.lua --- client/luascripts/{lf_bulk.lua => lf_hid_bulkclone.lua} | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename client/luascripts/{lf_bulk.lua => lf_hid_bulkclone.lua} (97%) diff --git a/client/luascripts/lf_bulk.lua b/client/luascripts/lf_hid_bulkclone.lua similarity index 97% rename from client/luascripts/lf_bulk.lua rename to client/luascripts/lf_hid_bulkclone.lua index 709c992a4..14af4b553 100644 --- a/client/luascripts/lf_bulk.lua +++ b/client/luascripts/lf_hid_bulkclone.lua @@ -14,10 +14,10 @@ For more info, check the comments in the code ]] example = [[ -- - script run lf_bulk.lua -f 1 -b 1000 -c 10 + script run lf_hid_bulkclone.lua -f 1 -b 1000 -c 10 ]] usage = [[ -script run lf_bulk.lua -f facility -b base_id_num -c count +script run lf_hid_bulkclone.lua -f facility -b base_id_num -c count ]] arguments = [[ -h : this help From cb5ed3ec64bf669970fed44a0b4e78b8373f3be4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marlin=20S=C3=B6=C3=B6se?= <30473690+msoose@users.noreply.github.com> Date: Thu, 13 Aug 2020 11:07:06 -0600 Subject: [PATCH 0606/1047] Rename cmdline.lua to data_example_cmdline.lua --- client/luascripts/{cmdline.lua => data_example_cmdline.lua} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename client/luascripts/{cmdline.lua => data_example_cmdline.lua} (100%) diff --git a/client/luascripts/cmdline.lua b/client/luascripts/data_example_cmdline.lua similarity index 100% rename from client/luascripts/cmdline.lua rename to client/luascripts/data_example_cmdline.lua From 17cbfc9bad90e66336e71211881740c01cb01491 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marlin=20S=C3=B6=C3=B6se?= <30473690+msoose@users.noreply.github.com> Date: Thu, 13 Aug 2020 11:07:59 -0600 Subject: [PATCH 0607/1047] Update and rename hf_bruteforce.lua to hf_mfc_uidbruteforce.lua --- .../{hf_bruteforce.lua => hf_mfc_uidbruteforce.lua} | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) rename client/luascripts/{hf_bruteforce.lua => hf_mfc_uidbruteforce.lua} (91%) diff --git a/client/luascripts/hf_bruteforce.lua b/client/luascripts/hf_mfc_uidbruteforce.lua similarity index 91% rename from client/luascripts/hf_bruteforce.lua rename to client/luascripts/hf_mfc_uidbruteforce.lua index 1d3b00777..17a731e3a 100644 --- a/client/luascripts/hf_bruteforce.lua +++ b/client/luascripts/hf_mfc_uidbruteforce.lua @@ -13,14 +13,14 @@ This script bruteforces 4 or 7 byte UID Mifare classic card numbers. example =[[ Bruteforce a 4 byte UID Mifare classic card number, starting at 11223344, ending at 11223346. - script run hf_bruteforce -s 0x11223344 -e 0x11223346 -t 1000 -x mfc + script run hf_mfc_uidbruteforce -s 0x11223344 -e 0x11223346 -t 1000 -x mfc Bruteforce a 7 byte UID Mifare Ultralight card number, starting at 11223344556677, ending at 11223344556679. - script run hf_bruteforce -s 0x11223344556677 -e 0x11223344556679 -t 1000 -x mfu + script run hf_mfc_uidbruteforce -s 0x11223344556677 -e 0x11223344556679 -t 1000 -x mfu ]] usage = [[ -script run hf_bruteforce [-s ] [-e ] [-t ] [-x ] +script run hf_mfc_uidbruteforce [-s ] [-e ] [-t ] [-x ] ]] arguments = [[ -h this help From 16f8ccd8b3a98d5cbd744f3bdfe4f11ed2aba982 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marlin=20S=C3=B6=C3=B6se?= <30473690+msoose@users.noreply.github.com> Date: Thu, 13 Aug 2020 11:08:45 -0600 Subject: [PATCH 0608/1047] Update and rename emul2html.lua to data_emulatortohtml.lua --- client/luascripts/{emul2html.lua => data_emulatortohtml.lua} | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename client/luascripts/{emul2html.lua => data_emulatortohtml.lua} (95%) diff --git a/client/luascripts/emul2html.lua b/client/luascripts/data_emulatortohtml.lua similarity index 95% rename from client/luascripts/emul2html.lua rename to client/luascripts/data_emulatortohtml.lua index 533637669..19e57493d 100644 --- a/client/luascripts/emul2html.lua +++ b/client/luascripts/data_emulatortohtml.lua @@ -13,10 +13,10 @@ This script takes a dumpfile on EML (ASCII) format and produces a html based dum bit more easily analyzed. ]] example = [[ - script run emul2html -o dumpdata.eml + script run data_emulatortohtml -o dumpdata.eml ]] usage = [[ -script run htmldump [-i ] [-o ] +script run data_emulatortohtml [-i ] [-o ] ]] arguments = [[ -h This help From 29c8b3aa4ee8cb3d66a1542d95740d996abe201f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marlin=20S=C3=B6=C3=B6se?= <30473690+msoose@users.noreply.github.com> Date: Thu, 13 Aug 2020 11:11:26 -0600 Subject: [PATCH 0609/1047] Update and rename htmldump.lua to data_dumptohtml.lua --- client/luascripts/{htmldump.lua => data_dumptohtml.lua} | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename client/luascripts/{htmldump.lua => data_dumptohtml.lua} (95%) diff --git a/client/luascripts/htmldump.lua b/client/luascripts/data_dumptohtml.lua similarity index 95% rename from client/luascripts/htmldump.lua rename to client/luascripts/data_dumptohtml.lua index 2853d343b..0a6f9b1d1 100644 --- a/client/luascripts/htmldump.lua +++ b/client/luascripts/data_dumptohtml.lua @@ -13,10 +13,10 @@ This script takes a dumpfile and produces a html based dump, which is a bit more easily analyzed. ]] example = [[ - script run htmldump -o mifarecard_foo.html + script run data_dumptohtml -o mifarecard_foo.html ]] usage = [[ -script run htmldump [-i ] [-o ] +script run data_dumptohtml [-i ] [-o ] ]] arguments = [[ -h This help From 804fef2ab8da790e19786905417fcd10a0448b04 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Mon, 21 Sep 2020 14:54:31 +0200 Subject: [PATCH 0610/1047] data plot zoom around cursors --- client/src/proxguiqt.cpp | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/client/src/proxguiqt.cpp b/client/src/proxguiqt.cpp index 149018b9f..b96783844 100644 --- a/client/src/proxguiqt.cpp +++ b/client/src/proxguiqt.cpp @@ -669,12 +669,30 @@ void Plot::keyPressEvent(QKeyEvent *event) { case Qt::Key_Down: if (GraphPixelsPerPoint <= 50) { GraphPixelsPerPoint *= 2; + if (event->modifiers() & Qt::ShiftModifier) { + GraphStart += (CursorBPos - GraphStart) / 2; + } else { + GraphStart += (CursorAPos - GraphStart) / 2; + } } break; case Qt::Key_Up: if (GraphPixelsPerPoint >= 0.02) { GraphPixelsPerPoint /= 2; + if (event->modifiers() & Qt::ShiftModifier) { + if (GraphStart >= CursorBPos - GraphStart) { + GraphStart -= CursorBPos - GraphStart; + } else { + GraphStart = 0; + } + } else { + if (GraphStart >= CursorAPos - GraphStart) { + GraphStart -= CursorAPos - GraphStart; + } else { + GraphStart = 0; + } + } } break; @@ -720,8 +738,10 @@ void Plot::keyPressEvent(QKeyEvent *event) { puts("PLOT window keystrokes"); puts("\tKey Action"); puts("-----------------------------------------------------------------------"); - puts("\tUP Zoom out"); - puts("\tDOWN Zoom in"); + puts("\tUP Zoom out around yellow cursor"); + puts("\t UP Zoom out around purple cursor"); + puts("\tDOWN Zoom in around yellow cursor"); + puts("\t DOWN Zoom in around purple cursor"); puts("\tG Toggle grid display"); puts("\tH Show help"); puts("\tL Toggle lock grid relative to samples"); From 2482a8ec06441b7702af7bd947e38a99319b9603 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Mon, 21 Sep 2020 16:05:38 +0200 Subject: [PATCH 0611/1047] data plot: support mouse wheel for moving and zooming (+shift) --- client/src/proxguiqt.cpp | 112 ++++++++++++++++++++++++++------------- client/src/proxguiqt.h | 3 ++ 2 files changed, 77 insertions(+), 38 deletions(-) diff --git a/client/src/proxguiqt.cpp b/client/src/proxguiqt.cpp index b96783844..fa7a70194 100644 --- a/client/src/proxguiqt.cpp +++ b/client/src/proxguiqt.cpp @@ -637,6 +637,66 @@ void Plot::closeEvent(QCloseEvent *event) { g_useOverlays = false; } +void Plot::Zoom(float factor, int refX) { + if (factor >=1) { // Zoom in + if (GraphPixelsPerPoint <= 25 * factor) { + GraphPixelsPerPoint *= factor; + GraphStart += (refX - GraphStart) - ((refX - GraphStart) / factor); + } + } else { // Zoom out + if (GraphPixelsPerPoint >= 0.01 / factor) { + GraphPixelsPerPoint *= factor; + if (GraphStart >= ((refX - GraphStart) / factor) - (refX - GraphStart)) { + GraphStart -= ((refX - GraphStart) / factor) - (refX - GraphStart); + } else { + GraphStart = 0; + } + } + } +} + +void Plot::Move(int offset) { + if (offset > 0) { // Move right + if (GraphPixelsPerPoint < 20) { + GraphStart += offset; + } else { + GraphStart++; + } + } else { // Move left + if (GraphPixelsPerPoint < 20) { + if (GraphStart >= (uint)-offset) { + GraphStart += offset; + } else { + GraphStart = 0; + } + } else { + if (GraphStart > 0) { + GraphStart--; + } + } + } +} + +void Plot::wheelEvent(QWheelEvent *event) { + // event->delta() + // 120 => shift right 5% + // -120 => shift left 5% + const float move_offset = 0.05; + // -120+shift => zoom in 10% + // 120+shift => zoom out 10% + const float zoom_offset = 0.1; + if (event->modifiers() & Qt::ShiftModifier) { + int x = event->x(); + x -= WIDTH_AXES; + x = (int)(x / GraphPixelsPerPoint); + x += GraphStart; + Zoom(1.0-(float)event->delta()/(120/zoom_offset), x); + } else { + Move(PageWidth*(-(float)event->delta()/(120/move_offset))); + } + this->update(); +} + void Plot::mouseMoveEvent(QMouseEvent *event) { int x = event->x(); x -= WIDTH_AXES; @@ -667,55 +727,27 @@ void Plot::keyPressEvent(QKeyEvent *event) { switch (event->key()) { case Qt::Key_Down: - if (GraphPixelsPerPoint <= 50) { - GraphPixelsPerPoint *= 2; - if (event->modifiers() & Qt::ShiftModifier) { - GraphStart += (CursorBPos - GraphStart) / 2; - } else { - GraphStart += (CursorAPos - GraphStart) / 2; - } + if (event->modifiers() & Qt::ShiftModifier) { + Zoom(2, CursorBPos); + } else { + Zoom(2, CursorAPos); } break; case Qt::Key_Up: - if (GraphPixelsPerPoint >= 0.02) { - GraphPixelsPerPoint /= 2; - if (event->modifiers() & Qt::ShiftModifier) { - if (GraphStart >= CursorBPos - GraphStart) { - GraphStart -= CursorBPos - GraphStart; - } else { - GraphStart = 0; - } - } else { - if (GraphStart >= CursorAPos - GraphStart) { - GraphStart -= CursorAPos - GraphStart; - } else { - GraphStart = 0; - } - } + if (event->modifiers() & Qt::ShiftModifier) { + Zoom(0.5, CursorBPos); + } else { + Zoom(0.5, CursorAPos); } break; case Qt::Key_Right: - if (GraphPixelsPerPoint < 20) { - GraphStart += offset; - } else { - GraphStart++; - } + Move(offset); break; case Qt::Key_Left: - if (GraphPixelsPerPoint < 20) { - if (GraphStart >= offset) { - GraphStart -= offset; - } else { - GraphStart = 0; - } - } else { - if (GraphStart > 0) { - GraphStart--; - } - } + Move(-offset); break; case Qt::Key_G: @@ -740,8 +772,10 @@ void Plot::keyPressEvent(QKeyEvent *event) { puts("-----------------------------------------------------------------------"); puts("\tUP Zoom out around yellow cursor"); puts("\t UP Zoom out around purple cursor"); + puts("\t WHEEL MOUSE UP Zoom out around mouse cursor"); puts("\tDOWN Zoom in around yellow cursor"); puts("\t DOWN Zoom in around purple cursor"); + puts("\t WHEEL MOUSE DOWN Zoom in around mouse cursor"); puts("\tG Toggle grid display"); puts("\tH Show help"); puts("\tL Toggle lock grid relative to samples"); @@ -751,10 +785,12 @@ void Plot::keyPressEvent(QKeyEvent *event) { puts("\tPGUP Page left"); puts("\tPGDOWN Page right"); puts("\tLEFT Move left"); + puts("\tWHEEL MOUSE UP Move right"); puts("\t LEFT Move left 1 sample"); puts("\t LEFT Page left"); puts("\tLEFT MOUSE CLICK Set yellow cursor"); puts("\tRIGHT Move right"); + puts("\tWHEEL MOUSE DOWN Move right"); puts("\t RIGHT Move right 1 sample"); puts("\t RIGHT Page right"); puts("\tRIGHT MOUSE CLICK Set purple cursor"); diff --git a/client/src/proxguiqt.h b/client/src/proxguiqt.h index 7f9a82126..3264a2919 100644 --- a/client/src/proxguiqt.h +++ b/client/src/proxguiqt.h @@ -50,6 +50,9 @@ class Plot: public QWidget { protected: void paintEvent(QPaintEvent *event); void closeEvent(QCloseEvent *event); + void Zoom(float factor, int refX); + void Move(int offset); + void wheelEvent(QWheelEvent *event); void mouseMoveEvent(QMouseEvent *event); void mousePressEvent(QMouseEvent *event) { mouseMoveEvent(event); } void keyPressEvent(QKeyEvent *event); From 3ffd7384ae4372fce1ac1cc643ecd8beac27d4f1 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Mon, 21 Sep 2020 16:16:54 +0200 Subject: [PATCH 0612/1047] textual --- client/src/proxguiqt.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/client/src/proxguiqt.cpp b/client/src/proxguiqt.cpp index fa7a70194..58af96975 100644 --- a/client/src/proxguiqt.cpp +++ b/client/src/proxguiqt.cpp @@ -785,14 +785,14 @@ void Plot::keyPressEvent(QKeyEvent *event) { puts("\tPGUP Page left"); puts("\tPGDOWN Page right"); puts("\tLEFT Move left"); - puts("\tWHEEL MOUSE UP Move right"); - puts("\t LEFT Move left 1 sample"); - puts("\t LEFT Page left"); - puts("\tLEFT MOUSE CLICK Set yellow cursor"); puts("\tRIGHT Move right"); + puts("\tWHEEL MOUSE UP Move left"); puts("\tWHEEL MOUSE DOWN Move right"); + puts("\t LEFT Move left 1 sample"); puts("\t RIGHT Move right 1 sample"); + puts("\t LEFT Page left"); puts("\t RIGHT Page right"); + puts("\tLEFT MOUSE CLICK Set yellow cursor"); puts("\tRIGHT MOUSE CLICK Set purple cursor"); puts("-----------------------------------------------------------------------"); break; From 8bbda879566f41a516f18cd217d10940f2c04051 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Tue, 22 Sep 2020 00:15:43 +0200 Subject: [PATCH 0613/1047] Fix deprecated QWheelEvent.x() --- client/src/proxguiqt.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/src/proxguiqt.cpp b/client/src/proxguiqt.cpp index 58af96975..512b3369e 100644 --- a/client/src/proxguiqt.cpp +++ b/client/src/proxguiqt.cpp @@ -686,7 +686,7 @@ void Plot::wheelEvent(QWheelEvent *event) { // 120+shift => zoom out 10% const float zoom_offset = 0.1; if (event->modifiers() & Qt::ShiftModifier) { - int x = event->x(); + int x = event->position().x(); x -= WIDTH_AXES; x = (int)(x / GraphPixelsPerPoint); x += GraphStart; From 6a805eaf339547a346386e773f0a02d76db636c7 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Tue, 22 Sep 2020 00:32:20 +0200 Subject: [PATCH 0614/1047] Fix for both QT4 and QT5 --- client/src/proxguiqt.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/client/src/proxguiqt.cpp b/client/src/proxguiqt.cpp index 512b3369e..23e88343c 100644 --- a/client/src/proxguiqt.cpp +++ b/client/src/proxguiqt.cpp @@ -686,7 +686,11 @@ void Plot::wheelEvent(QWheelEvent *event) { // 120+shift => zoom out 10% const float zoom_offset = 0.1; if (event->modifiers() & Qt::ShiftModifier) { +#if QT_VERSION >= 0x050000 int x = event->position().x(); +#else + int x = event->x(); +#endif x -= WIDTH_AXES; x = (int)(x / GraphPixelsPerPoint); x += GraphStart; From 825b2aa7c3f7de3a4920b8b48fb952697ef864f6 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Tue, 22 Sep 2020 01:22:25 +0200 Subject: [PATCH 0615/1047] Fix for both QT4 and QT5 --- client/src/proxguiqt.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/client/src/proxguiqt.cpp b/client/src/proxguiqt.cpp index 23e88343c..ce30cd35d 100644 --- a/client/src/proxguiqt.cpp +++ b/client/src/proxguiqt.cpp @@ -694,7 +694,11 @@ void Plot::wheelEvent(QWheelEvent *event) { x -= WIDTH_AXES; x = (int)(x / GraphPixelsPerPoint); x += GraphStart; +#if QT_VERSION >= 0x050000 + Zoom(1.0-(float)event->angleDelta().y()/(120/zoom_offset), x); +#else Zoom(1.0-(float)event->delta()/(120/zoom_offset), x); +#endif } else { Move(PageWidth*(-(float)event->delta()/(120/move_offset))); } From bc5c03f27f4b67ac3fac23acaee8a263c46cadaa Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Tue, 22 Sep 2020 01:24:14 +0200 Subject: [PATCH 0616/1047] Fix for both QT4 and QT5 --- client/src/proxguiqt.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/client/src/proxguiqt.cpp b/client/src/proxguiqt.cpp index ce30cd35d..dd627d1f0 100644 --- a/client/src/proxguiqt.cpp +++ b/client/src/proxguiqt.cpp @@ -700,7 +700,11 @@ void Plot::wheelEvent(QWheelEvent *event) { Zoom(1.0-(float)event->delta()/(120/zoom_offset), x); #endif } else { +#if QT_VERSION >= 0x050000 + Move(PageWidth*(-(float)event->angleDelta().y()/(120/move_offset))); +#else Move(PageWidth*(-(float)event->delta()/(120/move_offset))); +#endif } this->update(); } From 7e36e4ff948a4284f5de98b7ce8ac8593893257d Mon Sep 17 00:00:00 2001 From: Gator96100 Date: Tue, 22 Sep 2020 02:40:37 +0200 Subject: [PATCH 0617/1047] Removed erroraction --- appveyor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index 2f145c598..d5ef4ac7f 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -276,7 +276,7 @@ build_script: ExecCheck "PS cmake Tests" - Receive-Job -Wait -Job $WSLjob -ErrorAction Stop + Receive-Job -Wait -Job $WSLjob test_script: From 75dab301536cccfa4378c969867c8adc1ec806bb Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Tue, 22 Sep 2020 10:14:51 +0200 Subject: [PATCH 0618/1047] Makefile: print Qt version --- client/Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/Makefile b/client/Makefile index ebf07c4b4..f3569e037 100644 --- a/client/Makefile +++ b/client/Makefile @@ -326,9 +326,9 @@ ifeq ($(SKIPQT),1) else ifeq ($(QT_FOUND),1) ifeq ($(QT5_FOUND),1) - $(info GUI support: QT5 found, enabled) + $(info GUI support: QT5 found, enabled ($(shell QT_SELECT=5 qmake -v 2>/dev/null|grep -o 'Qt version.*'))) else - $(info GUI support: QT4 found, enabled) + $(info GUI support: QT4 found, enabled ($(shell QT_SELECT=4 qmake -v 2>/dev/null|grep -o 'Qt version.*'))) endif else $(info GUI support: QT not found, disabled) From 5322b0c4a18341dd2d17301ab45e12c7e0e398f7 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Tue, 22 Sep 2020 11:30:05 +0200 Subject: [PATCH 0619/1047] Tuning QT version quirks --- client/src/proxguiqt.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/client/src/proxguiqt.cpp b/client/src/proxguiqt.cpp index dd627d1f0..b75fa462e 100644 --- a/client/src/proxguiqt.cpp +++ b/client/src/proxguiqt.cpp @@ -686,7 +686,8 @@ void Plot::wheelEvent(QWheelEvent *event) { // 120+shift => zoom out 10% const float zoom_offset = 0.1; if (event->modifiers() & Qt::ShiftModifier) { -#if QT_VERSION >= 0x050000 +// event->position doesn't exist in QT5.12.8, both exist in 5.14.2 and event->x doesn't exist in 5.15.0 +#if QT_VERSION >= 0x051400 int x = event->position().x(); #else int x = event->x(); @@ -694,13 +695,14 @@ void Plot::wheelEvent(QWheelEvent *event) { x -= WIDTH_AXES; x = (int)(x / GraphPixelsPerPoint); x += GraphStart; -#if QT_VERSION >= 0x050000 +// event->angleDelta doesn't exist in QT4, both exist in 5.12.8 and 5.14.2 and event->delta doesn't exist in 5.15.0 +#if QT_VERSION >= 0x051400 Zoom(1.0-(float)event->angleDelta().y()/(120/zoom_offset), x); #else Zoom(1.0-(float)event->delta()/(120/zoom_offset), x); #endif } else { -#if QT_VERSION >= 0x050000 +#if QT_VERSION >= 0x051400 Move(PageWidth*(-(float)event->angleDelta().y()/(120/move_offset))); #else Move(PageWidth*(-(float)event->delta()/(120/move_offset))); From 6414e00f37583da2a1633b317f1e277a16f9f4bb Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Tue, 22 Sep 2020 11:51:29 +0200 Subject: [PATCH 0620/1047] QT_VERSION in hex, sigh --- client/src/proxguiqt.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/client/src/proxguiqt.cpp b/client/src/proxguiqt.cpp index b75fa462e..2d988fc9e 100644 --- a/client/src/proxguiqt.cpp +++ b/client/src/proxguiqt.cpp @@ -687,7 +687,7 @@ void Plot::wheelEvent(QWheelEvent *event) { const float zoom_offset = 0.1; if (event->modifiers() & Qt::ShiftModifier) { // event->position doesn't exist in QT5.12.8, both exist in 5.14.2 and event->x doesn't exist in 5.15.0 -#if QT_VERSION >= 0x051400 +#if QT_VERSION >= 0x050d00 int x = event->position().x(); #else int x = event->x(); @@ -696,13 +696,13 @@ void Plot::wheelEvent(QWheelEvent *event) { x = (int)(x / GraphPixelsPerPoint); x += GraphStart; // event->angleDelta doesn't exist in QT4, both exist in 5.12.8 and 5.14.2 and event->delta doesn't exist in 5.15.0 -#if QT_VERSION >= 0x051400 +#if QT_VERSION >= 0x050d00 Zoom(1.0-(float)event->angleDelta().y()/(120/zoom_offset), x); #else Zoom(1.0-(float)event->delta()/(120/zoom_offset), x); #endif } else { -#if QT_VERSION >= 0x051400 +#if QT_VERSION >= 0x050d00 Move(PageWidth*(-(float)event->angleDelta().y()/(120/move_offset))); #else Move(PageWidth*(-(float)event->delta()/(120/move_offset))); From 610b456a97cfcc41338c8db92fa02a8a2b41456e Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Wed, 23 Sep 2020 00:11:11 +0200 Subject: [PATCH 0621/1047] fix lau scripts renaming --- armsrc/Standalone/hf_aveful.c | 2 +- armsrc/Standalone/hf_bog.c | 4 ++-- client/luascripts/data_example_parameters.lua | 4 ++-- client/luascripts/data_readpwdmem.lua | 2 +- client/luascripts/hf_lf_multi_bruteforce.lua | 4 ++-- client/luascripts/hf_mf_autopwn.lua | 4 ++-- client/luascripts/hf_mf_dump-laundromat.lua | 4 ++-- client/luascripts/hf_mf_keycheck.lua | 4 ++-- client/luascripts/hf_mf_magicrevive.lua | 2 +- client/luascripts/hf_mfc_uidbruteforce.lua | 4 ++-- client/luascripts/hf_ntag-3d.lua | 4 ++-- client/luascripts/lf_hid_bulkclone.lua | 2 +- client/luascripts/lf_t55xx_writetest.lua | 2 +- client/src/cmdhfmfu.c | 2 +- client/src/scripting.c | 2 +- doc/cheatsheet.md | 16 ++++++++-------- doc/magic_cards_notes.md | 8 ++++---- 17 files changed, 35 insertions(+), 35 deletions(-) diff --git a/armsrc/Standalone/hf_aveful.c b/armsrc/Standalone/hf_aveful.c index b59f1a34a..9a56be82c 100644 --- a/armsrc/Standalone/hf_aveful.c +++ b/armsrc/Standalone/hf_aveful.c @@ -187,7 +187,7 @@ void RunMod(void) { read_successful = false; break; } - // We're skipping 14 blocks (56 bytes) here, as that "[...] has version/signature/counter data here" according to comments on dumptoemul-mfu + // We're skipping 14 blocks (56 bytes) here, as that "[...] has version/signature/counter data here" according to comments on hf_mfu_dumptoemulator // When converting a bin, it's almost all 0 other than one 0x0F byte, and functionality seems to be unaffected if that byte is set to 0x00. emlSetMem_xt(dataout, 14 + i, 1, 4); Dbhexdump(4, dataout, 0); diff --git a/armsrc/Standalone/hf_bog.c b/armsrc/Standalone/hf_bog.c index 50e1d824f..d0cca6888 100644 --- a/armsrc/Standalone/hf_bog.c +++ b/armsrc/Standalone/hf_bog.c @@ -15,7 +15,7 @@ The retrieved sniffing session can be acquired by connecting the device to a client that supports the reconnect capability and issue 'hf 14a list'. In order to view the grabbed authentication attempts in the flash mem, -you can simply run 'script run read_pwd_mem' or just 'mem dump p l 256' +you can simply run 'script run data_readpwdmem' or just 'mem dump p l 256' from the client to view the stored quadlets. */ @@ -249,5 +249,5 @@ void RunMod(void) { LEDsoff(); SpinDelay(300); Dbprintf("- [ End ] -> You can take shell back ..."); - Dbprintf("- [ ! ] -> use 'script run read_pwd_mem_spiffs' to print passwords"); + Dbprintf("- [ ! ] -> use 'script run data_read_pwd_mem_spiffs' to print passwords"); } diff --git a/client/luascripts/data_example_parameters.lua b/client/luascripts/data_example_parameters.lua index f31bb607c..01555ca6a 100644 --- a/client/luascripts/data_example_parameters.lua +++ b/client/luascripts/data_example_parameters.lua @@ -4,7 +4,7 @@ local getopt = require('getopt') local ansicolors = require('ansicolors') copyright = '' -usage = 'script run parameters.lua -a 1 -blala -c -de' +usage = 'script run data_example_parameters.lua -a 1 -blala -c -de' author = 'Martin Holst Swende' version = 'v1.0.2' desc = [[ @@ -52,7 +52,7 @@ local function main(args) 5 parameters; two with values and three flags. The following should be valid: - script run parameters.lua -a 1 -blala -c -de + script run data_example_parameters.lua -a 1 -blala -c -de Notice two things: 1. 'blala' works just like 'b lala', both set 'b' to 'lala' diff --git a/client/luascripts/data_readpwdmem.lua b/client/luascripts/data_readpwdmem.lua index 29cd087fa..0f943e1ac 100644 --- a/client/luascripts/data_readpwdmem.lua +++ b/client/luascripts/data_readpwdmem.lua @@ -9,7 +9,7 @@ desc = [[ This script will read the flash memory of RDV4 and print the stored passwords/keys. It was meant to be used as a help tool after using the BogRun standalone mode before SPIFFS. -You should now use read_pwd_mem_spiffs instead after the updated BogRun standalone mode. +You should now use data_read_pwd_mem_spiffs instead after the updated BogRun standalone mode. (Iceman) script adapted to read and print keys in the default dictionary flashmemory sections. ]] diff --git a/client/luascripts/hf_lf_multi_bruteforce.lua b/client/luascripts/hf_lf_multi_bruteforce.lua index 733c3feab..69c3990f8 100644 --- a/client/luascripts/hf_lf_multi_bruteforce.lua +++ b/client/luascripts/hf_lf_multi_bruteforce.lua @@ -26,7 +26,7 @@ It uses both LF and HF simulations. -- Author note -- I wrote this as i was doing a PACS audit. This is far from complete, but is easily expandable. -- The idea was based on proxbrute, but i needed more options, and support for different readers. - -- I dont know LUA, so I used Brian Redbeards lf_bulk_program.lua script as a starting point, sorry if its kludgy. + -- I dont know LUA, so I used Brian Redbeards lf_hid_bulkclone.lua script as a starting point, sorry if its kludgy. ]] example = [[ @@ -110,7 +110,7 @@ local function isempty(s) return s == nil or s == '' end --- The code below was blatantly stolen from Brian Redbeard's lf_bulk_program.lua script +-- The code below was blatantly stolen from Brian Redbeard's lf_hid_bulkclone.lua script local function toBits(num, bits) bits = bits or math.max(1, select(2, math.frexp(num))) local t = {} diff --git a/client/luascripts/hf_mf_autopwn.lua b/client/luascripts/hf_mf_autopwn.lua index 831a1111e..a08406bbb 100644 --- a/client/luascripts/hf_mf_autopwn.lua +++ b/client/luascripts/hf_mf_autopwn.lua @@ -128,10 +128,10 @@ local function dump_tag(uid, numsectors) -- Save the global args, those are *our* arguments local myargs = args - -- Set the arguments for htmldump script + -- Set the arguments for data_dumptohtml script args =('-i %s.bin -o %s.html'):format(dumpfile, dumpfile) -- call it - require('htmldump') + require('data_dumptohtml') -- Set back args. Not that it's used, just for the karma... args = myargs diff --git a/client/luascripts/hf_mf_dump-laundromat.lua b/client/luascripts/hf_mf_dump-laundromat.lua index 7614bded4..64bbc0a66 100644 --- a/client/luascripts/hf_mf_dump-laundromat.lua +++ b/client/luascripts/hf_mf_dump-laundromat.lua @@ -1,7 +1,7 @@ --- -- This Lua script is designed to run with Iceman/RRG Proxmark3 fork --- Just copy luxeodump.lua to client/luascripts/ --- and run "script run luxeodump" +-- Just copy hf_mf_dump-laundromat.lua to client/luascripts/ +-- and run "script run hf_mf_dump-laundromat" -- requirements local cmds = require('commands') diff --git a/client/luascripts/hf_mf_keycheck.lua b/client/luascripts/hf_mf_keycheck.lua index d50bb00f9..59680cbe4 100644 --- a/client/luascripts/hf_mf_keycheck.lua +++ b/client/luascripts/hf_mf_keycheck.lua @@ -60,7 +60,7 @@ end -- waits for answer from pm3 device local function checkCommand(response) if not response then - print("Timeout while waiting for response. Increase TIMEOUT in mfckeys.lua to wait longer") + print("Timeout while waiting for response. Increase TIMEOUT in hf_mf_keycheck.lua to wait longer") return nil, "Timeout while waiting for device to respond" end @@ -237,7 +237,7 @@ local function perform_check(uid, numsectors) local end_time = os.time() print('') - print('[+] mfckeys - Checkkey execution time: '..os.difftime(end_time, start_time)..' sec') + print('[+] hf_mf_keycheck - Checkkey execution time: '..os.difftime(end_time, start_time)..' sec') core.fast_push_mode(false) diff --git a/client/luascripts/hf_mf_magicrevive.lua b/client/luascripts/hf_mf_magicrevive.lua index dcbb886e1..abbb45576 100644 --- a/client/luascripts/hf_mf_magicrevive.lua +++ b/client/luascripts/hf_mf_magicrevive.lua @@ -19,7 +19,7 @@ script run hf_mf_magicrevive [-h] [-u] ]] arguments = [[ -h this help - -u remagic a Ultralight tag w 7 bytes UID. + -u try to revive a bricked magic Ultralight tag w 7 bytes UID. ]] --- -- A debug printout-function diff --git a/client/luascripts/hf_mfc_uidbruteforce.lua b/client/luascripts/hf_mfc_uidbruteforce.lua index 17a731e3a..d1183e443 100644 --- a/client/luascripts/hf_mfc_uidbruteforce.lua +++ b/client/luascripts/hf_mfc_uidbruteforce.lua @@ -1,5 +1,5 @@ --- Run me like this (connected via USB): ./pm3 -l hf_bruteforce.lua --- Run me like this (connected via Blueshark addon): ./client/proxmark3 /dev/rfcomm0 -l ./hf_bruteforce.lua +-- Run me like this (connected via USB): ./pm3 -l hf_mfc_uidbruteforce.lua +-- Run me like this (connected via Blueshark addon): ./client/proxmark3 /dev/rfcomm0 -l ./hf_mfc_uidbruteforce.lua local getopt = require('getopt') local ansicolors = require('ansicolors') diff --git a/client/luascripts/hf_ntag-3d.lua b/client/luascripts/hf_ntag-3d.lua index 9b87d34ff..e46705bd1 100644 --- a/client/luascripts/hf_ntag-3d.lua +++ b/client/luascripts/hf_ntag-3d.lua @@ -221,13 +221,13 @@ local function configure_magic_ntag(uid) local pwd, pack = core.keygen_algo_d(uid) - -- Set the arguments for mfu_magic script v1.0.8 + -- Set the arguments for hf_mfu_magicwrite script v1.0.8 -- -t 12 == configure NTAG213F -- -u == set UID -- -p == set pwd -- -a == set pack args =('-t 12 -u %s -p %08X -a %04X'):format(uid, pwd, pack) - require('mfu_magic') + require('hf_mfu_magicwrite') -- Set back args. Not that it's used, just for the karma... args = myargs diff --git a/client/luascripts/lf_hid_bulkclone.lua b/client/luascripts/lf_hid_bulkclone.lua index 14af4b553..dae59a53c 100644 --- a/client/luascripts/lf_hid_bulkclone.lua +++ b/client/luascripts/lf_hid_bulkclone.lua @@ -1,5 +1,5 @@ -- --- lf_bulk.lua - A tool to clone a large number of tags at once. +-- lf_hid_bulkclone.lua - A tool to clone a large number of tags at once. -- Updated 2017-04-18 -- Updated 2018-02-20 iceman local getopt = require('getopt') diff --git a/client/luascripts/lf_t55xx_writetest.lua b/client/luascripts/lf_t55xx_writetest.lua index c7caaffda..cfe46d565 100644 --- a/client/luascripts/lf_t55xx_writetest.lua +++ b/client/luascripts/lf_t55xx_writetest.lua @@ -35,7 +35,7 @@ example = [[ 3. script run lf_t55xx_writetest -t PSK1 ]] usage = [[ -script run test_t55x7 [-h] [-t +script run lf_t55xx_writetest [-h] [-t ]] arguments = [[ -h this help diff --git a/client/src/cmdhfmfu.c b/client/src/cmdhfmfu.c index a9b03cb46..021063566 100644 --- a/client/src/cmdhfmfu.c +++ b/client/src/cmdhfmfu.c @@ -136,7 +136,7 @@ static int usage_hf_mfu_wrbl(void) { static int usage_hf_mfu_eload(void) { PrintAndLogEx(NORMAL, "It loads emul dump from the file " _YELLOW_("`filename.eml`")); - PrintAndLogEx(NORMAL, "Hint: See " _YELLOW_("`script run dumptoemul-mfu`") " to convert the .bin to the eml"); + PrintAndLogEx(NORMAL, "Hint: See " _YELLOW_("`script run hf_mfu_dumptoemulator`") " to convert the .bin to the eml"); PrintAndLogEx(NORMAL, "Usage: hf mfu eload u [numblocks]"); PrintAndLogEx(NORMAL, " Options:"); PrintAndLogEx(NORMAL, " h : this help"); diff --git a/client/src/scripting.c b/client/src/scripting.c index 64dd0f84a..fed896970 100644 --- a/client/src/scripting.c +++ b/client/src/scripting.c @@ -55,7 +55,7 @@ static int l_clearCommandBuffer(lua_State *L) { } /** - * Enable / Disable fast push mode for lua scripts like mfckeys + * Enable / Disable fast push mode for lua scripts like hf_mf_keycheck * The following params expected: * *@brief l_fast_push_mode diff --git a/doc/cheatsheet.md b/doc/cheatsheet.md index a032d620d..856203092 100644 --- a/doc/cheatsheet.md +++ b/doc/cheatsheet.md @@ -233,7 +233,7 @@ Options --- i : Specifies the dump-file (input). If omitted, 'dumpdata.bin' is used -pm3 --> script run dumptoemul -i dumpdata.bin +pm3 --> script run hf_mf_dumptoemulator -i dumpdata.bin ``` Write to MIFARE block @@ -285,7 +285,7 @@ Simulate MIFARE Sequence ``` pm3 --> hf mf chk *1 ? d mfc_default_keys pm3 --> hf mf dump 1 -pm3 --> script run dumptoemul -i dumpdata.bin +pm3 --> script run hf_mf_dumptoemulator -i dumpdata.bin pm3 --> hf mf eload 353C2AA6 pm3 --> hf mf sim u 353c2aa6 ``` @@ -305,19 +305,19 @@ pm3 --> hf mfu info Clone MIFARE Ultralight EV1 Sequence ``` pm3 --> hf mfu dump k FFFFFFFF -pm3 --> script run dumptoemul-mfu -i hf-mfu-XXXX-dump.bin -o hf-mfu-XXXX-dump.eml +pm3 --> script run hf_mfu_dumptoemulator -i hf-mfu-XXXX-dump.bin -o hf-mfu-XXXX-dump.eml pm3 --> hf mfu eload u hf-mfu-XXXX-dump.eml pm3 --> hf mfu sim t 7 u hf-mfu-XXXX-dump.eml ``` Bruteforce MIFARE Classic card numbers from 11223344 to 11223346 ``` -pm3 --> script run hf_bruteforce -s 0x11223344 -e 0x11223346 -t 1000 -x mfc +pm3 --> script run hf_mfc_uidbruteforce -s 0x11223344 -e 0x11223346 -t 1000 -x mfc ``` Bruteforce MIFARE Ultralight EV1 card numbers from 11223344556677 to 11223344556679 ``` -pm3 --> script run hf_bruteforce -s 0x11223344556677 -e 0x11223344556679 -t 1000 -x mfu +pm3 --> script run hf_mfc_uidbruteforce -s 0x11223344556677 -e 0x11223344556679 -t 1000 -x mfu ``` ## Wiegand manipulation @@ -563,7 +563,7 @@ Options -i Specifies the dump-file (input). If omitted, 'dumpdata.bin' is used -o Specifies the output file. If omitted, .eml is used -pm3 --> script run dumptoemul -i xxxxxxxxxxxxxx.bin +pm3 --> script run hf_mf_dumptoemulator -i xxxxxxxxxxxxxx.bin ``` Convert .eml to .bin @@ -573,7 +573,7 @@ Options -i Specifies the dump-file (input). If omitted, 'dumpdata.eml' is used -o Specifies the output file. If omitted, .bin is used -pm3 --> script run emul2dump -i myfile.eml -o myfile.bin +pm3 --> script run data_emulatortohtml -i myfile.eml -o myfile.bin ``` Format Mifare card @@ -585,7 +585,7 @@ Options -a The new access bytes that will be written to the card -x Execute the commands aswell -pm3 --> script run formatMifare -k FFFFFFFFFFFF -n FFFFFFFFFFFF -x +pm3 --> script run hf_mf_format -k FFFFFFFFFFFF -n FFFFFFFFFFFF -x ``` ## Memory diff --git a/doc/magic_cards_notes.md b/doc/magic_cards_notes.md index c02b59e53..2fc63a1d2 100644 --- a/doc/magic_cards_notes.md +++ b/doc/magic_cards_notes.md @@ -195,7 +195,7 @@ hf mf csetuid 11223344 0044 18 ``` ``` -script run remagic +script run run hf_mf_magicrevive ``` To execute commands manually: @@ -518,14 +518,14 @@ Only 7b versions ### Proxmark3 commands ``` -script run ul_uid -h +script run hf_mfu_setuid -h ``` When "soft-bricked" (by writing invalid data in block0), these ones may help: ``` hf 14a config h -script run remagic -u +script run run hf_mf_magicrevive -u ``` ## MIFARE Ultralight DirectWrite @@ -723,7 +723,7 @@ Emulates partially UL EV1 48k/128k, NTAG210, NTAG212, NTAGI2C 1K/2K, NTAGI2C 1K ### Proxmark3 commands ``` -script run mfu_magic -h +script run hf_mfu_magicwrite -h ``` # DESFire From b166dc166a47381086f0f2c1f184239b378c48f1 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Wed, 23 Sep 2020 00:16:01 +0200 Subject: [PATCH 0622/1047] scripts: move examples and tests in subdirs --- .../example_cmdline.lua} | 0 .../example_parameters.lua} | 8 ++++---- client/luascripts/{ => tests}/lf_t55xx_defaultask.lua | 0 client/luascripts/{ => tests}/lf_t55xx_defaultbi.lua | 0 client/luascripts/{ => tests}/lf_t55xx_defaultfsk.lua | 0 client/luascripts/{ => tests}/lf_t55xx_defaultpsk.lua | 0 client/luascripts/{ => tests}/lf_t55xx_writetest.lua | 0 7 files changed, 4 insertions(+), 4 deletions(-) rename client/luascripts/{data_example_cmdline.lua => examples/example_cmdline.lua} (100%) rename client/luascripts/{data_example_parameters.lua => examples/example_parameters.lua} (87%) rename client/luascripts/{ => tests}/lf_t55xx_defaultask.lua (100%) rename client/luascripts/{ => tests}/lf_t55xx_defaultbi.lua (100%) rename client/luascripts/{ => tests}/lf_t55xx_defaultfsk.lua (100%) rename client/luascripts/{ => tests}/lf_t55xx_defaultpsk.lua (100%) rename client/luascripts/{ => tests}/lf_t55xx_writetest.lua (100%) diff --git a/client/luascripts/data_example_cmdline.lua b/client/luascripts/examples/example_cmdline.lua similarity index 100% rename from client/luascripts/data_example_cmdline.lua rename to client/luascripts/examples/example_cmdline.lua diff --git a/client/luascripts/data_example_parameters.lua b/client/luascripts/examples/example_parameters.lua similarity index 87% rename from client/luascripts/data_example_parameters.lua rename to client/luascripts/examples/example_parameters.lua index 01555ca6a..0925f7d2c 100644 --- a/client/luascripts/data_example_parameters.lua +++ b/client/luascripts/examples/example_parameters.lua @@ -4,7 +4,7 @@ local getopt = require('getopt') local ansicolors = require('ansicolors') copyright = '' -usage = 'script run data_example_parameters.lua -a 1 -blala -c -de' +usage = 'script run example_parameters.lua -a 1 -blala -c -de' author = 'Martin Holst Swende' version = 'v1.0.2' desc = [[ @@ -12,10 +12,10 @@ This is an example script to demonstrate handle parameters in scripts. For more info, check the comments in the code ]] example = [[ - 1. script run data_example_parameters -a mytestparam_input -c + 1. script run example_parameters -a mytestparam_input -c ]] usage = [[ -script run data_example_parameters [-h] [-a ] [-b ] [-c] [-d] [-e] +script run example_parameters [-h] [-a ] [-b ] [-c] [-d] [-e] ]] arguments = [[ -h This help @@ -52,7 +52,7 @@ local function main(args) 5 parameters; two with values and three flags. The following should be valid: - script run data_example_parameters.lua -a 1 -blala -c -de + script run example_parameters.lua -a 1 -blala -c -de Notice two things: 1. 'blala' works just like 'b lala', both set 'b' to 'lala' diff --git a/client/luascripts/lf_t55xx_defaultask.lua b/client/luascripts/tests/lf_t55xx_defaultask.lua similarity index 100% rename from client/luascripts/lf_t55xx_defaultask.lua rename to client/luascripts/tests/lf_t55xx_defaultask.lua diff --git a/client/luascripts/lf_t55xx_defaultbi.lua b/client/luascripts/tests/lf_t55xx_defaultbi.lua similarity index 100% rename from client/luascripts/lf_t55xx_defaultbi.lua rename to client/luascripts/tests/lf_t55xx_defaultbi.lua diff --git a/client/luascripts/lf_t55xx_defaultfsk.lua b/client/luascripts/tests/lf_t55xx_defaultfsk.lua similarity index 100% rename from client/luascripts/lf_t55xx_defaultfsk.lua rename to client/luascripts/tests/lf_t55xx_defaultfsk.lua diff --git a/client/luascripts/lf_t55xx_defaultpsk.lua b/client/luascripts/tests/lf_t55xx_defaultpsk.lua similarity index 100% rename from client/luascripts/lf_t55xx_defaultpsk.lua rename to client/luascripts/tests/lf_t55xx_defaultpsk.lua diff --git a/client/luascripts/lf_t55xx_writetest.lua b/client/luascripts/tests/lf_t55xx_writetest.lua similarity index 100% rename from client/luascripts/lf_t55xx_writetest.lua rename to client/luascripts/tests/lf_t55xx_writetest.lua From fb3f49c2f081c8382c8df1f43185be36c6ff6d32 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Wed, 23 Sep 2020 00:21:42 +0200 Subject: [PATCH 0623/1047] Rename mfc_gen3_writer.lua into hf_mf_gen3_writer.lua --- .../luascripts/{mfc_gen3_writer.lua => hf_mf_gen3_writer.lua} | 3 +-- doc/magic_cards_notes.md | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) rename client/luascripts/{mfc_gen3_writer.lua => hf_mf_gen3_writer.lua} (98%) diff --git a/client/luascripts/mfc_gen3_writer.lua b/client/luascripts/hf_mf_gen3_writer.lua similarity index 98% rename from client/luascripts/mfc_gen3_writer.lua rename to client/luascripts/hf_mf_gen3_writer.lua index 9e78b2aee..7795ac26c 100644 --- a/client/luascripts/mfc_gen3_writer.lua +++ b/client/luascripts/hf_mf_gen3_writer.lua @@ -12,8 +12,7 @@ local read14a = require('read14a') --[[ ---Suggestions of improvement: --- Add support another types of dumps: BIN, JSON ---- Maybe it will be not only as `mfc_gen3_writer`, like a universal dump manager. ---- Add undependence from the operation system. At the moment code not working in Linux. +--- Maybe it will be not only as `hf_mf_gen3_writer`, like a universal dump manager. --- Hide system messages when you writing a dumps, replace it to some of like [#####----------] 40% -- iceman notes: diff --git a/doc/magic_cards_notes.md b/doc/magic_cards_notes.md index 2fc63a1d2..252d1fe2b 100644 --- a/doc/magic_cards_notes.md +++ b/doc/magic_cards_notes.md @@ -443,7 +443,7 @@ hf mf gen3freeze ``` See also ``` -script run mfc_gen3_writer -h +script run hf_mf_gen3_writer -h ``` Equivalent: From ada9c76f675c38c9b19b072841d5f0cd406aafa1 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Wed, 23 Sep 2020 00:23:29 +0200 Subject: [PATCH 0624/1047] Rename iso15_magic.lua into hf_15_magic.lua --- client/luascripts/{iso15_magic.lua => hf_15_magic.lua} | 6 +++--- doc/magic_cards_notes.md | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) rename client/luascripts/{iso15_magic.lua => hf_15_magic.lua} (95%) diff --git a/client/luascripts/iso15_magic.lua b/client/luascripts/hf_15_magic.lua similarity index 95% rename from client/luascripts/iso15_magic.lua rename to client/luascripts/hf_15_magic.lua index 94f1d8f97..173cf1ee7 100644 --- a/client/luascripts/iso15_magic.lua +++ b/client/luascripts/hf_15_magic.lua @@ -15,12 +15,12 @@ example = [[ -- ISO15693 slix magic tag - script run iso15_magic -u E004013344556677 + script run hf_15_magic -u E004013344556677 - script run iso15_magic -u E004013344556677 -a + script run hf_15_magic -u E004013344556677 -a ]] usage = [[ -script run iso15_magic -h -u +script run hf_15_magic -h -u ]] arguments = [[ -h : this help diff --git a/doc/magic_cards_notes.md b/doc/magic_cards_notes.md index 252d1fe2b..ffa10f04c 100644 --- a/doc/magic_cards_notes.md +++ b/doc/magic_cards_notes.md @@ -840,5 +840,5 @@ hf 15 csetuid E011223344556677 ``` or (ignore errors): ``` -script run iso15_magic -u E004013344556677 +script run hf_15_magic -u E004013344556677 ``` From 8cea2d4c9e67e8e651b4aeee2cb9d5d82847df78 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Wed, 23 Sep 2020 00:27:16 +0200 Subject: [PATCH 0625/1047] mv script --- client/luascripts/{ => tests}/hf_read.lua | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename client/luascripts/{ => tests}/hf_read.lua (100%) diff --git a/client/luascripts/hf_read.lua b/client/luascripts/tests/hf_read.lua similarity index 100% rename from client/luascripts/hf_read.lua rename to client/luascripts/tests/hf_read.lua From 39a01e023d1fb8e2b01aaf5a239a048390e80a9d Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Wed, 23 Sep 2020 00:28:33 +0200 Subject: [PATCH 0626/1047] typo --- client/luascripts/hf_14a_raw.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/luascripts/hf_14a_raw.lua b/client/luascripts/hf_14a_raw.lua index 3b747aa17..35d2cff87 100644 --- a/client/luascripts/hf_14a_raw.lua +++ b/client/luascripts/hf_14a_raw.lua @@ -7,7 +7,7 @@ copyright = '' author = "Martin Holst Swende" version = 'v1.0.2' desc = [[ -This is a script to allow raw 1444a commands to be sent and received. +This is a script to allow raw 14443a commands to be sent and received. ]] example = [[ # 1. Connect and don't disconnect From f286ed9794bff697b40fb82dbc472c45e1bcff4d Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Wed, 23 Sep 2020 00:31:28 +0200 Subject: [PATCH 0627/1047] Rename hf_lf_multi_bruteforce.lua -> multi_bruteforce.lua --- .../{hf_lf_multi_bruteforce.lua => multi_bruteforce.lua} | 4 ++-- client/luascripts/{ => tests}/data_tracetest.lua | 0 2 files changed, 2 insertions(+), 2 deletions(-) rename client/luascripts/{hf_lf_multi_bruteforce.lua => multi_bruteforce.lua} (98%) rename client/luascripts/{ => tests}/data_tracetest.lua (100%) diff --git a/client/luascripts/hf_lf_multi_bruteforce.lua b/client/luascripts/multi_bruteforce.lua similarity index 98% rename from client/luascripts/hf_lf_multi_bruteforce.lua rename to client/luascripts/multi_bruteforce.lua index 69c3990f8..ef1edc697 100644 --- a/client/luascripts/hf_lf_multi_bruteforce.lua +++ b/client/luascripts/multi_bruteforce.lua @@ -32,10 +32,10 @@ It uses both LF and HF simulations. example = [[ -- (the above example would bruteforce pyramid tags, starting at 10:1000, ending at 10:991, and waiting 1 second between each card) - script run hf_lf_multi_bruteforce -r pyramid -f 10 -b 1000 -c 10 -t 1 -d down + script run multi_bruteforce -r pyramid -f 10 -b 1000 -c 10 -t 1 -d down ]] usage = [[ -script run hf_lf_multi_bruteforce -r rfid_tag -f facility_code -b base_card_number -c count -t timeout -d direction +script run multi_bruteforce -r rfid_tag -f facility_code -b base_card_number -c count -t timeout -d direction ]] arguments = [[ -h this help diff --git a/client/luascripts/data_tracetest.lua b/client/luascripts/tests/data_tracetest.lua similarity index 100% rename from client/luascripts/data_tracetest.lua rename to client/luascripts/tests/data_tracetest.lua From 6946a558e3660e3e7710efbd0edb8e7d14992191 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Wed, 23 Sep 2020 00:35:30 +0200 Subject: [PATCH 0628/1047] Rename hf_mfm_dumpdecrypt.lua -> hf_mf_mini_dumpdecrypt.lua --- ..._mfm_dumpdecrypt.lua => hf_mf_mini_dumpdecrypt.lua} | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) rename client/luascripts/{hf_mfm_dumpdecrypt.lua => hf_mf_mini_dumpdecrypt.lua} (98%) diff --git a/client/luascripts/hf_mfm_dumpdecrypt.lua b/client/luascripts/hf_mf_mini_dumpdecrypt.lua similarity index 98% rename from client/luascripts/hf_mfm_dumpdecrypt.lua rename to client/luascripts/hf_mf_mini_dumpdecrypt.lua index 4801aeb96..ec6006ed2 100644 --- a/client/luascripts/hf_mfm_dumpdecrypt.lua +++ b/client/luascripts/hf_mf_mini_dumpdecrypt.lua @@ -16,19 +16,19 @@ This is a script to dump and decrypt the data of a specific type of Mifare Mini The dump is decrypted. If a raw dump is wanted, use the -r parameter ]] example = [[ - script run hf_mfm_dumpdecrypt + script run hf_mf_mini_dumpdecrypt -- selftest - script run hf_mfm_dumpdecrypt -t + script run hf_mf_mini_dumpdecrypt -t -- Generate raw dump, into json. - script run hf_mfm_dumpdecrypt -r + script run hf_mf_mini_dumpdecrypt -r -- load file - script run hf_mfm_dumpdecrypt -i dumpdata.json + script run hf_mf_mini_dumpdecrypt -i dumpdata.json ]] usage = [[ -script run hf_mfm_dumpdecrypt -h -t -r -d -e -v -i dumpdata.json +script run hf_mf_mini_dumpdecrypt -h -t -r -d -e -v -i dumpdata.json ]] arguments = [[ h this helptext From 8cda2e3a2995c879528ab03ddffa270da6e35380 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Wed, 23 Sep 2020 00:37:38 +0200 Subject: [PATCH 0629/1047] Rename hf_mfc_uidbruteforce.lua -> hf_mf_uidbruteforce.lua --- ...f_mfc_uidbruteforce.lua => hf_mf_uidbruteforce.lua} | 10 +++++----- doc/cheatsheet.md | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) rename client/luascripts/{hf_mfc_uidbruteforce.lua => hf_mf_uidbruteforce.lua} (88%) diff --git a/client/luascripts/hf_mfc_uidbruteforce.lua b/client/luascripts/hf_mf_uidbruteforce.lua similarity index 88% rename from client/luascripts/hf_mfc_uidbruteforce.lua rename to client/luascripts/hf_mf_uidbruteforce.lua index d1183e443..461e8aad3 100644 --- a/client/luascripts/hf_mfc_uidbruteforce.lua +++ b/client/luascripts/hf_mf_uidbruteforce.lua @@ -1,5 +1,5 @@ --- Run me like this (connected via USB): ./pm3 -l hf_mfc_uidbruteforce.lua --- Run me like this (connected via Blueshark addon): ./client/proxmark3 /dev/rfcomm0 -l ./hf_mfc_uidbruteforce.lua +-- Run me like this (connected via USB): ./pm3 -l hf_mf_uidbruteforce.lua +-- Run me like this (connected via Blueshark addon): ./client/proxmark3 /dev/rfcomm0 -l ./hf_mf_uidbruteforce.lua local getopt = require('getopt') local ansicolors = require('ansicolors') @@ -13,14 +13,14 @@ This script bruteforces 4 or 7 byte UID Mifare classic card numbers. example =[[ Bruteforce a 4 byte UID Mifare classic card number, starting at 11223344, ending at 11223346. - script run hf_mfc_uidbruteforce -s 0x11223344 -e 0x11223346 -t 1000 -x mfc + script run hf_mf_uidbruteforce -s 0x11223344 -e 0x11223346 -t 1000 -x mfc Bruteforce a 7 byte UID Mifare Ultralight card number, starting at 11223344556677, ending at 11223344556679. - script run hf_mfc_uidbruteforce -s 0x11223344556677 -e 0x11223344556679 -t 1000 -x mfu + script run hf_mf_uidbruteforce -s 0x11223344556677 -e 0x11223344556679 -t 1000 -x mfu ]] usage = [[ -script run hf_mfc_uidbruteforce [-s ] [-e ] [-t ] [-x ] +script run hf_mf_uidbruteforce [-s ] [-e ] [-t ] [-x ] ]] arguments = [[ -h this help diff --git a/doc/cheatsheet.md b/doc/cheatsheet.md index 856203092..e2c4e9326 100644 --- a/doc/cheatsheet.md +++ b/doc/cheatsheet.md @@ -312,12 +312,12 @@ pm3 --> hf mfu sim t 7 u hf-mfu-XXXX-dump.eml Bruteforce MIFARE Classic card numbers from 11223344 to 11223346 ``` -pm3 --> script run hf_mfc_uidbruteforce -s 0x11223344 -e 0x11223346 -t 1000 -x mfc +pm3 --> script run hf_mf_uidbruteforce -s 0x11223344 -e 0x11223346 -t 1000 -x mfc ``` Bruteforce MIFARE Ultralight EV1 card numbers from 11223344556677 to 11223344556679 ``` -pm3 --> script run hf_mfc_uidbruteforce -s 0x11223344556677 -e 0x11223344556679 -t 1000 -x mfu +pm3 --> script run hf_mf_uidbruteforce -s 0x11223344556677 -e 0x11223344556679 -t 1000 -x mfu ``` ## Wiegand manipulation From 9dc2f38ac8f24ac5185501cf16a5a297ed943941 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Wed, 23 Sep 2020 00:40:01 +0200 Subject: [PATCH 0630/1047] Rename hf_mf_dump-laundromat.lua -> hf_mf_dump-luxeo.lua --- .../{hf_mf_dump-laundromat.lua => hf_mf_dump-luxeo.lua} | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) rename client/luascripts/{hf_mf_dump-laundromat.lua => hf_mf_dump-luxeo.lua} (98%) diff --git a/client/luascripts/hf_mf_dump-laundromat.lua b/client/luascripts/hf_mf_dump-luxeo.lua similarity index 98% rename from client/luascripts/hf_mf_dump-laundromat.lua rename to client/luascripts/hf_mf_dump-luxeo.lua index 64bbc0a66..3ee86ecbc 100644 --- a/client/luascripts/hf_mf_dump-laundromat.lua +++ b/client/luascripts/hf_mf_dump-luxeo.lua @@ -1,7 +1,7 @@ --- -- This Lua script is designed to run with Iceman/RRG Proxmark3 fork --- Just copy hf_mf_dump-laundromat.lua to client/luascripts/ --- and run "script run hf_mf_dump-laundromat" +-- Just copy hf_mf_dump-luxeo.lua to client/luascripts/ +-- and run "script run hf_mf_dump-luxeo" -- requirements local cmds = require('commands') @@ -17,10 +17,10 @@ desc = [[ This is a script that tries to dump and decrypt the data of a specific type of Mifare laundromat token. OBS! Tag must be on the antenna. ]] example = [[ - script run hf_mf_dump-laundromat + script run hf_mf_dump-luxeo ]] usage = [[ -script run hf_mf_dump-laundromat +script run hf_mf_dump-luxeo ]] arguments = [[ -h This help From 3909053cee387a834c89ca7498e24cb387991c72 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Wed, 23 Sep 2020 00:46:57 +0200 Subject: [PATCH 0631/1047] Rename data_readpwdmem.lua -> mem_readpwd.lua and data_readpwdmem-spiffs.lua -> mem_spiffs_readpwd.lua --- armsrc/Standalone/hf_bog.c | 2 +- .../{data_readpwdmem.lua => mem_readpwd.lua} | 14 +++++++------- ...eadpwdmem-spiffs.lua => mem_spiffs_readpwd.lua} | 8 ++++---- 3 files changed, 12 insertions(+), 12 deletions(-) rename client/luascripts/{data_readpwdmem.lua => mem_readpwd.lua} (93%) rename client/luascripts/{data_readpwdmem-spiffs.lua => mem_spiffs_readpwd.lua} (92%) diff --git a/armsrc/Standalone/hf_bog.c b/armsrc/Standalone/hf_bog.c index d0cca6888..1d766aa52 100644 --- a/armsrc/Standalone/hf_bog.c +++ b/armsrc/Standalone/hf_bog.c @@ -15,7 +15,7 @@ The retrieved sniffing session can be acquired by connecting the device to a client that supports the reconnect capability and issue 'hf 14a list'. In order to view the grabbed authentication attempts in the flash mem, -you can simply run 'script run data_readpwdmem' or just 'mem dump p l 256' +you can simply run 'script run mem_readpwd' or just 'mem dump p l 256' from the client to view the stored quadlets. */ diff --git a/client/luascripts/data_readpwdmem.lua b/client/luascripts/mem_readpwd.lua similarity index 93% rename from client/luascripts/data_readpwdmem.lua rename to client/luascripts/mem_readpwd.lua index 0f943e1ac..82343b943 100644 --- a/client/luascripts/data_readpwdmem.lua +++ b/client/luascripts/mem_readpwd.lua @@ -15,25 +15,25 @@ You should now use data_read_pwd_mem_spiffs instead after the updated BogRun sta ]] example = [[ -- This will scan the first 256 bytes of flash memory for stored passwords - script run data_readpwdmem + script run mem_readpwd -- This will scan 256 bytes of flash memory at offset 64 for stored passwords - script run data_readpwdmem -o 64 + script run mem_readpwd -o 64 -- This will scan 32 bytes of flash memory at offset 64 for stored passwords - script run data_readpwdmem -o 64 -l 32 + script run mem_readpwd -o 64 -l 32 -- This will print the stored Mifare dictionary keys - script run data_readpwdmem -m + script run mem_readpwd -m -- This will print the stored t55xx dictionary passwords - script run data_readpwdmem -t + script run mem_readpwd -t -- This will print the stored iClass dictionary keys - script run data_readpwdmem -i + script run mem_readpwd -i ]] usage = [[ - script run data_readpwdmem [-h] [-o ] [-l ] [-k ] [-m] [-t] [-i] + script run mem_readpwd [-h] [-o ] [-l ] [-k ] [-m] [-t] [-i] ]] arguments = [[ -h : this help diff --git a/client/luascripts/data_readpwdmem-spiffs.lua b/client/luascripts/mem_spiffs_readpwd.lua similarity index 92% rename from client/luascripts/data_readpwdmem-spiffs.lua rename to client/luascripts/mem_spiffs_readpwd.lua index 1ad6876c0..b4995e406 100644 --- a/client/luascripts/data_readpwdmem-spiffs.lua +++ b/client/luascripts/mem_spiffs_readpwd.lua @@ -11,16 +11,16 @@ It was meant to be used as a help tool after using the BogRun standalone mode. ]] example = [[ -- This will read the hf_bog.log file in SPIFFS and print the stored passwords - script run data_readpwdmem-spiffs + script run mem_spiffs_readpwd -- This will read the other.log file in SPIFFS and print the stored passwords - script run data_readpwdmem-spiffs -f other.log + script run mem_spiffs_readpwd -f other.log -- This will delete the hf_bog.log file from SPIFFS - script run data_readpwdmem-spiffs -r + script run mem_spiffs_readpwd -r ]] usage = [[ - script run data_readpwdmem-spiffs [-h] [-f ] [-r] + script run mem_spiffs_readpwd [-h] [-f ] [-r] ]] arguments = [[ -h : this help From a82dba61fa82c408c3c7cee989a8d5559e3a7cc0 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Wed, 23 Sep 2020 01:00:05 +0200 Subject: [PATCH 0632/1047] Rename offline mf conversion scripts --- ...data_mfc_accessdecode.lua => data_mf_accessdecode.lua} | 4 ++-- .../{hf_mf_dumptoemulator.lua => data_mf_bin2eml.lua} | 4 ++-- .../{data_dumptohtml.lua => data_mf_bin2html.lua} | 4 ++-- .../{data_emulatortodump.lua => data_mf_eml2bin.lua} | 8 ++++---- .../{data_emulatortohtml.lua => data_mf_eml2html.lua} | 4 ++-- client/luascripts/hf_mf_autopwn.lua | 4 ++-- doc/cheatsheet.md | 8 ++++---- 7 files changed, 18 insertions(+), 18 deletions(-) rename client/luascripts/{data_mfc_accessdecode.lua => data_mf_accessdecode.lua} (97%) rename client/luascripts/{hf_mf_dumptoemulator.lua => data_mf_bin2eml.lua} (96%) rename client/luascripts/{data_dumptohtml.lua => data_mf_bin2html.lua} (95%) rename client/luascripts/{data_emulatortodump.lua => data_mf_eml2bin.lua} (90%) rename client/luascripts/{data_emulatortohtml.lua => data_mf_eml2html.lua} (95%) diff --git a/client/luascripts/data_mfc_accessdecode.lua b/client/luascripts/data_mf_accessdecode.lua similarity index 97% rename from client/luascripts/data_mfc_accessdecode.lua rename to client/luascripts/data_mf_accessdecode.lua index 9c65036bb..551080b5d 100644 --- a/client/luascripts/data_mfc_accessdecode.lua +++ b/client/luascripts/data_mf_accessdecode.lua @@ -8,10 +8,10 @@ desc = [[ This script tries to decode Mifare Classic Access bytes ]] example = [[ - 1. script run data_mfc_accessdecode -a 7F0F0869 + 1. script run data_mf_accessdecode -a 7F0F0869 ]] usage = [[ -script run data_mfc_accessdecode [-h] [-a ] +script run data_mf_accessdecode [-h] [-a ] ]] arguments = [[ -h : this help diff --git a/client/luascripts/hf_mf_dumptoemulator.lua b/client/luascripts/data_mf_bin2eml.lua similarity index 96% rename from client/luascripts/hf_mf_dumptoemulator.lua rename to client/luascripts/data_mf_bin2eml.lua index 2c7106928..ef48ead16 100644 --- a/client/luascripts/hf_mf_dumptoemulator.lua +++ b/client/luascripts/data_mf_bin2eml.lua @@ -12,10 +12,10 @@ This script takes a dumpfile from 'hf mf dump' and converts it to a format that by the emulator ]] example = [[ - script run hf_mf_dumptoemulator -i dumpdata-foobar.bin + script run data_mf_bin2eml -i dumpdata-foobar.bin ]] usage = [[ -script run hf_mf_dumptoemulator [-i ] [-o ] +script run data_mf_bin2eml [-i ] [-o ] ]] arguments = [[ -h This help diff --git a/client/luascripts/data_dumptohtml.lua b/client/luascripts/data_mf_bin2html.lua similarity index 95% rename from client/luascripts/data_dumptohtml.lua rename to client/luascripts/data_mf_bin2html.lua index 0a6f9b1d1..c33b4782b 100644 --- a/client/luascripts/data_dumptohtml.lua +++ b/client/luascripts/data_mf_bin2html.lua @@ -13,10 +13,10 @@ This script takes a dumpfile and produces a html based dump, which is a bit more easily analyzed. ]] example = [[ - script run data_dumptohtml -o mifarecard_foo.html + script run data_mf_bin2html -o mifarecard_foo.html ]] usage = [[ -script run data_dumptohtml [-i ] [-o ] +script run data_mf_bin2html [-i ] [-o ] ]] arguments = [[ -h This help diff --git a/client/luascripts/data_emulatortodump.lua b/client/luascripts/data_mf_eml2bin.lua similarity index 90% rename from client/luascripts/data_emulatortodump.lua rename to client/luascripts/data_mf_eml2bin.lua index e40875529..d31b58418 100644 --- a/client/luascripts/data_emulatortodump.lua +++ b/client/luascripts/data_mf_eml2bin.lua @@ -10,12 +10,12 @@ desc =[[ This script takes an dumpfile in EML (ASCII) format and converts it to the PM3 dumpbin file to be used with `hf mf restore` ]] example =[[ - 1. script run data_emulatortodump - 2. script run data_emulatortodump -i myfile.eml - 3. script run data_emulatortodump -i myfile.eml -o myfile.bin + 1. script run data_mf_eml2bin + 2. script run data_mf_eml2bin -i myfile.eml + 3. script run data_mf_eml2bin -i myfile.eml -o myfile.bin ]] usage = [[ -script run data_emulatortodump [-i ] [-o ] +script run data_mf_eml2bin [-i ] [-o ] ]] arguments = [[ -h This help diff --git a/client/luascripts/data_emulatortohtml.lua b/client/luascripts/data_mf_eml2html.lua similarity index 95% rename from client/luascripts/data_emulatortohtml.lua rename to client/luascripts/data_mf_eml2html.lua index 19e57493d..9b2edbe87 100644 --- a/client/luascripts/data_emulatortohtml.lua +++ b/client/luascripts/data_mf_eml2html.lua @@ -13,10 +13,10 @@ This script takes a dumpfile on EML (ASCII) format and produces a html based dum bit more easily analyzed. ]] example = [[ - script run data_emulatortohtml -o dumpdata.eml + script run data_mf_eml2html -o dumpdata.eml ]] usage = [[ -script run data_emulatortohtml [-i ] [-o ] +script run data_mf_eml2html [-i ] [-o ] ]] arguments = [[ -h This help diff --git a/client/luascripts/hf_mf_autopwn.lua b/client/luascripts/hf_mf_autopwn.lua index a08406bbb..f7ea2a832 100644 --- a/client/luascripts/hf_mf_autopwn.lua +++ b/client/luascripts/hf_mf_autopwn.lua @@ -128,10 +128,10 @@ local function dump_tag(uid, numsectors) -- Save the global args, those are *our* arguments local myargs = args - -- Set the arguments for data_dumptohtml script + -- Set the arguments for data_mf_bin2html script args =('-i %s.bin -o %s.html'):format(dumpfile, dumpfile) -- call it - require('data_dumptohtml') + require('data_mf_bin2html') -- Set back args. Not that it's used, just for the karma... args = myargs diff --git a/doc/cheatsheet.md b/doc/cheatsheet.md index e2c4e9326..7da56cbcd 100644 --- a/doc/cheatsheet.md +++ b/doc/cheatsheet.md @@ -233,7 +233,7 @@ Options --- i : Specifies the dump-file (input). If omitted, 'dumpdata.bin' is used -pm3 --> script run hf_mf_dumptoemulator -i dumpdata.bin +pm3 --> script run data_mf_bin2eml -i dumpdata.bin ``` Write to MIFARE block @@ -285,7 +285,7 @@ Simulate MIFARE Sequence ``` pm3 --> hf mf chk *1 ? d mfc_default_keys pm3 --> hf mf dump 1 -pm3 --> script run hf_mf_dumptoemulator -i dumpdata.bin +pm3 --> script run data_mf_bin2eml -i dumpdata.bin pm3 --> hf mf eload 353C2AA6 pm3 --> hf mf sim u 353c2aa6 ``` @@ -563,7 +563,7 @@ Options -i Specifies the dump-file (input). If omitted, 'dumpdata.bin' is used -o Specifies the output file. If omitted, .eml is used -pm3 --> script run hf_mf_dumptoemulator -i xxxxxxxxxxxxxx.bin +pm3 --> script run data_mf_bin2eml -i xxxxxxxxxxxxxx.bin ``` Convert .eml to .bin @@ -573,7 +573,7 @@ Options -i Specifies the dump-file (input). If omitted, 'dumpdata.eml' is used -o Specifies the output file. If omitted, .bin is used -pm3 --> script run data_emulatortohtml -i myfile.eml -o myfile.bin +pm3 --> script run data_mf_eml2bin -i myfile.eml -o myfile.bin ``` Format Mifare card From 4c339f61f5012146ae731dc0e2d0f096f34fe205 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Wed, 23 Sep 2020 01:28:28 +0200 Subject: [PATCH 0633/1047] Rename tnp3 scripts --- ...mf_clone-tnp3.lua => hf_mf_tnp3_clone.lua} | 10 +++++----- ...f_mf_dump-tnp3.lua => hf_mf_tnp3_dump.lua} | 20 +++++++++---------- .../{hf_mf_autosim.lua => hf_mf_tnp3_sim.lua} | 8 ++++---- 3 files changed, 19 insertions(+), 19 deletions(-) rename client/luascripts/{hf_mf_clone-tnp3.lua => hf_mf_tnp3_clone.lua} (96%) rename client/luascripts/{hf_mf_dump-tnp3.lua => hf_mf_tnp3_dump.lua} (94%) rename client/luascripts/{hf_mf_autosim.lua => hf_mf_tnp3_sim.lua} (98%) diff --git a/client/luascripts/hf_mf_clone-tnp3.lua b/client/luascripts/hf_mf_tnp3_clone.lua similarity index 96% rename from client/luascripts/hf_mf_clone-tnp3.lua rename to client/luascripts/hf_mf_tnp3_clone.lua index 59b954023..490c49242 100644 --- a/client/luascripts/hf_mf_clone-tnp3.lua +++ b/client/luascripts/hf_mf_tnp3_clone.lua @@ -18,14 +18,14 @@ desc = [[ This script will try to make a barebones clone of a tnp3 tag on to a magic generation1 card. ]] example = [[ - script run hf_mf_clone-tnp3 - script run hf_mf_clone-tnp3 -h - script run hf_mf_clone-tnp3 -l - script run hf_mf_clone-tnp3 -t aa00 -s 0030 + script run hf_mf_tnp3_clone + script run hf_mf_tnp3_clone -h + script run hf_mf_tnp3_clone -l + script run hf_mf_tnp3_clone -t aa00 -s 0030 ]] usage = [[ -script run hf_mf_clone-tnp3 [-h] [-t ] [-s ] +script run hf_mf_tnp3_clone [-h] [-t ] [-s ] ]] arguments = [[ -h : this help diff --git a/client/luascripts/hf_mf_dump-tnp3.lua b/client/luascripts/hf_mf_tnp3_dump.lua similarity index 94% rename from client/luascripts/hf_mf_dump-tnp3.lua rename to client/luascripts/hf_mf_tnp3_dump.lua index 6cfddd0bf..ee59046eb 100644 --- a/client/luascripts/hf_mf_dump-tnp3.lua +++ b/client/luascripts/hf_mf_tnp3_dump.lua @@ -16,18 +16,18 @@ This script will try to dump the contents of a Mifare TNP3xxx card. It will need a valid KeyA in order to find the other keys and decode the card. ]] example = [[ - script run hf_mf_dump-tnp3 - script run hf_mf_dump-tnp3 -n - script run hf_mf_dump-tnp3 -p - script run hf_mf_dump-tnp3 -k aabbccddeeff - script run hf_mf_dump-tnp3 -k aabbccddeeff -n - script run hf_mf_dump-tnp3 -o myfile - script run hf_mf_dump-tnp3 -n -o myfile - script run hf_mf_dump-tnp3 -p -o myfile - script run hf_mf_dump-tnp3 -k aabbccddeeff -n -o myfile + script run hf_mf_tnp3_dump + script run hf_mf_tnp3_dump -n + script run hf_mf_tnp3_dump -p + script run hf_mf_tnp3_dump -k aabbccddeeff + script run hf_mf_tnp3_dump -k aabbccddeeff -n + script run hf_mf_tnp3_dump -o myfile + script run hf_mf_tnp3_dump -n -o myfile + script run hf_mf_tnp3_dump -p -o myfile + script run hf_mf_tnp3_dump -k aabbccddeeff -n -o myfile ]] usage = [[ -script run hf_mf_dump-tnp3 [-h] [-k ] [-n] [-p] [-o ] +script run hf_mf_tnp3_dump [-h] [-k ] [-n] [-p] [-o ] ]] arguments = [[ -h : this help diff --git a/client/luascripts/hf_mf_autosim.lua b/client/luascripts/hf_mf_tnp3_sim.lua similarity index 98% rename from client/luascripts/hf_mf_autosim.lua rename to client/luascripts/hf_mf_tnp3_sim.lua index 255b4e00b..dded9327a 100644 --- a/client/luascripts/hf_mf_autosim.lua +++ b/client/luascripts/hf_mf_tnp3_sim.lua @@ -18,12 +18,12 @@ For an experimental mode, it tries to manipulate some data. At last it sends all data to the PM3 device memory where it can be used in the command "hf mf sim" ]] example = [[ - 1. script run hf_mf_autosim - 2. script run hf_mf_autosim -m - 3. script run hf_mf_autosim -m -i myfile + 1. script run hf_mf_tnp3_sim + 2. script run hf_mf_tnp3_sim -m + 3. script run hf_mf_tnp3_sim -m -i myfile ]] usage = [[ -script run hf_mf_autosim [-h] [-m] [-i ] +script run hf_mf_tnp3_sim [-h] [-m] [-i ] ]] arguments = [[ -h : this help From 49b413106f97427bf1a0cab981b2bb17fdc70bb4 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Wed, 23 Sep 2020 01:35:27 +0200 Subject: [PATCH 0634/1047] Rename legic scripts --- client/luascripts/{legic.lua => hf_legic.lua} | 2 +- .../{legic_buffer2card.lua => hf_legic_buffer2card.lua} | 4 ++-- client/luascripts/{legic_clone.lua => hf_legic_clone.lua} | 8 ++++---- 3 files changed, 7 insertions(+), 7 deletions(-) rename client/luascripts/{legic.lua => hf_legic.lua} (99%) rename client/luascripts/{legic_buffer2card.lua => hf_legic_buffer2card.lua} (95%) rename client/luascripts/{legic_clone.lua => hf_legic_clone.lua} (98%) diff --git a/client/luascripts/legic.lua b/client/luascripts/hf_legic.lua similarity index 99% rename from client/luascripts/legic.lua rename to client/luascripts/hf_legic.lua index 393cc9e52..1715bf400 100644 --- a/client/luascripts/legic.lua +++ b/client/luascripts/hf_legic.lua @@ -96,7 +96,7 @@ Known issues; needs to be fixed: * last byte in last segment is handled incorrectly when it is the last bytes on the card itself (MIM256: => byte 256) --]] -example = "script run legic" +example = "script run hf_legic" author = "Mosci, uhei" version = "1.0.4" diff --git a/client/luascripts/legic_buffer2card.lua b/client/luascripts/hf_legic_buffer2card.lua similarity index 95% rename from client/luascripts/legic_buffer2card.lua rename to client/luascripts/hf_legic_buffer2card.lua index d0a018d83..eac8f1ed2 100644 --- a/client/luascripts/legic_buffer2card.lua +++ b/client/luascripts/hf_legic_buffer2card.lua @@ -11,10 +11,10 @@ desc = This is a script which writes value 0x01 to bytes from position 0x07 until 0xFF on a Legic Prime Tag (MIM256 or MIM1024) -- (created with 'hf legic save my_dump.hex') -- ]] example = [[ - script run legic_buffer2card + script run hf_legic_buffer2card ]] usage = [[ -script run legic_buffer2card -h +script run hf_legic_buffer2card -h ]] arguments = [[ -h - Help text diff --git a/client/luascripts/legic_clone.lua b/client/luascripts/hf_legic_clone.lua similarity index 98% rename from client/luascripts/legic_clone.lua rename to client/luascripts/hf_legic_clone.lua index 0f03157e5..28a95bca7 100644 --- a/client/luascripts/legic_clone.lua +++ b/client/luascripts/hf_legic_clone.lua @@ -18,7 +18,7 @@ local ansicolors = require('ansicolors') simplest usage: Dump a legic tag with 'hf legic dump' place your 'empty' tag on the reader and run - 'script run legic_clone -i orig.bin -w' + 'script run hf_legic_clone -i orig.bin -w' you will see some output like: @@ -95,11 +95,11 @@ This is a script which creates a clone-dump of a dump from a LEGIC Prime Tag (MI Create a dump by running `hf legic dump`. ]] example = [[ - script run legic_clone -i my_dump.bin -o my_clone.bin -c f8 - script run legic_clone -i my_dump.bin -d -s + script run hf_legic_clone -i my_dump.bin -o my_clone.bin -c f8 + script run hf_legic_clone -i my_dump.bin -d -s ]] usage = [[ -script run legic_clone [-h] [-i ] [-o ] [-c ] [-d] [-s] [-w] +script run hf_legic_clone [-h] [-i ] [-o ] [-c ] [-d] [-s] [-w] ]] arguments = [[ required : From f6d7890802ba66f1dc5bc8277f8f4695d331538c Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Wed, 23 Sep 2020 11:49:51 +0200 Subject: [PATCH 0635/1047] initialize mful dumps --- client/src/cmdhfmfu.c | 1 + 1 file changed, 1 insertion(+) diff --git a/client/src/cmdhfmfu.c b/client/src/cmdhfmfu.c index 021063566..2a642d4c8 100644 --- a/client/src/cmdhfmfu.c +++ b/client/src/cmdhfmfu.c @@ -1984,6 +1984,7 @@ static int CmdHF14AMfUDump(const char *Cmd) { iso14a_card_select_t card; mfu_dump_t dump_file_data; + memset(&dump_file_data, 0, sizeof(dump_file_data)); uint8_t get_version[] = {0, 0, 0, 0, 0, 0, 0, 0}; uint8_t get_counter_tearing[][4] = {{0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}; uint8_t get_signature[32]; From 7d4c6e8faa604e5c8b2a49050d52402da24639b0 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Wed, 23 Sep 2020 12:25:30 +0200 Subject: [PATCH 0636/1047] Fix Gen3 detection bug against MFUL --- armsrc/appmain.c | 3 +- armsrc/mifarecmd.c | 51 ++++++++++++++++++---------------- armsrc/mifarecmd.h | 2 +- client/src/cmdhf14a.c | 45 +++++++++++++++--------------- client/src/mifare/mifarehost.c | 7 +++-- client/src/mifare/mifarehost.h | 2 +- 6 files changed, 58 insertions(+), 52 deletions(-) diff --git a/armsrc/appmain.c b/armsrc/appmain.c index 6a315999c..42161d738 100644 --- a/armsrc/appmain.c +++ b/armsrc/appmain.c @@ -1355,7 +1355,8 @@ static void PacketReceived(PacketCommandNG *packet) { break; } case CMD_HF_MIFARE_CIDENT: { - MifareCIdent(); + bool is_mfc = packet->data.asBytes[0]; + MifareCIdent(is_mfc); break; } // Gen 3 magic cards diff --git a/armsrc/mifarecmd.c b/armsrc/mifarecmd.c index 3344368cf..76cbea5c1 100644 --- a/armsrc/mifarecmd.c +++ b/armsrc/mifarecmd.c @@ -2236,14 +2236,14 @@ void MifareCGetBlock(uint32_t arg0, uint32_t arg1, uint8_t *datain) { OnSuccessMagic(); } -void MifareCIdent(void) { +void MifareCIdent(bool is_mfc) { // variables uint8_t isGen = 0; uint8_t rec[1] = {0x00}; uint8_t recpar[1] = {0x00}; uint8_t rats[4] = { ISO14443A_CMD_RATS, 0x80, 0x31, 0x73 }; - uint8_t rdbl[4] = { ISO14443A_CMD_READBLOCK, 0xF0, 0x8D, 0x5f}; - uint8_t rdbl0[4] = { ISO14443A_CMD_READBLOCK, 0x00, 0x02, 0xa8}; + uint8_t rdblf0[4] = { ISO14443A_CMD_READBLOCK, 0xF0, 0x8D, 0x5f}; + uint8_t rdbl00[4] = { ISO14443A_CMD_READBLOCK, 0x00, 0x02, 0xa8}; uint8_t *par = BigBuf_malloc(MAX_PARITY_SIZE); uint8_t *buf = BigBuf_malloc(PM3_CMD_DATA_SIZE); uint8_t *uid = BigBuf_malloc(10); @@ -2323,29 +2323,32 @@ void MifareCIdent(void) { goto OUT; } - // magic ntag test - FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); - SpinDelay(40); - iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN); - res = iso14443a_select_card(uid, NULL, &cuid, true, 0, true); - if (res == 2) { - ReaderTransmit(rdbl, sizeof(rdbl), NULL); - res = ReaderReceive(buf, par); - if (res == 18) { - isGen = MAGIC_NTAG21X; + if (! is_mfc) { + // magic ntag test + FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); + SpinDelay(40); + iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN); + res = iso14443a_select_card(uid, NULL, &cuid, true, 0, true); + if (res == 2) { + ReaderTransmit(rdblf0, sizeof(rdblf0), NULL); + res = ReaderReceive(buf, par); + if (res == 18) { + isGen = MAGIC_NTAG21X; + } } } - - // magic MFC Gen3 test - FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); - SpinDelay(40); - iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN); - res = iso14443a_select_card(uid, NULL, &cuid, true, 0, true); - if (res == 2) { - ReaderTransmit(rdbl0, sizeof(rdbl0), NULL); - res = ReaderReceive(buf, par); - if (res == 18) { - isGen = MAGIC_GEN_3; + if (is_mfc) { + // magic MFC Gen3 test + FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); + SpinDelay(40); + iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN); + res = iso14443a_select_card(uid, NULL, &cuid, true, 0, true); + if (res == 2) { + ReaderTransmit(rdbl00, sizeof(rdbl00), NULL); + res = ReaderReceive(buf, par); + if (res == 18) { + isGen = MAGIC_GEN_3; + } } } }; diff --git a/armsrc/mifarecmd.h b/armsrc/mifarecmd.h index b024d2d1b..58cec9b49 100644 --- a/armsrc/mifarecmd.h +++ b/armsrc/mifarecmd.h @@ -41,7 +41,7 @@ int MifareECardLoadExt(uint8_t sectorcnt, uint8_t keytype); void MifareCSetBlock(uint32_t arg0, uint32_t arg1, uint8_t *datain); // Work with "magic Chinese" card void MifareCGetBlock(uint32_t arg0, uint32_t arg1, uint8_t *datain); -void MifareCIdent(void); // is "magic chinese" card? +void MifareCIdent(bool is_mfc); // is "magic chinese" card? void MifareHasStaticNonce(void); // Has the tag a static nonce? int DoGen3Cmd(uint8_t *cmd, uint8_t cmd_len); diff --git a/client/src/cmdhf14a.c b/client/src/cmdhf14a.c index fbd9fc618..cc6a7caab 100644 --- a/client/src/cmdhf14a.c +++ b/client/src/cmdhf14a.c @@ -1979,32 +1979,33 @@ int infoHF14A(bool verbose, bool do_nack_test, bool do_aid_search) { } int isMagic = 0; - if (isMifareClassic || isMifareUltralight) { - isMagic = detect_classic_magic(); + if (isMifareClassic) { + isMagic = detect_mf_magic(true); + } + if (isMifareUltralight) { + isMagic = detect_mf_magic(false); + } + if (isMifareClassic) { + int res = detect_classic_static_nonce(); + if (res == NONCE_STATIC) + PrintAndLogEx(SUCCESS, "Static nonce: " _YELLOW_("yes")); - if (isMifareClassic) { + if (res == NONCE_FAIL && verbose) + PrintAndLogEx(SUCCESS, "Static nonce: " _RED_("read failed")); - int res = detect_classic_static_nonce(); - if (res == NONCE_STATIC) - PrintAndLogEx(SUCCESS, "Static nonce: " _YELLOW_("yes")); + if (res == NONCE_NORMAL) { - if (res == NONCE_FAIL && verbose) - PrintAndLogEx(SUCCESS, "Static nonce: " _RED_("read failed")); + // not static + res = detect_classic_prng(); + if (res == 1) + PrintAndLogEx(SUCCESS, "Prng detection: " _GREEN_("weak")); + else if (res == 0) + PrintAndLogEx(SUCCESS, "Prng detection: " _YELLOW_("hard")); + else + PrintAndLogEx(FAILED, "Prng detection: " _RED_("fail")); - if (res == NONCE_NORMAL) { - - // not static - res = detect_classic_prng(); - if (res == 1) - PrintAndLogEx(SUCCESS, "Prng detection: " _GREEN_("weak")); - else if (res == 0) - PrintAndLogEx(SUCCESS, "Prng detection: " _YELLOW_("hard")); - else - PrintAndLogEx(FAILED, "Prng detection: " _RED_("fail")); - - if (do_nack_test) - detect_classic_nackbug(false); - } + if (do_nack_test) + detect_classic_nackbug(false); } } diff --git a/client/src/mifare/mifarehost.c b/client/src/mifare/mifarehost.c index 032c9eccf..78fca3487 100644 --- a/client/src/mifare/mifarehost.c +++ b/client/src/mifare/mifarehost.c @@ -1154,13 +1154,14 @@ int detect_classic_static_nonce(void) { return NONCE_FAIL; } -/* try to see if card responses to "chinese magic backdoor" commands. */ -int detect_classic_magic(void) { +/* try to see if card responses to "Chinese magic backdoor" commands. */ +int detect_mf_magic(bool is_mfc) { uint8_t isGeneration = 0; PacketResponseNG resp; clearCommandBuffer(); - SendCommandNG(CMD_HF_MIFARE_CIDENT, NULL, 0); + uint8_t payload[] = { is_mfc }; + SendCommandNG(CMD_HF_MIFARE_CIDENT, payload, sizeof(payload)); if (WaitForResponseTimeout(CMD_HF_MIFARE_CIDENT, &resp, 1500)) { if (resp.status == PM3_SUCCESS) isGeneration = resp.data.asBytes[0]; diff --git a/client/src/mifare/mifarehost.h b/client/src/mifare/mifarehost.h index 1e693174e..7a3535257 100644 --- a/client/src/mifare/mifarehost.h +++ b/client/src/mifare/mifarehost.h @@ -88,7 +88,7 @@ int tryDecryptWord(uint32_t nt, uint32_t ar_enc, uint32_t at_enc, uint8_t *data, int detect_classic_prng(void); int detect_classic_nackbug(bool verbose); -int detect_classic_magic(void); +int detect_mf_magic(bool is_mfc); int detect_classic_static_nonce(void); void mf_crypto1_decrypt(struct Crypto1State *pcs, uint8_t *data, int len, bool isEncrypted); #endif From 7481d73263086194fd30774d9b331ea3f7c6fb83 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Wed, 23 Sep 2020 21:03:08 +0200 Subject: [PATCH 0637/1047] typo --- client/src/cmdhf15.c | 2 +- client/src/cmdhfmfu.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/client/src/cmdhf15.c b/client/src/cmdhf15.c index 421e7488f..7b76ba792 100644 --- a/client/src/cmdhf15.c +++ b/client/src/cmdhf15.c @@ -380,7 +380,7 @@ static int nxp_15693_print_signature(uint8_t *uid, uint8_t *signature) { {"NXP Public key", "04A748B6A632FBEE2C0897702B33BEA1C074998E17B84ACA04FF267E5D2C91F6DC"}, {"NXP Ultralight Ev1", "0490933BDCD6E99B4E255E3DA55389A827564E11718E017292FAF23226A96614B8"}, {"NXP NTAG21x (2013)", "04494E1A386D3D3CFE3DC10E5DE68A499B1C202DB5B132393E89ED19FE5BE8BC61"}, - {"MICRON Public key", "04f971eda742a4a80d32dcf6a814a707cc3dc396d35902f72929fdcd698b3468f2"}, + {"MIKRON Public key", "04f971eda742a4a80d32dcf6a814a707cc3dc396d35902f72929fdcd698b3468f2"}, {"Spark1 Public key", "04d64bb732c0d214e7ec580736acf847284b502c25c0f7f2fa86aace1dada4387a"}, }; /* diff --git a/client/src/cmdhfmfu.c b/client/src/cmdhfmfu.c index 2a642d4c8..a25569f95 100644 --- a/client/src/cmdhfmfu.c +++ b/client/src/cmdhfmfu.c @@ -880,7 +880,7 @@ static int ulev1_print_signature(TagTypeUL_t tagtype, uint8_t *uid, uint8_t *sig {"NXP Public key", "04A748B6A632FBEE2C0897702B33BEA1C074998E17B84ACA04FF267E5D2C91F6DC"}, {"NXP Ultralight Ev1", "0490933BDCD6E99B4E255E3DA55389A827564E11718E017292FAF23226A96614B8"}, {"NXP NTAG21x (2013)", "04494E1A386D3D3CFE3DC10E5DE68A499B1C202DB5B132393E89ED19FE5BE8BC61"}, - {"MICRON Public key", "04f971eda742a4a80d32dcf6a814a707cc3dc396d35902f72929fdcd698b3468f2"}, + {"MIKRON Public key", "04f971eda742a4a80d32dcf6a814a707cc3dc396d35902f72929fdcd698b3468f2"}, }; /* From ea8bfacb5786261d063c98fc9d653f3b60fd6747 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Thu, 24 Sep 2020 01:00:34 +0200 Subject: [PATCH 0638/1047] textual --- client/src/cmdhf15.c | 8 +++++--- client/src/cmdhfmfdes.c | 13 +++++++++---- client/src/cmdhfmfp.c | 9 +++++++-- client/src/cmdhfmfu.c | 8 +++++--- 4 files changed, 26 insertions(+), 12 deletions(-) diff --git a/client/src/cmdhf15.c b/client/src/cmdhf15.c index 7b76ba792..35d3be6e3 100644 --- a/client/src/cmdhf15.c +++ b/client/src/cmdhf15.c @@ -437,17 +437,19 @@ static int nxp_15693_print_signature(uint8_t *uid, uint8_t *signature) { } PrintAndLogEx(NORMAL, ""); + PrintAndLogEx(INFO, "--- " _CYAN_("Tag Signature")); if (is_valid == false || i == ARRAYLEN(nxp_15693_public_keys)) { - PrintAndLogEx(SUCCESS, "Signature verification " _RED_("failed")); + PrintAndLogEx(INFO, " Elliptic curve parameters: NID_secp128r1"); + PrintAndLogEx(INFO, " TAG IC Signature: %s", sprint_hex(signature, 32)); + PrintAndLogEx(SUCCESS, " Signature verification: " _RED_("failed")); return PM3_ESOFT; } - PrintAndLogEx(INFO, "--- " _CYAN_("Tag Signature")); PrintAndLogEx(INFO, " IC signature public key name: %s", nxp_15693_public_keys[i].desc); PrintAndLogEx(INFO, "IC signature public key value: %s", nxp_15693_public_keys[i].value); PrintAndLogEx(INFO, " Elliptic curve parameters: NID_secp128r1"); PrintAndLogEx(INFO, " TAG IC Signature: %s", sprint_hex(signature, 32)); - PrintAndLogEx(SUCCESS, " Signature verified: " _GREEN_("successful")); + PrintAndLogEx(SUCCESS, " Signature verification: " _GREEN_("successful")); return PM3_SUCCESS; } diff --git a/client/src/cmdhfmfdes.c b/client/src/cmdhfmfdes.c index e48e54958..60d16f35d 100644 --- a/client/src/cmdhfmfdes.c +++ b/client/src/cmdhfmfdes.c @@ -1190,13 +1190,18 @@ static int desfire_print_signature(uint8_t *uid, uint8_t uidlen, uint8_t *signat if (is_valid) break; } +// PrintAndLogEx(NORMAL, ""); +// PrintAndLogEx(INFO, "--- " _CYAN_("Tag Signature")); if (is_valid == false || i == ARRAYLEN(nxp_desfire_public_keys)) { - PrintAndLogEx(SUCCESS, "Signature verification " _RED_("failed")); + PrintAndLogEx(INFO, " Elliptic curve parameters: NID_secp224r1"); + PrintAndLogEx(INFO, " TAG IC Signature: %s", sprint_hex_inrow(signature, 16)); + PrintAndLogEx(INFO, " : %s", sprint_hex_inrow(signature + 16, 16)); + PrintAndLogEx(INFO, " : %s", sprint_hex_inrow(signature + 32, 16)); + PrintAndLogEx(INFO, " : %s", sprint_hex_inrow(signature + 48, signature_len - 48)); + PrintAndLogEx(SUCCESS, " Signature verification: " _RED_("failed")); return PM3_ESOFT; } -// PrintAndLogEx(NORMAL, ""); -// PrintAndLogEx(INFO, "--- " _CYAN_("Tag Signature")); PrintAndLogEx(INFO, " IC signature public key name: " _GREEN_("%s"), nxp_desfire_public_keys[i].desc); PrintAndLogEx(INFO, "IC signature public key value: %.32s", nxp_desfire_public_keys[i].value); PrintAndLogEx(INFO, " : %.32s", nxp_desfire_public_keys[i].value + 16); @@ -1207,7 +1212,7 @@ static int desfire_print_signature(uint8_t *uid, uint8_t uidlen, uint8_t *signat PrintAndLogEx(INFO, " : %s", sprint_hex_inrow(signature + 16, 16)); PrintAndLogEx(INFO, " : %s", sprint_hex_inrow(signature + 32, 16)); PrintAndLogEx(INFO, " : %s", sprint_hex_inrow(signature + 48, signature_len - 48)); - PrintAndLogEx(SUCCESS, " Signature verified: " _GREEN_("successful")); + PrintAndLogEx(SUCCESS, " Signature verification: " _GREEN_("successful")); return PM3_SUCCESS; } diff --git a/client/src/cmdhfmfp.c b/client/src/cmdhfmfp.c index 4ee04e781..d4d0f99b3 100644 --- a/client/src/cmdhfmfp.c +++ b/client/src/cmdhfmfp.c @@ -186,7 +186,12 @@ static int plus_print_signature(uint8_t *uid, uint8_t uidlen, uint8_t *signature PrintAndLogEx(INFO, "--- " _CYAN_("Tag Signature")); if (is_valid == false || i == ARRAYLEN(nxp_plus_public_keys)) { - PrintAndLogEx(SUCCESS, "Signature verification " _RED_("failed")); + PrintAndLogEx(INFO, " Elliptic curve parameters: NID_secp224r1"); + PrintAndLogEx(INFO, " TAG IC Signature: %s", sprint_hex_inrow(signature, 16)); + PrintAndLogEx(INFO, " : %s", sprint_hex_inrow(signature + 16, 16)); + PrintAndLogEx(INFO, " : %s", sprint_hex_inrow(signature + 32, 16)); + PrintAndLogEx(INFO, " : %s", sprint_hex_inrow(signature + 48, signature_len - 48)); + PrintAndLogEx(SUCCESS, " Signature verification: " _RED_("failed")); return PM3_ESOFT; } @@ -200,7 +205,7 @@ static int plus_print_signature(uint8_t *uid, uint8_t uidlen, uint8_t *signature PrintAndLogEx(INFO, " : %s", sprint_hex_inrow(signature + 16, 16)); PrintAndLogEx(INFO, " : %s", sprint_hex_inrow(signature + 32, 16)); PrintAndLogEx(INFO, " : %s", sprint_hex_inrow(signature + 48, signature_len - 48)); - PrintAndLogEx(SUCCESS, " Signature verified: " _GREEN_("successful")); + PrintAndLogEx(SUCCESS, " Signature verification: " _GREEN_("successful")); return PM3_SUCCESS; } diff --git a/client/src/cmdhfmfu.c b/client/src/cmdhfmfu.c index a25569f95..0be6ec728 100644 --- a/client/src/cmdhfmfu.c +++ b/client/src/cmdhfmfu.c @@ -945,17 +945,19 @@ static int ulev1_print_signature(TagTypeUL_t tagtype, uint8_t *uid, uint8_t *sig } PrintAndLogEx(NORMAL, ""); + PrintAndLogEx(INFO, "--- " _CYAN_("Tag Signature")); if (is_valid == false || i == ARRAYLEN(nxp_mfu_public_keys)) { - PrintAndLogEx(SUCCESS, "Signature verification " _RED_("failed")); + PrintAndLogEx(INFO, " Elliptic curve parameters: NID_secp128r1"); + PrintAndLogEx(INFO, " TAG IC Signature: %s", sprint_hex_inrow(signature, signature_len)); + PrintAndLogEx(SUCCESS, " Signature verification: " _RED_("failed")); return PM3_ESOFT; } - PrintAndLogEx(INFO, "--- " _CYAN_("Tag Signature")); PrintAndLogEx(INFO, " IC signature public key name: %s", nxp_mfu_public_keys[i].desc); PrintAndLogEx(INFO, "IC signature public key value: %s", nxp_mfu_public_keys[i].value); PrintAndLogEx(INFO, " Elliptic curve parameters: NID_secp128r1"); PrintAndLogEx(INFO, " TAG IC Signature: %s", sprint_hex_inrow(signature, signature_len)); - PrintAndLogEx(SUCCESS, " Signature verified: " _GREEN_("successful")); + PrintAndLogEx(SUCCESS, " Signature verification: " _GREEN_("successful")); return PM3_SUCCESS; } From caa4812f64eb393c49160428312bb757a040ba74 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Thu, 24 Sep 2020 01:29:38 +0200 Subject: [PATCH 0639/1047] Add NTAG 213 TT support --- client/src/cmdhfmfu.c | 18 +++++++++++------- client/src/cmdhfmfu.h | 1 + 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/client/src/cmdhfmfu.c b/client/src/cmdhfmfu.c index 0be6ec728..09b67091d 100644 --- a/client/src/cmdhfmfu.c +++ b/client/src/cmdhfmfu.c @@ -272,14 +272,14 @@ uint32_t UL_TYPES_ARRAY[] = { UNKNOWN, UL, UL_C, UL_EV1_48, UL_EV1_128, NTAG, NTAG_203, NTAG_210, NTAG_212, NTAG_213, NTAG_215, NTAG_216, MY_D, MY_D_NFC, MY_D_MOVE, MY_D_MOVE_NFC, MY_D_MOVE_LEAN, FUDAN_UL, - UL_EV1, NTAG_213_F, NTAG_216_F, UL_NANO_40, NTAG_I2C_1K + UL_EV1, NTAG_213_F, NTAG_216_F, UL_NANO_40, NTAG_I2C_1K, NTAG_213_TT }; uint8_t UL_MEMORY_ARRAY[ARRAYLEN(UL_TYPES_ARRAY)] = { MAX_UL_BLOCKS, MAX_UL_BLOCKS, MAX_ULC_BLOCKS, MAX_ULEV1a_BLOCKS, MAX_ULEV1b_BLOCKS, MAX_NTAG_203, MAX_NTAG_203, MAX_NTAG_210, MAX_NTAG_212, MAX_NTAG_213, MAX_NTAG_215, MAX_NTAG_216, MAX_UL_BLOCKS, MAX_MY_D_NFC, MAX_MY_D_MOVE, MAX_MY_D_MOVE, MAX_MY_D_MOVE_LEAN, MAX_UL_BLOCKS, - MAX_ULEV1a_BLOCKS, MAX_NTAG_213, MAX_NTAG_216, MAX_UL_NANO_40, MAX_NTAG_I2C_1K + MAX_ULEV1a_BLOCKS, MAX_NTAG_213, MAX_NTAG_216, MAX_UL_NANO_40, MAX_NTAG_I2C_1K, MAX_NTAG_213 }; //------------------------------------ @@ -678,6 +678,8 @@ int ul_print_type(uint32_t tagtype, uint8_t spaces) { PrintAndLogEx(SUCCESS, "%*sTYPE: " _YELLOW_("NTAG 213 144bytes (NT2H1311G0DU)"), spaces, ""); else if (tagtype & NTAG_213_F) PrintAndLogEx(SUCCESS, "%*sTYPE: " _YELLOW_("NTAG 213F 144bytes (NT2H1311F0DTL)"), spaces, ""); + else if (tagtype & NTAG_213_TT) + PrintAndLogEx(SUCCESS, "%*sTYPE: " _YELLOW_("NTAG 213TT 144bytes (NT2H1311TTDU)"), spaces, ""); else if (tagtype & NTAG_215) PrintAndLogEx(SUCCESS, "%*sTYPE: " _YELLOW_("NTAG 215 504bytes (NT2H1511G0DU)"), spaces, ""); else if (tagtype & NTAG_216) @@ -758,7 +760,7 @@ static int ulev1_print_configuration(uint32_t tagtype, uint8_t *data, uint8_t st PrintAndLogEx(INFO, " cfg0 [%u/0x%02X]: %s", startPage, startPage, sprint_hex(data, 4)); - if ((tagtype & (NTAG_213_F | NTAG_216_F))) { + if ((tagtype & (NTAG_213_F | NTAG_213_TT | NTAG_216_F))) { uint8_t mirror_conf = (data[0] & 0xC0); uint8_t mirror_byte = (data[0] & 0x30); bool sleep_en = (data[0] & 0x08); @@ -801,7 +803,7 @@ static int ulev1_print_configuration(uint32_t tagtype, uint8_t *data, uint8_t st break; } // valid mirror start page and byte position within start page. - if (tagtype & NTAG_213_F) { + if ((tagtype & NTAG_213_F)||(tagtype & NTAG_213_TT)) { switch (mirror_conf) { case 1: { PrintAndLogEx(INFO, " mirror start block %02X | byte pos %02X - %s", data[2], mirror_byte, (data[2] >= 0x4 && data[2] <= 0x24) ? "OK" : "Invalid value"); break;} @@ -1090,6 +1092,7 @@ uint32_t GetHF14AMfU_Type(void) { MF0UNH1001DUx 0004030203000B03 NT2L1001G0DUx 0004040102000B03 NT2H1001G0DUx 0004040202000B03 + NT2H1311TTDUx 0004040203000F03 Micron UL 0034210101000E03 */ @@ -1106,6 +1109,7 @@ uint32_t GetHF14AMfU_Type(void) { else if (memcmp(version, "\x00\x04\x04\x02\x01\x00\x13", 7) == 0) { tagtype = NTAG_216; break; } else if (memcmp(version, "\x00\x04\x04\x04\x01\x00\x0F", 7) == 0) { tagtype = NTAG_213_F; break; } else if (memcmp(version, "\x00\x04\x04\x04\x01\x00\x13", 7) == 0) { tagtype = NTAG_216_F; break; } + else if (memcmp(version, "\x00\x04\x04\x02\x03\x00\x0F", 7) == 0) { tagtype = NTAG_213_TT; break; } else if (memcmp(version, "\x00\x04\x04\x05\x02\x01\x13", 7) == 0) { tagtype = NTAG_I2C_1K; break; } else if (memcmp(version, "\x00\x04\x04\x05\x02\x01\x15", 7) == 0) { tagtype = NTAG_I2C_2K; break; } else if (memcmp(version, "\x00\x04\x04\x05\x02\x02\x13", 7) == 0) { tagtype = NTAG_I2C_1K_PLUS; break; } @@ -1330,7 +1334,7 @@ static int CmdHF14AMfUInfo(const char *Cmd) { } // NTAG counters? - if ((tagtype & (NTAG_213 | NTAG_213_F | NTAG_215 | NTAG_216))) { + if ((tagtype & (NTAG_213 | NTAG_213_F | NTAG_213_TT | NTAG_215 | NTAG_216))) { if (ntag_print_counter()) { // failed - re-select if (ul_auth_select(&card, tagtype, hasAuthKey, authkeyptr, pack, sizeof(pack)) == PM3_ESOFT) return PM3_ESOFT; @@ -1338,7 +1342,7 @@ static int CmdHF14AMfUInfo(const char *Cmd) { } // Read signature - if ((tagtype & (UL_EV1_48 | UL_EV1_128 | UL_EV1 | UL_NANO_40 | NTAG_213 | NTAG_213_F | NTAG_215 | NTAG_216 | NTAG_216_F | NTAG_I2C_1K | NTAG_I2C_2K | NTAG_I2C_1K_PLUS | NTAG_I2C_2K_PLUS))) { + if ((tagtype & (UL_EV1_48 | UL_EV1_128 | UL_EV1 | UL_NANO_40 | NTAG_213 | NTAG_213_F | NTAG_213_TT | NTAG_215 | NTAG_216 | NTAG_216_F | NTAG_I2C_1K | NTAG_I2C_2K | NTAG_I2C_1K_PLUS | NTAG_I2C_2K_PLUS))) { uint8_t ulev1_signature[32] = {0x00}; status = ulev1_readSignature(ulev1_signature, sizeof(ulev1_signature)); if (status == -1) { @@ -2024,7 +2028,7 @@ static int CmdHF14AMfUDump(const char *Cmd) { uint8_t n = 0; // NTAG has 1 counter, at 0x02 - if ((tagtype & (NTAG_213 | NTAG_213_F | NTAG_215 | NTAG_216))) { + if ((tagtype & (NTAG_213 | NTAG_213_F | NTAG_213_TT | NTAG_215 | NTAG_216))) { n = 2; } diff --git a/client/src/cmdhfmfu.h b/client/src/cmdhfmfu.h index 67e405677..210783874 100644 --- a/client/src/cmdhfmfu.h +++ b/client/src/cmdhfmfu.h @@ -57,6 +57,7 @@ typedef enum TAGTYPE_UL { NTAG_216_F = 0x800000, UL_EV1 = 0x1000000, UL_NANO_40 = 0x2000000, + NTAG_213_TT = 0x4000000, UL_MAGIC = UL | MAGIC, UL_C_MAGIC = UL_C | MAGIC, UL_ERROR = 0xFFFFFF, From 31c96ae7cf19f7991a6319f880a4c8069035e356 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Thu, 24 Sep 2020 10:07:18 +0200 Subject: [PATCH 0640/1047] Add script to recover PKs --- tools/recover_pk.py | 75 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100755 tools/recover_pk.py diff --git a/tools/recover_pk.py b/tools/recover_pk.py new file mode 100755 index 000000000..e59bca8d0 --- /dev/null +++ b/tools/recover_pk.py @@ -0,0 +1,75 @@ +#!/usr/bin/env python3 + +# @doegox -- 2020 + +import sslcrypto +import binascii +import sys + +debug = False + +def recover(data, signature): + recovered = set() + alghash = None + if len(signature) == 32: + curve = sslcrypto.ecc.get_curve("secp128r1") + recoverable = False + elif len(signature) == 33: + curve = sslcrypto.ecc.get_curve("secp128r1") + recoverable = True + elif len(signature) == 56: + curve = sslcrypto.ecc.get_curve("secp224r1") + recoverable = False + elif len(signature) == 57: + curve = sslcrypto.ecc.get_curve("secp224r1") + recoverable = True + else: + print("Unsupported signature size %i" % len(signature)) + exit(1) + + if (recoverable): + try: + pk = curve.recover(signature, data, hash=alghash) + recovered.add(pk) + if debug: + print("Possible Pk: ", binascii.hexlify(pk)) + except: + pass + else: + for i in range(2): + # Brute force RECID + recid = bytes([27+i]) + try: + pk = curve.recover(recid + signature, data, hash=alghash) + recovered.add(pk) + if debug: + print("Possible Pk: ", binascii.hexlify(pk)) + except: + pass + return recovered + +if len(sys.argv) < 3 or len(sys.argv) % 2 == 0: + print("Usage: \n%s UID SIGN [UID SIGN] [...]" % sys.argv[0]) + print("Example: \n%s 04ee45daa34084 ebb6102bff74b087d18a57a54bc375159a04ea9bc61080b7f4a85afe1587d73b" % sys.argv[0]) + exit(1) + +recovered = set() +for i in range(1, len(sys.argv), 2): + data = binascii.unhexlify(sys.argv[i]) + if debug: + print("UID (%2i): " % len(data), binascii.hexlify(data)) + signature = binascii.unhexlify(sys.argv[i+1]) + if debug: + print("Signature (%2i): " % len(signature), binascii.hexlify(signature)) + recovered_tmp = recover(data, signature) + if i == 1: + if recovered_tmp == set(): + break + else: + recovered = recovered_tmp + else: + recovered &= recovered_tmp + +print("Possible uncompressed Pk(s):") +for pk in list(recovered): + print(binascii.hexlify(pk).decode('utf8')) From 55224eed755853f78b1551ce84a92915e673ddec Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Thu, 24 Sep 2020 11:25:43 +0200 Subject: [PATCH 0641/1047] recover_pk: add note about hashes --- tools/recover_pk.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tools/recover_pk.py b/tools/recover_pk.py index e59bca8d0..5391e8c57 100755 --- a/tools/recover_pk.py +++ b/tools/recover_pk.py @@ -10,6 +10,8 @@ debug = False def recover(data, signature): recovered = set() + # Some, like Vivokey Spark1, are doing a SHA256 + # alghash = "sha256" alghash = None if len(signature) == 32: curve = sslcrypto.ecc.get_curve("secp128r1") From 56c99d223c5bf01dff074063d057a31d070a87ad Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Thu, 24 Sep 2020 11:58:17 +0200 Subject: [PATCH 0642/1047] recover_pk: seach with and without sha256 --- tools/recover_pk.py | 49 ++++++++++++++++++++++++++------------------- 1 file changed, 28 insertions(+), 21 deletions(-) diff --git a/tools/recover_pk.py b/tools/recover_pk.py index 5391e8c57..b2ff2e6c7 100755 --- a/tools/recover_pk.py +++ b/tools/recover_pk.py @@ -8,11 +8,8 @@ import sys debug = False -def recover(data, signature): +def recover(data, signature, alghash=None): recovered = set() - # Some, like Vivokey Spark1, are doing a SHA256 - # alghash = "sha256" - alghash = None if len(signature) == 32: curve = sslcrypto.ecc.get_curve("secp128r1") recoverable = False @@ -50,28 +47,38 @@ def recover(data, signature): pass return recovered +def recover_multiple(uids, sigs, alghash=None): + recovered = set() + assert len(uids) == len(sigs) + for i in range(len(uids)): + data = binascii.unhexlify(uids[i]) + if debug: + print("UID (%2i): " % len(data), binascii.hexlify(data)) + signature = binascii.unhexlify(sigs[i]) + if debug: + print("Signature (%2i): " % len(signature), binascii.hexlify(signature)) + recovered_tmp = recover(data, signature, alghash) + if i == 0: + if recovered_tmp == set(): + break + else: + recovered = recovered_tmp + else: + recovered &= recovered_tmp + return recovered + if len(sys.argv) < 3 or len(sys.argv) % 2 == 0: print("Usage: \n%s UID SIGN [UID SIGN] [...]" % sys.argv[0]) print("Example: \n%s 04ee45daa34084 ebb6102bff74b087d18a57a54bc375159a04ea9bc61080b7f4a85afe1587d73b" % sys.argv[0]) exit(1) -recovered = set() -for i in range(1, len(sys.argv), 2): - data = binascii.unhexlify(sys.argv[i]) - if debug: - print("UID (%2i): " % len(data), binascii.hexlify(data)) - signature = binascii.unhexlify(sys.argv[i+1]) - if debug: - print("Signature (%2i): " % len(signature), binascii.hexlify(signature)) - recovered_tmp = recover(data, signature) - if i == 1: - if recovered_tmp == set(): - break - else: - recovered = recovered_tmp - else: - recovered &= recovered_tmp - +print("Assuming no hash was used in the signature generation:") +recovered = recover_multiple(sys.argv[1:][::2], sys.argv[1:][1::2]) +print("Possible uncompressed Pk(s):") +for pk in list(recovered): + print(binascii.hexlify(pk).decode('utf8')) +print("Assuming SHA-256 was used in the signature generation:") +recovered = recover_multiple(sys.argv[1:][::2], sys.argv[1:][1::2], alghash="sha256") print("Possible uncompressed Pk(s):") for pk in list(recovered): print(binascii.hexlify(pk).decode('utf8')) From a8185cc8d656ad0743d077afd1ac1c76483bec19 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 24 Sep 2020 13:15:23 +0200 Subject: [PATCH 0643/1047] validate vivokey spark1, and more details --- client/src/cmdhf15.c | 57 +++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 54 insertions(+), 3 deletions(-) diff --git a/client/src/cmdhf15.c b/client/src/cmdhf15.c index 35d3be6e3..76500668d 100644 --- a/client/src/cmdhf15.c +++ b/client/src/cmdhf15.c @@ -423,6 +423,16 @@ static int nxp_15693_print_signature(uint8_t *uid, uint8_t *signature) { }; */ uint8_t i; + uint8_t revuid[8]; + for (i = 0; i < sizeof(revuid); i++) { + revuid[i] = uid[7 - i]; + } + uint8_t revsign[32]; + for (i = 0; i < sizeof(revsign); i++) { + revsign[i] = signature[31 - i]; + } + + int reason = 0; bool is_valid = false; for (i = 0; i < ARRAYLEN(nxp_15693_public_keys); i++) { @@ -432,15 +442,42 @@ static int nxp_15693_print_signature(uint8_t *uid, uint8_t *signature) { int res = ecdsa_signature_r_s_verify(MBEDTLS_ECP_DP_SECP128R1, key, uid, 8, signature, 32, false); is_valid = (res == 0); - if (is_valid) + if (is_valid) { + reason = 1; break; + } + + // try with sha256 + res = ecdsa_signature_r_s_verify(MBEDTLS_ECP_DP_SECP128R1, key, uid, 8, signature, 32, true); + is_valid = (res == 0); + if (is_valid) { + reason = 2; + break; + } + + // try with reversed uid / signature + res = ecdsa_signature_r_s_verify(MBEDTLS_ECP_DP_SECP128R1, key, revuid, sizeof(revuid), revsign, sizeof(revsign), false); + is_valid = (res == 0); + if (is_valid) { + reason = 3; + break; + } + + + // try with sha256 + res = ecdsa_signature_r_s_verify(MBEDTLS_ECP_DP_SECP128R1, key, revuid, sizeof(revuid), revsign, sizeof(revsign), true); + is_valid = (res == 0); + if (is_valid) { + reason = 4; + break; + } } PrintAndLogEx(NORMAL, ""); PrintAndLogEx(INFO, "--- " _CYAN_("Tag Signature")); if (is_valid == false || i == ARRAYLEN(nxp_15693_public_keys)) { PrintAndLogEx(INFO, " Elliptic curve parameters: NID_secp128r1"); - PrintAndLogEx(INFO, " TAG IC Signature: %s", sprint_hex(signature, 32)); + PrintAndLogEx(INFO, " TAG IC Signature: %s", sprint_hex_inrow(signature, 32)); PrintAndLogEx(SUCCESS, " Signature verification: " _RED_("failed")); return PM3_ESOFT; } @@ -448,8 +485,22 @@ static int nxp_15693_print_signature(uint8_t *uid, uint8_t *signature) { PrintAndLogEx(INFO, " IC signature public key name: %s", nxp_15693_public_keys[i].desc); PrintAndLogEx(INFO, "IC signature public key value: %s", nxp_15693_public_keys[i].value); PrintAndLogEx(INFO, " Elliptic curve parameters: NID_secp128r1"); - PrintAndLogEx(INFO, " TAG IC Signature: %s", sprint_hex(signature, 32)); + PrintAndLogEx(INFO, " TAG IC Signature: %s", sprint_hex_inrow(signature, 32)); PrintAndLogEx(SUCCESS, " Signature verification: " _GREEN_("successful")); + switch(reason) { + case 1: + PrintAndLogEx(INFO, " Params used: UID and signature, plain"); + break; + case 2: + PrintAndLogEx(INFO, " Params used: UID and signature, SHA256"); + break; + case 3: + PrintAndLogEx(INFO, " Params used: reversed UID and signature, plain"); + break; + case 4: + PrintAndLogEx(INFO, " Params used: reversed UID and signature, SHA256"); + break; + } return PM3_SUCCESS; } From 8c4076281e1dc4aeb0cb49064dc322a485e39989 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Thu, 24 Sep 2020 13:58:45 +0200 Subject: [PATCH 0644/1047] Fix PK secp224r1 display --- client/src/cmdhfmfdes.c | 5 +++-- client/src/cmdhfmfp.c | 4 ++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/client/src/cmdhfmfdes.c b/client/src/cmdhfmfdes.c index 60d16f35d..5517ad15f 100644 --- a/client/src/cmdhfmfdes.c +++ b/client/src/cmdhfmfdes.c @@ -1176,6 +1176,7 @@ static int desfire_print_signature(uint8_t *uid, uint8_t uidlen, uint8_t *signat {"Mifare Plus EV1", "044409ADC42F91A8394066BA83D872FB1D16803734E911170412DDF8BAD1A4DADFD0416291AFE1C748253925DA39A5F39A1C557FFACD34C62E"} }; + uint32_t i; bool is_valid = false; @@ -1204,9 +1205,9 @@ static int desfire_print_signature(uint8_t *uid, uint8_t uidlen, uint8_t *signat PrintAndLogEx(INFO, " IC signature public key name: " _GREEN_("%s"), nxp_desfire_public_keys[i].desc); PrintAndLogEx(INFO, "IC signature public key value: %.32s", nxp_desfire_public_keys[i].value); - PrintAndLogEx(INFO, " : %.32s", nxp_desfire_public_keys[i].value + 16); PrintAndLogEx(INFO, " : %.32s", nxp_desfire_public_keys[i].value + 32); - PrintAndLogEx(INFO, " : %.32s", nxp_desfire_public_keys[i].value + 48); + PrintAndLogEx(INFO, " : %.32s", nxp_desfire_public_keys[i].value + 64); + PrintAndLogEx(INFO, " : %.32s", nxp_desfire_public_keys[i].value + 96); PrintAndLogEx(INFO, " Elliptic curve parameters: NID_secp224r1"); PrintAndLogEx(INFO, " TAG IC Signature: %s", sprint_hex_inrow(signature, 16)); PrintAndLogEx(INFO, " : %s", sprint_hex_inrow(signature + 16, 16)); diff --git a/client/src/cmdhfmfp.c b/client/src/cmdhfmfp.c index d4d0f99b3..1ecfa0c7f 100644 --- a/client/src/cmdhfmfp.c +++ b/client/src/cmdhfmfp.c @@ -197,9 +197,9 @@ static int plus_print_signature(uint8_t *uid, uint8_t uidlen, uint8_t *signature PrintAndLogEx(INFO, " IC signature public key name: " _GREEN_("%s"), nxp_plus_public_keys[i].desc); PrintAndLogEx(INFO, "IC signature public key value: %.32s", nxp_plus_public_keys[i].value); - PrintAndLogEx(INFO, " : %.32s", nxp_plus_public_keys[i].value + 16); PrintAndLogEx(INFO, " : %.32s", nxp_plus_public_keys[i].value + 32); - PrintAndLogEx(INFO, " : %.32s", nxp_plus_public_keys[i].value + 48); + PrintAndLogEx(INFO, " : %.32s", nxp_plus_public_keys[i].value + 64); + PrintAndLogEx(INFO, " : %.32s", nxp_plus_public_keys[i].value + 96); PrintAndLogEx(INFO, " Elliptic curve parameters: NID_secp224r1"); PrintAndLogEx(INFO, " TAG IC Signature: %s", sprint_hex_inrow(signature, 16)); PrintAndLogEx(INFO, " : %s", sprint_hex_inrow(signature + 16, 16)); From e556b8de5540b14f29c29bf7aa9f8b2e291372dc Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Thu, 24 Sep 2020 15:03:38 +0200 Subject: [PATCH 0645/1047] Fix NTAG I2C UID and signature verification --- client/src/cmdhfmfu.c | 48 +++++++++++++++++++++++-------------------- 1 file changed, 26 insertions(+), 22 deletions(-) diff --git a/client/src/cmdhfmfu.c b/client/src/cmdhfmfu.c index 09b67091d..0fcbe1796 100644 --- a/client/src/cmdhfmfu.c +++ b/client/src/cmdhfmfu.c @@ -493,7 +493,7 @@ static int ul_fudan_check(void) { return (!resp.data.asBytes[0]) ? FUDAN_UL : UL; //if response == 0x00 then Fudan, else Genuine NXP } -static int ul_print_default(uint8_t *data) { +static int ul_print_default(uint8_t *data, uint8_t *real_uid) { uint8_t uid[7]; uid[0] = data[0]; @@ -503,10 +503,14 @@ static int ul_print_default(uint8_t *data) { uid[4] = data[5]; uid[5] = data[6]; uid[6] = data[7]; + bool mful_uid_layout = true; - PrintAndLogEx(SUCCESS, " UID: " _GREEN_("%s"), sprint_hex(uid, 7)); - PrintAndLogEx(SUCCESS, " UID[0]: %02X, %s", uid[0], getTagInfo(uid[0])); - if (uid[0] == 0x05 && ((uid[1] & 0xf0) >> 4) == 2) { // is infineon and 66RxxP + if (memcmp(uid, real_uid, 7) != 0) { + mful_uid_layout = false; + } + PrintAndLogEx(SUCCESS, " UID: " _GREEN_("%s"), sprint_hex(real_uid, 7)); + PrintAndLogEx(SUCCESS, " UID[0]: %02X, %s", real_uid[0], getTagInfo(real_uid[0])); + if (real_uid[0] == 0x05 && ((real_uid[1] & 0xf0) >> 4) == 2) { // is infineon and 66RxxP uint8_t chip = (data[8] & 0xC7); // 11000111 mask, bit 3,4,5 RFU switch (chip) { case 0xC2: @@ -520,20 +524,23 @@ static int ul_print_default(uint8_t *data) { break; //512 pages /2 sectors } } - // CT (cascade tag byte) 0x88 xor SN0 xor SN1 xor SN2 - int crc0 = 0x88 ^ uid[0] ^ uid[1] ^ uid[2]; - if (data[3] == crc0) - PrintAndLogEx(SUCCESS, " BCC0: %02X (" _GREEN_("ok") ")", data[3]); - else - PrintAndLogEx(NORMAL, " BCC0: %02X, crc should be %02X", data[3], crc0); + if (mful_uid_layout) { + // CT (cascade tag byte) 0x88 xor SN0 xor SN1 xor SN2 + int crc0 = 0x88 ^ uid[0] ^ uid[1] ^ uid[2]; + if (data[3] == crc0) + PrintAndLogEx(SUCCESS, " BCC0: %02X (" _GREEN_("ok") ")", data[3]); + else + PrintAndLogEx(NORMAL, " BCC0: %02X, crc should be %02X", data[3], crc0); - int crc1 = uid[3] ^ uid[4] ^ uid[5] ^ uid[6]; - if (data[8] == crc1) - PrintAndLogEx(SUCCESS, " BCC1: %02X (" _GREEN_("ok") ")", data[8]); - else - PrintAndLogEx(NORMAL, " BCC1: %02X, crc should be %02X", data[8], crc1); - - PrintAndLogEx(SUCCESS, " Internal: %02X (%s)", data[9], (data[9] == 0x48) ? _GREEN_("default") : _RED_("not default")); + int crc1 = uid[3] ^ uid[4] ^ uid[5] ^ uid[6]; + if (data[8] == crc1) + PrintAndLogEx(SUCCESS, " BCC1: %02X (" _GREEN_("ok") ")", data[8]); + else + PrintAndLogEx(NORMAL, " BCC1: %02X, crc should be %02X", data[8], crc1); + PrintAndLogEx(SUCCESS, " Internal: %02X (%s)", data[9], (data[9] == 0x48) ? _GREEN_("default") : _RED_("not default")); + } else { + PrintAndLogEx(SUCCESS, "Blocks 0-2: %s", sprint_hex(data + 0, 12)); + } PrintAndLogEx(SUCCESS, " Lock: %s - %s", sprint_hex(data + 10, 2), @@ -1214,7 +1221,6 @@ static int CmdHF14AMfUInfo(const char *Cmd) { uint8_t *key = pwd; uint8_t pack[4] = {0, 0, 0, 0}; int len; - uint8_t uid[7]; char tempStr[50]; @@ -1267,9 +1273,7 @@ static int CmdHF14AMfUInfo(const char *Cmd) { PrintAndLogEx(ERR, "Error: tag didn't answer to READ"); return PM3_ESOFT; } else if (status == 16) { - memcpy(uid, data, 3); - memcpy(uid + 3, data + 4, 4); - ul_print_default(data); + ul_print_default(data, card.uid); ndef_print_CC(data + 12); } else { locked = true; @@ -1351,7 +1355,7 @@ static int CmdHF14AMfUInfo(const char *Cmd) { return PM3_ESOFT; } if (status == 32) { - ulev1_print_signature(tagtype, uid, ulev1_signature, sizeof(ulev1_signature)); + ulev1_print_signature(tagtype, card.uid, ulev1_signature, sizeof(ulev1_signature)); } else { // re-select if (ul_auth_select(&card, tagtype, hasAuthKey, authkeyptr, pack, sizeof(pack)) == PM3_ESOFT) return PM3_ESOFT; From ae6d69a337ef895e80381c01c4c981233020184e Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 24 Sep 2020 19:04:51 +0200 Subject: [PATCH 0646/1047] more default --- client/dictionaries/mfdes_default_keys.dic | 1 + client/dictionaries/mfp_default_keys.dic | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/client/dictionaries/mfdes_default_keys.dic b/client/dictionaries/mfdes_default_keys.dic index b71a8a8af..4c863c3f5 100644 --- a/client/dictionaries/mfdes_default_keys.dic +++ b/client/dictionaries/mfdes_default_keys.dic @@ -43,3 +43,4 @@ eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee 404142434445464748494a4b4c4d4e4f 303132333435363738393a3b3c3d3e3f 9CABF398358405AE2F0E2B3D31C99A8A # Default key +605F5E5D5C5B5A59605F5E5D5C5B5A59 # access control \ No newline at end of file diff --git a/client/dictionaries/mfp_default_keys.dic b/client/dictionaries/mfp_default_keys.dic index e492e2686..a063e34ad 100644 --- a/client/dictionaries/mfp_default_keys.dic +++ b/client/dictionaries/mfp_default_keys.dic @@ -27,4 +27,4 @@ eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee 100f0e0d0c0b0a090807060504030201 404142434445464748494a4b4c4d4e4f 303132333435363738393a3b3c3d3e3f - +605F5E5D5C5B5A59605F5E5D5C5B5A59 From cabe121ca80dfc8fe8ccb35c9327b0745c5c4d27 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 24 Sep 2020 19:51:57 +0200 Subject: [PATCH 0647/1047] lf help text --- client/src/cmdlf.c | 13 +++++++------ client/src/cmdparser.c | 6 +++++- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/client/src/cmdlf.c b/client/src/cmdlf.c index 67042259c..74821b449 100644 --- a/client/src/cmdlf.c +++ b/client/src/cmdlf.c @@ -1522,7 +1522,7 @@ out: } static command_t CommandTable[] = { - {"help", CmdHelp, AlwaysAvailable, "This help"}, + {"-----------", CmdHelp, AlwaysAvailable, "-------------- " _CYAN_("Direct") " --------------"}, {"awid", CmdLFAWID, AlwaysAvailable, "{ AWID RFIDs... }"}, {"cotag", CmdLFCOTAG, AlwaysAvailable, "{ COTAG CHIPs... }"}, {"em", CmdLFEM4X, AlwaysAvailable, "{ EM4X CHIPs & RFIDs... }"}, @@ -1549,16 +1549,17 @@ static command_t CommandTable[] = { {"t55xx", CmdLFT55XX, AlwaysAvailable, "{ T55xx CHIPs... }"}, {"viking", CmdLFViking, AlwaysAvailable, "{ Viking RFIDs... }"}, {"visa2000", CmdLFVisa2k, AlwaysAvailable, "{ Visa2000 RFIDs... }"}, - {"", CmdHelp, AlwaysAvailable, ""}, + {"-----------", CmdHelp, AlwaysAvailable, "--------------------- " _CYAN_("General") " ---------------------"}, + {"help", CmdHelp, AlwaysAvailable, "This help"}, {"config", CmdLFConfig, IfPm3Lf, "Get/Set config for LF sampling, bit/sample, decimation, frequency"}, {"cmdread", CmdLFCommandRead, IfPm3Lf, "Modulate LF reader field to send command before read (all periods in microseconds)"}, {"read", CmdLFRead, IfPm3Lf, "Read LF tag"}, {"search", CmdLFfind, AlwaysAvailable, "Read and Search for valid known tag (in offline mode it you can load first then search)"}, {"sim", CmdLFSim, IfPm3Lf, "Simulate LF tag from buffer with optional GAP (in microseconds)"}, - {"simask", CmdLFaskSim, IfPm3Lf, "Simulate LF ASK tag from demodbuffer or input"}, - {"simfsk", CmdLFfskSim, IfPm3Lf, "Simulate LF FSK tag from demodbuffer or input"}, - {"simpsk", CmdLFpskSim, IfPm3Lf, "Simulate LF PSK tag from demodbuffer or input"}, -// {"simpsk", CmdLFnrzSim, IfPm3Lf, "Simulate LF NRZ tag from demodbuffer or input"}, + {"simask", CmdLFaskSim, IfPm3Lf, "Simulate " _YELLOW_("LF ASK tag") " from demodbuffer or input"}, + {"simfsk", CmdLFfskSim, IfPm3Lf, "Simulate " _YELLOW_("LF FSK tag") " from demodbuffer or input"}, + {"simpsk", CmdLFpskSim, IfPm3Lf, "Simulate " _YELLOW_("LF PSK tag") " from demodbuffer or input"}, +// {"simpsk", CmdLFnrzSim, IfPm3Lf, "Simulate " _YELLOW_("LF NRZ tag") " from demodbuffer or input"}, {"simbidir", CmdLFSimBidir, IfPm3Lf, "Simulate LF tag (with bidirectional data transmission between reader and tag)"}, {"sniff", CmdLFSniff, IfPm3Lf, "Sniff LF traffic between reader and tag"}, {"tune", CmdLFTune, IfPm3Lf, "Continuously measure LF antenna tuning"}, diff --git a/client/src/cmdparser.c b/client/src/cmdparser.c index 837c13fed..93bba22bf 100644 --- a/client/src/cmdparser.c +++ b/client/src/cmdparser.c @@ -168,7 +168,11 @@ void CmdsHelp(const command_t Commands[]) { while (Commands[i].Name) { if (Commands[i].IsAvailable()) { g_printAndLog = PRINTANDLOG_PRINT; - PrintAndLogEx(NORMAL, _GREEN_("%-16s")" %s", Commands[i].Name, Commands[i].Help); + if (Commands[i].Name[0] == '-' || Commands[i].Name[0] == ' ') { + PrintAndLogEx(NORMAL, "%-16s %s", Commands[i].Name, Commands[i].Help); + } else { + PrintAndLogEx(NORMAL, _GREEN_("%-16s")" %s", Commands[i].Name, Commands[i].Help); + } g_printAndLog = PRINTANDLOG_PRINT | PRINTANDLOG_LOG; } ++i; From 8e819f1b26a16ff944776afbcff41fdb00f5b7e2 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 24 Sep 2020 22:55:09 +0200 Subject: [PATCH 0648/1047] textual --- client/src/cmdhfmfp.c | 38 +++++++++++++++++++++----------------- 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/client/src/cmdhfmfp.c b/client/src/cmdhfmfp.c index 1ecfa0c7f..f7d7d2142 100644 --- a/client/src/cmdhfmfp.c +++ b/client/src/cmdhfmfp.c @@ -58,9 +58,9 @@ static char *getCardSizeStr(uint8_t fsize) { // is LSB set? if (fsize & 1) - snprintf(retStr, sizeof(buf), "0x%02X (" _YELLOW_("%d - %d bytes") ")", fsize, usize, lsize); + snprintf(retStr, sizeof(buf), "0x%02X (" _GREEN_("%d - %d bytes") ")", fsize, usize, lsize); else - snprintf(retStr, sizeof(buf), "0x%02X (" _YELLOW_("%d bytes") ")", fsize, lsize); + snprintf(retStr, sizeof(buf), "0x%02X (" _GREEN_("%d bytes") ")", fsize, lsize); return buf; } @@ -88,18 +88,17 @@ static char *getVersionStr(uint8_t major, uint8_t minor) { char *retStr = buf; if (major == 0x00) - snprintf(retStr, sizeof(buf), "%x.%x (" _YELLOW_("DESFire MF3ICD40") ")", major, minor); + snprintf(retStr, sizeof(buf), "%x.%x (" _GREEN_("DESFire MF3ICD40") ")", major, minor); else if (major == 0x01 && minor == 0x00) - snprintf(retStr, sizeof(buf), "%x.%x (" _YELLOW_("DESFire EV1") ")", major, minor); + snprintf(retStr, sizeof(buf), "%x.%x (" _GREEN_("DESFire EV1") ")", major, minor); else if (major == 0x12 && minor == 0x00) - snprintf(retStr, sizeof(buf), "%x.%x (" _YELLOW_("DESFire EV2") ")", major, minor); + snprintf(retStr, sizeof(buf), "%x.%x (" _GREEN_("DESFire EV2") ")", major, minor); else if (major == 0x33 && minor == 0x00) - snprintf(retStr, sizeof(buf), "%x.%x (" _YELLOW_("DESFire EV3") ")", major, minor); + snprintf(retStr, sizeof(buf), "%x.%x (" _GREEN_("DESFire EV3") ")", major, minor); else if (major == 0x30 && minor == 0x00) - snprintf(retStr, sizeof(buf), "%x.%x (" _YELLOW_("DESFire Light") ")", major, minor); - + snprintf(retStr, sizeof(buf), "%x.%x (" _GREEN_("DESFire Light") ")", major, minor); else if (major == 0x11 && minor == 0x00) - snprintf(retStr, sizeof(buf), "%x.%x (" _YELLOW_("Plus EV1") ")", major, minor); + snprintf(retStr, sizeof(buf), "%x.%x (" _GREEN_("Plus EV1") ")", major, minor); else snprintf(retStr, sizeof(buf), "%x.%x (" _YELLOW_("Unknown") ")", major, minor); return buf; @@ -361,10 +360,8 @@ static int CmdHFMFPInfo(const char *Cmd) { } if (card.sak == 0x20) { - PrintAndLogEx(INFO, " SAK: " _GREEN_("MIFARE Plus SL0/SL3") " or " _GREEN_("MIFARE DESFire")); - if (card.ats_len > 0) { - + PrintAndLogEx(INFO, " SAK: " _GREEN_("MIFARE Plus SL0/SL3") " or " _GREEN_("MIFARE DESFire")); SLmode = 3; // check SL0 uint8_t data[250] = {0}; @@ -373,15 +370,22 @@ static int CmdHFMFPInfo(const char *Cmd) { uint8_t cmd[3 + 16] = {0xa8, 0x90, 0x90, 0x00}; int res = ExchangeRAW14a(cmd, sizeof(cmd), true, false, data, sizeof(data), &datalen, false); - // DESFire answers 0x1C + // DESFire answers 0x1C or 67 00 // Plus answers 0x0B, 0x09 - PrintAndLogEx(INFO, "ICEE: %s", sprint_hex(data, datalen)); - - if (memcmp(data, "\x67\x00", 2) == 0) { - PrintAndLogEx(INFO, "\tMost likely a MIFARE DESFire tag"); + if ( data[0] != 0x0b && data[0] != 0x09 && data[0] != 0x1C && data[0] != 0x67) { + PrintAndLogEx(INFO, _RED_("Send copy to iceman of this command output!")); + PrintAndLogEx(INFO, "data: %s", sprint_hex(data, datalen)); + } + + if ((memcmp(data, "\x67\x00", 2) == 0) || + (memcmp(data, "\x1C\x83\x0C", 3) == 0) + ) { + PrintAndLogEx(INFO, " result: " _RED_("MIFARE DESFire")); PrintAndLogEx(HINT, "Hint: Try " _YELLOW_("`hf mfdes info`")); DropField(); return PM3_SUCCESS; + } else { + PrintAndLogEx(INFO, " result: " _GREEN_("MIFARE Plus SL0/SL3")); } if (!res && datalen > 1 && data[0] == 0x09) { From 65478867d171efa2a4b385d67cbf819765db9d56 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 24 Sep 2020 23:10:46 +0200 Subject: [PATCH 0649/1047] add check for NTAG413 --- client/src/cmdhfmfdes.c | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/client/src/cmdhfmfdes.c b/client/src/cmdhfmfdes.c index 5517ad15f..6dc5cb551 100644 --- a/client/src/cmdhfmfdes.c +++ b/client/src/cmdhfmfdes.c @@ -321,6 +321,7 @@ typedef enum { DESFIRE_EV3, DESFIRE_LIGHT, PLUS_EV1, + NTAG413, } nxp_cardtype_t; typedef struct { @@ -347,9 +348,9 @@ static char *getCardSizeStr(uint8_t fsize) { // is LSB set? if (fsize & 1) - snprintf(retStr, sizeof(buf), "0x%02X (" _YELLOW_("%d - %d bytes") ")", fsize, usize, lsize); + snprintf(retStr, sizeof(buf), "0x%02X (" _GREEN_("%d - %d bytes") ")", fsize, usize, lsize); else - snprintf(retStr, sizeof(buf), "0x%02X (" _YELLOW_("%d bytes") ")", fsize, lsize); + snprintf(retStr, sizeof(buf), "0x%02X (" _GREEN_("%d bytes") ")", fsize, lsize); return buf; } @@ -377,18 +378,22 @@ static char *getVersionStr(uint8_t major, uint8_t minor) { char *retStr = buf; if (major == 0x00) - snprintf(retStr, sizeof(buf), "%x.%x (" _YELLOW_("DESFire MF3ICD40") ")", major, minor); + snprintf(retStr, sizeof(buf), "%x.%x (" _GREEN_("DESFire MF3ICD40") ")", major, minor); else if (major == 0x01 && minor == 0x00) - snprintf(retStr, sizeof(buf), "%x.%x (" _YELLOW_("DESFire EV1") ")", major, minor); + snprintf(retStr, sizeof(buf), "%x.%x (" _GREEN_("DESFire EV1") ")", major, minor); else if (major == 0x12 && minor == 0x00) - snprintf(retStr, sizeof(buf), "%x.%x (" _YELLOW_("DESFire EV2") ")", major, minor); + snprintf(retStr, sizeof(buf), "%x.%x (" _GREEN_("DESFire EV2") ")", major, minor); else if (major == 0x33 && minor == 0x00) - snprintf(retStr, sizeof(buf), "%x.%x (" _YELLOW_("DESFire EV3") ")", major, minor); + snprintf(retStr, sizeof(buf), "%x.%x (" _GREEN_("DESFire EV3") ")", major, minor); else if (major == 0x30 && minor == 0x00) - snprintf(retStr, sizeof(buf), "%x.%x (" _YELLOW_("DESFire Light") ")", major, minor); + snprintf(retStr, sizeof(buf), "%x.%x (" _GREEN_("DESFire Light") ")", major, minor); + else if (major == 0x10 && minor == 0x00) + snprintf(retStr, sizeof(buf), "%x.%x (" _GREEN_("NTAG413") ")", major, minor); else snprintf(retStr, sizeof(buf), "%x.%x (" _YELLOW_("Unknown") ")", major, minor); return buf; + +//04 01 01 01 00 1A 05 } static int DESFIRESendApdu(bool activate_field, bool leavefield_on, sAPDU apdu, uint8_t *result, uint32_t max_result_len, uint32_t *result_len, uint16_t *sw) { @@ -648,9 +653,10 @@ static nxp_cardtype_t getCardType(uint8_t major, uint8_t minor) { return DESFIRE_EV3; if (major == 0x30 && minor == 0x00) return DESFIRE_LIGHT; - if (major == 0x11 && minor == 0x00) + if (major == 0x11 && minor == 0x00) return PLUS_EV1; - + if (major == 0x10 && minor == 0x00) + return NTAG413; return DESFIRE_UNKNOWN; } @@ -3318,7 +3324,10 @@ static int CmdHF14ADesInfo(const char *Cmd) { if (major == 0 && minor == 2) PrintAndLogEx(INFO, "\t0.2 - DESFire Light, Originality check, "); - if (cardtype == DESFIRE_EV2 || cardtype == DESFIRE_LIGHT || cardtype == DESFIRE_EV3) { + if (cardtype == DESFIRE_EV2 || + cardtype == DESFIRE_LIGHT || + cardtype == DESFIRE_EV3 || + cardtype == NTAG413) { // Signature originality check uint8_t signature[56] = {0}; size_t signature_len = 0; From 42eb98cdda13f54658556fd96766939901228895 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 24 Sep 2020 23:20:15 +0200 Subject: [PATCH 0650/1047] rename --- client/src/cmdhfmfdes.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/client/src/cmdhfmfdes.c b/client/src/cmdhfmfdes.c index 6dc5cb551..3b36e033d 100644 --- a/client/src/cmdhfmfdes.c +++ b/client/src/cmdhfmfdes.c @@ -321,7 +321,7 @@ typedef enum { DESFIRE_EV3, DESFIRE_LIGHT, PLUS_EV1, - NTAG413, + NTAG413DNA, } nxp_cardtype_t; typedef struct { @@ -388,7 +388,7 @@ static char *getVersionStr(uint8_t major, uint8_t minor) { else if (major == 0x30 && minor == 0x00) snprintf(retStr, sizeof(buf), "%x.%x (" _GREEN_("DESFire Light") ")", major, minor); else if (major == 0x10 && minor == 0x00) - snprintf(retStr, sizeof(buf), "%x.%x (" _GREEN_("NTAG413") ")", major, minor); + snprintf(retStr, sizeof(buf), "%x.%x (" _GREEN_("NTAG413DNA") ")", major, minor); else snprintf(retStr, sizeof(buf), "%x.%x (" _YELLOW_("Unknown") ")", major, minor); return buf; @@ -656,7 +656,7 @@ static nxp_cardtype_t getCardType(uint8_t major, uint8_t minor) { if (major == 0x11 && minor == 0x00) return PLUS_EV1; if (major == 0x10 && minor == 0x00) - return NTAG413; + return NTAG413DNA; return DESFIRE_UNKNOWN; } @@ -3327,7 +3327,7 @@ static int CmdHF14ADesInfo(const char *Cmd) { if (cardtype == DESFIRE_EV2 || cardtype == DESFIRE_LIGHT || cardtype == DESFIRE_EV3 || - cardtype == NTAG413) { + cardtype == NTAG413DNA) { // Signature originality check uint8_t signature[56] = {0}; size_t signature_len = 0; From 5e26c096bb6d65bafe95c00f5ce2623bee397e52 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Fri, 25 Sep 2020 16:39:07 +0200 Subject: [PATCH 0651/1047] hw version: display firmware platform info --- client/src/cmdhw.c | 24 +++++++++++++----------- client/src/cmdparser.c | 6 ++++++ client/src/cmdparser.h | 1 + 3 files changed, 20 insertions(+), 11 deletions(-) diff --git a/client/src/cmdhw.c b/client/src/cmdhw.c index 4c93210eb..7c24bb342 100644 --- a/client/src/cmdhw.c +++ b/client/src/cmdhw.c @@ -715,18 +715,20 @@ void pm3_version(bool verbose, bool oneliner) { PrintAndLogEx(NORMAL, "%s", temp); PrintAndLogEx(NORMAL, " compiled with " PM3CLIENTCOMPILER __VERSION__ PM3HOSTOS PM3HOSTARCH); - if (IfPm3Flash() == false && IfPm3Smartcard() == false && IfPm3FpcUsartHost() == false) { - PrintAndLogEx(NORMAL, "\n [ " _YELLOW_("PROXMARK3") " ]"); - } else { - PrintAndLogEx(NORMAL, "\n [ " _YELLOW_("PROXMARK3 RDV4") " ]"); - PrintAndLogEx(NORMAL, " external flash: %s", IfPm3Flash() ? _GREEN_("present") : _YELLOW_("absent")); - PrintAndLogEx(NORMAL, " smartcard reader: %s", IfPm3Smartcard() ? _GREEN_("present") : _YELLOW_("absent")); - PrintAndLogEx(NORMAL, "\n [ " _YELLOW_("PROXMARK3 RDV4 Extras") " ]"); - PrintAndLogEx(NORMAL, " FPC USART for BT add-on support: %s", IfPm3FpcUsartHost() ? _GREEN_("present") : _YELLOW_("absent")); - - if (IfPm3FpcUsartDevFromUsb()) { - PrintAndLogEx(NORMAL, " FPC USART for developer support: %s", _GREEN_("present")); + PrintAndLogEx(NORMAL, "\n [ " _YELLOW_("PROXMARK3") " ]"); + if (IfPm3Rdv4Fw() == false ){ + PrintAndLogEx(NORMAL, " firmware.........................%s", _GREEN_("PM3OTHER")); + if (IfPm3FpcUsartHost()) { + PrintAndLogEx(NORMAL, " FPC USART for BT add-on..........%s", _GREEN_("present")); } + } else { + PrintAndLogEx(NORMAL, " firmware.........................%s", _GREEN_("PM3RDV4")); + PrintAndLogEx(NORMAL, " external flash...................%s", IfPm3Flash() ? _GREEN_("present") : _YELLOW_("absent")); + PrintAndLogEx(NORMAL, " smartcard reader.................%s", IfPm3Smartcard() ? _GREEN_("present") : _YELLOW_("absent")); + PrintAndLogEx(NORMAL, " FPC USART for BT add-on..........%s", IfPm3FpcUsartHost() ? _GREEN_("present") : _YELLOW_("absent")); + } + if (IfPm3FpcUsartDevFromUsb()) { + PrintAndLogEx(NORMAL, " FPC USART for developer..........%s", _GREEN_("present")); } PrintAndLogEx(NORMAL, ""); diff --git a/client/src/cmdparser.c b/client/src/cmdparser.c index 93bba22bf..590dee87d 100644 --- a/client/src/cmdparser.c +++ b/client/src/cmdparser.c @@ -26,6 +26,12 @@ bool IfPm3Present(void) { return session.pm3_present; } +bool IfPm3Rdv4Fw(void) { + if (!IfPm3Present()) + return false; + return (pm3_capabilities.compiled_with_flash) || (pm3_capabilities.compiled_with_smartcard); +} + bool IfPm3Flash(void) { if (!IfPm3Present()) return false; diff --git a/client/src/cmdparser.h b/client/src/cmdparser.h index baade0bcb..4e1e37a77 100644 --- a/client/src/cmdparser.h +++ b/client/src/cmdparser.h @@ -24,6 +24,7 @@ typedef struct command_s { // helpers for command_t IsAvailable bool AlwaysAvailable(void); bool IfPm3Present(void); +bool IfPm3Rdv4Fw(void); bool IfPm3Flash(void); bool IfPm3Smartcard(void); bool IfPm3FpcUsart(void); From 259b47b909e7d408a0a5ce1e4cc8074806c6bd43 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Fri, 25 Sep 2020 16:43:48 +0200 Subject: [PATCH 0652/1047] coffee --- client/src/proxmark3.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/src/proxmark3.c b/client/src/proxmark3.c index 1358137bf..1b074d9fe 100644 --- a/client/src/proxmark3.c +++ b/client/src/proxmark3.c @@ -34,8 +34,8 @@ #include "flash.h" #include "preferences.h" -#define BANNERMSG1 "" -#define BANNERMSG2 " :snowflake: bleeding edge :coffee:" +#define BANNERMSG1 " Iceman :coffee:" +#define BANNERMSG2 " :snowflake: bleeding edge" #define BANNERMSG3 " https://github.com/rfidresearchgroup/proxmark3/" typedef enum LogoMode { UTF8, ANSI, ASCII } LogoMode; From 3f26e3c5572daf646437daf0c3310cd5fa22e70d Mon Sep 17 00:00:00 2001 From: Costantino Beretta Date: Fri, 25 Sep 2020 22:00:20 +0200 Subject: [PATCH 0653/1047] Removed an status check that was blocking command 'hf 14b dump', added SwapEndian64 to generated filename to be consistent with UID --- client/src/cmdhf14b.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/client/src/cmdhf14b.c b/client/src/cmdhf14b.c index 811fcb195..a4a165e21 100644 --- a/client/src/cmdhf14b.c +++ b/client/src/cmdhf14b.c @@ -880,11 +880,11 @@ static int CmdHF14BDump(const char *Cmd) { if (fileNameLen < 1) { PrintAndLogEx(INFO, "Using UID as filename"); fptr += sprintf(fptr, "hf-14b-"); - FillFileNameByUID(fptr, card.uid, "-dump", card.uidlen); + FillFileNameByUID(fptr, SwapEndian64(card.uid, 8, 8), "-dump", card.uidlen); } // detect blocksize from card :) - PrintAndLogEx(NORMAL, "Reading memory from tag UID %s", sprint_hex(card.uid, card.uidlen)); + PrintAndLogEx(NORMAL, "Reading memory from tag UID %s", sprint_hex(SwapEndian64(card.uid, 8, 8), card.uidlen)); uint8_t data[cardsize]; memset(data, 0, sizeof(data)); @@ -915,10 +915,10 @@ static int CmdHF14BDump(const char *Cmd) { if (WaitForResponseTimeout(CMD_HF_ISO14443B_COMMAND, &resp, 2000)) { - uint8_t status = resp.oldarg[0] & 0xFF; - if (status > 0) { - continue; - } + //uint8_t status = resp.oldarg[0] & 0xFF; + //if (status > 0) { + // continue; + //} uint16_t len = (resp.oldarg[1] & 0xFFFF); recv = resp.data.asBytes; From 131b58784601ee1ce10281837d3d954670d514aa Mon Sep 17 00:00:00 2001 From: mwalker33 Date: Sat, 26 Sep 2020 13:19:35 +1000 Subject: [PATCH 0654/1047] White Cloner Password Based on the findings of paleopterix --- CHANGELOG.md | 1 + client/src/cmdlft55xx.c | 36 +++++++++++++++++++++++++++++++++++- 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b07ce95dc..bb7fbe7b6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ All notable changes to this project will be documented in this file. This project uses the changelog in accordance with [keepchangelog](http://keepachangelog.com/). Please use this to write notable changes, which is not the same as git commit log... ## [unreleased][unreleased] + - Add lf t55xx chk e option. Checks calculated password based on the EM4100 id from some white cloners forumla by paleopterix (@mwalker33) - Add lf t55xx sniff to allow extracting commands and passwords used be cloners. (@mwalker33) - Add options to `lf read`, `lf cmdread`, `lf sniff` for repeated acquisitions (@doegox) - Change options of `lf read` to match `lf cmdread`, this affects historical `d` and `s` options (@doegox) diff --git a/client/src/cmdlft55xx.c b/client/src/cmdlft55xx.c index 92c78dfa6..1c415dca7 100644 --- a/client/src/cmdlft55xx.c +++ b/client/src/cmdlft55xx.c @@ -254,16 +254,18 @@ static int usage_t55xx_chk(void) { PrintAndLogEx(NORMAL, "press " _YELLOW_("'enter'") " to cancel the command"); PrintAndLogEx(NORMAL, _RED_("WARNING:") " this may brick non-password protected chips!"); PrintAndLogEx(NORMAL, "Try to reading block 7 before\n"); - PrintAndLogEx(NORMAL, "Usage: lf t55xx chk [h] [m] [r ] [f <*.dic>]"); + PrintAndLogEx(NORMAL, "Usage: lf t55xx chk [h] [m] [r ] [f <*.dic>] [e ]"); PrintAndLogEx(NORMAL, "Options:"); PrintAndLogEx(NORMAL, " h - this help"); PrintAndLogEx(NORMAL, " m - use dictionary from flashmemory\n"); print_usage_t55xx_downloadlink(T55XX_DLMODE_ALL, T55XX_DLMODE_ALL); PrintAndLogEx(NORMAL, " f <*.dic> - loads a default keys dictionary file <*.dic>"); + PrintAndLogEx(NORMAL, " e - will try the calculated password from some cloners based on EM4100 ID"); PrintAndLogEx(NORMAL, ""); PrintAndLogEx(NORMAL, "Examples:"); PrintAndLogEx(NORMAL, _YELLOW_(" lf t55xx chk m")); PrintAndLogEx(NORMAL, _YELLOW_(" lf t55xx chk f t55xx_default_pwds")); + PrintAndLogEx(NORMAL, _YELLOW_(" lf t55xx chk e aa11223344")); PrintAndLogEx(NORMAL, ""); return PM3_SUCCESS; } @@ -3003,6 +3005,8 @@ static int CmdT55xxChkPwds(const char *Cmd) { int dl_mode; // to try each downlink mode for each password uint8_t cmdp = 0; bool errors = false; + bool useCardPassword = false; + uint32_t cardPassword = 0x00000000; while (param_getchar(Cmd, cmdp) != 0x00 && !errors) { switch (tolower(param_getchar(Cmd, cmdp))) { @@ -3028,6 +3032,15 @@ static int CmdT55xxChkPwds(const char *Cmd) { use_pwd_file = true; cmdp += 2; break; + case 'e': + // White cloner password based on EM4100 ID + useCardPassword = true; + uint64_t EMID = param_get64ex(Cmd,cmdp + 1,0,16); // Get 5 byte EM4100 ID + uint32_t ID = EMID & 0xFFFFFFFF; // White Cloner only using low 32 bits + // Final formula found by paleopterix (proxmark forum) + cardPassword = 0x00010303 + ((ID & 0x86ee00ec) ^ ((ID & 0x000000ec) << 8) ^ ((ID & 0x86000000) >> 16)); + cmdp+=2; + break; default: PrintAndLogEx(WARNING, "Unknown parameter '%c'", param_getchar(Cmd, cmdp)); errors = true; @@ -3090,6 +3103,27 @@ static int CmdT55xxChkPwds(const char *Cmd) { goto out; } + // try calculated password + if (useCardPassword) { + + PrintAndLogEx(INFO, "Testing %08"PRIX32, cardPassword); + for (dl_mode = downlink_mode; dl_mode <= 3; dl_mode++) { + + if (!AcquireData(T55x7_PAGE0, T55x7_CONFIGURATION_BLOCK, true, cardPassword, dl_mode)) { + continue; + } + + found = tryDetectModulationEx(dl_mode, T55XX_PrintConfig, 0, cardPassword); + if (found) { + PrintAndLogEx(SUCCESS, "Found valid password: [ " _GREEN_("%08"PRIX32) " ]", cardPassword); + dl_mode = 4; // Exit other downlink mode checks + } + + if (!try_all_dl_modes) // Exit loop if not trying all downlink modes + dl_mode = 4; + } + } + if (use_pwd_file) { uint32_t keycount = 0; From e05a10f3e550ae45e9c1abcdf4bc5b45e312a8d8 Mon Sep 17 00:00:00 2001 From: mwalker33 Date: Sat, 26 Sep 2020 17:31:46 +1000 Subject: [PATCH 0655/1047] Update cmdlft55xx.c Use generator function --- client/src/cmdlft55xx.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/client/src/cmdlft55xx.c b/client/src/cmdlft55xx.c index 1c415dca7..0ec4ab58f 100644 --- a/client/src/cmdlft55xx.c +++ b/client/src/cmdlft55xx.c @@ -29,6 +29,7 @@ #include "fileutils.h" // loadDictionary #include "util_posix.h" #include "cmdlf.h" // for lf sniff +#include "generator.h" // Some defines for readability #define T55XX_DLMODE_FIXED 0 // Default Mode @@ -3035,11 +3036,8 @@ static int CmdT55xxChkPwds(const char *Cmd) { case 'e': // White cloner password based on EM4100 ID useCardPassword = true; - uint64_t EMID = param_get64ex(Cmd,cmdp + 1,0,16); // Get 5 byte EM4100 ID - uint32_t ID = EMID & 0xFFFFFFFF; // White Cloner only using low 32 bits - // Final formula found by paleopterix (proxmark forum) - cardPassword = 0x00010303 + ((ID & 0x86ee00ec) ^ ((ID & 0x000000ec) << 8) ^ ((ID & 0x86000000) >> 16)); - cmdp+=2; + cardPassword = lf_t55xx_white_pwdgen (param_get64ex(Cmd,cmdp + 1,0,16) & 0xFFFFFFFF); + cmdp += 2; break; default: PrintAndLogEx(WARNING, "Unknown parameter '%c'", param_getchar(Cmd, cmdp)); From b4728157fb93ad1333783d69bc1f452953bbd026 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sat, 26 Sep 2020 09:33:36 +0200 Subject: [PATCH 0656/1047] fix return codes for 14b, sorting out status checks in client --- armsrc/iso14443b.c | 28 +++++----- armsrc/iso14443b.h | 4 +- client/src/cmdhf14b.c | 117 ++++++++++++++++++++++-------------------- 3 files changed, 76 insertions(+), 73 deletions(-) diff --git a/armsrc/iso14443b.c b/armsrc/iso14443b.c index 0844b5e4d..e91fce41a 100644 --- a/armsrc/iso14443b.c +++ b/armsrc/iso14443b.c @@ -1139,7 +1139,7 @@ static void CodeAndTransmit14443bAsReader(const uint8_t *cmd, int len, uint32_t /* Sends an APDU to the tag * TODO: check CRC and preamble */ -uint8_t iso14443b_apdu(uint8_t const *message, size_t message_length, uint8_t *response, uint16_t respmaxlen) { +int iso14443b_apdu(uint8_t const *message, size_t message_length, uint8_t *response, uint16_t respmaxlen) { LED_A_ON(); uint8_t message_frame[message_length + 4]; @@ -1158,7 +1158,7 @@ uint8_t iso14443b_apdu(uint8_t const *message, size_t message_length, uint8_t *r uint32_t eof_time = 0; CodeAndTransmit14443bAsReader(message_frame, sizeof(message_frame), &start_time, &eof_time); - // get response + // Get response? if (response == NULL) { LED_A_OFF(); return 0; @@ -1170,13 +1170,13 @@ uint8_t iso14443b_apdu(uint8_t const *message, size_t message_length, uint8_t *r if (retlen < 3) { LED_A_OFF(); - return 0; + return -1; } // VALIDATE CRC if (!check_crc(CRC_14443_B, response, retlen)) { if (DBGLEVEL > DBG_DEBUG) DbpString("CRC fail"); - return 0; + return -2; } return retlen; @@ -1185,7 +1185,7 @@ uint8_t iso14443b_apdu(uint8_t const *message, size_t message_length, uint8_t *r /** * SRx Initialise. */ -static uint8_t iso14443b_select_srx_card(iso14b_card_select_t *card) { +static int iso14443b_select_srx_card(iso14b_card_select_t *card) { // INITIATE command: wake up the tag using the INITIATE static const uint8_t init_srx[] = { ISO14443B_INITIATE, 0x00, 0x97, 0x5b }; uint8_t r_init[3] = {0x0}; @@ -1201,7 +1201,7 @@ static uint8_t iso14443b_select_srx_card(iso14b_card_select_t *card) { FpgaDisableTracing(); if (retlen <= 0) - return 2; + return -1; // Randomly generated Chip ID if (card) { @@ -1222,17 +1222,17 @@ static uint8_t iso14443b_select_srx_card(iso14b_card_select_t *card) { FpgaDisableTracing(); if (retlen != 3) { - return 2; + return -1; } // Check the CRC of the answer: if (!check_crc(CRC_14443_B, r_select, retlen)) { - return 3; + return -2; } // Check response from the tag: should be the same UID as the command we just sent: if (select_srx[1] != r_select[0]) { - return 1; + return -3; } // First get the tag's UID: @@ -1248,12 +1248,12 @@ static uint8_t iso14443b_select_srx_card(iso14b_card_select_t *card) { FpgaDisableTracing(); if (retlen != 10) { - return 2; + return -1; } // The check the CRC of the answer if (!check_crc(CRC_14443_B, r_papid, retlen)) { - return 3; + return -2; } if (card) { @@ -1437,11 +1437,11 @@ void ReadSTMemoryIso14443b(uint16_t numofblocks) { uint8_t *mem = BigBuf_malloc((numofblocks + 1) * 4); iso14b_card_select_t card; - uint8_t res = iso14443b_select_srx_card(&card); - + int res = iso14443b_select_srx_card(&card); int isOK = PM3_SUCCESS; + // 0: OK 2: attrib fail, 3:crc fail, - if (res > 0) { + if (res < 1) { isOK = PM3_ETIMEOUT; goto out; } diff --git a/armsrc/iso14443b.h b/armsrc/iso14443b.h index ac2c4f831..199e5c63f 100644 --- a/armsrc/iso14443b.h +++ b/armsrc/iso14443b.h @@ -27,10 +27,10 @@ #endif void iso14443b_setup(void); -uint8_t iso14443b_apdu(uint8_t const *message, size_t message_length, uint8_t *response, uint16_t respmaxlen); +int iso14443b_apdu(uint8_t const *message, size_t message_length, uint8_t *response, uint16_t respmaxlen); int iso14443b_select_card(iso14b_card_select_t *card); -uint8_t iso14443b_select_card_srx(iso14b_card_select_t *card); +int iso14443b_select_card_srx(iso14b_card_select_t *card); void SimulateIso14443bTag(uint32_t pupi); void AcquireRawAdcSamplesIso14443b(uint32_t parameter); diff --git a/client/src/cmdhf14b.c b/client/src/cmdhf14b.c index a4a165e21..5ab853b2c 100644 --- a/client/src/cmdhf14b.c +++ b/client/src/cmdhf14b.c @@ -32,7 +32,7 @@ static int usage_hf_14b_info(void) { PrintAndLogEx(NORMAL, " s silently"); PrintAndLogEx(NORMAL, "Example:"); PrintAndLogEx(NORMAL, _YELLOW_(" hf 14b info")); - return 0; + return PM3_SUCCESS; } static int usage_hf_14b_reader(void) { PrintAndLogEx(NORMAL, "Usage: hf 14b reader [h] [s]"); @@ -41,7 +41,7 @@ static int usage_hf_14b_reader(void) { PrintAndLogEx(NORMAL, " s silently"); PrintAndLogEx(NORMAL, "Example:"); PrintAndLogEx(NORMAL, _YELLOW_(" hf 14b reader")); - return 0; + return PM3_SUCCESS; } static int usage_hf_14b_raw(void) { PrintAndLogEx(NORMAL, "Usage: hf 14b raw [-h] [-r] [-c] [-p] [-s / -ss] [-t] <0A 0B 0C ... hex>"); @@ -55,7 +55,7 @@ static int usage_hf_14b_raw(void) { PrintAndLogEx(NORMAL, " -t timeout in ms"); PrintAndLogEx(NORMAL, "Example:"); PrintAndLogEx(NORMAL, _YELLOW_(" hf 14b raw -s -c -p 0200a40400")); - return 0; + return PM3_SUCCESS; } static int usage_hf_14b_sniff(void) { PrintAndLogEx(NORMAL, "It get data from the field and saves it into command buffer."); @@ -65,7 +65,7 @@ static int usage_hf_14b_sniff(void) { PrintAndLogEx(NORMAL, " h this help"); PrintAndLogEx(NORMAL, "Example:"); PrintAndLogEx(NORMAL, _YELLOW_(" hf 14b sniff")); - return 0; + return PM3_SUCCESS; } static int usage_hf_14b_sim(void) { PrintAndLogEx(NORMAL, "Emulating ISO/IEC 14443 type B tag with 4 UID / PUPI"); @@ -76,7 +76,7 @@ static int usage_hf_14b_sim(void) { PrintAndLogEx(NORMAL, "Example:"); PrintAndLogEx(NORMAL, _YELLOW_(" hf 14b sim")); PrintAndLogEx(NORMAL, _YELLOW_(" hf 14b sim u 11223344")); - return 0; + return PM3_SUCCESS; } static int usage_hf_14b_read_srx(void) { PrintAndLogEx(NORMAL, "Usage: hf 14b sriread [h] <1|2>"); @@ -86,7 +86,7 @@ static int usage_hf_14b_read_srx(void) { PrintAndLogEx(NORMAL, "Example:"); PrintAndLogEx(NORMAL, _YELLOW_(" hf 14b sriread 1")); PrintAndLogEx(NORMAL, _YELLOW_(" hf 14b sriread 2")); - return 0; + return PM3_SUCCESS; } static int usage_hf_14b_write_srx(void) { PrintAndLogEx(NORMAL, "Usage: hf 14b [h] sriwrite <1|2> "); @@ -100,7 +100,7 @@ static int usage_hf_14b_write_srx(void) { PrintAndLogEx(NORMAL, _YELLOW_(" hf 14b sriwrite 1 FF 11223344")); PrintAndLogEx(NORMAL, _YELLOW_(" hf 14b sriwrite 2 15 11223344")); PrintAndLogEx(NORMAL, _YELLOW_(" hf 14b sriwrite 2 FF 11223344")); - return 0; + return PM3_SUCCESS; } static int usage_hf_14b_dump(void) { PrintAndLogEx(NORMAL, "This command dumps the contents of a ISO-14443-B tag and save it to file\n" @@ -115,16 +115,9 @@ static int usage_hf_14b_dump(void) { _YELLOW_("\thf 14b dump f\n") _YELLOW_("\thf 14b dump 2 f mydump") ); - return 0; + return PM3_SUCCESS; } -/* -static void switch_on_field_14b(void) { - clearCommandBuffer(); - SendCommandMIX(CMD_HF_ISO14443B_COMMAND, ISO14B_CONNECT, 0, 0, NULL, 0); -} -*/ - static int switch_off_field_14b(void) { clearCommandBuffer(); SendCommandMIX(CMD_HF_ISO14443B_COMMAND, ISO14B_DISCONNECT, 0, 0, NULL, 0); @@ -311,12 +304,14 @@ static bool get_14b_UID(iso14b_card_select_t *card) { if (card == NULL) return false; + int status = 0; + PacketResponseNG resp; clearCommandBuffer(); SendCommandMIX(CMD_HF_ISO14443B_COMMAND, ISO14B_CONNECT | ISO14B_SELECT_SR | ISO14B_DISCONNECT, 0, 0, NULL, 0); if (WaitForResponseTimeout(CMD_HF_ISO14443B_COMMAND, &resp, TIMEOUT)) { - uint8_t status = resp.oldarg[0]; + status = resp.oldarg[0]; if (status == 0) { memcpy(card, (iso14b_card_select_t *)resp.data.asBytes, sizeof(iso14b_card_select_t)); return true; @@ -328,7 +323,7 @@ static bool get_14b_UID(iso14b_card_select_t *card) { SendCommandMIX(CMD_HF_ISO14443B_COMMAND, ISO14B_CONNECT | ISO14B_SELECT_STD | ISO14B_DISCONNECT, 0, 0, NULL, 0); if (WaitForResponseTimeout(CMD_HF_ISO14443B_COMMAND, &resp, TIMEOUT)) { - uint8_t status = resp.oldarg[0]; + status = resp.oldarg[0]; if (status == 0) { memcpy(card, (iso14b_card_select_t *)resp.data.asBytes, sizeof(iso14b_card_select_t)); return true; @@ -345,7 +340,7 @@ static bool get_14b_UID(iso14b_card_select_t *card) { // 4 = bit rate capacity // 5 = max frame size / -4 info // 6 = FWI / Coding options -static void print_atqb_resp(uint8_t *data, uint8_t cid) { +static int print_atqb_resp(uint8_t *data, uint8_t cid) { //PrintAndLogEx(SUCCESS, " UID: %s", sprint_hex(data+1,4)); PrintAndLogEx(SUCCESS, " App Data: %s", sprint_hex(data, 4)); PrintAndLogEx(SUCCESS, " Protocol: %s", sprint_hex(data + 4, 3)); @@ -387,7 +382,7 @@ static void print_atqb_resp(uint8_t *data, uint8_t cid) { PrintAndLogEx(SUCCESS, "Tag :"); PrintAndLogEx(SUCCESS, " Max Buf Length: %u (MBLI) %s", cid >> 4, (cid & 0xF0) ? "" : "chained frames not supported"); PrintAndLogEx(SUCCESS, " CID : %u", cid & 0x0f); - return; + return PM3_SUCCESS; } // get SRx chip model (from UID) // from ST Microelectronics @@ -502,7 +497,7 @@ static void print_st_general_info(uint8_t *data, uint8_t len) { // 14b get and print Full Info (as much as we know) static bool HF14B_Std_Info(bool verbose) { - bool isSuccess = false; + bool is_success = false; // 14b get and print UID only (general info) clearCommandBuffer(); @@ -512,13 +507,13 @@ static bool HF14B_Std_Info(bool verbose) { if (!WaitForResponseTimeout(CMD_HF_ISO14443B_COMMAND, &resp, TIMEOUT)) { if (verbose) PrintAndLogEx(WARNING, "command execution timeout"); switch_off_field_14b(); - return false; + return is_success; } iso14b_card_select_t card; memcpy(&card, (iso14b_card_select_t *)resp.data.asBytes, sizeof(iso14b_card_select_t)); - uint64_t status = resp.oldarg[0]; + int status = resp.oldarg[0]; switch (status) { case 0: @@ -527,12 +522,12 @@ static bool HF14B_Std_Info(bool verbose) { PrintAndLogEx(SUCCESS, " ATQB : %s", sprint_hex(card.atqb, sizeof(card.atqb))); PrintAndLogEx(SUCCESS, " CHIPID : %02X", card.chipid); print_atqb_resp(card.atqb, card.cid); - isSuccess = true; + is_success = true; break; - case 2: + case -1: if (verbose) PrintAndLogEx(FAILED, "ISO 14443-3 ATTRIB fail"); break; - case 3: + case -2: if (verbose) PrintAndLogEx(FAILED, "ISO 14443-3 CRC fail"); break; default: @@ -540,7 +535,7 @@ static bool HF14B_Std_Info(bool verbose) { break; } - return isSuccess; + return is_success; } // SRx get and print full info (needs more info...) @@ -558,8 +553,8 @@ static bool HF14B_ST_Info(bool verbose) { iso14b_card_select_t card; memcpy(&card, (iso14b_card_select_t *)resp.data.asBytes, sizeof(iso14b_card_select_t)); - uint64_t status = resp.oldarg[0]; - if (status > 0) + int status = resp.oldarg[0]; + if (status < 0) return false; print_st_general_info(card.uid, card.uidlen); @@ -599,7 +594,7 @@ static int CmdHF14Binfo(const char *Cmd) { static bool HF14B_ST_Reader(bool verbose) { - bool isSuccess = false; + bool is_success = false; // SRx get and print general info about SRx chip from UID clearCommandBuffer(); @@ -607,38 +602,38 @@ static bool HF14B_ST_Reader(bool verbose) { PacketResponseNG resp; if (!WaitForResponseTimeout(CMD_HF_ISO14443B_COMMAND, &resp, TIMEOUT)) { if (verbose) PrintAndLogEx(WARNING, "command execution timeout"); - return false; + return is_success; } iso14b_card_select_t card; memcpy(&card, (iso14b_card_select_t *)resp.data.asBytes, sizeof(iso14b_card_select_t)); - uint64_t status = resp.oldarg[0]; + int status = resp.oldarg[0]; switch (status) { case 0: print_st_general_info(card.uid, card.uidlen); - isSuccess = true; + is_success = true; break; - case 1: - if (verbose) PrintAndLogEx(FAILED, "ISO 14443-3 random chip id fail"); - break; - case 2: + case -1: if (verbose) PrintAndLogEx(FAILED, "ISO 14443-3 ATTRIB fail"); break; - case 3: + case -2: if (verbose) PrintAndLogEx(FAILED, "ISO 14443-3 CRC fail"); break; + case -3: + if (verbose) PrintAndLogEx(FAILED, "ISO 14443-3 random chip id fail"); + break; default: if (verbose) PrintAndLogEx(FAILED, "ISO 14443-b card select SRx failed"); break; } - return isSuccess; + return is_success; } static bool HF14B_Std_Reader(bool verbose) { - bool isSuccess = false; + bool is_success = false; // 14b get and print UID only (general info) clearCommandBuffer(); @@ -653,7 +648,7 @@ static bool HF14B_Std_Reader(bool verbose) { iso14b_card_select_t card; memcpy(&card, (iso14b_card_select_t *)resp.data.asBytes, sizeof(iso14b_card_select_t)); - uint64_t status = resp.oldarg[0]; + int status = resp.oldarg[0]; switch (status) { case 0: @@ -662,19 +657,19 @@ static bool HF14B_Std_Reader(bool verbose) { PrintAndLogEx(SUCCESS, " ATQB : %s", sprint_hex(card.atqb, sizeof(card.atqb))); PrintAndLogEx(SUCCESS, " CHIPID : %02X", card.chipid); print_atqb_resp(card.atqb, card.cid); - isSuccess = true; + is_success = true; break; - case 2: + case -1: if (verbose) PrintAndLogEx(FAILED, "ISO 14443-3 ATTRIB fail"); break; - case 3: + case -2: if (verbose) PrintAndLogEx(FAILED, "ISO 14443-3 CRC fail"); break; default: if (verbose) PrintAndLogEx(FAILED, "ISO 14443-b card select failed"); break; } - return isSuccess; + return is_success; } // test for other 14b type tags (mimic another reader - don't have tags to identify) @@ -880,17 +875,18 @@ static int CmdHF14BDump(const char *Cmd) { if (fileNameLen < 1) { PrintAndLogEx(INFO, "Using UID as filename"); fptr += sprintf(fptr, "hf-14b-"); - FillFileNameByUID(fptr, SwapEndian64(card.uid, 8, 8), "-dump", card.uidlen); + FillFileNameByUID(fptr, SwapEndian64(card.uid, card.uidlen, 8), "-dump", card.uidlen); } // detect blocksize from card :) - PrintAndLogEx(NORMAL, "Reading memory from tag UID %s", sprint_hex(SwapEndian64(card.uid, 8, 8), card.uidlen)); + PrintAndLogEx(NORMAL, "Reading memory from tag UID %s", sprint_hex(SwapEndian64(card.uid, card.uidlen, 8), card.uidlen)); uint8_t data[cardsize]; memset(data, 0, sizeof(data)); int blocknum = 0; uint8_t *recv = NULL; + int status = 0; PacketResponseNG resp; clearCommandBuffer(); @@ -898,8 +894,9 @@ static int CmdHF14BDump(const char *Cmd) { //select if (WaitForResponseTimeout(CMD_HF_ISO14443B_COMMAND, &resp, 2000)) { - if (resp.oldarg[0]) { - PrintAndLogEx(INFO, "failed to select %" PRId64 " | %" PRId64, resp.oldarg[0], resp.oldarg[1]); + status = resp.oldarg[0]; + if (status < 0) { + PrintAndLogEx(FAILED, "failed to select arg0[%" PRId64 "] arg1 [%" PRId64 "]", resp.oldarg[0], resp.oldarg[1]); goto out; } } @@ -915,10 +912,11 @@ static int CmdHF14BDump(const char *Cmd) { if (WaitForResponseTimeout(CMD_HF_ISO14443B_COMMAND, &resp, 2000)) { - //uint8_t status = resp.oldarg[0] & 0xFF; - //if (status > 0) { - // continue; - //} + status = resp.oldarg[0]; + if (status < 0) { + PrintAndLogEx(FAILED, "retrying one more time"); + continue; + } uint16_t len = (resp.oldarg[1] & 0xFFFF); recv = resp.data.asBytes; @@ -1112,10 +1110,12 @@ int CmdHF14B(const char *Cmd) { int infoHF14B(bool verbose) { // try std 14b (atqb) - if (HF14B_Std_Info(verbose)) return 1; + if (HF14B_Std_Info(verbose)) + return 1; // try ST 14b - if (HF14B_ST_Info(verbose)) return 1; + if (HF14B_ST_Info(verbose)) + return 1; // try unknown 14b read commands (to be identified later) // could be read of calypso, CEPAS, moneo, or pico pass. @@ -1127,14 +1127,17 @@ int infoHF14B(bool verbose) { int readHF14B(bool verbose) { // try std 14b (atqb) - if (HF14B_Std_Reader(verbose)) return 1; + if (HF14B_Std_Reader(verbose)) + return 1; // try ST Microelectronics 14b - if (HF14B_ST_Reader(verbose)) return 1; + if (HF14B_ST_Reader(verbose)) + return 1; // try unknown 14b read commands (to be identified later) // could be read of calypso, CEPAS, moneo, or pico pass. - if (HF14B_Other_Reader()) return 1; + if (HF14B_Other_Reader()) + return 1; if (verbose) PrintAndLogEx(FAILED, "no 14443-B tag found"); return 0; From ff21ca77f9714aaeddcf840d7fa9784ac7ad9e0c Mon Sep 17 00:00:00 2001 From: mwalker33 Date: Sat, 26 Sep 2020 18:22:18 +1000 Subject: [PATCH 0657/1047] Update cmdlft55xx.c Clean up output --- client/src/cmdlft55xx.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/client/src/cmdlft55xx.c b/client/src/cmdlft55xx.c index 0ec4ab58f..8d6c3b8e3 100644 --- a/client/src/cmdlft55xx.c +++ b/client/src/cmdlft55xx.c @@ -3007,7 +3007,8 @@ static int CmdT55xxChkPwds(const char *Cmd) { uint8_t cmdp = 0; bool errors = false; bool useCardPassword = false; - uint32_t cardPassword = 0x00000000; + uint32_t cardPassword = 0x00; + uint64_t cardID = 0x00; while (param_getchar(Cmd, cmdp) != 0x00 && !errors) { switch (tolower(param_getchar(Cmd, cmdp))) { @@ -3036,7 +3037,9 @@ static int CmdT55xxChkPwds(const char *Cmd) { case 'e': // White cloner password based on EM4100 ID useCardPassword = true; - cardPassword = lf_t55xx_white_pwdgen (param_get64ex(Cmd,cmdp + 1,0,16) & 0xFFFFFFFF); + cardID = param_get64ex(Cmd,cmdp + 1,0,16); + uint32_t card32Bit = cardID & 0xFFFFFFFF; + cardPassword = lf_t55xx_white_pwdgen (card32Bit); cmdp += 2; break; default: @@ -3104,7 +3107,7 @@ static int CmdT55xxChkPwds(const char *Cmd) { // try calculated password if (useCardPassword) { - PrintAndLogEx(INFO, "Testing %08"PRIX32, cardPassword); + PrintAndLogEx(INFO, "Testing %08"PRIX32" generated ", cardPassword); for (dl_mode = downlink_mode; dl_mode <= 3; dl_mode++) { if (!AcquireData(T55x7_PAGE0, T55x7_CONFIGURATION_BLOCK, true, cardPassword, dl_mode)) { @@ -3113,7 +3116,7 @@ static int CmdT55xxChkPwds(const char *Cmd) { found = tryDetectModulationEx(dl_mode, T55XX_PrintConfig, 0, cardPassword); if (found) { - PrintAndLogEx(SUCCESS, "Found valid password: [ " _GREEN_("%08"PRIX32) " ]", cardPassword); + PrintAndLogEx(SUCCESS, "Found valid password : [ " _GREEN_("%08"PRIX32) " ]", cardPassword); dl_mode = 4; // Exit other downlink mode checks } @@ -3122,7 +3125,7 @@ static int CmdT55xxChkPwds(const char *Cmd) { } } - if (use_pwd_file) { + if ((!found) && (use_pwd_file)) { uint32_t keycount = 0; int res = loadFileDICTIONARY_safe(filename, (void **) &keyBlock, 4, &keycount); @@ -3167,9 +3170,10 @@ static int CmdT55xxChkPwds(const char *Cmd) { dl_mode = 4; } } - if (!found) PrintAndLogEx(WARNING, "Check pwd failed"); } + if (!found) PrintAndLogEx(WARNING, "Check pwd failed"); + free(keyBlock); out: From a03888fd63c30da34a5e49dc7be63014a1b8a616 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sat, 26 Sep 2020 14:13:21 +0200 Subject: [PATCH 0658/1047] hf 14b dump - added lockbit information --- client/src/cmdhf14b.c | 282 +++++++++++++++++++++++++++++++----------- 1 file changed, 209 insertions(+), 73 deletions(-) diff --git a/client/src/cmdhf14b.c b/client/src/cmdhf14b.c index 5ab853b2c..0ab1e8cbf 100644 --- a/client/src/cmdhf14b.c +++ b/client/src/cmdhf14b.c @@ -89,11 +89,11 @@ static int usage_hf_14b_read_srx(void) { return PM3_SUCCESS; } static int usage_hf_14b_write_srx(void) { - PrintAndLogEx(NORMAL, "Usage: hf 14b [h] sriwrite <1|2> "); + PrintAndLogEx(NORMAL, "Usage: hf 14b [h] sriwrite <1|2> "); PrintAndLogEx(NORMAL, "Options:"); PrintAndLogEx(NORMAL, " h this help"); PrintAndLogEx(NORMAL, " <1|2> 1 = SRIX4K , 2 = SRI512"); - PrintAndLogEx(NORMAL, " BLOCK number depends on tag, special block == FF"); + PrintAndLogEx(NORMAL, " (hex) block number depends on tag, special block == FF"); PrintAndLogEx(NORMAL, " hex bytes of data to be written"); PrintAndLogEx(NORMAL, "Example:"); PrintAndLogEx(NORMAL, _YELLOW_(" hf 14b sriwrite 1 7F 11223344")); @@ -420,53 +420,175 @@ static char *get_ST_Chip_Model(uint8_t data) { return retStr; } -// REMAKE: -/* -static int print_ST_Lock_info(uint8_t model) { +static char *get_st_lock_info(uint8_t model, uint8_t *lockbytes, uint8_t blk) { - PrintAndLogEx(NORMAL, "Chip Write Protection Bits:"); - // now interpret the data - switch (model){ - case 0x0: //fall through (SRIX4K special) - case 0x3: //fall through (SRIx4K) - case 0x7: // (SRI4K) - //only need data[3] - blk1 = 9; - PrintAndLogEx(NORMAL, " raw: %s", sprint_bin(data+3, 1)); - PrintAndLogEx(NORMAL, " 07/08:%slocked", (data[3] & 1) ? " not " : " " ); - for (uint8_t i = 1; i<8; i++){ - PrintAndLogEx(NORMAL, " %02u:%slocked", blk1, (data[3] & (1 << i)) ? " not " : " " ); - blk1++; + static char str[3] = { 0x00, 0x00, 0x00 }; + char *s = str; + sprintf(s, " "); + + if (blk > 15) { + return s; } - break; - case 0x4: //fall through (SRIX512) - case 0x6: //fall through (SRI512) - case 0xC: // (SRT512) - //need data[2] and data[3] - blk1 = 0; - PrintAndLogEx(NORMAL, " raw: %s", sprint_bin(data+2, 2)); - for (uint8_t b=2; b<4; b++){ - for (uint8_t i=0; i<8; i++){ - PrintAndLogEx(NORMAL, " %02u:%slocked", blk1, (data[b] & (1 << i)) ? " not " : " " ); - blk1++; + uint8_t mask = 0; + switch (model) { + case 0x0: // SRIX4K special + case 0x3: // SRIx4K + case 0x7: { // SRI4K + //only need data[3] + switch(blk) { + case 7: + case 8: + mask = 0x01; + break; + case 9: + mask = 0x02; + break; + case 10: + mask = 0x04; + break; + case 11: + mask = 0x08; + break; + case 12: + mask = 0x10; + break; + case 13: + mask = 0x20; + break; + case 14: + mask = 0x40; + break; + case 15: + mask = 0x80; + break; + default: + return s; + } + if ((lockbytes[1] & mask) == 0) { + sprintf(s, "*"); + } + return s; + } + case 0x4: // SRIX512 + case 0x6: // SRI512 + case 0xC: { // SRT512 + //need data[2] and data[3] + uint8_t b = 1; + switch(blk) { + case 0: + mask = 0x01; + break; + case 1: + mask = 0x02; + break; + case 2: + mask = 0x04; + break; + case 3: + mask = 0x08; + break; + case 4: + mask = 0x10; + break; + case 5: + mask = 0x20; + break; + case 6: + mask = 0x40; + break; + case 7: + mask = 0x80; + break; + case 8: + mask = 0x01; + b = 0; + break; + case 9: + mask = 0x02; + b = 0; + break; + case 10: + mask = 0x04; + b = 0; + break; + case 11: + mask = 0x08; + b = 0; + break; + case 12: + mask = 0x10; + b = 0; + break; + case 13: + mask = 0x20; + b = 0; + break; + case 14: + mask = 0x40; + b = 0; + break; + case 15: + mask = 0x80; + b = 0; + break; + } + if ((lockbytes[b] & mask) == 0) { + sprintf(s, "*"); + } + return s; + } + case 0x2: { // SR176 + //need data[2] + switch(blk) { + case 0: + case 1: + mask = 0x1; + break; + case 2: + case 3: + mask = 0x2; + break; + case 4: + case 5: + mask = 0x4; + break; + case 6: + case 7: + mask = 0x8; + break; + case 8: + case 9: + mask = 0x10; + break; + case 10: + case 11: + mask = 0x20; + break; + case 12: + case 13: + mask = 0x40; + break; + case 14: + case 15: + mask = 0x80; + break; + } + // iceman: this is opposite! need sample to test with. + if ((lockbytes[0] & mask)) { + sprintf(s, "*"); + } + return s; + } + default: + break; } - } - break; - case 0x2: // (SR176) - //need data[2] - blk1 = 0; - PrintAndLogEx(NORMAL, " raw: %s", sprint_bin(data+2, 1)); - for (uint8_t i = 0; i<8; i++){ - PrintAndLogEx(NORMAL, " %02u/%02u:%slocked", blk1, blk1+1, (data[2] & (1 << i)) ? " " : " not " ); - blk1+=2; - } - break; - default: - return rawClose(); - } - return 1; + return s; } -*/ + +static uint8_t get_st_chipid(uint8_t *uid) { + return uid[5] >> 2; +} + // print UID info from SRx chips (ST Microelectronics) static void print_st_general_info(uint8_t *data, uint8_t len) { //uid = first 8 bytes in data @@ -673,7 +795,7 @@ static bool HF14B_Std_Reader(bool verbose) { } // test for other 14b type tags (mimic another reader - don't have tags to identify) -static bool HF14B_Other_Reader(void) { +static bool HF14B_Other_Reader(bool verbose) { // uint8_t data[] = {0x00, 0x0b, 0x3f, 0x80}; // uint8_t datalen = 4; @@ -687,9 +809,9 @@ static bool HF14B_Other_Reader(void) { // WaitForResponse(CMD_HF_ISO14443B_COMMAND,&resp); // if (datalen > 2 ) { - // PrintAndLogEx(NORMAL, "\n14443-3b tag found:"); - // PrintAndLogEx(NORMAL, "unknown tag type answered to a 0x000b3f80 command ans:"); - // //PrintAndLogEx(NORMAL, "%s", sprint_hex(data, datalen)); + // PrintAndLogEx(SUCCESS, "\n14443-3b tag found:"); + // PrintAndLogEx(SUCCESS, "unknown tag type answered to a 0x000b3f80 command ans:"); + // //PrintAndLogEx(SUCCESS, "%s", sprint_hex(data, datalen)); // rawclose(); // return true; // } @@ -701,9 +823,9 @@ static bool HF14B_Other_Reader(void) { // WaitForResponse(CMD_HF_ISO14443B_COMMAND, &resp); // if (datalen > 0) { - // PrintAndLogEx(NORMAL, "\n14443-3b tag found:"); - // PrintAndLogEx(NORMAL, "Unknown tag type answered to a 0x0A command ans:"); - // // PrintAndLogEx(NORMAL, "%s", sprint_hex(data, datalen)); + // PrintAndLogEx(SUCCESS, "\n14443-3b tag found:"); + // PrintAndLogEx(SUCCESS, "Unknown tag type answered to a 0x0A command ans:"); + // // PrintAndLogEx(SUCCESS, "%s", sprint_hex(data, datalen)); // rawClose(); // return true; // } @@ -715,9 +837,9 @@ static bool HF14B_Other_Reader(void) { // WaitForResponse(CMD_HF_ISO14443B_COMMAND, &resp); // if (datalen > 0) { - // PrintAndLogEx(NORMAL, "\n14443-3b tag found:"); - // PrintAndLogEx(NORMAL, "Unknown tag type answered to a 0x0C command ans:"); - // PrintAndLogEx(NORMAL, "%s", sprint_hex(data, datalen)); + // PrintAndLogEx(SUCCESS, "\n14443-3b tag found:"); + // PrintAndLogEx(SUCCESS, "Unknown tag type answered to a 0x0C command ans:"); + // PrintAndLogEx(SUCCESS, "%s", sprint_hex(data, datalen)); // rawClose(); // return true; // } @@ -827,10 +949,6 @@ static int CmdHF14BDump(const char *Cmd) { bool errors = false; uint8_t cmdp = 0, cardtype = 1; uint16_t cardsize = 0; - uint8_t blocks = 0; - iso14b_card_select_t card; - - if (strlen(Cmd) < 1) return usage_hf_14b_dump(); while (param_getchar(Cmd, cmdp) != 0x00 && !errors) { switch (tolower(param_getchar(Cmd, cmdp))) { @@ -855,6 +973,7 @@ static int CmdHF14BDump(const char *Cmd) { //Validations if (errors) return usage_hf_14b_dump(); + uint8_t blocks = 0; switch (cardtype) { case 2: cardsize = (512 / 8) + 4; @@ -867,6 +986,7 @@ static int CmdHF14BDump(const char *Cmd) { break; } + iso14b_card_select_t card; if (get_14b_UID(&card) == false) { PrintAndLogEx(WARNING, "No tag found."); return PM3_SUCCESS; @@ -879,12 +999,10 @@ static int CmdHF14BDump(const char *Cmd) { } // detect blocksize from card :) - PrintAndLogEx(NORMAL, "Reading memory from tag UID %s", sprint_hex(SwapEndian64(card.uid, card.uidlen, 8), card.uidlen)); - + PrintAndLogEx(INFO, "Reading memory from tag UID " _GREEN_("%s"), sprint_hex_inrow(SwapEndian64(card.uid, card.uidlen, 8), card.uidlen)); + uint8_t data[cardsize]; memset(data, 0, sizeof(data)); - - int blocknum = 0; uint8_t *recv = NULL; int status = 0; @@ -901,8 +1019,10 @@ static int CmdHF14BDump(const char *Cmd) { } } - uint8_t req[2] = {ISO14443B_READ_BLK}; + PrintAndLogEx(INFO, "." NOLF); + uint8_t req[2] = {ISO14443B_READ_BLK}; + int blocknum = 0; for (int retry = 0; retry < 5; retry++) { req[1] = blocknum; @@ -928,8 +1048,8 @@ static int CmdHF14BDump(const char *Cmd) { memcpy(data + (blocknum * 4), resp.data.asBytes, 4); + // last read. if (blocknum == 0xFF) { - //last read. break; } @@ -941,31 +1061,47 @@ static int CmdHF14BDump(const char *Cmd) { } PrintAndLogEx(NORMAL, "." NOLF); + fflush(stdout); } } PrintAndLogEx(NORMAL, ""); if (blocknum != 0xFF) { - PrintAndLogEx(NORMAL, "Dump failed"); + PrintAndLogEx(FAILED, "Dump failed"); goto out; } - PrintAndLogEx(NORMAL, "block# | data | ascii"); - PrintAndLogEx(NORMAL, "---------+--------------+----------"); + uint8_t chipid = get_st_chipid(card.uid); + PrintAndLogEx(DEBUG, "systemblock : %s", sprint_hex(data + (blocknum * 4), 4)); + PrintAndLogEx(DEBUG, " otp lock : %02x %02x", data[(blocknum * 4)], data[(blocknum * 4) + 1]); + PrintAndLogEx(DEBUG, "chipid : %02x", chipid); + + PrintAndLogEx(INFO, " block# | data |lck| ascii"); + PrintAndLogEx(INFO, "---------+--------------+---+----------"); for (int i = 0; i <= blocks; i++) { - PrintAndLogEx(NORMAL, - "%3d/0x%02X | %s | %s", + PrintAndLogEx(INFO, + "%3d/0x%02X | %s | %s | %s", i, i, sprint_hex(data + (i * 4), 4), + get_st_lock_info(chipid, data + (blocknum * 4), i), sprint_ascii(data + (i * 4), 4) ); } - + + PrintAndLogEx(INFO, + "%3d/0x%02X | %s | %s | %s", + 0xFF, + 0xFF, + sprint_hex(data + (0xFF * 4), 4), + get_st_lock_info(chipid, data + (blocknum * 4), 0xFF), + sprint_ascii(data + (0xFF * 4), 4) + ); + PrintAndLogEx(INFO, "---------+--------------+---+----------"); PrintAndLogEx(NORMAL, ""); - + // save to file size_t datalen = (blocks + 1) * 4; saveFileEML(filename, data, datalen, 4); saveFile(filename, ".bin", data, datalen); @@ -1136,7 +1272,7 @@ int readHF14B(bool verbose) { // try unknown 14b read commands (to be identified later) // could be read of calypso, CEPAS, moneo, or pico pass. - if (HF14B_Other_Reader()) + if (HF14B_Other_Reader(verbose)) return 1; if (verbose) PrintAndLogEx(FAILED, "no 14443-B tag found"); From 71fd4193adc995e9137654ae741f28c686f9f6e8 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sat, 26 Sep 2020 14:46:06 +0200 Subject: [PATCH 0659/1047] hf 14a info - adapt infineon and gen3 detection --- client/src/cmdhf14a.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/client/src/cmdhf14a.c b/client/src/cmdhf14a.c index cc6a7caab..1c1f2adde 100644 --- a/client/src/cmdhf14a.c +++ b/client/src/cmdhf14a.c @@ -1679,9 +1679,13 @@ int infoHF14A(bool verbose, bool do_nack_test, bool do_aid_search) { } else if ((card.uid[1] & 0xF0) == 0x70) { printTag("my-d(tm) move lean SLE 66R01L"); } + isMifareUltralight = true; + isMifareClassic = false; if (card.sak == 0x88) { printTag("Infineon MIFARE CLASSIC 1K"); + isMifareUltralight = false; + isMifareClassic = true; } getTagLabel(card.uid[0], card.uid[1]); break; From cfdadd8c47afcbc55107fc5ac3cb7b71930f7836 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sat, 26 Sep 2020 14:47:03 +0200 Subject: [PATCH 0660/1047] hf 14b dump - unify lck bits as in mfu --- client/src/cmdhf14b.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/client/src/cmdhf14b.c b/client/src/cmdhf14b.c index 0ab1e8cbf..a96976157 100644 --- a/client/src/cmdhf14b.c +++ b/client/src/cmdhf14b.c @@ -422,13 +422,14 @@ static char *get_ST_Chip_Model(uint8_t data) { static char *get_st_lock_info(uint8_t model, uint8_t *lockbytes, uint8_t blk) { - static char str[3] = { 0x00, 0x00, 0x00 }; + static char str[16]; char *s = str; sprintf(s, " "); if (blk > 15) { return s; } + uint8_t mask = 0; switch (model) { case 0x0: // SRIX4K special @@ -465,7 +466,7 @@ static char *get_st_lock_info(uint8_t model, uint8_t *lockbytes, uint8_t blk) { return s; } if ((lockbytes[1] & mask) == 0) { - sprintf(s, "*"); + sprintf(s, _RED_("1")); } return s; } @@ -533,7 +534,7 @@ static char *get_st_lock_info(uint8_t model, uint8_t *lockbytes, uint8_t blk) { break; } if ((lockbytes[b] & mask) == 0) { - sprintf(s, "*"); + sprintf(s, _RED_("1")); } return s; } @@ -575,7 +576,7 @@ static char *get_st_lock_info(uint8_t model, uint8_t *lockbytes, uint8_t blk) { } // iceman: this is opposite! need sample to test with. if ((lockbytes[0] & mask)) { - sprintf(s, "*"); + sprintf(s, _RED_("1")); } return s; } From c0d5b2427c1cd62ada5abbeccbd938e840ee5e6c Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sat, 26 Sep 2020 14:54:11 +0200 Subject: [PATCH 0661/1047] fix coverity --- common/generator.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/generator.c b/common/generator.c index 37a1aa4f7..d0644c61a 100644 --- a/common/generator.c +++ b/common/generator.c @@ -479,7 +479,7 @@ int generator_selftest(void) { uint32_t lf_id = lf_t55xx_white_pwdgen(0x00000080); - success = (lf_id = 0x00018383); + success = (lf_id == 0x00018383); if (success) testresult++; PrintAndLogEx(success ? SUCCESS : WARNING, "ID | 0x00000080 | %08"PRIx32 " - %s", lf_id, success ? "OK" : "->00018383<--"); From 88050f36fec21a2f4e526d9454aa5045ed190a54 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sat, 26 Sep 2020 14:54:34 +0200 Subject: [PATCH 0662/1047] hf mfu dump - added some hints --- client/src/cmdhfmfu.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/client/src/cmdhfmfu.c b/client/src/cmdhfmfu.c index 0fcbe1796..4097ce081 100644 --- a/client/src/cmdhfmfu.c +++ b/client/src/cmdhfmfu.c @@ -1461,12 +1461,20 @@ static int CmdHF14AMfUInfo(const char *Cmd) { if (ul_auth_select(&card, tagtype, hasAuthKey, authkeyptr, pack, sizeof(pack)) == PM3_ESOFT) return PM3_ESOFT; } } - if (len < 1) PrintAndLogEx(WARNING, _YELLOW_("password not known")); + if (len < 1) { + PrintAndLogEx(WARNING, _YELLOW_("password not known")); + PrintAndLogEx(HINT, "Hint: try " _YELLOW_("`hf mfu pwdgen r`") " to get see known pwd gen algo suggestions"); + } + } else { + PrintAndLogEx(HINT, "Hint: try " _YELLOW_("`hf mfu pwdgen r`") " to get see known pwd gen algo suggestions"); } } out: DropField(); - if (locked) PrintAndLogEx(FAILED, "\nTag appears to be locked, try using the key to get more info"); + if (locked) { + PrintAndLogEx(INFO, "\nTag appears to be locked, try using the key to get more info"); + PrintAndLogEx(HINT, "Hint: try " _YELLOW_("`hf mfu pwdgen r`") " to get see known pwd gen algo suggestions"); + } PrintAndLogEx(NORMAL, ""); return PM3_SUCCESS; } From 7c6fa54d61e3efafe2ff294b1c541fb91fb59577 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sat, 26 Sep 2020 14:58:09 +0200 Subject: [PATCH 0663/1047] default keys --- client/dictionaries/mfc_default_keys.dic | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/client/dictionaries/mfc_default_keys.dic b/client/dictionaries/mfc_default_keys.dic index d0318737c..58c2c40bc 100644 --- a/client/dictionaries/mfc_default_keys.dic +++ b/client/dictionaries/mfc_default_keys.dic @@ -57,6 +57,9 @@ f1d83f964314 # RKF RejskortDanmark KeyB # 4b0b20107ccb # TNP3xxx # +# Access control system +605F5E5D5C5B +# # more Keys from mfc_default_keys.lua 000000000001 000000000002 @@ -1199,4 +1202,4 @@ FEE2A3FBC5B6 # toru ent # taurus avm # -005078565703 \ No newline at end of file +005078565703 From dace060bd46699f12cfc67051aa887606b089d6d Mon Sep 17 00:00:00 2001 From: Iceman Date: Sat, 26 Sep 2020 15:52:04 +0200 Subject: [PATCH 0664/1047] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 3155f8093..ac4ab1f6d 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ | Releases | Linux & OSX CI | Windows CI | Coverity | Contributors | | ------------------- |:-------------------:| -------------------:| -------------------:| -------------------:| -| [![Latest release](https://img.shields.io/github/v/release/rfidresearchgroup/proxmark3)](https://github.com/RfidResearchGroup/proxmark3/releases/latest) | [![Build status](https://api.travis-ci.org/RfidResearchGroup/proxmark3.svg?branch=master)](https://travis-ci.org/RfidResearchGroup/proxmark3) | [![Build status](https://ci.appveyor.com/api/projects/status/b4gwrhq3nc876cuu/branch/master?svg=true)](https://ci.appveyor.com/project/RfidResearchGroup/proxmark3/branch/master) | [![Coverity Status](https://scan.coverity.com/projects/19334/badge.svg)](https://scan.coverity.com/projects/proxmark3-rrg-iceman-repo)| ![GitHub contributors](https://img.shields.io/github/contributors/rfidresearchgroup/proxmark3) | +| [![Latest release](https://img.shields.io/github/v/release/rfidresearchgroup/proxmark3)](https://github.com/RfidResearchGroup/proxmark3/releases/latest) | [![Build status](https://api.travis-ci.com/RfidResearchGroup/proxmark3.svg?branch=master)](https://travis-ci.com/RfidResearchGroup/proxmark3) | [![Build status](https://ci.appveyor.com/api/projects/status/b4gwrhq3nc876cuu/branch/master?svg=true)](https://ci.appveyor.com/project/RfidResearchGroup/proxmark3/branch/master) | [![Coverity Status](https://scan.coverity.com/projects/19334/badge.svg)](https://scan.coverity.com/projects/proxmark3-rrg-iceman-repo)| ![GitHub contributors](https://img.shields.io/github/contributors/rfidresearchgroup/proxmark3) | From 6926ca5f5abf7d9bf461af0aa12c6f3a163acda0 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sat, 26 Sep 2020 16:28:39 +0200 Subject: [PATCH 0665/1047] hf 14a info - hint for ST --- client/src/cmdhf14a.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/client/src/cmdhf14a.c b/client/src/cmdhf14a.c index 1c1f2adde..aa8a29255 100644 --- a/client/src/cmdhf14a.c +++ b/client/src/cmdhf14a.c @@ -1638,6 +1638,7 @@ int infoHF14A(bool verbose, bool do_nack_test, bool do_aid_search) { bool isMifareDESFire = false; bool isMifarePlus = false; bool isMifareUltralight = false; + bool isST = false; int nxptype = MTNONE; if (card.uidlen <= 4) { @@ -1657,6 +1658,9 @@ int infoHF14A(bool verbose, bool do_nack_test, bool do_aid_search) { PrintAndLogEx(SUCCESS, "MANUFACTURER: " _YELLOW_("%s"), getTagInfo(card.uid[0])); switch (card.uid[0]) { + case 0x02: // ST + isST = true; + break; case 0x04: // NXP nxptype = detect_nxp_card(card.sak, ((card.atqa[1] << 8) + card.atqa[0])); @@ -2022,6 +2026,9 @@ int infoHF14A(bool verbose, bool do_nack_test, bool do_aid_search) { if (isMifareDESFire && isMagic == 0) PrintAndLogEx(HINT, "Hint: try " _YELLOW_("`hf mfdes info`")); + if (isST) + PrintAndLogEx(HINT, "Hint: try " _YELLOW_("`hf st info`")); + DropField(); return select_status; } From e8b5ce99170df3449391aa2279a82c3d45aa33d7 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sat, 26 Sep 2020 16:52:48 +0200 Subject: [PATCH 0666/1047] hf 14b reader - added some more "other" ways to get a 14b tag to answer --- client/src/cmdhf14b.c | 150 +++++++++++++++++++++++------------------- 1 file changed, 82 insertions(+), 68 deletions(-) diff --git a/client/src/cmdhf14b.c b/client/src/cmdhf14b.c index a96976157..60aeb0c00 100644 --- a/client/src/cmdhf14b.c +++ b/client/src/cmdhf14b.c @@ -624,8 +624,8 @@ static bool HF14B_Std_Info(bool verbose) { // 14b get and print UID only (general info) clearCommandBuffer(); - SendCommandMIX(CMD_HF_ISO14443B_COMMAND, ISO14B_CONNECT | ISO14B_SELECT_STD | ISO14B_DISCONNECT, 0, 0, NULL, 0); PacketResponseNG resp; + SendCommandMIX(CMD_HF_ISO14443B_COMMAND, ISO14B_CONNECT | ISO14B_SELECT_STD | ISO14B_DISCONNECT, 0, 0, NULL, 0); if (!WaitForResponseTimeout(CMD_HF_ISO14443B_COMMAND, &resp, TIMEOUT)) { if (verbose) PrintAndLogEx(WARNING, "command execution timeout"); @@ -663,10 +663,9 @@ static bool HF14B_Std_Info(bool verbose) { // SRx get and print full info (needs more info...) static bool HF14B_ST_Info(bool verbose) { - clearCommandBuffer(); - SendCommandMIX(CMD_HF_ISO14443B_COMMAND, ISO14B_CONNECT | ISO14B_SELECT_SR | ISO14B_DISCONNECT, 0, 0, NULL, 0); PacketResponseNG resp; + SendCommandMIX(CMD_HF_ISO14443B_COMMAND, ISO14B_CONNECT | ISO14B_SELECT_SR | ISO14B_DISCONNECT, 0, 0, NULL, 0); if (!WaitForResponseTimeout(CMD_HF_ISO14443B_COMMAND, &resp, TIMEOUT)) { if (verbose) PrintAndLogEx(WARNING, "command execution timeout"); @@ -681,28 +680,6 @@ static bool HF14B_ST_Info(bool verbose) { return false; print_st_general_info(card.uid, card.uidlen); - - //add locking bit information here. uint8_t data[16] = {0x00}; - // uint8_t datalen = 2; - // uint8_t resplen; - // uint8_t blk1; - // data[0] = 0x08; - - // - // if (model == 0x2) { //SR176 has special command: - // data[1] = 0xf; - // resplen = 4; - // } else { - // data[1] = 0xff; - // resplen = 6; - // } - - // //std read cmd - // if (HF14BCmdRaw(true, true, data, &datalen, false)==0) - // return rawClose(); - - // if (datalen != resplen || !crc) return rawClose(); - //print_ST_Lock_info(data[5]>>2); return true; } @@ -721,8 +698,9 @@ static bool HF14B_ST_Reader(bool verbose) { // SRx get and print general info about SRx chip from UID clearCommandBuffer(); - SendCommandMIX(CMD_HF_ISO14443B_COMMAND, ISO14B_CONNECT | ISO14B_SELECT_SR | ISO14B_DISCONNECT, 0, 0, NULL, 0); PacketResponseNG resp; + SendCommandMIX(CMD_HF_ISO14443B_COMMAND, ISO14B_CONNECT | ISO14B_SELECT_SR | ISO14B_DISCONNECT, 0, 0, NULL, 0); + if (!WaitForResponseTimeout(CMD_HF_ISO14443B_COMMAND, &resp, TIMEOUT)) { if (verbose) PrintAndLogEx(WARNING, "command execution timeout"); return is_success; @@ -760,9 +738,9 @@ static bool HF14B_Std_Reader(bool verbose) { // 14b get and print UID only (general info) clearCommandBuffer(); - SendCommandMIX(CMD_HF_ISO14443B_COMMAND, ISO14B_CONNECT | ISO14B_SELECT_STD | ISO14B_DISCONNECT, 0, 0, NULL, 0); PacketResponseNG resp; - + SendCommandMIX(CMD_HF_ISO14443B_COMMAND, ISO14B_CONNECT | ISO14B_SELECT_STD | ISO14B_DISCONNECT, 0, 0, NULL, 0); + if (!WaitForResponseTimeout(CMD_HF_ISO14443B_COMMAND, &resp, TIMEOUT)) { if (verbose) PrintAndLogEx(WARNING, "command execution timeout"); return false; @@ -798,54 +776,90 @@ static bool HF14B_Std_Reader(bool verbose) { // test for other 14b type tags (mimic another reader - don't have tags to identify) static bool HF14B_Other_Reader(bool verbose) { - // uint8_t data[] = {0x00, 0x0b, 0x3f, 0x80}; - // uint8_t datalen = 4; + uint8_t data[] = {0x00, 0x0b, 0x3f, 0x80}; + uint8_t datalen = 4; - // // 14b get and print UID only (general info) - // uint32_t flags = ISO14B_CONNECT | ISO14B_SELECT_STD | ISO14B_RAW | ISO14B_APPEND_CRC; + // 14b get and print UID only (general info) + uint32_t flags = ISO14B_CONNECT | ISO14B_SELECT_STD | ISO14B_RAW | ISO14B_APPEND_CRC; - // clearCommandBuffer(); - // SendCommandMIX(CMD_HF_ISO14443B_COMMAND, flags, datalen, 0, data, datalen); - // PacketResponseNG resp; - // WaitForResponse(CMD_HF_ISO14443B_COMMAND,&resp); + clearCommandBuffer(); + PacketResponseNG resp; + SendCommandMIX(CMD_HF_ISO14443B_COMMAND, flags, datalen, 0, data, datalen); - // if (datalen > 2 ) { - // PrintAndLogEx(SUCCESS, "\n14443-3b tag found:"); - // PrintAndLogEx(SUCCESS, "unknown tag type answered to a 0x000b3f80 command ans:"); - // //PrintAndLogEx(SUCCESS, "%s", sprint_hex(data, datalen)); - // rawclose(); - // return true; - // } + if (!WaitForResponseTimeout(CMD_HF_ISO14443B_COMMAND, &resp, TIMEOUT)) { + if (verbose) PrintAndLogEx(WARNING, "command execution timeout"); + switch_off_field_14b(); + return false; + } + int status = resp.oldarg[0]; + PrintAndLogEx(DEBUG, "status %d", status); - // data[0] = ISO14443B_AUTHENTICATE; - // clearCommandBuffer(); - // SendCommandMIX(CMD_HF_ISO14443B_COMMAND, flags, 1, 0, data, 1); - // PacketResponseNG resp; - // WaitForResponse(CMD_HF_ISO14443B_COMMAND, &resp); + if (status == 0) { + PrintAndLogEx(SUCCESS, "\n14443-3b tag found:"); + PrintAndLogEx(SUCCESS, "unknown tag type answered to a 0x000b3f80 command ans:"); + PrintAndLogEx(SUCCESS, "%s", sprint_hex(resp.data.asBytes, 1)); + switch_off_field_14b(); + return true; + } else if (status > 0) { + PrintAndLogEx(SUCCESS, "\n14443-3b tag found:"); + PrintAndLogEx(SUCCESS, "unknown tag type answered to a 0x000b3f80 command ans:"); + PrintAndLogEx(SUCCESS, "%s", sprint_hex(resp.data.asBytes, status)); + switch_off_field_14b(); + return true; + } - // if (datalen > 0) { - // PrintAndLogEx(SUCCESS, "\n14443-3b tag found:"); - // PrintAndLogEx(SUCCESS, "Unknown tag type answered to a 0x0A command ans:"); - // // PrintAndLogEx(SUCCESS, "%s", sprint_hex(data, datalen)); - // rawClose(); - // return true; - // } + data[0] = ISO14443B_AUTHENTICATE; + clearCommandBuffer(); + SendCommandMIX(CMD_HF_ISO14443B_COMMAND, flags, 1, 0, data, 1); + if (!WaitForResponseTimeout(CMD_HF_ISO14443B_COMMAND, &resp, TIMEOUT)) { + if (verbose) PrintAndLogEx(WARNING, "command execution timeout"); + switch_off_field_14b(); + return false; + } + status = resp.oldarg[0]; + PrintAndLogEx(INFO, "status %d", status); - // data[0] = ISO14443B_RESET; - // clearCommandBuffer(); - // SendCommandMIX(CMD_HF_ISO14443B_COMMAND, flags, 1, 0, data, 1); - // PacketResponseNG resp; - // WaitForResponse(CMD_HF_ISO14443B_COMMAND, &resp); + if (status == 0) { + PrintAndLogEx(SUCCESS, "\n14443-3b tag found:"); + PrintAndLogEx(SUCCESS, "Unknown tag type answered to a 0x0A command ans:"); + PrintAndLogEx(SUCCESS, "%s", sprint_hex(resp.data.asBytes, 1)); + switch_off_field_14b(); + return true; + } else if (status > 0) { + PrintAndLogEx(SUCCESS, "\n14443-3b tag found:"); + PrintAndLogEx(SUCCESS, "unknown tag type answered to a 0x0A command ans:"); + PrintAndLogEx(SUCCESS, "%s", sprint_hex(resp.data.asBytes, status)); + switch_off_field_14b(); + return true; + } - // if (datalen > 0) { - // PrintAndLogEx(SUCCESS, "\n14443-3b tag found:"); - // PrintAndLogEx(SUCCESS, "Unknown tag type answered to a 0x0C command ans:"); - // PrintAndLogEx(SUCCESS, "%s", sprint_hex(data, datalen)); - // rawClose(); - // return true; - // } - // rawClose(); + data[0] = ISO14443B_RESET; + clearCommandBuffer(); + SendCommandMIX(CMD_HF_ISO14443B_COMMAND, flags, 1, 0, data, 1); + if (!WaitForResponseTimeout(CMD_HF_ISO14443B_COMMAND, &resp, TIMEOUT)) { + if (verbose) PrintAndLogEx(WARNING, "command execution timeout"); + switch_off_field_14b(); + return false; + } + status = resp.oldarg[0]; + PrintAndLogEx(INFO, "status %d", status); + + if (status == 0) { + PrintAndLogEx(SUCCESS, "\n14443-3b tag found:"); + PrintAndLogEx(SUCCESS, "Unknown tag type answered to a 0x0C command ans:"); + PrintAndLogEx(SUCCESS, "%s", sprint_hex(resp.data.asBytes, 1)); + switch_off_field_14b(); + return true; + } else if (status > 0) { + PrintAndLogEx(SUCCESS, "\n14443-3b tag found:"); + PrintAndLogEx(SUCCESS, "unknown tag type answered to a 0x0C command ans:"); + PrintAndLogEx(SUCCESS, "%s", sprint_hex(resp.data.asBytes, status)); + switch_off_field_14b(); + return true; + } + + switch_off_field_14b(); return false; } From 3e67ad0b0f93c32a6821806cc0990816aeade936 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sat, 26 Sep 2020 16:54:47 +0200 Subject: [PATCH 0667/1047] hf 14b reader - cleanup --- client/src/cmdhf14b.c | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/client/src/cmdhf14b.c b/client/src/cmdhf14b.c index 60aeb0c00..a5a828c9b 100644 --- a/client/src/cmdhf14b.c +++ b/client/src/cmdhf14b.c @@ -797,7 +797,6 @@ static bool HF14B_Other_Reader(bool verbose) { if (status == 0) { PrintAndLogEx(SUCCESS, "\n14443-3b tag found:"); PrintAndLogEx(SUCCESS, "unknown tag type answered to a 0x000b3f80 command ans:"); - PrintAndLogEx(SUCCESS, "%s", sprint_hex(resp.data.asBytes, 1)); switch_off_field_14b(); return true; } else if (status > 0) { @@ -817,12 +816,11 @@ static bool HF14B_Other_Reader(bool verbose) { return false; } status = resp.oldarg[0]; - PrintAndLogEx(INFO, "status %d", status); + PrintAndLogEx(DEBUG, "status %d", status); if (status == 0) { PrintAndLogEx(SUCCESS, "\n14443-3b tag found:"); PrintAndLogEx(SUCCESS, "Unknown tag type answered to a 0x0A command ans:"); - PrintAndLogEx(SUCCESS, "%s", sprint_hex(resp.data.asBytes, 1)); switch_off_field_14b(); return true; } else if (status > 0) { @@ -833,22 +831,20 @@ static bool HF14B_Other_Reader(bool verbose) { return true; } - data[0] = ISO14443B_RESET; clearCommandBuffer(); SendCommandMIX(CMD_HF_ISO14443B_COMMAND, flags, 1, 0, data, 1); - if (!WaitForResponseTimeout(CMD_HF_ISO14443B_COMMAND, &resp, TIMEOUT)) { + if (!WaitForResponseTimeout(CMD_HF_ISO14443B_COMMAND, &resp, TIMEOUT)) { if (verbose) PrintAndLogEx(WARNING, "command execution timeout"); switch_off_field_14b(); return false; } status = resp.oldarg[0]; - PrintAndLogEx(INFO, "status %d", status); + PrintAndLogEx(DEBUG, "status %d", status); if (status == 0) { PrintAndLogEx(SUCCESS, "\n14443-3b tag found:"); PrintAndLogEx(SUCCESS, "Unknown tag type answered to a 0x0C command ans:"); - PrintAndLogEx(SUCCESS, "%s", sprint_hex(resp.data.asBytes, 1)); switch_off_field_14b(); return true; } else if (status > 0) { From 58eb9faa84fe3ccc3464052bad3eaad79a2da33a Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Sat, 26 Sep 2020 17:18:21 +0200 Subject: [PATCH 0668/1047] recover_pk: remove sslcrypto dep --- tools/recover_pk.py | 306 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 299 insertions(+), 7 deletions(-) diff --git a/tools/recover_pk.py b/tools/recover_pk.py index b2ff2e6c7..073a65575 100755 --- a/tools/recover_pk.py +++ b/tools/recover_pk.py @@ -1,26 +1,318 @@ #!/usr/bin/env python3 +# MIT License +# Copyright (c) 2020 @doegox -# @doegox -- 2020 - -import sslcrypto import binascii import sys debug = False +####################################################################### +# Using external sslcrypto library: +# import sslcrypto +# ... sslcrypto.ecc.get_curve() +# But to get this script autonomous, i.e. for CI, we embedded the +# code snippets we needed: +####################################################################### +# code snippets from JacobianCurve: +# This code is public domain. Everyone has the right to do whatever they want with it for any purpose. +# Copyright (c) 2013 Vitalik Buterin + +class JacobianCurve: + def __init__(self, p, n, a, b, g): + self.p = p + self.n = n + self.a = a + self.b = b + self.g = g + self.n_length = len(bin(self.n).replace("0b", "")) + + + def to_jacobian(self, p): + return p[0], p[1], 1 + + + def jacobian_double(self, p): + if not p[1]: + return 0, 0, 0 + ysq = (p[1] ** 2) % self.p + s = (4 * p[0] * ysq) % self.p + m = (3 * p[0] ** 2 + self.a * p[2] ** 4) % self.p + nx = (m ** 2 - 2 * s) % self.p + ny = (m * (s - nx) - 8 * ysq ** 2) % self.p + nz = (2 * p[1] * p[2]) % self.p + return nx, ny, nz + + + def jacobian_add(self, p, q): + if not p[1]: + return q + if not q[1]: + return p + u1 = (p[0] * q[2] ** 2) % self.p + u2 = (q[0] * p[2] ** 2) % self.p + s1 = (p[1] * q[2] ** 3) % self.p + s2 = (q[1] * p[2] ** 3) % self.p + if u1 == u2: + if s1 != s2: + return (0, 0, 1) + return self.jacobian_double(p) + h = u2 - u1 + r = s2 - s1 + h2 = (h * h) % self.p + h3 = (h * h2) % self.p + u1h2 = (u1 * h2) % self.p + nx = (r ** 2 - h3 - 2 * u1h2) % self.p + ny = (r * (u1h2 - nx) - s1 * h3) % self.p + nz = (h * p[2] * q[2]) % self.p + return (nx, ny, nz) + + + def from_jacobian(self, p): + z = inverse(p[2], self.p) + return (p[0] * z ** 2) % self.p, (p[1] * z ** 3) % self.p + + + def jacobian_shamir(self, a, n, b, m): + ab = self.jacobian_add(a, b) + if n < 0 or n >= self.n: + n %= self.n + if m < 0 or m >= self.n: + m %= self.n + res = 0, 0, 1 # point on infinity + for i in range(self.n_length - 1, -1, -1): + res = self.jacobian_double(res) + has_n = n & (1 << i) + has_m = m & (1 << i) + if has_n: + if has_m == 0: + res = self.jacobian_add(res, a) + if has_m != 0: + res = self.jacobian_add(res, ab) + else: + if has_m == 0: + res = self.jacobian_add(res, (0, 0, 1)) # Try not to leak + if has_m != 0: + res = self.jacobian_add(res, b) + return res + + def fast_shamir(self, a, n, b, m): + return self.from_jacobian(self.jacobian_shamir(self.to_jacobian(a), n, self.to_jacobian(b), m)) + +####################################################################### +# code snippets from sslcrypto +# MIT License +# Copyright (c) 2019 Ivan Machugovskiy + +import hmac +import os +import hashlib +import struct + +def int_to_bytes(raw, length): + data = [] + for _ in range(length): + data.append(raw % 256) + raw //= 256 + return bytes(data[::-1]) + + +def bytes_to_int(data): + raw = 0 + for byte in data: + raw = raw * 256 + byte + return raw + +def legendre(a, p): + res = pow(a, (p - 1) // 2, p) + if res == p - 1: + return -1 + else: + return res + +def inverse(a, n): + if a == 0: + return 0 + lm, hm = 1, 0 + low, high = a % n, n + while low > 1: + r = high // low + nm, new = hm - lm * r, high - low * r + lm, low, hm, high = nm, new, lm, low + return lm % n + +def square_root_mod_prime(n, p): + if n == 0: + return 0 + if p == 2: + return n # We should never get here but it might be useful + if legendre(n, p) != 1: + raise ValueError("No square root") + # Optimizations + if p % 4 == 3: + return pow(n, (p + 1) // 4, p) + # 1. By factoring out powers of 2, find Q and S such that p - 1 = + # Q * 2 ** S with Q odd + q = p - 1 + s = 0 + while q % 2 == 0: + q //= 2 + s += 1 + # 2. Search for z in Z/pZ which is a quadratic non-residue + z = 1 + while legendre(z, p) != -1: + z += 1 + m, c, t, r = s, pow(z, q, p), pow(n, q, p), pow(n, (q + 1) // 2, p) + while True: + if t == 0: + return 0 + elif t == 1: + return r + # Use repeated squaring to find the least i, 0 < i < M, such + # that t ** (2 ** i) = 1 + t_sq = t + i = 0 + for i in range(1, m): + t_sq = t_sq * t_sq % p + if t_sq == 1: + break + else: + raise ValueError("Should never get here") + # Let b = c ** (2 ** (m - i - 1)) + b = pow(c, 2 ** (m - i - 1), p) + m = i + c = b * b % p + t = t * b * b % p + r = r * b % p + return r + +# name: (nid, p, n, a, b, (Gx, Gy)), +CURVES = { + "secp128r1": ( + 706, + 0xFFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFF, + 0xFFFFFFFE0000000075A30D1B9038A115, + 0xFFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFC, + 0xE87579C11079F43DD824993C2CEE5ED3, + ( + 0x161FF7528B899B2D0C28607CA52C5B86, + 0xCF5AC8395BAFEB13C02DA292DDED7A83 + ) + ), + "secp224r1": ( + 713, + 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000001, + 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF16A2E0B8F03E13DD29455C5C2A3D, + 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFE, + 0xB4050A850C04B3ABF54132565044B0B7D7BFD8BA270B39432355FFB4, + ( + 0xB70E0CBD6BB4BF7F321390B94A03C1D356C21122343280D6115C1D21, + 0xBD376388B5F723FB4C22DFE6CD4375A05A07476444D5819985007E34 + ) + ), +} + +def get_curve(name): + if name not in CURVES: + raise ValueError("Unknown curve {}".format(name)) + nid, p, n, a, b, g = CURVES[name] + params = {"p": p, "n": n, "a": a, "b": b, "g": g} + return EllipticCurve(nid, p, n, a, b, g) + +class EllipticCurve: + def __init__(self, nid, p, n, a, b, g): + self.p, self.n, self.a, self.b, self.g = p, n, a, b, g + self.jacobian = JacobianCurve(self.p, self.n, self.a, self.b, self.g) + self.public_key_length = (len(bin(p).replace("0b", "")) + 7) // 8 + self.order_bitlength = len(bin(n).replace("0b", "")) + + + def _int_to_bytes(self, raw, len=None): + return int_to_bytes(raw, len or self.public_key_length) + + + def _subject_to_int(self, subject): + return bytes_to_int(subject[:(self.order_bitlength + 7) // 8]) + + + def recover(self, signature, data, hash="sha256"): + # Sanity check: is this signature recoverable? + if len(signature) != 1 + 2 * self.public_key_length: + raise ValueError("Cannot recover an unrecoverable signature") + subject = self._digest(data, hash) + z = self._subject_to_int(subject) + + recid = signature[0] - 27 if signature[0] < 31 else signature[0] - 31 + r = bytes_to_int(signature[1:self.public_key_length + 1]) + s = bytes_to_int(signature[self.public_key_length + 1:]) + + # Verify bounds + if not 0 <= recid < 2 * (self.p // self.n + 1): + raise ValueError("Invalid recovery ID") + if r >= self.n: + raise ValueError("r is out of bounds") + if s >= self.n: + raise ValueError("s is out of bounds") + + rinv = inverse(r, self.n) + u1 = (-z * rinv) % self.n + u2 = (s * rinv) % self.n + + # Recover R + rx = r + (recid // 2) * self.n + if rx >= self.p: + raise ValueError("Rx is out of bounds") + + # Almost copied from decompress_point + ry_square = (pow(rx, 3, self.p) + self.a * rx + self.b) % self.p + try: + ry = square_root_mod_prime(ry_square, self.p) + except Exception: + raise ValueError("Invalid recovered public key") from None + + # Ensure the point is correct + if ry % 2 != recid % 2: + # Fix Ry sign + ry = self.p - ry + + x, y = self.jacobian.fast_shamir(self.g, u1, (rx, ry), u2) + x, y = self._int_to_bytes(x), self._int_to_bytes(y) + + is_compressed = signature[0] >= 31 + if is_compressed: + return bytes([0x02 + (y[-1] % 2)]) + x + else: + return bytes([0x04]) + x + y + + def _digest(self, data, hash): + if hash is None: + return data + elif callable(hash): + return hash(data) + elif hash == "sha1": + return hashlib.sha1(data).digest() + elif hash == "sha256": + return hashlib.sha256(data).digest() + elif hash == "sha512": + return hashlib.sha512(data).digest() + else: + raise ValueError("Unknown hash/derivation method") + +####################################################################### + def recover(data, signature, alghash=None): recovered = set() if len(signature) == 32: - curve = sslcrypto.ecc.get_curve("secp128r1") + curve = get_curve("secp128r1") recoverable = False elif len(signature) == 33: - curve = sslcrypto.ecc.get_curve("secp128r1") + curve = get_curve("secp128r1") recoverable = True elif len(signature) == 56: - curve = sslcrypto.ecc.get_curve("secp224r1") + curve = get_curve("secp224r1") recoverable = False elif len(signature) == 57: - curve = sslcrypto.ecc.get_curve("secp224r1") + curve = get_curve("secp224r1") recoverable = True else: print("Unsupported signature size %i" % len(signature)) From b1c641724bf11fe79b694fc61cfeaafea87346bf Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Sat, 26 Sep 2020 17:58:08 +0200 Subject: [PATCH 0669/1047] recover_pk selftests --- tools/pm3_tests.sh | 1 + tools/recover_pk.py | 103 ++++++++++++++++++++++++++++++++++++++------ 2 files changed, 90 insertions(+), 14 deletions(-) diff --git a/tools/pm3_tests.sh b/tools/pm3_tests.sh index 9543bf5d2..ee796b409 100755 --- a/tools/pm3_tests.sh +++ b/tools/pm3_tests.sh @@ -227,6 +227,7 @@ while true; do if ! CheckExecute "findbits test" "tools/findbits.py 73 0110010101110011" "Match at bit 9: 011001010"; then break; fi if ! CheckExecute "findbits_test test" "tools/findbits_test.py 2>&1" "OK"; then break; fi if ! CheckExecute "pm3_eml_mfd test" "tools/pm3_eml_mfd_test.py 2>&1" "OK"; then break; fi + if ! CheckExecute "recover_pk test" "tools/recover_pk.py selftests 2>&1" "Tests:.*\[OK\]"; then break; fi fi if $TESTALL || $TESTBOOTROM; then echo -e "\n${C_BLUE}Testing bootrom:${C_NC}" diff --git a/tools/recover_pk.py b/tools/recover_pk.py index 073a65575..2c80ee6a6 100755 --- a/tools/recover_pk.py +++ b/tools/recover_pk.py @@ -359,18 +359,93 @@ def recover_multiple(uids, sigs, alghash=None): recovered &= recovered_tmp return recovered -if len(sys.argv) < 3 or len(sys.argv) % 2 == 0: - print("Usage: \n%s UID SIGN [UID SIGN] [...]" % sys.argv[0]) - print("Example: \n%s 04ee45daa34084 ebb6102bff74b087d18a57a54bc375159a04ea9bc61080b7f4a85afe1587d73b" % sys.argv[0]) - exit(1) +def selftests(): + tests = [ + {'name': "Mifare Ultralight EV1", + 'samples': ["04C1285A373080", "CEA2EB0B3C95D0844A95B824A7553703B3702378033BF0987899DB70151A19E7", + "04C2285A373080", "A561506723D422D29ED9F93E60D20B9ED1E05CC1BF81DA19FE500CA0B81CC0ED"], + 'pk': "0490933BDCD6E99B4E255E3DA55389A827564E11718E017292FAF23226A96614B8" }, + {'name': "NTAG21x", + 'samples': ["04E10CDA993C80", "8B76052EE42F5567BEB53238B3E3F9950707C0DCC956B5C5EFCFDB709B2D82B3", + "04DB0BDA993C80", "6048EFD9417CD10F6B7F1818D471A7FE5B46868D2EABDC6307A1E0AAE139D8D0"], + 'pk': "04494E1A386D3D3CFE3DC10E5DE68A499B1C202DB5B132393E89ED19FE5BE8BC61" }, + {'name': "Mifare Classic EV1", + 'samples': ["0433619AB35780", "B9FAE369EC21C980650D87ED9AE9B1610E859131B4B8699C647548AB68D249BB", + "524374E2", "F8758CE30A58553A9985C458FB9C7D340FCFB04847B928A0667939272BC58B5E", + "53424B8A", "B4F533E8C06C021E242EFE8558C1672ED7022E5AE4E7AA2D46113B0AB6928AFC"], + 'pk': "044F6D3F294DEA5737F0F46FFEE88A356EED95695DD7E0C27A591E6F6F65962BAF" }, + {'name': "DESFire Light", + 'samples': ["0439556ACB6480", "D5BD0978106E1E38B513642335966AB21E9F950DCFCFAB45FF13D0DC3CA4C2AE7E0D671DF1240937D040DAC4601C5F66ED62C546EE03ED08", + "043B156ACB6480", "76B46932BF2FCF4931A24C755F5CB1686B914F1856177686B864BDAD58EFA6A7493E5C2232F3ADDAA434EA4647BFD1D385BDA6115E77D74C"], + 'pk': "040E98E117AAA36457F43173DC920A8757267F44CE4EC5ADD3C54075571AEBBF7B942A9774A1D94AD02572427E5AE0A2DD36591B1FB34FCF3D" }, + {'name': "DESFire EV2", + 'samples': ["042A41CAE45380", "B2769F8DDB575AEA2A680ADCA8FFED4FAB81A1E9908E2B82FE0FABB697BBD9B23835C416970E75768F12902ACA491349E94E6589EAF4F508", + "045640CAE45380", "D34B53A8C2C100D700DEA1C4C0D0DE4409F3A418CD8D57C4F41F146E42AD9A55F014199ABBF5CA259C7799DB0AE20D5E77D4950AC7E95D33"], + 'pk': "04B304DC4C615F5326FE9383DDEC9AA892DF3A57FA7FFB3276192BC0EAA252ED45A865E3B093A3D0DCE5BE29E92F1392CE7DE321E3E5C52B3A" }, +# TODO one more Mifare Plus EV1... + {'name': "Mifare Plus EV1", + 'samples': ["042A2B221C5080", "BAC40CD88E9193C58ADA5055350C4F648EB5A7AEC4FCF9BD4CDD7B1C558DE5F59C6636F26286ED48622AAA2331D4DF1CEE23B57B94BDA631"], + 'pk': "044409ADC42F91A8394066BA83D872FB1D16803734E911170412DDF8BAD1A4DADFD0416291AFE1C748253925DA39A5F39A1C557FFACD34C62E" }, + {'name': "NTAG413DNA", + 'samples': ["042468222F5C80", "B9211E320F321BD1D0E158E10FF15109B389638BAE15D9909D7725BF1250ED236D66F1AF75C94D60330E4E92535F5E6997675281A5687173", + "042938222F5C80", "18B642797D1FD71806146A7A6EC778D3FDD04F39C4A3B36A592BD1A114DC44E5528380FA766C0B7EA32B284AFBE84300B620369F0686D8CC"], + 'pk': "04bb5d514f7050025c7d0f397310360eec91eaf792e96fc7e0f496cb4e669d414f877b7b27901fe67c2e3b33cd39d1c797715189ac951c2add" }, + {'name': "NTAG424DNA", + 'samples': ["0463474AA26A80", "27E9A50E6CA4BA9037C02F7D20A80D0284D0C1D83C67F5A5AC1D8A4EF86C9508417E4E9C6F85AA7920F0ABDED984CAF20467D66EA54BBF08", + "04C46C222A6380", "344A806EBF704C05C19215D2F840529CE365AAD2D08A469A95896D75D477D9FAB02A0C827E9F215BD8EB0E56A3A9A008FB75D706AABBD4DA"], + 'pk': "048A9B380AF2EE1B98DC417FECC263F8449C7625CECE82D9B916C992DA209D68422B81EC20B65A66B5102A61596AF3379200599316A00A1410" }, + {'name': "Vivokey Spark1", +# ! tag signature bytes output by pm3 must be read right to left: echo $sig |sed 's/\(..\)/\1\n/g'|tac|tr -d '\n' (and it uses a SHA256) + 'samples': ["E0040118009C870C", "4B4E03E1211952EF6A5F9D84AB218CD4D7549D0CDF8CA8779F9AD16C9A9CBF3B", + "E0040118009B4D62", "25CF13747C3389EC7889DE916E3747584978511CC78B51CFB1883B494CBED7AB"], + 'pk': "04d64bb732c0d214e7ec580736acf847284b502c25c0f7f2fa86aace1dada4387a" }, +# ! tag UID is considered inversed: E0040118009B5FEE => EE5F9B00180104E0 +# TODO one more ICODE-DNA... + {'name': "ICODE DNA, ICODE SLIX2", + 'samples': ["EE5F9B00180104E0", "32D9E7579CD77E6F1FA11419231E874826984C5F189FDE1421684563A9663377"], + 'pk': "048878A2A2D3EEC336B4F261A082BD71F9BE11C4E2E896648B32EFA59CEA6E59F0" }, + ] + succeeded = True + for t in tests: + print("Testing %-25s" % (t['name']+":"), end="") + recovered = recover_multiple(t['samples'][::2], t['samples'][1::2]) + recovered |= recover_multiple(t['samples'][::2], t['samples'][1::2], alghash="sha256") + if (len(recovered) == 1): + pk = recovered.pop() + pk = binascii.hexlify(pk).decode('utf8') + if pk.lower() == t['pk'].lower(): + print("[OK]") + else: + succeeded = False + print("[FAIL]") + elif len(t['samples'])//2 == 1: + pks = [binascii.hexlify(pk).decode('utf8').lower() for pk in list(recovered)] + if t['pk'].lower() in pks: + print("[OK]") + else: + succeeded = False + print("[FAIL]") + else: + succeeded = False + print("[FAIL]") + print("Tests: [%s]" % ["FAIL", "OK"][succeeded]) -print("Assuming no hash was used in the signature generation:") -recovered = recover_multiple(sys.argv[1:][::2], sys.argv[1:][1::2]) -print("Possible uncompressed Pk(s):") -for pk in list(recovered): - print(binascii.hexlify(pk).decode('utf8')) -print("Assuming SHA-256 was used in the signature generation:") -recovered = recover_multiple(sys.argv[1:][::2], sys.argv[1:][1::2], alghash="sha256") -print("Possible uncompressed Pk(s):") -for pk in list(recovered): - print(binascii.hexlify(pk).decode('utf8')) +if __name__ == "__main__": + if len(sys.argv) == 2 and sys.argv[1] == "selftests": + selftests() + exit(0) + if len(sys.argv) < 3 or len(sys.argv) % 2 == 0: + print("Usage: \n%s UID SIGN [UID SIGN] [...]" % sys.argv[0]) + print("Example: \n%s 04ee45daa34084 ebb6102bff74b087d18a57a54bc375159a04ea9bc61080b7f4a85afe1587d73b" % sys.argv[0]) + exit(1) + + print("Assuming no hash was used in the signature generation:") + recovered = recover_multiple(sys.argv[1:][::2], sys.argv[1:][1::2]) + print("Possible uncompressed Pk(s):") + for pk in list(recovered): + print(binascii.hexlify(pk).decode('utf8')) + print("Assuming SHA-256 was used in the signature generation:") + recovered = recover_multiple(sys.argv[1:][::2], sys.argv[1:][1::2], alghash="sha256") + print("Possible uncompressed Pk(s):") + for pk in list(recovered): + print(binascii.hexlify(pk).decode('utf8')) From 3e0cc83e3c70db4324f8915135fdc537159e4399 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Sat, 26 Sep 2020 18:31:15 +0200 Subject: [PATCH 0670/1047] textual --- tools/recover_pk.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/recover_pk.py b/tools/recover_pk.py index 2c80ee6a6..465352498 100755 --- a/tools/recover_pk.py +++ b/tools/recover_pk.py @@ -421,7 +421,7 @@ def selftests(): elif len(t['samples'])//2 == 1: pks = [binascii.hexlify(pk).decode('utf8').lower() for pk in list(recovered)] if t['pk'].lower() in pks: - print("[OK]") + print("[OK] (partial)") else: succeeded = False print("[FAIL]") From 9eb46f528f3f590bece6801fa2b159353c80f55d Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sun, 27 Sep 2020 01:50:46 +0200 Subject: [PATCH 0671/1047] hf 14b dump - autodetect memory size --- client/src/cmdhf14b.c | 80 +++++++++++++++++++++++++++---------------- 1 file changed, 50 insertions(+), 30 deletions(-) diff --git a/client/src/cmdhf14b.c b/client/src/cmdhf14b.c index a5a828c9b..fe7c52a43 100644 --- a/client/src/cmdhf14b.c +++ b/client/src/cmdhf14b.c @@ -1,6 +1,6 @@ //----------------------------------------------------------------------------- // Copyright (C) 2010 iZsh -// Modified 2018 iceman +// Modified 2018, 2020 iceman // // This code is licensed to you under the terms of the GNU GPL, version 2 or, // at your option, any later version. See the LICENSE.txt file for the text of @@ -104,16 +104,16 @@ static int usage_hf_14b_write_srx(void) { } static int usage_hf_14b_dump(void) { PrintAndLogEx(NORMAL, "This command dumps the contents of a ISO-14443-B tag and save it to file\n" + "If memory size defaults to SRI4K if auto detect fails.\n" "\n" - "Usage: hf 14b dump [h] [card memory] \n" + "Usage: hf 14b dump [h] \n" "Options:\n" "\th this help\n" - "\t[card memory] 1 = SRIX4K (default), 2 = SRI512\n" - "\tf filename, if no UID will be used as filename\n" + "\tf (optional) filename, if no UID will be used as filename\n" "\n" "Example:\n" - _YELLOW_("\thf 14b dump f\n") - _YELLOW_("\thf 14b dump 2 f mydump") + _YELLOW_("\thf 14b dump\n") + _YELLOW_("\thf 14b dump f mydump") ); return PM3_SUCCESS; } @@ -590,19 +590,39 @@ static uint8_t get_st_chipid(uint8_t *uid) { return uid[5] >> 2; } +static uint8_t get_st_cardsize(uint8_t *uid) { + uint8_t chipid = get_st_chipid(uid); + switch(chipid) { + case 0x0: + case 0x3: + case 0x7: + return 1; + case 0x4: + case 0x6: + case 0xC: + return 2; + default: + return 0; + } + return 0; +} + // print UID info from SRx chips (ST Microelectronics) static void print_st_general_info(uint8_t *data, uint8_t len) { //uid = first 8 bytes in data + uint8_t mfgid = data[6]; + uint8_t chipid = get_st_chipid(data); PrintAndLogEx(NORMAL, ""); PrintAndLogEx(SUCCESS, " UID: " _GREEN_("%s"), sprint_hex(SwapEndian64(data, 8, 8), len)); - PrintAndLogEx(SUCCESS, " MFG: %02X, " _YELLOW_("%s"), data[6], getTagInfo(data[6])); - PrintAndLogEx(SUCCESS, "Chip: %02X, " _YELLOW_("%s"), data[5] >> 2, get_ST_Chip_Model(data[5] >> 2)); + PrintAndLogEx(SUCCESS, " MFG: %02X, " _YELLOW_("%s"), mfgid, getTagInfo(mfgid)); + PrintAndLogEx(SUCCESS, "Chip: %02X, " _YELLOW_("%s"), chipid, get_ST_Chip_Model(chipid)); } -//05 00 00 = find one tag in field -//1d xx xx xx xx 00 08 01 00 = attrib xx=UID (resp 10 [f9 e0]) -//a3 = ? (resp 03 [e2 c2]) -//02 = ? (resp 02 [6a d3]) +// iceman, some 14B APDU break down +// 05 00 00 = find one tag in field +// 1d xx xx xx xx 00 08 01 00 = attrib xx=UID (resp 10 [f9 e0]) +// a3 = ? (resp 03 [e2 c2]) +// 02 = ? (resp 02 [6a d3]) // 022b (resp 02 67 00 [29 5b]) // 0200a40400 (resp 02 67 00 [29 5b]) // 0200a4040c07a0000002480300 (resp 02 67 00 [29 5b]) @@ -612,10 +632,10 @@ static void print_st_general_info(uint8_t *data, uint8_t len) { // 0200a404000cd2760001354b414e4d30310000 (resp 02 6a 82 [4b 4c]) // 0200a404000ca000000063504b43532d313500 (resp 02 6a 82 [4b 4c]) // 0200a4040010a000000018300301000000000000000000 (resp 02 6a 82 [4b 4c]) -//03 = ? (resp 03 [e3 c2]) -//c2 = ? (resp c2 [66 15]) -//b2 = ? (resp a3 [e9 67]) -//a2 = ? (resp 02 [6a d3]) +// 03 = ? (resp 03 [e3 c2]) +// c2 = ? (resp c2 [66 15]) +// b2 = ? (resp a3 [e9 67]) +// a2 = ? (resp 02 [6a d3]) // 14b get and print Full Info (as much as we know) static bool HF14B_Std_Info(bool verbose) { @@ -970,20 +990,26 @@ static int CmdHF14BDump(const char *Cmd) { cmdp += 2; break; default: - if (cmdp == 0) { - cardtype = param_get8ex(Cmd, cmdp, 1, 10); - cmdp++; - } else { - PrintAndLogEx(WARNING, "Unknown parameter '%c'\n", param_getchar(Cmd, cmdp)); - errors = true; - break; - } + PrintAndLogEx(WARNING, "Unknown parameter '%c'\n", param_getchar(Cmd, cmdp)); + errors = true; + break; } } //Validations if (errors) return usage_hf_14b_dump(); + iso14b_card_select_t card; + if (get_14b_UID(&card) == false) { + PrintAndLogEx(WARNING, "No tag found."); + return PM3_SUCCESS; + } + + // detect cardsize + // 1 = 4096 + // 2 = 512 + cardtype = get_st_cardsize(card.uid); + uint8_t blocks = 0; switch (cardtype) { case 2: @@ -997,12 +1023,6 @@ static int CmdHF14BDump(const char *Cmd) { break; } - iso14b_card_select_t card; - if (get_14b_UID(&card) == false) { - PrintAndLogEx(WARNING, "No tag found."); - return PM3_SUCCESS; - } - if (fileNameLen < 1) { PrintAndLogEx(INFO, "Using UID as filename"); fptr += sprintf(fptr, "hf-14b-"); From 91d01c1dcdf6339350815f43a296377fa8a324eb Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sun, 27 Sep 2020 02:22:40 +0200 Subject: [PATCH 0672/1047] textual --- client/src/cmdhf14b.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/client/src/cmdhf14b.c b/client/src/cmdhf14b.c index fe7c52a43..26821f812 100644 --- a/client/src/cmdhf14b.c +++ b/client/src/cmdhf14b.c @@ -1029,6 +1029,9 @@ static int CmdHF14BDump(const char *Cmd) { FillFileNameByUID(fptr, SwapEndian64(card.uid, card.uidlen, 8), "-dump", card.uidlen); } + uint8_t chipid = get_st_chipid(card.uid); + PrintAndLogEx(SUCCESS, "Found a " _GREEN_("%s") " tag", get_ST_Chip_Model(chipid)); + // detect blocksize from card :) PrintAndLogEx(INFO, "Reading memory from tag UID " _GREEN_("%s"), sprint_hex_inrow(SwapEndian64(card.uid, card.uidlen, 8), card.uidlen)); @@ -1102,10 +1105,9 @@ static int CmdHF14BDump(const char *Cmd) { goto out; } - uint8_t chipid = get_st_chipid(card.uid); PrintAndLogEx(DEBUG, "systemblock : %s", sprint_hex(data + (blocknum * 4), 4)); PrintAndLogEx(DEBUG, " otp lock : %02x %02x", data[(blocknum * 4)], data[(blocknum * 4) + 1]); - PrintAndLogEx(DEBUG, "chipid : %02x", chipid); + PrintAndLogEx(INFO, " block# | data |lck| ascii"); PrintAndLogEx(INFO, "---------+--------------+---+----------"); From ad19f838486777efb7f8a389f26cb17198deec67 Mon Sep 17 00:00:00 2001 From: tcprst Date: Sat, 26 Sep 2020 21:30:41 -0400 Subject: [PATCH 0673/1047] add accurate detection for NT2H1311C1DTL --- client/src/cmdhfmfu.c | 15 ++++++++++----- client/src/cmdhfmfu.h | 1 + 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/client/src/cmdhfmfu.c b/client/src/cmdhfmfu.c index 4097ce081..28b560991 100644 --- a/client/src/cmdhfmfu.c +++ b/client/src/cmdhfmfu.c @@ -272,14 +272,16 @@ uint32_t UL_TYPES_ARRAY[] = { UNKNOWN, UL, UL_C, UL_EV1_48, UL_EV1_128, NTAG, NTAG_203, NTAG_210, NTAG_212, NTAG_213, NTAG_215, NTAG_216, MY_D, MY_D_NFC, MY_D_MOVE, MY_D_MOVE_NFC, MY_D_MOVE_LEAN, FUDAN_UL, - UL_EV1, NTAG_213_F, NTAG_216_F, UL_NANO_40, NTAG_I2C_1K, NTAG_213_TT + UL_EV1, NTAG_213_F, NTAG_216_F, UL_NANO_40, NTAG_I2C_1K, NTAG_213_TT, + NTAG_213_C }; uint8_t UL_MEMORY_ARRAY[ARRAYLEN(UL_TYPES_ARRAY)] = { MAX_UL_BLOCKS, MAX_UL_BLOCKS, MAX_ULC_BLOCKS, MAX_ULEV1a_BLOCKS, MAX_ULEV1b_BLOCKS, MAX_NTAG_203, MAX_NTAG_203, MAX_NTAG_210, MAX_NTAG_212, MAX_NTAG_213, MAX_NTAG_215, MAX_NTAG_216, MAX_UL_BLOCKS, MAX_MY_D_NFC, MAX_MY_D_MOVE, MAX_MY_D_MOVE, MAX_MY_D_MOVE_LEAN, MAX_UL_BLOCKS, - MAX_ULEV1a_BLOCKS, MAX_NTAG_213, MAX_NTAG_216, MAX_UL_NANO_40, MAX_NTAG_I2C_1K, MAX_NTAG_213 + MAX_ULEV1a_BLOCKS, MAX_NTAG_213, MAX_NTAG_216, MAX_UL_NANO_40, MAX_NTAG_I2C_1K, MAX_NTAG_213, + MAX_NTAG_213 }; //------------------------------------ @@ -685,6 +687,8 @@ int ul_print_type(uint32_t tagtype, uint8_t spaces) { PrintAndLogEx(SUCCESS, "%*sTYPE: " _YELLOW_("NTAG 213 144bytes (NT2H1311G0DU)"), spaces, ""); else if (tagtype & NTAG_213_F) PrintAndLogEx(SUCCESS, "%*sTYPE: " _YELLOW_("NTAG 213F 144bytes (NT2H1311F0DTL)"), spaces, ""); + else if (tagtype & NTAG_213_C) + PrintAndLogEx(SUCCESS, "%*sTYPE: " _YELLOW_("NTAG 213C 144bytes (NT2H1311C1DTL)"), spaces, ""); else if (tagtype & NTAG_213_TT) PrintAndLogEx(SUCCESS, "%*sTYPE: " _YELLOW_("NTAG 213TT 144bytes (NT2H1311TTDU)"), spaces, ""); else if (tagtype & NTAG_215) @@ -1112,6 +1116,7 @@ uint32_t GetHF14AMfU_Type(void) { else if (memcmp(version, "\x00\x04\x04\x01\x01\x00\x0B", 7) == 0) { tagtype = NTAG_210; break; } else if (memcmp(version, "\x00\x04\x04\x01\x01\x00\x0E", 7) == 0) { tagtype = NTAG_212; break; } else if (memcmp(version, "\x00\x04\x04\x02\x01\x00\x0F", 7) == 0) { tagtype = NTAG_213; break; } + else if (memcmp(version, "\x00\x04\x04\x02\x01\x01\x0F", 7) == 0) { tagtype = NTAG_213_C; break; } else if (memcmp(version, "\x00\x04\x04\x02\x01\x00\x11", 7) == 0) { tagtype = NTAG_215; break; } else if (memcmp(version, "\x00\x04\x04\x02\x01\x00\x13", 7) == 0) { tagtype = NTAG_216; break; } else if (memcmp(version, "\x00\x04\x04\x04\x01\x00\x0F", 7) == 0) { tagtype = NTAG_213_F; break; } @@ -1338,7 +1343,7 @@ static int CmdHF14AMfUInfo(const char *Cmd) { } // NTAG counters? - if ((tagtype & (NTAG_213 | NTAG_213_F | NTAG_213_TT | NTAG_215 | NTAG_216))) { + if ((tagtype & (NTAG_213 | NTAG_213_F | NTAG_213_C | NTAG_213_TT | NTAG_215 | NTAG_216))) { if (ntag_print_counter()) { // failed - re-select if (ul_auth_select(&card, tagtype, hasAuthKey, authkeyptr, pack, sizeof(pack)) == PM3_ESOFT) return PM3_ESOFT; @@ -1346,7 +1351,7 @@ static int CmdHF14AMfUInfo(const char *Cmd) { } // Read signature - if ((tagtype & (UL_EV1_48 | UL_EV1_128 | UL_EV1 | UL_NANO_40 | NTAG_213 | NTAG_213_F | NTAG_213_TT | NTAG_215 | NTAG_216 | NTAG_216_F | NTAG_I2C_1K | NTAG_I2C_2K | NTAG_I2C_1K_PLUS | NTAG_I2C_2K_PLUS))) { + if ((tagtype & (UL_EV1_48 | UL_EV1_128 | UL_EV1 | UL_NANO_40 | NTAG_213 | NTAG_213_F | NTAG_213_C | NTAG_213_TT | NTAG_215 | NTAG_216 | NTAG_216_F | NTAG_I2C_1K | NTAG_I2C_2K | NTAG_I2C_1K_PLUS | NTAG_I2C_2K_PLUS))) { uint8_t ulev1_signature[32] = {0x00}; status = ulev1_readSignature(ulev1_signature, sizeof(ulev1_signature)); if (status == -1) { @@ -2040,7 +2045,7 @@ static int CmdHF14AMfUDump(const char *Cmd) { uint8_t n = 0; // NTAG has 1 counter, at 0x02 - if ((tagtype & (NTAG_213 | NTAG_213_F | NTAG_213_TT | NTAG_215 | NTAG_216))) { + if ((tagtype & (NTAG_213 | NTAG_213_F | NTAG_213_C | NTAG_213_TT | NTAG_215 | NTAG_216))) { n = 2; } diff --git a/client/src/cmdhfmfu.h b/client/src/cmdhfmfu.h index 210783874..d59389434 100644 --- a/client/src/cmdhfmfu.h +++ b/client/src/cmdhfmfu.h @@ -58,6 +58,7 @@ typedef enum TAGTYPE_UL { UL_EV1 = 0x1000000, UL_NANO_40 = 0x2000000, NTAG_213_TT = 0x4000000, + NTAG_213_C = 0x8000000, UL_MAGIC = UL | MAGIC, UL_C_MAGIC = UL_C | MAGIC, UL_ERROR = 0xFFFFFF, From 9c5c00d62042a941a5b875803e79e7260a955a56 Mon Sep 17 00:00:00 2001 From: Ave Date: Sun, 27 Sep 2020 19:40:13 +0300 Subject: [PATCH 0674/1047] Allow writes up to 256 bytes with mfdes writedata And change help text to say 256 instead of 0xFFFF. Closes #977 --- client/deps/cliparser/cliparser.c | 4 ++-- client/src/cmdhfmfdes.c | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/client/deps/cliparser/cliparser.c b/client/deps/cliparser/cliparser.c index 3eaec2b55..6a4c36faa 100644 --- a/client/deps/cliparser/cliparser.c +++ b/client/deps/cliparser/cliparser.c @@ -152,7 +152,7 @@ int CLIParamHexToBuf(struct arg_str *argstr, uint8_t *data, int maxdatalen, int *datalen = 0; int ibuf = 0; - uint8_t tmp_buf[256] = {0}; + uint8_t tmp_buf[512] = {0}; int res = CLIParamStrToBuf(argstr, tmp_buf, maxdatalen * 2, &ibuf); // *2 because here HEX if (res) { printf("Parameter error: buffer overflow.\n"); @@ -186,7 +186,7 @@ int CLIParamStrToBuf(struct arg_str *argstr, uint8_t *data, int maxdatalen, int if (!argstr->count) return 0; - uint8_t tmp_buf[256] = {0}; + uint8_t tmp_buf[512] = {0}; int ibuf = 0; for (int i = 0; i < argstr->count; i++) { diff --git a/client/src/cmdhfmfdes.c b/client/src/cmdhfmfdes.c index 3b36e033d..18980968b 100644 --- a/client/src/cmdhfmfdes.c +++ b/client/src/cmdhfmfdes.c @@ -2851,9 +2851,9 @@ static int CmdHF14ADesWriteData(const char *Cmd) { arg_param_begin, arg_strx0("nN", "fileno", "", "File Number (1 hex byte, 0x00 - 0x1F)"), arg_strx0("oO", "offset", "", "File Offset (3 hex bytes, big endian), optional"), - arg_strx0("dD", "data", "", "Data to write (hex bytes, 0xFFFF bytes max.)"), + arg_strx0("dD", "data", "", "Data to write (hex bytes, 256 bytes max)"), arg_int0("type", "type", "", "File Type (0=Standard/Backup, 1=Record)"), - arg_strx0("aA", "aid", "", "App ID to select as hex bytes (3 bytes,big endian, optional)"), + arg_strx0("aA", "aid", "", "App ID to select as hex bytes (3 bytes, big endian, optional)"), arg_param_end }; From d9ccd9ee240ce998824ae25945ef243d95914611 Mon Sep 17 00:00:00 2001 From: Ave Date: Sun, 27 Sep 2020 19:42:26 +0300 Subject: [PATCH 0675/1047] hfmfdes: Fix a typo --- client/src/cmdhfmfdes.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/src/cmdhfmfdes.c b/client/src/cmdhfmfdes.c index 18980968b..058722c36 100644 --- a/client/src/cmdhfmfdes.c +++ b/client/src/cmdhfmfdes.c @@ -488,7 +488,7 @@ static const char *getstatus(uint16_t *sw) { return "Current authentication status does not allow the requested command"; case MFDES_E_BOUNDARY: - return "Attempted to read/write data from/to beyong the file's/record's limit"; + return "Attempted to read/write data from/to beyond the file's/record's limit"; case MFDES_E_PICC_INTEGRITY: return "PICC integrity error, PICC will be disabled"; From fcb91fffa93b3f823f0e792eba769bebdd64ede2 Mon Sep 17 00:00:00 2001 From: mwalker33 Date: Mon, 28 Sep 2020 11:16:05 +1000 Subject: [PATCH 0676/1047] Update cmdlft55xx.c comment out place holder printf statement used for test/dev --- client/src/cmdlft55xx.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/src/cmdlft55xx.c b/client/src/cmdlft55xx.c index 8d6c3b8e3..f6bc98983 100644 --- a/client/src/cmdlft55xx.c +++ b/client/src/cmdlft55xx.c @@ -3964,7 +3964,7 @@ static int CmdT55xxSniff(const char *Cmd) { // Long leading 0 if (haveData == false && (approxEq(pulseBuffer[0],136+minWidth,tolerance) && approxEq(pulseBuffer[1],maxWidth,tolerance))) { - printf ("Long Leading 0 - not yet hanled | have 1 Fisrt bit | Min : %-3d - Max : %-3d : diff : %d\n",minWidth,maxWidth, maxWidth-minWidth); + // printf ("Long Leading 0 - not yet hanled | have 1 Fisrt bit | Min : %-3d - Max : %-3d : diff : %d\n",minWidth,maxWidth, maxWidth-minWidth); continue; } From 64c13c3aa1b0d6435faad5954b36daa34d09cebf Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Mon, 28 Sep 2020 08:23:49 +0200 Subject: [PATCH 0677/1047] style --- armsrc/epa.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/armsrc/epa.c b/armsrc/epa.c index 25a70c885..899172164 100644 --- a/armsrc/epa.c +++ b/armsrc/epa.c @@ -222,10 +222,9 @@ int EPA_Read_CardAccess(uint8_t *buffer, size_t max_length) { // since the card doesn't always care for the expected length we send it, // we reserve 262 bytes here just to be safe (256-byte APDU + SW + ISO frame) uint8_t response_apdu[262]; - int rapdu_length = 0; // select the file EF.CardAccess - rapdu_length = EPA_APDU((uint8_t *)apdu_select_binary_cardaccess, + int rapdu_length = EPA_APDU((uint8_t *)apdu_select_binary_cardaccess, sizeof(apdu_select_binary_cardaccess), response_apdu, sizeof(response_apdu) From 4c29781de7b48cdda1a5879151cc5f48e1ee600e Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Mon, 28 Sep 2020 10:09:34 +0200 Subject: [PATCH 0678/1047] hf 14b ndef - prepped the skeleton --- client/src/cmdhf14b.c | 112 +++++++++++++++++++++++++++++++++++++++--- 1 file changed, 106 insertions(+), 6 deletions(-) diff --git a/client/src/cmdhf14b.c b/client/src/cmdhf14b.c index 26821f812..32164654b 100644 --- a/client/src/cmdhf14b.c +++ b/client/src/cmdhf14b.c @@ -13,16 +13,17 @@ #include #include "fileutils.h" - -#include "cmdparser.h" // command_t -#include "comms.h" // clearCommandBuffer +#include "cmdparser.h" // command_t +#include "comms.h" // clearCommandBuffer #include "cmdtrace.h" - #include "crc16.h" #include "cmdhf14a.h" -#include "protocols.h" // definitions of ISO14B protocol +#include "protocols.h" // definitions of ISO14B/7816 protocol +#include "emv/apduinfo.h" // GetAPDUCodeDescription +#include "mifare/ndef.h" // NDEFRecordsDecodeAndPrint #define TIMEOUT 2000 + static int CmdHelp(const char *Cmd); static int usage_hf_14b_info(void) { @@ -117,6 +118,15 @@ static int usage_hf_14b_dump(void) { ); return PM3_SUCCESS; } +static int usage_hf_14b_ndef(void) { + PrintAndLogEx(NORMAL, "\n Print NFC Data Exchange Format (NDEF)\n"); + PrintAndLogEx(NORMAL, "Usage: hf 14b ndef [h]"); + PrintAndLogEx(NORMAL, "Options:"); + PrintAndLogEx(NORMAL, " h : This help"); + PrintAndLogEx(NORMAL, "Examples:"); + PrintAndLogEx(NORMAL, _YELLOW_(" hf 14b ndef")); + return PM3_SUCCESS; +} static int switch_off_field_14b(void) { clearCommandBuffer(); @@ -124,6 +134,14 @@ static int switch_off_field_14b(void) { return PM3_SUCCESS; } +static uint16_t get_sw(uint8_t *d, uint8_t n) { + if (n < 2) + return 0; + + n -= 2; + return d[n] * 0x0100 + d[n + 1]; +} + static bool waitCmd14b(bool verbose) { PacketResponseNG resp; @@ -1249,11 +1267,93 @@ static int srix4kValid(const char *Cmd) { return 0; } */ + +static int CmdHF14BNdef(const char *Cmd) { + char c = tolower(param_getchar(Cmd, 0)); + if (c == 'h' || c == 0x00) return usage_hf_14b_ndef(); + +// bool activate_field = true; +// bool keep_field_on = true; + uint8_t response[PM3_CMD_DATA_SIZE]; + int resplen = 0; + + // --------------- Select NDEF Tag application ---------------- + uint8_t aSELECT_AID[80]; + int aSELECT_AID_n = 0; + param_gethex_to_eol("00a4040007d276000085010100", 0, aSELECT_AID, sizeof(aSELECT_AID), &aSELECT_AID_n); + int res = 0; +// int res = ExchangeAPDU14a(aSELECT_AID, aSELECT_AID_n, activate_field, keep_field_on, response, sizeof(response), &resplen); + if (res) + return res; + + if (resplen < 2) + return PM3_ESOFT; + + uint16_t sw = get_sw(response, resplen); + if (sw != 0x9000) { + PrintAndLogEx(ERR, "Selecting NDEF aid failed (%04x - %s).", sw, GetAPDUCodeDescription(sw >> 8, sw & 0xff)); + return PM3_ESOFT; + } + +// activate_field = false; +// keep_field_on = true; + // --------------- Send CC select ---------------- + // --------------- Read binary ---------------- + + // --------------- NDEF file reading ---------------- + uint8_t aSELECT_FILE_NDEF[30]; + int aSELECT_FILE_NDEF_n = 0; + param_gethex_to_eol("00a4000c020001", 0, aSELECT_FILE_NDEF, sizeof(aSELECT_FILE_NDEF), &aSELECT_FILE_NDEF_n); +// res = ExchangeAPDU14a(aSELECT_FILE_NDEF, aSELECT_FILE_NDEF_n, activate_field, keep_field_on, response, sizeof(response), &resplen); + if (res) + return res; + + sw = get_sw(response, resplen); + if (sw != 0x9000) { + PrintAndLogEx(ERR, "Selecting NDEF file failed (%04x - %s).", sw, GetAPDUCodeDescription(sw >> 8, sw & 0xff)); + return PM3_ESOFT; + } + + // --------------- Read binary ---------------- + uint8_t aREAD_NDEF[30]; + int aREAD_NDEF_n = 0; + param_gethex_to_eol("00b0000002", 0, aREAD_NDEF, sizeof(aREAD_NDEF), &aREAD_NDEF_n); +// res = ExchangeAPDU14a(aREAD_NDEF, aREAD_NDEF_n, activate_field, keep_field_on, response, sizeof(response), &resplen); + if (res) + return res; + + sw = get_sw(response, resplen); + if (sw != 0x9000) { + PrintAndLogEx(ERR, "reading NDEF file failed (%04x - %s).", sw, GetAPDUCodeDescription(sw >> 8, sw & 0xff)); + return PM3_ESOFT; + } + // take offset from response + uint8_t offset = response[1]; + + // --------------- Read binary w offset ---------------- +// keep_field_on = false; + aREAD_NDEF_n = 0; + param_gethex_to_eol("00b00002", 0, aREAD_NDEF, sizeof(aREAD_NDEF), &aREAD_NDEF_n); + aREAD_NDEF[4] = offset; +// res = ExchangeAPDU14a(aREAD_NDEF, aREAD_NDEF_n, activate_field, keep_field_on, response, sizeof(response), &resplen); + if (res) + return res; + + sw = get_sw(response, resplen); + if (sw != 0x9000) { + PrintAndLogEx(ERR, "reading NDEF file failed (%04x - %s).", sw, GetAPDUCodeDescription(sw >> 8, sw & 0xff)); + return PM3_ESOFT; + } + + return NDEFRecordsDecodeAndPrint(response + 2, resplen - 4); +} + static command_t CommandTable[] = { {"help", CmdHelp, AlwaysAvailable, "This help"}, {"dump", CmdHF14BDump, IfPm3Iso14443b, "Read all memory pages of an ISO14443-B tag, save to file"}, {"info", CmdHF14Binfo, IfPm3Iso14443b, "Tag information"}, - {"list", CmdHF14BList, AlwaysAvailable, "List ISO 14443B history"}, + {"list", CmdHF14BList, AlwaysAvailable, "List ISO 14443B history"}, + {"ndef", CmdHF14BNdef, IfPm3Iso14443b, "Read NDEF file on tag"}, {"raw", CmdHF14BCmdRaw, IfPm3Iso14443b, "Send raw hex data to tag"}, {"reader", CmdHF14BReader, IfPm3Iso14443b, "Act as a 14443B reader to identify a tag"}, {"sim", CmdHF14BSim, IfPm3Iso14443b, "Fake ISO 14443B tag"}, From 99439a08696d6e8c33d749cfb0c41d882a0e82f6 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Mon, 28 Sep 2020 10:19:27 +0200 Subject: [PATCH 0679/1047] lf colors --- client/src/cmdlf.c | 44 ++++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/client/src/cmdlf.c b/client/src/cmdlf.c index 74821b449..bcc980db4 100644 --- a/client/src/cmdlf.c +++ b/client/src/cmdlf.c @@ -77,14 +77,14 @@ static int usage_lf_cmdread(void) { PrintAndLogEx(NORMAL, ""); PrintAndLogEx(NORMAL, " ************* " _YELLOW_("All periods in decimal and in microseconds (us)")); PrintAndLogEx(NORMAL, "Examples:"); - PrintAndLogEx(NORMAL, "- probing for Hitag 1/Hitag S:"); + PrintAndLogEx(NORMAL, _CYAN_(" probing for Hitag 1/Hitag S") ":"); PrintAndLogEx(NORMAL, _YELLOW_(" lf cmdread d 50 z 116 o 166 e W 3000 c W00110")); - PrintAndLogEx(NORMAL, "- probing for Hitag 2:"); + PrintAndLogEx(NORMAL, _CYAN_(" probing for Hitag 2") ":"); PrintAndLogEx(NORMAL, _YELLOW_(" lf cmdread d 50 z 116 o 166 e W 3000 c W11000")); - PrintAndLogEx(NORMAL, "- probing for Hitag 2, oscilloscope style:"); + PrintAndLogEx(NORMAL, _CYAN_(" probing for Hitag 2, oscilloscope style") ":"); PrintAndLogEx(NORMAL, _YELLOW_(" data plot")); PrintAndLogEx(NORMAL, _YELLOW_(" lf cmdread d 50 z 116 o 166 e W 3000 c W11000 q s 2000 @")); - PrintAndLogEx(NORMAL, "- probing for Hitag (us):"); + PrintAndLogEx(NORMAL, _CYAN_(" probing for Hitag (us)") ":"); PrintAndLogEx(NORMAL, _YELLOW_(" lf cmdread d 48 z 112 o 176 e W 3000 e S 240 e E 336 c W0S00000010000E")); PrintAndLogEx(NORMAL, "Extras:"); PrintAndLogEx(NORMAL, " use " _YELLOW_("'lf config'")" to set parameters."); @@ -116,8 +116,8 @@ static int usage_lf_sim(void) { PrintAndLogEx(NORMAL, " h This help"); PrintAndLogEx(NORMAL, " Start gap (in microseconds)"); PrintAndLogEx(NORMAL, "Examples:"); - PrintAndLogEx(NORMAL, " lf sim 240 - start simulating with 240ms gap"); - PrintAndLogEx(NORMAL, " lf sim"); + PrintAndLogEx(NORMAL, _YELLOW_(" lf sim 240") " - start simulating with 240ms gap"); + PrintAndLogEx(NORMAL, _YELLOW_(" lf sim")); PrintAndLogEx(NORMAL, "Extras:"); PrintAndLogEx(NORMAL, " use " _YELLOW_("'lf config'")" to set parameters."); return PM3_SUCCESS; @@ -132,9 +132,9 @@ static int usage_lf_sniff(void) { PrintAndLogEx(NORMAL, " @ run continuously until a key is pressed (optional)"); PrintAndLogEx(NORMAL, "Examples:"); PrintAndLogEx(NORMAL, " lf sniff"); - PrintAndLogEx(NORMAL, "- oscilloscope style:"); - PrintAndLogEx(NORMAL, " data plot"); - PrintAndLogEx(NORMAL, " lf sniff q s 3000 @"); + PrintAndLogEx(NORMAL, _CYAN_(" oscilloscope style") ":"); + PrintAndLogEx(NORMAL, _YELLOW_(" data plot")); + PrintAndLogEx(NORMAL, _YELLOW_(" lf sniff q s 3000 @")); PrintAndLogEx(NORMAL, "Extras:"); PrintAndLogEx(NORMAL, " use " _YELLOW_("'lf config'")" to set parameters."); PrintAndLogEx(NORMAL, " use " _YELLOW_("'data plot'")" to look at it"); @@ -154,12 +154,12 @@ static int usage_lf_config(void) { PrintAndLogEx(NORMAL, " t Sets trigger threshold. 0 means no threshold (range: 0-128)"); PrintAndLogEx(NORMAL, " s Sets a number of samples to skip before capture. Default: 0"); PrintAndLogEx(NORMAL, "Examples:"); - PrintAndLogEx(NORMAL, " lf config - shows current config"); - PrintAndLogEx(NORMAL, " lf config b 8 L - samples at 125 kHz, 8bps."); - PrintAndLogEx(NORMAL, " lf config H b 4 d 3 - samples at 134 kHz, averages three samples into one, stored with "); + PrintAndLogEx(NORMAL, _YELLOW_(" lf config") " - shows current config"); + PrintAndLogEx(NORMAL, _YELLOW_(" lf config b 8 L") " - samples at 125 kHz, 8bps."); + PrintAndLogEx(NORMAL, _YELLOW_(" lf config H b 4 d 3") " - samples at 134 kHz, averages three samples into one, stored with "); PrintAndLogEx(NORMAL, " a resolution of 4 bits per sample."); - PrintAndLogEx(NORMAL, " lf read - performs a read (active field)"); - PrintAndLogEx(NORMAL, " lf sniff - performs a sniff (no active field)"); + PrintAndLogEx(NORMAL, _YELLOW_(" lf read") " - performs a read (active field)"); + PrintAndLogEx(NORMAL, _YELLOW_(" lf sniff") " - performs a sniff (no active field)"); return PM3_SUCCESS; } static int usage_lf_simfsk(void) { @@ -180,10 +180,10 @@ static int usage_lf_simfsk(void) { PrintAndLogEx(NORMAL, "\n NOTE: if you set one clock manually set them all manually"); PrintAndLogEx(NORMAL, ""); PrintAndLogEx(NORMAL, "Examples:"); - PrintAndLogEx(NORMAL, " lf simfsk c 40 H 8 L 5 d 010203 - FSK1 rf/40 data 010203"); - PrintAndLogEx(NORMAL, " lf simfsk c 40 H 5 L 8 d 010203 - FSK1a rf/40 data 010203"); - PrintAndLogEx(NORMAL, " lf simfsk c 64 H 10 L 8 d 010203 - FSK2 rf/64 data 010203"); - PrintAndLogEx(NORMAL, " lf simfsk c 64 H 8 L 10 d 010203 - FSK2a rf/64 data 010203"); + PrintAndLogEx(NORMAL, _YELLOW_(" lf simfsk c 40 H 8 L 5 d 010203") " - FSK1 rf/40 data 010203"); + PrintAndLogEx(NORMAL, _YELLOW_(" lf simfsk c 40 H 5 L 8 d 010203") " - FSK1a rf/40 data 010203"); + PrintAndLogEx(NORMAL, _YELLOW_(" lf simfsk c 64 H 10 L 8 d 010203") " - FSK2 rf/64 data 010203"); + PrintAndLogEx(NORMAL, _YELLOW_(" lf simfsk c 64 H 8 L 10 d 010203") " - FSK2a rf/64 data 010203"); PrintAndLogEx(NORMAL, ""); return PM3_SUCCESS; } @@ -221,10 +221,10 @@ static int usage_lf_find(void) { PrintAndLogEx(NORMAL, " <0|1> Use data from Graphbuffer, if not set, try reading data from tag."); PrintAndLogEx(NORMAL, " u Search for Unknown tags, if not set, reads only known tags."); PrintAndLogEx(NORMAL, "Examples:"); - PrintAndLogEx(NORMAL, " lf search = try reading data from tag & search for known tags"); - PrintAndLogEx(NORMAL, " lf search 1 = use data from GraphBuffer & search for known tags"); - PrintAndLogEx(NORMAL, " lf search u = try reading data from tag & search for known and unknown tags"); - PrintAndLogEx(NORMAL, " lf search 1 u = use data from GraphBuffer & search for known and unknown tags"); + PrintAndLogEx(NORMAL, _YELLOW_(" lf search") " - try reading data from tag & search for known tags"); + PrintAndLogEx(NORMAL, _YELLOW_(" lf search 1") " - use data from GraphBuffer & search for known tags"); + PrintAndLogEx(NORMAL, _YELLOW_(" lf search u") " - try reading data from tag & search for known and unknown tags"); + PrintAndLogEx(NORMAL, _YELLOW_(" lf search 1 u") " - use data from GraphBuffer & search for known and unknown tags"); return PM3_SUCCESS; } static int usage_lf_tune(void) { From 74050af8c286c289248efbf4044796888ac6aff0 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Mon, 28 Sep 2020 10:47:13 +0200 Subject: [PATCH 0680/1047] updated to latest LZ4 source --- common/lz4/lz4.c | 1447 +++++++++++++++++++++++--------------------- common/lz4/lz4.h | 163 ++--- common/lz4/lz4hc.c | 1219 +++++++++++++++++++------------------ common/lz4/lz4hc.h | 106 ++-- 4 files changed, 1525 insertions(+), 1410 deletions(-) diff --git a/common/lz4/lz4.c b/common/lz4/lz4.c index 5bca93e08..f76366e7d 100644 --- a/common/lz4/lz4.c +++ b/common/lz4/lz4.c @@ -45,10 +45,16 @@ #endif /* - * ACCELERATION_DEFAULT : + * LZ4_ACCELERATION_DEFAULT : * Select "acceleration" for LZ4_compress_fast() when parameter value <= 0 */ -#define ACCELERATION_DEFAULT 1 +#define LZ4_ACCELERATION_DEFAULT 1 +/* + * LZ4_ACCELERATION_MAX : + * Any "acceleration" value higher than this threshold + * get treated as LZ4_ACCELERATION_MAX instead (fix #876) + */ +#define LZ4_ACCELERATION_MAX 65537 /*-************************************ @@ -82,6 +88,7 @@ * Define this parameter if your target system or compiler does not support hardware bit count */ #if defined(_MSC_VER) && defined(_WIN32_WCE) /* Visual Studio for WinCE doesn't support Hardware bit count */ +# undef LZ4_FORCE_SW_BITCOUNT /* avoid double def */ # define LZ4_FORCE_SW_BITCOUNT #endif @@ -193,7 +200,7 @@ #define MFLIMIT 12 /* see ../doc/lz4_Block_format.md#parsing-restrictions */ #define MATCH_SAFEGUARD_DISTANCE ((2*WILDCOPYLENGTH) - MINMATCH) /* ensure it's possible to write 2 x wildcopyLength without overflowing output buffer */ #define FASTLOOP_SAFE_DISTANCE 64 -static const int LZ4_minLength = (MFLIMIT + 1); +static const int LZ4_minLength = (MFLIMIT+1); #define KB *(1 <<10) #define MB *(1 <<20) @@ -225,15 +232,15 @@ static const int LZ4_minLength = (MFLIMIT + 1); #if defined(LZ4_DEBUG) && (LZ4_DEBUG>=2) # include -static int g_debuglog_enable = 1; -# define DEBUGLOG(l, ...) { \ - if ((g_debuglog_enable) && (l<=LZ4_DEBUG)) { \ - fprintf(stderr, __FILE__ ": "); \ - fprintf(stderr, __VA_ARGS__); \ - fprintf(stderr, " \n"); \ - } } + static int g_debuglog_enable = 1; +# define DEBUGLOG(l, ...) { \ + if ((g_debuglog_enable) && (l<=LZ4_DEBUG)) { \ + fprintf(stderr, __FILE__ ": "); \ + fprintf(stderr, __VA_ARGS__); \ + fprintf(stderr, " \n"); \ + } } #else -# define DEBUGLOG(l, ...) {} /* disabled */ +# define DEBUGLOG(l, ...) {} /* disabled */ #endif @@ -242,25 +249,29 @@ static int g_debuglog_enable = 1; **************************************/ #if defined(__cplusplus) || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */) # include -typedef uint8_t BYTE; -typedef uint16_t U16; -typedef uint32_t U32; -typedef int32_t S32; -typedef uint64_t U64; -typedef uintptr_t uptrval; + typedef uint8_t BYTE; + typedef uint16_t U16; + typedef uint32_t U32; + typedef int32_t S32; + typedef uint64_t U64; + typedef uintptr_t uptrval; #else -typedef unsigned char BYTE; -typedef unsigned short U16; -typedef unsigned int U32; -typedef signed int S32; -typedef unsigned long long U64; -typedef size_t uptrval; /* generally true, except OpenVMS-64 */ +# include +# if UINT_MAX != 4294967295UL +# error "LZ4 code (when not C++ or C99) assumes that sizeof(int) == 4" +# endif + typedef unsigned char BYTE; + typedef unsigned short U16; + typedef unsigned int U32; + typedef signed int S32; + typedef unsigned long long U64; + typedef size_t uptrval; /* generally true, except OpenVMS-64 */ #endif #if defined(__x86_64__) -typedef U64 reg_t; /* 64-bits in x32 mode */ + typedef U64 reg_t; /* 64-bits in x32 mode */ #else -typedef size_t reg_t; /* 32-bits in x32 mode */ + typedef size_t reg_t; /* 32-bits in x32 mode */ #endif typedef enum { @@ -273,7 +284,23 @@ typedef enum { /*-************************************ * Reading and writing into memory **************************************/ -static unsigned LZ4_isLittleEndian(void) { + +/** + * LZ4 relies on memcpy with a constant size being inlined. In freestanding + * environments, the compiler can't assume the implementation of memcpy() is + * standard compliant, so it can't apply its specialized memcpy() inlining + * logic. When possible, use __builtin_memcpy() to tell the compiler to analyze + * memcpy() as if it were standard compliant, so it can inline it in freestanding + * environments. This is needed when decompressing the Linux Kernel, for example. + */ +#if defined(__GNUC__) && (__GNUC__ >= 4) +#define LZ4_memcpy(dst, src, size) __builtin_memcpy(dst, src, size) +#else +#define LZ4_memcpy(dst, src, size) memcpy(dst, src, size) +#endif + +static unsigned LZ4_isLittleEndian(void) +{ const union { U32 u; BYTE c[4]; } one = { 1 }; /* don't use static : performance detrimental */ return one.c[0]; } @@ -282,12 +309,12 @@ static unsigned LZ4_isLittleEndian(void) { #if defined(LZ4_FORCE_MEMORY_ACCESS) && (LZ4_FORCE_MEMORY_ACCESS==2) /* lie to the compiler about data alignment; use with caution */ -static U16 LZ4_read16(const void *memPtr) { return *(const U16 *) memPtr; } -static U32 LZ4_read32(const void *memPtr) { return *(const U32 *) memPtr; } -static reg_t LZ4_read_ARCH(const void *memPtr) { return *(const reg_t *) memPtr; } +static U16 LZ4_read16(const void* memPtr) { return *(const U16*) memPtr; } +static U32 LZ4_read32(const void* memPtr) { return *(const U32*) memPtr; } +static reg_t LZ4_read_ARCH(const void* memPtr) { return *(const reg_t*) memPtr; } -static void LZ4_write16(void *memPtr, U16 value) { *(U16 *)memPtr = value; } -static void LZ4_write32(void *memPtr, U32 value) { *(U32 *)memPtr = value; } +static void LZ4_write16(void* memPtr, U16 value) { *(U16*)memPtr = value; } +static void LZ4_write32(void* memPtr, U32 value) { *(U32*)memPtr = value; } #elif defined(LZ4_FORCE_MEMORY_ACCESS) && (LZ4_FORCE_MEMORY_ACCESS==1) @@ -295,72 +322,73 @@ static void LZ4_write32(void *memPtr, U32 value) { *(U32 *)memPtr = value; } /* currently only defined for gcc and icc */ typedef union { U16 u16; U32 u32; reg_t uArch; } __attribute__((packed)) unalign; -static U16 LZ4_read16(const void *ptr) { return ((const unalign *)ptr)->u16; } -static U32 LZ4_read32(const void *ptr) { return ((const unalign *)ptr)->u32; } -static reg_t LZ4_read_ARCH(const void *ptr) { return ((const unalign *)ptr)->uArch; } +static U16 LZ4_read16(const void* ptr) { return ((const unalign*)ptr)->u16; } +static U32 LZ4_read32(const void* ptr) { return ((const unalign*)ptr)->u32; } +static reg_t LZ4_read_ARCH(const void* ptr) { return ((const unalign*)ptr)->uArch; } -static void LZ4_write16(void *memPtr, U16 value) { ((unalign *)memPtr)->u16 = value; } -static void LZ4_write32(void *memPtr, U32 value) { ((unalign *)memPtr)->u32 = value; } +static void LZ4_write16(void* memPtr, U16 value) { ((unalign*)memPtr)->u16 = value; } +static void LZ4_write32(void* memPtr, U32 value) { ((unalign*)memPtr)->u32 = value; } #else /* safe and portable access using memcpy() */ -static U16 LZ4_read16(const void *memPtr) { - U16 val; - memcpy(&val, memPtr, sizeof(val)); - return val; +static U16 LZ4_read16(const void* memPtr) +{ + U16 val; LZ4_memcpy(&val, memPtr, sizeof(val)); return val; } -static U32 LZ4_read32(const void *memPtr) { - U32 val; - memcpy(&val, memPtr, sizeof(val)); - return val; +static U32 LZ4_read32(const void* memPtr) +{ + U32 val; LZ4_memcpy(&val, memPtr, sizeof(val)); return val; } -static reg_t LZ4_read_ARCH(const void *memPtr) { - reg_t val; - memcpy(&val, memPtr, sizeof(val)); - return val; +static reg_t LZ4_read_ARCH(const void* memPtr) +{ + reg_t val; LZ4_memcpy(&val, memPtr, sizeof(val)); return val; } -static void LZ4_write16(void *memPtr, U16 value) { - memcpy(memPtr, &value, sizeof(value)); +static void LZ4_write16(void* memPtr, U16 value) +{ + LZ4_memcpy(memPtr, &value, sizeof(value)); } -static void LZ4_write32(void *memPtr, U32 value) { - memcpy(memPtr, &value, sizeof(value)); +static void LZ4_write32(void* memPtr, U32 value) +{ + LZ4_memcpy(memPtr, &value, sizeof(value)); } #endif /* LZ4_FORCE_MEMORY_ACCESS */ -static U16 LZ4_readLE16(const void *memPtr) { +static U16 LZ4_readLE16(const void* memPtr) +{ if (LZ4_isLittleEndian()) { return LZ4_read16(memPtr); } else { - const BYTE *p = (const BYTE *)memPtr; - return (U16)((U16)p[0] + (p[1] << 8)); + const BYTE* p = (const BYTE*)memPtr; + return (U16)((U16)p[0] + (p[1]<<8)); } } -static void LZ4_writeLE16(void *memPtr, U16 value) { +static void LZ4_writeLE16(void* memPtr, U16 value) +{ if (LZ4_isLittleEndian()) { LZ4_write16(memPtr, value); } else { - BYTE *p = (BYTE *)memPtr; + BYTE* p = (BYTE*)memPtr; p[0] = (BYTE) value; - p[1] = (BYTE)(value >> 8); + p[1] = (BYTE)(value>>8); } } /* customized variant of memcpy, which can overwrite up to 8 bytes beyond dstEnd */ LZ4_FORCE_O2_INLINE_GCC_PPC64LE -void LZ4_wildCopy8(void *dstPtr, const void *srcPtr, void *dstEnd) { - BYTE *d = (BYTE *)dstPtr; - const BYTE *s = (const BYTE *)srcPtr; - BYTE *const e = (BYTE *)dstEnd; +void LZ4_wildCopy8(void* dstPtr, const void* srcPtr, void* dstEnd) +{ + BYTE* d = (BYTE*)dstPtr; + const BYTE* s = (const BYTE*)srcPtr; + BYTE* const e = (BYTE*)dstEnd; - do { memcpy(d, s, 8); d += 8; s += 8; } - while (d < e); + do { LZ4_memcpy(d,s,8); d+=8; s+=8; } while (d= 16. */ LZ4_FORCE_O2_INLINE_GCC_PPC64LE void -LZ4_wildCopy32(void *dstPtr, const void *srcPtr, void *dstEnd) { - BYTE *d = (BYTE *)dstPtr; - const BYTE *s = (const BYTE *)srcPtr; - BYTE *const e = (BYTE *)dstEnd; +LZ4_wildCopy32(void* dstPtr, const void* srcPtr, void* dstEnd) +{ + BYTE* d = (BYTE*)dstPtr; + const BYTE* s = (const BYTE*)srcPtr; + BYTE* const e = (BYTE*)dstEnd; - do { memcpy(d, s, 16); memcpy(d + 16, s + 16, 16); d += 32; s += 32; } - while (d < e); + do { LZ4_memcpy(d,s,16); LZ4_memcpy(d+16,s+16,16); d+=32; s+=32; } while (d= dstPtr + MINMATCH * - there is at least 8 bytes available to write after dstEnd */ LZ4_FORCE_O2_INLINE_GCC_PPC64LE void -LZ4_memcpy_using_offset(BYTE *dstPtr, const BYTE *srcPtr, BYTE *dstEnd, const size_t offset) { +LZ4_memcpy_using_offset(BYTE* dstPtr, const BYTE* srcPtr, BYTE* dstEnd, const size_t offset) +{ BYTE v[8]; assert(dstEnd >= dstPtr + MINMATCH); LZ4_write32(dstPtr, 0); /* silence an msan warning when offset==0 */ - switch (offset) { - case 1: - memset(v, *srcPtr, 8); - break; - case 2: - memcpy(v, srcPtr, 2); - memcpy(&v[2], srcPtr, 2); - memcpy(&v[4], &v[0], 4); - break; - case 4: - memcpy(v, srcPtr, 4); - memcpy(&v[4], srcPtr, 4); - break; - default: - LZ4_memcpy_using_offset_base(dstPtr, srcPtr, dstEnd, offset); - return; + switch(offset) { + case 1: + memset(v, *srcPtr, 8); + break; + case 2: + LZ4_memcpy(v, srcPtr, 2); + LZ4_memcpy(&v[2], srcPtr, 2); + LZ4_memcpy(&v[4], &v[0], 4); + break; + case 4: + LZ4_memcpy(v, srcPtr, 4); + LZ4_memcpy(&v[4], srcPtr, 4); + break; + default: + LZ4_memcpy_using_offset_base(dstPtr, srcPtr, dstEnd, offset); + return; } - memcpy(dstPtr, v, 8); + LZ4_memcpy(dstPtr, v, 8); dstPtr += 8; while (dstPtr < dstEnd) { - memcpy(dstPtr, v, 8); + LZ4_memcpy(dstPtr, v, 8); dstPtr += 8; } } @@ -456,106 +486,118 @@ LZ4_memcpy_using_offset(BYTE *dstPtr, const BYTE *srcPtr, BYTE *dstEnd, const si /*-************************************ * Common functions **************************************/ -static unsigned LZ4_NbCommonBytes(reg_t val) { +static unsigned LZ4_NbCommonBytes (reg_t val) +{ + assert(val != 0); if (LZ4_isLittleEndian()) { if (sizeof(val) == 8) { -# if defined(_MSC_VER) && defined(_WIN64) && !defined(LZ4_FORCE_SW_BITCOUNT) +# if defined(_MSC_VER) && (_MSC_VER >= 1800) && defined(_M_AMD64) && !defined(LZ4_FORCE_SW_BITCOUNT) + /* x64 CPUS without BMI support interpret `TZCNT` as `REP BSF` */ + return (unsigned)_tzcnt_u64(val) >> 3; +# elif defined(_MSC_VER) && defined(_WIN64) && !defined(LZ4_FORCE_SW_BITCOUNT) unsigned long r = 0; _BitScanForward64(&r, (U64)val); - return (int)(r >> 3); -# elif (defined(__clang__) || (defined(__GNUC__) && (__GNUC__>=3))) && !defined(LZ4_FORCE_SW_BITCOUNT) + return (unsigned)r >> 3; +# elif (defined(__clang__) || (defined(__GNUC__) && ((__GNUC__ > 3) || \ + ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 4))))) && \ + !defined(LZ4_FORCE_SW_BITCOUNT) return (unsigned)__builtin_ctzll((U64)val) >> 3; # else - static const int DeBruijnBytePos[64] = { 0, 0, 0, 0, 0, 1, 1, 2, - 0, 3, 1, 3, 1, 4, 2, 7, - 0, 2, 3, 6, 1, 5, 3, 5, - 1, 3, 4, 4, 2, 5, 6, 7, - 7, 0, 1, 2, 3, 3, 4, 6, - 2, 6, 5, 5, 3, 4, 5, 6, - 7, 1, 2, 4, 6, 4, 4, 5, - 7, 2, 6, 5, 7, 6, 7, 7 - }; - return DeBruijnBytePos[((U64)((val & -(long long)val) * 0x0218A392CDABBD3FULL)) >> 58]; + const U64 m = 0x0101010101010101ULL; + val ^= val - 1; + return (unsigned)(((U64)((val & (m - 1)) * m)) >> 56); # endif } else /* 32 bits */ { # if defined(_MSC_VER) && !defined(LZ4_FORCE_SW_BITCOUNT) unsigned long r; _BitScanForward(&r, (U32)val); - return (int)(r >> 3); -# elif (defined(__clang__) || (defined(__GNUC__) && (__GNUC__>=3))) && !defined(LZ4_FORCE_SW_BITCOUNT) + return (unsigned)r >> 3; +# elif (defined(__clang__) || (defined(__GNUC__) && ((__GNUC__ > 3) || \ + ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 4))))) && \ + !defined(__TINYC__) && !defined(LZ4_FORCE_SW_BITCOUNT) return (unsigned)__builtin_ctz((U32)val) >> 3; # else - static const int DeBruijnBytePos[32] = { 0, 0, 3, 0, 3, 1, 3, 0, - 3, 2, 2, 1, 3, 2, 0, 1, - 3, 3, 1, 2, 2, 2, 2, 0, - 3, 1, 2, 0, 1, 0, 1, 1 - }; - return DeBruijnBytePos[((U32)((val & -(S32)val) * 0x077CB531U)) >> 27]; + const U32 m = 0x01010101; + return (unsigned)((((val - 1) ^ val) & (m - 1)) * m) >> 24; # endif } - } else { /* Big Endian CPU */ - if (sizeof(val) == 8) { /* 64-bits */ -# if defined(_MSC_VER) && defined(_WIN64) && !defined(LZ4_FORCE_SW_BITCOUNT) - unsigned long r = 0; - _BitScanReverse64(&r, val); - return (unsigned)(r >> 3); -# elif (defined(__clang__) || (defined(__GNUC__) && (__GNUC__>=3))) && !defined(LZ4_FORCE_SW_BITCOUNT) + } else /* Big Endian CPU */ { + if (sizeof(val)==8) { +# if (defined(__clang__) || (defined(__GNUC__) && ((__GNUC__ > 3) || \ + ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 4))))) && \ + !defined(__TINYC__) && !defined(LZ4_FORCE_SW_BITCOUNT) return (unsigned)__builtin_clzll((U64)val) >> 3; # else - static const U32 by32 = sizeof(val) * 4; /* 32 on 64 bits (goal), 16 on 32 bits. - Just to avoid some static analyzer complaining about shift by 32 on 32-bits target. - Note that this code path is never triggered in 32-bits mode. */ +#if 1 + /* this method is probably faster, + * but adds a 128 bytes lookup table */ + static const unsigned char ctz7_tab[128] = { + 7, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, + 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, + 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, + 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, + 6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, + 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, + 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, + 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, + }; + U64 const mask = 0x0101010101010101ULL; + U64 const t = (((val >> 8) - mask) | val) & mask; + return ctz7_tab[(t * 0x0080402010080402ULL) >> 57]; +#else + /* this method doesn't consume memory space like the previous one, + * but it contains several branches, + * that may end up slowing execution */ + static const U32 by32 = sizeof(val)*4; /* 32 on 64 bits (goal), 16 on 32 bits. + Just to avoid some static analyzer complaining about shift by 32 on 32-bits target. + Note that this code path is never triggered in 32-bits mode. */ unsigned r; - if (!(val >> by32)) { r = 4; } - else { r = 0; val >>= by32; } - if (!(val >> 16)) { r += 2; val >>= 8; } - else { val >>= 24; } + if (!(val>>by32)) { r=4; } else { r=0; val>>=by32; } + if (!(val>>16)) { r+=2; val>>=8; } else { val>>=24; } r += (!val); return r; +#endif # endif } else /* 32 bits */ { -# if defined(_MSC_VER) && !defined(LZ4_FORCE_SW_BITCOUNT) - unsigned long r = 0; - _BitScanReverse(&r, (unsigned long)val); - return (unsigned)(r >> 3); -# elif (defined(__clang__) || (defined(__GNUC__) && (__GNUC__>=3))) && !defined(LZ4_FORCE_SW_BITCOUNT) +# if (defined(__clang__) || (defined(__GNUC__) && ((__GNUC__ > 3) || \ + ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 4))))) && \ + !defined(LZ4_FORCE_SW_BITCOUNT) return (unsigned)__builtin_clz((U32)val) >> 3; # else - unsigned r; - if (!(val >> 16)) { r = 2; val >>= 8; } - else { r = 0; val >>= 24; } - r += (!val); - return r; + val >>= 8; + val = ((((val + 0x00FFFF00) | 0x00FFFFFF) + val) | + (val + 0x00FF0000)) >> 24; + return (unsigned)val ^ 3; # endif } } } + #define STEPSIZE sizeof(reg_t) LZ4_FORCE_INLINE -unsigned LZ4_count(const BYTE *pIn, const BYTE *pMatch, const BYTE *pInLimit) { - const BYTE *const pStart = pIn; +unsigned LZ4_count(const BYTE* pIn, const BYTE* pMatch, const BYTE* pInLimit) +{ + const BYTE* const pStart = pIn; - if (likely(pIn < pInLimit - (STEPSIZE - 1))) { + if (likely(pIn < pInLimit-(STEPSIZE-1))) { reg_t const diff = LZ4_read_ARCH(pMatch) ^ LZ4_read_ARCH(pIn); if (!diff) { - pIn += STEPSIZE; - pMatch += STEPSIZE; + pIn+=STEPSIZE; pMatch+=STEPSIZE; } else { return LZ4_NbCommonBytes(diff); - } - } + } } - while (likely(pIn < pInLimit - (STEPSIZE - 1))) { + while (likely(pIn < pInLimit-(STEPSIZE-1))) { reg_t const diff = LZ4_read_ARCH(pMatch) ^ LZ4_read_ARCH(pIn); - if (!diff) { pIn += STEPSIZE; pMatch += STEPSIZE; continue; } + if (!diff) { pIn+=STEPSIZE; pMatch+=STEPSIZE; continue; } pIn += LZ4_NbCommonBytes(diff); return (unsigned)(pIn - pStart); } - if ((STEPSIZE == 8) && (pIn < (pInLimit - 3)) && (LZ4_read32(pMatch) == LZ4_read32(pIn))) { pIn += 4; pMatch += 4; } - if ((pIn < (pInLimit - 1)) && (LZ4_read16(pMatch) == LZ4_read16(pIn))) { pIn += 2; pMatch += 2; } - if ((pIn < pInLimit) && (*pMatch == *pIn)) pIn++; + if ((STEPSIZE==8) && (pIn<(pInLimit-3)) && (LZ4_read32(pMatch) == LZ4_read32(pIn))) { pIn+=4; pMatch+=4; } + if ((pIn<(pInLimit-1)) && (LZ4_read16(pMatch) == LZ4_read16(pIn))) { pIn+=2; pMatch+=2; } + if ((pIn compression run slower on incompressible data */ @@ -603,10 +645,10 @@ typedef enum { noDictIssue = 0, dictSmall } dictIssue_directive; /*-************************************ * Local Utils **************************************/ -int LZ4_versionNumber(void) { return LZ4_VERSION_NUMBER; } -const char *LZ4_versionString(void) { return LZ4_VERSION_STRING; } +int LZ4_versionNumber (void) { return LZ4_VERSION_NUMBER; } +const char* LZ4_versionString(void) { return LZ4_VERSION_STRING; } int LZ4_compressBound(int isize) { return LZ4_COMPRESSBOUND(isize); } -int LZ4_sizeofState() { return LZ4_STREAMSIZE; } +int LZ4_sizeofState(void) { return LZ4_STREAMSIZE; } /*-************************************ @@ -616,11 +658,11 @@ int LZ4_sizeofState() { return LZ4_STREAMSIZE; } extern "C" { #endif -int LZ4_compress_forceExtDict(LZ4_stream_t *LZ4_dict, const char *source, char *dest, int srcSize); +int LZ4_compress_forceExtDict (LZ4_stream_t* LZ4_dict, const char* source, char* dest, int srcSize); -int LZ4_decompress_safe_forceExtDict(const char *source, char *dest, +int LZ4_decompress_safe_forceExtDict(const char* source, char* dest, int compressedSize, int maxOutputSize, - const void *dictStart, size_t dictSize); + const void* dictStart, size_t dictSize); #if defined (__cplusplus) } @@ -629,15 +671,17 @@ int LZ4_decompress_safe_forceExtDict(const char *source, char *dest, /*-****************************** * Compression functions ********************************/ -static U32 LZ4_hash4(U32 sequence, tableType_t const tableType) { +LZ4_FORCE_INLINE U32 LZ4_hash4(U32 sequence, tableType_t const tableType) +{ if (tableType == byU16) - return ((sequence * 2654435761U) >> ((MINMATCH * 8) - (LZ4_HASHLOG + 1))); + return ((sequence * 2654435761U) >> ((MINMATCH*8)-(LZ4_HASHLOG+1))); else - return ((sequence * 2654435761U) >> ((MINMATCH * 8) - LZ4_HASHLOG)); + return ((sequence * 2654435761U) >> ((MINMATCH*8)-LZ4_HASHLOG)); } -static U32 LZ4_hash5(U64 sequence, tableType_t const tableType) { - const U32 hashLog = (tableType == byU16) ? LZ4_HASHLOG + 1 : LZ4_HASHLOG; +LZ4_FORCE_INLINE U32 LZ4_hash5(U64 sequence, tableType_t const tableType) +{ + const U32 hashLog = (tableType == byU16) ? LZ4_HASHLOG+1 : LZ4_HASHLOG; if (LZ4_isLittleEndian()) { const U64 prime5bytes = 889523592379ULL; return (U32)(((sequence << 24) * prime5bytes) >> (64 - hashLog)); @@ -647,51 +691,51 @@ static U32 LZ4_hash5(U64 sequence, tableType_t const tableType) { } } -LZ4_FORCE_INLINE U32 LZ4_hashPosition(const void *const p, tableType_t const tableType) { - if ((sizeof(reg_t) == 8) && (tableType != byU16)) return LZ4_hash5(LZ4_read_ARCH(p), tableType); +LZ4_FORCE_INLINE U32 LZ4_hashPosition(const void* const p, tableType_t const tableType) +{ + if ((sizeof(reg_t)==8) && (tableType != byU16)) return LZ4_hash5(LZ4_read_ARCH(p), tableType); return LZ4_hash4(LZ4_read32(p), tableType); } -static void LZ4_clearHash(U32 h, void *tableBase, tableType_t const tableType) { - switch (tableType) { - default: /* fallthrough */ - case clearedTable: { /* illegal! */ assert(0); return; } - case byPtr: - { const BYTE **hashTable = (const BYTE **)tableBase; hashTable[h] = NULL; return; } - case byU32: - { U32 *hashTable = (U32 *) tableBase; hashTable[h] = 0; return; } - case byU16: - { U16 *hashTable = (U16 *) tableBase; hashTable[h] = 0; return; } +LZ4_FORCE_INLINE void LZ4_clearHash(U32 h, void* tableBase, tableType_t const tableType) +{ + switch (tableType) + { + default: /* fallthrough */ + case clearedTable: { /* illegal! */ assert(0); return; } + case byPtr: { const BYTE** hashTable = (const BYTE**)tableBase; hashTable[h] = NULL; return; } + case byU32: { U32* hashTable = (U32*) tableBase; hashTable[h] = 0; return; } + case byU16: { U16* hashTable = (U16*) tableBase; hashTable[h] = 0; return; } } } -static void LZ4_putIndexOnHash(U32 idx, U32 h, void *tableBase, tableType_t const tableType) { - switch (tableType) { - default: /* fallthrough */ - case clearedTable: /* fallthrough */ - case byPtr: { /* illegal! */ assert(0); return; } - case byU32: - { U32 *hashTable = (U32 *) tableBase; hashTable[h] = idx; return; } - case byU16: - { U16 *hashTable = (U16 *) tableBase; assert(idx < 65536); hashTable[h] = (U16)idx; return; } +LZ4_FORCE_INLINE void LZ4_putIndexOnHash(U32 idx, U32 h, void* tableBase, tableType_t const tableType) +{ + switch (tableType) + { + default: /* fallthrough */ + case clearedTable: /* fallthrough */ + case byPtr: { /* illegal! */ assert(0); return; } + case byU32: { U32* hashTable = (U32*) tableBase; hashTable[h] = idx; return; } + case byU16: { U16* hashTable = (U16*) tableBase; assert(idx < 65536); hashTable[h] = (U16)idx; return; } } } -static void LZ4_putPositionOnHash(const BYTE *p, U32 h, - void *tableBase, tableType_t const tableType, - const BYTE *srcBase) { - switch (tableType) { - case clearedTable: { /* illegal! */ assert(0); return; } - case byPtr: - { const BYTE **hashTable = (const BYTE **)tableBase; hashTable[h] = p; return; } - case byU32: - { U32 *hashTable = (U32 *) tableBase; hashTable[h] = (U32)(p - srcBase); return; } - case byU16: - { U16 *hashTable = (U16 *) tableBase; hashTable[h] = (U16)(p - srcBase); return; } +LZ4_FORCE_INLINE void LZ4_putPositionOnHash(const BYTE* p, U32 h, + void* tableBase, tableType_t const tableType, + const BYTE* srcBase) +{ + switch (tableType) + { + case clearedTable: { /* illegal! */ assert(0); return; } + case byPtr: { const BYTE** hashTable = (const BYTE**)tableBase; hashTable[h] = p; return; } + case byU32: { U32* hashTable = (U32*) tableBase; hashTable[h] = (U32)(p-srcBase); return; } + case byU16: { U16* hashTable = (U16*) tableBase; hashTable[h] = (U16)(p-srcBase); return; } } } -LZ4_FORCE_INLINE void LZ4_putPosition(const BYTE *p, void *tableBase, tableType_t tableType, const BYTE *srcBase) { +LZ4_FORCE_INLINE void LZ4_putPosition(const BYTE* p, void* tableBase, tableType_t tableType, const BYTE* srcBase) +{ U32 const h = LZ4_hashPosition(p, tableType); LZ4_putPositionOnHash(p, h, tableBase, tableType, srcBase); } @@ -702,64 +746,58 @@ LZ4_FORCE_INLINE void LZ4_putPosition(const BYTE *p, void *tableBase, tableType_ * Assumption 1 : only valid if tableType == byU32 or byU16. * Assumption 2 : h is presumed valid (within limits of hash table) */ -static U32 LZ4_getIndexOnHash(U32 h, const void *tableBase, tableType_t tableType) { +LZ4_FORCE_INLINE U32 LZ4_getIndexOnHash(U32 h, const void* tableBase, tableType_t tableType) +{ LZ4_STATIC_ASSERT(LZ4_MEMORY_USAGE > 2); if (tableType == byU32) { - const U32 *const hashTable = (const U32 *) tableBase; - assert(h < (1U << (LZ4_MEMORY_USAGE - 2))); + const U32* const hashTable = (const U32*) tableBase; + assert(h < (1U << (LZ4_MEMORY_USAGE-2))); return hashTable[h]; } if (tableType == byU16) { - const U16 *const hashTable = (const U16 *) tableBase; - assert(h < (1U << (LZ4_MEMORY_USAGE - 1))); + const U16* const hashTable = (const U16*) tableBase; + assert(h < (1U << (LZ4_MEMORY_USAGE-1))); return hashTable[h]; } - assert(0); - return 0; /* forbidden case */ + assert(0); return 0; /* forbidden case */ } -static const BYTE *LZ4_getPositionOnHash(U32 h, const void *tableBase, tableType_t tableType, const BYTE *srcBase) { - if (tableType == byPtr) { const BYTE *const *hashTable = (const BYTE * const *) tableBase; return hashTable[h]; } - if (tableType == byU32) { const U32 *const hashTable = (const U32 *) tableBase; return hashTable[h] + srcBase; } - { const U16 *const hashTable = (const U16 *) tableBase; return hashTable[h] + srcBase; } /* default, to ensure a return */ +static const BYTE* LZ4_getPositionOnHash(U32 h, const void* tableBase, tableType_t tableType, const BYTE* srcBase) +{ + if (tableType == byPtr) { const BYTE* const* hashTable = (const BYTE* const*) tableBase; return hashTable[h]; } + if (tableType == byU32) { const U32* const hashTable = (const U32*) tableBase; return hashTable[h] + srcBase; } + { const U16* const hashTable = (const U16*) tableBase; return hashTable[h] + srcBase; } /* default, to ensure a return */ } -LZ4_FORCE_INLINE const BYTE * -LZ4_getPosition(const BYTE *p, - const void *tableBase, tableType_t tableType, - const BYTE *srcBase) { +LZ4_FORCE_INLINE const BYTE* +LZ4_getPosition(const BYTE* p, + const void* tableBase, tableType_t tableType, + const BYTE* srcBase) +{ U32 const h = LZ4_hashPosition(p, tableType); return LZ4_getPositionOnHash(h, tableBase, tableType, srcBase); } LZ4_FORCE_INLINE void -LZ4_prepareTable(LZ4_stream_t_internal *const cctx, - const int inputSize, - const tableType_t tableType) { - /* If compression failed during the previous step, then the context - * is marked as dirty, therefore, it has to be fully reset. - */ - if (cctx->dirty) { - DEBUGLOG(5, "LZ4_prepareTable: Full reset for %p", cctx); - MEM_INIT(cctx, 0, sizeof(LZ4_stream_t_internal)); - return; - } - +LZ4_prepareTable(LZ4_stream_t_internal* const cctx, + const int inputSize, + const tableType_t tableType) { /* If the table hasn't been used, it's guaranteed to be zeroed out, and is * therefore safe to use no matter what mode we're in. Otherwise, we figure * out if it's safe to leave as is or whether it needs to be reset. */ - if (cctx->tableType != clearedTable) { + if ((tableType_t)cctx->tableType != clearedTable) { assert(inputSize >= 0); - if (cctx->tableType != tableType - || ((tableType == byU16) && cctx->currentOffset + (unsigned)inputSize >= 0xFFFFU) - || ((tableType == byU32) && cctx->currentOffset > 1 GB) - || tableType == byPtr - || inputSize >= 4 KB) { + if ((tableType_t)cctx->tableType != tableType + || ((tableType == byU16) && cctx->currentOffset + (unsigned)inputSize >= 0xFFFFU) + || ((tableType == byU32) && cctx->currentOffset > 1 GB) + || tableType == byPtr + || inputSize >= 4 KB) + { DEBUGLOG(4, "LZ4_prepareTable: Resetting table in %p", cctx); MEM_INIT(cctx->hashTable, 0, LZ4_HASHTABLESIZE); cctx->currentOffset = 0; - cctx->tableType = clearedTable; + cctx->tableType = (U32)clearedTable; } else { DEBUGLOG(4, "LZ4_prepareTable: Re-use hash table (no reset)"); } @@ -781,28 +819,33 @@ LZ4_prepareTable(LZ4_stream_t_internal *const cctx, } /** LZ4_compress_generic() : - inlined, to ensure branches are decided at compilation time */ -LZ4_FORCE_INLINE int LZ4_compress_generic( - LZ4_stream_t_internal *const cctx, - const char *const source, - char *const dest, - const int inputSize, - int *inputConsumed, /* only written when outputDirective == fillOutput */ - const int maxOutputSize, - const limitedOutput_directive outputDirective, - const tableType_t tableType, - const dict_directive dictDirective, - const dictIssue_directive dictIssue, - const int acceleration) { + * inlined, to ensure branches are decided at compilation time. + * Presumed already validated at this stage: + * - source != NULL + * - inputSize > 0 + */ +LZ4_FORCE_INLINE int LZ4_compress_generic_validated( + LZ4_stream_t_internal* const cctx, + const char* const source, + char* const dest, + const int inputSize, + int *inputConsumed, /* only written when outputDirective == fillOutput */ + const int maxOutputSize, + const limitedOutput_directive outputDirective, + const tableType_t tableType, + const dict_directive dictDirective, + const dictIssue_directive dictIssue, + const int acceleration) +{ int result; - const BYTE *ip = (const BYTE *) source; + const BYTE* ip = (const BYTE*) source; U32 const startIndex = cctx->currentOffset; - const BYTE *base = (const BYTE *) source - startIndex; - const BYTE *lowLimit; + const BYTE* base = (const BYTE*) source - startIndex; + const BYTE* lowLimit; - const LZ4_stream_t_internal *dictCtx = (const LZ4_stream_t_internal *) cctx->dictCtx; - const BYTE *const dictionary = + const LZ4_stream_t_internal* dictCtx = (const LZ4_stream_t_internal*) cctx->dictCtx; + const BYTE* const dictionary = dictDirective == usingDictCtx ? dictCtx->dictionary : cctx->dictionary; const U32 dictSize = dictDirective == usingDictCtx ? dictCtx->dictSize : cctx->dictSize; @@ -810,34 +853,34 @@ LZ4_FORCE_INLINE int LZ4_compress_generic( int const maybe_extMem = (dictDirective == usingExtDict) || (dictDirective == usingDictCtx); U32 const prefixIdxLimit = startIndex - dictSize; /* used when dictDirective == dictSmall */ - const BYTE *const dictEnd = dictionary + dictSize; - const BYTE *anchor = (const BYTE *) source; - const BYTE *const iend = ip + inputSize; - const BYTE *const mflimitPlusOne = iend - MFLIMIT + 1; - const BYTE *const matchlimit = iend - LASTLITERALS; + const BYTE* const dictEnd = dictionary ? dictionary + dictSize : dictionary; + const BYTE* anchor = (const BYTE*) source; + const BYTE* const iend = ip + inputSize; + const BYTE* const mflimitPlusOne = iend - MFLIMIT + 1; + const BYTE* const matchlimit = iend - LASTLITERALS; /* the dictCtx currentOffset is indexed on the start of the dictionary, * while a dictionary in the current context precedes the currentOffset */ - const BYTE *dictBase = (dictDirective == usingDictCtx) ? - dictionary + dictSize - dictCtx->currentOffset : - dictionary + dictSize - startIndex; + const BYTE* dictBase = !dictionary ? NULL : (dictDirective == usingDictCtx) ? + dictionary + dictSize - dictCtx->currentOffset : + dictionary + dictSize - startIndex; - BYTE *op = (BYTE *) dest; - BYTE *const olimit = op + maxOutputSize; + BYTE* op = (BYTE*) dest; + BYTE* const olimit = op + maxOutputSize; U32 offset = 0; U32 forwardH; - DEBUGLOG(5, "LZ4_compress_generic: srcSize=%i, tableType=%u", inputSize, tableType); + DEBUGLOG(5, "LZ4_compress_generic_validated: srcSize=%i, tableType=%u", inputSize, tableType); + assert(ip != NULL); /* If init conditions are not met, we don't have to mark stream * as having dirty context, since no action was taken yet */ if (outputDirective == fillOutput && maxOutputSize < 1) { return 0; } /* Impossible to store anything */ - if ((U32)inputSize > (U32)LZ4_MAX_INPUT_SIZE) { return 0; } /* Unsupported inputSize, too large (or negative) */ - if ((tableType == byU16) && (inputSize >= LZ4_64Klimit)) { return 0; } /* Size too large (not within 64K limit) */ - if (tableType == byPtr) assert(dictDirective == noDict); /* only supported use case with byPtr */ + if ((tableType == byU16) && (inputSize>=LZ4_64Klimit)) { return 0; } /* Size too large (not within 64K limit) */ + if (tableType==byPtr) assert(dictDirective==noDict); /* only supported use case with byPtr */ assert(acceleration >= 1); - lowLimit = (const BYTE *)source - (dictDirective == withPrefix64k ? dictSize : 0); + lowLimit = (const BYTE*)source - (dictDirective == withPrefix64k ? dictSize : 0); /* Update context state */ if (dictDirective == usingDictCtx) { @@ -849,24 +892,23 @@ LZ4_FORCE_INLINE int LZ4_compress_generic( cctx->dictSize += (U32)inputSize; } cctx->currentOffset += (U32)inputSize; - cctx->tableType = (U16)tableType; + cctx->tableType = (U32)tableType; - if (inputSize < LZ4_minLength) goto _last_literals; /* Input too small, no compression (all literals) */ + if (inputSizehashTable, tableType, base); - ip++; - forwardH = LZ4_hashPosition(ip, tableType); + ip++; forwardH = LZ4_hashPosition(ip, tableType); /* Main Loop */ - for (; ;) { - const BYTE *match; - BYTE *token; - const BYTE *filledIp; + for ( ; ; ) { + const BYTE* match; + BYTE* token; + const BYTE* filledIp; /* Find a match */ if (tableType == byPtr) { - const BYTE *forwardIp = ip; + const BYTE* forwardIp = ip; int step = 1; int searchMatchNb = acceleration << LZ4_skipTrigger; do { @@ -882,12 +924,12 @@ LZ4_FORCE_INLINE int LZ4_compress_generic( forwardH = LZ4_hashPosition(forwardIp, tableType); LZ4_putPositionOnHash(ip, h, cctx->hashTable, tableType, base); - } while ((match + LZ4_DISTANCE_MAX < ip) - || (LZ4_read32(match) != LZ4_read32(ip))); + } while ( (match+LZ4_DISTANCE_MAX < ip) + || (LZ4_read32(match) != LZ4_read32(ip)) ); } else { /* byU32, byU16 */ - const BYTE *forwardIp = ip; + const BYTE* forwardIp = ip; int step = 1; int searchMatchNb = acceleration << LZ4_skipTrigger; do { @@ -913,9 +955,9 @@ LZ4_FORCE_INLINE int LZ4_compress_generic( lowLimit = dictionary; } else { match = base + matchIndex; - lowLimit = (const BYTE *)source; + lowLimit = (const BYTE*)source; } - } else if (dictDirective == usingExtDict) { + } else if (dictDirective==usingExtDict) { if (matchIndex < startIndex) { DEBUGLOG(7, "extDict candidate: matchIndex=%5u < startIndex=%5u", matchIndex, startIndex); assert(startIndex - matchIndex >= MINMATCH); @@ -923,7 +965,7 @@ LZ4_FORCE_INLINE int LZ4_compress_generic( lowLimit = dictionary; } else { match = base + matchIndex; - lowLimit = (const BYTE *)source; + lowLimit = (const BYTE*)source; } } else { /* single continuous memory segment */ match = base + matchIndex; @@ -934,8 +976,8 @@ LZ4_FORCE_INLINE int LZ4_compress_generic( DEBUGLOG(7, "candidate at pos=%u (offset=%u \n", matchIndex, current - matchIndex); if ((dictIssue == dictSmall) && (matchIndex < prefixIdxLimit)) { continue; } /* match outside of valid area */ assert(matchIndex < current); - if (((tableType != byU16) || (LZ4_DISTANCE_MAX < LZ4_DISTANCE_ABSOLUTE_MAX)) - && (matchIndex + LZ4_DISTANCE_MAX < current)) { + if ( ((tableType != byU16) || (LZ4_DISTANCE_MAX < LZ4_DISTANCE_ABSOLUTE_MAX)) + && (matchIndex+LZ4_DISTANCE_MAX < current)) { continue; } /* too far */ assert((current - matchIndex) <= LZ4_DISTANCE_MAX); /* match now expected within distance */ @@ -945,38 +987,38 @@ LZ4_FORCE_INLINE int LZ4_compress_generic( break; /* match found */ } - } while (1); + } while(1); } /* Catch up */ filledIp = ip; - while (((ip > anchor) & (match > lowLimit)) && (unlikely(ip[-1] == match[-1]))) { ip--; match--; } + while (((ip>anchor) & (match > lowLimit)) && (unlikely(ip[-1]==match[-1]))) { ip--; match--; } /* Encode Literals */ - { - unsigned const litLength = (unsigned)(ip - anchor); + { unsigned const litLength = (unsigned)(ip - anchor); token = op++; if ((outputDirective == limitedOutput) && /* Check output buffer overflow */ - (unlikely(op + litLength + (2 + 1 + LASTLITERALS) + (litLength / 255) > olimit))) { + (unlikely(op + litLength + (2 + 1 + LASTLITERALS) + (litLength/255) > olimit)) ) { return 0; /* cannot compress within `dst` budget. Stored indexes in hash table are nonetheless fine */ } if ((outputDirective == fillOutput) && - (unlikely(op + (litLength + 240) / 255 /* litlen */ + litLength /* literals */ + 2 /* offset */ + 1 /* token */ + MFLIMIT - MINMATCH /* min last literals so last match is <= end - MFLIMIT */ > olimit))) { + (unlikely(op + (litLength+240)/255 /* litlen */ + litLength /* literals */ + 2 /* offset */ + 1 /* token */ + MFLIMIT - MINMATCH /* min last literals so last match is <= end - MFLIMIT */ > olimit))) { op--; goto _last_literals; } if (litLength >= RUN_MASK) { int len = (int)(litLength - RUN_MASK); - *token = (RUN_MASK << ML_BITS); - for (; len >= 255 ; len -= 255) * op++ = 255; + *token = (RUN_MASK<= 255 ; len-=255) *op++ = 255; *op++ = (BYTE)len; - } else *token = (BYTE)(litLength << ML_BITS); + } + else *token = (BYTE)(litLength< olimit)) { + (op + 2 /* offset */ + 1 /* token */ + MFLIMIT - MINMATCH /* min last literals so last match is <= end - MFLIMIT */ > olimit)) { /* the match was too close to the end, rewind and go to last literals */ op = token; goto _last_literals; @@ -997,42 +1039,39 @@ _next_match: /* Encode Offset */ if (maybe_extMem) { /* static test */ - DEBUGLOG(6, " with offset=%u (ext if > %i)", offset, (int)(ip - (const BYTE *)source)); + DEBUGLOG(6, " with offset=%u (ext if > %i)", offset, (int)(ip - (const BYTE*)source)); assert(offset <= LZ4_DISTANCE_MAX && offset > 0); - LZ4_writeLE16(op, (U16)offset); - op += 2; + LZ4_writeLE16(op, (U16)offset); op+=2; } else { DEBUGLOG(6, " with offset=%u (same segment)", (U32)(ip - match)); - assert(ip - match <= LZ4_DISTANCE_MAX); - LZ4_writeLE16(op, (U16)(ip - match)); - op += 2; + assert(ip-match <= LZ4_DISTANCE_MAX); + LZ4_writeLE16(op, (U16)(ip - match)); op+=2; } /* Encode MatchLength */ - { - unsigned matchCode; + { unsigned matchCode; - if ((dictDirective == usingExtDict || dictDirective == usingDictCtx) - && (lowLimit == dictionary) /* match within extDict */) { - const BYTE *limit = ip + (dictEnd - match); + if ( (dictDirective==usingExtDict || dictDirective==usingDictCtx) + && (lowLimit==dictionary) /* match within extDict */ ) { + const BYTE* limit = ip + (dictEnd-match); assert(dictEnd > match); if (limit > matchlimit) limit = matchlimit; - matchCode = LZ4_count(ip + MINMATCH, match + MINMATCH, limit); + matchCode = LZ4_count(ip+MINMATCH, match+MINMATCH, limit); ip += (size_t)matchCode + MINMATCH; - if (ip == limit) { - unsigned const more = LZ4_count(limit, (const BYTE *)source, matchlimit); + if (ip==limit) { + unsigned const more = LZ4_count(limit, (const BYTE*)source, matchlimit); matchCode += more; ip += more; } - DEBUGLOG(6, " with matchLength=%u starting in extDict", matchCode + MINMATCH); + DEBUGLOG(6, " with matchLength=%u starting in extDict", matchCode+MINMATCH); } else { - matchCode = LZ4_count(ip + MINMATCH, match + MINMATCH, matchlimit); + matchCode = LZ4_count(ip+MINMATCH, match+MINMATCH, matchlimit); ip += (size_t)matchCode + MINMATCH; - DEBUGLOG(6, " with matchLength=%u", matchCode + MINMATCH); + DEBUGLOG(6, " with matchLength=%u", matchCode+MINMATCH); } if ((outputDirective) && /* Check output buffer overflow */ - (unlikely(op + (1 + LASTLITERALS) + (matchCode + 240) / 255 > olimit))) { + (unlikely(op + (1 + LASTLITERALS) + (matchCode+240)/255 > olimit)) ) { if (outputDirective == fillOutput) { /* Match description too long : reduce it */ U32 newMatchCode = 15 /* in token */ - 1 /* to avoid needing a zero byte */ + ((U32)(olimit - op) - 1 - LASTLITERALS) * 255; @@ -1045,7 +1084,7 @@ _next_match: * a problem if we reuse the hash table. So we have to remove these positions * from the hash table. */ - const BYTE *ptr; + const BYTE* ptr; DEBUGLOG(5, "Clearing %u positions", (U32)(filledIp - ip)); for (ptr = ip; ptr <= filledIp; ++ptr) { U32 const h = LZ4_hashPosition(ptr, tableType); @@ -1061,10 +1100,10 @@ _next_match: *token += ML_MASK; matchCode -= ML_MASK; LZ4_write32(op, 0xFFFFFFFF); - while (matchCode >= 4 * 255) { - op += 4; + while (matchCode >= 4*255) { + op+=4; LZ4_write32(op, 0xFFFFFFFF); - matchCode -= 4 * 255; + matchCode -= 4*255; } op += matchCode / 255; *op++ = (BYTE)(matchCode % 255); @@ -1080,21 +1119,21 @@ _next_match: if (ip >= mflimitPlusOne) break; /* Fill table */ - LZ4_putPosition(ip - 2, cctx->hashTable, tableType, base); + LZ4_putPosition(ip-2, cctx->hashTable, tableType, base); /* Test next position */ if (tableType == byPtr) { match = LZ4_getPosition(ip, cctx->hashTable, tableType, base); LZ4_putPosition(ip, cctx->hashTable, tableType, base); - if ((match + LZ4_DISTANCE_MAX >= ip) - && (LZ4_read32(match) == LZ4_read32(ip))) - { token = op++; *token = 0; goto _next_match; } + if ( (match+LZ4_DISTANCE_MAX >= ip) + && (LZ4_read32(match) == LZ4_read32(ip)) ) + { token=op++; *token=0; goto _next_match; } } else { /* byU32, byU16 */ U32 const h = LZ4_hashPosition(ip, tableType); - U32 const current = (U32)(ip - base); + U32 const current = (U32)(ip-base); U32 matchIndex = LZ4_getIndexOnHash(h, cctx->hashTable, tableType); assert(matchIndex < current); if (dictDirective == usingDictCtx) { @@ -1106,29 +1145,29 @@ _next_match: matchIndex += dictDelta; } else { match = base + matchIndex; - lowLimit = (const BYTE *)source; /* required for match length counter */ + lowLimit = (const BYTE*)source; /* required for match length counter */ } - } else if (dictDirective == usingExtDict) { + } else if (dictDirective==usingExtDict) { if (matchIndex < startIndex) { match = dictBase + matchIndex; lowLimit = dictionary; /* required for match length counter */ } else { match = base + matchIndex; - lowLimit = (const BYTE *)source; /* required for match length counter */ + lowLimit = (const BYTE*)source; /* required for match length counter */ } } else { /* single memory segment */ match = base + matchIndex; } LZ4_putIndexOnHash(current, h, cctx->hashTable, tableType); assert(matchIndex < current); - if (((dictIssue == dictSmall) ? (matchIndex >= prefixIdxLimit) : 1) - && (((tableType == byU16) && (LZ4_DISTANCE_MAX == LZ4_DISTANCE_ABSOLUTE_MAX)) ? 1 : (matchIndex + LZ4_DISTANCE_MAX >= current)) - && (LZ4_read32(match) == LZ4_read32(ip))) { - token = op++; - *token = 0; + if ( ((dictIssue==dictSmall) ? (matchIndex >= prefixIdxLimit) : 1) + && (((tableType==byU16) && (LZ4_DISTANCE_MAX == LZ4_DISTANCE_ABSOLUTE_MAX)) ? 1 : (matchIndex+LZ4_DISTANCE_MAX >= current)) + && (LZ4_read32(match) == LZ4_read32(ip)) ) { + token=op++; + *token=0; if (maybe_extMem) offset = current - matchIndex; DEBUGLOG(6, "seq.start:%i, literals=%u, match.start:%i", - (int)(anchor - (const BYTE *)source), 0, (int)(ip - (const BYTE *)source)); + (int)(anchor-(const BYTE*)source), 0, (int)(ip-(const BYTE*)source)); goto _next_match; } } @@ -1140,15 +1179,14 @@ _next_match: _last_literals: /* Encode Last Literals */ - { - size_t lastRun = (size_t)(iend - anchor); - if ((outputDirective) && /* Check output buffer overflow */ - (op + lastRun + 1 + ((lastRun + 255 - RUN_MASK) / 255) > olimit)) { + { size_t lastRun = (size_t)(iend - anchor); + if ( (outputDirective) && /* Check output buffer overflow */ + (op + lastRun + 1 + ((lastRun+255-RUN_MASK)/255) > olimit)) { if (outputDirective == fillOutput) { /* adapt lastRun to fill 'dst' */ assert(olimit >= op); - lastRun = (size_t)(olimit - op) - 1; - lastRun -= (lastRun + 240) / 255; + lastRun = (size_t)(olimit-op) - 1; + lastRun -= (lastRun+240)/255; } else { assert(outputDirective == limitedOutput); return 0; /* cannot compress within `dst` budget. Stored indexes in hash table are nonetheless fine */ @@ -1157,42 +1195,85 @@ _last_literals: if (lastRun >= RUN_MASK) { size_t accumulator = lastRun - RUN_MASK; *op++ = RUN_MASK << ML_BITS; - for (; accumulator >= 255 ; accumulator -= 255) * op++ = 255; + for(; accumulator >= 255 ; accumulator-=255) *op++ = 255; *op++ = (BYTE) accumulator; } else { - *op++ = (BYTE)(lastRun << ML_BITS); + *op++ = (BYTE)(lastRun< 0); + DEBUGLOG(5, "LZ4_compress_generic: compressed %i bytes into %i bytes", inputSize, result); return result; } +/** LZ4_compress_generic() : + * inlined, to ensure branches are decided at compilation time; + * takes care of src == (NULL, 0) + * and forward the rest to LZ4_compress_generic_validated */ +LZ4_FORCE_INLINE int LZ4_compress_generic( + LZ4_stream_t_internal* const cctx, + const char* const src, + char* const dst, + const int srcSize, + int *inputConsumed, /* only written when outputDirective == fillOutput */ + const int dstCapacity, + const limitedOutput_directive outputDirective, + const tableType_t tableType, + const dict_directive dictDirective, + const dictIssue_directive dictIssue, + const int acceleration) +{ + DEBUGLOG(5, "LZ4_compress_generic: srcSize=%i, dstCapacity=%i", + srcSize, dstCapacity); -int LZ4_compress_fast_extState(void *state, const char *source, char *dest, int inputSize, int maxOutputSize, int acceleration) { - LZ4_stream_t_internal *const ctx = & LZ4_initStream(state, sizeof(LZ4_stream_t)) -> internal_donotuse; + if ((U32)srcSize > (U32)LZ4_MAX_INPUT_SIZE) { return 0; } /* Unsupported srcSize, too large (or negative) */ + if (srcSize == 0) { /* src == NULL supported if srcSize == 0 */ + if (outputDirective != notLimited && dstCapacity <= 0) return 0; /* no output, can't write anything */ + DEBUGLOG(5, "Generating an empty block"); + assert(outputDirective == notLimited || dstCapacity >= 1); + assert(dst != NULL); + dst[0] = 0; + if (outputDirective == fillOutput) { + assert (inputConsumed != NULL); + *inputConsumed = 0; + } + return 1; + } + assert(src != NULL); + + return LZ4_compress_generic_validated(cctx, src, dst, srcSize, + inputConsumed, /* only written into if outputDirective == fillOutput */ + dstCapacity, outputDirective, + tableType, dictDirective, dictIssue, acceleration); +} + + +int LZ4_compress_fast_extState(void* state, const char* source, char* dest, int inputSize, int maxOutputSize, int acceleration) +{ + LZ4_stream_t_internal* const ctx = & LZ4_initStream(state, sizeof(LZ4_stream_t)) -> internal_donotuse; assert(ctx != NULL); - if (acceleration < 1) acceleration = ACCELERATION_DEFAULT; + if (acceleration < 1) acceleration = LZ4_ACCELERATION_DEFAULT; + if (acceleration > LZ4_ACCELERATION_MAX) acceleration = LZ4_ACCELERATION_MAX; if (maxOutputSize >= LZ4_compressBound(inputSize)) { if (inputSize < LZ4_64Klimit) { return LZ4_compress_generic(ctx, source, dest, inputSize, NULL, 0, notLimited, byU16, noDict, noDictIssue, acceleration); } else { - const tableType_t tableType = ((sizeof(void *) == 4) && ((uptrval)source > LZ4_DISTANCE_MAX)) ? byPtr : byU32; + const tableType_t tableType = ((sizeof(void*)==4) && ((uptrval)source > LZ4_DISTANCE_MAX)) ? byPtr : byU32; return LZ4_compress_generic(ctx, source, dest, inputSize, NULL, 0, notLimited, tableType, noDict, noDictIssue, acceleration); } } else { if (inputSize < LZ4_64Klimit) { return LZ4_compress_generic(ctx, source, dest, inputSize, NULL, maxOutputSize, limitedOutput, byU16, noDict, noDictIssue, acceleration); } else { - const tableType_t tableType = ((sizeof(void *) == 4) && ((uptrval)source > LZ4_DISTANCE_MAX)) ? byPtr : byU32; + const tableType_t tableType = ((sizeof(void*)==4) && ((uptrval)source > LZ4_DISTANCE_MAX)) ? byPtr : byU32; return LZ4_compress_generic(ctx, source, dest, inputSize, NULL, maxOutputSize, limitedOutput, tableType, noDict, noDictIssue, acceleration); } } @@ -1207,9 +1288,11 @@ int LZ4_compress_fast_extState(void *state, const char *source, char *dest, int * (see comment in lz4.h on LZ4_resetStream_fast() for a definition of * "correctly initialized"). */ -int LZ4_compress_fast_extState_fastReset(void *state, const char *src, char *dst, int srcSize, int dstCapacity, int acceleration) { - LZ4_stream_t_internal *ctx = &((LZ4_stream_t *)state)->internal_donotuse; - if (acceleration < 1) acceleration = ACCELERATION_DEFAULT; +int LZ4_compress_fast_extState_fastReset(void* state, const char* src, char* dst, int srcSize, int dstCapacity, int acceleration) +{ + LZ4_stream_t_internal* ctx = &((LZ4_stream_t*)state)->internal_donotuse; + if (acceleration < 1) acceleration = LZ4_ACCELERATION_DEFAULT; + if (acceleration > LZ4_ACCELERATION_MAX) acceleration = LZ4_ACCELERATION_MAX; if (dstCapacity >= LZ4_compressBound(srcSize)) { if (srcSize < LZ4_64Klimit) { @@ -1221,7 +1304,7 @@ int LZ4_compress_fast_extState_fastReset(void *state, const char *src, char *dst return LZ4_compress_generic(ctx, src, dst, srcSize, NULL, 0, notLimited, tableType, noDict, noDictIssue, acceleration); } } else { - const tableType_t tableType = ((sizeof(void *) == 4) && ((uptrval)src > LZ4_DISTANCE_MAX)) ? byPtr : byU32; + const tableType_t tableType = ((sizeof(void*)==4) && ((uptrval)src > LZ4_DISTANCE_MAX)) ? byPtr : byU32; LZ4_prepareTable(ctx, srcSize, tableType); return LZ4_compress_generic(ctx, src, dst, srcSize, NULL, 0, notLimited, tableType, noDict, noDictIssue, acceleration); } @@ -1235,7 +1318,7 @@ int LZ4_compress_fast_extState_fastReset(void *state, const char *src, char *dst return LZ4_compress_generic(ctx, src, dst, srcSize, NULL, dstCapacity, limitedOutput, tableType, noDict, noDictIssue, acceleration); } } else { - const tableType_t tableType = ((sizeof(void *) == 4) && ((uptrval)src > LZ4_DISTANCE_MAX)) ? byPtr : byU32; + const tableType_t tableType = ((sizeof(void*)==4) && ((uptrval)src > LZ4_DISTANCE_MAX)) ? byPtr : byU32; LZ4_prepareTable(ctx, srcSize, tableType); return LZ4_compress_generic(ctx, src, dst, srcSize, NULL, dstCapacity, limitedOutput, tableType, noDict, noDictIssue, acceleration); } @@ -1243,14 +1326,15 @@ int LZ4_compress_fast_extState_fastReset(void *state, const char *src, char *dst } -int LZ4_compress_fast(const char *source, char *dest, int inputSize, int maxOutputSize, int acceleration) { +int LZ4_compress_fast(const char* source, char* dest, int inputSize, int maxOutputSize, int acceleration) +{ int result; #if (LZ4_HEAPMODE) - LZ4_stream_t *ctxPtr = ALLOC(sizeof(LZ4_stream_t)); /* malloc-calloc always properly aligned */ + LZ4_stream_t* ctxPtr = ALLOC(sizeof(LZ4_stream_t)); /* malloc-calloc always properly aligned */ if (ctxPtr == NULL) return 0; #else LZ4_stream_t ctx; - LZ4_stream_t *const ctxPtr = &ctx; + LZ4_stream_t* const ctxPtr = &ctx; #endif result = LZ4_compress_fast_extState(ctxPtr, source, dest, inputSize, maxOutputSize, acceleration); @@ -1261,34 +1345,19 @@ int LZ4_compress_fast(const char *source, char *dest, int inputSize, int maxOutp } -int LZ4_compress_default(const char *src, char *dst, int srcSize, int maxOutputSize) { +int LZ4_compress_default(const char* src, char* dst, int srcSize, int maxOutputSize) +{ return LZ4_compress_fast(src, dst, srcSize, maxOutputSize, 1); } -int LZ4_compress_fast_force(const char *src, char *dst, int srcSize, int dstCapacity, int acceleration); -/* hidden debug function */ -/* strangely enough, gcc generates faster code when this function is uncommented, even if unused */ -int LZ4_compress_fast_force(const char *src, char *dst, int srcSize, int dstCapacity, int acceleration) { - LZ4_stream_t ctx; - LZ4_initStream(&ctx, sizeof(ctx)); - - if (srcSize < LZ4_64Klimit) { - return LZ4_compress_generic(&ctx.internal_donotuse, src, dst, srcSize, NULL, dstCapacity, limitedOutput, byU16, noDict, noDictIssue, acceleration); - } else { - tableType_t const addrMode = (sizeof(void *) > 4) ? byU32 : byPtr; - return LZ4_compress_generic(&ctx.internal_donotuse, src, dst, srcSize, NULL, dstCapacity, limitedOutput, addrMode, noDict, noDictIssue, acceleration); - } -} - - /* Note!: This function leaves the stream in an unclean/broken state! * It is not safe to subsequently use the same state with a _fastReset() or * _continue() call without resetting it. */ -static int LZ4_compress_destSize_extState(LZ4_stream_t *state, const char *src, char *dst, int *srcSizePtr, int targetDstSize) { - void *const s = LZ4_initStream(state, sizeof(*state)); - assert(s != NULL); - (void)s; +static int LZ4_compress_destSize_extState (LZ4_stream_t* state, const char* src, char* dst, int* srcSizePtr, int targetDstSize) +{ + void* const s = LZ4_initStream(state, sizeof (*state)); + assert(s != NULL); (void)s; if (targetDstSize >= LZ4_compressBound(*srcSizePtr)) { /* compression success is guaranteed */ return LZ4_compress_fast_extState(state, src, dst, *srcSizePtr, targetDstSize, 1); @@ -1296,20 +1365,20 @@ static int LZ4_compress_destSize_extState(LZ4_stream_t *state, const char *src, if (*srcSizePtr < LZ4_64Klimit) { return LZ4_compress_generic(&state->internal_donotuse, src, dst, *srcSizePtr, srcSizePtr, targetDstSize, fillOutput, byU16, noDict, noDictIssue, 1); } else { - tableType_t const addrMode = ((sizeof(void *) == 4) && ((uptrval)src > LZ4_DISTANCE_MAX)) ? byPtr : byU32; + tableType_t const addrMode = ((sizeof(void*)==4) && ((uptrval)src > LZ4_DISTANCE_MAX)) ? byPtr : byU32; return LZ4_compress_generic(&state->internal_donotuse, src, dst, *srcSizePtr, srcSizePtr, targetDstSize, fillOutput, addrMode, noDict, noDictIssue, 1); - } - } + } } } -int LZ4_compress_destSize(const char *src, char *dst, int *srcSizePtr, int targetDstSize) { +int LZ4_compress_destSize(const char* src, char* dst, int* srcSizePtr, int targetDstSize) +{ #if (LZ4_HEAPMODE) - LZ4_stream_t *ctx = (LZ4_stream_t *)ALLOC(sizeof(LZ4_stream_t)); /* malloc-calloc always properly aligned */ + LZ4_stream_t* ctx = (LZ4_stream_t*)ALLOC(sizeof(LZ4_stream_t)); /* malloc-calloc always properly aligned */ if (ctx == NULL) return 0; #else LZ4_stream_t ctxBody; - LZ4_stream_t *ctx = &ctxBody; + LZ4_stream_t* ctx = &ctxBody; #endif int result = LZ4_compress_destSize_extState(ctx, src, dst, srcSizePtr, targetDstSize); @@ -1326,8 +1395,9 @@ int LZ4_compress_destSize(const char *src, char *dst, int *srcSizePtr, int targe * Streaming functions ********************************/ -LZ4_stream_t *LZ4_createStream(void) { - LZ4_stream_t *const lz4s = (LZ4_stream_t *)ALLOC(sizeof(LZ4_stream_t)); +LZ4_stream_t* LZ4_createStream(void) +{ + LZ4_stream_t* const lz4s = (LZ4_stream_t*)ALLOC(sizeof(LZ4_stream_t)); LZ4_STATIC_ASSERT(LZ4_STREAMSIZE >= sizeof(LZ4_stream_t_internal)); /* A compilation error here means LZ4_STREAMSIZE is not large enough */ DEBUGLOG(4, "LZ4_createStream %p", lz4s); if (lz4s == NULL) return NULL; @@ -1338,13 +1408,15 @@ LZ4_stream_t *LZ4_createStream(void) { #ifndef _MSC_VER /* for some reason, Visual fails the aligment test on 32-bit x86 : it reports an aligment of 8-bytes, while actually aligning LZ4_stream_t on 4 bytes. */ -static size_t LZ4_stream_t_alignment(void) { - struct { char c; LZ4_stream_t t; } t_a; - return sizeof(t_a) - sizeof(t_a.t); +static size_t LZ4_stream_t_alignment(void) +{ + typedef struct { char c; LZ4_stream_t t; } t_a; + return sizeof(t_a) - sizeof(LZ4_stream_t); } #endif -LZ4_stream_t *LZ4_initStream(void *buffer, size_t size) { +LZ4_stream_t* LZ4_initStream (void* buffer, size_t size) +{ DEBUGLOG(5, "LZ4_initStream"); if (buffer == NULL) { return NULL; } if (size < sizeof(LZ4_stream_t)) { return NULL; } @@ -1354,21 +1426,23 @@ LZ4_stream_t *LZ4_initStream(void *buffer, size_t size) { if (((size_t)buffer) & (LZ4_stream_t_alignment() - 1)) { return NULL; } /* alignment check */ #endif MEM_INIT(buffer, 0, sizeof(LZ4_stream_t)); - return (LZ4_stream_t *)buffer; + return (LZ4_stream_t*)buffer; } /* resetStream is now deprecated, * prefer initStream() which is more general */ -void LZ4_resetStream(LZ4_stream_t *LZ4_stream) { +void LZ4_resetStream (LZ4_stream_t* LZ4_stream) +{ DEBUGLOG(5, "LZ4_resetStream (ctx:%p)", LZ4_stream); MEM_INIT(LZ4_stream, 0, sizeof(LZ4_stream_t)); } -void LZ4_resetStream_fast(LZ4_stream_t *ctx) { +void LZ4_resetStream_fast(LZ4_stream_t* ctx) { LZ4_prepareTable(&(ctx->internal_donotuse), 0, byU32); } -int LZ4_freeStream(LZ4_stream_t *LZ4_stream) { +int LZ4_freeStream (LZ4_stream_t* LZ4_stream) +{ if (!LZ4_stream) return 0; /* support free on NULL */ DEBUGLOG(5, "LZ4_freeStream %p", LZ4_stream); FREEMEM(LZ4_stream); @@ -1377,12 +1451,13 @@ int LZ4_freeStream(LZ4_stream_t *LZ4_stream) { #define HASH_UNIT sizeof(reg_t) -int LZ4_loadDict(LZ4_stream_t *LZ4_dict, const char *dictionary, int dictSize) { - LZ4_stream_t_internal *dict = &LZ4_dict->internal_donotuse; +int LZ4_loadDict (LZ4_stream_t* LZ4_dict, const char* dictionary, int dictSize) +{ + LZ4_stream_t_internal* dict = &LZ4_dict->internal_donotuse; const tableType_t tableType = byU32; - const BYTE *p = (const BYTE *)dictionary; - const BYTE *const dictEnd = p + dictSize; - const BYTE *base; + const BYTE* p = (const BYTE*)dictionary; + const BYTE* const dictEnd = p + dictSize; + const BYTE* base; DEBUGLOG(4, "LZ4_loadDict (%i bytes from %p into %p)", dictSize, dictionary, LZ4_dict); @@ -1408,30 +1483,24 @@ int LZ4_loadDict(LZ4_stream_t *LZ4_dict, const char *dictionary, int dictSize) { base = dictEnd - dict->currentOffset; dict->dictionary = p; dict->dictSize = (U32)(dictEnd - p); - dict->tableType = tableType; + dict->tableType = (U32)tableType; - while (p <= dictEnd - HASH_UNIT) { + while (p <= dictEnd-HASH_UNIT) { LZ4_putPosition(p, dict->hashTable, tableType, base); - p += 3; + p+=3; } return (int)dict->dictSize; } -void LZ4_attach_dictionary(LZ4_stream_t *workingStream, const LZ4_stream_t *dictionaryStream) { - const LZ4_stream_t_internal *dictCtx = dictionaryStream == NULL ? NULL : - &(dictionaryStream->internal_donotuse); +void LZ4_attach_dictionary(LZ4_stream_t* workingStream, const LZ4_stream_t* dictionaryStream) { + const LZ4_stream_t_internal* dictCtx = dictionaryStream == NULL ? NULL : + &(dictionaryStream->internal_donotuse); DEBUGLOG(4, "LZ4_attach_dictionary (%p, %p, size %u)", workingStream, dictionaryStream, dictCtx != NULL ? dictCtx->dictSize : 0); - /* Calling LZ4_resetStream_fast() here makes sure that changes will not be - * erased by subsequent calls to LZ4_resetStream_fast() in case stream was - * marked as having dirty context, e.g. requiring full reset. - */ - LZ4_resetStream_fast(workingStream); - if (dictCtx != NULL) { /* If the current offset is zero, we will never look in the * external dictionary context, since there is no value a table @@ -1452,16 +1521,17 @@ void LZ4_attach_dictionary(LZ4_stream_t *workingStream, const LZ4_stream_t *dict } -static void LZ4_renormDictT(LZ4_stream_t_internal *LZ4_dict, int nextSize) { +static void LZ4_renormDictT(LZ4_stream_t_internal* LZ4_dict, int nextSize) +{ assert(nextSize >= 0); if (LZ4_dict->currentOffset + (unsigned)nextSize > 0x80000000) { /* potential ptrdiff_t overflow (32-bits mode) */ /* rescale hash table */ U32 const delta = LZ4_dict->currentOffset - 64 KB; - const BYTE *dictEnd = LZ4_dict->dictionary + LZ4_dict->dictSize; + const BYTE* dictEnd = LZ4_dict->dictionary + LZ4_dict->dictSize; int i; DEBUGLOG(4, "LZ4_renormDictT"); - for (i = 0; i < LZ4_HASH_SIZE_U32; i++) { - if (LZ4_dict->hashTable[i] < delta) LZ4_dict->hashTable[i] = 0; + for (i=0; ihashTable[i] < delta) LZ4_dict->hashTable[i]=0; else LZ4_dict->hashTable[i] -= delta; } LZ4_dict->currentOffset = 64 KB; @@ -1471,32 +1541,32 @@ static void LZ4_renormDictT(LZ4_stream_t_internal *LZ4_dict, int nextSize) { } -int LZ4_compress_fast_continue(LZ4_stream_t *LZ4_stream, - const char *source, char *dest, - int inputSize, int maxOutputSize, - int acceleration) { +int LZ4_compress_fast_continue (LZ4_stream_t* LZ4_stream, + const char* source, char* dest, + int inputSize, int maxOutputSize, + int acceleration) +{ const tableType_t tableType = byU32; - LZ4_stream_t_internal *streamPtr = &LZ4_stream->internal_donotuse; - const BYTE *dictEnd = streamPtr->dictionary + streamPtr->dictSize; + LZ4_stream_t_internal* streamPtr = &LZ4_stream->internal_donotuse; + const BYTE* dictEnd = streamPtr->dictionary + streamPtr->dictSize; DEBUGLOG(5, "LZ4_compress_fast_continue (inputSize=%i)", inputSize); - if (streamPtr->dirty) { return 0; } /* Uninitialized structure detected */ LZ4_renormDictT(streamPtr, inputSize); /* avoid index overflow */ - if (acceleration < 1) acceleration = ACCELERATION_DEFAULT; + if (acceleration < 1) acceleration = LZ4_ACCELERATION_DEFAULT; + if (acceleration > LZ4_ACCELERATION_MAX) acceleration = LZ4_ACCELERATION_MAX; /* invalidate tiny dictionaries */ - if ((streamPtr->dictSize - 1 < 4 - 1) /* intentional underflow */ - && (dictEnd != (const BYTE *)source)) { + if ( (streamPtr->dictSize-1 < 4-1) /* intentional underflow */ + && (dictEnd != (const BYTE*)source) ) { DEBUGLOG(5, "LZ4_compress_fast_continue: dictSize(%u) at addr:%p is too small", streamPtr->dictSize, streamPtr->dictionary); streamPtr->dictSize = 0; - streamPtr->dictionary = (const BYTE *)source; - dictEnd = (const BYTE *)source; + streamPtr->dictionary = (const BYTE*)source; + dictEnd = (const BYTE*)source; } /* Check overlapping input/dictionary space */ - { - const BYTE *sourceEnd = (const BYTE *) source + inputSize; + { const BYTE* sourceEnd = (const BYTE*) source + inputSize; if ((sourceEnd > streamPtr->dictionary) && (sourceEnd < dictEnd)) { streamPtr->dictSize = (U32)(dictEnd - sourceEnd); if (streamPtr->dictSize > 64 KB) streamPtr->dictSize = 64 KB; @@ -1506,7 +1576,7 @@ int LZ4_compress_fast_continue(LZ4_stream_t *LZ4_stream, } /* prefix mode : source data follows dictionary */ - if (dictEnd == (const BYTE *)source) { + if (dictEnd == (const BYTE*)source) { if ((streamPtr->dictSize < 64 KB) && (streamPtr->dictSize < streamPtr->currentOffset)) return LZ4_compress_generic(streamPtr, source, dest, inputSize, NULL, maxOutputSize, limitedOutput, tableType, withPrefix64k, dictSmall, acceleration); else @@ -1514,8 +1584,7 @@ int LZ4_compress_fast_continue(LZ4_stream_t *LZ4_stream, } /* external dictionary mode */ - { - int result; + { int result; if (streamPtr->dictCtx) { /* We depend here on the fact that dictCtx'es (produced by * LZ4_loadDict) guarantee that their tables contain no references @@ -1528,7 +1597,7 @@ int LZ4_compress_fast_continue(LZ4_stream_t *LZ4_stream, * cost to copy the dictionary's tables into the active context, * so that the compression loop is only looking into one table. */ - memcpy(streamPtr, streamPtr->dictCtx, sizeof(LZ4_stream_t)); + LZ4_memcpy(streamPtr, streamPtr->dictCtx, sizeof(LZ4_stream_t)); result = LZ4_compress_generic(streamPtr, source, dest, inputSize, NULL, maxOutputSize, limitedOutput, tableType, usingExtDict, noDictIssue, acceleration); } else { result = LZ4_compress_generic(streamPtr, source, dest, inputSize, NULL, maxOutputSize, limitedOutput, tableType, usingDictCtx, noDictIssue, acceleration); @@ -1540,7 +1609,7 @@ int LZ4_compress_fast_continue(LZ4_stream_t *LZ4_stream, result = LZ4_compress_generic(streamPtr, source, dest, inputSize, NULL, maxOutputSize, limitedOutput, tableType, usingExtDict, noDictIssue, acceleration); } } - streamPtr->dictionary = (const BYTE *)source; + streamPtr->dictionary = (const BYTE*)source; streamPtr->dictSize = (U32)inputSize; return result; } @@ -1548,8 +1617,9 @@ int LZ4_compress_fast_continue(LZ4_stream_t *LZ4_stream, /* Hidden debug function, to force-test external dictionary mode */ -int LZ4_compress_forceExtDict(LZ4_stream_t *LZ4_dict, const char *source, char *dest, int srcSize) { - LZ4_stream_t_internal *streamPtr = &LZ4_dict->internal_donotuse; +int LZ4_compress_forceExtDict (LZ4_stream_t* LZ4_dict, const char* source, char* dest, int srcSize) +{ + LZ4_stream_t_internal* streamPtr = &LZ4_dict->internal_donotuse; int result; LZ4_renormDictT(streamPtr, srcSize); @@ -1560,7 +1630,7 @@ int LZ4_compress_forceExtDict(LZ4_stream_t *LZ4_dict, const char *source, char * result = LZ4_compress_generic(streamPtr, source, dest, srcSize, NULL, 0, notLimited, byU32, usingExtDict, noDictIssue, 1); } - streamPtr->dictionary = (const BYTE *)source; + streamPtr->dictionary = (const BYTE*)source; streamPtr->dictSize = (U32)srcSize; return result; @@ -1574,16 +1644,17 @@ int LZ4_compress_forceExtDict(LZ4_stream_t *LZ4_dict, const char *source, char * * dictionary is immediately usable, you can therefore call LZ4_compress_fast_continue(). * Return : saved dictionary size in bytes (necessarily <= dictSize), or 0 if error. */ -int LZ4_saveDict(LZ4_stream_t *LZ4_dict, char *safeBuffer, int dictSize) { - LZ4_stream_t_internal *const dict = &LZ4_dict->internal_donotuse; - const BYTE *const previousDictEnd = dict->dictionary + dict->dictSize; +int LZ4_saveDict (LZ4_stream_t* LZ4_dict, char* safeBuffer, int dictSize) +{ + LZ4_stream_t_internal* const dict = &LZ4_dict->internal_donotuse; + const BYTE* const previousDictEnd = dict->dictionary + dict->dictSize; if ((U32)dictSize > 64 KB) { dictSize = 64 KB; } /* useless to define a dictionary > 64 KB */ if ((U32)dictSize > dict->dictSize) { dictSize = (int)dict->dictSize; } memmove(safeBuffer, previousDictEnd - dictSize, dictSize); - dict->dictionary = (const BYTE *)safeBuffer; + dict->dictionary = (const BYTE*)safeBuffer; dict->dictSize = (U32)dictSize; return dictSize; @@ -1611,28 +1682,26 @@ typedef enum { decode_full_block = 0, partial_decode = 1 } earlyEnd_directive; */ typedef enum { loop_error = -2, initial_error = -1, ok = 0 } variable_length_error; LZ4_FORCE_INLINE unsigned -read_variable_length(const BYTE **ip, const BYTE *lencheck, int loop_check, int initial_check, variable_length_error *error) { - unsigned length = 0; - unsigned s; - if (initial_check && unlikely((*ip) >= lencheck)) { /* overflow detection */ - *error = initial_error; - return length; - } - do { - s = **ip; - (*ip)++; - length += s; - if (loop_check && unlikely((*ip) >= lencheck)) { /* overflow detection */ - *error = loop_error; - return length; - } - } while (s == 255); - +read_variable_length(const BYTE**ip, const BYTE* lencheck, int loop_check, int initial_check, variable_length_error* error) +{ + U32 length = 0; + U32 s; + if (initial_check && unlikely((*ip) >= lencheck)) { /* overflow detection */ + *error = initial_error; return length; -} + } + do { + s = **ip; + (*ip)++; + length += s; + if (loop_check && unlikely((*ip) >= lencheck)) { /* overflow detection */ + *error = loop_error; + return length; + } + } while (s==255); -int LZ4_decompress_generic(const char *const src, char *const dst, int srcSize, int outputSize, endCondition_directive endOnInput, earlyEnd_directive partialDecoding, - dict_directive dict, const BYTE *const lowPrefix, const BYTE *const dictStart, const size_t dictSize); + return length; +} /*! LZ4_decompress_generic() : * This generic decompression function covers all use cases. @@ -1640,41 +1709,41 @@ int LZ4_decompress_generic(const char *const src, char *const dst, int srcSize, * Note that it is important for performance that this function really get inlined, * in order to remove useless branches during compilation optimization. */ -int +LZ4_FORCE_INLINE int LZ4_decompress_generic( - const char *const src, - char *const dst, - int srcSize, - int outputSize, /* If endOnInput==endOnInputSize, this value is `dstCapacity` */ + const char* const src, + char* const dst, + int srcSize, + int outputSize, /* If endOnInput==endOnInputSize, this value is `dstCapacity` */ - endCondition_directive endOnInput, /* endOnOutputSize, endOnInputSize */ - earlyEnd_directive partialDecoding, /* full, partial */ - dict_directive dict, /* noDict, withPrefix64k, usingExtDict */ - const BYTE *const lowPrefix, /* always <= dst, == dst when no prefix */ - const BYTE *const dictStart, /* only if dict==usingExtDict */ - const size_t dictSize /* note : = 0 if noDict */ -) { + endCondition_directive endOnInput, /* endOnOutputSize, endOnInputSize */ + earlyEnd_directive partialDecoding, /* full, partial */ + dict_directive dict, /* noDict, withPrefix64k, usingExtDict */ + const BYTE* const lowPrefix, /* always <= dst, == dst when no prefix */ + const BYTE* const dictStart, /* only if dict==usingExtDict */ + const size_t dictSize /* note : = 0 if noDict */ + ) +{ if (src == NULL) { return -1; } - { - const BYTE *ip = (const BYTE *) src; - const BYTE *const iend = ip + srcSize; + { const BYTE* ip = (const BYTE*) src; + const BYTE* const iend = ip + srcSize; - BYTE *op = (BYTE *) dst; - BYTE *const oend = op + outputSize; - BYTE *cpy; + BYTE* op = (BYTE*) dst; + BYTE* const oend = op + outputSize; + BYTE* cpy; - const BYTE *const dictEnd = (dictStart == NULL) ? NULL : dictStart + dictSize; + const BYTE* const dictEnd = (dictStart == NULL) ? NULL : dictStart + dictSize; - const int safeDecode = (endOnInput == endOnInputSize); + const int safeDecode = (endOnInput==endOnInputSize); const int checkOffset = ((safeDecode) && (dictSize < (int)(64 KB))); /* Set up the "end" pointers for the shortcut. */ - const BYTE *const shortiend = iend - (endOnInput ? 14 : 8) /*maxLL*/ - 2 /*offset*/; - const BYTE *const shortoend = oend - (endOnInput ? 14 : 8) /*maxLL*/ - 18 /*maxML*/; + const BYTE* const shortiend = iend - (endOnInput ? 14 : 8) /*maxLL*/ - 2 /*offset*/; + const BYTE* const shortoend = oend - (endOnInput ? 14 : 8) /*maxLL*/ - 18 /*maxML*/; - const BYTE *match; + const BYTE* match; size_t offset; unsigned token; size_t length; @@ -1684,15 +1753,15 @@ LZ4_decompress_generic( /* Special cases */ assert(lowPrefix <= op); - if ((endOnInput) && (unlikely(outputSize == 0))) { + if ((endOnInput) && (unlikely(outputSize==0))) { /* Empty output buffer */ if (partialDecoding) return 0; - return ((srcSize == 1) && (*ip == 0)) ? 0 : -1; + return ((srcSize==1) && (*ip==0)) ? 0 : -1; } - if ((!endOnInput) && (unlikely(outputSize == 0))) { return (*ip == 0 ? 1 : -1); } - if ((endOnInput) && unlikely(srcSize == 0)) { return -1; } + if ((!endOnInput) && (unlikely(outputSize==0))) { return (*ip==0 ? 1 : -1); } + if ((endOnInput) && unlikely(srcSize==0)) { return -1; } - /* Currently the fast loop shows a regression on qualcomm arm chips. */ + /* Currently the fast loop shows a regression on qualcomm arm chips. */ #if LZ4_FAST_DEC_LOOP if ((oend - op) < FASTLOOP_SAFE_DISTANCE) { DEBUGLOG(6, "skip fast decode loop"); @@ -1712,45 +1781,42 @@ LZ4_decompress_generic( /* decode literal length */ if (length == RUN_MASK) { variable_length_error error = ok; - length += read_variable_length(&ip, iend - RUN_MASK, endOnInput, endOnInput, &error); + length += read_variable_length(&ip, iend-RUN_MASK, endOnInput, endOnInput, &error); if (error == initial_error) { goto _output_error; } - if ((safeDecode) && unlikely((uptrval)(op) + length < (uptrval)(op))) { goto _output_error; } /* overflow detection */ - if ((safeDecode) && unlikely((uptrval)(ip) + length < (uptrval)(ip))) { goto _output_error; } /* overflow detection */ + if ((safeDecode) && unlikely((uptrval)(op)+length<(uptrval)(op))) { goto _output_error; } /* overflow detection */ + if ((safeDecode) && unlikely((uptrval)(ip)+length<(uptrval)(ip))) { goto _output_error; } /* overflow detection */ /* copy literals */ - cpy = op + length; + cpy = op+length; LZ4_STATIC_ASSERT(MFLIMIT >= WILDCOPYLENGTH); if (endOnInput) { /* LZ4_decompress_safe() */ - if ((cpy > oend - 32) || (ip + length > iend - 32)) { goto safe_literal_copy; } + if ((cpy>oend-32) || (ip+length>iend-32)) { goto safe_literal_copy; } LZ4_wildCopy32(op, ip, cpy); } else { /* LZ4_decompress_fast() */ - if (cpy > oend - 8) { goto safe_literal_copy; } + if (cpy>oend-8) { goto safe_literal_copy; } LZ4_wildCopy8(op, ip, cpy); /* LZ4_decompress_fast() cannot copy more than 8 bytes at a time : * it doesn't know input length, and only relies on end-of-block properties */ } - ip += length; - op = cpy; + ip += length; op = cpy; } else { - cpy = op + length; + cpy = op+length; if (endOnInput) { /* LZ4_decompress_safe() */ DEBUGLOG(7, "copy %u bytes in a 16-bytes stripe", (unsigned)length); /* We don't need to check oend, since we check it once for each loop below */ - if (ip > iend - (16 + 1/*max lit + offset + nextToken*/)) { goto safe_literal_copy; } + if (ip > iend-(16 + 1/*max lit + offset + nextToken*/)) { goto safe_literal_copy; } /* Literals can only be 14, but hope compilers optimize if we copy by a register size */ - memcpy(op, ip, 16); + LZ4_memcpy(op, ip, 16); } else { /* LZ4_decompress_fast() */ /* LZ4_decompress_fast() cannot copy more than 8 bytes at a time : * it doesn't know input length, and relies on end-of-block properties */ - memcpy(op, ip, 8); - if (length > 8) { memcpy(op + 8, ip + 8, 8); } + LZ4_memcpy(op, ip, 8); + if (length > 8) { LZ4_memcpy(op+8, ip+8, 8); } } - ip += length; - op = cpy; + ip += length; op = cpy; } /* get offset */ - offset = LZ4_readLE16(ip); - ip += 2; + offset = LZ4_readLE16(ip); ip+=2; match = op - offset; assert(match <= op); @@ -1758,11 +1824,11 @@ LZ4_decompress_generic( length = token & ML_MASK; if (length == ML_MASK) { - variable_length_error error = ok; - if ((checkOffset) && (unlikely(match + dictSize < lowPrefix))) { goto _output_error; } /* Error : offset outside buffers */ - length += read_variable_length(&ip, iend - LASTLITERALS + 1, endOnInput, 0, &error); - if (error != ok) { goto _output_error; } - if ((safeDecode) && unlikely((uptrval)(op) + length < (uptrval)op)) { goto _output_error; } /* overflow detection */ + variable_length_error error = ok; + if ((checkOffset) && (unlikely(match + dictSize < lowPrefix))) { goto _output_error; } /* Error : offset outside buffers */ + length += read_variable_length(&ip, iend - LASTLITERALS + 1, endOnInput, 0, &error); + if (error != ok) { goto _output_error; } + if ((safeDecode) && unlikely((uptrval)(op)+length<(uptrval)op)) { goto _output_error; } /* overflow detection */ length += MINMATCH; if (op + length >= oend - FASTLOOP_SAFE_DISTANCE) { goto safe_match_copy; @@ -1780,53 +1846,50 @@ LZ4_decompress_generic( assert(match <= op); assert(op + 18 <= oend); - memcpy(op, match, 8); - memcpy(op + 8, match + 8, 8); - memcpy(op + 16, match + 16, 2); + LZ4_memcpy(op, match, 8); + LZ4_memcpy(op+8, match+8, 8); + LZ4_memcpy(op+16, match+16, 2); op += length; continue; - } - } - } + } } } if ((checkOffset) && (unlikely(match + dictSize < lowPrefix))) { goto _output_error; } /* Error : offset outside buffers */ /* match starting within external dictionary */ - if ((dict == usingExtDict) && (match < lowPrefix)) { - if (unlikely(op + length > oend - LASTLITERALS)) { + if ((dict==usingExtDict) && (match < lowPrefix)) { + if (unlikely(op+length > oend-LASTLITERALS)) { if (partialDecoding) { - length = MIN(length, (size_t)(oend - op)); /* reach end of buffer */ + DEBUGLOG(7, "partialDecoding: dictionary match, close to dstEnd"); + length = MIN(length, (size_t)(oend-op)); } else { goto _output_error; /* end-of-block condition violated */ - } - } + } } - if (length <= (size_t)(lowPrefix - match)) { + if (length <= (size_t)(lowPrefix-match)) { /* match fits entirely within external dictionary : just copy */ - memmove(op, dictEnd - (lowPrefix - match), length); + memmove(op, dictEnd - (lowPrefix-match), length); op += length; } else { /* match stretches into both external dictionary and current block */ size_t const copySize = (size_t)(lowPrefix - match); size_t const restSize = length - copySize; - memcpy(op, dictEnd - copySize, copySize); + LZ4_memcpy(op, dictEnd - copySize, copySize); op += copySize; if (restSize > (size_t)(op - lowPrefix)) { /* overlap copy */ - BYTE *const endOfMatch = op + restSize; - const BYTE *copyFrom = lowPrefix; + BYTE* const endOfMatch = op + restSize; + const BYTE* copyFrom = lowPrefix; while (op < endOfMatch) { *op++ = *copyFrom++; } } else { - memcpy(op, lowPrefix, restSize); + LZ4_memcpy(op, lowPrefix, restSize); op += restSize; - } - } + } } continue; } /* copy match within block */ cpy = op + length; - assert((op <= oend) && (oend - op >= 32)); - if (unlikely(offset < 16)) { + assert((op <= oend) && (oend-op >= 32)); + if (unlikely(offset<16)) { LZ4_memcpy_using_offset(op, match, cpy, offset); } else { LZ4_wildCopy32(op, match, cpy); @@ -1834,7 +1897,7 @@ LZ4_decompress_generic( op = cpy; /* wildcopy correction */ } -safe_decode: + safe_decode: #endif /* Main Loop : decode remaining sequences where output < FASTLOOP_SAFE_DISTANCE */ @@ -1853,30 +1916,28 @@ safe_decode: * those 18 bytes earlier, upon entering the shortcut (in other words, * there is a combined check for both stages). */ - if ((endOnInput ? length != RUN_MASK : length <= 8) - /* strictly "less than" on input, to re-enter the loop with at least one byte */ - && likely((endOnInput ? ip < shortiend : 1) & (op <= shortoend))) { + if ( (endOnInput ? length != RUN_MASK : length <= 8) + /* strictly "less than" on input, to re-enter the loop with at least one byte */ + && likely((endOnInput ? ip < shortiend : 1) & (op <= shortoend)) ) { /* Copy the literals */ - memcpy(op, ip, endOnInput ? 16 : 8); - op += length; - ip += length; + LZ4_memcpy(op, ip, endOnInput ? 16 : 8); + op += length; ip += length; /* The second stage: prepare for match copying, decode full info. * If it doesn't work out, the info won't be wasted. */ length = token & ML_MASK; /* match length */ - offset = LZ4_readLE16(ip); - ip += 2; + offset = LZ4_readLE16(ip); ip += 2; match = op - offset; assert(match <= op); /* check overflow */ /* Do not deal with overlapping matches. */ - if ((length != ML_MASK) - && (offset >= 8) - && (dict == withPrefix64k || match >= lowPrefix)) { + if ( (length != ML_MASK) + && (offset >= 8) + && (dict==withPrefix64k || match >= lowPrefix) ) { /* Copy the match. */ - memcpy(op + 0, match + 0, 8); - memcpy(op + 8, match + 8, 8); - memcpy(op + 16, match + 16, 2); + LZ4_memcpy(op + 0, match + 0, 8); + LZ4_memcpy(op + 8, match + 8, 8); + LZ4_memcpy(op +16, match +16, 2); op += length + MINMATCH; /* Both stages worked, load the next token. */ continue; @@ -1890,117 +1951,121 @@ safe_decode: /* decode literal length */ if (length == RUN_MASK) { variable_length_error error = ok; - length += read_variable_length(&ip, iend - RUN_MASK, endOnInput, endOnInput, &error); + length += read_variable_length(&ip, iend-RUN_MASK, endOnInput, endOnInput, &error); if (error == initial_error) { goto _output_error; } - if ((safeDecode) && unlikely((uptrval)(op) + length < (uptrval)(op))) { goto _output_error; } /* overflow detection */ - if ((safeDecode) && unlikely((uptrval)(ip) + length < (uptrval)(ip))) { goto _output_error; } /* overflow detection */ + if ((safeDecode) && unlikely((uptrval)(op)+length<(uptrval)(op))) { goto _output_error; } /* overflow detection */ + if ((safeDecode) && unlikely((uptrval)(ip)+length<(uptrval)(ip))) { goto _output_error; } /* overflow detection */ } /* copy literals */ - cpy = op + length; + cpy = op+length; #if LZ4_FAST_DEC_LOOP -safe_literal_copy: + safe_literal_copy: #endif LZ4_STATIC_ASSERT(MFLIMIT >= WILDCOPYLENGTH); - if (((endOnInput) && ((cpy > oend - MFLIMIT) || (ip + length > iend - (2 + 1 + LASTLITERALS)))) - || ((!endOnInput) && (cpy > oend - WILDCOPYLENGTH))) { + if ( ((endOnInput) && ((cpy>oend-MFLIMIT) || (ip+length>iend-(2+1+LASTLITERALS))) ) + || ((!endOnInput) && (cpy>oend-WILDCOPYLENGTH)) ) + { /* We've either hit the input parsing restriction or the output parsing restriction. - * If we've hit the input parsing condition then this must be the last sequence. - * If we've hit the output parsing condition then we are either using partialDecoding - * or we've hit the output parsing condition. + * In the normal scenario, decoding a full block, it must be the last sequence, + * otherwise it's an error (invalid input or dimensions). + * In partialDecoding scenario, it's necessary to ensure there is no buffer overflow. */ if (partialDecoding) { /* Since we are partial decoding we may be in this block because of the output parsing * restriction, which is not valid since the output buffer is allowed to be undersized. */ assert(endOnInput); - /* If we're in this block because of the input parsing condition, then we must be on the - * last sequence (or invalid), so we must check that we exactly consume the input. + DEBUGLOG(7, "partialDecoding: copying literals, close to input or output end") + DEBUGLOG(7, "partialDecoding: literal length = %u", (unsigned)length); + DEBUGLOG(7, "partialDecoding: remaining space in dstBuffer : %i", (int)(oend - op)); + DEBUGLOG(7, "partialDecoding: remaining space in srcBuffer : %i", (int)(iend - ip)); + /* Finishing in the middle of a literals segment, + * due to lack of input. */ - if ((ip + length > iend - (2 + 1 + LASTLITERALS)) && (ip + length != iend)) { goto _output_error; } - assert(ip + length <= iend); - /* We are finishing in the middle of a literals segment. - * Break after the copy. + if (ip+length > iend) { + length = (size_t)(iend-ip); + cpy = op + length; + } + /* Finishing in the middle of a literals segment, + * due to lack of output space. */ if (cpy > oend) { cpy = oend; - assert(op <= oend); - length = (size_t)(oend - op); + assert(op<=oend); + length = (size_t)(oend-op); } - assert(ip + length <= iend); } else { /* We must be on the last sequence because of the parsing limitations so check * that we exactly regenerate the original size (must be exact when !endOnInput). */ if ((!endOnInput) && (cpy != oend)) { goto _output_error; } - /* We must be on the last sequence (or invalid) because of the parsing limitations - * so check that we exactly consume the input and don't overrun the output buffer. - */ - if ((endOnInput) && ((ip + length != iend) || (cpy > oend))) { goto _output_error; } + /* We must be on the last sequence (or invalid) because of the parsing limitations + * so check that we exactly consume the input and don't overrun the output buffer. + */ + if ((endOnInput) && ((ip+length != iend) || (cpy > oend))) { goto _output_error; } } - memmove(op, ip, length); /* supports overlapping memory regions, which only matters for in-place decompression scenarios */ + memmove(op, ip, length); /* supports overlapping memory regions; only matters for in-place decompression scenarios */ ip += length; op += length; - /* Necessarily EOF when !partialDecoding. When partialDecoding - * it is EOF if we've either filled the output buffer or hit - * the input parsing restriction. + /* Necessarily EOF when !partialDecoding. + * When partialDecoding, it is EOF if we've either + * filled the output buffer or + * can't proceed with reading an offset for following match. */ - if (!partialDecoding || (cpy == oend) || (ip == iend)) { + if (!partialDecoding || (cpy == oend) || (ip >= (iend-2))) { break; } } else { LZ4_wildCopy8(op, ip, cpy); /* may overwrite up to WILDCOPYLENGTH beyond cpy */ - ip += length; - op = cpy; + ip += length; op = cpy; } /* get offset */ - offset = LZ4_readLE16(ip); - ip += 2; + offset = LZ4_readLE16(ip); ip+=2; match = op - offset; /* get matchlength */ length = token & ML_MASK; -_copy_match: + _copy_match: if (length == ML_MASK) { - variable_length_error error = ok; - length += read_variable_length(&ip, iend - LASTLITERALS + 1, endOnInput, 0, &error); - if (error != ok) goto _output_error; - if ((safeDecode) && unlikely((uptrval)(op) + length < (uptrval)op)) goto _output_error; /* overflow detection */ + variable_length_error error = ok; + length += read_variable_length(&ip, iend - LASTLITERALS + 1, endOnInput, 0, &error); + if (error != ok) goto _output_error; + if ((safeDecode) && unlikely((uptrval)(op)+length<(uptrval)op)) goto _output_error; /* overflow detection */ } length += MINMATCH; #if LZ4_FAST_DEC_LOOP -safe_match_copy: + safe_match_copy: #endif if ((checkOffset) && (unlikely(match + dictSize < lowPrefix))) goto _output_error; /* Error : offset outside buffers */ /* match starting within external dictionary */ - if ((dict == usingExtDict) && (match < lowPrefix)) { - if (unlikely(op + length > oend - LASTLITERALS)) { - if (partialDecoding) length = MIN(length, (size_t)(oend - op)); + if ((dict==usingExtDict) && (match < lowPrefix)) { + if (unlikely(op+length > oend-LASTLITERALS)) { + if (partialDecoding) length = MIN(length, (size_t)(oend-op)); else goto _output_error; /* doesn't respect parsing restriction */ } - if (length <= (size_t)(lowPrefix - match)) { + if (length <= (size_t)(lowPrefix-match)) { /* match fits entirely within external dictionary : just copy */ - memmove(op, dictEnd - (lowPrefix - match), length); + memmove(op, dictEnd - (lowPrefix-match), length); op += length; } else { /* match stretches into both external dictionary and current block */ size_t const copySize = (size_t)(lowPrefix - match); size_t const restSize = length - copySize; - memcpy(op, dictEnd - copySize, copySize); + LZ4_memcpy(op, dictEnd - copySize, copySize); op += copySize; if (restSize > (size_t)(op - lowPrefix)) { /* overlap copy */ - BYTE *const endOfMatch = op + restSize; - const BYTE *copyFrom = lowPrefix; + BYTE* const endOfMatch = op + restSize; + const BYTE* copyFrom = lowPrefix; while (op < endOfMatch) *op++ = *copyFrom++; } else { - memcpy(op, lowPrefix, restSize); + LZ4_memcpy(op, lowPrefix, restSize); op += restSize; - } - } + } } continue; } assert(match >= lowPrefix); @@ -2009,39 +2074,39 @@ safe_match_copy: cpy = op + length; /* partialDecoding : may end anywhere within the block */ - assert(op <= oend); - if (partialDecoding && (cpy > oend - MATCH_SAFEGUARD_DISTANCE)) { - size_t const mlen = MIN(length, (size_t)(oend - op)); - const BYTE *const matchEnd = match + mlen; - BYTE *const copyEnd = op + mlen; + assert(op<=oend); + if (partialDecoding && (cpy > oend-MATCH_SAFEGUARD_DISTANCE)) { + size_t const mlen = MIN(length, (size_t)(oend-op)); + const BYTE* const matchEnd = match + mlen; + BYTE* const copyEnd = op + mlen; if (matchEnd > op) { /* overlap copy */ while (op < copyEnd) { *op++ = *match++; } } else { - memcpy(op, match, mlen); + LZ4_memcpy(op, match, mlen); } op = copyEnd; if (op == oend) { break; } continue; } - if (unlikely(offset < 8)) { + if (unlikely(offset<8)) { LZ4_write32(op, 0); /* silence msan warning when offset==0 */ op[0] = match[0]; op[1] = match[1]; op[2] = match[2]; op[3] = match[3]; match += inc32table[offset]; - memcpy(op + 4, match, 4); + LZ4_memcpy(op+4, match, 4); match -= dec64table[offset]; } else { - memcpy(op, match, 8); + LZ4_memcpy(op, match, 8); match += 8; } op += 8; - if (unlikely(cpy > oend - MATCH_SAFEGUARD_DISTANCE)) { - BYTE *const oCopyLimit = oend - (WILDCOPYLENGTH - 1); - if (cpy > oend - LASTLITERALS) { goto _output_error; } /* Error : last LASTLITERALS bytes must be literals (uncompressed) */ + if (unlikely(cpy > oend-MATCH_SAFEGUARD_DISTANCE)) { + BYTE* const oCopyLimit = oend - (WILDCOPYLENGTH-1); + if (cpy > oend-LASTLITERALS) { goto _output_error; } /* Error : last LASTLITERALS bytes must be literals (uncompressed) */ if (op < oCopyLimit) { LZ4_wildCopy8(op, match, oCopyLimit); match += oCopyLimit - op; @@ -2049,22 +2114,23 @@ safe_match_copy: } while (op < cpy) { *op++ = *match++; } } else { - memcpy(op, match, 8); - if (length > 16) { LZ4_wildCopy8(op + 8, match + 8, cpy); } + LZ4_memcpy(op, match, 8); + if (length > 16) { LZ4_wildCopy8(op+8, match+8, cpy); } } op = cpy; /* wildcopy correction */ } /* end of decoding */ if (endOnInput) { - return (int)(((char *)op) - dst); /* Nb of output bytes decoded */ - } else { - return (int)(((const char *)ip) - src); /* Nb of input bytes read */ - } + DEBUGLOG(5, "decoded %i bytes", (int) (((char*)op)-dst)); + return (int) (((char*)op)-dst); /* Nb of output bytes decoded */ + } else { + return (int) (((const char*)ip)-src); /* Nb of input bytes read */ + } /* Overflow error detected */ -_output_error: - return (int)(-(((const char *)ip) - src)) - 1; + _output_error: + return (int) (-(((const char*)ip)-src))-1; } } @@ -2072,66 +2138,74 @@ _output_error: /*===== Instantiate the API decoding functions. =====*/ LZ4_FORCE_O2_GCC_PPC64LE -int LZ4_decompress_safe(const char *source, char *dest, int compressedSize, int maxDecompressedSize) { +int LZ4_decompress_safe(const char* source, char* dest, int compressedSize, int maxDecompressedSize) +{ return LZ4_decompress_generic(source, dest, compressedSize, maxDecompressedSize, endOnInputSize, decode_full_block, noDict, - (BYTE *)dest, NULL, 0); + (BYTE*)dest, NULL, 0); } LZ4_FORCE_O2_GCC_PPC64LE -int LZ4_decompress_safe_partial(const char *src, char *dst, int compressedSize, int targetOutputSize, int dstCapacity) { +int LZ4_decompress_safe_partial(const char* src, char* dst, int compressedSize, int targetOutputSize, int dstCapacity) +{ dstCapacity = MIN(targetOutputSize, dstCapacity); return LZ4_decompress_generic(src, dst, compressedSize, dstCapacity, endOnInputSize, partial_decode, - noDict, (BYTE *)dst, NULL, 0); + noDict, (BYTE*)dst, NULL, 0); } LZ4_FORCE_O2_GCC_PPC64LE -int LZ4_decompress_fast(const char *source, char *dest, int originalSize) { +int LZ4_decompress_fast(const char* source, char* dest, int originalSize) +{ return LZ4_decompress_generic(source, dest, 0, originalSize, endOnOutputSize, decode_full_block, withPrefix64k, - (BYTE *)dest - 64 KB, NULL, 0); + (BYTE*)dest - 64 KB, NULL, 0); } /*===== Instantiate a few more decoding cases, used more than once. =====*/ LZ4_FORCE_O2_GCC_PPC64LE /* Exported, an obsolete API function. */ -int LZ4_decompress_safe_withPrefix64k(const char *source, char *dest, int compressedSize, int maxOutputSize) { +int LZ4_decompress_safe_withPrefix64k(const char* source, char* dest, int compressedSize, int maxOutputSize) +{ return LZ4_decompress_generic(source, dest, compressedSize, maxOutputSize, endOnInputSize, decode_full_block, withPrefix64k, - (BYTE *)dest - 64 KB, NULL, 0); + (BYTE*)dest - 64 KB, NULL, 0); } /* Another obsolete API function, paired with the previous one. */ -int LZ4_decompress_fast_withPrefix64k(const char *source, char *dest, int originalSize) { +int LZ4_decompress_fast_withPrefix64k(const char* source, char* dest, int originalSize) +{ /* LZ4_decompress_fast doesn't validate match offsets, * and thus serves well with any prefixed dictionary. */ return LZ4_decompress_fast(source, dest, originalSize); } LZ4_FORCE_O2_GCC_PPC64LE -static int LZ4_decompress_safe_withSmallPrefix(const char *source, char *dest, int compressedSize, int maxOutputSize, - size_t prefixSize) { +static int LZ4_decompress_safe_withSmallPrefix(const char* source, char* dest, int compressedSize, int maxOutputSize, + size_t prefixSize) +{ return LZ4_decompress_generic(source, dest, compressedSize, maxOutputSize, endOnInputSize, decode_full_block, noDict, - (BYTE *)dest - prefixSize, NULL, 0); + (BYTE*)dest-prefixSize, NULL, 0); } LZ4_FORCE_O2_GCC_PPC64LE -int LZ4_decompress_safe_forceExtDict(const char *source, char *dest, +int LZ4_decompress_safe_forceExtDict(const char* source, char* dest, int compressedSize, int maxOutputSize, - const void *dictStart, size_t dictSize) { + const void* dictStart, size_t dictSize) +{ return LZ4_decompress_generic(source, dest, compressedSize, maxOutputSize, endOnInputSize, decode_full_block, usingExtDict, - (BYTE *)dest, (const BYTE *)dictStart, dictSize); + (BYTE*)dest, (const BYTE*)dictStart, dictSize); } LZ4_FORCE_O2_GCC_PPC64LE -static int LZ4_decompress_fast_extDict(const char *source, char *dest, int originalSize, - const void *dictStart, size_t dictSize) { +static int LZ4_decompress_fast_extDict(const char* source, char* dest, int originalSize, + const void* dictStart, size_t dictSize) +{ return LZ4_decompress_generic(source, dest, 0, originalSize, endOnOutputSize, decode_full_block, usingExtDict, - (BYTE *)dest, (const BYTE *)dictStart, dictSize); + (BYTE*)dest, (const BYTE*)dictStart, dictSize); } /* The "double dictionary" mode, for use with e.g. ring buffers: the first part @@ -2139,30 +2213,34 @@ static int LZ4_decompress_fast_extDict(const char *source, char *dest, int origi * These routines are used only once, in LZ4_decompress_*_continue(). */ LZ4_FORCE_INLINE -int LZ4_decompress_safe_doubleDict(const char *source, char *dest, int compressedSize, int maxOutputSize, - size_t prefixSize, const void *dictStart, size_t dictSize) { +int LZ4_decompress_safe_doubleDict(const char* source, char* dest, int compressedSize, int maxOutputSize, + size_t prefixSize, const void* dictStart, size_t dictSize) +{ return LZ4_decompress_generic(source, dest, compressedSize, maxOutputSize, endOnInputSize, decode_full_block, usingExtDict, - (BYTE *)dest - prefixSize, (const BYTE *)dictStart, dictSize); + (BYTE*)dest-prefixSize, (const BYTE*)dictStart, dictSize); } LZ4_FORCE_INLINE -int LZ4_decompress_fast_doubleDict(const char *source, char *dest, int originalSize, - size_t prefixSize, const void *dictStart, size_t dictSize) { +int LZ4_decompress_fast_doubleDict(const char* source, char* dest, int originalSize, + size_t prefixSize, const void* dictStart, size_t dictSize) +{ return LZ4_decompress_generic(source, dest, 0, originalSize, endOnOutputSize, decode_full_block, usingExtDict, - (BYTE *)dest - prefixSize, (const BYTE *)dictStart, dictSize); + (BYTE*)dest-prefixSize, (const BYTE*)dictStart, dictSize); } /*===== streaming decompression functions =====*/ -LZ4_streamDecode_t *LZ4_createStreamDecode(void) { - LZ4_streamDecode_t *lz4s = (LZ4_streamDecode_t *) ALLOC_AND_ZERO(sizeof(LZ4_streamDecode_t)); +LZ4_streamDecode_t* LZ4_createStreamDecode(void) +{ + LZ4_streamDecode_t* lz4s = (LZ4_streamDecode_t*) ALLOC_AND_ZERO(sizeof(LZ4_streamDecode_t)); LZ4_STATIC_ASSERT(LZ4_STREAMDECODESIZE >= sizeof(LZ4_streamDecode_t_internal)); /* A compilation error here means LZ4_STREAMDECODESIZE is not large enough */ return lz4s; } -int LZ4_freeStreamDecode(LZ4_streamDecode_t *LZ4_stream) { +int LZ4_freeStreamDecode (LZ4_streamDecode_t* LZ4_stream) +{ if (LZ4_stream == NULL) { return 0; } /* support free on NULL */ FREEMEM(LZ4_stream); return 0; @@ -2174,10 +2252,11 @@ int LZ4_freeStreamDecode(LZ4_streamDecode_t *LZ4_stream) { * Loading a size of 0 is allowed (same effect as no dictionary). * @return : 1 if OK, 0 if error */ -int LZ4_setStreamDecode(LZ4_streamDecode_t *LZ4_streamDecode, const char *dictionary, int dictSize) { - LZ4_streamDecode_t_internal *lz4sd = &LZ4_streamDecode->internal_donotuse; +int LZ4_setStreamDecode (LZ4_streamDecode_t* LZ4_streamDecode, const char* dictionary, int dictSize) +{ + LZ4_streamDecode_t_internal* lz4sd = &LZ4_streamDecode->internal_donotuse; lz4sd->prefixSize = (size_t) dictSize; - lz4sd->prefixEnd = (const BYTE *) dictionary + dictSize; + lz4sd->prefixEnd = (const BYTE*) dictionary + dictSize; lz4sd->externalDict = NULL; lz4sd->extDictSize = 0; return 1; @@ -2194,7 +2273,8 @@ int LZ4_setStreamDecode(LZ4_streamDecode_t *LZ4_streamDecode, const char *dictio * @return : minimum ring buffer size, * or 0 if there is an error (invalid maxBlockSize). */ -int LZ4_decoderRingBufferSize(int maxBlockSize) { +int LZ4_decoderRingBufferSize(int maxBlockSize) +{ if (maxBlockSize < 0) return 0; if (maxBlockSize > LZ4_MAX_INPUT_SIZE) return 0; if (maxBlockSize < 16) maxBlockSize = 16; @@ -2209,8 +2289,9 @@ int LZ4_decoderRingBufferSize(int maxBlockSize) { and indicate where it stands using LZ4_setStreamDecode() */ LZ4_FORCE_O2_GCC_PPC64LE -int LZ4_decompress_safe_continue(LZ4_streamDecode_t *LZ4_streamDecode, const char *source, char *dest, int compressedSize, int maxOutputSize) { - LZ4_streamDecode_t_internal *lz4sd = &LZ4_streamDecode->internal_donotuse; +int LZ4_decompress_safe_continue (LZ4_streamDecode_t* LZ4_streamDecode, const char* source, char* dest, int compressedSize, int maxOutputSize) +{ + LZ4_streamDecode_t_internal* lz4sd = &LZ4_streamDecode->internal_donotuse; int result; if (lz4sd->prefixSize == 0) { @@ -2219,8 +2300,8 @@ int LZ4_decompress_safe_continue(LZ4_streamDecode_t *LZ4_streamDecode, const cha result = LZ4_decompress_safe(source, dest, compressedSize, maxOutputSize); if (result <= 0) return result; lz4sd->prefixSize = (size_t)result; - lz4sd->prefixEnd = (BYTE *)dest + result; - } else if (lz4sd->prefixEnd == (BYTE *)dest) { + lz4sd->prefixEnd = (BYTE*)dest + result; + } else if (lz4sd->prefixEnd == (BYTE*)dest) { /* They're rolling the current segment. */ if (lz4sd->prefixSize >= 64 KB - 1) result = LZ4_decompress_safe_withPrefix64k(source, dest, compressedSize, maxOutputSize); @@ -2241,15 +2322,16 @@ int LZ4_decompress_safe_continue(LZ4_streamDecode_t *LZ4_streamDecode, const cha lz4sd->externalDict, lz4sd->extDictSize); if (result <= 0) return result; lz4sd->prefixSize = (size_t)result; - lz4sd->prefixEnd = (BYTE *)dest + result; + lz4sd->prefixEnd = (BYTE*)dest + result; } return result; } LZ4_FORCE_O2_GCC_PPC64LE -int LZ4_decompress_fast_continue(LZ4_streamDecode_t *LZ4_streamDecode, const char *source, char *dest, int originalSize) { - LZ4_streamDecode_t_internal *lz4sd = &LZ4_streamDecode->internal_donotuse; +int LZ4_decompress_fast_continue (LZ4_streamDecode_t* LZ4_streamDecode, const char* source, char* dest, int originalSize) +{ + LZ4_streamDecode_t_internal* lz4sd = &LZ4_streamDecode->internal_donotuse; int result; assert(originalSize >= 0); @@ -2258,8 +2340,8 @@ int LZ4_decompress_fast_continue(LZ4_streamDecode_t *LZ4_streamDecode, const cha result = LZ4_decompress_fast(source, dest, originalSize); if (result <= 0) return result; lz4sd->prefixSize = (size_t)originalSize; - lz4sd->prefixEnd = (BYTE *)dest + originalSize; - } else if (lz4sd->prefixEnd == (BYTE *)dest) { + lz4sd->prefixEnd = (BYTE*)dest + originalSize; + } else if (lz4sd->prefixEnd == (BYTE*)dest) { if (lz4sd->prefixSize >= 64 KB - 1 || lz4sd->extDictSize == 0) result = LZ4_decompress_fast(source, dest, originalSize); else @@ -2275,7 +2357,7 @@ int LZ4_decompress_fast_continue(LZ4_streamDecode_t *LZ4_streamDecode, const cha lz4sd->externalDict, lz4sd->extDictSize); if (result <= 0) return result; lz4sd->prefixSize = (size_t)originalSize; - lz4sd->prefixEnd = (BYTE *)dest + originalSize; + lz4sd->prefixEnd = (BYTE*)dest + originalSize; } return result; @@ -2289,10 +2371,11 @@ Advanced decoding functions : the dictionary must be explicitly provided within parameters */ -int LZ4_decompress_safe_usingDict(const char *source, char *dest, int compressedSize, int maxOutputSize, const char *dictStart, int dictSize) { - if (dictSize == 0) +int LZ4_decompress_safe_usingDict(const char* source, char* dest, int compressedSize, int maxOutputSize, const char* dictStart, int dictSize) +{ + if (dictSize==0) return LZ4_decompress_safe(source, dest, compressedSize, maxOutputSize); - if (dictStart + dictSize == dest) { + if (dictStart+dictSize == dest) { if (dictSize >= 64 KB - 1) { return LZ4_decompress_safe_withPrefix64k(source, dest, compressedSize, maxOutputSize); } @@ -2303,8 +2386,9 @@ int LZ4_decompress_safe_usingDict(const char *source, char *dest, int compressed return LZ4_decompress_safe_forceExtDict(source, dest, compressedSize, maxOutputSize, dictStart, (size_t)dictSize); } -int LZ4_decompress_fast_usingDict(const char *source, char *dest, int originalSize, const char *dictStart, int dictSize) { - if (dictSize == 0 || dictStart + dictSize == dest) +int LZ4_decompress_fast_usingDict(const char* source, char* dest, int originalSize, const char* dictStart, int dictSize) +{ + if (dictSize==0 || dictStart+dictSize == dest) return LZ4_decompress_fast(source, dest, originalSize); assert(dictSize >= 0); return LZ4_decompress_fast_extDict(source, dest, originalSize, dictStart, (size_t)dictSize); @@ -2315,22 +2399,28 @@ int LZ4_decompress_fast_usingDict(const char *source, char *dest, int originalSi * Obsolete Functions ***************************************************/ /* obsolete compression functions */ -int LZ4_compress_limitedOutput(const char *source, char *dest, int inputSize, int maxOutputSize) { +int LZ4_compress_limitedOutput(const char* source, char* dest, int inputSize, int maxOutputSize) +{ return LZ4_compress_default(source, dest, inputSize, maxOutputSize); } -int LZ4_compress(const char *src, char *dest, int srcSize) { +int LZ4_compress(const char* src, char* dest, int srcSize) +{ return LZ4_compress_default(src, dest, srcSize, LZ4_compressBound(srcSize)); } -int LZ4_compress_limitedOutput_withState(void *state, const char *src, char *dst, int srcSize, int dstSize) { +int LZ4_compress_limitedOutput_withState (void* state, const char* src, char* dst, int srcSize, int dstSize) +{ return LZ4_compress_fast_extState(state, src, dst, srcSize, dstSize, 1); } -int LZ4_compress_withState(void *state, const char *src, char *dst, int srcSize) { +int LZ4_compress_withState (void* state, const char* src, char* dst, int srcSize) +{ return LZ4_compress_fast_extState(state, src, dst, srcSize, LZ4_compressBound(srcSize), 1); } -int LZ4_compress_limitedOutput_continue(LZ4_stream_t *LZ4_stream, const char *src, char *dst, int srcSize, int dstCapacity) { +int LZ4_compress_limitedOutput_continue (LZ4_stream_t* LZ4_stream, const char* src, char* dst, int srcSize, int dstCapacity) +{ return LZ4_compress_fast_continue(LZ4_stream, src, dst, srcSize, dstCapacity, 1); } -int LZ4_compress_continue(LZ4_stream_t *LZ4_stream, const char *source, char *dest, int inputSize) { +int LZ4_compress_continue (LZ4_stream_t* LZ4_stream, const char* source, char* dest, int inputSize) +{ return LZ4_compress_fast_continue(LZ4_stream, source, dest, inputSize, LZ4_compressBound(inputSize), 1); } @@ -2340,31 +2430,36 @@ They are only provided here for compatibility with older user programs. - LZ4_uncompress is totally equivalent to LZ4_decompress_fast - LZ4_uncompress_unknownOutputSize is totally equivalent to LZ4_decompress_safe */ -int LZ4_uncompress(const char *source, char *dest, int outputSize) { +int LZ4_uncompress (const char* source, char* dest, int outputSize) +{ return LZ4_decompress_fast(source, dest, outputSize); } -int LZ4_uncompress_unknownOutputSize(const char *source, char *dest, int isize, int maxOutputSize) { +int LZ4_uncompress_unknownOutputSize (const char* source, char* dest, int isize, int maxOutputSize) +{ return LZ4_decompress_safe(source, dest, isize, maxOutputSize); } /* Obsolete Streaming functions */ -int LZ4_sizeofStreamState() { return LZ4_STREAMSIZE; } +int LZ4_sizeofStreamState(void) { return LZ4_STREAMSIZE; } -int LZ4_resetStreamState(void *state, char *inputBuffer) { +int LZ4_resetStreamState(void* state, char* inputBuffer) +{ (void)inputBuffer; - LZ4_resetStream((LZ4_stream_t *)state); + LZ4_resetStream((LZ4_stream_t*)state); return 0; } -void *LZ4_create(char *inputBuffer) { +void* LZ4_create (char* inputBuffer) +{ (void)inputBuffer; return LZ4_createStream(); } -char *LZ4_slideInputBuffer(void *state) { +char* LZ4_slideInputBuffer (void* state) +{ /* avoid const char * -> char * conversion warning */ - return (char *)(uptrval)((LZ4_stream_t *)state)->internal_donotuse.dictionary; + return (char *)(uptrval)((LZ4_stream_t*)state)->internal_donotuse.dictionary; } #endif /* LZ4_COMMONDEFS_ONLY */ diff --git a/common/lz4/lz4.h b/common/lz4/lz4.h index 82e8008e1..5474005d7 100644 --- a/common/lz4/lz4.h +++ b/common/lz4/lz4.h @@ -109,8 +109,8 @@ extern "C" { #define LZ4_EXPAND_AND_QUOTE(str) LZ4_QUOTE(str) #define LZ4_VERSION_STRING LZ4_EXPAND_AND_QUOTE(LZ4_LIB_VERSION) -LZ4LIB_API int LZ4_versionNumber(void); /**< library version number; useful to check dll version */ -LZ4LIB_API const char *LZ4_versionString(void); /**< library version string; useful to check dll version */ +LZ4LIB_API int LZ4_versionNumber (void); /**< library version number; useful to check dll version */ +LZ4LIB_API const char* LZ4_versionString (void); /**< library version string; useful to check dll version */ /*-************************************ @@ -145,7 +145,7 @@ LZ4LIB_API const char *LZ4_versionString(void); /**< library version string; * or 0 if compression fails * Note : This function is protected against buffer overflow scenarios (never writes outside 'dst' buffer, nor read outside 'source' buffer). */ -LZ4LIB_API int LZ4_compress_default(const char *src, char *dst, int srcSize, int dstCapacity); +LZ4LIB_API int LZ4_compress_default(const char* src, char* dst, int srcSize, int dstCapacity); /*! LZ4_decompress_safe() : * compressedSize : is the exact complete size of the compressed block. @@ -161,7 +161,7 @@ LZ4LIB_API int LZ4_compress_default(const char *src, char *dst, int srcSize, int * The implementation is free to send / store / derive this information in whichever way is most beneficial. * If there is a need for a different format which bundles together both compressed data and its metadata, consider looking at lz4frame.h instead. */ -LZ4LIB_API int LZ4_decompress_safe(const char *src, char *dst, int compressedSize, int dstCapacity); +LZ4LIB_API int LZ4_decompress_safe (const char* src, char* dst, int compressedSize, int dstCapacity); /*-************************************ @@ -186,9 +186,10 @@ LZ4LIB_API int LZ4_compressBound(int inputSize); The larger the acceleration value, the faster the algorithm, but also the lesser the compression. It's a trade-off. It can be fine tuned, with each successive value providing roughly +~3% to speed. An acceleration value of "1" is the same as regular LZ4_compress_default() - Values <= 0 will be replaced by ACCELERATION_DEFAULT (currently == 1, see lz4.c). + Values <= 0 will be replaced by LZ4_ACCELERATION_DEFAULT (currently == 1, see lz4.c). + Values > LZ4_ACCELERATION_MAX will be replaced by LZ4_ACCELERATION_MAX (currently == 65537, see lz4.c). */ -LZ4LIB_API int LZ4_compress_fast(const char *src, char *dst, int srcSize, int dstCapacity, int acceleration); +LZ4LIB_API int LZ4_compress_fast (const char* src, char* dst, int srcSize, int dstCapacity, int acceleration); /*! LZ4_compress_fast_extState() : @@ -198,7 +199,7 @@ LZ4LIB_API int LZ4_compress_fast(const char *src, char *dst, int srcSize, int ds * Then, provide this buffer as `void* state` to compression function. */ LZ4LIB_API int LZ4_sizeofState(void); -LZ4LIB_API int LZ4_compress_fast_extState(void *state, const char *src, char *dst, int srcSize, int dstCapacity, int acceleration); +LZ4LIB_API int LZ4_compress_fast_extState (void* state, const char* src, char* dst, int srcSize, int dstCapacity, int acceleration); /*! LZ4_compress_destSize() : @@ -212,35 +213,56 @@ LZ4LIB_API int LZ4_compress_fast_extState(void *state, const char *src, char *ds * New value is necessarily <= input value. * @return : Nb bytes written into 'dst' (necessarily <= targetDestSize) * or 0 if compression fails. -*/ -LZ4LIB_API int LZ4_compress_destSize(const char *src, char *dst, int *srcSizePtr, int targetDstSize); + * + * Note : from v1.8.2 to v1.9.1, this function had a bug (fixed un v1.9.2+): + * the produced compressed content could, in specific circumstances, + * require to be decompressed into a destination buffer larger + * by at least 1 byte than the content to decompress. + * If an application uses `LZ4_compress_destSize()`, + * it's highly recommended to update liblz4 to v1.9.2 or better. + * If this can't be done or ensured, + * the receiving decompression function should provide + * a dstCapacity which is > decompressedSize, by at least 1 byte. + * See https://github.com/lz4/lz4/issues/859 for details + */ +LZ4LIB_API int LZ4_compress_destSize (const char* src, char* dst, int* srcSizePtr, int targetDstSize); /*! LZ4_decompress_safe_partial() : * Decompress an LZ4 compressed block, of size 'srcSize' at position 'src', * into destination buffer 'dst' of size 'dstCapacity'. * Up to 'targetOutputSize' bytes will be decoded. - * The function stops decoding on reaching this objective, - * which can boost performance when only the beginning of a block is required. + * The function stops decoding on reaching this objective. + * This can be useful to boost performance + * whenever only the beginning of a block is required. * - * @return : the number of bytes decoded in `dst` (necessarily <= dstCapacity) + * @return : the number of bytes decoded in `dst` (necessarily <= targetOutputSize) * If source stream is detected malformed, function returns a negative result. * - * Note : @return can be < targetOutputSize, if compressed block contains less data. + * Note 1 : @return can be < targetOutputSize, if compressed block contains less data. * - * Note 2 : this function features 2 parameters, targetOutputSize and dstCapacity, - * and expects targetOutputSize <= dstCapacity. - * It effectively stops decoding on reaching targetOutputSize, + * Note 2 : targetOutputSize must be <= dstCapacity + * + * Note 3 : this function effectively stops decoding on reaching targetOutputSize, * so dstCapacity is kind of redundant. - * This is because in a previous version of this function, - * decoding operation would not "break" a sequence in the middle. - * As a consequence, there was no guarantee that decoding would stop at exactly targetOutputSize, + * This is because in older versions of this function, + * decoding operation would still write complete sequences. + * Therefore, there was no guarantee that it would stop writing at exactly targetOutputSize, * it could write more bytes, though only up to dstCapacity. * Some "margin" used to be required for this operation to work properly. - * This is no longer necessary. - * The function nonetheless keeps its signature, in an effort to not break API. + * Thankfully, this is no longer necessary. + * The function nonetheless keeps the same signature, in an effort to preserve API compatibility. + * + * Note 4 : If srcSize is the exact size of the block, + * then targetOutputSize can be any value, + * including larger than the block's decompressed size. + * The function will, at most, generate block's decompressed size. + * + * Note 5 : If srcSize is _larger_ than block's compressed size, + * then targetOutputSize **MUST** be <= block's decompressed size. + * Otherwise, *silent corruption will occur*. */ -LZ4LIB_API int LZ4_decompress_safe_partial(const char *src, char *dst, int srcSize, int targetOutputSize, int dstCapacity); +LZ4LIB_API int LZ4_decompress_safe_partial (const char* src, char* dst, int srcSize, int targetOutputSize, int dstCapacity); /*-********************************************* @@ -248,8 +270,8 @@ LZ4LIB_API int LZ4_decompress_safe_partial(const char *src, char *dst, int srcSi ***********************************************/ typedef union LZ4_stream_u LZ4_stream_t; /* incomplete type (defined later) */ -LZ4LIB_API LZ4_stream_t *LZ4_createStream(void); -LZ4LIB_API int LZ4_freeStream(LZ4_stream_t *streamPtr); +LZ4LIB_API LZ4_stream_t* LZ4_createStream(void); +LZ4LIB_API int LZ4_freeStream (LZ4_stream_t* streamPtr); /*! LZ4_resetStream_fast() : v1.9.0+ * Use this to prepare an LZ4_stream_t for a new chain of dependent blocks @@ -273,7 +295,7 @@ LZ4LIB_API int LZ4_freeStream(LZ4_stream_t *streamPtr); * The *extState* functions perform their own resets. * Invoking LZ4_resetStream_fast() before is redundant, and even counterproductive. */ -LZ4LIB_API void LZ4_resetStream_fast(LZ4_stream_t *streamPtr); +LZ4LIB_API void LZ4_resetStream_fast (LZ4_stream_t* streamPtr); /*! LZ4_loadDict() : * Use this function to reference a static dictionary into LZ4_stream_t. @@ -286,7 +308,7 @@ LZ4LIB_API void LZ4_resetStream_fast(LZ4_stream_t *streamPtr); * Loading a size of 0 is allowed, and is the same as reset. * @return : loaded dictionary size, in bytes (necessarily <= 64 KB) */ -LZ4LIB_API int LZ4_loadDict(LZ4_stream_t *streamPtr, const char *dictionary, int dictSize); +LZ4LIB_API int LZ4_loadDict (LZ4_stream_t* streamPtr, const char* dictionary, int dictSize); /*! LZ4_compress_fast_continue() : * Compress 'src' content using data from previously compressed blocks, for better compression ratio. @@ -311,7 +333,7 @@ LZ4LIB_API int LZ4_loadDict(LZ4_stream_t *streamPtr, const char *dictionary, int * * Note 5 : After an error, the stream status is undefined (invalid), it can only be reset or freed. */ -LZ4LIB_API int LZ4_compress_fast_continue(LZ4_stream_t *streamPtr, const char *src, char *dst, int srcSize, int dstCapacity, int acceleration); +LZ4LIB_API int LZ4_compress_fast_continue (LZ4_stream_t* streamPtr, const char* src, char* dst, int srcSize, int dstCapacity, int acceleration); /*! LZ4_saveDict() : * If last 64KB data cannot be guaranteed to remain available at its current memory location, @@ -320,7 +342,7 @@ LZ4LIB_API int LZ4_compress_fast_continue(LZ4_stream_t *streamPtr, const char *s * but is much faster, because LZ4_saveDict() doesn't need to rebuild tables. * @return : saved dictionary size in bytes (necessarily <= maxDictSize), or 0 if error. */ -LZ4LIB_API int LZ4_saveDict(LZ4_stream_t *streamPtr, char *safeBuffer, int maxDictSize); +LZ4LIB_API int LZ4_saveDict (LZ4_stream_t* streamPtr, char* safeBuffer, int maxDictSize); /*-********************************************** @@ -333,8 +355,8 @@ typedef union LZ4_streamDecode_u LZ4_streamDecode_t; /* tracking context */ * creation / destruction of streaming decompression tracking context. * A tracking context can be re-used multiple times. */ -LZ4LIB_API LZ4_streamDecode_t *LZ4_createStreamDecode(void); -LZ4LIB_API int LZ4_freeStreamDecode(LZ4_streamDecode_t *LZ4_stream); +LZ4LIB_API LZ4_streamDecode_t* LZ4_createStreamDecode(void); +LZ4LIB_API int LZ4_freeStreamDecode (LZ4_streamDecode_t* LZ4_stream); /*! LZ4_setStreamDecode() : * An LZ4_streamDecode_t context can be allocated once and re-used multiple times. @@ -343,7 +365,7 @@ LZ4LIB_API int LZ4_freeStreamDecode(LZ4_streamDecode_t *LZ4_stre * Dictionary is presumed stable : it must remain accessible and unmodified during next decompression. * @return : 1 if OK, 0 if error */ -LZ4LIB_API int LZ4_setStreamDecode(LZ4_streamDecode_t *LZ4_streamDecode, const char *dictionary, int dictSize); +LZ4LIB_API int LZ4_setStreamDecode (LZ4_streamDecode_t* LZ4_streamDecode, const char* dictionary, int dictSize); /*! LZ4_decoderRingBufferSize() : v1.8.2+ * Note : in a ring buffer scenario (optional), @@ -384,7 +406,7 @@ LZ4LIB_API int LZ4_decoderRingBufferSize(int maxBlockSize); * save the last 64KB of decoded data into a safe buffer where it can't be modified during decompression, * then indicate where this data is saved using LZ4_setStreamDecode(), before decompressing next block. */ -LZ4LIB_API int LZ4_decompress_safe_continue(LZ4_streamDecode_t *LZ4_streamDecode, const char *src, char *dst, int srcSize, int dstCapacity); +LZ4LIB_API int LZ4_decompress_safe_continue (LZ4_streamDecode_t* LZ4_streamDecode, const char* src, char* dst, int srcSize, int dstCapacity); /*! LZ4_decompress_*_usingDict() : @@ -395,7 +417,7 @@ LZ4LIB_API int LZ4_decompress_safe_continue(LZ4_streamDecode_t *LZ4_streamDecode * Performance tip : Decompression speed can be substantially increased * when dst == dictStart + dictSize. */ -LZ4LIB_API int LZ4_decompress_safe_usingDict(const char *src, char *dst, int srcSize, int dstCapcity, const char *dictStart, int dictSize); +LZ4LIB_API int LZ4_decompress_safe_usingDict (const char* src, char* dst, int srcSize, int dstCapcity, const char* dictStart, int dictSize); #endif /* LZ4_H_2983827168210 */ @@ -446,7 +468,7 @@ LZ4LIB_API int LZ4_decompress_safe_usingDict(const char *src, char *dst, int src * this function initializes the provided state with a call to something like LZ4_resetStream_fast() * while LZ4_compress_fast_extState() starts with a call to LZ4_resetStream(). */ -LZ4LIB_STATIC_API int LZ4_compress_fast_extState_fastReset(void *state, const char *src, char *dst, int srcSize, int dstCapacity, int acceleration); +LZ4LIB_STATIC_API int LZ4_compress_fast_extState_fastReset (void* state, const char* src, char* dst, int srcSize, int dstCapacity, int acceleration); /*! LZ4_attach_dictionary() : * This is an experimental API that allows @@ -474,7 +496,7 @@ LZ4LIB_STATIC_API int LZ4_compress_fast_extState_fastReset(void *state, const ch * stream (and source buffer) must remain in-place / accessible / unchanged * through the completion of the first compression call on the stream. */ -LZ4LIB_STATIC_API void LZ4_attach_dictionary(LZ4_stream_t *workingStream, const LZ4_stream_t *dictionaryStream); +LZ4LIB_STATIC_API void LZ4_attach_dictionary(LZ4_stream_t* workingStream, const LZ4_stream_t* dictionaryStream); /*! In-place compression and decompression @@ -564,17 +586,16 @@ typedef struct LZ4_stream_t_internal LZ4_stream_t_internal; struct LZ4_stream_t_internal { uint32_t hashTable[LZ4_HASH_SIZE_U32]; uint32_t currentOffset; - uint16_t dirty; - uint16_t tableType; - const uint8_t *dictionary; - const LZ4_stream_t_internal *dictCtx; + uint32_t tableType; + const uint8_t* dictionary; + const LZ4_stream_t_internal* dictCtx; uint32_t dictSize; }; typedef struct { - const uint8_t *externalDict; + const uint8_t* externalDict; size_t extDictSize; - const uint8_t *prefixEnd; + const uint8_t* prefixEnd; size_t prefixSize; } LZ4_streamDecode_t_internal; @@ -584,16 +605,15 @@ typedef struct LZ4_stream_t_internal LZ4_stream_t_internal; struct LZ4_stream_t_internal { unsigned int hashTable[LZ4_HASH_SIZE_U32]; unsigned int currentOffset; - unsigned short dirty; - unsigned short tableType; - const unsigned char *dictionary; - const LZ4_stream_t_internal *dictCtx; + unsigned int tableType; + const unsigned char* dictionary; + const LZ4_stream_t_internal* dictCtx; unsigned int dictSize; }; typedef struct { - const unsigned char *externalDict; - const unsigned char *prefixEnd; + const unsigned char* externalDict; + const unsigned char* prefixEnd; size_t extDictSize; size_t prefixSize; } LZ4_streamDecode_t_internal; @@ -630,7 +650,7 @@ union LZ4_stream_u { * Note2: An LZ4_stream_t structure guarantees correct alignment and size. * Note3: Before v1.9.0, use LZ4_resetStream() instead */ -LZ4LIB_API LZ4_stream_t *LZ4_initStream(void *buffer, size_t size); +LZ4LIB_API LZ4_stream_t* LZ4_initStream (void* buffer, size_t size); /*! LZ4_streamDecode_t : @@ -667,32 +687,31 @@ union LZ4_streamDecode_u { #ifdef LZ4_DISABLE_DEPRECATE_WARNINGS # define LZ4_DEPRECATED(message) /* disable deprecation warnings */ #else -# define LZ4_GCC_VERSION (__GNUC__ * 100 + __GNUC_MINOR__) # if defined (__cplusplus) && (__cplusplus >= 201402) /* C++14 or greater */ # define LZ4_DEPRECATED(message) [[deprecated(message)]] -# elif (LZ4_GCC_VERSION >= 405) || defined(__clang__) -# define LZ4_DEPRECATED(message) __attribute__((deprecated(message))) -# elif (LZ4_GCC_VERSION >= 301) -# define LZ4_DEPRECATED(message) __attribute__((deprecated)) # elif defined(_MSC_VER) # define LZ4_DEPRECATED(message) __declspec(deprecated(message)) +# elif defined(__clang__) || (defined(__GNUC__) && (__GNUC__ * 10 + __GNUC_MINOR__ >= 45)) +# define LZ4_DEPRECATED(message) __attribute__((deprecated(message))) +# elif defined(__GNUC__) && (__GNUC__ * 10 + __GNUC_MINOR__ >= 31) +# define LZ4_DEPRECATED(message) __attribute__((deprecated)) # else -# pragma message("WARNING: You need to implement LZ4_DEPRECATED for this compiler") -# define LZ4_DEPRECATED(message) +# pragma message("WARNING: LZ4_DEPRECATED needs custom implementation for this compiler") +# define LZ4_DEPRECATED(message) /* disabled */ # endif #endif /* LZ4_DISABLE_DEPRECATE_WARNINGS */ /* Obsolete compression functions */ -LZ4_DEPRECATED("use LZ4_compress_default() instead") LZ4LIB_API int LZ4_compress(const char *src, char *dest, int srcSize); -LZ4_DEPRECATED("use LZ4_compress_default() instead") LZ4LIB_API int LZ4_compress_limitedOutput(const char *src, char *dest, int srcSize, int maxOutputSize); -LZ4_DEPRECATED("use LZ4_compress_fast_extState() instead") LZ4LIB_API int LZ4_compress_withState(void *state, const char *source, char *dest, int inputSize); -LZ4_DEPRECATED("use LZ4_compress_fast_extState() instead") LZ4LIB_API int LZ4_compress_limitedOutput_withState(void *state, const char *source, char *dest, int inputSize, int maxOutputSize); -LZ4_DEPRECATED("use LZ4_compress_fast_continue() instead") LZ4LIB_API int LZ4_compress_continue(LZ4_stream_t *LZ4_streamPtr, const char *source, char *dest, int inputSize); -LZ4_DEPRECATED("use LZ4_compress_fast_continue() instead") LZ4LIB_API int LZ4_compress_limitedOutput_continue(LZ4_stream_t *LZ4_streamPtr, const char *source, char *dest, int inputSize, int maxOutputSize); +LZ4_DEPRECATED("use LZ4_compress_default() instead") LZ4LIB_API int LZ4_compress (const char* src, char* dest, int srcSize); +LZ4_DEPRECATED("use LZ4_compress_default() instead") LZ4LIB_API int LZ4_compress_limitedOutput (const char* src, char* dest, int srcSize, int maxOutputSize); +LZ4_DEPRECATED("use LZ4_compress_fast_extState() instead") LZ4LIB_API int LZ4_compress_withState (void* state, const char* source, char* dest, int inputSize); +LZ4_DEPRECATED("use LZ4_compress_fast_extState() instead") LZ4LIB_API int LZ4_compress_limitedOutput_withState (void* state, const char* source, char* dest, int inputSize, int maxOutputSize); +LZ4_DEPRECATED("use LZ4_compress_fast_continue() instead") LZ4LIB_API int LZ4_compress_continue (LZ4_stream_t* LZ4_streamPtr, const char* source, char* dest, int inputSize); +LZ4_DEPRECATED("use LZ4_compress_fast_continue() instead") LZ4LIB_API int LZ4_compress_limitedOutput_continue (LZ4_stream_t* LZ4_streamPtr, const char* source, char* dest, int inputSize, int maxOutputSize); /* Obsolete decompression functions */ -LZ4_DEPRECATED("use LZ4_decompress_fast() instead") LZ4LIB_API int LZ4_uncompress(const char *source, char *dest, int outputSize); -LZ4_DEPRECATED("use LZ4_decompress_safe() instead") LZ4LIB_API int LZ4_uncompress_unknownOutputSize(const char *source, char *dest, int isize, int maxOutputSize); +LZ4_DEPRECATED("use LZ4_decompress_fast() instead") LZ4LIB_API int LZ4_uncompress (const char* source, char* dest, int outputSize); +LZ4_DEPRECATED("use LZ4_decompress_safe() instead") LZ4LIB_API int LZ4_uncompress_unknownOutputSize (const char* source, char* dest, int isize, int maxOutputSize); /* Obsolete streaming functions; degraded functionality; do not use! * @@ -703,14 +722,14 @@ LZ4_DEPRECATED("use LZ4_decompress_safe() instead") LZ4LIB_API int LZ4_uncompres * achieved will therefore be no better than compressing each chunk * independently. */ -LZ4_DEPRECATED("Use LZ4_createStream() instead") LZ4LIB_API void *LZ4_create(char *inputBuffer); +LZ4_DEPRECATED("Use LZ4_createStream() instead") LZ4LIB_API void* LZ4_create (char* inputBuffer); LZ4_DEPRECATED("Use LZ4_createStream() instead") LZ4LIB_API int LZ4_sizeofStreamState(void); -LZ4_DEPRECATED("Use LZ4_resetStream() instead") LZ4LIB_API int LZ4_resetStreamState(void *state, char *inputBuffer); -LZ4_DEPRECATED("Use LZ4_saveDict() instead") LZ4LIB_API char *LZ4_slideInputBuffer(void *state); +LZ4_DEPRECATED("Use LZ4_resetStream() instead") LZ4LIB_API int LZ4_resetStreamState(void* state, char* inputBuffer); +LZ4_DEPRECATED("Use LZ4_saveDict() instead") LZ4LIB_API char* LZ4_slideInputBuffer (void* state); /* Obsolete streaming decoding functions */ -LZ4_DEPRECATED("use LZ4_decompress_safe_usingDict() instead") LZ4LIB_API int LZ4_decompress_safe_withPrefix64k(const char *src, char *dst, int compressedSize, int maxDstSize); -LZ4_DEPRECATED("use LZ4_decompress_fast_usingDict() instead") LZ4LIB_API int LZ4_decompress_fast_withPrefix64k(const char *src, char *dst, int originalSize); +LZ4_DEPRECATED("use LZ4_decompress_safe_usingDict() instead") LZ4LIB_API int LZ4_decompress_safe_withPrefix64k (const char* src, char* dst, int compressedSize, int maxDstSize); +LZ4_DEPRECATED("use LZ4_decompress_fast_usingDict() instead") LZ4LIB_API int LZ4_decompress_fast_withPrefix64k (const char* src, char* dst, int originalSize); /*! LZ4_decompress_fast() : **unsafe!** * These functions used to be faster than LZ4_decompress_safe(), @@ -741,11 +760,11 @@ LZ4_DEPRECATED("use LZ4_decompress_fast_usingDict() instead") LZ4LIB_API int LZ4 */ LZ4_DEPRECATED("This function is deprecated and unsafe. Consider using LZ4_decompress_safe() instead") -LZ4LIB_API int LZ4_decompress_fast(const char *src, char *dst, int originalSize); +LZ4LIB_API int LZ4_decompress_fast (const char* src, char* dst, int originalSize); LZ4_DEPRECATED("This function is deprecated and unsafe. Consider using LZ4_decompress_safe_continue() instead") -LZ4LIB_API int LZ4_decompress_fast_continue(LZ4_streamDecode_t *LZ4_streamDecode, const char *src, char *dst, int originalSize); +LZ4LIB_API int LZ4_decompress_fast_continue (LZ4_streamDecode_t* LZ4_streamDecode, const char* src, char* dst, int originalSize); LZ4_DEPRECATED("This function is deprecated and unsafe. Consider using LZ4_decompress_safe_usingDict() instead") -LZ4LIB_API int LZ4_decompress_fast_usingDict(const char *src, char *dst, int originalSize, const char *dictStart, int dictSize); +LZ4LIB_API int LZ4_decompress_fast_usingDict (const char* src, char* dst, int originalSize, const char* dictStart, int dictSize); /*! LZ4_resetStream() : * An LZ4_stream_t structure must be initialized at least once. @@ -753,7 +772,7 @@ LZ4LIB_API int LZ4_decompress_fast_usingDict(const char *src, char *dst, int ori * Consider switching to LZ4_initStream(), * invoking LZ4_resetStream() will trigger deprecation warnings in the future. */ -LZ4LIB_API void LZ4_resetStream(LZ4_stream_t *streamPtr); +LZ4LIB_API void LZ4_resetStream (LZ4_stream_t* streamPtr); #endif /* LZ4_H_98237428734687 */ diff --git a/common/lz4/lz4hc.c b/common/lz4/lz4hc.c index a12cddccc..687f87e6f 100644 --- a/common/lz4/lz4hc.c +++ b/common/lz4/lz4hc.c @@ -84,18 +84,20 @@ typedef enum { noDictCtx, usingDictCtxHc } dictCtx_directive; /* Make fields passed to, and updated by LZ4HC_encodeSequence explicit */ #define UPDATABLE(ip, op, anchor) &ip, &op, &anchor -static U32 LZ4HC_hashPtr(const void *ptr) { return HASH_FUNCTION(LZ4_read32(ptr)); } +static U32 LZ4HC_hashPtr(const void* ptr) { return HASH_FUNCTION(LZ4_read32(ptr)); } /************************************** * HC Compression **************************************/ -static void LZ4HC_clearTables(LZ4HC_CCtx_internal *hc4) { - MEM_INIT((void *)hc4->hashTable, 0, sizeof(hc4->hashTable)); +static void LZ4HC_clearTables (LZ4HC_CCtx_internal* hc4) +{ + MEM_INIT((void*)hc4->hashTable, 0, sizeof(hc4->hashTable)); MEM_INIT(hc4->chainTable, 0xFF, sizeof(hc4->chainTable)); } -static void LZ4HC_init_internal(LZ4HC_CCtx_internal *hc4, const BYTE *start) { +static void LZ4HC_init_internal (LZ4HC_CCtx_internal* hc4, const BYTE* start) +{ uptrval startingOffset = (uptrval)(hc4->end - hc4->base); if (startingOffset > 1 GB) { LZ4HC_clearTables(hc4); @@ -112,17 +114,18 @@ static void LZ4HC_init_internal(LZ4HC_CCtx_internal *hc4, const BYTE *start) { /* Update chains up to ip (excluded) */ -LZ4_FORCE_INLINE void LZ4HC_Insert(LZ4HC_CCtx_internal *hc4, const BYTE *ip) { - U16 *const chainTable = hc4->chainTable; - U32 *const hashTable = hc4->hashTable; - const BYTE *const base = hc4->base; +LZ4_FORCE_INLINE void LZ4HC_Insert (LZ4HC_CCtx_internal* hc4, const BYTE* ip) +{ + U16* const chainTable = hc4->chainTable; + U32* const hashTable = hc4->hashTable; + const BYTE* const base = hc4->base; U32 const target = (U32)(ip - base); U32 idx = hc4->nextToUpdate; while (idx < target) { - U32 const h = LZ4HC_hashPtr(base + idx); + U32 const h = LZ4HC_hashPtr(base+idx); size_t delta = idx - hashTable[h]; - if (delta > LZ4_DISTANCE_MAX) delta = LZ4_DISTANCE_MAX; + if (delta>LZ4_DISTANCE_MAX) delta = LZ4_DISTANCE_MAX; DELTANEXTU16(chainTable, idx) = (U16)delta; hashTable[h] = idx; idx++; @@ -134,18 +137,17 @@ LZ4_FORCE_INLINE void LZ4HC_Insert(LZ4HC_CCtx_internal *hc4, const BYTE *ip) { /** LZ4HC_countBack() : * @return : negative value, nb of common bytes before ip/match */ LZ4_FORCE_INLINE -int LZ4HC_countBack(const BYTE *const ip, const BYTE *const match, - const BYTE *const iMin, const BYTE *const mMin) { +int LZ4HC_countBack(const BYTE* const ip, const BYTE* const match, + const BYTE* const iMin, const BYTE* const mMin) +{ int back = 0; int const min = (int)MAX(iMin - ip, mMin - match); assert(min <= 0); - assert(ip >= iMin); - assert((size_t)(ip - iMin) < (1U << 31)); - assert(match >= mMin); - assert((size_t)(match - mMin) < (1U << 31)); - while ((back > min) - && (ip[back - 1] == match[back - 1])) - back--; + assert(ip >= iMin); assert((size_t)(ip-iMin) < (1U<<31)); + assert(match >= mMin); assert((size_t)(match - mMin) < (1U<<31)); + while ( (back > min) + && (ip[back-1] == match[back-1]) ) + back--; return back; } @@ -156,7 +158,8 @@ int LZ4HC_countBack(const BYTE *const ip, const BYTE *const match, #endif -static U32 LZ4HC_rotatePattern(size_t const rotate, U32 const pattern) { +static U32 LZ4HC_rotatePattern(size_t const rotate, U32 const pattern) +{ size_t const bitsToRotate = (rotate & (sizeof(pattern) - 1)) << 3; if (bitsToRotate == 0) return pattern; @@ -166,30 +169,29 @@ static U32 LZ4HC_rotatePattern(size_t const rotate, U32 const pattern) { /* LZ4HC_countPattern() : * pattern32 must be a sample of repetitive pattern of length 1, 2 or 4 (but not 3!) */ static unsigned -LZ4HC_countPattern(const BYTE *ip, const BYTE *const iEnd, U32 const pattern32) { - const BYTE *const iStart = ip; - reg_t const pattern = (sizeof(pattern) == 8) ? (reg_t)pattern32 + (((reg_t)pattern32) << 32) : pattern32; +LZ4HC_countPattern(const BYTE* ip, const BYTE* const iEnd, U32 const pattern32) +{ + const BYTE* const iStart = ip; + reg_t const pattern = (sizeof(pattern)==8) ? (reg_t)pattern32 + (((reg_t)pattern32) << 32) : pattern32; - while (likely(ip < iEnd - (sizeof(pattern) - 1))) { + while (likely(ip < iEnd-(sizeof(pattern)-1))) { reg_t const diff = LZ4_read_ARCH(ip) ^ pattern; - if (!diff) { ip += sizeof(pattern); continue; } + if (!diff) { ip+=sizeof(pattern); continue; } ip += LZ4_NbCommonBytes(diff); return (unsigned)(ip - iStart); } if (LZ4_isLittleEndian()) { reg_t patternByte = pattern; - while ((ip < iEnd) && (*ip == (BYTE)patternByte)) { - ip++; - patternByte >>= 8; + while ((ip>= 8; } } else { /* big endian */ - U32 bitOffset = (sizeof(pattern) * 8) - 8; + U32 bitOffset = (sizeof(pattern)*8) - 8; while (ip < iEnd) { BYTE const byte = (BYTE)(pattern >> bitOffset); if (*ip != byte) break; - ip ++; - bitOffset -= 8; + ip ++; bitOffset -= 8; } } @@ -200,21 +202,19 @@ LZ4HC_countPattern(const BYTE *ip, const BYTE *const iEnd, U32 const pattern32) * pattern must be a sample of repetitive pattern of length 1, 2 or 4 (but not 3!) * read using natural platform endianess */ static unsigned -LZ4HC_reverseCountPattern(const BYTE *ip, const BYTE *const iLow, U32 pattern) { - const BYTE *const iStart = ip; +LZ4HC_reverseCountPattern(const BYTE* ip, const BYTE* const iLow, U32 pattern) +{ + const BYTE* const iStart = ip; - while (likely(ip >= iLow + 4)) { - if (LZ4_read32(ip - 4) != pattern) break; + while (likely(ip >= iLow+4)) { + if (LZ4_read32(ip-4) != pattern) break; ip -= 4; } - { - const BYTE *bytePtr = (const BYTE *)(&pattern) + 3; /* works for any endianess */ - while (likely(ip > iLow)) { + { const BYTE* bytePtr = (const BYTE*)(&pattern) + 3; /* works for any endianess */ + while (likely(ip>iLow)) { if (ip[-1] != *bytePtr) break; - ip--; - bytePtr--; - } - } + ip--; bytePtr--; + } } return (unsigned)(iStart - ip); } @@ -223,37 +223,39 @@ LZ4HC_reverseCountPattern(const BYTE *ip, const BYTE *const iLow, U32 pattern) { * 4 byte MINMATCH would overflow. * @returns true if the match index is okay. */ -static int LZ4HC_protectDictEnd(U32 const dictLimit, U32 const matchIndex) { +static int LZ4HC_protectDictEnd(U32 const dictLimit, U32 const matchIndex) +{ return ((U32)((dictLimit - 1) - matchIndex) >= 3); } typedef enum { rep_untested, rep_not, rep_confirmed } repeat_state_e; -typedef enum { favorCompressionRatio = 0, favorDecompressionSpeed } HCfavor_e; +typedef enum { favorCompressionRatio=0, favorDecompressionSpeed } HCfavor_e; LZ4_FORCE_INLINE int -LZ4HC_InsertAndGetWiderMatch( - LZ4HC_CCtx_internal *hc4, - const BYTE *const ip, - const BYTE *const iLowLimit, - const BYTE *const iHighLimit, +LZ4HC_InsertAndGetWiderMatch ( + LZ4HC_CCtx_internal* hc4, + const BYTE* const ip, + const BYTE* const iLowLimit, + const BYTE* const iHighLimit, int longest, - const BYTE **matchpos, - const BYTE **startpos, + const BYTE** matchpos, + const BYTE** startpos, const int maxNbAttempts, const int patternAnalysis, const int chainSwap, const dictCtx_directive dict, - const HCfavor_e favorDecSpeed) { - U16 *const chainTable = hc4->chainTable; - U32 *const HashTable = hc4->hashTable; - const LZ4HC_CCtx_internal *const dictCtx = hc4->dictCtx; - const BYTE *const base = hc4->base; + const HCfavor_e favorDecSpeed) +{ + U16* const chainTable = hc4->chainTable; + U32* const HashTable = hc4->hashTable; + const LZ4HC_CCtx_internal * const dictCtx = hc4->dictCtx; + const BYTE* const base = hc4->base; const U32 dictLimit = hc4->dictLimit; - const BYTE *const lowPrefixPtr = base + dictLimit; + const BYTE* const lowPrefixPtr = base + dictLimit; const U32 ipIndex = (U32)(ip - base); const U32 lowestMatchIndex = (hc4->lowLimit + (LZ4_DISTANCE_MAX + 1) > ipIndex) ? hc4->lowLimit : ipIndex - LZ4_DISTANCE_MAX; - const BYTE *const dictBase = hc4->dictBase; - int const lookBackLength = (int)(ip - iLowLimit); + const BYTE* const dictBase = hc4->dictBase; + int const lookBackLength = (int)(ip-iLowLimit); int nbAttempts = maxNbAttempts; U32 matchChainPos = 0; U32 const pattern = LZ4_read32(ip); @@ -266,53 +268,49 @@ LZ4HC_InsertAndGetWiderMatch( LZ4HC_Insert(hc4, ip); matchIndex = HashTable[LZ4HC_hashPtr(ip)]; DEBUGLOG(7, "First match at index %u / %u (lowestMatchIndex)", - matchIndex, lowestMatchIndex); + matchIndex, lowestMatchIndex); - while ((matchIndex >= lowestMatchIndex) && (nbAttempts)) { - int matchLength = 0; + while ((matchIndex>=lowestMatchIndex) && (nbAttempts)) { + int matchLength=0; nbAttempts--; assert(matchIndex < ipIndex); if (favorDecSpeed && (ipIndex - matchIndex < 8)) { /* do nothing */ } else if (matchIndex >= dictLimit) { /* within current Prefix */ - const BYTE *const matchPtr = base + matchIndex; + const BYTE* const matchPtr = base + matchIndex; assert(matchPtr >= lowPrefixPtr); assert(matchPtr < ip); assert(longest >= 1); if (LZ4_read16(iLowLimit + longest - 1) == LZ4_read16(matchPtr - lookBackLength + longest - 1)) { if (LZ4_read32(matchPtr) == pattern) { int const back = lookBackLength ? LZ4HC_countBack(ip, matchPtr, iLowLimit, lowPrefixPtr) : 0; - matchLength = MINMATCH + (int)LZ4_count(ip + MINMATCH, matchPtr + MINMATCH, iHighLimit); + matchLength = MINMATCH + (int)LZ4_count(ip+MINMATCH, matchPtr+MINMATCH, iHighLimit); matchLength -= back; if (matchLength > longest) { longest = matchLength; *matchpos = matchPtr + back; *startpos = ip + back; - } - } - } + } } } } else { /* lowestMatchIndex <= matchIndex < dictLimit */ - const BYTE *const matchPtr = dictBase + matchIndex; + const BYTE* const matchPtr = dictBase + matchIndex; if (LZ4_read32(matchPtr) == pattern) { - const BYTE *const dictStart = dictBase + hc4->lowLimit; + const BYTE* const dictStart = dictBase + hc4->lowLimit; int back = 0; - const BYTE *vLimit = ip + (dictLimit - matchIndex); + const BYTE* vLimit = ip + (dictLimit - matchIndex); if (vLimit > iHighLimit) vLimit = iHighLimit; - matchLength = (int)LZ4_count(ip + MINMATCH, matchPtr + MINMATCH, vLimit) + MINMATCH; - if ((ip + matchLength == vLimit) && (vLimit < iHighLimit)) - matchLength += LZ4_count(ip + matchLength, lowPrefixPtr, iHighLimit); + matchLength = (int)LZ4_count(ip+MINMATCH, matchPtr+MINMATCH, vLimit) + MINMATCH; + if ((ip+matchLength == vLimit) && (vLimit < iHighLimit)) + matchLength += LZ4_count(ip+matchLength, lowPrefixPtr, iHighLimit); back = lookBackLength ? LZ4HC_countBack(ip, matchPtr, iLowLimit, dictStart) : 0; matchLength -= back; if (matchLength > longest) { longest = matchLength; *matchpos = base + matchIndex + back; /* virtual pos, relative to ip, to retrieve offset */ *startpos = ip + back; - } - } - } + } } } - if (chainSwap && matchLength == longest) { /* better match => select a better chain */ - assert(lookBackLength == 0); /* search forward only */ + if (chainSwap && matchLength==longest) { /* better match => select a better chain */ + assert(lookBackLength==0); /* search forward only */ if (matchIndex + (U32)longest <= ipIndex) { int const kTrigger = 4; U32 distanceToNextMatch = 1; @@ -333,38 +331,33 @@ LZ4HC_InsertAndGetWiderMatch( if (distanceToNextMatch > matchIndex) break; /* avoid overflow */ matchIndex -= distanceToNextMatch; continue; - } - } - } + } } } - { - U32 const distNextMatch = DELTANEXTU16(chainTable, matchIndex); - if (patternAnalysis && distNextMatch == 1 && matchChainPos == 0) { - U32 const matchCandidateIdx = matchIndex - 1; + { U32 const distNextMatch = DELTANEXTU16(chainTable, matchIndex); + if (patternAnalysis && distNextMatch==1 && matchChainPos==0) { + U32 const matchCandidateIdx = matchIndex-1; /* may be a repeated pattern */ if (repeat == rep_untested) { - if (((pattern & 0xFFFF) == (pattern >> 16)) - & ((pattern & 0xFF) == (pattern >> 24))) { + if ( ((pattern & 0xFFFF) == (pattern >> 16)) + & ((pattern & 0xFF) == (pattern >> 24)) ) { repeat = rep_confirmed; - srcPatternLength = LZ4HC_countPattern(ip + sizeof(pattern), iHighLimit, pattern) + sizeof(pattern); + srcPatternLength = LZ4HC_countPattern(ip+sizeof(pattern), iHighLimit, pattern) + sizeof(pattern); } else { repeat = rep_not; - } - } - if ((repeat == rep_confirmed) && (matchCandidateIdx >= lowestMatchIndex) - && LZ4HC_protectDictEnd(dictLimit, matchCandidateIdx)) { + } } + if ( (repeat == rep_confirmed) && (matchCandidateIdx >= lowestMatchIndex) + && LZ4HC_protectDictEnd(dictLimit, matchCandidateIdx) ) { const int extDict = matchCandidateIdx < dictLimit; - const BYTE *const matchPtr = (extDict ? dictBase : base) + matchCandidateIdx; + const BYTE* const matchPtr = (extDict ? dictBase : base) + matchCandidateIdx; if (LZ4_read32(matchPtr) == pattern) { /* good candidate */ - const BYTE *const dictStart = dictBase + hc4->lowLimit; - const BYTE *const iLimit = extDict ? dictBase + dictLimit : iHighLimit; - size_t forwardPatternLength = LZ4HC_countPattern(matchPtr + sizeof(pattern), iLimit, pattern) + sizeof(pattern); + const BYTE* const dictStart = dictBase + hc4->lowLimit; + const BYTE* const iLimit = extDict ? dictBase + dictLimit : iHighLimit; + size_t forwardPatternLength = LZ4HC_countPattern(matchPtr+sizeof(pattern), iLimit, pattern) + sizeof(pattern); if (extDict && matchPtr + forwardPatternLength == iLimit) { U32 const rotatedPattern = LZ4HC_rotatePattern(forwardPatternLength, pattern); forwardPatternLength += LZ4HC_countPattern(lowPrefixPtr, iHighLimit, rotatedPattern); } - { - const BYTE *const lowestMatchPtr = extDict ? dictStart : lowPrefixPtr; + { const BYTE* const lowestMatchPtr = extDict ? dictStart : lowPrefixPtr; size_t backLength = LZ4HC_reverseCountPattern(matchPtr, lowestMatchPtr, pattern); size_t currentSegmentLength; if (!extDict && matchPtr - backLength == lowPrefixPtr && hc4->lowLimit < dictLimit) { @@ -376,8 +369,8 @@ LZ4HC_InsertAndGetWiderMatch( assert(matchCandidateIdx - backLength >= lowestMatchIndex); currentSegmentLength = backLength + forwardPatternLength; /* Adjust to end of pattern if the source pattern fits, otherwise the beginning of the pattern */ - if ((currentSegmentLength >= srcPatternLength) /* current pattern segment large enough to contain full srcPatternLength */ - && (forwardPatternLength <= srcPatternLength)) { /* haven't reached this position yet */ + if ( (currentSegmentLength >= srcPatternLength) /* current pattern segment large enough to contain full srcPatternLength */ + && (forwardPatternLength <= srcPatternLength) ) { /* haven't reached this position yet */ U32 const newMatchIndex = matchCandidateIdx + (U32)forwardPatternLength - (U32)srcPatternLength; /* best position, full pattern, might be followed by more match */ if (LZ4HC_protectDictEnd(dictLimit, newMatchIndex)) matchIndex = newMatchIndex; @@ -393,114 +386,105 @@ LZ4HC_InsertAndGetWiderMatch( matchIndex = dictLimit; } else { matchIndex = newMatchIndex; - if (lookBackLength == 0) { /* no back possible */ + if (lookBackLength==0) { /* no back possible */ size_t const maxML = MIN(currentSegmentLength, srcPatternLength); if ((size_t)longest < maxML) { - assert(base + matchIndex < ip); - if (ip - (base + matchIndex) > LZ4_DISTANCE_MAX) break; + assert(base + matchIndex != ip); + if ((size_t)(ip - base) - matchIndex > LZ4_DISTANCE_MAX) break; assert(maxML < 2 GB); longest = (int)maxML; *matchpos = base + matchIndex; /* virtual pos, relative to ip, to retrieve offset */ *startpos = ip; } - { - U32 const distToNextPattern = DELTANEXTU16(chainTable, matchIndex); + { U32 const distToNextPattern = DELTANEXTU16(chainTable, matchIndex); if (distToNextPattern > matchIndex) break; /* avoid overflow */ matchIndex -= distToNextPattern; - } - } - } - } - } + } } } } } continue; - } - } - } - } /* PA optimization */ + } } + } } /* PA optimization */ /* follow current chain */ matchIndex -= DELTANEXTU16(chainTable, matchIndex + matchChainPos); } /* while ((matchIndex>=lowestMatchIndex) && (nbAttempts)) */ - if (dict == usingDictCtxHc - && nbAttempts - && ipIndex - lowestMatchIndex < LZ4_DISTANCE_MAX) { + if ( dict == usingDictCtxHc + && nbAttempts + && ipIndex - lowestMatchIndex < LZ4_DISTANCE_MAX) { size_t const dictEndOffset = (size_t)(dictCtx->end - dictCtx->base); U32 dictMatchIndex = dictCtx->hashTable[LZ4HC_hashPtr(ip)]; assert(dictEndOffset <= 1 GB); matchIndex = dictMatchIndex + lowestMatchIndex - (U32)dictEndOffset; while (ipIndex - matchIndex <= LZ4_DISTANCE_MAX && nbAttempts--) { - const BYTE *const matchPtr = dictCtx->base + dictMatchIndex; + const BYTE* const matchPtr = dictCtx->base + dictMatchIndex; if (LZ4_read32(matchPtr) == pattern) { int mlt; int back = 0; - const BYTE *vLimit = ip + (dictEndOffset - dictMatchIndex); + const BYTE* vLimit = ip + (dictEndOffset - dictMatchIndex); if (vLimit > iHighLimit) vLimit = iHighLimit; - mlt = (int)LZ4_count(ip + MINMATCH, matchPtr + MINMATCH, vLimit) + MINMATCH; + mlt = (int)LZ4_count(ip+MINMATCH, matchPtr+MINMATCH, vLimit) + MINMATCH; back = lookBackLength ? LZ4HC_countBack(ip, matchPtr, iLowLimit, dictCtx->base + dictCtx->dictLimit) : 0; mlt -= back; if (mlt > longest) { longest = mlt; *matchpos = base + matchIndex + back; *startpos = ip + back; - } - } + } } - { - U32 const nextOffset = DELTANEXTU16(dictCtx->chainTable, dictMatchIndex); + { U32 const nextOffset = DELTANEXTU16(dictCtx->chainTable, dictMatchIndex); dictMatchIndex -= nextOffset; matchIndex -= nextOffset; - } - } - } + } } } return longest; } LZ4_FORCE_INLINE -int LZ4HC_InsertAndFindBestMatch(LZ4HC_CCtx_internal *const hc4, /* Index table will be updated */ - const BYTE *const ip, const BYTE *const iLimit, - const BYTE **matchpos, +int LZ4HC_InsertAndFindBestMatch(LZ4HC_CCtx_internal* const hc4, /* Index table will be updated */ + const BYTE* const ip, const BYTE* const iLimit, + const BYTE** matchpos, const int maxNbAttempts, const int patternAnalysis, - const dictCtx_directive dict) { - const BYTE *uselessPtr = ip; + const dictCtx_directive dict) +{ + const BYTE* uselessPtr = ip; /* note : LZ4HC_InsertAndGetWiderMatch() is able to modify the starting position of a match (*startpos), * but this won't be the case here, as we define iLowLimit==ip, * so LZ4HC_InsertAndGetWiderMatch() won't be allowed to search past ip */ - return LZ4HC_InsertAndGetWiderMatch(hc4, ip, ip, iLimit, MINMATCH - 1, matchpos, &uselessPtr, maxNbAttempts, patternAnalysis, 0 /*chainSwap*/, dict, favorCompressionRatio); + return LZ4HC_InsertAndGetWiderMatch(hc4, ip, ip, iLimit, MINMATCH-1, matchpos, &uselessPtr, maxNbAttempts, patternAnalysis, 0 /*chainSwap*/, dict, favorCompressionRatio); } /* LZ4HC_encodeSequence() : * @return : 0 if ok, * 1 if buffer issue detected */ -LZ4_FORCE_INLINE int LZ4HC_encodeSequence( - const BYTE **ip, - BYTE **op, - const BYTE **anchor, +LZ4_FORCE_INLINE int LZ4HC_encodeSequence ( + const BYTE** ip, + BYTE** op, + const BYTE** anchor, int matchLength, - const BYTE *const match, + const BYTE* const match, limitedOutput_directive limit, - BYTE *oend) { + BYTE* oend) +{ size_t length; - BYTE *const token = (*op)++; + BYTE* const token = (*op)++; #if defined(LZ4_DEBUG) && (LZ4_DEBUG >= 6) - static const BYTE *start = NULL; + static const BYTE* start = NULL; static U32 totalCost = 0; - U32 const pos = (start == NULL) ? 0 : (U32)(*anchor - start); + U32 const pos = (start==NULL) ? 0 : (U32)(*anchor - start); U32 const ll = (U32)(*ip - *anchor); - U32 const llAdd = (ll >= 15) ? ((ll - 15) / 255) + 1 : 0; - U32 const mlAdd = (matchLength >= 19) ? ((matchLength - 19) / 255) + 1 : 0; + U32 const llAdd = (ll>=15) ? ((ll-15) / 255) + 1 : 0; + U32 const mlAdd = (matchLength>=19) ? ((matchLength-19) / 255) + 1 : 0; U32 const cost = 1 + llAdd + ll + 2 + mlAdd; - if (start == NULL) start = *anchor; /* only works for single segment */ + if (start==NULL) start = *anchor; /* only works for single segment */ /* g_debuglog_enable = (pos >= 2228) & (pos <= 2262); */ DEBUGLOG(6, "pos:%7u -- literals:%3u, match:%4i, offset:%5u, cost:%3u + %u", - pos, - (U32)(*ip - *anchor), matchLength, (U32)(*ip - match), - cost, totalCost); + pos, + (U32)(*ip - *anchor), matchLength, (U32)(*ip-match), + cost, totalCost); totalCost += cost; #endif @@ -510,7 +494,7 @@ LZ4_FORCE_INLINE int LZ4HC_encodeSequence( if (length >= RUN_MASK) { size_t len = length - RUN_MASK; *token = (RUN_MASK << ML_BITS); - for (; len >= 255 ; len -= 255) * (*op)++ = 255; + for(; len >= 255 ; len -= 255) *(*op)++ = 255; *(*op)++ = (BYTE)len; } else { *token = (BYTE)(length << ML_BITS); @@ -521,9 +505,8 @@ LZ4_FORCE_INLINE int LZ4HC_encodeSequence( *op += length; /* Encode Offset */ - assert((*ip - match) <= LZ4_DISTANCE_MAX); /* note : consider providing offset as a value, rather than as a pointer difference */ - LZ4_writeLE16(*op, (U16)(*ip - match)); - *op += 2; + assert( (*ip - match) <= LZ4_DISTANCE_MAX ); /* note : consider providing offset as a value, rather than as a pointer difference */ + LZ4_writeLE16(*op, (U16)(*ip-match)); *op += 2; /* Encode MatchLength */ assert(matchLength >= MINMATCH); @@ -532,7 +515,7 @@ LZ4_FORCE_INLINE int LZ4HC_encodeSequence( if (length >= ML_MASK) { *token += ML_MASK; length -= ML_MASK; - for (; length >= 510 ; length -= 510) { *(*op)++ = 255; *(*op)++ = 255; } + for(; length >= 510 ; length -= 510) { *(*op)++ = 255; *(*op)++ = 255; } if (length >= 255) { length -= 255; *(*op)++ = 255; } *(*op)++ = (BYTE)length; } else { @@ -546,37 +529,38 @@ LZ4_FORCE_INLINE int LZ4HC_encodeSequence( return 0; } -LZ4_FORCE_INLINE int LZ4HC_compress_hashChain( - LZ4HC_CCtx_internal *const ctx, - const char *const source, - char *const dest, - int *srcSizePtr, +LZ4_FORCE_INLINE int LZ4HC_compress_hashChain ( + LZ4HC_CCtx_internal* const ctx, + const char* const source, + char* const dest, + int* srcSizePtr, int const maxOutputSize, unsigned maxNbAttempts, const limitedOutput_directive limit, const dictCtx_directive dict -) { + ) +{ const int inputSize = *srcSizePtr; const int patternAnalysis = (maxNbAttempts > 128); /* levels 9+ */ - const BYTE *ip = (const BYTE *) source; - const BYTE *anchor = ip; - const BYTE *const iend = ip + inputSize; - const BYTE *const mflimit = iend - MFLIMIT; - const BYTE *const matchlimit = (iend - LASTLITERALS); + const BYTE* ip = (const BYTE*) source; + const BYTE* anchor = ip; + const BYTE* const iend = ip + inputSize; + const BYTE* const mflimit = iend - MFLIMIT; + const BYTE* const matchlimit = (iend - LASTLITERALS); - BYTE *optr = (BYTE *) dest; - BYTE *op = (BYTE *) dest; - BYTE *oend = op + maxOutputSize; + BYTE* optr = (BYTE*) dest; + BYTE* op = (BYTE*) dest; + BYTE* oend = op + maxOutputSize; int ml0, ml, ml2, ml3; - const BYTE *start0; - const BYTE *ref0; - const BYTE *ref = NULL; - const BYTE *start2 = NULL; - const BYTE *ref2 = NULL; - const BYTE *start3 = NULL; - const BYTE *ref3 = NULL; + const BYTE* start0; + const BYTE* ref0; + const BYTE* ref = NULL; + const BYTE* start2 = NULL; + const BYTE* ref2 = NULL; + const BYTE* start3 = NULL; + const BYTE* ref3 = NULL; /* init */ *srcSizePtr = 0; @@ -586,18 +570,16 @@ LZ4_FORCE_INLINE int LZ4HC_compress_hashChain( /* Main Loop */ while (ip <= mflimit) { ml = LZ4HC_InsertAndFindBestMatch(ctx, ip, matchlimit, &ref, maxNbAttempts, patternAnalysis, dict); - if (ml < MINMATCH) { ip++; continue; } + if (ml OPTIMAL_ML) new_ml = OPTIMAL_ML; - if (ip + new_ml > start2 + ml2 - MINMATCH) new_ml = (int)(start2 - ip) + ml2 - MINMATCH; + if (ip+new_ml > start2 + ml2 - MINMATCH) new_ml = (int)(start2 - ip) + ml2 - MINMATCH; correction = new_ml - (int)(start2 - ip); if (correction > 0) { start2 += correction; @@ -644,15 +623,15 @@ _Search3: if (start2 + ml2 <= mflimit) { ml3 = LZ4HC_InsertAndGetWiderMatch(ctx, - start2 + ml2 - 3, start2, matchlimit, ml2, &ref3, &start3, - maxNbAttempts, patternAnalysis, 0, dict, favorCompressionRatio); + start2 + ml2 - 3, start2, matchlimit, ml2, &ref3, &start3, + maxNbAttempts, patternAnalysis, 0, dict, favorCompressionRatio); } else { ml3 = ml2; } if (ml3 == ml2) { /* No better match => encode ML1 and ML2 */ /* ip & ref are known; Now for ml */ - if (start2 < ip + ml) ml = (int)(start2 - ip); + if (start2 < ip+ml) ml = (int)(start2 - ip); /* Now, encode 2 sequences */ optr = op; if (LZ4HC_encodeSequence(UPDATABLE(ip, op, anchor), ml, ref, limit, oend)) goto _dest_overflow; @@ -662,10 +641,10 @@ _Search3: continue; } - if (start3 < ip + ml + 3) { /* Not enough space for match 2 : remove it */ - if (start3 >= (ip + ml)) { /* can write Seq1 immediately ==> Seq2 is removed, so Seq3 becomes Seq1 */ - if (start2 < ip + ml) { - int correction = (int)(ip + ml - start2); + if (start3 < ip+ml+3) { /* Not enough space for match 2 : remove it */ + if (start3 >= (ip+ml)) { /* can write Seq1 immediately ==> Seq2 is removed, so Seq3 becomes Seq1 */ + if (start2 < ip+ml) { + int correction = (int)(ip+ml - start2); start2 += correction; ref2 += correction; ml2 -= correction; @@ -699,7 +678,7 @@ _Search3: * let's write the first one ML1. * ip & ref are known; Now decide ml. */ - if (start2 < ip + ml) { + if (start2 < ip+ml) { if ((start2 - ip) < OPTIMAL_ML) { int correction; if (ml > OPTIMAL_ML) ml = OPTIMAL_ML; @@ -718,14 +697,10 @@ _Search3: if (LZ4HC_encodeSequence(UPDATABLE(ip, op, anchor), ml, ref, limit, oend)) goto _dest_overflow; /* ML2 becomes ML1 */ - ip = start2; - ref = ref2; - ml = ml2; + ip = start2; ref = ref2; ml = ml2; /* ML3 becomes ML2 */ - start2 = start3; - ref2 = ref3; - ml2 = ml3; + start2 = start3; ref2 = ref3; ml2 = ml3; /* let's find a new ML3 */ goto _Search3; @@ -733,8 +708,7 @@ _Search3: _last_literals: /* Encode Last Literals */ - { - size_t lastRunSize = (size_t)(iend - anchor); /* literals */ + { size_t lastRunSize = (size_t)(iend - anchor); /* literals */ size_t litLength = (lastRunSize + 255 - RUN_MASK) / 255; size_t const totalSize = 1 + litLength + lastRunSize; if (limit == fillOutput) oend += LASTLITERALS; /* restore correct value */ @@ -750,7 +724,7 @@ _last_literals: if (lastRunSize >= RUN_MASK) { size_t accumulator = lastRunSize - RUN_MASK; *op++ = (RUN_MASK << ML_BITS); - for (; accumulator >= 255 ; accumulator -= 255) * op++ = 255; + for(; accumulator >= 255 ; accumulator -= 255) *op++ = 255; *op++ = (BYTE) accumulator; } else { *op++ = (BYTE)(lastRunSize << ML_BITS); @@ -760,8 +734,8 @@ _last_literals: } /* End */ - *srcSizePtr = (int)(((const char *)ip) - source); - return (int)(((char *)op) - dest); + *srcSizePtr = (int) (((const char*)ip) - source); + return (int) (((char*)op)-dest); _dest_overflow: if (limit == fillOutput) { @@ -772,32 +746,33 @@ _dest_overflow: } -static int LZ4HC_compress_optimal(LZ4HC_CCtx_internal *ctx, - const char *const source, char *dst, - int *srcSizePtr, int dstCapacity, - int const nbSearches, size_t sufficient_len, - const limitedOutput_directive limit, int const fullUpdate, - const dictCtx_directive dict, - HCfavor_e favorDecSpeed); +static int LZ4HC_compress_optimal( LZ4HC_CCtx_internal* ctx, + const char* const source, char* dst, + int* srcSizePtr, int dstCapacity, + int const nbSearches, size_t sufficient_len, + const limitedOutput_directive limit, int const fullUpdate, + const dictCtx_directive dict, + HCfavor_e favorDecSpeed); -LZ4_FORCE_INLINE int LZ4HC_compress_generic_internal( - LZ4HC_CCtx_internal *const ctx, - const char *const src, - char *const dst, - int *const srcSizePtr, +LZ4_FORCE_INLINE int LZ4HC_compress_generic_internal ( + LZ4HC_CCtx_internal* const ctx, + const char* const src, + char* const dst, + int* const srcSizePtr, int const dstCapacity, int cLevel, const limitedOutput_directive limit, const dictCtx_directive dict -) { + ) +{ typedef enum { lz4hc, lz4opt } lz4hc_strat_e; typedef struct { lz4hc_strat_e strat; U32 nbSearches; U32 targetLength; } cParams_t; - static const cParams_t clTable[LZ4HC_CLEVEL_MAX + 1] = { + static const cParams_t clTable[LZ4HC_CLEVEL_MAX+1] = { { lz4hc, 2, 16 }, /* 0, unused */ { lz4hc, 2, 16 }, /* 1, unused */ { lz4hc, 2, 16 }, /* 2, unused */ @@ -809,8 +784,8 @@ LZ4_FORCE_INLINE int LZ4HC_compress_generic_internal( { lz4hc, 128, 16 }, /* 8 */ { lz4hc, 256, 16 }, /* 9 */ { lz4opt, 96, 64 }, /*10==LZ4HC_CLEVEL_OPT_MIN*/ - { lz4opt, 512, 128 }, /*11 */ - { lz4opt, 16384, LZ4_OPT_NUM }, /* 12==LZ4HC_CLEVEL_MAX */ + { lz4opt, 512,128 }, /*11 */ + { lz4opt,16384,LZ4_OPT_NUM }, /* 12==LZ4HC_CLEVEL_MAX */ }; DEBUGLOG(4, "LZ4HC_compress_generic(ctx=%p, src=%p, srcSize=%d)", ctx, src, *srcSizePtr); @@ -821,54 +796,55 @@ LZ4_FORCE_INLINE int LZ4HC_compress_generic_internal( ctx->end += *srcSizePtr; if (cLevel < 1) cLevel = LZ4HC_CLEVEL_DEFAULT; /* note : convention is different from lz4frame, maybe something to review */ cLevel = MIN(LZ4HC_CLEVEL_MAX, cLevel); - { - cParams_t const cParam = clTable[cLevel]; + { cParams_t const cParam = clTable[cLevel]; HCfavor_e const favor = ctx->favorDecSpeed ? favorDecompressionSpeed : favorCompressionRatio; int result; if (cParam.strat == lz4hc) { result = LZ4HC_compress_hashChain(ctx, - src, dst, srcSizePtr, dstCapacity, - cParam.nbSearches, limit, dict); + src, dst, srcSizePtr, dstCapacity, + cParam.nbSearches, limit, dict); } else { assert(cParam.strat == lz4opt); result = LZ4HC_compress_optimal(ctx, - src, dst, srcSizePtr, dstCapacity, - (int)cParam.nbSearches, cParam.targetLength, limit, - cLevel == LZ4HC_CLEVEL_MAX, /* ultra mode */ - dict, favor); + src, dst, srcSizePtr, dstCapacity, + (int)cParam.nbSearches, cParam.targetLength, limit, + cLevel == LZ4HC_CLEVEL_MAX, /* ultra mode */ + dict, favor); } if (result <= 0) ctx->dirty = 1; return result; } } -static void LZ4HC_setExternalDict(LZ4HC_CCtx_internal *ctxPtr, const BYTE *newBlock); +static void LZ4HC_setExternalDict(LZ4HC_CCtx_internal* ctxPtr, const BYTE* newBlock); static int -LZ4HC_compress_generic_noDictCtx( - LZ4HC_CCtx_internal *const ctx, - const char *const src, - char *const dst, - int *const srcSizePtr, - int const dstCapacity, - int cLevel, - limitedOutput_directive limit -) { +LZ4HC_compress_generic_noDictCtx ( + LZ4HC_CCtx_internal* const ctx, + const char* const src, + char* const dst, + int* const srcSizePtr, + int const dstCapacity, + int cLevel, + limitedOutput_directive limit + ) +{ assert(ctx->dictCtx == NULL); return LZ4HC_compress_generic_internal(ctx, src, dst, srcSizePtr, dstCapacity, cLevel, limit, noDictCtx); } static int -LZ4HC_compress_generic_dictCtx( - LZ4HC_CCtx_internal *const ctx, - const char *const src, - char *const dst, - int *const srcSizePtr, - int const dstCapacity, - int cLevel, - limitedOutput_directive limit -) { +LZ4HC_compress_generic_dictCtx ( + LZ4HC_CCtx_internal* const ctx, + const char* const src, + char* const dst, + int* const srcSizePtr, + int const dstCapacity, + int cLevel, + limitedOutput_directive limit + ) +{ const size_t position = (size_t)(ctx->end - ctx->base) - ctx->lowLimit; assert(ctx->dictCtx != NULL); if (position >= 64 KB) { @@ -885,15 +861,16 @@ LZ4HC_compress_generic_dictCtx( } static int -LZ4HC_compress_generic( - LZ4HC_CCtx_internal *const ctx, - const char *const src, - char *const dst, - int *const srcSizePtr, - int const dstCapacity, - int cLevel, - limitedOutput_directive limit -) { +LZ4HC_compress_generic ( + LZ4HC_CCtx_internal* const ctx, + const char* const src, + char* const dst, + int* const srcSizePtr, + int const dstCapacity, + int cLevel, + limitedOutput_directive limit + ) +{ if (ctx->dictCtx == NULL) { return LZ4HC_compress_generic_noDictCtx(ctx, src, dst, srcSizePtr, dstCapacity, cLevel, limit); } else { @@ -907,42 +884,46 @@ int LZ4_sizeofStateHC(void) { return (int)sizeof(LZ4_streamHC_t); } #ifndef _MSC_VER /* for some reason, Visual fails the aligment test on 32-bit x86 : * it reports an aligment of 8-bytes, * while actually aligning LZ4_streamHC_t on 4 bytes. */ -static size_t LZ4_streamHC_t_alignment(void) { - struct { char c; LZ4_streamHC_t t; } t_a; - return sizeof(t_a) - sizeof(t_a.t); +static size_t LZ4_streamHC_t_alignment(void) +{ + typedef struct { char c; LZ4_streamHC_t t; } t_a; + return sizeof(t_a) - sizeof(LZ4_streamHC_t); } #endif /* state is presumed correctly initialized, * in which case its size and alignment have already been validate */ -int LZ4_compress_HC_extStateHC_fastReset(void *state, const char *src, char *dst, int srcSize, int dstCapacity, int compressionLevel) { - LZ4HC_CCtx_internal *const ctx = &((LZ4_streamHC_t *)state)->internal_donotuse; +int LZ4_compress_HC_extStateHC_fastReset (void* state, const char* src, char* dst, int srcSize, int dstCapacity, int compressionLevel) +{ + LZ4HC_CCtx_internal* const ctx = &((LZ4_streamHC_t*)state)->internal_donotuse; #ifndef _MSC_VER /* for some reason, Visual fails the aligment test on 32-bit x86 : * it reports an aligment of 8-bytes, * while actually aligning LZ4_streamHC_t on 4 bytes. */ assert(((size_t)state & (LZ4_streamHC_t_alignment() - 1)) == 0); /* check alignment */ #endif - if (((size_t)(state) & (sizeof(void *) -1)) != 0) return 0; /* Error : state is not aligned for pointers (32 or 64 bits) */ - LZ4_resetStreamHC_fast((LZ4_streamHC_t *)state, compressionLevel); - LZ4HC_init_internal(ctx, (const BYTE *)src); + if (((size_t)(state)&(sizeof(void*)-1)) != 0) return 0; /* Error : state is not aligned for pointers (32 or 64 bits) */ + LZ4_resetStreamHC_fast((LZ4_streamHC_t*)state, compressionLevel); + LZ4HC_init_internal (ctx, (const BYTE*)src); if (dstCapacity < LZ4_compressBound(srcSize)) - return LZ4HC_compress_generic(ctx, src, dst, &srcSize, dstCapacity, compressionLevel, limitedOutput); + return LZ4HC_compress_generic (ctx, src, dst, &srcSize, dstCapacity, compressionLevel, limitedOutput); else - return LZ4HC_compress_generic(ctx, src, dst, &srcSize, dstCapacity, compressionLevel, notLimited); + return LZ4HC_compress_generic (ctx, src, dst, &srcSize, dstCapacity, compressionLevel, notLimited); } -int LZ4_compress_HC_extStateHC(void *state, const char *src, char *dst, int srcSize, int dstCapacity, int compressionLevel) { - LZ4_streamHC_t *const ctx = LZ4_initStreamHC(state, sizeof(*ctx)); - if (ctx == NULL) return 0; /* init failure */ +int LZ4_compress_HC_extStateHC (void* state, const char* src, char* dst, int srcSize, int dstCapacity, int compressionLevel) +{ + LZ4_streamHC_t* const ctx = LZ4_initStreamHC(state, sizeof(*ctx)); + if (ctx==NULL) return 0; /* init failure */ return LZ4_compress_HC_extStateHC_fastReset(state, src, dst, srcSize, dstCapacity, compressionLevel); } -int LZ4_compress_HC(const char *src, char *dst, int srcSize, int dstCapacity, int compressionLevel) { +int LZ4_compress_HC(const char* src, char* dst, int srcSize, int dstCapacity, int compressionLevel) +{ #if defined(LZ4HC_HEAPMODE) && LZ4HC_HEAPMODE==1 - LZ4_streamHC_t *const statePtr = (LZ4_streamHC_t *)ALLOC(sizeof(LZ4_streamHC_t)); + LZ4_streamHC_t* const statePtr = (LZ4_streamHC_t*)ALLOC(sizeof(LZ4_streamHC_t)); #else LZ4_streamHC_t state; - LZ4_streamHC_t *const statePtr = &state; + LZ4_streamHC_t* const statePtr = &state; #endif int const cSize = LZ4_compress_HC_extStateHC(statePtr, src, dst, srcSize, dstCapacity, compressionLevel); #if defined(LZ4HC_HEAPMODE) && LZ4HC_HEAPMODE==1 @@ -952,10 +933,11 @@ int LZ4_compress_HC(const char *src, char *dst, int srcSize, int dstCapacity, in } /* state is presumed sized correctly (>= sizeof(LZ4_streamHC_t)) */ -int LZ4_compress_HC_destSize(void *state, const char *source, char *dest, int *sourceSizePtr, int targetDestSize, int cLevel) { - LZ4_streamHC_t *const ctx = LZ4_initStreamHC(state, sizeof(*ctx)); - if (ctx == NULL) return 0; /* init failure */ - LZ4HC_init_internal(&ctx->internal_donotuse, (const BYTE *) source); +int LZ4_compress_HC_destSize(void* state, const char* source, char* dest, int* sourceSizePtr, int targetDestSize, int cLevel) +{ + LZ4_streamHC_t* const ctx = LZ4_initStreamHC(state, sizeof(*ctx)); + if (ctx==NULL) return 0; /* init failure */ + LZ4HC_init_internal(&ctx->internal_donotuse, (const BYTE*) source); LZ4_setCompressionLevel(ctx, cLevel); return LZ4HC_compress_generic(&ctx->internal_donotuse, source, dest, sourceSizePtr, targetDestSize, cLevel, fillOutput); } @@ -966,14 +948,16 @@ int LZ4_compress_HC_destSize(void *state, const char *source, char *dest, int *s * Streaming Functions **************************************/ /* allocation */ -LZ4_streamHC_t *LZ4_createStreamHC(void) { - LZ4_streamHC_t *const LZ4_streamHCPtr = (LZ4_streamHC_t *)ALLOC(sizeof(LZ4_streamHC_t)); - if (LZ4_streamHCPtr == NULL) return NULL; +LZ4_streamHC_t* LZ4_createStreamHC(void) +{ + LZ4_streamHC_t* const LZ4_streamHCPtr = (LZ4_streamHC_t*)ALLOC(sizeof(LZ4_streamHC_t)); + if (LZ4_streamHCPtr==NULL) return NULL; LZ4_initStreamHC(LZ4_streamHCPtr, sizeof(*LZ4_streamHCPtr)); /* full initialization, malloc'ed buffer can be full of garbage */ return LZ4_streamHCPtr; } -int LZ4_freeStreamHC(LZ4_streamHC_t *LZ4_streamHCPtr) { +int LZ4_freeStreamHC (LZ4_streamHC_t* LZ4_streamHCPtr) +{ DEBUGLOG(4, "LZ4_freeStreamHC(%p)", LZ4_streamHCPtr); if (!LZ4_streamHCPtr) return 0; /* support free on NULL */ FREEMEM(LZ4_streamHCPtr); @@ -981,8 +965,9 @@ int LZ4_freeStreamHC(LZ4_streamHC_t *LZ4_streamHCPtr) { } -LZ4_streamHC_t *LZ4_initStreamHC(void *buffer, size_t size) { - LZ4_streamHC_t *const LZ4_streamHCPtr = (LZ4_streamHC_t *)buffer; +LZ4_streamHC_t* LZ4_initStreamHC (void* buffer, size_t size) +{ + LZ4_streamHC_t* const LZ4_streamHCPtr = (LZ4_streamHC_t*)buffer; if (buffer == NULL) return NULL; if (size < sizeof(LZ4_streamHC_t)) return NULL; #ifndef _MSC_VER /* for some reason, Visual fails the aligment test on 32-bit x86 : @@ -994,7 +979,7 @@ LZ4_streamHC_t *LZ4_initStreamHC(void *buffer, size_t size) { LZ4_STATIC_ASSERT(sizeof(LZ4HC_CCtx_internal) <= LZ4_STREAMHCSIZE); DEBUGLOG(4, "LZ4_initStreamHC(%p, %u)", LZ4_streamHCPtr, (unsigned)size); /* end-base will trigger a clearTable on starting compression */ - LZ4_streamHCPtr->internal_donotuse.end = (const BYTE *)(ptrdiff_t) -1; + LZ4_streamHCPtr->internal_donotuse.end = (const BYTE *)(ptrdiff_t)-1; LZ4_streamHCPtr->internal_donotuse.base = NULL; LZ4_streamHCPtr->internal_donotuse.dictCtx = NULL; LZ4_streamHCPtr->internal_donotuse.favorDecSpeed = 0; @@ -1004,12 +989,14 @@ LZ4_streamHC_t *LZ4_initStreamHC(void *buffer, size_t size) { } /* just a stub */ -void LZ4_resetStreamHC(LZ4_streamHC_t *LZ4_streamHCPtr, int compressionLevel) { +void LZ4_resetStreamHC (LZ4_streamHC_t* LZ4_streamHCPtr, int compressionLevel) +{ LZ4_initStreamHC(LZ4_streamHCPtr, sizeof(*LZ4_streamHCPtr)); LZ4_setCompressionLevel(LZ4_streamHCPtr, compressionLevel); } -void LZ4_resetStreamHC_fast(LZ4_streamHC_t *LZ4_streamHCPtr, int compressionLevel) { +void LZ4_resetStreamHC_fast (LZ4_streamHC_t* LZ4_streamHCPtr, int compressionLevel) +{ DEBUGLOG(4, "LZ4_resetStreamHC_fast(%p, %d)", LZ4_streamHCPtr, compressionLevel); if (LZ4_streamHCPtr->internal_donotuse.dirty) { LZ4_initStreamHC(LZ4_streamHCPtr, sizeof(*LZ4_streamHCPtr)); @@ -1022,37 +1009,39 @@ void LZ4_resetStreamHC_fast(LZ4_streamHC_t *LZ4_streamHCPtr, int compressionLeve LZ4_setCompressionLevel(LZ4_streamHCPtr, compressionLevel); } -void LZ4_setCompressionLevel(LZ4_streamHC_t *LZ4_streamHCPtr, int compressionLevel) { +void LZ4_setCompressionLevel(LZ4_streamHC_t* LZ4_streamHCPtr, int compressionLevel) +{ DEBUGLOG(5, "LZ4_setCompressionLevel(%p, %d)", LZ4_streamHCPtr, compressionLevel); if (compressionLevel < 1) compressionLevel = LZ4HC_CLEVEL_DEFAULT; if (compressionLevel > LZ4HC_CLEVEL_MAX) compressionLevel = LZ4HC_CLEVEL_MAX; LZ4_streamHCPtr->internal_donotuse.compressionLevel = (short)compressionLevel; } -void LZ4_favorDecompressionSpeed(LZ4_streamHC_t *LZ4_streamHCPtr, int favor) { - LZ4_streamHCPtr->internal_donotuse.favorDecSpeed = (favor != 0); +void LZ4_favorDecompressionSpeed(LZ4_streamHC_t* LZ4_streamHCPtr, int favor) +{ + LZ4_streamHCPtr->internal_donotuse.favorDecSpeed = (favor!=0); } /* LZ4_loadDictHC() : * LZ4_streamHCPtr is presumed properly initialized */ -int LZ4_loadDictHC(LZ4_streamHC_t *LZ4_streamHCPtr, - const char *dictionary, int dictSize) { - LZ4HC_CCtx_internal *const ctxPtr = &LZ4_streamHCPtr->internal_donotuse; - DEBUGLOG(4, "LZ4_loadDictHC(%p, %p, %d)", LZ4_streamHCPtr, dictionary, dictSize); +int LZ4_loadDictHC (LZ4_streamHC_t* LZ4_streamHCPtr, + const char* dictionary, int dictSize) +{ + LZ4HC_CCtx_internal* const ctxPtr = &LZ4_streamHCPtr->internal_donotuse; + DEBUGLOG(4, "LZ4_loadDictHC(ctx:%p, dict:%p, dictSize:%d)", LZ4_streamHCPtr, dictionary, dictSize); assert(LZ4_streamHCPtr != NULL); if (dictSize > 64 KB) { dictionary += (size_t)dictSize - 64 KB; dictSize = 64 KB; } /* need a full initialization, there are bad side-effects when using resetFast() */ - { - int const cLevel = ctxPtr->compressionLevel; + { int const cLevel = ctxPtr->compressionLevel; LZ4_initStreamHC(LZ4_streamHCPtr, sizeof(*LZ4_streamHCPtr)); LZ4_setCompressionLevel(LZ4_streamHCPtr, cLevel); } - LZ4HC_init_internal(ctxPtr, (const BYTE *)dictionary); - ctxPtr->end = (const BYTE *)dictionary + dictSize; - if (dictSize >= 4) LZ4HC_Insert(ctxPtr, ctxPtr->end - 3); + LZ4HC_init_internal (ctxPtr, (const BYTE*)dictionary); + ctxPtr->end = (const BYTE*)dictionary + dictSize; + if (dictSize >= 4) LZ4HC_Insert (ctxPtr, ctxPtr->end-3); return dictSize; } @@ -1062,10 +1051,11 @@ void LZ4_attach_HC_dictionary(LZ4_streamHC_t *working_stream, const LZ4_streamHC /* compression */ -static void LZ4HC_setExternalDict(LZ4HC_CCtx_internal *ctxPtr, const BYTE *newBlock) { +static void LZ4HC_setExternalDict(LZ4HC_CCtx_internal* ctxPtr, const BYTE* newBlock) +{ DEBUGLOG(4, "LZ4HC_setExternalDict(%p, %p)", ctxPtr, newBlock); if (ctxPtr->end >= ctxPtr->base + ctxPtr->dictLimit + 4) - LZ4HC_Insert(ctxPtr, ctxPtr->end - 3); /* Referencing remaining dictionary content */ + LZ4HC_Insert (ctxPtr, ctxPtr->end-3); /* Referencing remaining dictionary content */ /* Only one memory segment for extDict, so any previous extDict is lost at this stage */ ctxPtr->lowLimit = ctxPtr->dictLimit; @@ -1079,51 +1069,53 @@ static void LZ4HC_setExternalDict(LZ4HC_CCtx_internal *ctxPtr, const BYTE *newBl ctxPtr->dictCtx = NULL; } -static int LZ4_compressHC_continue_generic(LZ4_streamHC_t *LZ4_streamHCPtr, - const char *src, char *dst, - int *srcSizePtr, int dstCapacity, - limitedOutput_directive limit) { - LZ4HC_CCtx_internal *const ctxPtr = &LZ4_streamHCPtr->internal_donotuse; +static int LZ4_compressHC_continue_generic (LZ4_streamHC_t* LZ4_streamHCPtr, + const char* src, char* dst, + int* srcSizePtr, int dstCapacity, + limitedOutput_directive limit) +{ + LZ4HC_CCtx_internal* const ctxPtr = &LZ4_streamHCPtr->internal_donotuse; DEBUGLOG(4, "LZ4_compressHC_continue_generic(ctx=%p, src=%p, srcSize=%d)", - LZ4_streamHCPtr, src, *srcSizePtr); + LZ4_streamHCPtr, src, *srcSizePtr); assert(ctxPtr != NULL); /* auto-init if forgotten */ - if (ctxPtr->base == NULL) LZ4HC_init_internal(ctxPtr, (const BYTE *) src); + if (ctxPtr->base == NULL) LZ4HC_init_internal (ctxPtr, (const BYTE*) src); /* Check overflow */ if ((size_t)(ctxPtr->end - ctxPtr->base) > 2 GB) { size_t dictSize = (size_t)(ctxPtr->end - ctxPtr->base) - ctxPtr->dictLimit; if (dictSize > 64 KB) dictSize = 64 KB; - LZ4_loadDictHC(LZ4_streamHCPtr, (const char *)(ctxPtr->end) - dictSize, (int)dictSize); + LZ4_loadDictHC(LZ4_streamHCPtr, (const char*)(ctxPtr->end) - dictSize, (int)dictSize); } /* Check if blocks follow each other */ - if ((const BYTE *)src != ctxPtr->end) - LZ4HC_setExternalDict(ctxPtr, (const BYTE *)src); + if ((const BYTE*)src != ctxPtr->end) + LZ4HC_setExternalDict(ctxPtr, (const BYTE*)src); /* Check overlapping input/dictionary space */ - { - const BYTE *sourceEnd = (const BYTE *) src + *srcSizePtr; - const BYTE *const dictBegin = ctxPtr->dictBase + ctxPtr->lowLimit; - const BYTE *const dictEnd = ctxPtr->dictBase + ctxPtr->dictLimit; - if ((sourceEnd > dictBegin) && ((const BYTE *)src < dictEnd)) { + { const BYTE* sourceEnd = (const BYTE*) src + *srcSizePtr; + const BYTE* const dictBegin = ctxPtr->dictBase + ctxPtr->lowLimit; + const BYTE* const dictEnd = ctxPtr->dictBase + ctxPtr->dictLimit; + if ((sourceEnd > dictBegin) && ((const BYTE*)src < dictEnd)) { if (sourceEnd > dictEnd) sourceEnd = dictEnd; ctxPtr->lowLimit = (U32)(sourceEnd - ctxPtr->dictBase); if (ctxPtr->dictLimit - ctxPtr->lowLimit < 4) ctxPtr->lowLimit = ctxPtr->dictLimit; } } - return LZ4HC_compress_generic(ctxPtr, src, dst, srcSizePtr, dstCapacity, ctxPtr->compressionLevel, limit); + return LZ4HC_compress_generic (ctxPtr, src, dst, srcSizePtr, dstCapacity, ctxPtr->compressionLevel, limit); } -int LZ4_compress_HC_continue(LZ4_streamHC_t *LZ4_streamHCPtr, const char *src, char *dst, int srcSize, int dstCapacity) { +int LZ4_compress_HC_continue (LZ4_streamHC_t* LZ4_streamHCPtr, const char* src, char* dst, int srcSize, int dstCapacity) +{ if (dstCapacity < LZ4_compressBound(srcSize)) - return LZ4_compressHC_continue_generic(LZ4_streamHCPtr, src, dst, &srcSize, dstCapacity, limitedOutput); + return LZ4_compressHC_continue_generic (LZ4_streamHCPtr, src, dst, &srcSize, dstCapacity, limitedOutput); else - return LZ4_compressHC_continue_generic(LZ4_streamHCPtr, src, dst, &srcSize, dstCapacity, notLimited); + return LZ4_compressHC_continue_generic (LZ4_streamHCPtr, src, dst, &srcSize, dstCapacity, notLimited); } -int LZ4_compress_HC_continue_destSize(LZ4_streamHC_t *LZ4_streamHCPtr, const char *src, char *dst, int *srcSizePtr, int targetDestSize) { +int LZ4_compress_HC_continue_destSize (LZ4_streamHC_t* LZ4_streamHCPtr, const char* src, char* dst, int* srcSizePtr, int targetDestSize) +{ return LZ4_compressHC_continue_generic(LZ4_streamHCPtr, src, dst, srcSizePtr, targetDestSize, fillOutput); } @@ -1131,17 +1123,17 @@ int LZ4_compress_HC_continue_destSize(LZ4_streamHC_t *LZ4_streamHCPtr, const cha /* dictionary saving */ -int LZ4_saveDictHC(LZ4_streamHC_t *LZ4_streamHCPtr, char *safeBuffer, int dictSize) { - LZ4HC_CCtx_internal *const streamPtr = &LZ4_streamHCPtr->internal_donotuse; +int LZ4_saveDictHC (LZ4_streamHC_t* LZ4_streamHCPtr, char* safeBuffer, int dictSize) +{ + LZ4HC_CCtx_internal* const streamPtr = &LZ4_streamHCPtr->internal_donotuse; int const prefixSize = (int)(streamPtr->end - (streamPtr->base + streamPtr->dictLimit)); DEBUGLOG(4, "LZ4_saveDictHC(%p, %p, %d)", LZ4_streamHCPtr, safeBuffer, dictSize); if (dictSize > 64 KB) dictSize = 64 KB; if (dictSize < 4) dictSize = 0; if (dictSize > prefixSize) dictSize = prefixSize; memmove(safeBuffer, streamPtr->end - dictSize, dictSize); - { - U32 const endIndex = (U32)(streamPtr->end - streamPtr->base); - streamPtr->end = (const BYTE *)safeBuffer + dictSize; + { U32 const endIndex = (U32)(streamPtr->end - streamPtr->base); + streamPtr->end = (const BYTE*)safeBuffer + dictSize; streamPtr->base = streamPtr->end - endIndex; streamPtr->dictLimit = endIndex - (U32)dictSize; streamPtr->lowLimit = endIndex - (U32)dictSize; @@ -1158,16 +1150,16 @@ int LZ4_saveDictHC(LZ4_streamHC_t *LZ4_streamHCPtr, char *safeBuffer, int dictSi /* These functions currently generate deprecation warnings */ /* Wrappers for deprecated compression functions */ -int LZ4_compressHC(const char *src, char *dst, int srcSize) { return LZ4_compress_HC(src, dst, srcSize, LZ4_compressBound(srcSize), 0); } -int LZ4_compressHC_limitedOutput(const char *src, char *dst, int srcSize, int maxDstSize) { return LZ4_compress_HC(src, dst, srcSize, maxDstSize, 0); } -int LZ4_compressHC2(const char *src, char *dst, int srcSize, int cLevel) { return LZ4_compress_HC(src, dst, srcSize, LZ4_compressBound(srcSize), cLevel); } -int LZ4_compressHC2_limitedOutput(const char *src, char *dst, int srcSize, int maxDstSize, int cLevel) { return LZ4_compress_HC(src, dst, srcSize, maxDstSize, cLevel); } -int LZ4_compressHC_withStateHC(void *state, const char *src, char *dst, int srcSize) { return LZ4_compress_HC_extStateHC(state, src, dst, srcSize, LZ4_compressBound(srcSize), 0); } -int LZ4_compressHC_limitedOutput_withStateHC(void *state, const char *src, char *dst, int srcSize, int maxDstSize) { return LZ4_compress_HC_extStateHC(state, src, dst, srcSize, maxDstSize, 0); } -int LZ4_compressHC2_withStateHC(void *state, const char *src, char *dst, int srcSize, int cLevel) { return LZ4_compress_HC_extStateHC(state, src, dst, srcSize, LZ4_compressBound(srcSize), cLevel); } -int LZ4_compressHC2_limitedOutput_withStateHC(void *state, const char *src, char *dst, int srcSize, int maxDstSize, int cLevel) { return LZ4_compress_HC_extStateHC(state, src, dst, srcSize, maxDstSize, cLevel); } -int LZ4_compressHC_continue(LZ4_streamHC_t *ctx, const char *src, char *dst, int srcSize) { return LZ4_compress_HC_continue(ctx, src, dst, srcSize, LZ4_compressBound(srcSize)); } -int LZ4_compressHC_limitedOutput_continue(LZ4_streamHC_t *ctx, const char *src, char *dst, int srcSize, int maxDstSize) { return LZ4_compress_HC_continue(ctx, src, dst, srcSize, maxDstSize); } +int LZ4_compressHC(const char* src, char* dst, int srcSize) { return LZ4_compress_HC (src, dst, srcSize, LZ4_compressBound(srcSize), 0); } +int LZ4_compressHC_limitedOutput(const char* src, char* dst, int srcSize, int maxDstSize) { return LZ4_compress_HC(src, dst, srcSize, maxDstSize, 0); } +int LZ4_compressHC2(const char* src, char* dst, int srcSize, int cLevel) { return LZ4_compress_HC (src, dst, srcSize, LZ4_compressBound(srcSize), cLevel); } +int LZ4_compressHC2_limitedOutput(const char* src, char* dst, int srcSize, int maxDstSize, int cLevel) { return LZ4_compress_HC(src, dst, srcSize, maxDstSize, cLevel); } +int LZ4_compressHC_withStateHC (void* state, const char* src, char* dst, int srcSize) { return LZ4_compress_HC_extStateHC (state, src, dst, srcSize, LZ4_compressBound(srcSize), 0); } +int LZ4_compressHC_limitedOutput_withStateHC (void* state, const char* src, char* dst, int srcSize, int maxDstSize) { return LZ4_compress_HC_extStateHC (state, src, dst, srcSize, maxDstSize, 0); } +int LZ4_compressHC2_withStateHC (void* state, const char* src, char* dst, int srcSize, int cLevel) { return LZ4_compress_HC_extStateHC(state, src, dst, srcSize, LZ4_compressBound(srcSize), cLevel); } +int LZ4_compressHC2_limitedOutput_withStateHC (void* state, const char* src, char* dst, int srcSize, int maxDstSize, int cLevel) { return LZ4_compress_HC_extStateHC(state, src, dst, srcSize, maxDstSize, cLevel); } +int LZ4_compressHC_continue (LZ4_streamHC_t* ctx, const char* src, char* dst, int srcSize) { return LZ4_compress_HC_continue (ctx, src, dst, srcSize, LZ4_compressBound(srcSize)); } +int LZ4_compressHC_limitedOutput_continue (LZ4_streamHC_t* ctx, const char* src, char* dst, int srcSize, int maxDstSize) { return LZ4_compress_HC_continue (ctx, src, dst, srcSize, maxDstSize); } /* Deprecated streaming functions */ @@ -1175,36 +1167,42 @@ int LZ4_sizeofStreamStateHC(void) { return LZ4_STREAMHCSIZE; } /* state is presumed correctly sized, aka >= sizeof(LZ4_streamHC_t) * @return : 0 on success, !=0 if error */ -int LZ4_resetStreamStateHC(void *state, char *inputBuffer) { - LZ4_streamHC_t *const hc4 = LZ4_initStreamHC(state, sizeof(*hc4)); +int LZ4_resetStreamStateHC(void* state, char* inputBuffer) +{ + LZ4_streamHC_t* const hc4 = LZ4_initStreamHC(state, sizeof(*hc4)); if (hc4 == NULL) return 1; /* init failed */ - LZ4HC_init_internal(&hc4->internal_donotuse, (const BYTE *)inputBuffer); + LZ4HC_init_internal (&hc4->internal_donotuse, (const BYTE*)inputBuffer); return 0; } -void *LZ4_createHC(const char *inputBuffer) { - LZ4_streamHC_t *const hc4 = LZ4_createStreamHC(); +void* LZ4_createHC (const char* inputBuffer) +{ + LZ4_streamHC_t* const hc4 = LZ4_createStreamHC(); if (hc4 == NULL) return NULL; /* not enough memory */ - LZ4HC_init_internal(&hc4->internal_donotuse, (const BYTE *)inputBuffer); + LZ4HC_init_internal (&hc4->internal_donotuse, (const BYTE*)inputBuffer); return hc4; } -int LZ4_freeHC(void *LZ4HC_Data) { +int LZ4_freeHC (void* LZ4HC_Data) +{ if (!LZ4HC_Data) return 0; /* support free on NULL */ FREEMEM(LZ4HC_Data); return 0; } -int LZ4_compressHC2_continue(void *LZ4HC_Data, const char *src, char *dst, int srcSize, int cLevel) { - return LZ4HC_compress_generic(&((LZ4_streamHC_t *)LZ4HC_Data)->internal_donotuse, src, dst, &srcSize, 0, cLevel, notLimited); +int LZ4_compressHC2_continue (void* LZ4HC_Data, const char* src, char* dst, int srcSize, int cLevel) +{ + return LZ4HC_compress_generic (&((LZ4_streamHC_t*)LZ4HC_Data)->internal_donotuse, src, dst, &srcSize, 0, cLevel, notLimited); } -int LZ4_compressHC2_limitedOutput_continue(void *LZ4HC_Data, const char *src, char *dst, int srcSize, int dstCapacity, int cLevel) { - return LZ4HC_compress_generic(&((LZ4_streamHC_t *)LZ4HC_Data)->internal_donotuse, src, dst, &srcSize, dstCapacity, cLevel, limitedOutput); +int LZ4_compressHC2_limitedOutput_continue (void* LZ4HC_Data, const char* src, char* dst, int srcSize, int dstCapacity, int cLevel) +{ + return LZ4HC_compress_generic (&((LZ4_streamHC_t*)LZ4HC_Data)->internal_donotuse, src, dst, &srcSize, dstCapacity, cLevel, limitedOutput); } -char *LZ4_slideInputBufferHC(void *LZ4HC_Data) { - LZ4_streamHC_t *ctx = (LZ4_streamHC_t *)LZ4HC_Data; +char* LZ4_slideInputBufferHC(void* LZ4HC_Data) +{ + LZ4_streamHC_t *ctx = (LZ4_streamHC_t*)LZ4HC_Data; const BYTE *bufferStart = ctx->internal_donotuse.base + ctx->internal_donotuse.lowLimit; LZ4_resetStreamHC_fast(ctx, ctx->internal_donotuse.compressionLevel); /* avoid const char * -> char * conversion warning :( */ @@ -1223,25 +1221,27 @@ typedef struct { } LZ4HC_optimal_t; /* price in bytes */ -LZ4_FORCE_INLINE int LZ4HC_literalsPrice(int const litlen) { +LZ4_FORCE_INLINE int LZ4HC_literalsPrice(int const litlen) +{ int price = litlen; assert(litlen >= 0); if (litlen >= (int)RUN_MASK) - price += 1 + ((litlen - (int)RUN_MASK) / 255); + price += 1 + ((litlen-(int)RUN_MASK) / 255); return price; } /* requires mlen >= MINMATCH */ -LZ4_FORCE_INLINE int LZ4HC_sequencePrice(int litlen, int mlen) { +LZ4_FORCE_INLINE int LZ4HC_sequencePrice(int litlen, int mlen) +{ int price = 1 + 2 ; /* token + 16-bit offset */ assert(litlen >= 0); assert(mlen >= MINMATCH); price += LZ4HC_literalsPrice(litlen); - if (mlen >= (int)(ML_MASK + MINMATCH)) - price += 1 + ((mlen - (int)(ML_MASK + MINMATCH)) / 255); + if (mlen >= (int)(ML_MASK+MINMATCH)) + price += 1 + ((mlen-(int)(ML_MASK+MINMATCH)) / 255); return price; } @@ -1253,303 +1253,302 @@ typedef struct { } LZ4HC_match_t; LZ4_FORCE_INLINE LZ4HC_match_t -LZ4HC_FindLongerMatch(LZ4HC_CCtx_internal *const ctx, - const BYTE *ip, const BYTE *const iHighLimit, +LZ4HC_FindLongerMatch(LZ4HC_CCtx_internal* const ctx, + const BYTE* ip, const BYTE* const iHighLimit, int minLen, int nbSearches, const dictCtx_directive dict, - const HCfavor_e favorDecSpeed) { - LZ4HC_match_t match = { 0, 0 }; - const BYTE *matchPtr = NULL; + const HCfavor_e favorDecSpeed) +{ + LZ4HC_match_t match = { 0 , 0 }; + const BYTE* matchPtr = NULL; /* note : LZ4HC_InsertAndGetWiderMatch() is able to modify the starting position of a match (*startpos), * but this won't be the case here, as we define iLowLimit==ip, * so LZ4HC_InsertAndGetWiderMatch() won't be allowed to search past ip */ int matchLength = LZ4HC_InsertAndGetWiderMatch(ctx, ip, ip, iHighLimit, minLen, &matchPtr, &ip, nbSearches, 1 /*patternAnalysis*/, 1 /*chainSwap*/, dict, favorDecSpeed); if (matchLength <= minLen) return match; if (favorDecSpeed) { - if ((matchLength > 18) & (matchLength <= 36)) matchLength = 18; /* favor shortcut */ + if ((matchLength>18) & (matchLength<=36)) matchLength=18; /* favor shortcut */ } match.len = matchLength; - match.off = (int)(ip - matchPtr); + match.off = (int)(ip-matchPtr); return match; } -static int LZ4HC_compress_optimal(LZ4HC_CCtx_internal *ctx, - const char *const source, - char *dst, - int *srcSizePtr, - int dstCapacity, - int const nbSearches, - size_t sufficient_len, - const limitedOutput_directive limit, - int const fullUpdate, - const dictCtx_directive dict, - const HCfavor_e favorDecSpeed) { +static int LZ4HC_compress_optimal ( LZ4HC_CCtx_internal* ctx, + const char* const source, + char* dst, + int* srcSizePtr, + int dstCapacity, + int const nbSearches, + size_t sufficient_len, + const limitedOutput_directive limit, + int const fullUpdate, + const dictCtx_directive dict, + const HCfavor_e favorDecSpeed) +{ + int retval = 0; #define TRAILING_LITERALS 3 +#ifdef LZ4HC_HEAPMODE + LZ4HC_optimal_t* const opt = (LZ4HC_optimal_t*)malloc(sizeof(LZ4HC_optimal_t) * (LZ4_OPT_NUM + TRAILING_LITERALS)); +#else LZ4HC_optimal_t opt[LZ4_OPT_NUM + TRAILING_LITERALS]; /* ~64 KB, which is a bit large for stack... */ +#endif - const BYTE *ip = (const BYTE *) source; - const BYTE *anchor = ip; - const BYTE *const iend = ip + *srcSizePtr; - const BYTE *const mflimit = iend - MFLIMIT; - const BYTE *const matchlimit = iend - LASTLITERALS; - BYTE *op = (BYTE *) dst; - BYTE *opSaved = (BYTE *) dst; - BYTE *oend = op + dstCapacity; + const BYTE* ip = (const BYTE*) source; + const BYTE* anchor = ip; + const BYTE* const iend = ip + *srcSizePtr; + const BYTE* const mflimit = iend - MFLIMIT; + const BYTE* const matchlimit = iend - LASTLITERALS; + BYTE* op = (BYTE*) dst; + BYTE* opSaved = (BYTE*) dst; + BYTE* oend = op + dstCapacity; /* init */ +#ifdef LZ4HC_HEAPMODE + if (opt == NULL) goto _return_label; +#endif DEBUGLOG(5, "LZ4HC_compress_optimal(dst=%p, dstCapa=%u)", dst, (unsigned)dstCapacity); *srcSizePtr = 0; if (limit == fillOutput) oend -= LASTLITERALS; /* Hack for support LZ4 format restriction */ - if (sufficient_len >= LZ4_OPT_NUM) sufficient_len = LZ4_OPT_NUM - 1; + if (sufficient_len >= LZ4_OPT_NUM) sufficient_len = LZ4_OPT_NUM-1; /* Main Loop */ assert(ip - anchor < LZ4_MAX_INPUT_SIZE); while (ip <= mflimit) { - int const llen = (int)(ip - anchor); - int best_mlen, best_off; - int cur, last_match_pos = 0; + int const llen = (int)(ip - anchor); + int best_mlen, best_off; + int cur, last_match_pos = 0; - LZ4HC_match_t const firstMatch = LZ4HC_FindLongerMatch(ctx, ip, matchlimit, MINMATCH - 1, nbSearches, dict, favorDecSpeed); - if (firstMatch.len == 0) { ip++; continue; } + LZ4HC_match_t const firstMatch = LZ4HC_FindLongerMatch(ctx, ip, matchlimit, MINMATCH-1, nbSearches, dict, favorDecSpeed); + if (firstMatch.len==0) { ip++; continue; } - if ((size_t)firstMatch.len > sufficient_len) { - /* good enough solution : immediate encoding */ - int const firstML = firstMatch.len; - const BYTE *const matchPos = ip - firstMatch.off; - opSaved = op; - if (LZ4HC_encodeSequence(UPDATABLE(ip, op, anchor), firstML, matchPos, limit, oend)) /* updates ip, op and anchor */ - goto _dest_overflow; - continue; - } + if ((size_t)firstMatch.len > sufficient_len) { + /* good enough solution : immediate encoding */ + int const firstML = firstMatch.len; + const BYTE* const matchPos = ip - firstMatch.off; + opSaved = op; + if ( LZ4HC_encodeSequence(UPDATABLE(ip, op, anchor), firstML, matchPos, limit, oend) ) /* updates ip, op and anchor */ + goto _dest_overflow; + continue; + } - /* set prices for first positions (literals) */ - { - int rPos; - for (rPos = 0 ; rPos < MINMATCH ; rPos++) { - int const cost = LZ4HC_literalsPrice(llen + rPos); - opt[rPos].mlen = 1; - opt[rPos].off = 0; - opt[rPos].litlen = llen + rPos; - opt[rPos].price = cost; - DEBUGLOG(7, "rPos:%3i => price:%3i (litlen=%i) -- initial setup", - rPos, cost, opt[rPos].litlen); - } - } - /* set prices using initial match */ - { - int mlen = MINMATCH; - int const matchML = firstMatch.len; /* necessarily < sufficient_len < LZ4_OPT_NUM */ - int const offset = firstMatch.off; - assert(matchML < LZ4_OPT_NUM); - for (; mlen <= matchML ; mlen++) { - int const cost = LZ4HC_sequencePrice(llen, mlen); - opt[mlen].mlen = mlen; - opt[mlen].off = offset; - opt[mlen].litlen = llen; - opt[mlen].price = cost; - DEBUGLOG(7, "rPos:%3i => price:%3i (matchlen=%i) -- initial setup", - mlen, cost, mlen); - } - } - last_match_pos = firstMatch.len; - { - int addLit; - for (addLit = 1; addLit <= TRAILING_LITERALS; addLit ++) { - opt[last_match_pos + addLit].mlen = 1; /* literal */ - opt[last_match_pos + addLit].off = 0; - opt[last_match_pos + addLit].litlen = addLit; - opt[last_match_pos + addLit].price = opt[last_match_pos].price + LZ4HC_literalsPrice(addLit); - DEBUGLOG(7, "rPos:%3i => price:%3i (litlen=%i) -- initial setup", - last_match_pos + addLit, opt[last_match_pos + addLit].price, addLit); - } - } + /* set prices for first positions (literals) */ + { int rPos; + for (rPos = 0 ; rPos < MINMATCH ; rPos++) { + int const cost = LZ4HC_literalsPrice(llen + rPos); + opt[rPos].mlen = 1; + opt[rPos].off = 0; + opt[rPos].litlen = llen + rPos; + opt[rPos].price = cost; + DEBUGLOG(7, "rPos:%3i => price:%3i (litlen=%i) -- initial setup", + rPos, cost, opt[rPos].litlen); + } } + /* set prices using initial match */ + { int mlen = MINMATCH; + int const matchML = firstMatch.len; /* necessarily < sufficient_len < LZ4_OPT_NUM */ + int const offset = firstMatch.off; + assert(matchML < LZ4_OPT_NUM); + for ( ; mlen <= matchML ; mlen++) { + int const cost = LZ4HC_sequencePrice(llen, mlen); + opt[mlen].mlen = mlen; + opt[mlen].off = offset; + opt[mlen].litlen = llen; + opt[mlen].price = cost; + DEBUGLOG(7, "rPos:%3i => price:%3i (matchlen=%i) -- initial setup", + mlen, cost, mlen); + } } + last_match_pos = firstMatch.len; + { int addLit; + for (addLit = 1; addLit <= TRAILING_LITERALS; addLit ++) { + opt[last_match_pos+addLit].mlen = 1; /* literal */ + opt[last_match_pos+addLit].off = 0; + opt[last_match_pos+addLit].litlen = addLit; + opt[last_match_pos+addLit].price = opt[last_match_pos].price + LZ4HC_literalsPrice(addLit); + DEBUGLOG(7, "rPos:%3i => price:%3i (litlen=%i) -- initial setup", + last_match_pos+addLit, opt[last_match_pos+addLit].price, addLit); + } } - /* check further positions */ - for (cur = 1; cur < last_match_pos; cur++) { - const BYTE *const curPtr = ip + cur; - LZ4HC_match_t newMatch; + /* check further positions */ + for (cur = 1; cur < last_match_pos; cur++) { + const BYTE* const curPtr = ip + cur; + LZ4HC_match_t newMatch; - if (curPtr > mflimit) break; - DEBUGLOG(7, "rPos:%u[%u] vs [%u]%u", - cur, opt[cur].price, opt[cur + 1].price, cur + 1); - if (fullUpdate) { - /* not useful to search here if next position has same (or lower) cost */ - if ((opt[cur + 1].price <= opt[cur].price) - /* in some cases, next position has same cost, but cost rises sharply after, so a small match would still be beneficial */ - && (opt[cur + MINMATCH].price < opt[cur].price + 3/*min seq price*/)) - continue; - } else { - /* not useful to search here if next position has same (or lower) cost */ - if (opt[cur + 1].price <= opt[cur].price) continue; - } + if (curPtr > mflimit) break; + DEBUGLOG(7, "rPos:%u[%u] vs [%u]%u", + cur, opt[cur].price, opt[cur+1].price, cur+1); + if (fullUpdate) { + /* not useful to search here if next position has same (or lower) cost */ + if ( (opt[cur+1].price <= opt[cur].price) + /* in some cases, next position has same cost, but cost rises sharply after, so a small match would still be beneficial */ + && (opt[cur+MINMATCH].price < opt[cur].price + 3/*min seq price*/) ) + continue; + } else { + /* not useful to search here if next position has same (or lower) cost */ + if (opt[cur+1].price <= opt[cur].price) continue; + } - DEBUGLOG(7, "search at rPos:%u", cur); - if (fullUpdate) - newMatch = LZ4HC_FindLongerMatch(ctx, curPtr, matchlimit, MINMATCH - 1, nbSearches, dict, favorDecSpeed); - else - /* only test matches of minimum length; slightly faster, but misses a few bytes */ - newMatch = LZ4HC_FindLongerMatch(ctx, curPtr, matchlimit, last_match_pos - cur, nbSearches, dict, favorDecSpeed); - if (!newMatch.len) continue; + DEBUGLOG(7, "search at rPos:%u", cur); + if (fullUpdate) + newMatch = LZ4HC_FindLongerMatch(ctx, curPtr, matchlimit, MINMATCH-1, nbSearches, dict, favorDecSpeed); + else + /* only test matches of minimum length; slightly faster, but misses a few bytes */ + newMatch = LZ4HC_FindLongerMatch(ctx, curPtr, matchlimit, last_match_pos - cur, nbSearches, dict, favorDecSpeed); + if (!newMatch.len) continue; - if (((size_t)newMatch.len > sufficient_len) - || (newMatch.len + cur >= LZ4_OPT_NUM)) { - /* immediate encoding */ - best_mlen = newMatch.len; - best_off = newMatch.off; - last_match_pos = cur + 1; - goto encode; - } + if ( ((size_t)newMatch.len > sufficient_len) + || (newMatch.len + cur >= LZ4_OPT_NUM) ) { + /* immediate encoding */ + best_mlen = newMatch.len; + best_off = newMatch.off; + last_match_pos = cur + 1; + goto encode; + } - /* before match : set price with literals at beginning */ - { - int const baseLitlen = opt[cur].litlen; - int litlen; - for (litlen = 1; litlen < MINMATCH; litlen++) { - int const price = opt[cur].price - LZ4HC_literalsPrice(baseLitlen) + LZ4HC_literalsPrice(baseLitlen + litlen); - int const pos = cur + litlen; - if (price < opt[pos].price) { - opt[pos].mlen = 1; /* literal */ - opt[pos].off = 0; - opt[pos].litlen = baseLitlen + litlen; - opt[pos].price = price; - DEBUGLOG(7, "rPos:%3i => price:%3i (litlen=%i)", - pos, price, opt[pos].litlen); - } - } - } + /* before match : set price with literals at beginning */ + { int const baseLitlen = opt[cur].litlen; + int litlen; + for (litlen = 1; litlen < MINMATCH; litlen++) { + int const price = opt[cur].price - LZ4HC_literalsPrice(baseLitlen) + LZ4HC_literalsPrice(baseLitlen+litlen); + int const pos = cur + litlen; + if (price < opt[pos].price) { + opt[pos].mlen = 1; /* literal */ + opt[pos].off = 0; + opt[pos].litlen = baseLitlen+litlen; + opt[pos].price = price; + DEBUGLOG(7, "rPos:%3i => price:%3i (litlen=%i)", + pos, price, opt[pos].litlen); + } } } - /* set prices using match at position = cur */ - { - int const matchML = newMatch.len; - int ml = MINMATCH; + /* set prices using match at position = cur */ + { int const matchML = newMatch.len; + int ml = MINMATCH; - assert(cur + newMatch.len < LZ4_OPT_NUM); - for (; ml <= matchML ; ml++) { - int const pos = cur + ml; - int const offset = newMatch.off; - int price; - int ll; - DEBUGLOG(7, "testing price rPos %i (last_match_pos=%i)", - pos, last_match_pos); - if (opt[cur].mlen == 1) { - ll = opt[cur].litlen; - price = ((cur > ll) ? opt[cur - ll].price : 0) - + LZ4HC_sequencePrice(ll, ml); - } else { - ll = 0; - price = opt[cur].price + LZ4HC_sequencePrice(0, ml); - } + assert(cur + newMatch.len < LZ4_OPT_NUM); + for ( ; ml <= matchML ; ml++) { + int const pos = cur + ml; + int const offset = newMatch.off; + int price; + int ll; + DEBUGLOG(7, "testing price rPos %i (last_match_pos=%i)", + pos, last_match_pos); + if (opt[cur].mlen == 1) { + ll = opt[cur].litlen; + price = ((cur > ll) ? opt[cur - ll].price : 0) + + LZ4HC_sequencePrice(ll, ml); + } else { + ll = 0; + price = opt[cur].price + LZ4HC_sequencePrice(0, ml); + } assert((U32)favorDecSpeed <= 1); - if (pos > last_match_pos + TRAILING_LITERALS - || price <= opt[pos].price - (int)favorDecSpeed) { - DEBUGLOG(7, "rPos:%3i => price:%3i (matchlen=%i)", - pos, price, ml); - assert(pos < LZ4_OPT_NUM); - if ((ml == matchML) /* last pos of last match */ - && (last_match_pos < pos)) - last_match_pos = pos; - opt[pos].mlen = ml; - opt[pos].off = offset; - opt[pos].litlen = ll; - opt[pos].price = price; - } - } - } - /* complete following positions with literals */ - { - int addLit; - for (addLit = 1; addLit <= TRAILING_LITERALS; addLit ++) { - opt[last_match_pos + addLit].mlen = 1; /* literal */ - opt[last_match_pos + addLit].off = 0; - opt[last_match_pos + addLit].litlen = addLit; - opt[last_match_pos + addLit].price = opt[last_match_pos].price + LZ4HC_literalsPrice(addLit); - DEBUGLOG(7, "rPos:%3i => price:%3i (litlen=%i)", last_match_pos + addLit, opt[last_match_pos + addLit].price, addLit); - } - } - } /* for (cur = 1; cur <= last_match_pos; cur++) */ + if (pos > last_match_pos+TRAILING_LITERALS + || price <= opt[pos].price - (int)favorDecSpeed) { + DEBUGLOG(7, "rPos:%3i => price:%3i (matchlen=%i)", + pos, price, ml); + assert(pos < LZ4_OPT_NUM); + if ( (ml == matchML) /* last pos of last match */ + && (last_match_pos < pos) ) + last_match_pos = pos; + opt[pos].mlen = ml; + opt[pos].off = offset; + opt[pos].litlen = ll; + opt[pos].price = price; + } } } + /* complete following positions with literals */ + { int addLit; + for (addLit = 1; addLit <= TRAILING_LITERALS; addLit ++) { + opt[last_match_pos+addLit].mlen = 1; /* literal */ + opt[last_match_pos+addLit].off = 0; + opt[last_match_pos+addLit].litlen = addLit; + opt[last_match_pos+addLit].price = opt[last_match_pos].price + LZ4HC_literalsPrice(addLit); + DEBUGLOG(7, "rPos:%3i => price:%3i (litlen=%i)", last_match_pos+addLit, opt[last_match_pos+addLit].price, addLit); + } } + } /* for (cur = 1; cur <= last_match_pos; cur++) */ - assert(last_match_pos < LZ4_OPT_NUM + TRAILING_LITERALS); - best_mlen = opt[last_match_pos].mlen; - best_off = opt[last_match_pos].off; - cur = last_match_pos - best_mlen; + assert(last_match_pos < LZ4_OPT_NUM + TRAILING_LITERALS); + best_mlen = opt[last_match_pos].mlen; + best_off = opt[last_match_pos].off; + cur = last_match_pos - best_mlen; -encode: /* cur, last_match_pos, best_mlen, best_off must be set */ - assert(cur < LZ4_OPT_NUM); - assert(last_match_pos >= 1); /* == 1 when only one candidate */ - DEBUGLOG(6, "reverse traversal, looking for shortest path (last_match_pos=%i)", last_match_pos); - { - int candidate_pos = cur; - int selected_matchLength = best_mlen; - int selected_offset = best_off; - while (1) { /* from end to beginning */ - int const next_matchLength = opt[candidate_pos].mlen; /* can be 1, means literal */ - int const next_offset = opt[candidate_pos].off; - DEBUGLOG(7, "pos %i: sequence length %i", candidate_pos, selected_matchLength); - opt[candidate_pos].mlen = selected_matchLength; - opt[candidate_pos].off = selected_offset; - selected_matchLength = next_matchLength; - selected_offset = next_offset; - if (next_matchLength > candidate_pos) break; /* last match elected, first match to encode */ - assert(next_matchLength > 0); /* can be 1, means literal */ - candidate_pos -= next_matchLength; - } - } + encode: /* cur, last_match_pos, best_mlen, best_off must be set */ + assert(cur < LZ4_OPT_NUM); + assert(last_match_pos >= 1); /* == 1 when only one candidate */ + DEBUGLOG(6, "reverse traversal, looking for shortest path (last_match_pos=%i)", last_match_pos); + { int candidate_pos = cur; + int selected_matchLength = best_mlen; + int selected_offset = best_off; + while (1) { /* from end to beginning */ + int const next_matchLength = opt[candidate_pos].mlen; /* can be 1, means literal */ + int const next_offset = opt[candidate_pos].off; + DEBUGLOG(7, "pos %i: sequence length %i", candidate_pos, selected_matchLength); + opt[candidate_pos].mlen = selected_matchLength; + opt[candidate_pos].off = selected_offset; + selected_matchLength = next_matchLength; + selected_offset = next_offset; + if (next_matchLength > candidate_pos) break; /* last match elected, first match to encode */ + assert(next_matchLength > 0); /* can be 1, means literal */ + candidate_pos -= next_matchLength; + } } - /* encode all recorded sequences in order */ - { - int rPos = 0; /* relative position (to ip) */ - while (rPos < last_match_pos) { - int const ml = opt[rPos].mlen; - int const offset = opt[rPos].off; - if (ml == 1) { ip++; rPos++; continue; } /* literal; note: can end up with several literals, in which case, skip them */ - rPos += ml; - assert(ml >= MINMATCH); - assert((offset >= 1) && (offset <= LZ4_DISTANCE_MAX)); - opSaved = op; - if (LZ4HC_encodeSequence(UPDATABLE(ip, op, anchor), ml, ip - offset, limit, oend)) /* updates ip, op and anchor */ - goto _dest_overflow; - } - } - } /* while (ip <= mflimit) */ + /* encode all recorded sequences in order */ + { int rPos = 0; /* relative position (to ip) */ + while (rPos < last_match_pos) { + int const ml = opt[rPos].mlen; + int const offset = opt[rPos].off; + if (ml == 1) { ip++; rPos++; continue; } /* literal; note: can end up with several literals, in which case, skip them */ + rPos += ml; + assert(ml >= MINMATCH); + assert((offset >= 1) && (offset <= LZ4_DISTANCE_MAX)); + opSaved = op; + if ( LZ4HC_encodeSequence(UPDATABLE(ip, op, anchor), ml, ip - offset, limit, oend) ) /* updates ip, op and anchor */ + goto _dest_overflow; + } } + } /* while (ip <= mflimit) */ -_last_literals: - /* Encode Last Literals */ - { - size_t lastRunSize = (size_t)(iend - anchor); /* literals */ - size_t litLength = (lastRunSize + 255 - RUN_MASK) / 255; - size_t const totalSize = 1 + litLength + lastRunSize; - if (limit == fillOutput) oend += LASTLITERALS; /* restore correct value */ - if (limit && (op + totalSize > oend)) { - if (limit == limitedOutput) return 0; /* Check output limit */ - /* adapt lastRunSize to fill 'dst' */ - lastRunSize = (size_t)(oend - op) - 1; - litLength = (lastRunSize + 255 - RUN_MASK) / 255; - lastRunSize -= litLength; - } - ip = anchor + lastRunSize; + _last_literals: + /* Encode Last Literals */ + { size_t lastRunSize = (size_t)(iend - anchor); /* literals */ + size_t litLength = (lastRunSize + 255 - RUN_MASK) / 255; + size_t const totalSize = 1 + litLength + lastRunSize; + if (limit == fillOutput) oend += LASTLITERALS; /* restore correct value */ + if (limit && (op + totalSize > oend)) { + if (limit == limitedOutput) { /* Check output limit */ + retval = 0; + goto _return_label; + } + /* adapt lastRunSize to fill 'dst' */ + lastRunSize = (size_t)(oend - op) - 1; + litLength = (lastRunSize + 255 - RUN_MASK) / 255; + lastRunSize -= litLength; + } + ip = anchor + lastRunSize; - if (lastRunSize >= RUN_MASK) { - size_t accumulator = lastRunSize - RUN_MASK; - *op++ = (RUN_MASK << ML_BITS); - for (; accumulator >= 255 ; accumulator -= 255) * op++ = 255; - *op++ = (BYTE) accumulator; - } else { - *op++ = (BYTE)(lastRunSize << ML_BITS); - } - memcpy(op, anchor, lastRunSize); - op += lastRunSize; - } + if (lastRunSize >= RUN_MASK) { + size_t accumulator = lastRunSize - RUN_MASK; + *op++ = (RUN_MASK << ML_BITS); + for(; accumulator >= 255 ; accumulator -= 255) *op++ = 255; + *op++ = (BYTE) accumulator; + } else { + *op++ = (BYTE)(lastRunSize << ML_BITS); + } + memcpy(op, anchor, lastRunSize); + op += lastRunSize; + } - /* End */ - *srcSizePtr = (int)(((const char *)ip) - source); - return (int)((char *)op - dst); + /* End */ + *srcSizePtr = (int) (((const char*)ip) - source); + retval = (int) ((char*)op-dst); + goto _return_label; -_dest_overflow: - if (limit == fillOutput) { - op = opSaved; /* restore correct out pointer */ - goto _last_literals; - } - return 0; -} + _dest_overflow: + if (limit == fillOutput) { + op = opSaved; /* restore correct out pointer */ + goto _last_literals; + } + _return_label: +#ifdef LZ4HC_HEAPMODE + free(opt); +#endif + return retval; + } diff --git a/common/lz4/lz4hc.h b/common/lz4/lz4hc.h index be39e08a3..44e35bbf6 100644 --- a/common/lz4/lz4hc.h +++ b/common/lz4/lz4hc.h @@ -63,7 +63,7 @@ extern "C" { * @return : the number of bytes written into 'dst' * or 0 if compression fails. */ -LZ4LIB_API int LZ4_compress_HC(const char *src, char *dst, int srcSize, int dstCapacity, int compressionLevel); +LZ4LIB_API int LZ4_compress_HC (const char* src, char* dst, int srcSize, int dstCapacity, int compressionLevel); /* Note : @@ -77,7 +77,7 @@ LZ4LIB_API int LZ4_compress_HC(const char *src, char *dst, int srcSize, int dstC * Memory segment must be aligned on 8-bytes boundaries (which a normal malloc() should do properly). */ LZ4LIB_API int LZ4_sizeofStateHC(void); -LZ4LIB_API int LZ4_compress_HC_extStateHC(void *stateHC, const char *src, char *dst, int srcSize, int maxDstSize, int compressionLevel); +LZ4LIB_API int LZ4_compress_HC_extStateHC(void* stateHC, const char* src, char* dst, int srcSize, int maxDstSize, int compressionLevel); /*! LZ4_compress_HC_destSize() : v1.9.0+ @@ -88,9 +88,9 @@ LZ4LIB_API int LZ4_compress_HC_extStateHC(void *stateHC, const char *src, char * * or 0 if compression fails. * `srcSizePtr` : on success, *srcSizePtr is updated to indicate how much bytes were read from `src` */ -LZ4LIB_API int LZ4_compress_HC_destSize(void *stateHC, - const char *src, char *dst, - int *srcSizePtr, int targetDstSize, +LZ4LIB_API int LZ4_compress_HC_destSize(void* stateHC, + const char* src, char* dst, + int* srcSizePtr, int targetDstSize, int compressionLevel); @@ -98,7 +98,7 @@ LZ4LIB_API int LZ4_compress_HC_destSize(void *stateHC, * Streaming Compression * Bufferless synchronous API **************************************/ -typedef union LZ4_streamHC_u LZ4_streamHC_t; /* incomplete type (defined later) */ + typedef union LZ4_streamHC_u LZ4_streamHC_t; /* incomplete type (defined later) */ /*! LZ4_createStreamHC() and LZ4_freeStreamHC() : * These functions create and release memory for LZ4 HC streaming state. @@ -106,8 +106,8 @@ typedef union LZ4_streamHC_u LZ4_streamHC_t; /* incomplete type (defined later * A same state can be used multiple times consecutively, * starting with LZ4_resetStreamHC_fast() to start a new stream of blocks. */ -LZ4LIB_API LZ4_streamHC_t *LZ4_createStreamHC(void); -LZ4LIB_API int LZ4_freeStreamHC(LZ4_streamHC_t *streamHCPtr); +LZ4LIB_API LZ4_streamHC_t* LZ4_createStreamHC(void); +LZ4LIB_API int LZ4_freeStreamHC (LZ4_streamHC_t* streamHCPtr); /* These functions compress data in successive blocks of any size, @@ -152,12 +152,12 @@ LZ4LIB_API int LZ4_freeStreamHC(LZ4_streamHC_t *streamHCPtr); just by resetting it, using LZ4_resetStreamHC_fast(). */ -LZ4LIB_API void LZ4_resetStreamHC_fast(LZ4_streamHC_t *streamHCPtr, int compressionLevel); /* v1.9.0+ */ -LZ4LIB_API int LZ4_loadDictHC(LZ4_streamHC_t *streamHCPtr, const char *dictionary, int dictSize); +LZ4LIB_API void LZ4_resetStreamHC_fast(LZ4_streamHC_t* streamHCPtr, int compressionLevel); /* v1.9.0+ */ +LZ4LIB_API int LZ4_loadDictHC (LZ4_streamHC_t* streamHCPtr, const char* dictionary, int dictSize); -LZ4LIB_API int LZ4_compress_HC_continue(LZ4_streamHC_t *streamHCPtr, - const char *src, char *dst, - int srcSize, int maxDstSize); +LZ4LIB_API int LZ4_compress_HC_continue (LZ4_streamHC_t* streamHCPtr, + const char* src, char* dst, + int srcSize, int maxDstSize); /*! LZ4_compress_HC_continue_destSize() : v1.9.0+ * Similar to LZ4_compress_HC_continue(), @@ -169,11 +169,11 @@ LZ4LIB_API int LZ4_compress_HC_continue(LZ4_streamHC_t *streamHCPtr, * `srcSizePtr` : on success, *srcSizePtr will be updated to indicate how much bytes were read from `src`. * Note that this function may not consume the entire input. */ -LZ4LIB_API int LZ4_compress_HC_continue_destSize(LZ4_streamHC_t *LZ4_streamHCPtr, - const char *src, char *dst, - int *srcSizePtr, int targetDstSize); +LZ4LIB_API int LZ4_compress_HC_continue_destSize(LZ4_streamHC_t* LZ4_streamHCPtr, + const char* src, char* dst, + int* srcSizePtr, int targetDstSize); -LZ4LIB_API int LZ4_saveDictHC(LZ4_streamHC_t *streamHCPtr, char *safeBuffer, int maxDictSize); +LZ4LIB_API int LZ4_saveDictHC (LZ4_streamHC_t* streamHCPtr, char* safeBuffer, int maxDictSize); @@ -202,12 +202,13 @@ LZ4LIB_API int LZ4_saveDictHC(LZ4_streamHC_t *streamHCPtr, char *safeBuffer, int #include typedef struct LZ4HC_CCtx_internal LZ4HC_CCtx_internal; -struct LZ4HC_CCtx_internal { +struct LZ4HC_CCtx_internal +{ uint32_t hashTable[LZ4HC_HASHTABLESIZE]; uint16_t chainTable[LZ4HC_MAXD]; - const uint8_t *end; /* next block here to continue on current prefix */ - const uint8_t *base; /* All index relative to this position */ - const uint8_t *dictBase; /* alternate base for extDict */ + const uint8_t* end; /* next block here to continue on current prefix */ + const uint8_t* base; /* All index relative to this position */ + const uint8_t* dictBase; /* alternate base for extDict */ uint32_t dictLimit; /* below that point, need extDict */ uint32_t lowLimit; /* below that point, no more dict */ uint32_t nextToUpdate; /* index from which to continue dictionary update */ @@ -215,18 +216,19 @@ struct LZ4HC_CCtx_internal { int8_t favorDecSpeed; /* favor decompression speed if this flag set, otherwise, favor compression ratio */ int8_t dirty; /* stream has to be fully reset if this flag is set */ - const LZ4HC_CCtx_internal *dictCtx; + const LZ4HC_CCtx_internal* dictCtx; }; #else typedef struct LZ4HC_CCtx_internal LZ4HC_CCtx_internal; -struct LZ4HC_CCtx_internal { +struct LZ4HC_CCtx_internal +{ unsigned int hashTable[LZ4HC_HASHTABLESIZE]; unsigned short chainTable[LZ4HC_MAXD]; - const unsigned char *end; /* next block here to continue on current prefix */ - const unsigned char *base; /* All index relative to this position */ - const unsigned char *dictBase; /* alternate base for extDict */ + const unsigned char* end; /* next block here to continue on current prefix */ + const unsigned char* base; /* All index relative to this position */ + const unsigned char* dictBase; /* alternate base for extDict */ unsigned int dictLimit; /* below that point, need extDict */ unsigned int lowLimit; /* below that point, no more dict */ unsigned int nextToUpdate; /* index from which to continue dictionary update */ @@ -234,7 +236,7 @@ struct LZ4HC_CCtx_internal { char favorDecSpeed; /* favor decompression speed if this flag set, otherwise, favor compression ratio */ char dirty; /* stream has to be fully reset if this flag is set */ - const LZ4HC_CCtx_internal *dictCtx; + const LZ4HC_CCtx_internal* dictCtx; }; #endif @@ -267,7 +269,7 @@ union LZ4_streamHC_u { * Required before first use of a statically allocated LZ4_streamHC_t. * Before v1.9.0 : use LZ4_resetStreamHC() instead */ -LZ4LIB_API LZ4_streamHC_t *LZ4_initStreamHC(void *buffer, size_t size); +LZ4LIB_API LZ4_streamHC_t* LZ4_initStreamHC (void* buffer, size_t size); /*-************************************ @@ -276,16 +278,16 @@ LZ4LIB_API LZ4_streamHC_t *LZ4_initStreamHC(void *buffer, size_t size); /* see lz4.h LZ4_DISABLE_DEPRECATE_WARNINGS to turn off deprecation warnings */ /* deprecated compression functions */ -LZ4_DEPRECATED("use LZ4_compress_HC() instead") LZ4LIB_API int LZ4_compressHC(const char *source, char *dest, int inputSize); -LZ4_DEPRECATED("use LZ4_compress_HC() instead") LZ4LIB_API int LZ4_compressHC_limitedOutput(const char *source, char *dest, int inputSize, int maxOutputSize); -LZ4_DEPRECATED("use LZ4_compress_HC() instead") LZ4LIB_API int LZ4_compressHC2(const char *source, char *dest, int inputSize, int compressionLevel); -LZ4_DEPRECATED("use LZ4_compress_HC() instead") LZ4LIB_API int LZ4_compressHC2_limitedOutput(const char *source, char *dest, int inputSize, int maxOutputSize, int compressionLevel); -LZ4_DEPRECATED("use LZ4_compress_HC_extStateHC() instead") LZ4LIB_API int LZ4_compressHC_withStateHC(void *state, const char *source, char *dest, int inputSize); -LZ4_DEPRECATED("use LZ4_compress_HC_extStateHC() instead") LZ4LIB_API int LZ4_compressHC_limitedOutput_withStateHC(void *state, const char *source, char *dest, int inputSize, int maxOutputSize); -LZ4_DEPRECATED("use LZ4_compress_HC_extStateHC() instead") LZ4LIB_API int LZ4_compressHC2_withStateHC(void *state, const char *source, char *dest, int inputSize, int compressionLevel); -LZ4_DEPRECATED("use LZ4_compress_HC_extStateHC() instead") LZ4LIB_API int LZ4_compressHC2_limitedOutput_withStateHC(void *state, const char *source, char *dest, int inputSize, int maxOutputSize, int compressionLevel); -LZ4_DEPRECATED("use LZ4_compress_HC_continue() instead") LZ4LIB_API int LZ4_compressHC_continue(LZ4_streamHC_t *LZ4_streamHCPtr, const char *source, char *dest, int inputSize); -LZ4_DEPRECATED("use LZ4_compress_HC_continue() instead") LZ4LIB_API int LZ4_compressHC_limitedOutput_continue(LZ4_streamHC_t *LZ4_streamHCPtr, const char *source, char *dest, int inputSize, int maxOutputSize); +LZ4_DEPRECATED("use LZ4_compress_HC() instead") LZ4LIB_API int LZ4_compressHC (const char* source, char* dest, int inputSize); +LZ4_DEPRECATED("use LZ4_compress_HC() instead") LZ4LIB_API int LZ4_compressHC_limitedOutput (const char* source, char* dest, int inputSize, int maxOutputSize); +LZ4_DEPRECATED("use LZ4_compress_HC() instead") LZ4LIB_API int LZ4_compressHC2 (const char* source, char* dest, int inputSize, int compressionLevel); +LZ4_DEPRECATED("use LZ4_compress_HC() instead") LZ4LIB_API int LZ4_compressHC2_limitedOutput(const char* source, char* dest, int inputSize, int maxOutputSize, int compressionLevel); +LZ4_DEPRECATED("use LZ4_compress_HC_extStateHC() instead") LZ4LIB_API int LZ4_compressHC_withStateHC (void* state, const char* source, char* dest, int inputSize); +LZ4_DEPRECATED("use LZ4_compress_HC_extStateHC() instead") LZ4LIB_API int LZ4_compressHC_limitedOutput_withStateHC (void* state, const char* source, char* dest, int inputSize, int maxOutputSize); +LZ4_DEPRECATED("use LZ4_compress_HC_extStateHC() instead") LZ4LIB_API int LZ4_compressHC2_withStateHC (void* state, const char* source, char* dest, int inputSize, int compressionLevel); +LZ4_DEPRECATED("use LZ4_compress_HC_extStateHC() instead") LZ4LIB_API int LZ4_compressHC2_limitedOutput_withStateHC(void* state, const char* source, char* dest, int inputSize, int maxOutputSize, int compressionLevel); +LZ4_DEPRECATED("use LZ4_compress_HC_continue() instead") LZ4LIB_API int LZ4_compressHC_continue (LZ4_streamHC_t* LZ4_streamHCPtr, const char* source, char* dest, int inputSize); +LZ4_DEPRECATED("use LZ4_compress_HC_continue() instead") LZ4LIB_API int LZ4_compressHC_limitedOutput_continue (LZ4_streamHC_t* LZ4_streamHCPtr, const char* source, char* dest, int inputSize, int maxOutputSize); /* Obsolete streaming functions; degraded functionality; do not use! * @@ -295,13 +297,13 @@ LZ4_DEPRECATED("use LZ4_compress_HC_continue() instead") LZ4LIB_API int LZ4_comp * LZ4_slideInputBufferHC() will truncate the history of the stream, rather * than preserve a window-sized chunk of history. */ -LZ4_DEPRECATED("use LZ4_createStreamHC() instead") LZ4LIB_API void *LZ4_createHC(const char *inputBuffer); -LZ4_DEPRECATED("use LZ4_saveDictHC() instead") LZ4LIB_API char *LZ4_slideInputBufferHC(void *LZ4HC_Data); -LZ4_DEPRECATED("use LZ4_freeStreamHC() instead") LZ4LIB_API int LZ4_freeHC(void *LZ4HC_Data); -LZ4_DEPRECATED("use LZ4_compress_HC_continue() instead") LZ4LIB_API int LZ4_compressHC2_continue(void *LZ4HC_Data, const char *source, char *dest, int inputSize, int compressionLevel); -LZ4_DEPRECATED("use LZ4_compress_HC_continue() instead") LZ4LIB_API int LZ4_compressHC2_limitedOutput_continue(void *LZ4HC_Data, const char *source, char *dest, int inputSize, int maxOutputSize, int compressionLevel); +LZ4_DEPRECATED("use LZ4_createStreamHC() instead") LZ4LIB_API void* LZ4_createHC (const char* inputBuffer); +LZ4_DEPRECATED("use LZ4_saveDictHC() instead") LZ4LIB_API char* LZ4_slideInputBufferHC (void* LZ4HC_Data); +LZ4_DEPRECATED("use LZ4_freeStreamHC() instead") LZ4LIB_API int LZ4_freeHC (void* LZ4HC_Data); +LZ4_DEPRECATED("use LZ4_compress_HC_continue() instead") LZ4LIB_API int LZ4_compressHC2_continue (void* LZ4HC_Data, const char* source, char* dest, int inputSize, int compressionLevel); +LZ4_DEPRECATED("use LZ4_compress_HC_continue() instead") LZ4LIB_API int LZ4_compressHC2_limitedOutput_continue (void* LZ4HC_Data, const char* source, char* dest, int inputSize, int maxOutputSize, int compressionLevel); LZ4_DEPRECATED("use LZ4_createStreamHC() instead") LZ4LIB_API int LZ4_sizeofStreamStateHC(void); -LZ4_DEPRECATED("use LZ4_initStreamHC() instead") LZ4LIB_API int LZ4_resetStreamStateHC(void *state, char *inputBuffer); +LZ4_DEPRECATED("use LZ4_initStreamHC() instead") LZ4LIB_API int LZ4_resetStreamStateHC(void* state, char* inputBuffer); /* LZ4_resetStreamHC() is now replaced by LZ4_initStreamHC(). @@ -312,7 +314,7 @@ LZ4_DEPRECATED("use LZ4_initStreamHC() instead") LZ4LIB_API int LZ4_resetStre * It is recommended to switch to LZ4_initStreamHC(). * LZ4_resetStreamHC() will generate deprecation warnings in a future version. */ -LZ4LIB_API void LZ4_resetStreamHC(LZ4_streamHC_t *streamHCPtr, int compressionLevel); +LZ4LIB_API void LZ4_resetStreamHC (LZ4_streamHC_t* streamHCPtr, int compressionLevel); #if defined (__cplusplus) @@ -347,14 +349,14 @@ extern "C" { * for dynamic adaptation. */ LZ4LIB_STATIC_API void LZ4_setCompressionLevel( - LZ4_streamHC_t *LZ4_streamHCPtr, int compressionLevel); + LZ4_streamHC_t* LZ4_streamHCPtr, int compressionLevel); /*! LZ4_favorDecompressionSpeed() : v1.8.2+ (experimental) * Opt. Parser will favor decompression speed over compression ratio. * Only applicable to levels >= LZ4HC_CLEVEL_OPT_MIN. */ LZ4LIB_STATIC_API void LZ4_favorDecompressionSpeed( - LZ4_streamHC_t *LZ4_streamHCPtr, int favor); + LZ4_streamHC_t* LZ4_streamHCPtr, int favor); /*! LZ4_resetStreamHC_fast() : v1.9.0+ * When an LZ4_streamHC_t is known to be in a internally coherent state, @@ -380,7 +382,7 @@ LZ4LIB_STATIC_API void LZ4_favorDecompressionSpeed( * clear any existing history and settings from the context. */ LZ4LIB_STATIC_API void LZ4_resetStreamHC_fast( - LZ4_streamHC_t *LZ4_streamHCPtr, int compressionLevel); + LZ4_streamHC_t* LZ4_streamHCPtr, int compressionLevel); /*! LZ4_compress_HC_extStateHC_fastReset() : * A variant of LZ4_compress_HC_extStateHC(). @@ -393,9 +395,9 @@ LZ4LIB_STATIC_API void LZ4_resetStreamHC_fast( * LZ4_resetStreamHC_fast() while LZ4_compress_HC_extStateHC() starts with a * call to LZ4_resetStreamHC(). */ -LZ4LIB_STATIC_API int LZ4_compress_HC_extStateHC_fastReset( - void *state, - const char *src, char *dst, +LZ4LIB_STATIC_API int LZ4_compress_HC_extStateHC_fastReset ( + void* state, + const char* src, char* dst, int srcSize, int dstCapacity, int compressionLevel); @@ -425,7 +427,7 @@ LZ4LIB_STATIC_API int LZ4_compress_HC_extStateHC_fastReset( * through the lifetime of the stream session. */ LZ4LIB_STATIC_API void LZ4_attach_HC_dictionary( - LZ4_streamHC_t *working_stream, + LZ4_streamHC_t *working_stream, const LZ4_streamHC_t *dictionary_stream); #if defined (__cplusplus) From dfb7eaf061339b0caab7db8d3f80bdc96e5cc2c3 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Mon, 28 Sep 2020 11:50:20 +0200 Subject: [PATCH 0681/1047] LF: rework internal APIs --- client/src/cmddata.c | 196 +++++++++++++++------------- client/src/cmddata.h | 15 ++- client/src/cmdlf.c | 44 +++---- client/src/cmdlfawid.c | 17 +-- client/src/cmdlfawid.h | 2 +- client/src/cmdlfcotag.c | 9 +- client/src/cmdlfcotag.h | 2 +- client/src/cmdlfem4x.c | 56 +++++--- client/src/cmdlfem4x.h | 4 +- client/src/cmdlffdx.c | 2 +- client/src/cmdlfgallagher.c | 20 +-- client/src/cmdlfgallagher.h | 2 +- client/src/cmdlfguard.c | 19 +-- client/src/cmdlfguard.h | 2 +- client/src/cmdlfhid.c | 16 ++- client/src/cmdlfhid.h | 2 +- client/src/cmdlfindala.c | 54 +++++--- client/src/cmdlfindala.h | 9 +- client/src/cmdlfio.c | 15 ++- client/src/cmdlfio.h | 2 +- client/src/cmdlfjablotron.c | 20 +-- client/src/cmdlfjablotron.h | 2 +- client/src/cmdlfkeri.c | 18 +-- client/src/cmdlfkeri.h | 2 +- client/src/cmdlfmotorola.c | 20 +-- client/src/cmdlfmotorola.h | 2 +- client/src/cmdlfnedap.c | 19 ++- client/src/cmdlfnedap.h | 2 +- client/src/cmdlfnexwatch.c | 10 +- client/src/cmdlfnexwatch.h | 2 +- client/src/cmdlfnoralsy.c | 19 +-- client/src/cmdlfnoralsy.h | 2 +- client/src/cmdlfpac.c | 18 +-- client/src/cmdlfpac.h | 2 +- client/src/cmdlfparadox.c | 17 ++- client/src/cmdlfparadox.h | 2 +- client/src/cmdlfpresco.c | 20 +-- client/src/cmdlfpresco.h | 2 +- client/src/cmdlfpyramid.c | 16 ++- client/src/cmdlfpyramid.h | 2 +- client/src/cmdlfsecurakey.c | 18 +-- client/src/cmdlfsecurakey.h | 2 +- client/src/cmdlft55xx.c | 75 +++++------ client/src/cmdlfti.c | 14 +- client/src/cmdlfti.h | 2 +- client/src/cmdlfverichip_disabled.c | 18 +-- client/src/cmdlfverichip_disabled.h | 2 +- client/src/cmdlfviking.c | 18 ++- client/src/cmdlfviking.h | 2 +- client/src/cmdlfvisa2000.c | 17 ++- client/src/cmdlfvisa2000.h | 2 +- 51 files changed, 468 insertions(+), 387 deletions(-) diff --git a/client/src/cmddata.c b/client/src/cmddata.c index d85733370..ffeb7f965 100644 --- a/client/src/cmddata.c +++ b/client/src/cmddata.c @@ -557,27 +557,11 @@ static int CmdConvertBitStream(const char *Cmd) { //verbose will print results and demoding messages //emSearch will auto search for EM410x format in bitstream //askType switches decode: ask/raw = 0, ask/manchester = 1 -int ASKDemod_ext(const char *Cmd, bool verbose, bool emSearch, uint8_t askType, bool *stCheck) { - int invert = 0; - int clk = 0; - int maxErr = 100; - size_t maxLen = 0; +int ASKDemod_ext(int clk, int invert, int maxErr, size_t maxLen, bool amplify, bool verbose, bool emSearch, uint8_t askType, bool *stCheck) { uint8_t askamp = 0; - char amp = tolower(param_getchar(Cmd, 0)); - - sscanf(Cmd, "%i %i %i %zu %c", &clk, &invert, &maxErr, &maxLen, &); if (!maxLen) maxLen = pm3_capabilities.bigbuf_size; - if (invert != 0 && invert != 1) { - PrintAndLogEx(WARNING, "Invalid argument: %s", Cmd); - return PM3_EINVARG; - } - - if (clk == 1) { - invert = 1; - clk = 0; - } uint8_t *bits = calloc(MAX_GRAPH_TRACE_LEN, sizeof(uint8_t)); if (bits == NULL) { return PM3_EMALLOC; @@ -597,7 +581,7 @@ int ASKDemod_ext(const char *Cmd, bool verbose, bool emSearch, uint8_t askType, int foundclk = 0; //amplify signal before ST check - if (amp == 'a') { + if (amplify) { askAmp(bits, BitLen); } @@ -658,9 +642,9 @@ int ASKDemod_ext(const char *Cmd, bool verbose, bool emSearch, uint8_t askType, free(bits); return PM3_SUCCESS; } -int ASKDemod(const char *Cmd, bool verbose, bool emSearch, uint8_t askType) { +int ASKDemod(int clk, int invert, int maxErr, size_t maxLen, bool amplify, bool verbose, bool emSearch, uint8_t askType) { bool st = false; - return ASKDemod_ext(Cmd, verbose, emSearch, askType, &st); + return ASKDemod_ext(clk, invert, maxErr, maxLen, amplify, verbose, emSearch, askType, &st); } //by marshmellow @@ -670,19 +654,36 @@ int ASKDemod(const char *Cmd, bool verbose, bool emSearch, uint8_t askType) { static int Cmdaskmandemod(const char *Cmd) { char cmdp = tolower(param_getchar(Cmd, 0)); if (strlen(Cmd) > 45 || cmdp == 'h') return usage_data_rawdemod_am(); - - bool st = true; - if (Cmd[0] == 's') - return ASKDemod_ext(Cmd++, true, true, 1, &st); - else if (Cmd[1] == 's') - return ASKDemod_ext(Cmd += 2, true, true, 1, &st); - - return ASKDemod(Cmd, true, true, 1); + bool st = false; + if (Cmd[0] == 's') { + st = true; + Cmd++; + } else if (Cmd[1] == 's') { + st = true; + Cmd+=2; + } + int clk = 0; + int invert = 0; + int maxErr = 100; + size_t maxLen = 0; + bool amplify = false; + char amp = tolower(param_getchar(Cmd, 0)); + sscanf(Cmd, "%i %i %i %zu %c", &clk, &invert, &maxErr, &maxLen, &); + amplify = amp == 'a'; + if (clk == 1) { + invert = 1; + clk = 0; + } + if (invert != 0 && invert != 1) { + PrintAndLogEx(WARNING, "Invalid value for invert: %i", invert); + return PM3_EINVARG; + } + return ASKDemod_ext(clk, invert, maxErr, maxLen, amplify, true, true, 1, &st); } //by marshmellow //manchester decode -//stricktly take 10 and 01 and convert to 0 and 1 +//strictly take 10 and 01 and convert to 0 and 1 static int Cmdmandecoderaw(const char *Cmd) { size_t size = 0; int high = 0, low = 0; @@ -785,10 +786,8 @@ static int CmdBiphaseDecodeRaw(const char *Cmd) { //by marshmellow // - ASK Demod then Biphase decode GraphBuffer samples -int ASKbiphaseDemod(const char *Cmd, bool verbose) { +int ASKbiphaseDemod(int offset, int clk, int invert, int maxErr, bool verbose) { //ask raw demod GraphBuffer first - int offset = 0, clk = 0, invert = 0, maxErr = 50; - sscanf(Cmd, "%i %i %i %i", &offset, &clk, &invert, &maxErr); uint8_t BitStream[MAX_DEMOD_BUF_LEN]; size_t size = getFromGraphBuf(BitStream); @@ -828,16 +827,33 @@ int ASKbiphaseDemod(const char *Cmd, bool verbose) { static int Cmdaskbiphdemod(const char *Cmd) { char cmdp = tolower(param_getchar(Cmd, 0)); if (strlen(Cmd) > 25 || cmdp == 'h') return usage_data_rawdemod_ab(); - - return ASKbiphaseDemod(Cmd, true); + int offset = 0, clk = 0, invert = 0, maxErr = 50; + sscanf(Cmd, "%i %i %i %i", &offset, &clk, &invert, &maxErr); + return ASKbiphaseDemod(offset, clk, invert, maxErr, true); } //by marshmellow - see ASKDemod static int Cmdaskrawdemod(const char *Cmd) { char cmdp = tolower(param_getchar(Cmd, 0)); if (strlen(Cmd) > 25 || cmdp == 'h') return usage_data_rawdemod_ar(); - - return ASKDemod(Cmd, true, false, 0); + bool st = false; + int clk = 0; + int invert = 0; + int maxErr = 100; + size_t maxLen = 0; + bool amplify = false; + char amp = tolower(param_getchar(Cmd, 0)); + sscanf(Cmd, "%i %i %i %zu %c", &clk, &invert, &maxErr, &maxLen, &); + amplify = amp == 'a'; + if (clk == 1) { + invert = 1; + clk = 0; + } + if (invert != 0 && invert != 1) { + PrintAndLogEx(WARNING, "Invalid value for invert: %i", invert); + return PM3_EINVARG; + } + return ASKDemod_ext(clk, invert, maxErr, maxLen, amplify, true, false, 0, &st); } int AutoCorrelate(const int *in, int *out, size_t len, size_t window, bool SaveGrph, bool verbose) { @@ -1140,24 +1156,8 @@ static char *GetFSKType(uint8_t fchigh, uint8_t fclow, uint8_t invert) { //fsk raw demod and print binary //takes 4 arguments - Clock, invert, fchigh, fclow //defaults: clock = 50, invert=1, fchigh=10, fclow=8 (RF/10 RF/8 (fsk2a)) -int FSKrawDemod(const char *Cmd, bool verbose) { +int FSKrawDemod(uint8_t rfLen, uint8_t invert, uint8_t fchigh, uint8_t fclow, bool verbose) { //raw fsk demod no manchester decoding no start bit finding just get binary from wave - uint8_t rfLen, invert, fchigh, fclow; - - //set defaults - //set options from parameters entered with the command - rfLen = param_get8(Cmd, 0); - invert = param_get8(Cmd, 1); - fchigh = param_get8(Cmd, 2); - fclow = param_get8(Cmd, 3); - - if (strlen(Cmd) > 0 && strlen(Cmd) <= 2) { - if (rfLen == 1) { - invert = 1; //if invert option only is used - rfLen = 0; - } - } - if (getSignalProperties()->isnoise) return PM3_ESOFT; @@ -1218,26 +1218,27 @@ out: static int CmdFSKrawdemod(const char *Cmd) { char cmdp = tolower(param_getchar(Cmd, 0)); if (strlen(Cmd) > 20 || cmdp == 'h') return usage_data_rawdemod_fs(); + uint8_t rfLen, invert, fchigh, fclow; - return FSKrawDemod(Cmd, true); + //set defaults + //set options from parameters entered with the command + rfLen = param_get8(Cmd, 0); + invert = param_get8(Cmd, 1); + fchigh = param_get8(Cmd, 2); + fclow = param_get8(Cmd, 3); + + if (strlen(Cmd) > 0 && strlen(Cmd) <= 2) { + if (rfLen == 1) { + invert = 1; //if invert option only is used + rfLen = 0; + } + } + return FSKrawDemod(rfLen, invert, fchigh, fclow, true); } //by marshmellow //attempt to psk1 demod graph buffer -int PSKDemod(const char *Cmd, bool verbose) { - int invert = 0, clk = 0, maxErr = 100; - - sscanf(Cmd, "%i %i %i", &clk, &invert, &maxErr); - - if (clk == 1) { - invert = 1; - clk = 0; - } - if (invert != 0 && invert != 1) { - if (g_debugMode || verbose) PrintAndLogEx(WARNING, "Invalid argument: %s", Cmd); - return PM3_EINVARG; - } - +int PSKDemod(int clk, int invert, int maxErr, bool verbose) { if (getSignalProperties()->isnoise) return PM3_ESOFT; @@ -1276,9 +1277,9 @@ int PSKDemod(const char *Cmd, bool verbose) { return PM3_SUCCESS; } -int demodIdteck(void) { - - if (PSKDemod("", false) != PM3_SUCCESS) { +int demodIdteck(bool verbose) { + (void) verbose; // unused so far + if (PSKDemod(0, 0, 100, false) != PM3_SUCCESS) { PrintAndLogEx(DEBUG, "DEBUG: Error - Idteck PSKDemod failed"); return PM3_ESOFT; } @@ -1300,7 +1301,7 @@ int demodIdteck(void) { PrintAndLogEx(DEBUG, "DEBUG: Error - Idteck: idx: %d", idx); // if didn't find preamble try again inverting - if (PSKDemod("1", false) != PM3_SUCCESS) { + if (PSKDemod(0, 1, 100, false) != PM3_SUCCESS) { PrintAndLogEx(DEBUG, "DEBUG: Error - Idteck PSKDemod failed"); return PM3_ESOFT; } @@ -1347,20 +1348,9 @@ static int CmdIdteckDemod(const char *Cmd) { // takes 3 arguments - clock, invert, maxErr as integers // attempts to demodulate nrz only // prints binary found and saves in demodbuffer for further commands -int NRZrawDemod(const char *Cmd, bool verbose) { +int NRZrawDemod(int clk, int invert, int maxErr, bool verbose) { int errCnt = 0, clkStartIdx = 0; - int invert = 0, clk = 0, maxErr = 100; - sscanf(Cmd, "%i %i %i", &clk, &invert, &maxErr); - if (clk == 1) { - invert = 1; - clk = 0; - } - - if (invert != 0 && invert != 1) { - PrintAndLogEx(WARNING, "(NRZrawDemod) Invalid argument: %s", Cmd); - return PM3_EINVARG; - } if (getSignalProperties()->isnoise) return PM3_ESOFT; @@ -1409,8 +1399,18 @@ int NRZrawDemod(const char *Cmd, bool verbose) { static int CmdNRZrawDemod(const char *Cmd) { char cmdp = tolower(param_getchar(Cmd, 0)); if (strlen(Cmd) > 16 || cmdp == 'h') return usage_data_rawdemod_nr(); + int invert = 0, clk = 0, maxErr = 100; + sscanf(Cmd, "%i %i %i", &clk, &invert, &maxErr); + if (clk == 1) { + invert = 1; + clk = 0; + } - return NRZrawDemod(Cmd, true); + if (invert != 0 && invert != 1) { + PrintAndLogEx(WARNING, "(NRZrawDemod) Invalid argument: %s", Cmd); + return PM3_EINVARG; + } + return NRZrawDemod(clk, invert, maxErr, true); } // by marshmellow @@ -1420,8 +1420,17 @@ static int CmdNRZrawDemod(const char *Cmd) { int CmdPSK1rawDemod(const char *Cmd) { char cmdp = tolower(param_getchar(Cmd, 0)); if (strlen(Cmd) > 16 || cmdp == 'h') return usage_data_rawdemod_p1(); - - int ans = PSKDemod(Cmd, true); + int clk = 0, invert = 0, maxErr = 100; + sscanf(Cmd, "%i %i %i", &clk, &invert, &maxErr); + if (clk == 1) { + invert = 1; + clk = 0; + } + if (invert != 0 && invert != 1) { + PrintAndLogEx(WARNING, "Invalid value for invert: %i", invert); + return PM3_EINVARG; + } + int ans = PSKDemod(clk, invert, maxErr, true); //output if (ans != PM3_SUCCESS) { if (g_debugMode) PrintAndLogEx(ERR, "Error demoding: %d", ans); @@ -1438,8 +1447,17 @@ int CmdPSK1rawDemod(const char *Cmd) { static int CmdPSK2rawDemod(const char *Cmd) { char cmdp = tolower(param_getchar(Cmd, 0)); if (strlen(Cmd) > 16 || cmdp == 'h') return usage_data_rawdemod_p2(); - - int ans = PSKDemod(Cmd, true); + int clk = 0, invert = 0, maxErr = 100; + sscanf(Cmd, "%i %i %i", &clk, &invert, &maxErr); + if (clk == 1) { + invert = 1; + clk = 0; + } + if (invert != 0 && invert != 1) { + PrintAndLogEx(WARNING, "Invalid value for invert: %i", invert); + return PM3_EINVARG; + } + int ans = PSKDemod(clk, invert, maxErr, true); if (ans != PM3_SUCCESS) { if (g_debugMode) PrintAndLogEx(ERR, "Error demoding: %d", ans); return PM3_ESOFT; diff --git a/client/src/cmddata.h b/client/src/cmddata.h index acda950a5..aecce229a 100644 --- a/client/src/cmddata.h +++ b/client/src/cmddata.h @@ -59,12 +59,13 @@ int CmdNorm(const char *Cmd); int CmdPlot(const char *Cmd); // used by cmd lf cotag int CmdSave(const char *Cmd); // used by cmd auto int CmdTuneSamples(const char *Cmd); // used by cmd lf hw -int ASKbiphaseDemod(const char *Cmd, bool verbose); // used by cmd lf em4x, lf fdx, lf guard, lf jablotron, lf nedap, lf t55xx -int ASKDemod(const char *Cmd, bool verbose, bool emSearch, uint8_t askType); // used by cmd lf em4x, lf t55xx, lf viking -int ASKDemod_ext(const char *Cmd, bool verbose, bool emSearch, uint8_t askType, bool *stCheck); // used by cmd lf, lf em4x, lf noralsy, le presco, lf securekey, lf t55xx, lf visa2k -int FSKrawDemod(const char *Cmd, bool verbose); // used by cmd lf, lf em4x, lf t55xx -int PSKDemod(const char *Cmd, bool verbose); // used by cmd lf em4x, lf indala, lf keri, lf nexwatch, lf t55xx -int NRZrawDemod(const char *Cmd, bool verbose); // used by cmd lf pac, lf t55xx + +int ASKbiphaseDemod(int offset, int clk, int invert, int maxErr, bool verbose); // used by cmd lf em4x, lf fdx, lf guard, lf jablotron, lf nedap, lf t55xx +int ASKDemod(int clk, int invert, int maxErr, size_t maxLen, bool amplify, bool verbose, bool emSearch, uint8_t askType); // used by cmd lf em4x, lf t55xx, lf viking +int ASKDemod_ext(int clk, int invert, int maxErr, size_t maxLen, bool amplify, bool verbose, bool emSearch, uint8_t askType, bool *stCheck); // used by cmd lf, lf em4x, lf noralsy, le presco, lf securekey, lf t55xx, lf visa2k +int FSKrawDemod(uint8_t rfLen, uint8_t invert, uint8_t fchigh, uint8_t fclow, bool verbose); // used by cmd lf, lf em4x, lf t55xx +int PSKDemod(int clk, int invert, int maxErr, bool verbose); // used by cmd lf em4x, lf indala, lf keri, lf nexwatch, lf t55xx +int NRZrawDemod(int clk, int invert, int maxErr, bool verbose); // used by cmd lf pac, lf t55xx void printDemodBuff(void); @@ -79,7 +80,7 @@ int getSamplesEx(uint32_t start, uint32_t end, bool verbose); void setClockGrid(uint32_t clk, int offset); int directionalThreshold(const int *in, int *out, size_t len, int8_t up, int8_t down); int AskEdgeDetect(const int *in, int *out, int len, int threshold); -int demodIdteck(void); +int demodIdteck(bool verbose); #define MAX_DEMOD_BUF_LEN (1024*128) extern uint8_t DemodBuffer[MAX_DEMOD_BUF_LEN]; diff --git a/client/src/cmdlf.c b/client/src/cmdlf.c index bcc980db4..113ca90be 100644 --- a/client/src/cmdlf.c +++ b/client/src/cmdlf.c @@ -1445,27 +1445,27 @@ int CmdLFfind(const char *Cmd) { } } - if (demodVisa2k() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("Visa2000 ID") " found!"); goto out;} - if (demodHID() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("HID Prox ID") " found!"); goto out;} - if (demodAWID() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("AWID ID") " found!"); goto out;} - if (demodIOProx() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("IO Prox ID") " found!"); goto out;} - if (demodParadox() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("Paradox ID") " found!"); goto out;} - if (demodNexWatch() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("NexWatch ID") " found!"); goto out;} - if (demodIndala() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("Indala ID") " found!"); goto out;} - if (demodEM410x() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("EM410x ID") " found!"); goto out;} + if (demodVisa2k(true) == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("Visa2000 ID") " found!"); goto out;} + if (demodHID(true) == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("HID Prox ID") " found!"); goto out;} + if (demodAWID(true) == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("AWID ID") " found!"); goto out;} + if (demodIOProx(true) == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("IO Prox ID") " found!"); goto out;} + if (demodParadox(true) == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("Paradox ID") " found!"); goto out;} + if (demodNexWatch(true) == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("NexWatch ID") " found!"); goto out;} + if (demodIndala(true) == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("Indala ID") " found!"); goto out;} + if (demodEM410x(true) == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("EM410x ID") " found!"); goto out;} if (demodFDX(true) == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("FDX-B ID") " found!"); goto out;} - if (demodGuard() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("Guardall G-Prox II ID") " found!"); goto out; } - if (demodIdteck() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("Idteck ID") " found!"); goto out;} - if (demodJablotron() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("Jablotron ID") " found!"); goto out;} - if (demodNedap() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("NEDAP ID") " found!"); goto out;} - if (demodNoralsy() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("Noralsy ID") " found!"); goto out;} - if (demodKeri() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("KERI ID") " found!"); goto out;} - if (demodPac() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("PAC/Stanley ID") " found!"); goto out;} - if (demodPresco() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("Presco ID") " found!"); goto out;} - if (demodPyramid() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("Pyramid ID") " found!"); goto out;} - if (demodSecurakey() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("Securakey ID") " found!"); goto out;} - if (demodViking() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("Viking ID") " found!"); goto out;} - if (demodGallagher() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("GALLAGHER ID") " found!"); goto out;} + if (demodGuard(true) == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("Guardall G-Prox II ID") " found!"); goto out; } + if (demodIdteck(true) == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("Idteck ID") " found!"); goto out;} + if (demodJablotron(true) == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("Jablotron ID") " found!"); goto out;} + if (demodNedap(true) == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("NEDAP ID") " found!"); goto out;} + if (demodNoralsy(true) == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("Noralsy ID") " found!"); goto out;} + if (demodKeri(true) == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("KERI ID") " found!"); goto out;} + if (demodPac(true) == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("PAC/Stanley ID") " found!"); goto out;} + if (demodPresco(true) == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("Presco ID") " found!"); goto out;} + if (demodPyramid(true) == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("Pyramid ID") " found!"); goto out;} + if (demodSecurakey(true) == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("Securakey ID") " found!"); goto out;} + if (demodViking(true) == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("Viking ID") " found!"); goto out;} + if (demodGallagher(true) == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("GALLAGHER ID") " found!"); goto out;} // if (demodTI() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("Texas Instrument ID") " found!"); goto out;} // if (demodFermax() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("Fermax ID") " found!"); goto out;} @@ -1486,14 +1486,14 @@ int CmdLFfind(const char *Cmd) { //fsk if (GetFskClock("", false)) { - if (FSKrawDemod("", true) == PM3_SUCCESS) { + if (FSKrawDemod(0, 0, 0, 0, true) == PM3_SUCCESS) { PrintAndLogEx(NORMAL, "\nUnknown FSK Modulated Tag found!"); goto out; } } bool st = true; - if (ASKDemod_ext("0 0 0", true, false, 1, &st) == PM3_SUCCESS) { + if (ASKDemod_ext(0, 0, 0, 0, false, true, false, 1, &st) == PM3_SUCCESS) { PrintAndLogEx(NORMAL, "\nUnknown ASK Modulated and Manchester encoded Tag found!"); PrintAndLogEx(NORMAL, "if it does not look right it could instead be ASK/Biphase - try " _YELLOW_("'data rawdemod ab'")); goto out; diff --git a/client/src/cmdlfawid.c b/client/src/cmdlfawid.c index 765c7e9c6..b22d0adb0 100644 --- a/client/src/cmdlfawid.c +++ b/client/src/cmdlfawid.c @@ -196,9 +196,8 @@ static int CmdAWIDWatch(const char *Cmd) { //by marshmellow //AWID Prox demod - FSK2a RF/50 with preamble of 00000001 (always a 96 bit data stream) //print full AWID Prox ID and some bit format details if found -static int CmdAWIDDemod(const char *Cmd) { - (void)Cmd; // Cmd is not used so far - +int demodAWID(bool verbose) { + (void) verbose; // unused so far uint8_t *bits = calloc(MAX_GRAPH_TRACE_LEN, sizeof(uint8_t)); if (bits == NULL) { PrintAndLogEx(DEBUG, "DEBUG: Error - AWID failed to allocate memory"); @@ -337,10 +336,16 @@ static int CmdAWIDDemod(const char *Cmd) { return PM3_SUCCESS; } +static int CmdAWIDDemod(const char *Cmd) { + (void)Cmd; // Cmd is not used so far + return demodAWID(true); +} + // this read is the "normal" read, which download lf signal and tries to demod here. static int CmdAWIDRead(const char *Cmd) { + (void)Cmd; // Cmd is not used so far lf_read(false, 12000); - return CmdAWIDDemod(Cmd); + return demodAWID(true); } static int CmdAWIDSim(const char *Cmd) { @@ -605,7 +610,3 @@ int getAWIDBits(uint8_t fmtlen, uint32_t fc, uint32_t cn, uint8_t *bits) { return PM3_SUCCESS; } - -int demodAWID(void) { - return CmdAWIDDemod(""); -} diff --git a/client/src/cmdlfawid.h b/client/src/cmdlfawid.h index 80645e9b9..11a235aea 100644 --- a/client/src/cmdlfawid.h +++ b/client/src/cmdlfawid.h @@ -15,7 +15,7 @@ int CmdLFAWID(const char *Cmd); -int demodAWID(void); +int demodAWID(bool verbose); int getAWIDBits(uint8_t fmtlen, uint32_t fc, uint32_t cn, uint8_t *bits); #endif diff --git a/client/src/cmdlfcotag.c b/client/src/cmdlfcotag.c index b0160e335..21a3b5786 100644 --- a/client/src/cmdlfcotag.c +++ b/client/src/cmdlfcotag.c @@ -37,7 +37,8 @@ static int usage_lf_cotag_read(void) { // COTAG demod should be able to use GraphBuffer, // when data load samples -int demodCOTAG(void) { +int demodCOTAG(bool verbose) { + (void) verbose; // unused so far uint8_t bits[COTAG_BITS] = {0}; size_t bitlen = COTAG_BITS; @@ -73,8 +74,8 @@ int demodCOTAG(void) { } static int CmdCOTAGDemod(const char *Cmd) { - (void)Cmd; - return demodCOTAG(); + (void)Cmd; // Cmd is not used so far + return demodCOTAG(true); } // When reading a COTAG. // 0 = HIGH/LOW signal - maxlength bigbuff @@ -118,7 +119,7 @@ static int CmdCOTAGRead(const char *Cmd) { case 1: { memcpy(DemodBuffer, resp.data.asBytes, resp.length); DemodBufferLen = resp.length; - return demodCOTAG(); + return demodCOTAG(true); } } return PM3_SUCCESS; diff --git a/client/src/cmdlfcotag.h b/client/src/cmdlfcotag.h index d7b5bc331..4ebacc37e 100644 --- a/client/src/cmdlfcotag.h +++ b/client/src/cmdlfcotag.h @@ -18,6 +18,6 @@ #endif int CmdLFCOTAG(const char *Cmd); -int demodCOTAG(void); +int demodCOTAG(bool verbose); int readCOTAGUid(void); #endif diff --git a/client/src/cmdlfem4x.c b/client/src/cmdlfem4x.c index 3b00686b1..ae35245ae 100644 --- a/client/src/cmdlfem4x.c +++ b/client/src/cmdlfem4x.c @@ -390,15 +390,14 @@ int AskEm410xDecode(bool verbose, uint32_t *hi, uint64_t *lo) { return PM3_SUCCESS; } -int AskEm410xDemod(const char *Cmd, uint32_t *hi, uint64_t *lo, bool verbose) { +int AskEm410xDemod(int clk, int invert, int maxErr, size_t maxLen, bool amplify, uint32_t *hi, uint64_t *lo, bool verbose) { bool st = true; // em410x simulation etc uses 0/1 as signal data. This must be converted in order to demod it back again if (isGraphBitstream()) { convertGraphFromBitstream(); } - - if (ASKDemod_ext(Cmd, false, false, 1, &st) != PM3_SUCCESS) + if (ASKDemod_ext(clk, invert, maxErr, maxLen, amplify, false, false, 1, &st) != PM3_SUCCESS) return PM3_ESOFT; return AskEm410xDecode(verbose, hi, lo); } @@ -423,14 +422,27 @@ static int CmdEM410xWatch(const char *Cmd) { //takes 3 arguments - clock, invert and maxErr as integers //attempts to demodulate ask while decoding manchester //prints binary found and saves in graphbuffer for further commands +int demodEM410x(bool verbose) { + (void) verbose; // unused so far + uint32_t hi = 0; + uint64_t lo = 0; + return AskEm410xDemod(0, 0, 100, 0, false, &hi, &lo, true); +} + static int CmdEM410xDemod(const char *Cmd) { char cmdp = tolower(param_getchar(Cmd, 0)); if (strlen(Cmd) > 10 || cmdp == 'h') return usage_lf_em410x_demod(); uint32_t hi = 0; uint64_t lo = 0; - - if (AskEm410xDemod(Cmd, &hi, &lo, true) != PM3_SUCCESS) + int clk = 0; + int invert = 0; + int maxErr = 100; + size_t maxLen = 0; + char amp = tolower(param_getchar(Cmd, 0)); + sscanf(Cmd, "%i %i %i %zu %c", &clk, &invert, &maxErr, &maxLen, &); + bool amplify = amp == 'a'; + if (AskEm410xDemod(clk, invert, maxErr, maxLen, amplify, &hi, &lo, true) != PM3_SUCCESS) return PM3_ESOFT; g_em410xid = lo; @@ -439,8 +451,20 @@ static int CmdEM410xDemod(const char *Cmd) { // this read is the "normal" read, which download lf signal and tries to demod here. static int CmdEM410xRead(const char *Cmd) { + char cmdp = tolower(param_getchar(Cmd, 0)); + if (strlen(Cmd) > 10 || cmdp == 'h') return usage_lf_em410x_demod(); + + uint32_t hi = 0; + uint64_t lo = 0; + int clk = 0; + int invert = 0; + int maxErr = 100; + size_t maxLen = 0; + char amp = tolower(param_getchar(Cmd, 0)); + sscanf(Cmd, "%i %i %i %zu %c", &clk, &invert, &maxErr, &maxLen, &); + bool amplify = amp == 'a'; lf_read(false, 12288); - return CmdEM410xDemod(Cmd); + return AskEm410xDemod(clk, invert, maxErr, maxLen, amplify, &hi, &lo, true); } // emulate an EM410X tag @@ -735,7 +759,7 @@ static bool detectFSK(void) { return false; } // demod - int ans = FSKrawDemod("0 0", false); + int ans = FSKrawDemod(0, 0, 0, 0, false); if (ans != PM3_SUCCESS) { PrintAndLogEx(DEBUG, "DEBUG: Error - EM: FSK Demod failed"); return false; @@ -751,12 +775,12 @@ static bool detectPSK(void) { } //demod //try psk1 -- 0 0 6 (six errors?!?) - ans = PSKDemod("0 0 6", false); + ans = PSKDemod(0, 0, 6, false); if (ans != PM3_SUCCESS) { PrintAndLogEx(DEBUG, "DEBUG: Error - EM: PSK1 Demod failed"); //try psk1 inverted - ans = PSKDemod("0 1 6", false); + ans = PSKDemod(0, 1, 6, false); if (ans != PM3_SUCCESS) { PrintAndLogEx(DEBUG, "DEBUG: Error - EM: PSK1 inverted Demod failed"); return false; @@ -769,7 +793,7 @@ static bool detectPSK(void) { // try manchester - NOTE: ST only applies to T55x7 tags. static bool detectASK_MAN(void) { bool stcheck = false; - if (ASKDemod_ext("0 0 0", false, false, 1, &stcheck) != PM3_SUCCESS) { + if (ASKDemod_ext(0, 0, 0, 0, false, false, false, 1, &stcheck) != PM3_SUCCESS) { PrintAndLogEx(DEBUG, "DEBUG: Error - EM: ASK/Manchester Demod failed"); return false; } @@ -777,11 +801,11 @@ static bool detectASK_MAN(void) { } static bool detectASK_BI(void) { - int ans = ASKbiphaseDemod("0 0 1", false); + int ans = ASKbiphaseDemod(0, 0, 1, 50, false); if (ans != PM3_SUCCESS) { PrintAndLogEx(DEBUG, "DEBUG: Error - EM: ASK/biphase normal demod failed"); - ans = ASKbiphaseDemod("0 1 1", false); + ans = ASKbiphaseDemod(0, 1, 1, 50, false); if (ans != PM3_SUCCESS) { PrintAndLogEx(DEBUG, "DEBUG: Error - EM: ASK/biphase inverted demod failed"); return false; @@ -790,11 +814,11 @@ static bool detectASK_BI(void) { return true; } static bool detectNRZ(void) { - int ans = NRZrawDemod("0 0 1", false); + int ans = NRZrawDemod(0, 0, 1, false); if (ans != PM3_SUCCESS) { PrintAndLogEx(DEBUG, "DEBUG: Error - EM: NRZ normal demod failed"); - ans = NRZrawDemod("0 1 1", false); + ans = NRZrawDemod(0, 1, 1, false); if (ans != PM3_SUCCESS) { PrintAndLogEx(DEBUG, "DEBUG: Error - EM: NRZ inverted demod failed"); return false; @@ -1411,7 +1435,3 @@ int CmdLFEM4X(const char *Cmd) { clearCommandBuffer(); return CmdsParse(CommandTable, Cmd); } - -int demodEM410x(void) { - return CmdEM410xDemod(""); -} diff --git a/client/src/cmdlfem4x.h b/client/src/cmdlfem4x.h index 62ecafa23..7dc9a27be 100644 --- a/client/src/cmdlfem4x.h +++ b/client/src/cmdlfem4x.h @@ -15,11 +15,11 @@ int CmdLFEM4X(const char *Cmd); -int demodEM410x(void); +int demodEM410x(bool verbose); bool EM4x05IsBlock0(uint32_t *word); void printEM410x(uint32_t hi, uint64_t id); int AskEm410xDecode(bool verbose, uint32_t *hi, uint64_t *lo); -int AskEm410xDemod(const char *Cmd, uint32_t *hi, uint64_t *lo, bool verbose); +int AskEm410xDemod(int clk, int invert, int maxErr, size_t maxLen, bool amplify, uint32_t *hi, uint64_t *lo, bool verbose); #endif diff --git a/client/src/cmdlffdx.c b/client/src/cmdlffdx.c index 431ec8216..14e6389d5 100644 --- a/client/src/cmdlffdx.c +++ b/client/src/cmdlffdx.c @@ -220,7 +220,7 @@ static int CmdFDXBdemodBI(const char *Cmd) { int demodFDX(bool verbose) { //Differential Biphase / di-phase (inverted biphase) //get binary from ask wave - if (ASKbiphaseDemod("0 32 1 100", false) != PM3_SUCCESS) { + if (ASKbiphaseDemod(0, 32, 1, 100, false) != PM3_SUCCESS) { PrintAndLogEx(DEBUG, "DEBUG: Error - FDX-B ASKbiphaseDemod failed"); return PM3_ESOFT; } diff --git a/client/src/cmdlfgallagher.c b/client/src/cmdlfgallagher.c index 3a717bc61..43db532a9 100644 --- a/client/src/cmdlfgallagher.c +++ b/client/src/cmdlfgallagher.c @@ -67,11 +67,10 @@ static void descramble(uint8_t *arr, uint8_t len) { } //see ASK/MAN Demod for what args are accepted -static int CmdGallagherDemod(const char *Cmd) { - - (void)Cmd; +int demodGallagher(bool verbose) { + (void) verbose; // unused so far bool st = true; - if (ASKDemod_ext("32 0 0 0", false, false, 1, &st) != PM3_SUCCESS) { + if (ASKDemod_ext(32, 0, 100, 0, false, false, false, 1, &st) != PM3_SUCCESS) { PrintAndLogEx(DEBUG, "DEBUG: Error - GALLAGHER: ASKDemod failed"); return PM3_ESOFT; } @@ -134,9 +133,15 @@ static int CmdGallagherDemod(const char *Cmd) { return PM3_SUCCESS; } +static int CmdGallagherDemod(const char *Cmd) { + (void)Cmd; // Cmd is not used so far + return demodGallagher(true); +} + static int CmdGallagherRead(const char *Cmd) { + (void)Cmd; // Cmd is not used so far lf_read(false, 4096 * 2 + 20); - return CmdGallagherDemod(Cmd); + return demodGallagher(true); } static int CmdGallagherClone(const char *Cmd) { @@ -222,8 +227,3 @@ int detectGallagher(uint8_t *dest, size_t *size) { //return start position return (int)startIdx; } - -int demodGallagher(void) { - return CmdGallagherDemod(""); -} - diff --git a/client/src/cmdlfgallagher.h b/client/src/cmdlfgallagher.h index 0ee2a72b3..e3e7a8caa 100644 --- a/client/src/cmdlfgallagher.h +++ b/client/src/cmdlfgallagher.h @@ -14,7 +14,7 @@ int CmdLFGallagher(const char *Cmd); -int demodGallagher(void); +int demodGallagher(bool verbose); int detectGallagher(uint8_t *dest, size_t *size); #endif diff --git a/client/src/cmdlfguard.c b/client/src/cmdlfguard.c index 83a34d5fe..1ab8df3d8 100644 --- a/client/src/cmdlfguard.c +++ b/client/src/cmdlfguard.c @@ -65,12 +65,11 @@ static int usage_lf_guard_sim(void) { //WARNING: if it fails during some points it will destroy the DemodBuffer data // but will leave the GraphBuffer intact. //if successful it will push askraw data back to demod buffer ready for emulation -static int CmdGuardDemod(const char *Cmd) { - (void)Cmd; // Cmd is not used so far - +int demodGuard(bool verbose) { + (void) verbose; // unused so far //Differential Biphase //get binary from ask wave - if (ASKbiphaseDemod("0 64 0 0", false) != PM3_SUCCESS) { + if (ASKbiphaseDemod(0, 64, 0, 0, false) != PM3_SUCCESS) { PrintAndLogEx(DEBUG, "DEBUG: Error - gProxII ASKbiphaseDemod failed"); return PM3_ESOFT; } @@ -150,9 +149,15 @@ static int CmdGuardDemod(const char *Cmd) { return PM3_SUCCESS; } +static int CmdGuardDemod(const char *Cmd) { + (void)Cmd; // Cmd is not used so far + return demodGuard(true); +} + static int CmdGuardRead(const char *Cmd) { + (void)Cmd; // Cmd is not used so far lf_read(false, 10000); - return CmdGuardDemod(Cmd); + return demodGuard(true); } static int CmdGuardClone(const char *Cmd) { @@ -290,10 +295,6 @@ int detectGProxII(uint8_t *bits, size_t *size) { return -5; //spacer bits not found - not a valid gproxII } -int demodGuard(void) { - return CmdGuardDemod(""); -} - // Works for 26bits. int getGuardBits(uint8_t fmtlen, uint32_t fc, uint32_t cn, uint8_t *guardBits) { diff --git a/client/src/cmdlfguard.h b/client/src/cmdlfguard.h index 3d923a7fe..132b45853 100644 --- a/client/src/cmdlfguard.h +++ b/client/src/cmdlfguard.h @@ -13,6 +13,6 @@ int CmdLFGuard(const char *Cmd); int detectGProxII(uint8_t *bits, size_t *size); -int demodGuard(void); +int demodGuard(bool verbose); int getGuardBits(uint8_t fmtlen, uint32_t fc, uint32_t cn, uint8_t *guardBits); #endif diff --git a/client/src/cmdlfhid.c b/client/src/cmdlfhid.c index d73235788..383243523 100644 --- a/client/src/cmdlfhid.c +++ b/client/src/cmdlfhid.c @@ -152,8 +152,8 @@ static int sendTry(uint8_t format_idx, wiegand_card_t *card, uint32_t delay, boo //by marshmellow (based on existing demod + holiman's refactor) //HID Prox demod - FSK RF/50 with preamble of 00011101 (then manchester encoded) //print full HID Prox ID and some bit format details if found -static int CmdHIDDemod(const char *Cmd) { - (void)Cmd; // Cmd is not used so far +int demodHID(bool verbose) { + (void) verbose; // unused so far // HID simulation etc uses 0/1 as signal data. This must be converted in order to demod it back again if (isGraphBitstream()) { @@ -261,10 +261,16 @@ static int CmdHIDDemod(const char *Cmd) { return PM3_SUCCESS; } +static int CmdHIDDemod(const char *Cmd) { + (void)Cmd; // Cmd is not used so far + return demodHID(true); +} + // this read is the "normal" read, which download lf signal and tries to demod here. static int CmdHIDRead(const char *Cmd) { + (void)Cmd; // Cmd is not used so far lf_read(false, 12000); - return CmdHIDDemod(Cmd); + return demodHID(true); } // this read loops on device side. @@ -562,7 +568,3 @@ int CmdLFHID(const char *Cmd) { clearCommandBuffer(); return CmdsParse(CommandTable, Cmd); } - -int demodHID(void) { - return CmdHIDDemod(""); -} diff --git a/client/src/cmdlfhid.h b/client/src/cmdlfhid.h index 5ae2d7753..3c4b6e1f1 100644 --- a/client/src/cmdlfhid.h +++ b/client/src/cmdlfhid.h @@ -15,6 +15,6 @@ int CmdLFHID(const char *Cmd); -int demodHID(void); +int demodHID(bool verbose); #endif diff --git a/client/src/cmdlfindala.c b/client/src/cmdlfindala.c index 94500dbcf..7c29c1eba 100644 --- a/client/src/cmdlfindala.c +++ b/client/src/cmdlfindala.c @@ -151,25 +151,17 @@ static void decodeHeden2L(uint8_t *bits) { // Indala 26 bit decode // by marshmellow, martinbeier // optional arguments - same as PSKDemod (clock & invert & maxerr) -static int CmdIndalaDemod(const char *Cmd) { - - char cmdp = tolower(param_getchar(Cmd, 0)); - if (cmdp == 'h') return usage_lf_indala_demod(); - - int ans; - if (strlen(Cmd) > 0) - ans = PSKDemod(Cmd, true); - else - ans = PSKDemod("32", true); - +int demodIndalaEx(int clk, int invert, int maxErr, bool verbose) { + (void) verbose; // unused so far + int ans = PSKDemod(clk, invert, maxErr, true); if (ans != PM3_SUCCESS) { PrintAndLogEx(DEBUG, "DEBUG: Error - Indala can't demod signal: %d", ans); return PM3_ESOFT; } - uint8_t invert = 0; + uint8_t inv = 0; size_t size = DemodBufferLen; - int idx = detectIndala(DemodBuffer, &size, &invert); + int idx = detectIndala(DemodBuffer, &size, &inv); if (idx < 0) { if (idx == -1) PrintAndLogEx(DEBUG, "DEBUG: Error - Indala: not enough samples"); @@ -281,6 +273,29 @@ static int CmdIndalaDemod(const char *Cmd) { return PM3_SUCCESS; } +int demodIndala(bool verbose) { + return demodIndalaEx(32, 0, 100, verbose); +} + +static int CmdIndalaDemod(const char *Cmd) { + + char cmdp = tolower(param_getchar(Cmd, 0)); + if (cmdp == 'h') return usage_lf_indala_demod(); + + int clk = 32, invert = 0, maxErr = 100; + if (strlen(Cmd) > 0) { + sscanf(Cmd, "%i %i %i", &clk, &invert, &maxErr); + } + if (clk == 1) { + invert = 1; + clk = 0; + } + if (invert != 0 && invert != 1) { + PrintAndLogEx(WARNING, "Invalid value for invert: %i", invert); + return PM3_EINVARG; + } + return demodIndalaEx(clk, invert, maxErr, true); +} // older alternative indala demodulate (has some positives and negatives) // returns false positives more often - but runs against more sets of samples // poor psk signal can be difficult to demod this approach might succeed when the other fails @@ -485,8 +500,15 @@ static int CmdIndalaDemodAlt(const char *Cmd) { // this read is the "normal" read, which download lf signal and tries to demod here. static int CmdIndalaRead(const char *Cmd) { + char cmdp = tolower(param_getchar(Cmd, 0)); + if (cmdp == 'h') return usage_lf_indala_demod(); + + int clk = 32, invert = 0, maxErr = 100; + if (strlen(Cmd) > 0) { + sscanf(Cmd, "%i %i %i", &clk, &invert, &maxErr); + } lf_read(false, 30000); - return CmdIndalaDemod(Cmd); + return demodIndalaEx(clk, invert, maxErr, true); } static int CmdIndalaSim(const char *Cmd) { @@ -865,7 +887,3 @@ out: return (int) idx; } - -int demodIndala(void) { - return CmdIndalaDemod(""); -} diff --git a/client/src/cmdlfindala.h b/client/src/cmdlfindala.h index 65ed29e61..4ae858901 100644 --- a/client/src/cmdlfindala.h +++ b/client/src/cmdlfindala.h @@ -15,10 +15,11 @@ int CmdLFINDALA(const char *Cmd); int detectIndala(uint8_t *dest, size_t *size, uint8_t *invert); -int detectIndala26(uint8_t *bitStream, size_t *size, uint8_t *invert); -int detectIndala64(uint8_t *bitStream, size_t *size, uint8_t *invert); -int detectIndala224(uint8_t *bitStream, size_t *size, uint8_t *invert); -int demodIndala(void); +//int detectIndala26(uint8_t *bitStream, size_t *size, uint8_t *invert); +//int detectIndala64(uint8_t *bitStream, size_t *size, uint8_t *invert); +//int detectIndala224(uint8_t *bitStream, size_t *size, uint8_t *invert); +int demodIndalaEx(int clk, int invert, int maxErr, bool verbose); +int demodIndala(bool verbose); int getIndalaBits(uint8_t fc, uint16_t cn, uint8_t *bits); #endif diff --git a/client/src/cmdlfio.c b/client/src/cmdlfio.c index 1c3b676f6..729970246 100644 --- a/client/src/cmdlfio.c +++ b/client/src/cmdlfio.c @@ -95,8 +95,8 @@ static int CmdIOProxWatch(const char *Cmd) { //by marshmellow //IO-Prox demod - FSK RF/64 with preamble of 000000001 //print ioprox ID and some format details -static int CmdIOProxDemod(const char *Cmd) { - (void)Cmd; // Cmd is not used so far +int demodIOProx(bool verbose) { + (void) verbose; // unused so far int idx = 0, retval = PM3_SUCCESS; uint8_t bits[MAX_GRAPH_TRACE_LEN] = {0}; size_t size = getFromGraphBuf(bits); @@ -190,10 +190,15 @@ static int CmdIOProxDemod(const char *Cmd) { return retval; } +static int CmdIOProxDemod(const char *Cmd) { + (void)Cmd; // Cmd is not used so far + return demodIOProx(true); +} // this read is the "normal" read, which download lf signal and tries to demod here. static int CmdIOProxRead(const char *Cmd) { + (void)Cmd; // Cmd is not used so far lf_read(false, 12000); - return CmdIOProxDemod(Cmd); + return demodIOProx(true); } static int CmdIOProxSim(const char *Cmd) { uint16_t cn = 0; @@ -311,10 +316,6 @@ int CmdLFIO(const char *Cmd) { return CmdsParse(CommandTable, Cmd); } -int demodIOProx(void) { - return CmdIOProxDemod(""); -} - //Index map //0 10 20 30 40 50 60 //| | | | | | | diff --git a/client/src/cmdlfio.h b/client/src/cmdlfio.h index cb3a514be..4b3085c4f 100644 --- a/client/src/cmdlfio.h +++ b/client/src/cmdlfio.h @@ -8,7 +8,7 @@ int CmdLFIO(const char *Cmd); -int demodIOProx(void); +int demodIOProx(bool verbose); int getIOProxBits(uint8_t version, uint8_t fc, uint16_t cn, uint8_t *bits); #endif diff --git a/client/src/cmdlfjablotron.c b/client/src/cmdlfjablotron.c index a831436e2..9005743bf 100644 --- a/client/src/cmdlfjablotron.c +++ b/client/src/cmdlfjablotron.c @@ -78,16 +78,11 @@ static uint64_t getJablontronCardId(uint64_t rawcode) { return id; } -//see ASKDemod for what args are accepted -static int CmdJablotronDemod(const char *Cmd) { - (void)Cmd; // Cmd is not used so far - return demodJablotron(); -} - -int demodJablotron(void) { +int demodJablotron(bool verbose) { + (void) verbose; // unused so far //Differential Biphase / di-phase (inverted biphase) //get binary from ask wave - if (ASKbiphaseDemod("0 64 1 0", false) != PM3_SUCCESS) { + if (ASKbiphaseDemod(0, 64, 1, 0, false) != PM3_SUCCESS) { if (g_debugMode) PrintAndLogEx(DEBUG, "DEBUG: Error - Jablotron ASKbiphaseDemod failed"); return PM3_ESOFT; } @@ -137,9 +132,16 @@ int demodJablotron(void) { return PM3_SUCCESS; } +//see ASKDemod for what args are accepted +static int CmdJablotronDemod(const char *Cmd) { + (void)Cmd; // Cmd is not used so far + return demodJablotron(true); +} + static int CmdJablotronRead(const char *Cmd) { + (void)Cmd; // Cmd is not used so far lf_read(false, 16000); - return demodJablotron(); + return demodJablotron(true); } static int CmdJablotronClone(const char *Cmd) { diff --git a/client/src/cmdlfjablotron.h b/client/src/cmdlfjablotron.h index da4de291f..bdfe99982 100644 --- a/client/src/cmdlfjablotron.h +++ b/client/src/cmdlfjablotron.h @@ -13,7 +13,7 @@ int CmdLFJablotron(const char *Cmd); -int demodJablotron(void); +int demodJablotron(bool verbose); int detectJablotron(uint8_t *bits, size_t *size); int getJablotronBits(uint64_t fullcode, uint8_t *bits); diff --git a/client/src/cmdlfkeri.c b/client/src/cmdlfkeri.c index a0edff920..eafa53648 100644 --- a/client/src/cmdlfkeri.c +++ b/client/src/cmdlfkeri.c @@ -135,14 +135,10 @@ static int CmdKeriMSScramble(KeriMSScramble_t Action, uint32_t *FC, uint32_t *ID return PM3_SUCCESS; } -static int CmdKeriDemod(const char *Cmd) { - (void)Cmd; // Cmd is not used so far - return demodKeri(); -} +int demodKeri(bool verbose) { + (void) verbose; // unused so far -int demodKeri(void) { - - if (PSKDemod("", false) != PM3_SUCCESS) { + if (PSKDemod(0, 0, 100, false) != PM3_SUCCESS) { PrintAndLogEx(DEBUG, "DEBUG: Error - KERI: PSK1 Demod failed"); return PM3_ESOFT; } @@ -212,9 +208,15 @@ int demodKeri(void) { return PM3_SUCCESS; } +static int CmdKeriDemod(const char *Cmd) { + (void)Cmd; // Cmd is not used so far + return demodKeri(true); +} + static int CmdKeriRead(const char *Cmd) { + (void)Cmd; // Cmd is not used so far lf_read(false, 10000); - return CmdKeriDemod(Cmd); + return demodKeri(true); } static int CmdKeriClone(const char *Cmd) { diff --git a/client/src/cmdlfkeri.h b/client/src/cmdlfkeri.h index 2e1ada11f..210eb23f2 100644 --- a/client/src/cmdlfkeri.h +++ b/client/src/cmdlfkeri.h @@ -13,7 +13,7 @@ int CmdLFKeri(const char *Cmd); -int demodKeri(void); +int demodKeri(bool verbose); int detectKeri(uint8_t *dest, size_t *size, bool *invert); #endif diff --git a/client/src/cmdlfmotorola.c b/client/src/cmdlfmotorola.c index 5cad8028c..7deec0590 100644 --- a/client/src/cmdlfmotorola.c +++ b/client/src/cmdlfmotorola.c @@ -28,16 +28,10 @@ static int CmdHelp(const char *Cmd); -//see PSKDemod for what args are accepted -static int CmdMotorolaDemod(const char *Cmd) { - (void)Cmd; - return demodMotorola(); -} - -int demodMotorola(void) { - +int demodMotorola(bool verbose) { + (void) verbose; // unused so far //PSK1 - if (PSKDemod("32 1", true) != PM3_SUCCESS) { + if (PSKDemod(32, 1, 100, true) != PM3_SUCCESS) { PrintAndLogEx(DEBUG, "DEBUG: Error - Motorola: PSK Demod failed"); return PM3_ESOFT; } @@ -124,6 +118,12 @@ int demodMotorola(void) { return PM3_SUCCESS; } +//see PSKDemod for what args are accepted +static int CmdMotorolaDemod(const char *Cmd) { + (void)Cmd; + return demodMotorola(true); +} + static int CmdMotorolaRead(const char *Cmd) { // Motorola Flexpass seem to work at 74 kHz // and take about 4400 samples to befor modulating @@ -145,7 +145,7 @@ static int CmdMotorolaRead(const char *Cmd) { sc.divisor = LF_DIVISOR_125; sc.samples_to_skip = 0; lf_config(&sc); - return demodMotorola(); + return demodMotorola(true); } static int CmdMotorolaClone(const char *Cmd) { diff --git a/client/src/cmdlfmotorola.h b/client/src/cmdlfmotorola.h index 682193ebc..f74741bf2 100644 --- a/client/src/cmdlfmotorola.h +++ b/client/src/cmdlfmotorola.h @@ -14,7 +14,7 @@ int CmdLFMotorola(const char *Cmd); -int demodMotorola(void); +int demodMotorola(bool verbose); int detectMotorola(uint8_t *dest, size_t *size); int readMotorolaUid(void); #endif diff --git a/client/src/cmdlfnedap.c b/client/src/cmdlfnedap.c index 8fd01ff9f..58b7ad575 100644 --- a/client/src/cmdlfnedap.c +++ b/client/src/cmdlfnedap.c @@ -107,15 +107,14 @@ static uint8_t isEven_64_63(const uint8_t *data) { // 8 } //NEDAP demod - ASK/Biphase (or Diphase), RF/64 with preamble of 1111111110 (always a 128 bit data stream) -static int CmdLFNedapDemod(const char *Cmd) { - (void)Cmd; // Cmd is not used so far - +int demodNedap(bool verbose) { + (void) verbose; // unused so far uint8_t data[16], buffer[7], r0, r1, r2, r3, r4, r5, idxC1, idxC2, idxC3, idxC4, idxC5, fixed0, fixed1, unk1, unk2, subtype; // 4 bits size_t size, offset = 0; uint16_t checksum, customerCode; // 12 bits uint32_t badgeId; // max 99999 - if (ASKbiphaseDemod("0 64 1 0", false) != PM3_SUCCESS) { + if (ASKbiphaseDemod(0, 64, 1, 0, false) != PM3_SUCCESS) { if (g_debugMode) PrintAndLogEx(DEBUG, "DEBUG: Error - NEDAP: ASK/Biphase Demod failed"); return PM3_ESOFT; } @@ -262,6 +261,10 @@ static int CmdLFNedapDemod(const char *Cmd) { return PM3_SUCCESS; } +static int CmdLFNedapDemod(const char *Cmd) { + (void)Cmd; // Cmd is not used so far + return demodNedap(true); +} /* Index map E E preamble enc tag type encrypted uid P d 33 d 90 d 04 d 71 d 40 d 45 d E7 P 1111111110 00101101000001011010001100100100001011010100110101100 1 0 00110011 0 10010000 0 00000100 0 01110001 0 01000000 0 01000101 0 11100111 1 @@ -307,8 +310,9 @@ lf t55xx wr b 4 d 4c0003ff */ static int CmdLFNedapRead(const char *Cmd) { + (void)Cmd; // Cmd is not used so far lf_read(false, 16000); - return CmdLFNedapDemod(Cmd); + return demodNedap(true); } static void NedapGen(uint8_t subType, uint16_t customerCode, uint32_t id, bool isLong, uint8_t *data) { // 8 or 16 @@ -554,8 +558,3 @@ int CmdLFNedap(const char *Cmd) { clearCommandBuffer(); return CmdsParse(CommandTable, Cmd); } - -int demodNedap(void) { - return CmdLFNedapDemod(""); -} - diff --git a/client/src/cmdlfnedap.h b/client/src/cmdlfnedap.h index fda0e130e..58e90954f 100644 --- a/client/src/cmdlfnedap.h +++ b/client/src/cmdlfnedap.h @@ -13,7 +13,7 @@ int CmdLFNedap(const char *Cmd); -int demodNedap(void); +int demodNedap(bool verbose); int detectNedap(uint8_t *dest, size_t *size); int getNedapBits(uint32_t cn, uint8_t *nedapBits); diff --git a/client/src/cmdlfnexwatch.c b/client/src/cmdlfnexwatch.c index 57f7ab03b..8eb44c39b 100644 --- a/client/src/cmdlfnexwatch.c +++ b/client/src/cmdlfnexwatch.c @@ -150,8 +150,9 @@ static int nexwatch_scamble(NexWatchScramble_t action, uint32_t *id, uint32_t *s return PM3_SUCCESS; } -int demodNexWatch(void) { - if (PSKDemod("", false) != PM3_SUCCESS) { +int demodNexWatch(bool verbose) { + (void) verbose; // unused so far + if (PSKDemod(0, 0, 100, false) != PM3_SUCCESS) { PrintAndLogEx(DEBUG, "DEBUG: Error - NexWatch can't demod signal"); return PM3_ESOFT; } @@ -259,14 +260,15 @@ int demodNexWatch(void) { static int CmdNexWatchDemod(const char *Cmd) { (void)Cmd; - return demodNexWatch(); + return demodNexWatch(true); } //by marshmellow //see ASKDemod for what args are accepted static int CmdNexWatchRead(const char *Cmd) { + (void)Cmd; lf_read(false, 20000); - return CmdNexWatchDemod(Cmd); + return demodNexWatch(true); } static int CmdNexWatchClone(const char *Cmd) { diff --git a/client/src/cmdlfnexwatch.h b/client/src/cmdlfnexwatch.h index a282a320e..2144db9b1 100644 --- a/client/src/cmdlfnexwatch.h +++ b/client/src/cmdlfnexwatch.h @@ -13,6 +13,6 @@ int CmdLFNEXWATCH(const char *Cmd); -int demodNexWatch(void); +int demodNexWatch(bool verbose); int detectNexWatch(uint8_t *dest, size_t *size, bool *invert); #endif diff --git a/client/src/cmdlfnoralsy.c b/client/src/cmdlfnoralsy.c index ab6884abc..de62f2236 100644 --- a/client/src/cmdlfnoralsy.c +++ b/client/src/cmdlfnoralsy.c @@ -62,12 +62,11 @@ static uint8_t noralsy_chksum(uint8_t *bits, uint8_t len) { } //see ASKDemod for what args are accepted -static int CmdNoralsyDemod(const char *Cmd) { - (void)Cmd; // Cmd is not used so far - +int demodNoralsy(bool verbose) { + (void) verbose; // unused so far //ASK / Manchester bool st = true; - if (ASKDemod_ext("32 0 0", false, false, 1, &st) != PM3_SUCCESS) { + if (ASKDemod_ext(32, 0, 0, 0, false, false, false, 1, &st) != PM3_SUCCESS) { if (g_debugMode) PrintAndLogEx(DEBUG, "DEBUG: Error - Noralsy: ASK/Manchester Demod failed"); return PM3_ESOFT; } @@ -132,9 +131,15 @@ static int CmdNoralsyDemod(const char *Cmd) { return PM3_SUCCESS; } +static int CmdNoralsyDemod(const char *Cmd) { + (void)Cmd; // Cmd is not used so far + return demodNoralsy(true); +} + static int CmdNoralsyRead(const char *Cmd) { + (void)Cmd; // Cmd is not used so far lf_read(false, 8000); - return CmdNoralsyDemod(Cmd); + return demodNoralsy(true); } static int CmdNoralsyClone(const char *Cmd) { @@ -291,7 +296,3 @@ int detectNoralsy(uint8_t *dest, size_t *size) { * * = unknown * **/ - -int demodNoralsy(void) { - return CmdNoralsyDemod(""); -} diff --git a/client/src/cmdlfnoralsy.h b/client/src/cmdlfnoralsy.h index f76accab7..6dec5005b 100644 --- a/client/src/cmdlfnoralsy.h +++ b/client/src/cmdlfnoralsy.h @@ -13,7 +13,7 @@ int CmdLFNoralsy(const char *Cmd); -int demodNoralsy(void); +int demodNoralsy(bool verbose); int detectNoralsy(uint8_t *dest, size_t *size); int getnoralsyBits(uint32_t id, uint16_t year, uint8_t *bits); diff --git a/client/src/cmdlfpac.c b/client/src/cmdlfpac.c index a35079794..211ddbca0 100644 --- a/client/src/cmdlfpac.c +++ b/client/src/cmdlfpac.c @@ -144,14 +144,10 @@ static void pacCardIdToRaw(uint8_t *outRawBytes, const char *cardId) { } //see NRZDemod for what args are accepted -static int CmdPacDemod(const char *Cmd) { - (void)Cmd; - return demodPac(); -} - -int demodPac(void) { +int demodPac(bool verbose) { + (void) verbose; // unused so far //NRZ - if (NRZrawDemod("", false) != PM3_SUCCESS) { + if (NRZrawDemod(0, 0, 100, false) != PM3_SUCCESS) { PrintAndLogEx(DEBUG, "DEBUG: Error - PAC: NRZ Demod failed"); return PM3_ESOFT; } @@ -188,9 +184,15 @@ int demodPac(void) { return retval; } +static int CmdPacDemod(const char *Cmd) { + (void)Cmd; + return demodPac(true); +} + static int CmdPacRead(const char *Cmd) { + (void)Cmd; lf_read(false, 4096 * 2 + 20); - return CmdPacDemod(Cmd); + return demodPac(true); } static int CmdPacClone(const char *Cmd) { diff --git a/client/src/cmdlfpac.h b/client/src/cmdlfpac.h index 3c9c4fbda..a2145051b 100644 --- a/client/src/cmdlfpac.h +++ b/client/src/cmdlfpac.h @@ -13,7 +13,7 @@ int CmdLFPac(const char *Cmd); -int demodPac(void); +int demodPac(bool verbose); int detectPac(uint8_t *dest, size_t *size); #endif diff --git a/client/src/cmdlfparadox.c b/client/src/cmdlfparadox.c index 1cf7c5c47..8fc3751c8 100644 --- a/client/src/cmdlfparadox.c +++ b/client/src/cmdlfparadox.c @@ -71,16 +71,12 @@ const uint8_t paradox_lut[] = { #define PARADOX_PREAMBLE_LEN 8 -static int CmdParadoxDemod(const char *Cmd) { - (void)Cmd; // Cmd is not used so far - return demodParadox(); -} - //by marshmellow //Paradox Prox demod - FSK2a RF/50 with preamble of 00001111 (then manchester encoded) //print full Paradox Prox ID and some bit format details if found -int demodParadox(void) { +int demodParadox(bool verbose) { + (void) verbose; // unused so far //raw fsk demod no manchester decoding no start bit finding just get binary from wave uint8_t bits[MAX_GRAPH_TRACE_LEN] = {0}; size_t size = getFromGraphBuf(bits); @@ -201,11 +197,18 @@ int demodParadox(void) { return PM3_SUCCESS; } + +static int CmdParadoxDemod(const char *Cmd) { + (void)Cmd; // Cmd is not used so far + return demodParadox(true); +} + //by marshmellow //see ASKDemod for what args are accepted static int CmdParadoxRead(const char *Cmd) { + (void)Cmd; // Cmd is not used so far lf_read(false, 10000); - return CmdParadoxDemod(Cmd); + return demodParadox(true); } static int CmdParadoxClone(const char *Cmd) { diff --git a/client/src/cmdlfparadox.h b/client/src/cmdlfparadox.h index 159d66da9..6e6d3a242 100644 --- a/client/src/cmdlfparadox.h +++ b/client/src/cmdlfparadox.h @@ -13,6 +13,6 @@ int CmdLFParadox(const char *Cmd); -int demodParadox(void); +int demodParadox(bool verbose); int detectParadox(uint8_t *dest, size_t *size, int *wave_start_idx); #endif diff --git a/client/src/cmdlfpresco.c b/client/src/cmdlfpresco.c index 051be2126..b960062ad 100644 --- a/client/src/cmdlfpresco.c +++ b/client/src/cmdlfpresco.c @@ -57,10 +57,10 @@ static int usage_lf_presco_sim(void) { } //see ASKDemod for what args are accepted -static int CmdPrescoDemod(const char *Cmd) { - (void)Cmd; // Cmd is not used so far +int demodPresco(bool verbose) { + (void) verbose; // unused so far bool st = true; - if (ASKDemod_ext("32 0 0 0 0 a", false, false, 1, &st) != PM3_SUCCESS) { + if (ASKDemod_ext(32, 0, 0, 0, true, false, false, 1, &st) != PM3_SUCCESS) { PrintAndLogEx(DEBUG, "DEBUG: Error Presco ASKDemod failed"); return PM3_ESOFT; } @@ -97,11 +97,17 @@ static int CmdPrescoDemod(const char *Cmd) { return PM3_SUCCESS; } +static int CmdPrescoDemod(const char *Cmd) { + (void)Cmd; // Cmd is not used so far + return demodPresco(true); +} + //see ASKDemod for what args are accepted static int CmdPrescoRead(const char *Cmd) { // Presco Number: 123456789 --> Sitecode 30 | usercode 8665 + (void)Cmd; // Cmd is not used so far lf_read(false, 12000); - return CmdPrescoDemod(Cmd); + return demodPresco(true); } // takes base 12 ID converts to hex @@ -178,6 +184,7 @@ static int CmdPrescoSim(const char *Cmd) { static command_t CommandTable[] = { {"help", CmdHelp, AlwaysAvailable, "This help"}, + {"demod", CmdPrescoDemod, AlwaysAvailable, "demodulate Presco tag from the GraphBuffer"}, {"read", CmdPrescoRead, IfPm3Lf, "Attempt to read and Extract tag data"}, {"clone", CmdPrescoClone, IfPm3Lf, "clone presco tag to T55x7 or Q5/T5555"}, {"sim", CmdPrescoSim, IfPm3Lf, "simulate presco tag"}, @@ -277,8 +284,3 @@ int getPrescoBits(uint32_t fullcode, uint8_t *prescoBits) { num_to_bytebits(fullcode, 32, prescoBits + 96); return PM3_SUCCESS; } - -int demodPresco(void) { - return CmdPrescoDemod(""); -} - diff --git a/client/src/cmdlfpresco.h b/client/src/cmdlfpresco.h index 098a98342..d90d6c573 100644 --- a/client/src/cmdlfpresco.h +++ b/client/src/cmdlfpresco.h @@ -13,7 +13,7 @@ int CmdLFPresco(const char *Cmd); -int demodPresco(void); +int demodPresco(bool verbose); int detectPresco(uint8_t *dest, size_t *size); int getPrescoBits(uint32_t fullcode, uint8_t *prescoBits); int getWiegandFromPresco(const char *Cmd, uint32_t *sitecode, uint32_t *usercode, uint32_t *fullcode, bool *Q5); diff --git a/client/src/cmdlfpyramid.c b/client/src/cmdlfpyramid.c index b4ad5564f..3d70d34db 100644 --- a/client/src/cmdlfpyramid.c +++ b/client/src/cmdlfpyramid.c @@ -64,14 +64,10 @@ static int usage_lf_pyramid_sim(void) { return PM3_SUCCESS; } -static int CmdPyramidDemod(const char *Cmd) { - (void)Cmd; // Cmd is not used so far - return demodPyramid(); -} - //Pyramid Prox demod - FSK RF/50 with preamble of 0000000000000001 (always a 128 bit data stream) //print full Farpointe Data/Pyramid Prox ID and some bit format details if found -int demodPyramid(void) { +int demodPyramid(bool verbose) { + (void) verbose; // unused so far //raw fsk demod no manchester decoding no start bit finding just get binary from wave uint8_t bits[MAX_GRAPH_TRACE_LEN] = {0}; size_t size = getFromGraphBuf(bits); @@ -213,9 +209,15 @@ int demodPyramid(void) { return PM3_SUCCESS; } +static int CmdPyramidDemod(const char *Cmd) { + (void)Cmd; // Cmd is not used so far + return demodPyramid(true); +} + static int CmdPyramidRead(const char *Cmd) { + (void)Cmd; // Cmd is not used so far lf_read(false, 15000); - return CmdPyramidDemod(Cmd); + return demodPyramid(true); } static int CmdPyramidClone(const char *Cmd) { diff --git a/client/src/cmdlfpyramid.h b/client/src/cmdlfpyramid.h index 2d717fbb3..b11c7da44 100644 --- a/client/src/cmdlfpyramid.h +++ b/client/src/cmdlfpyramid.h @@ -13,7 +13,7 @@ int CmdLFPyramid(const char *Cmd); -int demodPyramid(void); +int demodPyramid(bool verbose); int detectPyramid(uint8_t *dest, size_t *size, int *waveStartIdx); int getPyramidBits(uint32_t fc, uint32_t cn, uint8_t *pyramidBits); #endif diff --git a/client/src/cmdlfsecurakey.c b/client/src/cmdlfsecurakey.c index ea188ec3b..b5aab5fa8 100644 --- a/client/src/cmdlfsecurakey.c +++ b/client/src/cmdlfsecurakey.c @@ -38,17 +38,13 @@ static int usage_lf_securakey_clone(void) { return PM3_SUCCESS; } -static int CmdSecurakeyDemod(const char *Cmd) { - (void)Cmd; // Cmd is not used so far - return demodSecurakey(); -} - //see ASKDemod for what args are accepted -int demodSecurakey(void) { +int demodSecurakey(bool verbose) { + (void) verbose; // unused so far //ASK / Manchester bool st = false; - if (ASKDemod_ext("40 0 0", false, false, 1, &st) != PM3_SUCCESS) { + if (ASKDemod_ext(40, 0, 0, 0, false, false, false, 1, &st) != PM3_SUCCESS) { PrintAndLogEx(DEBUG, "DEBUG: Error - Securakey: ASK/Manchester Demod failed"); return PM3_ESOFT; } @@ -128,9 +124,15 @@ int demodSecurakey(void) { return PM3_SUCCESS; } +static int CmdSecurakeyDemod(const char *Cmd) { + (void)Cmd; // Cmd is not used so far + return demodSecurakey(true); +} + static int CmdSecurakeyRead(const char *Cmd) { + (void)Cmd; // Cmd is not used so far lf_read(false, 8000); - return CmdSecurakeyDemod(Cmd); + return demodSecurakey(true); } static int CmdSecurakeyClone(const char *Cmd) { diff --git a/client/src/cmdlfsecurakey.h b/client/src/cmdlfsecurakey.h index 229fd0047..48db37714 100644 --- a/client/src/cmdlfsecurakey.h +++ b/client/src/cmdlfsecurakey.h @@ -13,7 +13,7 @@ int CmdLFSecurakey(const char *Cmd); -int demodSecurakey(void); +int demodSecurakey(bool verbose); int detectSecurakey(uint8_t *dest, size_t *size); #endif diff --git a/client/src/cmdlft55xx.c b/client/src/cmdlft55xx.c index f6bc98983..15f5c1398 100644 --- a/client/src/cmdlft55xx.c +++ b/client/src/cmdlft55xx.c @@ -944,8 +944,6 @@ static int CmdT55xxReadBlock(const char *Cmd) { bool DecodeT55xxBlock(void) { - char buf[30] = {0x00}; - char *cmdStr = buf; int ans = 0; bool ST = config.ST; uint8_t bitRate[8] = {8, 16, 32, 40, 50, 64, 100, 128}; @@ -953,41 +951,33 @@ bool DecodeT55xxBlock(void) { switch (config.modulation) { case DEMOD_FSK: - snprintf(cmdStr, sizeof(buf), "%d %d", bitRate[config.bitrate], config.inverted); - ans = FSKrawDemod(cmdStr, false); + ans = FSKrawDemod(bitRate[config.bitrate], config.inverted, 0, 0, false); break; case DEMOD_FSK1: case DEMOD_FSK1a: - snprintf(cmdStr, sizeof(buf), "%d %d 8 5", bitRate[config.bitrate], config.inverted); - ans = FSKrawDemod(cmdStr, false); + ans = FSKrawDemod(bitRate[config.bitrate], config.inverted, 8, 5, false); break; case DEMOD_FSK2: case DEMOD_FSK2a: - snprintf(cmdStr, sizeof(buf), "%d %d 10 8", bitRate[config.bitrate], config.inverted); - ans = FSKrawDemod(cmdStr, false); + ans = FSKrawDemod(bitRate[config.bitrate], config.inverted, 10, 8, false); break; case DEMOD_ASK: - snprintf(cmdStr, sizeof(buf), "%d %d 1", bitRate[config.bitrate], config.inverted); - ans = ASKDemod_ext(cmdStr, false, false, 1, &ST); + ans = ASKDemod_ext(bitRate[config.bitrate], config.inverted, 1, 0, false, false, false, 1, &ST); break; case DEMOD_PSK1: - snprintf(cmdStr, sizeof(buf), "%d %d 6", bitRate[config.bitrate], config.inverted); - ans = PSKDemod(cmdStr, false); + ans = PSKDemod(bitRate[config.bitrate], config.inverted, 6, false); break; case DEMOD_PSK2: //inverted won't affect this case DEMOD_PSK3: //not fully implemented - snprintf(cmdStr, sizeof(buf), "%d 0 6", bitRate[config.bitrate]); - ans = PSKDemod(cmdStr, false); + ans = PSKDemod(bitRate[config.bitrate], 0, 6, false); psk1TOpsk2(DemodBuffer, DemodBufferLen); break; case DEMOD_NRZ: - snprintf(cmdStr, sizeof(buf), "%d %d 1", bitRate[config.bitrate], config.inverted); - ans = NRZrawDemod(cmdStr, false); + ans = NRZrawDemod(bitRate[config.bitrate], config.inverted, 1, false); break; case DEMOD_BI: case DEMOD_BIa: - snprintf(cmdStr, sizeof(buf), "0 %d %d 1", bitRate[config.bitrate], config.inverted); - ans = ASKbiphaseDemod(cmdStr, false); + ans = ASKbiphaseDemod(0, bitRate[config.bitrate], config.inverted, 1, false); break; default: return false; @@ -999,7 +989,8 @@ static bool DecodeT5555TraceBlock(void) { DemodBufferLen = 0x00; // According to datasheet. Always: RF/64, not inverted, Manchester - return (ASKDemod("64 0 1", false, false, 1) == PM3_SUCCESS); + bool st = false; + return (ASKDemod_ext(64, 0, 1, 0, false, false, false, 1, &st) == PM3_SUCCESS); } // sanity check. Don't use proxmark if it is offline and you didn't specify useGraphbuf @@ -1139,7 +1130,7 @@ bool tryDetectModulationEx(uint8_t downlink_mode, bool print_config, uint32_t wa ans = fskClocks(&fc1, &fc2, (uint8_t *)&clk, &firstClockEdge); if (ans && ((fc1 == 10 && fc2 == 8) || (fc1 == 8 && fc2 == 5))) { - if ((FSKrawDemod("0 0", false) == PM3_SUCCESS) && test(DEMOD_FSK, &tests[hits].offset, &bitRate, clk, &tests[hits].Q5)) { + if ((FSKrawDemod(0, 0, 0, 0, false) == PM3_SUCCESS) && test(DEMOD_FSK, &tests[hits].offset, &bitRate, clk, &tests[hits].Q5)) { tests[hits].modulation = DEMOD_FSK; if (fc1 == 8 && fc2 == 5) tests[hits].modulation = DEMOD_FSK1a; @@ -1152,7 +1143,7 @@ bool tryDetectModulationEx(uint8_t downlink_mode, bool print_config, uint32_t wa tests[hits].downlink_mode = downlink_mode; ++hits; } - if ((FSKrawDemod("0 1", false) == PM3_SUCCESS) && test(DEMOD_FSK, &tests[hits].offset, &bitRate, clk, &tests[hits].Q5)) { + if ((FSKrawDemod(0, 1, 0, 0, false) == PM3_SUCCESS) && test(DEMOD_FSK, &tests[hits].offset, &bitRate, clk, &tests[hits].Q5)) { tests[hits].modulation = DEMOD_FSK; if (fc1 == 8 && fc2 == 5) tests[hits].modulation = DEMOD_FSK1; @@ -1174,7 +1165,7 @@ bool tryDetectModulationEx(uint8_t downlink_mode, bool print_config, uint32_t wa // false = no emSearch // 1 = Ask/Man // st = true - if ((ASKDemod_ext("0 0 1", false, false, 1, &tests[hits].ST) == PM3_SUCCESS) && test(DEMOD_ASK, &tests[hits].offset, &bitRate, clk, &tests[hits].Q5)) { + if ((ASKDemod_ext(0, 0, 1, 0, false, false, false, 1, &tests[hits].ST) == PM3_SUCCESS) && test(DEMOD_ASK, &tests[hits].offset, &bitRate, clk, &tests[hits].Q5)) { tests[hits].modulation = DEMOD_ASK; tests[hits].bitrate = bitRate; tests[hits].inverted = false; @@ -1188,7 +1179,7 @@ bool tryDetectModulationEx(uint8_t downlink_mode, bool print_config, uint32_t wa // false = no emSearch // 1 = Ask/Man // st = true - if ((ASKDemod_ext("0 1 1", false, false, 1, &tests[hits].ST) == PM3_SUCCESS) && test(DEMOD_ASK, &tests[hits].offset, &bitRate, clk, &tests[hits].Q5)) { + if ((ASKDemod_ext(0, 1, 1, 0, false, false, false, 1, &tests[hits].ST) == PM3_SUCCESS) && test(DEMOD_ASK, &tests[hits].offset, &bitRate, clk, &tests[hits].Q5)) { tests[hits].modulation = DEMOD_ASK; tests[hits].bitrate = bitRate; tests[hits].inverted = true; @@ -1196,7 +1187,7 @@ bool tryDetectModulationEx(uint8_t downlink_mode, bool print_config, uint32_t wa tests[hits].downlink_mode = downlink_mode; ++hits; } - if ((ASKbiphaseDemod("0 0 0 2", false) == PM3_SUCCESS) && test(DEMOD_BI, &tests[hits].offset, &bitRate, clk, &tests[hits].Q5)) { + if ((ASKbiphaseDemod(0, 0, 0, 2, false) == PM3_SUCCESS) && test(DEMOD_BI, &tests[hits].offset, &bitRate, clk, &tests[hits].Q5)) { tests[hits].modulation = DEMOD_BI; tests[hits].bitrate = bitRate; tests[hits].inverted = false; @@ -1205,7 +1196,7 @@ bool tryDetectModulationEx(uint8_t downlink_mode, bool print_config, uint32_t wa tests[hits].downlink_mode = downlink_mode; ++hits; } - if ((ASKbiphaseDemod("0 0 1 2", false) == PM3_SUCCESS) && test(DEMOD_BIa, &tests[hits].offset, &bitRate, clk, &tests[hits].Q5)) { + if ((ASKbiphaseDemod(0, 0, 1, 2, false) == PM3_SUCCESS) && test(DEMOD_BIa, &tests[hits].offset, &bitRate, clk, &tests[hits].Q5)) { tests[hits].modulation = DEMOD_BIa; tests[hits].bitrate = bitRate; tests[hits].inverted = true; @@ -1217,7 +1208,7 @@ bool tryDetectModulationEx(uint8_t downlink_mode, bool print_config, uint32_t wa } clk = GetNrzClock("", false); if (clk > 8) { //clock of rf/8 is likely a false positive, so don't use it. - if ((NRZrawDemod("0 0 1", false) == PM3_SUCCESS) && test(DEMOD_NRZ, &tests[hits].offset, &bitRate, clk, &tests[hits].Q5)) { + if ((NRZrawDemod(0, 0, 1, false) == PM3_SUCCESS) && test(DEMOD_NRZ, &tests[hits].offset, &bitRate, clk, &tests[hits].Q5)) { tests[hits].modulation = DEMOD_NRZ; tests[hits].bitrate = bitRate; tests[hits].inverted = false; @@ -1227,7 +1218,7 @@ bool tryDetectModulationEx(uint8_t downlink_mode, bool print_config, uint32_t wa ++hits; } - if ((NRZrawDemod("0 1 1", false) == PM3_SUCCESS) && test(DEMOD_NRZ, &tests[hits].offset, &bitRate, clk, &tests[hits].Q5)) { + if ((NRZrawDemod(0, 1, 1, false) == PM3_SUCCESS) && test(DEMOD_NRZ, &tests[hits].offset, &bitRate, clk, &tests[hits].Q5)) { tests[hits].modulation = DEMOD_NRZ; tests[hits].bitrate = bitRate; tests[hits].inverted = true; @@ -1244,7 +1235,7 @@ bool tryDetectModulationEx(uint8_t downlink_mode, bool print_config, uint32_t wa save_restoreGB(GRAPH_SAVE); // skip first 160 samples to allow antenna to settle in (psk gets inverted occasionally otherwise) CmdLtrim("160"); - if ((PSKDemod("0 0 6", false) == PM3_SUCCESS) && test(DEMOD_PSK1, &tests[hits].offset, &bitRate, clk, &tests[hits].Q5)) { + if ((PSKDemod(0, 0, 6, false) == PM3_SUCCESS) && test(DEMOD_PSK1, &tests[hits].offset, &bitRate, clk, &tests[hits].Q5)) { tests[hits].modulation = DEMOD_PSK1; tests[hits].bitrate = bitRate; tests[hits].inverted = false; @@ -1253,7 +1244,7 @@ bool tryDetectModulationEx(uint8_t downlink_mode, bool print_config, uint32_t wa tests[hits].downlink_mode = downlink_mode; ++hits; } - if ((PSKDemod("0 1 6", false) == PM3_SUCCESS) && test(DEMOD_PSK1, &tests[hits].offset, &bitRate, clk, &tests[hits].Q5)) { + if ((PSKDemod(0, 1, 6, false) == PM3_SUCCESS) && test(DEMOD_PSK1, &tests[hits].offset, &bitRate, clk, &tests[hits].Q5)) { tests[hits].modulation = DEMOD_PSK1; tests[hits].bitrate = bitRate; tests[hits].inverted = true; @@ -1264,7 +1255,7 @@ bool tryDetectModulationEx(uint8_t downlink_mode, bool print_config, uint32_t wa } //ICEMAN: are these PSKDemod calls needed? // PSK2 - needs a call to psk1TOpsk2. - if (PSKDemod("0 0 6", false) == PM3_SUCCESS) { + if (PSKDemod(0, 0, 6, false) == PM3_SUCCESS) { psk1TOpsk2(DemodBuffer, DemodBufferLen); if (test(DEMOD_PSK2, &tests[hits].offset, &bitRate, clk, &tests[hits].Q5)) { tests[hits].modulation = DEMOD_PSK2; @@ -1277,7 +1268,7 @@ bool tryDetectModulationEx(uint8_t downlink_mode, bool print_config, uint32_t wa } } // inverse waves does not affect this demod // PSK3 - needs a call to psk1TOpsk2. - if (PSKDemod("0 0 6", false) == PM3_SUCCESS) { + if (PSKDemod(0, 0, 6, false) == PM3_SUCCESS) { psk1TOpsk2(DemodBuffer, DemodBufferLen); if (test(DEMOD_PSK3, &tests[hits].offset, &bitRate, clk, &tests[hits].Q5)) { tests[hits].modulation = DEMOD_PSK3; @@ -3414,12 +3405,12 @@ bool tryDetectP1(bool getData) { // try fsk clock detect. if successful it cannot be any other type of modulation... (in theory...) ans = fskClocks(&fc1, &fc2, (uint8_t *)&clk, &firstClockEdge); if (ans && ((fc1 == 10 && fc2 == 8) || (fc1 == 8 && fc2 == 5))) { - if ((FSKrawDemod("0 0", false) == PM3_SUCCESS) && + if ((FSKrawDemod(0, 0, 0, 0, false) == PM3_SUCCESS) && preambleSearchEx(DemodBuffer, preamble, sizeof(preamble), &DemodBufferLen, &startIdx, false) && (DemodBufferLen == 32 || DemodBufferLen == 64)) { return true; } - if ((FSKrawDemod("0 1", false) == PM3_SUCCESS) && + if ((FSKrawDemod(0, 1, 0, 0, false) == PM3_SUCCESS) && preambleSearchEx(DemodBuffer, preamble, sizeof(preamble), &DemodBufferLen, &startIdx, false) && (DemodBufferLen == 32 || DemodBufferLen == 64)) { return true; @@ -3430,26 +3421,26 @@ bool tryDetectP1(bool getData) { // try ask clock detect. it could be another type even if successful. clk = GetAskClock("", false); if (clk > 0) { - if ((ASKDemod_ext("0 0 1", false, false, 1, &st) == PM3_SUCCESS) && + if ((ASKDemod_ext(0, 0, 1, 0, false, false, false, 1, &st) == PM3_SUCCESS) && preambleSearchEx(DemodBuffer, preamble, sizeof(preamble), &DemodBufferLen, &startIdx, false) && (DemodBufferLen == 32 || DemodBufferLen == 64)) { return true; } st = true; - if ((ASKDemod_ext("0 1 1", false, false, 1, &st) == PM3_SUCCESS) && + if ((ASKDemod_ext(0, 1, 1, 0, false, false, false, 1, &st) == PM3_SUCCESS) && preambleSearchEx(DemodBuffer, preamble, sizeof(preamble), &DemodBufferLen, &startIdx, false) && (DemodBufferLen == 32 || DemodBufferLen == 64)) { return true; } - if ((ASKbiphaseDemod("0 0 0 2", false) == PM3_SUCCESS) && + if ((ASKbiphaseDemod(0, 0, 0, 2, false) == PM3_SUCCESS) && preambleSearchEx(DemodBuffer, preamble, sizeof(preamble), &DemodBufferLen, &startIdx, false) && (DemodBufferLen == 32 || DemodBufferLen == 64)) { return true; } - if ((ASKbiphaseDemod("0 0 1 2", false) == PM3_SUCCESS) && + if ((ASKbiphaseDemod(0, 0, 1, 2, false) == PM3_SUCCESS) && preambleSearchEx(DemodBuffer, preamble, sizeof(preamble), &DemodBufferLen, &startIdx, false) && (DemodBufferLen == 32 || DemodBufferLen == 64)) { return true; @@ -3459,12 +3450,12 @@ bool tryDetectP1(bool getData) { // try NRZ clock detect. it could be another type even if successful. clk = GetNrzClock("", false); //has the most false positives :( if (clk > 0) { - if ((NRZrawDemod("0 0 1", false) == PM3_SUCCESS) && + if ((NRZrawDemod(0, 0, 1, false) == PM3_SUCCESS) && preambleSearchEx(DemodBuffer, preamble, sizeof(preamble), &DemodBufferLen, &startIdx, false) && (DemodBufferLen == 32 || DemodBufferLen == 64)) { return true; } - if ((NRZrawDemod("0 1 1", false) == PM3_SUCCESS) && + if ((NRZrawDemod(0, 1, 1, false) == PM3_SUCCESS) && preambleSearchEx(DemodBuffer, preamble, sizeof(preamble), &DemodBufferLen, &startIdx, false) && (DemodBufferLen == 32 || DemodBufferLen == 64)) { return true; @@ -3479,20 +3470,20 @@ bool tryDetectP1(bool getData) { // save_restoreGB(GRAPH_SAVE); // skip first 160 samples to allow antenna to settle in (psk gets inverted occasionally otherwise) //CmdLtrim("160"); - if ((PSKDemod("0 0 6", false) == PM3_SUCCESS) && + if ((PSKDemod(0, 0, 6, false) == PM3_SUCCESS) && preambleSearchEx(DemodBuffer, preamble, sizeof(preamble), &DemodBufferLen, &startIdx, false) && (DemodBufferLen == 32 || DemodBufferLen == 64)) { //save_restoreGB(GRAPH_RESTORE); return true; } - if ((PSKDemod("0 1 6", false) == PM3_SUCCESS) && + if ((PSKDemod(0, 1, 6, false) == PM3_SUCCESS) && preambleSearchEx(DemodBuffer, preamble, sizeof(preamble), &DemodBufferLen, &startIdx, false) && (DemodBufferLen == 32 || DemodBufferLen == 64)) { //save_restoreGB(GRAPH_RESTORE); return true; } // PSK2 - needs a call to psk1TOpsk2. - if (PSKDemod("0 0 6", false) == PM3_SUCCESS) { + if (PSKDemod(0, 0, 6, false) == PM3_SUCCESS) { psk1TOpsk2(DemodBuffer, DemodBufferLen); if (preambleSearchEx(DemodBuffer, preamble, sizeof(preamble), &DemodBufferLen, &startIdx, false) && (DemodBufferLen == 32 || DemodBufferLen == 64)) { diff --git a/client/src/cmdlfti.c b/client/src/cmdlfti.c index a41c70d91..dc3aeddf1 100644 --- a/client/src/cmdlfti.c +++ b/client/src/cmdlfti.c @@ -23,8 +23,8 @@ static int CmdHelp(const char *Cmd); -static int CmdTIDemod(const char *Cmd) { - (void)Cmd; // Cmd is not used so far +int demodTI(bool verbose) { + (void) verbose; // unused so far /* MATLAB as follows: f_s = 2000000; % sampling frequency f_l = 123200; % low FSK tone @@ -271,6 +271,11 @@ out: return retval; } +static int CmdTIDemod(const char *Cmd) { + (void)Cmd; // Cmd is not used so far + return demodTI(true); +} + // read a TI tag and return its ID static int CmdTIRead(const char *Cmd) { (void)Cmd; // Cmd is not used so far @@ -317,8 +322,3 @@ int CmdLFTI(const char *Cmd) { clearCommandBuffer(); return CmdsParse(CommandTable, Cmd); } - -int demodTI(void) { - return CmdTIDemod(""); -} - diff --git a/client/src/cmdlfti.h b/client/src/cmdlfti.h index e185a1403..10865cb5f 100644 --- a/client/src/cmdlfti.h +++ b/client/src/cmdlfti.h @@ -15,5 +15,5 @@ int CmdLFTI(const char *Cmd); -int demodTI(void); +int demodTI(bool verbose); #endif diff --git a/client/src/cmdlfverichip_disabled.c b/client/src/cmdlfverichip_disabled.c index ee2de0846..e30b95ee8 100644 --- a/client/src/cmdlfverichip_disabled.c +++ b/client/src/cmdlfverichip_disabled.c @@ -38,14 +38,10 @@ static int usage_lf_verichip_clone(void) { } //see NRZDemod for what args are accepted -static int CmdVerichipDemod(const char *Cmd) { - (void)Cmd; - return demodVerichip(); -} - -int demodVerichip(void) { +int demodVerichip(bool verbose) { + (void) verbose; // unused so far //NRZ - if (NRZrawDemod("", false) != PM3_SUCCESS) { + if (NRZrawDemod(0, 0, 100, false) != PM3_SUCCESS) { PrintAndLogEx(DEBUG, "DEBUG: Error - VERICHIP: NRZ Demod failed"); return PM3_ESOFT; } @@ -81,9 +77,15 @@ int demodVerichip(void) { return PM3_SUCCESS; } +static int CmdVerichipDemod(const char *Cmd) { + (void)Cmd; + return demodVerichip(true); +} + static int CmdVerichipRead(const char *Cmd) { + (void)Cmd; lf_read(false, 4096 * 2 + 20); - return CmdVerichipDemod(Cmd); + return demodVerichip(true); } static int CmdVerichipClone(const char *Cmd) { diff --git a/client/src/cmdlfverichip_disabled.h b/client/src/cmdlfverichip_disabled.h index 4ddf6a5d1..875ae355c 100644 --- a/client/src/cmdlfverichip_disabled.h +++ b/client/src/cmdlfverichip_disabled.h @@ -13,7 +13,7 @@ int CmdLFVerichip(const char *Cmd); -int demodVerichip(void); +int demodVerichip(bool verbose); int detectVerichip(uint8_t *dest, size_t *size); #endif diff --git a/client/src/cmdlfviking.c b/client/src/cmdlfviking.c index 205ea94b3..4a5f534ab 100644 --- a/client/src/cmdlfviking.c +++ b/client/src/cmdlfviking.c @@ -53,14 +53,12 @@ static int usage_lf_viking_sim(void) { return PM3_SUCCESS; } -static int CmdVikingDemod(const char *Cmd) { - return demodViking(); -} - //see ASKDemod for what args are accepted -int demodViking(void) { +int demodViking(bool verbose) { + (void) verbose; // unused so far - if (ASKDemod("", false, false, 1) != PM3_SUCCESS) { + bool st = false; + if (ASKDemod_ext(0, 0, 100, 0, false, false, false, 1, &st) != PM3_SUCCESS) { PrintAndLogEx(DEBUG, "DEBUG: Error - Viking ASKDemod failed"); return PM3_ESOFT; } @@ -84,10 +82,16 @@ int demodViking(void) { return PM3_SUCCESS; } +static int CmdVikingDemod(const char *Cmd) { + (void)Cmd; + return demodViking(true); +} + //see ASKDemod for what args are accepted static int CmdVikingRead(const char *Cmd) { + (void)Cmd; lf_read(false, 10000); - return CmdVikingDemod(Cmd); + return demodViking(true); } static int CmdVikingClone(const char *Cmd) { diff --git a/client/src/cmdlfviking.h b/client/src/cmdlfviking.h index 156d57c7d..48d087256 100644 --- a/client/src/cmdlfviking.h +++ b/client/src/cmdlfviking.h @@ -13,7 +13,7 @@ int CmdLFViking(const char *Cmd); -int demodViking(void); +int demodViking(bool verbose); int detectViking(uint8_t *src, size_t *size); uint64_t getVikingBits(uint32_t id); diff --git a/client/src/cmdlfvisa2000.c b/client/src/cmdlfvisa2000.c index bd25d9d89..97f5dc48e 100644 --- a/client/src/cmdlfvisa2000.c +++ b/client/src/cmdlfvisa2000.c @@ -87,10 +87,6 @@ static uint8_t visa_parity(uint32_t id) { return par; } -static int CmdVisa2kDemod(const char *Cmd) { - (void)Cmd; // Cmd is not used so far - return demodVisa2k(); -} /** * * 56495332 00096ebd 00000077 —> tag id 618173 @@ -103,14 +99,15 @@ static int CmdVisa2kDemod(const char *Cmd) { * **/ //see ASKDemod for what args are accepted -int demodVisa2k(void) { +int demodVisa2k(bool verbose) { + (void) verbose; // unused so far save_restoreGB(GRAPH_SAVE); //CmdAskEdgeDetect(""); //ASK / Manchester bool st = true; - if (ASKDemod_ext("64 0 0", false, false, 1, &st) != PM3_SUCCESS) { + if (ASKDemod_ext(64, 0, 0, 0, false, false, false, 1, &st) != PM3_SUCCESS) { PrintAndLogEx(DEBUG, "DEBUG: Error - Visa2k: ASK/Manchester Demod failed"); save_restoreGB(GRAPH_RESTORE); return PM3_ESOFT; @@ -160,10 +157,16 @@ int demodVisa2k(void) { return PM3_SUCCESS; } +static int CmdVisa2kDemod(const char *Cmd) { + (void)Cmd; // Cmd is not used so far + return demodVisa2k(true); +} + // 64*96*2=12288 samples just in case we just missed the first preamble we can still catch 2 of them static int CmdVisa2kRead(const char *Cmd) { + (void)Cmd; // Cmd is not used so far lf_read(false, 20000); - return CmdVisa2kDemod(Cmd); + return demodVisa2k(true); } static int CmdVisa2kClone(const char *Cmd) { diff --git a/client/src/cmdlfvisa2000.h b/client/src/cmdlfvisa2000.h index 63e7fdc67..85e721357 100644 --- a/client/src/cmdlfvisa2000.h +++ b/client/src/cmdlfvisa2000.h @@ -14,7 +14,7 @@ int CmdLFVisa2k(const char *Cmd); int getvisa2kBits(uint64_t fullcode, uint8_t *bits); -int demodVisa2k(void); +int demodVisa2k(bool verbose); int detectVisa2k(uint8_t *dest, size_t *size); #endif From 8ee30b785ecc4ae65b8cc0428b38db04643ca28e Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Mon, 28 Sep 2020 14:06:44 +0200 Subject: [PATCH 0682/1047] apply our patch on latest lz4 --- common/lz4/lz4.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/common/lz4/lz4.c b/common/lz4/lz4.c index f76366e7d..78def982d 100644 --- a/common/lz4/lz4.c +++ b/common/lz4/lz4.c @@ -1703,13 +1703,16 @@ read_variable_length(const BYTE**ip, const BYTE* lencheck, int loop_check, int i return length; } +int LZ4_decompress_generic(const char* const src, char* const dst, int srcSize, int outputSize, endCondition_directive endOnInput, earlyEnd_directive partialDecoding, + dict_directive dict, const BYTE* const lowPrefix, const BYTE* const dictStart, const size_t dictSize ); + /*! LZ4_decompress_generic() : * This generic decompression function covers all use cases. * It shall be instantiated several times, using different sets of directives. * Note that it is important for performance that this function really get inlined, * in order to remove useless branches during compilation optimization. */ -LZ4_FORCE_INLINE int +int LZ4_decompress_generic( const char* const src, char* const dst, From c8aee45aca8eaa829b09afb45e18d1f255eca501 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Mon, 28 Sep 2020 15:44:44 +0200 Subject: [PATCH 0683/1047] adapt hitag2 write --- armsrc/hitag2.c | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/armsrc/hitag2.c b/armsrc/hitag2.c index a35fade72..1405e27ba 100644 --- a/armsrc/hitag2.c +++ b/armsrc/hitag2.c @@ -1747,7 +1747,8 @@ void WriterHitag(hitag_function htf, hitag_data *htd, int page) { // init as reader lf_init(true, false); - + FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); + // Tag specific configuration settings (sof, timings, etc.) // TODO HTS /* if (htf <= HTS_LAST_CMD) { @@ -1780,9 +1781,10 @@ void WriterHitag(hitag_function htf, hitag_data *htd, int page) { size_t max_nrzs = (8 * HITAG_FRAME_LEN + 5) * 2; // up to 2 nrzs per bit uint8_t nrz_samples[max_nrzs]; size_t nrzs = 0; - int16_t checked = 0; uint32_t signal_size = 10000; + bool turn_on = true; + while (bStop == false && BUTTON_PRESS() == false) { // use malloc @@ -1818,9 +1820,20 @@ void WriterHitag(hitag_function htf, hitag_data *htd, int page) { } } - // Wait for t_wait_2 carrier periods after the last tag bit before transmitting, - lf_wait_periods(t_wait_2); - command_start += t_wait_2; + if (bStop) break; + if (turn_on) { + // Wait 50ms with field off to be sure the transponder gets reset + SpinDelay(50); + FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_ADC | FPGA_LF_ADC_READER_FIELD); + turn_on = false; + // Wait with field on to be in "Wait for START_AUTH" timeframe + lf_wait_periods(HITAG_T_WAIT_POWERUP + HITAG_T_WAIT_START_AUTH_MAX / 4); + command_start += HITAG_T_WAIT_POWERUP + HITAG_T_WAIT_START_AUTH_MAX / 4; + } else { + // Wait for t_wait_2 carrier periods after the last tag bit before transmitting, + lf_wait_periods(t_wait_2); + command_start += t_wait_2; + } // Transmit the reader frame command_duration = hitag_reader_send_frame(tx, txlen); From a82c3bdc1f5d68b8a111ec2e2298b6a5c2ec6cf4 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Mon, 28 Sep 2020 17:13:59 +0200 Subject: [PATCH 0684/1047] add lf tests and traces --- tools/pm3_tests.sh | 88 + traces/lf_t5577.txt | 117 + traces/lf_t5577_awid_26.pm3 | 10000 ++++++++++++ traces/lf_t5577_awid_50.pm3 | 10000 ++++++++++++ traces/lf_t5577_em410x.pm3 | 10000 ++++++++++++ traces/lf_t5577_fdx_animal.pm3 | 10000 ++++++++++++ traces/lf_t5577_fdx_extended.pm3 | 10000 ++++++++++++ traces/lf_t5577_gallagher.pm3 | 10000 ++++++++++++ traces/lf_t5577_hid.pm3 | 10000 ++++++++++++ traces/lf_t5577_hid_84.pm3 | 20000 +++++++++++++++++++++++ traces/lf_t5577_indala.pm3 | 10000 ++++++++++++ traces/lf_t5577_indala_224.pm3 | 10000 ++++++++++++ traces/lf_t5577_indala_hedem.pm3 | 10000 ++++++++++++ traces/lf_t5577_io.pm3 | 10000 ++++++++++++ traces/lf_t5577_jablotron.pm3 | 16000 ++++++++++++++++++ traces/lf_t5577_keri.pm3 | 10000 ++++++++++++ traces/lf_t5577_keri_internalid.pm3 | 10000 ++++++++++++ traces/lf_t5577_keri_msid.pm3 | 10000 ++++++++++++ traces/lf_t5577_motorola.pm3 | 10000 ++++++++++++ traces/lf_t5577_nedap.pm3 | 16000 ++++++++++++++++++ traces/lf_t5577_nexwatch.pm3 | 10000 ++++++++++++ traces/lf_t5577_nexwatch_nexkey.pm3 | 10000 ++++++++++++ traces/lf_t5577_nexwatch_quadrakey.pm3 | 10000 ++++++++++++ traces/lf_t5577_noralsy.pm3 | 10000 ++++++++++++ traces/lf_t5577_pac.pm3 | 10000 ++++++++++++ traces/lf_t5577_paradox.pm3 | 10000 ++++++++++++ traces/lf_t5577_presco.pm3 | 12000 ++++++++++++++ traces/lf_t5577_pyramid.pm3 | 10000 ++++++++++++ traces/lf_t5577_securakey.pm3 | 10000 ++++++++++++ traces/lf_t5577_viking.pm3 | 10000 ++++++++++++ traces/lf_t5577_visa2000.pm3 | 10000 ++++++++++++ 31 files changed, 314205 insertions(+) create mode 100644 traces/lf_t5577.txt create mode 100644 traces/lf_t5577_awid_26.pm3 create mode 100644 traces/lf_t5577_awid_50.pm3 create mode 100644 traces/lf_t5577_em410x.pm3 create mode 100644 traces/lf_t5577_fdx_animal.pm3 create mode 100644 traces/lf_t5577_fdx_extended.pm3 create mode 100644 traces/lf_t5577_gallagher.pm3 create mode 100644 traces/lf_t5577_hid.pm3 create mode 100644 traces/lf_t5577_hid_84.pm3 create mode 100644 traces/lf_t5577_indala.pm3 create mode 100644 traces/lf_t5577_indala_224.pm3 create mode 100644 traces/lf_t5577_indala_hedem.pm3 create mode 100644 traces/lf_t5577_io.pm3 create mode 100644 traces/lf_t5577_jablotron.pm3 create mode 100644 traces/lf_t5577_keri.pm3 create mode 100644 traces/lf_t5577_keri_internalid.pm3 create mode 100644 traces/lf_t5577_keri_msid.pm3 create mode 100644 traces/lf_t5577_motorola.pm3 create mode 100644 traces/lf_t5577_nedap.pm3 create mode 100644 traces/lf_t5577_nexwatch.pm3 create mode 100644 traces/lf_t5577_nexwatch_nexkey.pm3 create mode 100644 traces/lf_t5577_nexwatch_quadrakey.pm3 create mode 100644 traces/lf_t5577_noralsy.pm3 create mode 100644 traces/lf_t5577_pac.pm3 create mode 100644 traces/lf_t5577_paradox.pm3 create mode 100644 traces/lf_t5577_presco.pm3 create mode 100644 traces/lf_t5577_pyramid.pm3 create mode 100644 traces/lf_t5577_securakey.pm3 create mode 100644 traces/lf_t5577_viking.pm3 create mode 100644 traces/lf_t5577_visa2000.pm3 diff --git a/tools/pm3_tests.sh b/tools/pm3_tests.sh index ee796b409..da66df5cb 100755 --- a/tools/pm3_tests.sh +++ b/tools/pm3_tests.sh @@ -353,6 +353,94 @@ while true; do if ! CheckExecute "lf GPROXII test" "$CLIENTBIN -c 'data load traces/lf_gprox_36_30_14489.pm3; lf search 1'" "Guardall G-Prox II ID found"; then break; fi if ! CheckExecute "lf IDTECK test" "$CLIENTBIN -c 'data load traces/lf_idteck_4944544BAC40E069.pm3; lf search 1'" "Idteck ID found"; then break; fi + if ! CheckExecute slow "lf T55 awid 26 test" "$CLIENTBIN -c 'data load traces/lf_t5577_awid_26.pm3; lf search 1'" "AWID ID found"; then break; fi + if ! CheckExecute slow "lf T55 awid 26 test2" "$CLIENTBIN -c 'data load traces/lf_t5577_awid_26.pm3; lf awid demod'" \ + "AWID - len: 26 FC: 224 Card: 1337 - Wiegand: 3c00a73"; then break; fi + if ! CheckExecute slow "lf T55 awid 50 test" "$CLIENTBIN -c 'data load traces/lf_t5577_awid_50.pm3; lf search 1'" "AWID ID found"; then break; fi + if ! CheckExecute slow "lf T55 awid 50 test2" "$CLIENTBIN -c 'data load traces/lf_t5577_awid_50.pm3; lf awid demod'" \ + "AWID - len: 50 FC: 2001 Card: 13371337 - Wiegand: 20fa201980f92, Raw: 0128b12eb1811d7117e22111"; then break; fi + if ! CheckExecute slow "lf T55 em410x test" "$CLIENTBIN -c 'data load traces/lf_t5577_em410x.pm3; lf search 1'" "EM410x ID found"; then break; fi + if ! CheckExecute slow "lf T55 em410x test2" "$CLIENTBIN -c 'data load traces/lf_t5577_em410x.pm3; lf em 410x_demod demod'" \ + "EM TAG ID : 0F0368568B"; then break; fi + if ! CheckExecute slow "lf T55 fdx_animal test" "$CLIENTBIN -c 'data load traces/lf_t5577_fdx_animal.pm3; lf search 1'" "FDX-B ID found"; then break; fi + if ! CheckExecute slow "lf T55 fdx_animal test2" "$CLIENTBIN -c 'data load traces/lf_t5577_fdx_animal.pm3; lf fdx demod'" \ + "Animal ID 0999-000000112233"; then break; fi + if ! CheckExecute slow "lf T55 fdx_extended test" "$CLIENTBIN -c 'data load traces/lf_t5577_fdx_extended.pm3; lf search 1'" "FDX-B ID found"; then break; fi + if ! CheckExecute slow "lf T55 fdx_extended test2" "$CLIENTBIN -c 'data load traces/lf_t5577_fdx_extended.pm3; lf fdx demod'" \ + "temperature 95.2 F / 35.1 C"; then break; fi + if ! CheckExecute slow "lf T55 gallagher test" "$CLIENTBIN -c 'data load traces/lf_t5577_gallagher.pm3; lf search 1'" "GALLAGHER ID found"; then break; fi + if ! CheckExecute slow "lf T55 gallagher test2" "$CLIENTBIN -c 'data load traces/lf_t5577_gallagher.pm3; lf gallagher demod'" \ + "GALLAGHER - Region: 0 FC: 27865 CN: 682758 Issue Level: 13"; then break; fi + if ! CheckExecute slow "lf T55 hid test" "$CLIENTBIN -c 'data load traces/lf_t5577_hid.pm3; lf search 1'" "HID Prox ID found"; then break; fi + if ! CheckExecute slow "lf T55 hid test2" "$CLIENTBIN -c 'data load traces/lf_t5577_hid.pm3; lf hid demod'" \ + "HID Prox - 2006ec0c86 (1603) - len: 26 bit - OEM: 000 FC: 118 Card: 1603"; then break; fi + if ! CheckExecute slow "lf T55 hid_84 test" "$CLIENTBIN -c 'data load traces/lf_t5577_hid_84.pm3; lf search 1'" "HID Prox ID found"; then break; fi + if ! CheckExecute slow "lf T55 hid_84 test2" "$CLIENTBIN -c 'data load traces/lf_t5577_hid_84.pm3; lf hid demod'" \ + "HID Prox - 9e000000000022006ec0c86 (1603)"; then break; fi + if ! CheckExecute slow "lf T55 indala_hedem test" "$CLIENTBIN -c 'data load traces/lf_t5577_indala_hedem.pm3; lf search 1'" "Indala ID found"; then break; fi + if ! CheckExecute slow "lf T55 indala_hedem test2" "$CLIENTBIN -c 'data load traces/lf_t5577_indala_hedem.pm3; lf indala demod'" \ + "Heden-2L \| 888"; then break; fi + if ! CheckExecute slow "lf T55 indala test" "$CLIENTBIN -c 'data load traces/lf_t5577_indala.pm3; lf search 1'" "Indala ID found"; then break; fi + if ! CheckExecute slow "lf T55 indala test2" "$CLIENTBIN -c 'data load traces/lf_t5577_indala.pm3; lf indala demod'" \ + "Fmt 26 FC: 123 Card: 1337 checksum: 10"; then break; fi + if ! CheckExecute slow "lf T55 indala_224 test" "$CLIENTBIN -c 'data load traces/lf_t5577_indala_224.pm3; lf search 1'" "Indala ID found"; then break; fi + if ! CheckExecute slow "lf T55 indala_224 test2" "$CLIENTBIN -c 'data load traces/lf_t5577_indala_224.pm3; lf indala demod'" \ + "Indala - len 224, Raw: 80000001b23523a6c2e31eba3cbee4afb3c6ad1fcf649393928c14e5"; then break; fi + if ! CheckExecute slow "lf T55 io test" "$CLIENTBIN -c 'data load traces/lf_t5577_io.pm3; lf search 1'" "IO Prox ID found"; then break; fi + if ! CheckExecute slow "lf T55 io test2" "$CLIENTBIN -c 'data load traces/lf_t5577_io.pm3; lf io demod'" \ + "IO Prox - XSF(01)01:01337, Raw: 007840603059cf3f (ok)"; then break; fi + if ! CheckExecute slow "lf T55 jablotron test" "$CLIENTBIN -c 'data load traces/lf_t5577_jablotron.pm3; lf search 1'" "Jablotron ID found"; then break; fi + if ! CheckExecute slow "lf T55 jablotron test2" "$CLIENTBIN -c 'data load traces/lf_t5577_jablotron.pm3; lf jablotron demod'" \ + "Printed: 1410-00-0011-2233"; then break; fi + if ! CheckExecute slow "lf T55 keri test" "$CLIENTBIN -c 'data load traces/lf_t5577_keri.pm3; lf search 1'" "KERI ID found"; then break; fi + if ! CheckExecute slow "lf T55 keri test2" "$CLIENTBIN -c 'data load traces/lf_t5577_keri.pm3; lf keri demod'" \ + "KERI - Internal ID: 112233, Raw: E00000008001B669"; then break; fi + if ! CheckExecute slow "lf T55 keri_internalid test" "$CLIENTBIN -c 'data load traces/lf_t5577_keri_internalid.pm3; lf search 1'" "KERI ID found"; then break; fi + if ! CheckExecute slow "lf T55 keri_internalid test2" "$CLIENTBIN -c 'data load traces/lf_t5577_keri_internalid.pm3; lf keri demod'" \ + "KERI - Internal ID: 12345, Raw: E000000080003039"; then break; fi + if ! CheckExecute slow "lf T55 keri_msid test" "$CLIENTBIN -c 'data load traces/lf_t5577_keri_msid.pm3; lf search 1'" "KERI ID found"; then break; fi + if ! CheckExecute slow "lf T55 keri_msid test2" "$CLIENTBIN -c 'data load traces/lf_t5577_keri_msid.pm3; lf keri demod'" \ + "Descrambled MS - FC: 6 Card: 12345"; then break; fi +# if ! CheckExecute slow "lf T55 motorola test" "$CLIENTBIN -c 'data load traces/lf_t5577_motorola.pm3; lf search 1'" "Indala ID found"; then break; fi + if ! CheckExecute slow "lf T55 motorola test2" "$CLIENTBIN -c 'data load traces/lf_t5577_motorola.pm3; lf motorola demod'" \ + "Motorola - fmt: 26 FC: 258 Card: 2, Raw: A0000000A0002021"; then break; fi + if ! CheckExecute slow "lf T55 nedap test" "$CLIENTBIN -c 'data load traces/lf_t5577_nedap.pm3; lf search 1'" "NEDAP ID found"; then break; fi + if ! CheckExecute slow "lf T55 nedap test2" "$CLIENTBIN -c 'data load traces/lf_t5577_nedap.pm3; lf nedap demod'" \ + "NEDAP - Card: 12345 subtype: 1 customer code: 123, Raw: FF 82 24 65 08 20 99 53"; then break; fi + if ! CheckExecute slow "lf T55 nexwatch test" "$CLIENTBIN -c 'data load traces/lf_t5577_nexwatch.pm3; lf search 1'" "NexWatch ID found"; then break; fi + if ! CheckExecute slow "lf T55 nexwatch test2" "$CLIENTBIN -c 'data load traces/lf_t5577_nexwatch.pm3; lf nexwatch demod'" \ + "Raw : 56000000213C9F8F150C00"; then break; fi + if ! CheckExecute slow "lf T55 nexwatch_nexkey test" "$CLIENTBIN -c 'data load traces/lf_t5577_nexwatch_nexkey.pm3; lf search 1'" "NexWatch ID found"; then break; fi + if ! CheckExecute slow "lf T55 nexwatch_nexkey test2" "$CLIENTBIN -c 'data load traces/lf_t5577_nexwatch_nexkey.pm3; lf nexwatch demod'" \ + "88bit id : 521512301 (0x1f15a56d)"; then break; fi + if ! CheckExecute slow "lf T55 nexwatch_quadrakey test" "$CLIENTBIN -c 'data load traces/lf_t5577_nexwatch_quadrakey.pm3; lf search 1'" "NexWatch ID found"; then break; fi + if ! CheckExecute slow "lf T55 nexwatch_quadrakey test2" "$CLIENTBIN -c 'data load traces/lf_t5577_nexwatch_quadrakey.pm3; lf nexwatch demod'" \ + "88bit id : 521512301 (0x1f15a56d)"; then break; fi + if ! CheckExecute slow "lf T55 noralsy test" "$CLIENTBIN -c 'data load traces/lf_t5577_noralsy.pm3; lf search 1'" "Noralsy ID found"; then break; fi + if ! CheckExecute slow "lf T55 noralsy test2" "$CLIENTBIN -c 'data load traces/lf_t5577_noralsy.pm3; lf noralsy demod'" \ + "Noralsy - Card: 112233, Year: 2000, Raw: BB0214FF0110002233070000"; then break; fi + if ! CheckExecute slow "lf T55 pac test" "$CLIENTBIN -c 'data load traces/lf_t5577_pac.pm3; lf search 1'" "PAC/Stanley ID found"; then break; fi + if ! CheckExecute slow "lf T55 pac test2" "$CLIENTBIN -c 'data load traces/lf_t5577_pac.pm3; lf pac demod'" \ + "PAC/Stanley - Card: CD4F5552, Raw: FF2049906D8511C593155B56D5B2649F"; then break; fi + if ! CheckExecute slow "lf T55 paradox test" "$CLIENTBIN -c 'data load traces/lf_t5577_paradox.pm3; lf search 1'" "Paradox ID found"; then break; fi + if ! CheckExecute slow "lf T55 paradox test2" "$CLIENTBIN -c 'data load traces/lf_t5577_paradox.pm3; lf paradox demod'" \ + "Paradox - ID: 004209dea FC: 96 Card: 40426, Checksum: b2, Raw: 0f55555695596a6a9999a59a"; then break; fi +# if ! CheckExecute slow "lf T55 presco test" "$CLIENTBIN -c 'data load traces/lf_t5577_presco.pm3; lf search 1'" "Presco ID found"; then break; fi +# if ! CheckExecute slow "lf T55 presco test2" "$CLIENTBIN -c 'data load traces/lf_t5577_presco.pm3; lf presco demod'" \ +# "Presco - Card: 1E8021D9, Raw: 10D0000000000000000000001E8021D9"; then break; fi + if ! CheckExecute slow "lf T55 pyramid test" "$CLIENTBIN -c 'data load traces/lf_t5577_pyramid.pm3; lf search 1'" "Pyramid ID found"; then break; fi + if ! CheckExecute slow "lf T55 pyramid test2" "$CLIENTBIN -c 'data load traces/lf_t5577_pyramid.pm3; lf pyramid demod'" \ + "Pyramid - len: 26, FC: 123 Card: 11223 - Wiegand: 2f657ae, Raw: 00010101010101010101016eb35e5da4"; then break; fi + if ! CheckExecute slow "lf T55 securakey test" "$CLIENTBIN -c 'data load traces/lf_t5577_securakey.pm3; lf search 1'" "Securakey ID found"; then break; fi + if ! CheckExecute slow "lf T55 securakey test2" "$CLIENTBIN -c 'data load traces/lf_t5577_securakey.pm3; lf securakey demod'" \ + "Securakey - len: 26 FC: 0x35 Card: 64169, Raw: 7FCB400001ADEA5344300000"; then break; fi + if ! CheckExecute slow "lf T55 viking test" "$CLIENTBIN -c 'data load traces/lf_t5577_viking.pm3; lf search 1'" "Viking ID found"; then break; fi + if ! CheckExecute slow "lf T55 viking test2" "$CLIENTBIN -c 'data load traces/lf_t5577_viking.pm3; lf viking demod'" \ + "Viking - Card 0001A337, Raw: F200000001A337CF"; then break; fi + if ! CheckExecute slow "lf T55 visa2000 test" "$CLIENTBIN -c 'data load traces/lf_t5577_visa2000.pm3; lf search 1'" "Visa2000 ID found"; then break; fi + if ! CheckExecute slow "lf T55 visa2000 test2" "$CLIENTBIN -c 'data load traces/lf_t5577_visa2000.pm3; lf visa2000 demod'" \ + "Visa2000 - Card 112233, Raw: 564953320001B66900000183"; then break; fi + echo -e "\n${C_BLUE}Testing HF:${C_NC}" if ! CheckExecute "hf mf offline text" "$CLIENTBIN -c 'hf mf'" "at_enc"; then break; fi if ! CheckExecute slow retry ignore "hf mf hardnested long test" "$CLIENTBIN -c 'hf mf hardnested t 1 000000000000'" "found:"; then break; fi diff --git a/traces/lf_t5577.txt b/traces/lf_t5577.txt new file mode 100644 index 000000000..3b994aa2e --- /dev/null +++ b/traces/lf_t5577.txt @@ -0,0 +1,117 @@ +These traces have been generated with a T5577: + +lf awid clone 26 224 1337 +lf read s 10000 +data save f lf_t5577_awid_26 + +lf awid clone 50 2001 13371337 +lf read s 10000 +data save f lf_t5577_awid_50 + +lf em 410x_write 0F0368568B 1 +lf read s 10000 +data save f lf_t5577_em410x + +lf fdx clone c 999 n 112233 s +lf read s 10000 +data save f lf_t5577_fdx_animal + +lf fdx clone c 999 n 112233 e 16a +lf read s 10000 +data save f lf_t5577_fdx_extended + +lf gallagher clone b 0FFD5461A9DA1346B2D1AC32 +lf read s 10000 +data save f lf_t5577_gallagher + +lf hid clone 2006ec0c86 +lf read s 10000 +data save f lf_t5577_hid + +lf hid clone l 2006ec0c86 +lf read s 20000 +data save f lf_t5577_hid_84 + +lf indala clone --heden 888 +lf read s 10000 +data save f lf_t5577_indala_hedem + +lf indala clone --fc 123 --cn 1337 +lf read s 10000 +data save f lf_t5577_indala + +lf indala clone -l -r 80000001b23523a6c2e31eba3cbee4afb3c6ad1fcf649393928c14e5 +lf read s 10000 +data save f lf_t5577_indala_224 + +lf io clone 01 101 1337 +lf read s 10000 +data save f lf_t5577_io + +lf jablotron clone 112233 +lf read s 16000 +data save f lf_t5577_jablotron + +lf keri clone 112233 +lf read s 10000 +data save f lf_t5577_keri + +lf keri clone t i fc 6 cn 12345 +lf read s 10000 +data save f lf_t5577_keri_internalid + +lf keri clone t m f 6 c 12345 +lf read s 10000 +data save f lf_t5577_keri_msid + +lf motorola clone a0000000a0002021 +lf read s 10000 +data save f lf_t5577_motorola + +lf nedap clone s 1 c 123 i 12345 +lf read s 16000 +data save f lf_t5577_nedap + +lf nexwatch clone r 5600000000213C9F8F150C +lf read s 10000 +data save f lf_t5577_nexwatch + +lf nexwatch clone c 521512301 m 1 n +lf read s 10000 +data save f lf_t5577_nexwatch_nexkey + +lf nexwatch clone c 521512301 m 1 q +lf read s 10000 +data save f lf_t5577_nexwatch_quadrakey + +lf noralsy clone 112233 +lf read s 10000 +data save f lf_t5577_noralsy + +lf pac clone c CD4F5552 +lf read s 10000 +data save f lf_t5577_pac + +lf paradox clone b 0f55555695596a6a9999a59a +lf read s 10000 +data save f lf_t5577_paradox + +lf presco clone d 123456789 +lf read s 12000 +data save f lf_t5577_presco + +lf pyramid clone 123 11223 +lf read s 10000 +data save f lf_t5577_pyramid + +lf securakey clone b 7FCB400001ADEA5344300000 +lf read s 10000 +data save f lf_t5577_securakey + +lf viking clone 1A337 +lf read s 10000 +data save f lf_t5577_viking + +lf visa2000 clone 112233 +lf read s 10000 +data save f lf_t5577_visa2000 diff --git a/traces/lf_t5577_awid_26.pm3 b/traces/lf_t5577_awid_26.pm3 new file mode 100644 index 000000000..d689e6637 --- /dev/null +++ b/traces/lf_t5577_awid_26.pm3 @@ -0,0 +1,10000 @@ +-64 +-127 +-127 +-18 +89 +123 +114 +21 +-62 +-127 +-127 +-18 +89 +123 +115 +23 +-61 +-127 +-127 +-17 +90 +123 +113 +21 +-63 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +115 +22 +-61 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +115 +22 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +90 +123 +113 +21 +-63 +-127 +-127 +-17 +90 +123 +114 +22 +-62 +-127 +-127 +-17 +91 +123 +114 +22 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +115 +22 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-16 +91 +123 +116 +23 +-61 +-127 +-127 +-17 +91 +123 +115 +23 +-61 +-127 +-127 +-17 +91 +123 +114 +22 +-62 +-127 +-127 +-17 +91 +123 +114 +22 +-62 +-127 +-127 +-17 +91 +123 +115 +23 +-61 +-127 +-127 +-127 +-24 +94 +123 +123 +123 +43 +-42 +-118 +-127 +-127 +-25 +92 +123 +123 +123 +39 +-46 +-121 +-127 +-127 +-29 +88 +123 +123 +123 +38 +-48 +-123 +-127 +-127 +-29 +87 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-30 +87 +123 +123 +123 +37 +-48 +-123 +-127 +-24 +82 +123 +106 +14 +-69 +-127 +-127 +-24 +84 +123 +109 +17 +-66 +-127 +-127 +-22 +86 +123 +112 +19 +-64 +-127 +-127 +-19 +88 +123 +112 +20 +-64 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-19 +89 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +112 +19 +-64 +-127 +-127 +-18 +90 +123 +113 +21 +-63 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +112 +20 +-63 +-127 +-127 +-18 +89 +123 +114 +21 +-63 +-127 +-127 +-18 +90 +123 +113 +21 +-63 +-127 +-127 +-18 +90 +123 +113 +21 +-63 +-127 +-127 +-17 +90 +123 +114 +22 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +113 +21 +-63 +-127 +-127 +-17 +90 +123 +115 +22 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +123 +123 +33 +-51 +-126 +-127 +-127 +-34 +83 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +85 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-31 +85 +123 +115 +22 +-61 +-127 +-127 +-14 +94 +123 +117 +24 +-59 +-127 +-127 +-15 +92 +123 +116 +23 +-61 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-62 +-127 +-127 +-17 +91 +123 +115 +23 +-61 +-127 +-127 +-17 +91 +123 +114 +22 +-62 +-127 +-127 +-17 +90 +123 +115 +22 +-62 +-127 +-127 +-16 +90 +123 +115 +22 +-61 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +116 +23 +-61 +-127 +-127 +-17 +90 +123 +113 +21 +-63 +-127 +-127 +-17 +91 +123 +115 +22 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +89 +123 +113 +21 +-63 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +89 +123 +123 +123 +32 +-52 +-127 +-127 +-127 +-34 +82 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-33 +83 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +84 +123 +116 +23 +-61 +-127 +-127 +-14 +94 +123 +117 +24 +-60 +-127 +-127 +-14 +92 +123 +116 +23 +-61 +-127 +-127 +-16 +91 +123 +114 +22 +-62 +-127 +-127 +-17 +91 +123 +114 +22 +-62 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +123 +123 +33 +-51 +-127 +-127 +-127 +-34 +82 +123 +123 +123 +33 +-51 +-127 +-127 +-127 +-33 +84 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +84 +123 +116 +23 +-61 +-127 +-127 +-14 +93 +123 +117 +24 +-60 +-127 +-127 +-15 +93 +123 +116 +23 +-60 +-127 +-127 +-16 +91 +123 +115 +23 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-62 +-127 +-127 +-17 +90 +123 +116 +23 +-61 +-127 +-127 +-17 +91 +123 +113 +21 +-63 +-127 +-127 +-18 +90 +123 +115 +22 +-62 +-127 +-127 +-17 +90 +123 +115 +23 +-61 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +22 +-62 +-127 +-127 +-16 +91 +123 +117 +24 +-60 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +44 +-42 +-118 +-127 +-127 +-24 +92 +123 +123 +123 +40 +-46 +-121 +-127 +-127 +-28 +88 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-30 +87 +123 +123 +123 +37 +-49 +-124 +-127 +-127 +-31 +86 +123 +123 +123 +38 +-47 +-123 +-127 +-24 +82 +123 +105 +13 +-70 +-127 +-127 +-25 +83 +123 +108 +16 +-67 +-127 +-127 +-21 +86 +123 +111 +19 +-64 +-127 +-127 +-19 +88 +123 +111 +19 +-64 +-127 +-127 +-19 +89 +123 +112 +20 +-63 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-63 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +22 +-62 +-127 +-127 +-17 +91 +123 +114 +22 +-62 +-127 +-127 +-17 +91 +123 +115 +23 +-61 +-127 +-127 +-18 +89 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +113 +21 +-63 +-127 +-127 +-18 +90 +123 +115 +22 +-61 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +43 +-42 +-118 +-127 +-127 +-25 +91 +123 +123 +123 +39 +-46 +-122 +-127 +-127 +-29 +88 +123 +123 +123 +38 +-48 +-123 +-127 +-127 +-30 +87 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-31 +86 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-31 +86 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-31 +86 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-31 +86 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-31 +86 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +37 +-48 +-124 +-127 +-25 +81 +123 +103 +12 +-70 +-127 +-127 +-26 +82 +123 +107 +15 +-68 +-127 +-127 +-22 +86 +123 +111 +18 +-65 +-127 +-127 +-21 +87 +123 +110 +18 +-65 +-127 +-127 +-20 +88 +123 +112 +20 +-63 +-127 +-127 +-19 +89 +123 +114 +21 +-62 +-127 +-127 +-19 +88 +123 +113 +21 +-63 +-127 +-127 +-18 +90 +123 +113 +21 +-63 +-127 +-127 +-17 +90 +123 +114 +22 +-62 +-127 +-127 +-16 +91 +123 +114 +22 +-62 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-16 +91 +123 +115 +23 +-61 +-127 +-127 +-17 +91 +123 +114 +22 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-62 +-127 +-127 +-17 +91 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +123 +123 +33 +-51 +-127 +-127 +-127 +-35 +82 +123 +123 +123 +32 +-52 +-127 +-127 +-127 +-32 +84 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-33 +83 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +84 +123 +116 +23 +-61 +-127 +-127 +-14 +93 +123 +117 +24 +-59 +-127 +-127 +-15 +92 +123 +116 +23 +-61 +-127 +-127 +-16 +91 +123 +116 +23 +-60 +-127 +-127 +-16 +91 +123 +115 +22 +-62 +-127 +-127 +-17 +90 +123 +115 +22 +-62 +-127 +-127 +-18 +91 +123 +116 +23 +-60 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +43 +-42 +-118 +-127 +-127 +-25 +92 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-28 +89 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-29 +88 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +37 +-48 +-124 +-127 +-24 +82 +123 +104 +13 +-70 +-127 +-127 +-24 +83 +123 +108 +16 +-67 +-127 +-127 +-22 +86 +123 +112 +19 +-64 +-127 +-127 +-20 +87 +123 +112 +19 +-64 +-127 +-127 +-19 +89 +123 +112 +20 +-63 +-127 +-127 +-18 +89 +123 +115 +22 +-61 +-127 +-127 +-18 +90 +123 +113 +21 +-63 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +22 +-62 +-127 +-127 +-18 +90 +123 +113 +21 +-63 +-127 +-127 +-18 +89 +123 +113 +21 +-63 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +113 +21 +-63 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +22 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-16 +91 +123 +114 +22 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +22 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +115 +22 +-62 +-127 +-127 +-16 +91 +123 +115 +23 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +22 +-62 +-127 +-127 +-17 +91 +123 +115 +23 +-61 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +22 +-62 +-127 +-127 +-17 +91 +123 +116 +23 +-60 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +115 +23 +-61 +-127 +-127 +-17 +90 +123 +113 +21 +-63 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +115 +22 +-62 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +113 +21 +-63 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +123 +123 +32 +-52 +-127 +-127 +-127 +-34 +82 +123 +123 +123 +33 +-51 +-127 +-127 +-127 +-33 +84 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-33 +85 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +115 +23 +-61 +-127 +-127 +-14 +93 +123 +118 +25 +-59 +-127 +-127 +-14 +93 +123 +116 +23 +-60 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-16 +92 +123 +115 +23 +-61 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +22 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +116 +23 +-61 +-127 +-127 +-17 +91 +123 +113 +21 +-62 +-127 +-127 +-17 +90 +123 +115 +22 +-62 +-127 +-127 +-17 +91 +123 +116 +23 +-61 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +22 +-62 +-127 +-127 +-17 +90 +123 +117 +24 +-60 +-127 +-127 +-127 +-24 +93 +123 +123 +123 +43 +-43 +-119 +-127 +-127 +-25 +90 +123 +123 +123 +40 +-46 +-121 +-127 +-127 +-28 +87 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-31 +86 +123 +123 +123 +38 +-47 +-123 +-127 +-24 +83 +123 +105 +13 +-69 +-127 +-127 +-24 +84 +123 +109 +16 +-66 +-127 +-127 +-21 +86 +123 +112 +19 +-64 +-127 +-127 +-19 +88 +123 +112 +19 +-64 +-127 +-127 +-18 +89 +123 +113 +20 +-63 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +113 +21 +-63 +-127 +-127 +-17 +91 +123 +114 +22 +-62 +-127 +-127 +-17 +90 +123 +114 +22 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-63 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +22 +-62 +-127 +-127 +-17 +91 +123 +114 +22 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +22 +-62 +-127 +-127 +-17 +90 +123 +115 +22 +-61 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +116 +23 +-61 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +44 +-42 +-118 +-127 +-127 +-25 +92 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-28 +88 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-29 +87 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-30 +86 +123 +123 +123 +37 +-48 +-123 +-127 +-24 +82 +123 +104 +12 +-70 +-127 +-127 +-24 +84 +123 +108 +16 +-67 +-127 +-127 +-21 +87 +123 +112 +19 +-64 +-127 +-127 +-20 +88 +123 +113 +20 +-63 +-127 +-127 +-19 +90 +123 +113 +21 +-63 +-127 +-127 +-18 +90 +123 +115 +22 +-61 +-127 +-127 +-18 +90 +123 +113 +21 +-63 +-127 +-127 +-17 +90 +123 +114 +21 +-63 +-127 +-127 +-18 +90 +123 +114 +22 +-62 +-127 +-127 +-18 +89 +123 +113 +20 +-63 +-127 +-127 +-18 +89 +123 +113 +21 +-63 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-17 +90 +123 +114 +22 +-62 +-127 +-127 +-17 +91 +123 +114 +22 +-62 +-127 +-127 +-17 +90 +123 +123 +123 +32 +-52 +-127 +-127 +-127 +-34 +81 +123 +123 +123 +32 +-52 +-127 +-127 +-127 +-33 +84 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +115 +22 +-61 +-127 +-127 +-14 +93 +123 +117 +24 +-60 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-16 +91 +123 +116 +23 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-62 +-127 +-127 +-17 +91 +123 +115 +23 +-61 +-127 +-127 +-17 +90 +123 +114 +21 +-63 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +115 +22 +-61 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +115 +22 +-62 +-127 +-127 +-17 +91 +123 +116 +23 +-60 +-127 +-127 +-17 +90 +123 +114 +22 +-62 +-127 +-127 +-17 +90 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +23 +-61 +-127 +-127 +-16 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-62 +-127 +-127 +-17 +91 +123 +114 +22 +-62 +-127 +-127 +-17 +91 +123 +123 +123 +33 +-51 +-126 +-127 +-127 +-33 +83 +123 +123 +123 +33 +-51 +-127 +-127 +-127 +-32 +83 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +115 +22 +-61 +-127 +-127 +-14 +94 +123 +117 +24 +-59 +-127 +-127 +-15 +92 +123 +116 +23 +-60 +-127 +-127 +-15 +92 +123 +115 +22 +-61 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +90 +123 +114 +22 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +113 +21 +-63 +-127 +-127 +-18 +90 +123 +114 +22 +-62 +-127 +-127 +-18 +89 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +113 +21 +-63 +-127 +-127 +-17 +90 +123 +116 +23 +-60 +-127 +-127 +-17 +91 +123 +114 +22 +-62 +-127 +-127 +-17 +90 +123 +114 +22 +-62 +-127 +-127 +-16 +91 +123 +116 +23 +-61 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +116 +23 +-61 +-127 +-127 +-127 +-24 +94 +123 +123 +123 +44 +-42 +-118 +-127 +-127 +-26 +90 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-28 +88 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-30 +87 +123 +123 +123 +37 +-49 +-124 +-127 +-127 +-31 +86 +123 +123 +123 +38 +-47 +-123 +-127 +-23 +83 +123 +105 +13 +-69 +-127 +-127 +-24 +84 +123 +109 +16 +-66 +-127 +-127 +-21 +86 +123 +111 +19 +-64 +-127 +-127 +-19 +88 +123 +111 +19 +-65 +-127 +-127 +-19 +88 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-17 +90 +123 +113 +21 +-63 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-16 +91 +123 +114 +22 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-16 +91 +123 +114 +22 +-62 +-127 +-127 +-17 +90 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-63 +-127 +-127 +-17 +91 +123 +114 +21 +-63 +-127 +-127 +-17 +90 +123 +115 +23 +-61 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +44 +-42 +-118 +-127 +-127 +-25 +91 +123 +123 +123 +40 +-46 +-121 +-127 +-127 +-28 +88 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-30 +86 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-31 +85 +123 +123 +123 +37 +-48 +-124 +-127 +-25 +81 +123 +104 +12 +-70 +-127 +-127 +-25 +83 +123 +108 +16 +-67 +-127 +-127 +-22 +86 +123 +112 +19 +-64 +-127 +-127 +-20 +87 +123 +111 +19 +-64 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +116 +23 +-61 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +22 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +22 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-63 +-127 +-127 +-17 +90 +123 +114 +22 +-62 +-127 +-127 +-18 +90 +123 +113 +21 +-63 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +22 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +123 +123 +32 +-52 +-127 +-127 +-127 +-34 +82 +123 +123 +123 +33 +-51 +-127 +-127 +-127 +-32 +84 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +116 +23 +-61 +-127 +-127 +-14 +93 +123 +117 +24 +-59 +-127 +-127 +-15 +92 +123 +116 +23 +-60 +-127 +-127 +-15 +92 +123 +116 +23 +-60 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-16 +91 +123 +116 +23 +-61 +-127 +-127 +-17 +91 +123 +114 +22 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +115 +22 +-61 +-127 +-127 +-18 +90 +123 +113 +21 +-63 +-127 +-127 +-18 +89 +123 +113 +21 +-63 +-127 +-127 +-18 +90 +123 +115 +22 +-61 +-127 +-127 +-17 +90 +123 +113 +21 +-63 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +22 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +115 +22 +-62 +-127 +-127 +-17 +90 +123 +114 +22 +-62 +-127 +-127 +-17 +90 +123 +123 +123 +32 +-52 +-127 +-127 +-127 +-34 +82 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-33 +83 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +115 +22 +-61 +-127 +-127 +-14 +93 +123 +117 +24 +-59 +-127 +-127 +-15 +93 +123 +116 +23 +-61 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +115 +22 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-63 +-127 +-127 +-17 +90 +123 +114 +22 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +90 +123 +115 +22 +-62 +-127 +-127 +-17 +90 +123 +114 +22 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-62 +-127 +-127 +-17 +91 +123 +116 +23 +-60 +-127 +-127 +-17 +90 +123 +114 +22 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +115 +23 +-61 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +43 +-43 +-119 +-127 +-127 +-25 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-28 +88 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-30 +86 +123 +123 +123 +37 +-49 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +38 +-47 +-123 +-127 +-25 +82 +123 +104 +12 +-70 +-127 +-127 +-25 +83 +123 +108 +16 +-67 +-127 +-127 +-22 +87 +123 +111 +19 +-64 +-127 +-127 +-20 +88 +123 +111 +19 +-64 +-127 +-127 +-18 +89 +123 +113 +21 +-63 +-127 +-127 +-18 +90 +123 +113 +21 +-63 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +22 +-62 +-127 +-127 +-17 +90 +123 +114 +22 +-62 +-127 +-127 +-17 +90 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-62 +-127 +-127 +-17 +91 +123 +114 +22 +-62 +-127 +-127 +-16 +91 +123 +115 +22 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-62 +-127 +-127 +-17 +90 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +115 +22 +-61 +-127 +-127 +-18 +90 +123 +113 +21 +-63 +-127 +-127 +-17 +90 +123 +114 +22 +-62 +-127 +-127 +-17 +90 +123 +115 +22 +-61 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +116 +23 +-60 +-127 +-127 +-17 +91 +123 +113 +21 +-63 +-127 +-127 +-17 +90 +123 +115 +22 +-62 +-127 +-127 +-18 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +113 +21 +-63 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +22 +-62 +-127 +-127 +-18 +90 +123 +113 +21 +-63 +-127 +-127 +-17 +90 +123 +114 +22 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +22 +-62 +-127 +-127 +-17 +91 +123 +113 +21 +-63 +-127 +-127 +-17 +90 +123 +114 +22 +-62 +-127 +-127 +-16 +91 +123 +114 +22 +-61 +-127 +-127 +-17 +90 +123 +114 +22 +-62 +-127 +-127 +-17 +90 +123 +115 +22 +-62 +-127 +-127 +-17 +91 +123 +116 +23 +-60 +-127 +-127 +-127 +-23 +95 +123 +123 +123 +45 +-41 +-117 +-127 +-127 +-24 +92 +123 +123 +123 +41 +-45 +-121 +-127 +-127 +-28 +89 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-30 +87 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-31 +86 +123 +123 +123 +36 +-49 +-124 +-127 +-25 +81 +123 +103 +12 +-70 +-127 +-127 +-26 +83 +123 +108 +16 +-67 +-127 +-127 +-22 +85 +123 +111 +19 +-64 +-127 +-127 +-21 +87 +123 +111 +18 +-65 +-127 +-127 +-20 +88 +123 +112 +19 +-64 +-127 +-127 +-18 +89 +123 +115 +22 +-61 +-127 +-127 +-18 +90 +123 +113 +21 +-63 +-127 +-127 +-17 +90 +123 +115 +22 +-62 +-127 +-127 +-17 +90 +123 +115 +22 +-61 +-127 +-127 +-17 +90 +123 +113 +20 +-63 +-127 +-127 +-16 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +22 +-62 +-127 +-127 +-17 +90 +123 +114 +22 +-62 +-127 +-127 +-16 +91 +123 +114 +22 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-62 +-127 +-127 +-17 +91 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-34 +82 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-32 +83 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-31 +84 +123 +123 +123 +34 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +115 +23 +-61 +-127 +-127 +-14 +94 +123 +117 +24 +-59 +-127 +-127 +-15 +92 +123 +117 +24 +-59 +-127 +-127 +-15 +92 +123 +117 +24 +-60 +-127 +-127 +-16 +91 +123 +115 +23 +-61 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-16 +92 +123 +116 +23 +-61 +-127 +-127 +-127 +-24 +94 +123 +123 +123 +44 +-42 +-117 +-127 +-127 +-25 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-28 +88 +123 +123 +123 +38 +-48 +-123 +-127 +-127 +-30 +87 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-32 +84 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +37 +-48 +-124 +-127 +-24 +81 +123 +103 +11 +-71 +-127 +-127 +-25 +83 +123 +107 +15 +-68 +-127 +-127 +-22 +85 +123 +111 +19 +-64 +-127 +-127 +-21 +87 +123 +110 +18 +-65 +-127 +-127 +-20 +88 +123 +113 +20 +-63 +-127 +-127 +-19 +90 +123 +115 +22 +-61 +-127 +-127 +-127 +-24 +93 +123 +123 +123 +43 +-42 +-118 +-127 +-127 +-25 +91 +123 +123 +123 +40 +-46 +-121 +-127 +-127 +-28 +88 +123 +123 +123 +38 +-48 +-123 +-127 +-127 +-30 +87 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-31 +86 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-31 +86 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-30 +86 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-32 +85 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +86 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-31 +85 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +86 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +86 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-31 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +37 +-49 +-124 +-127 +-25 +81 +123 +103 +11 +-71 +-127 +-127 +-26 +82 +123 +107 +15 +-68 +-127 +-127 +-22 +85 +123 +111 +19 +-65 +-127 +-127 +-20 +88 +123 +112 +19 +-64 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +22 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-63 +-127 +-127 +-17 +91 +123 +114 +22 +-62 +-127 +-127 +-17 +90 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-62 +-127 +-127 +-16 +91 +123 +115 +23 +-61 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +115 +22 +-62 +-127 +-127 +-17 +90 +123 +113 +21 +-63 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +115 +23 +-61 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +116 +23 +-61 +-127 +-127 +-127 +-24 +94 +123 +123 +123 +43 +-42 +-118 +-127 +-127 +-25 +91 +123 +123 +123 +40 +-46 +-121 +-127 +-127 +-29 +88 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-30 +87 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-31 +86 +123 +123 +123 +38 +-47 +-123 +-127 +-23 +83 +123 +104 +13 +-70 +-127 +-127 +-24 +84 +123 +108 +16 +-66 +-127 +-127 +-21 +87 +123 +111 +19 +-64 +-127 +-127 +-19 +87 +123 +112 +20 +-64 +-127 +-127 +-19 +89 +123 +112 +20 +-63 +-127 +-127 +-18 +89 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-19 +89 +123 +113 +21 +-63 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +115 +23 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-62 +-127 +-127 +-16 +91 +123 +115 +23 +-61 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-16 +91 +123 +115 +22 +-62 +-127 +-127 +-17 +91 +123 +116 +23 +-61 +-127 +-127 +-17 +90 +123 +115 +22 +-62 +-127 +-127 +-17 +90 +123 +114 +22 +-62 +-127 +-127 +-17 +90 +123 +116 +23 +-60 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +43 +-43 +-119 +-127 +-127 +-25 +91 +123 +123 +123 +40 +-46 +-121 +-127 +-127 +-29 +88 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-30 +86 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-31 +86 +123 +123 +123 +36 +-49 +-124 +-127 +-25 +81 +123 +104 +12 +-70 +-127 +-127 +-25 +83 +123 +108 +16 +-67 +-127 +-127 +-22 +86 +123 +112 +19 +-64 +-127 +-127 +-20 +88 +123 +111 +19 +-64 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-18 +89 +123 +115 +22 +-61 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-18 +89 +123 +114 +21 +-63 +-127 +-127 +-18 +90 +123 +115 +22 +-61 +-127 +-127 +-16 +90 +123 +114 +22 +-62 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-16 +92 +123 +115 +22 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +22 +-62 +-127 +-127 +-18 +90 +123 +113 +21 +-63 +-127 +-127 +-18 +89 +123 +123 +123 +32 +-52 +-127 +-127 +-127 +-35 +81 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-33 +83 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-32 +84 +123 +115 +23 +-61 +-127 +-127 +-14 +93 +123 +117 +24 +-60 +-127 +-127 +-16 +91 +123 +116 +23 +-61 +-127 +-127 +-16 +91 +123 +115 +23 +-61 +-127 +-127 +-16 +91 +123 +114 +22 +-62 +-127 +-127 +-17 +90 +123 +114 +22 +-62 +-127 +-127 +-17 +91 +123 +116 +23 +-60 +-127 +-127 +-127 +-23 +95 +123 +123 +123 +45 +-41 +-117 +-127 +-127 +-24 +92 +123 +123 +123 +41 +-45 +-120 +-127 +-127 +-27 +89 +123 +123 +123 +38 +-47 +-122 +-127 +-127 +-29 +87 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-30 +86 +123 +123 +123 +37 +-48 +-124 +-127 +-24 +81 +123 +104 +12 +-70 +-127 +-127 +-25 +83 +123 +108 +16 +-67 +-127 +-127 +-22 +86 +123 +112 +19 +-64 +-127 +-127 +-20 +87 +123 +111 +19 +-64 +-127 +-127 +-20 +88 +123 +112 +20 +-64 +-127 +-127 +-19 +89 +123 +114 +22 +-62 +-127 +-127 +-18 +89 +123 +112 +20 +-64 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +115 +22 +-62 +-127 +-127 +-17 +90 +123 +113 +20 +-63 +-127 +-127 +-17 +91 +123 +114 +22 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +123 +123 +33 +-51 +-127 +-127 +-127 +-34 +82 +123 +123 +123 +33 +-51 +-126 +-127 +-127 +-32 +83 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +115 +22 +-61 +-127 +-127 +-14 +94 +123 +117 +24 +-59 +-127 +-127 +-15 +93 +123 +116 +23 +-60 +-127 +-127 +-16 +91 +123 +115 +23 +-61 +-127 +-127 +-17 +91 +123 +116 +23 +-61 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +22 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +113 +21 +-62 +-127 +-127 +-17 +90 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +115 +22 +-62 +-127 +-127 +-17 +91 +123 +116 +23 +-60 +-127 +-127 +-17 +90 +123 +114 +22 +-62 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +116 +23 +-61 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +22 +-62 +-127 +-127 +-127 +-24 +93 +123 +123 +123 +43 +-43 +-119 +-127 +-127 +-25 +91 +123 +123 +123 +39 +-46 +-122 +-127 +-127 +-29 +88 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-30 +86 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-31 +86 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-31 +86 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-31 +86 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-31 +86 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-31 +86 +123 +123 +123 +38 +-48 +-123 +-127 +-24 +81 +123 +104 +13 +-70 +-127 +-127 +-24 +83 +123 +108 +16 +-67 +-127 +-127 +-21 +87 +123 +112 +19 +-64 +-127 +-127 +-19 +89 +123 +112 +19 +-64 +-127 +-127 +-18 +89 +123 +113 +20 +-63 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +113 +21 +-63 +-127 +-127 +-17 +90 +123 +114 +22 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +113 +21 +-63 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +89 +123 +113 +20 +-63 +-127 +-127 +-17 +90 +123 +113 +21 +-63 +-127 +-127 +-18 +90 +123 +113 +21 +-63 +-127 +-127 +-17 +90 +123 +114 +22 +-62 +-127 +-127 +-17 +90 +123 +115 +22 +-61 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +22 +-62 +-127 +-127 +-17 +90 +123 +116 +23 +-61 +-127 +-127 +-127 +-24 +94 +123 +123 +123 +43 +-42 +-118 +-127 +-127 +-25 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-28 +87 +123 +123 +123 +38 +-48 +-123 +-127 +-127 +-29 +87 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +37 +-48 +-123 +-127 +-24 +82 +123 +104 +13 +-70 +-127 +-127 +-25 +83 +123 +109 +17 +-66 +-127 +-127 +-21 +86 +123 +112 +20 +-64 +-127 +-127 +-20 +88 +123 +111 +19 +-64 +-127 +-127 +-19 +88 +123 +113 +21 +-63 +-127 +-127 +-17 +90 +123 +115 +22 +-61 +-127 +-127 +-127 +-24 +94 +123 +123 +123 +44 +-42 +-118 +-127 +-127 +-25 +92 +123 +123 +123 +40 +-46 +-121 +-127 +-127 +-28 +88 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-30 +87 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +38 +-47 +-123 +-127 +-24 +82 +123 +104 +12 +-70 +-127 +-127 +-24 +83 +123 +108 +16 +-67 +-127 +-127 +-21 +86 +123 +110 +18 +-65 +-127 +-127 +-20 +88 +123 +112 +19 +-64 +-127 +-127 +-19 +89 +123 +112 +20 +-63 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +115 +22 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +22 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-62 +-127 +-127 +-16 +91 +123 +115 +22 +-62 +-127 +-127 +-18 +90 +123 +114 +22 +-62 +-127 +-127 +-18 +90 +123 +115 +22 +-61 +-127 +-127 +-17 +90 +123 +114 +22 +-62 +-127 +-127 +-17 +90 +123 +115 +22 +-61 +-127 +-127 +-17 +90 +123 +113 +21 +-63 +-127 +-127 +-17 +91 +123 +115 +22 +-62 +-127 +-127 +-17 +91 +123 +116 +23 +-61 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-16 +91 +123 +115 +22 +-62 +-127 +-127 +-17 +91 +123 +116 +23 +-61 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +22 +-62 +-127 +-127 +-17 +91 +123 +115 +23 +-61 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +22 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-16 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +22 +-62 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +113 +21 +-63 +-127 +-127 +-17 +91 +123 +114 +22 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-35 +81 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-33 +82 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-33 +83 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-50 +-125 +-127 +-127 +-31 +84 +123 +115 +22 +-61 +-127 +-127 +-15 +93 +123 +116 +23 +-61 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +90 +123 +114 +22 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +116 +23 +-60 +-127 +-127 +-16 +91 +123 +114 +22 +-62 +-127 +-127 +-17 +91 +123 +114 +22 +-62 +-127 +-127 +-16 +91 +123 +116 +23 +-60 +-127 +-127 +-17 +91 +123 +114 +22 +-62 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +116 +23 +-61 +-127 +-127 +-16 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +22 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-63 +-127 +-127 +-17 +90 +123 +113 +21 +-63 +-127 +-127 +-18 +90 +123 +113 +21 +-63 +-127 +-127 +-17 +90 +123 +115 +22 +-61 +-127 +-127 +-17 +90 +123 +123 +123 +32 +-52 +-127 +-127 +-127 +-34 +83 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-32 +85 +123 +115 +23 +-61 +-127 +-127 +-14 +93 +123 +117 +24 +-59 +-127 +-127 +-16 +92 +123 +116 +23 +-61 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +22 +-62 +-127 +-127 +-17 +91 +123 +114 +22 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +90 +123 +114 +22 +-62 +-127 +-127 +-17 +91 +123 +114 +22 +-62 +-127 +-127 +-17 +91 +123 +116 +23 +-61 +-127 +-127 +-16 +91 +123 +114 +22 +-62 +-127 +-127 +-17 +91 +123 +114 +22 +-62 +-127 +-127 +-17 +90 +123 +115 +23 +-61 +-127 +-127 +-18 +90 +123 +113 +21 +-63 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +115 +22 +-61 +-127 +-127 +-127 +-24 +94 +123 +123 +123 +43 +-42 +-118 +-127 +-127 +-26 +90 +123 +123 +123 +40 +-46 +-121 +-127 +-127 +-28 +88 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-30 +87 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +38 +-47 +-123 +-127 +-24 +82 +123 +104 +12 +-70 +-127 +-127 +-24 +83 +123 +108 +16 +-67 +-127 +-127 +-22 +86 +123 +110 +18 +-65 +-127 +-127 +-20 +87 +123 +111 +19 +-64 +-127 +-127 +-20 +87 +123 +113 +20 +-63 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-18 +89 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +113 +21 +-63 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +113 +21 +-63 +-127 +-127 +-17 +90 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-16 +91 +123 +115 +22 +-62 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-16 +91 +123 +116 +23 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-62 +-127 +-127 +-17 +91 +123 +116 +23 +-60 +-127 +-127 +-127 +-24 +95 +123 +123 +123 +44 +-42 +-118 +-127 +-127 +-24 +92 +123 +123 +123 +41 +-45 +-121 +-127 +-127 +-27 +89 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-29 +88 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +37 +-48 +-124 +-127 +-25 +81 +123 +104 +12 +-70 +-127 +-127 +-25 +83 +123 +108 +16 +-67 +-127 +-127 +-22 +86 +123 +111 +19 +-64 +-127 +-127 +-21 +86 +123 +111 +19 +-64 +-127 +-127 +-20 +87 +123 +112 +20 +-64 +-127 +-127 +-19 +89 +123 +114 +21 +-62 +-127 +-127 +-19 +89 +123 +112 +20 +-63 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-17 +90 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +22 +-62 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-16 +91 +123 +115 +22 +-62 +-127 +-127 +-16 +90 +123 +115 +22 +-61 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +22 +-62 +-127 +-127 +-16 +90 +123 +123 +123 +33 +-51 +-126 +-127 +-127 +-34 +82 +123 +123 +123 +33 +-51 +-127 +-127 +-127 +-33 +83 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-32 +83 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-32 +83 +123 +123 +123 +34 +-50 +-125 +-127 +-127 +-32 +84 +123 +115 +22 +-61 +-127 +-127 +-14 +93 +123 +116 +23 +-60 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +22 +-62 +-127 +-127 +-17 +91 +123 +114 +22 +-62 +-127 +-127 +-17 +91 +123 +116 +23 +-61 +-127 +-127 +-17 +90 +123 +115 +22 +-62 +-127 +-127 +-18 +91 +123 +114 +22 +-62 +-127 +-127 +-17 +90 +123 +116 +23 +-61 +-127 +-127 +-17 +90 +123 +113 +21 +-63 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +115 +23 +-61 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-62 +-127 +-127 +-17 +90 +123 +114 +22 +-62 +-127 +-127 +-17 +91 +123 +114 +22 +-62 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-16 +91 +123 +123 +123 +33 +-51 +-127 +-127 +-127 +-33 +83 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-31 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +84 +123 +115 +22 +-61 +-127 +-127 +-14 +94 +123 +117 +24 +-60 +-127 +-127 +-15 +91 +123 +116 +23 +-61 +-127 +-127 +-16 +91 +123 +114 +22 +-62 +-127 +-127 +-18 +90 +123 +113 +21 +-63 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-62 +-127 +-127 +-17 +91 +123 +114 +22 +-62 +-127 +-127 +-17 +90 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +113 +21 +-63 +-127 +-127 +-17 +90 +123 +115 +22 +-62 +-127 +-127 +-17 +91 +123 +115 +23 +-61 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +115 +22 +-61 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-16 +91 +123 +116 +24 +-60 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +44 +-42 +-118 +-127 +-127 +-25 +91 +123 +123 +123 +40 +-46 +-121 +-127 +-127 +-28 +89 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-30 +87 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-31 +86 +123 +123 +123 +37 +-48 +-123 +-127 +-24 +81 +123 +104 +12 +-70 +-127 +-127 +-25 +83 +123 +107 +15 +-68 +-127 +-127 +-23 +85 +123 +110 +18 +-65 +-127 +-127 +-21 +87 +123 +110 +18 +-65 +-127 +-127 +-20 +88 +123 +113 +20 +-63 +-127 +-127 +-19 +89 +123 +113 +21 +-63 +-127 +-127 +-18 +89 +123 +113 +21 +-63 +-127 +-127 +-17 +90 +123 +114 +22 +-62 +-127 +-127 +-17 +91 +123 +114 +22 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-62 +-127 +-127 +-17 +91 +123 +114 +22 +-62 +-127 +-127 +-17 +91 +123 +114 +22 +-62 +-127 +-127 +-17 +90 +123 +114 +22 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-16 +91 +123 +115 +23 +-61 +-127 +-127 +-17 +91 +123 +114 +22 +-62 +-127 +-127 +-17 +91 +123 +114 +22 +-62 +-127 +-127 +-17 +90 +123 +116 +23 +-61 +-127 +-127 +-127 +-24 +94 +123 +123 +123 +44 +-42 +-118 +-127 +-127 +-25 +90 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-28 +88 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-30 +86 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-31 +86 +123 +123 +123 +37 +-48 +-124 +-127 +-24 +81 +123 +104 +13 +-70 +-127 +-127 +-25 +84 +123 +107 +15 +-67 +-127 +-127 +-21 +86 +123 +112 +20 +-63 +-127 +-127 +-20 +88 +123 +111 +19 +-64 +-127 +-127 +-19 +88 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +115 +22 +-61 +-127 +-127 +-18 +89 +123 +113 +20 +-63 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +115 +22 +-61 +-127 +-127 +-16 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +22 +-62 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-16 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +22 +-62 +-127 +-127 +-18 +90 +123 +113 +21 +-63 +-127 +-127 +-18 +90 +123 +123 +123 +32 +-52 +-127 +-127 +-127 +-35 +81 +123 +123 +123 +32 +-52 +-127 +-127 +-127 +-33 +83 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-32 +85 +123 +115 +23 +-61 +-127 +-127 +-14 +93 +123 +117 +24 +-60 +-127 +-127 +-16 +92 +123 +114 +22 +-62 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +90 +123 +113 +21 +-63 +-127 +-127 +-17 +90 +123 +114 +22 +-62 +-127 +-127 +-17 +91 +123 +115 +23 +-61 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +116 +23 +-60 +-127 +-127 +-16 +91 +123 +115 +22 +-62 +-127 +-127 +-17 +91 +123 +114 +22 +-62 +-127 +-127 +-16 +91 +123 +116 +24 +-60 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +90 +123 +113 +21 +-63 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +89 +123 +123 +123 +31 +-53 +-127 +-127 +-127 +-36 +81 +123 +123 +123 +32 +-52 +-127 +-127 +-127 +-34 +83 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-33 +84 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +115 +22 +-61 +-127 +-127 +-15 +93 +123 +118 +25 +-59 +-127 +-127 +-15 +93 +123 +116 +23 +-60 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +22 +-62 +-127 +-127 +-17 +90 +123 +114 +22 +-62 +-127 +-127 +-17 +91 +123 +114 +22 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +22 +-62 +-127 +-127 +-17 +91 +123 +116 +23 +-61 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +22 +-62 +-127 +-127 +-17 +90 +123 +115 +22 +-61 +-127 +-127 +-18 +91 +123 +113 +21 +-63 +-127 +-127 +-18 +90 +123 +115 +22 +-62 +-127 +-127 +-17 +91 +123 +116 +23 +-61 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +22 +-62 +-127 +-127 +-17 +90 +123 +115 +22 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-62 +-127 +-127 +-17 +90 +123 +114 +22 +-62 +-127 +-127 +-18 +91 +123 +113 +21 +-63 +-127 +-127 +-17 +90 +123 +114 +22 +-62 +-127 +-127 +-17 +90 +123 +113 +21 +-63 +-127 +-127 +-17 +91 +123 +115 +22 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-16 +91 +123 +114 +22 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +22 +-62 +-127 +-127 +-16 +91 +123 +115 +23 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-16 +91 +123 +116 +23 +-61 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +115 +22 +-61 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-19 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +116 +23 +-61 +-127 +-127 +-127 +-24 +94 +123 +123 +123 +44 +-42 +-118 +-127 +-127 +-25 +91 +123 +123 +123 +40 +-46 +-121 +-127 +-127 +-28 +87 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-30 +87 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +37 +-48 +-123 +-127 +-24 +81 +123 +104 +12 +-70 +-127 +-127 +-25 +83 +123 +107 +15 +-68 +-127 +-127 +-22 +86 +123 +111 +18 +-65 +-127 +-127 +-20 +87 +123 +111 +18 +-65 +-127 +-127 +-19 +88 +123 +112 +20 +-64 +-127 +-127 +-18 +90 +123 +113 +21 +-63 +-127 +-127 +-17 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +115 +22 +-62 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +22 +-62 +-127 +-127 +-17 +91 +123 +115 +23 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +22 +-62 +-127 +-127 +-16 +91 +123 +115 +22 +-62 +-127 +-127 +-17 +90 +123 +114 +22 +-62 +-127 +-127 +-17 +90 +123 +115 +22 +-61 +-127 +-127 +-17 +90 +123 +113 +20 +-63 +-127 +-127 +-17 +90 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +116 +23 +-61 +-127 +-127 +-127 +-23 +95 +123 +123 +123 +44 +-42 +-118 +-127 +-127 +-25 +92 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-28 +88 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-30 +87 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-30 +87 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-31 +86 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-31 +86 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +37 +-49 +-124 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-31 +86 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-31 +86 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-31 +86 +123 +123 +123 +37 +-48 +-123 +-127 +-24 +82 +123 +104 +12 +-70 +-127 +-127 +-25 +83 +123 +108 +16 +-67 +-127 +-127 +-22 +86 +123 +112 +19 +-64 +-127 +-127 +-19 +88 +123 +112 +19 +-64 +-127 +-127 +-19 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +89 +123 +115 +23 +-61 +-127 +-127 +-127 +-24 +94 +123 +123 +123 +43 +-42 +-118 +-127 +-127 +-25 +90 +123 +123 +123 +39 +-46 +-122 +-127 +-127 +-28 +89 +123 +123 +123 +38 +-48 +-123 +-127 +-127 +-30 +87 +123 +123 +123 +37 +-49 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-31 +86 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-33 +84 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +85 +123 +123 +123 +37 +-48 +-124 +-127 +-25 +81 +123 +102 +11 +-72 +-127 +-127 +-25 +82 +123 +107 +15 +-67 +-127 +-127 +-22 +86 +123 +110 +18 +-65 +-127 +-127 +-21 +87 +123 +111 +18 +-65 +-127 +-127 +-18 +89 +123 +113 +21 +-63 +-127 +-127 +-18 +90 +123 +113 +21 +-63 +-127 +-127 +-18 +90 +123 +123 +123 +32 +-52 +-127 +-127 +-127 +-34 +81 +123 +123 +123 +33 +-51 +-126 +-127 +-127 +-33 +83 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-33 +83 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-48 +-124 +-127 +-127 +-30 +85 +123 +123 +123 +36 +-48 +-124 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +86 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-30 +85 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-30 +85 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +84 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +84 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +84 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +115 +23 +-61 +-127 +-127 +-14 +94 +123 +118 +25 +-59 +-127 +-127 +-15 +92 +123 +116 +24 +-60 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +90 +123 +114 +22 +-62 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-17 +90 +123 +113 +21 +-63 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +116 +23 +-60 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +22 +-62 +-127 +-127 +-17 +90 +123 +115 +23 +-61 +-127 +-127 +-18 +90 +123 +113 +21 +-63 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +115 +22 +-62 +-127 +-127 +-17 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +91 +123 +114 +22 +-62 +-127 +-127 +-17 +90 +123 +114 +22 +-62 +-127 +-127 +-17 +91 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-33 +82 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-32 +83 +123 +123 +123 +33 +-51 +-126 +-127 +-127 +-32 +83 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-32 +84 +123 +115 +22 +-61 +-127 +-127 +-15 +93 +123 +116 +23 +-60 +-127 +-127 +-15 +92 +123 +115 +23 +-61 +-127 +-127 +-16 +91 +123 +114 +22 +-62 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-16 +91 +123 +114 +22 +-62 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-62 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +22 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +115 +22 +-61 +-127 +-127 +-17 +90 +123 +114 +21 +-63 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +89 +123 +116 +23 +-61 +-127 +-127 +-18 +89 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +113 +21 +-63 +-127 +-127 +-17 +90 +123 +117 +24 +-60 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +44 +-42 +-118 +-127 +-127 +-25 +92 +123 +123 +123 +41 +-45 +-121 +-127 +-127 +-27 +89 +123 +123 +123 +39 +-46 +-122 +-127 +-127 diff --git a/traces/lf_t5577_awid_50.pm3 b/traces/lf_t5577_awid_50.pm3 new file mode 100644 index 000000000..5e0f9b1f7 --- /dev/null +++ b/traces/lf_t5577_awid_50.pm3 @@ -0,0 +1,10000 @@ +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +116 +23 +-60 +-127 +-127 +-15 +94 +123 +117 +24 +-59 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-16 +92 +123 +116 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +92 +123 +116 +23 +-60 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +116 +23 +-60 +-127 +-127 +-16 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-16 +92 +123 +116 +23 +-60 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +44 +-42 +-118 +-127 +-127 +-24 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-29 +88 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-29 +86 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-31 +85 +123 +123 +123 +37 +-48 +-123 +-127 +-25 +82 +123 +104 +11 +-70 +-127 +-127 +-26 +83 +123 +108 +16 +-67 +-127 +-127 +-22 +86 +123 +111 +18 +-65 +-127 +-127 +-20 +88 +123 +111 +19 +-64 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-18 +89 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +123 +123 +32 +-53 +-127 +-127 +-127 +-34 +82 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-33 +84 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-32 +84 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +115 +22 +-61 +-127 +-127 +-14 +94 +123 +117 +24 +-59 +-127 +-127 +-15 +93 +123 +117 +23 +-60 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-16 +91 +123 +116 +22 +-61 +-127 +-127 +-16 +92 +123 +115 +21 +-62 +-127 +-127 +-16 +91 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-34 +83 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-33 +84 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +117 +23 +-60 +-127 +-127 +-14 +94 +123 +117 +24 +-59 +-127 +-127 +-15 +93 +123 +116 +23 +-60 +-127 +-127 +-16 +92 +123 +116 +23 +-60 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +90 +123 +115 +21 +-62 +-127 +-127 +-18 +91 +123 +115 +22 +-61 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +44 +-42 +-118 +-127 +-127 +-24 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-27 +88 +123 +123 +123 +37 +-47 +-123 +-127 +-127 +-29 +86 +123 +123 +123 +36 +-48 +-124 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-48 +-124 +-127 +-127 +-31 +84 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-31 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-124 +-127 +-24 +82 +123 +105 +12 +-70 +-127 +-127 +-25 +84 +123 +108 +16 +-67 +-127 +-127 +-21 +87 +123 +113 +20 +-63 +-127 +-127 +-20 +88 +123 +111 +19 +-64 +-127 +-127 +-19 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +115 +22 +-61 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +115 +21 +-62 +-127 +-127 +-17 +90 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-18 +91 +123 +113 +20 +-63 +-127 +-127 +-17 +90 +123 +115 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +92 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-18 +91 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-34 +82 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-33 +84 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +86 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +86 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +86 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +115 +22 +-61 +-127 +-127 +-16 +92 +123 +117 +24 +-59 +-127 +-127 +-16 +92 +123 +116 +22 +-61 +-127 +-127 +-17 +91 +123 +117 +23 +-60 +-127 +-127 +-16 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +92 +123 +115 +22 +-61 +-127 +-127 +-18 +90 +123 +116 +22 +-61 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +116 +23 +-60 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +116 +22 +-61 +-127 +-127 +-18 +89 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +20 +-62 +-127 +-127 +-18 +90 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +92 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +92 +123 +115 +22 +-61 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +116 +23 +-60 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +115 +21 +-62 +-127 +-127 +-17 +90 +123 +116 +22 +-61 +-127 +-127 +-19 +90 +123 +115 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +116 +23 +-60 +-127 +-127 +-127 +-23 +93 +123 +123 +123 +44 +-41 +-118 +-127 +-127 +-24 +91 +123 +123 +123 +39 +-46 +-122 +-127 +-127 +-28 +87 +123 +123 +123 +37 +-47 +-123 +-127 +-127 +-30 +86 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +84 +123 +123 +123 +37 +-48 +-123 +-127 +-25 +82 +123 +103 +11 +-71 +-127 +-127 +-26 +83 +123 +108 +15 +-67 +-127 +-127 +-22 +86 +123 +111 +18 +-65 +-127 +-127 +-21 +88 +123 +111 +18 +-64 +-127 +-127 +-19 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +115 +21 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +116 +22 +-61 +-127 +-127 +-127 +-23 +93 +123 +123 +123 +43 +-43 +-119 +-127 +-127 +-25 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-28 +89 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-29 +87 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-30 +86 +123 +123 +123 +37 +-47 +-123 +-127 +-127 +-30 +86 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-31 +86 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +84 +123 +123 +123 +36 +-48 +-124 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-124 +-127 +-25 +82 +123 +105 +12 +-70 +-127 +-127 +-25 +84 +123 +108 +15 +-67 +-127 +-127 +-21 +86 +123 +112 +19 +-64 +-127 +-127 +-21 +88 +123 +111 +18 +-65 +-127 +-127 +-19 +88 +123 +113 +20 +-63 +-127 +-127 +-19 +90 +123 +115 +22 +-61 +-127 +-127 +-127 +-24 +93 +123 +123 +123 +43 +-43 +-119 +-127 +-127 +-25 +91 +123 +123 +123 +39 +-46 +-122 +-127 +-127 +-28 +87 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-29 +86 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-30 +85 +123 +123 +123 +37 +-48 +-124 +-127 +-24 +82 +123 +104 +12 +-70 +-127 +-127 +-26 +83 +123 +108 +15 +-67 +-127 +-127 +-22 +86 +123 +111 +18 +-64 +-127 +-127 +-20 +88 +123 +112 +19 +-64 +-127 +-127 +-20 +89 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-34 +83 +123 +123 +123 +33 +-51 +-126 +-127 +-127 +-32 +85 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +86 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-32 +85 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +86 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +86 +123 +116 +23 +-60 +-127 +-127 +-14 +94 +123 +118 +24 +-59 +-127 +-127 +-15 +93 +123 +117 +23 +-60 +-127 +-127 +-17 +92 +123 +115 +22 +-61 +-127 +-127 +-16 +92 +123 +116 +23 +-60 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-18 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +116 +22 +-61 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +116 +23 +-60 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +117 +23 +-60 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +43 +-42 +-118 +-127 +-127 +-26 +91 +123 +123 +123 +39 +-46 +-122 +-127 +-127 +-29 +87 +123 +123 +123 +37 +-47 +-123 +-127 +-127 +-31 +86 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +37 +-48 +-123 +-127 +-25 +82 +123 +105 +12 +-70 +-127 +-127 +-26 +83 +123 +107 +15 +-68 +-127 +-127 +-22 +86 +123 +111 +19 +-64 +-127 +-127 +-20 +88 +123 +112 +19 +-64 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +92 +123 +115 +21 +-61 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-18 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +90 +123 +115 +21 +-62 +-127 +-127 +-18 +91 +123 +115 +21 +-62 +-127 +-127 +-18 +91 +123 +116 +23 +-60 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +44 +-42 +-118 +-127 +-127 +-25 +92 +123 +123 +123 +41 +-44 +-121 +-127 +-127 +-27 +89 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-29 +87 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-30 +85 +123 +123 +123 +37 +-48 +-123 +-127 +-24 +83 +123 +105 +13 +-69 +-127 +-127 +-25 +83 +123 +109 +16 +-66 +-127 +-127 +-22 +87 +123 +112 +19 +-64 +-127 +-127 +-20 +88 +123 +112 +19 +-64 +-127 +-127 +-20 +89 +123 +113 +19 +-63 +-127 +-127 +-18 +89 +123 +115 +22 +-61 +-127 +-127 +-127 +-23 +93 +123 +123 +123 +42 +-43 +-119 +-127 +-127 +-26 +90 +123 +123 +123 +39 +-46 +-122 +-127 +-127 +-29 +87 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-30 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +37 +-47 +-123 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +36 +-48 +-124 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-30 +85 +123 +123 +123 +37 +-47 +-123 +-127 +-24 +82 +123 +105 +12 +-70 +-127 +-127 +-25 +84 +123 +108 +16 +-67 +-127 +-127 +-22 +87 +123 +112 +19 +-64 +-127 +-127 +-20 +88 +123 +112 +19 +-64 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-19 +90 +123 +113 +20 +-63 +-127 +-127 +-19 +89 +123 +114 +20 +-62 +-127 +-127 +-19 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +114 +20 +-62 +-127 +-127 +-19 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +89 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-16 +92 +123 +116 +22 +-61 +-127 +-127 +-17 +92 +123 +116 +23 +-60 +-127 +-127 +-127 +-22 +95 +123 +123 +123 +44 +-41 +-118 +-127 +-127 +-24 +91 +123 +123 +123 +41 +-44 +-120 +-127 +-127 +-28 +88 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-29 +87 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +37 +-48 +-123 +-127 +-24 +82 +123 +104 +12 +-70 +-127 +-127 +-24 +84 +123 +108 +16 +-67 +-127 +-127 +-23 +86 +123 +112 +19 +-64 +-127 +-127 +-20 +88 +123 +111 +18 +-65 +-127 +-127 +-20 +88 +123 +112 +19 +-63 +-127 +-127 +-19 +89 +123 +115 +22 +-61 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +116 +22 +-61 +-127 +-127 +-17 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +20 +-62 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +113 +20 +-63 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-35 +82 +123 +123 +123 +32 +-52 +-127 +-127 +-127 +-34 +83 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-33 +83 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +116 +22 +-61 +-127 +-127 +-14 +94 +123 +117 +24 +-59 +-127 +-127 +-16 +92 +123 +116 +22 +-61 +-127 +-127 +-15 +92 +123 +117 +23 +-60 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +92 +123 +115 +21 +-61 +-127 +-127 +-17 +91 +123 +116 +23 +-60 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +90 +123 +116 +23 +-60 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +114 +20 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-16 +91 +123 +115 +21 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-35 +82 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-33 +84 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-31 +86 +123 +116 +22 +-61 +-127 +-127 +-14 +94 +123 +118 +24 +-59 +-127 +-127 +-15 +94 +123 +117 +24 +-60 +-127 +-127 +-16 +93 +123 +118 +24 +-59 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +116 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +115 +22 +-61 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-19 +90 +123 +115 +21 +-61 +-127 +-127 +-18 +90 +123 +115 +22 +-61 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +116 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-18 +91 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-34 +82 +123 +123 +123 +33 +-52 +-126 +-127 +-127 +-33 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-32 +85 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-32 +85 +123 +115 +22 +-61 +-127 +-127 +-14 +94 +123 +117 +24 +-60 +-127 +-127 +-16 +93 +123 +116 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-18 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-18 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +115 +22 +-61 +-127 +-127 +-18 +91 +123 +114 +20 +-62 +-127 +-127 +-18 +90 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +116 +23 +-60 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +20 +-62 +-127 +-127 +-18 +90 +123 +116 +23 +-60 +-127 +-127 +-127 +-24 +93 +123 +123 +123 +43 +-42 +-119 +-127 +-127 +-25 +91 +123 +123 +123 +39 +-46 +-122 +-127 +-127 +-28 +88 +123 +123 +123 +37 +-47 +-123 +-127 +-127 +-30 +86 +123 +123 +123 +36 +-48 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +37 +-47 +-123 +-127 +-24 +82 +123 +105 +13 +-69 +-127 +-127 +-25 +84 +123 +108 +16 +-67 +-127 +-127 +-22 +86 +123 +112 +19 +-64 +-127 +-127 +-20 +88 +123 +112 +19 +-64 +-127 +-127 +-19 +89 +123 +112 +19 +-63 +-127 +-127 +-18 +89 +123 +114 +20 +-62 +-127 +-127 +-19 +90 +123 +113 +20 +-63 +-127 +-127 +-19 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +116 +22 +-61 +-127 +-127 +-17 +92 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +115 +22 +-61 +-127 +-127 +-17 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +115 +22 +-61 +-127 +-127 +-18 +90 +123 +114 +20 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +116 +23 +-60 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-18 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +117 +23 +-60 +-127 +-127 +-18 +91 +123 +114 +20 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +90 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-61 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +20 +-62 +-127 +-127 +-18 +91 +123 +115 +22 +-61 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +116 +22 +-61 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +43 +-42 +-119 +-127 +-127 +-24 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-28 +88 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-29 +87 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-30 +87 +123 +123 +123 +37 +-48 +-123 +-127 +-24 +83 +123 +105 +12 +-70 +-127 +-127 +-25 +84 +123 +109 +17 +-66 +-127 +-127 +-21 +87 +123 +112 +19 +-64 +-127 +-127 +-20 +88 +123 +112 +19 +-64 +-127 +-127 +-19 +88 +123 +112 +19 +-63 +-127 +-127 +-19 +90 +123 +115 +21 +-62 +-127 +-127 +-18 +90 +123 +113 +20 +-62 +-127 +-127 +-19 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +115 +21 +-62 +-127 +-127 +-18 +90 +123 +113 +20 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +20 +-62 +-127 +-127 +-18 +90 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-34 +83 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-32 +85 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-32 +85 +123 +115 +22 +-61 +-127 +-127 +-13 +95 +123 +118 +25 +-59 +-127 +-127 +-15 +93 +123 +117 +23 +-60 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-16 +91 +123 +116 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-35 +83 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-33 +84 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-33 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +85 +123 +116 +22 +-61 +-127 +-127 +-14 +93 +123 +118 +24 +-59 +-127 +-127 +-15 +92 +123 +116 +23 +-60 +-127 +-127 +-16 +92 +123 +116 +23 +-60 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-18 +90 +123 +117 +23 +-60 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-18 +91 +123 +116 +22 +-61 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +117 +23 +-60 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +116 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +20 +-62 +-127 +-127 +-17 +90 +123 +115 +22 +-61 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +123 +123 +32 +-52 +-127 +-127 +-127 +-34 +82 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-33 +83 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +115 +21 +-61 +-127 +-127 +-14 +94 +123 +118 +24 +-59 +-127 +-127 +-15 +93 +123 +117 +23 +-60 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +21 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-33 +83 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +37 +-49 +-124 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +116 +23 +-60 +-127 +-127 +-14 +94 +123 +117 +24 +-59 +-127 +-127 +-15 +93 +123 +116 +23 +-60 +-127 +-127 +-16 +92 +123 +117 +23 +-60 +-127 +-127 +-16 +92 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-18 +91 +123 +115 +22 +-61 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +115 +22 +-61 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-19 +90 +123 +114 +20 +-62 +-127 +-127 +-18 +90 +123 +116 +22 +-61 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +123 +123 +33 +-51 +-126 +-127 +-127 +-34 +82 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +116 +22 +-61 +-127 +-127 +-14 +94 +123 +117 +24 +-60 +-127 +-127 +-15 +93 +123 +116 +23 +-60 +-127 +-127 +-17 +92 +123 +115 +21 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-16 +92 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +116 +22 +-61 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +115 +21 +-62 +-127 +-127 +-18 +90 +123 +115 +22 +-61 +-127 +-127 +-127 +-24 +93 +123 +123 +123 +43 +-42 +-118 +-127 +-127 +-25 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-28 +88 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-29 +87 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +37 +-48 +-124 +-127 +-25 +81 +123 +104 +12 +-70 +-127 +-127 +-25 +84 +123 +109 +16 +-66 +-127 +-127 +-22 +87 +123 +112 +19 +-63 +-127 +-127 +-19 +88 +123 +112 +19 +-63 +-127 +-127 +-19 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +116 +22 +-61 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +44 +-41 +-118 +-127 +-127 +-25 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-28 +88 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-29 +87 +123 +123 +123 +36 +-48 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +84 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +84 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +37 +-47 +-123 +-127 +-24 +82 +123 +103 +11 +-71 +-127 +-127 +-25 +84 +123 +108 +16 +-67 +-127 +-127 +-21 +87 +123 +112 +19 +-64 +-127 +-127 +-20 +88 +123 +111 +19 +-64 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-34 +82 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-33 +83 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-33 +84 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +115 +22 +-61 +-127 +-127 +-14 +93 +123 +117 +24 +-60 +-127 +-127 +-15 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-33 +83 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +37 +-49 +-124 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +86 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +116 +23 +-60 +-127 +-127 +-15 +93 +123 +117 +23 +-60 +-127 +-127 +-15 +92 +123 +116 +23 +-60 +-127 +-127 +-16 +92 +123 +116 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +116 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-18 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +116 +23 +-60 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +92 +123 +116 +23 +-60 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +115 +22 +-61 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-19 +89 +123 +114 +21 +-62 +-127 +-127 +-18 +89 +123 +114 +21 +-62 +-127 +-127 +-19 +90 +123 +123 +123 +32 +-52 +-127 +-127 +-127 +-34 +83 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-33 +84 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-33 +85 +123 +115 +22 +-61 +-127 +-127 +-14 +93 +123 +117 +24 +-59 +-127 +-127 +-15 +93 +123 +117 +23 +-60 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-16 +92 +123 +116 +22 +-61 +-127 +-127 +-16 +92 +123 +116 +22 +-61 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +90 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +116 +23 +-60 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +115 +21 +-61 +-127 +-127 +-18 +90 +123 +115 +22 +-61 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +20 +-62 +-127 +-127 +-18 +90 +123 +115 +22 +-61 +-127 +-127 +-19 +90 +123 +113 +20 +-63 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-19 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +114 +20 +-62 +-127 +-127 +-18 +90 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +21 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +116 +22 +-61 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +116 +22 +-61 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +43 +-42 +-119 +-127 +-127 +-25 +91 +123 +123 +123 +39 +-45 +-121 +-127 +-127 +-28 +88 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-29 +87 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-30 +87 +123 +123 +123 +37 +-48 +-123 +-127 +-24 +82 +123 +105 +13 +-69 +-127 +-127 +-25 +84 +123 +108 +16 +-67 +-127 +-127 +-22 +87 +123 +112 +19 +-64 +-127 +-127 +-20 +88 +123 +112 +19 +-64 +-127 +-127 +-19 +89 +123 +112 +19 +-63 +-127 +-127 +-19 +90 +123 +115 +22 +-61 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-16 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +123 +123 +32 +-52 +-127 +-127 +-127 +-36 +82 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-34 +83 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-31 +86 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-31 +86 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +115 +22 +-61 +-127 +-127 +-15 +93 +123 +118 +24 +-59 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-16 +91 +123 +117 +23 +-60 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +117 +23 +-60 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +44 +-41 +-118 +-127 +-127 +-25 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-28 +88 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-30 +87 +123 +123 +123 +36 +-48 +-124 +-127 +-127 +-30 +85 +123 +123 +123 +36 +-48 +-124 +-127 +-25 +81 +123 +104 +12 +-70 +-127 +-127 +-25 +83 +123 +108 +16 +-67 +-127 +-127 +-22 +87 +123 +112 +19 +-64 +-127 +-127 +-20 +88 +123 +113 +20 +-63 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +116 +23 +-60 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +43 +-42 +-118 +-127 +-127 +-24 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-27 +88 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-29 +87 +123 +123 +123 +36 +-48 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +37 +-47 +-123 +-127 +-127 +-31 +84 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-31 +84 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-126 +-127 +-127 +-32 +85 +123 +123 +123 +37 +-47 +-123 +-127 +-127 +-31 +85 +123 +123 +123 +34 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +37 +-48 +-124 +-127 +-25 +82 +123 +104 +12 +-70 +-127 +-127 +-25 +84 +123 +108 +15 +-67 +-127 +-127 +-22 +86 +123 +111 +18 +-64 +-127 +-127 +-20 +87 +123 +111 +19 +-64 +-127 +-127 +-19 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-17 +91 +123 +115 +21 +-61 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +116 +22 +-61 +-127 +-127 +-18 +90 +123 +114 +20 +-62 +-127 +-127 +-19 +90 +123 +113 +20 +-62 +-127 +-127 +-18 +90 +123 +116 +23 +-60 +-127 +-127 +-127 +-24 +93 +123 +123 +123 +43 +-42 +-119 +-127 +-127 +-25 +91 +123 +123 +123 +39 +-46 +-122 +-127 +-127 +-28 +88 +123 +123 +123 +37 +-47 +-123 +-127 +-127 +-29 +87 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +38 +-47 +-123 +-127 +-24 +83 +123 +105 +13 +-69 +-127 +-127 +-24 +84 +123 +109 +17 +-66 +-127 +-127 +-22 +86 +123 +113 +20 +-63 +-127 +-127 +-20 +89 +123 +112 +19 +-64 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-19 +89 +123 +115 +22 +-61 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +91 +123 +114 +20 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-19 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +92 +123 +115 +21 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-34 +82 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-33 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-33 +83 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +116 +22 +-61 +-127 +-127 +-15 +93 +123 +117 +23 +-60 +-127 +-127 +-15 +92 +123 +116 +23 +-60 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +117 +24 +-59 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +44 +-41 +-118 +-127 +-127 +-24 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-28 +88 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-29 +87 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-30 +85 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +84 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +84 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +84 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +37 +-48 +-123 +-127 +-25 +82 +123 +105 +12 +-70 +-127 +-127 +-25 +83 +123 +108 +16 +-67 +-127 +-127 +-21 +87 +123 +112 +19 +-64 +-127 +-127 +-20 +88 +123 +112 +19 +-64 +-127 +-127 +-20 +89 +123 +113 +20 +-62 +-127 +-127 +-19 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +20 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +92 +123 +115 +22 +-61 +-127 +-127 +-16 +92 +123 +116 +22 +-61 +-127 +-127 +-17 +92 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-33 +84 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-31 +85 +123 +116 +22 +-61 +-127 +-127 +-14 +93 +123 +117 +23 +-60 +-127 +-127 +-15 +93 +123 +116 +23 +-60 +-127 +-127 +-16 +91 +123 +116 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +116 +23 +-60 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +116 +23 +-61 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-18 +91 +123 +116 +23 +-60 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +90 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +114 +20 +-62 +-127 +-127 +-19 +89 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +123 +123 +32 +-53 +-127 +-127 +-127 +-35 +82 +123 +123 +123 +33 +-52 +-126 +-127 +-127 +-33 +83 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-33 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +115 +22 +-61 +-127 +-127 +-14 +94 +123 +118 +24 +-59 +-127 +-127 +-15 +93 +123 +117 +23 +-60 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +116 +23 +-60 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +92 +123 +117 +23 +-60 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +116 +23 +-60 +-127 +-127 +-18 +90 +123 +114 +20 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +115 +22 +-61 +-127 +-127 +-18 +90 +123 +114 +20 +-62 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-18 +90 +123 +123 +123 +32 +-53 +-127 +-127 +-127 +-35 +82 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-34 +83 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-33 +84 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-33 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +115 +22 +-61 +-127 +-127 +-15 +93 +123 +117 +24 +-59 +-127 +-127 +-15 +93 +123 +116 +23 +-60 +-127 +-127 +-16 +92 +123 +116 +22 +-61 +-127 +-127 +-16 +92 +123 +116 +22 +-61 +-127 +-127 +-16 +92 +123 +116 +23 +-60 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +116 +22 +-61 +-127 +-127 +-17 +90 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +116 +23 +-60 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +116 +22 +-61 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +116 +23 +-61 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +43 +-42 +-119 +-127 +-127 +-25 +90 +123 +123 +123 +39 +-46 +-122 +-127 +-127 +-28 +88 +123 +123 +123 +37 +-47 +-123 +-127 +-127 +-30 +86 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-31 +85 +123 +123 +123 +37 +-48 +-124 +-127 +-24 +82 +123 +104 +12 +-70 +-127 +-127 +-25 +83 +123 +107 +15 +-68 +-127 +-127 +-22 +86 +123 +111 +18 +-64 +-127 +-127 +-21 +88 +123 +111 +18 +-64 +-127 +-127 +-19 +89 +123 +113 +20 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +92 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +116 +23 +-61 +-127 +-127 +-18 +91 +123 +114 +20 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +116 +23 +-60 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +43 +-42 +-119 +-127 +-127 +-25 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-28 +88 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-29 +86 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-30 +85 +123 +123 +123 +36 +-48 +-124 +-127 +-25 +82 +123 +105 +12 +-70 +-127 +-127 +-25 +83 +123 +108 +15 +-67 +-127 +-127 +-22 +86 +123 +112 +19 +-64 +-127 +-127 +-20 +88 +123 +112 +19 +-64 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +115 +22 +-61 +-127 +-127 +-19 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +92 +123 +115 +22 +-61 +-127 +-127 +-16 +92 +123 +116 +22 +-61 +-127 +-127 +-16 +92 +123 +115 +21 +-61 +-127 +-127 +-16 +92 +123 +115 +21 +-61 +-127 +-127 +-17 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +21 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +115 +22 +-62 +-127 +-127 +-18 +90 +123 +116 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +116 +22 +-61 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +113 +20 +-62 +-127 +-127 +-18 +90 +123 +115 +21 +-62 +-127 +-127 +-19 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-18 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-18 +91 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-35 +82 +123 +123 +123 +33 +-51 +-126 +-127 +-127 +-33 +84 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-33 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +116 +22 +-61 +-127 +-127 +-14 +93 +123 +117 +24 +-59 +-127 +-127 +-16 +92 +123 +116 +22 +-61 +-127 +-127 +-17 +92 +123 +116 +23 +-60 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-61 +-127 +-127 +-16 +91 +123 +117 +24 +-60 +-127 +-127 +-16 +91 +123 +115 +21 +-61 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +92 +123 +117 +23 +-60 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +117 +23 +-60 +-127 +-127 +-127 +-22 +94 +123 +123 +123 +44 +-42 +-118 +-127 +-127 +-25 +90 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-28 +88 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +37 +-48 +-123 +-127 +-24 +83 +123 +104 +12 +-70 +-127 +-127 +-25 +84 +123 +108 +15 +-67 +-127 +-127 +-22 +86 +123 +112 +19 +-64 +-127 +-127 +-20 +88 +123 +111 +18 +-64 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-34 +83 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-33 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-33 +84 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-126 +-127 +-127 +-33 +85 +123 +115 +21 +-61 +-127 +-127 +-15 +93 +123 +117 +23 +-60 +-127 +-127 +-15 +92 +123 +116 +22 +-61 +-127 +-127 +-17 +92 +123 +116 +22 +-61 +-127 +-127 +-17 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-18 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +90 +123 +116 +23 +-60 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +115 +21 +-61 +-127 +-127 +-18 +91 +123 +116 +22 +-61 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +116 +23 +-60 +-127 +-127 +-127 +-23 +93 +123 +123 +123 +44 +-42 +-118 +-127 +-127 +-24 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-28 +88 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-30 +86 +123 +123 +123 +36 +-48 +-124 +-127 +-127 +-30 +85 +123 +123 +123 +37 +-48 +-123 +-127 +-24 +82 +123 +104 +11 +-70 +-127 +-127 +-25 +84 +123 +108 +15 +-67 +-127 +-127 +-22 +86 +123 +112 +19 +-64 +-127 +-127 +-20 +88 +123 +112 +19 +-64 +-127 +-127 +-18 +90 +123 +114 +20 +-62 +-127 +-127 +-18 +90 +123 +114 +20 +-62 +-127 +-127 +-18 +90 +123 +123 +123 +32 +-53 +-127 +-127 +-127 +-35 +82 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-34 +83 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-33 +83 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-33 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +116 +22 +-61 +-127 +-127 +-13 +95 +123 +118 +24 +-59 +-127 +-127 +-15 +93 +123 +117 +24 +-60 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +90 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +21 +-61 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +116 +23 +-60 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-18 +91 +123 +115 +21 +-61 +-127 +-127 +-17 +91 +123 +116 +23 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +116 +23 +-60 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +43 +-42 +-119 +-127 +-127 +-25 +90 +123 +123 +123 +39 +-46 +-122 +-127 +-127 +-29 +87 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-30 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-30 +85 +123 +123 +123 +37 +-47 +-123 +-127 +-24 +82 +123 +104 +12 +-70 +-127 +-127 +-25 +84 +123 +108 +15 +-67 +-127 +-127 +-22 +87 +123 +112 +19 +-64 +-127 +-127 +-20 +88 +123 +112 +19 +-64 +-127 +-127 +-19 +89 +123 +114 +20 +-63 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +116 +23 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-16 +91 +123 +116 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-16 +91 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-34 +83 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-33 +84 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +116 +23 +-60 +-127 +-127 +-15 +94 +123 +117 +24 +-60 +-127 +-127 +-15 +92 +123 +116 +22 +-61 +-127 +-127 +-16 +91 +123 +116 +22 +-61 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +115 +21 +-62 +-127 +-127 +-127 +-23 +93 +123 +123 +123 +43 +-42 +-119 +-127 +-127 +-25 +91 +123 +123 +123 +39 +-46 +-122 +-127 +-127 +-29 +88 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-31 +86 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-30 +85 +123 +123 +123 +36 +-48 +-124 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-30 +86 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-31 +85 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +37 +-48 +-123 +-127 +-25 +81 +123 +103 +11 +-71 +-127 +-127 +-25 +83 +123 +108 +15 +-67 +-127 +-127 +-22 +87 +123 +112 +19 +-64 +-127 +-127 +-20 +88 diff --git a/traces/lf_t5577_em410x.pm3 b/traces/lf_t5577_em410x.pm3 new file mode 100644 index 000000000..1be78ee3e --- /dev/null +++ b/traces/lf_t5577_em410x.pm3 @@ -0,0 +1,10000 @@ +109 +101 +95 +88 +30 +-55 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-108 +-100 +-93 +34 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +106 +98 +91 +86 +79 +74 +69 +66 +60 +57 +53 +49 +46 +44 +40 +39 +36 +33 +31 +29 +27 +26 +24 +23 +21 +20 +18 +18 +16 +16 +15 +14 +13 +12 +11 +11 +10 +-30 +-108 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-112 +-105 +25 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +112 +104 +97 +90 +85 +79 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-117 +-109 +-102 +-94 +-88 +-81 +-75 +-70 +-65 +-61 +-56 +-52 +-48 +-45 +-41 +-39 +-36 +-33 +-30 +-29 +-26 +-24 +-22 +-20 +-18 +-17 +-16 +-14 +-13 +-12 +-11 +-10 +-9 +-8 +-7 +-7 +114 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +117 +109 +101 +95 +88 +30 +-55 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-116 +-108 +-101 +-93 +35 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +113 +106 +99 +91 +86 +80 +74 +69 +65 +61 +57 +53 +50 +46 +44 +40 +38 +36 +33 +31 +30 +27 +26 +25 +23 +21 +20 +18 +18 +17 +16 +14 +14 +13 +13 +12 +12 +11 +-30 +-109 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-111 +-103 +-95 +-88 +-82 +-77 +-72 +-67 +-61 +-57 +-53 +-49 +-45 +-42 +-39 +-36 +-33 +-31 +-28 +-27 +-24 +-22 +-20 +-19 +-17 +-16 +-15 +-13 +-12 +-12 +-10 +-10 +-9 +-8 +114 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +116 +109 +101 +94 +88 +30 +-54 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-117 +-108 +-100 +-93 +34 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +104 +98 +91 +84 +79 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-117 +-109 +-101 +-94 +34 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +105 +98 +92 +85 +80 +75 +69 +65 +61 +57 +52 +49 +46 +44 +41 +38 +35 +33 +31 +29 +27 +26 +23 +23 +21 +20 +19 +18 +16 +16 +15 +15 +14 +13 +12 +12 +10 +-30 +-109 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-111 +-103 +-96 +-89 +-83 +-77 +-72 +-67 +-61 +-57 +-53 +-49 +-44 +-42 +-39 +-36 +-33 +-32 +-29 +-27 +-26 +-22 +-20 +-19 +-17 +-16 +-15 +-13 +-12 +-12 +-10 +-10 +-9 +-8 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +116 +108 +101 +95 +89 +83 +77 +72 +67 +63 +59 +55 +51 +48 +44 +42 +39 +37 +34 +33 +31 +29 +27 +26 +24 +23 +21 +20 +19 +17 +17 +16 +15 +15 +13 +13 +12 +-29 +-108 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-111 +-103 +-95 +-88 +-82 +-77 +-71 +-67 +-63 +-57 +-53 +-50 +-46 +-42 +-39 +-36 +-33 +-31 +-28 +-26 +-24 +-23 +-20 +-19 +-17 +-16 +-14 +-14 +-12 +-12 +-11 +-10 +-9 +-8 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +115 +108 +100 +94 +88 +82 +76 +71 +66 +62 +58 +55 +50 +47 +44 +41 +39 +37 +33 +32 +30 +27 +26 +25 +23 +22 +21 +20 +19 +18 +16 +16 +14 +14 +13 +13 +12 +-30 +-109 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-111 +-103 +-95 +-88 +-82 +-77 +-72 +-67 +-61 +-57 +-53 +-49 +-45 +-42 +-39 +-36 +-33 +-31 +-28 +-27 +-24 +-22 +-21 +-20 +-18 +-17 +-15 +-13 +-13 +-12 +-10 +-10 +-8 +-8 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +115 +109 +100 +93 +88 +30 +-55 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-116 +-108 +-101 +-93 +35 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +113 +105 +98 +91 +86 +79 +75 +70 +66 +61 +58 +53 +50 +46 +43 +40 +39 +36 +33 +30 +29 +28 +27 +25 +23 +22 +21 +19 +18 +17 +16 +16 +15 +14 +14 +12 +12 +11 +-29 +-108 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-110 +-103 +25 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +102 +96 +89 +84 +77 +20 +-64 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-110 +-102 +-96 +-89 +-82 +-76 +-72 +-66 +-62 +-58 +-53 +-48 +-46 +-42 +-39 +-36 +-33 +-30 +-29 +-26 +-24 +-23 +-21 +-18 +-18 +-16 +-14 +-13 +-12 +-11 +-10 +-9 +-8 +-6 +-6 +115 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +117 +109 +102 +95 +88 +31 +-54 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-116 +-108 +-100 +-94 +34 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +105 +99 +92 +86 +80 +75 +70 +65 +61 +57 +53 +50 +47 +43 +41 +39 +35 +33 +31 +29 +27 +26 +24 +23 +21 +20 +19 +18 +17 +16 +15 +14 +13 +12 +12 +11 +10 +-30 +-109 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-111 +-103 +-95 +-88 +-82 +-76 +-71 +-66 +-61 +-57 +-52 +-49 +-45 +-42 +-38 +-35 +-32 +-30 +-28 +-26 +-24 +-22 +-20 +-19 +-17 +-15 +-14 +-13 +-12 +-12 +-10 +-9 +-8 +-7 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +116 +108 +100 +94 +88 +30 +-54 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-116 +-108 +-101 +-93 +34 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +104 +98 +92 +85 +79 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-116 +-108 +-100 +-93 +34 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +113 +104 +98 +91 +85 +79 +74 +69 +64 +60 +57 +52 +48 +45 +43 +39 +38 +35 +33 +31 +29 +27 +26 +23 +22 +21 +20 +19 +18 +16 +16 +14 +14 +13 +12 +11 +11 +10 +-30 +-109 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-111 +-103 +25 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +111 +102 +96 +90 +85 +78 +20 +-64 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-110 +-102 +-95 +-87 +-81 +-75 +-70 +-65 +-61 +-57 +-52 +-48 +-45 +-41 +-39 +-36 +-33 +-30 +-28 +-26 +-24 +-22 +-20 +-18 +-17 +-15 +-14 +-13 +-12 +-11 +-10 +-9 +-8 +-8 +-7 +114 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +116 +109 +101 +94 +88 +82 +76 +72 +67 +63 +59 +56 +51 +48 +45 +42 +39 +37 +35 +32 +30 +28 +27 +26 +23 +22 +20 +19 +18 +18 +16 +16 +15 +14 +14 +13 +12 +-28 +-107 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-110 +-103 +25 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +103 +95 +89 +84 +78 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-110 +-102 +-94 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +105 +98 +92 +86 +79 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-109 +-101 +-95 +-87 +-81 +-76 +-71 +-65 +-61 +-57 +-52 +-48 +-45 +-41 +-38 +-36 +-33 +-30 +-28 +-26 +-24 +-22 +-20 +-18 +-17 +-15 +-14 +-13 +-12 +-10 +-10 +-9 +-8 +-7 +-6 +115 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +116 +108 +102 +95 +88 +31 +-54 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-116 +-107 +-99 +-93 +34 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +113 +105 +98 +91 +85 +79 +74 +69 +64 +60 +56 +52 +49 +45 +42 +40 +37 +34 +33 +30 +28 +27 +25 +23 +22 +21 +19 +19 +17 +16 +15 +13 +13 +12 +11 +11 +11 +10 +-31 +-109 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-111 +-103 +-95 +-89 +-82 +-77 +-71 +-66 +-61 +-57 +-53 +-49 +-45 +-42 +-38 +-36 +-33 +-30 +-28 +-26 +-24 +-22 +-20 +-19 +-17 +-16 +-15 +-13 +-12 +-12 +-10 +-10 +-8 +-8 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +116 +109 +102 +96 +89 +32 +-53 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-116 +-107 +-100 +-93 +34 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +105 +98 +91 +85 +79 +74 +69 +64 +60 +56 +52 +49 +46 +43 +40 +37 +35 +33 +31 +29 +26 +25 +24 +22 +21 +20 +18 +17 +16 +15 +14 +14 +12 +12 +12 +10 +10 +-30 +-108 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-112 +-102 +26 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +110 +103 +96 +90 +84 +79 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-111 +-103 +-95 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +104 +98 +91 +84 +78 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-116 +-108 +-101 +-94 +34 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +114 +106 +99 +92 +86 +80 +23 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-118 +-109 +-101 +-94 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +113 +105 +98 +91 +85 +80 +24 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-110 +-101 +-95 +32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +112 +104 +97 +90 +84 +79 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-109 +-101 +-94 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +105 +99 +91 +85 +80 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-117 +-109 +-101 +-94 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +105 +98 +90 +85 +79 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-118 +-109 +-101 +-94 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +113 +105 +97 +91 +86 +79 +23 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-117 +-109 +-101 +-94 +-87 +-81 +-76 +-70 +-65 +-61 +-56 +-52 +-48 +-44 +-41 +-39 +-35 +-32 +-30 +-28 +-25 +-24 +-22 +-20 +-19 +-17 +-15 +-15 +-13 +-12 +-11 +-10 +-9 +-9 +-7 +-7 +114 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +116 +109 +101 +94 +88 +30 +-55 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-108 +-100 +-94 +34 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +114 +106 +99 +91 +86 +81 +23 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-109 +-100 +-94 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +104 +97 +90 +85 +78 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-110 +-101 +-95 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +113 +104 +97 +91 +86 +80 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-117 +-109 +-101 +-94 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +104 +97 +91 +85 +79 +74 +69 +64 +59 +56 +52 +48 +46 +43 +39 +37 +35 +32 +31 +29 +27 +26 +24 +22 +21 +20 +18 +17 +16 +15 +15 +14 +13 +13 +12 +11 +10 +-31 +-109 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-111 +-103 +26 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +103 +96 +89 +84 +78 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-110 +-101 +-95 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +113 +105 +97 +91 +85 +78 +23 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-117 +-109 +-101 +-94 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +106 +98 +91 +85 +80 +23 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-116 +-108 +-101 +-93 +-86 +-80 +-75 +-70 +-64 +-61 +-56 +-51 +-47 +-43 +-40 +-38 +-35 +-32 +-30 +-27 +-25 +-23 +-22 +-20 +-18 +-16 +-15 +-14 +-12 +-11 +-11 +-10 +-9 +-8 +-7 +-6 +114 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +116 +107 +101 +95 +88 +30 +-55 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-117 +-108 +-100 +-93 +34 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +105 +98 +91 +86 +80 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-109 +-101 +-94 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +113 +105 +98 +91 +85 +80 +23 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-109 +-101 +-95 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +105 +97 +91 +85 +80 +23 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-109 +-101 +-95 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +113 +105 +98 +91 +85 +79 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-117 +-110 +-101 +-94 +32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +104 +98 +90 +85 +79 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-109 +-101 +-94 +34 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +106 +99 +92 +87 +81 +23 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-117 +-110 +-102 +-94 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +111 +104 +97 +90 +84 +79 +74 +69 +65 +60 +56 +51 +49 +46 +43 +40 +37 +34 +33 +30 +29 +27 +25 +23 +23 +21 +20 +18 +17 +16 +16 +14 +14 +13 +13 +12 +12 +10 +-31 +-109 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-111 +-103 +25 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +110 +102 +96 +90 +83 +77 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-109 +-102 +-95 +-88 +-82 +-76 +-70 +-65 +-61 +-56 +-52 +-48 +-45 +-41 +-39 +-35 +-33 +-31 +-28 +-26 +-24 +-22 +-21 +-19 +-17 +-16 +-15 +-12 +-11 +-10 +-10 +-9 +-8 +-7 +-6 +114 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +117 +109 +102 +96 +89 +31 +-54 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-107 +-99 +-92 +35 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +104 +97 +91 +85 +79 +74 +70 +66 +61 +57 +53 +49 +46 +43 +40 +37 +35 +33 +30 +29 +27 +25 +23 +22 +21 +20 +18 +17 +16 +15 +13 +13 +12 +12 +11 +11 +10 +-30 +-109 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-111 +-104 +24 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +111 +103 +97 +90 +84 +78 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-110 +-101 +-94 +-88 +-81 +-75 +-70 +-65 +-61 +-56 +-53 +-48 +-44 +-41 +-38 +-35 +-33 +-30 +-28 +-26 +-24 +-21 +-20 +-18 +-17 +-16 +-15 +-12 +-12 +-11 +-10 +-9 +-9 +-7 +-7 +114 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +117 +109 +101 +96 +89 +30 +-55 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-116 +-108 +-100 +-93 +34 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +104 +98 +91 +84 +78 +74 +68 +64 +60 +56 +52 +49 +46 +42 +39 +37 +33 +33 +31 +29 +27 +26 +23 +22 +21 +19 +18 +17 +16 +16 +15 +14 +13 +12 +11 +11 +10 +-31 +-109 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-110 +-103 +-95 +-89 +-82 +-76 +-71 +-67 +-62 +-57 +-53 +-49 +-45 +-42 +-38 +-36 +-33 +-31 +-28 +-27 +-24 +-22 +-21 +-20 +-17 +-16 +-15 +-13 +-12 +-12 +-11 +-10 +-9 +-8 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +116 +109 +101 +95 +88 +30 +-54 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-116 +-108 +-100 +-93 +34 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +113 +105 +98 +91 +86 +80 +23 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-117 +-109 +-101 +-95 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +105 +98 +91 +85 +79 +74 +69 +64 +59 +56 +53 +49 +46 +43 +40 +37 +34 +32 +30 +29 +27 +25 +24 +22 +20 +19 +18 +18 +16 +15 +14 +13 +12 +12 +11 +11 +11 +-31 +-110 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-110 +-103 +-95 +-88 +-82 +-77 +-71 +-67 +-61 +-57 +-52 +-49 +-45 +-42 +-39 +-36 +-33 +-30 +-28 +-25 +-23 +-22 +-20 +-19 +-17 +-15 +-14 +-13 +-11 +-10 +-9 +-9 +-8 +-7 +115 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +115 +108 +101 +94 +88 +83 +77 +72 +67 +62 +58 +54 +51 +48 +45 +42 +38 +36 +34 +31 +29 +28 +26 +25 +23 +21 +20 +19 +17 +17 +16 +15 +14 +13 +12 +12 +11 +-29 +-108 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-110 +-103 +-95 +-88 +-81 +-76 +-70 +-66 +-62 +-57 +-52 +-49 +-45 +-42 +-39 +-36 +-33 +-31 +-28 +-26 +-24 +-22 +-21 +-19 +-17 +-16 +-15 +-14 +-12 +-12 +-10 +-10 +-9 +-8 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +116 +107 +100 +95 +88 +82 +77 +71 +67 +62 +58 +55 +51 +48 +45 +41 +39 +37 +34 +32 +30 +28 +27 +25 +23 +22 +21 +19 +18 +17 +17 +16 +14 +14 +13 +12 +12 +-29 +-108 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-110 +-103 +-95 +-89 +-81 +-76 +-71 +-66 +-61 +-56 +-52 +-49 +-45 +-42 +-39 +-36 +-33 +-31 +-28 +-27 +-24 +-22 +-21 +-19 +-17 +-16 +-14 +-13 +-12 +-11 +-10 +-10 +-8 +-8 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +116 +109 +102 +95 +88 +30 +-54 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-116 +-108 +-100 +-93 +35 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +113 +105 +97 +91 +85 +79 +73 +69 +65 +60 +56 +53 +49 +46 +44 +40 +37 +35 +33 +30 +28 +26 +25 +24 +23 +21 +20 +18 +18 +16 +15 +14 +14 +13 +12 +11 +11 +10 +-30 +-109 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-111 +-103 +24 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +103 +97 +89 +83 +78 +20 +-64 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-110 +-101 +-94 +-87 +-82 +-76 +-70 +-65 +-60 +-56 +-52 +-48 +-45 +-41 +-38 +-35 +-32 +-30 +-28 +-25 +-24 +-22 +-20 +-19 +-17 +-16 +-14 +-13 +-12 +-11 +-10 +-9 +-9 +-7 +-7 +114 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +116 +109 +101 +94 +88 +31 +-54 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-116 +-108 +-100 +-93 +34 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +112 +104 +98 +91 +85 +80 +74 +69 +65 +61 +57 +52 +49 +46 +43 +41 +38 +35 +33 +31 +29 +27 +26 +24 +22 +21 +20 +19 +18 +16 +16 +15 +14 +13 +13 +12 +12 +11 +-30 +-108 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-110 +-103 +-95 +-88 +-82 +-77 +-71 +-66 +-61 +-56 +-52 +-49 +-45 +-42 +-39 +-35 +-32 +-30 +-27 +-26 +-24 +-22 +-20 +-19 +-17 +-16 +-14 +-13 +-12 +-12 +-10 +-9 +-8 +-7 +114 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +116 +108 +100 +95 +88 +30 +-55 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-116 +-108 +-100 +-94 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +104 +97 +90 +85 +79 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-117 +-110 +-101 +-94 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +105 +99 +92 +86 +80 +75 +70 +65 +61 +57 +53 +50 +47 +44 +41 +38 +35 +34 +32 +30 +28 +26 +24 +23 +21 +20 +19 +18 +17 +16 +15 +14 +14 +13 +12 +12 +11 +-29 +-108 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-110 +-103 +25 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +103 +97 +90 +84 +77 +19 +-64 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-110 +-101 +-94 +-87 +-82 +-75 +-70 +-66 +-61 +-56 +-52 +-49 +-45 +-42 +-39 +-36 +-33 +-31 +-28 +-26 +-24 +-22 +-21 +-19 +-18 +-16 +-15 +-13 +-12 +-11 +-10 +-9 +-9 +-8 +-7 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +116 +109 +101 +95 +89 +83 +77 +72 +67 +63 +59 +55 +51 +48 +45 +43 +40 +37 +35 +33 +30 +29 +27 +25 +24 +23 +20 +20 +19 +18 +17 +16 +14 +14 +13 +13 +12 +-29 +-107 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-110 +-103 +26 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +103 +97 +90 +84 +78 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-110 +-102 +-96 +32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +113 +105 +97 +91 +85 +79 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-108 +-101 +-94 +-87 +-80 +-75 +-70 +-65 +-61 +-55 +-51 +-48 +-46 +-41 +-38 +-35 +-32 +-30 +-28 +-25 +-23 +-22 +-20 +-19 +-17 +-15 +-14 +-13 +-13 +-11 +-11 +-9 +-8 +-7 +-7 +114 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +116 +109 +101 +95 +89 +31 +-54 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-107 +-99 +-92 +35 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +113 +105 +97 +91 +85 +79 +74 +69 +64 +60 +56 +53 +50 +45 +43 +40 +38 +35 +33 +31 +29 +27 +25 +24 +23 +21 +20 +18 +18 +16 +16 +15 +14 +13 +13 +11 +10 +11 +-30 +-108 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-111 +-102 +-95 +-88 +-82 +-77 +-72 +-67 +-61 +-56 +-52 +-49 +-45 +-42 +-39 +-36 +-33 +-31 +-28 +-27 +-25 +-22 +-21 +-19 +-17 +-17 +-15 +-14 +-13 +-12 +-11 +-10 +-9 +-8 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +115 +108 +101 +94 +88 +31 +-54 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-116 +-108 +-100 +-94 +34 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +113 +106 +99 +92 +86 +80 +75 +70 +66 +62 +58 +54 +50 +46 +45 +42 +39 +36 +33 +31 +30 +27 +26 +24 +23 +21 +20 +18 +18 +16 +16 +14 +13 +13 +12 +11 +11 +10 +-30 +-109 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-111 +-104 +25 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +103 +97 +90 +84 +79 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-111 +-102 +-94 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +113 +105 +98 +91 +86 +80 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-109 +-100 +-94 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +113 +104 +98 +91 +86 +80 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-117 +-110 +-101 +-95 +32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +103 +97 +90 +84 +78 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-109 +-101 +-95 +32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +114 +106 +98 +92 +87 +81 +23 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-109 +-101 +-94 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +113 +105 +97 +91 +85 +78 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-109 +-101 +-95 +32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +105 +99 +92 +86 +80 +23 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-109 +-101 +-94 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +113 +105 +97 +91 +86 +79 +23 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-110 +-102 +-95 +-88 +-82 +-75 +-71 +-66 +-61 +-56 +-53 +-48 +-45 +-42 +-39 +-36 +-34 +-30 +-28 +-26 +-24 +-22 +-21 +-19 +-18 +-16 +-15 +-13 +-13 +-12 +-11 +-10 +-10 +-9 +-7 +114 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +117 +109 +101 +95 +89 +31 +-54 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-107 +-99 +-92 +35 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +104 +98 +91 +85 +79 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-110 +-102 +-95 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +112 +105 +98 +91 +85 +80 +23 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-109 +-100 +-94 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +105 +98 +92 +85 +79 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-117 +-110 +-101 +-94 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +111 +104 +97 +90 +85 +79 +74 +69 +64 +60 +56 +52 +49 +45 +43 +40 +38 +35 +33 +31 +29 +27 +26 +24 +23 +22 +20 +18 +17 +16 +15 +14 +14 +13 +12 +11 +11 +10 +-31 +-109 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-110 +-102 +25 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +103 +96 +90 +84 +78 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-109 +-101 +-94 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +104 +98 +91 +85 +79 +23 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-110 +-102 +-95 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +105 +98 +91 +86 +80 +23 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-109 +-101 +-94 +-87 +-81 +-75 +-70 +-65 +-60 +-56 +-52 +-48 +-45 +-41 +-38 +-35 +-32 +-30 +-27 +-25 +-24 +-22 +-20 +-19 +-17 +-16 +-15 +-13 +-12 +-12 +-11 +-10 +-9 +-8 +-7 +114 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +116 +109 +101 +95 +87 +30 +-55 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-116 +-107 +-100 +-93 +35 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +104 +98 +91 +85 +79 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-109 +-101 +-94 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +104 +97 +91 +85 +78 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-117 +-109 +-101 +-94 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +105 +99 +92 +86 +80 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-109 +-101 +-94 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +104 +98 +91 +85 +79 +23 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-109 +-102 +-94 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +104 +97 +90 +85 +79 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-110 +-102 +-94 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +105 +98 +91 +85 +80 +23 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-109 +-101 +-94 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +112 +104 +97 +91 +85 +79 +74 +69 +64 +60 +56 +52 +49 +46 +42 +40 +38 +34 +33 +30 +28 +26 +25 +23 +22 +21 +20 +18 +18 +16 +16 +15 +14 +13 +13 +12 +12 +10 +-30 +-109 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-111 +-103 +25 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +112 +104 +96 +91 +85 +79 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-110 +-103 +-95 +-87 +-82 +-76 +-70 +-65 +-61 +-56 +-51 +-48 +-44 +-41 +-39 +-35 +-33 +-30 +-28 +-25 +-24 +-22 +-20 +-18 +-16 +-15 +-15 +-13 +-12 +-11 +-10 +-8 +-8 +-6 +-6 +115 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +116 +109 +101 +95 +88 +31 +-54 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-116 +-108 +-100 +-93 +34 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +113 +104 +98 +92 +86 +80 +75 +70 +66 +61 +57 +53 +50 +46 +44 +41 +38 +36 +33 +31 +29 +28 +26 +24 +23 +22 +20 +19 +19 +17 +16 +15 +14 +12 +13 +13 +12 +12 +-29 +-107 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-110 +-102 +25 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +103 +96 +90 +84 +77 +20 +-64 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-109 +-101 +-95 +-88 +-81 +-76 +-71 +-65 +-61 +-56 +-52 +-48 +-45 +-41 +-38 +-36 +-33 +-30 +-28 +-25 +-23 +-22 +-20 +-18 +-17 +-15 +-14 +-13 +-12 +-11 +-11 +-9 +-9 +-7 +-7 +114 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +117 +109 +101 +95 +88 +30 +-54 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-117 +-108 +-100 +-93 +34 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +113 +105 +98 +91 +86 +80 +74 +69 +65 +59 +56 +53 +49 +46 +43 +40 +38 +35 +33 +31 +29 +27 +26 +24 +22 +22 +21 +19 +18 +16 +15 +15 +15 +13 +13 +12 +11 +11 +-30 +-109 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-111 +-103 +-96 +-88 +-82 +-77 +-71 +-66 +-61 +-57 +-52 +-48 +-45 +-42 +-38 +-37 +-33 +-31 +-29 +-26 +-24 +-23 +-21 +-20 +-18 +-16 +-14 +-14 +-12 +-11 +-11 +-10 +-9 +-8 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +116 +109 +101 +94 +87 +29 +-56 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-117 +-109 +-101 +-94 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +105 +99 +92 +86 +80 +23 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-117 +-109 +-101 +-94 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +113 +105 +98 +91 +85 +80 +74 +69 +64 +60 +57 +54 +50 +46 +43 +40 +38 +35 +33 +31 +30 +27 +26 +24 +23 +21 +19 +17 +18 +17 +17 +16 +15 +14 +13 +12 +12 +11 +-30 +-109 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-110 +-102 +-95 +-88 +-81 +-77 +-71 +-66 +-62 +-57 +-52 +-49 +-45 +-41 +-39 +-36 +-33 +-31 +-28 +-27 +-25 +-22 +-20 +-19 +-17 +-16 +-15 +-14 +-12 +-12 +-10 +-10 +-9 +-8 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +115 +107 +100 +95 +88 +82 +76 +71 +67 +62 +58 +55 +51 +47 +44 +42 +39 +37 +35 +33 +30 +28 +27 +25 +23 +22 +21 +20 +19 +18 +16 +16 +15 +14 +14 +13 +12 +-28 +-106 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-111 +-103 +-96 +-89 +-82 +-77 +-72 +-66 +-61 +-58 +-53 +-48 +-45 +-43 +-39 +-36 +-33 +-31 +-29 +-27 +-24 +-22 +-20 +-19 +-18 +-16 +-14 +-14 +-13 +-11 +-10 +-10 +-9 +-8 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +116 +109 +101 +94 +88 +83 +76 +71 +66 +63 +58 +56 +51 +47 +44 +42 +39 +37 +35 +32 +31 +29 +26 +25 +23 +23 +21 +20 +19 +18 +17 +16 +14 +14 +13 +13 +12 +-29 +-108 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-110 +-103 +-95 +-88 +-82 +-77 +-71 +-66 +-61 +-57 +-53 +-49 +-45 +-43 +-39 +-36 +-33 +-31 +-29 +-27 +-25 +-23 +-22 +-19 +-17 +-17 +-15 +-14 +-13 +-12 +-11 +-11 +-9 +-8 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +116 +108 +101 +94 +87 +30 +-55 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-115 +-107 +-99 +-93 +35 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +114 +106 +99 +92 +86 +79 +75 +70 +65 +61 +57 +53 +50 +47 +44 +41 +39 +36 +34 +31 +29 +27 +27 +25 +23 +21 +20 +18 +18 +17 +17 +16 +15 +14 +13 +12 +12 +11 +-30 +-109 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-111 +-103 +25 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +111 +103 +97 +90 +84 +78 +20 +-64 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-117 +-110 +-101 +-94 +-87 +-81 +-75 +-70 +-65 +-60 +-55 +-52 +-48 +-44 +-41 +-38 +-35 +-33 +-31 +-28 +-25 +-24 +-22 +-20 +-19 +-17 +-15 +-15 +-13 +-12 +-11 +-10 +-9 +-8 +-7 +-7 +114 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +117 +109 +101 +94 +88 +30 +-55 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-116 +-108 +-100 +-93 +35 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +105 +99 +92 +85 +80 +75 +70 +65 +61 +57 +53 +50 +46 +44 +41 +38 +35 +33 +31 +29 +27 +26 +24 +23 +22 +20 +19 +18 +16 +16 +15 +14 +13 +13 +11 +12 +11 +-30 +-109 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-111 +-103 +-96 +-89 +-82 +-77 +-72 +-67 +-62 +-57 +-53 +-49 +-45 +-43 +-39 +-35 +-33 +-31 +-28 +-26 +-24 +-23 +-21 +-19 +-17 +-17 +-15 +-14 +-12 +-11 +-9 +-9 +-8 +-8 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +115 +108 +101 +95 +88 +30 +-54 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-116 +-108 +-100 +-93 +34 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +105 +98 +91 +86 +80 +23 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-108 +-101 +-94 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +113 +104 +98 +91 +85 +78 +74 +69 +65 +60 +56 +52 +49 +46 +44 +40 +38 +35 +33 +31 +29 +27 +25 +24 +23 +22 +20 +19 +18 +16 +16 +14 +13 +13 +12 +11 +11 +10 +-30 +-108 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-111 +-102 +25 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +111 +103 +95 +89 +84 +79 +20 +-64 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-111 +-103 +-96 +-88 +-82 +-76 +-71 +-66 +-61 +-57 +-53 +-49 +-45 +-41 +-38 +-35 +-33 +-31 +-29 +-26 +-24 +-22 +-21 +-20 +-18 +-16 +-15 +-13 +-13 +-11 +-10 +-9 +-8 +-8 +-7 +114 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +117 +110 +101 +95 +89 +83 +76 +72 +68 +63 +58 +55 +52 +48 +45 +42 +39 +36 +35 +33 +30 +29 +26 +25 +24 +22 +21 +20 +18 +18 +16 +16 +15 +14 +13 +13 +12 +-28 +-107 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-111 +-104 +24 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 diff --git a/traces/lf_t5577_fdx_animal.pm3 b/traces/lf_t5577_fdx_animal.pm3 new file mode 100644 index 000000000..8310ccff7 --- /dev/null +++ b/traces/lf_t5577_fdx_animal.pm3 @@ -0,0 +1,10000 @@ +122 +114 +106 +99 +91 +86 +80 +75 +68 +64 +60 +4 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-115 +-107 +-100 +28 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +116 +109 +102 +95 +88 +82 +76 +20 +-64 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-112 +-104 +-97 +30 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +117 +109 +101 +94 +87 +82 +76 +20 +-64 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-113 +-105 +-98 +29 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +66 +-22 +-100 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-109 +111 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +120 +26 +-57 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +98 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +116 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +97 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +114 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +122 +114 +105 +99 +92 +85 +79 +74 +68 +63 +59 +5 +-77 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +54 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +100 +8 +-73 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +92 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +114 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +114 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-112 +-104 +-97 +-90 +-84 +43 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +119 +111 +104 +97 +89 +84 +77 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +61 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +103 +11 +-71 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +92 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +114 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-113 +-105 +-98 +-91 +-85 +42 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +69 +-19 +-98 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-107 +113 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +120 +26 +-57 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +97 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +122 +114 +105 +98 +92 +85 +79 +73 +68 +64 +59 +4 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +54 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +101 +9 +-73 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-114 +-105 +-99 +-92 +-86 +41 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +69 +-19 +-98 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-108 +113 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +121 +27 +-57 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +98 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +123 +115 +106 +99 +92 +86 +79 +74 +69 +64 +60 +6 +-77 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-114 +-106 +-99 +28 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +117 +108 +101 +94 +87 +81 +75 +20 +-64 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +60 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +103 +11 +-71 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-114 +-106 +-99 +-92 +-85 +41 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +119 +111 +103 +96 +89 +83 +77 +22 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-112 +-104 +-96 +30 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +66 +-21 +-100 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-108 +113 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +121 +27 +-57 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +97 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +114 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +114 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +121 +113 +106 +99 +92 +86 +80 +74 +69 +64 +60 +5 +-77 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +54 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +100 +8 +-73 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +92 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +114 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +116 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +114 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +114 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +97 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +116 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +116 +23 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +95 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +114 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-112 +-104 +-98 +-90 +-85 +42 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +69 +-19 +-98 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-107 +113 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +121 +27 +-57 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +98 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +116 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +114 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +116 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +114 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +114 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +114 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +122 +114 +106 +99 +92 +86 +79 +74 +69 +64 +60 +5 +-77 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +55 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +101 +9 +-73 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +91 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +114 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +116 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +116 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +114 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-112 +-104 +-97 +-90 +-83 +42 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +119 +111 +104 +97 +89 +84 +78 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +60 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +103 +11 +-72 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +92 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +114 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-112 +-105 +-98 +-90 +-85 +41 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +69 +-19 +-98 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-108 +112 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +117 +109 +102 +94 +88 +81 +76 +71 +66 +62 +7 +-76 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-114 +-105 +-98 +29 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +65 +-22 +-101 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-109 +112 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +117 +109 +102 +94 +88 +81 +76 +71 +66 +61 +6 +-77 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +55 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +102 +9 +-72 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-115 +-106 +-99 +-92 +-86 +41 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +118 +110 +103 +96 +89 +83 +78 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +60 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +104 +11 +-71 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-113 +-105 +-98 +-91 +-84 +42 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +119 +111 +103 +96 +90 +84 +77 +22 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +60 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +102 +10 +-72 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-114 +-106 +-99 +-93 +-86 +41 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +118 +111 +104 +97 +89 +83 +77 +22 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-112 +-104 +-97 +30 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +66 +-21 +-100 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-108 +113 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +120 +26 +-57 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +97 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +122 +114 +105 +98 +91 +85 +78 +74 +69 +63 +59 +4 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +54 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +100 +8 +-74 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +92 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +114 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-112 +-103 +-97 +-91 +-85 +42 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +69 +-18 +-97 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-107 +114 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +120 +26 +-58 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +98 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +116 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +121 +113 +105 +98 +92 +85 +79 +74 +68 +64 +60 +5 +-77 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-114 +-107 +-99 +28 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +117 +108 +100 +94 +87 +81 +76 +20 +-64 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-111 +-104 +-97 +30 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +66 +-22 +-100 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-110 +111 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +119 +25 +-58 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +98 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +122 +115 +106 +99 +92 +86 +80 +75 +69 +65 +60 +5 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-113 +-105 +-97 +30 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +117 +109 +101 +94 +88 +81 +76 +20 +-64 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-112 +-105 +-98 +30 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +117 +109 +101 +95 +88 +82 +76 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-112 +-104 +-97 +29 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +65 +-23 +-101 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-109 +112 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +121 +27 +-57 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +98 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +116 +23 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +97 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +114 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +114 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +114 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +121 +113 +105 +98 +90 +84 +79 +74 +69 +63 +59 +4 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +54 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +101 +9 +-73 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +92 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +114 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +114 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +114 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-112 +-105 +-98 +-91 +-85 +42 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +120 +112 +103 +97 +91 +85 +78 +23 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +61 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +103 +11 +-71 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +92 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +114 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +94 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-112 +-105 +-98 +-90 +-84 +43 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +70 +-18 +-97 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-107 +114 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +120 +26 +-57 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +98 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +122 +113 +106 +99 +91 +85 +80 +75 +69 +64 +59 +5 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +55 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +100 +9 +-73 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-115 +-106 +-99 +-93 +-86 +41 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +69 +-19 +-98 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-107 +113 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +121 +26 +-57 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +97 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +122 +114 +106 +99 +92 +86 +80 +74 +69 +64 +60 +5 +-77 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-114 +-106 +-99 +28 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +116 +108 +101 +94 +87 +82 +76 +20 +-64 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +60 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +103 +11 +-71 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-115 +-106 +-99 +-92 +-86 +41 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +118 +111 +103 +96 +89 +83 +77 +22 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-112 +-103 +-97 +30 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +66 +-22 +-100 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-108 +112 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +120 +26 +-57 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +98 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +114 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +116 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +97 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +94 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +122 +114 +105 +99 +91 +85 +79 +74 +69 +65 +59 +4 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +55 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +101 +9 +-73 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +91 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +114 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +116 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +114 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +97 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +116 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +114 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-112 +-104 +-97 +-91 +-84 +42 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +68 +-19 +-98 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-107 +113 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +121 +27 +-57 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +97 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +97 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +97 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +114 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +97 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +114 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +122 +114 +105 +98 +92 +86 +79 +74 +69 +64 +60 +6 +-77 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +55 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +103 +10 +-72 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +92 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +113 +19 +-64 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +113 +19 +-64 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +116 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +114 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +114 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +97 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +114 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-112 +-105 +-98 +-91 +-85 +41 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +118 +111 +103 +96 +89 +83 +77 +22 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +60 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +103 +11 +-71 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +92 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +113 +19 +-64 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-112 +-104 +-98 +-90 +-84 +42 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +69 +-19 +-97 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-107 +113 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +118 +109 +102 +95 +89 +82 +77 +71 +67 +63 +8 +-75 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-112 +-105 +-98 +29 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +65 +-22 +-101 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-109 +111 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +116 +108 +101 +94 +87 +81 +76 +70 +66 +61 +6 +-77 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +55 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +101 +9 +-73 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-115 +-106 +-99 +-93 +-86 +41 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +119 +112 +104 +97 +89 +84 +78 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +60 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +103 +11 +-71 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-115 +-106 +-99 +-93 +-87 +40 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +119 +112 +103 +96 +90 +84 +77 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +61 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +103 +10 +-72 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-114 +-106 +-98 +-91 +-85 +41 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +119 +112 +104 +96 +89 +84 +77 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-112 +-104 +-97 +30 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +66 +-22 +-100 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-110 +111 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +120 +26 +-58 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +97 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +116 +23 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +116 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +116 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +121 +113 +105 +98 +91 +85 +79 +74 +68 +64 +60 +5 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +55 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +101 +9 +-73 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +92 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +116 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +113 +20 +-64 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +97 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +116 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-112 +-105 +-98 +-91 +-84 +41 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +69 +-19 +-98 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-106 +114 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +120 +26 +-57 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +98 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +116 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +114 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +97 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +122 +114 +106 +99 +92 +86 +79 +75 +69 +63 +60 +6 +-77 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-106 +-99 +28 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +116 +108 +101 +94 +87 +82 +76 +20 +-64 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-112 +-104 +-97 +30 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +65 +-22 +-101 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-109 +112 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +121 +27 +-57 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +98 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +122 +114 +106 +99 +92 +86 +80 +75 +69 +64 +60 +5 +-77 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-114 +-105 +-98 +29 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +109 +102 +95 +87 +82 +76 +20 +-64 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-113 +-104 +-98 +29 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +117 +109 +102 +95 +88 +82 +77 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-112 +-104 +-97 +29 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +66 +-22 +-100 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-108 +112 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +120 +26 +-57 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +98 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +114 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +121 +112 +105 +98 +90 +84 +78 +73 +67 +63 +59 +4 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +55 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +101 +9 +-73 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +91 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +114 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +114 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +114 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-112 +-104 +-97 +-91 +-84 +42 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +119 +112 +103 +96 +90 +84 +77 +22 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +61 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +103 +11 +-71 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +92 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +114 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-112 +-104 +-97 +-90 +-84 +42 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +69 +-18 +-97 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-107 +113 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +121 +27 +-57 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +98 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +123 +114 +106 +99 +92 +85 +80 +75 +69 +65 +60 +5 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +55 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +101 +9 +-73 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-114 +-106 +-98 +-92 +-86 +41 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +69 +-19 +-98 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-109 +112 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +121 +27 +-57 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +98 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +122 +114 +106 +99 +92 +85 +79 +75 +69 +65 +60 +6 +-77 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-114 +-106 +-99 +28 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +117 +109 +101 +94 +88 +82 +76 +20 +-64 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +60 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +104 +11 +-71 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-114 +-105 +-99 +-91 +-85 +41 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +119 +110 +103 +96 +90 +83 +77 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-112 +-104 +-96 +30 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +66 +-22 +-100 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-109 +112 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +121 +27 +-57 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +98 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +116 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +97 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +114 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +114 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +121 +113 +105 +98 +91 +85 +79 +73 +68 +63 +58 +4 +-79 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +55 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +101 +9 +-73 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +92 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +114 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +21 +-62 +-127 +-127 diff --git a/traces/lf_t5577_fdx_extended.pm3 b/traces/lf_t5577_fdx_extended.pm3 new file mode 100644 index 000000000..ba813d730 --- /dev/null +++ b/traces/lf_t5577_fdx_extended.pm3 @@ -0,0 +1,10000 @@ +-127 +-127 +-127 +-127 +-121 +-112 +-104 +-97 +-90 +-84 +42 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +119 +111 +103 +96 +89 +84 +77 +22 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-112 +-104 +-97 +29 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +117 +110 +102 +95 +88 +82 +77 +20 +-64 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-113 +-104 +-98 +29 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +117 +109 +102 +95 +88 +83 +76 +21 +-64 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-112 +-104 +-97 +30 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +66 +-22 +-100 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-109 +112 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +120 +26 +-58 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +97 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +116 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +114 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +114 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +114 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +97 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +122 +114 +106 +99 +92 +86 +80 +74 +69 +65 +60 +4 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +56 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +100 +8 +-74 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +91 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +112 +19 +-64 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +114 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +97 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +116 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-112 +-104 +-97 +-90 +-84 +42 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +69 +-19 +-98 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-107 +113 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +121 +27 +-57 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +98 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +97 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +122 +114 +106 +98 +92 +85 +79 +74 +69 +64 +60 +5 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-115 +-107 +-99 +28 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +64 +-23 +-101 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-110 +111 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +119 +25 +-59 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +98 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +122 +115 +106 +99 +92 +86 +80 +75 +70 +65 +60 +6 +-77 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-114 +-106 +-99 +29 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +117 +109 +101 +94 +88 +82 +76 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +61 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +104 +11 +-71 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +91 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-112 +-104 +-97 +-90 +-83 +43 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +69 +-19 +-98 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-107 +113 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +117 +108 +101 +94 +88 +81 +76 +71 +66 +61 +7 +-76 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +55 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +102 +9 +-73 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-114 +-106 +-100 +-93 +-86 +41 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +68 +-20 +-99 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-108 +112 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +118 +109 +102 +95 +88 +81 +76 +71 +66 +62 +7 +-76 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +55 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +102 +10 +-72 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-115 +-107 +-100 +-93 +-87 +40 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +119 +111 +104 +96 +89 +83 +78 +22 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +61 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +104 +12 +-70 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-114 +-106 +-99 +-93 +-86 +40 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +118 +111 +103 +96 +89 +83 +77 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +60 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +103 +10 +-72 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +92 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +114 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +116 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-113 +-104 +-97 +-90 +-85 +42 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +69 +-19 +-98 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-108 +113 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +121 +27 +-57 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +98 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +116 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +114 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +114 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +122 +113 +106 +99 +92 +85 +79 +74 +68 +64 +60 +5 +-77 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +54 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +101 +9 +-73 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +91 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +114 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +114 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +114 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +94 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +116 +23 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +97 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +116 +23 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +97 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-112 +-104 +-97 +-91 +-84 +42 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +119 +111 +102 +96 +89 +83 +77 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +61 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +103 +11 +-71 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +91 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +114 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-112 +-105 +-98 +-90 +-84 +41 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +70 +-18 +-97 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-106 +113 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +117 +109 +102 +95 +89 +82 +76 +71 +67 +61 +7 +-76 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-115 +-106 +-98 +29 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +65 +-22 +-101 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-109 +112 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +117 +109 +101 +93 +88 +82 +76 +70 +66 +61 +6 +-76 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +55 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +102 +9 +-72 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-114 +-106 +-99 +-92 +-85 +41 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +119 +110 +103 +96 +89 +83 +78 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +60 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +103 +11 +-71 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-113 +-105 +-99 +-92 +-86 +41 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +119 +111 +103 +95 +89 +83 +77 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +60 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +102 +10 +-72 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-114 +-106 +-99 +-92 +-86 +41 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +119 +111 +103 +96 +89 +83 +77 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-112 +-105 +-97 +30 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +65 +-22 +-100 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-109 +112 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +120 +26 +-58 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +97 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +97 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +97 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +114 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +121 +113 +106 +99 +92 +86 +79 +74 +69 +64 +59 +5 +-77 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +55 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +101 +9 +-73 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +92 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +94 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +114 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +114 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +116 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +114 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-113 +-105 +-98 +-91 +-84 +42 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +69 +-19 +-97 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-107 +113 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +121 +26 +-57 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +99 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +116 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +97 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +121 +113 +105 +98 +91 +85 +78 +74 +68 +64 +60 +5 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-107 +-99 +28 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +117 +109 +102 +95 +88 +82 +76 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-112 +-104 +-97 +30 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +66 +-22 +-100 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-109 +113 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +120 +26 +-58 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +98 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +123 +115 +107 +100 +92 +86 +81 +75 +69 +65 +60 +5 +-77 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-114 +-106 +-100 +28 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +124 +116 +109 +101 +95 +88 +82 +75 +20 +-64 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-113 +-105 +-98 +29 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +117 +109 +102 +95 +87 +82 +77 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-113 +-104 +-97 +29 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +118 +110 +102 +95 +88 +82 +76 +21 +-64 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +59 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +102 +10 +-72 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +92 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +114 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +97 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-112 +-104 +-97 +-90 +-84 +42 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +68 +-20 +-98 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-108 +113 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +121 +27 +-57 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +98 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +116 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +114 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +114 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +114 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +121 +113 +105 +98 +91 +85 +79 +74 +68 +64 +59 +4 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +55 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +102 +10 +-72 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +91 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +114 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +114 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-112 +-104 +-97 +-90 +-85 +42 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +119 +111 +103 +96 +89 +83 +77 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +61 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +104 +11 +-71 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +92 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +114 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-112 +-104 +-98 +-91 +-84 +42 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +119 +111 +103 +97 +90 +84 +77 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-113 +-105 +-98 +29 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +65 +-23 +-101 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-110 +111 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +119 +25 +-58 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +97 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +116 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +97 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +121 +113 +105 +98 +91 +85 +79 +74 +69 +64 +59 +4 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +56 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +102 +10 +-72 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-114 +-106 +-99 +-92 +-86 +41 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +68 +-20 +-98 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-108 +112 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +117 +109 +102 +94 +88 +82 +76 +71 +67 +61 +6 +-77 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +56 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +102 +10 +-72 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-115 +-106 +-99 +-92 +-86 +41 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +67 +-20 +-99 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-107 +113 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +118 +109 +102 +95 +89 +83 +77 +71 +66 +62 +8 +-75 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-114 +-105 +-99 +29 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +66 +-22 +-100 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-109 +111 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +117 +109 +101 +94 +88 +81 +76 +71 +66 +61 +7 +-76 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-115 +-106 +-99 +28 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +65 +-23 +-101 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-109 +111 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +120 +26 +-57 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +97 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +114 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +116 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +97 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +116 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +122 +114 +106 +99 +92 +85 +79 +74 +69 +64 +59 +4 +-79 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +54 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +101 +9 +-73 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +91 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +114 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +97 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +116 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +114 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-112 +-104 +-97 +-90 +-84 +43 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +69 +-19 +-98 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-106 +113 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +121 +27 +-57 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +99 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +95 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +114 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +114 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +114 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +114 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +121 +113 +105 +98 +92 +85 +80 +75 +69 +64 +60 +5 +-77 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-114 +-106 +-99 +28 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +65 +-23 +-101 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-109 +112 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +120 +26 +-58 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +98 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +122 +114 +106 +99 +92 +85 +80 +75 +69 +64 +60 +5 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +55 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +101 +9 +-73 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-114 +-106 +-99 +-92 +-86 +40 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +119 +111 +103 +96 +89 +83 +77 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +61 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +102 +10 +-72 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-114 +-106 +-99 +-92 +-86 +41 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +69 +-19 +-98 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-107 +113 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +117 +109 +102 +94 +88 +83 +77 +71 +66 +61 +7 +-76 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-114 +-106 +-99 +28 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +65 +-22 +-101 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-108 +112 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +117 +109 +101 +93 +88 +82 +76 +70 +66 +61 +6 +-76 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-114 +-106 +-100 +28 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +66 +-22 +-100 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-109 +111 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +117 +108 +101 +94 +88 +82 +77 +71 +66 +61 +7 +-76 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-113 +-106 +-99 +29 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +117 +109 +101 +94 +88 +82 +76 +21 +-64 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +60 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +103 +10 +-72 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +92 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +94 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +114 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +114 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +116 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-112 +-104 +-97 +-90 +-84 +42 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +69 +-19 +-97 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-108 +112 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +120 +26 +-58 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +98 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +116 +23 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +97 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +114 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +114 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +116 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +122 +113 +106 +99 +91 +85 +79 +74 +68 +64 +60 +4 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +55 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +101 +9 +-73 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +91 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +114 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +114 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +97 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-112 +-105 +-98 +-91 +-85 +41 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +117 +110 +103 +96 +88 +83 +77 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-112 +-104 +-97 +30 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +118 +110 +102 +95 +87 +82 +76 +20 +-64 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +60 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +103 +11 +-71 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +92 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-112 +-104 +-96 +-90 +-84 +43 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +120 +112 +103 +97 +90 +84 +78 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-112 +-104 +-97 +30 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +117 +109 +101 +93 +87 +82 +75 +19 +-65 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-111 +-104 +-97 +30 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +117 +109 +101 +95 +88 +83 +76 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-111 +-103 +-96 +30 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +65 +-23 +-101 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-109 +112 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +119 +25 +-58 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +98 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +116 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +97 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +114 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +122 +114 +105 +98 +92 +85 +79 +74 +69 +64 +60 +5 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +55 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +100 +8 +-74 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +91 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +113 +19 +-64 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +116 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +114 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +117 +23 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-112 +-104 +-97 +-90 +-84 +42 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +69 +-19 +-97 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-107 +113 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +121 +27 +-57 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +98 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +122 +114 +106 +98 +92 +86 +79 +74 +69 +64 +60 +5 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-114 +-106 +-99 +28 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +65 +-22 +-101 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-109 +112 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +120 +26 +-58 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +97 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +122 +113 +106 +99 +91 +85 +79 +73 +68 +64 +59 +4 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-114 +-106 +-99 +29 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +117 +110 +102 +95 +88 +82 +76 +20 +-64 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +60 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +103 +11 +-71 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +92 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +114 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +116 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-112 +-104 +-98 +-91 +-84 +42 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +69 +-19 +-98 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-107 +114 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +117 +109 +102 +94 +89 +82 +76 +71 +66 +61 +6 +-76 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +56 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +102 +9 +-73 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-114 +-106 +-99 +-92 +-86 +40 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +68 +-19 +-98 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-107 +113 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +117 +109 +101 +94 +88 +82 +76 +71 +67 +62 +6 +-76 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +56 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +103 +10 +-72 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-114 +-106 +-100 +-93 +-86 +40 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +119 +112 +103 +96 +90 +83 +78 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +61 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +104 +11 +-71 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-114 +-107 +-99 +-92 +-86 +40 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +119 +111 +103 +96 +89 +83 +77 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +60 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +103 +11 +-71 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +93 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +114 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +114 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +96 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +125 +114 +21 +-62 +-127 +-127 +-127 diff --git a/traces/lf_t5577_gallagher.pm3 b/traces/lf_t5577_gallagher.pm3 new file mode 100644 index 000000000..2cac0bde5 --- /dev/null +++ b/traces/lf_t5577_gallagher.pm3 @@ -0,0 +1,10000 @@ +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +103 +11 +-71 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-114 +-106 +-98 +-92 +-86 +40 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +69 +-19 +-98 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-106 +114 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +118 +110 +102 +95 +89 +82 +77 +72 +67 +62 +7 +-75 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-113 +-105 +-97 +30 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +67 +-21 +-99 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-107 +114 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +122 +28 +-56 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +99 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +117 +23 +-60 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +97 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +116 +23 +-60 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +97 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +122 +114 +106 +99 +91 +85 +79 +73 +69 +65 +60 +5 +-77 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +55 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +102 +10 +-72 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +93 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +96 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +116 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +97 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +116 +23 +-60 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +96 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +116 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +97 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +98 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +116 +23 +-60 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +97 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +117 +23 +-60 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +97 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +115 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-112 +-104 +-97 +-90 +-84 +42 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +120 +111 +104 +97 +91 +85 +79 +23 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-111 +-103 +-95 +32 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +119 +111 +103 +96 +90 +84 +77 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-111 +-103 +-96 +31 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +117 +110 +102 +95 +88 +82 +76 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-111 +-103 +-96 +31 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +118 +110 +103 +96 +89 +83 +78 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-110 +-102 +-96 +31 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +67 +-20 +-99 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-107 +113 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +121 +27 +-57 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +99 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +123 +114 +107 +100 +92 +86 +81 +76 +70 +65 +61 +6 +-77 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +56 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +102 +10 +-72 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-113 +-105 +-98 +-91 +-85 +41 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +69 +-19 +-98 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-107 +113 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +121 +27 +-56 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +98 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +116 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +97 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +124 +116 +107 +100 +93 +87 +80 +76 +70 +65 +61 +7 +-76 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +56 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +103 +11 +-71 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-114 +-105 +-98 +-91 +-86 +41 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +119 +112 +104 +96 +90 +84 +77 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-111 +-103 +-96 +31 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +119 +111 +104 +97 +90 +84 +78 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-111 +-103 +-96 +31 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +67 +-21 +-99 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-108 +112 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +125 +118 +110 +102 +95 +89 +82 +77 +72 +67 +62 +8 +-75 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +56 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +104 +11 +-71 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +92 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +114 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-111 +-104 +-96 +-89 +-84 +42 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +121 +112 +104 +98 +91 +85 +78 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +62 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +105 +13 +-70 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-113 +-105 +-98 +-91 +-85 +42 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +119 +111 +103 +96 +90 +84 +78 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-111 +-103 +-96 +31 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +66 +-21 +-100 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-107 +113 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +121 +27 +-57 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +98 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +116 +23 +-60 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +97 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +122 +114 +106 +99 +93 +87 +80 +75 +70 +65 +61 +5 +-77 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-113 +-105 +-98 +29 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +66 +-21 +-100 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-108 +113 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +118 +109 +102 +95 +89 +84 +78 +72 +68 +63 +6 +-76 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +56 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +103 +11 +-71 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-113 +-105 +-98 +-91 +-85 +42 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +119 +111 +103 +97 +89 +83 +77 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-112 +-104 +-97 +31 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +67 +-21 +-99 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-108 +114 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +121 +27 +-57 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +98 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +123 +114 +107 +100 +93 +87 +80 +76 +70 +66 +61 +6 +-77 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +57 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +103 +11 +-71 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-113 +-106 +-98 +-91 +-85 +42 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +119 +112 +103 +96 +89 +84 +78 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-111 +-103 +-96 +31 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +118 +111 +103 +96 +89 +84 +78 +20 +-64 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +62 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +104 +12 +-70 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-113 +-105 +-98 +-91 +-85 +41 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +69 +-18 +-97 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-107 +113 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +118 +110 +102 +95 +89 +83 +77 +72 +67 +62 +5 +-77 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-112 +-104 +-97 +31 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +118 +111 +103 +96 +89 +84 +77 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +61 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +104 +12 +-70 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-113 +-106 +-98 +-91 +-85 +41 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +120 +112 +104 +96 +90 +83 +76 +22 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-111 +-103 +-96 +31 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +67 +-21 +-99 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-107 +113 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +121 +27 +-56 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +99 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +123 +115 +107 +101 +93 +87 +81 +76 +70 +67 +61 +6 +-76 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +56 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +103 +11 +-71 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-113 +-106 +-98 +-91 +-85 +41 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +119 +111 +104 +96 +89 +84 +78 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-110 +-102 +-95 +31 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +118 +111 +102 +96 +89 +84 +78 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +62 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +105 +12 +-70 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-114 +-106 +-99 +-92 +-86 +41 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +69 +-18 +-97 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-107 +113 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +122 +28 +-56 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +100 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +117 +24 +-60 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +98 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +123 +115 +107 +99 +92 +86 +80 +75 +69 +65 +61 +5 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +56 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +102 +9 +-72 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-114 +-106 +-99 +-91 +-85 +41 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +70 +-18 +-97 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-106 +114 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +119 +110 +103 +97 +90 +83 +78 +72 +67 +62 +7 +-75 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-114 +-105 +-98 +30 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +66 +-21 +-100 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-108 +112 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +121 +27 +-57 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +99 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +116 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +97 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +117 +23 +-60 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +97 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +123 +115 +107 +100 +92 +86 +81 +75 +69 +65 +60 +6 +-76 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +55 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +102 +10 +-72 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +93 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +114 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +96 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +116 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +97 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +117 +23 +-60 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +97 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +116 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +97 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +115 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +97 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +116 +23 +-60 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +97 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +116 +23 +-60 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +97 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +116 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-111 +-103 +-97 +-90 +-83 +43 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +120 +112 +104 +97 +90 +84 +78 +23 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-111 +-103 +-97 +31 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +118 +111 +103 +96 +88 +83 +78 +22 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-111 +-104 +-97 +30 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +118 +109 +102 +95 +88 +83 +77 +20 +-64 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-111 +-102 +-96 +31 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +119 +112 +104 +96 +90 +84 +78 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-111 +-103 +-97 +31 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +67 +-21 +-99 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-107 +113 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +121 +27 +-57 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +98 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +123 +114 +107 +100 +93 +87 +81 +75 +70 +66 +60 +6 +-77 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +57 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +101 +9 +-73 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-113 +-105 +-98 +-91 +-84 +42 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +70 +-18 +-97 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-106 +114 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +122 +28 +-56 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +98 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +116 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +97 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +123 +115 +106 +100 +93 +86 +80 +75 +70 +64 +61 +7 +-76 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +55 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +103 +11 +-71 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-113 +-106 +-98 +-91 +-86 +41 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +119 +112 +104 +97 +89 +84 +78 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-111 +-103 +-96 +31 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +119 +111 +103 +97 +90 +84 +77 +23 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-111 +-102 +-96 +31 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +67 +-21 +-99 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-108 +113 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +125 +117 +108 +101 +94 +88 +82 +77 +71 +67 +62 +6 +-76 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +57 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +105 +12 +-70 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +93 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +114 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-111 +-103 +-97 +-89 +-83 +42 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +119 +112 +104 +96 +90 +84 +78 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +61 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +105 +12 +-70 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-112 +-105 +-97 +-91 +-84 +42 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +120 +112 +104 +96 +90 +84 +78 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-111 +-103 +-95 +32 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +67 +-20 +-99 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-107 +114 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +122 +28 +-56 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +99 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +116 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +96 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +123 +115 +106 +99 +93 +86 +80 +75 +70 +65 +61 +6 +-77 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-113 +-105 +-97 +30 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +66 +-21 +-100 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-108 +113 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +118 +110 +103 +95 +89 +83 +77 +71 +67 +62 +6 +-76 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +57 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +103 +11 +-71 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-113 +-106 +-98 +-91 +-85 +41 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +120 +112 +104 +97 +91 +84 +78 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-111 +-102 +-96 +31 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +67 +-21 +-99 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-107 +114 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +121 +27 +-56 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +99 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +123 +115 +107 +100 +92 +86 +80 +75 +70 +65 +61 +6 +-77 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +56 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +102 +10 +-72 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-114 +-106 +-98 +-92 +-85 +41 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +120 +112 +104 +97 +90 +84 +78 +23 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-111 +-104 +-97 +31 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +118 +111 +102 +95 +89 +84 +78 +20 +-64 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +62 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +104 +11 +-71 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-113 +-105 +-98 +-91 +-85 +42 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +69 +-19 +-97 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-106 +114 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +118 +110 +103 +95 +89 +83 +78 +72 +68 +62 +6 +-76 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-113 +-105 +-98 +30 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +118 +110 +102 +95 +89 +83 +77 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +60 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +104 +11 +-71 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-113 +-105 +-98 +-90 +-84 +42 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +120 +112 +104 +98 +91 +84 +78 +23 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-110 +-102 +-96 +31 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +66 +-21 +-100 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-107 +113 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +121 +27 +-56 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +98 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +123 +115 +107 +100 +92 +86 +80 +75 +70 +65 +61 +6 +-76 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +56 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +104 +12 +-70 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-113 +-106 +-98 +-91 +-86 +41 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +119 +112 +104 +96 +89 +85 +79 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-110 +-103 +-96 +31 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +118 +110 +103 +96 +89 +84 +78 +23 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +61 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +104 +12 +-70 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-113 +-105 +-99 +-91 +-85 +42 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +70 +-18 +-97 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-106 +115 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +122 +28 +-56 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +99 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +116 +23 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +96 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +123 +114 +106 +99 +93 +86 +80 +75 +69 +65 +60 +5 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +56 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +103 +10 +-72 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-114 +-106 +-99 +-91 +-84 +42 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +69 +-19 +-98 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-107 +113 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +119 +110 +103 +95 +89 +83 +78 +72 +68 +63 +8 +-75 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-113 +-105 +-99 +29 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +65 +-22 +-100 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-107 +113 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +122 +28 +-56 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +98 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +115 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +96 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +115 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +97 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +124 +116 +107 +100 +93 +87 +80 +76 +70 +66 +60 +7 +-76 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +55 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +102 +10 +-72 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +93 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +96 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +116 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +97 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +117 +23 +-60 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +97 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +116 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +97 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +114 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +97 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +116 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +96 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +115 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +97 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +116 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-110 +-103 +-96 +-89 +-83 +43 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +120 +112 +104 +97 +90 +84 +79 +23 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-111 +-103 +-96 +31 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +118 +111 +103 +96 +90 +83 +77 +22 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-111 +-103 +-97 +31 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +119 +111 +102 +96 +89 +83 +77 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-111 +-103 +-96 +31 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +118 +110 +103 +96 +89 +83 +76 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-111 +-103 +-97 +30 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +66 +-21 +-100 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-108 +112 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +121 +27 +-57 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +98 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +124 +116 +107 +100 +93 +87 +80 +76 +70 +65 +61 +7 +-76 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +57 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +102 +10 +-72 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-113 +-105 +-98 +-91 +-84 +42 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +69 +-19 +-98 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-106 +114 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +121 +27 +-57 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +98 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +116 +23 +-60 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +98 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +123 +114 +106 +100 +94 +86 +81 +75 +70 +64 +60 +6 +-76 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +56 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +103 +11 +-71 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-113 +-105 +-98 +-91 +-85 +41 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +120 +112 +104 +98 +91 +85 +79 +22 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-111 +-103 +-96 +31 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +119 +111 +103 +96 +89 +83 +77 +23 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-110 +-102 +-96 +31 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +66 +-21 +-100 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-107 +112 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +125 +117 +109 +102 +95 +89 +82 +76 +71 +66 +61 +6 +-76 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +57 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +104 +12 +-70 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +92 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +114 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-111 +-104 +-97 +-89 +-83 +43 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +120 +113 +105 +97 +91 +85 +79 +23 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +61 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +105 +13 +-69 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-114 +-106 +-98 +-91 +-85 +41 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +120 +112 +104 +97 +90 +85 +78 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-111 +-103 +-97 +31 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +67 +-21 +-99 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-107 +113 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +121 +27 +-57 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +98 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +116 +23 +-60 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +97 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +122 +115 +107 +101 +94 +88 +81 +76 +70 +66 +61 +6 +-76 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-113 +-106 +-98 +29 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +66 +-22 +-100 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-108 +112 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +125 +117 +109 +102 +94 +88 +82 +76 +71 +67 +62 +6 +-77 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +57 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +103 +11 +-71 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-113 +-104 +-97 +-91 +-84 +42 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +120 +112 +104 +97 +90 +84 +78 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-111 +-103 +-97 +30 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +67 +-21 +-99 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-107 +113 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +121 +27 +-57 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +98 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +123 +115 +107 +100 +93 +86 +80 +75 +70 +65 +61 +6 +-77 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +56 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +102 +10 +-72 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-114 +-105 +-98 +-90 +-84 +42 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +120 +112 +104 +97 +90 +84 +78 +23 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-111 +-103 +-96 +30 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +118 +110 +102 +95 +88 +83 +77 +20 +-64 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +61 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +104 +11 +-71 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-113 +-105 +-98 +-91 +-85 +41 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +70 +-18 +-97 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-106 +114 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +118 +110 +103 +96 +89 +83 +77 +72 +67 +63 +6 +-76 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-113 +-105 +-98 +29 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +118 +110 +102 +95 +88 +83 +78 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +61 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +104 +11 +-71 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-112 +-105 +-98 +-90 +-84 +42 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +120 +112 +104 +97 +90 +84 +78 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-111 +-104 +-97 +31 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +65 +-22 +-100 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-107 +113 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +121 +27 +-56 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +99 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +124 +116 +107 +101 +93 +87 +81 +76 +71 +67 +62 +7 +-76 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +57 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +104 +11 +-71 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-114 +-106 +-98 +-92 +-85 +41 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +119 +111 +104 +97 +90 +84 +78 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-111 +-103 +-95 +32 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +119 +111 +103 +95 +89 +83 +76 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +61 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +103 +10 +-71 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-114 +-105 +-99 +-92 +-85 +41 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +69 +-18 +-97 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-106 +114 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +122 +28 +-56 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +100 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +116 +23 +-60 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +97 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +123 +115 +107 +99 +92 +87 +81 +76 +71 +66 +61 +6 +-77 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +57 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +102 +10 +-72 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-114 +-106 +-99 +-91 +-85 +41 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +69 +-19 +-98 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-107 +113 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +118 +109 +102 +96 +89 +82 +77 +71 +67 +62 +7 +-75 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-113 +-105 +-98 +30 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +66 +-21 +-100 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-106 +113 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +121 +28 +-56 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +100 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +117 +24 +-60 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +96 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +116 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +97 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +122 +115 +106 +99 +92 +86 +80 +75 +70 +64 +60 +6 +-76 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +55 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +102 +10 +-72 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +93 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +115 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +97 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +117 +23 +-60 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +97 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +117 +23 +-60 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +97 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +114 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +97 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +116 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +98 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +117 +23 +-60 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +97 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +115 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-111 +-103 +-96 +-89 +-83 +44 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +119 +112 +104 +97 +90 +84 +78 +23 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-111 +-103 +-97 +31 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +118 +111 +102 +96 +89 +83 +77 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-112 +-103 +-96 +31 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +118 +110 +103 +96 +89 +83 +77 +21 +-63 +-127 +-127 +-127 +-127 diff --git a/traces/lf_t5577_hid.pm3 b/traces/lf_t5577_hid.pm3 new file mode 100644 index 000000000..a6b6ecc3b --- /dev/null +++ b/traces/lf_t5577_hid.pm3 @@ -0,0 +1,10000 @@ +-127 +-31 +85 +123 +116 +23 +-60 +-127 +-127 +-15 +93 +123 +117 +24 +-59 +-127 +-127 +-15 +92 +123 +116 +22 +-61 +-127 +-127 +-16 +92 +123 +116 +23 +-60 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +116 +23 +-60 +-127 +-127 +-127 +-23 +93 +123 +123 +123 +44 +-41 +-118 +-127 +-127 +-24 +92 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-27 +88 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-29 +87 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-30 +85 +123 +123 +123 +37 +-48 +-124 +-127 +-24 +82 +123 +104 +12 +-70 +-127 +-127 +-25 +83 +123 +107 +15 +-68 +-127 +-127 +-23 +86 +123 +111 +19 +-64 +-127 +-127 +-21 +87 +123 +111 +18 +-65 +-127 +-127 +-20 +88 +123 +113 +19 +-63 +-127 +-127 +-18 +90 +123 +116 +22 +-61 +-127 +-127 +-127 +-24 +93 +123 +123 +123 +43 +-42 +-119 +-127 +-127 +-24 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-27 +88 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-29 +87 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-29 +86 +123 +123 +123 +38 +-47 +-123 +-127 +-24 +83 +123 +105 +13 +-69 +-127 +-127 +-25 +83 +123 +108 +15 +-67 +-127 +-127 +-22 +86 +123 +111 +18 +-64 +-127 +-127 +-21 +88 +123 +111 +18 +-65 +-127 +-127 +-20 +88 +123 +113 +20 +-63 +-127 +-127 +-19 +90 +123 +113 +20 +-63 +-127 +-127 +-19 +89 +123 +123 +123 +31 +-53 +-127 +-127 +-127 +-34 +82 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-33 +83 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +116 +22 +-61 +-127 +-127 +-14 +95 +123 +117 +24 +-60 +-127 +-127 +-15 +93 +123 +117 +23 +-60 +-127 +-127 +-16 +92 +123 +115 +21 +-61 +-127 +-127 +-17 +91 +123 +115 +21 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-34 +84 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +85 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-31 +86 +123 +116 +23 +-60 +-127 +-127 +-13 +94 +123 +118 +24 +-59 +-127 +-127 +-15 +93 +123 +116 +22 +-61 +-127 +-127 +-16 +92 +123 +116 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +116 +22 +-61 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +44 +-42 +-118 +-127 +-127 +-24 +92 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-27 +88 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-29 +87 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-31 +86 +123 +123 +123 +37 +-48 +-124 +-127 +-24 +83 +123 +104 +12 +-70 +-127 +-127 +-25 +83 +123 +108 +15 +-67 +-127 +-127 +-22 +87 +123 +112 +19 +-64 +-127 +-127 +-21 +87 +123 +111 +18 +-64 +-127 +-127 +-20 +89 +123 +113 +20 +-63 +-127 +-127 +-19 +89 +123 +115 +22 +-61 +-127 +-127 +-127 +-24 +92 +123 +123 +123 +42 +-43 +-119 +-127 +-127 +-25 +90 +123 +123 +123 +39 +-46 +-122 +-127 +-127 +-29 +87 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +37 +-47 +-123 +-127 +-24 +82 +123 +105 +13 +-70 +-127 +-127 +-24 +84 +123 +108 +16 +-67 +-127 +-127 +-22 +86 +123 +112 +19 +-63 +-127 +-127 +-20 +88 +123 +111 +19 +-64 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-34 +83 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-33 +84 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-33 +84 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +115 +22 +-61 +-127 +-127 +-15 +94 +123 +117 +24 +-59 +-127 +-127 +-16 +93 +123 +116 +23 +-61 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +123 +123 +33 +-51 +-126 +-127 +-127 +-35 +81 +123 +123 +123 +33 +-51 +-127 +-127 +-127 +-33 +82 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-31 +86 +123 +116 +23 +-60 +-127 +-127 +-14 +94 +123 +118 +24 +-59 +-127 +-127 +-14 +94 +123 +117 +23 +-60 +-127 +-127 +-15 +93 +123 +117 +23 +-60 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +117 +23 +-60 +-127 +-127 +-127 +-22 +94 +123 +123 +123 +44 +-41 +-118 +-127 +-127 +-24 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-28 +88 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-30 +87 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-31 +86 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +33 +-51 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +84 +123 +123 +123 +36 +-48 +-124 +-127 +-25 +81 +123 +104 +11 +-70 +-127 +-127 +-25 +84 +123 +108 +16 +-67 +-127 +-127 +-22 +87 +123 +112 +19 +-64 +-127 +-127 +-20 +88 +123 +113 +20 +-63 +-127 +-127 +-19 +90 +123 +114 +20 +-62 +-127 +-127 +-18 +90 +123 +117 +23 +-60 +-127 +-127 +-127 +-22 +95 +123 +123 +123 +44 +-42 +-118 +-127 +-127 +-24 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-27 +89 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-29 +86 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +36 +-49 +-125 +-127 +-24 +82 +123 +104 +12 +-70 +-127 +-127 +-25 +83 +123 +108 +16 +-67 +-127 +-127 +-22 +86 +123 +112 +19 +-64 +-127 +-127 +-20 +88 +123 +112 +19 +-64 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-19 +89 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-33 +83 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-33 +83 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-32 +83 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-126 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-32 +85 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-33 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +116 +22 +-61 +-127 +-127 +-14 +93 +123 +118 +24 +-59 +-127 +-127 +-15 +93 +123 +116 +22 +-61 +-127 +-127 +-16 +92 +123 +117 +23 +-60 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +116 +23 +-60 +-127 +-127 +-127 +-22 +94 +123 +123 +123 +44 +-41 +-118 +-127 +-127 +-24 +92 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-28 +88 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-30 +87 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-31 +85 +123 +123 +123 +37 +-48 +-123 +-127 +-25 +82 +123 +104 +12 +-70 +-127 +-127 +-25 +83 +123 +109 +16 +-66 +-127 +-127 +-23 +86 +123 +112 +19 +-64 +-127 +-127 +-20 +88 +123 +111 +19 +-64 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +116 +23 +-60 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +43 +-42 +-119 +-127 +-127 +-25 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-27 +89 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-28 +88 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-30 +85 +123 +123 +123 +38 +-47 +-123 +-127 +-25 +82 +123 +103 +11 +-71 +-127 +-127 +-26 +83 +123 +108 +15 +-67 +-127 +-127 +-23 +86 +123 +111 +18 +-65 +-127 +-127 +-20 +88 +123 +111 +18 +-64 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-19 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +90 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-34 +82 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-32 +84 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-32 +84 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-31 +86 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-31 +86 +123 +123 +123 +38 +-48 +-123 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +117 +23 +-60 +-127 +-127 +-15 +93 +123 +117 +23 +-60 +-127 +-127 +-16 +92 +123 +116 +23 +-61 +-127 +-127 +-16 +91 +123 +116 +22 +-61 +-127 +-127 +-17 +90 +123 +115 +21 +-62 +-127 +-127 +-18 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +116 +22 +-61 +-127 +-127 +-127 +-23 +93 +123 +123 +123 +44 +-42 +-118 +-127 +-127 +-25 +90 +123 +123 +123 +39 +-46 +-122 +-127 +-127 +-28 +88 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-30 +86 +123 +123 +123 +36 +-48 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +37 +-48 +-124 +-127 +-25 +83 +123 +104 +12 +-70 +-127 +-127 +-25 +84 +123 +108 +16 +-67 +-127 +-127 +-22 +87 +123 +112 +19 +-64 +-127 +-127 +-20 +88 +123 +112 +19 +-63 +-127 +-127 +-19 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +115 +22 +-61 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +115 +22 +-61 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +123 +123 +32 +-53 +-127 +-127 +-127 +-34 +82 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-33 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +115 +22 +-61 +-127 +-127 +-15 +94 +123 +117 +24 +-59 +-127 +-127 +-15 +92 +123 +116 +23 +-61 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +92 +123 +116 +22 +-61 +-127 +-127 +-18 +91 +123 +123 +123 +33 +-51 +-126 +-127 +-127 +-34 +83 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-34 +84 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-33 +84 +123 +123 +123 +35 +-50 +-126 +-127 +-127 +-33 +84 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-32 +85 +123 +115 +22 +-61 +-127 +-127 +-15 +92 +123 +117 +24 +-59 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-16 +91 +123 +116 +23 +-60 +-127 +-127 +-16 +92 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +117 +23 +-60 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +43 +-42 +-118 +-127 +-127 +-25 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-28 +88 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-29 +88 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +37 +-47 +-123 +-127 +-24 +83 +123 +105 +12 +-70 +-127 +-127 +-24 +85 +123 +109 +16 +-66 +-127 +-127 +-21 +88 +123 +114 +20 +-62 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-19 +90 +123 +114 +20 +-62 +-127 +-127 +-18 +90 +123 +116 +22 +-61 +-127 +-127 +-127 +-23 +93 +123 +123 +123 +43 +-42 +-119 +-127 +-127 +-25 +90 +123 +123 +123 +39 +-46 +-122 +-127 +-127 +-29 +87 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-30 +86 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-30 +85 +123 +123 +123 +37 +-48 +-124 +-127 +-24 +83 +123 +104 +12 +-70 +-127 +-127 +-25 +83 +123 +108 +15 +-67 +-127 +-127 +-22 +86 +123 +111 +18 +-65 +-127 +-127 +-20 +89 +123 +112 +19 +-64 +-127 +-127 +-20 +89 +123 +113 +20 +-63 +-127 +-127 +-18 +89 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +123 +123 +32 +-52 +-127 +-127 +-127 +-35 +82 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-33 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-33 +83 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-33 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +115 +22 +-61 +-127 +-127 +-15 +93 +123 +116 +23 +-60 +-127 +-127 +-16 +93 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +92 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-33 +83 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-31 +85 +123 +116 +23 +-60 +-127 +-127 +-15 +94 +123 +117 +24 +-60 +-127 +-127 +-15 +92 +123 +116 +23 +-60 +-127 +-127 +-16 +92 +123 +116 +23 +-60 +-127 +-127 +-16 +92 +123 +116 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +90 +123 +116 +23 +-61 +-127 +-127 +-127 +-23 +93 +123 +123 +123 +43 +-43 +-119 +-127 +-127 +-25 +91 +123 +123 +123 +39 +-46 +-122 +-127 +-127 +-28 +88 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-29 +87 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +37 +-47 +-123 +-127 +-24 +83 +123 +104 +12 +-70 +-127 +-127 +-25 +83 +123 +108 +16 +-67 +-127 +-127 +-22 +87 +123 +112 +19 +-64 +-127 +-127 +-20 +87 +123 +112 +19 +-64 +-127 +-127 +-19 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +116 +22 +-61 +-127 +-127 +-18 +91 +123 +114 +20 +-62 +-127 +-127 +-19 +89 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +115 +21 +-62 +-127 +-127 +-19 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-34 +82 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-33 +83 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +86 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +116 +23 +-60 +-127 +-127 +-14 +94 +123 +118 +24 +-59 +-127 +-127 +-14 +93 +123 +117 +24 +-60 +-127 +-127 +-16 +93 +123 +116 +23 +-60 +-127 +-127 +-16 +92 +123 +116 +22 +-61 +-127 +-127 +-17 +92 +123 +115 +22 +-61 +-127 +-127 +-16 +92 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-34 +83 +123 +123 +123 +33 +-51 +-127 +-127 +-127 +-32 +84 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-33 +83 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +83 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-33 +83 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +83 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-31 +86 +123 +116 +23 +-60 +-127 +-127 +-14 +94 +123 +117 +24 +-59 +-127 +-127 +-15 +93 +123 +116 +22 +-61 +-127 +-127 +-17 +92 +123 +116 +23 +-60 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +116 +22 +-61 +-127 +-127 +-18 +91 +123 +113 +20 +-63 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +92 +123 +116 +23 +-60 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +118 +24 +-59 +-127 +-127 +-127 +-22 +94 +123 +123 +123 +44 +-42 +-118 +-127 +-127 +-24 +92 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-27 +88 +123 +123 +123 +37 +-47 +-123 +-127 +-127 +-29 +86 +123 +123 +123 +36 +-48 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +38 +-47 +-123 +-127 +-24 +83 +123 +105 +13 +-69 +-127 +-127 +-25 +84 +123 +107 +15 +-68 +-127 +-127 +-22 +86 +123 +111 +18 +-64 +-127 +-127 +-20 +88 +123 +111 +18 +-65 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-19 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +89 +123 +123 +123 +32 +-53 +-127 +-127 +-127 +-36 +82 +123 +123 +123 +32 +-52 +-127 +-127 +-127 +-34 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-33 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-32 +84 +123 +115 +22 +-61 +-127 +-127 +-15 +93 +123 +117 +23 +-60 +-127 +-127 +-16 +92 +123 +116 +23 +-60 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +90 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-35 +82 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-34 +83 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +86 +123 +117 +24 +-60 +-127 +-127 +-14 +94 +123 +118 +24 +-59 +-127 +-127 +-15 +93 +123 +117 +23 +-60 +-127 +-127 +-16 +93 +123 +116 +23 +-60 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +116 +22 +-61 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +43 +-42 +-119 +-127 +-127 +-25 +91 +123 +123 +123 +39 +-45 +-121 +-127 +-127 +-29 +87 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-30 +86 +123 +123 +123 +36 +-48 +-124 +-127 +-127 +-31 +85 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-48 +-124 +-127 +-25 +82 +123 +104 +12 +-70 +-127 +-127 +-25 +83 +123 +108 +16 +-67 +-127 +-127 +-22 +86 +123 +111 +19 +-64 +-127 +-127 +-20 +88 +123 +112 +19 +-63 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +115 +22 +-61 +-127 +-127 +-127 +-23 +93 +123 +123 +123 +43 +-43 +-119 +-127 +-127 +-25 +91 +123 +123 +123 +39 +-46 +-122 +-127 +-127 +-28 +88 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-30 +86 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-30 +85 +123 +123 +123 +38 +-47 +-123 +-127 +-23 +83 +123 +105 +12 +-70 +-127 +-127 +-25 +84 +123 +109 +16 +-66 +-127 +-127 +-21 +87 +123 +112 +19 +-64 +-127 +-127 +-20 +88 +123 +112 +19 +-63 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +89 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-61 +-127 +-127 +-17 +92 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-34 +82 +123 +123 +123 +33 +-51 +-126 +-127 +-127 +-33 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +116 +23 +-60 +-127 +-127 +-15 +93 +123 +117 +23 +-60 +-127 +-127 +-16 +92 +123 +116 +22 +-61 +-127 +-127 +-17 +92 +123 +116 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-16 +92 +123 +117 +23 +-60 +-127 +-127 +-16 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +90 +123 +116 +22 +-61 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +115 +22 +-61 +-127 +-127 +-18 +91 +123 +115 +22 +-61 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +115 +21 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-18 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +123 +123 +32 +-53 +-127 +-127 +-127 +-36 +82 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-33 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-33 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-32 +86 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +86 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +115 +22 +-61 +-127 +-127 +-14 +95 +123 +118 +24 +-59 +-127 +-127 +-16 +93 +123 +116 +23 +-60 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +116 +22 +-61 +-127 +-127 +-16 +92 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-34 +83 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +37 +-49 +-124 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +86 +123 +116 +23 +-60 +-127 +-127 +-14 +94 +123 +118 +24 +-59 +-127 +-127 +-15 +93 +123 +116 +23 +-60 +-127 +-127 +-16 +92 +123 +117 +23 +-60 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +116 +23 +-61 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +44 +-42 +-118 +-127 +-127 +-25 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-28 +88 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-29 +86 +123 +123 +123 +36 +-48 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +37 +-48 +-124 +-127 +-25 +81 +123 +103 +11 +-71 +-127 +-127 +-25 +82 +123 +108 +15 +-67 +-127 +-127 +-22 +86 +123 +112 +19 +-64 +-127 +-127 +-20 +88 +123 +112 +19 +-64 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +116 +23 +-60 +-127 +-127 +-127 +-23 +93 +123 +123 +123 +44 +-42 +-118 +-127 +-127 +-24 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-27 +89 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-30 +87 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +38 +-47 +-123 +-127 +-24 +83 +123 +105 +13 +-69 +-127 +-127 +-25 +84 +123 +109 +16 +-66 +-127 +-127 +-21 +87 +123 +111 +18 +-64 +-127 +-127 +-20 +88 +123 +112 +19 +-64 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-18 +91 +123 +114 +20 +-62 +-127 +-127 +-17 +90 +123 +123 +123 +32 +-53 +-127 +-127 +-127 +-34 +83 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-33 +83 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +83 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +85 +123 +116 +23 +-60 +-127 +-127 +-14 +95 +123 +117 +24 +-59 +-127 +-127 +-15 +93 +123 +117 +23 +-60 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +123 +123 +33 +-51 +-127 +-127 +-127 +-35 +83 +123 +123 +123 +33 +-51 +-126 +-127 +-127 +-33 +84 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-126 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +116 +23 +-60 +-127 +-127 +-14 +93 +123 +118 +25 +-59 +-127 +-127 +-15 +93 +123 +117 +23 +-60 +-127 +-127 +-16 +92 +123 +116 +22 +-61 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +92 +123 +115 +22 +-61 +-127 +-127 +-16 +91 +123 +117 +24 +-59 +-127 +-127 +-127 +-22 +94 +123 +123 +123 +44 +-41 +-118 +-127 +-127 +-24 +90 +123 +123 +123 +39 +-46 +-122 +-127 +-127 +-28 +88 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-30 +85 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-30 +85 +123 +123 +123 +37 +-48 +-124 +-127 +-24 +82 +123 +105 +13 +-69 +-127 +-127 +-24 +84 +123 +109 +16 +-67 +-127 +-127 +-22 +87 +123 +113 +20 +-63 +-127 +-127 +-20 +88 +123 +112 +19 +-64 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-19 +90 +123 +115 +22 +-61 +-127 +-127 +-127 +-24 +92 +123 +123 +123 +43 +-43 +-119 +-127 +-127 +-26 +90 +123 +123 +123 +39 +-46 +-122 +-127 +-127 +-28 +88 +123 +123 +123 +37 +-47 +-123 +-127 +-127 +-30 +86 +123 +123 +123 +36 +-48 +-124 +-127 +-127 +-31 +86 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +37 +-48 +-123 +-127 +-25 +82 +123 +104 +11 +-70 +-127 +-127 +-25 +83 +123 +108 +15 +-67 +-127 +-127 +-23 +86 +123 +111 +18 +-64 +-127 +-127 +-20 +87 +123 +111 +19 +-64 +-127 +-127 +-20 +89 +123 +113 +19 +-63 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +115 +21 +-61 +-127 +-127 +-17 +92 +123 +115 +21 +-61 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-33 +83 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +116 +22 +-61 +-127 +-127 +-15 +93 +123 +116 +23 +-60 +-127 +-127 +-16 +92 +123 +116 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-18 +91 +123 +116 +23 +-60 +-127 +-127 +-127 +-22 +94 +123 +123 +123 +44 +-41 +-118 +-127 +-127 +-23 +92 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-27 +89 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-30 +87 +123 +123 +123 +37 +-47 +-123 +-127 +-127 +-30 +86 +123 +123 +123 +37 +-48 +-124 +-127 +-24 +82 +123 +105 +12 +-70 +-127 +-127 +-25 +83 +123 +107 +15 +-67 +-127 +-127 +-22 +86 +123 +112 +19 +-63 +-127 +-127 +-20 +88 +123 +112 +19 +-64 +-127 +-127 +-20 +89 +123 +113 +19 +-63 +-127 +-127 +-18 +89 +123 +115 +21 +-61 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +43 +-42 +-119 +-127 +-127 +-25 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-28 +89 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-29 +86 +123 +123 +123 +36 +-48 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +37 +-47 +-123 +-127 +-24 +83 +123 +104 +12 +-70 +-127 +-127 +-24 +84 +123 +108 +16 +-67 +-127 +-127 +-22 +87 +123 +111 +19 +-64 +-127 +-127 +-20 +88 +123 +112 +19 +-64 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-18 +89 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-34 +83 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +85 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +115 +22 +-61 +-127 +-127 +-15 +93 +123 +117 +23 +-60 +-127 +-127 +-16 +92 +123 +116 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +123 +123 +33 +-51 +-126 +-127 +-127 +-34 +82 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +116 +22 +-61 +-127 +-127 +-14 +93 +123 +118 +24 +-59 +-127 +-127 +-15 +93 +123 +115 +22 +-61 +-127 +-127 +-16 +92 +123 +116 +23 +-60 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +90 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +116 +23 +-61 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +43 +-42 +-118 +-127 +-127 +-24 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-28 +88 +123 +123 +123 +37 +-47 +-123 +-127 +-127 +-29 +87 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +37 +-48 +-123 +-127 +-24 +82 +123 +105 +13 +-69 +-127 +-127 +-25 +84 +123 +109 +16 +-67 +-127 +-127 +-22 +87 +123 +112 +19 +-64 +-127 +-127 +-20 +88 +123 +112 +19 +-63 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +116 +22 +-61 +-127 +-127 +-127 +-24 +94 +123 +123 +123 +43 +-42 +-118 +-127 +-127 +-26 +91 +123 +123 +123 +39 +-45 +-121 +-127 +-127 +-29 +88 +123 +123 +123 +37 +-47 +-123 +-127 +-127 +-30 +86 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +37 +-48 +-123 +-127 +-24 +82 +123 +104 +12 +-70 +-127 +-127 +-25 +83 +123 +108 +15 +-67 +-127 +-127 +-22 +87 +123 +111 +18 +-64 +-127 +-127 +-20 +88 +123 +112 +19 +-64 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +114 +20 +-62 +-127 +-127 +-18 +90 +123 +123 +123 +32 +-53 +-127 +-127 +-127 +-35 +82 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-33 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +116 +22 +-61 +-127 +-127 +-14 +95 +123 +118 +24 +-59 +-127 +-127 +-15 +92 +123 +116 +23 +-60 +-127 +-127 +-16 +92 +123 +115 +21 +-62 +-127 +-127 +-16 +92 +123 +116 +22 +-61 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-34 +83 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-33 +84 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +115 +22 +-61 +-127 +-127 +-14 +94 +123 +117 +23 +-60 +-127 +-127 +-15 +93 +123 +116 +23 +-60 +-127 +-127 +-16 +92 +123 +116 +23 +-60 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +116 +22 +-61 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +43 +-42 +-119 +-127 +-127 +-24 +91 +123 +123 +123 +39 +-46 +-122 +-127 +-127 +-28 +87 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-30 +86 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +37 +-48 +-124 +-127 +-24 +82 +123 +105 +12 +-70 +-127 +-127 +-25 +84 +123 +109 +16 +-66 +-127 +-127 +-21 +87 +123 +112 +19 +-64 +-127 +-127 +-19 +88 +123 +112 +19 +-63 +-127 +-127 +-19 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +116 +23 +-60 +-127 +-127 +-127 +-22 +94 +123 +123 +123 +43 +-42 +-118 +-127 +-127 +-24 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-27 +89 +123 +123 +123 +39 +-46 +-122 +-127 +-127 +-29 +87 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +38 +-47 +-123 +-127 +-24 +82 +123 +105 +12 +-69 +-127 +-127 +-25 +84 +123 +108 +15 +-67 +-127 +-127 +-22 +86 +123 +111 +19 +-64 +-127 +-127 +-21 +88 +123 +111 +18 +-65 +-127 +-127 +-20 +88 +123 +111 +18 +-64 +-127 +-127 +-20 +89 +123 +112 +19 +-64 +-127 +-127 +-19 +89 +123 +112 +19 +-64 +-127 +-127 +-19 +90 +123 +113 +20 +-63 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +21 +-61 +-127 +-127 +-17 +91 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-33 +83 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +86 +123 +116 +23 +-60 +-127 +-127 +-14 +94 +123 +118 +24 +-59 +-127 +-127 +-15 +93 +123 +117 +23 +-60 +-127 +-127 +-15 +92 +123 +117 +23 +-60 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +92 +123 +116 +23 +-60 +-127 +-127 +-127 +-23 +95 +123 +123 +123 +44 +-42 +-118 +-127 +-127 +-25 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-28 +88 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-30 +86 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +37 +-48 +-124 +-127 +-25 +82 +123 +104 +12 +-70 +-127 +-127 +-25 +84 +123 +109 +16 +-66 +-127 +-127 +-22 +86 +123 +112 +19 +-64 +-127 +-127 +-19 +88 +123 +113 +19 +-63 +-127 +-127 +-19 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +116 +23 +-61 +-127 +-127 +-127 +-22 +95 +123 +123 +123 +44 +-41 +-118 +-127 +-127 +-24 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-27 +89 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-29 +86 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +38 +-47 +-123 +-127 +-25 +82 +123 +103 +11 +-71 +-127 +-127 +-26 +83 +123 +107 +14 +-68 +-127 +-127 +-23 +86 +123 +111 +18 +-65 +-127 +-127 +-21 +87 +123 +111 +18 +-65 +-127 +-127 +-19 +89 +123 +112 +19 +-64 +-127 +-127 +-20 +89 +123 +112 +19 +-63 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-34 +83 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +37 +-49 +-124 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +36 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-32 +85 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +116 +22 +-61 +-127 +-127 +-14 +93 +123 +117 +24 +-60 +-127 +-127 +-15 +92 +123 +116 +22 +-61 +-127 +-127 +-16 +92 +123 +116 +23 +-60 +-127 +-127 +-17 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +92 +123 +116 +23 +-60 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +44 +-41 +-118 +-127 +-127 +-24 +92 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-27 +89 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-29 +87 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +37 +-48 +-123 +-127 +-24 +83 +123 +105 +12 +-70 +-127 +-127 +-25 +83 +123 +108 +16 +-67 +-127 +-127 +-22 +87 +123 +112 +19 +-63 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +115 +22 +-61 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-19 +89 +123 +114 +20 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-19 +90 +123 +113 +20 +-63 +-127 +-127 +-19 +89 +123 +114 +20 +-62 +-127 +-127 +-19 +90 +123 +113 +20 +-62 +-127 +-127 +-18 +89 +123 +123 +123 +32 +-53 +-127 +-127 +-127 +-35 +81 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-34 +83 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-31 +85 +123 +116 +23 +-60 +-127 +-127 +-13 +95 +123 +118 +25 +-59 +-127 +-127 +-15 +93 +123 +116 +23 +-60 +-127 +-127 +-15 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +92 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-61 +-127 +-127 +-18 +91 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-35 +82 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-34 +83 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-33 +84 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-33 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +115 +22 +-61 +-127 +-127 +-15 +93 +123 +117 +24 +-59 +-127 +-127 +-15 +92 +123 +116 +23 +-60 +-127 +-127 +-16 +92 +123 +116 +23 +-60 +-127 +-127 +-17 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +92 +123 +115 +21 +-61 +-127 +-127 +-18 +91 +123 +116 +23 +-60 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +43 +-42 +-118 +-127 +-127 +-24 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-28 +89 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-30 +87 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +37 +-48 +-123 +-127 +-25 +82 +123 +105 +12 +-70 +-127 +-127 +-24 +84 +123 +109 +16 +-66 +-127 +-127 +-21 +87 +123 +113 +19 +-63 +-127 +-127 +-19 +89 +123 +112 +19 +-63 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +116 +22 +-61 +-127 +-127 +-127 +-24 +93 +123 +123 +123 +43 +-42 +-119 +-127 +-127 +-26 +90 +123 +123 +123 +39 +-46 +-122 +-127 +-127 +-28 +88 +123 +123 +123 +37 +-47 +-123 +-127 +-127 +-30 +86 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-31 +86 +123 +123 +123 +37 +-48 +-124 +-127 +-25 +82 +123 +103 +11 +-71 +-127 +-127 +-26 +83 +123 +108 +16 +-67 +-127 +-127 +-22 +86 +123 +112 +19 +-64 +-127 +-127 +-20 +88 +123 +112 +19 +-64 +-127 +-127 +-19 +90 +123 +114 +20 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-18 +90 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-35 +83 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +116 +22 +-61 +-127 +-127 +-14 +94 +123 +117 +24 +-59 +-127 +-127 +-15 +93 +123 +117 +23 +-60 +-127 +-127 +-16 +93 +123 +116 +22 +-61 +-127 +-127 +-17 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-34 +83 +123 +123 +123 +33 +-51 +-127 +-127 +-127 +-33 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-33 +84 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-33 +84 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +37 +-49 +-124 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +86 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-32 +86 +123 +117 +23 +-60 +-127 +-127 +-13 +94 +123 +118 +25 +-59 +-127 +-127 +-15 +94 +123 +116 +23 +-60 +-127 +-127 +-15 +92 +123 +117 +23 +-60 +-127 +-127 +-16 +92 +123 +116 +22 +-61 +-127 +-127 +-17 +91 +123 +116 +22 +-61 +-127 +-127 +-17 +91 +123 +116 +23 +-60 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +43 +-42 +-119 +-127 +-127 +-25 +91 +123 +123 +123 +39 +-46 +-122 +-127 +-127 +-29 +88 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-31 +86 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-124 +-127 +-26 +81 +123 +104 +12 +-70 +-127 +-127 +-25 +83 +123 +108 +15 +-67 +-127 +-127 +-22 +86 +123 +111 +18 +-64 +-127 +-127 +-19 +88 +123 +112 +19 +-63 +-127 +-127 +-19 +89 +123 +112 +19 +-64 +-127 +-127 +-18 +89 +123 +115 +21 +-61 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-61 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +123 +123 +32 +-52 +-127 +-127 +-127 +-34 +82 +123 +123 +123 +33 +-51 +-126 +-127 +-127 +-33 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-32 +85 +123 +116 +22 +-61 +-127 +-127 +-13 +94 +123 +118 +24 +-59 +-127 +-127 +-15 +93 +123 +117 +23 +-60 +-127 +-127 +-15 +92 +123 +116 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-18 +91 +123 +115 +22 +-62 +-127 +-127 +-18 +90 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-36 +83 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-34 +83 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-33 +84 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-33 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-31 +85 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-31 +85 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +115 +22 +-61 +-127 +-127 +-14 +94 +123 +118 +24 +-59 +-127 +-127 +-16 +93 +123 +115 +22 +-61 +-127 +-127 +-16 +92 +123 +116 +23 +-60 +-127 +-127 +-17 +91 +123 +115 +21 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +116 +23 +-60 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +116 +22 +-61 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +116 +23 +-60 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +44 +-41 +-118 +-127 +-127 +-24 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-28 +88 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-29 +86 +123 +123 +123 +36 +-48 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +38 +-47 +-123 +-127 +-23 +83 +123 +104 +12 +-70 +-127 +-127 +-25 +83 +123 +108 +16 +-67 +-127 +-127 +-22 +87 +123 +112 +19 +-64 +-127 +-127 +-20 +88 +123 +112 +19 +-64 +-127 +-127 +-19 +90 +123 +113 +20 +-63 +-127 +-127 +-19 +90 +123 +114 +20 +-62 +-127 +-127 +-18 +90 +123 +123 +123 +32 +-52 +-127 +-127 +-127 +-34 +82 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-34 +83 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-33 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-33 +84 +123 +115 +21 +-61 +-127 +-127 +-15 +93 +123 +117 +23 +-60 +-127 +-127 +-15 +93 +123 +116 +22 +-61 +-127 +-127 +-16 +92 +123 +116 +22 +-61 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-16 +92 +123 +116 +22 +-61 +-127 +-127 +-16 +92 +123 +123 +123 +33 +-51 +-126 +-127 +-127 +-33 +83 +123 +123 +123 +33 +-51 +-127 +-127 +-127 +-32 +84 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +116 +23 +-60 +-127 +-127 +-14 +94 +123 +118 +24 +-59 +-127 +-127 +-15 +92 +123 +116 +23 +-60 +-127 +-127 +-16 +92 +123 +116 +23 +-60 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-18 +91 +123 +117 +23 +-60 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +44 +-42 +-118 +-127 +-127 +-25 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-27 +88 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-30 +86 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-30 +85 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-30 +85 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +37 +-48 +-124 +-127 +-25 +82 +123 +104 +12 +-70 +-127 +-127 +-25 +83 +123 +108 +15 +-67 +-127 +-127 +-23 +86 +123 +112 +19 +-64 +-127 +-127 +-20 +87 +123 +112 +19 +-64 +-127 +-127 +-19 +89 +123 +113 +19 +-63 +-127 +-127 +-19 +89 +123 +115 +22 +-61 +-127 +-127 +-127 +-24 +92 +123 +123 +123 +43 +-42 +-119 +-127 +-127 +-25 +90 +123 +123 +123 +39 +-46 +-122 +-127 +-127 +-28 +88 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-30 +86 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +38 +-47 +-123 +-127 +-23 +83 +123 +105 +12 +-70 +-127 +-127 +-24 +84 +123 +109 +16 +-66 +-127 +-127 +-21 +87 +123 +113 +19 +-63 +-127 +-127 +-20 +88 +123 +112 +19 +-64 +-127 +-127 +-19 +89 +123 +114 +20 +-62 +-127 +-127 +-19 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +114 +20 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-18 +91 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-34 +83 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-126 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +115 +22 +-61 +-127 +-127 +-14 +93 +123 +117 +24 +-59 +-127 +-127 +-15 +93 +123 +117 +23 +-60 +-127 +-127 +-16 +92 +123 +116 +23 +-60 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +116 +23 +-60 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +116 +23 +-61 +-127 +-127 +-17 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +115 +22 +-61 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-34 +83 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-31 +86 +123 +123 +123 +37 +-49 +-124 +-127 +-127 +-31 +86 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +116 +22 +-61 +-127 +-127 +-13 +95 +123 +118 +25 +-59 +-127 +-127 +-15 +93 +123 +117 +23 +-60 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +123 +123 +33 +-51 +-126 +-127 +-127 +-34 +83 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-33 +84 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-33 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +115 +22 +-61 +-127 +-127 +-14 +93 +123 +117 +24 +-59 +-127 +-127 +-16 +92 +123 +116 +22 +-61 +-127 +-127 +-15 +92 +123 +116 +23 +-60 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-16 +92 +123 +117 +23 +-60 +-127 +-127 +-127 +-22 +95 +123 +123 +123 +44 +-41 +-118 +-127 +-127 +-24 +92 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-27 +89 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-29 +87 +123 +123 +123 +36 +-48 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +37 +-48 +-123 +-127 +-24 +82 +123 +105 +12 +-70 +-127 +-127 +-25 +83 +123 +108 +16 +-67 +-127 +-127 +-22 +87 +123 +112 +19 +-64 +-127 +-127 +-20 +88 +123 +112 +19 +-64 +-127 +-127 +-19 +89 +123 +112 +19 +-64 +-127 +-127 +-18 +90 +123 +116 +22 +-61 +-127 +-127 +-127 +-23 +93 +123 +123 +123 +43 +-42 +-119 +-127 +-127 +-25 +91 +123 +123 +123 +39 +-45 +-121 +-127 +-127 +-27 +88 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-29 +87 +123 +123 +123 +36 +-48 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +37 +-47 +-123 +-127 +-24 +82 +123 +105 +13 +-69 +-127 +-127 +-25 +84 +123 +108 +16 +-67 +-127 +-127 +-21 +88 +123 +112 +19 +-64 +-127 +-127 +-20 +89 +123 +111 +18 +-64 +-127 +-127 +-19 +89 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +123 +123 +32 +-52 +-127 +-127 +-127 +-34 +82 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-33 +83 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +85 +123 +116 +22 +-61 +-127 +-127 +-14 +94 +123 +118 +24 +-59 +-127 +-127 +-15 +92 +123 +116 +23 +-60 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +90 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-34 +83 +123 +123 +123 +33 +-51 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +116 +23 +-60 +-127 +-127 +-14 +93 +123 +117 +23 +-60 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-16 +91 +123 +116 +23 +-60 +-127 +-127 +-17 +91 +123 +114 +20 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +116 +23 +-61 +-127 +-127 +-127 +-22 +94 +123 +123 +123 +44 +-41 +-118 +-127 +-127 +-24 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-28 +88 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-29 +87 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-30 +85 +123 +123 +123 +37 +-48 +-123 +-127 +-24 +82 +123 +105 +12 +-70 +-127 +-127 +-25 +83 +123 +108 +15 +-67 +-127 +-127 +-22 +87 +123 +113 +20 +-63 +-127 +-127 +-20 +89 +123 +112 +19 +-64 +-127 +-127 +-19 +90 +123 +114 +20 +-62 +-127 +-127 +-18 +90 +123 +116 +23 +-60 +-127 +-127 +-127 +-23 +93 +123 +123 +123 +43 +-42 +-118 +-127 +-127 +-25 +90 +123 +123 +123 +39 +-46 +-122 +-127 +-127 +-28 +87 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-30 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +84 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-30 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-30 +85 +123 +123 +123 +37 +-47 +-123 +-127 +-24 +82 +123 +105 +13 +-69 +-127 +-127 +-24 +85 +123 +109 +16 +-67 +-127 +-127 +-21 +88 +123 +113 +19 +-63 +-127 +-127 +-20 +88 +123 +111 +18 +-64 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-19 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-34 +83 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +85 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-32 +85 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +116 +22 +-61 +-127 +-127 +-14 +94 +123 +118 +24 +-59 +-127 +-127 +-15 +93 +123 +117 +23 +-60 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-16 +92 +123 +115 +21 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +116 +23 +-61 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +44 +-42 +-118 +-127 +-127 +-24 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-27 +89 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-29 +87 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-30 +85 +123 +123 +123 +37 +-48 +-123 +-127 +-24 +83 +123 +104 +12 +-70 +-127 +-127 +-25 +83 +123 +108 +15 +-67 +-127 +-127 +-23 +86 +123 +111 +18 +-64 +-127 +-127 +-21 +87 +123 +112 +19 +-64 +-127 +-127 +-20 +89 +123 +113 +19 +-63 +-127 +-127 +-18 +89 +123 +115 +22 +-61 +-127 +-127 +-127 +-23 +93 +123 +123 +123 +43 +-42 +-119 +-127 +-127 +-25 +91 +123 +123 +123 +39 +-45 +-122 +-127 +-127 +-28 +88 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-30 +86 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +37 +-48 +-124 +-127 +-25 +81 +123 +104 +12 +-70 +-127 +-127 +-25 +84 +123 +107 +14 +-68 +-127 +-127 +-22 +86 +123 +112 +19 +-64 +-127 +-127 +-20 +89 +123 +112 +19 +-64 +-127 +-127 +-19 +89 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +20 +-62 +-127 +-127 +-18 +90 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-34 +83 +123 +123 +123 +33 +-51 +-126 +-127 +-127 +-33 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-33 +85 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +115 +22 +-61 +-127 +-127 +-15 +94 +123 +117 +24 +-60 +-127 +-127 +-15 +93 +123 +116 +23 +-60 +-127 +-127 +-17 +92 +123 +116 +22 +-61 +-127 +-127 +-16 +92 +123 +115 +21 +-61 +-127 +-127 +-18 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-34 +82 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-34 +83 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-33 +83 +123 +123 +123 +35 +-50 +-125 +-127 diff --git a/traces/lf_t5577_hid_84.pm3 b/traces/lf_t5577_hid_84.pm3 new file mode 100644 index 000000000..ccd3dceaf --- /dev/null +++ b/traces/lf_t5577_hid_84.pm3 @@ -0,0 +1,20000 @@ +-125 +-127 +-127 +-33 +83 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +115 +22 +-61 +-127 +-127 +-15 +93 +123 +117 +23 +-60 +-127 +-127 +-16 +92 +123 +116 +22 +-61 +-127 +-127 +-17 +91 +123 +116 +23 +-60 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-19 +90 +123 +115 +22 +-61 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +43 +-42 +-119 +-127 +-127 +-25 +91 +123 +123 +123 +39 +-45 +-121 +-127 +-127 +-28 +88 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-29 +87 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-29 +86 +123 +123 +123 +37 +-47 +-123 +-127 +-24 +83 +123 +106 +13 +-69 +-127 +-127 +-25 +84 +123 +109 +16 +-66 +-127 +-127 +-21 +87 +123 +113 +20 +-63 +-127 +-127 +-20 +89 +123 +112 +19 +-64 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +117 +23 +-60 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +43 +-42 +-119 +-127 +-127 +-25 +91 +123 +123 +123 +39 +-46 +-122 +-127 +-127 +-29 +87 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-30 +86 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +86 +123 +123 +123 +37 +-48 +-123 +-127 +-24 +82 +123 +105 +12 +-70 +-127 +-127 +-24 +84 +123 +108 +15 +-67 +-127 +-127 +-22 +87 +123 +111 +18 +-65 +-127 +-127 +-20 +89 +123 +112 +19 +-64 +-127 +-127 +-19 +89 +123 +114 +20 +-62 +-127 +-127 +-19 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +123 +123 +32 +-52 +-127 +-127 +-127 +-34 +83 +123 +123 +123 +33 +-51 +-126 +-127 +-127 +-34 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-33 +84 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +115 +22 +-61 +-127 +-127 +-14 +93 +123 +117 +24 +-59 +-127 +-127 +-16 +93 +123 +117 +23 +-60 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +115 +22 +-61 +-127 +-127 +-18 +91 +123 +115 +21 +-62 +-127 +-127 +-18 +91 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-34 +82 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +83 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +116 +23 +-60 +-127 +-127 +-14 +94 +123 +118 +24 +-59 +-127 +-127 +-15 +93 +123 +116 +22 +-61 +-127 +-127 +-16 +91 +123 +116 +23 +-60 +-127 +-127 +-16 +91 +123 +116 +23 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +117 +23 +-60 +-127 +-127 +-127 +-22 +94 +123 +123 +123 +43 +-42 +-118 +-127 +-127 +-24 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-28 +88 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-30 +87 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +37 +-47 +-123 +-127 +-24 +82 +123 +105 +12 +-70 +-127 +-127 +-25 +84 +123 +108 +16 +-67 +-127 +-127 +-22 +86 +123 +113 +20 +-63 +-127 +-127 +-20 +88 +123 +112 +19 +-64 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +116 +23 +-61 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +44 +-42 +-118 +-127 +-127 +-25 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-28 +88 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-29 +86 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +37 +-48 +-124 +-127 +-25 +81 +123 +104 +12 +-70 +-127 +-127 +-26 +83 +123 +107 +15 +-67 +-127 +-127 +-22 +86 +123 +112 +19 +-64 +-127 +-127 +-20 +89 +123 +112 +19 +-64 +-127 +-127 +-19 +89 +123 +114 +20 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-35 +82 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-33 +83 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +115 +22 +-61 +-127 +-127 +-15 +93 +123 +118 +24 +-59 +-127 +-127 +-16 +93 +123 +115 +22 +-61 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +92 +123 +115 +22 +-61 +-127 +-127 +-16 +92 +123 +116 +22 +-61 +-127 +-127 +-17 +91 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-34 +83 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-33 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-33 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +116 +22 +-61 +-127 +-127 +-14 +93 +123 +117 +24 +-59 +-127 +-127 +-16 +93 +123 +116 +22 +-61 +-127 +-127 +-17 +91 +123 +116 +23 +-60 +-127 +-127 +-17 +92 +123 +115 +22 +-61 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +117 +24 +-60 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +43 +-42 +-118 +-127 +-127 +-25 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-28 +88 +123 +123 +123 +37 +-47 +-123 +-127 +-127 +-30 +87 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +37 +-47 +-123 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +37 +-48 +-123 +-127 +-24 +82 +123 +105 +13 +-69 +-127 +-127 +-24 +85 +123 +109 +16 +-66 +-127 +-127 +-21 +87 +123 +113 +20 +-63 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-19 +89 +123 +115 +22 +-61 +-127 +-127 +-127 +-23 +93 +123 +123 +123 +43 +-42 +-119 +-127 +-127 +-25 +91 +123 +123 +123 +39 +-46 +-122 +-127 +-127 +-29 +87 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-30 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +37 +-48 +-123 +-127 +-24 +81 +123 +104 +12 +-70 +-127 +-127 +-25 +83 +123 +107 +15 +-67 +-127 +-127 +-22 +86 +123 +112 +19 +-64 +-127 +-127 +-20 +89 +123 +112 +19 +-64 +-127 +-127 +-19 +90 +123 +113 +20 +-63 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +115 +21 +-61 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-35 +81 +123 +123 +123 +32 +-52 +-127 +-127 +-127 +-34 +83 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-33 +83 +123 +123 +123 +33 +-51 +-126 +-127 +-127 +-33 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-31 +86 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-31 +86 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-32 +86 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-31 +86 +123 +117 +23 +-60 +-127 +-127 +-13 +95 +123 +118 +24 +-59 +-127 +-127 +-15 +93 +123 +117 +23 +-60 +-127 +-127 +-16 +92 +123 +116 +23 +-60 +-127 +-127 +-16 +91 +123 +115 +21 +-61 +-127 +-127 +-18 +90 +123 +115 +21 +-62 +-127 +-127 +-16 +91 +123 +117 +23 +-60 +-127 +-127 +-127 +-22 +95 +123 +123 +123 +44 +-41 +-117 +-127 +-127 +-23 +92 +123 +123 +123 +41 +-44 +-121 +-127 +-127 +-27 +89 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-30 +86 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-30 +85 +123 +123 +123 +37 +-48 +-123 +-127 +-25 +81 +123 +104 +12 +-70 +-127 +-127 +-25 +83 +123 +107 +15 +-68 +-127 +-127 +-22 +86 +123 +112 +19 +-64 +-127 +-127 +-20 +88 +123 +112 +19 +-63 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-19 +89 +123 +116 +23 +-61 +-127 +-127 +-127 +-23 +93 +123 +123 +123 +43 +-42 +-119 +-127 +-127 +-25 +91 +123 +123 +123 +39 +-46 +-122 +-127 +-127 +-28 +88 +123 +123 +123 +37 +-47 +-123 +-127 +-127 +-30 +87 +123 +123 +123 +36 +-48 +-124 +-127 +-127 +-31 +86 +123 +123 +123 +37 +-47 +-123 +-127 +-25 +82 +123 +105 +12 +-70 +-127 +-127 +-25 +84 +123 +108 +15 +-67 +-127 +-127 +-22 +87 +123 +111 +19 +-64 +-127 +-127 +-20 +87 +123 +112 +19 +-64 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-19 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +92 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-34 +82 +123 +123 +123 +32 +-52 +-127 +-127 +-127 +-33 +83 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-33 +83 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-33 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +86 +123 +116 +23 +-60 +-127 +-127 +-14 +94 +123 +118 +24 +-59 +-127 +-127 +-15 +93 +123 +116 +23 +-60 +-127 +-127 +-16 +92 +123 +116 +23 +-60 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +117 +23 +-60 +-127 +-127 +-127 +-22 +94 +123 +123 +123 +43 +-42 +-118 +-127 +-127 +-25 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-28 +88 +123 +123 +123 +37 +-47 +-123 +-127 +-127 +-30 +87 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-32 +85 +123 +123 +123 +37 +-48 +-124 +-127 +-25 +82 +123 +104 +12 +-70 +-127 +-127 +-25 +83 +123 +108 +16 +-67 +-127 +-127 +-23 +86 +123 +112 +19 +-64 +-127 +-127 +-20 +88 +123 +112 +19 +-64 +-127 +-127 +-19 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +115 +21 +-61 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +115 +21 +-61 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +116 +22 +-61 +-127 +-127 +-18 +91 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-34 +82 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +115 +22 +-61 +-127 +-127 +-14 +93 +123 +118 +24 +-59 +-127 +-127 +-15 +93 +123 +116 +22 +-61 +-127 +-127 +-16 +92 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +123 +123 +33 +-51 +-126 +-127 +-127 +-35 +82 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-33 +84 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-33 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +116 +23 +-60 +-127 +-127 +-14 +93 +123 +118 +24 +-59 +-127 +-127 +-15 +93 +123 +117 +23 +-60 +-127 +-127 +-16 +93 +123 +116 +23 +-60 +-127 +-127 +-16 +91 +123 +116 +23 +-61 +-127 +-127 +-16 +92 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +116 +23 +-60 +-127 +-127 +-127 +-23 +95 +123 +123 +123 +44 +-41 +-118 +-127 +-127 +-25 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-28 +88 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-30 +86 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-31 +85 +123 +123 +123 +37 +-48 +-124 +-127 +-25 +82 +123 +105 +12 +-70 +-127 +-127 +-25 +83 +123 +108 +15 +-67 +-127 +-127 +-22 +87 +123 +112 +19 +-63 +-127 +-127 +-20 +88 +123 +111 +18 +-64 +-127 +-127 +-19 +89 +123 +114 +20 +-62 +-127 +-127 +-18 +90 +123 +116 +22 +-61 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +43 +-42 +-119 +-127 +-127 +-25 +91 +123 +123 +123 +39 +-45 +-121 +-127 +-127 +-28 +88 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-29 +86 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-30 +86 +123 +123 +123 +38 +-47 +-123 +-127 +-24 +82 +123 +105 +13 +-69 +-127 +-127 +-25 +83 +123 +108 +15 +-67 +-127 +-127 +-22 +86 +123 +112 +19 +-64 +-127 +-127 +-20 +88 +123 +111 +18 +-64 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-18 +89 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +123 +123 +32 +-52 +-127 +-127 +-127 +-34 +82 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-33 +83 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-33 +84 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-33 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +115 +22 +-61 +-127 +-127 +-14 +93 +123 +118 +24 +-59 +-127 +-127 +-15 +93 +123 +117 +23 +-60 +-127 +-127 +-16 +92 +123 +116 +22 +-61 +-127 +-127 +-16 +92 +123 +116 +22 +-61 +-127 +-127 +-17 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-35 +83 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-33 +84 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-33 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-31 +86 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-31 +85 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +115 +22 +-61 +-127 +-127 +-14 +93 +123 +118 +24 +-59 +-127 +-127 +-16 +92 +123 +116 +23 +-60 +-127 +-127 +-16 +91 +123 +117 +23 +-60 +-127 +-127 +-17 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +116 +23 +-60 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +44 +-41 +-118 +-127 +-127 +-25 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-28 +88 +123 +123 +123 +37 +-47 +-123 +-127 +-127 +-30 +87 +123 +123 +123 +36 +-48 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +37 +-48 +-123 +-127 +-24 +82 +123 +104 +12 +-70 +-127 +-127 +-25 +83 +123 +108 +15 +-67 +-127 +-127 +-23 +86 +123 +112 +19 +-64 +-127 +-127 +-20 +87 +123 +111 +19 +-64 +-127 +-127 +-20 +89 +123 +113 +20 +-63 +-127 +-127 +-19 +90 +123 +115 +21 +-62 +-127 +-127 +-18 +90 +123 +113 +20 +-62 +-127 +-127 +-18 +90 +123 +114 +20 +-62 +-127 +-127 +-17 +90 +123 +115 +22 +-61 +-127 +-127 +-18 +91 +123 +114 +20 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +123 +123 +32 +-52 +-127 +-127 +-127 +-33 +83 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-33 +83 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +84 +123 +115 +22 +-61 +-127 +-127 +-14 +94 +123 +117 +24 +-60 +-127 +-127 +-15 +93 +123 +117 +23 +-60 +-127 +-127 +-16 +92 +123 +116 +23 +-60 +-127 +-127 +-16 +92 +123 +114 +21 +-62 +-127 +-127 +-16 +91 +123 +116 +23 +-60 +-127 +-127 +-17 +91 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-34 +83 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-33 +84 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +116 +22 +-61 +-127 +-127 +-15 +94 +123 +117 +24 +-60 +-127 +-127 +-16 +92 +123 +116 +22 +-61 +-127 +-127 +-16 +92 +123 +116 +23 +-60 +-127 +-127 +-17 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +117 +23 +-60 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-18 +91 +123 +116 +22 +-61 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +116 +22 +-61 +-127 +-127 +-127 +-24 +93 +123 +123 +123 +43 +-42 +-119 +-127 +-127 +-26 +90 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-28 +87 +123 +123 +123 +37 +-47 +-123 +-127 +-127 +-29 +87 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-30 +85 +123 +123 +123 +37 +-48 +-123 +-127 +-24 +83 +123 +105 +13 +-69 +-127 +-127 +-25 +84 +123 +108 +15 +-67 +-127 +-127 +-22 +86 +123 +112 +19 +-64 +-127 +-127 +-19 +89 +123 +112 +19 +-64 +-127 +-127 +-19 +90 +123 +113 +20 +-62 +-127 +-127 +-18 +91 +123 +115 +21 +-62 +-127 +-127 +-18 +90 +123 +123 +123 +32 +-52 +-127 +-127 +-127 +-35 +82 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-34 +83 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-33 +84 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +83 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +115 +22 +-61 +-127 +-127 +-15 +94 +123 +117 +24 +-60 +-127 +-127 +-16 +93 +123 +116 +22 +-61 +-127 +-127 +-16 +92 +123 +116 +22 +-61 +-127 +-127 +-17 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-34 +82 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +83 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +116 +22 +-61 +-127 +-127 +-14 +93 +123 +118 +25 +-59 +-127 +-127 +-15 +93 +123 +116 +23 +-60 +-127 +-127 +-16 +92 +123 +116 +23 +-60 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +117 +23 +-60 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +44 +-41 +-118 +-127 +-127 +-25 +91 +123 +123 +123 +39 +-46 +-122 +-127 +-127 +-27 +88 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-29 +86 +123 +123 +123 +36 +-48 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +36 +-48 +-124 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +37 +-48 +-124 +-127 +-25 +82 +123 +104 +12 +-70 +-127 +-127 +-24 +84 +123 +109 +16 +-66 +-127 +-127 +-22 +87 +123 +112 +19 +-64 +-127 +-127 +-20 +88 +123 +112 +19 +-63 +-127 +-127 +-19 +89 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +116 +22 +-61 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +44 +-42 +-118 +-127 +-127 +-24 +92 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-27 +89 +123 +123 +123 +39 +-46 +-122 +-127 +-127 +-28 +87 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-30 +85 +123 +123 +123 +37 +-47 +-123 +-127 +-25 +82 +123 +104 +11 +-71 +-127 +-127 +-26 +82 +123 +107 +15 +-68 +-127 +-127 +-23 +85 +123 +110 +18 +-65 +-127 +-127 +-22 +87 +123 +110 +18 +-65 +-127 +-127 +-20 +87 +123 +112 +19 +-63 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-19 +90 +123 +112 +19 +-63 +-127 +-127 +-18 +90 +123 +115 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +116 +22 +-61 +-127 +-127 +-17 +91 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-34 +83 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +116 +22 +-61 +-127 +-127 +-14 +93 +123 +117 +24 +-59 +-127 +-127 +-14 +94 +123 +116 +22 +-61 +-127 +-127 +-17 +92 +123 +116 +23 +-60 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +116 +23 +-60 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +115 +21 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +116 +23 +-60 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +115 +21 +-62 +-127 +-127 +-18 +90 +123 +113 +20 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +20 +-62 +-127 +-127 +-18 +90 +123 +123 +123 +32 +-52 +-127 +-127 +-127 +-35 +82 +123 +123 +123 +33 +-51 +-126 +-127 +-127 +-33 +83 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-33 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +86 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +116 +22 +-61 +-127 +-127 +-14 +94 +123 +117 +24 +-59 +-127 +-127 +-15 +93 +123 +116 +23 +-60 +-127 +-127 +-16 +93 +123 +115 +22 +-61 +-127 +-127 +-17 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-34 +82 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-33 +83 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-33 +84 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-32 +85 +123 +116 +23 +-60 +-127 +-127 +-14 +94 +123 +117 +23 +-60 +-127 +-127 +-15 +92 +123 +117 +23 +-60 +-127 +-127 +-16 +91 +123 +116 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +116 +23 +-60 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +116 +22 +-61 +-127 +-127 +-16 +92 +123 +117 +23 +-60 +-127 +-127 +-16 +92 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-18 +90 +123 +116 +22 +-61 +-127 +-127 +-127 +-24 +93 +123 +123 +123 +43 +-42 +-119 +-127 +-127 +-26 +90 +123 +123 +123 +39 +-46 +-122 +-127 +-127 +-28 +88 +123 +123 +123 +37 +-47 +-123 +-127 +-127 +-30 +86 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-30 +85 +123 +123 +123 +37 +-48 +-123 +-127 +-24 +83 +123 +105 +12 +-70 +-127 +-127 +-25 +83 +123 +108 +15 +-67 +-127 +-127 +-22 +86 +123 +111 +19 +-64 +-127 +-127 +-21 +88 +123 +111 +18 +-64 +-127 +-127 +-19 +88 +123 +113 +19 +-63 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +123 +123 +32 +-52 +-127 +-127 +-127 +-35 +82 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-33 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-33 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-32 +85 +123 +116 +22 +-61 +-127 +-127 +-14 +94 +123 +118 +24 +-59 +-127 +-127 +-15 +93 +123 +116 +23 +-60 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-16 +91 +123 +116 +22 +-61 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-34 +83 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-33 +84 +123 +123 +123 +37 +-49 +-124 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +116 +22 +-61 +-127 +-127 +-15 +93 +123 +116 +23 +-60 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +92 +123 +116 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +21 +-61 +-127 +-127 +-18 +91 +123 +116 +22 +-61 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +44 +-42 +-118 +-127 +-127 +-25 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-28 +88 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-29 +87 +123 +123 +123 +36 +-48 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +37 +-47 +-123 +-127 +-24 +82 +123 +105 +12 +-70 +-127 +-127 +-25 +84 +123 +108 +16 +-67 +-127 +-127 +-22 +87 +123 +113 +20 +-63 +-127 +-127 +-20 +89 +123 +113 +19 +-63 +-127 +-127 +-18 +90 +123 +113 +20 +-62 +-127 +-127 +-19 +91 +123 +116 +22 +-61 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +44 +-42 +-118 +-127 +-127 +-24 +91 +123 +123 +123 +39 +-45 +-121 +-127 +-127 +-27 +88 +123 +123 +123 +37 +-47 +-123 +-127 +-127 +-30 +86 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +37 +-48 +-124 +-127 +-25 +82 +123 +104 +12 +-70 +-127 +-127 +-26 +83 +123 +107 +15 +-68 +-127 +-127 +-22 +86 +123 +111 +19 +-64 +-127 +-127 +-20 +88 +123 +112 +19 +-64 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-18 +91 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-35 +82 +123 +123 +123 +33 +-51 +-126 +-127 +-127 +-33 +84 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +116 +23 +-60 +-127 +-127 +-15 +93 +123 +116 +23 +-60 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +115 +22 +-61 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +44 +-42 +-118 +-127 +-127 +-25 +91 +123 +123 +123 +39 +-45 +-121 +-127 +-127 +-27 +89 +123 +123 +123 +38 +-46 +-122 +-127 +-127 +-29 +87 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-30 +86 +123 +123 +123 +37 +-48 +-123 +-127 +-23 +83 +123 +105 +13 +-69 +-127 +-127 +-24 +85 +123 +109 +16 +-66 +-127 +-127 +-22 +87 +123 +113 +20 +-63 +-127 +-127 +-19 +89 +123 +113 +19 +-63 +-127 +-127 +-19 +90 +123 +113 +20 +-62 +-127 +-127 +-19 +89 +123 +116 +22 +-61 +-127 +-127 +-127 +-23 +93 +123 +123 +123 +43 +-42 +-119 +-127 +-127 +-25 +91 +123 +123 +123 +39 +-46 +-122 +-127 +-127 +-29 +88 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-29 +86 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +37 +-47 +-123 +-127 +-24 +82 +123 +105 +13 +-69 +-127 +-127 +-25 +84 +123 +108 +16 +-67 +-127 +-127 +-22 +87 +123 +112 +19 +-64 +-127 +-127 +-20 +88 +123 +112 +19 +-64 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +123 +123 +32 +-52 +-127 +-127 +-127 +-35 +82 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-34 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-33 +83 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-33 +84 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +84 +123 +115 +22 +-61 +-127 +-127 +-15 +93 +123 +117 +24 +-59 +-127 +-127 +-15 +93 +123 +115 +22 +-61 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-16 +91 +123 +116 +23 +-60 +-127 +-127 +-17 +92 +123 +115 +22 +-61 +-127 +-127 +-16 +91 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-34 +83 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-33 +84 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +116 +23 +-61 +-127 +-127 +-14 +94 +123 +117 +24 +-59 +-127 +-127 +-14 +93 +123 +117 +23 +-60 +-127 +-127 +-16 +92 +123 +116 +23 +-60 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +115 +22 +-61 +-127 +-127 +-127 +-23 +93 +123 +123 +123 +43 +-42 +-118 +-127 +-127 +-24 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-28 +88 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-30 +86 +123 +123 +123 +36 +-48 +-124 +-127 +-127 +-31 +86 +123 +123 +123 +37 +-48 +-124 +-127 +-25 +82 +123 +105 +12 +-69 +-127 +-127 +-25 +84 +123 +108 +16 +-67 +-127 +-127 +-23 +86 +123 +112 +19 +-63 +-127 +-127 +-21 +87 +123 +112 +19 +-64 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-19 +90 +123 +116 +22 +-61 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +43 +-42 +-118 +-127 +-127 +-25 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-28 +89 +123 +123 +123 +39 +-46 +-122 +-127 +-127 +-29 +87 +123 +123 +123 +36 +-48 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +37 +-48 +-123 +-127 +-24 +82 +123 +104 +11 +-70 +-127 +-127 +-25 +83 +123 +107 +14 +-68 +-127 +-127 +-22 +86 +123 +111 +18 +-64 +-127 +-127 +-20 +88 +123 +112 +19 +-64 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-19 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +123 +123 +32 +-52 +-127 +-127 +-127 +-34 +82 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-33 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-33 +83 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +85 +123 +115 +22 +-61 +-127 +-127 +-15 +94 +123 +116 +23 +-60 +-127 +-127 +-16 +92 +123 +116 +23 +-60 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +21 +-61 +-127 +-127 +-16 +92 +123 +116 +23 +-60 +-127 +-127 +-18 +91 +123 +123 +123 +33 +-51 +-126 +-127 +-127 +-34 +83 +123 +123 +123 +33 +-52 +-126 +-127 +-127 +-33 +84 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +116 +22 +-61 +-127 +-127 +-15 +93 +123 +116 +23 +-60 +-127 +-127 +-16 +93 +123 +116 +23 +-60 +-127 +-127 +-16 +92 +123 +117 +23 +-60 +-127 +-127 +-17 +92 +123 +115 +21 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-16 +92 +123 +117 +23 +-60 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +44 +-41 +-118 +-127 +-127 +-24 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-28 +88 +123 +123 +123 +37 +-47 +-123 +-127 +-127 +-30 +86 +123 +123 +123 +36 +-48 +-124 +-127 +-127 +-31 +85 +123 +123 +123 +37 +-48 +-123 +-127 +-24 +82 +123 +104 +12 +-70 +-127 +-127 +-24 +84 +123 +109 +16 +-66 +-127 +-127 +-22 +87 +123 +113 +19 +-63 +-127 +-127 +-21 +88 +123 +112 +19 +-64 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-19 +89 +123 +115 +21 +-61 +-127 +-127 +-127 +-24 +93 +123 +123 +123 +43 +-42 +-119 +-127 +-127 +-25 +91 +123 +123 +123 +39 +-46 +-122 +-127 +-127 +-28 +89 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-30 +86 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +37 +-47 +-123 +-127 +-24 +83 +123 +105 +12 +-70 +-127 +-127 +-25 +84 +123 +109 +16 +-66 +-127 +-127 +-22 +87 +123 +111 +19 +-64 +-127 +-127 +-20 +88 +123 +112 +19 +-64 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +123 +123 +32 +-52 +-127 +-127 +-127 +-35 +82 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-34 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-33 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-31 +86 +123 +116 +23 +-61 +-127 +-127 +-14 +94 +123 +118 +24 +-59 +-127 +-127 +-15 +93 +123 +117 +23 +-60 +-127 +-127 +-16 +92 +123 +115 +21 +-62 +-127 +-127 +-16 +91 +123 +115 +21 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +123 +123 +33 +-52 +-126 +-127 +-127 +-35 +83 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-33 +83 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +86 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-31 +86 +123 +117 +23 +-60 +-127 +-127 +-13 +95 +123 +118 +24 +-59 +-127 +-127 +-15 +93 +123 +116 +23 +-60 +-127 +-127 +-16 +92 +123 +117 +23 +-60 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +20 +-62 +-127 +-127 +-18 +90 +123 +116 +22 +-61 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +43 +-43 +-119 +-127 +-127 +-25 +91 +123 +123 +123 +39 +-46 +-122 +-127 +-127 +-29 +88 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-30 +86 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +37 +-48 +-124 +-127 +-25 +82 +123 +105 +12 +-70 +-127 +-127 +-25 +84 +123 +108 +16 +-67 +-127 +-127 +-22 +86 +123 +112 +19 +-63 +-127 +-127 +-20 +88 +123 +113 +19 +-63 +-127 +-127 +-19 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +116 +23 +-61 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +44 +-42 +-118 +-127 +-127 +-25 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-28 +88 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-29 +86 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-30 +85 +123 +123 +123 +36 +-48 +-124 +-127 +-24 +82 +123 +105 +13 +-69 +-127 +-127 +-25 +83 +123 +107 +15 +-68 +-127 +-127 +-22 +86 +123 +111 +19 +-64 +-127 +-127 +-20 +88 +123 +112 +19 +-64 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +123 +123 +32 +-53 +-127 +-127 +-127 +-34 +83 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-33 +84 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +86 +123 +116 +23 +-60 +-127 +-127 +-13 +94 +123 +117 +24 +-59 +-127 +-127 +-15 +93 +123 +116 +22 +-61 +-127 +-127 +-17 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-35 +82 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-34 +83 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +116 +23 +-60 +-127 +-127 +-15 +94 +123 +117 +24 +-60 +-127 +-127 +-15 +92 +123 +116 +23 +-60 +-127 +-127 +-16 +92 +123 +116 +23 +-60 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +116 +22 +-61 +-127 +-127 +-17 +91 +123 +116 +23 +-60 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +44 +-41 +-118 +-127 +-127 +-25 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-28 +89 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-30 +87 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-30 +86 +123 +123 +123 +37 +-47 +-123 +-127 +-25 +81 +123 +104 +12 +-70 +-127 +-127 +-25 +83 +123 +108 +15 +-67 +-127 +-127 +-22 +86 +123 +111 +19 +-64 +-127 +-127 +-20 +87 +123 +112 +19 +-64 +-127 +-127 +-19 +89 +123 +112 +19 +-63 +-127 +-127 +-19 +90 +123 +115 +22 +-61 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +43 +-42 +-118 +-127 +-127 +-25 +92 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-27 +89 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-29 +86 +123 +123 +123 +36 +-48 +-124 +-127 +-127 +-31 +85 +123 +123 +123 +37 +-47 +-123 +-127 +-24 +82 +123 +105 +12 +-70 +-127 +-127 +-25 +83 +123 +107 +15 +-67 +-127 +-127 +-21 +86 +123 +112 +19 +-64 +-127 +-127 +-20 +88 +123 +112 +19 +-64 +-127 +-127 +-20 +89 +123 +113 +20 +-63 +-127 +-127 +-18 +89 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +123 +123 +32 +-52 +-127 +-127 +-127 +-35 +82 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-34 +83 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-33 +83 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +115 +22 +-61 +-127 +-127 +-13 +95 +123 +119 +25 +-58 +-127 +-127 +-15 +93 +123 +116 +23 +-60 +-127 +-127 +-16 +92 +123 +116 +22 +-61 +-127 +-127 +-17 +92 +123 +116 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +21 +-61 +-127 +-127 +-16 +92 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-34 +82 +123 +123 +123 +33 +-51 +-126 +-127 +-127 +-33 +83 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-33 +84 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +116 +22 +-61 +-127 +-127 +-14 +93 +123 +118 +24 +-59 +-127 +-127 +-16 +93 +123 +117 +23 +-60 +-127 +-127 +-16 +93 +123 +116 +23 +-60 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-18 +90 +123 +116 +23 +-60 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +43 +-42 +-118 +-127 +-127 +-25 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-28 +88 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-29 +87 +123 +123 +123 +36 +-48 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +37 +-48 +-124 +-127 +-24 +83 +123 +105 +12 +-70 +-127 +-127 +-25 +83 +123 +108 +16 +-67 +-127 +-127 +-22 +87 +123 +112 +19 +-63 +-127 +-127 +-20 +88 +123 +111 +18 +-65 +-127 +-127 +-19 +88 +123 +113 +20 +-63 +-127 +-127 +-19 +89 +123 +115 +22 +-61 +-127 +-127 +-127 +-24 +93 +123 +123 +123 +43 +-42 +-119 +-127 +-127 +-26 +91 +123 +123 +123 +39 +-45 +-121 +-127 +-127 +-28 +88 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-30 +86 +123 +123 +123 +36 +-48 +-124 +-127 +-127 +-30 +85 +123 +123 +123 +37 +-48 +-124 +-127 +-24 +82 +123 +105 +13 +-69 +-127 +-127 +-25 +83 +123 +108 +15 +-67 +-127 +-127 +-23 +85 +123 +111 +18 +-64 +-127 +-127 +-21 +88 +123 +111 +18 +-64 +-127 +-127 +-20 +89 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-34 +83 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-33 +84 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-32 +84 +123 +116 +22 +-61 +-127 +-127 +-14 +94 +123 +117 +24 +-59 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +123 +123 +33 +-51 +-126 +-127 +-127 +-34 +83 +123 +123 +123 +33 +-51 +-126 +-127 +-127 +-33 +84 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-31 +86 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +86 +123 +117 +23 +-60 +-127 +-127 +-13 +94 +123 +118 +25 +-58 +-127 +-127 +-15 +93 +123 +116 +23 +-60 +-127 +-127 +-16 +92 +123 +117 +23 +-60 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +117 +23 +-60 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +43 +-42 +-118 +-127 +-127 +-25 +91 +123 +123 +123 +39 +-46 +-122 +-127 +-127 +-29 +87 +123 +123 +123 +37 +-47 +-123 +-127 +-127 +-30 +86 +123 +123 +123 +36 +-48 +-124 +-127 +-127 +-31 +86 +123 +123 +123 +37 +-48 +-124 +-127 +-25 +82 +123 +105 +12 +-70 +-127 +-127 +-25 +83 +123 +108 +16 +-67 +-127 +-127 +-22 +87 +123 +112 +19 +-64 +-127 +-127 +-20 +88 +123 +113 +20 +-63 +-127 +-127 +-19 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +116 +23 +-60 +-127 +-127 +-127 +-22 +94 +123 +123 +123 +43 +-42 +-118 +-127 +-127 +-24 +92 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-27 +89 +123 +123 +123 +38 +-46 +-122 +-127 +-127 +-29 +87 +123 +123 +123 +36 +-48 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +37 +-48 +-123 +-127 +-25 +82 +123 +104 +12 +-70 +-127 +-127 +-25 +82 +123 +108 +15 +-67 +-127 +-127 +-22 +86 +123 +111 +18 +-65 +-127 +-127 +-21 +87 +123 +111 +19 +-64 +-127 +-127 +-19 +88 +123 +113 +20 +-63 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +123 +123 +32 +-53 +-127 +-127 +-127 +-35 +82 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-33 +83 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-34 +83 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +116 +22 +-61 +-127 +-127 +-15 +94 +123 +118 +24 +-59 +-127 +-127 +-15 +92 +123 +116 +23 +-60 +-127 +-127 +-16 +92 +123 +116 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-34 +83 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-33 +84 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +36 +-50 +-125 +-127 +-127 +-31 +86 +123 +116 +23 +-60 +-127 +-127 +-14 +94 +123 +117 +24 +-59 +-127 +-127 +-15 +93 +123 +117 +23 +-60 +-127 +-127 +-17 +92 +123 +116 +22 +-60 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-18 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +90 +123 +116 +23 +-60 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +43 +-42 +-118 +-127 +-127 +-25 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-28 +88 +123 +123 +123 +37 +-47 +-123 +-127 +-127 +-29 +86 +123 +123 +123 +36 +-48 +-124 +-127 +-127 +-31 +85 +123 +123 +123 +37 +-48 +-123 +-127 +-25 +82 +123 +105 +12 +-70 +-127 +-127 +-26 +82 +123 +108 +15 +-67 +-127 +-127 +-22 +86 +123 +112 +19 +-64 +-127 +-127 +-21 +88 +123 +111 +18 +-65 +-127 +-127 +-20 +89 +123 +113 +20 +-63 +-127 +-127 +-19 +89 +123 +115 +22 +-61 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +43 +-42 +-119 +-127 +-127 +-25 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-28 +88 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-29 +87 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-30 +85 +123 +123 +123 +37 +-48 +-123 +-127 +-24 +83 +123 +105 +12 +-70 +-127 +-127 +-25 +84 +123 +108 +15 +-67 +-127 +-127 +-22 +86 +123 +112 +19 +-64 +-127 +-127 +-20 +89 +123 +112 +19 +-64 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +114 +20 +-62 +-127 +-127 +-18 +90 +123 +123 +123 +32 +-52 +-127 +-127 +-127 +-35 +82 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-34 +83 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-33 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +86 +123 +116 +23 +-61 +-127 +-127 +-14 +94 +123 +118 +24 +-59 +-127 +-127 +-15 +93 +123 +117 +24 +-59 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-16 +92 +123 +116 +22 +-61 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-33 +84 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-33 +84 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-31 +85 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +85 +123 +116 +23 +-60 +-127 +-127 +-14 +94 +123 +117 +24 +-60 +-127 +-127 +-15 +93 +123 +115 +22 +-61 +-127 +-127 +-18 +91 +123 +116 +22 +-61 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +20 +-62 +-127 +-127 +-17 +90 +123 +115 +22 +-61 +-127 +-127 +-127 +-24 +92 +123 +123 +123 +43 +-43 +-119 +-127 +-127 +-26 +90 +123 +123 +123 +39 +-46 +-122 +-127 +-127 +-28 +88 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-29 +87 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-30 +87 +123 +123 +123 +38 +-47 +-123 +-127 +-23 +83 +123 +106 +14 +-68 +-127 +-127 +-24 +85 +123 +109 +16 +-66 +-127 +-127 +-21 +87 +123 +113 +20 +-63 +-127 +-127 +-20 +88 +123 +111 +18 +-64 +-127 +-127 +-19 +89 +123 +113 +19 +-63 +-127 +-127 +-19 +89 +123 +116 +22 +-61 +-127 +-127 +-127 +-24 +93 +123 +123 +123 +42 +-43 +-119 +-127 +-127 +-25 +90 +123 +123 +123 +39 +-46 +-122 +-127 +-127 +-28 +88 +123 +123 +123 +37 +-47 +-123 +-127 +-127 +-30 +87 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-31 +85 +123 +123 +123 +37 +-47 +-123 +-127 +-24 +82 +123 +105 +13 +-69 +-127 +-127 +-25 +84 +123 +108 +15 +-67 +-127 +-127 +-22 +86 +123 +112 +19 +-64 +-127 +-127 +-20 +88 +123 +112 +19 +-64 +-127 +-127 +-19 +89 +123 +113 +20 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-34 +82 +123 +123 +123 +32 +-52 +-127 +-127 +-127 +-34 +83 +123 +123 +123 +35 +-50 +-126 +-127 +-127 +-34 +83 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-33 +83 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-33 +85 +123 +115 +22 +-61 +-127 +-127 +-14 +94 +123 +117 +24 +-59 +-127 +-127 +-15 +93 +123 +116 +22 +-61 +-127 +-127 +-16 +92 +123 +116 +22 +-61 +-127 +-127 +-16 +92 +123 +116 +22 +-61 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +92 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-34 +83 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +37 +-49 +-124 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +116 +23 +-60 +-127 +-127 +-15 +93 +123 +117 +24 +-59 +-127 +-127 +-16 +92 +123 +116 +22 +-61 +-127 +-127 +-17 +91 +123 +116 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +117 +24 +-60 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +43 +-42 +-118 +-127 +-127 +-24 +90 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-27 +88 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-29 +87 +123 +123 +123 +36 +-48 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +37 +-48 +-124 +-127 +-24 +82 +123 +105 +13 +-69 +-127 +-127 +-24 +84 +123 +108 +16 +-67 +-127 +-127 +-22 +87 +123 +112 +19 +-64 +-127 +-127 +-20 +88 +123 +112 +19 +-63 +-127 +-127 +-19 +90 +123 +114 +20 +-62 +-127 +-127 +-19 +90 +123 +115 +22 +-61 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +43 +-42 +-119 +-127 +-127 +-25 +91 +123 +123 +123 +39 +-45 +-121 +-127 +-127 +-28 +88 +123 +123 +123 +37 +-47 +-123 +-127 +-127 +-29 +87 +123 +123 +123 +36 +-48 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +37 +-47 +-123 +-127 +-24 +82 +123 +105 +12 +-70 +-127 +-127 +-25 +83 +123 +108 +15 +-67 +-127 +-127 +-23 +86 +123 +111 +18 +-65 +-127 +-127 +-20 +87 +123 +111 +18 +-64 +-127 +-127 +-20 +89 +123 +113 +20 +-63 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +123 +123 +32 +-52 +-127 +-127 +-127 +-34 +82 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-33 +83 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +116 +23 +-60 +-127 +-127 +-13 +95 +123 +118 +24 +-59 +-127 +-127 +-16 +93 +123 +116 +22 +-61 +-127 +-127 +-16 +92 +123 +115 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-18 +91 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-34 +83 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-32 +85 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-31 +85 +123 +116 +23 +-60 +-127 +-127 +-14 +94 +123 +117 +23 +-60 +-127 +-127 +-15 +92 +123 +116 +23 +-60 +-127 +-127 +-17 +92 +123 +116 +23 +-60 +-127 +-127 +-18 +91 +123 +115 +21 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +115 +22 +-61 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +43 +-42 +-118 +-127 +-127 +-25 +91 +123 +123 +123 +39 +-45 +-121 +-127 +-127 +-28 +88 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-29 +87 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-30 +86 +123 +123 +123 +37 +-47 +-123 +-127 +-24 +83 +123 +105 +13 +-69 +-127 +-127 +-25 +84 +123 +109 +16 +-66 +-127 +-127 +-21 +87 +123 +113 +20 +-63 +-127 +-127 +-20 +89 +123 +112 +19 +-63 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-19 +90 +123 +115 +22 +-61 +-127 +-127 +-127 +-24 +93 +123 +123 +123 +43 +-42 +-119 +-127 +-127 +-25 +90 +123 +123 +123 +39 +-46 +-122 +-127 +-127 +-28 +88 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-29 +86 +123 +123 +123 +36 +-48 +-124 +-127 +-127 +-30 +85 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-31 +86 +123 +123 +123 +37 +-47 +-123 +-127 +-24 +82 +123 +105 +13 +-69 +-127 +-127 +-25 +83 +123 +108 +16 +-67 +-127 +-127 +-22 +87 +123 +112 +19 +-64 +-127 +-127 +-19 +89 +123 +112 +19 +-64 +-127 +-127 +-20 +88 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-19 +90 +123 +113 +20 +-62 +-127 +-127 +-18 +89 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-18 +91 +123 +123 +123 +33 +-51 +-126 +-127 +-127 +-34 +82 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-33 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-32 +84 +123 +116 +23 +-60 +-127 +-127 +-15 +93 +123 +117 +23 +-60 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-16 +92 +123 +116 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-61 +-127 +-127 +-18 +90 +123 +116 +22 +-61 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +43 +-42 +-118 +-127 +-127 +-25 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-28 +88 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-29 +86 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +37 +-48 +-124 +-127 +-24 +82 +123 +105 +12 +-70 +-127 +-127 +-25 +84 +123 +107 +15 +-67 +-127 +-127 +-22 +86 +123 +113 +19 +-63 +-127 +-127 +-21 +87 +123 +112 +19 +-64 +-127 +-127 +-20 +89 +123 +113 +20 +-63 +-127 +-127 +-19 +90 +123 +115 +22 +-61 +-127 +-127 +-127 +-24 +94 +123 +123 +123 +43 +-42 +-119 +-127 +-127 +-25 +90 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-28 +88 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-30 +87 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-30 +86 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-31 +86 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +86 +123 +123 +123 +36 +-48 +-124 +-127 +-127 +-30 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-30 +85 +123 +123 +123 +37 +-47 +-123 +-127 +-24 +82 +123 +104 +12 +-70 +-127 +-127 +-26 +84 +123 +107 +15 +-67 +-127 +-127 +-23 +85 +123 +111 +18 +-65 +-127 +-127 +-21 +87 +123 +111 +18 +-65 +-127 +-127 +-20 +88 +123 +112 +19 +-64 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-19 +90 +123 +113 +20 +-63 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +115 +22 +-61 +-127 +-127 +-17 +92 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-34 +83 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-33 +83 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +86 +123 +116 +23 +-60 +-127 +-127 +-14 +95 +123 +118 +24 +-59 +-127 +-127 +-15 +93 +123 +117 +23 +-60 +-127 +-127 +-16 +92 +123 +116 +23 +-60 +-127 +-127 +-17 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +116 +23 +-60 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +43 +-42 +-118 +-127 +-127 +-26 +90 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-29 +87 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-30 +87 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-31 +85 +123 +123 +123 +37 +-48 +-123 +-127 +-24 +82 +123 +105 +12 +-70 +-127 +-127 +-24 +84 +123 +109 +16 +-66 +-127 +-127 +-21 +88 +123 +112 +19 +-64 +-127 +-127 +-20 +88 +123 +112 +19 +-64 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-19 +90 +123 +115 +22 +-61 +-127 +-127 +-127 +-24 +94 +123 +123 +123 +43 +-42 +-119 +-127 +-127 +-26 +90 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-28 +87 +123 +123 +123 +37 +-47 +-123 +-127 +-127 +-30 +86 +123 +123 +123 +36 +-48 +-124 +-127 +-127 +-29 +85 +123 +123 +123 +38 +-47 +-123 +-127 +-24 +83 +123 +106 +13 +-69 +-127 +-127 +-25 +84 +123 +109 +17 +-66 +-127 +-127 +-21 +88 +123 +112 +19 +-64 +-127 +-127 +-19 +89 +123 +112 +19 +-64 +-127 +-127 +-19 +89 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-34 +82 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-33 +83 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-33 +84 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-33 +84 +123 +123 +123 +34 +-50 +-125 +-127 +-127 +-32 +84 +123 +115 +22 +-61 +-127 +-127 +-15 +93 +123 +117 +23 +-60 +-127 +-127 +-16 +92 +123 +116 +23 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +92 +123 +116 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-16 +92 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-34 +83 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-33 +83 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-33 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +116 +22 +-61 +-127 +-127 +-14 +93 +123 +118 +24 +-59 +-127 +-127 +-15 +92 +123 +117 +24 +-60 +-127 +-127 +-16 +92 +123 +116 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +21 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +116 +22 +-61 +-127 +-127 +-127 +-23 +93 +123 +123 +123 +42 +-43 +-119 +-127 +-127 +-25 +90 +123 +123 +123 +39 +-45 +-121 +-127 +-127 +-29 +89 +123 +123 +123 +37 +-47 +-123 +-127 +-127 +-29 +86 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-30 +86 +123 +123 +123 +38 +-47 +-123 +-127 +-24 +83 +123 +105 +12 +-70 +-127 +-127 +-24 +84 +123 +109 +16 +-66 +-127 +-127 +-21 +87 +123 +112 +19 +-64 +-127 +-127 +-20 +88 +123 +112 +19 +-63 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +115 +21 +-61 +-127 +-127 +-127 +-24 +94 +123 +123 +123 +43 +-42 +-118 +-127 +-127 +-25 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-28 +88 +123 +123 +123 +37 +-47 +-123 +-127 +-127 +-30 +86 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-30 +85 +123 +123 +123 +37 +-48 +-123 +-127 +-24 +82 +123 +104 +12 +-70 +-127 +-127 +-25 +84 +123 +108 +15 +-67 +-127 +-127 +-22 +86 +123 +111 +19 +-64 +-127 +-127 +-20 +88 +123 +111 +18 +-64 +-127 +-127 +-20 +89 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-19 +90 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-34 +83 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-33 +84 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-33 +84 +123 +115 +21 +-61 +-127 +-127 +-15 +93 +123 +117 +24 +-59 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-34 +83 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +86 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-31 +85 +123 +116 +23 +-60 +-127 +-127 +-14 +94 +123 +117 +24 +-59 +-127 +-127 +-15 +93 +123 +116 +22 +-61 +-127 +-127 +-16 +91 +123 +116 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +117 +23 +-60 +-127 +-127 +-127 +-22 +94 +123 +123 +123 +43 +-42 +-118 +-127 +-127 +-26 +90 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-28 +88 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-29 +87 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-29 +86 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-48 +-124 +-127 +-25 +82 +123 +105 +12 +-70 +-127 +-127 +-26 +83 +123 +108 +15 +-67 +-127 +-127 +-23 +86 +123 +111 +18 +-64 +-127 +-127 +-21 +87 +123 +111 +18 +-65 +-127 +-127 +-20 +89 +123 +112 +19 +-63 +-127 +-127 +-18 +90 +123 +115 +22 +-61 +-127 +-127 +-127 +-23 +93 +123 +123 +123 +43 +-42 +-119 +-127 +-127 +-25 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-28 +88 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-30 +86 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +38 +-47 +-123 +-127 +-25 +82 +123 +104 +12 +-70 +-127 +-127 +-25 +83 +123 +108 +15 +-67 +-127 +-127 +-22 +87 +123 +112 +19 +-64 +-127 +-127 +-20 +88 +123 +112 +19 +-63 +-127 +-127 +-19 +89 +123 +112 +19 +-63 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +114 +20 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +92 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-33 +83 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +85 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-33 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +117 +23 +-60 +-127 +-127 +-14 +94 +123 +117 +23 +-60 +-127 +-127 +-15 +93 +123 +116 +22 +-61 +-127 +-127 +-16 +92 +123 +116 +23 +-60 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +116 +23 +-60 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +43 +-42 +-119 +-127 +-127 +-26 +90 +123 +123 +123 +39 +-45 +-121 +-127 +-127 +-29 +88 +123 +123 +123 +37 +-47 +-123 +-127 +-127 +-30 +86 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-30 +85 +123 +123 +123 +37 +-48 +-124 +-127 +-24 +83 +123 +104 +12 +-70 +-127 +-127 +-24 +84 +123 +109 +16 +-66 +-127 +-127 +-22 +87 +123 +112 +19 +-63 +-127 +-127 +-20 +88 +123 +112 +19 +-63 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +115 +22 +-61 +-127 +-127 +-127 +-24 +93 +123 +123 +123 +42 +-43 +-119 +-127 +-127 +-26 +90 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-28 +88 +123 +123 +123 +37 +-47 +-123 +-127 +-127 +-30 +86 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-30 +86 +123 +123 +123 +37 +-47 +-123 +-127 +-24 +82 +123 +105 +13 +-69 +-127 +-127 +-25 +84 +123 +109 +16 +-67 +-127 +-127 +-21 +87 +123 +112 +19 +-64 +-127 +-127 +-20 +89 +123 +112 +19 +-63 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +113 +20 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-18 +91 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-34 +83 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-33 +83 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-33 +83 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-33 +85 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-32 +86 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +86 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +84 +123 +116 +23 +-60 +-127 +-127 +-15 +93 +123 +117 +24 +-60 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +92 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +116 +22 +-61 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +43 +-42 +-118 +-127 +-127 +-24 +91 +123 +123 +123 +39 +-45 +-121 +-127 +-127 +-29 +88 +123 +123 +123 +37 +-47 +-123 +-127 +-127 +-30 +87 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +37 +-48 +-123 +-127 +-23 +83 +123 +105 +12 +-70 +-127 +-127 +-24 +84 +123 +109 +16 +-66 +-127 +-127 +-21 +87 +123 +112 +19 +-63 +-127 +-127 +-21 +88 +123 +112 +19 +-64 +-127 +-127 +-20 +89 +123 +113 +20 +-63 +-127 +-127 +-19 +89 +123 +116 +23 +-60 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +115 +21 +-62 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +123 +123 +32 +-53 +-127 +-127 +-127 +-36 +82 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-34 +83 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-33 +84 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +116 +23 +-60 +-127 +-127 +-13 +94 +123 +118 +24 +-59 +-127 +-127 +-16 +93 +123 +116 +22 +-61 +-127 +-127 +-16 +91 +123 +116 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +21 +-61 +-127 +-127 +-17 +91 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-34 +82 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-33 +83 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +115 +22 +-61 +-127 +-127 +-15 +93 +123 +117 +23 +-60 +-127 +-127 +-15 +92 +123 +116 +23 +-60 +-127 +-127 +-17 +92 +123 +116 +23 +-60 +-127 +-127 +-16 +91 +123 +116 +23 +-60 +-127 +-127 +-17 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +92 +123 +117 +24 +-59 +-127 +-127 +-127 +-22 +95 +123 +123 +123 +44 +-41 +-118 +-127 +-127 +-24 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-27 +89 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-29 +87 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-30 +86 +123 +123 +123 +37 +-48 +-124 +-127 +-24 +82 +123 +104 +12 +-70 +-127 +-127 +-24 +84 +123 +108 +16 +-67 +-127 +-127 +-22 +87 +123 +112 +19 +-64 +-127 +-127 +-21 +87 +123 +111 +18 +-64 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +116 +22 +-61 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +44 +-42 +-118 +-127 +-127 +-25 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-27 +88 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-29 +87 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +38 +-47 +-123 +-127 +-23 +83 +123 +105 +13 +-69 +-127 +-127 +-25 +84 +123 +108 +16 +-67 +-127 +-127 +-21 +87 +123 +112 +19 +-64 +-127 +-127 +-20 +88 +123 +112 +19 +-63 +-127 +-127 +-19 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-19 +90 +123 +123 +123 +32 +-52 +-127 +-127 +-127 +-35 +81 +123 +123 +123 +32 +-52 +-127 +-127 +-127 +-33 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-33 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +115 +22 +-61 +-127 +-127 +-15 +93 +123 +117 +23 +-60 +-127 +-127 +-16 +92 +123 +116 +22 +-61 +-127 +-127 +-16 +92 +123 +116 +23 +-60 +-127 +-127 +-17 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-18 +92 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-34 +82 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-33 +83 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-33 +83 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-33 +83 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-31 +86 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-31 +86 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-31 +85 +123 +116 +23 +-60 +-127 +-127 +-15 +94 +123 +117 +23 +-60 +-127 +-127 +-16 +92 +123 +116 +23 +-60 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +92 +123 +115 +21 +-61 +-127 +-127 +-18 +91 +123 +116 +22 +-61 +-127 +-127 +-127 +-23 +95 +123 +123 +123 +44 +-41 +-118 +-127 +-127 +-24 +92 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-27 +89 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-28 +88 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-30 +86 +123 +123 +123 +38 +-47 +-123 +-127 +-24 +82 +123 +105 +13 +-69 +-127 +-127 +-25 +83 +123 +108 +15 +-67 +-127 +-127 +-22 +86 +123 +112 +19 +-63 +-127 +-127 +-21 +88 +123 +111 +18 +-64 +-127 +-127 +-20 +88 +123 +113 +20 +-63 +-127 +-127 +-19 +90 +123 +115 +21 +-62 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-18 +91 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-34 +83 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-33 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-33 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-126 +-127 +-127 +-32 +85 +123 +115 +22 +-61 +-127 +-127 +-15 +93 +123 +118 +24 +-59 +-127 +-127 +-15 +93 +123 +116 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-34 +82 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-32 +84 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +37 +-49 +-124 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-126 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +116 +22 +-61 +-127 +-127 +-14 +93 +123 +117 +23 +-60 +-127 +-127 +-16 +92 +123 +116 +22 +-61 +-127 +-127 +-17 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +116 +22 +-61 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +116 +23 +-60 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +117 +23 +-60 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +43 +-42 +-119 +-127 +-127 +-25 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-28 +88 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-29 +87 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +37 +-47 +-123 +-127 +-24 +83 +123 +104 +12 +-70 +-127 +-127 +-25 +84 +123 +109 +16 +-66 +-127 +-127 +-22 +87 +123 +112 +19 +-64 +-127 +-127 +-20 +88 +123 +112 +19 +-64 +-127 +-127 +-19 +89 +123 +113 +20 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-34 +83 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-33 +84 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +115 +21 +-62 +-127 +-127 +-14 +93 +123 +117 +24 +-59 +-127 +-127 +-15 +93 +123 +116 +23 +-60 +-127 +-127 +-16 +92 +123 +115 +21 +-61 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-34 +82 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-33 +84 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-33 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +116 +23 +-60 +-127 +-127 +-14 +95 +123 +117 +24 +-59 +-127 +-127 +-15 +93 +123 +117 +23 +-60 +-127 +-127 +-16 +93 +123 +116 +23 +-60 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-16 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +92 +123 +117 +23 +-60 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +44 +-42 +-118 +-127 +-127 +-25 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-28 +89 +123 +123 +123 +37 +-47 +-123 +-127 +-127 +-29 +87 +123 +123 +123 +36 +-48 +-124 +-127 +-127 +-30 +85 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-31 +84 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-48 +-124 +-127 +-25 +82 +123 +105 +12 +-70 +-127 +-127 +-26 +83 +123 +108 +15 +-67 +-127 +-127 +-22 +86 +123 +112 +19 +-64 +-127 +-127 +-20 +88 +123 +112 +19 +-64 +-127 +-127 +-19 +90 +123 +113 +20 +-63 +-127 +-127 +-19 +90 +123 +115 +22 +-61 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +43 +-42 +-119 +-127 +-127 +-25 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-28 +89 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-30 +87 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +38 +-47 +-123 +-127 +-24 +82 +123 +105 +13 +-69 +-127 +-127 +-24 +84 +123 +108 +16 +-67 +-127 +-127 +-22 +87 +123 +111 +18 +-65 +-127 +-127 +-20 +87 +123 +112 +19 +-64 +-127 +-127 +-19 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +114 +20 +-62 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +20 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-34 +83 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +37 +-49 +-124 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +86 +123 +117 +23 +-60 +-127 +-127 +-14 +94 +123 +118 +24 +-59 +-127 +-127 +-16 +92 +123 +116 +22 +-61 +-127 +-127 +-16 +92 +123 +116 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +115 +22 +-61 +-127 +-127 +-19 +90 +123 +114 +21 +-62 +-127 +-127 +-19 +89 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-19 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +116 +22 +-61 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +92 +123 +115 +21 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-16 +92 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-34 +83 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +86 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +115 +22 +-61 +-127 +-127 +-15 +94 +123 +117 +24 +-59 +-127 +-127 +-16 +92 +123 +116 +23 +-60 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-34 +82 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-33 +84 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-31 +86 +123 +123 +123 +38 +-48 +-123 +-127 +-127 +-32 +86 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-32 +86 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +86 +123 +116 +23 +-60 +-127 +-127 +-14 +94 +123 +118 +24 +-59 +-127 +-127 +-15 +93 +123 +116 +23 +-60 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +90 +123 +115 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +20 +-62 +-127 +-127 +-18 +90 +123 +115 +22 +-61 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-19 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +89 +123 +116 +22 +-61 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +116 +23 +-60 +-127 +-127 +-127 +-24 +94 +123 +123 +123 +43 +-42 +-118 +-127 +-127 +-25 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-28 +88 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-29 +87 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +38 +-47 +-123 +-127 +-24 +82 +123 +105 +12 +-70 +-127 +-127 +-25 +84 +123 +108 +15 +-67 +-127 +-127 +-22 +86 +123 +112 +19 +-64 +-127 +-127 +-20 +88 +123 +112 +19 +-64 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-34 +83 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-33 +83 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +115 +22 +-61 +-127 +-127 +-15 +94 +123 +117 +24 +-59 +-127 +-127 +-15 +93 +123 +116 +23 +-60 +-127 +-127 +-17 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +21 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-34 +82 +123 +123 +123 +33 +-51 +-126 +-127 +-127 +-33 +83 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-33 +84 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +86 +123 +117 +23 +-60 +-127 +-127 +-14 +94 +123 +118 +24 +-59 +-127 +-127 +-15 +93 +123 +117 +23 +-60 +-127 +-127 +-16 +92 +123 +116 +23 +-60 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +116 +23 +-60 +-127 +-127 +-127 +-23 +93 +123 +123 +123 +43 +-42 +-118 +-127 +-127 +-25 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-28 +88 +123 +123 +123 +37 +-47 +-123 +-127 +-127 +-29 +86 +123 +123 +123 +36 +-48 +-124 +-127 +-127 +-31 +86 +123 +123 +123 +37 +-48 +-123 +-127 +-24 +83 +123 +105 +12 +-70 +-127 +-127 +-25 +84 +123 +108 +16 +-67 +-127 +-127 +-22 +86 +123 +112 +19 +-64 +-127 +-127 +-20 +88 +123 +112 +19 +-64 +-127 +-127 +-20 +89 +123 +113 +19 +-63 +-127 +-127 +-19 +89 +123 +115 +21 +-62 +-127 +-127 +-127 +-24 +93 +123 +123 +123 +43 +-43 +-119 +-127 +-127 +-25 +91 +123 +123 +123 +39 +-45 +-121 +-127 +-127 +-28 +88 +123 +123 +123 +39 +-46 +-122 +-127 +-127 +-30 +87 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-30 +86 +123 +123 +123 +38 +-46 +-122 +-127 +-24 +83 +123 +105 +13 +-69 +-127 +-127 +-25 +83 +123 +108 +16 +-67 +-127 +-127 +-22 +86 +123 +111 +18 +-65 +-127 +-127 +-20 +88 +123 +112 +19 +-64 +-127 +-127 +-20 +89 +123 +113 +19 +-63 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +123 +123 +33 +-52 +-126 +-127 +-127 +-34 +83 +123 +123 +123 +33 +-51 +-126 +-127 +-127 +-33 +84 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-33 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +86 +123 +117 +23 +-60 +-127 +-127 +-14 +94 +123 +118 +24 +-59 +-127 +-127 +-15 +93 +123 +117 +24 +-60 +-127 +-127 +-16 +92 +123 +116 +23 +-60 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +43 +-42 +-118 +-127 +-127 +-25 +90 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-28 +88 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-29 +87 +123 +123 +123 +36 +-48 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +37 +-48 +-123 +-127 +-24 +82 +123 +105 +12 +-70 +-127 +-127 +-24 +84 +123 +108 +15 +-67 +-127 +-127 +-22 +87 +123 +112 +19 +-64 +-127 +-127 +-20 +88 +123 +111 +19 +-64 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-18 +91 +123 +116 +23 +-60 +-127 +-127 +-127 +-24 +94 +123 +123 +123 +44 +-42 +-118 +-127 +-127 +-24 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-28 +87 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-29 +86 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-31 +85 +123 +123 +123 +37 +-48 +-123 +-127 +-24 +82 +123 +105 +12 +-70 +-127 +-127 +-25 +84 +123 +108 +15 +-67 +-127 +-127 +-21 +87 +123 +112 +19 +-64 +-127 +-127 +-20 +89 +123 +112 +19 +-64 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +115 +21 +-61 +-127 +-127 +-18 +91 +123 +123 +123 +32 +-52 +-127 +-127 +-127 +-34 +83 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-33 +83 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-33 +84 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-33 +84 +123 +115 +22 +-61 +-127 +-127 +-14 +94 +123 +117 +24 +-59 +-127 +-127 +-16 +92 +123 +116 +22 +-61 +-127 +-127 +-16 +91 +123 +115 +21 +-61 +-127 +-127 +-17 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-34 +82 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-33 +84 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-33 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +116 +22 +-60 +-127 +-127 +-14 +94 +123 +118 +24 +-59 +-127 +-127 +-15 +92 +123 +116 +22 +-61 +-127 +-127 +-17 +92 +123 +116 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +117 +24 +-60 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +43 +-42 +-119 +-127 +-127 +-24 +91 +123 +123 +123 +39 +-46 +-122 +-127 +-127 +-28 +88 +123 +123 +123 +37 +-47 +-123 +-127 +-127 +-29 +87 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +37 +-47 +-123 +-127 +-24 +83 +123 +105 +12 +-70 +-127 +-127 +-25 +83 +123 +109 +16 +-66 +-127 +-127 +-22 +87 +123 +113 +20 +-63 +-127 +-127 +-20 +88 +123 +112 +19 +-63 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-19 +90 +123 +114 +21 +-62 +-127 +-127 +-127 +-24 +93 +123 +123 +123 +43 +-42 +-118 +-127 +-127 +-25 +91 +123 +123 +123 +39 +-45 +-121 +-127 +-127 +-28 +88 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +36 +-48 +-124 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-48 +-124 +-127 +-25 +81 +123 +104 +12 +-70 +-127 +-127 +-25 +83 +123 +108 +15 +-67 +-127 +-127 +-23 +86 +123 +111 +18 +-65 +-127 +-127 +-21 +87 +123 +110 +17 +-65 +-127 +-127 +-20 +88 +123 +112 +19 +-63 +-127 +-127 +-19 +89 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +123 +123 +32 +-53 +-127 +-127 +-127 +-35 +83 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-33 +85 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +116 +23 +-60 +-127 +-127 +-14 +94 +123 +118 +24 +-59 +-127 +-127 +-15 +93 +123 +117 +23 +-60 +-127 +-127 +-15 +92 +123 +116 +23 +-60 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-34 +82 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-34 +83 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-33 +84 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +86 +123 +116 +22 +-61 +-127 +-127 +-14 +93 +123 +117 +24 +-60 +-127 +-127 +-16 +92 +123 +116 +23 +-60 +-127 +-127 +-17 +91 +123 +116 +23 +-60 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-18 +91 +123 +115 +21 +-61 +-127 +-127 +-18 +91 +123 +116 +23 +-60 +-127 +-127 +-127 +-22 +94 +123 +123 +123 +44 +-41 +-118 +-127 +-127 +-24 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-28 +89 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-30 +87 +123 +123 +123 +36 +-48 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +36 +-48 +-124 +-127 +-25 +82 +123 +104 +12 +-70 +-127 +-127 +-25 +84 +123 +109 +16 +-66 +-127 +-127 +-22 +87 +123 +113 +20 +-63 +-127 +-127 +-20 +89 +123 +112 +19 +-64 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +116 +23 +-61 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +43 +-42 +-118 +-127 +-127 +-25 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-27 +89 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-29 +87 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-30 +85 +123 +123 +123 +38 +-47 +-123 +-127 +-24 +82 +123 +104 +12 +-70 +-127 +-127 +-25 +83 +123 +108 +16 +-67 +-127 +-127 +-22 +86 +123 +111 +19 +-64 +-127 +-127 +-20 +88 +123 +112 +19 +-64 +-127 +-127 +-19 +90 +123 +113 +20 +-63 +-127 +-127 +-19 +90 +123 +113 +20 +-62 +-127 +-127 +-18 +89 +123 +123 +123 +32 +-52 +-127 +-127 +-127 +-35 +82 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-34 +83 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-33 +84 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +115 +22 +-61 +-127 +-127 +-14 +93 +123 +118 +24 +-59 +-127 +-127 +-15 +93 +123 +116 +23 +-60 +-127 +-127 +-15 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +92 +123 +116 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +21 +-61 +-127 +-127 +-17 +91 +123 +123 +123 +33 +-51 +-126 +-127 +-127 +-34 +82 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-33 +84 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +116 +22 +-61 +-127 +-127 +-14 +94 +123 +117 +24 +-59 +-127 +-127 +-15 +93 +123 +117 +23 +-60 +-127 +-127 +-15 +92 +123 +117 +24 +-59 +-127 +-127 +-17 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-16 +91 +123 +116 +23 +-60 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +43 +-42 +-118 +-127 +-127 +-24 +91 +123 +123 +123 +39 +-46 +-122 +-127 +-127 +-28 +88 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-30 +86 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +37 +-48 +-124 +-127 +-24 +82 +123 +104 +12 +-70 +-127 +-127 +-25 +83 +123 +108 +16 +-67 +-127 +-127 +-22 +86 +123 +113 +19 +-63 +-127 +-127 +-21 +88 +123 +112 +19 +-64 +-127 +-127 +-19 +90 +123 +114 +20 +-62 +-127 +-127 +-18 +90 +123 +115 +22 +-61 +-127 +-127 +-127 +-23 +93 +123 +123 +123 +43 +-43 +-119 +-127 +-127 +-25 +91 +123 +123 +123 +39 +-46 +-121 +-127 +-127 +-28 +88 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-29 +87 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-29 +87 +123 +123 +123 +37 +-48 +-123 +-127 +-24 +83 +123 +105 +13 +-69 +-127 +-127 +-24 +84 +123 +109 +16 +-66 +-127 +-127 +-21 +87 +123 +112 +19 +-64 +-127 +-127 +-20 +88 +123 +113 +19 +-63 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +114 +20 +-62 +-127 +-127 +-18 +89 +123 +123 +123 +32 +-52 +-127 +-127 +-127 +-35 +82 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-33 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-31 +86 +123 +116 +23 +-60 +-127 +-127 +-14 +94 +123 +118 +24 +-59 +-127 +-127 +-14 +93 +123 +116 +23 +-60 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-18 +91 +123 +115 +22 +-61 +-127 +-127 +-18 +90 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-35 +82 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-33 +83 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-34 +83 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-33 +84 +123 +123 +123 +34 +-50 +-125 +-127 +-127 +-32 +84 +123 +116 +22 +-61 +-127 +-127 +-15 +94 +123 +118 +24 +-59 +-127 +-127 +-14 +94 +123 +117 +24 +-60 +-127 +-127 +-15 +93 +123 +117 +24 +-60 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-16 +92 +123 +116 +22 +-61 +-127 +-127 +-17 +91 +123 +116 +23 +-60 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +44 +-41 +-118 +-127 +-127 +-24 +92 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-27 +88 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-29 +86 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +37 +-47 +-123 +-127 +-24 +82 +123 +105 +12 +-70 +-127 +-127 +-25 +84 +123 +108 +16 +-67 +-127 +-127 +-22 +87 +123 +112 +19 +-64 +-127 +-127 +-20 +88 +123 +112 +19 +-64 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-18 +89 +123 +115 +22 +-61 +-127 +-127 +-127 +-24 +93 +123 +123 +123 +43 +-42 +-119 +-127 +-127 +-25 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-28 +89 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-29 +87 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +38 +-47 +-123 +-127 +-24 +82 +123 +105 +12 +-70 +-127 +-127 +-24 +83 +123 +108 +16 +-67 +-127 +-127 +-23 +86 +123 +112 +19 +-64 +-127 +-127 +-21 +88 +123 +111 +18 +-64 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +123 +123 +32 +-52 +-127 +-127 +-127 +-35 +82 +123 +123 +123 +33 +-51 +-126 +-127 +-127 +-33 +83 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +115 +22 +-61 +-127 +-127 +-14 +94 +123 +117 +24 +-59 +-127 +-127 +-15 +93 +123 +116 +22 +-61 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +92 +123 +115 +22 +-61 +-127 +-127 +-16 +91 +123 +115 +21 +-61 +-127 +-127 +-17 +90 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-34 +82 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-33 +83 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-33 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +115 +22 +-61 +-127 +-127 +-15 +93 +123 +117 +24 +-60 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-16 +92 +123 +116 +23 +-60 +-127 +-127 +-17 +91 +123 +115 +21 +-61 +-127 +-127 +-18 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +90 +123 +117 +23 +-60 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +44 +-41 +-118 +-127 +-127 +-24 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-27 +88 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-29 +87 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-31 +86 +123 +123 +123 +37 +-48 +-124 +-127 +-25 +82 +123 +103 +11 +-71 +-127 +-127 +-25 +83 +123 +108 +15 +-67 +-127 +-127 +-23 +86 +123 +111 +18 +-64 +-127 +-127 +-22 +87 +123 +111 +18 +-64 +-127 +-127 +-20 +88 +123 +113 +20 +-63 +-127 +-127 +-19 +90 +123 +115 +22 +-61 +-127 +-127 +-127 +-24 +93 +123 +123 +123 +43 +-42 +-119 +-127 +-127 +-25 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-27 +88 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-29 +87 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-30 +85 +123 +123 +123 +37 +-47 +-123 +-127 +-24 +82 +123 +105 +12 +-70 +-127 +-127 +-25 +84 +123 +108 +16 +-67 +-127 +-127 +-22 +87 +123 +111 +19 +-64 +-127 +-127 +-20 +89 +123 +112 +19 +-64 +-127 +-127 +-19 +89 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-34 +83 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-34 +83 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-33 +84 +123 +123 +123 +33 +-52 +-126 +-127 +-127 +-33 +83 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-33 +84 +123 +114 +21 +-62 +-127 +-127 +-16 +92 +123 +117 +24 +-59 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +92 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-34 +83 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-33 +85 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +116 +23 +-60 +-127 +-127 +-14 +94 +123 +117 +23 +-60 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +92 +123 +116 +23 +-60 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +116 +22 +-61 +-127 +-127 +-127 +-23 +93 +123 +123 +123 +43 +-43 +-119 +-127 +-127 +-25 +90 +123 +123 +123 +39 +-45 +-121 +-127 +-127 +-29 +88 +123 +123 +123 +37 +-47 +-123 +-127 +-127 +-29 +87 +123 +123 +123 +36 +-48 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +37 +-47 +-123 +-127 +-24 +83 +123 +105 +13 +-69 +-127 +-127 +-24 +84 +123 +109 +16 +-66 +-127 +-127 +-21 +88 +123 +114 +20 +-62 +-127 +-127 +-20 +89 +123 +112 +19 +-64 +-127 +-127 +-19 +89 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +116 +22 +-61 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +43 +-42 +-119 +-127 +-127 +-25 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-27 +88 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-29 +86 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +38 +-47 +-123 +-127 +-24 +82 +123 +105 +12 +-70 +-127 +-127 +-25 +84 +123 +108 +15 +-67 +-127 +-127 +-21 +86 +123 +112 +19 +-64 +-127 +-127 +-20 +88 +123 +112 +19 +-64 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +123 +123 +32 +-53 +-127 +-127 +-127 +-35 +81 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-34 +83 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-33 +83 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +116 +22 +-61 +-127 +-127 +-13 +94 +123 +118 +24 +-59 +-127 +-127 +-15 +93 +123 +117 +23 +-60 +-127 +-127 +-16 +91 +123 +116 +23 +-60 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +90 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-34 +82 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-33 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-33 +84 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-33 +84 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-32 +84 +123 +115 +22 +-61 +-127 +-127 +-15 +94 +123 +116 +23 +-60 +-127 +-127 +-15 +92 +123 +116 +23 +-60 +-127 +-127 +-16 +92 +123 +116 +23 +-60 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +116 +23 +-60 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +43 +-42 +-118 +-127 +-127 +-25 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-28 +88 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-29 +86 +123 +123 +123 +37 +-47 +-123 +-127 +-127 +-30 +86 +123 +123 +123 +38 +-47 +-123 +-127 +-24 +82 +123 +105 +13 +-69 +-127 +-127 +-25 +84 +123 +109 +16 +-66 +-127 +-127 +-22 +86 +123 +113 +20 +-63 +-127 +-127 +-20 +88 +123 +112 +19 +-63 +-127 +-127 +-19 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +116 +22 +-61 +-127 +-127 +-127 +-24 +93 +123 +123 +123 +42 +-43 +-119 +-127 +-127 +-25 +90 +123 +123 +123 +39 +-46 +-122 +-127 +-127 +-28 +87 +123 +123 +123 +37 +-47 +-123 +-127 +-127 +-30 +86 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-32 +85 +123 +123 +123 +37 +-47 +-123 +-127 +-25 +82 +123 +104 +12 +-70 +-127 +-127 +-25 +84 +123 +108 +15 +-67 +-127 +-127 +-22 +86 +123 +111 +18 +-65 +-127 +-127 +-20 +87 +123 +111 +18 +-64 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-19 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +123 +123 +32 +-53 +-127 +-127 +-127 +-35 +82 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-33 +83 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +115 +22 +-61 +-127 +-127 +-13 +94 +123 +118 +25 +-59 +-127 +-127 +-15 +94 +123 +116 +23 +-60 +-127 +-127 +-15 +92 +123 +115 +22 +-61 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-16 +91 +123 +123 +123 +33 +-51 +-126 +-127 +-127 +-34 +83 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +85 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +116 +22 +-61 +-127 +-127 +-14 +94 +123 +117 +24 +-59 +-127 +-127 +-15 +93 +123 +116 +22 +-61 +-127 +-127 +-15 +92 +123 +116 +23 +-60 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +116 +23 +-60 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +43 +-42 +-118 +-127 +-127 +-25 +91 +123 +123 +123 +39 +-46 +-122 +-127 +-127 +-28 +87 +123 +123 +123 +37 +-47 +-123 +-127 +-127 +-30 +86 +123 +123 +123 +36 +-48 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +37 +-48 +-124 +-127 +-24 +82 +123 +104 +12 +-70 +-127 +-127 +-25 +84 +123 +108 +15 +-67 +-127 +-127 +-22 +86 +123 +112 +19 +-64 +-127 +-127 +-21 +88 +123 +112 +19 +-63 +-127 +-127 +-18 +89 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +116 +23 +-60 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +43 +-42 +-119 +-127 +-127 +-25 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-28 +88 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-30 +86 +123 +123 +123 +36 +-48 +-124 +-127 +-127 +-30 +85 +123 +123 +123 +37 +-47 +-123 +-127 +-24 +82 +123 +105 +13 +-69 +-127 +-127 +-25 +84 +123 +108 +16 +-67 +-127 +-127 +-22 +87 +123 +112 +19 +-64 +-127 +-127 +-19 +88 +123 +112 +19 +-64 +-127 +-127 +-20 +89 +123 +112 +19 +-63 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-34 +83 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-33 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-33 +84 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +115 +22 +-61 +-127 +-127 +-14 +93 +123 +117 +23 +-60 +-127 +-127 +-15 +92 +123 +116 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-61 +-127 +-127 +-17 +92 +123 +115 +21 +-62 +-127 +-127 +-18 +91 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-34 +82 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-33 +85 +123 +123 +123 +37 +-49 +-124 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-31 +85 +123 +117 +23 +-60 +-127 +-127 +-14 +94 +123 +117 +24 +-60 +-127 +-127 +-14 +93 +123 +117 +23 +-60 +-127 +-127 +-15 +92 +123 +117 +23 +-60 +-127 +-127 +-17 +91 +123 +115 +21 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +116 +23 +-60 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +44 +-42 +-118 +-127 +-127 +-25 +91 +123 +123 +123 +39 +-45 +-122 +-127 +-127 +-28 +88 +123 +123 +123 +37 +-47 +-123 +-127 +-127 +-30 +87 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +37 +-48 +-123 +-127 +-24 +82 +123 +105 +13 +-69 +-127 +-127 +-25 +84 +123 +108 +16 +-67 +-127 +-127 +-22 +86 +123 +113 +19 +-63 +-127 +-127 +-20 +88 +123 +111 +19 +-64 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-19 +90 +123 +115 +22 +-61 +-127 +-127 +-127 +-25 +93 +123 +123 +123 +42 +-43 +-119 +-127 +-127 +-26 +91 +123 +123 +123 +39 +-46 +-122 +-127 +-127 +-28 +88 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-29 +87 +123 +123 +123 +36 +-48 +-124 +-127 +-127 +-29 +86 +123 +123 +123 +38 +-47 +-123 +-127 +-24 +82 +123 +104 +12 +-70 +-127 +-127 +-25 +83 +123 +108 +15 +-67 +-127 +-127 +-22 +86 +123 +111 +18 +-65 +-127 +-127 +-21 +87 +123 +112 +19 +-64 +-127 +-127 +-20 +89 +123 +113 +20 +-63 +-127 +-127 +-18 +89 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +123 +123 +32 +-52 +-127 +-127 +-127 +-35 +82 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-33 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +86 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-31 +86 +123 +117 +23 +-60 +-127 +-127 +-13 +95 +123 +118 +24 +-59 +-127 +-127 +-15 +94 +123 +117 +23 +-60 +-127 +-127 +-15 +92 +123 +116 +23 +-60 +-127 +-127 +-16 +93 +123 +115 +22 +-61 +-127 +-127 +-17 +92 +123 +115 +22 +-61 +-127 +-127 +-16 +92 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-33 +83 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-33 +84 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-33 +84 +123 +115 +21 +-62 +-127 +-127 +-15 +92 +123 +116 +23 +-60 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +116 +23 +-60 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +43 +-42 +-119 +-127 +-127 +-25 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-27 +89 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-29 +88 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-30 +86 +123 +123 +123 +37 +-48 +-123 +-127 +-24 +83 +123 +105 +13 +-69 +-127 +-127 +-24 +84 +123 +108 +16 +-67 +-127 +-127 +-21 +87 +123 +113 +19 +-63 +-127 +-127 +-20 +87 +123 +112 +19 +-64 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-19 +90 +123 +115 +22 +-61 +-127 +-127 +-127 +-24 +93 +123 +123 +123 +42 +-43 +-119 +-127 +-127 +-26 +90 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-28 +87 +123 +123 +123 +37 +-47 +-123 +-127 +-127 +-30 +86 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-30 +85 +123 +123 +123 +37 +-47 +-123 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-30 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +86 +123 +123 +123 +38 +-47 +-123 +-127 +-23 +83 +123 +105 +12 +-70 +-127 +-127 +-25 +84 +123 +108 +15 +-67 +-127 +-127 +-21 +87 +123 +112 +19 +-64 +-127 +-127 +-19 +89 +123 +112 +19 +-64 +-127 +-127 +-19 +89 +123 +114 +20 +-62 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-34 +82 +123 +123 +123 +32 +-52 +-127 +-127 +-127 +-34 +83 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-34 +83 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-33 +84 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-32 +84 +123 +116 +22 +-61 +-127 +-127 +-15 +93 +123 +117 +24 +-59 +-127 +-127 +-15 +93 +123 +116 +22 +-61 +-127 +-127 +-16 +92 +123 +116 +23 +-61 +-127 +-127 +-16 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +117 +23 +-60 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +44 +-41 +-118 +-127 +-127 +-24 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-27 +89 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-29 +87 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +37 +-48 +-123 +-127 +-24 +82 +123 +105 +13 +-69 +-127 +-127 +-24 +84 +123 +108 +15 +-67 +-127 +-127 +-21 +87 +123 +112 +19 +-64 +-127 +-127 +-20 +88 +123 +112 +19 +-64 +-127 +-127 +-19 +89 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +116 +23 +-60 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +43 +-42 +-119 +-127 +-127 +-25 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-28 +87 +123 +123 +123 +37 +-47 +-123 +-127 +-127 +-29 +86 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-30 +85 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +36 +-49 +-125 +-127 +-25 +81 +123 +103 +11 +-71 +-127 +-127 +-26 +82 +123 +107 +14 +-68 +-127 +-127 +-24 +85 +123 +111 +18 +-65 +-127 +-127 +-20 +87 +123 +111 +18 +-64 +-127 +-127 +-21 +88 +123 +112 +19 +-64 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +20 +-62 +-127 +-127 +-18 +90 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-16 +92 +123 +116 +22 +-61 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-16 +92 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-33 +83 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +85 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-31 +85 +123 +116 +23 +-60 +-127 +-127 +-14 +93 +123 +117 +23 +-60 +-127 +-127 +-16 +92 +123 +116 +22 +-61 +-127 +-127 +-16 +92 +123 +116 +23 +-60 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-16 +91 +123 +117 +23 +-60 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +43 +-42 +-119 +-127 +-127 +-25 +91 +123 +123 +123 +39 +-46 +-122 +-127 +-127 +-28 +87 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-30 +86 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-30 +85 +123 +123 +123 +37 +-48 +-123 +-127 +-23 +82 +123 +105 +12 +-70 +-127 +-127 +-24 +84 +123 +108 +16 +-67 +-127 +-127 +-21 +87 +123 +113 +20 +-63 +-127 +-127 +-19 +89 +123 +112 +19 +-64 +-127 +-127 +-18 +89 +123 +114 +20 +-63 +-127 +-127 +-18 +91 +123 +116 +22 +-61 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +44 +-41 +-118 +-127 +-127 +-25 +91 +123 +123 +123 +39 +-46 +-122 +-127 +-127 +-28 +88 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-30 +86 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-30 +86 +123 +123 +123 +37 +-48 +-123 +-127 +-24 +82 +123 +104 +12 +-70 +-127 +-127 +-25 +83 +123 +107 +15 +-67 +-127 +-127 +-22 +86 +123 +111 +18 +-65 +-127 +-127 +-20 +88 +123 +111 +18 +-64 +-127 +-127 +-20 +89 +123 +112 +19 +-64 +-127 +-127 +-18 +90 +123 +114 +20 +-62 +-127 +-127 +-18 +90 +123 +123 +123 +32 +-52 +-127 +-127 +-127 +-34 +82 +123 +123 +123 +33 +-51 +-126 +-127 +-127 +-33 +83 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +115 +21 +-61 +-127 +-127 +-15 +93 +123 +117 +24 +-59 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-34 +82 +123 +123 +123 +33 +-51 +-126 +-127 +-127 +-33 +84 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-33 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +116 +22 +-61 +-127 +-127 +-14 +94 +123 +117 +24 +-60 +-127 +-127 +-16 +93 +123 +116 +23 +-60 +-127 +-127 +-15 +92 +123 +116 +23 +-60 +-127 +-127 +-16 +91 +123 +116 +22 +-61 +-127 +-127 +-17 +92 +123 +114 +21 +-62 +-127 +-127 +-16 +91 +123 +117 +24 +-60 +-127 +-127 +-127 +-22 +94 +123 +123 +123 +43 +-42 +-118 +-127 +-127 +-24 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-29 +88 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +37 +-48 +-123 +-127 +-24 +82 +123 +104 +12 +-70 +-127 +-127 +-25 +84 +123 +108 +16 +-67 +-127 +-127 +-22 +86 +123 +112 +19 +-64 +-127 +-127 +-20 +88 +123 +112 +19 +-64 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-19 +90 +123 +115 +22 +-61 +-127 +-127 +-127 +-24 +93 +123 +123 +123 +43 +-42 +-119 +-127 +-127 +-25 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-28 +88 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-29 +87 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +38 +-47 +-123 +-127 +-24 +83 +123 +105 +12 +-70 +-127 +-127 +-25 +83 +123 +108 +15 +-67 +-127 +-127 +-21 +87 +123 +112 +19 +-64 +-127 +-127 +-19 +88 +123 +111 +18 +-64 +-127 +-127 +-19 +89 +123 +113 +20 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +123 +123 +32 +-53 +-127 +-127 +-127 +-35 +82 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-34 +83 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-33 +84 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +116 +23 +-60 +-127 +-127 +-14 +94 +123 +117 +23 +-60 +-127 +-127 +-15 +93 +123 +117 +23 +-60 +-127 +-127 +-15 +93 +123 +116 +23 +-60 +-127 +-127 +-17 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +123 +123 +33 +-51 +-126 +-127 +-127 +-34 +83 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-32 +84 +123 +123 +123 +36 +-49 diff --git a/traces/lf_t5577_indala.pm3 b/traces/lf_t5577_indala.pm3 new file mode 100644 index 000000000..973f5d68f --- /dev/null +++ b/traces/lf_t5577_indala.pm3 @@ -0,0 +1,10000 @@ +-27 +40 +-21 +44 +-19 +44 +-15 +47 +-12 +47 +-12 +46 +-13 +45 +-15 +44 +-17 +41 +-20 +39 +-22 +38 +-21 +38 +-22 +37 +-24 +36 +-25 +35 +-25 +35 +-26 +35 +-26 +34 +-26 +34 +-25 +35 +-25 +34 +-26 +33 +-27 +33 +-28 +32 +-28 +32 +-28 +31 +-28 +32 +-26 +33 +-26 +33 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-28 +32 +-27 +32 +-28 +31 +-29 +30 +-30 +30 +-30 +30 +-30 +30 +-29 +31 +72 +-4 +42 +-26 +28 +-34 +25 +-35 +25 +-35 +26 +-34 +26 +-34 +27 +-33 +28 +-30 +30 +-31 +29 +-32 +29 +-32 +29 +-32 +29 +-32 +30 +-30 +30 +-29 +-107 +-43 +-96 +-3 +-58 +22 +-40 +33 +-32 +37 +-27 +40 +-21 +43 +-19 +44 +-15 +47 +-12 +48 +-12 +46 +-14 +44 +-16 +43 +-18 +40 +-20 +39 +-23 +37 +78 +1 +47 +-22 +33 +-30 +29 +-32 +29 +-32 +29 +-32 +29 +-32 +29 +-31 +30 +-29 +31 +-30 +30 +-30 +31 +-31 +30 +-30 +30 +-30 +31 +-30 +30 +-30 +-107 +-44 +-97 +-4 +-58 +22 +-41 +33 +-33 +36 +-27 +40 +-22 +43 +-20 +44 +-15 +47 +-13 +47 +-13 +46 +-14 +44 +-16 +42 +-19 +40 +-21 +38 +-23 +36 +78 +1 +46 +-22 +32 +-31 +28 +-33 +27 +-34 +28 +-32 +28 +-32 +29 +-32 +29 +-29 +31 +-30 +30 +-31 +30 +-32 +29 +-31 +30 +-31 +30 +-30 +31 +-29 +-107 +-43 +-96 +-4 +-58 +22 +-40 +33 +-33 +37 +-27 +40 +-22 +44 +-19 +44 +-15 +47 +-13 +47 +-13 +46 +-14 +44 +-15 +43 +-18 +41 +-20 +39 +-22 +37 +-22 +38 +-22 +37 +-25 +34 +-26 +35 +-26 +34 +-27 +33 +-27 +33 +-27 +33 +-26 +34 +-25 +34 +-27 +33 +-28 +32 +-29 +31 +-29 +32 +-29 +32 +-28 +31 +-27 +33 +-27 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +33 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +33 +-27 +32 +-29 +31 +-30 +31 +-30 +30 +-29 +30 +-30 +31 +-29 +31 +-28 +32 +-27 +32 +-30 +30 +-29 +30 +-30 +31 +-29 +31 +-29 +31 +-28 +32 +-26 +33 +-26 +32 +-28 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-29 +31 +-28 +32 +-27 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +32 +-26 +33 +-28 +32 +-29 +32 +-29 +31 +-29 +31 +-29 +32 +-28 +32 +-26 +33 +-26 +33 +-28 +32 +-28 +31 +-29 +31 +-29 +32 +-28 +31 +-29 +31 +-27 +33 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +30 +-30 +31 +-30 +31 +-29 +31 +-30 +30 +-29 +31 +-28 +32 +-27 +32 +-28 +31 +-30 +30 +-30 +31 +-29 +31 +-30 +31 +-30 +31 +-28 +32 +-27 +32 +-29 +30 +-30 +30 +-30 +31 +-30 +30 +-30 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +30 +-29 +31 +-30 +31 +-30 +31 +-27 +32 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-26 +33 +-28 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +30 +-29 +31 +-27 +33 +-27 +32 +-28 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +30 +-29 +32 +-27 +32 +-27 +33 +-28 +32 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +-30 +30 +-28 +32 +-28 +32 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-26 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-30 +30 +-28 +32 +-28 +33 +-29 +31 +-29 +31 +-30 +30 +-30 +31 +-29 +30 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-30 +30 +-29 +31 +-30 +30 +-30 +31 +-27 +32 +-27 +33 +-29 +31 +-29 +30 +-30 +31 +-29 +31 +-30 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +30 +-28 +31 +-28 +32 +-30 +31 +-29 +31 +-30 +30 +-30 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +33 +-26 +33 +-28 +32 +-28 +32 +-29 +31 +-28 +32 +-29 +32 +-28 +33 +-26 +33 +-26 +34 +-27 +32 +-29 +32 +-29 +31 +-29 +31 +-29 +32 +-28 +32 +-26 +33 +-26 +34 +-28 +32 +-28 +32 +-29 +32 +-29 +31 +-29 +32 +-28 +32 +-26 +33 +-26 +33 +-28 +31 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-28 +32 +-29 +31 +-29 +31 +-30 +30 +-30 +31 +-29 +31 +-28 +32 +-28 +32 +-29 +30 +-29 +31 +-30 +30 +-30 +30 +-30 +30 +-30 +30 +-29 +31 +-27 +31 +-29 +31 +-30 +30 +-30 +30 +-30 +30 +-30 +30 +-30 +30 +-29 +32 +-28 +31 +-29 +30 +-30 +30 +-30 +29 +-30 +30 +-30 +30 +-30 +30 +-28 +32 +-27 +32 +-29 +31 +-29 +30 +-30 +31 +-30 +31 +-30 +30 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-26 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +32 +-28 +33 +-26 +34 +-26 +33 +-28 +32 +-29 +32 +-29 +31 +-28 +32 +-29 +31 +-29 +32 +-27 +33 +-27 +33 +-28 +32 +-28 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +30 +-30 +30 +-28 +32 +-27 +31 +-29 +31 +-30 +31 +-30 +30 +-30 +30 +-30 +30 +-30 +31 +-28 +31 +-27 +33 +-29 +30 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +33 +-28 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-26 +33 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +31 +-27 +32 +-28 +31 +-29 +30 +-30 +31 +-29 +30 +-30 +31 +-29 +31 +-28 +32 +-27 +32 +-30 +31 +-29 +30 +-30 +30 +-30 +30 +-30 +30 +-30 +30 +-28 +32 +-27 +32 +-29 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-29 +30 +-28 +33 +-27 +33 +-29 +31 +-30 +30 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-26 +34 +-26 +33 +-28 +31 +-29 +31 +-29 +30 +-30 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +33 +-28 +31 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +73 +-3 +43 +-25 +30 +-33 +26 +-35 +26 +-34 +27 +-34 +27 +-33 +28 +-33 +29 +-30 +30 +-31 +30 +-31 +30 +-32 +29 +-31 +29 +-31 +30 +-31 +30 +-30 +-107 +-44 +-97 +-3 +-58 +23 +-40 +33 +-32 +36 +-28 +39 +-22 +43 +-20 +44 +-15 +46 +-13 +47 +-13 +46 +-14 +44 +-16 +43 +-19 +40 +-21 +38 +-23 +37 +78 +1 +46 +-23 +33 +-30 +29 +-32 +28 +-32 +29 +-32 +29 +-31 +30 +-30 +30 +-28 +32 +-30 +30 +-30 +30 +-31 +30 +-30 +31 +-30 +30 +-30 +31 +-29 +-107 +-43 +-96 +-3 +-57 +23 +-39 +34 +-32 +37 +-27 +40 +-21 +44 +-19 +44 +-15 +46 +-13 +47 +-13 +45 +-15 +44 +-16 +42 +-19 +40 +-21 +38 +-23 +36 +78 +2 +46 +-22 +33 +-31 +29 +-32 +28 +-32 +29 +-32 +29 +-31 +29 +-31 +30 +-28 +32 +-29 +31 +-30 +30 +-31 +30 +-31 +31 +-30 +30 +-30 +31 +-30 +30 +-27 +33 +-29 +31 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-29 +31 +-29 +31 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +32 +-29 +31 +-27 +33 +-29 +32 +-29 +32 +-30 +31 +-29 +32 +-29 +31 +-30 +32 +-28 +32 +-27 +34 +-28 +32 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +32 +-28 +32 +-26 +34 +-27 +32 +-28 +32 +-29 +31 +-29 +31 +-29 +32 +-29 +32 +-28 +32 +-26 +33 +-29 +32 +-29 +31 +-29 +31 +-29 +32 +-30 +30 +-29 +32 +-29 +-106 +-43 +-97 +-3 +-58 +22 +-39 +34 +-32 +37 +-27 +40 +-21 +44 +-19 +45 +-14 +47 +-12 +48 +-13 +46 +-13 +45 +-15 +43 +-18 +41 +-20 +38 +-22 +37 +78 +2 +46 +-22 +32 +-31 +29 +-33 +28 +-32 +28 +-32 +29 +-32 +29 +-31 +29 +-29 +31 +-30 +30 +-30 +30 +-31 +30 +-31 +29 +-31 +30 +-30 +30 +-29 +-107 +-44 +-97 +-3 +-59 +22 +-39 +33 +-32 +36 +-28 +40 +-22 +44 +-19 +44 +-15 +47 +-13 +47 +-13 +46 +-14 +45 +-16 +42 +-18 +40 +-21 +39 +-23 +37 +-22 +37 +-22 +37 +-25 +34 +-27 +33 +-27 +34 +-27 +33 +-27 +33 +-27 +32 +-26 +34 +-25 +34 +-27 +32 +-28 +32 +-29 +32 +-28 +32 +-28 +32 +-28 +32 +74 +-2 +42 +-25 +30 +-33 +27 +-34 +26 +-34 +27 +-33 +27 +-33 +28 +-33 +28 +-29 +30 +-31 +30 +-31 +30 +-31 +29 +-31 +31 +-30 +30 +-30 +30 +-29 +-107 +-44 +-96 +-3 +-58 +23 +-39 +33 +-32 +37 +-27 +40 +-21 +44 +-19 +44 +-15 +47 +-12 +47 +-13 +46 +-14 +45 +-16 +43 +-18 +40 +-21 +38 +-23 +37 +-22 +37 +-22 +37 +-25 +35 +-26 +34 +-27 +33 +-28 +33 +-27 +33 +-27 +33 +-26 +34 +-26 +33 +-28 +32 +-28 +32 +-28 +31 +-29 +32 +-28 +32 +-29 +32 +74 +-2 +43 +-25 +29 +-33 +26 +-35 +26 +-34 +26 +-34 +27 +-34 +28 +-33 +29 +-29 +30 +-31 +29 +-32 +29 +-31 +29 +-32 +29 +-32 +29 +-31 +29 +-31 +30 +-28 +32 +-30 +30 +-30 +30 +-31 +30 +-31 +30 +-31 +30 +-30 +30 +-30 +31 +-28 +31 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-31 +30 +-30 +30 +-30 +31 +-27 +33 +-29 +31 +-29 +30 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-28 +32 +-28 +32 +-29 +32 +-30 +31 +-29 +31 +-30 +31 +-29 +32 +-28 +-106 +-43 +-96 +-2 +-57 +24 +-39 +34 +-31 +38 +-26 +41 +-20 +44 +-19 +45 +-14 +47 +-12 +48 +-12 +47 +-13 +45 +-14 +43 +-18 +41 +-20 +39 +-22 +37 +78 +2 +47 +-22 +33 +-30 +29 +-32 +28 +-32 +29 +-32 +29 +-31 +29 +-31 +30 +-28 +32 +-29 +30 +-30 +31 +-30 +30 +-30 +30 +-30 +30 +-30 +31 +-29 +-107 +-43 +-96 +-3 +-58 +22 +-40 +33 +-33 +37 +-27 +40 +-21 +44 +-19 +44 +-15 +47 +-12 +47 +-13 +46 +-14 +44 +-15 +43 +-17 +41 +-20 +38 +-22 +37 +-22 +38 +-22 +37 +-25 +34 +-26 +34 +-28 +33 +-26 +34 +-26 +33 +-27 +33 +-26 +33 +-26 +34 +-27 +33 +-28 +32 +-28 +32 +-28 +33 +-28 +32 +-28 +31 +73 +-3 +42 +-25 +29 +-34 +26 +-35 +26 +-34 +26 +-34 +27 +-33 +28 +-33 +28 +-30 +30 +-31 +29 +-32 +28 +-32 +29 +-32 +30 +-31 +30 +-31 +30 +-30 +-107 +-44 +-97 +-3 +-59 +21 +-40 +32 +-33 +36 +-28 +40 +-21 +43 +-19 +45 +-15 +47 +-12 +46 +-13 +46 +-14 +45 +-16 +42 +-18 +40 +-21 +38 +-23 +37 +79 +2 +47 +-22 +33 +-30 +29 +-33 +28 +-32 +29 +-32 +29 +-31 +29 +-31 +30 +-28 +32 +-29 +31 +-30 +30 +-31 +29 +-30 +31 +-30 +31 +-30 +30 +-30 +-107 +-44 +-96 +-2 +-58 +23 +-39 +34 +-32 +37 +-27 +41 +-21 +44 +-18 +45 +-15 +47 +-12 +48 +-12 +47 +-13 +46 +-15 +44 +-17 +41 +-19 +39 +-22 +38 +79 +2 +47 +-21 +33 +-29 +30 +-32 +29 +-31 +29 +-32 +29 +-32 +30 +-30 +30 +-28 +32 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +30 +-30 +-107 +-44 +-96 +-3 +-58 +23 +-40 +33 +-33 +36 +-28 +40 +-22 +43 +-20 +43 +-16 +46 +-14 +46 +-14 +45 +-14 +45 +-16 +42 +-19 +39 +-21 +38 +-23 +37 +-22 +37 +-23 +36 +-25 +34 +-27 +34 +-27 +33 +-27 +33 +-27 +33 +-27 +32 +-26 +34 +-26 +33 +-28 +31 +-29 +32 +-29 +32 +-28 +31 +-29 +32 +-29 +32 +-27 +33 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-27 +33 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +73 +-3 +43 +-26 +29 +-34 +26 +-35 +25 +-35 +26 +-34 +26 +-34 +27 +-33 +28 +-30 +30 +-31 +29 +-31 +30 +-32 +28 +-32 +29 +-32 +30 +-30 +30 +-30 +-107 +-43 +-96 +-4 +-58 +23 +-39 +33 +-32 +36 +-28 +40 +-21 +43 +-19 +44 +-15 +48 +-12 +48 +-12 +46 +-13 +45 +-16 +43 +-17 +41 +-21 +38 +-23 +37 +79 +2 +47 +-21 +33 +-30 +29 +-33 +28 +-32 +28 +-32 +29 +-31 +30 +-31 +30 +-28 +32 +-30 +30 +-31 +30 +-31 +29 +-31 +30 +-31 +30 +-30 +30 +-30 +-107 +-44 +-97 +-4 +-59 +22 +-40 +33 +-33 +36 +-27 +40 +-22 +43 +-20 +43 +-15 +46 +-13 +47 +-13 +46 +-13 +44 +-16 +43 +-18 +41 +-20 +38 +-22 +37 +78 +2 +47 +-21 +34 +-30 +29 +-33 +27 +-33 +29 +-32 +29 +-31 +30 +-30 +30 +-29 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-29 +32 +-28 +-106 +-42 +-96 +-3 +-57 +23 +-39 +34 +-31 +38 +-26 +41 +-21 +44 +-18 +44 +-15 +47 +-12 +47 +-13 +47 +-13 +45 +-15 +43 +-18 +41 +-20 +38 +-22 +37 +-22 +38 +-22 +37 +-25 +34 +-26 +34 +-27 +33 +-26 +33 +-27 +33 +-27 +33 +-26 +34 +-26 +33 +-28 +32 +-29 +31 +-29 +31 +-28 +31 +-29 +32 +-29 +31 +-27 +33 +-26 +33 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-30 +30 +-30 +30 +-28 +32 +-27 +32 +-28 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-28 +32 +-28 +32 +-29 +31 +-29 +30 +-30 +31 +-29 +31 +-29 +30 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-30 +30 +-30 +31 +-27 +33 +-27 +33 +-29 +31 +-29 +30 +-30 +31 +-30 +31 +-30 +30 +-29 +30 +-28 +32 +-27 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +31 +-27 +34 +-26 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +33 +-26 +33 +-28 +31 +-29 +32 +-29 +31 +-29 +31 +-29 +32 +-28 +31 +-27 +32 +-27 +33 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-28 +32 +-27 +32 +-29 +30 +-31 +30 +-30 +31 +-29 +31 +-29 +30 +-30 +31 +-28 +31 +-28 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +30 +-29 +31 +-28 +32 +-28 +31 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-27 +33 +-29 +31 +-29 +30 +-30 +30 +-30 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-28 +31 +-27 +32 +-27 +33 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +33 +-26 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +30 +-30 +31 +-27 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +30 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-28 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +33 +-26 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-28 +31 +-27 +32 +-27 +33 +-28 +32 +-28 +31 +-29 +32 +-29 +32 +-28 +31 +-28 +32 +-27 +33 +-26 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-27 +33 +-27 +33 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +30 +-30 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-30 +30 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-26 +32 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-26 +33 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +32 +-29 +31 +-30 +31 +-30 +30 +-29 +31 +-29 +32 +-29 +31 +-27 +33 +-27 +33 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +33 +-26 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +30 +-29 +32 +-29 +31 +-27 +32 +-27 +33 +-28 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-27 +33 +-26 +32 +-28 +31 +-29 +31 +-29 +30 +-30 +31 +-29 +30 +-30 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +30 +-30 +30 +-30 +31 +-30 +30 +-30 +31 +-28 +32 +-27 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +30 +-30 +30 +-29 +31 +-27 +32 +-29 +30 +-30 +30 +-30 +30 +-30 +31 +-30 +30 +-29 +31 +-28 +32 +-28 +31 +-30 +30 +-30 +31 +-30 +30 +-30 +30 +-30 +30 +-29 +31 +-27 +32 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-27 +32 +-27 +32 +-28 +30 +-29 +31 +-30 +31 +-29 +30 +-29 +31 +-30 +31 +-27 +32 +-27 +33 +-28 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-27 +34 +-26 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +30 +-28 +33 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +30 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +32 +-29 +32 +-26 +33 +-26 +34 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-25 +34 +-25 +33 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-27 +33 +-26 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +73 +-3 +43 +-25 +29 +-33 +26 +-35 +26 +-35 +26 +-34 +26 +-34 +27 +-33 +28 +-30 +29 +-32 +28 +-32 +28 +-32 +29 +-32 +29 +-31 +30 +-30 +30 +-30 +-107 +-44 +-96 +-4 +-58 +22 +-40 +33 +-33 +37 +-27 +41 +-22 +43 +-19 +44 +-14 +47 +-13 +47 +-12 +46 +-13 +45 +-15 +43 +-18 +41 +-20 +38 +-23 +37 +79 +2 +47 +-22 +33 +-30 +29 +-32 +28 +-32 +29 +-32 +29 +-31 +29 +-31 +31 +-28 +32 +-30 +30 +-31 +30 +-31 +29 +-31 +30 +-31 +30 +-31 +30 +-30 +-107 +-44 +-97 +-4 +-59 +22 +-40 +33 +-33 +36 +-28 +39 +-23 +43 +-20 +43 +-16 +46 +-13 +47 +-13 +45 +-14 +43 +-16 +43 +-19 +40 +-21 +37 +-24 +37 +78 +1 +46 +-22 +33 +-31 +28 +-33 +28 +-33 +28 +-32 +29 +-31 +29 +-31 +30 +-28 +32 +-30 +30 +-31 +29 +-31 +29 +-31 +30 +-31 +30 +-30 +30 +-30 +30 +-27 +32 +-29 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +30 +-30 +31 +-29 +32 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +32 +-26 +34 +-28 +32 +-29 +32 +-30 +31 +-29 +32 +-29 +32 +-29 +32 +-28 +32 +-26 +33 +-28 +33 +-28 +32 +-29 +32 +-29 +32 +-29 +32 +-29 +32 +-29 +32 +-26 +34 +-27 +33 +-28 +32 +-29 +32 +-28 +32 +-29 +32 +-29 +32 +-29 +32 +-27 +34 +-28 +32 +-29 +32 +-30 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +-107 +-44 +-97 +-3 +-58 +22 +-40 +32 +-33 +37 +-28 +39 +-22 +43 +-19 +44 +-15 +47 +-13 +47 +-13 +46 +-14 +45 +-16 +42 +-18 +41 +-21 +38 +-22 +37 +78 +1 +46 +-22 +33 +-30 +29 +-33 +28 +-33 +28 +-32 +28 +-32 +29 +-31 +30 +-28 +31 +-30 +30 +-31 +30 +-31 +29 +-31 +30 +-31 +30 +-30 +30 +-30 +-107 +-44 +-97 +-4 +-59 +22 +-40 +33 +-32 +37 +-28 +40 +-21 +44 +-19 +45 +-15 +47 +-12 +47 +-12 +47 +-13 +45 +-15 +43 +-17 +41 +-20 +39 +-22 +38 +-21 +37 +-22 +38 +-25 +35 +-25 +34 +-26 +34 +-26 +34 +-27 +34 +-26 +33 +-25 +35 +-25 +35 +-26 +33 +-27 +33 +-28 +32 +-28 +32 +-28 +33 +-28 +32 +74 +-2 +43 +-25 +31 +-32 +27 +-34 +27 +-34 +27 +-33 +28 +-33 +28 +-32 +29 +-29 +31 +-30 +30 +-31 +30 +-32 +29 +-31 +30 +-31 +30 +-31 +30 +-30 +-107 +-44 +-97 +-4 +-58 +22 +-41 +33 +-32 +36 +-28 +39 +-22 +44 +-19 +44 +-15 +46 +-13 +47 +-14 +46 +-14 +44 +-16 +43 +-18 +40 +-21 +38 +-23 +36 +-23 +38 +-23 +36 +-25 +34 +-27 +34 +-27 +33 +-27 +33 +-27 +33 +-28 +32 +-26 +33 +-26 +34 +-28 +33 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-28 +31 +73 +-2 +43 +-25 +30 +-33 +27 +-34 +26 +-34 +27 +-33 +28 +-33 +28 +-32 +29 +-29 +31 +-30 +30 +-30 +30 +-31 +30 +-30 +31 +-30 +31 +-30 +30 +-29 +31 +-27 +33 +-29 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +32 +-27 +33 +-28 +32 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-26 +34 +-28 +32 +-29 +30 +-31 +30 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-27 +32 +-29 +31 +-30 +31 +-30 +29 +-31 +30 +-30 +31 +-30 +31 +-30 +-107 +-44 +-97 +-4 +-58 +23 +-40 +33 +-32 +36 +-27 +40 +-22 +44 +-19 +43 +-15 +46 +-13 +47 +-13 +46 +-13 +45 +-16 +42 +-18 +41 +-20 +39 +-22 +37 +78 +2 +47 +-21 +33 +-30 +29 +-32 +29 +-32 +29 +-31 +29 +-31 +30 +-30 +31 +-28 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +-106 +-43 +-96 +-4 +-58 +23 +-39 +34 +-32 +37 +-28 +40 +-22 +44 +-19 +44 +-15 +46 +-13 +48 +-13 +47 +-14 +45 +-15 +43 +-18 +40 +-21 +38 +-22 +38 +-22 +38 +-22 +36 +-25 +34 +-27 +33 +-27 +34 +-27 +33 +-27 +33 +-27 +33 +-26 +34 +-26 +34 +-28 +32 +-28 +31 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +73 +-3 +43 +-26 +29 +-33 +26 +-35 +26 +-34 +27 +-33 +27 +-33 +28 +-32 +29 +-30 +30 +-31 +29 +-32 +30 +-32 +29 +-31 +29 +-31 +31 +-30 +31 +-29 +-107 +-43 +-96 +-3 +-58 +23 +-40 +33 +-32 +36 +-27 +39 +-22 +44 +-19 +44 +-15 +47 +-13 +47 +-13 +46 +-14 +44 +-16 +42 +-19 +39 +-20 +38 +-22 +37 +78 +2 +47 +-22 +32 +-31 +28 +-33 +28 +-32 +29 +-32 +29 +-32 +29 +-31 +30 +-28 +31 +-30 +30 +-30 +30 +-31 +30 +-31 +29 +-31 +30 +-31 +30 +-30 +-107 +-44 +-97 +-4 +-59 +22 +-41 +32 +-33 +36 +-28 +39 +-22 +43 +-20 +43 +-16 +46 +-13 +47 +-13 +46 +-14 +44 +-16 +42 +-19 +41 +-20 +38 +-22 +37 +78 +1 +46 +-23 +33 +-30 +28 +-33 +27 +-32 +29 +-32 +29 +-31 +30 +-30 +30 +-28 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +-107 +-43 +-96 +-3 +-57 +23 +-39 +34 +-32 +37 +-26 +40 +-21 +45 +-19 +44 +-14 +47 +-13 +48 +-13 +46 +-13 +45 +-15 +44 +-18 +40 +-20 +39 +-22 +38 +-22 +36 +-23 +36 +-25 +36 +-26 +34 +-26 +33 +-27 +34 +-27 +33 +-27 +33 +-26 +34 +-26 +34 +-27 +32 +-28 +32 +-28 +32 +-29 +32 +-28 +32 +-28 +32 +-27 +33 +-26 +33 +-28 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +73 +-3 +43 +-26 +29 +-33 +25 +-35 +25 +-35 +26 +-34 +27 +-33 +27 +-33 +28 +-30 +30 +-31 +29 +-31 +29 +-32 +29 +-32 +29 +-32 +29 +-31 +30 +-31 +-108 +-43 +-96 +-4 +-58 +22 +-40 +33 +-33 +36 +-28 +39 +-22 +44 +-19 +44 +-15 +46 +-13 +47 +-13 +46 +-14 +44 +-16 +43 +-19 +40 +-21 +38 +-23 +37 +78 +2 +47 +-22 +33 +-31 +29 +-32 +28 +-33 +28 +-32 +29 +-31 +29 +-30 +30 +-28 +32 +-29 +30 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +-106 +-43 +-96 +-3 +-57 +24 +-39 +34 +-32 +38 +-27 +41 +-21 +44 +-19 +45 +-15 +47 +-12 +47 +-12 +47 +-13 +45 +-15 +43 +-18 +41 +-20 +39 +-23 +37 +78 +1 +47 +-22 +32 +-30 +28 +-33 +28 +-32 +28 +-32 +29 +-32 +29 +-31 +30 +-29 +31 +-30 +30 +-31 +30 +-32 +29 +-31 +30 +-30 +30 +-31 +30 +-30 +-107 +-43 +-97 +-4 +-58 +22 +-40 +33 +-32 +36 +-28 +40 +-22 +43 +-19 +44 +-15 +47 +-13 +47 +-12 +46 +-13 +45 +-16 +43 +-17 +41 +-20 +39 +-22 +38 +-21 +38 +-22 +36 +-25 +35 +-26 +34 +-26 +34 +-26 +34 +-27 +33 +-26 +34 +-25 +34 +-25 +35 +-27 +33 +-27 +32 +-29 +32 +-29 +32 +-28 +32 +-28 +32 +-27 +33 +-26 +33 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-30 +30 +-29 +30 +-28 +32 +-28 +32 +-29 +30 +-30 +30 +-30 +30 +-30 +30 +-30 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +32 +-28 +31 +-29 +31 +-29 +31 +-29 +32 +-28 +31 +-28 +32 +-27 +33 +-26 +34 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +30 +-30 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-28 +32 +-28 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +29 +-30 +32 +-29 +31 +-27 +32 +-27 +32 +-29 +30 +-30 +30 +-30 +30 +-30 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-27 +33 +-26 +33 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +30 +-29 +32 +-29 +31 +-29 +31 +-30 +30 +-29 +31 +-28 +32 +-29 +32 +-29 +30 +-30 +30 +-31 +30 +-30 +30 +-30 +30 +-30 +31 +-28 +31 +-27 +32 +-29 +31 +-29 +30 +-30 +30 +-30 +31 +-30 +30 +-30 +31 +-28 +32 +-27 +32 +-29 +30 +-30 +30 +-30 +30 +-30 +30 +-30 +31 +-29 +32 +-27 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +30 +-29 +31 +-30 +31 +-29 +30 +-27 +33 +-27 +33 +-28 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-27 +33 +-27 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +33 +-26 +33 +-28 +31 +-29 +32 +-29 +31 +-28 +32 +-29 +31 +-29 +31 +-27 +32 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +32 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-29 +31 +-27 +33 +-27 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +32 +-28 +31 +-29 +32 +-27 +33 +-26 +33 +-28 +32 +-28 +32 +-28 +31 +-28 +31 +-29 +31 +-29 +32 +-27 +33 +-26 +33 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +30 +-29 +31 +-27 +33 +-28 +32 +-29 +30 +-30 +31 +-30 +30 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +33 +-28 +32 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +30 +-29 +31 +-30 +30 +-30 +31 +-27 +31 +-27 +33 +-28 +31 +-29 +31 +-29 +30 +-29 +31 +-30 +30 +-29 +31 +-27 +33 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +32 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-26 +33 +-27 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +32 +-29 +31 +-30 +30 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-27 +33 +-26 +33 +-29 +31 +-29 +31 +-29 +31 +-28 +31 +-29 +31 +-29 +31 +-27 +33 +-26 +33 +-28 +31 +-29 +31 +-29 +31 +-28 +31 +-29 +32 +-29 +32 +-27 +32 +-27 +33 +-28 +32 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-27 +33 +-27 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +30 +-28 +32 +-27 +32 +-29 +30 +-30 +30 +-31 +30 +-30 +30 +-30 +30 +-30 +30 +-28 +31 +-27 +31 +-30 +30 +-30 +30 +-30 +30 +-30 +31 +-30 +30 +-30 +30 +-28 +32 +-27 +32 +-29 +30 +-30 +31 +-30 +30 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +30 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +33 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-26 +33 +-26 +33 +-28 +32 +-29 +31 +-29 +32 +-29 +32 +-28 +32 +-28 +32 +-26 +34 +-26 +33 +-28 +32 +-29 +30 +-29 +31 +-28 +31 +-29 +31 +-29 +32 +-27 +32 +-26 +33 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-26 +33 +-26 +33 +-28 +31 +-30 +30 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-28 +32 +-27 +32 +-29 +30 +-30 +30 +-30 +30 +-30 +30 +-30 +31 +-29 +30 +72 +-4 +41 +-26 +29 +-34 +26 +-36 +25 +-35 +26 +-35 +26 +-34 +27 +-33 +28 +-30 +30 +-32 +29 +-32 +28 +-33 +28 +-32 +29 +-32 +29 +-31 +30 +-31 +-108 +-44 +-98 +-4 +-59 +21 +-40 +33 +-33 +36 +-28 +39 +-22 +43 +-19 +44 +-15 +46 +-13 +47 +-13 +46 +-13 +45 +-15 +43 +-17 +41 +-20 +39 +-22 +37 +78 +1 +47 +-21 +34 +-29 +30 +-32 +28 +-32 +29 +-32 +29 +-31 +30 +-30 +31 +-28 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-29 +-106 +-43 +-97 +-3 +-58 +22 +-40 +33 +-33 +37 +-27 +40 +-22 +43 +-19 +44 +-15 +47 +-12 +47 +-13 +46 +-15 +44 +-15 +42 +-18 +40 +-21 +38 +-23 +36 +78 +2 +46 +-22 +33 +-30 +29 +-32 +28 +-32 +29 +-32 +29 +-31 +29 +-30 +30 +-28 +32 +-29 +31 +-30 +30 +-31 +30 +-31 +31 +-30 +30 +-30 +31 +-30 +31 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-27 +33 +-28 +31 +-29 +31 +-30 +30 +-30 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +33 +-28 +32 +-29 +32 +-30 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +32 +-26 +34 +-28 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +32 +-28 +32 +-25 +34 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-29 +32 +-28 +32 +-27 +34 +-28 +32 +-28 +31 +-30 +31 +-30 +32 +-29 +31 +-29 +31 +-29 +-106 +-43 +-97 +-3 +-58 +23 +-39 +33 +-32 +37 +-27 +40 +-21 +43 +-19 +44 +-15 +46 +-13 +46 +-13 +45 +-15 +44 +-16 +42 +-18 +40 +-21 +38 +-23 +36 +78 +2 +46 +-22 +32 +-31 +28 +-33 +27 +-33 +28 +-32 +29 +-32 +29 +-31 +29 +-29 +31 +-30 +30 +-30 +30 +-31 +30 +-30 +30 +-30 +31 +-30 +31 +-29 +-107 +-43 +-97 +-3 +-58 +23 +-39 +32 +-32 +38 +-27 +41 +-21 +44 +-18 +45 +-14 +47 +-12 +48 +-12 +47 +-13 +45 +-15 +43 +-18 +41 +-20 +39 +-22 +37 +-21 +38 +-22 +37 +-24 +35 +-26 +34 +-26 +34 +-26 +33 +-27 +33 +-27 +34 +-25 +34 +-25 +33 +-27 +33 +-28 +32 +-28 +31 +-29 +32 +-29 +32 +-28 +32 +74 +-2 +42 +-25 +30 +-33 +27 +-34 +26 +-34 +27 +-33 +27 +-33 +28 +-33 +29 +-29 +31 +-31 +29 +-31 +29 +-32 +29 +-32 +30 +-31 +30 +-31 +30 +-30 +-107 +-45 +-98 +-5 +-60 +22 +-40 +32 +-33 +36 +-28 +40 +-22 +43 +-20 +43 +-15 +47 +-13 +47 +-13 +46 +-14 +45 +-16 +42 +-18 +40 +-20 +39 +-22 +37 +-22 +37 +-22 +36 +-25 +35 +-26 +33 +-27 +34 +-26 +34 +-27 +33 +-27 +33 +-26 +35 +-25 +34 +-27 +33 +-28 +32 +-28 +32 +-28 +31 +-28 +32 +-28 +32 +74 +-2 +43 +-25 +30 +-33 +27 +-35 +26 +-34 +26 +-33 +28 +-33 +28 +-32 +28 +-30 +31 +-31 +30 +-31 +29 +-32 +29 +-31 +30 +-31 +30 +-30 +31 +-30 +31 +-27 +32 +-28 +31 +-30 +31 +-31 +30 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-27 +33 +-29 +31 +-29 +31 +-30 +30 +-31 +31 +-30 +30 +-30 +31 +-30 +31 +-27 +32 +-29 +31 +-29 +31 +-30 +29 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-27 +32 +-29 +31 +-29 +31 +-30 +30 +-30 +31 +-30 +30 +-30 +31 +-30 +-107 +-44 +-97 +-3 +-58 +23 +-39 +33 +-32 +37 +-27 +41 +-21 +44 +-19 +45 +-14 +47 +-12 +47 +-13 +47 +-13 +45 +-15 +44 +-17 +41 +-20 +39 +-22 +38 +80 +3 +48 +-21 +33 +-29 +30 +-32 +29 +-31 +30 +-31 +30 +-31 +30 +-30 +31 +-27 +33 +-29 +31 +-29 +31 +-30 +30 +-30 +32 +-30 +31 +-29 +31 +-29 +-106 +-43 +-96 +-3 +-58 +23 +-39 +33 +-32 +37 +-27 +41 +-21 +42 +-19 +44 +-15 +47 +-13 +47 +-13 +46 +-14 +44 +-17 +41 +-19 +40 +-21 +38 +-23 +37 +-22 +37 +-23 +36 +-26 +34 +-27 +33 +-27 +33 +-27 +33 +-27 +33 +-27 +33 +-26 +33 +-26 +33 +-28 +32 +-29 +32 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +73 +-3 +42 +-26 +30 +-33 +26 +-35 +26 +-35 +25 +-34 +27 +-33 +28 +-32 +28 +-30 +30 +-31 +28 +-32 +29 +-32 +29 +-31 +29 +-32 +30 +-30 +30 +-30 +-107 +-44 +-97 +-3 +-59 +22 +-40 +32 +-33 +37 +-28 +40 +-21 +43 +-19 +44 +-15 +47 +-13 +47 +-12 +46 +-13 +45 +-16 +43 +-18 +41 +-20 +39 +-22 +38 +79 +2 +48 +-21 +33 +-30 +29 +-32 +28 +-32 +29 +-32 +29 +-31 +30 +-30 +30 +-28 +31 +-30 +31 +-30 +30 +-30 +30 +-30 +30 +-31 +30 +-30 +30 +-29 +-106 +-44 +-97 +-4 +-59 +23 +-40 +33 +-32 +37 +-28 +40 +-22 +43 +-19 +44 +-15 +47 +-13 +47 +-13 +46 +-13 +45 +-16 +43 +-18 +41 +-20 +39 +-22 +37 +78 +2 +47 +-22 +33 +-30 +28 +-33 +28 +-33 +29 +-32 +29 +-31 +29 +-31 +30 +-29 +31 +-29 +30 +-30 +30 +-31 +30 +-30 +30 +-30 +30 +-31 +31 +-29 +-106 +-44 +-97 +-4 +-58 +23 +-40 +33 +-32 +37 +-27 +40 +-22 +44 +-19 +44 +-15 +47 +-13 +47 +-12 +47 +-13 +45 +-16 +43 +-17 +41 +-20 +39 +-22 +37 +-22 +37 +-23 +36 +-25 +35 +-27 +33 +-27 +33 +-27 +33 +-28 +33 +-27 +32 +-26 +34 +-26 +33 +-27 +32 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +32 +-28 +31 +-30 +31 +-29 +30 +-30 +31 +-30 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-30 +30 +-29 +31 +-29 +32 +-29 +31 +73 +-3 +42 +-26 +29 +-34 +26 +-35 +26 +-34 +26 +-34 +27 +-33 +28 +-32 +29 +-30 +30 +-31 +29 +-31 +29 +-31 +29 +-31 +30 +-31 +30 +-31 +30 +-29 +-107 +-43 +-95 +-2 +-58 +23 +-39 +32 +-32 +37 +-28 +40 +-22 +43 +-19 +44 +-15 +47 +-12 +48 +-13 +46 +-13 +45 +-15 +43 +-18 +41 +-20 +39 +-22 +37 +78 +2 +47 +-22 +33 +-30 +29 +-32 +29 +-32 +29 +-32 +29 +-31 +29 +-30 +30 +-29 +31 +-30 +30 +-31 +30 +-31 +30 +-30 +30 +-30 +30 +-31 +31 +-29 +-107 +-43 +-96 +-4 +-58 +23 +-39 +34 +-32 +37 +-27 +41 +-21 +44 +-18 +45 +-14 +47 +-13 +48 +-12 +46 +-13 +45 +-16 +43 +-17 +41 +-20 +39 +-22 +37 +79 +2 +47 +-21 +33 +-30 +30 +-31 +29 +-31 +29 +-32 +29 +-31 +30 +-30 +30 +-28 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-29 +-107 +-44 +-97 +-4 +-58 +22 +-40 +32 +-33 +36 +-28 +40 +-22 +43 +-19 +44 +-15 +47 +-13 +47 +-13 +46 +-13 +45 +-16 +43 +-19 +40 +-21 +38 +-22 +37 +-23 +37 +-23 +36 +-25 +34 +-26 +34 +-27 +33 +-27 +32 +-28 +33 +-28 +32 +-26 +33 +-26 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-30 +30 +-30 +31 +-28 +32 +-27 +31 +-29 +31 +-30 +30 +-30 +30 +-30 +30 +-30 +31 +-29 +30 +-28 +32 +-28 +32 +-29 +30 +-30 +30 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-27 +34 +-26 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-28 +31 +-29 +31 +-28 +32 +-27 +32 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +32 +-28 +31 +-29 +32 +-29 +31 +-29 +30 +-29 +31 +-29 +31 +-27 +32 +-27 +33 +-28 +32 +-29 +31 +-30 +31 +-29 +32 +-29 +31 +-29 +31 +-28 +33 +-27 +33 +-28 +31 +-28 +31 +-29 +31 +-28 +31 +-29 +31 +-29 +30 +-28 +33 +-26 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +33 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-30 +30 +-30 +30 +-30 +31 +-29 +31 +-29 +31 +-28 +33 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +32 +-26 +33 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-28 +31 +-28 +32 +-27 +33 +-26 +33 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +32 +-27 +33 +-28 +32 +-28 +31 +-29 +31 +-29 +31 +-29 +30 +-29 +31 +-27 +33 +-27 +33 +-28 +31 +-29 +31 +-28 +31 +-29 +32 +-29 +31 +-29 +31 +-27 +32 +-27 +33 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +30 +-29 +31 +-30 +31 +-29 +31 +-26 +33 +-27 +33 +-29 +31 +-30 +30 +-30 +30 +-30 +31 +-29 +31 +-29 +32 +-27 +32 +-27 +32 +-28 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +32 +-29 +31 +-27 +32 +-27 +33 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-29 +32 +-28 +33 +-27 +32 +-28 +31 +-29 +31 +-29 +30 +-30 +31 +-30 +31 +-29 +31 +-27 +33 +-27 +32 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +30 +-30 +31 +-29 +31 +-29 +30 +-28 +32 +-28 +32 +-29 +30 +-29 +31 +-30 +31 +-29 +30 +-30 +31 +-30 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +30 +-30 +31 +-30 +31 +-29 +30 +-30 +31 +-27 +33 +-26 +33 +-29 +31 +-30 +30 +-30 +30 +-30 +30 +-30 +31 +-30 +30 +-28 +32 +-27 +32 +-29 +31 +-30 +30 +-30 +31 +-29 +31 +-29 +31 +-30 +30 +-28 +32 +-27 +32 +-29 +30 +-30 +31 +-30 +30 +-30 +30 +-30 +30 +-30 +30 +-28 +31 +-27 +31 +-30 +30 +-30 +30 +-30 +30 +-30 +31 +-30 +30 +-29 +30 +-27 +33 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-26 +33 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-27 +33 +-27 +33 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-27 +32 +-27 +33 +-28 +32 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +31 +-26 +33 +-27 +32 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +33 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +33 +-26 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +30 +-30 +30 +-30 +30 +-30 +30 +-30 +31 +-28 +32 +-27 +31 +-29 +31 +-30 +30 +-30 +30 +-30 +30 +-30 +31 +-29 +31 +-28 +31 +-27 +32 +-29 +30 +-29 +30 +-29 +31 +-30 +31 +-30 +30 +-29 +31 +-28 +32 +-27 +31 +-29 +30 +-30 +31 +-30 +30 +-29 +31 +-30 +31 +-29 +31 +-27 +33 +-27 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +31 +-29 +31 +-26 +33 +-26 +33 +-28 +31 +-29 +31 +-28 +31 +-29 +31 +-29 +32 +-29 +32 +-27 +33 +-27 +33 +-28 +32 +-28 +31 +-29 +32 +-29 +30 +-29 +32 +-29 +32 +-27 +33 +-26 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-26 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +33 +-26 +33 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +30 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-29 +30 +-29 +31 +-30 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-30 +30 +-30 +30 +-30 +31 +-29 +30 +-28 +31 +-28 +31 +-30 +30 +-30 +30 +-30 +30 +-30 +30 +-30 +30 +-30 +30 +-26 +34 +-26 +33 +-29 +30 +-30 +30 +-31 +30 +-30 +29 +-31 +30 +-31 +30 +-28 +31 +-27 +32 +-29 +31 +-30 +30 +-30 +30 +-30 +31 +-29 +30 +-29 +31 +73 +-3 +42 +-26 +29 +-34 +26 +-35 +26 +-34 +27 +-34 +27 +-33 +27 +-33 +28 +-30 +31 +-31 +29 +-32 +29 +-31 +30 +-31 +29 +-31 +30 +-31 +30 +-30 +-107 +-44 +-97 +-4 +-58 +21 +-40 +33 +-33 +36 +-28 +39 +-22 +43 +-19 +44 +-15 +46 +-13 +47 +-13 +46 +-13 +45 +-16 +42 +-19 +41 +-21 +38 +-22 +38 +79 +3 +47 +-21 +33 +-29 +29 +-32 +29 +-31 +29 +-31 +30 +-31 +30 +-30 +31 +-28 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +-106 +-43 +-96 +-3 +-57 +23 +-39 +34 +-32 +37 +-26 +40 +-21 +44 +-19 +45 +-14 +47 +-13 +48 +-12 +47 +-13 +45 +-15 +43 +-18 +41 +-20 +39 +-22 +37 +78 +2 +46 +-22 +33 +-30 +29 +-32 +27 +-33 +28 +-32 +28 +-32 +29 +-31 +30 +-28 +32 +-29 +30 +-30 +30 +-32 +30 +-31 +29 +-31 +29 +-31 +30 +-30 +31 +-27 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +30 +-31 +30 +-30 +31 +-29 +30 +-28 +33 +-28 +31 +-29 +30 +-31 +30 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-27 +33 +-28 +32 +-29 +31 +-30 +30 +-31 +31 +-30 +31 +-30 +31 +-29 +32 +-27 +34 +-28 +31 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +32 +-29 +31 +-26 +33 +-27 +32 +-29 +31 +-30 +30 +-30 +31 +-30 +30 +-29 +31 +-29 +32 +-27 +33 +-28 +32 +-29 +32 +-30 +31 +-29 +31 +-29 +31 +-29 +32 +-28 +-106 +-42 +-95 +-2 +-57 +23 +-39 +35 +-31 +38 +-26 +41 +-21 +45 +-18 +45 +-14 +47 +-12 +48 +-12 +47 +-13 +45 +-15 +44 +-17 +41 +-19 +39 +-22 +38 +78 +2 +47 +-21 +33 +-30 +29 +-33 +29 +-31 +30 +-31 +30 +-31 +30 +-31 +30 +-29 +32 +-30 +30 +-30 +30 +-31 +30 +-30 +30 +-30 +31 +-30 +32 +-29 +-106 +-43 +-96 +-3 +-57 +23 +-39 +34 +-32 +37 +-27 +40 +-22 +44 +-19 +44 +-15 +47 +-12 +48 +-13 +46 +-14 +45 +-16 +43 +-18 +41 +-20 +39 +-22 +37 +-22 +38 +-23 +36 +-25 +35 +-26 +34 +-27 +34 +-27 +33 +-27 +33 +-27 +33 +-25 +34 +-25 +34 +-27 +32 +-28 +32 +-28 +32 +-28 +32 +-29 +31 +-29 +32 +73 +-3 +43 +-25 +30 +-33 +26 +-35 +26 +-34 +27 +-34 +27 +-33 +28 +-32 +29 +-29 +30 +-31 +29 +-31 +30 +-32 +29 +-31 +30 +-31 +30 +-30 +30 +-30 +-107 +-44 +-96 +-3 +-58 +23 +-40 +33 +-33 +36 +-27 +40 +-21 +44 +-19 +45 +-15 +47 +-13 +47 +-13 +46 +-14 +45 +-15 +43 +-18 +41 +-20 +38 +-23 +37 +-22 +37 +-23 +36 +-25 +34 +-26 +34 +-27 +33 +-27 +33 +-27 +33 +-27 +33 +-26 +34 +-25 +34 +-27 +32 +-28 +31 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +73 +-2 +43 +-25 +30 +-34 +25 +-35 +25 +-35 +27 +-34 +26 +-33 +27 +-33 +28 +-30 +30 +-31 +29 +-32 +29 +-32 +29 +-31 +29 +-31 +30 +-31 +31 +-30 +31 +-27 +32 +-29 +31 +-29 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-29 +32 +-26 +33 +-28 +32 +-29 +32 +-30 +31 +-29 +31 +-30 +31 +-29 +32 +-29 +32 +-26 +34 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-27 +33 +-29 +31 +-30 +31 +-31 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +-107 +-44 +-97 +-4 +-58 +22 +-40 +33 +-32 +37 +-27 +40 +-22 +43 +-19 +44 +-15 +47 +-13 +48 +-12 +46 +-13 +44 +-15 +43 +-18 +41 +-20 +38 +-22 +37 +78 +2 +47 +-22 +33 +-30 +29 +-33 +27 +-33 +28 +-32 +29 +-32 +29 +-31 +29 +-29 +31 +-30 +30 +-31 +30 +-31 +30 +-31 +30 +-31 +29 +-31 +30 +-30 +-108 +-45 +-98 +-4 +-58 +22 +-40 +32 +-33 +36 +-28 +39 +-23 +43 +-20 +44 +-16 +45 +-13 +47 +-13 +46 +-14 +44 +-16 +43 +-17 +41 +-20 +39 +-22 +37 +-22 +37 +-23 +36 +-25 +34 +-26 +34 +-27 +34 +-27 +33 +-27 +33 +-27 +33 +-25 +34 +-25 +34 +-27 +33 +-28 +32 +-28 +31 +-29 +32 +-29 +31 +-28 +31 +73 +-3 +42 +-26 +30 +-33 +26 +-35 +25 +-34 +26 +-35 +27 +-34 +27 +-33 +28 +-30 +30 +-31 +29 +-32 +29 +-32 +29 +-32 +29 +-31 +29 +-31 +30 +-30 +-108 +-44 +-97 +-4 +-58 +22 +-40 +33 +-33 +36 +-28 +39 +-22 +43 +-19 +44 +-15 +46 +-13 +47 +-13 +46 +-14 +44 +-16 +43 +-18 +41 +-20 +38 +-22 +36 +78 +1 +46 +-22 +33 +-30 +29 +-33 +27 +-32 +29 +-32 +29 +-31 +29 +-30 +31 +-28 +32 +-29 +30 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +32 +-29 +-106 +-43 +-96 +-2 +-56 +23 +-38 +34 +-32 +38 +-26 +41 +-21 +44 +-19 +46 +-14 +47 +-12 +48 +-12 +47 +-13 +45 +-15 +43 +-17 +42 +-20 +39 +-21 +38 +79 +2 +47 +-21 +34 +-29 +30 +-32 +29 +-31 +29 +-32 +30 +-31 +29 +-30 +30 +-28 +32 +-30 +30 +-30 +30 +-31 +30 +-31 +30 +-30 +30 +-30 +31 +-30 +-107 +-43 +-96 +-3 +-58 +22 +-39 +33 +-32 +37 +-27 +40 +-21 +44 +-19 +44 +-15 +47 +-13 +47 +-13 +46 +-14 +45 +-16 +43 +-18 +40 +-21 +38 +-23 +37 +-22 +37 +-23 +36 +-25 +34 +-26 +33 +-27 +33 +-27 +33 +-27 +33 +-27 +33 +-26 +34 +-25 +33 +-27 +32 +-28 +32 +-29 +31 +-29 +32 +-29 +32 +-29 +31 +-27 +33 +-27 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +30 +-29 +31 +-29 +31 +-27 +32 +-26 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +73 +-3 +43 +-25 +30 +-33 +26 +-35 +26 +-34 +27 +-34 +27 +-33 +28 +-32 +28 +-29 +31 +-31 +30 +-31 +29 +-31 +29 +-31 +30 +-31 +30 +-30 +30 +-30 +-107 +-43 +-96 +-3 +-58 +23 +-39 +33 +-32 +37 +-28 +40 +-21 +43 +-19 +43 +-15 +47 +-13 +47 +-13 +46 +-14 +45 +-16 +42 +-18 +40 +-21 +38 +-23 +37 +77 +1 +46 +-22 +33 +-31 +28 +-33 +28 +-33 +28 +-33 +28 +-32 +29 +-31 +30 +-29 +31 +-30 +30 +-31 +30 +-31 +30 +-30 +30 +-31 +31 +-30 +30 +-29 +-107 +-44 +-96 +-3 +-58 +22 +-40 +33 +-32 +36 +-27 +41 +-21 +44 +-19 +44 +-15 +47 +-12 +48 +-12 +46 +-13 +45 +-15 +43 +-17 +41 +-20 +39 +-22 +38 +79 +2 +48 +-21 +33 +-30 +29 +-33 +29 +-32 +30 +-31 +29 +-31 +30 +-30 +31 +-28 +32 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-31 +30 +-30 +31 +-29 +-107 +-43 +-96 +-3 +-58 +23 +-40 +33 +-32 +37 +-27 +40 +-21 +44 +-18 +45 +-15 +47 +-13 +47 +-12 +47 +-13 +45 +-15 +43 +-18 +41 +-20 +38 +-22 +37 +-23 +37 +-23 +36 +-25 +34 +-26 +34 +-27 +33 +-26 +33 +-27 +33 +-27 +33 +-26 +34 +-25 +34 +-27 +32 +-28 +32 +-28 +32 +-28 +32 +-28 +32 +-29 +32 +-26 +33 +-26 +33 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-28 +33 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +32 +-28 +31 +-27 +32 +-29 +31 +-29 +31 +-29 +30 +-30 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +33 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-26 +33 +-26 +33 +-28 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +30 +-29 +30 +-30 +31 +-26 +34 +-26 +32 +-29 +31 +-29 +31 +-29 +30 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-30 +30 +-30 +30 +-30 +30 +-29 +31 +-28 +32 +-27 +31 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +30 +-30 +31 +-28 +31 +-28 +32 +-29 +31 +-30 +30 +-30 +30 +-30 +30 +-30 +31 +-29 +31 +-27 +32 +-26 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-29 +31 +-28 +32 +-28 +32 +-29 +30 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-29 +31 +-27 +33 +-27 +32 +-28 +31 +-29 +31 +-29 +31 +-29 +32 +-29 +32 +-29 +31 +-27 +32 +-27 +33 +-28 +31 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +31 +-27 +33 +-26 +32 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +33 +-29 +31 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +33 +-28 +31 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +33 +-29 +31 +-29 +30 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-27 +34 +-26 +32 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-28 +31 +-30 +31 +-30 +31 +-29 +30 +-30 +31 +-30 +30 +-28 +31 +-28 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +30 +-30 +30 +-29 +31 +-28 +32 +-27 +32 +-29 +30 +-30 +31 +-30 +31 +-29 +30 +-30 +31 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +33 +-28 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +32 +-28 +31 +-27 +32 +-27 +32 +-29 +31 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-26 +32 +-29 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-29 +30 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +32 +-27 +33 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-28 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +30 +-30 +30 +-30 +30 +-30 +30 +-30 +30 +-28 +32 +-28 +31 +-30 +30 +-30 +30 +-31 +30 +-30 +30 +-30 +30 +-30 +31 +-28 +31 +-27 +31 +-30 +30 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-29 +31 +-28 +32 +-27 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-26 +34 +-25 +33 +-28 +32 +-28 +32 +-28 +32 +-28 +32 +-28 +32 +-28 +32 +-27 +32 +-26 +33 +-28 +32 +-28 +31 +-29 +31 +-28 +32 +-28 +31 +-28 +32 +-27 +32 +-26 +33 +-29 +32 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-28 +31 +-27 +33 +-26 +33 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +30 +-29 +31 +-27 +33 +-27 +32 +-29 +31 +-30 +30 +-30 +31 +-29 +30 +-30 +31 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-30 +30 +-29 +31 +-29 +31 +-30 +30 +-28 +32 +-28 +32 +-29 +30 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-29 +30 +-29 +31 +-30 +31 +-29 +31 +-27 +33 +-26 +33 +-29 +31 +-29 +30 +-30 +31 +-30 +31 +-29 +31 +-29 +32 +-27 +33 +-26 +32 +-28 +31 +-29 +31 +-29 +31 +-30 +32 +-28 +32 +-28 +32 +-26 +33 +-27 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +33 +-26 +33 +-28 +31 +-30 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-27 +32 +-28 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-29 +31 +-27 +33 +-27 +33 +-29 +30 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +32 +-26 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-28 +31 +-25 +34 +-26 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-29 +31 +-27 +33 +-26 +33 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +72 +-3 +42 +-26 +29 +-34 +25 +-35 +25 +-35 +26 +-34 +26 +-34 +28 +-33 +28 +-30 +30 +-31 +29 +-32 +29 +-33 +28 +-32 +29 +-31 +29 +-31 +30 +-30 +-107 +-43 +-96 +-4 +-58 +22 +-40 +33 +-33 +36 +-28 +39 +-22 +43 +-20 +44 +-15 +47 +-13 +47 +-13 +46 +-14 +45 +-15 +43 +-18 +40 +-21 +38 +-23 +37 +78 +2 +46 +-22 +33 +-30 +29 +-32 +28 +-33 +28 +-32 +29 +-32 +29 +-31 +30 +-28 +32 +-30 +30 +-30 +30 +-31 +30 +-30 +30 +-31 +30 +-30 +31 +-30 +-107 +-44 +-96 +-3 +-58 +22 +-40 +33 +-33 +37 +-28 +40 +-22 +43 +-19 +44 +-15 +47 +-12 +47 +-13 +47 +-14 +45 +-15 +43 +-18 +41 +-20 +39 +-22 +37 +78 +2 +46 +-22 +33 +-30 +29 +-32 +28 +-32 +29 +-31 +30 +-31 +30 +-30 +30 +-28 +33 +-29 +31 +-30 +29 +-31 +31 +-30 +31 +-29 +31 +-29 +32 +-29 +32 +-26 +34 +-28 +32 +-29 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-27 +33 +-28 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +32 +-26 +33 +-28 +32 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-27 +33 +-28 +32 +-29 +32 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-29 +32 +-26 +33 +-28 +32 +-29 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +32 +-27 +33 +-28 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +-107 +-43 +-97 +-4 +-58 +23 +-40 +33 +-32 +37 +-27 +39 +-22 +43 +-20 +43 +-15 +46 +-13 +46 +-13 +45 +-15 +44 +-16 +41 +-19 +39 +-22 +38 +-23 +36 +77 +1 +46 +-22 +32 +-32 +28 +-33 +27 +-34 +28 +-33 +28 +-32 +28 +-32 +29 +-29 +31 +-30 +30 +-31 +30 +-31 +29 +-32 +30 +-31 +30 +-30 +30 +-30 +-108 +-45 +-98 +-4 +-59 +22 +-40 +33 +-33 +36 +-28 +39 +-22 +44 +-20 +44 +-15 +46 +-13 +48 +-13 +47 +-13 +45 +-15 +43 +-17 +41 +-20 +39 +-22 +37 +-21 +38 +-22 +37 +-25 +35 +-25 +34 +-26 +34 +-27 +33 +-27 +33 +-27 +33 +-26 +34 +-25 +34 +-27 +33 +-28 +33 +-28 +32 +-28 +33 +-28 +32 +-28 +32 +74 +-2 +43 +-25 +30 +-32 +27 +-34 +27 +-33 +27 +-33 +29 +-32 +29 +-32 +29 +-29 +32 +-30 +31 +-30 +30 +-31 +30 +-30 +31 +-30 +31 +-29 +31 +-29 +-107 +-43 +-96 +-2 +-58 +23 +-39 +33 +-32 +37 +-27 +41 +-21 +44 +-19 +45 +-14 +48 +-13 +47 +-12 +46 +-13 +46 +-15 +43 +-18 +40 +-20 +39 +-22 +37 +-22 +37 +-23 +36 +-26 +34 +-27 +34 +-27 +33 +-28 +33 +-28 +33 +-27 +33 +-26 +34 +-25 +34 +-27 +32 +-28 +32 +-29 +31 +-28 +32 +-28 +32 +-29 +31 +74 +-2 +43 +-25 +29 +-33 +26 +-35 +25 +-35 +26 +-34 +27 +-33 +28 +-33 +28 +-30 +29 +-32 +28 +-32 +29 +-33 +28 +-31 +29 +-32 +29 +-32 +29 +-31 +29 +-28 +32 +-29 +30 +-30 +30 +-31 +30 +-31 +30 +-30 +30 +-30 +31 +-29 +31 +-27 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +32 +-26 +33 +-28 +32 +-29 +31 +-29 +31 +-29 +32 +-30 +31 +-29 +31 +-29 +31 +-28 +32 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +32 +-29 +-106 +-43 +-96 +-3 +-58 +23 +-39 +33 +-32 +37 +-27 +40 +-21 +45 +-18 +45 +-14 +47 +-12 +48 +-12 +47 +-13 +45 +-15 +44 +-17 +41 +-20 +39 +-22 +38 +79 +2 +47 +-22 +33 +-30 +29 +-32 +28 +-32 +29 +-32 +29 +-31 +29 +-30 +31 +-28 +33 +-29 +30 +-30 +30 +-31 +30 +-30 diff --git a/traces/lf_t5577_indala_224.pm3 b/traces/lf_t5577_indala_224.pm3 new file mode 100644 index 000000000..341602acf --- /dev/null +++ b/traces/lf_t5577_indala_224.pm3 @@ -0,0 +1,10000 @@ +27 +-33 +28 +-31 +30 +-30 +30 +-31 +29 +-31 +29 +-31 +29 +-31 +30 +-31 +30 +-31 +30 +-29 +31 +-28 +31 +-30 +30 +-30 +30 +-31 +30 +-31 +30 +-31 +30 +-31 +30 +-29 +31 +-29 +31 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +29 +-30 +31 +-28 +32 +-28 +32 +-29 +31 +-30 +30 +-31 +30 +-30 +30 +-30 +31 +-30 +31 +-29 +32 +-27 +32 +-29 +32 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-29 +31 +-27 +-105 +-42 +-96 +-3 +-58 +23 +-40 +33 +-32 +37 +-28 +40 +-21 +45 +-18 +45 +-13 +48 +-12 +47 +-13 +47 +-13 +45 +-15 +43 +-18 +41 +-20 +39 +-21 +38 +79 +3 +47 +-23 +32 +-31 +29 +-33 +29 +-32 +29 +-31 +30 +-31 +30 +-29 +32 +-27 +32 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +30 +-28 +-106 +-43 +-96 +-4 +-59 +22 +-41 +33 +-33 +36 +-28 +40 +-22 +44 +-19 +44 +-14 +47 +-14 +47 +-13 +46 +-13 +44 +-16 +43 +-18 +41 +-20 +38 +-22 +37 +-21 +38 +-24 +36 +-25 +34 +-27 +33 +-27 +33 +-27 +33 +-27 +33 +-27 +33 +-25 +34 +-26 +33 +-27 +33 +-28 +32 +-28 +32 +-29 +31 +-29 +32 +-28 +32 +-26 +34 +-27 +32 +-28 +32 +-29 +31 +-28 +32 +-29 +32 +-28 +32 +-28 +32 +-26 +33 +-28 +32 +-28 +31 +-29 +31 +-28 +32 +-29 +32 +-29 +31 +-29 +32 +73 +-4 +42 +-27 +29 +-33 +26 +-35 +26 +-35 +27 +-34 +27 +-34 +27 +-32 +29 +-31 +29 +-32 +28 +-33 +28 +-33 +29 +-32 +29 +-31 +29 +-32 +30 +-29 +31 +-29 +31 +-30 +29 +-31 +30 +-30 +30 +-30 +30 +-30 +30 +-30 +31 +-29 +32 +-27 +32 +-29 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +30 +-30 +30 +-28 +33 +-28 +33 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-28 +33 +-27 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-28 +-105 +-43 +-96 +-4 +-59 +21 +-40 +33 +-33 +36 +-28 +39 +-22 +43 +-20 +44 +-14 +47 +-14 +47 +-13 +47 +-13 +45 +-15 +42 +-18 +41 +-20 +39 +-21 +38 +-20 +38 +-23 +36 +-25 +35 +-26 +34 +-26 +34 +-27 +33 +-27 +33 +-26 +34 +-25 +35 +-26 +33 +-27 +32 +-28 +32 +-28 +32 +-28 +31 +-29 +32 +-28 +32 +73 +-3 +43 +-26 +29 +-33 +26 +-34 +26 +-34 +26 +-34 +27 +-33 +27 +-31 +29 +-30 +30 +-32 +29 +-32 +29 +-31 +30 +-31 +29 +-31 +29 +-30 +30 +-29 +32 +-28 +32 +-30 +30 +-31 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +32 +-27 +32 +-29 +32 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-28 +32 +-27 +33 +-29 +31 +-29 +31 +-29 +32 +-29 +32 +-29 +31 +-29 +31 +-28 +33 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-30 +31 +-27 +33 +-26 +33 +-29 +31 +-29 +31 +-29 +32 +-30 +32 +-29 +31 +-29 +31 +-28 +32 +-27 +33 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +32 +-28 +-105 +-43 +-96 +-3 +-58 +23 +-40 +33 +-33 +36 +-28 +41 +-21 +43 +-18 +45 +-14 +48 +-13 +47 +-12 +47 +-13 +45 +-15 +43 +-17 +41 +-20 +39 +-22 +38 +79 +2 +47 +-22 +32 +-30 +30 +-32 +29 +-32 +29 +-32 +29 +-31 +30 +-29 +32 +-28 +31 +-30 +30 +-30 +31 +-31 +30 +-31 +30 +-31 +30 +-30 +30 +-29 +32 +-28 +32 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-28 +33 +-29 +31 +-29 +30 +-30 +31 +-30 +31 +-30 +31 +-30 +30 +-28 +33 +-27 +33 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +30 +-29 +32 +-28 +33 +-27 +33 +-29 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-28 +32 +-28 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-28 +33 +-27 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +32 +-29 +32 +-29 +32 +-27 +33 +-27 +33 +-28 +32 +-29 +31 +-29 +32 +-29 +32 +-28 +32 +-29 +32 +-28 +33 +-26 +33 +-28 +32 +-29 +32 +-29 +31 +-29 +31 +-29 +32 +-29 +32 +-27 +33 +-26 +33 +-29 +31 +-29 +32 +-29 +31 +-29 +32 +-29 +32 +-29 +32 +-26 +-104 +-42 +-95 +-2 +-58 +23 +-39 +34 +-32 +37 +-27 +40 +-21 +44 +-18 +45 +-14 +48 +-13 +47 +-12 +47 +-13 +45 +-14 +44 +-17 +42 +-19 +39 +-21 +38 +-21 +38 +-23 +35 +-25 +34 +-27 +34 +-26 +34 +-27 +33 +-27 +33 +-27 +33 +-25 +34 +-26 +32 +-28 +33 +-29 +32 +-28 +31 +-29 +31 +-29 +32 +-28 +31 +73 +-3 +42 +-27 +29 +-33 +26 +-34 +26 +-35 +26 +-34 +27 +-34 +27 +-31 +29 +-30 +29 +-32 +29 +-32 +29 +-31 +29 +-31 +29 +-32 +30 +-31 +30 +-28 +31 +-28 +32 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-28 +33 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +32 +-27 +34 +-26 +33 +-28 +32 +-29 +32 +-29 +31 +-30 +31 +-29 +32 +-29 +32 +-27 +33 +-27 +33 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-27 +-105 +-43 +-96 +-4 +-58 +23 +-40 +32 +-33 +36 +-28 +40 +-22 +43 +-20 +43 +-15 +47 +-14 +46 +-13 +46 +-13 +44 +-16 +42 +-19 +40 +-21 +38 +-23 +36 +77 +1 +46 +-23 +32 +-30 +29 +-32 +28 +-33 +28 +-32 +29 +-31 +29 +-29 +31 +-29 +32 +-30 +30 +-30 +30 +-31 +30 +-30 +30 +-30 +31 +-30 +31 +-28 +-106 +-43 +-97 +-3 +-58 +22 +-40 +33 +-33 +37 +-28 +40 +-21 +43 +-19 +45 +-14 +47 +-13 +47 +-13 +46 +-14 +45 +-16 +43 +-18 +41 +-20 +39 +-22 +37 +-21 +37 +-24 +35 +-26 +34 +-27 +33 +-27 +34 +-27 +34 +-26 +34 +-26 +33 +-25 +35 +-26 +33 +-28 +32 +-28 +32 +-28 +32 +-29 +32 +-29 +32 +-28 +32 +-26 +34 +-28 +31 +-29 +31 +-29 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-26 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +73 +-3 +42 +-27 +28 +-33 +26 +-35 +26 +-34 +26 +-34 +26 +-34 +28 +-31 +29 +-31 +28 +-32 +29 +-32 +29 +-32 +29 +-31 +29 +-31 +30 +-31 +30 +-29 +31 +-29 +31 +-31 +30 +-31 +29 +-31 +29 +-31 +30 +-31 +30 +-30 +30 +-30 +32 +-28 +32 +-30 +30 +-30 +30 +-31 +30 +-30 +31 +-30 +30 +-30 +31 +-27 +-104 +-41 +-96 +-3 +-59 +22 +-40 +32 +-33 +36 +-28 +39 +-22 +43 +-19 +44 +-14 +48 +-13 +46 +-13 +46 +-14 +44 +-16 +43 +-18 +40 +-21 +39 +-22 +37 +78 +1 +47 +-22 +32 +-30 +29 +-32 +28 +-32 +28 +-32 +28 +-32 +29 +-29 +31 +-29 +31 +-30 +30 +-31 +30 +-31 +29 +-31 +29 +-30 +31 +-30 +31 +-28 +33 +-28 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-28 +32 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-30 +32 +-29 +31 +-29 +31 +-28 +32 +-28 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-28 +32 +-28 +32 +-29 +31 +-31 +31 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-27 +32 +-28 +33 +-29 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-28 +32 +-28 +33 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +33 +-26 +33 +-28 +32 +-29 +32 +-29 +32 +-29 +32 +-29 +31 +-30 +32 +-27 +33 +-27 +34 +-28 +32 +-29 +31 +-29 +32 +-30 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +33 +-27 +32 +-29 +32 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-30 +32 +-28 +32 +-27 +32 +-29 +32 +-29 +31 +-29 +31 +-29 +32 +-29 +32 +-28 +32 +-27 +33 +-27 +33 +-28 +32 +-29 +32 +-29 +32 +-29 +32 +-29 +32 +-29 +32 +-27 +34 +-26 +33 +-28 +32 +-29 +32 +-29 +31 +-29 +31 +-30 +32 +-29 +32 +-27 +33 +-27 +33 +-28 +32 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-29 +31 +-27 +33 +-27 +33 +-29 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-28 +33 +-27 +32 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-28 +32 +-27 +33 +-30 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +30 +-30 +30 +-28 +33 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +32 +-27 +33 +-26 +33 +-28 +32 +-29 +31 +-29 +31 +-29 +32 +-29 +32 +-29 +32 +-27 +33 +-27 +33 +-29 +32 +-29 +31 +-29 +32 +-30 +31 +-30 +31 +-29 +31 +-27 +33 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-28 +32 +-27 +33 +-29 +31 +-29 +32 +-29 +32 +-29 +31 +-30 +31 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-28 +33 +-27 +33 +-29 +31 +-30 +31 +-29 +32 +-29 +31 +-29 +31 +-29 +31 +-28 +33 +-27 +32 +-29 +31 +-29 +32 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-28 +32 +-27 +33 +-29 +32 +-29 +31 +-29 +31 +-29 +32 +-30 +31 +-29 +31 +-28 +33 +-27 +33 +-29 +30 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-30 +31 +-28 +32 +-28 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-29 +32 +-29 +31 +-30 +31 +-31 +31 +-29 +31 +-30 +31 +-30 +31 +-28 +32 +-28 +32 +-30 +31 +-30 +31 +-31 +30 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +32 +-29 +31 +-27 +33 +-27 +33 +-28 +31 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-29 +32 +-28 +33 +-26 +32 +-29 +32 +-29 +32 +-29 +32 +-29 +32 +-29 +32 +-29 +32 +-28 +32 +-27 +33 +-29 +32 +-28 +32 +-29 +31 +-29 +32 +-29 +32 +-29 +32 +-27 +33 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-30 +30 +-30 +32 +-28 +33 +-27 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +32 +-29 +31 +-28 +32 +-28 +33 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-29 +31 +-28 +33 +-27 +33 +-28 +31 +-29 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +33 +-27 +33 +-29 +32 +-29 +31 +-29 +32 +-29 +31 +-29 +32 +-29 +33 +-27 +33 +-27 +34 +-28 +32 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +-29 +32 +-27 +33 +-27 +33 +-29 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +30 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +32 +-29 +31 +-30 +31 +-28 +32 +-27 +33 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-27 +33 +-27 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +32 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +30 +-30 +30 +-30 +31 +-29 +31 +-30 +31 +-28 +32 +-28 +32 +-29 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +30 +-30 +30 +-28 +32 +-28 +32 +-29 +30 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-28 +32 +-28 +32 +-29 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +32 +-28 +32 +-27 +33 +-27 +33 +-28 +32 +-29 +32 +-29 +31 +-29 +31 +-29 +32 +-28 +32 +-28 +33 +-27 +33 +-28 +31 +-29 +32 +-29 +31 +-29 +32 +-29 +32 +-29 +32 +-27 +33 +-26 +33 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-28 +33 +-27 +33 +-29 +31 +-30 +31 +-30 +30 +-30 +30 +-30 +30 +-30 +31 +-28 +32 +-28 +31 +-30 +31 +-30 +31 +-31 +31 +-30 +30 +-30 +31 +-30 +31 +-28 +33 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-29 +32 +-27 +33 +-27 +33 +-28 +31 +-29 +31 +-30 +32 +-29 +31 +-29 +32 +-29 +32 +-28 +33 +-27 +32 +-29 +32 +-29 +32 +-29 +31 +-29 +31 +-29 +32 +-29 +32 +-27 +33 +-27 +33 +-29 +32 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-28 +33 +-27 +33 +-28 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +32 +-26 +-103 +-41 +-95 +-2 +-57 +22 +-39 +33 +-33 +36 +-27 +40 +-21 +43 +-19 +44 +-14 +47 +-13 +46 +-13 +46 +-15 +45 +-16 +42 +-18 +41 +-21 +38 +-22 +37 +78 +1 +46 +-23 +32 +-30 +29 +-33 +27 +-33 +28 +-32 +29 +-32 +29 +-30 +30 +-29 +31 +-30 +30 +-31 +30 +-31 +30 +-30 +30 +-31 +30 +-30 +31 +-28 +32 +-28 +32 +-29 +31 +-30 +30 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-28 +-105 +-43 +-97 +-4 +-59 +22 +-40 +33 +-33 +36 +-28 +39 +-22 +43 +-19 +44 +-15 +47 +-14 +45 +-13 +46 +-14 +45 +-15 +43 +-17 +41 +-20 +39 +-22 +37 +79 +1 +46 +-22 +32 +-30 +30 +-32 +29 +-32 +29 +-30 +30 +-31 +30 +-30 +32 +-28 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-28 +32 +-29 +31 +-30 +30 +-31 +30 +-30 +31 +-30 +31 +-29 +31 +-28 +32 +-28 +32 +-30 +31 +-30 +30 +-30 +30 +-31 +30 +-30 +31 +-30 +31 +-28 +32 +-28 +32 +-30 +30 +-30 +30 +-31 +30 +-30 +30 +-30 +30 +-31 +31 +-28 +32 +-27 +32 +-30 +31 +-30 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-27 +-105 +-42 +-95 +-3 +-57 +23 +-40 +33 +-32 +37 +-27 +40 +-21 +44 +-18 +45 +-14 +48 +-13 +48 +-12 +47 +-13 +45 +-15 +43 +-17 +41 +-20 +39 +-21 +37 +-21 +38 +-23 +36 +-25 +34 +-27 +33 +-27 +33 +-27 +33 +-27 +33 +-27 +32 +-25 +34 +-27 +33 +-27 +32 +-28 +32 +-29 +32 +-29 +31 +-29 +31 +-28 +33 +-26 +33 +-27 +32 +-28 +32 +-29 +31 +-29 +31 +-28 +32 +-28 +32 +-28 +32 +-26 +33 +-28 +32 +-29 +31 +-29 +31 +-28 +31 +-29 +32 +-29 +31 +-29 +31 +-26 +33 +-29 +32 +-28 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-28 +32 +-26 +34 +-28 +31 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +73 +-4 +42 +-27 +28 +-34 +26 +-35 +26 +-35 +26 +-34 +27 +-34 +27 +-32 +28 +-30 +29 +-32 +29 +-32 +29 +-32 +29 +-31 +29 +-31 +30 +-30 +30 +-28 +-106 +-43 +-97 +-4 +-58 +23 +-41 +33 +-33 +36 +-28 +40 +-22 +44 +-19 +44 +-14 +47 +-13 +47 +-13 +46 +-14 +45 +-15 +43 +-17 +41 +-20 +39 +-22 +37 +-21 +38 +-24 +35 +-26 +34 +-27 +33 +-27 +34 +-27 +33 +-27 +33 +-27 +33 +-25 +34 +-27 +33 +-27 +32 +-28 +32 +-28 +32 +-28 +32 +-28 +32 +-28 +32 +74 +-2 +43 +-26 +29 +-33 +26 +-35 +26 +-34 +26 +-34 +27 +-33 +28 +-31 +30 +-30 +30 +-32 +28 +-32 +29 +-32 +29 +-32 +29 +-31 +29 +-31 +31 +-29 +31 +-28 +32 +-30 +30 +-30 +30 +-31 +29 +-30 +30 +-31 +30 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +30 +-30 +30 +-27 +-105 +-42 +-96 +-3 +-58 +23 +-40 +32 +-33 +36 +-28 +40 +-22 +44 +-19 +44 +-14 +47 +-13 +46 +-13 +46 +-13 +45 +-15 +43 +-18 +41 +-20 +39 +-22 +37 +-21 +38 +-23 +36 +-25 +35 +-26 +34 +-26 +34 +-26 +34 +-26 +34 +-26 +34 +-24 +35 +-26 +33 +-27 +32 +-28 +32 +-28 +32 +-28 +32 +-28 +33 +-28 +32 +-26 +34 +-26 +32 +-29 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-26 +34 +-27 +32 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +73 +-3 +43 +-27 +29 +-33 +27 +-35 +26 +-34 +26 +-34 +27 +-33 +27 +-31 +29 +-30 +30 +-32 +29 +-31 +29 +-31 +29 +-32 +29 +-31 +30 +-30 +30 +-29 +32 +-28 +32 +-30 +30 +-31 +30 +-31 +30 +-30 +30 +-30 +31 +-30 +31 +-28 +32 +-28 +32 +-30 +31 +-31 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-28 +33 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-28 +32 +-29 +31 +-30 +30 +-31 +30 +-30 +31 +-30 +30 +-30 +30 +-29 +32 +-28 +32 +-30 +30 +-31 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-30 +30 +-31 +31 +-27 +-105 +-43 +-96 +-3 +-58 +23 +-39 +33 +-32 +37 +-28 +40 +-21 +44 +-18 +44 +-14 +48 +-13 +47 +-12 +47 +-13 +46 +-14 +44 +-17 +42 +-19 +39 +-21 +38 +80 +3 +47 +-22 +33 +-29 +30 +-32 +29 +-31 +29 +-32 +29 +-31 +30 +-28 +31 +-28 +32 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-30 +30 +-28 +-105 +-43 +-97 +-4 +-59 +22 +-40 +33 +-33 +36 +-28 +40 +-22 +44 +-19 +44 +-14 +47 +-14 +46 +-13 +45 +-14 +44 +-16 +43 +-18 +40 +-20 +38 +-23 +37 +-21 +37 +-24 +35 +-26 +34 +-27 +33 +-27 +33 +-27 +32 +-28 +33 +-26 +33 +-24 +35 +-26 +33 +-28 +32 +-28 +31 +-29 +32 +-29 +32 +-28 +31 +-29 +32 +73 +-3 +42 +-27 +29 +-33 +26 +-35 +26 +-35 +26 +-34 +27 +-33 +28 +-31 +30 +-30 +30 +-31 +29 +-32 +29 +-31 +30 +-31 +30 +-30 +30 +-30 +31 +-28 +33 +-27 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-29 +31 +-29 +32 +-28 +32 +-27 +33 +-29 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +32 +-29 +31 +-27 +32 +-27 +33 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-29 +31 +-29 +32 +-28 +33 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +30 +-28 +-106 +-43 +-97 +-4 +-59 +22 +-40 +33 +-33 +36 +-28 +39 +-22 +43 +-20 +44 +-14 +47 +-14 +46 +-14 +46 +-13 +44 +-15 +43 +-18 +41 +-21 +38 +-22 +37 +78 +1 +46 +-23 +32 +-30 +30 +-32 +29 +-31 +29 +-31 +29 +-32 +29 +-29 +31 +-28 +32 +-30 +30 +-31 +30 +-30 +30 +-30 +30 +-30 +31 +-30 +30 +-27 +34 +-26 +33 +-29 +31 +-30 +30 +-30 +30 +-31 +30 +-30 +30 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-29 +31 +-30 +31 +-28 +-105 +-43 +-97 +-3 +-58 +22 +-40 +33 +-33 +36 +-28 +39 +-22 +44 +-19 +45 +-14 +48 +-13 +47 +-13 +47 +-14 +45 +-15 +43 +-18 +41 +-20 +39 +-21 +37 +79 +2 +46 +-23 +32 +-31 +29 +-33 +28 +-32 +28 +-32 +29 +-32 +29 +-30 +31 +-28 +31 +-31 +29 +-31 +30 +-30 +30 +-31 +30 +-31 +30 +-30 +31 +-28 +32 +-28 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +32 +-27 +33 +-27 +33 +-28 +32 +-29 +32 +-29 +31 +-29 +31 +-29 +32 +-29 +32 +-26 +33 +-26 +34 +-28 +32 +-29 +31 +-29 +31 +-30 +32 +-29 +32 +-29 +32 +-27 +32 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-30 +32 +-30 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-27 +32 +-29 +32 +-30 +31 +-30 +30 +-30 +31 +-30 +32 +-29 +31 +-28 +32 +-28 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-28 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-27 +-105 +-43 +-96 +-3 +-58 +23 +-40 +34 +-32 +37 +-27 +40 +-22 +44 +-19 +44 +-14 +48 +-13 +47 +-12 +47 +-13 +45 +-15 +43 +-18 +41 +-20 +39 +-22 +37 +-21 +38 +-24 +35 +-25 +35 +-26 +34 +-26 +34 +-27 +33 +-27 +33 +-27 +33 +-25 +35 +-26 +33 +-27 +32 +-28 +32 +-28 +32 +-28 +32 +-29 +32 +-28 +32 +74 +-3 +42 +-26 +29 +-33 +26 +-35 +26 +-34 +26 +-34 +27 +-33 +28 +-31 +30 +-30 +29 +-31 +29 +-32 +29 +-32 +29 +-31 +29 +-32 +30 +-31 +30 +-29 +-106 +-45 +-98 +-4 +-59 +21 +-41 +31 +-34 +35 +-29 +38 +-23 +42 +-21 +44 +-15 +46 +-14 +46 +-13 +46 +-14 +44 +-16 +42 +-19 +41 +-21 +38 +-22 +37 +78 +1 +46 +-23 +32 +-30 +30 +-32 +28 +-32 +29 +-32 +29 +-31 +30 +-29 +31 +-28 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-29 +31 +-28 +32 +-27 +34 +-28 +31 +-30 +31 +-30 +32 +-29 +31 +-29 +31 +-29 +32 +-28 +33 +-27 +33 +-28 +32 +-29 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +32 +-27 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +32 +-29 +31 +-30 +31 +-27 +33 +-27 +33 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +33 +-27 +33 +-29 +31 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-28 +32 +-28 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +30 +-31 +31 +-29 +31 +-28 +-105 +-44 +-97 +-3 +-59 +22 +-40 +33 +-33 +37 +-28 +40 +-22 +44 +-19 +44 +-14 +47 +-13 +47 +-13 +47 +-13 +45 +-15 +44 +-17 +41 +-20 +38 +-22 +38 +79 +2 +47 +-23 +32 +-31 +29 +-32 +28 +-32 +28 +-32 +29 +-32 +29 +-29 +31 +-29 +32 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-27 +33 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-28 +32 +-27 +32 +-29 +32 +-29 +31 +-30 +31 +-29 +31 +-30 +30 +-30 +31 +-28 +33 +-27 +32 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-28 +32 +-28 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-29 +32 +-29 +32 +-28 +33 +-28 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-28 +32 +-27 +33 +-29 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +-105 +-42 +-96 +-3 +-58 +22 +-40 +32 +-32 +37 +-28 +40 +-22 +43 +-19 +44 +-14 +48 +-13 +46 +-13 +46 +-14 +45 +-15 +43 +-18 +41 +-20 +39 +-22 +38 +78 +2 +47 +-23 +32 +-30 +30 +-32 +29 +-32 +29 +-32 +29 +-31 +30 +-29 +31 +-28 +31 +-30 +30 +-30 +30 +-30 +30 +-31 +30 +-30 +31 +-30 +31 +-28 +-106 +-43 +-97 +-3 +-58 +21 +-41 +32 +-33 +37 +-28 +40 +-22 +44 +-19 +44 +-15 +47 +-13 +46 +-13 +46 +-14 +45 +-15 +43 +-18 +40 +-20 +39 +-22 +38 +78 +1 +47 +-22 +33 +-29 +29 +-32 +28 +-32 +29 +-32 +29 +-31 +30 +-29 +32 +-28 +32 +-30 +30 +-30 +30 +-31 +31 +-30 +30 +-30 +31 +-30 +31 +-28 +33 +-27 +33 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-29 +31 +-30 +31 +-28 +32 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-29 +32 +-29 +32 +-29 +31 +-28 +-105 +-42 +-96 +-3 +-58 +23 +-39 +33 +-33 +36 +-28 +40 +-21 +44 +-19 +45 +-15 +47 +-14 +46 +-13 +46 +-14 +45 +-15 +42 +-18 +41 +-20 +39 +-22 +37 +-21 +38 +-24 +35 +-25 +34 +-27 +34 +-26 +33 +-27 +34 +-27 +33 +-27 +33 +-24 +35 +-26 +33 +-27 +33 +-28 +31 +-28 +32 +-28 +32 +-28 +32 +-28 +32 +74 +-2 +43 +-26 +29 +-33 +27 +-34 +26 +-34 +27 +-34 +27 +-33 +27 +-31 +29 +-30 +30 +-32 +28 +-32 +29 +-32 +28 +-32 +29 +-31 +30 +-31 +29 +-29 +-106 +-45 +-98 +-5 +-60 +22 +-41 +32 +-34 +35 +-29 +38 +-23 +42 +-20 +43 +-15 +46 +-14 +46 +-13 +46 +-14 +44 +-16 +43 +-18 +41 +-20 +38 +-22 +38 +79 +2 +47 +-23 +32 +-30 +30 +-31 +28 +-32 +29 +-32 +29 +-31 +30 +-29 +31 +-28 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +32 +-27 +33 +-28 +32 +-29 +31 +-29 +32 +-29 +32 +-29 +31 +-29 +32 +-29 +31 +-28 +33 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +32 +-29 +32 +-29 +31 +-28 +-105 +-43 +-96 +-3 +-58 +23 +-40 +33 +-32 +37 +-27 +40 +-21 +44 +-19 +44 +-14 +47 +-13 +47 +-13 +46 +-14 +44 +-16 +43 +-18 +40 +-20 +39 +-21 +37 +-20 +39 +-23 +35 +-26 +34 +-27 +33 +-27 +33 +-28 +33 +-27 +32 +-27 +33 +-25 +34 +-27 +32 +-28 +32 +-28 +32 +-29 +31 +-30 +31 +-28 +32 +-28 +32 +-27 +33 +-28 +32 +-28 +32 +-29 +31 +-29 +31 +-29 +32 +-29 +32 +-28 +31 +-26 +34 +-27 +31 +-29 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +31 +-27 +33 +-28 +32 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-28 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +31 +73 +-3 +42 +-27 +29 +-34 +26 +-35 +25 +-34 +26 +-35 +27 +-33 +27 +-31 +29 +-30 +30 +-32 +29 +-31 +29 +-31 +29 +-31 +30 +-31 +30 +-30 +30 +-28 +-106 +-44 +-97 +-3 +-59 +22 +-40 +31 +-34 +37 +-28 +40 +-21 +44 +-19 +45 +-14 +48 +-13 +47 +-13 +46 +-13 +45 +-15 +43 +-18 +40 +-20 +38 +-22 +38 +78 +1 +47 +-23 +32 +-30 +28 +-33 +28 +-33 +29 +-32 +30 +-31 +29 +-29 +31 +-28 +32 +-31 +30 +-30 +30 +-31 +30 +-31 +30 +-30 +30 +-30 +31 +-28 +-105 +-43 +-96 +-3 +-58 +22 +-40 +33 +-33 +36 +-27 +41 +-21 +44 +-19 +44 +-15 +47 +-14 +46 +-13 +46 +-14 +45 +-15 +43 +-18 +40 +-20 +40 +-22 +37 +-21 +37 +-24 +35 +-26 +34 +-26 +34 +-26 +34 +-27 +33 +-28 +33 +-27 +34 +-25 +35 +-27 +33 +-28 +32 +-28 +32 +-28 +33 +-28 +31 +-28 +32 +-28 +33 +-25 +34 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-29 +32 +-26 +33 +-27 +32 +-29 +32 +-29 +30 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +73 +-3 +42 +-27 +28 +-34 +26 +-35 +25 +-35 +26 +-35 +26 +-34 +27 +-31 +28 +-30 +29 +-32 +29 +-32 +28 +-32 +29 +-32 +29 +-32 +29 +-31 +30 +-28 +31 +-28 +32 +-30 +31 +-30 +30 +-30 +31 +-30 +32 +-29 +31 +-29 +31 +-29 +33 +-27 +33 +-28 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-28 +-105 +-43 +-96 +-3 +-58 +22 +-40 +33 +-32 +37 +-27 +40 +-21 +44 +-19 +45 +-13 +47 +-13 +47 +-13 +46 +-13 +45 +-15 +43 +-18 +40 +-20 +39 +-22 +38 +78 +2 +47 +-22 +32 +-30 +29 +-32 +28 +-32 +30 +-31 +29 +-31 +30 +-29 +32 +-28 +31 +-30 +30 +-30 +30 +-31 +30 +-30 +29 +-31 +30 +-30 +31 +-28 +-106 +-44 +-98 +-3 +-58 +23 +-39 +33 +-33 +36 +-28 +39 +-22 +43 +-20 +44 +-15 +47 +-14 +46 +-13 +46 +-14 +45 +-16 +43 +-18 +40 +-20 +39 +-22 +36 +78 +1 +46 +-23 +31 +-31 +27 +-33 +29 +-32 +29 +-32 +28 +-32 +29 +-30 +30 +-29 +30 +-31 +30 +-30 +30 +-30 +30 +-31 +30 +-32 +29 +-31 +29 +-29 +-106 +-44 +-98 +-5 +-59 +22 +-41 +31 +-33 +37 +-28 +40 +-22 +43 +-19 +44 +-14 +47 +-14 +47 +-12 +46 +-13 +45 +-15 +44 +-17 +41 +-19 +40 +-21 +39 +-20 +38 +-23 +36 +-25 +35 +-26 +34 +-26 +34 +-27 +33 +-27 +34 +-27 +33 +-24 +35 +-26 +34 +-27 +32 +-28 +32 +-27 +32 +-28 +33 +-27 +32 +-27 +33 +74 +-2 +43 +-26 +30 +-33 +27 +-35 +26 +-34 +27 +-33 +27 +-33 +28 +-31 +29 +-30 +30 +-32 +29 +-32 +29 +-32 +29 +-31 +30 +-32 +29 +-31 +30 +-29 +-106 +-44 +-98 +-5 +-60 +21 +-41 +31 +-34 +34 +-29 +39 +-23 +43 +-20 +43 +-15 +46 +-15 +45 +-14 +45 +-15 +43 +-17 +42 +-19 +40 +-21 +38 +-23 +36 +77 +1 +46 +-23 +32 +-31 +28 +-33 +27 +-33 +28 +-33 +28 +-31 +30 +-29 +31 +-29 +31 +-30 +30 +-31 +29 +-31 +30 +-30 +30 +-30 +31 +-29 +31 +-28 +33 +-27 +33 +-29 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +32 +-29 +32 +-27 +33 +-27 +34 +-28 +31 +-29 +31 +-29 +32 +-29 +32 +-29 +32 +-29 +31 +-27 +33 +-27 +33 +-28 +31 +-29 +31 +-30 +32 +-29 +32 +-29 +31 +-29 +32 +-28 +33 +-27 +32 +-29 +32 +-28 +32 +-29 +31 +-29 +32 +-29 +32 +-29 +32 +-27 +-104 +-42 +-95 +-3 +-58 +23 +-39 +34 +-32 +37 +-27 +41 +-21 +44 +-19 +45 +-14 +47 +-13 +47 +-13 +47 +-14 +45 +-15 +43 +-18 +41 +-20 +39 +-22 +37 +-21 +37 +-24 +36 +-25 +34 +-27 +33 +-27 +34 +-27 +34 +-27 +33 +-27 +32 +-25 +34 +-27 +33 +-28 +32 +-28 +32 +-29 +31 +-30 +31 +-28 +32 +-28 +32 +-26 +34 +-27 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +32 +-26 +33 +-28 +32 +-29 +31 +-29 +30 +-30 +31 +-30 +30 +-30 +30 +-29 +31 +73 +-4 +42 +-27 +29 +-33 +25 +-36 +25 +-35 +26 +-34 +27 +-34 +27 +-32 +29 +-30 +30 +-32 +28 +-32 +29 +-32 +29 +-31 +30 +-31 +30 +-31 +30 +-29 +32 +-28 +31 +-30 +31 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +30 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-28 +-105 +-43 +-97 +-4 +-58 +22 +-41 +32 +-33 +36 +-28 +40 +-22 +43 +-20 +44 +-14 +47 +-14 +47 +-13 +46 +-14 +45 +-15 +43 +-18 +40 +-21 +39 +-21 +37 +-21 +38 +-24 +35 +-26 +34 +-26 +34 +-27 +34 +-27 +33 +-27 +33 +-28 +33 +-25 +34 +-27 +33 +-28 +32 +-29 +31 +-29 +31 +-28 +32 +-28 +32 +-28 +32 +74 +-3 +42 +-27 +29 +-33 +26 +-35 +26 +-34 +26 +-34 +27 +-34 +27 +-31 +30 +-29 +30 +-32 +29 +-32 +29 +-31 +29 +-31 +30 +-31 +30 +-30 +31 +-28 +-105 +-43 +-97 +-4 +-58 +23 +-40 +33 +-32 +36 +-28 +41 +-21 +44 +-19 +45 +-14 +48 +-13 +47 +-13 +47 +-13 +45 +-15 +43 +-17 +41 +-20 +39 +-21 +37 +79 +2 +47 +-22 +33 +-30 +30 +-31 +28 +-32 +29 +-31 +30 +-31 +30 +-29 +31 +-28 +32 +-30 +30 +-30 +30 +-30 +30 +-31 +30 +-30 +30 +-30 +31 +-27 +-105 +-42 +-96 +-3 +-58 +22 +-40 +33 +-32 +37 +-28 +39 +-22 +43 +-19 +44 +-14 +48 +-13 +46 +-13 +46 +-13 +45 +-16 +43 +-18 +40 +-20 +39 +-22 +38 +78 +2 +47 +-22 +32 +-30 +30 +-32 +28 +-32 +29 +-31 +30 +-31 +30 +-29 +31 +-28 +32 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-30 +30 +-28 +32 +-28 +32 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-28 +32 +-28 +32 +-30 +30 +-31 +30 +-31 +30 +-30 +30 +-30 +30 +-31 +31 +-28 +-105 +-43 +-97 +-4 +-59 +22 +-41 +33 +-33 +36 +-28 +39 +-22 +43 +-20 +44 +-14 +47 +-13 +46 +-12 +47 +-14 +45 +-15 +43 +-17 +41 +-21 +39 +-21 +39 +80 +2 +48 +-21 +33 +-29 +31 +-31 +29 +-32 +29 +-31 +30 +-30 +30 +-29 +31 +-28 +32 +-29 +32 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-27 +32 +-28 +32 +-29 +31 +-29 +30 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-28 +33 +-28 +32 +-29 +30 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-28 +32 +-27 +32 +-29 +30 +-30 +30 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-28 +32 +-28 +32 +-30 +31 +-30 +30 +-31 +30 +-30 +31 +-29 +31 +-29 +31 +-27 +-105 +-43 +-97 +-3 +-59 +23 +-40 +33 +-33 +37 +-27 +41 +-21 +44 +-19 +44 +-14 +48 +-13 +48 +-12 +47 +-13 +46 +-15 +44 +-17 +41 +-19 +40 +-21 +38 +79 +2 +47 +-22 +33 +-30 +29 +-32 +29 +-32 +29 +-32 +28 +-31 +29 +-30 +31 +-29 +31 +-30 +30 +-30 +30 +-31 +30 +-31 +30 +-30 +30 +-31 +30 +-28 +-106 +-44 +-97 +-4 +-59 +22 +-40 +32 +-33 +36 +-28 +39 +-23 +43 +-19 +44 +-14 +47 +-13 +47 +-13 +46 +-14 +45 +-15 +44 +-17 +41 +-20 +39 +-22 +38 +79 +2 +47 +-22 +32 +-30 +29 +-32 +28 +-32 +29 +-31 +30 +-31 +30 +-29 +31 +-28 +31 +-30 +30 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-28 +32 +-28 +32 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-28 +32 +-28 +32 +-29 +31 +-30 +30 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-28 +32 +-27 +31 +-30 +31 +-30 +30 +-30 +31 +-29 +31 +-30 +30 +-30 +31 +-28 +32 +-27 +32 +-29 +32 +-29 +31 +-30 +31 +-30 +32 +-29 +32 +-28 +32 +-27 +33 +-27 +33 +-28 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-28 +33 +-27 +32 +-29 +31 +-29 +31 +-30 +32 +-29 +31 +-29 +31 +-29 +32 +-27 +-104 +-42 +-96 +-2 +-57 +23 +-39 +33 +-33 +37 +-27 +40 +-21 +43 +-19 +45 +-14 +48 +-13 +47 +-12 +46 +-14 +46 +-14 +44 +-17 +41 +-20 +40 +-22 +38 +79 +2 +47 +-22 +32 +-30 +29 +-32 +28 +-32 +29 +-31 +30 +-31 +30 +-29 +31 +-28 +31 +-30 +30 +-31 +30 +-31 +30 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-31 +30 +-30 +30 +-30 +31 +-30 +30 +-30 +31 +-28 +32 +-28 +31 +-30 +30 +-30 +30 +-31 +30 +-30 +31 +-30 +31 +-30 +31 +-28 +-105 +-43 +-97 +-4 +-59 +21 +-41 +32 +-34 +36 +-28 +39 +-22 +43 +-20 +44 +-15 +47 +-14 +46 +-13 +45 +-14 +45 +-16 +43 +-18 +40 +-20 +38 +-23 +37 +-21 +37 +-24 +35 +-26 +34 +-27 +33 +-27 +33 +-27 +33 +-27 +33 +-27 +33 +-25 +34 +-27 +33 +-28 +32 +-29 +31 +-29 +32 +-29 +32 +-29 +31 +-28 +32 +73 +-3 +43 +-26 +29 +-33 +26 +-34 +27 +-34 +27 +-33 +28 +-32 +29 +-30 +30 +-29 +31 +-30 +31 +-29 +30 +-30 +32 +-29 +32 +-29 +31 +-29 +31 +-28 +33 +-27 +33 +-28 +31 +-29 +31 +-29 +32 +-29 +32 +-29 +31 +-29 +32 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-29 +32 +-27 +-105 +-43 +-96 +-4 +-58 +23 +-40 +33 +-32 +36 +-27 +40 +-22 +44 +-19 +44 +-14 +47 +-13 +47 +-13 +47 +-13 +45 +-15 +43 +-18 +41 +-20 +39 +-21 +37 +78 +1 +46 +-23 +32 +-31 +28 +-33 +28 +-33 +27 +-33 +28 +-32 +29 +-29 +31 +-29 +31 +-31 +30 +-31 +29 +-31 +29 +-32 +30 +-30 +30 +-31 +30 +-28 +32 +-28 +31 +-30 +30 +-30 +30 +-31 +30 +-30 +31 +-29 +31 +-29 +31 +-28 +32 +-28 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +32 +-26 +-104 +-42 +-95 +-2 +-57 +23 +-39 +34 +-32 +38 +-27 +41 +-21 +44 +-18 +45 +-14 +48 +-13 +47 +-12 +47 +-13 +46 +-15 +43 +-17 +41 +-20 +39 +-22 +38 +-21 +37 +-24 +36 +-25 +35 +-26 +34 +-26 +34 +-27 +34 +-26 +34 +-26 +34 +-24 +35 +-26 +33 +-27 +32 +-28 +32 +-28 +33 +-28 +32 +-28 +32 +-27 +32 +-26 +34 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-28 +32 +-26 +33 +-28 +32 +-28 +32 +-29 +31 +-29 +31 +-29 +32 +-28 +31 +-28 +32 +-27 +33 +-28 +31 +-29 +31 +-29 +32 +-29 +31 +-29 +30 +-30 +30 +-30 +31 +-28 +32 +-28 +31 +-29 +31 +-31 +31 +-29 +30 +-30 +30 +-31 +31 +-29 +31 +73 +-4 +41 +-27 +27 +-34 +26 +-36 +25 +-35 +25 +-34 +26 +-34 +27 +-32 +28 +-31 +29 +-32 +29 +-33 +28 +-32 +28 +-32 +29 +-32 +30 +-31 +29 +-29 +-107 +-45 +-98 +-5 +-60 +21 +-41 +32 +-33 +36 +-28 +39 +-22 +43 +-20 +45 +-13 +47 +-13 +47 +-13 +47 +-13 +44 +-15 +44 +-16 +42 +-20 +40 +-21 +38 +79 +2 +47 +-22 +32 +-30 +30 +-31 +29 +-31 +29 +-32 +29 +-31 +30 +-29 +31 +-28 +32 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +32 +-30 +31 +-28 +-106 +-43 +-96 +-3 +-58 +23 +-40 +33 +-33 +36 +-28 +39 +-22 +44 +-19 +44 +-15 +47 +-14 +46 +-13 +45 +-15 +44 +-16 +42 +-19 +40 +-21 +38 +-22 +37 +78 +2 +46 +-23 +32 +-31 +28 +-33 +28 +-33 +28 +-33 +28 +-32 +28 +-30 +30 +-30 +30 +-31 +29 +-31 +29 +-32 +29 +-31 +29 +-31 +29 +-31 +30 +-29 +-106 +-43 +-97 +-3 +-58 +22 +-40 +33 +-33 +36 +-27 +40 +-22 +43 +-19 +45 +-14 +47 +-14 +47 +-12 +47 +-14 +46 +-14 +44 +-17 +42 +-19 +40 +-22 +38 +79 +2 +47 +-21 +32 +-29 +30 +-32 +29 +-31 +29 +-31 +30 +-30 +30 +-28 +32 +-28 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +30 +-30 +32 +-30 +32 +-27 +32 +-28 +33 +-29 +32 +-29 +31 +-30 +31 +-29 +32 +-29 +31 +-29 +31 +-28 +33 +-27 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +32 +-28 +32 +-28 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-27 +32 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-28 +-105 +-43 +-96 +-2 +-58 +23 +-39 +33 +-32 +37 +-27 +40 +-21 +44 +-18 +44 +-14 +47 +-13 +48 +-12 +46 +-13 +45 +-15 +43 +-18 +41 +-20 +39 +-21 +38 +78 +1 +46 +-23 +32 +-30 +29 +-32 +28 +-32 +28 +-33 +29 +-31 +29 +-30 +30 +-29 +32 +-30 +30 +-31 +30 +-31 +30 +-31 +30 +-30 +30 +-30 +30 +-28 +-105 +-43 +-96 +-3 +-58 +23 +-40 +32 +-33 +37 +-28 +40 +-22 +43 +-19 +44 +-14 +48 +-13 +46 +-12 +46 +-14 +44 +-16 +43 +-18 +41 +-20 +38 +-22 +37 +78 +1 +47 +-23 +32 +-30 +28 +-33 +27 +-33 +29 +-32 +29 +-32 +29 +-30 +31 +-29 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-28 +32 +-28 +31 +-30 +32 +-29 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-28 +33 +-26 +33 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +-29 +32 +-27 +-105 +-43 +-96 +-3 +-58 +23 +-39 +32 +-33 +37 +-27 +40 +-22 +43 +-19 +44 +-14 +47 +-14 +47 +-13 +46 +-14 +44 +-15 +43 +-19 +39 +-21 +39 +-22 +37 +77 +1 +46 +-23 +31 +-31 +28 +-33 +27 +-33 +28 +-33 +29 +-32 +28 +-30 +30 +-29 +31 +-30 +29 +-31 +29 +-31 +30 +-32 +29 +-31 +30 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-29 +32 +-28 +32 +-27 +32 +-30 +32 +-29 +32 +-29 +31 +-29 +32 +-29 +32 +-29 +32 +-28 +32 +-27 +32 +-29 +32 +-28 +31 +-29 +31 +-30 +32 +-29 +31 +-29 +31 +-28 +33 +-27 +33 +-28 +32 +-30 +32 +-29 +31 +-29 +32 +-30 +32 +-29 +31 +-27 +-105 +-42 +-96 +-3 +-58 +23 +-40 +33 +-33 +36 +-27 +40 +-21 +44 +-19 +44 +-14 +47 +-13 +47 +-13 +46 +-14 +44 +-15 +43 +-18 +41 +-20 +39 +-22 +37 +-21 +37 +-24 +35 +-25 +34 +-27 +33 +-27 +33 +-28 +33 +-27 +33 +-27 +33 +-25 +34 +-27 +32 +-28 +31 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-29 +32 +-26 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-30 +30 +-30 +31 +-29 +31 +-26 +32 +-28 +32 +-29 +31 +-29 +31 +-30 +30 +-29 +31 +-29 +31 +-29 +32 +73 +-2 +43 +-26 +29 +-34 +26 +-34 +26 +-34 +27 +-33 +27 +-34 +27 +-31 +30 +-30 +30 +-31 +29 +-31 +30 +-31 +29 +-31 +30 +-31 +30 +-30 +31 +-28 +32 +-28 +31 +-30 +30 +-30 +31 +-30 +29 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-28 +33 +-29 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +32 +-29 +31 +-28 +33 +-27 +33 +-28 +31 +-30 +31 +-31 +31 +-29 +32 +-29 +31 +-29 +32 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +30 +-29 +31 +-30 +31 +-29 +31 +-27 +-105 +-43 +-96 +-4 +-58 +23 +-40 +33 +-33 +36 +-28 +40 +-22 +43 +-19 +44 +-15 +47 +-13 +46 +-13 +46 +-14 +44 +-15 +42 +-18 +41 +-20 +39 +-22 +37 +-22 +38 +-24 +36 +-25 +34 +-27 +34 +-27 +33 +-27 +33 +-27 +32 +-27 +33 +-25 +34 +-27 +32 +-28 +31 +-29 +32 +-28 +32 +-28 +32 +-29 +32 +-29 +31 +-26 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-26 +33 +-28 +32 +-28 +31 +-29 +30 +-29 +32 +-29 +31 +-29 +31 +-29 +32 +73 +-3 +42 +-26 +29 +-33 +26 +-35 +26 +-34 +27 +-33 +28 +-32 +28 +-31 +30 +-30 +30 +-31 +30 +-31 +29 +-31 +30 +-31 +30 +-31 +30 +-30 +31 +-28 +-105 +-43 +-97 +-4 +-59 +22 +-41 +32 +-33 +37 +-28 +39 +-22 +43 +-19 +44 +-14 +48 +-13 +47 +-12 +47 +-14 +45 +-15 +43 +-18 +41 +-20 +39 +-22 +38 +78 +1 +46 +-23 +32 +-30 +29 +-32 +29 +-32 +29 +-32 +29 +-31 +29 +-29 +31 +-28 +32 +-29 +30 +-30 +31 +-30 +30 +-31 +31 +-30 +30 +-30 +31 +-28 +33 +-27 +32 +-29 +32 +-29 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-28 +33 +-29 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-28 +32 +-28 +32 +-29 +31 +-30 +31 +-29 +31 +-30 +30 +-30 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-27 +-105 +-43 +-96 +-4 +-58 +22 +-41 +32 +-33 +36 +-28 +39 +-22 +43 +-19 +44 +-15 +47 +-14 +46 +-14 +45 +-14 +45 +-15 +43 +-18 +41 +-20 +39 +-21 +37 +-21 +38 +-24 +35 +-25 +34 +-26 +33 +-27 +33 +-27 +33 +-27 +33 +-26 +33 +-25 +35 +-26 +33 +-28 +32 +-28 +32 +-29 +32 +-28 +31 +-29 +32 +-28 +32 +-26 +33 +-28 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +31 +-26 +33 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +32 +73 +-3 +42 +-26 +29 +-33 +27 +-34 +25 +-34 +27 +-34 +27 +-33 +27 +-31 +30 +-30 +30 +-31 +29 +-31 +29 +-32 +30 +-31 +30 +-31 +30 +-30 +31 +-27 +-104 +-42 +-96 +-4 +-59 +22 +-40 +32 +-33 +36 +-29 +39 +-22 +42 +-20 +43 +-15 +47 +-14 +46 +-13 +45 +-15 +44 +-16 +43 +-18 +40 +-21 +38 +-23 +36 +78 +1 +46 +-23 +32 +-31 +28 +-33 +27 +-33 +28 +-32 +28 +-32 +30 +-30 +31 +-28 +31 +-30 +30 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-28 +32 +-27 +33 +-30 +31 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-29 +31 +-28 +32 +-28 +33 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-28 +33 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-29 +32 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-30 +31 +-28 +-105 +-43 +-96 +-4 +-58 +23 +-40 +33 +-33 +36 +-28 +40 +-22 +43 +-19 +45 +-14 +47 +-13 +47 +-13 +46 +-13 +45 +-14 +43 +-18 +41 +-20 +39 +-21 +38 +-21 +39 +-23 +36 +-25 +35 +-26 +34 +-26 +34 +-26 +34 +-26 +34 +-26 +34 +-24 +35 +-26 +33 +-27 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +-26 +33 +-28 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-27 +33 +-28 +31 +-28 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +32 +73 +-3 +42 +-26 +29 +-33 +26 +-34 +26 +-34 +27 +-34 +27 +-33 +27 +-31 +30 +-30 +30 +-31 +29 +-31 +30 +-31 +29 +-31 +29 +-31 +30 +-31 +30 +-28 +32 +-27 +32 +-30 +30 +-31 +30 +-31 +30 +-30 +30 +-30 +31 +-31 +31 +-28 +31 +-28 +32 +-30 +30 +-31 +30 +-30 +30 +-30 +30 +-30 +30 +-30 +30 +-28 +-105 +-43 +-97 +-4 +-58 +22 +-40 +32 +-33 +37 +-27 +41 +-21 +43 +-18 +45 +-14 +48 +-13 +47 +-12 +47 +-13 +45 +-15 +43 +-17 +41 +-20 +39 +-21 +38 +-20 +39 +-23 +35 +-25 +35 +-26 +35 +-26 +34 +-27 +34 +-27 +34 +-26 +33 +-24 +35 +-26 +33 +-27 +32 +-28 +32 +-28 +32 +-28 +32 +-28 +32 +-28 +32 +-26 +34 +-27 +32 +-28 +32 +-28 +32 +-29 +32 +-29 +31 +-29 +30 +-28 +33 +-26 +34 +-28 +32 +-28 +31 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-28 +32 +-26 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-26 +33 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-28 +32 +73 +-3 +43 +-27 +29 +-33 +26 +-34 +26 +-34 +27 +-33 +27 +-33 +28 +-31 +30 +-30 +30 +-31 +29 +-31 +29 +-31 +29 +-31 +30 +-31 +30 +-30 +31 +-28 +-105 +-44 +-97 +-4 +-58 +23 +-40 +32 +-33 +37 +-28 +40 +-22 +43 +-19 +44 +-15 +47 +-14 +46 +-13 +46 +-14 +44 +-16 +43 +-17 +41 +-20 +39 +-22 +37 +-21 +37 +-24 +35 +-26 +33 +-27 +34 +-27 +33 +-27 +32 +-28 +32 +-27 +33 +-25 +34 +-27 +32 +-28 +31 +-29 +30 +-30 +32 +-28 +32 +-28 +31 +-29 +31 +-26 +33 +-27 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-28 +31 +-30 +31 +-30 +30 +-29 +32 +-29 +32 +-28 +31 +-29 +31 +-27 +33 +-28 +31 +-29 +30 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-26 +33 +-27 +31 +-29 +32 +-29 +31 +-29 +31 +-29 +32 +-29 +32 +-28 +32 +-25 +34 +-28 +32 +-28 +32 +-28 +32 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-26 +33 +-28 +31 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-26 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +-26 +33 +-28 +32 +-28 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +73 +-3 +42 +-27 +29 +-33 +26 +-35 +26 +-34 +27 +-34 +28 +-33 +28 +-31 +30 +-30 +30 +-31 +29 +-31 +30 +-31 +30 +-31 +29 +-31 +30 +-30 +30 +-29 +32 +-28 +32 +-30 +30 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-27 +32 +-30 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +30 +-30 +31 +-27 +-105 +-43 +-96 +-3 +-58 +23 +-40 +33 +-33 +37 +-28 +40 +-22 +43 +-19 +44 +-15 +47 +-14 +47 +-12 +46 +-13 +45 +-15 +43 +-17 +41 +-20 +39 +-22 +37 +-21 +38 +-24 +35 +-25 +36 +-26 +35 +-26 +34 +-26 +34 +-26 +34 +-27 +33 +-24 +34 +-26 +33 +-28 +32 +-28 +32 +-28 +32 +-29 +32 +-29 +31 +-29 +32 +-26 +33 +-28 +31 +-29 +31 +-30 +31 +-30 +30 +-30 +30 +-29 +31 +-30 +31 +-27 +33 +-28 +31 +-30 +30 +-30 +30 +-30 +30 +-30 +30 +-30 +31 +-29 +31 +73 +-4 +41 +-28 +27 +-34 +25 +-36 +25 +-35 +25 +-34 +26 +-34 +27 +-32 +28 +-31 +29 +-32 +29 +-32 +28 +-32 +28 +-32 +29 +-32 +29 +-31 +29 +-29 +-106 +-44 +-97 +-4 +-59 +22 +-40 +32 +-33 +36 +-28 +40 +-22 +44 +-18 +44 +-14 +48 +-13 +47 +-13 +47 +-13 +45 +-15 +43 +-18 +41 +-20 +39 +-21 +38 +79 +2 +46 +-23 +32 +-30 +29 +-31 +29 +-31 +29 +-32 +29 +-31 +29 +-30 +31 +-29 +31 +-31 +30 +-30 +29 +-31 +30 +-30 +31 +-30 +30 +-30 +30 +-28 +32 +-28 +31 +-30 +31 +-30 +30 +-30 +30 +-31 +30 +-30 +31 +-30 +30 +-29 +31 +-29 +31 +-30 +31 +-30 +30 +-31 +30 +-31 +30 +-31 +30 +-30 +31 +-28 +31 +-28 +32 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-27 +33 +-26 +33 +-28 +32 +-28 +31 +-29 +32 +-29 +32 +-29 +31 +-29 +32 +-27 +-104 +-42 +-95 +-2 +-57 +23 +-39 +33 +-32 +37 +-27 +40 +-21 +44 +-19 +45 +-14 +47 +-13 +47 +-12 +47 +-13 +45 +-15 +43 +-18 +41 +-20 +39 +-22 +38 +-21 +38 +-24 +36 +-25 +34 +-27 +34 +-27 +33 +-27 +34 +-27 +33 +-26 +33 +-25 +34 +-26 +34 +-27 +33 +-28 +31 +-29 +32 +-29 +31 +-28 +32 +-28 +32 +73 +-3 +42 +-26 +29 +-34 +26 +-35 +25 +-35 +26 +-34 +27 +-33 +27 +-31 +29 +-31 +30 +-32 +28 +-32 +29 +-32 +29 +-31 +29 +-32 +29 +-31 +30 +-29 +-106 +-44 +-98 +-4 +-60 +22 +-40 +32 +-33 +36 +-29 +39 +-22 +43 +-19 +44 +-15 +46 +-15 +46 +-13 +46 +-14 +45 +-16 +43 +-18 +40 +-21 +38 +-22 +37 +-22 +37 +-24 +34 +-25 +35 +-27 +32 +-27 +33 +-27 +33 +-27 +33 +-28 +33 +-25 +34 +-27 +32 +-28 +32 +-29 +31 +-28 +31 +-29 +32 +-28 +31 +-28 +31 +-26 +34 +-28 +32 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-26 +33 +-28 +32 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-28 +32 +-26 +33 +-27 +33 +-27 +32 +-28 +31 +-29 +32 +-29 +31 +-29 +31 +-28 +32 +-26 +33 +-28 +31 +-28 +31 +-29 +32 +-29 +31 +-29 +31 +-28 +31 +-29 +32 +-26 +33 +-28 +32 +-29 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +32 +-28 +31 +-27 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-28 +31 +-27 +34 +-28 +32 +-28 +31 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-29 +32 +-26 +33 +-28 +31 +-29 +31 +-30 +30 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-26 +33 +-28 +31 +-29 +31 +-30 +30 +-29 +32 +-29 +31 +-30 +31 +-28 +31 +-27 +33 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-26 +33 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-26 +33 +-28 +32 +-29 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-28 +32 +-27 +33 +-28 +31 +-29 +31 +-30 +30 +-30 +31 +-30 +30 +-29 +31 +-29 +31 +-27 +32 +-28 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-26 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +31 +-29 +31 +-26 +34 +-28 +32 +-28 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-26 +32 +-28 +31 +-29 +32 +-29 +30 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +31 +-26 +33 +-28 +31 +-29 +30 +-30 +31 +-30 +31 +-29 +30 +-29 +31 +-29 +31 +-26 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-28 +31 +-26 +33 +-28 +31 +-29 +30 +-30 +31 +-29 +31 +-30 +31 +-29 +31 +-28 +32 +-26 +33 +-28 +31 +-30 +30 +-30 +31 +-29 +32 +-29 +31 +-29 +31 +-29 +31 +-26 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-28 +31 +-29 +32 +-27 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-27 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +30 +-30 +31 +-29 +31 +-27 +33 +-29 +31 +-29 +30 +-30 +31 +-30 +30 +-30 +30 +-29 +31 +-29 +31 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +30 +-29 +31 +-30 +31 +-29 +31 +-26 +33 +-28 +32 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-28 +32 +-26 +33 +-28 +32 +-28 +31 +-29 +31 +-29 +32 +-28 +31 +-28 +32 +-29 +32 +-25 +34 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-26 +34 +-28 +31 +-28 +31 +-30 +30 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-28 +32 +-28 +31 +-30 +31 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-26 +33 +-28 +32 +-29 +31 +-29 +31 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-26 +33 +-28 +32 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-26 +32 +-28 +31 +-29 +31 +-30 +30 +-29 +31 +-29 +31 +-29 +30 +-29 +31 +-26 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-26 +33 +-28 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-27 +32 +-29 +31 +-29 +31 +-30 +30 +-30 +30 +-30 +30 +-29 +31 +-29 +31 +-26 +33 +-28 +31 +-30 +31 +-30 +30 +-29 +30 +-30 +31 +-30 +31 +-29 +31 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +31 +-26 +33 +-28 +32 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-26 +34 +-27 +32 +-28 +31 +-30 +31 +-29 +31 +-30 +31 +-29 +31 +-28 +31 +-26 +33 +-28 +33 +-28 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-28 +31 +-26 +33 +-28 +31 +-29 +31 +-30 +30 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-26 +33 +-28 +32 +-29 +31 +-30 +30 +-29 +31 +-30 +31 +-29 +30 +-29 +31 +-26 +33 +-28 +32 +-28 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +33 +-28 +31 +-29 +32 +-30 +31 +-29 +31 +-29 +31 +-29 +32 +-29 +32 +-26 +34 +-27 +32 +-29 +32 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +-28 +31 +-25 +34 +-28 +32 +-28 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-30 +30 +-30 +30 +-30 +30 +-30 +31 +-26 +32 +-29 +31 +-30 +30 +-31 +29 +-32 +29 +-30 +30 +-30 +30 +-29 +30 +-28 +31 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +30 +-30 +30 +-29 +31 +-27 +32 +-29 +31 +-30 +30 +-31 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +32 +-26 +32 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-26 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +32 +-29 +32 +-29 +31 +-28 +31 +-26 +33 +-27 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +73 +-3 +42 +-26 +29 +-34 +26 +-35 +25 +-35 +26 +-35 +27 +-33 +28 +-31 +30 +-30 +30 +-32 +29 +-32 +28 +-32 +29 +-31 +30 +-30 +30 +-31 +29 +-29 +-106 +-44 +-97 +-5 +-59 +22 +-40 +32 +-33 +37 +-28 +39 +-22 +43 +-19 +44 +-14 +48 +-14 +47 +-13 +46 +-14 +45 +-16 +43 +-18 +40 +-20 +39 +-22 +38 +-21 +38 +-24 +36 +-25 +35 +-26 +34 +-27 +33 +-27 +32 +-27 +34 +-27 +33 +-24 +35 +-26 +33 +-27 +32 +-28 +32 +-28 +31 +-29 +32 +-29 +31 +-28 +32 +73 +-3 +42 +-26 +29 +-33 +27 +-34 +26 +-34 +26 +-34 +27 +-33 +27 +-31 +29 +-30 +30 +-32 +29 +-32 +29 +-31 +29 +-32 +30 +-31 +30 +-30 +30 +-28 +-105 +-44 +-97 +-3 +-58 +23 +-40 +33 +-33 +36 +-27 +40 +-22 +43 +-19 +44 +-14 +47 +-14 +47 +-13 +46 +-13 +44 +-16 +43 +-18 +41 +-20 +38 +-23 +37 +-22 +38 +-25 +35 +-26 +34 +-27 +34 +-27 +34 +-27 +33 +-27 +34 +-27 +33 +-24 +35 +-26 +33 +-27 +32 +-29 +32 +-28 +32 +-28 +32 +-29 +32 +-28 +32 +-26 +33 +-28 +31 +-29 +32 +-29 +30 +-29 +32 +-29 +32 +-28 +31 +-28 +32 +-26 +33 +-28 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +32 +73 +-3 +43 +-26 +28 +-34 +25 +-35 +25 +-35 +26 +-34 +27 +-33 +28 +-31 +30 +-30 +30 +-32 +29 +-32 +28 +-32 +29 +-32 +30 +-31 +30 +-30 +30 +-28 +32 +-28 +32 +-30 +30 +-31 +31 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-28 +32 +-27 +32 +-29 +32 +-29 +32 +-29 +31 +-29 +31 +-30 +32 +-29 +31 +-27 +33 +-27 +33 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +32 +-28 +33 +-27 +33 +-28 +31 +-30 +31 +-29 +32 +-29 +31 +-29 +32 +-29 +32 +-27 +32 +-27 +32 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-27 +33 +-27 +33 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-27 +-105 +-42 +-96 +-4 +-58 +23 +-39 +33 +-33 +36 +-28 +40 +-22 +43 +-19 +45 +-14 +48 +-13 +46 +-13 +46 +-14 +45 +-15 +43 +-18 +41 +-20 +38 +-22 +37 +78 +2 +47 +-23 +32 +-30 +29 +-32 +29 +-32 +29 +-32 +29 +-32 +29 +-29 +31 +-28 +31 +-30 +30 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-28 +32 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-29 +31 +-30 +31 +-28 +32 +-28 +33 +-28 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +32 +-29 +31 +-28 +-105 +-43 +-97 +-3 +-59 +22 +-40 +32 +-33 +36 +-28 +39 +-22 +44 +-18 +45 +-13 +48 +-14 +47 +-12 +47 +-13 +45 +-15 +43 +-18 +41 +-19 +40 +-21 +38 +-21 +38 +-23 +36 +-25 +35 +-26 +34 +-26 +33 +-27 +34 +-27 +33 +-27 +33 +-25 +34 +-27 +33 +-28 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +31 +73 +-3 +42 +-26 +29 +-33 +26 +-35 +26 +-34 +27 +-35 +26 +-33 +28 +-31 +29 +-30 +30 +-32 +29 +-32 +29 +-32 +29 +-31 +30 +-30 +30 +-30 +31 +-28 +32 +-28 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +30 +-29 +31 +-30 +31 +-28 +32 +-28 +32 +-29 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +33 +-26 +33 +-29 +32 +-29 +31 +-30 +31 +-29 +32 +-29 +32 +-29 +32 +-27 +33 +-27 +33 +-30 +30 +-30 +32 +-29 +32 +-29 +31 +-29 +31 +-29 +31 +-28 +-105 +-43 +-96 +-3 +-58 +22 +-40 +32 +-33 +37 +-28 +40 +-22 +43 +-19 +44 +-15 +47 +-13 +46 +-13 +46 +-14 +45 +-15 +43 +-18 +41 +-20 +38 +-22 +38 +-20 +38 +-23 +35 +-25 +35 +-27 +34 +-26 +34 +-27 +33 +-28 +33 +-27 +33 +-25 +35 +-26 +33 +-27 +32 +-28 +32 +-28 +32 +-28 +32 diff --git a/traces/lf_t5577_indala_hedem.pm3 b/traces/lf_t5577_indala_hedem.pm3 new file mode 100644 index 000000000..77edfb40a --- /dev/null +++ b/traces/lf_t5577_indala_hedem.pm3 @@ -0,0 +1,10000 @@ +31 +-29 +30 +-30 +30 +-30 +29 +-31 +31 +-30 +31 +-30 +31 +-29 +-107 +-44 +-97 +-4 +-58 +23 +-40 +33 +-33 +37 +-27 +40 +-22 +44 +-20 +43 +-16 +47 +-14 +47 +-13 +46 +-14 +45 +-16 +43 +-19 +40 +-21 +38 +-23 +37 +-23 +37 +-23 +36 +-26 +34 +-27 +33 +-27 +33 +-27 +33 +-28 +33 +-28 +33 +-26 +34 +-26 +34 +-28 +32 +-28 +32 +-29 +32 +-29 +32 +-29 +31 +-29 +32 +73 +-3 +42 +-25 +30 +-33 +25 +-35 +25 +-35 +26 +-34 +26 +-34 +26 +-33 +28 +-30 +30 +-30 +28 +-32 +29 +-31 +29 +-31 +28 +-32 +29 +-31 +30 +-31 +30 +-27 +32 +-29 +31 +-30 +30 +-30 +30 +-30 +30 +-30 +30 +-30 +30 +-29 +31 +-27 +33 +-28 +31 +-29 +31 +-30 +30 +-30 +31 +-29 +31 +-29 +32 +-28 +32 +-26 +34 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-28 +32 +-28 +32 +-26 +34 +-28 +32 +-28 +31 +-29 +32 +-28 +32 +-28 +31 +-28 +32 +-28 +-106 +-42 +-96 +-2 +-57 +23 +-39 +34 +-32 +38 +-27 +40 +-21 +44 +-19 +45 +-15 +47 +-12 +47 +-13 +46 +-14 +45 +-16 +43 +-18 +40 +-21 +38 +-24 +37 +77 +1 +46 +-22 +32 +-30 +29 +-32 +28 +-32 +28 +-32 +28 +-32 +29 +-31 +29 +-28 +31 +-30 +30 +-30 +30 +-31 +29 +-31 +29 +-31 +29 +-30 +31 +-29 +-107 +-44 +-97 +-3 +-59 +23 +-40 +32 +-33 +37 +-28 +40 +-22 +43 +-19 +45 +-15 +47 +-13 +47 +-13 +46 +-15 +45 +-16 +43 +-18 +41 +-21 +38 +-23 +37 +-22 +38 +-23 +37 +-26 +35 +-26 +34 +-27 +34 +-27 +33 +-28 +33 +-27 +33 +-26 +34 +-25 +34 +-27 +33 +-28 +32 +-28 +32 +-28 +33 +-29 +32 +-28 +32 +-27 +33 +-27 +33 +-28 +32 +-29 +32 +-30 +32 +-29 +32 +-29 +32 +-29 +32 +-28 +33 +-27 +33 +-28 +32 +-29 +31 +-29 +30 +-30 +31 +-30 +32 +-29 +32 +-27 +33 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-27 +33 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +33 +-27 +33 +-29 +31 +-29 +32 +-29 +32 +-29 +32 +-29 +31 +-29 +31 +-28 +33 +-27 +33 +-28 +31 +-29 +32 +-30 +31 +-29 +32 +-29 +32 +-29 +32 +-27 +32 +-27 +33 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-27 +33 +-27 +33 +-29 +31 +-29 +32 +-29 +31 +-30 +31 +-29 +32 +-29 +32 +-27 +33 +-26 +34 +-28 +32 +-28 +31 +-29 +31 +-29 +31 +-29 +32 +-29 +32 +-28 +33 +-27 +32 +-29 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +32 +-29 +31 +-28 +32 +-28 +32 +-29 +31 +-29 +30 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +30 +-30 +31 +-30 +30 +-31 +31 +-30 +31 +-28 +31 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-28 +32 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-29 +31 +-28 +33 +-27 +33 +-28 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +32 +-28 +33 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-28 +33 +-28 +32 +-29 +30 +-30 +30 +-31 +30 +-30 +30 +-30 +31 +-30 +31 +-28 +31 +-28 +32 +-31 +31 +-29 +31 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-28 +32 +-28 +32 +-29 +31 +-29 +31 +-30 +32 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +32 +-29 +32 +-29 +31 +-30 +31 +-30 +32 +-29 +32 +-27 +33 +-27 +33 +-29 +32 +-29 +31 +-29 +32 +-29 +32 +-29 +32 +-28 +32 +-27 +33 +-26 +33 +-28 +32 +-30 +31 +-29 +31 +-29 +32 +-29 +32 +-28 +32 +-27 +33 +-27 +33 +-28 +31 +-29 +32 +-30 +32 +-28 +32 +-29 +32 +-29 +32 +-27 +33 +-27 +32 +-29 +32 +-29 +31 +-29 +31 +-29 +32 +-30 +31 +-29 +31 +-28 +32 +-28 +32 +-29 +31 +-29 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-28 +31 +-28 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-28 +32 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-28 +33 +-27 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-28 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-30 +30 +-29 +32 +-27 +33 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-29 +32 +-29 +32 +-27 +33 +-27 +33 +-28 +31 +-29 +32 +-29 +32 +-29 +32 +-29 +32 +-29 +32 +-27 +33 +-26 +33 +-29 +32 +-29 +32 +-28 +32 +-29 +31 +-30 +32 +-28 +32 +-26 +34 +-27 +33 +-28 +31 +-29 +32 +-29 +32 +-29 +31 +-29 +31 +-29 +32 +-27 +33 +-26 +33 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-30 +31 +-28 +32 +-28 +32 +-29 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-28 +32 +-27 +33 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-27 +33 +-27 +33 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +32 +-27 +33 +-28 +32 +-29 +31 +-30 +32 +-30 +31 +-30 +30 +-30 +32 +-29 +31 +-27 +32 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +30 +-28 +33 +-28 +32 +-30 +30 +-30 +31 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-28 +32 +-28 +32 +-30 +31 +-30 +30 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-28 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-28 +33 +-27 +32 +-28 +32 +-29 +32 +-30 +31 +-29 +32 +-29 +32 +-29 +32 +-27 +33 +-27 +32 +-29 +32 +-29 +32 +-29 +31 +-29 +32 +-29 +32 +-29 +32 +-27 +33 +-27 +33 +-29 +32 +-29 +31 +-29 +32 +-29 +32 +-29 +31 +-29 +31 +-27 +33 +-27 +33 +-28 +32 +-29 +32 +-29 +32 +-29 +32 +-29 +32 +-30 +31 +-27 +33 +-26 +33 +-28 +32 +-28 +32 +-29 +32 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-26 +33 +-28 +31 +-29 +32 +-29 +31 +-29 +31 +-29 +32 +-29 +32 +-25 +34 +-26 +33 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +72 +-4 +42 +-26 +28 +-33 +25 +-36 +25 +-34 +26 +-34 +26 +-34 +27 +-33 +27 +-31 +29 +-32 +28 +-32 +28 +-32 +29 +-31 +29 +-31 +29 +-31 +29 +-30 +-108 +-44 +-97 +-3 +-59 +23 +-40 +33 +-33 +37 +-28 +40 +-21 +43 +-20 +44 +-16 +47 +-13 +47 +-13 +47 +-14 +46 +-15 +42 +-18 +41 +-21 +39 +-23 +37 +78 +1 +45 +-22 +33 +-30 +29 +-32 +28 +-32 +28 +-32 +28 +-32 +30 +-30 +30 +-28 +32 +-29 +30 +-30 +30 +-30 +29 +-30 +30 +-30 +31 +-29 +30 +-29 +-107 +-43 +-96 +-3 +-58 +23 +-40 +33 +-32 +37 +-28 +40 +-22 +44 +-19 +45 +-14 +47 +-13 +48 +-13 +47 +-14 +45 +-16 +43 +-18 +41 +-20 +39 +-23 +38 +78 +1 +46 +-22 +33 +-29 +29 +-32 +29 +-32 +29 +-31 +29 +-32 +29 +-31 +29 +-28 +31 +-29 +30 +-30 +30 +-30 +30 +-30 +30 +-30 +30 +-30 +30 +-29 +-107 +-43 +-97 +-4 +-59 +22 +-41 +33 +-32 +37 +-28 +41 +-22 +43 +-19 +44 +-15 +47 +-13 +47 +-13 +46 +-15 +45 +-16 +43 +-18 +40 +-21 +38 +-23 +37 +-23 +37 +-24 +36 +-26 +34 +-27 +33 +-27 +33 +-28 +33 +-28 +33 +-28 +32 +-27 +34 +-26 +34 +-28 +32 +-28 +32 +-29 +32 +-28 +32 +-28 +32 +-29 +32 +-27 +33 +-26 +33 +-29 +32 +-29 +31 +-29 +31 +-29 +32 +-29 +32 +-28 +32 +-27 +33 +-27 +34 +-28 +31 +-29 +32 +-29 +31 +-30 +31 +-29 +32 +-29 +32 +73 +-3 +42 +-25 +30 +-32 +26 +-35 +25 +-34 +25 +-34 +26 +-34 +27 +-33 +27 +-30 +30 +-31 +28 +-32 +28 +-32 +28 +-32 +29 +-32 +29 +-31 +29 +-31 +-108 +-45 +-98 +-5 +-59 +22 +-41 +33 +-33 +36 +-28 +40 +-22 +43 +-20 +44 +-15 +47 +-13 +47 +-13 +46 +-14 +45 +-16 +43 +-19 +40 +-21 +38 +-23 +37 +-22 +38 +-22 +36 +-26 +35 +-27 +34 +-27 +33 +-27 +33 +-28 +33 +-27 +32 +-26 +34 +-26 +34 +-28 +32 +-29 +32 +-29 +32 +-29 +31 +-29 +31 +-29 +32 +73 +-3 +43 +-25 +30 +-33 +25 +-35 +25 +-34 +26 +-34 +26 +-33 +27 +-33 +28 +-29 +30 +-31 +29 +-32 +28 +-32 +28 +-32 +29 +-31 +29 +-30 +30 +-30 +-108 +-44 +-97 +-3 +-58 +23 +-40 +33 +-33 +37 +-28 +40 +-22 +45 +-19 +45 +-15 +47 +-13 +48 +-14 +46 +-14 +45 +-16 +43 +-19 +40 +-21 +39 +-22 +38 +-22 +38 +-23 +36 +-25 +35 +-27 +34 +-27 +33 +-27 +33 +-27 +34 +-27 +34 +-26 +34 +-26 +34 +-28 +33 +-28 +32 +-28 +32 +-28 +33 +-29 +32 +-28 +31 +73 +-3 +42 +-25 +29 +-33 +26 +-34 +26 +-34 +26 +-34 +27 +-33 +28 +-32 +29 +-30 +31 +-31 +29 +-31 +29 +-32 +29 +-31 +30 +-31 +29 +-30 +30 +-30 +-108 +-43 +-97 +-3 +-58 +23 +-40 +33 +-33 +36 +-28 +39 +-22 +44 +-20 +44 +-16 +47 +-13 +47 +-13 +47 +-14 +45 +-16 +43 +-18 +41 +-21 +39 +-23 +38 +-22 +37 +-23 +37 +-25 +35 +-26 +33 +-28 +34 +-27 +34 +-27 +34 +-27 +33 +-26 +34 +-25 +34 +-27 +33 +-27 +33 +-28 +32 +-29 +32 +-29 +32 +-29 +32 +-28 +33 +-27 +33 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-27 +33 +-27 +33 +-29 +31 +-29 +32 +-29 +31 +-29 +32 +-29 +31 +-29 +32 +73 +-2 +42 +-26 +29 +-33 +25 +-35 +25 +-34 +27 +-33 +26 +-33 +27 +-32 +29 +-29 +30 +-30 +29 +-31 +29 +-32 +29 +-31 +30 +-31 +30 +-30 +30 +-29 +-107 +-43 +-97 +-3 +-58 +23 +-40 +33 +-33 +37 +-27 +40 +-22 +44 +-20 +44 +-15 +47 +-12 +48 +-13 +47 +-13 +45 +-16 +44 +-18 +41 +-20 +39 +-23 +37 +78 +2 +46 +-22 +32 +-30 +29 +-32 +28 +-32 +28 +-32 +29 +-31 +28 +-31 +29 +-29 +31 +-30 +29 +-31 +29 +-32 +30 +-31 +30 +-30 +30 +-30 +31 +-30 +-107 +-43 +-97 +-4 +-59 +22 +-40 +33 +-33 +38 +-27 +40 +-22 +43 +-20 +44 +-15 +46 +-13 +47 +-14 +46 +-15 +45 +-16 +42 +-19 +40 +-21 +39 +-22 +37 +-22 +38 +-23 +36 +-25 +34 +-26 +34 +-27 +34 +-27 +34 +-27 +33 +-27 +33 +-26 +35 +-25 +34 +-27 +33 +-27 +33 +-28 +32 +-28 +33 +-28 +33 +-28 +32 +74 +-2 +43 +-25 +31 +-32 +26 +-34 +26 +-33 +27 +-33 +27 +-33 +28 +-31 +29 +-29 +31 +-30 +30 +-30 +30 +-31 +30 +-30 +31 +-30 +30 +-30 +31 +-29 +-107 +-44 +-96 +-2 +-58 +23 +-39 +33 +-32 +38 +-27 +41 +-21 +44 +-19 +45 +-15 +47 +-13 +48 +-13 +46 +-14 +46 +-16 +43 +-18 +41 +-20 +39 +-23 +38 +78 +2 +47 +-21 +32 +-30 +29 +-32 +29 +-32 +28 +-32 +28 +-31 +29 +-31 +30 +-28 +31 +-29 +30 +-30 +30 +-31 +29 +-31 +30 +-31 +30 +-30 +30 +-29 +-107 +-44 +-97 +-3 +-58 +23 +-40 +33 +-33 +37 +-28 +40 +-22 +44 +-20 +44 +-15 +47 +-13 +47 +-13 +46 +-14 +45 +-16 +43 +-19 +40 +-21 +38 +-23 +37 +78 +2 +46 +-22 +33 +-31 +28 +-33 +27 +-32 +29 +-32 +29 +-32 +29 +-31 +29 +-29 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-30 +30 +-29 +31 +-29 +-107 +-43 +-96 +-3 +-58 +24 +-39 +33 +-33 +38 +-27 +41 +-21 +44 +-19 +45 +-15 +47 +-12 +48 +-12 +47 +-14 +45 +-16 +43 +-18 +41 +-20 +39 +-22 +38 +-22 +38 +-23 +36 +-26 +35 +-26 +34 +-27 +33 +-28 +33 +-27 +33 +-28 +33 +-27 +34 +-26 +34 +-27 +33 +-28 +33 +-28 +32 +-28 +32 +-29 +31 +-30 +31 +73 +-3 +43 +-25 +29 +-33 +25 +-35 +25 +-35 +26 +-34 +26 +-33 +28 +-33 +28 +-30 +29 +-31 +29 +-32 +29 +-32 +28 +-32 +29 +-32 +29 +-31 +29 +-30 +30 +-27 +32 +-28 +31 +-30 +30 +-31 +29 +-31 +30 +-30 +30 +-30 +30 +-30 +31 +-27 +32 +-28 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-29 +32 +-27 +33 +-28 +31 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-26 +33 +-28 +32 +-29 +32 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-28 +-106 +-43 +-96 +-3 +-58 +23 +-40 +33 +-32 +38 +-27 +41 +-21 +44 +-19 +44 +-15 +47 +-13 +48 +-13 +47 +-13 +45 +-16 +43 +-18 +41 +-20 +39 +-22 +38 +78 +1 +47 +-21 +33 +-30 +28 +-33 +28 +-32 +28 +-31 +29 +-31 +29 +-31 +29 +-29 +31 +-30 +30 +-31 +30 +-31 +29 +-31 +30 +-31 +29 +-30 +30 +-30 +-108 +-44 +-97 +-3 +-59 +22 +-41 +32 +-33 +37 +-28 +40 +-22 +43 +-20 +43 +-16 +46 +-14 +47 +-14 +45 +-14 +44 +-17 +43 +-18 +40 +-21 +39 +-23 +37 +-23 +37 +-24 +36 +-26 +35 +-27 +34 +-27 +33 +-27 +33 +-27 +34 +-27 +33 +-26 +34 +-26 +34 +-28 +33 +-28 +32 +-29 +32 +-28 +32 +-28 +32 +-28 +33 +-26 +34 +-26 +33 +-28 +32 +-29 +31 +-29 +31 +-29 +32 +-29 +32 +-29 +32 +-27 +34 +-27 +33 +-28 +32 +-28 +32 +-29 +33 +-28 +32 +-29 +32 +-28 +32 +-27 +33 +-26 +33 +-28 +33 +-29 +33 +-28 +32 +-29 +32 +-29 +32 +-28 +32 +-27 +33 +-27 +33 +-28 +32 +-28 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-27 +33 +-27 +32 +-29 +31 +-30 +30 +-31 +30 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-28 +32 +-29 +30 +-30 +31 +-30 +30 +-31 +30 +-30 +30 +-30 +31 +-28 +32 +-27 +32 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-28 +33 +-27 +33 +-28 +31 +-29 +31 +-30 +32 +-29 +32 +-29 +32 +-29 +32 +-26 +33 +-26 +33 +-28 +31 +-29 +32 +-28 +32 +-29 +32 +-29 +32 +-29 +32 +-27 +33 +-26 +34 +-28 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +32 +-28 +33 +-27 +33 +-29 +32 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-29 +31 +-28 +33 +-27 +32 +-29 +32 +-30 +32 +-29 +30 +-30 +32 +-29 +31 +-29 +31 +-27 +33 +-27 +33 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-28 +32 +-30 +30 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-28 +32 +-29 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +32 +-28 +32 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-28 +33 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-27 +33 +-27 +33 +-29 +32 +-29 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-27 +33 +-28 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +32 +-28 +33 +-27 +32 +-29 +31 +-30 +32 +-29 +32 +-28 +32 +-29 +32 +-29 +32 +-26 +34 +-26 +34 +-28 +32 +-29 +32 +-29 +32 +-29 +32 +-29 +32 +-29 +32 +-27 +33 +-27 +33 +-28 +32 +-29 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +33 +-27 +33 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-29 +32 +-29 +31 +-28 +33 +-27 +32 +-29 +31 +-29 +32 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-27 +32 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-28 +32 +-28 +32 +-30 +30 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-28 +32 +-28 +32 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-28 +33 +-27 +32 +-29 +32 +-29 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-27 +32 +-27 +33 +-28 +32 +-29 +31 +-29 +31 +-29 +32 +-29 +32 +-29 +32 +-27 +33 +-27 +33 +-28 +32 +-29 +32 +-30 +31 +-29 +32 +-29 +32 +-29 +31 +-28 +32 +-27 +33 +-29 +31 +-30 +31 +-29 +32 +-29 +32 +-29 +31 +-29 +31 +-28 +32 +-28 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-28 +32 +-28 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +30 +-30 +31 +-28 +31 +-28 +32 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-29 +32 +-28 +32 +-30 +30 +-30 +30 +-31 +31 +-30 +31 +-30 +30 +-30 +31 +-27 +33 +-26 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-28 +33 +-27 +33 +-28 +31 +-29 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +33 +-27 +33 +-28 +31 +-30 +32 +-29 +32 +-29 +32 +-29 +32 +-29 +31 +-28 +33 +-27 +33 +-28 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +32 +-27 +32 +-27 +32 +-29 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +30 +-30 +30 +-28 +32 +-28 +32 +-29 +30 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +33 +-29 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +32 +-28 +33 +-27 +33 +-29 +31 +-30 +31 +-30 +32 +-29 +32 +-29 +31 +-29 +32 +-27 +33 +-27 +33 +-29 +32 +-30 +31 +-30 +31 +-29 +32 +-29 +32 +-29 +31 +-28 +33 +-27 +33 +-28 +32 +-29 +32 +-30 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +33 +-27 +33 +-28 +32 +-29 +32 +-29 +31 +-29 +32 +-30 +31 +-29 +31 +-27 +33 +-27 +33 +-29 +32 +-29 +31 +-30 +31 +-30 +32 +-29 +31 +-29 +31 +-28 +33 +-27 +33 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +32 +-28 +33 +-29 +31 +-29 +31 +-30 +32 +-29 +32 +-29 +31 +-29 +31 +-28 +33 +-27 +33 +-29 +31 +-29 +32 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-27 +32 +-27 +33 +-29 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-27 +34 +-26 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +30 +-29 +32 +-27 +33 +-29 +30 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +72 +-3 +42 +-26 +29 +-33 +25 +-35 +25 +-34 +26 +-34 +26 +-33 +27 +-32 +29 +-29 +30 +-31 +30 +-31 +29 +-32 +29 +-31 +29 +-31 +30 +-30 +30 +-29 +-107 +-43 +-96 +-3 +-58 +23 +-39 +34 +-32 +38 +-27 +40 +-21 +45 +-19 +45 +-14 +47 +-13 +48 +-12 +47 +-13 +46 +-15 +44 +-18 +42 +-20 +39 +-23 +38 +78 +2 +47 +-22 +32 +-30 +29 +-32 +28 +-32 +29 +-32 +29 +-31 +29 +-30 +30 +-28 +31 +-30 +30 +-30 +30 +-31 +30 +-30 +30 +-30 +30 +-30 +31 +-29 +-107 +-43 +-96 +-3 +-58 +23 +-40 +33 +-33 +36 +-28 +40 +-22 +44 +-19 +44 +-16 +46 +-14 +48 +-13 +46 +-14 +44 +-17 +43 +-19 +40 +-21 +38 +-23 +37 +77 +1 +46 +-22 +32 +-31 +28 +-33 +27 +-32 +28 +-32 +28 +-32 +29 +-31 +30 +-29 +31 +-30 +30 +-30 +30 +-31 +30 +-30 +30 +-30 +30 +-30 +31 +-29 +-107 +-43 +-97 +-3 +-58 +22 +-40 +34 +-32 +38 +-27 +39 +-22 +45 +-19 +45 +-14 +47 +-13 +48 +-13 +47 +-14 +45 +-15 +43 +-18 +42 +-20 +39 +-22 +38 +-22 +38 +-23 +36 +-26 +35 +-26 +34 +-27 +34 +-27 +33 +-27 +33 +-28 +33 +-26 +34 +-25 +34 +-27 +33 +-28 +32 +-28 +32 +-29 +32 +-29 +32 +-29 +31 +-27 +34 +-27 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +32 +-28 +33 +-27 +32 +-29 +32 +-29 +31 +-29 +31 +-29 +32 +-29 +32 +-29 +31 +73 +-3 +42 +-25 +30 +-33 +26 +-34 +26 +-34 +26 +-34 +27 +-33 +27 +-32 +28 +-29 +30 +-31 +29 +-31 +29 +-32 +29 +-31 +30 +-31 +30 +-31 +30 +-30 +-108 +-43 +-97 +-3 +-58 +22 +-40 +33 +-33 +37 +-28 +39 +-22 +44 +-20 +45 +-15 +47 +-13 +47 +-13 +47 +-14 +45 +-16 +43 +-18 +40 +-21 +39 +-22 +38 +-21 +38 +-23 +37 +-25 +35 +-26 +34 +-27 +34 +-27 +33 +-27 +33 +-27 +34 +-26 +34 +-25 +34 +-27 +33 +-28 +32 +-29 +31 +-29 +32 +-29 +32 +-29 +32 +73 +-3 +42 +-25 +29 +-34 +25 +-35 +25 +-34 +25 +-35 +26 +-34 +27 +-33 +27 +-30 +30 +-32 +28 +-32 +28 +-32 +28 +-32 +29 +-32 +28 +-32 +30 +-30 +-108 +-44 +-98 +-4 +-59 +22 +-40 +32 +-33 +37 +-28 +40 +-22 +44 +-19 +44 +-16 +46 +-14 +47 +-13 +46 +-15 +45 +-17 +42 +-19 +40 +-22 +39 +-23 +37 +-22 +37 +-23 +37 +-25 +34 +-27 +34 +-27 +33 +-27 +34 +-27 +34 +-27 +33 +-26 +35 +-25 +34 +-27 +32 +-28 +33 +-29 +32 +-28 +32 +-28 +32 +-29 +32 +73 +-2 +43 +-25 +30 +-32 +26 +-34 +26 +-34 +27 +-33 +27 +-32 +28 +-32 +29 +-29 +30 +-30 +29 +-31 +30 +-30 +30 +-31 +29 +-31 +30 +-30 +31 +-30 +-107 +-44 +-97 +-4 +-59 +23 +-41 +33 +-33 +37 +-27 +40 +-22 +44 +-20 +45 +-15 +46 +-13 +47 +-14 +47 +-13 +45 +-15 +43 +-18 +41 +-21 +39 +-22 +37 +-23 +38 +-23 +36 +-25 +34 +-27 +34 +-27 +33 +-27 +33 +-27 +33 +-28 +33 +-26 +34 +-25 +34 +-27 +33 +-28 +33 +-28 +31 +-29 +33 +-28 +32 +-29 +32 +-27 +33 +-27 +33 +-28 +31 +-29 +31 +-29 +32 +-29 +32 +-29 +31 +-29 +31 +-28 +33 +-27 +32 +-29 +32 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-29 +31 +73 +-3 +42 +-25 +29 +-33 +26 +-35 +25 +-34 +26 +-34 +27 +-33 +27 +-32 +28 +-30 +30 +-31 +28 +-32 +29 +-31 +29 +-31 +29 +-31 +29 +-31 +29 +-30 +-108 +-44 +-97 +-3 +-58 +22 +-40 +32 +-33 +37 +-28 +40 +-22 +43 +-19 +45 +-15 +47 +-13 +47 +-13 +46 +-14 +45 +-15 +43 +-18 +41 +-20 +39 +-23 +37 +78 +2 +46 +-22 +32 +-30 +29 +-32 +28 +-32 +29 +-31 +29 +-31 +30 +-30 +30 +-27 +32 +-29 +31 +-30 +30 +-30 +30 +-30 +31 +-29 +31 +-29 +31 +-29 +-107 +-43 +-96 +-2 +-58 +23 +-39 +33 +-32 +38 +-27 +41 +-21 +44 +-19 +45 +-15 +47 +-13 +48 +-13 +47 +-13 +46 +-15 +43 +-18 +41 +-20 +39 +-22 +38 +-22 +38 +-23 +37 +-25 +35 +-26 +33 +-27 +34 +-27 +33 +-28 +33 +-28 +32 +-27 +34 +-26 +34 +-28 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +32 +-29 +31 +73 +-3 +43 +-25 +29 +-33 +25 +-35 +25 +-34 +26 +-34 +27 +-33 +27 +-32 +28 +-30 +30 +-30 +29 +-31 +29 +-32 +29 +-31 +29 +-31 +30 +-30 +30 +-29 +-107 +-43 +-97 +-4 +-58 +23 +-40 +34 +-32 +37 +-27 +41 +-22 +44 +-19 +44 +-15 +47 +-12 +48 +-13 +47 +-14 +45 +-16 +43 +-18 +41 +-20 +39 +-23 +37 +78 +2 +46 +-22 +33 +-30 +29 +-32 +28 +-32 +28 +-32 +29 +-31 +29 +-31 +30 +-28 +31 +-30 +30 +-31 +30 +-31 +30 +-30 +30 +-30 +30 +-30 +31 +-29 +-107 +-43 +-97 +-3 +-58 +23 +-40 +33 +-33 +37 +-27 +41 +-21 +44 +-19 +45 +-15 +47 +-12 +47 +-13 +47 +-14 +46 +-15 +44 +-18 +41 +-21 +39 +-22 +38 +78 +2 +47 +-20 +34 +-30 +29 +-32 +29 +-31 +28 +-31 +29 +-31 +29 +-30 +30 +-28 +32 +-29 +31 +-30 +30 +-30 +31 +-29 +31 +-29 +30 +-30 +31 +-29 +-107 +-44 +-97 +-3 +-58 +23 +-40 +33 +-33 +37 +-28 +40 +-22 +43 +-20 +44 +-16 +46 +-14 +47 +-14 +46 +-15 +45 +-16 +42 +-18 +41 +-21 +39 +-23 +37 +-22 +37 +-23 +36 +-26 +34 +-27 +34 +-27 +33 +-27 +34 +-27 +33 +-27 +33 +-26 +34 +-26 +34 +-27 +32 +-28 +32 +-29 +32 +-29 +32 +-29 +32 +-29 +32 +73 +-3 +43 +-25 +29 +-33 +26 +-35 +26 +-34 +26 +-34 +26 +-33 +27 +-33 +28 +-30 +30 +-31 +29 +-32 +29 +-32 +29 +-31 +29 +-32 +29 +-31 +30 +-30 +30 +-26 +32 +-29 +30 +-30 +30 +-31 +30 +-30 +30 +-30 +30 +-30 +30 +-30 +31 +-27 +32 +-28 +31 +-29 +31 +-30 +30 +-30 +30 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-28 +31 +-29 +31 +-29 +30 +-30 +30 +-30 +30 +-30 +30 +-29 +32 +-27 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +30 +-30 +31 +-29 +-107 +-43 +-96 +-3 +-59 +23 +-40 +34 +-33 +37 +-27 +40 +-22 +44 +-19 +45 +-14 +47 +-14 +47 +-13 +47 +-13 +45 +-15 +44 +-18 +41 +-21 +39 +-23 +37 +78 +2 +47 +-21 +33 +-30 +29 +-32 +27 +-32 +28 +-32 +29 +-31 +29 +-31 +28 +-30 +31 +-30 +30 +-30 +29 +-31 +30 +-30 +30 +-30 +30 +-30 +30 +-30 +-108 +-44 +-97 +-3 +-59 +22 +-40 +32 +-33 +37 +-28 +40 +-22 +44 +-20 +44 +-16 +46 +-13 +48 +-13 +47 +-14 +45 +-15 +43 +-19 +41 +-20 +39 +-22 +38 +-22 +38 +-23 +37 +-25 +35 +-26 +34 +-27 +33 +-27 +34 +-26 +33 +-27 +33 +-27 +34 +-25 +35 +-27 +33 +-28 +32 +-28 +32 +-28 +32 +-28 +32 +-29 +32 +-26 +33 +-27 +34 +-28 +32 +-29 +32 +-28 +32 +-29 +31 +-29 +32 +-29 +32 +-28 +33 +-27 +33 +-28 +31 +-29 +32 +-29 +32 +-29 +32 +-29 +31 +-29 +32 +-27 +33 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +32 +-28 +33 +-27 +32 +-29 +31 +-30 +31 +-30 +30 +-29 +31 +-30 +31 +-29 +31 +-27 +33 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-28 +32 +-27 +32 +-29 +32 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-28 +32 +-27 +33 +-29 +30 +-30 +30 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-29 +31 +-28 +32 +-28 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-27 +33 +-27 +33 +-28 +32 +-29 +32 +-29 +31 +-29 +32 +-29 +32 +-29 +31 +-27 +33 +-27 +33 +-28 +31 +-29 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-28 +33 +-27 +33 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-27 +32 +-27 +33 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +32 +-28 +32 +-27 +33 +-29 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +32 +-28 +33 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +32 +-28 +33 +-27 +33 +-29 +32 +-29 +32 +-29 +32 +-29 +31 +-29 +31 +-29 +32 +-27 +33 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +32 +-27 +33 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-28 +32 +-28 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-27 +32 +-27 +33 +-29 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-29 +32 +-27 +32 +-27 +33 +-29 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-28 +33 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +32 +-28 +33 +-26 +32 +-28 +32 +-30 +31 +-29 +31 +-29 +31 +-30 +32 +-29 +31 +-27 +33 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-29 +31 +-27 +33 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +32 +-30 +31 +-29 +31 +-28 +32 +-28 +33 +-29 +30 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +32 +-28 +33 +-27 +33 +-28 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +32 +-29 +32 +-27 +33 +-27 +33 +-29 +32 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-29 +31 +-28 +33 +-27 +33 +-28 +32 +-29 +31 +-29 +31 +-29 +32 +-29 +32 +-29 +31 +-27 +33 +-27 +33 +-29 +31 +-30 +32 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +33 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-28 +33 +-27 +33 +-28 +31 +-29 +32 +-29 +31 +-29 +32 +-29 +32 +-29 +31 +-27 +33 +-27 +33 +-28 +31 +-29 +32 +-29 +32 +-29 +31 +-29 +31 +-29 +32 +-28 +33 +-27 +33 +-28 +31 +-29 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +33 +-27 +33 +-29 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-28 +32 +-28 +33 +-29 +31 +-29 +30 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-28 +32 +-28 +32 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +30 +-30 +30 +-28 +32 +-28 +32 +-29 +30 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-28 +31 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +30 +-28 +33 +-27 +33 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-28 +33 +-27 +32 +-29 +32 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-27 +33 +-27 +33 +-28 +31 +-29 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +33 +-28 +32 +-30 +32 +-29 +31 +-29 +32 +-29 +32 +-29 +32 +-27 +33 +-27 +33 +-28 +32 +-28 +32 +-29 +32 +-28 +32 +-29 +32 +-29 +32 +-27 +34 +-26 +33 +-29 +32 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-30 +31 +-28 +32 +-28 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-28 +32 +-27 +32 +-30 +31 +-30 +30 +-30 +30 +-29 +31 +-30 +31 +-30 +30 +-28 +32 +-28 +32 +-30 +31 +-30 +30 +-31 +30 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-28 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-31 +31 +-29 +31 +-28 +33 +-27 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +32 +-29 +32 +-30 +31 +-26 +34 +-25 +34 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-29 +31 +-27 +33 +-27 +33 +-28 +32 +-30 +32 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +73 +-3 +42 +-26 +29 +-33 +26 +-35 +25 +-35 +26 +-34 +26 +-33 +27 +-33 +28 +-30 +30 +-31 +29 +-32 +29 +-32 +28 +-31 +29 +-32 +29 +-31 +30 +-30 +-108 +-44 +-97 +-4 +-59 +22 +-40 +33 +-33 +36 +-28 +39 +-22 +43 +-20 +44 +-16 +46 +-13 +47 +-14 +46 +-14 +44 +-16 +43 +-19 +41 +-21 +38 +-23 +37 +77 +2 +46 +-22 +32 +-30 +28 +-32 +27 +-32 +28 +-32 +28 +-32 +29 +-31 +29 +-29 +31 +-29 +30 +-30 +30 +-31 +30 +-31 +30 +-30 +30 +-30 +31 +-30 +-107 +-43 +-97 +-3 +-57 +23 +-39 +34 +-32 +37 +-27 +40 +-22 +45 +-18 +46 +-14 +48 +-12 +48 +-13 +47 +-14 +46 +-15 +43 +-18 +40 +-21 +39 +-23 +38 +78 +2 +46 +-22 +32 +-30 +29 +-32 +28 +-32 +28 +-32 +28 +-32 +29 +-30 +30 +-28 +32 +-29 +31 +-30 +30 +-31 +30 +-31 +30 +-30 +30 +-30 +30 +-30 +-107 +-43 +-97 +-4 +-58 +22 +-40 +33 +-33 +36 +-28 +40 +-22 +43 +-20 +44 +-16 +46 +-13 +47 +-14 +46 +-15 +45 +-16 +42 +-19 +41 +-21 +39 +-22 +37 +-22 +38 +-23 +37 +-25 +35 +-27 +34 +-27 +34 +-27 +33 +-27 +34 +-27 +34 +-25 +34 +-25 +34 +-28 +32 +-28 +33 +-28 +33 +-28 +33 +-28 +32 +-28 +33 +-26 +34 +-25 +34 +-27 +33 +-28 +33 +-28 +32 +-28 +32 +-29 +32 +-29 +32 +-27 +33 +-26 +33 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-30 +32 +-29 +31 +73 +-3 +42 +-25 +29 +-33 +25 +-35 +25 +-35 +25 +-34 +26 +-33 +27 +-33 +28 +-30 +30 +-31 +29 +-32 +28 +-32 +28 +-32 +29 +-32 +28 +-31 +29 +-31 +-108 +-44 +-97 +-4 +-59 +22 +-40 +32 +-33 +37 +-28 +40 +-22 +43 +-19 +44 +-16 +47 +-13 +47 +-13 +46 +-14 +45 +-16 +42 +-18 +40 +-21 +38 +-23 +37 +-22 +38 +-22 +37 +-25 +35 +-27 +34 +-27 +34 +-27 +34 +-27 +33 +-27 +33 +-26 +34 +-25 +34 +-27 +33 +-28 +32 +-29 +32 +-29 +32 +-29 +32 +-29 +32 +73 +-3 +41 +-25 +30 +-32 +26 +-35 +25 +-34 +26 +-33 +27 +-33 +28 +-32 +28 +-30 +30 +-31 +29 +-32 +29 +-31 +29 +-31 +30 +-31 +30 +-30 +30 +-30 +-108 +-44 +-97 +-4 +-59 +23 +-40 +33 +-32 +38 +-28 +41 +-21 +44 +-19 +45 +-15 +47 +-13 +47 +-13 +47 +-13 +45 +-16 +43 +-17 +41 +-20 +40 +-22 +38 +-22 +37 +-23 +37 +-25 +35 +-27 +33 +-27 +34 +-27 +34 +-27 +33 +-27 +33 +-26 +34 +-26 +34 +-27 +33 +-28 +33 +-28 +32 +-28 +32 +-29 +32 +-29 +32 +73 +-3 +42 +-25 +29 +-33 +26 +-34 +25 +-34 +26 +-34 +26 +-34 +27 +-33 +27 +-30 +30 +-31 +29 +-32 +28 +-32 +28 +-31 +29 +-31 +29 +-31 +29 +-30 +-108 +-44 +-97 +-5 +-59 +23 +-40 +33 +-33 +37 +-27 +41 +-22 +44 +-20 +44 +-15 +47 +-14 +47 +-13 +46 +-14 +45 +-16 +43 +-18 +41 +-20 +39 +-22 +38 +-22 +37 +-23 +36 +-26 +35 +-27 +34 +-27 +33 +-28 +33 +-28 +33 +-28 +32 +-27 +33 +-26 +34 +-28 +32 +-28 +32 +-29 +32 +-29 +32 +-29 +31 +-29 +32 +-27 +33 +-27 +33 +-29 +32 +-29 +32 +-29 +31 +-29 +32 +-29 +32 +-28 +32 +-27 +33 +-27 +33 +-29 +32 +-28 +32 +-29 +32 +-29 +31 +-29 +32 +-29 +32 +73 +-2 +42 +-25 +30 +-32 +26 +-35 +25 +-34 +26 +-33 +27 +-33 +28 +-32 +29 +-29 +31 +-30 +29 +-31 +29 +-32 +29 +-30 +30 +-30 +30 +-30 +31 +-29 +-107 +-43 +-96 +-3 +-57 +24 +-40 +34 +-33 +37 +-27 +40 +-22 +44 +-19 +45 +-15 +46 +-13 +47 +-13 +46 +-14 +45 +-16 +43 +-18 +41 +-21 +38 +-23 +36 +77 +1 +45 +-22 +32 +-31 +28 +-33 +27 +-32 +28 +-33 +28 +-32 +28 +-31 +29 +-29 +31 +-30 +30 +-31 +30 +-31 +29 +-30 +29 +-31 +29 +-30 +30 +-30 +-108 +-44 +-97 +-3 +-59 +22 +-40 +33 +-33 +37 +-28 +40 +-22 +43 +-20 +44 +-16 +47 +-13 +47 +-13 +46 +-14 +45 +-16 +43 +-18 +41 +-21 +39 +-22 +37 +-23 +37 +-23 +36 +-25 +35 +-26 +35 +-27 +34 +-27 +34 +-27 +33 +-27 +34 +-25 +35 +-25 +34 +-27 +33 +-28 +33 +-27 +32 +-28 +33 +-28 +33 +-28 +33 +74 +-2 +43 +-24 +30 +-32 +26 +-34 +27 +-33 +27 +-33 +27 +-32 +28 +-32 +29 +-29 +30 +-31 +30 +-31 +29 +-31 +29 +-31 +30 +-31 +30 +-30 +30 +-30 +-108 +-44 +-97 +-3 +-58 +23 +-40 +33 +-33 +37 +-28 +39 +-22 +43 +-20 +44 +-16 +47 +-14 +47 +-13 +46 +-14 +45 +-16 +43 +-18 +40 +-21 +39 +-23 +37 +78 +1 +47 +-21 +32 +-31 +29 +-33 +28 +-32 +28 +-32 +28 +-31 +29 +-30 +30 +-28 +31 +-30 +30 +-30 +30 +-30 +30 +-30 +30 +-30 +30 +-30 +30 +-29 +-107 +-44 +-96 +-3 +-58 +23 +-40 +33 +-33 +37 +-28 +40 +-22 +44 +-19 +44 +-15 +47 +-13 +47 +-13 +46 +-14 +45 +-16 +43 +-18 +41 +-21 +38 +-23 +38 +78 +2 +47 +-21 +33 +-30 +28 +-32 +29 +-32 +28 +-32 +28 +-31 +30 +-31 +30 +-28 +31 +-30 +30 +-30 +30 +-31 +30 +-30 +30 +-31 +30 +-30 +30 +-29 +-107 +-44 +-97 +-4 +-59 +22 +-40 +33 +-33 +37 +-28 +40 +-22 +44 +-19 +44 +-15 +47 +-14 +47 +-13 +46 +-14 +45 +-16 +43 +-19 +40 +-21 +39 +-23 +37 +-22 +38 +-23 +37 +-25 +35 +-26 +34 +-27 +34 +-26 +33 +-27 +34 +-28 +33 +-26 +34 +-25 +35 +-27 +34 +-28 +33 +-28 +32 +-28 +33 +-28 +33 +-27 +33 +74 +-2 +43 +-24 +30 +-32 +27 +-34 +26 +-34 +27 +-33 +28 +-32 +28 +-31 +29 +-29 +31 +-29 +30 +-30 +30 +-31 +30 +-30 +29 +-31 +30 +-30 +30 +-30 +30 +-26 +33 +-28 +32 +-29 +30 +-30 +30 +-31 +30 +-30 +30 +-30 +30 +-29 +31 +-27 +32 +-29 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-27 +32 +-28 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-28 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +-106 +-42 +-96 +-2 +-58 +23 +-39 +33 +-33 +38 +-27 +41 +-21 +44 +-19 +45 +-15 +47 +-13 +47 +-13 +46 +-14 +45 +-16 +43 +-18 +41 +-20 +39 +-23 +37 +78 +1 +46 +-22 +32 +-30 +28 +-32 +28 +-32 +28 +-32 +28 +-32 +29 +-31 +29 +-28 +31 +-30 +30 +-30 +30 +-30 +29 +-30 +30 +-31 +30 +-30 +31 +-29 +-107 +-44 +-97 +-3 +-58 +23 +-40 +33 +-32 +37 +-28 +40 +-22 +44 +-19 +44 +-15 +47 +-14 +47 +-13 +46 +-14 +45 +-16 +43 +-18 +41 +-20 +39 +-22 +38 +-22 +38 +-23 +36 +-25 +35 +-27 +34 +-27 +32 +-28 +34 +-27 +34 +-27 +33 +-25 +34 +-25 +35 +-27 +33 +-28 +32 +-28 +33 +-28 +32 +-29 +32 +-28 +32 +-26 +34 +-26 +34 +-28 +31 +-29 +32 +-30 +31 +-29 +31 +-29 +32 +-29 +32 +-27 +32 +-27 +33 +-29 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-27 +33 +-27 +33 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +33 +-29 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-28 +32 +-28 +32 +-29 +30 +-30 +30 +-30 +31 +-30 +30 +-30 +31 +-30 +30 +-28 +31 +-28 +32 +-29 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-28 +32 +-27 +33 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-28 +32 +-28 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +32 +-29 +31 +-29 +31 +-28 +33 +-27 +33 +-28 +31 +-29 +32 +-28 +32 +-29 +32 +-28 +32 +-28 +32 +-27 +33 +-26 +34 +-28 +33 +-28 +32 +-29 +32 +-28 +32 +-29 +32 +-29 +32 +-27 +33 +-27 +33 +-28 +32 +-29 +32 +-29 +31 +-29 +31 +-29 +32 +-29 +32 +-27 +34 +-26 +33 +-29 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +33 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-28 +32 +-29 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-28 +32 +-29 +30 +-30 +30 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-28 +31 +-29 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-28 +32 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-27 +33 +-27 +32 +-29 +31 +-30 +32 +-30 +31 +-30 +31 +-29 +32 +-29 +32 +-27 +32 +-27 +32 +-29 +32 +-29 +32 +-29 +31 +-30 +32 +-29 +31 +-29 +32 +-27 +33 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-29 +32 +-27 +33 +-27 +33 +-28 +32 +-29 +31 +-30 +31 +-29 +32 +-29 +32 +-28 +32 +-27 +33 +-27 +33 +-28 +31 +-29 +32 +-30 +31 +-29 +31 +-29 +32 +-29 +32 +-28 +33 +-27 +33 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +32 +-28 +32 +-27 +32 +-29 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-27 +32 +-27 +32 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-28 +32 +-28 +32 +-30 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-28 +32 +-27 +33 +-29 +32 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-28 +33 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-30 +31 +-27 +33 +-27 +33 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-28 +33 +-28 +33 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +32 +-28 +33 +-27 +33 +-29 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +32 +-28 +32 +-27 +33 +-27 +33 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-28 +32 +-28 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +32 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +30 +-28 +32 +-28 +32 +-29 +30 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-27 +32 +-28 +32 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-28 +32 +-28 +33 +-28 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-28 +33 +-27 +33 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +32 +-27 +33 +-27 +34 +-28 +32 +-28 +32 +-29 +31 +-29 +32 +-29 +32 +-28 +33 +-26 +34 +-26 +33 +-28 +33 +-28 +32 +-29 +31 +-29 +32 +-29 +32 +-28 +32 +-27 +33 +-27 +33 +-28 +32 +-28 +32 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-28 +32 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-27 +33 +-27 +33 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-28 +33 +-27 +33 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-30 +31 +-27 +33 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-28 +32 +-27 +33 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-25 +34 +-25 +34 +-28 +32 +-29 +31 +-29 +32 +-30 +31 +-29 +31 +-29 +32 +-27 +33 +-26 +33 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +73 +-3 +42 +-26 +29 +-34 +25 +-35 +25 +-34 +26 +-34 +26 +-34 +27 +-33 +27 +-31 +29 +-31 +28 +-32 +28 +-32 +28 +-32 +28 +-32 +29 +-31 +29 +-31 +-108 +-44 +-97 +-4 +-59 +22 +-41 +32 +-33 +36 +-28 +40 +-22 +43 +-20 +44 +-15 +47 +-13 +48 +-13 +46 +-14 +44 +-17 +43 +-18 +41 +-20 +39 +-23 +37 +77 +2 +47 +-22 +32 +-30 +28 +-32 +28 +-32 +28 +-32 +29 +-31 +28 +-32 +30 +-28 +31 +-29 +30 +-30 +30 +-31 +30 +-30 +30 +-30 +30 +-30 +29 +-30 +-107 +-43 +-97 +-3 +-58 +23 +-40 +33 +-33 +37 +-28 +40 +-22 +45 +-18 +45 +-14 +48 +-12 +48 +-13 +47 +-13 +46 +-15 +44 +-17 +41 +-20 +39 +-22 +38 +79 +2 +47 +-21 +33 +-29 +28 +-32 +28 +-31 +29 +-31 +29 +-31 +30 +-30 +31 +-27 +32 +-29 +30 +-29 +31 +-30 +30 +-30 +30 +-30 +30 +-30 +31 +-29 +-107 +-43 +-97 +-4 +-58 +23 +-39 +34 +-32 +38 +-27 +40 +-22 +44 +-20 +44 +-15 +47 +-13 +47 +-14 +45 +-14 +45 +-16 +43 +-18 +40 +-21 +39 +-22 +37 +-22 +37 +-24 +36 +-25 +34 +-27 +34 +-27 +34 +-27 +33 +-28 +33 +-28 +33 +-25 +34 +-25 +34 +-28 +32 +-28 +32 +-29 +31 +-30 +31 +-29 +32 +-29 +32 +-27 +33 +-27 +33 +-29 +31 +-29 +30 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +72 +-3 +42 +-25 +29 +-33 +25 +-35 +25 +-34 +26 +-33 +27 +-33 +28 +-32 +29 +-29 +30 +-31 +29 +-31 +29 +-32 +28 +-31 +29 +-31 +30 +-31 +30 +-29 +-107 +-43 +-96 +-3 +-58 +23 +-40 +33 +-33 +36 +-27 +41 +-21 +44 +-19 +43 +-15 +47 +-13 +48 +-13 +46 +-14 +45 +-16 +43 +-18 +41 +-20 +39 +-23 +38 +-22 +38 +-23 +36 +-25 +35 +-27 +34 +-27 +33 +-27 +33 +-28 +33 +-28 +33 +-26 +34 +-26 +34 +-28 +32 +-28 +32 +-29 +32 +-29 +32 +-29 +31 +-30 +32 +73 +-2 +43 +-25 +29 +-33 +25 +-35 +24 +-35 +26 +-34 +27 +-33 +27 +-33 +28 +-30 +30 +-31 +28 +-32 +29 +-32 +28 +-31 +28 +-31 +30 +-31 +29 +-30 +-108 +-44 +-97 +-4 +-59 +22 +-41 +33 +-33 +36 +-28 +40 +-23 +43 +-19 +44 +-15 +47 +-13 +47 +-13 +47 +-13 +46 +-15 +43 +-18 +41 +-20 +39 +-22 +38 +-22 +38 +-22 +37 +-25 +35 +-27 +34 +-27 +34 +-27 +34 +-27 +34 +-27 +33 +-26 +35 +-25 +35 +-27 +33 +-28 +32 +-28 +32 +-28 +33 +-28 +32 +-28 +32 +74 +-2 +42 +-25 +30 +-33 +26 +-34 +25 +-34 +26 +-34 +27 +-33 +27 +-32 +29 +-29 +30 +-31 +29 +-31 +29 +-32 +29 +-31 +30 +-30 +30 +-30 +31 +-29 +-107 +-43 +-97 +-3 +-58 +22 +-40 +33 +-33 +38 +-27 +40 +-21 +44 +-19 +45 +-15 +47 +-13 +47 +-13 +46 +-14 +45 +-16 +43 +-19 +41 +-21 +39 +-23 +36 +-23 +37 +-23 +37 +-25 +34 +-27 +33 +-28 +33 +-28 +33 +-27 +33 +-28 +33 +-27 +33 +-26 +33 +-28 +32 +-29 +32 +-29 +32 +-28 +32 +-29 +32 +-29 +32 +-27 +32 +-27 +33 +-29 +30 +-30 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +32 +-27 +33 +-27 +33 +-29 +32 +-30 +31 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +73 +-3 +42 +-25 +29 +-33 +26 +-35 +26 +-34 +26 +-34 +27 +-33 +28 +-33 +28 +-30 +29 +-32 +29 +-32 +28 +-32 +28 +-31 +30 +-32 +29 +-31 +29 +-30 +-108 +-45 +-97 +-3 +-59 +23 +-40 +33 +-33 +37 +-28 +40 +-22 +44 +-19 +44 +-16 +47 +-13 +47 +-13 +46 +-14 +45 +-16 +42 +-19 +40 +-21 +39 +-23 +37 +78 +2 +46 +-22 +33 +-30 +29 +-32 +28 +-32 +27 +-32 +28 +-31 +29 +-31 +30 +-28 +31 +-29 +31 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +30 +-29 +-107 +-43 +-97 +-3 +-58 +23 +-40 +34 +-32 +37 +-27 +41 +-21 +44 +-19 +45 +-14 +47 +-13 +48 +-13 +47 +-13 +46 +-15 +44 +-17 +42 +-20 +39 +-22 +38 +-22 +38 +-23 +37 +-24 +35 +-26 +35 +-26 +35 +-26 +34 +-27 +34 +-27 +34 +-26 +34 +-26 +34 +-27 +32 +-28 +32 +-29 +32 +-28 +32 +-29 +32 +-29 +31 +73 +-2 +42 +-25 +29 +-34 +25 +-35 +25 +-34 +26 +-34 +26 +-33 +26 +-32 +28 +-30 +30 +-31 +28 +-32 +29 +-32 +28 +-32 +29 +-31 +29 +-31 +30 +-30 +-108 +-44 +-98 +-4 +-59 +23 +-40 +33 +-33 +37 +-28 +40 +-21 +43 +-20 +45 +-15 +47 +-13 +47 +-13 +47 +-14 +44 +-16 +43 +-17 +42 +-20 +39 +-22 +38 +78 +2 +47 +-21 +33 +-29 +30 +-32 +28 +-32 +29 +-31 +30 +-30 +30 +-30 +30 +-28 +32 +-30 +30 +-30 +30 +-30 +31 +-30 +30 +-30 +30 +-29 +31 +-29 +-107 +-43 +-97 +-3 +-58 +22 +-40 +33 +-33 +37 +-28 +40 +-22 +44 +-20 +44 +-15 +47 +-13 +47 +-13 +46 +-14 +45 +-16 +43 +-18 +40 +-21 +39 +-23 +37 +78 +2 +46 +-22 +33 +-30 +29 +-32 +28 +-32 +28 +-32 +29 +-31 +29 +-30 +30 +-28 +31 +-30 +30 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-29 +-107 +-43 +-96 +-3 +-58 +24 +-39 +34 +-32 +38 +-27 +41 +-21 +44 +-19 +45 +-14 +48 +-12 +48 +-13 +46 +-13 +46 +-15 +44 +-17 +41 +-20 +39 +-23 +38 +-22 +38 +-22 +37 +-25 +35 +-26 +34 +-27 +33 +-27 +34 +-28 +33 +-28 +32 +-27 +33 +-26 +34 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +32 +72 +-3 +42 +-25 +29 +-33 +25 +-35 +25 +-34 +26 +-34 +26 +-33 +27 +-33 +28 +-30 +30 +-30 +29 +-32 +29 +-32 +28 +-31 +29 +-31 +29 +-31 +30 +-30 +30 +-26 +33 +-28 +31 +-30 +30 +-31 +29 +-31 +30 +-30 +30 +-30 +31 +-29 +32 +-27 +33 +-28 +31 +-29 +32 +-30 +30 +-29 +31 +-29 +32 +-29 +31 +-29 +32 +-26 +33 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-27 +33 +-28 +31 +-29 +30 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +-107 +-43 +-97 +-3 +-58 +23 +-40 +33 +-33 +37 +-27 +40 +-22 +44 +-20 +45 +-16 +47 +-13 +47 +-13 +47 +-14 +45 +-15 +42 +-19 +41 +-21 +39 +-23 +37 +78 +2 +46 +-22 +33 +-30 +29 +-32 +27 +-32 +28 +-32 +28 +-32 +29 +-31 +29 +-29 +31 +-30 +30 +-30 +30 +-30 +30 +-31 +30 +-30 +30 +-30 +31 +-29 +-107 +-43 +-96 +-3 +-58 +23 +-39 +33 +-33 +37 +-27 +41 +-21 +45 +-19 +45 +-15 +47 +-13 +47 +-13 +46 +-14 +45 +-16 +43 +-18 +41 +-20 +40 +-22 +38 +-22 +37 +-23 +37 +-25 +35 +-26 +34 +-26 +34 +-27 +34 +-27 +33 +-27 +33 +-26 +34 +-25 +35 +-27 +33 +-28 +33 +-28 +32 +-28 +32 +-28 +31 +-29 +32 +-27 +33 +-26 +33 +-28 +32 +-29 +32 +-29 +32 +-29 +32 +-29 +32 +-29 +31 +-27 +33 +-27 +33 +-28 +31 +-29 +32 +-29 +32 +-29 +31 +-29 +32 +-29 +32 +-27 +33 +-26 +33 +-29 +32 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-29 +31 +-28 +33 +-28 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-30 +31 +-27 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-28 +32 +-28 +32 +-29 +31 +-29 +31 +-30 +30 +-30 +31 +-29 +31 +-30 +31 +-28 +33 +-27 +32 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +32 +-27 +33 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-28 +33 +-27 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-28 +32 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-29 +32 +-28 +31 +-30 +31 +-30 +30 +-31 +30 +-30 +30 +-30 +31 +-29 +31 +-28 +32 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-27 +33 +-27 +33 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +32 +-29 +32 +-27 +33 +-27 +33 +-29 +32 +-29 +31 +-29 +32 +-29 +32 +-29 +31 +-29 +31 +-27 +33 +-27 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +32 +-29 +32 +-27 +32 +-27 +33 +-29 +32 +-29 +32 +-29 +31 +-29 +32 +-29 +32 +-29 +32 +-27 +33 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-29 +32 +-29 +32 +-29 +31 +-28 +32 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +32 +-28 +33 +-26 +33 +-29 +32 +-30 +31 +-29 +32 +-29 +31 +-30 +31 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +30 +-28 +33 +-27 +32 +-29 +30 +-31 +30 +-31 +30 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-28 +32 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-28 +33 +-27 +33 +-29 +31 +-30 +32 +-29 +31 +-29 +32 +-29 +32 +-29 +32 +-27 +33 +-27 +33 +-28 +32 +-28 +32 +-29 +32 +-29 +32 +-29 +32 +-29 +32 +-27 +33 +-27 +33 +-28 +32 +-29 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +32 +-27 +32 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-28 +33 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +32 +-29 +31 +-28 +32 +-27 +32 +-29 +32 +-30 +31 +-30 +30 +-30 +31 +-30 +32 +-29 +31 +-28 +33 +-27 +33 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-28 +33 +-27 +32 +-28 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-28 +32 +-27 +33 +-29 +31 +-29 +30 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +33 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +32 +-27 +32 +-27 +33 +-28 +32 +-29 +32 +-29 +32 +-29 +32 +-29 +32 +-29 +32 +-27 +33 +-27 +34 +-28 +32 +-29 +31 +-29 +31 +-30 +32 +-29 +31 +-29 +32 +-28 +33 +-27 +32 +-29 +32 +-29 +32 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-27 +32 +-27 +33 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-28 +32 +-28 +32 +-29 +30 +-30 +31 +-31 +30 +-30 +30 +-30 +31 +-30 +31 +-28 +32 +-28 +32 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +32 +-29 +32 +-27 +32 +-27 +33 +-28 +32 +-29 +32 +-29 +31 +-29 +32 +-29 +32 +-29 +32 +-27 +34 +-27 +33 +-28 +32 +-28 +32 +-29 +32 +-29 +32 +-28 +32 +-29 +32 +-27 +33 +-26 +33 +-29 +31 +-29 +32 +-29 +32 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-28 +32 +-29 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-28 +32 +-28 +31 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-30 +30 +-29 +32 +-28 +33 +-29 +30 +-30 +31 +-30 +30 +-30 +32 +-29 +32 +-29 +32 +-28 +33 +-27 +33 +-28 +32 +-29 +31 +-30 +32 +-28 +31 +-29 +32 +-29 +32 +-27 +33 +-27 +33 +-29 +32 +-29 +30 +-30 +31 +-29 +32 +-29 +31 +-29 +32 +-27 +33 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-28 +32 +-28 +32 +-30 +31 +-29 +30 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-28 +32 +-27 +32 +-29 +30 +-30 +30 +-31 +30 +-30 +30 +-30 +31 +-30 +31 +-28 +32 +-27 +32 +-29 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-26 +34 +-26 +33 +-28 +32 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-27 +33 +-27 +33 +-29 +31 +-30 +31 +-29 +31 +-29 +32 +-29 +31 +-29 +32 +73 +-3 +42 +-25 +29 +-34 +25 +-35 +25 +-35 +26 +-34 +26 +-33 +27 +-32 +29 +-29 +30 +-30 +29 +-31 +29 +-32 +29 +-31 +29 +-31 +29 +-30 +31 +-29 +-107 +-44 +-97 +-3 +-58 +22 +-40 +33 +-33 +37 +-28 +40 +-21 +44 +-20 +45 +-15 +47 +-12 +47 +-13 +47 +-14 +45 +-16 +43 +-19 +41 +-21 +39 +-22 +37 +79 +2 +46 +-21 +33 +-30 +29 +-32 +28 +-31 +28 +-32 +29 +-31 +29 +-31 +30 +-28 +31 +-30 +30 +-30 +30 +-31 +30 +-30 +30 +-30 +29 +-30 +30 +-30 +-107 +-43 +-97 +-3 +-58 +23 +-40 +33 +-33 +38 +-28 +40 +-22 +44 +-20 +44 +-16 +47 +-13 +47 +-13 +47 +-14 +45 +-16 +43 +-18 +41 +-21 +39 +-23 +38 +78 +2 +46 +-21 +33 +-29 +29 +-32 +28 +-32 +29 +-32 +29 +-30 +30 +-30 +31 +-27 +32 +-28 +31 +-30 +31 +-30 +30 +-29 +31 +-30 +31 +-29 +31 +-29 +-106 +-43 +-96 +-3 +-58 +24 +-39 +33 +-32 +37 +-27 +40 +-22 +44 +-19 +45 +-15 +47 +-14 +47 +-13 +46 +-14 +45 +-16 +43 +-18 +40 +-21 +39 +-23 +37 +-23 +37 +-23 +37 +-25 +35 +-27 +33 +-27 +33 +-27 +33 +-28 +33 +-28 +33 +-26 +33 +-26 +34 +-28 +32 +-29 +31 +-30 +31 +-29 +32 +-29 +31 +-28 +32 +-27 +34 +-26 +33 +-28 +32 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +73 +-3 +42 +-25 +30 +-33 +25 +-35 +25 +-34 +26 +-34 +27 +-32 +28 +-32 +28 +-30 +30 +-31 +29 +-31 +29 +-31 +28 +-31 +30 +-30 +30 +-30 +30 +-30 +-108 +-43 +-97 +-3 +-58 +22 +-40 +33 +-33 +38 +-27 +41 +-21 +45 +-19 +45 +-15 +47 +-13 +47 +-13 +46 +-14 +45 +-16 +43 +-19 +41 +-21 +39 +-22 +38 +-22 +37 +-23 +38 +-25 +35 +-26 +34 +-27 +34 +-27 +33 +-27 +33 +-27 +33 +-26 +34 +-26 +33 +-28 +31 +-29 +32 +-29 +32 +-29 +31 +-30 +31 +-30 +31 +72 +-3 +42 +-25 +29 +-33 +25 +-35 +25 +-35 +26 +-34 +26 +-33 +27 +-33 +29 +-29 +30 +-32 +30 +-31 +29 +-31 +29 +-32 +29 +-30 +30 +-30 +30 +-29 +-107 +-43 +-97 +-3 +-58 +23 +-39 +33 +-33 +37 +-27 +42 +-21 +45 +-18 +45 +-14 +48 +-12 +48 +-12 +46 +-13 +46 +-15 +44 +-17 +41 +-20 +40 +-22 +38 +-22 +38 +-22 +37 +-25 +35 +-26 +35 +-27 +34 +-27 +34 +-27 +34 +-27 +33 +-26 +34 +-26 +34 +-28 +32 +-28 +32 +-29 +32 +-29 +31 +-29 +32 +-29 +32 +72 +-3 +42 +-26 +29 +-33 +25 +-35 +25 +-34 +26 +-34 +27 +-33 +27 +-33 +28 +-30 +30 +-31 +29 +-32 +28 +-32 +28 +-31 +29 +-32 +29 +-31 +29 +-30 +-107 +-44 +-97 +-4 +-59 +22 +-41 +32 +-33 +36 +-28 +40 +-22 +43 +-20 +44 +-15 +47 +-14 +47 +-13 +46 +-14 +45 +-16 +43 +-18 +41 +-21 +39 +-22 +38 +-22 +39 +-22 +37 +-25 +35 +-26 +35 +-26 +33 +-27 +35 +-27 +34 +-27 +33 +-25 +35 +-25 +34 +-28 +32 +-28 +33 +-28 +33 +-28 +32 +-29 +32 +-29 +32 +-27 +33 +-27 +33 +-29 +31 +-29 +31 +-30 +30 +-30 +32 +-30 +31 +-30 +31 +-28 +32 +-28 +32 +-29 +31 +-30 +30 +-31 +30 +-30 +30 +-30 +31 +-30 +31 +72 +-4 +41 +-26 +28 +-34 +25 +-36 +25 +-35 +25 +-34 +26 +-34 +27 +-33 +28 +-30 +29 +-31 +28 +-32 +28 +-32 +28 +-31 +29 +-31 +29 +-31 +29 +-30 +-108 +-44 +-97 +-4 +-59 +23 +-40 +34 +-32 +37 +-27 +41 +-21 +45 +-19 +45 +-15 +48 +-12 +49 +-12 +47 +-13 +45 +-15 +44 +-17 +42 +-20 +39 +-22 +39 +79 +3 diff --git a/traces/lf_t5577_io.pm3 b/traces/lf_t5577_io.pm3 new file mode 100644 index 000000000..7f1ab7a5c --- /dev/null +++ b/traces/lf_t5577_io.pm3 @@ -0,0 +1,10000 @@ +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +115 +22 +-61 +-127 +-127 +-18 +90 +123 +113 +20 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-61 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +116 +23 +-61 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +115 +21 +-62 +-127 +-127 +-19 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +116 +23 +-60 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-61 +-127 +-127 +-17 +91 +123 +116 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +116 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +116 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +115 +21 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-127 +-23 +95 +123 +123 +123 +45 +-41 +-117 +-127 +-127 +-24 +92 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-28 +88 +123 +123 +123 +37 +-47 +-123 +-127 +-127 +-30 +86 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-30 +85 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +37 +-48 +-124 +-127 +-25 +82 +123 +104 +12 +-70 +-127 +-127 +-25 +84 +123 +108 +15 +-67 +-127 +-127 +-22 +87 +123 +111 +18 +-65 +-127 +-127 +-19 +89 +123 +113 +20 +-62 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +115 +22 +-61 +-127 +-127 +-19 +90 +123 +112 +19 +-63 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +115 +22 +-61 +-127 +-127 +-18 +90 +123 +113 +20 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +116 +23 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +116 +23 +-60 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +115 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +20 +-62 +-127 +-127 +-17 +90 +123 +115 +22 +-61 +-127 +-127 +-18 +90 +123 +113 +20 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-61 +-127 +-127 +-17 +91 +123 +116 +23 +-60 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +115 +22 +-61 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +116 +22 +-61 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +92 +123 +117 +23 +-60 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +44 +-42 +-118 +-127 +-127 +-25 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-27 +89 +123 +123 +123 +39 +-46 +-122 +-127 +-127 +-29 +86 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-30 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-30 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-30 +85 +123 +116 +23 +-60 +-127 +-127 +-14 +94 +123 +117 +24 +-59 +-127 +-127 +-15 +92 +123 +116 +23 +-61 +-127 +-127 +-16 +92 +123 +115 +23 +-61 +-127 +-127 +-16 +90 +123 +115 +22 +-61 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +113 +20 +-63 +-127 +-127 +-17 +90 +123 +123 +123 +32 +-52 +-127 +-127 +-127 +-34 +82 +123 +123 +123 +32 +-52 +-127 +-127 +-127 +-33 +83 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-31 +84 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +86 +123 +123 +123 +36 +-48 +-124 +-127 +-127 +-31 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +84 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +84 +123 +123 +123 +36 +-48 +-124 +-127 +-127 +-31 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +37 +-48 +-124 +-127 +-25 +82 +123 +104 +12 +-70 +-127 +-127 +-24 +83 +123 +108 +16 +-67 +-127 +-127 +-22 +86 +123 +110 +17 +-65 +-127 +-127 +-20 +88 +123 +114 +21 +-62 +-127 +-127 +-19 +90 +123 +112 +19 +-63 +-127 +-127 +-19 +89 +123 +115 +22 +-61 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +115 +21 +-62 +-127 +-127 +-18 +90 +123 +112 +19 +-63 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +115 +22 +-61 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +44 +-42 +-118 +-127 +-127 +-24 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-28 +88 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-29 +86 +123 +123 +123 +36 +-48 +-124 +-127 +-127 +-30 +85 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-30 +85 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-30 +86 +123 +123 +123 +36 +-48 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +37 +-47 +-123 +-127 +-127 +-30 +86 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-30 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +84 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +84 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-31 +84 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +116 +23 +-61 +-127 +-127 +-14 +93 +123 +117 +24 +-60 +-127 +-127 +-15 +92 +123 +116 +23 +-61 +-127 +-127 +-17 +91 +123 +114 +22 +-62 +-127 +-127 +-17 +90 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +113 +21 +-63 +-127 +-127 +-17 +90 +123 +113 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +113 +21 +-63 +-127 +-127 +-18 +90 +123 +113 +21 +-63 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +113 +21 +-62 +-127 +-127 +-17 +90 +123 +123 +123 +33 +-51 +-127 +-127 +-127 +-34 +82 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-32 +83 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-31 +84 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +86 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-30 +85 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-31 +84 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-30 +85 +123 +123 +123 +36 +-48 +-124 +-127 +-25 +82 +123 +105 +13 +-69 +-127 +-127 +-25 +84 +123 +108 +15 +-67 +-127 +-127 +-22 +86 +123 +111 +18 +-65 +-127 +-127 +-20 +88 +123 +113 +20 +-63 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-18 +89 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +113 +20 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +116 +23 +-60 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +117 +23 +-60 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +44 +-41 +-118 +-127 +-127 +-24 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-28 +88 +123 +123 +123 +38 +-46 +-122 +-127 +-127 +-30 +86 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-30 +85 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +83 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-48 +-124 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-30 +86 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-48 +-124 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-33 +84 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-33 +85 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-31 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-30 +85 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-30 +85 +123 +116 +23 +-61 +-127 +-127 +-14 +94 +123 +117 +24 +-59 +-127 +-127 +-15 +92 +123 +115 +23 +-61 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +90 +123 +114 +22 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +22 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +22 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-16 +91 +123 +114 +21 +-62 +-127 +-127 +-16 +91 +123 +115 +22 +-62 +-127 +-127 +-16 +91 +123 +115 +22 +-62 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +22 +-62 +-127 +-127 +-16 +91 +123 +115 +22 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +22 +-62 +-127 +-127 +-17 +90 +123 +114 +22 +-62 +-127 +-127 +-17 +90 +123 +114 +22 +-62 +-127 +-127 +-17 +91 +123 +113 +21 +-63 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +22 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-62 +-127 +-127 +-17 +90 +123 +113 +21 +-63 +-127 +-127 +-16 +91 +123 +115 +22 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +22 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +113 +21 +-63 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +113 +20 +-63 +-127 +-127 +-17 +90 +123 +114 +22 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +22 +-62 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-16 +91 +123 +114 +21 +-62 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +22 +-62 +-127 +-127 +-16 +91 +123 +115 +23 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +113 +20 +-63 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +113 +21 +-63 +-127 +-127 +-18 +90 +123 +113 +21 +-63 +-127 +-127 +-18 +90 +123 +112 +20 +-64 +-127 +-127 +-19 +89 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +113 +21 +-63 +-127 +-127 +-17 +90 +123 +114 +22 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +22 +-62 +-127 +-127 +-17 +90 +123 +114 +22 +-62 +-127 +-127 +-18 +90 +123 +114 +22 +-62 +-127 +-127 +-17 +89 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +22 +-62 +-127 +-127 +-17 +90 +123 +114 +22 +-62 +-127 +-127 +-16 +90 +123 +123 +123 +32 +-52 +-127 +-127 +-127 +-33 +83 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +84 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-32 +83 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +36 +-48 +-124 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-30 +85 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-30 +86 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-30 +86 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-31 +85 +123 +123 +123 +34 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-31 +84 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-31 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +84 +123 +123 +123 +37 +-48 +-123 +-127 +-25 +82 +123 +104 +12 +-70 +-127 +-127 +-26 +83 +123 +109 +16 +-66 +-127 +-127 +-22 +87 +123 +111 +18 +-65 +-127 +-127 +-20 +88 +123 +114 +21 +-62 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-19 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +115 +22 +-61 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +116 +23 +-61 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +115 +21 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +116 +22 +-61 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +89 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +116 +23 +-60 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +21 +-61 +-127 +-127 +-17 +92 +123 +116 +23 +-60 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-16 +92 +123 +117 +24 +-59 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +44 +-41 +-118 +-127 +-127 +-25 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-28 +87 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-30 +86 +123 +123 +123 +36 +-48 +-124 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +115 +23 +-61 +-127 +-127 +-14 +94 +123 +117 +24 +-59 +-127 +-127 +-15 +92 +123 +116 +23 +-61 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-16 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +22 +-62 +-127 +-127 +-17 +90 +123 +114 +22 +-62 +-127 +-127 +-17 +91 +123 +114 +22 +-62 +-127 +-127 +-16 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +22 +-62 +-127 +-127 +-17 +90 +123 +114 +22 +-62 +-127 +-127 +-17 +89 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +113 +21 +-63 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +113 +21 +-62 +-127 +-127 +-18 +90 +123 +113 +21 +-63 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-62 +-127 +-127 +-16 +91 +123 +114 +22 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-16 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +22 +-62 +-127 +-127 +-17 +90 +123 +114 +22 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +113 +21 +-63 +-127 +-127 +-17 +90 +123 +114 +22 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +113 +21 +-63 +-127 +-127 +-17 +90 +123 +113 +21 +-63 +-127 +-127 +-17 +91 +123 +115 +22 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +22 +-62 +-127 +-127 +-18 +91 +123 +113 +21 +-63 +-127 +-127 +-17 +91 +123 +114 +22 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +22 +-62 +-127 +-127 +-17 +91 +123 +114 +22 +-62 +-127 +-127 +-17 +90 +123 +113 +21 +-63 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +22 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +22 +-62 +-127 +-127 +-17 +91 +123 +114 +22 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-16 +91 +123 +113 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +90 +123 +115 +22 +-61 +-127 +-127 +-17 +90 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-34 +82 +123 +123 +123 +33 +-51 +-127 +-127 +-127 +-33 +83 +123 +123 +123 +33 +-51 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +86 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-30 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +84 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-30 +85 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-31 +85 +123 +123 +123 +37 +-48 +-123 +-127 +-24 +82 +123 +104 +12 +-70 +-127 +-127 +-25 +84 +123 +108 +15 +-67 +-127 +-127 +-22 +86 +123 +110 +17 +-65 +-127 +-127 +-20 +88 +123 +113 +20 +-63 +-127 +-127 +-19 +89 +123 +112 +19 +-63 +-127 +-127 +-19 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +89 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +116 +22 +-61 +-127 +-127 +-17 +90 +123 +113 +20 +-63 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +115 +22 +-61 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +115 +22 +-61 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +116 +23 +-60 +-127 +-127 +-17 +91 +123 +114 +20 +-62 +-127 +-127 +-18 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +116 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-18 +91 +123 +117 +23 +-60 +-127 +-127 +-17 +90 +123 +113 +20 +-63 +-127 +-127 +-19 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +115 +21 +-62 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-19 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +113 +20 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +115 +21 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +116 +22 +-61 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-16 +92 +123 +116 +22 +-61 +-127 +-127 +-17 +91 +123 +116 +23 +-60 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-61 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +116 +22 +-61 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +43 +-42 +-118 +-127 +-127 +-24 +92 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-28 +88 +123 +123 +123 +37 +-47 +-123 +-127 +-127 +-29 +86 +123 +123 +123 +36 +-48 +-124 +-127 +-127 +-30 +85 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +86 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +36 +-48 +-124 +-127 +-24 +82 +123 +105 +12 +-70 +-127 +-127 +-25 +83 +123 +108 +15 +-67 +-127 +-127 +-22 +86 +123 +111 +18 +-65 +-127 +-127 +-21 +88 +123 +113 +20 +-63 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-19 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +115 +21 +-62 +-127 +-127 +-18 +91 +123 +115 +22 +-61 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +116 +22 +-61 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +116 +22 +-61 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-18 +90 +123 +115 +21 +-62 +-127 +-127 +-17 +92 +123 +117 +23 +-60 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +115 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +116 +22 +-61 +-127 +-127 +-18 +91 +123 +113 +20 +-63 +-127 +-127 +-17 +90 +123 +115 +22 +-61 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +117 +23 +-60 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +115 +22 +-61 +-127 +-127 +-18 +90 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-19 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +115 +21 +-62 +-127 +-127 +-18 +90 +123 +115 +22 +-61 +-127 +-127 +-127 +-24 +93 +123 +123 +123 +43 +-42 +-119 +-127 +-127 +-25 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-28 +88 +123 +123 +123 +39 +-46 +-122 +-127 +-127 +-30 +86 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-30 +85 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +115 +22 +-61 +-127 +-127 +-14 +93 +123 +117 +24 +-59 +-127 +-127 +-14 +93 +123 +116 +23 +-61 +-127 +-127 +-15 +92 +123 +116 +23 +-61 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-16 +91 +123 +115 +23 +-61 +-127 +-127 +-16 +92 +123 +115 +22 +-62 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +123 +123 +33 +-51 +-127 +-127 +-127 +-33 +83 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-48 +-124 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-124 +-127 +-25 +81 +123 +104 +12 +-70 +-127 +-127 +-25 +83 +123 +107 +15 +-67 +-127 +-127 +-23 +86 +123 +111 +18 +-65 +-127 +-127 +-21 +87 +123 +112 +19 +-64 +-127 +-127 +-19 +88 +123 +112 +19 +-64 +-127 +-127 +-18 +89 +123 +113 +20 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +115 +22 +-61 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +20 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +92 +123 +117 +24 +-59 +-127 +-127 +-127 +-22 +95 +123 +123 +123 +44 +-41 +-118 +-127 +-127 +-24 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-27 +88 +123 +123 +123 +37 +-47 +-123 +-127 +-127 +-29 +86 +123 +123 +123 +36 +-48 +-124 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-48 +-124 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-31 +85 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-33 +83 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-33 +84 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +115 +23 +-61 +-127 +-127 +-13 +94 +123 +118 +25 +-59 +-127 +-127 +-14 +93 +123 +116 +23 +-60 +-127 +-127 +-15 +92 +123 +115 +23 +-61 +-127 +-127 +-16 +91 +123 +114 +22 +-62 +-127 +-127 +-16 +91 +123 +114 +22 +-62 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-16 +90 +123 +115 +22 +-62 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-16 +91 +123 +115 +23 +-61 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +22 +-62 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +22 +-62 +-127 +-127 +-17 +91 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-34 +82 +123 +123 +123 +33 +-51 +-127 +-127 +-127 +-32 +83 +123 +123 +123 +33 +-51 +-126 +-127 +-127 +-32 +83 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-31 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +84 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-31 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +84 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +84 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +84 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +37 +-48 +-124 +-127 +-24 +82 +123 +104 +12 +-70 +-127 +-127 +-25 +83 +123 +108 +16 +-67 +-127 +-127 +-21 +87 +123 +111 +18 +-64 +-127 +-127 +-21 +88 +123 +113 +20 +-63 +-127 +-127 +-20 +89 +123 +112 +19 +-64 +-127 +-127 +-19 +89 +123 +113 +20 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +115 +22 +-61 +-127 +-127 +-17 +90 +123 +114 +20 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +116 +23 +-61 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +43 +-42 +-118 +-127 +-127 +-25 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-28 +88 +123 +123 +123 +39 +-46 +-122 +-127 +-127 +-30 +86 +123 +123 +123 +36 +-48 +-124 +-127 +-127 +-31 +86 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-30 +86 +123 +123 +123 +36 +-48 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +36 +-48 +-124 +-127 +-127 +-30 +87 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-30 +86 +123 +123 +123 +36 +-48 +-124 +-127 +-127 +-31 +85 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-30 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-31 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +84 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-33 +84 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-31 +84 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-30 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-30 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-32 +83 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +37 +-47 +-123 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-48 +-124 +-127 +-127 +-31 +85 +123 +123 +123 +34 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +116 +23 +-60 +-127 +-127 +-14 +94 +123 +118 +25 +-59 +-127 +-127 +-14 +93 +123 +117 +24 +-60 +-127 +-127 +-16 +93 +123 +115 +23 +-61 +-127 +-127 +-16 +91 +123 +114 +22 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +113 +20 +-63 +-127 +-127 +-17 +90 +123 +113 +20 +-63 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-16 +91 +123 +114 +22 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +22 +-62 +-127 +-127 +-17 +90 +123 +115 +22 +-62 +-127 +-127 +-17 +90 +123 +115 +22 +-61 +-127 +-127 +-16 +91 +123 +114 +22 +-62 +-127 +-127 +-16 +91 +123 +115 +22 +-62 +-127 +-127 +-17 +90 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +90 +123 +114 +22 +-62 +-127 +-127 +-18 +90 +123 +113 +21 +-63 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +89 +123 +114 +22 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +113 +21 +-63 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-16 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-16 +91 +123 +115 +22 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +115 +22 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-16 +91 +123 +114 +22 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +113 +21 +-63 +-127 +-127 +-18 +90 +123 +113 +21 +-62 +-127 +-127 +-18 +90 +123 +113 +21 +-63 +-127 +-127 +-18 +89 +123 +113 +21 +-63 +-127 +-127 +-18 +90 +123 +113 +21 +-63 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +114 +22 +-62 +-127 +-127 +-16 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-62 +-127 +-127 +-17 +90 +123 +114 +22 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +22 +-62 +-127 +-127 +-17 +91 +123 +114 +22 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +113 +21 +-63 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +123 +123 +33 +-51 +-127 +-127 +-127 +-34 +82 +123 +123 +123 +33 +-51 +-127 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-31 +85 +123 +123 +123 +34 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +86 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-30 +85 +123 +123 +123 +36 +-48 +-124 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-30 +85 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-32 +85 +123 +123 +123 +34 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-30 +86 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-30 +86 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-31 +85 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-48 +-124 +-127 +-25 +82 +123 +104 +11 +-70 +-127 +-127 +-25 +84 +123 +107 +15 +-67 +-127 +-127 +-22 +86 +123 +111 +18 +-65 +-127 +-127 +-21 +88 +123 +113 +20 +-63 +-127 +-127 +-19 +89 +123 +111 +19 +-64 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-18 +89 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +115 +22 +-61 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +117 +23 +-60 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +92 +123 +114 +21 +-62 +-127 +-127 +-16 +91 +123 +116 +23 +-60 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +116 +22 +-61 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +116 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +116 +23 +-60 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +44 +-42 +-118 +-127 +-127 +-25 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-28 +87 +123 +123 +123 +38 +-47 +-122 +-127 +-127 +-30 +86 +123 +123 +123 +36 +-48 +-124 +-127 +-127 +-30 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-31 +85 +123 +116 +23 +-61 +-127 +-127 +-14 +94 +123 +117 +24 +-60 +-127 +-127 +-14 +93 +123 +116 +23 +-60 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-16 +91 +123 +115 +22 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +22 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +113 +21 +-63 +-127 +-127 +-18 +90 +123 +113 +21 +-62 +-127 +-127 +-17 +91 +123 +113 +21 +-63 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +22 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-16 +92 +123 +114 +21 +-62 +-127 +-127 +-16 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-62 +-127 +-127 +-16 +90 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-16 +90 +123 +114 +22 +-62 +-127 +-127 +-17 +91 +123 +114 +22 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +113 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +22 +-62 +-127 +-127 +-17 +91 +123 +114 +22 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +22 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-62 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-16 +91 +123 +114 +22 +-62 +-127 +-127 +-17 +91 +123 +114 +22 +-62 +-127 +-127 +-17 +91 +123 +114 +22 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +115 +22 +-62 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +89 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +89 +123 +114 +22 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +113 +21 +-63 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +113 +21 +-63 +-127 +-127 +-17 +91 +123 +115 +22 +-62 +-127 +-127 +-17 +91 +123 +114 +22 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-16 +91 +123 +123 +123 +33 +-51 +-127 +-127 +-127 +-33 +83 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-30 +86 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-30 +86 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-48 +-124 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +36 +-48 +-124 +-127 +-127 +-31 +85 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-32 +85 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-31 +85 +123 +123 +123 +37 +-48 +-124 +-127 +-25 +82 +123 +104 +12 +-70 +-127 +-127 +-25 +84 +123 +108 +16 +-67 +-127 +-127 +-22 +87 +123 +111 +18 +-64 +-127 +-127 +-20 +88 +123 +113 +20 +-63 +-127 +-127 +-18 +89 +123 +113 +19 +-63 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +113 +20 +-62 +-127 +-127 +-18 +90 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +116 +22 +-61 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +115 +22 +-61 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-17 +90 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +116 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-61 +-127 +-127 +-16 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +90 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +117 +23 +-60 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +91 +123 +115 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +115 +22 +-61 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +116 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-61 +-127 +-127 +-17 +91 +123 +116 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +116 +23 +-60 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +116 +23 +-60 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +116 +23 +-61 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +43 +-42 +-119 +-127 +-127 +-25 +91 +123 +123 +123 +39 +-46 +-122 +-127 +-127 +-28 +87 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-30 +85 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +86 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +37 +-48 +-124 +-127 +-24 +82 +123 +104 +12 +-70 +-127 +-127 +-25 +83 +123 +108 +15 +-67 +-127 +-127 +-23 +86 +123 +111 +18 +-65 +-127 +-127 +-21 +87 +123 +113 +20 +-63 +-127 +-127 +-19 +88 +123 +112 +19 +-63 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-19 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +20 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +116 +23 +-60 +-127 +-127 +-17 +90 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +117 +23 +-60 +-127 +-127 +-18 +91 +123 +114 +20 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +116 +22 +-61 +-127 +-127 +-17 +90 +123 +114 +20 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +116 +23 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-61 +-127 +-127 +-18 +90 +123 +115 +22 +-61 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-61 +-127 +-127 +-17 +91 +123 +116 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +21 +-61 +-127 +-127 +-18 +90 +123 +116 +23 +-60 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +115 +22 +-61 +-127 +-127 +-127 +-24 +93 +123 +123 +123 +43 +-42 +-119 +-127 +-127 +-26 +90 +123 +123 +123 +39 +-46 +-122 +-127 +-127 +-29 +88 +123 +123 +123 +39 +-46 +-122 +-127 +-127 +-30 +86 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-30 +85 +123 +123 +123 +36 +-48 +-124 +-127 +-127 +-31 +86 +123 +115 +23 +-61 +-127 +-127 +-13 +94 +123 +118 +25 +-59 +-127 +-127 +-15 +93 +123 +116 +23 +-60 +-127 +-127 +-15 +91 +123 +115 +23 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +22 +-62 +-127 +-127 +-17 +90 +123 +113 +21 +-63 +-127 +-127 +-17 +90 +123 +114 +22 +-62 +-127 +-127 +-17 +90 +123 +123 +123 +32 +-52 +-127 +-127 +-127 +-35 +81 +123 +123 +123 +32 +-52 +-127 +-127 +-127 +-33 +83 +123 +123 +123 +33 +-51 +-127 +-127 +-127 +-33 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-30 +86 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +37 +-48 +-124 +-127 +-24 +81 +123 +105 +13 +-69 +-127 +-127 +-25 +84 +123 +108 +15 +-67 +-127 +-127 +-22 +86 +123 +111 +18 +-64 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-19 +89 +123 +112 +19 +-63 +-127 +-127 +-18 +90 +123 +114 +20 +-62 +-127 +-127 +-18 +90 +123 +113 +20 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-19 +90 +123 +115 +21 +-62 +-127 +-127 +-18 +89 +123 +114 +20 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +116 +23 +-61 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +44 +-42 +-118 +-127 +-127 +-24 +92 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-27 +89 +123 +123 +123 +38 +-46 +-122 +-127 +-127 +-29 +87 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +37 +-47 +-123 +-127 +-127 +-30 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-48 +-124 +-127 +-127 +-32 +85 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +115 +22 +-61 +-127 +-127 +-14 +94 +123 +118 +25 +-59 +-127 +-127 +-15 +93 +123 +116 +23 +-60 +-127 +-127 +-15 +92 +123 +116 +23 +-61 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-15 +91 +123 +116 +23 +-61 +-127 +-127 +-17 +91 +123 +114 +22 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-62 +-127 +-127 +-17 +90 +123 +113 +20 +-63 +-127 +-127 +-17 +90 +123 +113 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +22 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +22 +-62 +-127 +-127 +-17 +90 +123 +123 +123 +32 +-52 +-127 +-127 +-127 +-34 +82 +123 +123 +123 +33 +-51 +-126 +-127 +-127 +-33 +83 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +84 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +36 +-48 +-124 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-30 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-30 +85 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +84 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +37 +-47 +-123 +-127 +-25 +82 +123 +104 +12 +-70 +-127 +-127 +-24 +84 +123 +109 +16 +-66 +-127 +-127 +-22 +87 +123 +110 +17 +-65 +-127 +-127 +-20 +88 +123 +114 +21 +-62 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-19 +90 +123 +114 +20 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +116 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-16 +91 +123 +116 diff --git a/traces/lf_t5577_jablotron.pm3 b/traces/lf_t5577_jablotron.pm3 new file mode 100644 index 000000000..2aca62e4c --- /dev/null +++ b/traces/lf_t5577_jablotron.pm3 @@ -0,0 +1,16000 @@ +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-109 +-101 +-94 +34 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +104 +98 +91 +85 +79 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-117 +-109 +-101 +-94 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +105 +98 +91 +85 +79 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-117 +-110 +-101 +-95 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +113 +104 +97 +91 +85 +79 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-110 +-102 +-95 +32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +106 +99 +92 +86 +80 +24 +-60 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-116 +-108 +-101 +-94 +34 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +113 +105 +98 +91 +85 +79 +23 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-110 +-102 +-96 +32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +105 +98 +91 +86 +79 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-109 +-101 +-94 +-87 +-80 +-75 +-70 +-65 +-61 +-56 +-51 +-48 +-44 +-41 +-38 +-35 +-32 +-30 +-27 +-25 +-24 +-21 +-20 +-18 +-17 +-16 +-14 +-13 +-12 +-11 +-10 +-9 +-8 +-7 +-7 +114 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +117 +110 +102 +95 +88 +31 +-54 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-116 +-108 +-99 +-92 +35 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +113 +105 +98 +91 +85 +79 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-110 +-102 +-95 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +104 +98 +91 +85 +79 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-118 +-110 +-101 +-94 +32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +113 +105 +98 +91 +86 +79 +75 +70 +64 +60 +57 +53 +50 +46 +44 +41 +39 +36 +34 +32 +30 +28 +27 +25 +24 +21 +20 +19 +18 +17 +16 +15 +15 +13 +13 +12 +12 +12 +-28 +-107 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-111 +-104 +24 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +111 +103 +96 +90 +84 +78 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-110 +-102 +-95 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +105 +98 +92 +85 +79 +23 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-109 +-101 +-94 +-87 +-81 +-75 +-70 +-65 +-60 +-56 +-52 +-48 +-44 +-40 +-38 +-35 +-32 +-29 +-27 +-25 +-23 +-21 +-19 +-17 +-16 +-15 +-14 +-13 +-11 +-10 +-9 +-8 +-8 +-7 +-6 +114 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +116 +109 +101 +95 +88 +30 +-55 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-116 +-108 +-101 +-94 +34 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +106 +99 +92 +86 +80 +23 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-109 +-102 +-94 +34 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +105 +97 +90 +85 +79 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-111 +-101 +-94 +32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +113 +104 +98 +91 +86 +79 +74 +69 +65 +60 +57 +53 +50 +46 +44 +40 +38 +35 +33 +31 +30 +27 +26 +24 +23 +22 +21 +19 +18 +17 +16 +15 +14 +12 +13 +12 +12 +11 +-29 +-108 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-111 +-103 +25 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +104 +97 +90 +84 +78 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-109 +-101 +-95 +32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +105 +98 +91 +85 +79 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-109 +-101 +-95 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +105 +98 +91 +85 +79 +23 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-110 +-102 +-95 +-88 +-81 +-75 +-71 +-65 +-61 +-57 +-52 +-47 +-44 +-41 +-38 +-34 +-33 +-30 +-28 +-25 +-24 +-21 +-20 +-17 +-16 +-15 +-13 +-12 +-12 +-10 +-10 +-8 +-8 +-7 +-6 +115 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +116 +108 +101 +95 +88 +82 +77 +72 +66 +62 +58 +54 +51 +48 +44 +42 +39 +36 +34 +32 +30 +28 +26 +25 +23 +22 +20 +20 +18 +17 +16 +15 +14 +14 +13 +13 +11 +-30 +-108 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-111 +-102 +25 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +112 +104 +97 +90 +84 +78 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-109 +-102 +-95 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +104 +97 +91 +85 +79 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-109 +-101 +-93 +-87 +-81 +-75 +-69 +-65 +-61 +-55 +-52 +-48 +-44 +-41 +-38 +-34 +-32 +-30 +-27 +-25 +-23 +-21 +-19 +-18 +-17 +-16 +-14 +-13 +-12 +-10 +-9 +-9 +-8 +-7 +-6 +115 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +116 +109 +101 +95 +88 +82 +76 +72 +67 +62 +58 +55 +51 +48 +45 +42 +39 +37 +34 +32 +30 +28 +27 +25 +23 +22 +21 +20 +19 +17 +16 +16 +14 +14 +13 +13 +12 +-28 +-107 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-110 +-103 +26 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +103 +97 +90 +84 +78 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-110 +-102 +-96 +-88 +-82 +-77 +-72 +-66 +-62 +-57 +-52 +-48 +-46 +-42 +-39 +-36 +-33 +-31 +-29 +-26 +-25 +-22 +-20 +-19 +-18 +-16 +-15 +-14 +-13 +-12 +-10 +-9 +-9 +-8 +-8 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +116 +109 +101 +95 +88 +31 +-54 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-116 +-108 +-101 +-93 +34 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +106 +99 +91 +86 +80 +75 +69 +65 +60 +56 +53 +49 +46 +44 +40 +38 +35 +33 +31 +29 +27 +25 +24 +22 +21 +20 +18 +17 +16 +15 +14 +14 +13 +12 +11 +11 +10 +-30 +-109 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-110 +-103 +-95 +-88 +-82 +-76 +-71 +-66 +-61 +-57 +-52 +-48 +-45 +-42 +-38 +-35 +-33 +-31 +-28 +-27 +-24 +-23 +-21 +-19 +-17 +-16 +-15 +-14 +-13 +-12 +-10 +-10 +-10 +-9 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +116 +108 +100 +94 +88 +82 +76 +71 +66 +62 +58 +55 +51 +47 +44 +42 +38 +37 +34 +32 +30 +28 +26 +26 +23 +23 +21 +20 +18 +18 +15 +15 +16 +14 +13 +13 +12 +-28 +-107 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-110 +-102 +25 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +111 +103 +95 +89 +84 +78 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-110 +-102 +-95 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +113 +105 +97 +90 +86 +79 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-109 +-101 +-94 +-86 +-81 +-75 +-70 +-65 +-61 +-56 +-52 +-48 +-44 +-40 +-38 +-35 +-32 +-30 +-28 +-26 +-24 +-21 +-20 +-19 +-17 +-16 +-15 +-14 +-13 +-11 +-11 +-10 +-9 +-8 +-8 +114 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +116 +108 +101 +94 +88 +82 +76 +71 +67 +63 +58 +55 +51 +48 +45 +42 +39 +37 +34 +32 +31 +29 +26 +25 +24 +22 +21 +20 +19 +18 +17 +16 +16 +15 +13 +13 +12 +-28 +-107 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-110 +-103 +-95 +-88 +-82 +-77 +-71 +-67 +-61 +-57 +-53 +-49 +-46 +-43 +-39 +-37 +-34 +-31 +-29 +-27 +-25 +-23 +-21 +-20 +-18 +-17 +-15 +-14 +-13 +-12 +-12 +-10 +-9 +-9 +112 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +115 +108 +100 +94 +88 +82 +76 +71 +66 +61 +58 +55 +50 +47 +44 +41 +39 +37 +35 +32 +30 +28 +26 +25 +23 +22 +21 +20 +18 +18 +16 +15 +15 +14 +13 +13 +12 +-28 +-107 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-110 +-102 +-95 +-88 +-82 +-77 +-71 +-66 +-62 +-57 +-51 +-48 +-45 +-41 +-38 +-36 +-33 +-31 +-28 +-26 +-24 +-22 +-20 +-18 +-17 +-16 +-14 +-14 +-12 +-11 +-11 +-10 +-8 +-8 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +116 +108 +101 +95 +88 +82 +76 +72 +67 +62 +58 +54 +51 +48 +45 +42 +40 +37 +35 +33 +31 +29 +27 +25 +23 +23 +21 +20 +18 +17 +17 +16 +15 +15 +13 +13 +13 +-28 +-107 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-110 +-103 +-95 +-88 +-82 +-76 +-70 +-66 +-61 +-57 +-52 +-49 +-45 +-42 +-40 +-36 +-33 +-31 +-28 +-26 +-24 +-22 +-21 +-19 +-17 +-16 +-15 +-13 +-12 +-12 +-11 +-11 +-9 +-8 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +115 +107 +100 +94 +87 +82 +76 +71 +66 +62 +58 +53 +50 +48 +44 +41 +39 +37 +34 +32 +30 +28 +26 +25 +23 +22 +20 +19 +18 +17 +16 +15 +13 +13 +12 +12 +11 +-29 +-107 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-111 +-103 +-95 +-88 +-82 +-77 +-71 +-66 +-61 +-56 +-52 +-49 +-44 +-41 +-39 +-36 +-33 +-31 +-28 +-26 +-24 +-22 +-20 +-20 +-18 +-16 +-14 +-13 +-12 +-12 +-10 +-9 +-8 +-8 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +116 +108 +101 +94 +88 +82 +77 +71 +66 +62 +58 +54 +51 +47 +44 +41 +38 +36 +34 +32 +30 +28 +26 +24 +23 +21 +20 +20 +17 +17 +16 +15 +14 +13 +12 +12 +11 +-29 +-108 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-111 +-104 +-95 +-89 +-82 +-78 +-72 +-66 +-61 +-57 +-53 +-49 +-45 +-42 +-38 +-36 +-32 +-30 +-28 +-26 +-24 +-22 +-20 +-18 +-17 +-16 +-14 +-14 +-12 +-11 +-11 +-9 +-8 +-7 +114 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +116 +109 +101 +94 +88 +82 +76 +72 +67 +63 +58 +55 +51 +47 +44 +41 +38 +36 +33 +32 +30 +28 +26 +25 +23 +22 +21 +19 +18 +18 +16 +16 +15 +14 +13 +13 +12 +-28 +-107 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-111 +-104 +-95 +-88 +-82 +-78 +-72 +-66 +-62 +-57 +-52 +-50 +-45 +-42 +-38 +-35 +-32 +-31 +-28 +-26 +-25 +-23 +-20 +-19 +-17 +-16 +-15 +-14 +-13 +-12 +-10 +-10 +-8 +-8 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +116 +108 +101 +94 +88 +83 +77 +72 +67 +63 +58 +55 +52 +48 +44 +42 +39 +37 +34 +32 +29 +29 +26 +25 +24 +22 +20 +20 +18 +17 +17 +16 +14 +14 +13 +13 +12 +-28 +-107 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-110 +-102 +-94 +-88 +-82 +-77 +-71 +-66 +-61 +-56 +-52 +-49 +-45 +-42 +-38 +-36 +-33 +-31 +-28 +-26 +-24 +-22 +-20 +-19 +-17 +-16 +-15 +-14 +-13 +-12 +-11 +-10 +-9 +-8 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +116 +108 +100 +93 +87 +82 +76 +71 +66 +62 +57 +54 +50 +47 +44 +41 +37 +36 +33 +31 +29 +27 +25 +24 +22 +21 +20 +19 +18 +17 +15 +15 +14 +13 +12 +12 +11 +-29 +-108 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-110 +-102 +25 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +111 +103 +96 +90 +83 +78 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-109 +-101 +-95 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +104 +98 +91 +84 +79 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-118 +-110 +-101 +-94 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +106 +99 +92 +86 +80 +23 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-110 +-101 +-94 +32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +104 +98 +91 +85 +79 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-117 +-109 +-102 +-94 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +112 +105 +98 +91 +85 +80 +24 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-109 +-102 +-94 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +104 +98 +92 +85 +79 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-109 +-100 +-94 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +105 +97 +90 +85 +79 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-109 +-102 +-94 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +105 +98 +91 +86 +80 +23 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-109 +-101 +-94 +32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +112 +105 +98 +91 +85 +79 +23 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-109 +-102 +-95 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +104 +98 +91 +86 +79 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-117 +-109 +-101 +-95 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +105 +98 +91 +86 +79 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-109 +-101 +-94 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +113 +106 +99 +92 +87 +81 +23 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-109 +-101 +-94 +34 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +104 +97 +90 +85 +78 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-109 +-101 +-94 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +114 +106 +99 +92 +85 +79 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-109 +-101 +-94 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +112 +104 +98 +91 +85 +80 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-110 +-101 +-94 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +104 +98 +91 +86 +79 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-109 +-100 +-93 +34 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +105 +98 +90 +85 +79 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-111 +-102 +-95 +32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +104 +97 +90 +85 +79 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-116 +-108 +-100 +-93 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +114 +106 +99 +92 +86 +81 +23 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-110 +-102 +-95 +-88 +-82 +-76 +-71 +-66 +-61 +-56 +-53 +-49 +-45 +-41 +-39 +-36 +-33 +-31 +-28 +-26 +-24 +-22 +-20 +-19 +-17 +-16 +-15 +-13 +-12 +-11 +-10 +-9 +-9 +-8 +-7 +114 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +116 +109 +101 +94 +88 +30 +-54 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-116 +-108 +-100 +-93 +34 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +105 +99 +91 +86 +80 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-117 +-109 +-101 +-95 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +105 +98 +91 +85 +80 +23 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-109 +-101 +-95 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +112 +105 +98 +91 +85 +79 +74 +69 +65 +60 +56 +52 +49 +45 +43 +40 +38 +36 +34 +31 +30 +27 +26 +24 +23 +21 +20 +19 +18 +17 +16 +15 +14 +14 +13 +12 +12 +11 +-29 +-108 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-110 +-102 +26 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +103 +96 +90 +84 +78 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-111 +-103 +-96 +31 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +113 +105 +98 +91 +85 +80 +23 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-109 +-101 +-94 +-87 +-81 +-75 +-69 +-64 +-60 +-56 +-51 +-48 +-44 +-41 +-38 +-35 +-32 +-30 +-28 +-25 +-24 +-21 +-20 +-19 +-17 +-15 +-14 +-13 +-12 +-11 +-10 +-9 +-8 +-7 +-7 +115 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +116 +109 +101 +94 +88 +31 +-54 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-108 +-100 +-93 +34 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +105 +98 +92 +86 +80 +23 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-108 +-101 +-94 +34 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +105 +97 +91 +85 +80 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-110 +-101 +-94 +34 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +104 +98 +91 +85 +79 +74 +69 +64 +61 +57 +52 +49 +46 +43 +40 +37 +35 +33 +31 +29 +27 +25 +23 +22 +20 +19 +18 +16 +16 +14 +14 +14 +13 +12 +12 +11 +10 +-30 +-109 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-111 +-103 +24 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +112 +104 +97 +90 +85 +78 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-110 +-101 +-94 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +104 +97 +90 +84 +79 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-117 +-110 +-102 +-95 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +114 +106 +99 +92 +86 +80 +23 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-117 +-109 +-101 +-94 +-87 +-80 +-75 +-70 +-65 +-61 +-56 +-52 +-48 +-44 +-41 +-38 +-35 +-33 +-30 +-28 +-26 +-24 +-22 +-20 +-18 +-17 +-16 +-14 +-14 +-12 +-11 +-11 +-9 +-8 +-7 +-7 +114 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +117 +110 +102 +95 +88 +83 +76 +72 +68 +64 +59 +56 +52 +48 +46 +42 +39 +38 +35 +33 +31 +29 +26 +25 +24 +23 +21 +21 +19 +18 +17 +16 +15 +14 +13 +12 +11 +-29 +-107 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-111 +-104 +24 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +103 +96 +90 +84 +79 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-110 +-101 +-94 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +104 +97 +90 +85 +79 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-110 +-101 +-94 +-87 +-81 +-75 +-70 +-65 +-61 +-56 +-52 +-48 +-44 +-41 +-38 +-35 +-32 +-30 +-28 +-26 +-24 +-22 +-21 +-19 +-17 +-15 +-15 +-13 +-12 +-11 +-10 +-9 +-8 +-7 +-7 +114 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +116 +109 +101 +94 +88 +83 +77 +72 +67 +62 +58 +55 +51 +48 +45 +43 +39 +37 +35 +32 +31 +29 +27 +25 +23 +22 +21 +20 +18 +18 +16 +16 +15 +14 +13 +13 +12 +-28 +-107 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-110 +-103 +25 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +110 +102 +95 +89 +83 +77 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-111 +-102 +-95 +-88 +-82 +-76 +-71 +-67 +-61 +-56 +-52 +-48 +-44 +-41 +-38 +-35 +-32 +-30 +-27 +-25 +-25 +-22 +-20 +-18 +-17 +-15 +-14 +-13 +-12 +-11 +-10 +-8 +-8 +-6 +-6 +115 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +117 +109 +101 +95 +88 +30 +-54 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-117 +-108 +-101 +-93 +34 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +104 +98 +91 +85 +80 +75 +69 +65 +60 +56 +53 +49 +46 +43 +40 +38 +35 +33 +31 +29 +27 +26 +23 +23 +21 +20 +19 +18 +16 +16 +15 +14 +13 +12 +12 +11 +10 +-29 +-108 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-110 +-102 +-95 +-88 +-82 +-77 +-71 +-66 +-61 +-57 +-53 +-49 +-45 +-42 +-39 +-36 +-33 +-30 +-28 +-26 +-24 +-22 +-20 +-19 +-17 +-16 +-14 +-13 +-11 +-11 +-10 +-10 +-9 +-8 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +115 +108 +101 +94 +88 +83 +77 +72 +67 +62 +58 +55 +51 +48 +45 +42 +39 +37 +35 +32 +30 +29 +27 +26 +24 +22 +21 +20 +18 +18 +17 +16 +15 +15 +14 +14 +12 +-28 +-106 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-109 +-102 +25 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +111 +103 +96 +90 +84 +78 +20 +-64 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-110 +-102 +-95 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +104 +97 +91 +85 +79 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-117 +-109 +-101 +-94 +-88 +-80 +-75 +-70 +-65 +-60 +-56 +-52 +-48 +-45 +-40 +-38 +-35 +-32 +-30 +-28 +-25 +-23 +-21 +-20 +-18 +-17 +-15 +-14 +-13 +-12 +-10 +-10 +-8 +-8 +-7 +-6 +114 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +116 +108 +101 +95 +88 +82 +76 +71 +66 +63 +59 +54 +50 +47 +44 +42 +39 +35 +33 +31 +29 +28 +26 +24 +22 +22 +20 +19 +17 +16 +16 +15 +14 +13 +12 +12 +11 +-29 +-108 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-110 +-103 +-95 +-87 +-81 +-77 +-71 +-66 +-62 +-58 +-52 +-48 +-44 +-41 +-38 +-36 +-32 +-30 +-28 +-26 +-23 +-22 +-20 +-19 +-17 +-15 +-14 +-13 +-12 +-11 +-10 +-8 +-8 +-7 +114 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +115 +108 +100 +94 +87 +82 +76 +71 +65 +62 +58 +54 +50 +47 +44 +41 +38 +36 +33 +31 +29 +28 +26 +25 +23 +22 +20 +19 +18 +17 +16 +15 +14 +13 +13 +11 +12 +-29 +-107 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-110 +-102 +-95 +-88 +-81 +-76 +-71 +-65 +-61 +-57 +-52 +-48 +-45 +-42 +-38 +-36 +-32 +-30 +-28 +-26 +-24 +-23 +-20 +-19 +-17 +-15 +-14 +-13 +-12 +-11 +-10 +-10 +-8 +-8 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +116 +108 +101 +94 +88 +82 +76 +71 +66 +62 +58 +54 +50 +48 +44 +41 +38 +36 +34 +33 +30 +28 +26 +24 +23 +22 +20 +19 +18 +17 +16 +16 +14 +14 +12 +12 +12 +-29 +-108 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-112 +-103 +-95 +-87 +-81 +-76 +-71 +-66 +-61 +-57 +-52 +-49 +-45 +-42 +-39 +-36 +-33 +-30 +-28 +-26 +-24 +-22 +-20 +-19 +-17 +-17 +-15 +-14 +-12 +-11 +-10 +-9 +-9 +-8 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +116 +108 +101 +95 +88 +83 +77 +72 +67 +63 +59 +55 +51 +48 +45 +43 +40 +37 +34 +33 +30 +29 +27 +25 +24 +22 +21 +20 +18 +16 +17 +17 +15 +15 +14 +13 +12 +-28 +-107 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-110 +-104 +-96 +-88 +-82 +-77 +-71 +-66 +-62 +-58 +-53 +-49 +-45 +-42 +-39 +-36 +-33 +-31 +-29 +-26 +-25 +-23 +-21 +-20 +-18 +-16 +-15 +-14 +-12 +-12 +-11 +-10 +-9 +-8 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +116 +108 +100 +95 +88 +82 +77 +72 +66 +62 +58 +54 +52 +48 +44 +41 +38 +36 +34 +33 +30 +29 +27 +25 +23 +22 +20 +20 +18 +17 +17 +15 +14 +14 +13 +12 +12 +-29 +-107 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-110 +-103 +-95 +-88 +-82 +-77 +-71 +-66 +-62 +-57 +-52 +-49 +-45 +-42 +-39 +-37 +-33 +-31 +-29 +-27 +-25 +-23 +-21 +-19 +-17 +-16 +-15 +-14 +-13 +-11 +-10 +-10 +-9 +-8 +112 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +115 +108 +101 +94 +87 +82 +76 +71 +66 +63 +58 +54 +50 +48 +44 +42 +39 +36 +34 +32 +30 +29 +27 +25 +23 +22 +20 +20 +19 +17 +16 +16 +15 +14 +13 +13 +12 +-28 +-107 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-111 +-103 +-95 +-88 +-81 +-76 +-71 +-66 +-62 +-57 +-52 +-49 +-45 +-42 +-39 +-37 +-33 +-31 +-29 +-27 +-25 +-22 +-21 +-20 +-18 +-17 +-15 +-14 +-13 +-12 +-11 +-11 +-9 +-8 +112 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +115 +107 +100 +94 +87 +82 +77 +71 +66 +63 +58 +55 +51 +48 +44 +42 +39 +37 +34 +32 +30 +29 +27 +26 +24 +22 +20 +20 +19 +19 +18 +16 +14 +15 +13 +13 +12 +-29 +-107 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-111 +-103 +-95 +-88 +-82 +-77 +-71 +-66 +-62 +-57 +-52 +-49 +-45 +-42 +-39 +-36 +-33 +-31 +-28 +-26 +-24 +-22 +-20 +-19 +-17 +-17 +-15 +-14 +-13 +-12 +-10 +-9 +-8 +-7 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +115 +108 +101 +94 +88 +83 +76 +71 +67 +63 +58 +55 +51 +47 +44 +41 +38 +37 +34 +32 +30 +28 +26 +25 +23 +22 +20 +19 +18 +17 +15 +15 +14 +13 +12 +12 +10 +-29 +-107 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-111 +-103 +25 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +103 +97 +90 +84 +78 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-110 +-101 +-95 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +113 +105 +97 +90 +85 +79 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-110 +-101 +-94 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +105 +98 +91 +85 +79 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-110 +-101 +-94 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +113 +104 +97 +91 +86 +79 +23 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-116 +-108 +-101 +-93 +34 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +104 +97 +89 +85 +80 +24 +-60 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-110 +-102 +-95 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +112 +104 +98 +91 +85 +79 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-110 +-102 +-94 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +105 +98 +91 +85 +79 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-109 +-101 +-94 +32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +113 +105 +98 +91 +86 +80 +23 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-117 +-109 +-101 +-95 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +112 +104 +98 +91 +85 +79 +23 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-109 +-101 +-94 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +106 +99 +92 +87 +80 +23 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-110 +-102 +-95 +32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +104 +98 +91 +84 +79 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-110 +-101 +-94 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +105 +98 +91 +85 +80 +23 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-118 +-109 +-101 +-94 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +113 +105 +98 +91 +86 +80 +23 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-117 +-109 +-101 +-94 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +104 +98 +91 +85 +79 +23 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-109 +-102 +-95 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +104 +98 +91 +85 +79 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-110 +-102 +-95 +32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +105 +98 +91 +85 +79 +23 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-116 +-109 +-100 +-93 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +112 +105 +98 +91 +85 +79 +23 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-110 +-101 +-94 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +113 +105 +98 +92 +86 +79 +23 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-117 +-108 +-101 +-94 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +103 +96 +91 +86 +80 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-116 +-109 +-100 +-93 +-86 +-81 +-74 +-70 +-65 +-60 +-55 +-51 +-47 +-44 +-41 +-38 +-34 +-32 +-30 +-27 +-25 +-24 +-21 +-20 +-18 +-16 +-15 +-14 +-12 +-12 +-11 +-10 +-9 +-8 +-7 +-7 +114 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +116 +109 +101 +94 +88 +30 +-54 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-116 +-108 +-100 +-93 +34 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +105 +98 +91 +85 +79 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-109 +-101 +-95 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +113 +105 +98 +91 +86 +80 +23 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-109 +-101 +-94 +34 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +105 +98 +91 +86 +79 +74 +69 +65 +60 +57 +53 +50 +46 +44 +41 +38 +35 +33 +31 +30 +28 +26 +24 +23 +22 +20 +18 +18 +17 +16 +15 +14 +13 +13 +12 +11 +11 +-30 +-108 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-112 +-104 +24 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +110 +103 +96 +90 +84 +78 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-111 +-103 +-95 +32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +105 +98 +90 +85 +80 +23 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-109 +-101 +-94 +-87 +-80 +-75 +-70 +-65 +-60 +-56 +-52 +-48 +-45 +-41 +-37 +-35 +-32 +-29 +-27 +-25 +-23 +-22 +-19 +-18 +-17 +-15 +-14 +-13 +-11 +-10 +-9 +-8 +-8 +-7 +-6 +116 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +116 +109 +101 +95 +88 +31 +-54 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-116 +-108 +-100 +-93 +34 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +114 +106 +99 +91 +86 +80 +23 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-117 +-109 +-101 +-95 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +104 +98 +91 +84 +79 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-110 +-102 +-95 +32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +105 +98 +92 +85 +80 +75 +70 +65 +61 +57 +53 +50 +47 +43 +40 +38 +35 +33 +30 +29 +28 +26 +24 +23 +20 +20 +19 +17 +16 +16 +14 +14 +13 +12 +11 +11 +10 +-30 +-108 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-111 +-103 +25 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +110 +103 +97 +90 +84 +79 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-118 +-110 +-101 +-95 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +111 +103 +97 +91 +85 +78 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-109 +-102 +-95 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +105 +98 +91 +85 +79 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-109 +-101 +-95 +-87 +-81 +-75 +-70 +-65 +-61 +-56 +-51 +-48 +-44 +-41 +-38 +-35 +-32 +-29 +-27 +-25 +-24 +-22 +-19 +-18 +-16 +-14 +-14 +-13 +-11 +-10 +-9 +-9 +-8 +-7 +-6 +114 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +116 +109 +102 +95 +88 +83 +77 +72 +67 +62 +58 +55 +51 +48 +45 +43 +40 +37 +35 +33 +30 +29 +27 +25 +24 +22 +20 +20 +18 +17 +17 +16 +15 +14 +13 +12 +11 +-29 +-107 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-110 +-103 +24 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +103 +97 +90 +85 +78 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-116 +-109 +-101 +-93 +34 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +112 +104 +98 +91 +85 +79 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-110 +-102 +-95 +-89 +-81 +-75 +-71 +-66 +-61 +-57 +-52 +-48 +-45 +-41 +-38 +-35 +-34 +-31 +-29 +-26 +-24 +-22 +-20 +-18 +-18 +-16 +-15 +-14 +-13 +-11 +-11 +-10 +-8 +-8 +-7 +114 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +116 +109 +101 +94 +88 +82 +76 +72 +66 +63 +58 +54 +51 +48 +44 +42 +39 +37 +34 +32 +30 +29 +26 +25 +24 +22 +20 +20 +19 +18 +17 +16 +15 +15 +14 +13 +13 +-28 +-107 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-110 +-103 +25 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +103 +96 +90 +84 +78 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-117 +-110 +-102 +-95 +-87 +-81 +-76 +-70 +-65 +-61 +-56 +-52 +-48 +-45 +-41 +-38 +-35 +-32 +-30 +-28 +-25 +-24 +-22 +-20 +-18 +-17 +-15 +-14 +-13 +-12 +-10 +-10 +-8 +-8 +-7 +-6 +114 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +116 +109 +101 +95 +88 +30 +-54 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-116 +-107 +-100 +-93 +35 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +105 +98 +91 +86 +79 +74 +69 +64 +59 +56 +53 +49 +46 +42 +39 +38 +35 +32 +31 +29 +26 +25 +24 +22 +21 +19 +17 +17 +16 +15 +15 +14 +13 +12 +10 +10 +11 +-30 +-108 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-111 +-103 +-95 +-88 +-82 +-77 +-71 +-66 +-61 +-56 +-53 +-49 +-44 +-42 +-39 +-36 +-33 +-31 +-29 +-27 +-24 +-22 +-21 +-20 +-18 +-17 +-15 +-14 +-13 +-12 +-11 +-10 +-9 +-9 +112 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +115 +108 +101 +94 +88 +83 +77 +72 +67 +62 +58 +55 +51 +48 +45 +42 +39 +37 +34 +33 +31 +29 +27 +26 +24 +23 +21 +20 +19 +19 +17 +17 +16 +15 +14 +13 +12 +-27 +-106 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-109 +-102 +25 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +103 +96 +89 +84 +78 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-109 +-101 +-95 +32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +113 +104 +98 +91 +85 +79 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-117 +-109 +-102 +-95 +-87 +-81 +-76 +-70 +-65 +-61 +-56 +-52 +-48 +-45 +-42 +-39 +-36 +-33 +-30 +-28 +-26 +-25 +-22 +-20 +-19 +-17 +-16 +-15 +-14 +-12 +-12 +-10 +-9 +-9 +-8 +-7 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +116 +108 +102 +95 +87 +82 +76 +72 +67 +63 +58 +54 +50 +48 +44 +42 +39 +37 +34 +33 +30 +28 +26 +24 +23 +22 +21 +20 +18 +17 +16 +16 +15 +14 +13 +13 +12 +-28 +-107 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-110 +-102 +-95 +-88 +-81 +-76 +-71 +-66 +-61 +-57 +-52 +-48 +-46 +-43 +-38 +-36 +-33 +-31 +-28 +-27 +-24 +-23 +-21 +-19 +-18 +-17 +-15 +-14 +-13 +-12 +-11 +-11 +-10 +-9 +112 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +116 +109 +101 +95 +88 +82 +76 +72 +67 +63 +58 +54 +51 +48 +45 +42 +39 +37 +34 +32 +30 +28 +26 +25 +24 +22 +21 +20 +18 +18 +16 +16 +15 +14 +14 +13 +12 +-28 +-106 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-109 +-102 +-94 +-88 +-81 +-76 +-71 +-65 +-60 +-56 +-52 +-48 +-45 +-41 +-38 +-35 +-33 +-30 +-28 +-26 +-23 +-22 +-20 +-18 +-17 +-16 +-14 +-14 +-12 +-12 +-10 +-10 +-9 +-8 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +115 +108 +100 +93 +86 +81 +75 +71 +65 +61 +57 +53 +49 +46 +43 +40 +38 +35 +32 +31 +28 +27 +25 +23 +22 +21 +19 +19 +18 +17 +16 +16 +14 +13 +12 +12 +11 +-29 +-108 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-110 +-102 +-94 +-87 +-81 +-76 +-71 +-65 +-60 +-56 +-52 +-48 +-44 +-41 +-38 +-35 +-33 +-30 +-27 +-26 +-23 +-22 +-20 +-19 +-16 +-16 +-14 +-13 +-12 +-11 +-10 +-9 +-8 +-8 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +115 +108 +101 +94 +87 +81 +76 +71 +66 +62 +58 +54 +50 +48 +44 +42 +39 +36 +34 +32 +29 +28 +26 +24 +23 +21 +20 +19 +17 +17 +15 +14 +14 +13 +12 +12 +11 +-30 +-108 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-111 +-103 +-95 +-88 +-82 +-77 +-71 +-66 +-61 +-56 +-52 +-48 +-44 +-41 +-38 +-35 +-32 +-30 +-27 +-25 +-23 +-21 +-20 +-18 +-16 +-15 +-14 +-12 +-12 +-11 +-10 +-10 +-8 +-6 +114 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +116 +108 +101 +94 +88 +82 +76 +71 +66 +62 +58 +53 +50 +47 +43 +41 +39 +36 +34 +32 +30 +28 +26 +25 +23 +22 +20 +19 +18 +17 +16 +16 +14 +13 +12 +12 +12 +-29 +-108 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-111 +-102 +-94 +-88 +-82 +-76 +-71 +-66 +-61 +-56 +-52 +-48 +-44 +-42 +-39 +-36 +-33 +-31 +-27 +-26 +-24 +-22 +-20 +-19 +-17 +-16 +-15 +-13 +-12 +-12 +-10 +-9 +-9 +-8 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +116 +108 +100 +94 +88 +82 +76 +71 +66 +63 +58 +54 +51 +48 +44 +42 +38 +36 +33 +32 +30 +28 +26 +25 +23 +22 +20 +19 +18 +18 +16 +16 +15 +14 +13 +13 +12 +-28 +-107 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-111 +-102 +-95 +-88 +-82 +-76 +-71 +-67 +-61 +-57 +-52 +-48 +-45 +-42 +-38 +-36 +-34 +-31 +-28 +-27 +-24 +-22 +-21 +-19 +-18 +-17 +-15 +-15 +-12 +-11 +-10 +-9 +-9 +-8 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +116 +109 +100 +94 +88 +82 +76 +72 +67 +63 +59 +55 +51 +49 +46 +42 +39 +37 +34 +32 +30 +28 +27 +26 +24 +22 +21 +20 +19 +18 +16 +15 +14 +14 +14 +13 +12 +-28 +-107 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-110 +-102 +-95 +-88 +-82 +-77 +-71 +-66 +-61 +-57 +-52 +-49 +-45 +-42 +-38 +-36 +-34 +-32 +-29 +-26 +-24 +-22 +-21 +-19 +-17 +-17 +-15 +-14 +-12 +-12 +-11 +-10 +-9 +-9 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +115 +107 +99 +94 +87 +81 +76 +71 +66 +61 +58 +54 +50 +47 +43 +40 +38 +37 +34 +31 +29 +27 +26 +24 +22 +21 +20 +19 +18 +16 +15 +16 +14 +14 +13 +12 +11 +-29 +-107 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-110 +-102 +26 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +104 +97 +90 +84 +78 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-110 +-102 +-95 +32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +105 +98 +91 +86 +79 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-117 +-108 +-100 +-94 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +105 +98 +91 +85 +79 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-117 +-109 +-101 +-95 +32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +111 +104 +97 +90 +84 +78 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-110 +-101 +-94 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +104 +98 +92 +86 +80 +24 +-60 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-116 +-108 +-100 +-93 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +105 +98 +91 +85 +79 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-117 +-110 +-102 +-94 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +104 +98 +91 +85 +79 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-109 +-101 +-94 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +113 +104 +99 +92 +86 +80 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-109 +-101 +-94 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +104 +97 +91 +85 +79 +23 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-109 +-102 +-94 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +112 +104 +98 +91 +85 +79 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-109 +-101 +-94 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +105 +99 +91 +85 +80 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-116 +-109 +-100 +-93 +34 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +112 +104 +98 +91 +85 +79 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-117 +-109 +-101 +-95 +32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +113 +106 +98 +91 +85 +79 +23 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-109 +-102 +-95 +32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +104 +98 +91 +85 +79 +23 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-109 +-101 +-94 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +105 +98 +91 +85 +79 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-110 +-102 +-95 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +113 +105 +98 +91 +86 +80 +23 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-109 +-101 +-93 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +113 +105 +98 +91 +85 +79 +23 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-109 +-102 +-94 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +104 +97 +90 +84 +78 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-118 +-110 +-102 +-95 +32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +113 +105 +98 +91 +85 +79 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-117 +-109 +-101 +-94 +-87 +-80 +-75 +-70 +-65 +-60 +-56 +-52 +-47 +-44 +-40 +-37 +-35 +-32 +-29 +-27 +-25 +-23 +-21 +-20 +-17 +-17 +-15 +-14 +-13 +-11 +-10 +-10 +-8 +-8 +-7 +-6 +114 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +115 +108 +101 +94 +87 +29 +-56 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-116 +-108 +-100 +-93 +34 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +105 +99 +91 +86 +80 +24 +-60 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-116 +-108 +-100 +-93 +34 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +105 +98 +91 +86 +80 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-118 +-110 +-101 +-95 +32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +111 +104 +98 +91 +85 +79 +74 +69 +64 +60 +56 +53 +50 +47 +43 +40 +38 +35 +34 +31 +29 +27 +26 +23 +23 +22 +21 +19 +18 +16 +16 +15 +15 +14 +13 +12 +11 +10 +-30 +-108 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-110 +-102 +25 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +103 +96 +90 +84 +78 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-110 +-101 +-95 +32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +104 +97 +90 +85 +79 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-110 +-101 +-94 +-87 +-81 +-75 +-70 +-65 +-60 +-56 +-52 +-48 +-44 +-41 +-38 +-35 +-33 +-30 +-28 +-26 +-24 +-21 +-20 +-18 +-17 +-16 +-14 +-13 +-13 +-10 +-9 +-9 +-8 +-7 +-7 +114 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +116 +108 +101 +95 +88 +30 +-54 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-107 +-100 +-92 +35 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +106 +98 +90 +86 +80 +23 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-110 +-102 +-95 +32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +104 +97 +91 +85 +79 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-110 +-101 +-95 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +104 +97 +90 +84 +79 +75 +69 +64 +59 +56 +52 +49 +45 +43 +40 +38 +35 +33 +31 +29 +27 +26 +23 +23 +21 +20 +19 +18 +16 +16 +14 +14 +13 +12 +12 +12 +11 +-29 +-108 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-111 +-103 +25 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +103 +96 +90 +85 +79 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-109 +-102 +-94 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +104 +97 +91 +85 +79 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-110 +-102 +-95 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +104 +98 +90 +85 +79 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-109 +-101 +-94 +-87 +-80 +-74 +-69 +-65 +-60 +-55 +-52 +-47 +-44 +-40 +-38 +-35 +-33 +-29 +-28 +-26 +-23 +-21 +-20 +-18 +-17 +-15 +-14 +-13 +-12 +-10 +-10 +-8 +-8 +-7 +-6 +114 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +116 +108 +101 +95 +89 +82 +76 +71 +67 +64 +58 +54 +51 +47 +44 +42 +39 +37 +35 +32 +30 +28 +26 +24 +24 +22 +20 +20 +18 +17 +16 +15 +14 +14 +13 +12 +12 +-28 +-107 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-111 +-103 +25 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +111 +103 +97 +89 +84 +78 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-109 +-101 +-95 +32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +113 +104 +97 +91 +85 +79 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-117 +-109 +-101 +-94 +-86 +-80 +-74 +-69 +-64 +-60 +-56 +-51 +-47 +-44 +-41 +-37 +-35 +-32 +-29 +-27 +-24 +-22 +-21 +-19 +-17 +-17 +-15 +-14 +-12 +-11 +-10 +-9 +-8 +-7 +-7 +-6 +115 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +115 +108 +101 +94 +87 +82 +77 +71 +67 +63 +58 +54 +51 +48 +44 +42 +39 +36 +34 +33 +30 +29 +27 +25 +24 +23 +21 +20 +19 +18 +17 +16 +15 +15 +13 +13 +12 +-28 +-107 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-110 +-103 +24 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +103 +96 +90 +84 +78 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-109 +-101 +-95 +-87 +-81 +-75 +-70 +-65 +-61 +-55 +-51 +-48 +-45 +-41 +-38 +-35 +-32 +-30 +-28 +-25 +-24 +-21 +-19 +-18 +-17 +-15 +-14 +-12 +-11 +-11 +-10 +-9 +-8 +-6 +-6 +115 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +116 +109 +101 +94 +87 +29 +-55 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-116 +-108 +-100 +-94 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +114 +106 +99 +92 +86 +79 +75 +70 +66 +62 +58 +53 +50 +47 +44 +42 +39 +36 +34 +32 +29 +27 +27 +24 +23 +21 +20 +19 +18 +17 +16 +15 +14 +13 +13 +12 +12 +10 +-30 +-108 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-111 +-103 +-95 +-89 +-82 +-77 +-72 +-67 +-61 +-57 +-53 +-49 +-45 +-43 +-40 +-37 +-34 +-31 +-28 +-27 +-24 +-23 +-21 +-19 +-17 +-17 +-15 +-14 +-13 +-12 +-11 +-10 +-9 +-9 +112 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +115 +108 +101 +94 +88 +82 +77 +72 +67 +63 +58 +54 +51 +48 +44 +42 +39 +37 +35 +32 +30 +28 +26 +25 +23 +22 +21 +20 +18 +18 +17 +16 +15 +15 +14 +13 +12 +-28 +-107 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-109 +-101 +26 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +102 +96 +89 +83 +78 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-110 +-103 +-96 +32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +105 +98 +92 +85 +80 +23 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-116 +-108 +-101 +-93 +-86 +-81 +-74 +-69 +-65 +-60 +-55 +-52 +-47 +-43 +-41 +-38 +-35 +-32 +-29 +-27 +-25 +-23 +-21 +-20 +-18 +-17 +-16 +-14 +-14 +-12 +-11 +-10 +-9 +-8 +-7 +-6 +114 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +116 +108 +100 +95 +88 +82 +77 +72 +67 +63 +58 +55 +50 +48 +45 +42 +39 +36 +33 +32 +30 +29 +27 +26 +23 +22 +20 +19 +19 +17 +16 +16 +14 +14 +13 +12 +12 +-28 +-107 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-109 +-102 +-94 +-88 +-81 +-76 +-71 +-66 +-60 +-56 +-52 +-48 +-44 +-42 +-37 +-35 +-32 +-30 +-28 +-26 +-24 +-22 +-20 +-18 +-17 +-16 +-14 +-13 +-11 +-10 +-9 +-9 +-8 +-8 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +115 +108 +100 +94 +87 +81 +76 +71 +65 +62 +58 +53 +50 +47 +43 +41 +38 +35 +33 +32 +29 +27 +26 +24 +23 +22 +19 +18 +18 +17 +16 +14 +13 +14 +13 +12 +11 +-29 +-107 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-111 +-104 +-96 +-88 +-82 +-77 +-71 +-66 +-62 +-57 +-52 +-49 +-45 +-42 +-39 +-36 +-33 +-31 +-28 +-27 +-25 +-23 +-21 +-19 +-17 +-16 +-15 +-13 +-13 +-12 +-10 +-10 +-8 +-8 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +116 +108 +101 +94 +87 +81 +76 +71 +65 +62 +57 +54 +51 +47 +44 +41 +38 +35 +34 +32 +29 +27 +25 +24 +22 +22 +21 +20 +18 +17 +16 +15 +14 +13 +12 +13 +12 +-28 +-107 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-110 +-102 +-95 +-88 +-82 +-76 +-71 +-66 +-61 +-57 +-53 +-49 +-45 +-42 +-39 +-36 +-33 +-31 +-28 +-26 +-23 +-22 +-20 +-19 +-17 +-16 +-14 +-13 +-12 +-11 +-10 +-10 +-8 +-8 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +115 +108 +100 +93 +87 +81 +76 +71 +66 +62 +58 +54 +51 +47 +44 +41 +38 +36 +33 +31 +30 +28 +26 +25 +23 +21 +20 +20 +18 +18 +16 +15 +15 +14 +13 +13 +12 +-28 +-107 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-110 +-102 +-94 +-88 +-82 +-76 +-71 +-66 +-61 +-57 +-52 +-49 +-45 +-41 +-38 +-36 +-32 +-30 +-28 +-26 +-24 +-22 +-20 +-19 +-18 +-16 +-15 +-14 +-12 +-12 +-10 +-10 +-9 +-8 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +115 +109 +101 +94 +88 +82 +76 +71 +67 +63 +58 +55 +50 +48 +44 +42 +39 +37 +34 +32 +30 +28 +27 +25 +23 +22 +20 +19 +18 +17 +16 +16 +14 +14 +13 +12 +12 +-28 +-107 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-110 +-102 +-94 +-87 +-81 +-76 +-71 +-66 +-61 +-56 +-52 +-49 +-45 +-43 +-38 +-35 +-33 +-31 +-28 +-26 +-24 +-23 +-21 +-19 +-17 +-16 +-14 +-14 +-12 +-12 +-11 +-10 +-9 +-8 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +115 +107 +99 +93 +87 +81 +75 +71 +67 +62 +58 +54 +49 +47 +44 +41 +38 +37 +33 +32 +30 +28 +26 +25 +22 +22 +20 +19 +18 +18 +16 +16 +15 +14 +13 +12 +11 +-29 +-107 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-109 +-102 +-95 +-88 +-81 +-77 +-71 +-66 +-61 +-57 +-52 +-49 +-45 +-42 +-39 +-36 +-33 +-31 +-28 +-26 +-24 +-22 +-20 +-19 +-17 +-16 +-15 +-14 +-12 +-13 +-11 +-10 +-9 +-8 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +117 +109 +102 +95 +89 +82 +77 +72 +66 +63 +59 +55 +51 +48 +45 +42 +40 +36 +34 +33 +30 +29 +27 +25 +23 +22 +21 +20 +17 +17 +16 +16 +15 +14 +13 +13 +11 +-29 +-107 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-110 +-102 +-94 +-88 +-82 +-76 +-70 +-66 +-60 +-56 +-52 +-48 +-44 +-41 +-38 +-35 +-32 +-31 +-28 +-26 +-24 +-22 +-20 +-19 +-17 +-16 +-15 +-14 +-13 +-12 +-10 +-10 +-9 +-8 +112 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +115 +107 +100 +93 +86 +81 +76 +71 +66 +62 +57 +54 +50 +47 +44 +41 +38 +36 +34 +32 +29 +28 +26 +25 +23 +22 +21 +19 +17 +17 +16 +15 +14 +14 +13 +12 +11 +-29 +-108 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-110 +-102 +26 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +112 +103 +97 +91 +84 +78 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-117 +-109 +-101 +-95 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +105 +98 +91 +85 +79 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-109 +-101 +-94 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +112 +104 +97 +91 +85 +79 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-109 +-101 +-95 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +104 +98 +91 +85 +79 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-117 +-108 +-101 +-94 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +104 +98 +91 +85 +79 +23 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-109 +-101 +-94 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +104 +98 +91 +85 +79 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-116 +-109 +-101 +-94 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +104 +97 +91 +84 +79 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 diff --git a/traces/lf_t5577_keri.pm3 b/traces/lf_t5577_keri.pm3 new file mode 100644 index 000000000..624da94d2 --- /dev/null +++ b/traces/lf_t5577_keri.pm3 @@ -0,0 +1,10000 @@ +-25 +-26 +33 +-27 +33 +-28 +32 +-28 +33 +-27 +33 +-28 +33 +74 +-2 +43 +-25 +30 +-33 +26 +-34 +26 +-34 +27 +-34 +26 +-33 +28 +-32 +29 +-30 +30 +-30 +30 +-31 +30 +-32 +29 +-31 +30 +-31 +30 +-31 +30 +-30 +31 +-27 +33 +-29 +31 +-30 +30 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-27 +32 +-29 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-29 +31 +-27 +33 +-29 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-29 +31 +-27 +33 +-28 +32 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +32 +-25 +34 +-28 +32 +-29 +30 +-31 +30 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-28 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +-106 +-43 +-96 +-3 +-57 +23 +-39 +34 +-32 +37 +-27 +41 +-21 +44 +-19 +45 +-15 +47 +-12 +48 +-12 +47 +-13 +45 +-15 +43 +-18 +41 +-20 +39 +-22 +37 +-21 +38 +-22 +37 +-25 +34 +-26 +34 +-27 +33 +-27 +33 +-27 +33 +-27 +33 +-26 +34 +-26 +33 +-28 +32 +-29 +32 +-28 +31 +-29 +32 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-30 +30 +-31 +30 +-30 +31 +-29 +31 +-30 +31 +-28 +31 +-28 +32 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-29 +31 +-28 +32 +-27 +32 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +33 +-27 +32 +-29 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +34 +-26 +32 +-28 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +33 +-28 +31 +-29 +32 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +-28 +32 +-27 +33 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-27 +33 +-26 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +33 +-26 +33 +-29 +31 +-29 +30 +-30 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +33 +-26 +33 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-28 +32 +-27 +33 +-27 +33 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +30 +-29 +31 +-28 +33 +-27 +32 +-29 +31 +-30 +31 +-30 +30 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +30 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-27 +33 +-27 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +30 +-29 +32 +-27 +33 +-26 +33 +-28 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +32 +-28 +31 +-27 +32 +-26 +33 +-28 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-28 +33 +-27 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-28 +32 +-28 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-28 +32 +-27 +33 +-29 +31 +-30 +31 +-30 +30 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +30 +-29 +31 +-27 +33 +-27 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +32 +-26 +33 +-26 +33 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +30 +-29 +31 +-29 +32 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-28 +32 +-28 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-28 +31 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-27 +33 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +30 +-30 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +30 +-30 +30 +-29 +31 +-30 +31 +-29 +31 +-27 +32 +-27 +32 +-28 +31 +-29 +30 +-30 +32 +-29 +31 +-29 +31 +-28 +32 +-27 +33 +-26 +33 +-28 +32 +-28 +32 +-29 +31 +-29 +32 +-29 +32 +-29 +32 +-27 +33 +-26 +33 +-28 +32 +-28 +31 +-29 +31 +-29 +32 +-28 +31 +-29 +31 +-27 +33 +-26 +33 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-27 +33 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +30 +-29 +31 +-29 +32 +-27 +32 +-27 +32 +-29 +31 +-29 +30 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-29 +31 +-27 +32 +-27 +33 +-29 +31 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +32 +-27 +33 +-26 +32 +-28 +32 +-29 +31 +-29 +31 +-28 +32 +-29 +32 +-28 +32 +-26 +33 +-26 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +31 +-29 +31 +-30 +31 +-30 +30 +-30 +30 +-31 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +33 +-26 +33 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-28 +32 +-28 +32 +-27 +33 +-26 +33 +-28 +31 +-29 +31 +-29 +32 +-28 +32 +-29 +32 +-29 +31 +-27 +32 +-27 +33 +-29 +31 +-29 +31 +-29 +30 +-31 +30 +-30 +30 +-29 +30 +-28 +31 +-28 +31 +-30 +30 +-30 +30 +-31 +30 +-31 +30 +-30 +30 +-30 +30 +72 +-4 +42 +-26 +28 +-34 +25 +-36 +24 +-36 +25 +-35 +26 +-34 +27 +-33 +28 +-30 +30 +-32 +29 +-32 +28 +-32 +30 +-30 +30 +-31 +30 +-31 +30 +-30 +-107 +-44 +-97 +-3 +-58 +23 +-40 +33 +-32 +37 +-27 +40 +-22 +44 +-19 +44 +-14 +48 +-12 +48 +-12 +46 +-13 +45 +-16 +43 +-18 +41 +-19 +39 +-22 +37 +-21 +39 +-21 +37 +-25 +34 +-27 +33 +-28 +32 +-27 +33 +-27 +33 +-27 +33 +-25 +34 +-25 +34 +-28 +32 +-28 +32 +-28 +33 +-28 +32 +-29 +31 +-28 +32 +-27 +33 +-26 +33 +-28 +32 +-29 +32 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-26 +33 +-28 +32 +-28 +32 +-29 +32 +-29 +31 +-29 +32 +-29 +32 +-27 +33 +-26 +33 +-28 +32 +-29 +31 +-30 +31 +-29 +32 +-29 +31 +-28 +31 +-27 +33 +-27 +33 +-28 +31 +-29 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +31 +-29 +32 +-29 +31 +-30 +29 +-30 +31 +-29 +31 +-30 +31 +-27 +32 +-27 +33 +-29 +31 +-29 +30 +-30 +30 +-30 +30 +-30 +30 +-29 +31 +-28 +31 +-28 +32 +-28 +31 +-29 +31 +-30 +30 +-29 +31 +-29 +31 +-30 +31 +-27 +33 +-26 +33 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-27 +33 +-26 +33 +-29 +31 +-29 +30 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-27 +32 +-27 +32 +-29 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-29 +30 +-29 +32 +-27 +32 +-29 +31 +-30 +31 +-29 +30 +-30 +31 +-30 +30 +-30 +30 +-28 +32 +-27 +32 +-29 +31 +-30 +30 +-30 +30 +-30 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-26 +33 +-27 +33 +-28 +31 +-29 +31 +-30 +31 +-30 +30 +-29 +31 +-29 +32 +-27 +32 +-27 +33 +-28 +32 +-28 +31 +-29 +31 +-29 +31 +-28 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +33 +-26 +33 +-29 +32 +-29 +31 +-29 +32 +-28 +31 +-29 +32 +-28 +31 +-28 +33 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +30 +-30 +31 +-27 +32 +-27 +32 +-29 +31 +-30 +31 +-29 +30 +-30 +31 +-30 +31 +-29 +31 +-27 +32 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-28 +30 +-29 +32 +-29 +31 +-30 +30 +-30 +30 +-30 +30 +-29 +30 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +32 +-28 +31 +-29 +32 +74 +-2 +43 +-25 +30 +-33 +26 +-34 +26 +-34 +27 +-33 +27 +-33 +28 +-32 +29 +-29 +30 +-31 +30 +-31 +30 +-32 +29 +-31 +29 +-31 +30 +-30 +31 +-30 +30 +-28 +32 +-29 +31 +-29 +31 +-30 +30 +-31 +31 +-30 +30 +-30 +31 +-29 +31 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +-107 +-43 +-96 +-4 +-58 +23 +-39 +33 +-32 +36 +-27 +40 +-22 +44 +-19 +43 +-15 +47 +-12 +48 +-12 +47 +-13 +45 +-16 +43 +-18 +40 +-21 +38 +-22 +38 +79 +2 +47 +-21 +33 +-31 +28 +-32 +28 +-33 +29 +-32 +29 +-31 +29 +-31 +30 +-28 +31 +-29 +31 +-30 +30 +-31 +29 +-31 +30 +-31 +30 +-30 +30 +-30 +31 +-28 +33 +-28 +31 +-29 +31 +-30 +30 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-28 +-106 +-42 +-96 +-3 +-58 +23 +-40 +33 +-32 +37 +-27 +40 +-22 +44 +-19 +44 +-15 +47 +-12 +47 +-12 +46 +-13 +45 +-15 +43 +-18 +41 +-20 +39 +-22 +37 +78 +2 +47 +-22 +33 +-30 +29 +-31 +29 +-32 +30 +-31 +30 +-31 +29 +-30 +30 +-28 +32 +-29 +30 +-30 +30 +-30 +30 +-30 +31 +-30 +30 +-30 +32 +-29 +31 +-27 +32 +-29 +32 +-29 +31 +-30 +31 +-30 +31 +-31 +30 +-29 +31 +-29 +31 +-28 +32 +-29 +31 +-30 +31 +-31 +30 +-30 +30 +-30 +31 +-30 +31 +-29 +-107 +-44 +-96 +-3 +-58 +23 +-40 +33 +-32 +37 +-27 +40 +-22 +43 +-19 +44 +-15 +47 +-13 +47 +-12 +46 +-13 +45 +-15 +43 +-18 +41 +-20 +39 +-21 +38 +-22 +37 +-22 +37 +-25 +35 +-26 +34 +-26 +34 +-27 +33 +-27 +33 +-27 +34 +-25 +34 +-25 +34 +-27 +32 +-27 +32 +-28 +32 +-28 +32 +-29 +31 +-28 +31 +73 +-3 +42 +-25 +30 +-33 +26 +-35 +25 +-35 +27 +-34 +27 +-33 +28 +-33 +28 +-31 +30 +-31 +29 +-32 +28 +-33 +28 +-33 +29 +-31 +29 +-31 +30 +-30 +31 +-27 +32 +-29 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +30 +-30 +30 +-29 +32 +-27 +33 +-28 +31 +-29 +32 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +-107 +-43 +-97 +-3 +-58 +22 +-40 +33 +-32 +37 +-27 +40 +-21 +43 +-20 +45 +-15 +47 +-12 +48 +-12 +47 +-13 +45 +-15 +44 +-17 +41 +-20 +39 +-22 +37 +79 +2 +47 +-21 +33 +-30 +29 +-32 +29 +-31 +28 +-32 +30 +-31 +29 +-31 +30 +-28 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +30 +-30 +31 +-29 +-107 +-44 +-96 +-3 +-58 +22 +-40 +33 +-32 +37 +-28 +40 +-21 +43 +-19 +44 +-15 +46 +-14 +46 +-13 +46 +-13 +45 +-16 +43 +-18 +40 +-20 +39 +-22 +37 +-22 +36 +-23 +37 +-25 +35 +-26 +34 +-27 +33 +-27 +33 +-27 +33 +-27 +33 +-26 +34 +-25 +34 +-27 +32 +-28 +32 +-29 +32 +-29 +31 +-28 +32 +-28 +32 +74 +-2 +43 +-25 +30 +-33 +26 +-35 +26 +-34 +27 +-34 +27 +-33 +29 +-32 +29 +-29 +30 +-30 +30 +-31 +30 +-32 +29 +-31 +30 +-31 +30 +-31 +30 +-30 +31 +-27 +33 +-29 +31 +-29 +31 +-30 +30 +-31 +30 +-30 +31 +-30 +31 +-29 +31 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-28 +33 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-26 +33 +-28 +32 +-29 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +32 +-29 +32 +-25 +35 +-28 +32 +-29 +31 +-31 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +32 +-26 +33 +-28 +32 +-30 +30 +-30 +30 +-30 +31 +-30 +30 +-30 +31 +-29 +-107 +-43 +-96 +-3 +-59 +22 +-39 +33 +-32 +37 +-28 +40 +-22 +43 +-19 +44 +-15 +46 +-13 +47 +-13 +46 +-13 +45 +-16 +43 +-17 +40 +-20 +39 +-23 +37 +-22 +37 +-22 +37 +-25 +34 +-26 +34 +-27 +34 +-27 +34 +-27 +33 +-27 +33 +-26 +34 +-25 +34 +-27 +33 +-28 +33 +-28 +32 +-29 +32 +-28 +32 +-28 +32 +-27 +33 +-26 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-28 +32 +-27 +33 +-27 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +32 +-27 +33 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-28 +32 +-29 +31 +-29 +31 +-29 +30 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +30 +-29 +31 +-29 +31 +-27 +33 +-27 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-28 +32 +-27 +33 +-28 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +30 +-30 +31 +-27 +33 +-26 +33 +-28 +31 +-30 +31 +-29 +30 +-30 +31 +-29 +31 +-29 +31 +-28 +31 +-27 +32 +-29 +31 +-29 +31 +-30 +30 +-30 +31 +-29 +31 +-29 +31 +-27 +33 +-26 +33 +-29 +30 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-29 +31 +-27 +33 +-26 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +30 +-29 +31 +-29 +31 +-29 +31 +-28 +31 +-28 +32 +-29 +31 +-29 +30 +-30 +31 +-30 +31 +-29 +30 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +33 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-26 +32 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +33 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-26 +32 +-29 +31 +-30 +31 +-29 +30 +-29 +31 +-30 +31 +-29 +31 +-28 +32 +-27 +33 +-29 +30 +-30 +31 +-30 +31 +-29 +31 +-30 +30 +-29 +31 +-28 +32 +-27 +32 +-29 +30 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +30 +-27 +32 +-27 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +30 +-29 +31 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +30 +-30 +31 +-30 +30 +-30 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-29 +30 +-28 +32 +-28 +31 +-30 +30 +-29 +30 +-30 +30 +-30 +31 +-29 +30 +-29 +31 +-27 +32 +-26 +33 +-28 +31 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-27 +32 +-27 +33 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-30 +30 +-30 +31 +-27 +33 +-27 +32 +-29 +31 +-29 +31 +-30 +30 +-29 +31 +-30 +31 +-29 +30 +-28 +32 +-28 +32 +-28 +31 +-29 +31 +-30 +30 +-29 +31 +-30 +31 +-29 +31 +-27 +32 +-26 +33 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-30 +30 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-28 +32 +-26 +33 +-28 +32 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +30 +-30 +31 +-28 +32 +-26 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +30 +-30 +31 +-28 +32 +-28 +32 +-29 +30 +-30 +30 +-30 +30 +-30 +31 +-30 +30 +-30 +31 +-29 +30 +-28 +32 +-29 +30 +-31 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +30 +-28 +32 +-27 +32 +-29 +30 +-30 +31 +-30 +30 +-30 +31 +-29 +31 +-29 +31 +-27 +33 +-26 +33 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-26 +33 +-28 +31 +-29 +31 +-29 +32 +-29 +31 +-29 +32 +-29 +31 +-27 +33 +-26 +33 +-28 +32 +-28 +32 +-28 +31 +-28 +32 +-29 +32 +-29 +31 +-27 +33 +-26 +33 +-28 +31 +-29 +31 +-28 +32 +-29 +31 +-29 +32 +-28 +32 +-28 +33 +-26 +33 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-26 +34 +-26 +32 +-28 +32 +-28 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-27 +32 +-28 +32 +-29 +30 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-28 +31 +-27 +33 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-28 +32 +-29 +31 +-29 +31 +-29 +32 +-29 +32 +-28 +31 +-27 +33 +-26 +33 +-28 +31 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +30 +-27 +33 +-26 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +73 +-3 +42 +-25 +30 +-33 +26 +-35 +25 +-34 +27 +-34 +26 +-33 +28 +-32 +29 +-29 +30 +-31 +29 +-32 +29 +-32 +29 +-31 +29 +-32 +29 +-31 +30 +-30 +-108 +-44 +-97 +-4 +-59 +22 +-40 +33 +-33 +36 +-28 +39 +-23 +43 +-20 +43 +-15 +46 +-13 +47 +-13 +46 +-14 +44 +-16 +43 +-18 +40 +-21 +38 +-23 +37 +-21 +38 +-22 +36 +-25 +34 +-27 +33 +-27 +33 +-27 +33 +-27 +33 +-27 +33 +-25 +34 +-25 +34 +-28 +32 +-28 +31 +-28 +32 +-28 +32 +-28 +31 +-29 +31 +-27 +33 +-27 +32 +-28 +31 +-29 +31 +-30 +30 +-29 +31 +-29 +31 +-29 +31 +-28 +31 +-28 +32 +-29 +31 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +34 +-26 +33 +-28 +31 +-29 +32 +-28 +31 +-29 +31 +-30 +31 +-29 +32 +-26 +32 +-27 +33 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-29 +31 +-30 +31 +-27 +33 +-27 +33 +-28 +31 +-29 +31 +-30 +31 +-28 +31 +-29 +31 +-29 +32 +-26 +33 +-26 +33 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +30 +-29 +31 +-27 +33 +-27 +32 +-29 +31 +-29 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +30 +-28 +31 +-28 +32 +-30 +30 +-31 +29 +-30 +30 +-30 +30 +-30 +30 +-29 +30 +-29 +32 +-28 +31 +-30 +29 +-31 +30 +-30 +29 +-30 +30 +-30 +31 +-30 +30 +-28 +32 +-27 +32 +-30 +30 +-30 +30 +-30 +30 +-30 +30 +-30 +31 +-29 +31 +-28 +32 +-28 +32 +-29 +30 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-26 +33 +-29 +31 +-28 +32 +-29 +31 +-29 +32 +-28 +31 +-29 +32 +-27 +33 +-26 +33 +-28 +32 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-26 +33 +-26 +33 +-28 +31 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-29 +32 +-27 +33 +-26 +32 +-29 +31 +-30 +30 +-30 +31 +-29 +31 +-30 +31 +-29 +31 +-27 +33 +-27 +32 +-29 +32 +-28 +32 +-29 +31 +-29 +31 +-28 +32 +-29 +32 +-27 +33 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-29 +31 +-27 +33 +-27 +32 +-28 +31 +-29 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-29 +31 +-28 +33 +-27 +32 +-28 +31 +-29 +31 +-30 +31 +-29 +30 +-29 +31 +-29 +32 +-27 +32 +-27 +33 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-28 +32 +-26 +32 +-28 +31 +-30 +31 +-30 +30 +-30 +31 +-29 +31 +-29 +30 +72 +-4 +42 +-26 +29 +-34 +25 +-36 +25 +-35 +25 +-34 +26 +-34 +27 +-33 +28 +-30 +29 +-32 +29 +-32 +29 +-32 +28 +-31 +29 +-32 +29 +-32 +29 +-30 +30 +-28 +32 +-29 +30 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-26 +33 +-28 +32 +-29 +31 +-29 +31 +-29 +32 +-30 +31 +-29 +31 +-29 +-106 +-43 +-96 +-2 +-57 +24 +-38 +34 +-31 +38 +-26 +41 +-20 +45 +-18 +45 +-14 +48 +-11 +48 +-12 +48 +-12 +47 +-15 +44 +-17 +42 +-19 +39 +-21 +38 +79 +3 +47 +-21 +33 +-30 +30 +-32 +29 +-32 +29 +-31 +29 +-32 +29 +-31 +30 +-28 +32 +-30 +30 +-30 +30 +-31 +30 +-31 +30 +-30 +30 +-30 +30 +-31 +30 +-28 +32 +-29 +31 +-30 +30 +-31 +30 +-31 +30 +-31 +30 +-31 +30 +-30 +30 +-28 +32 +-30 +30 +-30 +31 +-31 +30 +-31 +30 +-30 +30 +-30 +31 +-30 +-107 +-44 +-98 +-4 +-58 +22 +-39 +33 +-33 +36 +-27 +40 +-22 +43 +-20 +44 +-15 +46 +-13 +46 +-13 +45 +-15 +45 +-16 +42 +-18 +40 +-21 +39 +-22 +37 +79 +2 +46 +-22 +33 +-31 +28 +-33 +28 +-32 +29 +-32 +29 +-31 +29 +-30 +30 +-28 +32 +-29 +30 +-30 +30 +-31 +30 +-30 +31 +-30 +30 +-30 +31 +-29 +32 +-26 +33 +-29 +32 +-29 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-29 +32 +-26 +34 +-28 +32 +-29 +32 +-29 +32 +-29 +32 +-29 +32 +-29 +31 +-29 +-106 +-42 +-95 +-3 +-57 +24 +-39 +34 +-32 +37 +-26 +41 +-21 +44 +-19 +45 +-13 +47 +-12 +48 +-13 +46 +-14 +45 +-15 +43 +-18 +41 +-20 +39 +-22 +37 +-22 +38 +-22 +36 +-25 +35 +-26 +35 +-26 +34 +-26 +34 +-26 +34 +-27 +33 +-25 +34 +-26 +34 +-27 +32 +-28 +32 +-28 +32 +-28 +32 +-28 +31 +-28 +33 +74 +-2 +43 +-25 +30 +-33 +26 +-34 +26 +-34 +26 +-34 +27 +-33 +28 +-32 +29 +-29 +30 +-30 +29 +-32 +30 +-32 +29 +-30 +30 +-31 +30 +-31 +30 +-30 +30 +-28 +33 +-28 +32 +-29 +31 +-31 +30 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-28 +33 +-28 +31 +-29 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-29 +-107 +-43 +-96 +-3 +-57 +23 +-39 +33 +-33 +37 +-27 +40 +-21 +44 +-19 +44 +-15 +47 +-13 +47 +-13 +47 +-14 +45 +-16 +42 +-18 +41 +-21 +38 +-22 +37 +78 +2 +46 +-22 +33 +-30 +29 +-33 +27 +-33 +28 +-33 +29 +-32 +28 +-31 +30 +-29 +31 +-30 +29 +-31 +30 +-31 +30 +-30 +30 +-30 +31 +-30 +31 +-29 +-107 +-43 +-96 +-4 +-58 +22 +-40 +33 +-33 +36 +-27 +41 +-21 +44 +-19 +44 +-14 +47 +-12 +48 +-13 +46 +-13 +45 +-15 +44 +-18 +41 +-20 +39 +-22 +38 +-21 +38 +-22 +37 +-25 +35 +-26 +34 +-26 +34 +-27 +33 +-27 +34 +-27 +33 +-25 +34 +-25 +35 +-28 +33 +-27 +32 +-28 +32 +-29 +32 +-28 +31 +-28 +32 +74 +-2 +43 +-26 +29 +-33 +26 +-35 +25 +-34 +26 +-34 +27 +-33 +27 +-33 +28 +-31 +30 +-31 +29 +-32 +28 +-33 +28 +-32 +29 +-31 +29 +-31 +29 +-31 +30 +-28 +31 +-30 +30 +-30 +31 +-30 +30 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-27 +33 +-28 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-27 +33 +-28 +32 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +32 +-29 +32 +-26 +33 +-28 +32 +-29 +32 +-29 +31 +-29 +32 +-29 +32 +-29 +32 +-28 +33 +-25 +35 +-27 +33 +-29 +31 +-30 +32 +-29 +32 +-29 +31 +-29 +32 +-29 +32 +-26 +33 +-28 +32 +-29 +32 +-30 +31 +-29 +32 +-29 +32 +-28 +32 +-28 +-106 +-43 +-96 +-3 +-58 +23 +-39 +33 +-32 +37 +-27 +41 +-21 +44 +-19 +44 +-15 +48 +-12 +47 +-12 +47 +-13 +45 +-15 +43 +-18 +40 +-20 +39 +-22 +38 +-21 +38 +-21 +37 +-25 +35 +-26 +34 +-27 +33 +-27 +33 +-28 +33 +-27 +32 +-26 +34 +-26 +34 +-27 +32 +-28 +32 +-29 +32 +-28 +31 +-29 +31 +-28 +31 +-27 +33 +-27 +33 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-27 +33 +-26 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +32 +-28 +31 +-27 +33 +-27 +32 +-29 +31 +-29 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-30 +31 +-28 +31 +-28 +32 +-29 +31 +-30 +30 +-30 +31 +-29 +31 +-30 +31 +-29 +30 +-28 +32 +-28 +32 +-29 +31 +-29 +31 +-30 +30 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +31 +-26 +33 +-26 +32 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-30 +30 +-28 +32 +-27 +33 +-29 +31 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +33 +-26 +33 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +32 +-27 +33 +-26 +32 +-29 +31 +-30 +31 +-29 +30 +-29 +31 +-30 +31 +-29 +31 +-28 +33 +-27 +32 +-29 +31 +-30 +30 +-30 +30 +-30 +30 +-30 +31 +-29 +31 +-27 +32 +-27 +33 +-29 +31 +-29 +30 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-28 +33 +-27 +33 +-28 +31 +-29 +31 +-30 +31 +-28 +31 +-29 +31 +-29 +32 +-26 +33 +-26 +33 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +30 +-29 +31 +-27 +33 +-26 +32 +-29 +31 +-29 +31 +-29 +30 +-30 +31 +-29 +31 +-29 +32 +-27 +32 +-27 +33 +-29 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-28 +32 +-27 +33 +-26 +33 +-28 +31 +-29 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-26 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-29 +31 +-28 +32 +-27 +31 +-29 +31 +-29 +31 +-30 +30 +-30 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +30 +-30 +31 +-30 +30 +-29 +32 +-29 +31 +-29 +31 +-26 +33 +-26 +33 +-28 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-27 +33 +-26 +33 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +30 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-30 +30 +-30 +30 +-30 +31 +-28 +32 +-27 +31 +-30 +30 +-30 +31 +-29 +31 +-30 +30 +-30 +30 +-30 +30 +-29 +31 +-28 +32 +-29 +30 +-30 +30 +-31 +30 +-30 +31 +-29 +30 +-29 +31 +-28 +32 +-27 +31 +-29 +31 +-30 +31 +-30 +30 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-28 +33 +-28 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +33 +-28 +31 +-29 +32 +-29 +31 +-29 +31 +-28 +31 +-29 +31 +-27 +32 +-27 +33 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-28 +32 +-27 +33 +-29 +31 +-29 +31 +-30 +30 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +30 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-28 +32 +-28 +32 +-29 +31 +-30 +30 +-30 +31 +-29 +31 +-30 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-28 +32 +-29 +31 +-30 +30 +-29 +32 +-29 +32 +-29 +30 +-27 +33 +-26 +33 +-28 +30 +-30 +31 +-30 +30 +-29 +31 +-30 +31 +-30 +31 +-27 +32 +-28 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-30 +30 +-31 +30 +-29 +31 +-29 +31 +-30 +31 +-28 +32 +-27 +32 +-30 +31 +-29 +30 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +33 +-27 +32 +-28 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-28 +31 +-27 +32 +-29 +31 +-29 +30 +-30 +30 +-30 +31 +-30 +30 +-29 +32 +-27 +32 +-27 +31 +-29 +31 +-30 +31 +-29 +30 +-29 +31 +-30 +31 +-29 +31 +-28 +32 +-27 +33 +-28 +31 +-29 +31 +-30 +30 +-29 +30 +-30 +31 +-30 +30 +-27 +32 +-27 +33 +-29 +31 +-29 +31 +-29 +30 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +30 +-30 +31 +-30 +31 +-27 +31 +-28 +32 +-28 +32 +-28 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +73 +-4 +42 +-25 +29 +-33 +26 +-35 +25 +-35 +26 +-34 +26 +-34 +28 +-33 +28 +-30 +30 +-31 +29 +-32 +29 +-32 +29 +-31 +29 +-31 +30 +-32 +29 +-30 +-108 +-45 +-97 +-4 +-59 +22 +-40 +33 +-33 +35 +-28 +40 +-22 +43 +-19 +44 +-15 +47 +-13 +47 +-13 +46 +-13 +45 +-15 +43 +-18 +41 +-20 +39 +-22 +37 +-20 +39 +-22 +37 +-25 +35 +-26 +34 +-27 +33 +-27 +34 +-27 +33 +-27 +33 +-25 +35 +-25 +34 +-27 +33 +-28 +32 +-29 +32 +-28 +31 +-29 +32 +-28 +32 +-26 +32 +-26 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +33 +-28 +32 +-28 +31 +-29 +31 +-29 +32 +-28 +31 +-28 +32 +-27 +33 +-26 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-28 +32 +-27 +33 +-28 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-27 +33 +-27 +32 +-29 +31 +-30 +31 +-30 +30 +-29 +31 +-30 +31 +-29 +31 +-28 +32 +-27 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-27 +33 +-27 +32 +-29 +31 +-29 +31 +-30 +30 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +32 +-28 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +32 +-29 +31 +-29 +31 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +33 +-27 +33 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +-27 +33 +-26 +33 +-28 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +30 +-28 +32 +-28 +32 +-28 +30 +-30 +30 +-31 +31 +-29 +30 +-30 +31 +-29 +31 +-28 +32 +-28 +31 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-28 +31 +-28 +32 +-29 +31 +-30 +30 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +33 +-28 +32 +-28 +31 +-29 +31 +-29 +31 +-28 +31 +-28 +32 +-27 +33 +-26 +33 +-28 +32 +-28 +32 +-28 +31 +-29 +31 +-29 +31 +-28 +32 +-26 +34 +-26 +33 +-28 +31 +-29 +32 +-29 +31 +-28 +32 +-29 +31 +-29 +31 +-26 +32 +-27 +33 +-29 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-28 +32 +-28 +32 +-29 +30 +-30 +31 +-30 +30 +-29 +30 +-30 +31 +-30 +31 +72 +-4 +42 +-26 +28 +-34 +25 +-36 +25 +-36 +25 +-35 +26 +-34 +27 +-33 +28 +-30 +30 +-31 +29 +-32 +29 +-32 +28 +-32 +29 +-32 +30 +-31 +30 +-30 +31 +-28 +32 +-29 +30 +-30 +31 +-31 +30 +-30 +30 +-30 +31 +-30 +31 +-29 +32 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-29 +-106 +-43 +-96 +-3 +-58 +23 +-39 +33 +-32 +37 +-27 +40 +-21 +43 +-19 +44 +-15 +47 +-13 +47 +-13 +46 +-14 +45 +-16 +43 +-18 +40 +-21 +39 +-22 +37 +78 +1 +46 +-22 +33 +-30 +29 +-33 +28 +-32 +28 +-32 +29 +-31 +30 +-31 +30 +-28 +32 +-29 +31 +-29 +31 +-30 +30 +-30 +31 +-30 +30 +-30 +31 +-29 +32 +-27 +33 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-27 +33 +-29 +31 +-29 +31 +-29 +32 +-29 +32 +-29 +32 +-29 +31 +-29 +-106 +-44 +-96 +-3 +-58 +23 +-39 +33 +-32 +37 +-27 +40 +-21 +43 +-19 +44 +-15 +47 +-13 +46 +-13 +46 +-14 +45 +-16 +42 +-19 +40 +-21 +38 +-23 +37 +78 +1 +46 +-22 +33 +-30 +29 +-33 +28 +-32 +29 +-32 +29 +-32 +29 +-31 +30 +-28 +32 +-29 +30 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-30 +32 +-26 +33 +-28 +32 +-29 +32 +-29 +31 +-30 +31 +-29 +32 +-29 +32 +-29 +32 +-26 +34 +-28 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +32 +-29 +-106 +-42 +-96 +-2 +-57 +23 +-39 +34 +-32 +37 +-26 +40 +-21 +44 +-18 +45 +-14 +47 +-13 +47 +-13 +47 +-13 +45 +-16 +43 +-18 +41 +-20 +38 +-23 +37 +-22 +38 +-22 +36 +-25 +35 +-26 +34 +-27 +33 +-27 +33 +-27 +33 +-28 +33 +-26 +34 +-25 +34 +-27 +32 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +73 +-3 +42 +-26 +29 +-33 +25 +-36 +25 +-35 +26 +-34 +27 +-34 +26 +-33 +28 +-30 +30 +-31 +29 +-32 +29 +-32 +29 +-32 +28 +-31 +29 +-31 +30 +-30 +30 +-27 +33 +-29 +31 +-30 +30 +-30 +30 +-30 +31 +-31 +30 +-30 +30 +-30 +31 +-28 +33 +-29 +31 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +-106 +-43 +-96 +-3 +-57 +23 +-39 +34 +-32 +37 +-27 +40 +-21 +44 +-19 +45 +-14 +47 +-12 +48 +-12 +46 +-14 +44 +-16 +43 +-18 +41 +-20 +38 +-23 +37 +78 +2 +47 +-22 +33 +-30 +28 +-32 +28 +-33 +28 +-32 +28 +-32 +29 +-31 +30 +-29 +31 +-30 +29 +-31 +30 +-31 +30 +-31 +30 +-31 +30 +-31 +30 +-30 +-108 +-44 +-98 +-4 +-58 +22 +-40 +33 +-33 +36 +-27 +39 +-21 +44 +-19 +44 +-14 +47 +-13 +47 +-13 +47 +-13 +45 +-15 +43 +-18 +41 +-20 +39 +-22 +37 +-21 +38 +-22 +37 +-24 +35 +-26 +34 +-27 +33 +-27 +32 +-27 +33 +-28 +32 +-26 +33 +-26 +34 +-27 +33 +-28 +32 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +73 +-3 +42 +-25 +30 +-33 +26 +-35 +26 +-34 +27 +-34 +27 +-33 +28 +-32 +29 +-30 +30 +-31 +29 +-31 +30 +-32 +29 +-31 +29 +-31 +30 +-31 +30 +-30 +31 +-27 +33 +-29 +32 +-29 +31 +-30 +31 +-29 +32 +-29 +31 +-29 +31 +-29 +30 +-27 +34 +-28 +31 +-29 +31 +-30 +30 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-27 +33 +-28 +32 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-29 +32 +-27 +33 +-27 +32 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-26 +34 +-28 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-27 +33 +-28 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +-107 +-43 +-96 +-4 +-57 +23 +-39 +34 +-32 +37 +-27 +40 +-22 +44 +-20 +44 +-15 +47 +-12 +47 +-13 +46 +-14 +44 +-16 +42 +-18 +41 +-21 +38 +-23 +37 +-22 +37 +-22 +36 +-25 +34 +-26 +34 +-27 +33 +-27 +32 +-28 +33 +-28 +32 +-26 +34 +-26 +33 +-28 +32 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +33 +-26 +33 +-29 +31 +-29 +31 +-29 +30 +-30 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +32 +-27 +32 +-29 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +33 +-27 +33 +-28 +32 +-28 +32 +-28 +32 +-28 +32 +-28 +32 +-28 +33 +-26 +33 +-27 +33 +-27 +33 +-28 +32 +-28 +32 +-28 +32 +-29 +32 +-28 +32 +-27 +33 +-27 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-29 +32 +-27 +32 +-27 +32 +-30 +31 +-29 +31 +-29 +30 +-29 +31 +-29 +31 +-29 +30 +-28 +32 +-27 +32 +-29 +30 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +33 +-26 +33 +-28 +32 +-29 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-26 +33 +-26 +33 +-28 +31 +-29 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-28 +31 +-29 +31 +-29 +30 +-29 +31 +-29 +32 +-28 +31 +-27 +33 +-27 +32 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-28 +31 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-29 +31 +-27 +33 +-27 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +30 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +30 +-27 +32 +-27 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-28 +31 +-27 +32 +-29 +31 +-30 +30 +-30 +31 +-29 +32 +-29 +31 +-29 +31 +-27 +33 +-27 +31 +-29 +31 +-29 +30 +-30 +31 +-29 +31 +-30 +31 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +30 +-29 +31 +-28 +33 +-26 +32 +-28 +31 +-29 +31 +-29 +30 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +33 +-26 +32 +-29 +31 +-29 +32 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-27 +32 +-27 +33 +-28 +32 +-29 +30 +-30 +31 +-29 +32 +-28 +32 +-29 +32 +-27 +33 +-27 +32 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +30 +-29 +31 +-29 +31 +-27 +32 +-26 +32 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +30 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +30 +-30 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +30 +-29 +31 +-30 +31 +-29 +31 +-27 +33 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +30 +-30 +31 +-30 +31 +-28 +32 +-27 +32 +-29 +30 +-30 +31 +-30 +30 +-29 +31 +-30 +31 +-30 +30 +-28 +32 +-27 +32 +-28 +31 +-29 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +30 +-28 +31 +-27 +32 +-29 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +30 +-30 +30 +-28 +31 +-28 +32 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-30 +32 +-26 +33 +-26 +33 +-29 +32 +-29 +31 +-29 +31 +-29 +32 +-28 +32 +-28 +32 +-27 +33 +-26 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-26 +33 +-28 +32 +-29 +31 +-29 +30 +-30 +31 +-29 +31 +-28 +32 +-27 +32 +-27 +32 +-28 +31 +-29 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +33 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +30 +-30 +30 +-30 +30 +-29 +30 +-30 +31 +-30 +30 +-28 +31 +-27 +32 +-29 +30 +-30 +29 +-31 +29 +-31 +31 +-29 +31 +-30 +30 +-28 +31 +-28 +32 +-29 +30 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-27 +32 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +33 +-28 +31 +-29 +32 +-29 +32 +-28 +32 +-28 +32 +-28 +32 +-27 +33 +-26 +34 +-28 +32 +-29 +31 +-28 +32 +-29 +32 +-28 +32 +-28 +32 +-27 +33 +-26 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +30 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +30 +-29 +31 +-27 +33 +-27 +32 +-29 +30 +-30 +31 +-30 +31 +-29 +30 +-29 +31 +-30 +31 +-27 +32 +-27 +33 +-29 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +30 +-30 +30 +-28 +32 +-27 +32 +-29 +30 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +30 +-30 +31 +-30 +30 +-29 +31 +-29 +31 +-28 +33 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +33 +-29 +30 +-29 +31 +-30 +30 +-29 +31 +-29 +31 +-29 +31 +72 +-3 +42 +-26 +29 +-34 +25 +-35 +25 +-35 +27 +-33 +27 +-34 +27 +-33 +29 +-30 +30 +-31 +29 +-32 +29 +-31 +29 +-31 +30 +-31 +29 +-31 +30 +-30 +-107 +-44 +-97 +-3 +-58 +23 +-39 +32 +-33 +37 +-27 +40 +-22 +43 +-19 +44 +-14 +47 +-12 +48 +-13 +45 +-14 +45 +-16 +42 +-18 +40 +-20 +39 +-22 +37 +-21 +38 +-21 +37 +-25 +34 +-27 +33 +-27 +33 +-27 +32 +-28 +33 +-27 +33 +-26 +34 +-25 +34 +-27 +32 +-28 +31 +-29 +32 +-28 +31 +-29 +31 +-29 +32 +-26 +33 +-26 +32 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-28 +31 +-27 +33 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-28 +32 +-27 +33 +-28 +31 +-29 +31 +-30 +30 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-30 +32 +-28 +31 +-29 +31 +-29 +31 +-27 +33 +-26 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +-28 +31 +-27 +33 +-27 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +30 +-29 +32 +-29 +31 +-27 +32 +-26 +33 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +33 +-28 +31 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-27 +32 +-27 +33 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-27 +33 +-26 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-28 +31 +-30 +31 +-30 +31 +-29 +30 +-30 +31 +-29 +31 +-28 +31 +-28 +32 +-29 +31 +-29 +30 +-30 +31 +-30 +30 +-30 +31 +-29 +31 +-28 +33 +-26 +32 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-29 +32 +-27 +33 +-27 +33 +-28 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-28 +32 +-28 +32 +-29 +30 +-30 +31 +-30 +30 +-29 +31 +-29 +31 +-30 +31 +-28 +31 +-28 +32 +-29 +31 +-30 +30 +-30 +30 +-30 +31 +-29 +30 +-29 +31 +-28 +33 +-26 +32 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-29 +32 +-27 +33 +-26 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +31 +-27 +33 +-27 +33 +-28 +31 +-30 +31 +-29 +32 +-28 +31 +-29 +32 +-28 +32 +-27 +32 +-27 +33 +-29 +31 +-29 +31 +-30 +30 +-30 +30 +-29 +31 +-29 +31 +-27 +33 +-27 +32 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +32 +-29 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +73 +-3 +42 +-26 +29 +-34 +26 +-35 +25 +-35 +26 +-35 +27 +-33 +27 +-33 +28 +-30 +31 +-31 +29 +-31 +30 +-31 +29 +-32 +29 +-31 +30 +-31 +30 +-30 +30 +-28 +31 +-30 +31 +-30 +31 +-31 +30 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-27 +33 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +30 +-30 +31 +-29 +-107 +-43 +-96 +-3 +-58 +22 +-40 +32 +-33 +37 +-28 +40 +-21 +43 +-19 +44 +-16 +46 +-13 +47 +-13 +46 +-14 +44 +-16 +42 +-19 +40 +-21 +38 +-23 +37 +77 +1 +46 +-22 +33 +-31 +29 +-33 +28 +-33 +29 +-32 +29 +-32 +29 +-31 +30 +-28 +32 +-30 +30 +-30 +30 +-30 +30 +-30 +31 +-29 +31 +-30 +31 +-30 +31 +-27 +33 +-28 +32 +-29 +32 +-30 +30 +-30 +31 +-30 +32 +-29 +32 +-28 +32 +-27 +34 +-28 +32 +-28 +31 +-30 +32 +-29 +31 +-29 +32 +-28 +32 +-28 +-106 +-42 +-95 +-2 +-57 +23 +-39 +34 +-32 +38 +-26 +41 +-20 +45 +-18 +45 +-14 +47 +-12 +48 +-12 +47 +-13 +45 +-15 +43 +-18 +41 +-20 +39 +-22 +37 +79 +2 +46 +-22 +33 +-30 +29 +-32 +28 +-32 +29 +-32 +29 +-31 +29 +-31 +30 +-28 +32 +-29 +30 +-30 +30 +-31 +30 +-30 +31 +-30 +30 +-30 +31 +-29 +31 +-26 +33 +-28 +32 +-29 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-28 +32 +-29 +31 +-30 +31 +-31 +30 +-30 +30 +-30 +31 +-30 +31 +-30 +-107 +-44 +-97 +-4 +-58 +23 +-40 +33 +-32 +37 +-28 +39 +-22 +44 +-19 +44 +-15 +47 +-13 +47 +-13 +46 +-14 +44 +-16 +43 +-18 +41 +-20 +38 +-23 +37 +-23 +37 +-23 +36 +-25 +34 +-27 +34 +-27 +33 +-27 +34 +-27 +33 +-27 +33 +-26 +34 +-26 +34 +-28 +32 +-28 +32 +-29 +32 +-29 +32 +-29 +32 +-28 +32 +73 +-2 +43 +-25 +30 +-33 +26 +-34 +26 +-34 +27 +-33 +27 +-33 +29 +-32 +29 +-29 +30 +-30 +30 +-31 +30 +-31 +29 +-31 +30 +-31 +30 +-31 +30 +-30 +31 +-26 +33 +-28 +31 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +32 +-26 +33 +-28 +31 +-29 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +-106 +-43 +-96 +-3 +-57 +23 +-39 +33 +-32 +37 +-27 +40 +-21 +43 +-19 +45 +-15 +47 +-12 +47 +-13 +46 +-14 +45 +-15 +43 +-18 +41 +-20 +39 +-22 +37 +78 +1 +47 +-21 +32 +-31 +29 +-33 +27 +-33 +28 +-33 +28 +-32 +29 +-31 +29 +-29 +31 +-31 +30 +-31 +29 +-32 +29 +-32 +29 +-31 +30 +-31 +30 +-30 +-108 +-45 +-98 +-4 +-59 +21 +-41 +32 +-33 +36 +-28 +39 +-22 +43 +-20 +43 +-16 +46 +-13 +46 +-13 +46 +-14 +45 +-15 +42 +-18 +41 +-21 +39 +-22 +37 +-22 +38 +-22 +37 +-25 +35 +-25 +34 +-27 +33 +-27 +33 +-27 +34 +-26 +34 +-25 +34 +-25 +34 +-27 +33 +-28 +33 +-28 +31 +-29 +32 +-28 +32 +-27 +32 +74 +-2 +43 +-25 +29 +-33 +27 +-34 +26 +-34 +27 +-34 +27 +-33 +28 +-32 +29 +-30 +30 +-31 +29 +-32 +29 +-32 +29 +-32 +30 +-31 +29 +-31 +30 +-30 +30 +-27 +33 +-29 +31 +-30 +30 +-31 +30 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-28 +33 +-29 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-29 +31 +-27 +33 +-28 +32 +-29 +31 +-30 +30 +-30 +31 +-29 +31 +-29 +31 +-29 +32 +-26 +34 +-27 +32 +-28 +32 +-29 +31 +-30 +31 +-29 +32 +-29 +31 +-29 +32 +-25 +35 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +32 +-29 +31 +-29 +31 +-27 +33 +-28 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +-106 +-44 +-96 +-3 +-58 +23 +-39 +33 +-32 +37 +-27 +39 +-22 +43 +-20 +44 +-15 +47 +-13 +48 +-13 +47 +-13 +44 +-16 +43 +-17 +41 +-20 +39 +-22 +37 +-22 +38 +-22 +37 +-24 +35 +-25 +34 +-27 +33 +-27 +34 +-26 +34 +-27 +33 +-26 +34 +-25 +34 +-27 +33 +-27 +32 +-28 +32 +-29 +32 +-29 +32 +-28 +31 +-27 +33 +-26 +33 +-28 +31 +-29 +32 +-29 +31 +-29 +32 +-28 +32 +-29 +31 +-27 +33 +-26 +33 +-28 +32 +-28 +32 +-29 +31 +-29 +31 +-29 +32 +-28 +32 +-26 +34 +-27 +33 +-28 +31 +-29 +31 +-29 +31 +-28 +31 +-29 +31 +-29 +31 +-27 +33 +-26 +33 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +31 +-29 +31 +-29 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-27 +32 +-27 +32 +-29 +30 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-26 +32 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-29 +31 +-27 +33 +-26 +32 +-29 +31 +-30 +31 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +33 +-27 +33 +-28 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +30 +-30 +30 +-29 +31 +-29 +31 +-30 +30 +-28 +32 +-28 +32 +-29 +30 +-30 +30 +-30 +30 +-30 +30 +-30 +31 +-29 +31 +-28 +31 +-27 +32 +-29 +30 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +30 +-29 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-26 +33 +-28 +32 +-29 +30 +-30 +31 +-30 +31 +-29 +30 +-29 +31 +-28 +32 +-27 +32 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +30 +-30 +30 +-30 +31 +-29 +30 +-29 +31 +-27 +33 +-26 +32 +-28 +31 +-30 +31 +-29 +30 +-29 +32 +-29 +32 +-28 +31 +-26 +33 +-27 +33 +-28 +32 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-26 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-26 +33 +-26 +33 +-28 +31 +-29 +31 +-30 +31 +-30 +30 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +30 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-26 +33 +-28 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-28 +31 +-27 +33 +-28 +32 +-29 +31 +-29 +30 +-30 +31 +-29 +31 +-29 +31 +-28 +31 +-28 +32 +-29 +30 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-26 +34 +-26 +33 +-28 +32 +-29 +31 +-29 +30 +-29 +31 +-30 +31 +-29 +31 +-28 +33 +-26 +33 +-29 +31 +-29 +30 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +33 +-28 +31 +-29 +30 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-28 +32 +-27 +31 +-30 +31 +-30 +31 +-29 +30 +-29 +31 +-30 +31 +-29 +31 +-28 +31 +-27 +32 +-29 +31 +-29 +31 +-30 +30 +-30 +31 +-29 +30 +-29 +31 +-27 +33 +-26 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-28 +31 +-29 +31 +-27 +33 +-26 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +30 +-30 +30 +-30 +31 +-27 +32 +-27 +32 +-29 +31 +-30 +30 +-30 +30 +-29 +31 +-29 +31 +-29 +30 +-28 +32 +-27 +32 +-29 +30 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +30 +-28 +31 +-28 +31 +-30 +30 +-30 +30 +-30 +30 +-30 +30 +-30 +29 +-30 +31 +-28 +31 +-28 +31 +-30 +30 +-31 +30 +-30 +30 +-30 +31 +-30 +30 +-30 +30 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +32 +-27 +33 +-27 +32 +-28 +32 +-29 +31 +-29 +30 +-29 +32 +-29 +32 +-29 +31 +-27 +32 +-27 +33 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +33 +-26 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +30 +-28 +32 +-28 +32 +-28 +31 +-29 +32 +-29 +31 +-30 +30 +-30 +31 +-30 +30 +-28 +32 +-27 +32 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-26 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-29 +32 +-27 +32 +-26 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +-28 +32 +-26 +33 +-26 +33 +-28 +31 +-28 +31 +-29 +31 +-29 +32 +-28 +32 +-29 +32 +-26 +33 +-26 +33 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-28 +31 +-27 +33 +-26 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-26 +33 +-26 +33 +-28 +32 +-29 +32 +-29 +31 +-29 +32 +-29 +32 +-28 +31 +-27 +33 +-27 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-29 +31 +-28 +31 +-28 +32 +-30 +30 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-29 +30 +-28 +32 +-28 +32 +-29 +30 +-30 +30 +-31 +29 +-30 +30 +-30 +30 +-30 +31 +72 +-4 +41 +-27 +29 +-34 +25 +-36 +24 +-36 +26 +-35 +26 +-34 +27 +-33 +28 +-30 +29 +-32 +28 +-32 +28 +-33 +28 +-32 +29 +-31 +30 +-31 +30 +-30 +-107 +-44 +-97 +-4 +-58 +23 +-39 +33 +-33 +36 +-28 +40 +-22 +44 +-19 +44 +-15 +47 +-12 +48 +-13 +46 +-13 +45 +-16 +43 +-18 +41 +-20 +39 +-22 +38 +-20 +39 +-21 +37 +-25 +35 +-27 +33 +-27 +33 +-27 +34 +-27 +33 +-28 +33 +-25 +33 +-26 +34 +-28 +32 +-28 +31 +-29 +31 +-29 +32 +-29 +31 +-29 +30 +-27 +33 +-26 +33 +-28 +31 +-29 +31 +-30 +30 +-29 +31 +-29 +31 +-30 +31 +-28 +31 +-27 +32 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-30 +30 +-30 +31 +-27 +32 +-27 +31 +-29 +31 +-29 +30 +-30 +31 +-28 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-27 +33 +-26 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-26 +33 +-28 +32 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-26 +34 +-26 +33 +-28 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-30 +30 +-29 +31 +-28 +31 +-27 +32 +-29 +31 +-30 +31 +-30 +30 +-29 +31 +-30 +31 +-30 +30 +-28 +32 +-27 +32 +-29 +31 +-30 +30 +-30 +31 +-29 +31 +-29 +30 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +30 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +30 +-29 +31 +-28 +32 +-27 +32 +-29 +30 +-30 +31 +-29 +31 +-30 +30 +-30 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +30 +-30 +30 +-30 +31 +-30 +31 +-29 +30 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-28 +32 +-27 +31 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +30 +-29 +31 +-30 +31 +-29 +31 +-27 +33 +-27 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-26 +33 +-28 +31 +-29 +32 +-28 +31 +-28 +32 +-29 +31 +-29 +32 +-26 +32 +-26 +33 +-28 +32 +-28 +31 +-29 +32 +-29 +31 +-28 +31 +-29 +32 +-27 +33 +-26 +32 +-28 +32 +-28 +31 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-27 +33 +-27 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +33 +-27 +32 +-29 +31 +-30 +30 +-30 +30 +-30 +30 +-30 +30 +-30 +30 +-28 +31 +-28 +31 +-29 +31 +-29 +31 +-30 +29 +-31 +30 +-30 +30 +-30 +30 +71 +-4 +41 +-27 +28 +-34 +25 +-35 +25 +-36 +25 +-35 +26 +-34 +27 +-33 +28 +-30 +29 +-31 +29 +-32 +29 +-32 +28 +-32 +29 +-31 +29 +-31 +30 +-30 +30 +-28 +32 +-29 +31 +-30 +30 +-31 +30 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-27 +33 +-29 +32 +-29 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-29 +-106 +-44 +-96 +-3 +-58 +23 +-39 +33 +-32 +37 +-27 +40 +-22 +43 +-20 +44 +-15 +47 +-12 +47 +-13 +45 +-14 +45 +-16 +43 +-18 +40 +-20 +38 +-23 +37 +78 +2 +47 +-21 +33 +-30 +29 +-33 +28 +-32 +29 +-32 +29 +-32 +29 +-31 +30 +-28 +31 +-30 +31 +-31 +30 +-31 +29 +-31 +30 +-31 +31 +-30 +31 +-29 +31 +-28 +32 +-29 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +30 +-29 +32 +-29 +31 +-26 +33 +-28 +31 +-29 +32 +-29 +31 +-29 +31 +-30 +32 +-29 +31 +-28 +-106 +-43 +-96 +-2 +-57 +24 +-38 +34 +-32 +37 +-27 +41 +-21 +44 +-18 +45 +-15 +47 +-12 +48 +-12 +47 +-13 +45 +-15 +43 +-17 +41 +-20 +39 +-22 +37 +78 +1 +47 +-21 +33 +-30 +29 +-33 +28 +-32 +28 +-32 +29 +-31 +29 +-31 +29 +-29 +31 +-30 +30 +-31 +29 +-31 +29 +-31 +30 +-31 +30 +-31 +30 +-30 +31 +-27 +33 +-28 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +32 +-29 +31 +-27 +34 +-28 +32 +-28 +32 +-29 +32 +-29 +32 +-29 +32 +-29 +32 +-29 +-106 +-42 +-96 diff --git a/traces/lf_t5577_keri_internalid.pm3 b/traces/lf_t5577_keri_internalid.pm3 new file mode 100644 index 000000000..83c6dca1d --- /dev/null +++ b/traces/lf_t5577_keri_internalid.pm3 @@ -0,0 +1,10000 @@ +34 +-27 +33 +-28 +31 +-29 +32 +-29 +32 +-28 +32 +-29 +31 +73 +-2 +43 +-26 +30 +-33 +26 +-34 +26 +-34 +27 +-33 +27 +-33 +28 +-32 +29 +-30 +31 +-30 +30 +-31 +30 +-32 +29 +-31 +29 +-31 +30 +-31 +30 +-30 +31 +-27 +33 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-28 +33 +-28 +31 +-29 +31 +-30 +30 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-27 +34 +-28 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +30 +-30 +32 +-27 +33 +-28 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-26 +34 +-28 +31 +-30 +30 +-31 +30 +-30 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +33 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +-107 +-44 +-96 +-3 +-57 +23 +-40 +33 +-32 +37 +-27 +40 +-21 +44 +-19 +45 +-14 +47 +-12 +47 +-13 +46 +-14 +45 +-15 +43 +-18 +40 +-21 +39 +-22 +37 +-22 +38 +-22 +37 +-24 +34 +-27 +35 +-26 +34 +-26 +33 +-27 +34 +-27 +33 +-25 +34 +-25 +34 +-27 +33 +-28 +32 +-28 +32 +-29 +32 +-28 +32 +-28 +32 +-27 +33 +-26 +33 +-28 +32 +-29 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +33 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +30 +-30 +30 +-30 +31 +-30 +30 +-30 +31 +-30 +30 +-28 +31 +-28 +32 +-30 +30 +-30 +29 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-29 +30 +-30 +31 +-29 +31 +-29 +30 +-28 +33 +-26 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-26 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-28 +32 +-28 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-26 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-29 +31 +-28 +32 +-27 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-26 +33 +-26 +33 +-28 +32 +-29 +31 +-29 +32 +-29 +32 +-29 +31 +-28 +31 +-27 +33 +-26 +33 +-28 +32 +-29 +32 +-29 +31 +-28 +32 +-28 +32 +-29 +31 +-27 +33 +-26 +33 +-29 +31 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +33 +-27 +32 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-26 +33 +-28 +31 +-29 +30 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-26 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +32 +-29 +30 +-30 +30 +-30 +30 +-30 +30 +-30 +30 +-30 +30 +-28 +31 +-28 +32 +-29 +30 +-30 +30 +-31 +30 +-30 +30 +-30 +29 +-30 +30 +-28 +31 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-27 +33 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +30 +-29 +31 +-27 +33 +-26 +32 +-29 +30 +-30 +31 +-29 +31 +-28 +31 +-30 +31 +-29 +31 +-27 +33 +-26 +33 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +33 +-27 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +30 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-30 +30 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-26 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-26 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +33 +-29 +31 +-28 +31 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-28 +33 +-27 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-26 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +30 +-29 +31 +-29 +32 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +33 +-29 +31 +-30 +30 +-30 +31 +-30 +30 +-30 +31 +-29 +31 +-28 +32 +-27 +32 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-30 +31 +-27 +32 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-30 +30 +-29 +30 +-28 +32 +-28 +31 +-30 +30 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +30 +-29 +30 +-30 +30 +-30 +30 +-30 +30 +-28 +32 +-28 +32 +-29 +30 +-30 +30 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +-29 +30 +-28 +32 +-27 +33 +-28 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-26 +33 +-26 +33 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +30 +-29 +31 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-29 +30 +-28 +32 +-27 +32 +-29 +30 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-28 +31 +-28 +31 +-30 +31 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +30 +-28 +32 +-28 +32 +-28 +31 +-29 +31 +-29 +31 +-28 +31 +-29 +32 +-29 +31 +-27 +33 +-26 +33 +-28 +32 +-28 +31 +-29 +32 +-29 +32 +-28 +32 +-28 +32 +-26 +34 +-26 +33 +-28 +31 +-29 +32 +-28 +32 +-28 +32 +-28 +32 +-28 +32 +-26 +33 +-27 +33 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +32 +-26 +33 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +72 +-3 +42 +-25 +30 +-33 +26 +-35 +25 +-35 +26 +-34 +27 +-33 +28 +-33 +28 +-30 +30 +-32 +29 +-32 +29 +-31 +29 +-31 +30 +-31 +30 +-31 +30 +-30 +-107 +-45 +-97 +-5 +-59 +23 +-40 +33 +-33 +36 +-28 +40 +-22 +43 +-19 +44 +-15 +47 +-12 +47 +-12 +45 +-14 +45 +-16 +43 +-18 +40 +-21 +38 +-23 +37 +-21 +38 +-21 +37 +-25 +34 +-28 +32 +-28 +32 +-28 +32 +-28 +32 +-28 +32 +-26 +34 +-26 +34 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +33 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-28 +31 +-29 +31 +-29 +31 +-29 +30 +-30 +30 +-30 +31 +-28 +31 +-27 +33 +-29 +31 +-29 +30 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +32 +-29 +31 +-28 +31 +-27 +33 +-27 +33 +-28 +31 +-29 +32 +-29 +31 +-29 +31 +-28 +32 +-29 +31 +-27 +33 +-26 +33 +-28 +32 +-29 +32 +-29 +32 +-29 +32 +-29 +32 +-28 +31 +-26 +33 +-26 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +33 +-26 +32 +-28 +31 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-26 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-26 +32 +-28 +31 +-29 +31 +-29 +30 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +32 +-29 +31 +-29 +30 +-30 +30 +-30 +30 +-29 +30 +-30 +30 +-29 +32 +-27 +31 +-29 +31 +-29 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +30 +-28 +32 +-28 +32 +-30 +30 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +32 +-29 +31 +-29 +31 +-27 +33 +-26 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +32 +-29 +32 +-29 +31 +-27 +33 +-27 +33 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +32 +-26 +33 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-28 +32 +-28 +32 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +30 +-29 +32 +-27 +32 +-27 +33 +-29 +31 +-30 +30 +-31 +31 +-30 +31 +-29 +30 +-30 +30 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-27 +32 +-27 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +33 +-27 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +33 +-27 +31 +-29 +32 +-29 +31 +-28 +32 +-28 +32 +-29 +32 +-27 +33 +-26 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +32 +-27 +32 +-30 +31 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-27 +33 +-26 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-27 +32 +-27 +32 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-30 +30 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-30 +30 +-30 +31 +-30 +30 +-30 +31 +72 +-4 +41 +-26 +29 +-34 +25 +-35 +25 +-35 +26 +-35 +26 +-34 +27 +-33 +28 +-30 +30 +-31 +28 +-32 +28 +-33 +28 +-32 +29 +-31 +29 +-31 +30 +-31 +30 +-28 +32 +-30 +30 +-31 +30 +-31 +30 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-28 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +-106 +-43 +-96 +-2 +-58 +23 +-39 +34 +-31 +38 +-27 +41 +-21 +44 +-18 +45 +-14 +48 +-11 +48 +-12 +47 +-13 +46 +-15 +44 +-17 +42 +-19 +39 +-22 +38 +-21 +38 +-21 +38 +-24 +35 +-25 +34 +-26 +35 +-26 +35 +-26 +33 +-26 +34 +-25 +34 +-25 +35 +-26 +33 +-27 +32 +-28 +32 +-28 +32 +-28 +32 +-28 +32 +-27 +33 +-27 +32 +-28 +32 +-29 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-28 +32 +-28 +32 +-29 +30 +-30 +31 +-30 +30 +-29 +30 +-30 +30 +-30 +30 +-28 +32 +-28 +32 +-30 +30 +-30 +30 +-30 +30 +-30 +31 +-30 +30 +-30 +30 +-29 +31 +-28 +31 +-30 +30 +-30 +30 +-31 +30 +-30 +30 +-30 +30 +-30 +31 +-28 +31 +-27 +32 +-29 +31 +-30 +30 +-30 +30 +-30 +30 +-30 +31 +-29 +31 +-27 +32 +-28 +32 +-29 +31 +-29 +31 +-30 +30 +-29 +30 +-30 +31 +-29 +31 +-27 +32 +-27 +32 +-28 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +32 +-27 +33 +-26 +33 +-28 +32 +-28 +32 +-29 +31 +-28 +31 +-28 +32 +-29 +32 +74 +-2 +43 +-24 +30 +-33 +26 +-35 +26 +-34 +27 +-34 +27 +-33 +28 +-32 +28 +-30 +31 +-31 +30 +-31 +29 +-32 +30 +-31 +30 +-31 +30 +-30 +30 +-30 +31 +-28 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +30 +-31 +31 +-30 +30 +-30 +30 +-28 +32 +-29 +30 +-30 +30 +-30 +30 +-30 +32 +-30 +30 +-30 +31 +-30 +31 +-27 +33 +-28 +31 +-30 +31 +-31 +30 +-30 +30 +-30 +31 +-30 +32 +-29 +31 +-27 +33 +-29 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +-106 +-43 +-96 +-3 +-58 +23 +-39 +33 +-32 +37 +-27 +40 +-21 +44 +-19 +45 +-14 +48 +-12 +47 +-13 +47 +-14 +45 +-15 +43 +-17 +41 +-20 +39 +-22 +37 +-21 +38 +-22 +37 +-24 +35 +-26 +34 +-27 +34 +-27 +33 +-27 +33 +-27 +33 +-26 +34 +-25 +34 +-27 +33 +-28 +33 +-28 +32 +-28 +32 +-28 +31 +-28 +31 +73 +-3 +42 +-25 +30 +-33 +26 +-34 +25 +-34 +27 +-34 +27 +-33 +28 +-32 +28 +-30 +30 +-31 +29 +-31 +29 +-32 +29 +-31 +30 +-31 +30 +-30 +30 +-30 +31 +-28 +33 +-28 +31 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-29 +32 +-29 +31 +-27 +33 +-28 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +32 +-27 +33 +-28 +31 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-27 +33 +-28 +32 +-29 +31 +-30 +30 +-30 +31 +-31 +29 +-31 +30 +-30 +31 +-26 +33 +-29 +31 +-30 +30 +-31 +29 +-31 +30 +-31 +30 +-31 +30 +-30 +31 +-28 +32 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +-107 +-43 +-96 +-3 +-57 +22 +-39 +34 +-32 +37 +-26 +41 +-21 +44 +-19 +45 +-14 +48 +-12 +48 +-12 +47 +-13 +46 +-14 +44 +-17 +42 +-19 +40 +-21 +38 +-21 +39 +-21 +38 +-24 +35 +-26 +34 +-26 +34 +-26 +34 +-26 +34 +-26 +34 +-25 +35 +-24 +34 +-27 +34 +-27 +33 +-28 +32 +-28 +32 +-28 +32 +-28 +32 +-26 +33 +-26 +33 +-28 +32 +-28 +31 +-29 +32 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +32 +-28 +31 +-29 +31 +-29 +31 +-30 +30 +-30 +31 +-29 +31 +-27 +33 +-27 +33 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +33 +-27 +32 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-30 +30 +-28 +32 +-27 +32 +-29 +31 +-30 +30 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-28 +32 +-27 +33 +-28 +31 +-29 +31 +-30 +30 +-29 +30 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +30 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +32 +-27 +33 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +33 +-26 +33 +-28 +32 +-29 +31 +-30 +31 +-29 +32 +-29 +31 +-29 +31 +-27 +33 +-27 +33 +-28 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +30 +-29 +32 +-27 +32 +-27 +32 +-28 +31 +-30 +31 +-29 +30 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-26 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +33 +-29 +31 +-29 +30 +-30 +31 +-29 +31 +-29 +30 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +30 +-30 +31 +-29 +31 +-30 +31 +-29 +31 +-28 +32 +-27 +33 +-29 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-28 +32 +-26 +32 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-29 +31 +-28 +31 +-27 +33 +-27 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +33 +-26 +33 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +30 +-28 +33 +-27 +33 +-28 +31 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-27 +33 +-27 +33 +-29 +30 +-30 +31 +-30 +30 +-29 +31 +-29 +31 +-30 +31 +-27 +32 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-30 +30 +-29 +31 +-30 +30 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +30 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-26 +33 +-26 +33 +-28 +32 +-29 +31 +-29 +31 +-28 +32 +-28 +31 +-28 +32 +-27 +33 +-26 +33 +-28 +31 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-26 +32 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-26 +32 +-29 +31 +-29 +31 +-29 +31 +-30 +30 +-29 +31 +-30 +31 +-28 +32 +-28 +32 +-28 +31 +-29 +31 +-29 +30 +-29 +30 +-30 +31 +-29 +31 +-27 +32 +-27 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +30 +-29 +32 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-27 +32 +-27 +32 +-29 +30 +-30 +30 +-30 +30 +-30 +30 +-30 +30 +-30 +31 +-28 +32 +-27 +31 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +30 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +30 +-30 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +30 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-28 +31 +-28 +33 +-28 +32 +-28 +32 +-29 +31 +-30 +31 +-29 +32 +-29 +31 +-27 +32 +-27 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +33 +-26 +33 +-28 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +30 +-28 +33 +-27 +32 +-29 +31 +-30 +30 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-27 +32 +-27 +32 +-29 +31 +-30 +30 +-30 +31 +-30 +30 +-30 +31 +-29 +31 +-28 +33 +-26 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-27 +32 +-27 +33 +-29 +31 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +33 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-28 +31 +-29 +31 +-30 +31 +-29 +30 +-29 +31 +-30 +31 +-28 +32 +-27 +31 +-29 +31 +-30 +31 +-29 +30 +-30 +31 +-29 +31 +-29 +30 +-27 +32 +-28 +32 +-29 +30 +-30 +30 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-28 +32 +-27 +31 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-27 +33 +-27 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-26 +33 +-26 +33 +-28 +31 +-29 +31 +-29 +32 +-29 +32 +-29 +31 +-29 +31 +73 +-3 +42 +-25 +30 +-33 +26 +-34 +26 +-34 +27 +-34 +27 +-33 +28 +-32 +29 +-29 +31 +-30 +30 +-31 +30 +-31 +29 +-31 +30 +-31 +30 +-30 +31 +-29 +-107 +-43 +-96 +-3 +-57 +23 +-39 +34 +-32 +37 +-27 +39 +-21 +44 +-18 +45 +-14 +47 +-12 +47 +-13 +46 +-14 +44 +-16 +43 +-18 +41 +-20 +39 +-22 +37 +-20 +39 +-21 +38 +-24 +35 +-26 +34 +-26 +34 +-26 +34 +-27 +33 +-27 +33 +-25 +34 +-25 +34 +-27 +33 +-28 +32 +-29 +32 +-29 +32 +-29 +32 +-28 +32 +-27 +33 +-26 +32 +-28 +32 +-29 +32 +-28 +31 +-29 +31 +-29 +32 +-28 +31 +-27 +32 +-27 +33 +-28 +31 +-29 +31 +-30 +30 +-29 +31 +-29 +31 +-30 +30 +-28 +32 +-27 +32 +-29 +31 +-30 +30 +-30 +30 +-30 +30 +-30 +30 +-30 +30 +-28 +31 +-28 +32 +-29 +30 +-30 +30 +-31 +31 +-30 +29 +-30 +31 +-30 +31 +-28 +32 +-28 +31 +-30 +30 +-30 +30 +-30 +30 +-30 +30 +-30 +30 +-30 +30 +-28 +32 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +33 +-26 +33 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-28 +32 +-27 +33 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +33 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +30 +-30 +30 +-30 +30 +-30 +31 +-29 +30 +-28 +32 +-28 +32 +-29 +30 +-30 +30 +-31 +30 +-30 +30 +-30 +30 +-30 +30 +-28 +32 +-27 +32 +-29 +31 +-30 +30 +-30 +30 +-29 +31 +-29 +31 +-30 +31 +-27 +31 +-29 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +30 +-29 +31 +-30 +31 +-27 +31 +-28 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-30 +30 +-30 +31 +-27 +32 +-27 +32 +-29 +30 +-30 +30 +-30 +30 +-30 +30 +-30 +30 +-29 +31 +-29 +31 +-28 +31 +-29 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-26 +33 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-28 +31 +-27 +34 +-26 +33 +-28 +32 +-28 +31 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-27 +32 +-27 +33 +-28 +31 +-29 +31 +-29 +30 +-29 +31 +-30 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +30 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-28 +32 +-29 +31 +-27 +33 +-26 +33 +-28 +32 +-28 +31 +-29 +31 +-29 +32 +-29 +31 +-29 +32 +-27 +33 +-27 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-26 +33 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +33 +-26 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +33 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-27 +33 +-27 +32 +-29 +30 +-30 +30 +-30 +30 +-30 +30 +-30 +31 +-29 +31 +-28 +31 +-28 +32 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-30 +30 +-30 +30 +72 +-4 +42 +-26 +29 +-34 +25 +-36 +25 +-35 +26 +-34 +26 +-34 +27 +-33 +27 +-31 +30 +-31 +28 +-32 +29 +-32 +29 +-31 +29 +-31 +30 +-31 +30 +-30 +30 +-27 +32 +-29 +31 +-30 +30 +-31 +30 +-30 +31 +-30 +31 +-30 +31 +-29 +32 +-27 +33 +-28 +32 +-29 +32 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-29 +-106 +-43 +-96 +-3 +-58 +23 +-40 +33 +-32 +36 +-28 +40 +-22 +43 +-20 +44 +-15 +47 +-13 +47 +-13 +46 +-14 +44 +-16 +43 +-18 +40 +-22 +37 +-23 +37 +-23 +37 +-23 +36 +-26 +34 +-27 +33 +-27 +33 +-27 +33 +-28 +33 +-27 +32 +-26 +34 +-25 +34 +-27 +32 +-28 +32 +-28 +32 +-29 +31 +-29 +31 +-29 +32 +-27 +33 +-26 +33 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-28 +32 +-27 +33 +-26 +33 +-28 +32 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +30 +-30 +31 +-29 +30 +-30 +31 +-29 +31 +-27 +32 +-27 +33 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-26 +32 +-29 +31 +-29 +31 +-29 +31 +-28 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +33 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-26 +33 +-28 +32 +-29 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +74 +-2 +43 +-25 +30 +-33 +26 +-34 +26 +-34 +27 +-34 +27 +-33 +28 +-32 +29 +-30 +30 +-31 +29 +-31 +30 +-31 +30 +-31 +29 +-31 +30 +-31 +30 +-30 +31 +-28 +32 +-29 +31 +-30 +30 +-31 +30 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-28 +32 +-29 +31 +-30 +31 +-31 +30 +-31 +30 +-30 +31 +-30 +31 +-29 +31 +-27 +33 +-29 +32 +-29 +30 +-30 +30 +-30 +31 +-29 +31 +-30 +31 +-30 +32 +-27 +33 +-28 +32 +-29 +31 +-30 +32 +-29 +32 +-29 +31 +-29 +31 +-29 +-106 +-43 +-96 +-3 +-57 +23 +-39 +34 +-32 +37 +-26 +40 +-21 +44 +-19 +45 +-14 +47 +-12 +48 +-12 +47 +-13 +45 +-15 +44 +-17 +41 +-20 +39 +-22 +38 +-21 +38 +-22 +37 +-25 +35 +-26 +34 +-26 +33 +-27 +33 +-27 +34 +-27 +33 +-26 +33 +-25 +34 +-27 +33 +-28 +32 +-28 +32 +-28 +32 +-29 +31 +-28 +32 +73 +-3 +43 +-25 +30 +-33 +26 +-35 +26 +-34 +26 +-34 +27 +-33 +28 +-33 +28 +-30 +30 +-31 +29 +-32 +29 +-32 +29 +-31 +29 +-31 +30 +-30 +30 +-30 +30 +-28 +32 +-30 +30 +-30 +30 +-31 +30 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-27 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +30 +-30 +30 +-30 +31 +-29 +31 +-27 +32 +-29 +31 +-29 +31 +-30 +30 +-30 +31 +-30 +30 +-30 +31 +-29 +32 +-26 +33 +-27 +32 +-29 +32 +-29 +31 +-30 +32 +-29 +32 +-28 +32 +-28 +32 +-25 +34 +-27 +32 +-28 +32 +-29 +31 +-29 +32 +-28 +32 +-29 +32 +-28 +33 +-26 +34 +-28 +32 +-29 +32 +-29 +31 +-29 +32 +-29 +32 +-29 +32 +-28 +-106 +-42 +-95 +-2 +-56 +24 +-39 +34 +-31 +38 +-26 +41 +-21 +44 +-18 +45 +-14 +47 +-12 +48 +-12 +47 +-13 +45 +-15 +43 +-18 +41 +-20 +38 +-22 +38 +-22 +37 +-23 +36 +-25 +35 +-26 +34 +-27 +33 +-26 +33 +-27 +33 +-27 +33 +-25 +34 +-25 +34 +-28 +32 +-28 +32 +-28 +32 +-28 +32 +-28 +32 +-28 +32 +-26 +33 +-26 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +32 +-29 +31 +-28 +32 +-27 +33 +-28 +31 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-30 +30 +-27 +33 +-27 +32 +-29 +31 +-29 +30 +-31 +30 +-30 +30 +-30 +30 +-30 +30 +-29 +31 +-28 +31 +-30 +30 +-31 +30 +-30 +30 +-30 +31 +-30 +30 +-30 +30 +-28 +31 +-28 +32 +-29 +30 +-30 +30 +-30 +30 +-30 +30 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +30 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +30 +-29 +32 +-27 +33 +-27 +33 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +-28 +32 +-27 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-26 +32 +-28 +31 +-30 +31 +-30 +31 +-29 +30 +-30 +31 +-29 +31 +-28 +32 +-28 +32 +-28 +32 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-27 +33 +-26 +33 +-28 +31 +-29 +31 +-29 +31 +-28 +31 +-28 +31 +-29 +32 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +30 +-29 +31 +-27 +33 +-27 +32 +-29 +31 +-29 +30 +-30 +30 +-30 +31 +-29 +31 +-30 +31 +-28 +31 +-27 +33 +-29 +31 +-29 +31 +-29 +30 +-30 +31 +-29 +30 +-29 +30 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +30 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-27 +32 +-27 +33 +-28 +31 +-30 +31 +-31 +30 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +33 +-28 +32 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +32 +-26 +33 +-28 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-26 +33 +-29 +31 +-30 +30 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +33 +-27 +33 +-28 +31 +-30 +30 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +31 +-27 +32 +-29 +31 +-30 +30 +-29 +31 +-29 +31 +-29 +30 +-29 +31 +-28 +32 +-27 +32 +-28 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +30 +-29 +30 +-29 +31 +-29 +31 +-29 +30 +-27 +33 +-26 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +32 +-27 +33 +-29 +31 +-29 +30 +-30 +31 +-30 +30 +-29 +30 +-30 +31 +-27 +32 +-26 +32 +-29 +31 +-30 +30 +-30 +30 +-30 +31 +-29 +31 +-29 +30 +-28 +32 +-27 +32 +-29 +31 +-29 +30 +-30 +31 +-30 +30 +-29 +31 +-30 +31 +-28 +32 +-28 +31 +-29 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-28 +32 +-27 +33 +-28 +31 +-29 +31 +-29 +31 +-28 +32 +-29 +31 +-29 +32 +-27 +34 +-26 +33 +-28 +32 +-29 +32 +-29 +31 +-29 +31 +-29 +32 +-28 +31 +-27 +32 +-27 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-30 +30 +-29 +31 +-27 +33 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-30 +30 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-28 +32 +-28 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +33 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +-29 +32 +-27 +32 +-27 +32 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-30 +30 +-30 +31 +-30 +30 +-30 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-26 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +33 +-28 +32 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-27 +33 +-27 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +32 +-27 +32 +-28 +31 +-29 +31 +-29 +30 +-29 +31 +-30 +31 +-29 +31 +-27 +33 +-26 +33 +-29 +31 +-30 +30 +-29 +31 +-30 +31 +-29 +30 +-29 +31 +-27 +33 +-26 +32 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +30 +-29 +31 +-27 +33 +-27 +32 +-29 +30 +-30 +30 +-31 +30 +-29 +30 +-30 +31 +-30 +31 +-28 +31 +-27 +32 +-29 +30 +-30 +31 +-30 +30 +-30 +31 +-30 +30 +-30 +31 +-27 +32 +-27 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-30 +30 +-27 +33 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +32 +73 +-3 +43 +-25 +29 +-33 +26 +-35 +26 +-34 +26 +-34 +27 +-33 +28 +-33 +29 +-30 +30 +-31 +29 +-31 +30 +-32 +29 +-31 +29 +-31 +30 +-31 +30 +-30 +-107 +-44 +-97 +-4 +-58 +23 +-40 +34 +-32 +37 +-27 +40 +-22 +44 +-19 +44 +-15 +47 +-12 +48 +-13 +46 +-13 +45 +-15 +43 +-18 +41 +-20 +39 +-23 +37 +-21 +38 +-22 +37 +-25 +34 +-27 +33 +-28 +33 +-27 +33 +-28 +33 +-27 +33 +-25 +34 +-25 +34 +-28 +32 +-28 +32 +-28 +32 +-28 +32 +-28 +31 +-28 +31 +-28 +33 +-26 +32 +-28 +31 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-27 +33 +-26 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-25 +33 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +33 +-28 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +30 +-30 +30 +-30 +30 +-30 +31 +-30 +30 +-29 +32 +-27 +32 +-29 +31 +-29 +30 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-27 +33 +-27 +33 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-26 +33 +-28 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-26 +33 +-29 +31 +-29 +31 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +30 +-30 +30 +-30 +31 +-30 +30 +-30 +30 +-28 +31 +-28 +32 +-29 +30 +-30 +30 +-30 +30 +-30 +30 +-30 +30 +-30 +31 +-27 +32 +-27 +32 +-30 +30 +-30 +30 +-31 +29 +-30 +30 +-30 +30 +-29 +30 +-28 +32 +-28 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +33 +-26 +33 +-29 +31 +-29 +32 +-28 +32 +-28 +32 +-29 +32 +-28 +32 +-27 +33 +-26 +33 +-28 +32 +-28 +32 +-29 +31 +-28 +32 +-28 +32 +-28 +32 +-26 +33 +-26 +33 +-28 +31 +-29 +31 +-29 +31 +-30 +31 +-28 +31 +-29 +32 +-27 +33 +-27 +32 +-29 +31 +-29 +30 +-30 +30 +-30 +31 +-30 +31 +-30 +30 +-28 +32 +-27 +32 +-29 +30 +-30 +30 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +30 +-30 +30 +-30 +30 +-31 +30 +-30 +30 +-27 +32 +-28 +31 +-29 +30 +-30 +31 +-30 +30 +-29 +30 +-30 +31 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-29 +30 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +32 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +32 +-27 +33 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +33 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +30 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +32 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +30 +-29 +31 +-29 +31 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +32 +73 +-3 +42 +-26 +30 +-33 +25 +-35 +25 +-36 +26 +-34 +26 +-34 +27 +-33 +28 +-30 +30 +-31 +29 +-32 +28 +-32 +29 +-32 +29 +-32 +29 +-31 +30 +-30 +30 +-28 +32 +-29 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-27 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-28 +-106 +-43 +-96 +-2 +-57 +23 +-39 +34 +-32 +38 +-26 +40 +-21 +44 +-19 +45 +-14 +47 +-12 +48 +-13 +46 +-14 +44 +-15 +43 +-18 +40 +-21 +38 +-22 +37 +-22 +37 +-22 +37 +-24 +34 +-26 +33 +-27 +34 +-26 +33 +-27 +33 +-28 +33 +-25 +34 +-25 +34 +-27 +32 +-28 +32 +-29 +31 +-29 +32 +-29 +31 +-28 +32 +-27 +33 +-26 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +30 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +30 +-27 +33 +-26 +33 +-28 +32 +-29 +31 +-30 +31 +-29 +32 +-28 +31 +-29 +31 +-27 +33 +-26 +32 +-28 +32 +-29 +32 +-29 +31 +-28 +32 +-28 +32 +-28 +32 +-26 +33 +-26 +33 +-28 +32 +-29 +31 +-30 +31 +-29 +32 +-28 +32 +-28 +32 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +30 +-29 +32 +-29 +31 +-27 +33 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +30 +-30 +31 +-29 +31 +-27 +32 +-26 +32 +-29 +31 +-29 +31 +-30 +30 +-29 +31 +-29 +31 +-29 +30 +72 +-3 +42 +-26 +30 +-34 +26 +-35 +25 +-35 +26 +-35 +26 +-34 +27 +-33 +28 +-31 +30 +-31 +29 +-32 +29 +-32 +29 +-31 +30 +-31 +29 +-31 +30 +-31 +30 +-27 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-29 +32 +-27 +33 +-28 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-27 +33 +-28 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +30 +-29 +31 +-28 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +-107 +-43 +-97 +-3 +-58 +22 +-40 +33 +-33 +37 +-27 +40 +-21 +44 +-19 +44 +-15 +46 +-13 +47 +-13 +46 +-14 +44 +-15 +43 +-18 +41 +-20 +38 +-22 +38 +-21 +38 +-22 +37 +-24 +35 +-26 +34 +-27 +34 +-27 +33 +-27 +33 +-27 +34 +-25 +34 +-26 +33 +-27 +33 +-27 +33 +-28 +32 +-28 +32 +-28 +32 +-28 +31 +73 +-3 +43 +-25 +30 +-33 +26 +-34 +26 +-34 +27 +-34 +27 +-33 +27 +-32 +29 +-30 +30 +-31 +29 +-31 +29 +-32 +29 +-31 +30 +-31 +30 +-31 +31 +-30 +31 +-27 +33 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-29 +32 +-27 +33 +-28 +32 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-30 +30 +-31 +31 +-29 +32 +-29 +31 +-27 +33 +-28 +31 +-30 +31 +-30 +30 +-30 +30 +-31 +31 +-30 +31 +-29 +31 +-26 +34 +-28 +31 +-30 +30 +-31 +30 +-31 +30 +-30 +30 +-30 +31 +-30 +31 +-27 +33 +-28 +32 +-29 +31 +-30 +31 +-29 +31 +-30 +32 +-29 +31 +-29 +-106 +-43 +-96 +-3 +-58 +24 +-39 +34 +-32 +38 +-26 +41 +-21 +44 +-18 +44 +-14 +48 +-12 +48 +-12 +47 +-12 +46 +-15 +43 +-18 +41 +-20 +39 +-22 +38 +-21 +38 +-21 +37 +-25 +35 +-26 +35 +-26 +34 +-26 +34 +-26 +34 +-26 +34 +-25 +34 +-26 +34 +-27 +32 +-28 +32 +-29 +32 +-28 +31 +-29 +32 +-28 +32 +-26 +33 +-26 +33 +-29 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +30 +-30 +30 +-30 +30 +-30 +30 +-30 +31 +-28 +32 +-27 +32 +-30 +31 +-30 +30 +-30 +31 +-29 +31 +-30 +30 +-30 +30 +-28 +32 +-28 +32 +-29 +31 +-30 +30 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-28 +31 +-27 +32 +-29 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-28 +32 +-28 +32 +-28 +31 +-29 +31 +-29 +30 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +33 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-28 +31 +-27 +33 +-26 +33 +-28 +31 +-28 +31 +-30 +32 +-29 +31 +-29 +31 +-29 +32 +-27 +33 +-26 +34 +-28 +32 +-29 +31 +-29 +31 +-29 +32 +-29 +32 +-28 +32 +-26 +33 +-26 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +32 +-26 +33 +-28 +32 +-28 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +30 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +30 +-28 +32 +-27 +33 +-28 +31 +-29 +31 +-30 +30 +-30 +30 +-30 +30 +-30 +31 +-29 +31 +-28 +31 +-30 +30 +-30 +30 +-30 +30 +-30 +30 +-30 +31 +-29 +30 +-28 +32 +-28 +32 +-29 +30 +-30 +31 +-30 +31 +-29 +30 +-30 +31 +-30 +31 +-27 +32 +-27 +32 +-30 +31 +-30 +30 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-26 +33 +-29 +31 +-29 +30 +-30 +30 +-30 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +33 +-28 +32 +-29 +31 +-30 +31 +-29 +31 +-28 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +33 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +30 +-29 +31 +-27 +32 +-26 +32 +-29 +31 +-30 +30 +-30 +30 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +32 +-27 +32 +-27 +32 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +33 +-26 +32 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +32 +-27 +33 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +30 +-28 +33 +-27 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +-27 +32 +-27 +33 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +32 +-28 +31 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +30 +-30 +30 +-30 +31 +-30 +30 +-29 +31 +-28 +32 +-28 +31 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-29 +31 +-30 +31 +-27 +32 +-27 +33 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-28 +32 +-29 +31 +-30 +30 +-29 +32 +-29 +31 +-29 +31 +-27 +33 +-27 +33 +-28 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-28 +32 +-28 +31 +-29 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-30 +30 +-28 +31 +-28 +32 +-29 +30 +-30 +30 +-31 +30 +-30 +31 +-30 +30 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +30 +-30 +31 +-29 +31 +-30 +31 +-29 +31 +-27 +33 +-27 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-28 +32 +-29 +32 +-27 +33 +-26 +34 +-28 +32 +-28 +32 +-28 +32 +-29 +32 +-29 +31 +-28 +32 +-27 +33 +-27 +33 +-28 +32 +-28 +32 +-29 +31 +-28 +31 +-29 +31 +-29 +31 +-27 +32 +-26 +33 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +32 +-27 +33 +-27 +32 +-28 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +32 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +33 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-30 +30 +-30 +31 +-29 +31 +-29 +31 +-29 +30 +-28 +32 +-27 +33 +-28 +31 +-30 +31 +-30 +31 +-30 +30 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +33 +-27 +32 +-28 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +73 +-3 +43 +-25 +29 +-33 +26 +-35 +26 +-34 +26 +-34 +27 +-33 +28 +-33 +28 +-30 +30 +-31 +30 +-32 +28 +-31 +29 +-31 +30 +-31 +30 +-30 +30 +-30 +-108 +-45 +-98 +-4 +-59 +22 +-40 +33 +-32 +37 +-28 +39 +-22 +43 +-19 +44 +-15 +46 +-13 +47 +-13 +46 +-14 +44 +-16 +42 +-18 +40 +-21 +38 +-23 +37 +-21 +38 +-21 +37 +-25 +34 +-26 +33 +-27 +33 +-27 +33 +-28 +33 +-27 +33 +-25 +34 +-25 +34 +-27 +33 +-27 +32 +-28 +32 +-28 +32 +-28 +32 +-28 +32 +-26 +33 +-26 +34 +-28 +32 +-28 +32 +-29 +32 +-29 +31 +-29 +31 +-29 +31 +-28 +33 +-26 +33 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +33 +-29 +30 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-28 +31 +-28 +32 +-29 +31 +-29 +30 +-30 +30 +-30 +31 +-30 +30 +-30 +30 +-28 +31 +-28 +31 +-30 +30 +-30 +30 +-31 +30 +-30 +30 +-30 +31 +-30 +30 +-28 +31 +-28 +31 +-29 +30 +-30 +30 +-31 +30 +-29 +31 +-29 +31 +-29 +30 +-27 +33 +-27 +32 +-29 +30 +-30 +31 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +-27 +32 +-27 +33 +-28 +32 +-28 +31 +-29 +31 +-29 +31 +-28 +31 +-29 +32 +-27 +33 +-26 +32 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +33 +-27 +33 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +33 +-26 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-27 +33 +-26 +33 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +33 +-29 +31 +-29 +30 +-30 +31 +-30 +31 +-29 +30 +-30 +31 +-28 +32 +-27 +32 +-29 +30 +-30 +30 +-30 +31 +-29 +30 +-30 +31 +-29 +31 +-26 +33 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +30 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-26 +33 +-26 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-30 +32 +-26 +33 +-26 +33 +-28 +32 +-28 +31 +-29 +31 +-29 +32 +-28 +32 +-28 +31 +-27 +33 +-26 +32 +-28 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-28 +32 +-27 +33 +-29 +30 +-30 +30 +-30 +30 +-30 +30 +-30 +30 +-30 +30 +-28 +31 +-28 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-28 +31 +-28 +32 +-29 +31 +-29 +30 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +33 +-29 +31 +-28 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +32 +-27 +32 +-28 +31 +-29 +31 +-30 +31 +-29 +30 +-30 +31 +-30 +31 +-27 +31 +-27 +32 +-29 +31 +-29 +30 +-30 +30 +-30 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +32 +-29 +32 +-27 +32 +-27 +33 +-29 +31 +-29 +31 +-29 +31 +-30 +32 +-29 +31 +-28 +31 +-27 +33 +-27 +33 +-28 +31 +-29 +31 +-30 +30 +-30 +30 +-30 +30 +-30 +30 +-28 +32 +-27 +33 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-29 +31 +73 +-3 +42 +-26 +29 +-34 +25 +-35 +25 +-35 +26 +-34 +27 +-33 +27 +-33 +28 +-30 +30 +-31 +29 +-31 +30 +-31 +30 +-31 +29 +-31 +30 +-30 +31 +-30 +31 +-28 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +32 +-27 +34 +-28 +32 +-28 +31 +-30 +31 +-30 +31 +-30 +30 +-29 +32 +-29 +-106 +-43 +-96 +-3 +-57 +23 +-39 +34 +-32 +37 +-26 +40 +-21 +44 +-19 +45 +-14 +47 +-13 +47 +-12 +47 +-14 +45 +-15 +43 +-18 +41 +-20 +39 +-22 +37 +-22 +37 +-23 +36 +-25 +34 +-26 +34 +-27 +33 +-27 +33 +-28 +32 +-27 +33 +-26 +34 +-25 +34 +-27 +33 +-28 +32 +-28 +31 +-28 +32 +-29 +31 +-29 +31 +-26 +34 +-26 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +33 +-29 +30 +-30 +30 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-28 +32 +-27 +31 +-30 +30 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +30 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +33 +-28 +31 +-29 +31 +-29 +31 +-28 +31 +-28 +32 +-29 +31 +-27 +32 +-26 +33 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +30 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-30 +31 +-29 +30 +-30 +30 +-30 +30 +-30 +30 +-30 +30 +72 +-3 +42 +-26 +29 +-34 +25 +-36 +24 +-35 +26 +-35 +26 +-34 +27 +-33 +28 +-30 +30 +-32 +28 +-32 +28 +-32 +29 +-32 +29 +-31 +29 +-31 +30 +-31 +31 +-27 +32 +-29 +31 +-30 +31 +-31 +30 +-30 +31 +-30 +31 +-29 +31 +-29 +32 +-27 +33 +-28 +31 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-27 +33 +-28 +32 +-29 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-28 +33 +-28 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-29 +-106 +-43 +-96 +-3 +-57 +23 +-39 +34 +-32 +37 +-27 +40 +-21 +44 +-19 +45 +-15 +47 +-13 +47 +-13 +46 +-13 +44 +-15 +43 +-18 +40 +-20 +38 +-22 +38 +-21 +38 +-22 +37 +-24 +35 +-26 +34 +-27 +33 +-26 +34 +-27 +34 +-27 +33 +-26 +34 +-25 +34 +-26 +33 +-27 +32 +-29 +32 +-28 +31 +-28 +31 +-29 +32 +73 +-3 +43 +-26 +30 +-33 +26 +-35 +26 +-35 +27 +-33 +27 +-33 +28 +-33 +29 +-29 +30 +-31 +30 +-31 +29 +-32 +29 +-31 +29 +-31 +30 +-31 +29 +-30 +30 +-28 +33 +-29 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-27 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +30 +-29 +30 +-27 +33 +-28 +32 +-29 +30 +-30 +31 +-30 +31 +-30 +31 +-29 +32 +-29 +31 +-27 +33 +-28 +32 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-26 +33 +-28 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-29 +32 +-27 +33 +-28 +32 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +-106 +-43 +-96 +-2 +-57 +23 +-39 +34 +-32 +37 +-27 +40 +-22 +44 +-19 +44 +-15 +46 +-13 +47 +-13 +46 +-13 +45 +-15 +43 +-17 +41 +-20 +39 +-22 +37 +-21 +38 +-22 +37 +-25 +35 +-26 +34 +-26 +34 +-26 +34 +-27 +33 +-26 +33 +-25 +34 +-25 +34 +-27 +33 +-28 +32 +-28 +32 +-29 +31 +-29 +32 +-28 +32 +-27 +33 +-26 +33 +-28 +31 +-30 +31 +-29 +31 +-29 +32 +-29 +32 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-28 +31 +-30 +30 +-30 +30 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +33 +-28 +31 +-29 +32 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-27 +33 +-26 +33 +-28 +31 +-29 +31 +-29 +30 +-30 +31 +-30 +31 +-29 +31 +-28 +32 +-27 +32 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-28 +32 +-28 +32 +-27 +32 +-27 +32 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +33 +-27 +32 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-29 +31 +-27 +32 +-27 +31 +-30 +30 +-30 +30 +-30 +30 +-31 +30 +-30 +30 +-30 +31 +-28 +32 +-28 +31 +-29 +31 +-29 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-26 +33 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +30 +-29 +30 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-30 +30 +-30 +31 +-29 +31 +-30 +31 +-27 +33 +-26 +33 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +33 +-26 +32 +-29 +32 +-29 +31 +-29 +30 +-29 +32 +-29 +31 +-28 +31 +-27 +33 +-26 +33 +-28 +31 +-29 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +30 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +30 +-30 +31 +-30 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-30 +30 +-29 +30 +-30 +31 +-29 +31 +-28 +32 +-27 +33 +-29 +31 +-29 +31 +-30 +30 +-30 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +30 +-29 +31 +-29 +30 +-28 +31 +-28 +31 +-30 +30 +-30 +30 +-29 +31 +-30 +31 +-29 +30 +-29 +31 +-27 +33 +-26 +32 +-28 +31 +-29 +31 +-29 +30 +-29 +31 +-29 +32 +-29 +31 +-27 +33 +-26 +33 +-28 +32 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-26 +34 +-26 +33 +-28 +33 +-28 +32 +-28 +31 +-29 +31 +-29 +32 +-28 +31 +-27 +33 +-27 +33 +-28 +31 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-30 +30 +-29 +31 +-30 +31 +-29 +30 +-28 +31 +-28 +32 +-29 +31 +-29 +30 +-30 +30 +-31 +30 +-30 +30 +-30 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-30 +30 +-30 +30 +-28 +32 +-27 +33 +-28 +31 +-29 +31 +-30 +30 +-30 +30 +-29 +30 +-30 +31 +-27 +32 +-27 +32 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +-27 +33 +-27 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +33 +-26 +32 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-28 +31 +-28 +32 +-27 +33 +-29 +31 +-30 +31 +-30 +31 +-29 +30 +-29 +31 +-30 +31 +-27 +32 +-27 +32 +-29 +31 +-30 +30 +-30 +30 +-30 +31 +-29 +31 +-29 +30 +-28 +33 +-27 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-28 +31 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +30 +-29 +31 +-28 +31 +-28 +32 +-28 +31 +-30 +31 +-30 +30 +-29 +30 +-30 +31 +-30 +31 +-27 +32 +-27 +32 +-29 +31 +-30 +30 +-30 +31 +-29 +31 +-30 +31 +-29 +31 +-28 +33 +-27 +32 +-29 +30 +-29 +31 +-29 +30 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-26 +33 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +30 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-30 +30 +-30 +31 +-28 +32 +-27 +32 +-29 +30 +-30 +30 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-26 +33 +-29 +31 +-30 +30 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +32 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +33 +-26 +33 +-28 +32 +-29 +32 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +33 +-28 +32 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-27 +32 +-28 +31 +-29 +31 +-29 +30 +-29 +31 +-29 +32 +-28 +31 +-27 +33 +-27 +33 +-29 +30 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +72 +-4 +42 +-26 +29 +-33 +26 +-35 +25 +-35 +26 +-34 +26 +-33 +27 +-33 +28 +-30 +30 +-31 +29 +-33 +29 +-32 +29 +-31 +29 +-31 +30 +-30 +30 +-30 +-107 +-44 +-97 +-4 +-59 +22 +-40 +32 +-32 +37 +-27 +40 +-21 +44 +-19 +44 +-15 +47 +-12 +48 +-12 +46 +-13 +44 +-16 +43 +-18 +41 +-20 +38 +-22 +37 +-21 +38 +-22 +36 +-25 +34 +-27 +33 +-28 +32 +-28 +32 +-28 +32 +-28 +32 +-27 +33 +-26 +34 +-28 +31 +-29 +31 +-29 +30 +-30 +31 +-29 +30 +-30 +30 +-28 +32 +-27 +32 +-29 +30 +-30 +31 +-30 +30 +-29 +31 +-30 +31 +-30 +31 +-27 +32 +-27 +33 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-26 +32 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-26 +33 +-28 +31 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +32 +-29 +31 +-29 +31 +-30 +30 +-30 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +30 +-29 +31 +-27 +33 +-26 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-27 +32 +-27 +33 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +33 +-26 +32 +-28 +31 +-29 +31 +-30 +31 +-28 +31 +-29 +31 +-29 +31 +-27 +33 +-26 +33 +-28 +31 +-28 +31 +-29 +30 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +33 +-28 +31 +-29 +31 +-29 +31 +-28 +31 +-29 +32 +-29 +32 +-27 +32 +-26 +33 +-28 +31 +-29 +31 +-30 +32 +-28 +32 +-28 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +30 +-30 +30 +-30 +31 +-30 +30 +-30 +30 +-27 +33 +-27 +32 +-29 +30 +-30 +30 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-27 +32 +-27 +33 +-28 +32 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-27 +33 +-27 +32 +-28 +31 +-29 +31 +-29 +31 +-28 +32 +-29 +32 +-29 +31 +-27 +33 +-26 +33 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +33 +-27 +32 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-30 +30 +-30 +30 +-30 +30 +-30 +31 +-30 +30 +-29 +31 +-28 +31 +-29 +30 +-30 +30 +-30 +30 +-30 +30 +-30 +30 +-30 +30 +-28 +32 +-28 +32 +-29 +31 +-29 +30 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-26 +33 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-26 +32 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-26 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +-29 +32 +-27 +34 +-26 +33 +-28 +32 +-28 +32 +-29 +31 +-28 +32 +-29 +31 +-29 +31 +-27 +31 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-29 +31 +-27 +33 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +30 +-30 +31 +-30 +31 +-28 +31 +-27 +32 +-29 +31 +-30 +30 +-30 +30 +-30 +30 +-30 +31 +-29 +31 +72 +-4 +42 +-26 +28 +-34 +25 +-36 +25 +-36 +25 +-35 +26 +-34 +26 +-34 +27 +-31 +29 +-33 +27 +-33 +29 +-33 +28 +-32 +29 +-32 +29 +-32 +29 +-31 +29 +-28 +31 +-30 +30 +-31 +30 +-31 +30 +-31 +30 +-30 +31 +-30 +31 +-30 +31 +-28 +33 +-28 +31 +-29 +32 +-30 +31 +-29 +31 +-29 +32 +-29 +32 +-28 +-106 +-42 +-95 +-2 +-56 +24 +-39 +34 +-31 +38 +-26 +41 +-20 +45 +-18 +45 +-14 +48 +-12 +49 +-11 +47 +-13 +46 +-15 +44 +-17 +41 +-19 +40 +-21 +38 +-21 +38 +-22 +37 +-24 +35 +-26 +34 +-26 +34 +-26 +34 +-26 +34 +-27 +33 +-26 +34 +-25 +34 +-27 +33 +-27 +32 +-29 +32 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-28 +32 +-27 diff --git a/traces/lf_t5577_keri_msid.pm3 b/traces/lf_t5577_keri_msid.pm3 new file mode 100644 index 000000000..729db1749 --- /dev/null +++ b/traces/lf_t5577_keri_msid.pm3 @@ -0,0 +1,10000 @@ +33 +-29 +32 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-30 +31 +72 +-4 +41 +-26 +29 +-33 +25 +-35 +25 +-35 +26 +-34 +26 +-33 +27 +-33 +28 +-30 +29 +-31 +29 +-31 +28 +-33 +28 +-31 +29 +-31 +29 +-31 +30 +-31 +30 +-28 +32 +-29 +31 +-30 +29 +-31 +30 +-30 +31 +-30 +30 +-30 +30 +-29 +31 +-26 +33 +-28 +31 +-29 +31 +-30 +30 +-30 +30 +-30 +30 +-29 +31 +-28 +32 +-27 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +30 +-30 +31 +-29 +32 +-29 +32 +-26 +33 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-28 +31 +-28 +32 +-25 +35 +-26 +33 +-28 +32 +-29 +32 +-29 +32 +-28 +31 +-28 +33 +-28 +32 +-25 +33 +-28 +32 +-28 +32 +-29 +31 +-29 +32 +-29 +32 +-28 +32 +-28 +-106 +-43 +-96 +-2 +-57 +24 +-39 +34 +-32 +38 +-27 +41 +-21 +44 +-19 +44 +-15 +47 +-13 +47 +-13 +46 +-14 +45 +-17 +42 +-19 +40 +-21 +38 +-23 +37 +-22 +37 +-23 +36 +-26 +34 +-27 +34 +-27 +33 +-28 +33 +-28 +33 +-28 +33 +-26 +34 +-26 +34 +-28 +32 +-28 +32 +-29 +32 +-29 +31 +-29 +32 +-29 +32 +-27 +32 +-27 +33 +-29 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-28 +32 +-28 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +32 +-29 +31 +-27 +32 +-27 +31 +-29 +32 +-29 +32 +-29 +32 +-29 +32 +-29 +31 +-29 +33 +-27 +33 +-27 +33 +-28 +32 +-29 +31 +-29 +31 +-29 +32 +-30 +32 +-29 +31 +-27 +33 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-28 +32 +-27 +32 +-30 +31 +-30 +31 +-30 +30 +-31 +31 +-30 +31 +-30 +31 +-28 +32 +-28 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-28 +32 +-28 +32 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-28 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-29 +32 +-28 +32 +-27 +32 +-29 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-29 +32 +-27 +33 +-27 +32 +-29 +32 +-29 +31 +-29 +31 +-29 +32 +-29 +32 +-29 +31 +-28 +33 +-27 +33 +-28 +32 +-29 +32 +-29 +32 +-29 +32 +-29 +31 +-29 +32 +-27 +33 +-26 +33 +-29 +31 +-29 +32 +-29 +31 +-29 +32 +-29 +32 +-29 +31 +-28 +32 +-28 +33 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +33 +-28 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +32 +-27 +33 +-30 +30 +-29 +32 +-29 +32 +-29 +32 +-28 +32 +-29 +31 +-28 +33 +-27 +32 +-29 +32 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-27 +32 +-27 +32 +-30 +31 +-30 +30 +-30 +30 +-30 +30 +-30 +30 +-30 +31 +-28 +32 +-28 +31 +-30 +30 +-31 +30 +-31 +29 +-31 +31 +-31 +30 +-30 +30 +-28 +32 +-28 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +30 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-31 +30 +-30 +31 +-30 +31 +-30 +30 +-28 +32 +-27 +33 +-28 +31 +-29 +31 +-29 +32 +-29 +32 +-29 +32 +-29 +32 +-27 +34 +-26 +33 +-28 +32 +-29 +32 +-29 +31 +-29 +30 +-30 +32 +-29 +32 +-27 +33 +-27 +33 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-29 +32 +-29 +32 +-27 +33 +-27 +32 +-29 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +32 +-29 +31 +-28 +33 +-27 +33 +-28 +32 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-30 +31 +-27 +32 +-27 +33 +-29 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +32 +-27 +33 +-29 +31 +-30 +31 +-30 +29 +-30 +32 +-29 +31 +-29 +31 +-28 +32 +-28 +33 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-29 +32 +-27 +32 +-27 +33 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +-29 +32 +-27 +33 +-27 +33 +-29 +32 +-29 +31 +-29 +32 +-29 +32 +-29 +32 +-30 +31 +-27 +32 +-27 +33 +-29 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-27 +33 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +32 +-27 +33 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-28 +33 +-28 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-30 +31 +-27 +33 +-27 +33 +-28 +31 +-29 +32 +-29 +31 +-30 +32 +-29 +32 +-29 +32 +-27 +33 +-27 +33 +-29 +32 +-29 +32 +-29 +31 +-29 +32 +-29 +32 +-29 +32 +-27 +33 +-27 +33 +-29 +31 +-29 +31 +-30 +32 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +33 +-29 +31 +-29 +32 +-30 +31 +-29 +31 +-29 +32 +-29 +31 +-27 +33 +-27 +33 +-28 +32 +-29 +31 +-29 +32 +-30 +31 +-29 +32 +-29 +32 +-28 +33 +-27 +33 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-27 +33 +-27 +33 +-29 +31 +-30 +31 +-31 +30 +-31 +31 +-29 +31 +-30 +32 +-28 +33 +-27 +32 +-29 +31 +-30 +31 +-29 +31 +-30 +32 +-29 +32 +-29 +31 +-27 +32 +-27 +33 +-29 +32 +-29 +31 +-30 +31 +-29 +32 +-30 +31 +-29 +32 +-27 +33 +-27 +33 +-28 +31 +-30 +31 +-29 +32 +-29 +31 +-30 +31 +-29 +31 +-28 +32 +-28 +33 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +30 +-29 +31 +-28 +32 +-29 +31 +-30 +30 +-31 +30 +-30 +31 +-30 +31 +-30 +30 +-28 +32 +-28 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-28 +33 +-27 +33 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +32 +-29 +32 +-27 +33 +-27 +33 +-29 +31 +-29 +31 +-29 +32 +-29 +32 +-29 +31 +-29 +32 +-28 +33 +-26 +33 +-28 +32 +-29 +32 +-29 +31 +-29 +32 +-29 +32 +-29 +32 +-27 +33 +-27 +33 +-29 +31 +-29 +31 +-29 +31 +-30 +32 +-29 +31 +-30 +31 +-28 +32 +-28 +33 +-29 +32 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +30 +71 +-3 +41 +-26 +29 +-34 +24 +-36 +24 +-35 +25 +-35 +26 +-34 +26 +-33 +27 +-30 +30 +-31 +29 +-32 +28 +-32 +28 +-32 +28 +-32 +29 +-31 +30 +-30 +30 +-27 +32 +-29 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +30 +-30 +30 +-29 +31 +-27 +33 +-27 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +-107 +-42 +-96 +-2 +-57 +23 +-39 +34 +-31 +38 +-27 +41 +-21 +44 +-19 +45 +-14 +48 +-12 +48 +-12 +48 +-13 +45 +-16 +43 +-18 +42 +-20 +39 +-22 +37 +78 +2 +47 +-21 +33 +-30 +29 +-32 +28 +-32 +29 +-32 +29 +-31 +29 +-30 +30 +-27 +32 +-29 +31 +-29 +30 +-31 +30 +-30 +30 +-30 +30 +-30 +31 +-29 +-107 +-42 +-97 +-3 +-58 +22 +-40 +34 +-33 +37 +-27 +40 +-22 +44 +-20 +45 +-15 +47 +-13 +47 +-13 +46 +-14 +45 +-16 +43 +-18 +41 +-20 +39 +-22 +37 +-22 +38 +-23 +37 +-26 +34 +-27 +33 +-28 +34 +-27 +33 +-28 +33 +-28 +33 +-26 +34 +-26 +34 +-28 +32 +-28 +33 +-28 +32 +-29 +32 +-29 +32 +-29 +31 +-27 +33 +-27 +33 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-28 +32 +-28 +32 +-29 +32 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-28 +33 +-28 +32 +-29 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-29 +32 +-27 +33 +-27 +33 +-29 +31 +-30 +31 +-29 +31 +-29 +32 +-29 +31 +-29 +32 +-26 +34 +-26 +33 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-30 +31 +-28 +33 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-29 +32 +-29 +31 +-29 +31 +-28 +33 +-27 +32 +-29 +32 +-29 +32 +-30 +31 +-29 +31 +-30 +31 +-30 +31 +-28 +32 +-27 +33 +-29 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-27 +33 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +32 +-29 +32 +-27 +33 +-27 +33 +-29 +31 +-29 +31 +-29 +32 +-29 +32 +-29 +32 +-29 +32 +72 +-3 +43 +-25 +30 +-33 +25 +-35 +25 +-35 +26 +-34 +26 +-34 +28 +-32 +28 +-30 +30 +-32 +28 +-32 +28 +-32 +28 +-32 +28 +-32 +29 +-32 +29 +-30 +-108 +-44 +-97 +-4 +-59 +22 +-41 +32 +-34 +36 +-28 +40 +-23 +44 +-20 +43 +-15 +47 +-14 +47 +-14 +46 +-14 +44 +-16 +42 +-19 +40 +-21 +39 +-22 +37 +78 +2 +46 +-22 +32 +-30 +29 +-32 +28 +-32 +28 +-32 +29 +-31 +29 +-30 +30 +-28 +32 +-30 +30 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-29 +-106 +-43 +-96 +-2 +-58 +23 +-40 +34 +-33 +37 +-27 +41 +-21 +44 +-19 +45 +-15 +47 +-13 +47 +-13 +47 +-14 +45 +-15 +44 +-18 +42 +-20 +39 +-23 +38 +-22 +38 +-22 +37 +-25 +35 +-26 +34 +-27 +33 +-27 +33 +-28 +33 +-28 +33 +-26 +34 +-26 +33 +-28 +32 +-29 +32 +-29 +32 +-29 +32 +-29 +31 +-29 +32 +-28 +33 +-28 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +30 +-28 +32 +-28 +32 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +72 +-3 +42 +-26 +29 +-34 +26 +-34 +25 +-34 +26 +-34 +26 +-33 +27 +-33 +28 +-30 +30 +-31 +29 +-31 +29 +-32 +29 +-30 +30 +-30 +30 +-30 +31 +-29 +-107 +-43 +-97 +-3 +-58 +23 +-39 +34 +-32 +37 +-28 +40 +-21 +44 +-19 +45 +-15 +48 +-12 +47 +-13 +47 +-14 +45 +-16 +43 +-18 +41 +-20 +40 +-22 +38 +-22 +37 +-23 +37 +-26 +35 +-26 +34 +-27 +34 +-27 +34 +-27 +33 +-27 +33 +-26 +35 +-25 +34 +-27 +33 +-28 +33 +-28 +33 +-28 +32 +-28 +32 +-29 +32 +-27 +33 +-27 +33 +-28 +31 +-29 +31 +-29 +31 +-30 +32 +-29 +32 +-28 +32 +-27 +33 +-28 +33 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-30 +30 +-28 +32 +-28 +32 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-28 +32 +-28 +32 +-29 +31 +-29 +32 +-30 +31 +-29 +31 +-29 +31 +-30 +32 +-27 +33 +-26 +33 +-29 +32 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +32 +-27 +33 +-27 +33 +-28 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +32 +-29 +31 +-28 +32 +-27 +33 +-29 +32 +-29 +31 +-30 +31 +-30 +32 +-29 +31 +-29 +31 +-28 +33 +-27 +33 +-28 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-29 +32 +74 +-2 +42 +-25 +29 +-33 +26 +-35 +25 +-34 +26 +-34 +26 +-33 +28 +-32 +29 +-30 +30 +-31 +29 +-32 +29 +-31 +29 +-31 +29 +-32 +29 +-32 +29 +-30 +-108 +-44 +-97 +-3 +-58 +22 +-41 +33 +-33 +36 +-28 +40 +-22 +43 +-20 +44 +-17 +47 +-13 +48 +-13 +47 +-14 +45 +-16 +43 +-19 +40 +-21 +39 +-22 +38 +78 +2 +47 +-21 +33 +-30 +29 +-32 +28 +-31 +29 +-31 +30 +-31 +29 +-31 +30 +-28 +32 +-29 +30 +-30 +29 +-31 +30 +-30 +31 +-30 +30 +-30 +30 +-29 +31 +-28 +32 +-28 +31 +-29 +31 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-28 +31 +-27 +33 +-28 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +30 +-30 +31 +-29 +31 +-26 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +31 +-26 +33 +-28 +32 +-29 +30 +-30 +31 +-29 +32 +-29 +31 +-29 +32 +-29 +-106 +-42 +-96 +-3 +-58 +24 +-39 +34 +-32 +38 +-27 +41 +-21 +44 +-19 +46 +-15 +47 +-13 +47 +-13 +47 +-13 +46 +-15 +43 +-17 +42 +-20 +39 +-23 +36 +-21 +38 +-22 +37 +-25 +35 +-26 +34 +-27 +34 +-28 +33 +-28 +32 +-29 +32 +-27 +34 +-26 +34 +-28 +32 +-29 +32 +-29 +31 +-29 +32 +-29 +32 +-29 +31 +73 +-3 +41 +-26 +29 +-33 +26 +-35 +25 +-34 +25 +-34 +27 +-33 +27 +-33 +28 +-30 +30 +-31 +29 +-31 +28 +-32 +29 +-32 +29 +-31 +29 +-31 +29 +-30 +30 +-27 +32 +-29 +30 +-30 +30 +-30 +29 +-30 +30 +-30 +30 +-30 +31 +-29 +31 +-27 +33 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +30 +-30 +31 +-29 +31 +-26 +33 +-28 +32 +-28 +31 +-30 +31 +-29 +31 +-29 +31 +-28 +31 +-29 +31 +-26 +33 +-27 +32 +-28 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-25 +33 +-27 +32 +-29 +31 +-30 +30 +-30 +30 +-30 +30 +-30 +30 +-29 +31 +-27 +33 +-29 +31 +-29 +31 +-30 +30 +-30 +31 +-30 +30 +-29 +31 +-29 +-107 +-43 +-97 +-2 +-58 +23 +-39 +34 +-32 +38 +-27 +40 +-22 +44 +-19 +45 +-15 +47 +-13 +47 +-13 +47 +-14 +44 +-16 +43 +-18 +41 +-21 +39 +-22 +37 +-23 +37 +-23 +37 +-25 +34 +-27 +34 +-27 +34 +-27 +33 +-28 +33 +-28 +33 +-26 +34 +-25 +34 +-28 +33 +-28 +32 +-29 +31 +-29 +32 +-29 +32 +-28 +32 +-27 +33 +-28 +33 +-28 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +32 +-29 +31 +-27 +33 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-27 +33 +-27 +33 +-28 +32 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-29 +31 +-27 +33 +-27 +33 +-29 +31 +-29 +32 +-29 +32 +-29 +32 +-29 +31 +-29 +32 +-27 +33 +-27 +33 +-29 +31 +-30 +31 +-30 +31 +-29 +32 +-29 +32 +-29 +32 +-27 +32 +-27 +33 +-29 +32 +-30 +30 +-30 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +33 +-27 +33 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-29 +31 +-29 +31 +-28 +32 +-28 +33 +-29 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-27 +32 +-28 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +30 +-28 +32 +-28 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-28 +33 +-28 +32 +-29 +31 +-30 +30 +-31 +30 +-30 +30 +-30 +31 +-30 +31 +-28 +32 +-28 +32 +-30 +31 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +32 +-28 +32 +-28 +32 +-29 +31 +-29 +32 +-30 +31 +-29 +31 +-29 +32 +-29 +32 +-27 +32 +-27 +33 +-29 +32 +-29 +31 +-29 +31 +-29 +32 +-29 +32 +-29 +31 +-27 +33 +-27 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-30 +32 +-28 +32 +-27 +32 +-29 +32 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-30 +31 +-28 +32 +-28 +32 +-29 +31 +-30 +30 +-30 +32 +-29 +31 +-29 +31 +-30 +31 +-27 +33 +-27 +33 +-29 +31 +-30 +30 +-30 +31 +-29 +32 +-29 +31 +-29 +31 +-28 +33 +-27 +33 +-29 +31 +-29 +32 +-30 +31 +-30 +31 +-30 +32 +-29 +32 +-27 +33 +-26 +33 +-29 +32 +-29 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-28 +32 +-27 +33 +-29 +31 +-29 +32 +-30 +31 +-29 +31 +-29 +31 +-30 +32 +-28 +32 +-27 +33 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-27 +33 +-27 +33 +-29 +32 +-29 +31 +-29 +32 +-29 +32 +-29 +32 +-29 +32 +-27 +33 +-26 +33 +-28 +32 +-28 +32 +-28 +32 +-29 +32 +-29 +32 +-29 +32 +-27 +33 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-30 +30 +-30 +31 +-27 +33 +-27 +33 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-28 +32 +-30 +31 +-30 +30 +-31 +30 +-30 +30 +-31 +30 +-30 +31 +-28 +32 +-28 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-28 +32 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +30 +-30 +31 +-28 +32 +-28 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +32 +-27 +33 +-27 +32 +-29 +32 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +-29 +32 +-27 +34 +-27 +32 +-28 +32 +-29 +32 +-29 +31 +-29 +31 +-29 +32 +-29 +32 +-27 +33 +-27 +33 +-29 +31 +-30 +31 +-30 +30 +-30 +32 +-29 +31 +-29 +31 +-28 +33 +-28 +32 +-29 +30 +-30 +30 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-28 +32 +-28 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-29 +31 +-28 +32 +-27 +33 +-29 +31 +-29 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +32 +-27 +32 +-27 +33 +-28 +32 +-29 +32 +-29 +32 +-29 +32 +-29 +32 +-28 +32 +-27 +34 +-26 +33 +-29 +32 +-29 +32 +-29 +32 +-29 +31 +-29 +32 +-29 +32 +-27 +33 +-27 +33 +-29 +32 +-29 +32 +-29 +32 +-29 +32 +-29 +31 +-29 +32 +-28 +33 +-27 +32 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +-27 +33 +-27 +33 +-29 +31 +-29 +32 +-29 +31 +-29 +32 +-29 +31 +-29 +32 +-27 +34 +-26 +33 +-28 +32 +-30 +31 +-29 +31 +-29 +32 +-29 +32 +-29 +32 +-27 +33 +-27 +33 +-29 +32 +-29 +32 +-29 +32 +-29 +32 +-28 +32 +-29 +33 +-27 +34 +-26 +34 +-27 +32 +-29 +32 +-29 +32 +-28 +32 +-29 +32 +-29 +32 +-27 +33 +-27 +33 +-29 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-28 +32 +-28 +32 +-29 +30 +-30 +30 +-31 +30 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-27 +32 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-30 +30 +-30 +30 +-29 +31 +-28 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +30 +-29 +31 +-28 +32 +-30 +30 +-30 +30 +-31 +30 +-30 +31 +-30 +30 +-30 +31 +-28 +32 +-28 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-30 +31 +-28 +32 +-28 +33 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-28 +33 +-28 +33 +-28 +32 +-29 +32 +-30 +31 +-29 +31 +-30 +31 +-29 +32 +-27 +32 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +73 +-3 +42 +-25 +29 +-33 +26 +-35 +25 +-34 +26 +-34 +27 +-33 +27 +-32 +28 +-30 +30 +-31 +29 +-31 +29 +-31 +29 +-31 +29 +-31 +30 +-31 +30 +-30 +30 +-28 +31 +-30 +31 +-29 +30 +-30 +30 +-30 +31 +-30 +30 +-30 +31 +-29 +31 +-26 +33 +-28 +31 +-29 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +30 +-28 +-106 +-42 +-96 +-3 +-57 +24 +-39 +34 +-32 +37 +-27 +40 +-22 +44 +-19 +44 +-14 +48 +-12 +48 +-12 +46 +-14 +45 +-16 +43 +-18 +41 +-20 +39 +-23 +37 +78 +2 +47 +-21 +33 +-30 +29 +-32 +28 +-32 +29 +-31 +29 +-31 +29 +-30 +30 +-28 +31 +-29 +30 +-30 +30 +-31 +29 +-30 +30 +-30 +30 +-30 +31 +-29 +-107 +-44 +-97 +-3 +-59 +23 +-40 +33 +-33 +37 +-28 +40 +-22 +44 +-20 +44 +-15 +47 +-13 +47 +-13 +46 +-14 +44 +-16 +43 +-18 +42 +-21 +39 +-23 +37 +-22 +38 +-23 +37 +-25 +34 +-26 +34 +-27 +34 +-27 +34 +-27 +33 +-27 +34 +-26 +34 +-25 +34 +-27 +33 +-28 +32 +-29 +32 +-28 +32 +-28 +32 +-28 +32 +-26 +34 +-26 +33 +-28 +32 +-29 +31 +-30 +31 +-29 +32 +-29 +31 +-29 +32 +-28 +33 +-27 +32 +-28 +32 +-29 +32 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-27 +33 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-27 +33 +-27 +33 +-29 +31 +-29 +32 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +30 +-30 +31 +-30 +32 +-29 +31 +-29 +31 +-28 +32 +-28 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-27 +32 +-29 +32 +-29 +31 +-30 +30 +-30 +31 +-29 +31 +-30 +32 +-27 +33 +-26 +33 +-29 +31 +-30 +31 +-30 +31 +-29 +32 +-30 +31 +-29 +31 +-28 +32 +-27 +33 +-29 +32 +-29 +31 +-30 +31 +-29 +31 +-30 +30 +-29 +32 +73 +-3 +42 +-25 +29 +-34 +25 +-35 +25 +-35 +26 +-34 +26 +-33 +27 +-32 +28 +-30 +29 +-31 +29 +-32 +29 +-32 +28 +-31 +29 +-31 +29 +-31 +30 +-30 +-108 +-44 +-97 +-3 +-59 +22 +-40 +33 +-33 +37 +-28 +40 +-22 +44 +-20 +44 +-15 +46 +-13 +48 +-13 +47 +-14 +45 +-16 +43 +-19 +40 +-21 +38 +-23 +37 +77 +1 +46 +-21 +33 +-30 +28 +-32 +27 +-33 +28 +-32 +28 +-32 +29 +-30 +30 +-28 +32 +-29 +30 +-30 +30 +-31 +30 +-30 +30 +-30 +30 +-30 +31 +-29 +-107 +-43 +-97 +-3 +-57 +23 +-40 +34 +-32 +38 +-27 +41 +-21 +45 +-18 +46 +-14 +48 +-13 +48 +-12 +47 +-14 +46 +-15 +44 +-17 +42 +-19 +40 +-21 +38 +-22 +38 +-23 +37 +-25 +35 +-26 +34 +-27 +34 +-27 +33 +-27 +34 +-27 +34 +-26 +34 +-26 +34 +-28 +32 +-28 +33 +-29 +32 +-29 +33 +-28 +32 +-29 +32 +-27 +33 +-27 +33 +-28 +31 +-30 +31 +-29 +32 +-29 +31 +-29 +32 +-29 +31 +-27 +32 +-28 +32 +-30 +31 +-29 +31 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +72 +-3 +41 +-26 +29 +-34 +25 +-36 +25 +-35 +26 +-34 +27 +-33 +27 +-32 +28 +-30 +30 +-31 +28 +-32 +28 +-32 +29 +-31 +30 +-30 +30 +-31 +30 +-30 +-108 +-44 +-97 +-3 +-58 +23 +-40 +33 +-33 +37 +-28 +40 +-21 +44 +-19 +45 +-15 +47 +-13 +48 +-13 +47 +-14 +45 +-16 +43 +-18 +41 +-21 +39 +-22 +37 +-22 +37 +-23 +36 +-25 +35 +-27 +34 +-27 +33 +-27 +34 +-27 +34 +-28 +33 +-26 +34 +-26 +34 +-28 +32 +-28 +32 +-29 +32 +-29 +32 +-29 +32 +-29 +31 +-28 +33 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-29 +32 +-27 +32 +-28 +33 +-29 +32 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +-29 +32 +-27 +34 +-26 +33 +-28 +32 +-29 +31 +-29 +32 +-29 +32 +-29 +32 +-29 +32 +-27 +33 +-27 +33 +-30 +32 +-28 +32 +-29 +32 +-29 +32 +-29 +32 +-29 +32 +-27 +33 +-26 +33 +-29 +32 +-29 +32 +-29 +31 +-30 +31 +-30 +31 +-28 +31 +-28 +33 +-27 +33 +-28 +31 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +32 +-28 +32 +-27 +32 +-28 +32 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-28 +32 +-28 +33 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +72 +-3 +42 +-26 +29 +-34 +24 +-35 +25 +-35 +26 +-35 +25 +-33 +28 +-32 +28 +-30 +29 +-31 +28 +-32 +28 +-32 +28 +-32 +29 +-31 +30 +-31 +30 +-30 +-107 +-44 +-97 +-4 +-59 +22 +-41 +33 +-33 +37 +-28 +39 +-22 +44 +-19 +45 +-15 +47 +-13 +47 +-13 +47 +-14 +46 +-15 +43 +-17 +41 +-20 +39 +-23 +38 +78 +2 +47 +-21 +33 +-30 +29 +-32 +28 +-32 +28 +-31 +29 +-31 +30 +-30 +29 +-28 +32 +-29 +31 +-30 +30 +-31 +30 +-30 +30 +-30 +30 +-30 +31 +-29 +31 +-26 +32 +-28 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-27 +33 +-28 +31 +-29 +31 +-30 +31 +-30 +30 +-29 +30 +-30 +31 +-29 +31 +-26 +33 +-28 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-27 +32 +-29 +30 +-29 +31 +-30 +30 +-30 +31 +-29 +30 +-30 +31 +-29 +-107 +-43 +-97 +-3 +-58 +23 +-40 +33 +-33 +37 +-27 +40 +-21 +44 +-19 +45 +-14 +47 +-13 +48 +-13 +47 +-14 +45 +-16 +43 +-18 +42 +-20 +39 +-22 +37 +-22 +38 +-22 +37 +-25 +35 +-26 +35 +-27 +34 +-26 +34 +-27 +33 +-28 +33 +-26 +34 +-26 +34 +-27 +33 +-29 +32 +-29 +32 +-28 +33 +-29 +32 +-28 +32 +73 +-2 +42 +-25 +30 +-33 +25 +-35 +25 +-34 +26 +-34 +26 +-34 +27 +-32 +28 +-30 +30 +-30 +29 +-31 +28 +-32 +28 +-31 +30 +-31 +29 +-31 +30 +-30 +31 +-27 +32 +-29 +31 +-30 +30 +-30 +30 +-29 +31 +-30 +31 +-30 +30 +-29 +31 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-28 +32 +-26 +33 +-28 +32 +-29 +31 +-29 +30 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +32 +-28 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-25 +34 +-28 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-29 +32 +-28 +32 +-26 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +32 +-29 +32 +-28 +-106 +-43 +-96 +-3 +-58 +24 +-39 +34 +-32 +36 +-28 +40 +-21 +45 +-19 +44 +-15 +47 +-13 +48 +-13 +46 +-14 +45 +-16 +42 +-18 +41 +-20 +39 +-22 +37 +-22 +38 +-23 +36 +-26 +34 +-27 +34 +-27 +33 +-27 +33 +-27 +33 +-27 +33 +-26 +34 +-26 +34 +-28 +32 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-28 +33 +-27 +33 +-28 +32 +-29 +32 +-29 +32 +-28 +32 +-29 +32 +-29 +32 +-27 +33 +-27 +33 +-29 +32 +-29 +31 +-29 +32 +-29 +31 +-29 +32 +-29 +32 +-27 +33 +-27 +32 +-29 +32 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +33 +-27 +33 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-28 +33 +-27 +33 +-29 +31 +-30 +31 +-29 +31 +-29 +32 +-30 +31 +-30 +31 +-28 +33 +-28 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-28 +33 +-27 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +32 +-30 +31 +-29 +31 +-27 +33 +-27 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +32 +-28 +32 +-27 +33 +-29 +31 +-30 +31 +-30 +31 +-29 +32 +-29 +31 +-29 +31 +-28 +32 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +32 +-27 +33 +-26 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +30 +-30 +31 +-28 +31 +-28 +32 +-30 +30 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-29 +32 +-28 +32 +-27 +33 +-28 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-27 +33 +-27 +33 +-29 +32 +-29 +31 +-29 +31 +-29 +32 +-29 +32 +-29 +31 +-27 +33 +-27 +33 +-28 +31 +-29 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +32 +-27 +33 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-27 +33 +-27 +33 +-28 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +32 +-26 +33 +-27 +32 +-29 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +32 +-27 +34 +-26 +33 +-28 +32 +-29 +31 +-29 +31 +-29 +32 +-29 +32 +-29 +32 +-27 +33 +-27 +33 +-29 +32 +-29 +31 +-30 +32 +-29 +32 +-29 +31 +-29 +32 +-27 +33 +-27 +33 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-30 +32 +-29 +31 +-27 +32 +-27 +33 +-29 +31 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-28 +32 +-28 +32 +-29 +30 +-30 +31 +-30 +30 +-30 +30 +-30 +30 +-30 +31 +-28 +32 +-28 +33 +-29 +31 +-29 +31 +-30 +30 +-30 +31 +-29 +31 +-29 +32 +-28 +32 +-27 +32 +-29 +32 +-29 +31 +-29 +32 +-28 +32 +-29 +32 +-29 +31 +-26 +33 +-26 +33 +-29 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-28 +33 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-30 +31 +-28 +32 +-27 +32 +-29 +32 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-27 +33 +-28 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-28 +32 +-27 +33 +-28 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-28 +32 +-28 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-30 +32 +-29 +31 +-28 +33 +-27 +33 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-28 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +32 +-29 +31 +-28 +33 +-27 +33 +-29 +32 +-29 +31 +-30 +31 +-30 +32 +-29 +31 +-29 +32 +-28 +33 +-27 +33 +-29 +32 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-28 +32 +-27 +33 +-27 +33 +-28 +32 +-29 +31 +-29 +32 +-29 +32 +-28 +32 +-29 +32 +-27 +33 +-27 +33 +-29 +32 +-29 +32 +-29 +31 +-29 +32 +-30 +31 +-29 +31 +-28 +33 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-29 +31 +-28 +33 +-28 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-31 +31 +-29 +31 +-28 +32 +-28 +33 +-29 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-28 +32 +-28 +33 +-29 +31 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-28 +32 +-27 +33 +-29 +31 +-29 +30 +-30 +31 +-30 +31 +-29 +31 +-30 +32 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +30 +-29 +32 +-29 +32 +-29 +31 +-28 +33 +-27 +32 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-27 +32 +-29 +32 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-29 +32 +-27 +33 +-27 +33 +-29 +31 +-29 +31 +-29 +31 +-30 +32 +-29 +31 +-30 +30 +-29 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-27 +32 +-27 +33 +-29 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-28 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +30 +-30 +31 +-29 +32 +-27 +32 +-27 +33 +-29 +32 +-29 +31 +-30 +32 +-30 +31 +-29 +32 +-29 +32 +-27 +33 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +33 +-27 +33 +-29 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +30 +-30 +32 +72 +-3 +42 +-26 +29 +-33 +25 +-35 +24 +-35 +26 +-34 +26 +-33 +27 +-32 +28 +-29 +30 +-30 +29 +-31 +29 +-32 +29 +-31 +29 +-31 +29 +-31 +30 +-30 +30 +-27 +32 +-29 +31 +-30 +30 +-30 +30 +-31 +30 +-30 +30 +-29 +31 +-29 +31 +-27 +32 +-28 +32 +-28 +31 +-30 +31 +-29 +30 +-30 +31 +-30 +31 +-29 +-106 +-42 +-95 +-2 +-57 +22 +-40 +34 +-32 +38 +-27 +40 +-21 +44 +-20 +45 +-15 +47 +-13 +48 +-13 +46 +-14 +45 +-16 +42 +-19 +40 +-22 +38 +-23 +37 +78 +2 +46 +-21 +32 +-31 +28 +-33 +28 +-32 +27 +-33 +28 +-32 +29 +-30 +30 +-28 +32 +-29 +30 +-30 +30 +-31 +30 +-31 +30 +-30 +30 +-30 +31 +-28 +-106 +-42 +-95 +-2 +-58 +23 +-39 +34 +-32 +38 +-27 +41 +-21 +44 +-19 +45 +-15 +48 +-12 +47 +-13 +46 +-14 +45 +-16 +42 +-18 +41 +-21 +40 +-22 +38 +-21 +38 +-23 +37 +-25 +35 +-26 +34 +-27 +34 +-27 +34 +-27 +33 +-27 +34 +-26 +34 +-25 +34 +-27 +33 +-28 +32 +-29 +32 +-28 +33 +-28 +32 +-28 +32 +-26 +34 +-26 +34 +-28 +32 +-29 +32 +-29 +32 +-29 +32 +-29 +32 +-29 +32 +-27 +32 +-27 +33 +-29 +32 +-29 +31 +-29 +30 +-30 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +33 +-28 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +32 +-29 +32 +-27 +32 +-27 +33 +-29 +32 +-29 +31 +-30 +31 +-29 +32 +-29 +31 +-29 +31 +-28 +33 +-28 +32 +-29 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-28 +32 +-28 +33 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-28 +33 +-27 +32 +-29 +32 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-30 +31 +-27 +33 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-29 +32 +-29 +32 +-29 +32 +73 +-3 +42 +-25 +29 +-33 +26 +-35 +25 +-34 +26 +-34 +26 +-33 +27 +-32 +28 +-30 +30 +-31 +29 +-31 +29 +-32 +29 +-31 +29 +-31 +30 +-31 +30 +-30 +-107 +-44 +-97 +-4 +-59 +23 +-40 +33 +-33 +37 +-28 +40 +-22 +44 +-19 +44 +-15 +47 +-13 +47 +-13 +47 +-14 +45 +-16 +43 +-19 +41 +-21 +38 +-23 +38 +77 +1 +46 +-22 +33 +-30 +28 +-33 +27 +-33 +28 +-32 +28 +-32 +28 +-31 +30 +-29 +31 +-30 +30 +-30 +30 +-31 +30 +-30 +30 +-30 +30 +-30 +31 +-29 +-107 +-42 +-96 +-2 +-57 +24 +-39 +34 +-33 +38 +-26 +41 +-21 +45 +-18 +46 +-14 +47 +-12 +48 +-12 +47 +-13 +45 +-15 +44 +-17 +41 +-20 +40 +-22 +37 +-22 +37 +-23 +36 +-26 +35 +-27 +34 +-27 +33 +-28 +33 +-28 +33 +-28 +33 +-26 +34 +-26 +34 +-28 +32 +-29 +31 +-29 +32 +-29 +32 +-29 +31 +-29 +31 +-27 +33 +-27 +33 +-29 +31 +-30 +30 +-31 +30 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-28 +32 +-30 +30 +-31 +29 +-31 +30 +-31 +30 +-30 +30 +-30 +31 +71 +-4 +41 +-26 +28 +-34 +25 +-35 +25 +-35 +25 +-35 +25 +-33 +27 +-33 +28 +-30 +30 +-31 +29 +-31 +30 +-32 +29 +-30 +29 +-31 +30 +-30 +31 +-29 +-107 +-42 +-96 +-2 +-57 +23 +-39 +34 +-32 +37 +-27 +41 +-21 +45 +-18 +46 +-13 +48 +-12 +49 +-12 +48 +-12 +46 +-15 +44 +-17 +42 +-19 +39 +-22 +38 +-22 +38 +-22 +37 +-25 +36 +-26 +35 +-26 +34 +-26 +34 +-27 +33 +-27 +33 +-26 +34 +-25 +35 +-28 +33 +-28 +32 +-29 +32 +-28 +33 +-28 +32 +-28 +32 +-27 +33 +-27 +32 +-29 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +32 +-27 +33 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-28 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +32 +-27 +33 +-27 +33 +-29 +31 +-30 +31 +-30 +30 +-29 +32 +-29 +31 +-29 +31 +-27 +33 +-27 +33 +-28 +31 +-29 +32 +-30 +32 +-29 +31 +-29 +32 +-29 +32 +-28 +33 +-27 +33 +-29 +32 +-29 +31 +-29 +32 +-29 +31 +-30 +31 +-29 +31 +-27 +33 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +72 +-3 +42 +-26 +29 +-33 +25 +-35 +25 +-35 +26 +-34 +26 +-34 +26 +-33 +27 +-30 +29 +-32 +28 +-32 +28 +-32 +28 +-32 +29 +-31 +29 +-31 +30 +-30 +-108 +-45 +-98 +-5 +-59 +22 +-41 +33 +-33 +36 +-28 +40 +-23 +43 +-20 +44 +-15 +47 +-13 +47 +-14 +45 +-14 +45 +-16 +43 +-19 +41 +-21 +38 +-23 +37 +78 +2 +47 +-21 +33 +-30 +29 +-32 +29 +-31 +29 +-31 +28 +-31 +30 +-30 +30 +-27 +32 +-28 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +30 +-30 +30 +-29 +31 +-26 +33 +-28 +31 +-29 +30 +-30 +31 +-30 +31 +-29 +30 +-29 +31 +-28 +32 +-26 +33 +-28 +31 +-29 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-26 +34 +-28 +32 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-26 +33 +-28 +32 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +-107 +-43 +-96 +-2 +-58 +23 +-40 +33 +-32 +37 +-28 +42 +-21 +44 +-19 +45 +-15 +47 +-13 +47 +-13 +46 +-14 +45 +-16 +42 +-18 +40 +-21 +38 +-24 +36 +-23 +37 +-23 +37 +-26 +34 +-27 +33 +-28 +33 +-28 +33 +-28 +33 +-28 +33 +-27 +34 +-27 +33 +-28 +32 +-29 +32 +-30 +31 +-29 +31 +-29 +31 +-30 +32 +73 +-3 +42 +-25 +29 +-33 +26 +-35 +26 +-34 +26 +-34 +26 +-33 +27 +-32 +28 +-29 +30 +-30 +29 +-32 +29 +-31 +29 +-31 +29 +-31 +30 +-30 +30 +-29 +30 +-27 +32 +-29 +31 +-29 +31 +-30 +30 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-27 +32 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-27 +33 +-29 +31 +-29 +31 +-29 +31 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-26 +33 +-27 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-25 +34 +-27 +31 +-29 +31 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-29 +31 +-27 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +30 +-30 +30 +-29 +31 +-29 +-107 +-43 +-97 +-3 +-58 +23 +-40 +33 +-33 +37 +-28 +40 +-22 +43 +-20 +44 +-15 +47 +-13 +47 +-13 +46 +-14 +45 +-16 +43 +-18 +40 +-21 +38 +-23 +37 +-22 +38 +-22 +37 +-25 +35 +-26 +34 +-27 +33 +-28 +34 +-27 +33 +-27 +33 +-27 +34 +-25 +34 +-27 +32 +-28 +32 +-29 +31 +-29 +31 +-29 +32 +-29 +32 +-27 +33 +-27 +34 +-28 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +32 +-28 +33 +-27 +32 +-29 +32 +-29 +32 +-29 +31 +-29 +31 +-29 +32 +-29 +32 +-27 +33 +-27 +33 +-28 +32 +-29 +31 +-29 +31 +-29 +32 +-29 +32 +-28 +32 +-27 +33 +-27 +33 +-28 +32 +-29 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +33 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-29 +31 +-28 +33 +-27 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-29 +32 +-29 +31 +-28 +32 +-28 +32 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-28 +32 +-27 +32 +-29 +30 +-31 +30 +-30 +30 +-30 +31 +-30 +30 +-30 +31 +-28 +31 +-28 +32 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-28 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-30 +30 +-27 +33 +-26 +34 +-28 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-28 +32 +-28 +33 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-28 +32 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-29 +32 +-27 +33 +-27 +33 +-28 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-27 +33 +-27 +33 +-29 +32 +-29 +32 +-29 +32 +-30 +31 +-29 +31 +-29 +32 +-27 +33 +-27 +33 +-28 +32 +-29 +32 +-29 +33 +-28 +33 +-28 +32 +-29 +32 +-27 +34 +-26 +34 +-28 +32 +-29 +31 +-29 +32 +-29 +32 +-29 +32 +-29 +31 +-28 +33 +-26 +33 +-28 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +32 +-29 +31 +-28 +32 +-27 +32 +-30 +31 +-30 +30 +-31 +30 +-30 +30 +-30 +30 +-30 +31 +-29 +32 +-28 +32 +-29 +30 +-31 +30 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-27 +32 +-27 +33 +-29 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-30 +30 +-28 +33 +-27 +33 +-29 +31 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-29 +31 +-28 +33 +-27 +33 +-28 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +32 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +32 +-30 +31 +-29 +32 +-28 +33 +-27 +32 +-29 +31 +-29 +32 +-29 +32 +-29 +31 +-29 +32 +-29 +32 +-26 +33 +-26 +34 +-28 +32 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-28 +33 +-27 +32 +-29 +32 +-29 +32 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +-28 +32 +-28 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-29 +31 +-28 +32 +-28 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +-28 +33 +-26 +33 +-29 +32 +-29 +31 +-29 +32 +-29 +32 +-29 +31 +-29 +32 +-27 +34 +-26 +33 +-28 +32 +-29 +32 +-29 +31 +-29 +32 +-29 +32 +-29 +32 +-27 +33 +-27 +33 +-29 +32 +-30 +31 +-30 +31 +-29 +32 +-30 +31 +-29 +31 +-28 +33 +-28 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +30 +-31 +31 +-29 +31 +-28 +32 +-28 +32 +-30 +31 +-30 +31 +-30 +31 +-31 +31 +-30 +31 +-29 +31 +-28 +33 +-27 +33 +-29 +31 +-30 +31 +-30 +31 +-29 +30 +-30 +31 +-30 +31 +-28 +32 +-28 +33 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-28 +32 +-28 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-28 +31 +-28 +32 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-28 +32 +-28 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-30 +31 +-27 +33 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +32 +-28 +32 +-27 +32 +-29 +31 +-30 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-27 +33 +-27 +33 +-29 +31 +-29 +31 +-29 +32 +-30 +32 +-28 +32 +-28 +33 +-27 +33 +-27 +33 +-28 +32 +-29 +31 +-29 +31 +-29 +32 +-29 +32 +-29 +31 +-27 +32 +-27 +34 +-28 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +32 +-28 +32 +-27 +33 +-28 +32 +-29 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-27 +32 +-27 +33 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +32 +-28 +32 +-30 +30 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +30 +-28 +32 +-27 +32 +-30 +31 +-30 +30 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-29 +32 +-28 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +32 +-27 +33 +-27 +33 +-29 +31 +-30 +31 +-29 +31 +-30 +32 +-29 +31 +-29 +32 +-27 +33 +-27 +32 +-28 +31 +-29 +32 +-30 +31 +-29 +31 +-29 +32 +-29 +32 +73 +-2 +43 +-25 +29 +-33 +25 +-35 +25 +-35 +26 +-34 +27 +-33 +27 +-33 +29 +-29 +31 +-30 +30 +-31 +29 +-31 +28 +-31 +30 +-30 +30 +-30 +30 +-29 +30 +-27 +33 +-28 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-26 +33 +-27 +32 +-29 +31 +-29 +30 +-30 +30 +-30 +31 +-30 +31 +-28 +-106 +-42 +-95 +-2 +-57 +23 +-39 +34 +-32 +37 +-27 +40 +-22 +43 +-19 +44 +-15 +47 +-13 +48 +-13 +46 +-14 +45 +-17 +42 +-18 +41 +-20 +39 +-23 +37 +78 +2 +46 +-21 +33 +-30 +28 +-32 +28 +-32 +28 +-32 +28 +-31 +29 +-31 +29 +-28 +32 +-29 +30 +-30 +29 +-32 +30 +-30 +30 +-30 +30 +-30 +30 +-30 +-107 +-44 +-97 +-3 +-58 +23 +-40 +33 +-32 +37 +-27 +40 +-22 +44 +-19 +45 +-15 +47 +-13 +48 +-13 +46 +-14 +45 +-16 +43 +-19 +41 +-20 +39 +-22 +38 +-22 +37 +-23 +37 +-25 +35 +-26 +35 +-26 +33 +-27 +33 +-28 +34 +-27 +33 +-26 +34 +-26 +34 +-28 +32 +-28 +32 +-29 +32 +-29 +32 +-28 +32 +-29 +33 +-26 +34 +-26 +33 +-28 +32 +-29 +32 +-29 +31 +-29 +32 +-29 +32 +-29 +32 +-27 +33 +-27 +33 +-28 +32 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +-29 +32 +-27 +33 +-27 +32 +-29 +32 +-29 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +32 +-28 +32 +-27 +33 +-29 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-27 +33 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +32 +-29 +32 +-27 +33 +-27 +33 +-29 +32 +-29 +31 +-29 +32 +-29 +32 +-29 +31 +-30 +31 +-28 +32 +-27 +32 +-29 +32 +-29 +31 +-29 +31 +-29 +32 +-29 +32 +-29 +31 +-28 +32 +-27 +33 +-29 +31 +-30 +31 +-30 +31 +-30 +32 +-29 +31 +-30 +32 +-27 +33 +-27 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-28 +32 +-30 +31 +-29 +31 +-30 +31 +-30 +30 +-29 +31 +-29 +32 +72 +-3 +41 +-26 +29 +-33 +25 +-35 +25 +-36 +26 +-34 +26 +-34 +27 +-33 +28 +-30 +30 +-32 +29 +-31 +29 +-32 +29 +-31 +29 +-31 +30 +-31 +30 +-30 +-107 +-44 +-97 +-4 +-58 +22 +-40 +33 +-33 +37 +-28 +39 +-22 +44 +-20 +45 +-15 +47 +-13 +48 +-13 +46 +-14 +45 +-16 +43 +-18 +40 +-21 +39 +-23 +37 +78 +2 +46 +-22 +33 +-30 +29 +-32 +28 +-32 +28 +-32 +29 +-31 +29 +-31 +29 +-29 +31 +-30 +30 +-30 +29 +-31 +30 +-30 +30 +-30 +30 +-30 +30 +-30 +-108 +-44 +-97 +-3 +-58 +22 +-40 +33 +-33 +37 +-28 +40 +-22 +43 +-20 +45 +-16 +47 +-13 +47 +-14 +46 +-14 +45 +-16 +42 +-19 +40 +-21 +39 +-22 +37 +-22 +37 +-23 +36 +-25 +35 +-26 +35 +-27 +34 +-26 +34 +-27 +34 +-26 +35 +-25 +35 +-25 +34 +-27 +33 +-28 +33 +-28 +32 +-28 +33 +-28 +33 +-28 +32 +-27 +34 +-27 +34 +-27 +32 +-28 +32 +-29 +32 +-28 +32 +-28 +32 +-28 +32 +-27 +33 +-26 +33 +-28 +32 +-29 +31 +-30 +30 +-29 +32 +-29 +32 +-29 +31 +73 +-3 +41 +-26 +29 +-34 +25 +-35 +25 +-35 +25 +-34 +26 +-34 +27 +-32 +27 +-30 +30 +-31 +28 +-31 +28 +-32 +29 +-32 +28 +-31 +29 +-31 +29 +-30 +-108 +-44 +-97 +-4 +-59 +22 +-40 +32 +-33 +37 +-28 +40 +-22 +43 +-20 +44 +-16 +47 +-14 +47 +-13 +45 +-15 +45 +-16 +42 +-18 +41 +-20 +39 +-22 +38 +-22 +37 +-23 +36 +-26 +35 +-27 +33 +-27 +34 +-26 +34 +-27 +34 +-27 +33 +-25 +35 +-25 +35 +-27 +33 +-28 +33 +-28 +32 +-29 +32 +-29 +32 +-29 +32 +-27 +33 +-27 +33 +-29 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-28 +32 +-28 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +30 +-28 +32 +-28 +32 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-28 +32 +-28 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-27 +33 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +32 +-29 +32 +-27 +33 +-27 +33 +-29 +32 +-29 +31 +-29 +32 +-29 +32 +-29 +32 +-29 +32 +-27 +33 +-27 +33 +-28 +31 +-29 +32 +-30 +31 +-29 +32 +-29 +31 +-29 +31 +-28 +33 +-27 +32 +-29 +32 +-29 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +32 +73 +-3 +41 +-26 +29 +-33 +25 +-35 +25 +-35 +26 +-34 +27 +-34 +27 +-33 +28 +-30 +30 +-32 +29 +-32 +28 +-32 +28 +-31 +29 +-31 +28 +-31 +29 +-30 +-108 +-45 +-97 +-3 +-59 +22 +-40 +32 +-33 +36 +-28 +40 +-22 +43 +-20 +44 +-16 +47 +-13 +47 +-13 +47 +-14 +45 +-16 +43 +-18 +41 +-21 +39 +-23 +38 +79 +2 +47 +-21 +32 +-30 +29 +-33 +28 +-32 +28 +-32 +29 +-31 +29 +-30 +30 +-27 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +30 +-31 +30 +-30 +30 +-29 +31 +-27 +33 +-28 +31 +-29 +30 +-30 +30 +-30 +30 +-29 +30 +-30 +31 +-29 +31 +-26 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +31 +-26 +33 +-28 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +32 +-26 +32 +-29 +31 +-29 +31 +-30 +30 +-29 +31 +-30 +31 +-29 +31 +-29 +-106 +-43 +-96 +-3 +-58 +23 +-40 +33 +-33 +37 +-27 +40 +-22 +44 +-19 +44 +-15 +47 +-13 +48 +-13 +46 +-14 +46 +-16 +43 +-18 +40 +-21 +39 +-23 +38 +-21 +38 +-22 +37 +-26 +35 +-26 +34 +-27 +34 +-27 +33 +-28 +33 +-27 +33 +-26 +34 +-26 +34 +-28 +32 +-28 +32 +-29 +32 +-29 +31 +-29 +31 +-29 +32 +73 +-3 +42 +-26 +29 +-33 +25 +-35 +25 +-35 +26 +-34 +26 +-33 +27 +-33 +27 +-30 +30 +-31 +29 +-32 +28 +-32 +29 +-31 +29 +-31 +30 +-30 +30 +-30 +31 +-27 +32 +-28 +31 +-29 +30 +-30 +31 +-30 +31 +-29 +30 +-29 +31 +-29 +32 +-26 +33 +-28 +31 +-29 +31 +-29 +31 +-28 +32 +-29 +31 +-29 +31 +-28 +32 +-26 +34 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-25 +34 +-27 +32 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-28 +32 +-25 +34 +-27 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-26 +33 +-28 +32 +-29 +31 +-30 +31 +-29 +30 +-29 +31 +-29 +31 +-29 +-106 +-44 +-97 +-3 +-58 +23 +-39 +34 +-32 +38 +-27 +40 +-21 +44 +-20 +43 +-16 +47 +-12 +47 +-13 +47 +-14 +45 +-16 +42 +-18 +41 +-21 +39 +-22 +38 +-22 +38 +-22 +37 +-25 +35 +-26 +34 +-27 +34 +-27 +34 +-27 +33 +-27 +34 +-25 +35 +-25 +34 +-27 +33 +-28 +33 +-29 +32 +-28 +32 +-29 +32 +-29 +31 +-27 +34 +-26 +34 +-28 +32 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-28 +32 +-28 +32 +-28 +31 +-29 +31 +-30 +31 +-29 +30 +-30 +31 +-30 +31 +-27 +32 +-27 +33 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-28 +31 +-28 +32 +-29 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-28 +33 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-30 +30 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-28 +32 +-28 +32 +-29 +31 +-29 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-27 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-29 +31 +-27 +33 +-27 +33 +-28 +32 +-29 +31 +-30 +31 +-29 +32 +-29 +31 +-29 +32 +-27 +33 +-27 +33 +-28 +32 +-29 +32 +-29 +31 +-29 +31 +-29 +32 +-29 +32 +-27 +33 +-27 +33 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-28 +32 +-28 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-29 +31 +-28 +32 +-28 +32 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-28 +32 +-27 +32 +-28 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +33 +-29 +31 +-30 +31 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-29 +32 +-27 +32 +-29 +31 +-31 +31 +-29 +31 +-30 +31 +-30 +31 +-30 +30 +-28 +33 +-27 +33 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +32 +-28 +33 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-29 +32 +-29 +31 +-27 +33 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +33 +-28 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +32 +-29 +32 +-27 +33 +-27 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +32 +-28 +33 +-27 +32 +-29 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +33 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +33 +-27 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-28 +33 +-27 +33 +-28 +32 +-29 +31 +-30 +31 +-29 +32 +-29 +31 +-30 +31 +-28 +33 +-27 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-29 +31 +-27 +33 +-27 +33 +-28 +31 +-29 +31 +-30 +30 +-30 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-27 +33 +-29 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-28 +33 +-27 +33 +-29 +32 +-29 +31 +-29 +31 +-30 +32 +-29 +31 +-29 +31 +-27 +34 +-27 +33 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +33 +-27 +33 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-27 +33 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +32 +-29 +32 +-27 +33 +-27 +33 +-29 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-28 +33 +-27 +33 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-29 +31 +-28 +33 +-28 +32 +-29 +30 +-30 +31 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-27 +32 +-28 +32 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +30 +-30 +31 +-28 +32 +-28 +31 +-30 +30 +-31 +30 +-30 +30 +-30 +30 +-30 +30 +-30 +30 +-29 +32 +-28 +32 +-30 +30 +-31 +30 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-28 +32 +-30 +30 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-28 +33 +-27 +32 +-29 +31 +-30 +31 +-29 +30 +-29 +31 +-30 +31 +-29 +31 +-27 +33 +-27 +33 +-28 +31 +-29 +32 +-29 +31 +-29 +31 +-29 +32 +-29 +33 +-27 +33 +-26 +33 +-28 +32 +-28 +33 +-28 +33 +-28 +32 +-28 +33 +-28 +33 +-26 +33 +-26 +33 +-28 +32 +-28 +32 +-29 +32 +-29 +32 +-29 +32 +-28 +32 +-27 +33 +-26 +34 +-28 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-30 +31 +-28 +32 +-27 +33 +-29 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +32 +-28 +33 +-27 +33 +-29 +31 +-29 +32 +-30 +31 +-29 +31 +-29 +32 +-29 +32 +-27 +32 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-29 +32 +-29 +31 +-30 +32 +-27 +33 +-27 +33 +-29 +31 +-30 +31 +-31 +31 +-30 +30 +-30 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +32 +-29 +31 +-29 +31 +-29 +32 +-29 +32 +-29 +31 +-27 +33 +-27 +33 +-29 +31 +-29 +31 +-30 +32 +-29 +31 +-29 +31 +-29 +32 +-27 +32 +-27 +33 +-29 +31 +-30 +31 +-30 +31 +-30 +32 +-30 +31 +-30 +31 +73 +-3 +42 +-25 +30 +-34 +26 +-35 +25 +-34 +26 +-34 +27 +-34 +27 +-32 +28 +-29 +30 +-31 +29 +-31 +29 +-31 +29 +-31 +29 +-31 +30 +-30 +30 +-30 +31 +-27 +32 +-28 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-26 +33 +-28 +32 +-28 +31 +-30 +30 +-30 +31 +-29 +31 +-29 +31 +-29 +-106 +-42 +-97 +-2 +-57 +23 +-39 +34 +-32 +37 +-28 +40 +-22 +43 +-20 +44 +-15 +47 +-13 +47 +-14 +46 +-15 +45 +-16 +42 +-19 +40 +-22 +38 +-23 +36 +77 +1 +45 +-22 +32 +-31 +28 +-33 +27 +-33 +28 +-32 +28 +-32 +29 +-31 +29 +-29 +31 +-30 +30 +-30 +29 +-31 +29 +-31 +30 +-31 +30 +-30 +30 +-30 +-108 +-44 +-98 +-4 +-59 +22 +-40 +32 +-33 +37 +-28 +40 +-21 +43 +-20 +44 +-15 +47 +-13 +47 +-13 +46 +-14 +45 +-16 +43 +-18 +41 +-20 +39 +-22 +38 +-22 +37 +-23 +37 +-25 +35 +-26 +34 +-27 +34 +-27 +34 +-28 +34 +-27 +33 +-25 +34 +-25 +35 +-27 +33 +-28 +33 +-29 +32 +-28 +32 +-28 +32 +-29 +32 +-27 +33 +-26 +33 +-28 +32 +-29 +32 +-29 +31 +-29 +32 +-29 +32 +-28 +32 +-27 +33 +-27 +33 +-28 +32 +-29 +30 +-30 +32 +-29 +31 +-29 +31 +-29 +32 +-27 +33 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +32 +-30 +31 +-28 +31 +-28 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-28 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-29 +32 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +32 +-29 +31 +-29 +32 +-28 +33 +-27 +33 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-29 +32 +-29 +32 +-27 +33 +-27 +33 +-28 +32 +-28 +32 +-29 +32 +-29 +32 +-29 +31 +-29 +31 +-27 +33 +-27 +33 +-28 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +32 +-29 +31 +-28 +32 +-27 +33 +-29 +32 +-29 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +72 +-3 +41 +-26 +29 +-33 +25 +-35 +25 +-35 +26 +-34 +27 +-33 +27 +-32 +28 +-30 +30 +-31 +28 +-32 +29 +-32 +29 +-31 +28 +-31 +30 +-30 +30 +-30 +-107 +-44 +-97 +-3 +-59 +22 +-40 +33 +-32 +37 +-27 +40 +-22 +44 +-20 +44 +-15 +47 +-13 +48 +-13 +47 +-14 +45 +-16 +43 +-18 +41 +-21 +39 +-22 +37 +77 +2 +47 +-21 +33 +-30 +29 +-32 +28 +-32 +29 +-31 +29 +-30 +30 +-30 +30 +-28 +32 +-29 +30 +-30 +30 +-31 +30 +-31 +30 +-30 +30 +-30 +31 +-30 +-107 +-43 +-97 +-3 +-58 +23 +-40 +33 +-33 +37 +-28 +40 +-22 +43 +-20 +45 +-15 +47 +-13 +47 +-14 +46 +-14 +45 +-16 +43 +-18 +41 +-20 +39 +-21 +38 +-22 +38 +-22 +37 +-25 +34 +-27 +34 +-28 +33 +-27 +33 +-27 +34 +-28 +33 +-26 +34 +-26 +34 +-28 +33 +-28 +32 +-29 +31 +-29 +32 +-28 +32 +-29 +31 +-27 +33 +-27 +33 +-29 +31 +-30 +31 +-30 +32 +-29 +31 +-29 +32 +-29 +32 +-27 +32 +-27 +33 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +72 +-3 +42 +-26 +29 +-34 +25 +-36 +25 +-35 +25 +-35 +26 +-34 +26 +-33 +28 +-31 +29 +-31 +28 +-32 +28 +-32 +28 +-32 +29 +-31 +29 +-31 +30 +-30 +-107 +-43 +-96 +-3 +-58 +23 +-40 +33 +-33 +37 +-28 +40 +-22 +44 +-19 +44 +-15 +47 +-13 +47 +-13 +47 +-14 +45 +-16 +43 +-18 +41 +-21 +39 +-22 +38 +-22 +38 +-23 +37 +-26 +34 +-26 +35 +-27 +34 +-27 +34 +-27 +34 +-27 +34 +-26 +34 +-25 +34 +-27 +33 +-28 +32 +-28 +32 +-28 +32 +-28 +33 +-28 +32 +-27 +33 +-27 +34 +-28 +32 +-29 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-28 +32 +-29 +31 +-30 +31 +-30 +32 +-29 +31 +-30 +31 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-28 +32 +-27 +33 +-29 +32 +-29 +31 +-30 +31 +-29 +32 +-30 +31 +-29 +31 +-27 +33 +-27 diff --git a/traces/lf_t5577_motorola.pm3 b/traces/lf_t5577_motorola.pm3 new file mode 100644 index 000000000..b1df25f0f --- /dev/null +++ b/traces/lf_t5577_motorola.pm3 @@ -0,0 +1,10000 @@ +37 +-28 +40 +-21 +44 +-20 +45 +-15 +47 +-13 +47 +-13 +47 +-13 +45 +-15 +44 +-18 +42 +-20 +39 +-22 +38 +-22 +38 +-22 +37 +-26 +36 +-25 +36 +-25 +34 +-26 +34 +-27 +34 +-27 +34 +-25 +34 +-25 +34 +-27 +33 +-28 +33 +-28 +32 +-28 +33 +-28 +33 +-28 +32 +-26 +34 +-27 +34 +-28 +32 +-28 +32 +-29 +32 +-28 +32 +-28 +32 +-29 +32 +-27 +33 +-27 +33 +-28 +32 +-29 +32 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-27 +33 +-27 +33 +-29 +31 +-30 +31 +-30 +31 +-30 +30 +-30 +30 +-31 +30 +-29 +31 +-28 +32 +-30 +30 +-31 +30 +-31 +30 +-30 +30 +-31 +30 +-30 +30 +71 +-3 +41 +-26 +28 +-35 +24 +-36 +24 +-35 +25 +-35 +25 +-34 +26 +-33 +28 +-31 +29 +-31 +28 +-32 +28 +-32 +28 +-32 +29 +-31 +28 +-31 +30 +-30 +30 +-27 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-27 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +32 +-28 +-106 +-42 +-96 +-2 +-57 +23 +-40 +34 +-32 +38 +-27 +41 +-21 +45 +-19 +45 +-14 +47 +-12 +48 +-12 +47 +-13 +45 +-15 +44 +-17 +42 +-20 +40 +-22 +37 +79 +3 +46 +-21 +33 +-30 +30 +-31 +28 +-31 +29 +-32 +29 +-31 +29 +-31 +30 +-28 +32 +-29 +31 +-30 +30 +-30 +30 +-30 +30 +-30 +30 +-30 +30 +-29 +-107 +-43 +-97 +-3 +-59 +23 +-40 +33 +-33 +37 +-28 +41 +-21 +44 +-19 +45 +-16 +47 +-13 +47 +-13 +47 +-14 +45 +-15 +43 +-18 +41 +-21 +38 +-23 +37 +-23 +38 +-23 +36 +-25 +35 +-26 +34 +-27 +33 +-27 +33 +-27 +34 +-28 +33 +-26 +34 +-25 +34 +-27 +33 +-28 +32 +-29 +32 +-29 +32 +-29 +32 +-28 +31 +-28 +33 +-28 +32 +-28 +32 +-29 +32 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-28 +32 +-27 +33 +-29 +32 +-30 +31 +-29 +31 +-30 +32 +-29 +32 +-29 +31 +-28 +33 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-28 +33 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-27 +33 +-27 +33 +-29 +31 +-30 +30 +-31 +30 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-27 +32 +-29 +32 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-28 +32 +-27 +33 +-28 +31 +-29 +31 +-29 +32 +-30 +32 +-29 +31 +-29 +32 +-28 +33 +-27 +33 +-28 +32 +-29 +32 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-28 +33 +-28 +32 +-28 +32 +-29 +32 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-27 +33 +-27 +33 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +32 +-27 +33 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +32 +-28 +32 +-28 +33 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-27 +33 +-29 +30 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-27 +32 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-28 +32 +-28 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +33 +-27 +33 +-28 +32 +-29 +32 +-29 +32 +-29 +33 +-28 +32 +-28 +32 +-27 +34 +-26 +34 +-28 +32 +-29 +32 +-29 +32 +-28 +32 +-29 +33 +-28 +32 +-27 +34 +-26 +34 +-27 +33 +-28 +32 +-28 +32 +-28 +33 +-29 +32 +-29 +32 +-28 +33 +-27 +32 +-28 +32 +-29 +32 +-29 +31 +-29 +31 +-29 +31 +-30 +30 +-28 +33 +-27 +33 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-27 +32 +-28 +32 +-29 +30 +-30 +31 +-30 +30 +-30 +30 +-30 +30 +-30 +31 +-29 +31 +-28 +32 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +30 +-30 +30 +-29 +32 +-28 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +30 +-31 +31 +-30 +30 +-29 +31 +-28 +32 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-28 +33 +-27 +32 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-29 +32 +-28 +32 +-28 +33 +-26 +33 +-28 +32 +-29 +32 +-29 +31 +-29 +32 +-29 +32 +-29 +32 +-27 +33 +-27 +34 +-29 +32 +-29 +31 +-29 +32 +-29 +32 +-29 +31 +-29 +32 +-28 +33 +-27 +33 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +32 +-30 +31 +-27 +33 +-27 +32 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-28 +32 +-29 +30 +-30 +31 +-30 +32 +-29 +31 +-30 +30 +-30 +31 +-28 +32 +-27 +32 +-29 +32 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +32 +-27 +33 +-27 +33 +-29 +31 +-29 +31 +-30 +32 +-29 +32 +-28 +32 +-29 +32 +-27 +33 +-27 +32 +-29 +32 +-29 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +32 +-27 +33 +-27 +33 +-28 +32 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-28 +32 +-27 +33 +-29 +31 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-28 +32 +-28 +32 +-29 +31 +-30 +31 +-31 +31 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-27 +33 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-28 +32 +-28 +32 +-29 +31 +-29 +31 +-31 +31 +-29 +31 +-30 +31 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-28 +32 +-27 +32 +-30 +31 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-28 +33 +-27 +32 +-30 +31 +-30 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-28 +32 +-28 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-29 +31 +-28 +32 +-28 +32 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +30 +-30 +30 +-29 +32 +-28 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-27 +33 +-27 +33 +-29 +31 +-30 +31 +-30 +31 +-29 +32 +-30 +31 +-29 +32 +-28 +33 +-27 +33 +-28 +32 +-29 +32 +-29 +32 +-29 +32 +-29 +32 +-28 +32 +-27 +32 +-27 +33 +-29 +31 +-30 +30 +-30 +31 +-30 +30 +-29 +31 +-29 +31 +-28 +32 +-28 +32 +-29 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-27 +33 +-27 +33 +-29 +31 +-29 +31 +-29 +32 +-29 +32 +-29 +31 +-29 +30 +-28 +33 +-27 +33 +-28 +32 +-29 +31 +-29 +31 +-29 +32 +-29 +32 +-29 +31 +-25 +35 +-25 +34 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +34 +-26 +33 +-28 +32 +-29 +32 +-29 +32 +-29 +32 +-29 +32 +-29 +32 +73 +-2 +43 +-24 +29 +-33 +26 +-35 +26 +-34 +26 +-34 +27 +-33 +28 +-32 +28 +-29 +30 +-31 +29 +-31 +30 +-31 +29 +-31 +29 +-31 +30 +-30 +30 +-29 +-107 +-44 +-97 +-4 +-59 +23 +-40 +33 +-33 +37 +-27 +41 +-22 +44 +-19 +44 +-15 +47 +-13 +47 +-13 +46 +-14 +45 +-16 +43 +-18 +41 +-21 +39 +-23 +37 +78 +2 +47 +-22 +33 +-30 +28 +-33 +27 +-33 +28 +-32 +28 +-32 +29 +-31 +30 +-28 +31 +-30 +29 +-30 +30 +-31 +29 +-31 +29 +-30 +30 +-30 +31 +-29 +-107 +-42 +-96 +-3 +-58 +22 +-40 +34 +-33 +37 +-27 +40 +-22 +44 +-20 +45 +-14 +48 +-12 +48 +-13 +47 +-13 +45 +-15 +44 +-18 +42 +-20 +39 +-22 +38 +-22 +38 +-22 +37 +-25 +35 +-26 +35 +-26 +34 +-27 +34 +-26 +34 +-27 +33 +-26 +34 +-25 +34 +-27 +33 +-28 +32 +-29 +32 +-29 +32 +-29 +32 +-29 +32 +-27 +33 +-27 +32 +-30 +31 +-29 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-28 +32 +-28 +32 +-29 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +30 +-30 +32 +-28 +32 +-28 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-29 +31 +-28 +32 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-30 +32 +-29 +32 +-28 +32 +-27 +33 +-27 +33 +-28 +32 +-29 +32 +-29 +31 +-29 +31 +-29 +32 +-29 +32 +-27 +33 +-27 +33 +-29 +32 +-28 +32 +-29 +32 +-29 +31 +-29 +31 +-29 +32 +-28 +32 +-27 +33 +-28 +32 +-29 +32 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-28 +31 +-28 +33 +-29 +31 +-29 +30 +-30 +31 +-30 +31 +-30 +31 +-29 +32 +-28 +33 +-27 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +32 +-30 +31 +-29 +32 +-27 +33 +-28 +32 +-29 +31 +-29 +32 +-29 +32 +-29 +32 +-29 +32 +-29 +31 +-27 +33 +-26 +33 +-29 +32 +-29 +31 +-29 +31 +-29 +32 +-30 +32 +-29 +31 +-28 +33 +-27 +32 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-28 +32 +-28 +32 +-29 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-28 +32 +-28 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +32 +-29 +31 +-30 +32 +-27 +33 +-27 +33 +-29 +31 +-29 +31 +-29 +32 +-29 +32 +-29 +32 +-29 +32 +-27 +33 +-27 +33 +-28 +32 +-29 +32 +-29 +31 +-30 +32 +-28 +32 +-29 +32 +-27 +33 +-27 +33 +-29 +32 +-29 +30 +-30 +32 +-29 +32 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-28 +31 +-30 +31 +-29 +32 +-29 +31 +-29 +31 +-30 +31 +-27 +32 +-27 +33 +-29 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +33 +-27 +33 +-28 +32 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-28 +32 +-28 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-28 +32 +-28 +32 +-30 +30 +-30 +30 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-28 +31 +-28 +32 +-30 +30 +-30 +30 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-28 +32 +-28 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +32 +-28 +32 +-27 +33 +-29 +31 +-29 +31 +-29 +32 +-29 +32 +-30 +31 +-29 +32 +73 +-2 +42 +-25 +29 +-33 +26 +-35 +25 +-35 +26 +-34 +26 +-33 +27 +-32 +28 +-30 +30 +-31 +29 +-31 +29 +-32 +29 +-32 +29 +-31 +29 +-31 +30 +-30 +-107 +-44 +-98 +-4 +-59 +22 +-40 +33 +-33 +37 +-28 +39 +-22 +43 +-20 +44 +-15 +47 +-13 +47 +-14 +45 +-15 +45 +-16 +43 +-18 +41 +-21 +39 +-22 +38 +-22 +37 +-23 +37 +-25 +36 +-26 +34 +-27 +34 +-27 +34 +-27 +33 +-28 +34 +-26 +34 +-26 +34 +-27 +32 +-28 +33 +-29 +32 +-29 +32 +-29 +32 +-29 +32 +-27 +33 +-27 +33 +-29 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +32 +-28 +33 +-27 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-28 +33 +-27 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-28 +32 +-27 +33 +-29 +32 +-30 +31 +-29 +32 +-29 +32 +-29 +31 +-29 +31 +-27 +33 +-27 +33 +-28 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +32 +-28 +32 +-28 +33 +-29 +32 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-29 +31 +-28 +33 +-28 +33 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +32 +-29 +32 +-27 +32 +-27 +32 +-29 +32 +-30 +31 +-30 +31 +-29 +32 +-29 +32 +-29 +31 +-27 +33 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +72 +-3 +41 +-26 +28 +-34 +25 +-36 +24 +-35 +25 +-35 +26 +-34 +26 +-33 +27 +-31 +29 +-33 +28 +-32 +28 +-32 +28 +-32 +28 +-31 +29 +-31 +30 +-30 +-108 +-44 +-97 +-4 +-59 +22 +-41 +32 +-33 +37 +-28 +40 +-22 +44 +-20 +44 +-15 +47 +-13 +47 +-13 +47 +-14 +45 +-15 +43 +-18 +41 +-21 +39 +-22 +37 +-22 +38 +-23 +37 +-25 +34 +-26 +34 +-27 +34 +-27 +34 +-27 +34 +-27 +34 +-25 +35 +-25 +35 +-27 +33 +-28 +32 +-27 +33 +-27 +34 +-28 +33 +-28 +32 +-27 +34 +-27 +34 +-28 +32 +-29 +32 +-30 +31 +-29 +32 +-29 +32 +-29 +32 +-28 +33 +-27 +33 +-28 +32 +-29 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-27 +33 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +32 +-28 +32 +-27 +33 +-29 +32 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +72 +-3 +42 +-25 +29 +-34 +25 +-35 +25 +-35 +25 +-34 +26 +-33 +27 +-32 +28 +-30 +30 +-31 +29 +-31 +28 +-32 +29 +-31 +29 +-31 +30 +-30 +30 +-30 +30 +-28 +31 +-29 +31 +-30 +31 +-30 +30 +-30 +30 +-30 +30 +-30 +31 +-29 +31 +-27 +32 +-29 +31 +-29 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-29 +-107 +-43 +-97 +-3 +-58 +23 +-40 +32 +-33 +37 +-28 +41 +-21 +44 +-19 +45 +-15 +47 +-12 +47 +-13 +47 +-14 +45 +-15 +43 +-17 +42 +-20 +39 +-22 +37 +78 +2 +47 +-21 +33 +-30 +29 +-32 +28 +-32 +28 +-31 +29 +-31 +29 +-31 +29 +-28 +31 +-29 +30 +-30 +30 +-31 +29 +-31 +30 +-31 +29 +-31 +30 +-29 +-107 +-43 +-97 +-3 +-59 +23 +-41 +33 +-33 +36 +-28 +40 +-22 +44 +-20 +44 +-16 +47 +-14 +47 +-13 +46 +-14 +45 +-16 +43 +-18 +41 +-20 +39 +-23 +37 +-23 +37 +-23 +37 +-25 +35 +-27 +34 +-27 +33 +-27 +34 +-28 +33 +-27 +33 +-26 +34 +-26 +34 +-27 +32 +-28 +33 +-29 +32 +-29 +32 +-28 +32 +-29 +32 +-27 +33 +-27 +33 +-29 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +32 +-29 +31 +-28 +33 +-28 +33 +-28 +32 +-29 +32 +-29 +32 +-29 +31 +-29 +31 +-29 +32 +-28 +33 +-27 +32 +-29 +32 +-29 +32 +-29 +31 +-30 +32 +-29 +32 +-29 +32 +-28 +32 +-28 +32 +-30 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +32 +-27 +33 +-27 +33 +-29 +32 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-28 +33 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-30 +30 +-29 +31 +-28 +32 +-28 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-30 +31 +-28 +32 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-29 +32 +-29 +31 +-29 +32 +-27 +33 +-27 +33 +-28 +32 +-29 +31 +-29 +32 +-29 +32 +-29 +32 +-29 +32 +-27 +32 +-27 +34 +-28 +32 +-29 +31 +-29 +32 +-29 +32 +-29 +31 +-29 +32 +-27 +33 +-27 +33 +-28 +32 +-29 +32 +-30 +31 +-29 +32 +-29 +31 +-30 +32 +-27 +32 +-27 +33 +-29 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-28 +33 +-27 +33 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-28 +32 +-28 +32 +-29 +31 +-29 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-28 +32 +-28 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-27 +32 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-29 +32 +-29 +31 +-29 +32 +-27 +33 +-26 +33 +-28 +31 +-29 +32 +-30 +31 +-29 +31 +-29 +32 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +30 +-31 +30 +-29 +31 +-30 +31 +-29 +32 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-27 +33 +-27 +33 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +30 +-29 +32 +-28 +33 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-28 +32 +-28 +32 +-30 +31 +-29 +31 +-30 +30 +-30 +30 +-30 +31 +-29 +31 +-29 +32 +-28 +32 +-29 +30 +-30 +31 +-30 +30 +-30 +30 +-31 +31 +-30 +31 +-28 +32 +-28 +32 +-29 +31 +-30 +30 +-30 +31 +-30 +30 +-30 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-28 +33 +-27 +32 +-29 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +32 +-29 +32 +-28 +32 +-27 +33 +-28 +32 +-29 +32 +-29 +31 +-29 +32 +-29 +32 +-28 +32 +-27 +34 +-26 +34 +-29 +32 +-29 +31 +-29 +31 +-30 +32 +-30 +31 +-29 +32 +-28 +33 +-27 +32 +-29 +31 +-30 +32 +-29 +32 +-29 +31 +-29 +31 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +30 +-28 +32 +-28 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-28 +32 +-27 +33 +-28 +32 +-29 +32 +-29 +31 +-29 +32 +-29 +32 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +32 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-30 +30 +-30 +30 +-30 +32 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +32 +-29 +32 +-29 +31 +-29 +32 +-27 +33 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +33 +-29 +32 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +-29 +32 +-27 +33 +-27 +33 +-28 +32 +-29 +32 +-29 +31 +-29 +32 +-30 +32 +-29 +32 +-27 +33 +-27 +33 +-28 +32 +-29 +31 +-29 +32 +-29 +32 +-29 +31 +-29 +32 +-27 +33 +-27 +33 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-29 +32 +-30 +31 +-28 +32 +-28 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-28 +32 +-28 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +32 +-28 +33 +-27 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-27 +33 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +32 +-28 +33 +-27 +32 +-29 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +32 +-28 +32 +-27 +33 +-29 +31 +-30 +31 +-30 +30 +-30 +32 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +32 +-29 +32 +-29 +31 +-28 +33 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +33 +-27 +32 +-29 +31 +-30 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-27 +33 +-27 +33 +-29 +31 +-29 +31 +-29 +32 +-29 +32 +-29 +31 +-30 +32 +-28 +33 +-26 +33 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-26 +34 +-26 +33 +-28 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-28 +33 +-27 +33 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +32 +73 +-3 +42 +-26 +29 +-33 +25 +-35 +25 +-35 +25 +-34 +26 +-33 +28 +-32 +29 +-29 +30 +-31 +29 +-32 +29 +-32 +28 +-31 +29 +-31 +29 +-31 +30 +-30 +-107 +-43 +-97 +-4 +-59 +22 +-41 +33 +-33 +36 +-28 +40 +-22 +43 +-20 +44 +-16 +47 +-14 +47 +-13 +46 +-14 +45 +-16 +43 +-18 +41 +-20 +39 +-23 +37 +77 +1 +46 +-22 +33 +-30 +28 +-32 +28 +-32 +28 +-32 +28 +-32 +29 +-31 +29 +-29 +31 +-30 +29 +-30 +30 +-31 +30 +-30 +30 +-30 +30 +-30 +31 +-29 +-107 +-42 +-96 +-3 +-58 +23 +-40 +34 +-32 +37 +-28 +40 +-21 +45 +-19 +45 +-14 +47 +-12 +48 +-13 +47 +-14 +45 +-15 +44 +-18 +41 +-21 +38 +-22 +38 +-22 +38 +-23 +36 +-25 +34 +-27 +34 +-27 +33 +-27 +33 +-28 +33 +-27 +33 +-26 +34 +-26 +34 +-28 +32 +-28 +32 +-29 +31 +-29 +32 +-29 +31 +-29 +32 +-27 +33 +-27 +32 +-29 +31 +-30 +32 +-30 +30 +-30 +31 +-30 +31 +-29 +32 +-27 +32 +-28 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +30 +-28 +32 +-28 +32 +-29 +31 +-29 +32 +-30 +31 +-30 +31 +-30 +31 +-29 +32 +-28 +32 +-28 +33 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +32 +-29 +32 +-27 +33 +-27 +33 +-29 +32 +-29 +31 +-30 +32 +-29 +31 +-30 +31 +-29 +32 +-27 +33 +-27 +33 +-29 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +32 +-28 +33 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-30 +31 +-27 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-28 +32 +-27 +33 +-28 +31 +-29 +31 +-30 +32 +-29 +31 +-30 +31 +-29 +32 +-27 +33 +-27 +33 +-28 +32 +-29 +32 +-28 +32 +-29 +32 +-29 +32 +-28 +32 +-27 +34 +-26 +33 +-29 +31 +-28 +33 +-28 +33 +-28 +32 +-29 +32 +-29 +32 +-27 +34 +-26 +34 +-28 +32 +-29 +32 +-29 +31 +-29 +32 +-29 +31 +-29 +32 +-27 +32 +-27 +33 +-29 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-28 +32 +-29 +31 +-30 +30 +-31 +30 +-30 +30 +-31 +29 +-31 +31 +-28 +32 +-28 +31 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +30 +-29 +31 +-28 +32 +-28 +32 +-29 +30 +-30 +30 +-31 +31 +-29 +31 +-30 +31 +-30 +31 +-28 +32 +-28 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +33 +-27 +32 +-29 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +32 +-29 +32 +-26 +33 +-26 +33 +-29 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-28 +32 +-27 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +32 +-27 +33 +-29 +32 +-29 +31 +-30 +32 +-29 +32 +-29 +31 +-29 +31 +-28 +33 +-27 +32 +-29 +32 +-30 +32 +-29 +31 +-29 +32 +-29 +31 +-30 +31 +-27 +33 +-27 +33 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-28 +32 +-29 +32 +-29 +31 +-29 +31 +-30 +32 +-29 +32 +73 +-2 +42 +-25 +29 +-33 +26 +-34 +26 +-34 +26 +-34 +27 +-33 +28 +-32 +28 +-29 +31 +-31 +29 +-30 +30 +-31 +29 +-31 +30 +-31 +29 +-30 +30 +-30 +-108 +-44 +-98 +-3 +-58 +22 +-40 +33 +-33 +37 +-28 +40 +-22 +43 +-20 +44 +-16 +47 +-13 +47 +-13 +46 +-14 +45 +-16 +43 +-18 +41 +-20 +39 +-23 +37 +-22 +37 +-23 +37 +-26 +35 +-27 +33 +-27 +33 +-28 +33 +-27 +33 +-27 +33 +-26 +34 +-27 +34 +-27 +33 +-28 +32 +-29 +31 +-29 +32 +-28 +32 +-29 +32 +-27 +32 +-27 +33 +-29 +32 +-30 +31 +-29 +30 +-30 +31 +-30 +31 +-29 +31 +-28 +33 +-27 +33 +-28 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-28 +32 +-28 +33 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-28 +33 +-28 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-30 +32 +-29 +32 +-27 +33 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +32 +-29 +32 +-29 +31 +-28 +32 +-27 +33 +-28 +32 +-29 +32 +-29 +32 +-28 +32 +-29 +32 +-30 +32 +-27 +34 +-26 +33 +-28 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-28 +32 +-27 +33 +-27 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +33 +-27 +32 +-29 +31 +-29 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-28 +32 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +72 +-4 +42 +-26 +29 +-33 +25 +-35 +25 +-35 +25 +-34 +26 +-33 +27 +-33 +28 +-30 +29 +-32 +29 +-32 +29 +-32 +28 +-31 +29 +-31 +30 +-30 +30 +-30 +-108 +-44 +-97 +-3 +-58 +23 +-40 +33 +-33 +37 +-28 +40 +-22 +44 +-19 +44 +-15 +47 +-13 +47 +-13 +46 +-13 +46 +-15 +44 +-17 +41 +-20 +40 +-22 +38 +-21 +38 +-22 +38 +-25 +36 +-26 +34 +-27 +34 +-27 +34 +-27 +34 +-27 +33 +-26 +34 +-25 +34 +-27 +32 +-28 +32 +-29 +32 +-28 +32 +-29 +32 +-29 +32 +-27 +33 +-27 +32 +-29 +32 +-29 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-28 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +32 +-29 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-28 +33 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +32 +73 +-2 +42 +-25 +29 +-34 +25 +-35 +25 +-35 +25 +-35 +25 +-34 +27 +-33 +28 +-30 +30 +-30 +29 +-31 +29 +-31 +29 +-31 +30 +-31 +30 +-30 +29 +-30 +31 +-27 +32 +-29 +30 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-26 +33 +-28 +31 +-29 +31 +-29 +30 +-29 +31 +-29 +31 +-29 +31 +-28 +-106 +-43 +-96 +-2 +-58 +23 +-39 +34 +-32 +38 +-27 +41 +-21 +44 +-19 +45 +-15 +47 +-13 +47 +-13 +47 +-14 +45 +-15 +43 +-18 +41 +-21 +38 +-23 +37 +78 +2 +46 +-22 +33 +-30 +28 +-32 +28 +-32 +28 +-32 +29 +-31 +29 +-31 +30 +-29 +31 +-30 +30 +-30 +30 +-31 +30 +-30 +30 +-31 +30 +-30 +30 +-29 +-107 +-43 +-97 +-3 +-58 +23 +-40 +34 +-32 +37 +-28 +40 +-22 +43 +-20 +44 +-15 +47 +-13 +47 +-13 +46 +-14 +45 +-16 +43 +-18 +41 +-20 +39 +-22 +38 +-22 +38 +-23 +37 +-25 +35 +-26 +34 +-27 +34 +-27 +34 +-27 +34 +-27 +34 +-25 +34 +-25 +35 +-27 +33 +-28 +32 +-28 +32 +-29 +32 +-29 +32 +-29 +32 +-27 +33 +-27 +33 +-28 +31 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +-27 +33 +-27 +33 +-28 +32 +-29 +31 +-30 +31 +-29 +32 +-29 +31 +-29 +32 +-28 +33 +-27 +33 +-28 +32 +-29 +31 +-30 +31 +-29 +32 +-29 +32 +-29 +31 +-27 +34 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-28 +32 +-28 +33 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-28 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +32 +-29 +32 +-28 +33 +-27 +33 +-28 +31 +-29 +32 +-29 +32 +-29 +32 +-29 +32 +-29 +32 +-27 +33 +-27 +33 +-28 +32 +-29 +32 +-30 +31 +-29 +31 +-30 +31 +-29 +31 +-28 +33 +-27 +33 +-28 +32 +-29 +32 +-29 +31 +-30 +32 +-29 +31 +-29 +31 +-27 +33 +-27 +33 +-29 +31 +-30 +32 +-29 +31 +-30 +31 +-29 +32 +-29 +31 +-28 +32 +-27 +32 +-29 +32 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-28 +32 +-28 +32 +-29 +31 +-30 +30 +-31 +30 +-30 +31 +-30 +30 +-30 +31 +-28 +32 +-28 +32 +-29 +31 +-30 +30 +-30 +30 +-31 +30 +-31 +30 +-30 +30 +-28 +32 +-27 +32 +-29 +30 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-28 +32 +-28 +31 +-30 +31 +-30 +30 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-28 +32 +-28 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +32 +-29 +31 +-26 +33 +-27 +33 +-29 +31 +-29 +31 +-29 +32 +-29 +32 +-29 +32 +-29 +31 +-27 +34 +-26 +33 +-28 +32 +-29 +32 +-29 +31 +-29 +32 +-29 +32 +-29 +32 +-27 +33 +-27 +33 +-28 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-29 +31 +-28 +32 +-27 +33 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-28 +32 +-27 +33 +-29 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +33 +-27 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +32 +-29 +31 +-30 +31 +-28 +32 +-27 +33 +-29 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +34 +-27 +33 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-29 +31 +-27 +33 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-29 +32 +-28 +33 +-27 +32 +-29 +32 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-29 +32 +-27 +32 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-28 +33 +-27 +33 +-29 +32 +-29 +32 +-30 +31 +-29 +31 +-30 +31 +-30 +31 +-27 +33 +-27 +33 +-29 +32 +-29 +31 +-29 +31 +-30 +32 +-29 +31 +-29 +31 +-28 +33 +-27 +32 +-29 +32 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-28 +32 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-28 +32 +-28 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +30 +-30 +31 +-29 +31 +-27 +32 +-27 +33 +-29 +31 +-30 +30 +-30 +31 +-30 +32 +-30 +31 +-29 +32 +-28 +32 +-27 +33 +-28 +31 +-29 +32 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +-27 +32 +-27 +33 +-29 +31 +-30 +30 +-30 +31 +-29 +31 +-29 +31 +-29 +32 +-28 +32 +-28 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +32 +-29 +32 +-27 +33 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +32 +-28 +33 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-29 +31 +-28 +33 +-27 +33 +-29 +32 +-29 +32 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-27 +33 +-27 +33 +-29 +31 +-29 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-27 +33 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +30 +-28 +32 +-28 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-30 +30 +-30 +31 +-29 +32 +-27 +32 +-28 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-28 +32 +-28 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-28 +32 +-28 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-30 +31 +-28 +33 +-27 +33 +-29 +31 +-30 +31 +-29 +31 +-29 +32 +-29 +31 +-29 +32 +-27 +33 +-27 +33 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +32 +-26 +33 +-26 +33 +-28 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-27 +33 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +73 +-3 +42 +-25 +30 +-33 +26 +-34 +25 +-34 +27 +-34 +28 +-32 +28 +-32 +29 +-29 +31 +-30 +30 +-30 +30 +-31 +29 +-30 +30 +-30 +30 +-30 +31 +-29 +-107 +-43 +-97 +-3 +-58 +23 +-40 +33 +-33 +37 +-27 +40 +-22 +43 +-20 +45 +-15 +47 +-13 +47 +-13 +47 +-14 +45 +-16 +42 +-19 +40 +-21 +39 +-22 +37 +78 +2 +46 +-22 +32 +-31 +28 +-33 +27 +-32 +28 +-32 +28 +-31 +29 +-30 +29 +-28 +31 +-30 +30 +-30 +29 +-31 +29 +-31 +30 +-30 +30 +-30 +30 +-30 +-107 +-44 +-97 +-4 +-59 +22 +-40 +33 +-33 +37 +-28 +40 +-22 +43 +-19 +45 +-14 +48 +-12 +47 +-13 +47 +-14 +45 +-16 +43 +-18 +41 +-20 +40 +-22 +38 +-22 +38 +-23 +37 +-25 +35 +-26 +34 +-27 +34 +-27 +34 +-27 +34 +-27 +32 +-26 +35 +-26 +34 +-27 +33 +-28 +33 +-29 +32 +-29 +32 +-29 +31 +-29 +32 +-27 +33 +-26 +33 +-28 +32 +-29 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-28 +32 +-28 +33 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +32 +-27 +33 +-27 +32 +-29 +32 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-28 +33 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-27 +32 +-27 +33 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-28 +32 +-28 +33 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-30 +30 +-28 +32 +-28 +33 +-29 +31 +-29 +31 +-30 +32 +-29 +32 +-29 +31 +-29 +32 +-28 +33 +-27 +32 +-29 +32 +-29 +32 +-30 +31 +-29 +31 +-29 +32 +-29 +32 +-27 +33 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-29 +32 +-29 +32 +-29 +31 +-28 +33 +-27 +33 +-29 +31 +-30 +31 +-29 +31 +-29 +32 +-29 +31 +-29 +32 +-27 +33 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +32 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-28 +33 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +32 +-28 +32 +-27 +33 +-29 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-28 +32 +-28 +33 +-28 +32 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-30 +31 +-27 +32 +-27 +33 +-29 +31 +-30 +30 +-30 +30 +-30 +30 +-30 +31 +-29 +31 +-28 +32 +-28 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +30 +-30 +30 +-30 +31 +-28 +31 +-28 +32 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-28 +33 +-28 +32 +-29 +31 +-29 +32 +-29 +32 +-29 +32 +-29 +32 +-29 +32 +-27 +33 +-27 +33 +-29 +32 +-28 +32 +-29 +31 +-29 +32 +-29 +32 +-28 +33 +-27 +34 +-26 +33 +-28 +32 +-30 +31 +-29 +31 +-29 +32 +-29 +31 +-29 +32 +-28 +33 +-27 +33 +-28 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-28 +32 +-28 +32 +-29 +32 +-29 +32 +-29 +31 +-30 +31 +-30 +32 +-30 +31 +-27 +32 +-28 +33 +-29 +31 +-29 +31 +-30 +31 +-29 +32 +-29 +32 +-29 +32 +-27 +33 +-27 +32 +-29 +32 +-29 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +32 +-27 +32 +-27 +33 +-29 +31 +-29 +32 +-29 +31 +-30 +32 +-29 +31 +-29 +32 +73 +-3 +42 +-25 +29 +-33 +25 +-35 +25 +-35 +26 +-34 +26 +-33 +27 +-33 +28 +-30 +30 +-31 +29 +-31 +29 +-32 +29 +-31 +30 +-30 +30 +-31 +30 +-29 +-107 +-43 +-97 +-4 +-58 +22 +-41 +33 +-33 +36 +-28 +40 +-22 +44 +-20 +44 +-15 +46 +-13 +47 +-13 +46 +-14 +45 +-16 +42 +-18 +41 +-21 +39 +-23 +37 +-22 +37 +-23 +36 +-25 +35 +-26 +34 +-27 +34 +-27 +34 +-27 +34 +-28 +33 +-25 +34 +-25 +35 +-27 +32 +-28 +33 +-28 +32 +-29 +32 +-29 +32 +-29 +32 +-27 +33 +-27 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-30 +31 +-28 +32 +-27 +33 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-28 +32 +-28 +31 +-29 +31 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-28 +32 +-28 +32 +-30 +30 +-30 +30 +-31 +31 +-30 +31 +-30 +31 +-29 +32 +-28 +33 +-27 +32 +-29 +31 +-30 +31 +-31 +31 +-29 +32 +-29 +32 +-29 +32 +-28 +32 +-27 +33 +-28 +32 +-29 +32 +-29 +31 +-29 +31 +-29 +32 +-28 +32 +-27 +33 +-27 +33 +-28 +31 +-30 +32 +-29 +32 +-29 +31 +-29 +32 +-29 +31 +-28 +32 +-27 +32 +-29 +32 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-28 +33 +-28 +33 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-27 +33 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-29 +31 +73 +-3 +41 +-26 +29 +-33 +26 +-35 +25 +-34 +26 +-34 +27 +-33 +27 +-33 +28 +-30 +30 +-32 +28 +-32 +28 +-32 +29 +-31 +29 +-31 +29 +-31 +30 +-30 +-108 +-45 +-97 +-3 +-59 +22 +-40 +32 +-33 +36 +-28 +40 +-22 +43 +-20 +44 +-16 +46 +-14 +47 +-13 +46 +-15 +44 +-16 +41 +-19 +41 +-21 +39 +-23 +37 +-23 +37 +-23 +37 +-25 +34 +-26 +34 +-27 +34 +-27 +33 +-27 +33 +-27 +33 +-26 +35 +-25 +34 +-27 +33 +-28 +33 +-28 +32 +-28 +32 +-28 +33 +-28 +32 +-27 +33 +-27 +34 +-28 +31 +-29 +32 +-30 +32 +-29 +31 +-29 +32 +-29 +32 +-27 +33 +-26 +33 +-28 +32 +-29 +32 +-29 +32 +-29 +32 +-29 +32 +-29 +32 +-27 +33 +-27 +33 +-28 +32 +-29 +31 +-29 +32 +-29 +32 +-29 +32 +-29 +32 +-27 +33 +-26 +33 +-29 +32 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-29 +32 +73 +-2 +42 +-25 +29 +-34 +25 +-35 +25 +-35 +26 +-34 +26 +-34 +27 +-33 +27 +-30 +30 +-31 +28 +-31 +28 +-32 +29 +-31 +29 +-31 +30 +-30 +30 +-30 +30 +-28 +31 +-29 +30 +-30 +30 +-31 +29 +-31 +30 +-31 +30 +-30 +30 +-30 +31 +-27 +33 +-28 +31 +-29 +30 +-30 +30 +-30 +31 +-29 +31 +-29 +31 +-29 +-107 +-43 +-97 +-3 +-58 +23 +-39 +34 +-31 +38 +-27 +41 +-21 +45 +-19 +45 +-15 +48 +-12 +48 +-12 +48 +-13 +46 +-15 +43 +-17 +41 +-21 +40 +-21 +38 +79 +2 +46 +-21 +33 +-30 +29 +-32 +28 +-31 +29 +-31 +30 +-31 +29 +-30 +30 +-28 +32 +-29 +31 +-30 +30 +-31 +30 +-30 +30 +-30 +30 +-30 +31 +-29 +-107 +-43 +-97 +-3 +-58 +22 +-40 +33 +-33 +37 +-28 +40 +-21 +43 +-20 +45 +-15 +47 +-13 +47 +-14 +46 +-15 +45 +-16 +42 +-19 +41 +-21 +39 +-23 +37 +-23 +37 +-23 +37 +-25 +35 +-27 +33 +-27 +33 +-27 +34 +-27 +33 +-27 +34 +-26 +34 +-25 +34 +-27 +33 +-28 +33 +-28 +32 +-29 +31 +-29 +32 +-29 +32 +-27 +33 +-27 +33 +-28 +32 +-29 +32 +-29 +31 +-30 +32 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-28 +32 +-29 +32 +-29 +31 +-29 +32 +-29 +32 +-29 +32 +-27 +33 +-27 +33 +-29 +31 +-29 +32 +-29 +32 +-29 +32 +-28 +32 +-29 +32 +-27 +33 +-26 +34 +-28 +32 +-29 +31 +-29 +31 +-29 +32 +-29 +32 +-28 +32 +-26 +34 +-26 +34 +-28 +32 +-29 +32 +-29 +32 +-29 +32 +-29 +31 +-29 +32 +-28 +33 +-27 +33 +-28 +32 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +30 +-28 +32 +-28 +32 +-30 +30 +-30 +31 +-30 +30 +-30 +30 +-30 +30 +-30 +31 +-29 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-28 +32 +-28 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-29 +31 +-28 +33 +-27 +33 +-29 +31 +-29 +32 +-29 +32 +-29 +32 +-29 +31 +-29 +32 +-28 +32 +-27 +32 +-29 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-26 +33 +-28 +31 +-29 +31 +-30 +32 +-29 +31 +-29 +32 +-29 +32 +-27 +33 +-27 +33 +-29 +31 +-29 +31 +-29 +31 +-30 +32 +-29 +31 +-29 +31 +-28 +33 +-27 +33 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +32 +-29 +32 +-28 +33 +-27 +33 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-28 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +32 +-29 +32 +-27 +33 +-28 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-27 +33 +-27 +32 +-29 +31 +-30 +30 +-31 +30 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-27 +32 +-29 +32 +-29 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-27 +33 +-27 +33 +-28 +32 +-29 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +32 +-29 +31 +-29 +31 +-29 +32 +-30 +32 +-28 +32 +-27 +33 +-27 +33 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-29 +32 +-29 +32 +-27 +32 +-27 +33 +-29 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-28 +33 +-27 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-30 +32 +-30 +32 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +-27 +33 +-27 +33 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-29 +32 +-28 +32 +-28 +32 +-29 +30 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-28 +32 +-28 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-28 +33 +-27 +33 +-29 +31 +-30 +31 +-30 +30 +-29 +32 +-30 +32 +-29 +31 +-28 +32 +-28 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +33 +-27 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +32 +-29 +31 +-28 +33 +-28 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +32 +-27 +33 +-26 +33 +-29 +32 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-30 +31 +-28 +32 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +30 +-30 +31 +-28 +33 +-27 +32 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-28 +32 +-27 +33 +-29 +32 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +-29 +32 +-27 +33 +-27 +33 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-28 +32 +-27 +33 +-27 +33 +-28 +32 +-29 +32 +-29 +31 +-29 +31 +-29 +32 +-29 +32 +-26 +33 +-27 +33 +-29 +32 +-29 +31 +-30 +31 +-29 +32 +-29 +31 +-30 +31 +-28 +33 +-28 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-28 +32 +-28 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-28 +32 +-28 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +32 +-29 +31 +-27 +32 +-27 +34 +-29 +32 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-28 +32 +-27 +34 +-28 +32 +-29 +32 +-30 +31 +-29 +32 +-29 +31 +-29 +32 +-27 +33 +-27 +33 +-29 +32 +-29 +31 +-29 +31 +-29 +32 +-30 +31 +-29 +32 +-28 +33 +-28 +32 +-29 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +30 +-28 +32 +-27 +32 +-30 +30 +-30 +30 +-30 +30 +-30 +31 +-30 +30 +-30 +31 +-28 +32 +-28 +32 +-29 +30 +-30 +30 +-31 +30 +-30 +31 +-30 +31 +-30 +31 +-26 +33 +-26 +33 +-29 +31 +-30 +30 +-31 +30 +-30 +30 +-30 +30 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +72 +-3 +42 +-25 +29 +-33 +25 +-36 +25 +-34 +25 +-34 +27 +-33 +27 +-32 +28 +-29 +30 +-31 +29 +-31 +30 +-31 +29 +-31 +30 +-31 +30 +-31 +30 +-30 +-107 +-44 +-97 +-4 +-58 +23 +-41 +33 +-33 +36 +-28 +41 +-22 +44 +-19 +45 +-15 +47 +-13 +48 +-12 +47 +-13 +46 +-16 +44 +-18 +41 +-20 +39 +-22 +38 +78 +2 +47 +-21 +33 +-30 +29 +-32 +28 +-32 +28 +-32 +27 +-31 +30 +-31 +30 +-28 +31 +-30 +30 +-30 +30 +-31 +29 +-31 +29 +-31 +30 +-31 +30 +-30 +-107 +-43 +-97 +-3 +-59 +22 +-40 +33 +-33 +36 +-28 +39 +-22 +43 +-20 +43 +-16 +46 +-14 +47 +-14 +45 +-15 +44 +-17 +42 +-19 +40 +-21 +38 +-23 +37 +-23 +37 +-23 +36 +-26 +35 +-27 +33 +-27 +33 +-28 +33 +-28 +33 +-28 +33 +-27 +34 +-26 +34 +-28 +32 +-28 +32 +-29 +32 +-29 +32 +-29 +31 +-29 +32 +-27 +33 +-27 +33 +-28 +32 +-29 +32 +-29 +31 +-29 +32 +-29 +32 +-29 +31 +-28 +32 +-28 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-28 +32 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-28 +33 +-28 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-27 +33 +-27 +33 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-27 +33 +-27 +33 +-28 +31 +-29 +32 +-30 +31 +-29 +31 +-29 +32 +-30 +32 +-27 +32 +-27 +33 +-29 +32 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-29 +31 +-28 +33 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-29 +32 +-29 +31 +-29 +32 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +32 +-30 +31 +-29 +31 +-27 +33 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-28 +32 +-27 +33 +-29 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-28 +33 +-27 +33 +-28 +31 +-29 +32 +-29 +31 +-29 +31 +-29 +32 +-29 +32 +-27 +33 +-26 +33 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-29 +32 +-29 +32 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-28 +32 +-28 +33 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +33 +-27 +32 +-29 +32 +-29 +32 +-29 +32 +-29 +31 +-29 +31 +-29 +32 +-27 +33 +-26 +33 +-28 +32 +-29 +32 +-28 +32 +-29 +32 +-29 +31 +-29 +32 +-27 +33 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-29 +32 +-27 +33 +-28 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-30 +31 +-27 +33 +-27 +33 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-28 +33 +-27 +33 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-30 +31 +-28 +32 +-28 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-28 +32 +-28 +33 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-28 +33 +-27 +32 +-29 +31 +-30 +30 +-30 +31 +-29 +32 +-29 +31 +-30 +32 +-28 +32 +-27 +32 +-29 +32 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +72 +-3 +42 +-26 +29 +-33 +25 +-35 +25 +-35 +26 +-34 +26 +-33 +27 +-32 +28 +-29 +31 +-31 +29 +-31 +28 +-31 +29 +-31 +30 +-31 +30 +-30 +30 +-30 +-107 +-44 +-97 +-3 +-59 +22 +-40 +33 +-33 +37 +-28 +39 +-22 +44 +-19 +45 +-15 +47 +-13 +47 +-13 +46 +-14 +45 +-16 +42 +-18 +41 +-21 +39 +-23 +37 +-22 +37 +-23 +37 +-25 +35 +-26 +34 +-27 +33 +-28 +33 +-28 +33 +-28 +33 +-27 +34 +-26 +33 +-28 +33 +-28 +32 +-29 +32 +-29 +32 +-29 +32 +-29 +32 +-27 +33 +-27 +33 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +-29 +32 +-28 +33 +-27 +33 +-28 +32 +-30 +31 +-29 +32 +-28 +32 +-29 +32 +-29 +31 +-27 +33 +-27 +32 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-30 +31 +-28 +32 +-27 +33 +-29 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-28 +33 +-27 +33 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-28 +32 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +32 +-27 +33 +-27 +33 +-28 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +32 +-27 +33 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-29 +31 +-28 +32 +-27 +32 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +30 +-29 +32 +-28 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-30 +31 +72 +-4 +41 +-26 +28 +-34 +24 +-36 +25 +-34 +27 +-33 +26 +-34 +28 +-32 +28 +-30 +29 +-31 +29 +-32 +29 +-32 +28 +-32 +29 +-31 +30 +-30 +29 +-30 +-108 +-44 +-97 +-3 +-59 +22 +-40 +33 +-33 +37 +-28 +40 +-22 +43 +-20 +44 +-16 +47 +-13 +47 +-13 +46 +-14 +45 +-15 +43 +-18 +40 +-21 +39 +-23 +38 +-21 +38 +-23 +38 +-25 +35 +-25 +35 +-26 +35 +-26 +34 +-26 +34 +-26 +34 +-25 +35 +-24 +35 +-27 +33 +-27 +33 +-28 +33 +-28 +32 +-28 +33 +-28 +33 +-26 +33 +-26 +33 +-28 +32 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-28 +33 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-30 +30 +-29 +31 +-29 +33 +-26 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-29 +32 +73 +-2 +42 +-25 +29 +-34 +25 +-36 +25 +-35 +26 +-34 +26 +-34 +27 +-32 +28 +-29 +30 +-31 +29 +-31 +29 +-31 +28 +-31 +30 +-31 +30 +-31 +29 +-30 +30 +-27 +32 +-29 +31 +-30 +30 +-31 +29 +-30 +30 +-30 +30 +-31 +29 +-30 +30 +-28 +31 +-29 +30 +-30 +30 +-30 +29 +-30 +30 +-31 +30 +-30 +30 +-30 +-107 +-44 +-97 +-4 +-59 +23 +-39 +33 +-33 +37 +-28 +40 +-22 +44 +-19 +44 +-16 +46 +-14 +48 +-13 +46 +-15 +44 +-16 +43 +-18 +41 +-20 +39 +-23 +37 +77 +1 +47 +-21 +33 +-30 +28 +-32 +28 +-32 +29 +-31 +28 +-30 +30 +-30 +31 +-27 +32 +-29 +31 +-29 +31 +-29 +30 +-30 +31 +-29 +31 +-29 +31 +-28 +-106 +-42 +-95 +-2 +-57 +24 +-39 +35 +-31 +38 +-26 +42 +-21 +45 +-18 +46 +-14 +47 +-12 +48 +-12 +47 +-13 +45 +-15 +44 +-18 +41 +-20 +39 +-22 +38 +-22 +38 +-22 +37 +-25 +35 +-26 +34 +-27 +33 +-27 +33 +-27 +34 +-27 +34 +-26 +34 +-26 +34 +-28 +32 +-28 +31 +-29 +32 +-29 +32 +-29 +31 +-29 +31 +-28 +33 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-28 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-28 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-28 +32 +-29 +31 +-30 +31 +-30 +32 +-29 +31 +-29 +32 +-29 +32 +-27 +33 +-26 +33 +-28 +32 +-29 +31 +-29 +32 +-29 +32 +-29 +32 +-28 +33 +-27 +33 +-26 +33 +-28 +32 +-29 +32 +-29 +32 +-28 +32 +-29 +32 +-29 +32 +-26 +33 +-27 +33 +-29 +32 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-29 +32 +-28 +32 +-28 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-27 +33 +-28 +33 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-29 +32 +-29 +32 +-28 +33 +-27 +33 +-28 +32 +-29 +32 +-29 +32 +-29 +32 +-29 +32 +-28 +32 +-27 +33 +-26 +33 +-28 +32 +-29 +32 +-29 +32 +-29 +31 +-29 +32 +-29 +32 +-27 +33 +-27 +33 +-29 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +32 +-27 +34 +-26 +33 +-29 +32 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-28 +32 +-27 +32 +-30 +30 +-30 +30 +-30 +30 +-30 +30 +-31 +30 +-30 +30 +-28 +32 +-28 +32 +-29 +30 +-30 +30 +-31 +30 +-30 +30 +-30 +30 +-30 +31 +-28 +32 +-28 +32 +-29 +31 +-30 +31 +-29 +30 +-30 +31 +-30 +31 +-29 +31 +-28 +32 +-28 +32 +-30 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +32 +-27 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-28 +32 +-28 +33 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +32 +-27 +33 +-29 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +30 +-29 +32 +-27 +33 +-27 +33 +-29 +31 +-30 +32 +-30 +30 +-30 +31 +-29 +32 +-29 +31 +-27 +33 +-26 +33 +-28 +32 +-29 +31 +-29 +32 +-29 +32 +-28 +31 +-29 +31 +-28 +33 +-27 +33 +-29 +32 +-29 +31 +-30 +31 +-29 +32 +-29 +32 +-29 +31 +-28 +33 +-27 +33 +-29 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-28 +32 +-28 +31 +-29 +31 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-29 +31 +-28 +31 +-28 +32 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +30 +-30 +31 +-28 +32 +-28 +32 +-30 +31 +-30 +30 +-30 +30 +-31 +30 +-31 +30 +-30 +30 +-29 +32 +-28 +32 +-30 +30 +-30 +30 +-31 +30 +-30 +30 +-30 +30 +-30 +30 +-28 +31 +-28 +32 +-29 +31 +-30 +30 +-31 +30 +-30 +31 +-30 +31 +-30 +30 +-28 +33 +-27 +33 +-29 +31 +-30 +32 +-30 +31 +-30 +31 +-29 +32 +-29 +31 +-27 +33 +-27 +33 +-28 +32 +-29 +32 +-29 +32 +-29 +32 +-29 +32 +-28 +33 +-27 +33 +-26 +34 +-28 +32 +-29 +33 +-28 +32 +-28 +33 +-28 +33 +-28 +32 +-26 +34 +-26 +35 +-27 +33 +-28 +32 +-29 +32 +-29 +31 +-29 +33 +-28 +32 +-27 +33 +-27 +33 +-29 +32 +-29 +32 +-29 +32 +-29 +32 +-29 +32 +-29 +31 +-27 +33 +-27 +33 +-28 +31 +-30 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +33 +-27 +32 +-29 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-27 +32 +-28 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-28 +33 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-30 +31 +-27 +32 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-28 +33 +-27 +33 +-29 +31 +-30 +32 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-27 +32 +-27 +32 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-28 +32 +-29 +31 +-29 +31 +-31 +31 +-29 +31 +-29 +31 +-30 +31 +-28 +32 +-28 +32 +-29 +32 +-29 +31 +-30 +31 +-30 +32 +-29 +31 +-29 +31 +-27 +33 +-27 +33 +-29 +32 +-29 +32 +-29 +32 +-29 +31 +-30 +31 +-30 +31 +-27 +33 +-27 +33 +-29 +31 +-29 +30 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-28 +33 +-27 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +30 +-31 +31 +-29 +31 +-27 +32 +-28 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +30 +-29 +31 +-30 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +30 +-30 +30 +-31 +31 +-29 +31 +-29 +31 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +32 +-30 +31 +-29 +31 +-30 +32 +-29 +31 +-27 +33 +-27 +33 +-29 +32 +-29 +31 +-30 +32 +-29 +32 +-28 +32 +-29 +32 +-27 +33 +-26 +33 +-28 +32 +-29 +31 +-29 +31 +-29 +32 +-29 +32 +-29 +32 +-25 +34 +-25 +34 +-28 +31 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +32 +-28 +33 +-27 +33 +-28 +32 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +73 +-3 +42 +-26 +29 +-33 +25 +-35 +25 +-34 +26 +-34 +26 +-34 +27 +-33 +27 +-30 +30 +-31 +29 +-31 +29 +-32 +29 +-31 +30 +-31 +29 +-30 +30 +-30 +-108 +-44 +-97 +-3 +-59 +23 +-40 +33 +-33 +37 +-28 +40 +-22 +43 +-20 +45 +-15 +47 +-13 +47 +-13 +47 +-14 +45 +-16 +42 +-19 +41 +-21 +39 +-23 +37 +78 +2 +46 +-22 +32 +-30 +28 +-33 +28 +-32 +28 +-32 +29 +-31 +30 +-30 +30 +-28 +31 +-30 +30 +-30 +30 +-31 +30 +-30 +30 +-31 +30 +-30 +30 +-30 +-108 +-43 +-96 +-3 +-59 +22 +-40 +32 +-33 +37 +-28 +40 +-22 +43 +-20 +44 +-16 +47 +-13 +47 +-13 +46 +-15 +45 +-16 +43 +-18 +41 +-21 +38 +-23 +37 +-22 +37 +-23 +36 +-25 +35 +-26 +34 +-27 +34 +-27 +34 +-28 +33 +-27 +33 +-26 +34 +-26 +34 +-28 +32 +-28 +33 +-28 +32 +-29 +31 +-29 +32 +-29 +32 +-27 +33 +-26 +33 +-29 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +32 +-28 +31 +-27 +33 +-27 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +32 +-29 +31 +-29 +32 +-27 +33 +-27 +33 +-28 +32 +-29 +32 +-29 +31 +-29 +32 +-29 +32 +-29 +32 +-26 +34 +-26 +34 +-28 +32 +-28 +32 +-29 +32 +-29 +32 +-29 +32 +-29 +32 +-26 +34 +-26 +33 +-28 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +32 +-29 +31 +-28 +33 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +32 +-28 +31 +-30 +31 +-30 +31 +-30 +30 +-31 +30 +-31 +30 +-30 +30 +-28 +32 +-28 +32 +-30 +30 +-30 +31 +-30 +30 +-30 +31 +-30 +30 +-30 +30 +-28 +32 +-28 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +32 +-29 +32 +-29 +31 +-28 +33 +-27 +33 +-28 +31 +-29 +32 +-29 +31 +-29 +31 +-29 +32 +-30 +32 +-27 +33 +-27 +32 +-29 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-28 +33 +-27 +33 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-27 +33 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +32 +-28 +32 +-27 +32 +-29 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-28 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +32 +-28 +32 +-27 +33 +-29 +32 +-29 +31 +-29 +31 +-29 +31 +-30 +32 +-29 +31 +-27 +33 +-27 +32 +-29 +31 +-29 +31 +-29 +32 +-29 +32 +-30 +31 +-29 +31 +-28 +33 +-27 +33 +-28 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-30 +31 +-27 +33 +-27 +33 +-28 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-28 +33 +-26 +33 +-29 +32 +-29 +31 +-29 +31 +-29 +32 +-29 +32 +-28 +32 +-26 +33 +-27 +33 +-28 +32 +-29 +31 +-30 +31 +-30 +32 +-29 +31 +-29 +32 +-28 +33 +-27 +32 +-29 +32 +-29 +32 +-29 +32 +-29 +31 +-30 +32 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +32 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-28 +33 +-28 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-30 +31 +73 +-3 +41 +-26 +29 +-33 +26 +-35 +25 +-35 +25 +-35 +26 +-33 +27 +-32 +28 +-30 +30 +-31 +28 +-32 +29 +-31 +29 +-31 +30 +-31 +29 +-31 +29 +-30 +-108 +-44 +-97 +-3 +-59 +22 +-40 +33 +-33 +37 +-28 +40 +-22 +43 +-20 +44 +-15 +47 +-13 +47 +-14 +45 +-14 +45 +-16 diff --git a/traces/lf_t5577_nedap.pm3 b/traces/lf_t5577_nedap.pm3 new file mode 100644 index 000000000..5abb917b9 --- /dev/null +++ b/traces/lf_t5577_nedap.pm3 @@ -0,0 +1,16000 @@ +-127 +-123 +-114 +-106 +-99 +-91 +-85 +-78 +-73 +-67 +-63 +-58 +-54 +-51 +-47 +-43 +-40 +-37 +-34 +-32 +-29 +-27 +-25 +-23 +-22 +-20 +-19 +-17 +-15 +-14 +-13 +-12 +-12 +-10 +-9 +-8 +-7 +-7 +-6 +-6 +-5 +-4 +76 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +105 +98 +91 +85 +79 +74 +33 +-54 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-114 +-106 +-98 +-92 +-85 +-78 +-73 +-67 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +111 +103 +97 +91 +85 +80 +75 +70 +65 +61 +57 +53 +50 +47 +44 +41 +38 +36 +34 +31 +30 +28 +26 +25 +23 +22 +21 +20 +18 +17 +16 +15 +14 +14 +13 +13 +12 +11 +11 +11 +-17 +-99 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-107 +-99 +-92 +-86 +-80 +-74 +11 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +117 +109 +102 +95 +89 +83 +77 +72 +68 +28 +-59 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-116 +-107 +-99 +-92 +-86 +-79 +-74 +-68 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +111 +103 +96 +90 +84 +78 +73 +69 +28 +-59 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-115 +-106 +-99 +-92 +-86 +-79 +-74 +-68 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +118 +111 +103 +96 +90 +84 +78 +73 +68 +28 +-60 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-114 +-105 +-98 +-91 +-84 +-78 +-73 +-68 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +104 +97 +90 +84 +79 +73 +69 +30 +-58 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-114 +-106 +-99 +-91 +-85 +-79 +-73 +-68 +-63 +-58 +-54 +-50 +-47 +-43 +-40 +-37 +-35 +-31 +-29 +-27 +-25 +-23 +-22 +-19 +-18 +-16 +-15 +-14 +-13 +-12 +-11 +-9 +-9 +-8 +-7 +-7 +-6 +-5 +-5 +-4 +76 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +106 +99 +92 +87 +80 +75 +35 +-53 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-113 +-105 +-98 +-91 +-84 +-79 +-73 +-67 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +103 +96 +90 +85 +80 +74 +70 +30 +-58 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-115 +-107 +-99 +-92 +-86 +-80 +-74 +-68 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +119 +111 +103 +96 +90 +84 +79 +73 +69 +30 +-58 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-107 +-99 +-92 +-85 +-79 +-74 +-69 +16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +110 +103 +96 +90 +84 +79 +73 +69 +29 +-59 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-114 +-106 +-98 +-91 +-85 +-78 +-73 +-67 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +104 +97 +90 +84 +79 +73 +69 +30 +-58 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-106 +-98 +-92 +-85 +-79 +-74 +-68 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +118 +110 +103 +96 +90 +84 +78 +73 +68 +63 +60 +56 +52 +48 +46 +42 +40 +37 +35 +33 +31 +29 +28 +26 +25 +23 +22 +21 +19 +18 +18 +16 +16 +15 +14 +13 +13 +12 +12 +11 +10 +-17 +-99 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-116 +-108 +-100 +-93 +-86 +-80 +-74 +11 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +117 +109 +102 +95 +89 +83 +77 +72 +68 +28 +-60 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-115 +-107 +-99 +-92 +-86 +-79 +-74 +-68 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +118 +110 +103 +95 +90 +83 +78 +73 +68 +29 +-58 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-115 +-106 +-98 +-92 +-85 +-79 +-73 +-68 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +118 +110 +103 +96 +90 +83 +78 +73 +68 +29 +-59 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-107 +-99 +-92 +-86 +-79 +-74 +-68 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +111 +104 +97 +91 +85 +80 +75 +70 +30 +-58 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-114 +-106 +-98 +-92 +-85 +-79 +-73 +-68 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +104 +96 +90 +84 +79 +73 +69 +29 +-58 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-114 +-106 +-99 +-92 +-85 +-79 +-73 +-68 +-63 +-58 +-54 +-50 +-47 +-43 +-40 +-37 +-35 +-32 +-30 +-27 +-26 +-23 +-21 +-20 +-19 +-17 +-16 +-14 +-14 +-12 +-11 +-10 +-9 +-9 +-8 +-7 +-7 +-6 +-5 +-5 +76 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +105 +98 +92 +86 +80 +75 +35 +-53 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-114 +-105 +-98 +-91 +-85 +-78 +-73 +-68 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +104 +97 +91 +85 +79 +74 +69 +29 +-58 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-114 +-105 +-97 +-91 +-85 +-78 +-73 +-67 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +103 +95 +90 +84 +78 +73 +68 +63 +59 +55 +52 +48 +45 +42 +39 +36 +35 +32 +30 +28 +27 +25 +24 +22 +21 +19 +18 +17 +16 +15 +15 +13 +13 +12 +12 +11 +11 +10 +10 +-17 +-99 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-116 +-108 +-100 +-93 +-87 +-81 +-74 +-70 +-64 +-60 +-56 +-52 +-48 +-45 +-41 +-38 +-35 +-33 +-30 +-28 +-25 +-24 +-22 +-20 +-19 +-17 +-15 +-14 +-12 +-12 +-10 +-10 +-9 +-8 +-7 +-7 +-6 +-5 +-5 +76 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +105 +98 +91 +85 +79 +74 +34 +-54 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-113 +-105 +-97 +-90 +-84 +-78 +-72 +-67 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +105 +97 +91 +85 +79 +74 +69 +29 +-58 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-114 +-105 +-98 +-91 +-84 +-78 +-73 +-68 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +119 +111 +103 +96 +90 +84 +78 +73 +68 +63 +60 +56 +52 +49 +46 +42 +40 +37 +35 +33 +31 +29 +28 +25 +24 +23 +22 +20 +19 +18 +17 +16 +15 +14 +14 +12 +12 +11 +11 +10 +10 +-17 +-99 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-116 +-108 +-101 +-93 +-87 +-81 +-75 +11 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +118 +110 +103 +95 +90 +84 +79 +73 +69 +29 +-58 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-107 +-99 +-92 +-86 +-79 +-74 +-69 +-64 +-59 +-55 +-51 +-48 +-44 +-41 +-37 +-34 +-32 +-30 +-27 +-26 +-23 +-21 +-20 +-18 +-17 +-16 +-14 +-13 +-12 +-11 +-10 +-9 +-9 +-8 +-6 +-6 +-5 +-5 +-4 +76 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +105 +99 +92 +86 +80 +75 +34 +-54 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-114 +-105 +-98 +-91 +-84 +-78 +-73 +-67 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +111 +104 +97 +91 +85 +79 +74 +69 +65 +61 +57 +54 +50 +47 +44 +41 +38 +36 +34 +32 +30 +29 +27 +26 +24 +23 +21 +20 +19 +17 +17 +16 +15 +15 +13 +13 +12 +12 +11 +11 +-16 +-98 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-109 +-101 +-94 +-88 +-82 +-76 +10 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +117 +109 +102 +95 +89 +83 +78 +73 +68 +28 +-59 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-116 +-107 +-100 +-93 +-86 +-80 +-74 +-69 +16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +104 +97 +91 +84 +79 +74 +69 +30 +-58 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-114 +-106 +-98 +-91 +-85 +-79 +-73 +-68 +-63 +-58 +-54 +-50 +-46 +-43 +-40 +-37 +-34 +-31 +-29 +-27 +-25 +-23 +-21 +-19 +-18 +-17 +-15 +-14 +-13 +-12 +-11 +-10 +-9 +-8 +-7 +-6 +-7 +-5 +-5 +-4 +76 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +113 +106 +99 +92 +86 +81 +75 +70 +66 +62 +58 +54 +51 +47 +45 +41 +39 +36 +34 +32 +30 +28 +27 +25 +24 +22 +21 +20 +19 +17 +17 +15 +15 +14 +13 +13 +12 +11 +11 +-16 +-99 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-109 +-101 +-94 +-87 +-81 +-76 +-70 +-65 +-60 +-56 +-53 +-49 +-45 +-42 +-39 +-36 +-34 +-31 +-28 +-26 +-24 +-22 +-21 +-19 +-18 +-16 +-15 +-13 +-12 +-11 +-11 +-10 +-9 +-8 +-7 +-6 +-6 +-5 +75 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +114 +106 +99 +92 +86 +80 +76 +70 +66 +62 +58 +54 +51 +47 +45 +42 +39 +37 +34 +32 +31 +28 +27 +25 +23 +22 +22 +20 +19 +17 +17 +15 +15 +14 +14 +13 +13 +12 +11 +-16 +-98 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-116 +-108 +-101 +-94 +-87 +-81 +-75 +-70 +-65 +-61 +-56 +-52 +-48 +-45 +-41 +-39 +-36 +-33 +-31 +-29 +-26 +-25 +-22 +-21 +-19 +-17 +-16 +-15 +-13 +-13 +-11 +-11 +-9 +-9 +-8 +-7 +-6 +-6 +-5 +75 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +105 +98 +92 +86 +80 +76 +70 +66 +62 +58 +54 +50 +46 +44 +41 +39 +36 +35 +32 +30 +28 +26 +25 +23 +22 +21 +19 +19 +17 +17 +16 +15 +15 +14 +13 +13 +12 +12 +-15 +-98 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-107 +-99 +-93 +-86 +-80 +-74 +-69 +-63 +-60 +-55 +-51 +-48 +-44 +-41 +-38 +-35 +-32 +-30 +-28 +-26 +-24 +-22 +-21 +-19 +-17 +-16 +-15 +-14 +-13 +-11 +-11 +-10 +-9 +-8 +-7 +-6 +-6 +-5 +75 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +104 +98 +91 +86 +79 +75 +69 +65 +61 +57 +53 +50 +46 +43 +41 +38 +35 +33 +31 +29 +27 +26 +24 +23 +22 +21 +19 +19 +17 +17 +16 +15 +15 +14 +13 +13 +12 +11 +-15 +-98 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-116 +-107 +-100 +-93 +-86 +-80 +-75 +-69 +-64 +-60 +-55 +-51 +-48 +-44 +-41 +-38 +-35 +-33 +-30 +-28 +-26 +-25 +-22 +-21 +-19 +-18 +-16 +-15 +-14 +-13 +-11 +-11 +-9 +-9 +-8 +-7 +-6 +-6 +-5 +75 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +113 +105 +98 +92 +86 +80 +75 +70 +66 +61 +58 +54 +50 +47 +44 +41 +39 +36 +34 +32 +30 +29 +27 +25 +24 +22 +21 +20 +19 +18 +16 +15 +15 +14 +14 +13 +13 +12 +11 +-15 +-98 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-116 +-108 +-99 +-92 +-86 +-80 +-74 +-69 +-63 +-59 +-55 +-51 +-48 +-45 +-40 +-38 +-35 +-32 +-30 +-28 +-26 +-24 +-22 +-21 +-19 +-18 +-17 +-15 +-13 +-13 +-12 +-11 +-10 +-9 +-8 +-8 +-7 +-7 +-6 +74 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +113 +105 +99 +92 +86 +81 +76 +35 +-53 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-112 +-103 +-96 +-90 +-83 +-77 +-72 +-66 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +104 +97 +91 +85 +79 +74 +69 +29 +-58 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-115 +-106 +-99 +-92 +-86 +-80 +-74 +-68 +16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +110 +103 +96 +90 +83 +78 +73 +68 +29 +-59 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-114 +-106 +-99 +-91 +-85 +-79 +-73 +-67 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +103 +96 +91 +84 +79 +74 +69 +30 +-58 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-114 +-106 +-99 +-91 +-85 +-79 +-73 +-68 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +110 +103 +96 +90 +84 +78 +73 +68 +29 +-59 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-114 +-107 +-99 +-92 +-86 +-79 +-73 +-69 +16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +110 +104 +96 +90 +84 +79 +73 +69 +64 +60 +55 +53 +49 +46 +43 +40 +37 +35 +32 +31 +28 +27 +26 +24 +22 +21 +20 +19 +18 +17 +16 +15 +13 +13 +12 +12 +11 +11 +11 +10 +-16 +-99 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-116 +-108 +-100 +-94 +-86 +-80 +-74 +11 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +117 +109 +103 +95 +89 +83 +78 +72 +68 +28 +-60 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-107 +-100 +-92 +-86 +-80 +-74 +-69 +16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +111 +104 +96 +90 +84 +79 +73 +68 +30 +-58 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-114 +-106 +-98 +-91 +-86 +-80 +-74 +-68 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +118 +110 +103 +96 +90 +84 +78 +72 +68 +29 +-59 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-115 +-107 +-98 +-91 +-85 +-79 +-73 +-68 +-63 +-58 +-55 +-50 +-47 +-43 +-40 +-37 +-34 +-32 +-30 +-27 +-26 +-23 +-21 +-20 +-18 +-16 +-15 +-13 +-13 +-12 +-11 +-10 +-9 +-8 +-7 +-6 +-6 +-5 +-4 +-4 +77 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +114 +106 +99 +92 +86 +80 +75 +35 +-53 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-113 +-105 +-97 +-90 +-84 +-78 +-72 +-67 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +104 +97 +91 +85 +80 +74 +69 +30 +-58 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-115 +-106 +-98 +-92 +-85 +-79 +-73 +-68 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +118 +110 +103 +95 +89 +83 +77 +72 +68 +63 +59 +55 +51 +48 +45 +42 +39 +37 +34 +32 +30 +28 +27 +25 +24 +22 +21 +20 +19 +17 +17 +15 +15 +14 +13 +12 +12 +12 +11 +10 +10 +-17 +-99 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-115 +-107 +-100 +-93 +-86 +-80 +-74 +11 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +117 +109 +102 +94 +89 +83 +77 +72 +67 +26 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-107 +-99 +-92 +-86 +-79 +-74 +-68 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +111 +103 +95 +90 +84 +78 +73 +69 +29 +-59 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-116 +-107 +-99 +-92 +-86 +-79 +-73 +-69 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +111 +104 +96 +90 +84 +78 +73 +69 +30 +-57 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-115 +-106 +-99 +-93 +-86 +-79 +-74 +-69 +-64 +-59 +-55 +-51 +-48 +-44 +-41 +-37 +-34 +-32 +-30 +-28 +-26 +-23 +-22 +-20 +-18 +-17 +-15 +-14 +-13 +-12 +-11 +-10 +-9 +-8 +-7 +-6 +-6 +-5 +-5 +-4 +76 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +106 +99 +92 +86 +80 +75 +70 +66 +62 +58 +54 +51 +47 +45 +42 +40 +37 +35 +33 +31 +29 +28 +26 +25 +24 +22 +21 +20 +18 +18 +16 +16 +15 +14 +13 +13 +12 +12 +-15 +-97 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-115 +-108 +-100 +-93 +-86 +-81 +-75 +11 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +116 +109 +101 +94 +88 +82 +77 +72 +67 +27 +-60 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-106 +-99 +-92 +-85 +-80 +-74 +-68 +16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +110 +103 +96 +90 +84 +79 +73 +68 +30 +-58 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-107 +-100 +-92 +-86 +-80 +-74 +-69 +-64 +-59 +-55 +-51 +-48 +-44 +-41 +-38 +-36 +-33 +-30 +-28 +-26 +-24 +-23 +-20 +-19 +-17 +-16 +-15 +-13 +-12 +-11 +-10 +-9 +-8 +-8 +-7 +-6 +-6 +-6 +-4 +76 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +114 +106 +100 +92 +86 +81 +76 +36 +-53 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-113 +-105 +-98 +-90 +-84 +-78 +-73 +-67 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +118 +110 +103 +96 +90 +83 +78 +73 +68 +63 +60 +56 +52 +49 +46 +43 +41 +37 +36 +34 +31 +30 +28 +26 +25 +23 +22 +21 +20 +19 +18 +17 +16 +15 +15 +14 +14 +13 +12 +11 +11 +-16 +-98 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-107 +-99 +-92 +-86 +-80 +-73 +11 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +117 +109 +102 +95 +89 +82 +77 +72 +67 +28 +-59 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-116 +-107 +-100 +-93 +-86 +-80 +-74 +-69 +16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +118 +110 +103 +96 +90 +84 +78 +73 +68 +29 +-59 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-115 +-107 +-99 +-91 +-85 +-79 +-73 +-68 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +111 +104 +97 +90 +84 +79 +73 +69 +29 +-59 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-115 +-107 +-99 +-92 +-85 +-79 +-74 +-68 +16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +119 +111 +103 +96 +90 +83 +78 +73 +68 +29 +-58 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-114 +-106 +-98 +-91 +-85 +-79 +-73 +-67 +-64 +-58 +-54 +-50 +-46 +-43 +-40 +-36 +-34 +-31 +-29 +-27 +-24 +-22 +-21 +-19 +-18 +-16 +-15 +-13 +-12 +-10 +-10 +-9 +-8 +-7 +-6 +-5 +-5 +-4 +-4 +-3 +77 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +106 +99 +92 +86 +80 +75 +35 +-53 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-114 +-106 +-99 +-91 +-85 +-79 +-73 +-68 +16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +111 +104 +97 +91 +85 +79 +74 +70 +30 +-58 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-113 +-105 +-98 +-91 +-84 +-78 +-73 +-67 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +118 +110 +102 +96 +90 +83 +78 +73 +67 +28 +-59 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-106 +-99 +-91 +-85 +-79 +-73 +-67 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +104 +96 +90 +84 +79 +73 +68 +29 +-59 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-114 +-106 +-98 +-92 +-85 +-79 +-73 +-67 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +103 +96 +90 +83 +78 +73 +68 +29 +-58 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-115 +-106 +-99 +-92 +-86 +-80 +-74 +-68 +16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +104 +97 +91 +84 +79 +74 +69 +64 +60 +56 +53 +49 +46 +43 +41 +38 +36 +33 +31 +29 +27 +26 +25 +23 +22 +20 +19 +18 +17 +17 +16 +15 +14 +13 +13 +12 +11 +11 +10 +-17 +-98 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-117 +-108 +-100 +-94 +-87 +-81 +-75 +10 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +116 +107 +101 +94 +87 +81 +77 +71 +66 +28 +-60 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-106 +-99 +-92 +-85 +-79 +-74 +-68 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +103 +96 +90 +84 +79 +73 +69 +30 +-57 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-114 +-106 +-99 +-91 +-85 +-79 +-73 +-68 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +104 +97 +90 +84 +79 +74 +69 +30 +-58 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-114 +-106 +-99 +-91 +-85 +-79 +-73 +-68 +16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +104 +97 +90 +84 +79 +74 +69 +30 +-58 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-114 +-106 +-98 +-91 +-85 +-79 +-73 +-68 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +118 +110 +103 +96 +90 +83 +78 +73 +68 +29 +-59 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-114 +-106 +-98 +-91 +-84 +-79 +-73 +-67 +-63 +-58 +-54 +-50 +-46 +-44 +-40 +-37 +-34 +-31 +-29 +-27 +-25 +-23 +-21 +-19 +-18 +-17 +-15 +-14 +-13 +-11 +-10 +-9 +-8 +-7 +-7 +-5 +-5 +-5 +-4 +-4 +77 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +106 +99 +92 +86 +80 +76 +36 +-52 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-112 +-105 +-98 +-90 +-85 +-78 +-73 +-68 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +110 +103 +96 +90 +83 +79 +73 +68 +29 +-59 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-114 +-107 +-99 +-92 +-85 +-79 +-73 +-68 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +110 +103 +96 +90 +84 +79 +73 +69 +64 +60 +56 +52 +49 +46 +42 +40 +37 +35 +33 +31 +29 +27 +25 +24 +23 +22 +20 +19 +17 +17 +15 +15 +14 +13 +13 +12 +11 +11 +10 +10 +-17 +-99 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-116 +-108 +-101 +-94 +-87 +-81 +-75 +-70 +-64 +-60 +-56 +-52 +-49 +-45 +-42 +-39 +-36 +-34 +-31 +-29 +-27 +-25 +-22 +-21 +-19 +-19 +-17 +-15 +-14 +-13 +-12 +-11 +-10 +-9 +-8 +-8 +-7 +-7 +-5 +74 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +113 +105 +98 +91 +86 +80 +75 +35 +-53 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-112 +-104 +-97 +-90 +-83 +-77 +-72 +-67 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +104 +97 +90 +84 +79 +73 +69 +29 +-58 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-115 +-107 +-99 +-92 +-86 +-80 +-73 +-68 +16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +110 +103 +96 +90 +84 +79 +73 +69 +64 +60 +56 +52 +49 +46 +43 +40 +38 +36 +33 +32 +29 +28 +26 +25 +23 +22 +20 +20 +18 +17 +16 +15 +15 +14 +13 +13 +12 +11 +11 +10 +-16 +-98 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-116 +-108 +-100 +-93 +-87 +-80 +-74 +11 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +117 +109 +102 +95 +89 +83 +78 +72 +67 +29 +-59 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-106 +-99 +-92 +-86 +-79 +-74 +-68 +-64 +-58 +-54 +-51 +-47 +-43 +-40 +-37 +-35 +-32 +-30 +-27 +-25 +-23 +-22 +-20 +-19 +-17 +-16 +-15 +-13 +-11 +-11 +-10 +-9 +-8 +-8 +-7 +-7 +-5 +-6 +-5 +76 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +106 +99 +92 +87 +81 +76 +36 +-52 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-113 +-105 +-98 +-91 +-84 +-78 +-73 +-68 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +119 +111 +103 +96 +90 +84 +79 +73 +68 +64 +60 +56 +52 +49 +46 +43 +41 +37 +36 +34 +31 +29 +27 +26 +25 +23 +22 +21 +19 +19 +18 +16 +16 +14 +14 +13 +13 +12 +12 +11 +11 +-16 +-98 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-116 +-109 +-101 +-93 +-86 +-81 +-75 +11 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +117 +109 +102 +95 +89 +82 +77 +72 +68 +29 +-59 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-106 +-99 +-92 +-85 +-80 +-74 +-68 +16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +118 +110 +103 +95 +90 +84 +79 +73 +69 +29 +-59 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-114 +-106 +-99 +-92 +-85 +-79 +-74 +-68 +-64 +-58 +-54 +-50 +-47 +-44 +-41 +-38 +-35 +-32 +-30 +-28 +-26 +-23 +-22 +-20 +-18 +-17 +-16 +-14 +-14 +-12 +-11 +-10 +-9 +-9 +-8 +-7 +-7 +-6 +-5 +-4 +76 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +114 +105 +99 +92 +86 +80 +75 +69 +65 +62 +58 +54 +51 +47 +45 +41 +39 +36 +34 +32 +30 +28 +26 +25 +23 +22 +21 +20 +19 +18 +17 +16 +15 +15 +14 +13 +13 +12 +12 +-16 +-98 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-116 +-108 +-100 +-93 +-86 +-81 +-75 +-69 +-64 +-59 +-54 +-51 +-47 +-44 +-41 +-38 +-34 +-32 +-30 +-28 +-25 +-23 +-21 +-20 +-17 +-16 +-15 +-14 +-13 +-12 +-11 +-10 +-9 +-9 +-8 +-7 +-7 +-6 +-5 +75 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +105 +99 +92 +87 +80 +76 +70 +66 +62 +58 +54 +51 +47 +44 +42 +39 +36 +35 +32 +30 +28 +27 +25 +24 +22 +21 +19 +19 +18 +17 +16 +15 +14 +14 +13 +12 +11 +11 +-16 +-98 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-116 +-108 +-100 +-94 +-87 +-81 +-75 +-70 +-64 +-60 +-56 +-52 +-49 +-45 +-41 +-39 +-35 +-33 +-30 +-27 +-25 +-24 +-21 +-20 +-18 +-17 +-16 +-15 +-13 +-12 +-11 +-11 +-9 +-8 +-7 +-6 +-6 +-6 +-5 +75 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +113 +104 +98 +91 +85 +79 +75 +70 +65 +60 +57 +52 +49 +46 +43 +40 +38 +35 +34 +31 +29 +28 +26 +24 +23 +21 +21 +19 +18 +17 +17 +15 +15 +14 +14 +13 +13 +12 +11 +-16 +-98 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-108 +-100 +-93 +-87 +-80 +-74 +-69 +-64 +-59 +-56 +-52 +-48 +-45 +-41 +-38 +-35 +-33 +-30 +-28 +-26 +-24 +-22 +-20 +-19 +-17 +-16 +-15 +-13 +-13 +-11 +-11 +-10 +-9 +-8 +-7 +-6 +-6 +-5 +75 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +105 +99 +92 +86 +80 +75 +70 +66 +61 +58 +54 +51 +47 +45 +41 +39 +36 +34 +32 +30 +28 +27 +25 +24 +22 +21 +20 +19 +17 +17 +15 +15 +14 +14 +13 +12 +12 +11 +-16 +-98 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-107 +-99 +-92 +-86 +-80 +-74 +-69 +-63 +-59 +-55 +-51 +-47 +-45 +-41 +-38 +-35 +-32 +-30 +-28 +-25 +-24 +-22 +-20 +-19 +-17 +-16 +-15 +-13 +-13 +-11 +-10 +-9 +-9 +-8 +-8 +-7 +-7 +-5 +75 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +104 +98 +91 +85 +79 +75 +69 +65 +61 +57 +53 +50 +47 +44 +41 +39 +36 +34 +32 +30 +28 +27 +25 +24 +22 +21 +20 +19 +18 +17 +16 +15 +15 +14 +13 +13 +12 +12 +-16 +-98 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-107 +-100 +-93 +-86 +-80 +-74 +-68 +-63 +-59 +-55 +-51 +-47 +-44 +-41 +-38 +-35 +-33 +-30 +-28 +-26 +-24 +-22 +-20 +-18 +-18 +-16 +-14 +-13 +-12 +-12 +-11 +-10 +-10 +-9 +-8 +-7 +-7 +-6 +74 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +104 +98 +91 +85 +79 +75 +35 +-53 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-113 +-104 +-97 +-90 +-84 +-78 +-72 +-67 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +104 +97 +91 +85 +80 +74 +69 +30 +-58 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-114 +-106 +-98 +-91 +-85 +-79 +-73 +-68 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +103 +96 +90 +84 +78 +73 +68 +29 +-58 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-114 +-106 +-98 +-92 +-85 +-79 +-73 +-68 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +119 +111 +103 +96 +90 +84 +78 +73 +68 +29 +-59 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-107 +-100 +-92 +-86 +-80 +-75 +-69 +16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +118 +110 +103 +96 +90 +84 +78 +73 +69 +29 +-58 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-114 +-105 +-98 +-91 +-84 +-78 +-73 +-67 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +104 +97 +92 +85 +79 +74 +69 +64 +60 +56 +53 +50 +46 +43 +41 +38 +35 +33 +31 +29 +27 +25 +24 +23 +22 +20 +19 +18 +17 +15 +15 +14 +14 +13 +12 +11 +11 +11 +10 +-17 +-99 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-116 +-108 +-101 +-94 +-87 +-81 +-75 +11 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +118 +110 +103 +95 +90 +83 +78 +73 +68 +28 +-59 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-107 +-99 +-93 +-86 +-80 +-75 +-69 +16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +117 +110 +102 +95 +89 +83 +78 +72 +68 +28 +-59 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-114 +-106 +-98 +-91 +-85 +-79 +-73 +-68 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +111 +105 +97 +91 +85 +79 +74 +69 +30 +-58 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-107 +-100 +-92 +-86 +-80 +-74 +-69 +-64 +-59 +-55 +-51 +-48 +-44 +-41 +-38 +-35 +-33 +-31 +-28 +-26 +-24 +-22 +-20 +-19 +-17 +-16 +-14 +-13 +-12 +-12 +-10 +-9 +-8 +-7 +-6 +-6 +-5 +-4 +-4 +76 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +106 +99 +92 +87 +81 +76 +36 +-52 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-113 +-105 +-98 +-90 +-84 +-78 +-73 +-67 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +104 +96 +91 +84 +79 +74 +69 +29 +-59 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-115 +-106 +-99 +-92 +-85 +-79 +-73 +-68 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +110 +103 +96 +90 +84 +79 +74 +69 +64 +61 +56 +53 +49 +46 +43 +41 +38 +36 +33 +31 +30 +27 +26 +25 +23 +22 +20 +19 +18 +17 +16 +16 +14 +14 +13 +12 +11 +10 +11 +11 +-16 +-98 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-116 +-108 +-100 +-93 +-87 +-81 +-75 +10 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +116 +109 +102 +95 +89 +83 +77 +72 +67 +27 +-60 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-106 +-99 +-93 +-85 +-79 +-74 +-68 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +110 +103 +96 +90 +84 +79 +73 +69 +29 +-59 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-114 +-106 +-99 +-92 +-85 +-79 +-74 +-68 +16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +119 +110 +103 +97 +90 +84 +79 +73 +68 +29 +-58 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-114 +-106 +-99 +-92 +-86 +-79 +-73 +-68 +-63 +-58 +-54 +-50 +-47 +-43 +-40 +-37 +-34 +-31 +-29 +-27 +-25 +-22 +-21 +-19 +-17 +-16 +-15 +-14 +-13 +-11 +-11 +-9 +-9 +-8 +-7 +-6 +-6 +-5 +-5 +-4 +76 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +105 +99 +92 +86 +80 +75 +70 +65 +61 +57 +54 +50 +46 +44 +41 +39 +36 +34 +32 +30 +28 +27 +25 +24 +22 +21 +19 +19 +17 +17 +17 +15 +15 +14 +13 +13 +11 +12 +-15 +-98 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-116 +-107 +-100 +-94 +-86 +-80 +-75 +11 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +117 +108 +102 +95 +88 +83 +78 +72 +67 +28 +-60 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-114 +-106 +-99 +-92 +-85 +-80 +-74 +-68 +16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +110 +103 +97 +91 +84 +79 +74 +69 +30 +-57 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-115 +-106 +-98 +-92 +-85 +-79 +-74 +-68 +-64 +-58 +-55 +-51 +-48 +-44 +-41 +-37 +-35 +-32 +-30 +-28 +-26 +-23 +-22 +-20 +-19 +-17 +-16 +-14 +-13 +-12 +-11 +-10 +-9 +-8 +-7 +-6 +-6 +-5 +-5 +-4 +76 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +114 +106 +99 +92 +86 +81 +76 +35 +-53 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-113 +-105 +-98 +-91 +-84 +-78 +-73 +-67 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +103 +96 +90 +84 +78 +73 +68 +63 +60 +56 +52 +49 +46 +42 +40 +37 +35 +33 +31 +29 +28 +26 +25 +23 +22 +20 +19 +18 +17 +16 +16 +15 +14 +14 +13 +13 +12 +11 +11 +-16 +-99 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-107 +-99 +-93 +-86 +-80 +-74 +11 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +116 +109 +102 +94 +89 +82 +77 +72 +67 +28 +-59 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-116 +-108 +-100 +-93 +-86 +-80 +-75 +-69 +16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +118 +110 +103 +95 +90 +84 +78 +73 +69 +29 +-59 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-115 +-106 +-99 +-92 +-85 +-79 +-73 +-68 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +104 +97 +91 +84 +79 +73 +69 +28 +-60 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-115 +-107 +-99 +-92 +-86 +-80 +-75 +-69 +16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +104 +97 +90 +84 +79 +73 +69 +30 +-58 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-114 +-106 +-99 +-92 +-85 +-79 +-73 +-68 +-63 +-58 +-55 +-51 +-47 +-44 +-41 +-37 +-35 +-31 +-30 +-27 +-25 +-23 +-21 +-19 +-18 +-17 +-15 +-14 +-13 +-11 +-11 +-10 +-9 +-8 +-7 +-6 +-6 +-5 +-5 +-4 +76 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +114 +107 +100 +94 +87 +81 +76 +36 +-52 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-114 +-105 +-98 +-91 +-85 +-79 +-73 +-68 +16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +118 +109 +103 +96 +90 +83 +78 +72 +68 +29 +-59 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-114 +-106 +-98 +-91 +-85 +-79 +-74 +-68 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +103 +97 +91 +84 +79 +73 +69 +30 +-57 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-115 +-106 +-99 +-92 +-85 +-79 +-73 +-68 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +104 +97 +91 +84 +79 +74 +70 +30 +-59 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-114 +-105 +-98 +-91 +-85 +-79 +-73 +-68 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +118 +110 +103 +96 +89 +84 +78 +73 +68 +29 +-58 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-115 +-106 +-98 +-91 +-85 +-78 +-73 +-68 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +110 +104 +96 +90 +84 +79 +73 +68 +64 +60 +56 +52 +49 +46 +43 +40 +38 +36 +33 +31 +29 +27 +26 +24 +23 +22 +20 +19 +18 +17 +15 +15 +14 +14 +12 +12 +12 +11 +11 +10 +-17 +-99 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-116 +-109 +-101 +-94 +-87 +-81 +-75 +10 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +118 +110 +103 +96 +90 +83 +78 +73 +68 +29 +-59 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-114 +-106 +-99 +-92 +-85 +-79 +-74 +-68 +16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +110 +103 +96 +90 +83 +78 +73 +68 +30 +-58 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-115 +-107 +-99 +-91 +-85 +-79 +-73 +-68 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +110 +103 +96 +90 +83 +78 +73 +68 +29 +-59 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-106 +-100 +-92 +-85 +-80 +-74 +-68 +16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +110 +103 +96 +90 +84 +78 +73 +68 +28 +-60 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-115 +-107 +-99 +-92 +-85 +-79 +-73 +-68 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +104 +97 +90 +84 +79 +74 +69 +30 +-58 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-106 +-99 +-92 +-85 +-80 +-74 +-68 +-64 +-59 +-55 +-51 +-47 +-44 +-41 +-38 +-35 +-32 +-30 +-28 +-26 +-24 +-22 +-20 +-19 +-17 +-16 +-15 +-13 +-12 +-11 +-10 +-10 +-9 +-8 +-8 +-7 +-6 +-6 +-5 +75 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +114 +106 +100 +93 +88 +81 +77 +36 +-52 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-113 +-105 +-98 +-90 +-84 +-78 +-73 +-67 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +103 +97 +91 +84 +79 +73 +68 +29 +-58 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-115 +-106 +-99 +-92 +-85 +-79 +-74 +-68 +16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +104 +97 +91 +84 +79 +74 +69 +64 +61 +57 +53 +50 +47 +43 +41 +38 +36 +33 +31 +29 +27 +25 +25 +22 +21 +20 +19 +18 +17 +16 +15 +14 +14 +13 +12 +12 +11 +11 +11 +-17 +-99 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-116 +-108 +-100 +-93 +-86 +-81 +-75 +-69 +-64 +-60 +-55 +-52 +-48 +-44 +-41 +-38 +-34 +-33 +-30 +-28 +-25 +-24 +-22 +-20 +-18 +-17 +-15 +-14 +-13 +-12 +-11 +-10 +-9 +-9 +-8 +-7 +-6 +-6 +-5 +75 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +104 +97 +91 +85 +79 +74 +34 +-54 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-113 +-105 +-97 +-90 +-84 +-78 +-72 +-67 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +111 +104 +97 +91 +85 +79 +74 +69 +30 +-58 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-115 +-107 +-99 +-92 +-86 +-80 +-74 +-69 +16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +118 +110 +103 +96 +90 +84 +79 +73 +69 +64 +60 +56 +53 +49 +47 +44 +41 +38 +36 +34 +32 +30 +28 +27 +26 +24 +23 +22 +21 +19 +19 +18 +17 +16 +15 +14 +14 +13 +13 +12 +12 +-15 +-98 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-107 +-99 +-93 +-86 +-80 +-75 +11 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +117 +109 +102 +95 +88 +82 +77 +71 +67 +28 +-59 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-107 +-101 +-93 +-86 +-81 +-75 +-69 +-64 +-60 +-55 +-52 +-48 +-45 +-41 +-38 +-35 +-33 +-31 +-28 +-27 +-24 +-22 +-20 +-19 +-18 +-16 +-15 +-14 +-12 +-12 +-11 +-10 +-9 +-8 +-8 +-7 +-6 +-6 +-5 +75 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +112 +105 +98 +91 +85 +79 +75 +34 +-54 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-113 +-105 +-97 +-91 +-84 +-78 +-73 +-67 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +111 +105 +98 +92 +85 +80 +74 +70 +65 +61 +57 +54 +50 +47 +44 +42 +39 +36 +34 +32 +30 +29 +27 +26 +24 +22 +21 +20 +19 +18 +16 +16 +15 +14 +14 +13 +13 +13 +11 +11 +-16 +-98 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-115 +-108 +-100 +-93 +-86 +-80 +-75 +11 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +117 +109 +102 +95 +89 +83 +78 +72 +68 +28 +-59 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-116 +-107 +-100 +-93 +-86 +-80 +-75 +-69 +16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +110 +104 +96 +90 +84 +79 +73 +69 +29 +-58 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-113 +-106 +-98 +-91 +-85 +-79 +-73 +-68 +-63 +-58 +-54 +-50 +-47 +-43 +-40 +-37 +-34 +-31 +-29 +-27 +-25 +-23 +-21 +-19 +-18 +-16 +-15 +-13 +-13 +-11 +-10 +-9 +-9 +-7 +-7 +-6 +-6 +-5 +-4 +-4 +77 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +105 +99 +92 +86 +79 +75 +70 +65 +61 +58 +53 +50 +47 +44 +41 +39 +35 +33 +32 +30 +28 +27 +25 +23 +21 +21 +20 +18 +17 +16 +15 +15 +13 +13 +12 +12 +11 +10 +-17 +-99 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-116 +-108 +-100 +-93 +-86 +-80 +-74 +-69 +-63 +-59 +-55 +-51 +-47 +-44 +-40 +-37 +-35 +-32 +-29 +-27 +-25 +-23 +-21 +-19 +-18 +-16 +-15 +-14 +-12 +-12 +-10 +-9 +-9 +-8 +-7 +-7 +-6 +-6 +-5 +76 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +105 +98 +92 +86 +80 +75 +70 +65 +61 +57 +53 +51 +47 +45 +41 +39 +37 +34 +32 +31 +28 +27 +25 +23 +23 +22 +21 +20 +18 +18 +16 +16 +15 +14 +14 +13 +12 +12 +-16 +-98 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-116 +-108 +-101 +-93 +-87 +-81 +-75 +-70 +-65 +-60 +-55 +-52 +-48 +-44 +-41 +-38 +-35 +-33 +-30 +-28 +-25 +-23 +-22 +-20 +-18 +-17 +-15 +-14 +-13 +-12 +-11 +-11 +-9 +-9 +-8 +-8 +-7 +-7 +-6 +75 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +113 +105 +98 +92 +86 +79 +75 +70 +65 +61 +58 +53 +50 +47 +44 +41 +39 +36 +35 +33 +31 +29 +27 +26 +25 +23 +22 +20 +19 +18 +17 +17 +16 +15 +15 +14 +13 +13 +12 +-14 +-97 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-116 +-108 +-100 +-93 +-86 +-80 +-74 +-69 +-64 +-59 +-55 +-52 +-48 +-45 +-41 +-38 +-35 +-33 +-30 +-28 +-26 +-24 +-22 +-21 +-19 +-18 +-16 +-15 +-14 +-13 +-11 +-11 +-9 +-9 +-8 +-7 +-7 +-6 +-5 +75 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +113 +105 +98 +91 +85 +79 +74 +69 +65 +60 +57 +53 +50 +47 +44 +40 +39 +36 +33 +31 +30 +28 +26 +24 +24 +22 +21 +20 +18 +17 +17 +15 +15 +14 +14 +13 +12 +12 +11 +-16 +-98 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-108 +-100 +-93 +-86 +-80 +-74 +-68 +-64 +-59 +-55 +-51 +-47 +-44 +-41 +-37 +-35 +-32 +-30 +-28 +-26 +-23 +-22 +-20 +-18 +-18 +-16 +-15 +-14 +-13 +-11 +-11 +-9 +-9 +-8 +-8 +-6 +-6 +-5 +75 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +113 +105 +98 +92 +86 +79 +75 +70 +65 +61 +57 +52 +49 +46 +43 +40 +38 +35 +33 +30 +29 +27 +26 +24 +22 +21 +20 +18 +18 +16 +15 +14 +14 +12 +12 +11 +11 +11 +10 +-17 +-100 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-107 +-99 +-92 +-85 +-79 +-73 +-68 +-62 +-58 +-54 +-50 +-47 +-43 +-39 +-37 +-34 +-31 +-29 +-27 +-24 +-23 +-20 +-19 +-17 +-15 +-14 +-13 +-12 +-12 +-10 +-9 +-8 +-7 +-6 +-6 +-5 +-5 +-4 +76 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +105 +99 +92 +86 +81 +75 +35 +-53 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-113 +-105 +-97 +-91 +-84 +-78 +-73 +-68 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +103 +96 +90 +84 +79 +73 +69 +30 +-58 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-114 +-106 +-99 +-92 +-85 +-79 +-74 +-68 +16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +118 +110 +103 +96 +90 +84 +78 +73 +68 +29 +-59 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-115 +-106 +-99 +-92 +-86 +-79 +-73 +-68 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +110 +103 +96 +90 +83 +78 +73 +68 +29 +-58 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-107 +-99 +-92 +-86 +-80 +-74 +-69 +16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +103 +97 +90 +84 +79 +73 +69 +30 +-58 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-114 +-106 +-98 +-92 +-85 +-79 +-73 +-67 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +118 +110 +103 +96 +89 +83 +78 +73 +68 +63 +59 +55 +52 +48 +45 +42 +40 +37 +35 +32 +30 +29 +27 +26 +24 +22 +22 +20 +19 +18 +17 +17 +16 +15 +14 +13 +13 +13 +12 +11 +11 +-17 +-98 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-107 +-100 +-93 +-86 +-80 +-74 +11 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +116 +108 +101 +94 +88 +82 +77 +72 +67 +27 +-60 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-114 +-106 +-99 +-91 +-85 +-79 +-73 +-68 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +104 +97 +91 +85 +80 +74 +69 +30 +-57 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-114 +-106 +-99 +-92 +-86 +-79 +-73 +-68 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +110 +103 +96 +90 +84 +78 +73 +68 +29 +-59 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-107 +-99 +-93 +-87 +-80 +-74 +-69 +-64 +-58 +-55 +-51 +-47 +-44 +-41 +-38 +-36 +-32 +-30 +-28 +-26 +-24 +-22 +-20 +-19 +-17 +-16 +-15 +-14 +-12 +-11 +-9 +-9 +-8 +-7 +-7 +-6 +-5 +-5 +-4 +76 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +114 +106 +99 +92 +87 +81 +76 +36 +-52 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-113 +-104 +-97 +-90 +-84 +-77 +-73 +-67 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +118 +111 +104 +96 +90 +84 +78 +73 +68 +28 +-60 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-115 +-107 +-99 +-92 +-86 +-80 +-74 +-69 +16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +103 +97 +91 +84 +79 +73 +69 +64 +60 +56 +53 +49 +47 +43 +41 +38 +36 +34 +32 +30 +28 +26 +25 +23 +22 +20 +19 +18 +17 +16 +16 +15 +14 +13 +13 +12 +12 +11 +11 +-16 +-98 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-116 +-108 +-100 +-94 +-86 +-81 +-75 +11 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +117 +109 +102 +95 +89 +83 +78 +73 +68 +28 +-60 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-114 +-106 +-98 +-91 +-85 +-79 +-73 +-68 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +118 +110 +103 +96 +90 +83 +78 +73 +68 +29 +-59 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-115 +-106 +-99 +-92 +-86 +-80 +-74 +-68 +16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +118 +110 +103 +96 +90 +83 +78 +73 +68 +29 +-58 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-106 +-99 +-92 +-86 +-79 +-74 +-68 +-63 +-59 +-54 +-50 +-47 +-44 +-41 +-37 +-34 +-32 +-30 +-27 +-26 +-23 +-21 +-20 +-18 +-17 +-16 +-14 +-13 +-12 +-11 +-10 +-9 +-8 +-8 +-7 +-7 +-6 +-5 +-4 +77 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +114 +106 +99 +92 +86 +81 +76 +71 +66 +62 +58 +54 +51 +47 +44 +42 +39 +37 +35 +32 +31 +29 +27 +26 +25 +23 +22 +20 +20 +18 +17 +17 +16 +15 +15 +14 +14 +13 +12 +-15 +-97 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-116 +-108 +-100 +-93 +-86 +-81 +-75 +10 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +116 +109 +102 +94 +88 +82 +77 +71 +67 +28 +-60 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-106 +-99 +-91 +-85 +-79 +-74 +-68 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +110 +103 +96 +90 +83 +78 +73 +68 +30 +-58 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-107 +-99 +-92 +-85 +-80 +-74 +-68 +-64 +-59 +-55 +-51 +-48 +-44 +-41 +-38 +-35 +-32 +-30 +-28 +-26 +-23 +-22 +-20 +-18 +-17 +-16 +-14 +-14 +-12 +-11 +-10 +-9 +-8 +-8 +-7 +-7 +-5 +-5 +-4 +76 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +114 +106 +99 +93 +87 +81 +76 +35 +-53 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-112 +-104 +-97 +-90 +-83 +-77 +-72 +-67 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +111 +103 +96 +91 +84 +78 +73 +68 +63 +60 +56 +52 +48 +46 +42 +40 +38 +35 +33 +31 +29 +27 +25 +24 +23 +21 +20 +19 +18 +17 +16 +15 +15 +14 +13 +13 +11 +11 +10 +10 +-17 +-100 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-116 +-108 +-101 +-94 +-87 +-81 +-75 +10 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +117 +109 +102 +95 +89 +83 +78 +72 +68 +29 +-58 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-115 +-106 +-99 +-92 +-85 +-79 +-73 +-68 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +104 +97 +91 +85 +79 +74 +69 +29 +-58 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-114 +-106 +-98 +-91 +-85 +-79 +-73 +-68 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +111 +104 +97 +91 +84 +79 +73 +68 +29 +-59 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-114 +-106 +-99 +-92 +-86 +-80 +-73 +-68 +16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +110 +103 +96 +89 +83 +78 +72 +68 +29 +-59 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-114 +-106 +-98 +-91 +-85 +-79 +-73 +-68 +-63 +-58 +-54 +-50 +-47 +-43 +-40 +-37 +-35 +-32 +-30 +-28 +-25 +-23 +-22 +-19 +-18 +-16 +-15 +-14 +-13 +-12 +-11 +-9 +-9 +-8 +-7 +-7 +-6 +-5 +-5 +-4 +76 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +105 +98 +91 +85 +79 +74 +34 +-53 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-113 +-105 +-97 +-91 +-84 +-77 +-72 +-67 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +104 +96 +90 +84 +78 +73 +69 +29 +-59 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-114 +-106 +-98 +-91 +-85 +-79 +-73 +-68 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +110 +104 +97 +90 +84 +79 +73 +68 +29 +-58 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-113 +-106 +-98 +-91 +-85 +-79 +-73 +-68 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +118 +110 +103 +95 +89 +83 +78 +72 +68 +28 +-60 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-114 +-106 +-99 +-91 +-85 +-79 +-73 +-68 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +110 +104 +97 +90 +84 +79 +73 +69 +30 +-58 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-107 +-99 +-91 +-85 +-79 +-74 +-68 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +104 +97 +91 +84 +79 +74 +69 +65 +61 +56 +53 +49 +46 +44 +41 +38 +36 +34 +32 +30 +29 +27 +25 +23 +22 +21 +20 +18 +18 +17 +16 +15 +14 +13 +13 +12 +12 +11 +10 +-16 +-98 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-116 +-108 +-100 +-93 +-87 +-81 +-75 +11 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +117 +108 +101 +94 +88 +82 +77 +71 +66 +28 +-60 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-107 +-100 +-93 +-86 +-80 +-75 +-69 +16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +118 +110 +103 +96 +90 +84 +78 +73 +68 +29 +-58 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-114 +-105 +-98 +-90 +-84 +-78 +-73 +-67 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +104 +96 +90 +84 +79 +74 +69 +30 +-58 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-107 +-99 +-93 +-87 +-80 +-75 +-69 +16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +117 +109 +102 +95 +89 +83 +78 +72 +68 +28 +-60 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-107 +-99 +-92 +-85 +-79 +-74 +-69 +16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +111 +105 +98 +92 +85 +80 +75 +70 +30 +-58 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-113 +-105 +-98 +-91 +-85 +-79 +-73 +-68 +-63 +-58 +-54 +-50 +-46 +-43 +-40 +-37 +-35 +-32 +-29 +-27 +-26 +-23 +-22 +-20 +-19 +-17 +-16 +-15 +-13 +-12 +-11 +-10 +-10 +-9 +-8 +-7 +-7 +-6 +-6 +-4 +76 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +106 +99 +92 +86 +80 +75 +35 +-53 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-113 +-104 +-97 +-90 +-83 +-77 +-72 +-66 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +103 +97 +91 +84 +79 +74 +68 +29 +-58 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-115 +-106 +-99 +-92 +-85 +-79 +-73 +-68 +16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +118 +110 +103 +95 +90 +83 +79 +73 +68 +64 +60 +55 +52 +49 +46 +43 +40 +37 +36 +33 +32 +30 +28 +26 +25 +23 +22 +21 +20 +19 +18 +17 +16 +15 +15 +14 +13 +13 +11 +11 +11 +-16 +-98 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-115 +-108 +-100 +-93 +-86 +-80 +-74 +-68 +-64 +-59 +-55 +-51 +-47 +-44 +-40 +-37 +-34 +-32 +-29 +-27 +-25 +-23 +-22 +-20 +-19 +-18 +-16 +-15 +-13 +-12 +-11 +-10 +-10 +-9 +-8 +-8 +-6 +-6 +-5 +75 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +104 +98 +91 +85 +79 +75 +34 +-53 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-113 +-105 +-97 +-90 +-84 +-78 +-72 +-67 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +104 +97 +91 +85 +79 +73 +69 +29 +-58 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-115 +-107 +-99 +-92 +-86 +-80 +-75 +-69 +16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +118 +110 +103 +95 +89 +83 +78 +72 +68 +63 +59 +55 +52 +48 +46 +43 +40 +37 +35 +33 +31 +28 +27 +25 +24 +23 +21 +20 +19 +17 +17 +16 +15 +14 +13 +12 +12 +11 +11 +10 +10 +-17 +-99 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-116 +-108 +-100 +-94 +-86 +-81 +-75 +11 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +117 +108 +101 +95 +89 +82 +77 +71 +67 +28 +-59 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-114 +-106 +-98 +-91 +-85 +-78 +-73 +-67 +-63 +-57 +-54 +-50 +-46 +-43 +-40 +-36 +-34 +-31 +-29 +-27 +-25 +-23 +-21 +-20 +-19 +-16 +-15 +-14 +-13 +-12 +-11 +-10 +-9 +-8 +-8 +-6 +-6 +-5 +-4 +-4 +76 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +114 +106 +100 +92 +87 +81 +75 +36 +-52 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-113 +-106 +-98 +-91 +-85 +-78 +-72 +-67 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +104 +97 +90 +85 +80 +74 +70 +65 +60 +56 +53 +49 +47 +43 +41 +38 +36 +33 +32 +29 +28 +25 +25 +23 +21 +20 +20 +18 +17 +16 +15 +15 +14 +13 +13 +12 +12 +11 +10 +-16 +-99 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-117 +-109 +-101 +-94 +-87 +-81 +-75 +10 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +116 +108 +102 +95 +89 +83 +77 +72 +67 +28 +-59 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-114 +-106 +-99 +-92 +-85 +-79 +-73 +-68 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +119 +111 +104 +96 +90 +84 +79 +73 +69 +29 +-58 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-115 +-106 +-99 +-92 +-85 +-79 +-74 +-68 +-63 +-58 +-54 +-51 +-48 +-43 +-40 +-37 +-34 +-32 +-30 +-27 +-26 +-23 +-21 +-19 +-18 +-16 +-16 +-14 +-13 +-12 +-11 +-10 +-9 +-8 +-7 +-6 +-6 +-5 +-5 +-4 +76 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +106 +100 +92 +87 +81 +76 +71 +66 +62 +58 +54 +51 +47 +45 +42 +40 +37 +35 +33 +31 +28 +27 +26 +24 +23 +21 +20 +20 +18 +18 +17 +16 +15 +14 +14 +13 +12 +12 +-15 +-98 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-116 +-107 +-100 +-93 +-87 +-81 +-74 +-69 +-64 +-60 +-55 +-52 +-48 +-44 +-41 +-38 +-35 +-33 +-31 +-28 +-26 +-24 +-22 +-21 +-19 +-18 +-16 +-15 +-14 +-13 +-11 +-11 +-9 +-9 +-8 +-8 +-7 +-6 +-5 +75 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +113 +105 +98 +92 +86 +80 +75 +70 +65 +61 +58 +54 +51 +47 +44 +41 +39 +36 +34 +33 +31 +29 +27 +25 +24 +23 +21 +20 +19 +18 +18 +16 +16 +15 +14 +13 +13 +13 +12 +-15 +-97 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-116 +-109 +-101 +-93 +-87 +-81 +-75 +-69 +-64 +-60 +-55 +-52 +-48 +-44 +-41 +-38 +-35 +-33 +-30 +-29 +-26 +-24 +-22 +-20 +-18 +-17 +-15 +-15 +-13 +-12 +-11 +-10 +-9 +-9 +-8 +-7 +-6 +-6 +-6 +75 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +114 +105 +99 +92 +87 +80 +75 +70 +66 +62 +58 +54 +50 +47 +44 +42 +39 +36 +35 +32 +30 +28 +27 +25 +23 +22 +21 +19 +19 +18 +17 +16 +15 +14 +13 +13 +13 +12 +11 +-16 +-98 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-116 +-108 +-100 +-94 +-87 +-81 +-74 +-69 +-64 +-60 +-56 +-52 +-48 +-45 +-41 +-38 +-36 +-33 +-31 +-28 +-26 +-25 +-22 +-21 +-19 +-18 +-17 +-15 +-13 +-13 +-11 +-10 +-10 +-9 +-8 +-8 +-6 +-6 +-5 +75 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +112 +105 +98 +91 +86 +80 +75 +70 +66 +61 +57 +54 +51 +47 +44 +41 +39 +36 +34 +33 +31 +29 +28 +26 +24 +23 +22 +20 +19 +18 +18 +16 +16 +15 +14 +14 +13 +12 +12 +-15 +-97 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-116 +-108 +-100 +-93 +-86 +-81 +-75 +-70 +-64 +-60 +-56 +-52 +-48 +-45 +-42 +-39 +-35 +-33 +-31 +-29 +-26 +-24 +-23 +-21 +-19 +-18 +-17 +-15 +-14 +-13 +-12 +-11 +-10 +-9 +-8 +-8 +-7 +-7 +-6 +74 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +104 +98 +91 +86 +79 +75 +70 +65 +61 +58 +54 +51 +47 +44 +41 +39 +37 +35 +32 +31 +29 +27 +26 +25 +23 +22 +20 +20 +19 +17 +16 +16 +15 +15 +14 +14 +13 +12 +-14 +-97 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-116 +-108 +-100 +-93 +-86 +-80 +-74 +-70 +-64 +-60 +-56 +-52 +-49 +-45 +-41 +-39 +-36 +-33 +-31 +-29 +-26 +-24 +-22 +-20 +-19 +-17 +-16 +-15 +-13 +-13 +-11 +-10 +-9 +-9 +-8 +-7 +-7 +-6 +-6 +75 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +104 +98 +91 +85 +79 +74 +34 +-54 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-112 +-104 +-97 +-90 +-83 +-77 +-72 +-66 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +104 +97 +91 +84 +79 +74 +69 +29 +-58 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-115 +-106 +-98 +-92 +-85 +-79 +-74 +-68 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +104 +96 +90 +84 +79 +74 +69 +30 +-58 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-106 +-99 +-93 +-86 +-80 +-75 +-69 +16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +118 +109 +103 +95 +90 +84 +78 +72 +68 +28 +-59 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-116 +-107 +-100 +-93 +-86 +-79 +-74 +-69 +16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +112 +104 +97 +91 +85 +80 +74 +70 +30 +-57 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-114 +-105 +-97 +-91 +-84 +-78 +-73 +-67 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +103 +97 +90 +83 +79 +73 +69 +64 +60 +56 +53 +49 +47 +44 +40 +38 +36 +33 +31 +29 +28 +26 +24 +23 +22 +20 +19 +18 +17 +16 +15 +14 +14 +13 +12 +12 +11 +11 +11 +-17 +-98 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-108 +-101 +-94 +-87 +-81 +-75 +10 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +117 +109 +102 +95 +88 +82 +77 +72 +67 +28 +-60 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-115 +-106 +-98 +-92 +-86 +-79 +-73 +-68 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +103 +96 +90 +84 +78 +73 +69 +29 +-58 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-115 +-107 +-99 +-92 +-86 +-79 +-73 +-69 +16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +110 +103 +96 +90 +83 +78 +73 +68 +29 +-59 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-115 +-106 +-98 +-91 +-85 +-78 +-73 +-68 +-63 +-58 +-54 +-50 +-47 +-43 +-40 +-37 +-34 +-31 +-29 +-26 +-25 +-23 +-21 +-19 +-18 +-16 +-15 +-14 +-13 +-12 +-11 +-10 +-9 +-8 +-8 +-7 +-6 +-6 +-5 +-4 +76 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +105 +98 +92 +86 +80 +75 +36 +-52 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-113 +-105 +-97 +-90 +-84 +-78 +-72 +-66 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +104 +97 +91 +85 +79 +73 +69 +29 +-59 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-114 +-106 +-99 +-91 +-85 +-80 +-74 +-68 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +110 +103 +96 +90 +84 +79 +73 +69 +64 +60 +56 +53 +49 +46 +43 +40 +38 +35 +33 +32 +29 +27 +26 +24 +23 +22 +20 +19 +18 +17 +16 +15 +14 +13 +13 +13 +12 +12 +11 +11 +-17 +-99 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-116 +-109 +-100 +-93 +-87 +-80 +-75 +10 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +117 +109 +101 +94 +88 +82 +77 +71 +67 +27 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 diff --git a/traces/lf_t5577_nexwatch.pm3 b/traces/lf_t5577_nexwatch.pm3 new file mode 100644 index 000000000..dccb0b49a --- /dev/null +++ b/traces/lf_t5577_nexwatch.pm3 @@ -0,0 +1,10000 @@ +31 +-29 +31 +-29 +30 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-30 +30 +-30 +31 +-30 +30 +-30 +30 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +30 +-30 +31 +-29 +33 +-26 +32 +-29 +31 +-30 +31 +-29 +31 +-30 +30 +-30 +31 +-28 +31 +-27 +33 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +32 +-29 +32 +-27 +33 +-26 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-30 +32 +-28 +31 +-27 +32 +-27 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-29 +32 +-27 +32 +-27 +32 +-29 +31 +-30 +31 +-29 +31 +-30 +30 +-30 +31 +-29 +31 +-26 +34 +-25 +33 +-28 +31 +-30 +30 +-30 +30 +-30 +30 +-30 +30 +-30 +30 +-28 +32 +-27 +32 +-29 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +30 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +32 +-27 +33 +-28 +31 +-29 +31 +-29 +30 +-29 +31 +-29 +31 +-29 +31 +73 +-2 +43 +-25 +30 +-33 +26 +-35 +25 +-35 +26 +-34 +27 +-34 +27 +-32 +28 +-30 +30 +-31 +29 +-32 +29 +-32 +29 +-31 +30 +-31 +29 +-31 +30 +-31 +-108 +-43 +-97 +-3 +-58 +23 +-40 +33 +-33 +37 +-27 +39 +-22 +44 +-19 +44 +-15 +46 +-13 +47 +-13 +45 +-14 +44 +-16 +42 +-19 +40 +-21 +37 +-23 +36 +77 +1 +46 +-22 +32 +-31 +29 +-33 +27 +-32 +28 +-33 +29 +-31 +29 +-31 +29 +-29 +32 +-29 +30 +-30 +31 +-31 +30 +-30 +30 +-30 +31 +-30 +31 +-29 +-106 +-43 +-96 +-3 +-58 +23 +-39 +33 +-32 +36 +-27 +40 +-21 +44 +-19 +44 +-14 +47 +-12 +48 +-12 +46 +-13 +45 +-15 +43 +-18 +41 +-20 +40 +-21 +38 +79 +2 +47 +-22 +33 +-30 +29 +-33 +28 +-32 +29 +-31 +29 +-31 +30 +-31 +30 +-28 +31 +-30 +30 +-30 +30 +-30 +29 +-31 +30 +-31 +30 +-30 +30 +-30 +31 +-28 +33 +-29 +31 +-30 +30 +-31 +30 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-27 +33 +-28 +32 +-29 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-29 +-106 +-43 +-96 +-2 +-57 +23 +-39 +33 +-32 +38 +-27 +39 +-21 +43 +-19 +45 +-15 +47 +-13 +47 +-13 +46 +-13 +45 +-16 +43 +-18 +41 +-20 +39 +-22 +37 +-22 +37 +-22 +37 +-25 +35 +-26 +34 +-26 +34 +-26 +34 +-26 +33 +-27 +34 +-25 +34 +-25 +34 +-27 +33 +-27 +33 +-28 +32 +-29 +32 +-28 +33 +-27 +32 +-27 +33 +-27 +33 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +33 +-29 +31 +-29 +31 +-30 +30 +-30 +31 +-29 +31 +-29 +31 +-28 +33 +-26 +32 +-29 +31 +-30 +31 +-30 +30 +-29 +31 +-30 +31 +-29 +31 +-27 +33 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-29 +30 +-29 +32 +-29 +32 +-27 +32 +-26 +33 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +30 +-29 +31 +-27 +33 +-26 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +32 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-26 +33 +-28 +31 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-29 +32 +-27 +33 +-27 +32 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +33 +-28 +31 +-29 +30 +-30 +31 +-30 +31 +-30 +30 +-29 +31 +-27 +33 +-26 +32 +-29 +31 +-30 +30 +-30 +30 +-30 +30 +-30 +30 +-30 +30 +-28 +31 +-28 +31 +-30 +30 +-30 +30 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-28 +31 +-27 +32 +-29 +31 +-29 +30 +-30 +31 +-30 +31 +-30 +30 +-29 +31 +-28 +32 +-27 +32 +-28 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +-27 +33 +-26 +33 +-28 +32 +-28 +31 +-29 +32 +-29 +32 +-29 +31 +-29 +31 +-28 +33 +-26 +33 +-28 +31 +-29 +32 +-29 +31 +-29 +31 +-30 +30 +-29 +31 +-27 +33 +-27 +33 +-28 +31 +-30 +31 +-30 +30 +-30 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +33 +-29 +31 +-30 +30 +-30 +30 +-30 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +30 +-30 +31 +-30 +30 +-29 +31 +-30 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-26 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +33 +-27 +33 +-28 +32 +-28 +31 +-29 +31 +-29 +32 +-29 +31 +-29 +32 +-27 +33 +-26 +33 +-28 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +33 +-26 +32 +-28 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +30 +-30 +30 +-30 +30 +-30 +30 +-30 +30 +-30 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-30 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +30 +-30 +31 +-30 +31 +-30 +30 +-30 +30 +-28 +33 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-27 +33 +-26 +32 +-29 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-30 +30 +-28 +32 +-27 +32 +-29 +30 +-30 +31 +-30 +30 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-26 +33 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +33 +-27 +32 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +-26 +33 +-27 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +33 +-26 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-26 +33 +-28 +31 +-29 +32 +-29 +31 +-28 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +33 +-29 +32 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-30 +31 +-30 +30 +-30 +29 +-30 +30 +-30 +31 +-29 +30 +-27 +32 +-28 +31 +-29 +31 +-30 +30 +-30 +31 +-30 +30 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-26 +34 +-26 +33 +-28 +31 +-29 +31 +-30 +31 +-30 +30 +-29 +31 +-29 +32 +-26 +33 +-26 +33 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-26 +33 +-26 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +-27 +32 +-26 +33 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +30 +-29 +31 +-27 +32 +-27 +32 +-30 +31 +-30 +31 +-30 +31 +-29 +30 +-29 +31 +-29 +31 +-28 +32 +-27 +31 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-29 +31 +-30 +30 +-28 +32 +-27 +32 +-29 +31 +-29 +30 +-30 +30 +-30 +31 +-29 +31 +-29 +32 +-27 +33 +-27 +33 +-28 +32 +-29 +31 +-29 +30 +-29 +31 +-30 +31 +-29 +31 +-27 +33 +-27 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +30 +-30 +31 +-30 +31 +-27 +31 +-28 +31 +-30 +31 +-29 +30 +-30 +30 +-31 +30 +-30 +30 +-30 +30 +-28 +32 +-27 +32 +-29 +30 +-30 +30 +-30 +30 +-30 +30 +-30 +30 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +30 +-30 +31 +-29 +31 +-29 +31 +-27 +32 +-26 +32 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +-27 +33 +-26 +34 +-28 +31 +-29 +31 +-29 +32 +-29 +31 +-29 +32 +-28 +32 +-26 +34 +-26 +33 +-28 +31 +-29 +31 +-29 +31 +-28 +31 +-29 +32 +-28 +31 +-27 +33 +-26 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-30 +30 +-30 +30 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-28 +32 +-29 +30 +-30 +30 +-30 +30 +-30 +30 +-30 +30 +-30 +31 +-28 +32 +-28 +32 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +30 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +73 +-3 +42 +-25 +30 +-33 +26 +-35 +26 +-35 +26 +-34 +26 +-33 +28 +-33 +28 +-30 +30 +-31 +29 +-31 +29 +-31 +29 +-31 +30 +-31 +30 +-30 +30 +-30 +-107 +-44 +-97 +-4 +-59 +22 +-40 +33 +-32 +36 +-27 +40 +-22 +44 +-19 +44 +-15 +46 +-13 +47 +-13 +46 +-14 +44 +-16 +43 +-18 +40 +-20 +39 +-22 +37 +-22 +37 +-23 +36 +-25 +34 +-27 +33 +-27 +33 +-27 +33 +-27 +33 +-28 +32 +-27 +32 +-27 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +30 +-30 +30 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-26 +32 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +31 +-27 +33 +-27 +33 +-29 +31 +-29 +31 +-30 +30 +-29 +31 +-30 +31 +-29 +31 +73 +-3 +42 +-25 +30 +-33 +26 +-35 +25 +-35 +26 +-34 +27 +-34 +27 +-33 +28 +-30 +30 +-31 +29 +-32 +29 +-32 +29 +-31 +30 +-31 +30 +-31 +30 +-30 +-107 +-44 +-96 +-4 +-58 +23 +-39 +33 +-32 +37 +-27 +40 +-21 +44 +-19 +44 +-15 +46 +-13 +47 +-13 +46 +-14 +44 +-16 +43 +-18 +41 +-20 +39 +-22 +37 +-22 +37 +-22 +36 +-25 +35 +-26 +34 +-26 +33 +-27 +33 +-28 +33 +-27 +33 +-26 +34 +-25 +34 +-28 +33 +-28 +31 +-28 +32 +-28 +32 +-28 +32 +-28 +32 +73 +-3 +43 +-26 +30 +-33 +26 +-34 +26 +-35 +27 +-34 +27 +-33 +28 +-33 +29 +-29 +31 +-30 +29 +-31 +29 +-32 +29 +-31 +30 +-31 +29 +-31 +30 +-30 +31 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-27 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-27 +32 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +-29 +32 +-26 +34 +-28 +31 +-29 +32 +-30 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-30 +32 +-29 +31 +-29 +32 +-29 +-106 +-43 +-96 +-3 +-58 +23 +-39 +34 +-32 +37 +-27 +40 +-21 +44 +-19 +45 +-15 +47 +-12 +47 +-13 +46 +-14 +45 +-15 +42 +-18 +41 +-20 +39 +-22 +37 +-22 +38 +-22 +37 +-25 +34 +-26 +34 +-27 +33 +-27 +34 +-27 +33 +-28 +32 +-26 +34 +-26 +33 +-28 +32 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +73 +-3 +42 +-25 +30 +-33 +27 +-34 +26 +-34 +26 +-34 +27 +-33 +28 +-32 +28 +-29 +30 +-31 +30 +-31 +30 +-31 +30 +-31 +30 +-31 +30 +-30 +30 +-30 +-108 +-44 +-96 +-3 +-58 +23 +-39 +33 +-32 +37 +-27 +40 +-21 +43 +-19 +45 +-14 +47 +-13 +47 +-13 +46 +-14 +45 +-15 +43 +-18 +41 +-20 +39 +-22 +37 +-22 +37 +-22 +37 +-25 +35 +-26 +34 +-27 +33 +-27 +34 +-27 +33 +-27 +32 +-26 +35 +-25 +34 +-27 +32 +-28 +32 +-29 +32 +-29 +31 +-29 +31 +-29 +32 +73 +-3 +42 +-26 +30 +-33 +26 +-35 +25 +-35 +27 +-34 +26 +-34 +28 +-33 +29 +-30 +30 +-30 +29 +-31 +30 +-31 +29 +-31 +30 +-31 +30 +-30 +31 +-29 +31 +-27 +32 +-29 +31 +-30 +30 +-30 +30 +-31 +31 +-30 +31 +-30 +31 +-30 +31 +-27 +33 +-29 +32 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-29 +32 +-27 +33 +-28 +31 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-27 +33 +-28 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +32 +-29 +31 +-29 +32 +-27 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +32 +-29 +32 +-29 +31 +-26 +34 +-28 +32 +-29 +31 +-29 +31 +-29 +32 +-29 +32 +-29 +32 +-28 +32 +-25 +34 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-27 +33 +-29 +32 +-29 +31 +-30 +30 +-31 +31 +-30 +30 +-30 +31 +-30 +31 +-27 +33 +-28 +32 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +-106 +-42 +-96 +-2 +-57 +23 +-38 +34 +-31 +38 +-26 +41 +-21 +45 +-17 +46 +-14 +48 +-12 +48 +-12 +47 +-13 +45 +-15 +43 +-18 +41 +-20 +39 +-22 +38 +-22 +37 +-22 +37 +-24 +35 +-25 +34 +-26 +34 +-27 +33 +-27 +32 +-27 +33 +-26 +34 +-25 +34 +-27 +32 +-28 +32 +-28 +32 +-28 +32 +-29 +31 +-29 +31 +-26 +34 +-26 +34 +-28 +31 +-29 +31 +-29 +31 +-29 +32 +-28 +31 +-29 +31 +-27 +32 +-27 +32 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +73 +-3 +41 +-26 +30 +-34 +26 +-35 +25 +-35 +26 +-34 +27 +-34 +27 +-33 +28 +-30 +30 +-31 +29 +-31 +29 +-31 +28 +-32 +30 +-32 +29 +-31 +29 +-30 +31 +-28 +32 +-29 +30 +-30 +31 +-31 +30 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +32 +-27 +33 +-28 +32 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-30 +30 +-29 +31 +-27 +33 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-26 +33 +-28 +31 +-29 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +-107 +-43 +-96 +-3 +-58 +23 +-39 +33 +-32 +37 +-27 +41 +-21 +44 +-18 +45 +-14 +47 +-12 +48 +-12 +47 +-13 +45 +-15 +43 +-18 +41 +-20 +39 +-22 +37 +-22 +38 +-23 +36 +-25 +34 +-26 +35 +-26 +34 +-27 +33 +-27 +33 +-27 +33 +-26 +34 +-26 +33 +-28 +32 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-26 +32 +-28 +32 +-29 +31 +-29 +31 +-28 +32 +-29 +31 +-29 +31 +73 +-2 +42 +-25 +30 +-33 +26 +-35 +26 +-34 +27 +-34 +27 +-33 +28 +-32 +28 +-29 +31 +-30 +30 +-31 +29 +-32 +29 +-32 +29 +-31 +29 +-31 +30 +-30 +-108 +-44 +-97 +-4 +-58 +22 +-41 +32 +-33 +36 +-28 +39 +-22 +43 +-19 +43 +-15 +46 +-13 +47 +-13 +46 +-14 +45 +-16 +42 +-19 +40 +-21 +38 +-22 +37 +78 +2 +47 +-21 +34 +-29 +29 +-32 +29 +-32 +29 +-31 +29 +-31 +30 +-31 +31 +-28 +32 +-29 +31 +-30 +31 +-31 +30 +-30 +30 +-30 +31 +-30 +31 +-30 +-107 +-44 +-96 +-4 +-58 +23 +-40 +33 +-32 +37 +-27 +40 +-21 +44 +-19 +43 +-15 +46 +-13 +47 +-13 +46 +-14 +44 +-16 +43 +-18 +40 +-21 +37 +-23 +37 +77 +2 +47 +-21 +33 +-30 +28 +-33 +28 +-33 +29 +-32 +29 +-31 +30 +-31 +30 +-28 +32 +-29 +31 +-30 +30 +-30 +30 +-31 +30 +-30 +30 +-30 +31 +-29 +-106 +-44 +-96 +-4 +-58 +22 +-40 +33 +-32 +37 +-27 +40 +-22 +43 +-20 +43 +-15 +46 +-13 +46 +-14 +45 +-14 +44 +-16 +42 +-19 +40 +-21 +37 +-23 +37 +-22 +38 +-23 +36 +-25 +34 +-26 +34 +-26 +34 +-26 +33 +-27 +33 +-27 +33 +-25 +34 +-25 +34 +-27 +33 +-28 +32 +-28 +32 +-28 +32 +-28 +31 +-29 +31 +-27 +33 +-26 +33 +-28 +31 +-29 +31 +-29 +30 +-30 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +33 +-28 +31 +-29 +31 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +30 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +74 +-2 +43 +-25 +30 +-33 +26 +-35 +26 +-35 +26 +-33 +27 +-33 +28 +-33 +28 +-29 +30 +-31 +29 +-32 +29 +-32 +28 +-32 +29 +-32 +30 +-31 +30 +-30 +30 +-28 +32 +-30 +31 +-30 +30 +-31 +30 +-30 +31 +-29 +31 +-30 +31 +-29 +31 +-27 +33 +-28 +31 +-30 +31 +-30 +31 +-29 +32 +-29 +32 +-29 +32 +-28 +-106 +-43 +-95 +-2 +-57 +24 +-38 +34 +-31 +38 +-26 +42 +-20 +44 +-18 +45 +-14 +48 +-11 +48 +-12 +47 +-13 +46 +-15 +44 +-17 +41 +-20 +39 +-22 +38 +-21 +38 +-22 +37 +-25 +35 +-26 +33 +-27 +33 +-27 +33 +-27 +33 +-27 +33 +-26 +34 +-25 +34 +-27 +32 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-30 +30 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +33 +-28 +31 +-28 +31 +-29 +31 +-28 +31 +-28 +32 +-29 +32 +-27 +32 +-26 +33 +-28 +31 +-29 +31 +-29 +32 +-29 +32 +-29 +31 +-29 +32 +-27 +33 +-26 +32 +-29 +32 +-30 +31 +-30 +30 +-30 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +30 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +30 +-30 +29 +-30 +31 +-30 +31 +-29 +30 +-28 +32 +-28 +31 +-30 +30 +-30 +30 +-30 +30 +-30 +29 +-30 +30 +-30 +31 +-28 +31 +-27 +32 +-29 +31 +-30 +30 +-30 +30 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +32 +-26 +33 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +31 +-27 +33 +-26 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-25 +33 +-26 +33 +-28 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +30 +-29 +31 +-28 +32 +-27 +31 +-29 +30 +-29 +31 +-29 +31 +-29 +31 +-30 +30 +-29 +31 +-27 +32 +-27 +32 +-29 +30 +-30 +30 +-30 +30 +-30 +30 +-30 +30 +-30 +31 +-28 +32 +-28 +31 +-29 +31 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-29 +31 +73 +-3 +42 +-26 +29 +-33 +26 +-35 +25 +-35 +26 +-35 +26 +-34 +27 +-33 +28 +-30 +30 +-32 +29 +-32 +29 +-32 +28 +-32 +29 +-31 +30 +-31 +30 +-30 +-108 +-44 +-97 +-3 +-58 +22 +-40 +33 +-33 +37 +-27 +40 +-21 +43 +-19 +44 +-15 +47 +-12 +47 +-12 +47 +-13 +45 +-15 +43 +-18 +41 +-20 +39 +-22 +38 +79 +2 +47 +-21 +34 +-30 +29 +-32 +29 +-31 +29 +-32 +29 +-31 +30 +-30 +30 +-28 +32 +-29 +31 +-30 +30 +-31 +30 +-31 +30 +-30 +31 +-29 +32 +-29 +-106 +-43 +-96 +-3 +-58 +23 +-39 +34 +-32 +37 +-27 +41 +-20 +44 +-19 +44 +-14 +48 +-12 +47 +-12 +47 +-13 +46 +-15 +43 +-17 +41 +-21 +39 +-22 +37 +79 +2 +47 +-21 +33 +-30 +29 +-32 +28 +-32 +29 +-32 +29 +-31 +29 +-30 +30 +-28 +32 +-29 +30 +-30 +30 +-31 +31 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-27 +33 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-29 +-106 +-43 +-95 +-3 +-58 +23 +-39 +33 +-32 +37 +-27 +40 +-22 +44 +-19 +45 +-14 +48 +-12 +48 +-12 +47 +-13 +45 +-15 +43 +-18 +41 +-20 +39 +-22 +38 +-22 +37 +-22 +36 +-25 +35 +-26 +34 +-26 +34 +-27 +34 +-27 +34 +-26 +33 +-25 +35 +-25 +34 +-27 +33 +-27 +33 +-28 +33 +-27 +33 +-28 +32 +-28 +32 +-26 +34 +-26 +33 +-28 +32 +-28 +32 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +-27 +32 +-27 +33 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +30 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +30 +-29 +31 +-30 +31 +-29 +30 +-28 +32 +-27 +32 +-29 +30 +-30 +30 +-30 +30 +-30 +30 +-29 +30 +-30 +30 +-28 +31 +-28 +31 +-30 +30 +-31 +28 +-31 +30 +-31 +31 +-30 +30 +-30 +30 +-29 +31 +-28 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +30 +-30 +30 +-31 +30 +-28 +32 +-27 +31 +-30 +30 +-30 +30 +-30 +30 +-30 +30 +-30 +30 +-30 +30 +-28 +32 +-28 +31 +-29 +30 +-30 +31 +-30 +30 +-29 +30 +-29 +31 +-30 +31 +-27 +32 +-27 +33 +-28 +31 +-30 +31 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-27 +33 +-27 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-26 +33 +-26 +33 +-28 +31 +-29 +32 +-28 +31 +-28 +32 +-29 +31 +-28 +32 +-26 +33 +-27 +33 +-28 +31 +-29 +32 +-29 +32 +-29 +31 +-28 +32 +-29 +32 +-26 +33 +-26 +34 +-28 +32 +-29 +31 +-29 +32 +-29 +32 +-28 +32 +-28 +32 +-27 +33 +-27 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +30 +-29 +31 +-29 +31 +-28 +31 +-27 +32 +-30 +30 +-30 +30 +-30 +30 +-30 +30 +-30 +30 +-30 +30 +-28 +32 +-28 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +30 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-28 +32 +-29 +31 +-29 +30 +-29 +31 +-29 +31 +-29 +31 +-28 +31 +-28 +32 +-29 +31 +-29 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-27 +32 +-27 +32 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-27 +32 +-27 +33 +-29 +32 +-28 +31 +-29 +32 +-29 +32 +-29 +31 +-28 +32 +-27 +33 +-27 +32 +-29 +31 +-29 +31 +-29 +30 +-29 +31 +-30 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-29 +30 +-30 +31 +-30 +31 +-29 +31 +-28 +32 +-27 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-29 +32 +-26 +33 +-27 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +32 +-26 +33 +-28 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +32 +-29 +30 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +30 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +32 +-27 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +-29 +32 +-27 +33 +-26 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +32 +-28 +31 +-29 +31 +-30 +30 +-29 +31 +-29 +32 +-29 +31 +-27 +32 +-27 +33 +-28 +32 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +31 +-27 +33 +-26 +34 +-27 +32 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-26 +33 +-27 +32 +-29 +31 +-29 +30 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +30 +-30 +30 +-30 +30 +-30 +30 +-29 +31 +-28 +32 +-27 +31 +-29 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +30 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +30 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-26 +34 +-25 +33 +-28 +31 +-30 +31 +-29 +30 +-30 +31 +-30 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +30 +-30 +30 +-30 +31 +-29 +30 +-30 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-30 +31 +-29 +30 +-30 +31 +-30 +30 +-30 +31 +-28 +33 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-28 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +32 +-28 +31 +-28 +32 +-27 +32 +-28 +31 +-29 +31 +-30 +30 +-29 +31 +-30 +31 +-29 +30 +-28 +32 +-27 +32 +-29 +30 +-31 +30 +-30 +30 +-30 +30 +-30 +30 +-29 +31 +-29 +31 +-28 +32 +-29 +30 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +30 +-28 +32 +-27 +32 +-29 +30 +-30 +30 +-31 +31 +-29 +30 +-30 +30 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-27 +32 +-29 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-26 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +-28 +32 +-27 +33 +-28 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +32 +-29 +31 +-30 +31 +-30 +30 +-29 +31 +-29 +31 +-29 +30 +-28 +31 +-28 +32 +-29 +30 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-27 +33 +-26 +32 +-29 +31 +-30 +31 +-30 +30 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +32 +-29 +31 +-29 +31 +-30 +32 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +33 +-29 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +30 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +30 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-28 +33 +-26 +32 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +73 +-3 +42 +-25 +30 +-33 +26 +-35 +25 +-35 +26 +-34 +27 +-33 +28 +-32 +28 +-30 +30 +-31 +29 +-32 +28 +-32 +29 +-32 +29 +-31 +29 +-31 +30 +-31 +-108 +-44 +-97 +-4 +-58 +21 +-40 +33 +-33 +37 +-27 +39 +-22 +43 +-19 +44 +-15 +46 +-13 +47 +-13 +46 +-14 +45 +-15 +42 +-18 +40 +-21 +38 +-23 +36 +-22 +37 +-23 +37 +-25 +35 +-26 +34 +-27 +33 +-28 +32 +-27 +32 +-27 +33 +-26 +34 +-26 +33 +-28 +32 +-29 +31 +-28 +32 +-28 +32 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-29 +31 +-27 +33 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-28 +31 +-29 +31 +-29 +31 +-28 +31 +-29 +31 +-29 +31 +73 +-3 +42 +-25 +30 +-34 +26 +-35 +25 +-35 +26 +-34 +27 +-33 +27 +-33 +28 +-30 +30 +-32 +29 +-31 +29 +-32 +29 +-32 +29 +-31 +30 +-30 +30 +-30 +-107 +-44 +-97 +-4 +-58 +22 +-40 +32 +-33 +36 +-28 +40 +-21 +43 +-19 +44 +-15 +46 +-13 +47 +-13 +45 +-14 +45 +-16 +42 +-18 +41 +-20 +39 +-22 +37 +-22 +37 +-23 +36 +-26 +34 +-27 +33 +-27 +33 +-27 +33 +-27 +33 +-27 +33 +-26 +34 +-25 +35 +-27 +33 +-27 +32 +-28 +32 +-28 +33 +-28 +32 +-28 +31 +74 +-2 +43 +-25 +30 +-33 +27 +-34 +26 +-35 +27 +-33 +27 +-33 +28 +-32 +29 +-29 +31 +-31 +29 +-31 +29 +-31 +30 +-31 +30 +-31 +30 +-31 +30 +-30 +31 +-27 +32 +-29 +32 +-29 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-27 +33 +-28 +32 +-29 +31 +-29 +32 +-29 +32 +-29 +31 +-29 +32 +-29 +33 +-25 +34 +-28 +32 +-29 +32 +-29 +31 +-29 +32 +-29 +32 +-29 +31 +-28 +32 +-26 +34 +-28 +32 +-29 +31 +-30 +31 +-29 +32 +-29 +31 +-29 +32 +-29 +32 +-26 +33 +-28 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +30 +-29 +31 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-29 +-106 +-43 +-96 +-3 +-57 +23 +-39 +33 +-32 +37 +-27 +40 +-21 +43 +-19 +44 +-15 +47 +-12 +47 +-13 +46 +-14 +45 +-16 +42 +-18 +40 +-21 +38 +-23 +36 +-22 +38 +-22 +36 +-25 +34 +-27 +33 +-28 +32 +-28 +33 +-27 +32 +-28 +33 +-26 +34 +-25 +34 +-27 +32 +-28 +32 +-28 +31 +-28 +32 +-29 +32 +-28 +32 +74 +-2 +43 +-24 +31 +-33 +27 +-34 +26 +-34 +27 +-34 +27 +-33 +28 +-31 +29 +-29 +31 +-30 +30 +-30 +30 +-31 +30 +-31 +30 +-31 +30 +-30 +31 +-30 +-107 +-44 +-96 +-3 +-58 +23 +-39 +33 +-33 +37 +-27 +40 +-21 +43 +-19 +45 +-15 +47 +-13 +47 +-13 +46 +-14 +44 +-16 +42 +-18 +41 +-21 +38 +-22 +37 +-22 +37 +-24 +36 +-26 +34 +-27 +33 +-27 +33 +-27 +33 +-28 +33 +-27 +33 +-26 +34 +-26 +33 +-27 +32 +-28 +32 +-29 +31 +-28 +31 +-29 +31 +-28 +31 +74 +-2 +43 +-25 +30 +-33 +26 +-35 +26 +-34 +26 +-34 +27 +-34 +27 +-33 +28 +-30 +30 +-31 +29 +-31 +29 +-32 +29 +-32 +30 +-31 +30 +-30 +30 +-31 +31 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +32 +-26 +33 +-29 +32 +-29 +31 +-30 +31 +-29 +32 +-29 +32 +-29 +32 +-29 +32 +-26 +34 +-28 +31 +-29 +32 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-26 +33 +-28 +32 +-29 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-28 +31 +-27 +33 +-28 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +30 +-27 +32 +-28 +32 +-29 +31 +-30 +30 +-31 +30 +-31 +30 +-30 +31 +-29 +31 +-26 +34 +-28 +31 +-30 +31 +-31 +30 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-27 +33 +-28 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +32 +-26 +34 +-28 +32 +-29 +32 +-30 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +32 +-26 +33 +-28 +32 +-29 +31 +-30 +32 +-29 +32 +-29 +31 +-30 +31 +-29 +-106 +-43 +-96 +-3 +-58 +22 +-39 +34 +-32 +37 +-27 +41 +-21 +44 +-19 +45 +-14 +47 +-12 +47 +-12 +47 +-13 +45 +-15 +43 +-17 +41 +-20 +39 +-22 +37 +-22 +37 +-22 +36 +-25 +35 +-26 +34 +-26 +34 +-27 +34 +-27 +33 +-27 +33 +-26 +34 +-25 +33 +-27 +33 +-28 +32 +-28 +31 +-29 +32 +-29 +31 +-29 +31 +-27 +34 +-26 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +73 +-4 +42 +-26 +30 +-33 +26 +-35 +25 +-35 +26 +-34 +26 +-33 +28 +-32 +29 +-30 +31 +-31 +29 +-31 +29 +-32 +29 +-32 +29 +-31 +30 +-31 +30 +-30 +31 +-27 +33 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-29 +32 +-27 +33 +-28 +31 +-29 +32 +-30 +31 +-29 +30 +-30 +31 +-30 +31 +-29 +31 +-27 +33 +-28 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-27 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-26 +33 +-28 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +30 +-30 +32 +-29 +32 +-26 +33 +-28 +32 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +-106 +-43 +-96 +-3 +-57 +23 +-39 +34 +-32 +37 +-27 +41 +-21 +44 +-18 +44 +-14 +47 +-13 +48 +-12 +47 +-13 +45 +-15 +43 +-18 +41 +-20 +39 +-22 +37 +-22 +38 +-22 +36 +-25 +35 +-26 +35 +-26 +34 +-27 +33 +-27 +34 +-27 +33 +-25 +34 +-26 +34 +-27 +32 +-28 +31 +-29 +32 +-28 +31 +-29 +32 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-30 +30 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-28 +33 +-26 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +73 +-3 +43 +-25 +30 +-33 +26 +-35 +26 +-35 +26 +-34 +27 +-33 +27 +-33 +28 +-30 +30 +-31 +29 +-32 +29 +-32 +29 +-31 +29 +-32 +30 +-31 +30 +-30 +-107 +-44 +-97 +-4 +-58 +22 +-40 +33 +-32 +36 +-27 +41 +-21 +43 +-19 +44 +-15 +46 +-13 +47 +-12 +46 +-13 +45 +-16 +43 +-18 +40 +-20 +39 +-22 +37 +78 +2 +47 +-22 +33 +-30 +29 +-32 +28 +-32 +29 +-32 +28 +-32 +29 +-31 +30 +-28 +32 +-30 +30 +-31 +30 +-31 +30 +-30 +30 +-31 +31 +-30 +30 +-29 +-107 +-44 +-96 +-3 +-58 +23 +-40 +33 +-33 +36 +-27 +40 +-22 +43 +-19 +44 +-15 +47 +-12 +48 +-12 +46 +-13 +45 +-15 +43 +-17 +41 +-20 +39 +-22 +38 +79 +2 +47 +-21 +33 +-30 +29 +-32 +29 +-32 +29 +-31 +29 +-31 +30 +-31 +30 +-28 +33 +-29 +31 +-30 +30 +-31 +30 +-30 +31 +-29 +31 +-30 +32 +-29 +-106 +-43 +-96 +-3 +-58 +23 +-39 +34 +-32 +36 +-27 +41 +-21 +44 +-19 +44 +-15 +47 +-13 +47 +-13 +46 +-14 +45 +-16 +42 +-18 +40 +-21 +38 +-23 +37 +-22 +37 +-23 +36 +-25 +34 +-27 +33 +-27 +33 +-27 +33 +-28 +33 +-28 +32 +-26 +34 +-26 +33 +-28 +31 +-28 +32 +-29 +32 +-29 +31 +-29 +31 +-29 +32 +-27 +32 +-27 +33 +-29 +31 +-29 +30 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-28 +33 +-27 +32 +-29 +31 +-29 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-27 +32 +-27 +32 +-29 +31 +-30 +30 +-31 +30 +-30 +30 +-30 +30 +-30 +30 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +72 +-4 +42 +-26 +29 +-34 +26 +-35 +25 +-35 +26 +-34 +26 +-33 +28 +-33 +29 +-30 +30 +-31 +29 +-32 +29 +-32 +28 +-32 +29 +-31 +30 +-31 +30 +-30 +29 +-28 +32 +-30 +31 +-30 +30 +-31 +30 +-31 +30 +-31 +29 +-30 +31 +-30 +31 +-28 +33 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +-28 +-106 +-43 +-96 +-3 +-57 +23 +-38 +34 +-31 +38 +-26 +41 +-20 +45 +-19 +45 +-14 +47 +-12 +48 +-12 +46 +-13 +45 +-15 +43 +-18 +41 +-20 +39 +-22 +38 +-21 +38 +-22 +36 +-25 +35 +-26 +34 +-27 +33 +-27 +33 +-28 +33 +-28 +33 +-26 +33 +-26 +34 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +30 +-30 +31 +-29 +31 +-27 +32 +-28 +32 +-29 +30 +-29 +31 +-29 +31 +-29 +30 +-30 +31 +-29 +30 +-28 +33 +-26 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +30 +-29 +32 +-29 +31 +-27 +33 +-26 +34 +-28 +32 +-28 +31 +-29 +31 +-29 +32 +-28 +32 +-28 +32 +-27 +33 +-26 +32 +-29 +32 +-29 +31 +-29 +32 +-28 +32 +-28 +32 +-29 +31 +-27 +33 +-26 +34 +-27 +32 +-28 +32 +-28 +32 +-28 +32 +-28 +31 +-28 +33 +-26 +34 +-26 +33 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-28 +32 +-26 +33 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +30 +-29 +31 +-27 +33 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-29 +31 +-27 +32 +-26 +33 +-29 +32 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +30 +-30 +31 +-29 +31 +-27 +32 +-28 +32 +-29 +30 +-30 +31 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-28 +32 +-28 +32 +-29 +31 +-30 +30 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-26 +33 +-26 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +30 +-28 +32 +-28 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +31 +-29 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-30 +30 +-28 +31 +-28 +32 +-29 +30 +-29 +30 +-30 +30 +-30 +30 +-30 +30 +-30 +31 +72 +-4 +42 +-26 +29 +-34 +25 +-35 +25 +-35 +26 +-34 +27 +-33 +28 +-33 +29 +-30 +30 +-31 +29 +-31 +30 +-32 +29 +-31 +29 +-31 +30 +-30 +31 +-30 +-107 +-44 +-97 +-4 +-58 +23 +-39 +34 +-32 +37 +-27 +40 +-22 +44 +-19 +45 +-14 +47 +-12 +48 +-12 +47 +-13 +45 +-15 +43 +-18 +41 +-20 +38 +-22 +37 +78 +2 +47 +-22 +33 +-30 +29 +-33 +28 +-33 +28 +-33 +28 +-32 +29 +-31 +29 +-29 +31 +-30 +29 +-31 +30 +-32 +29 +-31 +29 +-31 +30 +-31 +30 +-30 +-107 +-44 +-97 +-4 +-58 +22 +-41 +32 +-33 +35 +-28 +39 +-22 +43 +-19 +44 +-15 +46 +-13 +47 +-13 +46 +-14 +44 +-16 +43 +-18 +41 +-20 +38 +-22 +37 +79 +2 +47 +-22 +33 +-31 +29 +-32 +28 +-32 +29 +-32 +28 +-32 +29 +-31 +30 +-28 +32 +-29 +31 +-30 +30 +-31 +30 +-30 +30 +-31 +31 +-29 +31 +-29 +31 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-29 +32 +-29 +31 +-29 +32 +-29 +32 +-26 +33 +-28 +32 +-29 +32 +-29 +31 +-28 +32 +-29 +32 +-28 +32 +-28 +-105 +-42 +-95 +-2 +-57 +24 +-38 +35 +-31 +38 +-26 +41 +-21 +45 +-18 +45 +-15 +47 +-12 +49 +-12 +47 +-13 +45 +-14 +44 +-17 +42 +-19 +39 +-22 +38 +-22 +37 +-22 +37 +-24 +35 +-26 +34 +-26 +34 +-26 +33 +-27 +33 +-27 +33 +-26 +34 +-25 +34 +-27 +32 +-28 +32 +-29 +32 +-29 +32 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-28 +31 +-29 +31 +-30 +30 +-29 +31 +-30 +31 +-29 +30 +-28 +32 +-27 +33 +-28 +30 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-29 +31 +-27 +31 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +30 +-29 +31 +-27 +33 +-27 +32 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-27 +32 +-27 +32 +-29 +31 +-30 +30 +-30 +30 +-30 +30 +-30 +30 +-31 +30 +-28 +32 +-28 +31 +-30 +30 +-29 +31 +-30 +30 +-30 +30 +-29 +31 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +32 +-29 +32 +-29 +31 +-27 +34 +-26 +33 +-28 +32 +-28 +32 +-28 +31 +-29 +31 +-28 +32 +-28 +32 +-26 +33 +-26 +33 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-27 +32 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-30 +30 +-27 +32 +-28 +32 +-29 +30 +-29 +31 +-30 +30 +-29 +31 +-30 +30 +-30 +31 +-28 +31 +-28 +32 +-29 +30 +-30 +31 +-30 +30 +-29 +31 +-29 +32 +-29 +31 +-27 +33 +-26 +32 +-29 +31 +-29 +30 +-30 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +33 +-26 +32 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-27 +33 +-27 +32 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-28 +32 +-27 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +30 +-30 +30 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +30 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +32 +-29 +32 +-27 +33 +-26 +32 +-29 +32 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +-28 +31 +-27 +33 +-26 +33 +-28 +31 +-29 +32 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +30 +-30 +31 +-30 +31 +-30 +30 +-27 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +30 +-28 +31 +-28 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +30 +-30 +31 +-28 +32 +-27 +32 +-29 +30 +-30 +31 +-30 +30 +-30 +30 +-30 +30 +-30 +30 +-28 +31 +-27 +32 +-29 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-27 +33 +-26 +32 +-29 +31 +-30 +31 +-29 +30 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +30 +-29 +32 +-28 +32 +-26 +32 +-29 +31 +-29 +31 +-28 +31 +-29 +31 +-29 +31 +-28 +31 +-27 +33 +-27 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +32 +-28 +31 +-29 +32 +-27 +33 +-26 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +32 +-29 +32 +-29 +31 +-27 +33 +-26 +33 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +30 +-29 +31 +-30 +31 +-29 +31 +-28 +32 +-28 +32 +-29 +30 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-27 +33 +-27 +32 +-29 +31 +-29 +30 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-29 +30 +-30 +31 +-29 +31 +-29 +31 +-27 +33 +-26 +33 +-29 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-27 +33 +-26 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-28 +32 +-27 +32 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +32 +-29 +31 +-27 +32 +-27 +32 +-28 +32 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +33 +-26 +32 +-29 +30 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-26 +33 +-26 +33 +-29 +31 +-30 +30 +-30 +30 +-31 +29 +-30 +30 +-30 +30 +-28 +31 +-27 +31 +-29 +30 +-30 +30 +-30 +30 +-30 +30 +-30 +31 +-29 +30 +-28 +32 +-27 +32 +-29 +31 +-30 +30 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-26 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +-28 +32 +-26 +33 +-26 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-29 +31 +-28 +32 +-26 +33 +-29 +31 +-29 +30 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-30 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-30 +30 +-30 +31 +-29 +31 +-29 +31 +-28 +33 +-26 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +33 +-29 +31 +-29 +31 +-30 +30 +-30 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-27 +33 +-27 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-26 +33 +-28 +31 +-30 +31 +-29 +31 +-30 +31 +-29 +32 +-28 +31 +-27 +34 +-26 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +31 +-29 +31 +-27 +33 +-26 +33 +-28 +31 +-29 +32 +-29 +31 +-29 +31 +-29 +31 +-28 +31 +-27 +33 +-27 +33 +-28 +31 +-29 +31 +-30 +31 +-30 +30 +-29 +30 +-30 +31 +-27 +33 +-26 +32 +-29 +31 +-30 +30 +-30 +30 +-30 +30 +-30 +30 +-30 +31 +-28 +31 +-28 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-27 +32 +-27 +32 +-29 +31 +-30 +29 +-30 +31 +-30 +31 +-29 +30 +-30 +30 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +30 +-29 +30 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +33 +-27 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +30 +-29 +31 +-29 +31 +73 +-3 +42 +-25 +29 +-33 +26 +-35 +26 +-34 +26 +-34 +27 +-34 +27 +-33 +28 +-30 +29 +-32 +29 +-32 +29 +-32 +29 +-31 +30 +-32 +29 +-31 +29 +-30 +-108 +-45 +-97 +-4 +-59 +22 +-40 +32 +-33 +36 +-28 +40 +-22 +43 +-20 +43 +-16 +46 +-14 +46 +-14 +45 +-14 +44 +-16 +42 +-18 +39 +-21 +38 +-23 +37 +-22 +36 +-23 +36 +-26 +34 +-26 +32 +-28 +33 +-28 +33 +-27 +32 +-27 +32 +-26 +34 +-26 +34 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +33 +-26 +33 +-28 +32 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-27 +33 +-26 +33 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +-27 +33 +-27 +32 +-29 +32 +-28 +32 +-29 +32 +-29 +32 +-29 +31 +-29 +32 +-27 +33 +-26 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +33 +-28 +32 +74 +-2 +43 +-24 +30 +-32 +27 +-34 +26 +-34 +27 +-34 +27 +-33 +29 +-32 +29 +-29 +31 +-31 +29 +-32 +29 +-31 +29 +-31 +30 +-31 +30 +-30 +30 +-30 +-107 +-45 +-97 +-3 +-58 +22 +-40 +33 +-33 +36 +-28 +40 +-21 +43 +-20 +44 +-15 +46 +-13 +46 +-13 +46 +-13 +44 +-15 +43 +-18 +41 +-21 +38 +-23 +36 +-22 +37 +-23 +36 +-25 +34 +-27 +32 +-28 +33 +-27 +33 +-28 +32 +-27 +33 +-26 +34 +-26 +33 +-27 +32 +-29 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +74 +-3 +42 +-25 +30 +-33 +26 +-35 +25 +-35 +26 +-33 +27 +-34 +28 +-33 +29 +-30 +30 +-31 +29 +-32 +29 +-32 +29 +-31 +30 +-31 +29 +-31 +29 +-31 +30 +-27 +32 +-29 +30 +-30 +31 +-31 +30 +-30 +31 +-30 +31 +-30 +31 +-29 +32 +-26 +33 +-29 +32 +-28 +32 +-29 +31 +-30 +31 +-29 +32 +-29 +32 +-28 +32 +-26 +33 +-28 +32 +-29 +31 +-30 +31 +-29 +31 +-30 +32 +-29 +32 +-28 +32 +-27 +33 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +32 +-26 +33 +-28 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +-27 +33 +-29 +32 +-28 +31 +-29 +32 +-29 +32 +-29 +31 +-29 +32 +-29 +-106 +-43 +-96 +-3 +-57 +23 +-39 +34 +-32 +37 +-27 +40 +-21 +44 +-19 +44 +-14 +47 +-12 +47 +-13 +46 +-14 +45 +-15 +43 +-17 +41 +-20 +39 +-22 +37 +-21 +37 +-22 +36 +-25 +34 +-26 +33 +-27 +34 +-26 +33 +-27 +33 +-27 +33 +-26 +34 +-25 +34 +-27 +32 +-28 +32 +-28 +31 +-28 +31 +-29 +32 +-29 +31 +74 +-2 +43 +-25 +29 +-33 +26 +-35 +26 +-34 +26 +-34 +27 +-33 +28 +-32 +28 +-30 +30 +-31 +29 +-31 +29 +-32 +29 +-31 +30 +-31 +30 +-30 +30 +-30 +-107 +-45 +-97 +-4 +-59 +22 +-40 +33 +-32 +36 +-28 +40 +-22 +43 +-19 +44 +-15 +47 +-13 +47 +-12 +46 +-14 +45 +-15 +43 +-18 +41 +-20 +39 +-22 +37 +-22 +37 +-22 +37 +-25 +34 +-26 +34 +-26 +34 +-27 +33 +-26 +33 +-27 +33 +-26 +34 +-25 +34 +-27 +33 +-28 +32 +-28 +31 +-28 +32 +-29 +32 +-29 +31 +74 +-2 +42 +-26 +29 +-33 +26 +-35 +26 +-34 +26 +-35 +27 +-33 +28 +-32 +28 +-30 +30 +-31 +29 +-32 +29 +-32 +29 +-31 +29 +-31 +29 +-31 +30 +-30 +30 +-29 +31 +-29 +31 +-30 +30 +-31 +29 +-31 +30 +-31 +30 +-30 +30 +-30 +31 +-28 +32 +-29 +31 +-30 +31 +-31 +30 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-27 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +32 +-29 +32 +-29 +31 +-27 +33 +-28 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +32 +-29 +32 +-26 +34 +-27 +33 +-29 +31 +-30 +30 +-30 +31 +-29 +31 +-29 +32 +-28 +32 +-25 +35 +-27 +32 +-29 +31 +-30 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-29 +32 +-30 +31 +-29 +30 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-28 +32 +-28 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-29 +32 +-27 +34 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +-106 +-43 +-96 +-3 +-58 +23 +-39 +34 +-32 +37 +-27 +41 +-20 +44 +-19 +45 +-14 +47 +-12 +47 +-12 +47 +-14 +44 +-15 +43 +-18 +41 +-20 +38 +-22 +37 +-22 +37 +-23 +36 +-25 +34 +-27 +34 +-27 +34 +-27 +33 +-27 +32 +-28 +33 +-25 +34 +-25 +34 +-28 +32 +-28 +32 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-26 +34 +-26 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-28 +32 +-27 +33 +-27 +32 +-28 +31 +-29 +32 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +73 +-3 +43 +-25 +29 +-33 +26 +-35 +26 +-34 +26 +-34 +27 +-33 +27 +-33 +27 +-30 +30 +-30 +30 +-31 +29 +-32 +29 +-32 +30 +-31 +29 +-31 +30 +-30 +31 +-27 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-31 +30 +-29 +31 +-27 +33 +-29 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-27 +33 +-28 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +32 +-29 +31 +-29 +31 +-27 +33 +-28 +32 +-29 +31 +-30 +32 +-29 +32 +-29 +31 +-29 +32 +-29 +32 +-25 +34 +-27 +33 +-28 +32 +-29 +31 +-29 +32 +-29 +32 +-29 +31 +-29 +32 +-25 +34 +-28 +32 +-28 +31 +-29 +32 +-29 +32 +-29 +31 +-29 +32 +-29 +-106 +-43 +-96 +-2 +-57 +23 +-39 +34 +-32 +37 +-27 +40 +-22 +43 +-19 +45 +-14 +47 +-13 +48 +-12 +46 +-13 +45 +-15 +44 +-18 +41 +-20 +39 +-22 +37 +-22 +37 +-22 +36 +-25 +35 +-26 +33 +-27 +33 +-27 +33 +-27 +33 +-28 +33 +-26 +33 +-26 +33 +-28 +31 +-28 +31 +-29 +32 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-28 +31 +-29 +30 +-30 +30 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +30 +-30 +31 +-29 +30 +-29 +30 +-30 +31 +72 +-3 +42 +-26 +29 +-33 +25 +-35 +26 +-35 +26 +-34 +26 +-34 +27 +-33 +28 +-30 +30 +-31 +29 +-31 +30 +-32 +29 +-31 +29 +-31 +29 +-31 +30 +-31 +-108 +-44 +-97 +-3 +-58 +22 +-40 +34 +-32 +37 +-27 +40 +-21 +44 +-19 +45 +-14 +47 +-12 +47 +-13 +46 +-14 +45 +-16 +43 +-18 +40 +-21 +39 +-22 +37 +78 +1 +46 +-22 +33 +-30 +29 +-32 +28 +-32 +28 +-32 +29 +-31 +29 +-31 +30 +-28 +31 +-30 +30 +-31 +31 +-30 +30 +-30 +31 +-30 +30 +-30 +31 +-29 +-107 +-44 +-96 +-3 +-58 +23 +-39 +34 +-32 +37 +-27 +41 +-21 +44 +-18 +44 +-15 +47 +-12 +47 +-12 +47 +-13 +46 +-15 +43 +-17 +41 +-19 +39 +-22 +37 +78 +2 +47 +-21 +33 +-30 +29 +-32 +28 +-32 +29 +-32 +28 +-32 +30 +-31 +30 +-28 +32 +-29 +31 +-30 +30 +-30 +30 +-30 +30 +-31 +30 +-30 +30 +-30 +-107 +-44 +-97 +-4 +-58 +22 +-40 +33 +-32 +37 +-26 +40 +-21 +44 +-19 +44 +-14 +47 +-13 +47 +-13 +46 +-13 +44 +-16 +43 +-18 +40 +-20 +39 +-22 +37 +-22 +37 +-23 +36 +-25 +34 +-27 +34 +-27 +33 +-27 +33 +-27 +33 +-27 +33 +-26 +34 +-25 +34 +-27 +32 +-28 +32 +-28 +32 +-28 +32 +-28 +32 +-28 +32 +-26 +34 +-25 +34 +-28 +32 +-28 +31 +-29 +32 +-29 +32 +-28 +32 +-28 +32 +-27 +33 +-26 +33 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +30 +-30 +30 +-30 +31 +-29 +30 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +30 +-30 +29 +-30 +30 +-30 +30 +-30 +29 +72 +-4 +40 +-27 +28 +-35 +25 +-36 +25 +-35 +26 +-35 +26 +-34 +26 +-33 +28 +-31 +30 +-32 +28 +-32 +28 +-32 +29 +-32 +29 +-32 +29 +-31 +30 +-31 +30 +-28 +32 +-29 +31 +-30 +30 +-30 +30 +-30 +30 +-30 +31 +-30 +30 +-30 +31 +-28 +33 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +-106 +-43 +-96 +-3 +-58 +23 +-39 +33 +-32 +37 +-27 +40 +-21 +44 +-19 +45 +-14 +47 +-12 +47 +-13 +46 +-13 +45 +-15 +44 +-17 +41 +-20 +39 +-22 +38 +-21 +39 +-21 +38 +-24 +35 +-26 +35 +-26 +34 +-26 +33 +-27 +34 +-26 +33 +-25 +34 +-25 +34 +-27 +33 +-28 +32 +-29 +32 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-26 +33 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-26 +32 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-30 +30 +-30 +30 +-30 +30 +-30 +31 +-28 +32 +-27 +31 +-30 +31 +-30 +30 +-30 +30 +-30 +30 +-30 +30 +-30 +30 +-28 +32 +-28 +31 +-29 +31 +-30 +30 +-30 +30 +-30 +30 +-30 +30 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-27 +33 +-27 +32 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +32 +-26 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +33 +-27 +32 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +30 +-29 +31 +-27 +33 +-27 +32 +-29 +31 +-29 +31 +-30 +30 +-29 +31 +-29 +31 +-30 +31 +-26 +34 +-26 +33 +-28 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-27 +33 +-26 +33 +-29 +31 +-29 +31 +-30 +30 +-29 +32 +-28 +31 +-29 +31 +-27 +33 +-27 +32 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +73 +-3 +42 +-26 +29 +-34 +26 +-35 +25 +-35 +27 +-34 +27 +-33 +27 +-32 +29 +-30 +30 +-31 +29 +-31 +29 +-32 +29 +-31 +30 +-31 +30 +-31 +30 +-30 +-107 +-44 +-97 +-4 +-58 +22 +-40 +33 +-33 +36 +-27 +40 +-21 +44 +-19 +45 +-14 +47 +-12 +47 +-13 +46 +-14 +44 +-15 +43 +-18 +41 +-20 +38 +-22 +37 +78 +2 +46 +-22 +33 +-30 +28 +-33 +28 +-33 +29 +-32 +29 +-32 +29 +-31 +30 +-29 +31 +-30 +30 +-31 +29 +-31 +29 +-31 +30 +-31 +30 +-31 +30 +-30 +-107 +-44 +-97 +-4 +-59 +22 +-40 +33 +-33 +36 +-28 +40 +-22 +43 +-19 +43 +-15 +47 +-13 +47 +-12 +46 +-13 +45 +-15 +43 +-18 +41 +-20 +39 +-22 +38 +79 +2 +47 +-21 +33 +-30 +30 +-32 +28 +-32 +29 +-32 +29 +-31 +30 +-30 +30 +-27 +32 +-29 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-27 +33 +-28 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-30 +31 +-28 +32 +-26 +34 +-29 +32 +-29 +31 +-30 +31 +-29 +32 +-29 +32 +-29 +31 +-29 +-106 +-42 +-95 +-2 +-56 +23 +-38 +34 +-32 +38 +-27 +41 +-21 +44 +-19 +44 +-15 +47 +-12 +47 +-13 +46 +-14 +45 +-15 +43 +-17 +41 +-20 +39 +-22 +37 +-22 +37 +-23 +36 +-25 +34 +-26 +33 +-27 +33 +-27 +34 +-27 +33 +-27 +33 +-26 +34 +-25 +33 +-28 +32 +-28 +32 +-28 +31 +-28 +31 +-29 +32 +-29 +31 +-27 +32 +-27 +33 +-28 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-28 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +30 +-29 +31 +-30 +31 +-29 +31 +-27 +32 +-27 +33 +-28 +31 +-29 +30 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-27 +31 +-28 +33 +-29 +31 +-29 +30 +-30 +30 +-30 +30 +-30 +30 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-30 +30 +-30 +30 +-29 +30 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +30 +-30 +30 +-30 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +30 +-30 +30 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-26 +33 +-28 +31 +-29 +31 +-30 +30 +-29 +32 +-29 +32 +-28 +31 +-28 +33 +-27 +33 +-28 +31 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +30 +-28 +32 +-27 +32 +-29 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +30 +-30 +30 +-27 +33 +-26 +32 +-29 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-26 +32 +-28 +32 +-29 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +32 +-29 +31 +-30 +31 +-29 +30 +-29 +31 +-30 +31 +-29 +31 +-27 +32 +-28 +32 +-29 +31 +-29 +31 +-30 +30 +-30 +30 +-30 +31 +-29 +31 +-27 +31 +-27 +33 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +33 +-29 +31 +-28 +32 +-29 +32 +-28 +31 +-29 +31 +-29 +32 +-26 +32 +-26 +33 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +32 +-29 +31 +-29 diff --git a/traces/lf_t5577_nexwatch_nexkey.pm3 b/traces/lf_t5577_nexwatch_nexkey.pm3 new file mode 100644 index 000000000..b8fc6d80c --- /dev/null +++ b/traces/lf_t5577_nexwatch_nexkey.pm3 @@ -0,0 +1,10000 @@ +31 +-29 +31 +-30 +30 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +30 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-28 +31 +-27 +32 +-27 +33 +-28 +31 +-28 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-26 +32 +-29 +31 +-29 +31 +-29 +30 +-30 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +30 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +30 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-28 +33 +-26 +33 +-28 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-26 +33 +-26 +33 +-28 +31 +-30 +30 +-29 +31 +-29 +31 +-29 +31 +-28 +31 +-28 +32 +-27 +32 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-26 +33 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +32 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-30 +31 +73 +-3 +42 +-26 +29 +-34 +26 +-36 +24 +-35 +26 +-34 +26 +-34 +27 +-33 +27 +-31 +30 +-32 +29 +-31 +29 +-32 +29 +-31 +30 +-31 +30 +-30 +30 +-30 +-107 +-44 +-97 +-3 +-59 +23 +-39 +32 +-32 +37 +-27 +40 +-21 +44 +-19 +44 +-15 +47 +-13 +47 +-13 +46 +-14 +45 +-15 +43 +-18 +40 +-20 +39 +-22 +38 +79 +1 +46 +-22 +32 +-30 +29 +-33 +29 +-32 +28 +-32 +29 +-32 +29 +-31 +30 +-28 +32 +-30 +31 +-30 +30 +-31 +30 +-30 +30 +-31 +30 +-30 +30 +-30 +-107 +-45 +-97 +-4 +-58 +23 +-40 +33 +-33 +36 +-28 +39 +-22 +43 +-19 +43 +-16 +47 +-13 +46 +-13 +46 +-14 +45 +-16 +42 +-18 +40 +-20 +39 +-23 +37 +78 +2 +47 +-21 +34 +-30 +28 +-32 +28 +-32 +29 +-31 +29 +-31 +29 +-30 +31 +-27 +33 +-28 +31 +-30 +31 +-30 +30 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-27 +33 +-29 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +32 +-29 +32 +-27 +32 +-29 +32 +-29 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +-106 +-43 +-96 +-3 +-58 +23 +-39 +33 +-32 +36 +-28 +39 +-22 +43 +-20 +43 +-16 +47 +-14 +46 +-14 +45 +-14 +44 +-17 +42 +-19 +40 +-21 +38 +-23 +37 +-22 +37 +-23 +36 +-25 +34 +-27 +33 +-27 +33 +-27 +33 +-27 +34 +-27 +33 +-26 +34 +-25 +34 +-27 +33 +-28 +32 +-29 +31 +-28 +32 +-28 +32 +-28 +32 +-26 +34 +-27 +33 +-28 +31 +-28 +31 +-29 +31 +-28 +31 +-28 +32 +-29 +31 +-27 +33 +-26 +33 +-28 +32 +-28 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-27 +33 +-27 +33 +-28 +31 +-29 +32 +-29 +31 +-29 +31 +-28 +31 +-29 +32 +-27 +32 +-27 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-27 +33 +-26 +33 +-28 +31 +-29 +31 +-30 +31 +-30 +29 +-30 +31 +-29 +31 +-27 +32 +-27 +31 +-29 +30 +-30 +31 +-30 +30 +-30 +30 +-30 +30 +-29 +31 +-28 +31 +-28 +32 +-29 +31 +-30 +31 +-30 +30 +-29 +31 +-30 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-29 +32 +-28 +31 +-27 +34 +-26 +34 +-28 +31 +-29 +31 +-28 +32 +-29 +31 +-28 +32 +-28 +32 +-27 +33 +-26 +33 +-28 +31 +-29 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +30 +-30 +31 +-30 +30 +-29 +30 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +30 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-27 +33 +-26 +33 +-29 +31 +-29 +30 +-30 +30 +-30 +31 +-29 +30 +-30 +31 +-28 +32 +-27 +31 +-29 +31 +-29 +31 +-30 +30 +-30 +31 +-30 +30 +-30 +30 +-28 +31 +-29 +31 +-29 +31 +-30 +30 +-30 +31 +-30 +30 +-30 +30 +-29 +31 +-28 +32 +-27 +31 +-29 +31 +-30 +30 +-30 +31 +-29 +31 +-30 +31 +-29 +30 +-27 +32 +-28 +32 +-29 +30 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-30 +30 +-29 +31 +-29 +31 +-30 +31 +-27 +32 +-26 +33 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +32 +-27 +32 +-27 +32 +-29 +31 +-29 +30 +-30 +31 +-30 +31 +-29 +30 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-30 +30 +-30 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +30 +-30 +31 +-29 +31 +-29 +31 +-29 +30 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-30 +30 +-29 +31 +-30 +31 +-30 +30 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +30 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +32 +-28 +31 +-29 +31 +-30 +30 +-29 +30 +-30 +31 +-29 +31 +-27 +32 +-27 +33 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-28 +32 +-28 +33 +-29 +31 +-29 +31 +-29 +31 +-30 +30 +-30 +30 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +30 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-26 +32 +-29 +32 +-29 +31 +-29 +31 +-28 +32 +-29 +31 +-29 +31 +-27 +33 +-26 +33 +-28 +31 +-29 +31 +-29 +31 +-28 +31 +-29 +31 +-29 +31 +-27 +32 +-26 +33 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-28 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-28 +33 +-27 +32 +-28 +31 +-30 +30 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +30 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +30 +-29 +31 +-28 +32 +-27 +32 +-28 +31 +-29 +32 +-29 +31 +-29 +30 +-30 +31 +-29 +31 +-27 +33 +-27 +32 +-28 +31 +-29 +31 +-29 +31 +-29 +32 +-28 +31 +-29 +32 +-27 +33 +-26 +33 +-28 +31 +-30 +31 +-29 +31 +-28 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +33 +-28 +31 +-29 +30 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +33 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +31 +-27 +32 +-27 +33 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-26 +34 +-26 +33 +-28 +31 +-29 +30 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-27 +31 +-27 +32 +-29 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +30 +-30 +30 +-29 +31 +-28 +31 +-29 +30 +-30 +30 +-30 +30 +-30 +30 +-30 +31 +-30 +30 +-28 +31 +-28 +31 +-30 +30 +-30 +30 +-30 +30 +-30 +31 +-29 +30 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-29 +30 +-29 +31 +-30 +31 +-29 +31 +-27 +33 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-28 +32 +-27 +33 +-26 +33 +-29 +31 +-29 +31 +-29 +31 +-28 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-27 +33 +-27 +32 +-28 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-30 +30 +-28 +32 +-27 +33 +-29 +31 +-29 +30 +-30 +31 +-29 +31 +-29 +30 +-29 +31 +-27 +32 +-27 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +32 +-27 +33 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-29 +31 +-29 +32 +-27 +33 +-26 +33 +-28 +32 +-29 +31 +-29 +31 +-28 +31 +-29 +31 +-29 +32 +-27 +33 +-26 +33 +-28 +31 +-28 +31 +-29 +32 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +32 +-29 +30 +-30 +30 +-30 +30 +-29 +31 +-29 +31 +-29 +31 +-27 +31 +-27 +32 +-29 +31 +-29 +30 +-30 +31 +-29 +31 +-30 +31 +-30 +31 +-27 +33 +-27 +33 +-29 +31 +-30 +30 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +-29 +32 +-27 +32 +-27 +33 +-28 +32 +-28 +31 +-29 +32 +-29 +32 +-29 +31 +-28 +32 +-27 +33 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-27 +32 +-27 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +72 +-3 +42 +-26 +30 +-33 +25 +-35 +25 +-35 +27 +-33 +27 +-33 +28 +-32 +29 +-30 +30 +-31 +29 +-31 +29 +-32 +29 +-31 +30 +-31 +30 +-30 +30 +-30 +-107 +-43 +-96 +-3 +-57 +23 +-39 +33 +-32 +36 +-27 +40 +-21 +44 +-20 +43 +-15 +47 +-13 +47 +-13 +46 +-14 +44 +-16 +42 +-19 +40 +-21 +38 +-23 +36 +-22 +37 +-23 +36 +-26 +34 +-26 +34 +-27 +32 +-28 +33 +-28 +32 +-28 +32 +-26 +33 +-26 +34 +-28 +31 +-28 +31 +-29 +32 +-29 +31 +-29 +31 +-29 +32 +-26 +33 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +30 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-26 +33 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +73 +-3 +42 +-26 +29 +-33 +25 +-35 +25 +-35 +27 +-34 +26 +-33 +28 +-33 +28 +-30 +30 +-31 +29 +-32 +29 +-32 +29 +-31 +30 +-31 +30 +-31 +29 +-30 +-108 +-44 +-97 +-4 +-58 +22 +-40 +33 +-32 +36 +-27 +40 +-22 +43 +-19 +44 +-15 +46 +-13 +47 +-12 +46 +-14 +45 +-16 +43 +-18 +41 +-20 +38 +-23 +37 +-22 +37 +-22 +36 +-25 +34 +-26 +34 +-26 +33 +-27 +33 +-28 +33 +-27 +33 +-25 +34 +-25 +34 +-27 +32 +-28 +32 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +73 +-2 +43 +-25 +30 +-33 +25 +-35 +26 +-35 +26 +-34 +27 +-34 +27 +-33 +28 +-30 +30 +-31 +29 +-32 +30 +-32 +28 +-31 +30 +-31 +31 +-30 +31 +-30 +30 +-27 +33 +-28 +32 +-29 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-29 +32 +-27 +33 +-28 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-27 +32 +-29 +31 +-30 +31 +-30 +29 +-31 +30 +-31 +30 +-30 +30 +-30 +32 +-27 +33 +-28 +31 +-30 +31 +-31 +30 +-30 +31 +-29 +31 +-30 +31 +-29 +32 +-26 +33 +-28 +32 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +32 +-27 +33 +-28 +32 +-29 +32 +-30 +31 +-29 +32 +-29 +32 +-29 +32 +-28 +-106 +-43 +-96 +-3 +-57 +23 +-39 +34 +-32 +37 +-26 +41 +-21 +44 +-19 +44 +-15 +47 +-13 +47 +-13 +46 +-13 +45 +-15 +43 +-18 +41 +-20 +39 +-22 +37 +-21 +38 +-22 +36 +-25 +34 +-27 +34 +-27 +34 +-26 +33 +-27 +33 +-28 +33 +-26 +33 +-25 +34 +-28 +32 +-29 +31 +-29 +32 +-29 +32 +-28 +31 +-28 +32 +74 +-3 +42 +-25 +30 +-33 +26 +-35 +26 +-34 +27 +-33 +27 +-33 +27 +-32 +28 +-30 +30 +-31 +29 +-31 +29 +-32 +29 +-31 +29 +-31 +30 +-30 +30 +-31 +-108 +-44 +-97 +-4 +-58 +22 +-40 +33 +-33 +37 +-27 +40 +-21 +44 +-19 +44 +-15 +47 +-13 +47 +-13 +46 +-14 +45 +-15 +43 +-18 +41 +-20 +39 +-22 +37 +-21 +38 +-22 +37 +-25 +35 +-26 +34 +-26 +34 +-26 +34 +-26 +34 +-27 +34 +-25 +34 +-25 +34 +-27 +32 +-28 +32 +-28 +31 +-28 +32 +-29 +32 +-28 +31 +74 +-2 +42 +-25 +30 +-33 +26 +-35 +25 +-35 +26 +-34 +27 +-33 +28 +-32 +28 +-30 +30 +-32 +29 +-32 +28 +-32 +28 +-32 +29 +-31 +29 +-31 +29 +-31 +30 +-28 +31 +-30 +30 +-30 +30 +-31 +30 +-30 +30 +-31 +30 +-31 +31 +-29 +31 +-27 +33 +-28 +31 +-30 +31 +-30 +31 +-30 +32 +-29 +31 +-29 +31 +-29 +32 +-26 +33 +-28 +32 +-29 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-27 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-27 +33 +-29 +32 +-29 +31 +-29 +31 +-30 +32 +-29 +31 +-30 +31 +-29 +32 +-26 +34 +-27 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-26 +34 +-28 +32 +-29 +31 +-30 +30 +-31 +31 +-30 +31 +-30 +31 +-29 +31 +-27 +32 +-28 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-29 +31 +-27 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-31 +30 +-30 +30 +-30 +31 +-28 +33 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +32 +-29 +-106 +-43 +-96 +-3 +-57 +23 +-39 +34 +-32 +37 +-26 +41 +-20 +44 +-18 +45 +-14 +47 +-12 +47 +-12 +47 +-13 +45 +-14 +44 +-17 +41 +-20 +39 +-21 +38 +-21 +39 +-22 +36 +-25 +35 +-26 +34 +-26 +34 +-27 +33 +-27 +32 +-27 +33 +-26 +34 +-25 +34 +-27 +33 +-28 +32 +-28 +31 +-28 +32 +-28 +32 +-28 +31 +-27 +33 +-27 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +73 +-3 +42 +-26 +29 +-34 +26 +-35 +26 +-34 +26 +-34 +27 +-33 +28 +-32 +28 +-30 +30 +-30 +30 +-31 +29 +-32 +29 +-31 +30 +-31 +30 +-30 +31 +-29 +32 +-27 +33 +-28 +32 +-29 +32 +-30 +32 +-29 +31 +-29 +32 +-29 +32 +-29 +32 +-26 +34 +-28 +32 +-28 +32 +-29 +32 +-29 +32 +-29 +31 +-29 +32 +-29 +31 +-26 +34 +-28 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-27 +33 +-29 +31 +-29 +31 +-30 +30 +-30 +30 +-31 +29 +-31 +31 +-30 +31 +-27 +32 +-29 +31 +-30 +30 +-31 +30 +-30 +30 +-31 +30 +-30 +30 +-30 +31 +-28 +31 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-29 +-107 +-43 +-96 +-3 +-58 +23 +-39 +34 +-32 +37 +-27 +41 +-21 +44 +-19 +45 +-15 +47 +-12 +47 +-13 +46 +-14 +45 +-15 +43 +-17 +41 +-20 +39 +-22 +37 +-22 +38 +-22 +36 +-25 +34 +-26 +34 +-27 +34 +-27 +33 +-27 +33 +-26 +34 +-26 +34 +-25 +33 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +30 +-30 +31 +-30 +31 +-28 +32 +-27 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +73 +-3 +42 +-25 +29 +-33 +26 +-35 +26 +-34 +26 +-34 +27 +-34 +27 +-33 +28 +-30 +30 +-31 +30 +-31 +29 +-32 +29 +-31 +30 +-30 +30 +-30 +31 +-30 +-107 +-44 +-97 +-3 +-58 +23 +-39 +33 +-32 +37 +-28 +40 +-21 +43 +-19 +45 +-15 +47 +-12 +47 +-12 +47 +-14 +45 +-15 +43 +-17 +41 +-20 +39 +-22 +37 +79 +2 +47 +-21 +33 +-30 +29 +-33 +28 +-32 +28 +-32 +29 +-32 +29 +-30 +30 +-29 +31 +-30 +30 +-30 +30 +-31 +30 +-30 +30 +-31 +30 +-30 +31 +-30 +-107 +-44 +-97 +-4 +-59 +22 +-40 +33 +-32 +37 +-27 +39 +-21 +44 +-19 +44 +-15 +47 +-12 +47 +-13 +47 +-13 +45 +-15 +43 +-17 +41 +-21 +39 +-22 +37 +79 +2 +47 +-21 +33 +-30 +29 +-32 +28 +-32 +29 +-32 +29 +-31 +29 +-31 +30 +-28 +31 +-30 +30 +-30 +30 +-31 +29 +-30 +30 +-31 +31 +-30 +30 +-30 +-107 +-44 +-97 +-4 +-58 +22 +-40 +32 +-33 +36 +-28 +40 +-22 +43 +-20 +44 +-15 +47 +-13 +47 +-12 +46 +-14 +45 +-16 +43 +-17 +40 +-20 +39 +-22 +38 +79 +2 +47 +-21 +33 +-30 +28 +-32 +29 +-32 +29 +-31 +29 +-31 +30 +-30 +31 +-28 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-27 +34 +-28 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-27 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +32 +-29 +-106 +-42 +-95 +-3 +-57 +23 +-39 +34 +-31 +38 +-26 +41 +-20 +44 +-19 +45 +-14 +47 +-12 +48 +-13 +46 +-13 +45 +-15 +43 +-18 +41 +-20 +39 +-22 +37 +-22 +37 +-24 +37 +-25 +34 +-26 +34 +-27 +33 +-27 +33 +-28 +33 +-27 +33 +-26 +34 +-25 +34 +-27 +32 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +73 +-3 +42 +-26 +29 +-33 +26 +-35 +25 +-35 +26 +-34 +26 +-34 +27 +-33 +28 +-30 +30 +-31 +29 +-32 +29 +-32 +28 +-32 +29 +-31 +30 +-31 +29 +-30 +30 +-28 +32 +-29 +30 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +30 +-27 +33 +-29 +31 +-29 +30 +-30 +30 +-30 +31 +-31 +29 +-30 +31 +-29 +-106 +-44 +-96 +-3 +-58 +22 +-40 +32 +-33 +36 +-28 +40 +-22 +43 +-20 +42 +-16 +47 +-13 +47 +-13 +45 +-14 +44 +-17 +42 +-19 +40 +-21 +38 +-23 +37 +-23 +37 +-23 +36 +-26 +35 +-26 +34 +-26 +34 +-27 +33 +-27 +33 +-27 +33 +-25 +35 +-25 +35 +-26 +33 +-27 +33 +-28 +32 +-27 +33 +-27 +32 +-28 +32 +-26 +33 +-25 +34 +-27 +33 +-27 +32 +-28 +32 +-27 +33 +-27 +33 +-28 +32 +-27 +33 +-26 +34 +-27 +32 +-28 +31 +-29 +32 +-29 +32 +-28 +31 +-28 +32 +-27 +33 +-26 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +31 +-27 +33 +-26 +32 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-26 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-27 +32 +-27 +33 +-28 +31 +-29 +31 +-29 +32 +-28 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +32 +-29 +31 +-30 +31 +-30 +30 +-29 +31 +-30 +31 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +30 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-27 +32 +-27 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +30 +-29 +31 +-30 +31 +-28 +32 +-26 +33 +-29 +31 +-29 +31 +-29 +30 +-30 +31 +-30 +31 +-30 +30 +-28 +32 +-28 +32 +-29 +30 +-30 +30 +-30 +30 +-30 +30 +-30 +30 +-30 +31 +-29 +31 +-27 +31 +-30 +30 +-30 +30 +-30 +29 +-30 +30 +-30 +31 +-29 +30 +-27 +32 +-27 +32 +-29 +30 +-30 +30 +-31 +30 +-30 +29 +-31 +30 +-30 +30 +-28 +31 +-27 +31 +-29 +31 +-30 +30 +-30 +30 +-30 +31 +-29 +31 +-29 +31 +-27 +33 +-26 +32 +-29 +30 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-28 +31 +-30 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +73 +-3 +42 +-25 +29 +-34 +26 +-35 +25 +-35 +26 +-35 +27 +-34 +27 +-33 +27 +-31 +30 +-32 +28 +-32 +28 +-32 +29 +-31 +29 +-31 +30 +-30 +30 +-30 +-107 +-45 +-97 +-4 +-58 +23 +-40 +32 +-33 +37 +-28 +40 +-21 +43 +-19 +45 +-15 +47 +-12 +47 +-13 +46 +-14 +44 +-16 +42 +-18 +41 +-21 +37 +-24 +37 +79 +2 +47 +-22 +33 +-30 +28 +-33 +28 +-33 +28 +-33 +28 +-32 +29 +-31 +30 +-29 +32 +-30 +30 +-30 +29 +-31 +29 +-32 +29 +-31 +29 +-31 +31 +-30 +-107 +-44 +-97 +-4 +-58 +23 +-40 +34 +-32 +37 +-27 +40 +-21 +44 +-19 +44 +-15 +47 +-12 +48 +-12 +46 +-13 +45 +-15 +44 +-17 +42 +-19 +39 +-22 +38 +79 +3 +47 +-21 +34 +-30 +30 +-31 +29 +-32 +29 +-32 +29 +-30 +29 +-30 +31 +-28 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +30 +-31 +31 +-30 +30 +-30 +31 +-27 +33 +-29 +31 +-30 +30 +-30 +30 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +30 +-30 +31 +-29 +-107 +-43 +-96 +-3 +-58 +23 +-39 +33 +-32 +37 +-27 +40 +-21 +43 +-19 +45 +-15 +47 +-12 +47 +-12 +47 +-13 +45 +-15 +43 +-17 +41 +-20 +39 +-22 +38 +-21 +37 +-23 +37 +-25 +35 +-25 +34 +-27 +34 +-27 +33 +-27 +33 +-27 +33 +-25 +34 +-26 +33 +-27 +32 +-28 +32 +-28 +32 +-29 +31 +-28 +32 +-28 +32 +-26 +33 +-26 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-26 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-27 +32 +-27 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-27 +33 +-27 +32 +-29 +31 +-29 +30 +-30 +31 +-30 +31 +-29 +30 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-29 +30 +-30 +31 +-30 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +33 +-28 +31 +-29 +31 +-29 +31 +-28 +32 +-28 +31 +-29 +31 +-26 +34 +-26 +33 +-28 +32 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +30 +-30 +31 +-30 +31 +-29 +30 +-28 +31 +-28 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-26 +33 +-29 +31 +-29 +30 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +31 +-29 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +30 +-30 +30 +-30 +30 +-30 +30 +-30 +30 +-30 +30 +-29 +31 +-28 +31 +-29 +31 +-30 +30 +-30 +30 +-30 +30 +-30 +30 +-30 +30 +-28 +32 +-28 +32 +-29 +29 +-30 +30 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +33 +-28 +32 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-27 +33 +-26 +33 +-28 +32 +-28 +32 +-29 +32 +-29 +32 +-28 +32 +-28 +32 +-26 +34 +-26 +33 +-28 +32 +-29 +31 +-29 +31 +-28 +32 +-29 +32 +-28 +32 +-26 +33 +-26 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +32 +-27 +33 +-28 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +30 +-29 +31 +-28 +33 +-26 +33 +-29 +31 +-29 +30 +-30 +30 +-30 +31 +-30 +30 +-29 +31 +-28 +32 +-27 +31 +-29 +31 +-30 +31 +-29 +30 +-29 +31 +-30 +31 +-29 +31 +-27 +33 +-27 +33 +-28 +31 +-29 +32 +-29 +32 +-28 +32 +-28 +31 +-29 +32 +-27 +33 +-26 +33 +-28 +32 +-28 +31 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +30 +-30 +30 +-30 +30 +-30 +30 +-30 +30 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +30 +-30 +31 +-30 +31 +-29 +31 +-27 +32 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +32 +-29 +32 +-27 +32 +-27 +32 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +-27 +33 +-27 +33 +-28 +31 +-29 +32 +-29 +31 +-29 +32 +-28 +32 +-28 +32 +-27 +33 +-26 +33 +-28 +32 +-28 +32 +-29 +31 +-28 +31 +-29 +32 +-29 +31 +-27 +33 +-26 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +31 +-27 +32 +-29 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-26 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-28 +32 +-27 +31 +-29 +31 +-29 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +30 +-30 +31 +-30 +30 +-30 +30 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +32 +-28 +31 +-27 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-30 +30 +-30 +30 +-26 +33 +-26 +33 +-29 +31 +-29 +30 +-30 +31 +-30 +30 +-30 +30 +-30 +30 +-29 +31 +-27 +32 +-29 +31 +-30 +30 +-31 +30 +-30 +31 +-30 +30 +-30 +30 +-28 +31 +-27 +31 +-30 +31 +-30 +30 +-30 +30 +-30 +30 +-30 +30 +-29 +30 +-28 +32 +-28 +32 +-29 +30 +-30 +31 +-30 +31 +-29 +30 +-30 +31 +-30 +31 +-27 +32 +-27 +33 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-28 +31 +-29 +31 +-27 +33 +-26 +33 +-28 +31 +-29 +32 +-29 +31 +-28 +31 +-29 +32 +-28 +31 +-27 +32 +-27 +33 +-28 +31 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +33 +-27 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +32 +-28 +31 +-26 +33 +-26 +33 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-26 +34 +-26 +33 +-28 +31 +-29 +32 +-28 +31 +-29 +32 +-29 +31 +-28 +32 +-27 +34 +-26 +33 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +32 +-27 +33 +-29 +31 +-29 +31 +-29 +30 +-29 +32 +-29 +31 +-29 +30 +-28 +32 +-27 +32 +-29 +30 +-30 +30 +-30 +31 +-29 +31 +-30 +31 +-30 +30 +-28 +31 +-28 +32 +-29 +31 +-30 +31 +-29 +30 +-30 +31 +-30 +30 +-30 +30 +-28 +32 +-28 +31 +-29 +30 +-30 +30 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +30 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +30 +-29 +31 +-28 +32 +-26 +33 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +32 +-27 +32 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +33 +-28 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +73 +-4 +42 +-26 +28 +-34 +26 +-35 +25 +-35 +26 +-35 +26 +-34 +27 +-33 +28 +-30 +30 +-31 +29 +-32 +29 +-32 +29 +-31 +30 +-31 +30 +-30 +30 +-30 +-107 +-44 +-96 +-3 +-58 +22 +-39 +33 +-32 +37 +-28 +40 +-21 +44 +-19 +44 +-15 +47 +-12 +47 +-12 +46 +-14 +45 +-15 +43 +-18 +41 +-21 +38 +-23 +37 +-22 +37 +-23 +36 +-25 +34 +-26 +34 +-26 +33 +-27 +34 +-27 +33 +-27 +32 +-26 +33 +-26 +34 +-27 +32 +-29 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-26 +33 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +-29 +32 +-26 +33 +-26 +32 +-28 +32 +-29 +31 +-29 +31 +-28 +31 +-29 +32 +-29 +32 +-27 +32 +-27 +33 +-28 +31 +-29 +30 +-30 +31 +-29 +31 +-30 +31 +-30 +30 +-28 +32 +-28 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +30 +-30 +31 +72 +-3 +42 +-25 +29 +-33 +26 +-35 +25 +-34 +27 +-34 +26 +-33 +28 +-33 +28 +-30 +30 +-31 +29 +-32 +29 +-32 +29 +-31 +29 +-31 +30 +-31 +30 +-29 +-107 +-44 +-96 +-4 +-58 +23 +-40 +33 +-33 +36 +-27 +40 +-22 +43 +-19 +44 +-15 +47 +-12 +47 +-13 +46 +-14 +45 +-16 +43 +-18 +40 +-20 +39 +-22 +37 +-22 +37 +-23 +36 +-25 +35 +-26 +34 +-27 +33 +-27 +34 +-27 +33 +-27 +33 +-26 +35 +-24 +34 +-27 +32 +-28 +32 +-28 +32 +-27 +32 +-28 +32 +-28 +32 +74 +-2 +43 +-25 +30 +-33 +26 +-34 +26 +-34 +27 +-33 +27 +-33 +28 +-33 +29 +-29 +31 +-30 +29 +-31 +29 +-32 +29 +-30 +30 +-30 +30 +-31 +30 +-30 +30 +-27 +33 +-29 +31 +-29 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-27 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-27 +33 +-29 +30 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-27 +32 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +32 +-26 +33 +-28 +31 +-29 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-29 +32 +-27 +33 +-28 +32 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +-106 +-43 +-96 +-2 +-57 +23 +-39 +33 +-32 +37 +-27 +41 +-21 +44 +-18 +44 +-14 +47 +-13 +48 +-12 +46 +-13 +45 +-15 +43 +-18 +41 +-20 +38 +-22 +38 +-21 +38 +-22 +37 +-24 +35 +-26 +34 +-26 +34 +-26 +34 +-26 +34 +-26 +33 +-25 +34 +-25 +35 +-27 +33 +-27 +32 +-28 +32 +-28 +32 +-28 +32 +-28 +32 +74 +-2 +43 +-25 +30 +-33 +26 +-35 +26 +-34 +27 +-34 +27 +-33 +27 +-32 +28 +-30 +30 +-31 +29 +-31 +29 +-32 +29 +-31 +28 +-31 +30 +-31 +30 +-30 +-107 +-43 +-96 +-3 +-58 +22 +-41 +32 +-33 +36 +-28 +39 +-22 +43 +-20 +44 +-15 +46 +-13 +47 +-13 +46 +-14 +44 +-16 +43 +-18 +40 +-21 +38 +-22 +37 +-22 +37 +-22 +36 +-25 +35 +-26 +34 +-26 +33 +-26 +34 +-27 +34 +-27 +33 +-26 +34 +-26 +34 +-28 +32 +-28 +32 +-29 +31 +-29 +32 +-28 +32 +-28 +32 +73 +-3 +42 +-25 +30 +-33 +26 +-35 +25 +-35 +26 +-34 +27 +-33 +27 +-33 +29 +-30 +30 +-31 +29 +-31 +30 +-32 +29 +-31 +29 +-31 +30 +-31 +29 +-30 +30 +-28 +32 +-29 +30 +-30 +30 +-31 +30 +-30 +30 +-30 +30 +-29 +32 +-29 +31 +-28 +32 +-28 +31 +-29 +32 +-30 +31 +-29 +31 +-29 +32 +-30 +31 +-29 +31 +-26 +33 +-28 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-30 +32 +-29 +32 +-26 +33 +-28 +32 +-29 +32 +-30 +30 +-29 +32 +-29 +32 +-29 +32 +-28 +31 +-26 +34 +-27 +33 +-28 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +32 +-29 +32 +-27 +33 +-28 +32 +-29 +32 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-26 +34 +-28 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-29 +32 +-27 +33 +-28 +32 +-29 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-27 +33 +-29 +31 +-30 +30 +-31 +30 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-28 +33 +-28 +32 +-29 +32 +-30 +31 +-29 +31 +-30 +31 +-30 +32 +-28 +-105 +-43 +-95 +-2 +-57 +24 +-38 +34 +-31 +37 +-26 +41 +-21 +44 +-18 +45 +-13 +49 +-11 +48 +-12 +47 +-13 +46 +-15 +43 +-17 +41 +-19 +40 +-22 +38 +-21 +38 +-22 +36 +-25 +34 +-27 +34 +-27 +33 +-27 +33 +-27 +33 +-27 +33 +-25 +34 +-25 +34 +-27 +32 +-28 +33 +-28 +32 +-28 +32 +-28 +32 +-29 +32 +-27 +33 +-26 +33 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +30 +-29 +31 +-30 +31 +-29 +30 +-29 +32 +-29 +31 +73 +-3 +42 +-26 +29 +-34 +26 +-35 +26 +-35 +26 +-34 +27 +-34 +28 +-33 +27 +-30 +30 +-31 +29 +-32 +29 +-32 +29 +-32 +29 +-31 +30 +-31 +30 +-30 +31 +-28 +33 +-29 +31 +-30 +30 +-31 +30 +-31 +30 +-30 +30 +-30 +31 +-30 +31 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-29 +32 +-27 +33 +-29 +32 +-29 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-28 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-27 +33 +-28 +31 +-30 +31 +-30 +30 +-30 +30 +-30 +30 +-30 +31 +-29 +31 +-27 +32 +-29 +32 +-29 +32 +-29 +31 +-30 +32 +-30 +31 +-29 +31 +-29 +-106 +-43 +-95 +-2 +-57 +24 +-38 +34 +-31 +38 +-26 +41 +-20 +45 +-18 +46 +-13 +48 +-12 +48 +-12 +47 +-13 +46 +-15 +43 +-17 +41 +-19 +39 +-22 +38 +-21 +38 +-22 +37 +-25 +34 +-26 +34 +-26 +33 +-27 +34 +-26 +34 +-27 +33 +-26 +34 +-25 +34 +-27 +32 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +33 +-26 +32 +-29 +30 +-30 +30 +-30 +30 +-30 +31 +-30 +30 +-30 +30 +-28 +32 +-28 +31 +-30 +30 +-30 +30 +-31 +30 +-30 +30 +-30 +30 +-30 +30 +72 +-4 +42 +-26 +28 +-34 +24 +-36 +25 +-35 +25 +-35 +26 +-35 +27 +-33 +28 +-30 +30 +-32 +28 +-32 +28 +-32 +28 +-32 +29 +-32 +30 +-31 +29 +-30 +-107 +-44 +-97 +-3 +-58 +22 +-40 +32 +-33 +37 +-27 +40 +-21 +44 +-19 +45 +-14 +47 +-12 +47 +-12 +47 +-14 +44 +-16 +43 +-18 +41 +-21 +39 +-22 +37 +79 +2 +47 +-21 +33 +-30 +29 +-33 +28 +-31 +29 +-31 +30 +-31 +30 +-30 +30 +-28 +32 +-30 +30 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-29 +-107 +-44 +-96 +-3 +-58 +23 +-40 +33 +-32 +37 +-27 +40 +-22 +43 +-19 +44 +-15 +47 +-13 +47 +-13 +46 +-14 +45 +-15 +43 +-18 +40 +-21 +38 +-23 +36 +78 +1 +46 +-21 +33 +-30 +29 +-32 +27 +-33 +29 +-32 +29 +-31 +29 +-31 +30 +-29 +31 +-30 +30 +-31 +29 +-31 +30 +-30 +30 +-30 +30 +-30 +31 +-30 +-107 +-43 +-97 +-3 +-57 +23 +-39 +34 +-32 +37 +-26 +41 +-20 +45 +-18 +46 +-14 +47 +-11 +48 +-12 +47 +-13 +46 +-14 +44 +-17 +42 +-20 +40 +-21 +37 +79 +2 +48 +-21 +34 +-30 +29 +-32 +28 +-31 +29 +-32 +29 +-31 +30 +-30 +30 +-28 +32 +-30 +30 +-30 +30 +-31 +30 +-30 +30 +-30 +30 +-30 +30 +-30 +31 +-27 +32 +-29 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +32 +-29 +32 +-29 +32 +-27 +33 +-29 +32 +-29 +32 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +-29 +-106 +-42 +-95 +-3 +-57 +23 +-39 +34 +-32 +37 +-27 +41 +-21 +44 +-19 +44 +-15 +47 +-13 +47 +-13 +46 +-13 +44 +-16 +43 +-18 +40 +-21 +38 +-23 +37 +-22 +37 +-22 +36 +-25 +34 +-27 +34 +-27 +33 +-27 +33 +-28 +33 +-27 +33 +-26 +33 +-26 +34 +-27 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +73 +-3 +42 +-26 +29 +-34 +25 +-36 +26 +-34 +27 +-34 +27 +-33 +27 +-32 +29 +-30 +30 +-31 +29 +-32 +29 +-32 +29 +-31 +29 +-31 +29 +-31 +30 +-31 +30 +-28 +32 +-30 +30 +-30 +30 +-31 +30 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-27 +34 +-28 +31 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +30 +-29 +-107 +-43 +-96 +-3 +-57 +23 +-39 +34 +-31 +37 +-27 +41 +-21 +44 +-18 +44 +-14 +47 +-13 +47 +-12 +46 +-13 +45 +-15 +43 +-17 +41 +-20 +39 +-23 +36 +-22 +37 +-22 +36 +-25 +35 +-26 +34 +-27 +33 +-27 +33 +-27 +34 +-27 +33 +-25 +34 +-25 +34 +-27 +32 +-28 +32 +-28 +32 +-28 +32 +-28 +31 +-29 +32 +-27 +33 +-25 +33 +-28 +31 +-30 +30 +-30 +30 +-29 +31 +-29 +30 +-30 +31 +-27 +32 +-27 +32 +-29 +31 +-30 +30 +-30 +31 +-29 +31 +-30 +30 +-30 +30 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-28 +31 +-28 +32 +-26 +33 +-27 +33 +-28 +31 +-29 +31 +-29 +31 +-28 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +33 +-28 +32 +-28 +31 +-29 +31 +-28 +32 +-28 +32 +-28 +32 +-26 +34 +-26 +33 +-27 +32 +-28 +32 +-28 +31 +-28 +31 +-29 +32 +-29 +32 +-27 +32 +-27 +33 +-28 +31 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +30 +-30 +30 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +30 +-30 +31 +-30 +30 +-29 +30 +-29 +31 +-28 +32 +-27 +32 +-28 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +32 +-28 +31 +-27 +33 +-26 +33 +-28 +31 +-30 +31 +-29 +31 +-29 +32 +-28 +32 +-28 +32 +-26 +34 +-25 +33 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +33 +-29 +31 +-29 +30 +-29 +31 +-29 +31 +-30 +30 +-29 +31 +-28 +33 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +72 +-4 +42 +-26 +29 +-33 +25 +-35 +25 +-35 +26 +-34 +26 +-33 +27 +-33 +28 +-30 +30 +-31 +29 +-31 +29 +-33 +29 +-32 +29 +-32 +29 +-31 +30 +-30 +-108 +-44 +-97 +-4 +-59 +22 +-40 +33 +-33 +36 +-28 +39 +-22 +43 +-20 +44 +-15 +47 +-12 +47 +-13 +46 +-14 +44 +-16 +42 +-18 +41 +-20 +39 +-22 +37 +78 +2 +47 +-22 +33 +-30 +29 +-32 +28 +-32 +29 +-32 +29 +-31 +29 +-31 +30 +-29 +31 +-30 +30 +-31 +29 +-31 +30 +-31 +30 +-30 +30 +-30 +30 +-30 +-107 +-45 +-97 +-3 +-59 +21 +-40 +33 +-33 +37 +-27 +40 +-22 +43 +-20 +43 +-15 +47 +-12 +47 +-13 +46 +-14 +44 +-16 +42 +-18 +41 +-20 +39 +-22 +37 +79 +2 +47 +-21 +33 +-30 +29 +-32 +28 +-32 +29 +-32 +29 +-31 +30 +-31 +30 +-28 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +32 +-29 +32 +-26 +33 +-28 +32 +-29 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +34 +-28 +31 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +-107 +-43 +-96 +-3 +-58 +23 +-39 +33 +-32 +37 +-27 +40 +-21 +44 +-19 +44 +-15 +46 +-13 +47 +-13 +47 +-13 +45 +-15 +42 +-18 +41 +-21 +38 +-22 +36 +-23 +36 +-24 +36 +-25 +34 +-26 +33 +-27 +32 +-28 +32 +-28 +32 +-28 +32 +-27 +33 +-26 +33 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-28 +31 +-27 +33 +-27 +33 +-28 +31 +-29 +31 +-29 +31 +-30 +30 +-29 +31 +-29 +32 +-27 +33 +-27 +32 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +33 +-28 +31 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-29 +32 +-27 +33 +-26 +33 +-28 +32 +-29 +32 +-28 +31 +-29 +32 +-29 +31 +-29 +31 +-27 +33 +-26 +32 +-28 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +30 +-29 +31 +-26 +33 +-26 +33 +-29 +30 +-29 +30 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +30 +-29 +30 +-30 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +32 +-29 +32 +-28 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +32 +-29 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +32 +-27 +32 +-27 +33 +-28 +31 +-29 +30 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +33 +-26 +33 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-26 +33 +-26 +33 +-28 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +30 +-29 +31 +-28 +33 +-26 +33 +-28 +31 +-30 +31 +-30 +30 +-30 +30 +-30 +30 +-30 +31 +-28 +31 +-28 +31 +-30 +31 +-29 +30 +-30 +30 +-30 +31 +-30 +30 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +30 +-29 +32 +-29 +31 +-29 +31 +-27 +33 +-27 +33 +-29 +30 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +30 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +30 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-27 +32 +-26 +33 +-29 +31 +-29 +30 +-30 +30 +-30 +31 +-29 +30 +-29 +32 +-27 +33 +-26 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-27 +32 +-27 +32 +-29 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-26 +32 +-27 +32 +-28 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-28 +32 +-28 +32 +-29 +30 +-30 +30 +-30 +31 +-30 +30 +-30 +30 +-30 +30 +-28 +32 +-27 +32 +-29 +30 +-30 +30 +-31 +30 +-30 +30 +-30 +30 +-30 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +30 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-30 +30 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +30 +-30 +31 +-28 +33 +-26 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +30 +-30 +31 +-29 +31 +-29 +31 +-27 +33 +-26 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-26 +33 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +31 +-28 +32 +-27 +33 +-27 +33 +-28 +31 +-28 +32 +-29 +32 +-28 +31 +-29 +32 +-29 +32 +-27 +32 +-27 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-30 +30 +-30 +30 +-30 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +32 +-28 +31 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-27 +32 +-27 +32 +-28 +31 +-29 +31 +-29 +31 +-29 +30 +-30 +31 +-29 +32 +-27 +32 +-27 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-26 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-26 +33 +-26 +33 +-28 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +32 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-30 +30 +-30 +30 +-26 +33 +-26 +32 +-29 +30 +-30 +30 +-30 +30 +-31 +29 +-30 +30 +-30 +30 +-29 +31 +-28 +31 +-29 +30 +-30 +30 +-30 +29 +-30 +30 +-30 +30 +-30 +30 +-29 +31 +-28 +32 +-30 +30 +-30 +30 +-30 +30 +-30 +30 +-30 +30 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +33 +-27 +32 +-28 +31 +-30 +30 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-27 +33 +-26 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-26 +33 +-26 +34 +-28 +32 +-28 +31 +-29 +31 +-29 +32 +-29 +32 +-28 +31 +-27 +32 +-26 +33 +-28 +31 +-29 +31 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-28 +32 +-27 +32 +-28 +31 +-30 +31 +-30 +30 +-29 +31 +-29 +31 +-30 +31 +-28 +32 +-27 +32 +-30 +31 +-30 +30 +-29 +31 +-29 +30 +-30 +31 +-29 +31 +-28 +32 +-27 +32 +-28 +31 +-29 +31 +-30 +30 +-29 +31 +-30 +31 +-29 +31 +-27 +33 +-27 +32 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-26 +32 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +-27 +32 +-27 +33 +-29 +31 +-29 +30 +-30 +31 +-28 +32 +-29 +31 +-29 +31 +-27 +33 +-27 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-26 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +30 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-27 +32 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +72 +-3 +42 +-26 +29 +-34 +25 +-35 +25 +-35 +26 +-34 +26 +-34 +27 +-34 +27 +-31 +29 +-32 +28 +-32 +29 +-32 +28 +-32 +28 +-32 +29 +-31 +29 +-30 +-108 +-44 +-97 +-5 +-59 +22 +-41 +32 +-33 +36 +-28 +39 +-22 +43 +-20 +43 +-15 +46 +-13 +47 +-13 +46 +-14 +44 +-16 +43 +-18 +41 +-20 +38 +-22 +37 +-23 +37 +-23 +36 +-25 +35 +-26 +35 +-26 +34 +-26 +34 +-27 +33 +-27 +33 +-25 +34 +-25 +34 +-27 +32 +-28 +32 +-28 +32 +-28 +32 +-29 +31 +-28 +32 +-26 +33 +-27 +32 +-28 +31 +-29 +32 +-29 +31 +-28 +31 +-29 +31 +-29 +31 +-27 +32 +-26 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-28 +32 +-27 +32 +-30 +30 +-30 +31 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +73 +-3 +42 +-26 +29 +-34 +25 +-36 +24 +-35 +26 +-34 +27 +-33 +27 +-32 +28 +-31 +29 +-32 +29 +-31 +29 +-32 +29 +-32 +29 +-32 +30 +-30 +30 +-30 +-107 +-44 +-97 +-3 +-58 +23 +-40 +32 +-32 +37 +-27 +40 +-21 +44 +-19 +44 +-14 +47 +-13 +47 +-12 +46 +-13 +45 +-15 +43 +-17 +41 +-20 +39 +-22 +37 +-22 +37 +-22 +37 +-25 +35 +-26 +34 +-26 +34 +-27 +33 +-27 +33 +-27 +33 +-26 +34 +-25 +34 +-27 +32 +-28 +32 +-29 +32 +-28 +31 +-28 +31 +-29 +32 +73 +-3 +43 +-25 +30 +-33 +26 +-34 +26 +-34 +27 +-34 +27 +-33 +29 +-32 +29 +-29 +30 +-30 +30 +-31 +30 +-31 +29 +-31 +30 +-30 +30 +-31 +30 +-30 +31 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +32 +-27 +33 +-28 +32 +-29 +31 +-31 +29 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-27 +33 +-28 +31 +-30 +31 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-28 +31 +-30 +30 +-31 +30 +-30 +30 +-30 +30 +-30 +31 +-29 +32 +-27 +33 +-29 +32 +-29 +31 +-29 +31 +-29 +32 +-30 +31 +-29 +31 +-29 +-106 +-42 +-95 +-2 +-57 +23 +-39 +34 +-31 +37 +-26 +41 +-21 +45 +-18 +44 +-14 +48 +-12 +48 +-12 +47 +-13 +46 +-15 +43 +-18 +40 +-20 +39 +-22 +37 +-21 +37 +-22 +37 +-25 +35 +-26 +34 +-27 +33 +-27 +34 +-27 +33 +-27 +33 +-26 +34 +-26 +34 +-27 +32 +-28 +31 +-29 +32 +-29 +31 +-28 +33 +-28 +32 +74 +-3 +43 +-25 +29 +-33 +27 +-34 +26 +-34 +27 +-33 +27 +-33 +27 +-33 +29 +-29 +31 +-31 +30 +-31 +30 +-31 +29 +-30 +30 +-30 +30 +-30 +30 +-30 +-107 +-43 +-96 +-3 +-57 +23 +-40 +33 +-32 +36 +-27 +40 +-21 +44 +-19 +44 +-15 +47 +-13 +47 +-12 +46 +-13 +45 +-15 +43 +-17 +41 +-20 +38 +-22 +37 +-22 +38 +-22 +36 +-25 +34 +-26 +34 +-26 +34 +-27 +33 +-28 +33 +-28 +32 +-26 +33 +-26 +34 +-28 +32 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +73 +-3 +42 +-26 +29 +-34 +25 +-35 +25 +-35 +27 +-34 +27 +-33 +27 +-33 +28 +-30 +30 +-31 +29 +-32 +29 +-32 +29 +-32 +29 +-31 +30 +-31 +30 +-30 +30 +-28 +32 +-29 +31 +-30 +30 +-31 +30 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-27 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-27 +33 +-29 +32 +-29 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-29 +32 +-27 +33 +-28 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +32 +-29 +32 +-29 +32 +-26 +33 +-28 +32 +-29 +32 +-29 +31 +-29 +32 +-29 +32 +-29 +31 +-29 +32 +-26 +34 +-27 +32 +-28 +32 +-29 +30 +-30 +32 +-29 +31 +-29 +31 +-29 +32 +-25 +34 +-28 +32 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +30 +-29 +32 +-27 +34 +-28 +32 +-29 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +32 +-29 +32 +-26 +33 +-28 +32 +-29 +31 +-30 +31 +-30 +32 +-29 +31 +-30 +31 +-29 +32 +-28 +33 +-28 +31 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +-107 +-44 +-97 +-4 +-58 +23 +-40 +33 +-32 +36 +-28 +40 +-22 +44 +-19 +43 +-15 +46 +-13 +46 +-14 +45 +-15 +44 +-16 +43 +-18 +41 +-21 +38 +-22 +37 +-22 +37 +-22 +37 +-24 +35 +-26 +34 +-26 +34 +-26 +34 +-27 +34 +-26 +33 +-26 +34 +-25 +34 +-27 +32 +-28 +32 +-28 +32 +-28 +32 +-28 +32 +-29 +32 +-26 +34 +-26 +34 +-27 +32 +-28 +32 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-27 +32 +-27 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +73 +-3 +42 +-26 +29 +-34 +26 +-35 +26 +-34 +26 +-34 +27 +-33 +28 +-33 +29 +-29 +30 +-31 +29 +-32 +29 +-32 +28 +-32 +29 +-31 +30 +-30 +30 +-30 +30 +-28 +32 +-29 +30 +-30 +30 +-31 +29 +-31 +30 +-30 +30 +-30 +31 +-30 +31 +-27 +33 +-28 +32 +-29 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-27 +33 +-29 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-28 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-29 +31 +-29 +31 +-26 +33 +-28 +32 +-29 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +30 +-29 +31 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-29 +32 +-29 +31 +-30 +32 +-28 +-106 +-42 +-95 +-3 +-57 +23 +-39 +34 +-32 +37 +-26 +40 +-21 +45 +-18 +45 +-14 +47 +-12 +48 +-12 +47 +-13 +45 +-15 +43 +-18 +41 +-20 +38 +-22 +37 +-22 +37 +-22 +36 +-25 +34 +-26 +34 +-27 +33 +-26 +34 +-27 +33 +-27 +33 +-26 +34 +-25 +34 +-27 +33 +-27 +32 +-28 +33 +-28 +32 +-28 +31 +-28 +32 +-26 +34 +-26 +33 +-28 +32 +-28 +31 +-29 +31 +-29 +32 +-29 +32 +-29 +31 +-28 +33 +-27 +33 +-28 +31 +-29 +31 +-30 +30 +-29 +31 +-29 +31 +-29 +31 +73 +-3 +42 +-26 +29 +-34 +25 +-35 +25 +-35 +26 +-34 +26 +-33 +27 +-33 +29 +-30 +30 +-31 +29 +-32 +28 +-32 +28 +-32 +29 +-32 +29 +-31 +29 +-31 +-108 +-44 +-97 +-5 +-60 +22 +-41 +32 +-33 +36 +-28 +40 +-22 +43 +-19 +44 +-16 +46 +-13 +47 +-13 +45 +-14 +44 +-16 +42 +-19 +40 +-21 +37 +-23 +37 +78 +2 +46 +-23 +32 +-30 +29 +-33 +28 +-32 +29 +-32 +28 +-31 +29 +-31 +29 +-29 +32 +-30 +30 +-30 +30 +-31 +30 +-30 +31 +-30 +31 +-30 +31 +-29 +-106 +-43 +-96 +-4 +-58 +23 +-39 +34 +-32 +37 +-27 +40 +-21 +44 +-18 +45 +-14 +47 +-12 +48 +-12 +47 +-13 +45 +-15 +44 +-17 +41 +-20 +39 +-22 +38 +79 +2 +47 +-21 +34 +-30 +29 +-32 +28 +-32 +29 +-32 +29 +-31 +30 +-31 +30 +-28 +32 +-29 +31 +-30 +30 +-31 +30 +-31 +29 +-31 +31 +-30 +30 +-30 +-107 +-44 +-97 +-4 +-59 +22 +-40 +33 +-32 +36 +-28 +39 +-22 +43 +-19 +43 +-15 +46 +-14 +46 +-13 +45 +-14 +44 +-17 +42 +-19 +39 +-21 +38 +-23 +36 +78 +1 +46 +-22 +32 +-31 +28 +-33 +27 +-33 +28 +-32 +28 +-32 +29 +-31 +29 +-29 +31 +-30 +30 +-30 +30 +-31 +30 +-30 +30 +-30 +30 +-30 +30 +-30 +31 +-27 +33 +-28 +31 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-26 +33 +-29 +32 +-29 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +-106 +-43 +-96 +-2 +-57 +23 +-38 +34 +-32 +38 +-26 +41 +-20 +45 +-18 +45 +-14 +47 +-13 +47 +-12 +47 +-13 +46 +-15 +43 +-17 +41 +-20 +39 +-23 +37 +-22 +37 +-23 +36 +-26 +34 +-26 +33 +-27 +33 +-27 +33 +-27 +33 +-27 +33 +-26 +34 +-25 +33 +-28 +32 +-28 +32 +-28 +32 +-28 +31 +-29 +32 +-28 +31 +74 +-2 +42 +-25 +30 +-33 +26 +-35 +26 +-34 +26 +-34 +27 +-33 +27 +-33 +28 +-30 +31 +-31 +29 +-31 +29 +-31 +29 +-31 +30 +-31 +30 +-30 +31 +-29 +31 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-30 +32 +-26 +33 +-28 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +-106 +-43 +-96 +-3 +-58 +23 +-40 +34 +-31 +37 +-27 +40 +-22 +43 +-19 +44 +-15 +47 +-12 +47 +-12 +46 +-14 +45 +-16 +42 +-18 +40 +-20 +39 +-23 +36 +-22 +37 +-22 +37 +-25 +34 +-26 +33 +-27 +33 +-27 +33 +-27 +33 +-27 +33 +-26 +33 +-26 +33 +-28 +31 +-29 +31 +-29 +31 +-28 +31 +-28 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-26 +33 +-28 +31 +-29 +30 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-26 +33 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-27 +33 +-26 +33 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +32 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +32 +-29 +32 +-27 +33 +-26 +34 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-26 +33 +-28 +32 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-29 +32 +-26 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-27 +32 +-26 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-26 +34 +-26 +33 +-29 +31 +-30 +31 +-30 +31 +-29 +30 +-30 +31 +-29 +31 +-27 +32 +-26 +33 +-28 +31 +-29 +31 +-30 +30 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +30 +-29 +31 +-29 +31 +-27 +32 +-27 +33 +-28 +31 +-29 +30 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +72 +-4 +42 +-27 +28 +-34 +25 +-36 +24 +-35 +26 +-35 +26 +-34 +26 +-34 +27 +-31 +30 +-32 +28 +-32 +28 +-32 +29 +-33 +29 +-31 +30 +-31 +30 +-31 +-108 +-45 +-98 +-5 +-59 +21 +-41 +32 +-33 +36 +-28 +39 +-22 +43 +-20 +44 +-16 +46 +-13 +47 +-13 +46 +-14 +44 +-16 +42 +-18 +41 +-21 +38 +-22 +37 +79 +2 +47 +-21 +33 +-30 +29 +-32 +28 +-32 +29 +-32 +29 +-31 +30 +-30 +30 +-28 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +-106 +-43 +-96 +-2 +-58 +23 +-39 +34 +-32 +38 +-27 +40 +-21 +44 +-18 +45 +-15 +47 +-12 +47 +-13 +46 +-14 +45 +-15 +43 +-18 +40 +-20 +39 +-22 +37 +79 +1 +47 +-21 +32 +-30 +29 +-32 +28 +-32 +28 +-32 +29 +-31 +30 +-30 +30 +-28 +32 +-30 +30 +-30 +30 +-30 +30 +-31 +30 +-31 +30 +-31 +30 +-30 +31 +-26 +33 +-28 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-28 +33 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +32 +-29 +-106 +-43 +-96 +-3 +-57 +23 +-39 +33 +-32 +38 +-27 +40 +-21 +43 +-19 +44 +-15 +47 +-13 +46 +-13 +46 +-14 +45 +-15 +42 +-18 +39 +-21 +39 +-22 +37 +-22 +37 +-23 +36 +-26 +34 +-27 +33 +-28 +33 +-27 +32 +-29 +32 +-27 +33 +-26 +34 +-26 +33 +-28 +31 +-29 +31 +-29 +31 +-28 +31 +-29 +31 +-30 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +32 +-28 +31 +-29 +30 +-30 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +32 +-27 +33 +-28 +31 +-29 +31 +-29 +30 +-29 +31 +-29 +31 +-28 +31 +-26 +34 +-26 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +32 +-28 +31 +-28 +32 +-27 +33 +-26 +32 +-28 +32 +-29 +31 +-28 +32 +-28 +31 +-29 +32 +-29 +31 +-27 +32 +-27 +33 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +30 +-29 +31 +-28 +32 +-28 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-29 +31 +-27 +32 +-27 +33 +-29 +31 +-29 +30 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +32 +-28 +31 +-29 +31 +-30 +30 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +30 +-30 +31 +-30 +31 +-29 +31 +-27 +33 +-27 +33 +-28 +31 +-29 +31 +-29 +31 +-28 +31 +-29 +32 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-26 +34 +-27 +32 +-28 +31 +-29 +31 +-30 +30 +-29 +31 +-29 +31 +-30 +31 +-27 +32 +-27 +31 +-29 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +30 +-30 +30 +-29 +31 +-28 +32 +-29 +30 +-30 +30 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-28 +31 +-28 +32 +-29 +31 +-30 +30 +-30 +30 +-30 +31 +-29 +31 +-29 +31 +-28 +33 +-27 +32 +-29 +30 +-29 +31 +-29 +31 +-29 +30 +-29 +31 +-29 +32 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-26 +33 +-26 +33 +-28 +31 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +33 +-29 +32 +-29 +31 +-29 +30 +-30 +31 +-30 +31 +-30 +30 +-27 +32 +-27 +32 +-29 +30 +-30 +30 +-30 +30 +-30 +30 +-30 +30 +-30 +30 +-28 +31 +-27 +32 +-30 +31 +-30 +30 +-30 diff --git a/traces/lf_t5577_nexwatch_quadrakey.pm3 b/traces/lf_t5577_nexwatch_quadrakey.pm3 new file mode 100644 index 000000000..307e53339 --- /dev/null +++ b/traces/lf_t5577_nexwatch_quadrakey.pm3 @@ -0,0 +1,10000 @@ +32 +-29 +31 +-29 +31 +-29 +32 +-28 +33 +-26 +33 +-28 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-28 +32 +-28 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-28 +32 +-28 +32 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-28 +32 +-28 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-27 +33 +-29 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +32 +-29 +32 +-28 +33 +-27 +33 +-28 +31 +-30 +31 +-30 +31 +-29 +32 +-29 +31 +-30 +31 +-28 +32 +-28 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +30 +-30 +30 +-30 +30 +-27 +33 +-26 +33 +-29 +31 +-30 +30 +-30 +31 +-31 +31 +-30 +30 +-30 +31 +-28 +32 +-28 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +32 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +73 +-2 +42 +-25 +30 +-33 +26 +-35 +25 +-35 +26 +-34 +27 +-33 +27 +-32 +28 +-30 +30 +-31 +29 +-31 +29 +-32 +29 +-31 +29 +-30 +30 +-30 +30 +-30 +-107 +-44 +-97 +-3 +-58 +22 +-40 +33 +-33 +37 +-27 +40 +-22 +44 +-19 +45 +-14 +47 +-13 +47 +-14 +47 +-14 +45 +-16 +43 +-18 +41 +-20 +39 +-22 +38 +78 +2 +47 +-21 +33 +-30 +29 +-32 +28 +-32 +28 +-32 +29 +-31 +29 +-30 +31 +-28 +31 +-29 +30 +-30 +30 +-30 +30 +-30 +30 +-30 +30 +-30 +30 +-29 +-107 +-43 +-96 +-4 +-58 +23 +-40 +34 +-33 +37 +-28 +40 +-22 +44 +-19 +44 +-15 +47 +-13 +47 +-13 +47 +-14 +45 +-16 +43 +-18 +41 +-21 +39 +-23 +38 +78 +2 +46 +-21 +33 +-30 +29 +-33 +28 +-32 +28 +-32 +28 +-31 +29 +-31 +30 +-28 +31 +-30 +30 +-30 +30 +-30 +30 +-30 +31 +-30 +30 +-29 +31 +-29 +31 +-26 +33 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-28 +31 +-26 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-29 +-107 +-42 +-96 +-3 +-58 +23 +-39 +34 +-32 +37 +-27 +40 +-22 +44 +-19 +45 +-15 +47 +-13 +48 +-13 +47 +-13 +45 +-15 +43 +-19 +41 +-20 +39 +-23 +38 +-22 +38 +-23 +37 +-25 +35 +-26 +34 +-27 +34 +-27 +34 +-27 +33 +-28 +33 +-26 +34 +-26 +33 +-28 +32 +-28 +32 +-29 +32 +-30 +32 +-28 +32 +-28 +32 +-28 +33 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +32 +-29 +31 +-28 +32 +-27 +33 +-29 +31 +-29 +32 +-29 +32 +-29 +32 +-29 +31 +-29 +32 +-27 +33 +-27 +33 +-29 +32 +-29 +32 +-29 +31 +-29 +31 +-30 +32 +-29 +31 +-27 +33 +-27 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-27 +33 +-27 +33 +-29 +32 +-29 +31 +-30 +31 +-29 +32 +-29 +31 +-29 +31 +-27 +33 +-27 +33 +-29 +31 +-29 +32 +-29 +32 +-29 +31 +-29 +31 +-29 +31 +-27 +32 +-27 +33 +-29 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-28 +33 +-28 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-27 +33 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-29 +32 +-29 +31 +-29 +31 +-28 +33 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-30 +31 +-28 +32 +-28 +33 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-27 +33 +-27 +33 +-29 +32 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +-30 +31 +-27 +33 +-27 +33 +-29 +31 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-28 +32 +-27 +33 +-29 +31 +-29 +30 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-28 +33 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-27 +33 +-27 +33 +-29 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-27 +33 +-26 +33 +-28 +31 +-29 +32 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-28 +33 +-27 +33 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-28 +32 +-29 +30 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-27 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-28 +32 +-28 +32 +-29 +31 +-30 +30 +-30 +30 +-30 +31 +-29 +31 +-30 +31 +-28 +32 +-28 +33 +-29 +31 +-29 +31 +-30 +30 +-31 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-29 +32 +-29 +32 +-29 +31 +-27 +33 +-27 +33 +-28 +32 +-29 +31 +-29 +31 +-30 +32 +-28 +32 +-29 +32 +-27 +33 +-27 +33 +-28 +32 +-29 +32 +-28 +31 +-29 +32 +-30 +31 +-29 +31 +-27 +33 +-28 +33 +-28 +32 +-29 +32 +-29 +32 +-29 +31 +-29 +31 +-30 +31 +-27 +32 +-27 +32 +-29 +31 +-30 +32 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-27 +33 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +33 +-29 +31 +-30 +31 +-30 +31 +-30 +32 +-29 +31 +-29 +31 +-28 +32 +-27 +33 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +32 +-27 +33 +-26 +33 +-29 +32 +-29 +31 +-30 +31 +-29 +32 +-29 +31 +-30 +31 +-27 +33 +-27 +33 +-29 +31 +-30 +31 +-31 +30 +-29 +31 +-30 +31 +-30 +31 +-28 +32 +-27 +33 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +30 +-28 +32 +-28 +32 +-29 +31 +-30 +30 +-31 +30 +-31 +29 +-30 +31 +-30 +31 +-28 +32 +-27 +32 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-28 +32 +-28 +33 +-29 +31 +-29 +31 +-30 +32 +-29 +31 +-30 +31 +-29 +32 +-28 +32 +-27 +33 +-29 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-28 +32 +-28 +33 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +33 +-27 +33 +-29 +32 +-29 +32 +-29 +32 +-29 +32 +-28 +32 +-29 +32 +-27 +33 +-26 +33 +-28 +32 +-29 +32 +-29 +30 +-30 +31 +-30 +31 +-29 +31 +-27 +33 +-27 +33 +-29 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-28 +32 +-27 +33 +-29 +31 +-30 +30 +-30 +31 +-30 +32 +-29 +31 +-29 +32 +-26 +34 +-26 +33 +-28 +32 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +32 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-28 +32 +-28 +33 +-28 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-27 +32 +-27 +33 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +30 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +32 +-29 +31 +-28 +32 +-27 +32 +-29 +32 +-29 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-28 +33 +-28 +32 +-30 +30 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-28 +32 +-29 +30 +-30 +30 +-31 +31 +-30 +30 +-30 +31 +-30 +31 +-28 +32 +-27 +32 +-29 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +33 +-27 +33 +-29 +32 +-29 +32 +-29 +32 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-28 +33 +-29 +31 +-29 +31 +-29 +32 +-30 +32 +-29 +31 +-29 +32 +-27 +34 +-26 +33 +-28 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-27 +32 +-28 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +32 +-28 +32 +-29 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-28 +32 +-28 +32 +-29 +31 +-30 +30 +-30 +31 +-29 +31 +-30 +31 +-29 +31 +-27 +33 +-28 +32 +-29 +31 +-30 +31 +-31 +30 +-29 +31 +-29 +31 +-29 +32 +-28 +33 +-27 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +32 +-28 +32 +-28 +32 +-27 +33 +-27 +34 +-28 +32 +-28 +32 +-29 +32 +-29 +31 +-29 +32 +-29 +32 +-27 +33 +-27 +33 +-28 +32 +-28 +31 +-29 +32 +-30 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +33 +-28 +32 +-29 +31 +-30 +31 +-29 +32 +-29 +31 +-29 +32 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +72 +-3 +42 +-25 +29 +-34 +25 +-35 +24 +-35 +25 +-35 +26 +-34 +26 +-33 +27 +-31 +29 +-32 +28 +-32 +28 +-32 +28 +-32 +28 +-31 +29 +-31 +29 +-30 +-108 +-44 +-97 +-4 +-59 +22 +-41 +33 +-33 +36 +-28 +40 +-22 +43 +-20 +44 +-15 +47 +-13 +48 +-14 +46 +-14 +44 +-16 +43 +-18 +40 +-21 +39 +-23 +38 +-22 +38 +-23 +36 +-25 +35 +-27 +34 +-27 +34 +-27 +34 +-28 +33 +-28 +33 +-26 +34 +-26 +34 +-28 +33 +-28 +32 +-29 +32 +-29 +32 +-29 +32 +-29 +32 +-27 +33 +-26 +32 +-29 +32 +-29 +32 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-28 +33 +-27 +32 +-29 +31 +-29 +32 +-29 +31 +-29 +32 +-28 +32 +-28 +32 +-27 +33 +-27 +34 +-28 +32 +-29 +31 +-29 +32 +-29 +32 +-29 +31 +-29 +33 +-27 +33 +-26 +33 +-28 +32 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +73 +-2 +42 +-25 +29 +-34 +25 +-35 +24 +-34 +26 +-34 +26 +-34 +27 +-32 +28 +-30 +30 +-31 +28 +-32 +28 +-32 +29 +-31 +29 +-31 +30 +-30 +30 +-30 +-107 +-44 +-97 +-4 +-58 +22 +-40 +33 +-33 +37 +-27 +41 +-21 +44 +-19 +45 +-15 +47 +-13 +47 +-14 +46 +-14 +45 +-16 +44 +-18 +41 +-20 +39 +-23 +38 +-23 +37 +-23 +36 +-26 +34 +-27 +34 +-27 +33 +-28 +33 +-27 +33 +-27 +33 +-26 +34 +-26 +34 +-27 +33 +-28 +32 +-29 +32 +-29 +32 +-29 +32 +-29 +32 +72 +-3 +43 +-25 +30 +-33 +25 +-35 +25 +-35 +26 +-35 +26 +-34 +27 +-33 +28 +-30 +30 +-31 +28 +-31 +28 +-32 +28 +-31 +29 +-31 +29 +-31 +30 +-31 +30 +-27 +31 +-29 +31 +-30 +30 +-31 +30 +-30 +30 +-31 +30 +-30 +30 +-30 +31 +-27 +33 +-28 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-26 +33 +-28 +32 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +31 +-28 +32 +-26 +33 +-27 +32 +-28 +31 +-30 +31 +-29 +31 +-30 +31 +-29 +31 +-28 +31 +-26 +33 +-28 +32 +-28 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +32 +-26 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +-107 +-43 +-96 +-2 +-58 +24 +-39 +34 +-32 +38 +-27 +40 +-22 +44 +-19 +45 +-15 +48 +-12 +47 +-13 +47 +-14 +46 +-15 +43 +-18 +41 +-21 +39 +-22 +38 +-21 +38 +-23 +37 +-25 +35 +-26 +34 +-27 +34 +-27 +33 +-28 +33 +-28 +33 +-26 +34 +-27 +33 +-28 +33 +-28 +32 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +73 +-3 +42 +-25 +29 +-33 +26 +-35 +25 +-34 +26 +-34 +27 +-34 +27 +-32 +29 +-29 +30 +-31 +29 +-31 +29 +-31 +29 +-30 +30 +-30 +30 +-30 +30 +-29 +-107 +-44 +-97 +-3 +-59 +23 +-39 +33 +-32 +38 +-27 +41 +-21 +44 +-19 +45 +-15 +47 +-13 +47 +-13 +46 +-14 +45 +-16 +43 +-18 +41 +-21 +39 +-23 +37 +-23 +38 +-23 +37 +-25 +35 +-26 +34 +-27 +34 +-28 +34 +-27 +33 +-27 +34 +-26 +34 +-26 +34 +-28 +33 +-28 +32 +-28 +31 +-29 +32 +-28 +32 +-28 +32 +73 +-2 +42 +-25 +29 +-33 +26 +-34 +25 +-34 +26 +-34 +27 +-33 +27 +-32 +28 +-29 +30 +-30 +29 +-31 +30 +-31 +29 +-31 +29 +-31 +29 +-30 +31 +-30 +30 +-27 +32 +-28 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +30 +-29 +31 +-27 +33 +-28 +32 +-29 +31 +-30 +30 +-30 +31 +-30 +30 +-30 +31 +-29 +31 +-26 +33 +-28 +31 +-30 +31 +-30 +30 +-30 +30 +-30 +30 +-30 +30 +-29 +31 +-27 +32 +-29 +30 +-29 +31 +-31 +30 +-29 +30 +-30 +30 +-31 +30 +-29 +30 +-27 +32 +-28 +31 +-29 +31 +-30 +30 +-30 +31 +-30 +30 +-29 +31 +-29 +31 +-27 +33 +-27 +32 +-29 +31 +-30 +31 +-29 +30 +-29 +31 +-30 +31 +-28 +32 +-25 +34 +-28 +32 +-29 +31 +-30 +30 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-27 +33 +-27 +31 +-29 +31 +-30 +30 +-30 +31 +-29 +31 +-30 +31 +-29 +31 +-26 +33 +-28 +32 +-29 +31 +-30 +30 +-29 +31 +-30 +31 +-29 +31 +-29 +32 +-26 +33 +-27 +32 +-28 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +-107 +-43 +-96 +-2 +-58 +23 +-39 +34 +-32 +38 +-27 +41 +-22 +44 +-19 +45 +-15 +48 +-13 +48 +-12 +47 +-13 +45 +-16 +43 +-18 +41 +-20 +39 +-22 +38 +-22 +38 +-22 +37 +-25 +35 +-26 +34 +-26 +34 +-27 +34 +-27 +34 +-27 +33 +-25 +35 +-25 +35 +-27 +33 +-28 +33 +-29 +32 +-28 +32 +-28 +32 +-29 +32 +-26 +34 +-26 +34 +-28 +32 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +73 +-3 +41 +-26 +28 +-34 +25 +-35 +25 +-35 +26 +-34 +26 +-33 +27 +-33 +28 +-30 +29 +-32 +28 +-32 +29 +-31 +29 +-32 +29 +-31 +29 +-30 +29 +-31 +30 +-28 +32 +-28 +31 +-30 +30 +-31 +30 +-30 +30 +-31 +30 +-30 +30 +-29 +31 +-27 +33 +-28 +31 +-29 +30 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-26 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +30 +-30 +31 +-29 +31 +-29 +31 +-26 +32 +-28 +31 +-29 +31 +-29 +31 +-30 +30 +-30 +31 +-29 +31 +-29 +31 +-27 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-29 +31 +-28 +31 +-26 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +31 +-28 +32 +-29 +-106 +-43 +-96 +-2 +-57 +23 +-39 +35 +-32 +38 +-26 +41 +-21 +45 +-19 +46 +-14 +47 +-13 +47 +-13 +47 +-13 +45 +-15 +43 +-18 +41 +-20 +40 +-22 +38 +-22 +38 +-23 +37 +-25 +35 +-26 +35 +-26 +34 +-27 +33 +-27 +34 +-27 +34 +-25 +34 +-25 +35 +-27 +33 +-28 +32 +-29 +32 +-29 +32 +-29 +31 +-29 +32 +-27 +33 +-27 +33 +-28 +32 +-29 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-28 +33 +-27 +33 +-28 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +72 +-3 +42 +-26 +29 +-33 +24 +-35 +25 +-35 +26 +-34 +26 +-33 +27 +-32 +28 +-30 +30 +-31 +28 +-32 +29 +-32 +29 +-31 +29 +-31 +30 +-31 +30 +-30 +-107 +-44 +-97 +-4 +-59 +22 +-40 +33 +-33 +36 +-27 +40 +-22 +44 +-19 +45 +-15 +47 +-13 +47 +-13 +46 +-14 +45 +-16 +43 +-18 +40 +-21 +39 +-22 +37 +78 +2 +47 +-21 +33 +-30 +28 +-32 +28 +-32 +28 +-32 +28 +-31 +29 +-31 +30 +-28 +32 +-29 +30 +-30 +30 +-30 +30 +-30 +30 +-30 +31 +-29 +31 +-29 +-106 +-44 +-96 +-3 +-58 +24 +-39 +34 +-32 +37 +-28 +41 +-21 +44 +-19 +44 +-15 +47 +-13 +48 +-12 +47 +-14 +46 +-15 +44 +-18 +41 +-21 +39 +-23 +38 +78 +2 +46 +-22 +32 +-30 +29 +-32 +28 +-32 +28 +-32 +28 +-32 +29 +-31 +29 +-30 +31 +-30 +31 +-30 +30 +-30 +29 +-30 +30 +-31 +30 +-30 +30 +-30 +-108 +-44 +-97 +-3 +-58 +23 +-40 +33 +-33 +37 +-28 +41 +-22 +44 +-19 +44 +-15 +47 +-13 +47 +-13 +46 +-14 +45 +-16 +43 +-18 +41 +-21 +39 +-22 +37 +-22 +38 +-23 +37 +-25 +35 +-26 +34 +-27 +34 +-27 +33 +-27 +34 +-28 +33 +-26 +34 +-25 +35 +-27 +33 +-28 +32 +-28 +32 +-29 +32 +-29 +32 +-28 +32 +-27 +34 +-26 +33 +-28 +31 +-29 +32 +-29 +32 +-29 +31 +-29 +31 +-29 +32 +-27 +33 +-27 +33 +-29 +32 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-28 +32 +-28 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +33 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +72 +-3 +42 +-26 +29 +-33 +25 +-35 +25 +-35 +26 +-34 +26 +-33 +27 +-33 +27 +-30 +30 +-31 +29 +-31 +29 +-32 +28 +-31 +29 +-31 +30 +-30 +30 +-30 +30 +-28 +31 +-29 +30 +-30 +30 +-31 +30 +-30 +30 +-30 +31 +-30 +30 +-30 +31 +-27 +32 +-29 +31 +-30 +31 +-30 +30 +-29 +31 +-30 +31 +-30 +30 +-29 +-107 +-44 +-97 +-3 +-59 +23 +-40 +33 +-33 +37 +-28 +41 +-21 +44 +-20 +44 +-15 +47 +-13 +47 +-13 +46 +-14 +44 +-16 +43 +-18 +41 +-21 +39 +-23 +38 +-22 +38 +-22 +36 +-25 +34 +-27 +34 +-27 +33 +-27 +34 +-28 +33 +-27 +32 +-26 +35 +-25 +35 +-27 +33 +-28 +32 +-28 +32 +-28 +32 +-28 +33 +-28 +33 +-27 +33 +-26 +34 +-28 +32 +-29 +32 +-28 +32 +-28 +32 +-29 +32 +-28 +32 +-27 +34 +-27 +33 +-28 +32 +-29 +32 +-29 +31 +-29 +32 +-29 +32 +-28 +32 +-27 +33 +-27 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +32 +-29 +32 +-27 +33 +-27 +33 +-29 +32 +-29 +31 +-29 +32 +-29 +32 +-29 +32 +-29 +32 +-27 +33 +-27 +33 +-28 +32 +-29 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +32 +-27 +32 +-27 +33 +-29 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-28 +33 +-28 +32 +-29 +31 +-30 +31 +-29 +31 +-30 +32 +-30 +31 +-30 +31 +-28 +33 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +32 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-28 +32 +-28 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-28 +32 +-28 +32 +-30 +30 +-30 +30 +-30 +30 +-31 +30 +-30 +30 +-30 +31 +-29 +32 +-28 +31 +-30 +30 +-30 +30 +-30 +30 +-30 +30 +-31 +31 +-30 +30 +-28 +32 +-28 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +30 +-30 +32 +-29 +32 +-27 +33 +-26 +33 +-28 +32 +-30 +32 +-29 +31 +-29 +32 +-29 +32 +-29 +31 +-25 +34 +-25 +34 +-28 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +32 +-27 +33 +-26 +33 +-28 +31 +-29 +32 +-28 +32 +-29 +32 +-29 +31 +-29 +32 +-27 +33 +-27 +32 +-28 +32 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-29 +31 +-28 +33 +-27 +33 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +72 +-3 +41 +-26 +29 +-34 +25 +-35 +24 +-35 +26 +-35 +25 +-34 +26 +-34 +27 +-31 +29 +-32 +28 +-32 +28 +-32 +28 +-32 +28 +-32 +29 +-31 +29 +-30 +-108 +-44 +-97 +-3 +-58 +22 +-40 +33 +-33 +36 +-28 +40 +-22 +44 +-19 +45 +-14 +47 +-13 +47 +-13 +46 +-14 +45 +-15 +43 +-18 +41 +-21 +39 +-22 +38 +78 +2 +47 +-21 +33 +-30 +29 +-32 +28 +-32 +28 +-32 +29 +-31 +29 +-31 +30 +-28 +31 +-30 +30 +-30 +30 +-31 +29 +-30 +30 +-31 +30 +-30 +29 +-30 +-107 +-43 +-96 +-3 +-58 +23 +-41 +33 +-33 +37 +-27 +41 +-21 +44 +-19 +45 +-14 +48 +-13 +48 +-12 +47 +-13 +46 +-15 +43 +-18 +42 +-20 +39 +-22 +38 +78 +2 +47 +-21 +33 +-30 +29 +-32 +28 +-32 +29 +-31 +29 +-30 +30 +-30 +30 +-28 +32 +-29 +30 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-29 +32 +-28 +31 +-26 +33 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +30 +-29 +32 +-27 +33 +-28 +31 +-29 +31 +-30 +30 +-30 +30 +-30 +31 +-29 +31 +-29 +-106 +-43 +-95 +-3 +-58 +24 +-39 +34 +-32 +37 +-28 +40 +-22 +44 +-19 +44 +-15 +47 +-13 +47 +-13 +46 +-14 +45 +-16 +43 +-19 +40 +-21 +38 +-23 +36 +-23 +37 +-23 +36 +-25 +34 +-27 +34 +-27 +33 +-28 +33 +-27 +33 +-27 +33 +-26 +34 +-26 +33 +-28 +33 +-28 +33 +-28 +32 +-28 +32 +-28 +33 +-28 +33 +-26 +34 +-26 +34 +-28 +33 +-28 +32 +-29 +32 +-29 +32 +-28 +32 +-29 +32 +-27 +33 +-26 +33 +-28 +32 +-29 +32 +-29 +32 +-29 +32 +-29 +32 +-29 +31 +-27 +32 +-28 +33 +-29 +31 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-29 +32 +-28 +32 +-28 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-27 +33 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +32 +-29 +32 +-27 +32 +-27 +33 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +32 +-28 +33 +-27 +32 +-28 +32 +-30 +31 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-28 +32 +-28 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-27 +32 +-28 +32 +-29 +31 +-29 +30 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +30 +-29 +32 +-28 +32 +-30 +31 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-28 +32 +-27 +33 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +32 +-29 +32 +-28 +32 +-27 +33 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +32 +-28 +33 +-27 +32 +-29 +32 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-28 +33 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +32 +-29 +31 +-27 +33 +-26 +33 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-29 +32 +-29 +32 +-28 +33 +-27 +32 +-29 +32 +-29 +32 +-29 +31 +-30 +32 +-30 +31 +-29 +31 +-28 +33 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-30 +32 +-29 +32 +-27 +33 +-27 +33 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +32 +-29 +32 +-27 +33 +-27 +33 +-29 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-27 +33 +-27 +33 +-29 +31 +-29 +31 +-29 +32 +-29 +32 +-29 +31 +-29 +32 +-27 +33 +-26 +33 +-29 +32 +-28 +32 +-29 +32 +-29 +32 +-29 +31 +-29 +31 +-28 +33 +-27 +32 +-28 +32 +-30 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-28 +33 +-27 +32 +-29 +31 +-29 +30 +-30 +30 +-30 +30 +-31 +30 +-30 +31 +-29 +31 +-28 +31 +-30 +30 +-31 +30 +-31 +29 +-31 +30 +-31 +30 +-31 +30 +-28 +32 +-29 +31 +-30 +30 +-30 +30 +-31 +30 +-30 +30 +-31 +30 +-31 +30 +-28 +32 +-27 +32 +-30 +30 +-30 +30 +-30 +30 +-30 +31 +-30 +30 +-30 +31 +-28 +32 +-27 +33 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +32 +-29 +31 +-27 +33 +-27 +33 +-29 +32 +-28 +31 +-29 +32 +-30 +31 +-29 +31 +-29 +32 +-28 +33 +-27 +33 +-28 +32 +-29 +31 +-29 +31 +-29 +32 +-29 +32 +-28 +32 +-27 +33 +-27 +34 +-27 +32 +-29 +32 +-29 +32 +-29 +32 +-29 +32 +-29 +32 +-27 +34 +-26 +33 +-28 +33 +-28 +32 +-29 +32 +-29 +32 +-29 +32 +-28 +32 +-27 +34 +-26 +33 +-28 +32 +-29 +32 +-29 +32 +-29 +32 +-29 +32 +-29 +32 +-27 +33 +-27 +33 +-29 +31 +-29 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +32 +-28 +32 +-27 +32 +-29 +32 +-29 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-28 +32 +-30 +30 +-30 +31 +-31 +30 +-30 +30 +-30 +30 +-30 +31 +-29 +31 +-28 +32 +-30 +30 +-30 +30 +-31 +30 +-30 +30 +-30 +30 +-29 +31 +-28 +32 +-28 +32 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +30 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-28 +32 +-28 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +32 +-28 +32 +-27 +33 +-27 +33 +-28 +32 +-29 +32 +-29 +31 +-29 +32 +-29 +32 +-28 +32 +-27 +33 +-26 +34 +-28 +32 +-29 +32 +-30 +31 +-29 +31 +-29 +31 +-29 +32 +-25 +34 +-26 +34 +-28 +32 +-30 +30 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-28 +32 +-30 +31 +-30 +30 +-30 +31 +-31 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +32 +-29 +32 +-29 +31 +-29 +30 +-30 +31 +-30 +31 +-29 +31 +-28 +33 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-27 +32 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-28 +33 +-27 +33 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +33 +-27 +33 +-28 +32 +-29 +32 +-30 +31 +-29 +31 +-30 +31 +-29 +31 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-31 +31 +-30 +31 +-29 +31 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +32 +-29 +31 +-30 +32 +-29 +32 +-29 +31 +-27 +33 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +32 +-27 +32 +-27 +32 +-29 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-28 +33 +-29 +30 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-28 +33 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-29 +31 +-27 +32 +-28 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +32 +-30 +31 +-29 +31 +-28 +33 +-28 +32 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-30 +31 +-27 +32 +-27 +33 +-29 +31 +-30 +30 +-30 +31 +-30 +30 +-30 +31 +-29 +31 +-28 +32 +-28 +32 +-29 +31 +-30 +31 +-30 +30 +-29 +31 +-30 +31 +-29 +32 +-27 +33 +-27 +33 +-29 +31 +-29 +31 +-29 +32 +-29 +32 +-29 +31 +-29 +32 +-27 +34 +-26 +33 +-28 +32 +-29 +32 +-29 +32 +-29 +32 +-29 +32 +-29 +32 +-27 +33 +-26 +33 +-29 +32 +-28 +32 +-29 +32 +-30 +31 +-29 +31 +-29 +31 +-28 +33 +-26 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +72 +-3 +41 +-26 +29 +-33 +26 +-35 +25 +-34 +26 +-34 +27 +-33 +27 +-32 +28 +-30 +30 +-31 +29 +-31 +29 +-32 +29 +-31 +30 +-30 +30 +-31 +30 +-30 +-107 +-43 +-97 +-3 +-58 +23 +-40 +33 +-33 +37 +-27 +40 +-21 +44 +-19 +45 +-14 +47 +-13 +48 +-13 +47 +-14 +46 +-15 +44 +-18 +41 +-20 +39 +-22 +38 +-22 +38 +-23 +37 +-25 +35 +-26 +34 +-27 +34 +-27 +34 +-27 +34 +-27 +34 +-25 +34 +-25 +34 +-27 +33 +-28 +32 +-29 +31 +-29 +32 +-29 +31 +-29 +32 +-28 +32 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-28 +32 +-27 +31 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-28 +33 +-28 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-30 +31 +-28 +32 +-28 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +32 +73 +-2 +42 +-26 +29 +-33 +26 +-35 +25 +-35 +26 +-34 +26 +-33 +27 +-32 +29 +-29 +30 +-31 +29 +-31 +29 +-32 +28 +-31 +30 +-31 +30 +-31 +29 +-30 +-108 +-44 +-97 +-4 +-59 +22 +-40 +33 +-33 +37 +-28 +39 +-23 +43 +-21 +44 +-15 +47 +-13 +47 +-13 +46 +-14 +45 +-16 +43 +-19 +40 +-21 +38 +-23 +37 +-22 +37 +-23 +36 +-26 +34 +-27 +34 +-27 +33 +-28 +33 +-27 +33 +-27 +33 +-26 +34 +-26 +34 +-27 +32 +-28 +33 +-29 +32 +-28 +31 +-29 +32 +-29 +32 +73 +-2 +43 +-25 +29 +-34 +26 +-35 +25 +-34 +26 +-34 +27 +-33 +27 +-33 +28 +-29 +30 +-31 +29 +-32 +28 +-32 +28 +-32 +29 +-31 +29 +-31 +29 +-30 +30 +-28 +31 +-29 +31 +-30 +30 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-26 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-26 +34 +-27 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-28 +32 +-26 +34 +-27 +32 +-28 +32 +-29 +32 +-28 +32 +-28 +32 +-28 +32 +-28 +32 +-26 +33 +-27 +33 +-28 +31 +-29 +31 +-28 +32 +-29 +31 +-29 +31 +-28 +31 +-27 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +-106 +-42 +-96 +-3 +-58 +22 +-40 +34 +-32 +38 +-27 +40 +-22 +44 +-20 +44 +-15 +47 +-13 +48 +-13 +47 +-14 +45 +-16 +43 +-18 +41 +-21 +39 +-22 +37 +-22 +38 +-22 +37 +-25 +34 +-26 +34 +-27 +33 +-27 +33 +-28 +33 +-28 +33 +-26 +34 +-25 +35 +-27 +33 +-28 +32 +-28 +32 +-28 +32 +-29 +32 +-28 +32 +73 +-2 +42 +-25 +30 +-33 +26 +-34 +26 +-34 +26 +-34 +27 +-33 +28 +-32 +28 +-30 +30 +-31 +29 +-31 +29 +-32 +29 +-31 +29 +-31 +29 +-30 +30 +-30 +-108 +-44 +-97 +-4 +-59 +22 +-41 +32 +-33 +36 +-29 +39 +-23 +43 +-21 +43 +-16 +46 +-14 +46 +-14 +45 +-15 +43 +-17 +42 +-20 +39 +-22 +37 +-24 +36 +-24 +37 +-23 +36 +-26 +34 +-28 +33 +-27 +33 +-27 +33 +-28 +33 +-28 +33 +-26 +34 +-26 +34 +-27 +33 +-28 +32 +-28 +32 +-28 +32 +-28 +32 +-28 +32 +73 +-2 +43 +-25 +30 +-32 +26 +-34 +25 +-34 +27 +-34 +26 +-33 +28 +-32 +28 +-29 +30 +-30 +30 +-31 +29 +-31 +28 +-31 +30 +-31 +30 +-30 +30 +-30 +31 +-27 +33 +-29 +31 +-29 +30 +-30 +30 +-30 +31 +-30 +30 +-29 +31 +-29 +32 +-27 +32 +-28 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +30 +-29 +31 +-29 +32 +-26 +33 +-28 +31 +-29 +30 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-29 +32 +-26 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-28 +31 +-26 +33 +-28 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-26 +33 +-27 +32 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +31 +-25 +34 +-27 +31 +-29 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-27 +32 +-28 +31 +-30 +30 +-30 +30 +-30 +31 +-29 +31 +-29 +30 +-29 +31 +-26 +33 +-28 +31 +-29 +31 +-30 +30 +-29 +31 +-30 +31 +-29 +31 +-28 +31 +-27 +33 +-28 +32 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +32 +-28 +-106 +-42 +-96 +-2 +-57 +23 +-39 +34 +-32 +38 +-27 +41 +-21 +44 +-19 +45 +-14 +48 +-12 +48 +-13 +48 +-13 +46 +-14 +44 +-17 +42 +-20 +39 +-22 +38 +-22 +38 +-23 +37 +-25 +35 +-26 +35 +-27 +34 +-26 +34 +-27 +33 +-27 +34 +-25 +35 +-25 +34 +-27 +33 +-28 +32 +-29 +31 +-29 +32 +-29 +31 +-29 +32 +-27 +34 +-27 +33 +-28 +32 +-29 +32 +-30 +31 +-29 +32 +-29 +32 +-29 +31 +-27 +33 +-28 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +72 +-3 +42 +-26 +29 +-33 +25 +-35 +25 +-35 +26 +-35 +26 +-33 +27 +-33 +28 +-30 +30 +-31 +29 +-32 +28 +-32 +28 +-32 +28 +-32 +29 +-31 +29 +-30 +30 +-27 +32 +-29 +31 +-30 +30 +-30 +30 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-27 +32 +-28 +31 +-29 +31 +-30 +30 +-29 +31 +-30 +31 +-29 +31 +-28 +31 +-26 +34 +-27 +31 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +32 +-26 +33 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-26 +34 +-27 +32 +-28 +32 +-29 +31 +-29 +31 +-29 +32 +-28 +32 +-29 +32 +-26 +33 +-28 +32 +-28 +32 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-28 +-106 +-42 +-96 +-2 +-57 +23 +-39 +34 +-33 +37 +-28 +40 +-22 +44 +-19 +45 +-15 +47 +-13 +47 +-13 +46 +-14 +45 +-16 +43 +-18 +40 +-21 +38 +-23 +37 +-23 +37 +-23 +36 +-26 +34 +-27 +33 +-28 +33 +-27 +33 +-28 +32 +-28 +32 +-27 +34 +-26 +34 +-28 +32 +-29 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +33 +-28 +33 +-28 +32 +-29 +31 +-29 +31 +-30 +32 +-29 +32 +-29 +32 +-28 +33 +-27 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +32 +-30 +31 +-29 +31 +73 +-3 +42 +-26 +30 +-33 +25 +-35 +25 +-34 +27 +-33 +27 +-33 +28 +-32 +28 +-30 +30 +-31 +29 +-31 +29 +-31 +29 +-31 +29 +-31 +30 +-30 +30 +-30 +-107 +-44 +-97 +-3 +-59 +22 +-40 +33 +-33 +37 +-28 +40 +-22 +44 +-20 +44 +-15 +47 +-13 +47 +-13 +46 +-14 +44 +-16 +42 +-19 +40 +-22 +38 +-23 +36 +78 +1 +46 +-22 +32 +-30 +28 +-32 +27 +-32 +28 +-32 +28 +-32 +28 +-31 +30 +-29 +31 +-30 +30 +-30 +30 +-31 +30 +-30 +30 +-31 +29 +-30 +30 +-30 +-107 +-44 +-97 +-4 +-59 +23 +-40 +33 +-33 +37 +-28 +40 +-22 +44 +-19 +45 +-15 +47 +-13 +48 +-13 +46 +-14 +46 +-15 +44 +-18 +41 +-21 +39 +-22 +38 +78 +2 +47 +-21 +33 +-30 +28 +-32 +28 +-33 +29 +-32 +29 +-31 +29 +-30 +30 +-28 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +32 +-28 +-106 +-43 +-96 +-3 +-58 +23 +-39 +34 +-32 +37 +-27 +41 +-22 +44 +-19 +45 +-14 +48 +-13 +48 +-13 +46 +-14 +45 +-16 +43 +-18 +40 +-21 +39 +-22 +37 +-22 +38 +-22 +37 +-25 +34 +-27 +34 +-27 +34 +-27 +33 +-27 +33 +-27 +33 +-27 +34 +-26 +34 +-28 +31 +-28 +32 +-29 +32 +-28 +32 +-29 +32 +-29 +32 +-27 +32 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-28 +33 +-27 +33 +-29 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-28 +32 +-27 +32 +-29 +32 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +73 +-3 +42 +-25 +29 +-33 +26 +-35 +25 +-34 +26 +-34 +27 +-33 +28 +-32 +28 +-29 +31 +-30 +30 +-30 +29 +-31 +29 +-31 +30 +-30 +31 +-29 +31 +-29 +31 +-26 +33 +-28 +31 +-29 +31 +-30 +31 +-30 +30 +-30 +30 +-30 +30 +-30 +31 +-27 +32 +-28 +31 +-29 +31 +-29 +30 +-30 +30 +-30 +31 +-29 +31 +-29 +-107 +-44 +-96 +-2 +-58 +24 +-39 +33 +-33 +37 +-28 +40 +-21 +43 +-19 +45 +-15 +47 +-13 +47 +-13 +46 +-15 +45 +-16 +43 +-18 +41 +-21 +38 +-23 +37 +-22 +38 +-23 +37 +-26 +34 +-27 +33 +-28 +33 +-28 +33 +-28 +33 +-28 +33 +-27 +33 +-26 +33 +-28 +32 +-29 +32 +-29 +31 +-29 +31 +-29 +32 +-29 +32 +-27 +33 +-27 +33 +-28 +32 +-29 +31 +-29 +31 +-30 +32 +-29 +31 +-29 +32 +-27 +34 +-26 +33 +-29 +32 +-29 +32 +-29 +31 +-29 +32 +-30 +31 +-29 +31 +-27 +33 +-27 +33 +-28 +32 +-29 +32 +-30 +32 +-29 +31 +-29 +31 +-30 +32 +-27 +32 +-27 +32 +-28 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-27 +33 +-27 +32 +-29 +32 +-29 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-28 +32 +-28 +32 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +32 +-27 +33 +-27 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +32 +-29 +32 +-28 +32 +-27 +33 +-27 +33 +-28 +31 +-29 +32 +-29 +31 +-29 +31 +-29 +32 +-29 +32 +-27 +33 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-30 +32 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +32 +-29 +31 +-30 +30 +-30 +31 +-30 +31 +-28 +32 +-28 +33 +-29 +31 +-30 +30 +-30 +30 +-30 +30 +-30 +30 +-30 +31 +-28 +32 +-28 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-28 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +32 +-28 +33 +-27 +33 +-28 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-26 +34 +-26 +33 +-28 +31 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-28 +32 +-28 +32 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-30 +30 +-30 +32 +-29 +31 +-29 +31 +-28 +33 +-27 +33 +-28 +31 +-29 +32 +-29 +32 +-29 +31 +-29 +32 +-29 +32 +74 +-2 +43 +-25 +29 +-33 +25 +-35 +25 +-34 +26 +-34 +26 +-33 +28 +-32 +28 +-29 +30 +-31 +29 +-32 +29 +-32 +29 +-31 +29 +-31 +29 +-31 +30 +-30 +-107 +-43 +-97 +-3 +-58 +24 +-39 +34 +-32 +37 +-28 +40 +-22 +43 +-19 +44 +-15 +47 +-13 +47 +-13 +46 +-14 +45 +-16 +44 +-18 +40 +-21 +39 +-23 +38 +79 +2 +47 +-21 +32 +-30 +29 +-32 +28 +-31 +29 +-31 +29 +-31 +29 +-31 +29 +-28 +32 +-29 +31 +-30 +30 +-30 +30 +-29 +31 +-30 +31 +-29 +31 +-29 +-107 +-44 +-96 +-3 +-58 +23 +-40 +33 +-33 +37 +-27 +41 +-22 +44 +-19 +45 +-15 +48 +-13 +47 +-13 +47 +-13 +46 +-15 +43 +-18 +41 +-21 +39 +-22 +38 +79 +3 +46 +-22 +32 +-30 +29 +-32 +28 +-32 +28 +-32 +29 +-31 +29 +-31 +29 +-29 +31 +-30 +30 +-30 +30 +-30 +30 +-31 +29 +-30 +30 +-31 +30 +-31 +30 +-27 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +30 +-30 +30 +-30 +30 +-29 +31 +-27 +32 +-29 +30 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +-107 +-42 +-96 +-3 +-57 +24 +-39 +34 +-32 +38 +-27 +40 +-21 +44 +-19 +45 +-14 +47 +-13 +47 +-13 +47 +-13 +45 +-15 +43 +-18 +41 +-20 +38 +-23 +37 +-23 +38 +-23 +36 +-25 +35 +-27 +34 +-27 +33 +-27 +34 +-27 +33 +-27 +33 +-26 +34 +-26 +34 +-27 +32 +-28 +32 +-29 +32 +-29 +31 +-28 +32 +-29 +32 +-27 +33 +-26 +34 +-28 +31 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-30 +31 +-28 +32 +-27 +32 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-28 +32 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-28 +33 +-27 +32 +-29 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +33 +-29 +32 +-29 +31 +-30 +31 +-29 +32 +-28 +32 +-29 +32 +-27 +33 +-27 +33 +-28 +32 +-29 +32 +-29 +32 +-29 +32 +-29 +32 +-28 +32 +-26 +34 +-27 +33 +-28 +32 +-29 +32 +-29 +32 +-29 +31 +-29 +32 +-29 +32 +-27 +33 +-26 +33 +-29 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-28 +33 +-27 +32 +-29 +31 +-29 +31 +-30 +30 +-30 +31 +-29 +31 +-30 +31 +-28 +32 +-28 +32 +-30 +31 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-27 +32 +-29 +32 +-30 +31 +-30 +31 +-30 +31 +-30 +30 +-30 +30 +-28 +32 +-28 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-28 +33 +-27 +33 +-28 +31 +-30 +31 +-29 +30 +-30 +31 +-30 +31 +-29 +30 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-28 +33 +-27 +33 +-29 +30 +-30 +32 +-30 +31 +-29 +31 +-30 +32 +-29 +32 +-27 +33 +-26 +33 +-29 +32 +-29 +31 +-29 +32 +-29 +31 +-29 +32 +-28 +32 +-27 +33 +-27 +33 +-28 +32 +-29 +31 +-29 +31 +-29 +32 +-29 +32 +-29 +32 +-27 +33 +-27 +33 +-28 +31 +-29 +32 +-29 +31 +-28 +32 +-29 +31 +-29 +32 +-28 +32 +-27 +33 +-29 +32 +-29 +32 +-29 +32 +-29 +31 +-29 +31 +-29 +32 +-27 +33 +-27 +32 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-28 +33 +-27 +33 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-29 +31 +-28 +32 +-28 +32 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +32 +-27 +32 +-28 +32 +-30 +31 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-27 +33 +-27 +32 +-29 +30 +-30 +30 +-31 +31 +-30 +30 +-30 +31 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-29 +31 +-28 +32 +-28 +32 +-29 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-27 +32 +-27 +33 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-28 +32 +-27 +32 +-29 +31 +-29 +32 +-29 +31 +-29 +32 +-30 +31 +-29 +31 +-27 +33 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-29 +32 +-29 +32 +-29 +32 +-27 +32 +-28 +33 +-29 +32 +-28 +31 +-29 +32 +-29 +32 +-29 +32 +-29 +32 +-27 +33 +-27 +33 +-28 +32 +-29 +31 +-30 +31 +-29 +31 +-30 +31 +-29 +32 +-27 +32 +-27 +33 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-28 +31 +-28 +33 +-29 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-28 +33 +-27 +32 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-28 +33 +-27 +32 +-28 +32 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +33 +-27 +33 +-29 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +33 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +32 +-29 +32 +-27 +33 +-27 +32 +-29 +31 +-30 +31 +-30 +30 +-29 +31 +-30 +31 +-29 +31 +-28 +32 +-27 +33 +-29 +30 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-27 +33 +-27 +32 +-30 +31 +-30 +30 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-28 +32 +-28 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +30 +-30 +30 +-30 +32 +-27 +32 +-27 +33 +-29 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-28 +33 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-28 +32 +-28 +32 +-29 +32 +-29 +31 +-29 +31 +-29 +32 +-29 +32 +-29 +32 +-27 +33 +-27 +33 +-29 +32 +-29 +31 +-29 +32 +-29 +32 +-29 +32 +-28 +32 +-27 +33 +-27 +33 +-28 +31 +-29 +32 +-29 +31 +-29 +31 +-29 +32 +-29 +31 +-27 +33 +-27 +34 +-28 +32 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-29 +32 +-27 +33 +-26 +33 +-28 +32 +-29 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-27 +32 +-28 +32 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-28 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-28 +32 +-29 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-29 +32 +-28 +33 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +32 +-29 +32 +-29 +31 +-28 +32 +-28 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +33 +-29 +31 +-29 +32 +-29 +31 +-30 +32 +-29 +32 +-29 +31 +-27 +33 +-27 +33 +-28 +32 +-29 +32 +-29 +31 +-29 +32 +-29 +31 +-29 +32 +-27 +33 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +32 +-29 +31 +-28 +33 +-27 +33 +-28 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +32 +-29 +32 +-27 +33 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +33 +-27 +33 +-29 +31 +-30 +30 +-29 +32 +-29 +32 +-29 +31 +-29 +32 +-27 +33 +-27 +33 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-27 +32 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +72 +-3 +42 +-26 +29 +-33 +25 +-35 +25 +-35 +26 +-34 +26 +-33 +27 +-33 +28 +-29 +30 +-31 +29 +-32 +29 +-32 +28 +-31 +29 +-31 +30 +-30 +30 +-30 +-107 +-44 +-97 +-3 +-58 +23 +-40 +34 +-32 +37 +-27 +41 +-21 +44 +-20 +44 +-15 +47 +-13 +47 +-13 +46 +-14 +45 +-16 +43 +-18 +41 +-20 +38 +-23 +38 +-22 +38 +-22 +37 +-25 +35 +-26 +35 +-26 +34 +-27 +34 +-27 +34 +-26 +34 +-26 +35 +-25 +35 +-27 +33 +-28 +32 +-29 +32 +-28 +32 +-28 +32 +-29 +32 +-27 +33 +-27 +33 +-29 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-28 +32 +-28 +32 +-29 +30 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-28 +32 +-30 +31 +-30 +30 +-30 +30 +-30 +30 +-30 +30 +-30 +30 +-28 +32 +-28 +32 +-29 +30 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +73 +-3 +42 +-25 +29 +-34 +25 +-35 +25 +-34 +26 +-33 +27 +-33 +28 +-32 +28 +-30 +30 +-31 +29 +-31 +29 +-32 +29 +-31 +30 +-31 +29 +-30 +30 +-30 +-107 +-44 +-97 +-3 +-59 +23 +-40 +32 +-33 +37 +-28 +40 +-23 +43 +-20 +44 +-15 +47 +-13 +47 +-13 +46 +-14 +45 +-16 +43 +-18 +41 +-21 +38 +-23 +37 +-23 +37 +-23 +37 +-26 +35 +-27 +33 +-27 +33 +-27 +33 +-27 +33 +-27 +33 +-26 +34 +-25 +34 +-27 +33 +-29 +32 +-29 +32 +-29 +32 +-29 +32 +-29 +32 +73 +-2 +42 +-26 +30 +-32 +27 +-34 +25 +-34 +26 +-34 +27 +-32 +27 +-32 +29 +-29 +30 +-30 +29 +-31 +29 +-31 +29 +-31 +30 +-30 +30 +-30 +31 +-30 +31 +-27 +32 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-30 +30 +-30 +30 +-29 +31 +-27 +32 +-29 +31 +-29 +30 +-30 +30 +-30 +31 +-29 +30 +-30 +31 +-30 +31 +-27 +32 +-28 +31 +-29 +31 +-30 +30 +-30 +30 +-30 +31 +-29 +31 +-29 +31 +-27 +33 +-27 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-26 +33 +-28 +32 +-29 +31 +-30 +31 +-29 +32 +-29 +31 +-29 +32 +-28 +32 +-26 +33 +-28 +32 +-29 +31 +-29 +31 +-29 +32 +-28 +32 +-28 +32 +-28 +-106 +-42 +-95 +-3 +-58 +24 +-39 +34 +-31 +38 +-26 +41 +-21 +44 +-19 +45 +-15 +47 +-13 +47 +-13 +46 +-14 +45 +-16 +43 +-19 +41 +-21 +39 +-23 +37 +-22 +38 +-22 +36 +-26 +34 +-27 +33 +-27 +33 +-28 +33 +-28 +33 +-28 +32 +-27 +34 +-26 +33 +-28 +32 +-29 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +73 +-3 +42 +-25 +28 +-33 +25 +-35 +25 +-35 +25 +-34 +26 +-34 +27 +-32 +28 +-30 +30 +-31 +28 +-32 +28 +-32 +29 +-32 +29 +-31 +29 +-30 +29 +-30 +-108 +-44 +-96 +-3 +-58 +23 +-39 +33 +-32 +38 +-28 +40 +-21 +44 +-19 +45 +-15 +47 +-12 +48 +-12 +48 +-13 +46 +-15 +43 +-17 +43 +-19 +40 +-21 +38 +-21 +39 +-22 +38 +-25 +35 +-26 +35 +-27 +34 +-26 +34 +-27 +34 +-27 +34 +-26 +35 +-25 +34 +-27 +34 +-28 +32 +-28 +32 +-28 +32 +-29 +32 +-29 +31 +73 +-3 +42 +-25 +30 +-33 +25 +-35 +25 +-34 +26 +-34 +26 +-33 +27 +-32 +28 +-30 +29 +-31 +29 +-32 +29 +-32 +28 +-31 +28 +-32 +29 +-31 +29 +-30 +30 +-28 +32 +-29 +30 +-30 +30 +-31 +30 +-30 +30 +-30 +30 +-30 +31 +-29 +31 +-27 +33 +-28 +31 +-29 +31 +-30 +30 +-29 +31 +-29 +31 +-29 +31 +-28 +31 +-26 +33 +-27 +31 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-26 +34 +-27 +32 +-28 +32 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-28 +32 +-26 +34 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +30 +-29 +32 +-28 +31 +-26 +33 +-28 +32 +-28 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-25 +33 +-28 +31 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-29 +31 +-29 +31 +-27 +32 +-28 +31 +-29 +30 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-27 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +30 +-29 +31 +-27 +33 +-28 +31 +-29 +31 +-29 +31 +-29 +30 +-30 +31 +-29 +31 +-29 +-106 +-43 +-96 +-3 +-58 +23 +-39 +33 +-32 +37 +-28 +41 +-21 +44 +-19 +44 +-16 +47 +-13 +47 +-13 +46 +-14 +45 +-15 +43 +-19 +41 +-20 +39 +-22 +38 +-23 +37 +-23 +37 +-25 +35 +-27 +34 +-27 +33 +-27 +33 +-27 +34 +-27 +33 +-26 +35 +-25 +34 +-27 +33 +-27 +32 +-28 +32 +-29 +32 +-29 +32 +-28 +32 +-26 +34 +-26 +33 +-29 +31 +-30 +31 +-30 +31 +-29 +32 +-29 +31 +-29 +31 +-27 +33 +-27 +33 +-28 +31 +-29 +32 +-30 +32 +-29 +31 +-29 +32 +-29 +31 +73 +-2 +42 +-25 +30 +-33 +26 +-34 +26 +-34 +26 +-33 +27 +-33 +27 +-32 +28 +-30 +31 +-30 +29 +-31 +29 +-32 +28 +-31 +30 +-30 +30 +-30 +30 +-30 +31 +-27 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +30 +-31 +30 +-30 +30 +-29 +30 +-27 +32 +-29 +31 +-30 +30 +-30 +30 +-30 +30 +-30 +30 +-30 +31 +-29 +31 +-27 +32 +-29 +31 +-29 +31 +-30 +30 +-29 +31 +-30 +31 +-29 +31 +-28 +31 +-26 +33 +-28 +31 +-29 +30 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +31 +-26 +33 +-28 +31 +-29 +31 +-29 +31 +-30 +31 +-29 +30 +-29 +31 +-29 +31 +-26 +32 +-28 +31 +-30 +31 +-30 +30 +-30 +30 +-30 +30 +-30 +30 +-29 +-107 +-43 +-96 +-3 +-59 +23 +-40 +33 +-33 +37 +-28 +40 +-22 +43 +-20 +43 +-16 +46 +-14 +47 +-13 +46 +-14 +44 +-17 +43 +-18 +40 +-21 +38 +-23 +37 +-22 +37 +-23 +36 +-26 +34 +-27 +33 +-28 +33 +-28 +33 +-28 +33 +-28 +33 +-27 +34 +-26 +33 +-28 +32 +-29 +32 +-29 +31 +-28 +32 +-29 +31 +-29 +31 +-28 +33 +-27 +32 +-29 +31 +-29 +30 +-30 +31 +-29 +32 +-29 +31 +-29 +32 +-28 +32 +-27 +33 +-29 +32 +-29 +32 +-28 +32 +-29 +32 +-29 +32 +-28 +32 +73 +-2 +43 +-25 +30 +-33 +26 +-34 +25 +-34 +27 +-34 +27 +-32 +28 +-32 +28 +-29 +31 +-30 +29 +-31 +30 +-31 +29 +-31 +29 +-31 +30 +-30 +30 +-30 +-107 +-44 +-97 +-4 +-59 +21 +-41 +33 +-33 +36 +-28 +39 +-22 +44 +-19 +45 +-15 +46 +-13 +47 +-13 +46 +-14 +45 +-16 +43 +-18 +40 +-21 +39 +-22 +38 +78 +2 +47 +-21 +32 +-30 +29 +-32 +28 +-31 +29 +-31 +29 +-31 +30 +-30 +30 +-28 +32 +-29 +30 +-29 +31 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-28 +-106 +-42 +-96 +-2 +-57 +23 +-39 +34 +-32 +38 +-26 +41 +-21 +45 +-19 +45 +-15 +47 +-12 +49 +-12 +47 +-13 +45 +-15 +44 +-18 +41 +-20 +39 +-22 +38 +78 +3 +47 +-21 +33 +-30 +29 +-32 +28 +-32 +29 +-31 +29 +-31 +29 +-30 +30 +-28 +31 +-30 +30 +-29 +31 +-30 +30 +-30 +30 +-30 +30 +-30 +30 +-30 +-107 +-44 +-97 +-3 +-58 +23 +-40 +33 +-33 +37 +-28 +40 +-22 +43 +-20 +44 +-15 +47 +-13 +47 +-13 +46 +-14 +45 +-16 +44 +-18 +40 +-21 +39 +-23 +37 +-22 +37 +-23 +37 +-26 +35 +-27 +34 +-27 +34 +-27 +34 +-27 +33 +-27 +33 +-26 +34 +-26 +34 +-27 +33 +-28 +32 +-29 +32 +-29 +31 +-29 +32 +-29 +32 +-27 +33 +-27 +33 +-29 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +31 +-28 +33 +-27 +33 +-28 +32 +-29 +31 +-30 +32 +-29 +31 +-29 +31 +-29 +32 +-27 +33 +-27 +33 +-28 +32 +-28 +32 +-29 +31 +-29 +32 +-29 +32 +-28 +32 +72 +-3 +42 +-26 +29 +-33 +26 +-35 +25 +-34 +26 +-34 +26 +-33 +27 +-32 +28 +-30 +30 +-31 +28 +-32 +29 +-32 +29 +-31 +29 +-31 +29 +-31 +30 +-31 +30 +-28 +31 +-29 +31 +-30 +29 +-31 +30 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-27 +32 +-29 +30 +-30 +31 +-31 +30 +-30 +30 +-30 +30 +-30 +31 +-29 +-106 +-43 +-97 +-4 +-58 +23 +-40 +33 +-32 +37 +-27 +40 +-22 +44 +-19 +45 +-15 +47 +-13 +47 +-13 +47 +-14 +44 +-16 +43 +-18 +42 +-20 +39 +-22 +38 +-22 +38 +-21 +38 +-24 +36 +-26 +35 +-26 +34 +-26 +34 +-27 +34 +-27 +33 +-25 +35 +-25 +34 +-27 +32 +-28 +32 +-29 +32 +-29 +32 +-28 +32 +-28 +32 +-27 +34 +-27 +32 +-28 +33 +-28 +32 +-29 +31 +-29 +32 +-29 +32 +-29 +31 +-27 +33 +-27 +33 +-29 +31 +-29 +32 +-29 +32 +-29 +31 +-30 +31 +-30 +32 +-27 +33 +-26 +33 +-29 +31 +-30 +31 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-27 +32 +-27 +33 +-28 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-27 +33 +-27 +33 +-29 +31 +-29 +31 +-30 +31 +-31 +31 +-29 +31 +-29 +31 +-28 +32 +-28 +31 +-30 +31 +-30 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-28 +32 +-27 +33 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-28 +32 +-28 +31 +-30 +31 +-30 +30 +-30 +30 +-30 +31 +-31 +30 +-30 +30 +-28 +32 +-28 +32 +-29 +31 +-30 +31 +-30 +30 +-29 +31 +-30 +31 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +32 +-27 +33 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +32 +-29 +31 +-28 +32 +-28 +33 +-29 +31 +-29 +31 +-30 +32 +-29 +31 +-29 +31 +-29 +32 +-27 +33 +-27 +33 +-29 +32 +-29 +32 +-29 +31 +-29 +32 +-30 +31 +-29 +31 +-27 +33 +-26 +33 +-28 +32 +-29 +31 +-30 +31 +-29 +32 +-28 +32 +-28 +32 +-25 +35 +-25 +34 +-28 +32 +-29 +31 +-30 +31 +-29 +31 +-29 +32 +-29 +31 +-27 +33 +-27 +34 +-28 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-29 +30 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-28 +32 +-29 +30 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-29 +32 +73 +-3 +42 +-26 +29 +-34 +25 +-36 +25 +-35 +26 +-34 +26 +-34 +27 +-33 +28 +-30 +30 +-31 +29 +-32 +29 +-32 +29 +-31 +29 +-32 +29 +-30 +29 +-30 +-108 +-44 +-97 +-4 +-59 +22 +-41 +33 +-33 +37 +-27 +40 +-21 +43 +-20 +45 +-15 +47 +-12 +47 +-13 +46 +-15 +44 +-16 +43 +-18 +41 +-21 +38 +-23 +37 +78 +2 +46 +-22 +32 +-30 +29 +-32 +28 +-32 +28 +-32 +29 +-32 +29 +-31 +29 +-28 +31 +-30 +30 +-30 +30 +-31 +30 +-30 +30 +-30 +30 +-30 +31 +-29 +-107 +-44 +-97 +-3 +-58 +23 +-39 +33 +-33 +38 +-27 +41 +-21 +44 +-19 +45 +-15 +48 +-12 +48 +-12 +47 +-13 +45 +-15 +43 +-18 +41 +-21 +39 +-22 +37 +78 +2 +46 +-21 +33 +-30 +29 +-32 +28 +-32 +28 +-32 +28 +-31 +29 +-31 +30 +-29 +31 +-29 +30 +-30 +30 +-31 +30 +-30 +30 +-30 +30 +-30 +31 +-30 +31 +-27 +32 +-29 +31 +-30 +31 +-30 +30 +-29 +31 +-30 +30 +-30 +31 +-29 +31 +-27 +33 +-28 +31 +-29 +31 +-30 +31 +-29 +30 +-29 +31 +-29 +31 +-28 +-106 +-42 +-96 +-3 +-57 +23 +-39 +34 +-32 +38 +-27 +40 +-21 +44 +-19 +45 +-14 +47 +-12 +48 +-13 +47 +-14 +45 +-15 +44 +-18 +42 +-20 +39 +-22 +38 +-22 +38 +-23 +37 +-25 +36 +-26 +35 +-26 +34 +-27 +34 +-27 +33 +-27 +33 +-26 +35 +-26 +34 +-27 +32 +-28 +32 +-29 +32 +-28 +31 +-29 +32 +-29 +31 +-27 +33 +-27 +33 +-29 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-28 +32 +-29 +30 +-30 +31 +-30 +31 +-29 +31 +-29 +31 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-29 +31 +-29 +31 +-29 +32 +-29 +32 +-29 +31 +-28 +33 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-29 +32 +-30 +31 +-27 +32 +-27 +33 +-29 +31 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-27 +33 +-27 +32 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +32 +-28 +33 +-26 +33 +-28 +32 +-29 +32 +-29 +31 +-29 +31 +-29 +32 +-29 +32 +-27 +33 +-26 +33 +-28 +32 +-29 +32 +-29 +31 +-29 +32 +-29 +32 +-29 +31 +-27 +33 +-27 +32 +-28 +31 +-29 +32 +-30 +30 +-29 +31 +-29 +32 +-29 +31 +-28 +32 +-28 +33 +-29 +31 +-29 +31 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +31 +-30 +31 +-29 +31 +-29 +32 +-29 +31 +-28 +33 +-27 +33 +-28 +31 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +32 +-26 +33 +-27 +33 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-29 +31 +-28 +32 +-28 +32 +-29 +31 +-30 +31 +-30 +31 +-30 +30 +-30 +31 +-30 +31 +-28 +32 +-28 +32 +-30 +30 +-30 +30 +-30 +30 +-30 +30 +-30 +31 +-29 +32 +-28 +32 +-27 +32 +-29 +32 +-29 +31 +-29 +30 +-30 +31 +-29 +32 +-29 +31 +-27 +33 +-27 +33 +-29 +31 +-29 +32 +-29 +32 +-29 +32 +-29 +31 +-29 +32 +-27 +33 +-27 +33 +-29 +32 +-29 +32 +-29 +32 +-28 +32 +-29 +32 +-29 +32 +-27 +33 +-27 +33 +-29 +31 +-29 +32 +-29 +31 +-29 +31 +-30 +31 +-29 +31 +-27 +32 +-28 +33 +-29 +31 +-30 +31 +-30 +31 +-30 +31 +-30 +31 +-31 +31 +-28 +32 +-27 +32 +-29 +31 +-30 +30 +-30 +30 +-31 +30 +-30 +30 +-30 +30 +-29 +32 +-28 +32 +-29 +31 +-30 +31 +-30 diff --git a/traces/lf_t5577_noralsy.pm3 b/traces/lf_t5577_noralsy.pm3 new file mode 100644 index 000000000..215db330b --- /dev/null +++ b/traces/lf_t5577_noralsy.pm3 @@ -0,0 +1,10000 @@ +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +94 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +94 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +94 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +121 +113 +104 +98 +91 +84 +78 +73 +68 +63 +59 +3 +-79 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +55 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +119 +111 +103 +96 +89 +82 +77 +72 +67 +62 +58 +53 +49 +46 +43 +39 +37 +33 +31 +29 +27 +24 +23 +21 +19 +18 +17 +15 +-29 +-108 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +38 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +116 +107 +101 +93 +87 +81 +76 +70 +65 +61 +57 +52 +49 +45 +42 +39 +37 +34 +32 +30 +27 +26 +24 +22 +21 +19 +17 +16 +-29 +-108 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-112 +-104 +23 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +123 +114 +107 +99 +92 +86 +80 +74 +17 +-67 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +101 +9 +-73 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +91 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-113 +-106 +-98 +-91 +-85 +41 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +118 +110 +102 +95 +88 +82 +75 +18 +-66 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +102 +10 +-72 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-115 +-106 +-99 +-93 +-86 +41 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +68 +-20 +-99 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-107 +113 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +120 +26 +-58 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +98 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +94 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +94 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +121 +112 +105 +99 +91 +85 +79 +74 +68 +64 +58 +3 +-79 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-115 +-107 +-100 +28 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +64 +-24 +-102 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-110 +110 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +119 +25 +-59 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +97 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +96 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +121 +112 +105 +97 +90 +85 +78 +73 +68 +63 +58 +3 +-80 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-116 +-108 +-101 +26 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +115 +107 +100 +93 +86 +80 +74 +18 +-66 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-113 +-105 +-98 +29 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +65 +-22 +-101 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-109 +111 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +117 +108 +100 +93 +88 +81 +75 +71 +66 +61 +7 +-76 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +54 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +99 +7 +-74 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +90 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +111 +18 +-65 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +94 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-114 +-105 +-98 +-91 +-85 +41 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +68 +-20 +-99 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-107 +112 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +120 +26 +-58 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +97 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +120 +112 +105 +97 +90 +85 +78 +73 +68 +64 +59 +4 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-107 +-100 +27 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +64 +-23 +-102 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-110 +111 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +119 +25 +-59 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +96 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +120 +113 +105 +97 +91 +85 +78 +72 +68 +63 +58 +4 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-107 +-100 +27 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +64 +-24 +-102 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-110 +111 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +120 +26 +-58 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +96 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +94 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +96 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +94 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +94 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +121 +112 +104 +98 +91 +84 +78 +73 +68 +63 +59 +3 +-80 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-115 +-107 +-100 +26 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +63 +-24 +-103 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-109 +111 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +119 +25 +-59 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +96 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +121 +113 +105 +98 +90 +85 +79 +73 +68 +64 +59 +4 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-107 +-100 +28 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +64 +-23 +-102 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-109 +111 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +119 +25 +-59 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +96 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +121 +113 +105 +97 +91 +85 +78 +74 +68 +62 +58 +3 +-79 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +54 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +100 +8 +-74 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-115 +-108 +-100 +-93 +-87 +39 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +67 +-20 +-99 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-108 +111 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +116 +106 +100 +92 +87 +80 +75 +69 +64 +60 +4 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +54 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +100 +8 +-74 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-114 +-107 +-100 +-92 +-86 +40 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +68 +-20 +-99 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-108 +113 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +119 +25 +-59 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +96 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +120 +112 +105 +98 +90 +84 +78 +73 +67 +63 +59 +3 +-80 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +54 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +99 +7 +-75 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +90 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +112 +19 +-64 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-114 +-106 +-99 +-92 +-86 +40 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +67 +-21 +-99 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-108 +112 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +120 +26 +-58 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +97 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +115 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +96 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +94 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +94 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +94 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +94 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +94 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +121 +112 +104 +97 +90 +84 +78 +73 +66 +62 +59 +3 +-80 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +54 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +120 +111 +103 +97 +90 +84 +78 +72 +67 +63 +59 +54 +50 +47 +44 +40 +38 +34 +32 +31 +29 +26 +25 +22 +21 +19 +17 +15 +-28 +-108 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +39 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +116 +108 +100 +92 +87 +80 +74 +69 +65 +60 +56 +52 +49 +45 +42 +39 +36 +33 +31 +28 +27 +25 +23 +21 +20 +17 +17 +15 +-29 +-108 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-114 +-105 +22 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +115 +107 +99 +92 +86 +80 +74 +18 +-66 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +102 +10 +-73 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +91 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +19 +-64 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-114 +-106 +-99 +-92 +-86 +41 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +118 +110 +102 +95 +89 +83 +77 +20 +-64 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +60 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +103 +10 +-72 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-115 +-107 +-100 +-93 +-87 +40 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +67 +-21 +-100 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-109 +111 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +119 +25 +-58 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +97 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +121 +113 +105 +98 +90 +84 +78 +73 +68 +63 +59 +2 +-80 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-116 +-108 +-100 +26 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +64 +-24 +-102 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-109 +110 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +119 +25 +-59 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +97 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +120 +112 +104 +97 +90 +84 +77 +72 +67 +62 +58 +3 +-79 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-107 +-99 +27 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +116 +108 +100 +94 +87 +81 +75 +19 +-65 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-112 +-104 +-98 +30 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +65 +-22 +-101 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-109 +111 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +115 +108 +101 +93 +86 +80 +75 +69 +65 +60 +6 +-76 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +54 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +100 +8 +-74 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +91 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +111 +18 +-65 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +94 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +112 +19 +-64 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +93 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +94 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-114 +-106 +-99 +-91 +-85 +41 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +68 +-20 +-99 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-107 +113 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +120 +26 +-58 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +97 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +94 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +94 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +120 +112 +104 +97 +90 +84 +78 +72 +67 +63 +58 +3 +-79 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-116 +-108 +-100 +27 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +64 +-23 +-102 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-110 +110 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +118 +24 +-59 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +97 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +122 +114 +106 +98 +91 +85 +79 +74 +69 +64 +59 +4 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-108 +-100 +27 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +63 +-24 +-102 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-111 +110 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +119 +25 +-59 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +97 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +94 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +121 +113 +104 +97 +90 +84 +78 +73 +68 +64 +59 +3 +-80 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-115 +-107 +-99 +28 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +64 +-24 +-102 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-110 +110 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +119 +25 +-59 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +96 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +120 +112 +105 +98 +90 +84 +79 +74 +68 +63 +59 +4 +-79 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-115 +-107 +-99 +28 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +64 +-24 +-102 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-109 +111 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +119 +25 +-59 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +96 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +121 +113 +105 +98 +91 +85 +78 +73 +68 +64 +59 +3 +-79 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +54 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +101 +8 +-73 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-115 +-107 +-100 +-93 +-87 +39 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +66 +-21 +-100 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-109 +111 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +117 +108 +100 +94 +88 +81 +75 +70 +66 +61 +5 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +56 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +102 +9 +-73 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-108 +-101 +-94 +-87 +40 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +67 +-21 +-100 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-108 +111 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +119 +25 +-59 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +97 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-64 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +94 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +120 +112 +105 +97 +91 +84 +79 +74 +68 +63 +59 +4 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +54 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +99 +8 +-74 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +91 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +112 +19 +-64 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-113 +-105 +-98 +-91 +-85 +42 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +68 +-20 +-99 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-107 +112 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +119 +25 +-59 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +96 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +94 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-64 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +94 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +94 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +94 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +115 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +121 +112 +104 +98 +90 +85 +78 +72 +67 +63 +58 +2 +-80 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +55 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +119 +110 +103 +95 +89 +83 +77 +71 +66 +62 +57 +53 +50 +45 +42 +40 +38 +34 +32 +29 +27 +25 +24 +21 +20 +19 +17 +16 +-29 +-108 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +39 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +117 +108 +101 +93 +87 +81 +75 +70 +65 +60 +56 +52 +49 +45 +42 +38 +36 +33 +31 +28 +26 +25 +23 +21 +20 +17 +16 +15 +-30 +-108 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-113 +-106 +22 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +123 +114 +107 +99 +93 +86 +80 +74 +17 +-67 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +102 +10 +-72 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +91 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-113 +-106 +-98 +-92 +-85 +41 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +118 +110 +102 +95 +89 +83 +76 +20 +-64 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +60 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +102 +10 +-72 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-107 +-100 +-93 +-87 +39 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +67 +-21 +-100 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-109 +111 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +119 +25 +-59 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +98 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +115 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +94 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +121 +112 +105 +98 +90 +84 +78 +73 +68 +64 +58 +3 +-80 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-107 +-100 +27 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +64 +-24 +-102 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-109 +110 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +118 +24 +-59 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +96 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +120 +112 +104 +97 +91 +84 +77 +72 +68 +63 +58 +4 +-79 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-107 +-100 +27 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +116 +108 +99 +93 +86 +81 +74 +19 +-65 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-113 +-105 +-99 +28 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +65 +-23 +-101 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-109 +111 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +116 +108 +100 +93 +87 +81 +75 +70 +65 +60 +6 +-76 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +54 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +99 +7 +-75 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +90 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +111 +18 +-65 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +94 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +19 +-64 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-114 +-105 +-99 +-92 +-86 +41 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +68 +-20 +-99 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-108 +112 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +120 +26 +-58 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +97 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +120 +113 +105 +97 +90 +84 +78 +73 +67 +63 +59 +4 +-79 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-115 +-107 +-100 +28 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +63 +-24 +-103 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-110 +110 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +118 +24 +-59 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +97 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +121 +112 +104 +97 +91 +84 +78 +73 +67 +63 +58 +3 +-79 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-107 +-100 +27 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +64 +-23 +-102 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-109 +111 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +119 +25 +-58 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +98 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +115 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-64 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-64 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +94 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +19 +-64 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +94 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +94 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +122 +113 +105 +98 +91 +84 +78 +74 +68 +62 +59 +3 +-80 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-116 +-108 +-101 +27 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +63 +-24 +-103 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-110 +110 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +119 +25 +-59 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +97 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +122 +114 +106 +99 +92 +85 +79 +74 +68 +64 +59 +5 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-116 +-108 +-100 +28 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +63 +-24 +-102 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-110 +111 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +119 +25 +-59 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +96 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +120 +112 +104 +98 +91 +84 +78 +73 +67 +63 +58 +2 +-80 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +54 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +100 +8 +-74 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-114 +-107 +-100 +-93 +-87 +40 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +68 +-20 +-99 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-108 +112 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +116 +108 +100 +93 +87 +80 +75 +70 +65 +61 +5 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +55 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +101 +9 +-73 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-115 +-106 +-100 +-93 +-87 +40 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +67 +-20 +-99 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-108 +112 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +119 +25 +-59 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +121 +113 +104 +97 +91 +85 +78 +74 +68 +64 +59 +4 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +54 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +99 +7 +-75 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +91 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +112 +19 +-64 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-114 +-106 +-99 +-92 +-86 +40 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +68 +-20 +-99 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-108 +112 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +119 +25 +-59 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +97 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +115 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +94 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +94 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +94 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +94 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +94 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +124 diff --git a/traces/lf_t5577_pac.pm3 b/traces/lf_t5577_pac.pm3 new file mode 100644 index 000000000..8d0d6cadd --- /dev/null +++ b/traces/lf_t5577_pac.pm3 @@ -0,0 +1,10000 @@ +-24 +-22 +-21 +-19 +-18 +-16 +-15 +-13 +-12 +-12 +-11 +-9 +-9 +-8 +-7 +-6 +-6 +-5 +-6 +-5 +-4 +-3 +-3 +-2 +-3 +-2 +-2 +-1 +-1 +-1 +-1 +0 +0 +-1 +-1 +0 +-1 +0 +1 +0 +0 +0 +0 +1 +1 +1 +121 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +117 +109 +102 +95 +89 +32 +-52 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-116 +-107 +-99 +-92 +34 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +106 +99 +92 +86 +81 +74 +70 +65 +61 +57 +54 +50 +47 +44 +41 +38 +37 +34 +31 +30 +28 +26 +25 +23 +22 +21 +19 +18 +17 +15 +15 +15 +13 +13 +13 +11 +11 +-29 +-107 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-111 +-103 +-96 +-89 +-83 +-77 +-72 +-66 +-61 +-57 +-53 +-49 +-45 +-42 +-39 +-36 +-34 +-31 +-29 +-26 +-24 +-22 +-22 +-19 +-18 +-17 +-15 +-13 +-13 +-11 +-10 +-9 +-8 +-7 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +115 +107 +100 +93 +87 +31 +-54 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-116 +-107 +-100 +-93 +-86 +-79 +-74 +-69 +-65 +-59 +-55 +-50 +-47 +-43 +-40 +-37 +-35 +-31 +-29 +-27 +-25 +-22 +-21 +-19 +-18 +-17 +-15 +-13 +-12 +-11 +-10 +-9 +-8 +-7 +-7 +-6 +114 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +117 +108 +102 +95 +89 +82 +78 +72 +67 +62 +59 +55 +52 +48 +45 +42 +40 +37 +35 +32 +31 +29 +27 +26 +24 +22 +22 +20 +18 +16 +17 +16 +15 +14 +14 +13 +12 +-28 +-107 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-111 +-103 +-96 +-89 +-82 +-76 +-72 +-67 +-62 +-57 +-53 +-49 +-46 +-42 +-39 +-36 +-34 +-32 +-29 +-26 +-24 +-23 +-22 +-20 +-18 +-16 +-15 +-13 +-13 +-12 +-11 +-10 +-9 +-8 +-8 +-6 +-6 +-6 +-6 +-4 +-5 +-3 +-3 +-3 +-2 +-2 +-2 +-1 +-2 +-1 +-1 +0 +0 +0 +-1 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +2 +121 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +118 +110 +102 +95 +90 +33 +-52 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-115 +-107 +-99 +-92 +35 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +113 +105 +98 +92 +85 +80 +24 +-60 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-109 +-101 +-94 +32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +112 +105 +97 +91 +85 +79 +23 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-109 +-101 +-94 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +112 +105 +98 +92 +86 +81 +24 +-60 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-118 +-109 +-101 +-94 +32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +111 +104 +97 +90 +84 +78 +72 +67 +63 +60 +56 +52 +49 +46 +42 +39 +36 +34 +32 +31 +28 +27 +25 +23 +21 +21 +19 +18 +17 +16 +15 +15 +13 +13 +13 +12 +11 +11 +-29 +-107 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-110 +-102 +25 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +110 +103 +95 +89 +83 +77 +72 +68 +62 +59 +55 +51 +48 +45 +41 +39 +37 +34 +32 +30 +28 +27 +24 +23 +21 +20 +19 +18 +16 +16 +15 +14 +13 +13 +12 +12 +11 +11 +-29 +-107 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-110 +-102 +25 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +103 +96 +90 +84 +78 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-118 +-109 +-102 +-95 +32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +105 +97 +91 +85 +80 +23 +-60 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-109 +-101 +-94 +32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +105 +97 +91 +85 +79 +73 +69 +64 +60 +56 +52 +48 +46 +42 +40 +37 +35 +32 +31 +27 +26 +25 +23 +22 +21 +19 +19 +17 +16 +16 +15 +13 +13 +12 +12 +12 +11 +-29 +-108 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-110 +-102 +25 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +110 +103 +96 +90 +83 +79 +73 +68 +63 +59 +55 +52 +48 +45 +42 +40 +36 +35 +32 +30 +28 +27 +25 +23 +22 +20 +20 +19 +17 +16 +16 +14 +13 +13 +12 +11 +11 +10 +-30 +-108 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-110 +-102 +25 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +118 +110 +103 +96 +90 +83 +78 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-109 +-103 +-95 +32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +112 +105 +98 +92 +85 +80 +23 +-60 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-108 +-101 +-94 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +105 +97 +91 +85 +80 +74 +69 +64 +60 +56 +52 +49 +46 +42 +40 +37 +35 +33 +31 +28 +27 +24 +23 +21 +20 +19 +18 +17 +16 +15 +14 +13 +11 +11 +12 +11 +11 +-29 +-107 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-112 +-102 +25 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +110 +103 +96 +90 +83 +78 +72 +68 +63 +59 +55 +52 +48 +45 +42 +39 +36 +35 +32 +30 +28 +27 +25 +24 +21 +21 +19 +18 +17 +17 +15 +15 +14 +13 +12 +11 +10 +10 +-30 +-108 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-111 +-102 +-96 +-88 +-82 +-77 +-71 +-66 +-61 +-57 +-53 +-48 +-45 +-42 +-39 +-36 +-33 +-30 +-28 +-25 +-23 +-22 +-21 +-19 +-17 +-16 +-15 +-12 +-12 +-11 +-10 +-9 +-8 +-7 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +116 +108 +100 +94 +88 +29 +-55 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-116 +-108 +-100 +-93 +-86 +-79 +-75 +-70 +-64 +-59 +-56 +-51 +-47 +-43 +-41 +-37 +-35 +-32 +-29 +-27 +-25 +-22 +-21 +-20 +-19 +-17 +-15 +-14 +-13 +-11 +-10 +-10 +-9 +-7 +-7 +-6 +115 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +116 +109 +102 +94 +88 +82 +77 +72 +67 +62 +58 +54 +51 +48 +45 +42 +39 +37 +35 +32 +31 +28 +26 +25 +24 +22 +21 +20 +18 +17 +17 +15 +15 +15 +14 +13 +12 +-29 +-107 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-110 +-103 +-95 +-88 +-82 +-76 +-71 +-66 +-61 +-57 +-52 +-48 +-45 +-41 +-39 +-36 +-33 +-31 +-28 +-26 +-24 +-23 +-21 +-19 +-18 +-16 +-15 +-13 +-13 +-11 +-11 +-9 +-9 +-8 +112 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +116 +108 +100 +94 +87 +31 +-53 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-116 +-108 +-100 +-93 +-86 +-79 +-74 +-69 +-64 +-59 +-56 +-51 +-47 +-44 +-41 +-37 +-35 +-32 +-29 +-27 +-25 +-23 +-21 +-20 +-18 +-17 +-16 +-14 +-13 +-12 +-10 +-10 +-9 +-9 +-8 +-6 +114 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +116 +108 +100 +94 +88 +32 +-52 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-116 +-108 +-100 +-93 +-87 +-80 +-74 +-69 +-65 +-60 +-55 +-51 +-48 +-44 +-41 +-38 +-35 +-31 +-30 +-27 +-24 +-22 +-20 +-19 +-18 +-16 +-15 +-13 +-12 +-10 +-10 +-9 +-8 +-8 +-7 +-6 +114 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +116 +108 +101 +95 +89 +83 +77 +72 +67 +63 +59 +54 +51 +48 +45 +42 +40 +37 +35 +32 +30 +28 +27 +25 +24 +22 +21 +20 +19 +17 +16 +15 +14 +14 +13 +12 +12 +11 +11 +10 +9 +9 +8 +7 +8 +7 +7 +7 +7 +6 +6 +5 +5 +5 +6 +5 +5 +5 +4 +5 +4 +3 +4 +4 +4 +4 +4 +3 +3 +2 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +2 +3 +3 +3 +3 +2 +2 +3 +3 +3 +3 +3 +2 +3 +2 +2 +3 +2 +3 +3 +2 +3 +2 +2 +3 +3 +2 +3 +2 +2 +2 +2 +2 +3 +3 +2 +3 +3 +2 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +2 +2 +3 +3 +3 +3 +2 +2 +3 +3 +3 +3 +3 +3 +3 +2 +3 +2 +3 +3 +2 +3 +3 +2 +2 +3 +3 +3 +3 +3 +3 +3 +2 +2 +3 +2 +3 +3 +3 +3 +3 +2 +3 +3 +2 +3 +3 +2 +3 +3 +3 +3 +3 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +1 +2 +2 +2 +2 +2 +1 +2 +2 +1 +2 +2 +1 +2 +2 +2 +2 +2 +1 +2 +1 +1 +1 +2 +1 +2 +2 +2 +2 +2 +1 +1 +1 +2 +2 +2 +1 +1 +1 +1 +1 +1 +1 +2 +2 +2 +2 +2 +1 +2 +2 +1 +1 +2 +2 +2 +2 +2 +2 +2 +2 +3 +2 +2 +2 +2 +2 +2 +1 +2 +2 +2 +2 +2 +2 +3 +3 +3 +3 +3 +3 +3 +2 +3 +3 +2 +3 +3 +3 +3 +3 +3 +3 +2 +3 +3 +4 +3 +3 +3 +2 +2 +3 +3 +3 +3 +2 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +2 +3 +3 +3 +3 +3 +3 +3 +2 +3 +3 +3 +3 +2 +2 +3 +3 +2 +2 +3 +2 +2 +2 +2 +2 +3 +2 +3 +2 +1 +2 +3 +2 +2 +1 +1 +2 +2 +1 +2 +1 +2 +2 +1 +1 +2 +1 +1 +2 +2 +1 +2 +2 +2 +2 +2 +2 +2 +2 +3 +2 +2 +2 +3 +2 +2 +-38 +-116 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-113 +-104 +-97 +-90 +-84 +-77 +-72 +-68 +-63 +-57 +-54 +-50 +-46 +-42 +-40 +-37 +-35 +-31 +-29 +-27 +-25 +-23 +-22 +-20 +-18 +-17 +-16 +-14 +-13 +-12 +-11 +-10 +-10 +-8 +112 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +116 +108 +101 +94 +88 +30 +-55 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-107 +-99 +-92 +-85 +-79 +-73 +-69 +-64 +-59 +-55 +-50 +-46 +-43 +-40 +-37 +-34 +-31 +-29 +-27 +-25 +-22 +-21 +-19 +-18 +-16 +-15 +-13 +-13 +-12 +-10 +-9 +-9 +-7 +-7 +-6 +-5 +-4 +-4 +-3 +-3 +-3 +-2 +-1 +-2 +-1 +-1 +-1 +0 +0 +0 +1 +0 +1 +1 +1 +0 +1 +0 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +2 +1 +2 +1 +1 +1 +2 +1 +2 +2 +2 +2 +2 +2 +2 +2 +3 +3 +3 +2 +2 +2 +3 +3 +3 +2 +3 +2 +3 +3 +4 +3 +4 +3 +2 +2 +2 +2 +3 +3 +3 +2 +3 +3 +3 +3 +3 +4 +4 +4 +4 +2 +3 +3 +3 +3 +4 +4 +3 +3 +3 +3 +4 +4 +4 +4 +3 +3 +3 +4 +3 +4 +4 +3 +4 +3 +3 +3 +4 +3 +4 +4 +3 +3 +3 +3 +4 +4 +4 +4 +4 +3 +4 +4 +4 +123 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +118 +110 +103 +96 +89 +33 +-52 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-106 +-99 +-92 +-86 +-79 +-74 +-69 +-64 +-59 +-55 +-50 +-46 +-43 +-40 +-37 +-35 +-32 +-29 +-27 +-25 +-23 +-21 +-19 +-18 +-17 +-15 +-13 +-13 +-11 +-10 +-9 +-9 +-8 +-7 +-6 +114 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +117 +109 +102 +95 +88 +33 +-52 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-116 +-108 +-100 +-93 +-87 +-80 +-74 +-69 +-64 +-59 +-56 +-52 +-47 +-43 +-40 +-37 +-34 +-31 +-29 +-27 +-25 +-22 +-21 +-19 +-18 +-16 +-15 +-13 +-12 +-12 +-10 +-9 +-9 +-8 +-7 +-6 +114 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +116 +109 +101 +94 +89 +83 +77 +71 +67 +62 +58 +54 +51 +47 +45 +41 +39 +36 +34 +32 +30 +28 +26 +25 +23 +22 +20 +19 +18 +17 +16 +15 +14 +13 +13 +12 +12 +-28 +-106 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-110 +-102 +-95 +-88 +-82 +-77 +-71 +-66 +-61 +-56 +-52 +-49 +-45 +-41 +-39 +-36 +-33 +-30 +-28 +-25 +-24 +-22 +-20 +-19 +-18 +-16 +-15 +-13 +-12 +-11 +-10 +-9 +-9 +-8 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +116 +108 +100 +94 +88 +30 +-54 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-116 +-108 +-100 +-93 +-87 +-80 +-74 +-69 +-64 +-59 +-56 +-51 +-47 +-43 +-40 +-37 +-35 +-32 +-29 +-27 +-26 +-23 +-21 +-20 +-18 +-17 +-16 +-14 +-13 +-11 +-10 +-9 +-9 +-8 +-7 +-6 +-6 +-5 +-4 +-4 +-4 +-3 +-2 +-3 +-2 +-1 +0 +0 +0 +0 +0 +1 +1 +2 +1 +1 +0 +1 +1 +2 +2 +2 +2 +2 +2 +3 +2 +3 +3 +3 +2 +2 +2 +2 +2 +2 +3 +3 +3 +3 +2 +2 +3 +3 +3 +4 +3 +3 +3 +3 +2 +2 +3 +3 +2 +3 +3 +3 +3 +3 +3 +4 +3 +3 +3 +3 +3 +3 +3 +3 +3 +4 +3 +4 +4 +4 +4 +4 +4 +4 +3 +3 +4 +4 +4 +4 +3 +4 +3 +3 +4 +4 +123 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +118 +110 +103 +95 +89 +82 +78 +72 +67 +63 +59 +55 +51 +48 +46 +42 +40 +37 +34 +32 +31 +29 +27 +25 +24 +23 +22 +20 +19 +17 +16 +16 +15 +14 +14 +13 +13 +-28 +-106 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-110 +-102 +25 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +110 +104 +97 +91 +84 +79 +73 +68 +64 +60 +55 +52 +48 +46 +43 +40 +37 +34 +32 +30 +28 +27 +24 +23 +21 +21 +19 +18 +17 +16 +15 +14 +13 +13 +11 +11 +10 +10 +-30 +-108 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-111 +-103 +25 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +104 +96 +90 +84 +78 +72 +69 +64 +59 +56 +52 +48 +45 +42 +40 +37 +35 +32 +31 +29 +27 +25 +24 +22 +21 +19 +18 +17 +16 +15 +15 +14 +13 +11 +11 +11 +11 +-29 +-107 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-111 +-104 +-96 +-89 +-83 +-77 +-72 +-67 +-62 +-58 +-53 +-49 +-46 +-42 +-39 +-36 +-34 +-32 +-29 +-26 +-25 +-23 +-22 +-20 +-18 +-16 +-15 +-14 +-13 +-12 +-11 +-10 +-9 +-9 +-8 +-7 +-7 +-6 +-6 +-5 +-4 +-4 +-4 +-3 +-3 +-3 +-2 +-1 +-2 +-1 +-1 +-1 +0 +0 +-1 +0 +0 +0 +1 +2 +1 +1 +1 +1 +1 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +3 +3 +3 +3 +2 +3 +3 +4 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +4 +123 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +110 +103 +96 +90 +33 +-52 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-116 +-107 +-100 +-92 +34 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +112 +105 +98 +92 +85 +80 +24 +-60 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-118 +-110 +-102 +-94 +-87 +-80 +-75 +-71 +-66 +-60 +-56 +-52 +-48 +-45 +-42 +-39 +-36 +-33 +-30 +-28 +-26 +-24 +-22 +-21 +-19 +-17 +-17 +-15 +-14 +-13 +-11 +-10 +-9 +-8 +-8 +-7 +-7 +-5 +-5 +-4 +-4 +-3 +-3 +-3 +-2 +-2 +-2 +-1 +-1 +0 +0 +0 +0 +1 +1 +1 +1 +1 +0 +1 +1 +1 +2 +2 +1 +2 +2 +2 +122 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +118 +109 +103 +96 +89 +32 +-52 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-116 +-107 +-99 +-92 +-86 +-79 +-73 +-69 +-65 +-59 +-55 +-51 +-47 +-43 +-40 +-37 +-35 +-32 +-29 +-27 +-25 +-23 +-21 +-20 +-18 +-17 +-16 +-14 +-12 +-11 +-10 +-9 +-9 +-8 +-7 +-6 +-6 +-5 +-4 +-3 +-3 +-3 +-3 +-2 +-2 +-2 +-2 +-1 +-1 +0 +0 +1 +0 +2 +1 +1 +1 +1 +1 +1 +2 +2 +2 +2 +1 +2 +2 +2 +122 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +118 +110 +103 +95 +90 +83 +78 +72 +68 +64 +60 +56 +52 +48 +46 +43 +41 +38 +36 +33 +31 +29 +28 +25 +25 +24 +22 +21 +20 +18 +17 +16 +15 +15 +14 +12 +13 +12 +12 +11 +11 +10 +10 +8 +8 +8 +8 +7 +7 +7 +7 +7 +7 +6 +6 +6 +6 +5 +6 +5 +5 +5 +5 +4 +5 +4 +4 +4 +4 +-37 +-114 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-112 +-104 +-97 +-89 +-84 +-78 +-73 +-68 +-63 +-58 +-54 +-49 +-46 +-43 +-40 +-36 +-34 +-31 +-29 +-27 +-25 +-23 +-22 +-20 +-18 +-17 +-16 +-14 +-14 +-12 +-11 +-10 +-9 +-8 +-8 +-6 +-7 +-6 +-6 +-6 +-5 +-4 +-4 +-3 +-2 +-3 +-2 +-1 +-2 +-1 +0 +0 +0 +0 +-1 +0 +0 +1 +1 +1 +1 +1 +1 +1 +1 +2 +122 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +117 +110 +103 +95 +89 +32 +-52 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-115 +-106 +-99 +-92 +35 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +105 +98 +92 +86 +80 +74 +70 +65 +61 +57 +53 +49 +47 +43 +40 +38 +36 +33 +31 +29 +27 +26 +24 +22 +21 +20 +18 +18 +17 +15 +16 +14 +13 +13 +13 +11 +11 +-29 +-107 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-112 +-103 +-96 +-89 +-83 +-78 +-73 +-67 +-62 +-57 +-54 +-49 +-46 +-43 +-40 +-37 +-35 +-31 +-29 +-26 +-25 +-23 +-22 +-20 +-19 +-17 +-15 +-14 +-13 +-12 +-12 +-10 +-9 +-9 +112 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +117 +108 +101 +94 +88 +31 +-53 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-107 +-99 +-92 +-86 +-79 +-73 +-69 +-65 +-59 +-54 +-50 +-46 +-42 +-40 +-37 +-33 +-31 +-29 +-26 +-25 +-22 +-20 +-19 +-18 +-16 +-15 +-13 +-13 +-12 +-10 +-9 +-8 +-7 +-7 +-7 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +116 +108 +101 +94 +88 +82 +76 +71 +67 +62 +58 +55 +51 +47 +44 +41 +39 +36 +34 +31 +30 +28 +26 +24 +24 +22 +20 +19 +18 +17 +16 +15 +15 +14 +13 +12 +12 +-29 +-107 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-111 +-102 +-95 +-88 +-82 +-76 +-71 +-66 +-61 +-57 +-53 +-49 +-45 +-42 +-39 +-36 +-34 +-31 +-29 +-26 +-24 +-22 +-21 +-19 +-18 +-16 +-15 +-14 +-12 +-11 +-11 +-9 +-9 +-8 +-8 +-5 +-5 +-5 +-5 +-4 +-3 +-2 +-3 +-2 +-1 +-2 +-1 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +1 +1 +1 +1 +2 +2 +2 +2 +2 +122 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +110 +103 +96 +90 +33 +-52 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-116 +-107 +-100 +-93 +34 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +104 +97 +92 +86 +80 +23 +-60 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-109 +-102 +-94 +32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +104 +97 +91 +85 +79 +23 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-117 +-109 +-101 +-94 +32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +105 +97 +91 +85 +79 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-116 +-108 +-101 +-93 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +105 +97 +91 +84 +79 +74 +69 +64 +60 +56 +52 +49 +45 +41 +40 +37 +34 +32 +31 +28 +27 +25 +23 +22 +21 +19 +18 +17 +16 +16 +15 +14 +14 +12 +11 +11 +11 +-29 +-107 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-111 +-103 +25 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +110 +104 +96 +90 +84 +78 +73 +68 +64 +60 +56 +53 +48 +46 +43 +40 +36 +35 +33 +31 +29 +27 +25 +24 +22 +20 +19 +18 +17 +16 +15 +14 +14 +13 +11 +11 +10 +10 +-30 +-108 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-110 +-102 +25 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +103 +96 +90 +84 +78 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-109 +-102 +-95 +32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +105 +97 +90 +85 +79 +23 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-109 +-101 +-94 +32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +112 +105 +98 +91 +85 +79 +74 +69 +65 +61 +56 +54 +50 +46 +44 +41 +37 +36 +34 +31 +30 +28 +26 +24 +23 +21 +20 +20 +18 +17 +16 +15 +14 +13 +13 +13 +11 +11 +-30 +-108 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-111 +-103 +24 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +118 +110 +103 +95 +90 +83 +78 +72 +68 +63 +59 +55 +52 +48 +46 +42 +39 +37 +34 +32 +30 +28 +26 +25 +23 +21 +21 +19 +18 +17 +16 +15 +14 +13 +12 +12 +11 +10 +10 +-31 +-109 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-111 +-102 +25 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +111 +104 +96 +90 +84 +79 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-109 +-102 +-94 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +105 +97 +91 +85 +79 +23 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-116 +-107 +-100 +-93 +34 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +105 +97 +90 +85 +80 +74 +70 +65 +60 +56 +53 +49 +45 +42 +40 +37 +35 +32 +30 +28 +27 +24 +24 +22 +21 +19 +18 +17 +16 +15 +14 +14 +14 +12 +11 +10 +10 +-29 +-107 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-112 +-104 +24 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +104 +96 +90 +84 +79 +73 +68 +63 +60 +55 +52 +48 +46 +42 +40 +37 +34 +32 +31 +29 +27 +25 +24 +22 +21 +19 +18 +17 +16 +15 +15 +14 +13 +12 +11 +11 +11 +-30 +-108 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-111 +-103 +-95 +-88 +-82 +-76 +-71 +-66 +-61 +-57 +-52 +-48 +-45 +-41 +-38 +-36 +-33 +-31 +-29 +-25 +-24 +-22 +-21 +-19 +-18 +-16 +-15 +-13 +-13 +-12 +-11 +-10 +-9 +-8 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +115 +108 +101 +94 +88 +30 +-54 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-116 +-107 +-99 +-92 +-85 +-79 +-74 +-68 +-64 +-59 +-54 +-51 +-47 +-44 +-40 +-37 +-35 +-32 +-30 +-27 +-25 +-23 +-21 +-19 +-19 +-17 +-16 +-14 +-13 +-12 +-11 +-9 +-9 +-8 +-8 +-7 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +116 +108 +102 +95 +89 +83 +78 +72 +67 +63 +59 +54 +52 +48 +45 +42 +39 +36 +34 +32 +30 +29 +27 +24 +23 +21 +20 +19 +19 +17 +16 +16 +14 +13 +13 +12 +12 +-28 +-107 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-110 +-102 +-95 +-88 +-81 +-76 +-71 +-65 +-61 +-57 +-52 +-48 +-45 +-42 +-38 +-36 +-33 +-30 +-28 +-26 +-24 +-23 +-21 +-19 +-18 +-16 +-15 +-14 +-13 +-12 +-12 +-10 +-9 +-8 +112 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +115 +107 +100 +93 +87 +30 +-54 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-116 +-107 +-99 +-92 +-86 +-79 +-74 +-68 +-64 +-58 +-55 +-50 +-47 +-43 +-40 +-37 +-35 +-31 +-30 +-28 +-25 +-23 +-21 +-19 +-18 +-17 +-15 +-13 +-13 +-11 +-10 +-10 +-9 +-7 +-8 +-6 +114 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +117 +108 +101 +94 +88 +32 +-53 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-116 +-108 +-100 +-93 +-86 +-80 +-75 +-69 +-65 +-60 +-55 +-51 +-48 +-44 +-41 +-38 +-35 +-32 +-30 +-27 +-26 +-23 +-21 +-20 +-19 +-17 +-16 +-14 +-13 +-12 +-11 +-10 +-9 +-8 +-7 +-6 +114 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +117 +109 +102 +95 +88 +82 +78 +72 +67 +63 +60 +55 +52 +48 +45 +41 +40 +37 +35 +33 +31 +29 +27 +26 +24 +22 +21 +19 +18 +18 +16 +16 +15 +14 +14 +13 +12 +11 +11 +10 +9 +9 +9 +8 +8 +8 +7 +6 +6 +5 +5 +6 +6 +5 +6 +5 +5 +5 +5 +5 +5 +4 +4 +4 +4 +4 +4 +3 +4 +4 +3 +4 +4 +3 +3 +4 +4 +3 +4 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +2 +3 +3 +3 +3 +3 +2 +3 +3 +3 +2 +3 +3 +3 +3 +3 +3 +3 +2 +3 +3 +2 +3 +3 +3 +3 +2 +2 +3 +3 +2 +3 +3 +2 +2 +3 +2 +3 +3 +2 +2 +3 +2 +3 +2 +2 +2 +2 +1 +2 +2 +2 +2 +2 +2 +2 +2 +3 +2 +2 +2 +2 +2 +3 +3 +2 +2 +2 +2 +3 +3 +2 +2 +2 +2 +3 +3 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +1 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +1 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +1 +2 +2 +2 +2 +3 +2 +2 +2 +2 +2 +2 +1 +2 +3 +2 +2 +2 +2 +3 +2 +2 +3 +3 +2 +2 +3 +3 +3 +3 +2 +3 +3 +3 +3 +3 +3 +3 +2 +3 +3 +3 +3 +3 +2 +3 +3 +3 +3 +3 +2 +3 +2 +2 +2 +3 +2 +3 +3 +2 +3 +3 +2 +2 +2 +2 +3 +3 +1 +2 +2 +2 +2 +3 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +3 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +3 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +1 +2 +2 +2 +3 +2 +2 +3 +2 +2 +2 +2 +2 +3 +3 +3 +3 +2 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +4 +3 +3 +3 +3 +3 +3 +2 +3 +3 +4 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +4 +3 +3 +3 +4 +3 +3 +4 +3 +3 +4 +-37 +-115 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-112 +-104 +-97 +-89 +-83 +-78 +-73 +-67 +-63 +-58 +-53 +-49 +-46 +-43 +-40 +-37 +-34 +-31 +-29 +-27 +-24 +-23 +-22 +-20 +-18 +-17 +-15 +-14 +-14 +-12 +-11 +-10 +-9 +-8 +112 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +116 +108 +101 +94 +87 +29 +-55 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-116 +-107 +-99 +-92 +-86 +-79 +-74 +-68 +-64 +-59 +-54 +-50 +-47 +-43 +-41 +-37 +-34 +-32 +-30 +-27 +-25 +-22 +-20 +-19 +-18 +-16 +-15 +-14 +-12 +-11 +-10 +-9 +-9 +-8 +-7 +-6 +-5 +-4 +-4 +-4 +-3 +-3 +-3 +-2 +-2 +-1 +-1 +-1 +-1 +0 +-1 +0 +0 +1 +1 +1 +0 +1 +1 +1 +2 +2 +2 +2 +2 +2 +2 +2 +2 +3 +2 +1 +2 +2 +1 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +1 +1 +2 +2 +2 +2 +2 +2 +2 +2 +2 +3 +2 +3 +3 +2 +2 +2 +2 +3 +3 +3 +3 +3 +2 +3 +3 +2 +2 +4 +4 +4 +3 +3 +4 +4 +3 +4 +4 +4 +4 +5 +3 +4 +4 +4 +4 +4 +3 +4 +4 +4 +4 +4 +3 +4 +4 +4 +4 +4 +4 +5 +4 +4 +3 +4 +3 +4 +4 +4 +4 +4 +3 +4 +4 +4 +123 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +118 +110 +103 +95 +89 +33 +-52 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-116 +-107 +-99 +-92 +-85 +-79 +-74 +-69 +-64 +-59 +-56 +-51 +-47 +-44 +-40 +-37 +-35 +-32 +-29 +-28 +-25 +-23 +-21 +-19 +-18 +-17 +-15 +-14 +-13 +-12 +-11 +-10 +-9 +-8 +-8 +-6 +114 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +116 +108 +100 +93 +88 +32 +-52 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-116 +-107 +-99 +-92 +-85 +-78 +-74 +-68 +-64 +-59 +-55 +-50 +-46 +-43 +-40 +-36 +-34 +-31 +-29 +-27 +-24 +-22 +-21 +-18 +-17 +-16 +-15 +-13 +-12 +-10 +-10 +-9 +-8 +-7 +-6 +-6 +114 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +116 +108 +100 +94 +88 +81 +76 +71 +66 +61 +58 +54 +50 +47 +44 +41 +39 +36 +34 +32 +30 +28 +27 +24 +23 +22 +21 +19 +18 +17 +16 +15 +14 +13 +13 +12 +12 +-28 +-106 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-110 +-102 +-95 +-88 +-81 +-76 +-71 +-65 +-61 +-57 +-52 +-48 +-44 +-42 +-38 +-36 +-33 +-31 +-28 +-26 +-24 +-22 +-21 +-19 +-18 +-17 +-15 +-13 +-13 +-12 +-11 +-10 +-9 +-8 +112 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +116 +108 +101 +93 +87 +30 +-54 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-116 +-107 +-99 +-92 +-86 +-80 +-74 +-69 +-65 +-60 +-55 +-51 +-48 +-43 +-40 +-38 +-35 +-32 +-30 +-27 +-25 +-23 +-21 +-19 +-19 +-16 +-15 +-14 +-13 +-11 +-11 +-9 +-9 +-9 +-8 +-6 +-6 +-4 +-4 +-4 +-4 +-3 +-3 +-2 +-1 +-1 +-1 +-1 +-1 +0 +0 +0 +1 +1 +1 +1 +1 +0 +1 +2 +2 +2 +2 +2 +2 +2 +2 +2 +3 +3 +2 +2 +2 +2 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +4 +3 +3 +3 +2 +3 +4 +3 +4 +4 +3 +3 +3 +2 +3 +3 +4 +3 +4 +3 +3 +3 +3 +3 +4 +3 +3 +4 +4 +3 +4 +4 +4 +3 +3 +3 +3 +3 +4 +4 +4 +3 +4 +3 +3 +4 +4 +123 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +119 +111 +103 +96 +90 +83 +78 +73 +68 +63 +60 +56 +52 +49 +45 +42 +40 +37 +35 +32 +30 +27 +27 +26 +24 +22 +21 +19 +19 +17 +16 +16 +14 +13 +14 +12 +12 +-29 +-107 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-110 +-102 +24 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +118 +110 +103 +95 +90 +83 +77 +72 +67 +63 +59 +54 +51 +47 +45 +41 +39 +35 +34 +31 +29 +27 +26 +24 +23 +21 +20 +18 +18 +17 +16 +15 +14 +12 +13 +12 +11 +11 +10 +-30 +-108 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-110 +-102 +25 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +104 +96 +90 +84 +79 +73 +69 +64 +60 +56 +52 +49 +46 +43 +40 +37 +35 +32 +30 +28 +27 +25 +24 +22 +21 +19 +18 +17 +16 +15 +14 +14 +13 +12 +12 +11 +10 +-29 +-108 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-111 +-104 +-96 +-89 +-83 +-78 +-71 +-66 +-62 +-56 +-53 +-49 +-46 +-43 +-39 +-36 +-33 +-31 +-28 +-26 +-24 +-22 +-21 +-19 +-18 +-16 +-15 +-13 +-13 +-11 +-10 +-9 +-8 +-7 +-7 +-6 +-6 +-6 +-5 +-4 +-5 +-4 +-3 +-3 +-3 +-2 +-3 +-1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +1 +1 +1 +1 +2 +1 +2 +2 +2 +2 +2 +1 +2 +2 +2 +2 +3 +3 +3 +3 +3 +3 +3 +3 +4 +3 +3 +3 +3 +2 +3 +4 +4 +3 +3 +3 +3 +3 +3 +123 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +117 +109 +102 +96 +89 +32 +-52 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-115 +-106 +-98 +-91 +35 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +112 +105 +98 +92 +85 +80 +24 +-60 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-108 +-101 +-94 +-88 +-81 +-76 +-70 +-65 +-60 +-56 +-52 +-48 +-44 +-41 +-38 +-35 +-32 +-31 +-28 +-25 +-23 +-22 +-20 +-19 +-17 +-16 +-15 +-13 +-12 +-12 +-10 +-9 +-8 +-8 +-7 +-7 +-5 +-5 +-4 +-4 +-3 +-4 +-3 +-2 +-2 +-2 +-1 +-2 +-1 +0 +0 +0 +0 +0 +0 +0 +1 +0 +1 +1 +1 +1 +1 +1 +1 +1 +2 +122 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +117 +109 +103 +95 +89 +32 +-52 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-106 +-99 +-92 +-85 +-79 +-74 +-68 +-64 +-59 +-55 +-51 +-47 +-43 +-40 +-37 +-34 +-31 +-29 +-27 +-25 +-23 +-21 +-19 +-19 +-17 +-15 +-13 +-12 +-11 +-11 +-10 +-8 +-8 +-7 +-6 +-6 +-5 +-4 +-4 +-4 +-3 +-3 +-2 +-2 +-2 +-1 +-1 +-1 +0 +0 +0 +0 +1 +0 +0 +0 +1 +1 +2 +1 +2 +2 +1 +2 +2 +2 +3 +122 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +118 +110 +103 +95 +89 +83 +78 +73 +69 +63 +59 +55 +52 +48 +45 +43 +40 +37 +35 +32 +31 +29 +27 +25 +24 +22 +21 +19 +18 +17 +16 +15 +14 +13 +13 +12 +11 +11 +10 +9 +9 +8 +8 +7 +7 +6 +7 +6 +6 +5 +5 +5 +6 +5 +5 +5 +4 +4 +4 +4 +4 +4 +4 +3 +4 +3 +4 +3 +3 +-37 +-115 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-111 +-103 +-96 +-88 +-83 +-77 +-72 +-66 +-62 +-56 +-52 +-49 +-45 +-41 +-38 +-35 +-33 +-31 +-28 +-25 +-24 +-22 +-21 +-19 +-17 +-15 +-15 +-13 +-12 +-11 +-10 +-9 +-9 +-7 +-6 +-5 +-5 +-5 +-5 +-4 +-3 +-3 +-3 +-3 +-2 +-1 +-2 +-1 +-1 +-1 +-1 +0 +0 +0 +0 +0 +1 +1 +0 +1 +1 +1 +1 +2 +1 +2 +122 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +118 +109 +103 +95 +90 +32 +-52 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-116 +-107 +-99 +-93 +34 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +105 +97 +92 +85 +79 +74 +68 +64 +61 +57 +53 +49 +46 +43 +40 +37 +35 +32 +30 +29 +27 +25 +24 +22 +21 +19 +18 +17 +16 +15 +15 +13 +12 +12 +12 +10 +10 +-29 +-107 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-111 +-103 +-95 +-87 +-82 +-76 +-71 +-65 +-61 +-56 +-52 +-48 +-45 +-41 +-38 +-35 +-32 +-30 +-28 +-25 +-23 +-22 +-21 +-19 +-18 +-16 +-15 +-13 +-12 +-11 +-10 +-8 +-8 +-7 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +115 +107 +100 +93 +87 +31 +-54 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-116 +-107 +-99 +-92 +-86 +-79 +-74 +-69 +-65 +-59 +-55 +-50 +-47 +-44 +-40 +-37 +-35 +-32 +-30 +-27 +-25 +-23 +-22 +-20 +-18 +-17 +-16 +-14 +-13 +-12 +-11 +-10 +-10 +-8 +-8 +-7 +114 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +116 +108 +101 +94 +88 +82 +77 +71 +67 +63 +58 +54 +51 +48 +45 +42 +40 +36 +34 +33 +30 +29 +27 +25 +24 +22 +21 +20 +19 +17 +17 +16 +15 +14 +14 +13 +12 +-28 +-106 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-110 +-101 +-95 +-87 +-81 +-76 +-71 +-65 +-61 +-56 +-52 +-48 +-45 +-41 +-38 +-35 +-33 +-30 +-27 +-25 +-23 +-21 +-20 +-18 +-17 +-15 +-14 +-13 +-12 +-11 +-10 +-9 +-8 +-7 +-7 +-5 +-5 +-5 +-5 +-4 +-4 +-3 +-2 +-2 +-1 +-2 +-2 +0 +0 +0 +0 +0 +0 +1 +0 +0 +1 +1 +1 +2 +1 +1 +2 +2 +2 +2 +122 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +118 +109 +102 +95 +89 +32 +-52 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-116 +-108 +-100 +-92 +34 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +105 +98 +92 +84 +80 +23 +-60 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-109 +-101 +-93 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +104 +96 +90 +84 +78 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-118 +-109 +-101 +-94 +32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +104 +97 +90 +84 +79 +23 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-117 +-108 +-100 +-93 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +105 +98 +91 +85 +79 +74 +70 +64 +60 +56 +53 +49 +46 +42 +39 +37 +35 +32 +30 +28 +27 +25 +24 +22 +21 +19 +18 +18 +16 +15 +15 +14 +13 +13 +12 +11 +11 +-29 +-107 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-111 +-103 +25 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +110 +103 +96 +90 +84 +78 +72 +68 +64 +59 +55 +52 +48 +44 +42 +40 +36 +34 +32 +29 +28 +27 +24 +23 +22 +20 +19 +18 +16 +16 +15 +14 +14 +13 +12 +12 +11 +10 +-30 +-108 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-111 +-103 +25 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +110 +102 +95 +89 +83 +78 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-110 +-102 +-95 +32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +111 +104 +97 +91 +85 +79 +23 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-118 +-109 +-101 +-94 +32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +105 +98 +91 +84 +80 +74 +69 +64 +61 +56 +52 +49 +46 +43 +40 +37 +35 +33 +32 +29 +28 +26 +24 +23 +21 +19 +19 +18 +17 +16 +15 +14 +13 +12 +12 +12 +12 +-28 +-107 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-111 +-103 +24 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +104 +96 +90 +84 +79 +73 +68 +64 +60 +56 +53 +49 +45 +42 +40 +37 +35 +33 +30 +28 +27 +24 +23 +22 +20 +19 +18 +16 +16 +15 +13 +13 +12 +11 +11 +10 +10 +-31 +-109 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-110 +-102 +25 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +104 +96 +90 +84 +79 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-109 +-102 +-95 +32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +103 +96 +89 +83 +79 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-116 +-108 +-100 +-93 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +112 +105 +98 +92 +86 +79 +74 +69 +65 +61 +57 +52 +49 +46 +43 +40 +37 +35 +32 +31 +29 +27 +26 +24 +22 +21 +19 +19 +17 +16 +16 +15 +14 +14 +13 +12 +11 +11 +-29 +-107 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-111 +-103 +25 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +104 +97 +90 +84 +79 +74 +68 +64 +61 +56 +53 +49 +46 +43 +40 +37 +35 +33 +31 +29 +27 +25 +23 +21 +20 +19 +18 +16 +16 +15 +15 +13 +13 +12 +12 +11 +11 +-30 +-108 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-111 +-103 +-95 +-89 +-83 +-76 +-72 +-67 +-62 +-57 +-54 +-49 +-45 +-42 +-40 +-36 +-34 +-32 +-29 +-26 +-25 +-22 +-21 +-20 +-18 +-16 +-16 +-14 +-13 +-11 +-11 +-10 +-9 +-8 +112 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +116 +108 +101 +94 +88 +30 +-54 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-107 +-100 +-92 +-86 +-80 +-74 +-69 +-64 +-60 +-55 +-50 +-47 +-43 +-40 +-37 +-35 +-31 +-30 +-27 +-25 +-22 +-20 +-19 +-18 +-16 +-14 +-13 +-12 +-11 +-10 +-9 +-8 +-8 +-7 +-6 +115 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +117 +108 +102 +95 +88 +82 +77 +71 +67 +63 +58 +54 +51 +48 +45 +42 +39 +36 +34 +32 +30 +28 +27 +25 +23 +22 +20 +19 +18 +17 +16 +15 +14 +13 +13 +12 +12 +-30 +-108 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-110 +-102 +-95 +-88 diff --git a/traces/lf_t5577_paradox.pm3 b/traces/lf_t5577_paradox.pm3 new file mode 100644 index 000000000..de6cebc74 --- /dev/null +++ b/traces/lf_t5577_paradox.pm3 @@ -0,0 +1,10000 @@ +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-32 +84 +123 +115 +22 +-61 +-127 +-127 +-15 +93 +123 +117 +23 +-60 +-127 +-127 +-16 +92 +123 +116 +23 +-60 +-127 +-127 +-17 +92 +123 +115 +22 +-61 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +92 +123 +115 +22 +-61 +-127 +-127 +-16 +91 +123 +117 +24 +-59 +-127 +-127 +-127 +-22 +95 +123 +123 +123 +44 +-41 +-118 +-127 +-127 +-24 +91 +123 +123 +123 +41 +-44 +-120 +-127 +-127 +-27 +88 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-29 +86 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-30 +85 +123 +123 +123 +36 +-48 +-124 +-127 +-25 +82 +123 +105 +12 +-70 +-127 +-127 +-26 +82 +123 +107 +15 +-68 +-127 +-127 +-22 +86 +123 +112 +19 +-64 +-127 +-127 +-21 +87 +123 +111 +18 +-64 +-127 +-127 +-19 +88 +123 +113 +20 +-63 +-127 +-127 +-19 +89 +123 +116 +23 +-60 +-127 +-127 +-127 +-23 +93 +123 +123 +123 +43 +-42 +-118 +-127 +-127 +-24 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-27 +89 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-29 +87 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-29 +86 +123 +123 +123 +37 +-48 +-123 +-127 +-24 +82 +123 +105 +12 +-70 +-127 +-127 +-26 +83 +123 +108 +15 +-67 +-127 +-127 +-22 +86 +123 +111 +19 +-64 +-127 +-127 +-21 +88 +123 +111 +19 +-64 +-127 +-127 +-20 +89 +123 +112 +19 +-64 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-18 +89 +123 +123 +123 +32 +-53 +-127 +-127 +-127 +-35 +81 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-34 +83 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-31 +86 +123 +116 +22 +-61 +-127 +-127 +-14 +94 +123 +118 +24 +-59 +-127 +-127 +-16 +92 +123 +116 +22 +-61 +-127 +-127 +-16 +92 +123 +116 +22 +-61 +-127 +-127 +-16 +92 +123 +116 +22 +-61 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-34 +83 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-33 +84 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +116 +23 +-60 +-127 +-127 +-14 +94 +123 +117 +24 +-59 +-127 +-127 +-15 +93 +123 +116 +23 +-60 +-127 +-127 +-16 +92 +123 +116 +23 +-60 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +90 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +116 +22 +-61 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +116 +23 +-60 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +116 +23 +-60 +-127 +-127 +-127 +-23 +93 +123 +123 +123 +43 +-42 +-119 +-127 +-127 +-25 +91 +123 +123 +123 +39 +-46 +-121 +-127 +-127 +-28 +88 +123 +123 +123 +37 +-47 +-123 +-127 +-127 +-29 +86 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +38 +-47 +-123 +-127 +-24 +82 +123 +104 +12 +-70 +-127 +-127 +-25 +83 +123 +109 +16 +-66 +-127 +-127 +-22 +87 +123 +111 +18 +-64 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-19 +90 +123 +113 +20 +-62 +-127 +-127 +-17 +90 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-33 +83 +123 +123 +123 +33 +-51 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +85 +123 +123 +123 +34 +-50 +-125 +-127 +-127 +-32 +84 +123 +114 +21 +-62 +-127 +-127 +-15 +93 +123 +116 +23 +-60 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +113 +20 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +20 +-62 +-127 +-127 +-17 +90 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-33 +82 +123 +123 +123 +33 +-51 +-126 +-127 +-127 +-33 +84 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-31 +85 +123 +117 +24 +-59 +-127 +-127 +-14 +95 +123 +118 +24 +-59 +-127 +-127 +-14 +93 +123 +117 +24 +-60 +-127 +-127 +-16 +93 +123 +116 +23 +-60 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-18 +92 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +116 +23 +-60 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +42 +-43 +-119 +-127 +-127 +-25 +91 +123 +123 +123 +39 +-46 +-122 +-127 +-127 +-28 +87 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-29 +86 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-30 +85 +123 +123 +123 +37 +-48 +-124 +-127 +-24 +83 +123 +105 +13 +-69 +-127 +-127 +-25 +84 +123 +108 +15 +-67 +-127 +-127 +-21 +87 +123 +112 +19 +-63 +-127 +-127 +-20 +88 +123 +112 +19 +-64 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-19 +90 +123 +116 +23 +-60 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +43 +-42 +-118 +-127 +-127 +-24 +91 +123 +123 +123 +39 +-46 +-122 +-127 +-127 +-28 +88 +123 +123 +123 +37 +-47 +-123 +-127 +-127 +-30 +86 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-30 +86 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +36 +-48 +-124 +-127 +-25 +81 +123 +103 +11 +-71 +-127 +-127 +-26 +83 +123 +107 +15 +-68 +-127 +-127 +-23 +86 +123 +111 +19 +-64 +-127 +-127 +-20 +88 +123 +112 +19 +-64 +-127 +-127 +-19 +90 +123 +113 +20 +-63 +-127 +-127 +-17 +90 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-19 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +123 +123 +32 +-52 +-127 +-127 +-127 +-35 +81 +123 +123 +123 +32 +-52 +-127 +-127 +-127 +-33 +83 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-33 +84 +123 +123 +123 +34 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +117 +24 +-59 +-127 +-127 +-14 +94 +123 +117 +24 +-59 +-127 +-127 +-15 +93 +123 +116 +23 +-60 +-127 +-127 +-16 +92 +123 +116 +23 +-60 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +116 +23 +-60 +-127 +-127 +-127 +-22 +94 +123 +123 +123 +43 +-42 +-118 +-127 +-127 +-25 +91 +123 +123 +123 +39 +-46 +-121 +-127 +-127 +-28 +88 +123 +123 +123 +37 +-47 +-123 +-127 +-127 +-29 +86 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-31 +85 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +36 +-49 +-124 +-127 +-25 +82 +123 +104 +12 +-70 +-127 +-127 +-26 +83 +123 +109 +16 +-66 +-127 +-127 +-21 +87 +123 +112 +19 +-64 +-127 +-127 +-20 +88 +123 +113 +20 +-63 +-127 +-127 +-18 +89 +123 +113 +20 +-62 +-127 +-127 +-19 +90 +123 +115 +22 +-61 +-127 +-127 +-127 +-24 +94 +123 +123 +123 +43 +-42 +-118 +-127 +-127 +-25 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-28 +88 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-30 +86 +123 +123 +123 +36 +-48 +-124 +-127 +-127 +-31 +86 +123 +123 +123 +36 +-48 +-124 +-127 +-24 +81 +123 +104 +12 +-70 +-127 +-127 +-25 +83 +123 +107 +15 +-68 +-127 +-127 +-22 +86 +123 +111 +18 +-64 +-127 +-127 +-21 +88 +123 +111 +18 +-65 +-127 +-127 +-20 +88 +123 +113 +20 +-63 +-127 +-127 +-19 +89 +123 +113 +20 +-62 +-127 +-127 +-18 +91 +123 +123 +123 +32 +-53 +-127 +-127 +-127 +-34 +82 +123 +123 +123 +33 +-51 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +116 +22 +-61 +-127 +-127 +-14 +94 +123 +117 +24 +-59 +-127 +-127 +-16 +92 +123 +116 +23 +-60 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-16 +91 +123 +116 +22 +-61 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-16 +91 +123 +116 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-16 +91 +123 +116 +23 +-60 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +21 +-61 +-127 +-127 +-17 +92 +123 +115 +22 +-61 +-127 +-127 +-16 +91 +123 +118 +24 +-59 +-127 +-127 +-127 +-22 +94 +123 +123 +123 +44 +-41 +-118 +-127 +-127 +-24 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-28 +88 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +84 +123 +123 +123 +36 +-48 +-124 +-127 +-127 +-31 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +83 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-30 +85 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-48 +-124 +-127 +-24 +82 +123 +104 +12 +-70 +-127 +-127 +-25 +83 +123 +109 +16 +-66 +-127 +-127 +-21 +87 +123 +112 +19 +-63 +-127 +-127 +-20 +88 +123 +112 +19 +-64 +-127 +-127 +-19 +89 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +116 +22 +-61 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +43 +-42 +-119 +-127 +-127 +-24 +91 +123 +123 +123 +39 +-46 +-122 +-127 +-127 +-28 +87 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-29 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-30 +85 +123 +123 +123 +37 +-48 +-124 +-127 +-24 +82 +123 +104 +12 +-70 +-127 +-127 +-25 +84 +123 +108 +15 +-67 +-127 +-127 +-22 +87 +123 +111 +19 +-64 +-127 +-127 +-21 +88 +123 +112 +19 +-64 +-127 +-127 +-20 +89 +123 +112 +19 +-63 +-127 +-127 +-18 +89 +123 +114 +20 +-62 +-127 +-127 +-18 +90 +123 +123 +123 +32 +-52 +-127 +-127 +-127 +-34 +82 +123 +123 +123 +33 +-51 +-126 +-127 +-127 +-33 +84 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +115 +22 +-61 +-127 +-127 +-14 +94 +123 +118 +24 +-59 +-127 +-127 +-15 +93 +123 +117 +23 +-60 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +92 +123 +115 +22 +-61 +-127 +-127 +-16 +91 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-34 +82 +123 +123 +123 +33 +-51 +-127 +-127 +-127 +-32 +84 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-33 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +34 +-50 +-125 +-127 +-127 +-32 +84 +123 +115 +22 +-61 +-127 +-127 +-15 +93 +123 +116 +23 +-60 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-61 +-127 +-127 +-18 +91 +123 +116 +22 +-61 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-16 +91 +123 +116 +23 +-60 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +115 +21 +-61 +-127 +-127 +-18 +90 +123 +116 +22 +-61 +-127 +-127 +-127 +-23 +93 +123 +123 +123 +43 +-42 +-118 +-127 +-127 +-25 +91 +123 +123 +123 +39 +-46 +-122 +-127 +-127 +-28 +88 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-29 +86 +123 +123 +123 +36 +-48 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-30 +86 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-30 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +37 +-48 +-124 +-127 +-25 +81 +123 +104 +11 +-70 +-127 +-127 +-25 +83 +123 +107 +15 +-67 +-127 +-127 +-22 +86 +123 +111 +18 +-65 +-127 +-127 +-20 +88 +123 +111 +18 +-64 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-18 +89 +123 +114 +21 +-62 +-127 +-127 +-17 +92 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-16 +92 +123 +116 +22 +-61 +-127 +-127 +-17 +92 +123 +115 +22 +-61 +-127 +-127 +-16 +91 +123 +123 +123 +33 +-51 +-126 +-127 +-127 +-34 +82 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-33 +83 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-33 +84 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +116 +23 +-60 +-127 +-127 +-14 +94 +123 +117 +24 +-60 +-127 +-127 +-15 +93 +123 +117 +23 +-60 +-127 +-127 +-15 +93 +123 +116 +23 +-60 +-127 +-127 +-16 +91 +123 +116 +22 +-61 +-127 +-127 +-16 +92 +123 +116 +22 +-61 +-127 +-127 +-17 +91 +123 +117 +24 +-59 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +116 +22 +-61 +-127 +-127 +-18 +90 +123 +113 +20 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +115 +22 +-61 +-127 +-127 +-127 +-23 +93 +123 +123 +123 +43 +-42 +-119 +-127 +-127 +-25 +90 +123 +123 +123 +39 +-46 +-122 +-127 +-127 +-28 +88 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-29 +87 +123 +123 +123 +36 +-48 +-124 +-127 +-127 +-29 +87 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-31 +86 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-50 +-125 +-127 +-127 +-31 +84 +123 +123 +123 +36 +-49 +-124 +-127 +-25 +81 +123 +104 +12 +-70 +-127 +-127 +-27 +83 +123 +108 +15 +-67 +-127 +-127 +-22 +85 +123 +111 +18 +-64 +-127 +-127 +-20 +88 +123 +112 +19 +-64 +-127 +-127 +-20 +89 +123 +112 +19 +-63 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +20 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-34 +82 +123 +123 +123 +33 +-52 +-126 +-127 +-127 +-32 +85 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-31 +86 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +86 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +115 +22 +-61 +-127 +-127 +-15 +93 +123 +117 +24 +-59 +-127 +-127 +-16 +92 +123 +116 +22 +-61 +-127 +-127 +-16 +91 +123 +116 +22 +-60 +-127 +-127 +-17 +91 +123 +115 +21 +-61 +-127 +-127 +-17 +91 +123 +115 +21 +-61 +-127 +-127 +-17 +91 +123 +116 +23 +-60 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +44 +-42 +-118 +-127 +-127 +-25 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-28 +88 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-29 +87 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-30 +86 +123 +123 +123 +37 +-47 +-123 +-127 +-24 +82 +123 +105 +13 +-69 +-127 +-127 +-25 +83 +123 +109 +16 +-66 +-127 +-127 +-22 +86 +123 +112 +19 +-64 +-127 +-127 +-20 +88 +123 +112 +19 +-64 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +115 +21 +-62 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +113 +20 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-34 +82 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-33 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-33 +84 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-31 +85 +123 +116 +22 +-61 +-127 +-127 +-14 +94 +123 +118 +24 +-59 +-127 +-127 +-15 +93 +123 +116 +23 +-60 +-127 +-127 +-16 +92 +123 +116 +23 +-60 +-127 +-127 +-15 +92 +123 +116 +22 +-61 +-127 +-127 +-16 +92 +123 +116 +22 +-61 +-127 +-127 +-17 +91 +123 +123 +123 +33 +-51 +-126 +-127 +-127 +-34 +82 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-33 +84 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-31 +86 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +116 +22 +-60 +-127 +-127 +-14 +94 +123 +117 +24 +-59 +-127 +-127 +-15 +92 +123 +116 +22 +-61 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +116 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +116 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +116 +23 +-60 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +44 +-42 +-118 +-127 +-127 +-24 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-27 +89 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-29 +86 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-31 +86 +123 +123 +123 +37 +-47 +-123 +-127 +-127 +-30 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +37 +-48 +-124 +-127 +-25 +81 +123 +105 +12 +-70 +-127 +-127 +-25 +83 +123 +108 +15 +-67 +-127 +-127 +-22 +86 +123 +112 +19 +-64 +-127 +-127 +-19 +88 +123 +112 +19 +-64 +-127 +-127 +-19 +89 +123 +112 +19 +-63 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +123 +123 +32 +-52 +-127 +-127 +-127 +-34 +82 +123 +123 +123 +33 +-52 +-126 +-127 +-127 +-33 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +116 +22 +-61 +-127 +-127 +-13 +94 +123 +118 +24 +-59 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-61 +-127 +-127 +-18 +91 +123 +116 +23 +-60 +-127 +-127 +-17 +90 +123 +115 +22 +-61 +-127 +-127 +-18 +90 +123 +114 +20 +-62 +-127 +-127 +-18 +90 +123 +115 +22 +-61 +-127 +-127 +-18 +90 +123 +112 +19 +-64 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +115 +22 +-61 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +20 +-62 +-127 +-127 +-17 +90 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-34 +82 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-33 +84 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-33 +83 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-32 +85 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-31 +86 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-31 +86 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +117 +23 +-60 +-127 +-127 +-14 +94 +123 +117 +24 +-59 +-127 +-127 +-15 +92 +123 +116 +23 +-60 +-127 +-127 +-16 +92 +123 +116 +22 +-61 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +20 +-62 +-127 +-127 +-18 +90 +123 +115 +22 +-61 +-127 +-127 +-127 +-23 +93 +123 +123 +123 +43 +-42 +-118 +-127 +-127 +-24 +91 +123 +123 +123 +39 +-46 +-121 +-127 +-127 +-27 +88 +123 +123 +123 +37 +-47 +-123 +-127 +-127 +-28 +86 +123 +123 +123 +37 +-47 +-123 +-127 +-127 +-29 +86 +123 +123 +123 +38 +-47 +-123 +-127 +-23 +83 +123 +106 +13 +-69 +-127 +-127 +-25 +84 +123 +109 +17 +-66 +-127 +-127 +-21 +87 +123 +113 +20 +-63 +-127 +-127 +-20 +88 +123 +111 +19 +-64 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-19 +90 +123 +115 +22 +-61 +-127 +-127 +-127 +-25 +94 +123 +123 +123 +43 +-42 +-118 +-127 +-127 +-26 +90 +123 +123 +123 +39 +-46 +-122 +-127 +-127 +-29 +87 +123 +123 +123 +37 +-47 +-123 +-127 +-127 +-31 +86 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-30 +85 +123 +123 +123 +37 +-48 +-124 +-127 +-24 +82 +123 +105 +12 +-70 +-127 +-127 +-25 +83 +123 +108 +15 +-67 +-127 +-127 +-22 +86 +123 +111 +18 +-64 +-127 +-127 +-20 +88 +123 +112 +19 +-64 +-127 +-127 +-20 +89 +123 +112 +19 +-63 +-127 +-127 +-19 +89 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +123 +123 +32 +-52 +-127 +-127 +-127 +-35 +82 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-33 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +86 +123 +116 +22 +-60 +-127 +-127 +-14 +94 +123 +118 +25 +-59 +-127 +-127 +-15 +93 +123 +116 +23 +-60 +-127 +-127 +-15 +92 +123 +116 +23 +-60 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-16 +91 +123 +115 +21 +-62 +-127 +-127 +-16 +91 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-34 +83 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-33 +83 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-33 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +116 +23 +-60 +-127 +-127 +-14 +94 +123 +117 +24 +-59 +-127 +-127 +-15 +93 +123 +117 +23 +-60 +-127 +-127 +-16 +92 +123 +116 +23 +-60 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +117 +23 +-60 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +44 +-42 +-118 +-127 +-127 +-24 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-28 +88 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-29 +86 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-30 +85 +123 +123 +123 +37 +-48 +-124 +-127 +-25 +82 +123 +104 +11 +-70 +-127 +-127 +-25 +83 +123 +108 +15 +-67 +-127 +-127 +-22 +86 +123 +111 +18 +-64 +-127 +-127 +-21 +87 +123 +111 +18 +-65 +-127 +-127 +-20 +89 +123 +112 +20 +-63 +-127 +-127 +-19 +89 +123 +115 +22 +-61 +-127 +-127 +-127 +-23 +93 +123 +123 +123 +43 +-42 +-118 +-127 +-127 +-25 +90 +123 +123 +123 +39 +-45 +-121 +-127 +-127 +-27 +88 +123 +123 +123 +37 +-47 +-123 +-127 +-127 +-29 +86 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-30 +85 +123 +123 +123 +37 +-48 +-123 +-127 +-24 +82 +123 +105 +13 +-69 +-127 +-127 +-24 +84 +123 +108 +15 +-67 +-127 +-127 +-22 +87 +123 +112 +19 +-64 +-127 +-127 +-20 +89 +123 +111 +18 +-64 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-34 +82 +123 +123 +123 +33 +-51 +-126 +-127 +-127 +-33 +83 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +83 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-32 +84 +123 +115 +21 +-61 +-127 +-127 +-15 +93 +123 +116 +23 +-60 +-127 +-127 +-16 +91 +123 +116 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +123 +123 +33 +-52 +-126 +-127 +-127 +-35 +82 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-33 +84 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-33 +83 +123 +123 +123 +34 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +117 +23 +-60 +-127 +-127 +-14 +94 +123 +118 +24 +-59 +-127 +-127 +-14 +92 +123 +116 +23 +-60 +-127 +-127 +-15 +93 +123 +117 +24 +-59 +-127 +-127 +-15 +92 +123 +116 +22 +-61 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +117 +24 +-60 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +44 +-42 +-118 +-127 +-127 +-25 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-28 +88 +123 +123 +123 +37 +-47 +-123 +-127 +-127 +-29 +87 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-29 +86 +123 +123 +123 +37 +-48 +-123 +-127 +-23 +83 +123 +105 +13 +-69 +-127 +-127 +-25 +84 +123 +108 +15 +-67 +-127 +-127 +-22 +86 +123 +113 +20 +-63 +-127 +-127 +-20 +88 +123 +111 +18 +-64 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +115 +22 +-61 +-127 +-127 +-127 +-24 +93 +123 +123 +123 +43 +-42 +-118 +-127 +-127 +-26 +90 +123 +123 +123 +39 +-46 +-122 +-127 +-127 +-28 +88 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-30 +86 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-30 +86 +123 +123 +123 +38 +-47 +-123 +-127 +-24 +82 +123 +105 +13 +-69 +-127 +-127 +-25 +84 +123 +109 +16 +-66 +-127 +-127 +-21 +87 +123 +112 +19 +-63 +-127 +-127 +-20 +89 +123 +112 +19 +-63 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-35 +82 +123 +123 +123 +33 +-51 +-126 +-127 +-127 +-33 +83 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +33 +-52 +-126 +-127 +-127 +-32 +85 +123 +123 +123 +34 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +116 +22 +-61 +-127 +-127 +-15 +94 +123 +117 +24 +-59 +-127 +-127 +-15 +92 +123 +116 +23 +-60 +-127 +-127 +-16 +92 +123 +115 +21 +-62 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +21 +-61 +-127 +-127 +-17 +91 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-33 +83 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-33 +84 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-31 +86 +123 +116 +22 +-61 +-127 +-127 +-14 +94 +123 +117 +24 +-59 +-127 +-127 +-15 +92 +123 +117 +23 +-60 +-127 +-127 +-15 +92 +123 +117 +23 +-60 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +116 +23 +-60 +-127 +-127 +-17 +90 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +116 +22 +-61 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +116 +22 +-61 +-127 +-127 +-127 +-24 +93 +123 +123 +123 +43 +-42 +-119 +-127 +-127 +-25 +90 +123 +123 +123 +39 +-45 +-121 +-127 +-127 +-28 +88 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-30 +86 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-30 +85 +123 +123 +123 +37 +-48 +-123 +-127 +-25 +81 +123 +103 +11 +-71 +-127 +-127 +-25 +83 +123 +108 +15 +-67 +-127 +-127 +-22 +86 +123 +111 +18 +-65 +-127 +-127 +-21 +88 +123 +111 +18 +-64 +-127 +-127 +-19 +89 +123 +112 +19 +-63 +-127 +-127 +-18 +89 +123 +113 +20 +-62 +-127 +-127 +-18 +90 +123 +123 +123 +32 +-52 +-127 +-127 +-127 +-34 +83 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-33 +84 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +86 +123 +115 +22 +-61 +-127 +-127 +-14 +93 +123 +117 +24 +-59 +-127 +-127 +-15 +93 +123 +117 +23 +-60 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-16 +92 +123 +115 +21 +-61 +-127 +-127 +-16 +91 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-33 +83 +123 +123 +123 +33 +-51 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +116 +23 +-60 +-127 +-127 +-13 +95 +123 +118 +24 +-59 +-127 +-127 +-15 +93 +123 +117 +23 +-60 +-127 +-127 +-16 +93 +123 +116 +23 +-60 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-18 +90 +123 +116 +23 +-60 +-127 +-127 +-127 +-24 +94 +123 +123 +123 +43 +-42 +-118 +-127 +-127 +-25 +91 +123 +123 +123 +39 +-46 +-122 +-127 +-127 +-28 +88 +123 +123 +123 +37 +-47 +-123 +-127 +-127 +-30 +86 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-30 +85 +123 +123 +123 +37 +-48 +-123 +-127 +-24 +82 +123 +104 +12 +-70 +-127 +-127 +-25 +84 +123 +109 +16 +-66 +-127 +-127 +-22 +87 +123 +112 +19 +-64 +-127 +-127 +-20 +88 +123 +112 +19 +-64 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-19 +90 +123 +115 +22 +-61 +-127 +-127 +-127 +-23 +93 +123 +123 +123 +43 +-42 +-119 +-127 +-127 +-25 +90 +123 +123 +123 +39 +-46 +-122 +-127 +-127 +-28 +88 +123 +123 +123 +37 +-47 +-123 +-127 +-127 +-29 +86 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +84 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-48 +-124 +-127 +-127 +-30 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-30 +86 +123 +123 +123 +37 +-47 +-123 +-127 +-24 +83 +123 +105 +13 +-69 +-127 +-127 +-25 +83 +123 +108 +15 +-67 +-127 +-127 +-22 +86 +123 +111 +18 +-65 +-127 +-127 +-20 +88 +123 +111 +19 +-64 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-19 +89 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +20 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +112 +19 +-63 +-127 +-127 +-18 +90 +123 +113 +20 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-34 +82 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-33 +83 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +86 +123 +116 +23 +-60 +-127 +-127 +-14 +94 +123 +117 +24 +-59 +-127 +-127 +-15 +93 +123 +117 +23 +-60 +-127 +-127 +-16 +93 +123 +116 +23 +-60 +-127 +-127 +-16 +91 +123 +116 +23 +-60 +-127 +-127 +-16 +92 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +117 +23 +-60 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +43 +-42 +-118 +-127 +-127 +-25 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-27 +88 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-29 +87 +123 +123 +123 +36 +-48 +-124 +-127 +-127 +-29 +86 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-30 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +34 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-30 +85 +123 +123 +123 +34 +-50 +-125 +-127 +-127 +-31 +84 +123 +123 +123 +36 +-49 +-124 +-127 +-25 +81 +123 +103 +11 +-71 +-127 +-127 +-26 +82 +123 +107 +15 +-68 +-127 +-127 +-22 +86 +123 +111 +18 +-64 +-127 +-127 +-20 +88 +123 +113 +19 +-63 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-17 +90 +123 +116 +23 +-60 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +44 +-41 +-118 +-127 +-127 +-25 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-27 +88 +123 +123 +123 +37 +-47 +-123 +-127 +-127 +-30 +86 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +38 +-47 +-123 +-127 +-24 +82 +123 +105 +12 +-70 +-127 +-127 +-24 +83 +123 +108 +16 +-67 +-127 +-127 +-22 +86 +123 +111 +18 +-65 +-127 +-127 +-20 +88 +123 +112 +19 +-64 +-127 +-127 +-19 +89 +123 +112 +19 +-63 +-127 +-127 +-19 +89 +123 +112 +19 +-63 +-127 +-127 +-19 +90 +123 +123 +123 +32 +-53 +-127 +-127 +-127 +-34 +82 +123 +123 +123 +33 +-52 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-33 +83 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +85 +123 +115 +22 +-61 +-127 +-127 +-14 +93 +123 +117 +24 +-59 +-127 +-127 +-15 +93 +123 +116 +23 +-60 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-16 +92 +123 +115 +21 +-61 +-127 +-127 +-17 +91 +123 +115 +21 +-61 +-127 +-127 +-17 +91 +123 +115 +21 +-61 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +116 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +117 +23 +-60 +-127 +-127 +-127 +-22 +95 +123 +123 +123 +44 +-41 +-118 +-127 +-127 +-24 +92 +123 +123 +123 +41 +-44 +-120 +-127 +-127 +-27 +89 +123 +123 +123 +37 +-47 +-123 +-127 +-127 +-29 +87 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +37 +-47 +-123 +-127 +-127 +-31 +84 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-124 +-127 +-25 +82 +123 +103 +11 +-71 +-127 +-127 +-25 +83 +123 +108 +16 +-67 +-127 +-127 +-22 +86 +123 +111 +19 +-64 +-127 +-127 +-20 +87 +123 +111 +18 +-64 +-127 +-127 +-20 +88 +123 +113 +20 +-63 +-127 +-127 +-19 +90 +123 +115 +22 +-61 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +43 +-42 +-118 +-127 +-127 +-25 +91 +123 +123 +123 +39 +-45 +-121 +-127 +-127 +-28 +89 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-29 +87 +123 +123 +123 +36 +-48 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +38 +-47 +-123 +-127 +-24 +82 +123 +105 +12 +-69 +-127 +-127 +-25 +84 +123 +108 +15 +-67 +-127 +-127 +-22 +86 +123 +112 +19 +-64 +-127 +-127 +-20 +88 +123 +112 +19 +-64 +-127 +-127 +-18 +90 +123 +112 +19 +-63 +-127 +-127 +-18 +90 +123 +113 +20 +-62 +-127 +-127 +-19 +90 +123 +123 +123 +32 +-52 +-127 +-127 +-127 +-35 +82 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-33 +83 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-31 +85 +123 +115 +22 +-61 +-127 +-127 +-15 +93 +123 +116 +23 +-60 +-127 +-127 +-15 +92 +123 +116 +23 +-60 +-127 +-127 +-17 +92 +123 +115 +21 +-61 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +123 +123 +33 +-51 +-126 +-127 +-127 +-34 +83 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +85 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-32 +85 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +116 +22 +-60 +-127 +-127 +-14 +93 +123 +117 +24 +-59 +-127 +-127 +-15 +92 +123 +116 +22 +-61 +-127 +-127 +-16 +91 +123 +116 +23 +-60 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +90 +123 +115 +21 +-61 +-127 +-127 +-17 +90 +123 +115 +22 +-61 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +116 +22 +-61 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +89 +123 +116 +22 +-61 +-127 +-127 +-127 +-24 +94 +123 +123 +123 +43 +-42 +-119 +-127 +-127 +-25 +90 +123 +123 +123 +39 +-46 +-121 +-127 +-127 +-28 +88 +123 +123 +123 +37 +-47 +-123 +-127 +-127 +-30 +86 +123 +123 +123 +36 +-48 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-30 +85 +123 +123 +123 +38 +-47 +-123 +-127 +-24 +82 +123 +104 +11 +-70 +-127 +-127 +-25 +83 +123 +108 +16 +-67 +-127 +-127 +-22 +87 +123 +111 +18 +-64 +-127 +-127 +-20 +88 +123 +111 +18 +-65 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-18 +89 +123 +113 +20 +-62 +-127 +-127 +-18 +90 +123 +113 +20 +-62 +-127 +-127 +-18 +90 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +116 +22 +-61 +-127 +-127 +-17 +91 +123 +116 +22 +-61 +-127 +-127 +-16 +92 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-33 +83 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-33 +84 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-32 +85 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +116 +23 +-60 +-127 +-127 +-14 +94 +123 +117 +23 +-60 +-127 +-127 +-15 +92 +123 +116 +22 +-61 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +115 +21 +-62 +-127 +-127 +-18 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +116 +23 +-60 +-127 +-127 +-17 +91 +123 +113 +20 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +116 +23 +-60 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +43 +-42 +-118 +-127 +-127 +-24 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-27 +87 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-29 +87 +123 +123 +123 +36 +-48 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-30 +86 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +37 +-48 +-124 +-127 +-25 +81 +123 +104 +12 +-70 +-127 +-127 +-25 +83 +123 +108 +15 +-67 +-127 +-127 +-22 +86 +123 +112 +19 +-64 +-127 +-127 +-20 +88 +123 +112 +19 +-63 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +113 +20 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-34 +83 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-33 +84 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-33 +84 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +86 +123 +116 +23 +-60 +-127 +-127 +-14 +93 +123 +118 +24 +-59 +-127 +-127 +-15 +93 +123 +116 +23 +-60 +-127 +-127 +-15 +92 +123 +117 +23 +-60 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +117 +24 +-60 +-127 +-127 +-127 +-22 +94 +123 +123 +123 +43 +-42 +-118 +-127 +-127 +-25 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-27 +88 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-29 +87 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-30 +85 +123 +123 +123 +37 +-48 +-123 +-127 +-25 +82 +123 +104 +12 +-70 +-127 +-127 +-25 +83 +123 +107 +15 +-67 +-127 +-127 +-22 +86 +123 +112 +19 +-64 +-127 +-127 +-20 +88 +123 +112 +19 +-64 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-17 +90 +123 +116 +22 +-60 +-127 +-127 +-17 +90 +123 +113 +20 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-61 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-34 +82 +123 +123 +123 +33 +-51 +-126 +-127 +-127 +-33 +84 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-31 +85 +123 +116 +23 +-60 +-127 +-127 +-13 +94 +123 +118 +25 +-59 +-127 +-127 +-14 +93 +123 +116 +23 +-60 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +123 +123 +32 +-52 +-127 +-127 +-127 +-35 +81 +123 +123 +123 +32 +-52 +-127 +-127 +-127 +-33 +83 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-33 +83 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-33 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +116 +23 +-60 +-127 +-127 +-15 +93 +123 +117 +23 +-60 +-127 +-127 +-15 +92 +123 +115 +22 +-61 +-127 +-127 +-16 +91 +123 +116 +23 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +116 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +115 +21 +-61 +-127 +-127 +-17 +91 +123 +117 +23 +-60 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-16 +91 +123 +116 +22 +-61 +-127 +-127 +-16 +92 +123 +117 +23 +-60 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +44 +-41 +-118 +-127 +-127 +-24 +92 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-27 +88 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-30 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +36 +-48 +-124 +-127 +-24 +81 +123 +104 +12 +-70 +-127 +-127 +-25 +83 +123 +108 +15 +-67 +-127 +-127 +-21 +87 +123 +112 +19 +-64 +-127 +-127 +-19 +89 +123 +112 +19 +-63 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-34 +83 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +115 +21 +-62 +-127 +-127 +-14 +94 +123 +117 +24 +-59 +-127 +-127 +-15 +92 +123 +116 +22 +-60 +-127 +-127 +-16 +91 +123 +115 +21 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +115 +22 +-61 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +115 +22 +-61 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +116 +23 +-60 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +116 +23 +-60 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +115 +22 +-61 +-127 +-127 +-16 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-18 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-35 +82 +123 +123 +123 +32 +-52 +-127 +-127 +-127 +-34 +83 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-33 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-30 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +116 +23 +-60 +-127 +-127 +-15 +94 +123 +116 +23 +-60 +-127 +-127 +-15 +92 +123 +116 +23 +-60 +-127 +-127 +-16 +92 +123 +116 +23 +-60 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +116 +23 +-60 +-127 +-127 +-127 +-22 +95 +123 +123 +123 +43 +-42 +-118 +-127 +-127 +-24 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-27 +88 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-29 +86 +123 +123 +123 +36 +-48 +-124 +-127 +-127 +-30 +85 +123 +123 +123 +36 +-48 +-124 +-127 +-24 +82 +123 +104 +12 +-70 +-127 +-127 +-25 +84 +123 +108 +16 +-67 +-127 +-127 +-21 +86 +123 +112 +19 +-64 +-127 +-127 +-20 +88 +123 +112 +19 +-64 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +116 +23 +-60 +-127 +-127 +-127 +-24 +93 +123 +123 +123 +42 +-43 +-119 +-127 +-127 +-25 +91 +123 +123 +123 +39 +-45 +-121 +-127 +-127 +-27 +88 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-28 +87 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +37 +-47 +-123 +-127 +-24 +82 +123 +105 +12 +-70 +-127 +-127 +-25 +83 +123 +109 +16 +-66 +-127 +-127 +-22 +87 +123 +111 +18 +-64 +-127 +-127 +-19 +88 +123 +112 +19 +-63 +-127 +-127 +-19 +90 +123 +114 +20 +-62 +-127 +-127 +-18 +90 +123 +114 +20 +-62 +-127 +-127 +-18 +90 +123 +123 +123 +32 +-52 +-127 +-127 +-127 +-34 +82 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-33 +83 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +85 +123 +115 +22 +-61 +-127 +-127 +-15 +93 +123 +117 +24 +-59 +-127 +-127 +-15 +93 +123 +116 +23 +-60 +-127 +-127 +-17 +92 +123 +115 +22 +-61 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-16 +92 +123 +114 +21 +-62 +-127 +-127 +-16 +91 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-34 +83 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-34 +83 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-32 +85 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-32 +85 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-31 +85 +123 +116 +22 +-61 +-127 +-127 +-14 +94 +123 +117 +23 +-60 +-127 +-127 +-15 +92 +123 +116 +22 +-61 +-127 +-127 +-16 +92 +123 +116 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-19 +90 +123 +115 +21 +-61 +-127 +-127 +-127 +-23 +93 +123 +123 +123 +43 +-42 +-119 +-127 +-127 +-24 +90 +123 +123 +123 +39 +-45 +-121 +-127 +-127 +-28 +88 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-29 +86 +123 +123 +123 +36 +-48 +-124 +-127 +-127 +-29 +86 +123 +123 +123 +37 +-47 +-123 +-127 +-23 +83 +123 +105 +13 +-69 +-127 +-127 +-25 +84 +123 +108 +16 +-67 +-127 +-127 +-21 +87 +123 +112 +19 +-63 +-127 +-127 +-19 +88 +123 +112 +19 +-64 +-127 +-127 +-18 +89 +123 +114 +21 +-62 +-127 +-127 +-19 +90 +123 +115 +22 +-61 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +43 +-42 +-119 +-127 +-127 +-25 +91 +123 +123 +123 +39 +-45 +-121 +-127 +-127 +-27 +88 +123 +123 +123 +37 +-47 +-123 +-127 +-127 +-29 +86 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-30 +85 +123 +123 +123 +37 +-48 +-123 +-127 +-24 +82 +123 +104 +12 +-70 +-127 +-127 +-25 +83 +123 +108 +15 +-67 +-127 +-127 +-22 +87 +123 +111 +19 +-64 +-127 +-127 +-19 +88 +123 +111 +19 +-64 +-127 +-127 +-19 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +123 +123 +32 +-52 +-127 +-127 +-127 +-35 +81 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-33 +82 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-33 +84 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +115 +22 +-61 +-127 +-127 +-14 +93 +123 +118 +24 +-59 +-127 +-127 +-15 +93 +123 +116 +23 +-60 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-16 +91 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-34 +83 +123 +123 +123 +33 +-51 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +116 +22 +-60 +-127 +-127 +-15 +93 +123 +116 +23 +-60 +-127 +-127 +-15 +92 +123 +116 +22 +-61 +-127 +-127 +-16 +92 +123 +116 +23 +-60 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +21 +-61 +-127 +-127 +-17 +91 +123 +116 +23 +-60 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +43 +-42 +-119 +-127 +-127 +-25 +91 +123 +123 +123 +39 +-45 +-121 +-127 +-127 +-28 +88 +123 +123 +123 +37 +-47 +-123 +-127 +-127 +-30 +86 +123 +123 +123 +36 +-48 +-124 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-124 +-127 +-24 +82 +123 +105 +13 +-69 +-127 +-127 +-24 +84 +123 +108 +15 +-67 +-127 +-127 +-22 +86 +123 +113 +20 +-63 +-127 +-127 +-20 +88 +123 +111 +19 +-64 +-127 +-127 +-18 +89 +123 +114 +20 +-62 +-127 +-127 +-18 +90 +123 +116 +22 +-61 +-127 +-127 +-127 +-24 +94 +123 +123 +123 +43 +-42 +-118 +-127 +-127 +-24 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-27 +89 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-30 +86 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-31 +85 +123 +123 +123 +37 +-48 +-124 +-127 +-24 +82 +123 +104 +12 +-70 +-127 +-127 +-25 +84 +123 +108 +15 +-67 +-127 +-127 +-22 +86 +123 +111 +18 +-64 +-127 +-127 +-20 +88 +123 +112 +19 +-64 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +123 +123 +32 +-52 +-127 +-127 +-127 +-35 +82 +123 +123 +123 +33 +-51 +-126 +-127 +-127 +-33 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +86 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-30 +85 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-31 +84 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +115 +22 +-61 +-127 +-127 +-15 +93 +123 +117 +23 +-60 +-127 +-127 +-15 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 diff --git a/traces/lf_t5577_presco.pm3 b/traces/lf_t5577_presco.pm3 new file mode 100644 index 000000000..e5e489dca --- /dev/null +++ b/traces/lf_t5577_presco.pm3 @@ -0,0 +1,12000 @@ +124 +124 +124 +124 +124 +113 +14 +-79 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-96 +57 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +115 +16 +-77 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +115 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +115 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-96 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +14 +-79 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-96 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +115 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +14 +-79 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-96 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +14 +-79 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +115 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +115 +16 +-77 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +115 +16 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +115 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-96 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +14 +-79 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-96 +57 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +14 +-79 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-96 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +115 +16 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-94 +60 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +115 +16 +-77 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-96 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-79 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-96 +57 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-96 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-96 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +115 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-94 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +115 +16 +-77 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-96 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +14 +-79 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-97 +57 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +14 +-79 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +115 +16 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-96 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +115 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +116 +16 +-77 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +60 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-96 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +115 +16 +-77 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +60 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-96 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-96 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +14 +-79 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-96 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +115 +16 +-77 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +117 +110 +102 +96 +89 +83 +77 +72 +67 +63 +58 +55 +16 +-70 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +25 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +104 +7 +-86 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-99 +55 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +14 +-79 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-96 +57 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +112 +13 +-80 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-116 +-108 +-101 +-93 +-87 +-81 +-75 +-70 +-66 +-61 +24 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +118 +110 +103 +95 +89 +83 +77 +72 +68 +29 +-58 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-109 +-101 +-94 +-88 +-82 +-76 +-70 +14 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +48 +-49 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-83 +70 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +118 +18 +-76 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +115 +16 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-94 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +115 +16 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +14 +-79 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-96 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +60 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +118 +110 +102 +95 +89 +83 +77 +72 +67 +62 +58 +54 +15 +-72 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-112 +-104 +-97 +-92 +-85 +-79 +-74 +12 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +45 +-51 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-86 +68 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +119 +19 +-75 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-93 +61 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +116 +16 +-77 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-94 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +116 +109 +101 +95 +88 +82 +76 +71 +66 +62 +57 +54 +15 +-71 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +24 +123 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +103 +5 +-87 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-100 +54 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +112 +13 +-80 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-116 +-107 +-100 +-93 +-87 +-80 +-76 +-70 +-65 +-61 +24 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +118 +110 +103 +95 +89 +83 +78 +72 +68 +28 +-59 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +29 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +106 +8 +-84 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-117 +-108 +-101 +-93 +-87 +-82 +-76 +-71 +-66 +-61 +23 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +49 +-47 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-83 +70 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +119 +112 +104 +97 +91 +84 +78 +73 +68 +63 +59 +55 +17 +-69 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +25 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +103 +5 +-87 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-98 +56 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +116 +108 +101 +94 +88 +82 +76 +71 +66 +62 +58 +54 +50 +47 +43 +41 +38 +36 +33 +31 +28 +27 +25 +24 +22 +20 +19 +18 +-14 +-95 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +12 +112 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +120 +112 +104 +97 +91 +85 +78 +73 +68 +63 +58 +55 +51 +47 +8 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +23 +122 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +103 +5 +-87 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-98 +55 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +14 +-79 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-96 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +117 +109 +101 +95 +89 +83 +77 +72 +66 +62 +58 +54 +16 +-70 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-111 +-104 +-96 +-90 +-84 +-78 +-72 +13 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +47 +-49 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-84 +69 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +118 +18 +-75 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +117 +110 +102 +96 +89 +82 +77 +72 +66 +62 +58 +54 +17 +-69 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +24 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +102 +4 +-88 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-118 +-109 +-101 +-95 +-89 +-82 +-77 +-72 +-67 +-62 +22 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +117 +109 +102 +94 +88 +82 +77 +71 +67 +28 +-59 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-110 +-103 +-95 +-89 +-83 +-77 +-72 +14 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +46 +-50 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-84 +68 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +117 +18 +-76 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-94 +60 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +115 +16 +-77 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +115 +16 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +116 +16 +-77 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-96 +57 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +14 +-79 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +115 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +115 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +115 +16 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-94 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +14 +-79 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-96 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +14 +-79 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-96 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +14 +-79 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +115 +16 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +115 +16 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-96 +57 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-96 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-94 +60 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +115 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-96 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-94 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +115 +16 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +14 +-79 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-97 +57 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +14 +-79 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-96 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +115 +16 +-77 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-94 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-94 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +115 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-96 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +14 +-79 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-96 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-96 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +14 +-79 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-96 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +115 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-94 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-96 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-96 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +115 +16 +-77 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +115 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-96 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +115 +16 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-96 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-96 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +115 +16 +-77 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +115 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +14 +-79 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-96 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +14 +-79 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +115 +16 +-77 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-94 +60 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +115 +16 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +14 +-79 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-96 +57 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +14 +-79 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-96 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-94 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +115 +16 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-94 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-96 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +14 +-79 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-96 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +14 +-79 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +115 +16 +-77 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +14 +-79 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-96 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +115 +16 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +115 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-96 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-96 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-96 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +14 +-79 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-96 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +14 +-79 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-96 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-94 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +115 +16 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +115 +16 +-77 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +14 +-79 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-96 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-94 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +117 +110 +102 +95 +89 +83 +77 +72 +67 +62 +58 +54 +16 +-70 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +25 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +104 +6 +-86 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-100 +54 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +14 +-79 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-96 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +14 +-79 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-107 +-100 +-93 +-86 +-80 +-75 +-69 +-65 +-61 +24 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +117 +109 +103 +95 +89 +83 +77 +72 +67 +29 +-58 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-110 +-102 +-95 +-89 +-82 +-77 +-72 +13 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +47 +-49 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-84 +70 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +118 +19 +-75 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-94 +60 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-96 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +115 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-94 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-96 +57 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +14 +-79 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +117 +109 +102 +94 +88 +82 +77 +72 +67 +62 +57 +54 +15 +-72 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-112 +-104 +-97 +-91 +-84 +-78 +-73 +12 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +47 +-50 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-83 +70 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +118 +19 +-75 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-93 +60 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +117 +109 +101 +95 +88 +83 +77 +72 +67 +63 +58 +55 +16 +-70 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +24 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +104 +6 +-86 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-100 +54 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +112 +13 +-80 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-107 +-100 +-93 +-87 +-81 +-75 +-70 +-65 +-60 +24 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +118 +110 +103 +95 +89 +83 +77 +71 +67 +28 +-60 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +28 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +105 +8 +-85 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-117 +-108 +-101 +-94 +-87 +-81 +-76 +-70 +-66 +-61 +24 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +49 +-48 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-84 +69 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +119 +112 +104 +97 +91 +85 +78 +73 +68 +63 +59 +55 +17 +-68 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +26 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +104 +5 +-87 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-98 +56 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +116 +108 +101 +94 +87 +82 +76 +71 +66 +61 +56 +53 +49 +45 +42 +40 +36 +34 +32 +30 +28 +26 +24 +22 +20 +19 +18 +17 +-14 +-96 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +13 +113 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +122 +113 +106 +99 +91 +86 +79 +74 +69 +64 +59 +56 +52 +48 +10 +-77 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +22 +121 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +102 +4 +-88 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-100 +54 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +112 +13 +-80 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-96 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +116 +109 +101 +95 +88 +83 +77 +72 +66 +62 +57 +54 +15 +-71 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-111 +-104 +-97 +-90 +-84 +-78 +-72 +13 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +48 +-49 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-83 +70 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +118 +18 +-75 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-94 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +115 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +117 +109 +101 +94 +88 +82 +76 +71 +65 +61 +57 +53 +15 +-70 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +24 +123 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +103 +5 +-87 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-117 +-109 +-101 +-94 +-88 +-82 +-76 +-71 +-66 +-61 +23 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +117 +109 +102 +95 +88 +82 +77 +71 +66 +28 +-59 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-117 +-109 +-101 +-94 +-88 +-82 +-76 +-71 +14 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +47 +-49 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-84 +69 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +118 +19 +-75 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-94 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +115 +16 +-77 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +14 +-79 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-96 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-96 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +14 +-79 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-96 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-96 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-96 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +115 +16 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +115 +16 +-77 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +115 +16 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +14 +-79 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-96 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +14 +-79 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-96 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +14 +-79 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-96 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +115 +16 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +115 +16 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-96 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +115 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-79 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-96 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-96 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +14 +-79 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +14 +-79 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-96 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +14 +-79 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +115 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +115 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-96 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +115 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +115 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-96 +57 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +14 +-79 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +115 +16 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +14 +-79 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-96 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-96 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +115 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +115 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-96 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-96 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-96 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-96 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +60 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +115 +16 +-77 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +115 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-96 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +14 +-79 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +115 +16 +-77 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-94 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +16 +-77 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-96 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +14 +-79 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-97 +57 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +14 +-79 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +60 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +115 +16 +-77 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +116 +109 +102 +95 +88 +82 +76 +71 +65 +61 +57 +53 +15 +-71 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +24 +122 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +103 +5 +-87 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-100 +55 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +112 +13 +-80 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-79 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-113 +-105 +-97 +-90 +-84 +-78 +-73 +-68 +-64 +-59 +25 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +119 +110 +102 +95 +89 +82 +77 +72 +66 +28 +-58 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-109 +-102 +-95 +-89 +-83 +-77 +-72 +13 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +47 +-50 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-85 +68 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +118 +18 +-76 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-94 +60 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +115 +16 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +115 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-96 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +14 +-79 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +117 +109 +101 +95 +88 +82 +76 +71 +66 +62 +57 +54 +15 +-72 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-111 +-104 +-96 +-90 +-84 +-78 +-72 +13 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +47 +-50 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-84 +69 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +118 +18 +-75 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +115 +16 +-77 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +116 +109 +101 +94 +88 +82 +76 +71 +66 +62 +58 +54 +16 +-70 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +26 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +104 +7 +-85 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-99 +55 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +112 +13 +-80 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-116 +-108 +-101 +-93 +-87 +-81 +-76 +-70 +-66 +-61 +23 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +118 +110 +103 +95 +89 +82 +77 +72 +67 +28 +-59 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +28 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +105 +7 +-85 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-118 +-109 +-101 +-94 +-88 +-82 +-76 +-71 +-67 +-62 +22 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +49 +-47 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-83 +70 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +121 +113 +105 +98 +91 +85 +79 +74 +68 +64 +60 +55 +18 +-68 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +24 +123 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +103 +4 +-88 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-99 +55 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +116 +108 +100 +94 +87 +81 +76 +71 +65 +61 +57 +53 +50 +46 +42 +40 +37 +35 +32 +30 +28 +26 +24 +22 +20 +20 +19 +17 +-14 +-95 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +12 +113 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +121 +113 +105 +98 +91 +85 +79 +74 +69 +64 +60 +56 +52 +49 +10 +-76 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +23 +122 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +102 +4 +-88 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-99 +55 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +112 +13 +-80 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-96 +57 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +116 +109 +101 +95 +88 +82 +76 +71 +66 +62 +57 +54 +16 +-71 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-111 +-104 +-97 +-90 +-84 +-78 +-72 +12 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +47 +-50 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-84 +68 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +117 +18 +-76 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +117 +110 +102 +95 +88 +83 +77 +72 +67 +63 +58 +55 +17 +-69 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +24 +123 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +102 +4 +-88 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-109 +-101 +-94 +-87 +-81 +-76 +-71 +-66 +-61 +24 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +118 +109 +102 +94 +88 +82 +76 +71 +67 +28 +-60 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-118 +-109 +-101 +-95 +-88 +-82 +-77 +-71 +14 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +47 +-50 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-85 +68 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +118 +18 +-75 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-93 +60 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +116 +17 +-77 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-94 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-96 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +14 +-79 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +15 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-96 +58 +124 +124 +124 +124 +124 +124 +124 +124 +124 diff --git a/traces/lf_t5577_pyramid.pm3 b/traces/lf_t5577_pyramid.pm3 new file mode 100644 index 000000000..5b6a18477 --- /dev/null +++ b/traces/lf_t5577_pyramid.pm3 @@ -0,0 +1,10000 @@ +-127 +-27 +88 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-29 +86 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-29 +86 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-30 +86 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-30 +86 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +84 +123 +123 +123 +36 +-49 +-124 +-127 +-24 +82 +123 +104 +12 +-70 +-127 +-127 +-26 +83 +123 +107 +14 +-68 +-127 +-127 +-23 +85 +123 +111 +18 +-64 +-127 +-127 +-21 +87 +123 +111 +18 +-64 +-127 +-127 +-19 +88 +123 +113 +20 +-63 +-127 +-127 +-19 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-34 +82 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-33 +84 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +115 +22 +-61 +-127 +-127 +-14 +93 +123 +118 +24 +-59 +-127 +-127 +-15 +93 +123 +116 +22 +-61 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-61 +-127 +-127 +-17 +91 +123 +115 +21 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +21 +-61 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +116 +23 +-60 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +44 +-42 +-118 +-127 +-127 +-24 +90 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-28 +87 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-30 +86 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-124 +-127 +-25 +82 +123 +104 +12 +-70 +-127 +-127 +-25 +83 +123 +109 +16 +-66 +-127 +-127 +-22 +87 +123 +111 +19 +-64 +-127 +-127 +-20 +88 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +117 +24 +-59 +-127 +-127 +-17 +91 +123 +113 +20 +-63 +-127 +-127 +-18 +91 +123 +115 +21 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-18 +90 +123 +114 +20 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +115 +22 +-61 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-61 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +115 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +20 +-62 +-127 +-127 +-19 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +113 +20 +-62 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +115 +22 +-61 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +115 +22 +-61 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +113 +20 +-62 +-127 +-127 +-18 +90 +123 +116 +23 +-60 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +116 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +115 +21 +-61 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +113 +20 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +117 +23 +-60 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +116 +22 +-61 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-16 +91 +123 +115 +21 +-61 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-16 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +115 +21 +-62 +-127 +-127 +-18 +91 +123 +116 +22 +-61 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +116 +22 +-61 +-127 +-127 +-17 +90 +123 +115 +21 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +116 +22 +-61 +-127 +-127 +-17 +91 +123 +113 +20 +-63 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-61 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +115 +21 +-61 +-127 +-127 +-18 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +90 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +116 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +20 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +115 +22 +-61 +-127 +-127 +-18 +90 +123 +114 +20 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +116 +23 +-60 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +43 +-42 +-118 +-127 +-127 +-24 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-27 +89 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-29 +87 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-30 +85 +123 +123 +123 +37 +-48 +-123 +-127 +-25 +82 +123 +104 +12 +-70 +-127 +-127 +-25 +83 +123 +108 +15 +-67 +-127 +-127 +-22 +86 +123 +111 +18 +-65 +-127 +-127 +-21 +88 +123 +112 +19 +-64 +-127 +-127 +-19 +89 +123 +112 +19 +-63 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +92 +123 +115 +22 +-61 +-127 +-127 +-18 +90 +123 +113 +20 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +116 +23 +-60 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +90 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +116 +22 +-61 +-127 +-127 +-18 +89 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +115 +22 +-61 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +115 +21 +-62 +-127 +-127 +-18 +90 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +21 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +92 +123 +116 +23 +-60 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-16 +92 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +117 +24 +-59 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +43 +-42 +-119 +-127 +-127 +-25 +91 +123 +123 +123 +39 +-46 +-122 +-127 +-127 +-29 +87 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-29 +86 +123 +123 +123 +36 +-48 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +36 +-48 +-124 +-127 +-25 +82 +123 +104 +11 +-70 +-127 +-127 +-25 +83 +123 +108 +15 +-67 +-127 +-127 +-22 +86 +123 +111 +18 +-64 +-127 +-127 +-20 +88 +123 +112 +19 +-64 +-127 +-127 +-20 +89 +123 +112 +19 +-63 +-127 +-127 +-18 +90 +123 +116 +22 +-61 +-127 +-127 +-18 +90 +123 +113 +20 +-62 +-127 +-127 +-19 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-18 +91 +123 +113 +20 +-62 +-127 +-127 +-17 +90 +123 +115 +22 +-61 +-127 +-127 +-16 +92 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +92 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +113 +20 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +115 +22 +-61 +-127 +-127 +-17 +90 +123 +114 +20 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +116 +22 +-61 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +115 +21 +-61 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +114 +20 +-62 +-127 +-127 +-19 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +92 +123 +115 +22 +-61 +-127 +-127 +-16 +91 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-33 +83 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +37 +-49 +-124 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +116 +23 +-60 +-127 +-127 +-14 +94 +123 +117 +24 +-59 +-127 +-127 +-16 +92 +123 +116 +22 +-61 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-19 +90 +123 +115 +21 +-62 +-127 +-127 +-18 +90 +123 +115 +22 +-61 +-127 +-127 +-18 +89 +123 +113 +20 +-62 +-127 +-127 +-19 +90 +123 +113 +20 +-62 +-127 +-127 +-18 +90 +123 +115 +21 +-61 +-127 +-127 +-18 +90 +123 +113 +20 +-62 +-127 +-127 +-17 +90 +123 +115 +21 +-62 +-127 +-127 +-18 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +115 +22 +-61 +-127 +-127 +-16 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-61 +-127 +-127 +-18 +90 +123 +114 +20 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-61 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +21 +-61 +-127 +-127 +-17 +91 +123 +115 +21 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +116 +23 +-60 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +115 +21 +-61 +-127 +-127 +-18 +90 +123 +115 +22 +-61 +-127 +-127 +-18 +90 +123 +114 +20 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +115 +22 +-61 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +113 +20 +-63 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-35 +82 +123 +123 +123 +33 +-51 +-126 +-127 +-127 +-33 +84 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +116 +22 +-60 +-127 +-127 +-14 +94 +123 +118 +24 +-59 +-127 +-127 +-15 +93 +123 +117 +23 +-60 +-127 +-127 +-16 +92 +123 +115 +21 +-61 +-127 +-127 +-16 +92 +123 +116 +22 +-61 +-127 +-127 +-17 +92 +123 +115 +21 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +116 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +115 +21 +-61 +-127 +-127 +-17 +91 +123 +116 +23 +-60 +-127 +-127 +-17 +92 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +117 +23 +-60 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +90 +123 +116 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +20 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +20 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +115 +21 +-61 +-127 +-127 +-18 +90 +123 +115 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +116 +22 +-61 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +116 +23 +-60 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +116 +23 +-60 +-127 +-127 +-127 +-23 +95 +123 +123 +123 +43 +-42 +-118 +-127 +-127 +-25 +91 +123 +123 +123 +39 +-45 +-121 +-127 +-127 +-28 +88 +123 +123 +123 +37 +-47 +-123 +-127 +-127 +-30 +86 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +37 +-48 +-124 +-127 +-25 +81 +123 +104 +12 +-70 +-127 +-127 +-25 +83 +123 +108 +15 +-67 +-127 +-127 +-22 +86 +123 +111 +18 +-65 +-127 +-127 +-20 +88 +123 +111 +18 +-64 +-127 +-127 +-20 +89 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +89 +123 +114 +20 +-62 +-127 +-127 +-18 +90 +123 +114 +20 +-62 +-127 +-127 +-18 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +20 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +116 +23 +-60 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +92 +123 +116 +23 +-60 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-18 +91 +123 +115 +21 +-61 +-127 +-127 +-17 +91 +123 +116 +23 +-60 +-127 +-127 +-16 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-61 +-127 +-127 +-17 +90 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +20 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +116 +22 +-60 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +44 +-42 +-118 +-127 +-127 +-25 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-28 +89 +123 +123 +123 +38 +-47 +-123 +-127 +-127 +-29 +87 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-30 +86 +123 +123 +123 +37 +-48 +-123 +-127 +-24 +83 +123 +105 +13 +-69 +-127 +-127 +-24 +84 +123 +109 +16 +-66 +-127 +-127 +-21 +87 +123 +113 +20 +-63 +-127 +-127 +-20 +89 +123 +112 +19 +-64 +-127 +-127 +-18 +89 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +20 +-62 +-127 +-127 +-18 +89 +123 +114 +21 +-62 +-127 +-127 +-18 +89 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +89 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +114 +20 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +92 +123 +116 +23 +-60 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +21 +-61 +-127 +-127 +-17 +91 +123 +116 +23 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +116 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +113 +20 +-62 +-127 +-127 +-18 +90 +123 +115 +21 +-61 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-34 +83 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-33 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +86 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +86 +123 +117 +23 +-60 +-127 +-127 +-13 +94 +123 +118 +24 +-59 +-127 +-127 +-15 +93 +123 +117 +23 +-60 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-18 +90 +123 +115 +21 +-62 +-127 +-127 +-18 +91 +123 +116 +22 +-61 +-127 +-127 +-18 +90 +123 +114 +20 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +115 +22 +-61 +-127 +-127 +-18 +90 +123 +113 +20 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +116 +22 +-61 +-127 +-127 +-18 +89 +123 +113 +20 +-63 +-127 +-127 +-19 +89 +123 +113 +20 +-62 +-127 +-127 +-18 +90 +123 +115 +22 +-61 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-61 +-127 +-127 +-18 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +20 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +115 +22 +-61 +-127 +-127 +-16 +91 +123 +116 +22 +-60 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-18 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +116 +23 +-60 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +113 +20 +-62 +-127 +-127 +-18 +90 +123 +115 +22 +-61 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +116 +22 +-61 +-127 +-127 +-18 +90 +123 +113 +20 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-16 +91 +123 +116 +22 +-61 +-127 +-127 +-17 +91 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-33 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-32 +85 +123 +114 +21 +-62 +-127 +-127 +-15 +92 +123 +116 +23 +-60 +-127 +-127 +-16 +92 +123 +116 +22 +-61 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +115 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +115 +21 +-61 +-127 +-127 +-17 +90 +123 +115 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +115 +22 +-61 +-127 +-127 +-17 +90 +123 +115 +21 +-61 +-127 +-127 +-18 +90 +123 +114 +20 +-62 +-127 +-127 +-16 +91 +123 +116 +22 +-61 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +115 +22 +-61 +-127 +-127 +-18 +91 +123 +116 +23 +-60 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-61 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +89 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +116 +23 +-60 +-127 +-127 +-18 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +92 +123 +116 +23 +-60 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +117 +23 +-60 +-127 +-127 +-127 +-23 +95 +123 +123 +123 +44 +-41 +-118 +-127 +-127 +-25 +92 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-28 +88 +123 +123 +123 +37 +-47 +-123 +-127 +-127 +-30 +86 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-30 +85 +123 +123 +123 +37 +-48 +-123 +-127 +-24 +81 +123 +104 +12 +-70 +-127 +-127 +-25 +83 +123 +107 +15 +-67 +-127 +-127 +-22 +86 +123 +111 +18 +-64 +-127 +-127 +-21 +88 +123 +111 +18 +-64 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +115 +21 +-62 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +115 +22 +-61 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-19 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +115 +22 +-61 +-127 +-127 +-17 +90 +123 +113 +20 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +116 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +115 +21 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +21 +-61 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-16 +91 +123 +115 +21 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +116 +23 +-60 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-16 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +115 +22 +-61 +-127 +-127 +-127 +-24 +93 +123 +123 +123 +43 +-42 +-119 +-127 +-127 +-25 +90 +123 +123 +123 +39 +-46 +-122 +-127 +-127 +-29 +88 +123 +123 +123 +36 +-48 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-48 +-124 +-127 +-24 +81 +123 +104 +12 +-70 +-127 +-127 +-25 +84 +123 +108 +16 +-67 +-127 +-127 +-22 +87 +123 +112 +19 +-63 +-127 +-127 +-20 +88 +123 +112 +19 +-64 +-127 +-127 +-19 +89 +123 +113 +20 +-62 +-127 +-127 +-18 +90 +123 +116 +23 +-60 +-127 +-127 +-127 +-23 +95 +123 +123 +123 +43 +-42 +-118 +-127 +-127 +-25 +92 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-28 +88 +123 +123 +123 +37 +-47 +-123 +-127 +-127 +-29 +87 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-31 +86 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +84 +123 +123 +123 +37 +-48 +-124 +-127 +-25 +81 +123 +104 +12 +-70 +-127 +-127 +-25 +83 +123 +107 +14 +-68 +-127 +-127 +-23 +86 +123 +111 +18 +-64 +-127 +-127 +-20 +88 +123 +111 +18 +-65 +-127 +-127 +-19 +89 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +113 +20 +-62 +-127 +-127 +-19 +90 +123 +123 +123 +32 +-53 +-127 +-127 +-127 +-35 +83 +123 +123 +123 +33 +-51 +-126 +-127 +-127 +-33 +83 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +86 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-31 +86 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-31 +86 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +86 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-31 +86 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-31 +86 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-31 +86 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-31 +86 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +86 +123 +115 +22 +-61 +-127 +-127 +-14 +94 +123 +118 +24 +-59 +-127 +-127 +-15 +93 +123 +116 +22 +-60 +-127 +-127 +-15 +91 +123 +115 +21 +-61 +-127 +-127 +-17 +92 +123 +115 +21 +-61 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +92 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-34 +83 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-33 +83 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-33 +83 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-33 +84 +123 +123 +123 +34 +-50 +-125 +-127 +-127 +-32 +84 +123 +115 +22 +-61 +-127 +-127 +-15 +93 +123 +117 +23 +-60 +-127 +-127 +-15 +92 +123 +117 +23 +-60 +-127 +-127 +-16 +92 +123 +117 +23 +-60 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +117 +23 +-60 +-127 +-127 +-127 +-22 +95 +123 +123 +123 +43 +-42 +-118 +-127 +-127 +-25 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-28 +88 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-29 +87 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-30 +86 +123 +123 +123 +37 +-47 +-123 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-125 +-127 +-25 +82 +123 +104 +12 +-70 +-127 +-127 +-25 +83 +123 +108 +15 +-67 +-127 +-127 +-22 +86 +123 +112 +19 +-64 +-127 +-127 +-21 +87 +123 +112 +19 +-64 +-127 +-127 +-19 +90 +123 +113 +20 +-62 +-127 +-127 +-18 +90 +123 +115 +22 +-61 +-127 +-127 +-18 +89 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +116 +23 +-60 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +123 +123 +32 +-52 +-127 +-127 +-127 +-35 +82 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-33 +82 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-31 +86 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +86 +123 +117 +23 +-60 +-127 +-127 +-13 +95 +123 +118 +24 +-59 +-127 +-127 +-15 +93 +123 +117 +23 +-60 +-127 +-127 +-16 +92 +123 +115 +21 +-61 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-34 +82 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +83 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +116 +22 +-61 +-127 +-127 +-14 +94 +123 +117 +24 +-60 +-127 +-127 +-15 +93 +123 +115 +22 +-61 +-127 +-127 +-16 +92 +123 +116 +22 +-61 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +117 +23 +-60 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +43 +-42 +-118 +-127 +-127 +-24 +91 +123 +123 +123 +39 +-46 +-121 +-127 +-127 +-28 +87 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +36 +-48 +-124 +-127 +-127 +-31 +84 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-30 +85 +123 +123 +123 +34 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +84 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-50 +-125 +-127 +-127 +-31 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +34 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-48 +-124 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-48 +-124 +-127 +-24 +82 +123 +104 +11 +-70 +-127 +-127 +-25 +84 +123 +108 +15 +-67 +-127 +-127 +-22 +86 +123 +111 +18 +-64 +-127 +-127 +-20 +88 +123 +112 +19 +-64 +-127 +-127 +-19 +89 +123 +113 +20 +-62 +-127 +-127 +-19 +90 +123 +115 +22 +-61 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +123 +123 +32 +-52 +-127 +-127 +-127 +-35 +82 +123 +123 +123 +32 +-52 +-127 +-127 +-127 +-33 +83 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-33 +83 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +115 +21 +-61 +-127 +-127 +-14 +94 +123 +118 +24 +-59 +-127 +-127 +-15 +93 +123 +116 +23 +-60 +-127 +-127 +-16 +92 +123 +116 +22 +-61 +-127 +-127 +-16 +93 +123 +115 +22 +-61 +-127 +-127 +-16 +91 +123 +116 +23 +-60 +-127 +-127 +-17 +91 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-34 +83 +123 +123 +123 +33 +-51 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +86 +123 +117 +23 +-60 +-127 +-127 +-13 +94 +123 +118 +24 +-59 +-127 +-127 +-15 +94 +123 +117 +23 +-60 +-127 +-127 +-16 +91 +123 +116 +23 +-61 +-127 +-127 +-16 +92 +123 +116 +22 +-61 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +117 +23 +-60 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +43 +-42 +-118 +-127 +-127 +-25 +91 +123 +123 +123 +39 +-45 +-121 +-127 +-127 +-27 +89 +123 +123 +123 +37 +-47 +-123 +-127 +-127 +-30 +87 +123 +123 +123 +36 +-48 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +37 +-48 +-123 +-127 +-127 +-30 +86 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +86 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-49 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +36 +-49 +-124 +-127 +-25 +82 +123 +103 +11 +-71 +-127 +-127 +-26 +83 +123 +108 +16 +-67 +-127 +-127 +-22 +86 +123 +112 +19 +-64 +-127 +-127 +-20 +88 +123 +112 +19 +-64 +-127 +-127 +-19 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +116 +23 +-60 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +43 +-42 +-118 +-127 +-127 +-25 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-27 +88 +123 +123 +123 +39 +-46 +-122 +-127 +-127 +-28 +87 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +38 +-47 +-123 +-127 +-24 +82 +123 +105 +12 +-70 +-127 +-127 +-25 +84 +123 +108 +15 +-67 +-127 +-127 +-22 +86 +123 +111 +18 +-65 +-127 +-127 +-20 +87 +123 +111 +19 +-64 +-127 +-127 +-20 +89 +123 +112 +19 +-63 +-127 +-127 +-19 +89 +123 +113 +20 +-62 +-127 +-127 +-18 +90 +123 +112 +19 +-63 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-61 +-127 +-127 +-17 +91 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-34 +83 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +36 +-49 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +84 +123 +115 +22 +-61 +-127 +-127 +-15 +93 +123 +116 +23 +-60 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +117 +24 +-59 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-16 +91 +123 +115 +21 +-61 +-127 +-127 +-16 +92 +123 +116 +23 +-60 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +116 +23 +-60 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-18 +90 +123 +114 +20 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +20 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +115 +22 +-61 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +116 +23 +-60 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +116 +23 +-60 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +115 +22 +-61 +-127 +-127 +-18 +91 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +113 +20 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +90 +123 +115 +22 +-61 +-127 +-127 +-17 +92 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +116 +22 +-61 +-127 +-127 +-18 +90 +123 +114 +20 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +89 +123 +114 +21 +-62 +-127 +-127 +-19 +89 +123 +112 +19 +-63 +-127 +-127 +-19 +89 +123 +113 +20 +-62 +-127 +-127 +-19 +90 +123 +115 +22 +-61 +-127 +-127 +-17 +90 +123 +113 +20 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +115 +22 +-61 +-127 +-127 +-16 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +92 +123 +115 +22 +-61 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +116 +23 +-60 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +116 +23 +-60 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-61 +-127 +-127 +-18 +90 +123 +115 +22 +-61 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +20 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +115 +22 +-61 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-18 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +116 +22 +-61 +-127 +-127 +-16 +92 +123 +115 +21 +-61 +-127 +-127 +-17 +90 +123 +115 +22 +-61 +-127 +-127 +-18 +91 +123 +117 +23 +-60 +-127 +-127 +-127 +-22 +95 +123 +123 +123 +44 +-41 +-118 +-127 +-127 +-24 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-29 +88 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +36 +-48 +-124 +-127 +-127 +-31 +85 +123 +123 +123 +37 +-48 +-124 +-127 +-24 +82 +123 +104 +12 +-70 +-127 +-127 +-25 +83 +123 +108 +16 +-67 +-127 +-127 +-22 +87 +123 +112 +19 +-64 +-127 +-127 +-21 +88 +123 +112 +19 +-64 +-127 +-127 +-19 +90 +123 +113 +20 +-63 +-127 +-127 +-17 +91 +123 +116 +23 +-60 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +113 +20 +-63 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +115 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +115 +22 +-61 +-127 +-127 +-18 +90 +123 +114 +20 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +115 +22 +-61 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +116 +22 +-61 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +116 +23 +-60 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-61 +-127 +-127 +-16 +91 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-34 +82 +123 +123 +123 +33 +-52 +-126 +-127 +-127 +-33 +83 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-33 +83 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-33 +84 +123 +123 +123 +34 +-50 +-126 +-127 +-127 +-33 +84 +123 +114 +21 +-62 +-127 +-127 +-16 +92 +123 +117 +23 +-60 +-127 +-127 +-16 +92 +123 +114 +21 +-62 +-127 +-127 +-16 +92 +123 +116 +23 +-60 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +116 +23 +-60 +-127 +-127 +-17 +91 +123 +115 +21 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-16 +92 +123 +117 +23 +-60 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-61 +-127 +-127 +-17 +90 +123 +116 +23 +-60 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +114 +20 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +116 +23 +-60 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +116 +23 +-60 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +116 +23 +-60 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +20 +-62 +-127 +-127 +-18 +91 +123 +115 +22 +-61 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +123 +123 +32 +-53 +-127 +-127 +-127 +-35 +83 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-33 +84 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-50 +-125 +-127 +-127 +-31 +85 +123 +123 +123 +35 +-50 +-125 +-127 +-127 +-31 +85 +123 +115 +22 +-61 +-127 +-127 +-13 +94 +123 +118 +24 +-59 +-127 +-127 +-15 +93 +123 +117 +23 +-60 +-127 +-127 +-16 +92 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +90 +123 +116 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +20 +-62 +-127 +-127 +-17 +90 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +115 +22 +-61 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +116 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +115 +22 +-61 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-19 +90 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +20 +-62 +-127 +-127 +-18 +90 +123 +114 +20 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +113 +20 +-63 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +115 +21 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +90 +123 +113 +20 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +116 +23 +-60 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +43 +-42 +-118 +-127 +-127 +-24 +91 +123 +123 +123 +39 +-45 +-121 +-127 +-127 +-28 +88 +123 +123 +123 +37 +-48 +-124 +-127 +-127 +-30 +86 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-30 +85 +123 +123 +123 +37 +-48 +-123 +-127 +-24 +82 +123 +104 +12 +-70 +-127 +-127 +-26 +83 +123 +108 +15 +-67 +-127 +-127 +-21 +87 +123 +111 +18 +-64 +-127 +-127 +-19 +88 +123 +112 +19 +-63 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +21 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +115 +21 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +90 +123 +114 +20 +-62 +-127 +-127 +-19 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +115 +22 +-61 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +115 +21 +-61 +-127 +-127 +-17 +91 +123 +116 +23 +-60 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +21 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +113 +20 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-16 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-61 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-18 +91 +123 +115 +21 +-62 +-127 +-127 +-16 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +117 +23 +-60 +-127 +-127 +-127 +-23 +94 +123 +123 +123 +44 +-41 +-118 +-127 +-127 +-24 +91 +123 +123 +123 +40 +-45 +-121 +-127 +-127 +-28 +88 +123 +123 +123 +37 +-47 +-123 +-127 +-127 +-30 +86 +123 +123 +123 +36 +-48 +-124 +-127 +-127 +-30 +85 +123 +123 +123 +37 +-48 +-124 +-127 +-24 +82 +123 +104 +11 +-70 +-127 +-127 +-25 +83 +123 +108 +15 +-67 +-127 +-127 +-22 +87 +123 +111 +19 +-64 +-127 +-127 +-20 +87 +123 +111 +19 +-64 +-127 +-127 +-19 +89 +123 +112 +19 +-63 +-127 +-127 +-18 +89 +123 +115 +21 +-61 +-127 +-127 +-17 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-18 +91 +123 +113 +20 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +113 +20 +-62 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-19 +89 +123 +114 +20 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +89 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +92 +123 +115 +21 +-62 +-127 +-127 +-16 +92 +123 +117 +24 +-59 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +92 +123 +115 +22 +-61 +-127 +-127 +-16 +92 +123 +118 +24 +-59 +-127 +-127 +-16 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +113 +20 +-63 +-127 +-127 +-17 +91 +123 +115 +21 +-61 +-127 +-127 +-17 +92 +123 +114 +21 +-62 +-127 +-127 +-17 +89 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +123 +123 +32 +-52 +-127 +-127 +-127 +-34 +82 +123 +123 +123 +33 +-52 +-127 +-127 +-127 +-33 +82 +123 +123 +123 +36 +-49 +-124 +-127 +-127 +-33 +83 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-32 +84 +123 +123 +123 +34 +-51 +-126 +-127 +-127 +-31 +85 +123 +116 +22 +-61 +-127 +-127 +-15 +93 +123 +117 +23 +-60 +-127 +-127 +-16 +92 +123 +116 +22 +-61 +-127 +-127 +-16 +92 +123 +116 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +92 +123 +116 +23 +-60 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-17 +90 +123 +116 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +115 +22 +-61 +-127 +-127 +-17 +90 +123 +115 +22 +-61 +-127 +-127 +-18 +90 +123 +113 +20 +-62 +-127 +-127 +-18 +90 +123 +113 +20 +-62 +-127 +-127 +-18 +89 +123 +115 +21 +-61 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +115 +21 +-61 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +22 +-61 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-61 +-127 +-127 +-16 +92 +123 +115 +21 +-61 +-127 +-127 +-17 +91 +123 +116 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +91 +123 +116 +23 +-60 +-127 +-127 +-17 +91 +123 +115 +21 +-62 +-127 +-127 +-17 +90 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +116 +22 +-61 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-17 +91 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +116 +22 +-61 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +113 +20 +-63 +-127 +-127 +-18 +89 +123 +113 +20 +-63 +-127 +-127 +-19 +90 +123 +114 +21 +-62 +-127 +-127 +-18 +90 +123 +115 +22 +-61 +-127 +-127 +-18 +90 +123 +123 +123 +32 +-52 +-127 +-127 +-127 +-34 +82 +123 +123 +123 +33 +-52 +-126 +-127 +-127 +-33 +83 diff --git a/traces/lf_t5577_securakey.pm3 b/traces/lf_t5577_securakey.pm3 new file mode 100644 index 000000000..dfb65bbab --- /dev/null +++ b/traces/lf_t5577_securakey.pm3 @@ -0,0 +1,10000 @@ +-127 +-123 +-114 +-106 +-99 +-92 +-85 +-79 +-74 +-69 +-64 +-60 +-55 +68 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +123 +116 +109 +101 +94 +87 +81 +75 +70 +65 +62 +57 +53 +49 +46 +-5 +-86 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-107 +-100 +-92 +-86 +-80 +-75 +-70 +-65 +-61 +-55 +68 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +120 +26 +-58 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-63 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +118 +110 +102 +95 +89 +82 +77 +72 +68 +62 +58 +55 +51 +47 +44 +41 +39 +-11 +-91 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-116 +-109 +-101 +-94 +-87 +-82 +-75 +-70 +-65 +-61 +-56 +67 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +124 +115 +108 +100 +93 +85 +81 +76 +70 +65 +62 +57 +53 +49 +46 +-5 +-86 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-114 +-107 +-100 +-93 +-86 +-80 +-75 +-69 +-64 +-60 +-55 +69 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +120 +27 +-57 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-64 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +118 +110 +103 +95 +89 +83 +78 +72 +68 +63 +58 +54 +51 +47 +44 +41 +38 +-12 +-92 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-103 +117 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +79 +-10 +-91 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-111 +-102 +-95 +-88 +-82 +-76 +-71 +-66 +-61 +-57 +-54 +-49 +74 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +125 +117 +110 +102 +95 +89 +83 +76 +72 +67 +62 +58 +55 +51 +48 +-3 +-84 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-115 +-107 +-99 +-92 +-86 +-80 +-74 +-69 +-64 +-60 +-55 +68 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +119 +26 +-58 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-64 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +89 +-2 +-83 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-72 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +125 +117 +108 +101 +94 +89 +82 +77 +72 +66 +61 +58 +54 +50 +47 +44 +40 +38 +-12 +-92 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-116 +-108 +-100 +-94 +-87 +-81 +-75 +-70 +-65 +-61 +-57 +68 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +120 +26 +-58 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-63 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +89 +-1 +-82 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-72 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +87 +-3 +-84 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-71 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +125 +117 +109 +101 +94 +88 +81 +76 +71 +66 +61 +58 +54 +50 +47 +44 +41 +38 +-13 +-93 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-103 +117 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +79 +-10 +-90 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-110 +-102 +-95 +-88 +-82 +-76 +-71 +-66 +-62 +-57 +-53 +-50 +74 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +120 +27 +-57 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-63 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +89 +-1 +-82 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-71 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +88 +-2 +-84 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-72 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +86 +-4 +-85 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-72 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +86 +-4 +-85 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-72 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +86 +-3 +-85 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-72 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +87 +-3 +-84 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-72 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +87 +-3 +-84 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-72 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +87 +-3 +-84 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-73 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +87 +-3 +-84 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-71 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +87 +-3 +-84 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-73 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +87 +-3 +-84 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-73 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +87 +-3 +-84 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-73 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +86 +-4 +-85 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-72 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +87 +-3 +-84 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-72 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +87 +-3 +-84 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-73 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +87 +-3 +-84 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-72 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +86 +-4 +-85 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-72 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +87 +-3 +-84 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-72 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +86 +-4 +-85 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-73 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +125 +116 +108 +101 +93 +87 +81 +76 +70 +66 +61 +56 +53 +50 +46 +43 +40 +37 +-13 +-93 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-102 +118 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +78 +-11 +-91 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-74 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +87 +-3 +-84 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-73 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +88 +-3 +-84 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-73 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +87 +-3 +-84 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-73 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +86 +-4 +-85 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-72 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +86 +-4 +-85 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-72 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +86 +-4 +-85 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-73 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +87 +-3 +-84 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-107 +-99 +-93 +-86 +-80 +-74 +-69 +-64 +-59 +-55 +-52 +-47 +76 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +122 +28 +-56 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-64 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +119 +110 +103 +96 +90 +84 +78 +72 +67 +62 +59 +55 +51 +47 +44 +41 +39 +-10 +-91 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-116 +-108 +-100 +-94 +-87 +-82 +-75 +-71 +-65 +-60 +-56 +68 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +124 +116 +108 +100 +94 +87 +81 +75 +71 +66 +61 +57 +53 +49 +46 +-5 +-86 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-101 +120 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +80 +-10 +-90 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-117 +-109 +-102 +-95 +-88 +-82 +-77 +-71 +-66 +-62 +-57 +-53 +-50 +74 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +117 +109 +101 +95 +88 +83 +77 +71 +66 +62 +57 +53 +51 +48 +-4 +-85 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-107 +-99 +-93 +-85 +-79 +-74 +-69 +-64 +-59 +-55 +69 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +120 +27 +-57 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-64 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +88 +-3 +-84 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-71 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +87 +-3 +-84 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-71 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +87 +-3 +-84 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-72 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +86 +-4 +-85 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-73 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +87 +-3 +-84 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-72 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +87 +-3 +-84 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-73 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +87 +-3 +-84 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-72 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +88 +-3 +-84 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-72 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +87 +-3 +-84 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-72 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +88 +-3 +-84 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-72 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +87 +-3 +-84 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-72 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +87 +-3 +-84 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-74 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +86 +-4 +-85 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-73 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +87 +-3 +-84 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-72 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +86 +-4 +-85 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-73 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +87 +-3 +-84 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-72 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +87 +-3 +-84 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-72 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +86 +-4 +-85 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-72 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +86 +-4 +-85 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-72 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +125 +118 +110 +102 +94 +88 +82 +76 +71 +67 +62 +58 +54 +51 +47 +44 +41 +38 +-11 +-91 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-103 +118 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +80 +-9 +-90 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-118 +-110 +-102 +-96 +-88 +-82 +-77 +-72 +-66 +-62 +-57 +-53 +-50 +73 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +125 +116 +109 +101 +94 +88 +82 +76 +71 +66 +62 +58 +55 +51 +47 +-4 +-85 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-107 +-100 +-93 +-86 +-81 +-74 +-69 +-65 +-60 +-55 +68 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +125 +116 +108 +100 +94 +88 +82 +76 +71 +66 +62 +57 +54 +49 +46 +-3 +-84 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-101 +119 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +79 +-10 +-90 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-108 +-101 +-95 +-87 +-81 +-76 +-71 +-65 +-61 +-56 +-53 +-49 +74 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +125 +116 +108 +100 +94 +87 +81 +76 +71 +65 +61 +56 +53 +49 +46 +-4 +-86 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-102 +119 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +82 +-8 +-88 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-73 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +86 +-4 +-85 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-74 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +85 +-5 +-86 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-107 +-100 +-93 +-86 +-80 +-75 +-69 +-64 +-60 +-55 +-51 +-48 +76 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +118 +110 +101 +95 +89 +82 +76 +72 +66 +62 +58 +54 +50 +47 +-3 +-84 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-107 +-100 +-93 +-86 +-80 +-74 +-70 +-65 +-60 +-55 +69 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +124 +115 +108 +100 +94 +87 +81 +76 +71 +65 +61 +56 +53 +49 +47 +-5 +-86 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-107 +-100 +-94 +-86 +-80 +-75 +-70 +-64 +-60 +-55 +69 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +120 +26 +-58 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-64 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +119 +110 +103 +95 +89 +82 +77 +72 +67 +62 +58 +55 +51 +47 +44 +41 +38 +-12 +-92 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-115 +-108 +-101 +-93 +-86 +-81 +-75 +-69 +-64 +-61 +-56 +68 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +125 +116 +108 +100 +94 +87 +81 +76 +71 +66 +61 +57 +54 +50 +47 +-4 +-85 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-107 +-99 +-93 +-86 +-80 +-75 +-70 +-65 +-61 +-56 +68 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +120 +26 +-58 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-64 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +118 +110 +103 +96 +89 +83 +78 +72 +67 +63 +58 +54 +51 +47 +44 +41 +39 +-12 +-92 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-102 +119 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +79 +-10 +-90 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-117 +-109 +-101 +-94 +-89 +-82 +-75 +-70 +-66 +-61 +-56 +-53 +-49 +74 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +125 +116 +108 +100 +93 +86 +81 +75 +71 +66 +61 +57 +53 +49 +46 +-4 +-85 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-114 +-106 +-99 +-92 +-85 +-79 +-74 +-69 +-64 +-59 +-55 +69 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +120 +27 +-57 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-63 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +88 +-2 +-83 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-72 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +125 +117 +108 +102 +94 +87 +82 +76 +71 +66 +62 +58 +53 +50 +47 +44 +41 +38 +-12 +-92 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-116 +-108 +-101 +-93 +-86 +-81 +-76 +-70 +-64 +-61 +-56 +68 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +119 +26 +-58 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-64 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +88 +-2 +-83 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-72 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +88 +-2 +-84 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-72 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +125 +118 +110 +102 +95 +89 +82 +76 +71 +67 +62 +59 +54 +51 +47 +45 +41 +38 +-13 +-93 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-102 +118 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +80 +-10 +-90 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-118 +-110 +-101 +-94 +-87 +-83 +-76 +-70 +-65 +-62 +-57 +-53 +-50 +74 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +120 +27 +-57 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-64 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +89 +-1 +-83 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-71 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +87 +-3 +-84 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-72 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +87 +-3 +-84 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-72 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +87 +-3 +-84 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-73 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +86 +-4 +-85 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-72 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +86 +-4 +-85 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-72 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +88 +-2 +-84 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-72 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +87 +-3 +-84 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-72 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +87 +-3 +-84 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-74 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +87 +-3 +-84 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-73 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +86 +-4 +-85 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-72 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +87 +-3 +-84 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-72 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +87 +-3 +-84 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-72 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +87 +-3 +-84 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-72 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +86 +-4 +-85 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-73 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +86 +-4 +-85 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-72 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +87 +-3 +-84 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-73 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +86 +-4 +-85 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-73 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +87 +-3 +-84 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-72 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +125 +117 +109 +101 +94 +88 +82 +76 +71 +66 +61 +57 +53 +50 +46 +44 +40 +38 +-12 +-92 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-103 +117 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +78 +-11 +-91 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-74 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +86 +-4 +-85 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-72 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +88 +-2 +-83 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-72 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +87 +-3 +-84 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-73 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +86 +-4 +-85 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-73 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +86 +-4 +-85 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-72 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +88 +-2 +-83 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-73 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +86 +-4 +-85 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-116 +-108 +-101 +-93 +-86 +-81 +-75 +-70 +-65 +-61 +-56 +-52 +-48 +75 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +122 +28 +-56 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-63 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +119 +110 +102 +96 +89 +82 +77 +72 +67 +63 +59 +54 +51 +47 +44 +41 +39 +-10 +-91 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-116 +-108 +-100 +-94 +-86 +-81 +-75 +-70 +-65 +-61 +-57 +67 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +124 +116 +108 +100 +93 +87 +81 +75 +70 +65 +61 +56 +53 +49 +46 +-5 +-86 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-101 +120 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +80 +-10 +-90 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-108 +-101 +-94 +-87 +-81 +-74 +-71 +-65 +-60 +-56 +-52 +-48 +75 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +117 +109 +102 +94 +88 +82 +77 +72 +66 +62 +57 +54 +50 +46 +-5 +-86 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-115 +-107 +-99 +-93 +-86 +-80 +-74 +-70 +-65 +-60 +-55 +68 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +119 +26 +-58 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-64 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +89 +-1 +-82 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-72 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +87 +-3 +-84 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-72 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +87 +-3 +-84 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-73 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +86 +-4 +-85 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-72 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +87 +-3 +-84 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-73 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +87 +-3 +-84 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-72 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +88 +-3 +-84 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-72 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +87 +-3 +-84 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-72 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +86 +-4 +-85 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-72 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +87 +-3 +-84 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-73 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +87 +-3 +-84 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-72 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +87 +-3 +-84 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-72 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +87 +-3 +-84 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-72 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +87 +-3 +-84 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-73 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +87 +-3 +-84 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-73 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +87 +-3 +-84 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-72 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +87 +-3 +-84 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-72 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +86 +-4 +-84 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-73 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +86 +-4 +-85 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-71 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +117 +109 +102 +94 +88 +81 +76 +72 +67 +62 +58 +54 +51 +47 +44 +40 +38 +-11 +-91 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-102 +118 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +80 +-10 +-90 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-110 +-102 +-95 +-88 +-83 +-76 +-71 +-67 +-62 +-57 +-53 +-49 +74 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +125 +116 +109 +101 +95 +87 +82 +76 +71 +66 +62 +58 +53 +50 +47 +-5 +-86 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-108 +-99 +-92 +-86 +-80 +-74 +-69 +-64 +-60 +-55 +68 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +124 +114 +108 +101 +94 +88 +82 +76 +71 +67 +62 +57 +54 +50 +47 +-3 +-84 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-101 +118 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +80 +-10 +-90 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-109 +-101 +-95 +-88 +-82 +-76 +-71 +-66 +-61 +-57 +-53 +-49 +73 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +116 +109 +101 +94 +87 +82 +76 +71 +66 +62 +56 +53 +50 +46 +-4 +-85 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-101 +120 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +81 +-8 +-88 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-74 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +86 +-4 +-85 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-73 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +85 +-5 +-86 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-116 +-108 +-100 +-94 +-87 +-81 +-75 +-71 +-65 +-61 +-57 +-53 +-48 +74 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +117 +110 +102 +95 +88 +83 +76 +71 +66 +62 +58 +54 +51 +47 +-2 +-84 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-114 +-107 +-99 +-92 +-85 +-80 +-75 +-69 +-64 +-60 +-55 +69 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +125 +116 +109 +101 +94 +87 +81 +76 +71 +66 +62 +58 +53 +50 +47 +-5 +-86 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-107 +-100 +-94 +-87 +-81 +-75 +-69 +-65 +-61 +-56 +68 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +120 +27 +-58 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-63 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +118 +110 +103 +95 +89 +83 +78 +72 +67 +62 +58 +54 +51 +47 +44 +41 +39 +-12 +-92 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-116 +-108 +-101 +-95 +-87 +-81 +-76 +-71 +-66 +-61 +-56 +68 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +124 +115 +108 +100 +92 +86 +80 +74 +70 +65 +60 +56 +52 +48 +44 +-5 +-86 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-107 +-99 +-93 +-86 +-80 +-74 +-69 +-64 +-60 +-56 +68 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +121 +27 +-57 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-63 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +119 +110 +103 +96 +90 +83 +78 +72 +67 +63 +59 +54 +52 +47 +44 +42 +38 +-11 +-92 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-103 +117 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +80 +-9 +-90 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-109 +-101 +-95 +-88 +-82 +-76 +-71 +-66 +-61 +-57 +-53 +-49 +74 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +125 +116 +109 +102 +94 +87 +82 +76 +71 +66 +62 +57 +53 +50 +46 +-5 +-86 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-108 +-100 +-93 +-86 +-80 +-74 +-70 +-65 +-60 +-56 +68 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +120 +26 +-58 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-64 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +89 +-1 +-82 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-72 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +117 +109 +101 +93 +88 +82 +76 +71 +67 +62 +58 +54 +50 +46 +44 +40 +38 +-12 +-92 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-116 +-108 +-100 +-93 +-87 +-81 +-75 +-70 +-65 +-60 +-56 +68 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +120 +26 +-58 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-63 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +89 +-2 +-83 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-72 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +86 +-4 +-85 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-72 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +125 +117 +108 +101 +94 +88 +81 +76 +71 +66 +61 +58 +53 +49 +46 +44 +40 +38 +-13 +-93 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-102 +118 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +79 +-10 +-90 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-109 +-102 +-95 +-88 +-82 +-77 +-71 +-66 +-61 +-57 +-53 +-49 +74 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +121 +28 +-57 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-63 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +88 +-2 +-83 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-72 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +86 +-4 +-85 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-72 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +87 +-3 +-84 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-71 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +88 +-2 +-83 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-72 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +86 +-4 +-85 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-72 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +86 +-4 +-85 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-72 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +87 +-3 +-84 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-72 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +87 +-3 +-84 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-72 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +86 +-4 +-85 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-72 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +86 +-4 +-85 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-72 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +87 +-3 +-84 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-72 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +87 +-3 +-84 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-71 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +87 +-3 +-84 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-72 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +87 +-3 +-84 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-73 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +86 +-4 +-85 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-73 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +86 +-4 +-85 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-71 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +87 +-3 +-84 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-72 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +86 +-4 +-85 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-74 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +85 +-5 +-86 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-72 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +125 +117 +109 +102 +95 +88 +82 +77 +71 +66 +62 +58 +53 +50 +47 +44 +41 +38 +-12 +-92 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-103 +118 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +79 +-10 +-90 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-75 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +85 +-5 +-86 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-73 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +87 +-3 +-84 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-72 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +87 +-3 +-84 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-71 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +86 +-4 +-85 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-73 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +86 +-4 +-85 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-73 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +88 +-2 +-83 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-73 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +86 +-4 +-85 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-116 +-108 +-100 +-93 +-87 +-80 +-75 +-70 +-65 +-60 +-56 +-53 +-48 +75 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +121 +28 +-56 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-64 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +118 +110 +103 +95 +89 +83 +78 +72 +67 +62 +59 +55 +51 +47 +45 +41 +38 +-10 +-91 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-116 +-108 +-100 +-94 +-87 +-81 +-75 +-70 +-65 +-61 +-57 +67 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +126 +125 +116 +108 +101 +94 +87 +82 +76 +71 +66 +62 +57 +53 +50 +46 +-5 +-86 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-101 +120 +126 +126 +126 +126 +126 diff --git a/traces/lf_t5577_viking.pm3 b/traces/lf_t5577_viking.pm3 new file mode 100644 index 000000000..1878362c7 --- /dev/null +++ b/traces/lf_t5577_viking.pm3 @@ -0,0 +1,10000 @@ +-127 +-127 +-127 +-127 +-109 +112 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +115 +108 +100 +93 +86 +80 +74 +70 +65 +61 +6 +-76 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +55 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +100 +9 +-74 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +91 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +112 +20 +-64 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-64 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-112 +-105 +-98 +-91 +-85 +41 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +68 +-20 +-99 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-109 +112 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +116 +108 +101 +94 +87 +81 +75 +71 +66 +61 +4 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-114 +-107 +-99 +27 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +64 +-24 +-102 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-110 +111 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +118 +25 +-59 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +96 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +96 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-64 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-64 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +94 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +96 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +115 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +94 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-64 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +112 +20 +-64 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +94 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +112 +20 +-64 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +115 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +121 +112 +105 +96 +90 +83 +77 +72 +68 +63 +58 +3 +-79 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +54 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +100 +8 +-74 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-107 +-100 +-93 +-86 +40 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +118 +110 +103 +95 +88 +82 +76 +19 +-65 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-112 +-105 +-97 +29 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +65 +-23 +-101 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-109 +111 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +118 +25 +-59 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +97 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +120 +111 +104 +97 +90 +84 +78 +72 +67 +63 +58 +1 +-80 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +55 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +100 +8 +-74 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-115 +-107 +-99 +-93 +-86 +40 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +68 +-20 +-99 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-108 +113 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +116 +108 +100 +94 +88 +82 +76 +70 +66 +61 +4 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +56 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +100 +9 +-74 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-108 +-100 +-93 +-87 +39 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +118 +109 +102 +95 +88 +81 +76 +20 +-64 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +101 +9 +-73 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +93 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +112 +19 +-64 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-64 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-114 +-106 +-99 +-92 +-86 +40 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +67 +-21 +-99 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-108 +113 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +116 +108 +101 +94 +88 +82 +76 +71 +65 +61 +6 +-76 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +55 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +100 +9 +-74 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +90 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +111 +19 +-65 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-64 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-64 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +94 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +111 +19 +-64 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-112 +-105 +-97 +-90 +-84 +41 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +68 +-20 +-98 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-108 +113 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +116 +108 +100 +93 +86 +80 +74 +70 +65 +60 +3 +-79 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-114 +-107 +-100 +27 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +64 +-24 +-102 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-111 +110 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +118 +24 +-60 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +97 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +115 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +97 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +94 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-64 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-64 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +94 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +121 +112 +104 +97 +90 +84 +79 +73 +67 +63 +58 +3 +-79 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +54 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +100 +9 +-74 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-115 +-108 +-100 +-93 +-87 +40 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +118 +110 +102 +94 +89 +82 +76 +19 +-65 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-112 +-105 +-97 +29 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +65 +-23 +-101 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-109 +112 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +119 +25 +-59 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +97 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +121 +112 +105 +97 +90 +84 +80 +73 +68 +63 +58 +2 +-80 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +54 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +100 +8 +-74 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-108 +-100 +-94 +-87 +39 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +68 +-21 +-99 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-109 +112 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +117 +109 +101 +93 +87 +82 +76 +71 +65 +60 +4 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +56 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +100 +9 +-74 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-107 +-100 +-94 +-87 +40 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +118 +110 +102 +95 +89 +82 +77 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +100 +8 +-74 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +91 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +112 +19 +-64 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +115 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-113 +-105 +-98 +-91 +-85 +41 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +69 +-20 +-98 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-108 +113 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +116 +108 +101 +94 +87 +81 +75 +70 +65 +61 +6 +-76 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +55 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +100 +9 +-73 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +91 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +112 +19 +-64 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +94 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-64 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +96 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-64 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-113 +-106 +-98 +-92 +-85 +41 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +68 +-20 +-99 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-108 +113 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +116 +108 +100 +94 +87 +81 +75 +71 +65 +60 +4 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-115 +-108 +-100 +27 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +64 +-24 +-102 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-109 +112 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +119 +26 +-58 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +98 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +96 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +96 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +112 +19 +-65 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +94 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-64 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-64 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-64 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-64 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +121 +112 +104 +97 +91 +84 +79 +73 +68 +63 +59 +4 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +55 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +101 +9 +-73 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-108 +-100 +-93 +-87 +39 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +117 +109 +102 +94 +88 +82 +76 +19 +-65 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-113 +-105 +-98 +28 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +65 +-23 +-101 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-109 +112 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +118 +25 +-59 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +98 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +121 +112 +104 +97 +90 +84 +78 +73 +68 +63 +59 +2 +-80 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +55 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +100 +9 +-74 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-114 +-108 +-100 +-93 +-86 +39 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +67 +-21 +-99 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-109 +112 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +116 +109 +101 +94 +86 +81 +75 +69 +65 +61 +4 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +55 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +100 +8 +-74 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-115 +-107 +-100 +-93 +-86 +40 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +118 +109 +103 +95 +89 +82 +76 +20 +-64 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +101 +9 +-73 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +92 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +112 +19 +-64 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +112 +20 +-64 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-114 +-106 +-99 +-92 +-86 +41 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +68 +-20 +-99 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-107 +113 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +116 +109 +101 +94 +87 +82 +76 +70 +65 +61 +7 +-76 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +54 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +100 +9 +-74 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +91 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +111 +19 +-65 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-64 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +112 +19 +-64 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-113 +-106 +-98 +-92 +-85 +40 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +68 +-20 +-99 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-108 +112 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +116 +108 +100 +94 +87 +81 +76 +71 +65 +61 +5 +-77 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-114 +-107 +-99 +28 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +64 +-24 +-101 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-110 +111 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +118 +25 +-60 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +97 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-64 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +94 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +112 +20 +-64 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +96 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-64 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +94 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-64 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-64 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-64 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +121 +113 +105 +97 +91 +85 +79 +73 +68 +63 +58 +3 +-79 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +54 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +100 +9 +-74 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-108 +-100 +-93 +-87 +38 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +118 +110 +103 +95 +88 +82 +76 +19 +-65 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-112 +-104 +-97 +29 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +65 +-23 +-101 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-110 +111 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +119 +26 +-59 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +96 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +121 +112 +105 +98 +91 +84 +79 +73 +68 +64 +60 +3 +-79 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +55 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +100 +8 +-74 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-116 +-108 +-100 +-94 +-87 +39 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +68 +-21 +-99 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-108 +112 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +116 +108 +100 +93 +87 +81 +75 +69 +64 +61 +4 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +55 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +100 +8 +-74 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-116 +-108 +-99 +-93 +-87 +39 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +119 +110 +102 +95 +89 +82 +76 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +59 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +100 +9 +-74 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +91 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +112 +19 +-64 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +94 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-113 +-105 +-98 +-92 +-85 +41 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +68 +-20 +-98 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-107 +113 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +116 +108 +100 +94 +88 +82 +76 +71 +65 +61 +6 +-76 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +54 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +100 +8 +-74 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +91 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +111 +18 +-65 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +94 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +112 +20 +-64 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +112 +19 +-65 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-112 +-105 +-97 +-90 +-84 +41 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +68 +-20 +-99 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-108 +112 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +116 +107 +100 +94 +87 +81 +75 +70 +65 +61 +4 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-106 +-99 +28 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +65 +-23 +-101 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-109 +112 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +119 +25 +-59 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +97 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-64 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-64 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-64 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +94 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +94 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +115 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +112 +20 +-64 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +96 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +114 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +113 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +95 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +120 +112 +104 +96 +90 +84 +77 +72 +67 +62 +58 +3 +-79 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +54 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +101 +10 +-73 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-108 +-100 +-94 +-87 +39 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +118 +109 +101 +94 +88 +81 +76 +19 +-65 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-112 +-105 +-97 +29 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +65 +-23 +-101 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-108 +112 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +119 +26 +-58 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +97 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +121 +112 +104 +97 +91 +84 +78 +73 +67 +62 +59 +2 +-80 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +54 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +100 +8 +-74 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-116 +-108 +-101 +-93 +-86 +40 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +68 +-21 +-99 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-108 +113 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +116 +108 +101 +94 +87 +80 +75 +70 +65 +61 +4 +-78 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +54 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +124 +100 +9 +-74 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 diff --git a/traces/lf_t5577_visa2000.pm3 b/traces/lf_t5577_visa2000.pm3 new file mode 100644 index 000000000..d41456c51 --- /dev/null +++ b/traces/lf_t5577_visa2000.pm3 @@ -0,0 +1,10000 @@ +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-109 +-102 +-95 +-88 +-81 +-75 +-70 +-66 +-60 +-56 +-53 +-48 +-44 +-43 +-39 +-35 +-33 +-31 +-29 +-27 +-25 +-23 +-21 +-20 +-17 +-16 +-16 +-14 +-13 +-13 +-11 +-10 +-9 +-9 +-8 +112 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +117 +108 +102 +94 +87 +29 +-55 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-116 +-107 +-100 +-92 +34 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +106 +99 +92 +86 +81 +23 +-60 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-117 +-108 +-101 +-93 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +104 +97 +91 +85 +79 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-109 +-102 +-94 +32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +104 +97 +91 +84 +79 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-109 +-101 +-93 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +105 +97 +91 +85 +79 +73 +69 +64 +60 +56 +53 +49 +46 +42 +40 +37 +35 +32 +30 +29 +27 +25 +24 +22 +21 +20 +18 +17 +16 +15 +14 +13 +12 +12 +12 +11 +10 +-31 +-109 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-111 +-103 +24 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +109 +103 +97 +90 +83 +78 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-109 +-102 +-94 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +105 +98 +92 +85 +80 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-117 +-108 +-100 +-93 +34 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +112 +105 +97 +91 +85 +79 +74 +69 +64 +61 +56 +53 +49 +46 +43 +40 +38 +36 +33 +31 +28 +27 +26 +24 +23 +22 +20 +20 +18 +17 +16 +15 +14 +14 +12 +13 +12 +11 +11 +10 +9 +9 +8 +8 +8 +8 +7 +7 +6 +7 +6 +6 +5 +5 +5 +5 +5 +4 +4 +4 +4 +4 +4 +3 +4 +4 +3 +4 +4 +4 +-38 +-115 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-114 +-105 +23 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +117 +109 +102 +95 +89 +83 +77 +71 +67 +62 +59 +54 +51 +47 +44 +41 +39 +36 +34 +32 +30 +28 +27 +25 +24 +22 +21 +19 +18 +17 +15 +15 +15 +14 +13 +12 +12 +11 +12 +-29 +-108 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-117 +-109 +-102 +25 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +110 +103 +96 +90 +83 +79 +73 +68 +63 +59 +55 +52 +48 +45 +42 +39 +36 +34 +32 +30 +28 +27 +24 +23 +21 +20 +18 +18 +17 +16 +15 +14 +13 +12 +12 +11 +10 +10 +-31 +-109 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-110 +-102 +-95 +-87 +-81 +-76 +-70 +-66 +-61 +-56 +-52 +-48 +-44 +-41 +-38 +-35 +-33 +-30 +-28 +-25 +-24 +-21 +-20 +-18 +-16 +-15 +-14 +-12 +-11 +-10 +-10 +-8 +-8 +-7 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +116 +108 +101 +94 +88 +81 +76 +71 +66 +62 +58 +54 +51 +48 +44 +40 +39 +36 +34 +32 +30 +28 +27 +24 +23 +21 +20 +18 +18 +17 +16 +15 +14 +13 +12 +11 +11 +-29 +-108 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-111 +-102 +-95 +-88 +-82 +-76 +-71 +-66 +-61 +-56 +-53 +-48 +-45 +-42 +-39 +-35 +-33 +-31 +-28 +-26 +-24 +-22 +-20 +-18 +-17 +-16 +-14 +-12 +-12 +-11 +-10 +-9 +-8 +-7 +112 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +116 +108 +101 +94 +88 +81 +76 +71 +66 +62 +59 +54 +51 +47 +45 +42 +40 +37 +34 +32 +31 +29 +27 +25 +24 +23 +21 +20 +19 +18 +17 +16 +15 +14 +14 +12 +12 +-28 +-107 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-111 +-102 +25 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +111 +104 +96 +90 +84 +78 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-109 +-102 +-94 +-87 +-81 +-76 +-70 +-65 +-61 +-56 +-52 +-48 +-44 +-41 +-38 +-35 +-33 +-30 +-28 +-26 +-24 +-22 +-20 +-19 +-17 +-16 +-14 +-13 +-12 +-11 +-10 +-10 +-9 +-8 +-7 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +115 +108 +100 +93 +87 +30 +-55 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-107 +-99 +-92 +34 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +105 +97 +92 +85 +80 +74 +69 +64 +60 +56 +52 +49 +47 +43 +40 +37 +34 +33 +31 +29 +27 +25 +24 +22 +21 +19 +19 +17 +17 +16 +15 +13 +13 +12 +11 +10 +11 +-30 +-108 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-110 +-101 +-94 +-87 +-82 +-76 +-70 +-66 +-61 +-56 +-51 +-48 +-45 +-41 +-38 +-35 +-32 +-30 +-28 +-25 +-24 +-22 +-20 +-19 +-17 +-15 +-15 +-13 +-12 +-11 +-10 +-9 +-8 +-8 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +116 +107 +100 +94 +88 +30 +-55 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-116 +-108 +-100 +-92 +34 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +112 +104 +98 +91 +85 +80 +75 +70 +65 +61 +57 +53 +50 +47 +43 +40 +38 +36 +33 +32 +29 +28 +26 +25 +23 +22 +20 +19 +18 +18 +17 +16 +14 +14 +13 +12 +11 +11 +-29 +-107 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-111 +-102 +-95 +-89 +-83 +-77 +-72 +-67 +-62 +-57 +-54 +-49 +-46 +-42 +-39 +-36 +-33 +-31 +-29 +-27 +-25 +-22 +-21 +-20 +-18 +-16 +-16 +-14 +-13 +-12 +-10 +-10 +-10 +-9 +112 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +116 +108 +100 +94 +88 +30 +-54 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-116 +-108 +-100 +-93 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +112 +105 +98 +92 +85 +80 +75 +70 +65 +61 +57 +53 +49 +47 +43 +41 +38 +36 +33 +32 +29 +27 +25 +24 +23 +22 +20 +19 +18 +17 +15 +15 +15 +14 +13 +12 +12 +12 +-29 +-108 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-111 +-102 +-96 +-89 +-82 +-76 +-72 +-66 +-61 +-57 +-52 +-48 +-45 +-42 +-39 +-35 +-33 +-31 +-28 +-26 +-24 +-22 +-20 +-19 +-17 +-15 +-15 +-13 +-12 +-11 +-10 +-9 +-8 +-7 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +116 +108 +101 +94 +88 +81 +76 +71 +67 +62 +58 +54 +50 +47 +44 +41 +39 +35 +34 +32 +30 +28 +26 +24 +23 +22 +20 +19 +18 +17 +17 +16 +15 +14 +14 +12 +12 +-29 +-107 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-111 +-102 +-95 +-88 +-82 +-76 +-72 +-66 +-61 +-57 +-52 +-48 +-45 +-42 +-38 +-35 +-33 +-30 +-28 +-26 +-24 +-22 +-21 +-19 +-18 +-16 +-15 +-14 +-12 +-11 +-11 +-10 +-8 +-8 +112 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +116 +108 +101 +94 +88 +82 +76 +70 +66 +62 +57 +54 +51 +47 +45 +41 +39 +36 +34 +32 +30 +28 +26 +24 +23 +22 +21 +20 +19 +17 +16 +15 +15 +15 +13 +13 +12 +-28 +-107 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-110 +-102 +-95 +-88 +-82 +-76 +-71 +-66 +-62 +-57 +-52 +-48 +-45 +-41 +-39 +-36 +-33 +-31 +-28 +-26 +-25 +-22 +-20 +-19 +-18 +-16 +-16 +-14 +-13 +-12 +-11 +-10 +-9 +-8 +112 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +116 +108 +101 +94 +88 +30 +-54 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-107 +-100 +-92 +34 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +105 +98 +92 +85 +80 +75 +70 +64 +61 +57 +53 +49 +46 +43 +41 +37 +36 +33 +31 +29 +28 +25 +24 +23 +21 +20 +19 +17 +17 +15 +14 +13 +13 +13 +12 +11 +11 +-31 +-109 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-111 +-103 +24 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +103 +95 +90 +84 +79 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-110 +-103 +-95 +-88 +-81 +-76 +-70 +-66 +-61 +-57 +-52 +-49 +-44 +-41 +-38 +-35 +-32 +-31 +-27 +-25 +-24 +-22 +-19 +-18 +-16 +-15 +-14 +-13 +-11 +-10 +-9 +-8 +-7 +-7 +-5 +115 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +117 +108 +101 +95 +89 +30 +-54 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-117 +-108 +-100 +-94 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +104 +97 +91 +85 +79 +73 +69 +64 +60 +56 +52 +49 +46 +42 +40 +37 +35 +32 +31 +29 +27 +25 +23 +22 +21 +20 +19 +17 +17 +15 +15 +13 +13 +12 +12 +10 +10 +-31 +-109 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-110 +-103 +24 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +111 +104 +96 +90 +84 +78 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-116 +-108 +-101 +-93 +-86 +-80 +-75 +-69 +-65 +-61 +-56 +-52 +-48 +-44 +-41 +-38 +-35 +-32 +-30 +-27 +-25 +-24 +-21 +-20 +-19 +-17 +-16 +-14 +-13 +-12 +-12 +-10 +-9 +-8 +-8 +-7 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +115 +108 +101 +94 +87 +29 +-55 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-117 +-108 +-100 +-93 +34 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +114 +106 +99 +93 +86 +80 +75 +71 +65 +62 +58 +54 +50 +47 +44 +42 +39 +36 +33 +32 +30 +28 +26 +25 +23 +22 +21 +19 +18 +17 +16 +16 +15 +14 +14 +13 +11 +11 +-29 +-107 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-110 +-102 +-96 +-88 +-82 +-77 +-72 +-66 +-61 +-57 +-53 +-49 +-46 +-43 +-39 +-36 +-34 +-31 +-30 +-27 +-25 +-23 +-21 +-19 +-18 +-17 +-15 +-14 +-13 +-12 +-11 +-10 +-10 +-9 +112 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +116 +108 +101 +94 +88 +30 +-54 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-116 +-108 +-100 +-93 +34 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +112 +106 +98 +91 +86 +80 +23 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-109 +-101 +-94 +32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +104 +97 +91 +85 +79 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-118 +-109 +-101 +-94 +32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +105 +98 +92 +85 +80 +23 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-116 +-108 +-101 +-93 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +112 +105 +98 +92 +86 +80 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-109 +-102 +-94 +32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +104 +97 +91 +85 +80 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-109 +-101 +-94 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +104 +96 +91 +85 +79 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-118 +-110 +-102 +-94 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +105 +98 +91 +85 +79 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-110 +-102 +-94 +32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +112 +105 +98 +92 +85 +80 +23 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-109 +-101 +-94 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +105 +98 +91 +84 +79 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-116 +-108 +-101 +-93 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +112 +104 +97 +91 +85 +79 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-109 +-101 +-94 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +105 +97 +91 +85 +80 +23 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-109 +-101 +-94 +32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +105 +97 +91 +84 +79 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-117 +-108 +-101 +-93 +34 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +112 +105 +97 +91 +84 +79 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-109 +-102 +-94 +32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +104 +97 +90 +85 +80 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-118 +-109 +-101 +-94 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +112 +105 +98 +92 +85 +80 +74 +69 +64 +61 +56 +53 +50 +47 +43 +41 +38 +35 +33 +31 +29 +27 +25 +24 +22 +21 +19 +18 +17 +16 +16 +14 +13 +13 +12 +11 +11 +10 +-30 +-108 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-111 +-103 +24 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +110 +103 +96 +90 +84 +78 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-117 +-108 +-101 +-94 +-87 +-80 +-75 +-70 +-65 +-60 +-56 +-51 +-47 +-43 +-41 +-38 +-35 +-32 +-30 +-28 +-26 +-24 +-21 +-19 +-18 +-17 +-16 +-14 +-13 +-12 +-11 +-10 +-9 +-8 +-8 +-7 +114 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +116 +108 +101 +95 +88 +82 +77 +71 +66 +62 +58 +54 +51 +47 +44 +41 +39 +36 +33 +32 +30 +28 +27 +25 +23 +22 +21 +19 +19 +18 +16 +15 +15 +13 +14 +13 +12 +-29 +-107 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-111 +-102 +25 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +103 +96 +90 +84 +79 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-109 +-101 +-94 +-87 +-81 +-76 +-71 +-66 +-61 +-56 +-51 +-48 +-45 +-41 +-38 +-35 +-32 +-30 +-28 +-26 +-24 +-22 +-20 +-19 +-17 +-15 +-14 +-13 +-12 +-11 +-10 +-9 +-8 +-8 +-6 +114 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +117 +109 +101 +94 +88 +82 +77 +72 +67 +62 +58 +54 +51 +48 +45 +42 +39 +37 +35 +32 +30 +28 +27 +25 +24 +22 +21 +19 +18 +17 +17 +16 +15 +13 +13 +13 +12 +-28 +-107 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-110 +-102 +25 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +103 +95 +89 +83 +78 +19 +-64 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-118 +-109 +-101 +-94 +-88 +-81 +-75 +-70 +-66 +-60 +-56 +-52 +-48 +-44 +-41 +-38 +-35 +-32 +-31 +-28 +-26 +-24 +-21 +-20 +-19 +-17 +-15 +-15 +-13 +-12 +-11 +-10 +-9 +-8 +-8 +-7 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +116 +109 +101 +94 +88 +30 +-54 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-107 +-100 +-93 +34 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +105 +97 +91 +86 +80 +74 +69 +64 +60 +56 +53 +49 +46 +43 +40 +37 +35 +33 +31 +29 +27 +25 +24 +22 +21 +19 +18 +16 +16 +14 +14 +14 +13 +12 +11 +10 +10 +-30 +-108 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-110 +-102 +25 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +104 +96 +90 +84 +79 +20 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-108 +-101 +-94 +-87 +-80 +-75 +-69 +-65 +-60 +-55 +-51 +-48 +-44 +-41 +-38 +-35 +-33 +-30 +-27 +-25 +-24 +-22 +-20 +-19 +-17 +-16 +-15 +-13 +-11 +-12 +-11 +-10 +-8 +-8 +-6 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +116 +108 +101 +94 +87 +82 +77 +71 +66 +62 +59 +54 +51 +47 +45 +42 +39 +36 +35 +33 +31 +28 +27 +25 +24 +22 +21 +20 +19 +17 +17 +16 +14 +14 +13 +12 +12 +-28 +-107 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-110 +-102 +-96 +-88 +-82 +-77 +-71 +-66 +-61 +-56 +-52 +-48 +-45 +-42 +-39 +-36 +-33 +-30 +-28 +-26 +-24 +-22 +-20 +-18 +-17 +-16 +-14 +-13 +-12 +-11 +-10 +-9 +-9 +-7 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +115 +108 +101 +93 +88 +30 +-54 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-116 +-108 +-100 +-93 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +105 +97 +91 +85 +79 +74 +69 +64 +60 +57 +53 +50 +47 +43 +40 +37 +35 +33 +32 +29 +27 +26 +24 +22 +21 +19 +18 +17 +16 +15 +15 +14 +13 +13 +12 +11 +11 +-29 +-107 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-110 +-103 +-96 +-88 +-82 +-77 +-72 +-67 +-62 +-57 +-53 +-49 +-46 +-42 +-39 +-37 +-34 +-31 +-29 +-27 +-24 +-22 +-21 +-19 +-18 +-16 +-15 +-14 +-13 +-11 +-11 +-10 +-9 +-8 +112 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +116 +107 +101 +94 +87 +30 +-55 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-116 +-107 +-100 +-93 +35 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +113 +106 +98 +93 +86 +80 +23 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-109 +-101 +-94 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +105 +97 +91 +84 +79 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-108 +-101 +-94 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +105 +97 +91 +85 +80 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-109 +-101 +-93 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +105 +97 +91 +84 +79 +23 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-110 +-102 +-94 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +111 +103 +98 +92 +85 +80 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-109 +-102 +-93 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +105 +97 +91 +84 +80 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-109 +-101 +-94 +32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +111 +104 +97 +91 +84 +79 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-116 +-109 +-101 +-94 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +105 +98 +91 +85 +79 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-109 +-102 +-95 +32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +112 +104 +97 +92 +85 +80 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-109 +-102 +-95 +32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +113 +106 +98 +92 +86 +80 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-109 +-102 +-95 +32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +111 +104 +97 +91 +85 +79 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-117 +-108 +-101 +-94 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +112 +105 +97 +91 +85 +79 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-109 +-102 +-95 +32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +104 +97 +91 +85 +79 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-108 +-101 +-94 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +105 +98 +92 +86 +80 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-118 +-109 +-101 +-94 +32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +104 +97 +91 +84 +79 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-118 +-109 +-102 +-94 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +106 +98 +91 +86 +80 +23 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-118 +-109 +-101 +-94 +32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +105 +97 +91 +85 +79 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-108 +-101 +-94 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +112 +105 +98 +91 +85 +80 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-109 +-101 +-94 +32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +104 +97 +91 +85 +79 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-108 +-101 +-94 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +106 +98 +91 +86 +80 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-109 +-101 +-94 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +105 +97 +91 +84 +79 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-118 +-109 +-102 +-95 +32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +111 +104 +97 +91 +85 +80 +74 +69 +64 +61 +56 +53 +50 +46 +44 +41 +38 +36 +33 +31 +29 +28 +25 +25 +23 +21 +20 +19 +17 +17 +17 +16 +14 +14 +12 +12 +12 +11 +-29 +-107 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-110 +-102 +25 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +111 +103 +95 +90 +83 +78 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-109 +-102 +-95 +-87 +-81 +-76 +-70 +-65 +-60 +-56 +-51 +-48 +-44 +-42 +-38 +-36 +-32 +-30 +-28 +-26 +-23 +-22 +-20 +-18 +-17 +-16 +-14 +-13 +-11 +-11 +-10 +-9 +-8 +-7 +-6 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +117 +108 +101 +94 +88 +30 +-54 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-116 +-107 +-100 +-92 +35 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +113 +105 +97 +91 +85 +79 +23 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-109 +-101 +-94 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +111 +104 +97 +91 +84 +79 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-116 +-108 +-100 +-93 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +105 +98 +91 +84 +79 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-109 +-102 +-94 +32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +105 +97 +91 +85 +79 +74 +69 +64 +60 +56 +53 +49 +46 +43 +40 +38 +35 +33 +31 +29 +27 +26 +24 +22 +21 +20 +19 +18 +16 +15 +15 +14 +13 +13 +12 +12 +11 +-30 +-108 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-111 +-102 +25 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +104 +97 +91 +84 +79 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-108 +-101 +-94 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +104 +97 +91 +85 +79 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-110 +-102 +-95 +32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +112 +105 +98 +91 +85 +79 +74 +70 +65 +60 +56 +53 +50 +47 +43 +41 +38 +36 +33 +32 +29 +28 +26 +24 +23 +21 +20 +19 +18 +17 +16 +15 +14 +14 +13 +12 +12 +11 +9 +10 +9 +9 +8 +8 +7 +8 +7 +7 +7 +7 +6 +6 +5 +5 +5 +5 +4 +5 +4 +5 +5 +4 +4 +4 +3 +3 +4 +4 +4 +4 +-38 +-115 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-111 +-103 +24 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +109 +103 +96 +89 +83 +78 +73 +67 +63 +60 +55 +52 +48 +45 +42 +40 +37 +35 +32 +30 +28 +27 +25 +23 +22 +21 +20 +19 +17 +16 +15 +14 +14 +13 +12 +12 +11 +10 +-30 +-108 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-110 +-102 +25 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +110 +103 +96 +90 +83 +77 +72 +67 +63 +60 +55 +53 +49 +46 +42 +40 +36 +34 +33 +30 +29 +27 +25 +23 +21 +21 +20 +18 +17 +16 +15 +15 +13 +13 +12 +12 +11 +11 +-31 +-109 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-110 +-103 +-96 +-88 +-82 +-77 +-72 +-66 +-62 +-57 +-53 +-49 +-46 +-42 +-39 +-36 +-34 +-31 +-29 +-27 +-25 +-23 +-22 +-19 +-18 +-17 +-16 +-14 +-14 +-11 +-11 +-10 +-9 +-9 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +116 +108 +101 +95 +88 +82 +77 +72 +67 +62 +58 +55 +52 +48 +45 +42 +39 +36 +34 +32 +31 +29 +26 +24 +24 +22 +21 +19 +18 +17 +16 +14 +14 +14 +12 +12 +12 +-29 +-108 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-109 +-102 +-94 +-87 +-81 +-76 +-70 +-65 +-61 +-56 +-51 +-48 +-44 +-41 +-38 +-35 +-32 +-30 +-28 +-25 +-24 +-22 +-20 +-18 +-17 +-15 +-14 +-12 +-12 +-11 +-10 +-9 +-8 +-8 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +115 +107 +100 +94 +88 +81 +76 +71 +67 +61 +58 +54 +51 +46 +44 +42 +39 +36 +34 +31 +30 +28 +26 +25 +24 +22 +21 +20 +19 +18 +16 +15 +15 +13 +13 +12 +11 +-29 +-108 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-111 +-102 +25 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +103 +95 +89 +83 +77 +19 +-64 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-117 +-109 +-101 +-95 +-88 +-81 +-75 +-70 +-65 +-60 +-56 +-52 +-48 +-44 +-41 +-38 +-35 +-32 +-31 +-28 +-26 +-23 +-21 +-20 +-19 +-17 +-16 +-14 +-13 +-12 +-11 +-10 +-9 +-8 +-8 +-6 +115 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +117 +109 +100 +94 +89 +30 +-54 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-107 +-100 +-93 +34 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +105 +98 +91 +84 +79 +74 +69 +64 +60 +56 +52 +49 +46 +42 +40 +37 +35 +33 +30 +29 +27 +25 +24 +23 +21 +20 +19 +17 +17 +16 +15 +14 +13 +12 +12 +11 +11 +-29 +-108 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-110 +-101 +-94 +-87 +-82 +-76 +-71 +-66 +-61 +-56 +-52 +-48 +-45 +-41 +-39 +-36 +-33 +-30 +-28 +-25 +-24 +-22 +-20 +-19 +-17 +-15 +-15 +-14 +-13 +-11 +-11 +-9 +-8 +-8 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +115 +107 +101 +94 +88 +30 +-55 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-116 +-107 +-100 +-93 +34 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +105 +98 +91 +85 +80 +75 +70 +64 +61 +57 +53 +50 +46 +43 +40 +38 +36 +34 +32 +29 +28 +26 +24 +23 +21 +20 +19 +18 +17 +16 +15 +14 +14 +12 +12 +11 +10 +-30 +-108 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-111 +-104 +-96 +-89 +-83 +-77 +-72 +-66 +-62 +-57 +-53 +-49 +-46 +-42 +-39 +-36 +-33 +-31 +-29 +-26 +-24 +-23 +-21 +-19 +-18 +-16 +-15 +-14 +-12 +-12 +-11 +-9 +-8 +-8 +112 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +116 +108 +101 +94 +88 +30 +-54 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-107 +-99 +-92 +34 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +112 +105 +98 +92 +85 +80 +75 +69 +64 +61 +56 +53 +49 +46 +42 +40 +38 +35 +33 +30 +29 +27 +25 +24 +23 +21 +20 +19 +17 +17 +16 +15 +14 +13 +12 +12 +11 +10 +-30 +-108 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-110 +-103 +-95 +-88 +-82 +-77 +-72 +-66 +-62 +-57 +-52 +-49 +-46 +-42 +-39 +-36 +-33 +-31 +-29 +-27 +-25 +-23 +-21 +-19 +-18 +-16 +-15 +-14 +-13 +-11 +-12 +-9 +-8 +-8 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +116 +108 +101 +93 +87 +82 +77 +71 +67 +62 +58 +54 +51 +47 +45 +42 +39 +37 +34 +31 +30 +28 +27 +25 +24 +22 +21 +20 +19 +17 +17 +16 +15 +14 +13 +12 +12 +-29 +-107 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-110 +-102 +-95 +-88 +-82 +-76 +-72 +-66 +-61 +-57 +-52 +-48 +-45 +-42 +-39 +-37 +-33 +-30 +-28 +-26 +-24 +-22 +-20 +-18 +-17 +-16 +-14 +-13 +-12 +-11 +-10 +-9 +-8 +-7 +114 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +116 +107 +101 +93 +87 +81 +76 +70 +66 +63 +58 +55 +51 +47 +44 +41 +39 +36 +35 +32 +30 +28 +26 +24 +24 +22 +21 +19 +18 +17 +17 +15 +15 +14 +13 +13 +12 +-29 +-107 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-110 +-102 +-95 +-88 +-82 +-76 +-71 +-64 +-60 +-56 +-52 +-48 +-45 +-41 +-38 +-36 +-33 +-30 +-29 +-26 +-24 +-22 +-21 +-19 +-18 +-16 +-15 +-14 +-12 +-11 +-10 +-9 +-8 +-8 +112 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +115 +107 +100 +93 +88 +30 +-54 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-116 +-108 +-101 +-93 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +112 +105 +97 +91 +85 +79 +74 +69 +64 +60 +56 +53 +49 +46 +43 +40 +38 +36 +33 +31 +29 +27 +26 +24 +22 +22 +20 +19 +18 +17 +16 +15 +14 +14 +13 +12 +11 +11 +-30 +-108 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-111 +-102 +25 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +104 +96 +90 +83 +78 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-109 +-102 +-95 +-88 +-81 +-75 +-71 +-66 +-61 +-57 +-52 +-48 +-44 +-42 +-39 +-36 +-33 +-30 +-28 +-26 +-24 +-22 +-21 +-19 +-17 +-16 +-14 +-13 +-12 +-11 +-10 +-10 +-8 +-7 +-7 +114 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +116 +109 +102 +94 +88 +30 +-54 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-107 +-99 +-92 +34 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +113 +106 +98 +92 +86 +80 +74 +70 +64 +61 +56 +52 +49 +47 +43 +40 +38 +35 +33 +31 +29 +27 +26 +24 +22 +21 +19 +19 +18 +16 +16 +15 +14 +13 +13 +12 +11 +11 +-30 +-108 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-110 +-102 +24 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +110 +103 +96 +90 +83 +78 +21 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-110 +-102 +-95 +-88 +-82 +-76 +-71 +-66 +-60 +-56 +-52 +-48 +-44 +-42 +-38 +-35 +-33 +-30 +-28 +-26 +-24 +-22 +-21 +-19 +-17 +-16 +-14 +-13 +-12 +-11 +-10 +-9 +-8 +-7 +-7 +114 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +116 +109 +102 +94 +88 +30 +-54 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-116 +-107 +-100 +-94 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +104 +98 +92 +84 +79 +75 +70 +64 +61 +56 +52 +49 +47 +43 +40 +37 +35 +33 +32 +29 +27 +25 +24 +22 +21 +20 +19 +18 +17 +15 +15 +14 +13 +13 +12 +11 +11 +-30 +-108 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-111 +-103 +-96 +-88 +-82 +-77 +-72 +-66 +-61 +-56 +-52 +-48 +-45 +-42 +-39 +-36 +-33 +-30 +-28 +-26 +-24 +-22 +-20 +-18 +-17 +-16 +-14 +-13 +-13 +-12 +-11 +-9 +-8 +-8 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +116 +108 +102 +95 +88 +30 +-54 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-116 +-108 +-101 +-93 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +112 +105 +97 +91 +84 +80 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-108 +-101 +-94 +34 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +112 +105 +98 +92 +85 +80 +23 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-118 +-109 +-101 +-94 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +104 +97 +90 +84 +79 +21 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-118 +-109 +-101 +-94 +32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +104 +97 +92 +84 +79 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-108 +-102 +-94 +34 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +112 +105 +97 +91 +85 +80 +23 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-117 +-108 +-101 +-94 +32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +104 +97 +91 +84 +78 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-118 +-108 +-102 +-95 +32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +112 +105 +98 +92 +85 +81 +23 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-116 +-109 +-100 +-93 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +112 +105 +98 +92 +85 +80 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-118 +-109 +-102 +-94 +32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +111 +104 +97 +91 +84 +79 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-116 +-109 +-101 +-94 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +105 +97 +92 +85 +79 +22 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-118 +-109 +-101 +-94 +32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +105 +98 +91 +85 +80 +22 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-109 +-101 +-94 +33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +105 +98 +92 +86 +79 +23 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-126 +-117 +-108 +-101 +-93 +34 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 From aadf62bd1f89b89e7fa997278b273bd66e41af55 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Mon, 28 Sep 2020 17:30:13 +0200 Subject: [PATCH 0685/1047] Add test & trace for gproxii --- tools/pm3_tests.sh | 3 + traces/lf_t5577.txt | 4 + traces/lf_t5577_gproxii.pm3 | 10000 ++++++++++++++++++++++++++++++++++ 3 files changed, 10007 insertions(+) create mode 100644 traces/lf_t5577_gproxii.pm3 diff --git a/tools/pm3_tests.sh b/tools/pm3_tests.sh index da66df5cb..bf8ba0a52 100755 --- a/tools/pm3_tests.sh +++ b/tools/pm3_tests.sh @@ -371,6 +371,9 @@ while true; do if ! CheckExecute slow "lf T55 gallagher test" "$CLIENTBIN -c 'data load traces/lf_t5577_gallagher.pm3; lf search 1'" "GALLAGHER ID found"; then break; fi if ! CheckExecute slow "lf T55 gallagher test2" "$CLIENTBIN -c 'data load traces/lf_t5577_gallagher.pm3; lf gallagher demod'" \ "GALLAGHER - Region: 0 FC: 27865 CN: 682758 Issue Level: 13"; then break; fi + if ! CheckExecute slow "lf T55 gproxii test" "$CLIENTBIN -c 'data load traces/lf_t5577_gproxii.pm3; lf search 1'" "Guardall G-Prox II ID found"; then break; fi + if ! CheckExecute slow "lf T55 gproxii test2" "$CLIENTBIN -c 'data load traces/lf_t5577_gproxii.pm3; lf gproxii demod'" \ + "G-Prox-II - len: 26 FC: 123 Card: 11223, Raw: f98c7038c63356c7ac26398c"; then break; fi if ! CheckExecute slow "lf T55 hid test" "$CLIENTBIN -c 'data load traces/lf_t5577_hid.pm3; lf search 1'" "HID Prox ID found"; then break; fi if ! CheckExecute slow "lf T55 hid test2" "$CLIENTBIN -c 'data load traces/lf_t5577_hid.pm3; lf hid demod'" \ "HID Prox - 2006ec0c86 (1603) - len: 26 bit - OEM: 000 FC: 118 Card: 1603"; then break; fi diff --git a/traces/lf_t5577.txt b/traces/lf_t5577.txt index 3b994aa2e..5e3c27995 100644 --- a/traces/lf_t5577.txt +++ b/traces/lf_t5577.txt @@ -24,6 +24,10 @@ lf gallagher clone b 0FFD5461A9DA1346B2D1AC32 lf read s 10000 data save f lf_t5577_gallagher +lf gproxii clone 26 123 11223 +lf read s 10000 +data save f lf_t5577_gproxii + lf hid clone 2006ec0c86 lf read s 10000 data save f lf_t5577_hid diff --git a/traces/lf_t5577_gproxii.pm3 b/traces/lf_t5577_gproxii.pm3 new file mode 100644 index 000000000..92a8aee25 --- /dev/null +++ b/traces/lf_t5577_gproxii.pm3 @@ -0,0 +1,10000 @@ +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +111 +102 +96 +89 +84 +78 +29 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-114 +-106 +-98 +-92 +-85 +24 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +117 +109 +101 +95 +88 +83 +77 +72 +67 +63 +59 +55 +51 +48 +45 +42 +39 +37 +34 +33 +30 +29 +27 +25 +24 +23 +21 +20 +19 +17 +17 +17 +15 +15 +14 +14 +12 +12 +11 +-23 +-107 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-107 +-99 +-93 +-86 +-80 +-74 +-69 +-64 +-60 +-55 +-51 +-47 +-44 +-41 +-38 +-36 +-33 +-30 +-28 +-25 +-24 +-22 +-21 +-19 +-18 +-16 +-15 +-14 +-13 +-12 +-11 +-9 +-9 +-8 +-7 +97 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +113 +106 +98 +92 +86 +35 +-55 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-112 +-103 +-96 +-89 +-83 +26 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +111 +102 +95 +90 +84 +78 +29 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-114 +-105 +-97 +-91 +-84 +25 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +117 +109 +102 +95 +88 +83 +77 +28 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-114 +-105 +-98 +-91 +-84 +25 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +117 +110 +102 +95 +88 +83 +77 +28 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-113 +-105 +-98 +-91 +-84 +25 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +117 +110 +103 +96 +90 +84 +78 +28 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-113 +-105 +-97 +-90 +-84 +26 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +117 +109 +101 +95 +88 +82 +77 +72 +67 +63 +58 +55 +51 +48 +45 +42 +39 +37 +34 +32 +30 +29 +26 +26 +24 +22 +21 +20 +18 +17 +17 +16 +15 +14 +13 +13 +12 +12 +11 +-23 +-108 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-114 +-107 +-99 +-92 +-86 +-79 +-73 +-69 +-64 +-59 +-54 +-51 +-47 +-44 +-41 +-37 +-34 +-32 +-29 +-28 +-25 +-24 +-22 +-20 +-19 +-17 +-16 +-15 +-13 +-12 +-11 +-11 +-9 +-9 +-8 +-7 +96 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +112 +105 +98 +91 +85 +35 +-54 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-112 +-103 +-96 +-90 +-84 +26 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +117 +109 +102 +95 +88 +82 +77 +27 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-114 +-106 +-98 +-91 +-84 +25 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +117 +110 +103 +96 +89 +84 +78 +73 +68 +64 +60 +56 +52 +49 +45 +43 +40 +38 +35 +32 +31 +29 +27 +26 +24 +22 +21 +20 +19 +18 +17 +16 +15 +14 +13 +13 +12 +12 +11 +-24 +-108 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-115 +-107 +-99 +-92 +-86 +-79 +-74 +-69 +-64 +-59 +-55 +-51 +-47 +-43 +-40 +-38 +-35 +-32 +-29 +-28 +-25 +-23 +-21 +-20 +-18 +-17 +-16 +-14 +-13 +-12 +-11 +-10 +-9 +-9 +-7 +-7 +97 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +112 +105 +97 +92 +85 +80 +75 +70 +65 +61 +57 +54 +50 +47 +44 +41 +39 +36 +34 +32 +30 +28 +26 +25 +23 +22 +21 +20 +18 +17 +17 +16 +15 +14 +13 +13 +12 +-22 +-106 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-107 +-99 +-92 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +116 +107 +100 +94 +88 +82 +76 +27 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-113 +-105 +-98 +-91 +-84 +25 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +117 +110 +103 +96 +90 +84 +78 +28 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-113 +-105 +-98 +-90 +-85 +-78 +-72 +-67 +-63 +-59 +-55 +-50 +-47 +-43 +-40 +-37 +-34 +-32 +-29 +-27 +-25 +-23 +-22 +-19 +-18 +-17 +-16 +-14 +-14 +-12 +-10 +-9 +-8 +-8 +-7 +-6 +-6 +98 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +105 +98 +91 +85 +79 +74 +70 +65 +61 +56 +53 +49 +46 +43 +41 +37 +35 +33 +31 +30 +27 +26 +24 +23 +22 +20 +19 +18 +17 +16 +15 +14 +13 +13 +13 +12 +-23 +-107 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-114 +-107 +-99 +-92 +-85 +-79 +-73 +-69 +-64 +-59 +-54 +-50 +-47 +-43 +-40 +-37 +-34 +-32 +-29 +-27 +-25 +-23 +-22 +-20 +-18 +-17 +-15 +-15 +-13 +-12 +-11 +-10 +-9 +-8 +-8 +-7 +96 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +105 +98 +91 +85 +35 +-55 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-111 +-104 +-96 +-89 +-83 +27 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +117 +110 +102 +95 +89 +84 +78 +28 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-113 +-105 +-98 +-91 +-85 +25 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +117 +110 +102 +95 +89 +83 +77 +27 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-114 +-106 +-98 +-91 +-85 +25 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +110 +103 +96 +90 +84 +78 +74 +68 +64 +60 +56 +53 +50 +47 +43 +41 +38 +35 +33 +31 +30 +28 +27 +25 +24 +22 +21 +20 +18 +18 +16 +15 +15 +14 +14 +13 +13 +12 +-22 +-106 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-115 +-107 +-100 +-93 +-86 +-81 +-74 +-69 +-64 +-59 +-55 +-51 +-47 +-44 +-41 +-38 +-35 +-33 +-30 +-28 +-26 +-24 +-21 +-20 +-18 +-17 +-16 +-15 +-13 +-12 +-11 +-10 +-9 +-8 +-8 +-8 +97 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +111 +104 +97 +91 +84 +79 +74 +69 +65 +61 +56 +53 +49 +46 +43 +41 +38 +36 +33 +31 +30 +28 +26 +25 +24 +22 +20 +20 +19 +18 +17 +16 +15 +14 +14 +13 +12 +-22 +-106 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-114 +-106 +-98 +-91 +-85 +-79 +-73 +-68 +-63 +-59 +-54 +-50 +-46 +-43 +-39 +-37 +-34 +-32 +-29 +-27 +-24 +-23 +-21 +-20 +-18 +-17 +-15 +-14 +-13 +-12 +-11 +-10 +-9 +-8 +-7 +-7 +96 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +111 +104 +97 +91 +84 +79 +73 +68 +64 +60 +56 +53 +49 +46 +43 +40 +38 +35 +33 +31 +29 +28 +26 +25 +22 +21 +20 +19 +18 +17 +17 +16 +15 +14 +13 +12 +12 +-22 +-106 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-114 +-106 +-98 +-91 +-84 +-78 +-73 +-67 +-63 +-58 +-54 +-50 +-46 +-43 +-39 +-37 +-33 +-31 +-28 +-26 +-24 +-23 +-20 +-19 +-17 +-16 +-15 +-14 +-12 +-11 +-10 +-9 +-9 +-8 +-7 +-6 +98 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +104 +98 +91 +84 +34 +-56 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-112 +-104 +-97 +-90 +-84 +26 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +117 +110 +102 +95 +88 +83 +77 +27 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-113 +-105 +-98 +-91 +-84 +25 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +117 +110 +102 +96 +89 +83 +78 +28 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-113 +-105 +-97 +-90 +-84 +25 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +117 +109 +101 +95 +88 +82 +77 +72 +66 +62 +58 +54 +51 +47 +44 +41 +39 +37 +33 +32 +30 +28 +27 +25 +23 +22 +20 +20 +18 +17 +16 +16 +15 +14 +13 +13 +12 +12 +11 +-24 +-108 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-114 +-107 +-98 +-92 +-85 +-79 +-73 +-68 +-63 +-59 +-55 +-50 +-46 +-43 +-39 +-37 +-34 +-32 +-29 +-27 +-25 +-23 +-21 +-19 +-18 +-17 +-15 +-14 +-12 +-12 +-10 +-10 +-9 +-8 +-7 +-7 +97 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +112 +105 +98 +92 +86 +80 +74 +70 +65 +61 +57 +53 +50 +47 +43 +41 +38 +37 +33 +32 +30 +28 +27 +25 +24 +22 +21 +20 +19 +18 +17 +16 +15 +14 +13 +13 +12 +-22 +-106 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-114 +-106 +-98 +-91 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +116 +108 +100 +94 +87 +82 +77 +27 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-114 +-105 +-98 +-91 +-85 +25 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +116 +109 +101 +95 +88 +82 +77 +27 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-113 +-106 +-98 +-91 +-84 +-78 +-73 +-67 +-63 +-59 +-55 +-50 +-46 +-43 +-40 +-36 +-34 +-31 +-29 +-27 +-25 +-23 +-21 +-20 +-18 +-16 +-15 +-14 +-12 +-11 +-10 +-9 +-8 +-8 +-7 +-6 +-6 +98 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +105 +98 +92 +85 +80 +74 +70 +65 +61 +57 +54 +49 +47 +44 +41 +38 +36 +34 +32 +30 +29 +26 +25 +24 +22 +21 +20 +19 +18 +17 +16 +15 +14 +13 +13 +12 +-22 +-107 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-107 +-99 +-92 +-85 +-80 +-73 +-69 +-64 +-60 +-56 +-51 +-47 +-44 +-40 +-38 +-35 +-32 +-30 +-28 +-26 +-24 +-22 +-21 +-18 +-18 +-16 +-15 +-14 +-12 +-11 +-10 +-9 +-9 +-7 +-7 +96 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +105 +97 +91 +85 +35 +-55 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-111 +-103 +-96 +-89 +-83 +27 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +118 +110 +103 +97 +90 +84 +78 +28 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-113 +-105 +-97 +-90 +-85 +25 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +117 +110 +101 +95 +89 +83 +77 +72 +67 +63 +59 +55 +51 +48 +45 +42 +40 +37 +35 +33 +30 +29 +27 +25 +23 +22 +21 +20 +18 +18 +16 +16 +15 +14 +13 +13 +12 +11 +11 +-24 +-108 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-114 +-107 +-99 +-91 +-85 +-79 +-73 +-69 +-63 +-59 +-54 +-50 +-46 +-43 +-39 +-37 +-33 +-31 +-29 +-27 +-24 +-22 +-20 +-19 +-17 +-16 +-14 +-13 +-11 +-11 +-10 +-9 +-8 +-7 +-7 +-6 +97 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +104 +97 +91 +84 +79 +74 +69 +65 +61 +56 +53 +49 +46 +43 +40 +38 +36 +34 +32 +30 +28 +26 +25 +23 +22 +20 +20 +18 +18 +17 +16 +15 +14 +13 +13 +12 +-22 +-106 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-114 +-106 +-98 +-92 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +114 +107 +99 +92 +86 +80 +75 +25 +-64 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-115 +-106 +-99 +-92 +-85 +24 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +111 +103 +96 +90 +85 +79 +29 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-112 +-104 +-97 +-89 +-83 +-77 +-71 +-66 +-62 +-57 +-53 +-49 +-46 +-41 +-38 +-35 +-33 +-31 +-29 +-26 +-24 +-22 +-21 +-18 +-17 +-16 +-14 +-13 +-12 +-11 +-11 +-9 +-8 +-8 +-7 +-6 +-6 +98 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +105 +97 +92 +85 +79 +74 +69 +64 +61 +56 +53 +49 +46 +43 +41 +38 +36 +33 +32 +29 +28 +26 +24 +23 +22 +21 +19 +18 +17 +16 +16 +15 +14 +13 +13 +12 +-23 +-107 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-114 +-106 +-98 +-92 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +116 +108 +101 +94 +87 +82 +76 +26 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-114 +-105 +-99 +-91 +-85 +24 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +117 +110 +102 +95 +88 +83 +77 +27 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-112 +-104 +-97 +-90 +-84 +-78 +-72 +-67 +-62 +-57 +-54 +-49 +-46 +-42 +-39 +-36 +-33 +-30 +-28 +-26 +-24 +-22 +-20 +-18 +-17 +-15 +-14 +-14 +-13 +-11 +-9 +-8 +-8 +-7 +-7 +-5 +-5 +99 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +113 +106 +99 +92 +86 +35 +-54 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-112 +-104 +-96 +-90 +-83 +27 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +117 +109 +101 +95 +88 +82 +77 +72 +67 +63 +58 +55 +51 +48 +45 +42 +39 +36 +34 +32 +30 +28 +26 +25 +24 +22 +21 +20 +19 +17 +16 +16 +15 +14 +13 +13 +12 +12 +11 +-23 +-107 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-107 +-99 +-92 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +116 +108 +100 +94 +87 +81 +76 +27 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-113 +-105 +-97 +-90 +-84 +-78 +-72 +-67 +-63 +-58 +-54 +-50 +-47 +-43 +-40 +-36 +-33 +-31 +-29 +-27 +-25 +-23 +-21 +-19 +-18 +-16 +-15 +-14 +-13 +-12 +-11 +-10 +-9 +-8 +-7 +-7 +-6 +98 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +105 +98 +92 +85 +35 +-55 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-112 +-104 +-96 +-89 +-83 +26 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +118 +110 +102 +96 +89 +83 +78 +28 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-112 +-105 +-97 +-90 +-84 +26 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +118 +110 +102 +96 +89 +83 +77 +72 +68 +63 +59 +55 +51 +48 +45 +43 +40 +37 +35 +33 +30 +29 +26 +25 +23 +22 +21 +20 +18 +18 +16 +16 +14 +14 +13 +13 +12 +12 +11 +-24 +-108 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-116 +-108 +-100 +-93 +16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +115 +108 +101 +94 +87 +82 +76 +27 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-114 +-106 +-99 +-92 +-85 +24 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +117 +110 +102 +96 +89 +84 +77 +28 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-114 +-105 +-98 +-91 +-84 +-78 +-72 +-67 +-63 +-58 +-54 +-50 +-46 +-43 +-39 +-36 +-33 +-31 +-29 +-26 +-24 +-22 +-20 +-19 +-17 +-16 +-15 +-13 +-12 +-11 +-10 +-9 +-8 +-8 +-7 +-6 +-6 +98 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +104 +98 +91 +85 +80 +74 +69 +65 +60 +56 +53 +50 +47 +43 +41 +38 +35 +33 +31 +30 +29 +26 +25 +23 +22 +21 +20 +19 +18 +17 +16 +15 +14 +14 +14 +12 +-22 +-106 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-114 +-106 +-98 +-91 +-85 +-78 +-72 +-68 +-63 +-59 +-54 +-50 +-46 +-42 +-39 +-37 +-34 +-32 +-29 +-27 +-24 +-22 +-21 +-19 +-18 +-16 +-15 +-14 +-12 +-12 +-11 +-10 +-8 +-8 +-7 +-6 +97 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +111 +104 +97 +91 +85 +35 +-54 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-112 +-105 +-97 +-90 +-85 +26 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +110 +102 +96 +90 +84 +78 +28 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-112 +-104 +-97 +-90 +-83 +26 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +118 +110 +102 +96 +89 +84 +78 +29 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-114 +-106 +-98 +-91 +-85 +25 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +117 +109 +101 +95 +89 +83 +77 +27 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-113 +-105 +-97 +-90 +-84 +26 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +117 +110 +102 +96 +89 +83 +78 +73 +68 +64 +59 +56 +52 +48 +45 +43 +39 +37 +35 +33 +31 +29 +27 +26 +24 +23 +22 +20 +19 +18 +17 +17 +15 +15 +14 +13 +12 +12 +11 +-24 +-108 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-107 +-99 +-92 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +116 +108 +101 +94 +87 +82 +77 +26 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-113 +-105 +-97 +-91 +-84 +-77 +-72 +-67 +-63 +-58 +-54 +-51 +-47 +-42 +-39 +-36 +-34 +-31 +-29 +-27 +-25 +-23 +-21 +-20 +-18 +-16 +-15 +-14 +-13 +-11 +-11 +-10 +-9 +-8 +-7 +-6 +-5 +98 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +105 +97 +91 +85 +35 +-55 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-112 +-104 +-97 +-90 +-84 +26 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +117 +110 +102 +95 +89 +83 +77 +28 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-113 +-105 +-98 +-90 +-85 +25 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +117 +110 +102 +95 +89 +83 +77 +72 +67 +63 +59 +55 +52 +48 +45 +42 +39 +37 +34 +33 +30 +28 +27 +25 +24 +23 +21 +20 +18 +18 +17 +16 +15 +15 +14 +13 +12 +12 +11 +-23 +-107 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-114 +-106 +-98 +-91 +-85 +-79 +-73 +-69 +-64 +-59 +-55 +-50 +-46 +-43 +-40 +-37 +-34 +-32 +-30 +-27 +-25 +-24 +-21 +-20 +-18 +-17 +-15 +-14 +-13 +-13 +-10 +-10 +-9 +-9 +-7 +-7 +97 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +111 +104 +97 +91 +85 +79 +74 +69 +64 +61 +56 +52 +50 +47 +44 +41 +38 +36 +33 +31 +29 +28 +26 +25 +24 +22 +21 +20 +19 +18 +16 +16 +14 +15 +13 +13 +12 +-23 +-107 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-114 +-106 +-99 +-92 +-85 +-79 +-72 +-68 +-64 +-59 +-54 +-50 +-46 +-43 +-40 +-37 +-34 +-31 +-29 +-27 +-25 +-22 +-20 +-19 +-17 +-16 +-15 +-14 +-12 +-11 +-10 +-9 +-8 +-8 +-7 +-7 +97 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +104 +97 +91 +84 +35 +-55 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-113 +-105 +-97 +-90 +-84 +26 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +117 +110 +102 +96 +89 +83 +78 +73 +68 +64 +59 +56 +52 +49 +46 +44 +41 +39 +36 +34 +31 +30 +28 +27 +25 +23 +22 +21 +20 +19 +18 +18 +16 +15 +14 +14 +13 +13 +12 +-23 +-107 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-107 +-100 +-92 +-86 +-79 +-74 +-69 +-64 +-60 +-56 +-51 +-48 +-45 +-41 +-38 +-35 +-33 +-30 +-28 +-26 +-24 +-23 +-21 +-20 +-18 +-16 +-15 +-13 +-13 +-11 +-11 +-10 +-9 +-8 +-7 +97 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +112 +105 +98 +91 +85 +35 +-55 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-111 +-103 +-96 +-88 +-82 +27 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +111 +103 +96 +90 +84 +78 +29 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-114 +-105 +-98 +-91 +-84 +25 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +117 +110 +101 +95 +89 +82 +77 +72 +67 +63 +59 +55 +51 +48 +45 +42 +39 +37 +34 +32 +30 +29 +26 +25 +23 +23 +21 +20 +18 +17 +16 +16 +15 +14 +13 +13 +12 +12 +10 +-24 +-108 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-107 +-99 +-93 +-86 +-80 +-74 +-69 +-64 +-60 +-55 +-51 +-47 +-44 +-41 +-38 +-35 +-33 +-30 +-28 +-26 +-23 +-21 +-19 +-18 +-17 +-16 +-15 +-13 +-12 +-11 +-10 +-9 +-8 +-8 +-7 +97 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +105 +97 +91 +85 +80 +74 +70 +65 +61 +57 +53 +49 +47 +43 +40 +38 +36 +34 +32 +30 +28 +26 +25 +23 +22 +21 +20 +18 +18 +16 +16 +15 +14 +13 +12 +12 +-23 +-107 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-106 +-98 +-92 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +116 +109 +101 +95 +88 +83 +77 +26 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-114 +-105 +-97 +-90 +-84 +25 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +116 +109 +102 +96 +89 +83 +77 +28 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-114 +-106 +-98 +-92 +-86 +24 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +116 +109 +101 +94 +87 +82 +77 +28 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-113 +-105 +-97 +-90 +-84 +-77 +-71 +-66 +-62 +-58 +-53 +-49 +-46 +-42 +-39 +-35 +-32 +-30 +-28 +-25 +-23 +-21 +-20 +-18 +-17 +-15 +-14 +-12 +-11 +-10 +-9 +-8 +-8 +-6 +-6 +-5 +-5 +99 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +104 +98 +92 +85 +80 +74 +70 +65 +60 +57 +53 +50 +47 +43 +41 +39 +36 +34 +31 +30 +28 +26 +24 +23 +22 +20 +20 +18 +17 +16 +16 +15 +14 +13 +13 +12 +-22 +-106 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-115 +-106 +-98 +-92 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +116 +109 +101 +94 +88 +82 +77 +27 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-113 +-105 +-98 +-91 +-85 +24 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +116 +109 +101 +95 +89 +83 +77 +28 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-113 +-105 +-98 +-91 +-84 +-78 +-73 +-67 +-63 +-58 +-54 +-50 +-46 +-43 +-40 +-37 +-34 +-31 +-29 +-26 +-25 +-23 +-22 +-19 +-18 +-16 +-15 +-14 +-12 +-11 +-10 +-9 +-9 +-8 +-8 +-6 +-6 +98 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +112 +105 +98 +91 +85 +80 +75 +70 +64 +61 +57 +53 +50 +47 +43 +41 +38 +36 +33 +32 +30 +29 +27 +25 +23 +23 +21 +20 +18 +18 +16 +16 +15 +15 +14 +13 +12 +-22 +-106 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-106 +-99 +-92 +-85 +-79 +-73 +-69 +-64 +-60 +-55 +-51 +-47 +-44 +-40 +-38 +-34 +-32 +-30 +-28 +-26 +-24 +-21 +-20 +-18 +-17 +-15 +-15 +-13 +-12 +-12 +-10 +-10 +-8 +-7 +-7 +97 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +112 +104 +97 +91 +84 +34 +-56 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-112 +-104 +-96 +-90 +-83 +26 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +117 +109 +102 +96 +89 +84 +78 +28 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-112 +-104 +-97 +-90 +-83 +26 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +116 +108 +101 +94 +87 +82 +76 +71 +66 +62 +58 +54 +50 +47 +44 +41 +38 +36 +34 +32 +30 +28 +26 +25 +23 +22 +21 +20 +19 +17 +17 +16 +14 +14 +13 +13 +13 +13 +11 +-23 +-107 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-114 +-107 +-99 +-92 +-85 +-79 +-73 +-68 +-64 +-60 +-55 +-51 +-47 +-43 +-40 +-37 +-34 +-32 +-30 +-28 +-24 +-23 +-21 +-20 +-18 +-17 +-16 +-14 +-13 +-11 +-11 +-10 +-9 +-8 +-7 +-7 +97 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +105 +98 +91 +85 +35 +-55 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-111 +-103 +-96 +-89 +-82 +27 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +117 +110 +103 +96 +90 +84 +78 +28 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-114 +-106 +-99 +-92 +-85 +24 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +117 +109 +102 +95 +89 +83 +78 +28 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-113 +-105 +-98 +-90 +-84 +26 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +117 +110 +101 +95 +88 +82 +77 +27 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-114 +-105 +-98 +-92 +-85 +25 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +118 +110 +102 +96 +89 +83 +78 +28 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-113 +-104 +-97 +-90 +-84 +25 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +117 +110 +102 +95 +88 +83 +77 +72 +67 +63 +59 +55 +51 +48 +44 +42 +39 +36 +34 +32 +31 +29 +27 +25 +23 +23 +21 +20 +18 +17 +16 +15 +15 +14 +13 +12 +12 +11 +10 +-24 +-108 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-115 +-106 +-99 +-92 +-85 +-79 +-73 +-68 +-63 +-59 +-54 +-51 +-46 +-43 +-40 +-37 +-34 +-32 +-29 +-27 +-25 +-23 +-20 +-20 +-18 +-16 +-15 +-14 +-12 +-11 +-10 +-9 +-8 +-8 +-7 +-7 +97 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +112 +105 +97 +91 +85 +35 +-55 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-111 +-103 +-96 +-89 +-83 +26 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +117 +110 +102 +95 +88 +82 +77 +27 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-113 +-104 +-97 +-90 +-84 +26 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +117 +110 +103 +96 +89 +84 +78 +73 +68 +64 +60 +56 +52 +49 +45 +43 +40 +38 +35 +33 +31 +29 +28 +26 +24 +23 +22 +21 +19 +18 +17 +16 +15 +15 +13 +13 +12 +12 +12 +-24 +-107 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-114 +-107 +-99 +-92 +-86 +-79 +-73 +-69 +-63 +-59 +-54 +-51 +-47 +-44 +-40 +-37 +-34 +-32 +-29 +-27 +-25 +-23 +-22 +-20 +-18 +-17 +-15 +-15 +-13 +-12 +-10 +-10 +-9 +-8 +-8 +-7 +96 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +112 +104 +97 +91 +84 +79 +73 +69 +64 +60 +56 +53 +49 +47 +43 +40 +38 +35 +33 +31 +29 +28 +26 +25 +23 +22 +20 +20 +19 +17 +17 +16 +15 +15 +14 +14 +12 +-22 +-106 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-115 +-106 +-98 +-92 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +115 +108 +100 +93 +87 +81 +75 +27 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-114 +-106 +-99 +-92 +-85 +24 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +117 +110 +102 +96 +90 +84 +78 +28 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-113 +-105 +-97 +-90 +-84 +-78 +-72 +-67 +-62 +-58 +-54 +-50 +-46 +-42 +-39 +-37 +-34 +-31 +-29 +-26 +-24 +-22 +-20 +-18 +-17 +-15 +-14 +-13 +-12 +-10 +-10 +-9 +-8 +-8 +-7 +-7 +-6 +98 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +112 +105 +98 +92 +86 +80 +74 +70 +65 +61 +57 +53 +50 +47 +44 +41 +39 +37 +34 +32 +30 +28 +27 +25 +24 +23 +21 +20 +19 +18 +17 +16 +15 +14 +14 +14 +13 +-22 +-106 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-114 +-106 +-99 +-92 +-85 +-79 +-73 +-68 +-64 +-59 +-54 +-51 +-47 +-44 +-40 +-37 +-34 +-32 +-29 +-27 +-25 +-23 +-21 +-20 +-18 +-17 +-15 +-14 +-13 +-12 +-11 +-10 +-9 +-8 +-7 +-7 +97 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +105 +97 +91 +85 +35 +-55 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-112 +-104 +-97 +-90 +-83 +25 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +117 +110 +102 +96 +88 +84 +77 +28 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-114 +-105 +-98 +-91 +-84 +25 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +116 +109 +101 +95 +88 +83 +77 +27 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-113 +-105 +-97 +-90 +-84 +25 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +117 +110 +102 +96 +90 +83 +77 +73 +68 +64 +59 +56 +52 +49 +46 +43 +40 +38 +35 +34 +31 +29 +27 +26 +24 +23 +22 +20 +19 +18 +17 +17 +15 +15 +13 +13 +12 +12 +12 +-23 +-107 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-107 +-99 +-92 +-86 +-79 +-73 +-69 +-63 +-59 +-55 +-50 +-47 +-44 +-40 +-38 +-35 +-32 +-29 +-27 +-25 +-23 +-21 +-20 +-18 +-17 +-15 +-14 +-12 +-12 +-10 +-10 +-9 +-8 +-7 +-6 +98 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +105 +97 +91 +84 +80 +75 +69 +65 +61 +57 +54 +49 +47 +44 +41 +39 +36 +34 +32 +30 +29 +27 +25 +24 +22 +21 +20 +18 +18 +17 +16 +15 +15 +13 +13 +13 +-22 +-106 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-107 +-99 +-92 +-86 +-80 +-73 +-69 +-64 +-60 +-55 +-51 +-47 +-44 +-40 +-38 +-35 +-32 +-30 +-28 +-26 +-23 +-21 +-20 +-18 +-17 +-16 +-15 +-14 +-13 +-11 +-10 +-9 +-8 +-7 +-7 +97 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +104 +97 +91 +84 +79 +74 +69 +65 +61 +57 +53 +49 +46 +43 +40 +38 +35 +33 +32 +30 +28 +26 +25 +22 +21 +20 +19 +18 +17 +16 +15 +14 +14 +13 +12 +11 +-23 +-107 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-115 +-107 +-99 +-92 +-85 +-78 +-73 +-68 +-63 +-59 +-55 +-50 +-46 +-43 +-40 +-37 +-34 +-32 +-29 +-27 +-25 +-23 +-21 +-19 +-18 +-17 +-16 +-14 +-13 +-12 +-11 +-10 +-9 +-8 +-7 +-6 +97 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +106 +99 +92 +86 +35 +-55 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-112 +-103 +-96 +-89 +-83 +26 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +117 +110 +102 +95 +89 +83 +77 +29 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-113 +-105 +-98 +-90 +-84 +25 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +117 +110 +102 +95 +89 +83 +77 +27 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-113 +-105 +-98 +-91 +-84 +25 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +117 +109 +102 +95 +88 +83 +77 +72 +67 +63 +58 +55 +51 +48 +45 +43 +40 +37 +35 +33 +31 +29 +27 +26 +24 +23 +21 +20 +19 +17 +16 +16 +15 +14 +13 +13 +12 +12 +11 +-23 +-108 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-107 +-99 +-92 +-85 +-79 +-73 +-68 +-63 +-59 +-54 +-51 +-46 +-43 +-40 +-37 +-34 +-32 +-29 +-27 +-24 +-23 +-21 +-19 +-17 +-16 +-15 +-14 +-12 +-11 +-10 +-10 +-9 +-8 +-7 +-7 +97 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +105 +97 +90 +84 +79 +74 +69 +64 +60 +56 +53 +49 +46 +43 +40 +37 +36 +33 +31 +29 +27 +26 +24 +23 +21 +20 +19 +18 +18 +16 +16 +15 +14 +13 +13 +12 +-22 +-106 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-115 +-107 +-99 +-92 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +116 +109 +100 +94 +88 +82 +76 +28 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-114 +-106 +-98 +-91 +-85 +25 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +117 +110 +102 +96 +89 +83 +77 +27 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-113 +-105 +-97 +-90 +-84 +-78 +-72 +-67 +-62 +-58 +-54 +-49 +-46 +-42 +-39 +-36 +-33 +-31 +-29 +-26 +-24 +-22 +-21 +-18 +-17 +-16 +-14 +-13 +-12 +-11 +-10 +-9 +-8 +-6 +-6 +-5 +-5 +99 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +113 +106 +98 +92 +86 +80 +75 +70 +64 +61 +57 +54 +50 +47 +44 +41 +38 +36 +33 +32 +29 +28 +27 +25 +24 +23 +21 +20 +18 +18 +16 +15 +15 +15 +14 +13 +13 +-22 +-106 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-116 +-108 +-100 +-93 +-86 +-80 +-74 +-70 +-64 +-60 +-56 +-52 +-48 +-44 +-41 +-38 +-35 +-33 +-31 +-28 +-26 +-24 +-22 +-20 +-18 +-18 +-16 +-15 +-13 +-12 +-11 +-11 +-10 +-9 +-8 +-7 +97 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +105 +98 +91 +85 +35 +-55 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-111 +-103 +-96 +-89 +-83 +27 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +117 +109 +102 +95 +88 +83 +77 +28 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-113 +-105 +-98 +-91 +-84 +25 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +116 +109 +101 +95 +89 +83 +77 +72 +67 +63 +59 +55 +51 +48 +45 +42 +40 +37 +35 +33 +30 +29 +27 +25 +24 +23 +22 +20 +19 +18 +17 +17 +16 +15 +14 +14 +13 +12 +12 +-23 +-107 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-114 +-106 +-99 +-92 +-85 +-79 +-73 +-68 +-63 +-59 +-54 +-50 +-46 +-43 +-39 +-37 +-34 +-32 +-29 +-27 +-25 +-23 +-21 +-20 +-18 +-17 +-15 +-14 +-13 +-12 +-11 +-10 +-10 +-8 +-7 +-6 +97 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +104 +96 +91 +85 +79 +74 +69 +64 +61 +56 +53 +49 +46 +43 +40 +38 +36 +34 +32 +30 +28 +26 +25 +23 +22 +21 +20 +18 +17 +17 +16 +15 +14 +13 +13 +12 +-23 +-107 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-114 +-107 +-98 +-92 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +115 +108 +100 +93 +87 +82 +75 +26 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-113 +-105 +-97 +-90 +-84 +25 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +117 +110 +103 +96 +89 +84 +78 +28 +-61 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-113 +-105 +-98 +-91 +-85 +-78 +-72 +-68 +-63 +-58 +-54 +-50 +-47 +-43 +-40 +-37 +-34 +-31 +-29 +-27 +-26 +-22 +-21 +-19 +-18 +-16 +-15 +-14 +-13 +-11 +-11 +-9 +-9 +-8 +-7 +-6 +-6 +98 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +112 +105 +98 +92 +86 +80 +74 +70 +65 +61 +57 +54 +50 +47 +44 +42 +38 +36 +34 +31 +30 +28 +26 +25 +23 +22 +21 +20 +18 +17 +16 +15 +15 +14 +13 +13 +13 +-22 +-106 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-114 +-106 +-99 +-92 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +116 +108 +101 +94 +88 +82 +76 +26 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-114 +-105 +-98 +-92 +-85 +24 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +117 +109 +101 +95 +88 +82 +77 +27 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-121 +-112 +-105 +-97 +-90 +-84 +-78 +-72 +-67 +-63 +-58 +-54 +-49 +-46 +-42 +-39 +-36 +-34 +-31 +-29 +-26 +-25 +-23 +-21 +-19 +-18 +-17 +-16 +-14 +-13 +-11 +-10 +-9 +-9 +-8 +-7 +-6 +-6 +98 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +112 +105 +98 +91 +86 +36 +-54 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-119 +-111 +-102 +-96 +-88 +-82 +27 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +110 +103 +96 +89 +84 +78 +73 +68 +64 +59 +55 +52 +49 +45 +43 +39 +37 +35 +33 +31 +29 +27 +26 +24 +23 +21 +20 +18 +18 +17 +16 +16 +15 +14 +13 +13 +12 +11 +-23 +-107 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-114 +-106 +-98 +-92 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +115 +108 +101 +94 +87 +82 +76 +26 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-114 +-105 +-98 +-91 +-85 +-79 +-73 +-67 +-63 +-58 +-54 +-51 +-47 +-43 +-40 +-37 +-34 +-31 +-29 +-26 +-24 +-23 +-21 +-19 +-18 +-16 +-16 +-14 +-12 +-11 +-10 +-9 +-8 +-8 +-7 +-6 +-5 +98 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +105 +98 +92 +85 +35 +-55 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-120 +-112 +-104 +-96 +-89 +-83 +27 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +118 +110 +102 +95 +88 +83 +77 +28 +-62 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 +-112 +-105 +-97 +-90 +-84 +26 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +117 +110 +102 +95 +89 +83 +77 +73 +67 +63 +59 +55 +51 +48 +45 +41 +39 +37 +34 +33 +31 +29 +27 +26 +24 +22 +21 +20 +18 +18 +17 +16 +15 +14 +14 +13 +12 +12 +11 +-23 +-107 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-123 +-115 +-106 +-99 +-92 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +115 +108 +100 +94 +87 +81 +76 +27 +-63 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-122 From 566d6dc4b7c0cb1498eded7a1c8fcd2fe18153b3 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Mon, 28 Sep 2020 17:46:12 +0200 Subject: [PATCH 0686/1047] boundry check for tosend buffer --- armsrc/BigBuf.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/armsrc/BigBuf.c b/armsrc/BigBuf.c index f6c111d85..733f8c7f9 100644 --- a/armsrc/BigBuf.c +++ b/armsrc/BigBuf.c @@ -292,6 +292,12 @@ void tosend_reset(void) { } void tosend_stuffbit(int b) { + + if (toSend.max >= TOSEND_BUFFER_SIZE - 1) { + Dbprintf(_RED_("toSend overflow")); + return; + } + if (toSend.bit >= 8) { toSend.max++; toSend.buf[toSend.max] = 0; @@ -299,7 +305,7 @@ void tosend_stuffbit(int b) { } if (b) - toSend.buf[ toSend.max] |= (1 << (7 - toSend.bit)); + toSend.buf[toSend.max] |= (1 << (7 - toSend.bit)); toSend.bit++; From 3a5c7430b5cd0983a3ecda43159e9c31a1711f82 Mon Sep 17 00:00:00 2001 From: Msprg <18015488+Msprg@users.noreply.github.com> Date: Mon, 28 Sep 2020 18:11:40 +0200 Subject: [PATCH 0687/1047] Edited "protect" help text for more accuracy Yeah, I got nothing better to do, than just push fixes from discord. Anyways, I think this should work... --- client/src/cmdlft55xx.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/src/cmdlft55xx.c b/client/src/cmdlft55xx.c index 15f5c1398..5d7e2671e 100644 --- a/client/src/cmdlft55xx.c +++ b/client/src/cmdlft55xx.c @@ -355,7 +355,7 @@ static int usage_t55xx_protect(void) { PrintAndLogEx(NORMAL, ""); PrintAndLogEx(NORMAL, "Examples:"); PrintAndLogEx(NORMAL, _YELLOW_(" lf t55xx protect n 01020304") " - sets new password to 01020304"); - PrintAndLogEx(NORMAL, _YELLOW_(" lf t55xx protect p 11223344") " - use pwd 11223344 to set newpwd to 00000000"); + PrintAndLogEx(NORMAL, _YELLOW_(" lf t55xx protect p 11223344 n 00000000") " - use pwd 11223344 to set newpwd to 00000000"); PrintAndLogEx(NORMAL, ""); return PM3_SUCCESS; } From cc5a70ce6c6095ca1478ef0987d9a0a903845ff0 Mon Sep 17 00:00:00 2001 From: Msprg <18015488+Msprg@users.noreply.github.com> Date: Mon, 28 Sep 2020 18:52:57 +0200 Subject: [PATCH 0688/1047] Alignment fix --- client/src/cmdlft55xx.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/src/cmdlft55xx.c b/client/src/cmdlft55xx.c index 5d7e2671e..b9af525e4 100644 --- a/client/src/cmdlft55xx.c +++ b/client/src/cmdlft55xx.c @@ -354,8 +354,8 @@ static int usage_t55xx_protect(void) { print_usage_t55xx_downloadlink(T55XX_DLMODE_SINGLE, config.downlink_mode); PrintAndLogEx(NORMAL, ""); PrintAndLogEx(NORMAL, "Examples:"); - PrintAndLogEx(NORMAL, _YELLOW_(" lf t55xx protect n 01020304") " - sets new password to 01020304"); - PrintAndLogEx(NORMAL, _YELLOW_(" lf t55xx protect p 11223344 n 00000000") " - use pwd 11223344 to set newpwd to 00000000"); + PrintAndLogEx(NORMAL, _YELLOW_(" lf t55xx protect n 01020304") " - sets new password to 01020304"); + PrintAndLogEx(NORMAL, _YELLOW_(" lf t55xx protect p 11223344 n 00000000") " - use pwd 11223344 to set newpwd to 00000000"); PrintAndLogEx(NORMAL, ""); return PM3_SUCCESS; } From a3282b940b340b1cf2c5c4aa73b8860f3ee519b8 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Mon, 28 Sep 2020 20:31:45 +0200 Subject: [PATCH 0689/1047] Rename em 410x_write into 410x_clone --- client/src/cmdlfem4x.c | 20 ++++++++++---------- client/src/cmdlft55xx.c | 2 +- doc/commands.md | 2 +- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/client/src/cmdlfem4x.c b/client/src/cmdlfem4x.c index ae35245ae..272a53b97 100644 --- a/client/src/cmdlfem4x.c +++ b/client/src/cmdlfem4x.c @@ -63,17 +63,17 @@ static int usage_lf_em410x_watch(void) { return PM3_SUCCESS; } -static int usage_lf_em410x_write(void) { +static int usage_lf_em410x_clone(void) { PrintAndLogEx(NORMAL, "Writes EM410x ID to a T55x7 or Q5/T5555 tag"); PrintAndLogEx(NORMAL, ""); - PrintAndLogEx(NORMAL, "Usage: lf em 410x_write [h] [clock]"); + PrintAndLogEx(NORMAL, "Usage: lf em 410x_clone [h] [clock]"); PrintAndLogEx(NORMAL, "Options:"); PrintAndLogEx(NORMAL, " h - this help"); PrintAndLogEx(NORMAL, " - ID number"); PrintAndLogEx(NORMAL, " - 0|1 0 = Q5/T5555, 1 = T55x7"); PrintAndLogEx(NORMAL, " - 16|32|40|64, optional, set R/F clock rate, defaults to 64"); PrintAndLogEx(NORMAL, "Examples:"); - PrintAndLogEx(NORMAL, _YELLOW_(" lf em 410x_write 0F0368568B 1") " = write ID to t55x7 card"); + PrintAndLogEx(NORMAL, _YELLOW_(" lf em 410x_clone 0F0368568B 1") " = write ID to t55x7 card"); return PM3_SUCCESS; } static int usage_lf_em410x_ws(void) { @@ -615,9 +615,9 @@ static int CmdEM410xWatchnSpoof(const char *Cmd) { return PM3_SUCCESS; } -static int CmdEM410xWrite(const char *Cmd) { +static int CmdEM410xClone(const char *Cmd) { char cmdp = tolower(param_getchar(Cmd, 0)); - if (cmdp == 0x00 || cmdp == 'h') return usage_lf_em410x_write(); + if (cmdp == 0x00 || cmdp == 'h') return usage_lf_em410x_clone(); uint64_t id = param_get64ex(Cmd, 0, -1, 16); uint8_t card = param_get8ex(Cmd, 1, 0xFF, 10); @@ -626,19 +626,19 @@ static int CmdEM410xWrite(const char *Cmd) { // Check ID if (id == 0xFFFFFFFFFFFFFFFF) { PrintAndLogEx(ERR, "error, ID is required\n"); - usage_lf_em410x_write(); + usage_lf_em410x_clone(); return PM3_EINVARG; } if (id >= 0x10000000000) { PrintAndLogEx(ERR, "error, given EM410x ID is longer than 40 bits\n"); - usage_lf_em410x_write(); + usage_lf_em410x_clone(); return PM3_EINVARG; } // Check Card if (card > 1) { PrintAndLogEx(FAILED, "error, bad card type selected\n"); - usage_lf_em410x_write(); + usage_lf_em410x_clone(); return PM3_EINVARG; } @@ -650,7 +650,7 @@ static int CmdEM410xWrite(const char *Cmd) { if ((clock1 != 16) && (clock1 != 32) && (clock1 != 64) && (clock1 != 40)) { PrintAndLogEx(FAILED, "error, clock rate" _RED_("%d")" not valid", clock1); PrintAndLogEx(INFO, "supported clock rates: " _YELLOW_("16, 32, 40, 60") "\n"); - usage_lf_em410x_write(); + usage_lf_em410x_clone(); return PM3_EINVARG; } @@ -1407,7 +1407,7 @@ static command_t CommandTable[] = { {"410x_brute", CmdEM410xBrute, IfPm3Lf, "reader bruteforce attack by simulating EM410x tags"}, {"410x_watch", CmdEM410xWatch, IfPm3Lf, "watches for EM410x 125/134 kHz tags (option 'h' for 134)"}, {"410x_spoof", CmdEM410xWatchnSpoof, IfPm3Lf, "watches for EM410x 125/134 kHz tags, and replays them. (option 'h' for 134)" }, - {"410x_write", CmdEM410xWrite, IfPm3Lf, "write EM410x UID to T55x7 or Q5/T5555 tag"}, + {"410x_clone", CmdEM410xClone, IfPm3Lf, "write EM410x UID to T55x7 or Q5/T5555 tag"}, {"----------", CmdHelp, AlwaysAvailable, "-------------------- " _CYAN_("EM 4x05 / 4x69") " -------------------"}, {"4x05_demod", CmdEM4x05Demod, AlwaysAvailable, "demodulate a EM4x05/EM4x69 tag from the GraphBuffer"}, {"4x05_dump", CmdEM4x05Dump, IfPm3Lf, "dump EM4x05/EM4x69 tag"}, diff --git a/client/src/cmdlft55xx.c b/client/src/cmdlft55xx.c index b9af525e4..437789dee 100644 --- a/client/src/cmdlft55xx.c +++ b/client/src/cmdlft55xx.c @@ -379,7 +379,7 @@ static int usage_t55xx_clonehelp(void) { PrintAndLogEx(NORMAL, "For cloning specific techs on T55xx tags, see commands available in corresponding LF sub-menus, e.g.:"); PrintAndLogEx(NORMAL, _GREEN_("lf awid clone")); // todo: rename to clone - PrintAndLogEx(NORMAL, _GREEN_("lf em 410x_write")); + PrintAndLogEx(NORMAL, _GREEN_("lf em 410x_clone")); // todo: implement restore // PrintAndLogEx(NORMAL, _GREEN_("lf em 4x05_write")); // PrintAndLogEx(NORMAL, _GREEN_("lf em 4x50_write")); diff --git a/doc/commands.md b/doc/commands.md index d5839fc52..487d91e29 100644 --- a/doc/commands.md +++ b/doc/commands.md @@ -490,7 +490,7 @@ Check column "offline" for their availability. |`lf em 410x_brute `|N |`reader bruteforce attack by simulating EM410x tags` |`lf em 410x_watch `|N |`watches for EM410x 125/134 kHz tags (option 'h' for 134)` |`lf em 410x_spoof `|N |`watches for EM410x 125/134 kHz tags, and replays them. (option 'h' for 134)` -|`lf em 410x_write `|N |`write EM410x UID to T5555(Q5) or T55x7 tag` +|`lf em 410x_clone `|N |`write EM410x UID to T5555(Q5) or T55x7 tag` |`lf em 4x05_demod `|Y |`demodulate a EM4x05/EM4x69 tag from the GraphBuffer` |`lf em 4x05_dump `|N |`dump EM4x05/EM4x69 tag` |`lf em 4x05_wipe `|N |`wipe EM4x05/EM4x69 tag` From 4e10c9ec0a5f469c586951a04b3298c8d267a9e5 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Mon, 28 Sep 2020 21:09:26 +0200 Subject: [PATCH 0690/1047] move idteck to its own file --- client/CMakeLists.txt | 1 + client/Makefile | 1 + client/android/CMakeLists.txt | 3 +- client/src/cmddata.c | 67 ----------------- client/src/cmddata.h | 1 - client/src/cmdlf.c | 36 ++++----- client/src/cmdlfidteck.c | 136 ++++++++++++++++++++++++++++++++++ client/src/cmdlfidteck.h | 19 +++++ common/lfdemod.c | 20 ----- common/lfdemod.h | 1 - 10 files changed, 178 insertions(+), 107 deletions(-) create mode 100644 client/src/cmdlfidteck.c create mode 100644 client/src/cmdlfidteck.h diff --git a/client/CMakeLists.txt b/client/CMakeLists.txt index fc56b594a..dd4811435 100644 --- a/client/CMakeLists.txt +++ b/client/CMakeLists.txt @@ -253,6 +253,7 @@ set (TARGET_SOURCES ${PM3_ROOT}/client/src/cmdlfguard.c ${PM3_ROOT}/client/src/cmdlfhid.c ${PM3_ROOT}/client/src/cmdlfhitag.c + ${PM3_ROOT}/client/src/cmdlfidteck.c ${PM3_ROOT}/client/src/cmdlfindala.c ${PM3_ROOT}/client/src/cmdlfio.c ${PM3_ROOT}/client/src/cmdlfjablotron.c diff --git a/client/Makefile b/client/Makefile index f3569e037..29fb4462e 100644 --- a/client/Makefile +++ b/client/Makefile @@ -447,6 +447,7 @@ SRCS = aidsearch.c \ cmdlfgallagher.c \ cmdlfhid.c \ cmdlfhitag.c \ + cmdlfidteck.c \ cmdlfindala.c \ cmdlfio.c \ cmdlfjablotron.c \ diff --git a/client/android/CMakeLists.txt b/client/android/CMakeLists.txt index 28fc2021c..7b7335071 100644 --- a/client/android/CMakeLists.txt +++ b/client/android/CMakeLists.txt @@ -132,6 +132,7 @@ add_library(pm3rrg_rdv4 SHARED ${PM3_ROOT}/client/src/cmdlfguard.c ${PM3_ROOT}/client/src/cmdlfhid.c ${PM3_ROOT}/client/src/cmdlfhitag.c + ${PM3_ROOT}/client/src/cmdlfidteck.c ${PM3_ROOT}/client/src/cmdlfindala.c ${PM3_ROOT}/client/src/cmdlfio.c ${PM3_ROOT}/client/src/cmdlfjablotron.c @@ -209,4 +210,4 @@ target_link_libraries(pm3rrg_rdv4 pm3rrg_rdv4_reveng pm3rrg_rdv4_whereami android - log) \ No newline at end of file + log) diff --git a/client/src/cmddata.c b/client/src/cmddata.c index ffeb7f965..de0e4a78a 100644 --- a/client/src/cmddata.c +++ b/client/src/cmddata.c @@ -1277,73 +1277,6 @@ int PSKDemod(int clk, int invert, int maxErr, bool verbose) { return PM3_SUCCESS; } -int demodIdteck(bool verbose) { - (void) verbose; // unused so far - if (PSKDemod(0, 0, 100, false) != PM3_SUCCESS) { - PrintAndLogEx(DEBUG, "DEBUG: Error - Idteck PSKDemod failed"); - return PM3_ESOFT; - } - size_t size = DemodBufferLen; - - //get binary from PSK1 wave - int idx = detectIdteck(DemodBuffer, &size); - if (idx < 0) { - - if (idx == -1) - PrintAndLogEx(DEBUG, "DEBUG: Error - Idteck: not enough samples"); - else if (idx == -2) - PrintAndLogEx(DEBUG, "DEBUG: Error - Idteck: just noise"); - else if (idx == -3) - PrintAndLogEx(DEBUG, "DEBUG: Error - Idteck: preamble not found"); - else if (idx == -4) - PrintAndLogEx(DEBUG, "DEBUG: Error - Idteck: size not correct: %zu", size); - else - PrintAndLogEx(DEBUG, "DEBUG: Error - Idteck: idx: %d", idx); - - // if didn't find preamble try again inverting - if (PSKDemod(0, 1, 100, false) != PM3_SUCCESS) { - PrintAndLogEx(DEBUG, "DEBUG: Error - Idteck PSKDemod failed"); - return PM3_ESOFT; - } - idx = detectIdteck(DemodBuffer, &size); - if (idx < 0) { - - if (idx == -1) - PrintAndLogEx(DEBUG, "DEBUG: Error - Idteck: not enough samples"); - else if (idx == -2) - PrintAndLogEx(DEBUG, "DEBUG: Error - Idteck: just noise"); - else if (idx == -3) - PrintAndLogEx(DEBUG, "DEBUG: Error - Idteck: preamble not found"); - else if (idx == -4) - PrintAndLogEx(DEBUG, "DEBUG: Error - Idteck: size not correct: %zu", size); - else - PrintAndLogEx(DEBUG, "DEBUG: Error - Idteck: idx: %d", idx); - - return PM3_ESOFT; - } - } - setDemodBuff(DemodBuffer, 64, idx); - - //got a good demod - uint32_t id = 0; - uint32_t raw1 = bytebits_to_byte(DemodBuffer, 32); - uint32_t raw2 = bytebits_to_byte(DemodBuffer + 32, 32); - - //parity check (TBD) - //checksum check (TBD) - - //output - PrintAndLogEx(SUCCESS, "IDTECK Tag Found: Card ID %u , Raw: %08X%08X", id, raw1, raw2); - return PM3_SUCCESS; -} - -/* -static int CmdIdteckDemod(const char *Cmd) { - (void)Cmd; // Cmd is not used so far - return demodIdteck(); -} -*/ - // by marshmellow // takes 3 arguments - clock, invert, maxErr as integers // attempts to demodulate nrz only diff --git a/client/src/cmddata.h b/client/src/cmddata.h index aecce229a..86a60a9bb 100644 --- a/client/src/cmddata.h +++ b/client/src/cmddata.h @@ -80,7 +80,6 @@ int getSamplesEx(uint32_t start, uint32_t end, bool verbose); void setClockGrid(uint32_t clk, int offset); int directionalThreshold(const int *in, int *out, size_t len, int8_t up, int8_t down); int AskEdgeDetect(const int *in, int *out, int len, int threshold); -int demodIdteck(bool verbose); #define MAX_DEMOD_BUF_LEN (1024*128) extern uint8_t DemodBuffer[MAX_DEMOD_BUF_LEN]; diff --git a/client/src/cmdlf.c b/client/src/cmdlf.c index 113ca90be..8890fd8e7 100644 --- a/client/src/cmdlf.c +++ b/client/src/cmdlf.c @@ -33,28 +33,29 @@ #include "cmdlfem4x50.h" // for em4x50 #include "cmdlfhid.h" // for hid menu #include "cmdlfhitag.h" // for hitag menu +#include "cmdlfidteck.h" // for idteck menu #include "cmdlfio.h" // for ioprox menu -#include "cmdlft55xx.h" // for t55xx menu -#include "cmdlfti.h" // for ti menu -#include "cmdlfpresco.h" // for presco menu -#include "cmdlfpcf7931.h" // for pcf7931 menu -#include "cmdlfpyramid.h" // for pyramid menu -#include "cmdlfviking.h" // for viking menu -#include "cmdlfnedap.h" // for NEDAP menu -#include "cmdlfjablotron.h" // for JABLOTRON menu -#include "cmdlfvisa2000.h" // for VISA2000 menu -#include "cmdlfnoralsy.h" // for NORALSY meny #include "cmdlfcotag.h" // for COTAG meny -#include "cmdlfindala.h" // for indala menu -#include "cmdlfguard.h" // for gproxii menu #include "cmdlffdx.h" // for fdx-b menu -#include "cmdlfparadox.h" // for paradox menu -#include "cmdlfnexwatch.h" // for nexwatch menu -#include "cmdlfsecurakey.h" // for securakey menu -#include "cmdlfpac.h" // for pac menu +#include "cmdlfgallagher.h" // for GALLAGHER menu +#include "cmdlfguard.h" // for gproxii menu +#include "cmdlfindala.h" // for indala menu +#include "cmdlfjablotron.h" // for JABLOTRON menu #include "cmdlfkeri.h" // for keri menu #include "cmdlfmotorola.h" // for Motorola menu -#include "cmdlfgallagher.h" // for GALLAGHER menu +#include "cmdlfnedap.h" // for NEDAP menu +#include "cmdlfnexwatch.h" // for nexwatch menu +#include "cmdlfnoralsy.h" // for NORALSY meny +#include "cmdlfpac.h" // for pac menu +#include "cmdlfparadox.h" // for paradox menu +#include "cmdlfpcf7931.h" // for pcf7931 menu +#include "cmdlfpresco.h" // for presco menu +#include "cmdlfpyramid.h" // for pyramid menu +#include "cmdlfsecurakey.h" // for securakey menu +#include "cmdlft55xx.h" // for t55xx menu +#include "cmdlfti.h" // for ti menu +#include "cmdlfviking.h" // for viking menu +#include "cmdlfvisa2000.h" // for VISA2000 menu #define LF_CMDREAD_MAX_EXTRA_SYMBOLS 4 static bool g_lf_threshold_set = false; @@ -1531,6 +1532,7 @@ static command_t CommandTable[] = { {"gproxii", CmdLFGuard, AlwaysAvailable, "{ Guardall Prox II RFIDs... }"}, {"hid", CmdLFHID, AlwaysAvailable, "{ HID Prox RFIDs... }"}, {"hitag", CmdLFHitag, AlwaysAvailable, "{ Hitag CHIPs... }"}, + {"idteck", CmdLFIdteck, AlwaysAvailable, "{ Idteck RFIDs... }"}, {"indala", CmdLFINDALA, AlwaysAvailable, "{ Indala RFIDs... }"}, {"io", CmdLFIO, AlwaysAvailable, "{ ioProx RFIDs... }"}, {"jablotron", CmdLFJablotron, AlwaysAvailable, "{ Jablotron RFIDs... }"}, diff --git a/client/src/cmdlfidteck.c b/client/src/cmdlfidteck.c new file mode 100644 index 000000000..1499aa7c9 --- /dev/null +++ b/client/src/cmdlfidteck.c @@ -0,0 +1,136 @@ +//----------------------------------------------------------------------------- +// Iceman, +// +// This code is licensed to you under the terms of the GNU GPL, version 2 or, +// at your option, any later version. See the LICENSE.txt file for the text of +// the license. +//----------------------------------------------------------------------------- +// Low frequency Idteck tag commands +// PSK +//----------------------------------------------------------------------------- +#include "cmdlfidteck.h" + +#include +#include +#include + +#include "common.h" + +#include "cmdparser.h" // command_t +#include "comms.h" +#include "ui.h" +#include "cmddata.h" +#include "cmdlf.h" +#include "lfdemod.h" +#include "commonutil.h" // num_to_bytes + +static int CmdHelp(const char *Cmd); + +int demodIdteck(bool verbose) { + (void) verbose; // unused so far + if (PSKDemod(0, 0, 100, false) != PM3_SUCCESS) { + PrintAndLogEx(DEBUG, "DEBUG: Error - Idteck PSKDemod failed"); + return PM3_ESOFT; + } + size_t size = DemodBufferLen; + + //get binary from PSK1 wave + int idx = detectIdteck(DemodBuffer, &size); + if (idx < 0) { + + if (idx == -1) + PrintAndLogEx(DEBUG, "DEBUG: Error - Idteck: not enough samples"); + else if (idx == -2) + PrintAndLogEx(DEBUG, "DEBUG: Error - Idteck: just noise"); + else if (idx == -3) + PrintAndLogEx(DEBUG, "DEBUG: Error - Idteck: preamble not found"); + else if (idx == -4) + PrintAndLogEx(DEBUG, "DEBUG: Error - Idteck: size not correct: %zu", size); + else + PrintAndLogEx(DEBUG, "DEBUG: Error - Idteck: idx: %d", idx); + + // if didn't find preamble try again inverting + if (PSKDemod(0, 1, 100, false) != PM3_SUCCESS) { + PrintAndLogEx(DEBUG, "DEBUG: Error - Idteck PSKDemod failed"); + return PM3_ESOFT; + } + idx = detectIdteck(DemodBuffer, &size); + if (idx < 0) { + + if (idx == -1) + PrintAndLogEx(DEBUG, "DEBUG: Error - Idteck: not enough samples"); + else if (idx == -2) + PrintAndLogEx(DEBUG, "DEBUG: Error - Idteck: just noise"); + else if (idx == -3) + PrintAndLogEx(DEBUG, "DEBUG: Error - Idteck: preamble not found"); + else if (idx == -4) + PrintAndLogEx(DEBUG, "DEBUG: Error - Idteck: size not correct: %zu", size); + else + PrintAndLogEx(DEBUG, "DEBUG: Error - Idteck: idx: %d", idx); + + return PM3_ESOFT; + } + } + setDemodBuff(DemodBuffer, 64, idx); + + //got a good demod + uint32_t id = 0; + uint32_t raw1 = bytebits_to_byte(DemodBuffer, 32); + uint32_t raw2 = bytebits_to_byte(DemodBuffer + 32, 32); + + //parity check (TBD) + //checksum check (TBD) + + //output + PrintAndLogEx(SUCCESS, "IDTECK Tag Found: Card ID %u , Raw: %08X%08X", id, raw1, raw2); + return PM3_SUCCESS; +} + +static int CmdIdteckDemod(const char *Cmd) { + (void)Cmd; // Cmd is not used so far + return demodIdteck(true); +} + +static int CmdIdteckRead(const char *Cmd) { + (void)Cmd; + lf_read(false, 5000); + return demodIdteck(true); +} + +static command_t CommandTable[] = { + {"help", CmdHelp, AlwaysAvailable, "This help"}, + {"demod", CmdIdteckDemod, AlwaysAvailable, "Demodulate an Idteck tag from the GraphBuffer"}, + {"read", CmdIdteckRead, IfPm3Lf, "Attempt to read and Extract tag data from the antenna"}, + {NULL, NULL, NULL, NULL} +}; + +static int CmdHelp(const char *Cmd) { + (void)Cmd; // Cmd is not used so far + CmdsHelp(CommandTable); + return PM3_SUCCESS; +} + +int CmdLFIdteck(const char *Cmd) { + clearCommandBuffer(); + return CmdsParse(CommandTable, Cmd); +} + +// Find IDTEC PSK1, RF Preamble == 0x4944544B, Demodsize 64bits +// by iceman +int detectIdteck(uint8_t *dest, size_t *size) { + //make sure buffer has data + if (*size < 64 * 2) return -1; + + if (getSignalProperties()->isnoise) return -2; + + size_t start_idx = 0; + uint8_t preamble[] = {0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1}; + + //preamble not found + if (!preambleSearch(dest, preamble, sizeof(preamble), size, &start_idx)) + return -3; + + // wrong demoded size + if (*size != 64) return -4; + return (int)start_idx; +} diff --git a/client/src/cmdlfidteck.h b/client/src/cmdlfidteck.h new file mode 100644 index 000000000..aefa9f5d4 --- /dev/null +++ b/client/src/cmdlfidteck.h @@ -0,0 +1,19 @@ +//----------------------------------------------------------------------------- +// +// This code is licensed to you under the terms of the GNU GPL, version 2 or, +// at your option, any later version. See the LICENSE.txt file for the text of +// the license. +//----------------------------------------------------------------------------- +// Low frequency Idteck tag commands +//----------------------------------------------------------------------------- +#ifndef CMDLFIDTECK_H__ +#define CMDLFIDTECK_H__ + +#include "common.h" + +int CmdLFIdteck(const char *Cmd); + +int demodIdteck(bool verbose); +int detectIdteck(uint8_t *dest, size_t *size); + +#endif diff --git a/common/lfdemod.c b/common/lfdemod.c index e952ed59c..7b899e99e 100644 --- a/common/lfdemod.c +++ b/common/lfdemod.c @@ -2168,26 +2168,6 @@ int HIDdemodFSK(uint8_t *dest, size_t *size, uint32_t *hi2, uint32_t *hi, uint32 return (int)start_idx; } -// Find IDTEC PSK1, RF Preamble == 0x4944544B, Demodsize 64bits -// by iceman -int detectIdteck(uint8_t *dest, size_t *size) { - //make sure buffer has data - if (*size < 64 * 2) return -1; - - if (signalprop.isnoise) return -2; - - size_t start_idx = 0; - uint8_t preamble[] = {0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1}; - - //preamble not found - if (!preambleSearch(dest, preamble, sizeof(preamble), size, &start_idx)) - return -3; - - // wrong demoded size - if (*size != 64) return -4; - return (int)start_idx; -} - int detectIOProx(uint8_t *dest, size_t *size, int *waveStartIdx) { //make sure buffer has data if (*size < 66 * 64) return -1; diff --git a/common/lfdemod.h b/common/lfdemod.h index 58ebd72c9..e8d516604 100644 --- a/common/lfdemod.h +++ b/common/lfdemod.h @@ -78,7 +78,6 @@ size_t removeParity(uint8_t *bits, size_t startIdx, uint8_t pLen, uint8_t pTyp int detectAWID(uint8_t *dest, size_t *size, int *waveStartIdx); int Em410xDecode(uint8_t *bits, size_t *size, size_t *start_idx, uint32_t *hi, uint64_t *lo); int HIDdemodFSK(uint8_t *dest, size_t *size, uint32_t *hi2, uint32_t *hi, uint32_t *lo, int *waveStartIdx); -int detectIdteck(uint8_t *dest, size_t *size); int detectIOProx(uint8_t *dest, size_t *size, int *waveStartIdx); #endif From 2c89a36a642969707ad92da36e232a4e2d5c127c Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Tue, 29 Sep 2020 00:27:35 +0200 Subject: [PATCH 0691/1047] magic cards: document anticol shortcut support --- doc/magic_cards_notes.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/doc/magic_cards_notes.md b/doc/magic_cards_notes.md index ffa10f04c..9f95bef5e 100644 --- a/doc/magic_cards_notes.md +++ b/doc/magic_cards_notes.md @@ -495,6 +495,9 @@ Computing BCC1 on UID 04112233445566: `analyse lcr 33445566` = `44` Int is internal, typically 0x48 +Anticol shortcut (CL1/3000) is supported for UL, ULC, NTAG except NTAG I2C + + ## MIFARE Ultralight Gen1A ### Identify @@ -561,11 +564,13 @@ Issue three regular MFU write commands in a row to write first three blocks. * BCC: computed * ATS: 0A78008102DBA0C119402AB5 +* Anticol shortcut (CL1/3000): fails #### MIFARE Ultralight DirectWrite flavour 2 * BCC: play blindly the block0 BCC0 and block2 BCC1 bytes, beware! * ATS: 850000A00A000AB00000000000000000184D +* Anticol shortcut (CL1/3000): succeeds ### Proxmark3 commands @@ -672,6 +677,7 @@ hf 14a info * BCC: computed * ATS: 0A78008102DBA0C119402AB5 +* Anticol shortcut (CL1/3000): fails # NTAG @@ -703,6 +709,7 @@ hf 14a info * BCC: play blindly the block0 BCC0 and block2 BCC1 bytes, beware! * ATS: 0A78008102DBA0C119402AB5 +* Anticol shortcut (CL1/3000): succeeds ## NTAG21x @@ -720,6 +727,8 @@ Emulates fully NTAG213, 213F, 215, 216, 216F Emulates partially UL EV1 48k/128k, NTAG210, NTAG212, NTAGI2C 1K/2K, NTAGI2C 1K/2K PLUS +Anticol shortcut (CL1/3000): fails + ### Proxmark3 commands ``` From d22ee1091b119673939b812ceb075a5f5dd757b2 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Tue, 29 Sep 2020 00:36:35 +0200 Subject: [PATCH 0692/1047] fix Presco demod --- client/src/cmdlfpresco.c | 2 +- tools/pm3_tests.sh | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/client/src/cmdlfpresco.c b/client/src/cmdlfpresco.c index b960062ad..d8bca9c19 100644 --- a/client/src/cmdlfpresco.c +++ b/client/src/cmdlfpresco.c @@ -60,7 +60,7 @@ static int usage_lf_presco_sim(void) { int demodPresco(bool verbose) { (void) verbose; // unused so far bool st = true; - if (ASKDemod_ext(32, 0, 0, 0, true, false, false, 1, &st) != PM3_SUCCESS) { + if (ASKDemod_ext(32, 0, 0, 0, false, false, false, 1, &st) != PM3_SUCCESS) { PrintAndLogEx(DEBUG, "DEBUG: Error Presco ASKDemod failed"); return PM3_ESOFT; } diff --git a/tools/pm3_tests.sh b/tools/pm3_tests.sh index bf8ba0a52..577021cb7 100755 --- a/tools/pm3_tests.sh +++ b/tools/pm3_tests.sh @@ -428,9 +428,9 @@ while true; do if ! CheckExecute slow "lf T55 paradox test" "$CLIENTBIN -c 'data load traces/lf_t5577_paradox.pm3; lf search 1'" "Paradox ID found"; then break; fi if ! CheckExecute slow "lf T55 paradox test2" "$CLIENTBIN -c 'data load traces/lf_t5577_paradox.pm3; lf paradox demod'" \ "Paradox - ID: 004209dea FC: 96 Card: 40426, Checksum: b2, Raw: 0f55555695596a6a9999a59a"; then break; fi -# if ! CheckExecute slow "lf T55 presco test" "$CLIENTBIN -c 'data load traces/lf_t5577_presco.pm3; lf search 1'" "Presco ID found"; then break; fi -# if ! CheckExecute slow "lf T55 presco test2" "$CLIENTBIN -c 'data load traces/lf_t5577_presco.pm3; lf presco demod'" \ -# "Presco - Card: 1E8021D9, Raw: 10D0000000000000000000001E8021D9"; then break; fi + if ! CheckExecute slow "lf T55 presco test" "$CLIENTBIN -c 'data load traces/lf_t5577_presco.pm3; lf search 1'" "Presco ID found"; then break; fi + if ! CheckExecute slow "lf T55 presco test2" "$CLIENTBIN -c 'data load traces/lf_t5577_presco.pm3; lf presco demod'" \ + "Presco - Card: 1E8021D9, Raw: 10D0000000000000000000001E8021D9"; then break; fi if ! CheckExecute slow "lf T55 pyramid test" "$CLIENTBIN -c 'data load traces/lf_t5577_pyramid.pm3; lf search 1'" "Pyramid ID found"; then break; fi if ! CheckExecute slow "lf T55 pyramid test2" "$CLIENTBIN -c 'data load traces/lf_t5577_pyramid.pm3; lf pyramid demod'" \ "Pyramid - len: 26, FC: 123 Card: 11223 - Wiegand: 2f657ae, Raw: 00010101010101010101016eb35e5da4"; then break; fi From 45ca5c416d3ffb8343aa4de8f2fa18dbf55ec192 Mon Sep 17 00:00:00 2001 From: mwalker33 Date: Tue, 29 Sep 2020 20:21:34 +1000 Subject: [PATCH 0693/1047] Update cliparser.c Adjusted to meet RRG format style and color. --- client/deps/cliparser/cliparser.c | 63 ++++++++++++++++++++++++++----- 1 file changed, 54 insertions(+), 9 deletions(-) diff --git a/client/deps/cliparser/cliparser.c b/client/deps/cliparser/cliparser.c index 6a4c36faa..10055a420 100644 --- a/client/deps/cliparser/cliparser.c +++ b/client/deps/cliparser/cliparser.c @@ -11,10 +11,25 @@ #include "cliparser.h" #include #include +#include // Get color constants +#include // get PrintAndLogEx + #ifndef ARRAYLEN # define ARRAYLEN(x) (sizeof(x)/sizeof((x)[0])) #endif +// Custom Colors +// To default the color return s +#define _SectionTagColor_(s) _GREEN_(s) +#define _ExampleColor_(s) _YELLOW_(s) +#define _CommandColor_(s) _RED_(s) +#define _DescriptionColor_(s) _CYAN_(s) +#define _ArgColor_(s) _WHITE_(s) +#define _ArgHelpColor_(s) _WHITE_(s) +// End Custom Colors +// Option width set to 30 to allow option descriptions to align. approx line 74 +// Example width set to 50 to allow help descriptions to align. approx line 93 + int CLIParserInit(CLIParserContext **ctx, const char *vprogramName, const char *vprogramHint, const char *vprogramHelp) { *ctx = malloc(sizeof(CLIParserContext)); if (!*ctx) { @@ -40,7 +55,7 @@ int CLIParserParseArg(CLIParserContext *ctx, int argc, char **argv, void *vargta /* verify the argtable[] entries were allocated sucessfully */ if (arg_nullcheck(ctx->argtable) != 0) { /* NULL entries were detected, some allocations must have failed */ - printf("ERROR: Insufficient memory\n"); + PrintAndLogEx(ERR,"ERROR: Insufficient memory\n"); fflush(stdout); return 2; } @@ -49,14 +64,43 @@ int CLIParserParseArg(CLIParserContext *ctx, int argc, char **argv, void *vargta /* special case: '--help' takes precedence over error reporting */ if ((argc < 2 && !allowEmptyExec) || ((struct arg_lit *)(ctx->argtable)[0])->count > 0) { // help must be the first record - printf("Usage: %s", ctx->programName); - arg_print_syntaxv(stdout, ctx->argtable, "\n"); if (ctx->programHint) - printf("%s\n\n", ctx->programHint); - arg_print_glossary(stdout, ctx->argtable, " %-20s %s\n"); - printf("\n"); - if (ctx->programHelp) - printf("%s \n", ctx->programHelp); + PrintAndLogEx(NORMAL,"\n"_DescriptionColor_("%s"), ctx->programHint); + + PrintAndLogEx(NORMAL,"\n"_SectionTagColor_("usage:")); + PrintAndLogEx (NORMAL," "_CommandColor_("%s")NOLF, ctx->programName); + arg_print_syntaxv(stdout, ctx->argtable, "\n\n"); + + PrintAndLogEx(NORMAL,_SectionTagColor_("options:")); + + arg_print_glossary(stdout, ctx->argtable, " "_ArgColor_("%-30s")" "_ArgHelpColor_("%s")"\n"); + + PrintAndLogEx(NORMAL,""); + if (ctx->programHelp) { + PrintAndLogEx(NORMAL,_SectionTagColor_("examples:")); + char *buf = NULL; + int idx = 0; + buf = realloc (buf,strlen (ctx->programHelp)+1); // more then enough as we are splitting + + char *p2; // pointer to split example from comment. + for (int i = 0; i < strlen (ctx->programHelp); i++) { + buf[idx++] = ctx->programHelp[i]; + if ((ctx->programHelp[i] == '\n') || (ctx->programHelp[i] == 0x00)) { + buf[idx-1] = 0x00; + p2 = strstr(buf,"->"); // See if the example has a comment. + if (p2 != NULL) { + *(p2-1) = 0x00; + PrintAndLogEx(NORMAL," "_ExampleColor_("%-50s")" %s",buf,p2); + } else { + PrintAndLogEx(NORMAL," "_ExampleColor_("%-50s"),buf); + } + idx = 0; + } + } + + PrintAndLogEx(NORMAL,""); + free (buf); + } fflush(stdout); return 1; @@ -66,7 +110,7 @@ int CLIParserParseArg(CLIParserContext *ctx, int argc, char **argv, void *vargta if (nerrors > 0) { /* Display the error details contained in the arg_end struct.*/ arg_print_errors(stdout, ((struct arg_end *)(ctx->argtable)[vargtableLen - 1]), ctx->programName); - printf("Try '%s --help' for more information.\n", ctx->programName); + PrintAndLogEx(WARNING,"Try '%s --help' for more information.\n", ctx->programName); fflush(stdout); return 3; } @@ -74,6 +118,7 @@ int CLIParserParseArg(CLIParserContext *ctx, int argc, char **argv, void *vargta return 0; } + enum ParserState { PS_FIRST, PS_ARGUMENT, From 00f22c4d41ee32025baac5bd44b826f37da3ca03 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Tue, 29 Sep 2020 14:06:20 +0200 Subject: [PATCH 0694/1047] add 14b sniffed trace --- traces/hf_14b_sniff_libnfc.pm3 | 42215 +++++++++++++++++++++++++++++++ 1 file changed, 42215 insertions(+) create mode 100644 traces/hf_14b_sniff_libnfc.pm3 diff --git a/traces/hf_14b_sniff_libnfc.pm3 b/traces/hf_14b_sniff_libnfc.pm3 new file mode 100644 index 000000000..9c6bf5976 --- /dev/null +++ b/traces/hf_14b_sniff_libnfc.pm3 @@ -0,0 +1,42215 @@ +-14 +-14 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-14 +-14 +-15 +-14 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-14 +-13 +-13 +-13 +-13 +-13 +-14 +-14 +-14 +-15 +-15 +-15 +-15 +-15 +-16 +-15 +-15 +-15 +-14 +-14 +-14 +-14 +-14 +-15 +-15 +-15 +-15 +-15 +-15 +-14 +-14 +-14 +-14 +-14 +-15 +-14 +-14 +-14 +-14 +-14 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-14 +-14 +-14 +-14 +-13 +-14 +-14 +-14 +-14 +-15 +-15 +-15 +-15 +-16 +-16 +-15 +-15 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-14 +-14 +-14 +-14 +-14 +-14 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-14 +-15 +-15 +-15 +-14 +-14 +-13 +-13 +-13 +-14 +-14 +-14 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-15 +-15 +-15 +-15 +-15 +-15 +-14 +-14 +-14 +-14 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-14 +-14 +-14 +-13 +-14 +-14 +-14 +-14 +-15 +-15 +-16 +-15 +-16 +-16 +-15 +-15 +-15 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-14 +-13 +-13 +-13 +-14 +-14 +-14 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-14 +-14 +-13 +-13 +-13 +-13 +-13 +-14 +-14 +-15 +-15 +-14 +-15 +-15 +-15 +-15 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-14 +-14 +-14 +-14 +-14 +-14 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-15 +-15 +-15 +-15 +-15 +-16 +-15 +-14 +-15 +-15 +-15 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-13 +-14 +-14 +-14 +-14 +-15 +-15 +-15 +-16 +-16 +-17 +-16 +-16 +-16 +-16 +-15 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-14 +-14 +-14 +-14 +-14 +-13 +-13 +-13 +-14 +-14 +-14 +-14 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-14 +-14 +-14 +-14 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-14 +-14 +-14 +-14 +-13 +-14 +-14 +-14 +-14 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-14 +-14 +-14 +-14 +-14 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-14 +-14 +-14 +-14 +-14 +-14 +-15 +-15 +-15 +-15 +-16 +-15 +-14 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-14 +-14 +-14 +-13 +-13 +-13 +-13 +-14 +-14 +-14 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-14 +-15 +-15 +-15 +-14 +-14 +-14 +-14 +-14 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-14 +-14 +-14 +-14 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-14 +-14 +-14 +-13 +-13 +-14 +-14 +-14 +-14 +-15 +-15 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-14 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-15 +-16 +-16 +-15 +-15 +-15 +-14 +-14 +-13 +-13 +-13 +-13 +-13 +-14 +-14 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-14 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-14 +-14 +-14 +-14 +-14 +-14 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-17 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-15 +-15 +-15 +-15 +-15 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-14 +-14 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-14 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-15 +-14 +-13 +-13 +-14 +-14 +-14 +-14 +-14 +-14 +-13 +-14 +-14 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-15 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-14 +-14 +-14 +-14 +-14 +-14 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-14 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-14 +-14 +-13 +-13 +-13 +-13 +-14 +-14 +-14 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-14 +-14 +-14 +-14 +-14 +-14 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-14 +-15 +-15 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-15 +-15 +-16 +-16 +-15 +-15 +-14 +-14 +-14 +-14 +-14 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-14 +-14 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-16 +-15 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-14 +-14 +-14 +-14 +-13 +-14 +-14 +-14 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-15 +-16 +-15 +-15 +-15 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-15 +-15 +-15 +-15 +-15 +-15 +-14 +-14 +-14 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-14 +-14 +-14 +-14 +-13 +-15 +-16 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-15 +-16 +-16 +-16 +-15 +-14 +-14 +-14 +-14 +-14 +-14 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-14 +-14 +-14 +-14 +-14 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-14 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-16 +-16 +-16 +-15 +-15 +-15 +-14 +-14 +-14 +-14 +-14 +-14 +-15 +-15 +-15 +-16 +-16 +-17 +-17 +-17 +-16 +-16 +-16 +-15 +-15 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-15 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-14 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-14 +-14 +-14 +-14 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-14 +-14 +-14 +-14 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-14 +-14 +-13 +-14 +-14 +-14 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-14 +-14 +-14 +-14 +-14 +-15 +-15 +-16 +-16 +-16 +-16 +-17 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-15 +-15 +-15 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-14 +-14 +-15 +-16 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-14 +-14 +-14 +-14 +-14 +-14 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-14 +-14 +-14 +-14 +-13 +-13 +-14 +-14 +-14 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-15 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-14 +-14 +-14 +-14 +-14 +-14 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-14 +-14 +-13 +-14 +-14 +-14 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-14 +-14 +-14 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-14 +-14 +-14 +-14 +-15 +-15 +-15 +-14 +-15 +-15 +-15 +-15 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-15 +-15 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-15 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-14 +-14 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-14 +-14 +-14 +-14 +-14 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-14 +-14 +-14 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-15 +-15 +-15 +-15 +-14 +-14 +-14 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-14 +-14 +-14 +-14 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-14 +-14 +-14 +-14 +-15 +-15 +-15 +-16 +-15 +-15 +-16 +-15 +-15 +-15 +-15 +-14 +-14 +-14 +-14 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-14 +-14 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-17 +-16 +-16 +-15 +-14 +-14 +-14 +-13 +-14 +-14 +-14 +-14 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-14 +-14 +-15 +-14 +-14 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-14 +-14 +-14 +-14 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-14 +-14 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-15 +-15 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-16 +-16 +-16 +-15 +-15 +-15 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-16 +-16 +-15 +-16 +-15 +-15 +-14 +-14 +-14 +-14 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-14 +-14 +-14 +-14 +-14 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-14 +-14 +-14 +-14 +-14 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-14 +-14 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-15 +-15 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-14 +-14 +-14 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-14 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-14 +-14 +-14 +-14 +-15 +-15 +-15 +-16 +-16 +-16 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-15 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-14 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-14 +-14 +-14 +-15 +-15 +-15 +-16 +-16 +-17 +-16 +-16 +-16 +-16 +-15 +-15 +-14 +-14 +-14 +-14 +-14 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-17 +-17 +-16 +-17 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-14 +-14 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-14 +-14 +-14 +-13 +-13 +-14 +-14 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-17 +-16 +-17 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-14 +-14 +-14 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-14 +-14 +-14 +-14 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-14 +-14 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-17 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-15 +-15 +-15 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-15 +-15 +-16 +-16 +-16 +-16 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-14 +-14 +-14 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-14 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-17 +-16 +-17 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-14 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-16 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-14 +-14 +-14 +-14 +-14 +-14 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-17 +-16 +-16 +-16 +-16 +-15 +-16 +-16 +-16 +-16 +-16 +-15 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-14 +-14 +-14 +-15 +-16 +-16 +-16 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-14 +-14 +-14 +-14 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-16 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-16 +-16 +-16 +-15 +-15 +-15 +-14 +-14 +-14 +-14 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-14 +-13 +-13 +-14 +-14 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-17 +-16 +-16 +-16 +-17 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-14 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-17 +-18 +-18 +-17 +-17 +-17 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-14 +-14 +-14 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-14 +-14 +-14 +-14 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-14 +-14 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-17 +-17 +-18 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-15 +-15 +-15 +-14 +-14 +-14 +-14 +-14 +-14 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-16 +-15 +-15 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-17 +-17 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-14 +-14 +-14 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-14 +-14 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-14 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-17 +-16 +-16 +-16 +-15 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-14 +-14 +-15 +-15 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-17 +-17 +-17 +-16 +-17 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-14 +-14 +-14 +-14 +-14 +-14 +-15 +-15 +-15 +-16 +-17 +-17 +-17 +-18 +-18 +-18 +-18 +-18 +-17 +-17 +-16 +-16 +-16 +-15 +-15 +-15 +-14 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-18 +-18 +-17 +-17 +-17 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-16 +-16 +-16 +-16 +-17 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-14 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-17 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-14 +-14 +-14 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-14 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-16 +-15 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-17 +-16 +-16 +-16 +-15 +-15 +-14 +-14 +-14 +-14 +-15 +-15 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-17 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-14 +-14 +-14 +-15 +-15 +-16 +-16 +-16 +-16 +-17 +-17 +-18 +-18 +-18 +-18 +-18 +-17 +-17 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-14 +-14 +-15 +-14 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-17 +-17 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-17 +-18 +-18 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-14 +-14 +-14 +-14 +-15 +-15 +-16 +-16 +-17 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-18 +-18 +-18 +-17 +-16 +-16 +-15 +-16 +-16 +-15 +-16 +-16 +-16 +-17 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-16 +-16 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-14 +-14 +-15 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-17 +-16 +-17 +-16 +-16 +-15 +-15 +-15 +-14 +-14 +-15 +-15 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-17 +-17 +-16 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-15 +-14 +-14 +-14 +-14 +-15 +-15 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-17 +-17 +-18 +-18 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-16 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-17 +-17 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-17 +-18 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-16 +-16 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-16 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-17 +-16 +-17 +-17 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-15 +-14 +-14 +-14 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-16 +-16 +-16 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-17 +-17 +-18 +-18 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-15 +-14 +-14 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-16 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-15 +-14 +-14 +-15 +-15 +-15 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-17 +-17 +-17 +-17 +-18 +-18 +-18 +-17 +-17 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-17 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-17 +-17 +-18 +-17 +-17 +-16 +-16 +-16 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-17 +-17 +-17 +-18 +-18 +-18 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-17 +-16 +-17 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-15 +-16 +-14 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-17 +-17 +-18 +-17 +-18 +-17 +-18 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-17 +-16 +-17 +-17 +-17 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-15 +-16 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-18 +-18 +-18 +-17 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-17 +-16 +-17 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-17 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-14 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-18 +-18 +-17 +-18 +-18 +-17 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-16 +-15 +-15 +-15 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-17 +-17 +-17 +-18 +-18 +-18 +-17 +-17 +-17 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-14 +-15 +-15 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-17 +-18 +-18 +-18 +-18 +-18 +-17 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-17 +-16 +-17 +-17 +-17 +-17 +-16 +-17 +-16 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-15 +-14 +-15 +-14 +-15 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-15 +-15 +-14 +-14 +-14 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-17 +-18 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-14 +-15 +-15 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-17 +-16 +-17 +-17 +-17 +-16 +-16 +-15 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-16 +-16 +-15 +-16 +-16 +-16 +-17 +-17 +-18 +-17 +-17 +-17 +-16 +-16 +-16 +-15 +-15 +-15 +-14 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-18 +-18 +-18 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-18 +-18 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-15 +-14 +-14 +-14 +-14 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-15 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-17 +-16 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-15 +-16 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-16 +-16 +-17 +-16 +-16 +-17 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-17 +-17 +-16 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-16 +-15 +-16 +-15 +-15 +-16 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-14 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-15 +-16 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-14 +-14 +-14 +-15 +-15 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-18 +-18 +-17 +-17 +-16 +-16 +-16 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-14 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-14 +-14 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-16 +-17 +-17 +-16 +-16 +-16 +-15 +-15 +-15 +-14 +-14 +-14 +-14 +-15 +-15 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-15 +-16 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-17 +-16 +-16 +-16 +-15 +-15 +-15 +-14 +-14 +-14 +-15 +-15 +-15 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-17 +-16 +-16 +-16 +-16 +-16 +-17 +-17 +-16 +-16 +-15 +-16 +-14 +-14 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-15 +-16 +-16 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-17 +-16 +-16 +-17 +-17 +-16 +-16 +-16 +-15 +-14 +-14 +-14 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-17 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-14 +-14 +-15 +-15 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-14 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-17 +-16 +-16 +-16 +-15 +-15 +-14 +-14 +-14 +54 +95 +73 +49 +31 +17 +8 +127 +127 +101 +70 +47 +29 +15 +4 +-4 +-10 +-15 +-18 +-21 +-22 +-21 +-20 +-18 +-15 +-12 +-9 +-9 +-10 +-12 +-14 +-15 +-17 +-18 +-19 +-18 +-19 +-19 +-18 +-17 +-16 +-15 +-13 +-13 +-13 +-12 +-11 +-11 +-12 +-14 +-17 +-18 +-20 +-23 +-24 +-25 +-25 +-24 +-22 +-20 +-17 +-14 +-11 +-8 +-5 +-3 +-3 +-4 +-7 +-11 +-14 +-17 +-19 +-22 +-24 +-24 +-24 +-24 +-23 +-21 +-17 +-15 +-14 +-14 +-13 +-13 +-13 +-13 +-13 +-12 +-12 +-12 +-12 +-11 +-11 +-11 +-12 +-14 +-16 +-18 +-20 +-22 +-24 +-25 +-25 +-25 +-23 +-20 +-17 +-14 +-10 +-8 +-6 +-4 +-4 +-5 +-5 +-7 +-9 +-11 +-15 +-18 +-21 +-23 +-27 +-29 +-31 +-30 +-28 +-26 +-24 +-20 +-15 +-9 +-4 +0 +1 +-1 +-4 +-7 +-10 +-13 +-16 +-19 +-21 +-23 +-23 +-23 +-22 +-20 +-18 +-17 +-17 +-18 +-18 +-17 +-16 +-15 +-14 +-12 +-11 +-10 +-9 +-9 +-10 +-10 +-11 +-12 +-12 +-13 +-15 +-17 +-19 +-21 +-23 +-25 +-26 +-27 +-26 +-25 +-23 +-20 +-17 +-13 +-9 +-5 +-3 +-2 +-2 +-2 +-4 +-8 +-11 +-15 +-18 +-21 +-24 +-27 +-29 +-30 +-29 +-27 +-24 +-20 +-14 +-10 +-8 +-7 +-7 +-8 +-9 +-10 +-12 +-13 +-14 +-15 +-15 +-15 +-14 +-14 +-15 +-16 +-18 +-20 +-21 +-23 +-23 +-24 +-23 +-21 +-19 +-17 +-14 +-11 +-9 +-6 +-4 +-4 +-5 +-6 +-8 +-10 +-11 +-13 +-16 +-18 +-21 +-24 +-26 +-28 +-30 +-30 +-29 +-27 +-26 +-23 +-17 +-12 +-7 +-1 +1 +1 +-1 +-4 +-8 +-12 +-15 +-17 +-18 +-20 +-22 +-23 +-22 +-21 +-20 +-20 +-20 +-20 +-20 +-20 +-19 +-17 +-14 +-12 +-9 +-7 +-6 +-5 +-5 +-8 +-11 +-14 +-17 +-19 +-21 +-24 +-25 +-26 +-26 +-26 +-25 +-22 +-19 +-15 +-11 +-8 +-5 +-4 +-4 +-4 +-5 +-8 +-11 +-15 +-18 +-21 +-24 +-27 +-29 +-30 +-29 +-28 +-25 +-24 +-20 +-15 +-9 +-3 +0 +0 +-2 +-4 +-7 +-11 +-14 +-17 +-19 +-21 +-22 +-23 +-22 +-21 +-19 +-18 +-18 +-19 +-19 +-19 +-18 +-16 +-14 +-12 +-11 +-9 +-8 +-8 +-8 +-9 +-9 +-10 +-11 +-14 +-16 +-18 +-20 +-23 +-25 +-27 +-28 +-27 +-25 +-23 +-20 +-17 +-13 +-9 +-5 +-2 +-1 +0 +-2 +-5 +-9 +-13 +-17 +-20 +-24 +-26 +-28 +-29 +-29 +-27 +-25 +-21 +-15 +-11 +-7 +-7 +-7 +-8 +-9 +-10 +-11 +-12 +-13 +-14 +-15 +-15 +-16 +-16 +-15 +-14 +-16 +-17 +-18 +-20 +-22 +-23 +-23 +-23 +-22 +-21 +-18 +-16 +-13 +-10 +-8 +-6 +-5 +-5 +-6 +-7 +-8 +-11 +-13 +-15 +-17 +-20 +-23 +-25 +-28 +-29 +-30 +-29 +-27 +-25 +-22 +-17 +-13 +-7 +-2 +1 +2 +1 +-3 +-7 +-11 +-15 +-18 +-20 +-22 +-24 +-25 +-26 +-25 +-23 +-19 +-16 +-15 +-14 +-14 +-14 +-14 +-14 +-13 +-12 +-12 +-11 +-11 +-11 +-11 +-11 +-12 +-12 +-13 +-13 +-14 +-16 +-18 +-20 +-22 +-24 +-25 +-26 +-26 +-25 +-23 +-21 +-18 +-14 +-10 +-6 +-3 +-2 +-1 +-2 +-3 +-6 +-10 +-14 +-17 +-20 +-24 +-26 +-28 +-30 +-30 +-29 +-26 +-23 +-18 +-14 +-10 +-8 +-6 +-6 +-7 +-8 +-9 +-10 +-11 +-13 +-14 +-14 +-15 +-15 +-16 +-18 +-20 +-21 +-23 +-24 +-25 +-24 +-23 +-20 +-18 +-15 +-11 +-8 +-6 +-5 +-4 +-4 +-5 +-7 +-9 +-11 +-14 +-17 +-20 +-23 +-26 +-28 +-30 +-31 +-31 +-30 +-28 +-25 +-19 +-14 +-10 +-4 +0 +2 +3 +1 +-2 +-7 +-11 +-15 +-18 +-21 +-24 +-26 +-27 +-28 +-25 +-23 +-20 +-17 +-15 +-14 +-13 +-13 +-12 +-12 +-11 +-11 +-11 +-10 +-10 +-10 +-11 +-11 +-12 +-13 +-14 +-14 +-15 +-16 +-18 +-20 +-22 +-24 +-25 +-27 +-27 +-25 +-22 +-20 +-17 +-14 +-10 +-6 +-4 +-2 +-2 +-2 +-3 +-5 +-8 +-12 +-15 +-19 +-22 +-25 +-28 +-30 +-31 +-30 +-29 +-27 +-25 +-20 +-15 +-9 +-3 +0 +1 +0 +-2 +-6 +-10 +-13 +-16 +-19 +-21 +-23 +-23 +-23 +-22 +-20 +-18 +-18 +-18 +-18 +-18 +-18 +-17 +-16 +-15 +-13 +-11 +-10 +-9 +-8 +-8 +-9 +-9 +-10 +-11 +-13 +-13 +-14 +-16 +-17 +-20 +-22 +-24 +-26 +-28 +-29 +-28 +-26 +-24 +-21 +-18 +-14 +-8 +-4 +0 +1 +1 +0 +-4 +-9 +-13 +-17 +-20 +-23 +-26 +-28 +-29 +-28 +-26 +-24 +-20 +-15 +-12 +-10 +-10 +-9 +-10 +-10 +-11 +-11 +-11 +-12 +-13 +-13 +-14 +-14 +-15 +-15 +-14 +-15 +-16 +-18 +-19 +-21 +-23 +-24 +-24 +-24 +-23 +-20 +-17 +-14 +-11 +-8 +-6 +-5 +-4 +-4 +-5 +-6 +-8 +-10 +-14 +-17 +-20 +-23 +-26 +-28 +-29 +-29 +-28 +-26 +-24 +-21 +-17 +-11 +-5 +-1 +1 +0 +-3 +-6 +-9 +-13 +-16 +-19 +-21 +-23 +-24 +-24 +-23 +-21 +-18 +-16 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-15 +-14 +-13 +-13 +-12 +-11 +-11 +-11 +-10 +-11 +-11 +-12 +-13 +-14 +-15 +-17 +-19 +-21 +-23 +-25 +-26 +-27 +-28 +-26 +-24 +-21 +-18 +-15 +-10 +-5 +-2 +0 +1 +0 +-4 +-8 +-12 +-16 +-19 +-22 +-25 +-27 +-28 +-28 +-26 +-22 +-20 +-16 +-14 +-12 +-12 +-11 +-10 +-10 +-10 +-10 +-10 +-11 +-11 +-11 +-12 +-12 +-13 +-15 +-17 +-19 +-21 +-24 +-25 +-26 +-26 +-25 +-23 +-20 +-18 +-14 +-10 +-6 +-3 +-2 +-2 +-3 +-4 +-5 +-8 +-11 +-15 +-18 +-22 +-25 +-27 +-31 +-32 +-31 +-30 +-28 +-25 +-20 +-15 +-10 +-4 +1 +2 +2 +0 +-4 +-9 +-13 +-15 +-17 +-20 +-22 +-24 +-25 +-25 +-23 +-20 +-18 +-17 +-17 +-16 +-16 +-16 +-15 +-14 +-13 +-12 +-11 +-10 +-9 +-9 +-9 +-10 +-11 +-12 +-13 +-14 +-15 +-16 +-17 +-19 +-21 +-23 +-25 +-26 +-27 +-26 +-24 +-21 +-19 +-15 +-11 +-7 +-4 +-1 +0 +0 +-3 +-7 +-11 +-15 +-18 +-21 +-24 +-26 +-27 +-28 +-27 +-25 +-22 +-17 +-14 +-12 +-11 +-11 +-11 +-11 +-11 +-11 +-11 +-11 +-11 +-11 +-11 +-10 +-11 +-13 +-15 +-17 +-19 +-22 +-24 +-25 +-25 +-25 +-23 +-21 +-18 +-15 +-12 +-8 +-6 +-4 +-3 +-3 +-3 +-4 +-8 +-12 +-15 +-19 +-22 +-25 +-27 +-29 +-30 +-29 +-28 +-26 +-24 +-19 +-14 +-8 +-2 +0 +1 +-1 +-4 +-8 +-11 +-14 +-17 +-19 +-21 +-23 +-23 +-23 +-20 +-18 +-17 +-17 +-18 +-18 +-18 +-18 +-17 +-15 +-14 +-11 +-10 +-8 +-7 +-7 +-7 +-7 +-8 +-11 +-14 +-17 +-20 +-22 +-25 +-27 +-28 +-29 +-27 +-25 +-23 +-21 +-18 +-13 +-7 +-3 +0 +0 +0 +-1 +-3 +-7 +-11 +-15 +-19 +-23 +-26 +-29 +-31 +-32 +-31 +-30 +-29 +-25 +-19 +-14 +-8 +-2 +1 +1 +-1 +-4 +-7 +-10 +-12 +-15 +-17 +-19 +-20 +-21 +-20 +-19 +-19 +-19 +-20 +-21 +-21 +-21 +-20 +-18 +-15 +-13 +-10 +-8 +-6 +-5 +-5 +-5 +-7 +-9 +-12 +-16 +-18 +-21 +-24 +-25 +-26 +-27 +-26 +-25 +-22 +-19 +-16 +-12 +-8 +-4 +-2 +0 +0 +-2 +-6 +-10 +-14 +-18 +-21 +-24 +-26 +-28 +-29 +-28 +-26 +-22 +-19 +-15 +-12 +-10 +-10 +-9 +-8 +-8 +-9 +-9 +-10 +-11 +-12 +-12 +-12 +-13 +-15 +-16 +-19 +-21 +-23 +-24 +-25 +-25 +-24 +-22 +-19 +-17 +-13 +-10 +-7 +-5 +-3 +-3 +-3 +-4 +-8 +-11 +-15 +-18 +-21 +-24 +-27 +-28 +-30 +-29 +-28 +-25 +-23 +-19 +-14 +-7 +-2 +1 +1 +-1 +-4 +-8 +-12 +-15 +-18 +-20 +-22 +-23 +-24 +-23 +-21 +-19 +-18 +-19 +-19 +-19 +-18 +-18 +-16 +-14 +-12 +-10 +-8 +-6 +-5 +-6 +-9 +-12 +-15 +-18 +-20 +-23 +-24 +-25 +-25 +-24 +-22 +-20 +-17 +-14 +-10 +-8 +-5 +-4 +-3 +-5 +-8 +-11 +-15 +-18 +-21 +-23 +-25 +-26 +-27 +-26 +-24 +-22 +-19 +-16 +-11 +-7 +-3 +-2 +-2 +-4 +-8 +-11 +-15 +-17 +-20 +-22 +-23 +-24 +-24 +-22 +-19 +-18 +-17 +-17 +-17 +-17 +-16 +-15 +-14 +-13 +-11 +-10 +-8 +-7 +-7 +-8 +-11 +-14 +-16 +-19 +-21 +-23 +-24 +-25 +-25 +-24 +-22 +-19 +-16 +-13 +-10 +-7 +-5 +-3 +-2 +-4 +-7 +-11 +-14 +-18 +-21 +-24 +-26 +-28 +-29 +-28 +-26 +-24 +-20 +-17 +-12 +-6 +-1 +0 +0 +-2 +-6 +-10 +-14 +-17 +-20 +-22 +-24 +-24 +-25 +-24 +-21 +-19 +-17 +-17 +-17 +-16 +-16 +-16 +-14 +-13 +-11 +-10 +-8 +-7 +-6 +-7 +-9 +-12 +-15 +-18 +-21 +-23 +-24 +-26 +-27 +-25 +-23 +-20 +-17 +-14 +-10 +-7 +-4 +-2 +-1 +-3 +-6 +-10 +-14 +-17 +-20 +-23 +-25 +-27 +-28 +-27 +-25 +-22 +-19 +-14 +-9 +-7 +-6 +-7 +-8 +-10 +-12 +-14 +-15 +-16 +-17 +-18 +-18 +-17 +-16 +-16 +-16 +-18 +-19 +-20 +-21 +-20 +-20 +-19 +-16 +-14 +-12 +-10 +-8 +-7 +-5 +-6 +-8 +-11 +-14 +-16 +-19 +-22 +-24 +-25 +-26 +-26 +-25 +-23 +-20 +-18 +-16 +-11 +-8 +-5 +-3 +-3 +-3 +-4 +-7 +-10 +-14 +-18 +-21 +-24 +-27 +-29 +-30 +-29 +-27 +-24 +-20 +-14 +-9 +-6 +-5 +-5 +-7 +-8 +-10 +-12 +-13 +-14 +-14 +-15 +-15 +-15 +-15 +-16 +-17 +-18 +-20 +-21 +-22 +-22 +-22 +-20 +-18 +-16 +-13 +-10 +-8 +-6 +-5 +-5 +-6 +-6 +-8 +-11 +-14 +-17 +-20 +-23 +-25 +-28 +-30 +-30 +-29 +-26 +-23 +-20 +-17 +-12 +-7 +-3 +0 +2 +1 +-1 +-5 +-10 +-14 +-18 +-21 +-24 +-26 +-28 +-29 +-28 +-25 +-22 +-18 +-15 +-13 +-12 +-12 +-11 +-9 +-9 +-9 +-9 +-9 +-9 +-9 +-9 +-12 +-14 +-16 +-19 +-21 +-23 +-25 +-26 +-26 +-24 +-22 +-20 +-17 +-13 +-9 +-6 +-4 +-3 +-3 +-3 +-4 +-7 +-10 +-14 +-17 +-21 +-24 +-26 +-29 +-31 +-31 +-29 +-27 +-26 +-22 +-16 +-12 +-7 +-1 +2 +3 +2 +0 +-5 +-10 +-14 +-17 +-20 +-22 +-25 +-26 +-27 +-26 +-24 +-20 +-18 +-16 +-16 +-15 +-14 +-14 +-13 +-12 +-11 +-10 +-9 +-9 +-8 +-8 +-9 +-11 +-14 +-16 +-19 +-21 +-24 +-25 +-27 +-27 +-25 +-23 +-20 +-18 +-14 +-10 +-6 +-3 +-2 +-1 +-1 +-3 +-7 +-11 +-15 +-18 +-21 +-24 +-27 +-29 +-29 +-28 +-26 +-24 +-22 +-17 +-9 +-4 +-2 +-2 +-4 +-6 +-9 +-12 +-14 +-16 +-17 +-19 +-19 +-19 +-18 +-18 +-17 +-18 +-19 +-20 +-21 +-21 +-21 +-19 +-16 +-14 +-12 +-9 +-8 +-6 +-5 +-4 +-5 +-7 +-10 +-14 +-17 +-20 +-23 +-25 +-27 +-29 +-28 +-27 +-25 +-22 +-20 +-17 +-12 +-7 +-3 +-1 +0 +-1 +-2 +-4 +-7 +-11 +-14 +-18 +-21 +-25 +-28 +-30 +-32 +-31 +-30 +-29 +-25 +-19 +-13 +-8 +-4 +-3 +-3 +-3 +-5 +-7 +-8 +-9 +-11 +-13 +-14 +-15 +-16 +-17 +-18 +-20 +-22 +-23 +-24 +-25 +-24 +-22 +-19 +-17 +-13 +-9 +-6 +-3 +-3 +-5 +-8 +-11 +-14 +-16 +-18 +-20 +-22 +-23 +-23 +-24 +-22 +-20 +-18 +-15 +-12 +-9 +-6 +-5 +-5 +-8 +-11 +-14 +-16 +-18 +-20 +-22 +-23 +-23 +-23 +-21 +-18 +-15 +-14 +-14 +-14 +-15 +-15 +-16 +-16 +-15 +-14 +-12 +-11 +-9 +-8 +-8 +-9 +-11 +-14 +-16 +-18 +-20 +-21 +-22 +-22 +-21 +-21 +-20 +-17 +-14 +-11 +-8 +-6 +-6 +-7 +-10 +-13 +-15 +-17 +-19 +-21 +-22 +-22 +-23 +-22 +-20 +-18 +-15 +-13 +-10 +-8 +-6 +-6 +-7 +-10 +-12 +-15 +-17 +-19 +-21 +-22 +-23 +-23 +-21 +-18 +-16 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-14 +-12 +-10 +-9 +-8 +-7 +-7 +-9 +-11 +-14 +-16 +-18 +-20 +-22 +-23 +-23 +-23 +-22 +-20 +-17 +-14 +-11 +-8 +-6 +-7 +-8 +-11 +-13 +-15 +-17 +-19 +-20 +-21 +-21 +-22 +-21 +-19 +-17 +-14 +-12 +-10 +-9 +-8 +-7 +-7 +-9 +-12 +-14 +-17 +-19 +-21 +-23 +-24 +-24 +-24 +-22 +-19 +-16 +-13 +-12 +-12 +-12 +-13 +-14 +-14 +-14 +-13 +-13 +-12 +-12 +-11 +-10 +-9 +-10 +-12 +-14 +-16 +-18 +-20 +-21 +-22 +-23 +-23 +-21 +-20 +-17 +-15 +-12 +-9 +-6 +-4 +-3 +-4 +-6 +-9 +-13 +-16 +-19 +-21 +-23 +-25 +-26 +-26 +-24 +-22 +-20 +-17 +-13 +-8 +-5 +-4 +-4 +-6 +-9 +-12 +-14 +-16 +-18 +-19 +-20 +-20 +-20 +-18 +-17 +-16 +-16 +-17 +-18 +-18 +-19 +-19 +-18 +-16 +-13 +-10 +-8 +-6 +-5 +-6 +-8 +-11 +-14 +-16 +-18 +-20 +-22 +-23 +-23 +-23 +-22 +-20 +-18 +-15 +-12 +-9 +-7 +-5 +-5 +-7 +-10 +-13 +-16 +-17 +-20 +-21 +-23 +-23 +-24 +-23 +-21 +-18 +-16 +-12 +-8 +-6 +-5 +-6 +-7 +-10 +-12 +-15 +-16 +-18 +-19 +-20 +-21 +-20 +-18 +-16 +-16 +-16 +-16 +-17 +-18 +-19 +-18 +-17 +-16 +-14 +-12 +-10 +-8 +-7 +-7 +-9 +-11 +-14 +-16 +-18 +-20 +-21 +-22 +-23 +-23 +-22 +-20 +-17 +-15 +-12 +-10 +-7 +-6 +-5 +-4 +-4 +-7 +-10 +-13 +-16 +-19 +-22 +-25 +-27 +-28 +-28 +-27 +-25 +-22 +-20 +-16 +-10 +-4 +1 +1 +0 +-3 +-6 +-10 +-14 +-17 +-19 +-21 +-23 +-23 +-23 +-21 +-20 +-19 +-19 +-19 +-19 +-18 +-18 +-16 +-14 +-11 +-8 +-6 +-4 +-4 +-6 +-9 +-12 +-15 +-18 +-20 +-23 +-25 +-25 +-26 +-25 +-23 +-20 +-17 +-14 +-10 +-7 +-4 +-2 +-1 +-1 +-4 +-8 +-12 +-16 +-19 +-22 +-25 +-27 +-29 +-29 +-27 +-25 +-23 +-21 +-17 +-11 +-5 +0 +1 +0 +-2 +-6 +-10 +-13 +-16 +-19 +-21 +-22 +-23 +-23 +-22 +-20 +-18 +-17 +-17 +-18 +-18 +-17 +-16 +-15 +-14 +-12 +-10 +-9 +-8 +-7 +-7 +-8 +-8 +-9 +-11 +-14 +-16 +-19 +-22 +-24 +-26 +-28 +-28 +-27 +-25 +-22 +-20 +-17 +-11 +-6 +-2 +1 +1 +1 +-2 +-7 +-11 +-15 +-19 +-22 +-25 +-27 +-29 +-29 +-27 +-25 +-21 +-16 +-13 +-11 +-10 +-10 +-10 +-10 +-10 +-10 +-10 +-10 +-10 +-10 +-10 +-10 +-12 +-14 +-16 +-19 +-21 +-23 +-25 +-26 +-25 +-23 +-20 +-17 +-14 +-10 +-7 +-5 +-3 +-3 +-3 +-4 +-6 +-10 +-13 +-17 +-20 +-23 +-26 +-28 +-30 +-31 +-29 +-27 +-25 +-22 +-17 +-12 +-6 +-1 +2 +2 +0 +-3 +-8 +-12 +-15 +-18 +-21 +-23 +-25 +-25 +-25 +-23 +-20 +-17 +-16 +-15 +-15 +-15 +-14 +-14 +-12 +-10 +-9 +-9 +-8 +-8 +-7 +-7 +-9 +-11 +-14 +-16 +-19 +-21 +-23 +-25 +-26 +-25 +-24 +-21 +-18 +-16 +-12 +-8 +-5 +-3 +-2 +-2 +-4 +-8 +-11 +-15 +-18 +-21 +-23 +-25 +-27 +-27 +-26 +-24 +-22 +-19 +-15 +-10 +-5 +-2 +-2 +-4 +-6 +-9 +-12 +-15 +-17 +-19 +-21 +-21 +-21 +-20 +-18 +-16 +-16 +-16 +-17 +-18 +-18 +-18 +-17 +-16 +-14 +-12 +-10 +-8 +-6 +-6 +-7 +-9 +-12 +-15 +-17 +-20 +-22 +-23 +-24 +-24 +-24 +-22 +-19 +-16 +-14 +-10 +-7 +-5 +-4 +-4 +-4 +-4 +-6 +-9 +-12 +-16 +-19 +-22 +-25 +-27 +-29 +-30 +-28 +-26 +-25 +-21 +-17 +-11 +-4 +0 +1 +0 +-3 +-6 +-10 +-13 +-16 +-18 +-20 +-21 +-22 +-22 +-20 +-18 +-17 +-17 +-17 +-18 +-18 +-18 +-18 +-16 +-15 +-12 +-11 +-9 +-8 +-7 +-7 +-7 +-7 +-8 +-10 +-12 +-15 +-18 +-21 +-23 +-25 +-27 +-28 +-28 +-26 +-24 +-21 +-19 +-15 +-10 +-5 +-1 +1 +2 +1 +-1 +-6 +-10 +-14 +-18 +-22 +-25 +-27 +-29 +-30 +-29 +-26 +-23 +-18 +-14 +-11 +-9 +-9 +-8 +-8 +-9 +-9 +-9 +-10 +-11 +-11 +-10 +-10 +-12 +-14 +-16 +-19 +-21 +-23 +-24 +-25 +-23 +-23 +-21 +-18 +-14 +-10 +-7 +-4 +-2 +-1 +-1 +-4 +-8 +-12 +-15 +-19 +-21 +-24 +-26 +-28 +-28 +-28 +-27 +-24 +-21 +-18 +-13 +-7 +-2 +1 +1 +-1 +-5 +-9 +-12 +-16 +-19 +-21 +-23 +-24 +-25 +-24 +-22 +-19 +-17 +-16 +-15 +-15 +-15 +-14 +-13 +-12 +-11 +-9 +-7 +-7 +-7 +-7 +-8 +-10 +-13 +-16 +-18 +-20 +-23 +-24 +-25 +-25 +-24 +-22 +-19 +-16 +-13 +-9 +-6 +-4 +-2 +-1 +-3 +-6 +-10 +-14 +-17 +-20 +-23 +-25 +-26 +-27 +-26 +-25 +-23 +-20 +-17 +-12 +-6 +-1 +0 +-1 +-3 +-7 +-10 +-14 +-16 +-18 +-20 +-22 +-22 +-22 +-20 +-18 +-17 +-16 +-16 +-17 +-17 +-17 +-17 +-16 +-14 +-13 +-11 +-9 +-7 +-6 +-6 +-8 +-11 +-13 +-16 +-18 +-21 +-22 +-24 +-24 +-24 +-23 +-20 +-17 +-14 +-11 +-8 +-5 +-3 +-2 +-3 +-5 +-8 +-12 +-16 +-19 +-21 +-23 +-25 +-27 +-27 +-26 +-24 +-22 +-18 +-14 +-8 +-4 +-2 +-3 +-5 +-7 +-10 +-12 +-15 +-17 +-18 +-20 +-20 +-20 +-18 +-17 +-16 +-17 +-18 +-19 +-19 +-19 +-18 +-17 +-14 +-12 +-9 +-7 +-5 +-4 +-5 +-8 +-11 +-13 +-16 +-18 +-21 +-23 +-24 +-25 +-24 +-23 +-21 +-18 +-15 +-12 +-9 +-6 +-5 +-3 +-3 +-3 +-6 +-9 +-13 +-16 +-19 +-22 +-25 +-27 +-29 +-28 +-27 +-24 +-21 +-16 +-10 +-5 +-3 +-3 +-4 +-6 +-8 +-11 +-13 +-14 +-16 +-17 +-18 +-17 +-16 +-16 +-17 +-18 +-20 +-21 +-21 +-22 +-21 +-19 +-16 +-13 +-10 +-7 +-5 +-4 +-5 +-8 +-10 +-13 +-16 +-18 +-20 +-21 +-23 +-23 +-23 +-22 +-19 +-17 +-14 +-11 +-8 +-7 +-5 +-4 +-4 +-5 +-7 +-10 +-14 +-17 +-20 +-23 +-25 +-27 +-28 +-27 +-25 +-23 +-20 +-15 +-9 +-5 +-4 +-4 +-6 +-8 +-10 +-12 +-14 +-15 +-16 +-17 +-18 +-17 +-16 +-15 +-15 +-16 +-18 +-19 +-20 +-20 +-20 +-19 +-17 +-15 +-12 +-10 +-8 +-7 +-6 +-6 +-6 +-6 +-8 +-10 +-12 +-16 +-18 +-21 +-24 +-26 +-27 +-29 +-28 +-26 +-23 +-21 +-18 +-14 +-9 +-4 +-1 +1 +2 +0 +-3 +-7 +-11 +-16 +-19 +-22 +-25 +-28 +-29 +-28 +-26 +-23 +-19 +-15 +-12 +-10 +-9 +-9 +-9 +-9 +-9 +-9 +-10 +-10 +-10 +-10 +-10 +-13 +-16 +-18 +-21 +-23 +-24 +-25 +-25 +-23 +-20 +-18 +-14 +-9 +-6 +-4 +-5 +-6 +-9 +-11 +-14 +-16 +-17 +-18 +-20 +-20 +-19 +-18 +-16 +-15 +-13 +-11 +-10 +-8 +-8 +-7 +-8 +-9 +-11 +-14 +-16 +-19 +-21 +-23 +-24 +-25 +-25 +-23 +-20 +-16 +-12 +-10 +-9 +-9 +-10 +-11 +-12 +-13 +-13 +-14 +-14 +-14 +-14 +-13 +-12 +-13 +-14 +-15 +-17 +-19 +-20 +-21 +-21 +-20 +-19 +-17 +-16 +-13 +-11 +-9 +-7 +-6 +-5 +-5 +-7 +-9 +-12 +-16 +-18 +-21 +-23 +-25 +-26 +-27 +-25 +-24 +-22 +-19 +-16 +-11 +-6 +-2 +0 +0 +-3 +-6 +-10 +-14 +-16 +-19 +-21 +-23 +-24 +-24 +-23 +-19 +-17 +-16 +-15 +-15 +-15 +-15 +-15 +-14 +-12 +-11 +-10 +-8 +-6 +-5 +-7 +-9 +-12 +-15 +-17 +-19 +-21 +-22 +-23 +-23 +-23 +-20 +-18 +-16 +-12 +-9 +-6 +-4 +-4 +-6 +-9 +-12 +-15 +-17 +-19 +-20 +-22 +-23 +-23 +-22 +-20 +-18 +-15 +-12 +-9 +-6 +-4 +-4 +-6 +-9 +-12 +-15 +-17 +-19 +-21 +-22 +-22 +-22 +-21 +-18 +-16 +-14 +-14 +-14 +-15 +-15 +-15 +-15 +-14 +-13 +-11 +-9 +-7 +-7 +-9 +-11 +-14 +-16 +-18 +-20 +-21 +-22 +-22 +-21 +-19 +-17 +-14 +-11 +-8 +-6 +-4 +-5 +-7 +-10 +-13 +-16 +-18 +-20 +-21 +-22 +-23 +-23 +-22 +-20 +-19 +-16 +-13 +-10 +-7 +-4 +-4 +-5 +-8 +-11 +-13 +-16 +-18 +-20 +-21 +-22 +-23 +-22 +-19 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-14 +-14 +-13 +-12 +-11 +-9 +-7 +-6 +-7 +-9 +-12 +-14 +-17 +-19 +-21 +-22 +-23 +-23 +-23 +-21 +-19 +-16 +-13 +-10 +-8 +-5 +-3 +-4 +-5 +-9 +-12 +-15 +-18 +-20 +-22 +-24 +-25 +-26 +-25 +-23 +-21 +-17 +-13 +-8 +-4 +-2 +-2 +-4 +-7 +-10 +-13 +-16 +-18 +-20 +-21 +-22 +-22 +-20 +-18 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-16 +-15 +-13 +-11 +-8 +-7 +-5 +-5 +-7 +-9 +-12 +-15 +-17 +-20 +-21 +-22 +-24 +-24 +-23 +-20 +-18 +-15 +-12 +-8 +-6 +-4 +-2 +-3 +-5 +-9 +-12 +-16 +-18 +-21 +-23 +-25 +-28 +-27 +-26 +-23 +-20 +-17 +-12 +-7 +-4 +-3 +-4 +-6 +-9 +-11 +-13 +-15 +-16 +-18 +-18 +-18 +-17 +-16 +-17 +-18 +-19 +-21 +-21 +-22 +-20 +-18 +-16 +-12 +-7 +-5 +-3 +-3 +-4 +-6 +-9 +-12 +-14 +-16 +-18 +-20 +-21 +-21 +-22 +-21 +-20 +-18 +-16 +-13 +-10 +-8 +-8 +-9 +-11 +-13 +-15 +-17 +-18 +-19 +-20 +-20 +-21 +-19 +-17 +-15 +-12 +-9 +-7 +-7 +-8 +-10 +-12 +-14 +-16 +-18 +-20 +-20 +-20 +-19 +-18 +-15 +-13 +-12 +-12 +-13 +-15 +-16 +-16 +-17 +-17 +-16 +-15 +-14 +-11 +-9 +-8 +-8 +-10 +-12 +-14 +-16 +-18 +-19 +-20 +-20 +-20 +-20 +-19 +-17 +-14 +-12 +-10 +-8 +-7 +-6 +-6 +-6 +-8 +-9 +-12 +-15 +-17 +-20 +-22 +-25 +-26 +-27 +-26 +-24 +-22 +-19 +-16 +-12 +-6 +-1 +1 +1 +-1 +-5 +-8 +-12 +-15 +-18 +-20 +-22 +-23 +-23 +-22 +-20 +-18 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-13 +-12 +-10 +-9 +-7 +-7 +-7 +-8 +-10 +-13 +-16 +-18 +-20 +-22 +-23 +-24 +-24 +-23 +-21 +-18 +-16 +-12 +-9 +-6 +-4 +-3 +-2 +-2 +-4 +-8 +-11 +-15 +-18 +-21 +-24 +-26 +-28 +-28 +-27 +-25 +-22 +-18 +-13 +-8 +-5 +-5 +-5 +-7 +-9 +-10 +-11 +-13 +-14 +-14 +-15 +-14 +-14 +-14 +-15 +-16 +-18 +-20 +-21 +-22 +-23 +-22 +-20 +-17 +-15 +-12 +-9 +-7 +-5 +-3 +-3 +-4 +-7 +-11 +-14 +-17 +-20 +-22 +-24 +-26 +-27 +-26 +-24 +-22 +-19 +-16 +-13 +-8 +-4 +-2 +0 +0 +-1 +-4 +-8 +-12 +-16 +-19 +-22 +-24 +-26 +-27 +-27 +-25 +-22 +-17 +-13 +-11 +-10 +-9 +-9 +-10 +-10 +-10 +-10 +-11 +-11 +-11 +-11 +-11 +-11 +-13 +-15 +-17 +-19 +-21 +-23 +-23 +-24 +-22 +-21 +-18 +-16 +-12 +-9 +-7 +-4 +-2 +-2 +-3 +-5 +-9 +-13 +-16 +-19 +-22 +-24 +-26 +-27 +-27 +-25 +-23 +-21 +-17 +-14 +-10 +-7 +-3 +-1 +0 +-1 +-4 +-8 +-12 +-16 +-19 +-22 +-24 +-26 +-27 +-27 +-25 +-23 +-18 +-14 +-12 +-10 +-10 +-10 +-10 +-10 +-10 +-10 +-10 +-10 +-10 +-11 +-10 +-9 +-10 +-12 +-15 +-17 +-19 +-21 +-23 +-24 +-25 +-24 +-22 +-19 +-16 +-13 +-9 +-6 +-4 +-2 +-2 +-3 +-3 +-5 +-8 +-11 +-15 +-18 +-21 +-24 +-27 +-29 +-31 +-32 +-29 +-28 +-25 +-19 +-13 +-7 +-1 +2 +3 +1 +-2 +-5 +-9 +-12 +-15 +-18 +-20 +-21 +-22 +-22 +-20 +-19 +-18 +-18 +-19 +-19 +-19 +-18 +-17 +-15 +-11 +-8 +-6 +-4 +-3 +-3 +-4 +-8 +-11 +-14 +-17 +-20 +-22 +-24 +-25 +-26 +-25 +-23 +-20 +-17 +-13 +-9 +-6 +-4 +-2 +-2 +-2 +-3 +-5 +-9 +-13 +-16 +-20 +-23 +-25 +-28 +-30 +-29 +-28 +-26 +-24 +-20 +-15 +-8 +-2 +1 +1 +-1 +-4 +-7 +-10 +-13 +-15 +-17 +-19 +-20 +-20 +-20 +-18 +-18 +-18 +-18 +-19 +-19 +-18 +-18 +-16 +-14 +-11 +-9 +-7 +-5 +-4 +-5 +-8 +-11 +-14 +-16 +-18 +-20 +-22 +-23 +-24 +-24 +-22 +-20 +-17 +-14 +-11 +-7 +-4 +-3 +-3 +-6 +-9 +-12 +-15 +-17 +-19 +-21 +-22 +-23 +-23 +-21 +-20 +-16 +-12 +-9 +-7 +-7 +-8 +-9 +-11 +-13 +-15 +-16 +-17 +-17 +-17 +-17 +-16 +-14 +-13 +-13 +-14 +-15 +-16 +-18 +-18 +-19 +-18 +-17 +-16 +-14 +-12 +-10 +-9 +-7 +-6 +-6 +-8 +-10 +-13 +-16 +-18 +-21 +-22 +-25 +-25 +-25 +-23 +-20 +-17 +-14 +-10 +-7 +-4 +-3 +-2 +-1 +-3 +-6 +-9 +-13 +-17 +-20 +-22 +-25 +-26 +-27 +-27 +-25 +-22 +-18 +-13 +-10 +-8 +-8 +-8 +-8 +-9 +-10 +-11 +-12 +-12 +-13 +-13 +-13 +-12 +-13 +-14 +-16 +-18 +-20 +-21 +-22 +-22 +-22 +-20 +-18 +-16 +-13 +-10 +-8 +-6 +-5 +-4 +-3 +-5 +-8 +-11 +-14 +-17 +-20 +-22 +-25 +-26 +-27 +-26 +-24 +-22 +-19 +-16 +-12 +-8 +-4 +-1 +-1 +-2 +-5 +-9 +-12 +-16 +-18 +-21 +-23 +-24 +-25 +-23 +-21 +-17 +-15 +-14 +-13 +-14 +-14 +-14 +-14 +-13 +-12 +-12 +-11 +-10 +-8 +-8 +-8 +-9 +-11 +-13 +-16 +-18 +-20 +-22 +-23 +-23 +-22 +-20 +-18 +-16 +-13 +-9 +-7 +-5 +-4 +-3 +-3 +-5 +-8 +-12 +-16 +-19 +-21 +-24 +-26 +-27 +-27 +-26 +-24 +-22 +-20 +-16 +-12 +-6 +-3 +0 +2 +1 +-1 +-5 +-9 +-14 +-17 +-21 +-24 +-26 +-28 +-28 +-27 +-25 +-22 +-18 +-13 +-10 +-8 +-7 +-7 +-8 +-9 +-9 +-10 +-10 +-10 +-11 +-12 +-12 +-12 +-13 +-15 +-16 +-18 +-20 +-22 +-23 +-23 +-23 +-21 +-18 +-16 +-13 +-9 +-6 +-4 +-3 +-2 +-2 +-4 +-7 +-11 +-15 +-18 +-21 +-23 +-26 +-29 +-29 +-27 +-25 +-22 +-19 +-15 +-9 +-4 +-2 +-2 +-4 +-7 +-9 +-12 +-14 +-16 +-17 +-18 +-19 +-19 +-18 +-16 +-16 +-16 +-16 +-17 +-18 +-18 +-18 +-18 +-16 +-13 +-11 +-9 +-7 +-6 +-6 +-6 +-6 +-6 +-7 +-9 +-12 +-15 +-17 +-20 +-23 +-25 +-27 +-28 +-28 +-26 +-24 +-21 +-18 +-14 +-8 +-3 +0 +2 +3 +1 +-2 +-6 +-11 +-15 +-18 +-21 +-24 +-26 +-28 +-28 +-26 +-23 +-19 +-15 +-12 +-11 +-10 +-9 +-9 +-9 +-9 +-9 +-9 +-10 +-10 +-10 +-10 +-11 +-12 +-15 +-17 +-19 +-21 +-23 +-24 +-25 +-23 +-21 +-19 +-16 +-13 +-9 +-6 +-4 +-2 +-2 +-2 +-5 +-9 +-12 +-16 +-20 +-22 +-25 +-26 +-27 +-26 +-25 +-22 +-20 +-16 +-13 +-8 +-4 +-1 +1 +1 +0 +-4 +-8 +-12 +-16 +-19 +-22 +-24 +-26 +-28 +-27 +-26 +-23 +-20 +-15 +-10 +-7 +-5 +-6 +-7 +-8 +-9 +-11 +-13 +-14 +-15 +-16 +-16 +-15 +-14 +-14 +-15 +-16 +-17 +-18 +-20 +-21 +-20 +-20 +-19 +-17 +-15 +-12 +-10 +-8 +-6 +-5 +-5 +-5 +-5 +-6 +-9 +-12 +-15 +-18 +-21 +-23 +-26 +-27 +-28 +-27 +-26 +-24 +-22 +-18 +-12 +-5 +-1 +1 +0 +-3 +-6 +-10 +-13 +-16 +-17 +-19 +-20 +-20 +-20 +-18 +-17 +-16 +-16 +-17 +-18 +-18 +-18 +-17 +-16 +-14 +-12 +-10 +-7 +-4 +-3 +-4 +-6 +-9 +-12 +-15 +-17 +-20 +-21 +-23 +-23 +-23 +-22 +-20 +-17 +-15 +-12 +-8 +-6 +-5 +-4 +-3 +-4 +-7 +-10 +-13 +-16 +-19 +-22 +-24 +-26 +-28 +-27 +-26 +-23 +-20 +-16 +-11 +-6 +-2 +-2 +-3 +-5 +-8 +-11 +-14 +-16 +-18 +-19 +-20 +-20 +-19 +-17 +-16 +-16 +-16 +-16 +-17 +-18 +-18 +-17 +-16 +-14 +-11 +-8 +-8 +-7 +-6 +-5 +-5 +-7 +-9 +-12 +-15 +-18 +-20 +-22 +-24 +-25 +-26 +-25 +-23 +-20 +-17 +-14 +-10 +-6 +-3 +-1 +-1 +-1 +-2 +-5 +-9 +-13 +-16 +-19 +-23 +-25 +-27 +-29 +-28 +-27 +-25 +-23 +-19 +-14 +-6 +-2 +0 +0 +-3 +-5 +-8 +-11 +-13 +-15 +-17 +-18 +-19 +-19 +-18 +-17 +-16 +-17 +-18 +-19 +-20 +-20 +-19 +-18 +-16 +-14 +-11 +-9 +-7 +-6 +-5 +-5 +-4 +-6 +-8 +-11 +-14 +-17 +-20 +-22 +-25 +-26 +-28 +-27 +-25 +-23 +-21 +-18 +-15 +-9 +-3 +1 +3 +2 +-1 +-5 +-10 +-13 +-16 +-19 +-21 +-23 +-24 +-25 +-23 +-20 +-18 +-16 +-16 +-15 +-15 +-15 +-14 +-12 +-11 +-10 +-9 +-8 +-7 +-6 +-6 +-8 +-11 +-13 +-15 +-17 +-20 +-22 +-24 +-25 +-24 +-22 +-20 +-17 +-14 +-9 +-6 +-3 +-1 +0 +-2 +-5 +-9 +-12 +-16 +-19 +-22 +-24 +-25 +-27 +-26 +-25 +-22 +-20 +-17 +-13 +-9 +-4 +-1 +-1 +-2 +-5 +-9 +-12 +-15 +-18 +-20 +-21 +-22 +-23 +-22 +-19 +-17 +-16 +-16 +-16 +-16 +-16 +-15 +-14 +-12 +-11 +-9 +-8 +-6 +-5 +-5 +-7 +-9 +-12 +-15 +-18 +-20 +-22 +-24 +-25 +-25 +-23 +-21 +-18 +-15 +-12 +-8 +-4 +-2 +-2 +-3 +-6 +-10 +-13 +-16 +-18 +-20 +-22 +-23 +-24 +-23 +-22 +-19 +-17 +-14 +-10 +-7 +-6 +-7 +-8 +-10 +-12 +-14 +-15 +-16 +-17 +-18 +-17 +-16 +-15 +-14 +-14 +-15 +-16 +-18 +-18 +-18 +-18 +-17 +-16 +-14 +-11 +-9 +-7 +-5 +-6 +-9 +-11 +-13 +-16 +-17 +-19 +-20 +-21 +-21 +-21 +-20 +-18 +-16 +-14 +-10 +-8 +-6 +-5 +-4 +-4 +-5 +-8 +-11 +-14 +-17 +-20 +-23 +-25 +-26 +-27 +-26 +-25 +-23 +-21 +-17 +-12 +-6 +-1 +1 +0 +-2 +-6 +-9 +-13 +-16 +-18 +-20 +-22 +-22 +-22 +-21 +-19 +-17 +-16 +-16 +-17 +-17 +-16 +-15 +-13 +-12 +-10 +-8 +-6 +-4 +-3 +-5 +-8 +-11 +-14 +-17 +-19 +-22 +-23 +-25 +-25 +-24 +-22 +-20 +-17 +-14 +-10 +-6 +-4 +-2 +-1 +-1 +-3 +-7 +-11 +-15 +-18 +-21 +-24 +-26 +-28 +-29 +-27 +-25 +-21 +-16 +-11 +-7 +-6 +-6 +-6 +-7 +-8 +-10 +-11 +-12 +-13 +-14 +-14 +-13 +-14 +-15 +-16 +-18 +-20 +-21 +-22 +-23 +-22 +-20 +-18 +-15 +-11 +-7 +-5 +-3 +-2 +-2 +-6 +-9 +-12 +-15 +-18 +-20 +-22 +-24 +-25 +-24 +-24 +-22 +-19 +-16 +-12 +-8 +-5 +-3 +-2 +-2 +-3 +-4 +-7 +-10 +-13 +-17 +-20 +-23 +-25 +-28 +-29 +-28 +-26 +-24 +-20 +-15 +-9 +-6 +-5 +-4 +-5 +-6 +-8 +-9 +-10 +-12 +-13 +-13 +-13 +-14 +-15 +-17 +-19 +-21 +-23 +-24 +-24 +-22 +-20 +-17 +-14 +-11 +-7 +-4 +-3 +-4 +-6 +-9 +-12 +-15 +-17 +-19 +-20 +-21 +-22 +-21 +-21 +-19 +-16 +-14 +-11 +-9 +-7 +-6 +-5 +-4 +-5 +-8 +-11 +-14 +-17 +-19 +-22 +-24 +-25 +-26 +-25 +-22 +-20 +-16 +-12 +-9 +-8 +-7 +-8 +-9 +-9 +-10 +-11 +-12 +-13 +-13 +-13 +-12 +-12 +-13 +-15 +-16 +-18 +-20 +-21 +-22 +-22 +-21 +-19 +-17 +-14 +-11 +-9 +-7 +-5 +-4 +-3 +-4 +-6 +-9 +-13 +-16 +-19 +-22 +-24 +-27 +-28 +-28 +-26 +-24 +-21 +-18 +-14 +-8 +-3 +0 +2 +2 +1 +-2 +-7 +-11 +-15 +-19 +-22 +-24 +-26 +-27 +-27 +-25 +-22 +-18 +-15 +-13 +-12 +-11 +-10 +-10 +-9 +-9 +-9 +-9 +-9 +-9 +-9 +-9 +-11 +-14 +-16 +-18 +-21 +-23 +-25 +-25 +-24 +-22 +-19 +-16 +-13 +-10 +-6 +-3 +-2 +-2 +-4 +-8 +-11 +-14 +-17 +-20 +-22 +-23 +-24 +-25 +-24 +-21 +-19 +-16 +-13 +-9 +-6 +-3 +-1 +-1 +-4 +-7 +-11 +-14 +-17 +-19 +-22 +-23 +-24 +-24 +-23 +-20 +-16 +-14 +-12 +-12 +-12 +-12 +-12 +-12 +-12 +-12 +-11 +-11 +-10 +-9 +-8 +-9 +-11 +-13 +-16 +-18 +-20 +-22 +-23 +-23 +-24 +-22 +-20 +-18 +-15 +-12 +-9 +-6 +-4 +-3 +-3 +-3 +-4 +-7 +-10 +-13 +-17 +-20 +-23 +-25 +-27 +-29 +-29 +-27 +-25 +-23 +-20 +-16 +-9 +-2 +1 +1 +0 +-3 +-6 +-9 +-12 +-15 +-17 +-19 +-20 +-21 +-20 +-19 +-18 +-18 +-18 +-19 +-20 +-19 +-19 +-17 +-15 +-12 +-9 +-7 +-4 +-3 +-2 +-4 +-7 +-10 +-14 +-16 +-19 +-21 +-23 +-24 +-24 +-24 +-21 +-20 +-17 +-14 +-10 +-6 +-4 +-2 +-2 +-1 +-3 +-6 +-10 +-14 +-17 +-21 +-24 +-26 +-28 +-29 +-28 +-27 +-25 +-23 +-18 +-12 +-5 +0 +1 +0 +-3 +-6 +-9 +-12 +-15 +-17 +-19 +-20 +-21 +-21 +-19 +-17 +-16 +-16 +-17 +-18 +-18 +-18 +-16 +-15 +-12 +-10 +-8 +-6 +-5 +-5 +-6 +-6 +-7 +-8 +-10 +-13 +-16 +-18 +-21 +-24 +-26 +-27 +-28 +-26 +-24 +-21 +-19 +-16 +-11 +-5 +-1 +1 +2 +2 +1 +-2 +-7 +-11 +-16 +-19 +-22 +-25 +-28 +-30 +-30 +-28 +-25 +-22 +-16 +-11 +-7 +-6 +-5 +-6 +-7 +-8 +-9 +-10 +-11 +-12 +-13 +-13 +-13 +-14 +-15 +-17 +-18 +-20 +-22 +-23 +-24 +-23 +-21 +-19 +-16 +-13 +-9 +-6 +-4 +-3 +-2 +-2 +-3 +-5 +-9 +-12 +-16 +-19 +-22 +-25 +-27 +-29 +-28 +-27 +-25 +-22 +-20 +-15 +-10 +-5 +0 +3 +3 +2 +-2 +-6 +-10 +-14 +-17 +-20 +-23 +-24 +-26 +-25 +-24 +-21 +-17 +-15 +-14 +-14 +-14 +-13 +-12 +-11 +-10 +-9 +-8 +-8 +-8 +-7 +-8 +-9 +-12 +-15 +-17 +-20 +-22 +-23 +-24 +-25 +-24 +-22 +-20 +-17 +-14 +-10 +-7 +-4 +-2 +-2 +-2 +-3 +-4 +-7 +-10 +-13 +-17 +-20 +-23 +-26 +-28 +-30 +-30 +-29 +-27 +-25 +-21 +-16 +-11 +-5 +0 +3 +3 +1 +-3 +-7 +-10 +-14 +-17 +-19 +-21 +-22 +-23 +-23 +-21 +-18 +-16 +-15 +-15 +-16 +-16 +-16 +-15 +-14 +-12 +-11 +-10 +-8 +-7 +-6 +-6 +-7 +-8 +-9 +-10 +-12 +-14 +-17 +-20 +-22 +-24 +-26 +-27 +-27 +-25 +-23 +-20 +-17 +-13 +-9 +-4 +-1 +1 +2 +1 +0 +-3 +-7 +-11 +-15 +-19 +-22 +-25 +-28 +-30 +-30 +-29 +-28 +-26 +-22 +-14 +-9 +-5 +-3 +-3 +-4 +-5 +-7 +-8 +-10 +-11 +-12 +-13 +-14 +-14 +-15 +-16 +-18 +-20 +-22 +-23 +-24 +-24 +-22 +-20 +-18 +-14 +-10 +-6 +-4 +-2 +-1 +-2 +-3 +-4 +-6 +-9 +-12 +-16 +-19 +-22 +-25 +-28 +-30 +-30 +-29 +-28 +-26 +-23 +-17 +-13 +-8 +-3 +1 +4 +5 +4 +0 +-5 +-9 +-14 +-17 +-20 +-23 +-25 +-27 +-27 +-26 +-24 +-20 +-16 +-15 +-13 +-12 +-11 +-11 +-10 +-9 +-8 +-8 +-8 +-8 +-8 +-8 +-9 +-12 +-15 +-17 +-20 +-22 +-24 +-26 +-26 +-25 +-23 +-21 +-18 +-14 +-10 +-6 +-3 +-1 +0 +0 +-2 +-4 +-6 +-9 +-12 +-15 +-18 +-21 +-25 +-28 +-30 +-31 +-31 +-29 +-28 +-25 +-20 +-15 +-10 +-4 +1 +4 +5 +3 +0 +-4 +-9 +-13 +-16 +-19 +-22 +-24 +-25 +-25 +-24 +-21 +-19 +-17 +-16 +-16 +-15 +-14 +-13 +-12 +-10 +-9 +-7 +-6 +-6 +-6 +-7 +-8 +-9 +-11 +-13 +-16 +-18 +-21 +-23 +-25 +-26 +-26 +-25 +-23 +-20 +-17 +-13 +-9 +-5 +-2 +0 +0 +0 +-1 +-4 +-8 +-12 +-16 +-19 +-22 +-25 +-27 +-29 +-29 +-27 +-25 +-22 +-18 +-11 +-7 +-4 +-4 +-5 +-6 +-8 +-9 +-11 +-12 +-13 +-14 +-14 +-14 +-14 +-13 +-14 +-16 +-17 +-19 +-20 +-22 +-22 +-22 +-21 +-19 +-16 +-14 +-11 +-8 +-5 +-4 +-3 +-4 +-4 +-6 +-7 +-9 +-11 +-13 +-16 +-19 +-22 +-25 +-27 +-29 +-30 +-29 +-27 +-26 +-22 +-18 +-12 +-8 +-2 +1 +4 +4 +2 +-2 +-7 +-11 +-15 +-18 +-20 +-23 +-25 +-26 +-26 +-24 +-21 +-18 +-16 +-15 +-15 +-14 +-13 +-11 +-10 +-9 +-8 +-7 +-7 +-7 +-8 +-8 +-8 +-9 +-11 +-14 +-16 +-19 +-22 +-24 +-26 +-27 +-27 +-25 +-23 +-20 +-17 +-12 +-6 +-2 +1 +2 +1 +0 +-1 +-4 +-8 +-12 +-17 +-20 +-24 +-27 +-29 +-31 +-31 +-31 +-29 +-26 +-21 +-16 +-10 +-3 +1 +2 +1 +-1 +-4 +-8 +-11 +-14 +-16 +-18 +-20 +-21 +-21 +-20 +-19 +-18 +-18 +-18 +-18 +-18 +-18 +-17 +-15 +-13 +-10 +-7 +-6 +-5 +-5 +-5 +-6 +-7 +-8 +-10 +-11 +-12 +-14 +-16 +-18 +-21 +-24 +-26 +-27 +-29 +-28 +-26 +-24 +-22 +-18 +-13 +-8 +-3 +1 +3 +3 +3 +0 +-3 +-9 +-13 +-17 +-20 +-23 +-26 +-27 +-28 +-28 +-26 +-23 +-18 +-14 +-10 +-8 +-8 +-7 +-8 +-8 +-9 +-10 +-10 +-11 +-12 +-12 +-13 +-13 +-12 +-13 +-14 +-16 +-18 +-20 +-22 +-23 +-24 +-24 +-23 +-20 +-18 +-15 +-11 +-7 +-4 +-2 +-2 +-2 +-2 +-4 +-5 +-8 +-11 +-15 +-18 +-21 +-24 +-27 +-29 +-30 +-30 +-28 +-26 +-24 +-20 +-14 +-8 +-2 +2 +3 +1 +-2 +-5 +-9 +-12 +-15 +-17 +-19 +-21 +-21 +-21 +-20 +-18 +-18 +-18 +-18 +-19 +-18 +-18 +-17 +-15 +-12 +-10 +-8 +-6 +-5 +-4 +-4 +-5 +-6 +-7 +-9 +-12 +-15 +-17 +-20 +-23 +-25 +-27 +-29 +-28 +-27 +-24 +-23 +-19 +-14 +-9 +-4 +0 +2 +3 +2 +1 +-2 +-7 +-11 +-16 +-19 +-22 +-25 +-28 +-30 +-29 +-28 +-26 +-22 +-17 +-12 +-8 +-6 +-5 +-5 +-6 +-7 +-8 +-10 +-11 +-12 +-13 +-13 +-13 +-13 +-14 +-16 +-18 +-20 +-22 +-23 +-24 +-24 +-22 +-20 +-17 +-14 +-11 +-7 +-5 +-3 +-2 +-2 +-3 +-4 +-6 +-10 +-13 +-17 +-20 +-23 +-26 +-28 +-30 +-29 +-28 +-26 +-25 +-20 +-15 +-10 +-4 +0 +3 +3 +1 +-2 +-6 +-10 +-14 +-16 +-19 +-21 +-23 +-24 +-24 +-22 +-19 +-18 +-17 +-17 +-17 +-17 +-16 +-15 +-13 +-11 +-9 +-8 +-6 +-5 +-5 +-5 +-8 +-11 +-14 +-17 +-18 +-21 +-23 +-24 +-25 +-24 +-23 +-20 +-18 +-14 +-10 +-6 +-3 +-1 +0 +0 +-1 +-3 +-7 +-11 +-15 +-18 +-22 +-25 +-28 +-30 +-31 +-29 +-28 +-26 +-22 +-17 +-12 +-5 +-1 +1 +0 +-2 +-5 +-8 +-11 +-13 +-16 +-17 +-19 +-19 +-19 +-18 +-17 +-17 +-18 +-19 +-19 +-20 +-20 +-19 +-17 +-14 +-11 +-8 +-6 +-5 +-4 +-3 +-3 +-4 +-5 +-8 +-11 +-14 +-17 +-20 +-23 +-26 +-28 +-29 +-29 +-27 +-25 +-23 +-19 +-14 +-9 +-4 +0 +2 +3 +3 +1 +-2 +-7 +-12 +-16 +-19 +-23 +-26 +-30 +-31 +-31 +-29 +-26 +-22 +-16 +-10 +-7 +-5 +-5 +-5 +-6 +-7 +-9 +-10 +-11 +-12 +-14 +-14 +-14 +-14 +-15 +-17 +-18 +-20 +-22 +-23 +-23 +-22 +-21 +-18 +-16 +-12 +-9 +-6 +-4 +-3 +-3 +-3 +-4 +-7 +-10 +-14 +-17 +-20 +-23 +-26 +-28 +-28 +-28 +-26 +-23 +-21 +-18 +-14 +-8 +-3 +1 +3 +3 +1 +-3 +-7 +-11 +-15 +-18 +-21 +-24 +-26 +-27 +-27 +-25 +-23 +-20 +-16 +-11 +-6 +-4 +-4 +-6 +-8 +-10 +-12 +-14 +-16 +-17 +-17 +-18 +-18 +-17 +-16 +-14 +-12 +-12 +-13 +-15 +-16 +-17 +-18 +-19 +-19 +-19 +-18 +-17 +-14 +-12 +-10 +-8 +-7 +-6 +-6 +-6 +-6 +-7 +-9 +-12 +-15 +-18 +-21 +-23 +-25 +-27 +-27 +-25 +-23 +-21 +-17 +-12 +-9 +-6 +-6 +-7 +-8 +-9 +-11 +-12 +-13 +-14 +-14 +-14 +-14 +-14 +-13 +-13 +-14 +-16 +-17 +-19 +-20 +-21 +-21 +-21 +-20 +-18 +-15 +-12 +-10 +-8 +-5 +-4 +-4 +-4 +-4 +-6 +-8 +-11 +-15 +-18 +-21 +-24 +-26 +-28 +-29 +-28 +-26 +-24 +-22 +-18 +-13 +-8 +-3 +1 +3 +4 +2 +-2 +-6 +-11 +-15 +-18 +-21 +-24 +-26 +-27 +-27 +-25 +-23 +-19 +-15 +-13 +-12 +-11 +-11 +-10 +-10 +-9 +-9 +-9 +-9 +-9 +-9 +-9 +-9 +-12 +-14 +-16 +-19 +-21 +-23 +-25 +-25 +-25 +-23 +-21 +-17 +-14 +-10 +-6 +-3 +-1 +-1 +-1 +-2 +-4 +-8 +-12 +-16 +-19 +-22 +-25 +-28 +-29 +-30 +-29 +-27 +-26 +-22 +-17 +-12 +-6 +0 +3 +4 +2 +-1 +-5 +-9 +-13 +-16 +-18 +-21 +-23 +-23 +-24 +-22 +-20 +-18 +-18 +-17 +-17 +-16 +-15 +-14 +-12 +-10 +-9 +-8 +-6 +-5 +-5 +-7 +-9 +-12 +-15 +-18 +-20 +-23 +-24 +-25 +-25 +-24 +-22 +-19 +-16 +-12 +-8 +-5 +-3 +-2 +-1 +-1 +-3 +-7 +-11 +-15 +-18 +-21 +-24 +-26 +-29 +-29 +-28 +-25 +-23 +-20 +-15 +-8 +-2 +1 +1 +-1 +-4 +-7 +-10 +-13 +-16 +-18 +-19 +-20 +-21 +-20 +-18 +-17 +-17 +-17 +-18 +-18 +-18 +-18 +-17 +-15 +-13 +-10 +-8 +-7 +-6 +-5 +-5 +-5 +-7 +-9 +-10 +-14 +-17 +-20 +-23 +-25 +-27 +-28 +-27 +-25 +-23 +-20 +-17 +-12 +-7 +-2 +1 +1 +1 +1 +-1 +-5 +-9 +-13 +-17 +-20 +-24 +-27 +-29 +-31 +-30 +-29 +-28 +-25 +-18 +-11 +-6 +-4 +-3 +-4 +-5 +-6 +-8 +-9 +-11 +-12 +-14 +-15 +-14 +-15 +-16 +-18 +-19 +-21 +-22 +-23 +-23 +-21 +-19 +-17 +-14 +-11 +-8 +-5 +-3 +-2 +-4 +-7 +-10 +-13 +-16 +-19 +-21 +-23 +-24 +-25 +-24 +-22 +-20 +-18 +-15 +-11 +-8 +-5 +-3 +-2 +-2 +-4 +-8 +-12 +-15 +-18 +-21 +-23 +-24 +-25 +-26 +-24 +-20 +-16 +-14 +-12 +-12 +-12 +-12 +-13 +-13 +-12 +-12 +-12 +-11 +-11 +-10 +-9 +-9 +-11 +-13 +-15 +-17 +-19 +-20 +-22 +-22 +-22 +-21 +-19 +-17 +-14 +-10 +-8 +-6 +-5 +-4 +-3 +-4 +-7 +-9 +-13 +-16 +-18 +-21 +-23 +-25 +-26 +-26 +-25 +-23 +-20 +-17 +-14 +-10 +-5 +-1 +1 +1 +-1 +-5 +-9 +-13 +-16 +-18 +-21 +-23 +-24 +-25 +-24 +-21 +-18 +-16 +-14 +-14 +-14 +-14 +-14 +-13 +-12 +-11 +-10 +-9 +-8 +-8 +-7 +-8 +-10 +-12 +-15 +-17 +-19 +-21 +-23 +-24 +-24 +-23 +-21 +-18 +-16 +-12 +-9 +-6 +-3 +-2 +-2 +-4 +-8 +-11 +-15 +-18 +-20 +-22 +-24 +-25 +-25 +-24 +-22 +-19 +-16 +-11 +-7 +-4 +-4 +-6 +-7 +-10 +-13 +-14 +-15 +-16 +-16 +-17 +-16 +-15 +-14 +-14 +-15 +-16 +-17 +-18 +-19 +-19 +-19 +-18 +-16 +-13 +-10 +-8 +-6 +-6 +-8 +-10 +-12 +-15 +-16 +-18 +-19 +-20 +-20 +-20 +-19 +-18 +-16 +-14 +-12 +-9 +-7 +-6 +-8 +-10 +-12 +-15 +-17 +-18 +-20 +-21 +-21 +-21 +-21 +-19 +-16 +-14 +-11 +-7 +-5 +-4 +-5 +-7 +-10 +-12 +-15 +-16 +-18 +-19 +-20 +-20 +-20 +-18 +-16 +-14 +-14 +-15 +-16 +-17 +-17 +-17 +-16 +-15 +-13 +-12 +-10 +-8 +-6 +-7 +-8 +-11 +-13 +-16 +-18 +-20 +-21 +-22 +-23 +-23 +-21 +-19 +-16 +-13 +-10 +-7 +-6 +-4 +-3 +-3 +-5 +-8 +-12 +-15 +-18 +-21 +-23 +-25 +-27 +-27 +-26 +-24 +-21 +-19 +-15 +-8 +-3 +0 +0 +-1 +-4 +-7 +-11 +-14 +-16 +-18 +-20 +-21 +-21 +-19 +-18 +-19 +-19 +-20 +-21 +-21 +-20 +-18 +-15 +-13 +-9 +-6 +-4 +-2 +-2 +-3 +-7 +-10 +-13 +-16 +-18 +-21 +-23 +-25 +-25 +-25 +-23 +-21 +-18 +-15 +-12 +-8 +-6 +-4 +-2 +-2 +-2 +-5 +-8 +-12 +-16 +-19 +-22 +-25 +-27 +-28 +-28 +-27 +-25 +-21 +-16 +-10 +-6 +-4 +-4 +-5 +-6 +-8 +-9 +-11 +-12 +-14 +-15 +-15 +-14 +-14 +-15 +-16 +-18 +-20 +-21 +-22 +-22 +-21 +-19 +-17 +-14 +-10 +-7 +-5 +-4 +-5 +-8 +-11 +-13 +-16 +-18 +-20 +-21 +-23 +-22 +-22 +-20 +-18 +-15 +-12 +-10 +-8 +-6 +-5 +-5 +-5 +-5 +-8 +-10 +-14 +-16 +-20 +-22 +-25 +-27 +-28 +-27 +-26 +-23 +-20 +-15 +-9 +-5 +-4 +-4 +-5 +-7 +-9 +-10 +-12 +-13 +-14 +-15 +-16 +-15 +-15 +-15 +-15 +-17 +-19 +-21 +-21 +-21 +-21 +-19 +-17 +-14 +-11 +-9 +-7 +-6 +-5 +-5 +-5 +-5 +-6 +-9 +-12 +-16 +-19 +-22 +-24 +-27 +-28 +-28 +-27 +-25 +-22 +-20 +-16 +-11 +-5 +-1 +1 +2 +2 +1 +-3 +-7 +-12 +-16 +-20 +-23 +-26 +-28 +-29 +-29 +-28 +-25 +-20 +-15 +-11 +-8 +-7 +-7 +-7 +-8 +-8 +-9 +-10 +-11 +-12 +-12 +-12 +-13 +-15 +-17 +-20 +-21 +-23 +-24 +-25 +-24 +-21 +-19 +-16 +-13 +-9 +-6 +-3 +-1 +-1 +-3 +-7 +-10 +-14 +-17 +-20 +-23 +-25 +-25 +-26 +-25 +-23 +-20 +-17 +-14 +-10 +-6 +-3 +-1 +-2 +-4 +-8 +-11 +-14 +-17 +-19 +-21 +-22 +-24 +-25 +-23 +-19 +-16 +-15 +-14 +-14 +-14 +-15 +-15 +-14 +-14 +-13 +-12 +-11 +-10 +-9 +-8 +-9 +-10 +-13 +-15 +-17 +-19 +-20 +-22 +-22 +-22 +-22 +-20 +-18 +-15 +-11 +-8 +-6 +-5 +-4 +-3 +-4 +-6 +-9 +-13 +-16 +-19 +-21 +-24 +-25 +-26 +-26 +-25 +-22 +-20 +-16 +-12 +-6 +-2 +-1 +-2 +-5 +-8 +-11 +-14 +-16 +-18 +-19 +-21 +-20 +-19 +-18 +-16 +-15 +-15 +-16 +-16 +-17 +-17 +-17 +-16 +-15 +-13 +-11 +-9 +-7 +-6 +-6 +-8 +-11 +-13 +-16 +-18 +-20 +-21 +-22 +-23 +-23 +-21 +-19 +-17 +-14 +-11 +-9 +-7 +-5 +-5 +-5 +-5 +-6 +-8 +-12 +-15 +-18 +-20 +-23 +-25 +-27 +-28 +-28 +-26 +-24 +-21 +-18 +-13 +-8 +-2 +2 +3 +1 +-2 +-6 +-10 +-13 +-16 +-19 +-22 +-23 +-24 +-25 +-23 +-20 +-17 +-16 +-15 +-15 +-15 +-15 +-14 +-13 +-12 +-10 +-9 +-9 +-8 +-8 +-9 +-9 +-9 +-10 +-11 +-14 +-16 +-19 +-22 +-24 +-26 +-27 +-27 +-25 +-23 +-20 +-17 +-14 +-9 +-5 +-2 +0 +0 +0 +-2 +-4 +-7 +-11 +-15 +-19 +-22 +-25 +-28 +-30 +-30 +-29 +-28 +-26 +-22 +-16 +-10 +-6 +-4 +-4 +-5 +-6 +-7 +-8 +-10 +-11 +-13 +-14 +-15 +-15 +-15 +-16 +-18 +-19 +-21 +-22 +-23 +-24 +-23 +-21 +-18 +-15 +-12 +-9 +-5 +-4 +-2 +-1 +-2 +-3 +-5 +-8 +-11 +-15 +-18 +-21 +-24 +-27 +-29 +-30 +-29 +-27 +-25 +-23 +-18 +-13 +-8 +-2 +3 +4 +2 +-1 +-5 +-9 +-12 +-16 +-18 +-20 +-22 +-23 +-23 +-22 +-20 +-18 +-18 +-17 +-18 +-17 +-17 +-16 +-15 +-12 +-10 +-8 +-6 +-5 +-4 +-5 +-7 +-10 +-13 +-16 +-19 +-21 +-23 +-25 +-26 +-26 +-24 +-22 +-19 +-15 +-12 +-8 +-5 +-3 +-2 +-2 +-3 +-5 +-6 +-9 +-11 +-15 +-18 +-21 +-24 +-27 +-29 +-31 +-31 +-29 +-28 +-25 +-20 +-15 +-10 +-3 +2 +4 +3 +0 +-3 +-7 +-10 +-14 +-16 +-19 +-21 +-22 +-22 +-22 +-20 +-19 +-18 +-18 +-18 +-18 +-17 +-16 +-15 +-12 +-10 +-8 +-7 +-5 +-5 +-5 +-7 +-10 +-13 +-16 +-19 +-21 +-24 +-25 +-26 +-26 +-24 +-22 +-19 +-16 +-12 +-8 +-5 +-3 +-1 +-1 +-1 +-3 +-7 +-11 +-15 +-18 +-22 +-25 +-27 +-29 +-29 +-28 +-25 +-23 +-19 +-13 +-7 +-4 +-3 +-4 +-5 +-8 +-9 +-11 +-13 +-15 +-16 +-16 +-17 +-17 +-16 +-15 +-14 +-13 +-14 +-15 +-17 +-18 +-19 +-20 +-20 +-19 +-19 +-17 +-15 +-12 +-10 +-9 +-7 +-7 +-6 +-7 +-8 +-10 +-12 +-15 +-17 +-20 +-22 +-24 +-26 +-27 +-26 +-24 +-22 +-19 +-16 +-12 +-8 +-4 +-1 +1 +1 +-1 +-4 +-8 +-12 +-16 +-19 +-22 +-25 +-27 +-29 +-29 +-27 +-25 +-21 +-17 +-11 +-6 +-5 +-5 +-6 +-8 +-9 +-12 +-13 +-14 +-16 +-16 +-17 +-16 +-16 +-14 +-14 +-15 +-17 +-18 +-20 +-21 +-21 +-22 +-21 +-18 +-16 +-12 +-9 +-7 +-5 +-4 +-4 +-4 +-5 +-6 +-8 +-10 +-11 +-13 +-15 +-17 +-20 +-22 +-25 +-27 +-29 +-30 +-28 +-27 +-25 +-21 +-16 +-11 +-5 +0 +3 +3 +1 +-2 +-7 +-11 +-14 +-17 +-19 +-21 +-23 +-23 +-24 +-22 +-19 +-17 +-16 +-16 +-16 +-16 +-16 +-15 +-14 +-13 +-12 +-10 +-9 +-9 +-8 +-8 +-9 +-10 +-10 +-11 +-11 +-11 +-13 +-15 +-17 +-19 +-22 +-24 +-26 +-27 +-27 +-25 +-23 +-20 +-17 +-14 +-9 +-4 +-1 +1 +2 +1 +-1 +-5 +-10 +-14 +-18 +-21 +-24 +-26 +-28 +-29 +-29 +-27 +-24 +-19 +-14 +-11 +-9 +-8 +-8 +-8 +-9 +-9 +-10 +-11 +-11 +-12 +-13 +-13 +-13 +-14 +-15 +-17 +-19 +-21 +-23 +-24 +-25 +-24 +-21 +-20 +-17 +-14 +-10 +-6 +-3 +-2 +-1 +-2 +-3 +-5 +-7 +-9 +-12 +-16 +-19 +-22 +-25 +-28 +-31 +-32 +-31 +-30 +-29 +-25 +-19 +-14 +-10 +-4 +1 +4 +5 +3 +0 +-5 +-9 +-13 +-16 +-19 +-22 +-24 +-26 +-27 +-26 +-24 +-20 +-17 +-15 +-14 +-13 +-13 +-12 +-11 +-11 +-10 +-9 +-9 +-9 +-9 +-10 +-10 +-11 +-12 +-13 +-14 +-14 +-15 +-16 +-17 +-19 +-21 +-23 +-25 +-25 +-25 +-24 +-22 +-19 +-16 +-13 +-8 +-5 +-2 +-1 +0 +0 +-3 +-6 +-11 +-15 +-18 +-21 +-24 +-26 +-27 +-28 +-27 +-25 +-21 +-17 +-14 +-11 +-10 +-9 +-9 +-10 +-10 +-11 +-11 +-11 +-12 +-12 +-12 +-12 +-12 +-13 +-14 +-16 +-18 +-20 +-22 +-23 +-24 +-24 +-22 +-20 +-17 +-14 +-11 +-8 +-6 +-4 +-2 +-2 +-4 +-5 +-6 +-8 +-11 +-14 +-17 +-20 +-23 +-26 +-28 +-30 +-30 +-29 +-27 +-25 +-21 +-16 +-11 +-5 +0 +3 +4 +2 +-1 +-5 +-10 +-14 +-17 +-20 +-22 +-24 +-25 +-25 +-24 +-21 +-18 +-17 +-16 +-16 +-16 +-15 +-14 +-13 +-12 +-10 +-8 +-7 +-6 +-6 +-6 +-8 +-10 +-14 +-17 +-19 +-22 +-24 +-26 +-27 +-27 +-25 +-23 +-21 +-17 +-14 +-9 +-5 +-2 +0 +0 +-1 +-2 +-4 +-7 +-11 +-15 +-19 +-22 +-26 +-28 +-31 +-32 +-31 +-30 +-29 +-24 +-19 +-14 +-9 +-3 +2 +4 +4 +1 +-2 +-7 +-11 +-14 +-17 +-20 +-22 +-23 +-24 +-24 +-23 +-19 +-17 +-16 +-16 +-16 +-16 +-16 +-15 +-14 +-13 +-11 +-10 +-9 +-8 +-8 +-8 +-9 +-9 +-10 +-12 +-13 +-14 +-14 +-16 +-18 +-19 +-22 +-24 +-25 +-27 +-27 +-25 +-23 +-21 +-17 +-14 +-9 +-5 +-1 +1 +2 +1 +-2 +-6 +-10 +-14 +-18 +-21 +-24 +-26 +-28 +-29 +-29 +-26 +-23 +-18 +-14 +-12 +-10 +-10 +-9 +-9 +-9 +-9 +-10 +-10 +-11 +-11 +-10 +-11 +-13 +-15 +-17 +-19 +-21 +-23 +-24 +-25 +-24 +-23 +-20 +-18 +-14 +-10 +-6 +-3 +-2 +-1 +-2 +-2 +-4 +-7 +-11 +-15 +-18 +-22 +-25 +-27 +-29 +-30 +-29 +-28 +-26 +-23 +-18 +-13 +-7 +-1 +2 +2 +0 +-3 +-7 +-11 +-14 +-17 +-18 +-20 +-21 +-22 +-21 +-20 +-18 +-17 +-16 +-17 +-17 +-18 +-17 +-17 +-16 +-14 +-12 +-10 +-9 +-8 +-7 +-7 +-8 +-8 +-9 +-10 +-13 +-15 +-18 +-21 +-23 +-26 +-27 +-29 +-28 +-26 +-24 +-21 +-18 +-14 +-8 +-4 +-1 +1 +1 +1 +-1 +-3 +-7 +-11 +-15 +-19 +-23 +-26 +-29 +-31 +-31 +-31 +-29 +-28 +-23 +-18 +-12 +-6 +-2 +0 +-1 +-2 +-5 +-8 +-10 +-13 +-15 +-17 +-19 +-19 +-19 +-18 +-18 +-18 +-19 +-20 +-21 +-21 +-22 +-21 +-19 +-16 +-13 +-10 +-7 +-5 +-4 +-3 +-3 +-3 +-4 +-8 +-11 +-15 +-18 +-21 +-24 +-26 +-28 +-29 +-28 +-26 +-23 +-21 +-17 +-12 +-6 +-1 +2 +2 +0 +-3 +-8 +-11 +-15 +-18 +-20 +-23 +-24 +-25 +-25 +-23 +-21 +-19 +-17 +-16 +-16 +-15 +-14 +-13 +-12 +-11 +-10 +-9 +-9 +-9 +-9 +-8 +-9 +-10 +-12 +-15 +-17 +-20 +-22 +-24 +-26 +-27 +-27 +-25 +-23 +-20 +-16 +-13 +-9 +-5 +-2 +-1 +-1 +-2 +-4 +-5 +-8 +-11 +-14 +-18 +-21 +-25 +-28 +-30 +-32 +-31 +-30 +-28 +-26 +-20 +-15 +-10 +-3 +1 +3 +2 +-1 +-4 +-8 +-11 +-13 +-16 +-18 +-20 +-21 +-21 +-20 +-19 +-18 +-19 +-20 +-20 +-20 +-20 +-19 +-16 +-14 +-11 +-9 +-7 +-6 +-5 +-5 +-6 +-5 +-8 +-11 +-14 +-17 +-20 +-22 +-24 +-25 +-27 +-27 +-26 +-24 +-22 +-19 +-16 +-11 +-5 +-2 +0 +1 +1 +0 +-3 +-7 +-12 +-16 +-19 +-23 +-26 +-28 +-30 +-30 +-29 +-27 +-24 +-19 +-13 +-9 +-7 +-7 +-7 +-7 +-8 +-9 +-11 +-12 +-13 +-13 +-13 +-13 +-14 +-15 +-17 +-19 +-21 +-22 +-24 +-24 +-24 +-22 +-20 +-17 +-14 +-11 +-8 +-5 +-4 +-3 +-3 +-3 +-5 +-8 +-11 +-15 +-18 +-22 +-25 +-27 +-29 +-29 +-28 +-26 +-23 +-21 +-17 +-12 +-6 +0 +2 +2 +0 +-3 +-7 +-11 +-15 +-17 +-20 +-22 +-23 +-24 +-24 +-22 +-20 +-19 +-18 +-18 +-18 +-17 +-16 +-15 +-14 +-12 +-10 +-9 +-7 +-6 +-6 +-7 +-10 +-13 +-16 +-18 +-21 +-23 +-24 +-25 +-26 +-25 +-22 +-20 +-17 +-14 +-11 +-8 +-4 +-1 +0 +-1 +-4 +-8 +-12 +-16 +-19 +-22 +-24 +-26 +-28 +-28 +-27 +-25 +-22 +-20 +-16 +-10 +-4 +0 +1 +0 +-2 +-6 +-10 +-14 +-16 +-19 +-21 +-23 +-24 +-25 +-23 +-20 +-18 +-17 +-17 +-17 +-17 +-16 +-15 +-14 +-13 +-11 +-9 +-7 +-6 +-5 +-7 +-10 +-13 +-16 +-18 +-21 +-23 +-24 +-26 +-26 +-25 +-23 +-20 +-17 +-13 +-9 +-5 +-3 +-2 +-1 +-2 +-3 +-5 +-9 +-13 +-17 +-20 +-24 +-26 +-29 +-30 +-30 +-28 +-26 +-24 +-20 +-13 +-6 +-2 +-1 +-2 +-4 +-6 +-9 +-11 +-14 +-16 +-17 +-18 +-18 +-17 +-16 +-16 +-16 +-17 +-19 +-20 +-20 +-20 +-20 +-18 +-16 +-14 +-11 +-8 +-6 +-5 +-7 +-9 +-12 +-14 +-17 +-18 +-20 +-21 +-22 +-22 +-22 +-20 +-18 +-16 +-13 +-11 +-9 +-7 +-6 +-5 +-5 +-8 +-11 +-14 +-17 +-19 +-22 +-24 +-25 +-26 +-26 +-24 +-22 +-19 +-16 +-11 +-7 +-4 +-2 +-4 +-6 +-9 +-12 +-15 +-16 +-18 +-20 +-21 +-21 +-21 +-19 +-17 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-16 +-15 +-14 +-12 +-11 +-10 +-8 +-9 +-9 +-9 +-9 +-9 +-11 +-13 +-16 +-18 +-21 +-24 +-26 +-27 +-27 +-26 +-24 +-22 +-19 +-15 +-11 +-7 +-3 +0 +1 +0 +-3 +-8 +-12 +-15 +-18 +-21 +-23 +-25 +-26 +-26 +-24 +-22 +-18 +-15 +-14 +-14 +-14 +-15 +-15 +-14 +-12 +-12 +-10 +-9 +-9 +-8 +-8 +-9 +-12 +-15 +-17 +-19 +-21 +-23 +-24 +-25 +-24 +-23 +-20 +-18 +-15 +-11 +-8 +-5 +-3 +-4 +-6 +-9 +-12 +-14 +-16 +-19 +-21 +-23 +-24 +-24 +-22 +-20 +-18 +-15 +-12 +-8 +-5 +-5 +-6 +-8 +-10 +-13 +-15 +-17 +-18 +-19 +-20 +-20 +-19 +-17 +-16 +-15 +-16 +-16 +-18 +-19 +-19 +-18 +-17 +-16 +-14 +-12 +-10 +-7 +-7 +-8 +-10 +-12 +-15 +-17 +-18 +-20 +-21 +-22 +-22 +-21 +-20 +-18 +-16 +-13 +-12 +-9 +-7 +-7 +-8 +-10 +-12 +-14 +-16 +-18 +-20 +-21 +-22 +-22 +-21 +-20 +-17 +-15 +-12 +-10 +-7 +-5 +-4 +-5 +-8 +-11 +-14 +-17 +-19 +-21 +-22 +-23 +-24 +-23 +-21 +-17 +-15 +-13 +-12 +-13 +-13 +-14 +-15 +-15 +-14 +-14 +-14 +-13 +-12 +-10 +-8 +-8 +-10 +-12 +-14 +-17 +-19 +-21 +-22 +-23 +-23 +-23 +-22 +-20 +-17 +-15 +-12 +-9 +-7 +-5 +-4 +-4 +-5 +-6 +-8 +-12 +-15 +-18 +-21 +-24 +-26 +-28 +-30 +-29 +-27 +-25 +-23 +-19 +-15 +-8 +-2 +1 +1 +0 +-3 +-7 +-10 +-13 +-16 +-18 +-20 +-22 +-23 +-24 +-22 +-20 +-19 +-19 +-20 +-20 +-19 +-19 +-17 +-15 +-12 +-10 +-8 +-6 +-5 +-5 +-5 +-6 +-8 +-11 +-14 +-18 +-20 +-23 +-26 +-28 +-29 +-29 +-26 +-25 +-23 +-21 +-16 +-10 +-4 +-1 +1 +2 +1 +-1 +-5 +-9 +-14 +-18 +-21 +-24 +-27 +-29 +-30 +-29 +-28 +-25 +-20 +-15 +-11 +-9 +-8 +-7 +-7 +-7 +-8 +-9 +-9 +-10 +-11 +-11 +-12 +-13 +-15 +-18 +-20 +-22 +-24 +-25 +-26 +-25 +-22 +-19 +-16 +-12 +-9 +-6 +-3 +-2 +-2 +-4 +-8 +-12 +-15 +-18 +-21 +-23 +-25 +-26 +-27 +-25 +-23 +-21 +-18 +-15 +-11 +-7 +-4 +-2 +-1 +-2 +-2 +-5 +-8 +-12 +-16 +-19 +-22 +-25 +-28 +-29 +-29 +-29 +-26 +-24 +-19 +-12 +-7 +-5 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-93 +-69 +-52 +-40 +-31 +-25 +-21 +-18 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-18 +-18 +-18 +-18 +-18 +-17 +-17 +-17 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-14 +-14 +-14 +-14 +-14 +-14 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-15 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +127 +127 +127 +127 +127 +127 +107 +72 +47 +28 +14 +3 +-5 +-11 +-15 +-18 +-19 +-20 +-18 +-16 +-15 +-15 +-15 +-16 +-17 +-17 +-17 +-17 +-16 +-15 +-14 +-12 +-11 +-10 +-10 +-10 +-9 +-9 +-11 +-13 +-15 +-17 +-19 +-22 +-23 +-25 +-26 +-26 +-127 +-127 +-127 +-127 +-127 +-127 +-124 +-87 +-61 +-44 +-32 +-24 +-19 +-17 +-16 +-15 +127 +127 +127 +127 +127 +127 +101 +66 +41 +22 +9 +0 +-6 +-13 +-17 +-21 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-92 +-63 +-43 +-30 +-22 +-17 +-14 +-13 +-13 +127 +127 +127 +127 +127 +127 +102 +67 +42 +23 +9 +-1 +-8 +-12 +-15 +-16 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-97 +-69 +-49 +-34 +-25 +-19 +-15 +-13 +-12 +-12 +-13 +-13 +-14 +-15 +-16 +-17 +-18 +-18 +-19 +-19 +-19 +-19 +-19 +-19 +-18 +-18 +-17 +-16 +-16 +-15 +-15 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +127 +127 +127 +127 +127 +127 +106 +72 +47 +28 +13 +2 +-5 +-11 +-16 +-18 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-93 +-68 +-50 +-37 +-29 +-23 +-20 +-18 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-17 +-18 +-18 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-16 +-15 +-15 +-15 +-16 +127 +127 +127 +127 +127 +127 +105 +71 +47 +30 +17 +8 +0 +-6 +-11 +-16 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-102 +-73 +-52 +-36 +-25 +-18 +-14 +-12 +-11 +-11 +-12 +-12 +-14 +-15 +-16 +-16 +-17 +-18 +-18 +-19 +-19 +-19 +-19 +-19 +-18 +-17 +-17 +-16 +-16 +-16 +-15 +-14 +-14 +-13 +-13 +-13 +-14 +-14 +-14 +-14 +-14 +-14 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-16 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +127 +127 +127 +127 +127 +127 +105 +72 +47 +29 +15 +5 +-2 +-8 +-12 +-14 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-102 +-74 +-55 +-40 +-30 +-23 +-18 +-15 +-13 +127 +127 +127 +127 +127 +127 +105 +69 +43 +23 +8 +-2 +-10 +-16 +-19 +-20 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-90 +-64 +-47 +-35 +-28 +-23 +-20 +-18 +-17 +-17 +-18 +-17 +-18 +-19 +-19 +-18 +-18 +-18 +-18 +-18 +-17 +-17 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-15 +-15 +-15 +-15 +-16 +127 +127 +127 +127 +127 +127 +105 +71 +47 +30 +17 +7 +-2 +-9 +-15 +-19 +-23 +-25 +-26 +-25 +-24 +-21 +-19 +-16 +-12 +-8 +-6 +-4 +-2 +-2 +-4 +-8 +-12 +-16 +-18 +-21 +-24 +-25 +-27 +-27 +-26 +-24 +-20 +-16 +-13 +-11 +-10 +-11 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-94 +-68 +-51 +-38 +-30 +-24 +-20 +-17 +-16 +127 +127 +127 +127 +127 +127 +103 +69 +43 +24 +11 +0 +-7 +-13 +-16 +-17 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-97 +-70 +-50 +-37 +-27 +-21 +-17 +-15 +-14 +127 +127 +127 +127 +127 +127 +103 +68 +42 +23 +9 +-1 +-8 +-12 +-15 +-16 +-18 +-20 +-21 +-22 +-22 +-20 +-18 +-16 +-13 +-10 +-7 +-5 +-4 +-4 +-4 +-6 +-9 +-13 +-16 +-20 +-22 +-25 +-27 +-29 +-29 +-28 +-25 +-23 +-20 +-17 +-13 +-8 +-4 +-2 +0 +0 +-2 +-5 +-9 +-13 +-16 +-20 +-23 +-26 +-28 +-30 +-30 +-28 +-26 +-24 +-21 +-15 +-8 +-3 +-1 +-1 +-4 +-6 +-9 +-12 +-15 +-17 +-18 +-20 +-20 +-20 +-19 +-18 +-18 +-18 +-19 +-20 +-20 +-20 +-20 +-18 +-16 +-13 +-12 +-9 +-8 +-7 +-6 +-5 +-6 +-8 +-10 +-14 +-17 +-20 +-23 +-25 +-27 +-28 +-29 +-28 +-26 +-23 +-20 +-17 +-13 +-7 +-3 +-1 +0 +0 +-1 +-3 +-7 +-12 +-16 +-19 +-23 +-26 +-28 +-30 +-31 +-30 +-28 +-25 +-21 +-15 +-9 +-8 +-7 +-6 +-6 +-7 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-96 +-71 +-53 +-41 +-32 +-26 +-22 +-19 +-18 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-17 +-18 +-18 +-18 +-18 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +127 +127 +127 +127 +127 +127 +100 +93 +127 +127 +100 +68 +43 +25 +12 +2 +-4 +-8 +-13 +-17 +-20 +-23 +-25 +-26 +-25 +-22 +-19 +-16 +-12 +-7 +-3 +0 +0 +-2 +-6 +-10 +-14 +-17 +-21 +-24 +-27 +-29 +-30 +-30 +-28 +-25 +-22 +-18 +-15 +-11 +-7 +-4 +-2 +-2 +-3 +-7 +-11 +-16 +-21 +-25 +-29 +-32 +-35 +-37 +-36 +-35 +-32 +-28 +-21 +-16 +-13 +-11 +-10 +-11 +-11 +-12 +-13 +-15 +-15 +-16 +-17 +-18 +-18 +-20 +-23 +-26 +-28 +-30 +-32 +-34 +-32 +-30 +-29 +-26 +-21 +-17 +-12 +-9 +-6 +-5 +-6 +-10 +-14 +-19 +-23 +-27 +-30 +-33 +-36 +-38 +-37 +-36 +-34 +-32 +-29 +-25 +-20 +-15 +-9 +-6 +-5 +-5 +-8 +-13 +-17 +-23 +-25 +-28 +-31 +-35 +-36 +-37 +-36 +-35 +-30 +-26 +-24 +-22 +-19 +-16 +-14 +-12 +-11 +-10 +-10 +-10 +-10 +-10 +-10 +-12 +-14 +-17 +-19 +-21 +-24 +-25 +-26 +-27 +-25 +-23 +-21 +-18 +-14 +-10 +-7 +-4 +109 +-44 +80 +-61 +67 +-72 +56 +-80 +48 +-86 +42 +-89 +40 +-86 +43 +-83 +48 +-74 +61 +-63 +73 +-59 +72 +-64 +65 +-72 +57 +-78 +51 +-82 +47 +-84 +48 +-81 +49 +-81 +48 +-82 +46 +-81 +50 +-76 +56 +-70 +64 +-64 +70 +-63 +69 +-69 +62 +-75 +55 +-80 +49 +-84 +45 +-87 +43 +-84 +47 +-79 +53 +-72 +63 +-66 +66 +-67 +63 +-73 +57 +-78 +52 +-81 +48 +-82 +47 +-82 +49 +-78 +54 +-73 +60 +-68 +66 +-66 +66 +-70 +60 +-76 +54 +-80 +49 +-83 +46 +-84 +46 +-80 +52 +-75 +56 +-74 +56 +-75 +54 +-76 +55 +-74 +57 +-73 +60 +-70 +63 +-69 +62 +-73 +57 +-78 +52 +-82 +47 +-84 +44 +-85 +46 +-81 +50 +-75 +57 +-69 +64 +-65 +68 +-64 +69 +-67 +63 +-75 +55 +-82 +47 +-87 +41 +-90 +38 +-87 +41 +-85 +48 +-73 +63 +-62 +71 +-62 +69 +-66 +64 +-72 +58 +-76 +54 +-79 +53 +-79 +51 +-81 +48 +-84 +44 +-85 +44 +-82 +49 +-76 +56 +-68 +67 +-62 +71 +-64 +66 +-71 +59 +-77 +53 +-81 +48 +-84 +45 +-85 +45 +-81 +49 +-77 +56 +-70 +63 +-66 +68 +-64 +67 +-70 +60 +-77 +52 +-83 +46 +-87 +41 +-88 +41 +-85 +46 +-80 +52 +-69 +67 +-61 +71 +-64 +66 +-70 +60 +-76 +54 +-80 +50 +-81 +50 +-80 +50 +-81 +48 +-83 +45 +-83 +47 +-78 +53 +-72 +62 +-65 +69 +-62 +70 +-66 +64 +-73 +56 +-79 +50 +-84 +45 +-86 +43 +-86 +-101 +58 +-62 +67 +-62 +70 +-60 +73 +-61 +69 +-68 +61 +-76 +53 +-82 +47 +-85 +43 +-87 +44 +-83 +48 +-77 +57 +-68 +66 +-64 +67 +-67 +62 +-73 +57 +-78 +52 +-80 +49 +-81 +50 +-79 +53 +-77 +53 +-78 +51 +-80 +50 +-79 +51 +-76 +56 +-71 +61 +-68 +64 +-67 +65 +-68 +64 +-71 +59 +-77 +52 +-83 +45 +-88 +39 +-90 +38 +-87 +42 +-82 +51 +-72 +63 +-62 +72 +-59 +75 +-60 +71 +-69 +61 +-78 +52 +-85 +44 +-90 +38 +-91 +38 +-87 +43 +-79 +55 +-69 +63 +-66 +65 +-67 +64 +-69 +62 +-72 +59 +-74 +57 +-75 +56 +-77 +52 +-81 +48 +-85 +44 +-85 +44 +-82 +48 +-77 +55 +-70 +63 +-65 +68 +-64 +69 +-65 +67 +-70 +60 +-77 +52 +-84 +44 +-89 +38 +-91 +37 +-88 +40 +-84 +48 +-73 +59 +-63 +72 +-57 +75 +-61 +68 +-70 +59 +-78 +52 +-83 +46 +-86 +44 +-84 +48 +86 +-95 +29 +-96 +37 +-87 +46 +-80 +54 +-72 +61 +-67 +66 +-68 +63 +-73 +56 +-79 +50 +-83 +46 +-85 +43 +-84 +46 +-80 +51 +-74 +59 +-67 +67 +-65 +-84 +74 +-56 +70 +-68 +58 +-76 +50 +-81 +47 +-81 +49 +-78 +54 +-73 +60 +-68 +65 +-66 +67 +-66 +64 +-72 +58 +-79 +50 +-84 +45 +-87 +40 +-87 +43 +-83 +48 +-74 +59 +-68 +63 +-68 +62 +-71 +59 +-74 +56 +-76 +54 +-77 +53 +-76 +56 +-75 +56 +-77 +52 +-80 +49 +-82 +47 +-82 +48 +-79 +52 +-74 +58 +-69 +63 +-67 +66 +-67 +65 +-69 +63 +-72 +60 +-77 +53 +-82 +46 +-87 +40 +73 +-106 +16 +-105 +28 +-91 +44 +-76 +61 +-63 +71 +-61 +69 +-67 +63 +-74 +-95 +63 +-64 +62 +-73 +55 +-76 +54 +-76 +53 +-78 +50 +-79 +50 +-79 +51 +89 +-88 +38 +-86 +50 +-76 +60 +-72 +59 +-75 +55 +-80 +49 +-84 +44 +-87 +-105 +52 +-68 +59 +-69 +60 +-67 +65 +-62 +70 +-61 +72 +-63 +68 +-70 +59 +91 +-98 +24 +-105 +27 +-100 +30 +-94 +37 +-88 +44 +-76 +59 +-63 +70 +-61 +-82 +76 +-53 +73 +-65 +62 +-73 +54 +-78 +51 +-79 +52 +-77 +52 +-79 +50 +85 +-96 +27 +-97 +37 +-86 +48 +-76 +57 +-70 +63 +-68 +64 +-68 +64 +-71 +-92 +66 +-63 +62 +-75 +50 +-83 +43 +-86 +42 +-83 +46 +-78 +53 +-69 +65 +-61 +74 +-58 +74 +-64 +65 +-73 +55 +-81 +48 +-86 +42 +-89 +39 +-87 +44 +-80 +52 +-73 +57 +-72 +58 +-71 +59 +-70 +60 +-70 +60 +-71 +60 +-71 +60 +-74 +56 +-78 +50 +-83 +45 +-86 +41 +-86 +43 +-82 +48 +-76 +56 +-68 +65 +-63 +70 +-62 +69 +-65 +66 +-71 +59 +-79 +50 +-85 +43 +-90 +36 +-93 +35 +71 +-104 +21 +-95 +40 +-78 +59 +-64 +71 +-61 +69 +-67 +62 +-75 +55 +-80 +50 +-83 +46 +-84 +46 +-81 +49 +-79 +50 +-79 +49 +-79 +50 +-76 +54 +-72 +60 +-68 +64 +-66 +67 +-67 +63 +-73 +56 +-79 +49 +-84 +43 +-87 +40 +-86 +-102 +55 +-63 +64 +-62 +69 +-60 +72 +-59 +73 +-61 +69 +-69 +59 +-78 +50 +-85 +43 +-89 +37 +-91 +38 +-87 +41 +-80 +52 +-68 +67 +-61 +70 +-63 +66 +-69 +60 +-74 +55 +-79 +50 +-81 +49 +-80 +51 +-79 +50 +-80 +47 +-82 +46 +83 +-94 +31 +-92 +44 +-79 +56 +-70 +64 +-67 +65 +-71 +59 +-77 +52 +-82 +46 +-87 +41 +-89 +39 +-86 +43 +-81 +49 +-74 +59 +-65 +70 +-60 +72 +-63 +-86 +71 +-59 +66 +-72 +53 +-80 +46 +-84 +44 +-82 +50 +-75 +55 +-74 +56 +92 +-89 +35 +-90 +45 +-81 +53 +-76 +57 +-73 +59 +-73 +58 +-76 +53 +-81 +-101 +55 +-69 +55 +-76 +51 +-76 +52 +-73 +58 +-67 +65 +-63 +69 +-63 +70 +-66 +64 +-73 +56 +-80 +48 +-86 +40 +-91 +36 +-90 +37 +-87 +41 +-78 +53 +94 +-79 +50 +-74 +62 +-69 +62 +-74 +56 +-80 +49 +-84 +44 +-87 +40 +-88 +-103 +55 +-63 +64 +-66 +60 +-69 +59 +-70 +60 +-69 +61 +-68 +63 +-68 +63 +99 +-88 +35 +-96 +37 +-93 +36 +-92 +35 +-91 +38 +-85 +45 +-79 +53 +-69 +65 +-61 +71 +-60 +71 +-64 +67 +-70 +60 +-78 +50 +-85 +43 +-90 +35 +-93 +-110 +45 +-73 +54 +-68 +60 +-64 +68 +-55 +78 +-55 +75 +-62 +65 +-72 +57 +90 +-97 +25 +-103 +29 +-97 +36 +-87 +45 +-81 +48 +-79 +50 +-76 +53 +-73 +-89 +70 +-52 +76 +-58 +70 +-64 +65 +-69 +61 +-72 +58 +-77 +52 +-82 +46 +-86 +40 +-89 +38 +-87 +41 +-83 +46 +-74 +58 +-65 +69 +-59 +73 +-59 +73 +-65 +64 +-74 +55 +-81 +47 +-87 +40 +-91 +37 +-89 +39 +-83 +48 +-73 +58 +97 +-83 +41 +-85 +48 +-80 +53 +-77 +54 +-77 +54 +-76 +55 +-76 +53 +-80 +48 +-83 +44 +-85 +42 +-84 +45 +-80 +51 +-73 +59 +-67 +65 +-64 +68 +-64 +-83 +77 +-52 +75 +-64 +62 +-76 +51 +-84 +42 +-90 +36 +-91 +36 +-88 +40 +81 +-90 +35 +-83 +55 +-67 +69 +-62 +69 +-68 +61 +-76 +53 +-82 +46 +-87 +41 +-89 +40 +-86 +45 +-79 +51 +-75 +53 +-74 +56 +-71 +60 +-68 +63 +-67 +-86 +74 +-51 +75 +-63 +63 +-73 +53 +-81 +45 +-86 +40 +-86 +41 +-82 +46 +85 +-88 +39 +-82 +56 +-69 +65 +-68 +62 +-74 +54 +-81 +47 +-86 +41 +-89 +38 +-88 +40 +-84 +45 +-76 +60 +-64 +68 +-63 +66 +-68 +61 +-73 +56 +-77 +-97 +61 +-63 +63 +-68 +60 +-72 +55 +-76 +50 +-79 +48 +-80 +49 +-76 +54 +-71 +60 +-68 +64 +-66 +65 +-67 +64 +-70 +59 +-76 +52 +-82 +45 +-87 +39 +-91 +37 +-88 +40 +-83 +47 +-73 +58 +-64 +69 +-59 +74 +-59 +71 +-67 +62 +94 +-96 +26 +-104 +27 +-100 +29 +-95 +34 +-87 +44 +-76 +55 +-70 +60 +-68 +-86 +72 +-52 +75 +-60 +67 +-67 +63 +-70 +59 +-75 +53 +-81 +46 +-85 +42 +-86 +42 +-83 +46 +-77 +53 +-70 +62 +-64 +68 +-62 +70 +-64 +65 +-72 +56 +-80 +48 +-86 +41 +-90 +36 +-90 +38 +-86 +41 +-79 +52 +-70 +64 +-60 +73 +-58 +72 +-65 +63 +-74 +54 +-80 +48 +-85 +42 +-87 +41 +-84 +48 +-77 +53 +-74 +54 +-74 +55 +-73 +56 +-72 +58 +-70 +60 +-70 +62 +-70 +60 +-74 +54 +-79 +48 +-83 +43 +-86 +41 +-85 +44 +-80 +49 +-74 +58 +-67 +65 +-63 +68 +-64 +67 +-67 +63 +-73 +55 +-80 +47 +-86 +40 +-90 +35 +-91 +36 +-88 +40 +-80 +51 +-69 +64 +-59 +74 +-57 +72 +-64 +64 +-72 +56 +-79 +50 +-83 +45 +-84 +45 +-82 +47 +-80 +48 +-80 +47 +-80 +49 +-76 +54 +-71 +61 +-66 +66 +104 +-81 +42 +-90 +43 +-87 +43 +-88 +41 +-89 +38 +-88 +40 +-84 +46 +-78 +-92 +68 +-50 +79 +-52 +77 +-57 +72 +-66 +62 +-75 +52 +-83 +44 +-88 +38 +-90 +37 +-87 +40 +-82 +49 +-71 +64 +-61 +70 +-62 +67 +-68 +59 +-74 +54 +-78 +50 +-81 +48 +-80 +50 +-78 +51 +-78 +49 +-80 +47 +-80 +48 +-78 +52 +-73 +58 +-69 +62 +-67 +64 +-66 +65 +-69 +60 +-75 +53 +-81 +46 +-86 +40 +-89 +37 +-87 +40 +-83 +45 +-77 +55 +-67 +66 +-60 +72 +-58 +73 +-64 +64 +-73 +54 +-81 +46 +-87 +39 +-90 +37 +-88 +41 +-81 +50 +-74 +56 +-70 +59 +-69 +61 +-68 +62 +-69 +61 +-70 +61 +-72 +56 +-77 +50 +-83 +44 +-87 +39 +-88 +40 +-84 +45 +-79 +50 +-70 +63 +-60 +72 +-59 +70 +-66 +61 +-75 +52 +-82 +45 +-86 +40 +-88 +39 +-86 +43 +-80 +49 +-74 +59 +-65 +69 +-59 +72 +107 +-83 +38 +-94 +38 +-93 +37 +-92 +36 +-91 +38 +-86 +44 +-78 +52 +-73 +-90 +67 +-55 +71 +-60 +66 +-65 +64 +-67 +62 +-69 +61 +-73 +55 +-78 +49 +-83 +44 +-86 +39 +-86 +42 +-81 +48 +-75 +56 +-67 +65 +-62 +69 +-62 +69 +-65 +64 +-72 +56 +-80 +47 +-86 +40 +-91 +34 +-92 +34 +-89 +38 +-80 +50 +-70 +63 +-59 +73 +-58 +70 +-64 +64 +-71 +56 +-77 +51 +-82 +47 +-83 +47 +-80 +48 +-80 +47 +-81 +46 +-81 +48 +-77 +53 +-71 +60 +-66 +66 +-63 +66 +-68 +59 +-75 +53 +-80 +47 +-84 +43 +-86 +41 +-84 +45 +-79 +51 +-73 +59 +-67 +65 +-63 +68 +-65 +64 +-72 +56 +-78 +47 +-85 +40 +-89 +38 +-87 +40 +-83 +46 +-75 +60 +-64 +67 +-63 +65 +-68 +60 +-73 +55 +-77 +51 +-79 +49 +-79 +51 +-77 +51 +-78 +49 +-80 +47 +-81 +47 +-78 +51 +-73 +57 +-68 +64 +102 +-82 +40 +-90 +42 +-88 +41 +-88 +40 +-87 +40 +-86 +43 +-81 +48 +-75 +-90 +70 +-50 +78 +-54 +74 +-60 +69 +-67 +60 +-76 +51 +-82 +44 +-88 +37 +-90 +37 +-86 +41 +-80 +53 +-68 +63 +-65 +64 +-67 +62 +-70 +59 +-72 +56 +-75 +53 +-77 +53 +-76 +52 +-79 +48 +-82 +45 +-83 +44 +-81 +47 +-76 +54 +-71 +61 +-65 +66 +-65 +63 +-71 +56 +-77 +50 +-81 +46 +-84 +43 +-84 +44 +-81 +48 +-75 +55 +-69 +62 +-66 +66 +-64 +66 +-69 +59 +-76 +51 +-82 +44 +-86 +40 +-88 +40 +-84 +45 +-76 +55 +-70 +59 +-69 +59 +-71 +57 +-73 +56 +-74 +55 +-74 +56 +-73 +57 +-74 +54 +-78 +49 +-81 +46 +-83 +44 +-82 +46 +-78 +51 +-73 +58 +-68 +63 +-66 +65 +-65 +64 +-70 +58 +-76 +51 +-82 +44 +-86 +39 +-89 +38 +-86 +42 +-81 +47 +-74 +59 +-63 +70 +-58 +72 +-62 +64 +98 +-91 +30 +-100 +31 +-96 +33 +-93 +37 +-86 +45 +-78 +50 +-76 +52 +-74 +-91 +66 +-54 +72 +-59 +68 +-63 +66 +-66 +62 +-72 +55 +-78 +49 +-83 +44 +78 +-102 +19 +-101 +31 +-89 +43 +-77 +56 +-68 +65 +-63 +68 +-66 +62 +-73 +-96 +60 +-66 +57 +-77 +46 +-82 +44 +-81 +46 +-77 +51 +-70 +62 +-61 +71 +-59 +69 +-67 +60 +-75 +52 +-81 +46 +-85 +42 +-86 +42 +-82 +48 +-76 +52 +-75 +52 +-74 +53 +-73 +56 +-71 +58 +-69 +61 +-68 +62 +-70 +58 +-75 +52 +86 +-99 +21 +-104 +26 +-96 +34 +-87 +43 +-78 +52 +-70 +63 +-63 +69 +-63 +-84 +72 +-56 +67 +-69 +55 +-78 +46 +-84 +41 +-84 +43 +-80 +49 +-73 +59 +-64 +66 +-64 +64 +-69 +58 +-74 +53 +-79 +48 +-81 +46 +-81 +48 +-77 +51 +88 +-93 +28 +-97 +34 +-88 +42 +-81 +49 +-75 +56 +-69 +63 +-67 +61 +-72 +56 +-77 +50 +-81 +46 +-83 +43 +-84 +43 +-81 +48 +-76 +54 +-70 +61 +-66 +-84 +76 +-48 +78 +-59 +65 +-71 +54 +-80 +46 +-86 +39 +-88 +38 +-85 +42 +80 +-92 +36 +-82 +53 +-73 +57 +-72 +56 +-75 +53 +-77 +51 +-79 +50 +-78 +-96 +62 +-61 +63 +-69 +54 +-76 +49 +-77 +50 +-75 +54 +-70 +61 +-66 +64 +-67 +60 +-72 +55 +-77 +49 +-81 +46 +-83 +44 +-83 +46 +-79 +50 +-74 +56 +-69 +61 +-67 +64 +-65 +64 +-70 +57 +-77 +50 +-82 +44 +-86 +39 +-87 +40 +78 +-96 +26 +-91 +46 +-74 +59 +-69 +60 +-72 +56 +-75 +52 +-79 +48 +-81 +47 +-80 +49 +-77 +52 +-76 +51 +-78 +48 +-79 +48 +-77 +51 +-75 +55 +-70 +60 +-67 +64 +-68 +60 +-73 +54 +-78 +48 +-82 +44 +-84 +42 +-83 +45 +-79 +-94 +64 +-53 +74 +-55 +74 +-58 +68 +-67 +59 +-75 +51 +-81 +45 +-85 +41 +77 +-100 +22 +-96 +39 +-82 +49 +-76 +52 +-75 +53 +-75 +53 +-74 +55 +-73 +-91 +67 +-55 +71 +-62 +66 +-67 +59 +-74 +52 +-79 +46 +-83 +42 +-85 +42 +80 +-95 +27 +-92 +43 +-78 +56 +-69 +63 +-66 +65 +-69 +58 +-76 +50 +-83 +-104 +50 +-72 +50 +-78 +46 +-78 +46 +-74 +56 +-64 +69 +-58 +71 +-62 +65 +-69 +58 +-76 +51 +-80 +46 +-83 +45 +-81 +47 +-80 +46 +-81 +44 +-82 +45 +-79 +50 +-73 +57 +-67 +64 +-62 +68 +-64 +63 +-71 +56 +-77 +49 +-82 +44 +79 +-101 +18 +-103 +30 +-90 +42 +-78 +54 +-69 +64 +-64 +66 +-67 +60 +-74 +52 +-80 +46 +-85 +40 +-87 +39 +-85 +42 +-80 +48 +-74 +57 +-65 +68 +-60 +69 +-64 +62 +-73 +54 +-79 +47 +-84 +42 +-86 +40 +-84 +45 +-78 +51 +-74 +-93 +63 +-57 +67 +-63 +63 +-65 +62 +-67 +62 +-68 +61 +-70 +60 +-72 +56 +92 +-94 +25 +-101 +28 +-97 +30 +-93 +35 +-86 +41 +-80 +50 +-69 +63 +-61 +-78 +81 +-43 +83 +-55 +69 +-69 +56 +-79 +46 +-86 +38 +-91 +35 +-89 +37 +-85 +45 +-74 +59 +-62 +68 +-60 +67 +-65 +62 +-71 +56 +-76 +51 +-79 +48 +-80 +48 +-78 +50 +-78 +48 +-80 +45 +-81 +45 +-79 +49 +-74 +55 +-69 +61 +-66 +64 +-66 +64 +-67 +62 +-70 +57 +-76 +50 +-83 +43 +-88 +37 +-90 +35 +-88 +39 +-83 +45 +-74 +56 +-64 +67 +-58 +73 +-58 +71 +-64 +62 +-74 +52 +86 +-100 +18 +-107 +22 +-100 +29 +-90 +40 +-79 +51 +-72 +56 +-69 +59 +-68 +-87 +70 +-53 +72 +-61 +65 +-67 +61 +-72 +54 +-78 +48 +-82 +43 +-85 +40 +77 +-98 +23 +-95 +39 +-80 +54 +-69 +63 +-65 +66 +-64 +64 +-71 +56 +-78 +-101 +54 +-70 +51 +-80 +42 +-84 +41 +-82 +45 +-74 +55 +-65 +66 +-57 +73 +110 +-76 +42 +-90 +41 +-88 +40 +-89 +39 +-89 +38 +-86 +42 +-80 +49 +-76 +-94 +61 +-58 +66 +-63 +63 +-65 +62 +-66 +63 +-67 +62 +-69 +60 +-71 +57 +-75 +51 +-81 +45 +-85 +39 +-88 +37 +-86 +39 +-82 +45 +-75 +55 +-65 +66 +-59 +71 +-59 +71 +-63 +65 +-71 +56 +-79 +46 +-86 +39 +-91 +32 +-92 +33 +70 +-101 +22 +-92 +43 +-72 +61 +-64 +65 +-66 +62 +-70 +56 +-75 +52 +-79 +-99 +58 +-63 +62 +-68 +56 +-74 +50 +-78 +47 +-80 +46 +-77 +51 +-71 +58 +98 +-80 +43 +-82 +52 +-76 +55 +-77 +51 +-81 +46 +-85 +40 +-89 +35 +-89 +-106 +48 +-67 +57 +-65 +62 +-59 +72 +-55 +74 +-59 +66 +-69 +57 +-77 +49 +-82 +44 +-85 +40 +-85 +43 +-79 +49 +-75 +51 +-74 +52 +-73 +54 +-72 +56 +95 +-85 +37 +-87 +47 +-79 +51 +-79 +49 +-81 +46 +-84 +41 +-86 +39 +-86 +41 +-81 +47 +-75 +55 +-67 +63 +-63 +67 +-62 +67 +-65 +63 +-72 +55 +-79 +-102 +53 +-72 +48 +-81 +41 +-83 +40 +-80 +47 +-72 +57 +-62 +69 +-55 +74 +-59 +67 +-68 +58 +-76 +50 +-81 +45 +-85 +41 +-85 +42 +-80 +48 +-77 +50 +-76 +50 +-75 +52 +-73 +55 +-70 +59 +-67 +62 +-67 +62 +-70 +56 +-76 +49 +-82 +44 +-85 +39 +-86 +40 +-83 +44 +-77 +51 +-70 +61 +-63 +67 +-61 +68 +-63 +64 +-71 +55 +-79 +47 +-85 +39 +-89 +34 +-90 +36 +-86 +39 +-79 +51 +-67 +65 +-59 +70 +-61 +65 +-67 +58 +-74 +52 +-80 +46 +-82 +44 +-81 +47 +-78 +50 +-77 +48 +-78 +47 +-78 +48 +-76 +52 +-72 +57 +-68 +61 +-67 +62 +-68 +61 +-70 +58 +-73 +55 +-76 +50 +-81 +44 +-85 +39 +-89 +35 +-88 +38 +-83 +42 +-76 +53 +-66 +65 +-58 +72 +-57 +71 +-63 +63 +-72 +54 +-80 +46 +-85 +39 +-89 +36 +-87 +40 +-80 +49 +-73 +54 +-71 +56 +-70 +57 +-69 +58 +96 +-85 +36 +-89 +44 +-82 +48 +-80 +47 +-83 +43 +-85 +40 +-87 +38 +-84 +-100 +-60 +-22 +-11 +8 +7 +3 +2 +1 +0 +-2 +-4 +-8 +-12 +-17 +-21 +-24 +-27 +-30 +-32 +-34 +-34 +-33 +-32 +-28 +-23 +-18 +-13 +-7 +-1 +2 +2 +1 +-3 +-6 +-10 +-14 +-17 +-19 +-21 +-23 +-24 +-25 +-24 +-22 +-21 +-21 +-22 +-22 +-22 +-21 +-18 +-16 +-13 +-10 +-8 +-7 +-5 +-5 +-6 +-6 +-8 +-11 +-14 +-18 +-21 +-24 +-26 +-28 +-30 +-31 +-30 +-28 +-26 +-24 +-20 +-15 +-10 +-6 +-2 +-1 +0 +-1 +-2 +-6 +-10 +-15 +-19 +-22 +-25 +-29 +-31 +-32 +-32 +-30 +-29 +-27 +-21 +-16 +-9 +-3 +-1 +-2 +-4 +-6 +-9 +-12 +-14 +-17 +-18 +-19 +-20 +-21 +-20 +-19 +-19 +-19 +-20 +-21 +-21 +-21 +-21 +-20 +-18 +-16 +-13 +-11 +-9 +-8 +-7 +-7 +-8 +-8 +-9 +-11 +-14 +-17 +-20 +-23 +-25 +-28 +-30 +-32 +-31 +-29 +-26 +-23 +-21 +-16 +-10 +-5 +-2 +1 +1 +-2 +-5 +-10 +-14 +-18 +-21 +-24 +-26 +-27 +-29 +-28 +-26 +-23 +-19 +-17 +-16 +-15 +-14 +-14 +-12 +-11 +-11 +-10 +-10 +-11 +-11 +-11 +-10 +-12 +-14 +-16 +-19 +-21 +-23 +-25 +-26 +-26 +-25 +-24 +-22 +-19 +-16 +-13 +-9 +-6 +-5 +-4 +-3 +-4 +-7 +-11 +-15 +-18 +-21 +-24 +-27 +-30 +-31 +-31 +-29 +-27 +-25 +-21 +-17 +-12 +-6 +-2 +1 +1 +-2 +-6 +-10 +-14 +-17 +-20 +-22 +-24 +-25 +-26 +-26 +-24 +-21 +-18 +-18 +-17 +-17 +-17 +-16 +-16 +-14 +-13 +-12 +-11 +-10 +-10 +-10 +-10 +-11 +-12 +-12 +-14 +-15 +-18 +-20 +-23 +-25 +-27 +-29 +-30 +-29 +-27 +-25 +-22 +-20 +-15 +-9 +-5 +-2 +-1 +0 +-2 +-3 +-6 +-10 +-14 +-18 +-21 +-25 +-28 +-30 +-32 +-33 +-32 +-30 +-28 +-23 +-16 +-10 +-7 +-5 +-5 +-6 +-7 +-8 +-10 +-11 +-13 +-14 +-14 +-14 +-15 +-16 +-19 +-21 +-23 +-25 +-25 +-27 +-26 +-24 +-21 +-18 +-14 +-11 +-7 +-5 +-3 +-2 +-3 +-7 +-11 +-15 +-18 +-21 +-24 +-26 +-28 +-30 +-30 +-28 +-27 +-25 +-22 +-18 +-12 +-7 +-2 +-1 +-1 +-3 +-7 +-11 +-15 +-18 +-21 +-24 +-26 +-27 +-27 +-26 +-23 +-20 +-18 +-17 +-16 +-15 +-15 +-14 +-13 +-12 +-12 +-11 +-9 +-9 +-9 +-9 +-10 +-12 +-15 +-18 +-20 +-22 +-24 +-25 +-26 +-26 +-25 +-23 +-20 +-17 +-14 +-11 +-8 +-6 +-5 +-5 +-5 +-6 +-8 +-11 +-15 +-18 +-21 +-24 +-27 +-29 +-31 +-31 +-30 +-28 +-26 +-23 +-18 +-14 +-8 +-2 +1 +1 +0 +-3 +-8 +-12 +-15 +-18 +-21 +-23 +-24 +-25 +-26 +-24 +-22 +-20 +-19 +-19 +-19 +-19 +-18 +-17 +-16 +-14 +-11 +-10 +-8 +-7 +-6 +-8 +-10 +-13 +-16 +-19 +-22 +-24 +-26 +-27 +-28 +-27 +-25 +-22 +-20 +-17 +-13 +-8 +-5 +-3 +-2 +-3 +-4 +-5 +-8 +-11 +-16 +-19 +-23 +-26 +-29 +-31 +-32 +-32 +-30 +-29 +-26 +-20 +-14 +-7 +-4 +-3 +-3 +-5 +-7 +-9 +-11 +-13 +-15 +-16 +-18 +-18 +-18 +-18 +-19 +-20 +-22 +-23 +-25 +-25 +-25 +-23 +-20 +-17 +-14 +-10 +-7 +-4 +-4 +-5 +-8 +-11 +-15 +-17 +-20 +-22 +-24 +-25 +-26 +-26 +-25 +-23 +-20 +-17 +-14 +-11 +-8 +-6 +-5 +-5 +-5 +-6 +-8 +-11 +-15 +-18 +-21 +-25 +-27 +-29 +-31 +-30 +-30 +-28 +-25 +-20 +-13 +-7 +-5 +-5 +-6 +-7 +-9 +-11 +-13 +-14 +-16 +-17 +-17 +-17 +-17 +-17 +-18 +-20 +-21 +-23 +-23 +-24 +-23 +-22 +-20 +-17 +-15 +-12 +-9 +-8 +-7 +-6 +-6 +-7 +-9 +-12 +-16 +-19 +-22 +-25 +-27 +-29 +-31 +-29 +-27 +-25 +-24 +-21 +-16 +-11 +-6 +-2 +0 +0 +-1 +-5 +-9 +-14 +-17 +-21 +-24 +-26 +-28 +-30 +-29 +-27 +-24 +-20 +-16 +-15 +-13 +-12 +-12 +-11 +-11 +-11 +-11 +-11 +-10 +-10 +-10 +-11 +-13 +-15 +-18 +-21 +-23 +-24 +-25 +-26 +-25 +-24 +-21 +-18 +-15 +-12 +-9 +-7 +-5 +-4 +-4 +-6 +-9 +-13 +-16 +-20 +-23 +-25 +-27 +-29 +-31 +-30 +-28 +-26 +-23 +-20 +-15 +-10 +-5 +-1 +1 +0 +-3 +-7 +-11 +-15 +-19 +-22 +-24 +-26 +-28 +-28 +-26 +-23 +-19 +-17 +-16 +-15 +-15 +-15 +-14 +-13 +-11 +-10 +-10 +-9 +-9 +-9 +-9 +-12 +-14 +-17 +-19 +-22 +-24 +-26 +-27 +-27 +-26 +-24 +-21 +-18 +-15 +-11 +-8 +-5 +-4 +-3 +-3 +-5 +-8 +-11 +-16 +-20 +-22 +-25 +-28 +-30 +-31 +-30 +-28 +-26 +-24 +-20 +-14 +-7 +-2 +0 +-1 +-3 +-6 +-10 +-13 +-16 +-18 +-20 +-22 +-23 +-23 +-22 +-20 +-20 +-19 +-20 +-20 +-21 +-21 +-20 +-18 +-16 +-13 +-11 +-9 +-7 +-6 +-7 +-9 +-12 +-15 +-17 +-20 +-22 +-24 +-25 +-26 +-26 +-25 +-22 +-20 +-17 +-14 +-11 +-8 +-6 +-5 +-5 +-5 +-6 +-8 +-11 +-15 +-18 +-21 +-24 +-27 +-29 +-31 +-31 +-29 +-27 +-25 +-22 +-16 +-9 +-3 +-1 +-1 +-4 +-7 +-9 +-13 +-16 +-18 +-20 +-21 +-21 +-21 +-20 +-19 +-18 +-18 +-19 +-20 +-21 +-21 +-21 +-20 +-18 +-16 +-13 +-11 +-9 +-8 +-7 +-7 +-8 +-8 +-9 +-11 +-14 +-17 +-20 +-22 +-25 +-27 +-29 +-30 +-29 +-27 +-25 +-23 +-20 +-17 +-12 +-6 +-3 +-1 +0 +0 +-4 +-8 +-12 +-16 +-20 +-23 +-26 +-28 +-29 +-29 +-28 +-25 +-21 +-17 +-16 +-14 +-14 +-13 +-12 +-11 +-11 +-11 +-11 +-11 +-10 +-9 +-9 +-11 +-13 +-16 +-19 +-21 +-23 +-25 +-26 +-27 +-26 +-24 +-22 +-20 +-16 +-13 +-8 +-5 +-3 +-2 +-3 +-3 +-5 +-9 +-12 +-16 +-20 +-23 +-26 +-29 +-32 +-34 +-33 +-31 +-30 +-27 +-22 +-16 +-12 +-6 +-1 +2 +2 +0 +-3 +-8 +-12 +-16 +-19 +-21 +-23 +-25 +-26 +-26 +-25 +-22 +-20 +-18 +-18 +-18 +-18 +-17 +-15 +-13 +-11 +-10 +-9 +-8 +-8 +-7 +-8 +-10 +-13 +-16 +-18 +-21 +-24 +-26 +-27 +-28 +-27 +-26 +-23 +-21 +-17 +-14 +-9 +-6 +-3 +-2 +-2 +-3 +-4 +-7 +-11 +-14 +-18 +-22 +-25 +-28 +-31 +-33 +-32 +-32 +-30 +-27 +-21 +-15 +-8 +-3 +0 +0 +-2 +-5 +-8 +-11 +-13 +-16 +-18 +-20 +-21 +-21 +-21 +-20 +-20 +-20 +-21 +-22 +-23 +-23 +-22 +-20 +-18 +-15 +-12 +-10 +-8 +-6 +-5 +-6 +-6 +-7 +-10 +-13 +-16 +-19 +-23 +-26 +-28 +-29 +-30 +-30 +-28 +-26 +-23 +-20 +-16 +-11 +-6 +-4 +-2 +-1 +-1 +-3 +-6 +-11 +-15 +-19 +-22 +-25 +-28 +-30 +-32 +-31 +-29 +-26 +-22 +-17 +-12 +-9 +-8 +-7 +-8 +-9 +-10 +-11 +-12 +-13 +-15 +-15 +-15 +-14 +-15 +-17 +-18 +-20 +-22 +-24 +-24 +-25 +-24 +-22 +-20 +-17 +-14 +-11 +-8 +-6 +-5 +-5 +-5 +-5 +-8 +-11 +-14 +-17 +-21 +-24 +-26 +-29 +-31 +-31 +-31 +-30 +-27 +-25 +-20 +-15 +-10 +-5 +-1 +1 +2 +1 +-4 +-9 +-13 +-17 +-20 +-23 +-26 +-28 +-29 +-29 +-27 +-25 +-21 +-17 +-15 +-14 +-13 +-13 +-12 +-12 +-12 +-10 +-10 +-10 +-11 +-11 +-12 +-12 +-13 +-13 +-14 +-15 +-17 +-19 +-21 +-24 +-25 +-27 +-28 +-27 +-25 +-23 +-20 +-17 +-13 +-8 +-5 +-3 +-2 +-2 +-4 +-5 +-7 +-10 +-12 +-16 +-19 +-23 +-26 +-29 +-31 +-33 +-32 +-31 +-29 +-27 +-21 +-16 +-10 +-4 +0 +0 +-1 +-4 +-7 +-10 +-13 +-16 +-18 +-20 +-21 +-22 +-21 +-20 +-20 +-20 +-21 +-21 +-22 +-22 +-21 +-20 +-18 +-16 +-13 +-10 +-9 +-7 +-6 +-7 +-7 +-7 +-9 +-11 +-14 +-17 +-20 +-23 +-25 +-27 +-29 +-30 +-29 +-28 +-25 +-23 +-20 +-16 +-11 +-6 +-2 +0 +1 +0 +-4 +-8 +-12 +-17 +-20 +-23 +-26 +-28 +-30 +-30 +-29 +-27 +-24 +-21 +-15 +-9 +-6 +-5 +-6 +-8 +-10 +-12 +-14 +-16 +-16 +-16 +-16 +-17 +-17 +-16 +-15 +-16 +-16 +-18 +-20 +-21 +-22 +-23 +-23 +-23 +-20 +-18 +-16 +-13 +-10 +-8 +-7 +-6 +-6 +-7 +-8 +-9 +-11 +-12 +-15 +-17 +-20 +-22 +-25 +-28 +-30 +-32 +-31 +-29 +-28 +-26 +-21 +-15 +-10 +-4 +1 +2 +1 +-1 +-5 +-10 +-13 +-16 +-19 +-22 +-24 +-25 +-26 +-26 +-24 +-21 +-19 +-18 +-17 +-18 +-17 +-17 +-16 +-15 +-13 +-12 +-11 +-10 +-10 +-9 +-10 +-11 +-11 +-12 +-13 +-14 +-16 +-18 +-21 +-24 +-25 +-27 +-28 +-29 +-27 +-25 +-23 +-20 +-16 +-12 +-8 +-5 +-3 +-2 +-2 +-3 +-5 +-8 +-12 +-16 +-20 +-23 +-26 +-29 +-31 +-32 +-31 +-29 +-27 +-25 +-18 +-11 +-7 +-5 +-5 +-6 +-7 +-9 +-11 +-12 +-14 +-15 +-16 +-16 +-17 +-17 +-16 +-15 +-15 +-16 +-18 +-19 +-21 +-22 +-23 +-23 +-23 +-22 +-19 +-17 +-14 +-11 +-9 +-7 +-6 +-6 +-6 +-7 +-8 +-10 +-12 +-14 +-16 +-20 +-23 +-25 +-28 +-30 +-31 +-31 +-29 +-27 +-25 +-21 +-16 +-10 +-6 +-2 +2 +2 +0 +-3 +-8 +-12 +-16 +-19 +-22 +-24 +-26 +-27 +-27 +-26 +-23 +-20 +-18 +-17 +-17 +-17 +-16 +-16 +-14 +-13 +-12 +-10 +-9 +-9 +-9 +-10 +-10 +-12 +-13 +-13 +-14 +-16 +-17 +-19 +-22 +-24 +-26 +-28 +-29 +-29 +-27 +-25 +-22 +-19 +-15 +-9 +-5 +-3 +-1 +-1 +-1 +-3 +-6 +-10 +-14 +-18 +-22 +-25 +-28 +-30 +-32 +-32 +-31 +-29 +-27 +-23 +-17 +-10 +-4 +-1 +-2 +-3 +-5 +-8 +-11 +-14 +-16 +-18 +-19 +-19 +-20 +-19 +-19 +-18 +-18 +-19 +-20 +-21 +-21 +-21 +-21 +-20 +-18 +-16 +-13 +-10 +-8 +-7 +-6 +-6 +-7 +-8 +-9 +-11 +-13 +-15 +-16 +-17 +-18 +-20 +-22 +-24 +-27 +-28 +-30 +-30 +-29 +-26 +-24 +-21 +-16 +-10 +-4 +0 +1 +0 +-3 +-7 +-11 +-14 +-17 +-19 +-21 +-23 +-23 +-23 +-22 +-20 +-19 +-18 +-18 +-18 +-19 +-19 +-19 +-18 +-16 +-14 +-12 +-11 +-9 +-9 +-9 +-9 +-9 +-10 +-10 +-12 +-14 +-17 +-20 +-22 +-25 +-27 +-28 +-30 +-29 +-27 +-25 +-22 +-20 +-15 +-9 +-4 +-1 +1 +1 +0 +-2 +-6 +-10 +-14 +-18 +-22 +-25 +-28 +-30 +-32 +-32 +-30 +-28 +-27 +-22 +-16 +-9 +-4 +-1 +-2 +-4 +-6 +-9 +-12 +-14 +-16 +-18 +-20 +-21 +-21 +-20 +-19 +-18 +-19 +-20 +-21 +-22 +-22 +-23 +-21 +-19 +-16 +-14 +-11 +-8 +-7 +-6 +-6 +-6 +-7 +-9 +-10 +-12 +-14 +-15 +-16 +-18 +-20 +-22 +-25 +-27 +-31 +-32 +-32 +-30 +-28 +-26 +-22 +-16 +-11 +-5 +0 +2 +2 +0 +-4 +-9 +-13 +-16 +-19 +-22 +-24 +-26 +-27 +-26 +-24 +-21 +-18 +-17 +-16 +-16 +-16 +-16 +-14 +-13 +-12 +-12 +-11 +-10 +-10 +-10 +-10 +-11 +-12 +-12 +-13 +-14 +-15 +-17 +-20 +-22 +-24 +-26 +-28 +-29 +-28 +-26 +-24 +-20 +-17 +-14 +-9 +-5 +-2 +-1 +-1 +-2 +-3 +-5 +-9 +-13 +-17 +-21 +-24 +-27 +-30 +-32 +-32 +-31 +-28 +-27 +-23 +-17 +-11 +-5 +-1 +-1 +-2 +-5 +-8 +-11 +-14 +-16 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-100 +-72 +-53 +-39 +-29 +-23 +-19 +-16 +-16 +-15 +-15 +-15 +-15 +-16 +-16 +-17 +-17 +-17 +-18 +-18 +-19 +-19 +-19 +-18 +-18 +-18 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-17 +-17 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-16 +-16 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +127 +127 +127 +127 +127 +127 +107 +72 +47 +29 +15 +4 +-3 +-9 +-13 +-16 +-17 +-17 +-17 +-18 +-19 +-20 +-21 +-22 +-22 +-22 +-21 +-19 +-17 +-14 +-12 +-10 +-9 +-8 +-8 +-8 +-8 +-9 +-10 +-12 +-15 +-18 +-20 +-23 +-26 +-28 +-29 +-29 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-89 +-61 +-43 +-30 +-22 +-18 +-16 +-15 +-15 +127 +127 +127 +127 +127 +127 +103 +68 +43 +24 +10 +-2 +-10 +-17 +-22 +-25 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-90 +-62 +-44 +-32 +-24 +-20 +-17 +-16 +-16 +127 +127 +127 +127 +127 +127 +102 +66 +41 +22 +8 +-1 +-8 +-12 +-15 +-15 +-15 +-15 +-15 +-16 +-18 +-19 +-20 +-20 +-20 +-19 +-18 +-16 +-13 +-11 +-9 +-7 +-7 +-9 +-11 +-14 +-16 +-19 +-20 +-22 +-23 +-23 +-23 +-22 +-20 +-17 +-14 +-11 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-97 +-72 +-54 +-41 +-32 +-26 +-21 +-18 +-17 +-16 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-17 +-17 +-18 +-18 +-18 +-19 +-19 +-19 +-18 +-18 +-18 +-17 +-17 +-16 +-16 +-16 +-15 +-15 +-14 +-14 +-14 +-14 +-15 +-15 +127 +127 +127 +127 +127 +127 +108 +73 +47 +28 +13 +2 +-6 +-12 +-17 +-20 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-94 +-68 +-50 +-37 +-29 +-23 +-19 +-17 +-16 +127 +127 +127 +127 +127 +127 +104 +69 +43 +25 +11 +0 +-6 +-10 +-14 +-17 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-101 +-71 +-49 +-34 +-24 +-17 +-14 +-12 +-11 +-11 +-12 +-14 +-15 +-16 +-16 +-17 +-18 +-19 +-20 +-20 +-20 +-20 +-20 +-19 +-19 +-18 +-17 +-17 +-16 +-16 +-15 +-15 +-14 +-14 +-14 +-14 +-14 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +127 +127 +127 +127 +127 +127 +108 +73 +47 +28 +13 +2 +-5 +-12 +-16 +-18 +-19 +-18 +-16 +-15 +-14 +-15 +-16 +-17 +-18 +-19 +-19 +-19 +-18 +-17 +-16 +-14 +-13 +-12 +-11 +-10 +-10 +-10 +-11 +-11 +-12 +-13 +-14 +-16 +-19 +-21 +-24 +-25 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-97 +-67 +-45 +-31 +-22 +-16 +-13 +-12 +-12 +-12 +-13 +-15 +-16 +-16 +-17 +-18 +-19 +-20 +-20 +-20 +-20 +-20 +-20 +-19 +-18 +-18 +-17 +-16 +-16 +-15 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-15 +-14 +-15 +127 +127 +127 +127 +127 +127 +106 +72 +47 +29 +15 +5 +-2 +-8 +-12 +-15 +-17 +-18 +-18 +-18 +-18 +-18 +-20 +-21 +-22 +-23 +-23 +-22 +-20 +-18 +-15 +-12 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-94 +-70 +-53 +-41 +-33 +-27 +-23 +-21 +-19 +127 +127 +127 +127 +127 +127 +104 +69 +43 +25 +11 +0 +-7 +-12 +-16 +-18 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-94 +-68 +-50 +-38 +-29 +-24 +-20 +-18 +-17 +-17 +-17 +-17 +-17 +-17 +-18 +-18 +-18 +-19 +-19 +-19 +-18 +-18 +-18 +-18 +-18 +127 +127 +127 +127 +127 +127 +110 +76 +51 +32 +17 +5 +-3 +-10 +-16 +-20 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-97 +-69 +-49 +-36 +-27 +-21 +-17 +-15 +-15 +127 +127 +127 +127 +127 +127 +104 +69 +42 +24 +9 +-1 +-8 +-13 +-16 +-17 +-17 +-16 +-16 +-16 +-17 +-18 +-18 +-19 +-19 +-18 +-17 +-15 +-13 +-11 +-9 +-8 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-101 +-76 +-57 +-43 +-33 +-26 +-21 +-17 +-15 +127 +127 +127 +127 +127 +127 +107 +71 +46 +26 +12 +1 +-7 +-13 +-17 +-19 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +-69 +-50 +-37 +-29 +-23 +-20 +-17 +-16 +-16 +-16 +-16 +-16 +-17 +-17 +-18 +-18 +-18 +-18 +-18 +-18 +-18 +-18 +-18 +-18 +-17 +-17 +-17 +-16 +-16 +-15 +-15 +-14 +-14 +-14 +-14 +-14 +-14 +-15 +-15 +-15 +127 +127 +127 +127 +127 +127 +106 +72 +48 +30 +16 +5 +-3 +-10 +-16 +-20 +-23 +-26 +-26 +-25 +-23 +-21 +-18 +-15 +-11 +-8 +-5 +-4 +-4 +-4 +-5 +-7 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-108 +-81 +-61 +-45 +-34 +-25 +-19 +-15 +-13 +127 +127 +127 +127 +127 +127 +108 +73 +46 +27 +13 +3 +-5 +-11 +-16 +-20 +-24 +-26 +-28 +-27 +-25 +-23 +-21 +-18 +-14 +-9 +-5 +-2 +-1 +-1 +-2 +-4 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-108 +-83 +-63 +-48 +-37 +-29 +-23 +-19 +-16 +127 +127 +127 +127 +127 +127 +111 +75 +48 +28 +12 +0 +-9 +-15 +-20 +-23 +-24 +-23 +-22 +-20 +-16 +-11 +-8 +-6 +-6 +-7 +-9 +-11 +-14 +-16 +-17 +-19 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-97 +-70 +-51 +-38 +-29 +-23 +-19 +-17 +-16 +-15 +-15 +-15 +-16 +-16 +-17 +-17 +-18 +-18 +-19 +-19 +-19 +-19 +-18 +-18 +-18 +-17 +-18 +-17 +-16 +-16 +-15 +-15 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-15 +127 +127 +127 +127 +127 +127 +107 +72 +47 +29 +15 +6 +-1 +-7 +-12 +-16 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-103 +-73 +-52 +-37 +-26 +-20 +-15 +-14 +-13 +-12 +-12 +-13 +-14 +-15 +-16 +-16 +-17 +-18 +-18 +-18 +-19 +-19 +-19 +-19 +-19 +-18 +-17 +-17 +-16 +-16 +-16 +-15 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-16 +-16 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +127 +127 +127 +127 +127 +127 +109 +74 +48 +28 +14 +3 +-6 +-12 +-16 +-19 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-94 +-67 +-49 +-36 +-28 +-22 +-19 +-17 +-16 +-16 +-16 +-16 +-17 +-17 +-18 +-18 +-18 +-18 +-18 +-19 +-19 +-18 +-18 +-18 +-17 +-17 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-14 +-13 +-14 +-15 +-15 +-14 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +127 +127 +127 +127 +127 +127 +108 +73 +48 +29 +16 +6 +-2 +-7 +-10 +-13 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-104 +-76 +-54 +-39 +-28 +-20 +-16 +-13 +-12 +-11 +-11 +-12 +-13 +-14 +-15 +-16 +-17 +-17 +-18 +-18 +-19 +-19 +-19 +-19 +-19 +-18 +-18 +-17 +-17 +-16 +-16 +-15 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-15 +-15 +-14 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +127 +127 +127 +127 +127 +127 +107 +74 +49 +31 +17 +6 +-3 +-10 +-15 +-19 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-98 +-70 +-50 +-36 +-26 +-20 +-17 +-15 +-14 +127 +127 +127 +127 +127 +127 +106 +70 +44 +25 +10 +0 +-8 +-13 +-17 +-19 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-94 +-68 +-50 +-38 +-30 +-24 +-21 +-18 +-17 +-17 +-16 +-16 +-17 +-17 +-17 +-18 +-18 +-18 +-18 +-19 +-19 +-19 +-18 +-18 +-17 +-16 +-16 +-15 +-15 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +127 +127 +127 +127 +127 +127 +109 +74 +48 +29 +14 +3 +-5 +-11 +-15 +-18 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +-68 +-50 +-37 +-29 +-23 +-19 +-17 +-16 +-16 +-16 +-16 +-16 +-17 +-17 +-18 +-18 +-18 +-18 +-19 +-19 +-19 +-19 +-18 +-18 +-17 +-16 +-16 +-15 +-15 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-16 +-16 +-16 +-16 +-16 +-15 +-16 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +127 +127 +127 +127 +127 +127 +108 +74 +49 +31 +17 +8 +0 +-6 +-11 +-15 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-104 +-75 +-53 +-37 +-26 +-19 +-15 +-13 +-12 +127 +127 +127 +127 +127 +127 +106 +70 +43 +23 +8 +-2 +-10 +-16 +-18 +-19 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-91 +-66 +-49 +-37 +-29 +-24 +-21 +-19 +-19 +127 +127 +127 +127 +127 +127 +105 +69 +43 +24 +9 +-1 +-9 +-14 +-16 +-17 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-92 +-67 +-49 +-37 +-29 +-24 +-21 +-19 +-18 +-18 +-17 +-18 +-18 +-18 +-18 +-19 +-19 +-19 +-19 +-19 +-19 +-18 +-18 +-16 +-16 +127 +127 +127 +127 +127 +127 +110 +76 +50 +31 +17 +7 +-1 +-6 +-10 +-14 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-105 +-77 +-55 +-39 +-28 +-20 +-16 +-13 +-11 +-11 +-11 +-12 +-13 +-14 +-15 +-16 +-17 +-18 +-18 +-19 +-19 +-19 +-18 +-18 +-18 +127 +127 +127 +127 +127 +127 +110 +77 +52 +32 +16 +5 +-4 +-11 +-16 +-19 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +-68 +-48 +-35 +-27 +-21 +-18 +-16 +-15 +-15 +-16 +-16 +-17 +-18 +-18 +-18 +-18 +-18 +-18 +-18 +-18 +-18 +-18 +-17 +-17 +127 +127 +127 +127 +127 +127 +109 +75 +51 +32 +19 +9 +1 +-6 +-12 +-16 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-105 +-75 +-52 +-36 +-25 +-18 +-14 +-11 +-11 +127 +127 +127 +127 +127 +127 +107 +71 +44 +25 +10 +-1 +-8 +-13 +-16 +-17 +-17 +-17 +-18 +-19 +-20 +-20 +-19 +-18 +-15 +-13 +-11 +-9 +-7 +-5 +-5 +-6 +-9 +-12 +-16 +-18 +-21 +-23 +-25 +-26 +-27 +-25 +-23 +-21 +-19 +-15 +-11 +-7 +-127 +-127 +-127 +-127 +-127 +-127 +-125 +-93 +-69 +-53 +-42 +-34 +-29 +-25 +-23 +-21 +127 +127 +127 +127 +127 +127 +105 +71 +45 +26 +11 +0 +-8 +-14 +-18 +-19 +-19 +-18 +-16 +-13 +-10 +-8 +-8 +-9 +-11 +-13 +-15 +-16 +-16 +-17 +-17 +-17 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-95 +-69 +-51 +-38 +-29 +-24 +-20 +-18 +-16 +-16 +-16 +-16 +-16 +-17 +-17 +-18 +-18 +-19 +-19 +-19 +-19 +-19 +-18 +-18 +-17 +-17 +-16 +-16 +-15 +-15 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-15 +-16 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +127 +127 +127 +127 +127 +127 +103 +86 +127 +127 +103 +71 +46 +28 +14 +4 +-3 +-10 +-15 +-20 +-24 +-27 +-30 +-30 +-28 +-26 +-23 +-20 +-15 +-9 +-3 +1 +4 +4 +3 +1 +-2 +-6 +-9 +-13 +-16 +-19 +-23 +-25 +-30 +-34 +-37 +-37 +-36 +-35 +-32 +-25 +-18 +-11 +-3 +3 +5 +5 +3 +0 +-3 +-7 +-10 +-13 +-16 +-18 +-19 +-19 +-19 +-20 +-21 +-22 +-24 +-25 +-27 +-26 +-24 +-21 +-18 +-14 +-9 +-5 +-2 +0 +1 +1 +0 +-5 +-9 +-13 +-18 +-22 +-26 +-29 +-32 +-34 +-34 +-32 +-31 +-28 +-23 +-17 +-11 +-5 +1 +4 +7 +7 +6 +2 +-3 +-9 +-15 +-20 +-24 +-28 +-32 +-34 +-34 +-33 +-31 +-26 +-21 +-15 +-11 +-9 +-8 +-6 +-6 +-5 +-6 +-5 +-8 +-9 +-9 +-10 +-10 +-13 +-16 +-19 +-22 +-24 +-27 +-29 +-30 +-29 +-27 +-24 +-21 +-17 +-12 +-5 +0 +4 +5 +5 +0 +-5 +-11 +-16 +-20 +-23 +-27 +-29 +-31 +-32 +-31 +-28 +-26 +-24 +-18 +-10 +-2 +2 +3 +0 +-2 +-6 +-9 +-13 +-16 +-19 +-21 +-22 +-22 +-21 +-19 +-19 +-19 +-19 +-21 +-22 +-22 +-21 +-19 +-16 +-13 +-10 +-6 +-3 +-1 +-1 +-4 +-8 +-12 +-15 +-17 +-21 +-23 +-25 +-26 +-28 +-27 +-25 +-22 +-19 +-15 +-11 +-5 +-2 +-2 +-3 +-6 +-10 +-13 +-16 +-19 +-22 +-24 +-25 +-26 +-26 +-24 +-21 +-18 +-15 +-10 +-6 +-2 +0 +0 +-3 +-7 +-12 +-15 +-18 +-21 +-23 +-25 +-26 +-26 +-24 +-20 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-14 +-13 +-12 +-10 +-8 +-6 +-5 +-6 +-8 +-11 +-15 +-18 +-20 +-23 +-25 +-27 +-28 +-27 +-25 +-22 +-19 +-15 +-10 +-5 +-1 +1 +-1 +-5 +-9 +-13 +-16 +-19 +-22 +-24 +-25 +-27 +-27 +-25 +-22 +-19 +-15 +-9 +-4 +-1 +-3 +-5 +-8 +-10 +-14 +-17 +-19 +-21 +-21 +-22 +-21 +-18 +-16 +-15 +-15 +-16 +-18 +-19 +-20 +-20 +-19 +-18 +-16 +-13 +-10 +-6 +-5 +-5 +-7 +-10 +-13 +-16 +-18 +-21 +-23 +-24 +-25 +-25 +-24 +-21 +-19 +-16 +-12 +-8 +-5 +-3 +-1 +-2 +-4 +-8 +-13 +-16 +-20 +-22 +-26 +-28 +-29 +-29 +-28 +-25 +-21 +-17 +-11 +-5 +-2 +-3 +-4 +-6 +-9 +-11 +-14 +-16 +-18 +-19 +-20 +-19 +-18 +-16 +-16 +-17 +-18 +-20 +-21 +-21 +-22 +-21 +-19 +-16 +-13 +-9 +-5 +-3 +-3 +-5 +-9 +-12 +-15 +-17 +-20 +-22 +-23 +-25 +-25 +-24 +-22 +-20 +-17 +-14 +-10 +-7 +-5 +-3 +-2 +-2 +-3 +-6 +-10 +-14 +-18 +-22 +-26 +-29 +-32 +-33 +-33 +-31 +-30 +-26 +-20 +-13 +-3 +2 +3 +2 +0 +-4 +-7 +-12 +-15 +-16 +-18 +-20 +-21 +-20 +-19 +-18 +-18 +-19 +-21 +-22 +-22 +-23 +-22 +-19 +-16 +-13 +-9 +-5 +-1 +0 +-1 +-4 +-8 +-12 +-16 +-19 +-22 +-25 +-26 +-28 +-28 +-27 +-24 +-22 +-18 +-14 +-9 +-4 +-2 +0 +0 +0 +-2 +-4 +-7 +-11 +-16 +-20 +-23 +-28 +-31 +-34 +-35 +-35 +-33 +-32 +-27 +-19 +-13 +-4 +2 +4 +3 +1 +-2 +-5 +-9 +-12 +-15 +-17 +-19 +-20 +-20 +-19 +-18 +-19 +-20 +-22 +-23 +-23 +-24 +-23 +-20 +-18 +-14 +-11 +-7 +-3 +-1 +1 +2 +-1 +-5 +-9 +-14 +-19 +-23 +-27 +-30 +-33 +-35 +-35 +-33 +-31 +-29 +-24 +-18 +-12 +-5 +1 +2 +1 +-3 +-7 +-13 +-17 +-21 +-25 +-27 +-30 +-32 +-32 +-30 +-27 +-24 +-22 +-22 +-22 +-22 +-21 +-20 +-19 +-16 +-14 +-12 +-11 +-10 +-9 +-9 +-11 +-15 +-18 +-21 +-25 +-28 +-31 +-33 +-35 +-36 +-34 +-32 +-30 +-27 +-24 +-19 +-13 +-8 +-5 +-4 +-4 +-5 +-8 +-13 +-17 +-23 +-26 +-30 +-34 +-38 +-40 +-42 +-41 +-40 +-38 +-33 +-27 +-23 +-17 +-12 +-6 +-3 +-1 +-3 +-8 +-13 +-17 +-21 +-25 +-28 +-29 +-31 +-32 +-32 +-29 +-26 +-23 +-22 +-21 +-21 +-21 +-19 +-17 +-15 +-12 +-9 +-7 +-5 +-4 +-4 +-5 +-8 +-11 +-14 +-17 +-20 +-23 +-25 +-27 +-28 +-27 +-25 +-23 +-20 +-17 +-13 +-9 +-5 +-2 +-1 +-1 +-2 +-3 +-5 +-9 +96 +-54 +56 +-73 +43 +-82 +34 +-86 +32 +-84 +33 +-78 +44 +-68 +57 +-56 +67 +-55 +65 +-60 +59 +-67 +52 +-72 +47 +-76 +44 +-77 +44 +-75 +46 +-74 +45 +-76 +43 +-76 +43 +-74 +47 +-69 +52 +-65 +58 +-61 +61 +-61 +61 +-63 +59 +-67 +54 +-72 +47 +-78 +40 +-84 +34 +-87 +31 +-84 +34 +-80 +41 +-70 +52 +-61 +64 +-54 +71 +-53 +68 +-60 +59 +-70 +49 +-77 +42 +-82 +36 +-85 +34 +-82 +39 +-76 +47 +-69 +52 +-66 +54 +-65 +56 +-65 +57 +-65 +56 +-66 +55 +-67 +54 +-70 +50 +-75 +44 +-79 +39 +-82 +35 +-82 +38 +-77 +44 +-71 +51 +-63 +62 +-57 +66 +-56 +65 +-60 +61 +-66 +53 +-74 +45 +-81 +37 +-87 +30 +-89 +29 +-86 +33 +-77 +45 +-67 +55 +-57 +68 +-51 +71 +-55 +64 +-64 +55 +-72 +48 +-77 +42 +-81 +38 +-81 +39 +-77 +44 +-74 +46 +-73 +46 +-72 +48 +-69 +53 +-65 +57 +-63 +59 +-63 +58 +-65 +57 +-68 +53 +-72 +48 +-76 +42 +-81 +37 +-84 +34 +-83 +36 +-78 +41 +-72 +51 +-62 +63 +-55 +68 +-55 +67 +-58 +63 +-65 +55 +-73 +46 +-80 +37 +-86 +31 +-88 +31 +-85 +33 +-77 +46 +-64 +58 +-59 +62 +-59 +61 +-62 +59 +-66 +55 +-68 +53 +-70 +52 +-72 +47 +-76 +43 +-80 +38 +-82 +37 +-79 +41 +-74 +47 +-67 +56 +-60 +63 +-56 +66 +-59 +60 +-67 +51 +-75 +44 +-80 +37 +-84 +34 +-83 +36 +-79 +41 +-74 +-90 +63 +-42 +78 +-44 +76 +-51 +67 +-62 +55 +-72 +47 +-78 +40 +-82 +35 +-83 +37 +-79 +42 +-71 +53 +-63 +58 +-63 +57 +-66 +54 +-69 +51 +-71 +49 +-72 +48 +-71 +51 +-70 +50 +-73 +46 +-76 +42 +-78 +40 +-77 +42 +-73 +48 +-68 +54 +-62 +61 +-59 +63 +-60 +62 +-63 +59 +-68 +52 +-74 +44 +-80 +37 +-85 +31 +-86 +32 +-83 +35 +-76 +46 +-66 +58 +-55 +69 +-53 +67 +-59 +59 +-67 +51 +-73 +45 +-78 +41 +-80 +39 +-78 +44 +-73 +45 +-74 +45 +-73 +46 +-71 +50 +-67 +55 +-63 +59 +-62 +59 +-63 +59 +-65 +55 +-70 +50 +-75 +43 +-80 +37 +-84 +33 +-84 +34 +-80 +38 +-73 +49 +-63 +61 +-55 +68 +-54 +68 +-56 +64 +-64 +54 +-73 +45 +-81 +37 +-85 +30 +-87 +32 +-84 +35 +-76 +46 +-63 +61 +-55 +65 +-57 +62 +-63 +56 +-68 +51 +-73 +47 +-75 +45 +-75 +46 +88 +-88 +23 +-94 +28 +-87 +33 +-81 +40 +-74 +48 +-67 +55 +-62 +60 +-60 +61 +-62 +60 +-65 +56 +-69 +50 +-75 +44 +-80 +37 +-84 +32 +-85 +33 +-81 +-100 +50 +-54 +64 +-51 +71 +-48 +75 +-50 +69 +-59 +59 +-69 +49 +-76 +42 +-81 +36 +-84 +35 +-81 +40 +-73 +48 +-68 +51 +-67 +52 +-67 +53 +-66 +55 +-66 +55 +-66 +55 +-66 +55 +-67 +54 +-69 +50 +-74 +45 +-78 +39 +-82 +35 +-83 +36 +-79 +41 +-73 +47 +-65 +59 +-56 +66 +-54 +67 +-57 +64 +-64 +54 +-73 +45 +-80 +37 +-85 +31 +-87 +31 +-84 +33 +-77 +44 +-67 +57 +-55 +68 +-53 +66 +-59 +59 +-67 +52 +-72 +46 +-76 +43 +-78 +42 +-76 +44 +-74 +44 +-75 +43 +-75 +43 +-73 +47 +-69 +52 +-64 +57 +-62 +60 +-61 +60 +-63 +57 +-67 +54 +-70 +50 +-74 +44 +-79 +39 +-84 +32 +-85 +32 +-81 +36 +-76 +46 +-66 +57 +-56 +68 +-51 +70 +-56 +62 +-65 +53 +-73 +45 +-79 +39 +-82 +35 +78 +-94 +20 +-92 +33 +-81 +40 +-75 +46 +-70 +51 +-66 +56 +-64 +58 +-63 +-85 +66 +-50 +64 +-63 +51 +-73 +43 +-78 +38 +-80 +39 +-76 +44 +-70 +51 +-63 +60 +-57 +65 +-57 +65 +-60 +60 +-67 +51 +-75 +43 +-81 +35 +-86 +31 +-86 +32 +-83 +37 +-73 +48 +-64 +61 +-53 +69 +-53 +66 +-60 +58 +-68 +50 +-75 +43 +-79 +39 +-80 +39 +-76 +44 +-73 +47 +-72 +46 +-72 +47 +-70 +50 +94 +-80 +34 +-81 +44 +-73 +50 +-70 +52 +-70 +51 +-73 +46 +-78 +40 +-82 +35 +-84 +34 +-81 +37 +-77 +43 +-68 +54 +-59 +65 +-54 +68 +-55 +66 +-61 +57 +-70 +48 +-77 +40 +-83 +34 +-86 +32 +-83 +36 +-76 +47 +-66 +55 +-62 +58 +-62 +57 +-64 +56 +-66 +54 +-68 +52 +-69 +52 +-71 +48 +-75 +43 +-78 +-101 +47 +-63 +52 +-66 +52 +-64 +56 +-60 +61 +-57 +65 +-56 +65 +-60 +59 +97 +-87 +23 +-97 +24 +-94 +25 +-91 +28 +-86 +33 +-79 +43 +-68 +54 +-58 +-76 +78 +-35 +82 +-48 +67 +-62 +55 +-72 +45 +-79 +38 +-82 +35 +-81 +39 +-75 +46 +-70 +48 +-69 +50 +-67 +53 +-65 +56 +-63 +58 +-63 +58 +-64 +56 +-68 +50 +-74 +44 +-79 +38 +-82 +35 +-81 +37 +-77 +43 +-71 +51 +-62 +61 +-56 +67 +-55 +66 +-61 +57 +-70 +48 +-77 +40 +-83 +34 +-86 +32 +-83 +36 +-79 +42 +-69 +56 +-56 +67 +-54 +65 +-60 +59 +-67 +52 +-72 +46 +-76 +43 +84 +-91 +22 +-93 +31 +-85 +35 +-81 +38 +-78 +42 +-72 +49 +-66 +56 +-61 +62 +-58 +62 +-63 +56 +-69 +49 +-75 +42 +-80 +37 +-82 +35 +-80 +39 +-76 +44 +-69 +52 +-62 +62 +-57 +65 +-57 +64 +-61 +59 +-68 +50 +-76 +42 +-82 +34 +-86 +30 +-85 +32 +-82 +38 +-72 +50 +-60 +64 +-53 +67 +-56 +62 +-63 +55 +-70 +49 +-74 +44 +-77 +42 +-76 +44 +-74 +44 +-75 +43 +-76 +42 +-74 +-93 +56 +-51 +67 +-51 +67 +-53 +67 +-56 +64 +-62 +56 +-70 +47 +-77 +40 +-82 +34 +-85 +33 +-81 +37 +-77 +43 +-68 +54 +-58 +65 +-53 +68 +-56 +62 +-65 +52 +-73 +44 +-79 +38 +-82 +35 +-82 +38 +-75 +46 +-70 +48 +-69 +50 +-67 +53 +-65 +55 +-64 +57 +-63 +57 +-64 +56 +-68 +50 +-73 +44 +-78 +39 +-81 +36 +-80 +39 +-75 +44 +-69 +53 +-62 +61 +-57 +65 +-59 +59 +-67 +50 +-74 +44 +-79 +39 +-81 +36 +-80 +38 +-75 +44 +-70 +52 +-61 +62 +-56 +65 +-59 +60 +-66 +51 +-73 +45 +-78 +40 +-80 +38 +-78 +43 +-73 +47 +-71 +47 +-71 +48 +-69 +50 +-67 +53 +-64 +57 +-62 +59 +-64 +54 +-70 +47 +-75 +42 +-79 +38 +-80 +38 +-76 +42 +-72 +49 +-64 +59 +-57 +63 +-60 +58 +-66 +51 +-72 +45 +-76 +41 +-79 +39 +-79 +40 +-74 +45 +-69 +52 +-63 +59 +-59 +62 +105 +-77 +33 +-88 +34 +-86 +34 +-85 +33 +-84 +35 +-80 +41 +-72 +49 +-68 +-89 +-55 +-15 +-6 +10 +3 +-4 +-6 +-7 +-7 +-7 +-7 +-9 +-12 +-16 +-18 +-20 +-22 +-24 +-25 +-25 +-25 +-23 +-20 +-17 +-14 +-11 +-7 +-5 +-3 +-1 +-1 +-3 +-7 +-10 +-14 +-18 +-21 +-24 +-26 +-28 +-29 +-28 +-26 +-23 +-22 +-19 +-13 +-7 +-1 +2 +3 +1 +-2 +-6 +-10 +-14 +-17 +-19 +-22 +-23 +-24 +-24 +-22 +-20 +-17 +-16 +-16 +-16 +-16 +-16 +-15 +-14 +-12 +-10 +-9 +-7 +-6 +-5 +-6 +-8 +-11 +-14 +-17 +-20 +-22 +-24 +-25 +-26 +-25 +-23 +-21 +-18 +-14 +-10 +-6 +-4 +-1 +-1 +-1 +-2 +-4 +-8 +-12 +-16 +-19 +-23 +-26 +-28 +-30 +-30 +-29 +-27 +-25 +-21 +-15 +-8 +-3 +0 +0 +-2 +-4 +-7 +-10 +-12 +-14 +-16 +-18 +-18 +-18 +-17 +-17 +-17 +-19 +-21 +-21 +-22 +-21 +-20 +-18 +-15 +-12 +-9 +-6 +-5 +-5 +-7 +-10 +-12 +-15 +-17 +-19 +-21 +-22 +-22 +-23 +-22 +-20 +-18 +-15 +-12 +-9 +-7 +-5 +-4 +-4 +-5 +-9 +-12 +-15 +-18 +-20 +-23 +-25 +-25 +-25 +-24 +-22 +-20 +-18 +-14 +-8 +-4 +0 +0 +-1 +-4 +-8 +-12 +-15 +-17 +-20 +-22 +-23 +-23 +-24 +-21 +-19 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-14 +-14 +-13 +-11 +-10 +-9 +-9 +-9 +-9 +-9 +-10 +-12 +-15 +-17 +-20 +-22 +-25 +-27 +-27 +-26 +-24 +-22 +-18 +-15 +-11 +-7 +-3 +-1 +0 +0 +0 +-4 +-8 +-11 +-15 +-18 +-22 +-25 +-27 +-29 +-28 +-27 +-25 +-21 +-16 +-11 +-8 +-7 +-7 +-7 +-8 +-8 +-9 +-10 +-11 +-12 +-13 +-13 +-13 +-14 +-15 +-17 +-19 +-21 +-22 +-24 +-24 +-23 +-21 +-18 +-15 +-12 +-9 +-7 +-5 +-4 +-4 +-3 +-5 +-8 +-11 +-14 +-18 +-21 +-24 +-26 +-28 +-29 +-28 +-26 +-23 +-21 +-18 +-14 +-8 +-4 +0 +3 +3 +2 +-2 +-7 +-11 +-15 +-19 +-22 +-25 +-27 +-28 +-27 +-26 +-23 +-18 +-14 +-11 +-9 +-9 +-9 +-9 +-9 +-10 +-10 +-11 +-11 +-12 +-12 +-11 +-12 +-13 +-15 +-17 +-19 +-21 +-22 +-24 +-24 +-23 +-21 +-19 +-16 +-13 +-10 +-7 +-5 +-3 +-3 +-3 +-4 +-5 +-8 +-12 +-15 +-18 +-21 +-24 +-26 +-28 +-29 +-28 +-27 +-25 +-23 +-18 +-13 +-7 +-1 +2 +2 +0 +-3 +-7 +-10 +-14 +-16 +-19 +-21 +-22 +-22 +-22 +-20 +-18 +-18 +-18 +-18 +-18 +-18 +-17 +-16 +-14 +-11 +-9 +-7 +-6 +-4 +-5 +-8 +-10 +-13 +-16 +-18 +-20 +-22 +-23 +-23 +-23 +-22 +-20 +-18 +-15 +-12 +-9 +-6 +-4 +-3 +-4 +-6 +-10 +-13 +-16 +-18 +-21 +-23 +-24 +-25 +-25 +-24 +-21 +-19 +-15 +-11 +-7 +-4 +-3 +-3 +-5 +-8 +-11 +-14 +-17 +-19 +-20 +-21 +-21 +-20 +-18 +-16 +-14 +-14 +-15 +-16 +-17 +-17 +-17 +-16 +-16 +-14 +-12 +-12 +-11 +-9 +-8 +-8 +-7 +-8 +-11 +-13 +-16 +-18 +-21 +-23 +-25 +-26 +-26 +-25 +-23 +-20 +-17 +-14 +-10 +-6 +-4 +-2 +-1 +-1 +-2 +-4 +-9 +-12 +-16 +-18 +-21 +-24 +-26 +-28 +-28 +-27 +-24 +-21 +-16 +-11 +-8 +-6 +-6 +-7 +-7 +-8 +-10 +-11 +-12 +-13 +-14 +-14 +-14 +-13 +-14 +-16 +-17 +-19 +-21 +-22 +-23 +-24 +-22 +-20 +-17 +-15 +-11 +-8 +-6 +-4 +-4 +-4 +-4 +-5 +-8 +-11 +-15 +-18 +-21 +-24 +-26 +-28 +-29 +-28 +-27 +-24 +-22 +-18 +-14 +-8 +-3 +0 +2 +4 +4 +1 +-3 +-8 +-13 +-17 +-20 +-23 +-26 +-28 +-29 +-28 +-26 +-23 +-18 +-14 +-12 +-10 +-9 +-9 +-9 +-9 +-9 +-9 +-9 +-10 +-10 +-10 +-11 +-12 +-14 +-16 +-18 +-21 +-23 +-24 +-25 +-25 +-23 +-21 +-18 +-15 +-11 +-7 +-4 +-2 +-1 +-1 +-2 +-4 +-8 +-12 +-16 +-19 +-22 +-25 +-27 +-29 +-30 +-28 +-26 +-25 +-22 +-17 +-12 +-6 +0 +3 +3 +1 +-2 +-7 +-11 +-15 +-17 +-20 +-21 +-23 +-23 +-23 +-21 +-18 +-16 +-15 +-15 +-15 +-16 +-16 +-15 +-14 +-13 +-12 +-11 +-9 +-8 +-7 +-7 +-7 +-7 +-9 +-11 +-13 +-16 +-19 +-21 +-24 +-25 +-27 +-27 +-25 +-23 +-20 +-17 +-14 +-10 +-5 +-2 +0 +1 +1 +-1 +-5 +-9 +-14 +-18 +-21 +-24 +-27 +-29 +-29 +-28 +-27 +-24 +-22 +-17 +-11 +-4 +0 +0 +-1 +-4 +-6 +-10 +-12 +-15 +-17 +-18 +-20 +-20 +-19 +-18 +-16 +-16 +-16 +-17 +-18 +-19 +-19 +-18 +-19 +-17 +-14 +-11 +-9 +-7 +-6 +-5 +-5 +-6 +-7 +-8 +-10 +-12 +-15 +-18 +-21 +-23 +-26 +-28 +-29 +-29 +-27 +-25 +-23 +-20 +-15 +-9 +-4 +0 +2 +3 +4 +3 +-1 +-6 +-11 +-15 +-19 +-22 +-25 +-28 +-29 +-29 +-28 +-26 +-21 +-16 +-11 +-8 +-7 +-6 +-6 +-7 +-8 +-8 +-9 +-10 +-11 +-12 +-12 +-12 +-13 +-15 +-16 +-19 +-21 +-23 +-24 +-25 +-24 +-22 +-20 +-18 +-14 +-11 +-7 +-4 +-2 +-1 +-2 +-3 +-4 +-6 +-9 +-11 +-14 +-16 +-20 +-24 +-27 +-29 +-31 +-31 +-29 +-28 +-26 +-21 +-16 +-11 +-6 +-1 +3 +5 +4 +2 +-3 +-7 +-12 +-15 +-18 +-21 +-23 +-25 +-26 +-26 +-24 +-21 +-17 +-15 +-14 +-13 +-13 +-13 +-12 +-11 +-11 +-10 +-9 +-9 +-9 +-9 +-10 +-11 +-12 +-12 +-12 +-13 +-14 +-16 +-18 +-20 +-22 +-24 +-25 +-26 +-25 +-23 +-21 +-18 +-15 +-11 +-6 +-3 +-1 +0 +0 +-1 +-3 +-6 +-8 +-12 +-16 +-20 +-23 +-26 +-28 +-29 +-29 +-27 +-25 +-22 +-17 +-10 +-6 +-4 +-5 +-5 +-7 +-8 +-9 +-10 +-11 +-12 +-13 +-14 +-15 +-15 +-14 +-14 +-15 +-16 +-19 +-21 +-22 +-23 +-24 +-23 +-22 +-19 +-17 +-14 +-10 +-7 +-5 +-3 +-3 +-3 +-4 +-5 +-6 +-9 +-11 +-15 +-18 +-21 +-24 +-27 +-29 +-30 +-30 +-29 +-27 +-24 +-19 +-14 +-8 +-2 +2 +4 +3 +1 +-3 +-7 +-11 +-15 +-17 +-19 +-21 +-23 +-23 +-23 +-21 +-20 +-18 +-18 +-18 +-18 +-18 +-17 +-15 +-12 +-9 +-7 +-6 +-4 +-3 +-3 +-6 +-9 +-12 +-16 +-18 +-21 +-24 +-25 +-27 +-26 +-24 +-22 +-19 +-16 +-12 +-8 +-4 +-2 +-1 +-1 +-2 +-3 +-5 +-8 +-12 +-15 +-19 +-22 +-25 +-28 +-30 +-31 +-30 +-28 +-27 +-23 +-18 +-13 +-8 +-1 +2 +4 +2 +-1 +-5 +-9 +-12 +-16 +-18 +-20 +-22 +-23 +-23 +-22 +-20 +-17 +-15 +-14 +-14 +-14 +-15 +-15 +-16 +-16 +-15 +-14 +-13 +-12 +-11 +-10 +-9 +-9 +-9 +-9 +-9 +-10 +-11 +-13 +-15 +-18 +-20 +-22 +-24 +-25 +-26 +-25 +-23 +-20 +-17 +-14 +-11 +-6 +-3 +0 +2 +2 +-2 +-6 +-10 +-13 +-16 +-20 +-22 +-24 +-25 +-26 +-25 +-23 +-19 +-16 +-14 +-12 +-12 +-12 +-12 +-11 +-11 +-10 +-10 +-9 +-9 +-9 +-9 +-9 +-9 +-11 +-13 +-15 +-17 +-20 +-22 +-24 +-25 +-26 +-24 +-23 +-20 +-17 +-15 +-11 +-6 +-3 +-1 +0 +0 +-2 +-3 +-6 +-9 +-13 +-16 +-20 +-23 +-26 +-29 +-31 +-31 +-30 +-28 +-27 +-22 +-17 +-12 +-7 +-1 +3 +4 +3 +0 +-3 +-8 +-11 +-15 +-17 +-20 +-22 +-23 +-24 +-24 +-21 +-19 +-18 +-17 +-17 +-17 +-16 +-15 +-13 +-11 +-10 +-9 +-8 +-7 +-7 +-7 +-8 +-9 +-10 +-11 +-12 +-14 +-16 +-18 +-20 +-22 +-24 +-26 +-28 +-27 +-26 +-24 +-21 +-18 +-14 +-9 +-4 +0 +2 +2 +2 +0 +-2 +-6 +-10 +-15 +-18 +-22 +-26 +-28 +-30 +-30 +-28 +-26 +-25 +-20 +-14 +-7 +-2 +0 +0 +-2 +-5 +-7 +-10 +-13 +-15 +-16 +-18 +-19 +-19 +-18 +-17 +-16 +-17 +-19 +-20 +-21 +-21 +-21 +-20 +-18 +-16 +-13 +-10 +-8 +-6 +-5 +-5 +-5 +-5 +-6 +-8 +-10 +-12 +-13 +-14 +-16 +-17 +-20 +-22 +-25 +-27 +-28 +-28 +-27 +-25 +-23 +-21 +-16 +-10 +-4 +1 +3 +3 +1 +-3 +-7 +-11 +-15 +-18 +-20 +-23 +-24 +-25 +-25 +-24 +-21 +-18 +-14 +-11 +-9 +-8 +-9 +-10 +-12 +-13 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-13 +-13 +-12 +-11 +-10 +-11 +-12 +-14 +-16 +-18 +-20 +-21 +-22 +-22 +-22 +-20 +-18 +-15 +-12 +-9 +-6 +-4 +-2 +-2 +-4 +-7 +-10 +-12 +-15 +-18 +-20 +-22 +-23 +-24 +-23 +-21 +-18 +-15 +-13 +-12 +-11 +-12 +-12 +-12 +-12 +-12 +-12 +-11 +-11 +-11 +-10 +-10 +-10 +-9 +-10 +-12 +-14 +-16 +-18 +-20 +-22 +-23 +-24 +-24 +-23 +-20 +-18 +-15 +-12 +-8 +-5 +-3 +-2 +-2 +-2 +-4 +-7 +-10 +-14 +-19 +-21 +-24 +-27 +-28 +-29 +-27 +-25 +-23 +-21 +-16 +-12 +-6 +-1 +2 +3 +1 +-2 +-7 +-11 +-14 +-17 +-20 +-22 +-24 +-25 +-24 +-23 +-19 +-17 +-15 +-14 +-14 +-14 +-14 +-13 +-12 +-11 +-10 +-9 +-9 +-8 +-8 +-9 +-8 +-9 +-11 +-12 +-14 +-16 +-18 +-20 +-23 +-25 +-26 +-26 +-25 +-23 +-20 +-17 +-13 +-9 +-5 +-2 +0 +0 +0 +-1 +-4 +-8 +-12 +-16 +-20 +-23 +-25 +-28 +-29 +-29 +-27 +-25 +-21 +-16 +-10 +-7 +-5 +-5 +-5 +-7 +-8 +-9 +-10 +-11 +-13 +-13 +-14 +-14 +-14 +-14 +-16 +-18 +-20 +-21 +-22 +-23 +-22 +-21 +-19 +-16 +-14 +-10 +-7 +-5 +-4 +-3 +-3 +-4 +-6 +-8 +-11 +-15 +-18 +-21 +-24 +-27 +-29 +-30 +-29 +-27 +-25 +-24 +-18 +-14 +-9 +-4 +0 +3 +4 +4 +1 +-3 +-6 +-11 +-15 +-19 +-22 +-25 +-27 +-29 +-29 +-27 +-24 +-19 +-14 +-11 +-9 +-8 +-8 +-7 +-7 +-8 +-8 +-9 +-10 +-10 +-11 +-11 +-12 +-14 +-16 +-18 +-20 +-22 +-24 +-24 +-24 +-23 +-21 +-18 +-15 +-11 +-8 +-5 +-2 +-1 +0 +-1 +-3 +-8 +-12 +-16 +-19 +-22 +-25 +-27 +-30 +-29 +-28 +-25 +-24 +-20 +-15 +-9 +-3 +1 +3 +2 +-1 +-4 +-8 +-12 +-15 +-18 +-20 +-22 +-23 +-23 +-22 +-20 +-18 +-17 +-16 +-17 +-17 +-16 +-15 +-14 +-12 +-11 +-9 +-8 +-6 +-5 +-5 +-7 +-10 +-13 +-17 +-18 +-21 +-23 +-24 +-24 +-24 +-22 +-20 +-17 +-14 +-10 +-7 +-5 +-3 +-2 +-3 +-3 +-5 +-7 +-9 +-13 +-16 +-19 +-22 +-25 +-28 +-30 +-30 +-28 +-26 +-25 +-21 +-15 +-9 +-2 +1 +2 +1 +-2 +-5 +-9 +-12 +-14 +-16 +-19 +-20 +-21 +-20 +-18 +-17 +-17 +-17 +-18 +-18 +-18 +-18 +-17 +-15 +-12 +-10 +-8 +-6 +-4 +-4 +-6 +-9 +-11 +-14 +-17 +-19 +-21 +-23 +-24 +-24 +-23 +-21 +-19 +-16 +-13 +-9 +-6 +-4 +-3 +-2 +-3 +-4 +-7 +-11 +-14 +-18 +-21 +-23 +-25 +-27 +-28 +-27 +-24 +-22 +-17 +-12 +-8 +-6 +-5 +-6 +-7 +-9 +-10 +-11 +-12 +-13 +-14 +-14 +-14 +-13 +-13 +-14 +-16 +-17 +-19 +-20 +-21 +-21 +-21 +-19 +-17 +-15 +-12 +-11 +-9 +-7 +-6 +-5 +-5 +-6 +-8 +-11 +-14 +-17 +-20 +-22 +-24 +-26 +-27 +-26 +-25 +-22 +-19 +-16 +-13 +-8 +-4 +-1 +1 +2 +0 +-3 +-8 +-12 +-15 +-17 +-20 +-23 +-25 +-26 +-26 +-24 +-21 +-17 +-14 +-12 +-11 +-11 +-11 +-10 +-10 +-11 +-10 +-9 +-9 +-9 +-8 +-8 +-10 +-12 +-14 +-17 +-19 +-21 +-23 +-24 +-25 +-25 +-23 +-20 +-17 +-14 +-10 +-7 +-4 +-2 +-1 +-2 +-4 +-8 +-12 +-15 +-18 +-21 +-24 +-25 +-27 +-27 +-25 +-24 +-21 +-19 +-15 +-11 +-5 +0 +1 +1 +0 +-2 +-6 +-10 +-14 +-17 +-20 +-22 +-23 +-24 +-24 +-21 +-18 +-16 +-16 +-15 +-15 +-15 +-14 +-13 +-12 +-11 +-9 +-8 +-7 +-6 +-6 +-7 +-10 +-12 +-15 +-18 +-20 +-22 +-24 +-25 +-25 +-23 +-21 +-19 +-16 +-14 +-9 +-6 +-3 +-1 +0 +0 +-2 +-6 +-10 +-14 +-17 +-20 +-23 +-26 +-28 +-29 +-29 +-27 +-25 +-23 +-18 +-12 +-6 +-1 +2 +2 +0 +-3 +-7 +-10 +-13 +-16 +-18 +-20 +-21 +-21 +-20 +-19 +-18 +-18 +-18 +-19 +-19 +-18 +-18 +-17 +-14 +-11 +-8 +-6 +-4 +-3 +-3 +-6 +-9 +-12 +-15 +-17 +-20 +-22 +-24 +-25 +-25 +-24 +-22 +-19 +-16 +-13 +-9 +-6 +-3 +-2 +-2 +-2 +-3 +-5 +-8 +-12 +-16 +-19 +-22 +-25 +-27 +-29 +-29 +-28 +-26 +-25 +-21 +-14 +-7 +-3 +-1 +-2 +-3 +-5 +-7 +-9 +-11 +-13 +-14 +-15 +-16 +-15 +-15 +-16 +-18 +-19 +-21 +-22 +-22 +-22 +-21 +-19 +-16 +-13 +-10 +-7 +-5 +-3 +-3 +-3 +-3 +-5 +-7 +-11 +-14 +-18 +-20 +-24 +-26 +-28 +-30 +-30 +-28 +-25 +-23 +-18 +-13 +-8 +-3 +0 +2 +3 +3 +1 +-3 +-8 +-12 +-16 +-20 +-23 +-26 +-28 +-29 +-28 +-26 +-23 +-18 +-14 +-12 +-10 +-9 +-8 +-8 +-8 +-8 +-8 +-8 +-9 +-9 +-9 +-11 +-13 +-15 +-18 +-20 +-23 +-24 +-25 +-25 +-24 +-21 +-20 +-17 +-13 +-9 +-5 +-3 +-1 +0 +-2 +-6 +-10 +-13 +-16 +-19 +-22 +-24 +-26 +-27 +-26 +-24 +-22 +-19 +-16 +-12 +-7 +-3 +0 +1 +0 +-3 +-7 +-11 +-13 +-16 +-19 +-22 +-23 +-25 +-25 +-24 +-20 +-16 +-14 +-12 +-12 +-12 +-12 +-12 +-12 +-11 +-11 +-11 +-10 +-10 +-9 +-9 +-9 +-11 +-14 +-16 +-18 +-20 +-22 +-23 +-25 +-25 +-23 +-20 +-18 +-15 +-11 +-8 +-5 +-3 +-2 +-3 +-4 +-5 +-7 +-9 +-11 +-14 +-17 +-20 +-23 +-25 +-27 +-29 +-30 +-28 +-27 +-25 +-22 +-16 +-11 +-5 +1 +5 +5 +3 +0 +-5 +-9 +-13 +-16 +-18 +-21 +-22 +-23 +-23 +-21 +-19 +-17 +-17 +-17 +-17 +-17 +-16 +-15 +-14 +-12 +-10 +-9 +-7 +-6 +-7 +-7 +-8 +-8 +-9 +-11 +-13 +-16 +-18 +-21 +-23 +-25 +-27 +-27 +-26 +-24 +-22 +-19 +-16 +-11 +-5 +-2 +1 +1 +1 +0 +-2 +-5 +-9 +-14 +-18 +-21 +-24 +-27 +-29 +-30 +-29 +-28 +-26 +-22 +-16 +-9 +-5 +-3 +-3 +-4 +-5 +-7 +-8 +-10 +-12 +-13 +-14 +-15 +-15 +-15 +-15 +-16 +-17 +-19 +-20 +-21 +-22 +-23 +-22 +-20 +-18 +-16 +-13 +-9 +-7 +-5 +-3 +-3 +-4 +-5 +-6 +-8 +-10 +-12 +-15 +-18 +-21 +-24 +-27 +-29 +-30 +-30 +-28 +-26 +-24 +-19 +-14 +-9 +-4 +1 +4 +5 +4 +2 +-3 +-8 +-12 +-16 +-19 +-22 +-24 +-26 +-27 +-25 +-23 +-19 +-17 +-15 +-14 +-14 +-13 +-12 +-11 +-10 +-9 +-8 +-8 +-7 +-8 +-8 +-9 +-10 +-11 +-12 +-13 +-15 +-17 +-20 +-22 +-24 +-26 +-27 +-27 +-25 +-23 +-20 +-17 +-12 +-6 +-2 +1 +2 +2 +0 +-1 +-4 +-7 +-11 +-15 +-19 +-22 +-25 +-28 +-31 +-31 +-30 +-29 +-28 +-23 +-17 +-11 +-4 +-1 +0 +0 +-2 +-5 +-7 +-10 +-12 +-14 +-16 +-17 +-18 +-18 +-17 +-17 +-17 +-19 +-19 +-20 +-20 +-20 +-19 +-18 +-15 +-13 +-10 +-8 +-7 +-6 +-6 +-5 +-6 +-7 +-9 +-10 +-11 +-13 +-15 +-17 +-20 +-22 +-25 +-27 +-29 +-29 +-28 +-25 +-24 +-21 +-16 +-11 +-5 +0 +3 +4 +3 +0 +-4 +-9 +-12 +-15 +-18 +-21 +-23 +-25 +-25 +-24 +-22 +-18 +-16 +-14 +-14 +-13 +-13 +-13 +-12 +-11 +-10 +-10 +-9 +-8 +-8 +-7 +-8 +-10 +-12 +-15 +-18 +-20 +-22 +-24 +-27 +-27 +-25 +-22 +-20 +-17 +-14 +-9 +-6 +-3 +-2 +-1 +-2 +-4 +-5 +-7 +-9 +-12 +-16 +-19 +-22 +-25 +-28 +-30 +-31 +-30 +-28 +-27 +-23 +-17 +-12 +-7 +-2 +2 +3 +2 +0 +-4 +-8 +-12 +-15 +-18 +-20 +-22 +-23 +-24 +-23 +-20 +-18 +-16 +-16 +-16 +-16 +-16 +-14 +-14 +-13 +-11 +-10 +-8 +-7 +-7 +-7 +-7 +-7 +-8 +-9 +-11 +-12 +-14 +-17 +-19 +-22 +-24 +-26 +-28 +-28 +-26 +-24 +-21 +-18 +-15 +-10 +-4 +-1 +2 +2 +2 +1 +-2 +-6 +-10 +-14 +-18 +-21 +-25 +-26 +-28 +-30 +-29 +-27 +-27 +-22 +-15 +-8 +-4 +-3 +-3 +-4 +-5 +-6 +-8 +-10 +-12 +-13 +-14 +-15 +-15 +-15 +-15 +-16 +-17 +-19 +-21 +-22 +-23 +-23 +-22 +-21 +-19 +-16 +-12 +-9 +-6 +-4 +-3 +-2 +-3 +-5 +-6 +-8 +-10 +-12 +-16 +-20 +-22 +-25 +-28 +-29 +-30 +-29 +-27 +-25 +-22 +-17 +-12 +-6 +-1 +3 +5 +5 +2 +-2 +-7 +-11 +-15 +-18 +-21 +-23 +-25 +-26 +-25 +-24 +-20 +-17 +-16 +-14 +-14 +-14 +-13 +-12 +-11 +-10 +-9 +-9 +-8 +-9 +-9 +-9 +-10 +-11 +-11 +-11 +-12 +-13 +-15 +-18 +-20 +-22 +-24 +-25 +-26 +-25 +-23 +-21 +-18 +-15 +-11 +-6 +-3 +0 +0 +0 +-1 +-2 +-5 +-9 +-13 +-17 +-20 +-23 +-26 +-28 +-30 +-30 +-29 +-27 +-25 +-20 +-13 +-6 +-3 +-2 +-2 +-3 +-5 +-7 +-9 +-11 +-13 +-15 +-16 +-16 +-16 +-16 +-16 +-17 +-18 +-20 +-21 +-22 +-22 +-22 +-20 +-18 +-16 +-14 +-11 +-7 +-5 +-3 +-3 +-3 +-4 +-6 +-7 +-9 +-11 +-13 +-16 +-19 +-22 +-25 +-28 +-30 +-30 +-30 +-28 +-27 +-22 +-16 +-12 +-7 +-1 +3 +5 +5 +2 +-1 +-6 +-10 +-14 +-17 +-20 +-23 +-25 +-26 +-26 +-24 +-22 +-18 +-15 +-13 +-12 +-12 +-12 +-12 +-11 +-11 +-10 +-10 +-9 +-9 +-10 +-10 +-11 +-11 +-11 +-12 +-13 +-14 +-16 +-18 +-20 +-22 +-24 +-25 +-25 +-23 +-21 +-18 +-15 +-12 +-8 +-5 +-2 +0 +0 +-1 +-4 +-8 +-12 +-16 +-19 +-21 +-24 +-26 +-27 +-27 +-25 +-23 +-19 +-14 +-11 +-10 +-9 +-9 +-9 +-9 +-10 +-11 +-11 +-12 +-11 +-12 +-13 +-12 +-12 +-11 +-12 +-14 +-16 +-17 +-19 +-21 +-22 +-23 +-23 +-22 +-20 +-17 +-14 +-11 +-8 +-7 +-6 +-5 +-4 +-4 +-5 +-8 +-12 +-15 +-18 +-21 +-24 +-26 +-27 +-28 +-27 +-25 +-22 +-20 +-17 +-13 +-7 +-2 +1 +2 +1 +-2 +-6 +-10 +-14 +-17 +-19 +-20 +-22 +-24 +-24 +-23 +-21 +-17 +-15 +-14 +-13 +-13 +-13 +-13 +-12 +-12 +-11 +-10 +-9 +-9 +-9 +-8 +-9 +-9 +-10 +-11 +-14 +-16 +-19 +-21 +-23 +-25 +-26 +-27 +-26 +-23 +-20 +-17 +-14 +-10 +-7 +-3 +0 +0 +0 +-1 +-3 +-7 +-11 +-15 +-19 +-22 +-25 +-28 +-31 +-31 +-31 +-29 +-27 +-21 +-16 +-11 +-5 +0 +3 +6 +4 +0 +-4 +-8 +-12 +-15 +-17 +-20 +-22 +-23 +-24 +-23 +-21 +-19 +-17 +-17 +-17 +-17 +-17 +-16 +-15 +-13 +-11 +-10 +-8 +-7 +-6 +-6 +-7 +-8 +-9 +-10 +-11 +-12 +-14 +-16 +-18 +-20 +-23 +-25 +-27 +-28 +-27 +-25 +-23 +-20 +-18 +-14 +-8 +-3 +0 +2 +2 +2 +0 +-3 +-7 +-11 +-16 +-19 +-23 +-26 +-28 +-30 +-30 +-29 +-27 +-25 +-21 +-14 +-7 +-3 +-2 +-2 +-4 +-5 +-8 +-10 +-12 +-14 +-15 +-16 +-17 +-16 +-16 +-15 +-16 +-18 +-19 +-21 +-21 +-22 +-21 +-20 +-18 +-17 +-14 +-10 +-8 +-5 +-4 +-4 +-4 +-5 +-6 +-8 +-10 +-11 +-13 +-15 +-18 +-21 +-23 +-26 +-28 +-30 +-30 +-28 +-26 +-25 +-20 +-15 +-10 +-4 +1 +4 +5 +4 +0 +-4 +-9 +-13 +-16 +-19 +-22 +-24 +-25 +-26 +-25 +-22 +-18 +-16 +-15 +-14 +-14 +-13 +-13 +-12 +-11 +-10 +-9 +-9 +-9 +-9 +-9 +-10 +-11 +-12 +-12 +-13 +-14 +-14 +-15 +-16 +-18 +-20 +-22 +-23 +-25 +-26 +-25 +-24 +-21 +-18 +-15 +-11 +-6 +-3 +-1 +0 +0 +0 +-2 +-6 +-10 +-14 +-17 +-21 +-24 +-26 +-28 +-30 +-29 +-27 +-25 +-23 +-17 +-10 +-5 +-2 +-2 +-3 +-5 +-7 +-9 +-11 +-13 +-15 +-16 +-16 +-16 +-16 +-16 +-17 +-18 +-20 +-21 +-22 +-23 +-22 +-20 +-18 +-15 +-13 +-10 +-7 +-5 +-3 +-3 +-3 +-4 +-6 +-8 +-10 +-12 +-16 +-19 +-22 +-25 +-27 +-29 +-31 +-30 +-28 +-27 +-24 +-18 +-14 +-9 +-3 +2 +4 +4 +2 +-2 +-5 +-9 +-13 +-16 +-19 +-22 +-24 +-25 +-25 +-23 +-20 +-18 +-16 +-16 +-16 +-15 +-14 +-14 +-12 +-11 +-10 +-8 +-7 +-7 +-7 +-8 +-9 +-9 +-10 +-11 +-13 +-15 +-18 +-20 +-23 +-26 +-27 +-28 +-27 +-25 +-22 +-20 +-16 +-12 +-6 +-2 +1 +2 +2 +1 +-1 +-4 +-9 +-13 +-17 +-20 +-24 +-26 +-29 +-31 +-30 +-29 +-27 +-24 +-18 +-12 +-7 +-5 +-4 +-4 +-4 +-6 +-8 +-9 +-10 +-12 +-13 +-13 +-14 +-14 +-16 +-18 +-19 +-21 +-22 +-23 +-24 +-23 +-21 +-19 +-16 +-13 +-9 +-7 +-4 +-3 +-2 +-3 +-4 +-5 +-7 +-10 +-13 +-16 +-20 +-23 +-25 +-28 +-30 +-30 +-29 +-27 +-25 +-22 +-17 +-12 +-7 +-2 +2 +4 +4 +1 +-3 +-7 +-12 +-16 +-19 +-22 +-24 +-25 +-26 +-26 +-24 +-20 +-17 +-15 +-14 +-13 +-13 +-13 +-12 +-11 +-11 +-10 +-9 +-8 +-8 +-7 +-8 +-10 +-12 +-15 +-18 +-20 +-22 +-24 +-25 +-25 +-24 +-22 +-21 +-18 +-14 +-10 +-7 +-4 +-3 +-2 +-2 +-3 +-6 +-9 +-12 +-16 +-19 +-22 +-25 +-27 +-29 +-29 +-28 +-26 +-24 +-20 +-15 +-10 +-3 +1 +3 +1 +-1 +-5 +-7 +-11 +-14 +-17 +-19 +-21 +-22 +-22 +-21 +-19 +-17 +-17 +-17 +-17 +-17 +-17 +-16 +-15 +-13 +-10 +-9 +-8 +-7 +-6 +-6 +-6 +-7 +-8 +-10 +-13 +-16 +-19 +-21 +-24 +-26 +-28 +-28 +-27 +-25 +-22 +-20 +-16 +-11 +-5 +-1 +1 +2 +1 +0 +-2 +-5 +-9 +-13 +-17 +-21 +-24 +-27 +-29 +-31 +-30 +-29 +-27 +-24 +-18 +-11 +-7 +-5 +-4 +-3 +-4 +-5 +-7 +-8 +-10 +-12 +-13 +-14 +-14 +-15 +-16 +-18 +-20 +-22 +-24 +-24 +-25 +-24 +-21 +-19 +-16 +-12 +-8 +-5 +-3 +-2 +-2 +-3 +-4 +-5 +-8 +-11 +-14 +-17 +-21 +-24 +-27 +-29 +-31 +-32 +-30 +-29 +-26 +-20 +-15 +-10 +-5 +0 +4 +6 +4 +1 +-4 +-8 +-12 +-16 +-18 +-21 +-23 +-25 +-25 +-25 +-22 +-20 +-18 +-18 +-17 +-17 +-16 +-15 +-13 +-11 +-9 +-7 +-6 +-5 +-4 +-5 +-8 +-11 +-14 +-17 +-20 +-22 +-24 +-26 +-26 +-25 +-23 +-20 +-18 +-16 +-12 +-8 +-4 +-2 +-1 +-1 +-3 +-7 +-10 +-14 +-18 +-21 +-24 +-26 +-28 +-29 +-28 +-26 +-24 +-22 +-18 +-13 +-7 +-1 +2 +3 +1 +-2 +-7 +-10 +-14 +-16 +-18 +-21 +-22 +-24 +-24 +-22 +-19 +-17 +-15 +-15 +-15 +-14 +-14 +-13 +-12 +-11 +-10 +-9 +-8 +-7 +-7 +-7 +-9 +-12 +-15 +-18 +-20 +-22 +-24 +-25 +-26 +-26 +-24 +-21 +-18 +-14 +-10 +-7 +-4 +-2 +-1 +-1 +-3 +-4 +-6 +-9 +-13 +-16 +-20 +-24 +-26 +-28 +-30 +-30 +-29 +-27 +-25 +-20 +-15 +-8 +-2 +1 +1 +0 +-2 +-6 +-9 +-12 +-14 +-16 +-18 +-19 +-19 +-18 +-17 +-17 +-17 +-18 +-19 +-19 +-20 +-19 +-18 +-16 +-14 +-11 +-9 +-8 +-6 +-6 +-6 +-7 +-7 +-8 +-9 +-11 +-14 +-17 +-20 +-23 +-25 +-27 +-28 +-28 +-26 +-24 +-22 +-19 +-15 +-10 +-4 +0 +2 +3 +2 +0 +-4 +-9 +-13 +-17 +-20 +-23 +-26 +-28 +-29 +-28 +-26 +-23 +-18 +-14 +-11 +-10 +-9 +-9 +-9 +-8 +-9 +-9 +-9 +-10 +-10 +-10 +-10 +-11 +-13 +-16 +-18 +-20 +-22 +-24 +-25 +-25 +-24 +-22 +-19 +-17 +-13 +-9 +-6 +-5 +-3 +-2 +-3 +-3 +-5 +-8 +-11 +-14 +-18 +-21 +-24 +-27 +-29 +-31 +-31 +-30 +-28 +-26 +-20 +-16 +-11 +-5 +0 +4 +4 +2 +-1 +-5 +-9 +-13 +-16 +-17 +-19 +-21 +-23 +-23 +-22 +-20 +-19 +-18 +-18 +-18 +-18 +-18 +-16 +-14 +-12 +-9 +-8 +-6 +-5 +-4 +-4 +-5 +-7 +-10 +-14 +-16 +-20 +-23 +-25 +-27 +-29 +-29 +-28 +-26 +-23 +-20 +-15 +-9 +-4 +0 +1 +2 +1 +0 +-3 +-7 +-11 +-15 +-19 +-23 +-26 +-28 +-31 +-31 +-30 +-28 +-27 +-23 +-17 +-12 +-4 +0 +2 +2 +0 +-4 +-7 +-10 +-13 +-15 +-17 +-19 +-20 +-20 +-19 +-19 +-18 +-19 +-20 +-20 +-20 +-20 +-19 +-16 +-14 +-11 +-9 +-7 +-6 +-5 +-5 +-5 +-6 +-7 +-9 +-10 +-13 +-16 +-18 +-21 +-24 +-26 +-28 +-29 +-28 +-26 +-24 +-22 +-18 +-13 +-8 +-2 +1 +3 +2 +0 +-4 +-9 +-13 +-16 +-20 +-23 +-24 +-25 +-26 +-24 +-21 +-18 +-16 +-14 +-14 +-14 +-14 +-13 +-12 +-12 +-11 +-10 +-10 +-9 +-9 +-8 +-8 +-10 +-13 +-15 +-18 +-20 +-22 +-23 +-25 +-25 +-24 +-22 +-19 +-16 +-13 +-9 +-6 +-5 +-4 +-3 +-3 +-4 +-5 +-8 +-11 +-14 +-18 +-21 +-24 +-27 +-29 +-31 +-30 +-29 +-27 +-25 +-20 +-15 +-10 +-5 +0 +4 +4 +3 +-1 +-5 +-10 +-14 +-16 +-18 +-20 +-23 +-24 +-25 +-24 +-21 +-18 +-17 +-16 +-16 +-16 +-15 +-14 +-12 +-11 +-9 +-8 +-7 +-7 +-7 +-8 +-8 +-9 +-10 +-12 +-14 +-17 +-20 +-22 +-25 +-27 +-29 +-29 +-27 +-24 +-22 +-19 +-15 +-9 +-4 +-1 +1 +1 +1 +-1 +-3 +-7 +-11 +-15 +-19 +-22 +-25 +-28 +-30 +-31 +-30 +-28 +-27 +-23 +-17 +-10 +-4 +-2 +0 +-1 +-4 +-6 +-8 +-10 +-13 +-15 +-16 +-16 +-16 +-16 +-15 +-16 +-17 +-18 +-20 +-21 +-21 +-21 +-21 +-19 +-17 +-14 +-12 +-9 +-7 +-5 +-5 +-5 +-5 +-6 +-7 +-9 +-11 +-14 +-17 +-20 +-23 +-25 +-28 +-29 +-29 +-28 +-26 +-24 +-21 +-16 +-11 +-5 +-2 +1 +4 +3 +1 +-3 +-8 +-12 +-16 +-19 +-22 +-24 +-26 +-28 +-28 +-26 +-23 +-18 +-15 +-13 +-12 +-12 +-11 +-11 +-10 +-10 +-10 +-9 +-9 +-9 +-10 +-9 +-10 +-11 +-14 +-16 +-18 +-21 +-23 +-25 +-26 +-26 +-25 +-23 +-21 +-18 +-15 +-10 +-6 +-2 +-1 +0 +-1 +-3 +-5 +-7 +-10 +-13 +-17 +-20 +-23 +-26 +-29 +-31 +-32 +-31 +-29 +-28 +-23 +-17 +-13 +-8 +-1 +3 +4 +3 +0 +-4 +-6 +-10 +-14 +-16 +-19 +-21 +-23 +-23 +-23 +-20 +-20 +-18 +-18 +-18 +-18 +-18 +-16 +-15 +-12 +-10 +-8 +-7 +-6 +-6 +-6 +-7 +-8 +-9 +-10 +-12 +-14 +-16 +-19 +-21 +-24 +-26 +-29 +-29 +-29 +-27 +-24 +-22 +-18 +-13 +-8 +-3 +0 +2 +2 +2 +1 +-2 +-6 +-11 +-15 +-19 +-22 +-25 +-28 +-30 +-31 +-30 +-28 +-27 +-24 +-17 +-10 +-6 +-4 +-3 +-4 +-5 +-6 +-7 +-9 +-11 +-12 +-14 +-15 +-15 +-15 +-16 +-18 +-19 +-21 +-23 +-24 +-25 +-24 +-23 +-20 +-17 +-14 +-11 +-7 +-4 +-2 +-1 +-1 +-2 +-4 +-7 +-11 +-15 +-18 +-21 +-24 +-27 +-29 +-31 +-30 +-28 +-27 +-24 +-19 +-13 +-7 +-1 +2 +3 +2 +-1 +-5 +-9 +-13 +-16 +-18 +-21 +-23 +-24 +-24 +-23 +-21 +-18 +-17 +-16 +-16 +-16 +-16 +-16 +-14 +-13 +-11 +-10 +-9 +-8 +-7 +-7 +-8 +-9 +-10 +-11 +-12 +-13 +-15 +-18 +-20 +-22 +-24 +-26 +-29 +-29 +-27 +-25 +-22 +-19 +-16 +-11 +-5 +-2 +1 +1 +1 +0 +-2 +-5 +-9 +-13 +-17 +-21 +-24 +-27 +-29 +-31 +-31 +-29 +-28 +-26 +-20 +-13 +-7 +-4 +-2 +-2 +-3 +-5 +-7 +-9 +-11 +-12 +-14 +-16 +-16 +-15 +-15 +-16 +-17 +-19 +-20 +-22 +-23 +-23 +-22 +-20 +-18 +-15 +-12 +-9 +-7 +-5 +-4 +-4 +-4 +-5 +-6 +-8 +-10 +-13 +-16 +-20 +-23 +-25 +-28 +-30 +-31 +-30 +-28 +-26 +-23 +-18 +-13 +-8 +-3 +0 +3 +4 +2 +-1 +-5 +-10 +-14 +-17 +-20 +-23 +-25 +-27 +-27 +-26 +-24 +-21 +-17 +-15 +-14 +-13 +-12 +-12 +-11 +-11 +-10 +-10 +-9 +-9 +-10 +-10 +-11 +-12 +-12 +-12 +-13 +-14 +-16 +-18 +-20 +-22 +-24 +-26 +-27 +-25 +-26 +-23 +-20 +-16 +-12 +-7 +-3 +0 +0 +0 +-1 +-3 +-6 +-9 +-13 +-17 +-20 +-24 +-26 +-29 +-31 +-31 +-30 +-28 +-26 +-21 +-16 +-11 +-4 +0 +2 +1 +0 +-4 +-7 +-11 +-14 +-16 +-18 +-20 +-21 +-21 +-20 +-19 +-18 +-18 +-18 +-18 +-19 +-18 +-18 +-16 +-15 +-13 +-11 +-9 +-8 +-7 +-6 +-7 +-7 +-8 +-9 +-11 +-12 +-13 +-14 +-16 +-19 +-21 +-24 +-26 +-28 +-29 +-28 +-26 +-24 +-22 +-18 +-14 +-8 +-3 +1 +3 +4 +1 +-2 +-6 +-12 +-16 +-19 +-22 +-24 +-26 +-27 +-27 +-26 +-23 +-19 +-15 +-13 +-11 +-11 +-11 +-11 +-11 +-11 +-11 +-11 +-10 +-11 +-11 +-11 +-12 +-12 +-13 +-13 +-13 +-15 +-16 +-19 +-21 +-23 +-24 +-26 +-26 +-25 +-23 +-22 +-19 +-15 +-11 +-7 +-4 +-2 +-1 +-1 +-2 +-4 +-6 +-9 +-12 +-16 +-19 +-22 +-26 +-28 +-31 +-31 +-31 +-29 +-28 +-24 +-18 +-11 +-5 +-2 +-1 +-1 +-3 +-4 +-6 +-9 +-11 +-13 +-15 +-16 +-16 +-16 +-16 +-17 +-18 +-19 +-21 +-22 +-22 +-23 +-22 +-20 +-18 +-15 +-12 +-8 +-6 +-4 +-3 +-3 +-3 +-5 +-7 +-11 +-14 +-17 +-20 +-23 +-26 +-28 +-29 +-29 +-28 +-25 +-23 +-21 +-16 +-11 +-6 +-1 +1 +3 +2 +0 +-5 +-9 +-14 +-17 +-21 +-24 +-26 +-28 +-29 +-28 +-26 +-23 +-20 +-16 +-10 +-6 +-5 +-5 +-6 +-8 +-10 +-12 +-13 +-15 +-16 +-17 +-17 +-16 +-16 +-15 +-15 +-16 +-18 +-19 +-21 +-21 +-22 +-21 +-20 +-18 +-15 +-12 +-9 +-7 +-5 +-4 +-4 +-4 +-6 +-7 +-9 +-11 +-12 +-14 +-16 +-19 +-22 +-25 +-27 +-29 +-30 +-29 +-27 +-25 +-23 +-18 +-13 +-7 +-1 +2 +3 +1 +-2 +-6 +-10 +-14 +-17 +-20 +-22 +-23 +-24 +-24 +-23 +-20 +-18 +-16 +-16 +-16 +-16 +-16 +-15 +-14 +-13 +-11 +-10 +-10 +-9 +-9 +-9 +-9 +-10 +-11 +-12 +-12 +-14 +-15 +-17 +-19 +-21 +-23 +-25 +-26 +-26 +-25 +-23 +-20 +-17 +-14 +-10 +-6 +-3 +-1 +-1 +0 +-1 +-4 +-8 +-12 +-16 +-19 +-22 +-25 +-27 +-29 +-29 +-28 +-26 +-23 +-19 +-13 +-9 +-7 +-6 +-7 +-8 +-9 +-10 +-11 +-12 +-12 +-13 +-14 +-14 +-13 +-13 +-14 +-16 +-18 +-20 +-21 +-23 +-24 +-24 +-23 +-21 +-18 +-16 +-13 +-9 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-93 +-69 +-52 +-40 +-32 +-27 +-23 +-21 +-20 +-19 +-19 +-19 +-19 +-19 +-19 +-19 +-19 +-19 +-18 +-17 +-17 +-16 +-16 +-15 +-15 +-15 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-16 +-15 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-14 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-14 +-14 +-14 +-14 +-14 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +105 +127 +127 +127 +127 +127 +111 +75 +49 +29 +15 +4 +-4 +-10 +-14 +-16 +-18 +-18 +-18 +-17 +-16 +-14 +-12 +-10 +-8 +-8 +-10 +-12 +-15 +-17 +-19 +-21 +-22 +-23 +-23 +-22 +-20 +-17 +-15 +-12 +-9 +-6 +-5 +-5 +-7 +-10 +-12 +-15 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-102 +-74 +-53 +-39 +-29 +-22 +-17 +-15 +-14 +-13 +-14 +-14 +-14 +-15 +-15 +-16 +-16 +-17 +-17 +-17 +-18 +-18 +-18 +-18 +-18 +103 +127 +127 +127 +127 +127 +111 +76 +51 +32 +19 +8 +0 +-5 +-9 +-12 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-107 +-78 +-57 +-41 +-30 +-22 +-17 +-14 +-12 +-11 +-11 +-12 +-12 +-13 +-14 +-15 +-16 +-16 +-17 +-17 +-18 +-18 +-18 +-18 +-18 +-18 +-17 +-17 +-17 +-16 +-16 +-16 +-15 +-15 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +105 +127 +127 +127 +127 +127 +111 +75 +49 +30 +16 +5 +-2 +-8 +-12 +-14 +-15 +-16 +-17 +-18 +-20 +-21 +-22 +-22 +-21 +-19 +-17 +-14 +-11 +-8 +-6 +-5 +-6 +-8 +-11 +-14 +-16 +-18 +-20 +-21 +-21 +-21 +-21 +-20 +-18 +-16 +-14 +-11 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-98 +-73 +-55 +-42 +-32 +-26 +-22 +-19 +-17 +-16 +-16 +-15 +-15 +-15 +-15 +-16 +-16 +-17 +-17 +-17 +-18 +-18 +-18 +-18 +-17 +102 +127 +127 +127 +127 +127 +111 +76 +51 +32 +18 +8 +0 +-4 +-8 +-12 +-15 +-18 +-20 +-23 +-24 +-25 +-26 +-24 +-22 +-20 +-17 +-14 +-10 +-7 +-4 +-3 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-99 +-75 +-58 +-46 +-37 +-30 +-26 +-23 +-20 +-19 +-17 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +104 +127 +127 +127 +127 +127 +110 +74 +48 +29 +14 +4 +-3 +-8 +-12 +-14 +-14 +-14 +-15 +-16 +-18 +-20 +-21 +-22 +-23 +-22 +-21 +-18 +-16 +-13 +-10 +-8 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-96 +-71 +-54 +-42 +-33 +-28 +-24 +-21 +-19 +101 +127 +127 +127 +127 +127 +107 +72 +46 +26 +11 +0 +-8 +-14 +-18 +-20 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-92 +-67 +-48 +-36 +-28 +-23 +-20 +-18 +-17 +102 +127 +127 +127 +127 +127 +106 +70 +43 +23 +9 +-1 +-8 +-13 +-16 +-16 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-94 +-68 +-50 +-38 +-30 +-24 +-21 +-19 +-18 +101 +127 +127 +127 +127 +127 +107 +73 +47 +28 +13 +1 +-7 +-13 +-18 +-21 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-93 +-66 +-48 +-35 +-27 +-22 +-19 +-17 +-17 +103 +127 +127 +127 +127 +127 +107 +72 +46 +27 +12 +0 +-7 +-15 +-20 +-23 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-92 +-64 +-45 +-33 +-25 +-19 +-17 +-16 +-15 +-15 +-16 +-16 +-17 +-18 +-18 +-19 +-19 +-19 +-19 +-19 +-19 +-18 +-18 +-17 +-17 +-16 +-16 +-15 +-15 +-14 +-14 +-14 +-14 +-15 +-14 +-14 +-15 +-14 +-14 +-14 +-15 +104 +127 +127 +127 +127 +127 +110 +75 +50 +31 +17 +8 +0 +-6 +-11 +-16 +-127 +-127 +-127 +-127 +-127 +-127 +-127 +-106 +-76 +-53 +-37 +-26 +-18 +-14 +-12 +-11 +-11 +-12 +-13 +-14 +-14 +-16 +-17 +-18 +-18 +-18 +-19 +-19 +-18 +-18 +-18 +-17 +-17 +-16 +-16 +-15 +-15 +-15 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-17 +-16 +-16 +-16 +-15 +-15 +-14 +-14 +-14 +-14 +-14 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +127 +127 +127 +127 +127 +127 +104 +79 +127 +127 +108 +75 +50 +31 +16 +4 +-6 +-14 +-20 +-25 +-29 +-30 +-29 +-28 +-27 +-22 +-17 +-11 +-5 +1 +6 +8 +6 +3 +-3 +-8 +-13 +-17 +-21 +-24 +-27 +-29 +-30 +-28 +-24 +-21 +-19 +-18 +-17 +-16 +-16 +-14 +-11 +-9 +-7 +-5 +-4 +-3 +-3 +-5 +-8 +-12 +-16 +-20 +-23 +-26 +-28 +-30 +-29 +-28 +-26 +-23 +-19 +-14 +-7 +-1 +4 +6 +4 +0 +-5 +-10 +-15 +-19 +-23 +-25 +-28 +-30 +-30 +-29 +-26 +-24 +-20 +-16 +-7 +0 +2 +2 +0 +-4 +-8 +-11 +-15 +-18 +-20 +-22 +-23 +-23 +-22 +-20 +-18 +-18 +-19 +-19 +-19 +-20 +-19 +-16 +-13 +-9 +-7 +-4 +-2 +0 +-1 +-5 +-8 +-12 +-16 +-20 +-23 +-26 +-27 +-29 +-29 +-26 +-25 +-22 +-18 +-14 +-7 +-2 +2 +2 +1 +-2 +-8 +-12 +-16 +-20 +-23 +-25 +-27 +-29 +-28 +-26 +-22 +-19 +-15 +-9 +-5 +-4 +-5 +-6 +-8 +-11 +-13 +-15 +-16 +-17 +-17 +-17 +-16 +-15 +-15 +-16 +-17 +-19 +-21 +-22 +-23 +-23 +-21 +-18 +-15 +-11 +-7 +-4 +-3 +-3 +-6 +-9 +-13 +-15 +-18 +-20 +-22 +-23 +-24 +-25 +-23 +-21 +-19 +-15 +-11 +-8 +-5 +-3 +-2 +-2 +-2 +-4 +-7 +-10 +-15 +-19 +-23 +-26 +-30 +-32 +-34 +-34 +-32 +-31 +-27 +-20 +-13 +-6 +1 +5 +5 +4 +0 +-4 +-8 +-12 +-15 +-18 +-21 +-22 +-23 +-22 +-21 +-21 +-20 +-23 +-24 +-24 +-24 +-21 +-18 +-15 +-11 +-7 +-2 +1 +2 +1 +-2 +-7 +-12 +-16 +-19 +-22 +-26 +-28 +-30 +-31 +-29 +-26 +-24 +-20 +-16 +-10 +-4 +1 +4 +4 +1 +-4 +-9 +-14 +-18 +-22 +-25 +-28 +-30 +-31 +-30 +-28 +-26 +-22 +-16 +-6 +0 +2 +0 +-2 +-5 +-9 +-12 +-16 +-18 +-20 +-22 +-22 +-22 +-20 +-18 +-17 +-17 +-17 +-19 +-20 +-20 +-20 +-19 +-17 +-14 +-11 +-8 +-6 +-5 +-4 +-4 +-5 +-5 +-7 +-9 +-12 +-15 +-19 +-22 +-26 +-30 +-32 +-34 +-33 +-31 +-30 +-28 +-21 +-15 +-10 +-3 +2 +6 +8 +8 +6 +1 +-4 +-10 +-16 +-20 +-25 +-29 +-32 +-34 +-35 +-34 +-33 +-32 +-26 +-20 +-11 +-5 +-2 +-2 +-3 +-6 +-9 +-12 +-14 +-17 +-19 +-20 +-22 +-23 +-22 +-21 +-21 +-22 +-24 +-25 +-27 +-27 +-28 +-27 +-24 +-22 +-19 +-15 +-11 +-9 +-7 +-6 +-6 +-7 +-9 +-11 +-14 +-17 +-21 +-25 +-29 +-33 +-36 +-38 +-39 +-38 +-37 +-35 +-30 +-23 +-15 +-9 +-7 +-7 +-8 +-10 +-12 +-15 +-17 +-19 +-20 +-21 +-22 +-22 +-23 +-24 +-27 +-28 +-30 +-32 +-33 +-33 +-32 +-30 +-28 +-24 +-20 +-16 +-12 +-9 +-8 +-9 +-13 +-16 +-19 +-23 +-27 +-29 +-32 +-34 +-36 +-35 +-34 +-32 +-29 +-25 +-20 +-15 +-10 +-7 +-5 +-4 +-3 +-4 +-7 +-10 +-14 +-18 +-21 +-24 +-27 +-29 +-30 +-30 +-28 +-26 +-24 +-20 +-14 +-7 +-2 +102 +-33 +67 +-51 +55 +-61 +46 +-68 +40 +-72 +36 +-73 +37 +-71 +39 +-70 +38 +-72 +36 +-72 +37 +-68 +43 +-63 +48 +-59 +54 +-55 +56 +-59 +50 +-65 +43 +-71 +37 +-75 +33 +-77 +31 +-76 +34 +-71 +39 +-65 +47 +-58 +54 +-55 +58 +-54 +55 +-61 +47 +-69 +38 +-75 +32 +-79 +28 +-80 +29 +-76 +34 +-70 +43 +-58 +56 +-54 +56 +-57 +50 +-63 +46 +-67 +41 +-70 +38 +-72 +38 +-69 +41 +-68 +40 +-70 +38 +-71 +37 +-71 +38 +-68 +42 +-64 +48 +-59 +52 +-58 +53 +-58 +53 +-60 +49 +-66 +42 +-72 +35 +-77 +30 +-81 +26 +-80 +29 +-75 +33 +-68 +44 +-58 +57 +-49 +63 +-49 +59 +-58 +50 +-66 +41 +-73 +35 +-77 +30 +-79 +30 +-75 +36 +-69 +40 +-67 +42 +-65 +44 +-63 +47 +-61 +49 +-60 +51 +-60 +52 +-60 +48 +-66 +42 +-71 +36 +-76 +31 +-80 +29 +-77 +32 +-72 +39 +-65 +48 +-56 +57 +-52 +60 +-53 +58 +-58 +51 +-66 +41 +-74 +33 +-80 +26 +-84 +23 +-82 +25 +-77 +34 +-67 +45 +-55 +59 +-49 +61 +-53 +55 +-60 +48 +-66 +42 +-71 +37 +-73 +35 +-73 +37 +-71 +37 +-71 +36 +-72 +36 +-70 +40 +-65 +46 +-60 +52 +-56 +56 +-55 +54 +-61 +47 +-67 +40 +-73 +34 +-77 +29 +-79 +29 +-76 +33 +-71 +39 +-64 +49 +-55 +57 +-52 +59 +-54 +57 +-59 +50 +-66 +42 +-74 +33 +-80 +25 +-84 +23 +-82 +25 +-77 +34 +-66 +45 +-56 +-77 +70 +-31 +75 +-43 +62 +-56 +50 +-66 +41 +-72 +35 +-75 +33 +-74 +36 +-71 +38 +-70 +38 +-69 +38 +-67 +43 +-63 +48 +-59 +52 +-57 +54 +-57 +52 +-63 +44 +-69 +38 +-74 +33 +-77 +29 +-78 +31 +-73 +36 +-67 +44 +-60 +53 +-53 +59 +-52 +57 +-59 +48 +-67 +40 +-73 +34 +-78 +29 +-79 +29 +-75 +35 +-67 +44 +-62 +46 +-62 +47 +-62 +46 +-63 +46 +-63 +45 +-64 +46 +-64 +47 +-63 +46 +-66 +41 +-71 +36 +-74 +33 +-76 +32 +-74 +35 +-69 +41 +-63 +49 +-57 +54 +-55 +56 +-56 +54 +-61 +47 +-68 +39 +-74 +32 +-79 +26 +-82 +26 +-78 +29 +-74 +37 +-64 +48 +-54 +60 +-48 +62 +-52 +54 +-62 +45 +-69 +38 +-74 +32 +-78 +29 +-76 +34 +-70 +40 +-66 +42 +-65 +42 +-65 +43 +-64 +46 +-62 +48 +-61 +49 +-60 +50 +-62 +46 +-67 +40 +-72 +34 +-76 +30 +-78 +30 +79 +-85 +16 +-84 +32 +-68 +46 +-59 +54 +-57 +55 +-58 +50 +-65 +43 +-72 +35 +-77 +29 +-82 +24 +-81 +26 +-78 +31 +-69 +42 +-57 +56 +-50 +60 +-53 +-83 +60 +-45 +59 +-57 +47 +-66 +41 +-69 +39 +-69 +40 +-69 +38 +-71 +36 +-72 +36 +-69 +40 +-65 +46 +-60 +51 +-56 +53 +-57 +54 +-59 +49 +-65 +42 +87 +-87 +10 +-97 +13 +-91 +20 +-82 +27 +-75 +36 +-64 +49 +-54 +59 +-49 +-77 +67 +-40 +64 +-55 +49 +-67 +38 +-75 +30 +-79 +28 +-76 +33 +-69 +42 +-62 +47 +-60 +48 +-61 +47 +-62 +47 +-62 +47 +-63 +47 +-63 +46 +-66 +42 +-71 +36 +-75 +32 +-77 +30 +-75 +34 +-70 +40 +-63 +48 +-57 +55 +-53 +57 +-57 +51 +-64 +42 +-71 +36 +-76 +30 +-79 +28 +-77 +31 +-72 +37 +-66 +45 +99 +-67 +36 +-70 +43 +-68 +41 +-71 +37 +-75 +33 +-78 +30 +-78 +30 +-74 +36 +-67 +42 +-64 +44 +-64 +44 +-64 +44 +-63 +46 +-63 +47 +-61 +49 +-61 +48 +-64 +43 +-69 +38 +-73 +33 +-76 +30 +-76 +33 +-71 +37 +-66 +44 +-59 +-83 +63 +-37 +70 +-45 +63 +-54 +53 +-63 +42 +-72 +34 +-78 +27 +-82 +23 +-81 +25 +-77 +33 +-67 +44 +-57 +56 +-48 +63 +-49 +59 +-57 +50 +-65 +42 +88 +-86 +12 +-94 +19 +-85 +26 +-80 +29 +-78 +29 +-75 +34 +-68 +42 +-61 +52 +-53 +59 +-50 +59 +-57 +50 +-65 +42 +-72 +35 +-76 +30 +-79 +27 +-78 +-101 +41 +-53 +53 +-52 +59 +-47 +63 +-48 +59 +-57 +49 +-66 +40 +-73 +33 +-77 +28 +-79 +29 +-76 +33 +-71 +39 +-61 +54 +-51 +59 +-53 +54 +-60 +47 +92 +-83 +15 +-92 +19 +-86 +25 +-78 +33 +-72 +36 +-71 +36 +-70 +38 +-68 +42 +-63 +47 +-59 +51 +-57 +53 +-58 +50 +-64 +43 +-70 +36 +-75 +31 +-78 +-105 +36 +-59 +46 +-60 +47 +-56 +56 +-50 +61 +-49 +60 +-52 +56 +-60 +47 +92 +-85 +11 +-97 +12 +-94 +15 +-88 +20 +-81 +30 +-67 +46 +-57 +53 +-54 +-82 +61 +-41 +64 +-50 +54 +-59 +48 +-63 +45 +-66 +40 +-71 +36 +-75 +31 +77 +-89 +10 +-90 +24 +-76 +38 +-64 +49 +-57 +55 +-55 +54 +-60 +46 +-68 +-98 +43 +-59 +43 +-69 +34 +-73 +33 +-71 +36 +-67 +43 +-58 +54 +-51 +60 +110 +-65 +33 +-79 +31 +-80 +29 +-82 +26 +-84 +22 +-83 +25 +-76 +33 +-66 +-88 +56 +-41 +64 +-48 +58 +-54 +53 +-59 +48 +-63 +45 +-65 +44 +-67 +40 +86 +-86 +10 +-95 +16 +-86 +24 +-77 +33 +-69 +43 +-60 +52 +-55 +56 +-53 +-82 +61 +-45 +58 +-60 +44 +-71 +33 +-77 +28 +-78 +29 +-74 +33 +-69 +41 +-59 +54 +-50 +61 +-51 +56 +-58 +48 +-66 +40 +-72 +34 +-76 +30 +-77 +32 +-72 +38 +-68 +39 +-67 +40 +-66 +42 +-64 +45 +-61 +48 +-59 +50 +-58 +51 +98 +-78 +19 +-89 +22 +-85 +24 +-82 +25 +-79 +30 +-73 +36 +-66 +45 +-58 +-82 +64 +-36 +71 +-46 +58 +-59 +46 +-68 +37 +-75 +30 +-79 +26 +-78 +29 +-74 +33 +-67 +43 +-57 +56 +-49 +61 +-51 +55 +-60 +46 +-68 +39 +-74 +32 +-77 +29 +-76 +32 +-71 +39 +-67 +40 +-66 +41 +-66 +42 +-64 +45 +-62 +48 +-60 +50 +-59 +50 +-62 +44 +-68 +38 +-73 +33 +-76 +29 +-78 +29 +-74 +34 +-68 +41 +-61 +50 +-54 +56 +-52 +57 +-54 +54 +-61 +45 +-69 +37 +-76 +30 +-80 +24 +-82 +24 +-79 +27 +-72 +38 +-61 +53 +-50 +59 +-51 +56 +-57 +49 +-64 +42 +-69 +38 +-72 +35 +-72 +36 +-70 +37 +-70 +35 +-72 +34 +-72 +36 +-68 +41 +-63 +48 +-58 +51 +-57 +53 +-57 +53 +-60 +48 +-65 +41 +-72 +34 +-77 +27 +-81 +24 +-80 +27 +-76 +31 +-68 +42 +-58 +54 +-50 +60 +-49 +60 +-52 +55 +-61 +46 +-69 +36 +-76 +29 +-81 +23 +-82 +24 +-79 +27 +-71 +41 +95 +-70 +29 +-74 +38 +-68 +43 +-65 +44 +-66 +43 +-66 +42 +-67 +40 +-70 +-99 +-72 +-29 +-21 +-5 +-12 +-18 +-23 +-19 +-16 +-11 +-7 +-4 +-2 +-1 +-1 +-3 +-4 +-7 +-10 +-14 +-18 +-21 +-24 +-28 +-30 +-32 +-33 +-32 +-30 +-29 +-24 +-19 +-14 +-9 +-4 +0 +3 +4 +2 +-1 +-6 +-11 +-15 +-18 +-21 +-24 +-26 +-27 +-28 +-27 +-25 +-21 +-19 +-17 +-16 +-16 +-15 +-14 +-13 +-12 +-10 +-9 +-9 +-9 +-9 +-9 +-10 +-11 +-12 +-14 +-16 +-19 +-21 +-24 +-26 +-28 +-29 +-29 +-27 +-25 +-22 +-19 +-15 +-10 +-5 +-1 +0 +0 +-1 +-3 +-5 +-8 +-12 +-15 +-19 +-23 +-26 +-29 +-31 +-33 +-33 +-31 +-30 +-27 +-21 +-16 +-11 +-4 +0 +1 +0 +-3 +-5 +-9 +-12 +-15 +-17 +-19 +-21 +-22 +-22 +-21 +-20 +-20 +-20 +-21 +-22 +-22 +-22 +-20 +-19 +-16 +-14 +-10 +-8 +-6 +-5 +-5 +-6 +-7 +-8 +-8 +-10 +-13 +-16 +-19 +-22 +-25 +-27 +-30 +-31 +-32 +-30 +-28 +-27 +-23 +-17 +-13 +-8 +-3 +1 +3 +3 +1 +-3 +-7 +-12 +-16 +-20 +-23 +-26 +-28 +-30 +-32 +-31 +-28 +-23 +-18 +-14 +-12 +-11 +-10 +-10 +-10 +-10 +-10 +-11 +-12 +-12 +-13 +-14 +-14 +-14 +-14 +-15 +-16 +-19 +-21 +-23 +-24 +-26 +-27 +-26 +-25 +-22 +-20 +-16 +-13 +-9 +-6 +-4 +-3 +-3 +-5 +-6 +-8 +-10 +-13 +-16 +-19 +-22 +-24 +-27 +-29 +-31 +-31 +-30 +-29 +-27 +-23 +-18 +-13 +-7 +-1 +2 +1 +0 +-4 +-8 +-12 +-15 +-18 +-20 +-22 +-24 +-25 +-24 +-23 +-21 +-19 +-19 +-19 +-19 +-19 +-18 +-17 +-16 +-13 +-11 +-10 +-8 +-8 +-9 +-9 +-9 +-9 +-10 +-12 +-14 +-16 +-18 +-21 +-24 +-27 +-28 +-30 +-29 +-27 +-25 +-22 +-20 +-15 +-9 +-5 +-2 +0 +1 +0 +-2 +-6 +-10 +-15 +-19 +-22 +-25 +-28 +-30 +-31 +-31 +-29 +-27 +-26 +-21 +-14 +-8 +-5 +-4 +-5 +-7 +-8 +-10 +-12 +-14 +-16 +-17 +-18 +-18 +-18 +-17 +-17 +-18 +-20 +-21 +-22 +-23 +-24 +-24 +-22 +-20 +-18 +-15 +-11 +-8 +-7 +-5 +-5 +-5 +-6 +-8 +-9 +-11 +-13 +-15 +-17 +-19 +-22 +-25 +-28 +-29 +-32 +-33 +-31 +-29 +-27 +-22 +-17 +-12 +-7 +-1 +2 +3 +2 +-2 +-6 +-10 +-14 +-17 +-20 +-23 +-25 +-26 +-27 +-27 +-24 +-21 +-19 +-18 +-17 +-17 +-16 +-15 +-14 +-12 +-11 +-10 +-9 +-9 +-9 +-10 +-11 +-12 +-13 +-15 +-15 +-16 +-17 +-19 +-21 +-23 +-25 +-26 +-27 +-28 +-27 +-25 +-22 +-19 +-15 +-11 +-7 +-4 +-2 +-1 +-2 +-3 +-4 +-7 +-11 +-15 +-19 +-22 +-25 +-28 +-30 +-32 +-31 +-30 +-28 +-26 +-22 +-14 +-9 +-6 +-5 +-6 +-7 +-8 +-11 +-12 +-14 +-15 +-16 +-16 +-17 +-17 +-17 +-16 +-16 +-16 +-17 +-18 +-20 +-22 +-23 +-24 +-24 +-24 +-22 +-19 +-17 +-14 +-9 +-7 +-5 +-4 +-4 +-5 +-6 +-7 +-9 +-11 +-14 +-17 +-20 +-23 +-26 +-29 +-31 +-32 +-31 +-30 +-29 +-25 +-21 +-15 +-10 +-4 +1 +3 +3 +0 +-4 +-9 +-12 +-16 +-19 +-21 +-24 +-25 +-26 +-27 +-25 +-22 +-19 +-18 +-18 +-17 +-17 +-17 +-16 +-14 +-13 +-11 +-10 +-9 +-9 +-9 +-10 +-11 +-12 +-13 +-14 +-15 +-16 +-17 +-20 +-23 +-25 +-26 +-28 +-29 +-28 +-26 +-23 +-20 +-17 +-13 +-8 +-5 +-2 +-1 +-1 +-2 +-3 +-7 +-10 +-14 +-18 +-22 +-25 +-28 +-30 +-32 +-31 +-30 +-28 +-26 +-23 +-18 +-11 +-5 +-2 +-2 +-3 +-6 +-9 +-12 +-15 +-17 +-19 +-21 +-22 +-22 +-21 +-19 +-17 +-17 +-18 +-19 +-20 +-21 +-21 +-21 +-20 +-19 +-16 +-14 +-12 +-9 +-7 +-6 +-6 +-6 +-7 +-9 +-10 +-12 +-13 +-14 +-16 +-18 +-20 +-22 +-25 +-27 +-29 +-30 +-29 +-28 +-26 +-24 +-20 +-13 +-7 +-2 +-1 +-1 +-4 +-6 +-9 +-12 +-15 +-17 +-19 +-20 +-21 +-22 +-21 +-20 +-19 +-19 +-19 +-20 +-21 +-21 +-21 +-20 +-18 +-15 +-12 +-10 +-9 +-7 +-7 +-7 +-8 +-8 +-10 +-11 +-13 +-15 +-18 +-21 +-22 +-25 +-28 +-30 +-30 +-30 +-29 +-27 +-24 +-19 +-14 +-8 +-3 +0 +1 +2 +1 +-1 +-4 +-8 +-13 +-17 +-21 +-24 +-27 +-30 +-32 +-32 +-31 +-30 +-28 +-24 +-20 +-14 +-7 +-2 +-1 +-2 +-4 +-7 +-10 +-12 +-15 +-18 +-19 +-21 +-22 +-22 +-22 +-20 +-19 +-20 +-20 +-21 +-21 +-21 +-21 +-20 +-17 +-15 +-12 +-10 +-8 +-7 +-6 +-6 +-7 +-8 +-9 +-11 +-13 +-14 +-16 +-17 +-18 +-21 +-23 +-25 +-28 +-30 +-31 +-30 +-29 +-26 +-24 +-20 +-15 +-9 +-4 +0 +2 +2 +0 +-5 +-10 +-14 +-17 +-20 +-22 +-25 +-26 +-27 +-27 +-25 +-23 +-20 +-16 +-12 +-9 +-9 +-9 +-11 +-13 +-14 +-16 +-16 +-17 +-18 +-18 +-18 +-18 +-17 +-16 +-15 +-15 +-14 +-12 +-11 +-12 +-13 +-15 +-17 +-19 +-21 +-23 +-24 +-26 +-26 +-24 +-22 +-19 +-16 +-13 +-9 +-7 +-5 +-3 +-3 +-4 +-7 +-11 +-14 +-18 +-21 +-23 +-26 +-28 +-29 +-29 +-27 +-26 +-23 +-19 +-14 +-9 +-6 +-6 +-7 +-9 +-11 +-13 +-15 +-17 +-18 +-19 +-20 +-20 +-20 +-19 +-18 +-16 +-15 +-13 +-13 +-14 +-16 +-18 +-18 +-20 +-22 +-22 +-21 +-20 +-18 +-17 +-14 +-12 +-10 +-8 +-7 +-7 +-7 +-7 +-8 +-9 +-12 +-14 +-17 +-20 +-23 +-26 +-28 +-30 +-30 +-29 +-27 +-25 +-22 +-18 +-12 +-5 +-2 +-1 +-3 +-5 +-8 +-11 +-14 +-17 +-19 +-21 +-22 +-22 +-22 +-20 +-19 +-18 +-19 +-19 +-20 +-20 +-20 +-19 +-18 +-16 +-14 +-12 +-10 +-9 +-8 +-8 +-8 +-9 +-10 +-11 +-12 +-12 +-14 +-16 +-19 +-22 +-25 +-27 +-29 +-30 +-30 +-28 +-26 +-24 +-21 +-16 +-10 +-5 +-1 +1 +2 +1 +-3 +-7 +-12 +-16 +-19 +-23 +-25 +-27 +-29 +-30 +-28 +-27 +-23 +-18 +-15 +-13 +-12 +-12 +-11 +-11 +-12 +-12 +-12 +-12 +-12 +-12 +-13 +-14 +-14 +-14 +-14 +-15 +-16 +-18 +-20 +-22 +-24 +-26 +-27 +-27 +-25 +-23 +-21 +-18 +-15 +-10 +-7 +-4 +-3 +-2 +-3 +-4 +-7 +-11 +-15 +-19 +-22 +-25 +-28 +-30 +-31 +-30 +-29 +-26 +-25 +-20 +-14 +-7 +-3 +-1 +-2 +-4 +-7 +-10 +-13 +-16 +-18 +-20 +-21 +-22 +-22 +-21 +-19 +-19 +-19 +-20 +-20 +-20 +-20 +-19 +-18 +-16 +-13 +-12 +-10 +-9 +-8 +-8 +-8 +-9 +-10 +-11 +-12 +-14 +-16 +-19 +-22 +-25 +-27 +-29 +-31 +-30 +-29 +-26 +-24 +-21 +-16 +-11 +-6 +-2 +0 +1 +0 +-1 +-4 +-8 +-12 +-17 +-20 +-24 +-27 +-30 +-32 +-32 +-31 +-29 +-27 +-23 +-16 +-11 +-8 +-6 +-6 +-7 +-8 +-9 +-11 +-12 +-14 +-15 +-16 +-17 +-17 +-16 +-17 +-18 +-20 +-22 +-23 +-25 +-25 +-25 +-24 +-22 +-19 +-16 +-12 +-9 +-7 +-5 +-4 +-3 +-4 +-5 +-7 +-10 +-12 +-14 +-16 +-19 +-22 +-25 +-28 +-30 +-32 +-32 +-31 +-29 +-28 +-23 +-18 +-13 +-7 +-2 +1 +2 +0 +-2 +-6 +-10 +-14 +-17 +-20 +-22 +-24 +-25 +-26 +-24 +-21 +-19 +-18 +-18 +-18 +-18 +-18 +-17 +-16 +-15 +-13 +-12 +-10 +-9 +-9 +-9 +-10 +-10 +-11 +-12 +-13 +-15 +-17 +-20 +-22 +-24 +-27 +-29 +-30 +-29 +-28 +-25 +-23 +-20 +-16 +-10 +-5 +-1 +-1 +0 +-1 +-2 +-4 +-8 +-13 +-17 +-21 +-24 +-27 +-30 +-31 +-31 +-31 +-29 +-25 +-21 +-15 +-11 +-8 +-8 +-8 +-8 +-9 +-10 +-11 +-12 +-14 +-14 +-15 +-16 +-16 +-16 +-18 +-20 +-21 +-23 +-25 +-26 +-26 +-25 +-23 +-21 +-17 +-15 +-11 +-7 +-4 +-3 +-3 +-4 +-5 +-6 +-8 +-10 +-13 +-17 +-20 +-23 +-26 +-29 +-31 +-33 +-33 +-31 +-31 +-27 +-21 +-16 +-12 +-6 +-1 +3 +4 +2 +-1 +-6 +-10 +-14 +-17 +-20 +-22 +-25 +-26 +-28 +-28 +-25 +-22 +-20 +-20 +-19 +-18 +-17 +-16 +-14 +-12 +-10 +-9 +-8 +-8 +-9 +-9 +-10 +-10 +-12 +-14 +-16 +-19 +-22 +-25 +-27 +-29 +-30 +-29 +-28 +-25 +-24 +-21 +-16 +-10 +-5 +-2 +0 +0 +-1 +-3 +-5 +-9 +-12 +-16 +-20 +-23 +-27 +-30 +-32 +-32 +-31 +-30 +-28 +-24 +-17 +-10 +-6 +-4 +-4 +-5 +-7 +-8 +-9 +-11 +-13 +-15 +-16 +-16 +-16 +-17 +-18 +-19 +-21 +-22 +-24 +-24 +-25 +-23 +-21 +-19 +-16 +-13 +-10 +-8 +-6 +-6 +-5 +-6 +-6 +-9 +-12 +-16 +-18 +-21 +-23 +-25 +-28 +-29 +-30 +-28 +-26 +-24 +-21 +-17 +-13 +-7 +-3 +0 +1 +1 +-1 +-6 +-10 +-14 +-18 +-22 +-25 +-27 +-29 +-30 +-29 +-27 +-24 +-20 +-16 +-14 +-14 +-13 +-12 +-12 +-11 +-11 +-11 +-11 +-11 +-12 +-12 +-12 +-13 +-16 +-18 +-20 +-22 +-24 +-25 +-26 +-26 +-25 +-23 +-20 +-17 +-14 +-10 +-7 +-5 +-4 +-4 +-5 +-4 +-5 +-9 +-12 +-16 +-19 +-23 +-26 +-29 +-31 +-32 +-32 +-31 +-29 +-26 +-20 +-16 +-10 +-4 +1 +2 +0 +-3 +-6 +-10 +-13 +-16 +-18 +-20 +-22 +-23 +-23 +-22 +-21 +-20 +-20 +-20 +-21 +-21 +-21 +-20 +-18 +-15 +-12 +-10 +-8 +-6 +-5 +-5 +-8 +-11 +-14 +-17 +-20 +-22 +-25 +-26 +-27 +-27 +-26 +-24 +-22 +-19 +-15 +-12 +-8 +-6 +-4 +-4 +-4 +-4 +-6 +-9 +-12 +-16 +-19 +-23 +-26 +-28 +-30 +-32 +-31 +-30 +-27 +-25 +-19 +-12 +-7 +-5 +-4 +-5 +-7 +-8 +-10 +-12 +-13 +-14 +-16 +-17 +-17 +-16 +-17 +-18 +-20 +-22 +-24 +-25 +-25 +-24 +-23 +-20 +-18 +-15 +-11 +-8 +-6 +-4 +-4 +-4 +-5 +-8 +-11 +-15 +-18 +-21 +-24 +-27 +-29 +-31 +-31 +-30 +-28 +-26 +-24 +-18 +-14 +-9 +-4 +-1 +1 +1 +0 +-3 +-8 +-12 +-17 +-20 +-23 +-26 +-29 +-30 +-30 +-28 +-25 +-22 +-18 +-15 +-13 +-11 +-10 +-11 +-11 +-10 +-10 +-11 +-12 +-12 +-12 +-12 +-14 +-16 +-18 +-20 +-22 +-24 +-26 +-27 +-27 +-26 +-24 +-21 +-18 +-15 +-11 +-7 +-5 +-3 +-3 +-4 +-4 +-6 +-9 +-11 +-16 +-19 +-23 +-26 +-29 +-31 +-32 +-31 +-30 +-29 +-26 +-20 +-16 +-11 +-5 +0 +3 +3 +1 +-3 +-7 +-11 +-15 +-18 +-21 +-24 +-25 +-26 +-27 +-25 +-23 +-22 +-21 +-20 +-20 +-19 +-18 +-17 +-15 +-12 +-10 +-9 +-8 +-7 +-6 +-7 +-9 +-13 +-16 +-19 +-22 +-24 +-26 +-28 +-29 +-29 +-27 +-24 +-21 +-18 +-13 +-8 +-4 +0 +0 +-1 +-2 +-4 +-7 +-11 +-15 +-18 +-22 +-25 +-28 +-31 +-33 +-33 +-31 +-30 +-28 +-22 +-17 +-11 +-5 +-1 +0 +-2 +-4 +-7 +-10 +-12 +-15 +-17 +-19 +-20 +-21 +-20 +-19 +-19 +-20 +-21 +-22 +-23 +-23 +-23 +-21 +-19 +-17 +-14 +-11 +-9 +-7 +-6 +-6 +-6 +-7 +-8 +-10 +-13 +-16 +-20 +-22 +-25 +-28 +-30 +-31 +-31 +-29 +-27 +-25 +-21 +-16 +-11 +-6 +-2 +0 +1 +1 +0 +-4 +-9 +-13 +-17 +-21 +-24 +-27 +-29 +-31 +-31 +-30 +-28 +-24 +-19 +-14 +-11 +-9 +-9 +-8 +-8 +-9 +-10 +-11 +-12 +-13 +-14 +-14 +-14 +-15 +-17 +-19 +-21 +-23 +-25 +-26 +-27 +-26 +-25 +-22 +-19 +-16 +-12 +-8 +-5 +-4 +-3 +-4 +-5 +-6 +-8 +-11 +-12 +-16 +-19 +-23 +-26 +-29 +-31 +-32 +-32 +-31 +-30 +-27 +-21 +-16 +-11 +-6 +-1 +2 +3 +2 +-2 +-7 +-11 +-15 +-18 +-21 +-23 +-25 +-26 +-27 +-27 +-24 +-22 +-20 +-19 +-19 +-18 +-17 +-17 +-15 +-14 +-12 +-11 +-9 +-9 +-9 +-9 +-10 +-10 +-11 +-13 +-15 +-17 +-20 +-22 +-24 +-27 +-29 +-30 +-29 +-28 +-25 +-24 +-21 +-16 +-11 +-5 +-2 +0 +0 +-1 +-2 +-4 +-8 +-11 +-15 +-19 +-22 +-26 +-29 +-31 +-33 +-33 +-32 +-30 +-28 +-22 +-15 +-9 +-5 +-4 +-4 +-5 +-7 +-8 +-10 +-12 +-13 +-15 +-16 +-16 +-17 +-17 +-18 +-20 +-22 +-22 +-25 +-26 +-26 +-24 +-22 +-19 +-16 +-13 +-9 +-7 +-5 +-4 +-5 +-5 +-7 +-8 +-10 +-12 +-15 +-18 +-21 +-23 +-26 +-29 +-31 +-32 +-31 +-30 +-28 +-26 +-20 +-15 +-11 +-5 +-1 +2 +3 +2 +-1 +-5 +-10 +-14 +-18 +-22 +-25 +-28 +-30 +-30 +-29 +-27 +-24 +-20 +-15 +-13 +-11 +-11 +-11 +-11 +-12 +-12 +-13 +-14 +-14 +-15 +-15 +-15 +-15 +-16 +-15 +-15 +-15 +-16 +-17 +-19 +-21 +-23 +-25 +-25 +-26 +-24 +-22 +-20 +-17 +-14 +-10 +-8 +-5 +-4 +-5 +-5 +-7 +-9 +-10 +-13 +-15 +-19 +-21 +-24 +-27 +-29 +-31 +-31 +-29 +-27 +-24 +-22 +-16 +-8 +-4 +-2 +-3 +-5 +-8 +-10 +-13 +-15 +-17 +-18 +-20 +-20 +-20 +-19 +-18 +-17 +-17 +-18 +-19 +-21 +-21 +-21 +-20 +-19 +-17 +-15 +-13 +-11 +-10 +-9 +-8 +-8 +-8 +-9 +-9 +-12 +-15 +-17 +-20 +-22 +-25 +-27 +-29 +-30 +-30 +-28 +-25 +-23 +-20 +-15 +-9 +-4 +-1 +1 +1 +0 +-4 +-8 +-13 +-17 +-20 +-24 +-26 +-29 +-30 +-31 +-29 +-27 +-23 +-18 +-15 +-12 +-11 +-10 +-10 +-10 +-10 +-10 +-11 +-11 +-12 +-13 +-14 +-14 +-15 +-16 +-16 +-16 +-18 +-21 +-22 +-24 +-25 +-26 +-27 +-25 +-23 +-21 +-18 +-14 +-10 +-7 +-4 +-3 +-3 +-2 +-4 +-6 +-8 +-11 +-14 +-17 +-20 +-24 +-26 +-29 +-31 +-33 +-32 +-31 +-30 +-26 +-21 +-15 +-10 +-4 +1 +2 +0 +-3 +-6 +-10 +-14 +-17 +-20 +-21 +-23 +-25 +-25 +-23 +-21 +-19 +-19 +-19 +-19 +-20 +-19 +-19 +-17 +-16 +-14 +-13 +-11 +-10 +-9 +-9 +-9 +-9 +-10 +-11 +-12 +-14 +-15 +-17 +-19 +-22 +-24 +-26 +-28 +-30 +-30 +-29 +-27 +-24 +-22 +-17 +-13 +-7 +-3 +0 +1 +1 +0 +-4 +-9 +-13 +-17 +-21 +-24 +-27 +-29 +-31 +-31 +-30 +-28 +-25 +-22 +-16 +-9 +-5 +-4 +-4 +-6 +-9 +-11 +-14 +-16 +-17 +-18 +-19 +-20 +-20 +-19 +-18 +-16 +-16 +-16 +-17 +-19 +-20 +-21 +-22 +-22 +-22 +-20 +-19 +-16 +-14 +-11 +-9 +-7 +-6 +-6 +-5 +-6 +-8 +-10 +-12 +-15 +-17 +-21 +-24 +-27 +-29 +-31 +-31 +-30 +-28 +-26 +-23 +-18 +-13 +-7 +-2 +1 +1 +-1 +-4 +-9 +-13 +-17 +-19 +-22 +-24 +-26 +-28 +-28 +-26 +-22 +-18 +-18 +-17 +-16 +-16 +-15 +-15 +-14 +-13 +-12 +-12 +-12 +-11 +-11 +-11 +-12 +-13 +-14 +-14 +-15 +-16 +-16 +-17 +-18 +-20 +-21 +-23 +-25 +-27 +-28 +-27 +-25 +-23 +-20 +-17 +-13 +-9 +-5 +-3 +-2 +-2 +-2 +-4 +-8 +-13 +-16 +-20 +-23 +-26 +-28 +-30 +-31 +-127 +-127 +-127 +-127 +-127 +-119 +-84 +-58 +-40 +-28 +-20 +-16 +-14 +-13 +-13 +-14 +-15 +-16 +-16 +-17 +-18 +-19 +-19 +-20 +-20 +-20 +-20 +-19 +-19 +-19 +-19 +-19 +-18 +-17 +-17 +-16 +-14 +-15 +-15 +-14 +-14 +-14 +-14 +72 +100 +75 +52 +33 +20 +16 +127 +127 +101 +69 +44 +25 +11 +0 +-7 +-12 +-16 +-17 +-18 +-18 +-18 +-19 +-21 +-21 +-21 +-21 +-20 +-18 +-16 +-13 +-11 +-9 +-7 +-6 +-6 +-6 +-9 +-12 +-15 +-18 +-21 +-23 +-25 +-27 +-29 +-29 +-27 +-25 +-22 +-19 +-15 +-11 +-8 +-5 +-3 +-2 +-2 +-4 +-7 +-11 +-15 +-19 +-22 +-25 +-28 +-30 +-31 +-31 +-29 +-27 +-25 +-21 +-16 +-10 +-4 +0 +1 +0 +-3 +-6 +-10 +-14 +-18 +-21 +-22 +-24 +-25 +-25 +-23 +-21 +-19 +-18 +-18 +-18 +-18 +-18 +-17 +-16 +-15 +-13 +-12 +-10 +-9 +-8 +-8 +-10 +-12 +-15 +-18 +-20 +-22 +-24 +-25 +-26 +-26 +-25 +-23 +-20 +-17 +-13 +-10 +-7 +-5 +-4 +-5 +-5 +-7 +-9 +-10 +-12 +-15 +-18 +-21 +-24 +-26 +-29 +-31 +-32 +-31 +-29 +-27 +-24 +-19 +-14 +-8 +-2 +1 +1 +0 +-4 +-8 +-12 +-15 +-18 +-21 +-23 +-24 +-25 +-25 +-25 +-23 +-20 +-16 +-14 +-13 +-13 +-14 +-15 +-16 +-17 +-17 +-17 +-16 +-16 +-15 +-13 +-12 +-12 +-11 +-11 +-12 +-12 +-12 +-12 +-13 +-14 +-16 +-18 +-21 +-23 +-25 +-27 +-28 +-28 +-26 +-24 +-21 +-18 +-14 +-10 +-5 +-2 +0 +-1 +-3 +-7 +-11 +-15 +-18 +-21 +-24 +-26 +-28 +-28 +-28 +-26 +-22 +-17 +-14 +-12 +-12 +-12 +-12 +-12 +-13 +-13 +-13 +-13 +-13 +-14 +-14 +-14 +-14 +-15 +-15 +-15 +-15 +-15 +-16 +-18 +-20 +-22 +-24 +-25 +-26 +-26 +-25 +-23 +-20 +-17 +-14 +-10 +-7 +-5 +-4 +-4 +-4 +-5 +-7 +-10 +-13 +-16 +-19 +-22 +-25 +-28 +-30 +-31 +-31 +-30 +-27 +-24 +-19 +-12 +-7 +-5 +-5 +-7 +-8 +-10 +-12 +-14 +-15 +-16 +-17 +-18 +-18 +-18 +-17 +-16 +-16 +-18 +-19 +-21 +-22 +-22 +-23 +-22 +-21 +-19 +-17 +-16 +-13 +-10 +-8 +-7 +-6 +-6 +-7 +-8 +-9 +-12 +-14 +-17 +-20 +-23 +-26 +-28 +-30 +-32 +-31 +-30 +-28 +-26 +-21 +-16 +-11 +-6 +-1 +1 +3 +1 +-2 +-6 +-10 +-15 +-18 +-22 +-24 +-27 +-28 +-29 +-28 +-26 +-22 +-19 +-17 +-16 +-14 +-13 +-12 +-11 +-11 +-10 +-10 +-10 +-10 +-10 +-11 +-12 +-14 +-14 +-15 +-16 +-17 +-18 +-21 +-23 +-25 +-27 +-28 +-28 +-26 +-23 +-21 +-17 +-14 +-9 +-5 +-2 +-1 +-1 +-2 +-4 +-6 +-9 +-13 +-17 +-20 +-24 +-27 +-30 +-32 +-33 +-32 +-30 +-29 +-26 +-20 +-12 +-6 +-4 +-3 +-4 +-6 +-8 +-10 +-12 +-14 +-16 +-17 +-18 +-19 +-19 +-18 +-17 +-18 +-19 +-20 +-22 +-23 +-23 +-23 +-22 +-20 +-18 +-15 +-12 +-9 +-7 +-6 +-5 +-6 +-7 +-8 +-9 +-12 +-14 +-17 +-20 +-22 +-25 +-28 +-29 +-30 +-30 +-28 +-26 +-23 +-20 +-15 +-10 +-5 +-1 +1 +1 +-1 +-5 +-9 +-14 +-17 +-20 +-23 +-25 +-27 +-28 +-28 +-26 +-23 +-19 +-17 +-16 +-15 +-14 +-14 +-14 +-13 +-11 +-12 +-11 +-11 +-10 +-9 +-9 +-11 +-14 +-16 +-19 +-21 +-24 +-25 +-27 +-28 +-27 +-25 +-22 +-19 +-16 +-12 +-8 +-5 +-3 +-3 +-3 +-4 +-6 +-9 +-13 +-17 +-21 +-24 +-27 +-29 +-31 +-32 +-31 +-29 +-28 +-24 +-18 +-12 +-6 +-2 +-1 +-2 +-4 +-7 +-10 +-12 +-15 +-17 +-18 +-20 +-21 +-20 +-20 +-19 +-19 +-20 +-22 +-22 +-23 +-23 +-22 +-19 +-17 +-14 +-11 +-8 +-7 +-6 +-5 +-5 +-6 +-8 +-11 +-13 +-16 +-19 +-22 +-25 +-28 +-30 +-31 +-30 +-29 +-27 +-24 +-20 +-14 +-9 +-4 +-1 +1 +2 +1 +-2 +-7 +-11 +-16 +-20 +-23 +-26 +-29 +-31 +-31 +-30 +-28 +-25 +-21 +-16 +-13 +-11 +-10 +-10 +-9 +-9 +-10 +-10 +-11 +-12 +-12 +-13 +-13 +-14 +-16 +-19 +-21 +-23 +-25 +-27 +-28 +-26 +-24 +-22 +-18 +-15 +-11 +-8 +-6 +-4 +-4 +-4 +-5 +-8 +-12 +-16 +-19 +-22 +-25 +-28 +-30 +-31 +-30 +-29 +-26 +-24 +-21 +-16 +-11 +-6 +-2 +1 +1 +0 +-3 +-7 +-12 +-16 +-19 +-23 +-26 +-29 +-31 +-31 +-29 +-27 +-22 +-17 +-15 +-13 +-12 +-12 +-11 +-11 +-11 +-11 +-11 +-11 +-12 +-12 +-12 +-12 +-14 +-16 +-18 +-21 +-23 +-25 +-26 +-27 +-26 +-24 +-22 +-20 +-17 +-13 +-9 +-6 +-4 +-4 +-4 +-5 +-6 +-9 +-12 +-16 +-19 +-23 +-26 +-29 +-31 +-32 +-31 +-30 +-28 +-26 +-20 +-15 +-9 +-3 +1 +1 +0 +-3 +-7 +-10 +-13 +-16 +-19 +-21 +-23 +-24 +-24 +-23 +-21 +-20 +-19 +-20 +-20 +-20 +-19 +-18 +-16 +-14 +-12 +-10 +-8 +-7 +-6 +-7 +-10 +-13 +-16 +-19 +-21 +-24 +-25 +-26 +-25 +-24 +-23 +-21 +-18 +-15 +-12 +-9 +-6 +-5 +-4 +-4 +-5 +-6 +-10 +-13 +-17 +-20 +-23 +-26 +-29 +-31 +-31 +-30 +-28 +-25 +-21 +-15 +-9 +-6 +-5 +-6 +-7 +-8 +-10 +-11 +-13 +-15 +-17 +-17 +-17 +-16 +-16 +-18 +-19 +-21 +-22 +-23 +-24 +-24 +-22 +-20 +-17 +-14 +-10 +-8 +-6 +-7 +-9 +-12 +-14 +-16 +-18 +-20 +-22 +-23 +-22 +-22 +-21 +-20 +-18 +-15 +-13 +-11 +-9 +-8 +-8 +-9 +-12 +-15 +-18 +-20 +-22 +-24 +-25 +-25 +-24 +-22 +-19 +-15 +-12 +-11 +-11 +-12 +-13 +-15 +-16 +-17 +-17 +-16 +-16 +-16 +-14 +-13 +-13 +-14 +-15 +-17 +-18 +-20 +-21 +-22 +-22 +-22 +-21 +-19 +-16 +-13 +-10 +-9 +-9 +-11 +-13 +-15 +-17 +-19 +-21 +-21 +-20 +-20 +-20 +-18 +-17 +-14 +-12 +-11 +-10 +-9 +-9 +-9 +-9 +-10 +-11 +-13 +-16 +-18 +-21 +-24 +-26 +-28 +-29 +-28 +-27 +-24 +-21 +-16 +-11 +-7 +-6 +-6 +-7 +-9 +-11 +-12 +-14 +-16 +-17 +-17 +-18 +-17 +-16 +-17 +-18 +-19 +-20 +-21 +-21 +-22 +-21 +-20 +-18 +-16 +-13 +-11 +-8 +-8 +-9 +-11 +-13 +-16 +-18 +-20 +-21 +-23 +-23 +-23 +-23 +-21 +-19 +-17 +-14 +-12 +-10 +-8 +-7 +-6 +-8 +-11 +-14 +-17 +-20 +-22 +-24 +-26 +-27 +-27 +-26 +-23 +-20 +-15 +-11 +-8 +-7 +-8 +-9 +-11 +-13 +-15 +-16 +-17 +-18 +-18 +-18 +-17 +-16 +-16 +-16 +-17 +-18 +-20 +-21 +-21 +-21 +-20 +-19 +-17 +-15 +-12 +-11 +-9 +-8 +-7 +-7 +-9 +-12 +-14 +-16 +-19 +-22 +-24 +-26 +-27 +-27 +-26 +-24 +-21 +-19 +-15 +-11 +-7 +-4 +-2 +-3 +-5 +-9 +-13 +-16 +-19 +-21 +-23 +-25 +-25 +-26 +-24 +-21 +-18 +-16 +-15 +-16 +-16 +-16 +-16 +-15 +-15 +-14 +-13 +-13 +-12 +-11 +-10 +-11 +-13 +-15 +-17 +-20 +-21 +-23 +-24 +-24 +-24 +-22 +-20 +-18 +-15 +-12 +-10 +-7 +-6 +-6 +-8 +-10 +-13 +-16 +-19 +-21 +-23 +-24 +-25 +-25 +-24 +-22 +-20 +-17 +-14 +-11 +-9 +-6 +-5 +-4 +-5 +-8 +-12 +-15 +-18 +-21 +-23 +-25 +-27 +-27 +-27 +-25 +-22 +-19 +-16 +-14 +-13 +-13 +-13 +-13 +-14 +-14 +-14 +-14 +-13 +-13 +-13 +-12 +-12 +-13 +-15 +-17 +-19 +-21 +-23 +-24 +-25 +-25 +-24 +-22 +-19 +-17 +-14 +-10 +-8 +-7 +-7 +-6 +-6 +-7 +-9 +-12 +-15 +-18 +-21 +-24 +-27 +-29 +-30 +-30 +-28 +-26 +-24 +-22 +-17 +-11 +-4 +-1 +0 +-2 +-5 +-9 +-12 +-15 +-18 +-20 +-22 +-23 +-23 +-23 +-21 +-19 +-19 +-19 +-19 +-20 +-20 +-19 +-19 +-18 +-15 +-13 +-10 +-8 +-6 +-5 +-6 +-9 +-12 +-15 +-18 +-20 +-23 +-25 +-26 +-27 +-26 +-25 +-23 +-20 +-17 +-14 +-10 +-7 +-5 +-4 +-4 +-4 +-6 +-10 +-14 +-17 +-21 +-24 +-26 +-28 +-30 +-30 +-28 +-27 +-24 +-21 +-16 +-8 +-4 +-3 +-3 +-5 +-7 +-10 +-12 +-14 +-16 +-18 +-19 +-20 +-20 +-19 +-19 +-19 +-21 +-21 +-22 +-23 +-22 +-21 +-19 +-16 +-13 +-10 +-7 +-5 +-5 +-7 +-10 +-13 +-15 +-18 +-20 +-22 +-23 +-24 +-24 +-24 +-23 +-21 +-18 +-17 +-14 +-11 +-9 +-7 +-5 +-5 +-7 +-10 +-14 +-17 +-20 +-23 +-25 +-27 +-28 +-28 +-27 +-25 +-22 +-19 +-15 +-10 +-6 +-2 +-2 +-4 +-7 +-10 +-14 +-16 +-19 +-21 +-23 +-24 +-24 +-24 +-22 +-19 +-17 +-17 +-17 +-17 +-18 +-17 +-17 +-16 +-15 +-13 +-11 +-10 +-9 +-9 +-9 +-9 +-10 +-11 +-13 +-15 +-17 +-19 +-22 +-25 +-27 +-28 +-29 +-27 +-25 +-22 +-19 +-16 +-11 +-6 +-3 +0 +0 +0 +-3 +-8 +-12 +-16 +-19 +-23 +-25 +-28 +-29 +-30 +-28 +-27 +-23 +-19 +-16 +-14 +-13 +-12 +-11 +-10 +-10 +-10 +-10 +-11 +-11 +-12 +-12 +-13 +-15 +-18 +-20 +-22 +-24 +-25 +-26 +-26 +-25 +-23 +-20 +-17 +-14 +-10 +-6 +-4 +-3 +-4 +-7 +-9 +-13 +-16 +-19 +-22 +-24 +-26 +-27 +-26 +-25 +-23 +-20 +-17 +-13 +-9 +-6 +-4 +-2 +-2 +-4 +-7 +-11 +-15 +-18 +-21 +-24 +-26 +-28 +-29 +-28 +-26 +-24 +-20 +-15 +-13 +-11 +-11 +-11 +-12 +-12 +-13 +-13 +-13 +-14 +-14 +-14 +-13 +-13 +-14 +-16 +-18 +-20 +-22 +-24 +-25 +-26 +-25 +-22 +-20 +-17 +-14 +-11 +-8 +-6 +-5 +-5 +-4 +-6 +-9 +-13 +-16 +-20 +-22 +-25 +-27 +-29 +-30 +-29 +-27 +-24 +-22 +-19 +-14 +-7 +-2 +0 +-1 +-3 +-7 +-10 +-14 +-17 +-20 +-22 +-24 +-25 +-26 +-25 +-23 +-20 +-18 +-17 +-17 +-17 +-17 +-16 +-16 +-14 +-13 +-12 +-11 +-9 +-8 +-8 +-10 +-12 +-15 +-17 +-20 +-22 +-24 +-25 +-26 +-26 +-24 +-22 +-20 +-16 +-12 +-9 +-6 +-5 +-4 +-3 +-4 +-5 +-8 +-12 +-16 +-19 +-23 +-25 +-28 +-31 +-31 +-30 +-28 +-26 +-23 +-18 +-13 +-6 +-1 +0 +-1 +-3 +-7 +-10 +-14 +-16 +-18 +-21 +-22 +-23 +-23 +-22 +-20 +-19 +-19 +-20 +-20 +-20 +-20 +-19 +-17 +-15 +-12 +-10 +-8 +-7 +-7 +-7 +-7 +-8 +-10 +-13 +-16 +-19 +-22 +-24 +-26 +-28 +-30 +-29 +-27 +-25 +-22 +-19 +-15 +-10 +-5 +-2 +0 +0 +-2 +-6 +-10 +-14 +-18 +-21 +-24 +-26 +-28 +-29 +-28 +-26 +-23 +-18 +-15 +-12 +-12 +-11 +-11 +-12 +-13 +-13 +-13 +-13 +-13 +-13 +-13 +-13 +-13 +-15 +-17 +-19 +-21 +-23 +-24 +-25 +-25 +-23 +-21 +-18 +-16 +-13 +-10 +-7 +-5 +-4 +-6 +-9 +-12 +-16 +-18 +-20 +-21 +-23 +-24 +-25 +-25 +-23 +-21 +-18 +-15 +-12 +-9 +-7 +-5 +-4 +-5 +-8 +-11 +-15 +-18 +-21 +-23 +-25 +-26 +-27 +-26 +-24 +-21 +-17 +-13 +-11 +-11 +-12 +-13 +-14 +-14 +-15 +-15 +-15 +-15 +-15 +-15 +-14 +-13 +-12 +-13 +-15 +-17 +-18 +-20 +-22 +-23 +-23 +-23 +-22 +-21 +-18 +-16 +-13 +-11 +-9 +-7 +-6 +-6 +-6 +-8 +-11 +-14 +-17 +-20 +-23 +-25 +-26 +-27 +-27 +-26 +-23 +-20 +-18 +-14 +-10 +-6 +-3 +-3 +-4 +-7 +-10 +-14 +-17 +-19 +-21 +-23 +-24 +-24 +-24 +-22 +-19 +-18 +-17 +-17 +-17 +-17 +-17 +-17 +-16 +-15 +-14 +-13 +-12 +-10 +-8 +-8 +-9 +-12 +-14 +-17 +-19 +-21 +-23 +-25 +-25 +-25 +-24 +-22 +-20 +-17 +-14 +-10 +-7 +-5 +-4 +-3 +-4 +-6 +-9 +-12 +-16 +-20 +-23 +-25 +-28 +-30 +-30 +-29 +-27 +-25 +-23 +-19 +-14 +-7 +-2 +0 +0 +-3 +-6 +-9 +-13 +-16 +-18 +-20 +-22 +-23 +-23 +-23 +-21 +-19 +-19 +-19 +-19 +-20 +-20 +-19 +-18 +-16 +-14 +-11 +-9 +-8 +-6 +-6 +-7 +-10 +-13 +-16 +-18 +-21 +-23 +-25 +-26 +-27 +-26 +-24 +-22 +-19 +-16 +-13 +-9 +-6 +-4 +-3 +-3 +-3 +-6 +-10 +-14 +-17 +-21 +-24 +-26 +-29 +-30 +-30 +-29 +-27 +-25 +-22 +-16 +-8 +-3 +-2 +-3 +-5 +-7 +-10 +-13 +-15 +-17 +-18 +-20 +-20 +-20 +-19 +-18 +-18 +-19 +-20 +-21 +-21 +-22 +-21 +-19 +-17 +-14 +-11 +-9 +-7 +-6 +-5 +-5 +-7 +-9 +-12 +-15 +-18 +-21 +-24 +-27 +-29 +-30 +-29 +-28 +-25 +-22 +-20 +-16 +-11 +-6 +-2 +0 +0 +0 +-3 +-8 +-12 +-16 +-20 +-23 +-26 +-28 +-30 +-31 +-29 +-28 +-26 +-23 +-17 +-10 +-4 +-2 +-2 +-4 +-7 +-9 +-12 +-14 +-16 +-18 +-20 +-20 +-20 +-19 +-18 +-18 +-19 +-20 +-21 +-22 +-22 +-22 +-20 +-18 +-16 +-14 +-11 +-9 +-7 +-6 +-6 +-6 +-7 +-8 +-8 +-10 +-13 +-16 +-19 +-22 +-25 +-27 +-29 +-31 +-30 +-29 +-27 +-25 +-21 +-16 +-11 +-4 +0 +2 +1 +-2 +-5 +-10 +-13 +-16 +-19 +-21 +-23 +-24 +-24 +-24 +-23 +-21 +-20 +-20 +-20 +-20 +-19 +-18 +-16 +-14 +-12 +-10 +-8 +-7 +-5 +-6 +-8 +-12 +-15 +-17 +-20 +-23 +-25 +-26 +-27 +-27 +-25 +-23 +-21 +-17 +-13 +-9 +-6 +-4 +-2 +-2 +-4 +-8 +-12 +-15 +-19 +-22 +-24 +-27 +-28 +-29 +-29 +-26 +-24 +-21 +-18 +-13 +-7 +-3 +-1 +-2 +-5 +-8 +-12 +-15 +-17 +-20 +-21 +-23 +-23 +-23 +-21 +-19 +-18 +-17 +-18 +-18 +-19 +-19 +-18 +-16 +-15 +-13 +-11 +-10 +-9 +-8 +-8 +-8 +-9 +-10 +-11 +-14 +-16 +-19 +-22 +-24 +-27 +-28 +-30 +-29 +-28 +-25 +-22 +-20 +-15 +-10 +-5 +-1 +1 +1 +0 +-3 +-8 +-13 +-17 +-20 +-24 +-26 +-28 +-30 +-30 +-28 +-25 +-20 +-15 +-13 +-11 +-10 +-10 +-10 +-10 +-10 +-10 +-11 +-12 +-12 +-12 +-12 +-13 +-15 +-17 +-19 +-22 +-23 +-25 +-26 +-25 +-24 +-21 +-19 +-16 +-12 +-9 +-7 +-5 +-3 +-3 +-5 +-9 +-12 +-16 +-19 +-23 +-25 +-28 +-29 +-29 +-28 +-25 +-23 +-20 +-16 +-12 +-7 +-4 +-2 +0 +-1 +-4 +-8 +-12 +-16 +-19 +-22 +-25 +-27 +-29 +-29 +-28 +-26 +-22 +-17 +-14 +-11 +-10 +-10 +-10 +-10 +-11 +-11 +-12 +-12 +-13 +-13 +-13 +-13 +-13 +-16 +-18 +-20 +-21 +-23 +-24 +-25 +-24 +-23 +-20 +-18 +-15 +-12 +-9 +-7 +-5 +-4 +-4 +-6 +-9 +-12 +-15 +-18 +-21 +-24 +-26 +-27 +-28 +-27 +-25 +-23 +-20 +-16 +-12 +-7 +-3 +-1 +-2 +-4 +-8 +-12 +-15 +-18 +-21 +-22 +-24 +-25 +-24 +-22 +-19 +-17 +-16 +-16 +-17 +-18 +-18 +-17 +-16 +-16 +-14 +-13 +-11 +-10 +-9 +-9 +-10 +-12 +-15 +-17 +-19 +-21 +-23 +-24 +-24 +-24 +-23 +-21 +-18 +-15 +-12 +-10 +-8 +-7 +-5 +-4 +-5 +-8 +-11 +-16 +-19 +-22 +-24 +-26 +-27 +-28 +-27 +-25 +-22 +-19 +-16 +-12 +-8 +-3 +-1 +-1 +-3 +-6 +-10 +-14 +-17 +-20 +-22 +-24 +-25 +-26 +-25 +-24 +-21 +-19 +-17 +-16 +-16 +-16 +-15 +-15 +-14 +-13 +-12 +-11 +-10 +-9 +-9 +-10 +-12 +-15 +-17 +-19 +-21 +-23 +-25 +-25 +-25 +-24 +-22 +-19 +-16 +-13 +-10 +-8 +-6 +-4 +-4 +-4 +-7 +-10 +-14 +-17 +-20 +-23 +-26 +-27 +-29 +-28 +-27 +-24 +-21 +-16 +-12 +-9 +-8 +-8 +-9 +-10 +-11 +-12 +-12 +-14 +-15 +-15 +-15 +-14 +-14 +-15 +-17 +-19 +-21 +-22 +-23 +-23 +-23 +-21 +-19 +-16 +-12 +-9 +-8 +-8 +-10 +-12 +-14 +-16 +-17 +-18 +-19 +-20 +-20 +-19 +-19 +-17 +-16 +-15 +-13 +-12 +-11 +-9 +-9 +-11 +-13 +-16 +-18 +-20 +-22 +-25 +-25 +-26 +-24 +-22 +-20 +-17 +-14 +-10 +-6 +-4 +-3 +-5 +-7 +-11 +-14 +-16 +-19 +-21 +-22 +-23 +-23 +-22 +-20 +-18 +-17 +-17 +-17 +-18 +-18 +-17 +-17 +-16 +-14 +-12 +-11 +-9 +-8 +-8 +-10 +-13 +-15 +-18 +-21 +-23 +-24 +-24 +-24 +-23 +-21 +-18 +-16 +-13 +-10 +-8 +-6 +-5 +-4 +-5 +-8 +-11 +-15 +-18 +-21 +-23 +-26 +-27 +-28 +-28 +-26 +-23 +-20 +-16 +-11 +-6 +-4 +-4 +-5 +-8 +-10 +-13 +-15 +-17 +-19 +-20 +-21 +-21 +-21 +-19 +-18 +-18 +-18 +-19 +-19 +-19 +-18 +-18 +-16 +-14 +-12 +-10 +-8 +-7 +-9 +-11 +-13 +-16 +-18 +-20 +-22 +-23 +-24 +-24 +-23 +-21 +-19 +-16 +-14 +-10 +-7 +-5 +-4 +-4 +-7 +-10 +-14 +-17 +-19 +-22 +-24 +-26 +-27 +-26 +-24 +-21 +-17 +-13 +-10 +-9 +-9 +-10 +-11 +-13 +-14 +-15 +-15 +-16 +-16 +-15 +-14 +-14 +-14 +-15 +-16 +-18 +-19 +-21 +-22 +-22 +-22 +-20 +-18 +-16 +-12 +-9 +-8 +-9 +-10 +-12 +-15 +-16 +-18 +-19 +-20 +-20 +-21 +-20 +-19 +-17 +-15 +-12 +-11 +-10 +-9 +-8 +-8 +-8 +-10 +-12 +-15 +-18 +-20 +-23 +-25 +-27 +-28 +-28 +-26 +-24 +-21 +-17 +-12 +-7 +-4 +-3 +-4 +-7 +-9 +-12 +-14 +-17 +-18 +-20 +-20 +-20 +-19 +-18 +-17 +-19 +-19 +-20 +-21 +-20 +-20 +-18 +-16 +-13 +-10 +-8 +-6 +-6 +-7 +-10 +-13 +-16 +-18 +-20 +-21 +-23 +-23 +-23 +-23 +-21 +-19 +-17 +-14 +-11 +-8 +-7 +-7 +-9 +-12 +-14 +-16 +-18 +-20 +-22 +-23 +-23 +-23 +-21 +-19 +-17 +-14 +-11 +-8 +-7 +-7 +-9 +-11 +-13 +-15 +-17 +-19 +-20 +-21 +-21 +-21 +-20 +-18 +-17 +-17 +-17 +-18 +-18 +-19 +-19 +-18 +-17 +-16 +-14 +-12 +-11 +-10 +-8 +-8 +-8 +-9 +-12 +-15 +-17 +-20 +-22 +-24 +-25 +-26 +-26 +-25 +-22 +-20 +-16 +-12 +-8 +-5 +-2 +-1 +-2 +-4 +-8 +-12 +-16 +-19 +-21 +-24 +-26 +-27 +-27 +-25 +-23 +-18 +-15 +-13 +-12 +-12 +-12 +-12 +-12 +-12 +-12 +-12 +-12 +-12 +-11 +-11 +-11 +-13 +-15 +-17 +-20 +-22 +-23 +-24 +-25 +-24 +-22 +-20 +-17 +-14 +-11 +-8 +-5 +-4 +-5 +-8 +-11 +-14 +-17 +-20 +-22 +-24 +-25 +-25 +-25 +-23 +-21 +-19 +-16 +-13 +-9 +-7 +-4 +-3 +-4 +-6 +-10 +-13 +-16 +-19 +-22 +-24 +-26 +-27 +-26 +-25 +-22 +-18 +-15 +-13 +-12 +-12 +-12 +-12 +-12 +-12 +-12 +-12 +-12 +-11 +-11 +-11 +-13 +-15 +-17 +-19 +-21 +-23 +-24 +-24 +-24 +-22 +-20 +-16 +-12 +-9 +-8 +-8 +-9 +-11 +-13 +-15 +-16 +-17 +-18 +-19 +-19 +-19 +-18 +-17 +-16 +-15 +-13 +-12 +-11 +-11 +-11 +-10 +-10 +-11 +-13 +-15 +-17 +-20 +-22 +-24 +-25 +-26 +-26 +-24 +-22 +-19 +-14 +-10 +-8 +-7 +-8 +-9 +-11 +-13 +-14 +-15 +-16 +-16 +-16 +-16 +-15 +-14 +-14 +-14 +-16 +-17 +-19 +-20 +-21 +-21 +-21 +-21 +-20 +-17 +-15 +-12 +-11 +-9 +-8 +-7 +-7 +-6 +-8 +-10 +-13 +-16 +-19 +-22 +-25 +-27 +-28 +-29 +-28 +-26 +-24 +-21 +-19 +-15 +-9 +-4 +0 +2 +1 +-1 +-6 +-10 +-14 +-18 +-21 +-23 +-25 +-27 +-27 +-26 +-24 +-20 +-17 +-16 +-15 +-15 +-15 +-15 +-14 +-13 +-12 +-11 +-10 +-9 +-9 +-9 +-10 +-13 +-16 +-18 +-20 +-23 +-24 +-26 +-26 +-25 +-24 +-21 +-19 +-15 +-11 +-8 +-5 +-2 +-1 +-2 +-5 +-9 +-12 +-15 +-18 +-22 +-24 +-27 +-28 +-29 +-27 +-25 +-23 +-20 +-15 +-9 +-4 +-2 +-3 +-5 +-8 +-10 +-13 +-16 +-17 +-19 +-20 +-21 +-20 +-19 +-18 +-17 +-18 +-18 +-21 +-23 +-22 +-21 +-19 +-16 +-14 +-11 +-9 +-6 +-5 +-5 +-7 +-10 +-13 +-16 +-18 +-21 +-23 +-25 +-26 +-26 +-25 +-23 +-21 +-18 +-15 +-12 +-8 +-6 +-4 +-4 +-3 +-2 +-5 +-9 +-12 +-16 +-20 +-23 +-26 +-28 +-30 +-30 +-29 +-28 +-26 +-21 +-16 +-11 +-4 +1 +2 +1 +-2 +-5 +-9 +-13 +-16 +-19 +-21 +-23 +-24 +-24 +-24 +-22 +-21 +-20 +-19 +-19 +-19 +-18 +-17 +-15 +-13 +-11 +-9 +-8 +-7 +-6 +-6 +-8 +-11 +-15 +-17 +-20 +-23 +-25 +-27 +-28 +-26 +-25 +-22 +-19 +-15 +-11 +-7 +-3 +-1 +-1 +-1 +-3 +-7 +-11 +-15 +-19 +-22 +-24 +-27 +-28 +-29 +-28 +-25 +-22 +-17 +-13 +-10 +-8 +-8 +-9 +-9 +-10 +-11 +-12 +-13 +-14 +-14 +-14 +-14 +-14 +-14 +-16 +-18 +-20 +-22 +-23 +-23 +-23 +-22 +-20 +-17 +-15 +-11 +-9 +-6 +-5 +-4 +-5 +-8 +-11 +-14 +-17 +-20 +-22 +-24 +-25 +-26 +-26 +-24 +-22 +-19 +-16 +-13 +-9 +-6 +-4 +-4 +-6 +-9 +-13 +-16 +-18 +-20 +-22 +-24 +-24 +-25 +-23 +-20 +-16 +-14 +-12 +-12 +-12 +-13 +-14 +-15 +-15 +-15 +-15 +-14 +-14 +-14 +-13 +-12 +-11 +-10 +-11 +-12 +-15 +-17 +-19 +-21 +-22 +-24 +-24 +-24 +-23 +-21 +-18 +-16 +-13 +-10 +-7 +-5 +-4 +-5 +-7 +-10 +-14 +-17 +-20 +-22 +-24 +-26 +-26 +-26 +-25 +-22 +-20 +-16 +-13 +-10 +-7 +-4 +-2 +-2 +-4 +-7 +-11 +-15 +-18 +-20 +-23 +-25 +-26 +-27 +-26 +-24 +-21 +-17 +-14 +-13 +-12 +-12 +-12 +-13 +-14 +-13 +-13 +-12 +-12 +-12 +-11 +-11 +-12 +-13 +-16 +-18 +-19 +-21 +-23 +-24 +-24 +-23 +-22 +-20 +-17 +-14 +-11 +-8 +-7 +-5 +-5 +-5 +-5 +-7 +-10 +-13 +-16 +-19 +-22 +-25 +-27 +-29 +-29 +-28 +-26 +-24 +-22 +-17 +-12 +-6 +-1 +1 +1 +-1 +-5 +-9 +-14 +-17 +-19 +-22 +-23 +-24 +-25 +-24 +-22 +-18 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-14 +-13 +-11 +-11 +-10 +-10 +-10 +-10 +-10 +-11 +-13 +-15 +-18 +-20 +-23 +-25 +-26 +-28 +-27 +-25 +-23 +-21 +-17 +-14 +-9 +-6 +-2 +0 +0 +0 +-2 +-6 +-11 +-15 +-19 +-22 +-25 +-27 +-29 +-30 +-29 +-27 +-25 +-23 +-17 +-10 +-5 +-2 +-3 +-4 +-7 +-9 +-12 +-14 +-16 +-18 +-19 +-20 +-19 +-18 +-17 +-17 +-17 +-19 +-20 +-21 +-21 +-21 +-20 +-18 +-16 +-14 +-11 +-8 +-7 +-6 +-6 +-6 +-6 +-7 +-9 +-12 +-15 +-18 +-21 +-24 +-26 +-29 +-30 +-30 +-29 +-27 +-25 +-21 +-16 +-11 +-6 +-2 +1 +2 +2 +0 +-4 +-9 +-13 +-17 +-21 +-24 +-26 +-29 +-30 +-29 +-28 +-25 +-22 +-16 +-12 +-9 +-7 +-7 +-7 +-8 +-9 +-10 +-11 +-13 +-14 +-15 +-15 +-15 +-15 +-16 +-17 +-19 +-21 +-22 +-24 +-24 +-24 +-23 +-21 +-18 +-15 +-12 +-8 +-6 +-4 +-3 +-3 +-4 +-5 +-8 +-11 +-14 +-16 +-20 +-23 +-26 +-29 +-31 +-31 +-30 +-28 +-26 +-21 +-15 +-10 +-3 +1 +2 +1 +-2 +-5 +-9 +-13 +-16 +-18 +-21 +-22 +-23 +-24 +-23 +-21 +-19 +-18 +-19 +-20 +-20 +-19 +-18 +-17 +-15 +-12 +-10 +-8 +-7 +-7 +-7 +-7 +-8 +-9 +-11 +-13 +-15 +-18 +-21 +-24 +-26 +-28 +-29 +-29 +-27 +-25 +-22 +-19 +-15 +-10 +-5 +-1 +0 +1 +0 +-2 +-4 +-8 +-12 +-16 +-19 +-23 +-26 +-29 +-31 +-32 +-31 +-30 +-29 +-24 +-18 +-11 +-5 +-3 +-2 +-3 +-5 +-7 +-9 +-11 +-14 +-15 +-16 +-17 +-16 +-16 +-16 +-16 +-18 +-19 +-21 +-22 +-22 +-23 +-22 +-20 +-18 +-15 +-12 +-10 +-8 +-6 +-5 +-5 +-5 +-6 +-8 +-11 +-14 +-17 +-20 +-23 +-25 +-28 +-30 +-30 +-29 +-27 +-24 +-22 +-18 +-13 +-8 +-3 +0 +1 +2 +0 +-3 +-8 +-12 +-16 +-20 +-23 +-25 +-27 +-29 +-29 +-27 +-25 +-21 +-16 +-13 +-11 +-10 +-10 +-10 +-10 +-10 +-11 +-11 +-12 +-12 +-12 +-13 +-12 +-12 +-13 +-15 +-17 +-19 +-21 +-23 +-25 +-26 +-25 +-24 +-21 +-19 +-16 +-12 +-8 +-5 +-3 +-2 +-2 +-2 +-4 +-6 +-9 +-13 +-17 +-20 +-24 +-27 +-29 +-31 +-31 +-30 +-28 +-26 +-21 +-14 +-7 +-3 +-2 +-3 +-4 +-6 +-9 +-11 +-13 +-15 +-16 +-17 +-18 +-17 +-17 +-17 +-18 +-20 +-22 +-23 +-24 +-24 +-22 +-20 +-17 +-14 +-10 +-7 +-5 +-3 +-3 +-5 +-8 +-12 +-15 +-17 +-20 +-22 +-24 +-25 +-26 +-25 +-24 +-21 +-18 +-16 +-12 +-8 +-5 +-3 +-2 +-3 +-5 +-9 +-13 +-16 +-19 +-22 +-24 +-26 +-27 +-27 +-25 +-23 +-20 +-15 +-11 +-9 +-8 +-8 +-9 +-10 +-11 +-12 +-13 +-14 +-14 +-14 +-14 +-14 +-14 +-15 +-16 +-18 +-19 +-21 +-22 +-22 +-22 +-21 +-19 +-16 +-14 +-11 +-8 +-6 +-5 +-5 +-7 +-10 +-13 +-16 +-18 +-21 +-23 +-24 +-25 +-26 +-24 +-22 +-20 +-17 +-13 +-10 +-7 +-4 +-3 +-3 +-4 +-8 +-11 +-15 +-18 +-21 +-23 +-25 +-27 +-27 +-26 +-24 +-21 +-17 +-13 +-9 +-8 +-8 +-9 +-10 +-11 +-13 +-14 +-15 +-16 +-16 +-16 +-16 +-14 +-13 +-13 +-14 +-16 +-18 +-20 +-21 +-22 +-21 +-21 +-19 +-17 +-15 +-12 +-10 +-8 +-7 +-6 +-5 +-6 +-8 +-10 +-13 +-16 +-19 +-22 +-24 +-26 +-27 +-27 +-26 +-24 +-21 +-18 +-14 +-9 +-5 +-2 +-2 +-3 +-6 +-10 +-13 +-16 +-18 +-20 +-22 +-23 +-23 +-22 +-20 +-18 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-14 +-13 +-11 +-10 +-9 +-8 +-7 +-8 +-10 +-12 +-15 +-18 +-20 +-22 +-24 +-25 +-25 +-25 +-23 +-20 +-18 +-15 +-11 +-8 +-6 +-4 +-3 +-3 +-4 +-6 +-10 +-13 +-17 +-21 +-24 +-27 +-29 +-30 +-29 +-28 +-26 +-24 +-20 +-15 +-9 +-3 +1 +2 +0 +-3 +-6 +-10 +-14 +-17 +-19 +-21 +-23 +-24 +-24 +-22 +-20 +-18 +-17 +-17 +-17 +-17 +-17 +-17 +-16 +-13 +-11 +-9 +-8 +-6 +-6 +-8 +-11 +-13 +-16 +-19 +-21 +-23 +-24 +-25 +-24 +-23 +-21 +-18 +-15 +-12 +-9 +-6 +-4 +-3 +-3 +-6 +-9 +-13 +-16 +-18 +-20 +-23 +-25 +-26 +-26 +-25 +-23 +-20 +-17 +-12 +-7 +-4 +-3 +-4 +-7 +-9 +-12 +-14 +-16 +-18 +-20 +-21 +-21 +-20 +-18 +-16 +-16 +-16 +-16 +-17 +-18 +-19 +-19 +-18 +-16 +-14 +-12 +-10 +-8 +-7 +-8 +-10 +-13 +-15 +-17 +-19 +-21 +-22 +-23 +-23 +-22 +-21 +-18 +-16 +-13 +-10 +-8 +-6 +-5 +-4 +-5 +-8 +-10 +-13 +-16 +-19 +-23 +-25 +-27 +-27 +-25 +-24 +-21 +-18 +-14 +-9 +-5 +-3 +-3 +-5 +-8 +-11 +-13 +-16 +-18 +-19 +-20 +-21 +-20 +-19 +-17 +-16 +-16 +-17 +-18 +-18 +-18 +-18 +-17 +-16 +-14 +-12 +-10 +-8 +-6 +-7 +-8 +-11 +-14 +-17 +-19 +-21 +-23 +-24 +-24 +-23 +-21 +-19 +-17 +-14 +-11 +-8 +-6 +-5 +-5 +-5 +-4 +-6 +-9 +-12 +-16 +-19 +-22 +-25 +-27 +-29 +-28 +-27 +-24 +-21 +-16 +-11 +-7 +-6 +-6 +-7 +-8 +-10 +-11 +-12 +-14 +-15 +-16 +-15 +-15 +-15 +-15 +-16 +-18 +-20 +-22 +-22 +-22 +-22 +-20 +-18 +-16 +-13 +-10 +-7 +-6 +-7 +-9 +-11 +-14 +-16 +-18 +-20 +-21 +-21 +-21 +-21 +-20 +-18 +-16 +-14 +-11 +-9 +-8 +-7 +-7 +-7 +-7 +-9 +-11 +-13 +-16 +-20 +-22 +-25 +-27 +-28 +-27 +-26 +-24 +-21 +-16 +-11 +-7 +-6 +-6 +-7 +-8 +-10 +-12 +-14 +-15 +-16 +-16 +-16 +-16 +-15 +-14 +-15 +-16 +-17 +-19 +-20 +-20 +-20 +-20 +-19 +-17 +-15 +-13 +-10 +-9 +-8 +-7 +-6 +-6 +-6 +-10 +-13 +-16 +-18 +-21 +-23 +-25 +-26 +-27 +-26 +-24 +-22 +-19 +-16 +-12 +-7 +-3 +-1 +-1 +-3 +-7 +-10 +-14 +-16 +-19 +-21 +-22 +-23 +-22 +-21 +-19 +-18 +-18 +-18 +-19 +-19 +-19 +-18 +-16 +-14 +-11 +-9 +-7 +-5 +-4 +-5 +-8 +-10 +-13 +-16 +-18 +-20 +-21 +-23 +-23 +-23 +-23 +-21 +-19 +-16 +-13 +-10 +-7 +-6 +-6 +-8 +-11 +-14 +-16 +-18 +-20 +-21 +-22 +-22 +-22 +-21 +-19 +-17 +-15 +-12 +-9 +-7 +-6 +-5 +-5 +-8 +-11 +-13 +-17 +-19 +-22 +-23 +-24 +-24 +-23 +-21 +-18 +-15 +-13 +-12 +-12 +-13 +-14 +-14 +-14 +-14 +-14 +-13 +-13 +-11 +-10 +-9 +-10 +-12 +-14 +-16 +-18 +-20 +-21 +-22 +-23 +-23 +-21 +-19 +-17 +-14 +-11 +-9 +-7 +-5 +-4 +-6 +-7 +-10 +-14 +-16 +-19 +-21 +-23 +-25 +-26 +-26 +-24 +-22 +-19 +-16 +-12 +-8 +-5 +-4 +-5 +-7 +-9 +-12 +-14 +-16 +-18 +-19 +-20 +-20 +-19 +-17 +-16 +-16 +-16 +-17 +-18 +-18 +-18 +-18 +-17 +-16 +-14 +-13 +-11 +-8 +-7 +-8 +-10 +-12 +-15 +-17 +-19 +-20 +-22 +-22 +-22 +-22 +-20 +-18 +-16 +-13 +-11 +-8 +-6 +-5 +-5 +-7 +-10 +-13 +-16 +-19 +-21 +-23 +-24 +-23 +-24 +-22 +-21 +-18 +-15 +-11 +-7 +-4 +-3 +-4 +-6 +-9 +-12 +-14 +-17 +-19 +-20 +-21 +-21 +-21 +-19 +-17 +-16 +-16 +-16 +-17 +-18 +-18 +-17 +-16 +-15 +-14 +-12 +-10 +-8 +-7 +-8 +-10 +-13 +-15 +-17 +-19 +-21 +-22 +-23 +-23 +-22 +-21 +-18 +-16 +-13 +-10 +-8 +-6 +-5 +-4 +-5 +-8 +-11 +-14 +-17 +-20 +-22 +-24 +-25 +-26 +-25 +-23 +-21 +-18 +-14 +-9 +-4 +-2 +-3 +-4 +-7 +-10 +-13 +-15 +-17 +-19 +-20 +-21 +-21 +-19 +-18 +-16 +-16 +-17 +-18 +-18 +-18 +-18 +-18 +-17 +-15 +-12 +-10 +-8 +-6 +-7 +-8 +-11 +-14 +-16 +-19 +-21 +-22 +-23 +-23 +-23 +-21 +-19 +-17 +-14 +-11 +-9 +-7 +-5 +-4 +-4 +-7 +-10 +-13 +-16 +-18 +-20 +-23 +-25 +-26 +-26 +-24 +-22 +-20 +-16 +-11 +-7 +-4 +-3 +-5 +-7 +-9 +-12 +-14 +-16 +-18 +-19 +-20 +-21 +-19 +-18 +-16 +-15 +-16 +-16 +-17 +-17 +-18 +-18 +-18 +-16 +-14 +-12 +-11 +-9 +-9 +-8 +-8 +-8 +-9 +-11 +-13 +-16 +-18 +-21 +-23 +-25 +-27 +-27 +-26 +-25 +-22 +-19 +-16 +-12 +-7 +-3 +-1 +0 +1 +0 +-4 +-8 +-13 +-18 +-20 +-23 +-25 +-27 +-27 +-26 +-24 +-21 +-16 +-13 +-11 +-11 +-10 +-10 +-10 +-10 +-10 +-10 +-10 +-11 +-11 +-10 +-11 +-13 +-16 +-18 +-20 +-22 +-23 +-24 +-24 +-23 +-21 +-18 +-15 +-10 +-7 +-6 +-7 +-9 +-11 +-14 +-15 +-17 +-18 +-18 +-19 +-18 +-17 +-16 +-15 +-13 +-12 +-11 +-10 +-9 +-9 +-9 +-8 +-9 +-11 +-13 +-16 +-19 +-21 +-23 +-25 +-26 +-25 +-24 +-21 +-18 +-13 +-9 +-7 +-6 +-7 +-9 +-10 +-12 +-13 +-14 +-15 +-16 +-16 +-15 +-15 +-14 +-14 +-14 +-16 +-18 +-19 +-20 +-20 +-20 +-19 +-18 +-16 +-15 +-12 +-11 +-9 +-8 +-7 +-6 +-7 +-9 +-12 +-15 +-17 +-20 +-22 +-24 +-25 +-26 +-25 +-23 +-21 +-18 +-15 +-11 +-8 +-5 +-3 +-1 +-2 +-4 +-8 +-12 +-16 +-19 +-21 +-24 +-25 +-26 +-26 +-24 +-21 +-17 +-14 +-12 +-11 +-11 +-11 +-12 +-12 +-13 +-12 +-13 +-12 +-12 +-11 +-11 +-11 +-12 +-14 +-16 +-18 +-19 +-21 +-22 +-23 +-23 +-22 +-20 +-17 +-14 +-11 +-9 +-7 +-5 +-4 +-3 +-5 +-8 +-11 +-14 +-17 +-20 +-22 +-24 +-26 +-27 +-27 +-25 +-23 +-21 +-17 +-14 +-9 +-4 +-1 +1 +0 +-3 +-7 +-11 +-15 +-17 +-20 +-22 +-24 +-25 +-25 +-23 +-20 +-18 +-16 +-16 +-15 +-15 +-15 +-14 +-13 +-12 +-11 +-10 +-9 +-8 +-7 +-7 +-9 +-11 +-14 +-16 +-19 +-21 +-23 +-24 +-25 +-25 +-23 +-20 +-18 +-15 +-11 +-8 +-5 +-3 +-2 +-2 +-5 +-9 +-12 +-16 +-19 +-22 +-24 +-26 +-27 +-27 +-26 +-23 +-20 +-17 +-14 +-8 +-3 +-1 +-1 +-3 +-6 +-10 +-13 +-16 +-18 +-20 +-21 +-22 +-22 +-21 +-18 +-16 +-15 +-15 +-16 +-16 +-17 +-17 +-16 +-16 +-15 +-14 +-12 +-10 +-8 +-7 +-7 +-9 +-11 +-14 +-16 +-19 +-21 +-23 +-24 +-25 +-24 +-22 +-20 +-18 +-15 +-11 +-8 +-6 +-4 +-4 +-3 +-3 +-5 +-8 +-12 +-15 +-18 +-20 +-23 +-26 +-28 +-28 +-27 +-26 +-23 +-21 +-17 +-9 +-4 +-1 +-1 +-3 +-5 +-8 +-11 +-13 +-16 +-17 +-19 +-19 +-20 +-18 +-17 +-17 +-17 +-18 +-19 +-20 +-21 +-21 +-20 +-17 +-15 +-12 +-10 +-7 +-6 +-5 +-5 +-5 +-6 +-7 +-9 +-12 +-14 +-18 +-20 +-23 +-26 +-28 +-30 +-30 +-28 +-26 +-25 +-21 +-16 +-11 +-5 +-1 +2 +5 +4 +1 +-3 +-8 +-13 +-17 +-20 +-23 +-25 +-27 +-28 +-27 +-25 +-21 +-18 +-16 +-14 +-13 +-12 +-10 +-9 +-9 +-8 +-8 +-8 +-8 +-8 +-8 +-10 +-12 +-15 +-17 +-20 +-22 +-24 +-25 +-26 +-25 +-23 +-21 +-18 +-15 +-11 +-7 +-4 +-1 +-1 +-3 +-6 +-10 +-13 +-16 +-19 +-22 +-24 +-25 +-26 +-25 +-24 +-21 +-19 +-15 +-11 +-7 +-3 +-1 +-1 +-3 +-6 +-10 +-14 +-16 +-19 +-21 +-23 +-24 +-24 +-23 +-21 +-18 +-16 +-15 +-15 +-15 +-15 +-15 +-14 +-13 +-12 +-11 +-10 +-9 +-8 +-7 +-8 +-10 +-13 +-16 +-18 +-20 +-22 +-23 +-25 +-24 +-23 +-21 +-18 +-15 +-12 +-8 +-6 From b4058bc72c169723afaa88a67df524e0e2419b33 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Tue, 29 Sep 2020 17:25:20 +0200 Subject: [PATCH 0695/1047] reorg traces --- doc/extensions_notes.md | 4 +- tools/pm3_tests.sh | 156 +- traces/README.md | 88 + traces/README.txt | 44 - ...F00509C-sim.trace => hf_14a_mfu-sim.trace} | Bin traces/{hf_mfu.trace => hf_14a_mfu.trace} | Bin ...4a_reader.trace => hf_14a_reader_4b.trace} | Bin ...ader.trace => hf_14a_reader_4b_rats.trace} | Bin ...ader.trace => hf_14a_reader_7b_rats.trace} | Bin traces/hf_14b_raw_050008_resp.pm3 | 3072 + ...ff_libnfc.pm3 => hf_sniff_14b_scl3711.pm3} | 0 traces/{lf_t5577.txt => lf_ATA5577.txt} | 0 ...u-FC1-C9.pm3 => lf_ATA5577_HID-FC1-C9.pm3} | 0 ...577_awid_26.pm3 => lf_ATA5577_awid_26.pm3} | 0 ...577_awid_50.pm3 => lf_ATA5577_awid_50.pm3} | 0 ...t5577_em410x.pm3 => lf_ATA5577_em410x.pm3} | 0 ...x_animal.pm3 => lf_ATA5577_fdx_animal.pm3} | 0 ...tended.pm3 => lf_ATA5577_fdx_extended.pm3} | 0 ...gallagher.pm3 => lf_ATA5577_gallagher.pm3} | 0 ...577_gproxii.pm3 => lf_ATA5577_gproxii.pm3} | 0 .../{lf_t5577_hid.pm3 => lf_ATA5577_hid.pm3} | 0 ...t5577_hid_84.pm3 => lf_ATA5577_hid_84.pm3} | 0 ...t5577_indala.pm3 => lf_ATA5577_indala.pm3} | 0 ...dala_224.pm3 => lf_ATA5577_indala_224.pm3} | 0 ..._hedem.pm3 => lf_ATA5577_indala_hedem.pm3} | 0 traces/{lf_t5577_io.pm3 => lf_ATA5577_io.pm3} | 0 ...jablotron.pm3 => lf_ATA5577_jablotron.pm3} | 0 ...{lf_t5577_keri.pm3 => lf_ATA5577_keri.pm3} | 0 ...lid.pm3 => lf_ATA5577_keri_internalid.pm3} | 0 ...keri_msid.pm3 => lf_ATA5577_keri_msid.pm3} | 0 ...7_motorola.pm3 => lf_ATA5577_motorola.pm3} | 0 ...f_t5577_nedap.pm3 => lf_ATA5577_nedap.pm3} | 0 ...7_nexwatch.pm3 => lf_ATA5577_nexwatch.pm3} | 0 ...key.pm3 => lf_ATA5577_nexwatch_nexkey.pm3} | 0 ....pm3 => lf_ATA5577_nexwatch_quadrakey.pm3} | 0 ...577_noralsy.pm3 => lf_ATA5577_noralsy.pm3} | 0 .../{lf_t5577_pac.pm3 => lf_ATA5577_pac.pm3} | 0 ...577_paradox.pm3 => lf_ATA5577_paradox.pm3} | 0 ...t5577_presco.pm3 => lf_ATA5577_presco.pm3} | 0 ...577_pyramid.pm3 => lf_ATA5577_pyramid.pm3} | 0 ...securakey.pm3 => lf_ATA5577_securakey.pm3} | 0 ...t5577_viking.pm3 => lf_ATA5577_viking.pm3} | 0 ...7_visa2000.pm3 => lf_ATA5577_visa2000.pm3} | 0 .../{AWID-15-259.pm3 => lf_AWID-15-259.pm3} | 0 ...-12ed825c29.pm3 => lf_Casi-12ed825c29.pm3} | 0 traces/{EM4102-1.pm3 => lf_EM4102-1.pm3} | 0 traces/{EM4102-2.pm3 => lf_EM4102-2.pm3} | 0 traces/{EM4102-3.pm3 => lf_EM4102-3.pm3} | 0 ...-clamshell.pm3 => lf_EM4102-clamshell.pm3} | 48000 +-- traces/{EM4102-Fob.pm3 => lf_EM4102-fob.pm3} | 0 .../{em4102-thin.pm3 => lf_EM4102-thin.pm3} | 16000 +- traces/{em4x05.pm3 => lf_EM4x05.pm3} | 0 traces/{em4x50.pm3 => lf_EM4x50.pm3} | 0 ...dx_biothermo.pm3 => lf_FDX_Bio-Thermo.pm3} | 0 traces/{gallagher.pm3 => lf_GALLAGHER.pm3} | 79998 ++--- ..._30_14489.pm3 => lf_GProx_36_30_14489.pm3} | 79998 ++--- ...=> lf_HID-proxCardII-05512-11432784-1.pm3} | 0 ...ob-11647.pm3 => lf_HID-weak-fob-11647.pm3} | 0 traces/{homeagain.pm3 => lf_HomeAgain.pm3} | 12000 +- ...homeagain1600.pm3 => lf_HomeAgain1600.pm3} | 32000 +- ...069.pm3 => lf_IDTECK_4944544BAC40E069.pm3} | 0 ...f_idteck_idk50_PSK => lf_IDTECK_idk50_PSK} | 0 ...4725.pm3 => lf_IOProx-XSF-01-3B-44725.pm3} | 0 ...3011.pm3 => lf_IOProx-XSF-01-BE-03011.pm3} | 0 ...1A.pm3 => lf_Indala-00002-12345678-1A.pm3} | 0 ...-504278295.pm3 => lf_Indala-504278295.pm3} | 0 traces/{keri.pm3 => lf_Keri.pm3} | 48000 +-- ...7_00072.pm3 => lf_Motorola_0437_00072.pm3} | 0 ...42.pm3 => lf_NEXWATCH_Nexkey_74755342.pm3} | 0 ...m3 => lf_NEXWATCH_Quadrakey-521512301.pm3} | 0 ...69.pm3 => lf_NEXWATCH_Securakey-64169.pm3} | 0 .../{pac-8E4C058E.pm3 => lf_PAC-8E4C058E.pm3} | 0 ...N08.pm3 => lf_Paradox-96_40426-APJN08.pm3} | 0 ...-biph-50.pm3 => lf_Q5_mod-ask-biph-50.pm3} | 0 ...-man-100.pm3 => lf_Q5_mod-ask-man-100.pm3} | 0 ...-man-128.pm3 => lf_Q5_mod-ask-man-128.pm3} | 0 ...sk-man-16.pm3 => lf_Q5_mod-ask-man-16.pm3} | 0 ...sk-man-32.pm3 => lf_Q5_mod-ask-man-32.pm3} | 0 ...sk-man-40.pm3 => lf_Q5_mod-ask-man-40.pm3} | 0 ...-ask-man-8.pm3 => lf_Q5_mod-ask-man-8.pm3} | 0 ...tion-biphase.pm3 => lf_Q5_mod-biphase.pm3} | 0 ...modulation-data.dat => lf_Q5_mod-data.bin} | Bin ...-direct-32.pm3 => lf_Q5_mod-direct-32.pm3} | 0 ...-direct-40.pm3 => lf_Q5_mod-direct-40.pm3} | 0 ...-direct-50.pm3 => lf_Q5_mod-direct-50.pm3} | 0 ...tion-fsk1-50.pm3 => lf_Q5_mod-fsk1-50.pm3} | 0 ...modulation-fsk1.pm3 => lf_Q5_mod-fsk1.pm3} | 0 ...on-fsk1a-50.pm3 => lf_Q5_mod-fsk1a-50.pm3} | 0 ...tion-fsk2-50.pm3 => lf_Q5_mod-fsk2-50.pm3} | 0 ...modulation-fsk2.pm3 => lf_Q5_mod-fsk2.pm3} | 0 ...on-fsk2a-40.pm3 => lf_Q5_mod-fsk2a-40.pm3} | 0 ...on-fsk2a-50.pm3 => lf_Q5_mod-fsk2a-50.pm3} | 0 ...anchester.pm3 => lf_Q5_mod-manchester.pm3} | 0 .../{modulation-nrz.pm3 => lf_Q5_mod-nrz.pm3} | 0 ...-psk1-32-4.pm3 => lf_Q5_mod-psk1-32-4.pm3} | 0 ...-psk1-64-8.pm3 => lf_Q5_mod-psk1-64-8.pm3} | 0 ...modulation-psk1.pm3 => lf_Q5_mod-psk1.pm3} | 0 ...-psk2-32-2.pm3 => lf_Q5_mod-psk2-32-2.pm3} | 0 ...modulation-psk2.pm3 => lf_Q5_mod-psk2.pm3} | 0 ...-psk3-32-8.pm3 => lf_Q5_mod-psk3-32-8.pm3} | 0 ...modulation-psk3.pm3 => lf_Q5_mod-psk3.pm3} | 0 traces/{TITEST.TXT => lf_TI_test.pm3} | 256000 +++++++-------- ...sit999-best.pm3 => lf_Transit999-best.pm3} | 80000 ++--- traces/{visa2000.pm3 => lf_VISA2000.pm3} | 0 ...6.pm3 => lf_VeriChip_1022000000084146.pm3} | 0 ...3 => lf_sniff_ht2-BC3B8810-acg-reader.pm3} | 0 ...> lf_sniff_ht2-BC3B8810-frosch-reader.pm3} | 0 ... lf_sniff_ht2-BC3B8810-rfidler-reader.pm3} | 0 108 files changed, 329238 insertions(+), 326122 deletions(-) create mode 100644 traces/README.md delete mode 100644 traces/README.txt rename traces/{hf-mfu-0466D65F00509C-sim.trace => hf_14a_mfu-sim.trace} (100%) rename traces/{hf_mfu.trace => hf_14a_mfu.trace} (100%) rename traces/{hf_14a_reader.trace => hf_14a_reader_4b.trace} (100%) rename traces/{hf_mdes_reader.trace => hf_14a_reader_4b_rats.trace} (100%) rename traces/{hf_mdes_oyster_reader.trace => hf_14a_reader_7b_rats.trace} (100%) create mode 100644 traces/hf_14b_raw_050008_resp.pm3 rename traces/{hf_14b_sniff_libnfc.pm3 => hf_sniff_14b_scl3711.pm3} (100%) rename traces/{lf_t5577.txt => lf_ATA5577.txt} (100%) rename traces/{ATA5577-HIDemu-FC1-C9.pm3 => lf_ATA5577_HID-FC1-C9.pm3} (100%) rename traces/{lf_t5577_awid_26.pm3 => lf_ATA5577_awid_26.pm3} (100%) rename traces/{lf_t5577_awid_50.pm3 => lf_ATA5577_awid_50.pm3} (100%) rename traces/{lf_t5577_em410x.pm3 => lf_ATA5577_em410x.pm3} (100%) rename traces/{lf_t5577_fdx_animal.pm3 => lf_ATA5577_fdx_animal.pm3} (100%) rename traces/{lf_t5577_fdx_extended.pm3 => lf_ATA5577_fdx_extended.pm3} (100%) rename traces/{lf_t5577_gallagher.pm3 => lf_ATA5577_gallagher.pm3} (100%) rename traces/{lf_t5577_gproxii.pm3 => lf_ATA5577_gproxii.pm3} (100%) rename traces/{lf_t5577_hid.pm3 => lf_ATA5577_hid.pm3} (100%) rename traces/{lf_t5577_hid_84.pm3 => lf_ATA5577_hid_84.pm3} (100%) rename traces/{lf_t5577_indala.pm3 => lf_ATA5577_indala.pm3} (100%) rename traces/{lf_t5577_indala_224.pm3 => lf_ATA5577_indala_224.pm3} (100%) rename traces/{lf_t5577_indala_hedem.pm3 => lf_ATA5577_indala_hedem.pm3} (100%) rename traces/{lf_t5577_io.pm3 => lf_ATA5577_io.pm3} (100%) rename traces/{lf_t5577_jablotron.pm3 => lf_ATA5577_jablotron.pm3} (100%) rename traces/{lf_t5577_keri.pm3 => lf_ATA5577_keri.pm3} (100%) rename traces/{lf_t5577_keri_internalid.pm3 => lf_ATA5577_keri_internalid.pm3} (100%) rename traces/{lf_t5577_keri_msid.pm3 => lf_ATA5577_keri_msid.pm3} (100%) rename traces/{lf_t5577_motorola.pm3 => lf_ATA5577_motorola.pm3} (100%) rename traces/{lf_t5577_nedap.pm3 => lf_ATA5577_nedap.pm3} (100%) rename traces/{lf_t5577_nexwatch.pm3 => lf_ATA5577_nexwatch.pm3} (100%) rename traces/{lf_t5577_nexwatch_nexkey.pm3 => lf_ATA5577_nexwatch_nexkey.pm3} (100%) rename traces/{lf_t5577_nexwatch_quadrakey.pm3 => lf_ATA5577_nexwatch_quadrakey.pm3} (100%) rename traces/{lf_t5577_noralsy.pm3 => lf_ATA5577_noralsy.pm3} (100%) rename traces/{lf_t5577_pac.pm3 => lf_ATA5577_pac.pm3} (100%) rename traces/{lf_t5577_paradox.pm3 => lf_ATA5577_paradox.pm3} (100%) rename traces/{lf_t5577_presco.pm3 => lf_ATA5577_presco.pm3} (100%) rename traces/{lf_t5577_pyramid.pm3 => lf_ATA5577_pyramid.pm3} (100%) rename traces/{lf_t5577_securakey.pm3 => lf_ATA5577_securakey.pm3} (100%) rename traces/{lf_t5577_viking.pm3 => lf_ATA5577_viking.pm3} (100%) rename traces/{lf_t5577_visa2000.pm3 => lf_ATA5577_visa2000.pm3} (100%) rename traces/{AWID-15-259.pm3 => lf_AWID-15-259.pm3} (100%) rename traces/{Casi-12ed825c29.pm3 => lf_Casi-12ed825c29.pm3} (100%) rename traces/{EM4102-1.pm3 => lf_EM4102-1.pm3} (100%) rename traces/{EM4102-2.pm3 => lf_EM4102-2.pm3} (100%) rename traces/{EM4102-3.pm3 => lf_EM4102-3.pm3} (100%) rename traces/{em4102-clamshell.pm3 => lf_EM4102-clamshell.pm3} (78%) rename traces/{EM4102-Fob.pm3 => lf_EM4102-fob.pm3} (100%) rename traces/{em4102-thin.pm3 => lf_EM4102-thin.pm3} (78%) rename traces/{em4x05.pm3 => lf_EM4x05.pm3} (100%) rename traces/{em4x50.pm3 => lf_EM4x50.pm3} (100%) rename traces/{lf_fdx_biothermo.pm3 => lf_FDX_Bio-Thermo.pm3} (100%) rename traces/{gallagher.pm3 => lf_GALLAGHER.pm3} (81%) rename traces/{lf_gprox_36_30_14489.pm3 => lf_GProx_36_30_14489.pm3} (80%) rename traces/{hid-proxCardII-05512-11432784-1.pm3 => lf_HID-proxCardII-05512-11432784-1.pm3} (100%) rename traces/{HID-weak-fob-11647.pm3 => lf_HID-weak-fob-11647.pm3} (100%) rename traces/{homeagain.pm3 => lf_HomeAgain.pm3} (78%) rename traces/{homeagain1600.pm3 => lf_HomeAgain1600.pm3} (78%) rename traces/{lf_idteck_4944544BAC40E069.pm3 => lf_IDTECK_4944544BAC40E069.pm3} (100%) rename traces/{lf_idteck_idk50_PSK => lf_IDTECK_idk50_PSK} (100%) rename traces/{ioprox-XSF-01-3B-44725.pm3 => lf_IOProx-XSF-01-3B-44725.pm3} (100%) rename traces/{ioProx-XSF-01-BE-03011.pm3 => lf_IOProx-XSF-01-BE-03011.pm3} (100%) rename traces/{indala-00002-12345678-1A.pm3 => lf_Indala-00002-12345678-1A.pm3} (100%) rename traces/{indala-504278295.pm3 => lf_Indala-504278295.pm3} (100%) rename traces/{keri.pm3 => lf_Keri.pm3} (80%) rename traces/{motorola_0437_00072.pm3 => lf_Motorola_0437_00072.pm3} (100%) rename traces/{nexkey_74755342.pm3 => lf_NEXWATCH_Nexkey_74755342.pm3} (100%) rename traces/{quadrakey-521512301.pm3 => lf_NEXWATCH_Quadrakey-521512301.pm3} (100%) rename traces/{securakey-64169.pm3 => lf_NEXWATCH_Securakey-64169.pm3} (100%) rename traces/{pac-8E4C058E.pm3 => lf_PAC-8E4C058E.pm3} (100%) rename traces/{Paradox-96_40426-APJN08.pm3 => lf_Paradox-96_40426-APJN08.pm3} (100%) rename traces/{modulation-ask-biph-50.pm3 => lf_Q5_mod-ask-biph-50.pm3} (100%) rename traces/{modulation-ask-man-100.pm3 => lf_Q5_mod-ask-man-100.pm3} (100%) rename traces/{modulation-ask-man-128.pm3 => lf_Q5_mod-ask-man-128.pm3} (100%) rename traces/{modulation-ask-man-16.pm3 => lf_Q5_mod-ask-man-16.pm3} (100%) rename traces/{modulation-ask-man-32.pm3 => lf_Q5_mod-ask-man-32.pm3} (100%) rename traces/{modulation-ask-man-40.pm3 => lf_Q5_mod-ask-man-40.pm3} (100%) rename traces/{modulation-ask-man-8.pm3 => lf_Q5_mod-ask-man-8.pm3} (100%) rename traces/{modulation-biphase.pm3 => lf_Q5_mod-biphase.pm3} (100%) rename traces/{modulation-data.dat => lf_Q5_mod-data.bin} (100%) rename traces/{modulation-direct-32.pm3 => lf_Q5_mod-direct-32.pm3} (100%) rename traces/{modulation-direct-40.pm3 => lf_Q5_mod-direct-40.pm3} (100%) rename traces/{modulation-direct-50.pm3 => lf_Q5_mod-direct-50.pm3} (100%) rename traces/{modulation-fsk1-50.pm3 => lf_Q5_mod-fsk1-50.pm3} (100%) rename traces/{modulation-fsk1.pm3 => lf_Q5_mod-fsk1.pm3} (100%) rename traces/{modulation-fsk1a-50.pm3 => lf_Q5_mod-fsk1a-50.pm3} (100%) rename traces/{modulation-fsk2-50.pm3 => lf_Q5_mod-fsk2-50.pm3} (100%) rename traces/{modulation-fsk2.pm3 => lf_Q5_mod-fsk2.pm3} (100%) rename traces/{modulation-fsk2a-40.pm3 => lf_Q5_mod-fsk2a-40.pm3} (100%) rename traces/{modulation-fsk2a-50.pm3 => lf_Q5_mod-fsk2a-50.pm3} (100%) rename traces/{modulation-manchester.pm3 => lf_Q5_mod-manchester.pm3} (100%) rename traces/{modulation-nrz.pm3 => lf_Q5_mod-nrz.pm3} (100%) rename traces/{modulation-psk1-32-4.pm3 => lf_Q5_mod-psk1-32-4.pm3} (100%) rename traces/{modulation-psk1-64-8.pm3 => lf_Q5_mod-psk1-64-8.pm3} (100%) rename traces/{modulation-psk1.pm3 => lf_Q5_mod-psk1.pm3} (100%) rename traces/{modulation-psk2-32-2.pm3 => lf_Q5_mod-psk2-32-2.pm3} (100%) rename traces/{modulation-psk2.pm3 => lf_Q5_mod-psk2.pm3} (100%) rename traces/{modulation-psk3-32-8.pm3 => lf_Q5_mod-psk3-32-8.pm3} (100%) rename traces/{modulation-psk3.pm3 => lf_Q5_mod-psk3.pm3} (100%) rename traces/{TITEST.TXT => lf_TI_test.pm3} (71%) rename traces/{Transit999-best.pm3 => lf_Transit999-best.pm3} (80%) rename traces/{visa2000.pm3 => lf_VISA2000.pm3} (100%) rename traces/{verichip_1022000000084146.pm3 => lf_VeriChip_1022000000084146.pm3} (100%) rename traces/{sniff-ht2-BC3B8810-acg-reader.pm3 => lf_sniff_ht2-BC3B8810-acg-reader.pm3} (100%) rename traces/{sniff-ht2-BC3B8810-frosch-reader.pm3 => lf_sniff_ht2-BC3B8810-frosch-reader.pm3} (100%) rename traces/{sniff-ht2-BC3B8810-rfidler-reader.pm3 => lf_sniff_ht2-BC3B8810-rfidler-reader.pm3} (100%) diff --git a/doc/extensions_notes.md b/doc/extensions_notes.md index f42823d64..d633dc8ed 100644 --- a/doc/extensions_notes.md +++ b/doc/extensions_notes.md @@ -15,6 +15,6 @@ The Proxmark3 client uses a wide range of files. Here is a brief recap to get yo | .lua | text file, contains lua script to be run inside client. or called with -l | | .pm3 | text file, with numbers ranging 0-255 or -127 - 128. Contains trace signal data for low frequency tags (data load / data save) | | .wav | binary file, PCM8 with samplerate 125000, one channel. (data save) -| .trace | binary file, contains trace log data usually from high frequency tags. (hw trace load) | +| .trace | binary file, contains trace log data usually from high frequency tags. (trace load) | | .log | text file, our log file, contains the output from almost all commands you run inside Proxmark3 client | -| .history | text file, our command log file, contains the commands you ran inside Proxmark3 client | \ No newline at end of file +| .history | text file, our command log file, contains the commands you ran inside Proxmark3 client | diff --git a/tools/pm3_tests.sh b/tools/pm3_tests.sh index 577021cb7..616629cde 100755 --- a/tools/pm3_tests.sh +++ b/tools/pm3_tests.sh @@ -332,116 +332,116 @@ while true; do if ! CheckExecute "reveng -g test" "$CLIENTBIN -c 'reveng -g abda202c'" "CRC-16/ISO-IEC-14443-3-A"; then break; fi if ! CheckExecute "reveng -w test" "$CLIENTBIN -c 'reveng -w 8 -s 01020304e3 010204039d'" "CRC-8/SMBUS"; then break; fi if ! CheckExecute "mfu pwdgen test" "$CLIENTBIN -c 'hf mfu pwdgen t'" "Selftest OK"; then break; fi - if ! CheckExecute "trace load/list 14a" "$CLIENTBIN -c 'trace load traces/hf_mfu.trace; trace list 1;'" "READBLOCK(8)"; then break; fi - if ! CheckExecute "trace load/list x" "$CLIENTBIN -c 'trace load traces/hf_mfu.trace; trace list x 1;'" "0.0101840425"; then break; fi + if ! CheckExecute "trace load/list 14a" "$CLIENTBIN -c 'trace load traces/hf_14a_mfu.trace; trace list 1;'" "READBLOCK(8)"; then break; fi + if ! CheckExecute "trace load/list x" "$CLIENTBIN -c 'trace load traces/hf_14a_mfu.trace; trace list x 1;'" "0.0101840425"; then break; fi echo -e "\n${C_BLUE}Testing LF:${C_NC}" - if ! CheckExecute "lf EM4x05 test" "$CLIENTBIN -c 'data load traces/em4x05.pm3;lf search 1'" "FDX-B ID found"; then break; fi - if ! CheckExecute "lf EM410x test" "$CLIENTBIN -c 'data load traces/EM4102-1.pm3;lf search 1'" "EM410x ID found"; then break; fi - if ! CheckExecute "lf VISA2000 test" "$CLIENTBIN -c 'data load traces/visa2000.pm3;lf search 1'" "Visa2000 ID found"; then break; fi - if ! CheckExecute "lf AWID test" "$CLIENTBIN -c 'data load traces/AWID-15-259.pm3;lf search 1'" "AWID ID found"; then break; fi - if ! CheckExecute "lf SECURAKEY test" "$CLIENTBIN -c 'data load traces/securakey-64169.pm3;lf search 1 '" "Securakey ID found"; then break; fi - if ! CheckExecute "lf NEXWATCH test" "$CLIENTBIN -c 'data load traces/quadrakey-521512301.pm3;lf search 1 '" "NexWatch ID found"; then break; fi - if ! CheckExecute "lf KERI test" "$CLIENTBIN -c 'data load traces/keri.pm3;lf search 1'" "Pyramid ID found"; then break; fi - if ! CheckExecute "lf HID Prox test" "$CLIENTBIN -c 'data load traces/hid-proxCardII-05512-11432784-1.pm3;lf search 1'" "HID Prox ID found"; then break; fi - if ! CheckExecute "lf PARADOX test" "$CLIENTBIN -c 'data load traces/Paradox-96_40426-APJN08.pm3;lf search 1'" "Paradox ID found"; then break; fi - if ! CheckExecute "lf PAC test" "$CLIENTBIN -c 'data load traces/pac-8E4C058E.pm3;lf search 1'" "PAC/Stanley ID found"; then break; fi - if ! CheckExecute "lf VIKING test" "$CLIENTBIN -c 'data load traces/Transit999-best.pm3;lf search 1'" "Viking ID found"; then break; fi - if ! CheckExecute "lf FDX-B test" "$CLIENTBIN -c 'data load traces/homeagain1600.pm3;lf search 1'" "FDX-B ID found"; then break; fi - if ! CheckExecute "lf INDALA test" "$CLIENTBIN -c 'data load traces/indala-504278295.pm3;lf search 1'" "Indala ID found"; then break; fi - if ! CheckExecute "lf FDX/BioThermo test" "$CLIENTBIN -c 'data load traces/lf_fdx_biothermo.pm3; lf fdx demod'" "95.2 F / 35.1 C"; then break; fi - if ! CheckExecute "lf GPROXII test" "$CLIENTBIN -c 'data load traces/lf_gprox_36_30_14489.pm3; lf search 1'" "Guardall G-Prox II ID found"; then break; fi - if ! CheckExecute "lf IDTECK test" "$CLIENTBIN -c 'data load traces/lf_idteck_4944544BAC40E069.pm3; lf search 1'" "Idteck ID found"; then break; fi + if ! CheckExecute "lf AWID test" "$CLIENTBIN -c 'data load traces/lf_AWID-15-259.pm3;lf search 1'" "AWID ID found"; then break; fi + if ! CheckExecute "lf EM410x test" "$CLIENTBIN -c 'data load traces/lf_EM4102-1.pm3;lf search 1'" "EM410x ID found"; then break; fi + if ! CheckExecute "lf EM4x05 test" "$CLIENTBIN -c 'data load traces/lf_EM4x05.pm3;lf search 1'" "FDX-B ID found"; then break; fi + if ! CheckExecute "lf FDX-B test" "$CLIENTBIN -c 'data load traces/lf_HomeAgain1600.pm3;lf search 1'" "FDX-B ID found"; then break; fi + if ! CheckExecute "lf FDX/BioThermo test" "$CLIENTBIN -c 'data load traces/lf_FDX_Bio-Thermo.pm3; lf fdx demod'" "95.2 F / 35.1 C"; then break; fi + if ! CheckExecute "lf GPROXII test" "$CLIENTBIN -c 'data load traces/lf_GProx_36_30_14489.pm3; lf search 1'" "Guardall G-Prox II ID found"; then break; fi + if ! CheckExecute "lf HID Prox test" "$CLIENTBIN -c 'data load traces/lf_HID-proxCardII-05512-11432784-1.pm3;lf search 1'" "HID Prox ID found"; then break; fi + if ! CheckExecute "lf IDTECK test" "$CLIENTBIN -c 'data load traces/lf_IDTECK_4944544BAC40E069.pm3; lf search 1'" "Idteck ID found"; then break; fi + if ! CheckExecute "lf INDALA test" "$CLIENTBIN -c 'data load traces/lf_Indala-504278295.pm3;lf search 1'" "Indala ID found"; then break; fi + if ! CheckExecute "lf KERI test" "$CLIENTBIN -c 'data load traces/lf_Keri.pm3;lf search 1'" "Pyramid ID found"; then break; fi + if ! CheckExecute "lf NEXWATCH test" "$CLIENTBIN -c 'data load traces/lf_NEXWATCH_Quadrakey-521512301.pm3;lf search 1 '" "NexWatch ID found"; then break; fi + if ! CheckExecute "lf SECURAKEY test" "$CLIENTBIN -c 'data load traces/lf_NEXWATCH_Securakey-64169.pm3;lf search 1 '" "Securakey ID found"; then break; fi + if ! CheckExecute "lf PAC test" "$CLIENTBIN -c 'data load traces/lf_PAC-8E4C058E.pm3;lf search 1'" "PAC/Stanley ID found"; then break; fi + if ! CheckExecute "lf PARADOX test" "$CLIENTBIN -c 'data load traces/lf_Paradox-96_40426-APJN08.pm3;lf search 1'" "Paradox ID found"; then break; fi + if ! CheckExecute "lf VIKING test" "$CLIENTBIN -c 'data load traces/lf_Transit999-best.pm3;lf search 1'" "Viking ID found"; then break; fi + if ! CheckExecute "lf VISA2000 test" "$CLIENTBIN -c 'data load traces/lf_VISA2000.pm3;lf search 1'" "Visa2000 ID found"; then break; fi - if ! CheckExecute slow "lf T55 awid 26 test" "$CLIENTBIN -c 'data load traces/lf_t5577_awid_26.pm3; lf search 1'" "AWID ID found"; then break; fi - if ! CheckExecute slow "lf T55 awid 26 test2" "$CLIENTBIN -c 'data load traces/lf_t5577_awid_26.pm3; lf awid demod'" \ + if ! CheckExecute slow "lf T55 awid 26 test" "$CLIENTBIN -c 'data load traces/lf_ATA5577_awid_26.pm3; lf search 1'" "AWID ID found"; then break; fi + if ! CheckExecute slow "lf T55 awid 26 test2" "$CLIENTBIN -c 'data load traces/lf_ATA5577_awid_26.pm3; lf awid demod'" \ "AWID - len: 26 FC: 224 Card: 1337 - Wiegand: 3c00a73"; then break; fi - if ! CheckExecute slow "lf T55 awid 50 test" "$CLIENTBIN -c 'data load traces/lf_t5577_awid_50.pm3; lf search 1'" "AWID ID found"; then break; fi - if ! CheckExecute slow "lf T55 awid 50 test2" "$CLIENTBIN -c 'data load traces/lf_t5577_awid_50.pm3; lf awid demod'" \ + if ! CheckExecute slow "lf T55 awid 50 test" "$CLIENTBIN -c 'data load traces/lf_ATA5577_awid_50.pm3; lf search 1'" "AWID ID found"; then break; fi + if ! CheckExecute slow "lf T55 awid 50 test2" "$CLIENTBIN -c 'data load traces/lf_ATA5577_awid_50.pm3; lf awid demod'" \ "AWID - len: 50 FC: 2001 Card: 13371337 - Wiegand: 20fa201980f92, Raw: 0128b12eb1811d7117e22111"; then break; fi - if ! CheckExecute slow "lf T55 em410x test" "$CLIENTBIN -c 'data load traces/lf_t5577_em410x.pm3; lf search 1'" "EM410x ID found"; then break; fi - if ! CheckExecute slow "lf T55 em410x test2" "$CLIENTBIN -c 'data load traces/lf_t5577_em410x.pm3; lf em 410x_demod demod'" \ + if ! CheckExecute slow "lf T55 em410x test" "$CLIENTBIN -c 'data load traces/lf_ATA5577_em410x.pm3; lf search 1'" "EM410x ID found"; then break; fi + if ! CheckExecute slow "lf T55 em410x test2" "$CLIENTBIN -c 'data load traces/lf_ATA5577_em410x.pm3; lf em 410x_demod demod'" \ "EM TAG ID : 0F0368568B"; then break; fi - if ! CheckExecute slow "lf T55 fdx_animal test" "$CLIENTBIN -c 'data load traces/lf_t5577_fdx_animal.pm3; lf search 1'" "FDX-B ID found"; then break; fi - if ! CheckExecute slow "lf T55 fdx_animal test2" "$CLIENTBIN -c 'data load traces/lf_t5577_fdx_animal.pm3; lf fdx demod'" \ + if ! CheckExecute slow "lf T55 fdx_animal test" "$CLIENTBIN -c 'data load traces/lf_ATA5577_fdx_animal.pm3; lf search 1'" "FDX-B ID found"; then break; fi + if ! CheckExecute slow "lf T55 fdx_animal test2" "$CLIENTBIN -c 'data load traces/lf_ATA5577_fdx_animal.pm3; lf fdx demod'" \ "Animal ID 0999-000000112233"; then break; fi - if ! CheckExecute slow "lf T55 fdx_extended test" "$CLIENTBIN -c 'data load traces/lf_t5577_fdx_extended.pm3; lf search 1'" "FDX-B ID found"; then break; fi - if ! CheckExecute slow "lf T55 fdx_extended test2" "$CLIENTBIN -c 'data load traces/lf_t5577_fdx_extended.pm3; lf fdx demod'" \ + if ! CheckExecute slow "lf T55 fdx_extended test" "$CLIENTBIN -c 'data load traces/lf_ATA5577_fdx_extended.pm3; lf search 1'" "FDX-B ID found"; then break; fi + if ! CheckExecute slow "lf T55 fdx_extended test2" "$CLIENTBIN -c 'data load traces/lf_ATA5577_fdx_extended.pm3; lf fdx demod'" \ "temperature 95.2 F / 35.1 C"; then break; fi - if ! CheckExecute slow "lf T55 gallagher test" "$CLIENTBIN -c 'data load traces/lf_t5577_gallagher.pm3; lf search 1'" "GALLAGHER ID found"; then break; fi - if ! CheckExecute slow "lf T55 gallagher test2" "$CLIENTBIN -c 'data load traces/lf_t5577_gallagher.pm3; lf gallagher demod'" \ + if ! CheckExecute slow "lf T55 gallagher test" "$CLIENTBIN -c 'data load traces/lf_ATA5577_gallagher.pm3; lf search 1'" "GALLAGHER ID found"; then break; fi + if ! CheckExecute slow "lf T55 gallagher test2" "$CLIENTBIN -c 'data load traces/lf_ATA5577_gallagher.pm3; lf gallagher demod'" \ "GALLAGHER - Region: 0 FC: 27865 CN: 682758 Issue Level: 13"; then break; fi - if ! CheckExecute slow "lf T55 gproxii test" "$CLIENTBIN -c 'data load traces/lf_t5577_gproxii.pm3; lf search 1'" "Guardall G-Prox II ID found"; then break; fi - if ! CheckExecute slow "lf T55 gproxii test2" "$CLIENTBIN -c 'data load traces/lf_t5577_gproxii.pm3; lf gproxii demod'" \ + if ! CheckExecute slow "lf T55 gproxii test" "$CLIENTBIN -c 'data load traces/lf_ATA5577_gproxii.pm3; lf search 1'" "Guardall G-Prox II ID found"; then break; fi + if ! CheckExecute slow "lf T55 gproxii test2" "$CLIENTBIN -c 'data load traces/lf_ATA5577_gproxii.pm3; lf gproxii demod'" \ "G-Prox-II - len: 26 FC: 123 Card: 11223, Raw: f98c7038c63356c7ac26398c"; then break; fi - if ! CheckExecute slow "lf T55 hid test" "$CLIENTBIN -c 'data load traces/lf_t5577_hid.pm3; lf search 1'" "HID Prox ID found"; then break; fi - if ! CheckExecute slow "lf T55 hid test2" "$CLIENTBIN -c 'data load traces/lf_t5577_hid.pm3; lf hid demod'" \ + if ! CheckExecute slow "lf T55 hid test" "$CLIENTBIN -c 'data load traces/lf_ATA5577_hid.pm3; lf search 1'" "HID Prox ID found"; then break; fi + if ! CheckExecute slow "lf T55 hid test2" "$CLIENTBIN -c 'data load traces/lf_ATA5577_hid.pm3; lf hid demod'" \ "HID Prox - 2006ec0c86 (1603) - len: 26 bit - OEM: 000 FC: 118 Card: 1603"; then break; fi - if ! CheckExecute slow "lf T55 hid_84 test" "$CLIENTBIN -c 'data load traces/lf_t5577_hid_84.pm3; lf search 1'" "HID Prox ID found"; then break; fi - if ! CheckExecute slow "lf T55 hid_84 test2" "$CLIENTBIN -c 'data load traces/lf_t5577_hid_84.pm3; lf hid demod'" \ + if ! CheckExecute slow "lf T55 hid_84 test" "$CLIENTBIN -c 'data load traces/lf_ATA5577_hid_84.pm3; lf search 1'" "HID Prox ID found"; then break; fi + if ! CheckExecute slow "lf T55 hid_84 test2" "$CLIENTBIN -c 'data load traces/lf_ATA5577_hid_84.pm3; lf hid demod'" \ "HID Prox - 9e000000000022006ec0c86 (1603)"; then break; fi - if ! CheckExecute slow "lf T55 indala_hedem test" "$CLIENTBIN -c 'data load traces/lf_t5577_indala_hedem.pm3; lf search 1'" "Indala ID found"; then break; fi - if ! CheckExecute slow "lf T55 indala_hedem test2" "$CLIENTBIN -c 'data load traces/lf_t5577_indala_hedem.pm3; lf indala demod'" \ + if ! CheckExecute slow "lf T55 indala_hedem test" "$CLIENTBIN -c 'data load traces/lf_ATA5577_indala_hedem.pm3; lf search 1'" "Indala ID found"; then break; fi + if ! CheckExecute slow "lf T55 indala_hedem test2" "$CLIENTBIN -c 'data load traces/lf_ATA5577_indala_hedem.pm3; lf indala demod'" \ "Heden-2L \| 888"; then break; fi - if ! CheckExecute slow "lf T55 indala test" "$CLIENTBIN -c 'data load traces/lf_t5577_indala.pm3; lf search 1'" "Indala ID found"; then break; fi - if ! CheckExecute slow "lf T55 indala test2" "$CLIENTBIN -c 'data load traces/lf_t5577_indala.pm3; lf indala demod'" \ + if ! CheckExecute slow "lf T55 indala test" "$CLIENTBIN -c 'data load traces/lf_ATA5577_indala.pm3; lf search 1'" "Indala ID found"; then break; fi + if ! CheckExecute slow "lf T55 indala test2" "$CLIENTBIN -c 'data load traces/lf_ATA5577_indala.pm3; lf indala demod'" \ "Fmt 26 FC: 123 Card: 1337 checksum: 10"; then break; fi - if ! CheckExecute slow "lf T55 indala_224 test" "$CLIENTBIN -c 'data load traces/lf_t5577_indala_224.pm3; lf search 1'" "Indala ID found"; then break; fi - if ! CheckExecute slow "lf T55 indala_224 test2" "$CLIENTBIN -c 'data load traces/lf_t5577_indala_224.pm3; lf indala demod'" \ + if ! CheckExecute slow "lf T55 indala_224 test" "$CLIENTBIN -c 'data load traces/lf_ATA5577_indala_224.pm3; lf search 1'" "Indala ID found"; then break; fi + if ! CheckExecute slow "lf T55 indala_224 test2" "$CLIENTBIN -c 'data load traces/lf_ATA5577_indala_224.pm3; lf indala demod'" \ "Indala - len 224, Raw: 80000001b23523a6c2e31eba3cbee4afb3c6ad1fcf649393928c14e5"; then break; fi - if ! CheckExecute slow "lf T55 io test" "$CLIENTBIN -c 'data load traces/lf_t5577_io.pm3; lf search 1'" "IO Prox ID found"; then break; fi - if ! CheckExecute slow "lf T55 io test2" "$CLIENTBIN -c 'data load traces/lf_t5577_io.pm3; lf io demod'" \ + if ! CheckExecute slow "lf T55 io test" "$CLIENTBIN -c 'data load traces/lf_ATA5577_io.pm3; lf search 1'" "IO Prox ID found"; then break; fi + if ! CheckExecute slow "lf T55 io test2" "$CLIENTBIN -c 'data load traces/lf_ATA5577_io.pm3; lf io demod'" \ "IO Prox - XSF(01)01:01337, Raw: 007840603059cf3f (ok)"; then break; fi - if ! CheckExecute slow "lf T55 jablotron test" "$CLIENTBIN -c 'data load traces/lf_t5577_jablotron.pm3; lf search 1'" "Jablotron ID found"; then break; fi - if ! CheckExecute slow "lf T55 jablotron test2" "$CLIENTBIN -c 'data load traces/lf_t5577_jablotron.pm3; lf jablotron demod'" \ + if ! CheckExecute slow "lf T55 jablotron test" "$CLIENTBIN -c 'data load traces/lf_ATA5577_jablotron.pm3; lf search 1'" "Jablotron ID found"; then break; fi + if ! CheckExecute slow "lf T55 jablotron test2" "$CLIENTBIN -c 'data load traces/lf_ATA5577_jablotron.pm3; lf jablotron demod'" \ "Printed: 1410-00-0011-2233"; then break; fi - if ! CheckExecute slow "lf T55 keri test" "$CLIENTBIN -c 'data load traces/lf_t5577_keri.pm3; lf search 1'" "KERI ID found"; then break; fi - if ! CheckExecute slow "lf T55 keri test2" "$CLIENTBIN -c 'data load traces/lf_t5577_keri.pm3; lf keri demod'" \ + if ! CheckExecute slow "lf T55 keri test" "$CLIENTBIN -c 'data load traces/lf_ATA5577_keri.pm3; lf search 1'" "KERI ID found"; then break; fi + if ! CheckExecute slow "lf T55 keri test2" "$CLIENTBIN -c 'data load traces/lf_ATA5577_keri.pm3; lf keri demod'" \ "KERI - Internal ID: 112233, Raw: E00000008001B669"; then break; fi - if ! CheckExecute slow "lf T55 keri_internalid test" "$CLIENTBIN -c 'data load traces/lf_t5577_keri_internalid.pm3; lf search 1'" "KERI ID found"; then break; fi - if ! CheckExecute slow "lf T55 keri_internalid test2" "$CLIENTBIN -c 'data load traces/lf_t5577_keri_internalid.pm3; lf keri demod'" \ + if ! CheckExecute slow "lf T55 keri_internalid test" "$CLIENTBIN -c 'data load traces/lf_ATA5577_keri_internalid.pm3; lf search 1'" "KERI ID found"; then break; fi + if ! CheckExecute slow "lf T55 keri_internalid test2" "$CLIENTBIN -c 'data load traces/lf_ATA5577_keri_internalid.pm3; lf keri demod'" \ "KERI - Internal ID: 12345, Raw: E000000080003039"; then break; fi - if ! CheckExecute slow "lf T55 keri_msid test" "$CLIENTBIN -c 'data load traces/lf_t5577_keri_msid.pm3; lf search 1'" "KERI ID found"; then break; fi - if ! CheckExecute slow "lf T55 keri_msid test2" "$CLIENTBIN -c 'data load traces/lf_t5577_keri_msid.pm3; lf keri demod'" \ + if ! CheckExecute slow "lf T55 keri_msid test" "$CLIENTBIN -c 'data load traces/lf_ATA5577_keri_msid.pm3; lf search 1'" "KERI ID found"; then break; fi + if ! CheckExecute slow "lf T55 keri_msid test2" "$CLIENTBIN -c 'data load traces/lf_ATA5577_keri_msid.pm3; lf keri demod'" \ "Descrambled MS - FC: 6 Card: 12345"; then break; fi -# if ! CheckExecute slow "lf T55 motorola test" "$CLIENTBIN -c 'data load traces/lf_t5577_motorola.pm3; lf search 1'" "Indala ID found"; then break; fi - if ! CheckExecute slow "lf T55 motorola test2" "$CLIENTBIN -c 'data load traces/lf_t5577_motorola.pm3; lf motorola demod'" \ +# if ! CheckExecute slow "lf T55 motorola test" "$CLIENTBIN -c 'data load traces/lf_ATA5577_motorola.pm3; lf search 1'" "Indala ID found"; then break; fi + if ! CheckExecute slow "lf T55 motorola test2" "$CLIENTBIN -c 'data load traces/lf_ATA5577_motorola.pm3; lf motorola demod'" \ "Motorola - fmt: 26 FC: 258 Card: 2, Raw: A0000000A0002021"; then break; fi - if ! CheckExecute slow "lf T55 nedap test" "$CLIENTBIN -c 'data load traces/lf_t5577_nedap.pm3; lf search 1'" "NEDAP ID found"; then break; fi - if ! CheckExecute slow "lf T55 nedap test2" "$CLIENTBIN -c 'data load traces/lf_t5577_nedap.pm3; lf nedap demod'" \ + if ! CheckExecute slow "lf T55 nedap test" "$CLIENTBIN -c 'data load traces/lf_ATA5577_nedap.pm3; lf search 1'" "NEDAP ID found"; then break; fi + if ! CheckExecute slow "lf T55 nedap test2" "$CLIENTBIN -c 'data load traces/lf_ATA5577_nedap.pm3; lf nedap demod'" \ "NEDAP - Card: 12345 subtype: 1 customer code: 123, Raw: FF 82 24 65 08 20 99 53"; then break; fi - if ! CheckExecute slow "lf T55 nexwatch test" "$CLIENTBIN -c 'data load traces/lf_t5577_nexwatch.pm3; lf search 1'" "NexWatch ID found"; then break; fi - if ! CheckExecute slow "lf T55 nexwatch test2" "$CLIENTBIN -c 'data load traces/lf_t5577_nexwatch.pm3; lf nexwatch demod'" \ + if ! CheckExecute slow "lf T55 nexwatch test" "$CLIENTBIN -c 'data load traces/lf_ATA5577_nexwatch.pm3; lf search 1'" "NexWatch ID found"; then break; fi + if ! CheckExecute slow "lf T55 nexwatch test2" "$CLIENTBIN -c 'data load traces/lf_ATA5577_nexwatch.pm3; lf nexwatch demod'" \ "Raw : 56000000213C9F8F150C00"; then break; fi - if ! CheckExecute slow "lf T55 nexwatch_nexkey test" "$CLIENTBIN -c 'data load traces/lf_t5577_nexwatch_nexkey.pm3; lf search 1'" "NexWatch ID found"; then break; fi - if ! CheckExecute slow "lf T55 nexwatch_nexkey test2" "$CLIENTBIN -c 'data load traces/lf_t5577_nexwatch_nexkey.pm3; lf nexwatch demod'" \ + if ! CheckExecute slow "lf T55 nexwatch_nexkey test" "$CLIENTBIN -c 'data load traces/lf_ATA5577_nexwatch_nexkey.pm3; lf search 1'" "NexWatch ID found"; then break; fi + if ! CheckExecute slow "lf T55 nexwatch_nexkey test2" "$CLIENTBIN -c 'data load traces/lf_ATA5577_nexwatch_nexkey.pm3; lf nexwatch demod'" \ "88bit id : 521512301 (0x1f15a56d)"; then break; fi - if ! CheckExecute slow "lf T55 nexwatch_quadrakey test" "$CLIENTBIN -c 'data load traces/lf_t5577_nexwatch_quadrakey.pm3; lf search 1'" "NexWatch ID found"; then break; fi - if ! CheckExecute slow "lf T55 nexwatch_quadrakey test2" "$CLIENTBIN -c 'data load traces/lf_t5577_nexwatch_quadrakey.pm3; lf nexwatch demod'" \ + if ! CheckExecute slow "lf T55 nexwatch_quadrakey test" "$CLIENTBIN -c 'data load traces/lf_ATA5577_nexwatch_quadrakey.pm3; lf search 1'" "NexWatch ID found"; then break; fi + if ! CheckExecute slow "lf T55 nexwatch_quadrakey test2" "$CLIENTBIN -c 'data load traces/lf_ATA5577_nexwatch_quadrakey.pm3; lf nexwatch demod'" \ "88bit id : 521512301 (0x1f15a56d)"; then break; fi - if ! CheckExecute slow "lf T55 noralsy test" "$CLIENTBIN -c 'data load traces/lf_t5577_noralsy.pm3; lf search 1'" "Noralsy ID found"; then break; fi - if ! CheckExecute slow "lf T55 noralsy test2" "$CLIENTBIN -c 'data load traces/lf_t5577_noralsy.pm3; lf noralsy demod'" \ + if ! CheckExecute slow "lf T55 noralsy test" "$CLIENTBIN -c 'data load traces/lf_ATA5577_noralsy.pm3; lf search 1'" "Noralsy ID found"; then break; fi + if ! CheckExecute slow "lf T55 noralsy test2" "$CLIENTBIN -c 'data load traces/lf_ATA5577_noralsy.pm3; lf noralsy demod'" \ "Noralsy - Card: 112233, Year: 2000, Raw: BB0214FF0110002233070000"; then break; fi - if ! CheckExecute slow "lf T55 pac test" "$CLIENTBIN -c 'data load traces/lf_t5577_pac.pm3; lf search 1'" "PAC/Stanley ID found"; then break; fi - if ! CheckExecute slow "lf T55 pac test2" "$CLIENTBIN -c 'data load traces/lf_t5577_pac.pm3; lf pac demod'" \ + if ! CheckExecute slow "lf T55 pac test" "$CLIENTBIN -c 'data load traces/lf_ATA5577_pac.pm3; lf search 1'" "PAC/Stanley ID found"; then break; fi + if ! CheckExecute slow "lf T55 pac test2" "$CLIENTBIN -c 'data load traces/lf_ATA5577_pac.pm3; lf pac demod'" \ "PAC/Stanley - Card: CD4F5552, Raw: FF2049906D8511C593155B56D5B2649F"; then break; fi - if ! CheckExecute slow "lf T55 paradox test" "$CLIENTBIN -c 'data load traces/lf_t5577_paradox.pm3; lf search 1'" "Paradox ID found"; then break; fi - if ! CheckExecute slow "lf T55 paradox test2" "$CLIENTBIN -c 'data load traces/lf_t5577_paradox.pm3; lf paradox demod'" \ + if ! CheckExecute slow "lf T55 paradox test" "$CLIENTBIN -c 'data load traces/lf_ATA5577_paradox.pm3; lf search 1'" "Paradox ID found"; then break; fi + if ! CheckExecute slow "lf T55 paradox test2" "$CLIENTBIN -c 'data load traces/lf_ATA5577_paradox.pm3; lf paradox demod'" \ "Paradox - ID: 004209dea FC: 96 Card: 40426, Checksum: b2, Raw: 0f55555695596a6a9999a59a"; then break; fi - if ! CheckExecute slow "lf T55 presco test" "$CLIENTBIN -c 'data load traces/lf_t5577_presco.pm3; lf search 1'" "Presco ID found"; then break; fi - if ! CheckExecute slow "lf T55 presco test2" "$CLIENTBIN -c 'data load traces/lf_t5577_presco.pm3; lf presco demod'" \ + if ! CheckExecute slow "lf T55 presco test" "$CLIENTBIN -c 'data load traces/lf_ATA5577_presco.pm3; lf search 1'" "Presco ID found"; then break; fi + if ! CheckExecute slow "lf T55 presco test2" "$CLIENTBIN -c 'data load traces/lf_ATA5577_presco.pm3; lf presco demod'" \ "Presco - Card: 1E8021D9, Raw: 10D0000000000000000000001E8021D9"; then break; fi - if ! CheckExecute slow "lf T55 pyramid test" "$CLIENTBIN -c 'data load traces/lf_t5577_pyramid.pm3; lf search 1'" "Pyramid ID found"; then break; fi - if ! CheckExecute slow "lf T55 pyramid test2" "$CLIENTBIN -c 'data load traces/lf_t5577_pyramid.pm3; lf pyramid demod'" \ + if ! CheckExecute slow "lf T55 pyramid test" "$CLIENTBIN -c 'data load traces/lf_ATA5577_pyramid.pm3; lf search 1'" "Pyramid ID found"; then break; fi + if ! CheckExecute slow "lf T55 pyramid test2" "$CLIENTBIN -c 'data load traces/lf_ATA5577_pyramid.pm3; lf pyramid demod'" \ "Pyramid - len: 26, FC: 123 Card: 11223 - Wiegand: 2f657ae, Raw: 00010101010101010101016eb35e5da4"; then break; fi - if ! CheckExecute slow "lf T55 securakey test" "$CLIENTBIN -c 'data load traces/lf_t5577_securakey.pm3; lf search 1'" "Securakey ID found"; then break; fi - if ! CheckExecute slow "lf T55 securakey test2" "$CLIENTBIN -c 'data load traces/lf_t5577_securakey.pm3; lf securakey demod'" \ + if ! CheckExecute slow "lf T55 securakey test" "$CLIENTBIN -c 'data load traces/lf_ATA5577_securakey.pm3; lf search 1'" "Securakey ID found"; then break; fi + if ! CheckExecute slow "lf T55 securakey test2" "$CLIENTBIN -c 'data load traces/lf_ATA5577_securakey.pm3; lf securakey demod'" \ "Securakey - len: 26 FC: 0x35 Card: 64169, Raw: 7FCB400001ADEA5344300000"; then break; fi - if ! CheckExecute slow "lf T55 viking test" "$CLIENTBIN -c 'data load traces/lf_t5577_viking.pm3; lf search 1'" "Viking ID found"; then break; fi - if ! CheckExecute slow "lf T55 viking test2" "$CLIENTBIN -c 'data load traces/lf_t5577_viking.pm3; lf viking demod'" \ + if ! CheckExecute slow "lf T55 viking test" "$CLIENTBIN -c 'data load traces/lf_ATA5577_viking.pm3; lf search 1'" "Viking ID found"; then break; fi + if ! CheckExecute slow "lf T55 viking test2" "$CLIENTBIN -c 'data load traces/lf_ATA5577_viking.pm3; lf viking demod'" \ "Viking - Card 0001A337, Raw: F200000001A337CF"; then break; fi - if ! CheckExecute slow "lf T55 visa2000 test" "$CLIENTBIN -c 'data load traces/lf_t5577_visa2000.pm3; lf search 1'" "Visa2000 ID found"; then break; fi - if ! CheckExecute slow "lf T55 visa2000 test2" "$CLIENTBIN -c 'data load traces/lf_t5577_visa2000.pm3; lf visa2000 demod'" \ + if ! CheckExecute slow "lf T55 visa2000 test" "$CLIENTBIN -c 'data load traces/lf_ATA5577_visa2000.pm3; lf search 1'" "Visa2000 ID found"; then break; fi + if ! CheckExecute slow "lf T55 visa2000 test2" "$CLIENTBIN -c 'data load traces/lf_ATA5577_visa2000.pm3; lf visa2000 demod'" \ "Visa2000 - Card 112233, Raw: 564953320001B66900000183"; then break; fi echo -e "\n${C_BLUE}Testing HF:${C_NC}" diff --git a/traces/README.md b/traces/README.md new file mode 100644 index 000000000..c3878495a --- /dev/null +++ b/traces/README.md @@ -0,0 +1,88 @@ +# Introduction + +* `.pm3` are analog signal files to be loaded with `data load` and displayed with `data plot` +* `.trace` are protocol binary data to be loaded with `trace load` and displayed with `trace list 1` + +# Analog acquisitions + +## LF traces + +|filename|description| +|--------|-----------| +|lf_AWID-15-259.pm3|AWID FSK RF/50 FC: 15 Card: 259 | +|lf_Casi-12ed825c29.pm3|casi rusco 40 bit (EM410x ID: 12ed825c29)| +|lf_EM4102-1.pm3|credit card style card EM4102 tag (ID: 010872e77c)| +|lf_EM4102-2.pm3|credit card style card EM4102 tag (ID: 010872beec)| +|lf_EM4102-3.pm3|credit card style card EM4102 tag (ID: 010872e14f)| +|lf_EM4102-clamshell.pm3|Samy's clamshell EM4102 tag (ID: 1f00d9b3a5)| +|lf_EM4102-fob.pm3|(ID: 0400193cbe)| +|lf_EM4102-thin.pm3|Samy's thin credit-card style EM4102 tag (ID: 1a0041375d)| +|lf_EM4x05.pm3|ear tag FDX-B ISO-11784/5 (ID: 6DB0840800F80001 - Application Identifier: 8000, Country Code: 124 (Canada), National ID: 270601654)| +|lf_EM4x50.pm3|credit card style card EM4x50 tag (ID: DE2A3F00)| +|lf_FDX_Bio-Thermo.pm3|FDX Animal tag with Biosensor| +|lf_GALLAGHER.pm3|GALLAGHER tag| +|lf_GProx_36_30_14489.pm3|G-Prox-II FC: 30 Card: 3949, Format 36b ASK/BIPHASE| +|lf_HID-proxCardII-05512-11432784-1.pm3|clamshell-style HID ProxCard II card| +|lf_HID-weak-fob-11647.pm3|HID 32bit Prox Card#: 11647. very weak tag/read but just readable.| +|lf_HomeAgain.pm3|HomeAgain animal (cat) tag - ID 985121004515220| +|lf_HomeAgain1600.pm3|HomeAgain animal (cat) tag - ID 985121004515220| +|lf_IDTECK_4944544BAC40E069.pm3| IDTECK raw 4944544BAC40E069 , PSK, printed "806 082 43084"| +|lf_IDTECK_idk50_PSK| IDTECK (?)| +|lf_Indala-00002-12345678-1A.pm3|Indala credit-card style card| +|lf_Indala-504278295.pm3|PSK 26 bit indala| +|lf_IOProx-XSF-01-3B-44725.pm3|IO Prox FSK RF/64 ID in name| +|lf_IOProx-XSF-01-BE-03011.pm3|IO Prox FSK RF/64 ID in name| +|lf_Keri.pm3|Keri PSK-3 Key Ring tag (back of tag: 1460 3411)| +|lf_Motorola_0437_00072.pm3|Motorola Grey clamshell card, old. (RAW: A0000000E308C0C1)| +|lf_NEXWATCH_Nexkey_74755342.pm3| NEXWATCH, Nexkey ID: 74755342| +|lf_NEXWATCH_Quadrakey-521512301.pm3|NEXWATCH, Quadrakey ID: 521512301| +|lf_NEXWATCH_Securakey-64169.pm3|Securakey Tag BitLen: 26, Card ID: 64169, FC: 0x35| +|lf_PAC-8E4C058E.pm3|PAC/Stanley 20204/21020 PAC8 tag (ID: 8E4C058E)| +|lf_Paradox-96_40426-APJN08.pm3|PARADOX FC 96 CN 40426| +|lf_TI_test.pm3|TI HDX? test - can't decode it any longer| +|lf_Transit999-best.pm3|Transit 999 format (UID 99531670)| +|lf_VeriChip_1022000000084146.pm3|VeriChip, epoxy encased glasschip (ID: 1022-00000000084146) | +|lf_VISA2000.pm3|VISA2000 ASK/MAN RF/64, Card: 480518| + +## LF test traces + +|filename|description| +|--------|-----------| +|lf_Q5_mod-*|Q5 configured to emit `00 01 02 03 04 05 06 07 08 09 0A 0B` under various modulation schemes| +|lf_Q5_mod-data.bin|Raw data used for lf_Q5_mod-* Q5 configuration| +|lf_ATA5577_*|ATA5577 configured to emulate various techs as suggested in the Proxmark3 clone commands| +|lf_ATA5577.txt|Description on how lf_ATA5577_* were generated| + +## LF sniffed traces + +|filename|description| +|--------|-----------| +|lf_sniff_ht2-BC3B8810-acg-reader.pm3| sniffing of Hitag2 being read by an HID ACG LF Multitag reader| +|lf_sniff_ht2-BC3B8810-frosch-reader.pm3| sniffing of Hitag2 being read by a Frosch Hitag reader| +|lf_sniff_ht2-BC3B8810-rfidler-reader.pm3:| sniffing of Hitag2 being read by a RFIDler| + +## HF traces + +|filename|description| +|--------|-----------| +|hf_14b_raw_050008_resp.pm3| Response to `hf 14b raw -c 050008`| + +## HF sniffed traces + +|filename|description| +|--------|-----------| +|hf_sniff_14b_scl3711.pm3| `hf sniff 15000 2` <> `nfc-list -t 8`: PUPI: c12c8b1b AppData: 00000000 ProtInfo: 917171| + +# Demodulated acquisitions + +## HF demodulated traces + +|filename|description| +|--------|-----------| +|hf_14a_reader_4b.trace|Execution of `hf 14a reader` against a 4b UID card| +|hf_14a_reader_4b_rats.trace|Execution of `hf 14a reader` against a 4b UID card with RATS| +|hf_14a_reader_7b_rats.trace|Execution of `hf 14a reader` against a 7b UID card with RATS| +|hf_14a_mfu.trace|Reading of a password-protected MFU| +|hf_14a_mfu-sim.trace|Trace seen from a Proxmark3 simulating a MFU| +|hf_14b_reader.trace|Execution of `hf 14b reader` against a card| +|hf_15_reader.trace|Execution of `hf 15 reader` against a card| diff --git a/traces/README.txt b/traces/README.txt deleted file mode 100644 index a6fd7b280..000000000 --- a/traces/README.txt +++ /dev/null @@ -1,44 +0,0 @@ -em4102-clamshell.pm3: Samy's clamshell EM4102 tag (ID: 1f00d9b3a5) -em4102-thin.pm3: Samy's thin credit-card style EM4102 tag (ID: 1a0041375d) -EM4102-1.pm3: credit card style card EM4102 tag (ID: 010872e77c) -EM4102-2.pm3: credit card style card EM4102 tag (ID: 010872beec) -EM4102-3.pm3: credit card style card EM4102 tag (ID: 010872e14f) -EM4102-Fob.pm3: (ID: 0400193cbe) -em4x05.pm3: ear tag FDX-B ISO-11784/5 (ID: 6DB0840800F80001 - Application Identifier: 8000, Country Code: 124 (Canada), National ID: 270601654) -em4x50.pm3: credit card style card EM4x50 tag (ID: DE2A3F00) -hid-proxCardII-05512-11432784-1.pm3: clamshell-style HID ProxCard II card -HID-weak-fob-11647.pm3: HID 32bit Prox Card#: 11647. very weak tag/read but just readable. -indala-00002-12345678-1A.pm3: Indala credit-card style card -indala-504278295.pm3: PSK 26 bit indala -homeagain.pm3: HomeAgain animal (cat) tag - ID 985121004515220 -homeagain1600.pm3: HomeAgain animal (cat) tag - ID 985121004515220 -keri.pm3: Keri PSK-3 Key Ring tag (back of tag: 1460 3411) -lf_gprox_36_30_14489.pm3: G-Prox-II FC: 30 Card: 3949, Format 36b ASK/BIPHASE -lf_idteck_4944544BAC40E069.pm3: IDTECK raw 4944544BAC40E069 , PSK, printed "806 082 43084" -Transit999-best.pm3: Transit 999 format (UID 99531670) -ATA5577-HIDemu-FC1-C9.pm3: ata5577 in hid prox 26 bit emulation facility code:1 card#:9 -AWID-15-259.pm3: AWID FSK RF/50 FC: 15 Card: 259 -Casi-12ed825c29.pm3: casi rusco 40 bit (EM410x ID: 12ed825c29) -ioprox-XSF-01-3B-44725.pm3: IO Prox FSK RF/64 ID in name -ioprox-XSF-01-BE-03011.pm3: IO Prox FSK RF/64 ID in name -motorola_0437_00072.pm3: Motorola Grey clamshell card, old. (RAW: A0000000E308C0C1) -nexkey_74755342.pm3: NEXWATCH, Nexkey ID: 74755342 -pac-8E4C058E.pm3: PAC/Stanley 20204/21020 PAC8 tag (ID: 8E4C058E) -quadrakey-521512301.pm3: NEXWATCH, Quadrakey ID: 521512301 -securakey-64169.pm3: Securakey Tag BitLen: 26, Card ID: 64169, FC: 0x35 -verichip_1022000000084146.pm3: VeriChip, epoxy encased glasschip (ID: 1022-00000000084146) -visa2000.pm3: VISA2000 ASK/MAN RF/64, Card: 480518 -Paradox-96_40426-APJN08.pm3: PARADOX FC 96 CN 40426 -TITEST.txt: Texas Instrument - can't decode it any longer -gallagher.pm3: GALLAGHER tag. ---- -sniff-ht2-BC3B8810-acg-reader.pm3: sniffing of Hitag2 being read by an HID ACG LF Multitag reader -sniff-ht2-BC3B8810-frosch-reader.pm3: sniffing of Hitag2 being read by a Frosch Hitag reader -sniff-ht2-BC3B8810-rfidler-reader.pm3: sniffing of Hitag2 being read by a RFIDler ---- -The files 'modulation-'... -are all encoded with identical data (hex 00 01 02 03 04 05 06 07 08 09 0A 0B) -for the purpose of recognition and testing of demodulation schemes. They were created by writing Q5 tags -appropriately configured. The raw data is in 'modulation-data.dat'. ---- -hf_mfu.trace: Tracelog file for a MFU simulation diff --git a/traces/hf-mfu-0466D65F00509C-sim.trace b/traces/hf_14a_mfu-sim.trace similarity index 100% rename from traces/hf-mfu-0466D65F00509C-sim.trace rename to traces/hf_14a_mfu-sim.trace diff --git a/traces/hf_mfu.trace b/traces/hf_14a_mfu.trace similarity index 100% rename from traces/hf_mfu.trace rename to traces/hf_14a_mfu.trace diff --git a/traces/hf_14a_reader.trace b/traces/hf_14a_reader_4b.trace similarity index 100% rename from traces/hf_14a_reader.trace rename to traces/hf_14a_reader_4b.trace diff --git a/traces/hf_mdes_reader.trace b/traces/hf_14a_reader_4b_rats.trace similarity index 100% rename from traces/hf_mdes_reader.trace rename to traces/hf_14a_reader_4b_rats.trace diff --git a/traces/hf_mdes_oyster_reader.trace b/traces/hf_14a_reader_7b_rats.trace similarity index 100% rename from traces/hf_mdes_oyster_reader.trace rename to traces/hf_14a_reader_7b_rats.trace diff --git a/traces/hf_14b_raw_050008_resp.pm3 b/traces/hf_14b_raw_050008_resp.pm3 new file mode 100644 index 000000000..8d376a1ab --- /dev/null +++ b/traces/hf_14b_raw_050008_resp.pm3 @@ -0,0 +1,3072 @@ +-114 +-2 +-3 +-2 +-2 +-2 +-3 +-2 +-3 +-3 +-2 +-2 +-2 +-1 +-2 +-2 +-1 +-2 +-3 +-2 +-2 +-2 +-2 +-2 +-2 +-1 +-2 +-1 +-3 +-3 +-3 +-2 +-2 +-3 +-3 +-2 +-3 +-2 +-2 +-3 +-1 +-1 +-2 +-3 +-2 +-3 +-1 +-2 +-2 +-2 +-2 +-3 +-2 +-3 +-1 +-3 +-1 +-3 +-2 +-1 +-2 +-2 +-2 +-1 +-1 +-2 +-2 +-2 +-2 +-1 +-2 +-1 +-2 +-2 +-3 +-1 +-3 +-3 +-2 +-3 +-2 +-2 +-1 +-3 +-3 +-2 +-3 +-3 +-2 +-1 +-2 +-3 +-3 +-2 +-1 +-3 +-1 +-2 +-2 +0 +-2 +-1 +-3 +-3 +-1 +-3 +-2 +-3 +-2 +-2 +-2 +-2 +-3 +-3 +-3 +-2 +-3 +-2 +-2 +-1 +-1 +-3 +-2 +-2 +-3 +-2 +-1 +-3 +-2 +-2 +-3 +-3 +-3 +-1 +-3 +-2 +-2 +-2 +-1 +-3 +-2 +-3 +-2 +-3 +-2 +-3 +-2 +-1 +-2 +-3 +-2 +-3 +-2 +-2 +-2 +-3 +-2 +0 +-2 +-3 +-2 +-4 +-3 +-2 +-2 +-2 +-2 +-2 +-3 +-2 +-3 +-1 +-2 +-3 +-2 +-3 +-2 +-3 +-3 +-2 +-2 +-1 +-2 +-2 +-1 +-2 +-4 +-2 +-2 +-3 +-1 +0 +-2 +-2 +-3 +-3 +-2 +-4 +-3 +-2 +0 +-2 +-2 +-3 +-3 +-4 +-2 +-3 +127 +127 +127 +41 +127 +-2 +106 +-24 +89 +-40 +75 +-52 +67 +-59 +62 +-61 +63 +-57 +64 +-58 +64 +-60 +62 +-63 +59 +-63 +60 +-60 +62 +-60 +63 +-60 +63 +-62 +60 +-63 +60 +-61 +62 +-61 +62 +-61 +63 +-61 +61 +-62 +61 +-60 +62 +-61 +61 +-61 +63 +-61 +61 +-61 +61 +-61 +61 +-62 +61 +-62 +62 +-61 +61 +-61 +62 +-62 +61 +-62 +61 +-62 +62 +-61 +62 +-61 +61 +-61 +61 +-62 +61 +-61 +62 +-61 +62 +-61 +61 +-62 +61 +-62 +61 +-61 +62 +-61 +61 +-61 +61 +-60 +61 +-61 +61 +-61 +63 +-60 +61 +-62 +60 +-60 +61 +-61 +62 +-61 +62 +-61 +61 +-62 +61 +-60 +62 +-61 +62 +-61 +61 +-61 +61 +-61 +62 +-59 +62 +-61 +61 +-62 +62 +-62 +61 +-61 +61 +-59 +62 +-61 +61 +-62 +63 +-61 +61 +-62 +62 +-60 +61 +-63 +61 +-62 +63 +-61 +61 +-61 +62 +-60 +61 +-62 +61 +-62 +63 +-61 +61 +-61 +61 +-61 +61 +-61 +61 +-61 +63 +-61 +61 +-61 +61 +-59 +61 +-62 +61 +-61 +63 +-61 +61 +-63 +60 +127 +-68 +28 +-93 +39 +-77 +49 +-71 +53 +-69 +57 +-66 +58 +-64 +60 +-61 +62 +-61 +62 +-61 +62 +-61 +60 +-63 +60 +-60 +61 +-61 +62 +-61 +62 +-62 +61 +-62 +60 +-59 +61 +-61 +62 +-61 +63 +-61 +61 +-62 +60 +-60 +62 +-61 +62 +-61 +63 +-61 +61 +-62 +61 +-60 +61 +-61 +61 +-61 +63 +-62 +61 +-61 +62 +-61 +62 +-61 +61 +-62 +61 +-61 +61 +-61 +62 +-60 +62 +-62 +61 +-62 +62 +-61 +61 +-61 +62 +-59 +61 +-62 +61 +-62 +62 +-61 +62 +-61 +61 +-60 +61 +-62 +61 +-61 +63 +-61 +61 +-61 +61 +-62 +61 +-61 +61 +-61 +62 +-60 +61 +-62 +61 +-59 +61 +-61 +61 +-61 +63 +-61 +61 +-62 +61 +-62 +62 +-61 +61 +-61 +61 +-61 +61 +-61 +61 +-61 +62 +-61 +61 +-61 +61 +-61 +61 +-61 +62 +-60 +62 +-61 +61 +-62 +62 +-61 +61 +-61 +62 +-59 +61 +-62 +61 +-62 +62 +-61 +61 +-61 +-114 +57 +-25 +94 +-36 +78 +-48 +71 +-53 +69 +-55 +67 +-57 +64 +-61 +61 +-62 +60 +-62 +61 +-61 +62 +-61 +62 +-61 +61 +-62 +61 +-63 +60 +-62 +62 +-61 +62 +-61 +62 +127 +-68 +26 +-94 +38 +-78 +50 +-70 +54 +-69 +55 +-66 +57 +-64 +60 +-61 +63 +-60 +62 +-62 +60 +-63 +59 +-63 +61 +-61 +63 +-60 +61 +-62 +61 +-61 +60 +-62 +61 +-61 +62 +-62 +61 +-62 +63 +-61 +61 +-61 +62 +-60 +61 +-62 +61 +-62 +62 +-61 +62 +-61 +61 +-61 +61 +-62 +61 +-61 +63 +-61 +62 +-62 +61 +-61 +61 +-61 +62 +-61 +62 +-61 +61 +-63 +61 +-61 +61 +-62 +61 +-61 +-114 +56 +-26 +94 +-35 +80 +-48 +71 +-53 +68 +-55 +67 +-57 +63 +-61 +62 +127 +-69 +27 +-94 +38 +-78 +50 +-70 +54 +-68 +55 +-67 +56 +-65 +60 +-61 +-114 +57 +-24 +95 +-36 +77 +-51 +69 +-54 +69 +-54 +68 +-56 +65 +-60 +60 +127 +-70 +26 +-93 +39 +-76 +51 +-67 +54 +-69 +54 +-68 +57 +-64 +60 +-61 +-114 +58 +-24 +95 +-36 +77 +-49 +70 +-55 +68 +-55 +68 +-55 +64 +-60 +61 +127 +-70 +25 +-95 +38 +-77 +51 +-69 +55 +-68 +54 +-68 +56 +-65 +59 +-61 +63 +-60 +62 +-61 +61 +-63 +59 +-64 +60 +-61 +62 +-61 +62 +-61 +62 +-61 +-114 +55 +-26 +96 +-36 +78 +-49 +71 +-52 +69 +-55 +67 +-58 +64 +-61 +61 +-63 +61 +-62 +62 +-60 +62 +-61 +62 +-61 +61 +-63 +61 +-61 +61 +-61 +61 +127 +-67 +28 +-93 +38 +-79 +50 +-71 +53 +-69 +55 +-66 +58 +-64 +60 +-61 +62 +-61 +61 +-63 +60 +-63 +61 +-63 +61 +-62 +62 +-61 +62 +-61 +61 +-61 +-114 +56 +-25 +94 +-36 +79 +-48 +71 +-53 +71 +-54 +67 +-58 +63 +-61 +61 +127 +-68 +27 +-93 +39 +-78 +50 +-70 +55 +-68 +54 +-68 +57 +-63 +59 +-62 +62 +-60 +63 +-61 +61 +-63 +59 +-61 +60 +-63 +61 +-60 +64 +-60 +61 +-63 +-114 +56 +-26 +94 +-36 +79 +-45 +72 +-53 +68 +-55 +68 +-56 +63 +-61 +62 +127 +-69 +27 +-93 +39 +-77 +51 +-70 +54 +-69 +55 +-67 +57 +-64 +60 +-60 +62 +-60 +62 +-61 +61 +-63 +59 +-63 +61 +-61 +62 +-61 +62 +-61 +62 +-61 +60 +-63 +60 +-61 +61 +-62 +61 +-61 +62 +-61 +61 +-61 +61 +-63 +61 +-62 +61 +-62 +62 +-60 +61 +-62 +60 +-61 +61 +-62 +61 +-61 +63 +-61 +61 +-62 +-114 +57 +-26 +94 +-36 +79 +-45 +71 +-54 +68 +-55 +68 +-56 +64 +-60 +61 +-63 +60 +-63 +61 +-61 +63 +-60 +62 +-61 +61 +-63 +60 +-63 +61 +-61 +62 +127 +-67 +27 +-94 +39 +-79 +48 +-71 +53 +-69 +55 +-67 +57 +-64 +60 +-61 +62 +-61 +62 +-62 +60 +-63 +60 +-63 +61 +-61 +62 +-61 +62 +-62 +61 +-62 +60 +-62 +61 +-61 +61 +-61 +61 +-62 +61 +-62 +61 +-62 +62 +-61 +61 +-62 +-114 +57 +-25 +95 +-35 +79 +-47 +71 +-54 +68 +-55 +68 +-56 +64 +-60 +61 +127 +-70 +26 +-94 +39 +-76 +51 +-69 +54 +-69 +55 +-67 +56 +-65 +60 +-58 +-114 +57 +-24 +94 +-36 +77 +-51 +70 +-54 +70 +-54 +68 +-56 +64 +-59 +61 +127 +-69 +27 +-92 +38 +-78 +51 +-70 +56 +-68 +55 +-67 +57 +-65 +59 +-61 +-114 +57 +-23 +96 +-36 +77 +-51 +69 +-55 +68 +-54 +68 +-55 +65 +-61 +60 +-64 +59 +-63 +61 +-60 +63 +-59 +63 +-61 +61 +-63 +61 +-63 +61 +-61 +62 +127 +-67 +28 +-93 +38 +-77 +49 +-72 +52 +-70 +55 +-67 +58 +-63 +61 +-59 +-114 +56 +-26 +94 +-37 +78 +-50 +70 +-53 +70 +-54 +67 +-57 +64 +-58 +61 +127 +-69 +27 +-92 +38 +-77 +51 +-70 +56 +-68 +54 +-68 +56 +-64 +60 +-62 +-114 +58 +-24 +95 +-36 +77 +-51 +69 +-54 +68 +-54 +68 +-55 +64 +-61 +60 +-64 +60 +-62 +61 +-60 +63 +-60 +63 +-61 +60 +-63 +62 +-62 +60 +-62 +61 +127 +-67 +28 +-94 +38 +-79 +49 +-71 +53 +-69 +55 +-66 +58 +-64 +60 +-61 +62 +-62 +61 +-63 +60 +-62 +60 +-62 +61 +-61 +62 +-61 +61 +-62 +62 +-61 +61 +-62 +61 +-59 +61 +-63 +61 +-62 +63 +-61 +62 +-61 +61 +-60 +61 +-62 +-114 +57 +-23 +95 +-36 +78 +-50 +72 +-53 +68 +-55 +67 +-56 +64 +-61 +61 +127 +-69 +28 +-93 +39 +-77 +51 +-71 +54 +-69 +55 +-66 +57 +-64 +60 +-61 +63 +-61 +62 +-62 +61 +-63 +60 +-63 +60 +-62 +62 +-60 +63 +-61 +62 +-62 +61 +-64 +59 +-62 +62 +-61 +62 +-61 +61 +-62 +61 +-63 +60 +-62 +61 +-61 +-114 +57 +-25 +95 +-35 +78 +-49 +71 +-52 +68 +-55 +67 +-57 +64 +-60 +61 +-63 +60 +-62 +61 +-61 +62 +-61 +62 +-61 +61 +-62 +61 +-62 +60 +-62 +61 +-61 +62 +-61 +62 +-62 +61 +-61 +60 +-63 +61 +-62 +62 +-61 +61 +-62 +61 +127 +-68 +27 +-93 +38 +-75 +49 +-71 +53 +-69 +56 +-67 +58 +-64 +60 +-61 +61 +-61 +61 +-61 +61 +-63 +60 +-63 +60 +-61 +61 +-61 +62 +-61 +62 +-61 +61 +-63 +60 +-62 +61 +-61 +61 +-61 +62 +-61 +60 +-63 +60 +-59 +61 +-61 +61 +-61 +63 +-62 +61 +-62 +61 +-61 +61 +-61 +61 +-61 +62 +-61 +61 +-62 +61 +-60 +62 +-62 +60 +-62 +62 +-62 +61 +-61 +62 +-58 +61 +-63 +60 +-62 +62 +-61 +61 +-61 +61 +-62 +60 +-62 +61 +-62 +61 +-61 +62 +-62 +61 +-62 +60 +-62 +61 +-61 +63 +-61 +61 +-62 +61 +-60 +61 +-61 +62 +-61 +62 +-62 +61 +-62 +61 +-59 +62 +-62 +61 +-62 +62 +-62 +61 +-61 +61 +-59 +61 +-61 +61 +-62 +61 +-62 +61 +-61 +61 +-59 +61 +-61 +61 +-62 +61 +-62 +61 +-61 +-114 +57 +-25 +94 +-36 +78 +-48 +71 +-53 +69 +-55 +68 +-57 +63 +-61 +61 +127 +-68 +27 +-93 +39 +-78 +50 +-71 +54 +-69 +56 +-67 +57 +-65 +60 +-59 +62 +-61 +62 +-61 +62 +-63 +59 +-64 +60 +-61 +62 +-60 +63 +-60 +62 +-61 +60 +-63 +60 +-62 +62 +-61 +62 +-61 +61 +-62 +60 +-62 +61 +-62 +61 +-61 +61 +-62 +62 +-61 +61 +-62 +61 +-59 +61 +-62 +61 +-62 +62 +-62 +61 +-62 +61 +-60 +61 +-62 +61 +-62 +62 +-61 +62 +-61 +61 +-61 +61 +-62 +61 +-62 +62 +-61 +61 +-61 +61 +-62 +61 +-62 +61 +-61 +62 +-61 +61 +-63 +60 +-61 +61 +-61 +61 +-61 +62 +-61 +60 +-63 +60 +-61 +61 +-61 +62 +-61 +61 +-62 +61 +-62 +61 +-61 +62 +-61 +61 +-62 +61 +-61 +61 +-62 +61 +-61 +61 +-62 +61 +-62 +62 +-61 +61 +-62 +61 +-61 +61 +-62 +61 +-62 +61 +-61 +61 +-62 +-114 +57 +-25 +94 +-36 +79 +-48 +71 +-53 +68 +-55 +67 +-57 +63 +-60 +61 +127 +-68 +27 +-94 +38 +-76 +50 +-70 +54 +-68 +56 +-67 +56 +-65 +59 +-60 +62 +-61 +62 +-61 +60 +-64 +59 +-63 +61 +-59 +62 +-60 +63 +-61 +61 +-63 +60 +-62 +61 +-61 +62 +-61 +62 +-61 +62 +-61 +61 +-62 +61 +-60 +61 +-62 +61 +-62 +62 +-61 +61 +-61 +61 +-62 +60 +-62 +61 +-61 +62 +-61 +61 +-61 +61 +-62 +61 +-62 +61 +-61 +61 +-61 +61 +-62 +60 +-62 +61 +-62 +61 +-61 +62 +-61 +61 +-62 +60 +-62 +61 +-62 +61 +-61 +62 +-62 +60 +-62 +61 +-61 +62 +-62 +61 +-61 +61 +-62 +60 +-62 +61 +-61 +62 +-61 +61 +-63 +60 +-62 +60 +-62 +61 +-61 +62 +-62 +61 +-62 +61 +-62 +61 +-61 +61 +-61 +61 +-62 +61 +-62 +61 +-61 +61 +-61 +61 +-63 +61 +-62 +60 +-62 +63 +-61 +61 +-62 +-114 +56 +-25 +94 +-36 +79 +-49 +72 +-54 +68 +-56 +66 +-57 +64 +-60 +62 +127 +-69 +26 +-94 +38 +-75 +51 +-70 +54 +-68 +56 +-67 +56 +-65 +60 +-59 +62 +-61 +62 +-62 +62 +-64 +59 +-63 +61 +-61 +62 +-60 +62 +-62 +61 +-62 +60 +-63 +61 +-60 +62 +-62 +61 +-62 +62 +-61 +61 +-61 +61 +-60 +61 +-63 +61 +-62 +62 +-60 +61 +-61 +61 +-60 +61 +-63 +61 +-61 +63 +-61 +61 +-61 +61 +-62 +61 +-62 +61 +-61 +62 +-61 +60 +-63 +61 +-60 +61 +-61 +61 +-61 +63 +-61 +60 +-62 +61 +-59 +61 +-62 +61 +-62 +62 +-61 +61 +-62 +61 +-60 +62 +-61 +61 +-62 +62 +-61 +60 +-62 +61 +-62 +61 +-61 +61 +-63 +61 +-61 +60 +-62 +62 +-61 +61 +-62 +61 +-62 +62 +-61 +61 +-61 +61 +-60 +61 +-63 +61 +-61 +62 +-61 +62 +-61 +61 +-60 +61 +-62 +61 +-62 +63 +-61 +61 +-62 +-114 +56 +-25 +95 +-36 +79 +-48 +71 +-54 +68 +-55 +68 +-56 +64 +-60 +61 +127 +-69 +26 +-94 +38 +-77 +51 +-70 +54 +-69 +54 +-68 +57 +-64 +60 +-57 +63 +-60 +62 +-62 +61 +-64 +59 +-63 +61 +-58 +62 +-61 +62 +-61 +62 +-62 +60 +-63 +61 +-61 +61 +-62 +61 +-61 +62 +-61 +61 +-63 +60 +-62 +60 +-62 +61 +-61 +62 +-60 +61 +-62 +60 +-63 +60 +-62 +61 +-61 +62 +-61 +61 +-63 +61 +-61 +61 +-61 +61 +-62 +61 +-62 +60 +-63 +61 +-58 +61 +-62 +61 +-62 +62 +-63 +61 +-62 +61 +-60 +61 +-61 +61 +-62 +61 +-61 +61 +-62 +61 +-60 +61 +-62 +61 +-62 +62 +-61 +61 +-61 +62 +-61 +61 +-62 +61 +-62 +62 +-60 +62 +-61 +61 +-62 +60 +-63 +61 +-61 +62 +-61 +61 +-62 +61 +-62 +61 +-62 +61 +-61 +62 +-60 +61 +-62 +61 +-61 +61 +-62 +61 +-61 +63 +-61 +60 +-63 +-114 +57 +-25 +94 +-35 +79 +-47 +70 +-54 +68 +-55 +67 +-57 +64 +-60 +61 +127 +-69 +27 +-94 +39 +-75 +51 +-70 +54 +-69 +56 +-68 +57 +-65 +60 +-61 +-114 +57 +-25 +94 +-37 +78 +-51 +69 +-54 +68 +-55 +67 +-56 +64 +-57 +61 +127 +-69 +26 +-92 +38 +-78 +50 +-69 +55 +-68 +55 +-68 +56 +-62 +59 +-62 +62 +-60 +63 +-61 +60 +-63 +59 +-61 +61 +-62 +62 +-60 +64 +-61 +61 +-63 +60 +-61 +61 +-61 +62 +-61 +63 +-61 +61 +-62 +61 +-61 +61 +-62 +61 +-62 +-114 +56 +-25 +95 +-35 +80 +-48 +70 +-55 +68 +-55 +67 +-57 +64 +-60 +62 +-62 +59 +-63 +61 +-61 +63 +-60 +63 +-61 +61 +-62 +60 +-63 +61 +-61 +62 +-61 +62 +-62 +61 +-62 +61 +-62 +61 +-61 +62 +-61 +61 +-62 +61 +-61 +61 +127 +-67 +28 +-94 +37 +-79 +48 +-71 +54 +-69 +55 +-67 +58 +-64 +59 +-62 +-114 +57 +-24 +95 +-37 +77 +-48 +70 +-54 +68 +-54 +69 +-56 +64 +-61 +60 +127 +-69 +26 +-93 +39 +-76 +51 +-70 +53 +-69 +55 +-67 +56 +-65 +60 +-60 +-114 +57 +-25 +94 +-36 +77 +-50 +70 +-54 +69 +-54 +67 +-56 +64 +-57 +61 +127 +-70 +26 +-93 +38 +-77 +51 +-69 +56 +-67 +54 +-68 +56 +-66 +60 +-61 +62 +-60 +63 +-61 +60 +-63 +59 +-64 +61 +-61 +62 +-61 +62 +-62 +61 +-62 +61 +-61 +60 +-62 +61 +-62 +63 +-61 +62 +-62 +61 +-60 +61 +-63 +60 +-63 +63 +-61 +62 +-61 +62 +-61 +60 +-63 +60 +-62 +62 +-60 +62 +-61 +62 +-61 +61 +-63 +61 +-62 +62 +-61 +61 +-62 +61 +-61 +61 +-62 +61 +-62 +62 +-61 +61 +-62 +61 +-61 +61 +-62 +61 +-62 +62 +-61 +61 +-63 +61 +-59 +61 +-62 +-114 +56 +-22 +94 +-36 +78 +-49 +71 +-54 +68 +-55 +67 +-56 +64 +-61 +61 +-62 +62 +-61 +61 +-61 +62 +-60 +62 +-61 +61 +-62 +62 +-62 +60 +-63 +61 +127 +-67 +28 +-93 +38 +-79 +49 +-72 +53 +-69 +56 +-66 +58 +-64 +60 +-60 +61 +-61 +62 +-62 +61 +-63 +61 +-62 +60 +-61 +61 +-61 +62 +-61 +63 +-61 +60 +-63 +60 +-62 +61 +-61 +62 +-61 +62 +-61 +60 +-62 +61 +-61 +61 +-61 +-114 +57 +-25 +95 +-36 +78 +-49 +72 +-53 +68 +-55 +66 +-55 +64 +-61 +61 +-62 +61 +-62 +61 +-61 +62 +-60 +62 +-61 +61 +-62 +62 +-62 +60 +-62 +61 +127 +-66 +28 +-93 +38 +-79 +48 +-72 +53 +-68 +56 +-66 +58 +-64 +60 +-62 +61 +-61 +62 +-61 +61 +-62 +60 +-63 +61 +-61 +62 +-61 +62 +-61 +62 +-63 +60 +-63 +61 +-60 +61 +-62 +61 +-61 +61 +-63 +61 +-62 +61 +-59 +62 +-61 +-114 +56 +-24 +94 +-36 +78 +-49 +72 +-53 +68 +-55 +67 +-56 +64 +-61 +61 +-62 +62 +-62 +61 +-61 +62 +-59 +63 +-61 +61 +-62 +62 +-63 +60 +-62 +61 +-61 +62 +-61 +62 +-61 +61 +-62 +60 +-63 +61 +-61 +62 +-61 +62 +-62 +61 +127 +-68 +27 +-93 +39 +-78 +49 +-71 +53 +-69 +55 +-67 +57 +-64 +60 +-62 +61 +-61 +61 +-61 +61 +-63 +60 +-62 +62 +-62 +61 +-61 +62 +-60 +62 +-62 +61 +-63 +61 +-61 +61 +-61 +61 +-61 +62 +-61 +61 +-62 +61 +-61 +61 +-61 +-114 +57 +-25 +94 +-36 +78 +-49 +70 +-53 +69 +-55 +68 +-56 +63 +-61 +61 +127 +-68 +27 +-93 +39 +-76 +50 +-71 +54 +-69 +57 +-67 +57 +-64 +59 +-62 +-114 +57 +-25 +95 +-36 +78 +-51 +69 +-55 +68 +-54 +68 +-55 +65 +-57 +61 +-64 +59 +-63 +62 +-60 +63 +-60 +63 +-60 +61 +-63 +60 +-63 +62 +-61 +62 +-61 +62 +-61 +61 +-62 +61 +-62 +62 +-61 +61 +-62 +61 +-59 +62 +-61 +62 +127 +-68 +27 +-94 +37 +-79 +49 +-71 +54 +-68 +56 +-67 +57 +-65 +59 +-62 +-114 +57 +-25 +94 +-37 +79 +-50 +69 +-54 +68 +-54 +68 +-56 +64 +-61 +61 +-63 +60 +-62 +61 +-59 +63 +-61 +62 +-61 +62 +-61 +60 +-63 +60 +-61 +61 +127 +-67 +28 +-93 +39 +-79 +48 +-72 +53 +-69 +55 +-66 +58 +-60 +61 +-62 +61 +-62 +61 +-61 +60 +-63 +61 +-61 +61 +-62 +61 +-61 +63 +-61 +61 +-61 +61 +-61 +61 +-62 +61 +-61 +62 +-61 +61 +-62 +61 +-61 +61 +-62 +61 +-61 +62 +-61 +61 +-62 +60 +-61 +61 +-62 +61 +-61 +63 +-60 +61 +-63 +61 +-60 +61 +-62 +61 +-61 +62 +-61 +60 +-63 +61 +-61 +61 +-61 +62 +-62 +62 +-61 +60 +-62 +61 +-59 +61 +-61 +61 +-63 +62 +-62 +61 +-62 +61 +-61 +62 +-63 +61 +-62 +61 +-60 +61 +-62 +61 +-60 +61 +-62 +61 +-62 +62 +-62 +61 +-61 +61 +-59 +61 +-62 +61 +-61 +63 +-61 +61 +-63 +61 +-61 +61 +-61 +61 +-61 +63 +-61 +61 +-62 +61 +-59 +61 +-62 +61 +-62 +62 +-61 +60 +-62 +61 +-60 +61 +-62 +61 +-62 +62 +-61 +61 +-62 +61 +-60 +62 +-61 +61 +-63 +62 +-61 +61 +-62 +61 +-60 +-114 +56 +-25 +94 +-36 +79 +-49 +71 +-52 +69 +-55 +66 +-58 +63 +-61 +61 +-114 +-114 +-114 +-99 +-76 +-58 +-45 +-36 +-27 +-22 +-17 +-13 +-9 +-4 +-4 +-4 +-4 +-4 +-3 +-5 +-5 +-5 +-4 +-2 +-1 diff --git a/traces/hf_14b_sniff_libnfc.pm3 b/traces/hf_sniff_14b_scl3711.pm3 similarity index 100% rename from traces/hf_14b_sniff_libnfc.pm3 rename to traces/hf_sniff_14b_scl3711.pm3 diff --git a/traces/lf_t5577.txt b/traces/lf_ATA5577.txt similarity index 100% rename from traces/lf_t5577.txt rename to traces/lf_ATA5577.txt diff --git a/traces/ATA5577-HIDemu-FC1-C9.pm3 b/traces/lf_ATA5577_HID-FC1-C9.pm3 similarity index 100% rename from traces/ATA5577-HIDemu-FC1-C9.pm3 rename to traces/lf_ATA5577_HID-FC1-C9.pm3 diff --git a/traces/lf_t5577_awid_26.pm3 b/traces/lf_ATA5577_awid_26.pm3 similarity index 100% rename from traces/lf_t5577_awid_26.pm3 rename to traces/lf_ATA5577_awid_26.pm3 diff --git a/traces/lf_t5577_awid_50.pm3 b/traces/lf_ATA5577_awid_50.pm3 similarity index 100% rename from traces/lf_t5577_awid_50.pm3 rename to traces/lf_ATA5577_awid_50.pm3 diff --git a/traces/lf_t5577_em410x.pm3 b/traces/lf_ATA5577_em410x.pm3 similarity index 100% rename from traces/lf_t5577_em410x.pm3 rename to traces/lf_ATA5577_em410x.pm3 diff --git a/traces/lf_t5577_fdx_animal.pm3 b/traces/lf_ATA5577_fdx_animal.pm3 similarity index 100% rename from traces/lf_t5577_fdx_animal.pm3 rename to traces/lf_ATA5577_fdx_animal.pm3 diff --git a/traces/lf_t5577_fdx_extended.pm3 b/traces/lf_ATA5577_fdx_extended.pm3 similarity index 100% rename from traces/lf_t5577_fdx_extended.pm3 rename to traces/lf_ATA5577_fdx_extended.pm3 diff --git a/traces/lf_t5577_gallagher.pm3 b/traces/lf_ATA5577_gallagher.pm3 similarity index 100% rename from traces/lf_t5577_gallagher.pm3 rename to traces/lf_ATA5577_gallagher.pm3 diff --git a/traces/lf_t5577_gproxii.pm3 b/traces/lf_ATA5577_gproxii.pm3 similarity index 100% rename from traces/lf_t5577_gproxii.pm3 rename to traces/lf_ATA5577_gproxii.pm3 diff --git a/traces/lf_t5577_hid.pm3 b/traces/lf_ATA5577_hid.pm3 similarity index 100% rename from traces/lf_t5577_hid.pm3 rename to traces/lf_ATA5577_hid.pm3 diff --git a/traces/lf_t5577_hid_84.pm3 b/traces/lf_ATA5577_hid_84.pm3 similarity index 100% rename from traces/lf_t5577_hid_84.pm3 rename to traces/lf_ATA5577_hid_84.pm3 diff --git a/traces/lf_t5577_indala.pm3 b/traces/lf_ATA5577_indala.pm3 similarity index 100% rename from traces/lf_t5577_indala.pm3 rename to traces/lf_ATA5577_indala.pm3 diff --git a/traces/lf_t5577_indala_224.pm3 b/traces/lf_ATA5577_indala_224.pm3 similarity index 100% rename from traces/lf_t5577_indala_224.pm3 rename to traces/lf_ATA5577_indala_224.pm3 diff --git a/traces/lf_t5577_indala_hedem.pm3 b/traces/lf_ATA5577_indala_hedem.pm3 similarity index 100% rename from traces/lf_t5577_indala_hedem.pm3 rename to traces/lf_ATA5577_indala_hedem.pm3 diff --git a/traces/lf_t5577_io.pm3 b/traces/lf_ATA5577_io.pm3 similarity index 100% rename from traces/lf_t5577_io.pm3 rename to traces/lf_ATA5577_io.pm3 diff --git a/traces/lf_t5577_jablotron.pm3 b/traces/lf_ATA5577_jablotron.pm3 similarity index 100% rename from traces/lf_t5577_jablotron.pm3 rename to traces/lf_ATA5577_jablotron.pm3 diff --git a/traces/lf_t5577_keri.pm3 b/traces/lf_ATA5577_keri.pm3 similarity index 100% rename from traces/lf_t5577_keri.pm3 rename to traces/lf_ATA5577_keri.pm3 diff --git a/traces/lf_t5577_keri_internalid.pm3 b/traces/lf_ATA5577_keri_internalid.pm3 similarity index 100% rename from traces/lf_t5577_keri_internalid.pm3 rename to traces/lf_ATA5577_keri_internalid.pm3 diff --git a/traces/lf_t5577_keri_msid.pm3 b/traces/lf_ATA5577_keri_msid.pm3 similarity index 100% rename from traces/lf_t5577_keri_msid.pm3 rename to traces/lf_ATA5577_keri_msid.pm3 diff --git a/traces/lf_t5577_motorola.pm3 b/traces/lf_ATA5577_motorola.pm3 similarity index 100% rename from traces/lf_t5577_motorola.pm3 rename to traces/lf_ATA5577_motorola.pm3 diff --git a/traces/lf_t5577_nedap.pm3 b/traces/lf_ATA5577_nedap.pm3 similarity index 100% rename from traces/lf_t5577_nedap.pm3 rename to traces/lf_ATA5577_nedap.pm3 diff --git a/traces/lf_t5577_nexwatch.pm3 b/traces/lf_ATA5577_nexwatch.pm3 similarity index 100% rename from traces/lf_t5577_nexwatch.pm3 rename to traces/lf_ATA5577_nexwatch.pm3 diff --git a/traces/lf_t5577_nexwatch_nexkey.pm3 b/traces/lf_ATA5577_nexwatch_nexkey.pm3 similarity index 100% rename from traces/lf_t5577_nexwatch_nexkey.pm3 rename to traces/lf_ATA5577_nexwatch_nexkey.pm3 diff --git a/traces/lf_t5577_nexwatch_quadrakey.pm3 b/traces/lf_ATA5577_nexwatch_quadrakey.pm3 similarity index 100% rename from traces/lf_t5577_nexwatch_quadrakey.pm3 rename to traces/lf_ATA5577_nexwatch_quadrakey.pm3 diff --git a/traces/lf_t5577_noralsy.pm3 b/traces/lf_ATA5577_noralsy.pm3 similarity index 100% rename from traces/lf_t5577_noralsy.pm3 rename to traces/lf_ATA5577_noralsy.pm3 diff --git a/traces/lf_t5577_pac.pm3 b/traces/lf_ATA5577_pac.pm3 similarity index 100% rename from traces/lf_t5577_pac.pm3 rename to traces/lf_ATA5577_pac.pm3 diff --git a/traces/lf_t5577_paradox.pm3 b/traces/lf_ATA5577_paradox.pm3 similarity index 100% rename from traces/lf_t5577_paradox.pm3 rename to traces/lf_ATA5577_paradox.pm3 diff --git a/traces/lf_t5577_presco.pm3 b/traces/lf_ATA5577_presco.pm3 similarity index 100% rename from traces/lf_t5577_presco.pm3 rename to traces/lf_ATA5577_presco.pm3 diff --git a/traces/lf_t5577_pyramid.pm3 b/traces/lf_ATA5577_pyramid.pm3 similarity index 100% rename from traces/lf_t5577_pyramid.pm3 rename to traces/lf_ATA5577_pyramid.pm3 diff --git a/traces/lf_t5577_securakey.pm3 b/traces/lf_ATA5577_securakey.pm3 similarity index 100% rename from traces/lf_t5577_securakey.pm3 rename to traces/lf_ATA5577_securakey.pm3 diff --git a/traces/lf_t5577_viking.pm3 b/traces/lf_ATA5577_viking.pm3 similarity index 100% rename from traces/lf_t5577_viking.pm3 rename to traces/lf_ATA5577_viking.pm3 diff --git a/traces/lf_t5577_visa2000.pm3 b/traces/lf_ATA5577_visa2000.pm3 similarity index 100% rename from traces/lf_t5577_visa2000.pm3 rename to traces/lf_ATA5577_visa2000.pm3 diff --git a/traces/AWID-15-259.pm3 b/traces/lf_AWID-15-259.pm3 similarity index 100% rename from traces/AWID-15-259.pm3 rename to traces/lf_AWID-15-259.pm3 diff --git a/traces/Casi-12ed825c29.pm3 b/traces/lf_Casi-12ed825c29.pm3 similarity index 100% rename from traces/Casi-12ed825c29.pm3 rename to traces/lf_Casi-12ed825c29.pm3 diff --git a/traces/EM4102-1.pm3 b/traces/lf_EM4102-1.pm3 similarity index 100% rename from traces/EM4102-1.pm3 rename to traces/lf_EM4102-1.pm3 diff --git a/traces/EM4102-2.pm3 b/traces/lf_EM4102-2.pm3 similarity index 100% rename from traces/EM4102-2.pm3 rename to traces/lf_EM4102-2.pm3 diff --git a/traces/EM4102-3.pm3 b/traces/lf_EM4102-3.pm3 similarity index 100% rename from traces/EM4102-3.pm3 rename to traces/lf_EM4102-3.pm3 diff --git a/traces/em4102-clamshell.pm3 b/traces/lf_EM4102-clamshell.pm3 similarity index 78% rename from traces/em4102-clamshell.pm3 rename to traces/lf_EM4102-clamshell.pm3 index 7bf38265c..86298b919 100644 --- a/traces/em4102-clamshell.pm3 +++ b/traces/lf_EM4102-clamshell.pm3 @@ -1,24000 +1,24000 @@ --21 --21 --19 --20 --19 --20 --18 --18 --17 --18 --17 --17 --17 --17 --16 --16 --16 --16 --16 --16 --15 --16 --15 --16 --15 --16 -52 -127 -127 -127 -115 -53 -5 --24 --32 --27 --14 --1 -10 -14 -14 -10 -5 --1 --4 --7 --7 --8 --7 --7 --6 --7 --7 --8 --9 --10 --10 --11 --11 --12 --12 --12 --12 --13 --12 --13 --13 --14 --13 --14 --13 --15 --14 --15 --14 --15 --14 --15 --14 --15 --14 --15 --15 --15 --15 --15 --14 --16 --15 --15 --35 --90 --128 --128 --108 --59 --29 --20 --26 --40 --51 --57 --57 --54 --47 --43 --38 --35 --34 --34 --33 --33 --31 --30 --29 --27 --26 --25 --25 --24 --23 --23 --22 --22 --21 --21 --20 --20 --19 --19 --18 --19 --17 --18 --17 --17 --17 --17 --16 --17 --16 --16 --15 --16 --15 --16 --15 --16 --15 --16 --15 --16 --15 --15 -53 -127 -127 -127 -113 -50 -2 --26 --33 --28 --14 --1 -9 -13 -13 -8 -4 --1 --5 --7 --7 --8 --7 --8 --7 --7 --7 --8 --9 --10 --10 --11 --31 --87 --128 --128 --105 --57 --26 --18 --23 --37 --49 --56 --56 --52 --46 --41 --36 --34 --32 --32 --32 --32 --30 --29 --28 --28 --25 --25 --23 --24 --22 --22 -45 -127 -127 -127 -108 -46 --2 --30 --37 --32 --18 --5 -6 -10 -11 -7 -2 --3 --6 --9 --9 --10 --9 --9 --8 --8 --8 --9 --10 --11 --12 --12 --32 --88 --128 --128 --107 --59 --29 --20 --26 --39 --50 --57 --57 --54 --47 --42 --37 --35 --33 --33 --32 --32 --31 --30 --28 --28 --26 --26 --24 --24 --23 --23 -45 -127 -127 -127 -110 -48 -0 --29 --36 --30 --17 --4 -7 -11 -11 -7 -2 --3 --6 --9 --9 --9 --8 --8 --7 --8 --8 --9 --10 --11 --11 --12 --12 --12 --12 --12 --12 --13 --13 --14 --13 --14 --14 --14 --14 --15 --14 --15 --14 --15 --14 --15 --14 --15 --15 --15 --15 --15 --14 --15 --15 --16 --15 --16 --35 --91 --128 --128 --108 --59 --29 --20 --26 --40 --51 --58 --57 --54 --47 --43 --38 --35 --33 --33 --32 --32 --31 --30 --29 --28 --26 --26 --24 --24 --23 --23 --21 --22 --21 --21 --21 --22 --21 --21 --20 --20 --19 --19 --18 --19 --18 --18 --17 --17 --16 --17 --16 --17 --16 --16 --15 --16 --15 --16 --15 --16 --15 --16 -52 -127 -127 -127 -115 -53 -5 --24 --32 --27 --14 --1 -10 -14 -14 -10 -5 --1 --4 --7 --8 --8 --7 --7 --6 --7 --7 --8 --9 --10 --11 --11 --11 --12 --11 --12 --12 --12 --12 --13 --13 --14 --13 --14 --13 --14 --14 --15 --14 --14 --14 --16 --15 --15 --14 --15 --14 --15 --15 --15 --15 --16 --15 --16 --35 --91 --128 --128 --108 --59 --29 --20 --26 --40 --51 --58 --57 --54 --47 --42 --37 --35 --33 --34 --33 --33 --31 --31 --28 --28 --26 --26 --24 --24 --23 --23 --22 --22 --21 --22 --21 --22 --21 --21 --19 --20 --19 --19 --18 --19 --17 --18 --17 --17 --16 --17 --16 --17 --16 --16 --15 --16 --15 --15 --15 --16 --15 --16 -52 -127 -127 -127 -115 -53 -5 --24 --32 --27 --13 --1 -10 -13 -14 -10 -5 --1 --4 --7 --8 --8 --7 --7 --6 --7 --7 --8 --9 --10 --10 --11 --11 --11 --11 --12 --12 --12 --12 --13 --13 --13 --13 --14 --14 --14 --14 --15 --14 --15 --14 --14 --14 --15 --15 --15 --15 --15 --15 --15 --15 --16 --15 --16 --35 --90 --128 --128 --109 --61 --31 --23 --28 --41 --51 --58 --58 --55 --48 --43 --38 --36 --34 --34 --33 --33 --31 --31 --29 --28 --26 --26 --24 --25 --23 --23 -45 -127 -127 -127 -109 -47 --1 --28 --36 --30 --17 --4 -6 -11 -11 -7 -2 --3 --6 --9 --9 --9 --8 --8 --7 --8 --8 --10 --10 --11 --11 --12 --32 --88 --128 --128 --105 --57 --26 --19 --24 --38 --49 --56 --56 --53 --46 --41 --36 --34 --32 --33 --31 --32 --30 --29 --28 --27 --25 --25 --24 --24 --23 --23 --21 --21 --21 --22 --21 --22 --21 --21 --20 --20 --18 --19 --17 --19 --17 --18 --17 --17 --16 --17 --16 --17 --16 --16 --15 --16 --15 --15 --15 --16 --15 --16 -52 -127 -127 -127 -115 -53 -5 --24 --32 --27 --14 --1 -10 -13 -14 -9 -4 --1 --4 --7 --7 --7 --6 --7 --6 --7 --7 --9 --9 --10 --10 --12 --11 --12 --12 --12 --12 --13 --12 --13 --13 --14 --13 --14 --13 --14 --14 --15 --14 --15 --14 --15 --14 --15 --14 --15 --14 --15 --15 --16 --15 --15 --15 --16 --35 --90 --128 --128 --108 --59 --29 --20 --26 --39 --50 --57 --58 --54 --48 --42 --37 --35 --33 --33 --32 --33 --31 --31 --29 --28 --26 --26 --24 --23 --22 --22 --22 --22 --21 --22 --21 --21 --21 --21 --20 --20 --19 --19 --18 --18 --17 --18 --17 --17 --17 --17 --16 --17 --16 --16 --15 --16 --15 --16 --15 --16 --15 --15 -52 -127 -127 -127 -115 -53 -5 --24 --32 --27 --14 --1 -10 -14 -14 -10 -5 --1 --4 --7 --7 --8 --7 --7 --6 --7 --7 --9 --9 --10 --10 --11 --11 --11 --11 --12 --12 --13 --12 --13 --12 --13 --13 --14 --13 --14 --13 --14 --13 --14 --14 --15 --14 --15 --15 --15 --15 --15 --14 --15 --14 --15 --15 --15 --35 --90 --128 --128 --109 --61 --30 --22 --28 --40 --51 --58 --58 --54 --48 --43 --38 --36 --34 --34 --33 --33 --32 --31 --29 --28 --26 --26 --24 --24 --24 --23 -45 -127 -127 -127 -110 -47 --1 --30 --36 --30 --17 --4 -7 -11 -11 -7 -2 --3 --6 --9 --9 --9 --8 --8 --7 --8 --8 --10 --10 --11 --11 --12 --31 --87 --128 --128 --107 --59 --29 --20 --26 --39 --49 --57 --56 --53 --47 --42 --37 --35 --33 --33 --32 --32 --31 --30 --28 --28 --26 --26 --24 --24 --23 --23 -44 -127 -127 -127 -109 -47 -0 --29 --36 --31 --17 --4 -7 -11 -11 -7 -2 --3 --7 --9 --9 --9 --8 --8 --8 --9 --9 --10 --10 --11 --11 --12 --32 --88 --128 --128 --107 --59 --29 --20 --26 --39 --50 --57 --57 --53 --47 --42 --37 --35 --33 --33 --32 --32 --30 --30 --28 --27 --26 --25 --24 --24 --23 --23 -45 -127 -127 -127 -109 -47 -0 --28 --36 --31 --17 --4 -7 -11 -11 -7 -2 --3 --6 --9 --9 --9 --8 --8 --8 --8 --9 --10 --10 --11 --11 --12 --31 --87 --128 --128 --107 --59 --29 --20 --26 --39 --49 --56 --56 --53 --47 --42 --37 --35 --33 --33 --32 --32 --31 --30 --28 --27 --26 --25 --24 --24 --23 --23 -45 -127 -127 -127 -110 -48 -0 --29 --36 --31 --17 --4 -7 -11 -12 -8 -3 --3 --6 --9 --9 --10 --8 --8 --7 --8 --8 --10 --10 --11 --11 --12 --32 --88 --128 --128 --107 --59 --29 --20 --26 --39 --50 --57 --57 --54 --47 --42 --37 --35 --33 --33 --32 --33 --31 --30 --28 --28 --26 --25 --24 --24 --23 --23 -45 -127 -127 -127 -110 -48 -0 --28 --36 --31 --17 --4 -7 -11 -11 -7 -2 --3 --6 --9 --9 --9 --8 --8 --8 --8 --8 --10 --10 --11 --11 --12 --32 --87 --128 --128 --107 --59 --28 --20 --26 --39 --50 --57 --57 --53 --47 --42 --37 --35 --33 --33 --32 --32 --30 --30 --28 --27 --25 --25 --24 --24 --23 --23 -45 -127 -127 -127 -110 -48 -0 --28 --36 --31 --17 --4 -7 -11 -11 -7 -3 --3 --6 --9 --9 --9 --8 --8 --8 --8 --8 --9 --10 --11 --11 --12 --32 --88 --128 --128 --107 --59 --29 --20 --26 --39 --50 --57 --57 --53 --47 --42 --37 --35 --33 --33 --32 --32 --30 --29 --28 --28 --26 --25 --24 --24 --23 --23 -45 -127 -127 -127 -109 -47 -0 --29 --36 --31 --17 --4 -7 -11 -11 -7 -2 --3 --6 --9 --9 --9 --8 --8 --7 --8 --8 --10 --10 --11 --11 --12 --31 --87 --128 --128 --107 --59 --29 --20 --25 --39 --50 --57 --57 --53 --47 --42 --37 --35 --33 --33 --32 --32 --31 --30 --28 --28 --26 --26 --24 --24 --23 --23 -45 -127 -127 -127 -110 -48 -0 --28 --35 --31 --17 --4 -7 -11 -11 -7 -3 --3 --6 --9 --9 --9 --8 --9 --8 --8 --8 --9 --10 --11 --11 --12 --32 --88 --128 --128 --105 --57 --27 --18 --24 --38 --49 --56 --56 --52 --46 --41 --36 --34 --32 --33 --32 --32 --30 --30 --28 --27 --25 --26 --24 --23 --22 --22 --21 --21 --20 --20 --19 --20 --19 --19 --18 --18 --17 --17 --17 --17 --17 --17 --16 --17 --16 --16 --16 --16 --15 --16 --15 --16 --15 --16 --15 --16 --15 --15 -52 -127 -127 -127 -114 -51 -3 --26 --34 --28 --14 --1 -9 -13 -13 -8 -4 --2 --5 --7 --8 --8 --7 --7 --7 --7 --8 --9 --9 --10 --10 --11 --31 --87 --128 --128 --105 --56 --26 --18 --24 --37 --48 --55 --56 --52 --46 --41 --36 --34 --32 --32 --31 --31 --30 --29 --28 --27 --25 --25 --24 --24 --22 --23 -45 -127 -127 -127 -108 -46 --2 --30 --37 --32 --18 --5 -6 -10 -11 -7 -2 --4 --6 --9 --9 --10 --9 --9 --9 --9 --9 --10 --10 --11 --11 --12 --32 --88 --128 --128 --107 --59 --29 --20 --26 --39 --50 --57 --57 --54 --47 --42 --37 --35 --33 --33 --32 --33 --31 --30 --29 --27 --26 --25 --24 --24 --23 --23 -45 -127 -127 -127 -110 -48 -0 --28 --36 --31 --17 --4 -7 -11 -12 -7 -3 --3 --6 --9 --9 --10 --8 --9 --7 --8 --8 --10 --10 --11 --11 --12 --12 --12 --12 --12 --12 --13 --13 --14 --13 --14 --13 --14 --13 --14 --13 --15 --14 --15 --14 --15 --14 --15 --15 --15 --15 --15 --15 --16 --15 --16 --15 --16 --35 --91 --128 --128 --109 --61 --31 --22 --28 --40 --51 --58 --58 --54 --48 --43 --38 --36 --34 --34 --33 --34 --31 --30 --29 --28 --26 --26 --25 --25 --23 --23 -45 -127 -127 -127 -109 -47 -0 --29 --36 --31 --17 --4 -6 -11 -11 -7 -2 --3 --6 --9 --9 --9 --8 --8 --7 --8 --8 --10 --10 --11 --11 --12 --32 --87 --128 --128 --107 --59 --29 --20 --26 --39 --50 --57 --57 --53 --47 --42 --37 --35 --33 --34 --32 --33 --31 --30 --28 --27 --26 --26 --24 --24 --23 --23 -45 -127 -127 -127 -110 -48 -0 --29 --36 --31 --17 --4 -7 -11 -12 -7 -3 --3 --6 --9 --9 --9 --8 --8 --7 --8 --8 --10 --10 --11 --11 --12 --32 --87 --128 --128 --107 --59 --29 --20 --25 --39 --50 --57 --57 --53 --47 --42 --37 --35 --34 --33 --32 --32 --31 --30 --28 --27 --26 --25 --24 --24 --23 --23 -45 -127 -127 -127 -109 -48 -0 --29 --36 --31 --17 --4 -7 -11 -11 -7 -3 --3 --6 --9 --9 --9 --8 --8 --7 --8 --8 --9 --10 --11 --11 --12 --32 --88 --128 --128 --107 --59 --28 --20 --26 --39 --50 --57 --57 --54 --47 --42 --37 --35 --33 --33 --32 --33 --31 --30 --28 --27 --25 --25 --24 --24 --23 --23 -45 -127 -127 -127 -110 -48 -0 --28 --36 --31 --17 --4 -7 -11 -12 -7 -2 --3 --6 --8 --9 --10 --9 --9 --8 --8 --8 --9 --10 --10 --11 --12 --32 --88 --128 --128 --107 --59 --29 --20 --26 --39 --50 --57 --57 --53 --47 --43 --37 --34 --33 --33 --32 --32 --31 --30 --28 --27 --26 --25 --24 --24 --23 --23 -45 -127 -127 -127 -109 -48 -0 --28 --36 --30 --17 --4 -7 -11 -11 -7 -2 --3 --6 --8 --9 --9 --8 --8 --8 --8 --8 --9 --10 --11 --11 --12 --32 --87 --128 --128 --105 --57 --27 --18 --25 --38 --49 --56 --56 --53 --46 --41 --37 --34 --33 --33 --32 --32 --31 --30 --28 --27 --26 --25 --24 --24 --23 --23 --22 --21 --21 --21 --20 --20 --19 --19 --18 --18 --17 --18 --17 --17 --17 --17 --16 --17 --16 --16 --16 --16 --15 --16 --15 --16 --15 --16 --15 --15 --14 --15 -52 -127 -127 -127 -114 -51 -3 --26 --33 --28 --14 --1 -9 -13 -13 -9 -4 --2 --5 --8 --8 --8 --7 --8 --7 --8 --7 --9 --9 --10 --10 --11 --31 --87 --128 --128 --105 --57 --26 --18 --24 --38 --49 --56 --56 --53 --46 --41 --36 --34 --32 --32 --31 --31 --30 --29 --28 --27 --26 --25 --24 --24 --22 --22 -46 -127 -127 -127 -108 -46 --2 --30 --37 --31 --17 --4 -6 -10 -10 -6 -2 --3 --6 --9 --9 --9 --8 --8 --7 --9 --8 --10 --10 --11 --11 --12 --32 --88 --128 --128 --106 --57 --27 --18 --25 --38 --49 --56 --56 --53 --47 --41 --36 --34 --33 --33 --32 --32 --30 --30 --28 --27 --26 --25 --24 --24 --23 --23 -45 -127 -127 -127 -108 -46 --2 --30 --37 --32 --18 --4 -6 -11 -10 -7 -2 --3 --6 --9 --9 --9 --8 --9 --8 --9 --9 --10 --10 --11 --11 --11 --31 --87 --128 --128 --105 --57 --26 --18 --24 --38 --49 --56 --56 --53 --46 --41 --36 --34 --32 --33 --32 --32 --30 --30 --28 --27 --25 --25 --24 --24 --23 --23 -45 -127 -127 -127 -108 -46 --2 --30 --37 --32 --17 --5 -6 -10 -11 -6 -2 --4 --7 --9 --10 --10 --9 --9 --8 --8 --9 --10 --10 --11 --12 --12 --32 --88 --128 --128 --106 --57 --26 --18 --24 --38 --49 --56 --56 --53 --46 --41 --36 --34 --33 --33 --32 --32 --30 --30 --28 --27 --25 --25 --24 --24 --22 --22 -45 -127 -127 -127 -108 -46 --2 --30 --37 --31 --17 --5 -6 -10 -10 -6 -2 --4 --6 --9 --9 --10 --9 --9 --8 --9 --9 --10 --10 --11 --11 --12 --32 --88 --128 --128 --106 --57 --27 --18 --25 --38 --49 --56 --56 --53 --47 --41 --36 --34 --33 --33 --32 --32 --30 --29 --28 --27 --26 --25 --24 --23 --22 --22 -45 -127 -127 -127 -108 -46 --2 --30 --37 --32 --18 --5 -6 -10 -11 -7 -3 --3 --7 --9 --10 --10 --9 --9 --7 --9 --9 --10 --10 --11 --11 --12 --32 --88 --128 --128 --106 --57 --27 --18 --24 --37 --49 --56 --56 --53 --46 --41 --36 --34 --33 --33 --32 --32 --30 --30 --28 --27 --26 --25 --24 --24 --22 --23 -46 -127 -127 -127 -108 -46 --1 --30 --37 --32 --18 --5 -6 -10 -10 -7 -2 --3 --6 --9 --9 --10 --9 --9 --8 --9 --8 --10 --10 --11 --11 --12 --32 --88 --128 --128 --106 --57 --27 --19 --24 --38 --49 --56 --56 --53 --46 --42 --36 --34 --33 --33 --32 --32 --30 --30 --28 --28 --26 --25 --24 --24 --23 --23 -45 -127 -127 -127 -108 -46 --2 --30 --37 --32 --18 --5 -6 -11 -11 -7 -2 --3 --6 --9 --9 --10 --9 --8 --8 --8 --8 --9 --10 --11 --11 --12 --32 --88 --128 --128 --106 --57 --26 --18 --25 --38 --49 --56 --56 --53 --47 --41 --36 --34 --33 --33 --32 --32 --30 --30 --28 --27 --25 --25 --24 --24 --23 --23 -44 -127 -127 -127 -108 -46 --2 --30 --37 --32 --18 --5 -6 -11 -11 -7 -2 --3 --6 --9 --10 --10 --9 --9 --8 --9 --9 --10 --10 --11 --11 --12 --32 --88 --128 --128 --106 --57 --26 --18 --24 --38 --49 --56 --56 --53 --47 --41 --36 --34 --33 --32 --32 --32 --30 --29 --28 --27 --26 --25 --24 --24 --23 --23 -45 -127 -127 -127 -108 -45 --2 --30 --37 --32 --18 --5 -6 -10 -10 -7 -2 --3 --6 --9 --10 --10 --9 --9 --8 --8 --8 --9 --10 --11 --11 --12 --32 --88 --128 --128 --107 --59 --29 --20 --25 --39 --49 --57 --56 --53 --47 --42 --37 --35 --33 --33 --32 --32 --31 --30 --28 --27 --26 --25 --24 --25 --23 --23 -45 -127 -127 -127 -109 -48 -0 --29 --36 --31 --17 --4 -7 -11 -11 -7 -2 --3 --6 --8 --9 --9 --8 --8 --7 --8 --8 --9 --10 --11 --11 --12 --11 --12 --12 --12 --12 --13 --12 --13 --13 --14 --13 --14 --14 --15 --14 --15 --14 --15 --14 --15 --14 --16 --14 --15 --14 --15 --15 --15 --15 --16 --15 --15 --35 --90 --128 --128 --109 --61 --31 --23 --28 --41 --51 --58 --58 --55 --48 --43 --38 --36 --34 --34 --33 --33 --31 --30 --28 --28 --26 --26 --25 --24 --24 --23 -45 -127 -127 -127 -109 -48 --1 --29 --36 --31 --17 --4 -7 -11 -11 -7 -2 --3 --6 --9 --9 --9 --8 --8 --7 --8 --8 --10 --10 --11 --11 --12 --32 --88 --128 --128 --105 --57 --26 --18 --24 --38 --48 --56 --56 --53 --46 --41 --36 --34 --32 --32 --32 --32 --30 --30 --28 --27 --25 --25 --24 --24 --23 --23 --21 --21 --21 --22 --21 --21 --20 --21 --19 --19 --18 --19 --17 --18 --17 --18 --17 --17 --16 --17 --16 --17 --16 --16 --15 --16 --15 --16 --15 --16 --15 --16 -52 -127 -127 -127 -115 -53 -4 --24 --32 --27 --14 --1 -9 -13 -14 -9 -4 --1 --4 --7 --7 --8 --7 --7 --6 --7 --7 --8 --9 --10 --10 --11 --11 --12 --11 --12 --12 --13 --12 --13 --13 --14 --13 --14 --13 --14 --14 --14 --14 --15 --14 --15 --15 --15 --15 --16 --15 --15 --14 --15 --15 --16 --15 --16 --36 --91 --128 --128 --109 --61 --31 --22 --28 --41 --52 --58 --58 --54 --48 --43 --38 --36 --34 --34 --33 --33 --31 --31 --29 --28 --26 --25 --25 --25 --24 --23 -44 -127 -127 -127 -110 -47 -0 --29 --36 --30 --17 --4 -6 -11 -11 -7 -2 --3 --6 --8 --8 --9 --8 --8 --7 --8 --8 --9 --10 --11 --11 --12 --32 --88 --128 --128 --107 --59 --29 --20 --26 --39 --50 --56 --57 --53 --47 --42 --37 --35 --33 --33 --32 --32 --31 --30 --28 --28 --26 --26 --24 --24 --23 --23 -45 -127 -127 -127 -110 -48 -0 --29 --36 --31 --17 --4 -7 -11 -11 -7 -2 --3 --6 --8 --10 --9 --8 --8 --8 --8 --8 --10 --10 --11 --11 --11 --31 --87 --128 --128 --105 --57 --26 --18 --24 --38 --49 --56 --56 --53 --47 --41 --36 --34 --33 --33 --32 --32 --30 --29 --28 --27 --25 --25 --24 --24 --22 --23 --21 --22 --21 --21 --20 --20 --19 --19 --18 --18 --17 --18 --17 --18 --17 --17 --16 --17 --16 --16 --16 --16 --15 --16 --15 --16 --15 --16 --15 --15 --14 --15 -52 -127 -127 -127 -114 -51 -3 --26 --33 --28 --14 --2 -9 -13 -13 -9 -4 --2 --5 --7 --7 --8 --7 --7 --7 --8 --8 --9 --9 --10 --10 --12 --31 --87 --128 --128 --107 --59 --29 --20 --26 --39 --49 --57 --56 --53 --47 --42 --37 --35 --33 --33 --32 --32 --31 --30 --28 --28 --26 --25 --24 --24 --23 --23 -45 -127 -127 -127 -110 -48 -0 --28 --36 --31 --17 --4 -6 -11 -11 -7 -3 --3 --6 --9 --9 --10 --9 --8 --8 --8 --8 --9 --9 --11 --11 --12 --12 --12 --12 --13 --12 --13 --12 --13 --13 --14 --14 --14 --14 --14 --14 --15 --14 --15 --14 --15 --15 --15 --14 --15 --14 --15 --15 --16 --15 --16 --15 --16 --35 --91 --128 --128 --108 --60 --29 --21 --26 --40 --50 --57 --57 --54 --47 --42 --37 --35 --33 --33 --32 --32 --31 --30 --29 --28 --26 --25 --24 --24 --23 --23 --21 --21 --21 --22 --21 --22 --21 --21 --20 --20 --19 --19 --18 --18 --19 --18 --17 --17 --16 --17 --16 --17 --16 --17 --15 --16 --15 --15 --15 --16 --15 --16 -51 -127 -127 -127 -115 -53 -4 --25 --32 --27 --13 --1 -10 -13 -14 -9 -4 --1 --4 --7 --7 --8 --7 --7 --6 --7 --7 --8 --8 --10 --10 --11 --11 --12 --11 --12 --12 --13 --12 --13 --13 --14 --13 --14 --13 --14 --13 --14 --14 --15 --14 --15 --14 --15 --15 --15 --14 --15 --14 --15 --15 --16 --15 --15 --35 --90 --128 --128 --108 --59 --29 --20 --26 --39 --51 --58 --58 --54 --47 --42 --37 --35 --33 --34 --33 --33 --31 --31 --29 --28 --26 --25 --24 --24 --23 --23 --22 --22 --21 --22 --21 --22 --21 --21 --19 --20 --18 --20 --18 --19 --18 --18 --17 --17 --16 --17 --17 --17 --16 --16 --15 --16 --15 --16 --15 --16 --15 --16 -52 -127 -127 -127 -115 -53 -4 --24 --32 --27 --14 --1 -10 -14 -14 -10 -5 --1 --4 --7 --7 --8 --7 --7 --6 --7 --7 --8 --8 --10 --10 --11 --11 --12 --11 --12 --12 --13 --12 --13 --13 --13 --13 --14 --13 --14 --14 --14 --14 --15 --14 --15 --15 --15 --15 --15 --14 --15 --14 --15 --15 --16 --15 --16 --35 --91 --128 --128 --109 --61 --31 --22 --28 --41 --52 --58 --58 --55 --48 --43 --38 --36 --34 --34 --32 --33 --31 --31 --29 --28 --26 --26 --25 --24 --23 --23 -45 -127 -127 -127 -110 -48 -0 --29 --37 --31 --17 --4 -7 -11 -11 -7 -2 --3 --6 --9 --9 --9 --8 --8 --7 --8 --8 --10 --10 --11 --11 --12 --32 --88 --128 --128 --107 --59 --29 --20 --25 --38 --49 --56 --56 --53 --47 --42 --37 --34 --33 --33 --32 --32 --31 --30 --29 --28 --26 --26 --24 --24 --23 --23 -45 -127 -127 -127 -110 -48 -0 --29 --36 --31 --17 --4 -7 -11 -12 -7 -3 --3 --6 --9 --9 --10 --9 --9 --8 --8 --8 --9 --10 --11 --11 --12 --32 --88 --128 --128 --105 --57 --26 --18 --24 --37 --49 --56 --56 --53 --46 --41 --36 --34 --32 --33 --32 --32 --30 --30 --28 --27 --25 --25 --24 --24 --23 --23 --22 --22 --21 --21 --20 --21 --19 --19 --18 --19 --18 --18 --17 --17 --17 --17 --16 --17 --16 --16 --16 --16 --15 --16 --15 --15 --15 --15 --15 --16 --15 --15 -52 -127 -127 -127 -114 -51 -3 --26 --33 --28 --14 --1 -9 -13 -13 -9 -4 --2 --5 --7 --8 --8 --8 --7 --7 --7 --7 --9 --9 --10 --10 --11 --31 --87 --128 --128 --107 --58 --28 --20 --25 --38 --49 --56 --56 --53 --47 --42 --37 --35 --33 --33 --32 --32 --30 --30 --28 --27 --25 --25 --24 --24 --23 --23 -45 -127 -127 -127 -110 -48 -0 --29 --36 --31 --17 --4 -7 -11 -11 -7 -3 --3 --6 --9 --9 --10 --8 --8 --7 --8 --8 --9 --10 --11 --11 --12 --12 --12 --12 --13 --12 --13 --13 --14 --13 --14 --14 --14 --14 --14 --14 --14 --14 --15 --15 --15 --14 --15 --15 --15 --15 --15 --14 --15 --15 --16 --15 --16 --35 --91 --128 --128 --109 --61 --31 --23 --28 --41 --51 --58 --58 --55 --48 --43 --38 --36 --34 --34 --33 --33 --31 --31 --29 --28 --26 --25 --24 --24 --23 --23 -44 -127 -127 -127 -110 -48 -0 --29 --36 --31 --17 --4 -7 -11 -11 -7 -2 --3 --6 --9 --9 --9 --8 --8 --8 --9 --9 --10 --10 --11 --11 --12 --32 --88 --128 --128 --105 --57 --27 --19 --24 --38 --49 --56 --56 --53 --46 --42 --36 --34 --32 --33 --32 --32 --30 --30 --28 --27 --25 --25 --24 --24 --23 --24 --22 --21 --20 --21 --21 --22 --21 --21 --20 --20 --19 --19 --18 --18 --17 --18 --17 --17 --17 --17 --16 --16 --15 --16 --15 --16 --15 --16 --15 --16 --15 --15 -52 -127 -127 -127 -115 -53 -5 --24 --32 --27 --13 --1 -10 -14 -14 -10 -5 --1 --4 --7 --7 --8 --7 --7 --6 --7 --7 --8 --9 --10 --10 --11 --11 --12 --11 --12 --12 --13 --12 --13 --13 --14 --13 --14 --13 --14 --13 --14 --14 --15 --14 --15 --15 --15 --15 --15 --14 --15 --14 --15 --15 --16 --15 --15 --35 --90 --128 --128 --108 --59 --29 --21 --26 --39 --50 --57 --57 --54 --47 --43 --37 --35 --33 --34 --33 --33 --31 --30 --28 --27 --26 --25 --25 --24 --23 --23 --22 --21 --21 --22 --21 --22 --21 --21 --20 --20 --19 --19 --18 --19 --17 --18 --17 --18 --17 --17 --16 --17 --16 --17 --16 --17 --16 --16 --15 --16 --15 --16 -52 -127 -127 -127 -115 -53 -5 --24 --32 --27 --14 --1 -10 -14 -14 -10 -5 --1 --4 --7 --7 --8 --7 --7 --6 --7 --8 --9 --9 --10 --10 --11 --11 --11 --11 --12 --12 --13 --12 --13 --13 --13 --13 --14 --13 --14 --14 --15 --14 --14 --13 --14 --14 --15 --14 --15 --15 --15 --15 --15 --14 --16 --15 --16 --35 --90 --128 --128 --108 --59 --29 --20 --26 --39 --51 --57 --57 --54 --47 --42 --37 --35 --33 --34 --32 --33 --31 --30 --29 --28 --26 --25 --24 --24 --23 --23 --22 --22 --21 --21 --20 --21 --19 --19 --18 --19 --18 --18 --17 --17 --17 --17 --17 --17 --16 --16 --15 --16 --15 --16 --15 --16 --15 --16 --15 --16 --15 --15 -52 -127 -127 -127 -114 -51 -3 --25 --33 --28 --15 --2 -9 -13 -13 -9 -4 --1 --5 --7 --8 --8 --7 --7 --7 --7 --8 --8 --9 --10 --10 --11 --31 --87 --128 --128 --105 --57 --26 --18 --24 --38 --49 --56 --56 --52 --46 --41 --36 --34 --33 --32 --31 --31 --30 --29 --28 --27 --25 --25 --24 --24 --22 --23 -45 -127 -127 -127 -108 -46 --2 --30 --37 --31 --17 --5 -6 -10 -11 -7 -2 --4 --6 --9 --9 --9 --9 --9 --8 --9 --9 --10 --10 --11 --11 --12 --32 --88 --128 --128 --107 --59 --29 --20 --26 --39 --50 --57 --57 --53 --47 --42 --37 --35 --33 --33 --32 --32 --31 --30 --28 --27 --26 --25 --24 --24 --23 --23 -45 -127 -127 -127 -109 -48 -0 --29 --36 --31 --17 --4 -7 -11 -11 -7 -3 --3 --6 --9 --9 --9 --8 --8 --7 --8 --8 --9 --10 --11 --11 --12 --12 --12 --12 --13 --12 --13 --13 --14 --13 --14 --14 --15 --14 --15 --14 --15 --14 --15 --15 --15 --15 --16 --15 --15 --15 --15 --14 --15 --14 --15 --15 --16 --35 --91 --128 --128 --108 --59 --29 --20 --26 --40 --51 --58 --58 --54 --47 --42 --37 --35 --34 --34 --33 --32 --31 --30 --28 --28 --26 --26 --24 --24 --23 --22 --21 --21 --21 --22 --21 --22 --21 --21 --20 --20 --19 --19 --18 --18 --17 --18 --17 --17 --16 --17 --16 --16 --16 --17 --16 --16 --15 --16 --15 --16 --15 --16 -52 -127 -127 -127 -115 -53 -4 --24 --32 --27 --13 --1 -10 -14 -14 -10 -5 --1 --4 --7 --8 --8 --7 --7 --6 --7 --7 --8 --9 --10 --10 --11 --11 --11 --11 --13 --12 --13 --12 --13 --13 --13 --13 --13 --13 --14 --14 --14 --14 --15 --14 --15 --14 --15 --15 --15 --15 --15 --15 --15 --15 --15 --15 --16 --35 --90 --128 --128 --108 --59 --29 --20 --26 --40 --51 --58 --57 --54 --48 --43 --37 --35 --33 --33 --32 --33 --31 --31 --29 --28 --26 --26 --24 --24 --23 --23 --22 --22 --21 --21 --21 --22 --21 --21 --20 --20 --19 --19 --18 --19 --17 --18 --17 --17 --16 --17 --16 --17 --15 --16 --15 --16 --15 --16 --15 --16 --15 --16 -52 -127 -127 -127 -115 -53 -5 --24 --32 --27 --13 --1 -10 -13 -14 -10 -5 --1 --4 --7 --7 --8 --7 --7 --6 --7 --7 --8 --8 --10 --10 --11 --11 --12 --12 --12 --12 --13 --12 --13 --13 --14 --13 --14 --13 --14 --14 --15 --14 --14 --14 --15 --14 --15 --15 --15 --15 --16 --15 --15 --14 --15 --15 --15 --35 --90 --128 --128 --109 --61 --31 --22 --27 --40 --51 --58 --58 --56 --49 --43 --38 --35 --34 --34 --33 --33 --32 --31 --29 --28 --26 --26 --24 --25 --23 --23 -45 -127 -127 -127 -109 -47 -0 --29 --36 --31 --17 --4 -7 -11 -11 -7 -3 --3 --6 --8 --9 --10 --9 --9 --8 --8 --8 --9 --10 --11 --10 --11 --32 --88 --128 --128 --105 --57 --26 --18 --24 --38 --49 --56 --56 --52 --46 --41 --36 --34 --32 --32 --32 --32 --30 --30 --28 --27 --25 --25 --24 --24 --23 --23 --21 --21 --21 --21 --21 --21 --21 --21 --20 --20 --18 --19 --18 --18 --17 --18 --17 --17 --16 --17 --16 --17 --16 --17 --15 --16 --15 --16 --15 --16 --15 --16 -52 -127 -127 -127 -115 -53 -4 --24 --32 --27 --15 --1 -10 -14 -14 -9 -4 --1 --5 --7 --7 --8 --6 --7 --6 --7 --7 --9 --9 --10 --10 --11 --11 --12 --11 --12 --12 --13 --13 --13 --13 --13 --13 --14 --13 --14 --13 --15 --14 --15 --14 --15 --15 --15 --14 --15 --14 --15 --15 --16 --15 --16 --15 --16 --35 --90 --128 --128 --108 --60 --29 --21 --26 --39 --51 --57 --57 --54 --47 --42 --38 --35 --33 --33 --32 --32 --31 --30 --28 --28 --26 --26 --24 --25 --23 --23 --21 --22 --21 --22 --22 --22 --21 --21 --20 --19 --18 --19 --18 --19 --18 --18 --17 --17 --17 --17 --16 --16 --16 --16 --15 --16 --16 --16 --15 --16 --15 --15 -52 -127 -127 -127 -115 -52 -4 --25 --32 --27 --13 --1 -10 -14 -14 -10 -5 --1 --4 --7 --7 --8 --7 --7 --6 --7 --7 --9 --9 --10 --10 --11 --11 --12 --11 --12 --12 --13 --12 --13 --13 --14 --13 --14 --14 --14 --14 --14 --14 --14 --14 --15 --15 --15 --14 --15 --14 --15 --14 --15 --15 --16 --15 --16 --35 --91 --128 --128 --109 --61 --31 --22 --28 --41 --51 --59 --58 --55 --48 --43 --38 --36 --34 --34 --33 --33 --32 --31 --29 --28 --26 --26 --24 --24 --23 --23 -45 -127 -127 -127 -109 -48 -0 --28 --36 --31 --17 --4 -7 -11 -12 -7 -2 --3 --6 --9 --9 --9 --8 --8 --7 --8 --8 --9 --10 --10 --11 --12 --32 --88 --128 --128 --107 --59 --28 --20 --26 --39 --50 --57 --57 --54 --47 --42 --37 --35 --33 --33 --32 --32 --31 --30 --29 --28 --26 --25 --24 --24 --23 --23 -45 -127 -127 -127 -109 -48 -0 --28 --36 --31 --17 --4 -7 -11 -11 -7 -2 --3 --6 --9 --9 --10 --8 --9 --7 --8 --8 --10 --10 --11 --11 --12 --32 --88 --128 --128 --107 --59 --29 --20 --26 --39 --50 --57 --57 --53 --47 --42 --37 --35 --33 --33 --32 --32 --31 --30 --29 --28 --26 --25 --24 --24 --23 --23 -45 -127 -127 -127 -109 -48 -0 --29 --36 --31 --17 --4 -7 -11 -11 -7 -2 --3 --6 --8 --9 --9 --8 --8 --8 --8 --8 --9 --10 --11 --11 --12 --31 --87 --128 --128 --107 --59 --29 --20 --26 --39 --49 --57 --57 --53 --47 --42 --37 --35 --33 --33 --32 --32 --31 --30 --28 --28 --25 --25 --24 --24 --23 --23 -45 -127 -127 -127 -109 -47 -0 --28 --36 --30 --17 --4 -7 -11 -11 -7 -3 --3 --6 --9 --10 --9 --8 --8 --7 --8 --8 --10 --10 --11 --11 --12 --32 --88 --128 --128 --107 --59 --29 --20 --26 --39 --50 --57 --56 --53 --47 --42 --37 --35 --33 --33 --32 --32 --31 --30 --28 --28 --26 --26 --24 --24 --23 --23 -45 -127 -127 -127 -110 -48 -0 --29 --36 --30 --17 --4 -7 -11 -12 -7 -2 --3 --6 --9 --9 --9 --8 --8 --7 --8 --8 --10 --10 --11 --11 --12 --31 --87 --128 --128 --107 --59 --29 --20 --26 --39 --50 --57 --57 --53 --47 --42 --37 --35 --33 --33 --32 --32 --30 --30 --28 --28 --26 --25 --24 --24 --23 --23 -45 -127 -127 -127 -110 -48 --1 --29 --36 --31 --17 --4 -7 -11 -11 -7 -2 --3 --6 --9 --9 --9 --8 --8 --7 --8 --9 --10 --10 --11 --11 --12 --31 --87 --128 --128 --107 --59 --29 --20 --26 --39 --50 --57 --56 --53 --47 --42 --37 --35 --33 --33 --32 --32 --31 --30 --28 --28 --26 --25 --24 --24 --23 --23 -45 -127 -127 -127 -109 -48 -0 --28 --36 --31 --17 --4 -7 -11 -11 -7 -3 --3 --6 --9 --9 --10 --9 --9 --8 --8 --8 --10 --10 --11 --11 --12 --32 --88 --128 --128 --107 --59 --29 --20 --26 --39 --50 --57 --57 --53 --47 --42 --36 --35 --33 --33 --32 --33 --31 --31 --29 --28 --26 --25 --24 --24 --23 --23 -45 -127 -127 -127 -110 -48 -0 --28 --36 --31 --17 --4 -7 -11 -12 -7 -3 --3 --6 --9 --9 --9 --8 --8 --7 --9 --9 --10 --10 --11 --11 --12 --32 --88 --128 --128 --105 --56 --26 --18 --24 --38 --49 --56 --56 --53 --46 --42 --36 --35 --32 --33 --32 --32 --31 --30 --28 --27 --26 --25 --24 --24 --23 --23 --22 --22 --21 --21 --20 --20 --19 --19 --18 --18 --17 --18 --17 --18 --17 --17 --16 --16 --16 --16 --15 --16 --15 --16 --15 --16 --15 --15 --15 --16 --15 --15 -52 -127 -127 -127 -113 -51 -3 --26 --34 --28 --15 --2 -9 -13 -13 -9 -4 --1 --5 --7 --8 --8 --7 --7 --6 --7 --7 --9 --9 --10 --10 --11 --31 --87 --128 --128 --105 --57 --26 --19 --24 --38 --49 --56 --56 --53 --46 --41 --36 --34 --32 --32 --31 --32 --30 --29 --28 --27 --25 --25 --23 --23 --22 --23 -45 -127 -127 -127 -108 -46 --2 --30 --37 --32 --18 --5 -6 -10 -11 -7 -2 --3 --6 --9 --9 --10 --9 --8 --8 --9 --9 --10 --10 --11 --11 --12 --31 --87 --128 --128 --107 --59 --29 --21 --26 --39 --50 --57 --57 --53 --47 --42 --37 --35 --33 --33 --32 --33 --31 --30 --28 --27 --26 --25 --24 --24 --23 --22 -45 -127 -127 -127 -110 -48 -0 --28 --36 --30 --17 --4 -7 -11 -11 -7 -2 --3 --6 --9 --9 --9 --8 --8 --7 --8 --8 --10 --10 --11 --11 --12 --12 --12 --12 --13 --12 --13 --13 --14 --13 --14 --13 --14 --13 --15 --14 --15 --14 --15 --14 --15 --14 --15 --15 --16 --15 --16 --15 --15 --15 --15 --15 --16 --35 --90 --128 --128 --110 --61 --31 --22 --28 --41 --51 --58 --58 --55 --48 --43 --38 --36 --34 --34 --33 --33 --31 --31 --29 --28 --26 --26 --25 --25 --23 --24 -44 -127 -127 -127 -109 -47 -0 --29 --36 --31 --17 --4 -7 -11 -11 -7 -2 --3 --6 --9 --9 --9 --8 --8 --8 --8 --8 --10 --10 --11 --10 --11 --31 --87 --128 --128 --107 --58 --28 --20 --26 --39 --50 --57 --57 --53 --47 --41 --37 --34 --33 --33 --32 --32 --31 --30 --28 --27 --25 --25 --24 --24 --23 --23 -45 -127 -127 -127 -110 -48 -0 --29 --36 --31 --18 --4 -7 -11 -11 -7 -2 --3 --6 --8 --9 --10 --8 --9 --8 --9 --8 --10 --10 --11 --11 --12 --32 --88 --128 --128 --107 --59 --29 --20 --26 --39 --49 --57 --57 --53 --47 --42 --37 --35 --33 --33 --32 --32 --31 --30 --28 --27 --26 --25 --24 --24 --23 --23 -45 -127 -127 -127 -110 -48 -0 --28 --35 --30 --17 --4 -7 -11 -12 -7 -3 --3 --6 --8 --9 --9 --8 --8 --8 --8 --8 --9 --9 --11 --11 --12 --32 --88 --128 --128 --107 --59 --28 --20 --25 --39 --50 --57 --57 --53 --47 --42 --37 --34 --33 --33 --32 --32 --31 --30 --28 --27 --26 --25 --24 --24 --23 --23 -45 -127 -127 -127 -110 -48 -0 --28 --36 --31 --17 --4 -7 -11 -12 -7 -3 --3 --6 --9 --9 --10 --8 --9 --8 --8 --8 --9 --10 --11 --11 --12 --32 --88 --128 --128 --107 --59 --28 --20 --26 --39 --50 --57 --57 --53 --47 --42 --37 --35 --33 --33 --32 --32 --31 --30 --29 --28 --26 --25 --24 --24 --23 --23 -45 -127 -127 -127 -110 -48 -0 --28 --36 --31 --17 --4 -7 -11 -11 -7 -2 --3 --6 --9 --9 --10 --8 --8 --7 --8 --8 --9 --9 --11 --11 --12 --31 --88 --128 --128 --105 --57 --27 --18 --24 --38 --49 --56 --56 --52 --46 --41 --36 --34 --33 --33 --32 --32 --30 --30 --28 --27 --25 --25 --24 --24 --23 --23 --22 --21 --21 --21 --20 --20 --19 --19 --18 --19 --17 --18 --17 --17 --17 --17 --17 --17 --16 --16 --16 --16 --16 --16 --15 --16 --15 --16 --15 --16 --15 --16 -52 -127 -127 -127 -114 -51 -3 --26 --34 --28 --15 --2 -9 -13 -13 -9 -4 --2 --5 --7 --7 --8 --7 --7 --6 --7 --7 --9 --9 --11 --11 --12 --31 --87 --128 --128 --105 --57 --26 --18 --24 --38 --49 --55 --56 --53 --46 --41 --36 --34 --32 --32 --32 --32 --30 --29 --28 --27 --25 --25 --24 --24 --23 --23 -45 -127 -127 -127 -108 -46 --1 --30 --37 --32 --17 --5 -6 -10 -11 -6 -2 --3 --6 --9 --9 --9 --9 --9 --8 --9 --9 --10 --10 --11 --11 --12 --32 --88 --128 --128 --106 --57 --27 --19 --25 --38 --49 --56 --56 --53 --46 --41 --36 --34 --33 --33 --32 --32 --30 --29 --28 --27 --25 --25 --24 --24 --23 --23 -45 -127 -127 -127 -108 -46 --2 --30 --37 --31 --17 --4 -6 -10 -10 -6 -1 --4 --7 --9 --10 --10 --9 --9 --8 --9 --9 --10 --10 --11 --11 --12 --32 --88 --128 --128 --106 --57 --27 --18 --25 --37 --49 --56 --56 --53 --46 --41 --36 --34 --32 --32 --32 --32 --30 --29 --28 --27 --25 --25 --24 --24 --23 --23 -45 -127 -127 -127 -108 -45 --2 --30 --37 --32 --18 --5 -6 -10 -11 -6 -2 --4 --6 --9 --9 --10 --9 --9 --8 --9 --9 --10 --10 --11 --11 --12 --32 --88 --128 --128 --106 --57 --26 --18 --24 --37 --49 --56 --56 --53 --46 --41 --36 --34 --32 --33 --32 --32 --30 --30 --28 --27 --25 --25 --24 --24 --23 --23 -45 -127 -127 -127 -108 -46 --2 --30 --37 --32 --18 --4 -6 -11 -11 -7 -2 --3 --6 --9 --9 --10 --9 --9 --8 --9 --9 --10 --10 --11 --11 --12 --32 --88 --128 --128 --106 --57 --26 --18 --24 --38 --49 --56 --56 --53 --46 --41 --36 --34 --32 --33 --32 --32 --31 --30 --28 --27 --26 --25 --24 --24 --23 --23 -45 -127 -127 -127 -108 -46 --2 --30 --37 --31 --17 --5 -6 -11 -11 -7 -2 --4 --7 --10 --10 --10 --9 --8 --7 --9 --9 --10 --10 --11 --11 --12 --32 --88 --128 --128 --106 --58 --27 --19 --24 --38 --49 --56 --56 --53 --47 --41 --36 --34 --32 --32 --31 --32 --30 --30 --27 --27 --25 --25 --24 --24 --23 --23 -45 -127 -127 -127 -108 -46 --2 --30 --37 --32 --18 --5 -6 -10 -10 -6 -2 --3 --6 --9 --9 --10 --8 --8 --7 --9 --9 --10 --10 --11 --11 --12 --32 --88 --128 --128 --106 --57 --26 --18 --24 --38 --49 --56 --55 --52 --46 --41 --36 --34 --33 --33 --32 --32 --30 --29 --28 --28 --25 --25 --24 --24 --23 --22 -45 -127 -127 -127 -108 -46 --2 --30 --37 --32 --17 --5 -6 -10 -10 -6 -1 --4 --7 --9 --9 --10 --9 --9 --8 --8 --8 --9 --10 --11 --11 --12 --32 --88 --128 --128 --106 --57 --26 --18 --24 --37 --49 --56 --56 --52 --46 --41 --36 --34 --32 --33 --32 --32 --30 --29 --28 --27 --25 --25 --24 --24 --23 --23 -46 -127 -127 -127 -108 -46 --2 --30 --37 --32 --17 --4 -7 -11 -11 -7 -2 --3 --7 --9 --9 --10 --9 --8 --8 --8 --8 --10 --10 --12 --11 --12 --32 --88 --128 --128 --106 --57 --26 --18 --24 --38 --49 --56 --56 --52 --46 --41 --36 --34 --33 --33 --32 --32 --30 --29 --28 --27 --26 --25 --24 --24 --23 --23 -45 -127 -127 -127 -108 -45 --2 --31 --38 --32 --18 --5 -6 -11 -11 -6 -2 --4 --7 --10 --10 --10 --9 --9 --8 --9 --9 --10 --10 --11 --11 --12 --32 --88 --128 --128 --107 --59 --29 --20 --26 --39 --50 --57 --57 --53 --47 --42 --37 --35 --33 --33 --32 --32 --31 --30 --28 --28 --26 --25 --24 --24 --23 --23 -45 -127 -127 -127 -110 -48 -0 --29 --36 --31 --17 --4 -7 -11 -11 -7 -2 --3 --6 --9 --9 --10 --8 --8 --7 --8 --8 --10 --10 --10 --10 --12 --12 --12 --12 --13 --12 --13 --13 --13 --13 --14 --14 --14 --14 --15 --14 --15 --14 --15 --14 --15 --14 --15 --15 --15 --14 --15 --14 --15 --15 --16 --15 --16 --35 --91 --128 --128 --109 --61 --31 --22 --28 --41 --51 --58 --58 --54 --48 --43 --38 --36 --34 --34 --33 --33 --31 --30 --29 --28 --26 --26 --25 --25 --23 --23 -45 -127 -127 -127 -109 -47 --1 --29 --36 --31 --17 --4 -7 -11 -11 -7 -3 --3 --6 --9 --9 --10 --8 --9 --8 --8 --9 --10 --10 --11 --11 --12 --31 --87 --128 --128 --105 --57 --27 --19 --25 --38 --49 --56 --56 --53 --47 --41 --37 --34 --32 --33 --32 --32 --30 --31 --28 --27 --25 --25 --24 --24 --23 --23 --22 --21 --21 --22 --21 --21 --20 --21 --19 --20 --19 --19 --18 --18 --17 --18 --17 --17 --17 --17 --16 --17 --16 --17 --16 --16 --15 --16 --15 --16 --15 --16 -52 -127 -127 -127 -115 -53 -5 --24 --32 --27 --14 --1 -9 -13 -14 -10 -5 --1 --4 --7 --8 --8 --7 --7 --6 --7 --7 --8 --8 --10 --10 --11 --11 --12 --12 --12 --12 --12 --13 --13 --13 --14 --13 --14 --13 --14 --14 --15 --14 --15 --14 --15 --14 --15 --14 --15 --15 --16 --15 --15 --14 --15 --14 --15 --35 --90 --128 --128 --109 --61 --31 --22 --28 --41 --52 --58 --58 --55 --48 --43 --38 --36 --34 --34 --33 --33 --32 --31 --29 --28 --26 --26 --24 --24 --24 --23 -45 -127 -127 -127 -110 -48 -0 --29 --36 --31 --17 --4 -6 -11 -11 -7 -2 --3 --6 --9 --9 --10 --9 --9 --8 --8 --8 --9 --10 --11 --11 --12 --32 --88 --128 --128 --107 --59 --28 --20 --25 --39 --49 --56 --57 --53 --47 --42 --37 --35 --33 --33 --32 --33 --31 --31 --28 --28 --26 --25 --24 --24 --23 --23 -45 -127 -127 -127 -110 -47 -0 --29 --36 --31 --17 --4 -7 -11 -11 -7 -2 --3 --6 --8 --9 --9 --8 --8 --8 --8 --8 --10 --9 --11 --11 --12 --32 --88 --128 --128 --105 --57 --27 --18 --24 --38 --49 --56 --56 --53 --46 --41 --36 --35 --32 --33 --31 --32 --30 --30 --28 --27 --25 --25 --24 --23 --23 --23 --22 --21 --20 --21 --19 --20 --19 --19 --18 --19 --18 --18 --17 --18 --17 --17 --16 --17 --16 --16 --15 --16 --15 --16 --15 --15 --15 --15 --15 --15 --15 --15 -52 -127 -127 -127 -114 -51 -3 --26 --33 --28 --14 --1 -9 -13 -13 -9 -4 --1 --5 --7 --7 --8 --7 --7 --6 --7 --7 --9 --9 --10 --11 --11 --31 --87 --128 --128 --107 --59 --28 --19 --25 --38 --49 --56 --56 --53 --47 --42 --37 --35 --33 --33 --32 --32 --30 --30 --28 --28 --26 --26 --24 --24 --23 --23 -45 -127 -127 -127 -110 -48 -0 --28 --36 --30 --17 --4 -7 -11 -11 -7 -3 --3 --6 --9 --9 --9 --8 --8 --8 --8 --9 --10 --10 --11 --11 --12 --11 --12 --11 --13 --12 --13 --13 --13 --13 --14 --13 --14 --14 --15 --14 --15 --14 --15 --14 --15 --14 --15 --15 --16 --15 --16 --15 --15 --14 --15 --15 --16 --35 --91 --128 --128 --108 --59 --29 --20 --26 --40 --51 --57 --57 --54 --48 --42 --38 --36 --33 --33 --32 --33 --31 --30 --29 --28 --26 --25 --24 --24 --23 --23 --22 --21 --21 --22 --21 --22 --21 --21 --20 --20 --19 --19 --18 --18 --17 --18 --17 --17 --17 --17 --16 --17 --16 --16 --16 --16 --15 --16 --15 --16 --15 --15 -52 -127 -127 -127 -114 -53 -5 --24 --32 --27 --13 --1 -9 -13 -14 -9 -5 --1 --4 --7 --7 --8 --7 --7 --6 --7 --7 --9 --9 --10 --10 --11 --11 --12 --12 --12 --12 --12 --12 --13 --13 --13 --13 --14 --13 --14 --14 --15 --14 --15 --14 --15 --14 --15 --14 --15 --14 --15 --15 --15 --15 --15 --14 --15 --35 --90 --128 --128 --107 --59 --29 --20 --26 --40 --51 --57 --57 --54 --48 --43 --38 --35 --33 --33 --32 --33 --31 --31 --29 --28 --26 --25 --24 --24 --23 --23 --22 --22 --21 --22 --21 --22 --21 --21 --19 --19 --18 --19 --18 --19 --18 --18 --17 --18 --17 --17 --16 --17 --16 --16 --15 --16 --15 --15 --15 --16 --15 --15 -52 -127 -127 -127 -115 -53 -5 --24 --33 --27 --14 --1 -9 -13 -14 -10 -4 --1 --4 --7 --7 --8 --7 --7 --6 --7 --7 --8 --9 --10 --10 --12 --11 --12 --11 --12 --12 --13 --12 --14 --13 --14 --13 --14 --13 --14 --14 --14 --13 --15 --14 --15 --14 --16 --15 --15 --14 --16 --15 --16 --15 --15 --14 --15 --35 --90 --128 --128 --109 --61 --31 --22 --28 --41 --52 --58 --58 --54 --48 --43 --38 --36 --34 --34 --33 --33 --31 --30 --29 --28 --26 --26 --25 --25 --23 --23 -45 -127 -127 -127 -109 -47 -0 --28 --36 --31 --17 --4 -7 -11 -11 -7 -3 --3 --6 --9 --9 --10 --9 --9 --8 --9 --9 --10 --10 --11 --11 --12 --32 --88 --128 --128 --107 --59 --29 --20 --26 --39 --50 --57 --56 --53 --47 --42 --37 --35 --33 --33 --32 --32 --30 --30 --28 --27 --26 --25 --24 --24 --23 --22 -45 -127 -127 -127 -110 -48 -0 --29 --36 --31 --17 --4 -7 -11 -11 -7 -3 --3 --6 --8 --9 --9 --9 --8 --8 --8 --9 --9 --10 --11 --11 --12 --32 --88 --128 --128 --105 --57 --27 --19 --24 --37 --49 --56 --56 --53 --46 --41 --36 --34 --33 --33 --32 --32 --30 --30 --28 --27 --26 --25 --24 --24 --23 --22 --21 --21 --21 --21 --20 --20 --19 --19 --17 --18 --17 --18 --17 --17 --17 --17 --16 --17 --16 --16 --16 --16 --15 --16 --15 --16 --15 --16 --14 --15 --15 --15 -52 -127 -127 -127 -114 -51 -3 --25 --33 --28 --15 --2 -9 -13 -14 -9 -5 --1 --4 --7 --8 --8 --7 --7 --7 --8 --7 --8 --9 --10 --10 --11 --31 --87 --128 --128 --107 --59 --28 --20 --25 --38 --49 --56 --56 --53 --47 --42 --36 --34 --33 --33 --32 --32 --31 --30 --28 --27 --25 --25 --24 --24 --23 --23 -45 -127 -127 -127 -109 -48 -0 --28 --36 --31 --17 --4 -7 -11 -11 -7 -3 --3 --6 --9 --9 --10 --9 --8 --7 --8 --8 --9 --10 --11 --11 --12 --12 --12 --12 --12 --12 --13 --12 --13 --13 --14 --14 --14 --14 --14 --14 --15 --14 --15 --14 --15 --15 --15 --15 --15 --14 --15 --15 --15 --15 --16 --15 --16 --35 --90 --128 --128 --109 --62 --31 --23 --28 --41 --51 --58 --58 --55 --48 --43 --38 --36 --34 --34 --33 --33 --31 --31 --29 --28 --26 --26 --25 --25 --24 --23 -45 -127 -127 -127 -109 -48 -0 --29 --36 --31 --17 --4 -7 -11 -11 -7 -2 --3 --6 --9 --9 --9 --8 --8 --8 --9 --9 --10 --10 --11 --11 --12 --32 --88 --128 --128 --105 --57 --27 --19 --25 --38 --49 --56 --56 --53 --46 --41 --37 --34 --32 --32 --31 --32 --30 --30 --28 --27 --25 --25 --24 --24 --23 --23 --22 --22 --21 --21 --22 --22 --21 --20 --19 --19 --18 --18 --18 --18 --17 --18 --17 --18 --17 --17 --16 --16 --15 --16 --15 --16 --15 --16 --15 --15 --14 --15 -52 -127 -127 -127 -115 -52 -5 --24 --32 --27 --13 -0 -10 -14 -14 -9 -4 --1 --5 --7 --7 --7 --6 --7 --6 --7 --7 --9 --9 --10 --10 --11 --11 --11 --11 --12 --12 --12 --12 --13 --12 --13 --13 --14 --13 --15 --14 --15 --14 --14 --14 --15 --14 --15 --15 --15 --15 --16 --15 --15 --15 --16 --15 --16 --35 --91 --128 --128 --108 --59 --29 --20 --26 --39 --51 --57 --57 --54 --48 --42 --37 --35 --33 --33 --32 --33 --31 --30 --28 --28 --26 --26 --24 --24 --23 --23 --22 --22 --21 --22 --21 --22 --21 --21 --20 --20 --18 --19 --18 --18 --17 --18 --17 --17 --16 --17 --16 --17 --16 --16 --16 --17 --16 --16 --15 --16 --15 --16 -51 -127 -127 -127 -115 -53 -5 --24 --32 --27 --14 --1 -10 -13 -14 -10 -5 --1 --4 --7 --7 --7 --7 --7 --6 --7 --7 --8 --9 --10 --10 --11 --11 --12 --11 --12 --12 --13 --12 --13 --12 --13 --13 --14 --13 --14 --14 --15 --14 --15 --14 --15 --14 --15 --14 --15 --15 --16 --15 --15 --14 --15 --15 --16 --35 --90 --128 --128 --108 --59 --29 --21 --26 --39 --50 --57 --57 --54 --48 --43 --37 --35 --33 --33 --32 --33 --31 --31 --28 --28 --26 --26 --24 --24 --23 --23 --21 --22 --21 --21 --20 --20 --19 --20 --18 --19 --17 --18 --17 --18 --17 --17 --16 --17 --16 --16 --15 --16 --16 --17 --15 --15 --15 --16 --15 --15 --14 --15 -53 -127 -127 -127 -114 -51 -3 --25 --33 --28 --14 --2 -9 -13 -13 -9 -4 --2 --5 --8 --8 --9 --7 --7 --7 --8 --8 --9 --9 --10 --10 --11 --31 --87 --128 --128 --105 --57 --26 --18 --24 --37 --48 --55 --56 --52 --46 --41 --36 --34 --32 --32 --31 --31 --30 --30 --28 --27 --25 --25 --24 --24 --23 --23 -45 -127 -127 -127 -108 -45 --2 --30 --37 --31 --17 --5 -6 -10 -11 -6 -2 --3 --6 --9 --9 --9 --9 --9 --8 --9 --8 --9 --9 --11 --11 --12 --31 --87 --128 --128 --107 --58 --28 --20 --26 --39 --50 --57 --57 --54 --47 --42 --37 --34 --33 --34 --32 --32 --30 --30 --28 --28 --26 --25 --24 --24 --23 --23 -45 -127 -127 -127 -109 -48 -0 --29 --36 --31 --17 --4 -6 -11 -11 -7 -3 --3 --6 --9 --9 --10 --8 --9 --8 --8 --8 --9 --9 --11 --11 --12 --12 --12 --12 --13 --12 --13 --12 --13 --13 --14 --14 --14 --14 --14 --14 --15 --14 --15 --15 --15 --15 --15 --15 --15 --15 --15 --15 --15 --15 --16 --15 --16 --35 --91 --128 --128 --108 --59 --29 --21 --26 --40 --50 --57 --57 --54 --47 --42 --37 --35 --33 --34 --33 --33 --31 --30 --28 --27 --26 --25 --24 --24 --23 --23 --21 --21 --21 --22 --21 --22 --21 --21 --20 --20 --19 --19 --17 --18 --17 --18 --17 --18 --17 --17 --16 --17 --16 --16 --15 --16 --15 --16 --15 --16 --15 --15 -52 -127 -127 -127 -115 -53 -5 --24 --32 --27 --14 --1 -10 -14 -14 -10 -5 --1 --4 --7 --7 --8 --6 --7 --6 --7 --7 --9 --9 --10 --10 --11 --11 --11 --11 --12 --12 --13 --12 --13 --13 --14 --14 --14 --13 --14 --13 --14 --14 --15 --14 --15 --15 --15 --15 --15 --15 --15 --15 --16 --15 --16 --15 --16 --35 --90 --128 --128 --108 --59 --29 --20 --26 --40 --51 --58 --58 --54 --47 --43 --37 --35 --34 --34 --32 --32 --31 --30 --29 --28 --26 --25 --25 --24 --23 --23 --22 --22 --22 --22 --22 --22 --21 --21 --20 --20 --19 --19 --18 --19 --17 --18 --17 --18 --17 --17 --16 --17 --16 --16 --15 --16 --15 --16 --15 --16 --15 --16 -52 -127 -127 -127 -115 -53 -5 --24 --32 --27 --14 --1 -10 -13 -14 -10 -5 --1 --4 --7 --7 --8 --7 --7 --6 --7 --7 --8 --9 --10 --10 --11 --10 --12 --12 --12 --12 --13 --12 --13 --13 --13 --13 --14 --13 --14 --14 --15 --14 --14 --14 --15 --14 --15 --14 --16 --15 --16 --15 --15 --15 --15 --15 --15 --35 --90 --128 --128 --109 --61 --31 --22 --28 --40 --51 --59 --58 --55 --48 --43 --38 --36 --34 --34 --33 --33 --31 --31 --29 --28 --27 --26 --25 --24 --23 --23 -45 -127 -127 -127 -109 -47 -0 --29 --36 --31 --17 --4 -7 -11 -11 -7 -3 --3 --6 --9 --9 --10 --8 --9 --8 --8 --8 --10 --10 --11 --11 --12 --32 --88 --128 --128 --105 --57 --27 --19 --24 --38 --49 --57 --56 --53 --46 --41 --36 --34 --33 --33 --32 --32 --31 --30 --28 --27 --25 --25 --24 --24 --23 --23 --21 --21 --21 --21 --21 --21 --20 --21 --19 --20 --19 --19 --18 --18 --17 --17 --17 --17 --17 --17 --16 --17 --16 --16 --15 --16 --15 --16 --15 --16 --15 --15 -52 -127 -127 -127 -115 -53 -5 --24 --32 --27 --13 --1 -9 -13 -14 -10 -5 --1 --4 --7 --7 --8 --7 --7 --6 --7 --7 --8 --8 --10 --10 --11 --11 --12 --11 --12 --12 --12 --12 --13 --13 --13 --13 --15 --14 --14 --14 --14 --14 --14 --14 --15 --14 --15 --15 --15 --14 --15 --14 --15 --15 --16 --15 --16 --35 --91 --128 --128 --108 --59 --29 --21 --26 --39 --50 --57 --57 --54 --47 --42 --37 --35 --33 --33 --33 --33 --31 --30 --29 --28 --26 --25 --24 --24 --23 --23 --22 --22 --21 --22 --21 --22 --21 --21 --20 --19 --19 --19 --18 --18 --18 --18 --17 --18 --16 --17 --16 --16 --15 --16 --15 --16 --15 --16 --15 --16 --15 --16 -52 -127 -127 -127 -115 -53 -5 --24 --32 --27 --14 --1 -10 -14 -14 -10 -5 --1 --4 --7 --7 --8 --7 --7 --6 --7 --7 --8 --9 --10 --10 --11 --11 --11 --11 --12 --13 --13 --12 --13 --13 --14 --13 --14 --13 --14 --14 --15 --14 --15 --14 --15 --14 --15 --14 --15 --15 --15 --15 --15 --15 --15 --15 --16 --35 --91 --128 --128 --109 --61 --31 --22 --28 --41 --51 --58 --58 --54 --48 --43 --38 --36 --34 --34 --33 --33 --31 --31 --29 --28 --26 --25 --24 --24 --23 --23 -45 -127 -127 -127 -110 -48 -0 --29 --36 --31 --17 --4 -7 -11 -11 -7 -3 --3 --6 --9 --9 --9 --8 --9 --8 --9 --9 --9 --10 --11 --11 --12 --32 --87 --128 --128 --107 --59 --29 --20 --26 --39 --50 --56 --57 --53 --47 --42 --37 --35 --33 --33 --32 --32 --31 --30 --29 --28 --26 --25 --24 --24 --23 --23 -45 -127 -127 -127 -109 -48 -0 --29 --36 --31 --17 --4 -7 -11 -11 -7 -2 --3 --6 --9 --9 --9 --8 --8 --7 --8 --8 --9 --10 --10 --11 --11 --32 --87 --128 --128 --107 --59 --28 --20 --25 --39 --49 --57 --57 --53 --47 --42 --38 --35 --33 --33 --32 --32 --31 --30 --28 --28 --26 --25 --24 --24 --23 --23 -45 -127 -127 -127 -109 -48 -0 --28 --36 --31 --17 --4 -7 -11 -11 -7 -3 --3 --6 --8 --9 --10 --8 --9 --8 --8 --8 --10 --10 --11 --11 --11 --31 --87 --128 --128 --107 --59 --29 --20 --25 --38 --49 --57 --56 --54 --47 --43 --38 --35 --33 --33 --32 --32 --31 --30 --28 --28 --26 --25 --24 --24 --24 --23 -45 -127 -127 -127 -110 -48 -0 --29 --36 --31 --17 --4 -7 -11 -12 -7 -3 --3 --6 --9 --9 --9 --8 --8 --8 --8 --8 --10 --10 --11 --11 --12 --32 --88 --128 --128 --107 --59 --29 --21 --26 --39 --50 --57 --57 --53 --47 --42 --37 --35 --33 --33 --32 --32 --31 --30 --28 --28 --26 --25 --24 --24 --23 --23 -45 -127 -127 -127 -109 -48 -0 --28 --36 --31 --17 --4 -7 -11 -11 -7 -2 --3 --6 --9 --9 --9 --8 --8 --8 --8 --8 --9 --10 --11 --11 --12 --32 --88 --128 --128 --107 --59 --29 --20 --26 --39 --49 --56 --56 --53 --47 --42 --37 --35 --33 --33 --32 --32 --31 --30 --28 --27 --26 --26 --24 --24 --23 --23 -45 -127 -127 -127 -109 -48 -0 --28 --36 --30 --17 --4 -7 -11 -11 -7 -3 --3 --5 --8 --9 --10 --8 --9 --7 --8 --8 --9 --9 --11 --11 --12 --32 --88 --128 --128 --106 --59 --28 --20 --25 --39 --50 --57 --57 --53 --47 --42 --37 --35 --33 --33 --32 --32 --31 --30 --28 --28 --26 --26 --24 --24 --23 --23 -45 -127 -127 -127 -109 -48 -0 --28 --36 --31 --17 --4 -7 -11 -11 -7 -3 --2 --6 --9 --9 --10 --8 --8 --7 --8 --8 --10 --10 --11 --11 --12 --32 --88 --128 --128 --107 --58 --29 --20 --26 --39 --50 --57 --56 --53 --47 --42 --37 --35 --33 --33 --32 --33 --31 --30 --29 --28 --25 --25 --24 --24 --23 --23 -45 -127 -127 -127 -110 -48 -0 --29 --36 --31 --17 --4 -7 -11 -12 -7 -2 --3 --6 --9 --9 --10 --8 --8 --7 --8 --8 --10 --10 --11 --11 --11 --31 --87 --128 --128 --106 --57 --27 --18 --24 --38 --49 --56 --56 --53 --46 --42 --36 --34 --32 --33 --32 --32 --30 --29 --28 --27 --25 --25 --24 --24 --23 --23 --22 --21 --21 --21 --20 --20 --19 --19 --18 --18 --17 --18 --17 --18 --17 --17 --17 --17 --16 --16 --15 --16 --15 --16 --15 --16 --15 --16 --15 --15 --14 --15 -53 -127 -127 -127 -113 -51 -3 --26 --33 --27 --14 --2 -9 -13 -13 -9 -4 --1 --5 --7 --8 --9 --7 --7 --6 --7 --7 --9 --9 --10 --10 --11 --31 --87 --128 --128 --105 --56 --26 --18 --24 --37 --48 --56 --56 --53 --46 --41 --36 --34 --32 --32 --32 --32 --30 --29 --28 --27 --25 --25 --24 --24 --23 --23 -45 -127 -127 -127 -108 -46 --1 --30 --38 --32 --18 --4 -6 -10 -11 -7 -2 --3 --6 --9 --9 --10 --9 --8 --8 --8 --9 --10 --10 --12 --12 --12 --32 --88 --128 --128 --107 --59 --29 --20 --26 --39 --49 --56 --57 --53 --47 --42 --37 --35 --33 --33 --32 --32 --31 --30 --28 --27 --26 --26 --24 --24 --23 --23 -45 -127 -127 -127 -109 -47 -0 --28 --36 --31 --17 --4 -7 -11 -11 -7 -2 --3 --7 --9 --9 --9 --8 --9 --8 --9 --9 --10 --10 --11 --10 --11 --11 --12 --12 --13 --13 --13 --13 --14 --13 --14 --13 --14 --14 --14 --14 --15 --15 --15 --14 --15 --14 --15 --15 --15 --15 --16 --15 --15 --15 --15 --15 --16 --35 --90 --128 --128 --109 --61 --31 --22 --28 --41 --52 --59 --58 --55 --48 --43 --38 --36 --34 --34 --33 --33 --31 --31 --29 --28 --26 --26 --25 --25 --23 --23 -45 -127 -127 -127 -109 -47 --1 --29 --36 --31 --17 --4 -7 -11 -11 -7 -2 --3 --6 --9 --9 --10 --8 --9 --7 --8 --8 --9 --9 --11 --11 --12 --32 --88 --128 --128 --107 --59 --28 --20 --26 --39 --50 --57 --57 --53 --47 --42 --37 --34 --33 --33 --32 --32 --31 --30 --28 --27 --26 --25 --24 --24 --23 --23 -45 -127 -127 -127 -110 -48 -0 --29 --36 --31 --17 --4 -7 -11 -11 -7 -2 --3 --6 --9 --9 --9 --8 --8 --8 --8 --8 --10 --10 --11 --11 --12 --32 --88 --128 --128 --107 --59 --29 --21 --26 --39 --49 --57 --57 --53 --47 --42 --37 --35 --33 --33 --32 --33 --31 --30 --28 --28 --26 --26 --24 --24 --23 --23 -45 -127 -127 -127 -110 -48 -0 --28 --36 --30 --17 --4 -7 -11 -12 -7 -3 --3 --6 --9 --9 --9 --8 --8 --7 --8 --8 --9 --10 --11 --11 --12 --31 --87 --128 --128 --107 --59 --29 --20 --26 --39 --50 --56 --57 --53 --47 --42 --37 --35 --33 --33 --32 --32 --31 --30 --29 --27 --26 --25 --24 --24 --23 --23 -45 -127 -127 -127 -109 -48 -0 --28 --36 --30 --17 --4 -7 -11 -12 -7 -3 --3 --6 --8 --9 --9 --8 --8 --8 --8 --8 --9 --10 --11 --11 --12 --31 --88 --128 --128 --107 --59 --29 --20 --26 --39 --50 --57 --57 --53 --47 --42 --37 --35 --33 --33 --32 --32 --31 --30 --28 --27 --25 --25 --24 --24 --23 --23 -45 -127 -127 -127 -110 -47 -0 --29 --36 --31 --17 --4 -7 -11 -12 -7 -3 --3 --6 --9 --9 --9 --8 --8 --7 --8 --8 --10 --10 --11 --11 --12 --32 --88 --128 --128 --105 --57 --27 --19 --25 --38 --49 --56 --56 --53 --47 --41 --36 --34 --32 --33 --32 --32 --30 --30 --28 --27 --25 --25 --24 --24 --23 --23 --22 --21 --21 --21 --20 --20 --19 --19 --18 --18 --17 --18 --17 --17 --16 --17 --16 --16 --16 --16 --15 --16 --15 --16 --15 --16 --15 --16 --15 --16 --15 --16 -52 -127 -127 -127 -114 -51 -3 --26 --33 --28 --14 --2 -9 -13 -14 -9 -4 --2 --5 --8 --8 --8 --7 --7 --6 --7 --7 --9 --9 --10 --10 --11 --31 --87 --128 --128 --105 --57 --26 --18 --24 --37 --49 --56 --56 --53 --46 --41 --36 --34 --32 --32 --31 --32 --30 --30 --28 --27 --25 --25 --24 --24 --23 --23 -46 -127 -127 -127 -109 -47 --2 --31 --37 --32 --18 --5 -6 -11 -11 -6 -2 --4 --7 --9 --9 --10 --8 --9 --8 --8 --8 --10 --10 --11 --11 --11 --32 --87 --128 --128 --106 --57 --27 --18 --24 --38 --49 --56 --56 --53 --46 --41 --36 --34 --33 --33 --32 --32 --31 --30 --28 --27 --25 --25 --24 --24 --23 --23 -45 -127 -127 -127 -108 -45 --2 --30 --37 --32 --17 --4 -7 -11 -11 -6 -1 --4 --6 --9 --9 --9 --9 --9 --8 --9 --9 --10 --10 --11 --11 --12 --32 --87 --128 --128 --106 --57 --27 --18 --24 --38 --49 --56 --56 --53 --47 --41 --37 --34 --33 --33 --32 --32 --30 --29 --28 --27 --25 --25 --24 --24 --23 --23 -45 -127 -127 -127 -108 -47 --1 --30 --37 --32 --17 --4 -6 -11 -11 -7 -2 --3 --6 --9 --9 --9 --8 --8 --8 --8 --9 --10 --10 --11 --11 --12 --32 --87 --128 --128 --106 --57 --26 --18 --24 --38 --49 --56 --56 --52 --46 --41 --36 --34 --32 --33 --32 --32 --30 --29 --28 --27 --26 --25 --24 --24 --23 --23 -45 -127 -127 -127 -108 -46 --2 --30 --37 --32 --18 --4 -6 -11 -11 -7 -2 --4 --7 --9 --10 --10 --8 --8 --8 --8 --8 --10 --10 --11 --11 --12 --32 --88 --128 --128 --106 --57 --27 --19 --25 --38 --49 --56 --56 --53 --46 --41 --37 --34 --33 --33 --32 --32 --30 --30 --28 --27 --25 --25 --24 --24 --23 --23 -45 -127 -127 -127 -108 -46 --2 --30 --37 --32 --17 --5 -6 -10 -10 -6 -2 --3 --6 --9 --10 --10 --9 --9 --7 --8 --8 --10 --10 --11 --11 --12 --32 --88 --128 --128 --106 --57 --27 --18 --25 --38 --49 --56 --56 --53 --46 --41 --36 --34 --33 --33 --32 --32 --30 --30 --28 --27 --26 --25 --24 --24 --23 --23 -45 -127 -127 -127 -108 -46 --2 --30 --37 --32 --18 --4 -6 -10 -11 -6 -2 --4 --7 --9 --10 --10 --8 --8 --8 --8 --9 --10 --10 --11 --11 --12 --32 --88 --128 --128 --106 --57 --27 --19 --24 --38 --49 --56 --56 --53 --47 --41 --37 --34 --32 --32 --31 --32 --30 --30 --28 --27 --26 --26 --24 --24 --22 --22 -45 -127 -127 -127 -108 -46 --2 --30 --37 --32 --17 --4 -7 -11 -11 -6 -1 --4 --6 --9 --9 --9 --9 --9 --8 --9 --8 --9 --9 --11 --11 --12 --32 --88 --128 --128 --106 --57 --27 --18 --24 --38 --49 --56 --56 --53 --46 --41 --36 --34 --32 --32 --32 --32 --30 --30 --28 --27 --25 --25 --24 --24 --23 --23 -45 -127 -127 -127 -108 -46 --2 --30 --37 --31 --17 --4 -6 -10 -10 -6 -2 --3 --7 --9 --10 --10 --9 --9 --8 --8 --9 --10 --10 --11 --11 --12 --32 --88 --128 --128 --106 --57 --26 --18 --25 --38 --49 --56 --56 --53 --46 --41 --36 --34 --32 --33 --32 --32 --30 --30 --28 --27 --26 --25 --24 --23 --22 --23 -46 -127 -127 -127 -108 -45 --2 --30 --37 --32 --18 --4 -6 -10 -10 -6 -2 --3 --6 --9 --9 --10 --9 --9 --8 --9 --9 --10 --10 --11 --11 --12 --32 --88 --128 --128 --107 --59 --28 --20 --25 --39 --50 --57 --57 --53 --47 --42 --37 --35 --33 --33 --32 --32 --31 --30 --28 --27 --26 --25 --24 --24 --23 --23 -45 -127 -127 -127 -110 -48 -0 --28 --36 --31 --17 --4 -7 -11 -12 -8 -3 --3 --6 --9 --9 --9 --8 --8 --8 --8 --9 --10 --10 --11 --11 --12 --11 --12 --12 --13 --12 --13 --13 --14 --13 --14 --13 --14 --13 --14 --14 --15 --14 --15 --14 --15 --14 --15 --14 --16 --14 --15 --15 --15 --15 --16 --15 --16 --35 --91 --128 --128 --109 --61 --31 --22 --28 --41 --52 --59 --58 --55 --48 --43 --38 --35 --34 --34 --33 --33 --32 --31 --29 --28 --26 --26 --25 --24 --24 --23 -44 -127 -127 -127 -110 -48 -0 --28 --36 --31 --17 --4 -7 -11 -11 -7 -3 --3 --6 --9 --10 --10 --9 --8 --7 --8 --8 --9 --10 --11 --11 --12 --32 --88 --128 --128 --105 --57 --26 --18 --24 --38 --49 --56 --56 --52 --46 --41 --36 --34 --32 --33 --32 --32 --30 --29 --28 --27 --25 --25 --24 --24 --23 --23 --22 --21 --21 --22 --21 --22 --21 --21 --20 --20 --19 --19 --18 --18 --17 --18 --17 --17 --16 --17 --17 --16 --15 --16 --16 --16 --15 --16 --15 --16 --15 --15 -52 -127 -127 -127 -115 -53 -5 --24 --32 --27 --13 --1 -10 -14 -14 -9 -5 --1 --4 --7 --7 --8 --7 --7 --6 --7 --7 --9 --9 --10 --10 --11 --11 --12 --12 --12 --12 --13 --12 --13 --12 --13 --13 --14 --13 --14 --14 --14 --14 --14 --14 --15 --14 --15 --14 --15 --15 --15 --15 --15 --15 --15 --15 --16 --35 --90 --128 --128 --109 --61 --31 --22 --28 --41 --52 --58 --58 --54 --48 --43 --38 --36 --34 --34 --33 --33 --31 --31 --29 --28 --26 --26 --24 --24 --23 --23 -44 -127 -127 -127 -110 -48 -0 --29 --37 --31 --17 --4 -7 -11 -11 -7 -2 --4 --6 --8 --9 --9 --9 --8 --8 --9 --8 --10 --10 --11 --11 --12 --32 --88 --128 --128 --107 --59 --29 --20 --25 --39 --49 --57 --57 --53 --47 --42 --37 --35 --33 --33 --32 --32 --31 --30 --28 --27 --26 --25 --24 --24 --23 --23 -45 -127 -127 -127 -110 -48 -0 --29 --36 --31 --17 --4 -7 -11 -12 -7 -2 --3 --6 --9 --9 --9 --8 --8 --8 --8 --8 --9 --10 --11 --11 --12 --32 --88 --128 --128 --105 --57 --26 --18 --24 --38 --49 --56 --56 --53 --46 --41 --36 --34 --32 --33 --32 --32 --30 --30 --28 --27 --26 --25 --24 --24 --23 --23 --22 --22 --21 --21 --20 --20 --19 --19 --18 --18 --17 --18 --17 --17 --17 --17 --16 --17 --16 --17 --16 --17 --16 --16 --15 --15 --15 --15 --15 --15 --15 --15 -52 -127 -127 -127 -114 -51 -2 --26 --34 --29 --14 --2 -9 -13 -14 -9 -4 --2 --5 --8 --8 --8 --7 --7 --6 --7 --7 --9 --9 --11 --10 --11 --31 --87 --128 --128 --107 --59 --28 --19 --25 --38 --49 --56 --56 --53 --47 --42 --37 --34 --33 --33 --32 --32 --30 --30 --28 --27 --25 --25 --24 --24 --23 --23 -45 -127 -127 -127 -109 -48 -0 --29 --36 --31 --17 --4 -7 -11 -11 -7 -2 --3 --6 --9 --9 --9 --8 --8 --7 --8 --8 --9 --10 --11 --11 --12 --12 --12 --12 --12 --12 --13 --13 --13 --13 --14 --13 --15 --14 --14 --13 --14 --14 --15 --14 --15 --15 --15 --15 --16 --15 --16 --15 --15 --14 --15 --15 --16 --36 --91 --128 --128 --108 --59 --29 --21 --26 --40 --51 --58 --57 --54 --48 --43 --37 --35 --33 --33 --32 --32 --31 --30 --28 --27 --26 --25 --24 --24 --23 --23 --22 --22 --21 --22 --21 --22 --21 --21 --20 --20 --19 --19 --18 --19 --18 --18 --17 --18 --17 --17 --16 --17 --16 --16 --15 --16 --15 --16 --15 --15 --15 --15 -52 -127 -127 -127 -115 -53 -5 --24 --32 --27 --14 --1 -10 -14 -14 -9 -5 --1 --4 --7 --7 --8 --7 --7 --6 --7 --7 --9 --9 --10 --10 --11 --11 --12 --11 --12 --12 --12 --12 --13 --13 --13 --12 --13 --13 --14 --14 --14 --14 --15 --14 --15 --14 --15 --15 --15 --15 --15 --15 --15 --15 --15 --15 --16 --35 --91 --128 --128 --108 --59 --29 --21 --26 --39 --50 --57 --57 --54 --48 --42 --38 --35 --34 --33 --33 --33 --31 --30 --29 --28 --26 --26 --24 --24 --23 --23 --22 --22 --21 --22 --21 --21 --21 --21 --20 --20 --19 --19 --18 --18 --17 --18 --17 --17 --17 --17 --16 --17 --16 --16 --15 --16 --15 --16 --15 --15 --15 --16 -52 -127 -127 -127 -115 -53 -5 --24 --32 --27 --13 --1 -9 -13 -14 -10 -5 --1 --4 --7 --7 --8 --7 --7 --6 --7 --7 --8 --8 --10 --10 --11 --11 --11 --11 --12 --12 --13 --12 --13 --13 --14 --13 --14 --13 --14 --14 --14 --14 --15 --14 --15 --14 --15 --14 --15 --14 --15 --15 --15 --15 --15 --15 --16 --35 --91 --128 --128 --109 --61 --31 --22 --28 --41 --52 --58 --58 --54 --48 --43 --38 --36 --33 --34 --33 --33 --31 --31 --29 --28 --26 --26 --25 --24 --24 --23 -45 -127 -127 -127 -110 -48 -0 --29 --36 --31 --17 --4 -7 -11 -11 -7 -2 --3 --6 --9 --9 --9 --8 --8 --7 --8 --8 --10 --10 --11 --11 --11 --32 --88 --128 --128 --107 --59 --29 --20 --26 --39 --50 --57 --57 --53 --47 --42 --37 --35 --33 --33 --32 --33 --31 --30 --28 --27 --26 --25 --24 --24 --23 --23 -45 -127 -127 -127 -109 -47 -0 --29 --36 --31 --17 --4 -7 -11 -12 -7 -3 --3 --6 --9 --10 --10 --8 --8 --7 --8 --8 --10 --10 --11 --11 --11 --31 --87 --128 --128 --105 --57 --27 --18 --24 --38 --49 --56 --56 --53 --46 --41 --36 --34 --33 --33 --32 --32 --30 --29 --28 --27 --25 --25 --24 --24 --23 --23 --22 --22 --21 --21 --20 --20 --19 --19 --18 --18 --18 --18 --17 --18 --17 --17 --16 --17 --16 --16 --15 --16 --16 --16 --15 --16 --15 --15 --15 --15 --15 --16 -52 -127 -127 -127 -114 -51 -3 --25 --33 --28 --15 --2 -9 -13 -14 -9 -4 --1 --5 --8 --8 --9 --7 --7 --6 --7 --7 --9 --9 --10 --10 --12 --31 --87 --128 --128 --107 --59 --28 --19 --25 --38 --49 --56 --57 --53 --47 --42 --36 --34 --33 --33 --32 --33 --31 --30 --29 --27 --25 --25 --24 --24 --23 --23 -45 -127 -127 -127 -110 -48 -0 --28 --36 --30 --17 --4 -7 -11 -11 -7 -3 --3 --6 --9 --9 --9 --8 --8 --8 --8 --8 --10 --10 --11 --11 --12 --12 --13 --12 --13 --13 --13 --12 --13 --13 --14 --13 --14 --14 --15 --14 --15 --14 --15 --14 --15 --14 --15 --15 --15 --15 --15 --15 --15 --15 --16 --15 --16 --35 --91 --128 --128 --109 --61 --31 --22 --28 --41 --52 --59 --58 --55 --48 --43 --38 --36 --34 --34 --33 --33 --31 --31 --29 --29 --26 --26 --25 --24 --23 --23 -44 -127 -127 -127 -110 -48 -0 --28 --36 --31 --17 --4 -7 -11 -11 -7 -2 --3 --6 --9 --10 --10 --9 --9 --8 --9 --9 --9 --10 --11 --11 --12 --32 --88 --128 --128 --105 --57 --26 --18 --24 --38 --49 --56 --56 --53 --47 --41 --36 --34 --32 --33 --32 --32 --30 --30 --28 --27 --25 --25 --24 --24 --23 --23 --21 --21 --21 --21 --21 --21 --21 --21 --19 --19 --18 --19 --17 --18 --17 --18 --17 --17 --17 --17 --16 --17 --16 --16 --16 --16 --15 --16 --15 --16 --15 --16 -52 -127 -127 -127 -115 -53 -5 --24 --32 --27 --14 --1 -9 -14 -14 -10 -5 --1 --4 --7 --7 --8 --7 --7 --6 --7 --7 --8 --8 --10 --10 --11 --11 --12 --12 --12 --12 --13 --12 --13 --12 --13 --13 --14 --13 --14 --14 --15 --14 --14 --14 --14 --14 --15 --15 --15 --15 --16 --15 --15 --14 --15 --14 --15 --35 --90 --128 --128 --108 --59 --29 --21 --26 --40 --51 --58 --58 --54 --48 --42 --37 --35 --33 --33 --33 --33 --31 --31 --29 --28 --26 --25 --24 --24 --23 --23 --22 --22 --21 --22 --22 --22 --21 --21 --20 --20 --19 --19 --18 --18 --17 --18 --17 --18 --17 --17 --17 --17 --16 --16 --16 --16 --15 --16 --15 --16 --15 --15 -52 -127 -127 -127 -115 -53 -5 --24 --32 --27 --13 --1 -10 -14 -14 -10 -5 -0 --4 --7 --7 --8 --7 --8 --6 --7 --7 --8 --9 --10 --10 --12 --11 --12 --12 --13 --12 --13 --12 --13 --12 --13 --13 --14 --13 --15 --14 --14 --13 --14 --14 --15 --14 --15 --14 --15 --15 --15 --15 --15 --15 --15 --15 --16 --35 --91 --128 --128 --107 --59 --28 --20 --26 --39 --51 --58 --57 --54 --47 --42 --37 --35 --33 --33 --32 --33 --31 --30 --28 --27 --26 --25 --24 --24 --23 --23 --22 --22 --21 --21 --20 --20 --19 --19 --18 --19 --17 --18 --17 --18 --17 --17 --16 --17 --16 --16 --16 --16 --15 --16 --15 --16 --15 --16 --15 --16 --15 --15 -52 -127 -127 -127 -114 -51 -3 --26 --33 --28 --14 --2 -9 -13 -13 -9 -4 --2 --4 --8 --8 --8 --7 --7 --6 --7 --8 --9 --9 --10 --11 --11 --31 --87 --128 --128 --105 --57 --26 --19 --24 --38 --49 --56 --56 --52 --46 --41 --36 --34 --32 --32 --32 --32 --30 --30 --28 --27 --25 --25 --24 --24 --22 --22 -46 -127 -127 -127 -108 -46 --2 --29 --37 --31 --17 --4 -6 -10 -11 -6 -2 --3 --6 --9 --9 --10 --9 --9 --8 --9 --9 --10 --10 --11 --11 --12 --32 --88 --128 --128 --107 --59 --29 --20 --25 --39 --50 --57 --57 --53 --47 --42 --37 --35 --33 --33 --32 --33 --31 --30 --28 --28 --26 --25 --24 --24 --23 --23 -45 -127 -127 -127 -110 -47 -0 --29 --36 --31 --17 --4 -7 -11 -11 -7 -2 --3 --6 --9 --9 --9 --8 --8 --7 --8 --8 --9 --10 --11 --11 --12 --12 --13 --12 --12 --12 --13 --12 --13 --13 --14 --14 --14 --14 --14 --14 --15 --14 --15 --14 --15 --15 --15 --14 --15 --14 --15 --15 --16 --15 --16 --15 --16 --35 --90 --128 --128 --108 --59 --29 --21 --27 --40 --51 --57 --57 --54 --47 --43 --38 --35 --34 --34 --33 --33 --31 --30 --28 --28 --26 --26 --25 --24 --23 --23 --22 --22 --21 --22 --22 --22 --21 --21 --20 --20 --19 --19 --18 --18 --17 --18 --17 --17 --16 --17 --16 --16 --16 --17 --16 --16 --15 --16 --15 --16 --15 --15 -52 -127 -127 -127 -115 -53 -5 --24 --32 --27 --13 --1 -10 -13 -15 -10 -5 --1 --5 --7 --8 --8 --7 --7 --6 --7 --7 --9 --9 --10 --10 --11 --11 --12 --12 --13 --12 --13 --12 --13 --13 --13 --13 --14 --13 --14 --14 --15 --14 --15 --14 --15 --14 --15 --15 --15 --14 --15 --15 --15 --15 --16 --15 --16 --35 --90 --128 --128 --107 --59 --29 --21 --26 --40 --50 --57 --57 --54 --48 --42 --37 --35 --33 --33 --32 --32 --31 --30 --28 --28 --26 --25 --24 --24 --23 --23 --22 --21 --21 --22 --22 --22 --21 --21 --19 --20 --18 --19 --18 --19 --18 --18 --17 --18 --17 --17 --16 --17 --16 --17 --16 --16 --15 --16 --15 --15 --15 --16 -52 -127 -127 -127 -115 -53 -4 --24 --32 --26 --13 --1 -10 -13 -14 -9 -5 --1 --4 --7 --7 --8 --7 --7 --6 --7 --7 --8 --9 --10 --10 --11 --11 --12 --11 --12 --11 --12 --12 --13 --13 --13 --13 --14 --13 --14 --14 --14 --14 --15 --14 --15 --14 --15 --14 --15 --15 --15 --15 --15 --15 --15 --15 --16 --35 --90 --128 --128 --109 --61 --31 --22 --28 --41 --51 --58 --58 --54 --48 --43 --38 --36 --34 --34 --33 --33 --31 --31 --29 --28 --26 --26 --25 --24 --24 --23 -45 -127 -127 -127 -110 -48 -0 --29 --36 --31 --17 --4 -6 -11 -11 -7 -2 --3 --6 --9 --10 --10 --8 --9 --7 --8 --8 --10 --10 --11 --11 --12 --32 --88 --128 --128 --105 --57 --26 --19 --24 --37 --49 --56 --56 --53 --47 --42 --37 --34 --32 --33 --32 --32 --31 --30 --28 --27 --25 --25 --24 --24 --23 --23 --21 --22 --21 --22 --21 --21 --21 --20 --19 --19 --18 --19 --18 --18 --17 --18 --17 --17 --17 --17 --17 --17 --16 --16 --15 --16 --15 --16 --15 --16 --15 --16 -52 -127 -127 -127 -115 -53 -5 --24 --32 --27 --14 --1 -10 -13 -14 -9 -5 --1 --4 --7 --7 --8 --7 --7 --6 --7 --7 --9 --9 --10 --10 --11 --11 --12 --11 --12 --12 --12 --12 --13 --13 --13 --13 --14 --13 --14 --13 --14 --14 --14 --14 --15 --14 --15 --14 --15 --15 --15 --15 --15 --15 --15 --15 --16 --35 --91 --128 --128 --108 --59 --28 --20 --26 --40 --51 --58 --57 --54 --47 --42 --38 --35 --33 --33 --33 --33 --31 --31 --29 --28 --26 --25 --24 --24 --23 --23 --22 --22 --21 --22 --22 --22 --21 --21 --20 --19 --18 --19 --18 --18 --18 --18 --17 --17 --17 --17 --16 --17 --16 --16 --16 --16 --16 --16 --15 --16 --15 --15 -52 -127 -127 -127 -115 -53 -5 --24 --32 --27 --14 --1 -10 -13 -14 -9 -5 --1 --4 --7 --7 --8 --7 --7 --6 --7 --7 --8 --8 --10 --10 --11 --11 --12 --12 --12 --12 --13 --12 --13 --13 --13 --13 --14 --14 --14 --14 --15 --14 --15 --14 --15 --14 --15 --14 --15 --15 --15 --15 --16 --15 --15 --15 --15 --34 --90 --128 --128 --109 --61 --31 --22 --28 --40 --51 --58 --58 --55 --48 --43 --38 --36 --34 --34 --33 --33 --32 --31 --29 --28 --26 --26 --25 --25 --23 --23 -45 -127 -127 -127 -109 -47 -0 --28 --36 --31 --17 --4 -7 -11 -11 -7 -3 --3 --6 --9 --9 --9 --8 --9 --8 --8 --8 --10 --10 --11 --11 --12 --32 --88 --128 --128 --107 --59 --29 --20 --26 --39 --50 --57 --57 --53 --47 --42 --37 --35 --33 --33 --33 --33 --31 --30 --28 --27 --25 --25 --24 --24 --23 --23 -45 -127 -127 -127 -110 -48 -0 --29 --36 --31 --17 --4 -7 -11 -12 -7 -2 --3 --6 --9 --9 --9 --8 --8 --7 --8 --8 --9 --10 --11 --11 --12 --32 --88 --128 --128 --107 --59 --29 --20 --26 --39 --50 --57 --56 --53 --47 --42 --37 --35 --33 --33 --32 --32 --31 --30 --28 --28 --26 --26 --24 --24 --23 --22 -45 -127 -127 -127 -109 -48 -0 --28 --36 --30 --17 --4 -7 -11 -12 -7 -3 --3 --6 --9 --9 --9 --8 --8 --7 --8 --8 --10 --10 --11 --11 --12 --32 --88 --128 --128 --107 --59 --28 --20 --26 --39 --50 --56 --57 --53 --47 --42 --37 --35 --33 --33 --32 --32 --31 --30 --28 --28 --26 --26 --25 --24 --23 --23 -45 -127 -127 -127 -109 -48 -0 --29 --36 --31 --17 --4 -7 -11 -12 -8 -3 --3 --6 --9 --9 --10 --8 --8 --8 --8 --8 --10 --10 --11 --11 --12 --32 --88 --128 --128 --107 --59 --29 --20 --25 --39 --49 --56 --57 --53 --47 --42 --37 --35 --33 --33 --32 --33 --31 --30 --28 --28 --26 --25 --24 --24 --23 --23 -45 -127 -127 -127 -110 -47 -0 --29 --36 --31 --17 --4 -7 -11 -11 -7 -2 --3 --6 --9 --9 --9 --8 --8 --7 --8 --8 --10 --10 --11 --11 --11 --32 --88 --128 --128 --107 --59 --29 --20 --26 --39 --49 --57 --57 --54 --47 --42 --37 --35 --33 --33 --32 --32 --31 --30 --28 --27 --25 --25 --24 --24 --23 --23 -45 -127 -127 -127 -110 -48 -0 --28 --36 --31 --17 --4 -7 -11 -12 -7 -3 --3 --6 --9 --9 --10 --8 --9 --9 --8 --8 --9 --9 --11 --11 --12 --32 --88 --128 --128 --107 --59 --29 --20 --26 --39 --50 --57 --57 --53 --47 --42 --37 --34 --33 --33 --32 --32 --31 --30 --28 --28 --26 --26 --24 --24 --23 --23 -45 -127 -127 -127 -110 -48 -0 --28 --36 --31 --17 --4 -7 -11 -11 -7 -2 --3 --6 --9 --10 --10 --9 --8 --8 --8 --8 --10 --10 --11 --11 --12 --32 --88 --128 --128 --107 --59 --29 --20 --26 --39 --50 --57 --57 --53 --47 --42 --37 --35 --33 --33 --32 --32 --31 --30 --28 --27 --26 --25 --24 --24 --23 --23 -44 -127 -127 -127 -110 -48 -0 --28 --36 --31 --17 --4 -7 -11 -12 -7 -3 --3 --6 --9 --9 --10 --8 --8 --7 --8 --9 --10 --10 --11 --11 --12 --32 --88 --128 --128 --105 --57 --27 --18 --24 --38 --49 --56 --56 --53 --47 --41 --37 --34 --33 --33 --32 --32 --30 --30 --28 --28 --26 --25 --24 --23 --23 --23 --22 --22 --21 --21 --20 --20 --19 --19 --18 --19 --17 --18 --17 --18 --17 --17 --16 --17 --16 --16 --15 --16 --15 --16 --15 --15 --15 --15 --14 --15 --15 --15 -52 -127 -127 -127 -114 -51 -3 --26 --33 --28 --14 --1 -9 -13 -13 -9 -4 --1 --5 --8 --7 --8 --7 --7 --7 --8 --8 --9 --9 --10 --10 --11 --31 --87 --128 --128 --105 --57 --26 --18 --24 --38 --49 --56 --56 --52 --46 --41 --36 --34 --33 --32 --31 --32 --30 --30 --28 --27 --25 --25 --24 --24 --22 --23 -45 -127 -127 -127 -108 -46 --2 --30 --37 --31 --17 --4 -6 -11 -11 -7 -2 --3 --6 --9 --10 --10 --9 --9 --8 --8 --8 --9 --10 --11 --11 --12 --32 --88 --128 --128 --107 --59 --29 --20 --26 --39 --50 --57 --57 --53 --47 --42 --36 --35 --33 --33 --32 --32 --31 --30 --28 --27 --26 --25 --24 --24 --23 --23 -45 -127 -127 -127 -109 -48 -0 --28 --36 --31 --17 --4 -7 -11 -11 -7 -2 --3 --6 --9 --9 --9 --8 --9 --8 --9 --8 --9 --9 --11 --11 --12 --12 --12 --12 --13 --12 --13 --13 --14 --13 --14 --13 --14 --14 --14 --14 --16 --14 --15 --14 --15 --15 --15 --15 --15 --15 --15 --14 --15 --15 --16 --15 --16 --35 --91 --128 --128 --109 --62 --31 --22 --28 --40 --51 --58 --58 --55 --49 --43 --39 --36 --34 --34 --33 --33 --31 --31 --29 --28 --26 --26 --25 --25 --23 --23 -45 -127 -127 -127 -109 -47 --1 --28 --36 --31 --17 --4 -7 -11 -11 -7 -2 --3 --6 --9 --9 --10 --8 --8 --8 --8 --9 --10 --10 --11 --11 --12 --31 --87 --128 --128 --107 --59 --29 --20 --26 --39 --49 --57 --56 --53 --47 --42 --37 --35 --33 --33 --32 --33 --31 --30 --28 --27 --25 --25 --24 --24 --23 --23 -45 -127 -127 -127 -110 -48 -0 --28 --36 --31 --17 --4 -6 -11 -12 -8 -3 --3 --6 --9 --10 --9 --8 --8 --7 --8 --8 --10 --10 --11 --11 --12 --32 --88 --128 --128 --107 --59 --29 --20 --26 --39 --50 --57 --57 --53 --47 --42 --37 --35 --33 --33 --32 --32 --31 --30 --28 --27 --26 --26 --24 --24 --23 --23 -45 -127 -127 -127 -109 -48 --1 --29 --36 --31 --17 --4 -7 -11 -11 -7 -3 --3 --6 --9 --9 --9 --8 --8 --8 --9 --9 --10 --10 --11 --11 --12 --32 --88 --128 --128 --107 --59 --29 --20 --26 --39 --49 --56 --57 --53 --47 --42 --37 --35 --33 --33 --32 --32 --31 --30 --28 --27 --26 --25 --24 --24 --23 --23 -45 -127 -127 -127 -110 -48 -0 --29 --36 --32 --17 --3 -7 -11 -12 -7 -2 --3 --6 --9 --8 --9 --8 --8 --7 --8 --8 --10 --10 --11 --11 --12 --31 --88 --128 --128 --107 --59 --29 --20 --26 --39 --50 --56 --57 --53 --47 --42 --37 --35 --33 --33 --32 --32 --31 --30 --28 --27 --25 --25 --24 --24 --23 --23 -45 -127 -127 -127 -110 -48 -0 --28 --36 --31 --17 --4 -7 -11 -12 -7 -3 --3 --6 --9 --9 --9 --8 --8 --7 --8 --8 --9 --10 --11 --11 --12 --32 --88 --128 --128 --105 --57 --27 --18 --24 --38 --49 --56 --56 --52 --46 --41 --36 --34 --32 --32 --31 --32 --30 --29 --28 --27 --25 --25 --24 --24 --22 --22 --21 --21 --21 --21 --20 --20 --20 --19 --18 --18 --17 --18 --17 --18 --17 --17 --16 --16 --16 --16 --15 --16 --15 --16 --15 --16 --15 --16 --15 --15 --15 --15 -52 -127 -127 -127 -114 -51 -3 --25 --33 --28 --15 --2 -9 -13 -13 -9 -4 --2 --5 --7 --8 --8 --7 --8 --7 --8 --8 --9 --9 --11 --10 --11 --31 --87 --128 --128 --105 --57 --26 --18 --24 --38 --49 --56 --56 --53 --46 --41 --36 --34 --32 --33 --32 --32 --30 --29 --28 --27 --25 --25 --24 --24 --23 --23 -45 -127 -127 -127 -109 -46 --1 --30 --37 --32 --17 --5 -6 -10 -11 -7 -2 --3 --7 --9 --10 --10 --8 --8 --7 --8 --8 --10 --10 --11 --12 --12 --32 --88 --128 --128 --106 --57 --26 --18 --25 --38 --49 --56 --56 --52 --46 --41 --36 --34 --32 --33 --32 --32 --30 --29 --28 --27 --25 --25 --24 --24 --23 --23 -45 -127 -127 -127 -108 -46 --2 --30 --38 --32 --18 --5 -6 -10 -11 -6 -2 --4 --6 --10 --10 --10 --9 --8 --7 --8 --8 --10 --10 --11 --11 --12 --32 --88 --128 --128 --105 --57 --26 --19 --25 --38 --49 --56 --56 --53 --46 --41 --37 --34 --33 --33 --32 --32 --31 --30 --28 --27 --25 --25 --24 --24 --23 --23 -45 -127 -127 -127 -108 -46 --2 --30 --37 --31 --18 --5 -6 -10 -10 -6 -2 --3 --6 --9 --9 --10 --8 --9 --8 --9 --9 --10 --10 --11 --11 --11 --32 --88 --128 --128 --106 --57 --27 --18 --24 --38 --49 --56 --56 --52 --47 --41 --36 --34 --33 --33 --32 --32 --30 --29 --28 --27 --26 --25 --24 --24 --23 --22 -45 -127 -127 -127 -108 -46 --2 --30 --37 --32 --18 --5 -6 -11 -11 -6 -2 --4 --7 --9 --10 --10 --9 --9 --8 --9 --9 --10 --10 --11 --11 --12 --31 --88 --128 --128 --106 --57 --27 --18 --24 --38 --49 --56 --56 --53 --46 --41 --36 --34 --32 --33 --32 --32 --30 --29 --28 --27 --25 --25 --24 --24 --23 --22 -45 -127 -127 -127 -108 -46 --2 --30 --37 --32 --18 --4 -6 -10 -10 -7 -2 --3 --7 --9 --10 --10 --8 --8 --7 --8 --8 --10 --10 --12 --11 --12 --32 --87 --128 --128 --106 --57 --27 --19 --24 --38 --49 --56 --56 --53 --46 --42 --36 --34 --32 --33 --32 --32 --30 --30 --28 --27 --25 --25 --24 --24 --23 --23 -45 -127 -127 -127 -108 -46 --2 --30 --37 --32 --18 --5 -6 -10 -11 -7 -2 --4 --7 --10 --10 --10 --9 --9 --8 --9 --8 --10 --10 --11 --11 --12 --32 --88 --128 --128 --106 --57 --26 --18 --24 --37 --49 --56 --57 --53 --46 --41 --36 --34 --32 --32 --31 --32 --31 --30 --28 --27 --25 --25 --24 --24 --23 --23 -46 -127 -127 -127 -108 -45 --2 --30 --37 --32 --18 --5 -6 -11 -11 -7 -2 --3 --6 --9 --10 --10 --9 --8 --8 --8 --9 --10 --9 --11 --11 --12 --32 --88 --128 --128 --106 --57 --27 --19 --25 --38 --49 --56 --56 --52 --46 --41 --36 --34 --33 --33 --32 --32 --30 --30 --28 --28 --25 --25 --24 --24 --23 --23 -45 -127 -127 -127 -109 -47 --1 --30 --38 --32 --18 --5 -6 -11 -11 -7 -2 --3 --6 --9 --9 --10 --9 --9 --8 --9 --9 --10 --10 --11 --11 --12 --32 --88 --128 --128 --106 --57 --27 --18 --24 --38 --49 --56 --56 --53 --46 --41 --36 --34 --33 --33 --32 --32 --30 --30 --28 --27 --25 --25 --24 --24 --23 --23 -45 -127 -127 -127 -108 -46 --2 --30 --38 --32 --18 --5 -6 -10 -10 -7 -2 --3 --6 --9 --9 --10 --9 --10 --8 --8 --8 --9 --10 --11 --11 --12 --32 --88 --128 --128 --107 --59 --28 --20 --26 --39 --50 --57 --57 --53 --47 --42 --37 --35 --33 --33 --33 --33 --31 --30 --28 --28 --26 --25 --24 --24 --23 --23 -45 -127 -127 -127 -110 -48 -0 --29 --36 --30 --17 --4 -7 -11 -12 -7 -3 --3 --6 --9 --9 --10 --8 --9 --7 --8 --8 --10 --10 --11 --11 --12 --12 --13 --12 --13 --12 --13 --13 --14 --13 --14 --13 --14 --14 --15 --14 --15 --14 --15 --14 --15 --15 --15 --15 --15 --15 --15 --14 --15 --15 --15 --15 --16 --35 --91 --128 --128 --109 --61 --31 --23 --28 --41 --51 --58 --58 --55 --49 --43 --38 --36 --34 --34 --34 --33 --31 --31 --29 --28 --26 --26 --25 --25 --23 --23 -45 -127 -127 -127 -109 -48 -0 --29 --36 --31 --17 --4 -7 -11 -11 -7 -2 --3 --6 --9 --9 --9 --8 --8 --8 --8 --8 --9 --9 --11 --11 --12 --32 --87 --128 --128 --105 --57 --27 --19 --24 --38 --49 --56 --56 --52 --46 --41 --37 --34 --33 --33 --32 --32 --31 --29 --28 --27 --25 --25 --24 --24 --23 --23 --22 --22 --21 --21 --21 --22 --21 --21 --20 --20 --19 --19 --18 --18 --17 --18 --17 --17 --16 --17 --16 --17 --16 --16 --15 --16 --15 --16 --15 --16 --15 --16 -52 -127 -127 -127 -115 -53 -5 --24 --32 --27 --14 --1 -10 -14 -14 -10 -5 --1 --4 --6 --7 --7 --6 --7 --6 --7 --7 --8 --9 --10 --10 --11 --11 --12 --12 --12 --12 --13 --12 --13 --13 --14 --13 --14 --13 --14 --14 --14 --13 --14 --14 --15 --14 --15 --14 --15 --14 --15 --14 --15 --14 --15 --15 --16 --35 --91 --128 --128 --109 --61 --31 --22 --28 --40 --51 --58 --58 --55 --48 --43 --38 --36 --34 --34 --33 --33 --31 --31 --29 --28 --26 --26 --25 --25 --24 --23 -44 -127 -127 -127 -110 -48 -0 --29 --36 --31 --17 --4 -7 -11 -11 -7 -2 --3 --6 --9 --9 --9 --8 --8 --7 --8 --8 --10 --10 --11 --11 --12 --31 --87 --128 --128 --107 --59 --29 --20 --26 --39 --50 --57 --57 --53 --47 --42 --37 --34 --33 --33 --33 --32 --31 --30 --28 --27 --26 --25 --24 --24 --23 --23 -45 -127 -127 -127 -110 -48 -0 --29 --36 --31 --17 --4 -7 -11 -11 -7 -2 --3 --6 --9 --9 --10 --8 --9 --8 --9 --8 --10 --10 --11 --11 --12 --32 --88 --128 --128 --105 --57 --27 --19 --25 --38 --49 --56 --56 --53 --46 --41 --36 --34 --32 --33 --32 --32 --30 --29 --28 --27 --25 --25 --24 --24 --23 --22 --21 --21 --21 --21 --20 --20 --19 --19 --18 --18 --17 --18 --17 --17 --16 --17 --16 --16 --16 --16 --16 --16 --15 --16 --15 --15 --15 --15 --14 --15 --15 --16 -52 -127 -127 -127 -114 -51 -3 --25 --33 --28 --14 --2 -9 -13 -14 -9 -4 --2 --5 --7 --7 --8 --7 --7 --7 --7 --8 --9 --9 --11 --11 --11 --31 --87 --128 --128 --107 --59 --29 --20 --26 --39 --49 --56 --56 --53 --47 --42 --37 --34 --33 --33 --32 --32 --31 --30 --28 --27 --25 --25 --24 --24 --23 --23 -45 -127 -127 -127 -109 -48 -0 --29 --36 --31 --17 --4 -6 -11 -11 -7 -2 --3 --6 --8 --9 --10 --9 --9 --8 --8 --8 --9 --10 --11 --11 --11 --11 --12 --12 --13 --12 --13 --13 --13 --13 --14 --13 --14 --13 --14 --14 --15 --14 --15 --14 --15 --14 --15 --14 --15 --15 --16 --15 --16 --15 --16 --15 --16 --35 --91 --128 --128 --107 --59 --29 --21 --27 --40 --51 --57 --57 --54 --47 --42 --37 --35 --33 --34 --33 --33 --31 --30 --28 --27 --26 --25 --25 --24 --24 --23 --22 --22 --21 --22 --22 --22 --21 --21 --20 --20 --19 --19 --18 --18 --18 --18 --17 --17 --17 --17 --16 --17 --16 --16 --16 --16 --15 --16 --15 --16 --15 --15 -52 -127 -127 -127 -115 -53 -5 --24 --32 --27 --14 --1 -9 -13 -14 -10 -5 -0 --4 --7 --7 --8 --7 --7 --6 --7 --7 --8 --9 --10 --10 --11 --11 --11 --11 --12 --12 --13 --12 --13 --12 --13 --13 --14 --13 --14 --14 --14 --14 --15 --14 --15 --15 --16 --15 --16 --15 --15 --14 --15 --14 --15 --15 --15 --35 --91 --128 --128 --107 --60 --29 --20 --26 --39 --50 --57 --57 --54 --48 --42 --37 --35 --34 --34 --33 --32 --31 --30 --28 --28 --26 --25 --24 --24 --23 --23 --22 --22 --21 --22 --21 --21 --20 --20 --19 --19 --18 --19 --18 --18 --18 --18 --17 --18 --17 --17 --16 --17 --16 --16 --15 --16 --15 --16 --15 --16 --15 --16 -52 -127 -127 -127 -115 -53 -5 --24 --32 --27 --14 --1 -10 -13 -14 -10 -5 --1 --4 --7 --8 --8 --7 --7 --6 --7 --7 --9 --9 --10 --10 --11 --11 --11 --11 --12 --12 --13 --13 --14 --13 --13 --13 --14 --13 --14 --14 --15 --14 --15 --14 --15 --14 --15 --15 --15 --15 --15 --14 --15 --14 --15 --15 --16 --35 --90 --128 --128 --109 --61 --30 --22 --27 --41 --51 --59 --58 --55 --49 --43 --38 --35 --34 --34 --33 --33 --31 --31 --29 --28 --26 --26 --24 --24 --23 --23 -45 -127 -127 -127 -110 -47 -0 --29 --36 --31 --17 --4 -7 -11 -12 -7 -2 --3 --6 --9 --9 --10 --8 --8 --7 --8 --8 --10 --10 --11 --11 --12 --32 --87 --128 --128 --107 --59 --29 --20 --25 --39 --50 --56 --57 --53 --47 --42 --37 --35 --33 --33 --32 --33 --31 --30 --29 --27 --26 --25 --24 --24 --23 --23 -45 -127 -127 -127 -110 -48 -0 --29 --36 --30 --17 --4 -7 -11 -12 -7 -2 --3 --6 --9 --9 --9 --8 --8 --8 --8 --8 --9 --10 --11 --11 --13 --31 --87 --128 --128 --105 --57 --27 --19 --24 --38 --49 --56 --56 --53 --46 --41 --36 --34 --33 --33 --32 --32 --30 --30 --28 --27 --25 --25 --24 --24 --23 --22 --21 --21 --21 --21 --20 --20 --19 --19 --18 --18 --17 --18 --17 --18 --17 --17 --16 --17 --16 --16 --15 --17 --15 --16 --15 --16 --15 --15 --14 --15 --15 --15 -52 -127 -127 -127 -113 -51 -3 --25 --33 --28 --14 --1 -10 -13 -13 -9 -4 --2 --5 --8 --8 --9 --7 --7 --6 --7 --7 --8 --9 --10 --11 --12 --31 --87 --128 --128 --107 --59 --28 --20 --25 --38 --49 --56 --56 --53 --47 --42 --36 --35 --33 --33 --32 --32 --30 --29 --28 --27 --26 --25 --25 --24 --22 --23 -45 -127 -127 -127 -110 -48 -0 --29 --36 --31 --17 --4 -7 -11 -11 -7 -2 --3 --6 --8 --9 --9 --8 --8 --7 --8 --8 --9 --10 --11 --11 --12 --11 --12 --12 --13 --12 --13 --13 --13 --13 --14 --13 --14 --14 --15 --14 --15 --14 --15 --14 --15 --15 --16 --15 --16 --15 --16 --15 --15 --14 --15 --15 --15 --35 --90 --128 --128 --109 --61 --31 --22 --28 --41 --51 --58 --58 --55 --48 --43 --38 --36 --34 --34 --33 --33 --32 --31 --29 --28 --26 --26 --25 --25 --24 --24 -44 -127 -127 -127 -109 -48 -0 --29 --36 --31 --17 --4 -7 -11 -11 -7 -3 --3 --6 --9 --9 --10 --8 --8 --7 --9 --8 --9 --9 --10 --10 --12 --32 --88 --128 --128 --106 --57 --26 --18 --24 --38 --49 --56 --56 --52 --46 --41 --36 --34 --33 --32 --32 --32 --30 --29 --28 --27 --25 --25 --24 --24 --22 --22 --21 --21 --21 --22 --21 --21 --20 --21 --20 --19 --18 --19 --18 --18 --17 --18 --17 --17 --17 --17 --16 --17 --16 --17 --15 --16 --15 --16 --15 --16 --15 --16 -52 -127 -127 -127 -115 -53 -5 --24 --32 --27 --14 --1 -9 -14 -14 -10 -5 --1 --5 --7 --8 --8 --7 --7 --6 --7 --7 --9 --9 --10 --10 --11 --11 --11 --11 --12 --12 --13 --12 --13 --13 --14 --13 --14 --14 --14 --14 --15 --14 --15 --14 --15 --14 --15 --15 --15 --14 --15 --15 --16 --15 --16 --15 --16 --35 --91 --128 --128 --108 --59 --29 --20 --26 --40 --51 --58 --58 --55 --48 --42 --37 --35 --33 --34 --33 --32 --31 --30 --28 --28 --26 --26 --25 --24 --23 --23 --21 --21 --21 --22 --22 --22 --21 --21 --19 --20 --19 --19 --18 --18 --17 --18 --17 --18 --17 --18 --17 --17 --16 --16 --15 --16 --15 --16 --15 --16 --15 --16 -52 -127 -127 -127 -115 -53 -5 --24 --32 --27 --13 --1 -10 -13 -14 -9 -5 --1 --4 --7 --7 --8 --7 --7 --6 --7 --7 --8 --8 --10 --10 --11 --11 --12 --12 --12 --12 --12 --12 --13 --13 --14 --13 --14 --13 --14 --13 --14 --14 --15 --14 --16 --14 --15 --14 --15 --15 --16 --15 --16 --15 --16 --15 --16 --35 --90 --128 --128 --108 --59 --29 --20 --26 --40 --51 --58 --58 --54 --48 --43 --38 --35 --33 --34 --33 --33 --31 --30 --28 --28 --26 --26 --24 --24 --23 --23 --22 --22 --21 --21 --20 --20 --19 --19 --18 --19 --17 --18 --17 --18 --17 --17 --17 --17 --16 --17 --16 --16 --16 --16 --15 --16 --15 --16 --15 --15 --14 --15 -52 -127 -127 -127 -114 -51 -3 --25 --33 --28 --15 --2 -9 -13 -14 -9 -5 --2 --5 --7 --8 --8 --7 --7 --7 --7 --7 --9 --9 --10 --10 --11 --31 --87 --128 --128 --105 --56 --26 --18 --24 --37 --49 --56 --56 --53 --46 --41 --37 --34 --32 --32 --32 --32 --30 --30 --28 --27 --25 --25 --23 --24 --23 --23 -45 -127 -127 -127 -108 -46 --2 --30 --37 --32 --18 --5 -6 -10 -10 -6 -2 --3 --6 --9 --10 --10 --9 --9 --8 --8 --8 --10 --10 --11 --11 --12 --32 --88 --128 --128 --107 --59 --29 --20 --26 --39 --49 --56 --56 --53 --47 --42 --37 --35 --33 --33 --33 --33 --31 --30 --28 --28 --26 --26 --24 --24 --23 --23 -45 -127 -127 -127 -109 -48 -0 --28 --36 --30 --17 --4 -7 -11 -12 -7 -3 --3 --6 --9 --9 --9 --8 --8 --7 --8 --8 --10 --10 --11 --11 --12 --11 --12 --12 --13 --13 --13 --13 --13 --12 --13 --13 --14 --14 --15 --14 --14 --14 --15 --14 --15 --15 --16 --15 --16 --15 --15 --14 --15 --15 --15 --15 --15 --35 --91 --128 --128 --108 --59 --29 --20 --26 --40 --51 --58 --58 --54 --47 --42 --37 --35 --33 --34 --33 --33 --31 --30 --28 --28 --26 --25 --24 --24 --23 --23 --22 --22 --21 --22 --21 --21 --21 --21 --20 --20 --19 --19 --18 --18 --17 --18 --17 --18 --17 --17 --16 --17 --16 --16 --15 --16 --15 --16 --15 --16 --15 --16 -52 -127 -127 -127 -115 -53 -4 --24 --32 --27 --14 --1 -9 -13 -14 -9 -5 --1 --4 --7 --7 --8 --7 --7 --6 --6 --7 --8 --9 --10 --10 --11 --11 --12 --11 --12 --12 --13 --12 --13 --13 --13 --14 --14 --13 --14 --13 --14 --14 --15 --14 --15 --14 --15 --15 --16 --15 --15 --15 --15 --15 --15 --15 --16 --35 --91 --128 --128 --108 --59 --29 --20 --26 --40 --51 --58 --57 --54 --47 --42 --37 --35 --33 --33 --32 --33 --31 --30 --28 --27 --26 --25 --24 --24 --23 --23 --21 --22 --21 --22 --21 --22 --21 --21 --20 --20 --19 --19 --18 --18 --17 --18 --17 --18 --17 --17 --16 --17 --16 --16 --15 --16 --15 --16 --16 --16 --15 --15 -52 -127 -127 -127 -115 -53 -4 --25 --32 --27 --14 --1 -10 -13 -14 -9 -5 --1 --4 --7 --7 --8 --7 --7 --6 --7 --7 --9 --9 --10 --10 --11 --11 --11 --11 --12 --12 --13 --12 --14 --13 --13 --12 --13 --13 --14 --14 --15 --14 --15 --14 --15 --14 --15 --15 --15 --14 --15 --14 --15 --15 --16 --15 --16 --35 --91 --128 --128 --109 --61 --31 --22 --28 --40 --51 --58 --58 --54 --48 --43 --38 --36 --34 --34 --33 --33 --31 --30 --29 --28 --26 --26 --24 --24 --23 --23 -45 -127 -127 -127 -109 -47 --1 --29 --36 --31 --17 --4 -7 -11 -11 -7 -3 --3 --6 --9 --9 --10 --9 --8 --7 --8 --8 --9 --10 --11 --11 --12 --32 --88 --128 --128 --105 --57 --27 --18 --24 --37 --49 --56 --56 --53 --47 --41 --37 --34 --33 --32 --32 --32 --30 --30 --28 --27 --25 --25 --24 --24 --23 --23 --22 --22 --21 --22 --22 --21 --20 --21 --19 --20 --19 --19 --18 --19 --17 --18 --17 --17 --17 --17 --16 --17 --16 --17 --15 --16 --15 --16 --15 --16 --15 --16 -52 -127 -127 -127 -115 -53 -5 --24 --32 --27 --13 --1 -10 -14 -14 -10 -5 --1 --4 --7 --7 --8 --7 --7 --6 --7 --7 --8 --9 --10 --10 --11 --11 --12 --11 --12 --12 --12 --12 --13 --13 --13 --13 --14 --13 --14 --14 --15 --14 --15 --14 --15 --14 --15 --14 --15 --15 --15 --15 --15 --15 --16 --15 --16 --35 --91 --128 --128 --108 --59 --29 --21 --27 --40 --51 --58 --58 --54 --48 --42 --38 --35 --34 --34 --33 --33 --32 --31 --29 --28 --26 --25 --24 --24 --23 --23 --22 --22 --21 --22 --21 --22 --21 --21 --20 --19 --18 --19 --18 --18 --17 --18 --17 --18 --16 --17 --16 --17 --16 --17 --15 --16 --15 --16 --15 --16 --15 --16 -52 -127 -127 -127 -115 -53 -5 --24 --32 --27 --14 --1 -10 -13 -14 -9 -5 --1 --4 --7 --7 --7 --6 --7 --6 --7 --7 --8 --8 --10 --10 --11 --11 --12 --12 --12 --12 --12 --12 --13 --12 --13 --13 --14 --13 --13 --13 --14 --14 --14 --14 --15 --14 --15 --15 --15 --14 --15 --14 --15 --15 --16 --15 --16 --35 --90 --128 --128 --109 --61 --31 --22 --28 --41 --52 --59 --58 --55 --48 --43 --38 --36 --34 --34 --33 --33 --32 --31 --29 --28 --26 --26 --25 --24 --24 --23 -45 -127 -127 -127 -109 -47 -0 --29 --37 --31 --17 --4 -7 -11 -11 -7 -3 --3 --6 --9 --10 --10 --9 --8 --8 --8 --8 --10 --10 --11 --11 --12 --32 --88 --128 --128 --107 --59 --29 --20 --26 --39 --50 --57 --57 --53 --47 --42 --37 --35 --33 --33 --32 --32 --31 --30 --28 --27 --26 --25 --24 --24 --23 --23 -45 -127 -127 -127 -110 -48 -0 --28 --36 --31 --17 --4 -7 -11 -11 -7 -2 --3 --6 --8 --8 --9 --8 --8 --8 --8 --8 --10 --9 --11 --11 --12 --32 --88 --128 --128 --107 --58 --28 --20 --25 --39 --50 --57 --57 --54 --47 --42 --37 --35 --33 --33 --32 --32 --31 --30 --28 --27 --26 --26 --24 --24 --23 --23 -45 -127 -127 -127 -110 -48 -0 --28 --36 --30 --17 --4 -7 -11 -12 -7 -3 --3 --6 --9 --9 --10 --9 --8 --7 --8 --8 --10 --10 --11 --11 --12 --31 --87 --128 --128 --107 --59 --29 --20 --26 --39 --50 --57 --56 --53 --47 --42 --37 --35 --33 --33 --32 --33 --31 --31 --29 --27 --26 --25 --24 --24 --23 --23 -45 -127 -127 -127 -110 -48 -0 --28 --36 --31 --17 --4 -7 -11 -12 -7 -2 --3 --6 --9 --9 --9 --8 --8 --7 --8 --8 --10 --10 --11 --11 --12 --32 --88 --128 --128 --106 --59 --28 --20 --26 --39 --49 --56 --56 --53 --47 --42 --37 --35 --33 --33 --32 --32 --31 --30 --29 --28 --26 --25 --24 --24 --23 --23 -45 -127 -127 -127 -110 -48 -0 --29 --36 --31 --17 --4 -7 -11 -11 -7 -3 --3 --6 --9 --9 --9 --8 --9 --8 --8 --8 --10 --10 --11 --11 --12 --31 --88 --128 --128 --107 --59 --29 --20 --26 --39 --50 --56 --57 --53 --47 --42 --37 --35 --33 --33 --32 --32 --31 --30 --28 --28 --26 --25 --24 --24 --23 --23 -45 -127 -127 -127 -110 -48 -0 --28 --36 --30 --17 --4 -7 -11 -12 -7 -2 --3 --6 --9 --10 --10 --9 --8 --8 --8 --8 --9 --10 --11 --12 --12 --32 --88 --128 --128 --107 --59 --28 --20 --26 --39 --50 --57 --57 --53 --47 --42 --37 --35 --33 --33 --32 --33 --30 --30 --28 --28 --26 --25 --24 --24 --23 --23 -45 -127 -127 -127 -110 -48 -0 --28 --36 --31 --17 --4 -7 -11 -12 -7 -3 --3 --6 --9 --9 --9 --8 --8 --8 --9 --8 --9 --9 --11 --10 --11 --31 --87 --128 --128 --107 --59 --29 --20 --26 --39 --50 --57 --57 --53 --47 --42 --37 --35 --33 --33 --32 --33 --31 --30 --28 --28 --26 --25 --24 --24 --23 --23 -45 -127 -127 -127 -110 -48 -0 --28 --36 --31 --17 --4 -7 -11 -12 -7 -2 --3 --6 --9 --9 --10 --9 --8 --8 --8 --8 --10 --10 --11 --11 --12 --32 --88 --128 --128 --105 --57 --27 --19 --25 --38 --49 --56 --56 --52 --46 --41 --36 --34 --33 --32 --31 --32 --30 --30 --28 --27 --25 --25 --24 --24 --23 --23 --21 --22 --21 --21 --20 --20 --19 --19 --18 --18 --17 --18 --17 --17 --17 --17 --17 --17 --16 --16 --15 --16 --15 --16 --15 --16 --15 --16 --15 --16 --15 --15 -52 -127 -127 -127 -113 -51 -3 --26 --33 --28 --14 --1 -9 -13 -13 -9 -4 --1 --4 --7 --8 --8 --7 --7 --6 --8 --7 --9 --9 --10 --10 --11 --31 --87 --128 --128 --105 --57 --26 --18 --24 --38 --49 --56 --56 --53 --46 --41 --36 --34 --33 --33 --32 --32 --30 --30 --28 --27 --25 --25 --24 --24 --23 --22 -45 -127 -127 -127 -108 -46 --1 --30 --37 --32 --18 --5 -6 -11 -11 -6 -2 --3 --6 --9 --10 --10 --8 --9 --7 --8 --8 --10 --10 --11 --11 --12 --32 --88 --128 --128 --107 --59 --29 --20 --26 --39 --50 --57 --57 --54 --47 --42 --37 --35 --33 --33 --32 --32 --31 --30 --28 --27 --26 --25 --24 --24 --23 --23 -45 -127 -127 -127 -110 -48 -0 --29 --36 --31 --17 --4 -7 -11 -11 -7 -2 --3 --6 --9 --9 --10 --8 --8 --7 --8 --8 --10 --10 --11 --11 --12 --12 --12 --12 --13 --12 --13 --13 --14 --14 --14 --14 --14 --14 --15 --14 --15 --14 --15 --15 --15 --14 --15 --14 --15 --15 --16 --15 --15 --15 --15 --14 --15 --35 --90 --128 --128 --109 --61 --31 --23 --28 --41 --52 --58 --58 --55 --48 --43 --38 --36 --34 --34 --33 --33 --31 --31 --29 --28 --26 --26 --25 --24 --23 --23 -44 -127 -127 -127 -110 -48 -0 --28 --36 --31 --17 --4 -7 -11 -11 -7 -3 --3 --6 --9 --9 --10 --9 --9 --7 --8 --8 --9 --10 --11 --11 --12 --32 --88 --128 --128 --107 --59 --28 --20 --26 --39 --49 --56 --56 --53 --47 --42 --37 --35 --33 --33 --32 --32 --31 --30 --28 --27 --25 --25 --24 --24 --23 --23 -45 -127 -127 -127 -110 -48 -0 --29 --36 --31 --17 --4 -7 -11 -12 -7 -3 --3 --6 --9 --9 --10 --8 --8 --7 --8 --8 --10 --10 --11 --11 --12 --32 --88 --128 --128 --107 --59 --29 --20 --26 --39 --50 --56 --57 --53 --47 --42 --38 --35 --34 --34 --33 --32 --31 --30 --29 --28 --26 --25 --24 --24 --23 --23 -45 -127 -127 -127 -110 -48 -0 --29 --36 --31 --17 --4 -7 -11 -12 -7 -2 --3 --6 --9 --9 --9 --8 --8 --7 --8 --8 --9 --10 --11 --11 --12 --32 --88 --128 --128 --107 --59 --29 --21 --26 --39 --50 --57 --57 --53 --47 --42 --37 --35 --33 --33 --32 --33 --31 --30 --28 --27 --26 --25 --24 --24 --23 --23 -45 -127 -127 -127 -109 -48 -0 --29 --36 --31 --17 --4 -7 -11 -11 -7 -3 --3 --6 --9 --9 --10 --8 --9 --8 --8 --8 --9 --10 --10 --11 --12 --32 --88 --128 --128 --107 --59 --29 --21 --26 --39 --50 --57 --57 --53 --47 --42 --37 --35 --33 --33 --32 --32 --31 --30 --29 --28 --26 --25 --24 --24 --23 --23 -45 -127 -127 -127 -109 -48 -0 --28 --36 --30 --17 --4 -7 -11 -12 -7 -3 --3 --6 --9 --9 --10 --8 --8 --7 --8 --8 --10 --10 --11 --11 --12 --32 --88 --128 --128 --105 --57 --27 --19 --24 --38 --49 --56 --56 --53 --46 --41 --36 --34 --33 --32 --32 --32 --30 --30 --28 --27 --25 --25 --24 --24 --23 --22 --21 --21 --21 --21 --20 --20 --19 --19 --17 --18 --17 --18 --17 --17 --17 --17 --16 --16 --15 --16 --15 --16 --16 --16 --15 --16 --15 --15 --14 --16 --15 --15 -52 -127 -127 -127 -114 -52 -3 --25 --34 --28 --15 --2 -9 -13 -13 -9 -4 --1 --5 --7 --8 --9 --8 --7 --7 --7 --7 --8 --9 --10 --10 --11 --31 --87 --128 --128 --105 --57 --26 --18 --24 --37 --49 --56 --56 --52 --46 --41 --36 --34 --33 --33 --32 --32 --30 --29 --28 --27 --25 --25 --24 --23 --22 --22 -45 -127 -127 -127 -108 -46 --2 --30 --37 --32 --18 --4 -6 -11 -11 -7 -2 --3 --7 --10 --9 --10 --8 --9 --8 --9 --9 --10 --10 --11 --11 --11 --31 --87 --128 --128 --106 --57 --27 --18 --24 --38 --49 --56 --56 --53 --46 --42 --36 --34 --32 --33 --32 --32 --31 --30 --28 --27 --26 --25 --24 --24 --23 --23 -44 -127 -127 -127 -108 -46 --2 --30 --37 --32 --18 --5 -6 -11 -11 -7 -2 --3 --6 --9 --9 --10 --9 --9 --8 --9 --9 --10 --10 --11 --11 --12 --32 --88 --128 --128 --106 --57 --26 --18 --24 --38 --49 --56 --56 --53 --46 --41 --36 --34 --32 --33 --32 --32 --31 --30 --28 --27 --25 --25 --24 --24 --23 --23 -45 -127 -127 -127 -108 -46 --2 --30 --37 --32 --18 --5 -6 -11 -11 -7 -2 --3 --6 --9 --9 --10 --8 --9 --8 --9 --9 --10 --10 --11 --11 --12 --32 --88 --128 --128 --106 --57 --26 --18 --24 --38 --49 --56 --56 --52 --46 --41 --36 --34 --33 --33 --32 --32 --30 --29 --28 --27 --25 --25 --24 --24 --22 --22 -45 -127 -127 -127 -108 -45 --2 --30 --37 --31 --17 --5 -6 -11 -11 -7 -2 --3 --7 --10 --10 --10 --8 --8 --8 --9 --8 --10 --10 --11 --11 --12 --32 --88 --128 --128 --106 --57 --27 --19 --24 --38 --49 --56 --56 --53 --47 --41 --36 --34 --33 --33 --32 --32 --30 --30 --28 --27 --25 --25 --24 --24 --23 --22 -45 -127 -127 -127 -108 -46 --1 --30 --37 --32 --18 --5 -6 -10 -11 -7 -2 --3 --6 --9 --10 --10 --9 --9 --8 --9 --8 --10 --10 --11 --11 --12 --32 --88 --128 --128 --106 --57 --26 --18 --25 --38 --49 --56 --56 --53 --47 --41 --37 --34 --33 --33 --32 --32 --31 --30 --28 --27 --26 --25 --24 --24 --23 --23 -45 -127 -127 -127 -108 -45 --2 --30 --37 --32 --18 --5 -6 -10 -11 -7 -2 --3 --6 --9 --10 --10 --9 --9 --8 --9 --8 --10 --10 --11 --11 --12 --32 --88 --128 --128 --106 --57 --27 --19 --24 --38 --49 --56 --56 --53 --46 --41 --36 --34 --32 --32 --32 --32 --31 --30 --28 --27 --25 --25 --24 --24 --23 --23 -45 -127 -127 -127 -108 -46 --2 --30 --38 --32 --17 --4 -7 -11 -11 -6 -2 --3 --6 --9 --9 --9 --9 --9 --8 --9 --8 --10 --10 --11 --11 --12 --31 --87 --128 --128 --106 --57 --27 --18 --25 --38 --49 --56 --56 --52 --46 --41 --36 --34 --32 --33 --32 --32 --30 --30 --28 --27 --26 --25 --24 --24 --23 --23 -45 -127 -127 -127 -108 -46 --2 --30 --37 --32 --17 --4 -7 -11 -11 -6 -1 --4 --7 --10 --10 --10 --8 --9 --8 --9 --9 --10 --10 --11 --11 --12 --32 --87 --128 --128 --106 --57 --27 --19 --24 --38 --49 --56 --56 --53 --46 --41 --36 --34 --33 --33 --32 --32 --31 --30 --28 --27 --25 --25 --24 --24 --23 --23 -45 -127 -127 -127 -108 -46 --2 --30 --37 --32 --17 --4 -7 -10 -11 -6 -2 --3 --6 --9 --9 --9 --9 --9 --8 --8 --8 --9 --10 --11 --11 --12 --31 --88 --128 --128 --107 --59 --29 --20 --26 --39 --50 --57 --57 --53 --47 --42 --37 --35 --33 --33 --32 --32 --31 --30 --29 --28 --26 --25 --24 --24 --23 --23 -45 -127 -127 -127 -110 -48 -0 --28 --36 --31 --17 --4 -7 -11 -11 -7 -3 --3 --6 --9 --9 --10 --8 --8 --8 --8 --8 --10 --10 --11 --11 --12 --12 --12 --12 --12 --12 --13 --13 --14 --13 --14 --13 --14 --13 --14 --14 --15 --14 --15 --14 --15 --14 --15 --14 --15 --14 --15 --15 --15 --15 --16 --15 --16 --35 --91 --128 --128 --110 --61 --31 --22 --28 --41 --52 --58 --58 --55 --48 --43 --38 --36 --34 --34 --33 --33 --31 --31 --29 --28 --26 --26 --25 --25 --24 --23 -44 -127 -127 -127 -109 -47 -0 --29 --36 --31 --17 --4 -7 -10 -10 -6 -2 --3 --6 --8 --9 --9 --8 --9 --8 --9 --9 --10 --10 --11 --11 --12 --32 --88 --128 --128 --105 --57 --26 --18 --24 --38 --49 --56 --56 --53 --47 --41 --36 --34 --32 --32 --31 --32 --30 --30 --28 --27 --25 --25 --24 --24 --23 --22 --21 --21 --21 --21 --21 --21 --21 --20 --19 --19 --19 --19 --18 --18 --17 --18 --17 --17 --17 --17 --16 --16 --16 --16 --15 --16 --15 --16 --15 --16 --15 --16 -52 -127 -127 -127 -115 -53 -4 --24 --32 --26 --13 -0 -10 -14 -14 -9 -5 --1 --4 --7 --7 --8 --7 --7 --6 --7 --7 --8 --9 --10 --10 --11 --11 --12 --11 --12 --12 --13 --12 --13 --13 --13 --13 --14 --13 --14 --14 --14 --14 --15 --14 --15 --14 --15 --15 --16 --15 --15 --15 --16 --15 --16 --15 --16 --35 --91 --128 --128 --109 --61 --31 --22 --28 --41 --52 --59 --58 --55 --48 --43 --38 --36 --34 --34 --33 --33 --31 --31 --29 --28 --26 --26 --25 --24 --23 --23 -45 -127 -127 -127 -109 -47 -0 --29 --36 --31 --17 --4 -7 -11 -12 -7 -2 --3 --6 --9 --9 --9 --8 --8 --7 --8 --8 --10 --10 --11 --11 --12 --32 --88 --128 --128 --107 --59 --29 --20 --26 --39 --50 --57 --57 --53 --47 --42 --37 --35 --33 --33 --32 --32 --31 --30 --28 --28 --26 --25 --24 --24 --23 --23 -45 -127 -127 -127 -109 -47 -0 --28 --36 --31 --17 --4 -7 -11 -12 -7 -2 --3 --6 --9 --9 --9 --8 --9 --8 --8 --8 --9 --10 --11 --11 --12 --32 --88 --128 --128 --105 --57 --26 --18 --24 --38 --49 --56 --56 --53 --46 --41 --36 --34 --33 --33 --32 --32 --30 --29 --28 --27 --26 --25 --24 --24 --23 --23 --21 --22 --21 --21 --20 --20 --19 --19 --18 --18 --17 --18 --17 --17 --17 --17 --16 --17 --16 --16 --15 --16 --15 --16 --15 --16 --15 --15 --14 --15 --15 --15 -52 -127 -127 -127 -114 -51 -3 --25 --33 --28 --14 --1 -9 -13 -13 -9 -4 --1 --5 --8 --8 --8 --7 --7 --7 --7 --7 --8 --9 --10 --10 --11 --31 --87 --128 --128 --107 --58 --28 --20 --25 --38 --49 --56 --57 --53 --47 --42 --36 --35 --33 --33 --32 --32 --31 --30 --28 --28 --26 --25 --24 --24 --23 --23 -45 -127 -127 -127 -109 -48 -0 --28 --36 --31 --17 --4 -7 -11 -11 -7 -3 --2 --6 --8 --9 --10 --9 --9 --8 --8 --8 --9 --9 --11 --11 --12 --11 --12 --12 --12 --12 --13 --13 --14 --13 --14 --13 --14 --13 --14 --14 --15 --14 --15 --14 --15 --15 --15 --15 --15 --15 --15 --15 --15 --15 --16 --15 --16 --35 --91 --128 --128 --107 --59 --29 --21 --27 --39 --51 --57 --57 --54 --47 --42 --38 --35 --33 --33 --33 --33 --31 --30 --28 --27 --26 --25 --24 --24 --23 --23 --21 --21 --21 --22 --21 --22 --21 --21 --20 --20 --19 --19 --18 --19 --17 --18 --17 --18 --17 --18 --16 --17 --15 --16 --15 --16 --15 --16 --15 --16 --15 --16 -52 -127 -127 -127 -115 -53 -4 --24 --32 --27 --14 --1 -10 -14 -14 -10 -5 --1 --4 --7 --7 --8 --7 --7 --7 --8 --8 --8 --9 --10 --10 --11 --11 --12 --11 --12 --12 --13 --12 --13 --13 --13 --13 --13 --13 --14 --14 --15 --14 --15 --14 --15 --14 --15 --14 --15 --15 --15 --14 --15 --15 --15 --15 --16 --35 --90 --128 --128 --107 --59 --29 --21 --27 --40 --51 --58 --58 --54 --47 --43 --38 --35 --33 --34 --33 --33 --31 --31 --28 --28 --26 --26 --24 --24 --23 --23 --22 --22 --22 --22 --21 --22 --21 --21 --20 --20 --19 --19 --18 --18 --18 --18 --17 --17 --17 --17 --16 --17 --16 --16 --15 --16 --15 --16 --15 --16 --15 --16 -52 -127 -127 -127 -115 -53 -5 --24 --32 --27 --14 --1 -9 -13 -14 -10 -5 --1 --4 --7 --7 --8 --7 --7 --6 --7 --7 --8 --9 --10 --10 --11 --11 --12 --11 --12 --12 --13 --12 --13 --13 --14 --13 --14 --13 --14 --14 --15 --14 --14 --14 --14 --14 --15 --15 --16 --15 --15 --15 --15 --15 --15 --15 --16 --35 --90 --128 --128 --109 --61 --31 --22 --28 --41 --51 --58 --58 --55 --48 --43 --38 --36 --34 --34 --33 --33 --32 --31 --29 --28 --26 --26 --25 --24 --23 --24 -45 -127 -127 -127 -109 -47 -0 --29 --36 --31 --17 --4 -7 -11 -11 -7 -3 --3 --6 --9 --9 --10 --8 --8 --7 --8 --8 --9 --10 --11 --11 --12 --32 --88 --128 --128 --107 --59 --28 --20 --26 --39 --50 --57 --57 --53 --47 --41 --37 --34 --33 --33 --32 --32 --31 --30 --28 --27 --26 --25 --24 --24 --23 --22 -45 -127 -127 -127 -110 -48 -0 --29 --36 --30 --17 --4 -7 -11 -12 -8 -3 --3 --6 --9 --9 --9 --8 --8 --8 --8 --8 --9 --10 --11 --11 --12 --32 --88 --128 --128 --105 --57 --26 --18 --24 --38 --49 --56 --56 --52 --46 --41 --36 --34 --32 --33 --32 --32 --30 --30 --28 --27 --25 --25 --24 --24 --22 --23 --22 --22 --21 --21 --20 --20 --19 --19 --18 --18 --17 --18 --17 --18 --17 --17 --16 --17 --16 --17 --16 --16 --15 --16 --15 --16 --15 --16 --15 --15 --14 --15 -52 -127 -127 -127 -114 -51 -3 --26 --33 --28 --15 --2 -9 -13 -13 -9 -4 --2 --5 --7 --8 --8 --7 --7 --7 --7 --7 --9 --9 --11 --11 --11 --31 --87 --128 --128 --107 --59 --29 --20 --26 --39 --49 --57 --56 --53 --47 --42 --37 --35 --33 --33 --32 --32 --31 --30 --28 --27 --26 --25 --24 --24 --23 --23 -45 -127 -127 -127 -110 -48 -0 --28 --36 --31 --17 --4 -7 -11 -12 -7 -3 --3 --6 --9 --9 --9 --8 --8 --8 --9 --8 --9 --9 --11 --11 --12 --12 --13 --12 --13 --12 --13 --13 --14 --13 --14 --13 --14 --13 --14 --14 --15 --14 --15 --15 --15 --15 --16 --15 --16 --15 --15 --14 --16 --15 --16 --15 --16 --36 --91 --128 --128 --109 --61 --31 --22 --28 --41 --52 --58 --58 --55 --48 --43 --38 --36 --34 --34 --33 --33 --32 --31 --29 --28 --26 --26 --24 --24 --23 --23 -45 -127 -127 -127 -110 -48 --1 --29 --37 --31 --17 --4 -7 -11 -11 -7 -2 --3 --6 --9 --9 --10 --8 --8 --8 --8 --8 --9 --10 --11 --11 --12 --32 --88 --128 --128 --105 --57 --27 --18 --24 --38 --49 --56 --56 --52 --46 --41 --36 --34 --32 --33 --32 --32 --31 --30 --28 --27 --26 --25 --24 --24 --22 --22 --21 --21 --21 --21 --21 --22 --21 --21 --20 --20 --18 --19 --18 --18 --17 --18 --17 --17 --16 --17 --16 --16 --16 --16 --16 --16 --15 --16 --15 --16 --15 --16 -52 -127 -127 -127 -115 -53 -5 --24 --32 --26 --13 --1 -9 -13 -14 -9 -5 --1 --4 --6 --7 --8 --7 --7 --6 --7 --7 --9 --8 --10 --10 --11 --11 --11 --11 --12 --12 --13 --12 --13 --13 --13 --13 --14 --13 --14 --13 --14 --14 --15 --14 --15 --14 --15 --15 --15 --15 --15 --15 --15 --15 --15 --15 --16 --35 --91 --128 --128 --108 --59 --29 --21 --27 --40 --51 --57 --58 --54 --48 --42 --37 --35 --33 --34 --32 --32 --31 --30 --28 --28 --26 --25 --24 --24 --23 --23 --22 --21 --21 --22 --21 --21 --21 --21 --20 --20 --19 --19 --18 --18 --17 --18 --17 --17 --17 --17 --16 --17 --16 --16 --15 --16 --15 --16 --15 --16 --15 --15 -52 -127 -127 -127 -115 -52 -4 --24 --32 --27 --13 --1 -10 -13 -14 -9 -5 --1 --4 --6 --7 --7 --7 --7 --6 --7 --7 --9 --9 --10 --10 --11 --11 --12 --11 --12 --12 --13 --12 --13 --12 --13 --13 --13 --13 --14 --14 --14 --14 --15 --14 --15 --14 --15 --14 --15 --14 --15 --14 --15 --15 --15 --15 --15 --35 --90 --128 --128 --108 --60 --29 --21 --26 --40 --50 --58 --57 --54 --47 --42 --38 --35 --34 --34 --33 --33 --31 --30 --28 --27 --25 --25 --24 --25 --23 --24 --22 --22 --21 --21 --20 --20 --19 --19 --18 --19 --18 --18 --17 --18 --17 --17 --16 --17 --16 --17 --16 --16 --15 --16 --15 --16 --15 --16 --15 --16 --15 --15 -52 -127 -127 -127 -113 -51 -3 --25 --33 --28 --14 --2 -9 -13 -14 -9 -4 --1 --5 --8 --8 --8 --7 --7 --7 --7 --7 --9 --9 --10 --10 --11 --31 --87 --128 --128 --105 --57 --26 --18 --24 --37 --49 --55 --56 --52 --46 --41 --36 --34 --32 --33 --31 --32 --30 --30 --28 --27 --25 --25 --24 --24 --23 --22 -46 -127 -127 -127 -108 -46 --2 --30 --37 --31 --17 --5 -6 -10 -11 -7 -2 --3 --6 --9 --9 --10 --9 --9 --8 --9 --9 --10 --10 --11 --11 --12 --32 --88 --128 --128 --107 --59 --29 --20 --26 --39 --50 --57 --57 --53 --47 --42 --37 --35 --33 --33 --32 --33 --31 --30 --28 --27 --25 --25 --24 --24 --23 --23 -45 -127 -127 -127 -109 -48 -0 --29 --36 --31 --17 --4 -7 -11 -12 -7 -3 --3 --6 --9 --9 --10 --8 --8 --7 --8 --8 --10 --10 --11 --11 --12 --12 --12 --12 --13 --13 --14 --13 --13 --13 --14 --13 --15 --14 --15 --14 --15 --14 --15 --14 --15 --15 --16 --15 --16 --15 --16 --15 --16 --15 --16 --15 --16 --35 --91 --128 --128 --108 --59 --29 --21 --26 --39 --51 --57 --57 --54 --47 --42 --37 --35 --33 --33 --33 --33 --31 --30 --29 --28 --26 --25 --24 --24 --23 --23 --22 --21 --21 --22 --22 --22 --21 --21 --20 --19 --18 --19 --18 --19 --17 --18 --17 --17 --16 --17 --16 --17 --16 --17 --15 --16 --15 --16 --15 --16 --15 --16 -52 -127 -127 -127 -115 -53 -4 --24 --32 --27 --13 --1 -10 -13 -14 -9 -4 --1 --4 --7 --7 --7 --7 --7 --7 --8 --7 --9 --9 --10 --10 --11 --11 --12 --11 --12 --12 --12 --12 --13 --12 --13 --13 --13 --13 --14 --14 --14 --14 --14 --14 --15 --14 --15 --15 --15 --15 --15 --14 --15 --15 --15 --15 --15 --35 --90 --128 --128 --108 --59 --29 --20 --26 --39 --51 --58 --57 --54 --48 --42 --37 --35 --33 --33 --32 --33 --31 --31 --28 --28 --26 --25 --24 --24 --23 --23 --22 --22 --22 --22 --22 --22 --21 --21 --19 --20 --19 --19 --18 --19 --18 --18 --17 --18 --17 --17 --16 --17 --16 --16 --15 --16 --15 --16 --15 --16 --15 --16 -52 -127 -127 -127 -115 -53 -5 --24 --32 --27 --13 --1 -10 -14 -14 -10 -5 --1 --4 --7 --7 --7 --7 --7 --6 --7 --7 --9 --9 --10 --10 --11 --11 --12 --11 --12 --12 --12 --12 --13 --13 --13 --13 --13 --13 --14 --14 --15 --14 --15 --14 --15 --14 --15 --14 --15 --15 --15 --15 --15 --15 --16 --15 --16 --35 --90 --128 --128 --109 --61 --31 --22 --28 --41 --52 --58 --58 --55 --48 --43 --38 --36 --34 --34 --33 --33 --31 --31 --29 --28 --26 --26 --24 --24 --23 --23 -44 -127 -127 -127 -109 -47 -0 --28 --36 --31 --17 --4 -7 -11 -11 -7 -3 --3 --6 --9 --9 --10 --9 --8 --7 --8 --8 --10 --10 --11 --11 --12 --32 --87 --128 --128 --105 --57 --27 --19 --25 --38 --49 --56 --56 --53 --46 --41 --36 --34 --32 --33 --32 --32 --30 --29 --28 --27 --25 --25 --24 --24 --23 --23 --22 --21 --21 --21 --21 --21 --21 --21 --19 --20 --18 --19 --18 --18 --17 --17 --16 --17 --17 --17 --16 --16 --15 --16 --15 --16 --15 --16 --15 --16 --15 --16 -52 -127 -127 -127 -115 -53 -4 --24 --32 --27 --14 --1 -9 -14 -14 -10 -5 --1 --4 --7 --7 --8 --7 --7 --7 --7 --7 --9 --9 --10 --10 --11 --11 --12 --12 --12 --12 --13 --12 --13 --13 --13 --13 --14 --13 --14 --14 --15 --14 --15 --15 --15 --14 --15 --14 --15 --15 --15 --14 --15 --15 --16 --15 --16 --35 --91 --128 --128 --108 --59 --28 --20 --26 --40 --51 --58 --57 --54 --47 --42 --37 --35 --33 --33 --33 --33 --31 --30 --28 --28 --26 --25 --24 --24 --23 --23 --22 --22 --21 --22 --21 --22 --21 --21 --19 --19 --18 --19 --18 --19 --17 --18 --17 --17 --17 --17 --17 --17 --16 --16 --15 --16 --15 --16 --15 --16 --15 --15 -52 -127 -127 -127 -115 -52 -4 --24 --32 --27 --13 --1 -10 -14 -14 -10 -5 --1 --4 --7 --7 --8 --7 --7 --6 --7 --7 --8 --9 --10 --10 --11 --11 --12 --12 --13 --12 --13 --12 --13 --12 --13 --13 --13 --13 --14 --14 --14 --14 --15 --14 --15 --14 --15 --14 --15 --15 --15 --14 --15 --15 --16 --15 --16 --35 --91 --128 --128 --109 --61 --31 --22 --28 --41 --52 --59 --58 --55 --48 --43 --38 --36 --34 --34 --33 --33 --32 --31 --29 --28 --26 --26 --25 --24 --24 --23 -44 -127 -127 -127 -110 -48 -0 --29 --36 --31 --17 --4 -6 -11 -11 -7 -2 --3 --6 --9 --9 --9 --8 --9 --8 --9 --8 --10 --9 --10 --11 --12 --32 --88 --128 --128 --107 --59 --29 --20 --25 --39 --49 --57 --57 --54 --47 --42 --37 --35 --33 --33 --32 --32 --31 --30 --28 --27 --26 --25 --24 --24 --23 --23 -45 -127 -127 -127 -110 -47 -0 --29 --36 --30 --17 --4 -7 -11 -12 -7 -3 --3 --6 --9 --9 --10 --8 --8 --7 --8 --8 --10 --10 --11 --11 --12 --32 --88 --128 --128 --107 --59 --29 --20 --26 --39 --50 --57 --57 --53 --47 --42 --37 --35 --33 --33 --32 --32 --31 --30 --28 --27 --26 --25 --24 --24 --23 --23 -45 -127 -127 -127 -109 -48 -0 --28 --36 --31 --17 --4 -6 -11 -11 -7 -2 --3 --6 --9 --9 --9 --8 --8 --8 --8 --8 --9 --9 --11 --11 --12 --32 --88 --128 --128 --107 --59 --29 --20 --25 --39 --49 --56 --57 --53 --47 --42 --37 --35 --33 --33 --32 --32 --31 --30 --28 --28 --26 --25 --24 --24 --23 --22 -45 -127 -127 -127 -110 -48 -0 --28 --35 --31 --17 --4 -7 -11 -11 -7 -3 --3 --6 --9 --9 --9 --8 --8 --8 --8 --8 --10 --10 --11 --11 --12 --32 --88 --128 --128 --107 --59 --29 --20 --26 --39 --50 --57 --57 --53 --47 --42 --37 --35 --33 --33 --32 --32 --31 --30 --28 --27 --26 --25 --24 --24 --23 --23 -45 -127 -127 -127 -110 -48 -0 --28 --36 --30 --17 --4 -7 -11 -11 -7 -3 --3 --6 --9 --9 --10 --8 --8 --7 --8 --8 --10 --10 --11 --11 --12 --32 --88 --128 --128 --107 --59 --29 --20 --26 --39 --50 --57 --57 --53 --47 --42 --37 --35 --33 --33 --32 --32 --31 --30 --29 --28 --26 --25 --24 --24 --23 --23 -45 -127 -127 -127 -110 -48 -0 --28 --36 --31 --17 --4 -7 -11 -11 -7 -2 --3 --6 --9 --9 --10 --9 --9 --8 --8 --8 --9 --9 --11 --11 --12 --32 --88 --128 --128 --107 --59 --29 --20 --26 --39 --49 --56 --57 --53 --47 --42 --37 --35 --33 --33 --32 --32 --31 --30 --28 --27 --26 --25 --24 --24 --23 --23 -45 -127 -127 -127 -110 -48 -0 --29 --36 --31 --17 --4 -7 -11 -12 -8 -3 --3 --6 --9 --9 --10 --9 --9 --8 --9 --9 --10 --10 --11 --11 --12 --32 --88 --128 --128 --107 --59 --29 --20 --26 --39 --50 --57 --57 --53 --47 --42 --37 --35 --33 --33 --32 --32 --31 --30 --28 --27 --26 --25 --24 --24 --22 --22 -45 -127 -127 -127 -110 -48 -0 --28 --36 --31 --17 --4 -7 -11 -12 -7 -2 --3 --6 --9 --9 --9 --8 --8 --7 --8 --8 --9 --10 --11 --11 --12 --32 --88 --128 --128 --105 --57 --26 --18 --24 --38 --49 --56 --56 --52 --46 --41 --36 --34 --32 --32 --31 --31 --30 --29 --28 --27 --25 --25 --24 --23 --22 --22 --21 --22 --21 --21 --20 --19 --18 --19 --18 --18 --17 --18 --17 --17 --17 --17 --16 --16 --16 --17 --16 --16 --15 --16 --15 --15 --15 --16 --15 --15 --15 --16 -52 -127 -127 -127 -114 -51 -3 --26 --33 --28 --14 --1 -10 -13 -14 -9 -4 --1 --5 --8 --8 --8 --7 --7 --7 --7 --7 --9 --9 --10 --10 --11 --31 --87 --128 --128 --105 --57 --26 --18 --24 --38 --49 --56 --56 --53 --46 --41 --36 --34 --33 --33 --32 --32 --31 --30 --28 --27 --25 --25 --24 --24 --23 --23 -45 -127 -127 -127 -108 -46 --2 --30 --38 --32 --18 --5 -7 -10 -11 -6 -2 --4 --7 --10 --10 --10 --9 --8 --8 --9 --9 --10 --10 --11 --12 --13 --32 --88 --128 --128 --107 --59 --29 --20 --26 --39 --49 --57 --57 --53 --47 --42 --37 --35 --33 --33 --32 --33 --31 --30 --28 --28 --26 --26 --24 --24 --23 --23 -45 -127 -127 -127 -110 -48 -0 --28 --36 --31 --17 --4 -7 -11 -11 -7 -2 --3 --6 --9 --9 --9 --8 --8 --8 --8 --9 --9 --10 --11 --11 --12 --12 --13 --12 --13 --12 --13 --13 --14 --13 --14 --13 --14 --14 --15 --14 --15 --14 --15 --14 --15 --14 --15 --14 --15 --14 --15 --14 --15 --14 --15 --15 --16 --35 --90 --128 --128 --109 --61 --31 --23 --28 --41 --51 --58 --58 --55 --48 --43 --38 --35 --34 --34 --33 --33 --31 --31 --29 --28 --26 --26 --25 --24 --24 --23 -45 -127 -127 -127 -109 -47 -0 --29 --36 --31 --17 --4 -7 -11 -11 -7 -2 --3 --6 --9 --9 --9 --8 --9 --8 --8 --8 --10 --10 --11 --11 --12 --32 --88 --128 --128 --107 --59 --29 --20 --26 --38 --49 --56 --56 --53 --47 --42 --37 --35 --33 --33 --32 --32 --30 --30 --28 --27 --26 --25 --24 --24 --23 --23 -45 -127 -127 -127 -110 -47 -0 --29 --36 --31 --17 --4 -7 -11 -11 -7 -3 --3 --6 --9 --9 --9 --9 --9 --8 --9 --9 --10 --10 --11 --11 --12 --32 --88 --128 --128 --107 --59 --29 --20 --26 --39 --50 --57 --57 --53 --47 --42 --37 --35 --33 --33 --32 --32 --31 --30 --28 --27 --25 --25 --24 --24 --23 --23 -45 -127 -127 -127 -110 -47 -0 --29 --36 --31 --17 --4 -7 -11 -11 -8 -3 --3 --6 --9 --9 --10 --9 --9 --8 --8 --8 --9 --10 --11 --11 --12 --32 --88 --128 --128 --107 --59 --29 --20 --26 --39 --49 --56 --56 --53 --47 --42 --37 --35 --33 --33 --32 --32 --30 --30 --28 --27 --26 --25 --24 --24 --23 --22 -45 -127 -127 -127 -110 -48 -0 --29 --36 --31 --17 --4 -7 -11 -12 -7 -2 --3 --6 --9 --9 --9 --8 --8 --7 --8 --8 --10 --10 --11 --11 --12 --32 --88 --128 --128 --107 --59 --29 --20 --26 --39 --50 --57 --57 --53 --47 --42 --37 --35 --33 --33 --32 --32 --31 --30 --28 --28 --26 --25 --24 --24 --23 --23 -45 -127 -127 -127 -110 -48 -0 --29 --36 --31 --17 --4 -7 -11 -12 -8 -3 --3 --6 --9 --9 --9 --8 --8 --7 --8 --8 --10 --10 --11 --11 --12 --32 --88 --128 --128 --105 --57 --27 --18 --24 --38 --49 --56 --56 --52 --46 --41 --36 --35 --32 --33 --32 --32 --30 --30 --28 --27 --26 --25 --24 --24 --22 --22 --21 --22 --20 --21 --20 --20 --19 --19 --18 --18 --17 --18 --17 --17 --17 --17 --16 --17 --16 --16 --15 --16 --15 --16 --15 --16 --15 --16 --15 --16 --15 --15 -52 -127 -127 -127 -114 -51 -3 --26 --33 --28 --14 --2 -9 -13 -14 -9 -4 --2 --5 --8 --8 --8 --7 --7 --6 --7 --7 --9 --9 --10 --11 --11 --31 --87 --128 --128 --105 --57 --26 --18 --24 --37 --48 --56 --56 --52 --46 --41 --36 --34 --32 --32 --32 --32 --30 --29 --28 --27 --25 --25 --24 --24 --23 --22 -45 -127 -127 -127 -108 -46 --2 --30 --37 --32 --18 --5 -6 -10 -10 -7 -2 --3 --6 --9 --9 --10 --8 --9 --8 --9 --9 --10 --10 --11 --11 --12 --32 --88 --128 --128 --106 --57 --26 --18 --24 --38 --49 --56 --56 --52 --46 --41 --36 --34 --33 --33 --32 --32 --30 --29 --28 --27 --26 --25 --24 --24 --23 --23 -45 -127 -127 -127 -108 -46 --1 --30 --37 --32 --18 --5 -6 -11 -11 -7 -2 --4 --7 --9 --10 --10 --9 --9 --8 --9 --9 --10 --10 --11 --11 --11 --31 --87 --128 --128 --106 --57 --27 --19 --25 --38 --49 --56 --56 --53 --46 --42 --37 --35 --32 --33 --31 --32 --30 --30 --28 --27 --26 --25 --24 --24 --22 --22 -46 -127 -127 -127 -108 -46 --2 --30 --37 --32 --18 --5 -6 -10 -10 -6 -1 --3 --7 --9 --10 --10 --9 --9 --8 --8 --8 --9 --10 --11 --11 --12 --32 --88 --128 --128 --106 --57 --26 --18 --24 --38 --49 --56 --56 --53 --46 --41 --36 --34 --33 --33 --32 --32 --31 --30 --28 --28 --25 --25 --24 --24 --22 --23 -45 -127 -127 -127 -108 -46 --2 --30 --37 --32 --17 --5 -6 -11 -11 -7 -2 --3 --6 --9 --10 --10 --8 --9 --8 --8 --9 --9 --10 --11 --11 --12 --32 --88 --128 --128 --105 --57 --27 --19 --24 --38 --49 --56 --56 --52 --46 --41 --36 --34 --32 --33 --32 --32 --30 --30 --28 --27 --26 --25 --24 --24 --23 --22 -46 -127 -127 -127 -108 -46 --2 --30 --37 --32 --18 --5 -6 -10 -11 -6 -2 --4 --7 --9 --9 --10 --9 --8 --7 --8 --8 --10 --10 --11 --11 --12 --32 --88 --128 --128 --106 --57 --27 --18 --24 --37 --49 --56 --56 --53 --46 --41 --36 --34 --32 --33 --32 --32 --30 --30 --28 --27 --26 --25 --24 --24 --23 --22 -45 -127 -127 -127 -108 -45 --2 --30 --37 --32 --17 --5 -6 -10 -11 -7 -2 --3 --7 --9 --10 --10 --9 --9 --7 --8 --8 --10 --10 --11 --11 --12 --32 --88 --128 --128 --106 --57 --27 --18 --24 --38 --49 --56 --56 --53 --47 --41 --36 --34 --32 --33 --31 --32 --30 --30 --28 --27 --25 --25 --24 --24 --23 --23 -45 -127 -127 -127 -108 -46 --2 --30 --37 --32 --18 --5 -6 -10 -11 -7 -2 --4 --7 --9 --10 --10 --9 --9 --8 --9 --9 --10 --10 --11 --11 --12 --32 --88 --128 --128 --106 --57 --26 --18 --24 --38 --49 --56 --56 --53 --46 --41 --36 --34 --32 --33 --32 --32 --30 --30 --28 --27 --25 --25 --24 --24 --23 --23 -45 -127 -127 -127 -108 -45 --2 --30 --37 --32 --18 --5 -6 -10 -11 -7 -2 --3 --6 --9 --10 --10 --9 --9 --8 --9 --8 --9 --9 --11 --11 --12 --32 --88 --128 --128 --106 --57 --26 --18 --24 --37 --49 --56 --56 --53 --46 --41 --36 --34 --32 --32 --32 --32 --30 --30 --28 --27 --25 --25 --24 --24 --23 --23 -45 -127 -127 -127 -108 -46 --2 --30 --38 --32 --18 --5 -6 -10 -10 -7 -2 --3 --7 --9 --10 --10 --9 --9 --8 --9 --8 --10 --10 --11 --11 --12 --32 --88 --128 --128 --107 --59 --29 --20 --26 --39 --50 --57 --57 --54 --47 --42 --37 --35 --33 --33 --32 --32 --31 --30 --28 --27 --25 --25 --24 --24 --23 --23 -45 -127 -127 -127 -110 -47 -0 --29 --36 --31 --17 --4 -7 -11 -11 -7 -2 --3 --6 --9 --9 --9 --9 --8 --8 --8 --8 --9 --10 --11 --11 --12 --12 --12 --12 --13 --12 --13 --13 --14 --13 --14 --14 --14 --14 --15 --14 --14 --14 --15 --14 --15 --14 --15 --15 --15 --15 --16 --15 --16 --15 --16 --15 --16 --35 --90 --128 --128 --109 --61 --31 --22 --28 --41 --51 --58 --58 --55 --48 --43 --38 --36 --34 --34 --33 --33 --32 --31 --29 --28 --26 --26 --25 --24 --24 --23 -44 -127 -127 -127 -110 -48 -0 --28 --36 --31 --17 --4 -6 -11 -11 -7 -2 --3 --6 --9 --9 --10 --8 --8 --7 --8 --8 --10 --10 --11 --11 --12 --32 --88 --128 --128 --105 --57 --26 --18 --24 --38 --49 --56 --56 --53 --46 --41 --36 --34 --33 --33 --32 --32 --30 --29 --28 --27 --25 --25 --24 --24 --22 --22 --21 --22 --21 --22 --21 --21 --20 --21 --19 --19 --18 --19 --18 --19 --17 --18 --17 --17 --16 --17 --16 --17 --16 --16 --15 --16 --15 --15 --15 --16 --15 --16 -52 -127 -127 -127 -115 -53 -4 --24 --32 --27 --13 --1 -10 -14 -15 -10 -5 --1 --4 --7 --8 --8 --7 --7 --6 --7 --7 --9 --9 --10 --10 --11 --11 --11 --11 --12 --12 --13 --13 --13 --13 --13 --13 --14 --14 --14 --14 --15 --14 --15 --14 --15 --14 --15 --15 --16 --15 --16 --15 --15 --14 --15 --15 --15 --35 --91 --128 --128 --110 --61 --31 --22 --28 --41 --52 --58 --58 --55 --49 --43 --38 --36 --34 --34 --33 --33 --32 --31 --29 --28 --26 --26 --25 --24 --23 --23 -45 -127 -127 -127 -109 -47 -0 --28 --36 --31 --17 --5 -7 -11 -11 -7 -3 --3 --6 --9 --9 --10 --8 --9 --8 --8 --8 --10 --10 --11 --11 --12 --32 --88 --128 --128 --107 --59 --29 --20 --26 --39 --50 --57 --56 --53 --47 --42 --37 --34 --33 --33 --32 --32 --31 --30 --28 --27 --25 --25 --24 --24 --23 --23 -45 -127 -127 -127 -110 -48 -0 --28 --36 --31 --17 --4 -7 -11 -12 -7 -3 --3 --6 --9 --9 --10 --8 --8 --7 --8 --8 --9 --10 --11 --12 --12 --31 --87 --128 --128 --105 --57 --26 --19 --25 --38 --49 --56 --56 --52 --46 --41 --36 --34 --32 --32 --32 --32 --30 --30 --28 --27 --25 --25 --24 --24 --23 --23 --21 --22 --21 --21 --20 --20 --19 --19 --18 --19 --17 --18 --17 --17 --16 --17 --16 --17 --16 --16 --16 --16 --15 --16 --15 --16 --15 --16 --15 --16 --15 --15 -52 -127 -127 -127 -114 -51 -3 --26 --33 --28 --14 --1 -9 -13 -13 -9 -4 --2 --5 --7 --7 --8 --7 --8 --7 --7 --7 --9 --9 --10 --11 --11 --31 --87 --128 --128 --107 --59 --28 --20 --25 --38 --49 --56 --56 --53 --47 --42 --37 --35 --33 --33 --32 --32 --31 --30 --28 --27 --26 --25 --24 --24 --23 --23 -45 -127 -127 -127 -109 -48 -1 --28 --36 --31 --17 --4 -7 -11 -11 -7 -3 --3 --6 --9 --9 --9 --8 --8 --7 --8 --8 --9 --10 --11 --11 --12 --12 --13 --12 --12 --12 --13 --13 --13 --13 --14 --13 --14 --14 --14 --14 --14 --14 --15 --14 --15 --15 --16 --15 --16 --15 --15 --14 --15 --15 --16 --15 --15 --35 --90 --128 --128 --107 --59 --29 --21 --26 --40 --51 --57 --57 --54 --47 --42 --37 --35 --33 --33 --33 --33 --31 --30 --29 --28 --26 --25 --24 --25 --23 --23 --22 --22 --21 --22 --22 --22 --21 --21 --20 --20 --19 --19 --18 --18 --17 --18 --17 --17 --16 --17 --16 --17 --16 --17 --16 --16 --15 --16 --15 --16 --15 --16 -52 -127 -127 -127 -115 -53 -4 --24 --32 --27 --14 --1 -10 -14 -14 -10 -5 --1 --4 --7 --7 --7 --6 --7 --6 --7 --7 --8 --9 --10 --10 --11 --11 --11 --11 --12 --12 --13 --12 --13 --12 --13 --13 --14 --13 --14 --14 --15 --14 --14 --14 --15 --14 --15 --14 --15 --14 --15 --15 --16 --15 --15 --15 --16 --35 --90 --128 --128 --108 --59 --29 --21 --26 --40 --51 --58 --57 --54 --48 --43 --37 --35 --33 --33 --33 --33 --31 --30 --29 --28 --26 --26 --24 --24 --23 --23 --22 --22 --21 --22 --21 --22 --21 --21 --20 --20 --19 --19 --18 --19 --17 --18 --17 --18 --17 --17 --17 --17 --16 --17 --16 --16 --15 --16 --15 --16 --15 --16 -52 -127 -127 -127 -115 -53 -5 --24 --32 --27 --14 --1 -10 -13 -14 -9 -5 --1 --4 --7 --7 --8 --7 --7 --6 --7 --7 --9 --9 --10 --10 --12 --11 --12 --11 --12 --12 --13 +-21 +-21 +-19 +-20 +-19 +-20 +-18 +-18 +-17 +-18 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +52 +127 +127 +127 +115 +53 +5 +-24 +-32 +-27 +-14 +-1 +10 +14 +14 +10 +5 +-1 +-4 +-7 +-7 +-8 +-7 +-7 +-6 +-7 +-7 +-8 +-9 +-10 +-10 +-11 +-11 +-12 +-12 +-12 +-12 +-13 +-12 +-13 +-13 +-14 +-13 +-14 +-13 +-15 +-14 +-15 +-14 +-15 +-14 +-15 +-14 +-15 +-14 +-15 +-15 +-15 +-15 +-15 +-14 +-16 +-15 +-15 +-35 +-90 +-128 +-128 +-108 +-59 +-29 +-20 +-26 +-40 +-51 +-57 +-57 +-54 +-47 +-43 +-38 +-35 +-34 +-34 +-33 +-33 +-31 +-30 +-29 +-27 +-26 +-25 +-25 +-24 +-23 +-23 +-22 +-22 +-21 +-21 +-20 +-20 +-19 +-19 +-18 +-19 +-17 +-18 +-17 +-17 +-17 +-17 +-16 +-17 +-16 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +-15 +-15 +53 +127 +127 +127 +113 +50 +2 +-26 +-33 +-28 +-14 +-1 +9 +13 +13 +8 +4 +-1 +-5 +-7 +-7 +-8 +-7 +-8 +-7 +-7 +-7 +-8 +-9 +-10 +-10 +-11 +-31 +-87 +-128 +-128 +-105 +-57 +-26 +-18 +-23 +-37 +-49 +-56 +-56 +-52 +-46 +-41 +-36 +-34 +-32 +-32 +-32 +-32 +-30 +-29 +-28 +-28 +-25 +-25 +-23 +-24 +-22 +-22 +45 +127 +127 +127 +108 +46 +-2 +-30 +-37 +-32 +-18 +-5 +6 +10 +11 +7 +2 +-3 +-6 +-9 +-9 +-10 +-9 +-9 +-8 +-8 +-8 +-9 +-10 +-11 +-12 +-12 +-32 +-88 +-128 +-128 +-107 +-59 +-29 +-20 +-26 +-39 +-50 +-57 +-57 +-54 +-47 +-42 +-37 +-35 +-33 +-33 +-32 +-32 +-31 +-30 +-28 +-28 +-26 +-26 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +110 +48 +0 +-29 +-36 +-30 +-17 +-4 +7 +11 +11 +7 +2 +-3 +-6 +-9 +-9 +-9 +-8 +-8 +-7 +-8 +-8 +-9 +-10 +-11 +-11 +-12 +-12 +-12 +-12 +-12 +-12 +-13 +-13 +-14 +-13 +-14 +-14 +-14 +-14 +-15 +-14 +-15 +-14 +-15 +-14 +-15 +-14 +-15 +-15 +-15 +-15 +-15 +-14 +-15 +-15 +-16 +-15 +-16 +-35 +-91 +-128 +-128 +-108 +-59 +-29 +-20 +-26 +-40 +-51 +-58 +-57 +-54 +-47 +-43 +-38 +-35 +-33 +-33 +-32 +-32 +-31 +-30 +-29 +-28 +-26 +-26 +-24 +-24 +-23 +-23 +-21 +-22 +-21 +-21 +-21 +-22 +-21 +-21 +-20 +-20 +-19 +-19 +-18 +-19 +-18 +-18 +-17 +-17 +-16 +-17 +-16 +-17 +-16 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +52 +127 +127 +127 +115 +53 +5 +-24 +-32 +-27 +-14 +-1 +10 +14 +14 +10 +5 +-1 +-4 +-7 +-8 +-8 +-7 +-7 +-6 +-7 +-7 +-8 +-9 +-10 +-11 +-11 +-11 +-12 +-11 +-12 +-12 +-12 +-12 +-13 +-13 +-14 +-13 +-14 +-13 +-14 +-14 +-15 +-14 +-14 +-14 +-16 +-15 +-15 +-14 +-15 +-14 +-15 +-15 +-15 +-15 +-16 +-15 +-16 +-35 +-91 +-128 +-128 +-108 +-59 +-29 +-20 +-26 +-40 +-51 +-58 +-57 +-54 +-47 +-42 +-37 +-35 +-33 +-34 +-33 +-33 +-31 +-31 +-28 +-28 +-26 +-26 +-24 +-24 +-23 +-23 +-22 +-22 +-21 +-22 +-21 +-22 +-21 +-21 +-19 +-20 +-19 +-19 +-18 +-19 +-17 +-18 +-17 +-17 +-16 +-17 +-16 +-17 +-16 +-16 +-15 +-16 +-15 +-15 +-15 +-16 +-15 +-16 +52 +127 +127 +127 +115 +53 +5 +-24 +-32 +-27 +-13 +-1 +10 +13 +14 +10 +5 +-1 +-4 +-7 +-8 +-8 +-7 +-7 +-6 +-7 +-7 +-8 +-9 +-10 +-10 +-11 +-11 +-11 +-11 +-12 +-12 +-12 +-12 +-13 +-13 +-13 +-13 +-14 +-14 +-14 +-14 +-15 +-14 +-15 +-14 +-14 +-14 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-15 +-16 +-35 +-90 +-128 +-128 +-109 +-61 +-31 +-23 +-28 +-41 +-51 +-58 +-58 +-55 +-48 +-43 +-38 +-36 +-34 +-34 +-33 +-33 +-31 +-31 +-29 +-28 +-26 +-26 +-24 +-25 +-23 +-23 +45 +127 +127 +127 +109 +47 +-1 +-28 +-36 +-30 +-17 +-4 +6 +11 +11 +7 +2 +-3 +-6 +-9 +-9 +-9 +-8 +-8 +-7 +-8 +-8 +-10 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-105 +-57 +-26 +-19 +-24 +-38 +-49 +-56 +-56 +-53 +-46 +-41 +-36 +-34 +-32 +-33 +-31 +-32 +-30 +-29 +-28 +-27 +-25 +-25 +-24 +-24 +-23 +-23 +-21 +-21 +-21 +-22 +-21 +-22 +-21 +-21 +-20 +-20 +-18 +-19 +-17 +-19 +-17 +-18 +-17 +-17 +-16 +-17 +-16 +-17 +-16 +-16 +-15 +-16 +-15 +-15 +-15 +-16 +-15 +-16 +52 +127 +127 +127 +115 +53 +5 +-24 +-32 +-27 +-14 +-1 +10 +13 +14 +9 +4 +-1 +-4 +-7 +-7 +-7 +-6 +-7 +-6 +-7 +-7 +-9 +-9 +-10 +-10 +-12 +-11 +-12 +-12 +-12 +-12 +-13 +-12 +-13 +-13 +-14 +-13 +-14 +-13 +-14 +-14 +-15 +-14 +-15 +-14 +-15 +-14 +-15 +-14 +-15 +-14 +-15 +-15 +-16 +-15 +-15 +-15 +-16 +-35 +-90 +-128 +-128 +-108 +-59 +-29 +-20 +-26 +-39 +-50 +-57 +-58 +-54 +-48 +-42 +-37 +-35 +-33 +-33 +-32 +-33 +-31 +-31 +-29 +-28 +-26 +-26 +-24 +-23 +-22 +-22 +-22 +-22 +-21 +-22 +-21 +-21 +-21 +-21 +-20 +-20 +-19 +-19 +-18 +-18 +-17 +-18 +-17 +-17 +-17 +-17 +-16 +-17 +-16 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +-15 +-15 +52 +127 +127 +127 +115 +53 +5 +-24 +-32 +-27 +-14 +-1 +10 +14 +14 +10 +5 +-1 +-4 +-7 +-7 +-8 +-7 +-7 +-6 +-7 +-7 +-9 +-9 +-10 +-10 +-11 +-11 +-11 +-11 +-12 +-12 +-13 +-12 +-13 +-12 +-13 +-13 +-14 +-13 +-14 +-13 +-14 +-13 +-14 +-14 +-15 +-14 +-15 +-15 +-15 +-15 +-15 +-14 +-15 +-14 +-15 +-15 +-15 +-35 +-90 +-128 +-128 +-109 +-61 +-30 +-22 +-28 +-40 +-51 +-58 +-58 +-54 +-48 +-43 +-38 +-36 +-34 +-34 +-33 +-33 +-32 +-31 +-29 +-28 +-26 +-26 +-24 +-24 +-24 +-23 +45 +127 +127 +127 +110 +47 +-1 +-30 +-36 +-30 +-17 +-4 +7 +11 +11 +7 +2 +-3 +-6 +-9 +-9 +-9 +-8 +-8 +-7 +-8 +-8 +-10 +-10 +-11 +-11 +-12 +-31 +-87 +-128 +-128 +-107 +-59 +-29 +-20 +-26 +-39 +-49 +-57 +-56 +-53 +-47 +-42 +-37 +-35 +-33 +-33 +-32 +-32 +-31 +-30 +-28 +-28 +-26 +-26 +-24 +-24 +-23 +-23 +44 +127 +127 +127 +109 +47 +0 +-29 +-36 +-31 +-17 +-4 +7 +11 +11 +7 +2 +-3 +-7 +-9 +-9 +-9 +-8 +-8 +-8 +-9 +-9 +-10 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-107 +-59 +-29 +-20 +-26 +-39 +-50 +-57 +-57 +-53 +-47 +-42 +-37 +-35 +-33 +-33 +-32 +-32 +-30 +-30 +-28 +-27 +-26 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +109 +47 +0 +-28 +-36 +-31 +-17 +-4 +7 +11 +11 +7 +2 +-3 +-6 +-9 +-9 +-9 +-8 +-8 +-8 +-8 +-9 +-10 +-10 +-11 +-11 +-12 +-31 +-87 +-128 +-128 +-107 +-59 +-29 +-20 +-26 +-39 +-49 +-56 +-56 +-53 +-47 +-42 +-37 +-35 +-33 +-33 +-32 +-32 +-31 +-30 +-28 +-27 +-26 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +110 +48 +0 +-29 +-36 +-31 +-17 +-4 +7 +11 +12 +8 +3 +-3 +-6 +-9 +-9 +-10 +-8 +-8 +-7 +-8 +-8 +-10 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-107 +-59 +-29 +-20 +-26 +-39 +-50 +-57 +-57 +-54 +-47 +-42 +-37 +-35 +-33 +-33 +-32 +-33 +-31 +-30 +-28 +-28 +-26 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +110 +48 +0 +-28 +-36 +-31 +-17 +-4 +7 +11 +11 +7 +2 +-3 +-6 +-9 +-9 +-9 +-8 +-8 +-8 +-8 +-8 +-10 +-10 +-11 +-11 +-12 +-32 +-87 +-128 +-128 +-107 +-59 +-28 +-20 +-26 +-39 +-50 +-57 +-57 +-53 +-47 +-42 +-37 +-35 +-33 +-33 +-32 +-32 +-30 +-30 +-28 +-27 +-25 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +110 +48 +0 +-28 +-36 +-31 +-17 +-4 +7 +11 +11 +7 +3 +-3 +-6 +-9 +-9 +-9 +-8 +-8 +-8 +-8 +-8 +-9 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-107 +-59 +-29 +-20 +-26 +-39 +-50 +-57 +-57 +-53 +-47 +-42 +-37 +-35 +-33 +-33 +-32 +-32 +-30 +-29 +-28 +-28 +-26 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +109 +47 +0 +-29 +-36 +-31 +-17 +-4 +7 +11 +11 +7 +2 +-3 +-6 +-9 +-9 +-9 +-8 +-8 +-7 +-8 +-8 +-10 +-10 +-11 +-11 +-12 +-31 +-87 +-128 +-128 +-107 +-59 +-29 +-20 +-25 +-39 +-50 +-57 +-57 +-53 +-47 +-42 +-37 +-35 +-33 +-33 +-32 +-32 +-31 +-30 +-28 +-28 +-26 +-26 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +110 +48 +0 +-28 +-35 +-31 +-17 +-4 +7 +11 +11 +7 +3 +-3 +-6 +-9 +-9 +-9 +-8 +-9 +-8 +-8 +-8 +-9 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-105 +-57 +-27 +-18 +-24 +-38 +-49 +-56 +-56 +-52 +-46 +-41 +-36 +-34 +-32 +-33 +-32 +-32 +-30 +-30 +-28 +-27 +-25 +-26 +-24 +-23 +-22 +-22 +-21 +-21 +-20 +-20 +-19 +-20 +-19 +-19 +-18 +-18 +-17 +-17 +-17 +-17 +-17 +-17 +-16 +-17 +-16 +-16 +-16 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +-15 +-15 +52 +127 +127 +127 +114 +51 +3 +-26 +-34 +-28 +-14 +-1 +9 +13 +13 +8 +4 +-2 +-5 +-7 +-8 +-8 +-7 +-7 +-7 +-7 +-8 +-9 +-9 +-10 +-10 +-11 +-31 +-87 +-128 +-128 +-105 +-56 +-26 +-18 +-24 +-37 +-48 +-55 +-56 +-52 +-46 +-41 +-36 +-34 +-32 +-32 +-31 +-31 +-30 +-29 +-28 +-27 +-25 +-25 +-24 +-24 +-22 +-23 +45 +127 +127 +127 +108 +46 +-2 +-30 +-37 +-32 +-18 +-5 +6 +10 +11 +7 +2 +-4 +-6 +-9 +-9 +-10 +-9 +-9 +-9 +-9 +-9 +-10 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-107 +-59 +-29 +-20 +-26 +-39 +-50 +-57 +-57 +-54 +-47 +-42 +-37 +-35 +-33 +-33 +-32 +-33 +-31 +-30 +-29 +-27 +-26 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +110 +48 +0 +-28 +-36 +-31 +-17 +-4 +7 +11 +12 +7 +3 +-3 +-6 +-9 +-9 +-10 +-8 +-9 +-7 +-8 +-8 +-10 +-10 +-11 +-11 +-12 +-12 +-12 +-12 +-12 +-12 +-13 +-13 +-14 +-13 +-14 +-13 +-14 +-13 +-14 +-13 +-15 +-14 +-15 +-14 +-15 +-14 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-15 +-16 +-15 +-16 +-35 +-91 +-128 +-128 +-109 +-61 +-31 +-22 +-28 +-40 +-51 +-58 +-58 +-54 +-48 +-43 +-38 +-36 +-34 +-34 +-33 +-34 +-31 +-30 +-29 +-28 +-26 +-26 +-25 +-25 +-23 +-23 +45 +127 +127 +127 +109 +47 +0 +-29 +-36 +-31 +-17 +-4 +6 +11 +11 +7 +2 +-3 +-6 +-9 +-9 +-9 +-8 +-8 +-7 +-8 +-8 +-10 +-10 +-11 +-11 +-12 +-32 +-87 +-128 +-128 +-107 +-59 +-29 +-20 +-26 +-39 +-50 +-57 +-57 +-53 +-47 +-42 +-37 +-35 +-33 +-34 +-32 +-33 +-31 +-30 +-28 +-27 +-26 +-26 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +110 +48 +0 +-29 +-36 +-31 +-17 +-4 +7 +11 +12 +7 +3 +-3 +-6 +-9 +-9 +-9 +-8 +-8 +-7 +-8 +-8 +-10 +-10 +-11 +-11 +-12 +-32 +-87 +-128 +-128 +-107 +-59 +-29 +-20 +-25 +-39 +-50 +-57 +-57 +-53 +-47 +-42 +-37 +-35 +-34 +-33 +-32 +-32 +-31 +-30 +-28 +-27 +-26 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +109 +48 +0 +-29 +-36 +-31 +-17 +-4 +7 +11 +11 +7 +3 +-3 +-6 +-9 +-9 +-9 +-8 +-8 +-7 +-8 +-8 +-9 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-107 +-59 +-28 +-20 +-26 +-39 +-50 +-57 +-57 +-54 +-47 +-42 +-37 +-35 +-33 +-33 +-32 +-33 +-31 +-30 +-28 +-27 +-25 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +110 +48 +0 +-28 +-36 +-31 +-17 +-4 +7 +11 +12 +7 +2 +-3 +-6 +-8 +-9 +-10 +-9 +-9 +-8 +-8 +-8 +-9 +-10 +-10 +-11 +-12 +-32 +-88 +-128 +-128 +-107 +-59 +-29 +-20 +-26 +-39 +-50 +-57 +-57 +-53 +-47 +-43 +-37 +-34 +-33 +-33 +-32 +-32 +-31 +-30 +-28 +-27 +-26 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +109 +48 +0 +-28 +-36 +-30 +-17 +-4 +7 +11 +11 +7 +2 +-3 +-6 +-8 +-9 +-9 +-8 +-8 +-8 +-8 +-8 +-9 +-10 +-11 +-11 +-12 +-32 +-87 +-128 +-128 +-105 +-57 +-27 +-18 +-25 +-38 +-49 +-56 +-56 +-53 +-46 +-41 +-37 +-34 +-33 +-33 +-32 +-32 +-31 +-30 +-28 +-27 +-26 +-25 +-24 +-24 +-23 +-23 +-22 +-21 +-21 +-21 +-20 +-20 +-19 +-19 +-18 +-18 +-17 +-18 +-17 +-17 +-17 +-17 +-16 +-17 +-16 +-16 +-16 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +-15 +-15 +-14 +-15 +52 +127 +127 +127 +114 +51 +3 +-26 +-33 +-28 +-14 +-1 +9 +13 +13 +9 +4 +-2 +-5 +-8 +-8 +-8 +-7 +-8 +-7 +-8 +-7 +-9 +-9 +-10 +-10 +-11 +-31 +-87 +-128 +-128 +-105 +-57 +-26 +-18 +-24 +-38 +-49 +-56 +-56 +-53 +-46 +-41 +-36 +-34 +-32 +-32 +-31 +-31 +-30 +-29 +-28 +-27 +-26 +-25 +-24 +-24 +-22 +-22 +46 +127 +127 +127 +108 +46 +-2 +-30 +-37 +-31 +-17 +-4 +6 +10 +10 +6 +2 +-3 +-6 +-9 +-9 +-9 +-8 +-8 +-7 +-9 +-8 +-10 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-106 +-57 +-27 +-18 +-25 +-38 +-49 +-56 +-56 +-53 +-47 +-41 +-36 +-34 +-33 +-33 +-32 +-32 +-30 +-30 +-28 +-27 +-26 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +108 +46 +-2 +-30 +-37 +-32 +-18 +-4 +6 +11 +10 +7 +2 +-3 +-6 +-9 +-9 +-9 +-8 +-9 +-8 +-9 +-9 +-10 +-10 +-11 +-11 +-11 +-31 +-87 +-128 +-128 +-105 +-57 +-26 +-18 +-24 +-38 +-49 +-56 +-56 +-53 +-46 +-41 +-36 +-34 +-32 +-33 +-32 +-32 +-30 +-30 +-28 +-27 +-25 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +108 +46 +-2 +-30 +-37 +-32 +-17 +-5 +6 +10 +11 +6 +2 +-4 +-7 +-9 +-10 +-10 +-9 +-9 +-8 +-8 +-9 +-10 +-10 +-11 +-12 +-12 +-32 +-88 +-128 +-128 +-106 +-57 +-26 +-18 +-24 +-38 +-49 +-56 +-56 +-53 +-46 +-41 +-36 +-34 +-33 +-33 +-32 +-32 +-30 +-30 +-28 +-27 +-25 +-25 +-24 +-24 +-22 +-22 +45 +127 +127 +127 +108 +46 +-2 +-30 +-37 +-31 +-17 +-5 +6 +10 +10 +6 +2 +-4 +-6 +-9 +-9 +-10 +-9 +-9 +-8 +-9 +-9 +-10 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-106 +-57 +-27 +-18 +-25 +-38 +-49 +-56 +-56 +-53 +-47 +-41 +-36 +-34 +-33 +-33 +-32 +-32 +-30 +-29 +-28 +-27 +-26 +-25 +-24 +-23 +-22 +-22 +45 +127 +127 +127 +108 +46 +-2 +-30 +-37 +-32 +-18 +-5 +6 +10 +11 +7 +3 +-3 +-7 +-9 +-10 +-10 +-9 +-9 +-7 +-9 +-9 +-10 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-106 +-57 +-27 +-18 +-24 +-37 +-49 +-56 +-56 +-53 +-46 +-41 +-36 +-34 +-33 +-33 +-32 +-32 +-30 +-30 +-28 +-27 +-26 +-25 +-24 +-24 +-22 +-23 +46 +127 +127 +127 +108 +46 +-1 +-30 +-37 +-32 +-18 +-5 +6 +10 +10 +7 +2 +-3 +-6 +-9 +-9 +-10 +-9 +-9 +-8 +-9 +-8 +-10 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-106 +-57 +-27 +-19 +-24 +-38 +-49 +-56 +-56 +-53 +-46 +-42 +-36 +-34 +-33 +-33 +-32 +-32 +-30 +-30 +-28 +-28 +-26 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +108 +46 +-2 +-30 +-37 +-32 +-18 +-5 +6 +11 +11 +7 +2 +-3 +-6 +-9 +-9 +-10 +-9 +-8 +-8 +-8 +-8 +-9 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-106 +-57 +-26 +-18 +-25 +-38 +-49 +-56 +-56 +-53 +-47 +-41 +-36 +-34 +-33 +-33 +-32 +-32 +-30 +-30 +-28 +-27 +-25 +-25 +-24 +-24 +-23 +-23 +44 +127 +127 +127 +108 +46 +-2 +-30 +-37 +-32 +-18 +-5 +6 +11 +11 +7 +2 +-3 +-6 +-9 +-10 +-10 +-9 +-9 +-8 +-9 +-9 +-10 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-106 +-57 +-26 +-18 +-24 +-38 +-49 +-56 +-56 +-53 +-47 +-41 +-36 +-34 +-33 +-32 +-32 +-32 +-30 +-29 +-28 +-27 +-26 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +108 +45 +-2 +-30 +-37 +-32 +-18 +-5 +6 +10 +10 +7 +2 +-3 +-6 +-9 +-10 +-10 +-9 +-9 +-8 +-8 +-8 +-9 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-107 +-59 +-29 +-20 +-25 +-39 +-49 +-57 +-56 +-53 +-47 +-42 +-37 +-35 +-33 +-33 +-32 +-32 +-31 +-30 +-28 +-27 +-26 +-25 +-24 +-25 +-23 +-23 +45 +127 +127 +127 +109 +48 +0 +-29 +-36 +-31 +-17 +-4 +7 +11 +11 +7 +2 +-3 +-6 +-8 +-9 +-9 +-8 +-8 +-7 +-8 +-8 +-9 +-10 +-11 +-11 +-12 +-11 +-12 +-12 +-12 +-12 +-13 +-12 +-13 +-13 +-14 +-13 +-14 +-14 +-15 +-14 +-15 +-14 +-15 +-14 +-15 +-14 +-16 +-14 +-15 +-14 +-15 +-15 +-15 +-15 +-16 +-15 +-15 +-35 +-90 +-128 +-128 +-109 +-61 +-31 +-23 +-28 +-41 +-51 +-58 +-58 +-55 +-48 +-43 +-38 +-36 +-34 +-34 +-33 +-33 +-31 +-30 +-28 +-28 +-26 +-26 +-25 +-24 +-24 +-23 +45 +127 +127 +127 +109 +48 +-1 +-29 +-36 +-31 +-17 +-4 +7 +11 +11 +7 +2 +-3 +-6 +-9 +-9 +-9 +-8 +-8 +-7 +-8 +-8 +-10 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-105 +-57 +-26 +-18 +-24 +-38 +-48 +-56 +-56 +-53 +-46 +-41 +-36 +-34 +-32 +-32 +-32 +-32 +-30 +-30 +-28 +-27 +-25 +-25 +-24 +-24 +-23 +-23 +-21 +-21 +-21 +-22 +-21 +-21 +-20 +-21 +-19 +-19 +-18 +-19 +-17 +-18 +-17 +-18 +-17 +-17 +-16 +-17 +-16 +-17 +-16 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +52 +127 +127 +127 +115 +53 +4 +-24 +-32 +-27 +-14 +-1 +9 +13 +14 +9 +4 +-1 +-4 +-7 +-7 +-8 +-7 +-7 +-6 +-7 +-7 +-8 +-9 +-10 +-10 +-11 +-11 +-12 +-11 +-12 +-12 +-13 +-12 +-13 +-13 +-14 +-13 +-14 +-13 +-14 +-14 +-14 +-14 +-15 +-14 +-15 +-15 +-15 +-15 +-16 +-15 +-15 +-14 +-15 +-15 +-16 +-15 +-16 +-36 +-91 +-128 +-128 +-109 +-61 +-31 +-22 +-28 +-41 +-52 +-58 +-58 +-54 +-48 +-43 +-38 +-36 +-34 +-34 +-33 +-33 +-31 +-31 +-29 +-28 +-26 +-25 +-25 +-25 +-24 +-23 +44 +127 +127 +127 +110 +47 +0 +-29 +-36 +-30 +-17 +-4 +6 +11 +11 +7 +2 +-3 +-6 +-8 +-8 +-9 +-8 +-8 +-7 +-8 +-8 +-9 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-107 +-59 +-29 +-20 +-26 +-39 +-50 +-56 +-57 +-53 +-47 +-42 +-37 +-35 +-33 +-33 +-32 +-32 +-31 +-30 +-28 +-28 +-26 +-26 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +110 +48 +0 +-29 +-36 +-31 +-17 +-4 +7 +11 +11 +7 +2 +-3 +-6 +-8 +-10 +-9 +-8 +-8 +-8 +-8 +-8 +-10 +-10 +-11 +-11 +-11 +-31 +-87 +-128 +-128 +-105 +-57 +-26 +-18 +-24 +-38 +-49 +-56 +-56 +-53 +-47 +-41 +-36 +-34 +-33 +-33 +-32 +-32 +-30 +-29 +-28 +-27 +-25 +-25 +-24 +-24 +-22 +-23 +-21 +-22 +-21 +-21 +-20 +-20 +-19 +-19 +-18 +-18 +-17 +-18 +-17 +-18 +-17 +-17 +-16 +-17 +-16 +-16 +-16 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +-15 +-15 +-14 +-15 +52 +127 +127 +127 +114 +51 +3 +-26 +-33 +-28 +-14 +-2 +9 +13 +13 +9 +4 +-2 +-5 +-7 +-7 +-8 +-7 +-7 +-7 +-8 +-8 +-9 +-9 +-10 +-10 +-12 +-31 +-87 +-128 +-128 +-107 +-59 +-29 +-20 +-26 +-39 +-49 +-57 +-56 +-53 +-47 +-42 +-37 +-35 +-33 +-33 +-32 +-32 +-31 +-30 +-28 +-28 +-26 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +110 +48 +0 +-28 +-36 +-31 +-17 +-4 +6 +11 +11 +7 +3 +-3 +-6 +-9 +-9 +-10 +-9 +-8 +-8 +-8 +-8 +-9 +-9 +-11 +-11 +-12 +-12 +-12 +-12 +-13 +-12 +-13 +-12 +-13 +-13 +-14 +-14 +-14 +-14 +-14 +-14 +-15 +-14 +-15 +-14 +-15 +-15 +-15 +-14 +-15 +-14 +-15 +-15 +-16 +-15 +-16 +-15 +-16 +-35 +-91 +-128 +-128 +-108 +-60 +-29 +-21 +-26 +-40 +-50 +-57 +-57 +-54 +-47 +-42 +-37 +-35 +-33 +-33 +-32 +-32 +-31 +-30 +-29 +-28 +-26 +-25 +-24 +-24 +-23 +-23 +-21 +-21 +-21 +-22 +-21 +-22 +-21 +-21 +-20 +-20 +-19 +-19 +-18 +-18 +-19 +-18 +-17 +-17 +-16 +-17 +-16 +-17 +-16 +-17 +-15 +-16 +-15 +-15 +-15 +-16 +-15 +-16 +51 +127 +127 +127 +115 +53 +4 +-25 +-32 +-27 +-13 +-1 +10 +13 +14 +9 +4 +-1 +-4 +-7 +-7 +-8 +-7 +-7 +-6 +-7 +-7 +-8 +-8 +-10 +-10 +-11 +-11 +-12 +-11 +-12 +-12 +-13 +-12 +-13 +-13 +-14 +-13 +-14 +-13 +-14 +-13 +-14 +-14 +-15 +-14 +-15 +-14 +-15 +-15 +-15 +-14 +-15 +-14 +-15 +-15 +-16 +-15 +-15 +-35 +-90 +-128 +-128 +-108 +-59 +-29 +-20 +-26 +-39 +-51 +-58 +-58 +-54 +-47 +-42 +-37 +-35 +-33 +-34 +-33 +-33 +-31 +-31 +-29 +-28 +-26 +-25 +-24 +-24 +-23 +-23 +-22 +-22 +-21 +-22 +-21 +-22 +-21 +-21 +-19 +-20 +-18 +-20 +-18 +-19 +-18 +-18 +-17 +-17 +-16 +-17 +-17 +-17 +-16 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +52 +127 +127 +127 +115 +53 +4 +-24 +-32 +-27 +-14 +-1 +10 +14 +14 +10 +5 +-1 +-4 +-7 +-7 +-8 +-7 +-7 +-6 +-7 +-7 +-8 +-8 +-10 +-10 +-11 +-11 +-12 +-11 +-12 +-12 +-13 +-12 +-13 +-13 +-13 +-13 +-14 +-13 +-14 +-14 +-14 +-14 +-15 +-14 +-15 +-15 +-15 +-15 +-15 +-14 +-15 +-14 +-15 +-15 +-16 +-15 +-16 +-35 +-91 +-128 +-128 +-109 +-61 +-31 +-22 +-28 +-41 +-52 +-58 +-58 +-55 +-48 +-43 +-38 +-36 +-34 +-34 +-32 +-33 +-31 +-31 +-29 +-28 +-26 +-26 +-25 +-24 +-23 +-23 +45 +127 +127 +127 +110 +48 +0 +-29 +-37 +-31 +-17 +-4 +7 +11 +11 +7 +2 +-3 +-6 +-9 +-9 +-9 +-8 +-8 +-7 +-8 +-8 +-10 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-107 +-59 +-29 +-20 +-25 +-38 +-49 +-56 +-56 +-53 +-47 +-42 +-37 +-34 +-33 +-33 +-32 +-32 +-31 +-30 +-29 +-28 +-26 +-26 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +110 +48 +0 +-29 +-36 +-31 +-17 +-4 +7 +11 +12 +7 +3 +-3 +-6 +-9 +-9 +-10 +-9 +-9 +-8 +-8 +-8 +-9 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-105 +-57 +-26 +-18 +-24 +-37 +-49 +-56 +-56 +-53 +-46 +-41 +-36 +-34 +-32 +-33 +-32 +-32 +-30 +-30 +-28 +-27 +-25 +-25 +-24 +-24 +-23 +-23 +-22 +-22 +-21 +-21 +-20 +-21 +-19 +-19 +-18 +-19 +-18 +-18 +-17 +-17 +-17 +-17 +-16 +-17 +-16 +-16 +-16 +-16 +-15 +-16 +-15 +-15 +-15 +-15 +-15 +-16 +-15 +-15 +52 +127 +127 +127 +114 +51 +3 +-26 +-33 +-28 +-14 +-1 +9 +13 +13 +9 +4 +-2 +-5 +-7 +-8 +-8 +-8 +-7 +-7 +-7 +-7 +-9 +-9 +-10 +-10 +-11 +-31 +-87 +-128 +-128 +-107 +-58 +-28 +-20 +-25 +-38 +-49 +-56 +-56 +-53 +-47 +-42 +-37 +-35 +-33 +-33 +-32 +-32 +-30 +-30 +-28 +-27 +-25 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +110 +48 +0 +-29 +-36 +-31 +-17 +-4 +7 +11 +11 +7 +3 +-3 +-6 +-9 +-9 +-10 +-8 +-8 +-7 +-8 +-8 +-9 +-10 +-11 +-11 +-12 +-12 +-12 +-12 +-13 +-12 +-13 +-13 +-14 +-13 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-15 +-15 +-15 +-14 +-15 +-15 +-15 +-15 +-15 +-14 +-15 +-15 +-16 +-15 +-16 +-35 +-91 +-128 +-128 +-109 +-61 +-31 +-23 +-28 +-41 +-51 +-58 +-58 +-55 +-48 +-43 +-38 +-36 +-34 +-34 +-33 +-33 +-31 +-31 +-29 +-28 +-26 +-25 +-24 +-24 +-23 +-23 +44 +127 +127 +127 +110 +48 +0 +-29 +-36 +-31 +-17 +-4 +7 +11 +11 +7 +2 +-3 +-6 +-9 +-9 +-9 +-8 +-8 +-8 +-9 +-9 +-10 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-105 +-57 +-27 +-19 +-24 +-38 +-49 +-56 +-56 +-53 +-46 +-42 +-36 +-34 +-32 +-33 +-32 +-32 +-30 +-30 +-28 +-27 +-25 +-25 +-24 +-24 +-23 +-24 +-22 +-21 +-20 +-21 +-21 +-22 +-21 +-21 +-20 +-20 +-19 +-19 +-18 +-18 +-17 +-18 +-17 +-17 +-17 +-17 +-16 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +-15 +-15 +52 +127 +127 +127 +115 +53 +5 +-24 +-32 +-27 +-13 +-1 +10 +14 +14 +10 +5 +-1 +-4 +-7 +-7 +-8 +-7 +-7 +-6 +-7 +-7 +-8 +-9 +-10 +-10 +-11 +-11 +-12 +-11 +-12 +-12 +-13 +-12 +-13 +-13 +-14 +-13 +-14 +-13 +-14 +-13 +-14 +-14 +-15 +-14 +-15 +-15 +-15 +-15 +-15 +-14 +-15 +-14 +-15 +-15 +-16 +-15 +-15 +-35 +-90 +-128 +-128 +-108 +-59 +-29 +-21 +-26 +-39 +-50 +-57 +-57 +-54 +-47 +-43 +-37 +-35 +-33 +-34 +-33 +-33 +-31 +-30 +-28 +-27 +-26 +-25 +-25 +-24 +-23 +-23 +-22 +-21 +-21 +-22 +-21 +-22 +-21 +-21 +-20 +-20 +-19 +-19 +-18 +-19 +-17 +-18 +-17 +-18 +-17 +-17 +-16 +-17 +-16 +-17 +-16 +-17 +-16 +-16 +-15 +-16 +-15 +-16 +52 +127 +127 +127 +115 +53 +5 +-24 +-32 +-27 +-14 +-1 +10 +14 +14 +10 +5 +-1 +-4 +-7 +-7 +-8 +-7 +-7 +-6 +-7 +-8 +-9 +-9 +-10 +-10 +-11 +-11 +-11 +-11 +-12 +-12 +-13 +-12 +-13 +-13 +-13 +-13 +-14 +-13 +-14 +-14 +-15 +-14 +-14 +-13 +-14 +-14 +-15 +-14 +-15 +-15 +-15 +-15 +-15 +-14 +-16 +-15 +-16 +-35 +-90 +-128 +-128 +-108 +-59 +-29 +-20 +-26 +-39 +-51 +-57 +-57 +-54 +-47 +-42 +-37 +-35 +-33 +-34 +-32 +-33 +-31 +-30 +-29 +-28 +-26 +-25 +-24 +-24 +-23 +-23 +-22 +-22 +-21 +-21 +-20 +-21 +-19 +-19 +-18 +-19 +-18 +-18 +-17 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +-15 +-15 +52 +127 +127 +127 +114 +51 +3 +-25 +-33 +-28 +-15 +-2 +9 +13 +13 +9 +4 +-1 +-5 +-7 +-8 +-8 +-7 +-7 +-7 +-7 +-8 +-8 +-9 +-10 +-10 +-11 +-31 +-87 +-128 +-128 +-105 +-57 +-26 +-18 +-24 +-38 +-49 +-56 +-56 +-52 +-46 +-41 +-36 +-34 +-33 +-32 +-31 +-31 +-30 +-29 +-28 +-27 +-25 +-25 +-24 +-24 +-22 +-23 +45 +127 +127 +127 +108 +46 +-2 +-30 +-37 +-31 +-17 +-5 +6 +10 +11 +7 +2 +-4 +-6 +-9 +-9 +-9 +-9 +-9 +-8 +-9 +-9 +-10 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-107 +-59 +-29 +-20 +-26 +-39 +-50 +-57 +-57 +-53 +-47 +-42 +-37 +-35 +-33 +-33 +-32 +-32 +-31 +-30 +-28 +-27 +-26 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +109 +48 +0 +-29 +-36 +-31 +-17 +-4 +7 +11 +11 +7 +3 +-3 +-6 +-9 +-9 +-9 +-8 +-8 +-7 +-8 +-8 +-9 +-10 +-11 +-11 +-12 +-12 +-12 +-12 +-13 +-12 +-13 +-13 +-14 +-13 +-14 +-14 +-15 +-14 +-15 +-14 +-15 +-14 +-15 +-15 +-15 +-15 +-16 +-15 +-15 +-15 +-15 +-14 +-15 +-14 +-15 +-15 +-16 +-35 +-91 +-128 +-128 +-108 +-59 +-29 +-20 +-26 +-40 +-51 +-58 +-58 +-54 +-47 +-42 +-37 +-35 +-34 +-34 +-33 +-32 +-31 +-30 +-28 +-28 +-26 +-26 +-24 +-24 +-23 +-22 +-21 +-21 +-21 +-22 +-21 +-22 +-21 +-21 +-20 +-20 +-19 +-19 +-18 +-18 +-17 +-18 +-17 +-17 +-16 +-17 +-16 +-16 +-16 +-17 +-16 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +52 +127 +127 +127 +115 +53 +4 +-24 +-32 +-27 +-13 +-1 +10 +14 +14 +10 +5 +-1 +-4 +-7 +-8 +-8 +-7 +-7 +-6 +-7 +-7 +-8 +-9 +-10 +-10 +-11 +-11 +-11 +-11 +-13 +-12 +-13 +-12 +-13 +-13 +-13 +-13 +-13 +-13 +-14 +-14 +-14 +-14 +-15 +-14 +-15 +-14 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-35 +-90 +-128 +-128 +-108 +-59 +-29 +-20 +-26 +-40 +-51 +-58 +-57 +-54 +-48 +-43 +-37 +-35 +-33 +-33 +-32 +-33 +-31 +-31 +-29 +-28 +-26 +-26 +-24 +-24 +-23 +-23 +-22 +-22 +-21 +-21 +-21 +-22 +-21 +-21 +-20 +-20 +-19 +-19 +-18 +-19 +-17 +-18 +-17 +-17 +-16 +-17 +-16 +-17 +-15 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +52 +127 +127 +127 +115 +53 +5 +-24 +-32 +-27 +-13 +-1 +10 +13 +14 +10 +5 +-1 +-4 +-7 +-7 +-8 +-7 +-7 +-6 +-7 +-7 +-8 +-8 +-10 +-10 +-11 +-11 +-12 +-12 +-12 +-12 +-13 +-12 +-13 +-13 +-14 +-13 +-14 +-13 +-14 +-14 +-15 +-14 +-14 +-14 +-15 +-14 +-15 +-15 +-15 +-15 +-16 +-15 +-15 +-14 +-15 +-15 +-15 +-35 +-90 +-128 +-128 +-109 +-61 +-31 +-22 +-27 +-40 +-51 +-58 +-58 +-56 +-49 +-43 +-38 +-35 +-34 +-34 +-33 +-33 +-32 +-31 +-29 +-28 +-26 +-26 +-24 +-25 +-23 +-23 +45 +127 +127 +127 +109 +47 +0 +-29 +-36 +-31 +-17 +-4 +7 +11 +11 +7 +3 +-3 +-6 +-8 +-9 +-10 +-9 +-9 +-8 +-8 +-8 +-9 +-10 +-11 +-10 +-11 +-32 +-88 +-128 +-128 +-105 +-57 +-26 +-18 +-24 +-38 +-49 +-56 +-56 +-52 +-46 +-41 +-36 +-34 +-32 +-32 +-32 +-32 +-30 +-30 +-28 +-27 +-25 +-25 +-24 +-24 +-23 +-23 +-21 +-21 +-21 +-21 +-21 +-21 +-21 +-21 +-20 +-20 +-18 +-19 +-18 +-18 +-17 +-18 +-17 +-17 +-16 +-17 +-16 +-17 +-16 +-17 +-15 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +52 +127 +127 +127 +115 +53 +4 +-24 +-32 +-27 +-15 +-1 +10 +14 +14 +9 +4 +-1 +-5 +-7 +-7 +-8 +-6 +-7 +-6 +-7 +-7 +-9 +-9 +-10 +-10 +-11 +-11 +-12 +-11 +-12 +-12 +-13 +-13 +-13 +-13 +-13 +-13 +-14 +-13 +-14 +-13 +-15 +-14 +-15 +-14 +-15 +-15 +-15 +-14 +-15 +-14 +-15 +-15 +-16 +-15 +-16 +-15 +-16 +-35 +-90 +-128 +-128 +-108 +-60 +-29 +-21 +-26 +-39 +-51 +-57 +-57 +-54 +-47 +-42 +-38 +-35 +-33 +-33 +-32 +-32 +-31 +-30 +-28 +-28 +-26 +-26 +-24 +-25 +-23 +-23 +-21 +-22 +-21 +-22 +-22 +-22 +-21 +-21 +-20 +-19 +-18 +-19 +-18 +-19 +-18 +-18 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-15 +-16 +-16 +-16 +-15 +-16 +-15 +-15 +52 +127 +127 +127 +115 +52 +4 +-25 +-32 +-27 +-13 +-1 +10 +14 +14 +10 +5 +-1 +-4 +-7 +-7 +-8 +-7 +-7 +-6 +-7 +-7 +-9 +-9 +-10 +-10 +-11 +-11 +-12 +-11 +-12 +-12 +-13 +-12 +-13 +-13 +-14 +-13 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-15 +-15 +-15 +-14 +-15 +-14 +-15 +-14 +-15 +-15 +-16 +-15 +-16 +-35 +-91 +-128 +-128 +-109 +-61 +-31 +-22 +-28 +-41 +-51 +-59 +-58 +-55 +-48 +-43 +-38 +-36 +-34 +-34 +-33 +-33 +-32 +-31 +-29 +-28 +-26 +-26 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +109 +48 +0 +-28 +-36 +-31 +-17 +-4 +7 +11 +12 +7 +2 +-3 +-6 +-9 +-9 +-9 +-8 +-8 +-7 +-8 +-8 +-9 +-10 +-10 +-11 +-12 +-32 +-88 +-128 +-128 +-107 +-59 +-28 +-20 +-26 +-39 +-50 +-57 +-57 +-54 +-47 +-42 +-37 +-35 +-33 +-33 +-32 +-32 +-31 +-30 +-29 +-28 +-26 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +109 +48 +0 +-28 +-36 +-31 +-17 +-4 +7 +11 +11 +7 +2 +-3 +-6 +-9 +-9 +-10 +-8 +-9 +-7 +-8 +-8 +-10 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-107 +-59 +-29 +-20 +-26 +-39 +-50 +-57 +-57 +-53 +-47 +-42 +-37 +-35 +-33 +-33 +-32 +-32 +-31 +-30 +-29 +-28 +-26 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +109 +48 +0 +-29 +-36 +-31 +-17 +-4 +7 +11 +11 +7 +2 +-3 +-6 +-8 +-9 +-9 +-8 +-8 +-8 +-8 +-8 +-9 +-10 +-11 +-11 +-12 +-31 +-87 +-128 +-128 +-107 +-59 +-29 +-20 +-26 +-39 +-49 +-57 +-57 +-53 +-47 +-42 +-37 +-35 +-33 +-33 +-32 +-32 +-31 +-30 +-28 +-28 +-25 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +109 +47 +0 +-28 +-36 +-30 +-17 +-4 +7 +11 +11 +7 +3 +-3 +-6 +-9 +-10 +-9 +-8 +-8 +-7 +-8 +-8 +-10 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-107 +-59 +-29 +-20 +-26 +-39 +-50 +-57 +-56 +-53 +-47 +-42 +-37 +-35 +-33 +-33 +-32 +-32 +-31 +-30 +-28 +-28 +-26 +-26 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +110 +48 +0 +-29 +-36 +-30 +-17 +-4 +7 +11 +12 +7 +2 +-3 +-6 +-9 +-9 +-9 +-8 +-8 +-7 +-8 +-8 +-10 +-10 +-11 +-11 +-12 +-31 +-87 +-128 +-128 +-107 +-59 +-29 +-20 +-26 +-39 +-50 +-57 +-57 +-53 +-47 +-42 +-37 +-35 +-33 +-33 +-32 +-32 +-30 +-30 +-28 +-28 +-26 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +110 +48 +-1 +-29 +-36 +-31 +-17 +-4 +7 +11 +11 +7 +2 +-3 +-6 +-9 +-9 +-9 +-8 +-8 +-7 +-8 +-9 +-10 +-10 +-11 +-11 +-12 +-31 +-87 +-128 +-128 +-107 +-59 +-29 +-20 +-26 +-39 +-50 +-57 +-56 +-53 +-47 +-42 +-37 +-35 +-33 +-33 +-32 +-32 +-31 +-30 +-28 +-28 +-26 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +109 +48 +0 +-28 +-36 +-31 +-17 +-4 +7 +11 +11 +7 +3 +-3 +-6 +-9 +-9 +-10 +-9 +-9 +-8 +-8 +-8 +-10 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-107 +-59 +-29 +-20 +-26 +-39 +-50 +-57 +-57 +-53 +-47 +-42 +-36 +-35 +-33 +-33 +-32 +-33 +-31 +-31 +-29 +-28 +-26 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +110 +48 +0 +-28 +-36 +-31 +-17 +-4 +7 +11 +12 +7 +3 +-3 +-6 +-9 +-9 +-9 +-8 +-8 +-7 +-9 +-9 +-10 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-105 +-56 +-26 +-18 +-24 +-38 +-49 +-56 +-56 +-53 +-46 +-42 +-36 +-35 +-32 +-33 +-32 +-32 +-31 +-30 +-28 +-27 +-26 +-25 +-24 +-24 +-23 +-23 +-22 +-22 +-21 +-21 +-20 +-20 +-19 +-19 +-18 +-18 +-17 +-18 +-17 +-18 +-17 +-17 +-16 +-16 +-16 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +-15 +-15 +-15 +-16 +-15 +-15 +52 +127 +127 +127 +113 +51 +3 +-26 +-34 +-28 +-15 +-2 +9 +13 +13 +9 +4 +-1 +-5 +-7 +-8 +-8 +-7 +-7 +-6 +-7 +-7 +-9 +-9 +-10 +-10 +-11 +-31 +-87 +-128 +-128 +-105 +-57 +-26 +-19 +-24 +-38 +-49 +-56 +-56 +-53 +-46 +-41 +-36 +-34 +-32 +-32 +-31 +-32 +-30 +-29 +-28 +-27 +-25 +-25 +-23 +-23 +-22 +-23 +45 +127 +127 +127 +108 +46 +-2 +-30 +-37 +-32 +-18 +-5 +6 +10 +11 +7 +2 +-3 +-6 +-9 +-9 +-10 +-9 +-8 +-8 +-9 +-9 +-10 +-10 +-11 +-11 +-12 +-31 +-87 +-128 +-128 +-107 +-59 +-29 +-21 +-26 +-39 +-50 +-57 +-57 +-53 +-47 +-42 +-37 +-35 +-33 +-33 +-32 +-33 +-31 +-30 +-28 +-27 +-26 +-25 +-24 +-24 +-23 +-22 +45 +127 +127 +127 +110 +48 +0 +-28 +-36 +-30 +-17 +-4 +7 +11 +11 +7 +2 +-3 +-6 +-9 +-9 +-9 +-8 +-8 +-7 +-8 +-8 +-10 +-10 +-11 +-11 +-12 +-12 +-12 +-12 +-13 +-12 +-13 +-13 +-14 +-13 +-14 +-13 +-14 +-13 +-15 +-14 +-15 +-14 +-15 +-14 +-15 +-14 +-15 +-15 +-16 +-15 +-16 +-15 +-15 +-15 +-15 +-15 +-16 +-35 +-90 +-128 +-128 +-110 +-61 +-31 +-22 +-28 +-41 +-51 +-58 +-58 +-55 +-48 +-43 +-38 +-36 +-34 +-34 +-33 +-33 +-31 +-31 +-29 +-28 +-26 +-26 +-25 +-25 +-23 +-24 +44 +127 +127 +127 +109 +47 +0 +-29 +-36 +-31 +-17 +-4 +7 +11 +11 +7 +2 +-3 +-6 +-9 +-9 +-9 +-8 +-8 +-8 +-8 +-8 +-10 +-10 +-11 +-10 +-11 +-31 +-87 +-128 +-128 +-107 +-58 +-28 +-20 +-26 +-39 +-50 +-57 +-57 +-53 +-47 +-41 +-37 +-34 +-33 +-33 +-32 +-32 +-31 +-30 +-28 +-27 +-25 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +110 +48 +0 +-29 +-36 +-31 +-18 +-4 +7 +11 +11 +7 +2 +-3 +-6 +-8 +-9 +-10 +-8 +-9 +-8 +-9 +-8 +-10 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-107 +-59 +-29 +-20 +-26 +-39 +-49 +-57 +-57 +-53 +-47 +-42 +-37 +-35 +-33 +-33 +-32 +-32 +-31 +-30 +-28 +-27 +-26 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +110 +48 +0 +-28 +-35 +-30 +-17 +-4 +7 +11 +12 +7 +3 +-3 +-6 +-8 +-9 +-9 +-8 +-8 +-8 +-8 +-8 +-9 +-9 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-107 +-59 +-28 +-20 +-25 +-39 +-50 +-57 +-57 +-53 +-47 +-42 +-37 +-34 +-33 +-33 +-32 +-32 +-31 +-30 +-28 +-27 +-26 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +110 +48 +0 +-28 +-36 +-31 +-17 +-4 +7 +11 +12 +7 +3 +-3 +-6 +-9 +-9 +-10 +-8 +-9 +-8 +-8 +-8 +-9 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-107 +-59 +-28 +-20 +-26 +-39 +-50 +-57 +-57 +-53 +-47 +-42 +-37 +-35 +-33 +-33 +-32 +-32 +-31 +-30 +-29 +-28 +-26 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +110 +48 +0 +-28 +-36 +-31 +-17 +-4 +7 +11 +11 +7 +2 +-3 +-6 +-9 +-9 +-10 +-8 +-8 +-7 +-8 +-8 +-9 +-9 +-11 +-11 +-12 +-31 +-88 +-128 +-128 +-105 +-57 +-27 +-18 +-24 +-38 +-49 +-56 +-56 +-52 +-46 +-41 +-36 +-34 +-33 +-33 +-32 +-32 +-30 +-30 +-28 +-27 +-25 +-25 +-24 +-24 +-23 +-23 +-22 +-21 +-21 +-21 +-20 +-20 +-19 +-19 +-18 +-19 +-17 +-18 +-17 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +52 +127 +127 +127 +114 +51 +3 +-26 +-34 +-28 +-15 +-2 +9 +13 +13 +9 +4 +-2 +-5 +-7 +-7 +-8 +-7 +-7 +-6 +-7 +-7 +-9 +-9 +-11 +-11 +-12 +-31 +-87 +-128 +-128 +-105 +-57 +-26 +-18 +-24 +-38 +-49 +-55 +-56 +-53 +-46 +-41 +-36 +-34 +-32 +-32 +-32 +-32 +-30 +-29 +-28 +-27 +-25 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +108 +46 +-1 +-30 +-37 +-32 +-17 +-5 +6 +10 +11 +6 +2 +-3 +-6 +-9 +-9 +-9 +-9 +-9 +-8 +-9 +-9 +-10 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-106 +-57 +-27 +-19 +-25 +-38 +-49 +-56 +-56 +-53 +-46 +-41 +-36 +-34 +-33 +-33 +-32 +-32 +-30 +-29 +-28 +-27 +-25 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +108 +46 +-2 +-30 +-37 +-31 +-17 +-4 +6 +10 +10 +6 +1 +-4 +-7 +-9 +-10 +-10 +-9 +-9 +-8 +-9 +-9 +-10 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-106 +-57 +-27 +-18 +-25 +-37 +-49 +-56 +-56 +-53 +-46 +-41 +-36 +-34 +-32 +-32 +-32 +-32 +-30 +-29 +-28 +-27 +-25 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +108 +45 +-2 +-30 +-37 +-32 +-18 +-5 +6 +10 +11 +6 +2 +-4 +-6 +-9 +-9 +-10 +-9 +-9 +-8 +-9 +-9 +-10 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-106 +-57 +-26 +-18 +-24 +-37 +-49 +-56 +-56 +-53 +-46 +-41 +-36 +-34 +-32 +-33 +-32 +-32 +-30 +-30 +-28 +-27 +-25 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +108 +46 +-2 +-30 +-37 +-32 +-18 +-4 +6 +11 +11 +7 +2 +-3 +-6 +-9 +-9 +-10 +-9 +-9 +-8 +-9 +-9 +-10 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-106 +-57 +-26 +-18 +-24 +-38 +-49 +-56 +-56 +-53 +-46 +-41 +-36 +-34 +-32 +-33 +-32 +-32 +-31 +-30 +-28 +-27 +-26 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +108 +46 +-2 +-30 +-37 +-31 +-17 +-5 +6 +11 +11 +7 +2 +-4 +-7 +-10 +-10 +-10 +-9 +-8 +-7 +-9 +-9 +-10 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-106 +-58 +-27 +-19 +-24 +-38 +-49 +-56 +-56 +-53 +-47 +-41 +-36 +-34 +-32 +-32 +-31 +-32 +-30 +-30 +-27 +-27 +-25 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +108 +46 +-2 +-30 +-37 +-32 +-18 +-5 +6 +10 +10 +6 +2 +-3 +-6 +-9 +-9 +-10 +-8 +-8 +-7 +-9 +-9 +-10 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-106 +-57 +-26 +-18 +-24 +-38 +-49 +-56 +-55 +-52 +-46 +-41 +-36 +-34 +-33 +-33 +-32 +-32 +-30 +-29 +-28 +-28 +-25 +-25 +-24 +-24 +-23 +-22 +45 +127 +127 +127 +108 +46 +-2 +-30 +-37 +-32 +-17 +-5 +6 +10 +10 +6 +1 +-4 +-7 +-9 +-9 +-10 +-9 +-9 +-8 +-8 +-8 +-9 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-106 +-57 +-26 +-18 +-24 +-37 +-49 +-56 +-56 +-52 +-46 +-41 +-36 +-34 +-32 +-33 +-32 +-32 +-30 +-29 +-28 +-27 +-25 +-25 +-24 +-24 +-23 +-23 +46 +127 +127 +127 +108 +46 +-2 +-30 +-37 +-32 +-17 +-4 +7 +11 +11 +7 +2 +-3 +-7 +-9 +-9 +-10 +-9 +-8 +-8 +-8 +-8 +-10 +-10 +-12 +-11 +-12 +-32 +-88 +-128 +-128 +-106 +-57 +-26 +-18 +-24 +-38 +-49 +-56 +-56 +-52 +-46 +-41 +-36 +-34 +-33 +-33 +-32 +-32 +-30 +-29 +-28 +-27 +-26 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +108 +45 +-2 +-31 +-38 +-32 +-18 +-5 +6 +11 +11 +6 +2 +-4 +-7 +-10 +-10 +-10 +-9 +-9 +-8 +-9 +-9 +-10 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-107 +-59 +-29 +-20 +-26 +-39 +-50 +-57 +-57 +-53 +-47 +-42 +-37 +-35 +-33 +-33 +-32 +-32 +-31 +-30 +-28 +-28 +-26 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +110 +48 +0 +-29 +-36 +-31 +-17 +-4 +7 +11 +11 +7 +2 +-3 +-6 +-9 +-9 +-10 +-8 +-8 +-7 +-8 +-8 +-10 +-10 +-10 +-10 +-12 +-12 +-12 +-12 +-13 +-12 +-13 +-13 +-13 +-13 +-14 +-14 +-14 +-14 +-15 +-14 +-15 +-14 +-15 +-14 +-15 +-14 +-15 +-15 +-15 +-14 +-15 +-14 +-15 +-15 +-16 +-15 +-16 +-35 +-91 +-128 +-128 +-109 +-61 +-31 +-22 +-28 +-41 +-51 +-58 +-58 +-54 +-48 +-43 +-38 +-36 +-34 +-34 +-33 +-33 +-31 +-30 +-29 +-28 +-26 +-26 +-25 +-25 +-23 +-23 +45 +127 +127 +127 +109 +47 +-1 +-29 +-36 +-31 +-17 +-4 +7 +11 +11 +7 +3 +-3 +-6 +-9 +-9 +-10 +-8 +-9 +-8 +-8 +-9 +-10 +-10 +-11 +-11 +-12 +-31 +-87 +-128 +-128 +-105 +-57 +-27 +-19 +-25 +-38 +-49 +-56 +-56 +-53 +-47 +-41 +-37 +-34 +-32 +-33 +-32 +-32 +-30 +-31 +-28 +-27 +-25 +-25 +-24 +-24 +-23 +-23 +-22 +-21 +-21 +-22 +-21 +-21 +-20 +-21 +-19 +-20 +-19 +-19 +-18 +-18 +-17 +-18 +-17 +-17 +-17 +-17 +-16 +-17 +-16 +-17 +-16 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +52 +127 +127 +127 +115 +53 +5 +-24 +-32 +-27 +-14 +-1 +9 +13 +14 +10 +5 +-1 +-4 +-7 +-8 +-8 +-7 +-7 +-6 +-7 +-7 +-8 +-8 +-10 +-10 +-11 +-11 +-12 +-12 +-12 +-12 +-12 +-13 +-13 +-13 +-14 +-13 +-14 +-13 +-14 +-14 +-15 +-14 +-15 +-14 +-15 +-14 +-15 +-14 +-15 +-15 +-16 +-15 +-15 +-14 +-15 +-14 +-15 +-35 +-90 +-128 +-128 +-109 +-61 +-31 +-22 +-28 +-41 +-52 +-58 +-58 +-55 +-48 +-43 +-38 +-36 +-34 +-34 +-33 +-33 +-32 +-31 +-29 +-28 +-26 +-26 +-24 +-24 +-24 +-23 +45 +127 +127 +127 +110 +48 +0 +-29 +-36 +-31 +-17 +-4 +6 +11 +11 +7 +2 +-3 +-6 +-9 +-9 +-10 +-9 +-9 +-8 +-8 +-8 +-9 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-107 +-59 +-28 +-20 +-25 +-39 +-49 +-56 +-57 +-53 +-47 +-42 +-37 +-35 +-33 +-33 +-32 +-33 +-31 +-31 +-28 +-28 +-26 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +110 +47 +0 +-29 +-36 +-31 +-17 +-4 +7 +11 +11 +7 +2 +-3 +-6 +-8 +-9 +-9 +-8 +-8 +-8 +-8 +-8 +-10 +-9 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-105 +-57 +-27 +-18 +-24 +-38 +-49 +-56 +-56 +-53 +-46 +-41 +-36 +-35 +-32 +-33 +-31 +-32 +-30 +-30 +-28 +-27 +-25 +-25 +-24 +-23 +-23 +-23 +-22 +-21 +-20 +-21 +-19 +-20 +-19 +-19 +-18 +-19 +-18 +-18 +-17 +-18 +-17 +-17 +-16 +-17 +-16 +-16 +-15 +-16 +-15 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +52 +127 +127 +127 +114 +51 +3 +-26 +-33 +-28 +-14 +-1 +9 +13 +13 +9 +4 +-1 +-5 +-7 +-7 +-8 +-7 +-7 +-6 +-7 +-7 +-9 +-9 +-10 +-11 +-11 +-31 +-87 +-128 +-128 +-107 +-59 +-28 +-19 +-25 +-38 +-49 +-56 +-56 +-53 +-47 +-42 +-37 +-35 +-33 +-33 +-32 +-32 +-30 +-30 +-28 +-28 +-26 +-26 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +110 +48 +0 +-28 +-36 +-30 +-17 +-4 +7 +11 +11 +7 +3 +-3 +-6 +-9 +-9 +-9 +-8 +-8 +-8 +-8 +-9 +-10 +-10 +-11 +-11 +-12 +-11 +-12 +-11 +-13 +-12 +-13 +-13 +-13 +-13 +-14 +-13 +-14 +-14 +-15 +-14 +-15 +-14 +-15 +-14 +-15 +-14 +-15 +-15 +-16 +-15 +-16 +-15 +-15 +-14 +-15 +-15 +-16 +-35 +-91 +-128 +-128 +-108 +-59 +-29 +-20 +-26 +-40 +-51 +-57 +-57 +-54 +-48 +-42 +-38 +-36 +-33 +-33 +-32 +-33 +-31 +-30 +-29 +-28 +-26 +-25 +-24 +-24 +-23 +-23 +-22 +-21 +-21 +-22 +-21 +-22 +-21 +-21 +-20 +-20 +-19 +-19 +-18 +-18 +-17 +-18 +-17 +-17 +-17 +-17 +-16 +-17 +-16 +-16 +-16 +-16 +-15 +-16 +-15 +-16 +-15 +-15 +52 +127 +127 +127 +114 +53 +5 +-24 +-32 +-27 +-13 +-1 +9 +13 +14 +9 +5 +-1 +-4 +-7 +-7 +-8 +-7 +-7 +-6 +-7 +-7 +-9 +-9 +-10 +-10 +-11 +-11 +-12 +-12 +-12 +-12 +-12 +-12 +-13 +-13 +-13 +-13 +-14 +-13 +-14 +-14 +-15 +-14 +-15 +-14 +-15 +-14 +-15 +-14 +-15 +-14 +-15 +-15 +-15 +-15 +-15 +-14 +-15 +-35 +-90 +-128 +-128 +-107 +-59 +-29 +-20 +-26 +-40 +-51 +-57 +-57 +-54 +-48 +-43 +-38 +-35 +-33 +-33 +-32 +-33 +-31 +-31 +-29 +-28 +-26 +-25 +-24 +-24 +-23 +-23 +-22 +-22 +-21 +-22 +-21 +-22 +-21 +-21 +-19 +-19 +-18 +-19 +-18 +-19 +-18 +-18 +-17 +-18 +-17 +-17 +-16 +-17 +-16 +-16 +-15 +-16 +-15 +-15 +-15 +-16 +-15 +-15 +52 +127 +127 +127 +115 +53 +5 +-24 +-33 +-27 +-14 +-1 +9 +13 +14 +10 +4 +-1 +-4 +-7 +-7 +-8 +-7 +-7 +-6 +-7 +-7 +-8 +-9 +-10 +-10 +-12 +-11 +-12 +-11 +-12 +-12 +-13 +-12 +-14 +-13 +-14 +-13 +-14 +-13 +-14 +-14 +-14 +-13 +-15 +-14 +-15 +-14 +-16 +-15 +-15 +-14 +-16 +-15 +-16 +-15 +-15 +-14 +-15 +-35 +-90 +-128 +-128 +-109 +-61 +-31 +-22 +-28 +-41 +-52 +-58 +-58 +-54 +-48 +-43 +-38 +-36 +-34 +-34 +-33 +-33 +-31 +-30 +-29 +-28 +-26 +-26 +-25 +-25 +-23 +-23 +45 +127 +127 +127 +109 +47 +0 +-28 +-36 +-31 +-17 +-4 +7 +11 +11 +7 +3 +-3 +-6 +-9 +-9 +-10 +-9 +-9 +-8 +-9 +-9 +-10 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-107 +-59 +-29 +-20 +-26 +-39 +-50 +-57 +-56 +-53 +-47 +-42 +-37 +-35 +-33 +-33 +-32 +-32 +-30 +-30 +-28 +-27 +-26 +-25 +-24 +-24 +-23 +-22 +45 +127 +127 +127 +110 +48 +0 +-29 +-36 +-31 +-17 +-4 +7 +11 +11 +7 +3 +-3 +-6 +-8 +-9 +-9 +-9 +-8 +-8 +-8 +-9 +-9 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-105 +-57 +-27 +-19 +-24 +-37 +-49 +-56 +-56 +-53 +-46 +-41 +-36 +-34 +-33 +-33 +-32 +-32 +-30 +-30 +-28 +-27 +-26 +-25 +-24 +-24 +-23 +-22 +-21 +-21 +-21 +-21 +-20 +-20 +-19 +-19 +-17 +-18 +-17 +-18 +-17 +-17 +-17 +-17 +-16 +-17 +-16 +-16 +-16 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +-14 +-15 +-15 +-15 +52 +127 +127 +127 +114 +51 +3 +-25 +-33 +-28 +-15 +-2 +9 +13 +14 +9 +5 +-1 +-4 +-7 +-8 +-8 +-7 +-7 +-7 +-8 +-7 +-8 +-9 +-10 +-10 +-11 +-31 +-87 +-128 +-128 +-107 +-59 +-28 +-20 +-25 +-38 +-49 +-56 +-56 +-53 +-47 +-42 +-36 +-34 +-33 +-33 +-32 +-32 +-31 +-30 +-28 +-27 +-25 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +109 +48 +0 +-28 +-36 +-31 +-17 +-4 +7 +11 +11 +7 +3 +-3 +-6 +-9 +-9 +-10 +-9 +-8 +-7 +-8 +-8 +-9 +-10 +-11 +-11 +-12 +-12 +-12 +-12 +-12 +-12 +-13 +-12 +-13 +-13 +-14 +-14 +-14 +-14 +-14 +-14 +-15 +-14 +-15 +-14 +-15 +-15 +-15 +-15 +-15 +-14 +-15 +-15 +-15 +-15 +-16 +-15 +-16 +-35 +-90 +-128 +-128 +-109 +-62 +-31 +-23 +-28 +-41 +-51 +-58 +-58 +-55 +-48 +-43 +-38 +-36 +-34 +-34 +-33 +-33 +-31 +-31 +-29 +-28 +-26 +-26 +-25 +-25 +-24 +-23 +45 +127 +127 +127 +109 +48 +0 +-29 +-36 +-31 +-17 +-4 +7 +11 +11 +7 +2 +-3 +-6 +-9 +-9 +-9 +-8 +-8 +-8 +-9 +-9 +-10 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-105 +-57 +-27 +-19 +-25 +-38 +-49 +-56 +-56 +-53 +-46 +-41 +-37 +-34 +-32 +-32 +-31 +-32 +-30 +-30 +-28 +-27 +-25 +-25 +-24 +-24 +-23 +-23 +-22 +-22 +-21 +-21 +-22 +-22 +-21 +-20 +-19 +-19 +-18 +-18 +-18 +-18 +-17 +-18 +-17 +-18 +-17 +-17 +-16 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +-15 +-15 +-14 +-15 +52 +127 +127 +127 +115 +52 +5 +-24 +-32 +-27 +-13 +0 +10 +14 +14 +9 +4 +-1 +-5 +-7 +-7 +-7 +-6 +-7 +-6 +-7 +-7 +-9 +-9 +-10 +-10 +-11 +-11 +-11 +-11 +-12 +-12 +-12 +-12 +-13 +-12 +-13 +-13 +-14 +-13 +-15 +-14 +-15 +-14 +-14 +-14 +-15 +-14 +-15 +-15 +-15 +-15 +-16 +-15 +-15 +-15 +-16 +-15 +-16 +-35 +-91 +-128 +-128 +-108 +-59 +-29 +-20 +-26 +-39 +-51 +-57 +-57 +-54 +-48 +-42 +-37 +-35 +-33 +-33 +-32 +-33 +-31 +-30 +-28 +-28 +-26 +-26 +-24 +-24 +-23 +-23 +-22 +-22 +-21 +-22 +-21 +-22 +-21 +-21 +-20 +-20 +-18 +-19 +-18 +-18 +-17 +-18 +-17 +-17 +-16 +-17 +-16 +-17 +-16 +-16 +-16 +-17 +-16 +-16 +-15 +-16 +-15 +-16 +51 +127 +127 +127 +115 +53 +5 +-24 +-32 +-27 +-14 +-1 +10 +13 +14 +10 +5 +-1 +-4 +-7 +-7 +-7 +-7 +-7 +-6 +-7 +-7 +-8 +-9 +-10 +-10 +-11 +-11 +-12 +-11 +-12 +-12 +-13 +-12 +-13 +-12 +-13 +-13 +-14 +-13 +-14 +-14 +-15 +-14 +-15 +-14 +-15 +-14 +-15 +-14 +-15 +-15 +-16 +-15 +-15 +-14 +-15 +-15 +-16 +-35 +-90 +-128 +-128 +-108 +-59 +-29 +-21 +-26 +-39 +-50 +-57 +-57 +-54 +-48 +-43 +-37 +-35 +-33 +-33 +-32 +-33 +-31 +-31 +-28 +-28 +-26 +-26 +-24 +-24 +-23 +-23 +-21 +-22 +-21 +-21 +-20 +-20 +-19 +-20 +-18 +-19 +-17 +-18 +-17 +-18 +-17 +-17 +-16 +-17 +-16 +-16 +-15 +-16 +-16 +-17 +-15 +-15 +-15 +-16 +-15 +-15 +-14 +-15 +53 +127 +127 +127 +114 +51 +3 +-25 +-33 +-28 +-14 +-2 +9 +13 +13 +9 +4 +-2 +-5 +-8 +-8 +-9 +-7 +-7 +-7 +-8 +-8 +-9 +-9 +-10 +-10 +-11 +-31 +-87 +-128 +-128 +-105 +-57 +-26 +-18 +-24 +-37 +-48 +-55 +-56 +-52 +-46 +-41 +-36 +-34 +-32 +-32 +-31 +-31 +-30 +-30 +-28 +-27 +-25 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +108 +45 +-2 +-30 +-37 +-31 +-17 +-5 +6 +10 +11 +6 +2 +-3 +-6 +-9 +-9 +-9 +-9 +-9 +-8 +-9 +-8 +-9 +-9 +-11 +-11 +-12 +-31 +-87 +-128 +-128 +-107 +-58 +-28 +-20 +-26 +-39 +-50 +-57 +-57 +-54 +-47 +-42 +-37 +-34 +-33 +-34 +-32 +-32 +-30 +-30 +-28 +-28 +-26 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +109 +48 +0 +-29 +-36 +-31 +-17 +-4 +6 +11 +11 +7 +3 +-3 +-6 +-9 +-9 +-10 +-8 +-9 +-8 +-8 +-8 +-9 +-9 +-11 +-11 +-12 +-12 +-12 +-12 +-13 +-12 +-13 +-12 +-13 +-13 +-14 +-14 +-14 +-14 +-14 +-14 +-15 +-14 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-15 +-16 +-35 +-91 +-128 +-128 +-108 +-59 +-29 +-21 +-26 +-40 +-50 +-57 +-57 +-54 +-47 +-42 +-37 +-35 +-33 +-34 +-33 +-33 +-31 +-30 +-28 +-27 +-26 +-25 +-24 +-24 +-23 +-23 +-21 +-21 +-21 +-22 +-21 +-22 +-21 +-21 +-20 +-20 +-19 +-19 +-17 +-18 +-17 +-18 +-17 +-18 +-17 +-17 +-16 +-17 +-16 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +-15 +-15 +52 +127 +127 +127 +115 +53 +5 +-24 +-32 +-27 +-14 +-1 +10 +14 +14 +10 +5 +-1 +-4 +-7 +-7 +-8 +-6 +-7 +-6 +-7 +-7 +-9 +-9 +-10 +-10 +-11 +-11 +-11 +-11 +-12 +-12 +-13 +-12 +-13 +-13 +-14 +-14 +-14 +-13 +-14 +-13 +-14 +-14 +-15 +-14 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-15 +-16 +-15 +-16 +-35 +-90 +-128 +-128 +-108 +-59 +-29 +-20 +-26 +-40 +-51 +-58 +-58 +-54 +-47 +-43 +-37 +-35 +-34 +-34 +-32 +-32 +-31 +-30 +-29 +-28 +-26 +-25 +-25 +-24 +-23 +-23 +-22 +-22 +-22 +-22 +-22 +-22 +-21 +-21 +-20 +-20 +-19 +-19 +-18 +-19 +-17 +-18 +-17 +-18 +-17 +-17 +-16 +-17 +-16 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +52 +127 +127 +127 +115 +53 +5 +-24 +-32 +-27 +-14 +-1 +10 +13 +14 +10 +5 +-1 +-4 +-7 +-7 +-8 +-7 +-7 +-6 +-7 +-7 +-8 +-9 +-10 +-10 +-11 +-10 +-12 +-12 +-12 +-12 +-13 +-12 +-13 +-13 +-13 +-13 +-14 +-13 +-14 +-14 +-15 +-14 +-14 +-14 +-15 +-14 +-15 +-14 +-16 +-15 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-35 +-90 +-128 +-128 +-109 +-61 +-31 +-22 +-28 +-40 +-51 +-59 +-58 +-55 +-48 +-43 +-38 +-36 +-34 +-34 +-33 +-33 +-31 +-31 +-29 +-28 +-27 +-26 +-25 +-24 +-23 +-23 +45 +127 +127 +127 +109 +47 +0 +-29 +-36 +-31 +-17 +-4 +7 +11 +11 +7 +3 +-3 +-6 +-9 +-9 +-10 +-8 +-9 +-8 +-8 +-8 +-10 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-105 +-57 +-27 +-19 +-24 +-38 +-49 +-57 +-56 +-53 +-46 +-41 +-36 +-34 +-33 +-33 +-32 +-32 +-31 +-30 +-28 +-27 +-25 +-25 +-24 +-24 +-23 +-23 +-21 +-21 +-21 +-21 +-21 +-21 +-20 +-21 +-19 +-20 +-19 +-19 +-18 +-18 +-17 +-17 +-17 +-17 +-17 +-17 +-16 +-17 +-16 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +-15 +-15 +52 +127 +127 +127 +115 +53 +5 +-24 +-32 +-27 +-13 +-1 +9 +13 +14 +10 +5 +-1 +-4 +-7 +-7 +-8 +-7 +-7 +-6 +-7 +-7 +-8 +-8 +-10 +-10 +-11 +-11 +-12 +-11 +-12 +-12 +-12 +-12 +-13 +-13 +-13 +-13 +-15 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-15 +-14 +-15 +-15 +-15 +-14 +-15 +-14 +-15 +-15 +-16 +-15 +-16 +-35 +-91 +-128 +-128 +-108 +-59 +-29 +-21 +-26 +-39 +-50 +-57 +-57 +-54 +-47 +-42 +-37 +-35 +-33 +-33 +-33 +-33 +-31 +-30 +-29 +-28 +-26 +-25 +-24 +-24 +-23 +-23 +-22 +-22 +-21 +-22 +-21 +-22 +-21 +-21 +-20 +-19 +-19 +-19 +-18 +-18 +-18 +-18 +-17 +-18 +-16 +-17 +-16 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +52 +127 +127 +127 +115 +53 +5 +-24 +-32 +-27 +-14 +-1 +10 +14 +14 +10 +5 +-1 +-4 +-7 +-7 +-8 +-7 +-7 +-6 +-7 +-7 +-8 +-9 +-10 +-10 +-11 +-11 +-11 +-11 +-12 +-13 +-13 +-12 +-13 +-13 +-14 +-13 +-14 +-13 +-14 +-14 +-15 +-14 +-15 +-14 +-15 +-14 +-15 +-14 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-35 +-91 +-128 +-128 +-109 +-61 +-31 +-22 +-28 +-41 +-51 +-58 +-58 +-54 +-48 +-43 +-38 +-36 +-34 +-34 +-33 +-33 +-31 +-31 +-29 +-28 +-26 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +110 +48 +0 +-29 +-36 +-31 +-17 +-4 +7 +11 +11 +7 +3 +-3 +-6 +-9 +-9 +-9 +-8 +-9 +-8 +-9 +-9 +-9 +-10 +-11 +-11 +-12 +-32 +-87 +-128 +-128 +-107 +-59 +-29 +-20 +-26 +-39 +-50 +-56 +-57 +-53 +-47 +-42 +-37 +-35 +-33 +-33 +-32 +-32 +-31 +-30 +-29 +-28 +-26 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +109 +48 +0 +-29 +-36 +-31 +-17 +-4 +7 +11 +11 +7 +2 +-3 +-6 +-9 +-9 +-9 +-8 +-8 +-7 +-8 +-8 +-9 +-10 +-10 +-11 +-11 +-32 +-87 +-128 +-128 +-107 +-59 +-28 +-20 +-25 +-39 +-49 +-57 +-57 +-53 +-47 +-42 +-38 +-35 +-33 +-33 +-32 +-32 +-31 +-30 +-28 +-28 +-26 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +109 +48 +0 +-28 +-36 +-31 +-17 +-4 +7 +11 +11 +7 +3 +-3 +-6 +-8 +-9 +-10 +-8 +-9 +-8 +-8 +-8 +-10 +-10 +-11 +-11 +-11 +-31 +-87 +-128 +-128 +-107 +-59 +-29 +-20 +-25 +-38 +-49 +-57 +-56 +-54 +-47 +-43 +-38 +-35 +-33 +-33 +-32 +-32 +-31 +-30 +-28 +-28 +-26 +-25 +-24 +-24 +-24 +-23 +45 +127 +127 +127 +110 +48 +0 +-29 +-36 +-31 +-17 +-4 +7 +11 +12 +7 +3 +-3 +-6 +-9 +-9 +-9 +-8 +-8 +-8 +-8 +-8 +-10 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-107 +-59 +-29 +-21 +-26 +-39 +-50 +-57 +-57 +-53 +-47 +-42 +-37 +-35 +-33 +-33 +-32 +-32 +-31 +-30 +-28 +-28 +-26 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +109 +48 +0 +-28 +-36 +-31 +-17 +-4 +7 +11 +11 +7 +2 +-3 +-6 +-9 +-9 +-9 +-8 +-8 +-8 +-8 +-8 +-9 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-107 +-59 +-29 +-20 +-26 +-39 +-49 +-56 +-56 +-53 +-47 +-42 +-37 +-35 +-33 +-33 +-32 +-32 +-31 +-30 +-28 +-27 +-26 +-26 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +109 +48 +0 +-28 +-36 +-30 +-17 +-4 +7 +11 +11 +7 +3 +-3 +-5 +-8 +-9 +-10 +-8 +-9 +-7 +-8 +-8 +-9 +-9 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-106 +-59 +-28 +-20 +-25 +-39 +-50 +-57 +-57 +-53 +-47 +-42 +-37 +-35 +-33 +-33 +-32 +-32 +-31 +-30 +-28 +-28 +-26 +-26 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +109 +48 +0 +-28 +-36 +-31 +-17 +-4 +7 +11 +11 +7 +3 +-2 +-6 +-9 +-9 +-10 +-8 +-8 +-7 +-8 +-8 +-10 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-107 +-58 +-29 +-20 +-26 +-39 +-50 +-57 +-56 +-53 +-47 +-42 +-37 +-35 +-33 +-33 +-32 +-33 +-31 +-30 +-29 +-28 +-25 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +110 +48 +0 +-29 +-36 +-31 +-17 +-4 +7 +11 +12 +7 +2 +-3 +-6 +-9 +-9 +-10 +-8 +-8 +-7 +-8 +-8 +-10 +-10 +-11 +-11 +-11 +-31 +-87 +-128 +-128 +-106 +-57 +-27 +-18 +-24 +-38 +-49 +-56 +-56 +-53 +-46 +-42 +-36 +-34 +-32 +-33 +-32 +-32 +-30 +-29 +-28 +-27 +-25 +-25 +-24 +-24 +-23 +-23 +-22 +-21 +-21 +-21 +-20 +-20 +-19 +-19 +-18 +-18 +-17 +-18 +-17 +-18 +-17 +-17 +-17 +-17 +-16 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +-15 +-15 +-14 +-15 +53 +127 +127 +127 +113 +51 +3 +-26 +-33 +-27 +-14 +-2 +9 +13 +13 +9 +4 +-1 +-5 +-7 +-8 +-9 +-7 +-7 +-6 +-7 +-7 +-9 +-9 +-10 +-10 +-11 +-31 +-87 +-128 +-128 +-105 +-56 +-26 +-18 +-24 +-37 +-48 +-56 +-56 +-53 +-46 +-41 +-36 +-34 +-32 +-32 +-32 +-32 +-30 +-29 +-28 +-27 +-25 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +108 +46 +-1 +-30 +-38 +-32 +-18 +-4 +6 +10 +11 +7 +2 +-3 +-6 +-9 +-9 +-10 +-9 +-8 +-8 +-8 +-9 +-10 +-10 +-12 +-12 +-12 +-32 +-88 +-128 +-128 +-107 +-59 +-29 +-20 +-26 +-39 +-49 +-56 +-57 +-53 +-47 +-42 +-37 +-35 +-33 +-33 +-32 +-32 +-31 +-30 +-28 +-27 +-26 +-26 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +109 +47 +0 +-28 +-36 +-31 +-17 +-4 +7 +11 +11 +7 +2 +-3 +-7 +-9 +-9 +-9 +-8 +-9 +-8 +-9 +-9 +-10 +-10 +-11 +-10 +-11 +-11 +-12 +-12 +-13 +-13 +-13 +-13 +-14 +-13 +-14 +-13 +-14 +-14 +-14 +-14 +-15 +-15 +-15 +-14 +-15 +-14 +-15 +-15 +-15 +-15 +-16 +-15 +-15 +-15 +-15 +-15 +-16 +-35 +-90 +-128 +-128 +-109 +-61 +-31 +-22 +-28 +-41 +-52 +-59 +-58 +-55 +-48 +-43 +-38 +-36 +-34 +-34 +-33 +-33 +-31 +-31 +-29 +-28 +-26 +-26 +-25 +-25 +-23 +-23 +45 +127 +127 +127 +109 +47 +-1 +-29 +-36 +-31 +-17 +-4 +7 +11 +11 +7 +2 +-3 +-6 +-9 +-9 +-10 +-8 +-9 +-7 +-8 +-8 +-9 +-9 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-107 +-59 +-28 +-20 +-26 +-39 +-50 +-57 +-57 +-53 +-47 +-42 +-37 +-34 +-33 +-33 +-32 +-32 +-31 +-30 +-28 +-27 +-26 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +110 +48 +0 +-29 +-36 +-31 +-17 +-4 +7 +11 +11 +7 +2 +-3 +-6 +-9 +-9 +-9 +-8 +-8 +-8 +-8 +-8 +-10 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-107 +-59 +-29 +-21 +-26 +-39 +-49 +-57 +-57 +-53 +-47 +-42 +-37 +-35 +-33 +-33 +-32 +-33 +-31 +-30 +-28 +-28 +-26 +-26 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +110 +48 +0 +-28 +-36 +-30 +-17 +-4 +7 +11 +12 +7 +3 +-3 +-6 +-9 +-9 +-9 +-8 +-8 +-7 +-8 +-8 +-9 +-10 +-11 +-11 +-12 +-31 +-87 +-128 +-128 +-107 +-59 +-29 +-20 +-26 +-39 +-50 +-56 +-57 +-53 +-47 +-42 +-37 +-35 +-33 +-33 +-32 +-32 +-31 +-30 +-29 +-27 +-26 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +109 +48 +0 +-28 +-36 +-30 +-17 +-4 +7 +11 +12 +7 +3 +-3 +-6 +-8 +-9 +-9 +-8 +-8 +-8 +-8 +-8 +-9 +-10 +-11 +-11 +-12 +-31 +-88 +-128 +-128 +-107 +-59 +-29 +-20 +-26 +-39 +-50 +-57 +-57 +-53 +-47 +-42 +-37 +-35 +-33 +-33 +-32 +-32 +-31 +-30 +-28 +-27 +-25 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +110 +47 +0 +-29 +-36 +-31 +-17 +-4 +7 +11 +12 +7 +3 +-3 +-6 +-9 +-9 +-9 +-8 +-8 +-7 +-8 +-8 +-10 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-105 +-57 +-27 +-19 +-25 +-38 +-49 +-56 +-56 +-53 +-47 +-41 +-36 +-34 +-32 +-33 +-32 +-32 +-30 +-30 +-28 +-27 +-25 +-25 +-24 +-24 +-23 +-23 +-22 +-21 +-21 +-21 +-20 +-20 +-19 +-19 +-18 +-18 +-17 +-18 +-17 +-17 +-16 +-17 +-16 +-16 +-16 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +52 +127 +127 +127 +114 +51 +3 +-26 +-33 +-28 +-14 +-2 +9 +13 +14 +9 +4 +-2 +-5 +-8 +-8 +-8 +-7 +-7 +-6 +-7 +-7 +-9 +-9 +-10 +-10 +-11 +-31 +-87 +-128 +-128 +-105 +-57 +-26 +-18 +-24 +-37 +-49 +-56 +-56 +-53 +-46 +-41 +-36 +-34 +-32 +-32 +-31 +-32 +-30 +-30 +-28 +-27 +-25 +-25 +-24 +-24 +-23 +-23 +46 +127 +127 +127 +109 +47 +-2 +-31 +-37 +-32 +-18 +-5 +6 +11 +11 +6 +2 +-4 +-7 +-9 +-9 +-10 +-8 +-9 +-8 +-8 +-8 +-10 +-10 +-11 +-11 +-11 +-32 +-87 +-128 +-128 +-106 +-57 +-27 +-18 +-24 +-38 +-49 +-56 +-56 +-53 +-46 +-41 +-36 +-34 +-33 +-33 +-32 +-32 +-31 +-30 +-28 +-27 +-25 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +108 +45 +-2 +-30 +-37 +-32 +-17 +-4 +7 +11 +11 +6 +1 +-4 +-6 +-9 +-9 +-9 +-9 +-9 +-8 +-9 +-9 +-10 +-10 +-11 +-11 +-12 +-32 +-87 +-128 +-128 +-106 +-57 +-27 +-18 +-24 +-38 +-49 +-56 +-56 +-53 +-47 +-41 +-37 +-34 +-33 +-33 +-32 +-32 +-30 +-29 +-28 +-27 +-25 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +108 +47 +-1 +-30 +-37 +-32 +-17 +-4 +6 +11 +11 +7 +2 +-3 +-6 +-9 +-9 +-9 +-8 +-8 +-8 +-8 +-9 +-10 +-10 +-11 +-11 +-12 +-32 +-87 +-128 +-128 +-106 +-57 +-26 +-18 +-24 +-38 +-49 +-56 +-56 +-52 +-46 +-41 +-36 +-34 +-32 +-33 +-32 +-32 +-30 +-29 +-28 +-27 +-26 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +108 +46 +-2 +-30 +-37 +-32 +-18 +-4 +6 +11 +11 +7 +2 +-4 +-7 +-9 +-10 +-10 +-8 +-8 +-8 +-8 +-8 +-10 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-106 +-57 +-27 +-19 +-25 +-38 +-49 +-56 +-56 +-53 +-46 +-41 +-37 +-34 +-33 +-33 +-32 +-32 +-30 +-30 +-28 +-27 +-25 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +108 +46 +-2 +-30 +-37 +-32 +-17 +-5 +6 +10 +10 +6 +2 +-3 +-6 +-9 +-10 +-10 +-9 +-9 +-7 +-8 +-8 +-10 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-106 +-57 +-27 +-18 +-25 +-38 +-49 +-56 +-56 +-53 +-46 +-41 +-36 +-34 +-33 +-33 +-32 +-32 +-30 +-30 +-28 +-27 +-26 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +108 +46 +-2 +-30 +-37 +-32 +-18 +-4 +6 +10 +11 +6 +2 +-4 +-7 +-9 +-10 +-10 +-8 +-8 +-8 +-8 +-9 +-10 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-106 +-57 +-27 +-19 +-24 +-38 +-49 +-56 +-56 +-53 +-47 +-41 +-37 +-34 +-32 +-32 +-31 +-32 +-30 +-30 +-28 +-27 +-26 +-26 +-24 +-24 +-22 +-22 +45 +127 +127 +127 +108 +46 +-2 +-30 +-37 +-32 +-17 +-4 +7 +11 +11 +6 +1 +-4 +-6 +-9 +-9 +-9 +-9 +-9 +-8 +-9 +-8 +-9 +-9 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-106 +-57 +-27 +-18 +-24 +-38 +-49 +-56 +-56 +-53 +-46 +-41 +-36 +-34 +-32 +-32 +-32 +-32 +-30 +-30 +-28 +-27 +-25 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +108 +46 +-2 +-30 +-37 +-31 +-17 +-4 +6 +10 +10 +6 +2 +-3 +-7 +-9 +-10 +-10 +-9 +-9 +-8 +-8 +-9 +-10 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-106 +-57 +-26 +-18 +-25 +-38 +-49 +-56 +-56 +-53 +-46 +-41 +-36 +-34 +-32 +-33 +-32 +-32 +-30 +-30 +-28 +-27 +-26 +-25 +-24 +-23 +-22 +-23 +46 +127 +127 +127 +108 +45 +-2 +-30 +-37 +-32 +-18 +-4 +6 +10 +10 +6 +2 +-3 +-6 +-9 +-9 +-10 +-9 +-9 +-8 +-9 +-9 +-10 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-107 +-59 +-28 +-20 +-25 +-39 +-50 +-57 +-57 +-53 +-47 +-42 +-37 +-35 +-33 +-33 +-32 +-32 +-31 +-30 +-28 +-27 +-26 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +110 +48 +0 +-28 +-36 +-31 +-17 +-4 +7 +11 +12 +8 +3 +-3 +-6 +-9 +-9 +-9 +-8 +-8 +-8 +-8 +-9 +-10 +-10 +-11 +-11 +-12 +-11 +-12 +-12 +-13 +-12 +-13 +-13 +-14 +-13 +-14 +-13 +-14 +-13 +-14 +-14 +-15 +-14 +-15 +-14 +-15 +-14 +-15 +-14 +-16 +-14 +-15 +-15 +-15 +-15 +-16 +-15 +-16 +-35 +-91 +-128 +-128 +-109 +-61 +-31 +-22 +-28 +-41 +-52 +-59 +-58 +-55 +-48 +-43 +-38 +-35 +-34 +-34 +-33 +-33 +-32 +-31 +-29 +-28 +-26 +-26 +-25 +-24 +-24 +-23 +44 +127 +127 +127 +110 +48 +0 +-28 +-36 +-31 +-17 +-4 +7 +11 +11 +7 +3 +-3 +-6 +-9 +-10 +-10 +-9 +-8 +-7 +-8 +-8 +-9 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-105 +-57 +-26 +-18 +-24 +-38 +-49 +-56 +-56 +-52 +-46 +-41 +-36 +-34 +-32 +-33 +-32 +-32 +-30 +-29 +-28 +-27 +-25 +-25 +-24 +-24 +-23 +-23 +-22 +-21 +-21 +-22 +-21 +-22 +-21 +-21 +-20 +-20 +-19 +-19 +-18 +-18 +-17 +-18 +-17 +-17 +-16 +-17 +-17 +-16 +-15 +-16 +-16 +-16 +-15 +-16 +-15 +-16 +-15 +-15 +52 +127 +127 +127 +115 +53 +5 +-24 +-32 +-27 +-13 +-1 +10 +14 +14 +9 +5 +-1 +-4 +-7 +-7 +-8 +-7 +-7 +-6 +-7 +-7 +-9 +-9 +-10 +-10 +-11 +-11 +-12 +-12 +-12 +-12 +-13 +-12 +-13 +-12 +-13 +-13 +-14 +-13 +-14 +-14 +-14 +-14 +-14 +-14 +-15 +-14 +-15 +-14 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-35 +-90 +-128 +-128 +-109 +-61 +-31 +-22 +-28 +-41 +-52 +-58 +-58 +-54 +-48 +-43 +-38 +-36 +-34 +-34 +-33 +-33 +-31 +-31 +-29 +-28 +-26 +-26 +-24 +-24 +-23 +-23 +44 +127 +127 +127 +110 +48 +0 +-29 +-37 +-31 +-17 +-4 +7 +11 +11 +7 +2 +-4 +-6 +-8 +-9 +-9 +-9 +-8 +-8 +-9 +-8 +-10 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-107 +-59 +-29 +-20 +-25 +-39 +-49 +-57 +-57 +-53 +-47 +-42 +-37 +-35 +-33 +-33 +-32 +-32 +-31 +-30 +-28 +-27 +-26 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +110 +48 +0 +-29 +-36 +-31 +-17 +-4 +7 +11 +12 +7 +2 +-3 +-6 +-9 +-9 +-9 +-8 +-8 +-8 +-8 +-8 +-9 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-105 +-57 +-26 +-18 +-24 +-38 +-49 +-56 +-56 +-53 +-46 +-41 +-36 +-34 +-32 +-33 +-32 +-32 +-30 +-30 +-28 +-27 +-26 +-25 +-24 +-24 +-23 +-23 +-22 +-22 +-21 +-21 +-20 +-20 +-19 +-19 +-18 +-18 +-17 +-18 +-17 +-17 +-17 +-17 +-16 +-17 +-16 +-17 +-16 +-17 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +52 +127 +127 +127 +114 +51 +2 +-26 +-34 +-29 +-14 +-2 +9 +13 +14 +9 +4 +-2 +-5 +-8 +-8 +-8 +-7 +-7 +-6 +-7 +-7 +-9 +-9 +-11 +-10 +-11 +-31 +-87 +-128 +-128 +-107 +-59 +-28 +-19 +-25 +-38 +-49 +-56 +-56 +-53 +-47 +-42 +-37 +-34 +-33 +-33 +-32 +-32 +-30 +-30 +-28 +-27 +-25 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +109 +48 +0 +-29 +-36 +-31 +-17 +-4 +7 +11 +11 +7 +2 +-3 +-6 +-9 +-9 +-9 +-8 +-8 +-7 +-8 +-8 +-9 +-10 +-11 +-11 +-12 +-12 +-12 +-12 +-12 +-12 +-13 +-13 +-13 +-13 +-14 +-13 +-15 +-14 +-14 +-13 +-14 +-14 +-15 +-14 +-15 +-15 +-15 +-15 +-16 +-15 +-16 +-15 +-15 +-14 +-15 +-15 +-16 +-36 +-91 +-128 +-128 +-108 +-59 +-29 +-21 +-26 +-40 +-51 +-58 +-57 +-54 +-48 +-43 +-37 +-35 +-33 +-33 +-32 +-32 +-31 +-30 +-28 +-27 +-26 +-25 +-24 +-24 +-23 +-23 +-22 +-22 +-21 +-22 +-21 +-22 +-21 +-21 +-20 +-20 +-19 +-19 +-18 +-19 +-18 +-18 +-17 +-18 +-17 +-17 +-16 +-17 +-16 +-16 +-15 +-16 +-15 +-16 +-15 +-15 +-15 +-15 +52 +127 +127 +127 +115 +53 +5 +-24 +-32 +-27 +-14 +-1 +10 +14 +14 +9 +5 +-1 +-4 +-7 +-7 +-8 +-7 +-7 +-6 +-7 +-7 +-9 +-9 +-10 +-10 +-11 +-11 +-12 +-11 +-12 +-12 +-12 +-12 +-13 +-13 +-13 +-12 +-13 +-13 +-14 +-14 +-14 +-14 +-15 +-14 +-15 +-14 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-35 +-91 +-128 +-128 +-108 +-59 +-29 +-21 +-26 +-39 +-50 +-57 +-57 +-54 +-48 +-42 +-38 +-35 +-34 +-33 +-33 +-33 +-31 +-30 +-29 +-28 +-26 +-26 +-24 +-24 +-23 +-23 +-22 +-22 +-21 +-22 +-21 +-21 +-21 +-21 +-20 +-20 +-19 +-19 +-18 +-18 +-17 +-18 +-17 +-17 +-17 +-17 +-16 +-17 +-16 +-16 +-15 +-16 +-15 +-16 +-15 +-15 +-15 +-16 +52 +127 +127 +127 +115 +53 +5 +-24 +-32 +-27 +-13 +-1 +9 +13 +14 +10 +5 +-1 +-4 +-7 +-7 +-8 +-7 +-7 +-6 +-7 +-7 +-8 +-8 +-10 +-10 +-11 +-11 +-11 +-11 +-12 +-12 +-13 +-12 +-13 +-13 +-14 +-13 +-14 +-13 +-14 +-14 +-14 +-14 +-15 +-14 +-15 +-14 +-15 +-14 +-15 +-14 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-35 +-91 +-128 +-128 +-109 +-61 +-31 +-22 +-28 +-41 +-52 +-58 +-58 +-54 +-48 +-43 +-38 +-36 +-33 +-34 +-33 +-33 +-31 +-31 +-29 +-28 +-26 +-26 +-25 +-24 +-24 +-23 +45 +127 +127 +127 +110 +48 +0 +-29 +-36 +-31 +-17 +-4 +7 +11 +11 +7 +2 +-3 +-6 +-9 +-9 +-9 +-8 +-8 +-7 +-8 +-8 +-10 +-10 +-11 +-11 +-11 +-32 +-88 +-128 +-128 +-107 +-59 +-29 +-20 +-26 +-39 +-50 +-57 +-57 +-53 +-47 +-42 +-37 +-35 +-33 +-33 +-32 +-33 +-31 +-30 +-28 +-27 +-26 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +109 +47 +0 +-29 +-36 +-31 +-17 +-4 +7 +11 +12 +7 +3 +-3 +-6 +-9 +-10 +-10 +-8 +-8 +-7 +-8 +-8 +-10 +-10 +-11 +-11 +-11 +-31 +-87 +-128 +-128 +-105 +-57 +-27 +-18 +-24 +-38 +-49 +-56 +-56 +-53 +-46 +-41 +-36 +-34 +-33 +-33 +-32 +-32 +-30 +-29 +-28 +-27 +-25 +-25 +-24 +-24 +-23 +-23 +-22 +-22 +-21 +-21 +-20 +-20 +-19 +-19 +-18 +-18 +-18 +-18 +-17 +-18 +-17 +-17 +-16 +-17 +-16 +-16 +-15 +-16 +-16 +-16 +-15 +-16 +-15 +-15 +-15 +-15 +-15 +-16 +52 +127 +127 +127 +114 +51 +3 +-25 +-33 +-28 +-15 +-2 +9 +13 +14 +9 +4 +-1 +-5 +-8 +-8 +-9 +-7 +-7 +-6 +-7 +-7 +-9 +-9 +-10 +-10 +-12 +-31 +-87 +-128 +-128 +-107 +-59 +-28 +-19 +-25 +-38 +-49 +-56 +-57 +-53 +-47 +-42 +-36 +-34 +-33 +-33 +-32 +-33 +-31 +-30 +-29 +-27 +-25 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +110 +48 +0 +-28 +-36 +-30 +-17 +-4 +7 +11 +11 +7 +3 +-3 +-6 +-9 +-9 +-9 +-8 +-8 +-8 +-8 +-8 +-10 +-10 +-11 +-11 +-12 +-12 +-13 +-12 +-13 +-13 +-13 +-12 +-13 +-13 +-14 +-13 +-14 +-14 +-15 +-14 +-15 +-14 +-15 +-14 +-15 +-14 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-15 +-16 +-35 +-91 +-128 +-128 +-109 +-61 +-31 +-22 +-28 +-41 +-52 +-59 +-58 +-55 +-48 +-43 +-38 +-36 +-34 +-34 +-33 +-33 +-31 +-31 +-29 +-29 +-26 +-26 +-25 +-24 +-23 +-23 +44 +127 +127 +127 +110 +48 +0 +-28 +-36 +-31 +-17 +-4 +7 +11 +11 +7 +2 +-3 +-6 +-9 +-10 +-10 +-9 +-9 +-8 +-9 +-9 +-9 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-105 +-57 +-26 +-18 +-24 +-38 +-49 +-56 +-56 +-53 +-47 +-41 +-36 +-34 +-32 +-33 +-32 +-32 +-30 +-30 +-28 +-27 +-25 +-25 +-24 +-24 +-23 +-23 +-21 +-21 +-21 +-21 +-21 +-21 +-21 +-21 +-19 +-19 +-18 +-19 +-17 +-18 +-17 +-18 +-17 +-17 +-17 +-17 +-16 +-17 +-16 +-16 +-16 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +52 +127 +127 +127 +115 +53 +5 +-24 +-32 +-27 +-14 +-1 +9 +14 +14 +10 +5 +-1 +-4 +-7 +-7 +-8 +-7 +-7 +-6 +-7 +-7 +-8 +-8 +-10 +-10 +-11 +-11 +-12 +-12 +-12 +-12 +-13 +-12 +-13 +-12 +-13 +-13 +-14 +-13 +-14 +-14 +-15 +-14 +-14 +-14 +-14 +-14 +-15 +-15 +-15 +-15 +-16 +-15 +-15 +-14 +-15 +-14 +-15 +-35 +-90 +-128 +-128 +-108 +-59 +-29 +-21 +-26 +-40 +-51 +-58 +-58 +-54 +-48 +-42 +-37 +-35 +-33 +-33 +-33 +-33 +-31 +-31 +-29 +-28 +-26 +-25 +-24 +-24 +-23 +-23 +-22 +-22 +-21 +-22 +-22 +-22 +-21 +-21 +-20 +-20 +-19 +-19 +-18 +-18 +-17 +-18 +-17 +-18 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-15 +-16 +-15 +-16 +-15 +-15 +52 +127 +127 +127 +115 +53 +5 +-24 +-32 +-27 +-13 +-1 +10 +14 +14 +10 +5 +0 +-4 +-7 +-7 +-8 +-7 +-8 +-6 +-7 +-7 +-8 +-9 +-10 +-10 +-12 +-11 +-12 +-12 +-13 +-12 +-13 +-12 +-13 +-12 +-13 +-13 +-14 +-13 +-15 +-14 +-14 +-13 +-14 +-14 +-15 +-14 +-15 +-14 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-35 +-91 +-128 +-128 +-107 +-59 +-28 +-20 +-26 +-39 +-51 +-58 +-57 +-54 +-47 +-42 +-37 +-35 +-33 +-33 +-32 +-33 +-31 +-30 +-28 +-27 +-26 +-25 +-24 +-24 +-23 +-23 +-22 +-22 +-21 +-21 +-20 +-20 +-19 +-19 +-18 +-19 +-17 +-18 +-17 +-18 +-17 +-17 +-16 +-17 +-16 +-16 +-16 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +-15 +-15 +52 +127 +127 +127 +114 +51 +3 +-26 +-33 +-28 +-14 +-2 +9 +13 +13 +9 +4 +-2 +-4 +-8 +-8 +-8 +-7 +-7 +-6 +-7 +-8 +-9 +-9 +-10 +-11 +-11 +-31 +-87 +-128 +-128 +-105 +-57 +-26 +-19 +-24 +-38 +-49 +-56 +-56 +-52 +-46 +-41 +-36 +-34 +-32 +-32 +-32 +-32 +-30 +-30 +-28 +-27 +-25 +-25 +-24 +-24 +-22 +-22 +46 +127 +127 +127 +108 +46 +-2 +-29 +-37 +-31 +-17 +-4 +6 +10 +11 +6 +2 +-3 +-6 +-9 +-9 +-10 +-9 +-9 +-8 +-9 +-9 +-10 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-107 +-59 +-29 +-20 +-25 +-39 +-50 +-57 +-57 +-53 +-47 +-42 +-37 +-35 +-33 +-33 +-32 +-33 +-31 +-30 +-28 +-28 +-26 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +110 +47 +0 +-29 +-36 +-31 +-17 +-4 +7 +11 +11 +7 +2 +-3 +-6 +-9 +-9 +-9 +-8 +-8 +-7 +-8 +-8 +-9 +-10 +-11 +-11 +-12 +-12 +-13 +-12 +-12 +-12 +-13 +-12 +-13 +-13 +-14 +-14 +-14 +-14 +-14 +-14 +-15 +-14 +-15 +-14 +-15 +-15 +-15 +-14 +-15 +-14 +-15 +-15 +-16 +-15 +-16 +-15 +-16 +-35 +-90 +-128 +-128 +-108 +-59 +-29 +-21 +-27 +-40 +-51 +-57 +-57 +-54 +-47 +-43 +-38 +-35 +-34 +-34 +-33 +-33 +-31 +-30 +-28 +-28 +-26 +-26 +-25 +-24 +-23 +-23 +-22 +-22 +-21 +-22 +-22 +-22 +-21 +-21 +-20 +-20 +-19 +-19 +-18 +-18 +-17 +-18 +-17 +-17 +-16 +-17 +-16 +-16 +-16 +-17 +-16 +-16 +-15 +-16 +-15 +-16 +-15 +-15 +52 +127 +127 +127 +115 +53 +5 +-24 +-32 +-27 +-13 +-1 +10 +13 +15 +10 +5 +-1 +-5 +-7 +-8 +-8 +-7 +-7 +-6 +-7 +-7 +-9 +-9 +-10 +-10 +-11 +-11 +-12 +-12 +-13 +-12 +-13 +-12 +-13 +-13 +-13 +-13 +-14 +-13 +-14 +-14 +-15 +-14 +-15 +-14 +-15 +-14 +-15 +-15 +-15 +-14 +-15 +-15 +-15 +-15 +-16 +-15 +-16 +-35 +-90 +-128 +-128 +-107 +-59 +-29 +-21 +-26 +-40 +-50 +-57 +-57 +-54 +-48 +-42 +-37 +-35 +-33 +-33 +-32 +-32 +-31 +-30 +-28 +-28 +-26 +-25 +-24 +-24 +-23 +-23 +-22 +-21 +-21 +-22 +-22 +-22 +-21 +-21 +-19 +-20 +-18 +-19 +-18 +-19 +-18 +-18 +-17 +-18 +-17 +-17 +-16 +-17 +-16 +-17 +-16 +-16 +-15 +-16 +-15 +-15 +-15 +-16 +52 +127 +127 +127 +115 +53 +4 +-24 +-32 +-26 +-13 +-1 +10 +13 +14 +9 +5 +-1 +-4 +-7 +-7 +-8 +-7 +-7 +-6 +-7 +-7 +-8 +-9 +-10 +-10 +-11 +-11 +-12 +-11 +-12 +-11 +-12 +-12 +-13 +-13 +-13 +-13 +-14 +-13 +-14 +-14 +-14 +-14 +-15 +-14 +-15 +-14 +-15 +-14 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-35 +-90 +-128 +-128 +-109 +-61 +-31 +-22 +-28 +-41 +-51 +-58 +-58 +-54 +-48 +-43 +-38 +-36 +-34 +-34 +-33 +-33 +-31 +-31 +-29 +-28 +-26 +-26 +-25 +-24 +-24 +-23 +45 +127 +127 +127 +110 +48 +0 +-29 +-36 +-31 +-17 +-4 +6 +11 +11 +7 +2 +-3 +-6 +-9 +-10 +-10 +-8 +-9 +-7 +-8 +-8 +-10 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-105 +-57 +-26 +-19 +-24 +-37 +-49 +-56 +-56 +-53 +-47 +-42 +-37 +-34 +-32 +-33 +-32 +-32 +-31 +-30 +-28 +-27 +-25 +-25 +-24 +-24 +-23 +-23 +-21 +-22 +-21 +-22 +-21 +-21 +-21 +-20 +-19 +-19 +-18 +-19 +-18 +-18 +-17 +-18 +-17 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +52 +127 +127 +127 +115 +53 +5 +-24 +-32 +-27 +-14 +-1 +10 +13 +14 +9 +5 +-1 +-4 +-7 +-7 +-8 +-7 +-7 +-6 +-7 +-7 +-9 +-9 +-10 +-10 +-11 +-11 +-12 +-11 +-12 +-12 +-12 +-12 +-13 +-13 +-13 +-13 +-14 +-13 +-14 +-13 +-14 +-14 +-14 +-14 +-15 +-14 +-15 +-14 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-35 +-91 +-128 +-128 +-108 +-59 +-28 +-20 +-26 +-40 +-51 +-58 +-57 +-54 +-47 +-42 +-38 +-35 +-33 +-33 +-33 +-33 +-31 +-31 +-29 +-28 +-26 +-25 +-24 +-24 +-23 +-23 +-22 +-22 +-21 +-22 +-22 +-22 +-21 +-21 +-20 +-19 +-18 +-19 +-18 +-18 +-18 +-18 +-17 +-17 +-17 +-17 +-16 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-16 +-15 +-15 +52 +127 +127 +127 +115 +53 +5 +-24 +-32 +-27 +-14 +-1 +10 +13 +14 +9 +5 +-1 +-4 +-7 +-7 +-8 +-7 +-7 +-6 +-7 +-7 +-8 +-8 +-10 +-10 +-11 +-11 +-12 +-12 +-12 +-12 +-13 +-12 +-13 +-13 +-13 +-13 +-14 +-14 +-14 +-14 +-15 +-14 +-15 +-14 +-15 +-14 +-15 +-14 +-15 +-15 +-15 +-15 +-16 +-15 +-15 +-15 +-15 +-34 +-90 +-128 +-128 +-109 +-61 +-31 +-22 +-28 +-40 +-51 +-58 +-58 +-55 +-48 +-43 +-38 +-36 +-34 +-34 +-33 +-33 +-32 +-31 +-29 +-28 +-26 +-26 +-25 +-25 +-23 +-23 +45 +127 +127 +127 +109 +47 +0 +-28 +-36 +-31 +-17 +-4 +7 +11 +11 +7 +3 +-3 +-6 +-9 +-9 +-9 +-8 +-9 +-8 +-8 +-8 +-10 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-107 +-59 +-29 +-20 +-26 +-39 +-50 +-57 +-57 +-53 +-47 +-42 +-37 +-35 +-33 +-33 +-33 +-33 +-31 +-30 +-28 +-27 +-25 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +110 +48 +0 +-29 +-36 +-31 +-17 +-4 +7 +11 +12 +7 +2 +-3 +-6 +-9 +-9 +-9 +-8 +-8 +-7 +-8 +-8 +-9 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-107 +-59 +-29 +-20 +-26 +-39 +-50 +-57 +-56 +-53 +-47 +-42 +-37 +-35 +-33 +-33 +-32 +-32 +-31 +-30 +-28 +-28 +-26 +-26 +-24 +-24 +-23 +-22 +45 +127 +127 +127 +109 +48 +0 +-28 +-36 +-30 +-17 +-4 +7 +11 +12 +7 +3 +-3 +-6 +-9 +-9 +-9 +-8 +-8 +-7 +-8 +-8 +-10 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-107 +-59 +-28 +-20 +-26 +-39 +-50 +-56 +-57 +-53 +-47 +-42 +-37 +-35 +-33 +-33 +-32 +-32 +-31 +-30 +-28 +-28 +-26 +-26 +-25 +-24 +-23 +-23 +45 +127 +127 +127 +109 +48 +0 +-29 +-36 +-31 +-17 +-4 +7 +11 +12 +8 +3 +-3 +-6 +-9 +-9 +-10 +-8 +-8 +-8 +-8 +-8 +-10 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-107 +-59 +-29 +-20 +-25 +-39 +-49 +-56 +-57 +-53 +-47 +-42 +-37 +-35 +-33 +-33 +-32 +-33 +-31 +-30 +-28 +-28 +-26 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +110 +47 +0 +-29 +-36 +-31 +-17 +-4 +7 +11 +11 +7 +2 +-3 +-6 +-9 +-9 +-9 +-8 +-8 +-7 +-8 +-8 +-10 +-10 +-11 +-11 +-11 +-32 +-88 +-128 +-128 +-107 +-59 +-29 +-20 +-26 +-39 +-49 +-57 +-57 +-54 +-47 +-42 +-37 +-35 +-33 +-33 +-32 +-32 +-31 +-30 +-28 +-27 +-25 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +110 +48 +0 +-28 +-36 +-31 +-17 +-4 +7 +11 +12 +7 +3 +-3 +-6 +-9 +-9 +-10 +-8 +-9 +-9 +-8 +-8 +-9 +-9 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-107 +-59 +-29 +-20 +-26 +-39 +-50 +-57 +-57 +-53 +-47 +-42 +-37 +-34 +-33 +-33 +-32 +-32 +-31 +-30 +-28 +-28 +-26 +-26 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +110 +48 +0 +-28 +-36 +-31 +-17 +-4 +7 +11 +11 +7 +2 +-3 +-6 +-9 +-10 +-10 +-9 +-8 +-8 +-8 +-8 +-10 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-107 +-59 +-29 +-20 +-26 +-39 +-50 +-57 +-57 +-53 +-47 +-42 +-37 +-35 +-33 +-33 +-32 +-32 +-31 +-30 +-28 +-27 +-26 +-25 +-24 +-24 +-23 +-23 +44 +127 +127 +127 +110 +48 +0 +-28 +-36 +-31 +-17 +-4 +7 +11 +12 +7 +3 +-3 +-6 +-9 +-9 +-10 +-8 +-8 +-7 +-8 +-9 +-10 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-105 +-57 +-27 +-18 +-24 +-38 +-49 +-56 +-56 +-53 +-47 +-41 +-37 +-34 +-33 +-33 +-32 +-32 +-30 +-30 +-28 +-28 +-26 +-25 +-24 +-23 +-23 +-23 +-22 +-22 +-21 +-21 +-20 +-20 +-19 +-19 +-18 +-19 +-17 +-18 +-17 +-18 +-17 +-17 +-16 +-17 +-16 +-16 +-15 +-16 +-15 +-16 +-15 +-15 +-15 +-15 +-14 +-15 +-15 +-15 +52 +127 +127 +127 +114 +51 +3 +-26 +-33 +-28 +-14 +-1 +9 +13 +13 +9 +4 +-1 +-5 +-8 +-7 +-8 +-7 +-7 +-7 +-8 +-8 +-9 +-9 +-10 +-10 +-11 +-31 +-87 +-128 +-128 +-105 +-57 +-26 +-18 +-24 +-38 +-49 +-56 +-56 +-52 +-46 +-41 +-36 +-34 +-33 +-32 +-31 +-32 +-30 +-30 +-28 +-27 +-25 +-25 +-24 +-24 +-22 +-23 +45 +127 +127 +127 +108 +46 +-2 +-30 +-37 +-31 +-17 +-4 +6 +11 +11 +7 +2 +-3 +-6 +-9 +-10 +-10 +-9 +-9 +-8 +-8 +-8 +-9 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-107 +-59 +-29 +-20 +-26 +-39 +-50 +-57 +-57 +-53 +-47 +-42 +-36 +-35 +-33 +-33 +-32 +-32 +-31 +-30 +-28 +-27 +-26 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +109 +48 +0 +-28 +-36 +-31 +-17 +-4 +7 +11 +11 +7 +2 +-3 +-6 +-9 +-9 +-9 +-8 +-9 +-8 +-9 +-8 +-9 +-9 +-11 +-11 +-12 +-12 +-12 +-12 +-13 +-12 +-13 +-13 +-14 +-13 +-14 +-13 +-14 +-14 +-14 +-14 +-16 +-14 +-15 +-14 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-14 +-15 +-15 +-16 +-15 +-16 +-35 +-91 +-128 +-128 +-109 +-62 +-31 +-22 +-28 +-40 +-51 +-58 +-58 +-55 +-49 +-43 +-39 +-36 +-34 +-34 +-33 +-33 +-31 +-31 +-29 +-28 +-26 +-26 +-25 +-25 +-23 +-23 +45 +127 +127 +127 +109 +47 +-1 +-28 +-36 +-31 +-17 +-4 +7 +11 +11 +7 +2 +-3 +-6 +-9 +-9 +-10 +-8 +-8 +-8 +-8 +-9 +-10 +-10 +-11 +-11 +-12 +-31 +-87 +-128 +-128 +-107 +-59 +-29 +-20 +-26 +-39 +-49 +-57 +-56 +-53 +-47 +-42 +-37 +-35 +-33 +-33 +-32 +-33 +-31 +-30 +-28 +-27 +-25 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +110 +48 +0 +-28 +-36 +-31 +-17 +-4 +6 +11 +12 +8 +3 +-3 +-6 +-9 +-10 +-9 +-8 +-8 +-7 +-8 +-8 +-10 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-107 +-59 +-29 +-20 +-26 +-39 +-50 +-57 +-57 +-53 +-47 +-42 +-37 +-35 +-33 +-33 +-32 +-32 +-31 +-30 +-28 +-27 +-26 +-26 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +109 +48 +-1 +-29 +-36 +-31 +-17 +-4 +7 +11 +11 +7 +3 +-3 +-6 +-9 +-9 +-9 +-8 +-8 +-8 +-9 +-9 +-10 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-107 +-59 +-29 +-20 +-26 +-39 +-49 +-56 +-57 +-53 +-47 +-42 +-37 +-35 +-33 +-33 +-32 +-32 +-31 +-30 +-28 +-27 +-26 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +110 +48 +0 +-29 +-36 +-32 +-17 +-3 +7 +11 +12 +7 +2 +-3 +-6 +-9 +-8 +-9 +-8 +-8 +-7 +-8 +-8 +-10 +-10 +-11 +-11 +-12 +-31 +-88 +-128 +-128 +-107 +-59 +-29 +-20 +-26 +-39 +-50 +-56 +-57 +-53 +-47 +-42 +-37 +-35 +-33 +-33 +-32 +-32 +-31 +-30 +-28 +-27 +-25 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +110 +48 +0 +-28 +-36 +-31 +-17 +-4 +7 +11 +12 +7 +3 +-3 +-6 +-9 +-9 +-9 +-8 +-8 +-7 +-8 +-8 +-9 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-105 +-57 +-27 +-18 +-24 +-38 +-49 +-56 +-56 +-52 +-46 +-41 +-36 +-34 +-32 +-32 +-31 +-32 +-30 +-29 +-28 +-27 +-25 +-25 +-24 +-24 +-22 +-22 +-21 +-21 +-21 +-21 +-20 +-20 +-20 +-19 +-18 +-18 +-17 +-18 +-17 +-18 +-17 +-17 +-16 +-16 +-16 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +-15 +-15 +-15 +-15 +52 +127 +127 +127 +114 +51 +3 +-25 +-33 +-28 +-15 +-2 +9 +13 +13 +9 +4 +-2 +-5 +-7 +-8 +-8 +-7 +-8 +-7 +-8 +-8 +-9 +-9 +-11 +-10 +-11 +-31 +-87 +-128 +-128 +-105 +-57 +-26 +-18 +-24 +-38 +-49 +-56 +-56 +-53 +-46 +-41 +-36 +-34 +-32 +-33 +-32 +-32 +-30 +-29 +-28 +-27 +-25 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +109 +46 +-1 +-30 +-37 +-32 +-17 +-5 +6 +10 +11 +7 +2 +-3 +-7 +-9 +-10 +-10 +-8 +-8 +-7 +-8 +-8 +-10 +-10 +-11 +-12 +-12 +-32 +-88 +-128 +-128 +-106 +-57 +-26 +-18 +-25 +-38 +-49 +-56 +-56 +-52 +-46 +-41 +-36 +-34 +-32 +-33 +-32 +-32 +-30 +-29 +-28 +-27 +-25 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +108 +46 +-2 +-30 +-38 +-32 +-18 +-5 +6 +10 +11 +6 +2 +-4 +-6 +-10 +-10 +-10 +-9 +-8 +-7 +-8 +-8 +-10 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-105 +-57 +-26 +-19 +-25 +-38 +-49 +-56 +-56 +-53 +-46 +-41 +-37 +-34 +-33 +-33 +-32 +-32 +-31 +-30 +-28 +-27 +-25 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +108 +46 +-2 +-30 +-37 +-31 +-18 +-5 +6 +10 +10 +6 +2 +-3 +-6 +-9 +-9 +-10 +-8 +-9 +-8 +-9 +-9 +-10 +-10 +-11 +-11 +-11 +-32 +-88 +-128 +-128 +-106 +-57 +-27 +-18 +-24 +-38 +-49 +-56 +-56 +-52 +-47 +-41 +-36 +-34 +-33 +-33 +-32 +-32 +-30 +-29 +-28 +-27 +-26 +-25 +-24 +-24 +-23 +-22 +45 +127 +127 +127 +108 +46 +-2 +-30 +-37 +-32 +-18 +-5 +6 +11 +11 +6 +2 +-4 +-7 +-9 +-10 +-10 +-9 +-9 +-8 +-9 +-9 +-10 +-10 +-11 +-11 +-12 +-31 +-88 +-128 +-128 +-106 +-57 +-27 +-18 +-24 +-38 +-49 +-56 +-56 +-53 +-46 +-41 +-36 +-34 +-32 +-33 +-32 +-32 +-30 +-29 +-28 +-27 +-25 +-25 +-24 +-24 +-23 +-22 +45 +127 +127 +127 +108 +46 +-2 +-30 +-37 +-32 +-18 +-4 +6 +10 +10 +7 +2 +-3 +-7 +-9 +-10 +-10 +-8 +-8 +-7 +-8 +-8 +-10 +-10 +-12 +-11 +-12 +-32 +-87 +-128 +-128 +-106 +-57 +-27 +-19 +-24 +-38 +-49 +-56 +-56 +-53 +-46 +-42 +-36 +-34 +-32 +-33 +-32 +-32 +-30 +-30 +-28 +-27 +-25 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +108 +46 +-2 +-30 +-37 +-32 +-18 +-5 +6 +10 +11 +7 +2 +-4 +-7 +-10 +-10 +-10 +-9 +-9 +-8 +-9 +-8 +-10 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-106 +-57 +-26 +-18 +-24 +-37 +-49 +-56 +-57 +-53 +-46 +-41 +-36 +-34 +-32 +-32 +-31 +-32 +-31 +-30 +-28 +-27 +-25 +-25 +-24 +-24 +-23 +-23 +46 +127 +127 +127 +108 +45 +-2 +-30 +-37 +-32 +-18 +-5 +6 +11 +11 +7 +2 +-3 +-6 +-9 +-10 +-10 +-9 +-8 +-8 +-8 +-9 +-10 +-9 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-106 +-57 +-27 +-19 +-25 +-38 +-49 +-56 +-56 +-52 +-46 +-41 +-36 +-34 +-33 +-33 +-32 +-32 +-30 +-30 +-28 +-28 +-25 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +109 +47 +-1 +-30 +-38 +-32 +-18 +-5 +6 +11 +11 +7 +2 +-3 +-6 +-9 +-9 +-10 +-9 +-9 +-8 +-9 +-9 +-10 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-106 +-57 +-27 +-18 +-24 +-38 +-49 +-56 +-56 +-53 +-46 +-41 +-36 +-34 +-33 +-33 +-32 +-32 +-30 +-30 +-28 +-27 +-25 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +108 +46 +-2 +-30 +-38 +-32 +-18 +-5 +6 +10 +10 +7 +2 +-3 +-6 +-9 +-9 +-10 +-9 +-10 +-8 +-8 +-8 +-9 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-107 +-59 +-28 +-20 +-26 +-39 +-50 +-57 +-57 +-53 +-47 +-42 +-37 +-35 +-33 +-33 +-33 +-33 +-31 +-30 +-28 +-28 +-26 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +110 +48 +0 +-29 +-36 +-30 +-17 +-4 +7 +11 +12 +7 +3 +-3 +-6 +-9 +-9 +-10 +-8 +-9 +-7 +-8 +-8 +-10 +-10 +-11 +-11 +-12 +-12 +-13 +-12 +-13 +-12 +-13 +-13 +-14 +-13 +-14 +-13 +-14 +-14 +-15 +-14 +-15 +-14 +-15 +-14 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-14 +-15 +-15 +-15 +-15 +-16 +-35 +-91 +-128 +-128 +-109 +-61 +-31 +-23 +-28 +-41 +-51 +-58 +-58 +-55 +-49 +-43 +-38 +-36 +-34 +-34 +-34 +-33 +-31 +-31 +-29 +-28 +-26 +-26 +-25 +-25 +-23 +-23 +45 +127 +127 +127 +109 +48 +0 +-29 +-36 +-31 +-17 +-4 +7 +11 +11 +7 +2 +-3 +-6 +-9 +-9 +-9 +-8 +-8 +-8 +-8 +-8 +-9 +-9 +-11 +-11 +-12 +-32 +-87 +-128 +-128 +-105 +-57 +-27 +-19 +-24 +-38 +-49 +-56 +-56 +-52 +-46 +-41 +-37 +-34 +-33 +-33 +-32 +-32 +-31 +-29 +-28 +-27 +-25 +-25 +-24 +-24 +-23 +-23 +-22 +-22 +-21 +-21 +-21 +-22 +-21 +-21 +-20 +-20 +-19 +-19 +-18 +-18 +-17 +-18 +-17 +-17 +-16 +-17 +-16 +-17 +-16 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +52 +127 +127 +127 +115 +53 +5 +-24 +-32 +-27 +-14 +-1 +10 +14 +14 +10 +5 +-1 +-4 +-6 +-7 +-7 +-6 +-7 +-6 +-7 +-7 +-8 +-9 +-10 +-10 +-11 +-11 +-12 +-12 +-12 +-12 +-13 +-12 +-13 +-13 +-14 +-13 +-14 +-13 +-14 +-14 +-14 +-13 +-14 +-14 +-15 +-14 +-15 +-14 +-15 +-14 +-15 +-14 +-15 +-14 +-15 +-15 +-16 +-35 +-91 +-128 +-128 +-109 +-61 +-31 +-22 +-28 +-40 +-51 +-58 +-58 +-55 +-48 +-43 +-38 +-36 +-34 +-34 +-33 +-33 +-31 +-31 +-29 +-28 +-26 +-26 +-25 +-25 +-24 +-23 +44 +127 +127 +127 +110 +48 +0 +-29 +-36 +-31 +-17 +-4 +7 +11 +11 +7 +2 +-3 +-6 +-9 +-9 +-9 +-8 +-8 +-7 +-8 +-8 +-10 +-10 +-11 +-11 +-12 +-31 +-87 +-128 +-128 +-107 +-59 +-29 +-20 +-26 +-39 +-50 +-57 +-57 +-53 +-47 +-42 +-37 +-34 +-33 +-33 +-33 +-32 +-31 +-30 +-28 +-27 +-26 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +110 +48 +0 +-29 +-36 +-31 +-17 +-4 +7 +11 +11 +7 +2 +-3 +-6 +-9 +-9 +-10 +-8 +-9 +-8 +-9 +-8 +-10 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-105 +-57 +-27 +-19 +-25 +-38 +-49 +-56 +-56 +-53 +-46 +-41 +-36 +-34 +-32 +-33 +-32 +-32 +-30 +-29 +-28 +-27 +-25 +-25 +-24 +-24 +-23 +-22 +-21 +-21 +-21 +-21 +-20 +-20 +-19 +-19 +-18 +-18 +-17 +-18 +-17 +-17 +-16 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-16 +-15 +-15 +-15 +-15 +-14 +-15 +-15 +-16 +52 +127 +127 +127 +114 +51 +3 +-25 +-33 +-28 +-14 +-2 +9 +13 +14 +9 +4 +-2 +-5 +-7 +-7 +-8 +-7 +-7 +-7 +-7 +-8 +-9 +-9 +-11 +-11 +-11 +-31 +-87 +-128 +-128 +-107 +-59 +-29 +-20 +-26 +-39 +-49 +-56 +-56 +-53 +-47 +-42 +-37 +-34 +-33 +-33 +-32 +-32 +-31 +-30 +-28 +-27 +-25 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +109 +48 +0 +-29 +-36 +-31 +-17 +-4 +6 +11 +11 +7 +2 +-3 +-6 +-8 +-9 +-10 +-9 +-9 +-8 +-8 +-8 +-9 +-10 +-11 +-11 +-11 +-11 +-12 +-12 +-13 +-12 +-13 +-13 +-13 +-13 +-14 +-13 +-14 +-13 +-14 +-14 +-15 +-14 +-15 +-14 +-15 +-14 +-15 +-14 +-15 +-15 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +-35 +-91 +-128 +-128 +-107 +-59 +-29 +-21 +-27 +-40 +-51 +-57 +-57 +-54 +-47 +-42 +-37 +-35 +-33 +-34 +-33 +-33 +-31 +-30 +-28 +-27 +-26 +-25 +-25 +-24 +-24 +-23 +-22 +-22 +-21 +-22 +-22 +-22 +-21 +-21 +-20 +-20 +-19 +-19 +-18 +-18 +-18 +-18 +-17 +-17 +-17 +-17 +-16 +-17 +-16 +-16 +-16 +-16 +-15 +-16 +-15 +-16 +-15 +-15 +52 +127 +127 +127 +115 +53 +5 +-24 +-32 +-27 +-14 +-1 +9 +13 +14 +10 +5 +0 +-4 +-7 +-7 +-8 +-7 +-7 +-6 +-7 +-7 +-8 +-9 +-10 +-10 +-11 +-11 +-11 +-11 +-12 +-12 +-13 +-12 +-13 +-12 +-13 +-13 +-14 +-13 +-14 +-14 +-14 +-14 +-15 +-14 +-15 +-15 +-16 +-15 +-16 +-15 +-15 +-14 +-15 +-14 +-15 +-15 +-15 +-35 +-91 +-128 +-128 +-107 +-60 +-29 +-20 +-26 +-39 +-50 +-57 +-57 +-54 +-48 +-42 +-37 +-35 +-34 +-34 +-33 +-32 +-31 +-30 +-28 +-28 +-26 +-25 +-24 +-24 +-23 +-23 +-22 +-22 +-21 +-22 +-21 +-21 +-20 +-20 +-19 +-19 +-18 +-19 +-18 +-18 +-18 +-18 +-17 +-18 +-17 +-17 +-16 +-17 +-16 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +52 +127 +127 +127 +115 +53 +5 +-24 +-32 +-27 +-14 +-1 +10 +13 +14 +10 +5 +-1 +-4 +-7 +-8 +-8 +-7 +-7 +-6 +-7 +-7 +-9 +-9 +-10 +-10 +-11 +-11 +-11 +-11 +-12 +-12 +-13 +-13 +-14 +-13 +-13 +-13 +-14 +-13 +-14 +-14 +-15 +-14 +-15 +-14 +-15 +-14 +-15 +-15 +-15 +-15 +-15 +-14 +-15 +-14 +-15 +-15 +-16 +-35 +-90 +-128 +-128 +-109 +-61 +-30 +-22 +-27 +-41 +-51 +-59 +-58 +-55 +-49 +-43 +-38 +-35 +-34 +-34 +-33 +-33 +-31 +-31 +-29 +-28 +-26 +-26 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +110 +47 +0 +-29 +-36 +-31 +-17 +-4 +7 +11 +12 +7 +2 +-3 +-6 +-9 +-9 +-10 +-8 +-8 +-7 +-8 +-8 +-10 +-10 +-11 +-11 +-12 +-32 +-87 +-128 +-128 +-107 +-59 +-29 +-20 +-25 +-39 +-50 +-56 +-57 +-53 +-47 +-42 +-37 +-35 +-33 +-33 +-32 +-33 +-31 +-30 +-29 +-27 +-26 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +110 +48 +0 +-29 +-36 +-30 +-17 +-4 +7 +11 +12 +7 +2 +-3 +-6 +-9 +-9 +-9 +-8 +-8 +-8 +-8 +-8 +-9 +-10 +-11 +-11 +-13 +-31 +-87 +-128 +-128 +-105 +-57 +-27 +-19 +-24 +-38 +-49 +-56 +-56 +-53 +-46 +-41 +-36 +-34 +-33 +-33 +-32 +-32 +-30 +-30 +-28 +-27 +-25 +-25 +-24 +-24 +-23 +-22 +-21 +-21 +-21 +-21 +-20 +-20 +-19 +-19 +-18 +-18 +-17 +-18 +-17 +-18 +-17 +-17 +-16 +-17 +-16 +-16 +-15 +-17 +-15 +-16 +-15 +-16 +-15 +-15 +-14 +-15 +-15 +-15 +52 +127 +127 +127 +113 +51 +3 +-25 +-33 +-28 +-14 +-1 +10 +13 +13 +9 +4 +-2 +-5 +-8 +-8 +-9 +-7 +-7 +-6 +-7 +-7 +-8 +-9 +-10 +-11 +-12 +-31 +-87 +-128 +-128 +-107 +-59 +-28 +-20 +-25 +-38 +-49 +-56 +-56 +-53 +-47 +-42 +-36 +-35 +-33 +-33 +-32 +-32 +-30 +-29 +-28 +-27 +-26 +-25 +-25 +-24 +-22 +-23 +45 +127 +127 +127 +110 +48 +0 +-29 +-36 +-31 +-17 +-4 +7 +11 +11 +7 +2 +-3 +-6 +-8 +-9 +-9 +-8 +-8 +-7 +-8 +-8 +-9 +-10 +-11 +-11 +-12 +-11 +-12 +-12 +-13 +-12 +-13 +-13 +-13 +-13 +-14 +-13 +-14 +-14 +-15 +-14 +-15 +-14 +-15 +-14 +-15 +-15 +-16 +-15 +-16 +-15 +-16 +-15 +-15 +-14 +-15 +-15 +-15 +-35 +-90 +-128 +-128 +-109 +-61 +-31 +-22 +-28 +-41 +-51 +-58 +-58 +-55 +-48 +-43 +-38 +-36 +-34 +-34 +-33 +-33 +-32 +-31 +-29 +-28 +-26 +-26 +-25 +-25 +-24 +-24 +44 +127 +127 +127 +109 +48 +0 +-29 +-36 +-31 +-17 +-4 +7 +11 +11 +7 +3 +-3 +-6 +-9 +-9 +-10 +-8 +-8 +-7 +-9 +-8 +-9 +-9 +-10 +-10 +-12 +-32 +-88 +-128 +-128 +-106 +-57 +-26 +-18 +-24 +-38 +-49 +-56 +-56 +-52 +-46 +-41 +-36 +-34 +-33 +-32 +-32 +-32 +-30 +-29 +-28 +-27 +-25 +-25 +-24 +-24 +-22 +-22 +-21 +-21 +-21 +-22 +-21 +-21 +-20 +-21 +-20 +-19 +-18 +-19 +-18 +-18 +-17 +-18 +-17 +-17 +-17 +-17 +-16 +-17 +-16 +-17 +-15 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +52 +127 +127 +127 +115 +53 +5 +-24 +-32 +-27 +-14 +-1 +9 +14 +14 +10 +5 +-1 +-5 +-7 +-8 +-8 +-7 +-7 +-6 +-7 +-7 +-9 +-9 +-10 +-10 +-11 +-11 +-11 +-11 +-12 +-12 +-13 +-12 +-13 +-13 +-14 +-13 +-14 +-14 +-14 +-14 +-15 +-14 +-15 +-14 +-15 +-14 +-15 +-15 +-15 +-14 +-15 +-15 +-16 +-15 +-16 +-15 +-16 +-35 +-91 +-128 +-128 +-108 +-59 +-29 +-20 +-26 +-40 +-51 +-58 +-58 +-55 +-48 +-42 +-37 +-35 +-33 +-34 +-33 +-32 +-31 +-30 +-28 +-28 +-26 +-26 +-25 +-24 +-23 +-23 +-21 +-21 +-21 +-22 +-22 +-22 +-21 +-21 +-19 +-20 +-19 +-19 +-18 +-18 +-17 +-18 +-17 +-18 +-17 +-18 +-17 +-17 +-16 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +52 +127 +127 +127 +115 +53 +5 +-24 +-32 +-27 +-13 +-1 +10 +13 +14 +9 +5 +-1 +-4 +-7 +-7 +-8 +-7 +-7 +-6 +-7 +-7 +-8 +-8 +-10 +-10 +-11 +-11 +-12 +-12 +-12 +-12 +-12 +-12 +-13 +-13 +-14 +-13 +-14 +-13 +-14 +-13 +-14 +-14 +-15 +-14 +-16 +-14 +-15 +-14 +-15 +-15 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +-35 +-90 +-128 +-128 +-108 +-59 +-29 +-20 +-26 +-40 +-51 +-58 +-58 +-54 +-48 +-43 +-38 +-35 +-33 +-34 +-33 +-33 +-31 +-30 +-28 +-28 +-26 +-26 +-24 +-24 +-23 +-23 +-22 +-22 +-21 +-21 +-20 +-20 +-19 +-19 +-18 +-19 +-17 +-18 +-17 +-18 +-17 +-17 +-17 +-17 +-16 +-17 +-16 +-16 +-16 +-16 +-15 +-16 +-15 +-16 +-15 +-15 +-14 +-15 +52 +127 +127 +127 +114 +51 +3 +-25 +-33 +-28 +-15 +-2 +9 +13 +14 +9 +5 +-2 +-5 +-7 +-8 +-8 +-7 +-7 +-7 +-7 +-7 +-9 +-9 +-10 +-10 +-11 +-31 +-87 +-128 +-128 +-105 +-56 +-26 +-18 +-24 +-37 +-49 +-56 +-56 +-53 +-46 +-41 +-37 +-34 +-32 +-32 +-32 +-32 +-30 +-30 +-28 +-27 +-25 +-25 +-23 +-24 +-23 +-23 +45 +127 +127 +127 +108 +46 +-2 +-30 +-37 +-32 +-18 +-5 +6 +10 +10 +6 +2 +-3 +-6 +-9 +-10 +-10 +-9 +-9 +-8 +-8 +-8 +-10 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-107 +-59 +-29 +-20 +-26 +-39 +-49 +-56 +-56 +-53 +-47 +-42 +-37 +-35 +-33 +-33 +-33 +-33 +-31 +-30 +-28 +-28 +-26 +-26 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +109 +48 +0 +-28 +-36 +-30 +-17 +-4 +7 +11 +12 +7 +3 +-3 +-6 +-9 +-9 +-9 +-8 +-8 +-7 +-8 +-8 +-10 +-10 +-11 +-11 +-12 +-11 +-12 +-12 +-13 +-13 +-13 +-13 +-13 +-12 +-13 +-13 +-14 +-14 +-15 +-14 +-14 +-14 +-15 +-14 +-15 +-15 +-16 +-15 +-16 +-15 +-15 +-14 +-15 +-15 +-15 +-15 +-15 +-35 +-91 +-128 +-128 +-108 +-59 +-29 +-20 +-26 +-40 +-51 +-58 +-58 +-54 +-47 +-42 +-37 +-35 +-33 +-34 +-33 +-33 +-31 +-30 +-28 +-28 +-26 +-25 +-24 +-24 +-23 +-23 +-22 +-22 +-21 +-22 +-21 +-21 +-21 +-21 +-20 +-20 +-19 +-19 +-18 +-18 +-17 +-18 +-17 +-18 +-17 +-17 +-16 +-17 +-16 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +52 +127 +127 +127 +115 +53 +4 +-24 +-32 +-27 +-14 +-1 +9 +13 +14 +9 +5 +-1 +-4 +-7 +-7 +-8 +-7 +-7 +-6 +-6 +-7 +-8 +-9 +-10 +-10 +-11 +-11 +-12 +-11 +-12 +-12 +-13 +-12 +-13 +-13 +-13 +-14 +-14 +-13 +-14 +-13 +-14 +-14 +-15 +-14 +-15 +-14 +-15 +-15 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-35 +-91 +-128 +-128 +-108 +-59 +-29 +-20 +-26 +-40 +-51 +-58 +-57 +-54 +-47 +-42 +-37 +-35 +-33 +-33 +-32 +-33 +-31 +-30 +-28 +-27 +-26 +-25 +-24 +-24 +-23 +-23 +-21 +-22 +-21 +-22 +-21 +-22 +-21 +-21 +-20 +-20 +-19 +-19 +-18 +-18 +-17 +-18 +-17 +-18 +-17 +-17 +-16 +-17 +-16 +-16 +-15 +-16 +-15 +-16 +-16 +-16 +-15 +-15 +52 +127 +127 +127 +115 +53 +4 +-25 +-32 +-27 +-14 +-1 +10 +13 +14 +9 +5 +-1 +-4 +-7 +-7 +-8 +-7 +-7 +-6 +-7 +-7 +-9 +-9 +-10 +-10 +-11 +-11 +-11 +-11 +-12 +-12 +-13 +-12 +-14 +-13 +-13 +-12 +-13 +-13 +-14 +-14 +-15 +-14 +-15 +-14 +-15 +-14 +-15 +-15 +-15 +-14 +-15 +-14 +-15 +-15 +-16 +-15 +-16 +-35 +-91 +-128 +-128 +-109 +-61 +-31 +-22 +-28 +-40 +-51 +-58 +-58 +-54 +-48 +-43 +-38 +-36 +-34 +-34 +-33 +-33 +-31 +-30 +-29 +-28 +-26 +-26 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +109 +47 +-1 +-29 +-36 +-31 +-17 +-4 +7 +11 +11 +7 +3 +-3 +-6 +-9 +-9 +-10 +-9 +-8 +-7 +-8 +-8 +-9 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-105 +-57 +-27 +-18 +-24 +-37 +-49 +-56 +-56 +-53 +-47 +-41 +-37 +-34 +-33 +-32 +-32 +-32 +-30 +-30 +-28 +-27 +-25 +-25 +-24 +-24 +-23 +-23 +-22 +-22 +-21 +-22 +-22 +-21 +-20 +-21 +-19 +-20 +-19 +-19 +-18 +-19 +-17 +-18 +-17 +-17 +-17 +-17 +-16 +-17 +-16 +-17 +-15 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +52 +127 +127 +127 +115 +53 +5 +-24 +-32 +-27 +-13 +-1 +10 +14 +14 +10 +5 +-1 +-4 +-7 +-7 +-8 +-7 +-7 +-6 +-7 +-7 +-8 +-9 +-10 +-10 +-11 +-11 +-12 +-11 +-12 +-12 +-12 +-12 +-13 +-13 +-13 +-13 +-14 +-13 +-14 +-14 +-15 +-14 +-15 +-14 +-15 +-14 +-15 +-14 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-15 +-16 +-35 +-91 +-128 +-128 +-108 +-59 +-29 +-21 +-27 +-40 +-51 +-58 +-58 +-54 +-48 +-42 +-38 +-35 +-34 +-34 +-33 +-33 +-32 +-31 +-29 +-28 +-26 +-25 +-24 +-24 +-23 +-23 +-22 +-22 +-21 +-22 +-21 +-22 +-21 +-21 +-20 +-19 +-18 +-19 +-18 +-18 +-17 +-18 +-17 +-18 +-16 +-17 +-16 +-17 +-16 +-17 +-15 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +52 +127 +127 +127 +115 +53 +5 +-24 +-32 +-27 +-14 +-1 +10 +13 +14 +9 +5 +-1 +-4 +-7 +-7 +-7 +-6 +-7 +-6 +-7 +-7 +-8 +-8 +-10 +-10 +-11 +-11 +-12 +-12 +-12 +-12 +-12 +-12 +-13 +-12 +-13 +-13 +-14 +-13 +-13 +-13 +-14 +-14 +-14 +-14 +-15 +-14 +-15 +-15 +-15 +-14 +-15 +-14 +-15 +-15 +-16 +-15 +-16 +-35 +-90 +-128 +-128 +-109 +-61 +-31 +-22 +-28 +-41 +-52 +-59 +-58 +-55 +-48 +-43 +-38 +-36 +-34 +-34 +-33 +-33 +-32 +-31 +-29 +-28 +-26 +-26 +-25 +-24 +-24 +-23 +45 +127 +127 +127 +109 +47 +0 +-29 +-37 +-31 +-17 +-4 +7 +11 +11 +7 +3 +-3 +-6 +-9 +-10 +-10 +-9 +-8 +-8 +-8 +-8 +-10 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-107 +-59 +-29 +-20 +-26 +-39 +-50 +-57 +-57 +-53 +-47 +-42 +-37 +-35 +-33 +-33 +-32 +-32 +-31 +-30 +-28 +-27 +-26 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +110 +48 +0 +-28 +-36 +-31 +-17 +-4 +7 +11 +11 +7 +2 +-3 +-6 +-8 +-8 +-9 +-8 +-8 +-8 +-8 +-8 +-10 +-9 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-107 +-58 +-28 +-20 +-25 +-39 +-50 +-57 +-57 +-54 +-47 +-42 +-37 +-35 +-33 +-33 +-32 +-32 +-31 +-30 +-28 +-27 +-26 +-26 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +110 +48 +0 +-28 +-36 +-30 +-17 +-4 +7 +11 +12 +7 +3 +-3 +-6 +-9 +-9 +-10 +-9 +-8 +-7 +-8 +-8 +-10 +-10 +-11 +-11 +-12 +-31 +-87 +-128 +-128 +-107 +-59 +-29 +-20 +-26 +-39 +-50 +-57 +-56 +-53 +-47 +-42 +-37 +-35 +-33 +-33 +-32 +-33 +-31 +-31 +-29 +-27 +-26 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +110 +48 +0 +-28 +-36 +-31 +-17 +-4 +7 +11 +12 +7 +2 +-3 +-6 +-9 +-9 +-9 +-8 +-8 +-7 +-8 +-8 +-10 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-106 +-59 +-28 +-20 +-26 +-39 +-49 +-56 +-56 +-53 +-47 +-42 +-37 +-35 +-33 +-33 +-32 +-32 +-31 +-30 +-29 +-28 +-26 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +110 +48 +0 +-29 +-36 +-31 +-17 +-4 +7 +11 +11 +7 +3 +-3 +-6 +-9 +-9 +-9 +-8 +-9 +-8 +-8 +-8 +-10 +-10 +-11 +-11 +-12 +-31 +-88 +-128 +-128 +-107 +-59 +-29 +-20 +-26 +-39 +-50 +-56 +-57 +-53 +-47 +-42 +-37 +-35 +-33 +-33 +-32 +-32 +-31 +-30 +-28 +-28 +-26 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +110 +48 +0 +-28 +-36 +-30 +-17 +-4 +7 +11 +12 +7 +2 +-3 +-6 +-9 +-10 +-10 +-9 +-8 +-8 +-8 +-8 +-9 +-10 +-11 +-12 +-12 +-32 +-88 +-128 +-128 +-107 +-59 +-28 +-20 +-26 +-39 +-50 +-57 +-57 +-53 +-47 +-42 +-37 +-35 +-33 +-33 +-32 +-33 +-30 +-30 +-28 +-28 +-26 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +110 +48 +0 +-28 +-36 +-31 +-17 +-4 +7 +11 +12 +7 +3 +-3 +-6 +-9 +-9 +-9 +-8 +-8 +-8 +-9 +-8 +-9 +-9 +-11 +-10 +-11 +-31 +-87 +-128 +-128 +-107 +-59 +-29 +-20 +-26 +-39 +-50 +-57 +-57 +-53 +-47 +-42 +-37 +-35 +-33 +-33 +-32 +-33 +-31 +-30 +-28 +-28 +-26 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +110 +48 +0 +-28 +-36 +-31 +-17 +-4 +7 +11 +12 +7 +2 +-3 +-6 +-9 +-9 +-10 +-9 +-8 +-8 +-8 +-8 +-10 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-105 +-57 +-27 +-19 +-25 +-38 +-49 +-56 +-56 +-52 +-46 +-41 +-36 +-34 +-33 +-32 +-31 +-32 +-30 +-30 +-28 +-27 +-25 +-25 +-24 +-24 +-23 +-23 +-21 +-22 +-21 +-21 +-20 +-20 +-19 +-19 +-18 +-18 +-17 +-18 +-17 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +-15 +-15 +52 +127 +127 +127 +113 +51 +3 +-26 +-33 +-28 +-14 +-1 +9 +13 +13 +9 +4 +-1 +-4 +-7 +-8 +-8 +-7 +-7 +-6 +-8 +-7 +-9 +-9 +-10 +-10 +-11 +-31 +-87 +-128 +-128 +-105 +-57 +-26 +-18 +-24 +-38 +-49 +-56 +-56 +-53 +-46 +-41 +-36 +-34 +-33 +-33 +-32 +-32 +-30 +-30 +-28 +-27 +-25 +-25 +-24 +-24 +-23 +-22 +45 +127 +127 +127 +108 +46 +-1 +-30 +-37 +-32 +-18 +-5 +6 +11 +11 +6 +2 +-3 +-6 +-9 +-10 +-10 +-8 +-9 +-7 +-8 +-8 +-10 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-107 +-59 +-29 +-20 +-26 +-39 +-50 +-57 +-57 +-54 +-47 +-42 +-37 +-35 +-33 +-33 +-32 +-32 +-31 +-30 +-28 +-27 +-26 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +110 +48 +0 +-29 +-36 +-31 +-17 +-4 +7 +11 +11 +7 +2 +-3 +-6 +-9 +-9 +-10 +-8 +-8 +-7 +-8 +-8 +-10 +-10 +-11 +-11 +-12 +-12 +-12 +-12 +-13 +-12 +-13 +-13 +-14 +-14 +-14 +-14 +-14 +-14 +-15 +-14 +-15 +-14 +-15 +-15 +-15 +-14 +-15 +-14 +-15 +-15 +-16 +-15 +-15 +-15 +-15 +-14 +-15 +-35 +-90 +-128 +-128 +-109 +-61 +-31 +-23 +-28 +-41 +-52 +-58 +-58 +-55 +-48 +-43 +-38 +-36 +-34 +-34 +-33 +-33 +-31 +-31 +-29 +-28 +-26 +-26 +-25 +-24 +-23 +-23 +44 +127 +127 +127 +110 +48 +0 +-28 +-36 +-31 +-17 +-4 +7 +11 +11 +7 +3 +-3 +-6 +-9 +-9 +-10 +-9 +-9 +-7 +-8 +-8 +-9 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-107 +-59 +-28 +-20 +-26 +-39 +-49 +-56 +-56 +-53 +-47 +-42 +-37 +-35 +-33 +-33 +-32 +-32 +-31 +-30 +-28 +-27 +-25 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +110 +48 +0 +-29 +-36 +-31 +-17 +-4 +7 +11 +12 +7 +3 +-3 +-6 +-9 +-9 +-10 +-8 +-8 +-7 +-8 +-8 +-10 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-107 +-59 +-29 +-20 +-26 +-39 +-50 +-56 +-57 +-53 +-47 +-42 +-38 +-35 +-34 +-34 +-33 +-32 +-31 +-30 +-29 +-28 +-26 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +110 +48 +0 +-29 +-36 +-31 +-17 +-4 +7 +11 +12 +7 +2 +-3 +-6 +-9 +-9 +-9 +-8 +-8 +-7 +-8 +-8 +-9 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-107 +-59 +-29 +-21 +-26 +-39 +-50 +-57 +-57 +-53 +-47 +-42 +-37 +-35 +-33 +-33 +-32 +-33 +-31 +-30 +-28 +-27 +-26 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +109 +48 +0 +-29 +-36 +-31 +-17 +-4 +7 +11 +11 +7 +3 +-3 +-6 +-9 +-9 +-10 +-8 +-9 +-8 +-8 +-8 +-9 +-10 +-10 +-11 +-12 +-32 +-88 +-128 +-128 +-107 +-59 +-29 +-21 +-26 +-39 +-50 +-57 +-57 +-53 +-47 +-42 +-37 +-35 +-33 +-33 +-32 +-32 +-31 +-30 +-29 +-28 +-26 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +109 +48 +0 +-28 +-36 +-30 +-17 +-4 +7 +11 +12 +7 +3 +-3 +-6 +-9 +-9 +-10 +-8 +-8 +-7 +-8 +-8 +-10 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-105 +-57 +-27 +-19 +-24 +-38 +-49 +-56 +-56 +-53 +-46 +-41 +-36 +-34 +-33 +-32 +-32 +-32 +-30 +-30 +-28 +-27 +-25 +-25 +-24 +-24 +-23 +-22 +-21 +-21 +-21 +-21 +-20 +-20 +-19 +-19 +-17 +-18 +-17 +-18 +-17 +-17 +-17 +-17 +-16 +-16 +-15 +-16 +-15 +-16 +-16 +-16 +-15 +-16 +-15 +-15 +-14 +-16 +-15 +-15 +52 +127 +127 +127 +114 +52 +3 +-25 +-34 +-28 +-15 +-2 +9 +13 +13 +9 +4 +-1 +-5 +-7 +-8 +-9 +-8 +-7 +-7 +-7 +-7 +-8 +-9 +-10 +-10 +-11 +-31 +-87 +-128 +-128 +-105 +-57 +-26 +-18 +-24 +-37 +-49 +-56 +-56 +-52 +-46 +-41 +-36 +-34 +-33 +-33 +-32 +-32 +-30 +-29 +-28 +-27 +-25 +-25 +-24 +-23 +-22 +-22 +45 +127 +127 +127 +108 +46 +-2 +-30 +-37 +-32 +-18 +-4 +6 +11 +11 +7 +2 +-3 +-7 +-10 +-9 +-10 +-8 +-9 +-8 +-9 +-9 +-10 +-10 +-11 +-11 +-11 +-31 +-87 +-128 +-128 +-106 +-57 +-27 +-18 +-24 +-38 +-49 +-56 +-56 +-53 +-46 +-42 +-36 +-34 +-32 +-33 +-32 +-32 +-31 +-30 +-28 +-27 +-26 +-25 +-24 +-24 +-23 +-23 +44 +127 +127 +127 +108 +46 +-2 +-30 +-37 +-32 +-18 +-5 +6 +11 +11 +7 +2 +-3 +-6 +-9 +-9 +-10 +-9 +-9 +-8 +-9 +-9 +-10 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-106 +-57 +-26 +-18 +-24 +-38 +-49 +-56 +-56 +-53 +-46 +-41 +-36 +-34 +-32 +-33 +-32 +-32 +-31 +-30 +-28 +-27 +-25 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +108 +46 +-2 +-30 +-37 +-32 +-18 +-5 +6 +11 +11 +7 +2 +-3 +-6 +-9 +-9 +-10 +-8 +-9 +-8 +-9 +-9 +-10 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-106 +-57 +-26 +-18 +-24 +-38 +-49 +-56 +-56 +-52 +-46 +-41 +-36 +-34 +-33 +-33 +-32 +-32 +-30 +-29 +-28 +-27 +-25 +-25 +-24 +-24 +-22 +-22 +45 +127 +127 +127 +108 +45 +-2 +-30 +-37 +-31 +-17 +-5 +6 +11 +11 +7 +2 +-3 +-7 +-10 +-10 +-10 +-8 +-8 +-8 +-9 +-8 +-10 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-106 +-57 +-27 +-19 +-24 +-38 +-49 +-56 +-56 +-53 +-47 +-41 +-36 +-34 +-33 +-33 +-32 +-32 +-30 +-30 +-28 +-27 +-25 +-25 +-24 +-24 +-23 +-22 +45 +127 +127 +127 +108 +46 +-1 +-30 +-37 +-32 +-18 +-5 +6 +10 +11 +7 +2 +-3 +-6 +-9 +-10 +-10 +-9 +-9 +-8 +-9 +-8 +-10 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-106 +-57 +-26 +-18 +-25 +-38 +-49 +-56 +-56 +-53 +-47 +-41 +-37 +-34 +-33 +-33 +-32 +-32 +-31 +-30 +-28 +-27 +-26 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +108 +45 +-2 +-30 +-37 +-32 +-18 +-5 +6 +10 +11 +7 +2 +-3 +-6 +-9 +-10 +-10 +-9 +-9 +-8 +-9 +-8 +-10 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-106 +-57 +-27 +-19 +-24 +-38 +-49 +-56 +-56 +-53 +-46 +-41 +-36 +-34 +-32 +-32 +-32 +-32 +-31 +-30 +-28 +-27 +-25 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +108 +46 +-2 +-30 +-38 +-32 +-17 +-4 +7 +11 +11 +6 +2 +-3 +-6 +-9 +-9 +-9 +-9 +-9 +-8 +-9 +-8 +-10 +-10 +-11 +-11 +-12 +-31 +-87 +-128 +-128 +-106 +-57 +-27 +-18 +-25 +-38 +-49 +-56 +-56 +-52 +-46 +-41 +-36 +-34 +-32 +-33 +-32 +-32 +-30 +-30 +-28 +-27 +-26 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +108 +46 +-2 +-30 +-37 +-32 +-17 +-4 +7 +11 +11 +6 +1 +-4 +-7 +-10 +-10 +-10 +-8 +-9 +-8 +-9 +-9 +-10 +-10 +-11 +-11 +-12 +-32 +-87 +-128 +-128 +-106 +-57 +-27 +-19 +-24 +-38 +-49 +-56 +-56 +-53 +-46 +-41 +-36 +-34 +-33 +-33 +-32 +-32 +-31 +-30 +-28 +-27 +-25 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +108 +46 +-2 +-30 +-37 +-32 +-17 +-4 +7 +10 +11 +6 +2 +-3 +-6 +-9 +-9 +-9 +-9 +-9 +-8 +-8 +-8 +-9 +-10 +-11 +-11 +-12 +-31 +-88 +-128 +-128 +-107 +-59 +-29 +-20 +-26 +-39 +-50 +-57 +-57 +-53 +-47 +-42 +-37 +-35 +-33 +-33 +-32 +-32 +-31 +-30 +-29 +-28 +-26 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +110 +48 +0 +-28 +-36 +-31 +-17 +-4 +7 +11 +11 +7 +3 +-3 +-6 +-9 +-9 +-10 +-8 +-8 +-8 +-8 +-8 +-10 +-10 +-11 +-11 +-12 +-12 +-12 +-12 +-12 +-12 +-13 +-13 +-14 +-13 +-14 +-13 +-14 +-13 +-14 +-14 +-15 +-14 +-15 +-14 +-15 +-14 +-15 +-14 +-15 +-14 +-15 +-15 +-15 +-15 +-16 +-15 +-16 +-35 +-91 +-128 +-128 +-110 +-61 +-31 +-22 +-28 +-41 +-52 +-58 +-58 +-55 +-48 +-43 +-38 +-36 +-34 +-34 +-33 +-33 +-31 +-31 +-29 +-28 +-26 +-26 +-25 +-25 +-24 +-23 +44 +127 +127 +127 +109 +47 +0 +-29 +-36 +-31 +-17 +-4 +7 +10 +10 +6 +2 +-3 +-6 +-8 +-9 +-9 +-8 +-9 +-8 +-9 +-9 +-10 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-105 +-57 +-26 +-18 +-24 +-38 +-49 +-56 +-56 +-53 +-47 +-41 +-36 +-34 +-32 +-32 +-31 +-32 +-30 +-30 +-28 +-27 +-25 +-25 +-24 +-24 +-23 +-22 +-21 +-21 +-21 +-21 +-21 +-21 +-21 +-20 +-19 +-19 +-19 +-19 +-18 +-18 +-17 +-18 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +52 +127 +127 +127 +115 +53 +4 +-24 +-32 +-26 +-13 +0 +10 +14 +14 +9 +5 +-1 +-4 +-7 +-7 +-8 +-7 +-7 +-6 +-7 +-7 +-8 +-9 +-10 +-10 +-11 +-11 +-12 +-11 +-12 +-12 +-13 +-12 +-13 +-13 +-13 +-13 +-14 +-13 +-14 +-14 +-14 +-14 +-15 +-14 +-15 +-14 +-15 +-15 +-16 +-15 +-15 +-15 +-16 +-15 +-16 +-15 +-16 +-35 +-91 +-128 +-128 +-109 +-61 +-31 +-22 +-28 +-41 +-52 +-59 +-58 +-55 +-48 +-43 +-38 +-36 +-34 +-34 +-33 +-33 +-31 +-31 +-29 +-28 +-26 +-26 +-25 +-24 +-23 +-23 +45 +127 +127 +127 +109 +47 +0 +-29 +-36 +-31 +-17 +-4 +7 +11 +12 +7 +2 +-3 +-6 +-9 +-9 +-9 +-8 +-8 +-7 +-8 +-8 +-10 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-107 +-59 +-29 +-20 +-26 +-39 +-50 +-57 +-57 +-53 +-47 +-42 +-37 +-35 +-33 +-33 +-32 +-32 +-31 +-30 +-28 +-28 +-26 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +109 +47 +0 +-28 +-36 +-31 +-17 +-4 +7 +11 +12 +7 +2 +-3 +-6 +-9 +-9 +-9 +-8 +-9 +-8 +-8 +-8 +-9 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-105 +-57 +-26 +-18 +-24 +-38 +-49 +-56 +-56 +-53 +-46 +-41 +-36 +-34 +-33 +-33 +-32 +-32 +-30 +-29 +-28 +-27 +-26 +-25 +-24 +-24 +-23 +-23 +-21 +-22 +-21 +-21 +-20 +-20 +-19 +-19 +-18 +-18 +-17 +-18 +-17 +-17 +-17 +-17 +-16 +-17 +-16 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +-15 +-15 +-14 +-15 +-15 +-15 +52 +127 +127 +127 +114 +51 +3 +-25 +-33 +-28 +-14 +-1 +9 +13 +13 +9 +4 +-1 +-5 +-8 +-8 +-8 +-7 +-7 +-7 +-7 +-7 +-8 +-9 +-10 +-10 +-11 +-31 +-87 +-128 +-128 +-107 +-58 +-28 +-20 +-25 +-38 +-49 +-56 +-57 +-53 +-47 +-42 +-36 +-35 +-33 +-33 +-32 +-32 +-31 +-30 +-28 +-28 +-26 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +109 +48 +0 +-28 +-36 +-31 +-17 +-4 +7 +11 +11 +7 +3 +-2 +-6 +-8 +-9 +-10 +-9 +-9 +-8 +-8 +-8 +-9 +-9 +-11 +-11 +-12 +-11 +-12 +-12 +-12 +-12 +-13 +-13 +-14 +-13 +-14 +-13 +-14 +-13 +-14 +-14 +-15 +-14 +-15 +-14 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-15 +-16 +-35 +-91 +-128 +-128 +-107 +-59 +-29 +-21 +-27 +-39 +-51 +-57 +-57 +-54 +-47 +-42 +-38 +-35 +-33 +-33 +-33 +-33 +-31 +-30 +-28 +-27 +-26 +-25 +-24 +-24 +-23 +-23 +-21 +-21 +-21 +-22 +-21 +-22 +-21 +-21 +-20 +-20 +-19 +-19 +-18 +-19 +-17 +-18 +-17 +-18 +-17 +-18 +-16 +-17 +-15 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +52 +127 +127 +127 +115 +53 +4 +-24 +-32 +-27 +-14 +-1 +10 +14 +14 +10 +5 +-1 +-4 +-7 +-7 +-8 +-7 +-7 +-7 +-8 +-8 +-8 +-9 +-10 +-10 +-11 +-11 +-12 +-11 +-12 +-12 +-13 +-12 +-13 +-13 +-13 +-13 +-13 +-13 +-14 +-14 +-15 +-14 +-15 +-14 +-15 +-14 +-15 +-14 +-15 +-15 +-15 +-14 +-15 +-15 +-15 +-15 +-16 +-35 +-90 +-128 +-128 +-107 +-59 +-29 +-21 +-27 +-40 +-51 +-58 +-58 +-54 +-47 +-43 +-38 +-35 +-33 +-34 +-33 +-33 +-31 +-31 +-28 +-28 +-26 +-26 +-24 +-24 +-23 +-23 +-22 +-22 +-22 +-22 +-21 +-22 +-21 +-21 +-20 +-20 +-19 +-19 +-18 +-18 +-18 +-18 +-17 +-17 +-17 +-17 +-16 +-17 +-16 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +52 +127 +127 +127 +115 +53 +5 +-24 +-32 +-27 +-14 +-1 +9 +13 +14 +10 +5 +-1 +-4 +-7 +-7 +-8 +-7 +-7 +-6 +-7 +-7 +-8 +-9 +-10 +-10 +-11 +-11 +-12 +-11 +-12 +-12 +-13 +-12 +-13 +-13 +-14 +-13 +-14 +-13 +-14 +-14 +-15 +-14 +-14 +-14 +-14 +-14 +-15 +-15 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-35 +-90 +-128 +-128 +-109 +-61 +-31 +-22 +-28 +-41 +-51 +-58 +-58 +-55 +-48 +-43 +-38 +-36 +-34 +-34 +-33 +-33 +-32 +-31 +-29 +-28 +-26 +-26 +-25 +-24 +-23 +-24 +45 +127 +127 +127 +109 +47 +0 +-29 +-36 +-31 +-17 +-4 +7 +11 +11 +7 +3 +-3 +-6 +-9 +-9 +-10 +-8 +-8 +-7 +-8 +-8 +-9 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-107 +-59 +-28 +-20 +-26 +-39 +-50 +-57 +-57 +-53 +-47 +-41 +-37 +-34 +-33 +-33 +-32 +-32 +-31 +-30 +-28 +-27 +-26 +-25 +-24 +-24 +-23 +-22 +45 +127 +127 +127 +110 +48 +0 +-29 +-36 +-30 +-17 +-4 +7 +11 +12 +8 +3 +-3 +-6 +-9 +-9 +-9 +-8 +-8 +-8 +-8 +-8 +-9 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-105 +-57 +-26 +-18 +-24 +-38 +-49 +-56 +-56 +-52 +-46 +-41 +-36 +-34 +-32 +-33 +-32 +-32 +-30 +-30 +-28 +-27 +-25 +-25 +-24 +-24 +-22 +-23 +-22 +-22 +-21 +-21 +-20 +-20 +-19 +-19 +-18 +-18 +-17 +-18 +-17 +-18 +-17 +-17 +-16 +-17 +-16 +-17 +-16 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +-15 +-15 +-14 +-15 +52 +127 +127 +127 +114 +51 +3 +-26 +-33 +-28 +-15 +-2 +9 +13 +13 +9 +4 +-2 +-5 +-7 +-8 +-8 +-7 +-7 +-7 +-7 +-7 +-9 +-9 +-11 +-11 +-11 +-31 +-87 +-128 +-128 +-107 +-59 +-29 +-20 +-26 +-39 +-49 +-57 +-56 +-53 +-47 +-42 +-37 +-35 +-33 +-33 +-32 +-32 +-31 +-30 +-28 +-27 +-26 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +110 +48 +0 +-28 +-36 +-31 +-17 +-4 +7 +11 +12 +7 +3 +-3 +-6 +-9 +-9 +-9 +-8 +-8 +-8 +-9 +-8 +-9 +-9 +-11 +-11 +-12 +-12 +-13 +-12 +-13 +-12 +-13 +-13 +-14 +-13 +-14 +-13 +-14 +-13 +-14 +-14 +-15 +-14 +-15 +-15 +-15 +-15 +-16 +-15 +-16 +-15 +-15 +-14 +-16 +-15 +-16 +-15 +-16 +-36 +-91 +-128 +-128 +-109 +-61 +-31 +-22 +-28 +-41 +-52 +-58 +-58 +-55 +-48 +-43 +-38 +-36 +-34 +-34 +-33 +-33 +-32 +-31 +-29 +-28 +-26 +-26 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +110 +48 +-1 +-29 +-37 +-31 +-17 +-4 +7 +11 +11 +7 +2 +-3 +-6 +-9 +-9 +-10 +-8 +-8 +-8 +-8 +-8 +-9 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-105 +-57 +-27 +-18 +-24 +-38 +-49 +-56 +-56 +-52 +-46 +-41 +-36 +-34 +-32 +-33 +-32 +-32 +-31 +-30 +-28 +-27 +-26 +-25 +-24 +-24 +-22 +-22 +-21 +-21 +-21 +-21 +-21 +-22 +-21 +-21 +-20 +-20 +-18 +-19 +-18 +-18 +-17 +-18 +-17 +-17 +-16 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +52 +127 +127 +127 +115 +53 +5 +-24 +-32 +-26 +-13 +-1 +9 +13 +14 +9 +5 +-1 +-4 +-6 +-7 +-8 +-7 +-7 +-6 +-7 +-7 +-9 +-8 +-10 +-10 +-11 +-11 +-11 +-11 +-12 +-12 +-13 +-12 +-13 +-13 +-13 +-13 +-14 +-13 +-14 +-13 +-14 +-14 +-15 +-14 +-15 +-14 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-35 +-91 +-128 +-128 +-108 +-59 +-29 +-21 +-27 +-40 +-51 +-57 +-58 +-54 +-48 +-42 +-37 +-35 +-33 +-34 +-32 +-32 +-31 +-30 +-28 +-28 +-26 +-25 +-24 +-24 +-23 +-23 +-22 +-21 +-21 +-22 +-21 +-21 +-21 +-21 +-20 +-20 +-19 +-19 +-18 +-18 +-17 +-18 +-17 +-17 +-17 +-17 +-16 +-17 +-16 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +-15 +-15 +52 +127 +127 +127 +115 +52 +4 +-24 +-32 +-27 +-13 +-1 +10 +13 +14 +9 +5 +-1 +-4 +-6 +-7 +-7 +-7 +-7 +-6 +-7 +-7 +-9 +-9 +-10 +-10 +-11 +-11 +-12 +-11 +-12 +-12 +-13 +-12 +-13 +-12 +-13 +-13 +-13 +-13 +-14 +-14 +-14 +-14 +-15 +-14 +-15 +-14 +-15 +-14 +-15 +-14 +-15 +-14 +-15 +-15 +-15 +-15 +-15 +-35 +-90 +-128 +-128 +-108 +-60 +-29 +-21 +-26 +-40 +-50 +-58 +-57 +-54 +-47 +-42 +-38 +-35 +-34 +-34 +-33 +-33 +-31 +-30 +-28 +-27 +-25 +-25 +-24 +-25 +-23 +-24 +-22 +-22 +-21 +-21 +-20 +-20 +-19 +-19 +-18 +-19 +-18 +-18 +-17 +-18 +-17 +-17 +-16 +-17 +-16 +-17 +-16 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +-15 +-15 +52 +127 +127 +127 +113 +51 +3 +-25 +-33 +-28 +-14 +-2 +9 +13 +14 +9 +4 +-1 +-5 +-8 +-8 +-8 +-7 +-7 +-7 +-7 +-7 +-9 +-9 +-10 +-10 +-11 +-31 +-87 +-128 +-128 +-105 +-57 +-26 +-18 +-24 +-37 +-49 +-55 +-56 +-52 +-46 +-41 +-36 +-34 +-32 +-33 +-31 +-32 +-30 +-30 +-28 +-27 +-25 +-25 +-24 +-24 +-23 +-22 +46 +127 +127 +127 +108 +46 +-2 +-30 +-37 +-31 +-17 +-5 +6 +10 +11 +7 +2 +-3 +-6 +-9 +-9 +-10 +-9 +-9 +-8 +-9 +-9 +-10 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-107 +-59 +-29 +-20 +-26 +-39 +-50 +-57 +-57 +-53 +-47 +-42 +-37 +-35 +-33 +-33 +-32 +-33 +-31 +-30 +-28 +-27 +-25 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +109 +48 +0 +-29 +-36 +-31 +-17 +-4 +7 +11 +12 +7 +3 +-3 +-6 +-9 +-9 +-10 +-8 +-8 +-7 +-8 +-8 +-10 +-10 +-11 +-11 +-12 +-12 +-12 +-12 +-13 +-13 +-14 +-13 +-13 +-13 +-14 +-13 +-15 +-14 +-15 +-14 +-15 +-14 +-15 +-14 +-15 +-15 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +-35 +-91 +-128 +-128 +-108 +-59 +-29 +-21 +-26 +-39 +-51 +-57 +-57 +-54 +-47 +-42 +-37 +-35 +-33 +-33 +-33 +-33 +-31 +-30 +-29 +-28 +-26 +-25 +-24 +-24 +-23 +-23 +-22 +-21 +-21 +-22 +-22 +-22 +-21 +-21 +-20 +-19 +-18 +-19 +-18 +-19 +-17 +-18 +-17 +-17 +-16 +-17 +-16 +-17 +-16 +-17 +-15 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +52 +127 +127 +127 +115 +53 +4 +-24 +-32 +-27 +-13 +-1 +10 +13 +14 +9 +4 +-1 +-4 +-7 +-7 +-7 +-7 +-7 +-7 +-8 +-7 +-9 +-9 +-10 +-10 +-11 +-11 +-12 +-11 +-12 +-12 +-12 +-12 +-13 +-12 +-13 +-13 +-13 +-13 +-14 +-14 +-14 +-14 +-14 +-14 +-15 +-14 +-15 +-15 +-15 +-15 +-15 +-14 +-15 +-15 +-15 +-15 +-15 +-35 +-90 +-128 +-128 +-108 +-59 +-29 +-20 +-26 +-39 +-51 +-58 +-57 +-54 +-48 +-42 +-37 +-35 +-33 +-33 +-32 +-33 +-31 +-31 +-28 +-28 +-26 +-25 +-24 +-24 +-23 +-23 +-22 +-22 +-22 +-22 +-22 +-22 +-21 +-21 +-19 +-20 +-19 +-19 +-18 +-19 +-18 +-18 +-17 +-18 +-17 +-17 +-16 +-17 +-16 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +52 +127 +127 +127 +115 +53 +5 +-24 +-32 +-27 +-13 +-1 +10 +14 +14 +10 +5 +-1 +-4 +-7 +-7 +-7 +-7 +-7 +-6 +-7 +-7 +-9 +-9 +-10 +-10 +-11 +-11 +-12 +-11 +-12 +-12 +-12 +-12 +-13 +-13 +-13 +-13 +-13 +-13 +-14 +-14 +-15 +-14 +-15 +-14 +-15 +-14 +-15 +-14 +-15 +-15 +-15 +-15 +-15 +-15 +-16 +-15 +-16 +-35 +-90 +-128 +-128 +-109 +-61 +-31 +-22 +-28 +-41 +-52 +-58 +-58 +-55 +-48 +-43 +-38 +-36 +-34 +-34 +-33 +-33 +-31 +-31 +-29 +-28 +-26 +-26 +-24 +-24 +-23 +-23 +44 +127 +127 +127 +109 +47 +0 +-28 +-36 +-31 +-17 +-4 +7 +11 +11 +7 +3 +-3 +-6 +-9 +-9 +-10 +-9 +-8 +-7 +-8 +-8 +-10 +-10 +-11 +-11 +-12 +-32 +-87 +-128 +-128 +-105 +-57 +-27 +-19 +-25 +-38 +-49 +-56 +-56 +-53 +-46 +-41 +-36 +-34 +-32 +-33 +-32 +-32 +-30 +-29 +-28 +-27 +-25 +-25 +-24 +-24 +-23 +-23 +-22 +-21 +-21 +-21 +-21 +-21 +-21 +-21 +-19 +-20 +-18 +-19 +-18 +-18 +-17 +-17 +-16 +-17 +-17 +-17 +-16 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +52 +127 +127 +127 +115 +53 +4 +-24 +-32 +-27 +-14 +-1 +9 +14 +14 +10 +5 +-1 +-4 +-7 +-7 +-8 +-7 +-7 +-7 +-7 +-7 +-9 +-9 +-10 +-10 +-11 +-11 +-12 +-12 +-12 +-12 +-13 +-12 +-13 +-13 +-13 +-13 +-14 +-13 +-14 +-14 +-15 +-14 +-15 +-15 +-15 +-14 +-15 +-14 +-15 +-15 +-15 +-14 +-15 +-15 +-16 +-15 +-16 +-35 +-91 +-128 +-128 +-108 +-59 +-28 +-20 +-26 +-40 +-51 +-58 +-57 +-54 +-47 +-42 +-37 +-35 +-33 +-33 +-33 +-33 +-31 +-30 +-28 +-28 +-26 +-25 +-24 +-24 +-23 +-23 +-22 +-22 +-21 +-22 +-21 +-22 +-21 +-21 +-19 +-19 +-18 +-19 +-18 +-19 +-17 +-18 +-17 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +-15 +-15 +52 +127 +127 +127 +115 +52 +4 +-24 +-32 +-27 +-13 +-1 +10 +14 +14 +10 +5 +-1 +-4 +-7 +-7 +-8 +-7 +-7 +-6 +-7 +-7 +-8 +-9 +-10 +-10 +-11 +-11 +-12 +-12 +-13 +-12 +-13 +-12 +-13 +-12 +-13 +-13 +-13 +-13 +-14 +-14 +-14 +-14 +-15 +-14 +-15 +-14 +-15 +-14 +-15 +-15 +-15 +-14 +-15 +-15 +-16 +-15 +-16 +-35 +-91 +-128 +-128 +-109 +-61 +-31 +-22 +-28 +-41 +-52 +-59 +-58 +-55 +-48 +-43 +-38 +-36 +-34 +-34 +-33 +-33 +-32 +-31 +-29 +-28 +-26 +-26 +-25 +-24 +-24 +-23 +44 +127 +127 +127 +110 +48 +0 +-29 +-36 +-31 +-17 +-4 +6 +11 +11 +7 +2 +-3 +-6 +-9 +-9 +-9 +-8 +-9 +-8 +-9 +-8 +-10 +-9 +-10 +-11 +-12 +-32 +-88 +-128 +-128 +-107 +-59 +-29 +-20 +-25 +-39 +-49 +-57 +-57 +-54 +-47 +-42 +-37 +-35 +-33 +-33 +-32 +-32 +-31 +-30 +-28 +-27 +-26 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +110 +47 +0 +-29 +-36 +-30 +-17 +-4 +7 +11 +12 +7 +3 +-3 +-6 +-9 +-9 +-10 +-8 +-8 +-7 +-8 +-8 +-10 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-107 +-59 +-29 +-20 +-26 +-39 +-50 +-57 +-57 +-53 +-47 +-42 +-37 +-35 +-33 +-33 +-32 +-32 +-31 +-30 +-28 +-27 +-26 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +109 +48 +0 +-28 +-36 +-31 +-17 +-4 +6 +11 +11 +7 +2 +-3 +-6 +-9 +-9 +-9 +-8 +-8 +-8 +-8 +-8 +-9 +-9 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-107 +-59 +-29 +-20 +-25 +-39 +-49 +-56 +-57 +-53 +-47 +-42 +-37 +-35 +-33 +-33 +-32 +-32 +-31 +-30 +-28 +-28 +-26 +-25 +-24 +-24 +-23 +-22 +45 +127 +127 +127 +110 +48 +0 +-28 +-35 +-31 +-17 +-4 +7 +11 +11 +7 +3 +-3 +-6 +-9 +-9 +-9 +-8 +-8 +-8 +-8 +-8 +-10 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-107 +-59 +-29 +-20 +-26 +-39 +-50 +-57 +-57 +-53 +-47 +-42 +-37 +-35 +-33 +-33 +-32 +-32 +-31 +-30 +-28 +-27 +-26 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +110 +48 +0 +-28 +-36 +-30 +-17 +-4 +7 +11 +11 +7 +3 +-3 +-6 +-9 +-9 +-10 +-8 +-8 +-7 +-8 +-8 +-10 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-107 +-59 +-29 +-20 +-26 +-39 +-50 +-57 +-57 +-53 +-47 +-42 +-37 +-35 +-33 +-33 +-32 +-32 +-31 +-30 +-29 +-28 +-26 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +110 +48 +0 +-28 +-36 +-31 +-17 +-4 +7 +11 +11 +7 +2 +-3 +-6 +-9 +-9 +-10 +-9 +-9 +-8 +-8 +-8 +-9 +-9 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-107 +-59 +-29 +-20 +-26 +-39 +-49 +-56 +-57 +-53 +-47 +-42 +-37 +-35 +-33 +-33 +-32 +-32 +-31 +-30 +-28 +-27 +-26 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +110 +48 +0 +-29 +-36 +-31 +-17 +-4 +7 +11 +12 +8 +3 +-3 +-6 +-9 +-9 +-10 +-9 +-9 +-8 +-9 +-9 +-10 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-107 +-59 +-29 +-20 +-26 +-39 +-50 +-57 +-57 +-53 +-47 +-42 +-37 +-35 +-33 +-33 +-32 +-32 +-31 +-30 +-28 +-27 +-26 +-25 +-24 +-24 +-22 +-22 +45 +127 +127 +127 +110 +48 +0 +-28 +-36 +-31 +-17 +-4 +7 +11 +12 +7 +2 +-3 +-6 +-9 +-9 +-9 +-8 +-8 +-7 +-8 +-8 +-9 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-105 +-57 +-26 +-18 +-24 +-38 +-49 +-56 +-56 +-52 +-46 +-41 +-36 +-34 +-32 +-32 +-31 +-31 +-30 +-29 +-28 +-27 +-25 +-25 +-24 +-23 +-22 +-22 +-21 +-22 +-21 +-21 +-20 +-19 +-18 +-19 +-18 +-18 +-17 +-18 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-17 +-16 +-16 +-15 +-16 +-15 +-15 +-15 +-16 +-15 +-15 +-15 +-16 +52 +127 +127 +127 +114 +51 +3 +-26 +-33 +-28 +-14 +-1 +10 +13 +14 +9 +4 +-1 +-5 +-8 +-8 +-8 +-7 +-7 +-7 +-7 +-7 +-9 +-9 +-10 +-10 +-11 +-31 +-87 +-128 +-128 +-105 +-57 +-26 +-18 +-24 +-38 +-49 +-56 +-56 +-53 +-46 +-41 +-36 +-34 +-33 +-33 +-32 +-32 +-31 +-30 +-28 +-27 +-25 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +108 +46 +-2 +-30 +-38 +-32 +-18 +-5 +7 +10 +11 +6 +2 +-4 +-7 +-10 +-10 +-10 +-9 +-8 +-8 +-9 +-9 +-10 +-10 +-11 +-12 +-13 +-32 +-88 +-128 +-128 +-107 +-59 +-29 +-20 +-26 +-39 +-49 +-57 +-57 +-53 +-47 +-42 +-37 +-35 +-33 +-33 +-32 +-33 +-31 +-30 +-28 +-28 +-26 +-26 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +110 +48 +0 +-28 +-36 +-31 +-17 +-4 +7 +11 +11 +7 +2 +-3 +-6 +-9 +-9 +-9 +-8 +-8 +-8 +-8 +-9 +-9 +-10 +-11 +-11 +-12 +-12 +-13 +-12 +-13 +-12 +-13 +-13 +-14 +-13 +-14 +-13 +-14 +-14 +-15 +-14 +-15 +-14 +-15 +-14 +-15 +-14 +-15 +-14 +-15 +-14 +-15 +-14 +-15 +-14 +-15 +-15 +-16 +-35 +-90 +-128 +-128 +-109 +-61 +-31 +-23 +-28 +-41 +-51 +-58 +-58 +-55 +-48 +-43 +-38 +-35 +-34 +-34 +-33 +-33 +-31 +-31 +-29 +-28 +-26 +-26 +-25 +-24 +-24 +-23 +45 +127 +127 +127 +109 +47 +0 +-29 +-36 +-31 +-17 +-4 +7 +11 +11 +7 +2 +-3 +-6 +-9 +-9 +-9 +-8 +-9 +-8 +-8 +-8 +-10 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-107 +-59 +-29 +-20 +-26 +-38 +-49 +-56 +-56 +-53 +-47 +-42 +-37 +-35 +-33 +-33 +-32 +-32 +-30 +-30 +-28 +-27 +-26 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +110 +47 +0 +-29 +-36 +-31 +-17 +-4 +7 +11 +11 +7 +3 +-3 +-6 +-9 +-9 +-9 +-9 +-9 +-8 +-9 +-9 +-10 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-107 +-59 +-29 +-20 +-26 +-39 +-50 +-57 +-57 +-53 +-47 +-42 +-37 +-35 +-33 +-33 +-32 +-32 +-31 +-30 +-28 +-27 +-25 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +110 +47 +0 +-29 +-36 +-31 +-17 +-4 +7 +11 +11 +8 +3 +-3 +-6 +-9 +-9 +-10 +-9 +-9 +-8 +-8 +-8 +-9 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-107 +-59 +-29 +-20 +-26 +-39 +-49 +-56 +-56 +-53 +-47 +-42 +-37 +-35 +-33 +-33 +-32 +-32 +-30 +-30 +-28 +-27 +-26 +-25 +-24 +-24 +-23 +-22 +45 +127 +127 +127 +110 +48 +0 +-29 +-36 +-31 +-17 +-4 +7 +11 +12 +7 +2 +-3 +-6 +-9 +-9 +-9 +-8 +-8 +-7 +-8 +-8 +-10 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-107 +-59 +-29 +-20 +-26 +-39 +-50 +-57 +-57 +-53 +-47 +-42 +-37 +-35 +-33 +-33 +-32 +-32 +-31 +-30 +-28 +-28 +-26 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +110 +48 +0 +-29 +-36 +-31 +-17 +-4 +7 +11 +12 +8 +3 +-3 +-6 +-9 +-9 +-9 +-8 +-8 +-7 +-8 +-8 +-10 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-105 +-57 +-27 +-18 +-24 +-38 +-49 +-56 +-56 +-52 +-46 +-41 +-36 +-35 +-32 +-33 +-32 +-32 +-30 +-30 +-28 +-27 +-26 +-25 +-24 +-24 +-22 +-22 +-21 +-22 +-20 +-21 +-20 +-20 +-19 +-19 +-18 +-18 +-17 +-18 +-17 +-17 +-17 +-17 +-16 +-17 +-16 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +-15 +-15 +52 +127 +127 +127 +114 +51 +3 +-26 +-33 +-28 +-14 +-2 +9 +13 +14 +9 +4 +-2 +-5 +-8 +-8 +-8 +-7 +-7 +-6 +-7 +-7 +-9 +-9 +-10 +-11 +-11 +-31 +-87 +-128 +-128 +-105 +-57 +-26 +-18 +-24 +-37 +-48 +-56 +-56 +-52 +-46 +-41 +-36 +-34 +-32 +-32 +-32 +-32 +-30 +-29 +-28 +-27 +-25 +-25 +-24 +-24 +-23 +-22 +45 +127 +127 +127 +108 +46 +-2 +-30 +-37 +-32 +-18 +-5 +6 +10 +10 +7 +2 +-3 +-6 +-9 +-9 +-10 +-8 +-9 +-8 +-9 +-9 +-10 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-106 +-57 +-26 +-18 +-24 +-38 +-49 +-56 +-56 +-52 +-46 +-41 +-36 +-34 +-33 +-33 +-32 +-32 +-30 +-29 +-28 +-27 +-26 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +108 +46 +-1 +-30 +-37 +-32 +-18 +-5 +6 +11 +11 +7 +2 +-4 +-7 +-9 +-10 +-10 +-9 +-9 +-8 +-9 +-9 +-10 +-10 +-11 +-11 +-11 +-31 +-87 +-128 +-128 +-106 +-57 +-27 +-19 +-25 +-38 +-49 +-56 +-56 +-53 +-46 +-42 +-37 +-35 +-32 +-33 +-31 +-32 +-30 +-30 +-28 +-27 +-26 +-25 +-24 +-24 +-22 +-22 +46 +127 +127 +127 +108 +46 +-2 +-30 +-37 +-32 +-18 +-5 +6 +10 +10 +6 +1 +-3 +-7 +-9 +-10 +-10 +-9 +-9 +-8 +-8 +-8 +-9 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-106 +-57 +-26 +-18 +-24 +-38 +-49 +-56 +-56 +-53 +-46 +-41 +-36 +-34 +-33 +-33 +-32 +-32 +-31 +-30 +-28 +-28 +-25 +-25 +-24 +-24 +-22 +-23 +45 +127 +127 +127 +108 +46 +-2 +-30 +-37 +-32 +-17 +-5 +6 +11 +11 +7 +2 +-3 +-6 +-9 +-10 +-10 +-8 +-9 +-8 +-8 +-9 +-9 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-105 +-57 +-27 +-19 +-24 +-38 +-49 +-56 +-56 +-52 +-46 +-41 +-36 +-34 +-32 +-33 +-32 +-32 +-30 +-30 +-28 +-27 +-26 +-25 +-24 +-24 +-23 +-22 +46 +127 +127 +127 +108 +46 +-2 +-30 +-37 +-32 +-18 +-5 +6 +10 +11 +6 +2 +-4 +-7 +-9 +-9 +-10 +-9 +-8 +-7 +-8 +-8 +-10 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-106 +-57 +-27 +-18 +-24 +-37 +-49 +-56 +-56 +-53 +-46 +-41 +-36 +-34 +-32 +-33 +-32 +-32 +-30 +-30 +-28 +-27 +-26 +-25 +-24 +-24 +-23 +-22 +45 +127 +127 +127 +108 +45 +-2 +-30 +-37 +-32 +-17 +-5 +6 +10 +11 +7 +2 +-3 +-7 +-9 +-10 +-10 +-9 +-9 +-7 +-8 +-8 +-10 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-106 +-57 +-27 +-18 +-24 +-38 +-49 +-56 +-56 +-53 +-47 +-41 +-36 +-34 +-32 +-33 +-31 +-32 +-30 +-30 +-28 +-27 +-25 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +108 +46 +-2 +-30 +-37 +-32 +-18 +-5 +6 +10 +11 +7 +2 +-4 +-7 +-9 +-10 +-10 +-9 +-9 +-8 +-9 +-9 +-10 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-106 +-57 +-26 +-18 +-24 +-38 +-49 +-56 +-56 +-53 +-46 +-41 +-36 +-34 +-32 +-33 +-32 +-32 +-30 +-30 +-28 +-27 +-25 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +108 +45 +-2 +-30 +-37 +-32 +-18 +-5 +6 +10 +11 +7 +2 +-3 +-6 +-9 +-10 +-10 +-9 +-9 +-8 +-9 +-8 +-9 +-9 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-106 +-57 +-26 +-18 +-24 +-37 +-49 +-56 +-56 +-53 +-46 +-41 +-36 +-34 +-32 +-32 +-32 +-32 +-30 +-30 +-28 +-27 +-25 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +108 +46 +-2 +-30 +-38 +-32 +-18 +-5 +6 +10 +10 +7 +2 +-3 +-7 +-9 +-10 +-10 +-9 +-9 +-8 +-9 +-8 +-10 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-107 +-59 +-29 +-20 +-26 +-39 +-50 +-57 +-57 +-54 +-47 +-42 +-37 +-35 +-33 +-33 +-32 +-32 +-31 +-30 +-28 +-27 +-25 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +110 +47 +0 +-29 +-36 +-31 +-17 +-4 +7 +11 +11 +7 +2 +-3 +-6 +-9 +-9 +-9 +-9 +-8 +-8 +-8 +-8 +-9 +-10 +-11 +-11 +-12 +-12 +-12 +-12 +-13 +-12 +-13 +-13 +-14 +-13 +-14 +-14 +-14 +-14 +-15 +-14 +-14 +-14 +-15 +-14 +-15 +-14 +-15 +-15 +-15 +-15 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +-35 +-90 +-128 +-128 +-109 +-61 +-31 +-22 +-28 +-41 +-51 +-58 +-58 +-55 +-48 +-43 +-38 +-36 +-34 +-34 +-33 +-33 +-32 +-31 +-29 +-28 +-26 +-26 +-25 +-24 +-24 +-23 +44 +127 +127 +127 +110 +48 +0 +-28 +-36 +-31 +-17 +-4 +6 +11 +11 +7 +2 +-3 +-6 +-9 +-9 +-10 +-8 +-8 +-7 +-8 +-8 +-10 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-105 +-57 +-26 +-18 +-24 +-38 +-49 +-56 +-56 +-53 +-46 +-41 +-36 +-34 +-33 +-33 +-32 +-32 +-30 +-29 +-28 +-27 +-25 +-25 +-24 +-24 +-22 +-22 +-21 +-22 +-21 +-22 +-21 +-21 +-20 +-21 +-19 +-19 +-18 +-19 +-18 +-19 +-17 +-18 +-17 +-17 +-16 +-17 +-16 +-17 +-16 +-16 +-15 +-16 +-15 +-15 +-15 +-16 +-15 +-16 +52 +127 +127 +127 +115 +53 +4 +-24 +-32 +-27 +-13 +-1 +10 +14 +15 +10 +5 +-1 +-4 +-7 +-8 +-8 +-7 +-7 +-6 +-7 +-7 +-9 +-9 +-10 +-10 +-11 +-11 +-11 +-11 +-12 +-12 +-13 +-13 +-13 +-13 +-13 +-13 +-14 +-14 +-14 +-14 +-15 +-14 +-15 +-14 +-15 +-14 +-15 +-15 +-16 +-15 +-16 +-15 +-15 +-14 +-15 +-15 +-15 +-35 +-91 +-128 +-128 +-110 +-61 +-31 +-22 +-28 +-41 +-52 +-58 +-58 +-55 +-49 +-43 +-38 +-36 +-34 +-34 +-33 +-33 +-32 +-31 +-29 +-28 +-26 +-26 +-25 +-24 +-23 +-23 +45 +127 +127 +127 +109 +47 +0 +-28 +-36 +-31 +-17 +-5 +7 +11 +11 +7 +3 +-3 +-6 +-9 +-9 +-10 +-8 +-9 +-8 +-8 +-8 +-10 +-10 +-11 +-11 +-12 +-32 +-88 +-128 +-128 +-107 +-59 +-29 +-20 +-26 +-39 +-50 +-57 +-56 +-53 +-47 +-42 +-37 +-34 +-33 +-33 +-32 +-32 +-31 +-30 +-28 +-27 +-25 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +110 +48 +0 +-28 +-36 +-31 +-17 +-4 +7 +11 +12 +7 +3 +-3 +-6 +-9 +-9 +-10 +-8 +-8 +-7 +-8 +-8 +-9 +-10 +-11 +-12 +-12 +-31 +-87 +-128 +-128 +-105 +-57 +-26 +-19 +-25 +-38 +-49 +-56 +-56 +-52 +-46 +-41 +-36 +-34 +-32 +-32 +-32 +-32 +-30 +-30 +-28 +-27 +-25 +-25 +-24 +-24 +-23 +-23 +-21 +-22 +-21 +-21 +-20 +-20 +-19 +-19 +-18 +-19 +-17 +-18 +-17 +-17 +-16 +-17 +-16 +-17 +-16 +-16 +-16 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +-15 +-15 +52 +127 +127 +127 +114 +51 +3 +-26 +-33 +-28 +-14 +-1 +9 +13 +13 +9 +4 +-2 +-5 +-7 +-7 +-8 +-7 +-8 +-7 +-7 +-7 +-9 +-9 +-10 +-11 +-11 +-31 +-87 +-128 +-128 +-107 +-59 +-28 +-20 +-25 +-38 +-49 +-56 +-56 +-53 +-47 +-42 +-37 +-35 +-33 +-33 +-32 +-32 +-31 +-30 +-28 +-27 +-26 +-25 +-24 +-24 +-23 +-23 +45 +127 +127 +127 +109 +48 +1 +-28 +-36 +-31 +-17 +-4 +7 +11 +11 +7 +3 +-3 +-6 +-9 +-9 +-9 +-8 +-8 +-7 +-8 +-8 +-9 +-10 +-11 +-11 +-12 +-12 +-13 +-12 +-12 +-12 +-13 +-13 +-13 +-13 +-14 +-13 +-14 +-14 +-14 +-14 +-14 +-14 +-15 +-14 +-15 +-15 +-16 +-15 +-16 +-15 +-15 +-14 +-15 +-15 +-16 +-15 +-15 +-35 +-90 +-128 +-128 +-107 +-59 +-29 +-21 +-26 +-40 +-51 +-57 +-57 +-54 +-47 +-42 +-37 +-35 +-33 +-33 +-33 +-33 +-31 +-30 +-29 +-28 +-26 +-25 +-24 +-25 +-23 +-23 +-22 +-22 +-21 +-22 +-22 +-22 +-21 +-21 +-20 +-20 +-19 +-19 +-18 +-18 +-17 +-18 +-17 +-17 +-16 +-17 +-16 +-17 +-16 +-17 +-16 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +52 +127 +127 +127 +115 +53 +4 +-24 +-32 +-27 +-14 +-1 +10 +14 +14 +10 +5 +-1 +-4 +-7 +-7 +-7 +-6 +-7 +-6 +-7 +-7 +-8 +-9 +-10 +-10 +-11 +-11 +-11 +-11 +-12 +-12 +-13 +-12 +-13 +-12 +-13 +-13 +-14 +-13 +-14 +-14 +-15 +-14 +-14 +-14 +-15 +-14 +-15 +-14 +-15 +-14 +-15 +-15 +-16 +-15 +-15 +-15 +-16 +-35 +-90 +-128 +-128 +-108 +-59 +-29 +-21 +-26 +-40 +-51 +-58 +-57 +-54 +-48 +-43 +-37 +-35 +-33 +-33 +-33 +-33 +-31 +-30 +-29 +-28 +-26 +-26 +-24 +-24 +-23 +-23 +-22 +-22 +-21 +-22 +-21 +-22 +-21 +-21 +-20 +-20 +-19 +-19 +-18 +-19 +-17 +-18 +-17 +-18 +-17 +-17 +-17 +-17 +-16 +-17 +-16 +-16 +-15 +-16 +-15 +-16 +-15 +-16 +52 +127 +127 +127 +115 +53 +5 +-24 +-32 +-27 +-14 +-1 +10 +13 +14 +9 +5 +-1 +-4 +-7 +-7 +-8 +-7 +-7 +-6 +-7 +-7 +-9 +-9 +-10 +-10 +-12 +-11 +-12 +-11 +-12 +-12 +-13 diff --git a/traces/EM4102-Fob.pm3 b/traces/lf_EM4102-fob.pm3 similarity index 100% rename from traces/EM4102-Fob.pm3 rename to traces/lf_EM4102-fob.pm3 diff --git a/traces/em4102-thin.pm3 b/traces/lf_EM4102-thin.pm3 similarity index 78% rename from traces/em4102-thin.pm3 rename to traces/lf_EM4102-thin.pm3 index 7ad87c611..d55439165 100644 --- a/traces/em4102-thin.pm3 +++ b/traces/lf_EM4102-thin.pm3 @@ -1,8000 +1,8000 @@ --48 --42 --36 --31 --26 --24 --22 -127 -127 -127 -127 -127 -60 -2 --13 --6 -13 -31 -45 -49 -48 -39 -30 -18 -9 -0 --4 --8 --7 --6 --2 -2 -7 -10 -12 -11 -9 -4 --1 --8 --14 --19 --21 --21 --17 --14 --8 --3 -1 -3 -4 -0 --3 --10 --15 --21 --24 --26 --24 --22 --16 --11 --5 --2 -1 -0 --2 --7 --12 --19 --23 --77 --121 --128 --121 --94 --95 --107 --114 --114 --107 --101 --94 --91 --88 --87 --85 --82 --76 --69 --62 --55 --48 --43 --38 --37 --36 --38 --40 --42 --43 --44 --42 --39 --35 --30 --25 --21 --16 --15 --14 --17 --19 --24 --26 --29 --29 --29 --26 --23 --18 --14 --9 --8 --6 --8 --10 --14 --17 --21 --23 --25 --24 --22 --17 -127 -127 -127 -127 -127 -89 -28 -5 -2 -11 -21 -29 -32 -33 -31 -30 -29 -28 -27 -25 -20 -15 -7 -1 --6 --10 --12 --11 --7 --2 -2 -7 --51 --99 --128 --107 --85 --92 --110 --121 --125 --119 --109 --97 --86 --76 --69 --62 --58 --55 --54 --54 --56 --56 --57 --55 --53 --48 --43 --37 --32 --26 --23 --21 -127 -127 -127 -127 -127 -61 -1 --14 --7 -11 -29 -43 -48 -47 -40 -32 -20 -10 -2 --4 --8 --8 --7 --4 -0 -5 -8 -12 -11 -10 -5 -0 --57 --104 --128 --118 --96 --101 --114 --121 --118 --108 --97 --86 --80 --76 --75 --74 --75 --74 --72 --68 --64 --57 --51 --43 --38 --33 --31 --30 --31 --32 --36 --37 -127 -127 -127 -127 -127 -63 -16 -6 -13 -28 -39 -45 -40 -31 -18 -8 -0 --1 -0 -5 -9 -15 -18 -20 -16 -13 -6 --1 --9 --14 --18 --18 --17 --13 --8 --2 -1 -5 -6 -4 -0 --5 --12 --17 --22 --24 --25 --22 --19 --12 --7 --1 -1 -2 --1 --4 --10 --15 --21 --25 --28 --26 --24 --19 --73 --117 --128 --113 --87 --90 --105 --117 --122 --119 --115 --106 --98 --89 --82 --74 --66 --58 --53 --49 --48 --47 --49 --50 --52 --52 --51 --47 --44 --38 --33 --27 -127 -127 -127 -127 -127 -72 -10 --14 --13 -0 -14 -27 -33 -38 -35 -33 -28 -23 -16 -11 -4 --2 --8 --10 --12 --10 --7 --1 -3 -7 -9 -10 --49 --97 --128 --113 --93 --101 --117 --127 --126 --117 --104 --91 --80 --72 --67 --64 --64 --63 --64 --64 --64 --62 --59 --53 --48 --41 --35 --30 --27 --25 --26 --26 --30 --33 --35 --36 --36 --33 --31 --25 --21 --16 --13 --10 --11 --12 --16 --18 --22 --24 --27 --26 --25 --22 --18 --13 --10 --6 --6 --5 --8 --11 --15 --18 -127 -127 -127 -127 -127 -72 -26 -14 -21 -37 -48 -54 -48 -39 -25 -14 -5 -3 -3 -7 -12 -17 -20 -22 -20 -16 -9 -3 --5 --11 --16 --17 --71 --115 --128 --111 --82 --83 --96 --104 --108 --105 --101 --96 --92 --88 --85 --80 --74 --66 --59 --51 --46 --42 --39 --38 --40 --41 --44 --45 --46 --44 --41 --36 -127 -127 -127 -127 -127 -79 -21 --1 --3 -6 -15 -23 -25 -25 -22 -22 -21 -22 -22 -22 -18 -15 -7 -1 --6 --11 --15 --14 --12 --7 --2 -3 -6 -8 -7 -5 --1 --6 --13 --18 --23 --24 --23 --18 --14 --8 --3 -1 -2 -2 --2 --6 --13 --18 --24 --26 --27 --25 --21 --15 --10 --4 --1 -1 --56 --103 --128 --119 --99 --105 --122 --128 --128 --122 --109 --96 --85 --76 --71 --67 --66 --65 --66 --65 --65 --63 --61 --56 --51 --44 --38 --32 --29 --26 --26 --27 -127 -127 -127 -127 -127 -56 -3 --8 -2 -21 -39 -50 -51 -46 -33 -21 -9 -0 --5 --6 --6 --2 -2 -7 -11 -14 -14 -13 -8 -2 --5 --11 --66 --112 --128 --116 --91 --93 --106 --112 --111 --103 --95 --88 --84 --82 --82 --81 --79 --75 --70 --63 --56 --49 --43 --38 --35 --33 --34 --35 --38 --40 --42 --41 --40 --37 --33 --27 --23 --17 --15 --13 --15 --16 --19 --22 --26 --28 --29 --28 --25 --21 --17 --12 --9 --6 --7 --7 --11 --14 --18 --21 --24 --24 --23 --20 -127 -127 -127 -127 -127 -89 -31 -9 -6 -15 -23 -30 -31 -30 -26 -25 -24 -26 -26 -26 -23 -19 -12 -5 --2 --7 --12 --12 --11 --7 --3 -3 --54 --102 --128 --106 --83 --89 --106 --119 --123 --119 --111 --99 --89 --79 --71 --63 --58 --53 --52 --51 --52 --53 --54 --54 --53 --50 --46 --40 --35 --29 --25 --21 -127 -127 -127 -127 -127 -65 -4 --15 --10 -7 -25 -39 -45 -46 -41 -33 -24 -16 -7 -1 --5 --8 --10 --7 --5 -0 -5 -9 -11 -11 -8 -4 --2 --9 --15 --19 --22 --22 --19 --14 --9 --3 -0 -3 -3 -1 --4 --9 --16 --20 --25 --26 --26 --22 --18 --12 --6 --1 -0 -1 --2 --6 --14 --18 --72 --117 --128 --124 --98 --101 --113 --119 --117 --109 --99 --91 --87 --85 --85 --83 --82 --78 --73 --67 --60 --52 --46 --40 --37 --34 --35 --35 --38 --40 --42 --42 -127 -127 -127 -127 -127 -71 -22 -7 -10 -22 -30 -35 -30 -23 -13 -8 -4 -6 -9 -15 -18 -21 -19 -17 -11 -4 --4 --10 --16 --17 --17 --14 --68 --113 --128 --108 --81 --83 --97 --109 --114 --112 --108 --101 --96 --88 --82 --74 --66 --58 --52 --47 --44 --43 --44 --45 --47 --48 --49 --47 --44 --39 --35 --29 -127 -127 -127 -127 -127 -76 -13 --10 --11 -0 -13 -25 -30 -33 -32 -31 -27 -25 -21 -16 -9 -3 --4 --8 --12 --12 --10 --6 --2 -4 -7 -9 --49 --97 --128 --111 --91 --99 --116 --127 --128 --119 --107 --94 --83 --73 --68 --63 --61 --60 --61 --61 --62 --61 --59 --56 --51 --44 --39 --33 --29 --25 --24 --24 -127 -127 -127 -127 -127 -57 -2 --9 --1 -19 -37 -49 -51 -47 -36 -25 -12 -3 --4 --6 --7 --4 --2 -4 -8 -12 -13 -13 -10 -5 --2 --8 --63 --109 --128 --117 --92 --96 --108 --114 --113 --104 --95 --87 --83 --80 --80 --79 --79 --75 --71 --65 --59 --52 --45 --39 --35 --33 --33 --33 --36 --38 --40 --41 --40 --38 --35 --30 --25 --20 --16 --14 --14 --15 --18 --21 --25 --27 --29 --28 --27 --23 --19 --14 --11 --7 --7 --6 --10 --11 --16 --19 --23 --24 --24 --21 -127 -127 -127 -127 -127 -89 -33 -12 -10 -19 -26 -32 -31 -29 -24 -22 -21 -24 -25 -26 -25 -22 -15 -9 -0 --5 --11 --12 --13 --9 --6 -0 -4 -8 -9 -8 -4 --1 --8 --14 --19 --22 --23 --21 --18 --12 --7 --2 -1 -3 -1 --2 --7 --13 --20 --24 --27 --26 --24 --19 --14 --8 --4 -0 --57 --104 --128 --116 --95 --103 --120 --128 --128 --123 --111 --98 --87 --76 --70 --65 --63 --61 --62 --62 --62 --61 --61 --57 --53 --47 --41 --34 --30 --26 --24 --24 --26 --28 --32 --34 --36 --35 --34 --31 --26 --21 --17 --13 --11 --10 --12 --14 --19 --21 --25 --26 --27 --25 --22 --17 --14 --9 --7 --5 --6 --7 --11 --14 -127 -127 -127 -127 -127 -69 -21 -10 -19 -36 -50 -58 -54 -45 -31 -18 -7 -2 -0 -2 -6 -11 -15 -19 -19 -19 -14 -9 -1 --5 --12 --15 --18 --17 --14 --9 --4 -1 -4 -7 -5 -3 --3 --9 --16 --20 --24 --24 --23 --19 --15 --8 --3 -0 -1 -1 --3 --7 --14 --19 --24 --26 --27 --25 --78 --121 --128 --114 --86 --87 --101 --112 --116 --114 --110 --104 --99 --92 --86 --79 --71 --63 --56 --50 --46 --44 --44 --44 --47 --48 --49 --48 --47 --42 --38 --32 --27 --22 --20 --17 --19 --20 --23 --26 --29 --31 --32 --30 --27 --23 --19 --14 --11 --8 --9 --8 --12 --15 --19 --22 --25 --25 --24 --21 --17 --13 --9 --5 -127 -127 -127 -127 -127 -79 -16 --5 --3 -12 -28 -41 -48 -49 -45 -40 -31 -25 -16 -9 -2 --2 --6 --6 --6 --2 -2 -7 -10 -13 -12 -9 -4 --2 --9 --14 --19 --21 --21 --17 --14 --7 --3 -2 -3 -3 -0 --4 --10 --15 --21 --25 --26 --25 --21 --15 --10 --4 --1 -1 -0 --2 --8 --13 --68 --113 --128 --124 --100 --103 --116 --122 --120 --110 --99 --90 --84 --81 --81 --80 --80 --78 --74 --69 --63 --56 --49 --42 --38 --34 --33 --33 --35 --37 --40 --41 -127 -127 -127 -127 -127 -66 -19 -7 -12 -26 -35 -40 -35 -27 -15 -6 -1 -2 -4 -10 -14 -18 -19 -19 -14 -9 -1 --6 --13 --16 --18 --17 --71 --115 --128 --108 --81 --81 --95 --106 --111 --108 --105 --99 --95 --89 --84 --77 --69 --61 --54 --48 --45 --42 --41 --42 --44 --45 --47 --47 --46 --42 --38 --32 --27 --22 --19 --17 --18 --18 --21 --24 --28 --30 --32 --30 --28 --24 --20 --15 --11 --8 --7 --8 --11 --14 --18 --21 --24 --25 --24 --21 --19 --14 --10 --6 -127 -127 -127 -127 -127 -81 -17 --5 --3 -10 -26 -40 -46 -49 -45 -40 -32 -26 -17 -11 -3 --1 --6 --7 --6 --3 -1 -6 -9 -12 -12 -10 -5 -0 --7 --13 --19 --20 --21 --18 --15 --9 --4 -1 -3 -4 -2 --2 --9 --15 --20 --24 --26 --25 --23 --17 --12 --6 --2 -1 -0 --1 --6 --11 --67 --112 --128 --124 --100 --105 --118 --124 --121 --111 --100 --90 --84 --80 --80 --79 --79 --77 --74 --69 --64 --57 --50 --43 --38 --34 --33 --32 --34 --36 --39 --40 -127 -127 -127 -127 -127 -65 -18 -7 -12 -26 -36 -41 -37 -28 -16 -7 -0 -0 -2 -8 -13 -18 -19 -20 -15 -10 -2 --4 --11 --15 --18 --17 --71 --116 --128 --109 --82 --82 --95 --106 --110 --108 --104 --99 --95 --89 --84 --77 --71 --63 --56 --49 --45 --41 --40 --41 --43 --44 --47 --46 --46 --43 --39 --33 --29 --23 --19 --17 --17 --17 --20 --22 --26 --29 --30 --30 --29 --25 --21 --15 --12 --8 --7 --7 --10 --13 --17 --20 --23 --24 --25 --22 --20 --15 --11 --6 -127 -127 -127 -127 -127 -81 -17 --5 --4 -10 -25 -38 -44 -47 -43 -40 -32 -26 -19 -12 -5 --1 --5 --7 --7 --5 --2 -4 -7 -12 -12 -11 --48 --96 --128 --113 --93 --101 --117 --126 --124 --114 --102 --89 --79 --71 --68 --65 --66 --66 --66 --65 --65 --61 --57 --51 --46 --39 --34 --29 --27 --26 --27 --29 -127 -127 -127 -127 -127 -57 -6 --3 -6 -25 -41 -52 -50 -43 -29 -17 -5 --2 --6 --5 --3 -3 -7 -12 -15 -16 -13 -10 -3 --2 --10 --15 --19 --20 --19 --15 --10 --5 --1 -4 -5 -4 -0 --5 --12 --17 --22 --24 --25 --23 --20 --14 --9 --3 -0 -2 --1 --3 --9 --15 --21 --25 --28 --27 --80 --123 --128 --116 --88 --88 --101 --111 --114 --111 --107 --102 --97 --93 --88 --81 --74 --66 --59 --52 --47 --43 --42 --42 --44 --45 --47 --47 --47 --44 --41 --35 --30 --25 --21 --18 --17 --17 --20 --22 --26 --29 --31 --30 --29 --25 --22 --16 --13 --9 --8 --7 --10 --12 --16 --19 --23 --24 --25 --23 --20 --16 --12 --8 -127 -127 -127 -127 -127 -82 -18 --4 --4 -9 -24 -37 -43 -46 -43 -39 -32 -27 -20 -14 -6 -0 --5 --7 --8 --6 --3 -2 -6 -10 -11 -12 --48 --96 --128 --113 --93 --100 --117 --126 --126 --116 --103 --89 --79 --72 --67 --65 --65 --65 --66 --65 --65 --61 --58 --52 --47 --40 --34 --29 --27 --25 --26 --28 -127 -127 -127 -127 -127 -56 -6 --5 -5 -24 -40 -51 -51 -44 -31 -18 -6 --1 --6 --6 --4 -1 -5 -11 -13 -16 -14 -11 -5 --1 --8 --13 --18 --20 --20 --17 --13 --6 --2 -3 -4 -5 -1 --3 --10 --15 --21 --24 --26 --24 --21 --15 --10 --4 --1 -2 -0 --2 --7 --13 --19 --24 --27 --27 --80 --123 --128 --117 --89 --89 --102 --111 --114 --111 --106 --101 --97 --93 --89 --82 --76 --68 --61 --52 --48 --43 --42 --41 --43 --44 --46 --47 --47 --45 --42 --36 -127 -127 -127 -127 -127 -78 -19 --3 --5 -4 -14 -22 -24 -25 -22 -22 -21 -22 -22 -21 -18 -13 -6 --1 --8 --12 --15 --13 --11 --6 --2 -4 --53 --101 --128 --108 --86 --92 --110 --122 --126 --120 --111 --98 --88 --78 --70 --63 --58 --55 --54 --54 --55 --56 --57 --55 --54 --49 --45 --38 --34 --28 --24 --21 -127 -127 -127 -127 -127 -63 -3 --14 --8 -10 -28 -42 -47 -47 -40 -32 -21 -12 -3 --2 --7 --8 --8 --5 --2 -3 -7 -11 -12 -11 -7 -2 --56 --102 --128 --118 --95 --101 --115 --122 --119 --109 --97 --86 --79 --75 --74 --73 --74 --73 --72 --68 --65 --58 --52 --45 --39 --33 --31 --29 --30 --32 --34 --36 -127 -127 -127 -127 -127 -61 -16 -5 -12 -28 -41 -47 -42 -33 -19 -8 -0 --2 --1 -3 -8 -14 -17 -19 -17 -14 -7 -0 --7 --12 --17 --18 --72 --116 --128 --112 --84 --84 --97 --106 --109 --106 --101 --96 --94 --89 --86 --80 --75 --67 --59 --52 --46 --42 --39 --39 --40 --42 --44 --45 --46 --44 --42 --37 -127 -127 -127 -127 -127 -78 -21 --1 --3 -6 -15 -22 -24 -24 -21 -21 -20 -22 -22 -22 -19 -15 -7 -0 --7 --11 --14 --14 --12 --8 --3 -3 --55 --102 --128 --107 --85 --92 --109 --120 --124 --119 --111 --99 --89 --79 --71 --64 --58 --55 --53 --52 --54 --54 --56 --55 --54 --49 --46 --39 --34 --28 --25 --21 -127 -127 -127 -127 -127 -64 -3 --14 --9 -8 -26 -40 -45 -47 -40 -33 -23 -14 -5 --1 --7 --8 --9 --6 --3 -2 -6 -10 -11 -11 -7 -3 --54 --101 --128 --117 --96 --102 --116 --123 --121 --110 --98 --86 --79 --74 --73 --72 --73 --72 --71 --68 --65 --59 --53 --46 --40 --34 --31 --29 --29 --31 --33 --35 -127 -127 -127 -127 -127 -60 -13 -3 -12 -29 -41 -48 -43 -34 -20 -9 -0 --3 --3 -2 -6 -12 -16 -19 -17 -15 -8 -2 --5 --11 --16 --18 --72 --117 --128 --112 --84 --84 --97 --106 --109 --105 --101 --96 --93 --89 --86 --81 --75 --68 --60 --53 --47 --42 --39 --38 --39 --41 --43 --44 --46 --44 --42 --38 -127 -127 -127 -127 -127 -78 -21 -0 --2 -7 -16 -23 -24 -24 -21 -19 -19 -21 -21 -22 -19 -16 -9 -3 --5 --10 --14 --14 --14 --9 --4 -2 --55 --102 --128 --107 --85 --90 --107 --120 --124 --119 --111 --100 --90 --80 --72 --64 --59 --54 --52 --51 --53 --53 --55 --54 --53 --50 --47 --41 --35 --29 --25 --22 -127 -127 -127 -127 -127 -65 -4 --15 --10 -7 -24 -39 -45 -46 -40 -33 -24 -15 -7 -0 --5 --7 --9 --7 --5 -0 -4 -9 -10 -11 -8 -5 --53 --100 --128 --116 --95 --102 --116 --124 --121 --110 --98 --86 --79 --73 --72 --71 --72 --71 --71 --68 --65 --59 --53 --47 --41 --35 --31 --29 --29 --29 --32 --34 --37 --38 --38 --36 --33 --28 --24 --18 --15 --12 --12 --12 --15 --18 --23 --25 --28 --28 --26 --23 --19 --14 --11 --7 --6 --5 --8 --11 --16 --18 --22 --23 -127 -127 -127 -127 -127 -82 -32 -17 -20 -31 -39 -43 -38 -30 -20 -13 -9 -10 -13 -18 -21 -24 -22 -19 -13 -6 --2 --8 --13 --15 --15 --12 --67 --112 --128 --106 --79 --81 --96 --107 --112 --111 --107 --100 --94 --87 --81 --73 --66 --58 --52 --46 --44 --42 --44 --45 --47 --48 --49 --47 --44 --39 --35 --29 -127 -127 -127 -127 -127 -75 -13 --10 --11 -0 -13 -24 -30 -33 -32 -30 -27 -25 -21 -17 -9 -3 --4 --8 --12 --12 --11 --6 --2 -4 -7 -9 --49 --97 --128 --111 --91 --99 --116 --126 --128 --119 --107 --94 --83 --73 --67 --63 --61 --60 --61 --61 --62 --61 --59 --55 --51 --44 --39 --32 --29 --25 --24 --24 -127 -127 -127 -127 -127 -57 -2 --10 --1 -19 -37 -49 -51 -47 -36 -25 -13 -3 --4 --6 --7 --5 --1 -4 -8 -12 -13 -14 -10 -6 --2 --7 --14 --18 --21 --20 --18 --13 --8 --2 -1 -4 -3 -1 --4 --9 --16 --20 --25 --25 --25 --21 --16 --10 --5 --1 -1 -1 --3 --7 --14 --19 --25 --27 --80 --123 --128 --120 --92 --92 --104 --112 --113 --108 --103 --98 --95 --92 --90 --85 --80 --73 --66 --58 --51 --45 --41 --38 --39 --40 --42 --44 --45 --45 --44 --40 -127 -127 -127 -127 -127 -77 -22 -2 -1 -10 -19 -24 -24 -22 -17 -16 -16 -19 -20 -22 -21 -18 -12 -6 --2 --8 --13 --15 --15 --12 --7 --2 --58 --105 --128 --106 --83 --88 --105 --117 --122 --118 --112 --102 --92 --82 --73 --65 --59 --54 --51 --50 --51 --51 --53 --53 --53 --51 --48 --43 --38 --31 --26 --22 -127 -127 -127 -127 -127 -67 -5 --15 --12 -4 -21 -35 -42 -44 -40 -34 -26 -19 -10 -3 --3 --7 --10 --9 --7 --3 -1 -6 -9 -11 -9 -7 --51 --99 --128 --115 --95 --102 --117 --125 --123 --112 --100 --88 --79 --72 --70 --69 --69 --69 --69 --67 --65 --60 --55 --48 --43 --36 --32 --28 --27 --28 --30 --32 --35 --37 --38 --37 --35 --30 --26 --21 --17 --13 --12 --12 --14 --17 --21 --24 --26 --27 --27 --25 --21 --17 --13 --8 --6 --5 --7 --9 --13 --16 --20 --22 -127 -127 -127 -127 -127 -80 -31 -17 -21 -34 -43 -47 -41 -32 -21 -13 -8 -8 -10 -16 -20 -23 -23 -21 -16 -10 -2 --5 --11 --14 --16 --14 --11 --5 --1 -4 -6 -7 -5 -1 --5 --10 --17 --21 --24 --24 --21 --17 --12 --5 --1 -2 -2 -0 --4 --10 --16 --21 --25 --26 --27 --23 --18 --12 --67 --112 --128 --112 --88 --92 --108 --120 --126 --121 --114 --104 --96 --86 --77 --68 --62 --56 --53 --51 --51 --51 --53 --54 --54 --52 --50 --44 --39 --33 --28 --23 --21 --20 --21 --23 --26 --29 --32 --33 --33 --30 --27 --22 --17 --12 --10 --8 --9 --10 --14 --17 --21 --24 --26 --25 --24 --20 --16 --12 --8 --5 --5 --5 -127 -127 -127 -127 -127 -69 -11 --2 -5 -24 -42 -55 -58 -54 -44 -33 -20 -11 -3 --1 --4 --3 --1 -4 -7 -12 -14 -16 -13 -10 -3 --3 --59 --106 --128 --116 --92 --96 --110 --116 --114 --104 --95 --85 --80 --77 --77 --77 --77 --75 --71 --66 --60 --53 --47 --40 --36 --32 --31 --31 --34 --35 --38 --39 -127 -127 -127 -127 -127 -66 -20 -7 -12 -26 -35 -40 -35 -26 -15 -6 -1 -1 -4 -9 -14 -19 -19 -19 -14 -9 -1 --6 --13 --16 --19 --17 --71 --115 --128 --109 --81 --82 --95 --106 --111 --109 --105 --99 --95 --89 --84 --76 --69 --61 --54 --48 --45 --41 --41 --42 --44 --45 --47 --47 --46 --42 --38 --32 -127 -127 -127 -127 -127 -77 -16 --7 --8 -1 -13 -23 -26 -29 -27 -26 -25 -25 -22 -19 -14 -8 -0 --5 --11 --13 --13 --10 --7 --1 -3 -7 --51 --99 --128 --109 --88 --95 --113 --124 --126 --119 --109 --96 --85 --75 --68 --62 --59 --57 --57 --57 --59 --58 --58 --56 --53 --47 --42 --35 --31 --25 --23 --22 -127 -127 -127 -127 -127 -59 -1 --13 --5 -14 -32 -46 -50 -48 -39 -29 -17 -8 --1 --5 --8 --7 --6 --1 -3 -8 -11 -13 -12 -9 -3 --3 --59 --106 --128 --118 --94 --98 --112 --118 --116 --106 --96 --86 --81 --77 --77 --76 --77 --75 --72 --67 --62 --55 --48 --41 --37 --32 --31 --31 --33 --35 --38 --39 -127 -127 -127 -127 -127 -65 -19 -7 -12 -26 -37 -42 -37 -28 -16 -7 -0 -0 -2 -8 -13 -18 -19 -19 -15 -10 -2 --4 --11 --15 --18 --17 --72 --116 --128 --109 --81 --82 --96 --106 --110 --108 --104 --98 --94 --89 --85 --78 --71 --63 --56 --49 --45 --41 --41 --41 --43 --45 --46 --46 --46 --42 --39 --34 -127 -127 -127 -127 -127 -77 -17 --6 --8 -2 -13 -22 -26 -27 -26 -26 -24 -24 -22 -20 -15 -10 -2 --4 --10 --13 --14 --12 --8 --2 -2 -6 --52 --99 --128 --108 --87 --94 --112 --123 --126 --119 --109 --97 --86 --76 --69 --62 --59 --56 --56 --56 --57 --57 --58 --55 --53 --48 --43 --36 --31 --26 --24 --21 -127 -127 -127 -127 -127 -60 -1 --13 --6 -12 -30 -44 -49 -48 -39 -29 -18 -9 -0 --4 --8 --8 --6 --2 -1 -7 -10 -12 -12 -10 -5 --1 --58 --105 --128 --117 --94 --99 --113 --119 --117 --107 --96 --86 --80 --76 --76 --75 --76 --75 --73 --68 --63 --56 --49 --42 --37 --33 --31 --30 --32 --34 --36 --38 -127 -127 -127 -127 -127 -64 -17 -6 -12 -27 -38 -43 -39 -29 -17 -7 -0 --1 -1 -6 -11 -17 -18 -19 -16 -12 -4 --3 --10 --15 --18 --18 --72 --116 --128 --110 --82 --83 --95 --106 --109 --107 --103 --98 --94 --89 --85 --79 --72 --64 --57 --49 --45 --41 --40 --40 --42 --43 --46 --46 --46 --43 --40 --34 -127 -127 -127 -127 -127 -77 -18 --5 --7 -3 -14 -22 -25 -26 -25 -24 -23 -24 -22 -21 -16 -12 -4 --3 --9 --13 --15 --13 --10 --4 -0 -5 --53 --100 --128 --108 --86 --93 --110 --122 --126 --119 --110 --98 --87 --77 --69 --62 --59 --56 --55 --54 --56 --56 --57 --55 --53 --49 --44 --37 --32 --27 --24 --21 -127 -127 -127 -127 -127 -61 -1 --14 --7 -11 -29 -43 -48 -47 -40 -31 -19 -10 -2 --3 --7 --8 --7 --4 --1 -5 -8 -11 -11 -10 -6 -0 --57 --103 --128 --117 --95 --99 --114 --120 --118 --108 --97 --86 --80 --76 --75 --74 --75 --74 --72 --68 --64 --57 --51 --44 --38 --33 --31 --30 --31 --32 --36 --38 -127 -127 -127 -127 -127 -62 -16 -5 -12 -27 -39 -44 -40 -31 -18 -7 -0 --1 --1 -4 -10 -15 -17 -19 -16 -12 -5 --2 --9 --14 --18 --18 --72 --116 --128 --111 --82 --83 --96 --105 --109 --106 --102 --97 --94 --89 --85 --79 --73 --65 --58 --50 --45 --41 --40 --39 --41 --42 --45 --46 --46 --44 --41 --35 -127 -127 -127 -127 -127 -77 -19 --3 --5 -4 -14 -22 -25 -25 -23 -23 -22 -23 -22 -21 -18 -13 -5 --1 --8 --12 --14 --13 --11 --6 --1 -4 --53 --101 --128 --108 --86 --93 --110 --122 --125 --120 --111 --99 --88 --78 --70 --63 --58 --55 --54 --54 --55 --56 --57 --55 --54 --49 --45 --38 --33 --28 --24 --21 -127 -127 -127 -127 -127 -62 -2 --14 --8 -10 -27 -42 -47 -47 -40 -32 -21 -12 -3 --2 --7 --8 --8 --5 --2 -3 -7 -11 -11 -11 -7 -2 --5 --11 --17 --20 --22 --20 --17 --11 --6 --1 -2 -4 -2 --1 --6 --12 --18 --23 --26 --26 --24 --19 --14 --8 --4 -0 -1 -0 --4 --9 --16 --21 --75 --119 --128 --122 --96 --98 --110 --116 --115 --107 --99 --92 --89 --86 --86 --84 --82 --77 --72 --64 --57 --49 --44 --39 --36 --35 --36 --38 --41 --42 --43 --42 --41 --37 --33 --27 --22 --17 --15 --14 --15 --17 --21 --24 --28 --29 --29 --27 --25 --20 --16 --11 --8 --6 --7 --8 --12 --15 --19 --22 --24 --24 --23 --19 -127 -127 -127 -127 -127 -89 -30 -8 -5 -14 -23 -30 -31 -31 -27 -26 -25 -26 -26 -26 -23 -18 -11 -3 --4 --9 --12 --12 --10 --5 --1 -5 --53 --100 --128 --106 --84 --90 --107 --120 --124 --119 --110 --98 --88 --78 --70 --62 --58 --53 --52 --52 --53 --54 --55 --55 --53 --49 --45 --39 --34 --28 --24 --21 -127 -127 -127 -127 -127 -64 -3 --15 --9 -8 -26 -40 -46 -47 -41 -33 -23 -14 -5 --1 --6 --8 --9 --6 --3 -2 -6 -10 -11 -11 -8 -3 --4 --10 --16 --19 --22 --21 --18 --13 --7 --2 -1 -3 -2 -0 --5 --10 --17 --22 --26 --26 --25 --21 --16 --10 --5 -0 -1 -0 --3 --8 --14 --19 --73 --118 --128 --123 --97 --99 --112 --117 --116 --108 --99 --92 --88 --85 --85 --83 --82 --78 --73 --66 --58 --51 --45 --39 --36 --35 --36 --37 --39 --41 --43 --42 --41 --38 --34 --28 --23 --18 --16 --14 --15 --16 --20 --23 --27 --29 --29 --28 --26 --21 --17 --12 --9 --6 --7 --8 --11 --14 --18 --21 --24 --24 --24 --20 -127 -127 -127 -127 -127 -89 -31 -9 -6 -15 -24 -30 -31 -30 -26 -25 -24 -26 -26 -26 -23 -19 -12 -5 --3 --7 --12 --12 --11 --7 --2 -3 --54 --101 --128 --105 --83 --88 --106 --118 --123 --118 --111 --99 --89 --79 --71 --63 --58 --53 --52 --51 --52 --53 --54 --54 --53 --49 --46 --40 --35 --29 --25 --21 -127 -127 -127 -127 -127 -64 -3 --15 --10 -7 -24 -39 -45 -46 -40 -33 -23 -15 -6 -0 --6 --8 --9 --7 --4 -0 -4 -9 -10 -11 -9 -5 --53 --101 --128 --117 --95 --102 --117 --124 --122 --111 --99 --86 --79 --74 --72 --71 --72 --71 --71 --69 --65 --60 --54 --47 --41 --35 --31 --29 --29 --29 --33 --34 -127 -127 -127 -127 -127 -60 -13 -2 -11 -28 -41 -49 -45 -36 -22 -10 -1 --3 --3 -0 -5 -11 -15 -18 -17 -15 -9 -3 --4 --10 --16 --18 --19 --17 --13 --7 --3 -2 -5 -5 -3 -0 --6 --12 --19 --23 --26 --25 --22 --17 --11 --6 --2 -1 -1 --1 --6 --11 --17 --22 --26 --27 --27 --23 --76 --120 --128 --113 --87 --88 --103 --114 --119 --117 --112 --105 --99 --92 --85 --77 --69 --61 --55 --49 --47 --45 --46 --47 --49 --50 --50 --48 --45 --41 --36 --30 -127 -127 -127 -127 -127 -75 -13 --11 --11 -0 -13 -24 -30 -33 -31 -30 -27 -25 -20 -16 -9 -3 --4 --8 --12 --12 --11 --6 --2 -3 -7 -9 --49 --97 --128 --111 --91 --98 --116 --126 --127 --119 --107 --93 --82 --73 --67 --63 --61 --59 --60 --61 --61 --60 --59 --55 --51 --44 --39 --32 --28 --24 --24 --24 --26 --29 --33 --34 --36 --34 --33 --28 --24 --19 --15 --11 --10 --10 --13 --15 --19 --22 --26 --26 --27 --24 --21 --16 --13 --8 --6 --5 --6 --8 --12 --15 -127 -127 -127 -127 -127 -69 -21 -11 -19 -36 -49 -57 -53 -44 -29 -17 -6 -1 -0 -3 -7 -13 -16 -20 -19 -18 -13 -8 -0 --6 --13 --16 --70 --115 --128 --112 --85 --85 --97 --105 --108 --103 --98 --93 --90 --87 --85 --81 --76 --69 --62 --54 --48 --42 --39 --37 --37 --38 --41 --42 --44 --44 --43 --39 -127 -127 -127 -127 -127 -78 -23 -3 -2 -10 -19 -24 -24 -22 -18 -17 -16 -19 -20 -22 -21 -18 -12 -6 --2 --8 --13 --15 --15 --12 --7 --2 -3 -7 -8 -7 -3 --2 --9 --14 --20 --23 --24 --22 --19 --13 --7 --2 -1 -3 -1 --2 --8 --14 --20 --24 --27 --27 --25 --19 --15 --8 --4 -0 --57 --104 --128 --116 --96 --103 --121 --128 --128 --124 --112 --98 --87 --77 --70 --65 --63 --61 --62 --62 --63 --62 --61 --57 --53 --47 --41 --35 --30 --26 --25 --24 -127 -127 -127 -127 -127 -58 -1 --11 --3 -17 -35 -48 -51 -47 -37 -26 -13 -4 --3 --6 --8 --6 --3 -2 -6 -11 -12 -13 -10 -7 --1 --6 --63 --108 --128 --117 --93 --97 --110 --116 --114 --105 --95 --87 --82 --79 --79 --78 --78 --75 --72 --66 --60 --52 --46 --39 --36 --32 --32 --33 --35 --37 --39 --40 --41 --39 --36 --31 --26 --20 --16 --13 --13 --13 --17 --19 --23 --26 --28 --28 --27 --24 --20 --15 --11 --8 --7 --6 --8 --11 --15 --18 --22 --23 --24 --22 -127 -127 -127 -127 -127 -88 -33 -13 -11 -20 -28 -33 -31 -28 -23 -21 -20 -21 -23 -26 -25 -23 -17 -11 -2 --4 --10 --13 --14 --11 --8 --1 --58 --105 --128 --106 --82 --86 --103 --115 --120 --117 --110 --101 --92 --82 --74 --66 --59 --53 --50 --49 --49 --49 --51 --52 --52 --50 --48 --43 --38 --32 --27 --22 -127 -127 -127 -127 -127 -69 -7 --14 --11 -3 -20 -34 -40 -43 -39 -34 -26 -20 -11 -4 --2 --6 --9 --10 --8 --5 --1 -5 -8 -11 -10 -8 -2 --4 --11 --16 --20 --22 --21 --18 --15 --8 --3 -2 -3 -3 -0 --4 --11 --16 --22 --25 --26 --25 --22 --16 --11 --5 --2 -1 -0 --2 --8 --14 --69 --114 --128 --124 --100 --104 --116 --122 --120 --110 --100 --90 --85 --81 --82 --81 --80 --78 --75 --69 --63 --55 --49 --42 --37 --34 --33 --34 --36 --37 --39 --41 -127 -127 -127 -127 -127 -66 -19 -7 -12 -26 -35 -39 -35 -26 -15 -7 -1 -1 -4 -9 -14 -19 -20 -19 -14 -8 -0 --6 --13 --16 --18 --16 --70 --115 --128 --109 --81 --82 --96 --107 --111 --109 --105 --99 --95 --89 --84 --77 --70 --62 --55 --48 --44 --41 --41 --42 --45 --46 --48 --47 --46 --42 --38 --32 -127 -127 -127 -127 -127 -77 -16 --6 --8 -2 -13 -23 -27 -29 -28 -27 -26 -25 -22 -20 -14 -8 -0 --5 --11 --12 --13 --10 --7 --1 -3 -7 --51 --99 --128 --109 --89 --96 --114 --125 --127 --120 --109 --96 --85 --75 --68 --62 --59 --57 --57 --57 --59 --58 --58 --55 --53 --47 --42 --35 --30 --25 --23 --22 -127 -127 -127 -127 -127 -60 -2 --12 --5 -15 -32 -47 -50 -48 -39 -29 -16 -8 --1 --5 --8 --7 --6 --1 -3 -8 -11 -13 -11 -9 -3 --3 --59 --106 --128 --117 --94 --98 --112 --118 --116 --106 --96 --86 --80 --77 --77 --76 --77 --75 --72 --67 --62 --55 --48 --41 --37 --33 --32 --31 --33 --35 --38 --39 --40 --39 --37 --33 --28 --23 --19 --15 --13 --13 --15 --17 --21 --24 --28 --28 --28 --25 --23 --17 --14 --9 --7 --6 --7 --9 --13 --16 --20 --23 --24 --23 -127 -127 -127 -127 -127 -87 -34 -15 -14 -23 -31 -35 -32 -28 -22 -18 -16 -19 -21 -24 -25 -24 -20 -14 -5 --2 --9 --12 --15 --13 --10 --5 -0 -5 -8 -9 -7 -3 --3 --9 --16 --20 --23 --23 --21 --16 --11 --5 --1 -2 -2 -1 --4 --9 --15 --20 --25 --26 --26 --23 --19 --13 --7 --2 --59 --106 --128 --114 --93 --100 --117 --128 --128 --124 --114 --100 --90 --79 --72 --65 --62 --58 --58 --58 --60 --59 --60 --57 --54 --49 --44 --37 --32 --27 --24 --23 --24 --25 --29 --31 --34 --35 --35 --32 --30 --24 --20 --14 --12 --10 --10 --12 --15 --18 --22 --25 --27 --26 --25 --21 --17 --12 --9 --6 --5 --5 --8 --11 -127 -127 -127 -127 -127 -67 -17 -6 -15 -34 -49 -59 -58 -50 -36 -23 -11 -3 --2 --1 -1 -6 -10 -16 -17 -19 -16 -13 -6 --1 --8 --13 --17 --18 --18 --13 --9 --3 -1 -5 -5 -5 -1 --4 --11 --16 --22 --24 --25 --23 --19 --13 --8 --2 -0 -2 -0 --3 --9 --15 --21 --25 --28 --27 --80 --123 --128 --116 --87 --88 --101 --111 --114 --112 --107 --102 --98 --93 --88 --81 --74 --66 --59 --51 --47 --43 --42 --42 --43 --45 --47 --47 --47 --44 --41 --35 --30 --24 --21 --17 --18 --17 --20 --23 --27 --29 --31 --31 --29 --26 --22 --17 --13 --9 --8 --7 --10 --12 --16 --19 --23 --24 --25 --23 --20 --16 --12 --8 -127 -127 -127 -127 -127 -82 -19 --4 --3 -10 -24 -37 -43 -46 -43 -39 -33 -28 -20 -14 -6 -0 --5 --7 --8 --6 --3 -2 -6 -11 -11 -11 -8 -3 --4 --11 --17 --20 --22 --21 --18 --13 --7 --2 -2 -4 -3 -0 --6 --11 --18 --22 --26 --26 --25 --20 --15 --9 --4 -0 -1 -0 --4 --8 --64 --110 --128 --124 --101 --106 --120 --126 --123 --112 --101 --89 --83 --79 --78 --77 --78 --76 --75 --70 --66 --58 --52 --45 --39 --34 --32 --31 --33 --34 --37 --38 -127 -127 -127 -127 -127 -63 -16 -5 -12 -27 -39 -44 -39 -30 -17 -7 -0 --2 --1 -4 -9 -15 -18 -19 -16 -12 -5 --1 --9 --14 --18 --18 --72 --116 --128 --110 --83 --83 --96 --105 --109 --107 --102 --97 --94 --89 --85 --79 --73 --65 --58 --50 --45 --41 --40 --39 --41 --42 --45 --46 --46 --44 --41 --35 --31 --25 --21 --17 --17 --16 --19 --21 --25 --27 --30 --30 --30 --26 --23 --17 --14 --10 --8 --7 --9 --11 --15 --18 --23 --24 --25 --24 --21 --17 --13 --9 -127 -127 -127 -127 -127 -84 -20 --3 --3 -9 -23 -35 -42 -45 -42 -39 -33 -28 -21 -16 -8 -2 --4 --6 --9 --7 --4 -1 -5 -10 -11 -12 -8 -4 --3 --8 --15 --19 --22 --21 --19 --14 --9 --3 -1 -4 -3 -1 --4 --9 --16 --21 --25 --26 --25 --21 --17 --10 --6 --1 -1 -1 --3 --7 --63 --109 --128 --123 --101 --106 --120 --127 --124 --113 --101 --90 --83 --78 --78 --77 --77 --76 --74 --70 --66 --60 --53 --46 --41 --35 --32 --30 --32 --33 --36 --37 -127 -127 -127 -127 -127 -61 -15 -4 -12 -28 -39 -46 -41 -32 -19 -8 -0 --2 --2 -3 -8 -14 -16 -19 -16 -13 -6 -0 --7 --13 --17 --18 --72 --117 --128 --111 --83 --84 --96 --105 --109 --105 --101 --96 --93 --89 --85 --80 --74 --66 --58 --51 --46 --41 --39 --38 --40 --42 --44 --45 --45 --44 --41 --36 --32 --26 --22 --17 --16 --15 --17 --20 --24 --26 --29 --30 --30 --27 --23 --18 --15 --10 --8 --6 --8 --10 --14 --17 --22 --24 --25 --24 --22 --18 --14 --10 -127 -127 -127 -127 -127 -84 -20 --2 --3 -8 -21 -34 -40 -43 -40 -38 -33 -29 -23 -17 -10 -3 --3 --7 --9 --8 --6 --1 -3 -8 -10 -12 --47 --96 --128 --111 --92 --99 --116 --126 --126 --117 --105 --91 --81 --72 --67 --63 --63 --62 --63 --63 --63 --61 --59 --54 --49 --42 --36 --30 --27 --24 --25 --25 -127 -127 -127 -127 -127 -56 -4 --6 -2 -22 -39 -51 -51 -47 -34 -22 -9 -1 --6 --6 --6 --2 -2 -8 -11 -15 -14 -13 -8 -2 --5 --11 --16 --19 --20 --18 --15 --9 --4 -1 -3 -5 -3 --1 --7 --13 --19 --23 --26 --25 --23 --18 --13 --7 --3 -1 -0 --1 --5 --10 --17 --21 --26 --27 --80 --123 --128 --117 --89 --89 --102 --111 --113 --109 --105 --99 --96 --92 --89 --83 --77 --70 --63 --54 --49 --43 --41 --39 --40 --42 --44 --45 --47 --45 --43 --38 --34 --28 --23 --19 --17 --15 --17 --19 --23 --25 --29 --30 --30 --28 --25 --20 --16 --11 --9 --7 --8 --9 --13 --16 --21 --23 --25 --24 --23 --19 --16 --11 -127 -127 -127 -127 -127 -85 -22 --2 --3 -8 -21 -33 -38 -41 -39 -37 -33 -29 -23 -18 -11 -5 --2 --6 --10 --9 --7 --2 -2 -7 -10 -11 --48 --96 --128 --111 --91 --99 --116 --126 --126 --117 --106 --92 --81 --72 --67 --63 --62 --61 --62 --62 --63 --61 --59 --54 --49 --43 --37 --31 --27 --24 --24 --24 -127 -127 -127 -127 -127 -57 -3 --8 -1 -20 -39 -51 -52 -47 -35 -23 -10 -1 --5 --7 --7 --3 -0 -6 -10 -14 -13 -13 -9 -4 --4 --10 --16 --19 --21 --19 --16 --11 --6 --1 -2 -4 -3 -0 --5 --11 --18 --22 --25 --25 --24 --19 --15 --8 --3 -0 -1 -0 --4 --9 --16 --20 --25 --27 --80 --123 --128 --119 --91 --91 --103 --111 --113 --109 --104 --99 --96 --92 --89 --84 --79 --71 --64 --56 --49 --44 --41 --39 --40 --41 --43 --45 --46 --45 --43 --39 -127 -127 -127 -127 -127 -77 -21 -0 --1 -8 -17 -23 -24 -22 -19 -18 -17 -20 -21 -22 -20 -17 -10 -3 --4 --10 --14 --15 --14 --10 --5 -0 --57 --103 --128 --107 --84 --89 --106 --119 --123 --119 --112 --100 --91 --81 --73 --64 --59 --54 --52 --50 --51 --52 --54 --54 --54 --51 --47 --41 --36 --30 --26 --22 -127 -127 -127 -127 -127 -66 -4 --15 --10 -6 -23 -37 -43 -46 -40 -34 -25 -17 -8 -1 --5 --8 --9 --8 --6 --1 -3 -8 -10 -11 -9 -6 --52 --100 --128 --117 --96 --102 --117 --124 --122 --111 --99 --87 --79 --73 --71 --70 --71 --70 --70 --68 --66 --60 --55 --47 --42 --35 --32 --28 --28 --29 --32 --34 -127 -127 -127 -127 -127 -59 -12 -2 -10 -28 -42 -50 -46 -37 -23 -11 -1 --3 --4 --1 -3 -10 -13 -17 -17 -15 -11 -6 --2 --9 --15 --18 --72 --117 --128 --113 --86 --86 --98 --106 --108 --104 --99 --94 --91 --88 --86 --81 --77 --69 --63 --54 --48 --42 --39 --37 --38 --39 --41 --43 --44 --44 --43 --39 -127 -127 -127 -127 -127 -77 -23 -2 -0 -10 -18 -24 -25 -22 -18 -17 -16 -18 -20 -22 -21 -18 -12 -6 --3 --9 --14 --15 --15 --11 --7 --2 --58 --105 --128 --107 --83 --88 --105 --117 --123 --118 --111 --101 --91 --82 --74 --65 --59 --54 --51 --49 --50 --51 --53 --53 --53 --51 --48 --42 --37 --31 --26 --22 -127 -127 -127 -127 -127 -67 -5 --15 --11 -4 -21 -35 -42 -44 -40 -34 -26 -19 -10 -3 --3 --7 --10 --9 --7 --3 -1 -7 -9 -11 -9 -7 --51 --99 --128 --116 --95 --102 --117 --125 --123 --113 --100 --87 --79 --73 --70 --69 --70 --70 --70 --68 --66 --61 --56 --49 --43 --36 --32 --28 --28 --28 --31 --32 -127 -127 -127 -127 -127 -58 -10 -1 -9 -28 -42 -50 -47 -39 -25 -13 -2 --3 --5 --2 -2 -8 -12 -16 -17 -16 -11 -6 --1 --7 --14 --17 --71 --116 --128 --114 --86 --87 --99 --107 --109 --104 --98 --93 --90 --88 --86 --82 --78 --71 --64 --56 --50 --43 --39 --37 --37 --37 --40 --42 --44 --44 --43 --40 -127 -127 -127 -127 -127 -77 -23 -3 -2 -11 -20 -25 -25 -22 -17 -15 -14 -17 -19 -21 -21 -19 -13 -7 --1 --7 --13 --15 --16 --13 --9 --3 --60 --106 --128 --107 --83 --87 --104 --116 --121 --118 --111 --101 --93 --83 --75 --66 --60 --54 --51 --49 --49 --49 --52 --52 --53 --51 --49 --43 --38 --32 --27 --22 -127 -127 -127 -127 -127 -68 -6 --14 --12 -3 -20 -34 -41 -43 -39 -35 -26 -20 -11 -5 --2 --6 --9 --9 --8 --4 -0 -5 -8 -11 -9 -8 --51 --98 --128 --115 --95 --102 --118 --125 --124 --113 --101 --88 --79 --72 --70 --68 --68 --68 --69 --67 --65 --61 --56 --49 --44 --37 --32 --28 --27 --27 --29 --31 --34 --36 --38 --37 --35 --31 --26 --20 --17 --13 --12 --11 --13 --15 --20 --23 --26 --27 --27 --25 --22 --18 --14 --9 --6 --5 --6 --8 --12 --15 --20 --22 -127 -127 -127 -127 -127 -79 -31 -17 -21 -34 -44 -48 -42 -33 -21 -12 -7 -7 -9 -14 -18 -23 -23 -22 -17 -11 -3 --4 --11 --14 --17 --15 --70 --114 --128 --108 --80 --81 --95 --105 --110 --108 --104 --99 --94 --88 --83 --76 --69 --61 --54 --48 --44 --41 --41 --42 --44 --45 --47 --46 --45 --42 --38 --32 -127 -127 -127 -127 -127 -77 -16 --7 --9 -2 -13 -22 -27 -29 -28 -28 -25 -25 -22 -19 -13 -8 -0 --5 --11 --12 --13 --10 --6 --1 -3 -7 --51 --98 --128 --110 --89 --96 --114 --125 --127 --120 --109 --96 --85 --75 --69 --62 --59 --57 --57 --57 --59 --59 --59 --56 --53 --47 --42 --35 --30 --25 --24 --22 -127 -127 -127 -127 -127 -60 -2 --12 --4 -15 -33 -47 -51 -48 -39 -28 -16 -7 --1 --5 --8 --7 --5 -0 -4 -8 -11 -13 -11 -8 -3 --3 --10 --15 --20 --21 --20 --17 --12 --6 --2 -3 -3 -3 --1 --5 --11 --17 --22 --24 --26 --24 --21 --15 --10 --4 --1 -1 -0 --3 --9 --15 --21 --25 --78 --121 --128 --121 --94 --95 --107 --113 --114 --108 --101 --95 --92 --89 --88 --85 --81 --75 --69 --61 --54 --47 --42 --38 --37 --37 --39 --41 --44 --44 --44 --42 -127 -127 -127 -127 -127 -75 -23 -4 -4 -15 -22 -27 -26 -22 -15 -13 -11 -14 -16 -20 -21 -20 -16 -10 -2 --4 --11 --15 --17 --15 --12 --6 --62 --108 --128 --106 --82 --85 --101 --113 --119 --116 --111 --102 --94 --84 --76 --68 --61 --55 --51 --47 --48 --47 --50 --50 --52 --51 --49 --45 --40 --34 --29 --24 -127 -127 -127 -127 -127 -71 -8 --14 --12 -2 -17 -31 -38 -41 -38 -34 -28 -22 -14 -8 -1 --4 --9 --11 --10 --7 --4 -2 -6 -10 -10 -9 --49 --97 --128 --114 --94 --102 --117 --127 --125 --115 --102 --89 --79 --71 --68 --66 --66 --66 --67 --66 --65 --62 --58 --51 --46 --39 --34 --29 --27 --26 --27 --29 --32 --35 --37 --37 --36 --33 --29 --23 --19 --14 --12 --11 --12 --14 --18 --21 --25 --26 --27 --26 --24 --20 --16 --11 --8 --6 --6 --7 --10 --13 --18 --20 -127 -127 -127 -127 -127 -76 -29 -17 -22 -36 -46 -51 -45 -36 -23 -13 -6 -4 -6 -11 -15 -20 -22 -22 -19 -14 -6 --1 --8 --13 --16 --16 --14 --10 --5 -1 -4 -7 -7 -4 --1 --6 --13 --18 --23 --24 --24 --20 --16 --10 --5 -0 -2 -2 --1 --5 --12 --17 --23 --25 --28 --26 --23 --17 --71 --116 --128 --112 --87 --90 --106 --117 --123 --120 --114 --105 --98 --88 --80 --71 --65 --57 --53 --49 --49 --48 --50 --51 --53 --52 --51 --47 --42 --36 --31 --25 --22 --20 --20 --20 --23 --26 --30 --32 --33 --31 --29 --25 --21 --16 --12 --9 --8 --9 --12 --15 --19 --22 --25 --25 --25 --22 --19 --14 --11 --7 --5 --4 -127 -127 -127 -127 -127 -72 -12 --4 -2 -20 -37 -51 -56 -54 -46 -36 -25 -15 -6 -1 --3 --4 --4 --1 -3 -8 -12 -14 -14 -12 -7 -2 --56 --102 --128 --116 --93 --98 --113 --119 --117 --107 --96 --85 --79 --75 --75 --74 --75 --73 --71 --67 --63 --56 --50 --43 --37 --32 --30 --29 --31 --33 --35 --37 -127 -127 -127 -127 -127 -63 -16 -6 -13 -28 -39 -44 -39 -30 -17 -8 -0 --1 -0 -5 -10 -16 -18 -19 -16 -12 -5 --1 --9 --14 --18 --18 --72 --116 --128 --110 --82 --82 --96 --105 --109 --106 --103 --97 --94 --89 --85 --79 --73 --65 --58 --50 --45 --41 --40 --39 --41 --43 --45 --45 --46 --43 --40 --35 -127 -127 -127 -127 -127 -77 -19 --3 --5 -4 -14 -22 -25 -25 -23 -22 -22 -23 -22 -21 -17 -13 -5 --1 --8 --12 --15 --13 --11 --6 --1 -4 --53 --100 --128 --108 --86 --92 --110 --122 --126 --119 --110 --98 --87 --77 --69 --63 --58 --55 --54 --53 --55 --56 --57 --55 --53 --49 --45 --38 --33 --27 --24 --21 -127 -127 -127 -127 -127 -62 -2 --14 --8 -10 -28 -42 -47 -47 -40 -32 -21 -12 -3 --2 --7 --8 --8 --5 --1 -4 -8 -11 -12 -10 -6 -1 --56 --103 --128 --117 --95 --100 --114 --121 --119 --109 --97 --86 --80 --76 --75 --74 --75 --74 --72 --69 --64 --58 --52 --45 --39 --33 --31 --29 --31 --32 --35 --37 -127 -127 -127 -127 -127 -62 -16 -5 -12 -28 -40 -45 -41 -32 -19 -8 -0 --2 --1 -3 -9 -14 -17 -19 -17 -13 -6 -0 --8 --13 --17 --18 --72 --116 --128 --111 --83 --83 --96 --105 --109 --106 --102 --96 --93 --89 --86 --79 --74 --66 --59 --51 --46 --41 --39 --38 --40 --42 --44 --45 --46 --44 --41 --36 -127 -127 -127 -127 -127 -78 -20 --2 --4 -5 -15 -23 -25 -25 -22 -21 -21 -22 -22 -22 -18 -15 -7 -0 --7 --11 --15 --14 --12 --7 --2 -3 --54 --102 --128 --107 --85 --91 --109 --121 --125 --120 --111 --99 --88 --78 --70 --63 --58 --54 --53 --53 --54 --54 --56 --55 --54 --50 --46 --39 --34 --28 --24 --21 -127 -127 -127 -127 -127 -63 -2 --15 --9 -8 -26 -40 -45 -46 -40 -32 -22 -13 -5 --1 --6 --8 --9 --6 --3 -2 -6 -10 -11 -11 -7 -3 --55 --102 --128 --117 --95 --101 --116 --122 --120 --109 --98 --86 --79 --74 --73 --72 --73 --72 --71 --68 --65 --59 --52 --45 --40 --34 --31 --29 --30 --31 --34 --35 -127 -127 -127 -127 -127 -60 -14 -4 -12 -29 -40 -47 -42 -33 -20 -9 -0 --3 --3 -1 -6 -12 -16 -19 -17 -14 -8 -2 --6 --12 --17 --18 --72 --117 --128 --112 --83 --84 --97 --105 --108 --105 --100 --95 --92 --89 --85 --81 --75 --67 --60 --52 --46 --41 --39 --38 --39 --41 --44 --44 --45 --44 --42 --37 -127 -127 -127 -127 -127 -77 -21 --1 --3 -6 -15 -22 -24 -23 -20 -20 -19 -21 -21 -22 -19 -15 -8 -2 --6 --10 --14 --14 --13 --8 --4 -1 --56 --103 --128 --106 --84 --90 --107 --119 --123 --119 --111 --100 --89 --79 --71 --63 --58 --54 --52 --51 --53 --53 --55 --55 --53 --50 --46 --40 --35 --29 --25 --22 -127 -127 -127 -127 -127 -64 -3 --15 --10 -7 -25 -39 -45 -46 -40 -33 -23 -15 -6 -0 --5 --8 --9 --7 --4 -0 -4 -9 -11 -11 -8 -4 --53 --101 --128 --117 --95 --101 --116 --123 --121 --110 --98 --86 --79 --74 --72 --71 --72 --71 --71 --68 --65 --59 --54 --47 --41 --34 --31 --28 --29 --30 --32 --34 -127 -127 -127 -127 -127 -59 -13 -3 -11 -29 -41 -48 -44 -35 -21 -10 -0 --3 --3 -0 -5 -11 -15 -18 -17 -15 -9 -3 --4 --10 --16 --18 --72 --116 --128 --112 --84 --84 --97 --105 --108 --104 --100 --95 --92 --88 --85 --81 --76 --68 --61 --53 --47 --42 --39 --37 --38 --39 --42 --44 --45 --44 --42 --38 -127 -127 -127 -127 -127 -78 -21 -0 --1 -8 -16 -23 -24 -23 -19 -18 -17 -20 -21 -21 -20 -17 -10 -3 --5 --10 --14 --15 --15 --10 --6 -0 --57 --104 --128 --107 --84 --89 --107 --119 --123 --119 --112 --101 --91 --81 --72 --65 --59 --54 --52 --51 --52 --53 --54 --54 --54 +-48 +-42 +-36 +-31 +-26 +-24 +-22 +127 +127 +127 +127 +127 +60 +2 +-13 +-6 +13 +31 +45 +49 +48 +39 +30 +18 +9 +0 +-4 +-8 +-7 +-6 +-2 +2 +7 +10 +12 +11 +9 +4 +-1 +-8 +-14 +-19 +-21 +-21 +-17 +-14 +-8 +-3 +1 +3 +4 +0 +-3 +-10 +-15 +-21 +-24 +-26 +-24 +-22 +-16 +-11 +-5 +-2 +1 +0 +-2 +-7 +-12 +-19 +-23 +-77 +-121 +-128 +-121 +-94 +-95 +-107 +-114 +-114 +-107 +-101 +-94 +-91 +-88 +-87 +-85 +-82 +-76 +-69 +-62 +-55 +-48 +-43 +-38 +-37 +-36 +-38 +-40 +-42 +-43 +-44 +-42 +-39 +-35 +-30 +-25 +-21 +-16 +-15 +-14 +-17 +-19 +-24 +-26 +-29 +-29 +-29 +-26 +-23 +-18 +-14 +-9 +-8 +-6 +-8 +-10 +-14 +-17 +-21 +-23 +-25 +-24 +-22 +-17 +127 +127 +127 +127 +127 +89 +28 +5 +2 +11 +21 +29 +32 +33 +31 +30 +29 +28 +27 +25 +20 +15 +7 +1 +-6 +-10 +-12 +-11 +-7 +-2 +2 +7 +-51 +-99 +-128 +-107 +-85 +-92 +-110 +-121 +-125 +-119 +-109 +-97 +-86 +-76 +-69 +-62 +-58 +-55 +-54 +-54 +-56 +-56 +-57 +-55 +-53 +-48 +-43 +-37 +-32 +-26 +-23 +-21 +127 +127 +127 +127 +127 +61 +1 +-14 +-7 +11 +29 +43 +48 +47 +40 +32 +20 +10 +2 +-4 +-8 +-8 +-7 +-4 +0 +5 +8 +12 +11 +10 +5 +0 +-57 +-104 +-128 +-118 +-96 +-101 +-114 +-121 +-118 +-108 +-97 +-86 +-80 +-76 +-75 +-74 +-75 +-74 +-72 +-68 +-64 +-57 +-51 +-43 +-38 +-33 +-31 +-30 +-31 +-32 +-36 +-37 +127 +127 +127 +127 +127 +63 +16 +6 +13 +28 +39 +45 +40 +31 +18 +8 +0 +-1 +0 +5 +9 +15 +18 +20 +16 +13 +6 +-1 +-9 +-14 +-18 +-18 +-17 +-13 +-8 +-2 +1 +5 +6 +4 +0 +-5 +-12 +-17 +-22 +-24 +-25 +-22 +-19 +-12 +-7 +-1 +1 +2 +-1 +-4 +-10 +-15 +-21 +-25 +-28 +-26 +-24 +-19 +-73 +-117 +-128 +-113 +-87 +-90 +-105 +-117 +-122 +-119 +-115 +-106 +-98 +-89 +-82 +-74 +-66 +-58 +-53 +-49 +-48 +-47 +-49 +-50 +-52 +-52 +-51 +-47 +-44 +-38 +-33 +-27 +127 +127 +127 +127 +127 +72 +10 +-14 +-13 +0 +14 +27 +33 +38 +35 +33 +28 +23 +16 +11 +4 +-2 +-8 +-10 +-12 +-10 +-7 +-1 +3 +7 +9 +10 +-49 +-97 +-128 +-113 +-93 +-101 +-117 +-127 +-126 +-117 +-104 +-91 +-80 +-72 +-67 +-64 +-64 +-63 +-64 +-64 +-64 +-62 +-59 +-53 +-48 +-41 +-35 +-30 +-27 +-25 +-26 +-26 +-30 +-33 +-35 +-36 +-36 +-33 +-31 +-25 +-21 +-16 +-13 +-10 +-11 +-12 +-16 +-18 +-22 +-24 +-27 +-26 +-25 +-22 +-18 +-13 +-10 +-6 +-6 +-5 +-8 +-11 +-15 +-18 +127 +127 +127 +127 +127 +72 +26 +14 +21 +37 +48 +54 +48 +39 +25 +14 +5 +3 +3 +7 +12 +17 +20 +22 +20 +16 +9 +3 +-5 +-11 +-16 +-17 +-71 +-115 +-128 +-111 +-82 +-83 +-96 +-104 +-108 +-105 +-101 +-96 +-92 +-88 +-85 +-80 +-74 +-66 +-59 +-51 +-46 +-42 +-39 +-38 +-40 +-41 +-44 +-45 +-46 +-44 +-41 +-36 +127 +127 +127 +127 +127 +79 +21 +-1 +-3 +6 +15 +23 +25 +25 +22 +22 +21 +22 +22 +22 +18 +15 +7 +1 +-6 +-11 +-15 +-14 +-12 +-7 +-2 +3 +6 +8 +7 +5 +-1 +-6 +-13 +-18 +-23 +-24 +-23 +-18 +-14 +-8 +-3 +1 +2 +2 +-2 +-6 +-13 +-18 +-24 +-26 +-27 +-25 +-21 +-15 +-10 +-4 +-1 +1 +-56 +-103 +-128 +-119 +-99 +-105 +-122 +-128 +-128 +-122 +-109 +-96 +-85 +-76 +-71 +-67 +-66 +-65 +-66 +-65 +-65 +-63 +-61 +-56 +-51 +-44 +-38 +-32 +-29 +-26 +-26 +-27 +127 +127 +127 +127 +127 +56 +3 +-8 +2 +21 +39 +50 +51 +46 +33 +21 +9 +0 +-5 +-6 +-6 +-2 +2 +7 +11 +14 +14 +13 +8 +2 +-5 +-11 +-66 +-112 +-128 +-116 +-91 +-93 +-106 +-112 +-111 +-103 +-95 +-88 +-84 +-82 +-82 +-81 +-79 +-75 +-70 +-63 +-56 +-49 +-43 +-38 +-35 +-33 +-34 +-35 +-38 +-40 +-42 +-41 +-40 +-37 +-33 +-27 +-23 +-17 +-15 +-13 +-15 +-16 +-19 +-22 +-26 +-28 +-29 +-28 +-25 +-21 +-17 +-12 +-9 +-6 +-7 +-7 +-11 +-14 +-18 +-21 +-24 +-24 +-23 +-20 +127 +127 +127 +127 +127 +89 +31 +9 +6 +15 +23 +30 +31 +30 +26 +25 +24 +26 +26 +26 +23 +19 +12 +5 +-2 +-7 +-12 +-12 +-11 +-7 +-3 +3 +-54 +-102 +-128 +-106 +-83 +-89 +-106 +-119 +-123 +-119 +-111 +-99 +-89 +-79 +-71 +-63 +-58 +-53 +-52 +-51 +-52 +-53 +-54 +-54 +-53 +-50 +-46 +-40 +-35 +-29 +-25 +-21 +127 +127 +127 +127 +127 +65 +4 +-15 +-10 +7 +25 +39 +45 +46 +41 +33 +24 +16 +7 +1 +-5 +-8 +-10 +-7 +-5 +0 +5 +9 +11 +11 +8 +4 +-2 +-9 +-15 +-19 +-22 +-22 +-19 +-14 +-9 +-3 +0 +3 +3 +1 +-4 +-9 +-16 +-20 +-25 +-26 +-26 +-22 +-18 +-12 +-6 +-1 +0 +1 +-2 +-6 +-14 +-18 +-72 +-117 +-128 +-124 +-98 +-101 +-113 +-119 +-117 +-109 +-99 +-91 +-87 +-85 +-85 +-83 +-82 +-78 +-73 +-67 +-60 +-52 +-46 +-40 +-37 +-34 +-35 +-35 +-38 +-40 +-42 +-42 +127 +127 +127 +127 +127 +71 +22 +7 +10 +22 +30 +35 +30 +23 +13 +8 +4 +6 +9 +15 +18 +21 +19 +17 +11 +4 +-4 +-10 +-16 +-17 +-17 +-14 +-68 +-113 +-128 +-108 +-81 +-83 +-97 +-109 +-114 +-112 +-108 +-101 +-96 +-88 +-82 +-74 +-66 +-58 +-52 +-47 +-44 +-43 +-44 +-45 +-47 +-48 +-49 +-47 +-44 +-39 +-35 +-29 +127 +127 +127 +127 +127 +76 +13 +-10 +-11 +0 +13 +25 +30 +33 +32 +31 +27 +25 +21 +16 +9 +3 +-4 +-8 +-12 +-12 +-10 +-6 +-2 +4 +7 +9 +-49 +-97 +-128 +-111 +-91 +-99 +-116 +-127 +-128 +-119 +-107 +-94 +-83 +-73 +-68 +-63 +-61 +-60 +-61 +-61 +-62 +-61 +-59 +-56 +-51 +-44 +-39 +-33 +-29 +-25 +-24 +-24 +127 +127 +127 +127 +127 +57 +2 +-9 +-1 +19 +37 +49 +51 +47 +36 +25 +12 +3 +-4 +-6 +-7 +-4 +-2 +4 +8 +12 +13 +13 +10 +5 +-2 +-8 +-63 +-109 +-128 +-117 +-92 +-96 +-108 +-114 +-113 +-104 +-95 +-87 +-83 +-80 +-80 +-79 +-79 +-75 +-71 +-65 +-59 +-52 +-45 +-39 +-35 +-33 +-33 +-33 +-36 +-38 +-40 +-41 +-40 +-38 +-35 +-30 +-25 +-20 +-16 +-14 +-14 +-15 +-18 +-21 +-25 +-27 +-29 +-28 +-27 +-23 +-19 +-14 +-11 +-7 +-7 +-6 +-10 +-11 +-16 +-19 +-23 +-24 +-24 +-21 +127 +127 +127 +127 +127 +89 +33 +12 +10 +19 +26 +32 +31 +29 +24 +22 +21 +24 +25 +26 +25 +22 +15 +9 +0 +-5 +-11 +-12 +-13 +-9 +-6 +0 +4 +8 +9 +8 +4 +-1 +-8 +-14 +-19 +-22 +-23 +-21 +-18 +-12 +-7 +-2 +1 +3 +1 +-2 +-7 +-13 +-20 +-24 +-27 +-26 +-24 +-19 +-14 +-8 +-4 +0 +-57 +-104 +-128 +-116 +-95 +-103 +-120 +-128 +-128 +-123 +-111 +-98 +-87 +-76 +-70 +-65 +-63 +-61 +-62 +-62 +-62 +-61 +-61 +-57 +-53 +-47 +-41 +-34 +-30 +-26 +-24 +-24 +-26 +-28 +-32 +-34 +-36 +-35 +-34 +-31 +-26 +-21 +-17 +-13 +-11 +-10 +-12 +-14 +-19 +-21 +-25 +-26 +-27 +-25 +-22 +-17 +-14 +-9 +-7 +-5 +-6 +-7 +-11 +-14 +127 +127 +127 +127 +127 +69 +21 +10 +19 +36 +50 +58 +54 +45 +31 +18 +7 +2 +0 +2 +6 +11 +15 +19 +19 +19 +14 +9 +1 +-5 +-12 +-15 +-18 +-17 +-14 +-9 +-4 +1 +4 +7 +5 +3 +-3 +-9 +-16 +-20 +-24 +-24 +-23 +-19 +-15 +-8 +-3 +0 +1 +1 +-3 +-7 +-14 +-19 +-24 +-26 +-27 +-25 +-78 +-121 +-128 +-114 +-86 +-87 +-101 +-112 +-116 +-114 +-110 +-104 +-99 +-92 +-86 +-79 +-71 +-63 +-56 +-50 +-46 +-44 +-44 +-44 +-47 +-48 +-49 +-48 +-47 +-42 +-38 +-32 +-27 +-22 +-20 +-17 +-19 +-20 +-23 +-26 +-29 +-31 +-32 +-30 +-27 +-23 +-19 +-14 +-11 +-8 +-9 +-8 +-12 +-15 +-19 +-22 +-25 +-25 +-24 +-21 +-17 +-13 +-9 +-5 +127 +127 +127 +127 +127 +79 +16 +-5 +-3 +12 +28 +41 +48 +49 +45 +40 +31 +25 +16 +9 +2 +-2 +-6 +-6 +-6 +-2 +2 +7 +10 +13 +12 +9 +4 +-2 +-9 +-14 +-19 +-21 +-21 +-17 +-14 +-7 +-3 +2 +3 +3 +0 +-4 +-10 +-15 +-21 +-25 +-26 +-25 +-21 +-15 +-10 +-4 +-1 +1 +0 +-2 +-8 +-13 +-68 +-113 +-128 +-124 +-100 +-103 +-116 +-122 +-120 +-110 +-99 +-90 +-84 +-81 +-81 +-80 +-80 +-78 +-74 +-69 +-63 +-56 +-49 +-42 +-38 +-34 +-33 +-33 +-35 +-37 +-40 +-41 +127 +127 +127 +127 +127 +66 +19 +7 +12 +26 +35 +40 +35 +27 +15 +6 +1 +2 +4 +10 +14 +18 +19 +19 +14 +9 +1 +-6 +-13 +-16 +-18 +-17 +-71 +-115 +-128 +-108 +-81 +-81 +-95 +-106 +-111 +-108 +-105 +-99 +-95 +-89 +-84 +-77 +-69 +-61 +-54 +-48 +-45 +-42 +-41 +-42 +-44 +-45 +-47 +-47 +-46 +-42 +-38 +-32 +-27 +-22 +-19 +-17 +-18 +-18 +-21 +-24 +-28 +-30 +-32 +-30 +-28 +-24 +-20 +-15 +-11 +-8 +-7 +-8 +-11 +-14 +-18 +-21 +-24 +-25 +-24 +-21 +-19 +-14 +-10 +-6 +127 +127 +127 +127 +127 +81 +17 +-5 +-3 +10 +26 +40 +46 +49 +45 +40 +32 +26 +17 +11 +3 +-1 +-6 +-7 +-6 +-3 +1 +6 +9 +12 +12 +10 +5 +0 +-7 +-13 +-19 +-20 +-21 +-18 +-15 +-9 +-4 +1 +3 +4 +2 +-2 +-9 +-15 +-20 +-24 +-26 +-25 +-23 +-17 +-12 +-6 +-2 +1 +0 +-1 +-6 +-11 +-67 +-112 +-128 +-124 +-100 +-105 +-118 +-124 +-121 +-111 +-100 +-90 +-84 +-80 +-80 +-79 +-79 +-77 +-74 +-69 +-64 +-57 +-50 +-43 +-38 +-34 +-33 +-32 +-34 +-36 +-39 +-40 +127 +127 +127 +127 +127 +65 +18 +7 +12 +26 +36 +41 +37 +28 +16 +7 +0 +0 +2 +8 +13 +18 +19 +20 +15 +10 +2 +-4 +-11 +-15 +-18 +-17 +-71 +-116 +-128 +-109 +-82 +-82 +-95 +-106 +-110 +-108 +-104 +-99 +-95 +-89 +-84 +-77 +-71 +-63 +-56 +-49 +-45 +-41 +-40 +-41 +-43 +-44 +-47 +-46 +-46 +-43 +-39 +-33 +-29 +-23 +-19 +-17 +-17 +-17 +-20 +-22 +-26 +-29 +-30 +-30 +-29 +-25 +-21 +-15 +-12 +-8 +-7 +-7 +-10 +-13 +-17 +-20 +-23 +-24 +-25 +-22 +-20 +-15 +-11 +-6 +127 +127 +127 +127 +127 +81 +17 +-5 +-4 +10 +25 +38 +44 +47 +43 +40 +32 +26 +19 +12 +5 +-1 +-5 +-7 +-7 +-5 +-2 +4 +7 +12 +12 +11 +-48 +-96 +-128 +-113 +-93 +-101 +-117 +-126 +-124 +-114 +-102 +-89 +-79 +-71 +-68 +-65 +-66 +-66 +-66 +-65 +-65 +-61 +-57 +-51 +-46 +-39 +-34 +-29 +-27 +-26 +-27 +-29 +127 +127 +127 +127 +127 +57 +6 +-3 +6 +25 +41 +52 +50 +43 +29 +17 +5 +-2 +-6 +-5 +-3 +3 +7 +12 +15 +16 +13 +10 +3 +-2 +-10 +-15 +-19 +-20 +-19 +-15 +-10 +-5 +-1 +4 +5 +4 +0 +-5 +-12 +-17 +-22 +-24 +-25 +-23 +-20 +-14 +-9 +-3 +0 +2 +-1 +-3 +-9 +-15 +-21 +-25 +-28 +-27 +-80 +-123 +-128 +-116 +-88 +-88 +-101 +-111 +-114 +-111 +-107 +-102 +-97 +-93 +-88 +-81 +-74 +-66 +-59 +-52 +-47 +-43 +-42 +-42 +-44 +-45 +-47 +-47 +-47 +-44 +-41 +-35 +-30 +-25 +-21 +-18 +-17 +-17 +-20 +-22 +-26 +-29 +-31 +-30 +-29 +-25 +-22 +-16 +-13 +-9 +-8 +-7 +-10 +-12 +-16 +-19 +-23 +-24 +-25 +-23 +-20 +-16 +-12 +-8 +127 +127 +127 +127 +127 +82 +18 +-4 +-4 +9 +24 +37 +43 +46 +43 +39 +32 +27 +20 +14 +6 +0 +-5 +-7 +-8 +-6 +-3 +2 +6 +10 +11 +12 +-48 +-96 +-128 +-113 +-93 +-100 +-117 +-126 +-126 +-116 +-103 +-89 +-79 +-72 +-67 +-65 +-65 +-65 +-66 +-65 +-65 +-61 +-58 +-52 +-47 +-40 +-34 +-29 +-27 +-25 +-26 +-28 +127 +127 +127 +127 +127 +56 +6 +-5 +5 +24 +40 +51 +51 +44 +31 +18 +6 +-1 +-6 +-6 +-4 +1 +5 +11 +13 +16 +14 +11 +5 +-1 +-8 +-13 +-18 +-20 +-20 +-17 +-13 +-6 +-2 +3 +4 +5 +1 +-3 +-10 +-15 +-21 +-24 +-26 +-24 +-21 +-15 +-10 +-4 +-1 +2 +0 +-2 +-7 +-13 +-19 +-24 +-27 +-27 +-80 +-123 +-128 +-117 +-89 +-89 +-102 +-111 +-114 +-111 +-106 +-101 +-97 +-93 +-89 +-82 +-76 +-68 +-61 +-52 +-48 +-43 +-42 +-41 +-43 +-44 +-46 +-47 +-47 +-45 +-42 +-36 +127 +127 +127 +127 +127 +78 +19 +-3 +-5 +4 +14 +22 +24 +25 +22 +22 +21 +22 +22 +21 +18 +13 +6 +-1 +-8 +-12 +-15 +-13 +-11 +-6 +-2 +4 +-53 +-101 +-128 +-108 +-86 +-92 +-110 +-122 +-126 +-120 +-111 +-98 +-88 +-78 +-70 +-63 +-58 +-55 +-54 +-54 +-55 +-56 +-57 +-55 +-54 +-49 +-45 +-38 +-34 +-28 +-24 +-21 +127 +127 +127 +127 +127 +63 +3 +-14 +-8 +10 +28 +42 +47 +47 +40 +32 +21 +12 +3 +-2 +-7 +-8 +-8 +-5 +-2 +3 +7 +11 +12 +11 +7 +2 +-56 +-102 +-128 +-118 +-95 +-101 +-115 +-122 +-119 +-109 +-97 +-86 +-79 +-75 +-74 +-73 +-74 +-73 +-72 +-68 +-65 +-58 +-52 +-45 +-39 +-33 +-31 +-29 +-30 +-32 +-34 +-36 +127 +127 +127 +127 +127 +61 +16 +5 +12 +28 +41 +47 +42 +33 +19 +8 +0 +-2 +-1 +3 +8 +14 +17 +19 +17 +14 +7 +0 +-7 +-12 +-17 +-18 +-72 +-116 +-128 +-112 +-84 +-84 +-97 +-106 +-109 +-106 +-101 +-96 +-94 +-89 +-86 +-80 +-75 +-67 +-59 +-52 +-46 +-42 +-39 +-39 +-40 +-42 +-44 +-45 +-46 +-44 +-42 +-37 +127 +127 +127 +127 +127 +78 +21 +-1 +-3 +6 +15 +22 +24 +24 +21 +21 +20 +22 +22 +22 +19 +15 +7 +0 +-7 +-11 +-14 +-14 +-12 +-8 +-3 +3 +-55 +-102 +-128 +-107 +-85 +-92 +-109 +-120 +-124 +-119 +-111 +-99 +-89 +-79 +-71 +-64 +-58 +-55 +-53 +-52 +-54 +-54 +-56 +-55 +-54 +-49 +-46 +-39 +-34 +-28 +-25 +-21 +127 +127 +127 +127 +127 +64 +3 +-14 +-9 +8 +26 +40 +45 +47 +40 +33 +23 +14 +5 +-1 +-7 +-8 +-9 +-6 +-3 +2 +6 +10 +11 +11 +7 +3 +-54 +-101 +-128 +-117 +-96 +-102 +-116 +-123 +-121 +-110 +-98 +-86 +-79 +-74 +-73 +-72 +-73 +-72 +-71 +-68 +-65 +-59 +-53 +-46 +-40 +-34 +-31 +-29 +-29 +-31 +-33 +-35 +127 +127 +127 +127 +127 +60 +13 +3 +12 +29 +41 +48 +43 +34 +20 +9 +0 +-3 +-3 +2 +6 +12 +16 +19 +17 +15 +8 +2 +-5 +-11 +-16 +-18 +-72 +-117 +-128 +-112 +-84 +-84 +-97 +-106 +-109 +-105 +-101 +-96 +-93 +-89 +-86 +-81 +-75 +-68 +-60 +-53 +-47 +-42 +-39 +-38 +-39 +-41 +-43 +-44 +-46 +-44 +-42 +-38 +127 +127 +127 +127 +127 +78 +21 +0 +-2 +7 +16 +23 +24 +24 +21 +19 +19 +21 +21 +22 +19 +16 +9 +3 +-5 +-10 +-14 +-14 +-14 +-9 +-4 +2 +-55 +-102 +-128 +-107 +-85 +-90 +-107 +-120 +-124 +-119 +-111 +-100 +-90 +-80 +-72 +-64 +-59 +-54 +-52 +-51 +-53 +-53 +-55 +-54 +-53 +-50 +-47 +-41 +-35 +-29 +-25 +-22 +127 +127 +127 +127 +127 +65 +4 +-15 +-10 +7 +24 +39 +45 +46 +40 +33 +24 +15 +7 +0 +-5 +-7 +-9 +-7 +-5 +0 +4 +9 +10 +11 +8 +5 +-53 +-100 +-128 +-116 +-95 +-102 +-116 +-124 +-121 +-110 +-98 +-86 +-79 +-73 +-72 +-71 +-72 +-71 +-71 +-68 +-65 +-59 +-53 +-47 +-41 +-35 +-31 +-29 +-29 +-29 +-32 +-34 +-37 +-38 +-38 +-36 +-33 +-28 +-24 +-18 +-15 +-12 +-12 +-12 +-15 +-18 +-23 +-25 +-28 +-28 +-26 +-23 +-19 +-14 +-11 +-7 +-6 +-5 +-8 +-11 +-16 +-18 +-22 +-23 +127 +127 +127 +127 +127 +82 +32 +17 +20 +31 +39 +43 +38 +30 +20 +13 +9 +10 +13 +18 +21 +24 +22 +19 +13 +6 +-2 +-8 +-13 +-15 +-15 +-12 +-67 +-112 +-128 +-106 +-79 +-81 +-96 +-107 +-112 +-111 +-107 +-100 +-94 +-87 +-81 +-73 +-66 +-58 +-52 +-46 +-44 +-42 +-44 +-45 +-47 +-48 +-49 +-47 +-44 +-39 +-35 +-29 +127 +127 +127 +127 +127 +75 +13 +-10 +-11 +0 +13 +24 +30 +33 +32 +30 +27 +25 +21 +17 +9 +3 +-4 +-8 +-12 +-12 +-11 +-6 +-2 +4 +7 +9 +-49 +-97 +-128 +-111 +-91 +-99 +-116 +-126 +-128 +-119 +-107 +-94 +-83 +-73 +-67 +-63 +-61 +-60 +-61 +-61 +-62 +-61 +-59 +-55 +-51 +-44 +-39 +-32 +-29 +-25 +-24 +-24 +127 +127 +127 +127 +127 +57 +2 +-10 +-1 +19 +37 +49 +51 +47 +36 +25 +13 +3 +-4 +-6 +-7 +-5 +-1 +4 +8 +12 +13 +14 +10 +6 +-2 +-7 +-14 +-18 +-21 +-20 +-18 +-13 +-8 +-2 +1 +4 +3 +1 +-4 +-9 +-16 +-20 +-25 +-25 +-25 +-21 +-16 +-10 +-5 +-1 +1 +1 +-3 +-7 +-14 +-19 +-25 +-27 +-80 +-123 +-128 +-120 +-92 +-92 +-104 +-112 +-113 +-108 +-103 +-98 +-95 +-92 +-90 +-85 +-80 +-73 +-66 +-58 +-51 +-45 +-41 +-38 +-39 +-40 +-42 +-44 +-45 +-45 +-44 +-40 +127 +127 +127 +127 +127 +77 +22 +2 +1 +10 +19 +24 +24 +22 +17 +16 +16 +19 +20 +22 +21 +18 +12 +6 +-2 +-8 +-13 +-15 +-15 +-12 +-7 +-2 +-58 +-105 +-128 +-106 +-83 +-88 +-105 +-117 +-122 +-118 +-112 +-102 +-92 +-82 +-73 +-65 +-59 +-54 +-51 +-50 +-51 +-51 +-53 +-53 +-53 +-51 +-48 +-43 +-38 +-31 +-26 +-22 +127 +127 +127 +127 +127 +67 +5 +-15 +-12 +4 +21 +35 +42 +44 +40 +34 +26 +19 +10 +3 +-3 +-7 +-10 +-9 +-7 +-3 +1 +6 +9 +11 +9 +7 +-51 +-99 +-128 +-115 +-95 +-102 +-117 +-125 +-123 +-112 +-100 +-88 +-79 +-72 +-70 +-69 +-69 +-69 +-69 +-67 +-65 +-60 +-55 +-48 +-43 +-36 +-32 +-28 +-27 +-28 +-30 +-32 +-35 +-37 +-38 +-37 +-35 +-30 +-26 +-21 +-17 +-13 +-12 +-12 +-14 +-17 +-21 +-24 +-26 +-27 +-27 +-25 +-21 +-17 +-13 +-8 +-6 +-5 +-7 +-9 +-13 +-16 +-20 +-22 +127 +127 +127 +127 +127 +80 +31 +17 +21 +34 +43 +47 +41 +32 +21 +13 +8 +8 +10 +16 +20 +23 +23 +21 +16 +10 +2 +-5 +-11 +-14 +-16 +-14 +-11 +-5 +-1 +4 +6 +7 +5 +1 +-5 +-10 +-17 +-21 +-24 +-24 +-21 +-17 +-12 +-5 +-1 +2 +2 +0 +-4 +-10 +-16 +-21 +-25 +-26 +-27 +-23 +-18 +-12 +-67 +-112 +-128 +-112 +-88 +-92 +-108 +-120 +-126 +-121 +-114 +-104 +-96 +-86 +-77 +-68 +-62 +-56 +-53 +-51 +-51 +-51 +-53 +-54 +-54 +-52 +-50 +-44 +-39 +-33 +-28 +-23 +-21 +-20 +-21 +-23 +-26 +-29 +-32 +-33 +-33 +-30 +-27 +-22 +-17 +-12 +-10 +-8 +-9 +-10 +-14 +-17 +-21 +-24 +-26 +-25 +-24 +-20 +-16 +-12 +-8 +-5 +-5 +-5 +127 +127 +127 +127 +127 +69 +11 +-2 +5 +24 +42 +55 +58 +54 +44 +33 +20 +11 +3 +-1 +-4 +-3 +-1 +4 +7 +12 +14 +16 +13 +10 +3 +-3 +-59 +-106 +-128 +-116 +-92 +-96 +-110 +-116 +-114 +-104 +-95 +-85 +-80 +-77 +-77 +-77 +-77 +-75 +-71 +-66 +-60 +-53 +-47 +-40 +-36 +-32 +-31 +-31 +-34 +-35 +-38 +-39 +127 +127 +127 +127 +127 +66 +20 +7 +12 +26 +35 +40 +35 +26 +15 +6 +1 +1 +4 +9 +14 +19 +19 +19 +14 +9 +1 +-6 +-13 +-16 +-19 +-17 +-71 +-115 +-128 +-109 +-81 +-82 +-95 +-106 +-111 +-109 +-105 +-99 +-95 +-89 +-84 +-76 +-69 +-61 +-54 +-48 +-45 +-41 +-41 +-42 +-44 +-45 +-47 +-47 +-46 +-42 +-38 +-32 +127 +127 +127 +127 +127 +77 +16 +-7 +-8 +1 +13 +23 +26 +29 +27 +26 +25 +25 +22 +19 +14 +8 +0 +-5 +-11 +-13 +-13 +-10 +-7 +-1 +3 +7 +-51 +-99 +-128 +-109 +-88 +-95 +-113 +-124 +-126 +-119 +-109 +-96 +-85 +-75 +-68 +-62 +-59 +-57 +-57 +-57 +-59 +-58 +-58 +-56 +-53 +-47 +-42 +-35 +-31 +-25 +-23 +-22 +127 +127 +127 +127 +127 +59 +1 +-13 +-5 +14 +32 +46 +50 +48 +39 +29 +17 +8 +-1 +-5 +-8 +-7 +-6 +-1 +3 +8 +11 +13 +12 +9 +3 +-3 +-59 +-106 +-128 +-118 +-94 +-98 +-112 +-118 +-116 +-106 +-96 +-86 +-81 +-77 +-77 +-76 +-77 +-75 +-72 +-67 +-62 +-55 +-48 +-41 +-37 +-32 +-31 +-31 +-33 +-35 +-38 +-39 +127 +127 +127 +127 +127 +65 +19 +7 +12 +26 +37 +42 +37 +28 +16 +7 +0 +0 +2 +8 +13 +18 +19 +19 +15 +10 +2 +-4 +-11 +-15 +-18 +-17 +-72 +-116 +-128 +-109 +-81 +-82 +-96 +-106 +-110 +-108 +-104 +-98 +-94 +-89 +-85 +-78 +-71 +-63 +-56 +-49 +-45 +-41 +-41 +-41 +-43 +-45 +-46 +-46 +-46 +-42 +-39 +-34 +127 +127 +127 +127 +127 +77 +17 +-6 +-8 +2 +13 +22 +26 +27 +26 +26 +24 +24 +22 +20 +15 +10 +2 +-4 +-10 +-13 +-14 +-12 +-8 +-2 +2 +6 +-52 +-99 +-128 +-108 +-87 +-94 +-112 +-123 +-126 +-119 +-109 +-97 +-86 +-76 +-69 +-62 +-59 +-56 +-56 +-56 +-57 +-57 +-58 +-55 +-53 +-48 +-43 +-36 +-31 +-26 +-24 +-21 +127 +127 +127 +127 +127 +60 +1 +-13 +-6 +12 +30 +44 +49 +48 +39 +29 +18 +9 +0 +-4 +-8 +-8 +-6 +-2 +1 +7 +10 +12 +12 +10 +5 +-1 +-58 +-105 +-128 +-117 +-94 +-99 +-113 +-119 +-117 +-107 +-96 +-86 +-80 +-76 +-76 +-75 +-76 +-75 +-73 +-68 +-63 +-56 +-49 +-42 +-37 +-33 +-31 +-30 +-32 +-34 +-36 +-38 +127 +127 +127 +127 +127 +64 +17 +6 +12 +27 +38 +43 +39 +29 +17 +7 +0 +-1 +1 +6 +11 +17 +18 +19 +16 +12 +4 +-3 +-10 +-15 +-18 +-18 +-72 +-116 +-128 +-110 +-82 +-83 +-95 +-106 +-109 +-107 +-103 +-98 +-94 +-89 +-85 +-79 +-72 +-64 +-57 +-49 +-45 +-41 +-40 +-40 +-42 +-43 +-46 +-46 +-46 +-43 +-40 +-34 +127 +127 +127 +127 +127 +77 +18 +-5 +-7 +3 +14 +22 +25 +26 +25 +24 +23 +24 +22 +21 +16 +12 +4 +-3 +-9 +-13 +-15 +-13 +-10 +-4 +0 +5 +-53 +-100 +-128 +-108 +-86 +-93 +-110 +-122 +-126 +-119 +-110 +-98 +-87 +-77 +-69 +-62 +-59 +-56 +-55 +-54 +-56 +-56 +-57 +-55 +-53 +-49 +-44 +-37 +-32 +-27 +-24 +-21 +127 +127 +127 +127 +127 +61 +1 +-14 +-7 +11 +29 +43 +48 +47 +40 +31 +19 +10 +2 +-3 +-7 +-8 +-7 +-4 +-1 +5 +8 +11 +11 +10 +6 +0 +-57 +-103 +-128 +-117 +-95 +-99 +-114 +-120 +-118 +-108 +-97 +-86 +-80 +-76 +-75 +-74 +-75 +-74 +-72 +-68 +-64 +-57 +-51 +-44 +-38 +-33 +-31 +-30 +-31 +-32 +-36 +-38 +127 +127 +127 +127 +127 +62 +16 +5 +12 +27 +39 +44 +40 +31 +18 +7 +0 +-1 +-1 +4 +10 +15 +17 +19 +16 +12 +5 +-2 +-9 +-14 +-18 +-18 +-72 +-116 +-128 +-111 +-82 +-83 +-96 +-105 +-109 +-106 +-102 +-97 +-94 +-89 +-85 +-79 +-73 +-65 +-58 +-50 +-45 +-41 +-40 +-39 +-41 +-42 +-45 +-46 +-46 +-44 +-41 +-35 +127 +127 +127 +127 +127 +77 +19 +-3 +-5 +4 +14 +22 +25 +25 +23 +23 +22 +23 +22 +21 +18 +13 +5 +-1 +-8 +-12 +-14 +-13 +-11 +-6 +-1 +4 +-53 +-101 +-128 +-108 +-86 +-93 +-110 +-122 +-125 +-120 +-111 +-99 +-88 +-78 +-70 +-63 +-58 +-55 +-54 +-54 +-55 +-56 +-57 +-55 +-54 +-49 +-45 +-38 +-33 +-28 +-24 +-21 +127 +127 +127 +127 +127 +62 +2 +-14 +-8 +10 +27 +42 +47 +47 +40 +32 +21 +12 +3 +-2 +-7 +-8 +-8 +-5 +-2 +3 +7 +11 +11 +11 +7 +2 +-5 +-11 +-17 +-20 +-22 +-20 +-17 +-11 +-6 +-1 +2 +4 +2 +-1 +-6 +-12 +-18 +-23 +-26 +-26 +-24 +-19 +-14 +-8 +-4 +0 +1 +0 +-4 +-9 +-16 +-21 +-75 +-119 +-128 +-122 +-96 +-98 +-110 +-116 +-115 +-107 +-99 +-92 +-89 +-86 +-86 +-84 +-82 +-77 +-72 +-64 +-57 +-49 +-44 +-39 +-36 +-35 +-36 +-38 +-41 +-42 +-43 +-42 +-41 +-37 +-33 +-27 +-22 +-17 +-15 +-14 +-15 +-17 +-21 +-24 +-28 +-29 +-29 +-27 +-25 +-20 +-16 +-11 +-8 +-6 +-7 +-8 +-12 +-15 +-19 +-22 +-24 +-24 +-23 +-19 +127 +127 +127 +127 +127 +89 +30 +8 +5 +14 +23 +30 +31 +31 +27 +26 +25 +26 +26 +26 +23 +18 +11 +3 +-4 +-9 +-12 +-12 +-10 +-5 +-1 +5 +-53 +-100 +-128 +-106 +-84 +-90 +-107 +-120 +-124 +-119 +-110 +-98 +-88 +-78 +-70 +-62 +-58 +-53 +-52 +-52 +-53 +-54 +-55 +-55 +-53 +-49 +-45 +-39 +-34 +-28 +-24 +-21 +127 +127 +127 +127 +127 +64 +3 +-15 +-9 +8 +26 +40 +46 +47 +41 +33 +23 +14 +5 +-1 +-6 +-8 +-9 +-6 +-3 +2 +6 +10 +11 +11 +8 +3 +-4 +-10 +-16 +-19 +-22 +-21 +-18 +-13 +-7 +-2 +1 +3 +2 +0 +-5 +-10 +-17 +-22 +-26 +-26 +-25 +-21 +-16 +-10 +-5 +0 +1 +0 +-3 +-8 +-14 +-19 +-73 +-118 +-128 +-123 +-97 +-99 +-112 +-117 +-116 +-108 +-99 +-92 +-88 +-85 +-85 +-83 +-82 +-78 +-73 +-66 +-58 +-51 +-45 +-39 +-36 +-35 +-36 +-37 +-39 +-41 +-43 +-42 +-41 +-38 +-34 +-28 +-23 +-18 +-16 +-14 +-15 +-16 +-20 +-23 +-27 +-29 +-29 +-28 +-26 +-21 +-17 +-12 +-9 +-6 +-7 +-8 +-11 +-14 +-18 +-21 +-24 +-24 +-24 +-20 +127 +127 +127 +127 +127 +89 +31 +9 +6 +15 +24 +30 +31 +30 +26 +25 +24 +26 +26 +26 +23 +19 +12 +5 +-3 +-7 +-12 +-12 +-11 +-7 +-2 +3 +-54 +-101 +-128 +-105 +-83 +-88 +-106 +-118 +-123 +-118 +-111 +-99 +-89 +-79 +-71 +-63 +-58 +-53 +-52 +-51 +-52 +-53 +-54 +-54 +-53 +-49 +-46 +-40 +-35 +-29 +-25 +-21 +127 +127 +127 +127 +127 +64 +3 +-15 +-10 +7 +24 +39 +45 +46 +40 +33 +23 +15 +6 +0 +-6 +-8 +-9 +-7 +-4 +0 +4 +9 +10 +11 +9 +5 +-53 +-101 +-128 +-117 +-95 +-102 +-117 +-124 +-122 +-111 +-99 +-86 +-79 +-74 +-72 +-71 +-72 +-71 +-71 +-69 +-65 +-60 +-54 +-47 +-41 +-35 +-31 +-29 +-29 +-29 +-33 +-34 +127 +127 +127 +127 +127 +60 +13 +2 +11 +28 +41 +49 +45 +36 +22 +10 +1 +-3 +-3 +0 +5 +11 +15 +18 +17 +15 +9 +3 +-4 +-10 +-16 +-18 +-19 +-17 +-13 +-7 +-3 +2 +5 +5 +3 +0 +-6 +-12 +-19 +-23 +-26 +-25 +-22 +-17 +-11 +-6 +-2 +1 +1 +-1 +-6 +-11 +-17 +-22 +-26 +-27 +-27 +-23 +-76 +-120 +-128 +-113 +-87 +-88 +-103 +-114 +-119 +-117 +-112 +-105 +-99 +-92 +-85 +-77 +-69 +-61 +-55 +-49 +-47 +-45 +-46 +-47 +-49 +-50 +-50 +-48 +-45 +-41 +-36 +-30 +127 +127 +127 +127 +127 +75 +13 +-11 +-11 +0 +13 +24 +30 +33 +31 +30 +27 +25 +20 +16 +9 +3 +-4 +-8 +-12 +-12 +-11 +-6 +-2 +3 +7 +9 +-49 +-97 +-128 +-111 +-91 +-98 +-116 +-126 +-127 +-119 +-107 +-93 +-82 +-73 +-67 +-63 +-61 +-59 +-60 +-61 +-61 +-60 +-59 +-55 +-51 +-44 +-39 +-32 +-28 +-24 +-24 +-24 +-26 +-29 +-33 +-34 +-36 +-34 +-33 +-28 +-24 +-19 +-15 +-11 +-10 +-10 +-13 +-15 +-19 +-22 +-26 +-26 +-27 +-24 +-21 +-16 +-13 +-8 +-6 +-5 +-6 +-8 +-12 +-15 +127 +127 +127 +127 +127 +69 +21 +11 +19 +36 +49 +57 +53 +44 +29 +17 +6 +1 +0 +3 +7 +13 +16 +20 +19 +18 +13 +8 +0 +-6 +-13 +-16 +-70 +-115 +-128 +-112 +-85 +-85 +-97 +-105 +-108 +-103 +-98 +-93 +-90 +-87 +-85 +-81 +-76 +-69 +-62 +-54 +-48 +-42 +-39 +-37 +-37 +-38 +-41 +-42 +-44 +-44 +-43 +-39 +127 +127 +127 +127 +127 +78 +23 +3 +2 +10 +19 +24 +24 +22 +18 +17 +16 +19 +20 +22 +21 +18 +12 +6 +-2 +-8 +-13 +-15 +-15 +-12 +-7 +-2 +3 +7 +8 +7 +3 +-2 +-9 +-14 +-20 +-23 +-24 +-22 +-19 +-13 +-7 +-2 +1 +3 +1 +-2 +-8 +-14 +-20 +-24 +-27 +-27 +-25 +-19 +-15 +-8 +-4 +0 +-57 +-104 +-128 +-116 +-96 +-103 +-121 +-128 +-128 +-124 +-112 +-98 +-87 +-77 +-70 +-65 +-63 +-61 +-62 +-62 +-63 +-62 +-61 +-57 +-53 +-47 +-41 +-35 +-30 +-26 +-25 +-24 +127 +127 +127 +127 +127 +58 +1 +-11 +-3 +17 +35 +48 +51 +47 +37 +26 +13 +4 +-3 +-6 +-8 +-6 +-3 +2 +6 +11 +12 +13 +10 +7 +-1 +-6 +-63 +-108 +-128 +-117 +-93 +-97 +-110 +-116 +-114 +-105 +-95 +-87 +-82 +-79 +-79 +-78 +-78 +-75 +-72 +-66 +-60 +-52 +-46 +-39 +-36 +-32 +-32 +-33 +-35 +-37 +-39 +-40 +-41 +-39 +-36 +-31 +-26 +-20 +-16 +-13 +-13 +-13 +-17 +-19 +-23 +-26 +-28 +-28 +-27 +-24 +-20 +-15 +-11 +-8 +-7 +-6 +-8 +-11 +-15 +-18 +-22 +-23 +-24 +-22 +127 +127 +127 +127 +127 +88 +33 +13 +11 +20 +28 +33 +31 +28 +23 +21 +20 +21 +23 +26 +25 +23 +17 +11 +2 +-4 +-10 +-13 +-14 +-11 +-8 +-1 +-58 +-105 +-128 +-106 +-82 +-86 +-103 +-115 +-120 +-117 +-110 +-101 +-92 +-82 +-74 +-66 +-59 +-53 +-50 +-49 +-49 +-49 +-51 +-52 +-52 +-50 +-48 +-43 +-38 +-32 +-27 +-22 +127 +127 +127 +127 +127 +69 +7 +-14 +-11 +3 +20 +34 +40 +43 +39 +34 +26 +20 +11 +4 +-2 +-6 +-9 +-10 +-8 +-5 +-1 +5 +8 +11 +10 +8 +2 +-4 +-11 +-16 +-20 +-22 +-21 +-18 +-15 +-8 +-3 +2 +3 +3 +0 +-4 +-11 +-16 +-22 +-25 +-26 +-25 +-22 +-16 +-11 +-5 +-2 +1 +0 +-2 +-8 +-14 +-69 +-114 +-128 +-124 +-100 +-104 +-116 +-122 +-120 +-110 +-100 +-90 +-85 +-81 +-82 +-81 +-80 +-78 +-75 +-69 +-63 +-55 +-49 +-42 +-37 +-34 +-33 +-34 +-36 +-37 +-39 +-41 +127 +127 +127 +127 +127 +66 +19 +7 +12 +26 +35 +39 +35 +26 +15 +7 +1 +1 +4 +9 +14 +19 +20 +19 +14 +8 +0 +-6 +-13 +-16 +-18 +-16 +-70 +-115 +-128 +-109 +-81 +-82 +-96 +-107 +-111 +-109 +-105 +-99 +-95 +-89 +-84 +-77 +-70 +-62 +-55 +-48 +-44 +-41 +-41 +-42 +-45 +-46 +-48 +-47 +-46 +-42 +-38 +-32 +127 +127 +127 +127 +127 +77 +16 +-6 +-8 +2 +13 +23 +27 +29 +28 +27 +26 +25 +22 +20 +14 +8 +0 +-5 +-11 +-12 +-13 +-10 +-7 +-1 +3 +7 +-51 +-99 +-128 +-109 +-89 +-96 +-114 +-125 +-127 +-120 +-109 +-96 +-85 +-75 +-68 +-62 +-59 +-57 +-57 +-57 +-59 +-58 +-58 +-55 +-53 +-47 +-42 +-35 +-30 +-25 +-23 +-22 +127 +127 +127 +127 +127 +60 +2 +-12 +-5 +15 +32 +47 +50 +48 +39 +29 +16 +8 +-1 +-5 +-8 +-7 +-6 +-1 +3 +8 +11 +13 +11 +9 +3 +-3 +-59 +-106 +-128 +-117 +-94 +-98 +-112 +-118 +-116 +-106 +-96 +-86 +-80 +-77 +-77 +-76 +-77 +-75 +-72 +-67 +-62 +-55 +-48 +-41 +-37 +-33 +-32 +-31 +-33 +-35 +-38 +-39 +-40 +-39 +-37 +-33 +-28 +-23 +-19 +-15 +-13 +-13 +-15 +-17 +-21 +-24 +-28 +-28 +-28 +-25 +-23 +-17 +-14 +-9 +-7 +-6 +-7 +-9 +-13 +-16 +-20 +-23 +-24 +-23 +127 +127 +127 +127 +127 +87 +34 +15 +14 +23 +31 +35 +32 +28 +22 +18 +16 +19 +21 +24 +25 +24 +20 +14 +5 +-2 +-9 +-12 +-15 +-13 +-10 +-5 +0 +5 +8 +9 +7 +3 +-3 +-9 +-16 +-20 +-23 +-23 +-21 +-16 +-11 +-5 +-1 +2 +2 +1 +-4 +-9 +-15 +-20 +-25 +-26 +-26 +-23 +-19 +-13 +-7 +-2 +-59 +-106 +-128 +-114 +-93 +-100 +-117 +-128 +-128 +-124 +-114 +-100 +-90 +-79 +-72 +-65 +-62 +-58 +-58 +-58 +-60 +-59 +-60 +-57 +-54 +-49 +-44 +-37 +-32 +-27 +-24 +-23 +-24 +-25 +-29 +-31 +-34 +-35 +-35 +-32 +-30 +-24 +-20 +-14 +-12 +-10 +-10 +-12 +-15 +-18 +-22 +-25 +-27 +-26 +-25 +-21 +-17 +-12 +-9 +-6 +-5 +-5 +-8 +-11 +127 +127 +127 +127 +127 +67 +17 +6 +15 +34 +49 +59 +58 +50 +36 +23 +11 +3 +-2 +-1 +1 +6 +10 +16 +17 +19 +16 +13 +6 +-1 +-8 +-13 +-17 +-18 +-18 +-13 +-9 +-3 +1 +5 +5 +5 +1 +-4 +-11 +-16 +-22 +-24 +-25 +-23 +-19 +-13 +-8 +-2 +0 +2 +0 +-3 +-9 +-15 +-21 +-25 +-28 +-27 +-80 +-123 +-128 +-116 +-87 +-88 +-101 +-111 +-114 +-112 +-107 +-102 +-98 +-93 +-88 +-81 +-74 +-66 +-59 +-51 +-47 +-43 +-42 +-42 +-43 +-45 +-47 +-47 +-47 +-44 +-41 +-35 +-30 +-24 +-21 +-17 +-18 +-17 +-20 +-23 +-27 +-29 +-31 +-31 +-29 +-26 +-22 +-17 +-13 +-9 +-8 +-7 +-10 +-12 +-16 +-19 +-23 +-24 +-25 +-23 +-20 +-16 +-12 +-8 +127 +127 +127 +127 +127 +82 +19 +-4 +-3 +10 +24 +37 +43 +46 +43 +39 +33 +28 +20 +14 +6 +0 +-5 +-7 +-8 +-6 +-3 +2 +6 +11 +11 +11 +8 +3 +-4 +-11 +-17 +-20 +-22 +-21 +-18 +-13 +-7 +-2 +2 +4 +3 +0 +-6 +-11 +-18 +-22 +-26 +-26 +-25 +-20 +-15 +-9 +-4 +0 +1 +0 +-4 +-8 +-64 +-110 +-128 +-124 +-101 +-106 +-120 +-126 +-123 +-112 +-101 +-89 +-83 +-79 +-78 +-77 +-78 +-76 +-75 +-70 +-66 +-58 +-52 +-45 +-39 +-34 +-32 +-31 +-33 +-34 +-37 +-38 +127 +127 +127 +127 +127 +63 +16 +5 +12 +27 +39 +44 +39 +30 +17 +7 +0 +-2 +-1 +4 +9 +15 +18 +19 +16 +12 +5 +-1 +-9 +-14 +-18 +-18 +-72 +-116 +-128 +-110 +-83 +-83 +-96 +-105 +-109 +-107 +-102 +-97 +-94 +-89 +-85 +-79 +-73 +-65 +-58 +-50 +-45 +-41 +-40 +-39 +-41 +-42 +-45 +-46 +-46 +-44 +-41 +-35 +-31 +-25 +-21 +-17 +-17 +-16 +-19 +-21 +-25 +-27 +-30 +-30 +-30 +-26 +-23 +-17 +-14 +-10 +-8 +-7 +-9 +-11 +-15 +-18 +-23 +-24 +-25 +-24 +-21 +-17 +-13 +-9 +127 +127 +127 +127 +127 +84 +20 +-3 +-3 +9 +23 +35 +42 +45 +42 +39 +33 +28 +21 +16 +8 +2 +-4 +-6 +-9 +-7 +-4 +1 +5 +10 +11 +12 +8 +4 +-3 +-8 +-15 +-19 +-22 +-21 +-19 +-14 +-9 +-3 +1 +4 +3 +1 +-4 +-9 +-16 +-21 +-25 +-26 +-25 +-21 +-17 +-10 +-6 +-1 +1 +1 +-3 +-7 +-63 +-109 +-128 +-123 +-101 +-106 +-120 +-127 +-124 +-113 +-101 +-90 +-83 +-78 +-78 +-77 +-77 +-76 +-74 +-70 +-66 +-60 +-53 +-46 +-41 +-35 +-32 +-30 +-32 +-33 +-36 +-37 +127 +127 +127 +127 +127 +61 +15 +4 +12 +28 +39 +46 +41 +32 +19 +8 +0 +-2 +-2 +3 +8 +14 +16 +19 +16 +13 +6 +0 +-7 +-13 +-17 +-18 +-72 +-117 +-128 +-111 +-83 +-84 +-96 +-105 +-109 +-105 +-101 +-96 +-93 +-89 +-85 +-80 +-74 +-66 +-58 +-51 +-46 +-41 +-39 +-38 +-40 +-42 +-44 +-45 +-45 +-44 +-41 +-36 +-32 +-26 +-22 +-17 +-16 +-15 +-17 +-20 +-24 +-26 +-29 +-30 +-30 +-27 +-23 +-18 +-15 +-10 +-8 +-6 +-8 +-10 +-14 +-17 +-22 +-24 +-25 +-24 +-22 +-18 +-14 +-10 +127 +127 +127 +127 +127 +84 +20 +-2 +-3 +8 +21 +34 +40 +43 +40 +38 +33 +29 +23 +17 +10 +3 +-3 +-7 +-9 +-8 +-6 +-1 +3 +8 +10 +12 +-47 +-96 +-128 +-111 +-92 +-99 +-116 +-126 +-126 +-117 +-105 +-91 +-81 +-72 +-67 +-63 +-63 +-62 +-63 +-63 +-63 +-61 +-59 +-54 +-49 +-42 +-36 +-30 +-27 +-24 +-25 +-25 +127 +127 +127 +127 +127 +56 +4 +-6 +2 +22 +39 +51 +51 +47 +34 +22 +9 +1 +-6 +-6 +-6 +-2 +2 +8 +11 +15 +14 +13 +8 +2 +-5 +-11 +-16 +-19 +-20 +-18 +-15 +-9 +-4 +1 +3 +5 +3 +-1 +-7 +-13 +-19 +-23 +-26 +-25 +-23 +-18 +-13 +-7 +-3 +1 +0 +-1 +-5 +-10 +-17 +-21 +-26 +-27 +-80 +-123 +-128 +-117 +-89 +-89 +-102 +-111 +-113 +-109 +-105 +-99 +-96 +-92 +-89 +-83 +-77 +-70 +-63 +-54 +-49 +-43 +-41 +-39 +-40 +-42 +-44 +-45 +-47 +-45 +-43 +-38 +-34 +-28 +-23 +-19 +-17 +-15 +-17 +-19 +-23 +-25 +-29 +-30 +-30 +-28 +-25 +-20 +-16 +-11 +-9 +-7 +-8 +-9 +-13 +-16 +-21 +-23 +-25 +-24 +-23 +-19 +-16 +-11 +127 +127 +127 +127 +127 +85 +22 +-2 +-3 +8 +21 +33 +38 +41 +39 +37 +33 +29 +23 +18 +11 +5 +-2 +-6 +-10 +-9 +-7 +-2 +2 +7 +10 +11 +-48 +-96 +-128 +-111 +-91 +-99 +-116 +-126 +-126 +-117 +-106 +-92 +-81 +-72 +-67 +-63 +-62 +-61 +-62 +-62 +-63 +-61 +-59 +-54 +-49 +-43 +-37 +-31 +-27 +-24 +-24 +-24 +127 +127 +127 +127 +127 +57 +3 +-8 +1 +20 +39 +51 +52 +47 +35 +23 +10 +1 +-5 +-7 +-7 +-3 +0 +6 +10 +14 +13 +13 +9 +4 +-4 +-10 +-16 +-19 +-21 +-19 +-16 +-11 +-6 +-1 +2 +4 +3 +0 +-5 +-11 +-18 +-22 +-25 +-25 +-24 +-19 +-15 +-8 +-3 +0 +1 +0 +-4 +-9 +-16 +-20 +-25 +-27 +-80 +-123 +-128 +-119 +-91 +-91 +-103 +-111 +-113 +-109 +-104 +-99 +-96 +-92 +-89 +-84 +-79 +-71 +-64 +-56 +-49 +-44 +-41 +-39 +-40 +-41 +-43 +-45 +-46 +-45 +-43 +-39 +127 +127 +127 +127 +127 +77 +21 +0 +-1 +8 +17 +23 +24 +22 +19 +18 +17 +20 +21 +22 +20 +17 +10 +3 +-4 +-10 +-14 +-15 +-14 +-10 +-5 +0 +-57 +-103 +-128 +-107 +-84 +-89 +-106 +-119 +-123 +-119 +-112 +-100 +-91 +-81 +-73 +-64 +-59 +-54 +-52 +-50 +-51 +-52 +-54 +-54 +-54 +-51 +-47 +-41 +-36 +-30 +-26 +-22 +127 +127 +127 +127 +127 +66 +4 +-15 +-10 +6 +23 +37 +43 +46 +40 +34 +25 +17 +8 +1 +-5 +-8 +-9 +-8 +-6 +-1 +3 +8 +10 +11 +9 +6 +-52 +-100 +-128 +-117 +-96 +-102 +-117 +-124 +-122 +-111 +-99 +-87 +-79 +-73 +-71 +-70 +-71 +-70 +-70 +-68 +-66 +-60 +-55 +-47 +-42 +-35 +-32 +-28 +-28 +-29 +-32 +-34 +127 +127 +127 +127 +127 +59 +12 +2 +10 +28 +42 +50 +46 +37 +23 +11 +1 +-3 +-4 +-1 +3 +10 +13 +17 +17 +15 +11 +6 +-2 +-9 +-15 +-18 +-72 +-117 +-128 +-113 +-86 +-86 +-98 +-106 +-108 +-104 +-99 +-94 +-91 +-88 +-86 +-81 +-77 +-69 +-63 +-54 +-48 +-42 +-39 +-37 +-38 +-39 +-41 +-43 +-44 +-44 +-43 +-39 +127 +127 +127 +127 +127 +77 +23 +2 +0 +10 +18 +24 +25 +22 +18 +17 +16 +18 +20 +22 +21 +18 +12 +6 +-3 +-9 +-14 +-15 +-15 +-11 +-7 +-2 +-58 +-105 +-128 +-107 +-83 +-88 +-105 +-117 +-123 +-118 +-111 +-101 +-91 +-82 +-74 +-65 +-59 +-54 +-51 +-49 +-50 +-51 +-53 +-53 +-53 +-51 +-48 +-42 +-37 +-31 +-26 +-22 +127 +127 +127 +127 +127 +67 +5 +-15 +-11 +4 +21 +35 +42 +44 +40 +34 +26 +19 +10 +3 +-3 +-7 +-10 +-9 +-7 +-3 +1 +7 +9 +11 +9 +7 +-51 +-99 +-128 +-116 +-95 +-102 +-117 +-125 +-123 +-113 +-100 +-87 +-79 +-73 +-70 +-69 +-70 +-70 +-70 +-68 +-66 +-61 +-56 +-49 +-43 +-36 +-32 +-28 +-28 +-28 +-31 +-32 +127 +127 +127 +127 +127 +58 +10 +1 +9 +28 +42 +50 +47 +39 +25 +13 +2 +-3 +-5 +-2 +2 +8 +12 +16 +17 +16 +11 +6 +-1 +-7 +-14 +-17 +-71 +-116 +-128 +-114 +-86 +-87 +-99 +-107 +-109 +-104 +-98 +-93 +-90 +-88 +-86 +-82 +-78 +-71 +-64 +-56 +-50 +-43 +-39 +-37 +-37 +-37 +-40 +-42 +-44 +-44 +-43 +-40 +127 +127 +127 +127 +127 +77 +23 +3 +2 +11 +20 +25 +25 +22 +17 +15 +14 +17 +19 +21 +21 +19 +13 +7 +-1 +-7 +-13 +-15 +-16 +-13 +-9 +-3 +-60 +-106 +-128 +-107 +-83 +-87 +-104 +-116 +-121 +-118 +-111 +-101 +-93 +-83 +-75 +-66 +-60 +-54 +-51 +-49 +-49 +-49 +-52 +-52 +-53 +-51 +-49 +-43 +-38 +-32 +-27 +-22 +127 +127 +127 +127 +127 +68 +6 +-14 +-12 +3 +20 +34 +41 +43 +39 +35 +26 +20 +11 +5 +-2 +-6 +-9 +-9 +-8 +-4 +0 +5 +8 +11 +9 +8 +-51 +-98 +-128 +-115 +-95 +-102 +-118 +-125 +-124 +-113 +-101 +-88 +-79 +-72 +-70 +-68 +-68 +-68 +-69 +-67 +-65 +-61 +-56 +-49 +-44 +-37 +-32 +-28 +-27 +-27 +-29 +-31 +-34 +-36 +-38 +-37 +-35 +-31 +-26 +-20 +-17 +-13 +-12 +-11 +-13 +-15 +-20 +-23 +-26 +-27 +-27 +-25 +-22 +-18 +-14 +-9 +-6 +-5 +-6 +-8 +-12 +-15 +-20 +-22 +127 +127 +127 +127 +127 +79 +31 +17 +21 +34 +44 +48 +42 +33 +21 +12 +7 +7 +9 +14 +18 +23 +23 +22 +17 +11 +3 +-4 +-11 +-14 +-17 +-15 +-70 +-114 +-128 +-108 +-80 +-81 +-95 +-105 +-110 +-108 +-104 +-99 +-94 +-88 +-83 +-76 +-69 +-61 +-54 +-48 +-44 +-41 +-41 +-42 +-44 +-45 +-47 +-46 +-45 +-42 +-38 +-32 +127 +127 +127 +127 +127 +77 +16 +-7 +-9 +2 +13 +22 +27 +29 +28 +28 +25 +25 +22 +19 +13 +8 +0 +-5 +-11 +-12 +-13 +-10 +-6 +-1 +3 +7 +-51 +-98 +-128 +-110 +-89 +-96 +-114 +-125 +-127 +-120 +-109 +-96 +-85 +-75 +-69 +-62 +-59 +-57 +-57 +-57 +-59 +-59 +-59 +-56 +-53 +-47 +-42 +-35 +-30 +-25 +-24 +-22 +127 +127 +127 +127 +127 +60 +2 +-12 +-4 +15 +33 +47 +51 +48 +39 +28 +16 +7 +-1 +-5 +-8 +-7 +-5 +0 +4 +8 +11 +13 +11 +8 +3 +-3 +-10 +-15 +-20 +-21 +-20 +-17 +-12 +-6 +-2 +3 +3 +3 +-1 +-5 +-11 +-17 +-22 +-24 +-26 +-24 +-21 +-15 +-10 +-4 +-1 +1 +0 +-3 +-9 +-15 +-21 +-25 +-78 +-121 +-128 +-121 +-94 +-95 +-107 +-113 +-114 +-108 +-101 +-95 +-92 +-89 +-88 +-85 +-81 +-75 +-69 +-61 +-54 +-47 +-42 +-38 +-37 +-37 +-39 +-41 +-44 +-44 +-44 +-42 +127 +127 +127 +127 +127 +75 +23 +4 +4 +15 +22 +27 +26 +22 +15 +13 +11 +14 +16 +20 +21 +20 +16 +10 +2 +-4 +-11 +-15 +-17 +-15 +-12 +-6 +-62 +-108 +-128 +-106 +-82 +-85 +-101 +-113 +-119 +-116 +-111 +-102 +-94 +-84 +-76 +-68 +-61 +-55 +-51 +-47 +-48 +-47 +-50 +-50 +-52 +-51 +-49 +-45 +-40 +-34 +-29 +-24 +127 +127 +127 +127 +127 +71 +8 +-14 +-12 +2 +17 +31 +38 +41 +38 +34 +28 +22 +14 +8 +1 +-4 +-9 +-11 +-10 +-7 +-4 +2 +6 +10 +10 +9 +-49 +-97 +-128 +-114 +-94 +-102 +-117 +-127 +-125 +-115 +-102 +-89 +-79 +-71 +-68 +-66 +-66 +-66 +-67 +-66 +-65 +-62 +-58 +-51 +-46 +-39 +-34 +-29 +-27 +-26 +-27 +-29 +-32 +-35 +-37 +-37 +-36 +-33 +-29 +-23 +-19 +-14 +-12 +-11 +-12 +-14 +-18 +-21 +-25 +-26 +-27 +-26 +-24 +-20 +-16 +-11 +-8 +-6 +-6 +-7 +-10 +-13 +-18 +-20 +127 +127 +127 +127 +127 +76 +29 +17 +22 +36 +46 +51 +45 +36 +23 +13 +6 +4 +6 +11 +15 +20 +22 +22 +19 +14 +6 +-1 +-8 +-13 +-16 +-16 +-14 +-10 +-5 +1 +4 +7 +7 +4 +-1 +-6 +-13 +-18 +-23 +-24 +-24 +-20 +-16 +-10 +-5 +0 +2 +2 +-1 +-5 +-12 +-17 +-23 +-25 +-28 +-26 +-23 +-17 +-71 +-116 +-128 +-112 +-87 +-90 +-106 +-117 +-123 +-120 +-114 +-105 +-98 +-88 +-80 +-71 +-65 +-57 +-53 +-49 +-49 +-48 +-50 +-51 +-53 +-52 +-51 +-47 +-42 +-36 +-31 +-25 +-22 +-20 +-20 +-20 +-23 +-26 +-30 +-32 +-33 +-31 +-29 +-25 +-21 +-16 +-12 +-9 +-8 +-9 +-12 +-15 +-19 +-22 +-25 +-25 +-25 +-22 +-19 +-14 +-11 +-7 +-5 +-4 +127 +127 +127 +127 +127 +72 +12 +-4 +2 +20 +37 +51 +56 +54 +46 +36 +25 +15 +6 +1 +-3 +-4 +-4 +-1 +3 +8 +12 +14 +14 +12 +7 +2 +-56 +-102 +-128 +-116 +-93 +-98 +-113 +-119 +-117 +-107 +-96 +-85 +-79 +-75 +-75 +-74 +-75 +-73 +-71 +-67 +-63 +-56 +-50 +-43 +-37 +-32 +-30 +-29 +-31 +-33 +-35 +-37 +127 +127 +127 +127 +127 +63 +16 +6 +13 +28 +39 +44 +39 +30 +17 +8 +0 +-1 +0 +5 +10 +16 +18 +19 +16 +12 +5 +-1 +-9 +-14 +-18 +-18 +-72 +-116 +-128 +-110 +-82 +-82 +-96 +-105 +-109 +-106 +-103 +-97 +-94 +-89 +-85 +-79 +-73 +-65 +-58 +-50 +-45 +-41 +-40 +-39 +-41 +-43 +-45 +-45 +-46 +-43 +-40 +-35 +127 +127 +127 +127 +127 +77 +19 +-3 +-5 +4 +14 +22 +25 +25 +23 +22 +22 +23 +22 +21 +17 +13 +5 +-1 +-8 +-12 +-15 +-13 +-11 +-6 +-1 +4 +-53 +-100 +-128 +-108 +-86 +-92 +-110 +-122 +-126 +-119 +-110 +-98 +-87 +-77 +-69 +-63 +-58 +-55 +-54 +-53 +-55 +-56 +-57 +-55 +-53 +-49 +-45 +-38 +-33 +-27 +-24 +-21 +127 +127 +127 +127 +127 +62 +2 +-14 +-8 +10 +28 +42 +47 +47 +40 +32 +21 +12 +3 +-2 +-7 +-8 +-8 +-5 +-1 +4 +8 +11 +12 +10 +6 +1 +-56 +-103 +-128 +-117 +-95 +-100 +-114 +-121 +-119 +-109 +-97 +-86 +-80 +-76 +-75 +-74 +-75 +-74 +-72 +-69 +-64 +-58 +-52 +-45 +-39 +-33 +-31 +-29 +-31 +-32 +-35 +-37 +127 +127 +127 +127 +127 +62 +16 +5 +12 +28 +40 +45 +41 +32 +19 +8 +0 +-2 +-1 +3 +9 +14 +17 +19 +17 +13 +6 +0 +-8 +-13 +-17 +-18 +-72 +-116 +-128 +-111 +-83 +-83 +-96 +-105 +-109 +-106 +-102 +-96 +-93 +-89 +-86 +-79 +-74 +-66 +-59 +-51 +-46 +-41 +-39 +-38 +-40 +-42 +-44 +-45 +-46 +-44 +-41 +-36 +127 +127 +127 +127 +127 +78 +20 +-2 +-4 +5 +15 +23 +25 +25 +22 +21 +21 +22 +22 +22 +18 +15 +7 +0 +-7 +-11 +-15 +-14 +-12 +-7 +-2 +3 +-54 +-102 +-128 +-107 +-85 +-91 +-109 +-121 +-125 +-120 +-111 +-99 +-88 +-78 +-70 +-63 +-58 +-54 +-53 +-53 +-54 +-54 +-56 +-55 +-54 +-50 +-46 +-39 +-34 +-28 +-24 +-21 +127 +127 +127 +127 +127 +63 +2 +-15 +-9 +8 +26 +40 +45 +46 +40 +32 +22 +13 +5 +-1 +-6 +-8 +-9 +-6 +-3 +2 +6 +10 +11 +11 +7 +3 +-55 +-102 +-128 +-117 +-95 +-101 +-116 +-122 +-120 +-109 +-98 +-86 +-79 +-74 +-73 +-72 +-73 +-72 +-71 +-68 +-65 +-59 +-52 +-45 +-40 +-34 +-31 +-29 +-30 +-31 +-34 +-35 +127 +127 +127 +127 +127 +60 +14 +4 +12 +29 +40 +47 +42 +33 +20 +9 +0 +-3 +-3 +1 +6 +12 +16 +19 +17 +14 +8 +2 +-6 +-12 +-17 +-18 +-72 +-117 +-128 +-112 +-83 +-84 +-97 +-105 +-108 +-105 +-100 +-95 +-92 +-89 +-85 +-81 +-75 +-67 +-60 +-52 +-46 +-41 +-39 +-38 +-39 +-41 +-44 +-44 +-45 +-44 +-42 +-37 +127 +127 +127 +127 +127 +77 +21 +-1 +-3 +6 +15 +22 +24 +23 +20 +20 +19 +21 +21 +22 +19 +15 +8 +2 +-6 +-10 +-14 +-14 +-13 +-8 +-4 +1 +-56 +-103 +-128 +-106 +-84 +-90 +-107 +-119 +-123 +-119 +-111 +-100 +-89 +-79 +-71 +-63 +-58 +-54 +-52 +-51 +-53 +-53 +-55 +-55 +-53 +-50 +-46 +-40 +-35 +-29 +-25 +-22 +127 +127 +127 +127 +127 +64 +3 +-15 +-10 +7 +25 +39 +45 +46 +40 +33 +23 +15 +6 +0 +-5 +-8 +-9 +-7 +-4 +0 +4 +9 +11 +11 +8 +4 +-53 +-101 +-128 +-117 +-95 +-101 +-116 +-123 +-121 +-110 +-98 +-86 +-79 +-74 +-72 +-71 +-72 +-71 +-71 +-68 +-65 +-59 +-54 +-47 +-41 +-34 +-31 +-28 +-29 +-30 +-32 +-34 +127 +127 +127 +127 +127 +59 +13 +3 +11 +29 +41 +48 +44 +35 +21 +10 +0 +-3 +-3 +0 +5 +11 +15 +18 +17 +15 +9 +3 +-4 +-10 +-16 +-18 +-72 +-116 +-128 +-112 +-84 +-84 +-97 +-105 +-108 +-104 +-100 +-95 +-92 +-88 +-85 +-81 +-76 +-68 +-61 +-53 +-47 +-42 +-39 +-37 +-38 +-39 +-42 +-44 +-45 +-44 +-42 +-38 +127 +127 +127 +127 +127 +78 +21 +0 +-1 +8 +16 +23 +24 +23 +19 +18 +17 +20 +21 +21 +20 +17 +10 +3 +-5 +-10 +-14 +-15 +-15 +-10 +-6 +0 +-57 +-104 +-128 +-107 +-84 +-89 +-107 +-119 +-123 +-119 +-112 +-101 +-91 +-81 +-72 +-65 +-59 +-54 +-52 +-51 +-52 +-53 +-54 +-54 +-54 diff --git a/traces/em4x05.pm3 b/traces/lf_EM4x05.pm3 similarity index 100% rename from traces/em4x05.pm3 rename to traces/lf_EM4x05.pm3 diff --git a/traces/em4x50.pm3 b/traces/lf_EM4x50.pm3 similarity index 100% rename from traces/em4x50.pm3 rename to traces/lf_EM4x50.pm3 diff --git a/traces/lf_fdx_biothermo.pm3 b/traces/lf_FDX_Bio-Thermo.pm3 similarity index 100% rename from traces/lf_fdx_biothermo.pm3 rename to traces/lf_FDX_Bio-Thermo.pm3 diff --git a/traces/gallagher.pm3 b/traces/lf_GALLAGHER.pm3 similarity index 81% rename from traces/gallagher.pm3 rename to traces/lf_GALLAGHER.pm3 index d6e58a707..dcc4ad8b0 100644 --- a/traces/gallagher.pm3 +++ b/traces/lf_GALLAGHER.pm3 @@ -1,39999 +1,39999 @@ --128 --128 --128 --128 --128 --128 --128 --128 --128 -66 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -87 -14 --51 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -55 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -114 -37 --31 --92 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -5 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -96 -21 --46 --106 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -4 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -93 -18 --49 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -0 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -113 -105 -98 -91 -86 -80 -74 -68 -62 -58 -57 -53 -45 -40 --31 --92 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --33 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -79 -5 --60 --118 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --9 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -92 -17 --49 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --4 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -94 -19 --48 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --3 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -91 -16 --50 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --4 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -90 -15 --52 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --1 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -89 -15 --52 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --3 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -87 -12 --54 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --3 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -90 -15 --51 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --8 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -100 -24 --44 --103 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -88 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -117 -108 -102 -95 -19 --48 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -77 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -119 -111 -105 -96 -20 --47 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -87 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -124 -115 -103 -91 -15 --52 --111 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -75 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -115 -106 -99 -93 -17 --49 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -85 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -90 -17 --49 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -53 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -116 -38 --31 --92 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --1 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -114 -101 -95 -89 -82 -76 -69 -63 -57 -52 -47 -42 -41 --29 --90 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --36 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -77 -4 --61 --119 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -84 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -90 -16 --49 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -59 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -115 -37 --32 --92 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -4 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -89 -14 --52 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -3 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -112 -101 -92 -84 -77 -71 -67 -62 -57 -53 -45 -38 -37 --33 --94 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --28 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -71 --2 --66 --123 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -90 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -112 -103 -94 -18 --49 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -79 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -118 -112 -104 -96 -20 --47 --106 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -80 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -88 -15 --50 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -54 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -113 -105 -99 -92 -86 -76 -68 -65 -62 -57 -51 -47 --23 --86 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --34 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -77 -4 --61 --118 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --4 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -88 -13 --53 --111 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -91 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -117 -108 -99 -93 -17 --50 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --13 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -86 -12 --54 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -90 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -119 -112 -106 -96 -20 --46 --106 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -82 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -91 -17 --49 --106 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -47 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -115 -38 --31 --92 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -3 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -96 -21 --46 --105 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --1 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -113 -103 -95 -84 -72 -63 -60 -57 -55 -51 -45 -42 -36 --33 --95 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -67 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -87 -14 --51 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -50 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -118 -109 -101 -94 -87 -80 -73 -66 -59 -53 -48 -42 --28 --90 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --31 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -83 -10 --56 --114 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -86 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -120 -110 -101 -92 -16 --50 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -83 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -90 -17 --49 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -48 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -111 -34 --34 --94 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -2 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -105 -93 -84 -79 -75 -73 -68 -66 -62 -58 -50 -40 -34 --35 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --27 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -83 -9 --57 --114 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -91 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -113 -105 -93 -17 --49 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -80 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -120 -111 -102 -93 -17 --50 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --18 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -81 -8 --58 --116 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -93 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -90 -16 --49 --106 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -52 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -113 -103 -94 -89 -85 -77 -69 -64 -59 -54 -50 -45 --25 --87 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -65 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -124 -115 -104 -90 -15 --52 --111 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --9 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -88 -13 --53 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -92 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -114 -105 -97 -21 --47 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -77 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -88 -15 --51 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -55 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -118 -40 --29 --90 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -3 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -124 -113 -105 -97 -89 -80 -72 -68 -64 -59 -54 -46 -42 -37 --33 --94 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --32 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -83 -9 --57 --115 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -88 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -110 -100 -91 -15 --52 --111 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -84 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -112 -101 -92 -17 --50 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --20 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -89 -14 --52 --111 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -83 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -91 -17 --49 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -52 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -43 --27 --88 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -3 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -93 -18 --49 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -6 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -114 -104 -93 -80 -73 -67 -63 -60 -57 -53 -48 -44 -38 --33 --94 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --31 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -78 -4 --61 --118 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -83 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -90 -17 --49 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -47 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -116 -106 -96 -88 -83 -77 -72 -66 -60 -55 -53 -47 --23 --85 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -67 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -84 -12 --53 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -49 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -115 -38 --31 --92 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -1 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -96 -21 --46 --105 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -0 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -20 --47 --106 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --3 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -111 -103 -93 -86 -79 -72 -65 -60 -55 -51 -46 -43 -36 --33 --95 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --31 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -77 -3 --62 --119 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --4 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -92 -17 --49 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -0 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -93 -19 --48 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -0 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -83 -9 --57 --115 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -2 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -94 -19 --48 --106 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --3 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -90 -16 --51 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --3 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -92 -17 --50 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --2 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -91 -17 --50 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -1 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -92 -17 --50 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -93 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -115 -100 -88 -83 -9 --57 --116 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -79 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -124 -116 -110 -100 -92 -17 --50 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -84 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -114 -101 -87 -12 --55 --113 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -85 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -115 -104 -95 -18 --49 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -78 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -91 -17 --49 --106 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -54 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -116 -39 --30 --91 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -0 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -110 -97 -91 -85 -82 -75 -69 -63 -59 -53 -51 -44 -40 --30 --91 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --32 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -78 -5 --61 --118 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -86 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -86 -13 --51 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -57 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -43 --26 --87 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --1 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -97 -22 --45 --104 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --12 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -110 -101 -93 -84 -77 -70 -65 -58 -53 -51 -49 -45 -38 --31 --93 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --33 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -81 -7 --58 --116 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -87 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -118 -111 -104 -95 -20 --47 --106 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -83 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -117 -111 -103 -98 -22 --45 --105 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -71 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -93 -19 --47 --105 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -48 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -115 -104 -98 -91 -84 -77 -71 -64 -60 -55 -49 -48 --23 --85 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --29 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -80 -6 --59 --117 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --7 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -90 -15 --51 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -90 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -120 -112 -103 -94 -18 --49 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --17 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -86 -12 --54 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -89 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -124 -114 -101 -88 -12 --54 --113 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -77 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -91 -17 --48 --106 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -51 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -110 -33 --36 --96 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -3 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -97 -22 --45 --104 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --3 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -110 -98 -90 -83 -79 -71 -65 -57 -47 -40 -38 -35 -34 --35 --95 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -75 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -90 -16 --50 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -53 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -120 -107 -99 -92 -87 -83 -79 -75 -69 -60 -50 -43 -39 --31 --92 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --23 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -84 -10 --56 --114 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -89 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -112 -101 -92 -17 --50 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -75 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -86 -13 --52 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -48 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -44 --25 --87 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -6 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -112 -96 -88 -81 -76 -73 -66 -60 -56 -51 -47 -42 -37 --32 --94 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --39 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -74 -1 --64 --121 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -90 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -113 -103 -95 -19 --48 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -78 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -112 -103 -95 -19 --48 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --15 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -88 -13 --53 --111 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -92 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -94 -20 --45 --103 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -51 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -120 -111 -102 -94 -85 -75 -67 -63 -60 -55 -50 -46 --24 --87 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -69 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -124 -111 -97 -90 -15 --51 --111 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --9 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -88 -13 --53 --111 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -89 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -112 -101 -94 -89 -13 --53 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -82 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -89 -15 --49 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -50 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -117 -40 --29 --90 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -4 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -120 -111 -101 -93 -88 -81 -75 -69 -61 -55 -52 -50 -46 -41 --29 --91 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --34 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -79 -6 --60 --117 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -90 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -115 -106 -97 -91 -16 --51 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -85 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -111 -100 -93 -17 --50 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --23 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -91 -17 --50 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -86 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -90 -17 --49 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -53 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -116 -39 --30 --91 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --1 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -20 --47 --106 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -0 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -113 -103 -93 -84 -78 -71 -65 -59 -54 -49 -45 -42 -38 --32 --94 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --32 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -79 -6 --60 --117 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -81 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -92 -19 --47 --105 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -48 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -119 -104 -95 -89 -83 -78 -73 -67 -60 -54 -50 -47 --23 --85 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -68 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -85 -13 --52 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -49 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -115 -38 --31 --91 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -4 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -97 -22 --45 --104 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -0 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -87 -13 --53 --111 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --3 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -111 -100 -94 -86 -77 -71 -64 -60 -55 -52 -48 -41 -32 --37 --98 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --31 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -79 -5 --60 --118 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --9 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -91 -16 --50 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --4 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -93 -18 --49 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --2 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -94 -19 --48 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --4 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -92 -17 --49 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --3 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -90 -16 --51 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --5 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -96 -21 --46 --105 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --6 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -88 -13 --53 --111 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -0 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -86 -11 --54 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -94 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -120 -111 -103 -93 -18 --49 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -85 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -114 -100 -90 -15 --52 --111 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -80 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -118 -112 -104 -93 -17 --50 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -82 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -111 -101 -91 -15 --51 --111 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -75 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -90 -17 --49 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -54 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -115 -38 --30 --91 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -10 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -115 -104 -92 -83 -75 -71 -66 -62 -58 -52 -44 -38 -35 --34 --96 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --26 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -78 -5 --60 --117 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -79 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -92 -19 --47 --105 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -53 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -120 -42 --28 --89 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --5 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -94 -19 --48 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --10 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -113 -101 -92 -87 -80 -73 -66 -61 -54 -48 -45 -41 -40 --30 --91 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --28 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -79 -6 --59 --117 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -88 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -117 -111 -103 -95 -19 --48 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -85 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -117 -106 -97 -89 -14 --53 --111 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -84 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -88 -15 --50 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -57 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -118 -103 -93 -86 -81 -76 -70 -67 -61 -56 -50 -46 --25 --87 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --31 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -73 -0 --65 --121 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --9 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -93 -18 --49 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -92 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -124 -112 -98 -91 -15 --51 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --22 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -90 -15 --50 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -80 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -124 -112 -99 -89 -14 --53 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -81 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -89 -15 --51 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -59 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -115 -38 --31 --92 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -5 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -94 -19 --48 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -0 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -109 -101 -95 -90 -83 -75 -67 -57 -50 -46 -44 -42 -39 --31 --92 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -68 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -85 -12 --53 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -56 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -119 -108 -99 -91 -83 -75 -69 -63 -57 -54 -49 -42 --28 --90 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --27 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -85 -11 --55 --113 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -85 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -113 -100 -88 -12 --54 --113 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -81 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -86 -13 --52 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -57 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -120 -42 --27 --88 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -7 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -118 -103 -89 -79 -74 -70 -67 -64 -60 -55 -52 -47 -40 --30 --92 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --35 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -76 -3 --62 --119 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -94 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -118 -108 -100 -95 -19 --48 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -80 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -112 -102 -93 -18 --49 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --10 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -90 -15 --51 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -95 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -91 -17 --49 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -51 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -118 -109 -99 -87 -79 -74 -70 -64 -56 -51 -47 -43 --28 --90 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -76 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -112 -98 -86 -81 -7 --59 --117 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --11 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -86 -12 --54 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -85 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -113 -101 -95 -19 --48 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -84 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -91 -18 --48 --106 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -56 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -115 -38 --31 --91 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -1 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -115 -103 -95 -87 -78 -73 -66 -60 -56 -49 -45 -40 -36 --33 --95 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --27 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -80 -6 --60 --117 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -92 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -116 -105 -97 -92 -16 --50 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -76 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -120 -113 -103 -95 -19 --48 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --13 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -79 -6 --60 --117 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -89 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -93 -20 --46 --104 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -57 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -109 -33 --35 --96 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -11 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -96 -21 --45 --105 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -1 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -115 -99 -88 -82 -77 -72 -67 -60 -54 -47 -46 -41 -38 --32 --93 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --30 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -81 -7 --58 --115 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -85 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -92 -19 --47 --105 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -52 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -119 -109 -101 -92 -85 -78 -75 -69 -62 -56 -50 -44 --26 --89 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -69 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -86 -13 --52 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -50 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -43 --26 --87 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --5 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -20 --47 --106 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -2 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -92 -17 --50 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --4 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -110 -99 -91 -83 -75 -69 -65 -62 -57 -51 -47 -43 -40 --30 --91 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --28 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -77 -3 --62 --120 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --7 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -91 -16 --49 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -2 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -92 -18 --49 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --2 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -93 -18 --49 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --8 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -92 -17 --49 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --2 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -88 -14 --52 --111 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --2 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -20 --47 --106 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --5 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -92 -17 --50 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --1 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -83 -8 --57 --115 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -89 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -115 -106 -98 -22 --45 --105 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -74 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -124 -116 -110 -104 -96 -20 --47 --106 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -80 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -119 -113 -103 -94 -18 --49 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -85 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -124 -114 -109 -102 -95 -19 --48 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -82 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -88 -15 --51 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -56 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -106 -29 --39 --99 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -15 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -118 -102 -95 -88 -82 -74 -68 -63 -58 -52 -47 -42 -38 --32 --93 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --32 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -79 -5 --60 --117 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -89 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -90 -16 --49 --106 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -57 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -116 -39 --30 --90 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -8 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -92 -17 --50 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --5 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -109 -98 -91 -84 -77 -71 -65 -59 -54 -49 -44 -35 -31 --38 --98 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --32 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -81 -8 --58 --116 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -82 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -119 -109 -102 -96 -20 --46 --106 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -82 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -124 -114 -107 -100 -95 -20 --47 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -80 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -90 -16 --50 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -59 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -113 -106 -101 -95 -87 -83 -77 -71 -60 -50 -43 -40 --30 --92 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --24 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -76 -3 --62 --120 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --7 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -85 -11 --55 --113 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -90 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -120 -111 -101 -92 -17 --50 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --9 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -89 -14 --52 --111 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -88 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -124 -113 -106 -97 -22 --45 --105 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -78 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -89 -15 --50 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -58 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -117 -40 --29 --90 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -4 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -96 -21 --45 --104 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --2 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -119 -108 -99 -91 -83 -75 -67 -63 -60 -57 -51 -45 -37 -32 --37 --98 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -72 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -80 -7 --57 --114 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -55 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -112 -105 -99 -92 -85 -79 -72 -66 -60 -51 -42 -37 --33 --95 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --36 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -81 -8 --58 --116 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -89 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -112 -103 -95 -19 --48 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -79 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -91 -17 --49 --106 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -51 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -120 -42 --27 --88 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --1 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -114 -105 -96 -87 -79 -73 -64 -58 -55 -50 -47 -43 -38 --32 --93 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --34 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -80 -7 --59 --116 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -84 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -119 -109 -95 -86 -11 --56 --114 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -83 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -116 -107 -97 -21 --46 --105 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --17 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -84 -9 --57 --115 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -83 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -94 -20 --46 --104 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -50 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -118 -108 -99 -88 -77 -68 -63 -60 -57 -56 -51 -46 --25 --88 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -74 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -117 -107 -97 -92 -16 --50 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --27 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -86 -11 --55 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -89 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -120 -106 -97 -91 -15 --51 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -80 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -92 -18 --48 --106 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -46 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -117 -39 --30 --91 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -1 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -114 -102 -95 -86 -80 -73 -67 -61 -53 -48 -42 -40 -38 --32 --93 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --28 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -79 -5 --60 --118 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -90 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -124 -113 -100 -89 -14 --52 --111 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -82 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -119 -110 -101 -93 -17 --50 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --17 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -86 -12 --54 --113 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -91 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -90 -16 --49 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -58 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -117 -39 --30 --91 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -6 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -89 -14 --52 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -2 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -111 -103 -93 -85 -78 -71 -65 -58 -56 -51 -47 -43 -39 --31 --93 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --38 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -80 -7 --59 --116 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -87 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -90 -16 --49 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -51 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -113 -107 -100 -91 -86 -79 -74 -66 -57 -51 -47 -45 --25 --87 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -73 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -88 -15 --51 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -45 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -119 -41 --29 --89 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -4 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -97 -22 --46 --105 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --3 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -92 -17 --49 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --1 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -124 -112 -102 -93 -84 -78 -71 -66 -59 -54 -49 -44 -39 -39 --31 --92 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --33 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -76 -3 --62 --120 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --3 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -92 -17 --50 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --9 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -83 -9 --57 --115 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -3 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -99 -23 --44 --104 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -1 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -92 -17 --50 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --3 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -89 -14 --52 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --3 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -91 -16 --50 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --1 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -92 -17 --50 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -1 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -89 -15 --52 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -94 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -114 -104 -96 -20 --47 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -76 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -111 -103 -95 -19 --48 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -71 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -119 -111 -100 -92 -16 --51 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -85 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -120 -111 -101 -94 -18 --49 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -81 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -88 -15 --51 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -54 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -116 -39 --30 --90 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -7 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -112 -104 -95 -84 -72 -65 -61 -57 -55 -51 -50 -45 -41 --29 --90 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --38 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -82 -8 --57 --115 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -80 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -93 -18 --47 --105 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -55 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -110 -33 --35 --96 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --1 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -101 -25 --42 --102 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -1 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -110 -98 -91 -87 -81 -75 -66 -56 -50 -46 -44 -41 -37 --32 --94 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --33 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -81 -7 --58 --116 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -80 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -120 -113 -104 -98 -22 --45 --105 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -80 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -111 -103 -94 -18 --49 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -83 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -89 -15 --50 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -51 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -120 -109 -101 -96 -87 -77 -65 -58 -54 -51 -48 -48 --23 --85 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --38 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -82 -8 --58 --115 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --5 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -90 -15 --51 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -89 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -112 -103 -95 -19 --48 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --22 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -85 -11 --55 --113 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -86 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -112 -102 -95 -19 --48 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -83 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -88 -15 --51 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -53 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -118 -40 --29 --89 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -2 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -100 -25 --43 --103 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -0 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -119 -109 -101 -93 -85 -77 -74 -71 -66 -57 -48 -38 -30 -29 --40 --100 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -73 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -88 -15 --51 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -47 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -114 -103 -96 -91 -84 -78 -71 -66 -62 -57 -48 -39 --32 --93 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --27 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -85 -11 --54 --113 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -89 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -119 -109 -101 -95 -19 --48 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -78 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -88 -15 --50 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -59 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -119 -42 --27 --88 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -5 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -111 -100 -91 -84 -78 -74 -71 -65 -60 -54 -49 -43 -37 --33 --94 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --31 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -77 -4 --61 --118 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -82 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -119 -114 -103 -91 -15 --52 --111 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -82 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -120 -113 -104 -97 -21 --46 --105 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --18 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -79 -5 --60 --117 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -93 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -92 -19 --48 --105 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -59 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -118 -110 -103 -95 -87 -78 -71 -66 -59 -56 -51 -47 --23 --86 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -74 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -120 -111 -105 -98 -93 -17 --49 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --16 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -88 -13 --53 --111 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -81 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -124 -114 -101 -87 -12 --54 --113 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -80 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -91 -18 --48 --106 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -50 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -117 -40 --29 --90 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -3 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -117 -107 -95 -82 -74 -68 -64 -61 -57 -53 -50 -44 -39 --31 --92 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --32 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -78 -5 --60 --117 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -87 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -119 -110 -100 -94 -18 --48 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -82 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -107 -93 -83 -8 --58 --116 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --15 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -89 -15 --51 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -88 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -90 -17 --48 --106 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -52 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -119 -40 --29 --89 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -8 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -96 -21 --46 --105 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --4 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -110 -99 -90 -83 -75 -68 -62 -59 -56 -51 -48 -44 -37 --33 --94 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --31 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -77 -5 --60 --118 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -80 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -90 -17 --49 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -56 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -118 -106 -97 -90 -82 -76 -71 -69 -63 -56 -51 -47 --24 --87 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -75 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -83 -10 --55 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -50 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -120 -43 --27 --89 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --3 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -97 -22 --45 --105 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --6 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -93 -18 --49 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --5 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -120 -112 -102 -94 -85 -74 -66 -62 -59 -57 -53 -48 -44 -36 --34 --95 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --26 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -83 -10 --56 --114 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --5 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -94 -19 --48 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --8 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -94 -19 --48 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --1 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -93 -18 --49 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --3 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -92 -17 --50 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -0 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -20 --47 --106 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --2 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -91 -16 --50 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --8 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -94 -19 --48 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --1 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -20 --46 --106 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -87 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -118 -108 -98 -91 -15 --52 --111 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -87 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -107 -96 -89 -14 --53 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -83 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -124 -110 -100 -91 -15 --51 --111 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -79 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -117 -107 -98 -90 -15 --52 --111 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -85 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -89 -16 --49 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -55 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -117 -40 --29 --89 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -9 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -124 -112 -103 -94 -86 -81 -75 -69 -63 -56 -49 -47 -46 -42 --28 --90 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --38 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -79 -6 --60 --117 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -82 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -91 -17 --49 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -56 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -119 -41 --28 --88 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -1 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -20 --47 --106 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --4 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -111 -101 -92 -83 -77 -71 -66 -61 -55 -51 -45 -41 -40 --29 --91 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --30 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -75 -2 --63 --119 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -91 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -114 -105 -97 -93 -17 --49 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -74 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -120 -110 -102 -94 -18 --49 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -81 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -86 -13 --52 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -52 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -111 -101 -94 -82 -70 -62 -60 -57 -54 -53 -49 --22 --84 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --29 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -79 -6 --59 --116 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --6 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -92 -17 --49 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -84 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -124 -112 -101 -92 -16 --50 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --15 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -86 -12 --53 --111 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -88 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -117 -107 -100 -95 -18 --49 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -87 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -91 -18 --48 --106 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -52 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -108 -31 --36 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --1 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -100 -24 --43 --102 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --4 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -110 -99 -90 -81 -74 -70 -67 -61 -57 -48 -45 -43 -42 --28 --90 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -58 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -89 -15 --50 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -55 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -117 -108 -101 -93 -85 -79 -71 -64 -57 -50 -46 -44 --27 --88 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --32 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -84 -10 --56 --114 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -81 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -115 -106 -98 -21 --46 --105 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -81 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -89 -16 --50 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -58 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -118 -41 --28 --90 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --1 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -113 -106 -101 -91 -83 -73 -62 -55 -53 -50 -46 -42 -39 --31 --92 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --32 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -78 -5 --60 --117 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -89 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -115 -101 -92 -16 --51 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -88 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -119 -107 -93 -83 -8 --58 --116 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --8 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -90 -15 --51 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -88 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -92 -18 --48 --105 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -53 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -120 -108 -94 -86 -80 -75 -69 -64 -60 -58 -54 -49 --22 --84 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -68 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -118 -110 -100 -91 -15 --51 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --14 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -87 -13 --53 --111 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -83 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -120 -111 -99 -90 -15 --52 --111 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -85 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -85 -12 --52 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -53 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -117 -40 --29 --89 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -4 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -114 -102 -97 -89 -78 -67 -57 -51 -48 -46 -46 -46 -43 --27 --89 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --29 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -78 -5 --61 --118 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -83 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -118 -109 -100 -93 -17 --50 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -85 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -117 -109 -100 -24 --44 --104 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --16 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -83 -9 --56 --114 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -92 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -92 -18 --48 --106 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -49 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -119 -42 --28 --89 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -4 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -101 -25 --43 --102 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --12 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -110 -99 -89 -81 -74 -69 -63 -58 -53 -51 -47 -41 -37 --33 --94 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --30 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -81 -7 --58 --116 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -86 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -90 -17 --49 --106 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -55 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -110 -102 -91 -82 -74 -68 -63 -61 -57 -54 -44 --27 --89 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -73 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -81 -9 --56 --113 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -56 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -117 -40 --30 --91 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -7 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -90 -15 --51 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --4 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -97 -21 --46 --105 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --6 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -124 -110 -95 -86 -79 -75 -71 -68 -62 -59 -52 -45 -41 -40 --30 --92 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --36 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -80 -6 --60 --117 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --5 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -92 -17 --49 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --2 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -92 -17 --49 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --1 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -93 -18 --49 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --2 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -92 -17 --49 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --9 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -94 -19 --48 --106 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -0 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -91 -17 --50 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -0 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -93 -19 --48 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --5 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -94 -19 --48 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -89 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -114 -101 -86 -11 --56 --114 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -87 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -111 -103 -93 -17 --50 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -77 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -118 -108 -101 -94 -18 --48 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -84 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -118 -108 -100 -88 -13 --54 --113 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -86 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -89 -16 --49 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -53 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -119 -41 --28 --89 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -2 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -111 -95 -86 -79 -74 -71 -69 -64 -57 -51 -45 -43 -40 --30 --92 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --29 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -75 -2 --63 --120 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -89 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -92 -19 --47 --105 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -55 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -114 -37 --32 --92 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -7 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -97 -21 --45 --105 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --4 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -118 -106 -97 -92 -87 -81 -71 -65 -59 -53 -50 -48 -43 -38 --32 --93 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --29 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -79 -6 --60 --117 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -86 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -111 -101 -93 -17 --50 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -84 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -114 -105 -97 -21 --47 --106 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -76 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -90 -17 --49 --106 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -56 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -115 -108 -102 -95 -88 -80 -74 -66 -62 -56 -51 -45 --26 --88 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --31 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -82 -8 --57 --115 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --11 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -88 -13 --53 --111 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -91 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -113 -101 -88 -13 --54 --113 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --9 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -86 -12 --55 --113 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -84 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -113 -104 -96 -20 --47 --106 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -75 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -91 -17 --49 --106 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -52 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -112 -35 --33 --94 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -1 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -20 --47 --106 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -1 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -112 -100 -93 -84 -78 -69 -63 -57 -52 -50 -47 -42 -37 --32 --94 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -70 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -86 -13 --52 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -50 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -113 -104 -98 -90 -82 -76 -70 -63 -60 -55 -48 -41 --30 --91 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --24 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -85 -11 --55 --113 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -88 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -119 -109 -101 -93 -18 --49 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -81 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -91 -17 --49 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -42 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -118 -41 --28 --89 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -2 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -112 -103 -96 -86 -74 -67 -63 -59 -57 -55 -51 -42 -34 --36 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --28 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -79 -6 --60 --117 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -85 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -117 -109 -102 -97 -21 --46 --106 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -82 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -111 -103 -92 -16 --51 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --15 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -90 -15 --52 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -85 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -91 -17 --48 --106 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -57 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -116 -106 -98 -90 -83 -75 -68 -63 -60 -56 -51 -47 --24 --86 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -66 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -115 -104 -97 -92 -16 --51 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --12 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -90 -15 --51 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -87 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -112 -100 -89 -14 --53 --111 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -87 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -86 -14 --51 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -60 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -119 -41 --28 --89 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -7 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -109 -98 -92 -83 -79 -72 -67 -60 -54 -51 -48 -43 -38 --32 --93 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --32 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -83 -9 --57 --115 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -83 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -111 -102 -93 -17 --50 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -85 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -124 -112 -101 -93 -17 --50 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --13 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -90 -15 --51 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -84 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -93 -20 --46 --104 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -55 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -118 -40 --29 --90 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -4 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -97 -22 --45 --104 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -2 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -112 -102 -93 -85 -81 -75 -69 -59 -53 -48 -43 -39 -34 --35 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --32 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -78 -5 --60 --117 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -91 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -91 -18 --48 --106 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -57 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -116 -105 -95 -90 -85 -81 -75 -67 -60 -53 -48 -43 --27 --89 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -74 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -85 -12 --52 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -48 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -119 -42 --28 --89 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --4 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -100 -25 --43 --102 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --1 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -20 --46 --105 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --5 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -118 -108 -98 -89 -83 -77 -70 -64 -58 -54 -49 -47 -43 -39 --30 --92 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --34 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -80 -7 --58 --115 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --8 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -88 -14 --53 --111 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --2 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -92 -17 --49 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --2 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -20 --47 --106 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --3 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -21 --46 --106 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --4 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -92 -17 --50 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --2 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -91 -16 --50 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --4 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -87 -13 --53 --111 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -0 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -93 -18 --49 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -87 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -119 -109 -103 -96 -20 --47 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -81 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -111 -104 -95 -20 --47 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -78 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -117 -107 -99 -92 -17 --50 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -86 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -114 -104 -95 -89 -14 --53 --111 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -83 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -90 -16 --49 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -56 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -114 -36 --33 --93 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -7 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -124 -110 -101 -94 -88 -82 -74 -65 -59 -55 -52 -48 -44 -40 --30 --91 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --32 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -82 -9 --57 --115 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -88 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -91 -18 --48 --106 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -55 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -114 -37 --32 --93 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -2 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -96 -21 --46 --104 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -0 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -113 -103 -91 -78 -70 -66 -62 -60 -57 -53 -46 -37 -33 --36 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --31 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -83 -9 --56 --114 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -87 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -119 -111 -103 -96 -20 --47 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -87 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -124 -113 -103 -97 -21 --46 --106 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -73 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -87 -14 --51 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -56 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -124 -114 -107 -99 -92 -85 -79 -73 -66 -63 -57 -48 -43 --27 --89 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --24 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -79 -6 --59 --116 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --9 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -92 -17 --50 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -96 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -112 -105 -97 -21 --46 --106 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --13 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -86 -12 --54 --113 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -93 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -119 -111 -101 -91 -15 --51 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -81 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -84 -11 --54 --111 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -56 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -115 -38 --31 --92 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -3 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -97 -22 --45 --104 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -0 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -104 -94 -86 -80 -76 -73 -67 -62 -58 -52 -48 -44 -38 --32 --93 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -73 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -88 -14 --51 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -48 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -117 -108 -98 -93 -89 -83 -72 -66 -59 -49 -42 -39 --31 --93 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --32 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -83 -9 --57 --114 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -86 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -124 -114 -105 -98 -93 -18 --49 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -81 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -92 -18 --48 --106 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -52 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -117 -39 --30 --91 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -5 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -113 -103 -96 -87 -84 -74 -64 -52 -45 -41 -39 -38 -38 --32 --93 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --27 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -80 -7 --59 --117 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -90 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -114 -103 -95 -20 --47 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -74 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -112 -102 -95 -19 --48 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --15 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -90 -14 --52 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -89 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -89 -16 --49 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -52 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -118 -110 -104 -95 -87 -76 -69 -65 -62 -57 -48 -46 --24 --87 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -72 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -119 -111 -103 -96 -20 --47 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --15 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -91 -16 --51 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -92 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -114 -105 -98 -22 --45 --105 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -79 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -89 -15 --50 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -47 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -117 -39 --30 --90 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -4 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -115 -103 -94 -87 -80 -73 -70 -62 -54 -43 -38 -34 -33 --36 --98 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --34 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -83 -10 --56 --114 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -87 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -113 -103 -95 -89 -14 --53 --111 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -87 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -120 -109 -103 -95 -19 --48 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --10 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -82 -8 --58 --116 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -93 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -92 -18 --47 --105 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -49 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -117 -40 --29 --90 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --1 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -96 -20 --47 --106 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --1 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -108 -98 -92 -86 -79 -71 -65 -59 -56 -53 -48 -40 -31 --39 --99 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --28 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -81 -7 --58 --116 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -85 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -89 -16 --49 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -53 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -117 -107 -97 -91 -84 -80 -74 -66 -58 -53 -49 -44 --27 --89 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -73 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -87 -13 --52 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -48 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -115 -38 --31 --91 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -2 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -96 -22 --45 --105 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --1 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -92 -17 --49 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --1 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -112 -96 -86 -80 -75 -72 -70 -64 -59 -49 -43 -39 -38 --32 --93 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --31 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -79 -5 --60 --118 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --9 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -92 -17 --50 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -0 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -89 -15 --51 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --1 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -89 -15 --52 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --9 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -90 -15 --51 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -3 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -90 -15 --51 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -2 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -91 -16 --50 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --8 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -94 -19 --47 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -0 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -93 -18 --48 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -89 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -115 -106 -93 -17 --50 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -83 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -119 -110 -101 -93 -17 --50 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -85 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -119 -110 -101 -93 -18 --49 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -89 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -124 -113 -105 -98 -93 -17 --50 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -79 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -85 -13 --52 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -55 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -113 -36 --33 --93 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -5 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -116 -103 -92 -83 -79 -73 -68 -59 -53 -50 -44 -40 -37 --33 --94 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --31 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -82 -9 --57 --115 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -88 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -91 -17 --48 --105 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -61 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -113 -37 --32 --92 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -0 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -100 -25 --43 --103 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --11 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -114 -104 -97 -92 -88 -82 -74 -69 -62 -56 -53 -52 -44 -35 --35 --96 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --34 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -83 -9 --57 --115 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -87 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -111 -98 -87 -12 --54 --113 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -78 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -115 -101 -94 -18 --49 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -84 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -90 -16 --49 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -54 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -110 -97 -90 -84 -80 -78 -74 -70 -64 -59 -54 -48 --23 --86 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --32 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -79 -6 --60 --117 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --5 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -88 -13 --53 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -91 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -112 -103 -94 -19 --48 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --14 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -90 -15 --51 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -87 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -119 -110 -99 -91 -16 --51 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -85 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -92 -17 --49 --106 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -52 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -110 -33 --35 --96 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -7 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -100 -25 --42 --101 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --11 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -112 -96 -87 -80 -75 -71 -66 -60 -55 -46 -40 -38 -35 --34 --95 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -65 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -86 -12 --53 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -51 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -116 -108 -99 -92 -85 -75 -69 -63 -56 -54 -53 -49 --21 --83 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --32 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -77 -4 --61 --119 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -88 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -124 -114 -101 -87 -12 --55 --113 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -86 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -92 -18 --48 --106 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -49 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -43 --27 --88 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --3 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -113 -102 -93 -85 -78 -73 -68 -62 -57 -52 -44 -34 -28 --40 --101 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --31 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -83 -9 --57 --115 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -82 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -112 -104 -95 -20 --47 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -87 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -120 -107 -99 -93 -17 --50 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --13 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -82 -8 --58 --116 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -95 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -92 -18 --48 --106 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -57 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -117 -107 -97 -90 -84 -77 -70 -64 -61 -56 -51 -45 --26 --88 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -70 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -113 -102 -94 -18 --49 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --15 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -86 -12 --55 --113 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -88 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -116 -110 -103 -94 -19 --49 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -84 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -89 -16 --50 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -51 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -116 -38 --31 --91 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --1 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -113 -99 -86 -76 -71 -67 -64 -63 -59 -56 -48 -39 -34 --36 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --34 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -82 -8 --57 --115 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -86 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -116 -107 -98 -22 --45 --105 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -83 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -116 -109 -102 -96 -20 --46 --106 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --19 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -86 -12 --54 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -84 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -89 -16 --49 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -58 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -118 -40 --29 --90 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -4 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -94 -19 --48 --106 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -1 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -109 -99 -92 -83 -76 -68 -65 -63 -55 -51 -46 -42 -38 --32 --93 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --32 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -79 -5 --61 --118 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -86 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -89 -16 --50 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -57 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -115 -108 -101 -95 -84 -77 -69 -65 -60 -58 -51 -43 --27 --89 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -73 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -87 -14 --51 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -54 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -114 -37 --32 --92 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -3 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -96 -21 --46 --105 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --5 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -92 -17 --49 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --5 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -124 -111 -96 -83 -73 -67 -63 -62 -60 -58 -55 -49 -45 -41 --29 --91 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --26 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -82 -8 --58 --115 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --11 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -90 -16 --51 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -0 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -94 -19 --48 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --4 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -92 -17 --49 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --2 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -89 -14 --52 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --6 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -92 -17 --49 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --2 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -90 -15 --51 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --3 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -90 -16 --50 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --4 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -93 -19 --48 --106 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -88 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -111 -100 -94 -18 --49 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -84 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -109 -100 -92 -16 --51 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -88 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -115 -110 -103 -91 -15 --51 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -87 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -111 -101 -95 -20 --47 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -83 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -90 -16 --49 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -58 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -117 -40 --29 --89 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -6 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -118 -108 -101 -93 -86 -76 -68 -66 -60 -57 -54 -51 -46 -37 --33 --95 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --35 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -83 -9 --57 --115 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -89 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -87 -14 --51 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -56 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -118 -40 --28 --89 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -5 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -89 -14 --52 --111 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --3 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -110 -102 -93 -86 -79 -70 -67 -63 -60 -52 -42 -37 -35 --35 --96 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --29 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -81 -7 --59 --116 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -91 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -119 -104 -94 -87 -12 --54 --113 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -84 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -113 -103 -95 -20 --48 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -83 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -87 -15 --51 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -48 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -111 -99 -91 -83 -77 -70 -64 -58 -52 -50 -45 --25 --87 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --31 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -73 -0 --65 --121 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -0 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -84 -10 --56 --114 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -91 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -114 -105 -95 -19 --48 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --14 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -90 -16 --50 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -86 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -118 -110 -104 -96 -20 --47 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -85 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -88 -15 --50 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -55 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -118 -41 --28 --89 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -5 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -97 -21 --46 --105 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -0 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -115 -105 -96 -92 -85 -78 -72 -67 -62 -57 -51 -45 -40 -38 --32 --93 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -70 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -87 -14 --51 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -52 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -118 -109 -100 -92 -85 -79 -71 -63 -61 -55 -50 -46 --25 --87 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --32 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -81 -8 --58 --115 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -88 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -120 -111 -104 -97 -22 --45 --105 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -75 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -89 -16 --50 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -54 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -117 -40 --30 --90 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -4 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -120 -110 -102 -96 -88 -78 -67 -60 -55 -52 -50 -47 -43 -40 --30 --92 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --29 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -72 -0 --65 --122 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -93 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -120 -111 -102 -93 -18 --49 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -81 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -124 -115 -107 -101 -94 -18 --49 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --13 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -90 -15 --51 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -92 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -91 -18 --47 --105 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -50 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -113 -106 -100 -94 -86 -81 -75 -70 -64 -58 -52 -47 --23 --86 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -74 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -113 -106 -100 -93 -18 --49 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --15 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -88 -14 --52 --111 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -81 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -124 -113 -99 -89 -14 --53 --111 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -81 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -87 -14 --51 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -56 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -117 -39 --30 --90 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -7 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -113 -101 -94 -86 -80 -75 -69 -63 -59 -53 -47 -46 -42 --28 --90 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --32 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -79 -5 --60 --117 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -85 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -120 -111 -102 -97 -21 --46 --106 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -82 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -115 -108 -103 -95 -20 --47 --106 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --12 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -84 -10 --56 --114 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -86 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -92 -18 --47 --106 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -45 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -118 -40 --29 --90 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -6 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -20 --47 --106 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --6 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -115 -108 -102 -97 -89 -84 -74 -63 -55 -52 -49 -47 -46 -42 --27 --89 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --37 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -78 -4 --61 --118 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -88 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -87 -14 --51 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -60 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -117 -107 -96 -88 -81 -76 -67 -63 -56 -52 -45 -40 --30 --92 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -64 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -86 -13 --52 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -55 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -116 -39 --31 --91 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -3 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -20 --47 --106 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -2 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -92 -17 --49 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --7 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -124 -113 -101 -92 -85 -79 -70 -65 -59 -54 -49 -45 -42 -39 --31 --92 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --29 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -79 -5 --60 --118 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --12 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -92 -17 --49 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --7 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -92 -17 --49 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --4 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -92 -17 --49 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --5 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -93 -18 --48 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --1 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -87 -13 --54 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --5 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -99 -23 --44 --103 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --2 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -86 -11 --55 --113 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -2 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -92 -17 --50 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -81 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -120 -111 -103 -94 -18 --49 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -85 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -119 -105 -94 -87 -12 --54 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -83 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -118 -110 -101 -95 -19 --47 --106 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -79 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -118 -111 -105 -98 -22 --45 --105 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -80 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -89 -16 --50 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -48 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -119 -41 --29 --89 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -0 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -110 -99 -90 -84 -80 -77 -72 -62 -58 -51 -46 -42 -41 --29 --91 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --28 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -77 -4 --61 --118 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -94 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -87 -14 --51 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -58 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -114 -37 --33 --93 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -7 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -92 -18 --49 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --10 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -116 -101 -94 -90 -85 -80 -75 -70 -64 -56 -46 -40 -36 -35 --35 --96 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --29 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -79 -6 --59 --117 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -86 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -120 -111 -102 -93 -18 --49 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -87 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -119 -110 -100 -93 -17 --50 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -83 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -87 -15 --50 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -46 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -110 -100 -92 -87 -81 -74 -67 -61 -55 -48 -43 --28 --90 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --30 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -80 -6 --59 --117 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --12 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -89 -14 --52 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -91 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -115 -106 -98 -22 --45 --105 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --15 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -87 -13 --53 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -93 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -114 -105 -96 -20 --47 --106 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -84 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -90 -16 --49 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -51 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -117 -39 --30 --91 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -5 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -93 -19 --48 --106 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --8 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -114 -100 -86 -78 -73 -68 -67 -62 -59 -53 -49 -43 -38 --32 --93 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -65 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -86 -13 --52 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -55 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -114 -105 -96 -87 -82 -74 -71 -64 -57 -51 -45 --25 --87 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --30 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -78 -5 --61 --118 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -82 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -120 -112 -104 -97 -21 --46 --105 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -81 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -88 -14 --51 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -56 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -119 -41 --28 --89 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -0 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -112 -101 -91 -82 -77 -73 -67 -63 -55 -49 -44 -44 -40 --30 --92 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --27 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -80 -6 --59 --117 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -91 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -118 -109 -100 -93 -18 --49 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -81 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -116 -107 -97 -21 --47 --106 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --17 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -86 -11 --55 --113 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -87 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -90 -17 --48 --106 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -53 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -120 -110 -101 -95 -86 -79 -75 -69 -61 -55 -50 -46 --25 --87 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -75 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -120 -108 -95 -81 -7 --59 --117 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --11 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -89 -15 --52 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -89 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -111 -101 -92 -16 --50 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -82 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -87 -14 --51 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -52 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -119 -41 --28 --89 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --1 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -119 -106 -97 -91 -86 -79 -76 -72 -64 -56 -51 -45 -41 -40 --30 --91 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --29 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -82 -9 --57 --115 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -85 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -119 -110 -100 -96 -20 --47 --106 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -81 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -114 -102 -94 -18 --49 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --23 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -85 -11 --55 --113 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -89 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -91 -18 --48 --106 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -52 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -118 -40 --30 --90 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -9 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -20 --47 --106 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --2 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -109 -98 -93 -87 -81 -73 -67 -57 -50 -46 -44 -40 -37 --32 --94 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --32 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -73 -0 --65 --122 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -94 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -89 -16 --49 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -55 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -117 -107 -98 -93 -86 -80 -75 -64 -58 -52 -49 -45 --26 --88 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -77 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -88 -15 --50 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -52 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -118 -40 --29 --90 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -5 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -93 -18 --48 --106 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --2 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -90 -15 --50 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --6 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -120 -109 -101 -93 -86 -80 -74 -68 -60 -53 -48 -44 -39 -35 --34 --96 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --33 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -84 -10 --56 --114 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --14 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -91 -17 --50 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --2 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -96 -21 --46 --105 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --4 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -91 -16 --50 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -0 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -92 -17 --49 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --2 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -93 -18 --49 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --7 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -91 -17 --50 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --9 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -96 -21 --46 --104 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -4 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -91 -16 --50 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -94 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -120 -111 -102 -92 -16 --51 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -85 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -119 -112 -104 -95 -19 --48 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -81 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -124 -113 -103 -95 -20 --48 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -85 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -112 -105 -96 -20 --47 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -79 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -89 -15 --50 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -52 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -116 -39 --30 --91 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -9 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -118 -108 -100 -96 -90 -80 -69 -62 -57 -55 -53 -50 -43 -41 --29 --91 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --30 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -70 --2 --67 --123 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -94 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -91 -17 --48 --105 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -54 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -115 -37 --31 --92 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --3 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -97 -22 --44 --103 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --1 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -118 -109 -99 -91 -85 -78 -72 -66 -60 -56 -51 -47 -41 -37 --33 --94 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --32 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -78 -5 --60 --117 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -89 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -111 -101 -93 -17 --50 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -77 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -118 -113 -103 -96 -20 --48 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -84 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -87 -14 --51 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -58 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -116 -107 -97 -91 -84 -78 -70 -64 -58 -57 -50 -44 --27 --89 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --22 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -79 -6 --60 --118 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --3 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -89 -15 --52 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -92 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -119 -110 -102 -94 -18 --48 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --16 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -84 -11 --55 --113 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -89 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -119 -111 -104 -95 -19 --48 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -85 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -91 -17 --48 --106 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -54 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -116 -38 --31 --91 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -4 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -100 -24 --43 --103 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --1 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -111 -100 -91 -83 -76 -70 -64 -59 -54 -48 -44 -39 -37 --32 --93 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -67 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -87 -13 --52 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -56 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -118 -107 -98 -91 -84 -76 -70 -63 -57 -53 -48 -43 --27 --89 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --27 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -77 -4 --61 --119 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -91 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -118 -111 -104 -98 -22 --45 --105 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -80 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -90 -16 --49 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -52 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -116 -39 --30 --91 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -1 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -113 -101 -95 -87 -79 -72 -69 -63 -58 -50 -40 -33 -30 --39 --99 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --32 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -85 -11 --54 --113 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -78 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -115 -103 -93 -16 --50 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -81 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -120 -111 -102 -89 -13 --53 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --6 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -91 -16 --51 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -89 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -89 -16 --49 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -56 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -115 -105 -97 -88 -80 -72 -66 -60 -59 -53 -49 --22 --85 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -65 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -119 -108 -96 -87 -12 --54 --113 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --15 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -84 -10 --56 --114 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -96 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -110 -101 -92 -16 --51 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -84 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -89 -16 --50 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -49 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -117 -39 --30 --90 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -9 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -120 -106 -96 -91 -87 -81 -75 -66 -60 -56 -54 -49 -45 -36 --34 --95 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --32 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -75 -1 --64 --121 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -80 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -114 -104 -97 -21 --47 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -79 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -116 -110 -104 -97 -21 --46 --106 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --14 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -83 -9 --56 --114 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -95 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -91 -18 --48 --106 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -52 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -114 -37 --32 --93 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -0 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -96 -21 --46 --105 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --4 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -119 -109 -101 -93 -86 -81 -73 -68 -63 -57 -50 -44 -42 -39 --31 --93 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --33 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -79 -5 --60 --118 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -91 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -91 -17 --48 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -50 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -116 -105 -96 -91 -86 -77 -71 -61 -54 -51 -48 -47 --24 --86 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -68 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -85 -12 --53 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -56 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -113 -35 --33 --94 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -3 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -100 -24 --44 --103 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --3 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -89 -14 --52 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -1 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -112 -102 -93 -85 -77 -73 -66 -61 -55 -49 -44 -40 -36 --34 --96 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --28 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -85 -11 --55 --113 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --7 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -92 -17 --50 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --7 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -89 -15 --51 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --1 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -90 -15 --51 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --10 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -96 -21 --46 --105 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --9 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -91 -16 --51 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -2 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -92 -17 --50 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -7 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -86 -11 --54 --113 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -1 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -89 -14 --52 --111 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -91 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -117 -107 -98 -92 -17 --50 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -75 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -113 -103 -93 -18 --49 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -83 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -110 -103 -95 -90 -15 --52 --111 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -91 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -109 -100 -91 -15 --51 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -85 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -89 -15 --50 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -53 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -117 -39 --30 --91 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -7 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -115 -105 -93 -81 -72 -68 -66 -63 -62 -57 -52 -46 -42 --29 --90 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --31 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -71 --1 --66 --123 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -93 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -93 -19 --47 --105 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -56 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -119 -42 --27 --88 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -7 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -89 -15 --51 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -2 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -124 -112 -102 -95 -90 -83 -73 -63 -51 -48 -44 -43 -41 -39 --31 --92 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --37 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -82 -8 --58 --115 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -91 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -115 -106 -98 -93 -17 --50 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -80 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -124 -113 -103 -97 -21 --46 --105 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -83 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -87 -15 --51 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -57 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -115 -108 -103 -93 -83 -77 -73 -66 -61 -56 -51 -46 --25 --87 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --29 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -79 -5 --60 --117 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -0 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -91 -16 --50 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -93 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -124 -115 -104 -95 -19 --48 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --19 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -87 -12 --54 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -91 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -118 -108 -99 -92 -16 --51 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -79 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -89 -15 --50 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -54 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -117 -40 --30 --91 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -3 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -102 -26 --41 --101 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --10 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -111 -102 -94 -89 -87 -81 -77 -74 -69 -61 -55 -46 -39 -37 --33 --94 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -73 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -88 -14 --51 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -43 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -119 -110 -101 -92 -83 -77 -70 -63 -58 -53 -48 -43 --28 --90 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --24 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -84 -10 --56 --114 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -80 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -120 -108 -98 -92 -17 --50 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -70 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -89 -15 --50 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -54 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -118 -41 --28 --89 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -9 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -117 -107 -98 -94 -87 -80 -75 -67 -61 -56 -51 -49 -43 -39 --31 --92 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --37 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -80 -6 --60 --118 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -77 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -118 -109 -102 -94 -18 --49 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -84 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -112 -104 -97 -21 --46 --106 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --14 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -88 -13 --53 --111 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -89 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -92 -18 --48 --106 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -55 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -120 -106 -93 -85 -79 -76 -70 -67 -62 -54 -45 -40 --30 --91 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -68 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -116 -105 -99 -95 -19 --48 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --17 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -83 -9 --57 --115 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -93 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -117 -107 -101 -94 -18 --49 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -86 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -86 -14 --51 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -50 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -119 -41 --28 --89 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --3 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -112 -102 -90 -83 -76 -69 -66 -61 -59 -54 -46 -38 -28 --41 --101 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --25 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -85 -11 --54 --113 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -84 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -118 -109 -99 -90 -15 --52 --111 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -80 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -110 -96 -87 -12 --55 --113 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --11 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -89 -14 --52 --111 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -94 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -90 -17 --49 --106 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -55 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -117 -40 --29 --90 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -9 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -88 -13 --53 --111 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --5 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -113 -101 -91 -83 -77 -73 -67 -61 -57 -50 -45 -43 -38 --32 --93 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --34 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -77 -4 --62 --119 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -89 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -93 -18 --47 --105 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -57 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -116 -101 -93 -86 -82 -76 -71 -68 -63 -57 -53 -46 --25 --87 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -71 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -82 -9 --55 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 -62 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -112 -35 --34 --94 --128 --128 --128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +66 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +87 +14 +-51 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +55 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +114 +37 +-31 +-92 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +5 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +96 +21 +-46 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +4 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +93 +18 +-49 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +0 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +113 +105 +98 +91 +86 +80 +74 +68 +62 +58 +57 +53 +45 +40 +-31 +-92 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +79 +5 +-60 +-118 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-9 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +17 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-4 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +94 +19 +-48 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-3 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +91 +16 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-4 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +15 +-52 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-1 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +89 +15 +-52 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-3 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +87 +12 +-54 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-3 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +15 +-51 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-8 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +100 +24 +-44 +-103 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +88 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +108 +102 +95 +19 +-48 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +77 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +105 +96 +20 +-47 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +87 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +115 +103 +91 +15 +-52 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +75 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +115 +106 +99 +93 +17 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +85 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +17 +-49 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +53 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +116 +38 +-31 +-92 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-1 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +114 +101 +95 +89 +82 +76 +69 +63 +57 +52 +47 +42 +41 +-29 +-90 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-36 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +77 +4 +-61 +-119 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +84 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +16 +-49 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +59 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +115 +37 +-32 +-92 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +4 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +89 +14 +-52 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +3 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +112 +101 +92 +84 +77 +71 +67 +62 +57 +53 +45 +38 +37 +-33 +-94 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-28 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +71 +-2 +-66 +-123 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +90 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +112 +103 +94 +18 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +79 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +118 +112 +104 +96 +20 +-47 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +80 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +88 +15 +-50 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +54 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +113 +105 +99 +92 +86 +76 +68 +65 +62 +57 +51 +47 +-23 +-86 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-34 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +77 +4 +-61 +-118 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-4 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +88 +13 +-53 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +91 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +108 +99 +93 +17 +-50 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-13 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +86 +12 +-54 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +90 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +112 +106 +96 +20 +-46 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +82 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +91 +17 +-49 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +47 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +115 +38 +-31 +-92 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +3 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +96 +21 +-46 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-1 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +113 +103 +95 +84 +72 +63 +60 +57 +55 +51 +45 +42 +36 +-33 +-95 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +67 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +87 +14 +-51 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +50 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +109 +101 +94 +87 +80 +73 +66 +59 +53 +48 +42 +-28 +-90 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-31 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +83 +10 +-56 +-114 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +86 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +110 +101 +92 +16 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +83 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +17 +-49 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +48 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +111 +34 +-34 +-94 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +2 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +105 +93 +84 +79 +75 +73 +68 +66 +62 +58 +50 +40 +34 +-35 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-27 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +83 +9 +-57 +-114 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +91 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +113 +105 +93 +17 +-49 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +80 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +111 +102 +93 +17 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +81 +8 +-58 +-116 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +93 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +16 +-49 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +52 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +113 +103 +94 +89 +85 +77 +69 +64 +59 +54 +50 +45 +-25 +-87 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +65 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +115 +104 +90 +15 +-52 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-9 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +88 +13 +-53 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +92 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +114 +105 +97 +21 +-47 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +77 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +88 +15 +-51 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +55 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +40 +-29 +-90 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +3 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +113 +105 +97 +89 +80 +72 +68 +64 +59 +54 +46 +42 +37 +-33 +-94 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +83 +9 +-57 +-115 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +88 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +110 +100 +91 +15 +-52 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +84 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +112 +101 +92 +17 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-20 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +89 +14 +-52 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +83 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +91 +17 +-49 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +52 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +43 +-27 +-88 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +3 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +93 +18 +-49 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +6 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +114 +104 +93 +80 +73 +67 +63 +60 +57 +53 +48 +44 +38 +-33 +-94 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-31 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +78 +4 +-61 +-118 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +83 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +17 +-49 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +47 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +116 +106 +96 +88 +83 +77 +72 +66 +60 +55 +53 +47 +-23 +-85 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +67 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +84 +12 +-53 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +49 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +115 +38 +-31 +-92 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +1 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +96 +21 +-46 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +0 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +20 +-47 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-3 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +111 +103 +93 +86 +79 +72 +65 +60 +55 +51 +46 +43 +36 +-33 +-95 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-31 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +77 +3 +-62 +-119 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-4 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +17 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +0 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +93 +19 +-48 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +0 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +83 +9 +-57 +-115 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +2 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +94 +19 +-48 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-3 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +16 +-51 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-3 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +17 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-2 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +91 +17 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +1 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +17 +-50 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +93 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +115 +100 +88 +83 +9 +-57 +-116 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +79 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +116 +110 +100 +92 +17 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +84 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +114 +101 +87 +12 +-55 +-113 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +85 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +115 +104 +95 +18 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +78 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +91 +17 +-49 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +54 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +116 +39 +-30 +-91 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +0 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +110 +97 +91 +85 +82 +75 +69 +63 +59 +53 +51 +44 +40 +-30 +-91 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +78 +5 +-61 +-118 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +86 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +86 +13 +-51 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +57 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +43 +-26 +-87 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-1 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +97 +22 +-45 +-104 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-12 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +110 +101 +93 +84 +77 +70 +65 +58 +53 +51 +49 +45 +38 +-31 +-93 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +81 +7 +-58 +-116 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +87 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +111 +104 +95 +20 +-47 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +83 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +117 +111 +103 +98 +22 +-45 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +71 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +93 +19 +-47 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +48 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +115 +104 +98 +91 +84 +77 +71 +64 +60 +55 +49 +48 +-23 +-85 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-29 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +80 +6 +-59 +-117 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-7 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +15 +-51 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +90 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +103 +94 +18 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +86 +12 +-54 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +89 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +114 +101 +88 +12 +-54 +-113 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +77 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +91 +17 +-48 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +51 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +110 +33 +-36 +-96 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +3 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +97 +22 +-45 +-104 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-3 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +110 +98 +90 +83 +79 +71 +65 +57 +47 +40 +38 +35 +34 +-35 +-95 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +75 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +16 +-50 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +53 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +107 +99 +92 +87 +83 +79 +75 +69 +60 +50 +43 +39 +-31 +-92 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-23 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +84 +10 +-56 +-114 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +89 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +112 +101 +92 +17 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +75 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +86 +13 +-52 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +48 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +44 +-25 +-87 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +6 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +112 +96 +88 +81 +76 +73 +66 +60 +56 +51 +47 +42 +37 +-32 +-94 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-39 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +74 +1 +-64 +-121 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +90 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +113 +103 +95 +19 +-48 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +78 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +112 +103 +95 +19 +-48 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-15 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +88 +13 +-53 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +92 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +94 +20 +-45 +-103 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +51 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +111 +102 +94 +85 +75 +67 +63 +60 +55 +50 +46 +-24 +-87 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +69 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +111 +97 +90 +15 +-51 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-9 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +88 +13 +-53 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +89 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +112 +101 +94 +89 +13 +-53 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +82 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +89 +15 +-49 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +50 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +40 +-29 +-90 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +4 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +111 +101 +93 +88 +81 +75 +69 +61 +55 +52 +50 +46 +41 +-29 +-91 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-34 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +79 +6 +-60 +-117 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +90 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +115 +106 +97 +91 +16 +-51 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +85 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +111 +100 +93 +17 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-23 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +91 +17 +-50 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +86 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +17 +-49 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +53 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +116 +39 +-30 +-91 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-1 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +20 +-47 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +0 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +113 +103 +93 +84 +78 +71 +65 +59 +54 +49 +45 +42 +38 +-32 +-94 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +79 +6 +-60 +-117 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +81 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +19 +-47 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +48 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +104 +95 +89 +83 +78 +73 +67 +60 +54 +50 +47 +-23 +-85 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +68 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +85 +13 +-52 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +49 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +115 +38 +-31 +-91 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +4 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +97 +22 +-45 +-104 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +0 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +87 +13 +-53 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-3 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +111 +100 +94 +86 +77 +71 +64 +60 +55 +52 +48 +41 +32 +-37 +-98 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-31 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +79 +5 +-60 +-118 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-9 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +91 +16 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-4 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +93 +18 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-2 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +94 +19 +-48 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-4 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +17 +-49 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-3 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +16 +-51 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-5 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +96 +21 +-46 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-6 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +88 +13 +-53 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +0 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +86 +11 +-54 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +94 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +111 +103 +93 +18 +-49 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +85 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +114 +100 +90 +15 +-52 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +80 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +118 +112 +104 +93 +17 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +82 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +111 +101 +91 +15 +-51 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +75 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +17 +-49 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +54 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +115 +38 +-30 +-91 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +10 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +115 +104 +92 +83 +75 +71 +66 +62 +58 +52 +44 +38 +35 +-34 +-96 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-26 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +78 +5 +-60 +-117 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +79 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +19 +-47 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +53 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +42 +-28 +-89 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-5 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +94 +19 +-48 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-10 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +113 +101 +92 +87 +80 +73 +66 +61 +54 +48 +45 +41 +40 +-30 +-91 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-28 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +79 +6 +-59 +-117 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +88 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +111 +103 +95 +19 +-48 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +85 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +106 +97 +89 +14 +-53 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +84 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +88 +15 +-50 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +57 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +103 +93 +86 +81 +76 +70 +67 +61 +56 +50 +46 +-25 +-87 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-31 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +73 +0 +-65 +-121 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-9 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +93 +18 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +92 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +112 +98 +91 +15 +-51 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-22 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +15 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +80 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +112 +99 +89 +14 +-53 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +81 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +89 +15 +-51 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +59 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +115 +38 +-31 +-92 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +5 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +94 +19 +-48 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +0 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +109 +101 +95 +90 +83 +75 +67 +57 +50 +46 +44 +42 +39 +-31 +-92 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +68 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +85 +12 +-53 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +56 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +108 +99 +91 +83 +75 +69 +63 +57 +54 +49 +42 +-28 +-90 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-27 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +85 +11 +-55 +-113 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +85 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +100 +88 +12 +-54 +-113 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +81 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +86 +13 +-52 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +57 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +42 +-27 +-88 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +7 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +103 +89 +79 +74 +70 +67 +64 +60 +55 +52 +47 +40 +-30 +-92 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-35 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +76 +3 +-62 +-119 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +94 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +108 +100 +95 +19 +-48 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +80 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +112 +102 +93 +18 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-10 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +15 +-51 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +95 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +91 +17 +-49 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +51 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +109 +99 +87 +79 +74 +70 +64 +56 +51 +47 +43 +-28 +-90 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +76 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +112 +98 +86 +81 +7 +-59 +-117 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-11 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +86 +12 +-54 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +85 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +113 +101 +95 +19 +-48 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +84 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +91 +18 +-48 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +56 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +115 +38 +-31 +-91 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +1 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +115 +103 +95 +87 +78 +73 +66 +60 +56 +49 +45 +40 +36 +-33 +-95 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-27 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +80 +6 +-60 +-117 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +92 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +116 +105 +97 +92 +16 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +76 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +113 +103 +95 +19 +-48 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-13 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +79 +6 +-60 +-117 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +89 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +93 +20 +-46 +-104 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +57 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +109 +33 +-35 +-96 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +11 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +96 +21 +-45 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +1 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +115 +99 +88 +82 +77 +72 +67 +60 +54 +47 +46 +41 +38 +-32 +-93 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-30 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +81 +7 +-58 +-115 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +85 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +19 +-47 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +52 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +109 +101 +92 +85 +78 +75 +69 +62 +56 +50 +44 +-26 +-89 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +69 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +86 +13 +-52 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +50 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +43 +-26 +-87 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-5 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +20 +-47 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +2 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +17 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-4 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +110 +99 +91 +83 +75 +69 +65 +62 +57 +51 +47 +43 +40 +-30 +-91 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-28 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +77 +3 +-62 +-120 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-7 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +91 +16 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +2 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +18 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-2 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +93 +18 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-8 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +17 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-2 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +88 +14 +-52 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-2 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +20 +-47 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-5 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +17 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-1 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +83 +8 +-57 +-115 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +89 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +115 +106 +98 +22 +-45 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +74 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +116 +110 +104 +96 +20 +-47 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +80 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +113 +103 +94 +18 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +85 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +114 +109 +102 +95 +19 +-48 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +82 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +88 +15 +-51 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +56 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +106 +29 +-39 +-99 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +15 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +102 +95 +88 +82 +74 +68 +63 +58 +52 +47 +42 +38 +-32 +-93 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +79 +5 +-60 +-117 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +89 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +16 +-49 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +57 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +116 +39 +-30 +-90 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +8 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +17 +-50 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-5 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +109 +98 +91 +84 +77 +71 +65 +59 +54 +49 +44 +35 +31 +-38 +-98 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +81 +8 +-58 +-116 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +82 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +109 +102 +96 +20 +-46 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +82 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +114 +107 +100 +95 +20 +-47 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +80 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +16 +-50 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +59 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +106 +101 +95 +87 +83 +77 +71 +60 +50 +43 +40 +-30 +-92 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-24 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +76 +3 +-62 +-120 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-7 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +85 +11 +-55 +-113 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +90 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +111 +101 +92 +17 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-9 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +89 +14 +-52 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +88 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +113 +106 +97 +22 +-45 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +78 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +89 +15 +-50 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +58 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +40 +-29 +-90 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +4 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +96 +21 +-45 +-104 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-2 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +108 +99 +91 +83 +75 +67 +63 +60 +57 +51 +45 +37 +32 +-37 +-98 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +72 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +80 +7 +-57 +-114 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +55 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +112 +105 +99 +92 +85 +79 +72 +66 +60 +51 +42 +37 +-33 +-95 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-36 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +81 +8 +-58 +-116 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +89 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +112 +103 +95 +19 +-48 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +79 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +91 +17 +-49 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +51 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +42 +-27 +-88 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-1 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +114 +105 +96 +87 +79 +73 +64 +58 +55 +50 +47 +43 +38 +-32 +-93 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-34 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +80 +7 +-59 +-116 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +84 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +109 +95 +86 +11 +-56 +-114 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +83 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +116 +107 +97 +21 +-46 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +84 +9 +-57 +-115 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +83 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +94 +20 +-46 +-104 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +50 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +108 +99 +88 +77 +68 +63 +60 +57 +56 +51 +46 +-25 +-88 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +74 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +107 +97 +92 +16 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-27 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +86 +11 +-55 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +89 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +106 +97 +91 +15 +-51 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +80 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +18 +-48 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +46 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +39 +-30 +-91 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +1 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +114 +102 +95 +86 +80 +73 +67 +61 +53 +48 +42 +40 +38 +-32 +-93 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-28 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +79 +5 +-60 +-118 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +90 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +113 +100 +89 +14 +-52 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +82 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +110 +101 +93 +17 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +86 +12 +-54 +-113 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +91 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +16 +-49 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +58 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +39 +-30 +-91 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +6 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +89 +14 +-52 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +2 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +111 +103 +93 +85 +78 +71 +65 +58 +56 +51 +47 +43 +39 +-31 +-93 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-38 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +80 +7 +-59 +-116 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +87 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +16 +-49 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +51 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +113 +107 +100 +91 +86 +79 +74 +66 +57 +51 +47 +45 +-25 +-87 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +73 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +88 +15 +-51 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +45 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +41 +-29 +-89 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +4 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +97 +22 +-46 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-3 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +17 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-1 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +112 +102 +93 +84 +78 +71 +66 +59 +54 +49 +44 +39 +39 +-31 +-92 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +76 +3 +-62 +-120 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-3 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +17 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-9 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +83 +9 +-57 +-115 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +3 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +99 +23 +-44 +-104 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +1 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +17 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-3 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +89 +14 +-52 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-3 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +91 +16 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-1 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +17 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +1 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +89 +15 +-52 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +94 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +114 +104 +96 +20 +-47 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +76 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +111 +103 +95 +19 +-48 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +71 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +100 +92 +16 +-51 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +85 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +111 +101 +94 +18 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +81 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +88 +15 +-51 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +54 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +116 +39 +-30 +-90 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +7 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +112 +104 +95 +84 +72 +65 +61 +57 +55 +51 +50 +45 +41 +-29 +-90 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-38 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +82 +8 +-57 +-115 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +80 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +93 +18 +-47 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +55 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +110 +33 +-35 +-96 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-1 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +101 +25 +-42 +-102 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +1 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +110 +98 +91 +87 +81 +75 +66 +56 +50 +46 +44 +41 +37 +-32 +-94 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +81 +7 +-58 +-116 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +80 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +113 +104 +98 +22 +-45 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +80 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +111 +103 +94 +18 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +83 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +89 +15 +-50 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +51 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +109 +101 +96 +87 +77 +65 +58 +54 +51 +48 +48 +-23 +-85 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-38 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +82 +8 +-58 +-115 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-5 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +15 +-51 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +89 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +112 +103 +95 +19 +-48 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-22 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +85 +11 +-55 +-113 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +86 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +112 +102 +95 +19 +-48 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +83 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +88 +15 +-51 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +53 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +40 +-29 +-89 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +2 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +100 +25 +-43 +-103 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +0 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +109 +101 +93 +85 +77 +74 +71 +66 +57 +48 +38 +30 +29 +-40 +-100 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +73 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +88 +15 +-51 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +47 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +114 +103 +96 +91 +84 +78 +71 +66 +62 +57 +48 +39 +-32 +-93 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-27 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +85 +11 +-54 +-113 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +89 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +109 +101 +95 +19 +-48 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +78 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +88 +15 +-50 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +59 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +42 +-27 +-88 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +5 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +111 +100 +91 +84 +78 +74 +71 +65 +60 +54 +49 +43 +37 +-33 +-94 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-31 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +77 +4 +-61 +-118 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +82 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +114 +103 +91 +15 +-52 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +82 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +113 +104 +97 +21 +-46 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +79 +5 +-60 +-117 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +93 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +19 +-48 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +59 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +110 +103 +95 +87 +78 +71 +66 +59 +56 +51 +47 +-23 +-86 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +74 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +111 +105 +98 +93 +17 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +88 +13 +-53 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +81 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +114 +101 +87 +12 +-54 +-113 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +80 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +91 +18 +-48 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +50 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +40 +-29 +-90 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +3 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +117 +107 +95 +82 +74 +68 +64 +61 +57 +53 +50 +44 +39 +-31 +-92 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +78 +5 +-60 +-117 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +87 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +110 +100 +94 +18 +-48 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +82 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +107 +93 +83 +8 +-58 +-116 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-15 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +89 +15 +-51 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +88 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +17 +-48 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +52 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +40 +-29 +-89 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +8 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +96 +21 +-46 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-4 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +110 +99 +90 +83 +75 +68 +62 +59 +56 +51 +48 +44 +37 +-33 +-94 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-31 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +77 +5 +-60 +-118 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +80 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +17 +-49 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +56 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +106 +97 +90 +82 +76 +71 +69 +63 +56 +51 +47 +-24 +-87 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +75 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +83 +10 +-55 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +50 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +43 +-27 +-89 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-3 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +97 +22 +-45 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-6 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +93 +18 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-5 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +102 +94 +85 +74 +66 +62 +59 +57 +53 +48 +44 +36 +-34 +-95 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-26 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +83 +10 +-56 +-114 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-5 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +94 +19 +-48 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-8 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +94 +19 +-48 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-1 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +93 +18 +-49 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-3 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +17 +-50 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +0 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +20 +-47 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-2 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +91 +16 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-8 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +94 +19 +-48 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-1 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +20 +-46 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +87 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +108 +98 +91 +15 +-52 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +87 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +107 +96 +89 +14 +-53 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +83 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +110 +100 +91 +15 +-51 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +79 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +107 +98 +90 +15 +-52 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +85 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +89 +16 +-49 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +55 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +40 +-29 +-89 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +9 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +112 +103 +94 +86 +81 +75 +69 +63 +56 +49 +47 +46 +42 +-28 +-90 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-38 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +79 +6 +-60 +-117 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +82 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +91 +17 +-49 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +56 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +41 +-28 +-88 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +1 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +20 +-47 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-4 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +111 +101 +92 +83 +77 +71 +66 +61 +55 +51 +45 +41 +40 +-29 +-91 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-30 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +75 +2 +-63 +-119 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +91 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +114 +105 +97 +93 +17 +-49 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +74 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +110 +102 +94 +18 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +81 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +86 +13 +-52 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +52 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +111 +101 +94 +82 +70 +62 +60 +57 +54 +53 +49 +-22 +-84 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-29 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +79 +6 +-59 +-116 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-6 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +17 +-49 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +84 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +112 +101 +92 +16 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-15 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +86 +12 +-53 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +88 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +107 +100 +95 +18 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +87 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +91 +18 +-48 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +52 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +108 +31 +-36 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-1 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +100 +24 +-43 +-102 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-4 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +110 +99 +90 +81 +74 +70 +67 +61 +57 +48 +45 +43 +42 +-28 +-90 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +58 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +89 +15 +-50 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +55 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +108 +101 +93 +85 +79 +71 +64 +57 +50 +46 +44 +-27 +-88 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +84 +10 +-56 +-114 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +81 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +115 +106 +98 +21 +-46 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +81 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +89 +16 +-50 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +58 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +41 +-28 +-90 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-1 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +113 +106 +101 +91 +83 +73 +62 +55 +53 +50 +46 +42 +39 +-31 +-92 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +78 +5 +-60 +-117 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +89 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +115 +101 +92 +16 +-51 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +88 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +107 +93 +83 +8 +-58 +-116 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-8 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +15 +-51 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +88 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +18 +-48 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +53 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +108 +94 +86 +80 +75 +69 +64 +60 +58 +54 +49 +-22 +-84 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +68 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +118 +110 +100 +91 +15 +-51 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-14 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +87 +13 +-53 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +83 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +111 +99 +90 +15 +-52 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +85 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +85 +12 +-52 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +53 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +40 +-29 +-89 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +4 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +114 +102 +97 +89 +78 +67 +57 +51 +48 +46 +46 +46 +43 +-27 +-89 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-29 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +78 +5 +-61 +-118 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +83 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +109 +100 +93 +17 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +85 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +117 +109 +100 +24 +-44 +-104 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +83 +9 +-56 +-114 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +92 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +18 +-48 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +49 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +42 +-28 +-89 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +4 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +101 +25 +-43 +-102 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-12 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +110 +99 +89 +81 +74 +69 +63 +58 +53 +51 +47 +41 +37 +-33 +-94 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-30 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +81 +7 +-58 +-116 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +86 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +17 +-49 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +55 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +110 +102 +91 +82 +74 +68 +63 +61 +57 +54 +44 +-27 +-89 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +73 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +81 +9 +-56 +-113 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +56 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +40 +-30 +-91 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +7 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +15 +-51 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-4 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +97 +21 +-46 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-6 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +110 +95 +86 +79 +75 +71 +68 +62 +59 +52 +45 +41 +40 +-30 +-92 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-36 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +80 +6 +-60 +-117 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-5 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +17 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-2 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +17 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-1 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +93 +18 +-49 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-2 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +17 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-9 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +94 +19 +-48 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +0 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +91 +17 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +0 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +93 +19 +-48 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-5 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +94 +19 +-48 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +89 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +114 +101 +86 +11 +-56 +-114 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +87 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +111 +103 +93 +17 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +77 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +108 +101 +94 +18 +-48 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +84 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +108 +100 +88 +13 +-54 +-113 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +86 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +89 +16 +-49 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +53 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +41 +-28 +-89 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +2 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +111 +95 +86 +79 +74 +71 +69 +64 +57 +51 +45 +43 +40 +-30 +-92 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-29 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +75 +2 +-63 +-120 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +89 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +19 +-47 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +55 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +114 +37 +-32 +-92 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +7 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +97 +21 +-45 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-4 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +106 +97 +92 +87 +81 +71 +65 +59 +53 +50 +48 +43 +38 +-32 +-93 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-29 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +79 +6 +-60 +-117 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +86 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +111 +101 +93 +17 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +84 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +114 +105 +97 +21 +-47 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +76 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +17 +-49 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +56 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +115 +108 +102 +95 +88 +80 +74 +66 +62 +56 +51 +45 +-26 +-88 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-31 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +82 +8 +-57 +-115 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-11 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +88 +13 +-53 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +91 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +113 +101 +88 +13 +-54 +-113 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-9 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +86 +12 +-55 +-113 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +84 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +104 +96 +20 +-47 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +75 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +91 +17 +-49 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +52 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +112 +35 +-33 +-94 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +1 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +20 +-47 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +1 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +112 +100 +93 +84 +78 +69 +63 +57 +52 +50 +47 +42 +37 +-32 +-94 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +70 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +86 +13 +-52 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +50 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +113 +104 +98 +90 +82 +76 +70 +63 +60 +55 +48 +41 +-30 +-91 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-24 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +85 +11 +-55 +-113 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +88 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +109 +101 +93 +18 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +81 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +91 +17 +-49 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +42 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +41 +-28 +-89 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +2 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +112 +103 +96 +86 +74 +67 +63 +59 +57 +55 +51 +42 +34 +-36 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-28 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +79 +6 +-60 +-117 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +85 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +109 +102 +97 +21 +-46 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +82 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +111 +103 +92 +16 +-51 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-15 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +15 +-52 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +85 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +91 +17 +-48 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +57 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +116 +106 +98 +90 +83 +75 +68 +63 +60 +56 +51 +47 +-24 +-86 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +66 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +115 +104 +97 +92 +16 +-51 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-12 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +15 +-51 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +87 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +112 +100 +89 +14 +-53 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +87 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +86 +14 +-51 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +60 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +41 +-28 +-89 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +7 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +109 +98 +92 +83 +79 +72 +67 +60 +54 +51 +48 +43 +38 +-32 +-93 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +83 +9 +-57 +-115 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +83 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +111 +102 +93 +17 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +85 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +112 +101 +93 +17 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-13 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +15 +-51 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +84 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +93 +20 +-46 +-104 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +55 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +40 +-29 +-90 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +4 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +97 +22 +-45 +-104 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +2 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +112 +102 +93 +85 +81 +75 +69 +59 +53 +48 +43 +39 +34 +-35 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +78 +5 +-60 +-117 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +91 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +91 +18 +-48 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +57 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +116 +105 +95 +90 +85 +81 +75 +67 +60 +53 +48 +43 +-27 +-89 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +74 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +85 +12 +-52 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +48 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +42 +-28 +-89 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-4 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +100 +25 +-43 +-102 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-1 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +20 +-46 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-5 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +108 +98 +89 +83 +77 +70 +64 +58 +54 +49 +47 +43 +39 +-30 +-92 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-34 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +80 +7 +-58 +-115 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-8 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +88 +14 +-53 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-2 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +17 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-2 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +20 +-47 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-3 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +21 +-46 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-4 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +17 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-2 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +91 +16 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-4 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +87 +13 +-53 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +0 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +93 +18 +-49 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +87 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +109 +103 +96 +20 +-47 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +81 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +111 +104 +95 +20 +-47 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +78 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +107 +99 +92 +17 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +86 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +114 +104 +95 +89 +14 +-53 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +83 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +16 +-49 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +56 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +114 +36 +-33 +-93 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +7 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +110 +101 +94 +88 +82 +74 +65 +59 +55 +52 +48 +44 +40 +-30 +-91 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +82 +9 +-57 +-115 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +88 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +91 +18 +-48 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +55 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +114 +37 +-32 +-93 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +2 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +96 +21 +-46 +-104 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +0 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +113 +103 +91 +78 +70 +66 +62 +60 +57 +53 +46 +37 +33 +-36 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-31 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +83 +9 +-56 +-114 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +87 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +103 +96 +20 +-47 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +87 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +113 +103 +97 +21 +-46 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +73 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +87 +14 +-51 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +56 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +114 +107 +99 +92 +85 +79 +73 +66 +63 +57 +48 +43 +-27 +-89 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-24 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +79 +6 +-59 +-116 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-9 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +17 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +96 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +112 +105 +97 +21 +-46 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-13 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +86 +12 +-54 +-113 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +93 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +101 +91 +15 +-51 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +81 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +84 +11 +-54 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +56 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +115 +38 +-31 +-92 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +3 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +97 +22 +-45 +-104 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +0 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +104 +94 +86 +80 +76 +73 +67 +62 +58 +52 +48 +44 +38 +-32 +-93 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +73 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +88 +14 +-51 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +48 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +108 +98 +93 +89 +83 +72 +66 +59 +49 +42 +39 +-31 +-93 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +83 +9 +-57 +-114 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +86 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +114 +105 +98 +93 +18 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +81 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +18 +-48 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +52 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +39 +-30 +-91 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +5 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +113 +103 +96 +87 +84 +74 +64 +52 +45 +41 +39 +38 +38 +-32 +-93 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-27 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +80 +7 +-59 +-117 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +90 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +114 +103 +95 +20 +-47 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +74 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +112 +102 +95 +19 +-48 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-15 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +14 +-52 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +89 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +89 +16 +-49 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +52 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +110 +104 +95 +87 +76 +69 +65 +62 +57 +48 +46 +-24 +-87 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +72 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +103 +96 +20 +-47 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-15 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +91 +16 +-51 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +92 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +114 +105 +98 +22 +-45 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +79 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +89 +15 +-50 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +47 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +39 +-30 +-90 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +4 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +115 +103 +94 +87 +80 +73 +70 +62 +54 +43 +38 +34 +33 +-36 +-98 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-34 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +83 +10 +-56 +-114 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +87 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +113 +103 +95 +89 +14 +-53 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +87 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +109 +103 +95 +19 +-48 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-10 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +82 +8 +-58 +-116 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +93 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +18 +-47 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +49 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +40 +-29 +-90 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-1 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +96 +20 +-47 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-1 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +108 +98 +92 +86 +79 +71 +65 +59 +56 +53 +48 +40 +31 +-39 +-99 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-28 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +81 +7 +-58 +-116 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +85 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +89 +16 +-49 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +53 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +107 +97 +91 +84 +80 +74 +66 +58 +53 +49 +44 +-27 +-89 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +73 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +87 +13 +-52 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +48 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +115 +38 +-31 +-91 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +2 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +96 +22 +-45 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-1 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +17 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-1 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +112 +96 +86 +80 +75 +72 +70 +64 +59 +49 +43 +39 +38 +-32 +-93 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-31 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +79 +5 +-60 +-118 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-9 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +17 +-50 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +0 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +89 +15 +-51 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-1 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +89 +15 +-52 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-9 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +15 +-51 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +3 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +15 +-51 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +2 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +91 +16 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-8 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +94 +19 +-47 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +0 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +93 +18 +-48 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +89 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +115 +106 +93 +17 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +83 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +110 +101 +93 +17 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +85 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +110 +101 +93 +18 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +89 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +113 +105 +98 +93 +17 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +79 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +85 +13 +-52 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +55 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +113 +36 +-33 +-93 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +5 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +116 +103 +92 +83 +79 +73 +68 +59 +53 +50 +44 +40 +37 +-33 +-94 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-31 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +82 +9 +-57 +-115 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +88 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +91 +17 +-48 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +61 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +113 +37 +-32 +-92 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +0 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +100 +25 +-43 +-103 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-11 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +114 +104 +97 +92 +88 +82 +74 +69 +62 +56 +53 +52 +44 +35 +-35 +-96 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-34 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +83 +9 +-57 +-115 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +87 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +111 +98 +87 +12 +-54 +-113 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +78 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +115 +101 +94 +18 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +84 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +16 +-49 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +54 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +110 +97 +90 +84 +80 +78 +74 +70 +64 +59 +54 +48 +-23 +-86 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +79 +6 +-60 +-117 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-5 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +88 +13 +-53 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +91 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +112 +103 +94 +19 +-48 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-14 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +15 +-51 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +87 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +110 +99 +91 +16 +-51 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +85 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +17 +-49 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +52 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +110 +33 +-35 +-96 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +7 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +100 +25 +-42 +-101 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-11 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +112 +96 +87 +80 +75 +71 +66 +60 +55 +46 +40 +38 +35 +-34 +-95 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +65 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +86 +12 +-53 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +51 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +116 +108 +99 +92 +85 +75 +69 +63 +56 +54 +53 +49 +-21 +-83 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +77 +4 +-61 +-119 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +88 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +114 +101 +87 +12 +-55 +-113 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +86 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +18 +-48 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +49 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +43 +-27 +-88 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-3 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +113 +102 +93 +85 +78 +73 +68 +62 +57 +52 +44 +34 +28 +-40 +-101 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-31 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +83 +9 +-57 +-115 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +82 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +112 +104 +95 +20 +-47 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +87 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +107 +99 +93 +17 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-13 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +82 +8 +-58 +-116 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +95 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +18 +-48 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +57 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +107 +97 +90 +84 +77 +70 +64 +61 +56 +51 +45 +-26 +-88 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +70 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +113 +102 +94 +18 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-15 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +86 +12 +-55 +-113 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +88 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +116 +110 +103 +94 +19 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +84 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +89 +16 +-50 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +51 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +116 +38 +-31 +-91 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-1 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +113 +99 +86 +76 +71 +67 +64 +63 +59 +56 +48 +39 +34 +-36 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-34 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +82 +8 +-57 +-115 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +86 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +116 +107 +98 +22 +-45 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +83 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +116 +109 +102 +96 +20 +-46 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-19 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +86 +12 +-54 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +84 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +89 +16 +-49 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +58 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +40 +-29 +-90 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +4 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +94 +19 +-48 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +1 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +109 +99 +92 +83 +76 +68 +65 +63 +55 +51 +46 +42 +38 +-32 +-93 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +79 +5 +-61 +-118 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +86 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +89 +16 +-50 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +57 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +115 +108 +101 +95 +84 +77 +69 +65 +60 +58 +51 +43 +-27 +-89 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +73 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +87 +14 +-51 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +54 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +114 +37 +-32 +-92 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +3 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +96 +21 +-46 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-5 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +17 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-5 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +111 +96 +83 +73 +67 +63 +62 +60 +58 +55 +49 +45 +41 +-29 +-91 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-26 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +82 +8 +-58 +-115 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-11 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +16 +-51 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +0 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +94 +19 +-48 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-4 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +17 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-2 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +89 +14 +-52 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-6 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +17 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-2 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +15 +-51 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-3 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +16 +-50 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-4 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +93 +19 +-48 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +88 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +111 +100 +94 +18 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +84 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +109 +100 +92 +16 +-51 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +88 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +115 +110 +103 +91 +15 +-51 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +87 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +111 +101 +95 +20 +-47 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +83 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +16 +-49 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +58 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +40 +-29 +-89 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +6 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +108 +101 +93 +86 +76 +68 +66 +60 +57 +54 +51 +46 +37 +-33 +-95 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-35 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +83 +9 +-57 +-115 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +89 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +87 +14 +-51 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +56 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +40 +-28 +-89 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +5 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +89 +14 +-52 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-3 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +110 +102 +93 +86 +79 +70 +67 +63 +60 +52 +42 +37 +35 +-35 +-96 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-29 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +81 +7 +-59 +-116 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +91 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +104 +94 +87 +12 +-54 +-113 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +84 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +113 +103 +95 +20 +-48 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +83 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +87 +15 +-51 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +48 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +111 +99 +91 +83 +77 +70 +64 +58 +52 +50 +45 +-25 +-87 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-31 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +73 +0 +-65 +-121 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +0 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +84 +10 +-56 +-114 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +91 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +114 +105 +95 +19 +-48 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-14 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +16 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +86 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +110 +104 +96 +20 +-47 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +85 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +88 +15 +-50 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +55 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +41 +-28 +-89 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +5 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +97 +21 +-46 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +0 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +115 +105 +96 +92 +85 +78 +72 +67 +62 +57 +51 +45 +40 +38 +-32 +-93 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +70 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +87 +14 +-51 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +52 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +109 +100 +92 +85 +79 +71 +63 +61 +55 +50 +46 +-25 +-87 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +81 +8 +-58 +-115 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +88 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +111 +104 +97 +22 +-45 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +75 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +89 +16 +-50 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +54 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +40 +-30 +-90 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +4 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +110 +102 +96 +88 +78 +67 +60 +55 +52 +50 +47 +43 +40 +-30 +-92 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-29 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +72 +0 +-65 +-122 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +93 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +111 +102 +93 +18 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +81 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +115 +107 +101 +94 +18 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-13 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +15 +-51 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +92 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +91 +18 +-47 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +50 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +113 +106 +100 +94 +86 +81 +75 +70 +64 +58 +52 +47 +-23 +-86 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +74 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +113 +106 +100 +93 +18 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-15 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +88 +14 +-52 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +81 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +113 +99 +89 +14 +-53 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +81 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +87 +14 +-51 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +56 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +39 +-30 +-90 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +7 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +113 +101 +94 +86 +80 +75 +69 +63 +59 +53 +47 +46 +42 +-28 +-90 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +79 +5 +-60 +-117 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +85 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +111 +102 +97 +21 +-46 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +82 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +115 +108 +103 +95 +20 +-47 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-12 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +84 +10 +-56 +-114 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +86 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +18 +-47 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +45 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +40 +-29 +-90 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +6 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +20 +-47 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-6 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +115 +108 +102 +97 +89 +84 +74 +63 +55 +52 +49 +47 +46 +42 +-27 +-89 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-37 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +78 +4 +-61 +-118 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +88 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +87 +14 +-51 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +60 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +107 +96 +88 +81 +76 +67 +63 +56 +52 +45 +40 +-30 +-92 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +64 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +86 +13 +-52 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +55 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +116 +39 +-31 +-91 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +3 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +20 +-47 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +2 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +17 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-7 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +113 +101 +92 +85 +79 +70 +65 +59 +54 +49 +45 +42 +39 +-31 +-92 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-29 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +79 +5 +-60 +-118 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-12 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +17 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-7 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +17 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-4 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +17 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-5 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +93 +18 +-48 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-1 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +87 +13 +-54 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-5 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +99 +23 +-44 +-103 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-2 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +86 +11 +-55 +-113 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +2 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +17 +-50 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +81 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +111 +103 +94 +18 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +85 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +105 +94 +87 +12 +-54 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +83 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +110 +101 +95 +19 +-47 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +79 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +111 +105 +98 +22 +-45 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +80 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +89 +16 +-50 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +48 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +41 +-29 +-89 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +0 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +110 +99 +90 +84 +80 +77 +72 +62 +58 +51 +46 +42 +41 +-29 +-91 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-28 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +77 +4 +-61 +-118 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +94 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +87 +14 +-51 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +58 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +114 +37 +-33 +-93 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +7 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +18 +-49 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-10 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +116 +101 +94 +90 +85 +80 +75 +70 +64 +56 +46 +40 +36 +35 +-35 +-96 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-29 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +79 +6 +-59 +-117 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +86 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +111 +102 +93 +18 +-49 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +87 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +110 +100 +93 +17 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +83 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +87 +15 +-50 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +46 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +110 +100 +92 +87 +81 +74 +67 +61 +55 +48 +43 +-28 +-90 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-30 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +80 +6 +-59 +-117 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-12 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +89 +14 +-52 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +91 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +115 +106 +98 +22 +-45 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-15 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +87 +13 +-53 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +93 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +114 +105 +96 +20 +-47 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +84 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +16 +-49 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +51 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +39 +-30 +-91 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +5 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +93 +19 +-48 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-8 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +114 +100 +86 +78 +73 +68 +67 +62 +59 +53 +49 +43 +38 +-32 +-93 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +65 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +86 +13 +-52 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +55 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +114 +105 +96 +87 +82 +74 +71 +64 +57 +51 +45 +-25 +-87 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-30 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +78 +5 +-61 +-118 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +82 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +104 +97 +21 +-46 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +81 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +88 +14 +-51 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +56 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +41 +-28 +-89 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +0 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +112 +101 +91 +82 +77 +73 +67 +63 +55 +49 +44 +44 +40 +-30 +-92 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-27 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +80 +6 +-59 +-117 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +91 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +109 +100 +93 +18 +-49 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +81 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +116 +107 +97 +21 +-47 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +86 +11 +-55 +-113 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +87 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +17 +-48 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +53 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +110 +101 +95 +86 +79 +75 +69 +61 +55 +50 +46 +-25 +-87 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +75 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +108 +95 +81 +7 +-59 +-117 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-11 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +89 +15 +-52 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +89 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +111 +101 +92 +16 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +82 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +87 +14 +-51 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +52 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +41 +-28 +-89 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-1 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +106 +97 +91 +86 +79 +76 +72 +64 +56 +51 +45 +41 +40 +-30 +-91 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-29 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +82 +9 +-57 +-115 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +85 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +110 +100 +96 +20 +-47 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +81 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +114 +102 +94 +18 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-23 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +85 +11 +-55 +-113 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +89 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +91 +18 +-48 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +52 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +40 +-30 +-90 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +9 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +20 +-47 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-2 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +109 +98 +93 +87 +81 +73 +67 +57 +50 +46 +44 +40 +37 +-32 +-94 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +73 +0 +-65 +-122 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +94 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +89 +16 +-49 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +55 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +107 +98 +93 +86 +80 +75 +64 +58 +52 +49 +45 +-26 +-88 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +77 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +88 +15 +-50 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +52 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +40 +-29 +-90 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +5 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +93 +18 +-48 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-2 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +15 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-6 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +109 +101 +93 +86 +80 +74 +68 +60 +53 +48 +44 +39 +35 +-34 +-96 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +84 +10 +-56 +-114 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-14 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +91 +17 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-2 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +96 +21 +-46 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-4 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +91 +16 +-50 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +0 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +17 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-2 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +93 +18 +-49 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-7 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +91 +17 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-9 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +96 +21 +-46 +-104 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +4 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +91 +16 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +94 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +111 +102 +92 +16 +-51 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +85 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +112 +104 +95 +19 +-48 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +81 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +113 +103 +95 +20 +-48 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +85 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +112 +105 +96 +20 +-47 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +79 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +89 +15 +-50 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +52 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +116 +39 +-30 +-91 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +9 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +108 +100 +96 +90 +80 +69 +62 +57 +55 +53 +50 +43 +41 +-29 +-91 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-30 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +70 +-2 +-67 +-123 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +94 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +91 +17 +-48 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +54 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +115 +37 +-31 +-92 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-3 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +97 +22 +-44 +-103 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-1 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +109 +99 +91 +85 +78 +72 +66 +60 +56 +51 +47 +41 +37 +-33 +-94 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +78 +5 +-60 +-117 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +89 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +111 +101 +93 +17 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +77 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +113 +103 +96 +20 +-48 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +84 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +87 +14 +-51 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +58 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +116 +107 +97 +91 +84 +78 +70 +64 +58 +57 +50 +44 +-27 +-89 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-22 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +79 +6 +-60 +-118 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-3 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +89 +15 +-52 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +92 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +110 +102 +94 +18 +-48 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +84 +11 +-55 +-113 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +89 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +104 +95 +19 +-48 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +85 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +91 +17 +-48 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +54 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +116 +38 +-31 +-91 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +4 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +100 +24 +-43 +-103 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-1 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +111 +100 +91 +83 +76 +70 +64 +59 +54 +48 +44 +39 +37 +-32 +-93 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +67 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +87 +13 +-52 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +56 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +107 +98 +91 +84 +76 +70 +63 +57 +53 +48 +43 +-27 +-89 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-27 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +77 +4 +-61 +-119 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +91 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +118 +111 +104 +98 +22 +-45 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +80 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +16 +-49 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +52 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +116 +39 +-30 +-91 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +1 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +113 +101 +95 +87 +79 +72 +69 +63 +58 +50 +40 +33 +30 +-39 +-99 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +85 +11 +-54 +-113 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +78 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +115 +103 +93 +16 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +81 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +111 +102 +89 +13 +-53 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-6 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +91 +16 +-51 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +89 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +89 +16 +-49 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +56 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +115 +105 +97 +88 +80 +72 +66 +60 +59 +53 +49 +-22 +-85 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +65 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +108 +96 +87 +12 +-54 +-113 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-15 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +84 +10 +-56 +-114 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +96 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +110 +101 +92 +16 +-51 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +84 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +89 +16 +-50 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +49 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +39 +-30 +-90 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +9 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +106 +96 +91 +87 +81 +75 +66 +60 +56 +54 +49 +45 +36 +-34 +-95 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +75 +1 +-64 +-121 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +80 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +114 +104 +97 +21 +-47 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +79 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +116 +110 +104 +97 +21 +-46 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-14 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +83 +9 +-56 +-114 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +95 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +91 +18 +-48 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +52 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +114 +37 +-32 +-93 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +0 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +96 +21 +-46 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-4 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +109 +101 +93 +86 +81 +73 +68 +63 +57 +50 +44 +42 +39 +-31 +-93 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +79 +5 +-60 +-118 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +91 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +91 +17 +-48 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +50 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +116 +105 +96 +91 +86 +77 +71 +61 +54 +51 +48 +47 +-24 +-86 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +68 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +85 +12 +-53 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +56 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +113 +35 +-33 +-94 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +3 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +100 +24 +-44 +-103 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-3 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +89 +14 +-52 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +1 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +112 +102 +93 +85 +77 +73 +66 +61 +55 +49 +44 +40 +36 +-34 +-96 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-28 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +85 +11 +-55 +-113 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-7 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +17 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-7 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +89 +15 +-51 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-1 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +15 +-51 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-10 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +96 +21 +-46 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-9 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +91 +16 +-51 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +2 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +17 +-50 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +7 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +86 +11 +-54 +-113 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +1 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +89 +14 +-52 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +91 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +107 +98 +92 +17 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +75 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +113 +103 +93 +18 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +83 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +110 +103 +95 +90 +15 +-52 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +91 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +109 +100 +91 +15 +-51 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +85 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +89 +15 +-50 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +53 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +39 +-30 +-91 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +7 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +115 +105 +93 +81 +72 +68 +66 +63 +62 +57 +52 +46 +42 +-29 +-90 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-31 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +71 +-1 +-66 +-123 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +93 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +93 +19 +-47 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +56 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +42 +-27 +-88 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +7 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +89 +15 +-51 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +2 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +112 +102 +95 +90 +83 +73 +63 +51 +48 +44 +43 +41 +39 +-31 +-92 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-37 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +82 +8 +-58 +-115 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +91 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +115 +106 +98 +93 +17 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +80 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +113 +103 +97 +21 +-46 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +83 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +87 +15 +-51 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +57 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +115 +108 +103 +93 +83 +77 +73 +66 +61 +56 +51 +46 +-25 +-87 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-29 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +79 +5 +-60 +-117 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +0 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +91 +16 +-50 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +93 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +115 +104 +95 +19 +-48 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-19 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +87 +12 +-54 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +91 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +108 +99 +92 +16 +-51 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +79 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +89 +15 +-50 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +54 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +40 +-30 +-91 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +3 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +102 +26 +-41 +-101 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-10 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +111 +102 +94 +89 +87 +81 +77 +74 +69 +61 +55 +46 +39 +37 +-33 +-94 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +73 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +88 +14 +-51 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +43 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +110 +101 +92 +83 +77 +70 +63 +58 +53 +48 +43 +-28 +-90 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-24 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +84 +10 +-56 +-114 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +80 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +108 +98 +92 +17 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +70 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +89 +15 +-50 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +54 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +41 +-28 +-89 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +9 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +107 +98 +94 +87 +80 +75 +67 +61 +56 +51 +49 +43 +39 +-31 +-92 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-37 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +80 +6 +-60 +-118 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +77 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +109 +102 +94 +18 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +84 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +112 +104 +97 +21 +-46 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-14 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +88 +13 +-53 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +89 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +18 +-48 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +55 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +106 +93 +85 +79 +76 +70 +67 +62 +54 +45 +40 +-30 +-91 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +68 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +116 +105 +99 +95 +19 +-48 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +83 +9 +-57 +-115 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +93 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +107 +101 +94 +18 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +86 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +86 +14 +-51 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +50 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +41 +-28 +-89 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-3 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +112 +102 +90 +83 +76 +69 +66 +61 +59 +54 +46 +38 +28 +-41 +-101 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-25 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +85 +11 +-54 +-113 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +84 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +109 +99 +90 +15 +-52 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +80 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +110 +96 +87 +12 +-55 +-113 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-11 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +89 +14 +-52 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +94 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +17 +-49 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +55 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +40 +-29 +-90 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +9 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +88 +13 +-53 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-5 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +113 +101 +91 +83 +77 +73 +67 +61 +57 +50 +45 +43 +38 +-32 +-93 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-34 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +77 +4 +-62 +-119 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +89 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +93 +18 +-47 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +57 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +116 +101 +93 +86 +82 +76 +71 +68 +63 +57 +53 +46 +-25 +-87 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +71 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +82 +9 +-55 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +62 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +112 +35 +-34 +-94 +-128 +-128 +-128 diff --git a/traces/lf_gprox_36_30_14489.pm3 b/traces/lf_GProx_36_30_14489.pm3 similarity index 80% rename from traces/lf_gprox_36_30_14489.pm3 rename to traces/lf_GProx_36_30_14489.pm3 index 89a75e390..9ae408e32 100644 --- a/traces/lf_gprox_36_30_14489.pm3 +++ b/traces/lf_GProx_36_30_14489.pm3 @@ -1,39999 +1,39999 @@ --22 --25 --22 --24 --22 --26 --25 --19 --17 --12 -123 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -118 -111 -103 -96 -91 -14 --53 --112 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -15 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -119 -109 -103 -95 -90 -81 -6 --61 --119 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -12 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -110 -102 -90 -84 -77 -71 -65 -62 -60 -56 -48 -45 -38 -36 -32 -31 -29 -26 -26 -20 -19 -20 -17 -17 -16 -15 -18 -16 -17 -12 -11 -8 -7 -6 -5 -4 -4 --63 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -6 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -112 -106 -98 -86 -80 -5 --61 --120 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -20 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -113 -103 -98 -90 -85 -9 --57 --116 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -21 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -108 -100 -93 -86 -80 -5 --61 --120 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -17 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -117 -113 -105 -100 -92 -86 -10 --57 --116 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -16 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -118 -111 -104 -97 -89 -83 -8 --59 --118 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --112 --103 --100 --91 --88 --80 --78 --70 --64 --56 --50 --47 --43 --41 --37 --35 --30 --31 --28 --29 --27 --27 --22 --22 --17 --19 --17 --19 --18 --21 --18 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -124 -117 -107 -100 -93 -85 -80 -75 -69 -65 -63 -61 -58 -48 -46 -38 -36 -31 -30 -26 -24 -24 -18 -16 -18 -17 -17 -14 -13 -13 -8 -7 -10 -6 -7 -5 -5 --62 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --112 --103 --98 --90 --86 --79 --77 --70 --64 --61 --55 --54 --48 --49 --43 --40 --37 --33 --32 --31 --27 --27 --26 --20 --19 --16 --16 --15 --17 --15 -117 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -124 -117 -105 -98 -89 -13 --54 --113 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -18 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -112 -103 -97 -90 -86 -76 -72 -65 -61 -51 -49 -44 -41 -38 -35 -33 -30 -27 -26 -21 -20 -21 -17 -17 -15 -15 -12 -11 -11 -8 -7 -7 -6 -6 -10 -11 -10 --57 --116 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --116 --106 --98 --94 --88 --84 --76 --72 --65 --63 --58 --58 --52 --51 --48 --44 --41 --42 --37 --36 --33 --31 --30 --24 --19 --18 --16 --15 --12 --14 --13 -119 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -116 -107 -100 -94 -17 --50 --110 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -18 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -110 -103 -96 -90 -85 -84 -8 --58 --117 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -16 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -108 -102 -92 -86 -84 -80 -5 --61 --120 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -17 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -118 -105 -98 -87 -82 -75 -1 --65 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -16 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -119 -111 -104 -96 -88 -82 -70 -65 -58 -54 -50 -46 -44 -38 -36 -36 -30 -29 -26 -25 -24 -22 -21 -17 -15 -14 -14 -12 -12 -11 -10 -9 -12 -14 -12 -8 -7 -6 --61 --120 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --120 --117 --106 --100 --91 --86 --82 --76 --73 --66 --60 --57 --54 --51 --48 --42 --38 --37 --36 --36 --35 --35 --31 --32 --29 --30 --26 --24 --22 --19 --22 --18 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -118 -109 -99 -94 -17 --50 --110 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -18 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -118 -112 -106 -98 -94 -86 -11 --56 --115 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -14 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -115 -105 -98 -91 -84 -77 -66 -62 -54 -51 -49 -45 -42 -39 -38 -38 -31 -30 -24 -23 -21 -20 -19 -17 -16 -14 -13 -13 -9 -9 -9 -3 -2 -4 -3 -4 -4 --63 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --115 --106 --96 --91 --86 --82 --78 --73 --68 --64 --57 --55 --50 --49 --46 --44 --39 --36 --31 --31 --29 --29 --28 --28 --23 --22 --18 --20 --18 --20 --18 -112 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -120 -111 -105 -96 -90 -84 -77 -72 -68 -62 -58 -58 -53 -51 -43 -41 -36 -33 -30 -27 -26 -22 -20 -18 -15 -14 -14 -8 -6 -9 -9 -10 -5 -6 -2 -2 -5 --61 --120 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -3 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -115 -108 -96 -90 -80 -74 -0 --66 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -19 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -117 -110 -99 -93 -83 -78 -4 --62 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --120 --113 --105 --97 --89 --86 --79 --76 --69 --64 --57 --50 --50 --44 --45 --40 --41 --37 --34 --31 --33 --30 --29 --29 --24 --25 --21 --19 --17 --14 --14 --14 -121 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -124 -116 -109 -97 -92 -82 -75 -73 -70 -67 -58 -54 -49 -45 -43 -38 -36 -34 -32 -29 -30 -28 -26 -26 -25 -20 -18 -15 -14 -15 -13 -13 -8 -7 -3 -2 -1 --65 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -8 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -115 -107 -101 -90 -85 -75 -1 --65 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --117 --106 --98 --88 --86 --79 --74 --69 --62 --61 --57 --54 --52 --48 --45 --42 --36 --32 --35 --31 --34 --31 --32 --29 --27 --24 --22 --21 --18 --17 --18 --15 -116 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -118 -113 -104 -98 -91 -15 --52 --112 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -21 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -118 -109 -101 -94 -89 -85 -76 -71 -64 -62 -57 -55 -50 -45 -40 -37 -31 -30 -29 -27 -26 -20 -18 -16 -15 -14 -12 -12 -14 -13 -12 -13 -12 -7 -6 -4 -3 --2 --68 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --117 --109 --101 --93 --90 --83 --74 --70 --64 --61 --56 --52 --47 --48 --44 --45 --40 --38 --37 --33 --34 --29 --30 --26 --23 --25 --21 --18 --20 --16 --16 -117 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -114 -105 -100 -90 -14 --53 --112 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -14 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -120 -113 -104 -97 -86 -79 -5 --62 --120 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -19 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -124 -117 -105 -97 -94 -85 -81 -6 --60 --119 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -13 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -119 -110 -102 -96 -87 -81 -6 --60 --119 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -20 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -113 -106 -97 -91 -86 -77 -71 -70 -65 -62 -55 -51 -46 -43 -36 -34 -28 -26 -28 -26 -26 -22 -21 -23 -18 -18 -13 -18 -16 -16 -12 -12 -12 -11 -8 -7 -5 -6 --61 --120 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --117 --108 --98 --94 --87 --84 --78 --74 --69 --65 --59 --54 --48 --47 --42 --42 --39 --38 --33 --32 --27 --28 --26 --27 --24 --25 --23 --26 --23 --23 --23 -114 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -112 -105 -104 -98 -90 -85 -80 -70 -65 -56 -53 -48 -45 -42 -38 -36 -31 -28 -27 -24 -22 -26 -25 -25 -24 -21 -17 -15 -12 -13 -12 -8 -6 -4 -5 -5 --62 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -7 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -118 -109 -102 -96 -85 -81 -6 --61 --119 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --118 --109 --102 --92 --83 --79 --75 --70 --67 --63 --61 --56 --52 --48 --43 --44 --40 --38 --35 --31 --32 --24 --21 --18 --15 --13 --17 --16 --19 --18 --18 --16 -115 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -116 -108 -99 -94 -86 -82 -76 -68 -63 -59 -49 -46 -39 -36 -36 -34 -33 -30 -28 -27 -23 -22 -21 -14 -12 -15 -12 -17 -17 -16 -17 -15 -12 -10 -7 -7 --60 --119 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -5 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -119 -111 -104 -95 -89 -83 -7 --59 --118 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -15 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -119 -110 -103 -92 -86 -76 -2 --64 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -14 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -112 -105 -93 -89 -79 -74 -0 --66 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -13 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -117 -110 -103 -96 -90 -82 -7 --59 --118 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --118 --108 --101 --94 --87 --79 --73 --71 --65 --62 --57 --54 --49 --43 --41 --39 --37 --33 --32 --26 --24 --25 --22 --19 --17 --18 --18 --18 --14 --14 --18 --17 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -114 -108 -100 -95 -85 -79 -70 -64 -59 -55 -47 -45 -38 -35 -36 -33 -32 -30 -28 -27 -21 -20 -15 -13 -16 -13 -13 -12 -12 -9 -8 -8 -6 -6 -6 -4 --62 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --115 --107 --100 --91 --83 --77 --74 --71 --67 --61 --58 --52 --48 --49 --45 --43 --39 --35 --33 --32 --30 --30 --27 --27 --23 --19 --19 --18 --17 --18 --17 -117 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -114 -106 -97 -91 -15 --52 --112 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -14 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -120 -111 -104 -92 -85 -78 -74 -67 -62 -58 -49 -46 -46 -41 -39 -36 -34 -28 -27 -26 -27 -26 -23 -24 -23 -20 -17 -14 -11 -10 -10 -8 -7 -4 -4 -6 -5 -5 --62 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --117 --110 --101 --93 --90 --81 --77 --71 --66 --59 --52 --50 --47 --46 --44 --40 --37 --37 --34 --36 --32 --29 --28 --26 --27 --23 --25 --23 --17 --17 --14 -121 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -114 -106 -100 -92 -16 --52 --111 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -18 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -120 -110 -104 -97 -84 -79 -4 --62 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -17 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -111 -103 -97 -89 -82 -7 --59 --118 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -17 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -117 -110 -98 -93 -82 -77 -3 --63 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --120 -22 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -115 -106 -99 -88 -82 -75 -69 -66 -57 -56 -51 -48 -46 -39 -37 -34 -32 -31 -27 -26 -23 -21 -20 -15 -14 -15 -15 -15 -9 -10 -8 -8 -8 -7 -7 -7 -2 -2 --64 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --120 --115 --105 --99 --91 --86 --79 --73 --66 --64 --59 --57 --52 --52 --47 --42 --42 --36 --36 --33 --28 --23 --19 --20 --19 --20 --19 --19 --16 --15 --11 -120 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -114 -106 -100 -92 -86 -79 -74 -70 -63 -58 -54 -49 -46 -43 -36 -35 -36 -33 -33 -28 -26 -22 -21 -23 -21 -20 -19 -18 -14 -12 -10 -10 -10 -8 -6 -5 --62 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --119 --115 --104 --100 --91 --86 --81 --73 --70 --63 --62 --55 --50 --46 --41 --42 --37 --38 --33 --28 --27 --23 --19 --18 --18 --17 --16 --13 --11 --13 --12 -120 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -124 -117 -108 -96 -90 -14 --53 --113 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --119 -20 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -114 -107 -100 -94 -86 -80 -75 -66 -62 -60 -54 -51 -48 -44 -42 -41 -38 -37 -35 -32 -28 -26 -18 -17 -14 -13 -13 -10 -9 -10 -5 -10 -11 -8 -10 -9 -6 -6 --61 --120 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --118 --111 --99 --92 --83 --80 --73 --71 --65 --63 --58 --56 --49 --44 --40 --36 --32 --33 --30 --31 --29 --29 --28 --27 --24 --22 --18 --19 --17 --18 --17 -116 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -124 -119 -112 -104 -98 -92 -84 -75 -71 -67 -59 -53 -47 -45 -41 -37 -34 -27 -26 -23 -22 -19 -17 -16 -13 -13 -12 -10 -10 -8 -7 -8 -8 -10 -10 -9 -10 --58 --117 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -12 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -119 -111 -105 -94 -88 -77 -3 --63 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -17 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -116 -110 -104 -96 -88 -80 -5 --61 --120 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --120 --108 --101 --92 --85 --82 --78 --74 --71 --67 --62 --57 --50 --48 --45 --44 --42 --40 --36 --34 --29 --29 --28 --27 --26 --26 --21 --20 --17 --19 --17 --18 --17 -117 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -109 -102 -91 -85 -10 --57 --116 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -14 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -117 -110 -102 -96 -84 -80 -5 --61 --120 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --120 -20 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -112 -103 -95 -88 -82 -77 -67 -63 -58 -54 -52 -48 -45 -47 -45 -44 -42 -38 -32 -29 -26 -25 -25 -22 -14 -13 -7 -6 -5 -5 -5 -4 -4 -8 -9 -9 -12 -11 --57 --116 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --118 --108 --104 --96 --92 --86 --77 --71 --64 --60 --54 --50 --44 --42 --40 --36 --32 --32 --31 --30 --30 --28 --26 --26 --21 --22 --20 --20 --17 --16 --13 -118 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -113 -107 -97 -95 -90 -83 -78 -74 -66 -62 -59 -55 -47 -43 -38 -35 -27 -26 -22 -20 -20 -14 -12 -12 -16 -17 -12 -13 -9 -9 -7 -7 -12 -11 -11 -6 --61 --120 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -8 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -124 -115 -108 -99 -94 -86 -79 -4 --62 --120 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -15 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -119 -111 -103 -97 -86 -81 -6 --60 --119 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -21 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -111 -105 -98 -88 -82 -7 --59 --118 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -22 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -113 -106 -98 -93 -82 -77 -3 --63 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --119 --109 --104 --94 --88 --80 --73 --71 --64 --61 --56 --51 --49 --44 --41 --37 --39 --35 --37 --35 --29 --27 --24 --23 --18 --17 --13 --15 --14 --16 --15 --14 -121 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -116 -109 -101 -94 -18 --50 --110 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -14 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -119 -110 -102 -91 -85 -78 -3 --63 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --120 -19 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -112 -105 -98 -91 -82 -7 --59 --118 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -17 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -118 -110 -102 -95 -89 -82 -77 -68 -64 -55 -52 -50 -46 -44 -45 -42 -40 -39 -36 -33 -32 -31 -28 -22 -19 -12 -10 -7 -7 -2 -0 -4 -4 -6 -2 -3 -5 -7 --60 --120 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --116 --110 --99 --93 --84 --82 --74 --72 --67 --64 --60 --56 --50 --51 --46 --47 --42 --39 --35 --31 --33 --30 --30 --27 --22 --22 --18 --20 --17 --16 --14 -117 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -114 -107 -95 -90 -80 -76 -67 -65 -61 -54 -52 -52 -51 -48 -44 -42 -40 -36 -33 -26 -24 -17 -17 -14 -13 -13 -8 -10 -12 -13 -13 -16 -14 -15 -13 -13 --55 --114 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -6 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -114 -107 -95 -89 -82 -77 -2 --64 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --120 -23 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -118 -110 -103 -98 -87 -81 -6 --60 --119 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -16 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -117 -111 -105 -95 -87 -80 -5 --61 --120 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --118 --109 --99 --90 --88 --79 --75 --67 --63 --58 --53 --51 --49 --47 --46 --43 --43 --39 --36 --32 --28 --27 --26 --25 --25 --23 --22 --19 --15 --17 --16 --15 -119 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -115 -102 -96 -86 -79 -77 -71 -67 -63 -60 -52 -48 -47 -43 -41 -38 -36 -31 -29 -27 -23 -22 -21 -15 -12 -14 -14 -14 -12 -11 -11 -9 -8 -6 -6 -5 --61 --120 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --120 --111 --108 --98 --92 --84 --75 --74 --67 --66 --61 --54 --50 --46 --43 --39 --40 --36 --37 --33 --28 --26 --23 --26 --24 --20 --18 --14 --15 --13 --15 -119 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -114 -106 -99 -87 -11 --55 --114 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -16 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -117 -109 -103 -98 -87 -82 -72 -68 -61 -57 -54 -49 -46 -44 -40 -38 -38 -36 -34 -33 -32 -26 -23 -19 -17 -13 -12 -11 -6 -6 -4 -5 -6 -5 -5 -4 -3 -4 --63 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --120 --109 --101 --98 --92 --88 --83 --78 --73 --69 --61 --56 --57 --52 --53 --48 --48 --44 --44 --39 --36 --32 --28 --29 --26 --27 --25 --19 --20 --17 --16 --14 -117 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -112 -104 -92 -86 -10 --57 --116 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --120 -24 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -118 -110 -103 -97 -84 -78 -68 -64 -58 -55 -49 -46 -44 -39 -37 -36 -32 -30 -32 -31 -30 -29 -26 -24 -21 -20 -18 -11 -10 -4 -4 -2 -2 -2 -4 -6 -1 -2 --64 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -11 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -115 -107 -98 -91 -84 -77 -2 --63 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -18 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -116 -109 -97 -91 -83 -78 -4 --62 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --120 --111 --105 --100 --94 --92 --85 --82 --75 --70 --65 --64 --58 --54 --49 --44 --45 --40 --37 --35 --29 --26 --22 --23 --21 --23 --22 --20 --18 --19 --17 --15 --17 -118 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -120 -113 -106 -98 -92 -15 --52 --111 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -18 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -117 -111 -101 -94 -86 -83 -8 --58 --117 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -14 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -118 -105 -100 -91 -85 -81 -6 --60 --119 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -21 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -117 -108 -100 -95 -86 -79 -4 --62 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -15 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -112 -103 -92 -85 -77 -2 --64 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -18 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -112 -106 -95 -90 -84 -79 -79 -76 -72 -68 -64 -58 -53 -45 -41 -36 -32 -28 -22 -22 -17 -17 -13 -12 -15 -12 -17 -16 -17 -11 -11 -6 -7 -2 -4 -3 -3 -4 --63 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --115 --105 --100 --93 --87 --82 --77 --71 --66 --59 --57 --52 --50 --48 --45 --42 --43 --39 --37 --35 --32 --30 --27 --29 --25 --22 --23 --21 --23 --22 --17 -118 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -120 -110 -102 -93 -86 -78 -74 -68 -57 -53 -46 -44 -43 -39 -38 -35 -35 -32 -23 -21 -15 -15 -12 -11 -12 -10 -10 -11 -9 -9 -7 -6 -6 -3 -2 -5 --62 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -5 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -110 -103 -96 -90 -82 -77 -3 --63 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --120 --115 --107 --101 --95 --86 --79 --78 --71 --70 --65 --64 --58 --56 --52 --51 --45 --45 --40 --36 --35 --32 --29 --24 --19 --21 --19 --21 --19 --20 --18 --20 --17 -118 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -118 -105 -98 -94 -87 -84 -74 -70 -63 -59 -54 -50 -47 -39 -37 -30 -27 -28 -27 -27 -20 -20 -18 -17 -15 -10 -12 -17 -16 -17 -17 -15 -12 -11 -9 -7 --60 --119 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -7 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -117 -109 -100 -93 -88 -81 -6 --61 --120 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -18 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -113 -107 -100 -91 -85 -10 --57 --116 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -12 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -114 -107 -99 -93 -86 -80 -5 --61 --120 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -20 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -117 -107 -100 -93 -83 -79 -4 --62 --120 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --112 --104 --100 --92 --87 --81 --73 --68 --64 --61 --58 --55 --53 --48 --46 --44 --41 --39 --34 --31 --26 --27 --24 --25 --24 --23 --20 --22 --20 --23 --20 --19 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -118 -110 -103 -96 -84 -78 -67 -63 -54 -51 -43 -42 -40 -37 -36 -30 -29 -31 -28 -27 -25 -24 -16 -16 -11 -10 -6 -6 -9 -10 -12 -14 -12 -14 -12 -12 --55 --115 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -14 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -124 -111 -102 -90 -84 -76 -2 --64 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -19 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -114 -107 -98 -92 -86 -79 -4 --62 --120 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --116 --110 --103 --96 --89 --83 --74 --71 --65 --62 --58 --55 --52 --48 --44 --39 --34 --34 --32 --32 --28 --26 --22 --22 --21 --18 --16 --16 --20 --18 --22 --20 -112 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -112 -105 -97 -91 -85 -78 -73 -66 -58 -56 -48 -47 -43 -40 -38 -35 -33 -35 -35 -31 -30 -29 -28 -25 -20 -19 -18 -14 -12 -11 -10 -6 -5 -3 -2 -2 --64 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --118 --106 --98 --93 --85 --78 --74 --69 --66 --63 --59 --56 --53 --46 --42 --43 --37 --35 --31 --29 --28 --28 --24 --22 --26 --24 --26 --23 --26 --23 --21 -116 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -114 -110 -104 -97 -21 --47 --107 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -14 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -112 -105 -94 -88 -80 -76 -1 --64 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --120 -21 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -119 -113 -101 -95 -83 -79 -70 -66 -57 -53 -53 -49 -46 -44 -42 -35 -34 -28 -25 -26 -24 -25 -22 -21 -14 -15 -9 -7 -10 -10 -11 -7 -9 -9 -5 -5 -1 -2 --64 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --115 --107 --99 --91 --88 --81 --80 --73 --72 --67 --60 --55 --48 --47 --43 --41 --37 --39 --35 --37 --32 --34 --31 --25 --24 --21 --20 --19 --19 --15 --14 -122 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -120 -110 -103 -97 -89 -13 --54 --113 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -19 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -111 -104 -96 -90 -80 -75 -73 -66 -63 -56 -53 -48 -46 -44 -39 -37 -34 -27 -24 -25 -24 -25 -19 -20 -14 -12 -14 -15 -15 -10 -10 -6 -4 -8 -7 -7 -6 -6 --61 --120 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -6 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -117 -105 -99 -88 -84 -80 -5 --61 --120 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --117 --110 --102 --93 --87 --79 --76 --70 --68 --63 --60 --56 --52 --47 --48 --43 --41 --37 --35 --32 --29 --30 --27 --27 --24 --23 --19 --15 --18 --15 --18 --16 -114 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -111 -104 -98 -90 -83 -78 -72 -68 -66 -64 -59 -55 -50 -48 -44 -40 -37 -35 -32 -24 -22 -16 -15 -12 -12 -15 -14 -14 -12 -11 -5 -4 -2 -2 -2 -1 --65 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -0 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -119 -113 -103 -95 -87 -81 -6 --60 --119 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -16 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -115 -106 -99 -91 -85 -81 -6 --61 --119 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -15 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -114 -102 -96 -88 -82 -73 --1 --67 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -18 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -117 -110 -101 -96 -88 -81 -6 --60 --119 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --116 --112 --102 --98 --90 --86 --79 --78 --70 --65 --59 --52 --52 --47 --44 --44 --39 --35 --35 --30 --32 --28 --29 --26 --20 --19 --17 --17 --16 --16 --15 --16 -120 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -112 -105 -98 -91 -85 -77 -72 -68 -62 -58 -54 -50 -47 -48 -45 -42 -40 -38 -30 -28 -24 -22 -18 -17 -18 -16 -15 -10 -9 -7 -7 -6 -4 -4 -8 -6 --60 --120 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --115 --110 --102 --95 --87 --85 --78 --76 --69 --68 --61 --58 --51 --45 --42 --40 --37 --34 --35 --32 --30 --28 --27 --29 --24 --25 --23 --17 --17 --15 --16 -119 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -119 -109 -104 -96 -19 --49 --108 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -18 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -120 -110 -102 -92 -85 -78 -74 -71 -66 -57 -53 -45 -42 -37 -35 -32 -29 -28 -25 -23 -22 -20 -19 -19 -16 -15 -9 -7 -10 -6 -7 -5 -6 -6 -5 -6 -4 -4 --62 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --114 --105 --97 --89 --88 --82 --81 --75 --72 --67 --62 --57 --57 --51 --51 --46 --38 --38 --32 --32 --29 --27 --24 --27 --24 --26 --22 --21 --19 --19 --15 -122 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -118 -108 -98 -93 -16 --51 --111 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -16 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -116 -109 -100 -93 -88 -81 -6 --61 --119 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --119 -19 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -114 -106 -94 -88 -80 -75 -0 --65 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -20 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -115 -104 -96 -87 -80 -5 --61 --120 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -17 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -116 -107 -101 -94 -87 -82 -72 -69 -60 -56 -56 -51 -48 -45 -42 -34 -33 -27 -26 -20 -18 -21 -18 -19 -18 -18 -15 -15 -14 -12 -11 -11 -6 -6 -9 -12 -10 -11 --56 --116 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --116 --112 --103 --99 --90 --87 --81 --71 --67 --61 --56 --50 --51 --47 --46 --42 --41 --37 --37 --32 --30 --30 --26 --27 --24 --19 --16 --14 --17 --15 --17 -118 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -116 -108 -100 -91 -87 -78 -72 -65 -62 -56 -54 -47 -44 -38 -35 -32 -30 -27 -25 -24 -21 -20 -19 -13 -10 -13 -12 -13 -8 -8 -3 -3 -6 -7 -8 -3 --64 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -8 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -124 -116 -104 -98 -87 -82 -76 -1 --64 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --113 --104 --96 --88 --84 --80 --76 --73 --68 --64 --58 --51 --50 --47 --46 --44 --40 --36 --37 --34 --32 --29 --27 --25 --22 --25 --22 --20 --16 --14 --17 --14 -116 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -115 -107 -100 -89 -84 -77 -71 -67 -62 -58 -53 -49 -47 -45 -41 -40 -36 -33 -30 -29 -28 -25 -22 -19 -18 -11 -11 -9 -8 -11 -11 -12 -6 -7 -4 -4 --62 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -13 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -124 -116 -107 -99 -91 -85 -78 -3 --63 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --119 -23 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -111 -104 -92 -86 -77 -2 --63 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -12 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -115 -108 -96 -90 -83 -77 -2 --63 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --119 -18 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -117 -109 -102 -91 -86 -77 -2 --63 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --113 --105 --96 --90 --86 --81 --75 --71 --63 --58 --59 --54 --55 --50 --51 --46 --43 --39 --36 --30 --26 --28 --25 --27 --24 --26 --22 --20 --21 --13 --12 --9 -121 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -120 -110 -103 -96 -86 -80 -73 -69 -64 -59 -56 -50 -44 -42 -40 -40 -39 -36 -35 -34 -30 -27 -24 -23 -16 -15 -9 -7 -9 -9 -9 -5 -6 -1 -2 -5 -5 --61 --120 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --116 --108 --101 --94 --85 --80 --74 --71 --67 --62 --57 --57 --52 --51 --47 --44 --40 --40 --36 --29 --29 --26 --26 --24 --23 --20 --23 --21 --22 --19 --16 -115 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -117 -107 -100 -87 -81 -71 -67 -62 -58 -55 -51 -48 -43 -40 -38 -34 -31 -29 -29 -29 -24 -24 -25 -21 -18 -17 -15 -13 -14 -11 -10 -8 -6 -2 -2 -1 --65 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -10 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -109 -104 -98 -91 -86 -79 -4 --62 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --117 --114 --106 --101 --93 --90 --82 --79 --71 --66 --58 --51 --48 --42 --38 --33 --34 --31 --33 --31 --31 --30 --28 --25 --27 --24 --22 --18 --14 --14 --12 --12 -123 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -112 -106 -96 -90 -82 -78 -75 -68 -67 -61 -58 -52 -48 -39 -36 -32 -30 -22 -20 -22 -17 -18 -16 -16 -14 -13 -12 -15 -16 -15 -14 -15 -15 -11 -8 -5 --62 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --118 --111 --102 --97 --88 --82 --78 --70 --68 --63 --57 --50 --44 --43 --40 --38 --33 --30 --26 --28 --25 --27 --25 --25 --20 --19 --15 --18 --16 --18 --16 -115 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -113 -104 -97 -87 -11 --56 --115 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -19 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -118 -110 -102 -95 -88 -78 -3 --63 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -17 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -113 -103 -96 -90 -81 -74 -69 -64 -63 -59 -56 -54 -50 -44 -41 -32 -29 -22 -22 -18 -18 -18 -15 -14 -14 -12 -12 -10 -9 -9 -9 -7 -8 -7 -6 -6 -1 --65 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -11 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -124 -110 -103 -95 -89 -83 -77 -2 --64 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -18 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -113 -105 -96 -92 -81 -77 -2 --64 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --113 --103 --96 --89 --81 --74 --74 --69 --68 --63 --63 --58 --56 --51 --50 --44 --45 --40 --36 --30 --26 --28 --25 --27 --23 --26 --22 --20 --18 --15 --15 --13 -120 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -113 -105 -99 -88 -81 -76 -67 -62 -61 -59 -55 -52 -49 -41 -39 -32 -29 -30 -29 -28 -21 -21 -17 -16 -16 -14 -12 -11 -10 -10 -7 -6 -6 -7 -6 -6 --60 --120 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --118 --114 --103 --99 --90 --82 --74 --66 --65 --58 --58 --53 --53 --48 --48 --43 --42 --39 --35 --32 --27 --23 --20 --21 --18 --20 --19 --19 --15 --14 --10 -123 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -120 -112 -102 -94 -87 -11 --56 --115 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -18 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -115 -108 -96 -90 -80 -76 -1 --64 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -17 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -114 -111 -104 -98 -93 -87 -12 --55 --115 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -16 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -113 -109 -101 -96 -85 -80 -6 --61 --119 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -22 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -112 -105 -94 -86 -78 -70 -65 -61 -52 -49 -45 -42 -39 -33 -32 -31 -32 -30 -28 -28 -29 -23 -25 -22 -22 -18 -17 -12 -11 -10 -7 -6 -1 -1 -2 -0 -1 --66 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -14 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -116 -109 -101 -94 -89 -81 -6 --60 --119 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --119 -21 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -117 -109 -98 -92 -84 -80 -5 --61 --120 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -15 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -112 -105 -93 -88 -78 -74 -0 --66 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --116 --109 --100 --93 --87 --78 --75 --69 --65 --62 --58 --53 --50 --43 --42 --39 --38 --35 --34 --33 --31 --27 --26 --22 --22 --20 --21 --20 --19 --17 --17 --16 -118 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -118 -111 -105 -98 -92 -85 -79 -75 -68 -62 -58 -56 -53 -47 -45 -45 -41 -39 -35 -34 -30 -26 -25 -23 -20 -17 -14 -14 -12 -12 -9 -8 -6 -6 -1 -2 --3 --69 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --116 --113 --104 --101 --91 --89 --81 --75 --66 --59 --55 --51 --48 --43 --41 --35 --33 --35 --31 --34 --30 --33 --30 --26 --22 --18 --21 --19 --22 --19 --22 -114 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -124 -116 -106 -99 -92 -16 --52 --111 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --120 -23 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -119 -112 -104 -91 -85 -74 -0 --65 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -20 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -114 -102 -96 -88 -82 -75 -1 --65 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -18 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -118 -109 -101 -94 -86 -83 -76 -68 -65 -62 -58 -49 -46 -41 -37 -33 -32 -32 -27 -24 -22 -22 -19 -17 -16 -14 -13 -16 -17 -14 -13 -14 -14 -9 -8 -6 -5 -4 --62 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --115 --106 --97 --95 --87 --85 --78 --76 --69 --67 --61 --58 --52 --52 --47 --42 --41 --37 --38 --33 --31 --31 --26 --28 --24 --20 --21 --19 --21 --18 --11 -124 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -119 -111 -99 -92 -85 -79 -74 -69 -64 -58 -51 -49 -43 -41 -42 -39 -37 -34 -31 -29 -26 -20 -20 -18 -17 -16 -11 -12 -13 -9 -11 -6 -7 -5 -5 -6 -2 --64 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -9 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -112 -108 -99 -95 -88 -81 -6 --60 --119 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --120 --111 --109 --101 --96 --92 --86 --80 --75 --67 --61 --56 --52 --49 --44 --41 --39 --40 --37 --40 --37 --39 --35 --36 --32 --26 --26 --22 --21 --19 --18 --15 --15 -117 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -117 -110 -101 -93 -88 -83 -76 -65 -61 -52 -47 -45 -44 -42 -36 -38 -35 -33 -26 -24 -21 -20 -18 -16 -15 -12 -10 -11 -12 -14 -13 -12 -12 -13 -10 -8 --60 --119 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -5 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -111 -104 -100 -92 -86 -80 -5 --61 --119 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --116 --109 --100 --91 --87 --80 --78 --70 --66 --60 --54 --54 --49 --50 --44 --39 --40 --34 --32 --29 --26 --28 --25 --22 --20 --16 --16 --14 --16 --15 --18 --15 -116 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -111 -103 -92 -90 -14 --53 --112 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -18 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -119 -109 -101 -94 -86 -80 -5 --61 --120 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -20 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -114 -107 -103 -96 -91 -81 -77 -68 -64 -58 -53 -50 -46 -43 -37 -35 -33 -29 -28 -26 -23 -22 -18 -17 -17 -14 -14 -14 -12 -11 -13 -15 -12 -13 -14 -12 -10 -10 --58 --117 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -5 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -116 -103 -96 -88 -82 -77 -3 --63 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -17 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -117 -110 -101 -95 -89 -80 -5 --61 --120 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --119 -21 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -114 -106 -98 -92 -86 -80 -5 --61 --120 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -12 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -119 -107 -100 -92 -86 -81 -6 --60 --118 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -15 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -112 -103 -94 -86 -78 -3 --63 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --119 --115 --106 --101 --95 --91 --83 --78 --72 --68 --61 --54 --52 --49 --46 --44 --41 --38 --36 --30 --27 --30 --27 --30 --27 --29 --25 --26 --23 --21 --18 --22 --18 -119 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -111 -104 -97 -90 -84 -79 -73 -68 -62 -55 -53 -49 -46 -44 -39 -38 -35 -32 -30 -24 -22 -16 -14 -16 -15 -16 -11 -11 -9 -9 -10 -8 -7 -12 -12 -12 --55 --115 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --116 --109 --98 --91 --88 --82 --78 --71 --67 --60 --58 --54 --53 --49 --47 --42 --40 --34 --32 --30 --26 --23 --22 --26 --23 --27 --25 --24 --22 --22 --20 -116 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -118 -109 -102 -91 -15 --53 --112 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -15 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -119 -109 -102 -94 -87 -82 -75 -68 -62 -58 -53 -51 -47 -40 -38 -37 -35 -27 -25 -19 -18 -16 -14 -18 -17 -18 -18 -17 -15 -13 -13 -10 -8 -5 -2 -2 -2 -0 --66 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --111 --106 --96 --93 --84 --79 --72 --67 --60 --54 --50 --47 --44 --42 --39 --36 --32 --28 --29 --27 --26 --24 --28 --25 --27 --24 --23 --21 --18 --17 -118 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -124 -116 -104 -98 -93 -17 --50 --110 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -20 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -117 -109 -102 -95 -89 -81 -6 --60 --119 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -22 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -111 -106 -96 -89 -87 -82 -7 --59 --118 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -15 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -110 -103 -93 -88 -80 -77 -2 --64 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -14 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -118 -110 -103 -93 -87 -84 -78 -73 -67 -63 -57 -53 -50 -42 -40 -37 -35 -33 -30 -28 -28 -26 -26 -28 -26 -24 -23 -17 -14 -11 -10 -4 -4 --1 --2 -3 -2 -3 --63 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --117 --109 --104 --96 --90 --82 --74 --70 --66 --61 --59 --55 --51 --46 --41 --40 --38 --37 --33 --31 --27 --28 --26 --26 --24 --26 --21 --20 --16 --17 --15 -117 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -112 -106 -106 -99 -22 --46 --107 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -17 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -118 -111 -99 -93 -82 -76 -1 --64 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -15 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -120 -110 -100 -94 -85 -81 -75 -68 -64 -61 -56 -51 -46 -44 -39 -38 -33 -31 -26 -25 -18 -17 -14 -14 -14 -11 -11 -9 -8 -10 -11 -12 -11 -10 -11 -12 -8 -6 --61 --120 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --117 --114 --104 --99 --93 --88 --82 --75 --69 --68 --61 --58 --51 --45 --44 --41 --39 --35 --33 --28 --29 --26 --27 --25 --25 --21 --20 --17 --19 --17 --16 -119 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -114 -107 -99 -92 -86 -76 -72 -63 -58 -58 -52 -50 -45 -42 -35 -34 -27 -26 -27 -26 -26 -24 -23 -22 -16 -16 -12 -12 -12 -10 -10 -13 -12 -13 -10 -8 --59 --118 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -10 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -116 -107 -99 -92 -86 -10 --57 --116 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -15 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -116 -106 -99 -90 -86 -10 --57 --116 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --117 --108 --104 --95 --91 --84 --80 --73 --71 --64 --63 --56 --52 --48 --44 --38 --34 --34 --32 --31 --26 --25 --21 --23 --20 --21 --20 --19 --16 --20 --17 --20 -117 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -118 -109 -102 -96 -86 -79 -71 -68 -62 -59 -52 -48 -40 -38 -34 -32 -27 -27 -26 -22 -21 -20 -16 -20 -21 -20 -20 -17 -17 -16 -16 -11 -8 -7 -6 -0 --67 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -8 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -114 -105 -98 -91 -86 -82 -7 --59 --118 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --118 --107 --99 --93 --87 --79 --73 --72 --64 --60 --55 --52 --52 --48 --50 --45 --46 --43 --37 --34 --28 --29 --26 --27 --25 --26 --20 --18 --15 --17 --15 --15 -120 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -115 -106 -103 -96 -91 -15 --52 --112 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --117 -25 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -120 -108 -101 -93 -87 -80 -73 -69 -60 -57 -49 -45 -43 -44 -43 -42 -39 -36 -35 -33 -29 -25 -21 -21 -17 -15 -12 -13 -11 -12 -7 -8 -4 -4 -3 -4 --2 --1 --67 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --119 --111 --108 --99 --97 --90 --87 --80 --78 --70 --65 --61 --52 --48 --42 --42 --38 --39 --36 --34 --30 --33 --29 --31 --28 --22 --22 --20 --20 --18 --17 --14 -117 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -116 -104 -97 -20 --48 --108 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -14 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -118 -109 -100 -94 -87 -81 -6 --60 --118 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -17 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -120 -112 -102 -94 -86 -81 -6 --60 --119 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -15 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -119 -108 -101 -94 -88 -85 -10 --57 --116 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --120 -23 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -113 -104 -97 -91 -85 -79 -67 -62 -52 -49 -44 -42 -38 -36 -38 -36 -34 -33 -31 -26 -24 -21 -19 -17 -9 -10 -7 -6 -6 -5 -5 -6 -5 -5 -9 -10 -8 --59 --118 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --118 --105 --98 --90 --85 --80 --75 --72 --67 --65 --58 --52 --48 --50 --45 --47 --42 --43 --38 --38 --34 --35 --30 --32 --27 --22 --22 --18 --19 --17 --19 -117 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -116 -107 -102 -94 -87 -82 -78 -72 -61 -57 -47 -44 -39 -37 -35 -28 -28 -32 -31 -31 -30 -28 -24 -21 -18 -18 -18 -14 -12 -9 -10 -8 -9 -5 -4 -2 --64 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -10 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -112 -105 -94 -89 -81 -76 -2 --64 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --115 --110 --101 --97 --88 --80 --74 --69 --64 --60 --57 --52 --47 --47 --43 --43 --39 --36 --33 --30 --30 --26 --28 --26 --20 --21 --18 --20 --16 --16 --14 --11 -119 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -113 -106 -100 -94 -85 -79 -72 -68 -61 -57 -53 -48 -44 -41 -34 -34 -35 -35 -34 -27 -25 -22 -20 -19 -16 -15 -9 -9 -9 -11 -11 -10 -11 -13 -10 -12 --56 --115 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -5 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -124 -116 -105 -98 -90 -85 -80 -5 --61 --120 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -17 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -115 -104 -97 -94 -88 -83 -7 --59 --118 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -13 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -114 -100 -94 -83 -79 -4 --62 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -15 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -115 -106 -97 -90 -82 -75 -1 --65 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --110 --101 --94 --89 --84 --76 --72 --67 --61 --57 --58 --54 --54 --50 --49 --44 --43 --37 --34 --28 --30 --27 --27 --25 --27 --23 --26 --22 --24 --20 --22 --20 -119 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -120 -112 -101 -93 -84 -78 -71 -68 -62 -56 -53 -51 -45 -40 -37 -35 -27 -26 -22 -21 -17 -18 -19 -14 -14 -9 -10 -8 -8 -8 -7 -7 -7 -5 -6 -6 --61 --120 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --118 --108 --104 --96 --92 --85 --82 --76 --66 --63 --56 --52 --47 --48 --43 --43 --39 --39 --34 --32 --30 --25 --23 --18 --20 --17 --19 --18 --17 --16 --16 -119 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -120 -114 -106 -100 -92 -16 --51 --111 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -17 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -114 -108 -103 -97 -90 -80 -75 -68 -64 -57 -54 -53 -49 -44 -41 -40 -33 -30 -26 -25 -22 -21 -20 -14 -13 -16 -12 -12 -11 -10 -10 -8 -8 -3 -4 --1 --1 -3 --64 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --118 --111 --106 --96 --92 --85 --79 --72 --70 --65 --59 --58 --52 --53 --47 --43 --40 --36 --34 --34 --29 --30 --27 --28 --26 --20 --19 --17 --15 --11 --7 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -119 -115 -107 -99 -22 --46 --106 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -15 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -117 -109 -100 -93 -82 -77 -2 --64 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -21 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -124 -116 -104 -97 -93 -85 -81 -6 --60 --119 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -15 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -112 -104 -97 -86 -81 -6 --61 --119 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -17 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -117 -109 -100 -95 -88 -85 -79 -71 -64 -58 -54 -49 -45 -43 -41 -39 -31 -29 -22 -21 -15 -14 -15 -13 -14 -13 -12 -10 -10 -10 -6 -5 -7 -5 -6 -5 -5 -1 --65 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --116 --111 --103 --96 --88 --86 --78 --73 --67 --62 --55 --49 --47 --44 --42 --41 --39 --38 --35 --32 --27 --23 --23 --18 --18 --15 --18 --17 --20 --18 --19 -115 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -111 -104 -96 -90 -79 -75 -66 -62 -60 -57 -54 -49 -47 -46 -39 -38 -31 -28 -26 -24 -23 -21 -20 -17 -16 -16 -17 -17 -16 -15 -15 -11 -9 -8 -6 -1 --65 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --118 --107 --96 --92 --85 --79 --72 --71 --65 --64 --59 --55 --50 --50 --46 --40 --37 --31 --31 --28 --29 --26 --29 --26 --28 --24 --26 --22 --19 --20 --17 -117 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -118 -109 -101 -94 -18 --50 --110 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -14 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -119 -105 -98 -88 -82 -76 -72 -64 -61 -60 -55 -52 -48 -46 -40 -37 -33 -30 -26 -26 -24 -25 -19 -19 -14 -12 -10 -10 -8 -5 -6 -2 -2 -6 -6 -7 -6 -7 --60 --119 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --113 --106 --97 --91 --83 --76 --73 --65 --62 --57 --55 --54 --51 --48 --46 --41 --39 --37 --35 --35 --33 --29 --28 --24 --24 --21 --22 --21 --20 --17 --16 -121 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -115 -108 -97 -89 -87 -82 -78 -68 -65 -59 -56 -53 -49 -45 -41 -38 -37 -30 -29 -30 -25 -24 -22 -21 -20 -17 -16 -13 -8 -9 -6 -5 -8 -7 -8 -7 -7 --60 --119 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -10 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -117 -105 -98 -90 -84 -79 -4 --62 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -18 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -124 -118 -110 -103 -98 -92 -84 -9 --58 --117 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --114 --106 --96 --89 --84 --80 --72 --67 --67 --61 --59 --55 --52 --45 --42 --45 --42 --43 --39 --40 --35 --36 --31 --27 --28 --25 --17 --15 --11 --14 --12 --15 -120 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -114 -105 -97 -91 -15 --52 --112 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --120 -22 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -118 -116 -108 -102 -93 -84 -9 --58 --117 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -14 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -124 -114 -106 -98 -90 -85 -74 -69 -63 -59 -57 -52 -49 -46 -42 -40 -36 -33 -32 -27 -26 -25 -22 -20 -23 -22 -21 -21 -19 -15 -14 -10 -8 -4 -5 -5 -4 -5 -4 --62 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --115 --105 --96 --89 --88 --82 --80 --73 --68 --60 --58 --54 --52 --49 --47 --44 --41 --37 --32 --28 --31 --27 --29 --26 --25 --23 --19 --22 --19 --18 --17 -118 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -114 -106 -93 -88 -80 -76 -72 -63 -60 -58 -53 -49 -46 -43 -40 -34 -32 -32 -29 -29 -25 -22 -21 -16 -15 -17 -16 -15 -13 -12 -10 -8 -6 -4 -4 -5 --62 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -7 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -118 -108 -102 -95 -83 -78 -3 --63 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --119 -22 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -107 -99 -90 -83 -78 -4 --62 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -12 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -120 -111 -104 -97 -89 -84 -8 --58 --117 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -18 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -118 -110 -98 -91 -83 -78 -3 --63 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --112 --106 --100 --95 --87 --82 --74 --71 --67 --63 --57 --52 --51 --49 --46 --42 --37 --32 --33 --30 --30 --29 --27 --24 --28 --25 --23 --19 --16 --15 --15 --14 -120 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -115 -103 -96 -85 -10 --57 --116 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -18 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -117 -108 -100 -93 -86 -81 -6 --60 --119 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -21 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -118 -104 -98 -87 -80 -78 -4 --62 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -17 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -116 -109 -100 -94 -83 -78 -68 -64 -63 -57 -55 -50 -50 -47 -45 -43 -41 -36 -33 -27 -25 -22 -20 -13 -13 -8 -7 -10 -8 -8 -8 -9 -4 -5 -0 -0 -4 -4 --62 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --120 --112 --105 --99 --92 --86 --78 --70 --67 --62 --58 --54 --54 --49 --50 --46 --46 --41 --39 --35 --32 --33 --29 --31 --28 --25 --26 --22 --21 --21 --17 --19 -117 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -114 -104 -98 -91 -80 -77 -68 -64 -64 -57 -54 -49 -46 -41 -40 -40 -36 -35 -27 -26 -22 -21 -18 -18 -19 -17 -16 -9 -9 -7 -7 -12 -12 -13 -13 -11 --57 --116 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -10 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -124 -113 -102 -95 -86 -82 -7 --60 --118 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -17 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -124 -110 -104 -93 -88 -80 -76 -2 --64 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -12 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -118 -106 -99 -91 -85 -75 -1 --65 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --116 --110 --101 --94 --88 --79 --74 --66 --65 --60 --59 --54 --53 --49 --46 --41 --43 --38 --39 --35 --32 --29 --26 --25 --23 --19 --22 --20 --18 --13 --10 --14 -125 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -118 -104 -96 -85 -79 -70 -66 -63 -58 -56 -52 -48 -45 -45 -44 -41 -38 -37 -35 -30 -27 -24 -22 -15 -15 -12 -11 -11 -5 -5 -6 -5 -5 -6 -1 -1 --65 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --119 --110 --101 --97 --89 --86 --78 --74 --66 --58 --57 --51 --51 --46 --47 --43 --41 --34 --31 --27 --28 --26 --27 --24 --23 --21 --21 --20 --17 --20 --18 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -124 -118 -111 -102 -96 -94 -18 --50 --110 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --118 -19 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -119 -110 -102 -96 -85 -80 -73 -69 -63 -58 -55 -51 -47 -45 -40 -38 -35 -32 -30 -27 -22 -22 -19 -18 -18 -12 -10 -11 -12 -14 -12 -13 -14 -14 -8 -7 -3 -2 --65 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --120 --110 --106 --97 --94 --86 --78 --72 --65 --64 --61 --53 --46 --41 --40 --37 --37 --31 --29 --25 --28 --25 --28 --26 --27 --25 --23 --20 --20 --18 --15 -118 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -119 -107 -100 -90 -14 --53 --113 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --120 -21 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -118 -109 -101 -90 -83 -75 -70 -65 -56 -54 -50 -47 -45 -41 -39 -37 -33 -31 -33 -32 -30 -30 -28 -23 -21 -18 -14 -14 -12 -10 -8 -9 -7 -8 -4 -4 -1 -4 --62 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -7 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -111 -105 -97 -91 -86 -79 -4 --62 --120 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --119 -23 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -119 -113 -103 -97 -90 -86 -10 --57 --116 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --117 --107 --97 --90 --84 --78 --73 --69 --62 --59 --55 --53 --50 --48 --46 --42 --41 --37 --35 --34 --28 --26 --25 --24 --24 --23 --22 --18 --15 --16 --16 --16 -117 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -114 -105 -98 -93 -16 --51 --111 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --118 -19 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -116 -109 -102 -95 -89 -82 -6 --60 --118 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -15 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -120 -111 -104 -97 -86 -83 -8 --59 --118 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -19 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -111 -104 -94 -87 -80 -5 --61 --120 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -21 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -115 -107 -95 -90 -81 -75 -1 --65 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -17 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -117 -110 -103 -96 -89 -79 -74 -65 -60 -60 -53 -51 -47 -45 -40 -37 -35 -31 -29 -28 -25 -23 -20 -15 -14 -16 -12 -14 -10 -10 -9 -10 -8 -7 -7 -3 -3 -4 --62 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --117 --110 --104 --98 --92 --85 --76 --69 --66 --61 --58 --55 --53 --51 --47 --43 --37 --33 --33 --28 --26 --23 --23 --22 --22 --18 --20 --19 --20 --20 --20 -116 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -112 -105 -99 -89 -83 -73 -70 -65 -61 -59 -56 -51 -47 -45 -38 -36 -37 -35 -33 -33 -30 -28 -25 -25 -22 -15 -14 -8 -7 -4 -4 -5 -3 -4 -4 -4 --63 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -14 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -117 -109 -102 -97 -92 -85 -9 --58 --116 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --117 --109 --103 --94 --88 --79 --74 --70 --67 --59 --55 --57 --52 --53 --48 --48 --43 --43 --38 --39 --34 --34 --30 --25 --20 --16 --18 --16 --18 --17 --19 --16 -117 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -117 -110 -102 -93 -88 -83 -74 -68 -62 -59 -50 -47 -42 -39 -34 -33 -33 -30 -28 -24 -21 -20 -20 -21 -16 -18 -15 -15 -10 -10 -5 -5 -3 -4 -4 --1 --67 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -7 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -115 -106 -98 -93 -81 -77 -2 --64 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -16 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -117 -108 -102 -98 -90 -86 -10 --56 --116 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -15 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -114 -108 -99 -92 -85 -79 -4 --62 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -11 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -113 -106 -95 -89 -82 -76 -2 --64 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --115 --111 --102 --98 --90 --87 --79 --76 --69 --64 --61 --56 --54 --48 --48 --42 --39 --39 --34 --31 --29 --26 --27 --23 --25 --21 --20 --20 --14 --12 --9 --12 -124 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -115 -107 -99 -95 -88 -78 -72 -65 -62 -60 -57 -49 -46 -40 -38 -34 -31 -29 -23 -21 -22 -18 -18 -16 -16 -14 -13 -13 -7 -8 -3 -2 -5 -4 -9 -11 --56 --116 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -3 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -118 -104 -99 -88 -82 -79 -5 --61 --120 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -18 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -117 -109 -102 -95 -90 -80 -5 --61 --120 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --115 --106 --100 --94 --88 --83 --78 --71 --67 --59 --58 --53 --51 --48 --44 --40 --41 --38 --36 --33 --32 --31 --28 --26 --23 --22 --20 --19 --20 --14 --13 --10 -126 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -118 -105 -98 -89 -82 -74 -70 -68 -62 -60 -55 -53 -47 -42 -40 -39 -34 -30 -26 -25 -21 -22 -17 -17 -15 -14 -7 -7 -10 -12 -11 -11 -9 -10 -7 -6 --61 --120 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --113 --107 --99 --97 --89 --87 --80 --78 --71 --69 --62 --60 --57 --49 --45 --42 --38 --33 --28 --25 --26 --24 --23 --22 --25 --22 --25 --22 --24 --21 --18 -117 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -118 -109 -105 -99 -94 -18 --50 --110 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -16 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -117 -109 -98 -93 -82 -78 -4 --63 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -16 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -119 -112 -100 -94 -84 -78 -76 -69 -65 -59 -54 -51 -49 -41 -39 -33 -31 -24 -24 -26 -21 -22 -17 -17 -15 -15 -15 -14 -14 -13 -9 -10 -7 -8 -8 -6 -6 -11 --57 --116 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --118 --110 --102 --92 --84 --80 --74 --71 --67 --63 --60 --56 --52 --47 --42 --41 --38 --37 --33 --31 --27 --26 --25 --25 --21 --21 --20 --20 --16 --16 --13 -118 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -124 -116 -106 -99 -86 -10 --56 --116 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -14 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -117 -104 -98 -89 -83 -78 -69 -66 -62 -58 -55 -48 -45 -41 -39 -37 -34 -31 -28 -27 -26 -19 -19 -21 -19 -19 -18 -14 -14 -11 -10 -10 -7 -7 -7 -2 -3 -5 --61 --120 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -10 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -118 -106 -100 -92 -86 -81 -6 --60 --119 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --120 --115 --106 --100 --90 --87 --79 --73 --65 --57 --54 --51 --48 --43 --45 --41 --41 --37 --36 --31 --26 --25 --24 --23 --21 --17 --13 --15 --14 --16 --16 --16 -121 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -117 -103 -95 -87 -80 -74 -70 -68 -62 -59 -50 -47 -40 -44 -42 -40 -39 -34 -30 -28 -26 -21 -19 -17 -14 -13 -12 -11 -11 -11 -12 -12 -11 -9 -10 -6 --60 --120 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -12 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -117 -104 -98 -90 -83 -77 -3 --63 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -19 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -117 -113 -105 -98 -87 -81 -6 --60 --119 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -16 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -118 -110 -101 -96 -86 -80 -5 --61 --120 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --120 -22 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -112 -104 -97 -90 -79 -5 --62 --120 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --116 --105 --99 --92 --86 --81 --76 --72 --66 --61 --58 --51 --49 --45 --43 --41 --39 --35 --33 --28 --26 --27 --25 --21 --21 --21 --21 --21 --20 --19 --16 --12 -120 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -118 -111 -98 -92 -82 -77 -70 -68 -66 -61 -57 -47 -44 -40 -37 -35 -29 -28 -31 -30 -30 -31 -29 -30 -26 -24 -22 -17 -14 -9 -6 -5 -4 -5 -6 -0 --66 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --115 --104 --100 --92 --90 --83 --79 --73 --68 --62 --62 --56 --56 --51 --47 --41 --35 --35 --29 --27 --23 --26 --23 --25 --23 --24 --22 --23 --18 --17 --13 -118 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -114 -102 -101 -95 -18 --50 --109 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -14 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -117 -109 -101 -93 -87 -82 -75 -70 -66 -60 -56 -51 -46 -44 -36 -34 -29 -26 -27 -25 -24 -23 -22 -19 -18 -17 -11 -12 -12 -8 -8 -5 -6 -8 -8 -9 -7 -7 --60 --120 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --113 --104 --95 --87 --79 --74 --71 --66 --59 --55 --56 --52 --51 --46 --41 --38 --38 --36 --36 --34 --33 --28 --26 --22 --24 --21 --22 --21 --20 --17 --20 -116 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -118 -108 -98 -93 -17 --50 --110 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -14 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -124 -117 -107 -100 -94 -86 -81 -6 --61 --119 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -22 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -119 -113 -104 -94 -87 -76 -2 --64 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -20 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -114 -106 -102 -93 -88 -81 -6 --60 --118 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -19 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -117 -105 -98 -87 -82 -75 -70 -66 -60 -56 -48 -46 -44 -40 -38 -36 -33 -32 -28 -26 -25 -21 -19 -19 -16 -16 -20 -19 -18 -18 -16 -14 -11 -11 -10 -4 -3 --1 --67 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --114 --106 --96 --91 --84 --80 --75 --71 --65 --61 --54 --50 --51 --47 --48 --44 --45 --40 --40 --35 --31 --32 --28 --27 --23 --20 --23 --19 --21 --20 --15 -119 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -118 -109 -100 -95 -89 -80 -70 -64 -57 -54 -52 -48 -45 -37 -34 -30 -27 -25 -22 -21 -24 -23 -22 -22 -20 -19 -15 -16 -14 -8 -7 -2 -3 --2 --2 -1 --65 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -4 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -114 -103 -94 -86 -80 -5 --61 --120 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --115 --105 --96 --95 --86 --80 --72 --71 --66 --64 --60 --58 --54 --52 --48 --44 --40 --40 --36 --34 --31 --30 --28 --25 --27 --24 --21 --16 --15 --14 --11 --8 -123 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -114 -107 -95 -89 -80 -75 -69 -65 -63 -57 -52 -47 -45 -40 -38 -36 -32 -30 -26 -23 -22 -17 -16 -11 -10 -13 -11 -12 -11 -12 -9 -8 -8 -4 -2 -6 --61 --120 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -10 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -117 -107 -99 -87 -81 -75 -0 --65 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -15 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -124 -115 -106 -99 -92 -82 -78 -3 --63 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --118 -21 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -111 -104 -93 -88 -81 -76 -2 --64 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -14 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -114 -105 -97 -88 -82 -7 --59 --118 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --114 --104 --98 --91 --86 --82 --77 --73 --68 --63 --57 --51 --49 --46 --44 --42 --40 --37 --37 --34 --33 --30 --28 --27 --22 --18 --16 --17 --15 --16 --14 --11 -122 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -120 -109 -104 -100 -96 -90 -83 -76 -69 -65 -62 -56 -54 -49 -46 -41 -38 -31 -28 -25 -23 -16 -16 -11 -10 -13 -10 -11 -10 -10 -14 -15 -13 -13 -11 -12 -7 --60 --119 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --119 --109 --102 --94 --86 --84 --78 --75 --70 --67 --60 --53 --49 --48 --44 --43 --37 --33 --32 --31 --28 --30 --28 --30 --27 --27 --24 --23 --21 --17 --20 -116 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -117 -110 -100 -93 -84 -79 -68 -64 -55 -49 -49 -44 -42 -39 -38 -34 -32 -31 -27 -26 -25 -19 -18 -20 -15 -15 -13 -13 -12 -10 -10 -10 -5 -6 -9 -11 --57 --116 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -3 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -114 -102 -95 -88 -82 -75 -1 --65 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --117 --108 --101 --92 --86 --79 --72 --68 --64 --61 --59 --55 --56 --51 --49 --44 --38 --36 --35 --32 --29 --25 --22 --22 --21 --22 --21 --21 --18 --18 --14 --16 -119 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -124 -117 -109 -96 -90 -78 -73 -64 -61 -55 -52 -48 -44 -42 -41 -41 -39 -35 -32 -30 -26 -24 -15 -14 -15 -14 -14 -10 -9 -4 -5 -8 -8 -9 -4 -5 -3 --63 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --120 --111 --104 --93 --86 --78 --72 --70 --65 --60 --58 --55 --51 --46 --48 --43 --45 --40 --37 --32 --27 --28 --25 --27 --24 --23 --21 --20 --15 --12 --13 -124 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -120 -110 -107 -100 -96 -19 --49 --109 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -18 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -114 -106 -94 -89 -82 -77 -2 --64 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --120 -22 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -118 -110 -104 -96 -86 -80 -74 -65 -60 -55 -50 -45 -42 -40 -36 -33 -30 -31 -31 -24 -23 -18 -18 -13 -13 -8 -8 -11 -12 -12 -12 -7 -7 -6 -6 -6 -1 -2 --64 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -6 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -124 -121 -113 -107 -96 -90 -82 -6 --60 --118 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -15 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -113 -105 -101 -93 -88 -82 -7 --59 --118 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --111 --106 --96 --90 --83 --78 --69 --63 --57 --51 --45 --46 --42 --42 --40 --40 --37 --35 --31 --26 --23 --25 --23 --23 --19 --18 --15 --17 --15 --18 --16 -115 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -118 -109 -105 -97 -91 -82 -75 -69 -65 -60 -53 -47 -45 -44 -39 -36 -32 -32 -27 -28 -26 -22 -20 -13 -12 -9 -8 -8 -6 -6 -10 -10 -10 -13 -12 -13 --54 --114 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --116 --108 --102 --97 --90 --84 --76 --69 --66 --62 --59 --57 --53 --48 --46 --40 --39 --37 --37 --34 --33 --32 --29 --26 --22 --19 --20 --19 --20 --19 --18 -117 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -115 -108 -101 -93 -17 --51 --110 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --118 -23 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -120 -116 -108 -101 -91 -86 -10 --56 --116 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -15 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -118 -110 -100 -95 -88 -80 -5 --61 --120 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -17 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -116 -106 -100 -92 -80 -6 --61 --119 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -15 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -120 -113 -100 -95 -84 -80 -73 -69 -64 -60 -56 -48 -46 -44 -36 -35 -34 -30 -29 -27 -25 -24 -18 -18 -13 -14 -16 -15 -16 -18 -14 -16 -14 -14 -9 -9 -6 -5 --62 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -3 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -124 -114 -107 -98 -91 -86 -76 -2 --64 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -17 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -113 -106 -99 -86 -81 -6 --60 --119 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -18 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -117 -108 -101 -94 -84 -79 -4 --62 --120 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --117 --107 --98 --89 --83 --83 --77 --76 --70 --69 --63 --61 --56 --55 --50 --45 --41 --36 --37 --32 --34 --30 --27 --25 --22 --21 --19 --16 --18 --16 --19 --16 -120 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -124 -116 -105 -99 -94 -86 -82 -75 -72 -66 -61 -58 -51 -46 -40 -39 -35 -34 -30 -27 -26 -25 -21 -21 -18 -18 -13 -12 -8 -7 -6 -5 -1 -1 -4 -3 -4 --63 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --111 --104 --93 --86 --80 --74 --69 --70 --66 --66 --61 --61 --56 --55 --50 --44 --40 --36 --37 --34 --29 --30 --27 --29 --25 --23 --25 --20 --19 --20 --16 -118 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -114 -102 -95 -18 --49 --109 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -12 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -120 -107 -100 -89 -84 -75 -0 --65 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -14 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -112 -106 -98 -90 -85 -9 --58 --116 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -17 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -124 -115 -107 -100 -92 -86 -80 -76 -78 -72 -68 -60 -57 -50 -48 -40 -37 -32 -30 -22 -21 -15 -15 -11 -12 -12 -8 -10 -12 -8 -10 -5 -6 -5 -5 -5 -5 -5 -10 --58 --117 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --119 --111 --101 --91 --86 --81 --76 --72 --67 --62 --55 --50 --46 --49 --45 --47 --43 --44 --39 --35 --34 --26 --24 --20 --23 --20 --24 --21 --23 --20 --17 -114 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -124 -116 -108 -101 -90 -85 -77 -72 -67 -61 -57 -54 -49 -46 -46 -45 -42 -38 -34 -33 -29 -26 -23 -22 -14 -13 -9 -8 -4 -3 -6 -7 -9 -6 -7 -7 -6 --61 --120 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -9 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -116 -104 -96 -90 -84 -74 -0 --66 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --114 --111 --103 --99 --92 --87 --81 --77 --70 --68 --61 --60 --54 --50 --45 --41 --42 --38 --32 --26 --22 --23 --21 --20 --19 --19 --18 --16 --20 --17 --20 --19 -118 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -117 -106 -100 -92 -87 -77 -72 -63 -58 -49 -47 -40 -38 -38 -38 -36 -35 -35 -34 -29 -26 -23 -21 -15 -14 -11 -10 -10 -5 -6 -8 -4 -6 -2 -2 -6 --61 --120 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -10 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -116 -106 -99 -87 -82 -72 --1 --67 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --118 --112 --104 --97 --88 --85 --78 --76 --69 --64 --60 --51 --47 --40 --42 --37 --38 --35 --35 --28 --27 --23 --26 --23 --25 --22 --25 --22 --19 --18 --15 --18 -118 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -118 -112 -102 -94 -17 --50 --110 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -16 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -118 -111 -99 -94 -83 -78 -4 --62 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -15 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -120 -110 -102 -95 -88 -83 -72 -69 -63 -60 -57 -53 -49 -44 -41 -39 -32 -29 -30 -28 -27 -21 -20 -14 -13 -13 -15 -16 -14 -15 -16 -14 -15 -13 -15 -12 -13 -11 --57 --116 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -6 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -117 -108 -99 -93 -85 -79 -4 --62 --120 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -17 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -115 -102 -96 -88 -83 -78 -3 --63 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --119 -19 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -117 -108 -100 -94 -82 -78 -4 --62 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -19 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -117 -109 -99 -96 -90 -86 -10 --56 --115 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -12 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -115 -107 -96 -90 -83 -79 -4 --62 --120 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --117 --111 --101 --93 --85 --78 --76 --69 --67 --61 --58 --53 --49 --47 --42 --42 --37 --38 --34 --30 --25 --21 --24 --20 --23 --20 --22 --19 --21 --18 --20 --16 -119 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -119 -110 -102 -96 -90 -80 -74 -64 -60 -53 -49 -45 -42 -38 -36 -34 -30 -29 -31 -31 -26 -23 -21 -21 -17 -16 -14 -12 -11 -8 -7 -6 -1 -2 --2 -0 --66 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --115 --110 --101 --98 --90 --87 --82 --72 --67 --62 --56 --50 --50 --46 --44 --41 --38 --34 --36 --33 --29 --30 --26 --25 --22 --20 --22 --19 --19 --19 --16 -115 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -118 -108 -101 -95 -18 --49 --109 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -16 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -118 -111 -100 -95 -85 -81 -77 -71 -67 -62 -58 -54 -52 -51 -49 -44 -43 -41 -38 -29 -28 -21 -19 -17 -16 -16 -10 -10 -12 -8 -10 -8 -9 -8 -7 -7 -6 -5 -6 --61 --120 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --116 --113 --104 --101 --92 --89 --81 --76 --69 --65 --58 --51 --51 --43 --41 --36 --34 --33 --30 --26 --25 --28 --26 --29 --26 --28 --25 --25 --18 --15 --14 -123 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -115 -105 -96 -90 -14 --53 --112 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -19 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -116 -107 -100 -94 -84 -79 -4 --62 --120 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -18 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -119 -107 -98 -89 -81 -74 -0 --66 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -19 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -114 -108 -96 -91 -86 -80 -5 --61 --120 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --119 -22 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -118 -107 -103 -95 -89 -79 -74 -65 -60 -56 -53 -44 -42 -38 -36 -35 -28 -26 -28 -27 -26 -20 -20 -17 -16 -16 -14 -13 -12 -7 -7 -9 -4 -6 -5 -5 -6 -5 --62 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --120 --114 --105 --99 --91 --88 --79 --77 --71 --63 --59 --53 --50 --44 --39 --38 --35 --33 --32 --30 --28 --24 --20 --22 --22 --21 --18 --15 --13 --16 --15 -118 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -112 -106 -101 -94 -17 --50 --110 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -23 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -117 -106 -98 -91 -86 -82 -6 --60 --118 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -13 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -112 -104 -96 -91 -84 -73 -68 -58 -55 -50 -46 -43 -42 -41 -38 -36 -28 -27 -22 -21 -15 -15 -15 -11 -9 -12 -9 -11 -7 -8 -6 -6 -7 -3 -5 -8 -9 --58 --118 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --117 --109 --102 --94 --88 --80 --78 --72 --68 --62 --53 --50 --44 --46 --42 --43 --39 --39 --36 --34 --30 --32 --28 --23 --24 --21 --22 --19 --18 --17 --20 -116 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -115 -109 -102 -93 -84 -77 -72 -68 -64 -59 -50 -46 -41 -37 -34 -34 -32 -29 -28 -29 -26 -26 -22 -22 -19 -16 -15 -15 -12 -11 -5 -5 -2 -2 -2 -1 --65 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -10 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -112 -105 -94 -88 -84 -79 -4 --62 --120 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -17 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -124 -116 -104 -97 -90 -84 -74 -0 --65 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --116 --106 --96 --92 --86 --81 --77 --72 --69 --63 --58 --54 --49 --44 --44 --42 --40 --38 --36 --33 --29 --25 --26 --25 --24 --21 --24 --22 --24 --21 --20 --18 -117 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -118 -110 -97 -91 -79 -74 -67 -63 -58 -54 -50 -51 -47 -45 -43 -40 -37 -34 -32 -29 -27 -26 -23 -16 -14 -8 -8 -3 -8 -10 -10 -11 -9 -7 -6 -5 --61 --120 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -4 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -124 -115 -105 -99 -92 -82 -6 --60 --118 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --117 --109 --103 --94 --84 --82 --75 --74 --67 --65 --59 --57 --52 --48 --43 --44 --40 --41 --36 --31 --32 --28 --24 --22 --20 --19 --18 --15 --18 --15 --16 --14 -119 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -114 -105 -98 -91 -15 --52 --112 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --119 -22 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -120 -112 -99 -93 -81 -76 -67 -64 -59 -53 -51 -47 -45 -44 -37 -34 -35 -33 -32 -25 -24 -19 -18 -20 -16 -17 -15 -15 -12 -12 -11 -8 -8 -8 -6 -6 -6 -5 --62 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --117 --108 --101 --92 --87 --78 --71 --68 --65 --62 --60 --56 --52 --47 --42 --40 --37 --36 --35 --32 --30 --32 --29 --31 --27 --26 --26 --23 --25 --21 --18 -120 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -113 -105 -98 -90 -14 --53 --112 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -14 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -116 -109 -97 -90 -87 -82 -7 --60 --118 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -21 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -116 -106 -99 -87 -82 -72 --2 --68 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -16 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -117 -106 -98 -90 -84 -77 -2 --63 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -17 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -120 -111 -102 -96 -88 -81 -74 -70 -68 -61 -58 -53 -51 -44 -41 -36 -34 -27 -25 -26 -26 -26 -21 -19 -16 -15 -12 -11 -11 -9 -8 -8 -6 -5 -9 -11 -10 -9 --58 --118 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --120 --113 --103 --93 --86 --85 --78 --76 --70 --68 --62 --61 --55 --52 --48 --43 --43 --38 --33 --34 --30 --31 --30 --25 --22 --20 --18 --16 --15 --11 --13 -121 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -113 -104 -97 -91 -83 -78 -73 -63 -60 -57 -53 -50 -42 -41 -38 -35 -32 -30 -28 -26 -23 -22 -21 -15 -14 -16 -13 -14 -12 -13 -16 -14 -15 -10 -10 -5 --61 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -3 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -114 -106 -93 -86 -75 -0 --65 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --113 --104 --102 --94 --89 --82 --81 --74 --72 --66 --64 --58 --53 --48 --44 --44 --40 --35 --30 --26 --27 --25 --26 --24 --24 --20 --18 --14 --16 --14 --17 --16 -118 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -115 -103 -97 -93 -86 -83 -76 -76 -70 -65 -55 -51 -43 -41 -33 -32 -28 -27 -25 -24 -22 -24 -21 -22 -18 -16 -14 -12 -11 -5 -5 -1 -2 -4 -2 -4 --63 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -6 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -117 -107 -98 -90 -85 -78 -4 --63 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -19 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -111 -102 -93 -89 -82 -6 --60 --118 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -16 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -119 -110 -105 -97 -88 -84 -8 --58 --117 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -15 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -114 -105 -100 -92 -84 -9 --58 --117 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --120 --109 --105 --96 --87 --80 --71 --66 --60 --54 --53 --50 --48 --46 --44 --42 --39 --34 --32 --29 --26 --24 --27 --26 --27 --25 --26 --24 --24 --18 --16 --12 -119 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -116 -107 -99 -94 -89 -80 -73 -68 -64 -55 -52 -46 -43 -41 -37 -35 -34 -32 -31 -25 -24 -19 -18 -16 -15 -15 -17 -18 -17 -16 -13 -14 -10 -8 -5 -4 --63 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --118 --108 --103 --95 --90 --84 --82 --74 --72 --65 --60 --55 --51 --45 --39 --42 --37 --38 --33 --32 --29 --27 --26 --24 --24 --21 --18 --19 --16 --14 --17 -118 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -116 -107 -100 -96 -20 --48 --108 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -17 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -113 -106 -94 -88 -81 -77 -72 -67 -62 -61 -57 -56 -50 -47 -42 -38 -32 -31 -31 -28 -26 -20 -18 -15 -13 -13 -11 -11 -14 -13 -13 -12 -12 -7 -6 -4 -4 --2 --68 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --118 --111 --101 --91 --84 --82 --76 --75 --69 --67 --62 --60 --55 --51 --46 --47 --42 --42 --39 --32 --31 --28 --27 --24 --25 --22 --24 --22 --19 --21 --17 -118 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -112 -105 -96 -89 -12 --54 --114 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -19 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -120 -111 -102 -96 -89 -78 -3 --63 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -17 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -120 -113 -107 -99 -86 -80 -5 --61 --120 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -21 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -117 -107 -100 -88 -82 -75 -1 --65 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --119 -21 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -113 -106 -98 -90 -85 -79 -72 -66 -59 -56 -52 -44 -40 -35 -34 -31 -30 -25 -24 -21 -20 -14 -14 -11 -10 -11 -6 -5 -9 -9 -9 -7 -8 -8 -5 -5 -5 --61 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --116 --106 --96 --89 --87 --81 --79 --73 --70 --65 --61 --57 --57 --52 --51 --46 --39 --38 --33 --31 --28 --30 --27 --30 --26 --23 --19 --15 --18 --15 --18 -118 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -117 -105 -98 -87 -80 -78 -71 -68 -64 -60 -51 -48 -41 -38 -38 -37 -36 -29 -28 -25 -23 -23 -20 -19 -18 -13 -13 -11 -11 -11 -9 -9 -8 -7 -7 -10 --57 --117 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --119 --114 --105 --100 --92 --89 --81 --78 --70 --61 --59 --53 --51 --47 --47 --42 --42 --38 --32 --29 --24 --25 --22 --23 --22 --25 --21 --24 --20 --17 --12 -124 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -116 -106 -97 -92 -16 --52 --111 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -19 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -117 -110 -96 -91 -81 -76 -67 -62 -61 -59 -54 -51 -48 -41 -39 -32 -30 -31 -27 -27 -25 -24 -18 -18 -18 -13 -12 -15 -14 -15 -9 -10 -12 -11 -11 -12 -12 -9 --58 --118 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --116 --106 --98 --90 --80 --76 --70 --66 --62 --58 --52 --49 --43 --42 --39 --38 --36 --36 --32 --29 --25 --26 --24 --25 --23 --23 --18 --17 --14 --13 -121 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -124 -112 -105 -96 -90 -86 -79 -72 -65 -61 -58 -55 -49 -45 -36 -34 -27 -26 -21 -20 -20 -24 -23 -23 -22 -20 -20 -17 -14 -12 -10 -10 -10 -9 -8 -2 -2 --64 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -7 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -113 -103 -97 -91 -83 -8 --59 --118 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -16 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -113 -101 -94 -86 -80 -5 --61 --120 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --120 --111 --102 --95 --85 --78 --77 --70 --67 --62 --56 --56 --51 --52 --47 --42 --39 --34 --37 --32 --34 --30 --26 --26 --19 --17 --14 --16 --15 --18 --16 --16 -118 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -115 -103 -100 -93 -17 --51 --110 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -16 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -124 -117 -108 -101 -93 -86 -81 -6 --60 --119 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -16 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -118 -111 -99 -98 -93 -88 -83 -76 -70 -64 -55 -50 -42 -44 -40 -38 -32 -30 -22 -22 -19 -17 -18 -16 -16 -20 -18 -18 -17 -17 -11 -10 -7 -6 -3 -4 -8 -7 --60 --120 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --117 --108 --99 --92 --90 --82 --77 --69 --64 --59 --54 --53 --50 --47 --49 --45 --46 --43 --44 --39 --36 --36 --31 --32 --28 --24 --25 --21 --16 --18 --16 -116 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -115 -106 -99 -91 -84 -78 -71 -66 -63 -54 -51 -44 -40 -41 -39 -38 -34 -32 -31 -25 -24 -21 -19 -24 -22 -21 -15 -15 -11 -10 -10 -7 -6 -6 -4 -5 --62 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -6 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -114 -105 -97 -91 -86 -82 -7 --59 --118 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -16 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -107 -99 -88 -82 -75 -1 --65 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -13 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -115 -106 -98 -93 -85 -80 -5 --61 --120 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -14 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -109 -101 -92 -89 -82 -7 --59 --118 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --112 --104 --97 --92 --84 --78 --73 --66 --61 --61 --58 --58 --53 --52 --48 --44 --40 --42 --37 --39 --36 --29 --28 --24 --26 --21 --24 --20 --17 --18 --16 --18 -116 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -120 -112 -103 -97 -93 -17 --50 --110 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --118 -23 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -117 -109 -97 -91 -83 -77 -2 --63 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --120 -22 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -112 -109 -102 -97 -91 -86 -10 --57 --116 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -13 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -118 -108 -100 -91 -85 -81 -75 -72 -65 -63 -57 -55 -50 -46 -44 -39 -34 -30 -26 -24 -22 -20 -19 -12 -12 -9 -9 -9 -4 -3 -6 -6 -8 -4 -5 -1 -2 -2 --65 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --118 --109 --105 --96 --93 --85 --80 --75 --68 --62 --61 --56 --51 --47 --43 --41 --39 --33 --31 --26 --27 --25 --26 --24 --24 --22 --21 --19 --22 --20 --22 -114 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -117 -110 -102 -98 -94 -84 -80 -70 -67 -61 -57 -53 -49 -45 -41 -35 -35 -33 -34 -33 -31 -30 -30 -26 -24 -21 -19 -13 -12 -9 -9 -12 -12 -12 -14 -11 -10 --57 --117 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -7 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -113 -105 -100 -97 -89 -83 -8 --59 --118 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -20 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -112 -106 -99 -90 -82 -7 --60 --118 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -20 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -117 -109 -102 -91 -86 -76 -2 --64 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --116 --112 --99 --92 --84 --80 --73 --69 --62 --60 --56 --54 --48 --44 --43 --41 --39 --35 --32 --28 --28 --27 --28 --26 --26 --23 --19 --16 --18 --16 --18 --17 -118 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -124 -115 -108 -98 -92 -86 -78 -73 -69 -63 -60 -53 -50 -47 -40 -38 -34 -32 -34 -32 -31 -24 -23 -18 -17 -16 -14 -13 -11 -10 -10 -7 -4 -5 -4 -4 -4 --62 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --120 --111 --101 --97 --89 --85 --78 --72 --66 --63 --58 --52 --52 --48 --48 --45 --39 --35 --31 --32 --29 --31 --27 --25 --20 --16 --18 --16 --16 --16 --15 -120 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -115 -106 -100 -90 -14 --53 --113 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -16 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -124 -117 -108 -101 -96 -92 -85 -81 -72 -68 -61 -57 -52 -46 -44 -36 -34 -28 -28 -22 -20 -22 -20 -20 -19 -19 -14 -13 -15 -12 -13 -11 -11 -8 -7 -7 -2 -3 --1 --67 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --113 --110 --101 --99 --91 --88 --81 --77 --70 --68 --61 --57 --54 --48 --47 --42 --42 --37 --38 --33 --27 --28 --25 --26 --23 --24 --22 --20 --17 --18 --15 -122 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -115 -107 -95 -89 -14 --54 --113 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -12 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -117 -105 -98 -95 -87 -83 -76 -72 -62 -60 -52 -48 -48 -43 -41 -38 -36 -30 -27 -22 -21 -23 -20 -20 -17 -21 -19 -20 -20 -17 -17 -14 -14 -12 -11 -9 -7 -8 --59 --118 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -5 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -112 -102 -97 -90 -85 -78 -4 --62 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -11 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -120 -111 -104 -91 -85 -83 -7 --59 --118 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --115 --107 --97 --89 --88 --80 --77 --69 --65 --58 --57 --52 --50 --44 --42 --40 --36 --38 --36 --37 --34 --34 --30 --28 --26 --27 --26 --20 --15 --13 --13 --11 -121 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -124 -114 -108 -100 -94 -18 --50 --110 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -18 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -124 -117 -111 -103 -95 -88 -82 -7 --59 --118 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -15 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -118 -109 -100 -94 -89 -83 -8 --59 --117 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -15 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -124 -116 -109 -98 -91 -81 -6 --60 --119 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -18 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -116 -111 -103 -98 -88 -83 -8 --59 --118 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -17 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -112 -102 -94 -88 -79 -72 -66 -62 -57 -55 -50 -46 -40 -37 -33 -31 -24 -23 -20 -18 -18 -13 -14 -15 -11 -12 -8 -8 -12 -8 -8 -8 -8 -6 -6 -6 -1 --65 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --120 --111 --106 --98 --92 --82 --75 --67 --66 --60 --59 --55 --53 --50 --47 --44 --44 --39 --40 --35 --29 --30 --26 --28 --24 --26 --22 --19 --14 --11 --13 -121 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -116 -108 -94 -89 -78 -74 -66 -62 -59 -58 -56 -51 -50 -49 -46 -38 -36 -29 -27 -24 -23 -22 -20 -19 -15 -14 -13 -11 -11 -10 -9 -10 -12 -12 -12 -11 --56 --116 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -2 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -118 -111 -100 -94 -85 -78 -4 --62 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --116 --110 --102 --95 --90 --81 --74 --71 --65 --58 --55 --53 --49 --51 --46 --45 --38 --35 --30 --33 --29 --31 --28 --30 --27 --26 --23 --25 --22 --18 --18 --16 -119 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -118 -114 -107 -101 -90 -85 -78 -71 -68 -66 -63 -58 -54 -49 -45 -37 -35 -30 -28 -26 -20 -20 -22 -17 -18 -12 -10 -12 -10 -11 -8 -8 -7 -8 -6 -2 -5 --62 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -12 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -118 -111 -103 -96 -90 -84 -79 -4 --62 --120 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -17 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -114 -105 -97 -85 -80 -73 --1 --67 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -24 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -114 -106 -98 -92 -89 -83 -7 --59 --118 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --119 -22 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -118 -105 -98 -89 -83 -73 --1 --66 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --117 --108 --97 --89 --85 --80 --76 --71 --67 --60 --56 --49 --48 --44 --43 --40 --40 --37 --38 --34 --35 --31 --29 --26 --23 --25 --21 --22 --20 --15 --16 --12 -119 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -111 -105 -99 -91 -86 -85 -78 -74 -65 -61 -52 -49 -44 -42 -39 -36 -34 -30 -28 -27 -23 -22 -21 -19 -18 -21 -19 -18 -19 -16 -14 -14 -14 -10 -7 -6 --61 --120 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -9 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -120 -113 -103 -95 -86 -81 -6 --60 --119 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -16 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -116 -108 -99 -93 -85 -79 -4 --62 --120 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --117 --108 --98 --91 --84 --79 --72 --66 --67 --62 --62 --57 --57 --52 --48 --42 --35 --36 --32 --34 --30 --31 --28 --29 --26 --24 --22 --21 --19 --16 --19 --17 -121 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -117 -109 -101 -92 -86 -79 -71 -69 -63 -59 -57 -54 -50 -45 -42 -40 -35 -34 -30 -29 -25 -22 -18 -19 -17 -10 -10 -5 -6 -1 -2 -3 -2 -2 -3 -2 --64 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --117 --109 --100 --95 --85 --76 --72 --69 --65 --60 --56 --49 --45 --47 --44 --43 --41 --39 --34 --29 --25 --26 --24 --26 --20 --19 --16 --19 --17 --19 --17 -114 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -111 -104 -96 -90 -14 --54 --113 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --119 -26 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -120 -110 -103 -95 -88 -82 -7 --59 --118 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -14 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -119 -111 -104 -96 -90 -82 -75 -69 -63 -59 -52 -49 -49 -46 -44 -37 -35 -31 -28 -27 -24 -23 -18 -17 -18 -14 -14 -10 -10 -9 -9 -5 -5 -8 -7 -7 -6 -7 --60 --119 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --120 --112 --102 --96 --87 --82 --76 --73 --67 --64 --58 --54 --48 --45 --45 --41 --40 --36 --31 --30 --29 --29 --29 --27 --27 --23 --19 --20 --19 --18 --14 -120 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -109 -101 -90 -85 -9 --57 --116 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --118 -25 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -116 -109 -101 -94 -89 -82 -76 -72 -63 -60 -61 -58 -55 -47 -44 -38 -34 -33 -29 -27 -25 -23 -21 -15 -15 -10 -8 -12 -8 -14 -14 -15 -15 -13 -11 -9 -7 -7 --59 --119 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -9 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -117 -108 -101 -89 -83 -73 --1 --66 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --112 --106 --99 --93 --88 --81 --74 --73 --67 --66 --60 --56 --51 --51 --47 --41 --38 --32 --32 --29 --30 --27 --28 --25 --27 --24 --26 --24 --18 --20 --16 --18 -118 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -117 -105 -98 -94 -85 -81 -72 -68 -62 -59 -49 -47 -40 -37 -38 -36 -34 -32 -30 -29 -22 -22 -16 -14 -16 -16 -16 -15 -14 -8 -8 -8 -6 -6 -6 -4 --62 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -11 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -114 -108 -97 -90 -81 -6 --60 --119 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -16 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -118 -106 -100 -98 -92 -87 -12 --55 --115 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -18 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -111 -104 -100 -93 -88 -81 -6 --60 --119 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -17 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -118 -110 -102 -94 -89 -85 -10 --57 --116 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --120 --111 --107 --98 --92 --86 --77 --71 --68 --65 --61 --57 --53 --47 --43 --46 --41 --43 --39 --39 --35 --36 --32 --29 --28 --22 --18 --15 --12 --10 --12 --11 --16 -119 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -112 -105 -97 -90 -84 -81 -78 -72 -68 -62 -59 -54 -50 -46 -43 -38 -34 -32 -31 -25 -22 -18 -16 -14 -14 -9 -9 -7 -6 -6 -6 -6 -4 -1 -3 -4 --63 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --112 --107 --98 --94 --86 --83 --74 --69 --62 --54 --53 --47 --47 --42 --42 --38 --36 --33 --32 --30 --25 --21 --19 --17 --16 --13 --14 --13 --15 --15 -118 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -114 -104 -96 -89 -13 --54 --113 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -22 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -120 -111 -101 -97 -90 -82 -76 -65 -60 -52 -49 -41 -38 -38 -36 -36 -30 -29 -22 -22 -24 -21 -21 -19 -18 -16 -15 -15 -12 -11 -11 -9 -9 -8 -7 -7 -2 -2 --65 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --114 --105 --99 --93 --88 --84 --77 --71 --63 --57 --52 --54 --50 --52 --47 --44 --41 --38 --33 --28 --28 --21 --20 --18 --21 --19 --21 --20 --22 --20 --20 -115 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -117 -109 -101 -89 -13 --54 --113 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --118 -24 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -113 -106 -99 -90 -83 -7 --59 --118 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -18 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -114 -106 -98 -92 -86 -78 -4 --62 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -22 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -124 -114 -107 -96 -87 -80 -5 --61 --120 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -17 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -114 -106 -99 -94 -86 -80 -75 -70 -65 -57 -51 -50 -47 -44 -42 -41 -38 -35 -31 -30 -27 -27 -24 -21 -19 -20 -15 -13 -11 -10 -5 -5 -0 --1 -2 -2 -6 -6 --60 --120 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --115 --103 --99 --91 --87 --81 --77 --72 --68 --63 --61 --56 --52 --48 --45 --45 --40 --40 --35 --36 --31 --27 --25 --23 --22 --20 --17 --18 --17 --15 --12 -124 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -118 -111 -103 -97 -95 -89 -84 -80 -75 -65 -60 -51 -47 -42 -40 -35 -32 -30 -24 -21 -22 -20 -19 -18 -18 -12 -12 -7 -7 -10 -10 -10 -9 -8 -8 -3 -4 --63 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -8 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -109 -102 -91 -86 -79 -74 -0 --65 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --116 --107 --103 --94 --88 --82 --76 --72 --66 --64 --58 --57 --51 --45 --44 --40 --41 --36 --35 --34 --29 --30 --27 --28 --24 --21 --19 --16 --18 --15 --12 --13 -123 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -117 -111 -102 -93 -87 -82 -74 -68 -61 -57 -52 -50 -44 -41 -36 -33 -30 -29 -22 -21 -16 -16 -11 -9 -12 -11 -14 -13 -15 -11 -10 -8 -7 -5 -4 -5 --62 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -10 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -120 -113 -101 -95 -85 -81 -78 -4 --62 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -16 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -115 -108 -101 -91 -86 -81 -6 --60 --119 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -21 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -114 -106 -98 -85 -80 -5 --61 --120 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -18 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -116 -107 -100 -91 -85 -9 --57 --116 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --119 --112 --105 --99 --90 --83 --75 --68 --65 --59 --54 --52 --49 --46 --45 --42 --39 --37 --32 --30 --32 --29 --32 --28 --29 --26 --28 --24 --23 --19 --14 --14 -121 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -119 -112 -101 -94 -91 -86 -81 -72 -68 -62 -59 -50 -48 -43 -41 -38 -35 -33 -31 -28 -28 -28 -28 -26 -24 -23 -23 -18 -15 -12 -13 -10 -11 -5 -6 -4 -3 --63 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --111 --107 --99 --96 --88 --85 --78 --72 --66 --66 --59 --53 --49 --43 --42 --38 --37 --34 --36 --33 --34 --30 --26 --27 --24 --26 --22 --19 --17 --15 --18 -118 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -120 -114 -104 -97 -88 -80 -72 -67 -59 -53 -51 -50 -47 -40 -38 -34 -32 -29 -26 -25 -24 -22 -21 -22 -21 -14 -13 -10 -9 -10 -5 -5 -3 -3 -3 --1 --67 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -10 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -117 -106 -100 -96 -86 -81 -6 --60 --119 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --111 --107 --98 --95 --87 --83 --75 --70 --63 --58 --56 --51 --47 --44 --44 --39 --36 --36 --34 --28 --26 --23 --22 --17 --17 --13 --15 --14 --15 --14 --16 -119 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -119 -112 -99 -93 -82 -76 -74 -67 -63 -58 -54 -46 -44 -37 -36 -29 -29 -30 -27 -28 -29 -26 -25 -22 -22 -17 -16 -17 -16 -12 -11 -9 -7 -3 -3 -0 --66 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --116 --108 --100 --92 --89 --81 --78 --72 --67 --61 --58 --57 --51 --51 --45 --40 --40 --37 --33 --30 --26 --28 --25 --21 --23 --20 --23 --19 --16 --18 --14 -120 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -117 -108 -98 -91 -15 --52 --112 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -22 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -114 -102 -96 -89 -84 -83 -8 --59 --117 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -22 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -118 -111 -99 -93 -82 -78 -68 -64 -62 -59 -57 -49 -46 -42 -39 -38 -34 -32 -30 -27 -25 -27 -25 -25 -24 -22 -21 -17 -17 -16 -11 -8 -6 -5 -0 -1 --1 -0 --66 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -10 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -112 -105 -97 -91 -84 -77 -3 --63 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -15 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -124 -115 -106 -99 -92 -84 -8 --58 --117 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --116 --105 --98 --95 --88 --83 --78 --72 --67 --60 --54 --52 --49 --45 --47 --42 --43 --40 --41 --36 --32 --31 --28 --28 --25 --27 --24 --18 --18 --14 --16 --14 -116 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -117 -109 -96 -90 -78 -74 -68 -63 -59 -55 -52 -48 -43 -41 -39 -35 -33 -31 -28 -27 -24 -22 -22 -18 -16 -22 -20 -18 -14 -14 -15 -12 -10 -4 -4 -1 --65 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --119 --111 --103 --92 --85 --76 --73 --67 --65 --60 --58 --55 --50 --46 --46 --41 --39 --36 --35 --32 --29 --31 --27 --29 --25 --27 --25 --19 --19 --16 --15 -121 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -118 -105 -99 -91 -15 --53 --112 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -16 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -113 -105 -95 -91 -84 -9 --58 --117 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -19 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -108 -100 -89 -82 -73 --1 --66 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --119 -22 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -110 -101 -93 -86 -82 -7 --59 --118 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -20 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -114 -104 -98 -89 -85 -78 -70 -65 -61 -56 -47 -43 -35 -33 -27 -26 -24 -22 -21 -17 -17 -12 -13 -16 -13 -13 -11 -12 -10 -9 -9 -5 -4 -6 -7 -8 -6 --61 --120 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -8 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -119 -106 -100 -88 -84 -80 -5 --61 --120 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -14 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -118 -112 -104 -93 -85 -78 -4 --63 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -19 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -120 -110 -102 -95 -85 -79 -4 --62 --120 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --118 --110 --103 --97 --90 --83 --76 --68 --67 --58 --54 --48 --46 --46 --43 --41 --37 --33 --32 --31 --30 --30 --28 --28 --25 --24 --21 --17 --17 --17 --16 --17 -117 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -118 -106 -99 -90 -84 -78 -70 -66 -57 -54 -51 -50 -48 -45 -43 -42 -37 -37 -33 -32 -28 -24 -23 -22 -18 -14 -12 -12 -6 -6 -1 -2 -3 -2 -2 -6 --61 --120 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --119 --111 --100 --91 --89 --82 --81 --74 --73 --66 --64 --53 --48 --43 --43 --41 --36 --34 --29 --30 --27 --27 --25 --24 --24 --20 --18 --16 --13 --11 --13 -121 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -114 -106 -98 -90 -14 --53 --112 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -21 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -120 -108 -102 -94 -89 -84 -78 -3 --63 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -18 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -111 -102 -94 -88 -80 -5 --61 --120 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -17 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -124 -117 -105 -98 -95 -86 -82 -76 -72 -65 -61 -57 -49 -47 -40 -38 -37 -34 -33 -30 -28 -27 -23 -21 -20 -17 -17 -20 -18 -18 -11 -11 -9 -7 -7 -8 -8 -3 -4 --63 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --114 --105 --97 --88 --81 --81 --75 --74 --68 --67 --61 --60 --54 --52 --43 --38 --35 --30 --26 --28 --25 --25 --20 --21 --20 --21 --21 --20 --18 --21 --18 -114 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -114 -106 -94 -88 -80 -74 -67 -63 -59 -53 -50 -47 -42 -40 -37 -31 -30 -24 -23 -25 -21 -21 -19 -17 -15 -14 -14 -16 -16 -16 -14 -15 -14 -11 -8 -7 --60 --119 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -6 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -118 -110 -102 -92 -85 -77 -2 --64 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --113 --102 --95 --93 --86 --85 --78 --76 --70 --67 --60 --57 --52 --49 --44 --37 --38 --34 --34 --31 --32 --28 --30 --26 --27 --24 --26 --22 --20 --20 --17 --19 -118 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -120 -112 -103 -96 -91 -80 -76 -72 -66 -62 -62 -60 -56 -47 -44 -39 -36 -34 -30 -28 -26 -22 -20 -16 -15 -15 -13 -12 -17 -16 -16 -16 -13 -10 -8 -8 -6 --61 --120 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -7 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -116 -107 -100 -94 -82 -78 -3 --63 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --116 --105 --97 --88 --81 --80 --73 --72 --67 --66 --60 --58 --53 --50 --45 --47 --42 --42 --37 --37 --35 --28 --25 --21 --24 --20 --23 --20 --16 --18 --16 --14 -122 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -120 -112 -105 -98 -88 -12 --55 --114 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --118 -22 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -114 -105 -98 -90 -82 -7 --60 --118 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -17 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -114 -102 -96 -89 -82 -75 -70 -67 -58 -56 -48 -44 -44 -43 -41 -35 -34 -30 -26 -26 -23 -22 -22 -20 -19 -17 -16 -15 -12 -11 -10 -9 -8 -13 -12 -12 -12 -10 --57 --117 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -10 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -120 -112 -107 -100 -92 -86 -79 -5 --62 --120 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -23 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -117 -111 -100 -94 -85 -81 -6 --61 --119 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -18 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -119 -112 -102 -95 -89 -81 -6 --60 --119 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -18 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -110 -101 -94 -87 -76 -2 --64 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -19 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -115 -104 -97 -90 -85 -74 -0 --66 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --120 --113 --104 --102 --93 --91 --83 --80 --74 --66 --58 --52 --50 --46 --44 --38 --36 --33 --32 --29 --28 --26 --23 --26 --24 --24 --23 --22 --19 --16 --13 --16 --14 -118 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -118 -111 -104 -92 -85 -75 -70 -63 -58 -55 -51 -48 -43 -40 -38 -34 -32 -29 -26 -25 -18 -19 -21 -17 -16 -14 -13 -11 -10 -10 -6 -6 -6 -5 -5 -6 --61 --120 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --113 --109 --102 --97 --90 --84 --78 --76 --70 --68 --62 --58 --54 --50 --50 --44 --44 --40 --34 --28 --24 --25 --22 --22 --19 --23 --20 --23 --21 --23 --22 -118 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -117 -110 -100 -93 -17 --50 --110 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -20 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -116 -106 -98 -91 -86 -81 -73 -68 -61 -58 -49 -46 -41 -38 -36 -33 -32 -34 -31 -30 -30 -28 -21 -20 -15 -13 -10 -9 -9 -7 -6 -7 -5 -5 -4 -3 -4 -2 --65 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --115 --107 --97 --93 --87 --84 --79 --74 --68 --61 --55 --53 --50 --48 --46 --43 --39 --37 --32 --32 --29 --29 --23 --22 --19 --19 --17 --18 --15 --17 --16 -116 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -110 -104 -97 -93 -17 --51 --110 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -12 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -119 -111 -97 -91 -80 -75 -1 --65 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --118 -25 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -116 -106 -98 -89 -84 -9 --58 --117 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -15 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -120 -114 -106 -98 -92 -86 -10 --57 --116 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -21 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -124 -118 -108 -102 -95 -90 -79 -74 -68 -64 -60 -55 -51 -46 -42 -40 -33 -32 -26 -24 -26 -25 -25 -24 -22 -21 -17 -15 -15 -10 -10 -5 -6 -10 -11 -10 -11 -11 -10 --58 --117 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --118 --113 --104 --95 --86 --77 --72 --67 --63 --60 --55 --50 --50 --47 --46 --43 --40 --36 --38 --35 --32 --29 --26 --25 --22 --25 --22 --20 --22 --19 --21 -115 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -114 -108 -101 -89 -13 --54 --114 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -21 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -113 -102 -95 -88 -83 -7 --59 --118 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -20 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -114 -102 -94 -86 -80 -69 -65 -59 -55 -52 -45 -43 -36 -35 -29 -28 -30 -26 -26 -24 -23 -21 -20 -19 -17 -16 -16 -12 -12 -11 -5 -6 -9 -7 -8 -6 -5 --62 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --118 --109 --101 --93 --85 --83 --76 --75 --68 --63 --59 --53 --54 --48 --48 --43 --36 --36 --31 --31 --28 --26 --23 --26 --23 --26 --23 --20 --16 --13 --16 -120 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -112 -104 -92 -87 -76 -72 -66 -63 -60 -55 -52 -52 -49 -46 -44 -43 -36 -33 -28 -26 -22 -20 -18 -13 -12 -10 -10 -10 -6 -6 -8 -5 -6 -2 -3 --1 --67 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -9 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -120 -112 -100 -93 -90 -85 -81 -6 --61 --119 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -15 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -114 -108 -100 -95 -89 -13 --54 --114 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --112 --100 --95 --86 --82 --75 --71 --67 --62 --56 --52 --46 --42 --45 --41 --38 --35 --37 --33 --34 --31 --32 --28 --26 --23 --20 --22 --20 --18 --17 --14 -121 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -113 -106 -95 -90 -87 -82 -78 -74 -70 -64 -57 -54 -51 -45 -40 -36 -34 -27 -25 -21 -20 -19 -17 -16 -10 -10 -5 -5 -8 -6 -6 -6 -7 -2 -3 -5 --61 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -8 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -115 -108 -99 -92 -83 -80 -5 --61 --120 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --118 --108 --100 --90 --87 --79 --76 --71 --68 --63 --60 --54 --54 --49 --47 --42 --44 --38 --37 --33 --28 --30 --28 --22 --22 --19 --18 --16 --19 --17 --20 --17 -124 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -114 -107 -101 -91 -15 --52 --112 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -17 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -118 -113 -103 -97 -90 -85 -79 -72 -65 -63 -59 -53 -46 -42 -40 -35 -32 -30 -26 -25 -18 -18 -13 -12 -15 -12 -12 -12 -12 -16 -14 -15 -9 -9 -4 -4 -0 -1 --66 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --118 --109 --102 --93 --87 --81 --76 --71 --66 --60 --57 --50 --49 --45 --44 --42 --40 --35 --32 --29 --26 --23 --21 --26 --24 --26 --23 --20 --18 --16 --15 -122 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -112 -103 -96 -88 -12 --55 --114 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -18 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -119 -111 -100 -93 -90 -81 -6 --60 --119 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -12 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -119 -110 -102 -95 -84 -80 -5 --61 --120 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -15 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -113 -104 -96 -91 -84 -8 --58 --117 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -16 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -119 -110 -102 -95 -84 -79 -72 -68 -62 -57 -53 -49 -46 -44 -40 -37 -33 -30 -29 -22 -22 -22 -23 -21 -20 -21 -21 -20 -12 -11 -4 -5 -2 -3 -4 -3 -4 -2 --64 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --120 --112 --104 --96 --93 --87 --84 --78 --74 --68 --67 --61 --61 --56 --52 --51 --45 --44 --39 --32 --32 --28 --26 --24 --23 --23 --21 --23 --20 --22 --18 --16 -116 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -112 -105 -97 -91 -85 -73 -70 -67 -61 -56 -52 -48 -46 -39 -37 -37 -32 -31 -29 -27 -22 -22 -23 -22 -20 -14 -13 -10 -10 -9 -8 -7 -3 -3 -6 -2 --64 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -12 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -118 -109 -105 -98 -86 -81 -6 --60 --119 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --118 --109 --102 --91 --84 --83 --77 --73 --69 --63 --59 --55 --48 --44 --46 --38 --36 --31 --33 --30 --30 --26 --24 --27 --24 --27 --25 --23 --21 --19 --15 --12 -119 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -124 -112 -104 -96 -90 -81 -75 -71 -64 -59 -54 -50 -48 -42 -39 -37 -31 -28 -30 -26 -25 -22 -25 -23 -22 -22 -21 -16 -15 -12 -12 -12 -10 -8 -6 -6 -8 --59 --119 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -8 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -124 -114 -108 -100 -96 -90 -82 -7 --59 --118 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -14 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -114 -107 -99 -93 -87 -80 -5 --61 --120 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -18 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -118 -109 -102 -91 -86 -76 -2 --64 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 -19 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -119 -109 -101 -94 -89 -84 -9 --58 --116 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --121 --118 --114 --103 --99 --90 --85 --72 --66 --60 --59 --54 --54 --50 --50 --45 --45 --40 --37 --35 --28 --26 +-22 +-25 +-22 +-24 +-22 +-26 +-25 +-19 +-17 +-12 +123 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +111 +103 +96 +91 +14 +-53 +-112 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +15 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +109 +103 +95 +90 +81 +6 +-61 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +12 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +110 +102 +90 +84 +77 +71 +65 +62 +60 +56 +48 +45 +38 +36 +32 +31 +29 +26 +26 +20 +19 +20 +17 +17 +16 +15 +18 +16 +17 +12 +11 +8 +7 +6 +5 +4 +4 +-63 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +6 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +112 +106 +98 +86 +80 +5 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +20 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +103 +98 +90 +85 +9 +-57 +-116 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +21 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +108 +100 +93 +86 +80 +5 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +113 +105 +100 +92 +86 +10 +-57 +-116 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +111 +104 +97 +89 +83 +8 +-59 +-118 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-112 +-103 +-100 +-91 +-88 +-80 +-78 +-70 +-64 +-56 +-50 +-47 +-43 +-41 +-37 +-35 +-30 +-31 +-28 +-29 +-27 +-27 +-22 +-22 +-17 +-19 +-17 +-19 +-18 +-21 +-18 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +117 +107 +100 +93 +85 +80 +75 +69 +65 +63 +61 +58 +48 +46 +38 +36 +31 +30 +26 +24 +24 +18 +16 +18 +17 +17 +14 +13 +13 +8 +7 +10 +6 +7 +5 +5 +-62 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-112 +-103 +-98 +-90 +-86 +-79 +-77 +-70 +-64 +-61 +-55 +-54 +-48 +-49 +-43 +-40 +-37 +-33 +-32 +-31 +-27 +-27 +-26 +-20 +-19 +-16 +-16 +-15 +-17 +-15 +117 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +117 +105 +98 +89 +13 +-54 +-113 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +112 +103 +97 +90 +86 +76 +72 +65 +61 +51 +49 +44 +41 +38 +35 +33 +30 +27 +26 +21 +20 +21 +17 +17 +15 +15 +12 +11 +11 +8 +7 +7 +6 +6 +10 +11 +10 +-57 +-116 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-116 +-106 +-98 +-94 +-88 +-84 +-76 +-72 +-65 +-63 +-58 +-58 +-52 +-51 +-48 +-44 +-41 +-42 +-37 +-36 +-33 +-31 +-30 +-24 +-19 +-18 +-16 +-15 +-12 +-14 +-13 +119 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +116 +107 +100 +94 +17 +-50 +-110 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +110 +103 +96 +90 +85 +84 +8 +-58 +-117 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +108 +102 +92 +86 +84 +80 +5 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +118 +105 +98 +87 +82 +75 +1 +-65 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +104 +96 +88 +82 +70 +65 +58 +54 +50 +46 +44 +38 +36 +36 +30 +29 +26 +25 +24 +22 +21 +17 +15 +14 +14 +12 +12 +11 +10 +9 +12 +14 +12 +8 +7 +6 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-120 +-117 +-106 +-100 +-91 +-86 +-82 +-76 +-73 +-66 +-60 +-57 +-54 +-51 +-48 +-42 +-38 +-37 +-36 +-36 +-35 +-35 +-31 +-32 +-29 +-30 +-26 +-24 +-22 +-19 +-22 +-18 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +109 +99 +94 +17 +-50 +-110 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +112 +106 +98 +94 +86 +11 +-56 +-115 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +14 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +115 +105 +98 +91 +84 +77 +66 +62 +54 +51 +49 +45 +42 +39 +38 +38 +31 +30 +24 +23 +21 +20 +19 +17 +16 +14 +13 +13 +9 +9 +9 +3 +2 +4 +3 +4 +4 +-63 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-115 +-106 +-96 +-91 +-86 +-82 +-78 +-73 +-68 +-64 +-57 +-55 +-50 +-49 +-46 +-44 +-39 +-36 +-31 +-31 +-29 +-29 +-28 +-28 +-23 +-22 +-18 +-20 +-18 +-20 +-18 +112 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +111 +105 +96 +90 +84 +77 +72 +68 +62 +58 +58 +53 +51 +43 +41 +36 +33 +30 +27 +26 +22 +20 +18 +15 +14 +14 +8 +6 +9 +9 +10 +5 +6 +2 +2 +5 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +3 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +115 +108 +96 +90 +80 +74 +0 +-66 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +19 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +110 +99 +93 +83 +78 +4 +-62 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-120 +-113 +-105 +-97 +-89 +-86 +-79 +-76 +-69 +-64 +-57 +-50 +-50 +-44 +-45 +-40 +-41 +-37 +-34 +-31 +-33 +-30 +-29 +-29 +-24 +-25 +-21 +-19 +-17 +-14 +-14 +-14 +121 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +116 +109 +97 +92 +82 +75 +73 +70 +67 +58 +54 +49 +45 +43 +38 +36 +34 +32 +29 +30 +28 +26 +26 +25 +20 +18 +15 +14 +15 +13 +13 +8 +7 +3 +2 +1 +-65 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +8 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +115 +107 +101 +90 +85 +75 +1 +-65 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-117 +-106 +-98 +-88 +-86 +-79 +-74 +-69 +-62 +-61 +-57 +-54 +-52 +-48 +-45 +-42 +-36 +-32 +-35 +-31 +-34 +-31 +-32 +-29 +-27 +-24 +-22 +-21 +-18 +-17 +-18 +-15 +116 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +113 +104 +98 +91 +15 +-52 +-112 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +21 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +109 +101 +94 +89 +85 +76 +71 +64 +62 +57 +55 +50 +45 +40 +37 +31 +30 +29 +27 +26 +20 +18 +16 +15 +14 +12 +12 +14 +13 +12 +13 +12 +7 +6 +4 +3 +-2 +-68 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-117 +-109 +-101 +-93 +-90 +-83 +-74 +-70 +-64 +-61 +-56 +-52 +-47 +-48 +-44 +-45 +-40 +-38 +-37 +-33 +-34 +-29 +-30 +-26 +-23 +-25 +-21 +-18 +-20 +-16 +-16 +117 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +114 +105 +100 +90 +14 +-53 +-112 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +14 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +113 +104 +97 +86 +79 +5 +-62 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +19 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +117 +105 +97 +94 +85 +81 +6 +-60 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +13 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +110 +102 +96 +87 +81 +6 +-60 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +20 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +113 +106 +97 +91 +86 +77 +71 +70 +65 +62 +55 +51 +46 +43 +36 +34 +28 +26 +28 +26 +26 +22 +21 +23 +18 +18 +13 +18 +16 +16 +12 +12 +12 +11 +8 +7 +5 +6 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-117 +-108 +-98 +-94 +-87 +-84 +-78 +-74 +-69 +-65 +-59 +-54 +-48 +-47 +-42 +-42 +-39 +-38 +-33 +-32 +-27 +-28 +-26 +-27 +-24 +-25 +-23 +-26 +-23 +-23 +-23 +114 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +112 +105 +104 +98 +90 +85 +80 +70 +65 +56 +53 +48 +45 +42 +38 +36 +31 +28 +27 +24 +22 +26 +25 +25 +24 +21 +17 +15 +12 +13 +12 +8 +6 +4 +5 +5 +-62 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +7 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +118 +109 +102 +96 +85 +81 +6 +-61 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-118 +-109 +-102 +-92 +-83 +-79 +-75 +-70 +-67 +-63 +-61 +-56 +-52 +-48 +-43 +-44 +-40 +-38 +-35 +-31 +-32 +-24 +-21 +-18 +-15 +-13 +-17 +-16 +-19 +-18 +-18 +-16 +115 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +116 +108 +99 +94 +86 +82 +76 +68 +63 +59 +49 +46 +39 +36 +36 +34 +33 +30 +28 +27 +23 +22 +21 +14 +12 +15 +12 +17 +17 +16 +17 +15 +12 +10 +7 +7 +-60 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +5 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +104 +95 +89 +83 +7 +-59 +-118 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +15 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +110 +103 +92 +86 +76 +2 +-64 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +14 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +112 +105 +93 +89 +79 +74 +0 +-66 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +13 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +110 +103 +96 +90 +82 +7 +-59 +-118 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-118 +-108 +-101 +-94 +-87 +-79 +-73 +-71 +-65 +-62 +-57 +-54 +-49 +-43 +-41 +-39 +-37 +-33 +-32 +-26 +-24 +-25 +-22 +-19 +-17 +-18 +-18 +-18 +-14 +-14 +-18 +-17 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +114 +108 +100 +95 +85 +79 +70 +64 +59 +55 +47 +45 +38 +35 +36 +33 +32 +30 +28 +27 +21 +20 +15 +13 +16 +13 +13 +12 +12 +9 +8 +8 +6 +6 +6 +4 +-62 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-115 +-107 +-100 +-91 +-83 +-77 +-74 +-71 +-67 +-61 +-58 +-52 +-48 +-49 +-45 +-43 +-39 +-35 +-33 +-32 +-30 +-30 +-27 +-27 +-23 +-19 +-19 +-18 +-17 +-18 +-17 +117 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +114 +106 +97 +91 +15 +-52 +-112 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +14 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +111 +104 +92 +85 +78 +74 +67 +62 +58 +49 +46 +46 +41 +39 +36 +34 +28 +27 +26 +27 +26 +23 +24 +23 +20 +17 +14 +11 +10 +10 +8 +7 +4 +4 +6 +5 +5 +-62 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-117 +-110 +-101 +-93 +-90 +-81 +-77 +-71 +-66 +-59 +-52 +-50 +-47 +-46 +-44 +-40 +-37 +-37 +-34 +-36 +-32 +-29 +-28 +-26 +-27 +-23 +-25 +-23 +-17 +-17 +-14 +121 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +114 +106 +100 +92 +16 +-52 +-111 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +110 +104 +97 +84 +79 +4 +-62 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +111 +103 +97 +89 +82 +7 +-59 +-118 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +117 +110 +98 +93 +82 +77 +3 +-63 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-120 +22 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +115 +106 +99 +88 +82 +75 +69 +66 +57 +56 +51 +48 +46 +39 +37 +34 +32 +31 +27 +26 +23 +21 +20 +15 +14 +15 +15 +15 +9 +10 +8 +8 +8 +7 +7 +7 +2 +2 +-64 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-120 +-115 +-105 +-99 +-91 +-86 +-79 +-73 +-66 +-64 +-59 +-57 +-52 +-52 +-47 +-42 +-42 +-36 +-36 +-33 +-28 +-23 +-19 +-20 +-19 +-20 +-19 +-19 +-16 +-15 +-11 +120 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +114 +106 +100 +92 +86 +79 +74 +70 +63 +58 +54 +49 +46 +43 +36 +35 +36 +33 +33 +28 +26 +22 +21 +23 +21 +20 +19 +18 +14 +12 +10 +10 +10 +8 +6 +5 +-62 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-119 +-115 +-104 +-100 +-91 +-86 +-81 +-73 +-70 +-63 +-62 +-55 +-50 +-46 +-41 +-42 +-37 +-38 +-33 +-28 +-27 +-23 +-19 +-18 +-18 +-17 +-16 +-13 +-11 +-13 +-12 +120 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +117 +108 +96 +90 +14 +-53 +-113 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-119 +20 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +114 +107 +100 +94 +86 +80 +75 +66 +62 +60 +54 +51 +48 +44 +42 +41 +38 +37 +35 +32 +28 +26 +18 +17 +14 +13 +13 +10 +9 +10 +5 +10 +11 +8 +10 +9 +6 +6 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-118 +-111 +-99 +-92 +-83 +-80 +-73 +-71 +-65 +-63 +-58 +-56 +-49 +-44 +-40 +-36 +-32 +-33 +-30 +-31 +-29 +-29 +-28 +-27 +-24 +-22 +-18 +-19 +-17 +-18 +-17 +116 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +119 +112 +104 +98 +92 +84 +75 +71 +67 +59 +53 +47 +45 +41 +37 +34 +27 +26 +23 +22 +19 +17 +16 +13 +13 +12 +10 +10 +8 +7 +8 +8 +10 +10 +9 +10 +-58 +-117 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +12 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +119 +111 +105 +94 +88 +77 +3 +-63 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +116 +110 +104 +96 +88 +80 +5 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-120 +-108 +-101 +-92 +-85 +-82 +-78 +-74 +-71 +-67 +-62 +-57 +-50 +-48 +-45 +-44 +-42 +-40 +-36 +-34 +-29 +-29 +-28 +-27 +-26 +-26 +-21 +-20 +-17 +-19 +-17 +-18 +-17 +117 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +109 +102 +91 +85 +10 +-57 +-116 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +14 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +117 +110 +102 +96 +84 +80 +5 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-120 +20 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +112 +103 +95 +88 +82 +77 +67 +63 +58 +54 +52 +48 +45 +47 +45 +44 +42 +38 +32 +29 +26 +25 +25 +22 +14 +13 +7 +6 +5 +5 +5 +4 +4 +8 +9 +9 +12 +11 +-57 +-116 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-118 +-108 +-104 +-96 +-92 +-86 +-77 +-71 +-64 +-60 +-54 +-50 +-44 +-42 +-40 +-36 +-32 +-32 +-31 +-30 +-30 +-28 +-26 +-26 +-21 +-22 +-20 +-20 +-17 +-16 +-13 +118 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +113 +107 +97 +95 +90 +83 +78 +74 +66 +62 +59 +55 +47 +43 +38 +35 +27 +26 +22 +20 +20 +14 +12 +12 +16 +17 +12 +13 +9 +9 +7 +7 +12 +11 +11 +6 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +8 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +115 +108 +99 +94 +86 +79 +4 +-62 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +15 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +103 +97 +86 +81 +6 +-60 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +21 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +111 +105 +98 +88 +82 +7 +-59 +-118 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +22 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +106 +98 +93 +82 +77 +3 +-63 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-119 +-109 +-104 +-94 +-88 +-80 +-73 +-71 +-64 +-61 +-56 +-51 +-49 +-44 +-41 +-37 +-39 +-35 +-37 +-35 +-29 +-27 +-24 +-23 +-18 +-17 +-13 +-15 +-14 +-16 +-15 +-14 +121 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +116 +109 +101 +94 +18 +-50 +-110 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +14 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +119 +110 +102 +91 +85 +78 +3 +-63 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-120 +19 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +112 +105 +98 +91 +82 +7 +-59 +-118 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +118 +110 +102 +95 +89 +82 +77 +68 +64 +55 +52 +50 +46 +44 +45 +42 +40 +39 +36 +33 +32 +31 +28 +22 +19 +12 +10 +7 +7 +2 +0 +4 +4 +6 +2 +3 +5 +7 +-60 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-116 +-110 +-99 +-93 +-84 +-82 +-74 +-72 +-67 +-64 +-60 +-56 +-50 +-51 +-46 +-47 +-42 +-39 +-35 +-31 +-33 +-30 +-30 +-27 +-22 +-22 +-18 +-20 +-17 +-16 +-14 +117 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +114 +107 +95 +90 +80 +76 +67 +65 +61 +54 +52 +52 +51 +48 +44 +42 +40 +36 +33 +26 +24 +17 +17 +14 +13 +13 +8 +10 +12 +13 +13 +16 +14 +15 +13 +13 +-55 +-114 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +6 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +114 +107 +95 +89 +82 +77 +2 +-64 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-120 +23 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +110 +103 +98 +87 +81 +6 +-60 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +111 +105 +95 +87 +80 +5 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-118 +-109 +-99 +-90 +-88 +-79 +-75 +-67 +-63 +-58 +-53 +-51 +-49 +-47 +-46 +-43 +-43 +-39 +-36 +-32 +-28 +-27 +-26 +-25 +-25 +-23 +-22 +-19 +-15 +-17 +-16 +-15 +119 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +115 +102 +96 +86 +79 +77 +71 +67 +63 +60 +52 +48 +47 +43 +41 +38 +36 +31 +29 +27 +23 +22 +21 +15 +12 +14 +14 +14 +12 +11 +11 +9 +8 +6 +6 +5 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-120 +-111 +-108 +-98 +-92 +-84 +-75 +-74 +-67 +-66 +-61 +-54 +-50 +-46 +-43 +-39 +-40 +-36 +-37 +-33 +-28 +-26 +-23 +-26 +-24 +-20 +-18 +-14 +-15 +-13 +-15 +119 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +114 +106 +99 +87 +11 +-55 +-114 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +117 +109 +103 +98 +87 +82 +72 +68 +61 +57 +54 +49 +46 +44 +40 +38 +38 +36 +34 +33 +32 +26 +23 +19 +17 +13 +12 +11 +6 +6 +4 +5 +6 +5 +5 +4 +3 +4 +-63 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-120 +-109 +-101 +-98 +-92 +-88 +-83 +-78 +-73 +-69 +-61 +-56 +-57 +-52 +-53 +-48 +-48 +-44 +-44 +-39 +-36 +-32 +-28 +-29 +-26 +-27 +-25 +-19 +-20 +-17 +-16 +-14 +117 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +112 +104 +92 +86 +10 +-57 +-116 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-120 +24 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +110 +103 +97 +84 +78 +68 +64 +58 +55 +49 +46 +44 +39 +37 +36 +32 +30 +32 +31 +30 +29 +26 +24 +21 +20 +18 +11 +10 +4 +4 +2 +2 +2 +4 +6 +1 +2 +-64 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +11 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +115 +107 +98 +91 +84 +77 +2 +-63 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +116 +109 +97 +91 +83 +78 +4 +-62 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-120 +-111 +-105 +-100 +-94 +-92 +-85 +-82 +-75 +-70 +-65 +-64 +-58 +-54 +-49 +-44 +-45 +-40 +-37 +-35 +-29 +-26 +-22 +-23 +-21 +-23 +-22 +-20 +-18 +-19 +-17 +-15 +-17 +118 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +113 +106 +98 +92 +15 +-52 +-111 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +111 +101 +94 +86 +83 +8 +-58 +-117 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +14 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +118 +105 +100 +91 +85 +81 +6 +-60 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +21 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +117 +108 +100 +95 +86 +79 +4 +-62 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +15 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +112 +103 +92 +85 +77 +2 +-64 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +112 +106 +95 +90 +84 +79 +79 +76 +72 +68 +64 +58 +53 +45 +41 +36 +32 +28 +22 +22 +17 +17 +13 +12 +15 +12 +17 +16 +17 +11 +11 +6 +7 +2 +4 +3 +3 +4 +-63 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-115 +-105 +-100 +-93 +-87 +-82 +-77 +-71 +-66 +-59 +-57 +-52 +-50 +-48 +-45 +-42 +-43 +-39 +-37 +-35 +-32 +-30 +-27 +-29 +-25 +-22 +-23 +-21 +-23 +-22 +-17 +118 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +120 +110 +102 +93 +86 +78 +74 +68 +57 +53 +46 +44 +43 +39 +38 +35 +35 +32 +23 +21 +15 +15 +12 +11 +12 +10 +10 +11 +9 +9 +7 +6 +6 +3 +2 +5 +-62 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +5 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +110 +103 +96 +90 +82 +77 +3 +-63 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-120 +-115 +-107 +-101 +-95 +-86 +-79 +-78 +-71 +-70 +-65 +-64 +-58 +-56 +-52 +-51 +-45 +-45 +-40 +-36 +-35 +-32 +-29 +-24 +-19 +-21 +-19 +-21 +-19 +-20 +-18 +-20 +-17 +118 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +105 +98 +94 +87 +84 +74 +70 +63 +59 +54 +50 +47 +39 +37 +30 +27 +28 +27 +27 +20 +20 +18 +17 +15 +10 +12 +17 +16 +17 +17 +15 +12 +11 +9 +7 +-60 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +7 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +109 +100 +93 +88 +81 +6 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +113 +107 +100 +91 +85 +10 +-57 +-116 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +12 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +114 +107 +99 +93 +86 +80 +5 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +20 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +117 +107 +100 +93 +83 +79 +4 +-62 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-112 +-104 +-100 +-92 +-87 +-81 +-73 +-68 +-64 +-61 +-58 +-55 +-53 +-48 +-46 +-44 +-41 +-39 +-34 +-31 +-26 +-27 +-24 +-25 +-24 +-23 +-20 +-22 +-20 +-23 +-20 +-19 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +110 +103 +96 +84 +78 +67 +63 +54 +51 +43 +42 +40 +37 +36 +30 +29 +31 +28 +27 +25 +24 +16 +16 +11 +10 +6 +6 +9 +10 +12 +14 +12 +14 +12 +12 +-55 +-115 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +14 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +111 +102 +90 +84 +76 +2 +-64 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +19 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +114 +107 +98 +92 +86 +79 +4 +-62 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-116 +-110 +-103 +-96 +-89 +-83 +-74 +-71 +-65 +-62 +-58 +-55 +-52 +-48 +-44 +-39 +-34 +-34 +-32 +-32 +-28 +-26 +-22 +-22 +-21 +-18 +-16 +-16 +-20 +-18 +-22 +-20 +112 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +112 +105 +97 +91 +85 +78 +73 +66 +58 +56 +48 +47 +43 +40 +38 +35 +33 +35 +35 +31 +30 +29 +28 +25 +20 +19 +18 +14 +12 +11 +10 +6 +5 +3 +2 +2 +-64 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-118 +-106 +-98 +-93 +-85 +-78 +-74 +-69 +-66 +-63 +-59 +-56 +-53 +-46 +-42 +-43 +-37 +-35 +-31 +-29 +-28 +-28 +-24 +-22 +-26 +-24 +-26 +-23 +-26 +-23 +-21 +116 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +114 +110 +104 +97 +21 +-47 +-107 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +14 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +112 +105 +94 +88 +80 +76 +1 +-64 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-120 +21 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +119 +113 +101 +95 +83 +79 +70 +66 +57 +53 +53 +49 +46 +44 +42 +35 +34 +28 +25 +26 +24 +25 +22 +21 +14 +15 +9 +7 +10 +10 +11 +7 +9 +9 +5 +5 +1 +2 +-64 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-115 +-107 +-99 +-91 +-88 +-81 +-80 +-73 +-72 +-67 +-60 +-55 +-48 +-47 +-43 +-41 +-37 +-39 +-35 +-37 +-32 +-34 +-31 +-25 +-24 +-21 +-20 +-19 +-19 +-15 +-14 +122 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +110 +103 +97 +89 +13 +-54 +-113 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +19 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +111 +104 +96 +90 +80 +75 +73 +66 +63 +56 +53 +48 +46 +44 +39 +37 +34 +27 +24 +25 +24 +25 +19 +20 +14 +12 +14 +15 +15 +10 +10 +6 +4 +8 +7 +7 +6 +6 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +6 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +117 +105 +99 +88 +84 +80 +5 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-117 +-110 +-102 +-93 +-87 +-79 +-76 +-70 +-68 +-63 +-60 +-56 +-52 +-47 +-48 +-43 +-41 +-37 +-35 +-32 +-29 +-30 +-27 +-27 +-24 +-23 +-19 +-15 +-18 +-15 +-18 +-16 +114 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +111 +104 +98 +90 +83 +78 +72 +68 +66 +64 +59 +55 +50 +48 +44 +40 +37 +35 +32 +24 +22 +16 +15 +12 +12 +15 +14 +14 +12 +11 +5 +4 +2 +2 +2 +1 +-65 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +0 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +113 +103 +95 +87 +81 +6 +-60 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +115 +106 +99 +91 +85 +81 +6 +-61 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +15 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +114 +102 +96 +88 +82 +73 +-1 +-67 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +110 +101 +96 +88 +81 +6 +-60 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-116 +-112 +-102 +-98 +-90 +-86 +-79 +-78 +-70 +-65 +-59 +-52 +-52 +-47 +-44 +-44 +-39 +-35 +-35 +-30 +-32 +-28 +-29 +-26 +-20 +-19 +-17 +-17 +-16 +-16 +-15 +-16 +120 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +112 +105 +98 +91 +85 +77 +72 +68 +62 +58 +54 +50 +47 +48 +45 +42 +40 +38 +30 +28 +24 +22 +18 +17 +18 +16 +15 +10 +9 +7 +7 +6 +4 +4 +8 +6 +-60 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-115 +-110 +-102 +-95 +-87 +-85 +-78 +-76 +-69 +-68 +-61 +-58 +-51 +-45 +-42 +-40 +-37 +-34 +-35 +-32 +-30 +-28 +-27 +-29 +-24 +-25 +-23 +-17 +-17 +-15 +-16 +119 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +119 +109 +104 +96 +19 +-49 +-108 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +110 +102 +92 +85 +78 +74 +71 +66 +57 +53 +45 +42 +37 +35 +32 +29 +28 +25 +23 +22 +20 +19 +19 +16 +15 +9 +7 +10 +6 +7 +5 +6 +6 +5 +6 +4 +4 +-62 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-114 +-105 +-97 +-89 +-88 +-82 +-81 +-75 +-72 +-67 +-62 +-57 +-57 +-51 +-51 +-46 +-38 +-38 +-32 +-32 +-29 +-27 +-24 +-27 +-24 +-26 +-22 +-21 +-19 +-19 +-15 +122 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +108 +98 +93 +16 +-51 +-111 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +116 +109 +100 +93 +88 +81 +6 +-61 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-119 +19 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +114 +106 +94 +88 +80 +75 +0 +-65 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +20 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +115 +104 +96 +87 +80 +5 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +116 +107 +101 +94 +87 +82 +72 +69 +60 +56 +56 +51 +48 +45 +42 +34 +33 +27 +26 +20 +18 +21 +18 +19 +18 +18 +15 +15 +14 +12 +11 +11 +6 +6 +9 +12 +10 +11 +-56 +-116 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-116 +-112 +-103 +-99 +-90 +-87 +-81 +-71 +-67 +-61 +-56 +-50 +-51 +-47 +-46 +-42 +-41 +-37 +-37 +-32 +-30 +-30 +-26 +-27 +-24 +-19 +-16 +-14 +-17 +-15 +-17 +118 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +116 +108 +100 +91 +87 +78 +72 +65 +62 +56 +54 +47 +44 +38 +35 +32 +30 +27 +25 +24 +21 +20 +19 +13 +10 +13 +12 +13 +8 +8 +3 +3 +6 +7 +8 +3 +-64 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +8 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +116 +104 +98 +87 +82 +76 +1 +-64 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-113 +-104 +-96 +-88 +-84 +-80 +-76 +-73 +-68 +-64 +-58 +-51 +-50 +-47 +-46 +-44 +-40 +-36 +-37 +-34 +-32 +-29 +-27 +-25 +-22 +-25 +-22 +-20 +-16 +-14 +-17 +-14 +116 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +115 +107 +100 +89 +84 +77 +71 +67 +62 +58 +53 +49 +47 +45 +41 +40 +36 +33 +30 +29 +28 +25 +22 +19 +18 +11 +11 +9 +8 +11 +11 +12 +6 +7 +4 +4 +-62 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +13 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +116 +107 +99 +91 +85 +78 +3 +-63 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-119 +23 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +111 +104 +92 +86 +77 +2 +-63 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +12 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +115 +108 +96 +90 +83 +77 +2 +-63 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-119 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +109 +102 +91 +86 +77 +2 +-63 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-113 +-105 +-96 +-90 +-86 +-81 +-75 +-71 +-63 +-58 +-59 +-54 +-55 +-50 +-51 +-46 +-43 +-39 +-36 +-30 +-26 +-28 +-25 +-27 +-24 +-26 +-22 +-20 +-21 +-13 +-12 +-9 +121 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +110 +103 +96 +86 +80 +73 +69 +64 +59 +56 +50 +44 +42 +40 +40 +39 +36 +35 +34 +30 +27 +24 +23 +16 +15 +9 +7 +9 +9 +9 +5 +6 +1 +2 +5 +5 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-116 +-108 +-101 +-94 +-85 +-80 +-74 +-71 +-67 +-62 +-57 +-57 +-52 +-51 +-47 +-44 +-40 +-40 +-36 +-29 +-29 +-26 +-26 +-24 +-23 +-20 +-23 +-21 +-22 +-19 +-16 +115 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +117 +107 +100 +87 +81 +71 +67 +62 +58 +55 +51 +48 +43 +40 +38 +34 +31 +29 +29 +29 +24 +24 +25 +21 +18 +17 +15 +13 +14 +11 +10 +8 +6 +2 +2 +1 +-65 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +10 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +109 +104 +98 +91 +86 +79 +4 +-62 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-117 +-114 +-106 +-101 +-93 +-90 +-82 +-79 +-71 +-66 +-58 +-51 +-48 +-42 +-38 +-33 +-34 +-31 +-33 +-31 +-31 +-30 +-28 +-25 +-27 +-24 +-22 +-18 +-14 +-14 +-12 +-12 +123 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +112 +106 +96 +90 +82 +78 +75 +68 +67 +61 +58 +52 +48 +39 +36 +32 +30 +22 +20 +22 +17 +18 +16 +16 +14 +13 +12 +15 +16 +15 +14 +15 +15 +11 +8 +5 +-62 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-118 +-111 +-102 +-97 +-88 +-82 +-78 +-70 +-68 +-63 +-57 +-50 +-44 +-43 +-40 +-38 +-33 +-30 +-26 +-28 +-25 +-27 +-25 +-25 +-20 +-19 +-15 +-18 +-16 +-18 +-16 +115 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +113 +104 +97 +87 +11 +-56 +-115 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +19 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +110 +102 +95 +88 +78 +3 +-63 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +113 +103 +96 +90 +81 +74 +69 +64 +63 +59 +56 +54 +50 +44 +41 +32 +29 +22 +22 +18 +18 +18 +15 +14 +14 +12 +12 +10 +9 +9 +9 +7 +8 +7 +6 +6 +1 +-65 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +11 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +110 +103 +95 +89 +83 +77 +2 +-64 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +113 +105 +96 +92 +81 +77 +2 +-64 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-113 +-103 +-96 +-89 +-81 +-74 +-74 +-69 +-68 +-63 +-63 +-58 +-56 +-51 +-50 +-44 +-45 +-40 +-36 +-30 +-26 +-28 +-25 +-27 +-23 +-26 +-22 +-20 +-18 +-15 +-15 +-13 +120 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +113 +105 +99 +88 +81 +76 +67 +62 +61 +59 +55 +52 +49 +41 +39 +32 +29 +30 +29 +28 +21 +21 +17 +16 +16 +14 +12 +11 +10 +10 +7 +6 +6 +7 +6 +6 +-60 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-118 +-114 +-103 +-99 +-90 +-82 +-74 +-66 +-65 +-58 +-58 +-53 +-53 +-48 +-48 +-43 +-42 +-39 +-35 +-32 +-27 +-23 +-20 +-21 +-18 +-20 +-19 +-19 +-15 +-14 +-10 +123 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +102 +94 +87 +11 +-56 +-115 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +115 +108 +96 +90 +80 +76 +1 +-64 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +114 +111 +104 +98 +93 +87 +12 +-55 +-115 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +113 +109 +101 +96 +85 +80 +6 +-61 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +22 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +112 +105 +94 +86 +78 +70 +65 +61 +52 +49 +45 +42 +39 +33 +32 +31 +32 +30 +28 +28 +29 +23 +25 +22 +22 +18 +17 +12 +11 +10 +7 +6 +1 +1 +2 +0 +1 +-66 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +14 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +116 +109 +101 +94 +89 +81 +6 +-60 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-119 +21 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +109 +98 +92 +84 +80 +5 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +15 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +112 +105 +93 +88 +78 +74 +0 +-66 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-116 +-109 +-100 +-93 +-87 +-78 +-75 +-69 +-65 +-62 +-58 +-53 +-50 +-43 +-42 +-39 +-38 +-35 +-34 +-33 +-31 +-27 +-26 +-22 +-22 +-20 +-21 +-20 +-19 +-17 +-17 +-16 +118 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +111 +105 +98 +92 +85 +79 +75 +68 +62 +58 +56 +53 +47 +45 +45 +41 +39 +35 +34 +30 +26 +25 +23 +20 +17 +14 +14 +12 +12 +9 +8 +6 +6 +1 +2 +-3 +-69 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-116 +-113 +-104 +-101 +-91 +-89 +-81 +-75 +-66 +-59 +-55 +-51 +-48 +-43 +-41 +-35 +-33 +-35 +-31 +-34 +-30 +-33 +-30 +-26 +-22 +-18 +-21 +-19 +-22 +-19 +-22 +114 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +116 +106 +99 +92 +16 +-52 +-111 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-120 +23 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +112 +104 +91 +85 +74 +0 +-65 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +20 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +114 +102 +96 +88 +82 +75 +1 +-65 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +109 +101 +94 +86 +83 +76 +68 +65 +62 +58 +49 +46 +41 +37 +33 +32 +32 +27 +24 +22 +22 +19 +17 +16 +14 +13 +16 +17 +14 +13 +14 +14 +9 +8 +6 +5 +4 +-62 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-115 +-106 +-97 +-95 +-87 +-85 +-78 +-76 +-69 +-67 +-61 +-58 +-52 +-52 +-47 +-42 +-41 +-37 +-38 +-33 +-31 +-31 +-26 +-28 +-24 +-20 +-21 +-19 +-21 +-18 +-11 +124 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +99 +92 +85 +79 +74 +69 +64 +58 +51 +49 +43 +41 +42 +39 +37 +34 +31 +29 +26 +20 +20 +18 +17 +16 +11 +12 +13 +9 +11 +6 +7 +5 +5 +6 +2 +-64 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +9 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +112 +108 +99 +95 +88 +81 +6 +-60 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-120 +-111 +-109 +-101 +-96 +-92 +-86 +-80 +-75 +-67 +-61 +-56 +-52 +-49 +-44 +-41 +-39 +-40 +-37 +-40 +-37 +-39 +-35 +-36 +-32 +-26 +-26 +-22 +-21 +-19 +-18 +-15 +-15 +117 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +110 +101 +93 +88 +83 +76 +65 +61 +52 +47 +45 +44 +42 +36 +38 +35 +33 +26 +24 +21 +20 +18 +16 +15 +12 +10 +11 +12 +14 +13 +12 +12 +13 +10 +8 +-60 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +5 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +111 +104 +100 +92 +86 +80 +5 +-61 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-116 +-109 +-100 +-91 +-87 +-80 +-78 +-70 +-66 +-60 +-54 +-54 +-49 +-50 +-44 +-39 +-40 +-34 +-32 +-29 +-26 +-28 +-25 +-22 +-20 +-16 +-16 +-14 +-16 +-15 +-18 +-15 +116 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +111 +103 +92 +90 +14 +-53 +-112 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +109 +101 +94 +86 +80 +5 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +20 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +114 +107 +103 +96 +91 +81 +77 +68 +64 +58 +53 +50 +46 +43 +37 +35 +33 +29 +28 +26 +23 +22 +18 +17 +17 +14 +14 +14 +12 +11 +13 +15 +12 +13 +14 +12 +10 +10 +-58 +-117 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +5 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +116 +103 +96 +88 +82 +77 +3 +-63 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +117 +110 +101 +95 +89 +80 +5 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-119 +21 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +114 +106 +98 +92 +86 +80 +5 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +12 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +107 +100 +92 +86 +81 +6 +-60 +-118 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +15 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +112 +103 +94 +86 +78 +3 +-63 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-119 +-115 +-106 +-101 +-95 +-91 +-83 +-78 +-72 +-68 +-61 +-54 +-52 +-49 +-46 +-44 +-41 +-38 +-36 +-30 +-27 +-30 +-27 +-30 +-27 +-29 +-25 +-26 +-23 +-21 +-18 +-22 +-18 +119 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +111 +104 +97 +90 +84 +79 +73 +68 +62 +55 +53 +49 +46 +44 +39 +38 +35 +32 +30 +24 +22 +16 +14 +16 +15 +16 +11 +11 +9 +9 +10 +8 +7 +12 +12 +12 +-55 +-115 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-116 +-109 +-98 +-91 +-88 +-82 +-78 +-71 +-67 +-60 +-58 +-54 +-53 +-49 +-47 +-42 +-40 +-34 +-32 +-30 +-26 +-23 +-22 +-26 +-23 +-27 +-25 +-24 +-22 +-22 +-20 +116 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +118 +109 +102 +91 +15 +-53 +-112 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +15 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +109 +102 +94 +87 +82 +75 +68 +62 +58 +53 +51 +47 +40 +38 +37 +35 +27 +25 +19 +18 +16 +14 +18 +17 +18 +18 +17 +15 +13 +13 +10 +8 +5 +2 +2 +2 +0 +-66 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-111 +-106 +-96 +-93 +-84 +-79 +-72 +-67 +-60 +-54 +-50 +-47 +-44 +-42 +-39 +-36 +-32 +-28 +-29 +-27 +-26 +-24 +-28 +-25 +-27 +-24 +-23 +-21 +-18 +-17 +118 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +116 +104 +98 +93 +17 +-50 +-110 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +20 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +109 +102 +95 +89 +81 +6 +-60 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +22 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +111 +106 +96 +89 +87 +82 +7 +-59 +-118 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +15 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +110 +103 +93 +88 +80 +77 +2 +-64 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +14 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +118 +110 +103 +93 +87 +84 +78 +73 +67 +63 +57 +53 +50 +42 +40 +37 +35 +33 +30 +28 +28 +26 +26 +28 +26 +24 +23 +17 +14 +11 +10 +4 +4 +-1 +-2 +3 +2 +3 +-63 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-117 +-109 +-104 +-96 +-90 +-82 +-74 +-70 +-66 +-61 +-59 +-55 +-51 +-46 +-41 +-40 +-38 +-37 +-33 +-31 +-27 +-28 +-26 +-26 +-24 +-26 +-21 +-20 +-16 +-17 +-15 +117 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +112 +106 +106 +99 +22 +-46 +-107 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +111 +99 +93 +82 +76 +1 +-64 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +15 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +110 +100 +94 +85 +81 +75 +68 +64 +61 +56 +51 +46 +44 +39 +38 +33 +31 +26 +25 +18 +17 +14 +14 +14 +11 +11 +9 +8 +10 +11 +12 +11 +10 +11 +12 +8 +6 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-117 +-114 +-104 +-99 +-93 +-88 +-82 +-75 +-69 +-68 +-61 +-58 +-51 +-45 +-44 +-41 +-39 +-35 +-33 +-28 +-29 +-26 +-27 +-25 +-25 +-21 +-20 +-17 +-19 +-17 +-16 +119 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +114 +107 +99 +92 +86 +76 +72 +63 +58 +58 +52 +50 +45 +42 +35 +34 +27 +26 +27 +26 +26 +24 +23 +22 +16 +16 +12 +12 +12 +10 +10 +13 +12 +13 +10 +8 +-59 +-118 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +10 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +116 +107 +99 +92 +86 +10 +-57 +-116 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +15 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +116 +106 +99 +90 +86 +10 +-57 +-116 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-117 +-108 +-104 +-95 +-91 +-84 +-80 +-73 +-71 +-64 +-63 +-56 +-52 +-48 +-44 +-38 +-34 +-34 +-32 +-31 +-26 +-25 +-21 +-23 +-20 +-21 +-20 +-19 +-16 +-20 +-17 +-20 +117 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +109 +102 +96 +86 +79 +71 +68 +62 +59 +52 +48 +40 +38 +34 +32 +27 +27 +26 +22 +21 +20 +16 +20 +21 +20 +20 +17 +17 +16 +16 +11 +8 +7 +6 +0 +-67 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +8 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +114 +105 +98 +91 +86 +82 +7 +-59 +-118 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-118 +-107 +-99 +-93 +-87 +-79 +-73 +-72 +-64 +-60 +-55 +-52 +-52 +-48 +-50 +-45 +-46 +-43 +-37 +-34 +-28 +-29 +-26 +-27 +-25 +-26 +-20 +-18 +-15 +-17 +-15 +-15 +120 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +115 +106 +103 +96 +91 +15 +-52 +-112 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-117 +25 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +108 +101 +93 +87 +80 +73 +69 +60 +57 +49 +45 +43 +44 +43 +42 +39 +36 +35 +33 +29 +25 +21 +21 +17 +15 +12 +13 +11 +12 +7 +8 +4 +4 +3 +4 +-2 +-1 +-67 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-119 +-111 +-108 +-99 +-97 +-90 +-87 +-80 +-78 +-70 +-65 +-61 +-52 +-48 +-42 +-42 +-38 +-39 +-36 +-34 +-30 +-33 +-29 +-31 +-28 +-22 +-22 +-20 +-20 +-18 +-17 +-14 +117 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +116 +104 +97 +20 +-48 +-108 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +14 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +109 +100 +94 +87 +81 +6 +-60 +-118 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +102 +94 +86 +81 +6 +-60 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +15 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +108 +101 +94 +88 +85 +10 +-57 +-116 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-120 +23 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +104 +97 +91 +85 +79 +67 +62 +52 +49 +44 +42 +38 +36 +38 +36 +34 +33 +31 +26 +24 +21 +19 +17 +9 +10 +7 +6 +6 +5 +5 +6 +5 +5 +9 +10 +8 +-59 +-118 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-118 +-105 +-98 +-90 +-85 +-80 +-75 +-72 +-67 +-65 +-58 +-52 +-48 +-50 +-45 +-47 +-42 +-43 +-38 +-38 +-34 +-35 +-30 +-32 +-27 +-22 +-22 +-18 +-19 +-17 +-19 +117 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +116 +107 +102 +94 +87 +82 +78 +72 +61 +57 +47 +44 +39 +37 +35 +28 +28 +32 +31 +31 +30 +28 +24 +21 +18 +18 +18 +14 +12 +9 +10 +8 +9 +5 +4 +2 +-64 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +10 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +112 +105 +94 +89 +81 +76 +2 +-64 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-115 +-110 +-101 +-97 +-88 +-80 +-74 +-69 +-64 +-60 +-57 +-52 +-47 +-47 +-43 +-43 +-39 +-36 +-33 +-30 +-30 +-26 +-28 +-26 +-20 +-21 +-18 +-20 +-16 +-16 +-14 +-11 +119 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +113 +106 +100 +94 +85 +79 +72 +68 +61 +57 +53 +48 +44 +41 +34 +34 +35 +35 +34 +27 +25 +22 +20 +19 +16 +15 +9 +9 +9 +11 +11 +10 +11 +13 +10 +12 +-56 +-115 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +5 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +116 +105 +98 +90 +85 +80 +5 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +115 +104 +97 +94 +88 +83 +7 +-59 +-118 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +13 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +114 +100 +94 +83 +79 +4 +-62 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +15 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +115 +106 +97 +90 +82 +75 +1 +-65 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-110 +-101 +-94 +-89 +-84 +-76 +-72 +-67 +-61 +-57 +-58 +-54 +-54 +-50 +-49 +-44 +-43 +-37 +-34 +-28 +-30 +-27 +-27 +-25 +-27 +-23 +-26 +-22 +-24 +-20 +-22 +-20 +119 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +101 +93 +84 +78 +71 +68 +62 +56 +53 +51 +45 +40 +37 +35 +27 +26 +22 +21 +17 +18 +19 +14 +14 +9 +10 +8 +8 +8 +7 +7 +7 +5 +6 +6 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-118 +-108 +-104 +-96 +-92 +-85 +-82 +-76 +-66 +-63 +-56 +-52 +-47 +-48 +-43 +-43 +-39 +-39 +-34 +-32 +-30 +-25 +-23 +-18 +-20 +-17 +-19 +-18 +-17 +-16 +-16 +119 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +114 +106 +100 +92 +16 +-51 +-111 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +114 +108 +103 +97 +90 +80 +75 +68 +64 +57 +54 +53 +49 +44 +41 +40 +33 +30 +26 +25 +22 +21 +20 +14 +13 +16 +12 +12 +11 +10 +10 +8 +8 +3 +4 +-1 +-1 +3 +-64 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-118 +-111 +-106 +-96 +-92 +-85 +-79 +-72 +-70 +-65 +-59 +-58 +-52 +-53 +-47 +-43 +-40 +-36 +-34 +-34 +-29 +-30 +-27 +-28 +-26 +-20 +-19 +-17 +-15 +-11 +-7 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +115 +107 +99 +22 +-46 +-106 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +15 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +109 +100 +93 +82 +77 +2 +-64 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +21 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +116 +104 +97 +93 +85 +81 +6 +-60 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +15 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +112 +104 +97 +86 +81 +6 +-61 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +109 +100 +95 +88 +85 +79 +71 +64 +58 +54 +49 +45 +43 +41 +39 +31 +29 +22 +21 +15 +14 +15 +13 +14 +13 +12 +10 +10 +10 +6 +5 +7 +5 +6 +5 +5 +1 +-65 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-116 +-111 +-103 +-96 +-88 +-86 +-78 +-73 +-67 +-62 +-55 +-49 +-47 +-44 +-42 +-41 +-39 +-38 +-35 +-32 +-27 +-23 +-23 +-18 +-18 +-15 +-18 +-17 +-20 +-18 +-19 +115 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +111 +104 +96 +90 +79 +75 +66 +62 +60 +57 +54 +49 +47 +46 +39 +38 +31 +28 +26 +24 +23 +21 +20 +17 +16 +16 +17 +17 +16 +15 +15 +11 +9 +8 +6 +1 +-65 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-118 +-107 +-96 +-92 +-85 +-79 +-72 +-71 +-65 +-64 +-59 +-55 +-50 +-50 +-46 +-40 +-37 +-31 +-31 +-28 +-29 +-26 +-29 +-26 +-28 +-24 +-26 +-22 +-19 +-20 +-17 +117 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +118 +109 +101 +94 +18 +-50 +-110 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +14 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +105 +98 +88 +82 +76 +72 +64 +61 +60 +55 +52 +48 +46 +40 +37 +33 +30 +26 +26 +24 +25 +19 +19 +14 +12 +10 +10 +8 +5 +6 +2 +2 +6 +6 +7 +6 +7 +-60 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-113 +-106 +-97 +-91 +-83 +-76 +-73 +-65 +-62 +-57 +-55 +-54 +-51 +-48 +-46 +-41 +-39 +-37 +-35 +-35 +-33 +-29 +-28 +-24 +-24 +-21 +-22 +-21 +-20 +-17 +-16 +121 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +115 +108 +97 +89 +87 +82 +78 +68 +65 +59 +56 +53 +49 +45 +41 +38 +37 +30 +29 +30 +25 +24 +22 +21 +20 +17 +16 +13 +8 +9 +6 +5 +8 +7 +8 +7 +7 +-60 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +10 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +117 +105 +98 +90 +84 +79 +4 +-62 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +118 +110 +103 +98 +92 +84 +9 +-58 +-117 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-114 +-106 +-96 +-89 +-84 +-80 +-72 +-67 +-67 +-61 +-59 +-55 +-52 +-45 +-42 +-45 +-42 +-43 +-39 +-40 +-35 +-36 +-31 +-27 +-28 +-25 +-17 +-15 +-11 +-14 +-12 +-15 +120 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +114 +105 +97 +91 +15 +-52 +-112 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-120 +22 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +118 +116 +108 +102 +93 +84 +9 +-58 +-117 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +14 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +114 +106 +98 +90 +85 +74 +69 +63 +59 +57 +52 +49 +46 +42 +40 +36 +33 +32 +27 +26 +25 +22 +20 +23 +22 +21 +21 +19 +15 +14 +10 +8 +4 +5 +5 +4 +5 +4 +-62 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-115 +-105 +-96 +-89 +-88 +-82 +-80 +-73 +-68 +-60 +-58 +-54 +-52 +-49 +-47 +-44 +-41 +-37 +-32 +-28 +-31 +-27 +-29 +-26 +-25 +-23 +-19 +-22 +-19 +-18 +-17 +118 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +114 +106 +93 +88 +80 +76 +72 +63 +60 +58 +53 +49 +46 +43 +40 +34 +32 +32 +29 +29 +25 +22 +21 +16 +15 +17 +16 +15 +13 +12 +10 +8 +6 +4 +4 +5 +-62 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +7 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +108 +102 +95 +83 +78 +3 +-63 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-119 +22 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +107 +99 +90 +83 +78 +4 +-62 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +12 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +111 +104 +97 +89 +84 +8 +-58 +-117 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +110 +98 +91 +83 +78 +3 +-63 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-112 +-106 +-100 +-95 +-87 +-82 +-74 +-71 +-67 +-63 +-57 +-52 +-51 +-49 +-46 +-42 +-37 +-32 +-33 +-30 +-30 +-29 +-27 +-24 +-28 +-25 +-23 +-19 +-16 +-15 +-15 +-14 +120 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +115 +103 +96 +85 +10 +-57 +-116 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +117 +108 +100 +93 +86 +81 +6 +-60 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +21 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +118 +104 +98 +87 +80 +78 +4 +-62 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +116 +109 +100 +94 +83 +78 +68 +64 +63 +57 +55 +50 +50 +47 +45 +43 +41 +36 +33 +27 +25 +22 +20 +13 +13 +8 +7 +10 +8 +8 +8 +9 +4 +5 +0 +0 +4 +4 +-62 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-120 +-112 +-105 +-99 +-92 +-86 +-78 +-70 +-67 +-62 +-58 +-54 +-54 +-49 +-50 +-46 +-46 +-41 +-39 +-35 +-32 +-33 +-29 +-31 +-28 +-25 +-26 +-22 +-21 +-21 +-17 +-19 +117 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +114 +104 +98 +91 +80 +77 +68 +64 +64 +57 +54 +49 +46 +41 +40 +40 +36 +35 +27 +26 +22 +21 +18 +18 +19 +17 +16 +9 +9 +7 +7 +12 +12 +13 +13 +11 +-57 +-116 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +10 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +113 +102 +95 +86 +82 +7 +-60 +-118 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +110 +104 +93 +88 +80 +76 +2 +-64 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +12 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +106 +99 +91 +85 +75 +1 +-65 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-116 +-110 +-101 +-94 +-88 +-79 +-74 +-66 +-65 +-60 +-59 +-54 +-53 +-49 +-46 +-41 +-43 +-38 +-39 +-35 +-32 +-29 +-26 +-25 +-23 +-19 +-22 +-20 +-18 +-13 +-10 +-14 +125 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +104 +96 +85 +79 +70 +66 +63 +58 +56 +52 +48 +45 +45 +44 +41 +38 +37 +35 +30 +27 +24 +22 +15 +15 +12 +11 +11 +5 +5 +6 +5 +5 +6 +1 +1 +-65 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-119 +-110 +-101 +-97 +-89 +-86 +-78 +-74 +-66 +-58 +-57 +-51 +-51 +-46 +-47 +-43 +-41 +-34 +-31 +-27 +-28 +-26 +-27 +-24 +-23 +-21 +-21 +-20 +-17 +-20 +-18 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +118 +111 +102 +96 +94 +18 +-50 +-110 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-118 +19 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +110 +102 +96 +85 +80 +73 +69 +63 +58 +55 +51 +47 +45 +40 +38 +35 +32 +30 +27 +22 +22 +19 +18 +18 +12 +10 +11 +12 +14 +12 +13 +14 +14 +8 +7 +3 +2 +-65 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-120 +-110 +-106 +-97 +-94 +-86 +-78 +-72 +-65 +-64 +-61 +-53 +-46 +-41 +-40 +-37 +-37 +-31 +-29 +-25 +-28 +-25 +-28 +-26 +-27 +-25 +-23 +-20 +-20 +-18 +-15 +118 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +119 +107 +100 +90 +14 +-53 +-113 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-120 +21 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +109 +101 +90 +83 +75 +70 +65 +56 +54 +50 +47 +45 +41 +39 +37 +33 +31 +33 +32 +30 +30 +28 +23 +21 +18 +14 +14 +12 +10 +8 +9 +7 +8 +4 +4 +1 +4 +-62 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +7 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +111 +105 +97 +91 +86 +79 +4 +-62 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-119 +23 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +119 +113 +103 +97 +90 +86 +10 +-57 +-116 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-117 +-107 +-97 +-90 +-84 +-78 +-73 +-69 +-62 +-59 +-55 +-53 +-50 +-48 +-46 +-42 +-41 +-37 +-35 +-34 +-28 +-26 +-25 +-24 +-24 +-23 +-22 +-18 +-15 +-16 +-16 +-16 +117 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +114 +105 +98 +93 +16 +-51 +-111 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-118 +19 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +116 +109 +102 +95 +89 +82 +6 +-60 +-118 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +15 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +111 +104 +97 +86 +83 +8 +-59 +-118 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +19 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +111 +104 +94 +87 +80 +5 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +21 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +115 +107 +95 +90 +81 +75 +1 +-65 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +117 +110 +103 +96 +89 +79 +74 +65 +60 +60 +53 +51 +47 +45 +40 +37 +35 +31 +29 +28 +25 +23 +20 +15 +14 +16 +12 +14 +10 +10 +9 +10 +8 +7 +7 +3 +3 +4 +-62 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-117 +-110 +-104 +-98 +-92 +-85 +-76 +-69 +-66 +-61 +-58 +-55 +-53 +-51 +-47 +-43 +-37 +-33 +-33 +-28 +-26 +-23 +-23 +-22 +-22 +-18 +-20 +-19 +-20 +-20 +-20 +116 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +112 +105 +99 +89 +83 +73 +70 +65 +61 +59 +56 +51 +47 +45 +38 +36 +37 +35 +33 +33 +30 +28 +25 +25 +22 +15 +14 +8 +7 +4 +4 +5 +3 +4 +4 +4 +-63 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +14 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +117 +109 +102 +97 +92 +85 +9 +-58 +-116 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-117 +-109 +-103 +-94 +-88 +-79 +-74 +-70 +-67 +-59 +-55 +-57 +-52 +-53 +-48 +-48 +-43 +-43 +-38 +-39 +-34 +-34 +-30 +-25 +-20 +-16 +-18 +-16 +-18 +-17 +-19 +-16 +117 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +110 +102 +93 +88 +83 +74 +68 +62 +59 +50 +47 +42 +39 +34 +33 +33 +30 +28 +24 +21 +20 +20 +21 +16 +18 +15 +15 +10 +10 +5 +5 +3 +4 +4 +-1 +-67 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +7 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +115 +106 +98 +93 +81 +77 +2 +-64 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +117 +108 +102 +98 +90 +86 +10 +-56 +-116 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +15 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +114 +108 +99 +92 +85 +79 +4 +-62 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +11 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +113 +106 +95 +89 +82 +76 +2 +-64 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-115 +-111 +-102 +-98 +-90 +-87 +-79 +-76 +-69 +-64 +-61 +-56 +-54 +-48 +-48 +-42 +-39 +-39 +-34 +-31 +-29 +-26 +-27 +-23 +-25 +-21 +-20 +-20 +-14 +-12 +-9 +-12 +124 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +115 +107 +99 +95 +88 +78 +72 +65 +62 +60 +57 +49 +46 +40 +38 +34 +31 +29 +23 +21 +22 +18 +18 +16 +16 +14 +13 +13 +7 +8 +3 +2 +5 +4 +9 +11 +-56 +-116 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +3 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +118 +104 +99 +88 +82 +79 +5 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +117 +109 +102 +95 +90 +80 +5 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-115 +-106 +-100 +-94 +-88 +-83 +-78 +-71 +-67 +-59 +-58 +-53 +-51 +-48 +-44 +-40 +-41 +-38 +-36 +-33 +-32 +-31 +-28 +-26 +-23 +-22 +-20 +-19 +-20 +-14 +-13 +-10 +126 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +105 +98 +89 +82 +74 +70 +68 +62 +60 +55 +53 +47 +42 +40 +39 +34 +30 +26 +25 +21 +22 +17 +17 +15 +14 +7 +7 +10 +12 +11 +11 +9 +10 +7 +6 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-113 +-107 +-99 +-97 +-89 +-87 +-80 +-78 +-71 +-69 +-62 +-60 +-57 +-49 +-45 +-42 +-38 +-33 +-28 +-25 +-26 +-24 +-23 +-22 +-25 +-22 +-25 +-22 +-24 +-21 +-18 +117 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +109 +105 +99 +94 +18 +-50 +-110 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +109 +98 +93 +82 +78 +4 +-63 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +112 +100 +94 +84 +78 +76 +69 +65 +59 +54 +51 +49 +41 +39 +33 +31 +24 +24 +26 +21 +22 +17 +17 +15 +15 +15 +14 +14 +13 +9 +10 +7 +8 +8 +6 +6 +11 +-57 +-116 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-118 +-110 +-102 +-92 +-84 +-80 +-74 +-71 +-67 +-63 +-60 +-56 +-52 +-47 +-42 +-41 +-38 +-37 +-33 +-31 +-27 +-26 +-25 +-25 +-21 +-21 +-20 +-20 +-16 +-16 +-13 +118 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +116 +106 +99 +86 +10 +-56 +-116 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +14 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +117 +104 +98 +89 +83 +78 +69 +66 +62 +58 +55 +48 +45 +41 +39 +37 +34 +31 +28 +27 +26 +19 +19 +21 +19 +19 +18 +14 +14 +11 +10 +10 +7 +7 +7 +2 +3 +5 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +10 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +118 +106 +100 +92 +86 +81 +6 +-60 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-120 +-115 +-106 +-100 +-90 +-87 +-79 +-73 +-65 +-57 +-54 +-51 +-48 +-43 +-45 +-41 +-41 +-37 +-36 +-31 +-26 +-25 +-24 +-23 +-21 +-17 +-13 +-15 +-14 +-16 +-16 +-16 +121 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +117 +103 +95 +87 +80 +74 +70 +68 +62 +59 +50 +47 +40 +44 +42 +40 +39 +34 +30 +28 +26 +21 +19 +17 +14 +13 +12 +11 +11 +11 +12 +12 +11 +9 +10 +6 +-60 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +12 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +117 +104 +98 +90 +83 +77 +3 +-63 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +19 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +113 +105 +98 +87 +81 +6 +-60 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +110 +101 +96 +86 +80 +5 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-120 +22 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +112 +104 +97 +90 +79 +5 +-62 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-116 +-105 +-99 +-92 +-86 +-81 +-76 +-72 +-66 +-61 +-58 +-51 +-49 +-45 +-43 +-41 +-39 +-35 +-33 +-28 +-26 +-27 +-25 +-21 +-21 +-21 +-21 +-21 +-20 +-19 +-16 +-12 +120 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +111 +98 +92 +82 +77 +70 +68 +66 +61 +57 +47 +44 +40 +37 +35 +29 +28 +31 +30 +30 +31 +29 +30 +26 +24 +22 +17 +14 +9 +6 +5 +4 +5 +6 +0 +-66 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-115 +-104 +-100 +-92 +-90 +-83 +-79 +-73 +-68 +-62 +-62 +-56 +-56 +-51 +-47 +-41 +-35 +-35 +-29 +-27 +-23 +-26 +-23 +-25 +-23 +-24 +-22 +-23 +-18 +-17 +-13 +118 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +114 +102 +101 +95 +18 +-50 +-109 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +14 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +117 +109 +101 +93 +87 +82 +75 +70 +66 +60 +56 +51 +46 +44 +36 +34 +29 +26 +27 +25 +24 +23 +22 +19 +18 +17 +11 +12 +12 +8 +8 +5 +6 +8 +8 +9 +7 +7 +-60 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-113 +-104 +-95 +-87 +-79 +-74 +-71 +-66 +-59 +-55 +-56 +-52 +-51 +-46 +-41 +-38 +-38 +-36 +-36 +-34 +-33 +-28 +-26 +-22 +-24 +-21 +-22 +-21 +-20 +-17 +-20 +116 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +108 +98 +93 +17 +-50 +-110 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +14 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +117 +107 +100 +94 +86 +81 +6 +-61 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +22 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +113 +104 +94 +87 +76 +2 +-64 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +20 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +114 +106 +102 +93 +88 +81 +6 +-60 +-118 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +19 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +117 +105 +98 +87 +82 +75 +70 +66 +60 +56 +48 +46 +44 +40 +38 +36 +33 +32 +28 +26 +25 +21 +19 +19 +16 +16 +20 +19 +18 +18 +16 +14 +11 +11 +10 +4 +3 +-1 +-67 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-114 +-106 +-96 +-91 +-84 +-80 +-75 +-71 +-65 +-61 +-54 +-50 +-51 +-47 +-48 +-44 +-45 +-40 +-40 +-35 +-31 +-32 +-28 +-27 +-23 +-20 +-23 +-19 +-21 +-20 +-15 +119 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +109 +100 +95 +89 +80 +70 +64 +57 +54 +52 +48 +45 +37 +34 +30 +27 +25 +22 +21 +24 +23 +22 +22 +20 +19 +15 +16 +14 +8 +7 +2 +3 +-2 +-2 +1 +-65 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +4 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +114 +103 +94 +86 +80 +5 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-115 +-105 +-96 +-95 +-86 +-80 +-72 +-71 +-66 +-64 +-60 +-58 +-54 +-52 +-48 +-44 +-40 +-40 +-36 +-34 +-31 +-30 +-28 +-25 +-27 +-24 +-21 +-16 +-15 +-14 +-11 +-8 +123 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +114 +107 +95 +89 +80 +75 +69 +65 +63 +57 +52 +47 +45 +40 +38 +36 +32 +30 +26 +23 +22 +17 +16 +11 +10 +13 +11 +12 +11 +12 +9 +8 +8 +4 +2 +6 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +10 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +117 +107 +99 +87 +81 +75 +0 +-65 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +15 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +115 +106 +99 +92 +82 +78 +3 +-63 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-118 +21 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +111 +104 +93 +88 +81 +76 +2 +-64 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +14 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +114 +105 +97 +88 +82 +7 +-59 +-118 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-114 +-104 +-98 +-91 +-86 +-82 +-77 +-73 +-68 +-63 +-57 +-51 +-49 +-46 +-44 +-42 +-40 +-37 +-37 +-34 +-33 +-30 +-28 +-27 +-22 +-18 +-16 +-17 +-15 +-16 +-14 +-11 +122 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +109 +104 +100 +96 +90 +83 +76 +69 +65 +62 +56 +54 +49 +46 +41 +38 +31 +28 +25 +23 +16 +16 +11 +10 +13 +10 +11 +10 +10 +14 +15 +13 +13 +11 +12 +7 +-60 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-119 +-109 +-102 +-94 +-86 +-84 +-78 +-75 +-70 +-67 +-60 +-53 +-49 +-48 +-44 +-43 +-37 +-33 +-32 +-31 +-28 +-30 +-28 +-30 +-27 +-27 +-24 +-23 +-21 +-17 +-20 +116 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +110 +100 +93 +84 +79 +68 +64 +55 +49 +49 +44 +42 +39 +38 +34 +32 +31 +27 +26 +25 +19 +18 +20 +15 +15 +13 +13 +12 +10 +10 +10 +5 +6 +9 +11 +-57 +-116 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +3 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +114 +102 +95 +88 +82 +75 +1 +-65 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-117 +-108 +-101 +-92 +-86 +-79 +-72 +-68 +-64 +-61 +-59 +-55 +-56 +-51 +-49 +-44 +-38 +-36 +-35 +-32 +-29 +-25 +-22 +-22 +-21 +-22 +-21 +-21 +-18 +-18 +-14 +-16 +119 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +117 +109 +96 +90 +78 +73 +64 +61 +55 +52 +48 +44 +42 +41 +41 +39 +35 +32 +30 +26 +24 +15 +14 +15 +14 +14 +10 +9 +4 +5 +8 +8 +9 +4 +5 +3 +-63 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-120 +-111 +-104 +-93 +-86 +-78 +-72 +-70 +-65 +-60 +-58 +-55 +-51 +-46 +-48 +-43 +-45 +-40 +-37 +-32 +-27 +-28 +-25 +-27 +-24 +-23 +-21 +-20 +-15 +-12 +-13 +124 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +110 +107 +100 +96 +19 +-49 +-109 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +114 +106 +94 +89 +82 +77 +2 +-64 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-120 +22 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +110 +104 +96 +86 +80 +74 +65 +60 +55 +50 +45 +42 +40 +36 +33 +30 +31 +31 +24 +23 +18 +18 +13 +13 +8 +8 +11 +12 +12 +12 +7 +7 +6 +6 +6 +1 +2 +-64 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +6 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +121 +113 +107 +96 +90 +82 +6 +-60 +-118 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +15 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +113 +105 +101 +93 +88 +82 +7 +-59 +-118 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-111 +-106 +-96 +-90 +-83 +-78 +-69 +-63 +-57 +-51 +-45 +-46 +-42 +-42 +-40 +-40 +-37 +-35 +-31 +-26 +-23 +-25 +-23 +-23 +-19 +-18 +-15 +-17 +-15 +-18 +-16 +115 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +118 +109 +105 +97 +91 +82 +75 +69 +65 +60 +53 +47 +45 +44 +39 +36 +32 +32 +27 +28 +26 +22 +20 +13 +12 +9 +8 +8 +6 +6 +10 +10 +10 +13 +12 +13 +-54 +-114 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-116 +-108 +-102 +-97 +-90 +-84 +-76 +-69 +-66 +-62 +-59 +-57 +-53 +-48 +-46 +-40 +-39 +-37 +-37 +-34 +-33 +-32 +-29 +-26 +-22 +-19 +-20 +-19 +-20 +-19 +-18 +117 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +115 +108 +101 +93 +17 +-51 +-110 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-118 +23 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +116 +108 +101 +91 +86 +10 +-56 +-116 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +15 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +110 +100 +95 +88 +80 +5 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +116 +106 +100 +92 +80 +6 +-61 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +15 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +113 +100 +95 +84 +80 +73 +69 +64 +60 +56 +48 +46 +44 +36 +35 +34 +30 +29 +27 +25 +24 +18 +18 +13 +14 +16 +15 +16 +18 +14 +16 +14 +14 +9 +9 +6 +5 +-62 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +3 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +114 +107 +98 +91 +86 +76 +2 +-64 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +113 +106 +99 +86 +81 +6 +-60 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +117 +108 +101 +94 +84 +79 +4 +-62 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-117 +-107 +-98 +-89 +-83 +-83 +-77 +-76 +-70 +-69 +-63 +-61 +-56 +-55 +-50 +-45 +-41 +-36 +-37 +-32 +-34 +-30 +-27 +-25 +-22 +-21 +-19 +-16 +-18 +-16 +-19 +-16 +120 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +116 +105 +99 +94 +86 +82 +75 +72 +66 +61 +58 +51 +46 +40 +39 +35 +34 +30 +27 +26 +25 +21 +21 +18 +18 +13 +12 +8 +7 +6 +5 +1 +1 +4 +3 +4 +-63 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-111 +-104 +-93 +-86 +-80 +-74 +-69 +-70 +-66 +-66 +-61 +-61 +-56 +-55 +-50 +-44 +-40 +-36 +-37 +-34 +-29 +-30 +-27 +-29 +-25 +-23 +-25 +-20 +-19 +-20 +-16 +118 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +114 +102 +95 +18 +-49 +-109 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +12 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +107 +100 +89 +84 +75 +0 +-65 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +14 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +112 +106 +98 +90 +85 +9 +-58 +-116 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +115 +107 +100 +92 +86 +80 +76 +78 +72 +68 +60 +57 +50 +48 +40 +37 +32 +30 +22 +21 +15 +15 +11 +12 +12 +8 +10 +12 +8 +10 +5 +6 +5 +5 +5 +5 +5 +10 +-58 +-117 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-119 +-111 +-101 +-91 +-86 +-81 +-76 +-72 +-67 +-62 +-55 +-50 +-46 +-49 +-45 +-47 +-43 +-44 +-39 +-35 +-34 +-26 +-24 +-20 +-23 +-20 +-24 +-21 +-23 +-20 +-17 +114 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +116 +108 +101 +90 +85 +77 +72 +67 +61 +57 +54 +49 +46 +46 +45 +42 +38 +34 +33 +29 +26 +23 +22 +14 +13 +9 +8 +4 +3 +6 +7 +9 +6 +7 +7 +6 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +9 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +116 +104 +96 +90 +84 +74 +0 +-66 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-114 +-111 +-103 +-99 +-92 +-87 +-81 +-77 +-70 +-68 +-61 +-60 +-54 +-50 +-45 +-41 +-42 +-38 +-32 +-26 +-22 +-23 +-21 +-20 +-19 +-19 +-18 +-16 +-20 +-17 +-20 +-19 +118 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +117 +106 +100 +92 +87 +77 +72 +63 +58 +49 +47 +40 +38 +38 +38 +36 +35 +35 +34 +29 +26 +23 +21 +15 +14 +11 +10 +10 +5 +6 +8 +4 +6 +2 +2 +6 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +10 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +116 +106 +99 +87 +82 +72 +-1 +-67 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-118 +-112 +-104 +-97 +-88 +-85 +-78 +-76 +-69 +-64 +-60 +-51 +-47 +-40 +-42 +-37 +-38 +-35 +-35 +-28 +-27 +-23 +-26 +-23 +-25 +-22 +-25 +-22 +-19 +-18 +-15 +-18 +118 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +112 +102 +94 +17 +-50 +-110 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +111 +99 +94 +83 +78 +4 +-62 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +15 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +110 +102 +95 +88 +83 +72 +69 +63 +60 +57 +53 +49 +44 +41 +39 +32 +29 +30 +28 +27 +21 +20 +14 +13 +13 +15 +16 +14 +15 +16 +14 +15 +13 +15 +12 +13 +11 +-57 +-116 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +6 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +108 +99 +93 +85 +79 +4 +-62 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +115 +102 +96 +88 +83 +78 +3 +-63 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-119 +19 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +117 +108 +100 +94 +82 +78 +4 +-62 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +19 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +117 +109 +99 +96 +90 +86 +10 +-56 +-115 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +12 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +115 +107 +96 +90 +83 +79 +4 +-62 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-117 +-111 +-101 +-93 +-85 +-78 +-76 +-69 +-67 +-61 +-58 +-53 +-49 +-47 +-42 +-42 +-37 +-38 +-34 +-30 +-25 +-21 +-24 +-20 +-23 +-20 +-22 +-19 +-21 +-18 +-20 +-16 +119 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +110 +102 +96 +90 +80 +74 +64 +60 +53 +49 +45 +42 +38 +36 +34 +30 +29 +31 +31 +26 +23 +21 +21 +17 +16 +14 +12 +11 +8 +7 +6 +1 +2 +-2 +0 +-66 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-115 +-110 +-101 +-98 +-90 +-87 +-82 +-72 +-67 +-62 +-56 +-50 +-50 +-46 +-44 +-41 +-38 +-34 +-36 +-33 +-29 +-30 +-26 +-25 +-22 +-20 +-22 +-19 +-19 +-19 +-16 +115 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +108 +101 +95 +18 +-49 +-109 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +111 +100 +95 +85 +81 +77 +71 +67 +62 +58 +54 +52 +51 +49 +44 +43 +41 +38 +29 +28 +21 +19 +17 +16 +16 +10 +10 +12 +8 +10 +8 +9 +8 +7 +7 +6 +5 +6 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-116 +-113 +-104 +-101 +-92 +-89 +-81 +-76 +-69 +-65 +-58 +-51 +-51 +-43 +-41 +-36 +-34 +-33 +-30 +-26 +-25 +-28 +-26 +-29 +-26 +-28 +-25 +-25 +-18 +-15 +-14 +123 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +115 +105 +96 +90 +14 +-53 +-112 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +19 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +116 +107 +100 +94 +84 +79 +4 +-62 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +107 +98 +89 +81 +74 +0 +-66 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +19 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +114 +108 +96 +91 +86 +80 +5 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-119 +22 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +107 +103 +95 +89 +79 +74 +65 +60 +56 +53 +44 +42 +38 +36 +35 +28 +26 +28 +27 +26 +20 +20 +17 +16 +16 +14 +13 +12 +7 +7 +9 +4 +6 +5 +5 +6 +5 +-62 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-120 +-114 +-105 +-99 +-91 +-88 +-79 +-77 +-71 +-63 +-59 +-53 +-50 +-44 +-39 +-38 +-35 +-33 +-32 +-30 +-28 +-24 +-20 +-22 +-22 +-21 +-18 +-15 +-13 +-16 +-15 +118 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +112 +106 +101 +94 +17 +-50 +-110 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +23 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +106 +98 +91 +86 +82 +6 +-60 +-118 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +13 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +112 +104 +96 +91 +84 +73 +68 +58 +55 +50 +46 +43 +42 +41 +38 +36 +28 +27 +22 +21 +15 +15 +15 +11 +9 +12 +9 +11 +7 +8 +6 +6 +7 +3 +5 +8 +9 +-58 +-118 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-117 +-109 +-102 +-94 +-88 +-80 +-78 +-72 +-68 +-62 +-53 +-50 +-44 +-46 +-42 +-43 +-39 +-39 +-36 +-34 +-30 +-32 +-28 +-23 +-24 +-21 +-22 +-19 +-18 +-17 +-20 +116 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +115 +109 +102 +93 +84 +77 +72 +68 +64 +59 +50 +46 +41 +37 +34 +34 +32 +29 +28 +29 +26 +26 +22 +22 +19 +16 +15 +15 +12 +11 +5 +5 +2 +2 +2 +1 +-65 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +10 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +112 +105 +94 +88 +84 +79 +4 +-62 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +116 +104 +97 +90 +84 +74 +0 +-65 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-116 +-106 +-96 +-92 +-86 +-81 +-77 +-72 +-69 +-63 +-58 +-54 +-49 +-44 +-44 +-42 +-40 +-38 +-36 +-33 +-29 +-25 +-26 +-25 +-24 +-21 +-24 +-22 +-24 +-21 +-20 +-18 +117 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +118 +110 +97 +91 +79 +74 +67 +63 +58 +54 +50 +51 +47 +45 +43 +40 +37 +34 +32 +29 +27 +26 +23 +16 +14 +8 +8 +3 +8 +10 +10 +11 +9 +7 +6 +5 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +4 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +115 +105 +99 +92 +82 +6 +-60 +-118 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-117 +-109 +-103 +-94 +-84 +-82 +-75 +-74 +-67 +-65 +-59 +-57 +-52 +-48 +-43 +-44 +-40 +-41 +-36 +-31 +-32 +-28 +-24 +-22 +-20 +-19 +-18 +-15 +-18 +-15 +-16 +-14 +119 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +114 +105 +98 +91 +15 +-52 +-112 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-119 +22 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +99 +93 +81 +76 +67 +64 +59 +53 +51 +47 +45 +44 +37 +34 +35 +33 +32 +25 +24 +19 +18 +20 +16 +17 +15 +15 +12 +12 +11 +8 +8 +8 +6 +6 +6 +5 +-62 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-117 +-108 +-101 +-92 +-87 +-78 +-71 +-68 +-65 +-62 +-60 +-56 +-52 +-47 +-42 +-40 +-37 +-36 +-35 +-32 +-30 +-32 +-29 +-31 +-27 +-26 +-26 +-23 +-25 +-21 +-18 +120 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +113 +105 +98 +90 +14 +-53 +-112 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +14 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +116 +109 +97 +90 +87 +82 +7 +-60 +-118 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +21 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +116 +106 +99 +87 +82 +72 +-2 +-68 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +117 +106 +98 +90 +84 +77 +2 +-63 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +111 +102 +96 +88 +81 +74 +70 +68 +61 +58 +53 +51 +44 +41 +36 +34 +27 +25 +26 +26 +26 +21 +19 +16 +15 +12 +11 +11 +9 +8 +8 +6 +5 +9 +11 +10 +9 +-58 +-118 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-120 +-113 +-103 +-93 +-86 +-85 +-78 +-76 +-70 +-68 +-62 +-61 +-55 +-52 +-48 +-43 +-43 +-38 +-33 +-34 +-30 +-31 +-30 +-25 +-22 +-20 +-18 +-16 +-15 +-11 +-13 +121 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +104 +97 +91 +83 +78 +73 +63 +60 +57 +53 +50 +42 +41 +38 +35 +32 +30 +28 +26 +23 +22 +21 +15 +14 +16 +13 +14 +12 +13 +16 +14 +15 +10 +10 +5 +-61 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +3 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +114 +106 +93 +86 +75 +0 +-65 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-113 +-104 +-102 +-94 +-89 +-82 +-81 +-74 +-72 +-66 +-64 +-58 +-53 +-48 +-44 +-44 +-40 +-35 +-30 +-26 +-27 +-25 +-26 +-24 +-24 +-20 +-18 +-14 +-16 +-14 +-17 +-16 +118 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +115 +103 +97 +93 +86 +83 +76 +76 +70 +65 +55 +51 +43 +41 +33 +32 +28 +27 +25 +24 +22 +24 +21 +22 +18 +16 +14 +12 +11 +5 +5 +1 +2 +4 +2 +4 +-63 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +6 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +117 +107 +98 +90 +85 +78 +4 +-63 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +19 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +111 +102 +93 +89 +82 +6 +-60 +-118 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +110 +105 +97 +88 +84 +8 +-58 +-117 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +15 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +114 +105 +100 +92 +84 +9 +-58 +-117 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-120 +-109 +-105 +-96 +-87 +-80 +-71 +-66 +-60 +-54 +-53 +-50 +-48 +-46 +-44 +-42 +-39 +-34 +-32 +-29 +-26 +-24 +-27 +-26 +-27 +-25 +-26 +-24 +-24 +-18 +-16 +-12 +119 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +116 +107 +99 +94 +89 +80 +73 +68 +64 +55 +52 +46 +43 +41 +37 +35 +34 +32 +31 +25 +24 +19 +18 +16 +15 +15 +17 +18 +17 +16 +13 +14 +10 +8 +5 +4 +-63 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-118 +-108 +-103 +-95 +-90 +-84 +-82 +-74 +-72 +-65 +-60 +-55 +-51 +-45 +-39 +-42 +-37 +-38 +-33 +-32 +-29 +-27 +-26 +-24 +-24 +-21 +-18 +-19 +-16 +-14 +-17 +118 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +116 +107 +100 +96 +20 +-48 +-108 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +113 +106 +94 +88 +81 +77 +72 +67 +62 +61 +57 +56 +50 +47 +42 +38 +32 +31 +31 +28 +26 +20 +18 +15 +13 +13 +11 +11 +14 +13 +13 +12 +12 +7 +6 +4 +4 +-2 +-68 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-118 +-111 +-101 +-91 +-84 +-82 +-76 +-75 +-69 +-67 +-62 +-60 +-55 +-51 +-46 +-47 +-42 +-42 +-39 +-32 +-31 +-28 +-27 +-24 +-25 +-22 +-24 +-22 +-19 +-21 +-17 +118 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +112 +105 +96 +89 +12 +-54 +-114 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +19 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +111 +102 +96 +89 +78 +3 +-63 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +113 +107 +99 +86 +80 +5 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +21 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +117 +107 +100 +88 +82 +75 +1 +-65 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-119 +21 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +106 +98 +90 +85 +79 +72 +66 +59 +56 +52 +44 +40 +35 +34 +31 +30 +25 +24 +21 +20 +14 +14 +11 +10 +11 +6 +5 +9 +9 +9 +7 +8 +8 +5 +5 +5 +-61 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-116 +-106 +-96 +-89 +-87 +-81 +-79 +-73 +-70 +-65 +-61 +-57 +-57 +-52 +-51 +-46 +-39 +-38 +-33 +-31 +-28 +-30 +-27 +-30 +-26 +-23 +-19 +-15 +-18 +-15 +-18 +118 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +117 +105 +98 +87 +80 +78 +71 +68 +64 +60 +51 +48 +41 +38 +38 +37 +36 +29 +28 +25 +23 +23 +20 +19 +18 +13 +13 +11 +11 +11 +9 +9 +8 +7 +7 +10 +-57 +-117 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-119 +-114 +-105 +-100 +-92 +-89 +-81 +-78 +-70 +-61 +-59 +-53 +-51 +-47 +-47 +-42 +-42 +-38 +-32 +-29 +-24 +-25 +-22 +-23 +-22 +-25 +-21 +-24 +-20 +-17 +-12 +124 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +116 +106 +97 +92 +16 +-52 +-111 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +19 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +110 +96 +91 +81 +76 +67 +62 +61 +59 +54 +51 +48 +41 +39 +32 +30 +31 +27 +27 +25 +24 +18 +18 +18 +13 +12 +15 +14 +15 +9 +10 +12 +11 +11 +12 +12 +9 +-58 +-118 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-116 +-106 +-98 +-90 +-80 +-76 +-70 +-66 +-62 +-58 +-52 +-49 +-43 +-42 +-39 +-38 +-36 +-36 +-32 +-29 +-25 +-26 +-24 +-25 +-23 +-23 +-18 +-17 +-14 +-13 +121 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +112 +105 +96 +90 +86 +79 +72 +65 +61 +58 +55 +49 +45 +36 +34 +27 +26 +21 +20 +20 +24 +23 +23 +22 +20 +20 +17 +14 +12 +10 +10 +10 +9 +8 +2 +2 +-64 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +7 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +113 +103 +97 +91 +83 +8 +-59 +-118 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +101 +94 +86 +80 +5 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-120 +-111 +-102 +-95 +-85 +-78 +-77 +-70 +-67 +-62 +-56 +-56 +-51 +-52 +-47 +-42 +-39 +-34 +-37 +-32 +-34 +-30 +-26 +-26 +-19 +-17 +-14 +-16 +-15 +-18 +-16 +-16 +118 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +115 +103 +100 +93 +17 +-51 +-110 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +117 +108 +101 +93 +86 +81 +6 +-60 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +118 +111 +99 +98 +93 +88 +83 +76 +70 +64 +55 +50 +42 +44 +40 +38 +32 +30 +22 +22 +19 +17 +18 +16 +16 +20 +18 +18 +17 +17 +11 +10 +7 +6 +3 +4 +8 +7 +-60 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-117 +-108 +-99 +-92 +-90 +-82 +-77 +-69 +-64 +-59 +-54 +-53 +-50 +-47 +-49 +-45 +-46 +-43 +-44 +-39 +-36 +-36 +-31 +-32 +-28 +-24 +-25 +-21 +-16 +-18 +-16 +116 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +115 +106 +99 +91 +84 +78 +71 +66 +63 +54 +51 +44 +40 +41 +39 +38 +34 +32 +31 +25 +24 +21 +19 +24 +22 +21 +15 +15 +11 +10 +10 +7 +6 +6 +4 +5 +-62 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +6 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +114 +105 +97 +91 +86 +82 +7 +-59 +-118 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +107 +99 +88 +82 +75 +1 +-65 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +13 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +115 +106 +98 +93 +85 +80 +5 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +14 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +109 +101 +92 +89 +82 +7 +-59 +-118 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-112 +-104 +-97 +-92 +-84 +-78 +-73 +-66 +-61 +-61 +-58 +-58 +-53 +-52 +-48 +-44 +-40 +-42 +-37 +-39 +-36 +-29 +-28 +-24 +-26 +-21 +-24 +-20 +-17 +-18 +-16 +-18 +116 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +103 +97 +93 +17 +-50 +-110 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-118 +23 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +117 +109 +97 +91 +83 +77 +2 +-63 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-120 +22 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +112 +109 +102 +97 +91 +86 +10 +-57 +-116 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +13 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +108 +100 +91 +85 +81 +75 +72 +65 +63 +57 +55 +50 +46 +44 +39 +34 +30 +26 +24 +22 +20 +19 +12 +12 +9 +9 +9 +4 +3 +6 +6 +8 +4 +5 +1 +2 +2 +-65 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-118 +-109 +-105 +-96 +-93 +-85 +-80 +-75 +-68 +-62 +-61 +-56 +-51 +-47 +-43 +-41 +-39 +-33 +-31 +-26 +-27 +-25 +-26 +-24 +-24 +-22 +-21 +-19 +-22 +-20 +-22 +114 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +110 +102 +98 +94 +84 +80 +70 +67 +61 +57 +53 +49 +45 +41 +35 +35 +33 +34 +33 +31 +30 +30 +26 +24 +21 +19 +13 +12 +9 +9 +12 +12 +12 +14 +11 +10 +-57 +-117 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +7 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +105 +100 +97 +89 +83 +8 +-59 +-118 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +20 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +112 +106 +99 +90 +82 +7 +-60 +-118 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +20 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +117 +109 +102 +91 +86 +76 +2 +-64 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-116 +-112 +-99 +-92 +-84 +-80 +-73 +-69 +-62 +-60 +-56 +-54 +-48 +-44 +-43 +-41 +-39 +-35 +-32 +-28 +-28 +-27 +-28 +-26 +-26 +-23 +-19 +-16 +-18 +-16 +-18 +-17 +118 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +115 +108 +98 +92 +86 +78 +73 +69 +63 +60 +53 +50 +47 +40 +38 +34 +32 +34 +32 +31 +24 +23 +18 +17 +16 +14 +13 +11 +10 +10 +7 +4 +5 +4 +4 +4 +-62 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-120 +-111 +-101 +-97 +-89 +-85 +-78 +-72 +-66 +-63 +-58 +-52 +-52 +-48 +-48 +-45 +-39 +-35 +-31 +-32 +-29 +-31 +-27 +-25 +-20 +-16 +-18 +-16 +-16 +-16 +-15 +120 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +115 +106 +100 +90 +14 +-53 +-113 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +117 +108 +101 +96 +92 +85 +81 +72 +68 +61 +57 +52 +46 +44 +36 +34 +28 +28 +22 +20 +22 +20 +20 +19 +19 +14 +13 +15 +12 +13 +11 +11 +8 +7 +7 +2 +3 +-1 +-67 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-113 +-110 +-101 +-99 +-91 +-88 +-81 +-77 +-70 +-68 +-61 +-57 +-54 +-48 +-47 +-42 +-42 +-37 +-38 +-33 +-27 +-28 +-25 +-26 +-23 +-24 +-22 +-20 +-17 +-18 +-15 +122 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +115 +107 +95 +89 +14 +-54 +-113 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +12 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +117 +105 +98 +95 +87 +83 +76 +72 +62 +60 +52 +48 +48 +43 +41 +38 +36 +30 +27 +22 +21 +23 +20 +20 +17 +21 +19 +20 +20 +17 +17 +14 +14 +12 +11 +9 +7 +8 +-59 +-118 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +5 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +112 +102 +97 +90 +85 +78 +4 +-62 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +11 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +111 +104 +91 +85 +83 +7 +-59 +-118 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-115 +-107 +-97 +-89 +-88 +-80 +-77 +-69 +-65 +-58 +-57 +-52 +-50 +-44 +-42 +-40 +-36 +-38 +-36 +-37 +-34 +-34 +-30 +-28 +-26 +-27 +-26 +-20 +-15 +-13 +-13 +-11 +121 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +114 +108 +100 +94 +18 +-50 +-110 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +117 +111 +103 +95 +88 +82 +7 +-59 +-118 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +15 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +109 +100 +94 +89 +83 +8 +-59 +-117 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +15 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +116 +109 +98 +91 +81 +6 +-60 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +116 +111 +103 +98 +88 +83 +8 +-59 +-118 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +112 +102 +94 +88 +79 +72 +66 +62 +57 +55 +50 +46 +40 +37 +33 +31 +24 +23 +20 +18 +18 +13 +14 +15 +11 +12 +8 +8 +12 +8 +8 +8 +8 +6 +6 +6 +1 +-65 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-120 +-111 +-106 +-98 +-92 +-82 +-75 +-67 +-66 +-60 +-59 +-55 +-53 +-50 +-47 +-44 +-44 +-39 +-40 +-35 +-29 +-30 +-26 +-28 +-24 +-26 +-22 +-19 +-14 +-11 +-13 +121 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +116 +108 +94 +89 +78 +74 +66 +62 +59 +58 +56 +51 +50 +49 +46 +38 +36 +29 +27 +24 +23 +22 +20 +19 +15 +14 +13 +11 +11 +10 +9 +10 +12 +12 +12 +11 +-56 +-116 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +2 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +111 +100 +94 +85 +78 +4 +-62 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-116 +-110 +-102 +-95 +-90 +-81 +-74 +-71 +-65 +-58 +-55 +-53 +-49 +-51 +-46 +-45 +-38 +-35 +-30 +-33 +-29 +-31 +-28 +-30 +-27 +-26 +-23 +-25 +-22 +-18 +-18 +-16 +119 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +118 +114 +107 +101 +90 +85 +78 +71 +68 +66 +63 +58 +54 +49 +45 +37 +35 +30 +28 +26 +20 +20 +22 +17 +18 +12 +10 +12 +10 +11 +8 +8 +7 +8 +6 +2 +5 +-62 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +12 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +111 +103 +96 +90 +84 +79 +4 +-62 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +114 +105 +97 +85 +80 +73 +-1 +-67 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +24 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +114 +106 +98 +92 +89 +83 +7 +-59 +-118 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-119 +22 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +105 +98 +89 +83 +73 +-1 +-66 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-117 +-108 +-97 +-89 +-85 +-80 +-76 +-71 +-67 +-60 +-56 +-49 +-48 +-44 +-43 +-40 +-40 +-37 +-38 +-34 +-35 +-31 +-29 +-26 +-23 +-25 +-21 +-22 +-20 +-15 +-16 +-12 +119 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +111 +105 +99 +91 +86 +85 +78 +74 +65 +61 +52 +49 +44 +42 +39 +36 +34 +30 +28 +27 +23 +22 +21 +19 +18 +21 +19 +18 +19 +16 +14 +14 +14 +10 +7 +6 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +9 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +113 +103 +95 +86 +81 +6 +-60 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +116 +108 +99 +93 +85 +79 +4 +-62 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-117 +-108 +-98 +-91 +-84 +-79 +-72 +-66 +-67 +-62 +-62 +-57 +-57 +-52 +-48 +-42 +-35 +-36 +-32 +-34 +-30 +-31 +-28 +-29 +-26 +-24 +-22 +-21 +-19 +-16 +-19 +-17 +121 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +109 +101 +92 +86 +79 +71 +69 +63 +59 +57 +54 +50 +45 +42 +40 +35 +34 +30 +29 +25 +22 +18 +19 +17 +10 +10 +5 +6 +1 +2 +3 +2 +2 +3 +2 +-64 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-117 +-109 +-100 +-95 +-85 +-76 +-72 +-69 +-65 +-60 +-56 +-49 +-45 +-47 +-44 +-43 +-41 +-39 +-34 +-29 +-25 +-26 +-24 +-26 +-20 +-19 +-16 +-19 +-17 +-19 +-17 +114 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +111 +104 +96 +90 +14 +-54 +-113 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-119 +26 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +110 +103 +95 +88 +82 +7 +-59 +-118 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +14 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +104 +96 +90 +82 +75 +69 +63 +59 +52 +49 +49 +46 +44 +37 +35 +31 +28 +27 +24 +23 +18 +17 +18 +14 +14 +10 +10 +9 +9 +5 +5 +8 +7 +7 +6 +7 +-60 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-120 +-112 +-102 +-96 +-87 +-82 +-76 +-73 +-67 +-64 +-58 +-54 +-48 +-45 +-45 +-41 +-40 +-36 +-31 +-30 +-29 +-29 +-29 +-27 +-27 +-23 +-19 +-20 +-19 +-18 +-14 +120 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +109 +101 +90 +85 +9 +-57 +-116 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-118 +25 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +116 +109 +101 +94 +89 +82 +76 +72 +63 +60 +61 +58 +55 +47 +44 +38 +34 +33 +29 +27 +25 +23 +21 +15 +15 +10 +8 +12 +8 +14 +14 +15 +15 +13 +11 +9 +7 +7 +-59 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +9 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +117 +108 +101 +89 +83 +73 +-1 +-66 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-112 +-106 +-99 +-93 +-88 +-81 +-74 +-73 +-67 +-66 +-60 +-56 +-51 +-51 +-47 +-41 +-38 +-32 +-32 +-29 +-30 +-27 +-28 +-25 +-27 +-24 +-26 +-24 +-18 +-20 +-16 +-18 +118 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +117 +105 +98 +94 +85 +81 +72 +68 +62 +59 +49 +47 +40 +37 +38 +36 +34 +32 +30 +29 +22 +22 +16 +14 +16 +16 +16 +15 +14 +8 +8 +8 +6 +6 +6 +4 +-62 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +11 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +114 +108 +97 +90 +81 +6 +-60 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +118 +106 +100 +98 +92 +87 +12 +-55 +-115 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +111 +104 +100 +93 +88 +81 +6 +-60 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +118 +110 +102 +94 +89 +85 +10 +-57 +-116 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-120 +-111 +-107 +-98 +-92 +-86 +-77 +-71 +-68 +-65 +-61 +-57 +-53 +-47 +-43 +-46 +-41 +-43 +-39 +-39 +-35 +-36 +-32 +-29 +-28 +-22 +-18 +-15 +-12 +-10 +-12 +-11 +-16 +119 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +112 +105 +97 +90 +84 +81 +78 +72 +68 +62 +59 +54 +50 +46 +43 +38 +34 +32 +31 +25 +22 +18 +16 +14 +14 +9 +9 +7 +6 +6 +6 +6 +4 +1 +3 +4 +-63 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-112 +-107 +-98 +-94 +-86 +-83 +-74 +-69 +-62 +-54 +-53 +-47 +-47 +-42 +-42 +-38 +-36 +-33 +-32 +-30 +-25 +-21 +-19 +-17 +-16 +-13 +-14 +-13 +-15 +-15 +118 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +114 +104 +96 +89 +13 +-54 +-113 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +22 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +111 +101 +97 +90 +82 +76 +65 +60 +52 +49 +41 +38 +38 +36 +36 +30 +29 +22 +22 +24 +21 +21 +19 +18 +16 +15 +15 +12 +11 +11 +9 +9 +8 +7 +7 +2 +2 +-65 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-114 +-105 +-99 +-93 +-88 +-84 +-77 +-71 +-63 +-57 +-52 +-54 +-50 +-52 +-47 +-44 +-41 +-38 +-33 +-28 +-28 +-21 +-20 +-18 +-21 +-19 +-21 +-20 +-22 +-20 +-20 +115 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +109 +101 +89 +13 +-54 +-113 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-118 +24 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +113 +106 +99 +90 +83 +7 +-59 +-118 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +114 +106 +98 +92 +86 +78 +4 +-62 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +22 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +114 +107 +96 +87 +80 +5 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +114 +106 +99 +94 +86 +80 +75 +70 +65 +57 +51 +50 +47 +44 +42 +41 +38 +35 +31 +30 +27 +27 +24 +21 +19 +20 +15 +13 +11 +10 +5 +5 +0 +-1 +2 +2 +6 +6 +-60 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-115 +-103 +-99 +-91 +-87 +-81 +-77 +-72 +-68 +-63 +-61 +-56 +-52 +-48 +-45 +-45 +-40 +-40 +-35 +-36 +-31 +-27 +-25 +-23 +-22 +-20 +-17 +-18 +-17 +-15 +-12 +124 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +118 +111 +103 +97 +95 +89 +84 +80 +75 +65 +60 +51 +47 +42 +40 +35 +32 +30 +24 +21 +22 +20 +19 +18 +18 +12 +12 +7 +7 +10 +10 +10 +9 +8 +8 +3 +4 +-63 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +8 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +109 +102 +91 +86 +79 +74 +0 +-65 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-116 +-107 +-103 +-94 +-88 +-82 +-76 +-72 +-66 +-64 +-58 +-57 +-51 +-45 +-44 +-40 +-41 +-36 +-35 +-34 +-29 +-30 +-27 +-28 +-24 +-21 +-19 +-16 +-18 +-15 +-12 +-13 +123 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +111 +102 +93 +87 +82 +74 +68 +61 +57 +52 +50 +44 +41 +36 +33 +30 +29 +22 +21 +16 +16 +11 +9 +12 +11 +14 +13 +15 +11 +10 +8 +7 +5 +4 +5 +-62 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +10 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +113 +101 +95 +85 +81 +78 +4 +-62 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +115 +108 +101 +91 +86 +81 +6 +-60 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +21 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +114 +106 +98 +85 +80 +5 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +116 +107 +100 +91 +85 +9 +-57 +-116 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-119 +-112 +-105 +-99 +-90 +-83 +-75 +-68 +-65 +-59 +-54 +-52 +-49 +-46 +-45 +-42 +-39 +-37 +-32 +-30 +-32 +-29 +-32 +-28 +-29 +-26 +-28 +-24 +-23 +-19 +-14 +-14 +121 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +112 +101 +94 +91 +86 +81 +72 +68 +62 +59 +50 +48 +43 +41 +38 +35 +33 +31 +28 +28 +28 +28 +26 +24 +23 +23 +18 +15 +12 +13 +10 +11 +5 +6 +4 +3 +-63 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-111 +-107 +-99 +-96 +-88 +-85 +-78 +-72 +-66 +-66 +-59 +-53 +-49 +-43 +-42 +-38 +-37 +-34 +-36 +-33 +-34 +-30 +-26 +-27 +-24 +-26 +-22 +-19 +-17 +-15 +-18 +118 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +114 +104 +97 +88 +80 +72 +67 +59 +53 +51 +50 +47 +40 +38 +34 +32 +29 +26 +25 +24 +22 +21 +22 +21 +14 +13 +10 +9 +10 +5 +5 +3 +3 +3 +-1 +-67 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +10 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +117 +106 +100 +96 +86 +81 +6 +-60 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-111 +-107 +-98 +-95 +-87 +-83 +-75 +-70 +-63 +-58 +-56 +-51 +-47 +-44 +-44 +-39 +-36 +-36 +-34 +-28 +-26 +-23 +-22 +-17 +-17 +-13 +-15 +-14 +-15 +-14 +-16 +119 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +112 +99 +93 +82 +76 +74 +67 +63 +58 +54 +46 +44 +37 +36 +29 +29 +30 +27 +28 +29 +26 +25 +22 +22 +17 +16 +17 +16 +12 +11 +9 +7 +3 +3 +0 +-66 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-116 +-108 +-100 +-92 +-89 +-81 +-78 +-72 +-67 +-61 +-58 +-57 +-51 +-51 +-45 +-40 +-40 +-37 +-33 +-30 +-26 +-28 +-25 +-21 +-23 +-20 +-23 +-19 +-16 +-18 +-14 +120 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +108 +98 +91 +15 +-52 +-112 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +22 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +114 +102 +96 +89 +84 +83 +8 +-59 +-117 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +22 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +111 +99 +93 +82 +78 +68 +64 +62 +59 +57 +49 +46 +42 +39 +38 +34 +32 +30 +27 +25 +27 +25 +25 +24 +22 +21 +17 +17 +16 +11 +8 +6 +5 +0 +1 +-1 +0 +-66 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +10 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +112 +105 +97 +91 +84 +77 +3 +-63 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +15 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +115 +106 +99 +92 +84 +8 +-58 +-117 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-116 +-105 +-98 +-95 +-88 +-83 +-78 +-72 +-67 +-60 +-54 +-52 +-49 +-45 +-47 +-42 +-43 +-40 +-41 +-36 +-32 +-31 +-28 +-28 +-25 +-27 +-24 +-18 +-18 +-14 +-16 +-14 +116 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +109 +96 +90 +78 +74 +68 +63 +59 +55 +52 +48 +43 +41 +39 +35 +33 +31 +28 +27 +24 +22 +22 +18 +16 +22 +20 +18 +14 +14 +15 +12 +10 +4 +4 +1 +-65 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-119 +-111 +-103 +-92 +-85 +-76 +-73 +-67 +-65 +-60 +-58 +-55 +-50 +-46 +-46 +-41 +-39 +-36 +-35 +-32 +-29 +-31 +-27 +-29 +-25 +-27 +-25 +-19 +-19 +-16 +-15 +121 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +118 +105 +99 +91 +15 +-53 +-112 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +113 +105 +95 +91 +84 +9 +-58 +-117 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +19 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +108 +100 +89 +82 +73 +-1 +-66 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-119 +22 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +110 +101 +93 +86 +82 +7 +-59 +-118 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +20 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +114 +104 +98 +89 +85 +78 +70 +65 +61 +56 +47 +43 +35 +33 +27 +26 +24 +22 +21 +17 +17 +12 +13 +16 +13 +13 +11 +12 +10 +9 +9 +5 +4 +6 +7 +8 +6 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +8 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +106 +100 +88 +84 +80 +5 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +14 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +112 +104 +93 +85 +78 +4 +-63 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +19 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +110 +102 +95 +85 +79 +4 +-62 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-118 +-110 +-103 +-97 +-90 +-83 +-76 +-68 +-67 +-58 +-54 +-48 +-46 +-46 +-43 +-41 +-37 +-33 +-32 +-31 +-30 +-30 +-28 +-28 +-25 +-24 +-21 +-17 +-17 +-17 +-16 +-17 +117 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +106 +99 +90 +84 +78 +70 +66 +57 +54 +51 +50 +48 +45 +43 +42 +37 +37 +33 +32 +28 +24 +23 +22 +18 +14 +12 +12 +6 +6 +1 +2 +3 +2 +2 +6 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-119 +-111 +-100 +-91 +-89 +-82 +-81 +-74 +-73 +-66 +-64 +-53 +-48 +-43 +-43 +-41 +-36 +-34 +-29 +-30 +-27 +-27 +-25 +-24 +-24 +-20 +-18 +-16 +-13 +-11 +-13 +121 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +114 +106 +98 +90 +14 +-53 +-112 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +21 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +108 +102 +94 +89 +84 +78 +3 +-63 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +111 +102 +94 +88 +80 +5 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +117 +105 +98 +95 +86 +82 +76 +72 +65 +61 +57 +49 +47 +40 +38 +37 +34 +33 +30 +28 +27 +23 +21 +20 +17 +17 +20 +18 +18 +11 +11 +9 +7 +7 +8 +8 +3 +4 +-63 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-114 +-105 +-97 +-88 +-81 +-81 +-75 +-74 +-68 +-67 +-61 +-60 +-54 +-52 +-43 +-38 +-35 +-30 +-26 +-28 +-25 +-25 +-20 +-21 +-20 +-21 +-21 +-20 +-18 +-21 +-18 +114 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +114 +106 +94 +88 +80 +74 +67 +63 +59 +53 +50 +47 +42 +40 +37 +31 +30 +24 +23 +25 +21 +21 +19 +17 +15 +14 +14 +16 +16 +16 +14 +15 +14 +11 +8 +7 +-60 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +6 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +110 +102 +92 +85 +77 +2 +-64 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-113 +-102 +-95 +-93 +-86 +-85 +-78 +-76 +-70 +-67 +-60 +-57 +-52 +-49 +-44 +-37 +-38 +-34 +-34 +-31 +-32 +-28 +-30 +-26 +-27 +-24 +-26 +-22 +-20 +-20 +-17 +-19 +118 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +103 +96 +91 +80 +76 +72 +66 +62 +62 +60 +56 +47 +44 +39 +36 +34 +30 +28 +26 +22 +20 +16 +15 +15 +13 +12 +17 +16 +16 +16 +13 +10 +8 +8 +6 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +7 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +116 +107 +100 +94 +82 +78 +3 +-63 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-116 +-105 +-97 +-88 +-81 +-80 +-73 +-72 +-67 +-66 +-60 +-58 +-53 +-50 +-45 +-47 +-42 +-42 +-37 +-37 +-35 +-28 +-25 +-21 +-24 +-20 +-23 +-20 +-16 +-18 +-16 +-14 +122 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +105 +98 +88 +12 +-55 +-114 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-118 +22 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +114 +105 +98 +90 +82 +7 +-60 +-118 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +114 +102 +96 +89 +82 +75 +70 +67 +58 +56 +48 +44 +44 +43 +41 +35 +34 +30 +26 +26 +23 +22 +22 +20 +19 +17 +16 +15 +12 +11 +10 +9 +8 +13 +12 +12 +12 +10 +-57 +-117 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +10 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +107 +100 +92 +86 +79 +5 +-62 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +23 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +111 +100 +94 +85 +81 +6 +-61 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +112 +102 +95 +89 +81 +6 +-60 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +110 +101 +94 +87 +76 +2 +-64 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +19 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +115 +104 +97 +90 +85 +74 +0 +-66 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-120 +-113 +-104 +-102 +-93 +-91 +-83 +-80 +-74 +-66 +-58 +-52 +-50 +-46 +-44 +-38 +-36 +-33 +-32 +-29 +-28 +-26 +-23 +-26 +-24 +-24 +-23 +-22 +-19 +-16 +-13 +-16 +-14 +118 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +118 +111 +104 +92 +85 +75 +70 +63 +58 +55 +51 +48 +43 +40 +38 +34 +32 +29 +26 +25 +18 +19 +21 +17 +16 +14 +13 +11 +10 +10 +6 +6 +6 +5 +5 +6 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-113 +-109 +-102 +-97 +-90 +-84 +-78 +-76 +-70 +-68 +-62 +-58 +-54 +-50 +-50 +-44 +-44 +-40 +-34 +-28 +-24 +-25 +-22 +-22 +-19 +-23 +-20 +-23 +-21 +-23 +-22 +118 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +117 +110 +100 +93 +17 +-50 +-110 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +20 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +116 +106 +98 +91 +86 +81 +73 +68 +61 +58 +49 +46 +41 +38 +36 +33 +32 +34 +31 +30 +30 +28 +21 +20 +15 +13 +10 +9 +9 +7 +6 +7 +5 +5 +4 +3 +4 +2 +-65 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-115 +-107 +-97 +-93 +-87 +-84 +-79 +-74 +-68 +-61 +-55 +-53 +-50 +-48 +-46 +-43 +-39 +-37 +-32 +-32 +-29 +-29 +-23 +-22 +-19 +-19 +-17 +-18 +-15 +-17 +-16 +116 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +110 +104 +97 +93 +17 +-51 +-110 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +12 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +97 +91 +80 +75 +1 +-65 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-118 +25 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +116 +106 +98 +89 +84 +9 +-58 +-117 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +15 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +114 +106 +98 +92 +86 +10 +-57 +-116 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +21 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +118 +108 +102 +95 +90 +79 +74 +68 +64 +60 +55 +51 +46 +42 +40 +33 +32 +26 +24 +26 +25 +25 +24 +22 +21 +17 +15 +15 +10 +10 +5 +6 +10 +11 +10 +11 +11 +10 +-58 +-117 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-118 +-113 +-104 +-95 +-86 +-77 +-72 +-67 +-63 +-60 +-55 +-50 +-50 +-47 +-46 +-43 +-40 +-36 +-38 +-35 +-32 +-29 +-26 +-25 +-22 +-25 +-22 +-20 +-22 +-19 +-21 +115 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +114 +108 +101 +89 +13 +-54 +-114 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +21 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +102 +95 +88 +83 +7 +-59 +-118 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +20 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +114 +102 +94 +86 +80 +69 +65 +59 +55 +52 +45 +43 +36 +35 +29 +28 +30 +26 +26 +24 +23 +21 +20 +19 +17 +16 +16 +12 +12 +11 +5 +6 +9 +7 +8 +6 +5 +-62 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-118 +-109 +-101 +-93 +-85 +-83 +-76 +-75 +-68 +-63 +-59 +-53 +-54 +-48 +-48 +-43 +-36 +-36 +-31 +-31 +-28 +-26 +-23 +-26 +-23 +-26 +-23 +-20 +-16 +-13 +-16 +120 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +112 +104 +92 +87 +76 +72 +66 +63 +60 +55 +52 +52 +49 +46 +44 +43 +36 +33 +28 +26 +22 +20 +18 +13 +12 +10 +10 +10 +6 +6 +8 +5 +6 +2 +3 +-1 +-67 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +9 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +100 +93 +90 +85 +81 +6 +-61 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +15 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +114 +108 +100 +95 +89 +13 +-54 +-114 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-112 +-100 +-95 +-86 +-82 +-75 +-71 +-67 +-62 +-56 +-52 +-46 +-42 +-45 +-41 +-38 +-35 +-37 +-33 +-34 +-31 +-32 +-28 +-26 +-23 +-20 +-22 +-20 +-18 +-17 +-14 +121 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +106 +95 +90 +87 +82 +78 +74 +70 +64 +57 +54 +51 +45 +40 +36 +34 +27 +25 +21 +20 +19 +17 +16 +10 +10 +5 +5 +8 +6 +6 +6 +7 +2 +3 +5 +-61 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +8 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +115 +108 +99 +92 +83 +80 +5 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-118 +-108 +-100 +-90 +-87 +-79 +-76 +-71 +-68 +-63 +-60 +-54 +-54 +-49 +-47 +-42 +-44 +-38 +-37 +-33 +-28 +-30 +-28 +-22 +-22 +-19 +-18 +-16 +-19 +-17 +-20 +-17 +124 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +114 +107 +101 +91 +15 +-52 +-112 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +118 +113 +103 +97 +90 +85 +79 +72 +65 +63 +59 +53 +46 +42 +40 +35 +32 +30 +26 +25 +18 +18 +13 +12 +15 +12 +12 +12 +12 +16 +14 +15 +9 +9 +4 +4 +0 +1 +-66 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-118 +-109 +-102 +-93 +-87 +-81 +-76 +-71 +-66 +-60 +-57 +-50 +-49 +-45 +-44 +-42 +-40 +-35 +-32 +-29 +-26 +-23 +-21 +-26 +-24 +-26 +-23 +-20 +-18 +-16 +-15 +122 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +112 +103 +96 +88 +12 +-55 +-114 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +100 +93 +90 +81 +6 +-60 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +12 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +110 +102 +95 +84 +80 +5 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +15 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +113 +104 +96 +91 +84 +8 +-58 +-117 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +110 +102 +95 +84 +79 +72 +68 +62 +57 +53 +49 +46 +44 +40 +37 +33 +30 +29 +22 +22 +22 +23 +21 +20 +21 +21 +20 +12 +11 +4 +5 +2 +3 +4 +3 +4 +2 +-64 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-120 +-112 +-104 +-96 +-93 +-87 +-84 +-78 +-74 +-68 +-67 +-61 +-61 +-56 +-52 +-51 +-45 +-44 +-39 +-32 +-32 +-28 +-26 +-24 +-23 +-23 +-21 +-23 +-20 +-22 +-18 +-16 +116 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +112 +105 +97 +91 +85 +73 +70 +67 +61 +56 +52 +48 +46 +39 +37 +37 +32 +31 +29 +27 +22 +22 +23 +22 +20 +14 +13 +10 +10 +9 +8 +7 +3 +3 +6 +2 +-64 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +12 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +109 +105 +98 +86 +81 +6 +-60 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-118 +-109 +-102 +-91 +-84 +-83 +-77 +-73 +-69 +-63 +-59 +-55 +-48 +-44 +-46 +-38 +-36 +-31 +-33 +-30 +-30 +-26 +-24 +-27 +-24 +-27 +-25 +-23 +-21 +-19 +-15 +-12 +119 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +112 +104 +96 +90 +81 +75 +71 +64 +59 +54 +50 +48 +42 +39 +37 +31 +28 +30 +26 +25 +22 +25 +23 +22 +22 +21 +16 +15 +12 +12 +12 +10 +8 +6 +6 +8 +-59 +-119 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +8 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +114 +108 +100 +96 +90 +82 +7 +-59 +-118 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +14 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +114 +107 +99 +93 +87 +80 +5 +-61 +-120 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +109 +102 +91 +86 +76 +2 +-64 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +19 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +109 +101 +94 +89 +84 +9 +-58 +-116 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-121 +-118 +-114 +-103 +-99 +-90 +-85 +-72 +-66 +-60 +-59 +-54 +-54 +-50 +-50 +-45 +-45 +-40 +-37 +-35 +-28 +-26 diff --git a/traces/hid-proxCardII-05512-11432784-1.pm3 b/traces/lf_HID-proxCardII-05512-11432784-1.pm3 similarity index 100% rename from traces/hid-proxCardII-05512-11432784-1.pm3 rename to traces/lf_HID-proxCardII-05512-11432784-1.pm3 diff --git a/traces/HID-weak-fob-11647.pm3 b/traces/lf_HID-weak-fob-11647.pm3 similarity index 100% rename from traces/HID-weak-fob-11647.pm3 rename to traces/lf_HID-weak-fob-11647.pm3 diff --git a/traces/homeagain.pm3 b/traces/lf_HomeAgain.pm3 similarity index 78% rename from traces/homeagain.pm3 rename to traces/lf_HomeAgain.pm3 index b1c0a17e6..3f7d3cb9d 100644 --- a/traces/homeagain.pm3 +++ b/traces/lf_HomeAgain.pm3 @@ -1,6000 +1,6000 @@ --73 --69 --62 --50 --37 --21 --6 -8 -19 -28 -32 -33 -31 -27 -18 -9 --2 --13 --25 --35 --46 --54 --61 --65 --69 --71 --72 --71 --70 --68 --69 --71 --71 --68 --61 --50 --36 --21 --6 -9 -20 -29 -33 -34 -31 -27 -19 -10 --2 --12 --24 --35 --45 --53 --60 --65 --69 --71 --72 --72 --70 --68 --68 --71 --72 --68 --61 --49 --37 --20 --6 -8 -20 -29 -32 -33 -30 -27 -19 -10 --2 --13 --25 --36 --46 --54 --62 --67 --71 --72 --73 --72 --71 --69 --70 --71 --72 --68 --62 --50 --37 --21 --6 -9 -20 -28 -32 -34 -31 -27 -19 -10 --1 --13 --25 --35 --45 --54 --61 --65 --69 --71 --72 --71 --70 --68 --69 --71 --72 --68 --61 --49 --36 --21 --6 -9 -20 -28 -32 -33 -31 -26 -19 -10 --2 --13 --25 --36 --46 --54 --61 --66 --70 --72 --73 --73 --72 --69 --70 --73 --73 --69 --62 --50 --37 --21 --6 -9 -20 -29 -33 -34 -31 -27 -19 -10 --2 --13 --25 --35 --46 --54 --61 --66 --70 --71 --73 --72 --71 --69 --70 --72 --73 --69 --62 --51 --37 --21 --6 -9 -20 -29 -33 -34 -31 -27 -19 -10 --2 --13 --25 --37 --46 --54 --61 --65 --69 --71 --73 --71 --71 --69 --66 --63 --60 --57 --54 --50 --47 --44 --42 --40 --39 --37 --36 --35 --34 --34 --37 --41 --46 --45 --42 --34 --25 --13 --1 -11 -21 -29 -33 -35 -33 -30 -22 -13 -2 --10 --21 --32 --42 --50 --58 --63 --67 --69 --70 --70 --69 --67 --68 --70 --71 --67 --61 --49 --36 --20 --5 -9 -20 -29 -33 -34 -31 -28 -20 -11 --1 --12 --25 --35 --45 --53 --61 --65 --69 --71 --72 --72 --71 --69 --70 --72 --72 --69 --62 --51 --37 --22 --6 -8 -19 -28 -32 -34 -31 -27 -20 -15 -7 -1 --4 --8 --11 --14 --16 --17 --19 --20 --23 --24 --26 --28 --31 --36 --43 --49 --55 --60 --66 --69 --72 --74 --75 --76 --75 --73 --72 --69 --69 --71 --71 --68 --62 --52 --39 --25 --11 -3 -15 -24 -29 -32 -30 -27 -20 -11 -0 --11 --23 --34 --44 --52 --59 --65 --69 --71 --73 --72 --72 --69 --67 --64 --61 --57 --54 --50 --48 --45 --43 --41 --39 --37 --36 --35 --34 --34 --37 --41 --45 --45 --41 --34 --25 --13 --1 -11 -22 -29 -33 -35 -33 -29 -22 -13 -1 --10 --22 --32 --43 --50 --57 --62 --67 --69 --70 --70 --69 --67 --68 --70 --71 --68 --62 --50 --37 --22 --7 -8 -19 -28 -32 -34 -31 -27 -20 -11 --1 --12 --24 --35 --45 --53 --60 --66 --70 --72 --73 --73 --71 --70 --70 --72 --72 --69 --61 --50 --37 --21 --6 -9 -20 -29 -33 -35 -31 -28 -20 -15 -7 -2 --4 --8 --11 --13 --15 --17 --19 --20 --23 --24 --26 --27 --31 --36 --42 --48 --55 --60 --65 --69 --72 --73 --75 --75 --74 --72 --71 --68 --65 --62 --60 --57 --53 --50 --48 --46 --44 --41 --40 --38 --38 --36 --36 --36 --39 --43 --47 --47 --43 --36 --27 --16 --4 -8 -17 -26 -30 -33 -33 -31 -25 -20 -13 -7 -1 --3 --7 --10 --12 --15 --16 --18 --20 --21 --23 --25 --28 --33 --39 --45 --52 --58 --64 --67 --71 --73 --75 --75 --75 --73 --71 --68 --66 --63 --61 --57 --55 --51 --49 --46 --45 --42 --41 --40 --40 --38 --37 --36 --40 --44 --47 --47 --43 --36 --27 --16 --5 -7 -17 -26 -30 -33 -33 -30 -25 -20 -13 -8 -2 --3 --7 --11 --13 --15 --17 --19 --21 --22 --24 --25 --29 --33 --40 --46 --53 --58 --65 --68 --72 --73 --75 --75 --74 --72 --70 --68 --65 --62 --60 --56 --53 --50 --48 --45 --43 --41 --40 --38 --37 --37 --36 --35 --39 --43 --47 --46 --43 --36 --27 --16 --4 -8 -17 -27 -31 -34 -33 -31 -26 -20 -14 -8 -1 --2 --7 --9 --13 --14 --16 --18 --21 --22 --24 --25 --29 --33 --40 --46 --53 --58 --64 --68 --72 --73 --75 --75 --74 --73 --71 --69 --69 --71 --72 --68 --62 --52 --40 --26 --12 -1 -13 -23 -28 -31 -30 -27 -20 -11 --1 --12 --24 --35 --45 --53 --61 --65 --70 --72 --73 --72 --72 --69 --67 --64 --61 --58 --55 --51 --49 --45 --43 --40 --39 --37 --36 --35 --35 --34 --37 --41 --45 --45 --42 --35 --25 --13 --1 -11 -21 -29 -33 -35 -33 -30 -22 -13 -2 --9 --21 --32 --42 --49 --58 --62 --66 --69 --70 --70 --69 --67 --68 --70 --71 --67 --60 --49 --36 --21 --5 -9 -21 -29 -33 -35 -32 -29 -22 -16 -8 -3 --3 --6 --10 --12 --14 --15 --17 --19 --21 --23 --25 --27 --31 --35 --42 --47 --54 --59 --65 --69 --72 --74 --75 --75 --75 --73 --72 --69 --69 --71 --72 --69 --63 --53 --42 --26 --12 -2 -13 -23 -28 -30 -29 -26 -19 -10 --1 --12 --24 --35 --45 --53 --60 --66 --70 --72 --73 --73 --72 --69 --67 --64 --61 --58 --55 --51 --48 --46 --43 --40 --39 --37 --36 --35 --34 --34 --37 --41 --45 --44 --41 --34 --25 --13 --1 -11 -21 -29 -33 -36 -33 -30 -23 -18 -11 -5 -0 --4 --8 --10 --13 --14 --16 --17 --19 --21 --23 --25 --28 --33 --40 --46 --53 --58 --65 --68 --72 --74 --75 --75 --74 --73 --71 --68 --66 --62 --60 --56 --53 --51 --48 --46 --44 --42 --41 --39 --39 --37 --37 --36 --39 --44 --47 --47 --44 --36 --28 --16 --5 -7 -18 -26 -31 -34 -33 -31 -24 -15 -4 --8 --20 --30 --41 --49 --57 --62 --67 --69 --70 --70 --70 --68 --69 --71 --72 --68 --62 --51 --37 --22 --7 -8 -19 -29 -33 -35 -32 -29 -22 -16 -9 -3 --3 --6 --9 --12 --14 --16 --18 --19 --21 --23 --25 --26 --29 --34 --40 --47 --53 --59 --65 --68 --72 --74 --75 --75 --75 --74 --71 --68 --66 --63 --60 --57 --54 --51 --48 --46 --44 --42 --40 --38 --38 --37 --37 --36 --39 --44 --47 --47 --44 --37 --28 --16 --5 -7 -17 -26 -31 -34 -33 -30 -23 -15 -3 --8 --20 --31 --41 --49 --56 --62 --66 --69 --70 --70 --69 --68 --69 --71 --71 --68 --61 --50 --37 --21 --7 -7 -19 -28 -33 -35 -32 -28 -21 -15 -8 -3 --3 --6 --10 --13 --15 --16 --19 --20 --22 --23 --26 --27 --30 --35 --41 --47 --54 --59 --65 --69 --72 --74 --75 --75 --74 --73 --71 --68 --69 --71 --72 --68 --62 --52 --40 --26 --11 -3 -15 -24 -29 -31 -30 -27 -19 -11 --1 --12 --24 --35 --45 --53 --61 --66 --70 --73 --74 --73 --72 --70 --71 --73 --73 --69 --62 --51 --37 --21 --7 -8 -19 -28 -32 -34 -31 -26 -19 -10 --2 --14 --25 --36 --46 --54 --61 --66 --70 --72 --73 --72 --71 --68 --66 --63 --60 --56 --53 --50 --47 --44 --42 --40 --39 --37 --36 --35 --35 --33 --37 --41 --45 --45 --41 --34 --24 --12 -0 -13 -22 -31 -35 -35 -34 -30 -24 -18 -11 -5 --1 --5 --9 --11 --13 --14 --16 --18 --20 --21 --23 --25 --29 --33 --39 --46 --52 --58 --63 --67 --71 --73 --75 --75 --75 --73 --72 --69 --70 --71 --72 --69 --63 --52 --41 --26 --12 -2 -14 -23 -29 -32 -30 -28 -21 -12 -0 --12 --24 --35 --45 --53 --60 --65 --70 --72 --73 --73 --72 --70 --67 --64 --61 --58 --54 --51 --48 --45 --43 --41 --39 --37 --36 --35 --35 --34 --37 --42 --45 --45 --42 --35 --25 --13 --1 -11 -21 -29 -33 -35 -33 -30 -23 -14 -2 --9 --21 --32 --42 --50 --58 --63 --67 --70 --71 --70 --69 --67 --68 --70 --71 --67 --60 --49 --36 --21 --6 -9 -20 -29 -33 -35 -33 -28 -21 -11 --1 --12 --24 --35 --45 --53 --61 --66 --70 --71 --72 --72 --72 --69 --70 --72 --73 --69 --62 --50 --37 --21 --5 -9 -20 -29 -33 -34 -31 -27 -20 -14 -7 -1 --4 --7 --11 --13 --15 --16 --18 --20 --22 --24 --26 --27 --30 --35 --41 --47 --54 --60 --65 --69 --72 --74 --75 --75 --75 --73 --71 --68 --70 --71 --72 --68 --63 --52 --40 --25 --12 -3 -14 -23 -29 -31 -30 -27 -19 -10 --1 --13 --25 --35 --45 --54 --61 --66 --69 --72 --73 --72 --71 --69 --70 --72 --73 --70 --62 --51 --37 --22 --7 -8 -19 -28 -32 -34 -31 -27 -19 -10 --2 --13 --25 --35 --46 --54 --61 --65 --70 --72 --73 --73 --72 --69 --67 --64 --61 --57 --53 --50 --48 --45 --42 --40 --39 --37 --36 --35 --34 --33 --36 --41 --45 --44 --41 --34 --24 --12 -0 -12 -22 -30 -34 -36 -33 -30 -23 -18 -11 -5 --1 --5 --9 --11 --13 --15 --17 --18 --20 --21 --23 --25 --29 --33 --40 --46 --53 --58 --64 --68 --71 --73 --74 --75 --75 --73 --71 --69 --66 --63 --60 --57 --54 --51 --49 --47 --44 --42 --41 --39 --39 --37 --37 --36 --39 --44 --47 --46 --43 --36 --28 --16 --5 -7 -17 -26 -31 -34 -33 -31 -24 -16 -4 --7 --19 --30 --41 --49 --57 --63 --67 --69 --70 --70 --70 --68 --69 --71 --72 --68 --62 --51 --37 --21 --7 -8 -19 -29 -33 -35 -33 -29 -22 -16 -8 -3 --3 --7 --10 --12 --14 --15 --18 --19 --21 --23 --25 --27 --30 --35 --41 --47 --54 --59 --65 --69 --72 --74 --75 --76 --75 --73 --72 --69 --70 --71 --72 --69 --62 --52 --40 --26 --12 -2 -13 -23 -28 -31 -29 -26 -19 -10 --1 --12 --24 --35 --45 --53 --61 --66 --70 --72 --73 --72 --71 --69 --66 --63 --61 --57 --54 --51 --48 --45 --43 --41 --39 --37 --36 --35 --35 --34 --37 --42 --45 --45 --42 --35 --25 --12 --1 -12 -22 -30 -34 -36 -34 -30 -23 -14 -2 --9 --21 --32 --42 --51 --58 --63 --67 --70 --72 --71 --70 --68 --69 --72 --72 --68 --61 --49 --36 --21 --5 -9 -20 -29 -33 -35 -32 -28 -21 -15 -7 -2 --4 --7 --11 --13 --15 --16 --18 --19 --22 --23 --25 --27 --30 --35 --41 --47 --54 --59 --65 --69 --72 --74 --75 --75 --74 --73 --71 --68 --66 --63 --60 --56 --54 --50 --48 --45 --43 --41 --40 --38 --38 --37 --37 --36 --39 --44 --47 --47 --43 --36 --27 --15 --5 -8 -18 -27 -31 -34 -33 -31 -24 -15 -4 --7 --20 --31 --41 --49 --57 --62 --67 --70 --71 --70 --70 --68 --69 --71 --72 --69 --62 --51 --37 --22 --7 -8 -19 -29 -33 -35 -33 -28 -22 -16 -8 -3 --3 --6 --11 --12 --14 --16 --18 --20 --22 --23 --27 --27 --30 --35 --41 --48 --54 --60 --65 --69 --72 --74 --76 --76 --75 --74 --72 --69 --67 --64 --61 --57 --55 --51 --49 --46 --45 --43 --41 --39 --39 --37 --37 --36 --39 --43 --47 --46 --43 --36 --27 --16 --4 -8 -18 -27 -31 -35 -34 -31 -26 -21 -14 -9 -2 --2 --7 --9 --13 --14 --16 --18 --20 --21 --23 --25 --29 --33 --40 --46 --53 --59 --64 --69 --72 --74 --75 --75 --75 --73 --71 --69 --66 --63 --60 --57 --54 --51 --49 --46 --44 --42 --41 --40 --39 --37 --37 --36 --40 --44 --47 --47 --44 --37 --28 --16 --5 -7 -17 -26 -31 -35 -33 -31 -26 -21 -14 -8 -2 --3 --7 --10 --13 --15 --17 --19 --20 --22 --23 --25 --29 --33 --39 --45 --52 --58 --64 --68 --72 --73 --75 --74 --75 --72 --71 --68 --69 --71 --72 --68 --63 --52 --41 --26 --12 -2 -14 -23 -29 -32 -31 -27 -20 -12 -1 --11 --23 --34 --44 --53 --60 --65 --69 --72 --73 --72 --72 --69 --70 --72 --73 --69 --62 --50 --37 --21 --6 -9 -20 -29 -33 -35 -32 -28 -20 -11 --1 --12 --25 --35 --46 --54 --61 --67 --71 --72 --74 --72 --72 --69 --70 --72 --73 --70 --62 --51 --38 --22 --6 -8 -20 -29 -33 -34 -31 -27 -19 -10 --2 --13 --25 --36 --46 --53 --61 --66 --70 --72 --73 --73 --72 --69 --71 --72 --73 --69 --62 --51 --37 --21 --7 -9 -20 -29 -33 -35 -32 -27 -20 -11 --1 --13 --25 --35 --46 --54 --61 --67 --70 --73 --74 --73 --72 --69 --70 --72 --73 --70 --62 --50 --36 --20 --5 -10 -21 -30 -34 -35 -32 -28 -20 -10 --2 --13 --25 --36 --47 --54 --62 --66 --70 --72 --73 --72 --71 --69 --70 --72 --73 --69 --62 --51 --37 --20 --5 -9 -21 -29 -33 -35 -32 -28 -20 -10 --1 --13 --25 --36 --46 --54 --61 --66 --70 --72 --74 --73 --72 --69 --71 --72 --73 --69 --63 --51 --37 --21 --7 -9 -20 -29 -33 -35 -32 -27 -20 -11 --1 --13 --25 --36 --46 --54 --61 --66 --69 --71 --72 --72 --71 --69 --70 --72 --73 --69 --62 --51 --37 --21 --5 -9 -21 -30 -33 -35 -31 -27 -19 -10 --2 --13 --26 --36 --48 --55 --63 --67 --71 --73 --74 --73 --73 --70 --67 --64 --61 --57 --54 --50 --47 --44 --42 --39 --38 --36 --35 --34 --34 --33 --36 --41 --45 --44 --41 --34 --24 --12 -0 -13 -22 -30 -34 -37 -35 -31 -23 -14 -2 --9 --22 --32 --42 --51 --59 --64 --68 --70 --71 --70 --70 --68 --69 --71 --72 --68 --61 --50 --37 --20 --5 -10 -21 -30 -34 -36 -33 -29 -21 -12 --1 --12 --24 --35 --46 --54 --61 --66 --70 --72 --73 --73 --72 --70 --71 --73 --73 --69 --62 --50 --37 --21 --6 -9 -20 -29 -33 -34 -31 -28 -20 -11 --2 --13 --25 --36 --46 --54 --61 --67 --71 --73 --73 --73 --72 --70 --71 --73 --73 --69 --62 --51 --36 --20 --5 -9 -21 -30 -33 -35 -32 -28 -20 -11 --1 --12 --25 --35 --45 --54 --61 --66 --70 --72 --73 --72 --71 --69 --71 --72 --73 --70 --63 --51 --37 --21 --6 -10 -21 -30 -33 -35 -32 -27 -20 -10 --2 --13 --26 --36 --47 --55 --62 --67 --71 --73 --74 --73 --73 --70 --71 --73 --73 --69 --62 --50 --37 --21 --6 -9 -20 -30 -34 -35 -32 -29 -20 -11 --1 --12 --25 --36 --46 --54 --61 --67 --70 --72 --73 --72 --71 --69 --70 --72 --73 --69 --62 --51 --37 --21 --5 -10 -21 -30 -34 -35 -32 -27 -20 -11 --1 --13 --25 --36 --46 --54 --62 --66 --70 --72 --74 --73 --72 --70 --71 --72 --73 --69 --62 --51 --37 --22 --6 -9 -20 -29 -33 -35 -32 -27 -21 -15 -7 -2 --4 --7 --11 --12 --15 --16 --18 --20 --21 --23 --25 --27 --30 --35 --41 --47 --53 --59 --65 --68 --72 --74 --76 --75 --75 --73 --71 --68 --66 --63 --60 --56 --54 --51 --49 --46 --44 --43 --41 --39 --39 --38 --37 --37 --40 --44 --48 --47 --44 --36 --27 --16 --4 -8 -18 -27 -31 -35 -33 -31 -23 -15 -4 --7 --20 --31 --41 --50 --58 --63 --67 --70 --71 --71 --70 --68 --69 --71 --72 --68 --61 --50 --36 --21 --5 -9 -20 -30 -33 -36 -33 -29 -23 -17 -9 -3 --2 --6 --10 --12 --14 --16 --18 --20 --22 --23 --25 --27 --31 --35 --42 --48 --55 --61 --66 --70 --73 --75 --76 --76 --76 --73 --72 --69 --70 --72 --72 --69 --63 --53 --40 --25 --11 -3 -15 -24 -29 -31 -30 -26 -19 -11 --1 --12 --24 --35 --45 --53 --61 --66 --70 --72 --73 --73 --72 --70 --68 --65 --62 --58 --55 --51 --49 --45 --43 --41 --39 --37 --37 --35 --35 --34 --37 --41 --45 --45 --41 --34 --24 --12 -0 -12 -22 -30 -35 -37 -35 -31 -23 -14 -2 --10 --22 --32 --43 --51 --59 --64 --68 --70 --71 --71 --70 --68 --69 --70 --72 --67 --61 --49 --35 --19 --4 -9 -21 -31 -35 -37 -33 -29 -21 -12 --1 --12 --24 --35 --45 --53 --61 --66 --71 --73 --74 --73 --72 --70 --71 --72 --73 --69 --62 --51 --37 --21 --6 -9 -21 -30 -33 -35 -32 -28 -20 -11 --1 --13 --25 --36 --47 --54 --62 --67 --71 --73 --74 --73 --72 --70 --71 --73 --73 --69 --63 --51 --37 --21 --5 -9 -21 -30 -34 -36 -33 -29 -21 -11 -0 --13 --24 --35 --45 --54 --61 --66 --71 --73 --74 --73 --72 --70 --71 --72 --73 --69 --62 --50 --37 --21 --5 -10 -21 -30 -33 -35 -31 -28 -21 -15 -8 -2 --3 --7 --10 --12 --15 --16 --18 --19 --21 --23 --25 --26 --30 --35 --40 --47 --53 --59 --65 --69 --72 --74 --75 --75 --75 --74 --72 --69 --70 --72 --72 --69 --63 --53 --40 --26 --11 -3 -15 -25 -29 -32 -30 -27 -20 -11 --1 --12 --24 --35 --45 --53 --61 --67 --71 --73 --75 --74 --73 --71 --72 --74 --74 --71 --63 --52 --38 --22 --6 -9 -20 -29 -34 -35 -33 -29 -21 -11 --1 --12 --25 --35 --46 --54 --62 --66 --71 --72 --74 --73 --72 --69 --70 --72 --74 --69 --62 --50 --37 --21 --5 -9 -21 -30 -34 -35 -32 -28 -20 -10 --1 --13 --25 --35 --46 --54 --61 --66 --70 --72 --73 --73 --72 --69 --67 --64 --61 --57 --54 --50 --47 --44 --43 --40 --39 --37 --36 --35 --34 --33 --37 --41 --45 --45 --42 --34 --25 --12 -0 -12 -22 -30 -34 -36 -34 -30 -24 -18 -11 -5 --1 --5 --9 --11 --13 --15 --17 --18 --20 --21 --24 --25 --28 --33 --40 --46 --53 --58 --65 --69 --72 --74 --76 --76 --75 --73 --72 --69 --70 --71 --73 --70 --63 --53 --41 --26 --12 -3 -14 -24 -29 -32 -30 -27 -21 -11 -0 --11 --23 --34 --44 --53 --60 --66 --70 --72 --74 --73 --72 --70 --67 --64 --61 --58 --55 --51 --49 --46 --43 --41 --39 --37 --36 --34 --34 --33 --37 --41 --45 --45 --42 --34 --25 --12 --1 -12 -22 -30 -35 -36 -35 -31 -25 -19 -11 -5 -0 --4 --8 --11 --13 --14 --16 --17 --19 --21 --23 --24 --28 --33 --39 --46 --52 --58 --65 --68 --72 --74 --75 --75 --74 --73 --71 --68 --66 --63 --59 --56 --53 --50 --48 --46 --43 --42 --41 --39 --38 --37 --37 --36 --40 --44 --47 --47 --44 --37 --28 --16 --5 -8 -18 -27 -32 -35 -34 -31 -25 -16 -5 --7 --19 --30 --41 --49 --57 --63 --67 --69 --71 --70 --70 --68 --69 --71 --72 --69 --62 --50 --37 --21 --7 -9 -20 -29 -33 -35 -33 -28 -21 -12 -0 --12 --24 --35 --45 --54 --61 --66 --70 --72 --73 --73 --71 --69 --71 --72 --73 --69 --62 --51 --37 --21 --6 -9 -20 -29 -33 -35 -32 -27 -20 -11 --1 --13 --25 --35 --46 --54 --61 --67 --71 --72 --73 --73 --72 --69 --70 --72 --73 --69 --62 --50 --36 --20 --5 -10 -21 -30 -34 -36 -33 -28 -20 -11 --1 --13 --25 --35 --46 --54 --62 --67 --70 --73 --74 --73 --72 --70 --71 --73 --74 --70 --63 --51 --37 --21 --6 -9 -21 -30 -33 -35 -32 -28 -20 -11 --1 --13 --25 --36 --47 --55 --62 --67 --72 --74 --75 --73 --72 --70 --71 --72 --73 --69 --62 --50 --37 --21 --5 -9 -21 -30 -34 -36 -32 -28 -20 -11 --1 --13 --25 --36 --46 --54 --61 --67 --71 --72 --73 --73 --72 --70 --71 --72 --73 --69 --63 --50 --37 --21 --6 -10 -21 -30 -33 -35 -32 -28 -20 -11 --1 --13 --25 --35 --46 --54 --62 --66 --71 --73 --73 --73 --71 --69 --71 --72 --73 --69 --62 --50 --36 --21 --5 -10 -21 -30 -34 -36 -32 -28 -20 -11 --1 --12 --25 --35 --46 --54 --61 --66 --71 --72 --73 --73 --72 --70 --71 --72 --73 --69 --62 --51 --37 --21 --5 -9 -21 -30 -35 -36 -33 -29 -22 -15 -8 -2 --3 --7 --11 --13 --15 --17 --18 --20 --22 --24 --26 --27 --31 --35 --42 --48 --54 --60 --65 --70 --73 --75 --76 --76 --76 --74 --72 --69 --71 --72 --73 --69 --63 --53 --41 --26 --12 -3 -15 -24 -29 -32 -31 -28 -20 -11 --1 --12 --24 --35 --45 --54 --61 --67 --71 --73 --74 --73 --72 --70 --71 --73 --73 --70 --63 --51 --37 --22 --6 -9 -20 -29 -34 -36 -32 -28 -21 -11 --1 --12 --25 --36 --45 --54 --61 --66 --70 --72 --73 --73 --72 --69 --71 --72 --73 --69 --63 --50 --37 --20 --5 -9 -21 -30 -34 -35 -32 -28 -20 -11 --2 --13 --25 --36 --47 --55 --63 --67 --71 --73 --74 --73 --72 --70 --71 --73 --73 --70 --62 --50 --37 --21 --5 -10 -21 -30 -34 -36 -32 -28 -20 -11 --1 --13 --25 --35 --46 --54 --61 --66 --70 --73 --74 --73 --72 --70 --71 --72 --73 --70 --62 --51 --37 --21 --5 -9 -21 -30 -34 -35 -33 -29 -21 -12 --1 --12 --25 --36 --46 --54 --62 --67 --71 --73 --74 --73 --72 --69 --70 --71 --73 --69 --62 --50 --36 --20 --5 -10 -21 -30 -33 -35 -32 -28 -20 -10 --2 --13 --26 --36 --47 --54 --62 --67 --71 --73 --74 --73 --72 --69 --71 --72 --73 --70 --62 --51 --37 --21 --5 -10 -21 -29 -34 -35 -32 -27 -20 -10 --2 --13 --26 --36 --46 --54 --61 --66 --71 --73 --73 --73 --72 --70 --71 --72 --73 --69 --62 --51 --37 --21 --5 -9 -21 -31 -34 -36 -32 -28 -21 -11 --1 --12 --24 --35 --46 --54 --61 --67 --71 --73 --74 --73 --72 --69 --67 --64 --61 --57 --54 --50 --48 --45 --43 --40 --39 --36 --36 --35 --34 --34 --37 --42 --46 --46 --43 --35 --25 --12 --1 -12 -22 -30 -35 -37 -35 -31 -23 -14 -3 --9 --21 --32 --42 --51 --58 --64 --68 --70 --71 --71 --70 --68 --69 --71 --72 --69 --61 --50 --37 --21 --5 -9 -21 -30 -35 -36 -33 -29 -21 -12 --1 --12 --24 --35 --46 --54 --61 --66 --71 --72 --73 --73 --72 --69 --70 --73 --73 --69 --62 --50 --37 --20 --5 -10 -21 -30 -35 -36 -33 -29 -20 -11 --1 --12 --25 --36 --47 --55 --62 --67 --71 --72 --74 --73 --72 --70 --71 --73 --73 --69 --63 --51 --37 --20 --5 -10 -21 -30 -34 -35 -33 -28 -20 -11 --1 --13 --25 --35 --46 --54 --61 --67 --71 --72 --74 --73 --72 --70 --71 --73 --73 --70 --63 --51 --37 --21 --6 -9 -20 -30 -34 -35 -31 -28 -21 -11 --1 --12 --24 --35 --46 --54 --62 --67 --71 --73 --74 --73 --72 --69 --71 --73 --73 --69 --62 --51 --37 --20 --5 -10 -22 -31 -35 -36 -33 -29 -21 -11 --1 --12 --25 --36 --46 --54 --62 --67 --71 --73 --74 --73 --72 --70 --71 --72 --73 --69 --62 --50 --36 --20 --5 -10 -21 -30 -33 -35 -32 -27 -20 -11 --1 --13 --25 --36 --46 --55 --62 --67 --71 --73 --74 --73 --72 --70 --71 --72 --73 --70 --62 --51 --37 --21 --5 -10 -21 -30 -34 -36 -32 -28 -20 -11 --1 --12 --25 --35 --46 --53 --61 --66 --70 --72 --73 --73 --72 --69 --71 --73 --73 --69 --62 --51 --37 --21 --6 -9 -20 -29 -34 -35 -33 -28 -22 -15 -8 -3 --3 --7 --10 --13 --15 --16 --19 --20 --22 --23 --26 --27 --31 --35 --41 --48 --55 --60 --66 --70 --74 --75 --76 --76 --76 --74 --72 --69 --71 --72 --73 --70 --63 --53 --41 --26 --12 -3 -15 -24 -30 -32 -31 -28 -21 -12 --1 --11 --24 --35 --45 --53 --61 --66 --71 --73 --74 --73 --73 --70 --72 --74 --74 --70 --63 --51 --38 --21 --6 -9 -21 -30 -34 -35 -33 -29 -20 -11 --1 --12 --24 --36 --46 --54 --61 --66 --71 --72 --74 --73 --72 --70 --71 --73 --73 --69 --62 --51 --37 --21 --5 -10 -21 -30 -35 -36 -33 -29 -21 -12 --1 --12 --25 --36 --46 --55 --63 --67 --70 --72 --74 --73 --72 --70 --71 --73 --74 --70 --62 --50 --37 --20 --5 -10 -22 -30 -35 -36 -32 -28 -20 -11 --1 --13 --25 --36 --46 --55 --62 --67 --71 --73 --74 --73 --73 --70 --72 --73 --74 --70 --63 --51 --37 --21 --5 -9 -21 -30 -34 -35 -33 -28 -20 -11 --1 --12 --25 --36 --47 --55 --62 --68 --71 --73 --74 --74 --73 --70 --71 --72 --73 --70 --62 --51 --37 --20 --5 -10 -22 -31 -35 -35 -32 -28 -20 -11 --1 --12 --25 --36 --46 --55 --62 --67 --71 --73 --75 --74 --73 --70 --71 --73 --73 --70 --62 --50 --36 --20 --5 -10 -21 -30 -35 -36 -33 -29 -21 -12 --1 --12 --24 --36 --46 --54 --61 --66 --70 --72 --73 --72 --72 --69 --70 --72 --73 --69 --62 --51 --37 --20 --5 -10 -21 -31 -35 -36 -33 -29 -21 -11 --1 --13 --25 --36 --46 --54 --62 --66 --70 --72 --74 --73 --72 --69 --71 --73 --73 --70 --63 --51 --37 --21 --5 -10 -21 -30 -34 -36 -33 -29 -21 -11 --1 --12 --24 --35 --46 --55 --62 --67 --71 --73 --75 --74 --73 --70 --72 --73 --74 --70 --63 --51 --37 --21 --5 -9 -21 -30 -34 -36 -33 -29 -21 -11 --1 --13 --25 --35 --47 --55 --62 --67 --72 --73 --74 --73 --72 --70 --68 --64 --61 --57 --54 --51 --48 --45 --43 --40 --39 --36 --36 --35 --34 --34 --37 --42 --46 --46 --42 --34 --24 --12 -1 -14 -24 -32 -36 -38 -36 -32 -24 -15 -3 --8 --21 --32 --42 --50 --58 --63 --67 --70 --72 --71 --70 --68 --69 --71 --71 --68 --61 --49 --36 --20 --5 -10 -21 -30 -35 -36 -33 -29 -21 -12 --1 --13 --25 --36 --46 --55 --62 --67 --71 --73 --74 --73 --72 --70 --71 --73 --74 --70 --63 --51 --38 --21 --5 -9 -21 -30 -34 -35 -32 -28 -21 -15 -8 -2 --3 --7 --10 --12 --14 --16 --18 --19 --22 --24 --26 --27 --31 --36 --42 --48 --55 --61 --66 --70 --74 --75 --76 --76 --76 --74 --72 --69 --70 --71 --72 --68 --63 --52 --40 --25 --11 -4 -16 -25 -30 -33 -32 -28 -21 -12 -0 --11 --24 --35 --45 --53 --61 --66 --71 --73 --74 --73 --73 --70 --68 --64 --61 --58 --54 --51 --48 --45 --42 --40 --39 --37 --36 --35 --35 --34 --37 --42 --46 --46 --42 --35 --25 --12 -0 -13 -22 -31 -35 -37 -35 -31 -23 -14 -2 --9 --22 --33 --43 --52 --59 --65 --69 --71 --72 --72 --71 --69 --69 --72 --72 --69 --62 --50 --37 --21 --6 -9 -21 -30 -34 -36 -34 -30 -21 -12 -0 --12 --25 --35 --46 --54 --61 --66 --70 --72 --73 --72 --71 --69 --70 --72 --73 --69 --62 --50 --36 --20 --5 -11 -22 -31 -35 -36 -33 -29 -23 -16 -9 -3 --3 --6 --10 --12 --14 --16 --18 --19 --22 --23 --26 --27 --30 --35 --42 --48 --54 --60 --66 --69 --73 --75 --77 --76 --76 --74 --73 --70 --67 --64 --61 --58 --55 --52 --50 --47 --45 --43 --41 --40 --39 --37 --37 --36 --40 --44 --48 --47 --44 --36 --27 --16 --4 -9 -19 -28 -33 -36 -35 -32 -27 -21 -14 -8 -1 --3 --7 --10 --12 --14 --16 --18 --20 --21 --23 --24 --28 --33 --39 --46 --52 --58 --64 --68 --72 --73 --76 --76 --75 --74 --72 --69 --67 --63 --60 --57 --54 --51 --49 --46 --44 --42 --41 --40 --39 --38 --38 --37 --40 --44 --48 --47 --44 --37 --28 --17 --5 -7 -18 -27 -32 -36 -35 -32 -27 -21 -15 -9 -2 --2 --7 --9 --12 --15 --17 --17 --20 --21 --23 --25 --29 --33 --40 --46 --53 --59 --64 --69 --72 --74 --76 --76 --76 --74 --72 --70 --67 --64 --61 --58 --55 --52 --49 --47 --45 --42 --41 --39 --38 --37 --37 --36 --39 --43 --47 --46 --43 --35 --27 --15 --3 -9 -19 -28 -33 -37 -35 -33 -27 -22 -15 -9 -3 --2 --7 --9 --12 --14 --16 --17 --19 --21 --23 --24 --28 --33 --40 --46 --53 --60 --65 --69 --73 --75 --76 --76 --76 --74 --72 --70 --71 --73 --73 --70 --64 --53 --41 --26 --11 -3 -15 -25 -30 -33 -31 -29 -21 -12 -0 --11 --23 --34 --45 --53 --61 --66 --70 --73 --74 --73 --72 --70 --68 --65 --61 --58 --54 --51 --49 --46 --43 --41 --39 --38 --37 --35 --35 --34 --37 --42 --46 --45 --42 --34 --25 --13 -0 -13 -23 -31 -35 -38 -35 -31 -24 -15 -2 --9 --22 --32 --43 --51 --59 --64 --68 --70 --71 --71 --70 --68 --69 --71 --72 --68 --61 --50 --36 --20 --4 -10 -21 -30 -34 -35 -33 -29 -22 -15 -8 -3 --2 --6 --10 --12 --14 --16 --18 --19 --22 --23 --25 --26 --31 --35 --41 --47 --54 --60 --66 --70 --73 --75 --76 --76 --76 --73 --72 --69 --70 --71 --72 --69 --62 --52 --40 --25 --10 -4 -16 -26 -31 -33 -32 -29 -21 -12 -0 --11 --24 --34 --45 --54 --61 --67 --71 --73 --74 --73 --73 --71 --68 --65 --62 --60 --56 --52 --49 --46 --44 --41 --40 --38 --37 --36 --35 --34 --38 --43 --46 --45 --42 --35 --25 --12 -0 -13 -23 -31 -36 -37 -35 -32 -25 -19 -12 -6 -0 --4 --8 --11 --13 --14 --16 --17 --20 --21 --22 --25 --29 --33 --40 --46 --54 --59 --65 --69 --72 --74 --76 --76 --76 --74 --73 --70 --67 --64 --61 --57 --54 --51 --49 --46 --44 --42 --41 --39 --38 --37 --37 --37 --40 --45 --48 --48 --44 --37 --28 --16 --4 -9 -19 -28 -33 -36 -35 -33 -26 -17 -5 --6 --18 --29 --40 --49 --57 --62 --67 --70 --71 --71 --70 --68 --69 --72 --72 --69 --62 --50 --37 --21 --6 -9 -21 -30 -35 -37 -34 -30 -22 -16 -10 -4 --2 --6 --9 --12 --15 --16 --18 --19 --22 --23 --25 --28 --31 --35 --42 --48 --55 --60 --66 --69 --73 --75 --76 --76 --76 --75 --73 --70 --68 --64 --62 --58 --55 --52 --49 --47 --45 --42 --41 --39 --38 --37 --36 --36 --39 --44 --47 --47 --44 --36 --28 --16 --4 -9 -19 -28 -33 -35 -34 -32 -25 -16 -4 --7 --19 --31 --41 --50 --57 --63 --67 --69 --71 --71 --70 --68 --70 --72 --73 --69 --62 --51 --37 --21 --6 -9 -21 -30 -35 -37 -35 -30 -24 -17 -9 -4 --2 --6 --9 --12 --14 --16 --18 --19 --22 --23 --25 --27 --31 --35 --41 --48 --55 --60 --66 --69 --74 --75 --77 --77 --76 --75 --72 --69 --70 --72 --73 --69 --63 --52 --40 --26 --11 -4 -15 -25 -30 -33 -31 -29 -22 -13 -1 --11 --23 --34 --45 --54 --61 --66 --71 --73 --75 --74 --73 --71 --72 --74 --75 --71 --64 --52 --38 --22 --6 -8 -20 -30 -34 -36 -33 -29 -21 -11 --1 --12 --25 --36 --46 --54 --62 --67 --71 --73 --74 --73 --72 --70 --68 --64 --61 --57 --54 --50 --48 --45 --43 --40 --39 --37 --37 --35 --35 --34 --37 --42 --46 --46 --42 --35 --25 --12 -0 -14 -23 -32 -36 -38 -36 -32 -26 -20 -13 -7 -1 --3 --8 --10 --12 --14 --16 --17 --20 --21 --23 --25 --28 --33 --39 --46 --52 --58 --64 --68 --72 --73 --76 --75 --74 --73 --71 --69 --70 --72 --73 --69 --63 --53 --40 --25 --10 -4 -16 -26 -30 -33 -32 -29 -21 -12 -1 --11 --23 --34 --45 --53 --61 --67 --71 --73 --75 --74 --73 --71 --68 --65 --62 --58 --55 --51 --48 --46 --43 --41 --39 --38 --37 --35 --35 --34 --37 --42 --46 --46 --43 --35 --25 --13 --1 -12 -22 -31 -35 -37 -35 -31 -23 -15 -2 --10 --22 --33 --43 --52 --59 --65 --69 --71 --73 --72 --71 --69 --71 --73 --73 --70 --62 --51 --37 --21 --5 -10 -21 -31 -35 -37 -34 -30 -22 -13 -0 --11 --24 --35 --45 --53 --61 --67 --71 --72 --74 --73 --72 --69 --71 --72 --73 --69 --61 --50 --35 --21 --4 -11 -22 -32 -35 -37 -34 -30 -23 -16 -9 -3 --3 --7 --11 --13 --15 --17 --18 --20 --22 --23 --25 --26 --31 --35 --41 --48 --54 --60 --65 --69 --73 --75 --77 --77 --76 --74 --72 --70 --71 --73 --74 --71 --64 --53 --41 --26 --11 -3 -15 -25 -30 -33 -31 -28 -21 -12 -0 --11 --24 --35 --45 --54 --62 --67 --72 --73 --75 --74 --74 --71 --72 --74 --75 --71 --64 --52 --38 --22 --7 -9 -21 -30 -34 -36 -33 -29 -21 -12 -0 --12 --24 --35 --45 --54 --61 --66 --70 --73 --74 --73 --72 --69 --67 --64 --61 --57 --54 --51 --48 --45 --43 --40 --39 --37 --37 --35 --35 --34 --38 --42 --46 --46 --43 --35 --25 --12 -0 -13 -23 -31 -35 -38 -35 -31 -24 -19 -11 -5 --1 --4 --9 --10 --13 --15 --16 --18 --20 --21 --23 --25 --29 --33 --40 --47 --53 --59 --65 --69 --73 --75 --77 --76 --76 --75 --73 --70 --67 --63 --61 --57 --55 --51 --49 --46 --45 --42 --41 --39 --38 --36 --36 --35 --39 --43 --47 --46 --43 --36 --27 --15 --3 -9 -19 -28 -33 -36 -36 -33 -25 -16 -5 --7 --19 --30 --41 --49 --57 --62 --67 --69 --71 --71 --70 --69 --69 --71 --72 --69 --62 --50 --36 --21 --5 -10 -21 -31 -35 -37 -34 -30 -23 -17 -9 -4 --2 --6 --10 --12 --14 --16 --18 --19 --21 --23 --25 --27 --30 --36 --42 --48 --55 --61 --66 --70 --74 --76 --77 --77 --76 --75 --73 --70 --71 --73 --74 --71 --64 --54 --41 --26 --11 -4 -15 -25 -30 -33 -32 -29 -21 -13 -0 --11 --24 --34 --45 --53 --61 --66 --71 --73 --75 --74 --73 --71 --69 --65 --62 --58 --55 --51 --48 --45 --43 --41 --39 --37 --36 --35 --34 --34 --37 --41 --45 --45 --42 --34 --25 --12 -0 -13 -23 -32 -36 -39 -36 -32 -25 -16 -3 --8 --21 --32 --43 --51 --59 --64 --69 --70 --72 --71 --71 --69 --70 --72 --73 --69 --62 --50 --37 --21 --5 -9 -22 -31 -35 -36 -33 -29 -22 -16 -9 -3 --2 --7 --10 --12 --15 --16 --18 --19 --22 --23 --26 --27 --30 --35 --41 --47 --54 --60 --66 --69 --74 --75 --77 --76 --76 --75 --73 --70 --67 --64 --61 --58 --55 --52 --49 --46 --45 --43 --41 --39 --38 --37 --36 --36 --39 --44 --47 --47 --44 --36 --27 --15 --3 -9 -20 -28 -33 -37 -35 -32 -25 -16 -4 --7 --20 --31 --41 --50 --58 --63 --68 --70 --72 --71 --71 --69 --70 --73 --73 --69 --62 --50 --37 --21 --5 -9 -21 -30 -35 -37 -34 -31 -24 -17 -10 -4 --2 --6 --10 --12 --14 --16 --18 --19 --21 --22 --25 --26 --30 --34 --41 --47 --55 --60 --66 --69 --74 --75 --76 --76 --76 --74 --72 --69 --67 --64 --61 --58 --56 --52 --49 --47 --45 --43 --41 --41 --39 --37 --37 --37 --39 --44 --47 --47 --44 --36 --27 --15 --3 -10 -20 -29 -33 -36 -35 -33 -27 -22 -14 -8 -2 --2 --6 --9 --11 --13 --16 --17 --19 --21 --23 --25 --29 --33 +-73 +-69 +-62 +-50 +-37 +-21 +-6 +8 +19 +28 +32 +33 +31 +27 +18 +9 +-2 +-13 +-25 +-35 +-46 +-54 +-61 +-65 +-69 +-71 +-72 +-71 +-70 +-68 +-69 +-71 +-71 +-68 +-61 +-50 +-36 +-21 +-6 +9 +20 +29 +33 +34 +31 +27 +19 +10 +-2 +-12 +-24 +-35 +-45 +-53 +-60 +-65 +-69 +-71 +-72 +-72 +-70 +-68 +-68 +-71 +-72 +-68 +-61 +-49 +-37 +-20 +-6 +8 +20 +29 +32 +33 +30 +27 +19 +10 +-2 +-13 +-25 +-36 +-46 +-54 +-62 +-67 +-71 +-72 +-73 +-72 +-71 +-69 +-70 +-71 +-72 +-68 +-62 +-50 +-37 +-21 +-6 +9 +20 +28 +32 +34 +31 +27 +19 +10 +-1 +-13 +-25 +-35 +-45 +-54 +-61 +-65 +-69 +-71 +-72 +-71 +-70 +-68 +-69 +-71 +-72 +-68 +-61 +-49 +-36 +-21 +-6 +9 +20 +28 +32 +33 +31 +26 +19 +10 +-2 +-13 +-25 +-36 +-46 +-54 +-61 +-66 +-70 +-72 +-73 +-73 +-72 +-69 +-70 +-73 +-73 +-69 +-62 +-50 +-37 +-21 +-6 +9 +20 +29 +33 +34 +31 +27 +19 +10 +-2 +-13 +-25 +-35 +-46 +-54 +-61 +-66 +-70 +-71 +-73 +-72 +-71 +-69 +-70 +-72 +-73 +-69 +-62 +-51 +-37 +-21 +-6 +9 +20 +29 +33 +34 +31 +27 +19 +10 +-2 +-13 +-25 +-37 +-46 +-54 +-61 +-65 +-69 +-71 +-73 +-71 +-71 +-69 +-66 +-63 +-60 +-57 +-54 +-50 +-47 +-44 +-42 +-40 +-39 +-37 +-36 +-35 +-34 +-34 +-37 +-41 +-46 +-45 +-42 +-34 +-25 +-13 +-1 +11 +21 +29 +33 +35 +33 +30 +22 +13 +2 +-10 +-21 +-32 +-42 +-50 +-58 +-63 +-67 +-69 +-70 +-70 +-69 +-67 +-68 +-70 +-71 +-67 +-61 +-49 +-36 +-20 +-5 +9 +20 +29 +33 +34 +31 +28 +20 +11 +-1 +-12 +-25 +-35 +-45 +-53 +-61 +-65 +-69 +-71 +-72 +-72 +-71 +-69 +-70 +-72 +-72 +-69 +-62 +-51 +-37 +-22 +-6 +8 +19 +28 +32 +34 +31 +27 +20 +15 +7 +1 +-4 +-8 +-11 +-14 +-16 +-17 +-19 +-20 +-23 +-24 +-26 +-28 +-31 +-36 +-43 +-49 +-55 +-60 +-66 +-69 +-72 +-74 +-75 +-76 +-75 +-73 +-72 +-69 +-69 +-71 +-71 +-68 +-62 +-52 +-39 +-25 +-11 +3 +15 +24 +29 +32 +30 +27 +20 +11 +0 +-11 +-23 +-34 +-44 +-52 +-59 +-65 +-69 +-71 +-73 +-72 +-72 +-69 +-67 +-64 +-61 +-57 +-54 +-50 +-48 +-45 +-43 +-41 +-39 +-37 +-36 +-35 +-34 +-34 +-37 +-41 +-45 +-45 +-41 +-34 +-25 +-13 +-1 +11 +22 +29 +33 +35 +33 +29 +22 +13 +1 +-10 +-22 +-32 +-43 +-50 +-57 +-62 +-67 +-69 +-70 +-70 +-69 +-67 +-68 +-70 +-71 +-68 +-62 +-50 +-37 +-22 +-7 +8 +19 +28 +32 +34 +31 +27 +20 +11 +-1 +-12 +-24 +-35 +-45 +-53 +-60 +-66 +-70 +-72 +-73 +-73 +-71 +-70 +-70 +-72 +-72 +-69 +-61 +-50 +-37 +-21 +-6 +9 +20 +29 +33 +35 +31 +28 +20 +15 +7 +2 +-4 +-8 +-11 +-13 +-15 +-17 +-19 +-20 +-23 +-24 +-26 +-27 +-31 +-36 +-42 +-48 +-55 +-60 +-65 +-69 +-72 +-73 +-75 +-75 +-74 +-72 +-71 +-68 +-65 +-62 +-60 +-57 +-53 +-50 +-48 +-46 +-44 +-41 +-40 +-38 +-38 +-36 +-36 +-36 +-39 +-43 +-47 +-47 +-43 +-36 +-27 +-16 +-4 +8 +17 +26 +30 +33 +33 +31 +25 +20 +13 +7 +1 +-3 +-7 +-10 +-12 +-15 +-16 +-18 +-20 +-21 +-23 +-25 +-28 +-33 +-39 +-45 +-52 +-58 +-64 +-67 +-71 +-73 +-75 +-75 +-75 +-73 +-71 +-68 +-66 +-63 +-61 +-57 +-55 +-51 +-49 +-46 +-45 +-42 +-41 +-40 +-40 +-38 +-37 +-36 +-40 +-44 +-47 +-47 +-43 +-36 +-27 +-16 +-5 +7 +17 +26 +30 +33 +33 +30 +25 +20 +13 +8 +2 +-3 +-7 +-11 +-13 +-15 +-17 +-19 +-21 +-22 +-24 +-25 +-29 +-33 +-40 +-46 +-53 +-58 +-65 +-68 +-72 +-73 +-75 +-75 +-74 +-72 +-70 +-68 +-65 +-62 +-60 +-56 +-53 +-50 +-48 +-45 +-43 +-41 +-40 +-38 +-37 +-37 +-36 +-35 +-39 +-43 +-47 +-46 +-43 +-36 +-27 +-16 +-4 +8 +17 +27 +31 +34 +33 +31 +26 +20 +14 +8 +1 +-2 +-7 +-9 +-13 +-14 +-16 +-18 +-21 +-22 +-24 +-25 +-29 +-33 +-40 +-46 +-53 +-58 +-64 +-68 +-72 +-73 +-75 +-75 +-74 +-73 +-71 +-69 +-69 +-71 +-72 +-68 +-62 +-52 +-40 +-26 +-12 +1 +13 +23 +28 +31 +30 +27 +20 +11 +-1 +-12 +-24 +-35 +-45 +-53 +-61 +-65 +-70 +-72 +-73 +-72 +-72 +-69 +-67 +-64 +-61 +-58 +-55 +-51 +-49 +-45 +-43 +-40 +-39 +-37 +-36 +-35 +-35 +-34 +-37 +-41 +-45 +-45 +-42 +-35 +-25 +-13 +-1 +11 +21 +29 +33 +35 +33 +30 +22 +13 +2 +-9 +-21 +-32 +-42 +-49 +-58 +-62 +-66 +-69 +-70 +-70 +-69 +-67 +-68 +-70 +-71 +-67 +-60 +-49 +-36 +-21 +-5 +9 +21 +29 +33 +35 +32 +29 +22 +16 +8 +3 +-3 +-6 +-10 +-12 +-14 +-15 +-17 +-19 +-21 +-23 +-25 +-27 +-31 +-35 +-42 +-47 +-54 +-59 +-65 +-69 +-72 +-74 +-75 +-75 +-75 +-73 +-72 +-69 +-69 +-71 +-72 +-69 +-63 +-53 +-42 +-26 +-12 +2 +13 +23 +28 +30 +29 +26 +19 +10 +-1 +-12 +-24 +-35 +-45 +-53 +-60 +-66 +-70 +-72 +-73 +-73 +-72 +-69 +-67 +-64 +-61 +-58 +-55 +-51 +-48 +-46 +-43 +-40 +-39 +-37 +-36 +-35 +-34 +-34 +-37 +-41 +-45 +-44 +-41 +-34 +-25 +-13 +-1 +11 +21 +29 +33 +36 +33 +30 +23 +18 +11 +5 +0 +-4 +-8 +-10 +-13 +-14 +-16 +-17 +-19 +-21 +-23 +-25 +-28 +-33 +-40 +-46 +-53 +-58 +-65 +-68 +-72 +-74 +-75 +-75 +-74 +-73 +-71 +-68 +-66 +-62 +-60 +-56 +-53 +-51 +-48 +-46 +-44 +-42 +-41 +-39 +-39 +-37 +-37 +-36 +-39 +-44 +-47 +-47 +-44 +-36 +-28 +-16 +-5 +7 +18 +26 +31 +34 +33 +31 +24 +15 +4 +-8 +-20 +-30 +-41 +-49 +-57 +-62 +-67 +-69 +-70 +-70 +-70 +-68 +-69 +-71 +-72 +-68 +-62 +-51 +-37 +-22 +-7 +8 +19 +29 +33 +35 +32 +29 +22 +16 +9 +3 +-3 +-6 +-9 +-12 +-14 +-16 +-18 +-19 +-21 +-23 +-25 +-26 +-29 +-34 +-40 +-47 +-53 +-59 +-65 +-68 +-72 +-74 +-75 +-75 +-75 +-74 +-71 +-68 +-66 +-63 +-60 +-57 +-54 +-51 +-48 +-46 +-44 +-42 +-40 +-38 +-38 +-37 +-37 +-36 +-39 +-44 +-47 +-47 +-44 +-37 +-28 +-16 +-5 +7 +17 +26 +31 +34 +33 +30 +23 +15 +3 +-8 +-20 +-31 +-41 +-49 +-56 +-62 +-66 +-69 +-70 +-70 +-69 +-68 +-69 +-71 +-71 +-68 +-61 +-50 +-37 +-21 +-7 +7 +19 +28 +33 +35 +32 +28 +21 +15 +8 +3 +-3 +-6 +-10 +-13 +-15 +-16 +-19 +-20 +-22 +-23 +-26 +-27 +-30 +-35 +-41 +-47 +-54 +-59 +-65 +-69 +-72 +-74 +-75 +-75 +-74 +-73 +-71 +-68 +-69 +-71 +-72 +-68 +-62 +-52 +-40 +-26 +-11 +3 +15 +24 +29 +31 +30 +27 +19 +11 +-1 +-12 +-24 +-35 +-45 +-53 +-61 +-66 +-70 +-73 +-74 +-73 +-72 +-70 +-71 +-73 +-73 +-69 +-62 +-51 +-37 +-21 +-7 +8 +19 +28 +32 +34 +31 +26 +19 +10 +-2 +-14 +-25 +-36 +-46 +-54 +-61 +-66 +-70 +-72 +-73 +-72 +-71 +-68 +-66 +-63 +-60 +-56 +-53 +-50 +-47 +-44 +-42 +-40 +-39 +-37 +-36 +-35 +-35 +-33 +-37 +-41 +-45 +-45 +-41 +-34 +-24 +-12 +0 +13 +22 +31 +35 +35 +34 +30 +24 +18 +11 +5 +-1 +-5 +-9 +-11 +-13 +-14 +-16 +-18 +-20 +-21 +-23 +-25 +-29 +-33 +-39 +-46 +-52 +-58 +-63 +-67 +-71 +-73 +-75 +-75 +-75 +-73 +-72 +-69 +-70 +-71 +-72 +-69 +-63 +-52 +-41 +-26 +-12 +2 +14 +23 +29 +32 +30 +28 +21 +12 +0 +-12 +-24 +-35 +-45 +-53 +-60 +-65 +-70 +-72 +-73 +-73 +-72 +-70 +-67 +-64 +-61 +-58 +-54 +-51 +-48 +-45 +-43 +-41 +-39 +-37 +-36 +-35 +-35 +-34 +-37 +-42 +-45 +-45 +-42 +-35 +-25 +-13 +-1 +11 +21 +29 +33 +35 +33 +30 +23 +14 +2 +-9 +-21 +-32 +-42 +-50 +-58 +-63 +-67 +-70 +-71 +-70 +-69 +-67 +-68 +-70 +-71 +-67 +-60 +-49 +-36 +-21 +-6 +9 +20 +29 +33 +35 +33 +28 +21 +11 +-1 +-12 +-24 +-35 +-45 +-53 +-61 +-66 +-70 +-71 +-72 +-72 +-72 +-69 +-70 +-72 +-73 +-69 +-62 +-50 +-37 +-21 +-5 +9 +20 +29 +33 +34 +31 +27 +20 +14 +7 +1 +-4 +-7 +-11 +-13 +-15 +-16 +-18 +-20 +-22 +-24 +-26 +-27 +-30 +-35 +-41 +-47 +-54 +-60 +-65 +-69 +-72 +-74 +-75 +-75 +-75 +-73 +-71 +-68 +-70 +-71 +-72 +-68 +-63 +-52 +-40 +-25 +-12 +3 +14 +23 +29 +31 +30 +27 +19 +10 +-1 +-13 +-25 +-35 +-45 +-54 +-61 +-66 +-69 +-72 +-73 +-72 +-71 +-69 +-70 +-72 +-73 +-70 +-62 +-51 +-37 +-22 +-7 +8 +19 +28 +32 +34 +31 +27 +19 +10 +-2 +-13 +-25 +-35 +-46 +-54 +-61 +-65 +-70 +-72 +-73 +-73 +-72 +-69 +-67 +-64 +-61 +-57 +-53 +-50 +-48 +-45 +-42 +-40 +-39 +-37 +-36 +-35 +-34 +-33 +-36 +-41 +-45 +-44 +-41 +-34 +-24 +-12 +0 +12 +22 +30 +34 +36 +33 +30 +23 +18 +11 +5 +-1 +-5 +-9 +-11 +-13 +-15 +-17 +-18 +-20 +-21 +-23 +-25 +-29 +-33 +-40 +-46 +-53 +-58 +-64 +-68 +-71 +-73 +-74 +-75 +-75 +-73 +-71 +-69 +-66 +-63 +-60 +-57 +-54 +-51 +-49 +-47 +-44 +-42 +-41 +-39 +-39 +-37 +-37 +-36 +-39 +-44 +-47 +-46 +-43 +-36 +-28 +-16 +-5 +7 +17 +26 +31 +34 +33 +31 +24 +16 +4 +-7 +-19 +-30 +-41 +-49 +-57 +-63 +-67 +-69 +-70 +-70 +-70 +-68 +-69 +-71 +-72 +-68 +-62 +-51 +-37 +-21 +-7 +8 +19 +29 +33 +35 +33 +29 +22 +16 +8 +3 +-3 +-7 +-10 +-12 +-14 +-15 +-18 +-19 +-21 +-23 +-25 +-27 +-30 +-35 +-41 +-47 +-54 +-59 +-65 +-69 +-72 +-74 +-75 +-76 +-75 +-73 +-72 +-69 +-70 +-71 +-72 +-69 +-62 +-52 +-40 +-26 +-12 +2 +13 +23 +28 +31 +29 +26 +19 +10 +-1 +-12 +-24 +-35 +-45 +-53 +-61 +-66 +-70 +-72 +-73 +-72 +-71 +-69 +-66 +-63 +-61 +-57 +-54 +-51 +-48 +-45 +-43 +-41 +-39 +-37 +-36 +-35 +-35 +-34 +-37 +-42 +-45 +-45 +-42 +-35 +-25 +-12 +-1 +12 +22 +30 +34 +36 +34 +30 +23 +14 +2 +-9 +-21 +-32 +-42 +-51 +-58 +-63 +-67 +-70 +-72 +-71 +-70 +-68 +-69 +-72 +-72 +-68 +-61 +-49 +-36 +-21 +-5 +9 +20 +29 +33 +35 +32 +28 +21 +15 +7 +2 +-4 +-7 +-11 +-13 +-15 +-16 +-18 +-19 +-22 +-23 +-25 +-27 +-30 +-35 +-41 +-47 +-54 +-59 +-65 +-69 +-72 +-74 +-75 +-75 +-74 +-73 +-71 +-68 +-66 +-63 +-60 +-56 +-54 +-50 +-48 +-45 +-43 +-41 +-40 +-38 +-38 +-37 +-37 +-36 +-39 +-44 +-47 +-47 +-43 +-36 +-27 +-15 +-5 +8 +18 +27 +31 +34 +33 +31 +24 +15 +4 +-7 +-20 +-31 +-41 +-49 +-57 +-62 +-67 +-70 +-71 +-70 +-70 +-68 +-69 +-71 +-72 +-69 +-62 +-51 +-37 +-22 +-7 +8 +19 +29 +33 +35 +33 +28 +22 +16 +8 +3 +-3 +-6 +-11 +-12 +-14 +-16 +-18 +-20 +-22 +-23 +-27 +-27 +-30 +-35 +-41 +-48 +-54 +-60 +-65 +-69 +-72 +-74 +-76 +-76 +-75 +-74 +-72 +-69 +-67 +-64 +-61 +-57 +-55 +-51 +-49 +-46 +-45 +-43 +-41 +-39 +-39 +-37 +-37 +-36 +-39 +-43 +-47 +-46 +-43 +-36 +-27 +-16 +-4 +8 +18 +27 +31 +35 +34 +31 +26 +21 +14 +9 +2 +-2 +-7 +-9 +-13 +-14 +-16 +-18 +-20 +-21 +-23 +-25 +-29 +-33 +-40 +-46 +-53 +-59 +-64 +-69 +-72 +-74 +-75 +-75 +-75 +-73 +-71 +-69 +-66 +-63 +-60 +-57 +-54 +-51 +-49 +-46 +-44 +-42 +-41 +-40 +-39 +-37 +-37 +-36 +-40 +-44 +-47 +-47 +-44 +-37 +-28 +-16 +-5 +7 +17 +26 +31 +35 +33 +31 +26 +21 +14 +8 +2 +-3 +-7 +-10 +-13 +-15 +-17 +-19 +-20 +-22 +-23 +-25 +-29 +-33 +-39 +-45 +-52 +-58 +-64 +-68 +-72 +-73 +-75 +-74 +-75 +-72 +-71 +-68 +-69 +-71 +-72 +-68 +-63 +-52 +-41 +-26 +-12 +2 +14 +23 +29 +32 +31 +27 +20 +12 +1 +-11 +-23 +-34 +-44 +-53 +-60 +-65 +-69 +-72 +-73 +-72 +-72 +-69 +-70 +-72 +-73 +-69 +-62 +-50 +-37 +-21 +-6 +9 +20 +29 +33 +35 +32 +28 +20 +11 +-1 +-12 +-25 +-35 +-46 +-54 +-61 +-67 +-71 +-72 +-74 +-72 +-72 +-69 +-70 +-72 +-73 +-70 +-62 +-51 +-38 +-22 +-6 +8 +20 +29 +33 +34 +31 +27 +19 +10 +-2 +-13 +-25 +-36 +-46 +-53 +-61 +-66 +-70 +-72 +-73 +-73 +-72 +-69 +-71 +-72 +-73 +-69 +-62 +-51 +-37 +-21 +-7 +9 +20 +29 +33 +35 +32 +27 +20 +11 +-1 +-13 +-25 +-35 +-46 +-54 +-61 +-67 +-70 +-73 +-74 +-73 +-72 +-69 +-70 +-72 +-73 +-70 +-62 +-50 +-36 +-20 +-5 +10 +21 +30 +34 +35 +32 +28 +20 +10 +-2 +-13 +-25 +-36 +-47 +-54 +-62 +-66 +-70 +-72 +-73 +-72 +-71 +-69 +-70 +-72 +-73 +-69 +-62 +-51 +-37 +-20 +-5 +9 +21 +29 +33 +35 +32 +28 +20 +10 +-1 +-13 +-25 +-36 +-46 +-54 +-61 +-66 +-70 +-72 +-74 +-73 +-72 +-69 +-71 +-72 +-73 +-69 +-63 +-51 +-37 +-21 +-7 +9 +20 +29 +33 +35 +32 +27 +20 +11 +-1 +-13 +-25 +-36 +-46 +-54 +-61 +-66 +-69 +-71 +-72 +-72 +-71 +-69 +-70 +-72 +-73 +-69 +-62 +-51 +-37 +-21 +-5 +9 +21 +30 +33 +35 +31 +27 +19 +10 +-2 +-13 +-26 +-36 +-48 +-55 +-63 +-67 +-71 +-73 +-74 +-73 +-73 +-70 +-67 +-64 +-61 +-57 +-54 +-50 +-47 +-44 +-42 +-39 +-38 +-36 +-35 +-34 +-34 +-33 +-36 +-41 +-45 +-44 +-41 +-34 +-24 +-12 +0 +13 +22 +30 +34 +37 +35 +31 +23 +14 +2 +-9 +-22 +-32 +-42 +-51 +-59 +-64 +-68 +-70 +-71 +-70 +-70 +-68 +-69 +-71 +-72 +-68 +-61 +-50 +-37 +-20 +-5 +10 +21 +30 +34 +36 +33 +29 +21 +12 +-1 +-12 +-24 +-35 +-46 +-54 +-61 +-66 +-70 +-72 +-73 +-73 +-72 +-70 +-71 +-73 +-73 +-69 +-62 +-50 +-37 +-21 +-6 +9 +20 +29 +33 +34 +31 +28 +20 +11 +-2 +-13 +-25 +-36 +-46 +-54 +-61 +-67 +-71 +-73 +-73 +-73 +-72 +-70 +-71 +-73 +-73 +-69 +-62 +-51 +-36 +-20 +-5 +9 +21 +30 +33 +35 +32 +28 +20 +11 +-1 +-12 +-25 +-35 +-45 +-54 +-61 +-66 +-70 +-72 +-73 +-72 +-71 +-69 +-71 +-72 +-73 +-70 +-63 +-51 +-37 +-21 +-6 +10 +21 +30 +33 +35 +32 +27 +20 +10 +-2 +-13 +-26 +-36 +-47 +-55 +-62 +-67 +-71 +-73 +-74 +-73 +-73 +-70 +-71 +-73 +-73 +-69 +-62 +-50 +-37 +-21 +-6 +9 +20 +30 +34 +35 +32 +29 +20 +11 +-1 +-12 +-25 +-36 +-46 +-54 +-61 +-67 +-70 +-72 +-73 +-72 +-71 +-69 +-70 +-72 +-73 +-69 +-62 +-51 +-37 +-21 +-5 +10 +21 +30 +34 +35 +32 +27 +20 +11 +-1 +-13 +-25 +-36 +-46 +-54 +-62 +-66 +-70 +-72 +-74 +-73 +-72 +-70 +-71 +-72 +-73 +-69 +-62 +-51 +-37 +-22 +-6 +9 +20 +29 +33 +35 +32 +27 +21 +15 +7 +2 +-4 +-7 +-11 +-12 +-15 +-16 +-18 +-20 +-21 +-23 +-25 +-27 +-30 +-35 +-41 +-47 +-53 +-59 +-65 +-68 +-72 +-74 +-76 +-75 +-75 +-73 +-71 +-68 +-66 +-63 +-60 +-56 +-54 +-51 +-49 +-46 +-44 +-43 +-41 +-39 +-39 +-38 +-37 +-37 +-40 +-44 +-48 +-47 +-44 +-36 +-27 +-16 +-4 +8 +18 +27 +31 +35 +33 +31 +23 +15 +4 +-7 +-20 +-31 +-41 +-50 +-58 +-63 +-67 +-70 +-71 +-71 +-70 +-68 +-69 +-71 +-72 +-68 +-61 +-50 +-36 +-21 +-5 +9 +20 +30 +33 +36 +33 +29 +23 +17 +9 +3 +-2 +-6 +-10 +-12 +-14 +-16 +-18 +-20 +-22 +-23 +-25 +-27 +-31 +-35 +-42 +-48 +-55 +-61 +-66 +-70 +-73 +-75 +-76 +-76 +-76 +-73 +-72 +-69 +-70 +-72 +-72 +-69 +-63 +-53 +-40 +-25 +-11 +3 +15 +24 +29 +31 +30 +26 +19 +11 +-1 +-12 +-24 +-35 +-45 +-53 +-61 +-66 +-70 +-72 +-73 +-73 +-72 +-70 +-68 +-65 +-62 +-58 +-55 +-51 +-49 +-45 +-43 +-41 +-39 +-37 +-37 +-35 +-35 +-34 +-37 +-41 +-45 +-45 +-41 +-34 +-24 +-12 +0 +12 +22 +30 +35 +37 +35 +31 +23 +14 +2 +-10 +-22 +-32 +-43 +-51 +-59 +-64 +-68 +-70 +-71 +-71 +-70 +-68 +-69 +-70 +-72 +-67 +-61 +-49 +-35 +-19 +-4 +9 +21 +31 +35 +37 +33 +29 +21 +12 +-1 +-12 +-24 +-35 +-45 +-53 +-61 +-66 +-71 +-73 +-74 +-73 +-72 +-70 +-71 +-72 +-73 +-69 +-62 +-51 +-37 +-21 +-6 +9 +21 +30 +33 +35 +32 +28 +20 +11 +-1 +-13 +-25 +-36 +-47 +-54 +-62 +-67 +-71 +-73 +-74 +-73 +-72 +-70 +-71 +-73 +-73 +-69 +-63 +-51 +-37 +-21 +-5 +9 +21 +30 +34 +36 +33 +29 +21 +11 +0 +-13 +-24 +-35 +-45 +-54 +-61 +-66 +-71 +-73 +-74 +-73 +-72 +-70 +-71 +-72 +-73 +-69 +-62 +-50 +-37 +-21 +-5 +10 +21 +30 +33 +35 +31 +28 +21 +15 +8 +2 +-3 +-7 +-10 +-12 +-15 +-16 +-18 +-19 +-21 +-23 +-25 +-26 +-30 +-35 +-40 +-47 +-53 +-59 +-65 +-69 +-72 +-74 +-75 +-75 +-75 +-74 +-72 +-69 +-70 +-72 +-72 +-69 +-63 +-53 +-40 +-26 +-11 +3 +15 +25 +29 +32 +30 +27 +20 +11 +-1 +-12 +-24 +-35 +-45 +-53 +-61 +-67 +-71 +-73 +-75 +-74 +-73 +-71 +-72 +-74 +-74 +-71 +-63 +-52 +-38 +-22 +-6 +9 +20 +29 +34 +35 +33 +29 +21 +11 +-1 +-12 +-25 +-35 +-46 +-54 +-62 +-66 +-71 +-72 +-74 +-73 +-72 +-69 +-70 +-72 +-74 +-69 +-62 +-50 +-37 +-21 +-5 +9 +21 +30 +34 +35 +32 +28 +20 +10 +-1 +-13 +-25 +-35 +-46 +-54 +-61 +-66 +-70 +-72 +-73 +-73 +-72 +-69 +-67 +-64 +-61 +-57 +-54 +-50 +-47 +-44 +-43 +-40 +-39 +-37 +-36 +-35 +-34 +-33 +-37 +-41 +-45 +-45 +-42 +-34 +-25 +-12 +0 +12 +22 +30 +34 +36 +34 +30 +24 +18 +11 +5 +-1 +-5 +-9 +-11 +-13 +-15 +-17 +-18 +-20 +-21 +-24 +-25 +-28 +-33 +-40 +-46 +-53 +-58 +-65 +-69 +-72 +-74 +-76 +-76 +-75 +-73 +-72 +-69 +-70 +-71 +-73 +-70 +-63 +-53 +-41 +-26 +-12 +3 +14 +24 +29 +32 +30 +27 +21 +11 +0 +-11 +-23 +-34 +-44 +-53 +-60 +-66 +-70 +-72 +-74 +-73 +-72 +-70 +-67 +-64 +-61 +-58 +-55 +-51 +-49 +-46 +-43 +-41 +-39 +-37 +-36 +-34 +-34 +-33 +-37 +-41 +-45 +-45 +-42 +-34 +-25 +-12 +-1 +12 +22 +30 +35 +36 +35 +31 +25 +19 +11 +5 +0 +-4 +-8 +-11 +-13 +-14 +-16 +-17 +-19 +-21 +-23 +-24 +-28 +-33 +-39 +-46 +-52 +-58 +-65 +-68 +-72 +-74 +-75 +-75 +-74 +-73 +-71 +-68 +-66 +-63 +-59 +-56 +-53 +-50 +-48 +-46 +-43 +-42 +-41 +-39 +-38 +-37 +-37 +-36 +-40 +-44 +-47 +-47 +-44 +-37 +-28 +-16 +-5 +8 +18 +27 +32 +35 +34 +31 +25 +16 +5 +-7 +-19 +-30 +-41 +-49 +-57 +-63 +-67 +-69 +-71 +-70 +-70 +-68 +-69 +-71 +-72 +-69 +-62 +-50 +-37 +-21 +-7 +9 +20 +29 +33 +35 +33 +28 +21 +12 +0 +-12 +-24 +-35 +-45 +-54 +-61 +-66 +-70 +-72 +-73 +-73 +-71 +-69 +-71 +-72 +-73 +-69 +-62 +-51 +-37 +-21 +-6 +9 +20 +29 +33 +35 +32 +27 +20 +11 +-1 +-13 +-25 +-35 +-46 +-54 +-61 +-67 +-71 +-72 +-73 +-73 +-72 +-69 +-70 +-72 +-73 +-69 +-62 +-50 +-36 +-20 +-5 +10 +21 +30 +34 +36 +33 +28 +20 +11 +-1 +-13 +-25 +-35 +-46 +-54 +-62 +-67 +-70 +-73 +-74 +-73 +-72 +-70 +-71 +-73 +-74 +-70 +-63 +-51 +-37 +-21 +-6 +9 +21 +30 +33 +35 +32 +28 +20 +11 +-1 +-13 +-25 +-36 +-47 +-55 +-62 +-67 +-72 +-74 +-75 +-73 +-72 +-70 +-71 +-72 +-73 +-69 +-62 +-50 +-37 +-21 +-5 +9 +21 +30 +34 +36 +32 +28 +20 +11 +-1 +-13 +-25 +-36 +-46 +-54 +-61 +-67 +-71 +-72 +-73 +-73 +-72 +-70 +-71 +-72 +-73 +-69 +-63 +-50 +-37 +-21 +-6 +10 +21 +30 +33 +35 +32 +28 +20 +11 +-1 +-13 +-25 +-35 +-46 +-54 +-62 +-66 +-71 +-73 +-73 +-73 +-71 +-69 +-71 +-72 +-73 +-69 +-62 +-50 +-36 +-21 +-5 +10 +21 +30 +34 +36 +32 +28 +20 +11 +-1 +-12 +-25 +-35 +-46 +-54 +-61 +-66 +-71 +-72 +-73 +-73 +-72 +-70 +-71 +-72 +-73 +-69 +-62 +-51 +-37 +-21 +-5 +9 +21 +30 +35 +36 +33 +29 +22 +15 +8 +2 +-3 +-7 +-11 +-13 +-15 +-17 +-18 +-20 +-22 +-24 +-26 +-27 +-31 +-35 +-42 +-48 +-54 +-60 +-65 +-70 +-73 +-75 +-76 +-76 +-76 +-74 +-72 +-69 +-71 +-72 +-73 +-69 +-63 +-53 +-41 +-26 +-12 +3 +15 +24 +29 +32 +31 +28 +20 +11 +-1 +-12 +-24 +-35 +-45 +-54 +-61 +-67 +-71 +-73 +-74 +-73 +-72 +-70 +-71 +-73 +-73 +-70 +-63 +-51 +-37 +-22 +-6 +9 +20 +29 +34 +36 +32 +28 +21 +11 +-1 +-12 +-25 +-36 +-45 +-54 +-61 +-66 +-70 +-72 +-73 +-73 +-72 +-69 +-71 +-72 +-73 +-69 +-63 +-50 +-37 +-20 +-5 +9 +21 +30 +34 +35 +32 +28 +20 +11 +-2 +-13 +-25 +-36 +-47 +-55 +-63 +-67 +-71 +-73 +-74 +-73 +-72 +-70 +-71 +-73 +-73 +-70 +-62 +-50 +-37 +-21 +-5 +10 +21 +30 +34 +36 +32 +28 +20 +11 +-1 +-13 +-25 +-35 +-46 +-54 +-61 +-66 +-70 +-73 +-74 +-73 +-72 +-70 +-71 +-72 +-73 +-70 +-62 +-51 +-37 +-21 +-5 +9 +21 +30 +34 +35 +33 +29 +21 +12 +-1 +-12 +-25 +-36 +-46 +-54 +-62 +-67 +-71 +-73 +-74 +-73 +-72 +-69 +-70 +-71 +-73 +-69 +-62 +-50 +-36 +-20 +-5 +10 +21 +30 +33 +35 +32 +28 +20 +10 +-2 +-13 +-26 +-36 +-47 +-54 +-62 +-67 +-71 +-73 +-74 +-73 +-72 +-69 +-71 +-72 +-73 +-70 +-62 +-51 +-37 +-21 +-5 +10 +21 +29 +34 +35 +32 +27 +20 +10 +-2 +-13 +-26 +-36 +-46 +-54 +-61 +-66 +-71 +-73 +-73 +-73 +-72 +-70 +-71 +-72 +-73 +-69 +-62 +-51 +-37 +-21 +-5 +9 +21 +31 +34 +36 +32 +28 +21 +11 +-1 +-12 +-24 +-35 +-46 +-54 +-61 +-67 +-71 +-73 +-74 +-73 +-72 +-69 +-67 +-64 +-61 +-57 +-54 +-50 +-48 +-45 +-43 +-40 +-39 +-36 +-36 +-35 +-34 +-34 +-37 +-42 +-46 +-46 +-43 +-35 +-25 +-12 +-1 +12 +22 +30 +35 +37 +35 +31 +23 +14 +3 +-9 +-21 +-32 +-42 +-51 +-58 +-64 +-68 +-70 +-71 +-71 +-70 +-68 +-69 +-71 +-72 +-69 +-61 +-50 +-37 +-21 +-5 +9 +21 +30 +35 +36 +33 +29 +21 +12 +-1 +-12 +-24 +-35 +-46 +-54 +-61 +-66 +-71 +-72 +-73 +-73 +-72 +-69 +-70 +-73 +-73 +-69 +-62 +-50 +-37 +-20 +-5 +10 +21 +30 +35 +36 +33 +29 +20 +11 +-1 +-12 +-25 +-36 +-47 +-55 +-62 +-67 +-71 +-72 +-74 +-73 +-72 +-70 +-71 +-73 +-73 +-69 +-63 +-51 +-37 +-20 +-5 +10 +21 +30 +34 +35 +33 +28 +20 +11 +-1 +-13 +-25 +-35 +-46 +-54 +-61 +-67 +-71 +-72 +-74 +-73 +-72 +-70 +-71 +-73 +-73 +-70 +-63 +-51 +-37 +-21 +-6 +9 +20 +30 +34 +35 +31 +28 +21 +11 +-1 +-12 +-24 +-35 +-46 +-54 +-62 +-67 +-71 +-73 +-74 +-73 +-72 +-69 +-71 +-73 +-73 +-69 +-62 +-51 +-37 +-20 +-5 +10 +22 +31 +35 +36 +33 +29 +21 +11 +-1 +-12 +-25 +-36 +-46 +-54 +-62 +-67 +-71 +-73 +-74 +-73 +-72 +-70 +-71 +-72 +-73 +-69 +-62 +-50 +-36 +-20 +-5 +10 +21 +30 +33 +35 +32 +27 +20 +11 +-1 +-13 +-25 +-36 +-46 +-55 +-62 +-67 +-71 +-73 +-74 +-73 +-72 +-70 +-71 +-72 +-73 +-70 +-62 +-51 +-37 +-21 +-5 +10 +21 +30 +34 +36 +32 +28 +20 +11 +-1 +-12 +-25 +-35 +-46 +-53 +-61 +-66 +-70 +-72 +-73 +-73 +-72 +-69 +-71 +-73 +-73 +-69 +-62 +-51 +-37 +-21 +-6 +9 +20 +29 +34 +35 +33 +28 +22 +15 +8 +3 +-3 +-7 +-10 +-13 +-15 +-16 +-19 +-20 +-22 +-23 +-26 +-27 +-31 +-35 +-41 +-48 +-55 +-60 +-66 +-70 +-74 +-75 +-76 +-76 +-76 +-74 +-72 +-69 +-71 +-72 +-73 +-70 +-63 +-53 +-41 +-26 +-12 +3 +15 +24 +30 +32 +31 +28 +21 +12 +-1 +-11 +-24 +-35 +-45 +-53 +-61 +-66 +-71 +-73 +-74 +-73 +-73 +-70 +-72 +-74 +-74 +-70 +-63 +-51 +-38 +-21 +-6 +9 +21 +30 +34 +35 +33 +29 +20 +11 +-1 +-12 +-24 +-36 +-46 +-54 +-61 +-66 +-71 +-72 +-74 +-73 +-72 +-70 +-71 +-73 +-73 +-69 +-62 +-51 +-37 +-21 +-5 +10 +21 +30 +35 +36 +33 +29 +21 +12 +-1 +-12 +-25 +-36 +-46 +-55 +-63 +-67 +-70 +-72 +-74 +-73 +-72 +-70 +-71 +-73 +-74 +-70 +-62 +-50 +-37 +-20 +-5 +10 +22 +30 +35 +36 +32 +28 +20 +11 +-1 +-13 +-25 +-36 +-46 +-55 +-62 +-67 +-71 +-73 +-74 +-73 +-73 +-70 +-72 +-73 +-74 +-70 +-63 +-51 +-37 +-21 +-5 +9 +21 +30 +34 +35 +33 +28 +20 +11 +-1 +-12 +-25 +-36 +-47 +-55 +-62 +-68 +-71 +-73 +-74 +-74 +-73 +-70 +-71 +-72 +-73 +-70 +-62 +-51 +-37 +-20 +-5 +10 +22 +31 +35 +35 +32 +28 +20 +11 +-1 +-12 +-25 +-36 +-46 +-55 +-62 +-67 +-71 +-73 +-75 +-74 +-73 +-70 +-71 +-73 +-73 +-70 +-62 +-50 +-36 +-20 +-5 +10 +21 +30 +35 +36 +33 +29 +21 +12 +-1 +-12 +-24 +-36 +-46 +-54 +-61 +-66 +-70 +-72 +-73 +-72 +-72 +-69 +-70 +-72 +-73 +-69 +-62 +-51 +-37 +-20 +-5 +10 +21 +31 +35 +36 +33 +29 +21 +11 +-1 +-13 +-25 +-36 +-46 +-54 +-62 +-66 +-70 +-72 +-74 +-73 +-72 +-69 +-71 +-73 +-73 +-70 +-63 +-51 +-37 +-21 +-5 +10 +21 +30 +34 +36 +33 +29 +21 +11 +-1 +-12 +-24 +-35 +-46 +-55 +-62 +-67 +-71 +-73 +-75 +-74 +-73 +-70 +-72 +-73 +-74 +-70 +-63 +-51 +-37 +-21 +-5 +9 +21 +30 +34 +36 +33 +29 +21 +11 +-1 +-13 +-25 +-35 +-47 +-55 +-62 +-67 +-72 +-73 +-74 +-73 +-72 +-70 +-68 +-64 +-61 +-57 +-54 +-51 +-48 +-45 +-43 +-40 +-39 +-36 +-36 +-35 +-34 +-34 +-37 +-42 +-46 +-46 +-42 +-34 +-24 +-12 +1 +14 +24 +32 +36 +38 +36 +32 +24 +15 +3 +-8 +-21 +-32 +-42 +-50 +-58 +-63 +-67 +-70 +-72 +-71 +-70 +-68 +-69 +-71 +-71 +-68 +-61 +-49 +-36 +-20 +-5 +10 +21 +30 +35 +36 +33 +29 +21 +12 +-1 +-13 +-25 +-36 +-46 +-55 +-62 +-67 +-71 +-73 +-74 +-73 +-72 +-70 +-71 +-73 +-74 +-70 +-63 +-51 +-38 +-21 +-5 +9 +21 +30 +34 +35 +32 +28 +21 +15 +8 +2 +-3 +-7 +-10 +-12 +-14 +-16 +-18 +-19 +-22 +-24 +-26 +-27 +-31 +-36 +-42 +-48 +-55 +-61 +-66 +-70 +-74 +-75 +-76 +-76 +-76 +-74 +-72 +-69 +-70 +-71 +-72 +-68 +-63 +-52 +-40 +-25 +-11 +4 +16 +25 +30 +33 +32 +28 +21 +12 +0 +-11 +-24 +-35 +-45 +-53 +-61 +-66 +-71 +-73 +-74 +-73 +-73 +-70 +-68 +-64 +-61 +-58 +-54 +-51 +-48 +-45 +-42 +-40 +-39 +-37 +-36 +-35 +-35 +-34 +-37 +-42 +-46 +-46 +-42 +-35 +-25 +-12 +0 +13 +22 +31 +35 +37 +35 +31 +23 +14 +2 +-9 +-22 +-33 +-43 +-52 +-59 +-65 +-69 +-71 +-72 +-72 +-71 +-69 +-69 +-72 +-72 +-69 +-62 +-50 +-37 +-21 +-6 +9 +21 +30 +34 +36 +34 +30 +21 +12 +0 +-12 +-25 +-35 +-46 +-54 +-61 +-66 +-70 +-72 +-73 +-72 +-71 +-69 +-70 +-72 +-73 +-69 +-62 +-50 +-36 +-20 +-5 +11 +22 +31 +35 +36 +33 +29 +23 +16 +9 +3 +-3 +-6 +-10 +-12 +-14 +-16 +-18 +-19 +-22 +-23 +-26 +-27 +-30 +-35 +-42 +-48 +-54 +-60 +-66 +-69 +-73 +-75 +-77 +-76 +-76 +-74 +-73 +-70 +-67 +-64 +-61 +-58 +-55 +-52 +-50 +-47 +-45 +-43 +-41 +-40 +-39 +-37 +-37 +-36 +-40 +-44 +-48 +-47 +-44 +-36 +-27 +-16 +-4 +9 +19 +28 +33 +36 +35 +32 +27 +21 +14 +8 +1 +-3 +-7 +-10 +-12 +-14 +-16 +-18 +-20 +-21 +-23 +-24 +-28 +-33 +-39 +-46 +-52 +-58 +-64 +-68 +-72 +-73 +-76 +-76 +-75 +-74 +-72 +-69 +-67 +-63 +-60 +-57 +-54 +-51 +-49 +-46 +-44 +-42 +-41 +-40 +-39 +-38 +-38 +-37 +-40 +-44 +-48 +-47 +-44 +-37 +-28 +-17 +-5 +7 +18 +27 +32 +36 +35 +32 +27 +21 +15 +9 +2 +-2 +-7 +-9 +-12 +-15 +-17 +-17 +-20 +-21 +-23 +-25 +-29 +-33 +-40 +-46 +-53 +-59 +-64 +-69 +-72 +-74 +-76 +-76 +-76 +-74 +-72 +-70 +-67 +-64 +-61 +-58 +-55 +-52 +-49 +-47 +-45 +-42 +-41 +-39 +-38 +-37 +-37 +-36 +-39 +-43 +-47 +-46 +-43 +-35 +-27 +-15 +-3 +9 +19 +28 +33 +37 +35 +33 +27 +22 +15 +9 +3 +-2 +-7 +-9 +-12 +-14 +-16 +-17 +-19 +-21 +-23 +-24 +-28 +-33 +-40 +-46 +-53 +-60 +-65 +-69 +-73 +-75 +-76 +-76 +-76 +-74 +-72 +-70 +-71 +-73 +-73 +-70 +-64 +-53 +-41 +-26 +-11 +3 +15 +25 +30 +33 +31 +29 +21 +12 +0 +-11 +-23 +-34 +-45 +-53 +-61 +-66 +-70 +-73 +-74 +-73 +-72 +-70 +-68 +-65 +-61 +-58 +-54 +-51 +-49 +-46 +-43 +-41 +-39 +-38 +-37 +-35 +-35 +-34 +-37 +-42 +-46 +-45 +-42 +-34 +-25 +-13 +0 +13 +23 +31 +35 +38 +35 +31 +24 +15 +2 +-9 +-22 +-32 +-43 +-51 +-59 +-64 +-68 +-70 +-71 +-71 +-70 +-68 +-69 +-71 +-72 +-68 +-61 +-50 +-36 +-20 +-4 +10 +21 +30 +34 +35 +33 +29 +22 +15 +8 +3 +-2 +-6 +-10 +-12 +-14 +-16 +-18 +-19 +-22 +-23 +-25 +-26 +-31 +-35 +-41 +-47 +-54 +-60 +-66 +-70 +-73 +-75 +-76 +-76 +-76 +-73 +-72 +-69 +-70 +-71 +-72 +-69 +-62 +-52 +-40 +-25 +-10 +4 +16 +26 +31 +33 +32 +29 +21 +12 +0 +-11 +-24 +-34 +-45 +-54 +-61 +-67 +-71 +-73 +-74 +-73 +-73 +-71 +-68 +-65 +-62 +-60 +-56 +-52 +-49 +-46 +-44 +-41 +-40 +-38 +-37 +-36 +-35 +-34 +-38 +-43 +-46 +-45 +-42 +-35 +-25 +-12 +0 +13 +23 +31 +36 +37 +35 +32 +25 +19 +12 +6 +0 +-4 +-8 +-11 +-13 +-14 +-16 +-17 +-20 +-21 +-22 +-25 +-29 +-33 +-40 +-46 +-54 +-59 +-65 +-69 +-72 +-74 +-76 +-76 +-76 +-74 +-73 +-70 +-67 +-64 +-61 +-57 +-54 +-51 +-49 +-46 +-44 +-42 +-41 +-39 +-38 +-37 +-37 +-37 +-40 +-45 +-48 +-48 +-44 +-37 +-28 +-16 +-4 +9 +19 +28 +33 +36 +35 +33 +26 +17 +5 +-6 +-18 +-29 +-40 +-49 +-57 +-62 +-67 +-70 +-71 +-71 +-70 +-68 +-69 +-72 +-72 +-69 +-62 +-50 +-37 +-21 +-6 +9 +21 +30 +35 +37 +34 +30 +22 +16 +10 +4 +-2 +-6 +-9 +-12 +-15 +-16 +-18 +-19 +-22 +-23 +-25 +-28 +-31 +-35 +-42 +-48 +-55 +-60 +-66 +-69 +-73 +-75 +-76 +-76 +-76 +-75 +-73 +-70 +-68 +-64 +-62 +-58 +-55 +-52 +-49 +-47 +-45 +-42 +-41 +-39 +-38 +-37 +-36 +-36 +-39 +-44 +-47 +-47 +-44 +-36 +-28 +-16 +-4 +9 +19 +28 +33 +35 +34 +32 +25 +16 +4 +-7 +-19 +-31 +-41 +-50 +-57 +-63 +-67 +-69 +-71 +-71 +-70 +-68 +-70 +-72 +-73 +-69 +-62 +-51 +-37 +-21 +-6 +9 +21 +30 +35 +37 +35 +30 +24 +17 +9 +4 +-2 +-6 +-9 +-12 +-14 +-16 +-18 +-19 +-22 +-23 +-25 +-27 +-31 +-35 +-41 +-48 +-55 +-60 +-66 +-69 +-74 +-75 +-77 +-77 +-76 +-75 +-72 +-69 +-70 +-72 +-73 +-69 +-63 +-52 +-40 +-26 +-11 +4 +15 +25 +30 +33 +31 +29 +22 +13 +1 +-11 +-23 +-34 +-45 +-54 +-61 +-66 +-71 +-73 +-75 +-74 +-73 +-71 +-72 +-74 +-75 +-71 +-64 +-52 +-38 +-22 +-6 +8 +20 +30 +34 +36 +33 +29 +21 +11 +-1 +-12 +-25 +-36 +-46 +-54 +-62 +-67 +-71 +-73 +-74 +-73 +-72 +-70 +-68 +-64 +-61 +-57 +-54 +-50 +-48 +-45 +-43 +-40 +-39 +-37 +-37 +-35 +-35 +-34 +-37 +-42 +-46 +-46 +-42 +-35 +-25 +-12 +0 +14 +23 +32 +36 +38 +36 +32 +26 +20 +13 +7 +1 +-3 +-8 +-10 +-12 +-14 +-16 +-17 +-20 +-21 +-23 +-25 +-28 +-33 +-39 +-46 +-52 +-58 +-64 +-68 +-72 +-73 +-76 +-75 +-74 +-73 +-71 +-69 +-70 +-72 +-73 +-69 +-63 +-53 +-40 +-25 +-10 +4 +16 +26 +30 +33 +32 +29 +21 +12 +1 +-11 +-23 +-34 +-45 +-53 +-61 +-67 +-71 +-73 +-75 +-74 +-73 +-71 +-68 +-65 +-62 +-58 +-55 +-51 +-48 +-46 +-43 +-41 +-39 +-38 +-37 +-35 +-35 +-34 +-37 +-42 +-46 +-46 +-43 +-35 +-25 +-13 +-1 +12 +22 +31 +35 +37 +35 +31 +23 +15 +2 +-10 +-22 +-33 +-43 +-52 +-59 +-65 +-69 +-71 +-73 +-72 +-71 +-69 +-71 +-73 +-73 +-70 +-62 +-51 +-37 +-21 +-5 +10 +21 +31 +35 +37 +34 +30 +22 +13 +0 +-11 +-24 +-35 +-45 +-53 +-61 +-67 +-71 +-72 +-74 +-73 +-72 +-69 +-71 +-72 +-73 +-69 +-61 +-50 +-35 +-21 +-4 +11 +22 +32 +35 +37 +34 +30 +23 +16 +9 +3 +-3 +-7 +-11 +-13 +-15 +-17 +-18 +-20 +-22 +-23 +-25 +-26 +-31 +-35 +-41 +-48 +-54 +-60 +-65 +-69 +-73 +-75 +-77 +-77 +-76 +-74 +-72 +-70 +-71 +-73 +-74 +-71 +-64 +-53 +-41 +-26 +-11 +3 +15 +25 +30 +33 +31 +28 +21 +12 +0 +-11 +-24 +-35 +-45 +-54 +-62 +-67 +-72 +-73 +-75 +-74 +-74 +-71 +-72 +-74 +-75 +-71 +-64 +-52 +-38 +-22 +-7 +9 +21 +30 +34 +36 +33 +29 +21 +12 +0 +-12 +-24 +-35 +-45 +-54 +-61 +-66 +-70 +-73 +-74 +-73 +-72 +-69 +-67 +-64 +-61 +-57 +-54 +-51 +-48 +-45 +-43 +-40 +-39 +-37 +-37 +-35 +-35 +-34 +-38 +-42 +-46 +-46 +-43 +-35 +-25 +-12 +0 +13 +23 +31 +35 +38 +35 +31 +24 +19 +11 +5 +-1 +-4 +-9 +-10 +-13 +-15 +-16 +-18 +-20 +-21 +-23 +-25 +-29 +-33 +-40 +-47 +-53 +-59 +-65 +-69 +-73 +-75 +-77 +-76 +-76 +-75 +-73 +-70 +-67 +-63 +-61 +-57 +-55 +-51 +-49 +-46 +-45 +-42 +-41 +-39 +-38 +-36 +-36 +-35 +-39 +-43 +-47 +-46 +-43 +-36 +-27 +-15 +-3 +9 +19 +28 +33 +36 +36 +33 +25 +16 +5 +-7 +-19 +-30 +-41 +-49 +-57 +-62 +-67 +-69 +-71 +-71 +-70 +-69 +-69 +-71 +-72 +-69 +-62 +-50 +-36 +-21 +-5 +10 +21 +31 +35 +37 +34 +30 +23 +17 +9 +4 +-2 +-6 +-10 +-12 +-14 +-16 +-18 +-19 +-21 +-23 +-25 +-27 +-30 +-36 +-42 +-48 +-55 +-61 +-66 +-70 +-74 +-76 +-77 +-77 +-76 +-75 +-73 +-70 +-71 +-73 +-74 +-71 +-64 +-54 +-41 +-26 +-11 +4 +15 +25 +30 +33 +32 +29 +21 +13 +0 +-11 +-24 +-34 +-45 +-53 +-61 +-66 +-71 +-73 +-75 +-74 +-73 +-71 +-69 +-65 +-62 +-58 +-55 +-51 +-48 +-45 +-43 +-41 +-39 +-37 +-36 +-35 +-34 +-34 +-37 +-41 +-45 +-45 +-42 +-34 +-25 +-12 +0 +13 +23 +32 +36 +39 +36 +32 +25 +16 +3 +-8 +-21 +-32 +-43 +-51 +-59 +-64 +-69 +-70 +-72 +-71 +-71 +-69 +-70 +-72 +-73 +-69 +-62 +-50 +-37 +-21 +-5 +9 +22 +31 +35 +36 +33 +29 +22 +16 +9 +3 +-2 +-7 +-10 +-12 +-15 +-16 +-18 +-19 +-22 +-23 +-26 +-27 +-30 +-35 +-41 +-47 +-54 +-60 +-66 +-69 +-74 +-75 +-77 +-76 +-76 +-75 +-73 +-70 +-67 +-64 +-61 +-58 +-55 +-52 +-49 +-46 +-45 +-43 +-41 +-39 +-38 +-37 +-36 +-36 +-39 +-44 +-47 +-47 +-44 +-36 +-27 +-15 +-3 +9 +20 +28 +33 +37 +35 +32 +25 +16 +4 +-7 +-20 +-31 +-41 +-50 +-58 +-63 +-68 +-70 +-72 +-71 +-71 +-69 +-70 +-73 +-73 +-69 +-62 +-50 +-37 +-21 +-5 +9 +21 +30 +35 +37 +34 +31 +24 +17 +10 +4 +-2 +-6 +-10 +-12 +-14 +-16 +-18 +-19 +-21 +-22 +-25 +-26 +-30 +-34 +-41 +-47 +-55 +-60 +-66 +-69 +-74 +-75 +-76 +-76 +-76 +-74 +-72 +-69 +-67 +-64 +-61 +-58 +-56 +-52 +-49 +-47 +-45 +-43 +-41 +-41 +-39 +-37 +-37 +-37 +-39 +-44 +-47 +-47 +-44 +-36 +-27 +-15 +-3 +10 +20 +29 +33 +36 +35 +33 +27 +22 +14 +8 +2 +-2 +-6 +-9 +-11 +-13 +-16 +-17 +-19 +-21 +-23 +-25 +-29 +-33 diff --git a/traces/homeagain1600.pm3 b/traces/lf_HomeAgain1600.pm3 similarity index 78% rename from traces/homeagain1600.pm3 rename to traces/lf_HomeAgain1600.pm3 index 27b6d429b..ea9a5e1ff 100644 --- a/traces/homeagain1600.pm3 +++ b/traces/lf_HomeAgain1600.pm3 @@ -1,16000 +1,16000 @@ --69 --65 --59 --48 --36 --20 --5 -8 -18 -26 -29 -31 -29 -25 -18 -10 --1 --12 --23 --33 --42 --50 --57 --62 --66 --68 --69 --69 --67 --66 --67 --68 --69 --66 --59 --48 --36 --21 --7 -6 -17 -25 -29 -31 -28 -24 -17 -9 --3 --13 --25 --35 --44 --52 --59 --63 --67 --69 --70 --69 --69 --67 --67 --69 --70 --66 --60 --49 --37 --21 --8 -6 -17 -25 -29 -30 -27 -23 -16 -7 --4 --14 --25 --35 --45 --52 --59 --65 --68 --69 --71 --70 --70 --67 --68 --70 --70 --66 --60 --49 --37 --22 --8 -6 -17 -25 -29 -30 -28 -25 -17 -9 --2 --13 --24 --34 --44 --52 --58 --63 --67 --69 --70 --69 --68 --67 --68 --69 --70 --67 --60 --49 --37 --22 --8 -6 -17 -25 -29 -31 -28 -24 -16 -8 --3 --14 --25 --35 --44 --52 --59 --64 --68 --69 --70 --69 --69 --67 --67 --69 --70 --67 --59 --49 --36 --21 --8 -6 -17 -26 -29 -31 -28 -25 -17 -9 --3 --14 --25 --35 --45 --53 --60 --65 --68 --70 --71 --70 --69 --67 --69 --70 --71 --67 --61 --50 --37 --22 --8 -6 -17 -25 -29 -31 -29 -25 -18 -12 -5 --1 --6 --9 --13 --15 --16 --17 --19 --20 --23 --23 --26 --27 --31 --35 --41 --47 --53 --58 --63 --67 --70 --71 --73 --72 --72 --70 --69 --66 --64 --60 --58 --55 --52 --49 --48 --45 --44 --42 --41 --39 --38 --37 --37 --35 --38 --42 --46 --46 --42 --36 --27 --17 --6 -5 -15 -23 -27 -30 -29 -27 -21 -12 -2 --9 --20 --30 --40 --48 --55 --60 --64 --66 --68 --68 --68 --66 --67 --69 --69 --66 --60 --49 --37 --22 --9 -5 -16 -24 -29 -31 -29 -24 -19 -13 -6 -1 --5 --8 --11 --14 --16 --17 --19 --21 --23 --24 --26 --27 --31 --34 --40 --46 --52 --57 --63 --66 --69 --71 --73 --72 --72 --71 --69 --67 --68 --69 --70 --68 --62 --52 --40 --26 --13 -0 -11 -20 -25 -27 -26 -23 -17 -9 --2 --13 --24 --35 --45 --52 --59 --64 --68 --70 --71 --70 --70 --67 --65 --62 --59 --55 --52 --49 --47 --43 --42 --40 --38 --37 --36 --35 --35 --34 --37 --41 --44 --44 --41 --34 --25 --14 --2 -9 -18 -26 -30 -32 -30 -27 -20 -12 -1 --10 --21 --31 --41 --48 --56 --61 --64 --66 --67 --67 --67 --65 --66 --67 --69 --66 --59 --49 --37 --22 --8 -6 -16 -25 -29 -31 -29 -25 -18 -9 --2 --13 --25 --35 --45 --52 --59 --64 --68 --70 --71 --70 --69 --67 --68 --70 --71 --67 --61 --50 --37 --22 --8 -6 -17 -25 -29 -30 -28 -24 -15 -7 --3 --14 --25 --35 --45 --52 --59 --64 --67 --69 --70 --69 --69 --67 --68 --69 --70 --67 --60 --49 --37 --22 --8 -5 -16 -25 -28 -30 -27 -23 -16 -8 --3 --14 --25 --35 --44 --52 --60 --64 --68 --70 --70 --70 --69 --67 --68 --70 --71 --67 --61 --50 --37 --23 --8 -6 -16 -25 -29 -31 -28 -24 -18 -12 -5 -0 --5 --9 --12 --13 --16 --16 --19 --20 --22 --23 --26 --27 --31 --35 --41 --46 --52 --58 --63 --66 --69 --71 --72 --72 --72 --70 --69 --66 --67 --68 --69 --65 --59 --50 --39 --25 --13 -1 -12 -21 -25 -28 -27 -24 -17 -9 --2 --13 --25 --34 --44 --52 --59 --64 --68 --70 --71 --71 --71 --68 --69 --70 --71 --68 --61 --50 --38 --24 --9 -5 -15 -24 -28 -30 -28 -24 -17 -8 --3 --14 --25 --35 --45 --52 --59 --64 --68 --70 --71 --70 --69 --67 --68 --69 --70 --66 --59 --49 --36 --21 --7 -7 -17 -26 -29 -31 -28 -24 -17 -9 --3 --13 --25 --35 --45 --52 --59 --64 --67 --69 --70 --70 --69 --67 --65 --62 --59 --55 --53 --50 --47 --44 --43 --40 --39 --37 --36 --35 --34 --34 --37 --41 --45 --44 --42 --35 --26 --14 --3 -9 -18 -26 -30 -32 -30 -27 -21 -15 -8 -3 --2 --6 --10 --12 --14 --15 --17 --19 --21 --22 --24 --25 --28 --33 --39 --45 --51 --56 --62 --66 --69 --70 --73 --73 --72 --70 --69 --66 --66 --68 --68 --65 --60 --50 --39 --25 --12 -1 -11 -21 -25 -28 -27 -24 -18 -9 --2 --12 --24 --34 --44 --51 --59 --64 --67 --69 --71 --71 --69 --67 --65 --62 --59 --56 --53 --50 --47 --44 --42 --40 --38 --36 --36 --35 --35 --34 --38 --42 --45 --45 --41 --34 --26 --14 --3 -9 -19 -26 -30 -32 -30 -27 -21 -16 -9 -4 --1 --5 --9 --11 --14 --15 --17 --19 --21 --22 --24 --25 --28 --33 --39 --45 --51 --56 --62 --66 --69 --71 --73 --73 --72 --70 --69 --66 --64 --61 --59 --55 --53 --50 --47 --45 --43 --41 --40 --37 --37 --36 --36 --35 --38 --42 --46 --46 --43 --36 --28 --18 --7 -5 -14 -22 -27 -30 -29 -27 -20 -12 -2 --9 --20 --30 --40 --48 --55 --60 --65 --67 --69 --68 --67 --66 --67 --69 --69 --66 --60 --49 --38 --23 --9 -5 -16 -24 -29 -31 -29 -25 -18 -10 --1 --12 --24 --33 --44 --52 --59 --63 --67 --69 --70 --70 --69 --67 --67 --69 --70 --67 --60 --49 --37 --22 --8 -6 -17 -26 -30 -31 -29 -24 -17 -8 --3 --14 --25 --35 --45 --52 --59 --64 --67 --69 --70 --70 --69 --67 --68 --70 --70 --67 --60 --49 --36 --21 --7 -7 -17 -26 -29 -30 -28 -24 -16 -8 --3 --14 --25 --35 --45 --52 --59 --64 --68 --70 --71 --70 --69 --67 --68 --70 --70 --67 --61 --50 --37 --22 --8 -7 -17 -26 -30 -31 -29 -25 -18 -9 --2 --13 --25 --35 --44 --52 --59 --64 --68 --70 --71 --70 --69 --67 --68 --70 --71 --67 --61 --50 --37 --22 --8 -6 -17 -26 -30 -31 -28 -24 -17 -8 --3 --14 --25 --35 --45 --53 --59 --65 --68 --70 --71 --70 --70 --67 --68 --70 --70 --66 --59 --49 --37 --22 --7 -6 -17 -25 -29 -31 -28 -24 -16 -7 --3 --14 --25 --35 --45 --53 --59 --64 --67 --70 --70 --69 --69 --67 --68 --69 --70 --67 --60 --49 --37 --22 --8 -6 -17 -25 -29 -31 -28 -24 -17 -8 --3 --14 --26 --35 --45 --53 --59 --65 --68 --70 --71 --70 --70 --67 --68 --71 --71 --67 --60 --49 --37 --21 --7 -6 -17 -26 -29 -31 -28 -24 -18 -12 -5 --1 --6 --9 --12 --13 --16 --17 --19 --20 --22 --23 --26 --27 --30 --34 --41 --46 --52 --58 --62 --66 --70 --71 --73 --72 --72 --70 --69 --67 --67 --69 --70 --67 --61 --51 --40 --26 --13 -0 -11 -20 -25 -28 -26 -23 -16 -8 --2 --13 --24 --34 --43 --51 --58 --63 --67 --69 --71 --70 --69 --68 --69 --70 --71 --67 --61 --50 --38 --23 --9 -5 -16 -24 -28 -30 -28 -24 -17 -9 --2 --13 --25 --35 --45 --52 --59 --64 --68 --70 --71 --70 --70 --68 --68 --70 --71 --67 --60 --49 --37 --21 --8 -6 -17 -26 -30 -31 -28 -25 -18 -9 --3 --13 --25 --36 --45 --53 --60 --65 --68 --70 --71 --70 --69 --67 --68 --70 --70 --67 --60 --49 --36 --21 --7 -7 -17 -25 -29 -31 -28 -24 -16 -8 --3 --14 --25 --35 --45 --53 --59 --64 --67 --69 --71 --69 --69 --66 --67 --69 --69 --67 --60 --49 --37 --22 --8 -6 -17 -25 -29 -30 -28 -24 -17 -8 --3 --14 --25 --36 --45 --53 --60 --65 --69 --70 --71 --70 --70 --67 --68 --70 --71 --67 --61 --50 --37 --22 --8 -6 -17 -26 -30 -31 -28 -25 -17 -9 --2 --13 --25 --35 --45 --52 --59 --64 --67 --69 --70 --70 --70 --67 --69 --70 --70 --67 --60 --49 --36 --21 --7 -7 -17 -25 -29 -31 -29 -24 -17 -8 --3 --14 --26 --35 --45 --53 --60 --65 --68 --70 --72 --70 --69 --67 --68 --69 --70 --67 --60 --49 --36 --21 --7 -7 -18 -26 -30 -31 -29 -24 -17 -8 --3 --13 --25 --35 --45 --52 --59 --64 --67 --69 --70 --70 --69 --67 --65 --62 --59 --55 --52 --49 --47 --44 --42 --39 --38 --36 --36 --35 --34 --34 --37 --41 --45 --44 --41 --34 --25 --13 --2 -10 -19 -27 -30 -32 -30 -27 -19 -11 -0 --11 --22 --33 --42 --50 --57 --62 --66 --67 --69 --69 --68 --66 --67 --69 --69 --66 --60 --49 --36 --21 --8 -6 -17 -26 -30 -31 -29 -25 -17 -9 --2 --13 --25 --34 --44 --52 --59 --63 --67 --69 --70 --70 --69 --68 --69 --70 --70 --67 --60 --49 --37 --22 --7 -7 -17 -25 -30 -31 -29 -25 -17 -9 --3 --13 --25 --35 --45 --53 --59 --64 --68 --69 --71 --70 --69 --67 --68 --70 --70 --67 --60 --49 --37 --21 --7 -6 -18 -26 -30 -32 -29 -26 -18 -9 --2 --13 --24 --35 --45 --52 --60 --64 --68 --69 --71 --70 --69 --68 --68 --70 --70 --67 --60 --49 --37 --22 --7 -7 -17 -26 -30 -31 -28 -24 -17 -8 --3 --14 --25 --35 --45 --53 --60 --65 --69 --70 --71 --70 --69 --67 --68 --70 --70 --67 --60 --49 --37 --22 --8 -6 -17 -25 -29 -31 -28 -24 -17 -9 --3 --13 --25 --36 --45 --53 --60 --65 --68 --70 --71 --71 --69 --67 --68 --70 --71 --67 --61 --49 --37 --21 --8 -6 -17 -26 -30 -31 -29 -25 -17 -8 --3 --13 --25 --35 --45 --52 --59 --64 --67 --69 --71 --70 --69 --67 --68 --70 --70 --67 --60 --49 --37 --21 --8 -7 -18 -26 -30 -31 -29 -25 -18 -9 --2 --13 --24 --35 --44 --52 --59 --64 --68 --70 --71 --70 --69 --67 --67 --69 --70 --67 --60 --49 --37 --21 --7 -7 -17 -26 -30 -31 -29 -25 -19 -12 -5 -0 --5 --9 --12 --14 --16 --17 --19 --21 --23 --24 --26 --27 --31 --35 --41 --47 --53 --59 --64 --67 --71 --72 --74 --73 --73 --72 --70 --68 --69 --70 --71 --67 --61 --51 --40 --26 --12 -1 -11 -20 -25 -27 -26 -23 -16 -8 --2 --13 --24 --34 --44 --52 --59 --63 --67 --69 --71 --70 --69 --67 --68 --70 --71 --67 --60 --49 --37 --23 --8 -6 -17 -25 -29 -31 -29 -25 -18 -10 --2 --13 --24 --34 --44 --52 --59 --63 --67 --69 --70 --70 --69 --67 --68 --70 --71 --67 --61 --50 --37 --22 --7 -6 -17 -26 -30 -31 -29 -25 -18 -9 --2 --13 --24 --35 --44 --52 --59 --64 --68 --70 --72 --71 --70 --67 --68 --70 --70 --67 --60 --49 --36 --21 --8 -6 -17 -26 -29 -31 -29 -25 -17 -9 --3 --14 --25 --35 --45 --53 --60 --65 --68 --70 --72 --71 --69 --68 --68 --69 --70 --67 --60 --49 --36 --21 --7 -7 -17 -26 -30 -31 -28 -24 -17 -8 --3 --14 --25 --35 --45 --52 --59 --64 --68 --69 --71 --70 --69 --67 --67 --69 --70 --67 --60 --49 --36 --21 --7 -7 -18 -26 -30 -31 -29 -25 -17 -9 --3 --14 --25 --35 --44 --52 --60 --65 --68 --70 --72 --70 --70 --67 --69 --70 --71 --67 --61 --50 --37 --22 --8 -6 -17 -25 -29 -31 -28 -24 -17 -8 --3 --14 --26 --36 --45 --53 --60 --65 --68 --70 --72 --71 --70 --68 --69 --70 --71 --68 --61 --49 --37 --22 --7 -7 -17 -25 -29 -31 -28 -25 -17 -9 --3 --13 --25 --35 --45 --53 --59 --64 --68 --70 --72 --70 --69 --67 --68 --69 --70 --67 --60 --49 --37 --21 --7 -7 -18 -26 -31 -32 -29 -26 -18 -9 --3 --13 --25 --35 --45 --52 --59 --64 --67 --69 --71 --70 --69 --67 --68 --70 --70 --67 --60 --49 --36 --21 --7 -6 -17 -25 -30 -31 -29 -24 -17 -8 --3 --14 --25 --35 --45 --52 --59 --64 --68 --70 --72 --71 --70 --68 --66 --62 --59 --56 --53 --49 --47 --44 --42 --40 --39 --37 --36 --35 --35 --34 --36 --41 --44 --44 --41 --33 --24 --13 --1 -10 -19 -27 -31 -33 -31 -28 -20 -11 -1 --10 --21 --32 --42 --49 --57 --61 --65 --67 --68 --68 --67 --66 --67 --69 --69 --66 --60 --49 --36 --21 --7 -6 -18 -27 -30 -32 -29 -26 -18 -9 --2 --13 --25 --35 --44 --52 --59 --64 --68 --70 --71 --71 --69 --67 --68 --70 --71 --67 --61 --49 --37 --21 --7 -7 -17 -26 -29 -31 -28 -25 -18 -13 -6 -0 --5 --9 --12 --14 --17 --17 --20 --21 --23 --24 --26 --27 --30 --34 --41 --46 --52 --58 --63 --67 --70 --72 --74 --73 --73 --71 --70 --67 --68 --70 --71 --68 --61 --52 --40 --26 --12 -1 -12 -21 -26 -28 -27 -24 -17 -9 --2 --12 --24 --34 --44 --51 --59 --64 --68 --70 --71 --70 --70 --67 --65 --62 --59 --56 --52 --49 --46 --44 --42 --39 --38 --37 --35 --35 --34 --34 --37 --41 --45 --45 --41 --34 --26 --14 --3 -9 -18 -26 -30 -32 -30 -27 -20 -11 -0 --11 --23 --33 --43 --51 --58 --62 --66 --68 --69 --69 --68 --66 --67 --69 --70 --66 --60 --49 --36 --21 --7 -7 -18 -27 -31 -32 -30 -26 -18 -9 --2 --13 --24 --35 --44 --52 --59 --64 --68 --70 --71 --70 --69 --68 --68 --70 --71 --67 --61 --50 --37 --22 --7 -6 -17 -25 -29 -30 -27 -24 -17 -12 -5 -0 --6 --9 --12 --14 --16 --17 --19 --21 --23 --24 --26 --27 --30 --35 --41 --47 --53 --58 --63 --67 --71 --72 --73 --73 --73 --71 --69 --67 --64 --61 --59 --55 --52 --49 --47 --45 --43 --41 --40 --38 --38 --36 --36 --36 --39 --43 --46 --46 --43 --35 --27 --16 --5 -6 -15 -23 -28 -31 -30 -28 -23 -18 -12 -6 -0 --4 --8 --11 --14 --16 --18 --19 --21 --22 --24 --25 --29 --33 --39 --45 --51 --57 --62 --66 --70 --71 --73 --73 --73 --71 --70 --67 --65 --61 --59 --56 --54 --50 --48 --45 --44 --42 --40 --38 --38 --37 --37 --36 --39 --44 --46 --46 --43 --36 --28 --17 --7 -5 -14 -22 -28 -31 -30 -28 -23 -18 -12 -6 -1 --4 --8 --11 --14 --15 --17 --19 --21 --22 --24 --26 --29 --33 --39 --45 --51 --57 --63 --66 --70 --71 --73 --73 --72 --70 --69 --66 --64 --61 --58 --55 --52 --49 --48 --45 --43 --41 --40 --38 --37 --36 --35 --35 --38 --42 --45 --46 --43 --36 --28 --17 --6 -5 -15 -23 -28 -31 -30 -29 -23 -19 -12 -7 -0 --4 --8 --11 --14 --15 --17 --19 --21 --22 --23 --25 --28 --33 --39 --44 --51 --56 --61 --65 --69 --71 --72 --72 --72 --70 --69 --66 --67 --69 --69 --66 --61 --51 --40 --26 --13 -1 -11 -20 -25 -28 -27 -24 -17 -9 --2 --12 --24 --34 --44 --52 --59 --64 --68 --70 --71 --71 --71 --68 --66 --63 --60 --57 --54 --50 --47 --44 --42 --40 --38 --37 --36 --34 --34 --34 --37 --41 --44 --45 --42 --34 --25 --14 --3 -9 -19 -26 -30 -32 -31 -28 -20 -12 -1 --10 --21 --31 --41 --49 --56 --61 --65 --67 --69 --69 --67 --65 --67 --69 --69 --66 --60 --49 --37 --22 --8 -6 -17 -26 -30 -32 -30 -26 -20 -14 -7 -1 --4 --8 --11 --13 --15 --17 --19 --20 --22 --23 --26 --27 --31 --35 --41 --46 --52 --58 --63 --67 --71 --72 --73 --73 --73 --71 --70 --67 --68 --70 --71 --67 --61 --51 --40 --26 --12 -1 -12 -21 -25 -28 -27 -24 -17 -9 --2 --13 --24 --35 --44 --52 --60 --65 --68 --70 --72 --71 --70 --68 --66 --63 --60 --56 --53 --49 --47 --44 --43 --40 --39 --37 --36 --35 --35 --34 --37 --41 --45 --45 --41 --34 --25 --14 --3 -9 -19 -27 -31 -33 -31 -28 -22 -17 -10 -4 --2 --5 --9 --11 --14 --15 --17 --18 --20 --21 --23 --25 --28 --33 --39 --45 --51 --57 --62 --66 --69 --71 --73 --72 --72 --71 --70 --67 --64 --61 --59 --55 --52 --50 --48 --45 --43 --41 --40 --38 --38 --36 --36 --35 --38 --42 --46 --45 --42 --36 --27 --17 --6 -5 -14 -22 -27 -30 -30 -28 -21 -13 -3 --8 --20 --30 --40 --48 --55 --60 --64 --67 --68 --67 --67 --66 --67 --69 --69 --66 --60 --50 --37 --23 --9 -5 -16 -25 -29 -31 -29 -26 -20 -14 -7 -1 --4 --8 --11 --13 --16 --17 --19 --20 --22 --24 --26 --27 --31 --35 --41 --46 --53 --58 --63 --67 --70 --72 --74 --73 --73 --71 --70 --67 --65 --62 --59 --55 --53 --50 --48 --46 --44 --41 --40 --39 --38 --37 --37 --36 --39 --43 --47 --46 --43 --36 --27 --16 --6 -6 -16 -24 -29 -32 -31 -28 -21 -13 -3 --8 --20 --31 --40 --48 --56 --61 --65 --67 --68 --68 --67 --66 --67 --68 --69 --66 --60 --49 --36 --22 --7 -6 -18 -26 -30 -32 -30 -26 -20 -14 -7 -1 --4 --7 --11 --13 --16 --17 --19 --20 --21 --23 --25 --26 --29 --34 --40 --46 --52 --58 --63 --67 --70 --72 --74 --73 --73 --72 --70 --67 --68 --70 --70 --67 --61 --51 --40 --26 --12 -1 -12 -21 -25 -28 -27 -23 -17 -8 --3 --14 --25 --35 --45 --53 --60 --65 --68 --70 --72 --71 --70 --68 --69 --70 --71 --67 --62 --50 --37 --22 --8 -6 -17 -25 -29 -31 -29 -24 -18 -9 --2 --13 --25 --35 --45 --53 --59 --64 --68 --70 --71 --70 --69 --67 --65 --62 --59 --55 --53 --49 --47 --44 --42 --40 --39 --37 --36 --34 --34 --33 --36 --41 --45 --44 --41 --34 --25 --13 --2 -10 -19 -27 -31 -33 -30 -27 -21 -15 -8 -3 --3 --7 --10 --12 --15 --16 --17 --18 --20 --22 --23 --25 --29 --33 --39 --45 --52 --57 --62 --66 --70 --72 --74 --73 --73 --71 --70 --67 --68 --69 --70 --67 --61 --51 --40 --26 --13 -0 -11 -20 -25 -28 -27 -24 -18 -9 --2 --13 --24 --34 --44 --53 --59 --64 --68 --70 --71 --70 --70 --68 --65 --63 --59 --56 --53 --49 --47 --44 --42 --40 --39 --37 --36 --35 --34 --34 --37 --41 --45 --44 --41 --34 --25 --13 --2 -10 -19 -27 -31 -33 -31 -28 -20 -12 -1 --9 --21 --32 --42 --49 --56 --61 --66 --67 --69 --69 --67 --66 --67 --69 --69 --66 --60 --49 --36 --22 --8 -6 -17 -26 -30 -32 -30 -26 -19 -10 --2 --13 --24 --34 --44 --52 --59 --64 --68 --69 --71 --70 --69 --67 --68 --70 --71 --67 --60 --49 --37 --22 --7 -6 -17 -26 -30 -32 -29 -25 -18 -13 -6 -0 --5 --8 --11 --13 --16 --17 --19 --20 --22 --24 --26 --28 --31 --35 --41 --47 --53 --57 --63 --67 --70 --72 --73 --73 --73 --71 --70 --67 --68 --69 --70 --67 --61 --52 --40 --26 --13 -0 -12 -21 -25 -29 -27 -24 -18 -9 --1 --12 --24 --34 --44 --52 --59 --64 --67 --70 --71 --70 --70 --68 --69 --71 --72 --68 --62 --51 --38 --23 --8 -6 -16 -25 -29 -31 -29 -25 -17 -9 --2 --13 --25 --35 --45 --52 --59 --64 --68 --70 --71 --70 --70 --67 --65 --61 --59 --55 --52 --49 --47 --44 --41 --39 --39 --37 --36 --35 --34 --33 --36 --41 --44 --44 --41 --34 --25 --13 --1 -11 -20 -28 -32 -33 -31 -28 -22 -16 -9 -4 --2 --6 --9 --11 --14 --15 --17 --18 --20 --22 --24 --25 --29 --33 --39 --46 --52 --57 --62 --66 --70 --71 --72 --73 --72 --71 --69 --67 --65 --62 --60 --56 --54 --51 --49 --47 --45 --43 --41 --40 --39 --37 --37 --36 --39 --43 --47 --46 --43 --36 --28 --16 --5 -6 -15 -23 -29 -31 -30 -28 -22 -14 -3 --8 --20 --31 --40 --48 --55 --61 --64 --66 --68 --68 --67 --65 --67 --69 --69 --66 --60 --49 --38 --23 --9 -5 -16 -25 -29 -31 -29 -26 -19 -14 -6 -1 --5 --8 --11 --13 --15 --16 --18 --19 --22 --23 --25 --27 --30 --35 --41 --46 --52 --58 --63 --67 --70 --72 --74 --74 --73 --72 --69 --67 --69 --70 --71 --67 --62 --52 --40 --26 --13 -0 -12 -21 -25 -29 -27 -24 -17 -9 --2 --13 --24 --35 --44 --52 --60 --64 --68 --70 --71 --71 --70 --68 --66 --63 --61 --58 --55 --51 --48 --45 --43 --40 --39 --37 --36 --35 --35 --33 --37 --41 --44 --44 --41 --34 --24 --13 --2 -10 -19 -27 -31 -33 -31 -28 -21 -12 -1 --9 --21 --31 --41 --49 --56 --61 --65 --67 --69 --68 --68 --66 --67 --69 --69 --66 --59 --49 --36 --21 --7 -7 -18 -26 -31 -32 -31 -27 -20 -14 -7 -1 --4 --8 --11 --13 --16 --17 --19 --20 --23 --24 --26 --27 --31 --35 --41 --47 --53 --59 --64 --67 --71 --72 --74 --73 --73 --71 --69 --67 --65 --62 --59 --55 --53 --50 --48 --46 --44 --42 --41 --39 --39 --38 --37 --36 --39 --43 --47 --46 --42 --36 --27 --16 --5 -6 -16 -24 -29 -31 -30 -28 -21 -13 -2 --8 --20 --30 --40 --48 --56 --61 --65 --67 --68 --69 --68 --66 --67 --68 --69 --66 --60 --49 --37 --22 --8 -6 -17 -26 -29 -32 -30 -26 -20 -14 -7 -2 --4 --7 --11 --13 --15 --17 --18 --20 --22 --23 --25 --27 --30 --34 --40 --46 --53 --58 --63 --67 --71 --72 --74 --73 --73 --72 --70 --67 --65 --62 --59 --56 --53 --50 --48 --45 --44 --41 --40 --39 --38 --37 --37 --36 --39 --43 --46 --46 --42 --36 --27 --16 --5 -6 -16 -24 -29 -32 -31 -29 -24 -18 -11 -6 -0 --4 --9 --11 --14 --16 --17 --19 --21 --22 --23 --25 --28 --32 --39 --44 --51 --56 --62 --66 --69 --71 --73 --73 --73 --71 --69 --67 --64 --61 --59 --56 --53 --49 --47 --45 --43 --41 --40 --38 --37 --36 --36 --36 --38 --42 --46 --45 --42 --35 --27 --17 --5 -6 -15 -23 -28 -31 -30 -28 -23 -18 -12 -6 -1 --3 --8 --10 --13 --15 --17 --19 --20 --22 --24 --25 --29 --33 --40 --45 --52 --57 --63 --66 --70 --72 --73 --73 --72 --70 --69 --67 --67 --69 --70 --67 --61 --52 --41 --27 --14 -0 -12 -21 -26 -29 -27 -25 -18 -10 --1 --12 --24 --34 --43 --51 --58 --63 --67 --69 --71 --70 --69 --67 --69 --71 --71 --68 --61 --50 --37 --23 --9 -6 -17 -25 -30 -31 -29 -25 -18 -10 --2 --13 --24 --34 --44 --52 --59 --64 --68 --69 --71 --70 --69 --67 --68 --70 --71 --68 --61 --49 --37 --22 --7 -7 -18 -27 -31 -32 -30 -26 -18 -9 --2 --13 --25 --35 --45 --52 --59 --64 --68 --70 --71 --70 --69 --67 --68 --70 --71 --67 --60 --49 --36 --20 --7 -7 -18 -26 -30 -31 -29 -25 -17 -9 --2 --13 --25 --35 --45 --53 --60 --65 --69 --70 --72 --71 --71 --68 --69 --70 --71 --68 --61 --49 --37 --22 --7 -7 -17 -26 -30 -31 -29 -25 -18 -9 --3 --14 --25 --36 --46 --54 --61 --65 --69 --71 --72 --71 --70 --68 --69 --71 --72 --68 --61 --50 --37 --22 --8 -7 -17 -26 -30 -32 -29 -25 -17 -8 --3 --14 --26 --36 --46 --54 --60 --65 --69 --71 --72 --71 --70 --68 --69 --70 --72 --68 --61 --50 --37 --22 --8 -6 -17 -26 -30 -31 -29 -25 -18 -9 --2 --13 --25 --35 --45 --53 --60 --65 --68 --70 --71 --70 --69 --67 --68 --70 --70 --67 --60 --49 --36 --21 --6 -8 -19 -27 -31 -32 -29 -25 -18 -9 --3 --13 --25 --35 --45 --53 --60 --65 --68 --70 --72 --71 --71 --68 --66 --63 --60 --57 --54 --50 --48 --45 --42 --40 --39 --37 --36 --35 --35 --34 --37 --41 --45 --44 --41 --34 --24 --12 --1 -11 -21 -29 -32 -34 -32 -29 -21 -12 -1 --10 --22 --32 --42 --49 --57 --62 --65 --67 --69 --68 --67 --66 --67 --69 --70 --66 --60 --49 --37 --22 --7 -6 -18 -26 -30 -32 -29 -26 -18 -10 --2 --13 --24 --35 --44 --52 --59 --64 --67 --69 --71 --70 --69 --68 --68 --70 --71 --68 --61 --49 --37 --21 --7 -7 -18 -26 -30 -32 -29 -25 -17 -9 --2 --13 --25 --35 --45 --53 --60 --64 --68 --70 --72 --71 --70 --68 --69 --71 --71 --67 --60 --49 --36 --21 --6 -7 -18 -27 -31 -33 -30 -26 -18 -9 --2 --13 --25 --36 --45 --53 --60 --64 --68 --70 --72 --71 --70 --67 --68 --70 --71 --67 --61 --49 --37 --21 --7 -7 -18 -27 -30 -32 -30 -26 -18 -9 --2 --13 --25 --36 --46 --53 --61 --65 --69 --71 --72 --71 --70 --68 --69 --70 --71 --67 --60 --49 --37 --21 --7 -7 -18 -27 -30 -32 -29 -26 -18 -9 --2 --13 --25 --35 --45 --53 --59 --65 --69 --70 --71 --70 --70 --68 --68 --70 --71 --67 --61 --49 --37 --21 --7 -7 -18 -26 -31 -31 -29 -25 -18 -9 --3 --13 --25 --36 --45 --53 --60 --64 --68 --69 --71 --70 --69 --67 --69 --70 --71 --67 --61 --49 --36 --21 --7 -8 -19 -27 -31 -32 -30 -26 -20 -14 -7 -1 --5 --8 --11 --14 --15 --17 --19 --20 --22 --23 --26 --27 --30 --35 --40 --46 --52 --57 --63 --66 --70 --72 --74 --74 --73 --71 --70 --68 --65 --62 --60 --56 --53 --50 --49 --46 --43 --42 --41 --38 --38 --37 --37 --36 --39 --43 --46 --46 --43 --35 --27 --16 --5 -7 -16 -24 -29 -31 -31 -28 -21 -13 -2 --8 --20 --30 --40 --49 --56 --61 --65 --68 --70 --69 --69 --67 --68 --70 --71 --67 --61 --50 --38 --23 --9 -5 -16 -25 -29 -32 -30 -26 -20 -14 -7 -2 --4 --8 --11 --13 --16 --17 --19 --21 --23 --24 --26 --28 --31 --36 --41 --47 --53 --59 --64 --67 --71 --72 --73 --73 --73 --71 --70 --67 --68 --69 --71 --67 --61 --52 --40 --26 --12 -1 -12 -22 -27 -29 -28 -25 -18 -10 --1 --12 --23 --34 --43 --51 --59 --64 --68 --70 --72 --72 --71 --68 --66 --63 --60 --56 --53 --50 --48 --45 --42 --40 --38 --37 --36 --35 --35 --34 --37 --42 --45 --45 --42 --35 --26 --14 --3 -10 -19 -27 -31 -33 -31 -28 -20 -12 -1 --10 --22 --32 --42 --50 --57 --62 --66 --68 --69 --69 --69 --67 --68 --69 --70 --67 --60 --49 --36 --21 --7 -7 -18 -27 -30 -32 -30 -26 -19 -9 --2 --13 --25 --35 --45 --52 --60 --65 --68 --70 --71 --71 --69 --67 --68 --70 --71 --67 --60 --50 --37 --22 --7 -7 -18 -27 -31 -32 -30 -26 -18 -9 --2 --13 --25 --35 --46 --53 --60 --65 --68 --70 --71 --70 --69 --67 --69 --70 --71 --67 --61 --50 --37 --21 --7 -7 -18 -27 -31 -32 -29 -25 -17 -9 --2 --14 --26 --35 --45 --53 --60 --65 --68 --70 --71 --70 --70 --68 --69 --70 --71 --67 --61 --49 --37 --22 --8 -7 -17 -26 -30 -31 -29 -25 -19 -12 -5 -0 --5 --9 --12 --14 --16 --17 --19 --21 --23 --24 --26 --27 --31 --35 --41 --47 --53 --59 --64 --67 --70 --72 --74 --73 --73 --71 --69 --67 --68 --70 --70 --67 --61 --51 --40 --25 --12 -1 -12 -21 -26 -29 -28 -25 -18 -9 --2 --12 --24 --34 --44 --52 --59 --64 --68 --70 --72 --71 --70 --68 --69 --71 --71 --68 --61 --50 --37 --22 --8 -6 -18 -26 -30 -32 -30 -26 -19 -10 --1 --13 --24 --35 --45 --53 --61 --65 --69 --71 --72 --71 --70 --68 --69 --71 --72 --68 --61 --50 --37 --22 --7 -8 -19 -27 -31 -32 -30 -26 -18 -9 --2 --13 --25 --35 --45 --53 --59 --65 --69 --70 --72 --71 --70 --68 --66 --63 --60 --56 --53 --50 --47 --43 --42 --40 --39 --37 --36 --35 --34 --33 --37 --41 --45 --44 --41 --34 --24 --13 --2 -11 -20 -28 -31 -34 -32 -29 -23 -17 -10 -4 --1 --5 --9 --11 --14 --15 --17 --19 --20 --22 --23 --25 --28 --33 --39 --45 --51 --57 --63 --66 --69 --71 --73 --73 --73 --71 --69 --67 --68 --70 --71 --67 --61 --52 --41 --27 --13 -1 -11 -21 -26 -29 -27 -24 -18 -9 --1 --12 --24 --35 --44 --52 --59 --65 --69 --71 --72 --72 --71 --69 --66 --64 --60 --57 --54 --51 --48 --45 --43 --41 --39 --37 --36 --35 --35 --34 --37 --41 --45 --44 --42 --34 --25 --13 --2 -10 -19 -28 -31 -34 -32 -29 -23 -17 -10 -4 --1 --5 --9 --11 --13 --14 --16 --18 --19 --21 --23 --25 --28 --33 --39 --45 --52 --57 --63 --67 --69 --71 --73 --73 --72 --70 --69 --66 --64 --61 --58 --55 --53 --49 --48 --45 --43 --40 --40 --38 --37 --36 --36 --35 --38 --43 --46 --45 --42 --36 --27 --16 --5 -6 -16 -24 -29 -31 -31 -29 -22 -14 -3 --8 --20 --30 --40 --48 --56 --61 --65 --67 --69 --69 --68 --66 --68 --70 --71 --66 --61 --50 --37 --22 --8 -6 -17 -25 -29 -31 -29 -26 -18 -9 --2 --13 --24 --35 --44 --52 --59 --64 --68 --70 --71 --71 --70 --69 --69 --71 --72 --68 --61 --50 --37 --22 --7 -7 -17 -26 -30 -32 -29 -25 -17 -9 --3 --14 --25 --36 --46 --53 --60 --65 --69 --70 --71 --71 --69 --67 --68 --70 --71 --67 --60 --49 --37 --21 --7 -7 -19 -27 -31 -32 -30 -26 -18 -9 --2 --13 --25 --35 --45 --53 --61 --65 --69 --70 --72 --71 --70 --68 --69 --70 --71 --67 --61 --49 --36 --21 --7 -8 -19 -27 -31 -32 -30 -26 -18 -9 --2 --13 --24 --35 --45 --53 --60 --64 --68 --70 --71 --70 --70 --68 --68 --70 --71 --67 --61 --50 --37 --22 --7 -7 -17 -26 -30 -32 -29 -25 -18 -9 --3 --14 --25 --36 --45 --53 --60 --65 --69 --70 --71 --71 --70 --68 --69 --71 --72 --68 --61 --50 --37 --22 --7 -7 -18 -27 -31 -32 -30 -26 -18 -9 --2 --13 --25 --35 --45 --53 --60 --65 --69 --71 --72 --71 --70 --67 --68 --70 --71 --67 --61 --49 --36 --21 --7 -7 -18 -26 -31 -32 -30 -26 -17 -9 --3 --14 --26 --36 --46 --54 --61 --65 --69 --71 --72 --71 --70 --68 --69 --70 --71 --67 --60 --49 --37 --21 --7 -7 -19 -27 -31 -33 -30 -26 -19 -13 -5 -0 --5 --9 --11 --13 --15 --16 --18 --19 --22 --23 --25 --26 --30 --35 --41 --46 --53 --59 --64 --68 --71 --73 --74 --74 --73 --72 --70 --68 --68 --70 --71 --67 --62 --52 --40 --26 --12 -1 -12 -21 -26 -29 -27 -24 -17 -9 --2 --13 --25 --35 --45 --53 --60 --65 --69 --71 --72 --71 --70 --68 --69 --71 --72 --68 --61 --50 --37 --23 --8 -7 -18 -26 -30 -33 -30 -26 -19 -9 --2 --13 --24 --35 --45 --53 --60 --65 --69 --70 --71 --71 --70 --68 --69 --70 --71 --67 --61 --49 --37 --21 --7 -7 -18 -27 -30 -32 -29 -26 -18 -9 --2 --13 --25 --35 --45 --53 --60 --65 --68 --70 --71 --71 --70 --68 --68 --70 --71 --67 --61 --49 --36 --21 --7 -7 -18 -27 -31 -33 -30 -26 -17 -9 --3 --15 --26 --36 --46 --54 --61 --65 --69 --70 --72 --71 --70 --68 --69 --70 --71 --68 --61 --50 --37 --22 --7 -7 -18 -26 -30 -32 -29 -25 -17 -9 --3 --14 --26 --36 --46 --53 --60 --65 --69 --71 --72 --71 --70 --68 --68 --70 --71 --67 --60 --49 --36 --21 --6 -7 -19 -27 -31 -32 -30 -26 -18 -9 --2 --13 --24 --35 --45 --53 --60 --65 --69 --71 --71 --71 --70 --67 --68 --70 --71 --67 --61 --50 --37 --21 --7 -8 -19 -27 -32 -33 -31 -27 -19 -10 --2 --13 --25 --35 --45 --54 --60 --65 --69 --71 --72 --72 --71 --69 --69 --71 --71 --68 --61 --50 --37 --22 --7 -8 -19 -27 -31 -32 -29 -25 -17 -9 --3 --13 --25 --35 --45 --53 --61 --65 --69 --71 --72 --71 --70 --68 --66 --63 --60 --56 --53 --49 --48 --44 --42 --40 --39 --37 --36 --35 --34 --34 --37 --42 --45 --45 --42 --34 --25 --13 --1 -10 -20 -28 -32 -33 -31 -28 -20 -11 -1 --11 --22 --33 --42 --50 --58 --62 --66 --68 --69 --69 --68 --66 --68 --69 --70 --66 --60 --49 --35 --21 --6 -8 -19 -27 -32 -33 -30 -27 -19 -11 --1 --12 --24 --34 --45 --52 --59 --64 --68 --70 --71 --70 --70 --68 --68 --70 --71 --68 --61 --50 --37 --22 --7 -7 -18 -27 -30 -32 -29 -26 -18 -9 --2 --13 --25 --36 --45 --53 --60 --65 --69 --70 --72 --71 --70 --68 --69 --71 --72 --68 --61 --50 --36 --21 --6 -7 -19 -27 -31 -33 -30 -26 -18 -9 --2 --13 --25 --35 --45 --53 --60 --65 --69 --70 --72 --71 --70 --68 --69 --71 --71 --67 --61 --50 --37 --21 --7 -8 -19 -27 -31 -32 -30 -26 -18 -10 --2 --13 --25 --35 --45 --53 --60 --65 --69 --70 --71 --70 --69 --68 --68 --70 --71 --68 --61 --49 --37 --22 --7 -7 -19 -27 -31 -33 -30 -26 -18 -9 --2 --13 --25 --35 --45 --53 --60 --65 --69 --71 --72 --71 --71 --68 --69 --71 --72 --68 --61 --49 --36 --21 --7 -8 -19 -27 -31 -33 -30 -26 -19 -10 --2 --13 --24 --35 --45 --53 --60 --65 --69 --71 --72 --71 --70 --68 --69 --71 --71 --68 --61 --50 --37 --21 --7 -7 -18 -27 -31 -33 -30 -26 -18 -9 --2 --13 --25 --35 --45 --53 --60 --65 --69 --70 --72 --71 --70 --68 --69 --71 --72 --68 --61 --50 --37 --22 --7 -7 -18 -27 -31 -32 -30 -26 -20 -14 -6 -1 --5 --8 --12 --14 --16 --17 --20 --21 --23 --24 --27 --27 --31 --35 --41 --47 --53 --58 --64 --67 --71 --72 --74 --74 --73 --72 --70 --67 --69 --70 --71 --67 --62 --52 --40 --27 --13 -1 -12 -21 -27 -30 -29 -26 -19 -10 --1 --12 --24 --34 --44 --52 --59 --64 --68 --70 --72 --71 --71 --69 --69 --71 --72 --68 --61 --50 --37 --22 --7 -7 -18 -27 -31 -33 -30 -26 -19 -10 --2 --13 --24 --35 --45 --53 --60 --65 --69 --71 --72 --71 --70 --68 --69 --70 --71 --67 --61 --50 --37 --21 --6 -8 -19 -27 -31 -32 -29 -26 -18 -9 --3 --14 --26 --36 --46 --53 --61 --65 --69 --71 --72 --72 --71 --68 --69 --71 --72 --68 --62 --50 --37 --22 --7 -7 -19 -27 -31 -32 -30 -26 -18 -9 --2 --14 --25 --36 --45 --53 --60 --65 --69 --71 --72 --71 --70 --68 --69 --70 --71 --67 --61 --49 --37 --21 --6 -8 -19 -28 -31 -34 -30 -26 -18 -9 --2 --13 --25 --35 --46 --53 --60 --65 --69 --71 --72 --71 --70 --68 --69 --71 --72 --67 --61 --50 --36 --21 --6 -8 -19 -27 -31 -32 -30 -26 -18 -9 --2 --13 --25 --36 --46 --53 --60 --65 --69 --71 --72 --71 --70 --68 --69 --71 --72 --68 --61 --49 --36 --21 --7 -7 -19 -27 -31 -33 -30 -26 -18 -9 --2 --14 --25 --35 --45 --53 --61 --65 --69 --71 --72 --71 --70 --68 --68 --70 --71 --67 --60 --49 --36 --21 --6 -7 -18 -27 -31 -33 -30 -26 -18 -9 --2 --13 --25 --36 --46 --54 --60 --65 --69 --70 --72 --71 --70 --68 --69 --71 --72 --68 --61 --50 --37 --21 --6 -7 -19 -28 -31 -32 -30 -26 -18 -9 --3 --14 --25 --36 --46 --53 --61 --65 --69 --70 --72 --71 --70 --68 --69 --70 --71 --67 --61 --49 --37 --21 --7 -7 -18 -27 -31 -32 -30 -26 -18 -9 --2 --13 --25 --35 --45 --53 --60 --65 --69 --71 --72 --71 --70 --68 --66 --63 --60 --57 --54 --50 --48 --45 --43 --40 --39 --37 --36 --34 --35 --33 --37 --41 --45 --44 --41 --34 --25 --13 --1 -11 -20 -29 -32 -34 -31 -28 -21 -11 -0 --11 --22 --33 --42 --50 --57 --62 --66 --68 --69 --69 --68 --66 --67 --69 --70 --66 --59 --49 --36 --21 --7 -8 -19 -28 -31 -33 -31 -27 -19 -11 --1 --12 --24 --34 --44 --52 --60 --65 --69 --71 --72 --71 --70 --68 --69 --70 --72 --68 --61 --51 --37 --22 --7 -8 -19 -28 -31 -33 -30 -25 -19 -13 -6 -0 --5 --9 --13 --14 --16 --17 --19 --20 --22 --24 --26 --27 --31 --35 --42 --47 --53 --58 --64 --67 --71 --73 --75 --75 --74 --73 --71 --68 --69 --71 --71 --68 --62 --52 --40 --26 --13 -1 -13 -22 -27 -30 -29 -26 -18 -10 --1 --12 --24 --34 --45 --53 --60 --65 --69 --70 --72 --71 --71 --68 --66 --63 --61 --57 --54 --51 --48 --45 --43 --41 --39 --37 --36 --35 --34 --34 --37 --41 --45 --45 --42 --34 --25 --14 --2 -10 -20 -27 -31 -34 -32 -29 -22 -13 -2 --9 --21 --32 --42 --49 --57 --61 --66 --68 --70 --69 --69 --67 --68 --70 --71 --67 --60 --49 --37 --22 --7 -7 -18 -27 -31 -33 -30 -27 -19 -11 --1 --13 --24 --35 --45 --52 --60 --65 --69 --71 --72 --72 --70 --68 --69 --71 --72 --67 --61 --50 --37 --21 --7 -7 -19 -27 -31 -33 -30 -26 -19 -13 -6 -0 --5 --9 --11 --13 --15 --16 --18 --20 --22 --24 --26 --28 --31 --35 --41 --47 --53 --58 --64 --68 --71 --73 --74 --74 --73 --71 --70 --67 --65 --61 --59 --56 --53 --50 --48 --46 --44 --41 --41 --39 --39 --37 --37 --36 --39 --44 --48 --47 --43 --36 --28 --17 --5 -7 -16 -24 -29 -32 -31 -29 -24 -18 -12 -7 -1 --3 --7 --10 --12 --14 --17 --18 --20 --21 --24 --25 --29 --33 --39 --45 --52 --57 --63 --66 --70 --71 --73 --73 --73 --71 --70 --67 --65 --61 --59 --55 --53 --50 --47 --45 --43 --41 --40 --39 --38 --37 --36 --36 --39 --43 --46 --46 --43 --36 --28 --17 --6 -6 -16 -23 -29 -32 -31 -29 -24 -19 -12 -7 -1 --3 --8 --11 --13 --15 --18 --18 --20 --22 --23 --25 --28 --33 --39 --45 --52 --57 --63 --67 --71 --72 --74 --75 --74 --73 --71 --68 --66 --63 --60 --56 --53 --51 --48 --46 --44 --42 --41 --39 --38 --37 --37 --36 --39 --44 --47 --46 --43 --36 --28 --16 --6 -6 -16 -24 -29 -32 -32 -30 -24 -20 -13 -7 -1 --3 --7 --10 --13 --15 --17 --18 --21 --22 --23 --25 --28 --33 --39 --45 --51 --57 --63 --67 --70 --71 --73 --73 --72 --70 --69 --66 --67 --69 --71 --67 --61 --51 --40 --26 --12 -1 -12 -22 -27 -30 -28 -25 -18 -10 --1 --12 --23 --34 --45 --52 --59 --64 --69 --71 --72 --72 --71 --69 --67 --64 --61 --57 --54 --50 --47 --45 --42 --40 --39 --37 --36 --35 --35 --33 --36 --41 --44 --44 --41 --34 --25 --13 --3 -10 -19 -28 -32 -34 -32 -29 -21 -13 -1 --9 --21 --31 --42 --50 --57 --62 --66 --68 --69 --69 --68 --67 --68 --70 --71 --67 --60 --49 --36 --21 --7 -8 -19 -28 -32 -33 -31 -27 -20 -14 -7 -1 --4 --8 --11 --13 --15 --17 --20 --20 --23 --24 --27 --27 --31 --35 --41 --47 --53 --59 --64 --67 --71 --73 --74 --73 --73 --72 --70 --68 --68 --70 --71 --68 --62 --52 --40 --26 --12 -1 -13 -22 -27 -30 -28 -25 -18 -10 --2 --13 --24 --34 --44 --52 --60 --65 --69 --70 --72 --71 --71 --68 --66 --63 --60 --56 --54 --50 --48 --44 --42 --40 --38 --37 --36 --35 --34 --34 --37 --41 --45 --45 --41 --34 --25 --13 --2 -10 -20 -27 -32 -33 -32 -29 -23 -17 -10 -5 --1 --5 --9 --11 --14 --15 --17 --18 --21 --22 --24 --25 --29 --33 --40 --45 --52 --58 --63 --67 --71 --73 --74 --74 --74 --72 --70 --67 --65 --62 --59 --56 --53 --50 --49 --46 --44 --42 --40 --39 --38 --37 --36 --35 --39 --43 --47 --46 --43 --36 --28 --17 --6 -6 -16 -24 -29 -32 -31 -29 -22 -14 -3 --7 --19 --29 --39 --48 --55 --60 --65 --67 --69 --68 --68 --66 --67 --69 --70 --67 --60 --50 --37 --22 --7 -6 -18 -27 -31 -33 -31 -27 -21 -15 -9 -2 --3 --7 --11 --12 --15 --16 --19 --20 --21 --23 --25 --26 --30 --34 --41 --47 --53 --58 --64 --68 --71 --73 --75 --74 --73 --72 --70 --67 --65 --63 --60 --56 --53 --50 --48 --45 --44 --41 --40 --38 --38 --36 --36 --35 --39 --43 --46 --46 --43 --35 --27 --16 --5 -7 -16 -25 -30 -33 -32 -30 -22 -14 -3 --9 --20 --31 --41 --49 --56 --61 --66 --68 --70 --69 --69 --67 --68 --70 --71 --67 --61 --50 --37 --22 --7 -7 -18 -27 -31 -33 -30 -27 -21 -15 -7 -1 --4 --8 --11 --13 --15 --16 --19 --20 --22 --23 --25 --26 --30 --34 --40 --46 --53 --58 --64 --67 --71 --73 --74 --74 --74 --72 --71 --68 --69 --71 --72 --68 --61 --52 --40 --26 --12 -2 -13 -22 -27 -30 -29 -26 -19 -10 --1 --12 --24 --35 --44 --52 --59 --65 --69 --71 --72 --71 --71 --68 --69 --71 --71 --68 --61 --50 --37 --22 --8 -7 -18 -27 -31 -32 -30 -25 -18 -9 --2 --14 --26 --36 --46 --54 --61 --65 --69 --71 --72 --71 --71 --68 --67 --63 --61 --57 --54 --50 --47 --45 --43 --40 --39 --37 --37 --35 --35 --34 --37 --42 --45 --45 --42 --34 --25 --13 --1 -11 -20 -28 -32 -34 -32 -29 -22 -16 -10 -4 --1 --5 --9 --11 --13 --15 --17 --17 --20 --21 --23 --25 --28 --32 --38 --44 --52 --57 --63 --66 --70 --72 --74 --74 --73 --71 --70 --67 --68 --70 --70 --67 --61 --51 --39 --26 --11 -2 -13 -23 -27 -31 -29 -26 -19 -10 --1 --12 --24 --34 --44 --52 --60 --65 --69 --71 --72 --72 --71 --69 --67 --63 --60 --57 --54 --50 --48 --45 --43 --40 --39 --37 --37 --35 --35 --35 --37 --42 --45 --45 --42 --34 --25 --13 --1 -11 -20 -28 -32 -33 -31 -29 -21 -12 -1 --10 --22 --33 --43 --50 --58 --63 --67 --68 --70 --69 --69 --67 --67 --69 --70 --66 --60 --49 --36 --20 --6 -7 -19 -27 -31 -33 -30 -27 -19 -10 --1 --13 --25 --35 --45 --53 --60 --65 --69 --71 --72 --71 --70 --68 --68 --71 --71 --68 --61 --49 --37 --22 --7 -7 -19 -27 -31 -32 -30 -26 -19 -13 -6 -1 --4 --8 --11 --13 --15 --17 --19 --20 --22 --23 --26 --27 --31 --35 --41 --47 --53 --59 --65 --68 --72 --73 --75 --74 --74 --72 --70 --68 --68 --70 --71 --67 --61 --52 --40 --26 --11 -1 -13 -22 -27 -30 -28 -25 -18 -10 --1 --12 --24 --34 --44 --51 --59 --64 --68 --70 --72 --71 --70 --68 --69 --71 --72 --68 --62 --50 --37 --23 --7 -7 -18 -27 -31 -33 -30 -27 -19 -10 --1 --12 --24 --35 --45 --53 --60 --65 --69 --71 --72 --71 --71 --68 --66 --63 --60 --57 --54 --50 --48 --45 --42 --40 --39 --36 --35 --34 --35 --34 --37 --42 --45 --45 --42 --34 --25 --13 --2 -11 -20 -28 -32 -33 -31 -28 -22 -16 -9 -4 --2 --5 --9 --11 --13 --15 --16 --18 --20 --21 --23 --25 --28 --33 --39 --46 --52 --58 --63 --67 --71 --72 --73 --73 --73 --71 --69 --67 --65 --61 --59 --55 --53 --50 --48 --45 --44 --41 --40 --39 --38 --37 --36 --35 --39 --43 --46 --46 --43 --36 --27 --17 --5 -7 -17 -26 -30 -33 -32 -29 -23 -15 -3 --8 --20 --31 --41 --49 --56 --61 --66 --68 --69 --69 --69 --67 --68 --70 --70 --67 --60 --49 --37 --22 --8 -7 -17 -27 -31 -32 -30 -27 -20 -15 -7 -2 --3 --7 --10 --13 --15 --16 --18 --19 --22 --23 --25 --27 --31 --35 --41 --47 --54 --59 --64 --68 --72 --73 --75 --74 --74 --72 --70 --68 --69 --71 --71 --68 --62 --52 --40 --26 --12 -1 -13 -22 -26 -30 -28 -25 -18 -9 --2 --13 --25 --35 --45 --53 --60 --65 --69 --72 --73 --72 --72 --69 --67 --63 --60 --57 --53 --50 --48 --45 --43 --41 --39 --37 --36 --35 --35 --34 --37 --41 --44 --44 --42 --35 --25 --13 --1 -11 -20 -28 -32 -34 -32 -29 -21 -12 -1 --10 --22 --32 --42 --50 --58 --63 --66 --68 --70 --69 --68 --66 --68 --69 --70 --67 --60 --49 --36 --21 --6 -8 -19 -28 -32 -34 -31 -27 -20 -14 -7 -1 --4 --7 --10 --13 --15 --16 --17 --19 --22 --23 --25 --26 --30 --34 --40 --46 --53 --58 --64 --67 --71 --72 --74 --74 --74 --72 --71 --68 --65 --63 --60 --57 --54 --51 --49 --47 --45 --43 --41 --40 --39 --38 --37 --36 --39 --44 --47 --47 --43 --37 --28 --17 --5 -7 -16 -25 -29 -33 -31 -29 -22 -14 -2 --8 --20 --31 --41 --49 --57 --61 --66 --68 --69 --69 --69 --67 --69 --71 --72 --68 --61 --50 --37 --22 --7 -7 -18 -27 -31 -33 -31 -27 -21 -15 -8 -2 --4 --7 --11 --13 --15 --17 --19 --20 --22 --23 --25 --27 --31 --34 --41 --47 --53 --58 --64 --68 --71 --73 --74 --74 --74 --71 --70 --67 --65 --61 --59 --56 --53 --50 --48 --45 --44 --41 --40 --39 --38 --37 --37 --36 --39 --43 --47 --46 --43 --37 --27 --16 --5 -7 -16 -25 -29 -33 -32 -30 -24 -19 -12 -7 -1 --3 --8 --10 --13 --15 --17 --18 --21 --22 --24 --25 --29 --33 --40 --46 --52 --58 --63 --67 --71 --73 --74 --74 --74 --72 --70 --68 --65 --62 --59 --56 --53 --51 --48 --46 --45 --42 --41 --40 --39 --37 --38 --36 --39 --43 --46 --46 --43 --36 --27 --16 --5 -7 -16 -25 -30 -33 -31 -30 -25 -19 -13 -7 -1 --3 --7 --10 --13 --14 --17 --18 --20 --22 --23 --25 --29 --33 --39 --45 --52 --58 --63 --67 --70 --72 --73 --73 --73 --72 --70 --67 --68 --70 --70 --67 --61 --52 --40 --26 --13 -1 -12 -22 -27 -30 -29 -26 -19 -11 --1 --11 --24 --34 --44 --53 --60 --65 --69 --71 --73 --72 --71 --69 --70 --72 --72 --69 --62 --51 --37 --23 --8 -7 -18 -26 -31 -33 -30 -26 -19 -10 --2 --13 --25 --35 --45 --53 --60 --65 --69 --71 --72 --72 --71 --69 --70 --71 --72 --69 --61 --50 --37 --22 --7 -8 -19 -26 -31 -32 -30 -26 -19 -9 --2 --13 --25 --35 --45 --53 --60 --65 --69 --71 --72 --71 --71 --68 --69 --71 --72 --68 --61 --50 --37 --21 --7 -8 -19 -29 -32 -34 -31 -27 -19 -10 --1 --13 --25 --35 --45 --53 --61 --65 --69 --71 --72 --71 --70 --68 --69 --70 --71 --68 --60 --49 --36 --21 --6 -9 -20 -29 -32 -33 -30 -26 -19 -9 --3 --14 --25 --35 --46 --53 --61 --65 --69 --71 --72 --71 --71 --68 --69 --70 --72 --68 --61 --49 --36 --21 --6 -8 -19 -28 -32 -33 -31 -26 -19 -9 --2 --13 --25 --35 --45 --53 --61 --65 --69 --71 --72 --72 --71 --69 --70 --71 --72 --68 --62 --51 --37 --22 --8 -7 -19 -28 -31 -33 -31 -27 -19 -10 --1 --13 --24 --35 --45 --53 --60 --65 --68 --71 --72 --71 --70 --68 --69 --71 --72 --69 --61 --50 --36 --21 --6 -8 -19 -28 -31 -33 -30 -26 -18 -9 --2 --14 --26 --36 --47 --54 --61 --66 --70 --72 --73 --72 --71 --69 --66 --63 --61 --57 --54 --50 --48 --45 --42 --40 --39 --37 --36 --35 --34 --34 --37 --42 --45 --45 --41 --35 --25 --13 --1 -11 -21 -29 -33 -34 -32 -29 -21 -13 -1 --10 --22 --32 --42 --50 --57 --63 --67 --69 --70 --70 --69 --67 --68 --70 --71 --67 --61 --49 --36 --21 --7 -8 -19 -28 -33 -34 -31 -27 -20 -11 --1 --12 --24 --35 --45 --53 --60 --65 --68 --70 --72 --71 --71 --68 --69 --71 --71 --68 --61 --49 --36 --21 --6 -9 -19 -28 -32 -33 -31 -26 -19 -10 --2 --14 --26 --37 --47 --54 --61 --66 --71 --72 --73 --73 --71 --69 --70 --72 --72 --69 --61 --50 --37 --21 --6 -8 -19 -28 -31 -33 -31 -27 -19 -10 --1 --12 --25 --35 --45 --53 --61 --65 --69 --71 --72 --72 --71 --69 --70 --71 --72 --68 --62 --51 --37 --22 --7 -7 -19 -28 -31 -33 -30 -26 -19 -10 --2 --13 --25 --35 --45 --53 --60 --65 --69 --71 --72 --71 --70 --68 --69 --70 --71 --68 --61 --49 --37 --21 --6 -9 -19 -29 -32 -34 -31 -27 -19 -10 --3 --14 --25 --35 --45 --53 --60 --65 --69 --71 --71 --71 --70 --68 --69 --70 --71 --67 --61 --50 --36 --21 --6 -8 -19 -28 -31 -33 -30 -27 -19 -10 --1 --13 --25 --35 --45 --53 --61 --65 --69 --71 --72 --71 --70 --68 --69 --71 --72 --68 --62 --50 --37 --21 --7 -8 -19 -27 -31 -33 -30 -26 -20 -13 -6 -0 --4 --8 --11 --13 --16 --17 --19 --21 --23 --24 --26 --27 --31 --35 --42 --47 --53 --59 --64 --68 --71 --73 --75 --74 --75 --73 --71 --68 --66 --63 --59 --56 --53 --50 --49 --45 --44 --42 --41 --39 --38 --37 --37 --36 --39 --43 --47 --46 --43 --36 --27 --16 --5 -7 -17 -26 -30 -33 -32 -29 -22 -14 -3 --8 --20 --30 --41 --49 --56 --61 --65 --67 --69 --69 --69 --66 --68 --70 --71 --68 --61 --50 --37 --22 --7 -7 -18 -27 -31 -33 -31 -27 -21 -15 -8 -1 --3 --7 --11 --13 --16 --17 --19 --20 --22 --24 --26 --28 --31 --35 --42 --47 --54 --59 --65 --68 --72 --74 --75 --75 --74 --72 --71 --68 --69 --70 --71 --68 --62 --52 --41 --26 --12 -1 -13 -23 -28 -30 -29 -26 -19 -10 --1 --12 --24 --35 --44 --53 --60 --65 --69 --71 --72 --72 --71 --69 --67 --64 --61 --57 --54 --51 --48 --45 --43 --40 --39 --37 --36 --35 --35 --34 --37 --42 --45 --45 --42 --34 --25 --13 --2 -11 -20 -28 -31 -34 -32 -29 -22 -13 -2 --10 --21 --32 --42 --50 --57 --62 --66 --68 --69 --69 --68 --66 --67 --68 --69 --66 --60 --49 --36 --21 --6 -8 -19 -28 -33 -34 -31 -28 -20 -11 --1 --12 --24 --34 --45 --53 --60 --65 --69 --70 --72 --71 --71 --69 --69 --72 --73 --69 --62 --51 --37 --22 --7 -7 -19 -28 -31 -33 -30 -26 -18 -9 --2 --13 --25 --36 --46 --53 --61 --65 --70 --71 --73 --72 --71 --69 --70 --71 --72 --68 --62 --50 --37 --21 --6 -8 -19 -28 -31 -34 -30 -26 -18 -9 --2 --13 --25 --35 --45 --54 --61 --65 --69 --71 --72 --71 --70 --69 --69 --71 --72 --69 --62 --50 --37 --22 --7 -7 -18 -27 -31 -33 -30 -26 -19 -14 -6 -1 --4 --7 --11 --12 --14 --15 --18 --19 --21 --23 --25 --26 --30 --35 --41 --47 --53 --59 --65 --68 --72 --74 --75 --75 --75 --73 --71 --68 --69 --70 --71 --67 --61 --51 --39 --25 --11 -2 -13 -23 -27 -31 -29 -26 -18 -9 --2 --13 --25 --35 --46 --53 --61 --66 --69 --71 --72 --72 --71 --69 --70 --72 --73 --69 --62 --51 --38 --22 --7 -7 -18 -27 -31 -33 -30 -27 -19 -10 --1 --13 --24 --35 --45 --53 --60 --65 --69 --71 --72 --72 --71 --69 --70 --71 --73 --69 --61 --50 --37 --21 --6 -8 -19 -28 -31 -33 -30 -26 -18 -10 --2 --13 --25 --36 --47 --55 --61 --66 --70 --71 --73 --72 --71 --68 --66 --63 --59 --55 --53 --49 --47 --44 --42 --39 --37 --36 --35 --34 --34 --33 --37 --41 --45 --45 --42 --34 --25 --13 --1 -11 -21 -29 -33 -35 -33 -29 -23 -17 -10 -4 --1 --5 --9 --11 --13 --15 --17 --18 --20 --22 --24 --26 --29 --34 --40 --46 --52 --57 --63 --67 --71 --72 --74 --74 --74 --72 --71 --68 --69 --70 --71 --68 --62 --52 --41 --27 --12 -1 -13 -22 -27 -31 -29 -26 -19 -11 --1 --12 --23 --34 --44 --52 --60 --65 --69 --71 --72 --72 --71 --69 --67 --64 --61 --57 --55 --51 --48 --45 --43 --40 --38 --36 --36 --34 --34 --33 --37 --41 --45 --46 --43 --35 --25 --13 --2 -11 -21 -29 -33 -35 -33 -30 -23 -18 -11 -5 --1 --4 --8 --11 --13 --14 --16 --18 --20 --21 --23 --25 --28 --33 --39 --46 --52 --58 --64 --68 --71 --73 --75 --74 --74 --72 --70 --67 --65 --62 --60 --56 --53 --50 --48 --45 --44 --42 --40 --39 --38 --37 --37 --36 --39 --44 --47 --46 --43 --37 --28 --16 --5 -7 -17 -26 -30 -33 -32 -30 -23 -14 -3 --8 --20 --30 --40 --48 --56 --61 --65 --68 --69 --69 --69 --67 --68 --70 --71 --67 --61 --50 --37 --22 --7 -7 -18 -27 -31 -34 -32 -28 -21 -11 -0 --12 --24 --34 --44 --53 --60 --65 --69 --71 --73 --72 --71 --69 --71 --72 --73 --68 --61 --50 --37 --21 --6 -9 -20 -28 -32 -34 -31 -27 -19 -10 --2 --13 --25 --35 --46 --53 --60 --65 --70 --71 --72 --72 --71 --69 --70 --72 --73 --69 --61 --51 --37 --21 --6 -8 -19 -29 -32 -33 -31 -27 -20 -10 --1 --13 --25 --35 --46 --53 --61 --66 --69 --72 --73 --72 --71 --68 --69 --71 --72 --68 --61 --49 --36 --20 --6 -9 -20 -29 -32 -34 -31 -27 -19 -10 --2 --13 --25 --36 --46 --54 --61 --66 --70 --72 --73 --72 --71 --69 --70 --71 --72 --68 --62 --50 --37 --21 --6 -8 -19 -28 -32 -34 -30 -27 -19 -10 --2 --13 --25 --36 --46 --53 --61 --65 --69 --71 --72 --72 --71 --68 --69 --71 --72 --68 --61 --50 --37 --21 --6 -8 -19 -28 -32 -33 -31 -27 -19 -10 --1 --13 --24 --35 --45 --53 --61 --65 --69 --71 --73 --72 --71 --69 --70 --71 --73 --68 --62 --50 --37 --21 --7 -8 -19 -28 -32 -34 -30 -26 -19 -10 --1 --13 --25 --35 --46 --54 --61 --66 --70 --72 --73 --72 --71 --70 --70 --72 --72 --68 --61 --50 --37 --21 --6 -9 -20 -29 -33 -34 -31 -27 -20 -14 -7 -1 --4 --7 --10 --12 --15 --16 --19 --19 --22 --24 --26 --27 --30 --35 --41 --47 --53 --59 --65 --68 --72 --74 --75 --75 --74 --73 --71 --68 --69 --71 --72 --68 --62 --53 --40 --26 --12 -2 -12 -22 -27 -30 -29 -26 -19 -10 --1 --12 --25 --35 --45 --53 --60 --65 --69 --71 --73 --72 --71 --69 --71 --72 --73 --69 --62 --51 --37 --22 --7 -7 -18 -27 -31 -33 -31 -26 -19 -10 --1 --13 --25 --35 --46 --53 --61 --65 --69 --71 --72 --72 --71 --69 --69 --71 --72 --68 --61 --50 --37 --21 --6 -8 -19 -29 -32 -34 -31 -27 -20 -10 --1 --13 --25 --35 --46 --54 --61 --66 --69 --71 --72 --72 --70 --68 --70 --72 --72 --68 --62 --50 --36 --20 --5 -9 -20 -29 -32 -34 -31 -27 -19 -10 --1 --13 --25 --35 --45 --53 --61 --65 --69 --71 --72 --72 --71 --69 --69 --71 --72 --68 --61 --49 --36 --22 --6 -8 -20 -29 -32 -34 -31 -27 -19 -10 --2 --14 --25 --36 --46 --54 --61 --66 --70 --72 --73 --73 --71 --69 --70 --72 --73 --69 --62 --51 --37 --22 --6 -8 -19 -28 -32 -33 -30 -26 -19 -9 --2 --13 --25 --36 --46 --54 --61 --66 --70 --72 --73 --72 --71 --69 --70 --73 --73 --69 --62 --51 --37 --21 --6 -8 -20 -29 -33 -34 -31 -27 -20 -11 --1 --12 --24 --35 --45 --53 --61 --65 --69 --71 --73 --72 --71 --69 --70 --72 --72 --69 --62 --50 --37 --21 --6 -8 -20 -28 -33 -34 -31 -27 -19 -11 --1 --13 --25 --35 --45 --54 --61 --65 --69 --71 --73 --72 --71 --68 --66 --63 --59 --56 --54 --50 --47 --44 --42 --40 --38 --37 --36 --35 --35 --34 --38 --42 --46 --45 --42 --35 --25 --13 --1 -11 -21 -29 -33 -35 -33 -30 -22 -13 -1 --10 --22 --33 --42 --51 --58 --64 --67 --70 --71 --70 --70 --67 --68 --70 --71 --67 --61 --50 --36 --21 --6 -9 -20 -29 -33 -35 -31 -28 -20 -11 --1 --13 --24 --35 --45 --53 --61 --65 --70 --72 --73 --72 --71 --69 --70 --71 --72 --68 --62 --50 --37 --21 --6 -8 -19 -28 -32 -33 -31 -27 -19 -10 --1 --13 --24 --35 --45 --53 --60 --65 --70 --71 --72 --72 --71 --68 --69 --71 --72 --68 --61 --50 --37 --21 --6 -8 -20 -29 -32 -34 -31 -27 -19 -9 --2 --13 --24 --35 --45 --53 --61 --65 --69 --71 --73 --72 --71 --69 --69 --71 --72 --69 --62 --51 --37 --22 --6 -8 -20 -28 -32 -33 -31 -27 -19 -10 --2 --13 --25 --36 --47 --54 --61 --65 --70 --72 --73 --72 --71 --69 --69 --71 --72 --68 --61 --50 --37 --21 --6 -9 -20 -29 -33 -34 -31 -27 -19 -10 --2 --13 --25 --35 --46 --54 --61 --65 --70 --71 --73 --72 --71 --69 --69 --72 --72 --69 --62 --50 --37 --21 --6 -8 -20 -29 -32 -34 -30 -27 -19 -9 --2 --13 --25 --35 --45 --53 --60 --65 --69 --71 --72 --71 --70 --68 --69 --71 --72 --68 --62 --50 --37 --21 --6 -9 -20 -28 -32 -34 -30 -26 -19 -10 --2 --14 --26 --36 --46 --54 --61 --66 --70 --71 --73 --71 --71 --69 --69 --71 --72 --68 --61 --50 --37 --21 --6 -9 -20 -29 -33 -34 -31 -27 -21 -15 -7 -1 --4 --8 --11 --13 --15 --17 --19 --20 --23 --24 --26 --28 --31 --35 --41 --47 --54 --59 --65 --68 --72 --73 --75 --75 --75 --73 --72 --69 --70 --72 --72 --69 --63 --53 --40 --26 --12 -2 -13 -23 -28 -31 -29 -26 -19 -11 --1 --12 --24 --35 --45 --53 --61 --65 --70 --72 --73 --72 --71 --69 --70 --72 --73 --69 --62 --50 --37 --22 --7 -8 -19 -28 -32 -34 -31 -28 -20 -11 --1 --12 --25 --35 --45 --53 --61 --65 --70 --72 --73 --72 --72 --69 --70 --72 --73 --69 --62 --50 --37 --21 --6 -8 -20 -28 -32 -34 -30 -27 -19 -9 --2 --13 --25 --36 --46 --54 --61 --66 --70 --71 --73 --72 --71 --69 --70 --72 --73 --69 --62 --50 --37 --21 --6 -8 -19 -28 -32 -33 -31 -27 -18 -9 --2 --13 --25 --35 --46 --54 --61 --65 --69 --71 --72 --71 --70 --68 --69 --71 --71 --68 --61 --50 --36 --21 --6 -9 -20 -29 -33 -34 -31 -27 -19 -10 --2 --12 --24 --35 --45 --53 --60 --65 --69 --71 --72 --72 --70 --68 --68 --71 --72 --68 --61 --49 --37 --20 --6 -8 -20 -29 -32 -33 -30 -27 -19 -10 --2 --13 --25 --36 --46 --54 --62 --67 --71 --72 --73 --72 --71 --69 --70 --71 --72 --68 --62 --50 --37 --21 --6 -9 -20 -28 -32 -34 -31 -27 -19 -10 --1 --13 --25 --35 --45 --54 --61 --65 --69 --71 --72 --71 --70 --68 --69 --71 --72 --68 --61 --49 --36 --21 --6 -9 -20 -28 -32 -33 -31 -26 -19 -10 --2 --13 --25 --36 --46 --54 --61 --66 --70 --72 --73 --73 --72 --69 --70 --73 --73 --69 --62 --50 --37 --21 --6 -9 -20 -29 -33 -34 -31 -27 -19 -10 --2 --13 --25 --35 --46 --54 --61 --66 --70 --71 --73 --72 --71 --69 --70 --72 --73 --69 --62 --51 --37 --21 --6 -9 -20 -29 -33 -34 -31 -27 -19 -10 --2 --13 --25 --37 --46 --54 --61 --65 --69 --71 --73 --71 --71 --69 --66 --63 --60 --57 --54 --50 --47 --44 --42 --40 --39 --37 --36 --35 --34 --34 --37 --41 --46 --45 --42 --34 --25 --13 --1 -11 -21 -29 -33 -35 -33 -30 -22 -13 -2 --10 --21 --32 --42 --50 --58 --63 --67 --69 --70 --70 --69 --67 --68 --70 --71 --67 --61 --49 --36 --20 --5 -9 -20 -29 -33 -34 -31 -28 -20 -11 --1 --12 --25 --35 --45 --53 --61 --65 --69 --71 --72 --72 --71 --69 --70 --72 --72 --69 --62 --51 --37 --22 --6 -8 -19 -28 -32 -34 -31 -27 -20 -15 -7 -1 --4 --8 --11 --14 --16 --17 --19 --20 --23 --24 --26 --28 --31 --36 --43 --49 --55 --60 --66 --69 --72 --74 --75 --76 --75 --73 --72 --69 --69 --71 --71 --68 --62 --52 --39 --25 --11 -3 -15 -24 -29 -32 -30 -27 -20 -11 -0 --11 --23 --34 --44 --52 --59 --65 --69 --71 --73 --72 --72 --69 --67 --64 --61 --57 --54 --50 --48 --45 --43 --41 --39 --37 --36 --35 --34 --34 --37 --41 --45 --45 --41 --34 --25 --13 --1 -11 -22 -29 -33 -35 -33 -29 -22 -13 -1 --10 --22 --32 --43 --50 --57 --62 --67 --69 --70 --70 --69 --67 --68 --70 --71 --68 --62 --50 --37 --22 --7 -8 -19 -28 -32 -34 -31 -27 -20 -11 --1 --12 --24 --35 --45 --53 --60 --66 --70 --72 --73 --73 --71 --70 --70 --72 --72 --69 --61 --50 --37 --21 --6 -9 -20 -29 -33 -35 -31 -28 -20 -15 -7 -2 --4 --8 --11 --13 --15 --17 --19 --20 --23 --24 --26 --27 --31 --36 --42 --48 --55 --60 --65 --69 --72 --73 --75 --75 --74 --72 --71 --68 --65 --62 --60 --57 --53 --50 --48 --46 --44 --41 --40 --38 --38 --36 --36 --36 --39 --43 --47 --47 --43 --36 --27 --16 --4 -8 -17 -26 -30 -33 -33 -31 -25 -20 -13 -7 -1 --3 --7 --10 --12 --15 --16 --18 --20 --21 --23 --25 --28 --33 --39 --45 --52 --58 --64 --67 --71 --73 --75 --75 --75 --73 --71 --68 --66 --63 --61 --57 --55 --51 --49 --46 --45 --42 --41 --40 --40 --38 --37 --36 --40 --44 --47 --47 --43 --36 --27 --16 --5 -7 -17 -26 -30 -33 -33 -30 -25 -20 -13 -8 -2 --3 --7 --11 --13 --15 --17 --19 --21 --22 --24 --25 --29 --33 --40 --46 --53 --58 --65 --68 --72 --73 --75 --75 --74 --72 --70 --68 --65 --62 --60 --56 --53 --50 --48 --45 --43 --41 --40 --38 --37 --37 --36 --35 --39 --43 --47 --46 --43 --36 --27 --16 --4 -8 -17 -27 -31 -34 -33 -31 -26 -20 -14 -8 -1 --2 --7 --9 --13 --14 --16 --18 --21 --22 --24 --25 --29 --33 --40 --46 --53 --58 --64 --68 --72 --73 --75 --75 --74 --73 --71 --69 --69 --71 --72 --68 --62 --52 --40 --26 --12 -1 -13 -23 -28 -31 -30 -27 -20 -11 --1 --12 --24 --35 --45 --53 --61 --65 --70 --72 --73 --72 --72 --69 --67 --64 --61 --58 --55 --51 --49 --45 --43 --40 --39 --37 --36 --35 --35 --34 --37 --41 --45 --45 --42 --35 --25 --13 --1 -11 -21 -29 -33 -35 -33 -30 -22 -13 -2 --9 --21 --32 --42 --49 --58 --62 --66 --69 --70 --70 --69 --67 --68 --70 --71 --67 --60 --49 --36 --21 --5 -9 -21 -29 -33 -35 -32 -29 -22 -16 -8 -3 --3 --6 --10 --12 --14 --15 --17 --19 --21 --23 --25 --27 --31 --35 --42 --47 --54 --59 --65 --69 --72 --74 --75 --75 --75 --73 --72 --69 --69 --71 --72 --69 --63 --53 --42 --26 --12 -2 -13 -23 -28 -30 -29 -26 -19 -10 --1 --12 --24 --35 --45 --53 --60 --66 --70 --72 --73 --73 --72 --69 --67 --64 --61 --58 --55 --51 --48 --46 --43 --40 --39 --37 --36 --35 --34 --34 --37 --41 --45 --44 --41 --34 --25 --13 --1 -11 -21 -29 -33 -36 -33 -30 -23 -18 -11 -5 -0 --4 --8 --10 --13 --14 --16 --17 --19 --21 --23 --25 --28 --33 --40 --46 --53 --58 --65 --68 --72 --74 --75 --75 --74 --73 --71 --68 --66 --62 --60 --56 --53 --51 --48 --46 --44 --42 --41 --39 --39 --37 --37 --36 --39 --44 --47 --47 --44 --36 --28 --16 --5 -7 -18 -26 -31 -34 -33 -31 -24 -15 -4 --8 --20 --30 --41 --49 --57 --62 --67 --69 --70 --70 --70 --68 --69 --71 --72 --68 --62 --51 --37 --22 --7 -8 -19 -29 -33 -35 -32 -29 -22 -16 -9 -3 --3 --6 --9 --12 --14 --16 --18 --19 --21 --23 --25 --26 --29 --34 --40 --47 --53 --59 --65 --68 --72 --74 --75 --75 --75 --74 --71 --68 --66 --63 --60 --57 --54 --51 --48 --46 --44 --42 --40 --38 --38 --37 --37 --36 --39 --44 --47 --47 --44 --37 --28 --16 --5 -7 -17 -26 -31 -34 -33 -30 -23 -15 -3 --8 --20 --31 --41 --49 --56 --62 --66 --69 --70 --70 --69 --68 --69 --71 --71 --68 --61 --50 --37 --21 --7 -7 -19 -28 -33 -35 -32 -28 -21 -15 -8 -3 --3 --6 --10 --13 --15 --16 --19 --20 --22 --23 --26 --27 --30 --35 --41 --47 --54 --59 --65 --69 --72 --74 --75 --75 --74 --73 --71 --68 --69 --71 --72 --68 --62 --52 --40 --26 --11 -3 -15 -24 -29 -31 -30 -27 -19 -11 --1 --12 --24 --35 --45 --53 --61 --66 --70 --73 --74 --73 --72 --70 --71 --73 --73 --69 --62 --51 --37 --21 --7 -8 -19 -28 -32 -34 -31 -26 -19 -10 --2 --14 --25 --36 --46 --54 --61 --66 --70 --72 --73 --72 --71 --68 --66 --63 --60 --56 --53 --50 --47 --44 --42 --40 --39 --37 --36 --35 --35 --33 --37 --41 --45 --45 --41 --34 --24 --12 -0 -13 -22 -31 -35 -35 -34 -30 -24 -18 -11 -5 --1 --5 --9 --11 --13 --14 --16 --18 --20 --21 --23 --25 --29 --33 --39 --46 --52 --58 --63 --67 --71 --73 --75 --75 --75 --73 --72 --69 --70 --71 --72 --69 --63 --52 --41 --26 --12 -2 -14 -23 -29 -32 -30 -28 -21 -12 -0 --12 --24 --35 --45 --53 --60 --65 --70 --72 --73 --73 --72 --70 --67 --64 --61 --58 --54 --51 --48 --45 --43 --41 --39 --37 --36 --35 --35 --34 --37 --42 --45 --45 --42 --35 --25 --13 --1 -11 -21 -29 -33 -35 -33 -30 -23 -14 -2 --9 --21 --32 --42 --50 --58 --63 --67 --70 --71 --70 --69 --67 --68 --70 --71 --67 --60 --49 --36 --21 --6 -9 -20 -29 -33 -35 -33 -28 -21 -11 --1 --12 --24 --35 --45 --53 --61 --66 --70 --71 --72 --72 --72 --69 --70 --72 --73 --69 --62 --50 --37 --21 --5 -9 -20 -29 -33 -34 -31 -27 -20 -14 -7 -1 --4 --7 --11 --13 --15 --16 --18 --20 --22 --24 --26 --27 --30 --35 --41 --47 --54 --60 --65 --69 --72 --74 --75 --75 --75 --73 --71 --68 --70 --71 --72 --68 --63 --52 --40 --25 --12 -3 -14 -23 -29 -31 -30 -27 -19 -10 --1 --13 --25 --35 --45 --54 --61 --66 --69 --72 --73 --72 --71 --69 --70 --72 --73 --70 --62 --51 --37 --22 --7 -8 -19 -28 -32 -34 -31 -27 -19 -10 --2 --13 --25 --35 --46 --54 --61 --65 --70 --72 --73 --73 --72 --69 --67 --64 --61 --57 --53 --50 --48 --45 --42 --40 --39 --37 --36 --35 --34 --33 --36 --41 --45 --44 --41 --34 --24 --12 -0 -12 -22 -30 -34 -36 -33 -30 -23 -18 -11 -5 --1 --5 --9 --11 --13 --15 --17 --18 --20 --21 --23 --25 --29 --33 --40 --46 --53 --58 --64 --68 --71 --73 --74 --75 --75 --73 --71 --69 --66 --63 --60 --57 --54 --51 --49 --47 --44 --42 --41 --39 --39 --37 --37 --36 --39 --44 --47 --46 --43 --36 --28 --16 --5 -7 -17 -26 -31 -34 -33 -31 -24 -16 -4 --7 --19 --30 --41 --49 --57 --63 --67 --69 --70 --70 --70 --68 --69 --71 --72 --68 --62 --51 --37 --21 --7 -8 -19 -29 -33 -35 -33 -29 -22 -16 -8 -3 --3 --7 --10 --12 --14 --15 --18 --19 --21 --23 --25 --27 --30 --35 --41 --47 --54 --59 --65 --69 --72 --74 --75 --76 --75 --73 --72 --69 --70 --71 --72 --69 --62 --52 --40 --26 --12 -2 -13 -23 -28 -31 -29 -26 -19 -10 --1 --12 --24 --35 --45 --53 --61 --66 --70 --72 --73 --72 --71 --69 --66 --63 --61 --57 --54 --51 --48 --45 --43 --41 --39 --37 --36 --35 --35 --34 --37 --42 --45 --45 --42 --35 --25 --12 --1 -12 -22 -30 -34 -36 -34 -30 -23 -14 -2 --9 --21 --32 --42 --51 --58 --63 --67 --70 --72 --71 --70 --68 --69 --72 --72 --68 --61 --49 --36 --21 --5 -9 -20 -29 -33 -35 -32 -28 -21 -15 -7 -2 --4 --7 --11 --13 --15 --16 --18 --19 --22 --23 --25 --27 --30 --35 --41 --47 --54 --59 --65 --69 --72 --74 --75 --75 --74 --73 --71 --68 --66 --63 --60 --56 --54 --50 --48 --45 --43 --41 --40 --38 --38 --37 --37 --36 --39 --44 --47 --47 --43 --36 --27 --15 --5 -8 -18 -27 -31 -34 -33 -31 -24 -15 -4 --7 --20 --31 --41 --49 --57 --62 --67 --70 --71 --70 --70 --68 --69 --71 --72 --69 --62 --51 --37 --22 --7 -8 -19 -29 -33 -35 -33 -28 -22 -16 -8 -3 --3 --6 --11 --12 --14 --16 --18 --20 --22 --23 --27 --27 --30 --35 --41 --48 --54 --60 --65 --69 --72 --74 --76 --76 --75 --74 --72 --69 --67 --64 --61 --57 --55 --51 --49 --46 --45 --43 --41 --39 --39 --37 --37 --36 --39 --43 --47 --46 --43 --36 --27 --16 --4 -8 -18 -27 -31 -35 -34 -31 -26 -21 -14 -9 -2 --2 --7 --9 --13 --14 --16 --18 --20 --21 --23 --25 --29 --33 --40 --46 --53 --59 --64 --69 --72 --74 --75 --75 --75 --73 --71 --69 --66 --63 --60 --57 --54 --51 --49 --46 --44 --42 --41 --40 --39 --37 --37 --36 --40 --44 --47 --47 --44 --37 --28 --16 --5 -7 -17 -26 -31 -35 -33 -31 -26 -21 -14 -8 -2 --3 --7 --10 --13 --15 --17 --19 --20 --22 --23 --25 --29 --33 --39 --45 --52 --58 --64 --68 --72 --73 --75 --74 --75 --72 --71 --68 --69 --71 --72 --68 --63 --52 --41 --26 --12 -2 -14 -23 -29 -32 -31 -27 -20 -12 -1 --11 --23 --34 --44 --53 --60 --65 --69 --72 --73 --72 --72 --69 --70 --72 --73 --69 --62 --50 --37 --21 --6 -9 -20 -29 -33 -35 -32 -28 -20 -11 --1 --12 --25 --35 --46 --54 --61 --67 --71 --72 --74 --72 --72 --69 --70 --72 --73 --70 --62 --51 --38 --22 --6 -8 -20 -29 -33 -34 -31 -27 -19 -10 --2 --13 --25 --36 --46 --53 --61 --66 --70 --72 --73 --73 --72 --69 --71 --72 --73 --69 --62 --51 --37 --21 --7 -9 -20 -29 -33 -35 -32 -27 -20 -11 --1 --13 --25 --35 --46 --54 --61 --67 --70 --73 --74 --73 --72 --69 --70 --72 --73 --70 --62 --50 --36 --20 --5 -10 -21 -30 -34 -35 -32 -28 -20 -10 --2 --13 --25 --36 --47 --54 --62 --66 --70 --72 --73 --72 --71 --69 --70 --72 --73 --69 --62 --51 --37 --20 --5 -9 -21 -29 -33 -35 -32 -28 -20 -10 --1 --13 --25 --36 --46 --54 --61 --66 --70 --72 --74 --73 --72 --69 --71 --72 --73 --69 --63 --51 --37 --21 --7 -9 -20 -29 -33 -35 -32 -27 -20 -11 --1 --13 --25 --36 --46 --54 --61 --66 --69 --71 --72 --72 --71 --69 --70 --72 --73 --69 --62 --51 --37 --21 --5 -9 -21 -30 -33 -35 -31 -27 -19 -10 --2 --13 --26 --36 --48 --55 --63 --67 --71 --73 --74 --73 --73 --70 --67 --64 --61 --57 --54 --50 --47 --44 --42 --39 --38 --36 --35 --34 --34 --33 --36 --41 --45 --44 --41 --34 --24 --12 -0 -13 -22 -30 -34 -37 -35 -31 -23 -14 -2 --9 --22 --32 --42 --51 --59 --64 --68 --70 --71 --70 --70 --68 --69 --71 --72 --68 --61 --50 --37 --20 --5 -10 -21 -30 -34 -36 -33 -29 -21 -12 --1 --12 --24 --35 --46 --54 --61 --66 --70 --72 --73 --73 --72 --70 --71 --73 --73 --69 --62 --50 --37 --21 --6 -9 -20 -29 -33 -34 -31 -28 -20 -11 --2 --13 --25 --36 --46 --54 --61 --67 --71 --73 --73 --73 --72 --70 --71 --73 --73 --69 --62 --51 --36 --20 --5 -9 -21 -30 -33 -35 -32 -28 -20 -11 --1 --12 --25 --35 --45 --54 --61 --66 --70 --72 --73 --72 --71 --69 --71 --72 --73 --70 --63 --51 --37 --21 --6 -10 -21 -30 -33 -35 -32 -27 -20 -10 --2 --13 --26 --36 --47 --55 --62 --67 --71 --73 --74 --73 --73 --70 --71 --73 --73 --69 --62 --50 --37 --21 --6 -9 -20 -30 -34 -35 -32 -29 -20 -11 --1 --12 --25 --36 --46 --54 --61 --67 --70 --72 --73 --72 --71 --69 --70 --72 --73 --69 --62 --51 --37 --21 --5 -10 -21 -30 -34 -35 -32 -27 -20 -11 --1 --13 --25 --36 --46 --54 --62 --66 --70 --72 --74 --73 --72 --70 --71 --72 --73 --69 --62 --51 --37 --22 --6 -9 -20 -29 -33 -35 -32 -27 -21 -15 -7 -2 --4 --7 --11 --12 --15 --16 --18 --20 --21 --23 --25 --27 --30 --35 --41 --47 --53 --59 --65 --68 --72 --74 --76 --75 --75 --73 --71 --68 --66 --63 --60 --56 --54 --51 --49 --46 --44 --43 --41 --39 --39 --38 --37 --37 --40 --44 --48 --47 --44 --36 --27 --16 --4 -8 -18 -27 -31 -35 -33 -31 -23 -15 -4 --7 --20 --31 --41 --50 --58 --63 --67 --70 --71 --71 --70 --68 --69 --71 --72 --68 --61 --50 --36 --21 --5 -9 -20 -30 -33 -36 -33 -29 -23 -17 -9 -3 --2 --6 --10 --12 --14 --16 --18 --20 --22 --23 --25 --27 --31 --35 --42 --48 --55 --61 --66 --70 --73 --75 --76 --76 --76 --73 --72 --69 --70 --72 --72 --69 --63 --53 --40 --25 --11 -3 -15 -24 -29 -31 -30 -26 -19 -11 --1 --12 --24 --35 --45 --53 --61 --66 --70 --72 --73 --73 --72 --70 --68 --65 --62 --58 --55 --51 --49 --45 --43 --41 --39 --37 --37 --35 --35 --34 --37 --41 --45 --45 --41 --34 --24 --12 -0 -12 -22 -30 -35 -37 -35 -31 -23 -14 -2 --10 --22 --32 --43 --51 --59 --64 --68 --70 --71 --71 --70 --68 --69 --70 --72 --67 --61 --49 --35 --19 --4 -9 -21 -31 -35 -37 -33 -29 -21 -12 --1 --12 --24 --35 --45 --53 --61 --66 --71 --73 --74 --73 --72 --70 --71 --72 --73 --69 --62 --51 --37 --21 --6 -9 -21 -30 -33 -35 -32 -28 -20 -11 --1 --13 --25 --36 --47 --54 --62 --67 --71 --73 --74 --73 --72 --70 --71 --73 --73 --69 --63 --51 --37 --21 --5 -9 -21 -30 -34 -36 -33 -29 -21 -11 -0 --13 --24 --35 --45 --54 --61 --66 --71 --73 --74 --73 --72 --70 --71 --72 --73 --69 --62 --50 --37 --21 --5 -10 -21 -30 -33 -35 -31 -28 -21 -15 -8 -2 --3 --7 --10 --12 --15 --16 --18 --19 --21 --23 --25 --26 --30 --35 --40 --47 --53 --59 --65 --69 --72 --74 --75 --75 --75 --74 --72 --69 --70 --72 --72 --69 --63 --53 --40 --26 --11 -3 -15 -25 -29 -32 -30 -27 -20 -11 --1 --12 --24 --35 --45 --53 --61 --67 --71 --73 --75 --74 --73 --71 --72 --74 --74 --71 --63 --52 --38 --22 --6 -9 -20 -29 -34 -35 -33 -29 -21 -11 --1 --12 --25 --35 --46 --54 --62 --66 --71 --72 --74 --73 --72 --69 --70 --72 --74 --69 --62 --50 --37 --21 --5 -9 -21 -30 -34 -35 -32 -28 -20 -10 --1 --13 --25 --35 --46 --54 --61 --66 --70 --72 --73 --73 --72 --69 --67 --64 --61 --57 --54 --50 --47 --44 --43 --40 --39 --37 --36 --35 --34 --33 --37 --41 --45 --45 --42 --34 --25 --12 -0 -12 -22 -30 -34 -36 -34 -30 -24 -18 -11 -5 --1 --5 --9 --11 --13 --15 --17 --18 --20 --21 --24 --25 --28 --33 --40 --46 --53 --58 --65 --69 --72 --74 --76 --76 --75 --73 --72 --69 --70 --71 --73 --70 --63 --53 --41 --26 --12 -3 -14 -24 -29 -32 -30 -27 -21 -11 -0 --11 --23 --34 --44 --53 --60 --66 --70 --72 --74 --73 --72 --70 --67 --64 --61 --58 --55 --51 --49 --46 --43 --41 --39 --37 --36 --34 --34 --33 --37 --41 --45 --45 --42 --34 --25 --12 --1 -12 -22 -30 -35 -36 -35 -31 -25 -19 -11 -5 -0 --4 --8 --11 --13 --14 --16 --17 --19 --21 --23 --24 --28 --33 --39 --46 --52 --58 --65 --68 --72 --74 --75 --75 --74 --73 --71 --68 --66 --63 --59 --56 --53 --50 --48 --46 --43 --42 --41 --39 --38 --37 --37 --36 --40 --44 --47 --47 --44 --37 --28 --16 --5 -8 -18 -27 -32 -35 -34 -31 -25 -16 -5 --7 --19 --30 --41 --49 --57 --63 --67 --69 --71 --70 --70 --68 --69 --71 --72 --69 --62 --50 --37 --21 --7 -9 -20 -29 -33 -35 -33 -28 -21 -12 -0 --12 --24 --35 --45 --54 --61 --66 --70 --72 --73 --73 --71 --69 --71 --72 --73 --69 --62 --51 --37 --21 --6 -9 -20 -29 -33 -35 -32 -27 -20 -11 --1 --13 --25 --35 --46 --54 --61 --67 --71 --72 --73 --73 --72 --69 --70 --72 --73 --69 --62 --50 --36 --20 --5 -10 -21 -30 -34 -36 -33 -28 -20 -11 --1 --13 --25 --35 --46 --54 --62 --67 --70 --73 --74 --73 --72 --70 --71 --73 --74 --70 --63 --51 --37 --21 --6 -9 -21 -30 -33 -35 -32 -28 -20 -11 --1 --13 --25 --36 --47 --55 --62 --67 --72 --74 --75 --73 --72 --70 --71 --72 --73 --69 --62 --50 --37 --21 --5 -9 -21 -30 -34 -36 -32 -28 -20 -11 --1 --13 --25 --36 --46 --54 --61 --67 --71 --72 --73 --73 --72 --70 --71 --72 --73 --69 --63 --50 --37 --21 --6 -10 -21 -30 -33 -35 -32 -28 -20 -11 --1 --13 --25 --35 --46 --54 --62 --66 --71 --73 --73 --73 --71 --69 --71 --72 --73 --69 --62 --50 --36 --21 --5 -10 -21 -30 -34 -36 -32 -28 -20 -11 --1 --12 --25 --35 --46 --54 --61 --66 --71 --72 --73 --73 --72 --70 --71 --72 --73 --69 --62 --51 --37 --21 --5 -9 -21 -30 -35 -36 -33 -29 -22 -15 -8 -2 --3 --7 --11 --13 --15 --17 --18 --20 --22 --24 --26 --27 --31 --35 --42 --48 --54 --60 --65 --70 --73 --75 --76 --76 --76 --74 --72 --69 --71 --72 --73 --69 --63 --53 --41 --26 --12 -3 -15 -24 -29 -32 -31 -28 -20 -11 --1 --12 --24 --35 --45 --54 --61 --67 --71 --73 --74 --73 --72 --70 --71 --73 --73 --70 --63 --51 --37 --22 --6 -9 -20 -29 -34 -36 -32 -28 -21 -11 --1 --12 --25 --36 --45 --54 --61 --66 --70 --72 --73 --73 --72 --69 --71 --72 --73 --69 --63 --50 --37 --20 --5 -9 -21 -30 -34 -35 -32 -28 -20 -11 --2 --13 --25 --36 --47 --55 --63 --67 --71 --73 --74 --73 --72 --70 --71 --73 --73 --70 --62 --50 --37 --21 --5 -10 -21 -30 -34 -36 -32 -28 -20 -11 --1 --13 --25 --35 --46 --54 --61 --66 --70 --73 --74 --73 --72 --70 --71 --72 --73 --70 --62 --51 --37 --21 --5 -9 -21 -30 -34 -35 -33 -29 -21 -12 --1 --12 --25 --36 --46 --54 --62 --67 --71 --73 --74 --73 --72 --69 --70 --71 --73 --69 --62 --50 --36 --20 --5 -10 -21 -30 -33 -35 -32 -28 -20 -10 --2 --13 --26 --36 --47 --54 --62 --67 --71 --73 --74 --73 --72 --69 --71 --72 --73 --70 --62 --51 --37 --21 --5 -10 -21 -29 -34 -35 -32 -27 -20 -10 --2 --13 --26 --36 --46 --54 --61 --66 --71 --73 --73 --73 --72 --70 --71 --72 --73 --69 --62 --51 --37 --21 --5 -9 -21 -31 -34 -36 -32 -28 -21 -11 --1 --12 --24 --35 --46 --54 --61 --67 --71 --73 --74 --73 --72 --69 --67 --64 --61 --57 --54 --50 --48 --45 --43 --40 --39 --36 --36 --35 --34 --34 --37 --42 --46 --46 --43 --35 --25 --12 --1 -12 -22 -30 -35 -37 -35 -31 -23 -14 -3 --9 --21 --32 --42 --51 --58 --64 --68 --70 --71 --71 --70 --68 --69 --71 --72 --69 --61 --50 --37 --21 --5 -9 -21 -30 -35 -36 -33 -29 -21 -12 --1 --12 --24 --35 --46 --54 --61 --66 --71 --72 --73 --73 --72 --69 --70 --73 --73 --69 --62 --50 --37 --20 --5 -10 -21 -30 -35 -36 -33 -29 -20 -11 --1 --12 --25 --36 --47 --55 --62 --67 --71 --72 --74 --73 --72 --70 --71 --73 --73 --69 --63 --51 --37 --20 --5 -10 -21 -30 -34 -35 -33 -28 -20 -11 --1 --13 --25 --35 --46 --54 --61 --67 --71 --72 --74 --73 --72 --70 --71 --73 --73 --70 --63 --51 --37 --21 --6 -9 -20 -30 -34 -35 -31 -28 -21 -11 --1 --12 --24 --35 --46 --54 --62 --67 --71 --73 --74 --73 --72 --69 --71 --73 --73 --69 --62 --51 --37 --20 --5 -10 -22 -31 -35 -36 -33 -29 -21 -11 --1 --12 --25 --36 --46 --54 --62 --67 --71 --73 --74 --73 --72 --70 --71 --72 --73 --69 --62 --50 --36 --20 --5 -10 -21 -30 -33 -35 -32 -27 -20 -11 --1 --13 --25 --36 --46 --55 --62 --67 --71 --73 --74 --73 --72 --70 --71 --72 --73 --70 --62 --51 --37 --21 --5 -10 -21 -30 -34 -36 -32 -28 -20 -11 --1 --12 --25 --35 --46 --53 --61 --66 --70 --72 --73 --73 --72 --69 --71 --73 --73 --69 --62 --51 --37 --21 --6 -9 -20 -29 -34 -35 -33 -28 -22 -15 -8 -3 --3 --7 --10 --13 --15 --16 --19 --20 --22 --23 --26 --27 --31 --35 --41 --48 --55 --60 --66 --70 --74 --75 --76 --76 --76 --74 --72 --69 --71 --72 --73 --70 --63 --53 --41 --26 --12 -3 -15 -24 -30 -32 -31 -28 -21 -12 --1 --11 --24 --35 --45 --53 --61 --66 --71 --73 --74 --73 --73 --70 --72 --74 --74 --70 --63 --51 --38 --21 --6 -9 -21 -30 -34 -35 -33 -29 -20 -11 --1 --12 --24 --36 --46 --54 --61 --66 --71 --72 --74 --73 --72 --70 --71 --73 --73 --69 --62 --51 --37 --21 --5 -10 -21 -30 -35 -36 -33 -29 -21 -12 --1 --12 --25 --36 --46 --55 --63 --67 --70 --72 --74 --73 --72 --70 --71 --73 --74 --70 --62 --50 --37 --20 --5 -10 -22 -30 -35 -36 -32 -28 -20 -11 --1 --13 --25 --36 --46 --55 --62 --67 --71 --73 --74 --73 --73 --70 --72 --73 --74 --70 --63 --51 --37 --21 --5 -9 -21 -30 -34 -35 -33 -28 -20 -11 --1 --12 --25 --36 --47 --55 --62 --68 --71 --73 --74 --74 --73 --70 --71 --72 --73 --70 --62 --51 --37 --20 --5 -10 -22 -31 -35 -35 -32 -28 -20 -11 --1 --12 --25 --36 --46 --55 --62 --67 --71 --73 --75 --74 --73 --70 --71 --73 --73 --70 --62 --50 --36 --20 --5 -10 -21 -30 -35 -36 -33 -29 -21 -12 --1 --12 --24 --36 --46 --54 --61 --66 --70 --72 --73 --72 --72 --69 --70 --72 --73 --69 --62 --51 --37 --20 --5 -10 -21 -31 -35 -36 -33 -29 -21 -11 --1 --13 --25 --36 --46 --54 --62 --66 --70 --72 --74 --73 --72 --69 --71 --73 --73 --70 --63 --51 --37 --21 --5 -10 -21 -30 -34 -36 -33 -29 -21 -11 --1 --12 --24 --35 --46 --55 --62 --67 --71 --73 --75 --74 --73 --70 --72 --73 --74 --70 --63 --51 --37 --21 --5 -9 -21 -30 -34 -36 -33 -29 -21 -11 --1 --13 --25 --35 --47 --55 --62 --67 --72 --73 --74 --73 --72 --70 --68 --64 --61 --57 --54 --51 --48 --45 --43 --40 --39 --36 --36 --35 --34 --34 --37 --42 --46 --46 --42 --34 --24 --12 -1 -14 -24 -32 -36 -38 -36 -32 -24 -15 -3 --8 --21 --32 --42 --50 --58 --63 --67 --70 --72 --71 --70 --68 --69 --71 --71 --68 --61 --49 --36 --20 --5 -10 -21 -30 -35 -36 -33 -29 -21 -12 --1 --13 --25 --36 --46 --55 --62 --67 --71 --73 --74 --73 --72 --70 --71 --73 --74 --70 --63 --51 --38 --21 --5 -9 -21 -30 -34 -35 -32 -28 -21 -15 -8 -2 --3 --7 --10 --12 --14 --16 --18 --19 --22 --24 --26 --27 --31 --36 --42 --48 --55 --61 --66 --70 --74 --75 --76 --76 --76 --74 --72 --69 --70 --71 --72 --68 --63 --52 --40 --25 --11 -4 -16 -25 -30 -33 -32 -28 -21 -12 -0 --11 --24 --35 --45 --53 --61 --66 --71 --73 --74 --73 --73 --70 --68 --64 --61 --58 --54 --51 --48 --45 --42 --40 --39 --37 --36 --35 --35 --34 --37 --42 --46 --46 --42 --35 --25 --12 -0 -13 -22 -31 -35 -37 -35 -31 -23 -14 -2 --9 --22 --33 --43 --52 --59 --65 --69 --71 --72 --72 --71 --69 --69 --72 --72 --69 --62 --50 --37 --21 --6 -9 -21 -30 -34 -36 -34 -30 -21 -12 -0 --12 --25 --35 --46 --54 --61 --66 --70 --72 --73 --72 --71 --69 --70 --72 --73 --69 --62 --50 --36 --20 --5 -11 -22 -31 -35 -36 -33 -29 -23 -16 -9 -3 --3 --6 --10 --12 --14 --16 --18 --19 --22 --23 --26 --27 --30 --35 --42 --48 --54 --60 --66 --69 --73 --75 --77 --76 --76 --74 --73 --70 --67 --64 --61 --58 --55 --52 --50 --47 --45 --43 --41 --40 --39 --37 --37 --36 --40 --44 --48 --47 --44 --36 --27 --16 --4 -9 -19 -28 -33 -36 -35 -32 -27 -21 -14 -8 -1 --3 --7 --10 --12 --14 --16 --18 --20 --21 --23 --24 --28 --33 --39 --46 --52 --58 --64 --68 --72 --73 --76 --76 --75 --74 --72 --69 --67 --63 --60 --57 --54 --51 --49 --46 --44 --42 --41 --40 --39 --38 --38 --37 --40 --44 --48 --47 --44 --37 --28 --17 --5 -7 -18 -27 -32 -36 -35 -32 -27 -21 -15 -9 -2 --2 --7 --9 --12 --15 --17 --17 --20 --21 --23 --25 --29 --33 --40 --46 --53 --59 --64 --69 --72 --74 --76 --76 --76 --74 --72 --70 --67 --64 --61 --58 --55 --52 --49 --47 --45 --42 --41 --39 --38 --37 --37 --36 --39 --43 --47 --46 --43 --35 --27 --15 --3 -9 -19 -28 -33 -37 -35 -33 -27 -22 -15 -9 -3 --2 --7 --9 --12 --14 --16 --17 --19 --21 --23 --24 --28 --33 --40 --46 --53 --60 --65 --69 --73 --75 --76 --76 --76 --74 --72 --70 --71 --73 --73 --70 --64 --53 --41 --26 --11 -3 -15 -25 -30 -33 -31 -29 -21 -12 -0 --11 --23 --34 --45 --53 --61 --66 --70 --73 --74 --73 --72 --70 --68 --65 --61 --58 --54 --51 --49 --46 --43 --41 --39 --38 --37 --35 --35 --34 --37 --42 --46 --45 --42 --34 --25 --13 -0 -13 -23 -31 -35 -38 -35 -31 -24 -15 -2 --9 --22 --32 --43 --51 --59 --64 --68 --70 --71 --71 --70 --68 --69 --71 --72 --68 --61 --50 --36 --20 --4 -10 -21 -30 -34 -35 -33 -29 -22 -15 -8 -3 --2 --6 --10 --12 --14 --16 --18 --19 --22 --23 --25 --26 --31 --35 --41 --47 --54 --60 --66 --70 --73 --75 --76 --76 --76 --73 --72 --69 --70 --71 --72 --69 --62 --52 --40 --25 --10 -4 -16 -26 -31 -33 -32 -29 -21 -12 -0 --11 --24 --34 --45 --54 --61 --67 --71 --73 --74 --73 --73 --71 --68 --65 --62 --60 --56 --52 --49 --46 --44 --41 --40 --38 --37 --36 --35 --34 --38 --43 --46 --45 --42 --35 --25 --12 -0 -13 -23 -31 -36 -37 -35 -32 -25 -19 -12 -6 -0 --4 --8 --11 --13 --14 --16 --17 --20 --21 --22 --25 --29 --33 --40 --46 --54 --59 --65 --69 --72 --74 --76 --76 --76 --74 --73 --70 --67 --64 --61 --57 --54 --51 --49 --46 --44 --42 --41 --39 --38 --37 --37 --37 --40 --45 --48 --48 --44 --37 --28 --16 --4 -9 -19 -28 -33 -36 -35 -33 -26 -17 -5 --6 --18 --29 --40 --49 --57 --62 --67 --70 --71 --71 --70 --68 --69 --72 --72 --69 --62 --50 --37 --21 --6 -9 -21 -30 -35 -37 -34 -30 -22 -16 -10 -4 --2 --6 --9 --12 --15 --16 --18 --19 --22 --23 --25 --28 --31 --35 --42 --48 --55 --60 --66 --69 --73 --75 --76 --76 --76 --75 --73 --70 --68 --64 --62 --58 --55 --52 --49 --47 --45 --42 --41 --39 --38 --37 --36 --36 --39 --44 --47 --47 --44 --36 --28 --16 --4 -9 -19 -28 -33 -35 -34 -32 -25 -16 -4 --7 --19 --31 --41 --50 --57 --63 --67 --69 --71 --71 --70 --68 --70 --72 --73 --69 --62 --51 --37 --21 --6 -9 -21 -30 -35 -37 -35 -30 -24 -17 -9 -4 --2 --6 --9 --12 --14 --16 --18 --19 --22 --23 --25 --27 --31 --35 --41 --48 --55 --60 --66 --69 --74 --75 --77 --77 --76 --75 --72 --69 --70 --72 --73 --69 --63 --52 --40 --26 --11 -4 -15 -25 -30 -33 -31 -29 -22 -13 -1 --11 --23 --34 --45 --54 --61 --66 --71 --73 --75 --74 --73 --71 --72 --74 --75 --71 --64 --52 --38 --22 --6 -8 -20 -30 -34 -36 -33 -29 -21 -11 --1 --12 --25 --36 --46 --54 --62 --67 --71 --73 --74 --73 --72 --70 --68 --64 --61 --57 --54 --50 --48 --45 --43 --40 --39 --37 --37 --35 --35 --34 --37 --42 --46 --46 --42 --35 --25 --12 -0 -14 -23 -32 -36 -38 -36 -32 -26 -20 -13 -7 -1 --3 --8 --10 --12 --14 --16 --17 --20 --21 --23 --25 --28 --33 --39 --46 --52 --58 --64 --68 --72 --73 --76 --75 --74 --73 --71 --69 --70 --72 --73 --69 --63 --53 --40 --25 --10 -4 -16 -26 -30 -33 -32 -29 -21 -12 -1 --11 --23 --34 --45 --53 --61 --67 --71 --73 --75 --74 --73 --71 --68 --65 --62 --58 --55 --51 --48 --46 --43 --41 --39 --38 --37 --35 --35 --34 --37 --42 --46 --46 --43 --35 --25 --13 --1 -12 -22 -31 -35 -37 -35 -31 -23 -15 -2 --10 --22 --33 --43 --52 --59 --65 --69 --71 --73 --72 --71 --69 --71 --73 --73 --70 --62 --51 --37 --21 --5 -10 -21 -31 -35 -37 -34 -30 -22 -13 -0 --11 --24 --35 --45 --53 --61 --67 --71 --72 --74 --73 --72 --69 --71 --72 --73 --69 --61 --50 --35 --21 --4 -11 -22 -32 -35 -37 -34 -30 -23 -16 -9 -3 --3 --7 --11 --13 --15 --17 --18 --20 --22 --23 --25 --26 --31 --35 --41 --48 --54 --60 --65 --69 --73 --75 --77 --77 --76 --74 --72 --70 --71 --73 --74 --71 --64 --53 --41 --26 --11 -3 -15 -25 -30 -33 -31 -28 -21 -12 -0 --11 --24 --35 --45 --54 --62 --67 --72 --73 --75 --74 --74 --71 --72 --74 --75 --71 --64 --52 --38 --22 --7 -9 -21 -30 -34 -36 -33 -29 -21 -12 -0 --12 --24 --35 --45 --54 --61 --66 --70 --73 --74 --73 --72 --69 --67 --64 --61 --57 --54 --51 --48 --45 --43 --40 --39 --37 --37 --35 --35 --34 --38 --42 --46 --46 --43 --35 --25 --12 -0 -13 -23 -31 -35 -38 -35 -31 -24 -19 -11 -5 --1 --4 --9 --10 --13 --15 --16 --18 --20 --21 --23 --25 --29 --33 --40 --47 --53 --59 --65 --69 --73 --75 --77 --76 --76 --75 --73 --70 --67 --63 --61 --57 --55 --51 --49 --46 --45 --42 --41 --39 --38 --36 --36 --35 --39 --43 --47 --46 --43 --36 --27 --15 --3 -9 -19 -28 -33 -36 -36 -33 -25 -16 -5 --7 --19 --30 --41 --49 --57 --62 --67 --69 --71 --71 --70 --69 --69 --71 --72 --69 --62 --50 --36 --21 --5 -10 -21 -31 -35 -37 -34 -30 -23 -17 -9 -4 --2 --6 --10 --12 --14 --16 --18 --19 --21 --23 --25 --27 --30 --36 --42 --48 --55 --61 --66 --70 --74 --76 --77 --77 --76 --75 --73 --70 --71 --73 --74 --71 --64 --54 --41 --26 --11 -4 -15 -25 -30 -33 -32 -29 -21 -13 -0 --11 --24 --34 --45 --53 --61 --66 --71 --73 --75 --74 --73 --71 --69 --65 --62 --58 --55 --51 --48 --45 --43 --41 --39 --37 --36 --35 --34 --34 --37 --41 --45 --45 --42 --34 --25 --12 -0 -13 -23 -32 -36 -39 -36 -32 -25 -16 -3 --8 --21 --32 --43 --51 --59 --64 --69 --70 --72 --71 --71 --69 --70 --72 --73 --69 --62 --50 --37 --21 --5 -9 -22 -31 -35 -36 -33 -29 -22 -16 -9 -3 --2 --7 --10 --12 --15 --16 --18 --19 --22 --23 --26 --27 --30 --35 --41 --47 --54 --60 --66 --69 --74 --75 --77 --76 --76 --75 --73 --70 --67 --64 --61 --58 --55 --52 --49 --46 --45 --43 --41 --39 --38 --37 --36 --36 --39 --44 --47 --47 --44 --36 --27 --15 --3 -9 -20 -28 -33 -37 -35 -32 -25 -16 -4 --7 --20 --31 --41 --50 --58 --63 --68 --70 --72 --71 --71 --69 --70 --73 --73 --69 --62 --50 --37 --21 --5 -9 -21 -30 -35 -37 -34 -31 -24 -17 -10 -4 --2 --6 --10 --12 --14 --16 --18 --19 --21 --22 --25 --26 --30 --34 --41 --47 --55 --60 --66 --69 --74 --75 --76 --76 --76 --74 --72 --69 --67 --64 --61 --58 --56 --52 --49 --47 --45 --43 --41 --41 --39 --37 --37 --37 --39 --44 --47 --47 --44 --36 --27 --15 --3 -10 -20 -29 -33 -36 -35 -33 -27 -22 -14 -8 -2 --2 --6 --9 --11 --13 --16 --17 --19 --21 --23 --25 --29 --33 +-69 +-65 +-59 +-48 +-36 +-20 +-5 +8 +18 +26 +29 +31 +29 +25 +18 +10 +-1 +-12 +-23 +-33 +-42 +-50 +-57 +-62 +-66 +-68 +-69 +-69 +-67 +-66 +-67 +-68 +-69 +-66 +-59 +-48 +-36 +-21 +-7 +6 +17 +25 +29 +31 +28 +24 +17 +9 +-3 +-13 +-25 +-35 +-44 +-52 +-59 +-63 +-67 +-69 +-70 +-69 +-69 +-67 +-67 +-69 +-70 +-66 +-60 +-49 +-37 +-21 +-8 +6 +17 +25 +29 +30 +27 +23 +16 +7 +-4 +-14 +-25 +-35 +-45 +-52 +-59 +-65 +-68 +-69 +-71 +-70 +-70 +-67 +-68 +-70 +-70 +-66 +-60 +-49 +-37 +-22 +-8 +6 +17 +25 +29 +30 +28 +25 +17 +9 +-2 +-13 +-24 +-34 +-44 +-52 +-58 +-63 +-67 +-69 +-70 +-69 +-68 +-67 +-68 +-69 +-70 +-67 +-60 +-49 +-37 +-22 +-8 +6 +17 +25 +29 +31 +28 +24 +16 +8 +-3 +-14 +-25 +-35 +-44 +-52 +-59 +-64 +-68 +-69 +-70 +-69 +-69 +-67 +-67 +-69 +-70 +-67 +-59 +-49 +-36 +-21 +-8 +6 +17 +26 +29 +31 +28 +25 +17 +9 +-3 +-14 +-25 +-35 +-45 +-53 +-60 +-65 +-68 +-70 +-71 +-70 +-69 +-67 +-69 +-70 +-71 +-67 +-61 +-50 +-37 +-22 +-8 +6 +17 +25 +29 +31 +29 +25 +18 +12 +5 +-1 +-6 +-9 +-13 +-15 +-16 +-17 +-19 +-20 +-23 +-23 +-26 +-27 +-31 +-35 +-41 +-47 +-53 +-58 +-63 +-67 +-70 +-71 +-73 +-72 +-72 +-70 +-69 +-66 +-64 +-60 +-58 +-55 +-52 +-49 +-48 +-45 +-44 +-42 +-41 +-39 +-38 +-37 +-37 +-35 +-38 +-42 +-46 +-46 +-42 +-36 +-27 +-17 +-6 +5 +15 +23 +27 +30 +29 +27 +21 +12 +2 +-9 +-20 +-30 +-40 +-48 +-55 +-60 +-64 +-66 +-68 +-68 +-68 +-66 +-67 +-69 +-69 +-66 +-60 +-49 +-37 +-22 +-9 +5 +16 +24 +29 +31 +29 +24 +19 +13 +6 +1 +-5 +-8 +-11 +-14 +-16 +-17 +-19 +-21 +-23 +-24 +-26 +-27 +-31 +-34 +-40 +-46 +-52 +-57 +-63 +-66 +-69 +-71 +-73 +-72 +-72 +-71 +-69 +-67 +-68 +-69 +-70 +-68 +-62 +-52 +-40 +-26 +-13 +0 +11 +20 +25 +27 +26 +23 +17 +9 +-2 +-13 +-24 +-35 +-45 +-52 +-59 +-64 +-68 +-70 +-71 +-70 +-70 +-67 +-65 +-62 +-59 +-55 +-52 +-49 +-47 +-43 +-42 +-40 +-38 +-37 +-36 +-35 +-35 +-34 +-37 +-41 +-44 +-44 +-41 +-34 +-25 +-14 +-2 +9 +18 +26 +30 +32 +30 +27 +20 +12 +1 +-10 +-21 +-31 +-41 +-48 +-56 +-61 +-64 +-66 +-67 +-67 +-67 +-65 +-66 +-67 +-69 +-66 +-59 +-49 +-37 +-22 +-8 +6 +16 +25 +29 +31 +29 +25 +18 +9 +-2 +-13 +-25 +-35 +-45 +-52 +-59 +-64 +-68 +-70 +-71 +-70 +-69 +-67 +-68 +-70 +-71 +-67 +-61 +-50 +-37 +-22 +-8 +6 +17 +25 +29 +30 +28 +24 +15 +7 +-3 +-14 +-25 +-35 +-45 +-52 +-59 +-64 +-67 +-69 +-70 +-69 +-69 +-67 +-68 +-69 +-70 +-67 +-60 +-49 +-37 +-22 +-8 +5 +16 +25 +28 +30 +27 +23 +16 +8 +-3 +-14 +-25 +-35 +-44 +-52 +-60 +-64 +-68 +-70 +-70 +-70 +-69 +-67 +-68 +-70 +-71 +-67 +-61 +-50 +-37 +-23 +-8 +6 +16 +25 +29 +31 +28 +24 +18 +12 +5 +0 +-5 +-9 +-12 +-13 +-16 +-16 +-19 +-20 +-22 +-23 +-26 +-27 +-31 +-35 +-41 +-46 +-52 +-58 +-63 +-66 +-69 +-71 +-72 +-72 +-72 +-70 +-69 +-66 +-67 +-68 +-69 +-65 +-59 +-50 +-39 +-25 +-13 +1 +12 +21 +25 +28 +27 +24 +17 +9 +-2 +-13 +-25 +-34 +-44 +-52 +-59 +-64 +-68 +-70 +-71 +-71 +-71 +-68 +-69 +-70 +-71 +-68 +-61 +-50 +-38 +-24 +-9 +5 +15 +24 +28 +30 +28 +24 +17 +8 +-3 +-14 +-25 +-35 +-45 +-52 +-59 +-64 +-68 +-70 +-71 +-70 +-69 +-67 +-68 +-69 +-70 +-66 +-59 +-49 +-36 +-21 +-7 +7 +17 +26 +29 +31 +28 +24 +17 +9 +-3 +-13 +-25 +-35 +-45 +-52 +-59 +-64 +-67 +-69 +-70 +-70 +-69 +-67 +-65 +-62 +-59 +-55 +-53 +-50 +-47 +-44 +-43 +-40 +-39 +-37 +-36 +-35 +-34 +-34 +-37 +-41 +-45 +-44 +-42 +-35 +-26 +-14 +-3 +9 +18 +26 +30 +32 +30 +27 +21 +15 +8 +3 +-2 +-6 +-10 +-12 +-14 +-15 +-17 +-19 +-21 +-22 +-24 +-25 +-28 +-33 +-39 +-45 +-51 +-56 +-62 +-66 +-69 +-70 +-73 +-73 +-72 +-70 +-69 +-66 +-66 +-68 +-68 +-65 +-60 +-50 +-39 +-25 +-12 +1 +11 +21 +25 +28 +27 +24 +18 +9 +-2 +-12 +-24 +-34 +-44 +-51 +-59 +-64 +-67 +-69 +-71 +-71 +-69 +-67 +-65 +-62 +-59 +-56 +-53 +-50 +-47 +-44 +-42 +-40 +-38 +-36 +-36 +-35 +-35 +-34 +-38 +-42 +-45 +-45 +-41 +-34 +-26 +-14 +-3 +9 +19 +26 +30 +32 +30 +27 +21 +16 +9 +4 +-1 +-5 +-9 +-11 +-14 +-15 +-17 +-19 +-21 +-22 +-24 +-25 +-28 +-33 +-39 +-45 +-51 +-56 +-62 +-66 +-69 +-71 +-73 +-73 +-72 +-70 +-69 +-66 +-64 +-61 +-59 +-55 +-53 +-50 +-47 +-45 +-43 +-41 +-40 +-37 +-37 +-36 +-36 +-35 +-38 +-42 +-46 +-46 +-43 +-36 +-28 +-18 +-7 +5 +14 +22 +27 +30 +29 +27 +20 +12 +2 +-9 +-20 +-30 +-40 +-48 +-55 +-60 +-65 +-67 +-69 +-68 +-67 +-66 +-67 +-69 +-69 +-66 +-60 +-49 +-38 +-23 +-9 +5 +16 +24 +29 +31 +29 +25 +18 +10 +-1 +-12 +-24 +-33 +-44 +-52 +-59 +-63 +-67 +-69 +-70 +-70 +-69 +-67 +-67 +-69 +-70 +-67 +-60 +-49 +-37 +-22 +-8 +6 +17 +26 +30 +31 +29 +24 +17 +8 +-3 +-14 +-25 +-35 +-45 +-52 +-59 +-64 +-67 +-69 +-70 +-70 +-69 +-67 +-68 +-70 +-70 +-67 +-60 +-49 +-36 +-21 +-7 +7 +17 +26 +29 +30 +28 +24 +16 +8 +-3 +-14 +-25 +-35 +-45 +-52 +-59 +-64 +-68 +-70 +-71 +-70 +-69 +-67 +-68 +-70 +-70 +-67 +-61 +-50 +-37 +-22 +-8 +7 +17 +26 +30 +31 +29 +25 +18 +9 +-2 +-13 +-25 +-35 +-44 +-52 +-59 +-64 +-68 +-70 +-71 +-70 +-69 +-67 +-68 +-70 +-71 +-67 +-61 +-50 +-37 +-22 +-8 +6 +17 +26 +30 +31 +28 +24 +17 +8 +-3 +-14 +-25 +-35 +-45 +-53 +-59 +-65 +-68 +-70 +-71 +-70 +-70 +-67 +-68 +-70 +-70 +-66 +-59 +-49 +-37 +-22 +-7 +6 +17 +25 +29 +31 +28 +24 +16 +7 +-3 +-14 +-25 +-35 +-45 +-53 +-59 +-64 +-67 +-70 +-70 +-69 +-69 +-67 +-68 +-69 +-70 +-67 +-60 +-49 +-37 +-22 +-8 +6 +17 +25 +29 +31 +28 +24 +17 +8 +-3 +-14 +-26 +-35 +-45 +-53 +-59 +-65 +-68 +-70 +-71 +-70 +-70 +-67 +-68 +-71 +-71 +-67 +-60 +-49 +-37 +-21 +-7 +6 +17 +26 +29 +31 +28 +24 +18 +12 +5 +-1 +-6 +-9 +-12 +-13 +-16 +-17 +-19 +-20 +-22 +-23 +-26 +-27 +-30 +-34 +-41 +-46 +-52 +-58 +-62 +-66 +-70 +-71 +-73 +-72 +-72 +-70 +-69 +-67 +-67 +-69 +-70 +-67 +-61 +-51 +-40 +-26 +-13 +0 +11 +20 +25 +28 +26 +23 +16 +8 +-2 +-13 +-24 +-34 +-43 +-51 +-58 +-63 +-67 +-69 +-71 +-70 +-69 +-68 +-69 +-70 +-71 +-67 +-61 +-50 +-38 +-23 +-9 +5 +16 +24 +28 +30 +28 +24 +17 +9 +-2 +-13 +-25 +-35 +-45 +-52 +-59 +-64 +-68 +-70 +-71 +-70 +-70 +-68 +-68 +-70 +-71 +-67 +-60 +-49 +-37 +-21 +-8 +6 +17 +26 +30 +31 +28 +25 +18 +9 +-3 +-13 +-25 +-36 +-45 +-53 +-60 +-65 +-68 +-70 +-71 +-70 +-69 +-67 +-68 +-70 +-70 +-67 +-60 +-49 +-36 +-21 +-7 +7 +17 +25 +29 +31 +28 +24 +16 +8 +-3 +-14 +-25 +-35 +-45 +-53 +-59 +-64 +-67 +-69 +-71 +-69 +-69 +-66 +-67 +-69 +-69 +-67 +-60 +-49 +-37 +-22 +-8 +6 +17 +25 +29 +30 +28 +24 +17 +8 +-3 +-14 +-25 +-36 +-45 +-53 +-60 +-65 +-69 +-70 +-71 +-70 +-70 +-67 +-68 +-70 +-71 +-67 +-61 +-50 +-37 +-22 +-8 +6 +17 +26 +30 +31 +28 +25 +17 +9 +-2 +-13 +-25 +-35 +-45 +-52 +-59 +-64 +-67 +-69 +-70 +-70 +-70 +-67 +-69 +-70 +-70 +-67 +-60 +-49 +-36 +-21 +-7 +7 +17 +25 +29 +31 +29 +24 +17 +8 +-3 +-14 +-26 +-35 +-45 +-53 +-60 +-65 +-68 +-70 +-72 +-70 +-69 +-67 +-68 +-69 +-70 +-67 +-60 +-49 +-36 +-21 +-7 +7 +18 +26 +30 +31 +29 +24 +17 +8 +-3 +-13 +-25 +-35 +-45 +-52 +-59 +-64 +-67 +-69 +-70 +-70 +-69 +-67 +-65 +-62 +-59 +-55 +-52 +-49 +-47 +-44 +-42 +-39 +-38 +-36 +-36 +-35 +-34 +-34 +-37 +-41 +-45 +-44 +-41 +-34 +-25 +-13 +-2 +10 +19 +27 +30 +32 +30 +27 +19 +11 +0 +-11 +-22 +-33 +-42 +-50 +-57 +-62 +-66 +-67 +-69 +-69 +-68 +-66 +-67 +-69 +-69 +-66 +-60 +-49 +-36 +-21 +-8 +6 +17 +26 +30 +31 +29 +25 +17 +9 +-2 +-13 +-25 +-34 +-44 +-52 +-59 +-63 +-67 +-69 +-70 +-70 +-69 +-68 +-69 +-70 +-70 +-67 +-60 +-49 +-37 +-22 +-7 +7 +17 +25 +30 +31 +29 +25 +17 +9 +-3 +-13 +-25 +-35 +-45 +-53 +-59 +-64 +-68 +-69 +-71 +-70 +-69 +-67 +-68 +-70 +-70 +-67 +-60 +-49 +-37 +-21 +-7 +6 +18 +26 +30 +32 +29 +26 +18 +9 +-2 +-13 +-24 +-35 +-45 +-52 +-60 +-64 +-68 +-69 +-71 +-70 +-69 +-68 +-68 +-70 +-70 +-67 +-60 +-49 +-37 +-22 +-7 +7 +17 +26 +30 +31 +28 +24 +17 +8 +-3 +-14 +-25 +-35 +-45 +-53 +-60 +-65 +-69 +-70 +-71 +-70 +-69 +-67 +-68 +-70 +-70 +-67 +-60 +-49 +-37 +-22 +-8 +6 +17 +25 +29 +31 +28 +24 +17 +9 +-3 +-13 +-25 +-36 +-45 +-53 +-60 +-65 +-68 +-70 +-71 +-71 +-69 +-67 +-68 +-70 +-71 +-67 +-61 +-49 +-37 +-21 +-8 +6 +17 +26 +30 +31 +29 +25 +17 +8 +-3 +-13 +-25 +-35 +-45 +-52 +-59 +-64 +-67 +-69 +-71 +-70 +-69 +-67 +-68 +-70 +-70 +-67 +-60 +-49 +-37 +-21 +-8 +7 +18 +26 +30 +31 +29 +25 +18 +9 +-2 +-13 +-24 +-35 +-44 +-52 +-59 +-64 +-68 +-70 +-71 +-70 +-69 +-67 +-67 +-69 +-70 +-67 +-60 +-49 +-37 +-21 +-7 +7 +17 +26 +30 +31 +29 +25 +19 +12 +5 +0 +-5 +-9 +-12 +-14 +-16 +-17 +-19 +-21 +-23 +-24 +-26 +-27 +-31 +-35 +-41 +-47 +-53 +-59 +-64 +-67 +-71 +-72 +-74 +-73 +-73 +-72 +-70 +-68 +-69 +-70 +-71 +-67 +-61 +-51 +-40 +-26 +-12 +1 +11 +20 +25 +27 +26 +23 +16 +8 +-2 +-13 +-24 +-34 +-44 +-52 +-59 +-63 +-67 +-69 +-71 +-70 +-69 +-67 +-68 +-70 +-71 +-67 +-60 +-49 +-37 +-23 +-8 +6 +17 +25 +29 +31 +29 +25 +18 +10 +-2 +-13 +-24 +-34 +-44 +-52 +-59 +-63 +-67 +-69 +-70 +-70 +-69 +-67 +-68 +-70 +-71 +-67 +-61 +-50 +-37 +-22 +-7 +6 +17 +26 +30 +31 +29 +25 +18 +9 +-2 +-13 +-24 +-35 +-44 +-52 +-59 +-64 +-68 +-70 +-72 +-71 +-70 +-67 +-68 +-70 +-70 +-67 +-60 +-49 +-36 +-21 +-8 +6 +17 +26 +29 +31 +29 +25 +17 +9 +-3 +-14 +-25 +-35 +-45 +-53 +-60 +-65 +-68 +-70 +-72 +-71 +-69 +-68 +-68 +-69 +-70 +-67 +-60 +-49 +-36 +-21 +-7 +7 +17 +26 +30 +31 +28 +24 +17 +8 +-3 +-14 +-25 +-35 +-45 +-52 +-59 +-64 +-68 +-69 +-71 +-70 +-69 +-67 +-67 +-69 +-70 +-67 +-60 +-49 +-36 +-21 +-7 +7 +18 +26 +30 +31 +29 +25 +17 +9 +-3 +-14 +-25 +-35 +-44 +-52 +-60 +-65 +-68 +-70 +-72 +-70 +-70 +-67 +-69 +-70 +-71 +-67 +-61 +-50 +-37 +-22 +-8 +6 +17 +25 +29 +31 +28 +24 +17 +8 +-3 +-14 +-26 +-36 +-45 +-53 +-60 +-65 +-68 +-70 +-72 +-71 +-70 +-68 +-69 +-70 +-71 +-68 +-61 +-49 +-37 +-22 +-7 +7 +17 +25 +29 +31 +28 +25 +17 +9 +-3 +-13 +-25 +-35 +-45 +-53 +-59 +-64 +-68 +-70 +-72 +-70 +-69 +-67 +-68 +-69 +-70 +-67 +-60 +-49 +-37 +-21 +-7 +7 +18 +26 +31 +32 +29 +26 +18 +9 +-3 +-13 +-25 +-35 +-45 +-52 +-59 +-64 +-67 +-69 +-71 +-70 +-69 +-67 +-68 +-70 +-70 +-67 +-60 +-49 +-36 +-21 +-7 +6 +17 +25 +30 +31 +29 +24 +17 +8 +-3 +-14 +-25 +-35 +-45 +-52 +-59 +-64 +-68 +-70 +-72 +-71 +-70 +-68 +-66 +-62 +-59 +-56 +-53 +-49 +-47 +-44 +-42 +-40 +-39 +-37 +-36 +-35 +-35 +-34 +-36 +-41 +-44 +-44 +-41 +-33 +-24 +-13 +-1 +10 +19 +27 +31 +33 +31 +28 +20 +11 +1 +-10 +-21 +-32 +-42 +-49 +-57 +-61 +-65 +-67 +-68 +-68 +-67 +-66 +-67 +-69 +-69 +-66 +-60 +-49 +-36 +-21 +-7 +6 +18 +27 +30 +32 +29 +26 +18 +9 +-2 +-13 +-25 +-35 +-44 +-52 +-59 +-64 +-68 +-70 +-71 +-71 +-69 +-67 +-68 +-70 +-71 +-67 +-61 +-49 +-37 +-21 +-7 +7 +17 +26 +29 +31 +28 +25 +18 +13 +6 +0 +-5 +-9 +-12 +-14 +-17 +-17 +-20 +-21 +-23 +-24 +-26 +-27 +-30 +-34 +-41 +-46 +-52 +-58 +-63 +-67 +-70 +-72 +-74 +-73 +-73 +-71 +-70 +-67 +-68 +-70 +-71 +-68 +-61 +-52 +-40 +-26 +-12 +1 +12 +21 +26 +28 +27 +24 +17 +9 +-2 +-12 +-24 +-34 +-44 +-51 +-59 +-64 +-68 +-70 +-71 +-70 +-70 +-67 +-65 +-62 +-59 +-56 +-52 +-49 +-46 +-44 +-42 +-39 +-38 +-37 +-35 +-35 +-34 +-34 +-37 +-41 +-45 +-45 +-41 +-34 +-26 +-14 +-3 +9 +18 +26 +30 +32 +30 +27 +20 +11 +0 +-11 +-23 +-33 +-43 +-51 +-58 +-62 +-66 +-68 +-69 +-69 +-68 +-66 +-67 +-69 +-70 +-66 +-60 +-49 +-36 +-21 +-7 +7 +18 +27 +31 +32 +30 +26 +18 +9 +-2 +-13 +-24 +-35 +-44 +-52 +-59 +-64 +-68 +-70 +-71 +-70 +-69 +-68 +-68 +-70 +-71 +-67 +-61 +-50 +-37 +-22 +-7 +6 +17 +25 +29 +30 +27 +24 +17 +12 +5 +0 +-6 +-9 +-12 +-14 +-16 +-17 +-19 +-21 +-23 +-24 +-26 +-27 +-30 +-35 +-41 +-47 +-53 +-58 +-63 +-67 +-71 +-72 +-73 +-73 +-73 +-71 +-69 +-67 +-64 +-61 +-59 +-55 +-52 +-49 +-47 +-45 +-43 +-41 +-40 +-38 +-38 +-36 +-36 +-36 +-39 +-43 +-46 +-46 +-43 +-35 +-27 +-16 +-5 +6 +15 +23 +28 +31 +30 +28 +23 +18 +12 +6 +0 +-4 +-8 +-11 +-14 +-16 +-18 +-19 +-21 +-22 +-24 +-25 +-29 +-33 +-39 +-45 +-51 +-57 +-62 +-66 +-70 +-71 +-73 +-73 +-73 +-71 +-70 +-67 +-65 +-61 +-59 +-56 +-54 +-50 +-48 +-45 +-44 +-42 +-40 +-38 +-38 +-37 +-37 +-36 +-39 +-44 +-46 +-46 +-43 +-36 +-28 +-17 +-7 +5 +14 +22 +28 +31 +30 +28 +23 +18 +12 +6 +1 +-4 +-8 +-11 +-14 +-15 +-17 +-19 +-21 +-22 +-24 +-26 +-29 +-33 +-39 +-45 +-51 +-57 +-63 +-66 +-70 +-71 +-73 +-73 +-72 +-70 +-69 +-66 +-64 +-61 +-58 +-55 +-52 +-49 +-48 +-45 +-43 +-41 +-40 +-38 +-37 +-36 +-35 +-35 +-38 +-42 +-45 +-46 +-43 +-36 +-28 +-17 +-6 +5 +15 +23 +28 +31 +30 +29 +23 +19 +12 +7 +0 +-4 +-8 +-11 +-14 +-15 +-17 +-19 +-21 +-22 +-23 +-25 +-28 +-33 +-39 +-44 +-51 +-56 +-61 +-65 +-69 +-71 +-72 +-72 +-72 +-70 +-69 +-66 +-67 +-69 +-69 +-66 +-61 +-51 +-40 +-26 +-13 +1 +11 +20 +25 +28 +27 +24 +17 +9 +-2 +-12 +-24 +-34 +-44 +-52 +-59 +-64 +-68 +-70 +-71 +-71 +-71 +-68 +-66 +-63 +-60 +-57 +-54 +-50 +-47 +-44 +-42 +-40 +-38 +-37 +-36 +-34 +-34 +-34 +-37 +-41 +-44 +-45 +-42 +-34 +-25 +-14 +-3 +9 +19 +26 +30 +32 +31 +28 +20 +12 +1 +-10 +-21 +-31 +-41 +-49 +-56 +-61 +-65 +-67 +-69 +-69 +-67 +-65 +-67 +-69 +-69 +-66 +-60 +-49 +-37 +-22 +-8 +6 +17 +26 +30 +32 +30 +26 +20 +14 +7 +1 +-4 +-8 +-11 +-13 +-15 +-17 +-19 +-20 +-22 +-23 +-26 +-27 +-31 +-35 +-41 +-46 +-52 +-58 +-63 +-67 +-71 +-72 +-73 +-73 +-73 +-71 +-70 +-67 +-68 +-70 +-71 +-67 +-61 +-51 +-40 +-26 +-12 +1 +12 +21 +25 +28 +27 +24 +17 +9 +-2 +-13 +-24 +-35 +-44 +-52 +-60 +-65 +-68 +-70 +-72 +-71 +-70 +-68 +-66 +-63 +-60 +-56 +-53 +-49 +-47 +-44 +-43 +-40 +-39 +-37 +-36 +-35 +-35 +-34 +-37 +-41 +-45 +-45 +-41 +-34 +-25 +-14 +-3 +9 +19 +27 +31 +33 +31 +28 +22 +17 +10 +4 +-2 +-5 +-9 +-11 +-14 +-15 +-17 +-18 +-20 +-21 +-23 +-25 +-28 +-33 +-39 +-45 +-51 +-57 +-62 +-66 +-69 +-71 +-73 +-72 +-72 +-71 +-70 +-67 +-64 +-61 +-59 +-55 +-52 +-50 +-48 +-45 +-43 +-41 +-40 +-38 +-38 +-36 +-36 +-35 +-38 +-42 +-46 +-45 +-42 +-36 +-27 +-17 +-6 +5 +14 +22 +27 +30 +30 +28 +21 +13 +3 +-8 +-20 +-30 +-40 +-48 +-55 +-60 +-64 +-67 +-68 +-67 +-67 +-66 +-67 +-69 +-69 +-66 +-60 +-50 +-37 +-23 +-9 +5 +16 +25 +29 +31 +29 +26 +20 +14 +7 +1 +-4 +-8 +-11 +-13 +-16 +-17 +-19 +-20 +-22 +-24 +-26 +-27 +-31 +-35 +-41 +-46 +-53 +-58 +-63 +-67 +-70 +-72 +-74 +-73 +-73 +-71 +-70 +-67 +-65 +-62 +-59 +-55 +-53 +-50 +-48 +-46 +-44 +-41 +-40 +-39 +-38 +-37 +-37 +-36 +-39 +-43 +-47 +-46 +-43 +-36 +-27 +-16 +-6 +6 +16 +24 +29 +32 +31 +28 +21 +13 +3 +-8 +-20 +-31 +-40 +-48 +-56 +-61 +-65 +-67 +-68 +-68 +-67 +-66 +-67 +-68 +-69 +-66 +-60 +-49 +-36 +-22 +-7 +6 +18 +26 +30 +32 +30 +26 +20 +14 +7 +1 +-4 +-7 +-11 +-13 +-16 +-17 +-19 +-20 +-21 +-23 +-25 +-26 +-29 +-34 +-40 +-46 +-52 +-58 +-63 +-67 +-70 +-72 +-74 +-73 +-73 +-72 +-70 +-67 +-68 +-70 +-70 +-67 +-61 +-51 +-40 +-26 +-12 +1 +12 +21 +25 +28 +27 +23 +17 +8 +-3 +-14 +-25 +-35 +-45 +-53 +-60 +-65 +-68 +-70 +-72 +-71 +-70 +-68 +-69 +-70 +-71 +-67 +-62 +-50 +-37 +-22 +-8 +6 +17 +25 +29 +31 +29 +24 +18 +9 +-2 +-13 +-25 +-35 +-45 +-53 +-59 +-64 +-68 +-70 +-71 +-70 +-69 +-67 +-65 +-62 +-59 +-55 +-53 +-49 +-47 +-44 +-42 +-40 +-39 +-37 +-36 +-34 +-34 +-33 +-36 +-41 +-45 +-44 +-41 +-34 +-25 +-13 +-2 +10 +19 +27 +31 +33 +30 +27 +21 +15 +8 +3 +-3 +-7 +-10 +-12 +-15 +-16 +-17 +-18 +-20 +-22 +-23 +-25 +-29 +-33 +-39 +-45 +-52 +-57 +-62 +-66 +-70 +-72 +-74 +-73 +-73 +-71 +-70 +-67 +-68 +-69 +-70 +-67 +-61 +-51 +-40 +-26 +-13 +0 +11 +20 +25 +28 +27 +24 +18 +9 +-2 +-13 +-24 +-34 +-44 +-53 +-59 +-64 +-68 +-70 +-71 +-70 +-70 +-68 +-65 +-63 +-59 +-56 +-53 +-49 +-47 +-44 +-42 +-40 +-39 +-37 +-36 +-35 +-34 +-34 +-37 +-41 +-45 +-44 +-41 +-34 +-25 +-13 +-2 +10 +19 +27 +31 +33 +31 +28 +20 +12 +1 +-9 +-21 +-32 +-42 +-49 +-56 +-61 +-66 +-67 +-69 +-69 +-67 +-66 +-67 +-69 +-69 +-66 +-60 +-49 +-36 +-22 +-8 +6 +17 +26 +30 +32 +30 +26 +19 +10 +-2 +-13 +-24 +-34 +-44 +-52 +-59 +-64 +-68 +-69 +-71 +-70 +-69 +-67 +-68 +-70 +-71 +-67 +-60 +-49 +-37 +-22 +-7 +6 +17 +26 +30 +32 +29 +25 +18 +13 +6 +0 +-5 +-8 +-11 +-13 +-16 +-17 +-19 +-20 +-22 +-24 +-26 +-28 +-31 +-35 +-41 +-47 +-53 +-57 +-63 +-67 +-70 +-72 +-73 +-73 +-73 +-71 +-70 +-67 +-68 +-69 +-70 +-67 +-61 +-52 +-40 +-26 +-13 +0 +12 +21 +25 +29 +27 +24 +18 +9 +-1 +-12 +-24 +-34 +-44 +-52 +-59 +-64 +-67 +-70 +-71 +-70 +-70 +-68 +-69 +-71 +-72 +-68 +-62 +-51 +-38 +-23 +-8 +6 +16 +25 +29 +31 +29 +25 +17 +9 +-2 +-13 +-25 +-35 +-45 +-52 +-59 +-64 +-68 +-70 +-71 +-70 +-70 +-67 +-65 +-61 +-59 +-55 +-52 +-49 +-47 +-44 +-41 +-39 +-39 +-37 +-36 +-35 +-34 +-33 +-36 +-41 +-44 +-44 +-41 +-34 +-25 +-13 +-1 +11 +20 +28 +32 +33 +31 +28 +22 +16 +9 +4 +-2 +-6 +-9 +-11 +-14 +-15 +-17 +-18 +-20 +-22 +-24 +-25 +-29 +-33 +-39 +-46 +-52 +-57 +-62 +-66 +-70 +-71 +-72 +-73 +-72 +-71 +-69 +-67 +-65 +-62 +-60 +-56 +-54 +-51 +-49 +-47 +-45 +-43 +-41 +-40 +-39 +-37 +-37 +-36 +-39 +-43 +-47 +-46 +-43 +-36 +-28 +-16 +-5 +6 +15 +23 +29 +31 +30 +28 +22 +14 +3 +-8 +-20 +-31 +-40 +-48 +-55 +-61 +-64 +-66 +-68 +-68 +-67 +-65 +-67 +-69 +-69 +-66 +-60 +-49 +-38 +-23 +-9 +5 +16 +25 +29 +31 +29 +26 +19 +14 +6 +1 +-5 +-8 +-11 +-13 +-15 +-16 +-18 +-19 +-22 +-23 +-25 +-27 +-30 +-35 +-41 +-46 +-52 +-58 +-63 +-67 +-70 +-72 +-74 +-74 +-73 +-72 +-69 +-67 +-69 +-70 +-71 +-67 +-62 +-52 +-40 +-26 +-13 +0 +12 +21 +25 +29 +27 +24 +17 +9 +-2 +-13 +-24 +-35 +-44 +-52 +-60 +-64 +-68 +-70 +-71 +-71 +-70 +-68 +-66 +-63 +-61 +-58 +-55 +-51 +-48 +-45 +-43 +-40 +-39 +-37 +-36 +-35 +-35 +-33 +-37 +-41 +-44 +-44 +-41 +-34 +-24 +-13 +-2 +10 +19 +27 +31 +33 +31 +28 +21 +12 +1 +-9 +-21 +-31 +-41 +-49 +-56 +-61 +-65 +-67 +-69 +-68 +-68 +-66 +-67 +-69 +-69 +-66 +-59 +-49 +-36 +-21 +-7 +7 +18 +26 +31 +32 +31 +27 +20 +14 +7 +1 +-4 +-8 +-11 +-13 +-16 +-17 +-19 +-20 +-23 +-24 +-26 +-27 +-31 +-35 +-41 +-47 +-53 +-59 +-64 +-67 +-71 +-72 +-74 +-73 +-73 +-71 +-69 +-67 +-65 +-62 +-59 +-55 +-53 +-50 +-48 +-46 +-44 +-42 +-41 +-39 +-39 +-38 +-37 +-36 +-39 +-43 +-47 +-46 +-42 +-36 +-27 +-16 +-5 +6 +16 +24 +29 +31 +30 +28 +21 +13 +2 +-8 +-20 +-30 +-40 +-48 +-56 +-61 +-65 +-67 +-68 +-69 +-68 +-66 +-67 +-68 +-69 +-66 +-60 +-49 +-37 +-22 +-8 +6 +17 +26 +29 +32 +30 +26 +20 +14 +7 +2 +-4 +-7 +-11 +-13 +-15 +-17 +-18 +-20 +-22 +-23 +-25 +-27 +-30 +-34 +-40 +-46 +-53 +-58 +-63 +-67 +-71 +-72 +-74 +-73 +-73 +-72 +-70 +-67 +-65 +-62 +-59 +-56 +-53 +-50 +-48 +-45 +-44 +-41 +-40 +-39 +-38 +-37 +-37 +-36 +-39 +-43 +-46 +-46 +-42 +-36 +-27 +-16 +-5 +6 +16 +24 +29 +32 +31 +29 +24 +18 +11 +6 +0 +-4 +-9 +-11 +-14 +-16 +-17 +-19 +-21 +-22 +-23 +-25 +-28 +-32 +-39 +-44 +-51 +-56 +-62 +-66 +-69 +-71 +-73 +-73 +-73 +-71 +-69 +-67 +-64 +-61 +-59 +-56 +-53 +-49 +-47 +-45 +-43 +-41 +-40 +-38 +-37 +-36 +-36 +-36 +-38 +-42 +-46 +-45 +-42 +-35 +-27 +-17 +-5 +6 +15 +23 +28 +31 +30 +28 +23 +18 +12 +6 +1 +-3 +-8 +-10 +-13 +-15 +-17 +-19 +-20 +-22 +-24 +-25 +-29 +-33 +-40 +-45 +-52 +-57 +-63 +-66 +-70 +-72 +-73 +-73 +-72 +-70 +-69 +-67 +-67 +-69 +-70 +-67 +-61 +-52 +-41 +-27 +-14 +0 +12 +21 +26 +29 +27 +25 +18 +10 +-1 +-12 +-24 +-34 +-43 +-51 +-58 +-63 +-67 +-69 +-71 +-70 +-69 +-67 +-69 +-71 +-71 +-68 +-61 +-50 +-37 +-23 +-9 +6 +17 +25 +30 +31 +29 +25 +18 +10 +-2 +-13 +-24 +-34 +-44 +-52 +-59 +-64 +-68 +-69 +-71 +-70 +-69 +-67 +-68 +-70 +-71 +-68 +-61 +-49 +-37 +-22 +-7 +7 +18 +27 +31 +32 +30 +26 +18 +9 +-2 +-13 +-25 +-35 +-45 +-52 +-59 +-64 +-68 +-70 +-71 +-70 +-69 +-67 +-68 +-70 +-71 +-67 +-60 +-49 +-36 +-20 +-7 +7 +18 +26 +30 +31 +29 +25 +17 +9 +-2 +-13 +-25 +-35 +-45 +-53 +-60 +-65 +-69 +-70 +-72 +-71 +-71 +-68 +-69 +-70 +-71 +-68 +-61 +-49 +-37 +-22 +-7 +7 +17 +26 +30 +31 +29 +25 +18 +9 +-3 +-14 +-25 +-36 +-46 +-54 +-61 +-65 +-69 +-71 +-72 +-71 +-70 +-68 +-69 +-71 +-72 +-68 +-61 +-50 +-37 +-22 +-8 +7 +17 +26 +30 +32 +29 +25 +17 +8 +-3 +-14 +-26 +-36 +-46 +-54 +-60 +-65 +-69 +-71 +-72 +-71 +-70 +-68 +-69 +-70 +-72 +-68 +-61 +-50 +-37 +-22 +-8 +6 +17 +26 +30 +31 +29 +25 +18 +9 +-2 +-13 +-25 +-35 +-45 +-53 +-60 +-65 +-68 +-70 +-71 +-70 +-69 +-67 +-68 +-70 +-70 +-67 +-60 +-49 +-36 +-21 +-6 +8 +19 +27 +31 +32 +29 +25 +18 +9 +-3 +-13 +-25 +-35 +-45 +-53 +-60 +-65 +-68 +-70 +-72 +-71 +-71 +-68 +-66 +-63 +-60 +-57 +-54 +-50 +-48 +-45 +-42 +-40 +-39 +-37 +-36 +-35 +-35 +-34 +-37 +-41 +-45 +-44 +-41 +-34 +-24 +-12 +-1 +11 +21 +29 +32 +34 +32 +29 +21 +12 +1 +-10 +-22 +-32 +-42 +-49 +-57 +-62 +-65 +-67 +-69 +-68 +-67 +-66 +-67 +-69 +-70 +-66 +-60 +-49 +-37 +-22 +-7 +6 +18 +26 +30 +32 +29 +26 +18 +10 +-2 +-13 +-24 +-35 +-44 +-52 +-59 +-64 +-67 +-69 +-71 +-70 +-69 +-68 +-68 +-70 +-71 +-68 +-61 +-49 +-37 +-21 +-7 +7 +18 +26 +30 +32 +29 +25 +17 +9 +-2 +-13 +-25 +-35 +-45 +-53 +-60 +-64 +-68 +-70 +-72 +-71 +-70 +-68 +-69 +-71 +-71 +-67 +-60 +-49 +-36 +-21 +-6 +7 +18 +27 +31 +33 +30 +26 +18 +9 +-2 +-13 +-25 +-36 +-45 +-53 +-60 +-64 +-68 +-70 +-72 +-71 +-70 +-67 +-68 +-70 +-71 +-67 +-61 +-49 +-37 +-21 +-7 +7 +18 +27 +30 +32 +30 +26 +18 +9 +-2 +-13 +-25 +-36 +-46 +-53 +-61 +-65 +-69 +-71 +-72 +-71 +-70 +-68 +-69 +-70 +-71 +-67 +-60 +-49 +-37 +-21 +-7 +7 +18 +27 +30 +32 +29 +26 +18 +9 +-2 +-13 +-25 +-35 +-45 +-53 +-59 +-65 +-69 +-70 +-71 +-70 +-70 +-68 +-68 +-70 +-71 +-67 +-61 +-49 +-37 +-21 +-7 +7 +18 +26 +31 +31 +29 +25 +18 +9 +-3 +-13 +-25 +-36 +-45 +-53 +-60 +-64 +-68 +-69 +-71 +-70 +-69 +-67 +-69 +-70 +-71 +-67 +-61 +-49 +-36 +-21 +-7 +8 +19 +27 +31 +32 +30 +26 +20 +14 +7 +1 +-5 +-8 +-11 +-14 +-15 +-17 +-19 +-20 +-22 +-23 +-26 +-27 +-30 +-35 +-40 +-46 +-52 +-57 +-63 +-66 +-70 +-72 +-74 +-74 +-73 +-71 +-70 +-68 +-65 +-62 +-60 +-56 +-53 +-50 +-49 +-46 +-43 +-42 +-41 +-38 +-38 +-37 +-37 +-36 +-39 +-43 +-46 +-46 +-43 +-35 +-27 +-16 +-5 +7 +16 +24 +29 +31 +31 +28 +21 +13 +2 +-8 +-20 +-30 +-40 +-49 +-56 +-61 +-65 +-68 +-70 +-69 +-69 +-67 +-68 +-70 +-71 +-67 +-61 +-50 +-38 +-23 +-9 +5 +16 +25 +29 +32 +30 +26 +20 +14 +7 +2 +-4 +-8 +-11 +-13 +-16 +-17 +-19 +-21 +-23 +-24 +-26 +-28 +-31 +-36 +-41 +-47 +-53 +-59 +-64 +-67 +-71 +-72 +-73 +-73 +-73 +-71 +-70 +-67 +-68 +-69 +-71 +-67 +-61 +-52 +-40 +-26 +-12 +1 +12 +22 +27 +29 +28 +25 +18 +10 +-1 +-12 +-23 +-34 +-43 +-51 +-59 +-64 +-68 +-70 +-72 +-72 +-71 +-68 +-66 +-63 +-60 +-56 +-53 +-50 +-48 +-45 +-42 +-40 +-38 +-37 +-36 +-35 +-35 +-34 +-37 +-42 +-45 +-45 +-42 +-35 +-26 +-14 +-3 +10 +19 +27 +31 +33 +31 +28 +20 +12 +1 +-10 +-22 +-32 +-42 +-50 +-57 +-62 +-66 +-68 +-69 +-69 +-69 +-67 +-68 +-69 +-70 +-67 +-60 +-49 +-36 +-21 +-7 +7 +18 +27 +30 +32 +30 +26 +19 +9 +-2 +-13 +-25 +-35 +-45 +-52 +-60 +-65 +-68 +-70 +-71 +-71 +-69 +-67 +-68 +-70 +-71 +-67 +-60 +-50 +-37 +-22 +-7 +7 +18 +27 +31 +32 +30 +26 +18 +9 +-2 +-13 +-25 +-35 +-46 +-53 +-60 +-65 +-68 +-70 +-71 +-70 +-69 +-67 +-69 +-70 +-71 +-67 +-61 +-50 +-37 +-21 +-7 +7 +18 +27 +31 +32 +29 +25 +17 +9 +-2 +-14 +-26 +-35 +-45 +-53 +-60 +-65 +-68 +-70 +-71 +-70 +-70 +-68 +-69 +-70 +-71 +-67 +-61 +-49 +-37 +-22 +-8 +7 +17 +26 +30 +31 +29 +25 +19 +12 +5 +0 +-5 +-9 +-12 +-14 +-16 +-17 +-19 +-21 +-23 +-24 +-26 +-27 +-31 +-35 +-41 +-47 +-53 +-59 +-64 +-67 +-70 +-72 +-74 +-73 +-73 +-71 +-69 +-67 +-68 +-70 +-70 +-67 +-61 +-51 +-40 +-25 +-12 +1 +12 +21 +26 +29 +28 +25 +18 +9 +-2 +-12 +-24 +-34 +-44 +-52 +-59 +-64 +-68 +-70 +-72 +-71 +-70 +-68 +-69 +-71 +-71 +-68 +-61 +-50 +-37 +-22 +-8 +6 +18 +26 +30 +32 +30 +26 +19 +10 +-1 +-13 +-24 +-35 +-45 +-53 +-61 +-65 +-69 +-71 +-72 +-71 +-70 +-68 +-69 +-71 +-72 +-68 +-61 +-50 +-37 +-22 +-7 +8 +19 +27 +31 +32 +30 +26 +18 +9 +-2 +-13 +-25 +-35 +-45 +-53 +-59 +-65 +-69 +-70 +-72 +-71 +-70 +-68 +-66 +-63 +-60 +-56 +-53 +-50 +-47 +-43 +-42 +-40 +-39 +-37 +-36 +-35 +-34 +-33 +-37 +-41 +-45 +-44 +-41 +-34 +-24 +-13 +-2 +11 +20 +28 +31 +34 +32 +29 +23 +17 +10 +4 +-1 +-5 +-9 +-11 +-14 +-15 +-17 +-19 +-20 +-22 +-23 +-25 +-28 +-33 +-39 +-45 +-51 +-57 +-63 +-66 +-69 +-71 +-73 +-73 +-73 +-71 +-69 +-67 +-68 +-70 +-71 +-67 +-61 +-52 +-41 +-27 +-13 +1 +11 +21 +26 +29 +27 +24 +18 +9 +-1 +-12 +-24 +-35 +-44 +-52 +-59 +-65 +-69 +-71 +-72 +-72 +-71 +-69 +-66 +-64 +-60 +-57 +-54 +-51 +-48 +-45 +-43 +-41 +-39 +-37 +-36 +-35 +-35 +-34 +-37 +-41 +-45 +-44 +-42 +-34 +-25 +-13 +-2 +10 +19 +28 +31 +34 +32 +29 +23 +17 +10 +4 +-1 +-5 +-9 +-11 +-13 +-14 +-16 +-18 +-19 +-21 +-23 +-25 +-28 +-33 +-39 +-45 +-52 +-57 +-63 +-67 +-69 +-71 +-73 +-73 +-72 +-70 +-69 +-66 +-64 +-61 +-58 +-55 +-53 +-49 +-48 +-45 +-43 +-40 +-40 +-38 +-37 +-36 +-36 +-35 +-38 +-43 +-46 +-45 +-42 +-36 +-27 +-16 +-5 +6 +16 +24 +29 +31 +31 +29 +22 +14 +3 +-8 +-20 +-30 +-40 +-48 +-56 +-61 +-65 +-67 +-69 +-69 +-68 +-66 +-68 +-70 +-71 +-66 +-61 +-50 +-37 +-22 +-8 +6 +17 +25 +29 +31 +29 +26 +18 +9 +-2 +-13 +-24 +-35 +-44 +-52 +-59 +-64 +-68 +-70 +-71 +-71 +-70 +-69 +-69 +-71 +-72 +-68 +-61 +-50 +-37 +-22 +-7 +7 +17 +26 +30 +32 +29 +25 +17 +9 +-3 +-14 +-25 +-36 +-46 +-53 +-60 +-65 +-69 +-70 +-71 +-71 +-69 +-67 +-68 +-70 +-71 +-67 +-60 +-49 +-37 +-21 +-7 +7 +19 +27 +31 +32 +30 +26 +18 +9 +-2 +-13 +-25 +-35 +-45 +-53 +-61 +-65 +-69 +-70 +-72 +-71 +-70 +-68 +-69 +-70 +-71 +-67 +-61 +-49 +-36 +-21 +-7 +8 +19 +27 +31 +32 +30 +26 +18 +9 +-2 +-13 +-24 +-35 +-45 +-53 +-60 +-64 +-68 +-70 +-71 +-70 +-70 +-68 +-68 +-70 +-71 +-67 +-61 +-50 +-37 +-22 +-7 +7 +17 +26 +30 +32 +29 +25 +18 +9 +-3 +-14 +-25 +-36 +-45 +-53 +-60 +-65 +-69 +-70 +-71 +-71 +-70 +-68 +-69 +-71 +-72 +-68 +-61 +-50 +-37 +-22 +-7 +7 +18 +27 +31 +32 +30 +26 +18 +9 +-2 +-13 +-25 +-35 +-45 +-53 +-60 +-65 +-69 +-71 +-72 +-71 +-70 +-67 +-68 +-70 +-71 +-67 +-61 +-49 +-36 +-21 +-7 +7 +18 +26 +31 +32 +30 +26 +17 +9 +-3 +-14 +-26 +-36 +-46 +-54 +-61 +-65 +-69 +-71 +-72 +-71 +-70 +-68 +-69 +-70 +-71 +-67 +-60 +-49 +-37 +-21 +-7 +7 +19 +27 +31 +33 +30 +26 +19 +13 +5 +0 +-5 +-9 +-11 +-13 +-15 +-16 +-18 +-19 +-22 +-23 +-25 +-26 +-30 +-35 +-41 +-46 +-53 +-59 +-64 +-68 +-71 +-73 +-74 +-74 +-73 +-72 +-70 +-68 +-68 +-70 +-71 +-67 +-62 +-52 +-40 +-26 +-12 +1 +12 +21 +26 +29 +27 +24 +17 +9 +-2 +-13 +-25 +-35 +-45 +-53 +-60 +-65 +-69 +-71 +-72 +-71 +-70 +-68 +-69 +-71 +-72 +-68 +-61 +-50 +-37 +-23 +-8 +7 +18 +26 +30 +33 +30 +26 +19 +9 +-2 +-13 +-24 +-35 +-45 +-53 +-60 +-65 +-69 +-70 +-71 +-71 +-70 +-68 +-69 +-70 +-71 +-67 +-61 +-49 +-37 +-21 +-7 +7 +18 +27 +30 +32 +29 +26 +18 +9 +-2 +-13 +-25 +-35 +-45 +-53 +-60 +-65 +-68 +-70 +-71 +-71 +-70 +-68 +-68 +-70 +-71 +-67 +-61 +-49 +-36 +-21 +-7 +7 +18 +27 +31 +33 +30 +26 +17 +9 +-3 +-15 +-26 +-36 +-46 +-54 +-61 +-65 +-69 +-70 +-72 +-71 +-70 +-68 +-69 +-70 +-71 +-68 +-61 +-50 +-37 +-22 +-7 +7 +18 +26 +30 +32 +29 +25 +17 +9 +-3 +-14 +-26 +-36 +-46 +-53 +-60 +-65 +-69 +-71 +-72 +-71 +-70 +-68 +-68 +-70 +-71 +-67 +-60 +-49 +-36 +-21 +-6 +7 +19 +27 +31 +32 +30 +26 +18 +9 +-2 +-13 +-24 +-35 +-45 +-53 +-60 +-65 +-69 +-71 +-71 +-71 +-70 +-67 +-68 +-70 +-71 +-67 +-61 +-50 +-37 +-21 +-7 +8 +19 +27 +32 +33 +31 +27 +19 +10 +-2 +-13 +-25 +-35 +-45 +-54 +-60 +-65 +-69 +-71 +-72 +-72 +-71 +-69 +-69 +-71 +-71 +-68 +-61 +-50 +-37 +-22 +-7 +8 +19 +27 +31 +32 +29 +25 +17 +9 +-3 +-13 +-25 +-35 +-45 +-53 +-61 +-65 +-69 +-71 +-72 +-71 +-70 +-68 +-66 +-63 +-60 +-56 +-53 +-49 +-48 +-44 +-42 +-40 +-39 +-37 +-36 +-35 +-34 +-34 +-37 +-42 +-45 +-45 +-42 +-34 +-25 +-13 +-1 +10 +20 +28 +32 +33 +31 +28 +20 +11 +1 +-11 +-22 +-33 +-42 +-50 +-58 +-62 +-66 +-68 +-69 +-69 +-68 +-66 +-68 +-69 +-70 +-66 +-60 +-49 +-35 +-21 +-6 +8 +19 +27 +32 +33 +30 +27 +19 +11 +-1 +-12 +-24 +-34 +-45 +-52 +-59 +-64 +-68 +-70 +-71 +-70 +-70 +-68 +-68 +-70 +-71 +-68 +-61 +-50 +-37 +-22 +-7 +7 +18 +27 +30 +32 +29 +26 +18 +9 +-2 +-13 +-25 +-36 +-45 +-53 +-60 +-65 +-69 +-70 +-72 +-71 +-70 +-68 +-69 +-71 +-72 +-68 +-61 +-50 +-36 +-21 +-6 +7 +19 +27 +31 +33 +30 +26 +18 +9 +-2 +-13 +-25 +-35 +-45 +-53 +-60 +-65 +-69 +-70 +-72 +-71 +-70 +-68 +-69 +-71 +-71 +-67 +-61 +-50 +-37 +-21 +-7 +8 +19 +27 +31 +32 +30 +26 +18 +10 +-2 +-13 +-25 +-35 +-45 +-53 +-60 +-65 +-69 +-70 +-71 +-70 +-69 +-68 +-68 +-70 +-71 +-68 +-61 +-49 +-37 +-22 +-7 +7 +19 +27 +31 +33 +30 +26 +18 +9 +-2 +-13 +-25 +-35 +-45 +-53 +-60 +-65 +-69 +-71 +-72 +-71 +-71 +-68 +-69 +-71 +-72 +-68 +-61 +-49 +-36 +-21 +-7 +8 +19 +27 +31 +33 +30 +26 +19 +10 +-2 +-13 +-24 +-35 +-45 +-53 +-60 +-65 +-69 +-71 +-72 +-71 +-70 +-68 +-69 +-71 +-71 +-68 +-61 +-50 +-37 +-21 +-7 +7 +18 +27 +31 +33 +30 +26 +18 +9 +-2 +-13 +-25 +-35 +-45 +-53 +-60 +-65 +-69 +-70 +-72 +-71 +-70 +-68 +-69 +-71 +-72 +-68 +-61 +-50 +-37 +-22 +-7 +7 +18 +27 +31 +32 +30 +26 +20 +14 +6 +1 +-5 +-8 +-12 +-14 +-16 +-17 +-20 +-21 +-23 +-24 +-27 +-27 +-31 +-35 +-41 +-47 +-53 +-58 +-64 +-67 +-71 +-72 +-74 +-74 +-73 +-72 +-70 +-67 +-69 +-70 +-71 +-67 +-62 +-52 +-40 +-27 +-13 +1 +12 +21 +27 +30 +29 +26 +19 +10 +-1 +-12 +-24 +-34 +-44 +-52 +-59 +-64 +-68 +-70 +-72 +-71 +-71 +-69 +-69 +-71 +-72 +-68 +-61 +-50 +-37 +-22 +-7 +7 +18 +27 +31 +33 +30 +26 +19 +10 +-2 +-13 +-24 +-35 +-45 +-53 +-60 +-65 +-69 +-71 +-72 +-71 +-70 +-68 +-69 +-70 +-71 +-67 +-61 +-50 +-37 +-21 +-6 +8 +19 +27 +31 +32 +29 +26 +18 +9 +-3 +-14 +-26 +-36 +-46 +-53 +-61 +-65 +-69 +-71 +-72 +-72 +-71 +-68 +-69 +-71 +-72 +-68 +-62 +-50 +-37 +-22 +-7 +7 +19 +27 +31 +32 +30 +26 +18 +9 +-2 +-14 +-25 +-36 +-45 +-53 +-60 +-65 +-69 +-71 +-72 +-71 +-70 +-68 +-69 +-70 +-71 +-67 +-61 +-49 +-37 +-21 +-6 +8 +19 +28 +31 +34 +30 +26 +18 +9 +-2 +-13 +-25 +-35 +-46 +-53 +-60 +-65 +-69 +-71 +-72 +-71 +-70 +-68 +-69 +-71 +-72 +-67 +-61 +-50 +-36 +-21 +-6 +8 +19 +27 +31 +32 +30 +26 +18 +9 +-2 +-13 +-25 +-36 +-46 +-53 +-60 +-65 +-69 +-71 +-72 +-71 +-70 +-68 +-69 +-71 +-72 +-68 +-61 +-49 +-36 +-21 +-7 +7 +19 +27 +31 +33 +30 +26 +18 +9 +-2 +-14 +-25 +-35 +-45 +-53 +-61 +-65 +-69 +-71 +-72 +-71 +-70 +-68 +-68 +-70 +-71 +-67 +-60 +-49 +-36 +-21 +-6 +7 +18 +27 +31 +33 +30 +26 +18 +9 +-2 +-13 +-25 +-36 +-46 +-54 +-60 +-65 +-69 +-70 +-72 +-71 +-70 +-68 +-69 +-71 +-72 +-68 +-61 +-50 +-37 +-21 +-6 +7 +19 +28 +31 +32 +30 +26 +18 +9 +-3 +-14 +-25 +-36 +-46 +-53 +-61 +-65 +-69 +-70 +-72 +-71 +-70 +-68 +-69 +-70 +-71 +-67 +-61 +-49 +-37 +-21 +-7 +7 +18 +27 +31 +32 +30 +26 +18 +9 +-2 +-13 +-25 +-35 +-45 +-53 +-60 +-65 +-69 +-71 +-72 +-71 +-70 +-68 +-66 +-63 +-60 +-57 +-54 +-50 +-48 +-45 +-43 +-40 +-39 +-37 +-36 +-34 +-35 +-33 +-37 +-41 +-45 +-44 +-41 +-34 +-25 +-13 +-1 +11 +20 +29 +32 +34 +31 +28 +21 +11 +0 +-11 +-22 +-33 +-42 +-50 +-57 +-62 +-66 +-68 +-69 +-69 +-68 +-66 +-67 +-69 +-70 +-66 +-59 +-49 +-36 +-21 +-7 +8 +19 +28 +31 +33 +31 +27 +19 +11 +-1 +-12 +-24 +-34 +-44 +-52 +-60 +-65 +-69 +-71 +-72 +-71 +-70 +-68 +-69 +-70 +-72 +-68 +-61 +-51 +-37 +-22 +-7 +8 +19 +28 +31 +33 +30 +25 +19 +13 +6 +0 +-5 +-9 +-13 +-14 +-16 +-17 +-19 +-20 +-22 +-24 +-26 +-27 +-31 +-35 +-42 +-47 +-53 +-58 +-64 +-67 +-71 +-73 +-75 +-75 +-74 +-73 +-71 +-68 +-69 +-71 +-71 +-68 +-62 +-52 +-40 +-26 +-13 +1 +13 +22 +27 +30 +29 +26 +18 +10 +-1 +-12 +-24 +-34 +-45 +-53 +-60 +-65 +-69 +-70 +-72 +-71 +-71 +-68 +-66 +-63 +-61 +-57 +-54 +-51 +-48 +-45 +-43 +-41 +-39 +-37 +-36 +-35 +-34 +-34 +-37 +-41 +-45 +-45 +-42 +-34 +-25 +-14 +-2 +10 +20 +27 +31 +34 +32 +29 +22 +13 +2 +-9 +-21 +-32 +-42 +-49 +-57 +-61 +-66 +-68 +-70 +-69 +-69 +-67 +-68 +-70 +-71 +-67 +-60 +-49 +-37 +-22 +-7 +7 +18 +27 +31 +33 +30 +27 +19 +11 +-1 +-13 +-24 +-35 +-45 +-52 +-60 +-65 +-69 +-71 +-72 +-72 +-70 +-68 +-69 +-71 +-72 +-67 +-61 +-50 +-37 +-21 +-7 +7 +19 +27 +31 +33 +30 +26 +19 +13 +6 +0 +-5 +-9 +-11 +-13 +-15 +-16 +-18 +-20 +-22 +-24 +-26 +-28 +-31 +-35 +-41 +-47 +-53 +-58 +-64 +-68 +-71 +-73 +-74 +-74 +-73 +-71 +-70 +-67 +-65 +-61 +-59 +-56 +-53 +-50 +-48 +-46 +-44 +-41 +-41 +-39 +-39 +-37 +-37 +-36 +-39 +-44 +-48 +-47 +-43 +-36 +-28 +-17 +-5 +7 +16 +24 +29 +32 +31 +29 +24 +18 +12 +7 +1 +-3 +-7 +-10 +-12 +-14 +-17 +-18 +-20 +-21 +-24 +-25 +-29 +-33 +-39 +-45 +-52 +-57 +-63 +-66 +-70 +-71 +-73 +-73 +-73 +-71 +-70 +-67 +-65 +-61 +-59 +-55 +-53 +-50 +-47 +-45 +-43 +-41 +-40 +-39 +-38 +-37 +-36 +-36 +-39 +-43 +-46 +-46 +-43 +-36 +-28 +-17 +-6 +6 +16 +23 +29 +32 +31 +29 +24 +19 +12 +7 +1 +-3 +-8 +-11 +-13 +-15 +-18 +-18 +-20 +-22 +-23 +-25 +-28 +-33 +-39 +-45 +-52 +-57 +-63 +-67 +-71 +-72 +-74 +-75 +-74 +-73 +-71 +-68 +-66 +-63 +-60 +-56 +-53 +-51 +-48 +-46 +-44 +-42 +-41 +-39 +-38 +-37 +-37 +-36 +-39 +-44 +-47 +-46 +-43 +-36 +-28 +-16 +-6 +6 +16 +24 +29 +32 +32 +30 +24 +20 +13 +7 +1 +-3 +-7 +-10 +-13 +-15 +-17 +-18 +-21 +-22 +-23 +-25 +-28 +-33 +-39 +-45 +-51 +-57 +-63 +-67 +-70 +-71 +-73 +-73 +-72 +-70 +-69 +-66 +-67 +-69 +-71 +-67 +-61 +-51 +-40 +-26 +-12 +1 +12 +22 +27 +30 +28 +25 +18 +10 +-1 +-12 +-23 +-34 +-45 +-52 +-59 +-64 +-69 +-71 +-72 +-72 +-71 +-69 +-67 +-64 +-61 +-57 +-54 +-50 +-47 +-45 +-42 +-40 +-39 +-37 +-36 +-35 +-35 +-33 +-36 +-41 +-44 +-44 +-41 +-34 +-25 +-13 +-3 +10 +19 +28 +32 +34 +32 +29 +21 +13 +1 +-9 +-21 +-31 +-42 +-50 +-57 +-62 +-66 +-68 +-69 +-69 +-68 +-67 +-68 +-70 +-71 +-67 +-60 +-49 +-36 +-21 +-7 +8 +19 +28 +32 +33 +31 +27 +20 +14 +7 +1 +-4 +-8 +-11 +-13 +-15 +-17 +-20 +-20 +-23 +-24 +-27 +-27 +-31 +-35 +-41 +-47 +-53 +-59 +-64 +-67 +-71 +-73 +-74 +-73 +-73 +-72 +-70 +-68 +-68 +-70 +-71 +-68 +-62 +-52 +-40 +-26 +-12 +1 +13 +22 +27 +30 +28 +25 +18 +10 +-2 +-13 +-24 +-34 +-44 +-52 +-60 +-65 +-69 +-70 +-72 +-71 +-71 +-68 +-66 +-63 +-60 +-56 +-54 +-50 +-48 +-44 +-42 +-40 +-38 +-37 +-36 +-35 +-34 +-34 +-37 +-41 +-45 +-45 +-41 +-34 +-25 +-13 +-2 +10 +20 +27 +32 +33 +32 +29 +23 +17 +10 +5 +-1 +-5 +-9 +-11 +-14 +-15 +-17 +-18 +-21 +-22 +-24 +-25 +-29 +-33 +-40 +-45 +-52 +-58 +-63 +-67 +-71 +-73 +-74 +-74 +-74 +-72 +-70 +-67 +-65 +-62 +-59 +-56 +-53 +-50 +-49 +-46 +-44 +-42 +-40 +-39 +-38 +-37 +-36 +-35 +-39 +-43 +-47 +-46 +-43 +-36 +-28 +-17 +-6 +6 +16 +24 +29 +32 +31 +29 +22 +14 +3 +-7 +-19 +-29 +-39 +-48 +-55 +-60 +-65 +-67 +-69 +-68 +-68 +-66 +-67 +-69 +-70 +-67 +-60 +-50 +-37 +-22 +-7 +6 +18 +27 +31 +33 +31 +27 +21 +15 +9 +2 +-3 +-7 +-11 +-12 +-15 +-16 +-19 +-20 +-21 +-23 +-25 +-26 +-30 +-34 +-41 +-47 +-53 +-58 +-64 +-68 +-71 +-73 +-75 +-74 +-73 +-72 +-70 +-67 +-65 +-63 +-60 +-56 +-53 +-50 +-48 +-45 +-44 +-41 +-40 +-38 +-38 +-36 +-36 +-35 +-39 +-43 +-46 +-46 +-43 +-35 +-27 +-16 +-5 +7 +16 +25 +30 +33 +32 +30 +22 +14 +3 +-9 +-20 +-31 +-41 +-49 +-56 +-61 +-66 +-68 +-70 +-69 +-69 +-67 +-68 +-70 +-71 +-67 +-61 +-50 +-37 +-22 +-7 +7 +18 +27 +31 +33 +30 +27 +21 +15 +7 +1 +-4 +-8 +-11 +-13 +-15 +-16 +-19 +-20 +-22 +-23 +-25 +-26 +-30 +-34 +-40 +-46 +-53 +-58 +-64 +-67 +-71 +-73 +-74 +-74 +-74 +-72 +-71 +-68 +-69 +-71 +-72 +-68 +-61 +-52 +-40 +-26 +-12 +2 +13 +22 +27 +30 +29 +26 +19 +10 +-1 +-12 +-24 +-35 +-44 +-52 +-59 +-65 +-69 +-71 +-72 +-71 +-71 +-68 +-69 +-71 +-71 +-68 +-61 +-50 +-37 +-22 +-8 +7 +18 +27 +31 +32 +30 +25 +18 +9 +-2 +-14 +-26 +-36 +-46 +-54 +-61 +-65 +-69 +-71 +-72 +-71 +-71 +-68 +-67 +-63 +-61 +-57 +-54 +-50 +-47 +-45 +-43 +-40 +-39 +-37 +-37 +-35 +-35 +-34 +-37 +-42 +-45 +-45 +-42 +-34 +-25 +-13 +-1 +11 +20 +28 +32 +34 +32 +29 +22 +16 +10 +4 +-1 +-5 +-9 +-11 +-13 +-15 +-17 +-17 +-20 +-21 +-23 +-25 +-28 +-32 +-38 +-44 +-52 +-57 +-63 +-66 +-70 +-72 +-74 +-74 +-73 +-71 +-70 +-67 +-68 +-70 +-70 +-67 +-61 +-51 +-39 +-26 +-11 +2 +13 +23 +27 +31 +29 +26 +19 +10 +-1 +-12 +-24 +-34 +-44 +-52 +-60 +-65 +-69 +-71 +-72 +-72 +-71 +-69 +-67 +-63 +-60 +-57 +-54 +-50 +-48 +-45 +-43 +-40 +-39 +-37 +-37 +-35 +-35 +-35 +-37 +-42 +-45 +-45 +-42 +-34 +-25 +-13 +-1 +11 +20 +28 +32 +33 +31 +29 +21 +12 +1 +-10 +-22 +-33 +-43 +-50 +-58 +-63 +-67 +-68 +-70 +-69 +-69 +-67 +-67 +-69 +-70 +-66 +-60 +-49 +-36 +-20 +-6 +7 +19 +27 +31 +33 +30 +27 +19 +10 +-1 +-13 +-25 +-35 +-45 +-53 +-60 +-65 +-69 +-71 +-72 +-71 +-70 +-68 +-68 +-71 +-71 +-68 +-61 +-49 +-37 +-22 +-7 +7 +19 +27 +31 +32 +30 +26 +19 +13 +6 +1 +-4 +-8 +-11 +-13 +-15 +-17 +-19 +-20 +-22 +-23 +-26 +-27 +-31 +-35 +-41 +-47 +-53 +-59 +-65 +-68 +-72 +-73 +-75 +-74 +-74 +-72 +-70 +-68 +-68 +-70 +-71 +-67 +-61 +-52 +-40 +-26 +-11 +1 +13 +22 +27 +30 +28 +25 +18 +10 +-1 +-12 +-24 +-34 +-44 +-51 +-59 +-64 +-68 +-70 +-72 +-71 +-70 +-68 +-69 +-71 +-72 +-68 +-62 +-50 +-37 +-23 +-7 +7 +18 +27 +31 +33 +30 +27 +19 +10 +-1 +-12 +-24 +-35 +-45 +-53 +-60 +-65 +-69 +-71 +-72 +-71 +-71 +-68 +-66 +-63 +-60 +-57 +-54 +-50 +-48 +-45 +-42 +-40 +-39 +-36 +-35 +-34 +-35 +-34 +-37 +-42 +-45 +-45 +-42 +-34 +-25 +-13 +-2 +11 +20 +28 +32 +33 +31 +28 +22 +16 +9 +4 +-2 +-5 +-9 +-11 +-13 +-15 +-16 +-18 +-20 +-21 +-23 +-25 +-28 +-33 +-39 +-46 +-52 +-58 +-63 +-67 +-71 +-72 +-73 +-73 +-73 +-71 +-69 +-67 +-65 +-61 +-59 +-55 +-53 +-50 +-48 +-45 +-44 +-41 +-40 +-39 +-38 +-37 +-36 +-35 +-39 +-43 +-46 +-46 +-43 +-36 +-27 +-17 +-5 +7 +17 +26 +30 +33 +32 +29 +23 +15 +3 +-8 +-20 +-31 +-41 +-49 +-56 +-61 +-66 +-68 +-69 +-69 +-69 +-67 +-68 +-70 +-70 +-67 +-60 +-49 +-37 +-22 +-8 +7 +17 +27 +31 +32 +30 +27 +20 +15 +7 +2 +-3 +-7 +-10 +-13 +-15 +-16 +-18 +-19 +-22 +-23 +-25 +-27 +-31 +-35 +-41 +-47 +-54 +-59 +-64 +-68 +-72 +-73 +-75 +-74 +-74 +-72 +-70 +-68 +-69 +-71 +-71 +-68 +-62 +-52 +-40 +-26 +-12 +1 +13 +22 +26 +30 +28 +25 +18 +9 +-2 +-13 +-25 +-35 +-45 +-53 +-60 +-65 +-69 +-72 +-73 +-72 +-72 +-69 +-67 +-63 +-60 +-57 +-53 +-50 +-48 +-45 +-43 +-41 +-39 +-37 +-36 +-35 +-35 +-34 +-37 +-41 +-44 +-44 +-42 +-35 +-25 +-13 +-1 +11 +20 +28 +32 +34 +32 +29 +21 +12 +1 +-10 +-22 +-32 +-42 +-50 +-58 +-63 +-66 +-68 +-70 +-69 +-68 +-66 +-68 +-69 +-70 +-67 +-60 +-49 +-36 +-21 +-6 +8 +19 +28 +32 +34 +31 +27 +20 +14 +7 +1 +-4 +-7 +-10 +-13 +-15 +-16 +-17 +-19 +-22 +-23 +-25 +-26 +-30 +-34 +-40 +-46 +-53 +-58 +-64 +-67 +-71 +-72 +-74 +-74 +-74 +-72 +-71 +-68 +-65 +-63 +-60 +-57 +-54 +-51 +-49 +-47 +-45 +-43 +-41 +-40 +-39 +-38 +-37 +-36 +-39 +-44 +-47 +-47 +-43 +-37 +-28 +-17 +-5 +7 +16 +25 +29 +33 +31 +29 +22 +14 +2 +-8 +-20 +-31 +-41 +-49 +-57 +-61 +-66 +-68 +-69 +-69 +-69 +-67 +-69 +-71 +-72 +-68 +-61 +-50 +-37 +-22 +-7 +7 +18 +27 +31 +33 +31 +27 +21 +15 +8 +2 +-4 +-7 +-11 +-13 +-15 +-17 +-19 +-20 +-22 +-23 +-25 +-27 +-31 +-34 +-41 +-47 +-53 +-58 +-64 +-68 +-71 +-73 +-74 +-74 +-74 +-71 +-70 +-67 +-65 +-61 +-59 +-56 +-53 +-50 +-48 +-45 +-44 +-41 +-40 +-39 +-38 +-37 +-37 +-36 +-39 +-43 +-47 +-46 +-43 +-37 +-27 +-16 +-5 +7 +16 +25 +29 +33 +32 +30 +24 +19 +12 +7 +1 +-3 +-8 +-10 +-13 +-15 +-17 +-18 +-21 +-22 +-24 +-25 +-29 +-33 +-40 +-46 +-52 +-58 +-63 +-67 +-71 +-73 +-74 +-74 +-74 +-72 +-70 +-68 +-65 +-62 +-59 +-56 +-53 +-51 +-48 +-46 +-45 +-42 +-41 +-40 +-39 +-37 +-38 +-36 +-39 +-43 +-46 +-46 +-43 +-36 +-27 +-16 +-5 +7 +16 +25 +30 +33 +31 +30 +25 +19 +13 +7 +1 +-3 +-7 +-10 +-13 +-14 +-17 +-18 +-20 +-22 +-23 +-25 +-29 +-33 +-39 +-45 +-52 +-58 +-63 +-67 +-70 +-72 +-73 +-73 +-73 +-72 +-70 +-67 +-68 +-70 +-70 +-67 +-61 +-52 +-40 +-26 +-13 +1 +12 +22 +27 +30 +29 +26 +19 +11 +-1 +-11 +-24 +-34 +-44 +-53 +-60 +-65 +-69 +-71 +-73 +-72 +-71 +-69 +-70 +-72 +-72 +-69 +-62 +-51 +-37 +-23 +-8 +7 +18 +26 +31 +33 +30 +26 +19 +10 +-2 +-13 +-25 +-35 +-45 +-53 +-60 +-65 +-69 +-71 +-72 +-72 +-71 +-69 +-70 +-71 +-72 +-69 +-61 +-50 +-37 +-22 +-7 +8 +19 +26 +31 +32 +30 +26 +19 +9 +-2 +-13 +-25 +-35 +-45 +-53 +-60 +-65 +-69 +-71 +-72 +-71 +-71 +-68 +-69 +-71 +-72 +-68 +-61 +-50 +-37 +-21 +-7 +8 +19 +29 +32 +34 +31 +27 +19 +10 +-1 +-13 +-25 +-35 +-45 +-53 +-61 +-65 +-69 +-71 +-72 +-71 +-70 +-68 +-69 +-70 +-71 +-68 +-60 +-49 +-36 +-21 +-6 +9 +20 +29 +32 +33 +30 +26 +19 +9 +-3 +-14 +-25 +-35 +-46 +-53 +-61 +-65 +-69 +-71 +-72 +-71 +-71 +-68 +-69 +-70 +-72 +-68 +-61 +-49 +-36 +-21 +-6 +8 +19 +28 +32 +33 +31 +26 +19 +9 +-2 +-13 +-25 +-35 +-45 +-53 +-61 +-65 +-69 +-71 +-72 +-72 +-71 +-69 +-70 +-71 +-72 +-68 +-62 +-51 +-37 +-22 +-8 +7 +19 +28 +31 +33 +31 +27 +19 +10 +-1 +-13 +-24 +-35 +-45 +-53 +-60 +-65 +-68 +-71 +-72 +-71 +-70 +-68 +-69 +-71 +-72 +-69 +-61 +-50 +-36 +-21 +-6 +8 +19 +28 +31 +33 +30 +26 +18 +9 +-2 +-14 +-26 +-36 +-47 +-54 +-61 +-66 +-70 +-72 +-73 +-72 +-71 +-69 +-66 +-63 +-61 +-57 +-54 +-50 +-48 +-45 +-42 +-40 +-39 +-37 +-36 +-35 +-34 +-34 +-37 +-42 +-45 +-45 +-41 +-35 +-25 +-13 +-1 +11 +21 +29 +33 +34 +32 +29 +21 +13 +1 +-10 +-22 +-32 +-42 +-50 +-57 +-63 +-67 +-69 +-70 +-70 +-69 +-67 +-68 +-70 +-71 +-67 +-61 +-49 +-36 +-21 +-7 +8 +19 +28 +33 +34 +31 +27 +20 +11 +-1 +-12 +-24 +-35 +-45 +-53 +-60 +-65 +-68 +-70 +-72 +-71 +-71 +-68 +-69 +-71 +-71 +-68 +-61 +-49 +-36 +-21 +-6 +9 +19 +28 +32 +33 +31 +26 +19 +10 +-2 +-14 +-26 +-37 +-47 +-54 +-61 +-66 +-71 +-72 +-73 +-73 +-71 +-69 +-70 +-72 +-72 +-69 +-61 +-50 +-37 +-21 +-6 +8 +19 +28 +31 +33 +31 +27 +19 +10 +-1 +-12 +-25 +-35 +-45 +-53 +-61 +-65 +-69 +-71 +-72 +-72 +-71 +-69 +-70 +-71 +-72 +-68 +-62 +-51 +-37 +-22 +-7 +7 +19 +28 +31 +33 +30 +26 +19 +10 +-2 +-13 +-25 +-35 +-45 +-53 +-60 +-65 +-69 +-71 +-72 +-71 +-70 +-68 +-69 +-70 +-71 +-68 +-61 +-49 +-37 +-21 +-6 +9 +19 +29 +32 +34 +31 +27 +19 +10 +-3 +-14 +-25 +-35 +-45 +-53 +-60 +-65 +-69 +-71 +-71 +-71 +-70 +-68 +-69 +-70 +-71 +-67 +-61 +-50 +-36 +-21 +-6 +8 +19 +28 +31 +33 +30 +27 +19 +10 +-1 +-13 +-25 +-35 +-45 +-53 +-61 +-65 +-69 +-71 +-72 +-71 +-70 +-68 +-69 +-71 +-72 +-68 +-62 +-50 +-37 +-21 +-7 +8 +19 +27 +31 +33 +30 +26 +20 +13 +6 +0 +-4 +-8 +-11 +-13 +-16 +-17 +-19 +-21 +-23 +-24 +-26 +-27 +-31 +-35 +-42 +-47 +-53 +-59 +-64 +-68 +-71 +-73 +-75 +-74 +-75 +-73 +-71 +-68 +-66 +-63 +-59 +-56 +-53 +-50 +-49 +-45 +-44 +-42 +-41 +-39 +-38 +-37 +-37 +-36 +-39 +-43 +-47 +-46 +-43 +-36 +-27 +-16 +-5 +7 +17 +26 +30 +33 +32 +29 +22 +14 +3 +-8 +-20 +-30 +-41 +-49 +-56 +-61 +-65 +-67 +-69 +-69 +-69 +-66 +-68 +-70 +-71 +-68 +-61 +-50 +-37 +-22 +-7 +7 +18 +27 +31 +33 +31 +27 +21 +15 +8 +1 +-3 +-7 +-11 +-13 +-16 +-17 +-19 +-20 +-22 +-24 +-26 +-28 +-31 +-35 +-42 +-47 +-54 +-59 +-65 +-68 +-72 +-74 +-75 +-75 +-74 +-72 +-71 +-68 +-69 +-70 +-71 +-68 +-62 +-52 +-41 +-26 +-12 +1 +13 +23 +28 +30 +29 +26 +19 +10 +-1 +-12 +-24 +-35 +-44 +-53 +-60 +-65 +-69 +-71 +-72 +-72 +-71 +-69 +-67 +-64 +-61 +-57 +-54 +-51 +-48 +-45 +-43 +-40 +-39 +-37 +-36 +-35 +-35 +-34 +-37 +-42 +-45 +-45 +-42 +-34 +-25 +-13 +-2 +11 +20 +28 +31 +34 +32 +29 +22 +13 +2 +-10 +-21 +-32 +-42 +-50 +-57 +-62 +-66 +-68 +-69 +-69 +-68 +-66 +-67 +-68 +-69 +-66 +-60 +-49 +-36 +-21 +-6 +8 +19 +28 +33 +34 +31 +28 +20 +11 +-1 +-12 +-24 +-34 +-45 +-53 +-60 +-65 +-69 +-70 +-72 +-71 +-71 +-69 +-69 +-72 +-73 +-69 +-62 +-51 +-37 +-22 +-7 +7 +19 +28 +31 +33 +30 +26 +18 +9 +-2 +-13 +-25 +-36 +-46 +-53 +-61 +-65 +-70 +-71 +-73 +-72 +-71 +-69 +-70 +-71 +-72 +-68 +-62 +-50 +-37 +-21 +-6 +8 +19 +28 +31 +34 +30 +26 +18 +9 +-2 +-13 +-25 +-35 +-45 +-54 +-61 +-65 +-69 +-71 +-72 +-71 +-70 +-69 +-69 +-71 +-72 +-69 +-62 +-50 +-37 +-22 +-7 +7 +18 +27 +31 +33 +30 +26 +19 +14 +6 +1 +-4 +-7 +-11 +-12 +-14 +-15 +-18 +-19 +-21 +-23 +-25 +-26 +-30 +-35 +-41 +-47 +-53 +-59 +-65 +-68 +-72 +-74 +-75 +-75 +-75 +-73 +-71 +-68 +-69 +-70 +-71 +-67 +-61 +-51 +-39 +-25 +-11 +2 +13 +23 +27 +31 +29 +26 +18 +9 +-2 +-13 +-25 +-35 +-46 +-53 +-61 +-66 +-69 +-71 +-72 +-72 +-71 +-69 +-70 +-72 +-73 +-69 +-62 +-51 +-38 +-22 +-7 +7 +18 +27 +31 +33 +30 +27 +19 +10 +-1 +-13 +-24 +-35 +-45 +-53 +-60 +-65 +-69 +-71 +-72 +-72 +-71 +-69 +-70 +-71 +-73 +-69 +-61 +-50 +-37 +-21 +-6 +8 +19 +28 +31 +33 +30 +26 +18 +10 +-2 +-13 +-25 +-36 +-47 +-55 +-61 +-66 +-70 +-71 +-73 +-72 +-71 +-68 +-66 +-63 +-59 +-55 +-53 +-49 +-47 +-44 +-42 +-39 +-37 +-36 +-35 +-34 +-34 +-33 +-37 +-41 +-45 +-45 +-42 +-34 +-25 +-13 +-1 +11 +21 +29 +33 +35 +33 +29 +23 +17 +10 +4 +-1 +-5 +-9 +-11 +-13 +-15 +-17 +-18 +-20 +-22 +-24 +-26 +-29 +-34 +-40 +-46 +-52 +-57 +-63 +-67 +-71 +-72 +-74 +-74 +-74 +-72 +-71 +-68 +-69 +-70 +-71 +-68 +-62 +-52 +-41 +-27 +-12 +1 +13 +22 +27 +31 +29 +26 +19 +11 +-1 +-12 +-23 +-34 +-44 +-52 +-60 +-65 +-69 +-71 +-72 +-72 +-71 +-69 +-67 +-64 +-61 +-57 +-55 +-51 +-48 +-45 +-43 +-40 +-38 +-36 +-36 +-34 +-34 +-33 +-37 +-41 +-45 +-46 +-43 +-35 +-25 +-13 +-2 +11 +21 +29 +33 +35 +33 +30 +23 +18 +11 +5 +-1 +-4 +-8 +-11 +-13 +-14 +-16 +-18 +-20 +-21 +-23 +-25 +-28 +-33 +-39 +-46 +-52 +-58 +-64 +-68 +-71 +-73 +-75 +-74 +-74 +-72 +-70 +-67 +-65 +-62 +-60 +-56 +-53 +-50 +-48 +-45 +-44 +-42 +-40 +-39 +-38 +-37 +-37 +-36 +-39 +-44 +-47 +-46 +-43 +-37 +-28 +-16 +-5 +7 +17 +26 +30 +33 +32 +30 +23 +14 +3 +-8 +-20 +-30 +-40 +-48 +-56 +-61 +-65 +-68 +-69 +-69 +-69 +-67 +-68 +-70 +-71 +-67 +-61 +-50 +-37 +-22 +-7 +7 +18 +27 +31 +34 +32 +28 +21 +11 +0 +-12 +-24 +-34 +-44 +-53 +-60 +-65 +-69 +-71 +-73 +-72 +-71 +-69 +-71 +-72 +-73 +-68 +-61 +-50 +-37 +-21 +-6 +9 +20 +28 +32 +34 +31 +27 +19 +10 +-2 +-13 +-25 +-35 +-46 +-53 +-60 +-65 +-70 +-71 +-72 +-72 +-71 +-69 +-70 +-72 +-73 +-69 +-61 +-51 +-37 +-21 +-6 +8 +19 +29 +32 +33 +31 +27 +20 +10 +-1 +-13 +-25 +-35 +-46 +-53 +-61 +-66 +-69 +-72 +-73 +-72 +-71 +-68 +-69 +-71 +-72 +-68 +-61 +-49 +-36 +-20 +-6 +9 +20 +29 +32 +34 +31 +27 +19 +10 +-2 +-13 +-25 +-36 +-46 +-54 +-61 +-66 +-70 +-72 +-73 +-72 +-71 +-69 +-70 +-71 +-72 +-68 +-62 +-50 +-37 +-21 +-6 +8 +19 +28 +32 +34 +30 +27 +19 +10 +-2 +-13 +-25 +-36 +-46 +-53 +-61 +-65 +-69 +-71 +-72 +-72 +-71 +-68 +-69 +-71 +-72 +-68 +-61 +-50 +-37 +-21 +-6 +8 +19 +28 +32 +33 +31 +27 +19 +10 +-1 +-13 +-24 +-35 +-45 +-53 +-61 +-65 +-69 +-71 +-73 +-72 +-71 +-69 +-70 +-71 +-73 +-68 +-62 +-50 +-37 +-21 +-7 +8 +19 +28 +32 +34 +30 +26 +19 +10 +-1 +-13 +-25 +-35 +-46 +-54 +-61 +-66 +-70 +-72 +-73 +-72 +-71 +-70 +-70 +-72 +-72 +-68 +-61 +-50 +-37 +-21 +-6 +9 +20 +29 +33 +34 +31 +27 +20 +14 +7 +1 +-4 +-7 +-10 +-12 +-15 +-16 +-19 +-19 +-22 +-24 +-26 +-27 +-30 +-35 +-41 +-47 +-53 +-59 +-65 +-68 +-72 +-74 +-75 +-75 +-74 +-73 +-71 +-68 +-69 +-71 +-72 +-68 +-62 +-53 +-40 +-26 +-12 +2 +12 +22 +27 +30 +29 +26 +19 +10 +-1 +-12 +-25 +-35 +-45 +-53 +-60 +-65 +-69 +-71 +-73 +-72 +-71 +-69 +-71 +-72 +-73 +-69 +-62 +-51 +-37 +-22 +-7 +7 +18 +27 +31 +33 +31 +26 +19 +10 +-1 +-13 +-25 +-35 +-46 +-53 +-61 +-65 +-69 +-71 +-72 +-72 +-71 +-69 +-69 +-71 +-72 +-68 +-61 +-50 +-37 +-21 +-6 +8 +19 +29 +32 +34 +31 +27 +20 +10 +-1 +-13 +-25 +-35 +-46 +-54 +-61 +-66 +-69 +-71 +-72 +-72 +-70 +-68 +-70 +-72 +-72 +-68 +-62 +-50 +-36 +-20 +-5 +9 +20 +29 +32 +34 +31 +27 +19 +10 +-1 +-13 +-25 +-35 +-45 +-53 +-61 +-65 +-69 +-71 +-72 +-72 +-71 +-69 +-69 +-71 +-72 +-68 +-61 +-49 +-36 +-22 +-6 +8 +20 +29 +32 +34 +31 +27 +19 +10 +-2 +-14 +-25 +-36 +-46 +-54 +-61 +-66 +-70 +-72 +-73 +-73 +-71 +-69 +-70 +-72 +-73 +-69 +-62 +-51 +-37 +-22 +-6 +8 +19 +28 +32 +33 +30 +26 +19 +9 +-2 +-13 +-25 +-36 +-46 +-54 +-61 +-66 +-70 +-72 +-73 +-72 +-71 +-69 +-70 +-73 +-73 +-69 +-62 +-51 +-37 +-21 +-6 +8 +20 +29 +33 +34 +31 +27 +20 +11 +-1 +-12 +-24 +-35 +-45 +-53 +-61 +-65 +-69 +-71 +-73 +-72 +-71 +-69 +-70 +-72 +-72 +-69 +-62 +-50 +-37 +-21 +-6 +8 +20 +28 +33 +34 +31 +27 +19 +11 +-1 +-13 +-25 +-35 +-45 +-54 +-61 +-65 +-69 +-71 +-73 +-72 +-71 +-68 +-66 +-63 +-59 +-56 +-54 +-50 +-47 +-44 +-42 +-40 +-38 +-37 +-36 +-35 +-35 +-34 +-38 +-42 +-46 +-45 +-42 +-35 +-25 +-13 +-1 +11 +21 +29 +33 +35 +33 +30 +22 +13 +1 +-10 +-22 +-33 +-42 +-51 +-58 +-64 +-67 +-70 +-71 +-70 +-70 +-67 +-68 +-70 +-71 +-67 +-61 +-50 +-36 +-21 +-6 +9 +20 +29 +33 +35 +31 +28 +20 +11 +-1 +-13 +-24 +-35 +-45 +-53 +-61 +-65 +-70 +-72 +-73 +-72 +-71 +-69 +-70 +-71 +-72 +-68 +-62 +-50 +-37 +-21 +-6 +8 +19 +28 +32 +33 +31 +27 +19 +10 +-1 +-13 +-24 +-35 +-45 +-53 +-60 +-65 +-70 +-71 +-72 +-72 +-71 +-68 +-69 +-71 +-72 +-68 +-61 +-50 +-37 +-21 +-6 +8 +20 +29 +32 +34 +31 +27 +19 +9 +-2 +-13 +-24 +-35 +-45 +-53 +-61 +-65 +-69 +-71 +-73 +-72 +-71 +-69 +-69 +-71 +-72 +-69 +-62 +-51 +-37 +-22 +-6 +8 +20 +28 +32 +33 +31 +27 +19 +10 +-2 +-13 +-25 +-36 +-47 +-54 +-61 +-65 +-70 +-72 +-73 +-72 +-71 +-69 +-69 +-71 +-72 +-68 +-61 +-50 +-37 +-21 +-6 +9 +20 +29 +33 +34 +31 +27 +19 +10 +-2 +-13 +-25 +-35 +-46 +-54 +-61 +-65 +-70 +-71 +-73 +-72 +-71 +-69 +-69 +-72 +-72 +-69 +-62 +-50 +-37 +-21 +-6 +8 +20 +29 +32 +34 +30 +27 +19 +9 +-2 +-13 +-25 +-35 +-45 +-53 +-60 +-65 +-69 +-71 +-72 +-71 +-70 +-68 +-69 +-71 +-72 +-68 +-62 +-50 +-37 +-21 +-6 +9 +20 +28 +32 +34 +30 +26 +19 +10 +-2 +-14 +-26 +-36 +-46 +-54 +-61 +-66 +-70 +-71 +-73 +-71 +-71 +-69 +-69 +-71 +-72 +-68 +-61 +-50 +-37 +-21 +-6 +9 +20 +29 +33 +34 +31 +27 +21 +15 +7 +1 +-4 +-8 +-11 +-13 +-15 +-17 +-19 +-20 +-23 +-24 +-26 +-28 +-31 +-35 +-41 +-47 +-54 +-59 +-65 +-68 +-72 +-73 +-75 +-75 +-75 +-73 +-72 +-69 +-70 +-72 +-72 +-69 +-63 +-53 +-40 +-26 +-12 +2 +13 +23 +28 +31 +29 +26 +19 +11 +-1 +-12 +-24 +-35 +-45 +-53 +-61 +-65 +-70 +-72 +-73 +-72 +-71 +-69 +-70 +-72 +-73 +-69 +-62 +-50 +-37 +-22 +-7 +8 +19 +28 +32 +34 +31 +28 +20 +11 +-1 +-12 +-25 +-35 +-45 +-53 +-61 +-65 +-70 +-72 +-73 +-72 +-72 +-69 +-70 +-72 +-73 +-69 +-62 +-50 +-37 +-21 +-6 +8 +20 +28 +32 +34 +30 +27 +19 +9 +-2 +-13 +-25 +-36 +-46 +-54 +-61 +-66 +-70 +-71 +-73 +-72 +-71 +-69 +-70 +-72 +-73 +-69 +-62 +-50 +-37 +-21 +-6 +8 +19 +28 +32 +33 +31 +27 +18 +9 +-2 +-13 +-25 +-35 +-46 +-54 +-61 +-65 +-69 +-71 +-72 +-71 +-70 +-68 +-69 +-71 +-71 +-68 +-61 +-50 +-36 +-21 +-6 +9 +20 +29 +33 +34 +31 +27 +19 +10 +-2 +-12 +-24 +-35 +-45 +-53 +-60 +-65 +-69 +-71 +-72 +-72 +-70 +-68 +-68 +-71 +-72 +-68 +-61 +-49 +-37 +-20 +-6 +8 +20 +29 +32 +33 +30 +27 +19 +10 +-2 +-13 +-25 +-36 +-46 +-54 +-62 +-67 +-71 +-72 +-73 +-72 +-71 +-69 +-70 +-71 +-72 +-68 +-62 +-50 +-37 +-21 +-6 +9 +20 +28 +32 +34 +31 +27 +19 +10 +-1 +-13 +-25 +-35 +-45 +-54 +-61 +-65 +-69 +-71 +-72 +-71 +-70 +-68 +-69 +-71 +-72 +-68 +-61 +-49 +-36 +-21 +-6 +9 +20 +28 +32 +33 +31 +26 +19 +10 +-2 +-13 +-25 +-36 +-46 +-54 +-61 +-66 +-70 +-72 +-73 +-73 +-72 +-69 +-70 +-73 +-73 +-69 +-62 +-50 +-37 +-21 +-6 +9 +20 +29 +33 +34 +31 +27 +19 +10 +-2 +-13 +-25 +-35 +-46 +-54 +-61 +-66 +-70 +-71 +-73 +-72 +-71 +-69 +-70 +-72 +-73 +-69 +-62 +-51 +-37 +-21 +-6 +9 +20 +29 +33 +34 +31 +27 +19 +10 +-2 +-13 +-25 +-37 +-46 +-54 +-61 +-65 +-69 +-71 +-73 +-71 +-71 +-69 +-66 +-63 +-60 +-57 +-54 +-50 +-47 +-44 +-42 +-40 +-39 +-37 +-36 +-35 +-34 +-34 +-37 +-41 +-46 +-45 +-42 +-34 +-25 +-13 +-1 +11 +21 +29 +33 +35 +33 +30 +22 +13 +2 +-10 +-21 +-32 +-42 +-50 +-58 +-63 +-67 +-69 +-70 +-70 +-69 +-67 +-68 +-70 +-71 +-67 +-61 +-49 +-36 +-20 +-5 +9 +20 +29 +33 +34 +31 +28 +20 +11 +-1 +-12 +-25 +-35 +-45 +-53 +-61 +-65 +-69 +-71 +-72 +-72 +-71 +-69 +-70 +-72 +-72 +-69 +-62 +-51 +-37 +-22 +-6 +8 +19 +28 +32 +34 +31 +27 +20 +15 +7 +1 +-4 +-8 +-11 +-14 +-16 +-17 +-19 +-20 +-23 +-24 +-26 +-28 +-31 +-36 +-43 +-49 +-55 +-60 +-66 +-69 +-72 +-74 +-75 +-76 +-75 +-73 +-72 +-69 +-69 +-71 +-71 +-68 +-62 +-52 +-39 +-25 +-11 +3 +15 +24 +29 +32 +30 +27 +20 +11 +0 +-11 +-23 +-34 +-44 +-52 +-59 +-65 +-69 +-71 +-73 +-72 +-72 +-69 +-67 +-64 +-61 +-57 +-54 +-50 +-48 +-45 +-43 +-41 +-39 +-37 +-36 +-35 +-34 +-34 +-37 +-41 +-45 +-45 +-41 +-34 +-25 +-13 +-1 +11 +22 +29 +33 +35 +33 +29 +22 +13 +1 +-10 +-22 +-32 +-43 +-50 +-57 +-62 +-67 +-69 +-70 +-70 +-69 +-67 +-68 +-70 +-71 +-68 +-62 +-50 +-37 +-22 +-7 +8 +19 +28 +32 +34 +31 +27 +20 +11 +-1 +-12 +-24 +-35 +-45 +-53 +-60 +-66 +-70 +-72 +-73 +-73 +-71 +-70 +-70 +-72 +-72 +-69 +-61 +-50 +-37 +-21 +-6 +9 +20 +29 +33 +35 +31 +28 +20 +15 +7 +2 +-4 +-8 +-11 +-13 +-15 +-17 +-19 +-20 +-23 +-24 +-26 +-27 +-31 +-36 +-42 +-48 +-55 +-60 +-65 +-69 +-72 +-73 +-75 +-75 +-74 +-72 +-71 +-68 +-65 +-62 +-60 +-57 +-53 +-50 +-48 +-46 +-44 +-41 +-40 +-38 +-38 +-36 +-36 +-36 +-39 +-43 +-47 +-47 +-43 +-36 +-27 +-16 +-4 +8 +17 +26 +30 +33 +33 +31 +25 +20 +13 +7 +1 +-3 +-7 +-10 +-12 +-15 +-16 +-18 +-20 +-21 +-23 +-25 +-28 +-33 +-39 +-45 +-52 +-58 +-64 +-67 +-71 +-73 +-75 +-75 +-75 +-73 +-71 +-68 +-66 +-63 +-61 +-57 +-55 +-51 +-49 +-46 +-45 +-42 +-41 +-40 +-40 +-38 +-37 +-36 +-40 +-44 +-47 +-47 +-43 +-36 +-27 +-16 +-5 +7 +17 +26 +30 +33 +33 +30 +25 +20 +13 +8 +2 +-3 +-7 +-11 +-13 +-15 +-17 +-19 +-21 +-22 +-24 +-25 +-29 +-33 +-40 +-46 +-53 +-58 +-65 +-68 +-72 +-73 +-75 +-75 +-74 +-72 +-70 +-68 +-65 +-62 +-60 +-56 +-53 +-50 +-48 +-45 +-43 +-41 +-40 +-38 +-37 +-37 +-36 +-35 +-39 +-43 +-47 +-46 +-43 +-36 +-27 +-16 +-4 +8 +17 +27 +31 +34 +33 +31 +26 +20 +14 +8 +1 +-2 +-7 +-9 +-13 +-14 +-16 +-18 +-21 +-22 +-24 +-25 +-29 +-33 +-40 +-46 +-53 +-58 +-64 +-68 +-72 +-73 +-75 +-75 +-74 +-73 +-71 +-69 +-69 +-71 +-72 +-68 +-62 +-52 +-40 +-26 +-12 +1 +13 +23 +28 +31 +30 +27 +20 +11 +-1 +-12 +-24 +-35 +-45 +-53 +-61 +-65 +-70 +-72 +-73 +-72 +-72 +-69 +-67 +-64 +-61 +-58 +-55 +-51 +-49 +-45 +-43 +-40 +-39 +-37 +-36 +-35 +-35 +-34 +-37 +-41 +-45 +-45 +-42 +-35 +-25 +-13 +-1 +11 +21 +29 +33 +35 +33 +30 +22 +13 +2 +-9 +-21 +-32 +-42 +-49 +-58 +-62 +-66 +-69 +-70 +-70 +-69 +-67 +-68 +-70 +-71 +-67 +-60 +-49 +-36 +-21 +-5 +9 +21 +29 +33 +35 +32 +29 +22 +16 +8 +3 +-3 +-6 +-10 +-12 +-14 +-15 +-17 +-19 +-21 +-23 +-25 +-27 +-31 +-35 +-42 +-47 +-54 +-59 +-65 +-69 +-72 +-74 +-75 +-75 +-75 +-73 +-72 +-69 +-69 +-71 +-72 +-69 +-63 +-53 +-42 +-26 +-12 +2 +13 +23 +28 +30 +29 +26 +19 +10 +-1 +-12 +-24 +-35 +-45 +-53 +-60 +-66 +-70 +-72 +-73 +-73 +-72 +-69 +-67 +-64 +-61 +-58 +-55 +-51 +-48 +-46 +-43 +-40 +-39 +-37 +-36 +-35 +-34 +-34 +-37 +-41 +-45 +-44 +-41 +-34 +-25 +-13 +-1 +11 +21 +29 +33 +36 +33 +30 +23 +18 +11 +5 +0 +-4 +-8 +-10 +-13 +-14 +-16 +-17 +-19 +-21 +-23 +-25 +-28 +-33 +-40 +-46 +-53 +-58 +-65 +-68 +-72 +-74 +-75 +-75 +-74 +-73 +-71 +-68 +-66 +-62 +-60 +-56 +-53 +-51 +-48 +-46 +-44 +-42 +-41 +-39 +-39 +-37 +-37 +-36 +-39 +-44 +-47 +-47 +-44 +-36 +-28 +-16 +-5 +7 +18 +26 +31 +34 +33 +31 +24 +15 +4 +-8 +-20 +-30 +-41 +-49 +-57 +-62 +-67 +-69 +-70 +-70 +-70 +-68 +-69 +-71 +-72 +-68 +-62 +-51 +-37 +-22 +-7 +8 +19 +29 +33 +35 +32 +29 +22 +16 +9 +3 +-3 +-6 +-9 +-12 +-14 +-16 +-18 +-19 +-21 +-23 +-25 +-26 +-29 +-34 +-40 +-47 +-53 +-59 +-65 +-68 +-72 +-74 +-75 +-75 +-75 +-74 +-71 +-68 +-66 +-63 +-60 +-57 +-54 +-51 +-48 +-46 +-44 +-42 +-40 +-38 +-38 +-37 +-37 +-36 +-39 +-44 +-47 +-47 +-44 +-37 +-28 +-16 +-5 +7 +17 +26 +31 +34 +33 +30 +23 +15 +3 +-8 +-20 +-31 +-41 +-49 +-56 +-62 +-66 +-69 +-70 +-70 +-69 +-68 +-69 +-71 +-71 +-68 +-61 +-50 +-37 +-21 +-7 +7 +19 +28 +33 +35 +32 +28 +21 +15 +8 +3 +-3 +-6 +-10 +-13 +-15 +-16 +-19 +-20 +-22 +-23 +-26 +-27 +-30 +-35 +-41 +-47 +-54 +-59 +-65 +-69 +-72 +-74 +-75 +-75 +-74 +-73 +-71 +-68 +-69 +-71 +-72 +-68 +-62 +-52 +-40 +-26 +-11 +3 +15 +24 +29 +31 +30 +27 +19 +11 +-1 +-12 +-24 +-35 +-45 +-53 +-61 +-66 +-70 +-73 +-74 +-73 +-72 +-70 +-71 +-73 +-73 +-69 +-62 +-51 +-37 +-21 +-7 +8 +19 +28 +32 +34 +31 +26 +19 +10 +-2 +-14 +-25 +-36 +-46 +-54 +-61 +-66 +-70 +-72 +-73 +-72 +-71 +-68 +-66 +-63 +-60 +-56 +-53 +-50 +-47 +-44 +-42 +-40 +-39 +-37 +-36 +-35 +-35 +-33 +-37 +-41 +-45 +-45 +-41 +-34 +-24 +-12 +0 +13 +22 +31 +35 +35 +34 +30 +24 +18 +11 +5 +-1 +-5 +-9 +-11 +-13 +-14 +-16 +-18 +-20 +-21 +-23 +-25 +-29 +-33 +-39 +-46 +-52 +-58 +-63 +-67 +-71 +-73 +-75 +-75 +-75 +-73 +-72 +-69 +-70 +-71 +-72 +-69 +-63 +-52 +-41 +-26 +-12 +2 +14 +23 +29 +32 +30 +28 +21 +12 +0 +-12 +-24 +-35 +-45 +-53 +-60 +-65 +-70 +-72 +-73 +-73 +-72 +-70 +-67 +-64 +-61 +-58 +-54 +-51 +-48 +-45 +-43 +-41 +-39 +-37 +-36 +-35 +-35 +-34 +-37 +-42 +-45 +-45 +-42 +-35 +-25 +-13 +-1 +11 +21 +29 +33 +35 +33 +30 +23 +14 +2 +-9 +-21 +-32 +-42 +-50 +-58 +-63 +-67 +-70 +-71 +-70 +-69 +-67 +-68 +-70 +-71 +-67 +-60 +-49 +-36 +-21 +-6 +9 +20 +29 +33 +35 +33 +28 +21 +11 +-1 +-12 +-24 +-35 +-45 +-53 +-61 +-66 +-70 +-71 +-72 +-72 +-72 +-69 +-70 +-72 +-73 +-69 +-62 +-50 +-37 +-21 +-5 +9 +20 +29 +33 +34 +31 +27 +20 +14 +7 +1 +-4 +-7 +-11 +-13 +-15 +-16 +-18 +-20 +-22 +-24 +-26 +-27 +-30 +-35 +-41 +-47 +-54 +-60 +-65 +-69 +-72 +-74 +-75 +-75 +-75 +-73 +-71 +-68 +-70 +-71 +-72 +-68 +-63 +-52 +-40 +-25 +-12 +3 +14 +23 +29 +31 +30 +27 +19 +10 +-1 +-13 +-25 +-35 +-45 +-54 +-61 +-66 +-69 +-72 +-73 +-72 +-71 +-69 +-70 +-72 +-73 +-70 +-62 +-51 +-37 +-22 +-7 +8 +19 +28 +32 +34 +31 +27 +19 +10 +-2 +-13 +-25 +-35 +-46 +-54 +-61 +-65 +-70 +-72 +-73 +-73 +-72 +-69 +-67 +-64 +-61 +-57 +-53 +-50 +-48 +-45 +-42 +-40 +-39 +-37 +-36 +-35 +-34 +-33 +-36 +-41 +-45 +-44 +-41 +-34 +-24 +-12 +0 +12 +22 +30 +34 +36 +33 +30 +23 +18 +11 +5 +-1 +-5 +-9 +-11 +-13 +-15 +-17 +-18 +-20 +-21 +-23 +-25 +-29 +-33 +-40 +-46 +-53 +-58 +-64 +-68 +-71 +-73 +-74 +-75 +-75 +-73 +-71 +-69 +-66 +-63 +-60 +-57 +-54 +-51 +-49 +-47 +-44 +-42 +-41 +-39 +-39 +-37 +-37 +-36 +-39 +-44 +-47 +-46 +-43 +-36 +-28 +-16 +-5 +7 +17 +26 +31 +34 +33 +31 +24 +16 +4 +-7 +-19 +-30 +-41 +-49 +-57 +-63 +-67 +-69 +-70 +-70 +-70 +-68 +-69 +-71 +-72 +-68 +-62 +-51 +-37 +-21 +-7 +8 +19 +29 +33 +35 +33 +29 +22 +16 +8 +3 +-3 +-7 +-10 +-12 +-14 +-15 +-18 +-19 +-21 +-23 +-25 +-27 +-30 +-35 +-41 +-47 +-54 +-59 +-65 +-69 +-72 +-74 +-75 +-76 +-75 +-73 +-72 +-69 +-70 +-71 +-72 +-69 +-62 +-52 +-40 +-26 +-12 +2 +13 +23 +28 +31 +29 +26 +19 +10 +-1 +-12 +-24 +-35 +-45 +-53 +-61 +-66 +-70 +-72 +-73 +-72 +-71 +-69 +-66 +-63 +-61 +-57 +-54 +-51 +-48 +-45 +-43 +-41 +-39 +-37 +-36 +-35 +-35 +-34 +-37 +-42 +-45 +-45 +-42 +-35 +-25 +-12 +-1 +12 +22 +30 +34 +36 +34 +30 +23 +14 +2 +-9 +-21 +-32 +-42 +-51 +-58 +-63 +-67 +-70 +-72 +-71 +-70 +-68 +-69 +-72 +-72 +-68 +-61 +-49 +-36 +-21 +-5 +9 +20 +29 +33 +35 +32 +28 +21 +15 +7 +2 +-4 +-7 +-11 +-13 +-15 +-16 +-18 +-19 +-22 +-23 +-25 +-27 +-30 +-35 +-41 +-47 +-54 +-59 +-65 +-69 +-72 +-74 +-75 +-75 +-74 +-73 +-71 +-68 +-66 +-63 +-60 +-56 +-54 +-50 +-48 +-45 +-43 +-41 +-40 +-38 +-38 +-37 +-37 +-36 +-39 +-44 +-47 +-47 +-43 +-36 +-27 +-15 +-5 +8 +18 +27 +31 +34 +33 +31 +24 +15 +4 +-7 +-20 +-31 +-41 +-49 +-57 +-62 +-67 +-70 +-71 +-70 +-70 +-68 +-69 +-71 +-72 +-69 +-62 +-51 +-37 +-22 +-7 +8 +19 +29 +33 +35 +33 +28 +22 +16 +8 +3 +-3 +-6 +-11 +-12 +-14 +-16 +-18 +-20 +-22 +-23 +-27 +-27 +-30 +-35 +-41 +-48 +-54 +-60 +-65 +-69 +-72 +-74 +-76 +-76 +-75 +-74 +-72 +-69 +-67 +-64 +-61 +-57 +-55 +-51 +-49 +-46 +-45 +-43 +-41 +-39 +-39 +-37 +-37 +-36 +-39 +-43 +-47 +-46 +-43 +-36 +-27 +-16 +-4 +8 +18 +27 +31 +35 +34 +31 +26 +21 +14 +9 +2 +-2 +-7 +-9 +-13 +-14 +-16 +-18 +-20 +-21 +-23 +-25 +-29 +-33 +-40 +-46 +-53 +-59 +-64 +-69 +-72 +-74 +-75 +-75 +-75 +-73 +-71 +-69 +-66 +-63 +-60 +-57 +-54 +-51 +-49 +-46 +-44 +-42 +-41 +-40 +-39 +-37 +-37 +-36 +-40 +-44 +-47 +-47 +-44 +-37 +-28 +-16 +-5 +7 +17 +26 +31 +35 +33 +31 +26 +21 +14 +8 +2 +-3 +-7 +-10 +-13 +-15 +-17 +-19 +-20 +-22 +-23 +-25 +-29 +-33 +-39 +-45 +-52 +-58 +-64 +-68 +-72 +-73 +-75 +-74 +-75 +-72 +-71 +-68 +-69 +-71 +-72 +-68 +-63 +-52 +-41 +-26 +-12 +2 +14 +23 +29 +32 +31 +27 +20 +12 +1 +-11 +-23 +-34 +-44 +-53 +-60 +-65 +-69 +-72 +-73 +-72 +-72 +-69 +-70 +-72 +-73 +-69 +-62 +-50 +-37 +-21 +-6 +9 +20 +29 +33 +35 +32 +28 +20 +11 +-1 +-12 +-25 +-35 +-46 +-54 +-61 +-67 +-71 +-72 +-74 +-72 +-72 +-69 +-70 +-72 +-73 +-70 +-62 +-51 +-38 +-22 +-6 +8 +20 +29 +33 +34 +31 +27 +19 +10 +-2 +-13 +-25 +-36 +-46 +-53 +-61 +-66 +-70 +-72 +-73 +-73 +-72 +-69 +-71 +-72 +-73 +-69 +-62 +-51 +-37 +-21 +-7 +9 +20 +29 +33 +35 +32 +27 +20 +11 +-1 +-13 +-25 +-35 +-46 +-54 +-61 +-67 +-70 +-73 +-74 +-73 +-72 +-69 +-70 +-72 +-73 +-70 +-62 +-50 +-36 +-20 +-5 +10 +21 +30 +34 +35 +32 +28 +20 +10 +-2 +-13 +-25 +-36 +-47 +-54 +-62 +-66 +-70 +-72 +-73 +-72 +-71 +-69 +-70 +-72 +-73 +-69 +-62 +-51 +-37 +-20 +-5 +9 +21 +29 +33 +35 +32 +28 +20 +10 +-1 +-13 +-25 +-36 +-46 +-54 +-61 +-66 +-70 +-72 +-74 +-73 +-72 +-69 +-71 +-72 +-73 +-69 +-63 +-51 +-37 +-21 +-7 +9 +20 +29 +33 +35 +32 +27 +20 +11 +-1 +-13 +-25 +-36 +-46 +-54 +-61 +-66 +-69 +-71 +-72 +-72 +-71 +-69 +-70 +-72 +-73 +-69 +-62 +-51 +-37 +-21 +-5 +9 +21 +30 +33 +35 +31 +27 +19 +10 +-2 +-13 +-26 +-36 +-48 +-55 +-63 +-67 +-71 +-73 +-74 +-73 +-73 +-70 +-67 +-64 +-61 +-57 +-54 +-50 +-47 +-44 +-42 +-39 +-38 +-36 +-35 +-34 +-34 +-33 +-36 +-41 +-45 +-44 +-41 +-34 +-24 +-12 +0 +13 +22 +30 +34 +37 +35 +31 +23 +14 +2 +-9 +-22 +-32 +-42 +-51 +-59 +-64 +-68 +-70 +-71 +-70 +-70 +-68 +-69 +-71 +-72 +-68 +-61 +-50 +-37 +-20 +-5 +10 +21 +30 +34 +36 +33 +29 +21 +12 +-1 +-12 +-24 +-35 +-46 +-54 +-61 +-66 +-70 +-72 +-73 +-73 +-72 +-70 +-71 +-73 +-73 +-69 +-62 +-50 +-37 +-21 +-6 +9 +20 +29 +33 +34 +31 +28 +20 +11 +-2 +-13 +-25 +-36 +-46 +-54 +-61 +-67 +-71 +-73 +-73 +-73 +-72 +-70 +-71 +-73 +-73 +-69 +-62 +-51 +-36 +-20 +-5 +9 +21 +30 +33 +35 +32 +28 +20 +11 +-1 +-12 +-25 +-35 +-45 +-54 +-61 +-66 +-70 +-72 +-73 +-72 +-71 +-69 +-71 +-72 +-73 +-70 +-63 +-51 +-37 +-21 +-6 +10 +21 +30 +33 +35 +32 +27 +20 +10 +-2 +-13 +-26 +-36 +-47 +-55 +-62 +-67 +-71 +-73 +-74 +-73 +-73 +-70 +-71 +-73 +-73 +-69 +-62 +-50 +-37 +-21 +-6 +9 +20 +30 +34 +35 +32 +29 +20 +11 +-1 +-12 +-25 +-36 +-46 +-54 +-61 +-67 +-70 +-72 +-73 +-72 +-71 +-69 +-70 +-72 +-73 +-69 +-62 +-51 +-37 +-21 +-5 +10 +21 +30 +34 +35 +32 +27 +20 +11 +-1 +-13 +-25 +-36 +-46 +-54 +-62 +-66 +-70 +-72 +-74 +-73 +-72 +-70 +-71 +-72 +-73 +-69 +-62 +-51 +-37 +-22 +-6 +9 +20 +29 +33 +35 +32 +27 +21 +15 +7 +2 +-4 +-7 +-11 +-12 +-15 +-16 +-18 +-20 +-21 +-23 +-25 +-27 +-30 +-35 +-41 +-47 +-53 +-59 +-65 +-68 +-72 +-74 +-76 +-75 +-75 +-73 +-71 +-68 +-66 +-63 +-60 +-56 +-54 +-51 +-49 +-46 +-44 +-43 +-41 +-39 +-39 +-38 +-37 +-37 +-40 +-44 +-48 +-47 +-44 +-36 +-27 +-16 +-4 +8 +18 +27 +31 +35 +33 +31 +23 +15 +4 +-7 +-20 +-31 +-41 +-50 +-58 +-63 +-67 +-70 +-71 +-71 +-70 +-68 +-69 +-71 +-72 +-68 +-61 +-50 +-36 +-21 +-5 +9 +20 +30 +33 +36 +33 +29 +23 +17 +9 +3 +-2 +-6 +-10 +-12 +-14 +-16 +-18 +-20 +-22 +-23 +-25 +-27 +-31 +-35 +-42 +-48 +-55 +-61 +-66 +-70 +-73 +-75 +-76 +-76 +-76 +-73 +-72 +-69 +-70 +-72 +-72 +-69 +-63 +-53 +-40 +-25 +-11 +3 +15 +24 +29 +31 +30 +26 +19 +11 +-1 +-12 +-24 +-35 +-45 +-53 +-61 +-66 +-70 +-72 +-73 +-73 +-72 +-70 +-68 +-65 +-62 +-58 +-55 +-51 +-49 +-45 +-43 +-41 +-39 +-37 +-37 +-35 +-35 +-34 +-37 +-41 +-45 +-45 +-41 +-34 +-24 +-12 +0 +12 +22 +30 +35 +37 +35 +31 +23 +14 +2 +-10 +-22 +-32 +-43 +-51 +-59 +-64 +-68 +-70 +-71 +-71 +-70 +-68 +-69 +-70 +-72 +-67 +-61 +-49 +-35 +-19 +-4 +9 +21 +31 +35 +37 +33 +29 +21 +12 +-1 +-12 +-24 +-35 +-45 +-53 +-61 +-66 +-71 +-73 +-74 +-73 +-72 +-70 +-71 +-72 +-73 +-69 +-62 +-51 +-37 +-21 +-6 +9 +21 +30 +33 +35 +32 +28 +20 +11 +-1 +-13 +-25 +-36 +-47 +-54 +-62 +-67 +-71 +-73 +-74 +-73 +-72 +-70 +-71 +-73 +-73 +-69 +-63 +-51 +-37 +-21 +-5 +9 +21 +30 +34 +36 +33 +29 +21 +11 +0 +-13 +-24 +-35 +-45 +-54 +-61 +-66 +-71 +-73 +-74 +-73 +-72 +-70 +-71 +-72 +-73 +-69 +-62 +-50 +-37 +-21 +-5 +10 +21 +30 +33 +35 +31 +28 +21 +15 +8 +2 +-3 +-7 +-10 +-12 +-15 +-16 +-18 +-19 +-21 +-23 +-25 +-26 +-30 +-35 +-40 +-47 +-53 +-59 +-65 +-69 +-72 +-74 +-75 +-75 +-75 +-74 +-72 +-69 +-70 +-72 +-72 +-69 +-63 +-53 +-40 +-26 +-11 +3 +15 +25 +29 +32 +30 +27 +20 +11 +-1 +-12 +-24 +-35 +-45 +-53 +-61 +-67 +-71 +-73 +-75 +-74 +-73 +-71 +-72 +-74 +-74 +-71 +-63 +-52 +-38 +-22 +-6 +9 +20 +29 +34 +35 +33 +29 +21 +11 +-1 +-12 +-25 +-35 +-46 +-54 +-62 +-66 +-71 +-72 +-74 +-73 +-72 +-69 +-70 +-72 +-74 +-69 +-62 +-50 +-37 +-21 +-5 +9 +21 +30 +34 +35 +32 +28 +20 +10 +-1 +-13 +-25 +-35 +-46 +-54 +-61 +-66 +-70 +-72 +-73 +-73 +-72 +-69 +-67 +-64 +-61 +-57 +-54 +-50 +-47 +-44 +-43 +-40 +-39 +-37 +-36 +-35 +-34 +-33 +-37 +-41 +-45 +-45 +-42 +-34 +-25 +-12 +0 +12 +22 +30 +34 +36 +34 +30 +24 +18 +11 +5 +-1 +-5 +-9 +-11 +-13 +-15 +-17 +-18 +-20 +-21 +-24 +-25 +-28 +-33 +-40 +-46 +-53 +-58 +-65 +-69 +-72 +-74 +-76 +-76 +-75 +-73 +-72 +-69 +-70 +-71 +-73 +-70 +-63 +-53 +-41 +-26 +-12 +3 +14 +24 +29 +32 +30 +27 +21 +11 +0 +-11 +-23 +-34 +-44 +-53 +-60 +-66 +-70 +-72 +-74 +-73 +-72 +-70 +-67 +-64 +-61 +-58 +-55 +-51 +-49 +-46 +-43 +-41 +-39 +-37 +-36 +-34 +-34 +-33 +-37 +-41 +-45 +-45 +-42 +-34 +-25 +-12 +-1 +12 +22 +30 +35 +36 +35 +31 +25 +19 +11 +5 +0 +-4 +-8 +-11 +-13 +-14 +-16 +-17 +-19 +-21 +-23 +-24 +-28 +-33 +-39 +-46 +-52 +-58 +-65 +-68 +-72 +-74 +-75 +-75 +-74 +-73 +-71 +-68 +-66 +-63 +-59 +-56 +-53 +-50 +-48 +-46 +-43 +-42 +-41 +-39 +-38 +-37 +-37 +-36 +-40 +-44 +-47 +-47 +-44 +-37 +-28 +-16 +-5 +8 +18 +27 +32 +35 +34 +31 +25 +16 +5 +-7 +-19 +-30 +-41 +-49 +-57 +-63 +-67 +-69 +-71 +-70 +-70 +-68 +-69 +-71 +-72 +-69 +-62 +-50 +-37 +-21 +-7 +9 +20 +29 +33 +35 +33 +28 +21 +12 +0 +-12 +-24 +-35 +-45 +-54 +-61 +-66 +-70 +-72 +-73 +-73 +-71 +-69 +-71 +-72 +-73 +-69 +-62 +-51 +-37 +-21 +-6 +9 +20 +29 +33 +35 +32 +27 +20 +11 +-1 +-13 +-25 +-35 +-46 +-54 +-61 +-67 +-71 +-72 +-73 +-73 +-72 +-69 +-70 +-72 +-73 +-69 +-62 +-50 +-36 +-20 +-5 +10 +21 +30 +34 +36 +33 +28 +20 +11 +-1 +-13 +-25 +-35 +-46 +-54 +-62 +-67 +-70 +-73 +-74 +-73 +-72 +-70 +-71 +-73 +-74 +-70 +-63 +-51 +-37 +-21 +-6 +9 +21 +30 +33 +35 +32 +28 +20 +11 +-1 +-13 +-25 +-36 +-47 +-55 +-62 +-67 +-72 +-74 +-75 +-73 +-72 +-70 +-71 +-72 +-73 +-69 +-62 +-50 +-37 +-21 +-5 +9 +21 +30 +34 +36 +32 +28 +20 +11 +-1 +-13 +-25 +-36 +-46 +-54 +-61 +-67 +-71 +-72 +-73 +-73 +-72 +-70 +-71 +-72 +-73 +-69 +-63 +-50 +-37 +-21 +-6 +10 +21 +30 +33 +35 +32 +28 +20 +11 +-1 +-13 +-25 +-35 +-46 +-54 +-62 +-66 +-71 +-73 +-73 +-73 +-71 +-69 +-71 +-72 +-73 +-69 +-62 +-50 +-36 +-21 +-5 +10 +21 +30 +34 +36 +32 +28 +20 +11 +-1 +-12 +-25 +-35 +-46 +-54 +-61 +-66 +-71 +-72 +-73 +-73 +-72 +-70 +-71 +-72 +-73 +-69 +-62 +-51 +-37 +-21 +-5 +9 +21 +30 +35 +36 +33 +29 +22 +15 +8 +2 +-3 +-7 +-11 +-13 +-15 +-17 +-18 +-20 +-22 +-24 +-26 +-27 +-31 +-35 +-42 +-48 +-54 +-60 +-65 +-70 +-73 +-75 +-76 +-76 +-76 +-74 +-72 +-69 +-71 +-72 +-73 +-69 +-63 +-53 +-41 +-26 +-12 +3 +15 +24 +29 +32 +31 +28 +20 +11 +-1 +-12 +-24 +-35 +-45 +-54 +-61 +-67 +-71 +-73 +-74 +-73 +-72 +-70 +-71 +-73 +-73 +-70 +-63 +-51 +-37 +-22 +-6 +9 +20 +29 +34 +36 +32 +28 +21 +11 +-1 +-12 +-25 +-36 +-45 +-54 +-61 +-66 +-70 +-72 +-73 +-73 +-72 +-69 +-71 +-72 +-73 +-69 +-63 +-50 +-37 +-20 +-5 +9 +21 +30 +34 +35 +32 +28 +20 +11 +-2 +-13 +-25 +-36 +-47 +-55 +-63 +-67 +-71 +-73 +-74 +-73 +-72 +-70 +-71 +-73 +-73 +-70 +-62 +-50 +-37 +-21 +-5 +10 +21 +30 +34 +36 +32 +28 +20 +11 +-1 +-13 +-25 +-35 +-46 +-54 +-61 +-66 +-70 +-73 +-74 +-73 +-72 +-70 +-71 +-72 +-73 +-70 +-62 +-51 +-37 +-21 +-5 +9 +21 +30 +34 +35 +33 +29 +21 +12 +-1 +-12 +-25 +-36 +-46 +-54 +-62 +-67 +-71 +-73 +-74 +-73 +-72 +-69 +-70 +-71 +-73 +-69 +-62 +-50 +-36 +-20 +-5 +10 +21 +30 +33 +35 +32 +28 +20 +10 +-2 +-13 +-26 +-36 +-47 +-54 +-62 +-67 +-71 +-73 +-74 +-73 +-72 +-69 +-71 +-72 +-73 +-70 +-62 +-51 +-37 +-21 +-5 +10 +21 +29 +34 +35 +32 +27 +20 +10 +-2 +-13 +-26 +-36 +-46 +-54 +-61 +-66 +-71 +-73 +-73 +-73 +-72 +-70 +-71 +-72 +-73 +-69 +-62 +-51 +-37 +-21 +-5 +9 +21 +31 +34 +36 +32 +28 +21 +11 +-1 +-12 +-24 +-35 +-46 +-54 +-61 +-67 +-71 +-73 +-74 +-73 +-72 +-69 +-67 +-64 +-61 +-57 +-54 +-50 +-48 +-45 +-43 +-40 +-39 +-36 +-36 +-35 +-34 +-34 +-37 +-42 +-46 +-46 +-43 +-35 +-25 +-12 +-1 +12 +22 +30 +35 +37 +35 +31 +23 +14 +3 +-9 +-21 +-32 +-42 +-51 +-58 +-64 +-68 +-70 +-71 +-71 +-70 +-68 +-69 +-71 +-72 +-69 +-61 +-50 +-37 +-21 +-5 +9 +21 +30 +35 +36 +33 +29 +21 +12 +-1 +-12 +-24 +-35 +-46 +-54 +-61 +-66 +-71 +-72 +-73 +-73 +-72 +-69 +-70 +-73 +-73 +-69 +-62 +-50 +-37 +-20 +-5 +10 +21 +30 +35 +36 +33 +29 +20 +11 +-1 +-12 +-25 +-36 +-47 +-55 +-62 +-67 +-71 +-72 +-74 +-73 +-72 +-70 +-71 +-73 +-73 +-69 +-63 +-51 +-37 +-20 +-5 +10 +21 +30 +34 +35 +33 +28 +20 +11 +-1 +-13 +-25 +-35 +-46 +-54 +-61 +-67 +-71 +-72 +-74 +-73 +-72 +-70 +-71 +-73 +-73 +-70 +-63 +-51 +-37 +-21 +-6 +9 +20 +30 +34 +35 +31 +28 +21 +11 +-1 +-12 +-24 +-35 +-46 +-54 +-62 +-67 +-71 +-73 +-74 +-73 +-72 +-69 +-71 +-73 +-73 +-69 +-62 +-51 +-37 +-20 +-5 +10 +22 +31 +35 +36 +33 +29 +21 +11 +-1 +-12 +-25 +-36 +-46 +-54 +-62 +-67 +-71 +-73 +-74 +-73 +-72 +-70 +-71 +-72 +-73 +-69 +-62 +-50 +-36 +-20 +-5 +10 +21 +30 +33 +35 +32 +27 +20 +11 +-1 +-13 +-25 +-36 +-46 +-55 +-62 +-67 +-71 +-73 +-74 +-73 +-72 +-70 +-71 +-72 +-73 +-70 +-62 +-51 +-37 +-21 +-5 +10 +21 +30 +34 +36 +32 +28 +20 +11 +-1 +-12 +-25 +-35 +-46 +-53 +-61 +-66 +-70 +-72 +-73 +-73 +-72 +-69 +-71 +-73 +-73 +-69 +-62 +-51 +-37 +-21 +-6 +9 +20 +29 +34 +35 +33 +28 +22 +15 +8 +3 +-3 +-7 +-10 +-13 +-15 +-16 +-19 +-20 +-22 +-23 +-26 +-27 +-31 +-35 +-41 +-48 +-55 +-60 +-66 +-70 +-74 +-75 +-76 +-76 +-76 +-74 +-72 +-69 +-71 +-72 +-73 +-70 +-63 +-53 +-41 +-26 +-12 +3 +15 +24 +30 +32 +31 +28 +21 +12 +-1 +-11 +-24 +-35 +-45 +-53 +-61 +-66 +-71 +-73 +-74 +-73 +-73 +-70 +-72 +-74 +-74 +-70 +-63 +-51 +-38 +-21 +-6 +9 +21 +30 +34 +35 +33 +29 +20 +11 +-1 +-12 +-24 +-36 +-46 +-54 +-61 +-66 +-71 +-72 +-74 +-73 +-72 +-70 +-71 +-73 +-73 +-69 +-62 +-51 +-37 +-21 +-5 +10 +21 +30 +35 +36 +33 +29 +21 +12 +-1 +-12 +-25 +-36 +-46 +-55 +-63 +-67 +-70 +-72 +-74 +-73 +-72 +-70 +-71 +-73 +-74 +-70 +-62 +-50 +-37 +-20 +-5 +10 +22 +30 +35 +36 +32 +28 +20 +11 +-1 +-13 +-25 +-36 +-46 +-55 +-62 +-67 +-71 +-73 +-74 +-73 +-73 +-70 +-72 +-73 +-74 +-70 +-63 +-51 +-37 +-21 +-5 +9 +21 +30 +34 +35 +33 +28 +20 +11 +-1 +-12 +-25 +-36 +-47 +-55 +-62 +-68 +-71 +-73 +-74 +-74 +-73 +-70 +-71 +-72 +-73 +-70 +-62 +-51 +-37 +-20 +-5 +10 +22 +31 +35 +35 +32 +28 +20 +11 +-1 +-12 +-25 +-36 +-46 +-55 +-62 +-67 +-71 +-73 +-75 +-74 +-73 +-70 +-71 +-73 +-73 +-70 +-62 +-50 +-36 +-20 +-5 +10 +21 +30 +35 +36 +33 +29 +21 +12 +-1 +-12 +-24 +-36 +-46 +-54 +-61 +-66 +-70 +-72 +-73 +-72 +-72 +-69 +-70 +-72 +-73 +-69 +-62 +-51 +-37 +-20 +-5 +10 +21 +31 +35 +36 +33 +29 +21 +11 +-1 +-13 +-25 +-36 +-46 +-54 +-62 +-66 +-70 +-72 +-74 +-73 +-72 +-69 +-71 +-73 +-73 +-70 +-63 +-51 +-37 +-21 +-5 +10 +21 +30 +34 +36 +33 +29 +21 +11 +-1 +-12 +-24 +-35 +-46 +-55 +-62 +-67 +-71 +-73 +-75 +-74 +-73 +-70 +-72 +-73 +-74 +-70 +-63 +-51 +-37 +-21 +-5 +9 +21 +30 +34 +36 +33 +29 +21 +11 +-1 +-13 +-25 +-35 +-47 +-55 +-62 +-67 +-72 +-73 +-74 +-73 +-72 +-70 +-68 +-64 +-61 +-57 +-54 +-51 +-48 +-45 +-43 +-40 +-39 +-36 +-36 +-35 +-34 +-34 +-37 +-42 +-46 +-46 +-42 +-34 +-24 +-12 +1 +14 +24 +32 +36 +38 +36 +32 +24 +15 +3 +-8 +-21 +-32 +-42 +-50 +-58 +-63 +-67 +-70 +-72 +-71 +-70 +-68 +-69 +-71 +-71 +-68 +-61 +-49 +-36 +-20 +-5 +10 +21 +30 +35 +36 +33 +29 +21 +12 +-1 +-13 +-25 +-36 +-46 +-55 +-62 +-67 +-71 +-73 +-74 +-73 +-72 +-70 +-71 +-73 +-74 +-70 +-63 +-51 +-38 +-21 +-5 +9 +21 +30 +34 +35 +32 +28 +21 +15 +8 +2 +-3 +-7 +-10 +-12 +-14 +-16 +-18 +-19 +-22 +-24 +-26 +-27 +-31 +-36 +-42 +-48 +-55 +-61 +-66 +-70 +-74 +-75 +-76 +-76 +-76 +-74 +-72 +-69 +-70 +-71 +-72 +-68 +-63 +-52 +-40 +-25 +-11 +4 +16 +25 +30 +33 +32 +28 +21 +12 +0 +-11 +-24 +-35 +-45 +-53 +-61 +-66 +-71 +-73 +-74 +-73 +-73 +-70 +-68 +-64 +-61 +-58 +-54 +-51 +-48 +-45 +-42 +-40 +-39 +-37 +-36 +-35 +-35 +-34 +-37 +-42 +-46 +-46 +-42 +-35 +-25 +-12 +0 +13 +22 +31 +35 +37 +35 +31 +23 +14 +2 +-9 +-22 +-33 +-43 +-52 +-59 +-65 +-69 +-71 +-72 +-72 +-71 +-69 +-69 +-72 +-72 +-69 +-62 +-50 +-37 +-21 +-6 +9 +21 +30 +34 +36 +34 +30 +21 +12 +0 +-12 +-25 +-35 +-46 +-54 +-61 +-66 +-70 +-72 +-73 +-72 +-71 +-69 +-70 +-72 +-73 +-69 +-62 +-50 +-36 +-20 +-5 +11 +22 +31 +35 +36 +33 +29 +23 +16 +9 +3 +-3 +-6 +-10 +-12 +-14 +-16 +-18 +-19 +-22 +-23 +-26 +-27 +-30 +-35 +-42 +-48 +-54 +-60 +-66 +-69 +-73 +-75 +-77 +-76 +-76 +-74 +-73 +-70 +-67 +-64 +-61 +-58 +-55 +-52 +-50 +-47 +-45 +-43 +-41 +-40 +-39 +-37 +-37 +-36 +-40 +-44 +-48 +-47 +-44 +-36 +-27 +-16 +-4 +9 +19 +28 +33 +36 +35 +32 +27 +21 +14 +8 +1 +-3 +-7 +-10 +-12 +-14 +-16 +-18 +-20 +-21 +-23 +-24 +-28 +-33 +-39 +-46 +-52 +-58 +-64 +-68 +-72 +-73 +-76 +-76 +-75 +-74 +-72 +-69 +-67 +-63 +-60 +-57 +-54 +-51 +-49 +-46 +-44 +-42 +-41 +-40 +-39 +-38 +-38 +-37 +-40 +-44 +-48 +-47 +-44 +-37 +-28 +-17 +-5 +7 +18 +27 +32 +36 +35 +32 +27 +21 +15 +9 +2 +-2 +-7 +-9 +-12 +-15 +-17 +-17 +-20 +-21 +-23 +-25 +-29 +-33 +-40 +-46 +-53 +-59 +-64 +-69 +-72 +-74 +-76 +-76 +-76 +-74 +-72 +-70 +-67 +-64 +-61 +-58 +-55 +-52 +-49 +-47 +-45 +-42 +-41 +-39 +-38 +-37 +-37 +-36 +-39 +-43 +-47 +-46 +-43 +-35 +-27 +-15 +-3 +9 +19 +28 +33 +37 +35 +33 +27 +22 +15 +9 +3 +-2 +-7 +-9 +-12 +-14 +-16 +-17 +-19 +-21 +-23 +-24 +-28 +-33 +-40 +-46 +-53 +-60 +-65 +-69 +-73 +-75 +-76 +-76 +-76 +-74 +-72 +-70 +-71 +-73 +-73 +-70 +-64 +-53 +-41 +-26 +-11 +3 +15 +25 +30 +33 +31 +29 +21 +12 +0 +-11 +-23 +-34 +-45 +-53 +-61 +-66 +-70 +-73 +-74 +-73 +-72 +-70 +-68 +-65 +-61 +-58 +-54 +-51 +-49 +-46 +-43 +-41 +-39 +-38 +-37 +-35 +-35 +-34 +-37 +-42 +-46 +-45 +-42 +-34 +-25 +-13 +0 +13 +23 +31 +35 +38 +35 +31 +24 +15 +2 +-9 +-22 +-32 +-43 +-51 +-59 +-64 +-68 +-70 +-71 +-71 +-70 +-68 +-69 +-71 +-72 +-68 +-61 +-50 +-36 +-20 +-4 +10 +21 +30 +34 +35 +33 +29 +22 +15 +8 +3 +-2 +-6 +-10 +-12 +-14 +-16 +-18 +-19 +-22 +-23 +-25 +-26 +-31 +-35 +-41 +-47 +-54 +-60 +-66 +-70 +-73 +-75 +-76 +-76 +-76 +-73 +-72 +-69 +-70 +-71 +-72 +-69 +-62 +-52 +-40 +-25 +-10 +4 +16 +26 +31 +33 +32 +29 +21 +12 +0 +-11 +-24 +-34 +-45 +-54 +-61 +-67 +-71 +-73 +-74 +-73 +-73 +-71 +-68 +-65 +-62 +-60 +-56 +-52 +-49 +-46 +-44 +-41 +-40 +-38 +-37 +-36 +-35 +-34 +-38 +-43 +-46 +-45 +-42 +-35 +-25 +-12 +0 +13 +23 +31 +36 +37 +35 +32 +25 +19 +12 +6 +0 +-4 +-8 +-11 +-13 +-14 +-16 +-17 +-20 +-21 +-22 +-25 +-29 +-33 +-40 +-46 +-54 +-59 +-65 +-69 +-72 +-74 +-76 +-76 +-76 +-74 +-73 +-70 +-67 +-64 +-61 +-57 +-54 +-51 +-49 +-46 +-44 +-42 +-41 +-39 +-38 +-37 +-37 +-37 +-40 +-45 +-48 +-48 +-44 +-37 +-28 +-16 +-4 +9 +19 +28 +33 +36 +35 +33 +26 +17 +5 +-6 +-18 +-29 +-40 +-49 +-57 +-62 +-67 +-70 +-71 +-71 +-70 +-68 +-69 +-72 +-72 +-69 +-62 +-50 +-37 +-21 +-6 +9 +21 +30 +35 +37 +34 +30 +22 +16 +10 +4 +-2 +-6 +-9 +-12 +-15 +-16 +-18 +-19 +-22 +-23 +-25 +-28 +-31 +-35 +-42 +-48 +-55 +-60 +-66 +-69 +-73 +-75 +-76 +-76 +-76 +-75 +-73 +-70 +-68 +-64 +-62 +-58 +-55 +-52 +-49 +-47 +-45 +-42 +-41 +-39 +-38 +-37 +-36 +-36 +-39 +-44 +-47 +-47 +-44 +-36 +-28 +-16 +-4 +9 +19 +28 +33 +35 +34 +32 +25 +16 +4 +-7 +-19 +-31 +-41 +-50 +-57 +-63 +-67 +-69 +-71 +-71 +-70 +-68 +-70 +-72 +-73 +-69 +-62 +-51 +-37 +-21 +-6 +9 +21 +30 +35 +37 +35 +30 +24 +17 +9 +4 +-2 +-6 +-9 +-12 +-14 +-16 +-18 +-19 +-22 +-23 +-25 +-27 +-31 +-35 +-41 +-48 +-55 +-60 +-66 +-69 +-74 +-75 +-77 +-77 +-76 +-75 +-72 +-69 +-70 +-72 +-73 +-69 +-63 +-52 +-40 +-26 +-11 +4 +15 +25 +30 +33 +31 +29 +22 +13 +1 +-11 +-23 +-34 +-45 +-54 +-61 +-66 +-71 +-73 +-75 +-74 +-73 +-71 +-72 +-74 +-75 +-71 +-64 +-52 +-38 +-22 +-6 +8 +20 +30 +34 +36 +33 +29 +21 +11 +-1 +-12 +-25 +-36 +-46 +-54 +-62 +-67 +-71 +-73 +-74 +-73 +-72 +-70 +-68 +-64 +-61 +-57 +-54 +-50 +-48 +-45 +-43 +-40 +-39 +-37 +-37 +-35 +-35 +-34 +-37 +-42 +-46 +-46 +-42 +-35 +-25 +-12 +0 +14 +23 +32 +36 +38 +36 +32 +26 +20 +13 +7 +1 +-3 +-8 +-10 +-12 +-14 +-16 +-17 +-20 +-21 +-23 +-25 +-28 +-33 +-39 +-46 +-52 +-58 +-64 +-68 +-72 +-73 +-76 +-75 +-74 +-73 +-71 +-69 +-70 +-72 +-73 +-69 +-63 +-53 +-40 +-25 +-10 +4 +16 +26 +30 +33 +32 +29 +21 +12 +1 +-11 +-23 +-34 +-45 +-53 +-61 +-67 +-71 +-73 +-75 +-74 +-73 +-71 +-68 +-65 +-62 +-58 +-55 +-51 +-48 +-46 +-43 +-41 +-39 +-38 +-37 +-35 +-35 +-34 +-37 +-42 +-46 +-46 +-43 +-35 +-25 +-13 +-1 +12 +22 +31 +35 +37 +35 +31 +23 +15 +2 +-10 +-22 +-33 +-43 +-52 +-59 +-65 +-69 +-71 +-73 +-72 +-71 +-69 +-71 +-73 +-73 +-70 +-62 +-51 +-37 +-21 +-5 +10 +21 +31 +35 +37 +34 +30 +22 +13 +0 +-11 +-24 +-35 +-45 +-53 +-61 +-67 +-71 +-72 +-74 +-73 +-72 +-69 +-71 +-72 +-73 +-69 +-61 +-50 +-35 +-21 +-4 +11 +22 +32 +35 +37 +34 +30 +23 +16 +9 +3 +-3 +-7 +-11 +-13 +-15 +-17 +-18 +-20 +-22 +-23 +-25 +-26 +-31 +-35 +-41 +-48 +-54 +-60 +-65 +-69 +-73 +-75 +-77 +-77 +-76 +-74 +-72 +-70 +-71 +-73 +-74 +-71 +-64 +-53 +-41 +-26 +-11 +3 +15 +25 +30 +33 +31 +28 +21 +12 +0 +-11 +-24 +-35 +-45 +-54 +-62 +-67 +-72 +-73 +-75 +-74 +-74 +-71 +-72 +-74 +-75 +-71 +-64 +-52 +-38 +-22 +-7 +9 +21 +30 +34 +36 +33 +29 +21 +12 +0 +-12 +-24 +-35 +-45 +-54 +-61 +-66 +-70 +-73 +-74 +-73 +-72 +-69 +-67 +-64 +-61 +-57 +-54 +-51 +-48 +-45 +-43 +-40 +-39 +-37 +-37 +-35 +-35 +-34 +-38 +-42 +-46 +-46 +-43 +-35 +-25 +-12 +0 +13 +23 +31 +35 +38 +35 +31 +24 +19 +11 +5 +-1 +-4 +-9 +-10 +-13 +-15 +-16 +-18 +-20 +-21 +-23 +-25 +-29 +-33 +-40 +-47 +-53 +-59 +-65 +-69 +-73 +-75 +-77 +-76 +-76 +-75 +-73 +-70 +-67 +-63 +-61 +-57 +-55 +-51 +-49 +-46 +-45 +-42 +-41 +-39 +-38 +-36 +-36 +-35 +-39 +-43 +-47 +-46 +-43 +-36 +-27 +-15 +-3 +9 +19 +28 +33 +36 +36 +33 +25 +16 +5 +-7 +-19 +-30 +-41 +-49 +-57 +-62 +-67 +-69 +-71 +-71 +-70 +-69 +-69 +-71 +-72 +-69 +-62 +-50 +-36 +-21 +-5 +10 +21 +31 +35 +37 +34 +30 +23 +17 +9 +4 +-2 +-6 +-10 +-12 +-14 +-16 +-18 +-19 +-21 +-23 +-25 +-27 +-30 +-36 +-42 +-48 +-55 +-61 +-66 +-70 +-74 +-76 +-77 +-77 +-76 +-75 +-73 +-70 +-71 +-73 +-74 +-71 +-64 +-54 +-41 +-26 +-11 +4 +15 +25 +30 +33 +32 +29 +21 +13 +0 +-11 +-24 +-34 +-45 +-53 +-61 +-66 +-71 +-73 +-75 +-74 +-73 +-71 +-69 +-65 +-62 +-58 +-55 +-51 +-48 +-45 +-43 +-41 +-39 +-37 +-36 +-35 +-34 +-34 +-37 +-41 +-45 +-45 +-42 +-34 +-25 +-12 +0 +13 +23 +32 +36 +39 +36 +32 +25 +16 +3 +-8 +-21 +-32 +-43 +-51 +-59 +-64 +-69 +-70 +-72 +-71 +-71 +-69 +-70 +-72 +-73 +-69 +-62 +-50 +-37 +-21 +-5 +9 +22 +31 +35 +36 +33 +29 +22 +16 +9 +3 +-2 +-7 +-10 +-12 +-15 +-16 +-18 +-19 +-22 +-23 +-26 +-27 +-30 +-35 +-41 +-47 +-54 +-60 +-66 +-69 +-74 +-75 +-77 +-76 +-76 +-75 +-73 +-70 +-67 +-64 +-61 +-58 +-55 +-52 +-49 +-46 +-45 +-43 +-41 +-39 +-38 +-37 +-36 +-36 +-39 +-44 +-47 +-47 +-44 +-36 +-27 +-15 +-3 +9 +20 +28 +33 +37 +35 +32 +25 +16 +4 +-7 +-20 +-31 +-41 +-50 +-58 +-63 +-68 +-70 +-72 +-71 +-71 +-69 +-70 +-73 +-73 +-69 +-62 +-50 +-37 +-21 +-5 +9 +21 +30 +35 +37 +34 +31 +24 +17 +10 +4 +-2 +-6 +-10 +-12 +-14 +-16 +-18 +-19 +-21 +-22 +-25 +-26 +-30 +-34 +-41 +-47 +-55 +-60 +-66 +-69 +-74 +-75 +-76 +-76 +-76 +-74 +-72 +-69 +-67 +-64 +-61 +-58 +-56 +-52 +-49 +-47 +-45 +-43 +-41 +-41 +-39 +-37 +-37 +-37 +-39 +-44 +-47 +-47 +-44 +-36 +-27 +-15 +-3 +10 +20 +29 +33 +36 +35 +33 +27 +22 +14 +8 +2 +-2 +-6 +-9 +-11 +-13 +-16 +-17 +-19 +-21 +-23 +-25 +-29 +-33 diff --git a/traces/lf_idteck_4944544BAC40E069.pm3 b/traces/lf_IDTECK_4944544BAC40E069.pm3 similarity index 100% rename from traces/lf_idteck_4944544BAC40E069.pm3 rename to traces/lf_IDTECK_4944544BAC40E069.pm3 diff --git a/traces/lf_idteck_idk50_PSK b/traces/lf_IDTECK_idk50_PSK similarity index 100% rename from traces/lf_idteck_idk50_PSK rename to traces/lf_IDTECK_idk50_PSK diff --git a/traces/ioprox-XSF-01-3B-44725.pm3 b/traces/lf_IOProx-XSF-01-3B-44725.pm3 similarity index 100% rename from traces/ioprox-XSF-01-3B-44725.pm3 rename to traces/lf_IOProx-XSF-01-3B-44725.pm3 diff --git a/traces/ioProx-XSF-01-BE-03011.pm3 b/traces/lf_IOProx-XSF-01-BE-03011.pm3 similarity index 100% rename from traces/ioProx-XSF-01-BE-03011.pm3 rename to traces/lf_IOProx-XSF-01-BE-03011.pm3 diff --git a/traces/indala-00002-12345678-1A.pm3 b/traces/lf_Indala-00002-12345678-1A.pm3 similarity index 100% rename from traces/indala-00002-12345678-1A.pm3 rename to traces/lf_Indala-00002-12345678-1A.pm3 diff --git a/traces/indala-504278295.pm3 b/traces/lf_Indala-504278295.pm3 similarity index 100% rename from traces/indala-504278295.pm3 rename to traces/lf_Indala-504278295.pm3 diff --git a/traces/keri.pm3 b/traces/lf_Keri.pm3 similarity index 80% rename from traces/keri.pm3 rename to traces/lf_Keri.pm3 index d6f9a7049..a4287b06c 100644 --- a/traces/keri.pm3 +++ b/traces/lf_Keri.pm3 @@ -1,24000 +1,24000 @@ --305 --169 -33 -220 -355 -254 -50 --135 --305 --169 -33 -220 -355 -254 -50 --152 --288 --169 -33 -237 -372 -254 -50 --135 --288 --169 -50 -237 -372 -271 -50 --135 --288 --169 -33 -220 -372 -254 -50 --152 --288 --169 -33 -220 -372 -254 -50 --135 --288 --169 -33 -220 -372 -254 -50 --152 --305 --169 -33 -220 -355 -237 -33 --152 --305 --169 -33 -203 -355 -237 -50 --152 --305 --169 -33 -203 -355 -237 -50 --152 --305 --169 -33 -203 -355 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --169 -33 -203 -355 -237 -50 --152 --288 --169 -33 -220 -355 -237 -33 --152 --305 --186 -33 -203 -355 -237 -33 --152 --305 --169 -33 -203 -355 -237 -33 --152 --305 --169 -33 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -33 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -355 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -33 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -338 -220 -33 --169 --322 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --152 --338 --474 --322 --84 -118 -288 -423 -271 -50 --152 --338 --474 --305 --84 -135 -305 -440 -305 -67 --135 --322 --457 --288 --67 -152 -322 -440 -305 -84 --135 --305 --440 --288 --67 -152 -322 -457 -305 -84 --135 --305 --440 --271 --50 -169 -338 -457 -322 -101 --101 --254 --135 -67 -254 -389 -271 -67 --135 --271 --152 -50 -237 -372 -271 -67 --135 --288 --152 -50 -237 -372 -254 -50 --135 --288 --169 -33 -220 -355 -237 -50 --152 --305 --169 -33 -203 -355 -237 -33 --152 --305 --186 -33 -203 -355 -237 -33 --152 --305 --169 -33 -220 -355 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --169 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --322 --203 -16 -203 -338 -237 -33 --152 --305 --186 -33 -203 -355 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --322 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --186 --355 --491 --338 --101 -101 -288 -406 -288 -67 --152 --338 --457 --305 --67 -135 -305 -440 -305 -84 --135 --322 --440 --288 --67 -152 -322 -440 -305 -84 --135 --305 --440 --288 --50 -152 -322 -457 -305 -84 --118 --305 --440 --271 --50 -152 -322 -457 -338 -135 --67 --237 --118 -84 -254 -406 -271 -67 --118 --271 --152 -50 -237 -372 -254 -50 --135 --288 --169 -33 -220 -372 -254 -50 --135 --305 --169 -33 -220 -355 -237 -33 --152 --305 --186 -33 -203 -355 -237 -50 --152 --305 --169 -33 -203 -355 -237 -33 --152 --305 --169 -33 -203 -355 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --322 --203 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -33 -203 -355 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -338 -220 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -338 -220 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --169 -33 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --169 -33 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -33 -203 -355 -237 -33 --152 --305 --169 -33 -220 -355 -237 -33 --152 --305 --186 -33 -203 -355 -237 -33 --152 --305 --169 -33 -220 -355 -237 -33 --152 --305 --186 -33 -220 -372 -474 -305 -67 --152 --355 --491 --338 --101 -101 -271 -389 -254 -33 --169 --355 --491 --338 --101 -101 -288 -406 -271 -50 --152 --338 --474 --305 --84 -118 -305 -423 -305 -67 --152 --322 --457 --305 --67 -135 -322 -440 -305 -84 --135 --305 --440 --288 --50 -169 -322 -237 -50 --135 --271 --152 -67 -254 -406 -288 -84 --118 --254 --135 -67 -254 -406 -288 -84 --118 --271 --135 -67 -254 -389 -271 -67 --135 --288 --152 -50 -237 -372 -254 -50 --135 --288 --169 -33 -220 -372 -254 -50 --152 --305 --169 -33 -220 -355 -254 -50 --152 --305 --169 -33 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -33 -203 -355 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --169 -33 -203 -355 -237 -33 --152 --305 --169 -33 -203 -355 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -33 -203 -355 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -33 -220 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --169 -33 -203 -355 -457 -305 -67 --152 --338 --474 --338 --101 -101 -271 -406 -271 -33 --169 --355 --474 --322 --101 -101 -288 -406 -288 -50 --152 --338 --474 --322 --84 -118 -305 -423 -288 -67 --152 --322 --457 --305 --67 -135 -322 -440 -305 -67 --135 --322 --440 --271 --33 -169 -338 -237 -50 --135 --288 --152 -67 -254 -389 -288 -84 --118 --254 --135 -67 -254 -406 -288 -84 --118 --271 --135 -67 -237 -389 -271 -67 --135 --288 --152 -33 -220 -372 -254 -50 --135 --288 --169 -33 -220 -372 -254 -50 --152 --305 --169 -33 -220 -372 -254 -50 --152 --305 --169 -33 -203 -355 -237 -33 --152 --305 --186 -33 -203 -355 -237 -33 --152 --305 --186 -33 -203 -355 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -220 -33 --169 --322 --203 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -220 -33 --169 --322 --186 -16 -203 -338 -237 -33 --152 --305 --186 -33 -203 -355 -237 -33 --152 --305 --169 -33 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --322 --203 -16 -203 -338 -220 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -355 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -33 -220 -355 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -33 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -220 -33 --169 --322 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -355 -237 -33 --152 --305 --186 -33 -203 -355 -237 -33 --152 --338 --474 --305 --84 -118 -288 -423 -271 -50 --152 --338 --474 --305 --84 -135 -305 -440 -305 -67 --135 --322 --457 --288 --67 -152 -322 -440 -305 -84 --135 --305 --440 --288 --67 -152 -322 -457 -305 -84 --118 --305 --440 --271 --50 -152 -338 -457 -322 -101 --101 --254 --118 -67 -254 -389 -271 -67 --135 --271 --152 -50 -237 -372 -271 -67 --135 --271 --152 -50 -237 -372 -254 -50 --135 --288 --169 -33 -220 -372 -254 -33 --152 --305 --169 -33 -203 -355 -237 -33 --152 --305 --169 -33 -203 -355 -237 -33 --169 --305 --169 -33 -203 -355 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -33 -220 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -33 -203 -355 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -355 -237 -33 --152 --305 --186 -33 -203 -355 -237 -50 --152 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --152 --305 --169 -33 -220 -355 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --169 -33 -203 -355 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -33 -203 -338 -237 -33 --169 --322 --203 -16 -203 -338 -220 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -355 -237 -33 --169 --322 --203 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --186 --355 --491 --338 --101 -101 -288 -406 -271 -50 --152 --338 --457 --305 --67 -135 -305 -440 -305 -84 --135 --322 --440 --288 --67 -152 -322 -440 -305 -84 --135 --322 --440 --288 --67 -152 -322 -457 -322 -101 --118 --305 --423 --271 --50 -169 -338 -474 -338 -135 --67 --237 --118 -84 -271 -406 -288 -84 --118 --271 --152 -50 -237 -372 -271 -67 --135 --288 --169 -33 -220 -372 -254 -50 --152 --305 --169 -33 -203 -355 -237 -33 --169 --305 --186 -33 -203 -355 -237 -33 --152 --305 --169 -33 -203 -355 -237 -33 --152 --305 --169 -33 -203 -355 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -33 -203 -355 -237 -33 --152 --305 --169 -33 -203 -355 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -33 -203 -338 -237 -33 --169 --322 --203 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --322 --203 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --169 -33 -203 -355 -237 -50 --152 --305 --169 -33 -203 -355 -237 -33 --152 --305 --169 -33 -203 -355 -237 -33 --152 --305 --169 -33 -203 -355 -237 -50 --152 --305 --169 -33 -203 -355 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --322 --203 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -220 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --322 --203 -16 -203 -338 -220 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -355 -474 -305 -67 --152 --355 --491 --338 --101 -101 -271 -406 -271 -33 --169 --355 --491 --322 --101 -118 -288 -406 -288 -50 --152 --338 --457 --305 --84 -118 -305 -423 -288 -67 --152 --322 --457 --305 --67 -135 -322 -440 -305 -84 --135 --305 --440 --288 --50 -169 -322 -237 -50 --135 --288 --152 -67 -254 -406 -288 -84 --118 --254 --135 -67 -254 -406 -288 -84 --118 --271 --152 -50 -237 -389 -271 -67 --135 --288 --169 -33 -220 -372 -254 -50 --135 --288 --169 -33 -220 -372 -254 -50 --152 --305 --169 -33 -220 -372 -254 -33 --186 --355 --491 --338 --101 -118 -288 -423 -288 -67 --152 --338 --457 --305 --67 -135 -322 -440 -305 -84 --135 --305 --440 --288 --50 -152 -322 -457 -305 -84 --135 --322 --440 --288 --67 -152 -322 -457 -305 -84 --118 --305 --440 --271 --50 -169 -338 -474 -338 -135 --67 --237 --118 -84 -254 -406 -271 -67 --118 --271 --152 -50 -237 -372 -271 -67 --135 --288 --169 -33 -220 -372 -254 -50 --135 --288 --169 -33 -220 -355 -254 -50 --152 --305 --169 -33 -203 -355 -237 -33 --152 --305 --169 -33 -203 -355 -237 -50 --152 --305 --169 -33 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --203 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --169 -33 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -33 -203 -355 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -33 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --322 --203 -16 -203 -338 -220 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -33 -203 -355 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --152 --305 --169 -16 -203 -355 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --169 -33 -203 -355 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -33 -203 -355 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --152 --338 --474 --305 --84 -118 -288 -423 -271 -50 --152 --338 --474 --305 --84 -135 -305 -440 -305 -67 --135 --322 --457 --288 --67 -152 -322 -440 -305 -84 --135 --322 --440 --288 --67 -152 -322 -440 -305 -84 --135 --305 --440 --271 --50 -152 -322 -457 -305 -101 --101 --254 --135 -67 -254 -389 -271 -67 --135 --271 --152 -50 -237 -372 -271 -67 --135 --288 --152 -33 -237 -372 -254 -50 --135 --288 --169 -33 -220 -372 -254 -33 --152 --305 --186 -33 -220 -355 -237 -33 --152 --305 --169 -33 -203 -355 -237 -33 --152 --305 --169 -33 -203 -355 -457 -305 -67 --152 --338 --474 --338 --101 -101 -271 -406 -271 -50 --169 --355 --474 --322 --84 -118 -288 -423 -288 -67 --152 --338 --457 --305 --84 -135 -305 -440 -305 -67 --135 --322 --457 --288 --67 -135 -322 -440 -305 -84 --135 --305 --440 --271 --50 -152 -322 -457 -305 -84 --135 --305 --440 --288 --50 -152 -338 -457 -322 -101 --118 --305 --423 --271 --50 -169 -338 -457 -322 -101 --118 --305 --440 --271 --50 -152 -338 -457 -322 -101 --118 --305 --423 --271 --50 -169 -338 -474 -322 -101 --118 --305 --423 --254 --33 -186 -338 -237 -50 --135 --271 --152 -67 -254 -406 -288 -84 --101 --254 --135 -67 -254 -406 -288 -84 --118 --271 --135 -67 -254 -389 -271 -67 --135 --288 --169 -50 -237 -372 -271 -50 --135 --288 --152 -50 -237 -372 -254 -50 --152 --305 --169 -33 -220 -372 -474 -322 -84 --135 --338 --474 --322 --101 -101 -288 -406 -271 -50 --169 --338 --474 --322 --84 -118 -305 -423 -288 -67 --135 --322 --457 --305 --67 -135 -305 -440 -305 -67 --152 --322 --457 --305 --67 -135 -322 -440 -305 -84 --135 --305 --440 --288 --50 -169 -322 -237 -50 --135 --288 --152 -67 -254 -406 -288 -84 --101 --254 --135 -67 -254 -406 -288 -84 --118 --271 --135 -67 -254 -389 -271 -67 --135 --271 --152 -50 -237 -372 -254 -50 --135 --288 --169 -33 -220 -372 -254 -50 --152 --305 --169 -33 -220 -372 -254 -33 --169 --355 --491 --322 --101 -118 -288 -423 -288 -67 --152 --322 --457 --288 --67 -135 -322 -440 -305 -84 --135 --305 --440 --271 --50 -152 -322 -457 -305 -84 --135 --305 --440 --288 --67 -152 -322 -457 -305 -84 --118 --305 --440 --271 --50 -152 -322 -457 -322 -101 --118 --305 --440 --288 --50 -152 -322 -457 -305 -84 --118 --305 --440 --271 --50 -169 -338 -457 -322 -101 --118 --305 --423 --271 --50 -169 -338 -457 -322 -84 --118 --305 --440 --271 --50 -152 -322 -457 -322 -101 --118 --288 --440 --271 --50 -169 -338 -474 -338 -135 --67 --237 --118 -84 -271 -406 -271 -67 --118 --271 --152 -50 -237 -372 -271 -67 --135 --288 --169 -33 -237 -372 -254 -50 --135 --288 --169 -33 -220 -355 -237 -33 --152 --305 --169 -33 -203 -355 -237 -33 --152 --305 --186 -33 -203 -355 -237 -33 --152 --338 --474 --322 --84 -118 -288 -423 -288 -50 --152 --338 --474 --305 --67 -135 -305 -440 -305 -84 --135 --322 --457 --288 --67 -152 -322 -457 -305 -84 --135 --305 --440 --288 --50 -152 -322 -457 -305 -84 --118 --305 --423 --271 --50 -169 -338 -457 -322 -101 --101 --254 --135 -67 -254 -389 -271 -67 --135 --271 --152 -50 -237 -372 -254 -67 --135 --288 --169 -33 -237 -372 -254 -50 --135 --288 --169 -33 -220 -372 -254 -33 --152 --305 --186 -33 -203 -355 -237 -33 --152 --305 --169 -33 -220 -355 -237 -33 --152 --305 --169 -33 -220 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -33 -203 -355 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -33 -220 -372 -474 -305 -67 --152 --338 --474 --338 --101 -101 -271 -406 -271 -33 --169 --355 --474 --322 --84 -118 -305 -423 -288 -67 --152 --338 --457 --305 --84 -135 -305 -423 -288 -67 --135 --322 --457 --288 --67 -135 -322 -457 -305 -84 --135 --305 --440 --288 --50 -169 -338 -457 -322 -84 --118 --305 --440 --288 --50 -152 -322 -457 -322 -84 --118 --305 --423 --271 --50 -152 -322 -457 -322 -101 --118 --305 --440 --271 --50 -152 -338 -457 -322 -101 --118 --305 --423 --271 --50 -169 -338 -474 -322 -101 --118 --305 --423 --271 --33 -169 -338 -237 -50 --135 --271 --135 -67 -254 -406 -288 -84 --101 --254 --135 -67 -254 -406 -288 -84 --118 --271 --135 -67 -254 -389 -271 -67 --135 --271 --152 -50 -237 -372 -254 -50 --135 --288 --169 -33 -220 -372 -254 -50 --152 --288 --169 -33 -220 -372 -254 -50 --152 --305 --169 -33 -203 -355 -237 -33 --152 --305 --186 -33 -203 -355 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --169 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --152 --305 --186 -33 -203 -355 -237 -33 --152 --305 --169 -16 -203 -338 -237 -33 --169 --322 --203 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --169 -33 -203 -355 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -33 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --322 --186 -16 -203 -355 -474 -305 -67 --152 --355 --474 --338 --101 -101 -271 -406 -271 -33 --169 --355 --474 --322 --84 -118 -288 -406 -288 -67 --152 --338 --457 --305 --84 -135 -305 -423 -305 -67 --135 --322 --457 --288 --67 -135 -322 -440 -305 -84 --135 --305 --440 --288 --50 -169 -322 -237 -50 --135 --288 --152 -50 -254 -389 -288 -84 --101 --254 --135 -67 -254 -406 -288 -84 --118 --271 --135 -67 -254 -389 -271 -67 --135 --288 --152 -50 -237 -372 -254 -50 --135 --288 --169 -33 -220 -372 -254 -50 --152 --288 --169 -33 -220 -372 -254 -50 --152 --305 --169 -33 -203 -355 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --152 --305 --169 -33 -203 -355 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --169 -33 -203 -355 -237 -33 --152 --305 --169 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --169 -16 -203 -355 -457 -305 -67 --169 --355 --491 --338 --101 -101 -271 -406 -271 -50 --169 --355 --474 --322 --84 -118 -288 -423 -288 -67 --152 --338 --457 --305 --84 -135 -305 -440 -305 -67 --135 --322 --440 --288 --67 -135 -322 -457 -305 -84 --135 --305 --440 --271 --50 -152 -322 -457 -305 -84 --135 --322 --440 --288 --67 -152 -322 -457 -305 -84 --118 --305 --440 --271 --50 -152 -322 -457 -322 -101 --118 --305 --440 --271 --50 -152 -338 -457 -322 -84 --118 --305 --423 --271 --50 -169 -338 -474 -322 -101 --118 --305 --423 --254 --16 -186 -338 -254 -50 --135 --271 --135 -67 -254 -406 -288 -84 --101 --254 --135 -67 -254 -406 -288 -84 --118 --271 --135 -67 -254 -389 -271 -67 --135 --288 --152 -50 -237 -372 -254 -50 --135 --288 --152 -50 -237 -372 -254 -50 --152 --305 --169 -33 -220 -372 -237 -50 --152 --305 --169 -33 -220 -355 -237 -33 --152 --305 --169 -33 -203 -355 -237 -33 --152 --305 --186 -33 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --169 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -33 -203 -355 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -33 -203 -355 -237 -33 --169 --305 --169 -33 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -33 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -338 -237 -16 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --169 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --169 --305 --169 -33 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -33 -220 -355 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -33 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --169 -33 -203 -355 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -33 -203 -355 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -33 -203 -355 -237 -33 --152 --305 --186 -16 -203 -338 -220 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -220 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --338 --474 --322 --84 -118 -288 -406 -288 -50 --152 --338 --474 --305 --67 -135 -305 -440 -305 -84 --135 --305 --440 --288 --67 -152 -322 -440 -305 -84 --135 --305 --440 --288 --67 -152 -322 -457 -322 -84 --118 --305 --440 --271 --50 -152 -322 -457 -322 -101 --101 --237 --118 -67 -254 -389 -271 -67 --135 --271 --152 -50 -237 -372 -271 -67 --135 --288 --169 -33 -237 -372 -254 -50 --135 --288 --169 -33 -220 -372 -237 -33 --152 --305 --186 -33 -203 -355 -237 -33 --152 --305 --169 -33 -203 -355 -237 -33 --169 --305 --169 -33 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -220 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -338 -220 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --152 --305 --169 -33 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -33 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -33 -203 -355 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -33 -220 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -33 -203 -355 -237 -33 --152 --305 --186 -33 -203 -355 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -355 -237 -16 --186 --372 --508 --338 --101 -101 -288 -406 -271 -50 --152 --338 --474 --305 --67 -135 -305 -440 -305 -84 --135 --322 --440 --288 --67 -152 -322 -440 -305 -84 --135 --305 --440 --288 --67 -152 -322 -457 -305 -84 --118 --305 --440 --271 --50 -152 -322 -457 -338 -135 --84 --237 --118 -84 -254 -406 -271 -67 --135 --271 --152 -50 -237 -372 -271 -50 --135 --288 --169 -33 -220 -372 -254 -50 --135 --288 --169 -33 -220 -355 -237 -50 --152 --305 --169 -33 -220 -355 -237 -33 --152 --305 --169 -33 -203 -355 -237 -33 --152 --305 --169 -33 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --322 --203 -16 -203 -338 -237 -33 --169 --305 --186 -33 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --322 --186 -16 -203 -355 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -355 -237 -50 --152 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -33 -203 -355 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -33 -203 -338 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -220 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --169 -33 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -33 -203 -355 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -33 -203 -355 -237 -33 --152 --305 --186 -33 -220 -372 -474 -322 -84 --152 --338 --474 --322 --101 -101 -271 -406 -271 -33 --169 --355 --474 --322 --84 -118 -305 -423 -288 -67 --152 --322 --457 --305 --84 -135 -305 -440 -288 -67 --135 --322 --457 --305 --67 -135 -322 -440 -305 -84 --135 --305 --440 --288 --50 -169 -322 -237 -50 --135 --288 --152 -67 -254 -406 -288 -84 --101 --254 --135 -67 -254 -406 -288 -84 --118 --271 --135 -50 -237 -389 -271 -67 --135 --288 --169 -33 -220 -372 -254 -50 --152 --305 --169 -33 -220 -372 -254 -50 --152 --305 --169 -33 -220 -355 -254 -50 --152 --305 --169 -33 -203 -355 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --169 -33 -203 -355 -237 -50 --152 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -33 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --169 -33 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -33 -203 -355 -237 -50 --152 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --169 -33 -203 -355 -457 -305 -67 --152 --355 --491 --338 --101 -101 -271 -406 -271 -50 --169 --338 --474 --322 --84 -118 -288 -423 -288 -67 --152 --338 --457 --305 --84 -135 -305 -423 -305 -67 --135 --322 --457 --288 --67 -152 -322 -457 -305 -84 --135 --305 --440 --271 --33 -169 -338 -237 -50 --135 --271 --152 -67 -254 -406 -288 -84 --118 --254 --135 -67 -254 -389 -271 -67 --118 --271 --135 -67 -237 -389 -271 -67 --135 --288 --169 -33 -220 -372 -254 -50 --152 --305 --169 -33 -220 -372 -254 -50 --152 --305 --169 -33 -220 -372 -237 -50 --152 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -33 -203 -355 -237 -33 --152 --305 --186 -33 -203 -355 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -33 -203 -355 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --152 --305 --186 -33 -203 -355 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --305 --169 -33 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -33 -203 -355 -237 -33 --152 --305 --169 -33 -203 -355 -237 -33 --169 --305 --203 -16 -203 -338 -237 -33 --169 --305 --186 -33 -203 -338 -237 -33 --169 --305 --186 -33 -203 -355 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --322 --186 -16 -203 -355 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --152 --305 --169 -33 -203 -355 -237 -33 --152 --305 --186 -33 -203 -355 -254 -33 --152 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --338 --474 --322 --101 -118 -288 -406 -271 -50 --169 --338 --474 --305 --84 -135 -305 -440 -288 -67 --135 --322 --457 --305 --67 -152 -322 -440 -305 -84 --135 --305 --440 --288 --67 -152 -322 -457 -305 -84 --118 --305 --440 --271 --50 -152 -338 -457 -322 -101 --84 --237 --118 -67 -254 -389 -271 -67 --135 --271 --152 -50 -237 -372 -254 -50 --135 --288 --169 -33 -220 -372 -254 -50 --152 --288 --169 -33 -220 -355 -237 -33 --152 --305 --169 -33 -220 -355 -237 -33 --152 --305 --169 -33 -220 -355 -237 -33 --152 --305 --169 -33 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -33 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -33 -220 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --152 --305 --169 -33 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -220 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -33 -203 -355 -237 -33 --169 --305 --169 -33 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -33 -203 -355 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --186 --355 --491 --338 --101 -101 -288 -423 -288 -67 --152 --322 --457 --305 --67 -135 -305 -440 -305 -84 --135 --305 --440 --271 --50 -152 -322 -457 -305 -84 --135 --305 --440 --288 --50 -152 -322 -457 -322 -84 --118 --305 --440 --271 --50 -152 -322 -474 -338 -135 --67 --237 --118 -84 -254 -389 -271 -67 --135 --271 --152 -50 -237 -372 -254 -50 --135 --288 --169 -33 -220 -372 -254 -50 --152 --305 --169 -33 -203 -355 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -33 -203 -355 -237 -33 --152 --305 --169 -33 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -33 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --169 -33 -203 -355 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -33 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --169 -33 -203 -355 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -33 -220 -372 -474 -305 -67 --152 --338 --474 --338 --101 -101 -271 -406 -271 -33 --169 --355 --474 --322 --101 -118 -288 -406 -288 -67 --152 --338 --457 --305 --84 -135 -305 -440 -305 -67 --135 --322 --457 --288 --67 -135 -322 -440 -305 -84 --135 --305 --440 --288 --50 -169 -338 -237 -50 --135 --288 --152 -67 -254 -406 -288 -84 --101 --254 --135 -67 -254 -406 -288 -84 --118 --271 --152 -50 -237 -389 -271 -67 --135 --288 --152 -33 -220 -372 -254 -50 --135 --288 --169 -33 -220 -372 -254 -50 --135 --288 --169 -33 -220 -355 -254 -50 --152 --305 --169 -33 -203 -355 -237 -33 --152 --305 --186 -33 -203 -355 -237 -33 --152 --305 --186 -33 -203 -355 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -33 -203 -355 -237 -33 --152 --305 --169 -33 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -33 -203 -355 -237 -33 --152 --305 --169 -33 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -33 -203 -355 -237 -33 --169 --322 --186 -16 -203 -338 -220 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --322 --203 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -33 -220 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -220 -33 --169 --322 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --152 --305 --169 -33 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -220 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --169 -33 -203 -355 -457 -305 -67 --152 --338 --474 --322 --101 -101 -288 -406 -271 -50 --169 --338 --474 --322 --84 -118 -305 -423 -288 -67 --152 --338 --457 --305 --67 -135 -305 -440 -305 -67 --135 --322 --440 --288 --50 -152 -322 -457 -305 -84 --135 --305 --440 --271 --33 -169 -338 -237 -50 --135 --271 --152 -67 -254 -406 -288 -84 --101 --254 --135 -67 -254 -389 -271 -67 --118 --271 --152 -50 -237 -389 -271 -67 --135 --288 --169 -33 -220 -372 -254 -50 --152 --288 --169 -33 -220 -372 -254 -50 --152 --305 --169 -33 -220 -372 -254 -50 --152 --305 --169 -16 -203 -355 -237 -33 --152 --305 --169 -33 -220 -355 -237 -50 --152 --305 --169 -33 -220 -355 -237 -33 --152 --305 --186 -33 -203 -355 -237 -33 --152 --305 --186 -33 -203 -355 -237 -33 --152 --305 --186 -16 -203 -355 -254 -50 --152 --305 --169 -33 -203 -355 -220 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --322 --203 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -33 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -33 -203 -355 -237 -33 --152 --305 --169 -33 -203 -355 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -33 -203 -355 -237 -33 --169 --305 --186 -33 -203 -355 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --338 --474 --322 --84 -118 -288 -423 -271 -50 --152 --338 --474 --305 --84 -118 -305 -440 -288 -67 --135 --322 --457 --288 --67 -152 -322 -440 -305 -84 --135 --322 --457 --288 --67 -152 -322 -440 -305 -84 --135 --305 --440 --271 --50 -152 -322 -457 -322 -101 --101 --254 --135 -67 -254 -389 -271 -67 --135 --271 --152 -50 -237 -372 -254 -50 --135 --288 --152 -33 -220 -372 -254 -50 --152 --288 --169 -33 -220 -355 -237 -33 --152 --305 --169 -33 -203 -355 -237 -33 --152 --305 --186 -33 -203 -355 -237 -33 --169 --305 --169 -33 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -33 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -33 -203 -355 -237 -33 --152 --305 --186 -16 -220 -355 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --169 -33 -203 -355 -237 -33 --152 --288 --169 -33 -220 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -33 -203 -355 -237 -33 --152 --305 --169 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --186 --372 --491 --338 --101 -101 -288 -406 -271 -50 --152 --338 --457 --305 --67 -135 -305 -440 -305 -84 --135 --322 --440 --288 --67 -152 -322 -457 -305 -84 --135 --305 --440 --288 --50 -152 -322 -457 -322 -101 --118 --305 --440 --271 --50 -169 -338 -474 -338 -135 --67 --237 --118 -84 -271 -389 -271 -67 --135 --271 --152 -50 -237 -372 -254 -50 --135 --288 --169 -33 -220 -372 -254 -50 --135 --305 --169 -33 -220 -355 -237 -33 --152 --305 --169 -33 -220 -355 -254 -50 --152 --305 --169 -33 -220 -355 -237 -50 --152 --338 --474 --305 --84 -118 -288 -423 -271 -50 --152 --338 --474 --305 --84 -135 -305 -440 -305 -67 --135 --322 --457 --288 --67 -152 -322 -440 -305 -84 --135 --322 --440 --288 --67 -152 -322 -457 -305 -84 --118 --305 --440 --271 --50 -152 -322 -457 -305 -101 --101 --254 --135 -67 -254 -389 -271 -67 --135 --271 --152 -50 -237 -372 -271 -67 --135 --288 --152 -50 -237 -372 -254 -50 --135 --288 --169 -33 -220 -372 -237 -33 --152 --305 --186 -33 -203 -355 -237 -33 --152 --305 --169 -33 -220 -355 -237 -33 --152 --305 --169 -33 -220 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -33 -203 -355 -237 -33 --169 --305 --186 -33 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -220 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -33 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --169 -33 -203 -355 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -33 -203 -355 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --169 -33 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -33 -203 -355 -237 -33 --169 --305 --186 -33 -203 -355 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -220 -355 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -33 -203 -355 -237 -50 --152 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -33 -203 -355 -237 -33 --152 --305 --186 -33 -203 -355 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -33 -203 -338 -237 -33 --152 --305 --169 -33 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --322 --203 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -457 -305 -50 --169 --355 --491 --338 --101 -101 -271 -406 -271 -33 --169 --355 --474 --322 --101 -118 -288 -423 -288 -67 --152 --338 --457 --305 --84 -135 -305 -423 -305 -67 --135 --322 --457 --288 --67 -135 -322 -440 -305 -84 --135 --305 --440 --271 --33 -169 -338 -237 -50 --135 --271 --152 -67 -254 -406 -288 -84 --101 --254 --135 -67 -254 -406 -288 -84 --118 --271 --135 -67 -254 -389 -271 -67 --135 --288 --169 -33 -220 -372 -254 -50 --152 --288 --169 -33 -220 -372 -254 -50 --152 --305 --169 -33 -220 -372 -474 -322 -67 --152 --338 --474 --322 --101 -101 -288 -406 -271 -50 --169 --338 --474 --322 --84 -118 -305 -423 -288 -67 --135 --322 --457 --305 --67 -135 -305 -440 -305 -67 --135 --322 --457 --288 --67 -135 -322 -457 -305 -84 --118 --305 --440 --288 --50 -152 -338 -457 -322 -84 --118 --305 --440 --288 --50 -152 -338 -457 -322 -101 --118 --305 --423 --271 --50 -169 -338 -457 -322 -101 --101 --288 --423 --271 --50 -152 -322 -457 -305 -84 --118 --305 --440 --271 --50 -169 -338 -457 -322 -101 --118 --305 --440 --271 --50 -169 -338 -237 -50 --135 --271 --135 -67 -254 -406 -288 -84 --101 --254 --135 -67 -254 -406 -288 -84 --118 --271 --152 -50 -237 -389 -271 -67 --135 --288 --169 -50 -237 -372 -254 -50 --135 --288 --169 -33 -220 -372 -254 -50 --135 --288 --169 -33 -220 -372 -254 -33 --169 --355 --491 --322 --101 -118 -288 -423 -288 -67 --152 --322 --457 --305 --67 -135 -322 -440 -305 -84 --135 --305 --440 --271 --50 -152 -322 -457 -305 -84 --135 --305 --440 --271 --50 -152 -322 -457 -322 -101 --118 --305 --440 --271 --50 -169 -338 -474 -338 -118 --67 --237 --118 -84 -271 -406 -271 -67 --118 --271 --152 -50 -237 -372 -271 -50 --135 --288 --169 -33 -220 -372 -254 -50 --152 --288 --169 -33 -220 -355 -237 -33 --152 --305 --186 -33 -203 -355 -237 -33 --152 --305 --169 -16 -203 -355 -237 -33 --152 --338 --474 --322 --84 -118 -288 -406 -271 -50 --152 --338 --474 --305 --67 -135 -305 -440 -305 -84 --135 --322 --457 --288 --67 -152 -322 -457 -305 -84 --135 --305 --440 --288 --50 -152 -322 -457 -305 -84 --118 --305 --440 --271 --50 -152 -322 -457 -305 -101 --118 --288 --423 --271 --50 -152 -322 -457 -322 -101 --118 --305 --440 --271 --50 -169 -338 -474 -322 -101 --118 --288 --423 --271 --50 -169 -338 -474 -322 -101 --118 --305 --440 --271 --50 -169 -338 -457 -322 -101 --118 --288 --423 --271 --50 -169 -338 -457 -322 -101 --84 --237 --118 -84 -254 -406 -271 -67 --118 --271 --152 -50 -237 -372 -271 -67 --135 --288 --152 -33 -237 -372 -254 -50 --152 --288 --169 -33 -220 -355 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --152 --305 --169 -33 -203 -355 -237 -33 --169 --305 --169 -33 -203 -355 -457 -305 -67 --152 --338 --474 --338 --101 -101 -288 -406 -271 -50 --169 --338 --474 --322 --84 -118 -305 -423 -305 -67 --152 --338 --457 --305 --67 -135 -305 -440 -305 -67 --135 --322 --440 --288 --67 -152 -322 -457 -305 -84 --135 --305 --440 --271 --33 -169 -338 -237 -50 --135 --271 --152 -67 -254 -406 -288 -84 --101 --254 --135 -67 -254 -406 -271 -84 --118 --271 --135 -67 -237 -389 -271 -67 --135 --288 --169 -33 -220 -372 -254 -50 --152 --288 --169 -33 -220 -372 -254 -50 --152 --305 --169 -33 -220 -372 -254 -50 --152 --305 --186 -33 -203 -355 -237 -33 --152 --305 --186 -33 -203 -355 -237 -33 --152 --305 --186 -33 -203 -355 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --186 --372 --491 --338 --101 -101 -288 -406 -271 -50 --152 --338 --474 --305 --67 -135 -305 -440 -305 -84 --135 --322 --440 --288 --67 -152 -322 -440 -305 -84 --135 --322 --440 --288 --67 -152 -322 -457 -322 -101 --118 --305 --440 --271 --50 -152 -338 -457 -322 -101 --118 --305 --440 --271 --50 -152 -338 -457 -322 -101 --118 --288 --423 --271 --50 -169 -338 -474 -322 -101 --118 --305 --423 --271 --50 -169 -338 -474 -322 -101 --118 --305 --440 --271 --50 -152 -338 -457 -322 -101 --118 --288 --423 --271 --50 -169 -338 -474 -338 -135 --67 --237 --118 -84 -271 -406 -288 -84 --118 --271 --152 -50 -237 -372 -271 -67 --135 --288 --169 -33 -220 -372 -254 -50 --135 --288 --169 -33 -220 -355 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --152 --305 --169 -33 -203 -355 -237 -33 --152 --305 --169 -33 -203 -355 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --169 -33 -203 -355 -237 -33 --152 --305 --169 -33 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --169 -33 -203 -355 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -33 -203 -355 -237 -33 --152 --305 --186 -33 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -355 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --186 --355 --491 --338 --101 -118 -288 -406 -288 -50 --152 --338 --474 --305 --67 -135 -305 -440 -305 -84 --135 --322 --440 --288 --67 -152 -322 -440 -305 -84 --135 --305 --440 --288 --67 -152 -322 -457 -305 -84 --118 --305 --440 --271 --50 -152 -338 -457 -338 -118 --84 --237 --118 -84 -254 -406 -288 -84 --118 --271 --152 -50 -237 -372 -271 -67 --135 --288 --169 -33 -220 -372 -254 -50 --135 --288 --169 -33 -220 -355 -237 -33 --152 --305 --169 -33 -220 -355 -237 -33 --152 --305 --169 -33 -220 -355 -237 -50 --152 --305 --169 -33 -220 -355 -237 -33 --152 --305 --169 -33 -203 -355 -237 -33 --152 --305 --169 -33 -220 -355 -237 -33 --152 --305 --169 -33 -220 -355 -237 -33 --152 --305 --169 -33 -220 -355 -237 -50 --152 --305 --169 -33 -220 -372 -254 -50 --152 --288 --169 -50 -237 -372 -254 -50 --135 --288 --152 -50 -237 -372 -271 -67 --135 --271 --135 -67 -254 -389 -271 -84 --118 --271 --135 -67 -271 -406 -288 -84 --118 --271 --135 -67 -237 -389 -271 -50 --135 --288 --169 -33 -203 -355 -237 -33 --169 --322 --203 -0 -186 -338 -440 -288 -50 --186 --372 --508 --355 --135 -67 -237 -372 -237 -0 --203 --389 --508 --355 --135 -84 -254 -389 -254 -33 --186 --355 --491 --338 --101 -101 -271 -406 -271 -50 --169 --338 --474 --322 --84 -118 -305 -423 -288 -67 --152 --322 --457 --305 --67 -135 -322 -440 -305 -67 --135 --322 --457 --305 --67 -135 -305 -440 -305 -84 --135 --305 --440 --288 --67 -152 -322 -440 -305 -84 --118 --305 --440 --288 --50 -152 -322 -440 -305 -84 --135 --305 --440 --288 --50 -152 -322 -457 -322 -84 --118 --305 --440 --271 --50 -169 -338 -237 -50 --135 --271 --135 -67 -254 -406 -288 -84 --101 --254 --135 -67 -254 -406 -288 -84 --118 --271 --135 -50 -254 -389 -271 -67 --135 --288 --152 -50 -220 -372 -254 -50 --135 --288 --169 -33 -220 -372 -254 -50 --152 --305 --169 -33 -220 -372 -254 -50 --152 --305 --169 -33 -203 -355 -237 -33 --152 --305 --186 -33 -203 -355 -237 -50 --152 --305 --169 -33 -203 -355 -237 -50 --152 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --169 -33 -203 -355 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -33 -203 -355 -237 -33 --169 --305 --169 -33 -203 -355 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -33 -203 -355 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -33 -220 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -355 -237 -33 --152 --305 --169 -33 -203 -355 -237 -33 --152 --305 --169 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -33 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -33 -203 -355 -237 -33 --152 --305 --186 -33 -220 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --322 --186 -16 -203 -338 -220 -33 --169 --322 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --152 --305 --169 -33 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -33 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -33 -203 -355 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --152 --305 --186 -33 -203 -355 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --169 -16 -203 -355 -457 -305 -67 --169 --355 --491 --338 --101 -101 -271 -406 -271 -50 --169 --355 --474 --322 --101 -118 -288 -423 -288 -67 --152 --338 --457 --305 --84 -135 -305 -440 -305 -67 --135 --322 --440 --288 --50 -152 -322 -457 -305 -84 --135 --305 --423 --271 --33 -186 -338 -237 -50 --135 --271 --152 -67 -254 -406 -288 -84 --101 --254 --135 -67 -254 -406 -288 -84 --118 --271 --135 -67 -254 -389 -271 -67 --135 --288 --169 -33 -220 -372 -254 -50 --135 --288 --169 -33 -220 -372 -254 -50 --152 --305 --169 -33 -220 -372 -237 -33 --152 --305 --186 -33 -203 -355 -237 -33 --152 --305 --186 -33 -203 -355 -237 -33 --152 --305 --186 -33 -203 -355 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --152 --305 --169 -33 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --169 -33 -203 -355 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -33 -203 -355 -237 -33 --152 --305 --186 -16 -203 -355 -254 -50 --152 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -33 -203 -355 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --338 --474 --322 --84 -118 -288 -406 -271 -50 --152 --338 --474 --305 --84 -135 -305 -440 -288 -67 --135 --322 --457 --305 --67 -152 -322 -440 -305 -84 --135 --305 --440 --288 --50 -152 -322 -457 -305 -84 --118 --305 --440 --271 --50 -152 -322 -457 -322 -101 --101 --254 --135 -67 -254 -389 -271 -67 --118 --271 --152 -50 -237 -372 -271 -67 --135 --288 --152 -33 -237 -372 -254 -50 --135 --288 --169 -33 -220 -372 -237 -50 --152 --305 --169 -33 -203 -355 -237 -33 --152 --305 --169 -33 -220 -355 -237 -33 --152 --305 --169 -33 -203 -355 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -33 -203 -355 -237 -33 --169 --305 --186 -33 -203 -355 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -220 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --169 -33 -220 -355 -254 -50 --152 --288 --169 -33 -237 -372 -254 -50 --135 --271 --152 -50 -237 -389 -271 -67 --118 --271 --135 -67 -254 -406 -288 -84 --118 --271 --135 -50 -237 -372 -271 -50 --135 --305 --169 -33 -203 -355 -237 -33 --169 --322 --203 -0 -186 -338 -220 -16 --186 --338 --203 -0 -186 -322 -220 -16 --186 --338 --203 -0 -186 -322 -220 -16 --186 --338 --203 -0 -186 -322 -220 -16 --186 --322 --203 -0 -186 -338 -220 -16 --169 --322 --203 -0 -203 -338 -220 -16 --169 --322 --203 -0 -186 -338 -220 -16 --169 --322 --203 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --186 --372 --491 --338 --101 -101 -271 -406 -271 -50 --152 --338 --474 --305 --84 -135 -305 -440 -305 -67 --135 --322 --457 --288 --67 -152 -322 -440 -305 -84 --135 --305 --440 --288 --50 -152 -322 -457 -322 -101 --118 --288 --440 --271 --50 -169 -338 -474 -338 -135 --67 --237 --118 -84 -271 -406 -288 -84 --118 --271 --152 -50 -237 -389 -271 -67 --135 --288 --152 -50 -220 -372 -254 -50 --135 --288 --169 -33 -220 -372 -237 -50 --152 --305 --169 -33 -220 -355 -237 -50 --152 --305 --169 -33 -220 -355 -237 -50 --152 --305 --169 -33 -203 -355 -237 -33 --169 --305 --186 -16 -203 -355 -237 -50 --152 --288 --169 -33 -237 -372 -271 -67 --118 --271 --135 -67 -237 -389 -271 -50 --135 --305 --169 -33 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -220 -16 --169 --322 --186 -16 -203 -338 -220 -16 --186 --338 --203 -0 -186 -338 -220 -16 --186 --322 --203 -0 -186 -338 -220 -16 --169 --322 --203 -16 -203 -338 -220 -16 --169 --322 --203 -0 -186 -338 -220 -16 --169 --322 --203 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -355 -237 -50 --152 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -338 -220 -33 --169 --322 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -33 -203 -355 -237 -33 --152 --305 --169 -33 -220 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -33 -203 -355 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -372 -474 -305 -67 --152 --338 --474 --338 --101 -101 -271 -406 -271 -33 --169 --355 --474 --322 --101 -118 -288 -423 -288 -67 --152 --322 --457 --305 --67 -135 -305 -440 -305 -67 --135 --322 --457 --288 --67 -135 -322 -457 -305 -84 --135 --305 --440 --288 --50 -169 -322 -237 -50 --135 --288 --152 -50 -254 -389 -288 -84 --118 --271 --135 -67 -254 -389 -271 -67 --118 --271 --152 -50 -237 -389 -271 -67 --135 --288 --169 -33 -220 -372 -254 -50 --152 --305 --169 -33 -220 -372 -254 -50 --152 --305 --169 -33 -220 -372 -254 -50 --152 --305 --169 -33 -220 -355 -237 -33 --169 --305 --186 -33 -203 -355 -237 -50 --152 --305 --169 -33 -220 -355 -237 -50 --152 --305 --169 -33 -203 -355 -237 -33 --152 --305 --186 -33 -203 -355 -237 -33 --152 --305 --169 -33 -203 -355 -237 -33 --152 --305 --169 -33 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -220 -33 --169 --322 --203 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -33 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -33 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --152 --305 --186 -33 -203 -355 -237 -33 --152 --305 --169 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -33 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --169 -33 -203 -355 -457 -305 -67 --152 --355 --474 --338 --101 -101 -271 -406 -271 -50 --169 --355 --474 --322 --84 -118 -288 -423 -288 -67 --152 --338 --457 --305 --84 -135 -305 -440 -305 -67 --135 --322 --457 --288 --67 -152 -322 -457 -305 -84 --135 --305 --423 --271 --33 -169 -338 -237 -50 --135 --271 --135 -67 -254 -406 -288 -84 --118 --254 --135 -67 -254 -389 -271 -67 --118 --271 --135 -50 -237 -389 -271 -67 --135 --288 --152 -33 -220 -372 -254 -50 --135 --288 --169 -33 -220 -372 -254 -50 --152 --305 --169 -33 -220 -372 -254 -33 --152 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -33 -203 -355 -237 -50 --152 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --169 -33 -203 -355 -237 -33 --169 --305 --169 -33 -203 -355 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --322 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -355 -237 -50 --152 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --338 --474 --322 --84 -118 -288 -406 -271 -50 --169 --338 --474 --305 --84 -135 -305 -440 -305 -67 --135 --322 --457 --288 --67 -152 -322 -457 -305 -84 --135 --305 --440 --288 --67 -152 -322 -457 -305 -84 --118 --305 --440 --271 --50 -169 -338 -457 -322 -101 --101 --254 --135 -67 -254 -389 -271 -67 --135 --271 --152 -50 -237 -372 -271 -50 --135 --288 --169 -33 -220 -372 -254 -50 --152 --288 --169 -33 -220 -355 -237 -33 --152 --305 --186 -33 -203 -355 -237 -33 --152 --305 --169 -33 -203 -355 -237 -33 --152 --305 --169 -33 -203 -355 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -33 -203 -355 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -33 -220 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -33 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -355 -254 -50 --152 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --169 -33 -203 -355 -237 -50 --152 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -33 -203 -355 -237 -33 --169 --305 --186 -33 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -33 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --169 -33 -220 -355 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -33 -203 -355 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --186 --372 --491 --338 --101 -101 -288 -406 -271 -50 --152 --338 --474 --305 --67 -135 -305 -440 -305 -84 --135 --322 --440 --288 --50 -152 -322 -457 -305 -84 --135 --305 --440 --288 --50 -152 -322 -457 -322 -101 --118 --305 --440 --271 --50 -169 -338 -474 -338 -135 --67 --237 --118 -84 -271 -406 -288 -84 --118 --271 --152 -50 -237 -389 -271 -67 --135 --288 --152 -33 -220 -372 -254 -50 --135 --288 --169 -33 -220 -355 -237 -33 --152 --305 --169 -33 -220 -355 -237 -33 --152 --305 --169 -33 -203 -355 -237 -33 --152 --305 --169 -33 -203 -355 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -33 -203 -355 -237 -33 --152 --305 --169 -33 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -33 -203 -355 -254 -50 --152 --288 --152 -50 -237 -372 -254 -50 --135 --288 --169 -50 -237 -372 -271 -67 --118 --271 --135 -67 -254 -389 -288 -84 --118 --271 --135 -67 -254 -389 -271 -67 --135 --271 --152 -50 -237 -389 -271 -67 --118 --271 --152 -50 -237 -389 -271 -67 --135 --271 --152 -50 -254 -389 -271 -67 --135 --288 --152 -50 -237 -372 -254 -50 --135 --288 --152 -50 -237 -372 -254 -50 --152 --288 --169 -33 -220 -372 -254 -50 --152 --288 --169 -33 -220 -372 -254 -50 --152 --305 --169 -33 -220 -355 -237 -50 --152 --305 --169 -33 -220 -355 -237 -50 --152 --305 --186 -16 -203 -338 -237 -33 --169 --322 --203 -0 -186 -322 -203 -16 --186 --338 --220 --16 -169 -305 -203 -0 --203 --355 --237 --33 -152 -305 -186 --16 --220 --372 --237 --33 -152 -305 -186 --16 --203 --355 --237 --33 -169 -305 -186 -0 --203 --338 --220 --16 -169 -305 -186 -0 --203 --355 --220 --16 -169 -305 -203 -0 --186 --338 --203 -0 -186 -322 -203 -16 --186 --338 --203 -0 -186 -322 -203 -16 --186 --338 --203 -0 -186 -322 -220 -16 --169 --322 --203 -16 -203 -338 -220 -16 --169 --322 --186 -16 -203 -338 -220 -33 --169 --322 --203 -16 -203 -338 -220 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -355 -237 -33 --152 --305 --186 -33 -203 -355 -237 -33 --152 --305 --169 -33 -220 -372 -491 -322 -101 --135 --322 --457 --305 --67 -135 -305 -440 -305 -84 --135 --305 --440 --271 --33 -169 -338 -474 -338 -118 --84 --271 --406 --254 --16 -186 -355 -491 -338 -118 --84 --271 --406 --237 --16 -186 -372 -491 -355 -135 --67 --254 --389 --237 -0 -220 -372 -288 -101 --84 --237 --101 -101 -305 -440 -322 -118 --67 --237 --101 -101 -271 -423 -305 -84 --101 --271 --152 -50 -237 -372 -254 -33 --169 --322 --203 -0 -186 -322 -203 -0 --203 --338 --220 --16 -169 -305 -203 -0 --203 --355 --220 --16 -169 -305 -203 -0 --203 --355 --220 --16 -169 -305 -186 -0 --203 --355 --220 --16 -169 -305 -203 -0 --203 --338 --220 --16 -169 -322 -203 -16 --186 --338 --220 --16 -169 -322 -203 -0 --186 --338 --203 -0 -186 -322 -203 -16 --186 --322 --203 -0 -186 -338 -220 -16 --169 --322 --203 -16 -186 -338 -220 -16 --186 --322 --203 -0 -203 -338 -220 -33 --169 --322 --186 -16 -203 -338 -220 -33 --169 --305 --186 -16 -203 -338 -220 -33 --169 --322 --203 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --169 -33 -203 -355 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --152 --305 --169 -33 -220 -355 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --288 --169 -33 -237 -372 -271 -67 --135 --288 --152 -50 -237 -372 -254 -50 --152 --305 --169 -16 -203 -355 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --322 --203 -16 -203 -338 -220 -33 --169 --322 --203 -0 -186 -338 -220 -16 --169 --322 --203 -16 -203 -338 -220 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -220 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --322 --203 -16 -203 -338 -237 -33 --169 --322 --203 -16 -203 -338 -220 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --152 --305 --186 -33 -203 -355 -237 -33 --152 --305 --169 -33 -203 -355 -237 -33 --169 --305 --169 -33 -220 -355 -254 -50 --152 --288 --169 -33 -220 -372 -254 -50 --135 --271 --152 -50 -237 -389 -491 -338 -101 --118 --305 --440 --288 --67 -152 -322 -457 -322 -101 --118 --288 --423 --271 --33 -186 -355 -474 -338 -118 --101 --288 --423 --271 --50 -152 -322 -440 -305 -67 --152 --322 --457 --305 --84 -135 -305 -423 -288 -50 --152 --338 --457 --305 --67 -135 -305 -203 -16 --169 --305 --186 -33 -220 -372 -254 -50 --135 --288 --169 -33 -220 -372 -254 -50 --152 --305 --169 -33 -220 -355 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -355 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --169 -33 -203 -355 -237 -33 --152 --305 --169 -33 -203 -355 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --169 -33 -203 -355 -237 -33 --169 --322 --203 -16 -203 -338 -220 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -33 -203 -355 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --152 --305 --186 -33 -203 -355 -254 -50 --152 --305 --169 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --338 --474 --322 --84 -118 -288 -406 -271 -50 --169 --338 --474 --305 --84 -135 -305 -440 -305 -67 --135 --322 --457 --288 --67 -152 -322 -440 -305 -84 --135 --305 --440 --288 --50 -152 -322 -457 -305 -84 --118 --305 --423 --271 --50 -169 -338 -457 -322 -101 --101 --237 --118 -67 -254 -389 -271 -67 --118 --271 --152 -50 -237 -389 -271 -67 --135 --271 --152 -50 -237 -372 -254 -50 --135 --288 --169 -33 -220 -372 -254 -33 --152 --305 --169 -33 -203 -355 -237 -33 --152 --305 --169 -33 -203 -355 -237 -33 --169 --305 --169 -16 -203 -355 -457 -305 -67 --152 --338 --474 --322 --101 -101 -288 -406 -271 -50 --169 --338 --474 --322 --84 -118 -305 -423 -288 -67 --152 --338 --457 --305 --67 -135 -305 -440 -305 -67 --135 --322 --440 --288 --50 -152 -322 -457 -305 -84 --135 --305 --440 --271 --33 -169 -338 -237 -50 --135 --288 --152 -50 -254 -389 -288 -84 --118 --254 --135 -67 -254 -389 -271 -67 --118 --271 --135 -67 -254 -389 -271 -67 --135 --288 --152 -50 -237 -372 -254 -50 --135 --288 --169 -33 -220 -372 -254 -50 --152 --305 --169 -33 -220 -372 -254 -33 --152 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -33 -203 -355 -237 -33 --152 --305 --169 -16 -203 -355 -237 -33 --169 --322 --186 -16 -203 -355 -237 -33 --152 --305 --186 -33 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -33 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -33 -203 -355 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -33 -220 -355 -237 -33 --152 --305 --186 -33 -220 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -338 -220 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --152 --305 --169 -33 -203 -355 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --169 -33 -203 -355 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -33 -203 -355 -237 -33 --169 --322 --203 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -33 -220 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --322 --203 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -220 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --169 -33 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --152 --305 --169 -33 -203 -355 -237 -33 --152 --305 --169 -33 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -33 -203 -355 -237 -33 --169 --305 --169 -33 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -33 -220 -372 -474 -305 -67 --152 --338 --474 --338 --101 -101 -271 -406 -271 -50 --169 --355 --474 --322 --84 -118 -305 -423 -288 -67 --135 --322 --457 --305 --84 -135 -305 -423 -288 -67 --135 --322 --457 --288 --67 -135 -322 -440 -305 -84 --135 --305 --440 --288 --50 -169 -322 -237 -50 --135 --271 --152 -67 -254 -406 -288 -84 --101 --254 --135 -67 -254 -406 -288 -84 --118 --271 --135 -67 -254 -389 -271 -67 --135 --288 --152 -33 -220 -372 -254 -50 --152 --288 --169 -33 -220 -372 -254 -50 --152 --305 --169 -33 -203 -355 -254 -33 --186 --355 --491 --338 --101 -101 -288 -423 -288 -67 --152 --322 --457 --305 --67 -135 -305 -440 -305 -84 --135 --305 --440 --271 --50 -152 -322 -457 -305 -84 --118 --305 --440 --271 --50 -152 -338 -457 -322 -101 --118 --305 --440 --271 --50 -169 -338 -474 -338 -101 --101 --288 --423 --271 --50 -152 -338 -457 -322 -101 --118 --288 --423 --271 --33 -169 -338 -474 -322 -101 --118 --305 --423 --271 --50 -169 -338 -474 -322 -101 --118 --305 --440 --271 --50 -169 -338 -457 -322 -101 --118 --288 --423 --271 --50 -169 -338 -474 -338 -135 --67 --237 --118 -84 -271 -406 -288 -67 --118 --271 --152 -50 -237 -372 -271 -50 --135 --288 --169 -33 -220 -372 -254 -50 --135 --288 --169 -33 -220 -355 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -33 -203 -355 -237 -33 --152 --338 --474 --322 --84 -118 -288 -423 -288 -67 --152 --338 --457 --305 --67 -135 -305 -440 -305 -67 --135 --322 --457 --288 --67 -152 -322 -457 -305 -84 --135 --305 --457 --288 --67 -152 -322 -457 -305 -84 --118 --305 --440 --271 --50 -169 -322 -457 -305 -101 --101 --254 --135 -67 -254 -389 -271 -67 --135 --271 --152 -50 -237 -372 -271 -50 --135 --288 --169 -33 -237 -372 -254 -50 --135 --288 --169 -33 -220 -372 -254 -33 --152 --305 --169 -33 -203 -355 -237 -33 --152 --305 --169 -33 -203 -355 -237 -33 --169 --305 --169 -16 -203 -355 -457 -305 -67 --152 --355 --474 --338 --101 -101 -271 -406 -271 -50 --169 --338 --474 --322 --84 -118 -305 -423 -288 -67 --152 --338 --457 --305 --67 -135 -305 -440 -305 -67 --135 --322 --440 --288 --67 -152 -322 -457 -305 -84 --135 --305 --440 --271 --50 -152 -322 -457 -305 -84 --135 --305 --440 --288 --50 -152 -338 -457 -322 -101 --118 --305 --423 --271 --50 -169 -338 -474 -322 -101 --118 --288 --423 --271 --50 -169 -338 -474 -322 -101 --118 --305 --423 --271 --33 -169 -338 -474 -322 -101 --118 --305 --423 --254 --16 -186 -338 -254 -50 --135 --271 --135 -67 -271 -406 -305 -101 --101 --237 --118 -84 -271 -406 -288 -84 --101 --254 --118 -84 -271 -406 -305 -101 --101 --237 --118 -84 -271 -406 -288 -84 --118 --271 --135 -50 -237 -372 -271 -50 --135 --288 --169 -33 -220 -372 -474 -322 -67 --152 --338 --491 --338 --101 -101 -271 -389 -254 -33 --186 --372 --491 --338 --101 -101 -271 -406 -271 -50 --152 --338 --474 --322 --84 -118 -288 -406 -271 -50 --152 --338 --457 --305 --67 -135 -305 -440 -305 -67 --135 --322 --457 --288 --50 -152 -322 -220 -33 --152 --288 --152 -50 -254 -389 -271 -84 --118 --254 --135 -67 -254 -406 -288 -84 --118 --271 --135 -67 -254 -389 -271 -67 --135 --288 --152 -50 -237 -372 -271 -50 --135 --288 --169 -33 -237 -372 -254 -50 --135 --288 --169 -33 -220 -372 -254 -50 --152 --305 --169 -33 -203 -355 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -355 -237 -50 --152 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --338 --474 --305 --84 -118 -288 -406 -271 -67 --152 --338 --457 --305 --67 -135 -305 -440 -305 -84 --135 --305 --440 --288 --50 -152 -338 -457 -322 -101 --118 --288 --423 --254 --33 -186 -355 -491 -355 -135 --84 --254 --389 --237 -0 -203 -372 -491 -355 -135 --84 --271 --406 --254 --33 -169 -338 -457 -322 -84 --135 --305 --440 --288 --67 -152 -322 -440 -305 -84 --135 --322 --457 --288 --67 -152 -322 -440 -305 -67 --135 --322 --457 --288 --67 -135 -305 -440 -305 -84 --135 --305 --440 --288 --67 -152 -322 -440 -305 -84 --101 --271 --135 -67 -237 -389 -271 -67 --135 --288 --169 -33 -220 -372 -254 -50 --135 --288 --169 -33 -220 -372 -254 -50 --152 --288 --169 -33 -220 -355 -237 -33 --169 --305 --186 -33 -203 -355 -237 -33 --152 --305 --186 -33 -203 -355 -237 -33 --169 --305 --169 -33 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -33 -203 -355 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -33 -203 -355 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -338 -220 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --169 -33 -203 -355 -237 -33 --152 --338 --474 --305 --84 -118 -288 -406 -271 -50 --169 --338 --474 --305 --84 -135 -305 -440 -288 -67 --135 --322 --457 --288 --67 -152 -322 -440 -305 -84 --135 --322 --457 --288 --67 -152 -322 -440 -305 -84 --118 --305 --440 --271 --50 -152 -322 -457 -322 -101 --101 --254 --135 -67 -254 -389 -271 -67 --118 --271 --152 -50 -237 -389 -271 -67 --135 --271 --152 -50 -237 -372 -254 -50 --135 --288 --169 -33 -220 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --169 -33 -220 -355 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -33 -203 -355 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --186 --355 --491 --338 --101 -101 -288 -406 -288 -50 --152 --338 --457 --305 --67 -152 -322 -440 -305 -84 --135 --305 --440 --271 --50 -152 -322 -457 -305 -84 --135 --305 --440 --271 --50 -152 -338 -457 -322 -101 --118 --305 --440 --271 --50 -169 -338 -457 -338 -101 --118 --288 --440 --271 --50 -152 -322 -457 -322 -84 --118 --305 --440 --271 --50 -169 -338 -457 -322 -101 --118 --305 --423 --271 --50 -169 -338 -474 -322 -101 --118 --305 --440 --271 --50 -169 -338 -457 -322 -101 --118 --288 --423 --271 --50 -169 -338 -474 -338 -135 --67 --237 --118 -84 -271 -406 -288 -84 --118 --271 --152 -50 -237 -372 -271 -67 --135 --288 --169 -33 -220 -372 -254 -50 --135 --288 --169 -33 -220 -355 -237 -33 --152 --305 --186 -33 -203 -355 -237 -33 --152 --305 --169 -33 -203 -355 -237 -33 --152 --288 --169 -33 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -33 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -33 -203 -355 -237 -33 --152 --305 --169 -33 -220 -372 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -33 -203 -355 -237 -33 --152 --305 --186 -33 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -220 -33 --169 --322 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -220 -33 --169 --322 --203 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --169 -33 -203 -355 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -355 -254 -50 --152 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -33 -203 -338 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --169 -33 -203 -355 -237 -33 --152 --305 --169 -33 -203 -355 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --169 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -33 -203 -355 -237 -33 --169 --305 --169 -33 -203 -355 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --322 --203 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -33 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -355 -237 -50 --152 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -33 -203 -355 -237 -33 --152 --305 --169 -33 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --169 -33 -203 -355 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -33 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -33 -220 -372 -474 -305 -67 --152 --338 --491 --338 --101 -101 -271 -406 -271 -33 --169 --355 --474 --322 --101 -118 -288 -406 -288 -67 --152 --338 --457 --305 --84 -135 -305 -423 -288 -67 --135 --322 --457 --288 --67 -152 -322 -457 -305 -84 --135 --305 --440 --288 --50 -169 -338 -237 -50 --135 --288 --152 -50 -254 -389 -288 -84 --118 --271 --135 -67 -254 -389 -288 -84 --118 --271 --135 -50 -254 -389 -271 -67 --135 --288 --152 -50 -237 -372 -254 -50 --152 --288 --169 -33 -220 -372 -254 -50 --152 --305 --169 -33 -220 -372 -254 -50 --152 --305 --186 -33 -203 -355 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -33 -203 -355 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --152 --305 --169 -33 -220 -355 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --169 -33 -203 -355 -237 -33 --152 --305 --169 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --169 -33 -203 -355 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --322 --203 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --322 --186 -16 -203 -338 -220 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -33 -203 -355 -237 -33 --152 --305 --186 -16 -203 -355 -237 -50 --152 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --152 --305 --169 -33 -203 -355 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --169 -33 -203 -355 -237 -33 --152 --305 --169 -33 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --169 -16 -203 -355 -457 -305 -50 --169 --355 --491 --338 --101 -101 -271 -406 -271 -50 --169 --355 --474 --322 --101 -118 -288 -423 -288 -67 --152 --338 --457 --305 --67 -135 -305 -440 -305 -67 --135 --322 --440 --288 --67 -152 -322 -457 -305 -84 --118 --305 --423 --271 --33 -186 -338 -237 -50 --135 --271 --135 -67 -254 -406 -288 -84 --118 --254 --135 -67 -254 -406 -288 -84 --118 --271 --135 -67 -254 -389 -271 -67 --135 --288 --169 -33 -220 -372 -254 -50 --152 --305 --169 -33 -220 -372 -254 -50 --152 --305 --169 -33 -220 -372 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --152 --305 --169 -33 -220 -355 -254 -50 --152 --288 --169 -33 -237 -372 -271 -84 --118 --271 --135 -67 -254 -406 -288 -84 --118 --271 --135 -50 -237 -389 -271 -67 --135 --288 --169 -33 -220 -355 -254 -50 --152 --305 --186 -16 -203 -338 -220 -16 --169 --322 --203 -0 -186 -338 -220 -16 --169 --322 --203 -0 -186 -322 -220 -16 --169 --322 --203 -0 -186 -322 -203 -16 --186 --338 --203 -0 -186 -322 -220 -16 --169 --322 --203 -16 -203 -338 -220 -33 --169 --322 --186 -16 -203 -338 -220 -16 --169 --322 --203 -16 -186 -338 -220 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -33 -203 -355 -237 -33 --169 --322 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -33 -220 -355 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -33 -203 -355 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -254 -50 --135 --288 --152 -50 -237 -372 -271 -67 --135 --288 --169 -33 -203 -355 -220 -33 --169 --322 --203 -16 -203 -338 -220 -33 --169 --322 --203 -16 -186 -338 -220 -33 --169 --338 --491 --338 --101 -101 -271 -406 -271 -50 --169 --338 --474 --322 --84 -118 -305 -423 -288 -67 --152 --322 --457 --305 --67 -135 -305 -440 -305 -84 --135 --322 --457 --288 --67 -152 -322 -440 -305 -84 --135 --305 --440 --271 --50 -152 -322 -457 -322 -101 --84 --254 --118 -67 -254 -389 -271 -67 --135 --271 --152 -50 -237 -372 -254 -50 --135 --288 --169 -33 -220 -372 -254 -50 --152 --288 --169 -33 -220 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --169 -33 -203 -355 -237 -33 --152 --305 --169 -33 -203 -355 -237 -33 --169 --322 --186 -16 -203 -355 -237 -33 --152 --305 --169 -33 -203 -355 -237 -33 --152 --305 --186 -33 -203 -355 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --169 -33 -220 -355 -254 -50 --152 --305 --169 -50 -237 -372 -271 -67 --135 --271 --152 -50 -237 -389 -271 -67 --118 --254 --135 -67 -271 -406 -288 -84 --118 --271 --135 -67 -254 -389 -271 -67 --135 --288 --169 -33 -203 -355 -237 -33 --169 --322 --186 -16 -203 -338 -220 -33 --169 --322 --203 -0 -186 -338 -220 -16 --169 --338 --203 -0 -186 -322 -203 -16 --186 --338 --203 -0 -186 -322 -203 -16 --186 --338 --203 -0 -186 -322 -220 -16 --169 --322 --203 -0 -186 -322 -203 -16 --186 --338 --203 -0 -186 -338 -220 -16 --169 --322 --203 -16 -186 -338 -220 -33 --169 --322 --186 -16 -186 -338 -220 -16 --169 --322 --203 -0 -186 -338 -220 -16 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -220 -33 --169 --322 --203 -16 -203 -338 -220 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -33 -203 -355 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -33 -220 -355 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -33 -203 -355 -237 -33 --152 --305 --186 -16 -203 -355 -254 -33 --186 --355 --491 --338 --101 -101 -288 -423 -288 -67 --152 --338 --457 --305 --67 -135 -305 -440 -305 -84 --135 --322 --440 --288 --67 -152 -322 -440 -305 -84 --135 --305 --440 --288 --67 -152 -322 -457 -305 -84 --118 --305 --440 --271 --50 -152 -322 -457 -338 -118 --67 --237 --118 -84 -271 -406 -288 -84 --118 --271 --152 -50 -237 -372 -271 -67 --135 --288 --169 -33 -220 -372 -254 -50 --135 --288 --169 -33 -220 -372 -237 -33 --152 --305 --169 -33 -220 -355 -254 -50 --152 --288 --169 -33 -220 -372 -254 -50 --135 --288 --169 -33 -220 -355 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --169 -33 -203 -355 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -33 -203 -355 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -33 -220 -372 -254 -50 --152 --305 --169 -33 -220 -372 -254 -50 --152 --305 --169 -33 -203 -355 -237 -33 --169 --322 --203 -0 -186 -338 -220 -16 --169 --322 --203 -0 -186 -338 -220 -16 --169 --322 --203 -16 -203 -338 -220 -33 --169 --322 --203 -0 -203 -338 -237 -33 --169 --322 --203 -0 -186 -338 -220 -16 --169 --322 --203 -16 -203 -338 -220 -33 --169 --322 --203 -16 -203 -338 -237 -33 --169 --322 --203 -16 -203 -338 -220 -33 --169 --322 --203 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --152 --305 --169 -33 -203 -355 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -33 -203 -355 -237 -33 --169 --305 --169 -33 -203 -355 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -33 -203 -355 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -33 -203 -355 -237 -33 --152 --305 --186 -33 -220 -372 -474 -322 -67 --152 --338 --474 --322 --101 -101 -271 -406 -271 -33 --169 --355 --474 --322 --101 -118 -288 -423 -288 -50 --152 --338 --457 --305 --84 -135 -305 -440 -305 -67 --135 --322 --457 --288 --67 -152 -322 -457 -322 -84 --135 --305 --440 --288 --50 -169 -338 -237 -50 --135 --271 --152 -50 -254 -406 -288 -84 --101 --254 --135 -67 -271 -406 -288 -84 --118 --271 --135 -67 -254 -389 -271 -67 --135 --271 --152 -50 -237 -372 -254 -50 --135 --288 --169 -33 -220 -372 -254 -50 --152 --305 --169 -33 -220 -372 -254 -50 --152 --305 --169 -33 -203 -355 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -33 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --169 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -33 -203 -355 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --169 -33 -203 -355 -237 -33 --152 --305 --169 -33 -203 -355 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --152 --305 --186 -33 -203 -355 -237 -33 --152 --305 --186 -33 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -457 -305 -67 --152 --355 --474 --338 --101 -101 -271 -406 -271 -50 --169 --355 --474 --322 --101 -118 -288 -423 -288 -67 --152 --338 --457 --305 --84 -118 -305 -440 -305 -67 --135 --322 --457 --288 --67 -135 -322 -440 -305 -84 --135 --305 --440 --271 --33 -169 -338 -237 -50 --135 --288 --152 -67 -254 -406 -288 -84 --101 --254 --135 -67 -254 -406 -288 -84 --118 --271 --152 -50 -237 -389 -271 -67 --135 --288 --169 -33 -237 -372 -254 -50 --135 --288 --169 -33 -220 -372 -254 -50 --152 --305 --169 -33 -220 -372 -254 -33 --152 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -33 -203 -355 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -33 -203 -355 -237 -50 --152 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -355 -237 -50 --152 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --322 --203 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -220 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --322 --203 -16 -203 -338 -237 -33 --169 --305 --186 -33 -203 -355 -237 -33 --152 --305 --169 -33 -220 -355 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -33 -203 -355 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -338 -220 -33 --169 --322 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --152 --305 --169 -33 -203 -355 -237 -33 --152 --338 --474 --322 --84 -118 -288 -406 -271 -50 --152 --338 --474 --305 --84 -135 -305 -440 -305 -67 --135 --322 --457 --288 --67 -152 -322 -440 -305 -84 --135 --322 --457 --288 --67 -152 -322 -457 -305 -84 --118 --305 --440 --271 --50 -169 -338 -457 -322 -101 --84 --237 --118 -67 -254 -389 -271 -67 --135 --271 --152 -50 -237 -372 -271 -67 --135 --288 --169 -33 -220 -372 -254 -50 --152 --288 --169 -33 -220 -372 -254 -50 --152 --305 --169 -33 -220 -355 -237 -33 --152 --305 --169 -33 -203 -355 -237 -33 --152 --305 --169 -33 -220 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -33 -203 -355 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -33 -203 -355 -237 -33 --152 --305 --186 -33 -220 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -355 -237 -33 --152 --305 --169 -33 -203 -355 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --169 -33 -220 -355 -254 -50 --135 --271 --152 -50 -237 -389 -271 -67 --135 --271 --135 -67 -254 -389 -271 -67 --135 --288 --152 -33 -220 -355 -237 -33 --152 --305 --186 -16 -203 -338 -220 -16 --169 --322 --203 -16 -203 -338 -220 -16 --169 --322 --203 -0 -186 -338 -220 -16 --186 --322 --203 -16 -186 -338 -220 -16 --186 --338 --203 -0 -186 -338 -220 -16 --169 --322 --203 -16 -203 -338 -220 -33 --169 --322 --186 -16 -203 -338 -220 -33 --169 --322 --203 -16 -186 -338 -220 -33 --169 --322 --203 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --322 --203 -16 -203 -338 -220 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -16 --186 --372 --491 --338 --101 -101 -288 -406 -271 -50 --152 --338 --474 --305 --84 -135 -305 -440 -305 -67 --135 --322 --440 --288 --67 -152 -322 -440 -305 -84 --135 --322 --440 --288 --67 -152 -322 -457 -322 -101 --118 --305 --440 --271 --50 -169 -338 -474 -338 -135 --67 --237 --118 -84 -271 -406 -288 -84 --118 --271 --152 -50 -237 -372 -271 -67 --135 --288 --152 -50 -237 -372 -254 -50 --135 --288 --169 -33 -220 -355 -237 -50 --152 --305 --169 -33 -220 -355 -254 -50 --152 --305 --169 -33 -220 -355 -237 -50 --135 --288 --169 -33 -220 -355 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -33 -203 -355 -237 -33 --152 --305 --169 -33 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --169 -33 -220 -372 -254 -50 --135 --288 --152 -50 -237 -389 -271 -67 --135 --271 --152 -50 -254 -389 -288 -84 --101 --254 --135 -84 -271 -406 -288 -84 --118 --271 --135 -67 -237 -372 -254 -50 --152 --305 --186 -16 -203 -338 -220 -16 --169 --322 --203 -0 -186 -322 -220 -16 --186 --338 --203 -0 -186 -322 -220 -16 --186 --338 --220 --16 -186 -322 -203 -16 --186 --338 --203 -0 -186 -322 -220 -16 --186 --338 --203 -0 -186 -338 -220 -16 --186 --338 --203 -0 -186 -322 -220 -16 --169 --322 --203 -0 -203 -338 -220 -33 --169 --322 --203 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --322 --203 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -220 -33 --169 --322 --203 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -220 -33 --169 --322 --186 -16 -203 -338 -220 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --152 --305 --169 -33 -203 -355 -237 -33 --152 --305 --169 -33 -203 -355 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -33 -203 -355 -237 -33 --152 --305 --169 -33 -203 -355 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -33 -203 -355 -237 -33 --169 --305 --186 -16 -220 -372 -474 -305 -67 --152 --338 --474 --322 --101 -101 -271 -406 -271 -50 --169 --355 --474 --322 --84 -118 -305 -423 -288 -67 --152 --338 --457 --305 --67 -135 -305 -440 -305 -67 --135 --322 --440 --288 --67 -152 -322 -457 -305 -84 --135 --305 --440 --288 --50 -169 -322 -237 -50 --135 --288 --152 -50 -254 -389 -288 -84 --118 --254 --135 -67 -254 -406 -288 -84 --118 --271 --135 -67 -254 -406 -288 -84 --101 --254 --135 -67 -254 -406 -288 -84 --101 --254 --118 -84 -271 -423 -305 -101 --84 --237 --118 -84 -271 -423 -305 -101 --101 --254 --135 -67 -254 -406 -288 -84 --118 --271 --152 -50 -237 -372 -254 -50 --152 --305 --186 -16 -203 -338 -220 -16 --169 --338 --203 -0 -186 -322 -203 -0 --186 --338 --220 --16 -169 -322 -203 -0 --186 --338 --220 --16 -169 -305 -203 -0 --186 --338 --220 --16 -169 -322 -203 -0 --203 --338 --220 --16 -169 -322 -203 -0 --186 --338 --203 -0 -186 -322 -203 -16 --186 --322 --203 -0 -186 -322 -220 -16 --186 --338 --203 -0 -186 -338 -220 -16 --169 --322 --203 -16 -203 -338 -220 -16 --169 --322 --186 -16 -203 -338 -220 -33 --169 --322 --203 -16 -203 -338 -220 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -33 -220 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -33 -203 -355 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --169 -33 -203 -355 -237 -33 --152 --305 --169 -33 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --169 -16 -203 -338 -457 -305 -67 --169 --355 --491 --338 --101 -101 -271 -406 -271 -50 --169 --338 --474 --322 --84 -118 -305 -423 -305 -67 --135 --322 --457 --305 --67 -135 -305 -440 -305 -67 --135 --322 --440 --288 --67 -152 -322 -457 -305 -84 --135 --305 --440 --271 --33 -169 -322 -237 -50 --135 --288 --152 -50 -254 -389 -288 -84 --118 --254 --135 -67 -254 -406 -288 -84 --118 --271 --135 -67 -254 -389 -271 -67 --135 --288 --152 -33 -237 -372 -254 -50 --135 --288 --169 -33 -220 -372 -254 -50 --152 --305 --169 -33 -220 -372 -474 -322 -67 --152 --338 --474 --322 --101 -101 -288 -406 -271 -50 --169 --355 --474 --322 --84 -118 -305 -423 -288 -67 --152 --322 --457 --305 --67 -135 -305 -440 -305 -67 --135 --322 --457 --305 --67 -135 -322 -440 -305 -84 --135 --305 --440 --288 --50 -169 -322 -237 -33 --135 --288 --152 -50 -254 -389 -288 -84 --118 --254 --135 -67 -254 -406 -271 -84 --118 --271 --135 -50 -254 -389 -271 -67 --135 --288 --152 -50 -220 -372 -254 -50 --135 --288 --169 -33 -220 -372 -254 -50 --152 --305 --169 -33 -220 -372 -254 -50 --152 --305 --169 -33 -203 -355 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -33 -203 -355 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -33 -220 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -33 -220 -355 -237 -33 --152 --305 --169 -33 -220 -355 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -33 -203 -355 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --169 -33 -220 -355 -237 -50 --135 --288 --169 -33 -220 -372 -254 -50 --135 --288 --152 -50 -237 -389 -271 -84 --118 --254 --135 -67 -254 -389 -271 -67 --118 --271 --152 -50 -237 -372 -254 -33 --152 --305 --186 -16 -203 -338 -220 -16 --169 --322 --203 -0 -186 -338 -220 -16 --186 --322 --203 -0 -186 -322 -203 -16 --186 --338 --203 -0 -186 -322 -203 -16 --186 --338 --203 -0 -186 -338 -220 -16 --169 --322 --203 -0 -186 -338 -220 -16 --186 --338 --203 -0 -186 -338 -220 -16 --169 --322 --203 -16 -203 -338 -220 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -338 -220 -33 --169 --322 --186 -16 -203 -338 -220 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -33 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --169 -33 -203 -355 -237 -33 --152 --305 --169 -33 -220 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --169 --305 --186 -33 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -33 -203 -355 -237 -33 --152 --305 --186 -33 -220 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -16 -203 -355 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --169 -33 -203 -355 -254 -33 --169 --355 --474 --322 --84 -135 -305 -440 -305 -84 --118 --288 --423 --254 --33 -186 -355 -491 -355 -135 --84 --271 --406 --237 --16 -186 -355 -474 -322 -101 --118 --305 --440 --288 --67 -152 -305 -440 -305 -67 --135 --322 --457 --305 --67 -135 -305 -440 -305 -101 --101 --271 --135 -50 -237 -372 -254 -50 --152 --305 --169 -33 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -220 -16 --169 --322 --203 -16 -203 -338 -220 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --338 --474 --322 --101 -101 -288 -406 -271 -50 --152 --338 --474 --305 --84 -135 -305 -440 -305 -67 --135 --322 --457 --288 --67 -152 -322 -440 -305 -84 --135 --305 --457 --288 --50 -152 -322 -457 -305 -84 --118 --305 --440 --271 --50 -152 -322 -457 -322 -101 --101 --288 --423 --271 --50 -169 -338 -457 -322 -101 --118 --305 --440 --271 --50 -169 -338 -457 -322 -101 --118 --305 --440 --271 --50 -169 -338 -474 -322 -101 --118 --305 --440 --271 --50 -152 -322 -457 -322 -101 --118 --305 --423 --271 --50 -169 -338 -457 -322 -101 --101 --254 --135 -67 -254 -389 -271 -67 --118 --271 --152 -50 -237 -372 -271 -67 --135 --288 --152 -50 -237 -372 -254 -50 --135 --288 --152 -33 -220 -372 -254 -50 --152 --305 --169 -33 -220 -355 -237 -33 --152 --305 --169 -33 -220 -355 -237 -33 --152 --305 --169 -16 -203 -355 -457 -305 -67 --169 --355 --474 --322 --101 -101 -288 -406 -271 -50 --169 --338 --474 --322 --84 -118 -305 -423 -305 -67 --135 --322 --457 --305 --67 -135 -322 -440 -305 -84 --135 --305 --440 --288 --50 -152 -322 -457 -322 -101 --118 --305 --423 --271 --33 -186 -338 -237 -50 --135 --271 --135 -67 -271 -406 -305 -101 --84 --237 --118 -84 -271 -406 -288 -84 --118 --271 --135 -67 -254 -389 -271 -67 --135 --288 --169 -33 -220 -372 -254 -50 --152 --305 --169 -33 -220 -355 -254 -50 --152 --305 --169 -33 -220 -372 -474 -305 -67 --152 --338 --491 --338 --101 -101 -271 -406 -271 -33 --169 --355 --491 --322 --101 -101 -288 -406 -271 -50 --152 --338 --474 --305 --84 -118 -305 -423 -288 -67 --152 --322 --457 --305 --67 -135 -322 -440 -305 -67 --135 --322 --457 --288 --50 -152 -322 -457 -322 -84 --135 --305 --440 --288 --50 -152 -322 -457 -322 -101 --118 --305 --423 --271 --50 -169 -338 -457 -322 -101 --101 --288 --423 --271 --50 -169 -338 -457 -322 -101 --118 --305 --440 --271 --50 -169 -338 -457 -322 -101 --118 --305 --440 --271 --33 -169 -338 -237 -50 --135 --271 --135 -67 -254 -406 -288 -84 --101 --254 --135 -67 -271 -406 -288 -84 --118 --271 --135 -50 -254 -389 -271 -67 --135 --271 --152 -50 -237 -372 -271 -67 --135 --288 --152 -33 -237 -372 -254 -50 --135 --288 --169 -33 -220 -372 -254 -33 --169 --355 --491 --322 --84 -118 -305 -423 -288 -67 --152 --322 --457 --305 --67 -135 -322 -440 -305 -84 --135 --305 --440 --288 --50 -152 -322 -457 -305 -84 --135 --305 --440 --271 --50 -152 -338 -457 -322 -101 --118 --288 --423 --271 --33 -169 -338 -474 -338 -135 --67 --237 --118 -84 -271 -406 -288 -84 --118 --271 --152 -50 -237 -372 -271 -67 --135 --288 --152 -50 -237 -372 -271 -67 --135 --288 --169 -33 -220 -372 -254 -50 --152 --305 --169 -33 -220 -372 -254 -50 --135 --288 --169 -50 -237 -372 -271 -67 --118 --271 --152 -50 -237 -372 -271 -67 --135 --271 --152 -50 -237 -372 -271 -67 --135 --288 --169 -33 -220 -355 -237 -33 --152 --305 --186 -16 -203 -338 -220 -16 --186 --338 --203 -0 -186 -322 -203 -16 --186 --338 --203 -0 -186 -322 -203 -16 --186 --338 --203 -0 -186 -322 -440 -288 -33 --169 --372 --508 --355 --118 -84 -271 -389 -254 -33 --186 --355 --491 --338 --101 -101 -288 -406 -288 -50 --152 --338 --474 --322 --84 -118 -305 -423 -288 -67 --152 --322 --457 --305 --67 -135 -322 -440 -305 -67 --135 --322 --440 --288 --50 -152 -322 -440 -305 -67 --135 --322 --440 --288 --67 -152 -322 -457 -322 -84 --118 --305 --440 --271 --50 -152 -338 -457 -322 -101 --118 --305 --440 --271 --50 -152 -338 -457 -322 -101 --118 --288 --423 --271 --33 -169 -338 -474 -322 -101 --101 --288 --423 --254 --16 -203 -355 -271 -84 --101 --254 --101 -101 -305 -440 -338 -135 --67 --220 --84 -101 -288 -423 -305 -101 --101 --254 --135 -67 -254 -389 -271 -67 --135 --288 --169 -33 -220 -355 -254 -50 --152 --305 --169 -33 -203 -355 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --322 --203 -16 -203 -338 -220 -16 --169 --322 --203 -16 -203 -338 -220 -33 --169 --322 --203 -16 -203 -338 -237 -33 --169 --322 --203 -0 -203 -338 -220 -33 --169 --322 --203 -16 -203 -338 -220 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --152 --305 --186 -16 -203 -338 -220 -33 --169 --305 --186 -16 -203 -355 -237 -33 --152 --305 --186 -33 -203 -355 -237 -33 --152 --305 --169 -33 -203 -355 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --305 --186 -16 -203 -338 -237 -33 --169 --322 --186 -16 -203 -338 -237 -33 --169 --305 --186 -33 -203 -355 -237 -33 --169 --305 --169 -33 -203 -355 -457 -305 -67 --169 --355 --491 --338 --101 -101 -271 -406 -271 -50 --169 --355 --474 --322 --84 -118 -305 -423 -288 -67 --152 --338 --457 --305 --67 -135 -305 -440 -305 -84 --135 --305 --440 --288 --50 -152 -322 -457 -322 -84 --118 --305 --423 --271 --33 -169 -338 -237 -50 --135 --288 --152 -67 -254 -406 -288 -84 --101 --254 --135 -67 -254 -406 -288 -84 --118 --271 --135 -67 -254 -389 -271 -67 --135 --271 --152 -50 -237 -372 -271 -50 --135 --288 --152 -33 -237 -372 -254 -50 --135 --288 --169 -33 -220 -372 -254 -50 --152 --305 --186 -33 -203 -355 -237 -33 --152 --305 --169 -33 -220 -355 -237 -33 --152 --305 --169 -33 -220 -355 -254 -50 --152 --305 --169 -33 -220 -372 -254 -50 --135 --288 --152 -50 -237 -389 -271 -84 --118 --271 --152 -50 -237 -389 -271 -67 --135 --288 --169 -33 -220 -355 -237 -33 --169 --322 --203 -16 -203 -338 -220 -16 --169 --322 --203 -0 -186 -338 -220 -16 --169 --322 --203 -0 -186 -322 -203 -0 --186 --338 --203 -0 -186 -322 -220 -16 --186 --322 --203 -0 -186 -338 -220 -33 --169 --338 --491 --338 --101 -101 -271 -406 -271 -50 --169 --338 --474 --322 --84 -135 -305 -440 -288 -67 --152 --322 --457 --305 --67 -135 -305 -440 -305 -67 --135 --322 --457 --288 --67 -152 -322 -440 -305 -84 --135 --305 --440 --271 --50 -152 -322 -457 -305 -101 --118 --288 --423 --271 --50 -152 -322 -457 -305 -84 --118 --305 --440 --271 --50 -152 -338 -457 -322 -101 --118 --305 --440 --271 --50 -169 -338 -457 -322 -101 --118 --305 --440 --271 --50 -152 -322 -457 -322 -101 --118 --305 --423 --271 --50 -169 -338 -457 -322 -101 --84 --237 --118 -84 -254 -406 -288 -67 --118 --271 --152 -50 -237 -372 -271 -67 --135 --288 --152 -50 -237 -372 -254 -50 --135 --288 --169 -33 -220 -372 -254 -50 --152 --305 --169 -33 -220 -355 -254 -50 --152 --305 --169 -33 -220 -355 -237 +-305 +-169 +33 +220 +355 +254 +50 +-135 +-305 +-169 +33 +220 +355 +254 +50 +-152 +-288 +-169 +33 +237 +372 +254 +50 +-135 +-288 +-169 +50 +237 +372 +271 +50 +-135 +-288 +-169 +33 +220 +372 +254 +50 +-152 +-288 +-169 +33 +220 +372 +254 +50 +-135 +-288 +-169 +33 +220 +372 +254 +50 +-152 +-305 +-169 +33 +220 +355 +237 +33 +-152 +-305 +-169 +33 +203 +355 +237 +50 +-152 +-305 +-169 +33 +203 +355 +237 +50 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-169 +33 +203 +355 +237 +50 +-152 +-288 +-169 +33 +220 +355 +237 +33 +-152 +-305 +-186 +33 +203 +355 +237 +33 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-152 +-305 +-169 +33 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +33 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +33 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +338 +220 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-338 +-474 +-322 +-84 +118 +288 +423 +271 +50 +-152 +-338 +-474 +-305 +-84 +135 +305 +440 +305 +67 +-135 +-322 +-457 +-288 +-67 +152 +322 +440 +305 +84 +-135 +-305 +-440 +-288 +-67 +152 +322 +457 +305 +84 +-135 +-305 +-440 +-271 +-50 +169 +338 +457 +322 +101 +-101 +-254 +-135 +67 +254 +389 +271 +67 +-135 +-271 +-152 +50 +237 +372 +271 +67 +-135 +-288 +-152 +50 +237 +372 +254 +50 +-135 +-288 +-169 +33 +220 +355 +237 +50 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-152 +-305 +-186 +33 +203 +355 +237 +33 +-152 +-305 +-169 +33 +220 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-169 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-203 +16 +203 +338 +237 +33 +-152 +-305 +-186 +33 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-186 +-355 +-491 +-338 +-101 +101 +288 +406 +288 +67 +-152 +-338 +-457 +-305 +-67 +135 +305 +440 +305 +84 +-135 +-322 +-440 +-288 +-67 +152 +322 +440 +305 +84 +-135 +-305 +-440 +-288 +-50 +152 +322 +457 +305 +84 +-118 +-305 +-440 +-271 +-50 +152 +322 +457 +338 +135 +-67 +-237 +-118 +84 +254 +406 +271 +67 +-118 +-271 +-152 +50 +237 +372 +254 +50 +-135 +-288 +-169 +33 +220 +372 +254 +50 +-135 +-305 +-169 +33 +220 +355 +237 +33 +-152 +-305 +-186 +33 +203 +355 +237 +50 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-203 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +33 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +338 +220 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +338 +220 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-169 +33 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +33 +203 +355 +237 +33 +-152 +-305 +-169 +33 +220 +355 +237 +33 +-152 +-305 +-186 +33 +203 +355 +237 +33 +-152 +-305 +-169 +33 +220 +355 +237 +33 +-152 +-305 +-186 +33 +220 +372 +474 +305 +67 +-152 +-355 +-491 +-338 +-101 +101 +271 +389 +254 +33 +-169 +-355 +-491 +-338 +-101 +101 +288 +406 +271 +50 +-152 +-338 +-474 +-305 +-84 +118 +305 +423 +305 +67 +-152 +-322 +-457 +-305 +-67 +135 +322 +440 +305 +84 +-135 +-305 +-440 +-288 +-50 +169 +322 +237 +50 +-135 +-271 +-152 +67 +254 +406 +288 +84 +-118 +-254 +-135 +67 +254 +406 +288 +84 +-118 +-271 +-135 +67 +254 +389 +271 +67 +-135 +-288 +-152 +50 +237 +372 +254 +50 +-135 +-288 +-169 +33 +220 +372 +254 +50 +-152 +-305 +-169 +33 +220 +355 +254 +50 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +33 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +33 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +33 +220 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-169 +33 +203 +355 +457 +305 +67 +-152 +-338 +-474 +-338 +-101 +101 +271 +406 +271 +33 +-169 +-355 +-474 +-322 +-101 +101 +288 +406 +288 +50 +-152 +-338 +-474 +-322 +-84 +118 +305 +423 +288 +67 +-152 +-322 +-457 +-305 +-67 +135 +322 +440 +305 +67 +-135 +-322 +-440 +-271 +-33 +169 +338 +237 +50 +-135 +-288 +-152 +67 +254 +389 +288 +84 +-118 +-254 +-135 +67 +254 +406 +288 +84 +-118 +-271 +-135 +67 +237 +389 +271 +67 +-135 +-288 +-152 +33 +220 +372 +254 +50 +-135 +-288 +-169 +33 +220 +372 +254 +50 +-152 +-305 +-169 +33 +220 +372 +254 +50 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-152 +-305 +-186 +33 +203 +355 +237 +33 +-152 +-305 +-186 +33 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +220 +33 +-169 +-322 +-203 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +220 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +33 +203 +355 +237 +33 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-203 +16 +203 +338 +220 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +33 +220 +355 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +33 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +220 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +33 +203 +355 +237 +33 +-152 +-338 +-474 +-305 +-84 +118 +288 +423 +271 +50 +-152 +-338 +-474 +-305 +-84 +135 +305 +440 +305 +67 +-135 +-322 +-457 +-288 +-67 +152 +322 +440 +305 +84 +-135 +-305 +-440 +-288 +-67 +152 +322 +457 +305 +84 +-118 +-305 +-440 +-271 +-50 +152 +338 +457 +322 +101 +-101 +-254 +-118 +67 +254 +389 +271 +67 +-135 +-271 +-152 +50 +237 +372 +271 +67 +-135 +-271 +-152 +50 +237 +372 +254 +50 +-135 +-288 +-169 +33 +220 +372 +254 +33 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-169 +-305 +-169 +33 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +33 +220 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +33 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +33 +203 +355 +237 +50 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-169 +33 +220 +355 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +33 +203 +338 +237 +33 +-169 +-322 +-203 +16 +203 +338 +220 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +355 +237 +33 +-169 +-322 +-203 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-186 +-355 +-491 +-338 +-101 +101 +288 +406 +271 +50 +-152 +-338 +-457 +-305 +-67 +135 +305 +440 +305 +84 +-135 +-322 +-440 +-288 +-67 +152 +322 +440 +305 +84 +-135 +-322 +-440 +-288 +-67 +152 +322 +457 +322 +101 +-118 +-305 +-423 +-271 +-50 +169 +338 +474 +338 +135 +-67 +-237 +-118 +84 +271 +406 +288 +84 +-118 +-271 +-152 +50 +237 +372 +271 +67 +-135 +-288 +-169 +33 +220 +372 +254 +50 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-169 +-305 +-186 +33 +203 +355 +237 +33 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +33 +203 +355 +237 +33 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +33 +203 +338 +237 +33 +-169 +-322 +-203 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-203 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-169 +33 +203 +355 +237 +50 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-152 +-305 +-169 +33 +203 +355 +237 +50 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-203 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +220 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-203 +16 +203 +338 +220 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +355 +474 +305 +67 +-152 +-355 +-491 +-338 +-101 +101 +271 +406 +271 +33 +-169 +-355 +-491 +-322 +-101 +118 +288 +406 +288 +50 +-152 +-338 +-457 +-305 +-84 +118 +305 +423 +288 +67 +-152 +-322 +-457 +-305 +-67 +135 +322 +440 +305 +84 +-135 +-305 +-440 +-288 +-50 +169 +322 +237 +50 +-135 +-288 +-152 +67 +254 +406 +288 +84 +-118 +-254 +-135 +67 +254 +406 +288 +84 +-118 +-271 +-152 +50 +237 +389 +271 +67 +-135 +-288 +-169 +33 +220 +372 +254 +50 +-135 +-288 +-169 +33 +220 +372 +254 +50 +-152 +-305 +-169 +33 +220 +372 +254 +33 +-186 +-355 +-491 +-338 +-101 +118 +288 +423 +288 +67 +-152 +-338 +-457 +-305 +-67 +135 +322 +440 +305 +84 +-135 +-305 +-440 +-288 +-50 +152 +322 +457 +305 +84 +-135 +-322 +-440 +-288 +-67 +152 +322 +457 +305 +84 +-118 +-305 +-440 +-271 +-50 +169 +338 +474 +338 +135 +-67 +-237 +-118 +84 +254 +406 +271 +67 +-118 +-271 +-152 +50 +237 +372 +271 +67 +-135 +-288 +-169 +33 +220 +372 +254 +50 +-135 +-288 +-169 +33 +220 +355 +254 +50 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-152 +-305 +-169 +33 +203 +355 +237 +50 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-203 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-169 +33 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +33 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +33 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-203 +16 +203 +338 +220 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +33 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-169 +16 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-169 +33 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +33 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-338 +-474 +-305 +-84 +118 +288 +423 +271 +50 +-152 +-338 +-474 +-305 +-84 +135 +305 +440 +305 +67 +-135 +-322 +-457 +-288 +-67 +152 +322 +440 +305 +84 +-135 +-322 +-440 +-288 +-67 +152 +322 +440 +305 +84 +-135 +-305 +-440 +-271 +-50 +152 +322 +457 +305 +101 +-101 +-254 +-135 +67 +254 +389 +271 +67 +-135 +-271 +-152 +50 +237 +372 +271 +67 +-135 +-288 +-152 +33 +237 +372 +254 +50 +-135 +-288 +-169 +33 +220 +372 +254 +33 +-152 +-305 +-186 +33 +220 +355 +237 +33 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-152 +-305 +-169 +33 +203 +355 +457 +305 +67 +-152 +-338 +-474 +-338 +-101 +101 +271 +406 +271 +50 +-169 +-355 +-474 +-322 +-84 +118 +288 +423 +288 +67 +-152 +-338 +-457 +-305 +-84 +135 +305 +440 +305 +67 +-135 +-322 +-457 +-288 +-67 +135 +322 +440 +305 +84 +-135 +-305 +-440 +-271 +-50 +152 +322 +457 +305 +84 +-135 +-305 +-440 +-288 +-50 +152 +338 +457 +322 +101 +-118 +-305 +-423 +-271 +-50 +169 +338 +457 +322 +101 +-118 +-305 +-440 +-271 +-50 +152 +338 +457 +322 +101 +-118 +-305 +-423 +-271 +-50 +169 +338 +474 +322 +101 +-118 +-305 +-423 +-254 +-33 +186 +338 +237 +50 +-135 +-271 +-152 +67 +254 +406 +288 +84 +-101 +-254 +-135 +67 +254 +406 +288 +84 +-118 +-271 +-135 +67 +254 +389 +271 +67 +-135 +-288 +-169 +50 +237 +372 +271 +50 +-135 +-288 +-152 +50 +237 +372 +254 +50 +-152 +-305 +-169 +33 +220 +372 +474 +322 +84 +-135 +-338 +-474 +-322 +-101 +101 +288 +406 +271 +50 +-169 +-338 +-474 +-322 +-84 +118 +305 +423 +288 +67 +-135 +-322 +-457 +-305 +-67 +135 +305 +440 +305 +67 +-152 +-322 +-457 +-305 +-67 +135 +322 +440 +305 +84 +-135 +-305 +-440 +-288 +-50 +169 +322 +237 +50 +-135 +-288 +-152 +67 +254 +406 +288 +84 +-101 +-254 +-135 +67 +254 +406 +288 +84 +-118 +-271 +-135 +67 +254 +389 +271 +67 +-135 +-271 +-152 +50 +237 +372 +254 +50 +-135 +-288 +-169 +33 +220 +372 +254 +50 +-152 +-305 +-169 +33 +220 +372 +254 +33 +-169 +-355 +-491 +-322 +-101 +118 +288 +423 +288 +67 +-152 +-322 +-457 +-288 +-67 +135 +322 +440 +305 +84 +-135 +-305 +-440 +-271 +-50 +152 +322 +457 +305 +84 +-135 +-305 +-440 +-288 +-67 +152 +322 +457 +305 +84 +-118 +-305 +-440 +-271 +-50 +152 +322 +457 +322 +101 +-118 +-305 +-440 +-288 +-50 +152 +322 +457 +305 +84 +-118 +-305 +-440 +-271 +-50 +169 +338 +457 +322 +101 +-118 +-305 +-423 +-271 +-50 +169 +338 +457 +322 +84 +-118 +-305 +-440 +-271 +-50 +152 +322 +457 +322 +101 +-118 +-288 +-440 +-271 +-50 +169 +338 +474 +338 +135 +-67 +-237 +-118 +84 +271 +406 +271 +67 +-118 +-271 +-152 +50 +237 +372 +271 +67 +-135 +-288 +-169 +33 +237 +372 +254 +50 +-135 +-288 +-169 +33 +220 +355 +237 +33 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-152 +-305 +-186 +33 +203 +355 +237 +33 +-152 +-338 +-474 +-322 +-84 +118 +288 +423 +288 +50 +-152 +-338 +-474 +-305 +-67 +135 +305 +440 +305 +84 +-135 +-322 +-457 +-288 +-67 +152 +322 +457 +305 +84 +-135 +-305 +-440 +-288 +-50 +152 +322 +457 +305 +84 +-118 +-305 +-423 +-271 +-50 +169 +338 +457 +322 +101 +-101 +-254 +-135 +67 +254 +389 +271 +67 +-135 +-271 +-152 +50 +237 +372 +254 +67 +-135 +-288 +-169 +33 +237 +372 +254 +50 +-135 +-288 +-169 +33 +220 +372 +254 +33 +-152 +-305 +-186 +33 +203 +355 +237 +33 +-152 +-305 +-169 +33 +220 +355 +237 +33 +-152 +-305 +-169 +33 +220 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +33 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +33 +220 +372 +474 +305 +67 +-152 +-338 +-474 +-338 +-101 +101 +271 +406 +271 +33 +-169 +-355 +-474 +-322 +-84 +118 +305 +423 +288 +67 +-152 +-338 +-457 +-305 +-84 +135 +305 +423 +288 +67 +-135 +-322 +-457 +-288 +-67 +135 +322 +457 +305 +84 +-135 +-305 +-440 +-288 +-50 +169 +338 +457 +322 +84 +-118 +-305 +-440 +-288 +-50 +152 +322 +457 +322 +84 +-118 +-305 +-423 +-271 +-50 +152 +322 +457 +322 +101 +-118 +-305 +-440 +-271 +-50 +152 +338 +457 +322 +101 +-118 +-305 +-423 +-271 +-50 +169 +338 +474 +322 +101 +-118 +-305 +-423 +-271 +-33 +169 +338 +237 +50 +-135 +-271 +-135 +67 +254 +406 +288 +84 +-101 +-254 +-135 +67 +254 +406 +288 +84 +-118 +-271 +-135 +67 +254 +389 +271 +67 +-135 +-271 +-152 +50 +237 +372 +254 +50 +-135 +-288 +-169 +33 +220 +372 +254 +50 +-152 +-288 +-169 +33 +220 +372 +254 +50 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-152 +-305 +-186 +33 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-169 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +33 +203 +355 +237 +33 +-152 +-305 +-169 +16 +203 +338 +237 +33 +-169 +-322 +-203 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-169 +33 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +33 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +355 +474 +305 +67 +-152 +-355 +-474 +-338 +-101 +101 +271 +406 +271 +33 +-169 +-355 +-474 +-322 +-84 +118 +288 +406 +288 +67 +-152 +-338 +-457 +-305 +-84 +135 +305 +423 +305 +67 +-135 +-322 +-457 +-288 +-67 +135 +322 +440 +305 +84 +-135 +-305 +-440 +-288 +-50 +169 +322 +237 +50 +-135 +-288 +-152 +50 +254 +389 +288 +84 +-101 +-254 +-135 +67 +254 +406 +288 +84 +-118 +-271 +-135 +67 +254 +389 +271 +67 +-135 +-288 +-152 +50 +237 +372 +254 +50 +-135 +-288 +-169 +33 +220 +372 +254 +50 +-152 +-288 +-169 +33 +220 +372 +254 +50 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-152 +-305 +-169 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-169 +16 +203 +355 +457 +305 +67 +-169 +-355 +-491 +-338 +-101 +101 +271 +406 +271 +50 +-169 +-355 +-474 +-322 +-84 +118 +288 +423 +288 +67 +-152 +-338 +-457 +-305 +-84 +135 +305 +440 +305 +67 +-135 +-322 +-440 +-288 +-67 +135 +322 +457 +305 +84 +-135 +-305 +-440 +-271 +-50 +152 +322 +457 +305 +84 +-135 +-322 +-440 +-288 +-67 +152 +322 +457 +305 +84 +-118 +-305 +-440 +-271 +-50 +152 +322 +457 +322 +101 +-118 +-305 +-440 +-271 +-50 +152 +338 +457 +322 +84 +-118 +-305 +-423 +-271 +-50 +169 +338 +474 +322 +101 +-118 +-305 +-423 +-254 +-16 +186 +338 +254 +50 +-135 +-271 +-135 +67 +254 +406 +288 +84 +-101 +-254 +-135 +67 +254 +406 +288 +84 +-118 +-271 +-135 +67 +254 +389 +271 +67 +-135 +-288 +-152 +50 +237 +372 +254 +50 +-135 +-288 +-152 +50 +237 +372 +254 +50 +-152 +-305 +-169 +33 +220 +372 +237 +50 +-152 +-305 +-169 +33 +220 +355 +237 +33 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-152 +-305 +-186 +33 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-169 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +33 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +33 +203 +355 +237 +33 +-169 +-305 +-169 +33 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +33 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +16 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-169 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-169 +33 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +33 +220 +355 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +33 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +33 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +33 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +338 +220 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +220 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-338 +-474 +-322 +-84 +118 +288 +406 +288 +50 +-152 +-338 +-474 +-305 +-67 +135 +305 +440 +305 +84 +-135 +-305 +-440 +-288 +-67 +152 +322 +440 +305 +84 +-135 +-305 +-440 +-288 +-67 +152 +322 +457 +322 +84 +-118 +-305 +-440 +-271 +-50 +152 +322 +457 +322 +101 +-101 +-237 +-118 +67 +254 +389 +271 +67 +-135 +-271 +-152 +50 +237 +372 +271 +67 +-135 +-288 +-169 +33 +237 +372 +254 +50 +-135 +-288 +-169 +33 +220 +372 +237 +33 +-152 +-305 +-186 +33 +203 +355 +237 +33 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-169 +-305 +-169 +33 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +220 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +338 +220 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +33 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +33 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +33 +220 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +33 +203 +355 +237 +33 +-152 +-305 +-186 +33 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +16 +-186 +-372 +-508 +-338 +-101 +101 +288 +406 +271 +50 +-152 +-338 +-474 +-305 +-67 +135 +305 +440 +305 +84 +-135 +-322 +-440 +-288 +-67 +152 +322 +440 +305 +84 +-135 +-305 +-440 +-288 +-67 +152 +322 +457 +305 +84 +-118 +-305 +-440 +-271 +-50 +152 +322 +457 +338 +135 +-84 +-237 +-118 +84 +254 +406 +271 +67 +-135 +-271 +-152 +50 +237 +372 +271 +50 +-135 +-288 +-169 +33 +220 +372 +254 +50 +-135 +-288 +-169 +33 +220 +355 +237 +50 +-152 +-305 +-169 +33 +220 +355 +237 +33 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-203 +16 +203 +338 +237 +33 +-169 +-305 +-186 +33 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +50 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +33 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +33 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +220 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-169 +33 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +33 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +33 +203 +355 +237 +33 +-152 +-305 +-186 +33 +220 +372 +474 +322 +84 +-152 +-338 +-474 +-322 +-101 +101 +271 +406 +271 +33 +-169 +-355 +-474 +-322 +-84 +118 +305 +423 +288 +67 +-152 +-322 +-457 +-305 +-84 +135 +305 +440 +288 +67 +-135 +-322 +-457 +-305 +-67 +135 +322 +440 +305 +84 +-135 +-305 +-440 +-288 +-50 +169 +322 +237 +50 +-135 +-288 +-152 +67 +254 +406 +288 +84 +-101 +-254 +-135 +67 +254 +406 +288 +84 +-118 +-271 +-135 +50 +237 +389 +271 +67 +-135 +-288 +-169 +33 +220 +372 +254 +50 +-152 +-305 +-169 +33 +220 +372 +254 +50 +-152 +-305 +-169 +33 +220 +355 +254 +50 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-169 +33 +203 +355 +237 +50 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +33 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-169 +33 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +33 +203 +355 +237 +50 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-169 +33 +203 +355 +457 +305 +67 +-152 +-355 +-491 +-338 +-101 +101 +271 +406 +271 +50 +-169 +-338 +-474 +-322 +-84 +118 +288 +423 +288 +67 +-152 +-338 +-457 +-305 +-84 +135 +305 +423 +305 +67 +-135 +-322 +-457 +-288 +-67 +152 +322 +457 +305 +84 +-135 +-305 +-440 +-271 +-33 +169 +338 +237 +50 +-135 +-271 +-152 +67 +254 +406 +288 +84 +-118 +-254 +-135 +67 +254 +389 +271 +67 +-118 +-271 +-135 +67 +237 +389 +271 +67 +-135 +-288 +-169 +33 +220 +372 +254 +50 +-152 +-305 +-169 +33 +220 +372 +254 +50 +-152 +-305 +-169 +33 +220 +372 +237 +50 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +33 +203 +355 +237 +33 +-152 +-305 +-186 +33 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +33 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +33 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-169 +33 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +33 +203 +355 +237 +33 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-169 +-305 +-203 +16 +203 +338 +237 +33 +-169 +-305 +-186 +33 +203 +338 +237 +33 +-169 +-305 +-186 +33 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-152 +-305 +-186 +33 +203 +355 +254 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-338 +-474 +-322 +-101 +118 +288 +406 +271 +50 +-169 +-338 +-474 +-305 +-84 +135 +305 +440 +288 +67 +-135 +-322 +-457 +-305 +-67 +152 +322 +440 +305 +84 +-135 +-305 +-440 +-288 +-67 +152 +322 +457 +305 +84 +-118 +-305 +-440 +-271 +-50 +152 +338 +457 +322 +101 +-84 +-237 +-118 +67 +254 +389 +271 +67 +-135 +-271 +-152 +50 +237 +372 +254 +50 +-135 +-288 +-169 +33 +220 +372 +254 +50 +-152 +-288 +-169 +33 +220 +355 +237 +33 +-152 +-305 +-169 +33 +220 +355 +237 +33 +-152 +-305 +-169 +33 +220 +355 +237 +33 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +33 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +33 +220 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +220 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +33 +203 +355 +237 +33 +-169 +-305 +-169 +33 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +33 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-186 +-355 +-491 +-338 +-101 +101 +288 +423 +288 +67 +-152 +-322 +-457 +-305 +-67 +135 +305 +440 +305 +84 +-135 +-305 +-440 +-271 +-50 +152 +322 +457 +305 +84 +-135 +-305 +-440 +-288 +-50 +152 +322 +457 +322 +84 +-118 +-305 +-440 +-271 +-50 +152 +322 +474 +338 +135 +-67 +-237 +-118 +84 +254 +389 +271 +67 +-135 +-271 +-152 +50 +237 +372 +254 +50 +-135 +-288 +-169 +33 +220 +372 +254 +50 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +33 +203 +355 +237 +33 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +33 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-169 +33 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +33 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-169 +33 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +33 +220 +372 +474 +305 +67 +-152 +-338 +-474 +-338 +-101 +101 +271 +406 +271 +33 +-169 +-355 +-474 +-322 +-101 +118 +288 +406 +288 +67 +-152 +-338 +-457 +-305 +-84 +135 +305 +440 +305 +67 +-135 +-322 +-457 +-288 +-67 +135 +322 +440 +305 +84 +-135 +-305 +-440 +-288 +-50 +169 +338 +237 +50 +-135 +-288 +-152 +67 +254 +406 +288 +84 +-101 +-254 +-135 +67 +254 +406 +288 +84 +-118 +-271 +-152 +50 +237 +389 +271 +67 +-135 +-288 +-152 +33 +220 +372 +254 +50 +-135 +-288 +-169 +33 +220 +372 +254 +50 +-135 +-288 +-169 +33 +220 +355 +254 +50 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-152 +-305 +-186 +33 +203 +355 +237 +33 +-152 +-305 +-186 +33 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +33 +203 +355 +237 +33 +-152 +-305 +-169 +33 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +33 +203 +355 +237 +33 +-152 +-305 +-169 +33 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +33 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +220 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-203 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +33 +220 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +220 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-169 +33 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +220 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-169 +33 +203 +355 +457 +305 +67 +-152 +-338 +-474 +-322 +-101 +101 +288 +406 +271 +50 +-169 +-338 +-474 +-322 +-84 +118 +305 +423 +288 +67 +-152 +-338 +-457 +-305 +-67 +135 +305 +440 +305 +67 +-135 +-322 +-440 +-288 +-50 +152 +322 +457 +305 +84 +-135 +-305 +-440 +-271 +-33 +169 +338 +237 +50 +-135 +-271 +-152 +67 +254 +406 +288 +84 +-101 +-254 +-135 +67 +254 +389 +271 +67 +-118 +-271 +-152 +50 +237 +389 +271 +67 +-135 +-288 +-169 +33 +220 +372 +254 +50 +-152 +-288 +-169 +33 +220 +372 +254 +50 +-152 +-305 +-169 +33 +220 +372 +254 +50 +-152 +-305 +-169 +16 +203 +355 +237 +33 +-152 +-305 +-169 +33 +220 +355 +237 +50 +-152 +-305 +-169 +33 +220 +355 +237 +33 +-152 +-305 +-186 +33 +203 +355 +237 +33 +-152 +-305 +-186 +33 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +355 +254 +50 +-152 +-305 +-169 +33 +203 +355 +220 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-203 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +33 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +33 +203 +355 +237 +33 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +33 +203 +355 +237 +33 +-169 +-305 +-186 +33 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-338 +-474 +-322 +-84 +118 +288 +423 +271 +50 +-152 +-338 +-474 +-305 +-84 +118 +305 +440 +288 +67 +-135 +-322 +-457 +-288 +-67 +152 +322 +440 +305 +84 +-135 +-322 +-457 +-288 +-67 +152 +322 +440 +305 +84 +-135 +-305 +-440 +-271 +-50 +152 +322 +457 +322 +101 +-101 +-254 +-135 +67 +254 +389 +271 +67 +-135 +-271 +-152 +50 +237 +372 +254 +50 +-135 +-288 +-152 +33 +220 +372 +254 +50 +-152 +-288 +-169 +33 +220 +355 +237 +33 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-152 +-305 +-186 +33 +203 +355 +237 +33 +-169 +-305 +-169 +33 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +33 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +33 +203 +355 +237 +33 +-152 +-305 +-186 +16 +220 +355 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-152 +-288 +-169 +33 +220 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +33 +203 +355 +237 +33 +-152 +-305 +-169 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-186 +-372 +-491 +-338 +-101 +101 +288 +406 +271 +50 +-152 +-338 +-457 +-305 +-67 +135 +305 +440 +305 +84 +-135 +-322 +-440 +-288 +-67 +152 +322 +457 +305 +84 +-135 +-305 +-440 +-288 +-50 +152 +322 +457 +322 +101 +-118 +-305 +-440 +-271 +-50 +169 +338 +474 +338 +135 +-67 +-237 +-118 +84 +271 +389 +271 +67 +-135 +-271 +-152 +50 +237 +372 +254 +50 +-135 +-288 +-169 +33 +220 +372 +254 +50 +-135 +-305 +-169 +33 +220 +355 +237 +33 +-152 +-305 +-169 +33 +220 +355 +254 +50 +-152 +-305 +-169 +33 +220 +355 +237 +50 +-152 +-338 +-474 +-305 +-84 +118 +288 +423 +271 +50 +-152 +-338 +-474 +-305 +-84 +135 +305 +440 +305 +67 +-135 +-322 +-457 +-288 +-67 +152 +322 +440 +305 +84 +-135 +-322 +-440 +-288 +-67 +152 +322 +457 +305 +84 +-118 +-305 +-440 +-271 +-50 +152 +322 +457 +305 +101 +-101 +-254 +-135 +67 +254 +389 +271 +67 +-135 +-271 +-152 +50 +237 +372 +271 +67 +-135 +-288 +-152 +50 +237 +372 +254 +50 +-135 +-288 +-169 +33 +220 +372 +237 +33 +-152 +-305 +-186 +33 +203 +355 +237 +33 +-152 +-305 +-169 +33 +220 +355 +237 +33 +-152 +-305 +-169 +33 +220 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +33 +203 +355 +237 +33 +-169 +-305 +-186 +33 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +220 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +33 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-169 +33 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +33 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-169 +33 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +33 +203 +355 +237 +33 +-169 +-305 +-186 +33 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +220 +355 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +33 +203 +355 +237 +50 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +33 +203 +355 +237 +33 +-152 +-305 +-186 +33 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +33 +203 +338 +237 +33 +-152 +-305 +-169 +33 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-203 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +457 +305 +50 +-169 +-355 +-491 +-338 +-101 +101 +271 +406 +271 +33 +-169 +-355 +-474 +-322 +-101 +118 +288 +423 +288 +67 +-152 +-338 +-457 +-305 +-84 +135 +305 +423 +305 +67 +-135 +-322 +-457 +-288 +-67 +135 +322 +440 +305 +84 +-135 +-305 +-440 +-271 +-33 +169 +338 +237 +50 +-135 +-271 +-152 +67 +254 +406 +288 +84 +-101 +-254 +-135 +67 +254 +406 +288 +84 +-118 +-271 +-135 +67 +254 +389 +271 +67 +-135 +-288 +-169 +33 +220 +372 +254 +50 +-152 +-288 +-169 +33 +220 +372 +254 +50 +-152 +-305 +-169 +33 +220 +372 +474 +322 +67 +-152 +-338 +-474 +-322 +-101 +101 +288 +406 +271 +50 +-169 +-338 +-474 +-322 +-84 +118 +305 +423 +288 +67 +-135 +-322 +-457 +-305 +-67 +135 +305 +440 +305 +67 +-135 +-322 +-457 +-288 +-67 +135 +322 +457 +305 +84 +-118 +-305 +-440 +-288 +-50 +152 +338 +457 +322 +84 +-118 +-305 +-440 +-288 +-50 +152 +338 +457 +322 +101 +-118 +-305 +-423 +-271 +-50 +169 +338 +457 +322 +101 +-101 +-288 +-423 +-271 +-50 +152 +322 +457 +305 +84 +-118 +-305 +-440 +-271 +-50 +169 +338 +457 +322 +101 +-118 +-305 +-440 +-271 +-50 +169 +338 +237 +50 +-135 +-271 +-135 +67 +254 +406 +288 +84 +-101 +-254 +-135 +67 +254 +406 +288 +84 +-118 +-271 +-152 +50 +237 +389 +271 +67 +-135 +-288 +-169 +50 +237 +372 +254 +50 +-135 +-288 +-169 +33 +220 +372 +254 +50 +-135 +-288 +-169 +33 +220 +372 +254 +33 +-169 +-355 +-491 +-322 +-101 +118 +288 +423 +288 +67 +-152 +-322 +-457 +-305 +-67 +135 +322 +440 +305 +84 +-135 +-305 +-440 +-271 +-50 +152 +322 +457 +305 +84 +-135 +-305 +-440 +-271 +-50 +152 +322 +457 +322 +101 +-118 +-305 +-440 +-271 +-50 +169 +338 +474 +338 +118 +-67 +-237 +-118 +84 +271 +406 +271 +67 +-118 +-271 +-152 +50 +237 +372 +271 +50 +-135 +-288 +-169 +33 +220 +372 +254 +50 +-152 +-288 +-169 +33 +220 +355 +237 +33 +-152 +-305 +-186 +33 +203 +355 +237 +33 +-152 +-305 +-169 +16 +203 +355 +237 +33 +-152 +-338 +-474 +-322 +-84 +118 +288 +406 +271 +50 +-152 +-338 +-474 +-305 +-67 +135 +305 +440 +305 +84 +-135 +-322 +-457 +-288 +-67 +152 +322 +457 +305 +84 +-135 +-305 +-440 +-288 +-50 +152 +322 +457 +305 +84 +-118 +-305 +-440 +-271 +-50 +152 +322 +457 +305 +101 +-118 +-288 +-423 +-271 +-50 +152 +322 +457 +322 +101 +-118 +-305 +-440 +-271 +-50 +169 +338 +474 +322 +101 +-118 +-288 +-423 +-271 +-50 +169 +338 +474 +322 +101 +-118 +-305 +-440 +-271 +-50 +169 +338 +457 +322 +101 +-118 +-288 +-423 +-271 +-50 +169 +338 +457 +322 +101 +-84 +-237 +-118 +84 +254 +406 +271 +67 +-118 +-271 +-152 +50 +237 +372 +271 +67 +-135 +-288 +-152 +33 +237 +372 +254 +50 +-152 +-288 +-169 +33 +220 +355 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-169 +-305 +-169 +33 +203 +355 +457 +305 +67 +-152 +-338 +-474 +-338 +-101 +101 +288 +406 +271 +50 +-169 +-338 +-474 +-322 +-84 +118 +305 +423 +305 +67 +-152 +-338 +-457 +-305 +-67 +135 +305 +440 +305 +67 +-135 +-322 +-440 +-288 +-67 +152 +322 +457 +305 +84 +-135 +-305 +-440 +-271 +-33 +169 +338 +237 +50 +-135 +-271 +-152 +67 +254 +406 +288 +84 +-101 +-254 +-135 +67 +254 +406 +271 +84 +-118 +-271 +-135 +67 +237 +389 +271 +67 +-135 +-288 +-169 +33 +220 +372 +254 +50 +-152 +-288 +-169 +33 +220 +372 +254 +50 +-152 +-305 +-169 +33 +220 +372 +254 +50 +-152 +-305 +-186 +33 +203 +355 +237 +33 +-152 +-305 +-186 +33 +203 +355 +237 +33 +-152 +-305 +-186 +33 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-186 +-372 +-491 +-338 +-101 +101 +288 +406 +271 +50 +-152 +-338 +-474 +-305 +-67 +135 +305 +440 +305 +84 +-135 +-322 +-440 +-288 +-67 +152 +322 +440 +305 +84 +-135 +-322 +-440 +-288 +-67 +152 +322 +457 +322 +101 +-118 +-305 +-440 +-271 +-50 +152 +338 +457 +322 +101 +-118 +-305 +-440 +-271 +-50 +152 +338 +457 +322 +101 +-118 +-288 +-423 +-271 +-50 +169 +338 +474 +322 +101 +-118 +-305 +-423 +-271 +-50 +169 +338 +474 +322 +101 +-118 +-305 +-440 +-271 +-50 +152 +338 +457 +322 +101 +-118 +-288 +-423 +-271 +-50 +169 +338 +474 +338 +135 +-67 +-237 +-118 +84 +271 +406 +288 +84 +-118 +-271 +-152 +50 +237 +372 +271 +67 +-135 +-288 +-169 +33 +220 +372 +254 +50 +-135 +-288 +-169 +33 +220 +355 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +33 +203 +355 +237 +33 +-152 +-305 +-186 +33 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-186 +-355 +-491 +-338 +-101 +118 +288 +406 +288 +50 +-152 +-338 +-474 +-305 +-67 +135 +305 +440 +305 +84 +-135 +-322 +-440 +-288 +-67 +152 +322 +440 +305 +84 +-135 +-305 +-440 +-288 +-67 +152 +322 +457 +305 +84 +-118 +-305 +-440 +-271 +-50 +152 +338 +457 +338 +118 +-84 +-237 +-118 +84 +254 +406 +288 +84 +-118 +-271 +-152 +50 +237 +372 +271 +67 +-135 +-288 +-169 +33 +220 +372 +254 +50 +-135 +-288 +-169 +33 +220 +355 +237 +33 +-152 +-305 +-169 +33 +220 +355 +237 +33 +-152 +-305 +-169 +33 +220 +355 +237 +50 +-152 +-305 +-169 +33 +220 +355 +237 +33 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-152 +-305 +-169 +33 +220 +355 +237 +33 +-152 +-305 +-169 +33 +220 +355 +237 +33 +-152 +-305 +-169 +33 +220 +355 +237 +50 +-152 +-305 +-169 +33 +220 +372 +254 +50 +-152 +-288 +-169 +50 +237 +372 +254 +50 +-135 +-288 +-152 +50 +237 +372 +271 +67 +-135 +-271 +-135 +67 +254 +389 +271 +84 +-118 +-271 +-135 +67 +271 +406 +288 +84 +-118 +-271 +-135 +67 +237 +389 +271 +50 +-135 +-288 +-169 +33 +203 +355 +237 +33 +-169 +-322 +-203 +0 +186 +338 +440 +288 +50 +-186 +-372 +-508 +-355 +-135 +67 +237 +372 +237 +0 +-203 +-389 +-508 +-355 +-135 +84 +254 +389 +254 +33 +-186 +-355 +-491 +-338 +-101 +101 +271 +406 +271 +50 +-169 +-338 +-474 +-322 +-84 +118 +305 +423 +288 +67 +-152 +-322 +-457 +-305 +-67 +135 +322 +440 +305 +67 +-135 +-322 +-457 +-305 +-67 +135 +305 +440 +305 +84 +-135 +-305 +-440 +-288 +-67 +152 +322 +440 +305 +84 +-118 +-305 +-440 +-288 +-50 +152 +322 +440 +305 +84 +-135 +-305 +-440 +-288 +-50 +152 +322 +457 +322 +84 +-118 +-305 +-440 +-271 +-50 +169 +338 +237 +50 +-135 +-271 +-135 +67 +254 +406 +288 +84 +-101 +-254 +-135 +67 +254 +406 +288 +84 +-118 +-271 +-135 +50 +254 +389 +271 +67 +-135 +-288 +-152 +50 +220 +372 +254 +50 +-135 +-288 +-169 +33 +220 +372 +254 +50 +-152 +-305 +-169 +33 +220 +372 +254 +50 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-152 +-305 +-186 +33 +203 +355 +237 +50 +-152 +-305 +-169 +33 +203 +355 +237 +50 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +33 +203 +355 +237 +33 +-169 +-305 +-169 +33 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +33 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +33 +220 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-152 +-305 +-169 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +33 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +33 +203 +355 +237 +33 +-152 +-305 +-186 +33 +220 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +220 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-169 +33 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +33 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +33 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +33 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-169 +16 +203 +355 +457 +305 +67 +-169 +-355 +-491 +-338 +-101 +101 +271 +406 +271 +50 +-169 +-355 +-474 +-322 +-101 +118 +288 +423 +288 +67 +-152 +-338 +-457 +-305 +-84 +135 +305 +440 +305 +67 +-135 +-322 +-440 +-288 +-50 +152 +322 +457 +305 +84 +-135 +-305 +-423 +-271 +-33 +186 +338 +237 +50 +-135 +-271 +-152 +67 +254 +406 +288 +84 +-101 +-254 +-135 +67 +254 +406 +288 +84 +-118 +-271 +-135 +67 +254 +389 +271 +67 +-135 +-288 +-169 +33 +220 +372 +254 +50 +-135 +-288 +-169 +33 +220 +372 +254 +50 +-152 +-305 +-169 +33 +220 +372 +237 +33 +-152 +-305 +-186 +33 +203 +355 +237 +33 +-152 +-305 +-186 +33 +203 +355 +237 +33 +-152 +-305 +-186 +33 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-169 +33 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +33 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +355 +254 +50 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +33 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-338 +-474 +-322 +-84 +118 +288 +406 +271 +50 +-152 +-338 +-474 +-305 +-84 +135 +305 +440 +288 +67 +-135 +-322 +-457 +-305 +-67 +152 +322 +440 +305 +84 +-135 +-305 +-440 +-288 +-50 +152 +322 +457 +305 +84 +-118 +-305 +-440 +-271 +-50 +152 +322 +457 +322 +101 +-101 +-254 +-135 +67 +254 +389 +271 +67 +-118 +-271 +-152 +50 +237 +372 +271 +67 +-135 +-288 +-152 +33 +237 +372 +254 +50 +-135 +-288 +-169 +33 +220 +372 +237 +50 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-152 +-305 +-169 +33 +220 +355 +237 +33 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +33 +203 +355 +237 +33 +-169 +-305 +-186 +33 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +220 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-169 +33 +220 +355 +254 +50 +-152 +-288 +-169 +33 +237 +372 +254 +50 +-135 +-271 +-152 +50 +237 +389 +271 +67 +-118 +-271 +-135 +67 +254 +406 +288 +84 +-118 +-271 +-135 +50 +237 +372 +271 +50 +-135 +-305 +-169 +33 +203 +355 +237 +33 +-169 +-322 +-203 +0 +186 +338 +220 +16 +-186 +-338 +-203 +0 +186 +322 +220 +16 +-186 +-338 +-203 +0 +186 +322 +220 +16 +-186 +-338 +-203 +0 +186 +322 +220 +16 +-186 +-322 +-203 +0 +186 +338 +220 +16 +-169 +-322 +-203 +0 +203 +338 +220 +16 +-169 +-322 +-203 +0 +186 +338 +220 +16 +-169 +-322 +-203 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-186 +-372 +-491 +-338 +-101 +101 +271 +406 +271 +50 +-152 +-338 +-474 +-305 +-84 +135 +305 +440 +305 +67 +-135 +-322 +-457 +-288 +-67 +152 +322 +440 +305 +84 +-135 +-305 +-440 +-288 +-50 +152 +322 +457 +322 +101 +-118 +-288 +-440 +-271 +-50 +169 +338 +474 +338 +135 +-67 +-237 +-118 +84 +271 +406 +288 +84 +-118 +-271 +-152 +50 +237 +389 +271 +67 +-135 +-288 +-152 +50 +220 +372 +254 +50 +-135 +-288 +-169 +33 +220 +372 +237 +50 +-152 +-305 +-169 +33 +220 +355 +237 +50 +-152 +-305 +-169 +33 +220 +355 +237 +50 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +50 +-152 +-288 +-169 +33 +237 +372 +271 +67 +-118 +-271 +-135 +67 +237 +389 +271 +50 +-135 +-305 +-169 +33 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +220 +16 +-169 +-322 +-186 +16 +203 +338 +220 +16 +-186 +-338 +-203 +0 +186 +338 +220 +16 +-186 +-322 +-203 +0 +186 +338 +220 +16 +-169 +-322 +-203 +16 +203 +338 +220 +16 +-169 +-322 +-203 +0 +186 +338 +220 +16 +-169 +-322 +-203 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +355 +237 +50 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +338 +220 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +33 +203 +355 +237 +33 +-152 +-305 +-169 +33 +220 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +33 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +372 +474 +305 +67 +-152 +-338 +-474 +-338 +-101 +101 +271 +406 +271 +33 +-169 +-355 +-474 +-322 +-101 +118 +288 +423 +288 +67 +-152 +-322 +-457 +-305 +-67 +135 +305 +440 +305 +67 +-135 +-322 +-457 +-288 +-67 +135 +322 +457 +305 +84 +-135 +-305 +-440 +-288 +-50 +169 +322 +237 +50 +-135 +-288 +-152 +50 +254 +389 +288 +84 +-118 +-271 +-135 +67 +254 +389 +271 +67 +-118 +-271 +-152 +50 +237 +389 +271 +67 +-135 +-288 +-169 +33 +220 +372 +254 +50 +-152 +-305 +-169 +33 +220 +372 +254 +50 +-152 +-305 +-169 +33 +220 +372 +254 +50 +-152 +-305 +-169 +33 +220 +355 +237 +33 +-169 +-305 +-186 +33 +203 +355 +237 +50 +-152 +-305 +-169 +33 +220 +355 +237 +50 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-152 +-305 +-186 +33 +203 +355 +237 +33 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +220 +33 +-169 +-322 +-203 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +33 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +33 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +33 +203 +355 +237 +33 +-152 +-305 +-169 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +33 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-169 +33 +203 +355 +457 +305 +67 +-152 +-355 +-474 +-338 +-101 +101 +271 +406 +271 +50 +-169 +-355 +-474 +-322 +-84 +118 +288 +423 +288 +67 +-152 +-338 +-457 +-305 +-84 +135 +305 +440 +305 +67 +-135 +-322 +-457 +-288 +-67 +152 +322 +457 +305 +84 +-135 +-305 +-423 +-271 +-33 +169 +338 +237 +50 +-135 +-271 +-135 +67 +254 +406 +288 +84 +-118 +-254 +-135 +67 +254 +389 +271 +67 +-118 +-271 +-135 +50 +237 +389 +271 +67 +-135 +-288 +-152 +33 +220 +372 +254 +50 +-135 +-288 +-169 +33 +220 +372 +254 +50 +-152 +-305 +-169 +33 +220 +372 +254 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +33 +203 +355 +237 +50 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-169 +-305 +-169 +33 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +50 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-338 +-474 +-322 +-84 +118 +288 +406 +271 +50 +-169 +-338 +-474 +-305 +-84 +135 +305 +440 +305 +67 +-135 +-322 +-457 +-288 +-67 +152 +322 +457 +305 +84 +-135 +-305 +-440 +-288 +-67 +152 +322 +457 +305 +84 +-118 +-305 +-440 +-271 +-50 +169 +338 +457 +322 +101 +-101 +-254 +-135 +67 +254 +389 +271 +67 +-135 +-271 +-152 +50 +237 +372 +271 +50 +-135 +-288 +-169 +33 +220 +372 +254 +50 +-152 +-288 +-169 +33 +220 +355 +237 +33 +-152 +-305 +-186 +33 +203 +355 +237 +33 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +33 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +33 +220 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +33 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +355 +254 +50 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-169 +33 +203 +355 +237 +50 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +33 +203 +355 +237 +33 +-169 +-305 +-186 +33 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +33 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-169 +33 +220 +355 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +33 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-186 +-372 +-491 +-338 +-101 +101 +288 +406 +271 +50 +-152 +-338 +-474 +-305 +-67 +135 +305 +440 +305 +84 +-135 +-322 +-440 +-288 +-50 +152 +322 +457 +305 +84 +-135 +-305 +-440 +-288 +-50 +152 +322 +457 +322 +101 +-118 +-305 +-440 +-271 +-50 +169 +338 +474 +338 +135 +-67 +-237 +-118 +84 +271 +406 +288 +84 +-118 +-271 +-152 +50 +237 +389 +271 +67 +-135 +-288 +-152 +33 +220 +372 +254 +50 +-135 +-288 +-169 +33 +220 +355 +237 +33 +-152 +-305 +-169 +33 +220 +355 +237 +33 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +33 +203 +355 +237 +33 +-152 +-305 +-169 +33 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +33 +203 +355 +254 +50 +-152 +-288 +-152 +50 +237 +372 +254 +50 +-135 +-288 +-169 +50 +237 +372 +271 +67 +-118 +-271 +-135 +67 +254 +389 +288 +84 +-118 +-271 +-135 +67 +254 +389 +271 +67 +-135 +-271 +-152 +50 +237 +389 +271 +67 +-118 +-271 +-152 +50 +237 +389 +271 +67 +-135 +-271 +-152 +50 +254 +389 +271 +67 +-135 +-288 +-152 +50 +237 +372 +254 +50 +-135 +-288 +-152 +50 +237 +372 +254 +50 +-152 +-288 +-169 +33 +220 +372 +254 +50 +-152 +-288 +-169 +33 +220 +372 +254 +50 +-152 +-305 +-169 +33 +220 +355 +237 +50 +-152 +-305 +-169 +33 +220 +355 +237 +50 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-203 +0 +186 +322 +203 +16 +-186 +-338 +-220 +-16 +169 +305 +203 +0 +-203 +-355 +-237 +-33 +152 +305 +186 +-16 +-220 +-372 +-237 +-33 +152 +305 +186 +-16 +-203 +-355 +-237 +-33 +169 +305 +186 +0 +-203 +-338 +-220 +-16 +169 +305 +186 +0 +-203 +-355 +-220 +-16 +169 +305 +203 +0 +-186 +-338 +-203 +0 +186 +322 +203 +16 +-186 +-338 +-203 +0 +186 +322 +203 +16 +-186 +-338 +-203 +0 +186 +322 +220 +16 +-169 +-322 +-203 +16 +203 +338 +220 +16 +-169 +-322 +-186 +16 +203 +338 +220 +33 +-169 +-322 +-203 +16 +203 +338 +220 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +33 +203 +355 +237 +33 +-152 +-305 +-169 +33 +220 +372 +491 +322 +101 +-135 +-322 +-457 +-305 +-67 +135 +305 +440 +305 +84 +-135 +-305 +-440 +-271 +-33 +169 +338 +474 +338 +118 +-84 +-271 +-406 +-254 +-16 +186 +355 +491 +338 +118 +-84 +-271 +-406 +-237 +-16 +186 +372 +491 +355 +135 +-67 +-254 +-389 +-237 +0 +220 +372 +288 +101 +-84 +-237 +-101 +101 +305 +440 +322 +118 +-67 +-237 +-101 +101 +271 +423 +305 +84 +-101 +-271 +-152 +50 +237 +372 +254 +33 +-169 +-322 +-203 +0 +186 +322 +203 +0 +-203 +-338 +-220 +-16 +169 +305 +203 +0 +-203 +-355 +-220 +-16 +169 +305 +203 +0 +-203 +-355 +-220 +-16 +169 +305 +186 +0 +-203 +-355 +-220 +-16 +169 +305 +203 +0 +-203 +-338 +-220 +-16 +169 +322 +203 +16 +-186 +-338 +-220 +-16 +169 +322 +203 +0 +-186 +-338 +-203 +0 +186 +322 +203 +16 +-186 +-322 +-203 +0 +186 +338 +220 +16 +-169 +-322 +-203 +16 +186 +338 +220 +16 +-186 +-322 +-203 +0 +203 +338 +220 +33 +-169 +-322 +-186 +16 +203 +338 +220 +33 +-169 +-305 +-186 +16 +203 +338 +220 +33 +-169 +-322 +-203 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-169 +33 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-169 +33 +220 +355 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-288 +-169 +33 +237 +372 +271 +67 +-135 +-288 +-152 +50 +237 +372 +254 +50 +-152 +-305 +-169 +16 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-203 +16 +203 +338 +220 +33 +-169 +-322 +-203 +0 +186 +338 +220 +16 +-169 +-322 +-203 +16 +203 +338 +220 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +220 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-203 +16 +203 +338 +237 +33 +-169 +-322 +-203 +16 +203 +338 +220 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +33 +203 +355 +237 +33 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-169 +-305 +-169 +33 +220 +355 +254 +50 +-152 +-288 +-169 +33 +220 +372 +254 +50 +-135 +-271 +-152 +50 +237 +389 +491 +338 +101 +-118 +-305 +-440 +-288 +-67 +152 +322 +457 +322 +101 +-118 +-288 +-423 +-271 +-33 +186 +355 +474 +338 +118 +-101 +-288 +-423 +-271 +-50 +152 +322 +440 +305 +67 +-152 +-322 +-457 +-305 +-84 +135 +305 +423 +288 +50 +-152 +-338 +-457 +-305 +-67 +135 +305 +203 +16 +-169 +-305 +-186 +33 +220 +372 +254 +50 +-135 +-288 +-169 +33 +220 +372 +254 +50 +-152 +-305 +-169 +33 +220 +355 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-169 +33 +203 +355 +237 +33 +-169 +-322 +-203 +16 +203 +338 +220 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +33 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +33 +203 +355 +254 +50 +-152 +-305 +-169 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-338 +-474 +-322 +-84 +118 +288 +406 +271 +50 +-169 +-338 +-474 +-305 +-84 +135 +305 +440 +305 +67 +-135 +-322 +-457 +-288 +-67 +152 +322 +440 +305 +84 +-135 +-305 +-440 +-288 +-50 +152 +322 +457 +305 +84 +-118 +-305 +-423 +-271 +-50 +169 +338 +457 +322 +101 +-101 +-237 +-118 +67 +254 +389 +271 +67 +-118 +-271 +-152 +50 +237 +389 +271 +67 +-135 +-271 +-152 +50 +237 +372 +254 +50 +-135 +-288 +-169 +33 +220 +372 +254 +33 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-169 +-305 +-169 +16 +203 +355 +457 +305 +67 +-152 +-338 +-474 +-322 +-101 +101 +288 +406 +271 +50 +-169 +-338 +-474 +-322 +-84 +118 +305 +423 +288 +67 +-152 +-338 +-457 +-305 +-67 +135 +305 +440 +305 +67 +-135 +-322 +-440 +-288 +-50 +152 +322 +457 +305 +84 +-135 +-305 +-440 +-271 +-33 +169 +338 +237 +50 +-135 +-288 +-152 +50 +254 +389 +288 +84 +-118 +-254 +-135 +67 +254 +389 +271 +67 +-118 +-271 +-135 +67 +254 +389 +271 +67 +-135 +-288 +-152 +50 +237 +372 +254 +50 +-135 +-288 +-169 +33 +220 +372 +254 +50 +-152 +-305 +-169 +33 +220 +372 +254 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +33 +203 +355 +237 +33 +-152 +-305 +-169 +16 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +33 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +33 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +33 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +33 +220 +355 +237 +33 +-152 +-305 +-186 +33 +220 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +338 +220 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-169 +33 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +33 +203 +355 +237 +33 +-169 +-322 +-203 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +33 +220 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-203 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +220 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-169 +33 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-152 +-305 +-169 +33 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +33 +203 +355 +237 +33 +-169 +-305 +-169 +33 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +33 +220 +372 +474 +305 +67 +-152 +-338 +-474 +-338 +-101 +101 +271 +406 +271 +50 +-169 +-355 +-474 +-322 +-84 +118 +305 +423 +288 +67 +-135 +-322 +-457 +-305 +-84 +135 +305 +423 +288 +67 +-135 +-322 +-457 +-288 +-67 +135 +322 +440 +305 +84 +-135 +-305 +-440 +-288 +-50 +169 +322 +237 +50 +-135 +-271 +-152 +67 +254 +406 +288 +84 +-101 +-254 +-135 +67 +254 +406 +288 +84 +-118 +-271 +-135 +67 +254 +389 +271 +67 +-135 +-288 +-152 +33 +220 +372 +254 +50 +-152 +-288 +-169 +33 +220 +372 +254 +50 +-152 +-305 +-169 +33 +203 +355 +254 +33 +-186 +-355 +-491 +-338 +-101 +101 +288 +423 +288 +67 +-152 +-322 +-457 +-305 +-67 +135 +305 +440 +305 +84 +-135 +-305 +-440 +-271 +-50 +152 +322 +457 +305 +84 +-118 +-305 +-440 +-271 +-50 +152 +338 +457 +322 +101 +-118 +-305 +-440 +-271 +-50 +169 +338 +474 +338 +101 +-101 +-288 +-423 +-271 +-50 +152 +338 +457 +322 +101 +-118 +-288 +-423 +-271 +-33 +169 +338 +474 +322 +101 +-118 +-305 +-423 +-271 +-50 +169 +338 +474 +322 +101 +-118 +-305 +-440 +-271 +-50 +169 +338 +457 +322 +101 +-118 +-288 +-423 +-271 +-50 +169 +338 +474 +338 +135 +-67 +-237 +-118 +84 +271 +406 +288 +67 +-118 +-271 +-152 +50 +237 +372 +271 +50 +-135 +-288 +-169 +33 +220 +372 +254 +50 +-135 +-288 +-169 +33 +220 +355 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +33 +203 +355 +237 +33 +-152 +-338 +-474 +-322 +-84 +118 +288 +423 +288 +67 +-152 +-338 +-457 +-305 +-67 +135 +305 +440 +305 +67 +-135 +-322 +-457 +-288 +-67 +152 +322 +457 +305 +84 +-135 +-305 +-457 +-288 +-67 +152 +322 +457 +305 +84 +-118 +-305 +-440 +-271 +-50 +169 +322 +457 +305 +101 +-101 +-254 +-135 +67 +254 +389 +271 +67 +-135 +-271 +-152 +50 +237 +372 +271 +50 +-135 +-288 +-169 +33 +237 +372 +254 +50 +-135 +-288 +-169 +33 +220 +372 +254 +33 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-169 +-305 +-169 +16 +203 +355 +457 +305 +67 +-152 +-355 +-474 +-338 +-101 +101 +271 +406 +271 +50 +-169 +-338 +-474 +-322 +-84 +118 +305 +423 +288 +67 +-152 +-338 +-457 +-305 +-67 +135 +305 +440 +305 +67 +-135 +-322 +-440 +-288 +-67 +152 +322 +457 +305 +84 +-135 +-305 +-440 +-271 +-50 +152 +322 +457 +305 +84 +-135 +-305 +-440 +-288 +-50 +152 +338 +457 +322 +101 +-118 +-305 +-423 +-271 +-50 +169 +338 +474 +322 +101 +-118 +-288 +-423 +-271 +-50 +169 +338 +474 +322 +101 +-118 +-305 +-423 +-271 +-33 +169 +338 +474 +322 +101 +-118 +-305 +-423 +-254 +-16 +186 +338 +254 +50 +-135 +-271 +-135 +67 +271 +406 +305 +101 +-101 +-237 +-118 +84 +271 +406 +288 +84 +-101 +-254 +-118 +84 +271 +406 +305 +101 +-101 +-237 +-118 +84 +271 +406 +288 +84 +-118 +-271 +-135 +50 +237 +372 +271 +50 +-135 +-288 +-169 +33 +220 +372 +474 +322 +67 +-152 +-338 +-491 +-338 +-101 +101 +271 +389 +254 +33 +-186 +-372 +-491 +-338 +-101 +101 +271 +406 +271 +50 +-152 +-338 +-474 +-322 +-84 +118 +288 +406 +271 +50 +-152 +-338 +-457 +-305 +-67 +135 +305 +440 +305 +67 +-135 +-322 +-457 +-288 +-50 +152 +322 +220 +33 +-152 +-288 +-152 +50 +254 +389 +271 +84 +-118 +-254 +-135 +67 +254 +406 +288 +84 +-118 +-271 +-135 +67 +254 +389 +271 +67 +-135 +-288 +-152 +50 +237 +372 +271 +50 +-135 +-288 +-169 +33 +237 +372 +254 +50 +-135 +-288 +-169 +33 +220 +372 +254 +50 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +50 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-338 +-474 +-305 +-84 +118 +288 +406 +271 +67 +-152 +-338 +-457 +-305 +-67 +135 +305 +440 +305 +84 +-135 +-305 +-440 +-288 +-50 +152 +338 +457 +322 +101 +-118 +-288 +-423 +-254 +-33 +186 +355 +491 +355 +135 +-84 +-254 +-389 +-237 +0 +203 +372 +491 +355 +135 +-84 +-271 +-406 +-254 +-33 +169 +338 +457 +322 +84 +-135 +-305 +-440 +-288 +-67 +152 +322 +440 +305 +84 +-135 +-322 +-457 +-288 +-67 +152 +322 +440 +305 +67 +-135 +-322 +-457 +-288 +-67 +135 +305 +440 +305 +84 +-135 +-305 +-440 +-288 +-67 +152 +322 +440 +305 +84 +-101 +-271 +-135 +67 +237 +389 +271 +67 +-135 +-288 +-169 +33 +220 +372 +254 +50 +-135 +-288 +-169 +33 +220 +372 +254 +50 +-152 +-288 +-169 +33 +220 +355 +237 +33 +-169 +-305 +-186 +33 +203 +355 +237 +33 +-152 +-305 +-186 +33 +203 +355 +237 +33 +-169 +-305 +-169 +33 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +33 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +33 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +338 +220 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-152 +-338 +-474 +-305 +-84 +118 +288 +406 +271 +50 +-169 +-338 +-474 +-305 +-84 +135 +305 +440 +288 +67 +-135 +-322 +-457 +-288 +-67 +152 +322 +440 +305 +84 +-135 +-322 +-457 +-288 +-67 +152 +322 +440 +305 +84 +-118 +-305 +-440 +-271 +-50 +152 +322 +457 +322 +101 +-101 +-254 +-135 +67 +254 +389 +271 +67 +-118 +-271 +-152 +50 +237 +389 +271 +67 +-135 +-271 +-152 +50 +237 +372 +254 +50 +-135 +-288 +-169 +33 +220 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-169 +33 +220 +355 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +33 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-186 +-355 +-491 +-338 +-101 +101 +288 +406 +288 +50 +-152 +-338 +-457 +-305 +-67 +152 +322 +440 +305 +84 +-135 +-305 +-440 +-271 +-50 +152 +322 +457 +305 +84 +-135 +-305 +-440 +-271 +-50 +152 +338 +457 +322 +101 +-118 +-305 +-440 +-271 +-50 +169 +338 +457 +338 +101 +-118 +-288 +-440 +-271 +-50 +152 +322 +457 +322 +84 +-118 +-305 +-440 +-271 +-50 +169 +338 +457 +322 +101 +-118 +-305 +-423 +-271 +-50 +169 +338 +474 +322 +101 +-118 +-305 +-440 +-271 +-50 +169 +338 +457 +322 +101 +-118 +-288 +-423 +-271 +-50 +169 +338 +474 +338 +135 +-67 +-237 +-118 +84 +271 +406 +288 +84 +-118 +-271 +-152 +50 +237 +372 +271 +67 +-135 +-288 +-169 +33 +220 +372 +254 +50 +-135 +-288 +-169 +33 +220 +355 +237 +33 +-152 +-305 +-186 +33 +203 +355 +237 +33 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-152 +-288 +-169 +33 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +33 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +33 +203 +355 +237 +33 +-152 +-305 +-169 +33 +220 +372 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +33 +203 +355 +237 +33 +-152 +-305 +-186 +33 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +220 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +220 +33 +-169 +-322 +-203 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-169 +33 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +355 +254 +50 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +33 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-169 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +33 +203 +355 +237 +33 +-169 +-305 +-169 +33 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-203 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +33 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +50 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +33 +203 +355 +237 +33 +-152 +-305 +-169 +33 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +33 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +33 +220 +372 +474 +305 +67 +-152 +-338 +-491 +-338 +-101 +101 +271 +406 +271 +33 +-169 +-355 +-474 +-322 +-101 +118 +288 +406 +288 +67 +-152 +-338 +-457 +-305 +-84 +135 +305 +423 +288 +67 +-135 +-322 +-457 +-288 +-67 +152 +322 +457 +305 +84 +-135 +-305 +-440 +-288 +-50 +169 +338 +237 +50 +-135 +-288 +-152 +50 +254 +389 +288 +84 +-118 +-271 +-135 +67 +254 +389 +288 +84 +-118 +-271 +-135 +50 +254 +389 +271 +67 +-135 +-288 +-152 +50 +237 +372 +254 +50 +-152 +-288 +-169 +33 +220 +372 +254 +50 +-152 +-305 +-169 +33 +220 +372 +254 +50 +-152 +-305 +-186 +33 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +33 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-169 +33 +220 +355 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-152 +-305 +-169 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-169 +33 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-203 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +220 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +33 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +50 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-169 +16 +203 +355 +457 +305 +50 +-169 +-355 +-491 +-338 +-101 +101 +271 +406 +271 +50 +-169 +-355 +-474 +-322 +-101 +118 +288 +423 +288 +67 +-152 +-338 +-457 +-305 +-67 +135 +305 +440 +305 +67 +-135 +-322 +-440 +-288 +-67 +152 +322 +457 +305 +84 +-118 +-305 +-423 +-271 +-33 +186 +338 +237 +50 +-135 +-271 +-135 +67 +254 +406 +288 +84 +-118 +-254 +-135 +67 +254 +406 +288 +84 +-118 +-271 +-135 +67 +254 +389 +271 +67 +-135 +-288 +-169 +33 +220 +372 +254 +50 +-152 +-305 +-169 +33 +220 +372 +254 +50 +-152 +-305 +-169 +33 +220 +372 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-169 +33 +220 +355 +254 +50 +-152 +-288 +-169 +33 +237 +372 +271 +84 +-118 +-271 +-135 +67 +254 +406 +288 +84 +-118 +-271 +-135 +50 +237 +389 +271 +67 +-135 +-288 +-169 +33 +220 +355 +254 +50 +-152 +-305 +-186 +16 +203 +338 +220 +16 +-169 +-322 +-203 +0 +186 +338 +220 +16 +-169 +-322 +-203 +0 +186 +322 +220 +16 +-169 +-322 +-203 +0 +186 +322 +203 +16 +-186 +-338 +-203 +0 +186 +322 +220 +16 +-169 +-322 +-203 +16 +203 +338 +220 +33 +-169 +-322 +-186 +16 +203 +338 +220 +16 +-169 +-322 +-203 +16 +186 +338 +220 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +33 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +33 +220 +355 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +33 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +254 +50 +-135 +-288 +-152 +50 +237 +372 +271 +67 +-135 +-288 +-169 +33 +203 +355 +220 +33 +-169 +-322 +-203 +16 +203 +338 +220 +33 +-169 +-322 +-203 +16 +186 +338 +220 +33 +-169 +-338 +-491 +-338 +-101 +101 +271 +406 +271 +50 +-169 +-338 +-474 +-322 +-84 +118 +305 +423 +288 +67 +-152 +-322 +-457 +-305 +-67 +135 +305 +440 +305 +84 +-135 +-322 +-457 +-288 +-67 +152 +322 +440 +305 +84 +-135 +-305 +-440 +-271 +-50 +152 +322 +457 +322 +101 +-84 +-254 +-118 +67 +254 +389 +271 +67 +-135 +-271 +-152 +50 +237 +372 +254 +50 +-135 +-288 +-169 +33 +220 +372 +254 +50 +-152 +-288 +-169 +33 +220 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-152 +-305 +-186 +33 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-169 +33 +220 +355 +254 +50 +-152 +-305 +-169 +50 +237 +372 +271 +67 +-135 +-271 +-152 +50 +237 +389 +271 +67 +-118 +-254 +-135 +67 +271 +406 +288 +84 +-118 +-271 +-135 +67 +254 +389 +271 +67 +-135 +-288 +-169 +33 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +220 +33 +-169 +-322 +-203 +0 +186 +338 +220 +16 +-169 +-338 +-203 +0 +186 +322 +203 +16 +-186 +-338 +-203 +0 +186 +322 +203 +16 +-186 +-338 +-203 +0 +186 +322 +220 +16 +-169 +-322 +-203 +0 +186 +322 +203 +16 +-186 +-338 +-203 +0 +186 +338 +220 +16 +-169 +-322 +-203 +16 +186 +338 +220 +33 +-169 +-322 +-186 +16 +186 +338 +220 +16 +-169 +-322 +-203 +0 +186 +338 +220 +16 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +220 +33 +-169 +-322 +-203 +16 +203 +338 +220 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +33 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +33 +220 +355 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +33 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +355 +254 +33 +-186 +-355 +-491 +-338 +-101 +101 +288 +423 +288 +67 +-152 +-338 +-457 +-305 +-67 +135 +305 +440 +305 +84 +-135 +-322 +-440 +-288 +-67 +152 +322 +440 +305 +84 +-135 +-305 +-440 +-288 +-67 +152 +322 +457 +305 +84 +-118 +-305 +-440 +-271 +-50 +152 +322 +457 +338 +118 +-67 +-237 +-118 +84 +271 +406 +288 +84 +-118 +-271 +-152 +50 +237 +372 +271 +67 +-135 +-288 +-169 +33 +220 +372 +254 +50 +-135 +-288 +-169 +33 +220 +372 +237 +33 +-152 +-305 +-169 +33 +220 +355 +254 +50 +-152 +-288 +-169 +33 +220 +372 +254 +50 +-135 +-288 +-169 +33 +220 +355 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-169 +33 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +33 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +33 +220 +372 +254 +50 +-152 +-305 +-169 +33 +220 +372 +254 +50 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-169 +-322 +-203 +0 +186 +338 +220 +16 +-169 +-322 +-203 +0 +186 +338 +220 +16 +-169 +-322 +-203 +16 +203 +338 +220 +33 +-169 +-322 +-203 +0 +203 +338 +237 +33 +-169 +-322 +-203 +0 +186 +338 +220 +16 +-169 +-322 +-203 +16 +203 +338 +220 +33 +-169 +-322 +-203 +16 +203 +338 +237 +33 +-169 +-322 +-203 +16 +203 +338 +220 +33 +-169 +-322 +-203 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +33 +203 +355 +237 +33 +-169 +-305 +-169 +33 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +33 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +33 +203 +355 +237 +33 +-152 +-305 +-186 +33 +220 +372 +474 +322 +67 +-152 +-338 +-474 +-322 +-101 +101 +271 +406 +271 +33 +-169 +-355 +-474 +-322 +-101 +118 +288 +423 +288 +50 +-152 +-338 +-457 +-305 +-84 +135 +305 +440 +305 +67 +-135 +-322 +-457 +-288 +-67 +152 +322 +457 +322 +84 +-135 +-305 +-440 +-288 +-50 +169 +338 +237 +50 +-135 +-271 +-152 +50 +254 +406 +288 +84 +-101 +-254 +-135 +67 +271 +406 +288 +84 +-118 +-271 +-135 +67 +254 +389 +271 +67 +-135 +-271 +-152 +50 +237 +372 +254 +50 +-135 +-288 +-169 +33 +220 +372 +254 +50 +-152 +-305 +-169 +33 +220 +372 +254 +50 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +33 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-169 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +33 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +33 +203 +355 +237 +33 +-152 +-305 +-186 +33 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +457 +305 +67 +-152 +-355 +-474 +-338 +-101 +101 +271 +406 +271 +50 +-169 +-355 +-474 +-322 +-101 +118 +288 +423 +288 +67 +-152 +-338 +-457 +-305 +-84 +118 +305 +440 +305 +67 +-135 +-322 +-457 +-288 +-67 +135 +322 +440 +305 +84 +-135 +-305 +-440 +-271 +-33 +169 +338 +237 +50 +-135 +-288 +-152 +67 +254 +406 +288 +84 +-101 +-254 +-135 +67 +254 +406 +288 +84 +-118 +-271 +-152 +50 +237 +389 +271 +67 +-135 +-288 +-169 +33 +237 +372 +254 +50 +-135 +-288 +-169 +33 +220 +372 +254 +50 +-152 +-305 +-169 +33 +220 +372 +254 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +33 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +33 +203 +355 +237 +50 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +50 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-203 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +220 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-203 +16 +203 +338 +237 +33 +-169 +-305 +-186 +33 +203 +355 +237 +33 +-152 +-305 +-169 +33 +220 +355 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +33 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +338 +220 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-152 +-338 +-474 +-322 +-84 +118 +288 +406 +271 +50 +-152 +-338 +-474 +-305 +-84 +135 +305 +440 +305 +67 +-135 +-322 +-457 +-288 +-67 +152 +322 +440 +305 +84 +-135 +-322 +-457 +-288 +-67 +152 +322 +457 +305 +84 +-118 +-305 +-440 +-271 +-50 +169 +338 +457 +322 +101 +-84 +-237 +-118 +67 +254 +389 +271 +67 +-135 +-271 +-152 +50 +237 +372 +271 +67 +-135 +-288 +-169 +33 +220 +372 +254 +50 +-152 +-288 +-169 +33 +220 +372 +254 +50 +-152 +-305 +-169 +33 +220 +355 +237 +33 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-152 +-305 +-169 +33 +220 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +33 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +33 +203 +355 +237 +33 +-152 +-305 +-186 +33 +220 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-169 +33 +220 +355 +254 +50 +-135 +-271 +-152 +50 +237 +389 +271 +67 +-135 +-271 +-135 +67 +254 +389 +271 +67 +-135 +-288 +-152 +33 +220 +355 +237 +33 +-152 +-305 +-186 +16 +203 +338 +220 +16 +-169 +-322 +-203 +16 +203 +338 +220 +16 +-169 +-322 +-203 +0 +186 +338 +220 +16 +-186 +-322 +-203 +16 +186 +338 +220 +16 +-186 +-338 +-203 +0 +186 +338 +220 +16 +-169 +-322 +-203 +16 +203 +338 +220 +33 +-169 +-322 +-186 +16 +203 +338 +220 +33 +-169 +-322 +-203 +16 +186 +338 +220 +33 +-169 +-322 +-203 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-203 +16 +203 +338 +220 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +16 +-186 +-372 +-491 +-338 +-101 +101 +288 +406 +271 +50 +-152 +-338 +-474 +-305 +-84 +135 +305 +440 +305 +67 +-135 +-322 +-440 +-288 +-67 +152 +322 +440 +305 +84 +-135 +-322 +-440 +-288 +-67 +152 +322 +457 +322 +101 +-118 +-305 +-440 +-271 +-50 +169 +338 +474 +338 +135 +-67 +-237 +-118 +84 +271 +406 +288 +84 +-118 +-271 +-152 +50 +237 +372 +271 +67 +-135 +-288 +-152 +50 +237 +372 +254 +50 +-135 +-288 +-169 +33 +220 +355 +237 +50 +-152 +-305 +-169 +33 +220 +355 +254 +50 +-152 +-305 +-169 +33 +220 +355 +237 +50 +-135 +-288 +-169 +33 +220 +355 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +33 +203 +355 +237 +33 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-169 +33 +220 +372 +254 +50 +-135 +-288 +-152 +50 +237 +389 +271 +67 +-135 +-271 +-152 +50 +254 +389 +288 +84 +-101 +-254 +-135 +84 +271 +406 +288 +84 +-118 +-271 +-135 +67 +237 +372 +254 +50 +-152 +-305 +-186 +16 +203 +338 +220 +16 +-169 +-322 +-203 +0 +186 +322 +220 +16 +-186 +-338 +-203 +0 +186 +322 +220 +16 +-186 +-338 +-220 +-16 +186 +322 +203 +16 +-186 +-338 +-203 +0 +186 +322 +220 +16 +-186 +-338 +-203 +0 +186 +338 +220 +16 +-186 +-338 +-203 +0 +186 +322 +220 +16 +-169 +-322 +-203 +0 +203 +338 +220 +33 +-169 +-322 +-203 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-203 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +220 +33 +-169 +-322 +-203 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +220 +33 +-169 +-322 +-186 +16 +203 +338 +220 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +33 +203 +355 +237 +33 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +33 +203 +355 +237 +33 +-169 +-305 +-186 +16 +220 +372 +474 +305 +67 +-152 +-338 +-474 +-322 +-101 +101 +271 +406 +271 +50 +-169 +-355 +-474 +-322 +-84 +118 +305 +423 +288 +67 +-152 +-338 +-457 +-305 +-67 +135 +305 +440 +305 +67 +-135 +-322 +-440 +-288 +-67 +152 +322 +457 +305 +84 +-135 +-305 +-440 +-288 +-50 +169 +322 +237 +50 +-135 +-288 +-152 +50 +254 +389 +288 +84 +-118 +-254 +-135 +67 +254 +406 +288 +84 +-118 +-271 +-135 +67 +254 +406 +288 +84 +-101 +-254 +-135 +67 +254 +406 +288 +84 +-101 +-254 +-118 +84 +271 +423 +305 +101 +-84 +-237 +-118 +84 +271 +423 +305 +101 +-101 +-254 +-135 +67 +254 +406 +288 +84 +-118 +-271 +-152 +50 +237 +372 +254 +50 +-152 +-305 +-186 +16 +203 +338 +220 +16 +-169 +-338 +-203 +0 +186 +322 +203 +0 +-186 +-338 +-220 +-16 +169 +322 +203 +0 +-186 +-338 +-220 +-16 +169 +305 +203 +0 +-186 +-338 +-220 +-16 +169 +322 +203 +0 +-203 +-338 +-220 +-16 +169 +322 +203 +0 +-186 +-338 +-203 +0 +186 +322 +203 +16 +-186 +-322 +-203 +0 +186 +322 +220 +16 +-186 +-338 +-203 +0 +186 +338 +220 +16 +-169 +-322 +-203 +16 +203 +338 +220 +16 +-169 +-322 +-186 +16 +203 +338 +220 +33 +-169 +-322 +-203 +16 +203 +338 +220 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +33 +220 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +33 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-152 +-305 +-169 +33 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-169 +16 +203 +338 +457 +305 +67 +-169 +-355 +-491 +-338 +-101 +101 +271 +406 +271 +50 +-169 +-338 +-474 +-322 +-84 +118 +305 +423 +305 +67 +-135 +-322 +-457 +-305 +-67 +135 +305 +440 +305 +67 +-135 +-322 +-440 +-288 +-67 +152 +322 +457 +305 +84 +-135 +-305 +-440 +-271 +-33 +169 +322 +237 +50 +-135 +-288 +-152 +50 +254 +389 +288 +84 +-118 +-254 +-135 +67 +254 +406 +288 +84 +-118 +-271 +-135 +67 +254 +389 +271 +67 +-135 +-288 +-152 +33 +237 +372 +254 +50 +-135 +-288 +-169 +33 +220 +372 +254 +50 +-152 +-305 +-169 +33 +220 +372 +474 +322 +67 +-152 +-338 +-474 +-322 +-101 +101 +288 +406 +271 +50 +-169 +-355 +-474 +-322 +-84 +118 +305 +423 +288 +67 +-152 +-322 +-457 +-305 +-67 +135 +305 +440 +305 +67 +-135 +-322 +-457 +-305 +-67 +135 +322 +440 +305 +84 +-135 +-305 +-440 +-288 +-50 +169 +322 +237 +33 +-135 +-288 +-152 +50 +254 +389 +288 +84 +-118 +-254 +-135 +67 +254 +406 +271 +84 +-118 +-271 +-135 +50 +254 +389 +271 +67 +-135 +-288 +-152 +50 +220 +372 +254 +50 +-135 +-288 +-169 +33 +220 +372 +254 +50 +-152 +-305 +-169 +33 +220 +372 +254 +50 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +33 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +33 +220 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +33 +220 +355 +237 +33 +-152 +-305 +-169 +33 +220 +355 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +33 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-169 +33 +220 +355 +237 +50 +-135 +-288 +-169 +33 +220 +372 +254 +50 +-135 +-288 +-152 +50 +237 +389 +271 +84 +-118 +-254 +-135 +67 +254 +389 +271 +67 +-118 +-271 +-152 +50 +237 +372 +254 +33 +-152 +-305 +-186 +16 +203 +338 +220 +16 +-169 +-322 +-203 +0 +186 +338 +220 +16 +-186 +-322 +-203 +0 +186 +322 +203 +16 +-186 +-338 +-203 +0 +186 +322 +203 +16 +-186 +-338 +-203 +0 +186 +338 +220 +16 +-169 +-322 +-203 +0 +186 +338 +220 +16 +-186 +-338 +-203 +0 +186 +338 +220 +16 +-169 +-322 +-203 +16 +203 +338 +220 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +338 +220 +33 +-169 +-322 +-186 +16 +203 +338 +220 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +33 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-152 +-305 +-169 +33 +220 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-305 +-186 +33 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +33 +203 +355 +237 +33 +-152 +-305 +-186 +33 +220 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +16 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-169 +33 +203 +355 +254 +33 +-169 +-355 +-474 +-322 +-84 +135 +305 +440 +305 +84 +-118 +-288 +-423 +-254 +-33 +186 +355 +491 +355 +135 +-84 +-271 +-406 +-237 +-16 +186 +355 +474 +322 +101 +-118 +-305 +-440 +-288 +-67 +152 +305 +440 +305 +67 +-135 +-322 +-457 +-305 +-67 +135 +305 +440 +305 +101 +-101 +-271 +-135 +50 +237 +372 +254 +50 +-152 +-305 +-169 +33 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +220 +16 +-169 +-322 +-203 +16 +203 +338 +220 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-338 +-474 +-322 +-101 +101 +288 +406 +271 +50 +-152 +-338 +-474 +-305 +-84 +135 +305 +440 +305 +67 +-135 +-322 +-457 +-288 +-67 +152 +322 +440 +305 +84 +-135 +-305 +-457 +-288 +-50 +152 +322 +457 +305 +84 +-118 +-305 +-440 +-271 +-50 +152 +322 +457 +322 +101 +-101 +-288 +-423 +-271 +-50 +169 +338 +457 +322 +101 +-118 +-305 +-440 +-271 +-50 +169 +338 +457 +322 +101 +-118 +-305 +-440 +-271 +-50 +169 +338 +474 +322 +101 +-118 +-305 +-440 +-271 +-50 +152 +322 +457 +322 +101 +-118 +-305 +-423 +-271 +-50 +169 +338 +457 +322 +101 +-101 +-254 +-135 +67 +254 +389 +271 +67 +-118 +-271 +-152 +50 +237 +372 +271 +67 +-135 +-288 +-152 +50 +237 +372 +254 +50 +-135 +-288 +-152 +33 +220 +372 +254 +50 +-152 +-305 +-169 +33 +220 +355 +237 +33 +-152 +-305 +-169 +33 +220 +355 +237 +33 +-152 +-305 +-169 +16 +203 +355 +457 +305 +67 +-169 +-355 +-474 +-322 +-101 +101 +288 +406 +271 +50 +-169 +-338 +-474 +-322 +-84 +118 +305 +423 +305 +67 +-135 +-322 +-457 +-305 +-67 +135 +322 +440 +305 +84 +-135 +-305 +-440 +-288 +-50 +152 +322 +457 +322 +101 +-118 +-305 +-423 +-271 +-33 +186 +338 +237 +50 +-135 +-271 +-135 +67 +271 +406 +305 +101 +-84 +-237 +-118 +84 +271 +406 +288 +84 +-118 +-271 +-135 +67 +254 +389 +271 +67 +-135 +-288 +-169 +33 +220 +372 +254 +50 +-152 +-305 +-169 +33 +220 +355 +254 +50 +-152 +-305 +-169 +33 +220 +372 +474 +305 +67 +-152 +-338 +-491 +-338 +-101 +101 +271 +406 +271 +33 +-169 +-355 +-491 +-322 +-101 +101 +288 +406 +271 +50 +-152 +-338 +-474 +-305 +-84 +118 +305 +423 +288 +67 +-152 +-322 +-457 +-305 +-67 +135 +322 +440 +305 +67 +-135 +-322 +-457 +-288 +-50 +152 +322 +457 +322 +84 +-135 +-305 +-440 +-288 +-50 +152 +322 +457 +322 +101 +-118 +-305 +-423 +-271 +-50 +169 +338 +457 +322 +101 +-101 +-288 +-423 +-271 +-50 +169 +338 +457 +322 +101 +-118 +-305 +-440 +-271 +-50 +169 +338 +457 +322 +101 +-118 +-305 +-440 +-271 +-33 +169 +338 +237 +50 +-135 +-271 +-135 +67 +254 +406 +288 +84 +-101 +-254 +-135 +67 +271 +406 +288 +84 +-118 +-271 +-135 +50 +254 +389 +271 +67 +-135 +-271 +-152 +50 +237 +372 +271 +67 +-135 +-288 +-152 +33 +237 +372 +254 +50 +-135 +-288 +-169 +33 +220 +372 +254 +33 +-169 +-355 +-491 +-322 +-84 +118 +305 +423 +288 +67 +-152 +-322 +-457 +-305 +-67 +135 +322 +440 +305 +84 +-135 +-305 +-440 +-288 +-50 +152 +322 +457 +305 +84 +-135 +-305 +-440 +-271 +-50 +152 +338 +457 +322 +101 +-118 +-288 +-423 +-271 +-33 +169 +338 +474 +338 +135 +-67 +-237 +-118 +84 +271 +406 +288 +84 +-118 +-271 +-152 +50 +237 +372 +271 +67 +-135 +-288 +-152 +50 +237 +372 +271 +67 +-135 +-288 +-169 +33 +220 +372 +254 +50 +-152 +-305 +-169 +33 +220 +372 +254 +50 +-135 +-288 +-169 +50 +237 +372 +271 +67 +-118 +-271 +-152 +50 +237 +372 +271 +67 +-135 +-271 +-152 +50 +237 +372 +271 +67 +-135 +-288 +-169 +33 +220 +355 +237 +33 +-152 +-305 +-186 +16 +203 +338 +220 +16 +-186 +-338 +-203 +0 +186 +322 +203 +16 +-186 +-338 +-203 +0 +186 +322 +203 +16 +-186 +-338 +-203 +0 +186 +322 +440 +288 +33 +-169 +-372 +-508 +-355 +-118 +84 +271 +389 +254 +33 +-186 +-355 +-491 +-338 +-101 +101 +288 +406 +288 +50 +-152 +-338 +-474 +-322 +-84 +118 +305 +423 +288 +67 +-152 +-322 +-457 +-305 +-67 +135 +322 +440 +305 +67 +-135 +-322 +-440 +-288 +-50 +152 +322 +440 +305 +67 +-135 +-322 +-440 +-288 +-67 +152 +322 +457 +322 +84 +-118 +-305 +-440 +-271 +-50 +152 +338 +457 +322 +101 +-118 +-305 +-440 +-271 +-50 +152 +338 +457 +322 +101 +-118 +-288 +-423 +-271 +-33 +169 +338 +474 +322 +101 +-101 +-288 +-423 +-254 +-16 +203 +355 +271 +84 +-101 +-254 +-101 +101 +305 +440 +338 +135 +-67 +-220 +-84 +101 +288 +423 +305 +101 +-101 +-254 +-135 +67 +254 +389 +271 +67 +-135 +-288 +-169 +33 +220 +355 +254 +50 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-203 +16 +203 +338 +220 +16 +-169 +-322 +-203 +16 +203 +338 +220 +33 +-169 +-322 +-203 +16 +203 +338 +237 +33 +-169 +-322 +-203 +0 +203 +338 +220 +33 +-169 +-322 +-203 +16 +203 +338 +220 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-152 +-305 +-186 +16 +203 +338 +220 +33 +-169 +-305 +-186 +16 +203 +355 +237 +33 +-152 +-305 +-186 +33 +203 +355 +237 +33 +-152 +-305 +-169 +33 +203 +355 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +16 +203 +338 +237 +33 +-169 +-322 +-186 +16 +203 +338 +237 +33 +-169 +-305 +-186 +33 +203 +355 +237 +33 +-169 +-305 +-169 +33 +203 +355 +457 +305 +67 +-169 +-355 +-491 +-338 +-101 +101 +271 +406 +271 +50 +-169 +-355 +-474 +-322 +-84 +118 +305 +423 +288 +67 +-152 +-338 +-457 +-305 +-67 +135 +305 +440 +305 +84 +-135 +-305 +-440 +-288 +-50 +152 +322 +457 +322 +84 +-118 +-305 +-423 +-271 +-33 +169 +338 +237 +50 +-135 +-288 +-152 +67 +254 +406 +288 +84 +-101 +-254 +-135 +67 +254 +406 +288 +84 +-118 +-271 +-135 +67 +254 +389 +271 +67 +-135 +-271 +-152 +50 +237 +372 +271 +50 +-135 +-288 +-152 +33 +237 +372 +254 +50 +-135 +-288 +-169 +33 +220 +372 +254 +50 +-152 +-305 +-186 +33 +203 +355 +237 +33 +-152 +-305 +-169 +33 +220 +355 +237 +33 +-152 +-305 +-169 +33 +220 +355 +254 +50 +-152 +-305 +-169 +33 +220 +372 +254 +50 +-135 +-288 +-152 +50 +237 +389 +271 +84 +-118 +-271 +-152 +50 +237 +389 +271 +67 +-135 +-288 +-169 +33 +220 +355 +237 +33 +-169 +-322 +-203 +16 +203 +338 +220 +16 +-169 +-322 +-203 +0 +186 +338 +220 +16 +-169 +-322 +-203 +0 +186 +322 +203 +0 +-186 +-338 +-203 +0 +186 +322 +220 +16 +-186 +-322 +-203 +0 +186 +338 +220 +33 +-169 +-338 +-491 +-338 +-101 +101 +271 +406 +271 +50 +-169 +-338 +-474 +-322 +-84 +135 +305 +440 +288 +67 +-152 +-322 +-457 +-305 +-67 +135 +305 +440 +305 +67 +-135 +-322 +-457 +-288 +-67 +152 +322 +440 +305 +84 +-135 +-305 +-440 +-271 +-50 +152 +322 +457 +305 +101 +-118 +-288 +-423 +-271 +-50 +152 +322 +457 +305 +84 +-118 +-305 +-440 +-271 +-50 +152 +338 +457 +322 +101 +-118 +-305 +-440 +-271 +-50 +169 +338 +457 +322 +101 +-118 +-305 +-440 +-271 +-50 +152 +322 +457 +322 +101 +-118 +-305 +-423 +-271 +-50 +169 +338 +457 +322 +101 +-84 +-237 +-118 +84 +254 +406 +288 +67 +-118 +-271 +-152 +50 +237 +372 +271 +67 +-135 +-288 +-152 +50 +237 +372 +254 +50 +-135 +-288 +-169 +33 +220 +372 +254 +50 +-152 +-305 +-169 +33 +220 +355 +254 +50 +-152 +-305 +-169 +33 +220 +355 +237 diff --git a/traces/motorola_0437_00072.pm3 b/traces/lf_Motorola_0437_00072.pm3 similarity index 100% rename from traces/motorola_0437_00072.pm3 rename to traces/lf_Motorola_0437_00072.pm3 diff --git a/traces/nexkey_74755342.pm3 b/traces/lf_NEXWATCH_Nexkey_74755342.pm3 similarity index 100% rename from traces/nexkey_74755342.pm3 rename to traces/lf_NEXWATCH_Nexkey_74755342.pm3 diff --git a/traces/quadrakey-521512301.pm3 b/traces/lf_NEXWATCH_Quadrakey-521512301.pm3 similarity index 100% rename from traces/quadrakey-521512301.pm3 rename to traces/lf_NEXWATCH_Quadrakey-521512301.pm3 diff --git a/traces/securakey-64169.pm3 b/traces/lf_NEXWATCH_Securakey-64169.pm3 similarity index 100% rename from traces/securakey-64169.pm3 rename to traces/lf_NEXWATCH_Securakey-64169.pm3 diff --git a/traces/pac-8E4C058E.pm3 b/traces/lf_PAC-8E4C058E.pm3 similarity index 100% rename from traces/pac-8E4C058E.pm3 rename to traces/lf_PAC-8E4C058E.pm3 diff --git a/traces/Paradox-96_40426-APJN08.pm3 b/traces/lf_Paradox-96_40426-APJN08.pm3 similarity index 100% rename from traces/Paradox-96_40426-APJN08.pm3 rename to traces/lf_Paradox-96_40426-APJN08.pm3 diff --git a/traces/modulation-ask-biph-50.pm3 b/traces/lf_Q5_mod-ask-biph-50.pm3 similarity index 100% rename from traces/modulation-ask-biph-50.pm3 rename to traces/lf_Q5_mod-ask-biph-50.pm3 diff --git a/traces/modulation-ask-man-100.pm3 b/traces/lf_Q5_mod-ask-man-100.pm3 similarity index 100% rename from traces/modulation-ask-man-100.pm3 rename to traces/lf_Q5_mod-ask-man-100.pm3 diff --git a/traces/modulation-ask-man-128.pm3 b/traces/lf_Q5_mod-ask-man-128.pm3 similarity index 100% rename from traces/modulation-ask-man-128.pm3 rename to traces/lf_Q5_mod-ask-man-128.pm3 diff --git a/traces/modulation-ask-man-16.pm3 b/traces/lf_Q5_mod-ask-man-16.pm3 similarity index 100% rename from traces/modulation-ask-man-16.pm3 rename to traces/lf_Q5_mod-ask-man-16.pm3 diff --git a/traces/modulation-ask-man-32.pm3 b/traces/lf_Q5_mod-ask-man-32.pm3 similarity index 100% rename from traces/modulation-ask-man-32.pm3 rename to traces/lf_Q5_mod-ask-man-32.pm3 diff --git a/traces/modulation-ask-man-40.pm3 b/traces/lf_Q5_mod-ask-man-40.pm3 similarity index 100% rename from traces/modulation-ask-man-40.pm3 rename to traces/lf_Q5_mod-ask-man-40.pm3 diff --git a/traces/modulation-ask-man-8.pm3 b/traces/lf_Q5_mod-ask-man-8.pm3 similarity index 100% rename from traces/modulation-ask-man-8.pm3 rename to traces/lf_Q5_mod-ask-man-8.pm3 diff --git a/traces/modulation-biphase.pm3 b/traces/lf_Q5_mod-biphase.pm3 similarity index 100% rename from traces/modulation-biphase.pm3 rename to traces/lf_Q5_mod-biphase.pm3 diff --git a/traces/modulation-data.dat b/traces/lf_Q5_mod-data.bin similarity index 100% rename from traces/modulation-data.dat rename to traces/lf_Q5_mod-data.bin diff --git a/traces/modulation-direct-32.pm3 b/traces/lf_Q5_mod-direct-32.pm3 similarity index 100% rename from traces/modulation-direct-32.pm3 rename to traces/lf_Q5_mod-direct-32.pm3 diff --git a/traces/modulation-direct-40.pm3 b/traces/lf_Q5_mod-direct-40.pm3 similarity index 100% rename from traces/modulation-direct-40.pm3 rename to traces/lf_Q5_mod-direct-40.pm3 diff --git a/traces/modulation-direct-50.pm3 b/traces/lf_Q5_mod-direct-50.pm3 similarity index 100% rename from traces/modulation-direct-50.pm3 rename to traces/lf_Q5_mod-direct-50.pm3 diff --git a/traces/modulation-fsk1-50.pm3 b/traces/lf_Q5_mod-fsk1-50.pm3 similarity index 100% rename from traces/modulation-fsk1-50.pm3 rename to traces/lf_Q5_mod-fsk1-50.pm3 diff --git a/traces/modulation-fsk1.pm3 b/traces/lf_Q5_mod-fsk1.pm3 similarity index 100% rename from traces/modulation-fsk1.pm3 rename to traces/lf_Q5_mod-fsk1.pm3 diff --git a/traces/modulation-fsk1a-50.pm3 b/traces/lf_Q5_mod-fsk1a-50.pm3 similarity index 100% rename from traces/modulation-fsk1a-50.pm3 rename to traces/lf_Q5_mod-fsk1a-50.pm3 diff --git a/traces/modulation-fsk2-50.pm3 b/traces/lf_Q5_mod-fsk2-50.pm3 similarity index 100% rename from traces/modulation-fsk2-50.pm3 rename to traces/lf_Q5_mod-fsk2-50.pm3 diff --git a/traces/modulation-fsk2.pm3 b/traces/lf_Q5_mod-fsk2.pm3 similarity index 100% rename from traces/modulation-fsk2.pm3 rename to traces/lf_Q5_mod-fsk2.pm3 diff --git a/traces/modulation-fsk2a-40.pm3 b/traces/lf_Q5_mod-fsk2a-40.pm3 similarity index 100% rename from traces/modulation-fsk2a-40.pm3 rename to traces/lf_Q5_mod-fsk2a-40.pm3 diff --git a/traces/modulation-fsk2a-50.pm3 b/traces/lf_Q5_mod-fsk2a-50.pm3 similarity index 100% rename from traces/modulation-fsk2a-50.pm3 rename to traces/lf_Q5_mod-fsk2a-50.pm3 diff --git a/traces/modulation-manchester.pm3 b/traces/lf_Q5_mod-manchester.pm3 similarity index 100% rename from traces/modulation-manchester.pm3 rename to traces/lf_Q5_mod-manchester.pm3 diff --git a/traces/modulation-nrz.pm3 b/traces/lf_Q5_mod-nrz.pm3 similarity index 100% rename from traces/modulation-nrz.pm3 rename to traces/lf_Q5_mod-nrz.pm3 diff --git a/traces/modulation-psk1-32-4.pm3 b/traces/lf_Q5_mod-psk1-32-4.pm3 similarity index 100% rename from traces/modulation-psk1-32-4.pm3 rename to traces/lf_Q5_mod-psk1-32-4.pm3 diff --git a/traces/modulation-psk1-64-8.pm3 b/traces/lf_Q5_mod-psk1-64-8.pm3 similarity index 100% rename from traces/modulation-psk1-64-8.pm3 rename to traces/lf_Q5_mod-psk1-64-8.pm3 diff --git a/traces/modulation-psk1.pm3 b/traces/lf_Q5_mod-psk1.pm3 similarity index 100% rename from traces/modulation-psk1.pm3 rename to traces/lf_Q5_mod-psk1.pm3 diff --git a/traces/modulation-psk2-32-2.pm3 b/traces/lf_Q5_mod-psk2-32-2.pm3 similarity index 100% rename from traces/modulation-psk2-32-2.pm3 rename to traces/lf_Q5_mod-psk2-32-2.pm3 diff --git a/traces/modulation-psk2.pm3 b/traces/lf_Q5_mod-psk2.pm3 similarity index 100% rename from traces/modulation-psk2.pm3 rename to traces/lf_Q5_mod-psk2.pm3 diff --git a/traces/modulation-psk3-32-8.pm3 b/traces/lf_Q5_mod-psk3-32-8.pm3 similarity index 100% rename from traces/modulation-psk3-32-8.pm3 rename to traces/lf_Q5_mod-psk3-32-8.pm3 diff --git a/traces/modulation-psk3.pm3 b/traces/lf_Q5_mod-psk3.pm3 similarity index 100% rename from traces/modulation-psk3.pm3 rename to traces/lf_Q5_mod-psk3.pm3 diff --git a/traces/TITEST.TXT b/traces/lf_TI_test.pm3 similarity index 71% rename from traces/TITEST.TXT rename to traces/lf_TI_test.pm3 index dacec005f..3407b5262 100644 --- a/traces/TITEST.TXT +++ b/traces/lf_TI_test.pm3 @@ -1,128000 +1,128000 @@ --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 --1 --1 --1 --1 -1 -1 -1 -1 -1 -1 -1 -1 --1 --1 --1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 diff --git a/traces/Transit999-best.pm3 b/traces/lf_Transit999-best.pm3 similarity index 80% rename from traces/Transit999-best.pm3 rename to traces/lf_Transit999-best.pm3 index c6efadcad..756a4a395 100644 --- a/traces/Transit999-best.pm3 +++ b/traces/lf_Transit999-best.pm3 @@ -1,40000 +1,40000 @@ --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --111 --105 --48 -10 -59 -99 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -69 -15 --29 --65 --94 --101 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --42 -5 -45 -77 -103 -123 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -116 -109 -104 -98 -93 -87 -82 -76 -72 -67 -15 --49 --99 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --49 --7 -28 -56 -79 -96 -109 -119 -125 -127 -127 -127 -127 -127 -76 -11 --39 --80 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --110 --104 --100 --111 --106 --34 -24 -72 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -74 -20 --24 --61 --90 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --40 -8 -47 -79 -105 -125 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -117 -111 -105 -99 -93 -88 -82 -77 -72 -67 -15 --50 --101 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --108 --50 -8 -57 -97 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -118 -111 -105 -98 -92 -86 -81 -29 --37 --88 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --110 --104 --47 -11 -59 -99 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -119 -112 -106 -99 -93 -87 -81 -29 --37 --87 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --109 --104 --47 -11 -60 -99 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -68 -14 --30 --66 --95 --102 --128 --128 --128 --128 --128 --128 --128 --128 --128 --98 --41 -7 -47 -79 -105 -125 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -120 -113 -108 -101 -95 -90 -84 -79 -74 -69 -18 --47 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --48 --6 -29 -57 -79 -96 -109 -119 -125 -127 -127 -127 -127 -127 -77 -12 --38 --79 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --109 --104 --99 --111 --106 --34 -23 -72 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -73 -20 --25 --61 --90 --98 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --40 -8 -47 -79 -105 -125 -127 -127 -127 -127 -127 -127 -127 -127 -127 -103 -37 --15 --57 --93 --103 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --55 --7 -34 -67 -93 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -118 -111 -106 -101 -95 -89 -84 -79 -74 -69 -64 -13 --52 --101 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --112 --107 --49 -9 -58 -98 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -119 -112 -105 -99 -93 -87 -81 -29 --37 --87 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --95 --44 --2 -32 -60 -82 -99 -112 -121 -127 -127 -127 -127 -127 -127 -77 -13 --37 --78 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --110 --105 --99 --110 --106 --33 -24 -72 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -74 -20 --24 --61 --90 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --40 -7 -47 -79 -105 -125 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -117 -111 -105 -99 -93 -87 -82 -77 -72 -67 -16 --49 --99 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --49 --7 -28 -56 -79 -96 -109 -119 -124 -127 -127 -127 -127 -127 -75 -11 --39 --80 --98 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --107 --65 --17 -24 -58 -84 -105 -121 -127 -127 -127 -127 -127 -127 -127 -127 -91 -27 --24 --66 --101 --111 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --112 --107 --102 --112 --108 --104 --31 -27 -74 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -75 -21 --23 --60 --89 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --39 -8 -48 -80 -105 -125 -127 -127 -127 -127 -127 -127 -127 -127 -127 -103 -37 --15 --57 --92 --103 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --112 --55 --6 -34 -67 -93 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -96 -31 --21 --63 --97 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -65 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -117 -111 -105 -99 -94 -88 -83 -77 -73 -68 -64 -13 --52 --102 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --101 --50 --8 -27 -56 -77 -95 -108 -118 -123 -127 -127 -127 -127 -127 -75 -11 --39 --80 --98 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --108 --66 --17 -24 -57 -84 -105 -121 -127 -127 -127 -127 -127 -127 -127 -127 -91 -26 --25 --67 --101 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --101 --59 --11 -30 -63 -89 -109 -126 -127 -127 -127 -127 -127 -127 -127 -127 -94 -29 --23 --64 --99 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --111 --106 --101 --112 --108 --103 --31 -27 -75 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -124 -117 -109 -104 -97 -91 -85 -33 --33 --84 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --93 --43 --1 -33 -61 -83 -101 -113 -122 -127 -127 -127 -127 -127 -127 -79 -15 --36 --77 --111 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --109 --104 --99 --111 --106 --33 -24 -72 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -116 -109 -103 -96 -90 -85 -32 --34 --84 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --93 --43 --1 -33 -61 -83 -101 -113 -122 -127 -127 -127 -127 -127 -127 -78 -14 --37 --78 --111 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --106 --64 --15 -25 -59 -85 -106 -122 -127 -127 -127 -127 -127 -127 -127 -127 -91 -27 --24 --66 --101 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --59 --10 -31 -63 -90 -109 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --99 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --111 --106 --101 --112 --108 --103 --31 -27 -75 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -75 -21 --23 --60 --89 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --96 --39 -9 -48 -80 -106 -125 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -117 -111 -105 -99 -93 -88 -82 -77 -72 -67 -15 --49 --100 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --108 --51 -8 -57 -96 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -67 -13 --31 --67 --96 --103 --128 --128 --128 --128 --128 --128 --128 --128 --128 --101 --43 -5 -44 -77 -102 -122 -127 -127 -127 -127 -127 -127 -127 -127 -127 -101 -35 --16 --58 --93 --105 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --55 --7 -33 -67 -93 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -96 -31 --20 --62 --97 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --57 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --21 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -90 -110 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --98 --56 --7 -33 -67 -94 -115 -127 -127 -127 -127 -127 -127 -127 -127 -127 -99 -34 --17 --60 --95 --105 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --56 --7 -33 -66 -92 -112 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -30 --21 --63 --97 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --10 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -30 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -90 -111 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --99 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -30 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --58 --9 -31 -64 -91 -111 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -30 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -126 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -117 -111 -105 -99 -94 -88 -83 -77 -73 -68 -63 -13 --52 --102 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --112 --106 --49 -9 -58 -98 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -68 -14 --30 --66 --95 --102 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --43 -5 -45 -77 -103 -122 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -115 -109 -104 -97 -91 -87 -81 -76 -71 -67 -15 --50 --100 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --49 --7 -28 -56 -78 -95 -109 -118 -124 -127 -127 -127 -127 -127 -76 -11 --39 --80 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --110 --105 --99 --111 --107 --34 -24 -72 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -74 -20 --24 --61 --90 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --40 -8 -47 -79 -105 -125 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -116 -110 -105 -99 -93 -87 -82 -77 -72 -67 -15 --49 --99 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --112 --106 --49 -9 -58 -97 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -119 -111 -105 -99 -93 -87 -81 -29 --37 --88 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --109 --103 --47 -11 -60 -100 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -119 -112 -106 -99 -94 -88 -82 -29 --36 --87 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --109 --104 --47 -11 -60 -100 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -68 -15 --30 --66 --95 --102 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --42 -6 -46 -77 -103 -123 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -116 -109 -104 -98 -92 -87 -81 -76 -71 -67 -15 --50 --100 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --49 --7 -28 -56 -78 -95 -109 -118 -124 -127 -127 -127 -127 -127 -75 -11 --39 --80 --98 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --110 --105 --99 --111 --106 --33 -24 -72 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -74 -20 --25 --61 --90 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --40 -8 -47 -79 -105 -125 -127 -127 -127 -127 -127 -127 -127 -127 -127 -104 -37 --15 --57 --92 --103 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --55 --7 -34 -67 -93 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -118 -112 -106 -101 -95 -89 -84 -79 -74 -69 -64 -13 --52 --102 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --106 --49 -9 -59 -98 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -119 -112 -106 -99 -93 -87 -81 -29 --37 --88 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --49 --7 -28 -56 -78 -96 -109 -118 -124 -127 -127 -127 -127 -127 -75 -11 --39 --80 --98 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --111 --105 --100 --112 --107 --34 -24 -72 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -74 -20 --24 --61 --90 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --40 -8 -47 -79 -105 -124 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -117 -111 -105 -99 -93 -87 -82 -77 -72 -67 -15 --50 --99 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --49 --6 -29 -57 -79 -96 -109 -119 -125 -127 -127 -127 -127 -127 -76 -11 --39 --80 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --108 --65 --17 -24 -58 -84 -105 -121 -127 -127 -127 -127 -127 -127 -127 -127 -92 -27 --24 --65 --99 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --109 --103 --99 --110 --105 --101 --29 -29 -77 -115 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -76 -22 --23 --59 --89 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --96 --39 -9 -48 -80 -106 -125 -127 -127 -127 -127 -127 -127 -127 -127 -127 -103 -37 --15 --57 --92 --103 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --55 --6 -34 -67 -93 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -96 -31 --21 --63 --97 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --57 --9 -31 -65 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -117 -111 -105 -99 -95 -89 -83 -78 -73 -69 -64 -13 --52 --102 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --101 --50 --8 -27 -55 -77 -95 -108 -117 -123 -127 -127 -127 -127 -127 -75 -11 --39 --80 --98 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --107 --65 --17 -24 -58 -84 -105 -121 -127 -127 -127 -127 -127 -127 -127 -127 -91 -26 --25 --67 --101 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --101 --59 --11 -30 -63 -89 -109 -125 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --99 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --111 --106 --101 --112 --108 --103 --31 -27 -74 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -116 -109 -104 -97 -91 -85 -33 --33 --84 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --93 --43 --1 -33 -62 -83 -101 -113 -123 -127 -127 -127 -127 -127 -127 -79 -14 --37 --78 --111 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --109 --104 --99 --111 --106 --33 -24 -72 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -116 -109 -103 -97 -91 -85 -33 --33 --85 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --94 --43 --1 -33 -61 -83 -101 -113 -122 -127 -127 -127 -127 -127 -127 -78 -14 --37 --78 --111 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --106 --64 --16 -25 -59 -85 -106 -122 -127 -127 -127 -127 -127 -127 -127 -127 -92 -27 --24 --66 --101 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --101 --59 --11 -30 -63 -89 -109 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --99 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --112 --106 --101 --112 --108 --103 --31 -26 -74 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -75 -21 --23 --60 --89 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --96 --39 -9 -48 -80 -106 -125 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -117 -111 -105 -99 -93 -88 -82 -77 -72 -67 -15 --49 --99 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --112 --106 --49 -9 -59 -98 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -67 -13 --31 --67 --96 --103 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --43 -5 -45 -77 -103 -123 -127 -127 -127 -127 -127 -127 -127 -127 -127 -101 -35 --16 --58 --93 --104 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --55 --7 -33 -66 -93 -112 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -30 --21 --63 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -30 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -94 -29 --22 --64 --99 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --57 --9 -32 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -30 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --58 --9 -31 -64 -90 -111 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -30 --21 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -30 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -30 --22 --63 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -30 --21 --63 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --57 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -30 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --10 -30 -63 -88 -109 -123 -127 -127 -127 -127 -127 -127 -127 -127 -91 -25 --26 --68 --102 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --102 --60 --11 -29 -63 -89 -109 -125 -127 -127 -127 -127 -127 -127 -127 -127 -94 -29 --23 --65 --99 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --101 --59 --10 -31 -63 -90 -110 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --58 --10 -31 -63 -90 -111 -126 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -117 -111 -105 -99 -94 -89 -83 -77 -73 -68 -63 -12 --53 --103 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --112 --106 --49 -9 -58 -97 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -67 -13 --30 --66 --95 --102 --128 --128 --128 --128 --128 --128 --128 --128 --128 --98 --41 -8 -48 -80 -107 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -120 -113 -107 -101 -95 -89 -84 -79 -73 -69 -17 --48 --98 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --49 --7 -28 -57 -79 -96 -109 -119 -125 -127 -127 -127 -127 -127 -76 -11 --39 --80 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --110 --104 --99 --111 --106 --33 -24 -72 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -74 -20 --24 --61 --90 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --40 -8 -47 -79 -105 -125 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -116 -111 -105 -99 -93 -87 -82 -77 -72 -67 -16 --49 --99 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --112 --106 --49 -10 -59 -98 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -119 -111 -105 -99 -93 -87 -81 -29 --37 --87 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --110 --104 --47 -11 -60 -100 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -119 -112 -106 -99 -94 -88 -82 -30 --36 --87 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --110 --104 --47 -11 -60 -99 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -69 -15 --29 --65 --94 --101 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --42 -5 -45 -77 -103 -123 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -116 -109 -104 -98 -92 -87 -81 -76 -71 -67 -15 --50 --100 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --49 --7 -28 -56 -78 -96 -109 -119 -124 -127 -127 -127 -127 -127 -75 -11 --39 --80 --98 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --110 --105 --99 --111 --107 --34 -24 -72 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -73 -20 --25 --61 --90 --98 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --40 -8 -47 -79 -105 -124 -127 -127 -127 -127 -127 -127 -127 -127 -127 -103 -37 --15 --57 --92 --103 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --55 --6 -34 -67 -93 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -118 -111 -106 -100 -95 -89 -84 -79 -74 -69 -64 -13 --52 --102 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --112 --106 --49 -9 -58 -98 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -119 -111 -105 -99 -93 -87 -81 -29 --37 --87 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --95 --44 --2 -32 -61 -82 -99 -112 -121 -127 -127 -127 -127 -127 -127 -77 -13 --37 --79 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --110 --105 --100 --111 --106 --34 -23 -72 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -73 -20 --25 --61 --90 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --40 -8 -47 -79 -105 -125 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -117 -111 -105 -99 -93 -87 -82 -77 -72 -67 -15 --49 --99 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --49 --7 -28 -56 -78 -96 -109 -119 -125 -127 -127 -127 -127 -127 -76 -11 --39 --80 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --107 --65 --17 -24 -58 -84 -105 -121 -127 -127 -127 -127 -127 -127 -127 -127 -91 -27 --24 --66 --101 --111 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --112 --107 --102 --97 --108 --104 --31 -26 -74 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -75 -21 --23 --61 --90 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --40 -8 -48 -79 -105 -125 -127 -127 -127 -127 -127 -127 -127 -127 -127 -103 -37 --15 --57 --91 --103 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --55 --6 -34 -67 -93 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -97 -31 --20 --62 --97 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --57 --9 -32 -65 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -117 -111 -105 -99 -94 -89 -83 -77 -73 -69 -64 -13 --52 --102 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --101 --50 --7 -27 -55 -77 -95 -108 -118 -124 -127 -127 -127 -127 -127 -75 -11 --39 --80 --98 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --107 --65 --17 -25 -58 -85 -105 -121 -127 -127 -127 -127 -127 -127 -127 -127 -91 -26 --25 --66 --101 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --101 --59 --11 -30 -63 -89 -109 -126 -127 -127 -127 -127 -127 -127 -127 -127 -94 -29 --23 --65 --100 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --109 --104 --98 --109 --105 --33 -25 -73 -112 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -115 -109 -102 -96 -90 -84 -32 --34 --85 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --93 --43 --1 -33 -62 -83 -101 -113 -122 -127 -127 -127 -127 -127 -127 -79 -14 --37 --78 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --109 --104 --99 --111 --106 --33 -24 -72 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -116 -109 -103 -97 -91 -85 -32 --34 --85 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --93 --43 --1 -33 -61 -83 -101 -113 -123 -127 -127 -127 -127 -127 -127 -80 -15 --35 --75 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --101 --60 --11 -30 -63 -89 -109 -125 -127 -127 -127 -127 -127 -127 -127 -127 -94 -29 --23 --65 --99 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --58 --10 -31 -63 -90 -111 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --99 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --111 --106 --101 --112 --108 --103 --31 -27 -75 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -75 -21 --23 --60 --89 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --40 -8 -48 -79 -105 -125 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -117 -111 -105 -99 -93 -88 -83 -77 -72 -67 -16 --49 --99 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --111 --106 --49 -10 -59 -98 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -68 -14 --30 --66 --95 --103 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --42 -5 -45 -77 -103 -123 -127 -127 -127 -127 -127 -127 -127 -127 -127 -101 -35 --16 --59 --93 --105 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --55 --7 -34 -67 -93 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -96 -31 --21 --63 --97 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --10 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -30 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -30 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --57 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -30 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --58 --10 -31 -63 -90 -111 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --99 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --58 --9 -31 -63 -90 -110 -126 -127 -127 -127 -127 -127 -127 -127 -127 -94 -29 --23 --64 --99 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --58 --10 -31 -63 -90 -110 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -117 -111 -105 -99 -94 -88 -83 -78 -73 -69 -64 -13 --52 --102 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --107 --49 -9 -58 -98 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -67 -13 --30 --67 --95 --102 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --42 -5 -45 -77 -103 -123 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -115 -110 -104 -98 -92 -87 -81 -76 -71 -67 -15 --50 --100 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --49 --7 -27 -56 -77 -95 -109 -118 -123 -127 -127 -127 -127 -127 -75 -11 --39 --80 --98 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --110 --105 --99 --111 --106 --34 -24 -72 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -75 -21 --24 --61 --90 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --40 -8 -47 -79 -105 -125 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -117 -111 -105 -99 -93 -87 -82 -77 -72 -67 -15 --49 --99 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --112 --107 --49 -9 -58 -98 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -119 -112 -106 -99 -93 -88 -82 -29 --37 --87 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --109 --104 --47 -11 -59 -98 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -115 -109 -103 -96 -91 -85 -79 -27 --38 --88 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --110 --105 --47 -11 -60 -99 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -69 -15 --29 --65 --95 --102 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --43 -5 -45 -77 -103 -123 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -116 -109 -104 -98 -92 -87 -81 -76 -71 -66 -15 --50 --100 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --49 --7 -28 -56 -79 -96 -109 -118 -124 -127 -127 -127 -127 -127 -75 -11 --39 --80 --98 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --109 --104 --99 --109 --104 --31 -27 -75 -115 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -78 -24 --21 --57 --87 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --95 --39 -9 -49 -81 -106 -126 -127 -127 -127 -127 -127 -127 -127 -127 -127 -104 -38 --14 --56 --91 --103 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --55 --7 -34 -66 -93 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -118 -112 -107 -101 -95 -89 -84 -79 -74 -69 -64 -13 --52 --102 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --112 --107 --49 -9 -58 -98 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -119 -111 -105 -99 -93 -87 -81 -29 --36 --87 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --95 --44 --2 -32 -61 -82 -99 -112 -121 -127 -127 -127 -127 -127 -127 -78 -13 --37 --78 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --109 --105 --99 --111 --106 --33 -24 -72 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -74 -20 --24 --61 --90 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --40 -8 -47 -79 -105 -124 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -116 -111 -105 -99 -93 -87 -82 -77 -72 -67 -16 --49 --99 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --49 --7 -28 -56 -79 -96 -109 -119 -124 -127 -127 -127 -127 -127 -76 -11 --39 --80 --98 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --107 --65 --17 -25 -58 -85 -105 -121 -127 -127 -127 -127 -127 -127 -127 -127 -91 -26 --25 --67 --101 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --112 --106 --102 --97 --108 --104 --31 -26 -74 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -75 -21 --23 --60 --89 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --40 -8 -48 -79 -105 -125 -127 -127 -127 -127 -127 -127 -127 -127 -127 -103 -37 --15 --57 --92 --103 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --112 --55 --6 -34 -67 -93 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -96 -31 --21 --63 --97 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -65 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -117 -111 -105 -99 -94 -89 -83 -77 -73 -68 -64 -13 --52 --102 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --101 --50 --8 -27 -55 -77 -95 -108 -118 -124 -127 -127 -127 -127 -127 -75 -11 --39 --80 --98 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --107 --65 --17 -24 -57 -84 -105 -121 -127 -127 -127 -127 -127 -127 -127 -127 -91 -26 --25 --67 --101 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --101 --59 --11 -30 -63 -89 -109 -126 -127 -127 -127 -127 -127 -127 -127 -127 -94 -29 --23 --64 --99 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --111 --106 --101 --112 --108 --103 --31 -27 -74 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -116 -109 -103 -97 -91 -85 -33 --33 --85 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --93 --43 --1 -33 -61 -83 -101 -113 -123 -127 -127 -127 -127 -127 -127 -79 -14 --37 --78 --111 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --110 --104 --99 --111 --106 --33 -24 -72 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -116 -109 -103 -96 -90 -85 -32 --34 --85 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --94 --43 --1 -33 -61 -83 -101 -113 -123 -127 -127 -127 -127 -127 -127 -79 -14 --37 --78 --111 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --107 --65 --16 -25 -59 -85 -106 -122 -127 -127 -127 -127 -127 -127 -127 -127 -91 -26 --25 --66 --101 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --101 --59 --11 -30 -63 -89 -109 -125 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --99 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --111 --106 --101 --112 --108 --103 --31 -27 -75 -114 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -75 -21 --23 --60 --89 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --40 -8 -48 -79 -105 -125 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -117 -111 -105 -99 -93 -88 -82 -77 -72 -67 -15 --49 --99 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --111 --106 --49 -10 -59 -98 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -68 -14 --30 --66 --95 --102 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --42 -5 -45 -77 -103 -122 -127 -127 -127 -127 -127 -127 -127 -127 -127 -102 -36 --16 --58 --93 --104 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --56 --8 -32 -64 -90 -109 -125 -127 -127 -127 -127 -127 -127 -127 -127 -91 -26 --25 --67 --101 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --101 --59 --10 -30 -63 -90 -110 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --23 --65 --99 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --58 --10 -31 -63 -90 -111 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --99 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -30 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -30 --22 --63 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --58 --10 -31 -63 -90 -111 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --57 --8 -33 -66 -93 -114 -127 -127 -127 -127 -127 -127 -127 -127 -127 -99 -34 --17 --59 --94 --105 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --55 --7 -33 -66 -93 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -31 --21 --63 --97 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --99 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -90 -111 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --99 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --99 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --58 --9 -31 -64 -91 -111 -126 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -117 -111 -105 -99 -94 -88 -83 -77 -73 -68 -64 -13 --52 --102 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --112 --106 --49 -9 -58 -98 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -68 -14 --30 --66 --95 --102 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --43 -5 -45 -77 -103 -122 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -116 -109 -104 -98 -92 -87 -81 -76 -71 -67 -15 --50 --100 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --49 --7 -28 -56 -79 -96 -109 -119 -125 -127 -127 -127 -127 -127 -76 -11 --39 --80 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --110 --104 --99 --111 --106 --33 -24 -72 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -74 -20 --24 --61 --90 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --40 -7 -47 -79 -105 -124 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -116 -111 -105 -99 -93 -87 -82 -77 -72 -67 -16 --49 --99 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --112 --106 --49 -10 -59 -98 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -119 -111 -105 -99 -93 -87 -81 -29 --37 --87 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --109 --104 --47 -11 -60 -100 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -119 -113 -106 -99 -94 -88 -82 -30 --36 --87 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --110 --104 --47 -11 -59 -99 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -68 -14 --30 --66 --95 --102 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --43 -5 -45 -77 -103 -123 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -116 -109 -104 -98 -92 -87 -81 -76 -72 -67 -15 --50 --100 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --49 --7 -27 -56 -78 -96 -109 -119 -125 -127 -127 -127 -127 -127 -75 -11 --39 --80 --98 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --109 --104 --99 --111 --106 --33 -24 -72 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -73 -20 --25 --61 --90 --98 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --40 -8 -47 -79 -105 -125 -127 -127 -127 -127 -127 -127 -127 -127 -127 -103 -37 --15 --57 --92 --103 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --55 --6 -34 -67 -93 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -118 -111 -106 -100 -95 -89 -84 -79 -74 -69 -64 -13 --52 --101 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --112 --106 --49 -9 -58 -98 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -119 -112 -106 -99 -93 -87 -82 -29 --37 --87 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --95 --44 --2 -32 -61 -83 -99 -112 -121 -127 -127 -127 -127 -127 -127 -77 -13 --37 --79 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --109 --104 --99 --111 --105 --33 -24 -72 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -75 -21 --24 --61 --89 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --40 -7 -46 -77 -103 -121 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -124 -119 -112 -107 -101 -95 -90 -84 -79 -74 -69 -65 -13 --51 --101 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --101 --50 --8 -27 -55 -77 -95 -108 -117 -123 -127 -127 -127 -127 -126 -75 -10 --40 --81 --98 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --107 --65 --17 -24 -58 -84 -105 -121 -127 -127 -127 -127 -127 -127 -127 -127 -91 -26 --25 --66 --101 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --112 --106 --101 --112 --108 --104 --31 -26 -74 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -75 -21 --23 --60 --89 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --40 -8 -47 -79 -105 -125 -127 -127 -127 -127 -127 -127 -127 -127 -127 -103 -37 --15 --57 --92 --103 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --111 --53 --5 -36 -69 -96 -117 -127 -127 -127 -127 -127 -127 -127 -127 -127 -101 -35 --17 --58 --93 --104 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --55 --7 -33 -66 -93 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -117 -111 -106 -100 -95 -89 -84 -78 -73 -69 -64 -13 --52 --102 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --101 --50 --8 -27 -55 -77 -95 -108 -117 -123 -127 -127 -127 -127 -127 -75 -11 --39 --80 --98 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --107 --65 --17 -24 -57 -84 -105 -121 -127 -127 -127 -127 -127 -127 -127 -127 -91 -26 --25 --67 --101 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --101 --59 --11 -30 -63 -89 -109 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --99 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --112 --106 --101 --112 --107 --103 --31 -27 -75 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -116 -109 -103 -97 -91 -85 -33 --33 --84 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --94 --43 --1 -33 -61 -83 -101 -113 -122 -127 -127 -127 -127 -127 -127 -79 -14 --36 --77 --111 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --110 --104 --99 --110 --105 --33 -24 -73 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -116 -109 -103 -96 -90 -85 -32 --34 --85 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --94 --44 --1 -33 -61 -83 -101 -113 -122 -127 -127 -127 -127 -127 -127 -77 -13 --37 --78 --111 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --106 --64 --15 -25 -59 -85 -106 -122 -127 -127 -127 -127 -127 -127 -127 -127 -91 -26 --25 --66 --101 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --101 --59 --10 -31 -63 -90 -109 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --99 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --112 --106 --101 --112 --107 --103 --31 -27 -74 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -75 -21 --23 --60 --89 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --40 -8 -48 -79 -105 -125 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -116 -111 -105 -99 -93 -87 -82 -77 -72 -67 -15 --49 --99 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --112 --106 --49 -10 -59 -99 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -68 -14 --30 --66 --95 --102 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --42 -5 -45 -77 -103 -123 -127 -127 -127 -127 -127 -127 -127 -127 -127 -102 -36 --16 --58 --93 --104 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --55 --7 -33 -66 -93 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -30 --21 --63 --97 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --57 --9 -31 -63 -90 -109 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --99 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --58 --10 -31 -63 -90 -109 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -30 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --58 --10 -31 -63 -90 -111 -126 -127 -127 -127 -127 -127 -127 -127 -127 -94 -29 --23 --64 --99 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --58 --10 -31 -63 -90 -111 -126 -127 -127 -127 -127 -127 -127 -127 -127 -94 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -30 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -30 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --58 --9 -31 -63 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -30 --21 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -30 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --58 --9 -31 -64 -91 -111 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -30 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --10 -30 -62 -88 -108 -123 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -118 -113 -107 -101 -95 -90 -85 -79 -75 -70 -65 -61 -10 --54 --104 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --107 --50 -9 -57 -97 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -67 -14 --30 --66 --95 --103 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --43 -5 -45 -77 -103 -123 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -116 -109 -104 -98 -92 -87 -81 -76 -71 -66 -15 --50 --100 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --49 --7 -28 -56 -78 -96 -109 -119 -124 -127 -127 -127 -127 -127 -75 -11 --39 --80 --98 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --109 --103 --98 --109 --104 --31 -27 -75 -115 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -78 -24 --20 --57 --86 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --95 --38 -9 -49 -80 -106 -125 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -117 -111 -105 -99 -93 -88 -83 -77 -72 -67 -16 --49 --99 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --112 --106 --49 -9 -59 -98 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -119 -111 -105 -99 -93 -87 -81 -29 --37 --87 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --109 --104 --47 -12 -60 -100 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -119 -112 -106 -99 -94 -88 -82 -30 --36 --87 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --109 --104 --47 -11 -60 -100 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -68 -15 --29 --66 --95 --102 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --43 -5 -45 -77 -103 -123 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -116 -109 -104 -98 -92 -87 -81 -76 -72 -67 -15 --50 --100 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --49 --7 -28 -56 -79 -96 -109 -118 -124 -127 -127 -127 -127 -127 -75 -11 --39 --80 --98 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --111 --105 --100 --111 --106 --34 -24 -72 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -74 -20 --25 --61 --90 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --40 -8 -47 -79 -105 -125 -127 -127 -127 -127 -127 -127 -127 -127 -127 -103 -37 --15 --57 --92 --103 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --55 --7 -33 -66 -93 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -118 -111 -106 -100 -95 -89 -84 -79 -74 -69 -64 -13 --52 --102 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --107 --49 -9 -58 -98 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -119 -112 -105 -99 -93 -87 -82 -29 --36 --87 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --95 --44 --2 -32 -61 -82 -99 -112 -121 -127 -127 -127 -127 -127 -127 -77 -13 --37 --78 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --109 --104 --99 --111 --105 --33 -24 -72 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -74 -20 --24 --61 --90 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --40 -8 -47 -79 -105 -125 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -116 -111 -105 -99 -93 -87 -82 -77 -72 -67 -15 --49 --100 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --50 --8 -27 -55 -77 -95 -108 -118 -124 -127 -127 -127 -127 -127 -75 -11 --39 --80 --98 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --107 --65 --16 -25 -58 -85 -106 -121 -127 -127 -127 -127 -127 -127 -127 -127 -91 -26 --25 --67 --101 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --112 --107 --101 --112 --108 --104 --31 -26 -74 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -75 -21 --23 --60 --89 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --96 --39 -8 -48 -79 -105 -125 -127 -127 -127 -127 -127 -127 -127 -127 -127 -104 -37 --15 --57 --92 --103 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --112 --54 --6 -34 -67 -93 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -96 -31 --21 --63 --97 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --57 --9 -32 -65 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -117 -111 -105 -99 -94 -88 -83 -77 -73 -68 -63 -13 --52 --102 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --101 --50 --8 -27 -55 -77 -95 -108 -117 -123 -127 -127 -127 -127 -127 -75 -11 --39 --81 --98 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --107 --65 --16 -25 -58 -85 -105 -121 -127 -127 -127 -127 -127 -127 -127 -127 -91 -26 --25 --66 --101 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --59 --10 -31 -63 -90 -110 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --99 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --111 --106 --101 --112 --108 --103 --31 -27 -75 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -124 -117 -110 -104 -97 -91 -85 -33 --33 --84 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --93 --43 --1 -33 -61 -83 -101 -113 -123 -127 -127 -127 -127 -127 -127 -79 -13 --37 --79 --98 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --112 --107 --101 --97 --108 --35 -23 -71 -110 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -115 -108 -102 -95 -89 -84 -31 --34 --85 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --93 --43 --1 -33 -61 -83 -100 -112 -122 -127 -127 -127 -127 -127 -127 -77 -13 --37 --78 --111 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --105 --64 --15 -26 -59 -85 -106 -122 -127 -127 -127 -127 -127 -127 -127 -127 -91 -27 --25 --66 --101 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --101 --59 --10 -31 -63 -90 -110 -126 -127 -127 -127 -127 -127 -127 -127 -127 -94 -29 --23 --65 --99 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --111 --105 --99 --110 --106 --101 --28 -30 -78 -117 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -79 -25 --20 --56 --86 --109 --112 --128 --128 --128 --128 --128 --128 --128 --128 --95 --38 -10 -49 -81 -107 -126 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -117 -111 -105 -99 -93 -88 -82 -77 -72 -67 -16 --49 --99 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --111 --106 --49 -10 -59 -98 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -68 -14 --30 --65 --95 --102 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --43 -5 -45 -77 -103 -123 -127 -127 -127 -127 -127 -127 -127 -127 -127 -101 -35 --16 --58 --93 --105 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --55 --7 -33 -66 -93 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -96 -31 --21 --63 --97 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --57 --9 -32 -65 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -30 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -30 --22 --64 --99 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -90 -111 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --99 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --58 --9 -31 -64 -90 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -30 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --58 --9 -31 -63 -91 -111 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --99 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --58 --9 -31 -64 -91 -111 -126 -127 -127 -127 -127 -127 -127 -127 -127 -94 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -30 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -117 -111 -105 -99 -94 -89 -83 -77 -73 -68 -63 -12 --53 --102 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --107 --50 -9 -57 -97 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -67 -14 --30 --66 --95 --102 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --43 -5 -45 -77 -102 -122 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -116 -110 -104 -98 -92 -87 -81 -76 -71 -67 -15 --50 --100 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --49 --7 -28 -56 -79 -96 -109 -119 -125 -127 -127 -127 -127 -127 -75 -11 --39 --80 --98 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --110 --104 --99 --111 --106 --33 -24 -72 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -74 -20 --25 --61 --90 --98 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --40 -8 -47 -79 -105 -125 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -116 -111 -104 -99 -93 -87 -82 -77 -72 -67 -15 --49 --99 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --112 --107 --49 -9 -59 -98 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -119 -111 -105 -99 -93 -87 -81 -29 --37 --87 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --109 --103 --47 -11 -60 -100 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -119 -112 -106 -99 -93 -88 -82 -30 --36 --87 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --109 --104 --47 -12 -60 -99 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -69 -15 --29 --65 --94 --101 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --43 -4 -44 -75 -101 -120 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -118 -111 -106 -100 -95 -89 -83 -79 -74 -69 -64 -13 --52 --101 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --101 --50 --8 -27 -55 -77 -95 -108 -117 -123 -127 -127 -127 -127 -127 -75 -11 --39 --80 --98 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --111 --105 --100 --111 --107 --34 -24 -72 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -74 -20 --25 --61 --90 --98 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --40 -8 -47 -79 -105 -125 -127 -127 -127 -127 -127 -127 -127 -127 -127 -104 -37 --14 --57 --91 --103 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --55 --7 -33 -66 -93 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -118 -111 -106 -101 -95 -89 -84 -79 -75 -70 -65 -15 --50 --99 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --110 --105 --47 -11 -59 -99 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -119 -112 -106 -99 -94 -88 -82 -30 --36 --87 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --95 --44 --2 -32 -61 -82 -99 -112 -121 -127 -127 -127 -127 -127 -127 -77 -13 --37 --78 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --110 --104 --99 --111 --106 --33 -24 -72 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -74 -20 --25 --61 --90 --98 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --40 -8 -47 -79 -105 -125 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -116 -111 -105 -99 -93 -87 -82 -77 -72 -67 -15 --49 --99 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --49 --7 -28 -56 -78 -95 -109 -119 -124 -127 -127 -127 -127 -127 -76 -11 --39 --80 --98 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --108 --65 --17 -24 -58 -85 -105 -121 -127 -127 -127 -127 -127 -127 -127 -127 -91 -26 --25 --67 --101 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --112 --107 --102 --112 --108 --103 --31 -27 -74 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -75 -21 --23 --60 --89 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --40 -8 -48 -79 -105 -125 -127 -127 -127 -127 -127 -127 -127 -127 -127 -104 -37 --15 --57 --92 --103 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --55 --7 -34 -67 -93 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -96 -31 --21 --63 --97 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --57 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -117 -111 -105 -99 -94 -89 -83 -77 -73 -68 -64 -13 --52 --102 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --101 --50 --8 -27 -56 -77 -95 -109 -118 -124 -127 -127 -127 -127 -127 -75 -10 --39 --81 --98 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --107 --65 --17 -24 -58 -85 -105 -121 -127 -127 -127 -127 -127 -127 -127 -127 -91 -26 --25 --67 --101 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --101 --59 --11 -30 -63 -89 -109 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --99 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --111 --106 --101 --112 --108 --103 --31 -27 -75 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -124 -117 -109 -104 -97 -91 -85 -33 --33 --84 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --93 --43 --1 -33 -62 -83 -101 -113 -123 -127 -127 -127 -127 -127 -127 -79 -14 --36 --77 --111 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --109 --104 --99 --110 --106 --33 -24 -72 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -115 -109 -102 -96 -90 -84 -31 --34 --85 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --94 --43 --1 -33 -61 -83 -101 -113 -122 -127 -127 -127 -127 -127 -127 -77 -13 --37 --78 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --106 --64 --15 -25 -59 -85 -106 -122 -127 -127 -127 -127 -127 -127 -127 -127 -91 -26 --25 --67 --101 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --101 --59 --11 -30 -63 -89 -109 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --99 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --112 --106 --101 --112 --107 --103 --31 -27 -75 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -75 -21 --23 --60 --89 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --40 -8 -48 -79 -105 -125 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -116 -111 -105 -99 -93 -87 -82 -77 -72 -67 -16 --49 --99 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --112 --106 --49 -9 -59 -98 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -68 -14 --30 --66 --95 --103 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --43 -5 -45 -77 -103 -123 -127 -127 -127 -127 -127 -127 -127 -127 -127 -102 -36 --16 --58 --93 --105 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --55 --7 -33 -66 -93 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -97 -31 --20 --63 --97 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --57 --9 -31 -65 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -30 --21 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -30 --22 --63 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --58 --10 -30 -63 -88 -108 -123 -127 -127 -127 -127 -127 -127 -127 -127 -90 -25 --26 --68 --102 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --101 --59 --11 -30 -63 -89 -109 -125 -127 -127 -127 -127 -127 -127 -127 -127 -93 -28 --23 --65 --99 --111 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --65 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -30 --22 --63 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --58 --9 -31 -63 -90 -111 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -30 --22 --63 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --58 --10 -31 -63 -90 -111 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --55 --6 -35 -69 -95 -116 -127 -127 -127 -127 -127 -127 -127 -127 -127 -99 -33 --18 --60 --95 --106 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --98 --56 --8 -33 -65 -92 -112 -127 -127 -127 -127 -127 -127 -127 -127 -127 -96 -31 --21 --63 --97 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -30 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -30 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -117 -111 -105 -99 -94 -88 -83 -77 -73 -68 -64 -13 --52 --102 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --112 --107 --49 -9 -58 -97 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -67 -14 --30 --66 --95 --102 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --43 -5 -45 -77 -103 -123 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -116 -109 -104 -98 -92 -87 -81 -77 -72 -67 -15 --50 --100 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --49 --7 -28 -56 -78 -95 -109 -118 -124 -127 -127 -127 -127 -127 -76 -11 --39 --80 --98 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --111 --105 --100 --111 --107 --34 -23 -72 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -74 -20 --25 --61 --90 --98 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --40 -8 -47 -79 -105 -125 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -117 -111 -105 -99 -93 -87 -82 -77 -72 -67 -16 --49 --99 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --112 --106 --49 -10 -59 -98 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -119 -112 -105 -99 -93 -87 -82 -29 --37 --87 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --109 --104 --47 -11 -60 -100 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -119 -112 -106 -99 -94 -88 -82 -30 --36 --87 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --110 --104 --47 -11 -60 -100 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -69 -15 --29 --65 --94 --101 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --43 -5 -45 -77 -103 -123 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -116 -109 -104 -98 -92 -87 -81 -76 -71 -67 -15 --50 --100 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --50 --8 -27 -55 -77 -95 -108 -118 -124 -127 -127 -127 -127 -127 -75 -11 --39 --80 --98 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --110 --105 --100 --111 --107 --34 -23 -72 -110 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -74 -20 --25 --61 --90 --98 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --40 -8 -47 -79 -105 -124 -127 -127 -127 -127 -127 -127 -127 -127 -127 -102 -37 --15 --57 --92 --103 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --55 --7 -34 -67 -93 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -118 -111 -106 -101 -95 -89 -84 -79 -74 -69 -64 -13 --52 --101 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --112 --107 --49 -9 -58 -98 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -119 -111 -105 -99 -93 -87 -82 -29 --36 --87 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --95 --44 --2 -32 -61 -82 -99 -112 -121 -127 -127 -127 -127 -127 -127 -78 -13 --37 --78 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --110 --104 --99 --111 --106 --34 -24 -72 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -74 -20 --25 --61 --90 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --40 -8 -47 -79 -105 -125 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -117 -111 -105 -99 -93 -87 -82 -77 -72 -67 -15 --49 --99 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --49 --7 -29 -57 -79 -96 -109 -119 -125 -127 -127 -127 -127 -127 -75 -11 --39 --80 --98 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --107 --65 --16 -25 -58 -85 -106 -122 -127 -127 -127 -127 -127 -127 -127 -127 -91 -26 --25 --67 --102 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --109 --104 --99 --110 --105 --33 -25 -73 -112 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -74 -20 --25 --61 --90 --98 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --40 -8 -47 -79 -105 -125 -127 -127 -127 -127 -127 -127 -127 -127 -127 -103 -37 --15 --57 --92 --103 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --112 --55 --6 -34 -67 -93 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -97 -31 --20 --62 --97 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -65 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -117 -111 -105 -99 -94 -88 -83 -77 -73 -68 -63 -12 --53 --103 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --50 --7 -27 -56 -77 -95 -109 -119 -124 -127 -127 -127 -127 -127 -77 -13 --37 --77 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --103 --61 --12 -28 -61 -88 -109 -125 -127 -127 -127 -127 -127 -127 -127 -127 -93 -28 --23 --65 --99 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --58 --10 -31 -63 -90 -111 -126 -127 -127 -127 -127 -127 -127 -127 -127 -94 -29 --23 --65 --99 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --111 --106 --101 --112 --107 --103 --31 -27 -75 -114 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -124 -117 -110 -104 -97 -91 -85 -33 --33 --84 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --93 --43 --1 -33 -61 -83 -101 -113 -123 -127 -127 -127 -127 -127 -127 -79 -14 --36 --77 --111 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --110 --104 --99 --111 --106 --33 -24 -72 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -116 -109 -103 -96 -90 -85 -32 --34 --85 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --93 --43 --1 -33 -61 -83 -101 -113 -122 -127 -127 -127 -127 -127 -127 -78 -14 --37 --78 --111 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --106 --64 --15 -25 -59 -85 -106 -122 -127 -127 -127 -127 -127 -127 -127 -127 -92 -27 --24 --66 --101 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --101 --59 --11 -30 -63 -89 -109 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --99 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --111 --106 --101 --112 --107 --103 --31 -27 -75 -114 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -75 -21 --23 --60 --89 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --40 -8 -47 -79 -105 -125 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -117 -111 -105 -99 -93 -87 -82 -77 -72 -67 -15 --49 --99 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --112 --106 --49 -10 -59 -98 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -68 -14 --30 --66 --95 --102 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --43 -5 -45 -77 -103 -123 -127 -127 -127 -127 -127 -127 -127 -127 -127 -101 -35 --16 --58 --93 --105 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --55 --7 -34 -67 -93 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -30 --21 --63 --97 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --57 --9 -31 -65 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -94 -29 --23 --64 --99 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --58 --10 -31 -63 -90 -111 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --58 --10 -31 -63 -90 -111 -126 -127 -127 -127 -127 -127 -127 -127 -127 -94 -29 --22 --64 --98 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --57 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --99 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -65 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -30 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -90 -111 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -30 --22 --63 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -117 -111 -105 -99 -94 -89 -83 -77 -73 -68 -63 -12 --52 --103 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --112 --106 --49 -9 -58 -97 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -68 -14 --30 --66 --95 --102 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --43 -5 -44 -75 -101 -120 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -117 -111 -106 -100 -95 -89 -83 -78 -73 -69 -64 -13 --52 --101 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --101 --50 --8 -27 -55 -77 -95 -108 -117 -123 -127 -127 -127 -127 -126 -75 -11 --39 --80 --98 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --110 --105 --100 --111 --107 --34 -23 -72 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -74 -20 --25 --61 --90 --98 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --41 -7 -47 -79 -105 -124 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -117 -111 -105 -99 -93 -87 -82 -77 -72 -67 -15 --49 --99 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --110 --105 --47 -12 -61 -101 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -115 -108 -101 -95 -89 -83 -31 --35 --86 --111 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --110 --103 --46 -12 -60 -100 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -119 -112 -106 -99 -94 -88 -82 -30 --36 --87 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --110 --104 --47 -11 -60 -100 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -69 -15 --29 --65 --94 --101 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --42 -5 -45 -77 -103 -123 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -116 -109 -104 -98 -92 -87 -81 -76 -71 -67 -15 --50 --100 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --49 --7 -28 -56 -78 -96 -109 -118 -125 -127 -127 -127 -127 -127 -75 -11 --39 --80 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --110 --105 --100 --111 --107 --34 -24 -72 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -74 -20 --25 --61 --90 --98 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --40 -8 -47 -79 -105 -125 -127 -127 -127 -127 -127 -127 -127 -127 -127 -103 -37 --15 --57 --92 --103 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --55 --7 -34 -67 -93 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -118 -111 -106 -101 -95 -89 -84 -79 -74 -69 -64 -13 --52 --102 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --112 --107 --49 -9 -58 -97 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -119 -111 -105 -99 -93 -87 -81 -29 --36 --87 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --95 --44 --2 -32 -61 -82 -99 -112 -121 -127 -127 -127 -127 -127 -127 -77 -13 --37 --78 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --110 --105 --99 --111 --106 --33 -24 -72 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -74 -20 --25 --61 --90 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --40 -8 -47 -79 -105 -125 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -116 -111 -105 -99 -93 -87 -82 -77 -72 -67 -15 --49 --99 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --49 --7 -28 -56 -78 -96 -109 -119 -125 -127 -127 -127 -127 -127 -76 -11 --39 --80 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --107 --65 --16 -25 -58 -85 -105 -121 -127 -127 -127 -127 -127 -127 -127 -127 -91 -26 --25 --66 --101 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --107 --102 --97 --109 --103 --31 -26 -74 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -74 -20 --24 --61 --90 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --40 -8 -47 -79 -105 -125 -127 -127 -127 -127 -127 -127 -127 -127 -127 -103 -37 --15 --57 --92 --103 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --55 --7 -33 -66 -93 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -96 -31 --21 --63 --97 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --57 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -117 -111 -105 -99 -94 -88 -83 -77 -73 -68 -64 -13 --52 --102 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --101 --50 --8 -27 -55 -77 -95 -108 -117 -123 -127 -127 -127 -127 -127 -76 -11 --39 --80 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --107 --65 --17 -24 -58 -84 -105 -121 -127 -127 -127 -127 -127 -127 -127 -127 -91 -27 --25 --66 --101 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --101 --59 --11 -30 -63 -89 -109 -126 -127 -127 -127 -127 -127 -127 -127 -127 -94 -29 --22 --64 --99 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --112 --107 --101 --112 --107 --103 --31 -27 -75 -114 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -116 -109 -104 -97 -91 -85 -33 --33 --84 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --93 --43 --1 -34 -62 -83 -101 -113 -123 -127 -127 -127 -127 -127 -127 -79 -14 --36 --77 --111 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --109 --104 --99 --111 --106 --33 -24 -72 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -116 -109 -103 -97 -91 -85 -32 --34 --85 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --93 --43 --1 -33 -62 -84 -101 -113 -123 -127 -127 -127 -127 -127 -127 -78 -13 --37 --79 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --111 --69 --20 -21 -55 -81 -102 -119 -127 -127 -127 -127 -127 -127 -127 -127 -90 -25 --26 --68 --102 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --102 --60 --11 -29 -62 -89 -109 -125 -127 -127 -127 -127 -127 -127 -127 -127 -94 -28 --23 --65 --99 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --112 --106 --101 --97 --108 --103 --31 -27 -74 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -75 -21 --23 --60 --89 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --40 -8 -47 -79 -105 -125 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -117 -111 -105 -99 -93 -87 -82 -77 -72 -67 -15 --50 --100 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --112 --105 --48 -11 -59 -99 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -73 -19 --26 --62 --91 --99 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --41 -7 -47 -79 -105 -124 -127 -127 -127 -127 -127 -127 -127 -127 -127 -103 -37 --15 --57 --92 --103 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --55 --6 -34 -67 -93 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -31 --21 --63 --97 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --57 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -30 --21 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --58 --9 -31 -64 -91 -111 -126 -127 -127 -127 -127 -127 -127 -127 -127 -94 -29 --22 --64 --99 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --99 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -30 --22 --63 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -30 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --58 --10 -31 -63 -90 -111 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -30 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --58 --10 -31 -64 -91 -111 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -90 -111 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -117 -111 -105 -99 -94 -88 -83 -77 -73 -68 -63 -12 --52 --102 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --112 --107 --49 -9 -58 -98 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -68 -14 --30 --66 --95 --102 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --43 -5 -45 -77 -103 -123 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -116 -109 -104 -98 -92 -87 -81 -76 -71 -67 -15 --50 --100 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --101 --50 --8 -27 -55 -77 -95 -108 -117 -123 -127 -127 -127 -127 -127 -75 -11 --39 --81 --98 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --110 --105 --100 --111 --107 --34 -23 -72 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -74 -20 --24 --61 --90 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --40 -8 -47 -79 -105 -125 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -116 -111 -105 -99 -93 -87 -82 -77 -72 -67 -16 --49 --99 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --112 --106 --49 -10 -59 -98 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -119 -112 -106 -99 -93 -88 -82 -29 --36 --87 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --109 --103 --47 -11 -60 -100 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -119 -112 -106 -99 -93 -88 -82 -30 --36 --87 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --109 --104 --47 -11 -60 -100 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -69 -15 --29 --65 --94 --101 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --42 -5 -45 -77 -103 -123 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -116 -109 -104 -98 -92 -87 -81 -76 -72 -67 -15 --50 --100 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --49 --7 -28 -56 -78 -96 -109 -119 -125 -127 -127 -127 -127 -127 -76 -11 --39 --80 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --110 --104 --100 --111 --106 --34 -23 -71 -109 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -69 -15 --29 --65 --94 --101 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --42 -6 -46 -78 -103 -123 -127 -127 -127 -127 -127 -127 -127 -127 -127 -101 -35 --17 --59 --93 --105 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --55 --7 -33 -66 -93 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -117 -111 -105 -99 -94 -88 -83 -77 -73 -68 -64 -13 --52 --102 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --107 --49 -9 -58 -98 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -119 -111 -105 -99 -93 -87 -81 -29 --37 --88 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --95 --44 --2 -32 -61 -83 -100 -112 -121 -127 -127 -127 -127 -127 -127 -78 -14 --36 --77 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --112 --107 --102 --97 --108 --104 --31 -26 -74 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -75 -21 --23 --60 --89 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --40 -8 -47 -79 -105 -125 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -117 -111 -105 -99 -93 -87 -82 -77 -72 -67 -15 --49 --99 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --49 --7 -28 -57 -79 -96 -109 -119 -125 -127 -127 -127 -127 -127 -76 -11 --39 --80 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --107 --65 --16 -25 -58 -85 -105 -121 -127 -127 -127 -127 -127 -127 -127 -127 -91 -27 --25 --66 --101 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --107 --102 --97 --108 --104 --31 -26 -74 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -75 -21 --24 --61 --89 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --96 --39 -8 -48 -80 -105 -125 -127 -127 -127 -127 -127 -127 -127 -127 -127 -103 -37 --15 --57 --92 --103 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --55 --6 -34 -67 -93 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -96 -31 --21 --63 --97 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --57 --9 -32 -65 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -117 -111 -105 -99 -94 -88 -83 -77 -73 -68 -63 -12 --53 --103 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --101 --50 --8 -27 -55 -77 -95 -109 -118 -123 -127 -127 -127 -127 -127 -75 -11 --39 --80 --98 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --107 --65 --17 -24 -58 -85 -105 -121 -127 -127 -127 -127 -127 -127 -127 -127 -91 -26 --25 --67 --101 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --101 --59 --11 -30 -63 -89 -109 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --99 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --112 --106 --101 --112 --108 --103 --31 -27 -74 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -116 -109 -104 -97 -91 -85 -33 --33 --84 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --93 --43 --1 -33 -61 -83 -101 -113 -123 -127 -127 -127 -127 -127 -127 -79 -14 --36 --77 --111 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --110 --104 --99 --110 --106 --33 -24 -72 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -116 -109 -103 -96 -90 -85 -32 --34 --85 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --93 --43 --1 -33 -61 -83 -100 -113 -122 -127 -127 -127 -127 -127 -127 -78 -13 --37 --78 --111 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --106 --65 --16 -25 -59 -85 -106 -122 -127 -127 -127 -127 -127 -127 -127 -127 -91 -26 --25 --67 --101 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --102 --60 --11 -29 -63 -89 -109 -125 -127 -127 -127 -127 -127 -127 -127 -127 -94 -29 --23 --65 --99 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --112 --106 --101 --112 --108 --104 --31 -26 -74 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -75 -21 --24 --60 --89 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --96 --40 -8 -48 -79 -105 -125 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -117 -111 -105 -99 -93 -88 -83 -77 -72 -67 -16 --49 --99 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --111 --106 --49 -10 -59 -98 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -67 -14 --30 --66 --96 --103 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --42 -5 -45 -77 -103 -123 -127 -127 -127 -127 -127 -127 -127 -127 -127 -101 -35 --16 --58 --93 --104 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --55 --7 -33 -66 -93 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -96 -31 --21 --63 --97 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --57 --9 -32 -65 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -30 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -30 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -90 -111 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -30 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -30 --21 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --10 -30 -63 -88 -108 -123 -127 -127 -127 -127 -127 -127 -127 -127 -90 -25 --26 --68 --103 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --101 --59 --11 -30 -63 -89 -109 -125 -127 -127 -127 -127 -127 -127 -127 -127 -94 -28 --23 --65 --99 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --58 --9 -31 -64 -90 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --99 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --58 --9 -31 -63 -90 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --99 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --58 --10 -31 -64 -91 -111 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -30 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -63 -90 -111 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -30 --21 --63 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --57 --9 -32 -65 -93 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -100 -35 --17 --59 --93 --105 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --55 --7 -33 -66 -93 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -96 -31 --21 --63 --97 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --57 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -117 -111 -105 -99 -94 -89 -83 -77 -73 -69 -64 -12 --52 --102 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --112 --107 --50 -9 -58 -97 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -67 -14 --30 --66 --95 --102 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --43 -5 -45 -77 -103 -123 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -116 -109 -104 -98 -92 -87 -81 -76 -72 -67 -15 --50 --100 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --49 --7 -28 -56 -79 -96 -109 -119 -125 -127 -127 -127 -127 -127 -75 -11 --39 --80 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --110 --105 --99 --111 --106 --33 -24 -72 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -74 -20 --24 --61 --90 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --40 -8 -47 -79 -105 -125 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -116 -111 -105 -99 -93 -87 -82 -77 -72 -67 -15 --49 --99 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --112 --106 --49 -9 -58 -98 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -119 -112 -106 -99 -93 -87 -82 -29 --37 --87 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --109 --104 --47 -11 -60 -99 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -119 -112 -106 -99 -93 -88 -82 -30 --36 --87 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --109 --104 --47 -11 -60 -99 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -69 -15 --29 --65 --95 --102 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --42 -5 -45 -77 -103 -123 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -116 -109 -104 -98 -92 -87 -81 -76 -72 -67 -15 --50 --99 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --49 --7 -28 -56 -78 -95 -109 -118 -124 -127 -127 -127 -127 -127 -76 -11 --39 --80 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --110 --105 --100 --111 --106 --33 -24 -72 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -74 -20 --25 --61 --90 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --40 -8 -47 -79 -105 -125 -127 -127 -127 -127 -127 -127 -127 -127 -127 -102 -36 --16 --58 --93 --104 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --55 --7 -33 -66 -93 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -118 -112 -106 -101 -95 -89 -84 -79 -74 -69 -64 -13 --52 --102 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --106 --49 -9 -58 -98 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -119 -112 -106 -99 -93 -87 -82 -30 --36 --87 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --95 --45 --3 -32 -60 -82 -99 -111 -121 -127 -127 -127 -127 -127 -127 -77 -13 --37 --78 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --109 --104 --99 --110 --105 --33 -24 -73 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -74 -20 --25 --61 --90 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --40 -8 -47 -79 -105 -125 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -116 -111 -105 -99 -93 -87 -82 -77 -72 -67 -15 --49 --99 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --49 --7 -28 -56 -79 -96 -109 -119 -125 -127 -127 -127 -127 -127 -76 -11 --39 --80 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --107 --65 --16 -25 -58 -85 -105 -121 -127 -127 -127 -127 -127 -127 -127 -127 -91 -26 --25 --67 --101 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --111 --106 --101 --97 --108 --103 --31 -27 -75 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -75 -21 --23 --60 --89 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --39 -8 -48 -79 -105 -125 -127 -127 -127 -127 -127 -127 -127 -127 -127 -104 -37 --14 --57 --91 --103 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --55 --7 -33 -65 -91 -111 -125 -127 -127 -127 -127 -127 -127 -127 -127 -91 -26 --25 --67 --101 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --101 --59 --11 -31 -63 -89 -109 -126 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -115 -109 -104 -98 -93 -88 -82 -77 -73 -67 -63 -12 --53 --102 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --101 --50 --8 -27 -55 -77 -95 -107 -117 -123 -127 -127 -127 -127 -126 -75 -10 --40 --81 --98 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --107 --65 --16 -25 -58 -85 -105 -121 -127 -127 -127 -127 -127 -127 -127 -127 -91 -26 --25 --67 --101 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --59 --10 -31 -63 -90 -110 -126 -127 -127 -127 -127 -127 -127 -127 -127 -93 -28 --23 --65 --99 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --111 --106 --101 --111 --107 --103 --30 -27 -76 -115 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -120 -113 -106 -100 -94 -88 -35 --31 --82 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --92 --42 --1 -34 -62 -84 -101 -114 -123 -127 -127 -127 -127 -127 -127 -79 -14 --36 --77 --111 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --110 --104 --99 --110 --106 --33 -24 -72 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -116 -109 -103 -96 -90 -85 -32 --34 --85 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --93 --43 --1 -33 -61 -83 -101 -113 -123 -127 -127 -127 -127 -127 -127 -79 -14 --37 --78 --111 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --106 --64 --15 -25 -59 -85 -106 -122 -127 -127 -127 -127 -127 -127 -127 -127 -92 -27 --24 --66 --101 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --101 --59 --11 -30 -63 -89 -109 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --99 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --111 --106 --101 --112 --108 --104 --31 -27 -74 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -75 -21 --23 --60 --89 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --96 --39 -8 -48 -80 -105 -125 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -117 -111 -105 -99 -93 -87 -82 -77 -72 -67 -16 --49 --99 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --112 --107 --49 -9 -59 -98 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -68 -14 --30 --66 --95 --102 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --43 -5 -45 -77 -103 -123 -127 -127 -127 -127 -127 -127 -127 -127 -127 -101 -35 --16 --58 --93 --105 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --55 --7 -33 -66 -93 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -31 --21 --63 --97 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --57 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --99 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -30 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -90 -110 -126 -127 -127 -127 -127 -127 -127 -127 -127 -94 -28 --23 --65 --99 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --58 --10 -31 -63 -90 -111 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --58 --10 -31 -63 -91 -111 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --58 --10 -31 -64 -91 -111 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --99 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --57 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -94 -29 --23 --64 --99 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -117 -111 -105 -99 -94 -89 -83 -77 -73 -69 -64 -13 --52 --102 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --107 --49 -9 -58 -97 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -68 -15 --29 --66 --95 --102 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --43 -5 -45 -77 -103 -123 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -116 -109 -104 -98 -92 -87 -81 -76 -71 -66 -15 --50 --100 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --49 --7 -28 -56 -78 -96 -109 -119 -125 -127 -127 -127 -127 -127 -76 -11 --39 --80 --98 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --110 --105 --100 --111 --106 --34 -23 -71 -109 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -69 -15 --29 --65 --94 --101 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --41 -6 -46 -78 -104 -123 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -115 -109 -104 -98 -92 -87 -81 -76 -71 -67 -15 --49 --99 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --111 --106 --49 -9 -59 -98 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -119 -111 -105 -98 -93 -87 -81 -29 --37 --88 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --110 --104 --47 -11 -59 -99 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -119 -112 -106 -99 -93 -88 -82 -29 --36 --87 --111 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --112 --107 --101 --44 -14 -63 -102 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -69 -15 --29 --65 --94 --101 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --42 -6 -45 -77 -103 -123 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -116 -110 -104 -98 -92 -87 -82 -77 -72 -67 -15 --50 --100 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --49 --7 -28 -56 -78 -96 -109 -119 -125 -127 -127 -127 -127 -127 -76 -11 --39 --80 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --110 --105 --100 --111 --107 --33 -24 -72 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -74 -20 --25 --61 --90 --98 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --40 -8 -47 -79 -105 -125 -127 -127 -127 -127 -127 -127 -127 -127 -127 -103 -37 --15 --57 --92 --103 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --55 --7 -34 -67 -93 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -117 -111 -106 -100 -95 -89 -84 -79 -74 -69 -64 -13 --52 --101 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --106 --49 -9 -59 -98 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -119 -111 -105 -99 -93 -87 -81 -29 --37 --87 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --95 --45 --2 -32 -60 -82 -99 -111 -121 -127 -127 -127 -127 -127 -127 -77 -13 --37 --78 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --109 --105 --99 --110 --106 --33 -24 -72 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -74 -20 --24 --61 --90 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --40 -8 -47 -79 -105 -125 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -117 -111 -105 -99 -93 -87 -82 -77 -72 -67 -15 --49 --100 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --49 --7 -28 -56 -79 -96 -109 -119 -125 -127 -127 -127 -127 -127 -76 -11 --39 --80 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --107 --65 --17 -24 -58 -84 -105 -121 -127 -127 -127 -127 -127 -127 -127 -127 -91 -26 --25 --66 --101 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --107 --102 --97 --108 --103 --31 -27 -74 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -75 -21 --23 --60 --89 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --39 -8 -48 -79 -105 -125 -127 -127 -127 -127 -127 -127 -127 -127 -127 -103 -37 --15 --57 --92 --103 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --55 --6 -34 -67 -93 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -96 -31 --21 --62 --97 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --57 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -116 -110 -105 -99 -94 -88 -83 -77 -73 -67 -63 -12 --53 --103 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --101 --50 --8 -27 -55 -77 -95 -108 -118 -123 -127 -127 -127 -127 -126 -74 -10 --40 --81 --98 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --107 --65 --17 -24 -58 -85 -105 -121 -127 -127 -127 -127 -127 -127 -127 -127 -91 -26 --25 --67 --101 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --101 --59 --11 -30 -63 -89 -109 -125 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --23 --64 --99 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --111 --106 --101 --112 --107 --103 --31 -27 -74 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -124 -117 -110 -104 -97 -91 -86 -33 --33 --84 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --93 --43 --1 -33 -61 -83 -100 -113 -122 -127 -127 -127 -127 -127 -127 -79 -14 --36 --77 --111 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --110 --104 --99 --111 --105 --33 -24 -72 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -116 -109 -103 -96 -90 -85 -32 --34 --84 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --93 --43 --1 -33 -61 -83 -101 -113 -123 -127 -127 -127 -127 -127 -127 -77 -13 --37 --78 --111 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --106 --64 --15 -25 -59 -85 -106 -122 -127 -127 -127 -127 -127 -127 -127 -127 -91 -27 --24 --66 --101 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --101 --59 --10 -30 -63 -89 -109 -126 -127 -127 -127 -127 -127 -127 -127 -127 -94 -29 --23 --64 --99 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --112 --106 --101 --112 --108 --103 --31 -27 -74 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -71 -17 --28 --64 --93 --100 --128 --128 --128 --128 --128 --128 --128 --128 --128 --98 --41 -7 -47 -78 -104 -123 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -115 -109 -104 -98 -92 -87 -81 -77 -72 -67 -15 --49 --99 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --112 --106 --49 -10 -59 -98 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -68 -14 --30 --66 --95 --103 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --43 -5 -45 -77 -103 -123 -127 -127 -127 -127 -127 -127 -127 -127 -127 -101 -36 --16 --58 --93 --105 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --55 --7 -33 -66 -93 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -96 -31 --21 --63 --97 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --57 --8 -33 -66 -93 -115 -127 -127 -127 -127 -127 -127 -127 -127 -127 -101 -35 --17 --59 --93 --105 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --56 --7 -33 -66 -92 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -30 --21 --63 --97 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -30 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --58 --9 -31 -64 -90 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -30 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --99 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -63 -90 -111 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --99 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -90 -111 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -30 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --58 --9 -31 -64 -91 -111 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -30 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -117 -111 -105 -99 -94 -88 -83 -77 -73 -69 -64 -13 --52 --102 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --112 --107 --49 -9 -58 -98 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -67 -14 --30 --67 --95 --103 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --43 -5 -45 -77 -103 -123 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -116 -109 -104 -98 -92 -87 -81 -76 -71 -67 -15 --50 --100 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --49 --7 -28 -56 -78 -96 -109 -119 -125 -127 -127 -127 -127 -127 -75 -11 --39 --80 --98 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --110 --105 --99 --111 --107 --34 -24 -72 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -74 -20 --24 --61 --90 --98 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --40 -7 -47 -79 -105 -123 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -116 -109 -104 -98 -92 -87 -81 -76 -71 -67 -15 --50 --99 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --112 --106 --49 -9 -58 -98 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -119 -112 -106 -99 -93 -87 -82 -29 --37 --87 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --109 --104 --47 -11 -60 -99 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -119 -112 -106 -99 -94 -88 -82 -30 --36 --87 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --109 --103 --46 -12 -60 -100 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -68 -15 --30 --66 --95 --102 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --42 -6 -45 -77 -103 -123 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -115 -110 -104 -98 -92 -87 -81 -76 -72 -67 -15 --50 --100 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --49 --7 -27 -56 -77 -95 -109 -118 -124 -127 -127 -127 -127 -127 -76 -11 --39 --80 --98 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --110 --105 --100 --111 --106 --34 -24 -72 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -74 -20 --24 --61 --90 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --40 -8 -47 -79 -105 -125 -127 -127 -127 -127 -127 -127 -127 -127 -127 -103 -37 --15 --57 --92 --103 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --112 --55 --6 -34 -67 -93 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -119 -112 -107 -101 -95 -89 -84 -79 -74 -69 -64 -13 --52 --102 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --109 --51 -7 -57 -96 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -118 -111 -105 -98 -93 -86 -81 -29 --37 --87 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --95 --45 --3 -31 -60 -82 -99 -111 -121 -127 -127 -127 -127 -127 -127 -77 -13 --37 --78 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --110 --105 --99 --111 --106 --33 -24 -72 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -74 -20 --25 --61 --90 --98 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --40 -8 -47 -79 -105 -124 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -116 -111 -104 -99 -93 -87 -82 -77 -72 -67 -15 --49 --99 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --95 --44 --2 -32 -61 -83 -100 -112 -122 -127 -127 -127 -127 -127 -127 -78 -14 --37 --78 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --106 --64 --15 -25 -59 -85 -106 -122 -127 -127 -127 -127 -127 -127 -127 -127 -91 -26 --25 --66 --101 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --112 --106 --101 --97 --108 --103 --31 -27 -74 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -75 -21 --23 --60 --89 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --40 -8 -47 -79 -105 -125 -127 -127 -127 -127 -127 -127 -127 -127 -127 -103 -37 --15 --57 --92 --103 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --55 --7 -34 -67 -93 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -96 -31 --21 --63 --97 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --57 --9 -32 -65 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -117 -111 -105 -99 -95 -89 -83 -78 -74 -69 -64 -13 --52 --102 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --101 --50 --8 -27 -55 -77 -95 -108 -117 -123 -127 -127 -127 -127 -127 -76 -11 --39 --80 --98 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --108 --65 --17 -24 -58 -84 -105 -121 -127 -127 -127 -127 -127 -127 -127 -127 -91 -26 --25 --67 --101 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --101 --59 --11 -30 -63 -89 -109 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --112 --106 --101 --112 --108 --103 --31 -27 -74 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -124 -117 -109 -103 -97 -91 -85 -33 --34 --84 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --93 --43 --1 -33 -61 -83 -101 -113 -123 -127 -127 -127 -127 -127 -127 -79 -14 --36 --77 --111 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --109 --104 --99 --111 --106 --33 -24 -72 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -116 -109 -103 -96 -91 -85 -32 --33 --84 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --93 --43 --1 -33 -61 -83 -101 -113 -123 -127 -127 -127 -127 -127 -127 -77 -13 --37 --78 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --107 --65 --16 -25 -59 -85 -106 -122 -127 -127 -127 -127 -127 -127 -127 -127 -91 -27 --24 --66 --101 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --101 --59 --11 -30 -63 -89 -109 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --99 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --112 --106 --101 --112 --108 --103 --31 -27 -74 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -75 -21 --23 --60 --89 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --96 --40 -8 -47 -79 -105 -125 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -116 -109 -104 -98 -93 -87 -82 -77 -72 -67 -15 --50 --100 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --112 --106 --49 -9 -58 -98 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -67 -14 --30 --66 --95 --103 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --43 -5 -45 -77 -103 -122 -127 -127 -127 -127 -127 -127 -127 -127 -127 -101 -35 --16 --58 --93 --105 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --55 --7 -33 -66 -93 -112 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -30 --21 --63 --97 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --57 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -30 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --99 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --57 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -30 --22 --64 --99 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -30 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --63 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -30 --21 --63 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --58 --10 -30 -63 -88 -108 -123 -127 -127 -127 -127 -127 -127 -127 -127 -90 -25 --26 --68 --103 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --101 --59 --11 -30 -63 -89 -109 -125 -127 -127 -127 -127 -127 -127 -127 -127 -93 -28 --23 --65 --100 --111 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -94 -29 --23 --64 --99 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --57 --9 -31 -65 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -65 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -117 -111 -105 -99 -94 -88 -83 -77 -73 -68 -64 -13 --52 --101 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --110 --104 --47 -11 -60 -100 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -69 -15 --29 --65 --94 --101 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --42 -5 -45 -77 -103 -123 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -116 -109 -104 -98 -92 -87 -81 -76 -71 -67 -15 --50 --100 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --49 --7 -28 -56 -78 -96 -109 -119 -125 -127 -127 -127 -127 -127 -76 -11 --39 --80 --98 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --110 --105 --99 --111 --106 --34 -24 -72 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -74 -20 --24 --61 --90 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --40 -8 -47 -79 -105 -125 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -117 -111 -105 -99 -93 -88 -82 -77 -72 -67 -16 --49 --99 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --112 --106 --49 -9 -58 -98 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -119 -111 -105 -99 -93 -87 -81 -29 --37 --87 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --110 --103 --47 -12 -60 -100 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -119 -112 -106 -99 -93 -88 -82 -30 --36 --87 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --110 --104 --47 -11 -59 -99 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -69 -15 --29 --65 --94 --102 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --43 -5 -45 -77 -103 -123 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -116 -109 -104 -98 -92 -87 -81 -76 -71 -67 -15 --50 --100 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --49 --7 -28 -56 -78 -96 -109 -119 -125 -127 -127 -127 -127 -127 -76 -11 --39 --80 --98 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --110 --105 --100 --111 --107 --34 -23 -72 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -74 -20 --25 --61 --90 --98 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --40 -8 -47 -79 -105 -125 -127 -127 -127 -127 -127 -127 -127 -127 -127 -103 -37 --15 --57 --92 --103 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --112 --55 --6 -34 -67 -93 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -117 -111 -106 -100 -95 -89 -84 -78 -73 -69 -64 -13 --52 --102 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --112 --106 --49 -9 -58 -98 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -118 -111 -105 -98 -93 -87 -81 -29 --37 --87 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --95 --44 --2 -32 -60 -82 -99 -111 -121 -127 -127 -127 -127 -127 -127 -77 -13 --37 --78 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --110 --105 --99 --111 --106 --33 -24 -72 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -74 -20 --24 --61 --90 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --40 -7 -47 -79 -105 -124 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -117 -111 -105 -99 -93 -88 -82 -77 -72 -67 -15 --49 --99 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --49 --7 -28 -56 -79 -96 -109 -119 -125 -127 -127 -127 -127 -127 -76 -11 --39 --80 --98 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --107 --65 --17 -24 -58 -84 -105 -121 -127 -127 -127 -127 -127 -127 -127 -127 -91 -26 --25 --67 --101 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --112 --106 --101 --112 --108 --103 --31 -27 -74 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -75 -21 --23 --60 --89 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --96 --39 -8 -48 -80 -106 -125 -127 -127 -127 -127 -127 -127 -127 -127 -127 -103 -37 --15 --57 --92 --103 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --55 --6 -34 -67 -93 -114 -127 -127 -127 -127 -127 -127 -127 -127 -127 -96 -31 --21 --63 --97 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --57 --9 -31 -65 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -117 -111 -105 -99 -94 -88 -83 -77 -73 -68 -64 -13 --52 --102 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --49 --7 -27 -56 -78 -95 -109 -118 -124 -127 -127 -127 -127 -127 -75 -10 --40 --81 --100 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --112 --69 --20 -21 -54 -81 -102 -118 -127 -127 -127 -127 -127 -127 -127 -127 -89 -24 --27 --68 --102 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --102 --60 --12 -29 -62 -89 -109 -125 -127 -127 -127 -127 -127 -127 -127 -127 -94 -29 --23 --65 --99 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --111 --106 --101 --112 --107 --103 --30 -27 -75 -114 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -116 -109 -103 -97 -91 -85 -32 --33 --84 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --93 --43 --1 -33 -61 -83 -101 -113 -122 -127 -127 -127 -127 -127 -127 -79 -14 --37 --78 --111 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --110 --104 --99 --110 --105 --33 -25 -73 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -120 -113 -105 -99 -93 -87 -35 --31 --82 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --93 --43 --1 -34 -62 -83 -101 -114 -123 -127 -127 -127 -127 -127 -127 -79 -14 --36 --77 --111 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --106 --64 --15 -25 -59 -85 -106 -122 -127 -127 -127 -127 -127 -127 -127 -127 -92 -27 --24 --66 --101 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --59 --10 -31 -63 -90 -110 -126 -127 -127 -127 -127 -127 -127 -127 -127 -94 -29 --23 --64 --99 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --111 --106 --101 --112 --107 --103 --31 -27 -75 -114 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -75 -21 --23 --60 --89 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --40 -8 -48 -79 -105 -125 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -117 -111 -105 -99 -93 -88 -82 -77 -72 -67 -16 --49 --99 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --112 --106 --49 -10 -59 -98 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -68 -14 --30 --66 --95 --102 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --42 -5 -45 -77 -103 -123 -127 -127 -127 -127 -127 -127 -127 -127 -127 -101 -35 --16 --58 --93 --104 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --55 --7 -33 -66 -93 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -96 -31 --21 --63 --97 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -30 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --58 --9 -31 -63 -90 -111 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -90 -111 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -30 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -30 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --58 --9 -31 -64 -91 -111 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -30 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -30 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -30 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --58 --10 -31 -63 -91 -111 -126 -127 -127 -127 -127 -127 -127 -127 -127 -94 -29 --23 --65 --99 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --58 --10 -31 -63 -90 -110 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --58 --10 -31 -63 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --10 -31 -63 -91 -111 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -30 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --58 --9 -31 -64 -91 -111 -126 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -117 -111 -105 -99 -94 -89 -83 -77 -73 -68 -64 -13 --52 --102 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --112 --106 --49 -9 -59 -98 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -68 -14 --30 --66 --95 --102 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --42 -5 -45 -77 -103 -123 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -116 -109 -103 -98 -92 -87 -81 -76 -71 -67 -15 --50 --100 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --49 --7 -27 -56 -78 -95 -109 -118 -124 -127 -127 -127 -127 -127 -76 -11 --39 --80 --98 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --110 --105 --100 --111 --106 --33 -24 -72 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -75 -20 --24 --61 --90 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --40 -8 -47 -79 -105 -125 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -116 -111 -105 -99 -93 -87 -82 -77 -72 -67 -15 --49 --99 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --112 --106 --49 -9 -58 -97 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -115 -109 -103 -96 -91 -85 -79 -27 --38 --89 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --110 --104 --47 -11 -60 -100 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -119 -111 -105 -99 -93 -87 -82 -29 --36 --87 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --110 --104 --47 -12 -60 -100 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -69 -15 --29 --65 --95 --102 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --42 -5 -45 -77 -103 -123 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -116 -109 -104 -98 -92 -87 -81 -76 -71 -67 -15 --49 --99 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --95 --45 --3 -32 -60 -82 -99 -112 -122 -127 -127 -127 -127 -127 -127 -77 -13 --37 --78 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --109 --105 --99 --110 --106 --33 -24 -72 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -74 -20 --24 --61 --90 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --40 -8 -47 -79 -105 -125 -127 -127 -127 -127 -127 -127 -127 -127 -127 -102 -37 --15 --57 --92 --103 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --55 --6 -34 -67 -93 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -118 -111 -106 -101 -95 -89 -84 -79 -74 -69 -64 -13 --52 --102 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --112 --106 --49 -9 -58 -97 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -119 -112 -105 -99 -93 -87 -82 -29 --37 --87 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --95 --44 --2 -32 -61 -82 -99 -111 -121 -127 -127 -127 -127 -127 -127 -77 -13 --37 --78 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --110 --104 --99 --111 --106 --33 -24 -72 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -74 -20 --24 --61 --90 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --40 -8 -47 -79 -105 -125 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -116 -111 -105 -99 -93 -87 -82 -77 -72 -67 -15 --49 --99 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --49 --7 -28 -56 -79 -96 -109 -119 -125 -127 -127 -127 -127 -127 -76 -11 --39 --80 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --107 --65 --17 -24 -58 -85 -105 -121 -127 -127 -127 -127 -127 -127 -127 -127 -91 -26 --25 --66 --101 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --112 --107 --102 --97 --108 --104 --31 -26 -74 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -75 -21 --24 --61 --89 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --40 -8 -48 -79 -105 -125 -127 -127 -127 -127 -127 -127 -127 -127 -127 -103 -37 --15 --57 --92 --103 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --112 --55 --6 -34 -67 -93 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -97 -31 --20 --62 --97 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --57 --8 -32 -65 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -117 -111 -105 -99 -94 -88 -83 -77 -73 -68 -63 -13 --53 --102 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --101 --50 --8 -27 -55 -77 -95 -108 -117 -123 -127 -127 -127 -127 -127 -75 -11 --39 --80 --98 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --107 --65 --16 -25 -58 -85 -105 -121 -127 -127 -127 -127 -127 -127 -127 -127 -91 -26 --25 --67 --101 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --101 --60 --11 -29 -62 -89 -109 -125 -127 -127 -127 -127 -127 -127 -127 -127 -94 -29 --23 --65 --99 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --112 --107 --101 --112 --108 --103 --31 -26 -74 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -117 -109 -104 -97 -91 -85 -33 --33 --84 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --93 --43 --1 -33 -61 -83 -101 -113 -123 -127 -127 -127 -127 -127 -127 -79 -14 --36 --77 --111 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --109 --104 --99 --110 --106 --33 -24 -72 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -116 -109 -103 -97 -91 -85 -32 --34 --84 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --94 --44 --1 -33 -61 -83 -100 -113 -122 -127 -127 -127 -127 -127 -127 -78 -14 --37 --78 --111 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --106 --64 --15 -25 -59 -85 -106 -122 -127 -127 -127 -127 -127 -127 -127 -127 -91 -27 --24 --66 --101 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --101 --59 --11 -30 -63 -89 -109 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --99 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --111 --106 --101 --112 --107 --103 --31 -27 -75 -114 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -76 -21 --23 --59 --89 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --96 --39 -9 -48 -79 -105 -125 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -117 -110 -105 -99 -93 -87 -82 -77 -72 -67 -15 --49 --99 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --111 --106 --49 -9 -58 -97 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -63 -9 --35 --70 --99 --107 --128 --128 --128 --128 --128 --128 --128 --128 --128 --101 --44 -3 -43 -76 -101 -121 -127 -127 -127 -127 -127 -127 -127 -127 -127 -100 -34 --17 --59 --94 --106 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --55 --7 -33 -66 -93 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -30 --22 --63 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --57 --9 -31 -65 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --99 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --57 --8 -32 -65 -93 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -100 -34 --17 --59 --93 --105 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --55 --7 -33 -66 -93 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -96 -31 --21 --63 --97 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --57 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -30 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --58 --10 -31 -64 -91 -111 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -30 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --99 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --99 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --99 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --10 -31 -64 -91 -111 -126 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -117 -111 -105 -99 -94 -88 -83 -77 -73 -68 -63 -13 --53 --102 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --107 --49 -9 -58 -98 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -68 -14 --30 --66 --95 --102 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --43 -5 -45 -77 -103 -123 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -116 -109 -104 -98 -92 -87 -81 -77 -72 -67 -15 --50 --100 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --49 --7 -28 -56 -79 -96 -109 -119 -125 -127 -127 -127 -127 -127 -76 -11 --39 --80 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --110 --105 --99 --111 --106 --33 -24 -72 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -74 -20 --25 --61 --90 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --40 -8 -47 -79 -105 -125 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -117 -111 -105 -99 -93 -87 -82 -77 -72 -67 -16 --49 --99 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --112 --106 --49 -10 -59 -98 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -119 -112 -106 -99 -93 -87 -82 -29 --37 --88 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --110 --105 --47 -11 -59 -99 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -119 -112 -106 -99 -93 -87 -81 -29 --37 --87 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --110 --104 --47 -11 -60 -99 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -69 -15 --29 --65 --94 --101 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --42 -5 -45 -77 -103 -123 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -116 -109 -104 -98 -92 -87 -82 -77 -72 -67 -15 --49 --100 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --49 --7 -28 -56 -78 -96 -109 -119 -125 -127 -127 -127 -127 -127 -76 -11 --39 --80 --98 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --110 --105 --100 --111 --106 --34 -24 -72 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -74 -20 --25 --61 --90 --98 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --40 -8 -47 -79 -105 -125 -127 -127 -127 -127 -127 -127 -127 -127 -127 -103 -37 --15 --57 --92 --103 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --112 --55 --6 -34 -67 -93 -114 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -118 -112 -106 -101 -95 -89 -84 -79 -74 -69 -64 -13 --52 --101 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --107 --49 -9 -58 -97 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -119 -111 -105 -99 -93 -87 -81 -29 --37 --87 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --94 --44 --2 -32 -61 -83 -99 -112 -121 -127 -127 -127 -127 -127 -127 -77 -13 --37 --79 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --112 --106 --101 --112 --108 --35 -23 -71 -109 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -73 -19 --25 --62 --91 --98 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --40 -8 -47 -79 -105 -124 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -116 -109 -104 -98 -92 -87 -81 -77 -72 -67 -15 --49 --99 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --49 --7 -28 -56 -78 -95 -109 -118 -124 -127 -127 -127 -127 -127 -76 -11 --39 --80 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --107 --65 --16 -25 -58 -85 -105 -121 -127 -127 -127 -127 -127 -127 -127 -127 -91 -26 --25 --66 --101 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --112 --107 --102 --97 --108 --103 --31 -27 -75 -115 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -80 -26 --19 --56 --85 --109 --111 --128 --128 --128 --128 --128 --128 --128 --128 --94 --37 -10 -50 -81 -107 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -104 -38 --14 --56 --91 --102 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --112 --55 --6 -34 -67 -93 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -97 -31 --20 --62 --97 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --57 --9 -31 -65 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -117 -111 -105 -99 -94 -88 -83 -77 -73 -68 -63 -12 --53 --102 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --101 --50 --8 -27 -55 -77 -95 -108 -117 -123 -127 -127 -127 -127 -127 -75 -11 --39 --80 --98 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --107 --65 --17 -25 -58 -85 -105 -121 -127 -127 -127 -127 -127 -127 -127 -127 -91 -26 --25 --66 --101 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --101 --59 --11 -30 -63 -89 -109 -125 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --99 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --111 --106 --101 --112 --108 --103 --31 -27 -75 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -124 -117 -110 -104 -97 -91 -85 -33 --33 --84 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --94 --43 --1 -33 -61 -83 -101 -113 -122 -127 -127 -127 -127 -127 -127 -79 -14 --36 --77 --111 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --109 --104 --99 --111 --106 --33 -24 -72 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -116 -109 -103 -96 -90 -85 -32 --34 --85 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --93 --43 --1 -33 -61 -83 -101 -113 -123 -127 -127 -127 -127 -127 -127 -78 -13 --37 --78 --111 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --107 --65 --16 -25 -59 -85 -105 -121 -127 -127 -127 -127 -127 -127 -127 -127 -92 -27 --24 --66 --101 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --59 --10 -30 -63 -89 -109 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --99 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --111 --106 --101 --112 --108 --103 --31 -27 -75 -114 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -75 -21 --23 --60 --89 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --96 --39 -8 -48 -79 -105 -125 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -116 -111 -104 -99 -93 -87 -82 -77 -72 -67 -15 --49 --99 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --112 --106 --49 -10 -59 -98 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -67 -14 --30 --66 --95 --102 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --43 -5 -45 -77 -102 -122 -127 -127 -127 -127 -127 -127 -127 -127 -127 -101 -35 --17 --59 --94 --105 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --56 --7 -33 -66 -92 -112 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -30 --21 --63 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --58 --9 -31 -63 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -30 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --10 -31 -63 -90 -110 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -90 -111 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --58 --9 -31 -63 -91 -111 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --23 --64 --99 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -30 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -30 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -90 -111 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -30 --22 --63 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --10 -31 -63 -89 -109 -124 -127 -127 -127 -127 -127 -127 -127 -127 -91 -25 --26 --68 --102 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --101 --59 --11 -30 -63 -89 -109 -125 -127 -127 -127 -127 -127 -127 -127 -127 -93 -28 --23 --65 --99 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --58 --10 -31 -64 -91 -111 -126 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -116 -111 -105 -99 -93 -88 -83 -77 -73 -68 -63 -12 --52 --102 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --112 --107 --49 -9 -58 -98 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -68 -14 --30 --66 --95 --102 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --43 -5 -45 -77 -103 -123 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -116 -109 -104 -98 -92 -87 -81 -76 -71 -66 -15 --50 --99 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --95 --44 --2 -33 -61 -83 -101 -113 -122 -127 -127 -127 -127 -127 -127 -77 -13 --37 --78 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --109 --104 --99 --111 --106 --33 -24 -72 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -74 -20 --24 --61 --90 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --40 -8 -47 -79 -105 -125 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -117 -111 -105 -99 -93 -87 -82 -77 -72 -67 -15 --49 --99 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --112 --106 --49 -10 -59 -98 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -119 -112 -106 -99 -93 -87 -82 -29 --37 --87 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --109 --104 --47 -11 -60 -99 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -119 -113 -106 -99 -94 -88 -82 -30 --36 --87 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --109 --104 --47 -11 -60 -100 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -69 -15 --29 --66 --95 --102 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --42 -5 -45 -77 -103 -123 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -116 -109 -104 -98 -93 -87 -81 -76 -72 -67 -15 --50 --100 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --49 --7 -28 -56 -78 -96 -109 -119 -124 -127 -127 -127 -127 -127 -76 -11 --39 --80 --98 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --110 --105 --100 --111 --106 --34 -24 -72 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -74 -20 --25 --61 --90 --98 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --40 -8 -47 -79 -105 -125 -127 -127 -127 -127 -127 -127 -127 -127 -127 -104 -37 --15 --57 --92 --103 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --55 --7 -34 -67 -93 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -118 -111 -106 -101 -95 -89 -84 -79 -74 -69 -64 -13 --52 --102 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --112 --107 --49 -9 -58 -98 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -119 -111 -105 -99 -93 -87 -81 -29 --36 --87 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --95 --44 --2 -32 -61 -82 -99 -112 -121 -127 -127 -127 -127 -127 -127 -77 -13 --37 --78 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --110 --104 --99 --111 --106 --33 -24 -72 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -73 -19 --25 --62 --91 --98 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --41 -7 -47 -79 -105 -124 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -116 -111 -105 -99 -93 -87 -82 -77 -72 -67 -15 --49 --99 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --49 --7 -28 -56 -78 -96 -109 -119 -124 -127 -127 -127 -127 -127 -76 -11 --39 --80 --98 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --107 --65 --16 -25 -58 -85 -105 -121 -127 -127 -127 -127 -127 -127 -127 -127 -91 -26 --25 --67 --101 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --112 --107 --101 --112 --108 --103 --31 -27 -74 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -75 -21 --23 --61 --89 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --96 --39 -8 -48 -79 -105 -125 -127 -127 -127 -127 -127 -127 -127 -127 -127 -103 -37 --15 --57 --92 --103 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --55 --6 -34 -67 -93 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -31 --21 --63 --97 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --57 --8 -32 -65 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -117 -111 -105 -99 -94 -89 -83 -77 -73 -68 -64 -13 --52 --102 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --101 --50 --8 -27 -55 -77 -95 -108 -117 -123 -127 -127 -127 -127 -127 -75 -11 --39 --80 --98 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --107 --65 --16 -25 -58 -85 -105 -121 -127 -127 -127 -127 -127 -127 -127 -127 -91 -26 --25 --67 --101 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --101 --59 --11 -30 -63 -89 -109 -126 -127 -127 -127 -127 -127 -127 -127 -127 -94 -29 --23 --64 --99 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --111 --106 --101 --112 --108 --103 --31 -27 -74 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -120 -113 -107 -101 -95 -89 -83 -31 --35 --86 --111 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --95 --44 --2 -32 -60 -82 -99 -112 -121 -127 -127 -127 -127 -127 -127 -79 -14 --36 --78 --111 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --110 --105 --99 --110 --106 --33 -24 -72 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -115 -109 -102 -96 -90 -85 -32 --34 --84 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --93 --43 --1 -33 -61 -83 -100 -113 -122 -127 -127 -127 -127 -127 -127 -78 -13 --37 --78 --111 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --106 --64 --15 -26 -59 -86 -106 -122 -127 -127 -127 -127 -127 -127 -127 -127 -91 -27 --24 --65 --99 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --112 --54 --6 -35 -67 -94 -114 -127 -127 -127 -127 -127 -127 -127 -127 -127 -97 -31 --20 --62 --97 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --111 --105 --100 --112 --107 --103 --30 -27 -75 -114 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -75 -21 --23 --60 --89 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --39 -8 -48 -79 -106 -125 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -117 -111 -105 -99 -93 -87 -82 -77 -72 -67 -15 --49 --99 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --112 --106 --49 -10 -59 -98 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -67 -14 --30 --66 --95 --102 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --43 -5 -45 -77 -103 -123 -127 -127 -127 -127 -127 -127 -127 -127 -127 -101 -35 --16 --58 --93 --105 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --55 --7 -33 -66 -93 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -30 --21 --63 --97 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --57 --9 -32 -65 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -30 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -63 -91 -111 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -30 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --58 --10 -31 -63 -90 -111 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --99 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -30 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -30 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --99 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -90 -111 -126 -127 -127 -127 -127 -127 -127 -127 -127 -94 -29 --23 --65 --99 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --58 --10 -31 -63 -90 -111 -126 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -117 -111 -105 -99 -94 -88 -83 -77 -73 -68 -63 -12 --53 --103 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --107 --49 -9 -58 -97 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -67 -14 --30 --66 --95 --102 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --43 -5 -45 -77 -102 -122 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -115 -110 -104 -98 -92 -87 -81 -76 -71 -67 -15 --50 --100 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --49 --7 -28 -56 -78 -96 -109 -119 -124 -127 -127 -127 -127 -127 -76 -11 --39 --80 --98 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --110 --105 --99 --110 --106 --33 -24 -72 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -74 -20 --25 --61 --90 --98 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --40 -7 -47 -79 -105 -124 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -116 -111 -105 -99 -93 -87 -82 -77 -72 -67 -16 --49 --99 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --111 --105 --49 -10 -59 -98 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -119 -112 -105 -99 -93 -87 -81 -29 --37 --87 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --109 --104 --47 -11 -60 -99 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -119 -113 -106 -99 -94 -88 -82 -30 --36 --87 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --111 --106 --49 -10 -59 -98 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -67 -13 --31 --67 --95 --103 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --42 -5 -45 -77 -103 -123 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -115 -109 -103 -97 -91 -87 -81 -76 -71 -66 -15 --50 --100 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --49 --7 -27 -56 -77 -95 -109 -118 -124 -127 -127 -127 -127 -127 -76 -11 --39 --80 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --110 --105 --100 --111 --106 --33 -24 -72 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -74 -20 --24 --61 --90 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --40 -8 -48 -81 -107 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -108 -42 --10 --52 --87 --99 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --110 --53 --5 -36 -69 -95 -115 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -124 -119 -112 -107 -101 -95 -90 -84 -79 -74 -69 -64 -13 --51 --101 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --112 --106 --49 -9 -58 -98 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -119 -112 -106 -99 -93 -87 -81 -29 --37 --87 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --95 --45 --3 -32 -60 -82 -99 -112 -121 -127 -127 -127 -127 -127 -127 -77 -13 --37 --78 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --110 --104 --99 --110 --105 --33 -24 -72 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -74 -20 --25 --61 --90 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --40 -8 -47 -79 -105 -125 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -116 -111 -104 -99 -93 -87 -82 -77 -72 -67 -15 --49 --99 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --49 --7 -28 -56 -77 -95 -109 -118 -124 -127 -127 -127 -127 -127 -76 -11 --39 --80 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --107 --65 --16 -25 -59 -85 -106 -121 -127 -127 -127 -127 -127 -127 -127 -127 -91 -27 --25 --66 --101 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --112 --107 --102 --97 --108 --104 --31 -26 -74 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -75 -21 --23 --60 --89 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --40 -8 -47 -79 -105 -125 -127 -127 -127 -127 -127 -127 -127 -127 -127 -103 -37 --15 --57 --92 --103 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --112 --55 --6 -34 -67 -93 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -97 -31 --20 --62 --97 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --57 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -117 -111 -105 -99 -94 -89 -83 -78 -73 -68 -64 -13 --52 --102 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --101 --50 --8 -27 -55 -77 -95 -108 -117 -123 -127 -127 -127 -127 -127 -75 -11 --39 --81 --98 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --107 --65 --17 -24 -58 -84 -105 -121 -127 -127 -127 -127 -127 -127 -127 -127 -91 -26 --25 --67 --101 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --101 --59 --11 -30 -63 -89 -109 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --99 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --111 --106 --101 --112 --107 --103 --31 -27 -75 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -116 -109 -104 -97 -91 -85 -33 --33 --84 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --94 --44 --2 -32 -60 -82 -99 -112 -121 -127 -127 -127 -127 -127 -127 -78 -14 --37 --78 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --110 --105 --99 --111 --106 --34 -23 -72 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -116 -109 -103 -97 -90 -84 -32 --34 --85 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --94 --43 --1 -33 -61 -83 -101 -113 -123 -127 -127 -127 -127 -127 -127 -78 -14 --37 --78 --111 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --106 --64 --16 -25 -59 -85 -106 -122 -127 -127 -127 -127 -127 -127 -127 -127 -92 -27 --24 --66 --101 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --59 --11 -30 -63 -89 -109 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --99 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --112 --106 --101 --112 --108 --103 --31 -27 -75 -114 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -75 -21 --23 --60 --89 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --96 --39 -9 -48 -80 -106 -125 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -117 -111 -105 -99 -93 -87 -82 -77 -72 -67 -16 --49 --99 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --112 --106 --49 -9 -58 -98 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -68 -14 --30 --66 --95 --103 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --42 -5 -45 -77 -103 -123 -127 -127 -127 -127 -127 -127 -127 -127 -127 -102 -36 --16 --58 --93 --104 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --55 --7 -33 -66 -93 -112 -127 -127 -127 -127 -127 -127 -127 -127 -127 -96 -31 --21 --63 --97 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -63 -89 -109 -124 -127 -127 -127 -127 -127 -127 -127 -127 -90 -25 --27 --69 --102 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --101 --59 --11 -30 -63 -89 -109 -125 -127 -127 -127 -127 -127 -127 -127 -127 -94 -28 --23 --65 --99 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -94 -29 --23 --65 --99 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -30 --22 --63 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --57 --8 -32 -65 -93 -114 -127 -127 -127 -127 -127 -127 -127 -127 -127 -100 -35 --17 --59 --94 --105 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --55 --7 -33 -66 -93 -112 -127 -127 -127 -127 -127 -127 -127 -127 -127 -96 -31 --21 --63 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --57 --9 -31 -65 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --99 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --58 --9 -31 -64 -91 -111 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -90 -111 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --57 --9 -31 -64 -91 -111 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -30 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -122 -117 -111 -105 -99 -94 -88 -83 -77 -73 -68 -64 -12 --52 --102 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --112 --107 --49 -9 -58 -97 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -67 -14 --30 --66 --95 --102 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --43 -5 -45 -77 -103 -123 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -116 -109 -104 -98 -92 -87 -81 -76 -71 -67 -15 --50 --100 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --49 --7 -27 -56 -78 -95 -109 -118 -124 -127 -127 -127 -127 -127 -76 -11 --39 --80 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --110 --105 --99 --111 --106 --34 -23 -72 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -74 -20 --24 --61 --90 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --40 -8 -47 -79 -105 -124 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -116 -111 -105 -99 -93 -87 -82 -77 -72 -67 -16 --49 --99 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --112 --106 --49 -9 -58 -98 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -119 -111 -105 -99 -93 -87 -81 -29 --37 --87 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --109 --104 --47 -11 -60 -100 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -119 -112 -106 -99 -93 -88 -82 -30 --36 --87 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --109 --104 --47 -12 -60 -100 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -67 -14 --30 --67 --95 --103 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --43 -5 -45 -77 -102 -122 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -115 -109 -104 -98 -92 -87 -81 -76 -71 -66 -15 --50 --100 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --49 --7 -28 -56 -79 -96 -109 -118 -125 -127 -127 -127 -127 -127 -75 -10 --40 --81 --98 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --109 --104 --99 --111 --106 --33 -24 -72 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -74 -20 --25 --61 --90 --98 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --40 -8 -47 -79 -105 -125 -127 -127 -127 -127 -127 -127 -127 -127 -127 -103 -37 --15 --57 --92 --103 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --55 --6 -34 -67 -93 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -118 -111 -106 -100 -95 -89 -84 -79 -74 -69 -64 -13 --52 --101 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --112 --106 --49 -9 -59 -98 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -125 -119 -111 -105 -99 -93 -87 -82 -30 --36 --87 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --95 --44 --2 -32 -61 -82 -99 -111 -121 -127 -127 -127 -127 -127 -127 -77 -13 --37 --78 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --110 --105 --99 --111 --106 --33 -24 -72 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -74 -20 --24 --61 --90 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --40 -8 -47 -79 -105 -125 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -117 -111 -105 -99 -93 -88 -82 -77 -72 -67 -15 --49 --100 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --104 --53 --11 -24 -52 -74 -92 -105 -115 -121 -126 -127 -127 -127 -125 -74 -9 --41 --81 --99 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --108 --66 --17 -24 -57 -83 -105 -120 -127 -127 -127 -127 -127 -127 -127 -127 -91 -26 --25 --67 --101 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --107 --102 --97 --108 --103 --31 -26 -74 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -75 -21 --23 --60 --89 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --40 -8 -48 -80 -106 -125 -127 -127 -127 -127 -127 -127 -127 -127 -127 -103 -37 --15 --57 --92 --103 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --55 --7 -34 -67 -93 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -97 -31 --20 --62 --97 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --98 --56 --7 -33 -67 -94 -115 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -115 -109 -103 -97 -91 -86 -81 -75 -71 -66 -15 --50 --101 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --49 --7 -28 -56 -78 -96 -109 -118 -124 -127 -127 -127 -127 -127 -75 -11 --39 --80 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --107 --65 --17 -25 -58 -85 -105 -121 -127 -127 -127 -127 -127 -127 -127 -127 -91 -27 --25 --66 --101 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --101 --59 --11 -30 -63 -89 -109 -125 -127 -127 -127 -127 -127 -127 -127 -127 -94 -28 --23 --65 --99 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --111 --106 --101 --112 --108 --103 --31 -27 -75 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -124 -117 -109 -104 -97 -91 -85 -33 --33 --84 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --93 --43 --1 -33 -61 -83 -101 -113 -123 -127 -127 -127 -127 -127 -127 -79 -14 --36 --77 --111 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --109 --104 --99 --111 --106 --33 -24 -72 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -116 -109 -103 -96 -90 -85 -32 --34 --85 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --94 --44 --1 -33 -61 -83 -101 -113 -122 -127 -127 -127 -127 -127 -127 -77 -13 --37 --78 --111 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --106 --64 --16 -25 -59 -85 -106 -122 -127 -127 -127 -127 -127 -127 -127 -127 -91 -27 --24 --66 --101 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --101 --59 --11 -30 -63 -89 -109 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --99 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --112 --106 --101 --112 --108 --103 --31 -27 -74 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -75 -21 --23 --60 --89 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --96 --39 -8 -48 -80 -105 -125 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -117 -111 -105 -99 -93 -88 -82 -77 -72 -67 -15 --49 --99 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --112 --106 --49 -9 -59 -98 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -67 -13 --30 --66 --96 --103 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --42 -5 -45 -77 -103 -123 -127 -127 -127 -127 -127 -127 -127 -127 -127 -101 -36 --16 --58 --93 --104 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --55 --7 -33 -66 -93 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -96 -31 --21 --63 --97 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --57 --9 -31 -65 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -94 -29 --23 --65 --99 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --58 --10 -31 -63 -90 -110 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --58 --10 -31 -63 -90 -111 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --58 --9 -31 -64 -91 -111 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -90 -111 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --99 --110 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -126 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --99 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -65 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -29 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -30 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -64 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -95 -30 --22 --64 --98 --109 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --58 --9 -31 -63 -90 -111 -126 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -117 -111 -105 -99 -94 -89 -83 -78 -73 -68 -64 -13 --52 --102 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --109 --51 -7 -56 -96 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -67 -13 --31 --68 --96 --103 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --43 -5 -45 -77 -102 -123 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -115 -109 -103 -97 -91 -86 -81 -76 -71 -66 -15 --50 --100 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --49 --7 -28 -56 -78 -95 -109 -118 -124 -127 -127 -127 -127 -126 -75 -11 --39 --80 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --110 --105 --100 --111 --106 --34 -24 -72 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -74 -20 --24 --61 --90 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --40 -8 -48 -80 -106 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -115 -109 -102 -96 -91 -85 -80 -75 -70 -19 --47 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --111 --105 --48 -10 -59 -99 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -119 -112 -105 -99 -93 -87 -81 -29 --37 --87 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --109 --104 --47 -11 -60 -99 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -119 -112 -106 -99 -93 -88 -82 -30 --36 --87 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --109 --104 --47 -11 -60 -99 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -69 -15 --29 --65 --95 --102 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --42 -5 -45 -77 -103 -123 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -121 -116 -109 -104 -98 -92 -87 -81 -76 -71 -67 -15 --50 --100 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --50 --7 -27 -56 -78 -95 -109 -118 -124 -127 -127 -127 -127 -127 -75 -11 --39 --80 --98 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --110 --105 --99 --111 --107 --34 -24 -72 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -74 -20 --25 --61 --90 --98 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --40 -8 -47 -79 -105 -125 -127 -127 -127 -127 -127 -127 -127 -127 -127 -103 -37 --15 --57 --92 --103 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --55 --7 -34 -66 -93 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -117 -111 -106 -100 -95 -89 -84 -78 -73 -69 -64 -13 --52 --102 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --106 --49 -9 -58 -98 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -126 -119 -112 -105 -99 -93 -88 -82 -29 --36 --87 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --95 --44 --2 -32 -60 -82 -99 -112 -121 -127 -127 -127 -127 -127 -127 -78 -13 --37 --78 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --110 --104 --99 --111 --106 --34 -24 -72 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -74 -20 --25 --61 --90 --98 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --40 -8 -47 -79 -105 -125 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -117 -111 -105 -99 -93 -87 -82 -77 -72 -67 -15 --49 --99 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --100 --49 --7 -28 -56 -78 -96 -109 -118 -124 -127 -127 -127 -127 -127 -76 -11 --39 --80 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --108 --66 --17 -24 -57 -84 -105 -120 -127 -127 -127 -127 -127 -127 -127 -127 -91 -25 --25 --67 --101 --112 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --107 --102 --97 --108 --104 --32 -26 -74 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -75 -21 --23 --60 --89 --97 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --40 -8 -47 -79 -105 -125 -127 -127 -127 -127 -127 -127 -127 -127 -127 -104 -37 --15 --57 --92 --103 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --97 --55 --7 -34 -67 -93 -113 -127 -127 -127 -127 -127 -127 -127 -127 -127 -96 -31 --21 --62 --97 --108 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --99 --57 --9 -31 -65 -91 -111 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -127 -123 -117 -111 -105 -99 -94 -89 -83 -78 -73 -69 -64 -13 --52 --102 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --101 --50 --8 -27 -55 -77 -95 -108 -117 -123 -127 -127 -127 -127 -127 -75 -11 --39 --80 --98 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --128 --107 --65 --17 -24 -58 -84 -105 -121 -127 -127 -127 -127 -127 -127 -127 -127 -91 -27 --24 --66 --101 --111 --128 --128 --128 --128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-111 +-105 +-48 +10 +59 +99 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +69 +15 +-29 +-65 +-94 +-101 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-42 +5 +45 +77 +103 +123 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +116 +109 +104 +98 +93 +87 +82 +76 +72 +67 +15 +-49 +-99 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-49 +-7 +28 +56 +79 +96 +109 +119 +125 +127 +127 +127 +127 +127 +76 +11 +-39 +-80 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-110 +-104 +-100 +-111 +-106 +-34 +24 +72 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +74 +20 +-24 +-61 +-90 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-40 +8 +47 +79 +105 +125 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +117 +111 +105 +99 +93 +88 +82 +77 +72 +67 +15 +-50 +-101 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-108 +-50 +8 +57 +97 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +118 +111 +105 +98 +92 +86 +81 +29 +-37 +-88 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-110 +-104 +-47 +11 +59 +99 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +119 +112 +106 +99 +93 +87 +81 +29 +-37 +-87 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-109 +-104 +-47 +11 +60 +99 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +68 +14 +-30 +-66 +-95 +-102 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-98 +-41 +7 +47 +79 +105 +125 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +120 +113 +108 +101 +95 +90 +84 +79 +74 +69 +18 +-47 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-48 +-6 +29 +57 +79 +96 +109 +119 +125 +127 +127 +127 +127 +127 +77 +12 +-38 +-79 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-109 +-104 +-99 +-111 +-106 +-34 +23 +72 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +73 +20 +-25 +-61 +-90 +-98 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-40 +8 +47 +79 +105 +125 +127 +127 +127 +127 +127 +127 +127 +127 +127 +103 +37 +-15 +-57 +-93 +-103 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-55 +-7 +34 +67 +93 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +118 +111 +106 +101 +95 +89 +84 +79 +74 +69 +64 +13 +-52 +-101 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-112 +-107 +-49 +9 +58 +98 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +119 +112 +105 +99 +93 +87 +81 +29 +-37 +-87 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-95 +-44 +-2 +32 +60 +82 +99 +112 +121 +127 +127 +127 +127 +127 +127 +77 +13 +-37 +-78 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-110 +-105 +-99 +-110 +-106 +-33 +24 +72 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +74 +20 +-24 +-61 +-90 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-40 +7 +47 +79 +105 +125 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +117 +111 +105 +99 +93 +87 +82 +77 +72 +67 +16 +-49 +-99 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-49 +-7 +28 +56 +79 +96 +109 +119 +124 +127 +127 +127 +127 +127 +75 +11 +-39 +-80 +-98 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-107 +-65 +-17 +24 +58 +84 +105 +121 +127 +127 +127 +127 +127 +127 +127 +127 +91 +27 +-24 +-66 +-101 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-112 +-107 +-102 +-112 +-108 +-104 +-31 +27 +74 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +75 +21 +-23 +-60 +-89 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-39 +8 +48 +80 +105 +125 +127 +127 +127 +127 +127 +127 +127 +127 +127 +103 +37 +-15 +-57 +-92 +-103 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-112 +-55 +-6 +34 +67 +93 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +96 +31 +-21 +-63 +-97 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +65 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +117 +111 +105 +99 +94 +88 +83 +77 +73 +68 +64 +13 +-52 +-102 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-101 +-50 +-8 +27 +56 +77 +95 +108 +118 +123 +127 +127 +127 +127 +127 +75 +11 +-39 +-80 +-98 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-108 +-66 +-17 +24 +57 +84 +105 +121 +127 +127 +127 +127 +127 +127 +127 +127 +91 +26 +-25 +-67 +-101 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-101 +-59 +-11 +30 +63 +89 +109 +126 +127 +127 +127 +127 +127 +127 +127 +127 +94 +29 +-23 +-64 +-99 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-111 +-106 +-101 +-112 +-108 +-103 +-31 +27 +75 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +117 +109 +104 +97 +91 +85 +33 +-33 +-84 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-93 +-43 +-1 +33 +61 +83 +101 +113 +122 +127 +127 +127 +127 +127 +127 +79 +15 +-36 +-77 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-109 +-104 +-99 +-111 +-106 +-33 +24 +72 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +116 +109 +103 +96 +90 +85 +32 +-34 +-84 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-93 +-43 +-1 +33 +61 +83 +101 +113 +122 +127 +127 +127 +127 +127 +127 +78 +14 +-37 +-78 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-106 +-64 +-15 +25 +59 +85 +106 +122 +127 +127 +127 +127 +127 +127 +127 +127 +91 +27 +-24 +-66 +-101 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-59 +-10 +31 +63 +90 +109 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-99 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-111 +-106 +-101 +-112 +-108 +-103 +-31 +27 +75 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +75 +21 +-23 +-60 +-89 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-96 +-39 +9 +48 +80 +106 +125 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +117 +111 +105 +99 +93 +88 +82 +77 +72 +67 +15 +-49 +-100 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-108 +-51 +8 +57 +96 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +67 +13 +-31 +-67 +-96 +-103 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-101 +-43 +5 +44 +77 +102 +122 +127 +127 +127 +127 +127 +127 +127 +127 +127 +101 +35 +-16 +-58 +-93 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-55 +-7 +33 +67 +93 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +96 +31 +-20 +-62 +-97 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-57 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-21 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +90 +110 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-98 +-56 +-7 +33 +67 +94 +115 +127 +127 +127 +127 +127 +127 +127 +127 +127 +99 +34 +-17 +-60 +-95 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-56 +-7 +33 +66 +92 +112 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +30 +-21 +-63 +-97 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-10 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +30 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +90 +111 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-99 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +30 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-58 +-9 +31 +64 +91 +111 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +30 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +126 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +117 +111 +105 +99 +94 +88 +83 +77 +73 +68 +63 +13 +-52 +-102 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-112 +-106 +-49 +9 +58 +98 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +68 +14 +-30 +-66 +-95 +-102 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-43 +5 +45 +77 +103 +122 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +115 +109 +104 +97 +91 +87 +81 +76 +71 +67 +15 +-50 +-100 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-49 +-7 +28 +56 +78 +95 +109 +118 +124 +127 +127 +127 +127 +127 +76 +11 +-39 +-80 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-110 +-105 +-99 +-111 +-107 +-34 +24 +72 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +74 +20 +-24 +-61 +-90 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-40 +8 +47 +79 +105 +125 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +116 +110 +105 +99 +93 +87 +82 +77 +72 +67 +15 +-49 +-99 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-112 +-106 +-49 +9 +58 +97 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +119 +111 +105 +99 +93 +87 +81 +29 +-37 +-88 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-109 +-103 +-47 +11 +60 +100 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +119 +112 +106 +99 +94 +88 +82 +29 +-36 +-87 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-109 +-104 +-47 +11 +60 +100 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +68 +15 +-30 +-66 +-95 +-102 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-42 +6 +46 +77 +103 +123 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +116 +109 +104 +98 +92 +87 +81 +76 +71 +67 +15 +-50 +-100 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-49 +-7 +28 +56 +78 +95 +109 +118 +124 +127 +127 +127 +127 +127 +75 +11 +-39 +-80 +-98 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-110 +-105 +-99 +-111 +-106 +-33 +24 +72 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +74 +20 +-25 +-61 +-90 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-40 +8 +47 +79 +105 +125 +127 +127 +127 +127 +127 +127 +127 +127 +127 +104 +37 +-15 +-57 +-92 +-103 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-55 +-7 +34 +67 +93 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +118 +112 +106 +101 +95 +89 +84 +79 +74 +69 +64 +13 +-52 +-102 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-106 +-49 +9 +59 +98 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +119 +112 +106 +99 +93 +87 +81 +29 +-37 +-88 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-49 +-7 +28 +56 +78 +96 +109 +118 +124 +127 +127 +127 +127 +127 +75 +11 +-39 +-80 +-98 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-111 +-105 +-100 +-112 +-107 +-34 +24 +72 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +74 +20 +-24 +-61 +-90 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-40 +8 +47 +79 +105 +124 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +117 +111 +105 +99 +93 +87 +82 +77 +72 +67 +15 +-50 +-99 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-49 +-6 +29 +57 +79 +96 +109 +119 +125 +127 +127 +127 +127 +127 +76 +11 +-39 +-80 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-108 +-65 +-17 +24 +58 +84 +105 +121 +127 +127 +127 +127 +127 +127 +127 +127 +92 +27 +-24 +-65 +-99 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-109 +-103 +-99 +-110 +-105 +-101 +-29 +29 +77 +115 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +76 +22 +-23 +-59 +-89 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-96 +-39 +9 +48 +80 +106 +125 +127 +127 +127 +127 +127 +127 +127 +127 +127 +103 +37 +-15 +-57 +-92 +-103 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-55 +-6 +34 +67 +93 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +96 +31 +-21 +-63 +-97 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-57 +-9 +31 +65 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +117 +111 +105 +99 +95 +89 +83 +78 +73 +69 +64 +13 +-52 +-102 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-101 +-50 +-8 +27 +55 +77 +95 +108 +117 +123 +127 +127 +127 +127 +127 +75 +11 +-39 +-80 +-98 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-107 +-65 +-17 +24 +58 +84 +105 +121 +127 +127 +127 +127 +127 +127 +127 +127 +91 +26 +-25 +-67 +-101 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-101 +-59 +-11 +30 +63 +89 +109 +125 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-99 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-111 +-106 +-101 +-112 +-108 +-103 +-31 +27 +74 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +116 +109 +104 +97 +91 +85 +33 +-33 +-84 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-93 +-43 +-1 +33 +62 +83 +101 +113 +123 +127 +127 +127 +127 +127 +127 +79 +14 +-37 +-78 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-109 +-104 +-99 +-111 +-106 +-33 +24 +72 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +116 +109 +103 +97 +91 +85 +33 +-33 +-85 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-94 +-43 +-1 +33 +61 +83 +101 +113 +122 +127 +127 +127 +127 +127 +127 +78 +14 +-37 +-78 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-106 +-64 +-16 +25 +59 +85 +106 +122 +127 +127 +127 +127 +127 +127 +127 +127 +92 +27 +-24 +-66 +-101 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-101 +-59 +-11 +30 +63 +89 +109 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-99 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-112 +-106 +-101 +-112 +-108 +-103 +-31 +26 +74 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +75 +21 +-23 +-60 +-89 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-96 +-39 +9 +48 +80 +106 +125 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +117 +111 +105 +99 +93 +88 +82 +77 +72 +67 +15 +-49 +-99 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-112 +-106 +-49 +9 +59 +98 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +67 +13 +-31 +-67 +-96 +-103 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-43 +5 +45 +77 +103 +123 +127 +127 +127 +127 +127 +127 +127 +127 +127 +101 +35 +-16 +-58 +-93 +-104 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-55 +-7 +33 +66 +93 +112 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +30 +-21 +-63 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +30 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +94 +29 +-22 +-64 +-99 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-57 +-9 +32 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +30 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-58 +-9 +31 +64 +90 +111 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +30 +-21 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +30 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +30 +-22 +-63 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +30 +-21 +-63 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-57 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +30 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-10 +30 +63 +88 +109 +123 +127 +127 +127 +127 +127 +127 +127 +127 +91 +25 +-26 +-68 +-102 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-102 +-60 +-11 +29 +63 +89 +109 +125 +127 +127 +127 +127 +127 +127 +127 +127 +94 +29 +-23 +-65 +-99 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-101 +-59 +-10 +31 +63 +90 +110 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-58 +-10 +31 +63 +90 +111 +126 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +117 +111 +105 +99 +94 +89 +83 +77 +73 +68 +63 +12 +-53 +-103 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-112 +-106 +-49 +9 +58 +97 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +67 +13 +-30 +-66 +-95 +-102 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-98 +-41 +8 +48 +80 +107 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +120 +113 +107 +101 +95 +89 +84 +79 +73 +69 +17 +-48 +-98 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-49 +-7 +28 +57 +79 +96 +109 +119 +125 +127 +127 +127 +127 +127 +76 +11 +-39 +-80 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-110 +-104 +-99 +-111 +-106 +-33 +24 +72 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +74 +20 +-24 +-61 +-90 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-40 +8 +47 +79 +105 +125 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +116 +111 +105 +99 +93 +87 +82 +77 +72 +67 +16 +-49 +-99 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-112 +-106 +-49 +10 +59 +98 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +119 +111 +105 +99 +93 +87 +81 +29 +-37 +-87 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-110 +-104 +-47 +11 +60 +100 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +119 +112 +106 +99 +94 +88 +82 +30 +-36 +-87 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-110 +-104 +-47 +11 +60 +99 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +69 +15 +-29 +-65 +-94 +-101 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-42 +5 +45 +77 +103 +123 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +116 +109 +104 +98 +92 +87 +81 +76 +71 +67 +15 +-50 +-100 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-49 +-7 +28 +56 +78 +96 +109 +119 +124 +127 +127 +127 +127 +127 +75 +11 +-39 +-80 +-98 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-110 +-105 +-99 +-111 +-107 +-34 +24 +72 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +73 +20 +-25 +-61 +-90 +-98 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-40 +8 +47 +79 +105 +124 +127 +127 +127 +127 +127 +127 +127 +127 +127 +103 +37 +-15 +-57 +-92 +-103 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-55 +-6 +34 +67 +93 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +118 +111 +106 +100 +95 +89 +84 +79 +74 +69 +64 +13 +-52 +-102 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-112 +-106 +-49 +9 +58 +98 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +119 +111 +105 +99 +93 +87 +81 +29 +-37 +-87 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-95 +-44 +-2 +32 +61 +82 +99 +112 +121 +127 +127 +127 +127 +127 +127 +77 +13 +-37 +-79 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-110 +-105 +-100 +-111 +-106 +-34 +23 +72 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +73 +20 +-25 +-61 +-90 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-40 +8 +47 +79 +105 +125 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +117 +111 +105 +99 +93 +87 +82 +77 +72 +67 +15 +-49 +-99 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-49 +-7 +28 +56 +78 +96 +109 +119 +125 +127 +127 +127 +127 +127 +76 +11 +-39 +-80 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-107 +-65 +-17 +24 +58 +84 +105 +121 +127 +127 +127 +127 +127 +127 +127 +127 +91 +27 +-24 +-66 +-101 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-112 +-107 +-102 +-97 +-108 +-104 +-31 +26 +74 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +75 +21 +-23 +-61 +-90 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-40 +8 +48 +79 +105 +125 +127 +127 +127 +127 +127 +127 +127 +127 +127 +103 +37 +-15 +-57 +-91 +-103 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-55 +-6 +34 +67 +93 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +97 +31 +-20 +-62 +-97 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-57 +-9 +32 +65 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +117 +111 +105 +99 +94 +89 +83 +77 +73 +69 +64 +13 +-52 +-102 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-101 +-50 +-7 +27 +55 +77 +95 +108 +118 +124 +127 +127 +127 +127 +127 +75 +11 +-39 +-80 +-98 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-107 +-65 +-17 +25 +58 +85 +105 +121 +127 +127 +127 +127 +127 +127 +127 +127 +91 +26 +-25 +-66 +-101 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-101 +-59 +-11 +30 +63 +89 +109 +126 +127 +127 +127 +127 +127 +127 +127 +127 +94 +29 +-23 +-65 +-100 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-109 +-104 +-98 +-109 +-105 +-33 +25 +73 +112 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +115 +109 +102 +96 +90 +84 +32 +-34 +-85 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-93 +-43 +-1 +33 +62 +83 +101 +113 +122 +127 +127 +127 +127 +127 +127 +79 +14 +-37 +-78 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-109 +-104 +-99 +-111 +-106 +-33 +24 +72 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +116 +109 +103 +97 +91 +85 +32 +-34 +-85 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-93 +-43 +-1 +33 +61 +83 +101 +113 +123 +127 +127 +127 +127 +127 +127 +80 +15 +-35 +-75 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-101 +-60 +-11 +30 +63 +89 +109 +125 +127 +127 +127 +127 +127 +127 +127 +127 +94 +29 +-23 +-65 +-99 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-58 +-10 +31 +63 +90 +111 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-99 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-111 +-106 +-101 +-112 +-108 +-103 +-31 +27 +75 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +75 +21 +-23 +-60 +-89 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-40 +8 +48 +79 +105 +125 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +117 +111 +105 +99 +93 +88 +83 +77 +72 +67 +16 +-49 +-99 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-111 +-106 +-49 +10 +59 +98 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +68 +14 +-30 +-66 +-95 +-103 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-42 +5 +45 +77 +103 +123 +127 +127 +127 +127 +127 +127 +127 +127 +127 +101 +35 +-16 +-59 +-93 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-55 +-7 +34 +67 +93 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +96 +31 +-21 +-63 +-97 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-10 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +30 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +30 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-57 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +30 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-58 +-10 +31 +63 +90 +111 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-99 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-58 +-9 +31 +63 +90 +110 +126 +127 +127 +127 +127 +127 +127 +127 +127 +94 +29 +-23 +-64 +-99 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-58 +-10 +31 +63 +90 +110 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +117 +111 +105 +99 +94 +88 +83 +78 +73 +69 +64 +13 +-52 +-102 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-107 +-49 +9 +58 +98 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +67 +13 +-30 +-67 +-95 +-102 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-42 +5 +45 +77 +103 +123 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +115 +110 +104 +98 +92 +87 +81 +76 +71 +67 +15 +-50 +-100 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-49 +-7 +27 +56 +77 +95 +109 +118 +123 +127 +127 +127 +127 +127 +75 +11 +-39 +-80 +-98 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-110 +-105 +-99 +-111 +-106 +-34 +24 +72 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +75 +21 +-24 +-61 +-90 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-40 +8 +47 +79 +105 +125 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +117 +111 +105 +99 +93 +87 +82 +77 +72 +67 +15 +-49 +-99 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-112 +-107 +-49 +9 +58 +98 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +119 +112 +106 +99 +93 +88 +82 +29 +-37 +-87 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-109 +-104 +-47 +11 +59 +98 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +115 +109 +103 +96 +91 +85 +79 +27 +-38 +-88 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-110 +-105 +-47 +11 +60 +99 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +69 +15 +-29 +-65 +-95 +-102 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-43 +5 +45 +77 +103 +123 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +116 +109 +104 +98 +92 +87 +81 +76 +71 +66 +15 +-50 +-100 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-49 +-7 +28 +56 +79 +96 +109 +118 +124 +127 +127 +127 +127 +127 +75 +11 +-39 +-80 +-98 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-109 +-104 +-99 +-109 +-104 +-31 +27 +75 +115 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +78 +24 +-21 +-57 +-87 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-95 +-39 +9 +49 +81 +106 +126 +127 +127 +127 +127 +127 +127 +127 +127 +127 +104 +38 +-14 +-56 +-91 +-103 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-55 +-7 +34 +66 +93 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +118 +112 +107 +101 +95 +89 +84 +79 +74 +69 +64 +13 +-52 +-102 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-112 +-107 +-49 +9 +58 +98 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +119 +111 +105 +99 +93 +87 +81 +29 +-36 +-87 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-95 +-44 +-2 +32 +61 +82 +99 +112 +121 +127 +127 +127 +127 +127 +127 +78 +13 +-37 +-78 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-109 +-105 +-99 +-111 +-106 +-33 +24 +72 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +74 +20 +-24 +-61 +-90 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-40 +8 +47 +79 +105 +124 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +116 +111 +105 +99 +93 +87 +82 +77 +72 +67 +16 +-49 +-99 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-49 +-7 +28 +56 +79 +96 +109 +119 +124 +127 +127 +127 +127 +127 +76 +11 +-39 +-80 +-98 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-107 +-65 +-17 +25 +58 +85 +105 +121 +127 +127 +127 +127 +127 +127 +127 +127 +91 +26 +-25 +-67 +-101 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-112 +-106 +-102 +-97 +-108 +-104 +-31 +26 +74 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +75 +21 +-23 +-60 +-89 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-40 +8 +48 +79 +105 +125 +127 +127 +127 +127 +127 +127 +127 +127 +127 +103 +37 +-15 +-57 +-92 +-103 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-112 +-55 +-6 +34 +67 +93 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +96 +31 +-21 +-63 +-97 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +65 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +117 +111 +105 +99 +94 +89 +83 +77 +73 +68 +64 +13 +-52 +-102 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-101 +-50 +-8 +27 +55 +77 +95 +108 +118 +124 +127 +127 +127 +127 +127 +75 +11 +-39 +-80 +-98 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-107 +-65 +-17 +24 +57 +84 +105 +121 +127 +127 +127 +127 +127 +127 +127 +127 +91 +26 +-25 +-67 +-101 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-101 +-59 +-11 +30 +63 +89 +109 +126 +127 +127 +127 +127 +127 +127 +127 +127 +94 +29 +-23 +-64 +-99 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-111 +-106 +-101 +-112 +-108 +-103 +-31 +27 +74 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +116 +109 +103 +97 +91 +85 +33 +-33 +-85 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-93 +-43 +-1 +33 +61 +83 +101 +113 +123 +127 +127 +127 +127 +127 +127 +79 +14 +-37 +-78 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-110 +-104 +-99 +-111 +-106 +-33 +24 +72 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +116 +109 +103 +96 +90 +85 +32 +-34 +-85 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-94 +-43 +-1 +33 +61 +83 +101 +113 +123 +127 +127 +127 +127 +127 +127 +79 +14 +-37 +-78 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-107 +-65 +-16 +25 +59 +85 +106 +122 +127 +127 +127 +127 +127 +127 +127 +127 +91 +26 +-25 +-66 +-101 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-101 +-59 +-11 +30 +63 +89 +109 +125 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-99 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-111 +-106 +-101 +-112 +-108 +-103 +-31 +27 +75 +114 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +75 +21 +-23 +-60 +-89 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-40 +8 +48 +79 +105 +125 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +117 +111 +105 +99 +93 +88 +82 +77 +72 +67 +15 +-49 +-99 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-111 +-106 +-49 +10 +59 +98 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +68 +14 +-30 +-66 +-95 +-102 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-42 +5 +45 +77 +103 +122 +127 +127 +127 +127 +127 +127 +127 +127 +127 +102 +36 +-16 +-58 +-93 +-104 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-56 +-8 +32 +64 +90 +109 +125 +127 +127 +127 +127 +127 +127 +127 +127 +91 +26 +-25 +-67 +-101 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-101 +-59 +-10 +30 +63 +90 +110 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-23 +-65 +-99 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-58 +-10 +31 +63 +90 +111 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-99 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +30 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +30 +-22 +-63 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-58 +-10 +31 +63 +90 +111 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-57 +-8 +33 +66 +93 +114 +127 +127 +127 +127 +127 +127 +127 +127 +127 +99 +34 +-17 +-59 +-94 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-55 +-7 +33 +66 +93 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +31 +-21 +-63 +-97 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-99 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +90 +111 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-99 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-99 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-58 +-9 +31 +64 +91 +111 +126 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +117 +111 +105 +99 +94 +88 +83 +77 +73 +68 +64 +13 +-52 +-102 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-112 +-106 +-49 +9 +58 +98 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +68 +14 +-30 +-66 +-95 +-102 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-43 +5 +45 +77 +103 +122 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +116 +109 +104 +98 +92 +87 +81 +76 +71 +67 +15 +-50 +-100 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-49 +-7 +28 +56 +79 +96 +109 +119 +125 +127 +127 +127 +127 +127 +76 +11 +-39 +-80 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-110 +-104 +-99 +-111 +-106 +-33 +24 +72 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +74 +20 +-24 +-61 +-90 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-40 +7 +47 +79 +105 +124 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +116 +111 +105 +99 +93 +87 +82 +77 +72 +67 +16 +-49 +-99 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-112 +-106 +-49 +10 +59 +98 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +119 +111 +105 +99 +93 +87 +81 +29 +-37 +-87 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-109 +-104 +-47 +11 +60 +100 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +119 +113 +106 +99 +94 +88 +82 +30 +-36 +-87 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-110 +-104 +-47 +11 +59 +99 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +68 +14 +-30 +-66 +-95 +-102 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-43 +5 +45 +77 +103 +123 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +116 +109 +104 +98 +92 +87 +81 +76 +72 +67 +15 +-50 +-100 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-49 +-7 +27 +56 +78 +96 +109 +119 +125 +127 +127 +127 +127 +127 +75 +11 +-39 +-80 +-98 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-109 +-104 +-99 +-111 +-106 +-33 +24 +72 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +73 +20 +-25 +-61 +-90 +-98 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-40 +8 +47 +79 +105 +125 +127 +127 +127 +127 +127 +127 +127 +127 +127 +103 +37 +-15 +-57 +-92 +-103 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-55 +-6 +34 +67 +93 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +118 +111 +106 +100 +95 +89 +84 +79 +74 +69 +64 +13 +-52 +-101 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-112 +-106 +-49 +9 +58 +98 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +119 +112 +106 +99 +93 +87 +82 +29 +-37 +-87 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-95 +-44 +-2 +32 +61 +83 +99 +112 +121 +127 +127 +127 +127 +127 +127 +77 +13 +-37 +-79 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-109 +-104 +-99 +-111 +-105 +-33 +24 +72 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +75 +21 +-24 +-61 +-89 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-40 +7 +46 +77 +103 +121 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +119 +112 +107 +101 +95 +90 +84 +79 +74 +69 +65 +13 +-51 +-101 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-101 +-50 +-8 +27 +55 +77 +95 +108 +117 +123 +127 +127 +127 +127 +126 +75 +10 +-40 +-81 +-98 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-107 +-65 +-17 +24 +58 +84 +105 +121 +127 +127 +127 +127 +127 +127 +127 +127 +91 +26 +-25 +-66 +-101 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-112 +-106 +-101 +-112 +-108 +-104 +-31 +26 +74 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +75 +21 +-23 +-60 +-89 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-40 +8 +47 +79 +105 +125 +127 +127 +127 +127 +127 +127 +127 +127 +127 +103 +37 +-15 +-57 +-92 +-103 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-111 +-53 +-5 +36 +69 +96 +117 +127 +127 +127 +127 +127 +127 +127 +127 +127 +101 +35 +-17 +-58 +-93 +-104 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-55 +-7 +33 +66 +93 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +117 +111 +106 +100 +95 +89 +84 +78 +73 +69 +64 +13 +-52 +-102 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-101 +-50 +-8 +27 +55 +77 +95 +108 +117 +123 +127 +127 +127 +127 +127 +75 +11 +-39 +-80 +-98 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-107 +-65 +-17 +24 +57 +84 +105 +121 +127 +127 +127 +127 +127 +127 +127 +127 +91 +26 +-25 +-67 +-101 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-101 +-59 +-11 +30 +63 +89 +109 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-99 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-112 +-106 +-101 +-112 +-107 +-103 +-31 +27 +75 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +116 +109 +103 +97 +91 +85 +33 +-33 +-84 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-94 +-43 +-1 +33 +61 +83 +101 +113 +122 +127 +127 +127 +127 +127 +127 +79 +14 +-36 +-77 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-110 +-104 +-99 +-110 +-105 +-33 +24 +73 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +116 +109 +103 +96 +90 +85 +32 +-34 +-85 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-94 +-44 +-1 +33 +61 +83 +101 +113 +122 +127 +127 +127 +127 +127 +127 +77 +13 +-37 +-78 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-106 +-64 +-15 +25 +59 +85 +106 +122 +127 +127 +127 +127 +127 +127 +127 +127 +91 +26 +-25 +-66 +-101 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-101 +-59 +-10 +31 +63 +90 +109 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-99 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-112 +-106 +-101 +-112 +-107 +-103 +-31 +27 +74 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +75 +21 +-23 +-60 +-89 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-40 +8 +48 +79 +105 +125 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +116 +111 +105 +99 +93 +87 +82 +77 +72 +67 +15 +-49 +-99 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-112 +-106 +-49 +10 +59 +99 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +68 +14 +-30 +-66 +-95 +-102 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-42 +5 +45 +77 +103 +123 +127 +127 +127 +127 +127 +127 +127 +127 +127 +102 +36 +-16 +-58 +-93 +-104 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-55 +-7 +33 +66 +93 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +30 +-21 +-63 +-97 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-57 +-9 +31 +63 +90 +109 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-99 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-58 +-10 +31 +63 +90 +109 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +30 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-58 +-10 +31 +63 +90 +111 +126 +127 +127 +127 +127 +127 +127 +127 +127 +94 +29 +-23 +-64 +-99 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-58 +-10 +31 +63 +90 +111 +126 +127 +127 +127 +127 +127 +127 +127 +127 +94 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +30 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +30 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-58 +-9 +31 +63 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +30 +-21 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +30 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-58 +-9 +31 +64 +91 +111 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +30 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-10 +30 +62 +88 +108 +123 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +118 +113 +107 +101 +95 +90 +85 +79 +75 +70 +65 +61 +10 +-54 +-104 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-107 +-50 +9 +57 +97 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +67 +14 +-30 +-66 +-95 +-103 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-43 +5 +45 +77 +103 +123 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +116 +109 +104 +98 +92 +87 +81 +76 +71 +66 +15 +-50 +-100 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-49 +-7 +28 +56 +78 +96 +109 +119 +124 +127 +127 +127 +127 +127 +75 +11 +-39 +-80 +-98 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-109 +-103 +-98 +-109 +-104 +-31 +27 +75 +115 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +78 +24 +-20 +-57 +-86 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-95 +-38 +9 +49 +80 +106 +125 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +117 +111 +105 +99 +93 +88 +83 +77 +72 +67 +16 +-49 +-99 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-112 +-106 +-49 +9 +59 +98 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +119 +111 +105 +99 +93 +87 +81 +29 +-37 +-87 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-109 +-104 +-47 +12 +60 +100 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +119 +112 +106 +99 +94 +88 +82 +30 +-36 +-87 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-109 +-104 +-47 +11 +60 +100 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +68 +15 +-29 +-66 +-95 +-102 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-43 +5 +45 +77 +103 +123 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +116 +109 +104 +98 +92 +87 +81 +76 +72 +67 +15 +-50 +-100 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-49 +-7 +28 +56 +79 +96 +109 +118 +124 +127 +127 +127 +127 +127 +75 +11 +-39 +-80 +-98 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-111 +-105 +-100 +-111 +-106 +-34 +24 +72 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +74 +20 +-25 +-61 +-90 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-40 +8 +47 +79 +105 +125 +127 +127 +127 +127 +127 +127 +127 +127 +127 +103 +37 +-15 +-57 +-92 +-103 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-55 +-7 +33 +66 +93 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +118 +111 +106 +100 +95 +89 +84 +79 +74 +69 +64 +13 +-52 +-102 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-107 +-49 +9 +58 +98 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +119 +112 +105 +99 +93 +87 +82 +29 +-36 +-87 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-95 +-44 +-2 +32 +61 +82 +99 +112 +121 +127 +127 +127 +127 +127 +127 +77 +13 +-37 +-78 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-109 +-104 +-99 +-111 +-105 +-33 +24 +72 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +74 +20 +-24 +-61 +-90 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-40 +8 +47 +79 +105 +125 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +116 +111 +105 +99 +93 +87 +82 +77 +72 +67 +15 +-49 +-100 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-50 +-8 +27 +55 +77 +95 +108 +118 +124 +127 +127 +127 +127 +127 +75 +11 +-39 +-80 +-98 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-107 +-65 +-16 +25 +58 +85 +106 +121 +127 +127 +127 +127 +127 +127 +127 +127 +91 +26 +-25 +-67 +-101 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-112 +-107 +-101 +-112 +-108 +-104 +-31 +26 +74 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +75 +21 +-23 +-60 +-89 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-96 +-39 +8 +48 +79 +105 +125 +127 +127 +127 +127 +127 +127 +127 +127 +127 +104 +37 +-15 +-57 +-92 +-103 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-112 +-54 +-6 +34 +67 +93 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +96 +31 +-21 +-63 +-97 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-57 +-9 +32 +65 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +117 +111 +105 +99 +94 +88 +83 +77 +73 +68 +63 +13 +-52 +-102 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-101 +-50 +-8 +27 +55 +77 +95 +108 +117 +123 +127 +127 +127 +127 +127 +75 +11 +-39 +-81 +-98 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-107 +-65 +-16 +25 +58 +85 +105 +121 +127 +127 +127 +127 +127 +127 +127 +127 +91 +26 +-25 +-66 +-101 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-59 +-10 +31 +63 +90 +110 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-99 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-111 +-106 +-101 +-112 +-108 +-103 +-31 +27 +75 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +117 +110 +104 +97 +91 +85 +33 +-33 +-84 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-93 +-43 +-1 +33 +61 +83 +101 +113 +123 +127 +127 +127 +127 +127 +127 +79 +13 +-37 +-79 +-98 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-112 +-107 +-101 +-97 +-108 +-35 +23 +71 +110 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +115 +108 +102 +95 +89 +84 +31 +-34 +-85 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-93 +-43 +-1 +33 +61 +83 +100 +112 +122 +127 +127 +127 +127 +127 +127 +77 +13 +-37 +-78 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-105 +-64 +-15 +26 +59 +85 +106 +122 +127 +127 +127 +127 +127 +127 +127 +127 +91 +27 +-25 +-66 +-101 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-101 +-59 +-10 +31 +63 +90 +110 +126 +127 +127 +127 +127 +127 +127 +127 +127 +94 +29 +-23 +-65 +-99 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-111 +-105 +-99 +-110 +-106 +-101 +-28 +30 +78 +117 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +79 +25 +-20 +-56 +-86 +-109 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-95 +-38 +10 +49 +81 +107 +126 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +117 +111 +105 +99 +93 +88 +82 +77 +72 +67 +16 +-49 +-99 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-111 +-106 +-49 +10 +59 +98 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +68 +14 +-30 +-65 +-95 +-102 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-43 +5 +45 +77 +103 +123 +127 +127 +127 +127 +127 +127 +127 +127 +127 +101 +35 +-16 +-58 +-93 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-55 +-7 +33 +66 +93 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +96 +31 +-21 +-63 +-97 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-57 +-9 +32 +65 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +30 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +30 +-22 +-64 +-99 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +90 +111 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-99 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-58 +-9 +31 +64 +90 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +30 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-58 +-9 +31 +63 +91 +111 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-99 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-58 +-9 +31 +64 +91 +111 +126 +127 +127 +127 +127 +127 +127 +127 +127 +94 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +30 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +117 +111 +105 +99 +94 +89 +83 +77 +73 +68 +63 +12 +-53 +-102 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-107 +-50 +9 +57 +97 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +67 +14 +-30 +-66 +-95 +-102 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-43 +5 +45 +77 +102 +122 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +116 +110 +104 +98 +92 +87 +81 +76 +71 +67 +15 +-50 +-100 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-49 +-7 +28 +56 +79 +96 +109 +119 +125 +127 +127 +127 +127 +127 +75 +11 +-39 +-80 +-98 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-110 +-104 +-99 +-111 +-106 +-33 +24 +72 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +74 +20 +-25 +-61 +-90 +-98 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-40 +8 +47 +79 +105 +125 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +116 +111 +104 +99 +93 +87 +82 +77 +72 +67 +15 +-49 +-99 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-112 +-107 +-49 +9 +59 +98 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +119 +111 +105 +99 +93 +87 +81 +29 +-37 +-87 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-109 +-103 +-47 +11 +60 +100 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +119 +112 +106 +99 +93 +88 +82 +30 +-36 +-87 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-109 +-104 +-47 +12 +60 +99 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +69 +15 +-29 +-65 +-94 +-101 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-43 +4 +44 +75 +101 +120 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +118 +111 +106 +100 +95 +89 +83 +79 +74 +69 +64 +13 +-52 +-101 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-101 +-50 +-8 +27 +55 +77 +95 +108 +117 +123 +127 +127 +127 +127 +127 +75 +11 +-39 +-80 +-98 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-111 +-105 +-100 +-111 +-107 +-34 +24 +72 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +74 +20 +-25 +-61 +-90 +-98 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-40 +8 +47 +79 +105 +125 +127 +127 +127 +127 +127 +127 +127 +127 +127 +104 +37 +-14 +-57 +-91 +-103 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-55 +-7 +33 +66 +93 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +118 +111 +106 +101 +95 +89 +84 +79 +75 +70 +65 +15 +-50 +-99 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-110 +-105 +-47 +11 +59 +99 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +119 +112 +106 +99 +94 +88 +82 +30 +-36 +-87 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-95 +-44 +-2 +32 +61 +82 +99 +112 +121 +127 +127 +127 +127 +127 +127 +77 +13 +-37 +-78 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-110 +-104 +-99 +-111 +-106 +-33 +24 +72 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +74 +20 +-25 +-61 +-90 +-98 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-40 +8 +47 +79 +105 +125 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +116 +111 +105 +99 +93 +87 +82 +77 +72 +67 +15 +-49 +-99 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-49 +-7 +28 +56 +78 +95 +109 +119 +124 +127 +127 +127 +127 +127 +76 +11 +-39 +-80 +-98 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-108 +-65 +-17 +24 +58 +85 +105 +121 +127 +127 +127 +127 +127 +127 +127 +127 +91 +26 +-25 +-67 +-101 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-112 +-107 +-102 +-112 +-108 +-103 +-31 +27 +74 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +75 +21 +-23 +-60 +-89 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-40 +8 +48 +79 +105 +125 +127 +127 +127 +127 +127 +127 +127 +127 +127 +104 +37 +-15 +-57 +-92 +-103 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-55 +-7 +34 +67 +93 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +96 +31 +-21 +-63 +-97 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-57 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +117 +111 +105 +99 +94 +89 +83 +77 +73 +68 +64 +13 +-52 +-102 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-101 +-50 +-8 +27 +56 +77 +95 +109 +118 +124 +127 +127 +127 +127 +127 +75 +10 +-39 +-81 +-98 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-107 +-65 +-17 +24 +58 +85 +105 +121 +127 +127 +127 +127 +127 +127 +127 +127 +91 +26 +-25 +-67 +-101 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-101 +-59 +-11 +30 +63 +89 +109 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-99 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-111 +-106 +-101 +-112 +-108 +-103 +-31 +27 +75 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +117 +109 +104 +97 +91 +85 +33 +-33 +-84 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-93 +-43 +-1 +33 +62 +83 +101 +113 +123 +127 +127 +127 +127 +127 +127 +79 +14 +-36 +-77 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-109 +-104 +-99 +-110 +-106 +-33 +24 +72 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +115 +109 +102 +96 +90 +84 +31 +-34 +-85 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-94 +-43 +-1 +33 +61 +83 +101 +113 +122 +127 +127 +127 +127 +127 +127 +77 +13 +-37 +-78 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-106 +-64 +-15 +25 +59 +85 +106 +122 +127 +127 +127 +127 +127 +127 +127 +127 +91 +26 +-25 +-67 +-101 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-101 +-59 +-11 +30 +63 +89 +109 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-99 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-112 +-106 +-101 +-112 +-107 +-103 +-31 +27 +75 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +75 +21 +-23 +-60 +-89 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-40 +8 +48 +79 +105 +125 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +116 +111 +105 +99 +93 +87 +82 +77 +72 +67 +16 +-49 +-99 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-112 +-106 +-49 +9 +59 +98 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +68 +14 +-30 +-66 +-95 +-103 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-43 +5 +45 +77 +103 +123 +127 +127 +127 +127 +127 +127 +127 +127 +127 +102 +36 +-16 +-58 +-93 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-55 +-7 +33 +66 +93 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +97 +31 +-20 +-63 +-97 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-57 +-9 +31 +65 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +30 +-21 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +30 +-22 +-63 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-58 +-10 +30 +63 +88 +108 +123 +127 +127 +127 +127 +127 +127 +127 +127 +90 +25 +-26 +-68 +-102 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-101 +-59 +-11 +30 +63 +89 +109 +125 +127 +127 +127 +127 +127 +127 +127 +127 +93 +28 +-23 +-65 +-99 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-65 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +30 +-22 +-63 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-58 +-9 +31 +63 +90 +111 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +30 +-22 +-63 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-58 +-10 +31 +63 +90 +111 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-55 +-6 +35 +69 +95 +116 +127 +127 +127 +127 +127 +127 +127 +127 +127 +99 +33 +-18 +-60 +-95 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-98 +-56 +-8 +33 +65 +92 +112 +127 +127 +127 +127 +127 +127 +127 +127 +127 +96 +31 +-21 +-63 +-97 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +30 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +30 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +117 +111 +105 +99 +94 +88 +83 +77 +73 +68 +64 +13 +-52 +-102 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-112 +-107 +-49 +9 +58 +97 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +67 +14 +-30 +-66 +-95 +-102 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-43 +5 +45 +77 +103 +123 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +116 +109 +104 +98 +92 +87 +81 +77 +72 +67 +15 +-50 +-100 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-49 +-7 +28 +56 +78 +95 +109 +118 +124 +127 +127 +127 +127 +127 +76 +11 +-39 +-80 +-98 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-111 +-105 +-100 +-111 +-107 +-34 +23 +72 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +74 +20 +-25 +-61 +-90 +-98 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-40 +8 +47 +79 +105 +125 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +117 +111 +105 +99 +93 +87 +82 +77 +72 +67 +16 +-49 +-99 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-112 +-106 +-49 +10 +59 +98 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +119 +112 +105 +99 +93 +87 +82 +29 +-37 +-87 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-109 +-104 +-47 +11 +60 +100 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +119 +112 +106 +99 +94 +88 +82 +30 +-36 +-87 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-110 +-104 +-47 +11 +60 +100 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +69 +15 +-29 +-65 +-94 +-101 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-43 +5 +45 +77 +103 +123 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +116 +109 +104 +98 +92 +87 +81 +76 +71 +67 +15 +-50 +-100 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-50 +-8 +27 +55 +77 +95 +108 +118 +124 +127 +127 +127 +127 +127 +75 +11 +-39 +-80 +-98 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-110 +-105 +-100 +-111 +-107 +-34 +23 +72 +110 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +74 +20 +-25 +-61 +-90 +-98 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-40 +8 +47 +79 +105 +124 +127 +127 +127 +127 +127 +127 +127 +127 +127 +102 +37 +-15 +-57 +-92 +-103 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-55 +-7 +34 +67 +93 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +118 +111 +106 +101 +95 +89 +84 +79 +74 +69 +64 +13 +-52 +-101 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-112 +-107 +-49 +9 +58 +98 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +119 +111 +105 +99 +93 +87 +82 +29 +-36 +-87 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-95 +-44 +-2 +32 +61 +82 +99 +112 +121 +127 +127 +127 +127 +127 +127 +78 +13 +-37 +-78 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-110 +-104 +-99 +-111 +-106 +-34 +24 +72 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +74 +20 +-25 +-61 +-90 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-40 +8 +47 +79 +105 +125 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +117 +111 +105 +99 +93 +87 +82 +77 +72 +67 +15 +-49 +-99 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-49 +-7 +29 +57 +79 +96 +109 +119 +125 +127 +127 +127 +127 +127 +75 +11 +-39 +-80 +-98 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-107 +-65 +-16 +25 +58 +85 +106 +122 +127 +127 +127 +127 +127 +127 +127 +127 +91 +26 +-25 +-67 +-102 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-109 +-104 +-99 +-110 +-105 +-33 +25 +73 +112 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +74 +20 +-25 +-61 +-90 +-98 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-40 +8 +47 +79 +105 +125 +127 +127 +127 +127 +127 +127 +127 +127 +127 +103 +37 +-15 +-57 +-92 +-103 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-112 +-55 +-6 +34 +67 +93 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +97 +31 +-20 +-62 +-97 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +65 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +117 +111 +105 +99 +94 +88 +83 +77 +73 +68 +63 +12 +-53 +-103 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-50 +-7 +27 +56 +77 +95 +109 +119 +124 +127 +127 +127 +127 +127 +77 +13 +-37 +-77 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-103 +-61 +-12 +28 +61 +88 +109 +125 +127 +127 +127 +127 +127 +127 +127 +127 +93 +28 +-23 +-65 +-99 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-58 +-10 +31 +63 +90 +111 +126 +127 +127 +127 +127 +127 +127 +127 +127 +94 +29 +-23 +-65 +-99 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-111 +-106 +-101 +-112 +-107 +-103 +-31 +27 +75 +114 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +117 +110 +104 +97 +91 +85 +33 +-33 +-84 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-93 +-43 +-1 +33 +61 +83 +101 +113 +123 +127 +127 +127 +127 +127 +127 +79 +14 +-36 +-77 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-110 +-104 +-99 +-111 +-106 +-33 +24 +72 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +116 +109 +103 +96 +90 +85 +32 +-34 +-85 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-93 +-43 +-1 +33 +61 +83 +101 +113 +122 +127 +127 +127 +127 +127 +127 +78 +14 +-37 +-78 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-106 +-64 +-15 +25 +59 +85 +106 +122 +127 +127 +127 +127 +127 +127 +127 +127 +92 +27 +-24 +-66 +-101 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-101 +-59 +-11 +30 +63 +89 +109 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-99 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-111 +-106 +-101 +-112 +-107 +-103 +-31 +27 +75 +114 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +75 +21 +-23 +-60 +-89 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-40 +8 +47 +79 +105 +125 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +117 +111 +105 +99 +93 +87 +82 +77 +72 +67 +15 +-49 +-99 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-112 +-106 +-49 +10 +59 +98 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +68 +14 +-30 +-66 +-95 +-102 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-43 +5 +45 +77 +103 +123 +127 +127 +127 +127 +127 +127 +127 +127 +127 +101 +35 +-16 +-58 +-93 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-55 +-7 +34 +67 +93 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +30 +-21 +-63 +-97 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-57 +-9 +31 +65 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +94 +29 +-23 +-64 +-99 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-58 +-10 +31 +63 +90 +111 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-58 +-10 +31 +63 +90 +111 +126 +127 +127 +127 +127 +127 +127 +127 +127 +94 +29 +-22 +-64 +-98 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-57 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-99 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +65 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +30 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +90 +111 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +30 +-22 +-63 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +117 +111 +105 +99 +94 +89 +83 +77 +73 +68 +63 +12 +-52 +-103 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-112 +-106 +-49 +9 +58 +97 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +68 +14 +-30 +-66 +-95 +-102 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-43 +5 +44 +75 +101 +120 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +117 +111 +106 +100 +95 +89 +83 +78 +73 +69 +64 +13 +-52 +-101 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-101 +-50 +-8 +27 +55 +77 +95 +108 +117 +123 +127 +127 +127 +127 +126 +75 +11 +-39 +-80 +-98 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-110 +-105 +-100 +-111 +-107 +-34 +23 +72 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +74 +20 +-25 +-61 +-90 +-98 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-41 +7 +47 +79 +105 +124 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +117 +111 +105 +99 +93 +87 +82 +77 +72 +67 +15 +-49 +-99 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-110 +-105 +-47 +12 +61 +101 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +115 +108 +101 +95 +89 +83 +31 +-35 +-86 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-110 +-103 +-46 +12 +60 +100 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +119 +112 +106 +99 +94 +88 +82 +30 +-36 +-87 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-110 +-104 +-47 +11 +60 +100 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +69 +15 +-29 +-65 +-94 +-101 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-42 +5 +45 +77 +103 +123 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +116 +109 +104 +98 +92 +87 +81 +76 +71 +67 +15 +-50 +-100 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-49 +-7 +28 +56 +78 +96 +109 +118 +125 +127 +127 +127 +127 +127 +75 +11 +-39 +-80 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-110 +-105 +-100 +-111 +-107 +-34 +24 +72 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +74 +20 +-25 +-61 +-90 +-98 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-40 +8 +47 +79 +105 +125 +127 +127 +127 +127 +127 +127 +127 +127 +127 +103 +37 +-15 +-57 +-92 +-103 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-55 +-7 +34 +67 +93 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +118 +111 +106 +101 +95 +89 +84 +79 +74 +69 +64 +13 +-52 +-102 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-112 +-107 +-49 +9 +58 +97 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +119 +111 +105 +99 +93 +87 +81 +29 +-36 +-87 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-95 +-44 +-2 +32 +61 +82 +99 +112 +121 +127 +127 +127 +127 +127 +127 +77 +13 +-37 +-78 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-110 +-105 +-99 +-111 +-106 +-33 +24 +72 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +74 +20 +-25 +-61 +-90 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-40 +8 +47 +79 +105 +125 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +116 +111 +105 +99 +93 +87 +82 +77 +72 +67 +15 +-49 +-99 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-49 +-7 +28 +56 +78 +96 +109 +119 +125 +127 +127 +127 +127 +127 +76 +11 +-39 +-80 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-107 +-65 +-16 +25 +58 +85 +105 +121 +127 +127 +127 +127 +127 +127 +127 +127 +91 +26 +-25 +-66 +-101 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-107 +-102 +-97 +-109 +-103 +-31 +26 +74 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +74 +20 +-24 +-61 +-90 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-40 +8 +47 +79 +105 +125 +127 +127 +127 +127 +127 +127 +127 +127 +127 +103 +37 +-15 +-57 +-92 +-103 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-55 +-7 +33 +66 +93 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +96 +31 +-21 +-63 +-97 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-57 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +117 +111 +105 +99 +94 +88 +83 +77 +73 +68 +64 +13 +-52 +-102 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-101 +-50 +-8 +27 +55 +77 +95 +108 +117 +123 +127 +127 +127 +127 +127 +76 +11 +-39 +-80 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-107 +-65 +-17 +24 +58 +84 +105 +121 +127 +127 +127 +127 +127 +127 +127 +127 +91 +27 +-25 +-66 +-101 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-101 +-59 +-11 +30 +63 +89 +109 +126 +127 +127 +127 +127 +127 +127 +127 +127 +94 +29 +-22 +-64 +-99 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-112 +-107 +-101 +-112 +-107 +-103 +-31 +27 +75 +114 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +116 +109 +104 +97 +91 +85 +33 +-33 +-84 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-93 +-43 +-1 +34 +62 +83 +101 +113 +123 +127 +127 +127 +127 +127 +127 +79 +14 +-36 +-77 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-109 +-104 +-99 +-111 +-106 +-33 +24 +72 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +116 +109 +103 +97 +91 +85 +32 +-34 +-85 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-93 +-43 +-1 +33 +62 +84 +101 +113 +123 +127 +127 +127 +127 +127 +127 +78 +13 +-37 +-79 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-111 +-69 +-20 +21 +55 +81 +102 +119 +127 +127 +127 +127 +127 +127 +127 +127 +90 +25 +-26 +-68 +-102 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-102 +-60 +-11 +29 +62 +89 +109 +125 +127 +127 +127 +127 +127 +127 +127 +127 +94 +28 +-23 +-65 +-99 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-112 +-106 +-101 +-97 +-108 +-103 +-31 +27 +74 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +75 +21 +-23 +-60 +-89 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-40 +8 +47 +79 +105 +125 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +117 +111 +105 +99 +93 +87 +82 +77 +72 +67 +15 +-50 +-100 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-112 +-105 +-48 +11 +59 +99 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +73 +19 +-26 +-62 +-91 +-99 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-41 +7 +47 +79 +105 +124 +127 +127 +127 +127 +127 +127 +127 +127 +127 +103 +37 +-15 +-57 +-92 +-103 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-55 +-6 +34 +67 +93 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +31 +-21 +-63 +-97 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-57 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +30 +-21 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-58 +-9 +31 +64 +91 +111 +126 +127 +127 +127 +127 +127 +127 +127 +127 +94 +29 +-22 +-64 +-99 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-99 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +30 +-22 +-63 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +30 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-58 +-10 +31 +63 +90 +111 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +30 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-58 +-10 +31 +64 +91 +111 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +90 +111 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +117 +111 +105 +99 +94 +88 +83 +77 +73 +68 +63 +12 +-52 +-102 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-112 +-107 +-49 +9 +58 +98 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +68 +14 +-30 +-66 +-95 +-102 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-43 +5 +45 +77 +103 +123 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +116 +109 +104 +98 +92 +87 +81 +76 +71 +67 +15 +-50 +-100 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-101 +-50 +-8 +27 +55 +77 +95 +108 +117 +123 +127 +127 +127 +127 +127 +75 +11 +-39 +-81 +-98 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-110 +-105 +-100 +-111 +-107 +-34 +23 +72 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +74 +20 +-24 +-61 +-90 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-40 +8 +47 +79 +105 +125 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +116 +111 +105 +99 +93 +87 +82 +77 +72 +67 +16 +-49 +-99 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-112 +-106 +-49 +10 +59 +98 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +119 +112 +106 +99 +93 +88 +82 +29 +-36 +-87 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-109 +-103 +-47 +11 +60 +100 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +119 +112 +106 +99 +93 +88 +82 +30 +-36 +-87 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-109 +-104 +-47 +11 +60 +100 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +69 +15 +-29 +-65 +-94 +-101 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-42 +5 +45 +77 +103 +123 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +116 +109 +104 +98 +92 +87 +81 +76 +72 +67 +15 +-50 +-100 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-49 +-7 +28 +56 +78 +96 +109 +119 +125 +127 +127 +127 +127 +127 +76 +11 +-39 +-80 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-110 +-104 +-100 +-111 +-106 +-34 +23 +71 +109 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +69 +15 +-29 +-65 +-94 +-101 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-42 +6 +46 +78 +103 +123 +127 +127 +127 +127 +127 +127 +127 +127 +127 +101 +35 +-17 +-59 +-93 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-55 +-7 +33 +66 +93 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +117 +111 +105 +99 +94 +88 +83 +77 +73 +68 +64 +13 +-52 +-102 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-107 +-49 +9 +58 +98 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +119 +111 +105 +99 +93 +87 +81 +29 +-37 +-88 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-95 +-44 +-2 +32 +61 +83 +100 +112 +121 +127 +127 +127 +127 +127 +127 +78 +14 +-36 +-77 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-112 +-107 +-102 +-97 +-108 +-104 +-31 +26 +74 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +75 +21 +-23 +-60 +-89 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-40 +8 +47 +79 +105 +125 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +117 +111 +105 +99 +93 +87 +82 +77 +72 +67 +15 +-49 +-99 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-49 +-7 +28 +57 +79 +96 +109 +119 +125 +127 +127 +127 +127 +127 +76 +11 +-39 +-80 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-107 +-65 +-16 +25 +58 +85 +105 +121 +127 +127 +127 +127 +127 +127 +127 +127 +91 +27 +-25 +-66 +-101 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-107 +-102 +-97 +-108 +-104 +-31 +26 +74 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +75 +21 +-24 +-61 +-89 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-96 +-39 +8 +48 +80 +105 +125 +127 +127 +127 +127 +127 +127 +127 +127 +127 +103 +37 +-15 +-57 +-92 +-103 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-55 +-6 +34 +67 +93 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +96 +31 +-21 +-63 +-97 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-57 +-9 +32 +65 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +117 +111 +105 +99 +94 +88 +83 +77 +73 +68 +63 +12 +-53 +-103 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-101 +-50 +-8 +27 +55 +77 +95 +109 +118 +123 +127 +127 +127 +127 +127 +75 +11 +-39 +-80 +-98 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-107 +-65 +-17 +24 +58 +85 +105 +121 +127 +127 +127 +127 +127 +127 +127 +127 +91 +26 +-25 +-67 +-101 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-101 +-59 +-11 +30 +63 +89 +109 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-99 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-112 +-106 +-101 +-112 +-108 +-103 +-31 +27 +74 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +116 +109 +104 +97 +91 +85 +33 +-33 +-84 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-93 +-43 +-1 +33 +61 +83 +101 +113 +123 +127 +127 +127 +127 +127 +127 +79 +14 +-36 +-77 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-110 +-104 +-99 +-110 +-106 +-33 +24 +72 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +116 +109 +103 +96 +90 +85 +32 +-34 +-85 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-93 +-43 +-1 +33 +61 +83 +100 +113 +122 +127 +127 +127 +127 +127 +127 +78 +13 +-37 +-78 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-106 +-65 +-16 +25 +59 +85 +106 +122 +127 +127 +127 +127 +127 +127 +127 +127 +91 +26 +-25 +-67 +-101 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-102 +-60 +-11 +29 +63 +89 +109 +125 +127 +127 +127 +127 +127 +127 +127 +127 +94 +29 +-23 +-65 +-99 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-112 +-106 +-101 +-112 +-108 +-104 +-31 +26 +74 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +75 +21 +-24 +-60 +-89 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-96 +-40 +8 +48 +79 +105 +125 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +117 +111 +105 +99 +93 +88 +83 +77 +72 +67 +16 +-49 +-99 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-111 +-106 +-49 +10 +59 +98 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +67 +14 +-30 +-66 +-96 +-103 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-42 +5 +45 +77 +103 +123 +127 +127 +127 +127 +127 +127 +127 +127 +127 +101 +35 +-16 +-58 +-93 +-104 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-55 +-7 +33 +66 +93 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +96 +31 +-21 +-63 +-97 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-57 +-9 +32 +65 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +30 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +30 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +90 +111 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +30 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +30 +-21 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-10 +30 +63 +88 +108 +123 +127 +127 +127 +127 +127 +127 +127 +127 +90 +25 +-26 +-68 +-103 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-101 +-59 +-11 +30 +63 +89 +109 +125 +127 +127 +127 +127 +127 +127 +127 +127 +94 +28 +-23 +-65 +-99 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-58 +-9 +31 +64 +90 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-99 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-58 +-9 +31 +63 +90 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-99 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-58 +-10 +31 +64 +91 +111 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +30 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +63 +90 +111 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +30 +-21 +-63 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-57 +-9 +32 +65 +93 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +100 +35 +-17 +-59 +-93 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-55 +-7 +33 +66 +93 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +96 +31 +-21 +-63 +-97 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-57 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +117 +111 +105 +99 +94 +89 +83 +77 +73 +69 +64 +12 +-52 +-102 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-112 +-107 +-50 +9 +58 +97 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +67 +14 +-30 +-66 +-95 +-102 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-43 +5 +45 +77 +103 +123 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +116 +109 +104 +98 +92 +87 +81 +76 +72 +67 +15 +-50 +-100 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-49 +-7 +28 +56 +79 +96 +109 +119 +125 +127 +127 +127 +127 +127 +75 +11 +-39 +-80 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-110 +-105 +-99 +-111 +-106 +-33 +24 +72 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +74 +20 +-24 +-61 +-90 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-40 +8 +47 +79 +105 +125 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +116 +111 +105 +99 +93 +87 +82 +77 +72 +67 +15 +-49 +-99 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-112 +-106 +-49 +9 +58 +98 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +119 +112 +106 +99 +93 +87 +82 +29 +-37 +-87 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-109 +-104 +-47 +11 +60 +99 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +119 +112 +106 +99 +93 +88 +82 +30 +-36 +-87 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-109 +-104 +-47 +11 +60 +99 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +69 +15 +-29 +-65 +-95 +-102 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-42 +5 +45 +77 +103 +123 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +116 +109 +104 +98 +92 +87 +81 +76 +72 +67 +15 +-50 +-99 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-49 +-7 +28 +56 +78 +95 +109 +118 +124 +127 +127 +127 +127 +127 +76 +11 +-39 +-80 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-110 +-105 +-100 +-111 +-106 +-33 +24 +72 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +74 +20 +-25 +-61 +-90 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-40 +8 +47 +79 +105 +125 +127 +127 +127 +127 +127 +127 +127 +127 +127 +102 +36 +-16 +-58 +-93 +-104 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-55 +-7 +33 +66 +93 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +118 +112 +106 +101 +95 +89 +84 +79 +74 +69 +64 +13 +-52 +-102 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-106 +-49 +9 +58 +98 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +119 +112 +106 +99 +93 +87 +82 +30 +-36 +-87 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-95 +-45 +-3 +32 +60 +82 +99 +111 +121 +127 +127 +127 +127 +127 +127 +77 +13 +-37 +-78 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-109 +-104 +-99 +-110 +-105 +-33 +24 +73 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +74 +20 +-25 +-61 +-90 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-40 +8 +47 +79 +105 +125 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +116 +111 +105 +99 +93 +87 +82 +77 +72 +67 +15 +-49 +-99 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-49 +-7 +28 +56 +79 +96 +109 +119 +125 +127 +127 +127 +127 +127 +76 +11 +-39 +-80 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-107 +-65 +-16 +25 +58 +85 +105 +121 +127 +127 +127 +127 +127 +127 +127 +127 +91 +26 +-25 +-67 +-101 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-111 +-106 +-101 +-97 +-108 +-103 +-31 +27 +75 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +75 +21 +-23 +-60 +-89 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-39 +8 +48 +79 +105 +125 +127 +127 +127 +127 +127 +127 +127 +127 +127 +104 +37 +-14 +-57 +-91 +-103 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-55 +-7 +33 +65 +91 +111 +125 +127 +127 +127 +127 +127 +127 +127 +127 +91 +26 +-25 +-67 +-101 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-101 +-59 +-11 +31 +63 +89 +109 +126 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +115 +109 +104 +98 +93 +88 +82 +77 +73 +67 +63 +12 +-53 +-102 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-101 +-50 +-8 +27 +55 +77 +95 +107 +117 +123 +127 +127 +127 +127 +126 +75 +10 +-40 +-81 +-98 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-107 +-65 +-16 +25 +58 +85 +105 +121 +127 +127 +127 +127 +127 +127 +127 +127 +91 +26 +-25 +-67 +-101 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-59 +-10 +31 +63 +90 +110 +126 +127 +127 +127 +127 +127 +127 +127 +127 +93 +28 +-23 +-65 +-99 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-111 +-106 +-101 +-111 +-107 +-103 +-30 +27 +76 +115 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +113 +106 +100 +94 +88 +35 +-31 +-82 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-92 +-42 +-1 +34 +62 +84 +101 +114 +123 +127 +127 +127 +127 +127 +127 +79 +14 +-36 +-77 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-110 +-104 +-99 +-110 +-106 +-33 +24 +72 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +116 +109 +103 +96 +90 +85 +32 +-34 +-85 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-93 +-43 +-1 +33 +61 +83 +101 +113 +123 +127 +127 +127 +127 +127 +127 +79 +14 +-37 +-78 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-106 +-64 +-15 +25 +59 +85 +106 +122 +127 +127 +127 +127 +127 +127 +127 +127 +92 +27 +-24 +-66 +-101 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-101 +-59 +-11 +30 +63 +89 +109 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-99 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-111 +-106 +-101 +-112 +-108 +-104 +-31 +27 +74 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +75 +21 +-23 +-60 +-89 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-96 +-39 +8 +48 +80 +105 +125 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +117 +111 +105 +99 +93 +87 +82 +77 +72 +67 +16 +-49 +-99 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-112 +-107 +-49 +9 +59 +98 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +68 +14 +-30 +-66 +-95 +-102 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-43 +5 +45 +77 +103 +123 +127 +127 +127 +127 +127 +127 +127 +127 +127 +101 +35 +-16 +-58 +-93 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-55 +-7 +33 +66 +93 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +31 +-21 +-63 +-97 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-57 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-99 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +30 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +90 +110 +126 +127 +127 +127 +127 +127 +127 +127 +127 +94 +28 +-23 +-65 +-99 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-58 +-10 +31 +63 +90 +111 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-58 +-10 +31 +63 +91 +111 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-58 +-10 +31 +64 +91 +111 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-99 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-57 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +94 +29 +-23 +-64 +-99 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +117 +111 +105 +99 +94 +89 +83 +77 +73 +69 +64 +13 +-52 +-102 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-107 +-49 +9 +58 +97 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +68 +15 +-29 +-66 +-95 +-102 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-43 +5 +45 +77 +103 +123 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +116 +109 +104 +98 +92 +87 +81 +76 +71 +66 +15 +-50 +-100 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-49 +-7 +28 +56 +78 +96 +109 +119 +125 +127 +127 +127 +127 +127 +76 +11 +-39 +-80 +-98 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-110 +-105 +-100 +-111 +-106 +-34 +23 +71 +109 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +69 +15 +-29 +-65 +-94 +-101 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-41 +6 +46 +78 +104 +123 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +115 +109 +104 +98 +92 +87 +81 +76 +71 +67 +15 +-49 +-99 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-111 +-106 +-49 +9 +59 +98 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +119 +111 +105 +98 +93 +87 +81 +29 +-37 +-88 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-110 +-104 +-47 +11 +59 +99 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +119 +112 +106 +99 +93 +88 +82 +29 +-36 +-87 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-112 +-107 +-101 +-44 +14 +63 +102 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +69 +15 +-29 +-65 +-94 +-101 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-42 +6 +45 +77 +103 +123 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +116 +110 +104 +98 +92 +87 +82 +77 +72 +67 +15 +-50 +-100 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-49 +-7 +28 +56 +78 +96 +109 +119 +125 +127 +127 +127 +127 +127 +76 +11 +-39 +-80 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-110 +-105 +-100 +-111 +-107 +-33 +24 +72 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +74 +20 +-25 +-61 +-90 +-98 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-40 +8 +47 +79 +105 +125 +127 +127 +127 +127 +127 +127 +127 +127 +127 +103 +37 +-15 +-57 +-92 +-103 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-55 +-7 +34 +67 +93 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +117 +111 +106 +100 +95 +89 +84 +79 +74 +69 +64 +13 +-52 +-101 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-106 +-49 +9 +59 +98 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +119 +111 +105 +99 +93 +87 +81 +29 +-37 +-87 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-95 +-45 +-2 +32 +60 +82 +99 +111 +121 +127 +127 +127 +127 +127 +127 +77 +13 +-37 +-78 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-109 +-105 +-99 +-110 +-106 +-33 +24 +72 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +74 +20 +-24 +-61 +-90 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-40 +8 +47 +79 +105 +125 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +117 +111 +105 +99 +93 +87 +82 +77 +72 +67 +15 +-49 +-100 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-49 +-7 +28 +56 +79 +96 +109 +119 +125 +127 +127 +127 +127 +127 +76 +11 +-39 +-80 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-107 +-65 +-17 +24 +58 +84 +105 +121 +127 +127 +127 +127 +127 +127 +127 +127 +91 +26 +-25 +-66 +-101 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-107 +-102 +-97 +-108 +-103 +-31 +27 +74 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +75 +21 +-23 +-60 +-89 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-39 +8 +48 +79 +105 +125 +127 +127 +127 +127 +127 +127 +127 +127 +127 +103 +37 +-15 +-57 +-92 +-103 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-55 +-6 +34 +67 +93 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +96 +31 +-21 +-62 +-97 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-57 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +116 +110 +105 +99 +94 +88 +83 +77 +73 +67 +63 +12 +-53 +-103 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-101 +-50 +-8 +27 +55 +77 +95 +108 +118 +123 +127 +127 +127 +127 +126 +74 +10 +-40 +-81 +-98 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-107 +-65 +-17 +24 +58 +85 +105 +121 +127 +127 +127 +127 +127 +127 +127 +127 +91 +26 +-25 +-67 +-101 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-101 +-59 +-11 +30 +63 +89 +109 +125 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-23 +-64 +-99 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-111 +-106 +-101 +-112 +-107 +-103 +-31 +27 +74 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +117 +110 +104 +97 +91 +86 +33 +-33 +-84 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-93 +-43 +-1 +33 +61 +83 +100 +113 +122 +127 +127 +127 +127 +127 +127 +79 +14 +-36 +-77 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-110 +-104 +-99 +-111 +-105 +-33 +24 +72 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +116 +109 +103 +96 +90 +85 +32 +-34 +-84 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-93 +-43 +-1 +33 +61 +83 +101 +113 +123 +127 +127 +127 +127 +127 +127 +77 +13 +-37 +-78 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-106 +-64 +-15 +25 +59 +85 +106 +122 +127 +127 +127 +127 +127 +127 +127 +127 +91 +27 +-24 +-66 +-101 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-101 +-59 +-10 +30 +63 +89 +109 +126 +127 +127 +127 +127 +127 +127 +127 +127 +94 +29 +-23 +-64 +-99 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-112 +-106 +-101 +-112 +-108 +-103 +-31 +27 +74 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +71 +17 +-28 +-64 +-93 +-100 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-98 +-41 +7 +47 +78 +104 +123 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +115 +109 +104 +98 +92 +87 +81 +77 +72 +67 +15 +-49 +-99 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-112 +-106 +-49 +10 +59 +98 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +68 +14 +-30 +-66 +-95 +-103 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-43 +5 +45 +77 +103 +123 +127 +127 +127 +127 +127 +127 +127 +127 +127 +101 +36 +-16 +-58 +-93 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-55 +-7 +33 +66 +93 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +96 +31 +-21 +-63 +-97 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-57 +-8 +33 +66 +93 +115 +127 +127 +127 +127 +127 +127 +127 +127 +127 +101 +35 +-17 +-59 +-93 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-56 +-7 +33 +66 +92 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +30 +-21 +-63 +-97 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +30 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-58 +-9 +31 +64 +90 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +30 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-99 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +63 +90 +111 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-99 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +90 +111 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +30 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-58 +-9 +31 +64 +91 +111 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +30 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +117 +111 +105 +99 +94 +88 +83 +77 +73 +69 +64 +13 +-52 +-102 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-112 +-107 +-49 +9 +58 +98 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +67 +14 +-30 +-67 +-95 +-103 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-43 +5 +45 +77 +103 +123 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +116 +109 +104 +98 +92 +87 +81 +76 +71 +67 +15 +-50 +-100 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-49 +-7 +28 +56 +78 +96 +109 +119 +125 +127 +127 +127 +127 +127 +75 +11 +-39 +-80 +-98 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-110 +-105 +-99 +-111 +-107 +-34 +24 +72 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +74 +20 +-24 +-61 +-90 +-98 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-40 +7 +47 +79 +105 +123 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +116 +109 +104 +98 +92 +87 +81 +76 +71 +67 +15 +-50 +-99 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-112 +-106 +-49 +9 +58 +98 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +119 +112 +106 +99 +93 +87 +82 +29 +-37 +-87 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-109 +-104 +-47 +11 +60 +99 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +119 +112 +106 +99 +94 +88 +82 +30 +-36 +-87 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-109 +-103 +-46 +12 +60 +100 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +68 +15 +-30 +-66 +-95 +-102 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-42 +6 +45 +77 +103 +123 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +115 +110 +104 +98 +92 +87 +81 +76 +72 +67 +15 +-50 +-100 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-49 +-7 +27 +56 +77 +95 +109 +118 +124 +127 +127 +127 +127 +127 +76 +11 +-39 +-80 +-98 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-110 +-105 +-100 +-111 +-106 +-34 +24 +72 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +74 +20 +-24 +-61 +-90 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-40 +8 +47 +79 +105 +125 +127 +127 +127 +127 +127 +127 +127 +127 +127 +103 +37 +-15 +-57 +-92 +-103 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-112 +-55 +-6 +34 +67 +93 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +119 +112 +107 +101 +95 +89 +84 +79 +74 +69 +64 +13 +-52 +-102 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-109 +-51 +7 +57 +96 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +118 +111 +105 +98 +93 +86 +81 +29 +-37 +-87 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-95 +-45 +-3 +31 +60 +82 +99 +111 +121 +127 +127 +127 +127 +127 +127 +77 +13 +-37 +-78 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-110 +-105 +-99 +-111 +-106 +-33 +24 +72 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +74 +20 +-25 +-61 +-90 +-98 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-40 +8 +47 +79 +105 +124 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +116 +111 +104 +99 +93 +87 +82 +77 +72 +67 +15 +-49 +-99 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-95 +-44 +-2 +32 +61 +83 +100 +112 +122 +127 +127 +127 +127 +127 +127 +78 +14 +-37 +-78 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-106 +-64 +-15 +25 +59 +85 +106 +122 +127 +127 +127 +127 +127 +127 +127 +127 +91 +26 +-25 +-66 +-101 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-112 +-106 +-101 +-97 +-108 +-103 +-31 +27 +74 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +75 +21 +-23 +-60 +-89 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-40 +8 +47 +79 +105 +125 +127 +127 +127 +127 +127 +127 +127 +127 +127 +103 +37 +-15 +-57 +-92 +-103 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-55 +-7 +34 +67 +93 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +96 +31 +-21 +-63 +-97 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-57 +-9 +32 +65 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +117 +111 +105 +99 +95 +89 +83 +78 +74 +69 +64 +13 +-52 +-102 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-101 +-50 +-8 +27 +55 +77 +95 +108 +117 +123 +127 +127 +127 +127 +127 +76 +11 +-39 +-80 +-98 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-108 +-65 +-17 +24 +58 +84 +105 +121 +127 +127 +127 +127 +127 +127 +127 +127 +91 +26 +-25 +-67 +-101 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-101 +-59 +-11 +30 +63 +89 +109 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-112 +-106 +-101 +-112 +-108 +-103 +-31 +27 +74 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +117 +109 +103 +97 +91 +85 +33 +-34 +-84 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-93 +-43 +-1 +33 +61 +83 +101 +113 +123 +127 +127 +127 +127 +127 +127 +79 +14 +-36 +-77 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-109 +-104 +-99 +-111 +-106 +-33 +24 +72 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +116 +109 +103 +96 +91 +85 +32 +-33 +-84 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-93 +-43 +-1 +33 +61 +83 +101 +113 +123 +127 +127 +127 +127 +127 +127 +77 +13 +-37 +-78 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-107 +-65 +-16 +25 +59 +85 +106 +122 +127 +127 +127 +127 +127 +127 +127 +127 +91 +27 +-24 +-66 +-101 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-101 +-59 +-11 +30 +63 +89 +109 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-99 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-112 +-106 +-101 +-112 +-108 +-103 +-31 +27 +74 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +75 +21 +-23 +-60 +-89 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-96 +-40 +8 +47 +79 +105 +125 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +116 +109 +104 +98 +93 +87 +82 +77 +72 +67 +15 +-50 +-100 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-112 +-106 +-49 +9 +58 +98 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +67 +14 +-30 +-66 +-95 +-103 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-43 +5 +45 +77 +103 +122 +127 +127 +127 +127 +127 +127 +127 +127 +127 +101 +35 +-16 +-58 +-93 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-55 +-7 +33 +66 +93 +112 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +30 +-21 +-63 +-97 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-57 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +30 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-99 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-57 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +30 +-22 +-64 +-99 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +30 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-63 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +30 +-21 +-63 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-58 +-10 +30 +63 +88 +108 +123 +127 +127 +127 +127 +127 +127 +127 +127 +90 +25 +-26 +-68 +-103 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-101 +-59 +-11 +30 +63 +89 +109 +125 +127 +127 +127 +127 +127 +127 +127 +127 +93 +28 +-23 +-65 +-100 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +94 +29 +-23 +-64 +-99 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-57 +-9 +31 +65 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +65 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +117 +111 +105 +99 +94 +88 +83 +77 +73 +68 +64 +13 +-52 +-101 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-110 +-104 +-47 +11 +60 +100 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +69 +15 +-29 +-65 +-94 +-101 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-42 +5 +45 +77 +103 +123 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +116 +109 +104 +98 +92 +87 +81 +76 +71 +67 +15 +-50 +-100 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-49 +-7 +28 +56 +78 +96 +109 +119 +125 +127 +127 +127 +127 +127 +76 +11 +-39 +-80 +-98 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-110 +-105 +-99 +-111 +-106 +-34 +24 +72 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +74 +20 +-24 +-61 +-90 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-40 +8 +47 +79 +105 +125 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +117 +111 +105 +99 +93 +88 +82 +77 +72 +67 +16 +-49 +-99 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-112 +-106 +-49 +9 +58 +98 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +119 +111 +105 +99 +93 +87 +81 +29 +-37 +-87 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-110 +-103 +-47 +12 +60 +100 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +119 +112 +106 +99 +93 +88 +82 +30 +-36 +-87 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-110 +-104 +-47 +11 +59 +99 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +69 +15 +-29 +-65 +-94 +-102 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-43 +5 +45 +77 +103 +123 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +116 +109 +104 +98 +92 +87 +81 +76 +71 +67 +15 +-50 +-100 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-49 +-7 +28 +56 +78 +96 +109 +119 +125 +127 +127 +127 +127 +127 +76 +11 +-39 +-80 +-98 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-110 +-105 +-100 +-111 +-107 +-34 +23 +72 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +74 +20 +-25 +-61 +-90 +-98 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-40 +8 +47 +79 +105 +125 +127 +127 +127 +127 +127 +127 +127 +127 +127 +103 +37 +-15 +-57 +-92 +-103 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-112 +-55 +-6 +34 +67 +93 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +117 +111 +106 +100 +95 +89 +84 +78 +73 +69 +64 +13 +-52 +-102 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-112 +-106 +-49 +9 +58 +98 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +118 +111 +105 +98 +93 +87 +81 +29 +-37 +-87 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-95 +-44 +-2 +32 +60 +82 +99 +111 +121 +127 +127 +127 +127 +127 +127 +77 +13 +-37 +-78 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-110 +-105 +-99 +-111 +-106 +-33 +24 +72 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +74 +20 +-24 +-61 +-90 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-40 +7 +47 +79 +105 +124 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +117 +111 +105 +99 +93 +88 +82 +77 +72 +67 +15 +-49 +-99 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-49 +-7 +28 +56 +79 +96 +109 +119 +125 +127 +127 +127 +127 +127 +76 +11 +-39 +-80 +-98 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-107 +-65 +-17 +24 +58 +84 +105 +121 +127 +127 +127 +127 +127 +127 +127 +127 +91 +26 +-25 +-67 +-101 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-112 +-106 +-101 +-112 +-108 +-103 +-31 +27 +74 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +75 +21 +-23 +-60 +-89 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-96 +-39 +8 +48 +80 +106 +125 +127 +127 +127 +127 +127 +127 +127 +127 +127 +103 +37 +-15 +-57 +-92 +-103 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-55 +-6 +34 +67 +93 +114 +127 +127 +127 +127 +127 +127 +127 +127 +127 +96 +31 +-21 +-63 +-97 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-57 +-9 +31 +65 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +117 +111 +105 +99 +94 +88 +83 +77 +73 +68 +64 +13 +-52 +-102 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-49 +-7 +27 +56 +78 +95 +109 +118 +124 +127 +127 +127 +127 +127 +75 +10 +-40 +-81 +-100 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-112 +-69 +-20 +21 +54 +81 +102 +118 +127 +127 +127 +127 +127 +127 +127 +127 +89 +24 +-27 +-68 +-102 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-102 +-60 +-12 +29 +62 +89 +109 +125 +127 +127 +127 +127 +127 +127 +127 +127 +94 +29 +-23 +-65 +-99 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-111 +-106 +-101 +-112 +-107 +-103 +-30 +27 +75 +114 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +116 +109 +103 +97 +91 +85 +32 +-33 +-84 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-93 +-43 +-1 +33 +61 +83 +101 +113 +122 +127 +127 +127 +127 +127 +127 +79 +14 +-37 +-78 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-110 +-104 +-99 +-110 +-105 +-33 +25 +73 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +120 +113 +105 +99 +93 +87 +35 +-31 +-82 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-93 +-43 +-1 +34 +62 +83 +101 +114 +123 +127 +127 +127 +127 +127 +127 +79 +14 +-36 +-77 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-106 +-64 +-15 +25 +59 +85 +106 +122 +127 +127 +127 +127 +127 +127 +127 +127 +92 +27 +-24 +-66 +-101 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-59 +-10 +31 +63 +90 +110 +126 +127 +127 +127 +127 +127 +127 +127 +127 +94 +29 +-23 +-64 +-99 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-111 +-106 +-101 +-112 +-107 +-103 +-31 +27 +75 +114 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +75 +21 +-23 +-60 +-89 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-40 +8 +48 +79 +105 +125 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +117 +111 +105 +99 +93 +88 +82 +77 +72 +67 +16 +-49 +-99 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-112 +-106 +-49 +10 +59 +98 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +68 +14 +-30 +-66 +-95 +-102 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-42 +5 +45 +77 +103 +123 +127 +127 +127 +127 +127 +127 +127 +127 +127 +101 +35 +-16 +-58 +-93 +-104 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-55 +-7 +33 +66 +93 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +96 +31 +-21 +-63 +-97 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +30 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-58 +-9 +31 +63 +90 +111 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +90 +111 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +30 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +30 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-58 +-9 +31 +64 +91 +111 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +30 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +30 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +30 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-58 +-10 +31 +63 +91 +111 +126 +127 +127 +127 +127 +127 +127 +127 +127 +94 +29 +-23 +-65 +-99 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-58 +-10 +31 +63 +90 +110 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-58 +-10 +31 +63 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-10 +31 +63 +91 +111 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +30 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-58 +-9 +31 +64 +91 +111 +126 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +117 +111 +105 +99 +94 +89 +83 +77 +73 +68 +64 +13 +-52 +-102 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-112 +-106 +-49 +9 +59 +98 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +68 +14 +-30 +-66 +-95 +-102 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-42 +5 +45 +77 +103 +123 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +116 +109 +103 +98 +92 +87 +81 +76 +71 +67 +15 +-50 +-100 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-49 +-7 +27 +56 +78 +95 +109 +118 +124 +127 +127 +127 +127 +127 +76 +11 +-39 +-80 +-98 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-110 +-105 +-100 +-111 +-106 +-33 +24 +72 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +75 +20 +-24 +-61 +-90 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-40 +8 +47 +79 +105 +125 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +116 +111 +105 +99 +93 +87 +82 +77 +72 +67 +15 +-49 +-99 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-112 +-106 +-49 +9 +58 +97 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +115 +109 +103 +96 +91 +85 +79 +27 +-38 +-89 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-110 +-104 +-47 +11 +60 +100 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +119 +111 +105 +99 +93 +87 +82 +29 +-36 +-87 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-110 +-104 +-47 +12 +60 +100 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +69 +15 +-29 +-65 +-95 +-102 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-42 +5 +45 +77 +103 +123 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +116 +109 +104 +98 +92 +87 +81 +76 +71 +67 +15 +-49 +-99 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-95 +-45 +-3 +32 +60 +82 +99 +112 +122 +127 +127 +127 +127 +127 +127 +77 +13 +-37 +-78 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-109 +-105 +-99 +-110 +-106 +-33 +24 +72 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +74 +20 +-24 +-61 +-90 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-40 +8 +47 +79 +105 +125 +127 +127 +127 +127 +127 +127 +127 +127 +127 +102 +37 +-15 +-57 +-92 +-103 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-55 +-6 +34 +67 +93 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +118 +111 +106 +101 +95 +89 +84 +79 +74 +69 +64 +13 +-52 +-102 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-112 +-106 +-49 +9 +58 +97 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +119 +112 +105 +99 +93 +87 +82 +29 +-37 +-87 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-95 +-44 +-2 +32 +61 +82 +99 +111 +121 +127 +127 +127 +127 +127 +127 +77 +13 +-37 +-78 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-110 +-104 +-99 +-111 +-106 +-33 +24 +72 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +74 +20 +-24 +-61 +-90 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-40 +8 +47 +79 +105 +125 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +116 +111 +105 +99 +93 +87 +82 +77 +72 +67 +15 +-49 +-99 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-49 +-7 +28 +56 +79 +96 +109 +119 +125 +127 +127 +127 +127 +127 +76 +11 +-39 +-80 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-107 +-65 +-17 +24 +58 +85 +105 +121 +127 +127 +127 +127 +127 +127 +127 +127 +91 +26 +-25 +-66 +-101 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-112 +-107 +-102 +-97 +-108 +-104 +-31 +26 +74 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +75 +21 +-24 +-61 +-89 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-40 +8 +48 +79 +105 +125 +127 +127 +127 +127 +127 +127 +127 +127 +127 +103 +37 +-15 +-57 +-92 +-103 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-112 +-55 +-6 +34 +67 +93 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +97 +31 +-20 +-62 +-97 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-57 +-8 +32 +65 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +117 +111 +105 +99 +94 +88 +83 +77 +73 +68 +63 +13 +-53 +-102 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-101 +-50 +-8 +27 +55 +77 +95 +108 +117 +123 +127 +127 +127 +127 +127 +75 +11 +-39 +-80 +-98 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-107 +-65 +-16 +25 +58 +85 +105 +121 +127 +127 +127 +127 +127 +127 +127 +127 +91 +26 +-25 +-67 +-101 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-101 +-60 +-11 +29 +62 +89 +109 +125 +127 +127 +127 +127 +127 +127 +127 +127 +94 +29 +-23 +-65 +-99 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-112 +-107 +-101 +-112 +-108 +-103 +-31 +26 +74 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +117 +109 +104 +97 +91 +85 +33 +-33 +-84 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-93 +-43 +-1 +33 +61 +83 +101 +113 +123 +127 +127 +127 +127 +127 +127 +79 +14 +-36 +-77 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-109 +-104 +-99 +-110 +-106 +-33 +24 +72 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +116 +109 +103 +97 +91 +85 +32 +-34 +-84 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-94 +-44 +-1 +33 +61 +83 +100 +113 +122 +127 +127 +127 +127 +127 +127 +78 +14 +-37 +-78 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-106 +-64 +-15 +25 +59 +85 +106 +122 +127 +127 +127 +127 +127 +127 +127 +127 +91 +27 +-24 +-66 +-101 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-101 +-59 +-11 +30 +63 +89 +109 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-99 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-111 +-106 +-101 +-112 +-107 +-103 +-31 +27 +75 +114 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +76 +21 +-23 +-59 +-89 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-96 +-39 +9 +48 +79 +105 +125 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +117 +110 +105 +99 +93 +87 +82 +77 +72 +67 +15 +-49 +-99 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-111 +-106 +-49 +9 +58 +97 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +63 +9 +-35 +-70 +-99 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-101 +-44 +3 +43 +76 +101 +121 +127 +127 +127 +127 +127 +127 +127 +127 +127 +100 +34 +-17 +-59 +-94 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-55 +-7 +33 +66 +93 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +30 +-22 +-63 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-57 +-9 +31 +65 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-99 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-57 +-8 +32 +65 +93 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +100 +34 +-17 +-59 +-93 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-55 +-7 +33 +66 +93 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +96 +31 +-21 +-63 +-97 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-57 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +30 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-58 +-10 +31 +64 +91 +111 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +30 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-99 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-99 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-99 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-10 +31 +64 +91 +111 +126 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +117 +111 +105 +99 +94 +88 +83 +77 +73 +68 +63 +13 +-53 +-102 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-107 +-49 +9 +58 +98 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +68 +14 +-30 +-66 +-95 +-102 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-43 +5 +45 +77 +103 +123 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +116 +109 +104 +98 +92 +87 +81 +77 +72 +67 +15 +-50 +-100 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-49 +-7 +28 +56 +79 +96 +109 +119 +125 +127 +127 +127 +127 +127 +76 +11 +-39 +-80 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-110 +-105 +-99 +-111 +-106 +-33 +24 +72 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +74 +20 +-25 +-61 +-90 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-40 +8 +47 +79 +105 +125 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +117 +111 +105 +99 +93 +87 +82 +77 +72 +67 +16 +-49 +-99 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-112 +-106 +-49 +10 +59 +98 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +119 +112 +106 +99 +93 +87 +82 +29 +-37 +-88 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-110 +-105 +-47 +11 +59 +99 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +119 +112 +106 +99 +93 +87 +81 +29 +-37 +-87 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-110 +-104 +-47 +11 +60 +99 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +69 +15 +-29 +-65 +-94 +-101 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-42 +5 +45 +77 +103 +123 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +116 +109 +104 +98 +92 +87 +82 +77 +72 +67 +15 +-49 +-100 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-49 +-7 +28 +56 +78 +96 +109 +119 +125 +127 +127 +127 +127 +127 +76 +11 +-39 +-80 +-98 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-110 +-105 +-100 +-111 +-106 +-34 +24 +72 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +74 +20 +-25 +-61 +-90 +-98 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-40 +8 +47 +79 +105 +125 +127 +127 +127 +127 +127 +127 +127 +127 +127 +103 +37 +-15 +-57 +-92 +-103 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-112 +-55 +-6 +34 +67 +93 +114 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +118 +112 +106 +101 +95 +89 +84 +79 +74 +69 +64 +13 +-52 +-101 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-107 +-49 +9 +58 +97 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +119 +111 +105 +99 +93 +87 +81 +29 +-37 +-87 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-94 +-44 +-2 +32 +61 +83 +99 +112 +121 +127 +127 +127 +127 +127 +127 +77 +13 +-37 +-79 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-112 +-106 +-101 +-112 +-108 +-35 +23 +71 +109 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +73 +19 +-25 +-62 +-91 +-98 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-40 +8 +47 +79 +105 +124 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +116 +109 +104 +98 +92 +87 +81 +77 +72 +67 +15 +-49 +-99 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-49 +-7 +28 +56 +78 +95 +109 +118 +124 +127 +127 +127 +127 +127 +76 +11 +-39 +-80 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-107 +-65 +-16 +25 +58 +85 +105 +121 +127 +127 +127 +127 +127 +127 +127 +127 +91 +26 +-25 +-66 +-101 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-112 +-107 +-102 +-97 +-108 +-103 +-31 +27 +75 +115 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +80 +26 +-19 +-56 +-85 +-109 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-94 +-37 +10 +50 +81 +107 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +104 +38 +-14 +-56 +-91 +-102 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-112 +-55 +-6 +34 +67 +93 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +97 +31 +-20 +-62 +-97 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-57 +-9 +31 +65 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +117 +111 +105 +99 +94 +88 +83 +77 +73 +68 +63 +12 +-53 +-102 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-101 +-50 +-8 +27 +55 +77 +95 +108 +117 +123 +127 +127 +127 +127 +127 +75 +11 +-39 +-80 +-98 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-107 +-65 +-17 +25 +58 +85 +105 +121 +127 +127 +127 +127 +127 +127 +127 +127 +91 +26 +-25 +-66 +-101 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-101 +-59 +-11 +30 +63 +89 +109 +125 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-99 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-111 +-106 +-101 +-112 +-108 +-103 +-31 +27 +75 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +117 +110 +104 +97 +91 +85 +33 +-33 +-84 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-94 +-43 +-1 +33 +61 +83 +101 +113 +122 +127 +127 +127 +127 +127 +127 +79 +14 +-36 +-77 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-109 +-104 +-99 +-111 +-106 +-33 +24 +72 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +116 +109 +103 +96 +90 +85 +32 +-34 +-85 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-93 +-43 +-1 +33 +61 +83 +101 +113 +123 +127 +127 +127 +127 +127 +127 +78 +13 +-37 +-78 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-107 +-65 +-16 +25 +59 +85 +105 +121 +127 +127 +127 +127 +127 +127 +127 +127 +92 +27 +-24 +-66 +-101 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-59 +-10 +30 +63 +89 +109 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-99 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-111 +-106 +-101 +-112 +-108 +-103 +-31 +27 +75 +114 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +75 +21 +-23 +-60 +-89 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-96 +-39 +8 +48 +79 +105 +125 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +116 +111 +104 +99 +93 +87 +82 +77 +72 +67 +15 +-49 +-99 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-112 +-106 +-49 +10 +59 +98 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +67 +14 +-30 +-66 +-95 +-102 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-43 +5 +45 +77 +102 +122 +127 +127 +127 +127 +127 +127 +127 +127 +127 +101 +35 +-17 +-59 +-94 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-56 +-7 +33 +66 +92 +112 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +30 +-21 +-63 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-58 +-9 +31 +63 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +30 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-10 +31 +63 +90 +110 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +90 +111 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-58 +-9 +31 +63 +91 +111 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-23 +-64 +-99 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +30 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +30 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +90 +111 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +30 +-22 +-63 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-10 +31 +63 +89 +109 +124 +127 +127 +127 +127 +127 +127 +127 +127 +91 +25 +-26 +-68 +-102 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-101 +-59 +-11 +30 +63 +89 +109 +125 +127 +127 +127 +127 +127 +127 +127 +127 +93 +28 +-23 +-65 +-99 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-58 +-10 +31 +64 +91 +111 +126 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +116 +111 +105 +99 +93 +88 +83 +77 +73 +68 +63 +12 +-52 +-102 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-112 +-107 +-49 +9 +58 +98 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +68 +14 +-30 +-66 +-95 +-102 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-43 +5 +45 +77 +103 +123 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +116 +109 +104 +98 +92 +87 +81 +76 +71 +66 +15 +-50 +-99 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-95 +-44 +-2 +33 +61 +83 +101 +113 +122 +127 +127 +127 +127 +127 +127 +77 +13 +-37 +-78 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-109 +-104 +-99 +-111 +-106 +-33 +24 +72 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +74 +20 +-24 +-61 +-90 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-40 +8 +47 +79 +105 +125 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +117 +111 +105 +99 +93 +87 +82 +77 +72 +67 +15 +-49 +-99 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-112 +-106 +-49 +10 +59 +98 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +119 +112 +106 +99 +93 +87 +82 +29 +-37 +-87 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-109 +-104 +-47 +11 +60 +99 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +119 +113 +106 +99 +94 +88 +82 +30 +-36 +-87 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-109 +-104 +-47 +11 +60 +100 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +69 +15 +-29 +-66 +-95 +-102 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-42 +5 +45 +77 +103 +123 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +116 +109 +104 +98 +93 +87 +81 +76 +72 +67 +15 +-50 +-100 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-49 +-7 +28 +56 +78 +96 +109 +119 +124 +127 +127 +127 +127 +127 +76 +11 +-39 +-80 +-98 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-110 +-105 +-100 +-111 +-106 +-34 +24 +72 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +74 +20 +-25 +-61 +-90 +-98 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-40 +8 +47 +79 +105 +125 +127 +127 +127 +127 +127 +127 +127 +127 +127 +104 +37 +-15 +-57 +-92 +-103 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-55 +-7 +34 +67 +93 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +118 +111 +106 +101 +95 +89 +84 +79 +74 +69 +64 +13 +-52 +-102 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-112 +-107 +-49 +9 +58 +98 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +119 +111 +105 +99 +93 +87 +81 +29 +-36 +-87 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-95 +-44 +-2 +32 +61 +82 +99 +112 +121 +127 +127 +127 +127 +127 +127 +77 +13 +-37 +-78 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-110 +-104 +-99 +-111 +-106 +-33 +24 +72 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +73 +19 +-25 +-62 +-91 +-98 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-41 +7 +47 +79 +105 +124 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +116 +111 +105 +99 +93 +87 +82 +77 +72 +67 +15 +-49 +-99 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-49 +-7 +28 +56 +78 +96 +109 +119 +124 +127 +127 +127 +127 +127 +76 +11 +-39 +-80 +-98 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-107 +-65 +-16 +25 +58 +85 +105 +121 +127 +127 +127 +127 +127 +127 +127 +127 +91 +26 +-25 +-67 +-101 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-112 +-107 +-101 +-112 +-108 +-103 +-31 +27 +74 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +75 +21 +-23 +-61 +-89 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-96 +-39 +8 +48 +79 +105 +125 +127 +127 +127 +127 +127 +127 +127 +127 +127 +103 +37 +-15 +-57 +-92 +-103 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-55 +-6 +34 +67 +93 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +31 +-21 +-63 +-97 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-57 +-8 +32 +65 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +117 +111 +105 +99 +94 +89 +83 +77 +73 +68 +64 +13 +-52 +-102 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-101 +-50 +-8 +27 +55 +77 +95 +108 +117 +123 +127 +127 +127 +127 +127 +75 +11 +-39 +-80 +-98 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-107 +-65 +-16 +25 +58 +85 +105 +121 +127 +127 +127 +127 +127 +127 +127 +127 +91 +26 +-25 +-67 +-101 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-101 +-59 +-11 +30 +63 +89 +109 +126 +127 +127 +127 +127 +127 +127 +127 +127 +94 +29 +-23 +-64 +-99 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-111 +-106 +-101 +-112 +-108 +-103 +-31 +27 +74 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +113 +107 +101 +95 +89 +83 +31 +-35 +-86 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-95 +-44 +-2 +32 +60 +82 +99 +112 +121 +127 +127 +127 +127 +127 +127 +79 +14 +-36 +-78 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-110 +-105 +-99 +-110 +-106 +-33 +24 +72 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +115 +109 +102 +96 +90 +85 +32 +-34 +-84 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-93 +-43 +-1 +33 +61 +83 +100 +113 +122 +127 +127 +127 +127 +127 +127 +78 +13 +-37 +-78 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-106 +-64 +-15 +26 +59 +86 +106 +122 +127 +127 +127 +127 +127 +127 +127 +127 +91 +27 +-24 +-65 +-99 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-112 +-54 +-6 +35 +67 +94 +114 +127 +127 +127 +127 +127 +127 +127 +127 +127 +97 +31 +-20 +-62 +-97 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-111 +-105 +-100 +-112 +-107 +-103 +-30 +27 +75 +114 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +75 +21 +-23 +-60 +-89 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-39 +8 +48 +79 +106 +125 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +117 +111 +105 +99 +93 +87 +82 +77 +72 +67 +15 +-49 +-99 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-112 +-106 +-49 +10 +59 +98 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +67 +14 +-30 +-66 +-95 +-102 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-43 +5 +45 +77 +103 +123 +127 +127 +127 +127 +127 +127 +127 +127 +127 +101 +35 +-16 +-58 +-93 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-55 +-7 +33 +66 +93 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +30 +-21 +-63 +-97 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-57 +-9 +32 +65 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +30 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +63 +91 +111 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +30 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-58 +-10 +31 +63 +90 +111 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-99 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +30 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +30 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-99 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +90 +111 +126 +127 +127 +127 +127 +127 +127 +127 +127 +94 +29 +-23 +-65 +-99 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-58 +-10 +31 +63 +90 +111 +126 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +117 +111 +105 +99 +94 +88 +83 +77 +73 +68 +63 +12 +-53 +-103 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-107 +-49 +9 +58 +97 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +67 +14 +-30 +-66 +-95 +-102 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-43 +5 +45 +77 +102 +122 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +115 +110 +104 +98 +92 +87 +81 +76 +71 +67 +15 +-50 +-100 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-49 +-7 +28 +56 +78 +96 +109 +119 +124 +127 +127 +127 +127 +127 +76 +11 +-39 +-80 +-98 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-110 +-105 +-99 +-110 +-106 +-33 +24 +72 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +74 +20 +-25 +-61 +-90 +-98 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-40 +7 +47 +79 +105 +124 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +116 +111 +105 +99 +93 +87 +82 +77 +72 +67 +16 +-49 +-99 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-111 +-105 +-49 +10 +59 +98 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +119 +112 +105 +99 +93 +87 +81 +29 +-37 +-87 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-109 +-104 +-47 +11 +60 +99 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +119 +113 +106 +99 +94 +88 +82 +30 +-36 +-87 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-111 +-106 +-49 +10 +59 +98 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +67 +13 +-31 +-67 +-95 +-103 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-42 +5 +45 +77 +103 +123 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +115 +109 +103 +97 +91 +87 +81 +76 +71 +66 +15 +-50 +-100 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-49 +-7 +27 +56 +77 +95 +109 +118 +124 +127 +127 +127 +127 +127 +76 +11 +-39 +-80 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-110 +-105 +-100 +-111 +-106 +-33 +24 +72 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +74 +20 +-24 +-61 +-90 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-40 +8 +48 +81 +107 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +108 +42 +-10 +-52 +-87 +-99 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-110 +-53 +-5 +36 +69 +95 +115 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +119 +112 +107 +101 +95 +90 +84 +79 +74 +69 +64 +13 +-51 +-101 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-112 +-106 +-49 +9 +58 +98 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +119 +112 +106 +99 +93 +87 +81 +29 +-37 +-87 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-95 +-45 +-3 +32 +60 +82 +99 +112 +121 +127 +127 +127 +127 +127 +127 +77 +13 +-37 +-78 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-110 +-104 +-99 +-110 +-105 +-33 +24 +72 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +74 +20 +-25 +-61 +-90 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-40 +8 +47 +79 +105 +125 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +116 +111 +104 +99 +93 +87 +82 +77 +72 +67 +15 +-49 +-99 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-49 +-7 +28 +56 +77 +95 +109 +118 +124 +127 +127 +127 +127 +127 +76 +11 +-39 +-80 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-107 +-65 +-16 +25 +59 +85 +106 +121 +127 +127 +127 +127 +127 +127 +127 +127 +91 +27 +-25 +-66 +-101 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-112 +-107 +-102 +-97 +-108 +-104 +-31 +26 +74 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +75 +21 +-23 +-60 +-89 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-40 +8 +47 +79 +105 +125 +127 +127 +127 +127 +127 +127 +127 +127 +127 +103 +37 +-15 +-57 +-92 +-103 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-112 +-55 +-6 +34 +67 +93 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +97 +31 +-20 +-62 +-97 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-57 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +117 +111 +105 +99 +94 +89 +83 +78 +73 +68 +64 +13 +-52 +-102 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-101 +-50 +-8 +27 +55 +77 +95 +108 +117 +123 +127 +127 +127 +127 +127 +75 +11 +-39 +-81 +-98 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-107 +-65 +-17 +24 +58 +84 +105 +121 +127 +127 +127 +127 +127 +127 +127 +127 +91 +26 +-25 +-67 +-101 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-101 +-59 +-11 +30 +63 +89 +109 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-99 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-111 +-106 +-101 +-112 +-107 +-103 +-31 +27 +75 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +116 +109 +104 +97 +91 +85 +33 +-33 +-84 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-94 +-44 +-2 +32 +60 +82 +99 +112 +121 +127 +127 +127 +127 +127 +127 +78 +14 +-37 +-78 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-110 +-105 +-99 +-111 +-106 +-34 +23 +72 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +116 +109 +103 +97 +90 +84 +32 +-34 +-85 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-94 +-43 +-1 +33 +61 +83 +101 +113 +123 +127 +127 +127 +127 +127 +127 +78 +14 +-37 +-78 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-106 +-64 +-16 +25 +59 +85 +106 +122 +127 +127 +127 +127 +127 +127 +127 +127 +92 +27 +-24 +-66 +-101 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-59 +-11 +30 +63 +89 +109 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-99 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-112 +-106 +-101 +-112 +-108 +-103 +-31 +27 +75 +114 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +75 +21 +-23 +-60 +-89 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-96 +-39 +9 +48 +80 +106 +125 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +117 +111 +105 +99 +93 +87 +82 +77 +72 +67 +16 +-49 +-99 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-112 +-106 +-49 +9 +58 +98 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +68 +14 +-30 +-66 +-95 +-103 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-42 +5 +45 +77 +103 +123 +127 +127 +127 +127 +127 +127 +127 +127 +127 +102 +36 +-16 +-58 +-93 +-104 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-55 +-7 +33 +66 +93 +112 +127 +127 +127 +127 +127 +127 +127 +127 +127 +96 +31 +-21 +-63 +-97 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +63 +89 +109 +124 +127 +127 +127 +127 +127 +127 +127 +127 +90 +25 +-27 +-69 +-102 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-101 +-59 +-11 +30 +63 +89 +109 +125 +127 +127 +127 +127 +127 +127 +127 +127 +94 +28 +-23 +-65 +-99 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +94 +29 +-23 +-65 +-99 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +30 +-22 +-63 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-57 +-8 +32 +65 +93 +114 +127 +127 +127 +127 +127 +127 +127 +127 +127 +100 +35 +-17 +-59 +-94 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-55 +-7 +33 +66 +93 +112 +127 +127 +127 +127 +127 +127 +127 +127 +127 +96 +31 +-21 +-63 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-57 +-9 +31 +65 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-99 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-58 +-9 +31 +64 +91 +111 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +90 +111 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-57 +-9 +31 +64 +91 +111 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +30 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +117 +111 +105 +99 +94 +88 +83 +77 +73 +68 +64 +12 +-52 +-102 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-112 +-107 +-49 +9 +58 +97 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +67 +14 +-30 +-66 +-95 +-102 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-43 +5 +45 +77 +103 +123 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +116 +109 +104 +98 +92 +87 +81 +76 +71 +67 +15 +-50 +-100 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-49 +-7 +27 +56 +78 +95 +109 +118 +124 +127 +127 +127 +127 +127 +76 +11 +-39 +-80 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-110 +-105 +-99 +-111 +-106 +-34 +23 +72 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +74 +20 +-24 +-61 +-90 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-40 +8 +47 +79 +105 +124 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +116 +111 +105 +99 +93 +87 +82 +77 +72 +67 +16 +-49 +-99 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-112 +-106 +-49 +9 +58 +98 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +119 +111 +105 +99 +93 +87 +81 +29 +-37 +-87 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-109 +-104 +-47 +11 +60 +100 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +119 +112 +106 +99 +93 +88 +82 +30 +-36 +-87 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-109 +-104 +-47 +12 +60 +100 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +67 +14 +-30 +-67 +-95 +-103 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-43 +5 +45 +77 +102 +122 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +115 +109 +104 +98 +92 +87 +81 +76 +71 +66 +15 +-50 +-100 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-49 +-7 +28 +56 +79 +96 +109 +118 +125 +127 +127 +127 +127 +127 +75 +10 +-40 +-81 +-98 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-109 +-104 +-99 +-111 +-106 +-33 +24 +72 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +74 +20 +-25 +-61 +-90 +-98 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-40 +8 +47 +79 +105 +125 +127 +127 +127 +127 +127 +127 +127 +127 +127 +103 +37 +-15 +-57 +-92 +-103 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-55 +-6 +34 +67 +93 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +118 +111 +106 +100 +95 +89 +84 +79 +74 +69 +64 +13 +-52 +-101 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-112 +-106 +-49 +9 +59 +98 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +119 +111 +105 +99 +93 +87 +82 +30 +-36 +-87 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-95 +-44 +-2 +32 +61 +82 +99 +111 +121 +127 +127 +127 +127 +127 +127 +77 +13 +-37 +-78 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-110 +-105 +-99 +-111 +-106 +-33 +24 +72 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +74 +20 +-24 +-61 +-90 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-40 +8 +47 +79 +105 +125 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +117 +111 +105 +99 +93 +88 +82 +77 +72 +67 +15 +-49 +-100 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-104 +-53 +-11 +24 +52 +74 +92 +105 +115 +121 +126 +127 +127 +127 +125 +74 +9 +-41 +-81 +-99 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-108 +-66 +-17 +24 +57 +83 +105 +120 +127 +127 +127 +127 +127 +127 +127 +127 +91 +26 +-25 +-67 +-101 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-107 +-102 +-97 +-108 +-103 +-31 +26 +74 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +75 +21 +-23 +-60 +-89 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-40 +8 +48 +80 +106 +125 +127 +127 +127 +127 +127 +127 +127 +127 +127 +103 +37 +-15 +-57 +-92 +-103 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-55 +-7 +34 +67 +93 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +97 +31 +-20 +-62 +-97 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-98 +-56 +-7 +33 +67 +94 +115 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +115 +109 +103 +97 +91 +86 +81 +75 +71 +66 +15 +-50 +-101 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-49 +-7 +28 +56 +78 +96 +109 +118 +124 +127 +127 +127 +127 +127 +75 +11 +-39 +-80 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-107 +-65 +-17 +25 +58 +85 +105 +121 +127 +127 +127 +127 +127 +127 +127 +127 +91 +27 +-25 +-66 +-101 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-101 +-59 +-11 +30 +63 +89 +109 +125 +127 +127 +127 +127 +127 +127 +127 +127 +94 +28 +-23 +-65 +-99 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-111 +-106 +-101 +-112 +-108 +-103 +-31 +27 +75 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +117 +109 +104 +97 +91 +85 +33 +-33 +-84 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-93 +-43 +-1 +33 +61 +83 +101 +113 +123 +127 +127 +127 +127 +127 +127 +79 +14 +-36 +-77 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-109 +-104 +-99 +-111 +-106 +-33 +24 +72 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +116 +109 +103 +96 +90 +85 +32 +-34 +-85 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-94 +-44 +-1 +33 +61 +83 +101 +113 +122 +127 +127 +127 +127 +127 +127 +77 +13 +-37 +-78 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-106 +-64 +-16 +25 +59 +85 +106 +122 +127 +127 +127 +127 +127 +127 +127 +127 +91 +27 +-24 +-66 +-101 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-101 +-59 +-11 +30 +63 +89 +109 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-99 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-112 +-106 +-101 +-112 +-108 +-103 +-31 +27 +74 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +75 +21 +-23 +-60 +-89 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-96 +-39 +8 +48 +80 +105 +125 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +117 +111 +105 +99 +93 +88 +82 +77 +72 +67 +15 +-49 +-99 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-112 +-106 +-49 +9 +59 +98 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +67 +13 +-30 +-66 +-96 +-103 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-42 +5 +45 +77 +103 +123 +127 +127 +127 +127 +127 +127 +127 +127 +127 +101 +36 +-16 +-58 +-93 +-104 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-55 +-7 +33 +66 +93 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +96 +31 +-21 +-63 +-97 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-57 +-9 +31 +65 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +94 +29 +-23 +-65 +-99 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-58 +-10 +31 +63 +90 +110 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-58 +-10 +31 +63 +90 +111 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-58 +-9 +31 +64 +91 +111 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +90 +111 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-99 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +126 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-99 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +65 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +29 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +30 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +64 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +30 +-22 +-64 +-98 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-58 +-9 +31 +63 +90 +111 +126 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +117 +111 +105 +99 +94 +89 +83 +78 +73 +68 +64 +13 +-52 +-102 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-109 +-51 +7 +56 +96 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +67 +13 +-31 +-68 +-96 +-103 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-43 +5 +45 +77 +102 +123 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +115 +109 +103 +97 +91 +86 +81 +76 +71 +66 +15 +-50 +-100 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-49 +-7 +28 +56 +78 +95 +109 +118 +124 +127 +127 +127 +127 +126 +75 +11 +-39 +-80 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-110 +-105 +-100 +-111 +-106 +-34 +24 +72 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +74 +20 +-24 +-61 +-90 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-40 +8 +48 +80 +106 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +115 +109 +102 +96 +91 +85 +80 +75 +70 +19 +-47 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-111 +-105 +-48 +10 +59 +99 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +119 +112 +105 +99 +93 +87 +81 +29 +-37 +-87 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-109 +-104 +-47 +11 +60 +99 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +119 +112 +106 +99 +93 +88 +82 +30 +-36 +-87 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-109 +-104 +-47 +11 +60 +99 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +69 +15 +-29 +-65 +-95 +-102 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-42 +5 +45 +77 +103 +123 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +116 +109 +104 +98 +92 +87 +81 +76 +71 +67 +15 +-50 +-100 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-50 +-7 +27 +56 +78 +95 +109 +118 +124 +127 +127 +127 +127 +127 +75 +11 +-39 +-80 +-98 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-110 +-105 +-99 +-111 +-107 +-34 +24 +72 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +74 +20 +-25 +-61 +-90 +-98 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-40 +8 +47 +79 +105 +125 +127 +127 +127 +127 +127 +127 +127 +127 +127 +103 +37 +-15 +-57 +-92 +-103 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-55 +-7 +34 +66 +93 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +117 +111 +106 +100 +95 +89 +84 +78 +73 +69 +64 +13 +-52 +-102 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-106 +-49 +9 +58 +98 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +119 +112 +105 +99 +93 +88 +82 +29 +-36 +-87 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-95 +-44 +-2 +32 +60 +82 +99 +112 +121 +127 +127 +127 +127 +127 +127 +78 +13 +-37 +-78 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-110 +-104 +-99 +-111 +-106 +-34 +24 +72 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +74 +20 +-25 +-61 +-90 +-98 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-40 +8 +47 +79 +105 +125 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +117 +111 +105 +99 +93 +87 +82 +77 +72 +67 +15 +-49 +-99 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-100 +-49 +-7 +28 +56 +78 +96 +109 +118 +124 +127 +127 +127 +127 +127 +76 +11 +-39 +-80 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-108 +-66 +-17 +24 +57 +84 +105 +120 +127 +127 +127 +127 +127 +127 +127 +127 +91 +25 +-25 +-67 +-101 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-107 +-102 +-97 +-108 +-104 +-32 +26 +74 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +75 +21 +-23 +-60 +-89 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-40 +8 +47 +79 +105 +125 +127 +127 +127 +127 +127 +127 +127 +127 +127 +104 +37 +-15 +-57 +-92 +-103 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-97 +-55 +-7 +34 +67 +93 +113 +127 +127 +127 +127 +127 +127 +127 +127 +127 +96 +31 +-21 +-62 +-97 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-99 +-57 +-9 +31 +65 +91 +111 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +117 +111 +105 +99 +94 +89 +83 +78 +73 +69 +64 +13 +-52 +-102 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-101 +-50 +-8 +27 +55 +77 +95 +108 +117 +123 +127 +127 +127 +127 +127 +75 +11 +-39 +-80 +-98 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-107 +-65 +-17 +24 +58 +84 +105 +121 +127 +127 +127 +127 +127 +127 +127 +127 +91 +27 +-24 +-66 +-101 +-111 +-128 +-128 +-128 +-128 diff --git a/traces/visa2000.pm3 b/traces/lf_VISA2000.pm3 similarity index 100% rename from traces/visa2000.pm3 rename to traces/lf_VISA2000.pm3 diff --git a/traces/verichip_1022000000084146.pm3 b/traces/lf_VeriChip_1022000000084146.pm3 similarity index 100% rename from traces/verichip_1022000000084146.pm3 rename to traces/lf_VeriChip_1022000000084146.pm3 diff --git a/traces/sniff-ht2-BC3B8810-acg-reader.pm3 b/traces/lf_sniff_ht2-BC3B8810-acg-reader.pm3 similarity index 100% rename from traces/sniff-ht2-BC3B8810-acg-reader.pm3 rename to traces/lf_sniff_ht2-BC3B8810-acg-reader.pm3 diff --git a/traces/sniff-ht2-BC3B8810-frosch-reader.pm3 b/traces/lf_sniff_ht2-BC3B8810-frosch-reader.pm3 similarity index 100% rename from traces/sniff-ht2-BC3B8810-frosch-reader.pm3 rename to traces/lf_sniff_ht2-BC3B8810-frosch-reader.pm3 diff --git a/traces/sniff-ht2-BC3B8810-rfidler-reader.pm3 b/traces/lf_sniff_ht2-BC3B8810-rfidler-reader.pm3 similarity index 100% rename from traces/sniff-ht2-BC3B8810-rfidler-reader.pm3 rename to traces/lf_sniff_ht2-BC3B8810-rfidler-reader.pm3 From 58efbaeefd301a299bb5a5f31c1b28648f60fe2d Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Tue, 29 Sep 2020 17:48:50 +0200 Subject: [PATCH 0696/1047] typo --- traces/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/traces/README.md b/traces/README.md index c3878495a..34b3d577c 100644 --- a/traces/README.md +++ b/traces/README.md @@ -27,7 +27,7 @@ |lf_HomeAgain.pm3|HomeAgain animal (cat) tag - ID 985121004515220| |lf_HomeAgain1600.pm3|HomeAgain animal (cat) tag - ID 985121004515220| |lf_IDTECK_4944544BAC40E069.pm3| IDTECK raw 4944544BAC40E069 , PSK, printed "806 082 43084"| -|lf_IDTECK_idk50_PSK| IDTECK (?)| +|lf_IDTECK_idk50_PSK.pm3| IDTECK (?)| |lf_Indala-00002-12345678-1A.pm3|Indala credit-card style card| |lf_Indala-504278295.pm3|PSK 26 bit indala| |lf_IOProx-XSF-01-3B-44725.pm3|IO Prox FSK RF/64 ID in name| From c79e50b8f7a4c252b24ae8e43694d057f2337676 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Tue, 29 Sep 2020 17:50:01 +0200 Subject: [PATCH 0697/1047] remove useless lf_Q5_mod-data.bin --- traces/README.md | 1 - traces/lf_Q5_mod-data.bin | Bin 12 -> 0 bytes 2 files changed, 1 deletion(-) delete mode 100644 traces/lf_Q5_mod-data.bin diff --git a/traces/README.md b/traces/README.md index 34b3d577c..15e5a5a23 100644 --- a/traces/README.md +++ b/traces/README.md @@ -49,7 +49,6 @@ |filename|description| |--------|-----------| |lf_Q5_mod-*|Q5 configured to emit `00 01 02 03 04 05 06 07 08 09 0A 0B` under various modulation schemes| -|lf_Q5_mod-data.bin|Raw data used for lf_Q5_mod-* Q5 configuration| |lf_ATA5577_*|ATA5577 configured to emulate various techs as suggested in the Proxmark3 clone commands| |lf_ATA5577.txt|Description on how lf_ATA5577_* were generated| diff --git a/traces/lf_Q5_mod-data.bin b/traces/lf_Q5_mod-data.bin deleted file mode 100644 index 91145304dad4cd0dc1f26bb3d44644ca10383a75..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12 TcmZQzWMXDvWn<^y Date: Tue, 29 Sep 2020 18:09:29 +0200 Subject: [PATCH 0698/1047] text --- traces/README.md | 102 +++++++++++++-------------- traces/{lf_TI_test.pm3 => lf_TI.pm3} | 0 2 files changed, 51 insertions(+), 51 deletions(-) rename traces/{lf_TI_test.pm3 => lf_TI.pm3} (100%) diff --git a/traces/README.md b/traces/README.md index 15e5a5a23..34b29003c 100644 --- a/traces/README.md +++ b/traces/README.md @@ -7,70 +7,70 @@ ## LF traces -|filename|description| -|--------|-----------| -|lf_AWID-15-259.pm3|AWID FSK RF/50 FC: 15 Card: 259 | -|lf_Casi-12ed825c29.pm3|casi rusco 40 bit (EM410x ID: 12ed825c29)| -|lf_EM4102-1.pm3|credit card style card EM4102 tag (ID: 010872e77c)| -|lf_EM4102-2.pm3|credit card style card EM4102 tag (ID: 010872beec)| -|lf_EM4102-3.pm3|credit card style card EM4102 tag (ID: 010872e14f)| -|lf_EM4102-clamshell.pm3|Samy's clamshell EM4102 tag (ID: 1f00d9b3a5)| -|lf_EM4102-fob.pm3|(ID: 0400193cbe)| -|lf_EM4102-thin.pm3|Samy's thin credit-card style EM4102 tag (ID: 1a0041375d)| -|lf_EM4x05.pm3|ear tag FDX-B ISO-11784/5 (ID: 6DB0840800F80001 - Application Identifier: 8000, Country Code: 124 (Canada), National ID: 270601654)| -|lf_EM4x50.pm3|credit card style card EM4x50 tag (ID: DE2A3F00)| -|lf_FDX_Bio-Thermo.pm3|FDX Animal tag with Biosensor| -|lf_GALLAGHER.pm3|GALLAGHER tag| -|lf_GProx_36_30_14489.pm3|G-Prox-II FC: 30 Card: 3949, Format 36b ASK/BIPHASE| -|lf_HID-proxCardII-05512-11432784-1.pm3|clamshell-style HID ProxCard II card| -|lf_HID-weak-fob-11647.pm3|HID 32bit Prox Card#: 11647. very weak tag/read but just readable.| -|lf_HomeAgain.pm3|HomeAgain animal (cat) tag - ID 985121004515220| -|lf_HomeAgain1600.pm3|HomeAgain animal (cat) tag - ID 985121004515220| -|lf_IDTECK_4944544BAC40E069.pm3| IDTECK raw 4944544BAC40E069 , PSK, printed "806 082 43084"| -|lf_IDTECK_idk50_PSK.pm3| IDTECK (?)| -|lf_Indala-00002-12345678-1A.pm3|Indala credit-card style card| -|lf_Indala-504278295.pm3|PSK 26 bit indala| -|lf_IOProx-XSF-01-3B-44725.pm3|IO Prox FSK RF/64 ID in name| -|lf_IOProx-XSF-01-BE-03011.pm3|IO Prox FSK RF/64 ID in name| -|lf_Keri.pm3|Keri PSK-3 Key Ring tag (back of tag: 1460 3411)| -|lf_Motorola_0437_00072.pm3|Motorola Grey clamshell card, old. (RAW: A0000000E308C0C1)| -|lf_NEXWATCH_Nexkey_74755342.pm3| NEXWATCH, Nexkey ID: 74755342| -|lf_NEXWATCH_Quadrakey-521512301.pm3|NEXWATCH, Quadrakey ID: 521512301| -|lf_NEXWATCH_Securakey-64169.pm3|Securakey Tag BitLen: 26, Card ID: 64169, FC: 0x35| -|lf_PAC-8E4C058E.pm3|PAC/Stanley 20204/21020 PAC8 tag (ID: 8E4C058E)| -|lf_Paradox-96_40426-APJN08.pm3|PARADOX FC 96 CN 40426| -|lf_TI_test.pm3|TI HDX? test - can't decode it any longer| -|lf_Transit999-best.pm3|Transit 999 format (UID 99531670)| -|lf_VeriChip_1022000000084146.pm3|VeriChip, epoxy encased glasschip (ID: 1022-00000000084146) | -|lf_VISA2000.pm3|VISA2000 ASK/MAN RF/64, Card: 480518| +|filename |description| +|-----------------------------------------|-----------| +|lf_AWID-15-259.pm3 |AWID FSK RF/50 FC: 15 Card: 259 | +|lf_Casi-12ed825c29.pm3 |casi rusco 40 bit (EM410x ID: 12ed825c29)| +|lf_EM4102-1.pm3 |credit card style card EM4102 tag (ID: 010872e77c)| +|lf_EM4102-2.pm3 |credit card style card EM4102 tag (ID: 010872beec)| +|lf_EM4102-3.pm3 |credit card style card EM4102 tag (ID: 010872e14f)| +|lf_EM4102-clamshell.pm3 |Samy's clamshell EM4102 tag (ID: 1f00d9b3a5)| +|lf_EM4102-fob.pm3 |(ID: 0400193cbe)| +|lf_EM4102-thin.pm3 |Samy's thin credit-card style EM4102 tag (ID: 1a0041375d)| +|lf_EM4x05.pm3 |ear tag FDX-B ISO-11784/5 (ID: 6DB0840800F80001 - Application Identifier: 8000, Country Code: 124 (Canada), National ID: 270601654)| +|lf_EM4x50.pm3 |credit card style card EM4x50 tag (ID: DE2A3F00)| +|lf_FDX_Bio-Thermo.pm3 |FDX Animal tag with Biosensor| +|lf_GALLAGHER.pm3 |GALLAGHER tag| +|lf_GProx_36_30_14489.pm3 |G-Prox-II FC: 30 Card: 3949, Format 36b ASK/BIPHASE| +|lf_HID-proxCardII-05512-11432784-1.pm3 |clamshell-style HID ProxCard II card| +|lf_HID-weak-fob-11647.pm3 |HID 32bit Prox Card#: 11647. very weak tag/read but just readable.| +|lf_HomeAgain.pm3 |HomeAgain animal (cat) tag - ID 985121004515220| +|lf_HomeAgain1600.pm3 |HomeAgain animal (cat) tag - ID 985121004515220| +|lf_IDTECK_4944544BAC40E069.pm3 |IDTECK raw 4944544BAC40E069 , PSK, printed "806 082 43084"| +|lf_IDTECK_idk50_PSK.pm3 |IDTECK (?)| +|lf_Indala-00002-12345678-1A.pm3 |Indala credit-card style card| +|lf_Indala-504278295.pm3 |PSK 26 bit indala| +|lf_IOProx-XSF-01-3B-44725.pm3 |IO Prox FSK RF/64 ID in name| +|lf_IOProx-XSF-01-BE-03011.pm3 |IO Prox FSK RF/64 ID in name| +|lf_Keri.pm3 |Keri PSK-3 Key Ring tag (back of tag: 1460 3411)| +|lf_Motorola_0437_00072.pm3 |Motorola Grey clamshell card, old. (RAW: A0000000E308C0C1)| +|lf_NEXWATCH_Nexkey_74755342.pm3 |NEXWATCH, Nexkey ID: 74755342| +|lf_NEXWATCH_Quadrakey-521512301.pm3 |NEXWATCH, Quadrakey ID: 521512301| +|lf_NEXWATCH_Securakey-64169.pm3 |Securakey Tag BitLen: 26, Card ID: 64169, FC: 0x35| +|lf_PAC-8E4C058E.pm3 |PAC/Stanley 20204/21020 PAC8 tag (ID: 8E4C058E)| +|lf_Paradox-96_40426-APJN08.pm3 |PARADOX FC 96 CN 40426| +|lf_TI.pm3 |TI HDX? -1/1 acquisition| +|lf_Transit999-best.pm3 |Transit 999 format (UID 99531670)| +|lf_VeriChip_1022000000084146.pm3 |VeriChip, epoxy encased glasschip (ID: 1022-00000000084146) | +|lf_VISA2000.pm3 |VISA2000 ASK/MAN RF/64, Card: 480518| ## LF test traces |filename|description| |--------|-----------| -|lf_Q5_mod-*|Q5 configured to emit `00 01 02 03 04 05 06 07 08 09 0A 0B` under various modulation schemes| -|lf_ATA5577_*|ATA5577 configured to emulate various techs as suggested in the Proxmark3 clone commands| -|lf_ATA5577.txt|Description on how lf_ATA5577_* were generated| +|lf_Q5_mod-* |Q5 configured to emit `00 01 02 03 04 05 06 07 08 09 0A 0B` under various modulation schemes| +|lf_ATA5577_* |ATA5577 configured to emulate various techs as suggested in the Proxmark3 clone commands| +|lf_ATA5577.txt |Description on how lf_ATA5577_* were generated| ## LF sniffed traces |filename|description| |--------|-----------| -|lf_sniff_ht2-BC3B8810-acg-reader.pm3| sniffing of Hitag2 being read by an HID ACG LF Multitag reader| -|lf_sniff_ht2-BC3B8810-frosch-reader.pm3| sniffing of Hitag2 being read by a Frosch Hitag reader| -|lf_sniff_ht2-BC3B8810-rfidler-reader.pm3:| sniffing of Hitag2 being read by a RFIDler| +|lf_sniff_ht2-BC3B8810-acg-reader.pm3 |Sniffing of Hitag2 being read by an HID ACG LF Multitag reader| +|lf_sniff_ht2-BC3B8810-frosch-reader.pm3 |Sniffing of Hitag2 being read by a Frosch Hitag reader| +|lf_sniff_ht2-BC3B8810-rfidler-reader.pm3 |Sniffing of Hitag2 being read by a RFIDler| ## HF traces |filename|description| |--------|-----------| -|hf_14b_raw_050008_resp.pm3| Response to `hf 14b raw -c 050008`| +|hf_14b_raw_050008_resp.pm3 |Response to `hf 14b raw -c 050008`| ## HF sniffed traces |filename|description| |--------|-----------| -|hf_sniff_14b_scl3711.pm3| `hf sniff 15000 2` <> `nfc-list -t 8`: PUPI: c12c8b1b AppData: 00000000 ProtInfo: 917171| +|hf_sniff_14b_scl3711.pm3 |`hf sniff 15000 2` <> `nfc-list -t 8`: PUPI: c12c8b1b AppData: 00000000 ProtInfo: 917171| # Demodulated acquisitions @@ -78,10 +78,10 @@ |filename|description| |--------|-----------| -|hf_14a_reader_4b.trace|Execution of `hf 14a reader` against a 4b UID card| -|hf_14a_reader_4b_rats.trace|Execution of `hf 14a reader` against a 4b UID card with RATS| -|hf_14a_reader_7b_rats.trace|Execution of `hf 14a reader` against a 7b UID card with RATS| -|hf_14a_mfu.trace|Reading of a password-protected MFU| -|hf_14a_mfu-sim.trace|Trace seen from a Proxmark3 simulating a MFU| -|hf_14b_reader.trace|Execution of `hf 14b reader` against a card| -|hf_15_reader.trace|Execution of `hf 15 reader` against a card| +|hf_14a_reader_4b.trace |Execution of `hf 14a reader` against a 4b UID card| +|hf_14a_reader_4b_rats.trace |Execution of `hf 14a reader` against a 4b UID card with RATS| +|hf_14a_reader_7b_rats.trace |Execution of `hf 14a reader` against a 7b UID card with RATS| +|hf_14a_mfu.trace |Reading of a password-protected MFU| +|hf_14a_mfu-sim.trace |Trace seen from a Proxmark3 simulating a MFU| +|hf_14b_reader.trace |Execution of `hf 14b reader` against a card| +|hf_15_reader.trace |Execution of `hf 15 reader` against a card| diff --git a/traces/lf_TI_test.pm3 b/traces/lf_TI.pm3 similarity index 100% rename from traces/lf_TI_test.pm3 rename to traces/lf_TI.pm3 From d1bb16f862807e59273b5faa9a4c14bd91f1ddc1 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Tue, 29 Sep 2020 18:19:23 +0200 Subject: [PATCH 0699/1047] text --- traces/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/traces/README.md b/traces/README.md index 34b29003c..78675df95 100644 --- a/traces/README.md +++ b/traces/README.md @@ -39,7 +39,7 @@ |lf_NEXWATCH_Securakey-64169.pm3 |Securakey Tag BitLen: 26, Card ID: 64169, FC: 0x35| |lf_PAC-8E4C058E.pm3 |PAC/Stanley 20204/21020 PAC8 tag (ID: 8E4C058E)| |lf_Paradox-96_40426-APJN08.pm3 |PARADOX FC 96 CN 40426| -|lf_TI.pm3 |TI HDX? -1/1 acquisition| +|lf_TI.pm3 |TI HDX FSK 134.2 / 123.2kHz, zerocross line acquisition at 2 MHz| |lf_Transit999-best.pm3 |Transit 999 format (UID 99531670)| |lf_VeriChip_1022000000084146.pm3 |VeriChip, epoxy encased glasschip (ID: 1022-00000000084146) | |lf_VISA2000.pm3 |VISA2000 ASK/MAN RF/64, Card: 480518| From 38358e2e2a498bf37d118e32c882907b654f12a9 Mon Sep 17 00:00:00 2001 From: mwalker33 Date: Wed, 30 Sep 2020 07:28:05 +1000 Subject: [PATCH 0700/1047] Update cliparser.c Change white to default user color --- client/deps/cliparser/cliparser.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/deps/cliparser/cliparser.c b/client/deps/cliparser/cliparser.c index 10055a420..16a276d72 100644 --- a/client/deps/cliparser/cliparser.c +++ b/client/deps/cliparser/cliparser.c @@ -24,8 +24,8 @@ #define _ExampleColor_(s) _YELLOW_(s) #define _CommandColor_(s) _RED_(s) #define _DescriptionColor_(s) _CYAN_(s) -#define _ArgColor_(s) _WHITE_(s) -#define _ArgHelpColor_(s) _WHITE_(s) +#define _ArgColor_(s) s +#define _ArgHelpColor_(s) s // End Custom Colors // Option width set to 30 to allow option descriptions to align. approx line 74 // Example width set to 50 to allow help descriptions to align. approx line 93 From 561c5f779e17342f5e70e919514663587f13bf1c Mon Sep 17 00:00:00 2001 From: mwalker33 Date: Wed, 30 Sep 2020 07:55:51 +1000 Subject: [PATCH 0701/1047] cliparser cleaning checked cmdhf.c and cmddata.c and tweaked cliparser.c --- client/deps/cliparser/cliparser.c | 2 +- client/deps/cliparser/cliparser.h | 2 +- client/src/cmddata.c | 9 ++++----- 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/client/deps/cliparser/cliparser.c b/client/deps/cliparser/cliparser.c index 16a276d72..095d93c96 100644 --- a/client/deps/cliparser/cliparser.c +++ b/client/deps/cliparser/cliparser.c @@ -77,7 +77,7 @@ int CLIParserParseArg(CLIParserContext *ctx, int argc, char **argv, void *vargta PrintAndLogEx(NORMAL,""); if (ctx->programHelp) { - PrintAndLogEx(NORMAL,_SectionTagColor_("examples:")); + PrintAndLogEx(NORMAL,_SectionTagColor_("examples/notes:")); char *buf = NULL; int idx = 0; buf = realloc (buf,strlen (ctx->programHelp)+1); // more then enough as we are splitting diff --git a/client/deps/cliparser/cliparser.h b/client/deps/cliparser/cliparser.h index 86ed21977..51c2ed8d5 100644 --- a/client/deps/cliparser/cliparser.h +++ b/client/deps/cliparser/cliparser.h @@ -14,7 +14,7 @@ #include #include "util.h" -#define arg_param_begin arg_lit0("hH", "help", "This help") +#define arg_param_begin arg_lit0("h", "help", "This help") #define arg_param_end arg_end(20) #define arg_getsize(a) (sizeof(a) / sizeof(a[0])) diff --git a/client/src/cmddata.c b/client/src/cmddata.c index de0e4a78a..34574a72f 100644 --- a/client/src/cmddata.c +++ b/client/src/cmddata.c @@ -2264,15 +2264,14 @@ static int CmdDataNDEF(const char *Cmd) { CLIParserContext *ctx; CLIParserInit(&ctx, "data ndef", "Decode and print NFC Data Exchange Format (NDEF)", - "Samples:\n" - _YELLOW_("\tdata ndef -d 9101085402656e48656c6c6f5101085402656e576f726c64\n") - _YELLOW_("\tdata ndef -d 0103d020240203e02c040300fe\n") + "data ndef -d 9101085402656e48656c6c6f5101085402656e576f726c64\n" + "data ndef -d 0103d020240203e02c040300fe\n" ); void *argtable[] = { arg_param_begin, - arg_strx0("dD", "data", "", "NDEF data to decode"), - arg_lit0("vV", "verbose", "verbose mode"), + arg_strx0("d", "data", "", "NDEF data to decode"), + arg_lit0("v", "verbose", "verbose mode"), arg_param_end }; CLIExecWithReturn(ctx, Cmd, argtable, false); From e7242049782f4a5d03868b9d40c4418c1ce165c1 Mon Sep 17 00:00:00 2001 From: mwalker33 Date: Wed, 30 Sep 2020 16:39:08 +1000 Subject: [PATCH 0702/1047] cliparser cleanup 2 cmdhf14a.c, cmdhfido.c, cmdhficlass.c, cmdhfmf.c menu help updates. cliparser.c : tweak for readability with long examples. --- client/deps/cliparser/cliparser.c | 13 +++++-- client/src/cmdhf14a.c | 38 +++++++++--------- client/src/cmdhffido.c | 62 ++++++++++++++--------------- client/src/cmdhficlass.c | 5 +-- client/src/cmdhfmf.c | 65 ++++++++++++++----------------- 5 files changed, 91 insertions(+), 92 deletions(-) diff --git a/client/deps/cliparser/cliparser.c b/client/deps/cliparser/cliparser.c index 095d93c96..077e5038f 100644 --- a/client/deps/cliparser/cliparser.c +++ b/client/deps/cliparser/cliparser.c @@ -83,16 +83,23 @@ int CLIParserParseArg(CLIParserContext *ctx, int argc, char **argv, void *vargta buf = realloc (buf,strlen (ctx->programHelp)+1); // more then enough as we are splitting char *p2; // pointer to split example from comment. - for (int i = 0; i < strlen (ctx->programHelp); i++) { + int egWidth = 30; + for (int i = 0; i <= strlen (ctx->programHelp); i++) { // <= so to get string terminator. buf[idx++] = ctx->programHelp[i]; if ((ctx->programHelp[i] == '\n') || (ctx->programHelp[i] == 0x00)) { buf[idx-1] = 0x00; p2 = strstr(buf,"->"); // See if the example has a comment. if (p2 != NULL) { *(p2-1) = 0x00; - PrintAndLogEx(NORMAL," "_ExampleColor_("%-50s")" %s",buf,p2); + + if (strlen(buf) > 28) + egWidth = strlen(buf) + 5; + else + egWidth = 30; + + PrintAndLogEx(NORMAL," "_ExampleColor_("%-*s")" %s", egWidth, buf, p2); } else { - PrintAndLogEx(NORMAL," "_ExampleColor_("%-50s"),buf); + PrintAndLogEx(NORMAL," "_ExampleColor_("%-*s"), egWidth, buf); } idx = 0; } diff --git a/client/src/cmdhf14a.c b/client/src/cmdhf14a.c index aa8a29255..2e222eec1 100644 --- a/client/src/cmdhf14a.c +++ b/client/src/cmdhf14a.c @@ -563,13 +563,13 @@ static int CmdHF14AInfo(const char *Cmd) { CLIParserContext *ctx; CLIParserInit(&ctx, "hf 14a info", "This command makes more extensive tests against a ISO14443a tag in order to collect information", - "Sample:\n\thf 14a info -nsv - shows full information about the card\n"); + "hf 14a info -nsv -> shows full information about the card\n"); void *argtable[] = { arg_param_begin, - arg_lit0("vV", "verbose", "adds some information to results"), - arg_lit0("nN", "nacktest", "test for nack bug"), - arg_lit0("sS", "aidsearch", "checks if AIDs from aidlist.json is present on the card and prints information about found AIDs"), + arg_lit0("v", "verbose", "adds some information to results"), + arg_lit0("n", "nacktest", "test for nack bug"), + arg_lit0("s", "aidsearch", "checks if AIDs from aidlist.json is present on the card and prints information about found AIDs"), arg_param_end }; CLIExecWithReturn(ctx, Cmd, argtable, true); @@ -1080,20 +1080,20 @@ static int CmdHF14AAPDU(const char *Cmd) { CLIParserContext *ctx; CLIParserInit(&ctx, "hf 14a apdu", "Sends an ISO 7816-4 APDU via ISO 14443-4 block transmission protocol (T=CL). works with all apdu types from ISO 7816-4:2013", - "Sample:\n\thf 14a apdu -st 00A404000E325041592E5359532E444446303100\n" - "\thf 14a apdu -sd 00A404000E325041592E5359532E444446303100 - decode apdu\n" - "\thf 14a apdu -sm 00A40400 325041592E5359532E4444463031 -l 256 - encode standard apdu\n" - "\thf 14a apdu -sm 00A40400 325041592E5359532E4444463031 -el 65536 - encode extended apdu\n"); + "hf 14a apdu -st 00A404000E325041592E5359532E444446303100\n" + "hf 14a apdu -sd 00A404000E325041592E5359532E444446303100 -> decode apdu\n" + "hf 14a apdu -sm 00A40400 325041592E5359532E4444463031 -l 256 -> encode standard apdu\n" + "hf 14a apdu -sm 00A40400 325041592E5359532E4444463031 -el 65536 -> encode extended apdu\n"); void *argtable[] = { arg_param_begin, - arg_lit0("sS", "select", "activate field and select card"), - arg_lit0("kK", "keep", "leave the signal field ON after receive response"), - arg_lit0("tT", "tlv", "executes TLV decoder if it possible"), - arg_lit0("dD", "decapdu", "decode apdu request if it possible"), - arg_str0("mM", "make", "", "make apdu with head from this field and data from data field. Must be 4 bytes length: "), - arg_lit0("eE", "extended", "make extended length apdu if `m` parameter included"), - arg_int0("lL", "le", "", "Le apdu parameter if `m` parameter included"), + arg_lit0("s", "select", "activate field and select card"), + arg_lit0("k", "keep", "leave the signal field ON after receive response"), + arg_lit0("t", "tlv", "executes TLV decoder if it possible"), + arg_lit0("d", "decapdu", "decode apdu request if it possible"), + arg_str0("m", "make", "", "make apdu with head from this field and data from data field. Must be 4 bytes length: "), + arg_lit0("e", "extended", "make extended length apdu if `m` parameter included"), + arg_int0("l", "le", "", "Le apdu parameter if `m` parameter included"), arg_strx1(NULL, NULL, "", "data if `m` parameter included"), arg_param_end }; @@ -1369,8 +1369,7 @@ static int CmdHF14AAntiFuzz(const char *Cmd) { CLIParserContext *ctx; CLIParserInit(&ctx, "hf 14a antifuzz", "Tries to fuzz the ISO14443a anticollision phase", - "Usage:\n" - "\thf 14a antifuzz -4\n"); + "hf 14a antifuzz -4\n"); void *argtable[] = { arg_param_begin, @@ -1398,9 +1397,8 @@ static int CmdHF14AChaining(const char *Cmd) { CLIParserContext *ctx; CLIParserInit(&ctx, "hf 14a chaining", "Enable/Disable ISO14443a input chaining. Maximum input length goes from ATS.", - "Usage:\n" - "\thf 14a chaining disable -> disable chaining\n" - "\thf 14a chaining -> show chaining enable/disable state\n"); + "hf 14a chaining disable -> disable chaining\n" + "hf 14a chaining -> show chaining enable/disable state\n"); void *argtable[] = { arg_param_begin, diff --git a/client/src/cmdhffido.c b/client/src/cmdhffido.c index 50c1495c8..ee2da7bfa 100644 --- a/client/src/cmdhffido.c +++ b/client/src/cmdhffido.c @@ -160,17 +160,17 @@ static int CmdHFFidoRegister(const char *cmd) { CLIParserContext *ctx; CLIParserInit(&ctx, "hf fido reg", "Initiate a U2F token registration. Needs two 32-byte hash numbers. \nchallenge parameter (32b) and application parameter (32b).", - "Usage:\n\thf fido reg -> execute command with 2 parameters, filled 0x00\n" - "\thf fido reg 000102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f 000102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f -> execute command with parameters" - "\thf fido reg -p s0 s1 -> execute command with plain parameters"); + "hf fido reg -> execute command with 2 parameters, filled 0x00\n" + "hf fido reg 000102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f 000102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f -> execute command with parameters\n" + "hf fido reg -p s0 s1 -> execute command with plain parameters"); void *argtable[] = { arg_param_begin, - arg_lit0("aA", "apdu", "show APDU requests and responses"), - arg_litn("vV", "verbose", 0, 2, "show technical data. vv - show full certificates data"), - arg_lit0("pP", "plain", "send plain ASCII to challenge and application parameters instead of HEX"), - arg_lit0("tT", "tlv", "Show DER certificate contents in TLV representation"), - arg_str0("jJ", "json", "fido.json", "JSON input / output file name for parameters."), + arg_lit0("a", "apdu", "show APDU requests and responses"), + arg_litn("v", "verbose", 0, 2, "show technical data. vv - show full certificates data"), + arg_lit0("p", "plain", "send plain ASCII to challenge and application parameters instead of HEX"), + arg_lit0("t", "tlv", "Show DER certificate contents in TLV representation"), + arg_str0("j", "json", "fido.json", "JSON input / output file name for parameters."), arg_str0(NULL, NULL, "", NULL), arg_str0(NULL, NULL, "", NULL), arg_param_end @@ -397,20 +397,20 @@ static int CmdHFFidoAuthenticate(const char *cmd) { CLIParserContext *ctx; CLIParserInit(&ctx, "hf fido auth", "Initiate a U2F token authentication. Needs key handle and two 32-byte hash numbers. \nkey handle(var 0..255), challenge parameter (32b) and application parameter (32b).", - "Usage:\n\thf fido auth 000102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f -> execute command with 2 parameters, filled 0x00 and key handle\n" - "\thf fido auth 000102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f " + "hf fido auth 000102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f -> execute command with 2 parameters, filled 0x00 and key handle\n" + "hf fido auth 000102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f " "000102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f 000102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f -> execute command with parameters"); void *argtable[] = { arg_param_begin, - arg_lit0("aA", "apdu", "show APDU reqests and responses"), - arg_lit0("vV", "verbose", "show technical data"), - arg_lit0("pP", "plain", "send plain ASCII to challenge and application parameters instead of HEX"), + arg_lit0("a", "apdu", "show APDU reqests and responses"), + arg_lit0("v", "verbose", "show technical data"), + arg_lit0("p", "plain", "send plain ASCII to challenge and application parameters instead of HEX"), arg_rem("default mode:", "dont-enforce-user-presence-and-sign"), - arg_lit0("uU", "user", "mode: enforce-user-presence-and-sign"), - arg_lit0("cC", "check", "mode: check-only"), - arg_str0("jJ", "json", "fido.json", "JSON input / output file name for parameters."), - arg_str0("kK", "key", "public key to verify signature", NULL), + arg_lit0("u", "user", "mode: enforce-user-presence-and-sign"), + arg_lit0("c", "check", "mode: check-only"), + arg_str0("j", "json", "fido.json", "JSON input / output file name for parameters."), + arg_str0("k", "key", "public key to verify signature", NULL), arg_str0(NULL, NULL, "", NULL), arg_str0(NULL, NULL, "", NULL), arg_str0(NULL, NULL, "", NULL), @@ -658,16 +658,16 @@ static int CmdHFFido2MakeCredential(const char *cmd) { CLIParserContext *ctx; CLIParserInit(&ctx, "hf fido make", - "Execute a FIDO2 Make Credential command. Needs json file with parameters. Sample file " _YELLOW_("`fido2.json`") " in `resources/`.", - "Usage:\n\thf fido make -> execute command with default parameters file `fido2.json`\n" - "\thf fido make test.json -> execute command with parameters file `text.json`"); + "Execute a FIDO2 Make Credential command. Needs json file with parameters. Sample file `fido2.json` in `resources/`.", + "hf fido make -> execute command with default parameters file `fido2.json`\n" + "hf fido make test.json -> execute command with parameters file `text.json`"); void *argtable[] = { arg_param_begin, - arg_lit0("aA", "apdu", "show APDU reqests and responses"), - arg_litn("vV", "verbose", 0, 2, "show technical data. vv - show full certificates data"), - arg_lit0("tT", "tlv", "Show DER certificate contents in TLV representation"), - arg_lit0("cC", "cbor", "show CBOR decoded data"), + arg_lit0("a", "apdu", "show APDU reqests and responses"), + arg_litn("v", "verbose", 0, 2, "show technical data. vv - show full certificates data"), + arg_lit0("t", "tlv", "Show DER certificate contents in TLV representation"), + arg_lit0("c", "cbor", "show CBOR decoded data"), arg_str0(NULL, NULL, "", "JSON input / output file name for parameters. Default `fido2.json`"), arg_param_end }; @@ -783,16 +783,16 @@ static int CmdHFFido2GetAssertion(const char *cmd) { CLIParserContext *ctx; CLIParserInit(&ctx, "hf fido assert", - "Execute a FIDO2 Get Assertion command. Needs json file with parameters. Sample file " _YELLOW_("`fido2.json`") " in `resources/`.", - "Usage:\n\thf fido assert -> execute command with default parameters file `fido2.json`\n" - "\thf fido assert test.json -l -> execute command with parameters file `text.json` and add to request CredentialId"); + "Execute a FIDO2 Get Assertion command. Needs json file with parameters. Sample file `fido2.json` in `resources/`.", + "hf fido assert -> execute command with default parameters file `fido2.json`\n" + "hf fido assert test.json -l -> execute command with parameters file `text.json` and add to request CredentialId"); void *argtable[] = { arg_param_begin, - arg_lit0("aA", "apdu", "show APDU reqests and responses"), - arg_litn("vV", "verbose", 0, 2, "show technical data. vv - show full certificates data"), - arg_lit0("cC", "cbor", "show CBOR decoded data"), - arg_lit0("lL", "list", "add CredentialId from json to allowList. Needs if `rk` option is `false` (authenticator doesn't store credential to its memory)"), + arg_lit0("a", "apdu", "show APDU reqests and responses"), + arg_litn("v", "verbose", 0, 2, "show technical data. vv - show full certificates data"), + arg_lit0("c", "cbor", "show CBOR decoded data"), + arg_lit0("l", "list", "add CredentialId from json to allowList. Needs if `rk` option is `false` (authenticator doesn't store credential to its memory)"), arg_str0(NULL, NULL, "", "JSON input / output file name for parameters. Default `fido2.json`"), arg_param_end }; diff --git a/client/src/cmdhficlass.c b/client/src/cmdhficlass.c index 28b74f422..8dfe7720a 100644 --- a/client/src/cmdhficlass.c +++ b/client/src/cmdhficlass.c @@ -641,9 +641,8 @@ static int CmdHFiClassSniff(const char *Cmd) { CLIParserContext *ctx; CLIParserInit(&ctx, "hf iclass sniff", "Sniff the communication reader and tag", - "Usage:\n" - _YELLOW_("\thf iclass sniff") "\n" - _YELLOW_("\thf iclass sniff -j") " -> jam e-purse updates\n" + "hf iclass sniff\n" + "hf iclass sniff -j -> jam e-purse updates\n" ); void *argtable[] = { diff --git a/client/src/cmdhfmf.c b/client/src/cmdhfmf.c index df9d07c54..4b822c148 100644 --- a/client/src/cmdhfmf.c +++ b/client/src/cmdhfmf.c @@ -4120,15 +4120,14 @@ static int CmdHF14AMfCWipe(const char *cmd) { CLIParserContext *ctx; CLIParserInit(&ctx, "hf mf cwipe", "Wipe gen1 magic chinese card. Set UID/ATQA/SAK/Data/Keys/Access to default values.", - "Usage:\n" - _YELLOW_("\thf mf cwipe") " -> wipe card\n" - _YELLOW_("\thf mf cwipe -u 09080706 -a 0004 -s 18") " -- set UID, ATQA and SAK and wipe card"); + "hf mf cwipe -> wipe card\n" + "hf mf cwipe -u 09080706 -a 0004 -s 18 -> set UID, ATQA and SAK and wipe card"); void *argtable[] = { arg_param_begin, - arg_str0("uU", "uid", "", "UID for card"), - arg_str0("aA", "atqa", "", "ATQA for card"), - arg_str0("sS", "sak", "", "SAK for card"), + arg_str0("u", "uid", "", "UID for card"), + arg_str0("a", "atqa", "", "ATQA for card"), + arg_str0("s", "sak", "", "SAK for card"), arg_param_end }; CLIExecWithReturn(ctx, cmd, argtable, true); @@ -4799,9 +4798,8 @@ static int CmdHF14AMfAuth4(const char *Cmd) { CLIParserContext *ctx; CLIParserInit(&ctx, "hf mf auth4", "Executes AES authentication command in ISO14443-4", - "Usage:\n" - _YELLOW_("\thf mf auth4 4000 000102030405060708090a0b0c0d0e0f") " -> executes authentication\n" - _YELLOW_("\thf mf auth4 9003 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF") " -> executes authentication\n"); + "hf mf auth4 4000 000102030405060708090a0b0c0d0e0f -> executes authentication\n" + "hf mf auth4 9003 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -> executes authentication\n"); void *argtable[] = { arg_param_begin, @@ -4834,19 +4832,18 @@ static int CmdHF14AMfMAD(const char *Cmd) { CLIParserContext *ctx; CLIParserInit(&ctx, "hf mf mad", "Checks and prints MIFARE Application Directory (MAD)", - "Usage:\n" - _YELLOW_("\thf mf mad") " -> shows MAD if exists\n" - _YELLOW_("\thf mf mad --aid e103 -k ffffffffffff -b") " -> shows NDEF data if exists. read card with custom key and key B\n" - _YELLOW_("\thf mf mad --dch -k ffffffffffff") " -> decode CardHolder information\n"); + "hf mf mad -> shows MAD if exists\n" + "hf mf mad --aid e103 -k ffffffffffff -b -> shows NDEF data if exists. read card with custom key and key B\n" + "hf mf mad --dch -k ffffffffffff -> decode CardHolder information\n"); void *argtable[] = { arg_param_begin, - arg_lit0("vV", "verbose", "show technical data"), - arg_str0("", "aid", "", "print all sectors with specified aid"), - arg_str0("kK", "key", "", "key for printing sectors"), - arg_lit0("bB", "keyb", "use key B for access printing sectors (by default: key A)"), - arg_lit0("", "be", "(optional, BigEndian)"), - arg_lit0("", "dch", "decode Card Holder information"), + arg_lit0("v", "verbose", "show technical data"), + arg_str0(NULL, "aid", "", "print all sectors with specified aid"), + arg_str0("k", "key", "", "key for printing sectors"), + arg_lit0("b", "keyb", "use key B for access printing sectors (by default: key A)"), + arg_lit0(NULL, "be", "(optional, BigEndian)"), + arg_lit0(NULL, "dch", "decode Card Holder information"), arg_param_end }; CLIExecWithReturn(ctx, Cmd, argtable, true); @@ -4976,17 +4973,16 @@ static int CmdHFMFNDEF(const char *Cmd) { CLIParserContext *ctx; CLIParserInit(&ctx, "hf mf ndef", "Prints NFC Data Exchange Format (NDEF)", - "Usage:\n" - _YELLOW_("\thf mf ndef") " -> shows NDEF parsed data\n" - _YELLOW_("\thf mf ndef -vv") " -> shows NDEF parsed and raw data\n" - _YELLOW_("\thf mf ndef --aid e103 -k ffffffffffff -b") " -> shows NDEF data with custom AID, key and with key B\n"); + "hf mf ndef -> shows NDEF parsed data\n" + "hf mf ndef -vv -> shows NDEF parsed and raw data\n" + "hf mf ndef --aid e103 -k ffffffffffff -b -> shows NDEF data with custom AID, key and with key B\n"); void *argtable[] = { arg_param_begin, - arg_litn("vV", "verbose", 0, 2, "show technical data"), - arg_str0("", "aid", "", "replace default aid for NDEF"), - arg_str0("kK", "key", "", "replace default key for NDEF"), - arg_lit0("bB", "keyb", "use key B for access sectors (by default: key A)"), + arg_litn("v", "verbose", 0, 2, "show technical data"), + arg_str0(NULL, "aid", "", "replace default aid for NDEF"), + arg_str0("k", "key", "", "replace default key for NDEF"), + arg_lit0("b", "keyb", "use key B for access sectors (by default: key A)"), arg_param_end }; CLIExecWithReturn(ctx, Cmd, argtable, true); @@ -5092,17 +5088,16 @@ static int CmdHFMFPersonalize(const char *cmd) { CLIParserContext *ctx; CLIParserInit(&ctx, "hf mf personalize", "Personalize the UID of a MIFARE Classic EV1 card. This is only possible if it is a 7Byte UID card and if it is not already personalized.", - "Usage:\n" - _YELLOW_("\thf mf personalize UIDF0") " -> double size UID according to ISO/IEC14443-3\n" - _YELLOW_("\thf mf personalize UIDF1") " -> double size UID according to ISO/IEC14443-3, optional usage of selection process shortcut\n" - _YELLOW_("\thf mf personalize UIDF2") " -> single size random ID according to ISO/IEC14443-3\n" - _YELLOW_("\thf mf personalize UIDF3") " -> single size NUID according to ISO/IEC14443-3\n" - _YELLOW_("\thf mf personalize -t B -k B0B1B2B3B4B5 UIDF3") " -> use key B = 0xB0B1B2B3B4B5 instead of default key A\n"); + "hf mf personalize UIDF0 -> double size UID according to ISO/IEC14443-3\n" + "hf mf personalize UIDF1 -> double size UID according to ISO/IEC14443-3, optional usage of selection process shortcut\n" + "hf mf personalize UIDF2 -> single size random ID according to ISO/IEC14443-3\n" + "hf mf personalize UIDF3 -> single size NUID according to ISO/IEC14443-3\n" + "hf mf personalize -t B -k B0B1B2B3B4B5 UIDF3 -> use key B = 0xB0B1B2B3B4B5 instead of default key A"); void *argtable[] = { arg_param_begin, - arg_str0("tT", "keytype", "", "key type (A or B) to authenticate sector 0 (default: A)"), - arg_str0("kK", "key", "", "key to authenticate sector 0 (default: FFFFFFFFFFFF)"), + arg_str0("t", "keytype", "", "key type (A or B) to authenticate sector 0 (default: A)"), + arg_str0("k", "key", "", "key to authenticate sector 0 (default: FFFFFFFFFFFF)"), arg_str1(NULL, NULL, "", "Personalization Option"), arg_param_end }; From df71240a27741d252c8146ec8389feb4f4becc7a Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 30 Sep 2020 10:10:57 +0200 Subject: [PATCH 0703/1047] fix calypso lua script --- client/lualibs/commands.lua | 28 ++++++------ client/lualibs/read14b.lua | 24 +++++----- client/luascripts/hf_14b_calypso.lua | 66 +++++++++++++++++----------- 3 files changed, 68 insertions(+), 50 deletions(-) diff --git a/client/lualibs/commands.lua b/client/lualibs/commands.lua index 11227b8ac..440118fb6 100644 --- a/client/lualibs/commands.lua +++ b/client/lualibs/commands.lua @@ -93,8 +93,10 @@ Command = { o.data = data return o end, - parse = function (packet) - local count, cmd, arg1, arg2, arg3, data = bin.unpack('LLLLH511', packet) + parse = function(packet) + local count, cmd, arg1, arg2, arg3, data = bin.unpack('LLLL', packet) + local length = #packet - count + 1 + count, data = bin.unpack('H'..length, packet, count) return Command:new{cmd = cmd, arg1 = arg1, arg2 = arg2, arg3 = arg3, data = data} end } @@ -121,26 +123,28 @@ end -- @param command - the usb packet to send -- @param ignoreresponse - if set to true, we don't read the device answer packet -- which is usually recipe for fail. If not sent, the host will wait 2s for a --- response of type CMD_ACK +-- response of type CMD_ACK or like NG use the CMD as ack.. -- @return packet,nil if successful -- nil, errormessage if unsuccessful -function Command:sendMIX( ignore_response, timeout ) +function Command:sendMIX( ignore_response, timeout, use_cmd_ack) + if timeout == nil then timeout = TIMEOUT end local data = self.data local cmd = self.cmd - local arg1, arg2, arg3 = self.arg1, self.arg2, self.arg3 + local arg1, arg2, arg3 = self.arg1, self.arg2, self.arg3 local err, msg = core.SendCommandMIX(cmd, arg1, arg2, arg3, data) if err == nil then return err, msg end - if ignore_response then return true, nil end + + local ack = _commands.CMD_ACK + if use_cmd_ack then + ack = cmd + end - if timeout == nil then timeout = TIMEOUT end - - local response, msg = core.WaitForResponseTimeout(_commands.CMD_ACK, timeout) + local response, msg = core.WaitForResponseTimeout(ack, timeout) if response == nil then return nil, 'Error, waiting for response timed out :: '..msg end - -- lets digest data = nil cmd = nil @@ -157,15 +161,13 @@ function Command:sendMIX( ignore_response, timeout ) return packed, nil; end function Command:sendNG( ignore_response, timeout ) + if timeout == nil then timeout = TIMEOUT end local data = self.data local cmd = self.cmd local err, msg = core.SendCommandNG(cmd, data) if err == nil then return nil, msg end if ignore_response then return true, nil end - - if timeout == nil then timeout = TIMEOUT end - local response, msg = core.WaitForResponseTimeout(cmd, timeout) if response == nil then return nil, 'Error, waiting for response timed out :: '..msg diff --git a/client/lualibs/read14b.lua b/client/lualibs/read14b.lua index b1688552f..7547bd866 100644 --- a/client/lualibs/read14b.lua +++ b/client/lualibs/read14b.lua @@ -15,17 +15,18 @@ local cmds = require('commands') local utils = require('utils') -- Shouldn't take longer than 2.5 seconds -local TIMEOUT = 2500 +local TIMEOUT = 2000 local ISO14B_COMMAND = { - ISO14B_CONNECT = 1, - ISO14B_DISCONNECT = 2, - ISO14B_APDU = 4, - ISO14B_RAW = 8, + ISO14B_CONNECT = 0x1, + ISO14B_DISCONNECT = 0x2, + ISO14B_APDU = 0x4, + ISO14B_RAW = 0x8, ISO14B_REQUEST_TRIGGER = 0x10, ISO14B_APPEND_CRC = 0x20, ISO14B_SELECT_STD = 0x40, ISO14B_SELECT_SR = 0x80, + ISO14B_SET_TIMEOUT = 0x100, } local function parse14443b(data) @@ -74,9 +75,11 @@ local function read14443b(disconnect) arg1 = flags } - local result, err = command:sendMIX() + info = nil + + local result, err = command:sendMIX(false, TIMEOUT, true) if result then - local count,cmd,arg0,arg1,arg2 = bin.unpack('LLLL',result) + local count,cmd,arg0,arg1,arg2 = bin.unpack('LLLL', result) if arg0 == 0 then data = string.sub(result, count) info, err = parse14443b(data) @@ -88,12 +91,10 @@ local function read14443b(disconnect) end if err then - print(err) return nil, err end - return info + return info, nil end - --- -- Waits for a mifare card to be placed within the vicinity of the reader. -- @return if successful: an table containing card info @@ -102,12 +103,11 @@ local function waitFor14443b() print('Waiting for card... press Enter to quit') while not core.kbd_enter_pressed() do res, err = read14443b(false) - if res then return res end + if res then return res, err end -- err means that there was no response from card end return nil, 'Aborted by user' end - --- -- turns on the HF field. local function connect14443b() diff --git a/client/luascripts/hf_14b_calypso.lua b/client/luascripts/hf_14b_calypso.lua index 0439ac800..fcd58d478 100644 --- a/client/luascripts/hf_14b_calypso.lua +++ b/client/luascripts/hf_14b_calypso.lua @@ -7,7 +7,7 @@ local ansicolors = require('ansicolors') copyright = '' author = 'Iceman' -version = 'v1.0.2' +version = 'v1.0.3' desc = [[ This is a script to communicate with a CALYSPO / 14443b tag using the '14b raw' commands ]] @@ -30,12 +30,13 @@ device-side. ]] local function calypso_parse(result) - local r = Command.parse(result) - local len = r.arg2 * 2 - r.data = string.sub(r.data, 0, len); - print('GOT:', r.data) - if r.arg1 == 0 then - return r, nil + local r = Command.parse(result) + if r.arg1 >= 0 then + local len = r.arg2 * 2 + if len > 0 then + r.data = string.sub(r.data, 0, len); + return r, nil + end end return nil,nil end @@ -123,12 +124,19 @@ local function calypso_send_cmd_raw(data, ignoreresponse ) arg2 = #data/2, -- LEN of data, half the length of the ASCII-string hex string data = data} -- data bytes (commands etc) - result, err = command:sendMIX(ignoreresponse) + local use_cmd_ack = true + result, err = command:sendMIX(ignoreresponse, 2000, use_cmd_ack) if result then - local r = calypso_parse(result) - return r, nil + local count,cmd,arg0,arg1,arg2 = bin.unpack('LLLL', result) + if arg0 >= 0 then + return calypso_parse(result) + else + err = 'card response failed' + end + else + err = 'No response from card' end - return respone, err + return result, err end --- -- calypso_card_num : Reads card number from ATR and @@ -136,23 +144,22 @@ end local function calypso_card_num(card) if not card then return end local card_num = tonumber( card.uid:sub(1,8),16 ) - print('Card UID', card.uid) - print('Card Number', card_num) + print('') + print('Card UID ' ..ansicolors.green..card.uid:format('%x')..ansicolors.reset) + print('Card Number ' ..ansicolors.green..string.format('%u', card_num)..ansicolors.reset) + print('-----------------------') end --- -- analyse CALYPSO apdu status bytes. local function calypso_apdu_status(apdu) -- last two is CRC -- next two is APDU status bytes. - local status = false local mess = 'FAIL' local sw = apdu:sub( #apdu-7, #apdu-4) desc, err = iso7816.tostring(sw) - print ('SW', sw, desc, err ) - - status = ( sw == '9000' ) - - return status + --print ('SW', sw, desc, err ) + local status = ( sw == '9000' ) + return status, desc, err end local _calypso_cmds = { @@ -215,7 +222,7 @@ function main(args) if o == 'b' then bytes = a end end - lib14b.connect() +-- lib14b.connect() -- Select 14b tag. card, err = lib14b.waitFor14443b() @@ -241,14 +248,23 @@ function main(args) --for i = 1,10 do --result, err = calypso_send_cmd_raw('0294a40800043f000002',false) --select ICC file for i, apdu in spairs(_calypso_cmds) do - print('>>', i ) + print('>> '..ansicolors.yellow..i..ansicolors.reset) apdu = apdu:gsub('%s+', '') result, err = calypso_send_cmd_raw(apdu , false) - if result then - calypso_apdu_status(result.data) - print('<<', result.data ) + if err then + print('<< '..err) else - print('<< no answer') + if result then + local status, desc, err = calypso_apdu_status(result.data) + local d = result.data:sub(3, #result.data) + if status then + print('<< '..d..' ('..ansicolors.green..'ok'..ansicolors.reset..')') + else + print('<< '..d..' '..ansicolors.red..err..ansicolors.reset ) + end + else + print('<< no answer') + end end end lib14b.disconnect() From b522899190488016588043e06ad11342dd39ce62 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 30 Sep 2020 10:24:53 +0200 Subject: [PATCH 0704/1047] remover crc, sw codes in output --- client/luascripts/hf_14b_calypso.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/luascripts/hf_14b_calypso.lua b/client/luascripts/hf_14b_calypso.lua index fcd58d478..c821848d0 100644 --- a/client/luascripts/hf_14b_calypso.lua +++ b/client/luascripts/hf_14b_calypso.lua @@ -7,7 +7,7 @@ local ansicolors = require('ansicolors') copyright = '' author = 'Iceman' -version = 'v1.0.3' +version = 'v1.0.4' desc = [[ This is a script to communicate with a CALYSPO / 14443b tag using the '14b raw' commands ]] @@ -256,7 +256,7 @@ function main(args) else if result then local status, desc, err = calypso_apdu_status(result.data) - local d = result.data:sub(3, #result.data) + local d = result.data:sub(3, (#result.data - 8)) if status then print('<< '..d..' ('..ansicolors.green..'ok'..ansicolors.reset..')') else From a5ae725834ebc3af78ebe571f31785c368829816 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 30 Sep 2020 10:25:57 +0200 Subject: [PATCH 0705/1047] cleanbuffer before calling a sendcommand* fct --- client/src/scripting.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/client/src/scripting.c b/client/src/scripting.c index fed896970..1c4ec9f51 100644 --- a/client/src/scripting.c +++ b/client/src/scripting.c @@ -129,6 +129,7 @@ static int l_SendCommandOLD(lua_State *L) { } } + clearCommandBuffer(); SendCommandOLD(cmd, arg0, arg1, arg2, data, len); lua_pushboolean(L, true); return 1; @@ -176,6 +177,7 @@ static int l_SendCommandMIX(lua_State *L) { } } + clearCommandBuffer(); SendCommandMIX(cmd, arg0, arg1, arg2, data, len); lua_pushboolean(L, true); return 1; @@ -215,6 +217,7 @@ static int l_SendCommandNG(lua_State *L) { } } + clearCommandBuffer(); SendCommandNG(cmd, data, len); lua_pushboolean(L, true); return 1; @@ -387,8 +390,9 @@ static int l_WaitForResponseTimeout(lua_State *L) { ms_timeout = luaL_checkunsigned(L, 2); PacketResponseNG resp; - if (WaitForResponseTimeout(cmd, &resp, ms_timeout) == false) + if (WaitForResponseTimeout(cmd, &resp, ms_timeout) == false) { return returnToLuaWithError(L, "No response from the device"); + } char foo[sizeof(PacketResponseNG)]; n = 0; @@ -426,7 +430,6 @@ static int l_WaitForResponseTimeout(lua_State *L) { //Push it as a string lua_pushlstring(L, (const char *)&foo, sizeof(foo)); - return 1; } From 9560773e8f57a340b55d8222ad7cf1d227df64b2 Mon Sep 17 00:00:00 2001 From: mwalker33 Date: Wed, 30 Sep 2020 19:38:40 +1000 Subject: [PATCH 0706/1047] cliparser - round 3 updated cmdhfmfdes.c, cmdhfmfp.c, cmdhfhfu.c, cmdlfindala.c and cmdlfmotorola.c --- client/src/cmdhfmfdes.c | 261 ++++++++++++++++++------------------- client/src/cmdhfmfp.c | 110 ++++++++-------- client/src/cmdhfmfu.c | 8 +- client/src/cmdlfindala.c | 21 ++- client/src/cmdlfmotorola.c | 8 +- 5 files changed, 197 insertions(+), 211 deletions(-) diff --git a/client/src/cmdhfmfdes.c b/client/src/cmdhfmfdes.c index 058722c36..559465956 100644 --- a/client/src/cmdhfmfdes.c +++ b/client/src/cmdhfmfdes.c @@ -2079,12 +2079,12 @@ static int CmdHF14ADesSelectApp(const char *Cmd) { CLIParserContext *ctx; CLIParserInit(&ctx, "hf mfdes selectaid", "Select Application ID", - "Usage:\n\thf mfdes selectaid -a 123456\n" + "hf mfdes selectaid -a 123456" ); void *argtable[] = { arg_param_begin, - arg_strx0("aA", "aid", "", "App ID to select as hex bytes (3 bytes,big endian)"), + arg_strx0("a", "aid", "", "App ID to select as hex bytes (3 bytes,big endian)"), arg_param_end }; CLIExecWithReturn(ctx, Cmd, argtable, false); @@ -2114,16 +2114,16 @@ static int CmdHF14ADesCreateApp(const char *Cmd) { CLIParserContext *ctx; CLIParserInit(&ctx, "hf mfdes createaid", "Create Application ID", - "Usage:\n\thf mfdes createaid -a 123456 -f 1111 -k 0E -l 2E -n Test\n" + "hf mfdes createaid -a 123456 -f 1111 -k 0E -l 2E -n Test" ); void *argtable[] = { arg_param_begin, - arg_strx0("aA", "aid", "", "App ID to create as hex bytes ("), - arg_strx0("fF", "fid", "", "File ID to create (optional)"), - arg_strx0("kK", "keysetting1", "", "Key Setting 1 (Application Master Key Settings)"), - arg_strx0("lL", "keysetting2", "", "Key Setting 2"), - arg_str0("nN", "name", "", "App ISO-4 Name (optional)"), + arg_strx0("a", "aid", "", "App ID to create as hex bytes (3 hex bytes)"), + arg_strx0("f", "fid", "", "File ID to create (optional)"), + arg_strx0("k", "ks1", "", "Key Setting 1 (Application Master Key Settings)"), + arg_strx0("l", "ks2", "", "Key Setting 2"), + arg_str0("n", "name", "", "App ISO-4 Name (optional)"), arg_param_end }; CLIExecWithReturn(ctx, Cmd, argtable, false); @@ -2242,13 +2242,13 @@ static int CmdHF14ADesDeleteApp(const char *Cmd) { CLIParserContext *ctx; CLIParserInit(&ctx, "hf mfdes deleteaid", "Delete Application ID", - "Usage:\n\t-a aid (3 hex bytes, big endian)\n\n" - "Example:\n\thf mfdes deleteaid -a 123456\n" +// "Usage:\n\t-a aid (3 hex bytes, big endian)\n\n" + "hf mfdes deleteaid -a 123456" ); void *argtable[] = { arg_param_begin, - arg_strx0("aA", "aid", "", "App ID to delete"), + arg_strx0("a", "aid", "", "App ID (3 hex bytes, big endian) to delete"), arg_param_end }; CLIExecWithReturn(ctx, Cmd, argtable, false); @@ -2305,17 +2305,15 @@ static int selectfile(uint8_t *aid, uint32_t fileno, uint8_t *cs) { static int CmdHF14ADesClearRecordFile(const char *Cmd) { CLIParserContext *ctx; - CLIParserInit(&ctx, "hf mfdes clearrecord", - "Clear record file", - "Usage:\n\t" - "hf mfdes clearrecord -n 01\n" - "Make sure to select aid or authenticate aid before running this command.\n" + CLIParserInit(&ctx, "hf mfdes clearfile", + "Clear record file\nMake sure to select aid or authenticate aid before running this command.", + "hf mfdes clearfile -n 01" ); void *argtable[] = { arg_param_begin, - arg_strx0("nN", "fileno", "", "File Number (1 hex byte, 0x00 - 0x1F)"), - arg_strx0("aA", "aid", "", "App ID to select as hex bytes (3 bytes,big endian,optional)"), + arg_strx0("n", "fileno", "", "File Number (1 hex byte, 0x00 - 0x1F)"), + arg_strx0("a", "aid", "", "App ID to select as hex bytes (3 bytes, big endian, optional)"), arg_param_end }; CLIExecWithReturn(ctx, Cmd, argtable, false); @@ -2369,15 +2367,13 @@ static int CmdHF14ADesDeleteFile(const char *Cmd) { CLIParserContext *ctx; CLIParserInit(&ctx, "hf mfdes deletefile", "Delete File", - "Usage:\n\t" - "hf mfdes deletefile -n 01\n" - "Make sure to select aid or authenticate aid before running this command.\n" + "hf mfdes deletefile -n 01 -> Make sure to select aid or authenticate aid before running this command." ); void *argtable[] = { arg_param_begin, - arg_strx0("nN", "fileno", "", "File Number (1 hex byte, 0x00 - 0x1F)"), - arg_strx0("aA", "aid", "", "App ID to select as hex bytes (3 bytes,big endian,optional)"), + arg_strx0("n", "fileno", "", "File Number (1 hex byte, 0x00 - 0x1F)"), + arg_strx0("a", "aid", "", "App ID to select as hex bytes (3 bytes,big endian,optional)"), arg_param_end }; @@ -2431,19 +2427,19 @@ static int CmdHF14ADesCreateFile(const char *Cmd) { CLIParserContext *ctx; CLIParserInit(&ctx, "hf mfdes createfile", "Create Standard/Backup File", - "Usage:" - "\n\thf mfdes createfile -f 0001 -n 01 -c 0 -r EEEE -s 000100 -a 123456\n" + "hf mfdes createfile -f 0001 -n 01 -c 0 -r EEEE -s 000100 -a 123456" ); void *argtable[] = { arg_param_begin, - arg_strx0("nN", "fileno", "", "File Number (1 hex byte, 0x00 - 0x1F)"), - arg_strx0("fF", "fileid", "", "ISO FID (2 hex bytes, big endian)"), - arg_int0("cC", "com.set", "", "Communication setting (0=Plain,1=Plain+MAC,3=Enciphered)"), - arg_strx0("rR", "accessrights", "", "Access rights (2 hex bytes -> RW/Chg/R/W, 0-D Key, E Free, F Denied)"), - arg_strx0("sS", "filesize", "", "File size (3 hex bytes, big endian)"), - arg_lit0("bB", "backup", "Create backupfile instead of standard file"), - arg_strx0("aA", "aid", "", "App ID to select as hex bytes (3 bytes,big endian)"), + arg_strx0("n", "fileno", "", "File Number (1 hex byte, 0x00 - 0x1F)"), + arg_strx0("f", "fileid", "", "ISO FID (2 hex bytes, big endian)"), + arg_int0("c", "com.set", "", "Communication setting (0=Plain,1=Plain+MAC,3=Enciphered)"), +// arg_strx0("r", "accessrights", "", "Access rights (2 hex bytes -> RW/Chg/R/W, 0-D Key, E Free, F Denied)"), + arg_strx0("r", "rights", "", "Access rights (2 hex bytes -> RW/Chg/R/W, 0-D Key, E Free, F Denied)"), + arg_strx0("s", "filesize", "", "File size (3 hex bytes, big endian)"), + arg_lit0("b", "backup", "Create backupfile instead of standard file"), + arg_strx0("a", "aid", "", "App ID to select as hex bytes (3 bytes,big endian)"), arg_param_end }; @@ -2548,16 +2544,15 @@ static int CmdHF14ADesCreateFile(const char *Cmd) { static int CmdHF14ADesGetValueData(const char *Cmd) { CLIParserContext *ctx; CLIParserInit(&ctx, "hf mfdes getvalue", - "Get value from value file", - "Usage:" - "\n\thf mfdes getvalue -n 03\n" - "Make sure to select aid or authenticate aid before running this command.\n" + "Get value from value file\n" + "Make sure to select aid or authenticate aid before running this command.", + "hf mfdes getvalue -n 03" ); void *argtable[] = { arg_param_begin, - arg_strx0("nN", "fileno", "", "File Number (1 hex byte, 0x00 - 0x1F)"), - arg_strx0("aA", "aid", "", "App ID to select as hex bytes (3 bytes,big endian)"), + arg_strx0("n", "fileno", "", "File Number (1 hex byte, 0x00 - 0x1F)"), + arg_strx0("a", "aid", "", "App ID to select as hex bytes (3 bytes,big endian)"), arg_param_end }; CLIExecWithReturn(ctx, Cmd, argtable, false); @@ -2620,21 +2615,19 @@ static int CmdHF14ADesGetValueData(const char *Cmd) { static int CmdHF14ADesReadData(const char *Cmd) { CLIParserContext *ctx; CLIParserInit(&ctx, "hf mfdes readdata", - "Read data from File", - "Usage:" - "\n\thf mfdes readdata -n 01 -t 0 -o 000000 -l 000000 -a 123456\n" - "\thf mfdes readdata -n 01 -t 0 (Read all data from standard file, fileno 01)\n" - "Make sure to select aid or authenticate aid before running this command.\n" + "Read data from File\n" + "Make sure to select aid or authenticate aid before running this command.", + "hf mfdes readdata -n 01 -t 0 -o 000000 -l 000000 -a 123456\n" + "hf mfdes readdata -n 01 -t 0 -> Read all data from standard file, fileno 01" ); void *argtable[] = { arg_param_begin, - arg_strx0("nN", "fileno", "", "File Number (1 hex byte, 0x00 - 0x1F)"), - arg_strx0("oO", "offset", "", "File Offset (3 hex bytes, big endian), optional"), - arg_strx0("lL", "length", "", - "Length to read (3 hex bytes, big endian -> 000000 = Read all data),optional"), - arg_int0("tT", "type", "", "File Type (0=Standard/Backup, 1=Record)"), - arg_strx0("aA", "aid", "", "App ID to select as hex bytes (3 bytes,big endian,optional)"), + arg_strx0("n", "fileno", "", "File Number (1 hex byte, 0x00 - 0x1F)"), + arg_strx0("o", "offset", "", "File Offset (3 hex bytes, big endian), optional"), + arg_strx0("l", "length", "", "Length to read (3 hex bytes, big endian -> 000000 = Read all data),optional"), + arg_int0("t", "type", "", "File Type (0=Standard/Backup, 1=Record)"), + arg_strx0("a", "aid", "", "App ID to select as hex bytes (3 bytes,big endian,optional)"), arg_param_end }; @@ -2743,18 +2736,17 @@ static int CmdHF14ADesReadData(const char *Cmd) { static int CmdHF14ADesChangeValue(const char *Cmd) { CLIParserContext *ctx; CLIParserInit(&ctx, "hf mfdes changevalue", - "Change value (credit/limitedcredit/debit)", - "Usage:" - "\n\thf mfdes changevalue -n 03 -m 0 -d 00000001\n" - "Make sure to select aid or authenticate aid before running this command.\n" + "Change value (credit/limitedcredit/debit)\n" + "Make sure to select aid or authenticate aid before running this command.", + "hf mfdes changevalue -n 03 -m 0 -d 00000001" ); void *argtable[] = { arg_param_begin, - arg_strx0("nN", "fileno", "", "File Number (1 hex byte, 0x00 - 0x1F)"), - arg_strx0("dD", "value", "", "Value to increase (4 hex bytes, big endian)"), - arg_int0("mM", "mode", "", "Mode (0=Credit, 1=LimitedCredit, 2=Debit)"), - arg_strx0("aA", "aid", "", "App ID to select as hex bytes (3 bytes,big endian)"), + arg_strx0("n", "fileno", "", "File Number (1 hex byte, 0x00 - 0x1F)"), + arg_strx0("d", "value", "", "Value to increase (4 hex bytes, big endian)"), + arg_int0("m", "mode", "", "Mode (0=Credit, 1=LimitedCredit, 2=Debit)"), + arg_strx0("a", "aid", "", "App ID to select as hex bytes (3 bytes,big endian)"), arg_param_end }; @@ -2841,19 +2833,18 @@ static int CmdHF14ADesWriteData(const char *Cmd) { CLIParserContext *ctx; CLIParserInit(&ctx, "hf mfdes writedata", - "Write data to File", - "Usage:" - "\n\thf mfdes writedata -n 01 -t 0 -o 000000 -d 3132333435363738\n" - "Make sure to select aid or authenticate aid before running this command.\n" + "Write data to File\n" + "Make sure to select aid or authenticate aid before running this command.", + "hf mfdes writedata -n 01 -t 0 -o 000000 -d 3132333435363738" ); void *argtable[] = { arg_param_begin, - arg_strx0("nN", "fileno", "", "File Number (1 hex byte, 0x00 - 0x1F)"), - arg_strx0("oO", "offset", "", "File Offset (3 hex bytes, big endian), optional"), - arg_strx0("dD", "data", "", "Data to write (hex bytes, 256 bytes max)"), - arg_int0("type", "type", "", "File Type (0=Standard/Backup, 1=Record)"), - arg_strx0("aA", "aid", "", "App ID to select as hex bytes (3 bytes, big endian, optional)"), + arg_strx0("n", "fileno", "", "File Number (1 hex byte, 0x00 - 0x1F)"), + arg_strx0("o", "offset", "", "File Offset (3 hex bytes, big endian), optional"), + arg_strx0("d", "data", "", "Data to write (hex bytes, 256 bytes max)"), + arg_int0("t", "type", "", "File Type (0=Standard/Backup, 1=Record)"), + arg_strx0("a", "aid", "", "App ID to select as hex bytes (3 bytes, big endian, optional)"), arg_param_end }; @@ -2947,22 +2938,23 @@ static int CmdHF14ADesWriteData(const char *Cmd) { static int CmdHF14ADesCreateRecordFile(const char *Cmd) { CLIParserContext *ctx; CLIParserInit(&ctx, "hf mfdes createrecordfile", - "Create Linear/Cyclic Record File", - "Usage:" - "\n\thf mfdes createrecordfile -f 1122 -n 02 -c 0 -r EEEE -s 000010 -m 000005 -a 123456\n" - "Make sure to select aid or authenticate aid before running this command.\n" + "Create Linear/Cyclic Record File\n" + "Make sure to select aid or authenticate aid before running this command.", + "hf mfdes createrecordfile -f 1122 -n 02 -c 0 -r EEEE -s 000010 -m 000005 -a 123456" ); void *argtable[] = { arg_param_begin, - arg_strx0("nN", "fileno", "", "File Number (1 hex byte, 0x00 - 0x1F)"), - arg_strx0("fF", "fileid", "", "ISO FID (2 hex bytes, big endian)"), - arg_int0("cC", "com.set", "", "Communication setting (0=Plain,1=Plain+MAC,3=Enciphered)"), - arg_strx0("rR", "accessrights", "", "Access rights (2 hex bytes -> RW/Chg/R/W, 0-D Key, E Free, F Denied)"), - arg_strx0("sS", "recordsize", "", "Record size (3 hex bytes, big endian, 000001 to FFFFFF)"), - arg_strx0("mM", "maxnumrecord", "", "Max. Number of Records (3 hex bytes, big endian)"), - arg_lit0("bB", "cyclic", "Create cyclic record file instead of linear record file"), - arg_strx0("aA", "aid", "", "App ID to select as hex bytes (3 bytes,big endian,optional)"), + arg_strx0("n", "fileno", "", "File Number (1 hex byte, 0x00 - 0x1F)"), + arg_strx0("f", "fileid", "", "ISO FID (2 hex bytes, big endian)"), + arg_int0("c", "com.set", "", "Communication setting (0=Plain,1=Plain+MAC,3=Enciphered)"), +// arg_strx0("r", "accessrights", "", "Access rights (2 hex bytes -> RW/Chg/R/W, 0-D Key, E Free, F Denied)"), +// arg_strx0("s", "recordsize", "", "Record size (3 hex bytes, big endian, 000001 to FFFFFF)"), + arg_strx0("r", "rights", "", "Access rights (2 hex bytes -> RW/Chg/R/W, 0-D Key, E Free, F Denied)"), + arg_strx0("s", "size", "", "Record size (3 hex bytes, big endian, 000001 to FFFFFF)"), + arg_strx0("m", "maxrecord", "", "Max. Number of Records (3 hex bytes, big endian)"), + arg_lit0("b", "cyclic", "Create cyclic record file instead of linear record file"), + arg_strx0("a", "aid", "", "App ID to select as hex bytes (3 bytes,big endian,optional)"), arg_param_end }; @@ -3082,22 +3074,21 @@ static int CmdHF14ADesCreateRecordFile(const char *Cmd) { static int CmdHF14ADesCreateValueFile(const char *Cmd) { CLIParserContext *ctx; CLIParserInit(&ctx, "hf mfdes createvaluefile", - "Create Value File", - "Usage:" - "\n\thf mfdes createvaluefile -n 03 -c 0 -r EEEE -l 00000000 -u 00002000 -v 00000001 -m 02 -a 123456\n" - "Make sure to select aid or authenticate aid before running this command.\n" + "Create Value File\n" + "Make sure to select aid or authenticate aid before running this command.", + "hf mfdes createvaluefile -n 03 -c 0 -r EEEE -l 00000000 -u 00002000 -v 00000001 -m 02 -a 123456\n" ); void *argtable[] = { arg_param_begin, - arg_strx0("nN", "fileno", "", "File Number (1 hex byte, 0x00 - 0x1F)"), - arg_int0("cC", "com.set", "", "Communication setting (0=Plain,1=Plain+MAC,3=Enciphered)"), - arg_strx0("rR", "accessrights", "", "Access rights (2 hex bytes -> RW/Chg/R/W, 0-D Key, E Free, F Denied)"), - arg_strx0("lL", "lowerlimit", "", "Lower limit (4 hex bytes, big endian)"), - arg_strx0("uU", "upperlimit", "", "Upper limit (4 hex bytes, big endian)"), - arg_strx0("vV", "value", "", "Value (4 hex bytes, big endian)"), - arg_strx0("mM", "limitcredit", "", "Limited Credit enabled (1 hex byte [Bit 0=LimitedCredit, 1=FreeValue])"), - arg_strx0("aA", "aid", "", "App ID to select as hex bytes (3 bytes,big endian,optional)"), + arg_strx0("n", "fileno", "", "File Number (1 hex byte, 0x00 - 0x1F)"), + arg_int0("c", "com.set", "", "Communication setting (0=Plain,1=Plain+MAC,3=Enciphered)"), + arg_strx0("r", "rights", "", "Access rights (2 hex bytes -> RW/Chg/R/W, 0-D Key, E Free, F Denied)"), + arg_strx0("l", "lowerlimit", "", "Lower limit (4 hex bytes, big endian)"), + arg_strx0("u", "upperlimit", "", "Upper limit (4 hex bytes, big endian)"), + arg_strx0("v", "value", "", "Value (4 hex bytes, big endian)"), + arg_strx0("m", "limitcredit", "", "Limited Credit enabled (1 hex byte [Bit 0=LimitedCredit, 1=FreeValue])"), + arg_strx0("a", "aid", "", "App ID to select as hex bytes (3 bytes,big endian,optional)"), arg_param_end }; @@ -3215,11 +3206,15 @@ static int CmdHF14ADesCreateValueFile(const char *Cmd) { static int CmdHF14ADesFormatPICC(const char *Cmd) { CLIParserContext *ctx; CLIParserInit(&ctx, "hf mfdes formatpicc", - "Formats MIFARE DESFire PICC to factory state", - "Usage:" - "\n\thf mfdes formatpicc\n" - "Make sure to authenticate picc before running this command.\n" + "Formats MIFARE DESFire PICC to factory state\n" + "Make sure to authenticate picc before running this command.", + "hf mfdes formatpicc" ); + void *argtable[] = { + arg_param_begin, + arg_param_end + }; + CLIExecWithReturn(ctx, Cmd, argtable, true); CLIParserFree(ctx); sAPDU apdu = {0x90, MFDES_FORMAT_PICC, 0x00, 0x00, 0, NULL}; // 0xDF uint16_t sw = 0; @@ -3761,20 +3756,19 @@ static int CmdHF14ADesChangeKey(const char *Cmd) { uint8_t newkeylength = 8; CLIParserContext *ctx; CLIParserInit(&ctx, "hf mfdes changekey", - "Changes Mifare DESFire Key", - "Usage:" - "\n\thf mfdes changekey -n 0 -t 1 -k 0000000000000000 -u 1 -j 0102030405060708 (DES,keynumber 0)\n" - "Make sure to select aid or authenticate aid before running this command.\n" + "Changes Mifare DESFire Key\n" + "Make sure to select aid or authenticate aid before running this command.", + "hf mfdes changekey -n 0 -t 1 -k 0000000000000000 -u 1 -j 0102030405060708 -> DES,keynumber 0" ); void *argtable[] = { arg_param_begin, - arg_int0("nN", "keyno", "", "Key number used for authentification"), - arg_int0("tT", "algo", "", "Current key algo (1=DES, 2=3DES(2K2DES), 3=3K3DES, 4=AES)"), - arg_str0("kK", "key", "", "Current Key (HEX 8-24 bytes)"), - arg_int0("uU", "newalgo", "", "New key algo (1=DES, 2=3DES(2K2DES), 3=3K3DES, 4=AES)"), - arg_str0("jJ", "newkey", "", "New Key (HEX 8-24 bytes)"), - arg_int0("vV", "aesversion", "", "Aes version (if aes is used)"), + arg_int0("n", "keyno", "", "Key number used for authentification"), + arg_int0("t", "algo", "", "Current key algo (1=DES, 2=3DES(2K2DES), 3=3K3DES, 4=AES)"), + arg_str0("k", "key", "", "Current Key (HEX 8-24 bytes)"), + arg_int0("u", "newalgo", "", "New key algo (1=DES, 2=3DES(2K2DES), 3=3K3DES, 4=AES)"), + arg_str0("j", "newkey", "", "New Key (HEX 8-24 bytes)"), + arg_int0("v", "aesversion", "", "Aes version (if aes is used)"), arg_param_end }; CLIExecWithReturn(ctx, Cmd, argtable, false); @@ -3860,23 +3854,22 @@ static int CmdHF14ADesAuth(const char *Cmd) { CLIParserContext *ctx; CLIParserInit(&ctx, "hf mfdes auth", "Authenticates Mifare DESFire using Key", - "Usage:" - "\n\thf mfdes auth -m 3 -t 4 -a 808301 -n 0 -k 00000000000000000000000000000000 (AES,keynumber 0, aid 0x803201)" - "\n\thf mfdes auth -m 2 -t 2 -a 000000 -n 1 -k 00000000000000000000000000000000 (3DES,keynumber 1, aid 0x000000)" - "\n\thf mfdes auth -m 1 -t 1 -a 000000 -n 2 -k 0000000000000000 (DES,keynumber 2, aid 0x000000)" - "\n\thf mfdes auth -m 1 -t 1 -a 000000 -n 0 (DES, defaultkey, aid 0x000000)" - "\n\thf mfdes auth -m 2 -t 2 -a 000000 -n 0 (3DES, defaultkey, aid 0x000000)" - "\n\thf mfdes auth -m 3 -t 4 -a 000000 -n 0 (3K3DES, defaultkey, aid 0x000000)" - "\n\thf mfdes auth -m 3 -t 4 -a 000000 -n 0 (AES, defaultkey, aid 0x000000)" + "hf mfdes auth -m 3 -t 4 -a 808301 -n 0 -k 00000000000000000000000000000000 -> AES,keynumber 0, aid 0x803201\n" + "hf mfdes auth -m 2 -t 2 -a 000000 -n 1 -k 00000000000000000000000000000000 -> 3DES,keynumber 1, aid 0x000000\n" + "hf mfdes auth -m 1 -t 1 -a 000000 -n 2 -k 0000000000000000 -> DES,keynumber 2, aid 0x000000\n" + "hf mfdes auth -m 1 -t 1 -a 000000 -n 0 -> DES, defaultkey, aid 0x000000\n" + "hf mfdes auth -m 2 -t 2 -a 000000 -n 0 -> 3DES, defaultkey, aid 0x000000\n" + "hf mfdes auth -m 3 -t 4 -a 000000 -n 0 -> 3K3DES, defaultkey, aid 0x000000\n" + "hf mfdes auth -m 3 -t 4 -a 000000 -n 0 -> AES, defaultkey, aid 0x000000" ); void *argtable[] = { arg_param_begin, - arg_int0("mM", "type", "", "Auth type (1=normal, 2=iso, 3=aes)"), - arg_int0("tT", "algo", "", "Crypt algo (1=DES, 2=3DES(2K2DES), 3=3K3DES, 4=AES)"), - arg_strx0("aA", "aid", "", "AID used for authentification (HEX 3 bytes)"), - arg_int0("nN", "keyno", "", "Key number used for authentification"), - arg_str0("kK", "key", "", "Key for checking (HEX 8-24 bytes)"), + arg_int0("m", "type", "", "Auth type (1=normal, 2=iso, 3=aes)"), + arg_int0("t", "algo", "", "Crypt algo (1=DES, 2=3DES(2K2DES), 3=3K3DES, 4=AES)"), + arg_strx0("a", "aid", "", "AID used for authentification (HEX 3 bytes)"), + arg_int0("n", "keyno", "", "Key number used for authentification"), + arg_str0("k", "key", "", "Key for checking (HEX 8-24 bytes)"), arg_param_end }; CLIExecWithReturn(ctx, Cmd, argtable, false); @@ -4222,23 +4215,22 @@ static int CmdHF14aDesChk(const char *Cmd) { CLIParserContext *ctx; CLIParserInit(&ctx, "hf mfdes chk", "Checks keys with Mifare Desfire card.", - "Usage:\n" - " hf mfdes chk -a 123456 -k 000102030405060708090a0b0c0d0e0f -> check key on aid 0x123456\n" - " hf mfdes chk -d mfdes_default_keys -> check keys from dictionary against all existing aid on card\n" - " hf mfdes chk -d mfdes_default_keys -a 123456 -> check keys from dictionary against aid 0x123456\n" - " hf mfdes chk -a 123456 --pattern1b -j keys -> check all 1-byte keys pattern on aid 0x123456 and save found keys to json\n" - " hf mfdes chk -a 123456 --pattern2b --startp2b FA00 -> check all 2-byte keys pattern on aid 0x123456. Start from key FA00FA00...FA00\n"); + "hf mfdes chk -a 123456 -k 000102030405060708090a0b0c0d0e0f -> check key on aid 0x123456\n" + "hf mfdes chk -d mfdes_default_keys -> check keys from dictionary against all existing aid on card\n" + "hf mfdes chk -d mfdes_default_keys -a 123456 -> check keys from dictionary against aid 0x123456\n" + "hf mfdes chk -a 123456 --pattern1b -j keys -> check all 1-byte keys pattern on aid 0x123456 and save found keys to json\n" + "hf mfdes chk -a 123456 --pattern2b --startp2b FA00 -> check all 2-byte keys pattern on aid 0x123456. Start from key FA00FA00...FA00"); void *argtable[] = { arg_param_begin, - arg_strx0("aA", "aid", "", "Use specific AID (3 hex bytes, big endian)"), - arg_str0("kK", "key", "", "Key for checking (HEX 16 bytes)"), - arg_str0("dD", "dict", "", "File with keys dictionary"), + arg_strx0("a", "aid", "", "Use specific AID (3 hex bytes, big endian)"), + arg_str0("k", "key", "", "Key for checking (HEX 16 bytes)"), + arg_str0("d", "dict", "", "File with keys dictionary"), arg_lit0(NULL, "pattern1b", "Check all 1-byte combinations of key (0000...0000, 0101...0101, 0202...0202, ...)"), arg_lit0(NULL, "pattern2b", "Check all 2-byte combinations of key (0000...0000, 0001...0001, 0002...0002, ...)"), arg_str0(NULL, "startp2b", "", "Start key (2-byte HEX) for 2-byte search (use with `--pattern2b`)"), - arg_str0("jJ", "json", "", "Json file to save keys"), - arg_lit0("vV", "verbose", "Verbose mode."), + arg_str0("j", "json", "", "Json file to save keys"), + arg_lit0("v", "verbose", "Verbose mode."), arg_param_end }; CLIExecWithReturn(ctx, Cmd, argtable, false); @@ -4489,17 +4481,16 @@ static int CmdHF14aDesNDEF(const char *Cmd) { CLIParserContext *ctx; CLIParserInit(&ctx, "hf mfdes ndef", "Prints NFC Data Exchange Format (NDEF)", - "Usage:\n" - _YELLOW_("\thf mfdes ndef") " -> shows NDEF data\n" - _YELLOW_("\thf mfdes ndef -vv") " -> shows NDEF parsed and raw data\n" - _YELLOW_("\thf mfdes ndef -a e103 -k d3f7d3f7d3f7d3f7d3f7d3f7d3f7d3f7") " -> shows NDEF data with custom AID and key\n"); + "hf mfdes ndef -> shows NDEF data\n" + "hf mfdes ndef -v -> shows NDEF parsed and raw data\n" + "hf mfdes ndef -a e103 -k d3f7d3f7d3f7d3f7d3f7d3f7d3f7d3f7 -> shows NDEF data with custom AID and key"); void *argtable[] = { arg_param_begin, - arg_litn("vV", "verbose", 0, 2, "show technical data"), + arg_litn("v", "verbose", 0, 2, "show technical data"), arg_str0("", "aid", "", "replace default aid for NDEF"), - arg_str0("kK", "key", "", "replace default key for NDEF"), - arg_lit0("bB", "keyb", "use key B for access sectors (by default: key A)"), + arg_str0("k", "key", "", "replace default key for NDEF"), + arg_lit0("b", "keyb", "use key B for access sectors (by default: key A)"), arg_param_end }; CLIExecWithReturn(ctx, Cmd, argtable, true); diff --git a/client/src/cmdhfmfp.c b/client/src/cmdhfmfp.c index f7d7d2142..f56ef1ac8 100644 --- a/client/src/cmdhfmfp.c +++ b/client/src/cmdhfmfp.c @@ -436,12 +436,12 @@ static int CmdHFMFPWritePerso(const char *Cmd) { CLIParserContext *ctx; CLIParserInit(&ctx, "hf mfp wrp", "Executes Write Perso command. Can be used in SL0 mode only.", - "Usage:\n\thf mfp wrp 4000 000102030405060708090a0b0c0d0e0f -> write key (00..0f) to key number 4000 \n" - "\thf mfp wrp 4000 -> write default key(0xff..0xff) to key number 4000"); + "hf mfp wrp 4000 000102030405060708090a0b0c0d0e0f -> write key (00..0f) to key number 4000 \n" + "hf mfp wrp 4000 -> write default key(0xff..0xff) to key number 4000"); void *argtable[] = { arg_param_begin, - arg_lit0("vV", "verbose", "show internal data."), + arg_lit0("v", "verbose", "show internal data."), arg_str1(NULL, NULL, "", NULL), arg_strx0(NULL, NULL, "", NULL), arg_param_end @@ -503,12 +503,12 @@ static int CmdHFMFPInitPerso(const char *Cmd) { CLIParserContext *ctx; CLIParserInit(&ctx, "hf mfp initp", "Executes Write Perso command for all card's keys. Can be used in SL0 mode only.", - "Usage:\n\thf mfp initp 000102030405060708090a0b0c0d0e0f -> fill all the keys with key (00..0f)\n" - "\thf mfp initp -vv -> fill all the keys with default key(0xff..0xff) and show all the data exchange"); + "hf mfp initp 000102030405060708090a0b0c0d0e0f -> fill all the keys with key (00..0f)\n" + "hf mfp initp -vv -> fill all the keys with default key(0xff..0xff) and show all the data exchange"); void *argtable[] = { arg_param_begin, - arg_litn("vV", "verbose", 0, 2, "show internal data."), + arg_litn("v", "verbose", 0, 2, "show internal data."), arg_strx0(NULL, NULL, "", NULL), arg_param_end }; @@ -571,11 +571,11 @@ static int CmdHFMFPCommitPerso(const char *Cmd) { CLIParserContext *ctx; CLIParserInit(&ctx, "hf mfp commitp", "Executes Commit Perso command. Can be used in SL0 mode only.", - "Usage:\n\thf mfp commitp -> \n"); + "hf mfp commitp"); void *argtable[] = { arg_param_begin, - arg_lit0("vV", "verbose", "show internal data."), + arg_lit0("v", "verbose", "show internal data."), arg_int0(NULL, NULL, "SL mode", NULL), arg_param_end }; @@ -618,12 +618,12 @@ static int CmdHFMFPAuth(const char *Cmd) { CLIParserContext *ctx; CLIParserInit(&ctx, "hf mfp auth", "Executes AES authentication command for Mifare Plus card", - "Usage:\n\thf mfp auth 4000 000102030405060708090a0b0c0d0e0f -> executes authentication\n" - "\thf mfp auth 9003 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -v -> executes authentication and shows all the system data\n"); + "hf mfp auth 4000 000102030405060708090a0b0c0d0e0f -> executes authentication\n" + "hf mfp auth 9003 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -v -> executes authentication and shows all the system data"); void *argtable[] = { arg_param_begin, - arg_lit0("vV", "verbose", "show internal data."), + arg_lit0("v", "verbose", "show internal data."), arg_str1(NULL, NULL, "", NULL), arg_str1(NULL, NULL, "", NULL), arg_param_end @@ -656,15 +656,15 @@ static int CmdHFMFPRdbl(const char *Cmd) { CLIParserContext *ctx; CLIParserInit(&ctx, "hf mfp rdbl", "Reads several blocks from Mifare Plus card.", - "Usage:\n\thf mfp rdbl 0 000102030405060708090a0b0c0d0e0f -> executes authentication and read block 0 data\n" - "\thf mfp rdbl 1 -v -> executes authentication and shows sector 1 data with default key 0xFF..0xFF and some additional data\n"); + "hf mfp rdbl 0 000102030405060708090a0b0c0d0e0f -> executes authentication and read block 0 data\n" + "hf mfp rdbl 1 -v -> executes authentication and shows sector 1 data with default key 0xFF..0xFF and some additional data"); void *argtable[] = { arg_param_begin, - arg_lit0("vV", "verbose", "show internal data."), - arg_int0("nN", "count", "blocks count (by default 1).", NULL), - arg_lit0("bB", "keyb", "use key B (by default keyA)."), - arg_lit0("pP", "plain", "plain communication mode between reader and card."), + arg_lit0("v", "verbose", "show internal data."), + arg_int0("n", "count", "blocks count (by default 1).", NULL), + arg_lit0("b", "keyb", "use key B (by default keyA)."), + arg_lit0("p", "plain", "plain communication mode between reader and card."), arg_int1(NULL, NULL, "", NULL), arg_str0(NULL, NULL, "", NULL), arg_param_end @@ -769,14 +769,14 @@ static int CmdHFMFPRdsc(const char *Cmd) { CLIParserContext *ctx; CLIParserInit(&ctx, "hf mfp rdsc", "Reads one sector from Mifare Plus card.", - "Usage:\n\thf mfp rdsc 0 000102030405060708090a0b0c0d0e0f -> executes authentication and read sector 0 data\n" - "\thf mfp rdsc 1 -v -> executes authentication and shows sector 1 data with default key 0xFF..0xFF and some additional data\n"); + "hf mfp rdsc 0 000102030405060708090a0b0c0d0e0f -> executes authentication and read sector 0 data\n" + "hf mfp rdsc 1 -v -> executes authentication and shows sector 1 data with default key 0xFF..0xFF and some additional data"); void *argtable[] = { arg_param_begin, - arg_lit0("vV", "verbose", "show internal data."), - arg_lit0("bB", "keyb", "use key B (by default keyA)."), - arg_lit0("pP", "plain", "plain communication mode between reader and card."), + arg_lit0("v", "verbose", "show internal data."), + arg_lit0("b", "keyb", "use key B (by default keyA)."), + arg_lit0("p", "plain", "plain communication mode between reader and card."), arg_int1(NULL, NULL, "", NULL), arg_str0(NULL, NULL, "", NULL), arg_param_end @@ -868,13 +868,13 @@ static int CmdHFMFPWrbl(const char *Cmd) { CLIParserContext *ctx; CLIParserInit(&ctx, "hf mfp wrbl", "Writes one block to Mifare Plus card.", - "Usage:\n\thf mfp wrbl 1 ff0000000000000000000000000000ff 000102030405060708090a0b0c0d0e0f -> writes block 1 data\n" - "\thf mfp wrbl 2 ff0000000000000000000000000000ff -v -> writes block 2 data with default key 0xFF..0xFF and some additional data\n"); + "hf mfp wrbl 1 ff0000000000000000000000000000ff 000102030405060708090a0b0c0d0e0f -> writes block 1 data\n" + "hf mfp wrbl 2 ff0000000000000000000000000000ff -v -> writes block 2 data with default key 0xFF..0xFF and some additional data"); void *argtable[] = { arg_param_begin, - arg_lit0("vV", "verbose", "show internal data."), - arg_lit0("bB", "keyb", "use key B (by default keyA)."), + arg_lit0("v", "verbose", "show internal data."), + arg_lit0("b", "keyb", "use key B (by default keyA)."), arg_int1(NULL, NULL, "", NULL), arg_str1(NULL, NULL, "", NULL), arg_str0(NULL, NULL, "", NULL), @@ -1070,26 +1070,25 @@ static int CmdHFMFPChk(const char *Cmd) { CLIParserContext *ctx; CLIParserInit(&ctx, "hf mfp chk", "Checks keys with Mifare Plus card.", - "Usage:\n" - " hf mfp chk -k 000102030405060708090a0b0c0d0e0f -> check key on sector 0 as key A and B\n" - " hf mfp chk -s 2 -a -> check default key list on sector 2, key A\n" - " hf mfp chk -d mfp_default_keys -s0 -e6 -> check keys from dictionary against sectors 0-6\n" - " hf mfp chk --pattern1b -j keys -> check all 1-byte keys pattern and save found keys to json\n" - " hf mfp chk --pattern2b --startp2b FA00 -> check all 2-byte keys pattern. Start from key FA00FA00...FA00\n"); + "hf mfp chk -k 000102030405060708090a0b0c0d0e0f -> check key on sector 0 as key A and B\n" + "hf mfp chk -s 2 -a -> check default key list on sector 2, key A\n" + "hf mfp chk -d mfp_default_keys -s0 -e6 -> check keys from dictionary against sectors 0-6\n" + "hf mfp chk --pattern1b -j keys -> check all 1-byte keys pattern and save found keys to json\n" + "hf mfp chk --pattern2b --startp2b FA00 -> check all 2-byte keys pattern. Start from key FA00FA00...FA00"); void *argtable[] = { arg_param_begin, - arg_lit0("aA", "keya", "check only key A (by default check all keys)."), - arg_lit0("bB", "keyb", "check only key B (by default check all keys)."), - arg_int0("sS", "startsec", "Start sector Num (0..255)", NULL), - arg_int0("eE", "endsec", "End sector Num (0..255)", NULL), - arg_str0("kK", "key", "", "Key for checking (HEX 16 bytes)"), - arg_str0("dD", "dict", "", "file with keys dictionary"), + arg_lit0("a", "keya", "check only key A (by default check all keys)."), + arg_lit0("b", "keyb", "check only key B (by default check all keys)."), + arg_int0("s", "startsec", "Start sector Num (0..255)", NULL), + arg_int0("e", "endsec", "End sector Num (0..255)", NULL), + arg_str0("k", "key", "", "Key for checking (HEX 16 bytes)"), + arg_str0("d", "dict", "", "file with keys dictionary"), arg_lit0(NULL, "pattern1b", "check all 1-byte combinations of key (0000...0000, 0101...0101, 0202...0202, ...)"), arg_lit0(NULL, "pattern2b", "check all 2-byte combinations of key (0000...0000, 0001...0001, 0002...0002, ...)"), arg_str0(NULL, "startp2b", "", "Start key (2-byte HEX) for 2-byte search (use with `--pattern2b`)"), - arg_str0("jJ", "json", "", "json file to save keys"), - arg_lit0("vV", "verbose", "verbose mode."), + arg_str0("j", "json", "", "json file to save keys"), + arg_lit0("v", "verbose", "verbose mode."), arg_param_end }; CLIExecWithReturn(ctx, Cmd, argtable, true); @@ -1303,17 +1302,17 @@ static int CmdHFMFPMAD(const char *Cmd) { CLIParserContext *ctx; CLIParserInit(&ctx, "hf mfp mad", "Checks and prints Mifare Application Directory (MAD)", - "Usage:\n\thf mfp mad -> shows MAD if exists\n" - "\thf mfp mad -a e103 -k d3f7d3f7d3f7d3f7d3f7d3f7d3f7d3f7 -> shows NDEF data if exists\n"); + "hf mfp mad -> shows MAD if exists\n" + "hf mfp mad -a e103 -k d3f7d3f7d3f7d3f7d3f7d3f7d3f7d3f7 -> shows NDEF data if exists"); void *argtable[] = { arg_param_begin, - arg_lit0("vV", "verbose", "show technical data"), - arg_str0("", "aid", "", "print all sectors with aid"), - arg_str0("kK", "key", "", "key for printing sectors"), - arg_lit0("bB", "keyb", "use key B for access printing sectors (by default: key A)"), - arg_lit0("", "be", "(optional, BigEndian)"), - arg_lit0("", "dch", "decode Card Holder information"), + arg_lit0("v", "verbose", "show technical data"), + arg_str0(NULL, "aid", "", "print all sectors with aid"), + arg_str0("k", "key", "", "key for printing sectors"), + arg_lit0("b", "keyb", "use key B for access printing sectors (by default: key A)"), + arg_lit0(NULL, "be", "(optional, BigEndian)"), + arg_lit0(NULL, "dch", "decode Card Holder information"), arg_param_end }; CLIExecWithReturn(ctx, Cmd, argtable, true); @@ -1443,17 +1442,16 @@ static int CmdHFMFPNDEF(const char *Cmd) { CLIParserContext *ctx; CLIParserInit(&ctx, "hf mfp ndef", "Prints NFC Data Exchange Format (NDEF)", - "Usage:\n" - _YELLOW_("\thf mfp ndef") " -> shows NDEF data\n" - _YELLOW_("\thf mfp ndef -vv") " -> shows NDEF parsed and raw data\n" - _YELLOW_("\thf mfp ndef -a e103 -k d3f7d3f7d3f7d3f7d3f7d3f7d3f7d3f7") " -> shows NDEF data with custom AID and key\n"); + "hf mfp ndef -> shows NDEF data\n" + "hf mfp ndef -vv -> shows NDEF parsed and raw data\n" + "hf mfp ndef -a e103 -k d3f7d3f7d3f7d3f7d3f7d3f7d3f7d3f7 -> shows NDEF data with custom AID and key"); void *argtable[] = { arg_param_begin, - arg_litn("vV", "verbose", 0, 2, "show technical data"), - arg_str0("", "aid", "", "replace default aid for NDEF"), - arg_str0("kK", "key", "", "replace default key for NDEF"), - arg_lit0("bB", "keyb", "use key B for access sectors (by default: key A)"), + arg_litn("v", "verbose", 0, 2, "show technical data"), + arg_str0(NULL, "aid", "", "replace default aid for NDEF"), + arg_str0("k", "key", "", "replace default key for NDEF"), + arg_lit0("b", "keyb", "use key B for access sectors (by default: key A)"), arg_param_end }; CLIExecWithReturn(ctx, Cmd, argtable, true); diff --git a/client/src/cmdhfmfu.c b/client/src/cmdhfmfu.c index 28b560991..58099b8da 100644 --- a/client/src/cmdhfmfu.c +++ b/client/src/cmdhfmfu.c @@ -2954,13 +2954,13 @@ static int CmdHF14MfuNDEF(const char *Cmd) { CLIParserContext *ctx; CLIParserInit(&ctx, "hf mfu ndef", "Prints NFC Data Exchange Format (NDEF)", - "Usage:\n\thf mfu ndef -> shows NDEF data\n" - "\thf mfu ndef -k ffffffff -> shows NDEF data with key\n"); + "hf mfu ndef -> shows NDEF data\n" + "hf mfu ndef -k ffffffff -> shows NDEF data with key"); void *argtable[] = { arg_param_begin, - arg_str0("kK", "key", "replace default key for NDEF", NULL), - arg_lit0("lL", "key", "(optional) swap entered key's endianness"), + arg_str0("k", "key", "replace default key for NDEF", NULL), + arg_lit0("l", "key", "(optional) swap entered key's endianness"), arg_param_end }; CLIExecWithReturn(ctx, Cmd, argtable, true); diff --git a/client/src/cmdlfindala.c b/client/src/cmdlfindala.c index 7c29c1eba..829cee8d0 100644 --- a/client/src/cmdlfindala.c +++ b/client/src/cmdlfindala.c @@ -580,20 +580,19 @@ static int CmdIndalaClone(const char *Cmd) { CLIParserContext *ctx; CLIParserInit(&ctx, "lf indala clone", "clone INDALA UID to T55x7 or Q5/T5555 tag", - "Examples:\n" - _YELLOW_("\tlf indala clone --heden 888\n") - _YELLOW_("\tlf indala clone --fc 123 --cn 1337\n") - _YELLOW_("\tlf indala clone -r a0000000a0002021\n") - _YELLOW_("\tlf indala clone -l -r 80000001b23523a6c2e31eba3cbee4afb3c6ad1fcf649393928c14e5")); + "lf indala clone --heden 888\n" + "lf indala clone --fc 123 --cn 1337\n" + "lf indala clone -r a0000000a0002021\n" + "lf indala clone -l -r 80000001b23523a6c2e31eba3cbee4afb3c6ad1fcf649393928c14e5"); void *argtable[] = { arg_param_begin, - arg_lit0("lL", "long", "optional - long UID 224 bits"), - arg_int0("cC", "heden", "", "Cardnumber for Heden 2L format"), - arg_strx0("rR", "raw", "", "raw bytes"), - arg_lit0("qQ", "Q5", "optional - specify writing to Q5/T5555 tag"), - arg_int0("", "fc", "", "Facility Code (26 bit format)"), - arg_int0("", "cn", "", "Cardnumber (26 bit format)"), + arg_lit0("l", "long", "optional - long UID 224 bits"), + arg_int0("c", "heden", "", "Cardnumber for Heden 2L format"), + arg_strx0("r", "raw", "", "raw bytes"), + arg_lit0("q", "Q5", "optional - specify writing to Q5/T5555 tag"), + arg_int0(NULL, "fc", "", "Facility Code (26 bit format)"), + arg_int0(NULL, "cn", "", "Cardnumber (26 bit format)"), arg_param_end }; CLIExecWithReturn(ctx, Cmd, argtable, false); diff --git a/client/src/cmdlfmotorola.c b/client/src/cmdlfmotorola.c index 7deec0590..a717e6e89 100644 --- a/client/src/cmdlfmotorola.c +++ b/client/src/cmdlfmotorola.c @@ -155,12 +155,10 @@ static int CmdMotorolaClone(const char *Cmd) { int datalen = 0; CLIParserContext *ctx; - CLIParserInit(&ctx, "lf indala clone", + CLIParserInit(&ctx, "lf motorola clone", "Enables cloning of Motorola card with specified uid onto T55x7\n" - "defaults to 64.\n", - "\n" - "Samples:\n" - _YELLOW_("\tlf motorola clone a0000000a0002021") "\n" + "defaults to 64.", + "lf motorola clone a0000000a0002021" ); void *argtable[] = { From 56614ef80cf7d9174bd672671df3380603e03397 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 30 Sep 2020 12:10:27 +0200 Subject: [PATCH 0707/1047] comments about 6D 00 responses seen in the wild --- client/src/cmdhfmfp.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/client/src/cmdhfmfp.c b/client/src/cmdhfmfp.c index f56ef1ac8..a405ceb08 100644 --- a/client/src/cmdhfmfp.c +++ b/client/src/cmdhfmfp.c @@ -371,7 +371,8 @@ static int CmdHFMFPInfo(const char *Cmd) { int res = ExchangeRAW14a(cmd, sizeof(cmd), true, false, data, sizeof(data), &datalen, false); // DESFire answers 0x1C or 67 00 - // Plus answers 0x0B, 0x09 + // Plus answers 0x0B, 0x09, 0x06 + // Which tag answers 6D 00 ?? if ( data[0] != 0x0b && data[0] != 0x09 && data[0] != 0x1C && data[0] != 0x67) { PrintAndLogEx(INFO, _RED_("Send copy to iceman of this command output!")); PrintAndLogEx(INFO, "data: %s", sprint_hex(data, datalen)); @@ -384,6 +385,8 @@ static int CmdHFMFPInfo(const char *Cmd) { PrintAndLogEx(HINT, "Hint: Try " _YELLOW_("`hf mfdes info`")); DropField(); return PM3_SUCCESS; + } else if (memcmp(data, "\x6D\x00", 2) == 0) { + isPlus = false; } else { PrintAndLogEx(INFO, " result: " _GREEN_("MIFARE Plus SL0/SL3")); } From b84436caecbdc5b74038c246badd5887a2bd9555 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 30 Sep 2020 12:14:04 +0200 Subject: [PATCH 0708/1047] rename public key --- client/src/cmdhf15.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/src/cmdhf15.c b/client/src/cmdhf15.c index 76500668d..2a5f26610 100644 --- a/client/src/cmdhf15.c +++ b/client/src/cmdhf15.c @@ -381,7 +381,7 @@ static int nxp_15693_print_signature(uint8_t *uid, uint8_t *signature) { {"NXP Ultralight Ev1", "0490933BDCD6E99B4E255E3DA55389A827564E11718E017292FAF23226A96614B8"}, {"NXP NTAG21x (2013)", "04494E1A386D3D3CFE3DC10E5DE68A499B1C202DB5B132393E89ED19FE5BE8BC61"}, {"MIKRON Public key", "04f971eda742a4a80d32dcf6a814a707cc3dc396d35902f72929fdcd698b3468f2"}, - {"Spark1 Public key", "04d64bb732c0d214e7ec580736acf847284b502c25c0f7f2fa86aace1dada4387a"}, + {"VivoKey Spark1 Public key", "04d64bb732c0d214e7ec580736acf847284b502c25c0f7f2fa86aace1dada4387a"}, }; /* uint8_t nxp_15693_public_keys[][PUBLIC_ECDA_KEYLEN] = { From 6d62eb88d064a8fdb8958cb69056902df3ae96e0 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 30 Sep 2020 12:18:26 +0200 Subject: [PATCH 0709/1047] remove missleading msg --- client/src/cmdhf14b.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/client/src/cmdhf14b.c b/client/src/cmdhf14b.c index 32164654b..9609cb032 100644 --- a/client/src/cmdhf14b.c +++ b/client/src/cmdhf14b.c @@ -164,7 +164,6 @@ static bool waitCmd14b(bool verbose) { (crc) ? _GREEN_("ok") : _RED_("fail") ); } else if (len == 0) { - PrintAndLogEx(SUCCESS, "received SOF only (maybe iCLASS/Picopass)"); } else { PrintAndLogEx(SUCCESS, "len %u | %s", len, sprint_hex(data, len)); } @@ -779,18 +778,17 @@ static bool HF14B_Std_Reader(bool verbose) { PacketResponseNG resp; SendCommandMIX(CMD_HF_ISO14443B_COMMAND, ISO14B_CONNECT | ISO14B_SELECT_STD | ISO14B_DISCONNECT, 0, 0, NULL, 0); - if (!WaitForResponseTimeout(CMD_HF_ISO14443B_COMMAND, &resp, TIMEOUT)) { + if (WaitForResponseTimeout(CMD_HF_ISO14443B_COMMAND, &resp, TIMEOUT) == false) { if (verbose) PrintAndLogEx(WARNING, "command execution timeout"); return false; } - iso14b_card_select_t card; - memcpy(&card, (iso14b_card_select_t *)resp.data.asBytes, sizeof(iso14b_card_select_t)); - int status = resp.oldarg[0]; switch (status) { - case 0: + case 0: { + iso14b_card_select_t card; + memcpy(&card, (iso14b_card_select_t *)resp.data.asBytes, sizeof(iso14b_card_select_t)); PrintAndLogEx(NORMAL, ""); PrintAndLogEx(SUCCESS, " UID : " _GREEN_("%s"), sprint_hex(card.uid, card.uidlen)); PrintAndLogEx(SUCCESS, " ATQB : %s", sprint_hex(card.atqb, sizeof(card.atqb))); @@ -798,15 +796,19 @@ static bool HF14B_Std_Reader(bool verbose) { print_atqb_resp(card.atqb, card.cid); is_success = true; break; - case -1: + } + case -1: { if (verbose) PrintAndLogEx(FAILED, "ISO 14443-3 ATTRIB fail"); break; - case -2: + } + case -2: { if (verbose) PrintAndLogEx(FAILED, "ISO 14443-3 CRC fail"); break; - default: + } + default: { if (verbose) PrintAndLogEx(FAILED, "ISO 14443-b card select failed"); break; + } } return is_success; } From c3c59e35cbf6687edd548c383ae8c60495f96731 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Wed, 30 Sep 2020 14:27:19 +0200 Subject: [PATCH 0710/1047] make style --- armsrc/BigBuf.c | 2 +- armsrc/epa.c | 8 +- armsrc/hitag2.c | 2 +- armsrc/lfops.c | 2 +- armsrc/lfsampling.c | 2 +- client/deps/cliparser/cliparser.c | 34 +- client/lualibs/commands.lua | 6 +- client/luascripts/hf_14b_calypso.lua | 8 +- client/src/cmddata.c | 2 +- client/src/cmdhf14b.c | 60 +- client/src/cmdhf15.c | 10 +- client/src/cmdhfmf.c | 2 +- client/src/cmdhfmfdes.c | 10 +- client/src/cmdhfmfp.c | 12 +- client/src/cmdhfmfu.c | 6 +- client/src/cmdhfst.c | 172 ++-- client/src/cmdhfwaveshare.c | 122 +-- client/src/cmdhw.c | 2 +- client/src/cmdlft55xx.c | 108 +-- client/src/cmdparser.c | 2 +- client/src/proxguiqt.cpp | 12 +- common/commonutil.c | 10 +- common/generator.c | 4 +- common/lz4/lz4.c | 1159 ++++++++++++------------- common/lz4/lz4.h | 94 +- common/lz4/lz4hc.c | 1203 +++++++++++++------------- common/lz4/lz4hc.h | 106 ++- 27 files changed, 1570 insertions(+), 1590 deletions(-) diff --git a/armsrc/BigBuf.c b/armsrc/BigBuf.c index 733f8c7f9..c7c370047 100644 --- a/armsrc/BigBuf.c +++ b/armsrc/BigBuf.c @@ -297,7 +297,7 @@ void tosend_stuffbit(int b) { Dbprintf(_RED_("toSend overflow")); return; } - + if (toSend.bit >= 8) { toSend.max++; toSend.buf[toSend.max] = 0; diff --git a/armsrc/epa.c b/armsrc/epa.c index 899172164..dd7dfb57d 100644 --- a/armsrc/epa.c +++ b/armsrc/epa.c @@ -225,10 +225,10 @@ int EPA_Read_CardAccess(uint8_t *buffer, size_t max_length) { // select the file EF.CardAccess int rapdu_length = EPA_APDU((uint8_t *)apdu_select_binary_cardaccess, - sizeof(apdu_select_binary_cardaccess), - response_apdu, - sizeof(response_apdu) - ); + sizeof(apdu_select_binary_cardaccess), + response_apdu, + sizeof(response_apdu) + ); if (rapdu_length < 6 || response_apdu[rapdu_length - 4] != 0x90 diff --git a/armsrc/hitag2.c b/armsrc/hitag2.c index 1405e27ba..66b3f4573 100644 --- a/armsrc/hitag2.c +++ b/armsrc/hitag2.c @@ -1748,7 +1748,7 @@ void WriterHitag(hitag_function htf, hitag_data *htd, int page) { // init as reader lf_init(true, false); FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); - + // Tag specific configuration settings (sof, timings, etc.) // TODO HTS /* if (htf <= HTS_LAST_CMD) { diff --git a/armsrc/lfops.c b/armsrc/lfops.c index 324f8ae0e..b68e54bbc 100644 --- a/armsrc/lfops.c +++ b/armsrc/lfops.c @@ -465,7 +465,7 @@ void ModThenAcquireRawAdcSamples125k(uint32_t delay_off, uint16_t period_0, uint } else if (*command == '1') { TurnReadLFOn(period_1); } else { - for (uint8_t i=0; i < LF_CMDREAD_MAX_EXTRA_SYMBOLS; i++) { + for (uint8_t i = 0; i < LF_CMDREAD_MAX_EXTRA_SYMBOLS; i++) { if (*command == symbol_extra[i]) { TurnReadLFOn(period_extra[i]); break; diff --git a/armsrc/lfsampling.c b/armsrc/lfsampling.c index 7b38bd346..d31342ac0 100644 --- a/armsrc/lfsampling.c +++ b/armsrc/lfsampling.c @@ -332,7 +332,7 @@ uint32_t DoAcquisition(uint8_t decimation, uint8_t bits_per_sample, bool avg, in if (verbose) { if (checked == -1) { Dbprintf("lf sampling aborted"); - } else if ((cancel_counter == cancel_after) && (cancel_after > 0)){ + } else if ((cancel_counter == cancel_after) && (cancel_after > 0)) { Dbprintf("lf sampling cancelled after %u", cancel_counter); } diff --git a/client/deps/cliparser/cliparser.c b/client/deps/cliparser/cliparser.c index 077e5038f..042dae99d 100644 --- a/client/deps/cliparser/cliparser.c +++ b/client/deps/cliparser/cliparser.c @@ -55,7 +55,7 @@ int CLIParserParseArg(CLIParserContext *ctx, int argc, char **argv, void *vargta /* verify the argtable[] entries were allocated sucessfully */ if (arg_nullcheck(ctx->argtable) != 0) { /* NULL entries were detected, some allocations must have failed */ - PrintAndLogEx(ERR,"ERROR: Insufficient memory\n"); + PrintAndLogEx(ERR, "ERROR: Insufficient memory\n"); fflush(stdout); return 2; } @@ -65,48 +65,48 @@ int CLIParserParseArg(CLIParserContext *ctx, int argc, char **argv, void *vargta /* special case: '--help' takes precedence over error reporting */ if ((argc < 2 && !allowEmptyExec) || ((struct arg_lit *)(ctx->argtable)[0])->count > 0) { // help must be the first record if (ctx->programHint) - PrintAndLogEx(NORMAL,"\n"_DescriptionColor_("%s"), ctx->programHint); + PrintAndLogEx(NORMAL, "\n"_DescriptionColor_("%s"), ctx->programHint); - PrintAndLogEx(NORMAL,"\n"_SectionTagColor_("usage:")); - PrintAndLogEx (NORMAL," "_CommandColor_("%s")NOLF, ctx->programName); + PrintAndLogEx(NORMAL, "\n"_SectionTagColor_("usage:")); + PrintAndLogEx(NORMAL, " "_CommandColor_("%s")NOLF, ctx->programName); arg_print_syntaxv(stdout, ctx->argtable, "\n\n"); - PrintAndLogEx(NORMAL,_SectionTagColor_("options:")); + PrintAndLogEx(NORMAL, _SectionTagColor_("options:")); arg_print_glossary(stdout, ctx->argtable, " "_ArgColor_("%-30s")" "_ArgHelpColor_("%s")"\n"); - PrintAndLogEx(NORMAL,""); + PrintAndLogEx(NORMAL, ""); if (ctx->programHelp) { - PrintAndLogEx(NORMAL,_SectionTagColor_("examples/notes:")); + PrintAndLogEx(NORMAL, _SectionTagColor_("examples/notes:")); char *buf = NULL; int idx = 0; - buf = realloc (buf,strlen (ctx->programHelp)+1); // more then enough as we are splitting + buf = realloc(buf, strlen(ctx->programHelp) + 1); // more then enough as we are splitting char *p2; // pointer to split example from comment. int egWidth = 30; - for (int i = 0; i <= strlen (ctx->programHelp); i++) { // <= so to get string terminator. + for (int i = 0; i <= strlen(ctx->programHelp); i++) { // <= so to get string terminator. buf[idx++] = ctx->programHelp[i]; if ((ctx->programHelp[i] == '\n') || (ctx->programHelp[i] == 0x00)) { - buf[idx-1] = 0x00; - p2 = strstr(buf,"->"); // See if the example has a comment. + buf[idx - 1] = 0x00; + p2 = strstr(buf, "->"); // See if the example has a comment. if (p2 != NULL) { - *(p2-1) = 0x00; + *(p2 - 1) = 0x00; if (strlen(buf) > 28) egWidth = strlen(buf) + 5; else egWidth = 30; - PrintAndLogEx(NORMAL," "_ExampleColor_("%-*s")" %s", egWidth, buf, p2); + PrintAndLogEx(NORMAL, " "_ExampleColor_("%-*s")" %s", egWidth, buf, p2); } else { - PrintAndLogEx(NORMAL," "_ExampleColor_("%-*s"), egWidth, buf); + PrintAndLogEx(NORMAL, " "_ExampleColor_("%-*s"), egWidth, buf); } idx = 0; } } - PrintAndLogEx(NORMAL,""); - free (buf); + PrintAndLogEx(NORMAL, ""); + free(buf); } fflush(stdout); @@ -117,7 +117,7 @@ int CLIParserParseArg(CLIParserContext *ctx, int argc, char **argv, void *vargta if (nerrors > 0) { /* Display the error details contained in the arg_end struct.*/ arg_print_errors(stdout, ((struct arg_end *)(ctx->argtable)[vargtableLen - 1]), ctx->programName); - PrintAndLogEx(WARNING,"Try '%s --help' for more information.\n", ctx->programName); + PrintAndLogEx(WARNING, "Try '%s --help' for more information.\n", ctx->programName); fflush(stdout); return 3; } diff --git a/client/lualibs/commands.lua b/client/lualibs/commands.lua index 440118fb6..dbbc3b131 100644 --- a/client/lualibs/commands.lua +++ b/client/lualibs/commands.lua @@ -130,13 +130,13 @@ function Command:sendMIX( ignore_response, timeout, use_cmd_ack) if timeout == nil then timeout = TIMEOUT end local data = self.data local cmd = self.cmd - local arg1, arg2, arg3 = self.arg1, self.arg2, self.arg3 + local arg1, arg2, arg3 = self.arg1, self.arg2, self.arg3 local err, msg = core.SendCommandMIX(cmd, arg1, arg2, arg3, data) if err == nil then return err, msg end if ignore_response then return true, nil end - - local ack = _commands.CMD_ACK + + local ack = _commands.CMD_ACK if use_cmd_ack then ack = cmd end diff --git a/client/luascripts/hf_14b_calypso.lua b/client/luascripts/hf_14b_calypso.lua index c821848d0..6fa40711e 100644 --- a/client/luascripts/hf_14b_calypso.lua +++ b/client/luascripts/hf_14b_calypso.lua @@ -30,10 +30,10 @@ device-side. ]] local function calypso_parse(result) - local r = Command.parse(result) + local r = Command.parse(result) if r.arg1 >= 0 then local len = r.arg2 * 2 - if len > 0 then + if len > 0 then r.data = string.sub(r.data, 0, len); return r, nil end @@ -130,7 +130,7 @@ local function calypso_send_cmd_raw(data, ignoreresponse ) local count,cmd,arg0,arg1,arg2 = bin.unpack('LLLL', result) if arg0 >= 0 then return calypso_parse(result) - else + else err = 'card response failed' end else @@ -254,7 +254,7 @@ function main(args) if err then print('<< '..err) else - if result then + if result then local status, desc, err = calypso_apdu_status(result.data) local d = result.data:sub(3, (#result.data - 8)) if status then diff --git a/client/src/cmddata.c b/client/src/cmddata.c index 34574a72f..ffa6785b4 100644 --- a/client/src/cmddata.c +++ b/client/src/cmddata.c @@ -660,7 +660,7 @@ static int Cmdaskmandemod(const char *Cmd) { Cmd++; } else if (Cmd[1] == 's') { st = true; - Cmd+=2; + Cmd += 2; } int clk = 0; int invert = 0; diff --git a/client/src/cmdhf14b.c b/client/src/cmdhf14b.c index 9609cb032..51558bcd4 100644 --- a/client/src/cmdhf14b.c +++ b/client/src/cmdhf14b.c @@ -19,7 +19,7 @@ #include "crc16.h" #include "cmdhf14a.h" #include "protocols.h" // definitions of ISO14B/7816 protocol -#include "emv/apduinfo.h" // GetAPDUCodeDescription +#include "emv/apduinfo.h" // GetAPDUCodeDescription #include "mifare/ndef.h" // NDEFRecordsDecodeAndPrint #define TIMEOUT 2000 @@ -137,7 +137,7 @@ static int switch_off_field_14b(void) { static uint16_t get_sw(uint8_t *d, uint8_t n) { if (n < 2) return 0; - + n -= 2; return d[n] * 0x0100 + d[n + 1]; } @@ -453,7 +453,7 @@ static char *get_st_lock_info(uint8_t model, uint8_t *lockbytes, uint8_t blk) { case 0x3: // SRIx4K case 0x7: { // SRI4K //only need data[3] - switch(blk) { + switch (blk) { case 7: case 8: mask = 0x01; @@ -492,7 +492,7 @@ static char *get_st_lock_info(uint8_t model, uint8_t *lockbytes, uint8_t blk) { case 0xC: { // SRT512 //need data[2] and data[3] uint8_t b = 1; - switch(blk) { + switch (blk) { case 0: mask = 0x01; break; @@ -557,7 +557,7 @@ static char *get_st_lock_info(uint8_t model, uint8_t *lockbytes, uint8_t blk) { } case 0x2: { // SR176 //need data[2] - switch(blk) { + switch (blk) { case 0: case 1: mask = 0x1; @@ -590,17 +590,17 @@ static char *get_st_lock_info(uint8_t model, uint8_t *lockbytes, uint8_t blk) { case 15: mask = 0x80; break; - } + } // iceman: this is opposite! need sample to test with. if ((lockbytes[0] & mask)) { sprintf(s, _RED_("1")); - } + } return s; } default: break; } - return s; + return s; } static uint8_t get_st_chipid(uint8_t *uid) { @@ -609,8 +609,8 @@ static uint8_t get_st_chipid(uint8_t *uid) { static uint8_t get_st_cardsize(uint8_t *uid) { uint8_t chipid = get_st_chipid(uid); - switch(chipid) { - case 0x0: + switch (chipid) { + case 0x0: case 0x3: case 0x7: return 1; @@ -777,7 +777,7 @@ static bool HF14B_Std_Reader(bool verbose) { clearCommandBuffer(); PacketResponseNG resp; SendCommandMIX(CMD_HF_ISO14443B_COMMAND, ISO14B_CONNECT | ISO14B_SELECT_STD | ISO14B_DISCONNECT, 0, 0, NULL, 0); - + if (WaitForResponseTimeout(CMD_HF_ISO14443B_COMMAND, &resp, TIMEOUT) == false) { if (verbose) PrintAndLogEx(WARNING, "command execution timeout"); return false; @@ -828,7 +828,7 @@ static bool HF14B_Other_Reader(bool verbose) { if (!WaitForResponseTimeout(CMD_HF_ISO14443B_COMMAND, &resp, TIMEOUT)) { if (verbose) PrintAndLogEx(WARNING, "command execution timeout"); - switch_off_field_14b(); + switch_off_field_14b(); return false; } int status = resp.oldarg[0]; @@ -852,7 +852,7 @@ static bool HF14B_Other_Reader(bool verbose) { SendCommandMIX(CMD_HF_ISO14443B_COMMAND, flags, 1, 0, data, 1); if (!WaitForResponseTimeout(CMD_HF_ISO14443B_COMMAND, &resp, TIMEOUT)) { if (verbose) PrintAndLogEx(WARNING, "command execution timeout"); - switch_off_field_14b(); + switch_off_field_14b(); return false; } status = resp.oldarg[0]; @@ -876,7 +876,7 @@ static bool HF14B_Other_Reader(bool verbose) { SendCommandMIX(CMD_HF_ISO14443B_COMMAND, flags, 1, 0, data, 1); if (!WaitForResponseTimeout(CMD_HF_ISO14443B_COMMAND, &resp, TIMEOUT)) { if (verbose) PrintAndLogEx(WARNING, "command execution timeout"); - switch_off_field_14b(); + switch_off_field_14b(); return false; } status = resp.oldarg[0]; @@ -1049,12 +1049,12 @@ static int CmdHF14BDump(const char *Cmd) { FillFileNameByUID(fptr, SwapEndian64(card.uid, card.uidlen, 8), "-dump", card.uidlen); } - uint8_t chipid = get_st_chipid(card.uid); + uint8_t chipid = get_st_chipid(card.uid); PrintAndLogEx(SUCCESS, "Found a " _GREEN_("%s") " tag", get_ST_Chip_Model(chipid)); // detect blocksize from card :) PrintAndLogEx(INFO, "Reading memory from tag UID " _GREEN_("%s"), sprint_hex_inrow(SwapEndian64(card.uid, card.uidlen, 8), card.uidlen)); - + uint8_t data[cardsize]; memset(data, 0, sizeof(data)); uint8_t *recv = NULL; @@ -1142,15 +1142,15 @@ static int CmdHF14BDump(const char *Cmd) { sprint_ascii(data + (i * 4), 4) ); } - + PrintAndLogEx(INFO, - "%3d/0x%02X | %s | %s | %s", - 0xFF, - 0xFF, - sprint_hex(data + (0xFF * 4), 4), - get_st_lock_info(chipid, data + (blocknum * 4), 0xFF), - sprint_ascii(data + (0xFF * 4), 4) - ); + "%3d/0x%02X | %s | %s | %s", + 0xFF, + 0xFF, + sprint_hex(data + (0xFF * 4), 4), + get_st_lock_info(chipid, data + (blocknum * 4), 0xFF), + sprint_ascii(data + (0xFF * 4), 4) + ); PrintAndLogEx(INFO, "---------+--------------+---+----------"); PrintAndLogEx(NORMAL, ""); @@ -1279,10 +1279,10 @@ static int CmdHF14BNdef(const char *Cmd) { uint8_t response[PM3_CMD_DATA_SIZE]; int resplen = 0; - // --------------- Select NDEF Tag application ---------------- + // --------------- Select NDEF Tag application ---------------- uint8_t aSELECT_AID[80]; int aSELECT_AID_n = 0; - param_gethex_to_eol("00a4040007d276000085010100", 0, aSELECT_AID, sizeof(aSELECT_AID), &aSELECT_AID_n); + param_gethex_to_eol("00a4040007d276000085010100", 0, aSELECT_AID, sizeof(aSELECT_AID), &aSELECT_AID_n); int res = 0; // int res = ExchangeAPDU14a(aSELECT_AID, aSELECT_AID_n, activate_field, keep_field_on, response, sizeof(response), &resplen); if (res) @@ -1301,11 +1301,11 @@ static int CmdHF14BNdef(const char *Cmd) { // keep_field_on = true; // --------------- Send CC select ---------------- // --------------- Read binary ---------------- - + // --------------- NDEF file reading ---------------- uint8_t aSELECT_FILE_NDEF[30]; int aSELECT_FILE_NDEF_n = 0; - param_gethex_to_eol("00a4000c020001", 0, aSELECT_FILE_NDEF, sizeof(aSELECT_FILE_NDEF), &aSELECT_FILE_NDEF_n); + param_gethex_to_eol("00a4000c020001", 0, aSELECT_FILE_NDEF, sizeof(aSELECT_FILE_NDEF), &aSELECT_FILE_NDEF_n); // res = ExchangeAPDU14a(aSELECT_FILE_NDEF, aSELECT_FILE_NDEF_n, activate_field, keep_field_on, response, sizeof(response), &resplen); if (res) return res; @@ -1319,7 +1319,7 @@ static int CmdHF14BNdef(const char *Cmd) { // --------------- Read binary ---------------- uint8_t aREAD_NDEF[30]; int aREAD_NDEF_n = 0; - param_gethex_to_eol("00b0000002", 0, aREAD_NDEF, sizeof(aREAD_NDEF), &aREAD_NDEF_n); + param_gethex_to_eol("00b0000002", 0, aREAD_NDEF, sizeof(aREAD_NDEF), &aREAD_NDEF_n); // res = ExchangeAPDU14a(aREAD_NDEF, aREAD_NDEF_n, activate_field, keep_field_on, response, sizeof(response), &resplen); if (res) return res; @@ -1381,7 +1381,7 @@ int CmdHF14B(const char *Cmd) { int infoHF14B(bool verbose) { // try std 14b (atqb) - if (HF14B_Std_Info(verbose)) + if (HF14B_Std_Info(verbose)) return 1; // try ST 14b diff --git a/client/src/cmdhf15.c b/client/src/cmdhf15.c index 2a5f26610..ca08b575b 100644 --- a/client/src/cmdhf15.c +++ b/client/src/cmdhf15.c @@ -431,7 +431,7 @@ static int nxp_15693_print_signature(uint8_t *uid, uint8_t *signature) { for (i = 0; i < sizeof(revsign); i++) { revsign[i] = signature[31 - i]; } - + int reason = 0; bool is_valid = false; for (i = 0; i < ARRAYLEN(nxp_15693_public_keys); i++) { @@ -446,7 +446,7 @@ static int nxp_15693_print_signature(uint8_t *uid, uint8_t *signature) { reason = 1; break; } - + // try with sha256 res = ecdsa_signature_r_s_verify(MBEDTLS_ECP_DP_SECP128R1, key, uid, 8, signature, 32, true); is_valid = (res == 0); @@ -463,7 +463,7 @@ static int nxp_15693_print_signature(uint8_t *uid, uint8_t *signature) { break; } - + // try with sha256 res = ecdsa_signature_r_s_verify(MBEDTLS_ECP_DP_SECP128R1, key, revuid, sizeof(revuid), revsign, sizeof(revsign), true); is_valid = (res == 0); @@ -487,7 +487,7 @@ static int nxp_15693_print_signature(uint8_t *uid, uint8_t *signature) { PrintAndLogEx(INFO, " Elliptic curve parameters: NID_secp128r1"); PrintAndLogEx(INFO, " TAG IC Signature: %s", sprint_hex_inrow(signature, 32)); PrintAndLogEx(SUCCESS, " Signature verification: " _GREEN_("successful")); - switch(reason) { + switch (reason) { case 1: PrintAndLogEx(INFO, " Params used: UID and signature, plain"); break; @@ -497,7 +497,7 @@ static int nxp_15693_print_signature(uint8_t *uid, uint8_t *signature) { case 3: PrintAndLogEx(INFO, " Params used: reversed UID and signature, plain"); break; - case 4: + case 4: PrintAndLogEx(INFO, " Params used: reversed UID and signature, SHA256"); break; } diff --git a/client/src/cmdhfmf.c b/client/src/cmdhfmf.c index 4b822c148..a06c7a3ae 100644 --- a/client/src/cmdhfmf.c +++ b/client/src/cmdhfmf.c @@ -5271,7 +5271,7 @@ static command_t CommandTable[] = { {"ecfill", CmdHF14AMfECFill, IfPm3Iso14443a, "Fill simulator memory with help of keys from simulator"}, {"eclr", CmdHF14AMfEClear, IfPm3Iso14443a, "Clear simulator memory"}, {"egetblk", CmdHF14AMfEGetBlk, IfPm3Iso14443a, "Get simulator memory block"}, - {"egetsc", CmdHF14AMfEGetSc, IfPm3Iso14443a, "Get simulator memory sector"}, + {"egetsc", CmdHF14AMfEGetSc, IfPm3Iso14443a, "Get simulator memory sector"}, {"ekeyprn", CmdHF14AMfEKeyPrn, IfPm3Iso14443a, "Print keys from simulator memory"}, {"eload", CmdHF14AMfELoad, IfPm3Iso14443a, "Load from file emul dump"}, {"esave", CmdHF14AMfESave, IfPm3Iso14443a, "Save to file emul dump"}, diff --git a/client/src/cmdhfmfdes.c b/client/src/cmdhfmfdes.c index 559465956..d43df03a4 100644 --- a/client/src/cmdhfmfdes.c +++ b/client/src/cmdhfmfdes.c @@ -653,7 +653,7 @@ static nxp_cardtype_t getCardType(uint8_t major, uint8_t minor) { return DESFIRE_EV3; if (major == 0x30 && minor == 0x00) return DESFIRE_LIGHT; - if (major == 0x11 && minor == 0x00) + if (major == 0x11 && minor == 0x00) return PLUS_EV1; if (major == 0x10 && minor == 0x00) return NTAG413DNA; @@ -3319,10 +3319,10 @@ static int CmdHF14ADesInfo(const char *Cmd) { if (major == 0 && minor == 2) PrintAndLogEx(INFO, "\t0.2 - DESFire Light, Originality check, "); - if (cardtype == DESFIRE_EV2 || - cardtype == DESFIRE_LIGHT || - cardtype == DESFIRE_EV3 || - cardtype == NTAG413DNA) { + if (cardtype == DESFIRE_EV2 || + cardtype == DESFIRE_LIGHT || + cardtype == DESFIRE_EV3 || + cardtype == NTAG413DNA) { // Signature originality check uint8_t signature[56] = {0}; size_t signature_len = 0; diff --git a/client/src/cmdhfmfp.c b/client/src/cmdhfmfp.c index a405ceb08..e72799bc4 100644 --- a/client/src/cmdhfmfp.c +++ b/client/src/cmdhfmfp.c @@ -371,16 +371,16 @@ static int CmdHFMFPInfo(const char *Cmd) { int res = ExchangeRAW14a(cmd, sizeof(cmd), true, false, data, sizeof(data), &datalen, false); // DESFire answers 0x1C or 67 00 - // Plus answers 0x0B, 0x09, 0x06 - // Which tag answers 6D 00 ?? - if ( data[0] != 0x0b && data[0] != 0x09 && data[0] != 0x1C && data[0] != 0x67) { + // Plus answers 0x0B, 0x09, 0x06 + // Which tag answers 6D 00 ?? + if (data[0] != 0x0b && data[0] != 0x09 && data[0] != 0x1C && data[0] != 0x67) { PrintAndLogEx(INFO, _RED_("Send copy to iceman of this command output!")); PrintAndLogEx(INFO, "data: %s", sprint_hex(data, datalen)); } - + if ((memcmp(data, "\x67\x00", 2) == 0) || - (memcmp(data, "\x1C\x83\x0C", 3) == 0) - ) { + (memcmp(data, "\x1C\x83\x0C", 3) == 0) + ) { PrintAndLogEx(INFO, " result: " _RED_("MIFARE DESFire")); PrintAndLogEx(HINT, "Hint: Try " _YELLOW_("`hf mfdes info`")); DropField(); diff --git a/client/src/cmdhfmfu.c b/client/src/cmdhfmfu.c index 58099b8da..0e242a029 100644 --- a/client/src/cmdhfmfu.c +++ b/client/src/cmdhfmfu.c @@ -814,7 +814,7 @@ static int ulev1_print_configuration(uint32_t tagtype, uint8_t *data, uint8_t st break; } // valid mirror start page and byte position within start page. - if ((tagtype & NTAG_213_F)||(tagtype & NTAG_213_TT)) { + if ((tagtype & NTAG_213_F) || (tagtype & NTAG_213_TT)) { switch (mirror_conf) { case 1: { PrintAndLogEx(INFO, " mirror start block %02X | byte pos %02X - %s", data[2], mirror_byte, (data[2] >= 0x4 && data[2] <= 0x24) ? "OK" : "Invalid value"); break;} @@ -1116,7 +1116,7 @@ uint32_t GetHF14AMfU_Type(void) { else if (memcmp(version, "\x00\x04\x04\x01\x01\x00\x0B", 7) == 0) { tagtype = NTAG_210; break; } else if (memcmp(version, "\x00\x04\x04\x01\x01\x00\x0E", 7) == 0) { tagtype = NTAG_212; break; } else if (memcmp(version, "\x00\x04\x04\x02\x01\x00\x0F", 7) == 0) { tagtype = NTAG_213; break; } - else if (memcmp(version, "\x00\x04\x04\x02\x01\x01\x0F", 7) == 0) { tagtype = NTAG_213_C; break; } + else if (memcmp(version, "\x00\x04\x04\x02\x01\x01\x0F", 7) == 0) { tagtype = NTAG_213_C; break; } else if (memcmp(version, "\x00\x04\x04\x02\x01\x00\x11", 7) == 0) { tagtype = NTAG_215; break; } else if (memcmp(version, "\x00\x04\x04\x02\x01\x00\x13", 7) == 0) { tagtype = NTAG_216; break; } else if (memcmp(version, "\x00\x04\x04\x04\x01\x00\x0F", 7) == 0) { tagtype = NTAG_213_F; break; } @@ -1466,7 +1466,7 @@ static int CmdHF14AMfUInfo(const char *Cmd) { if (ul_auth_select(&card, tagtype, hasAuthKey, authkeyptr, pack, sizeof(pack)) == PM3_ESOFT) return PM3_ESOFT; } } - if (len < 1) { + if (len < 1) { PrintAndLogEx(WARNING, _YELLOW_("password not known")); PrintAndLogEx(HINT, "Hint: try " _YELLOW_("`hf mfu pwdgen r`") " to get see known pwd gen algo suggestions"); } diff --git a/client/src/cmdhfst.c b/client/src/cmdhfst.c index acb6ee361..8308df9b1 100644 --- a/client/src/cmdhfst.c +++ b/client/src/cmdhfst.c @@ -17,7 +17,7 @@ #include "crc16.h" #include "cmdhf14a.h" #include "protocols.h" // definitions of ISO14A/7816 protocol -#include "emv/apduinfo.h" // GetAPDUCodeDescription +#include "emv/apduinfo.h" // GetAPDUCodeDescription #include "mifare/ndef.h" // NDEFRecordsDecodeAndPrint #define TIMEOUT 2000 @@ -116,7 +116,7 @@ static char *get_st_chip_model(uint8_t pc) { case 0xE3: sprintf(s, "ST25TA02KB"); break; - case 0xE4: + case 0xE4: sprintf(s, "ST25TA512B"); break; case 0xA3: @@ -150,19 +150,19 @@ static void print_st_cc_info(uint8_t *d, uint8_t n) { PrintAndLogEx(NORMAL, ""); PrintAndLogEx(SUCCESS, "------------ " _CYAN_("Capability Container file") " ------------"); - PrintAndLogEx(SUCCESS, " len %u bytes (" _GREEN_("0x%02X") ")", d[1],d[1]); + PrintAndLogEx(SUCCESS, " len %u bytes (" _GREEN_("0x%02X") ")", d[1], d[1]); PrintAndLogEx(SUCCESS, " version %s (" _GREEN_("0x%02X") ")", (d[2] == 0x20) ? "v2.0" : "v1.0", d[2]); - uint16_t maxr = (d[3] << 8 | d[4]); + uint16_t maxr = (d[3] << 8 | d[4]); PrintAndLogEx(SUCCESS, " max bytes read %u bytes ( 0x%04X )", maxr, maxr); - uint16_t maxw = (d[5] << 8 | d[6]); + uint16_t maxw = (d[5] << 8 | d[6]); PrintAndLogEx(SUCCESS, " max bytes write %u bytes ( 0x%04X )", maxw, maxw); PrintAndLogEx(NORMAL, ""); PrintAndLogEx(SUCCESS, " NDEF file control TLV {"); PrintAndLogEx(SUCCESS, " (t) type of file ( %02X )", d[7]); PrintAndLogEx(SUCCESS, " (v) ( %02X )", d[8]); PrintAndLogEx(SUCCESS, " file id ( %02X%02X )", d[9], d[10]); - + uint16_t maxndef = (d[11] << 8 | d[12]); PrintAndLogEx(SUCCESS, " max NDEF filesize %u bytes ( 0x%04X )", maxndef, maxndef); PrintAndLogEx(SUCCESS, " ----- " _CYAN_("access rights") " -------"); @@ -178,11 +178,11 @@ static void print_st_system_info(uint8_t *d, uint8_t n) { PrintAndLogEx(WARNING, "Not enought bytes read from system file"); return; } - + PrintAndLogEx(NORMAL, ""); - PrintAndLogEx(SUCCESS, "------------ " _CYAN_("ST System file") " ------------"); - - uint16_t len = (d[0] << 8 | d[1]); + PrintAndLogEx(SUCCESS, "------------ " _CYAN_("ST System file") " ------------"); + + uint16_t len = (d[0] << 8 | d[1]); PrintAndLogEx(SUCCESS, " len %u bytes (" _GREEN_("0x%04X") ")", len, len); if (d[2] == 0x80) { @@ -191,29 +191,29 @@ static void print_st_system_info(uint8_t *d, uint8_t n) { PrintAndLogEx(SUCCESS, " GPO Config ( 0x%02X )", d[2]); PrintAndLogEx(SUCCESS, " config lock bit ( %s )", ((d[2] & 0x80) == 0x80) ? _RED_("locked") : _GREEN_("unlocked")); uint8_t conf = (d[2] & 0x70) >> 4; - switch(conf) { - case 0: + switch (conf) { + case 0: PrintAndLogEx(SUCCESS, ""); break; - case 1: + case 1: PrintAndLogEx(SUCCESS, "Session opened"); - break; - case 2: + break; + case 2: PrintAndLogEx(SUCCESS, "WIP"); break; - case 3: + case 3: PrintAndLogEx(SUCCESS, "MIP"); break; - case 4: + case 4: PrintAndLogEx(SUCCESS, "Interrupt"); break; - case 5: + case 5: PrintAndLogEx(SUCCESS, "State Control"); break; - case 6: + case 6: PrintAndLogEx(SUCCESS, "RF Busy"); break; - case 7: + case 7: PrintAndLogEx(SUCCESS, "Field Detect"); break; } @@ -224,25 +224,25 @@ static void print_st_system_info(uint8_t *d, uint8_t n) { PrintAndLogEx(SUCCESS, " counter ( %s )", ((d[3] & 0x02) == 0x02) ? _RED_("enabled") : _GREEN_("disable")); PrintAndLogEx(SUCCESS, " counter increment on ( %s )", ((d[3] & 0x01) == 0x01) ? _YELLOW_("write") : _YELLOW_("read")); - uint32_t counter = (d[4] << 16 | d[5] << 8 | d[6]); + uint32_t counter = (d[4] << 16 | d[5] << 8 | d[6]); PrintAndLogEx(SUCCESS, " 20bit counter ( 0x%05X )", counter & 0xFFFFF); - + PrintAndLogEx(SUCCESS, " Product version ( 0x%02X )", d[7]); - + PrintAndLogEx(SUCCESS, " UID " _GREEN_("%s"), sprint_hex_inrow(d + 8, 7)); PrintAndLogEx(SUCCESS, " MFG 0x%02X, " _YELLOW_("%s"), d[8], getTagInfo(d[8])); PrintAndLogEx(SUCCESS, " Product Code 0x%02X, " _YELLOW_("%s"), d[9], get_st_chip_model(d[9])); - PrintAndLogEx(SUCCESS, " Device# " _YELLOW_("%s"), sprint_hex_inrow(d + 10, 5)); + PrintAndLogEx(SUCCESS, " Device# " _YELLOW_("%s"), sprint_hex_inrow(d + 10, 5)); - uint16_t mem = (d[0xF] << 8 | d[0x10]); + uint16_t mem = (d[0xF] << 8 | d[0x10]); PrintAndLogEx(SUCCESS, " Memory Size - 1 %u bytes (" _GREEN_("0x%04X") ")", mem, mem); - + PrintAndLogEx(SUCCESS, " IC Reference code %u ( 0x%02X )", d[0x12], d[0x12]); PrintAndLogEx(SUCCESS, "----------------- " _CYAN_("raw") " -----------------"); PrintAndLogEx(SUCCESS, "%s", sprint_hex_inrow(d, n)); - PrintAndLogEx(NORMAL, ""); - + PrintAndLogEx(NORMAL, ""); + /* 0012 80000000001302E2007D0E8DCC @@ -252,7 +252,7 @@ static void print_st_system_info(uint8_t *d, uint8_t n) { static uint16_t get_sw(uint8_t *d, uint8_t n) { if (n < 2) return 0; - + n -= 2; return d[n] * 0x0100 + d[n + 1]; } @@ -265,10 +265,10 @@ int infoHF_ST(void) { uint8_t response[PM3_CMD_DATA_SIZE]; int resplen = 0; - // --------------- Select NDEF Tag application ---------------- + // --------------- Select NDEF Tag application ---------------- uint8_t aSELECT_AID[80]; int aSELECT_AID_n = 0; - param_gethex_to_eol("00a4040007d276000085010100", 0, aSELECT_AID, sizeof(aSELECT_AID), &aSELECT_AID_n); + param_gethex_to_eol("00a4040007d276000085010100", 0, aSELECT_AID, sizeof(aSELECT_AID), &aSELECT_AID_n); int res = ExchangeAPDU14a(aSELECT_AID, aSELECT_AID_n, activate_field, keep_field_on, response, sizeof(response), &resplen); if (res) return res; @@ -285,10 +285,10 @@ int infoHF_ST(void) { activate_field = false; keep_field_on = true; // --------------- CC file reading ---------------- - + uint8_t aSELECT_FILE_CC[30]; int aSELECT_FILE_CC_n = 0; - param_gethex_to_eol("00a4000c02e103", 0, aSELECT_FILE_CC, sizeof(aSELECT_FILE_CC), &aSELECT_FILE_CC_n); + param_gethex_to_eol("00a4000c02e103", 0, aSELECT_FILE_CC, sizeof(aSELECT_FILE_CC), &aSELECT_FILE_CC_n); res = ExchangeAPDU14a(aSELECT_FILE_CC, aSELECT_FILE_CC_n, activate_field, keep_field_on, response, sizeof(response), &resplen); if (res) return res; @@ -298,10 +298,10 @@ int infoHF_ST(void) { PrintAndLogEx(ERR, "Selecting CC file failed (%04x - %s).", sw, GetAPDUCodeDescription(sw >> 8, sw & 0xff)); return PM3_ESOFT; } - + uint8_t aREAD_CC[30]; int aREAD_CC_n = 0; - param_gethex_to_eol("00b000000f", 0, aREAD_CC, sizeof(aREAD_CC), &aREAD_CC_n); + param_gethex_to_eol("00b000000f", 0, aREAD_CC, sizeof(aREAD_CC), &aREAD_CC_n); res = ExchangeAPDU14a(aREAD_CC, aREAD_CC_n, activate_field, keep_field_on, response, sizeof(response), &resplen); if (res) return res; @@ -315,10 +315,10 @@ int infoHF_ST(void) { print_st_cc_info(response, resplen - 2); - // --------------- System file reading ---------------- + // --------------- System file reading ---------------- uint8_t aSELECT_FILE_SYS[30]; int aSELECT_FILE_SYS_n = 0; - param_gethex_to_eol("00a4000c02e101", 0, aSELECT_FILE_SYS, sizeof(aSELECT_FILE_SYS), &aSELECT_FILE_SYS_n); + param_gethex_to_eol("00a4000c02e101", 0, aSELECT_FILE_SYS, sizeof(aSELECT_FILE_SYS), &aSELECT_FILE_SYS_n); res = ExchangeAPDU14a(aSELECT_FILE_SYS, aSELECT_FILE_SYS_n, activate_field, keep_field_on, response, sizeof(response), &resplen); if (res) return res; @@ -330,10 +330,10 @@ int infoHF_ST(void) { } keep_field_on = false; - + uint8_t aREAD_SYS[30]; int aREAD_SYS_n = 0; - param_gethex_to_eol("00b0000012", 0, aREAD_SYS, sizeof(aREAD_SYS), &aREAD_SYS_n); + param_gethex_to_eol("00b0000012", 0, aREAD_SYS, sizeof(aREAD_SYS), &aREAD_SYS_n); res = ExchangeAPDU14a(aREAD_SYS, aREAD_SYS_n, activate_field, keep_field_on, response, sizeof(response), &resplen); if (res) return res; @@ -359,17 +359,17 @@ static int cmd_hf_st_sim(const char *Cmd) { char c = tolower(param_getchar(Cmd, 0)); if (c == 'h' || c == 0x00) return usage_hf_st_sim(); - int uidlen = 0; + int uidlen = 0; uint8_t cmdp = 0; uint8_t uid[7] = {0}; if (c == 'u') { param_gethex_ex(Cmd, cmdp + 1, uid, &uidlen); uidlen >>= 1; if (uidlen != 7) { - return usage_hf_st_sim(); + return usage_hf_st_sim(); } } - + char param[40]; snprintf(param, sizeof(param), "t 10 u %s", sprint_hex_inrow(uid, uidlen)); return CmdHF14ASim(param); @@ -379,14 +379,14 @@ static int cmd_hf_st_ndef(const char *Cmd) { char c = tolower(param_getchar(Cmd, 0)); if (c == 'h' || c == 0x00) return usage_hf_st_ndef(); - int pwdlen = 0; + int pwdlen = 0; uint8_t cmdp = 0; uint8_t pwd[16] = {0}; if (c == 'p') { param_gethex_ex(Cmd, cmdp + 1, pwd, &pwdlen); pwdlen >>= 1; if (pwdlen != 16) { - return usage_hf_st_ndef(); + return usage_hf_st_ndef(); } } @@ -395,10 +395,10 @@ static int cmd_hf_st_ndef(const char *Cmd) { uint8_t response[PM3_CMD_DATA_SIZE]; int resplen = 0; - // --------------- Select NDEF Tag application ---------------- + // --------------- Select NDEF Tag application ---------------- uint8_t aSELECT_AID[80]; int aSELECT_AID_n = 0; - param_gethex_to_eol("00a4040007d276000085010100", 0, aSELECT_AID, sizeof(aSELECT_AID), &aSELECT_AID_n); + param_gethex_to_eol("00a4040007d276000085010100", 0, aSELECT_AID, sizeof(aSELECT_AID), &aSELECT_AID_n); int res = ExchangeAPDU14a(aSELECT_AID, aSELECT_AID_n, activate_field, keep_field_on, response, sizeof(response), &resplen); if (res) return res; @@ -418,7 +418,7 @@ static int cmd_hf_st_ndef(const char *Cmd) { // --------------- NDEF file reading ---------------- uint8_t aSELECT_FILE_NDEF[30]; int aSELECT_FILE_NDEF_n = 0; - param_gethex_to_eol("00a4000c020001", 0, aSELECT_FILE_NDEF, sizeof(aSELECT_FILE_NDEF), &aSELECT_FILE_NDEF_n); + param_gethex_to_eol("00a4000c020001", 0, aSELECT_FILE_NDEF, sizeof(aSELECT_FILE_NDEF), &aSELECT_FILE_NDEF_n); res = ExchangeAPDU14a(aSELECT_FILE_NDEF, aSELECT_FILE_NDEF_n, activate_field, keep_field_on, response, sizeof(response), &resplen); if (res) return res; @@ -429,7 +429,7 @@ static int cmd_hf_st_ndef(const char *Cmd) { return PM3_ESOFT; } - // --------------- VERIFY ---------------- + // --------------- VERIFY ---------------- uint8_t aVERIFY[30]; int aVERIFY_n = 0; param_gethex_to_eol("0020000100", 0, aVERIFY, sizeof(aVERIFY), &aVERIFY_n); @@ -446,17 +446,17 @@ static int cmd_hf_st_ndef(const char *Cmd) { if (res) return res; - sw = get_sw(response, resplen); + sw = get_sw(response, resplen); if (sw != 0x9000) { PrintAndLogEx(ERR, "Verify password failed (%04x - %s).", sw, GetAPDUCodeDescription(sw >> 8, sw & 0xff)); return PM3_ESOFT; } } - + keep_field_on = false; uint8_t aREAD_NDEF[30]; int aREAD_NDEF_n = 0; - param_gethex_to_eol("00b000001d", 0, aREAD_NDEF, sizeof(aREAD_NDEF), &aREAD_NDEF_n); + param_gethex_to_eol("00b000001d", 0, aREAD_NDEF, sizeof(aREAD_NDEF), &aREAD_NDEF_n); res = ExchangeAPDU14a(aREAD_NDEF, aREAD_NDEF_n, activate_field, keep_field_on, response, sizeof(response), &resplen); if (res) return res; @@ -472,23 +472,23 @@ static int cmd_hf_st_ndef(const char *Cmd) { } static int cmd_hf_st_protect(const char *Cmd) { - + uint8_t cmdp = 0; bool errors = false; int pwdlen = 0; uint8_t pwd[16] = {0}; int statelen = 3; uint8_t state[3] = {0x26, 0, 0}; - + while (param_getchar(Cmd, cmdp) != 0x00 && !errors) { switch (tolower(param_getchar(Cmd, cmdp))) { case 'h': return usage_hf_st_protect(); - case '0': + case '0': state[0] = 0x26; //Disable protection cmdp++; break; - case '1': + case '1': state[0] = 0x28; //Enable protection cmdp++; break; @@ -515,14 +515,14 @@ static int cmd_hf_st_protect(const char *Cmd) { //Validations if (state[2] == 0x00) { - PrintAndLogEx(WARNING, "Missing action (r)ead or (w)rite"); - errors = true; + PrintAndLogEx(WARNING, "Missing action (r)ead or (w)rite"); + errors = true; } if (pwdlen != 16) { - PrintAndLogEx(WARNING, "Missing 16 byte password"); - errors = true; - } - + PrintAndLogEx(WARNING, "Missing 16 byte password"); + errors = true; + } + if (errors || cmdp == 0) return usage_hf_st_protect(); bool activate_field = true; @@ -530,10 +530,10 @@ static int cmd_hf_st_protect(const char *Cmd) { uint8_t response[PM3_CMD_DATA_SIZE]; int resplen = 0; - // --------------- Select NDEF Tag application ---------------- + // --------------- Select NDEF Tag application ---------------- uint8_t aSELECT_AID[80]; int aSELECT_AID_n = 0; - param_gethex_to_eol("00a4040007d276000085010100", 0, aSELECT_AID, sizeof(aSELECT_AID), &aSELECT_AID_n); + param_gethex_to_eol("00a4040007d276000085010100", 0, aSELECT_AID, sizeof(aSELECT_AID), &aSELECT_AID_n); int res = ExchangeAPDU14a(aSELECT_AID, aSELECT_AID_n, activate_field, keep_field_on, response, sizeof(response), &resplen); if (res) return res; @@ -553,7 +553,7 @@ static int cmd_hf_st_protect(const char *Cmd) { // --------------- Select NDEF file ---------------- uint8_t aSELECT_FILE_NDEF[30]; int aSELECT_FILE_NDEF_n = 0; - param_gethex_to_eol("00a4000c020001", 0, aSELECT_FILE_NDEF, sizeof(aSELECT_FILE_NDEF), &aSELECT_FILE_NDEF_n); + param_gethex_to_eol("00a4000c020001", 0, aSELECT_FILE_NDEF, sizeof(aSELECT_FILE_NDEF), &aSELECT_FILE_NDEF_n); res = ExchangeAPDU14a(aSELECT_FILE_NDEF, aSELECT_FILE_NDEF_n, activate_field, keep_field_on, response, sizeof(response), &resplen); if (res) return res; @@ -564,7 +564,7 @@ static int cmd_hf_st_protect(const char *Cmd) { return PM3_ESOFT; } - // --------------- VERIFY ---------------- + // --------------- VERIFY ---------------- uint8_t aVERIFY[30]; int aVERIFY_n = 0; // need to provide 16byte password @@ -574,12 +574,12 @@ static int cmd_hf_st_protect(const char *Cmd) { if (res) return res; - sw = get_sw(response, resplen); + sw = get_sw(response, resplen); if (sw != 0x9000) { PrintAndLogEx(ERR, "Verify password failed (%04x - %s).", sw, GetAPDUCodeDescription(sw >> 8, sw & 0xff)); return PM3_ESOFT; } - + // --------------- Change protection ---------------- keep_field_on = false; uint8_t aPROTECT[30]; @@ -595,9 +595,9 @@ static int cmd_hf_st_protect(const char *Cmd) { PrintAndLogEx(ERR, "changing protection failed (%04x - %s).", sw, GetAPDUCodeDescription(sw >> 8, sw & 0xff)); return PM3_ESOFT; } - - PrintAndLogEx(SUCCESS, " %s protection ( %s )", ((state[2] & 0x01) == 0x01) ? _YELLOW_("read") : _YELLOW_("write"), - ((state[0] & 0x28) == 0x28) ? _RED_("enabled") : _GREEN_("disabled")); + + PrintAndLogEx(SUCCESS, " %s protection ( %s )", ((state[2] & 0x01) == 0x01) ? _YELLOW_("read") : _YELLOW_("write"), + ((state[0] & 0x28) == 0x28) ? _RED_("enabled") : _GREEN_("disabled")); return PM3_SUCCESS; } @@ -608,9 +608,9 @@ static int cmd_hf_st_pwd(const char *Cmd) { uint8_t cmdp = 0; bool errors = false; - int pwdlen = 0; + int pwdlen = 0; uint8_t pwd[16] = {0}; - int newpwdlen = 0; + int newpwdlen = 0; uint8_t newpwd[16] = {0}; int changePwdlen = 4; uint8_t changePwd[4] = {0x24, 0x00, 0x00, 0x10}; @@ -647,17 +647,17 @@ static int cmd_hf_st_pwd(const char *Cmd) { //Validations if (changePwd[2] == 0x00) { - PrintAndLogEx(WARNING, "Missing password specification: (r)ead or (w)rite"); - errors = true; + PrintAndLogEx(WARNING, "Missing password specification: (r)ead or (w)rite"); + errors = true; } if (pwdlen != 16) { - PrintAndLogEx(WARNING, "Missing original 16 byte password"); - errors = true; - } + PrintAndLogEx(WARNING, "Missing original 16 byte password"); + errors = true; + } if (newpwdlen != 16) { - PrintAndLogEx(WARNING, "Missing new 16 byte password"); - errors = true; - } + PrintAndLogEx(WARNING, "Missing new 16 byte password"); + errors = true; + } if (errors || cmdp == 0) return usage_hf_st_pwd(); bool activate_field = true; @@ -665,10 +665,10 @@ static int cmd_hf_st_pwd(const char *Cmd) { uint8_t response[PM3_CMD_DATA_SIZE]; int resplen = 0; - // --------------- Select NDEF Tag application ---------------- + // --------------- Select NDEF Tag application ---------------- uint8_t aSELECT_AID[80]; int aSELECT_AID_n = 0; - param_gethex_to_eol("00a4040007d276000085010100", 0, aSELECT_AID, sizeof(aSELECT_AID), &aSELECT_AID_n); + param_gethex_to_eol("00a4040007d276000085010100", 0, aSELECT_AID, sizeof(aSELECT_AID), &aSELECT_AID_n); int res = ExchangeAPDU14a(aSELECT_AID, aSELECT_AID_n, activate_field, keep_field_on, response, sizeof(response), &resplen); if (res) return res; @@ -688,7 +688,7 @@ static int cmd_hf_st_pwd(const char *Cmd) { // --------------- Select NDEF file ---------------- uint8_t aSELECT_FILE_NDEF[30]; int aSELECT_FILE_NDEF_n = 0; - param_gethex_to_eol("00a4000c020001", 0, aSELECT_FILE_NDEF, sizeof(aSELECT_FILE_NDEF), &aSELECT_FILE_NDEF_n); + param_gethex_to_eol("00a4000c020001", 0, aSELECT_FILE_NDEF, sizeof(aSELECT_FILE_NDEF), &aSELECT_FILE_NDEF_n); res = ExchangeAPDU14a(aSELECT_FILE_NDEF, aSELECT_FILE_NDEF_n, activate_field, keep_field_on, response, sizeof(response), &resplen); if (res) return res; @@ -699,7 +699,7 @@ static int cmd_hf_st_pwd(const char *Cmd) { return PM3_ESOFT; } - // --------------- VERIFY ---------------- + // --------------- VERIFY ---------------- uint8_t aVERIFY[30]; int aVERIFY_n = 0; // need to provide 16byte password @@ -709,7 +709,7 @@ static int cmd_hf_st_pwd(const char *Cmd) { if (res) return res; - sw = get_sw(response, resplen); + sw = get_sw(response, resplen); if (sw != 0x9000) { PrintAndLogEx(ERR, "Verify password failed (%04x - %s).", sw, GetAPDUCodeDescription(sw >> 8, sw & 0xff)); return PM3_ESOFT; @@ -720,7 +720,7 @@ static int cmd_hf_st_pwd(const char *Cmd) { keep_field_on = false; uint8_t aCHG_PWD[30]; int aCHG_PWD_n = 0; - param_gethex_to_eol("00", 0, aCHG_PWD, sizeof(aCHG_PWD), &aCHG_PWD_n); + param_gethex_to_eol("00", 0, aCHG_PWD, sizeof(aCHG_PWD), &aCHG_PWD_n); memcpy(aCHG_PWD + aCHG_PWD_n, changePwd, changePwdlen); memcpy(aCHG_PWD + aCHG_PWD_n + changePwdlen, newpwd, newpwdlen); res = ExchangeAPDU14a(aCHG_PWD, aCHG_PWD_n + changePwdlen + newpwdlen, activate_field, keep_field_on, response, sizeof(response), &resplen); diff --git a/client/src/cmdhfwaveshare.c b/client/src/cmdhfwaveshare.c index b41ecefea..dd34c046b 100644 --- a/client/src/cmdhfwaveshare.c +++ b/client/src/cmdhfwaveshare.c @@ -97,7 +97,7 @@ static int usage_hf_waveshare_loadbmp(void) { PrintAndLogEx(NORMAL, " f : " _YELLOW_("filename[.bmp]") " to upload to tag"); PrintAndLogEx(NORMAL, " m : " _YELLOW_("model number") " of your tag"); PrintAndLogEx(NORMAL, " s : save dithered version in filename-[n].bmp, only for RGB BMP"); - for (uint8_t i=0; i< MEND; i++) { + for (uint8_t i = 0; i < MEND; i++) { PrintAndLogEx(NORMAL, " m %2i : %s", i, models[i].desc); } PrintAndLogEx(NORMAL, ""); @@ -168,8 +168,8 @@ static int read_bmp_bitmap(const uint8_t *bmp, const size_t bmpsize, uint8_t mod } static void rgb_to_gray(int16_t *chanR, int16_t *chanG, int16_t *chanB, uint16_t width, uint16_t height, int16_t *chanGrey) { - for (uint16_t Y=0; Y 127 ? 255 : 0; chan[X + Y * width] = newp; int16_t err = oldp - newp; - float m[] = {7,3,5,1}; - if (X < width - 1){ - chan[X + 1 + Y * width] = chan[X + 1 + Y * width] + m[0]/16 * err; + float m[] = {7, 3, 5, 1}; + if (X < width - 1) { + chan[X + 1 + Y * width] = chan[X + 1 + Y * width] + m[0] / 16 * err; } if (Y < height - 1) { - chan[X - 1 + (Y + 1) * width] = chan[X - 1 + (Y + 1) * width] + m[1]/16 * err; + chan[X - 1 + (Y + 1) * width] = chan[X - 1 + (Y + 1) * width] + m[1] / 16 * err; } - if (Y < height - 1){ - chan[X + (Y + 1) * width] = chan[X + (Y + 1) * width] + m[2]/16 * err; + if (Y < height - 1) { + chan[X + (Y + 1) * width] = chan[X + (Y + 1) * width] + m[2] / 16 * err; } - if ((X < width - 1) && (Y < height - 1)){ - chan[X + 1 + (Y + 1) * width] = chan[X + 1 + (Y + 1) * width] + m[3]/16 * err; + if ((X < width - 1) && (Y < height - 1)) { + chan[X + 1 + (Y + 1) * width] = chan[X + 1 + (Y + 1) * width] + m[3] / 16 * err; } } } @@ -210,16 +210,16 @@ static uint32_t color_compare(int16_t r1, int16_t g1, int16_t b1, int16_t r2, in int16_t inG = g1 - g2; int16_t inB = b1 - b2; // use RGB-to-grey weighting - float dist = 0.2126 *inR*inR + 0.7152 *inG*inG + 0.0722 *inB*inB; + float dist = 0.2126 * inR * inR + 0.7152 * inG * inG + 0.0722 * inB * inB; return dist; } static void nearest_color(int16_t oldR, int16_t oldG, int16_t oldB, uint8_t *palette, uint16_t palettelen, uint8_t *newR, uint8_t *newG, uint8_t *newB) { - uint32_t bestdist=0x7FFFFFFF; - for (uint16_t i=0; i < palettelen; i++) { - uint8_t R = palette[i*3+0]; - uint8_t G = palette[i*3+1]; - uint8_t B = palette[i*3+2]; + uint32_t bestdist = 0x7FFFFFFF; + for (uint16_t i = 0; i < palettelen; i++) { + uint8_t R = palette[i * 3 + 0]; + uint8_t G = palette[i * 3 + 1]; + uint8_t B = palette[i * 3 + 2]; uint32_t dist = color_compare(oldR, oldG, oldB, R, G, B); if (dist < bestdist) { bestdist = dist; @@ -231,8 +231,8 @@ static void nearest_color(int16_t oldR, int16_t oldG, int16_t oldB, uint8_t *pal } static void dither_rgb_inplace(int16_t *chanR, int16_t *chanG, int16_t *chanB, uint16_t width, uint16_t height, uint8_t *palette, uint16_t palettelen) { - for (uint16_t Y=0; Y 0) { - chanR[XX - 1 + Y * width] = (chanR[XX - 1 + Y * width] + m[0]/16 * errR); - chanG[XX - 1 + Y * width] = (chanG[XX - 1 + Y * width] + m[0]/16 * errG); - chanB[XX - 1 + Y * width] = (chanB[XX - 1 + Y * width] + m[0]/16 * errB); + chanR[XX - 1 + Y * width] = (chanR[XX - 1 + Y * width] + m[0] / 16 * errR); + chanG[XX - 1 + Y * width] = (chanG[XX - 1 + Y * width] + m[0] / 16 * errG); + chanB[XX - 1 + Y * width] = (chanB[XX - 1 + Y * width] + m[0] / 16 * errB); } if (Y < height - 1) { - chanR[XX - 1 + (Y + 1) * width] = (chanR[XX - 1 + (Y + 1) * width] + m[3]/16 * errR); - chanG[XX - 1 + (Y + 1) * width] = (chanG[XX - 1 + (Y + 1) * width] + m[3]/16 * errG); - chanB[XX - 1 + (Y + 1) * width] = (chanB[XX - 1 + (Y + 1) * width] + m[3]/16 * errB); + chanR[XX - 1 + (Y + 1) * width] = (chanR[XX - 1 + (Y + 1) * width] + m[3] / 16 * errR); + chanG[XX - 1 + (Y + 1) * width] = (chanG[XX - 1 + (Y + 1) * width] + m[3] / 16 * errG); + chanB[XX - 1 + (Y + 1) * width] = (chanB[XX - 1 + (Y + 1) * width] + m[3] / 16 * errB); } if (Y < height - 1) { - chanR[XX + (Y + 1) * width] = (chanR[XX + (Y + 1) * width] + m[2]/16 * errR); - chanG[XX + (Y + 1) * width] = (chanG[XX + (Y + 1) * width] + m[2]/16 * errG); - chanB[XX + (Y + 1) * width] = (chanB[XX + (Y + 1) * width] + m[2]/16 * errB); + chanR[XX + (Y + 1) * width] = (chanR[XX + (Y + 1) * width] + m[2] / 16 * errR); + chanG[XX + (Y + 1) * width] = (chanG[XX + (Y + 1) * width] + m[2] / 16 * errG); + chanB[XX + (Y + 1) * width] = (chanB[XX + (Y + 1) * width] + m[2] / 16 * errB); } if ((XX < width - 1) && (Y < height - 1)) { - chanR[XX + 1 + (Y + 1) * width] = (chanR[XX + 1 + (Y + 1) * width] + m[1]/16 * errR); - chanG[XX + 1 + (Y + 1) * width] = (chanG[XX + 1 + (Y + 1) * width] + m[1]/16 * errG); - chanB[XX + 1 + (Y + 1) * width] = (chanB[XX + 1 + (Y + 1) * width] + m[1]/16 * errB); + chanR[XX + 1 + (Y + 1) * width] = (chanR[XX + 1 + (Y + 1) * width] + m[1] / 16 * errR); + chanG[XX + 1 + (Y + 1) * width] = (chanG[XX + 1 + (Y + 1) * width] + m[1] / 16 * errG); + chanB[XX + 1 + (Y + 1) * width] = (chanB[XX + 1 + (Y + 1) * width] + m[1] / 16 * errB); } } else { if (XX < width - 1) { - chanR[XX + 1 + Y * width] = (chanR[XX + 1 + Y * width] + m[0]/16 * errR); - chanG[XX + 1 + Y * width] = (chanG[XX + 1 + Y * width] + m[0]/16 * errG); - chanB[XX + 1 + Y * width] = (chanB[XX + 1 + Y * width] + m[0]/16 * errB); + chanR[XX + 1 + Y * width] = (chanR[XX + 1 + Y * width] + m[0] / 16 * errR); + chanG[XX + 1 + Y * width] = (chanG[XX + 1 + Y * width] + m[0] / 16 * errG); + chanB[XX + 1 + Y * width] = (chanB[XX + 1 + Y * width] + m[0] / 16 * errB); } if (Y < height - 1) { - chanR[XX - 1 + (Y + 1) * width] = (chanR[XX - 1 + (Y + 1) * width] + m[1]/16 * errR); - chanG[XX - 1 + (Y + 1) * width] = (chanG[XX - 1 + (Y + 1) * width] + m[1]/16 * errG); - chanB[XX - 1 + (Y + 1) * width] = (chanB[XX - 1 + (Y + 1) * width] + m[1]/16 * errB); + chanR[XX - 1 + (Y + 1) * width] = (chanR[XX - 1 + (Y + 1) * width] + m[1] / 16 * errR); + chanG[XX - 1 + (Y + 1) * width] = (chanG[XX - 1 + (Y + 1) * width] + m[1] / 16 * errG); + chanB[XX - 1 + (Y + 1) * width] = (chanB[XX - 1 + (Y + 1) * width] + m[1] / 16 * errB); } if (Y < height - 1) { - chanR[XX + (Y + 1) * width] = (chanR[XX + (Y + 1) * width] + m[2]/16 * errR); - chanG[XX + (Y + 1) * width] = (chanG[XX + (Y + 1) * width] + m[2]/16 * errG); - chanB[XX + (Y + 1) * width] = (chanB[XX + (Y + 1) * width] + m[2]/16 * errB); + chanR[XX + (Y + 1) * width] = (chanR[XX + (Y + 1) * width] + m[2] / 16 * errR); + chanG[XX + (Y + 1) * width] = (chanG[XX + (Y + 1) * width] + m[2] / 16 * errG); + chanB[XX + (Y + 1) * width] = (chanB[XX + (Y + 1) * width] + m[2] / 16 * errB); } if ((XX < width - 1) && (Y < height - 1)) { - chanR[XX + 1 + (Y + 1) * width] = (chanR[XX + 1 + (Y + 1) * width] + m[3]/16 * errR); - chanG[XX + 1 + (Y + 1) * width] = (chanG[XX + 1 + (Y + 1) * width] + m[3]/16 * errG); - chanB[XX + 1 + (Y + 1) * width] = (chanB[XX + 1 + (Y + 1) * width] + m[3]/16 * errB); + chanR[XX + 1 + (Y + 1) * width] = (chanR[XX + 1 + (Y + 1) * width] + m[3] / 16 * errR); + chanG[XX + 1 + (Y + 1) * width] = (chanG[XX + 1 + (Y + 1) * width] + m[3] / 16 * errG); + chanB[XX + 1 + (Y + 1) * width] = (chanB[XX + 1 + (Y + 1) * width] + m[3] / 16 * errB); } } } @@ -298,8 +298,8 @@ static void dither_rgb_inplace(int16_t *chanR, int16_t *chanG, int16_t *chanB, u } static void rgb_to_gray_red_inplace(int16_t *chanR, int16_t *chanG, int16_t *chanB, uint16_t width, uint16_t height) { - for (uint16_t Y=0; Y= 8) || (X == width - 1)) { - colormap8[X / 8 + Y * width8] = (~data)&0xFF; + colormap8[X / 8 + Y * width8] = (~data) & 0xFF; count = 0; data = 0; } - data = (data << 1)&0xFF; + data = (data << 1) & 0xFF; } } } @@ -430,8 +430,8 @@ static int read_bmp_rgb(uint8_t *bmp, const size_t bmpsize, uint8_t model_nr, ui } rgb_to_gray_red_inplace(chanR, chanG, chanB, width, height); - uint8_t palette[] ={0x00,0x00,0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00}; // black, white, red - dither_rgb_inplace(chanR, chanG, chanB, width, height, palette, sizeof(palette)/3); + uint8_t palette[] = {0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00}; // black, white, red + dither_rgb_inplace(chanR, chanG, chanB, width, height, palette, sizeof(palette) / 3); threshold_rgb_black_red(chanR, chanG, chanB, width, height, 128, 128, mapBlack, mapRed); if (save_conversions) { @@ -552,7 +552,7 @@ static void read_red(uint32_t i, uint8_t *l, uint8_t model_nr, uint8_t *red) { } } -static int transceive_blocking( uint8_t* txBuf, uint16_t txBufLen, uint8_t* rxBuf, uint16_t rxBufLen, uint16_t* actLen, bool retransmit ){ +static int transceive_blocking(uint8_t *txBuf, uint16_t txBufLen, uint8_t *rxBuf, uint16_t rxBufLen, uint16_t *actLen, bool retransmit) { uint8_t fail_num = 0; if (rxBufLen < 2) { return PM3_EINVARG; @@ -863,7 +863,7 @@ static int start_drawing(uint8_t model_nr, uint8_t *black, uint8_t *red) { } else if (model_nr == M2in7) { //2.7inch for (i = 0; i < 48; i++) { //read_black(i,step8, model_nr, black); - memset(&step8[3], 0xFF, sizeof(step8)-3); + memset(&step8[3], 0xFF, sizeof(step8) - 3); ret = transceive_blocking(step8, 124, rx, 20, actrxlen, true); // cd 08 if (ret != PM3_SUCCESS) { return ret; diff --git a/client/src/cmdhw.c b/client/src/cmdhw.c index 7c24bb342..ac938b7c8 100644 --- a/client/src/cmdhw.c +++ b/client/src/cmdhw.c @@ -716,7 +716,7 @@ void pm3_version(bool verbose, bool oneliner) { PrintAndLogEx(NORMAL, " compiled with " PM3CLIENTCOMPILER __VERSION__ PM3HOSTOS PM3HOSTARCH); PrintAndLogEx(NORMAL, "\n [ " _YELLOW_("PROXMARK3") " ]"); - if (IfPm3Rdv4Fw() == false ){ + if (IfPm3Rdv4Fw() == false) { PrintAndLogEx(NORMAL, " firmware.........................%s", _GREEN_("PM3OTHER")); if (IfPm3FpcUsartHost()) { PrintAndLogEx(NORMAL, " FPC USART for BT add-on..........%s", _GREEN_("present")); diff --git a/client/src/cmdlft55xx.c b/client/src/cmdlft55xx.c index 437789dee..905b73e88 100644 --- a/client/src/cmdlft55xx.c +++ b/client/src/cmdlft55xx.c @@ -407,7 +407,7 @@ static int usage_t55xx_sniff(void) { PrintAndLogEx(NORMAL, "Usage: lf t55xx sniff [w ] [l ] [s ] [t ] [1] [h]"); PrintAndLogEx(NORMAL, "Options:"); PrintAndLogEx(NORMAL, " w <0> <1> - Set samples width for 0 and 1 matching (default auto detect)"); - // PrintAndLogEx(NORMAL, " s - Set minimum signal level (default 20)"); + // PrintAndLogEx(NORMAL, " s - Set minimum signal level (default 20)"); PrintAndLogEx(NORMAL, " t - Set tolerance level (default 5). lower means tighter"); PrintAndLogEx(NORMAL, " 1 - Extract from current sample buffer (default will get new samples)"); PrintAndLogEx(NORMAL, " h - This help"); @@ -3028,9 +3028,9 @@ static int CmdT55xxChkPwds(const char *Cmd) { case 'e': // White cloner password based on EM4100 ID useCardPassword = true; - cardID = param_get64ex(Cmd,cmdp + 1,0,16); + cardID = param_get64ex(Cmd, cmdp + 1, 0, 16); uint32_t card32Bit = cardID & 0xFFFFFFFF; - cardPassword = lf_t55xx_white_pwdgen (card32Bit); + cardPassword = lf_t55xx_white_pwdgen(card32Bit); cmdp += 2; break; default: @@ -3766,7 +3766,7 @@ static uint8_t t55sniffGetPacket(int *pulseBuffer, char *data, uint8_t width0, u i++; continue; } - if (approxEq(width1, pulseBuffer[i], tolerance)) { + if (approxEq(width1, pulseBuffer[i], tolerance)) { data[dataLen++] = '1'; i++; continue; @@ -3783,7 +3783,7 @@ static uint8_t t55sniffTrimSamples(int *pulseBuffer, int *pulseIdx, uint8_t len) for (uint8_t ii = 0; ii < (80 - len); ii++) { pulseBuffer[ii] = pulseBuffer[ii + len]; } - + *pulseIdx -= len; return PM3_SUCCESS; } @@ -3806,7 +3806,7 @@ static int CmdT55xxSniff(const char *Cmd) { char pwdText [100]; char dataText [100]; int pulseBuffer[80] = { 0 }; // max should be 73 +/- - Holds Pulse widths - char data[80]; // linked to pulseBuffer. - Holds 0/1 from pulse widths + char data[80]; // linked to pulseBuffer. - Holds 0/1 from pulse widths /* @@ -3823,7 +3823,7 @@ static int CmdT55xxSniff(const char *Cmd) { | Regular Read | 2 | 3 | 3 | 4 | | Reset | 2 | 3 | 3 | 4 | ---------------------------------------------------------------- - + T55xx bit widths (decimation 1) - Expected, but may vary a little Reference 0 for LL0 and Leading 0 can be longer ----------------------------------------------- @@ -3847,20 +3847,20 @@ static int CmdT55xxSniff(const char *Cmd) { width1 = param_get8ex(Cmd, cmdp + 2, 0, 10); cmdp += 3; - if (width0 == 0) PrintAndLogEx (ERR,"need both sample widths! "_RED_("Missing sample width for 0")); - if (width1 == 0) PrintAndLogEx (ERR,"need both sample widths! "_RED_("Missing sample width for 1")); + if (width0 == 0) PrintAndLogEx(ERR, "need both sample widths! "_RED_("Missing sample width for 0")); + if (width1 == 0) PrintAndLogEx(ERR, "need both sample widths! "_RED_("Missing sample width for 1")); if ((width0 == 0) || (width1 == 0)) { - PrintAndLogEx (NORMAL,""); + PrintAndLogEx(NORMAL, ""); return usage_t55xx_sniff(); } break; - case 't': + case 't': tolerance = param_get8ex(Cmd, cmdp + 1, 0, 10); cmdp += 2; break; default: cmdp++; - PrintAndLogEx (ERR,"Invalid options supplied!"); + PrintAndLogEx(ERR, "Invalid options supplied!"); return usage_t55xx_sniff(); } } @@ -3868,12 +3868,12 @@ static int CmdT55xxSniff(const char *Cmd) { // setup and sample data from Proxmark // if not directed to existing sample/graphbuffer if (sampleData) { - CmdLFSniff (""); + CmdLFSniff(""); } // Headings PrintAndLogEx(NORMAL, ""); - PrintAndLogEx(INFO,_CYAN_("T55xx command detection")); + PrintAndLogEx(INFO, _CYAN_("T55xx command detection")); PrintAndLogEx(SUCCESS, "Downlink mode | password | Data | blk | page | 0 | 1 | raw"); PrintAndLogEx(SUCCESS, "----------------------+----------+----------+-----+------+-----+-----+-------------------------------------------------------------------------------"); @@ -3909,13 +3909,13 @@ static int CmdT55xxSniff(const char *Cmd) { if (pulseSamples > 0) { pulseBuffer[pulseIdx++] = pulseSamples; if (pulseIdx > 79) { // make room for next sample - if not used by now, it wont be. - t55sniffTrimSamples (pulseBuffer, &pulseIdx, 1); + t55sniffTrimSamples(pulseBuffer, &pulseIdx, 1); } // Check Samples for valid packets; // We should find (outside of leading bits) we have a packet of "1" and "0" at same widths. if (pulseIdx >= 6) {// min size for a read - ignoring 1of4 10 0 - + // We auto find widths if ((width0 == 0) && (width1 == 0)) { // We ignore bit 0 for the moment as it may be a ref. pulse, so check last @@ -3923,13 +3923,13 @@ static int CmdT55xxSniff(const char *Cmd) { minWidth = pulseBuffer[1]; maxWidth = pulseBuffer[1]; bool done = false; - - while ((!done) && (ii < pulseIdx) && ((maxWidth <= minWidth) || (approxEq(minWidth,maxWidth,tolerance)))) { // min should be 8, 16-32 more normal - if (pulseBuffer[ii]+3 < minWidth) { + + while ((!done) && (ii < pulseIdx) && ((maxWidth <= minWidth) || (approxEq(minWidth, maxWidth, tolerance)))) { // min should be 8, 16-32 more normal + if (pulseBuffer[ii] + 3 < minWidth) { minWidth = pulseBuffer[ii]; done = true; } - if (pulseBuffer[ii]-1 > maxWidth) { + if (pulseBuffer[ii] - 1 > maxWidth) { maxWidth = pulseBuffer[ii]; done = true; } @@ -3942,44 +3942,44 @@ static int CmdT55xxSniff(const char *Cmd) { } // out of bounds... min max far enough appart and minWidth is large enough - if (((maxWidth - minWidth) < 6) || (minWidth < 6)) // min 8 +/- + if (((maxWidth - minWidth) < 6) || (minWidth < 6)) // min 8 +/- continue; - - // At this point we should have + + // At this point we should have // - a min of 6 samples // - the 0 and 1 sample widths // - min 0 and min seperations (worst case) // No max checks done (yet) as have seen samples > then specs in use. - + // Check first bit. - + // Long leading 0 - if (haveData == false && (approxEq(pulseBuffer[0],136+minWidth,tolerance) && approxEq(pulseBuffer[1],maxWidth,tolerance))) { - // printf ("Long Leading 0 - not yet hanled | have 1 Fisrt bit | Min : %-3d - Max : %-3d : diff : %d\n",minWidth,maxWidth, maxWidth-minWidth); + if (haveData == false && (approxEq(pulseBuffer[0], 136 + minWidth, tolerance) && approxEq(pulseBuffer[1], maxWidth, tolerance))) { + // printf ("Long Leading 0 - not yet hanled | have 1 Fisrt bit | Min : %-3d - Max : %-3d : diff : %d\n",minWidth,maxWidth, maxWidth-minWidth); continue; } // Fixed bit - Default if (haveData == false && (approxEq(pulseBuffer[0], maxWidth, tolerance))) { - dataLen = t55sniffGetPacket (pulseBuffer, data, minWidth, maxWidth, tolerance); + dataLen = t55sniffGetPacket(pulseBuffer, data, minWidth, maxWidth, tolerance); - // if ((dataLen == 39) ) - // printf ("Fixed | Data end of 80 samples | offset : %llu - datalen %-2d - data : %s --- - Bit 0 width : %d\n",idx,dataLen,data,pulseBuffer[0]); + // if ((dataLen == 39) ) + // printf ("Fixed | Data end of 80 samples | offset : %llu - datalen %-2d - data : %s --- - Bit 0 width : %d\n",idx,dataLen,data,pulseBuffer[0]); if (data[0] == '0') { // should never get here.. - dataLen = 0; + dataLen = 0; data[0] = 0; } else { // Default Read if (dataLen == 6) { - t55sniffTrimSamples (pulseBuffer, &pulseIdx,4); // left 1 or 2 samples seemed to help + t55sniffTrimSamples(pulseBuffer, &pulseIdx, 4); // left 1 or 2 samples seemed to help page = data[1] - '0'; blockAddr = 0; for (uint8_t i = 3; i < 6; i++) { blockAddr <<= 1; - if (data[i] == '1') + if (data[i] == '1') blockAddr |= 1; } blockData = 0; @@ -3989,92 +3989,92 @@ static int CmdT55xxSniff(const char *Cmd) { // Password Write if (dataLen == 70) { - t55sniffTrimSamples (pulseBuffer, &pulseIdx,70); + t55sniffTrimSamples(pulseBuffer, &pulseIdx, 70); page = data[1] - '0'; usedPassword = 0; for (uint8_t i = 2; i <= 33; i++) { usedPassword <<= 1; - if (data[i] == '1') + if (data[i] == '1') usedPassword |= 1; } // Lock bit 34 blockData = 0; for (uint8_t i = 35; i <= 66; i++) { blockData <<= 1; - if (data[i] == '1') + if (data[i] == '1') blockData |= 1; } blockAddr = 0; for (uint8_t i = 67; i <= 69; i++) { blockAddr <<= 1; - if (data[i] == '1') + if (data[i] == '1') blockAddr |= 1; } haveData = true; sprintf(modeText, "Default pwd write"); sprintf(pwdText, "%08X", usedPassword); - sprintf(dataText, "%08X",blockData ); + sprintf(dataText, "%08X", blockData); } // Default Write (or password read ??) if (dataLen == 38) { - t55sniffTrimSamples (pulseBuffer, &pulseIdx,38); + t55sniffTrimSamples(pulseBuffer, &pulseIdx, 38); page = data[1] - '0'; usedPassword = 0; blockData = 0; for (uint8_t i = 3; i <= 34; i++) { blockData <<= 1; - if (data[i] == '1') + if (data[i] == '1') blockData |= 1; } blockAddr = 0; for (uint8_t i = 35; i <= 37; i++) { blockAddr <<= 1; - if (data[i] == '1') + if (data[i] == '1') blockAddr |= 1; } haveData = true; sprintf(modeText, "Default write"); - sprintf(dataText, "%08X",blockData ); + sprintf(dataText, "%08X", blockData); } } } // Leading 0 if (haveData == false && (approxEq(pulseBuffer[0], minWidth, tolerance))) { - // leading 0 (should = 0 width) + // leading 0 (should = 0 width) // 1 of 4 (leads with 00) - dataLen = t55sniffGetPacket (pulseBuffer,data,minWidth,maxWidth,tolerance); + dataLen = t55sniffGetPacket(pulseBuffer, data, minWidth, maxWidth, tolerance); // **** Should check to 0 to be actual 0 as well i.e. 01 .... data .... if ((data[0] == '0') && (data[1] == '1')) { if (dataLen == 73) { - t55sniffTrimSamples (pulseBuffer, &pulseIdx, 73); + t55sniffTrimSamples(pulseBuffer, &pulseIdx, 73); page = data[2] - '0'; usedPassword = 0; for (uint8_t i = 5; i <= 36; i++) { usedPassword <<= 1; - if (data[i] == '1') + if (data[i] == '1') usedPassword |= 1; } blockData = 0; for (uint8_t i = 38; i <= 69; i++) { blockData <<= 1; - if (data[i] == '1') + if (data[i] == '1') blockData |= 1; } blockAddr = 0; for (uint8_t i = 70; i <= 72; i++) { blockAddr <<= 1; - if (data[i] == '1') + if (data[i] == '1') blockAddr |= 1; } haveData = true; sprintf(modeText, "Leading 0 pwd write"); sprintf(pwdText, "%08X", usedPassword); - sprintf(dataText, "%08X",blockData ); + sprintf(dataText, "%08X", blockData); } } } @@ -4083,16 +4083,16 @@ static int CmdT55xxSniff(const char *Cmd) { // Print results if (haveData) { //&& (minWidth > 1) && (maxWidth > minWidth)){ if (blockAddr == 7) - PrintAndLogEx (SUCCESS, "%-20s | "_GREEN_("%8s")" | "_YELLOW_("%8s")" | "_YELLOW_("%d")" | "_GREEN_("%d")" | %3d | %3d | %s", modeText, pwdText, dataText, blockAddr, page, minWidth, maxWidth, data); + PrintAndLogEx(SUCCESS, "%-20s | "_GREEN_("%8s")" | "_YELLOW_("%8s")" | "_YELLOW_("%d")" | "_GREEN_("%d")" | %3d | %3d | %s", modeText, pwdText, dataText, blockAddr, page, minWidth, maxWidth, data); else - PrintAndLogEx (SUCCESS, "%-20s | "_GREEN_("%8s")" | "_GREEN_("%8s")" | "_GREEN_("%d")" | "_GREEN_("%d")" | %3d | %3d | %s", modeText, pwdText, dataText, blockAddr, page, minWidth, maxWidth, data); + PrintAndLogEx(SUCCESS, "%-20s | "_GREEN_("%8s")" | "_GREEN_("%8s")" | "_GREEN_("%d")" | "_GREEN_("%d")" | %3d | %3d | %s", modeText, pwdText, dataText, blockAddr, page, minWidth, maxWidth, data); } } // footer - PrintAndLogEx (SUCCESS, "-----------------------------------------------------------------------------------------------------------------------------------------------------"); - PrintAndLogEx (NORMAL, ""); - + PrintAndLogEx(SUCCESS, "-----------------------------------------------------------------------------------------------------------------------------------------------------"); + PrintAndLogEx(NORMAL, ""); + return PM3_SUCCESS; } diff --git a/client/src/cmdparser.c b/client/src/cmdparser.c index 590dee87d..2aee4af05 100644 --- a/client/src/cmdparser.c +++ b/client/src/cmdparser.c @@ -196,7 +196,7 @@ int CmdsParse(const command_t Commands[], const char *Cmd) { dumpCommandsRecursive(Commands, 1); return PM3_SUCCESS; } - + if (strcmp(Cmd, "coffee") == 0) { PrintAndLogEx(NORMAL, ""); PrintAndLogEx(NORMAL, " ((\n ))\n" _YELLOW_(" .______.\n | |]\n \\ /\n `----´\n\n")); diff --git a/client/src/proxguiqt.cpp b/client/src/proxguiqt.cpp index 2d988fc9e..aa74a83fd 100644 --- a/client/src/proxguiqt.cpp +++ b/client/src/proxguiqt.cpp @@ -638,7 +638,7 @@ void Plot::closeEvent(QCloseEvent *event) { } void Plot::Zoom(float factor, int refX) { - if (factor >=1) { // Zoom in + if (factor >= 1) { // Zoom in if (GraphPixelsPerPoint <= 25 * factor) { GraphPixelsPerPoint *= factor; GraphStart += (refX - GraphStart) - ((refX - GraphStart) / factor); @@ -664,7 +664,7 @@ void Plot::Move(int offset) { } } else { // Move left if (GraphPixelsPerPoint < 20) { - if (GraphStart >= (uint)-offset) { + if (GraphStart >= (uint) - offset) { GraphStart += offset; } else { GraphStart = 0; @@ -697,15 +697,15 @@ void Plot::wheelEvent(QWheelEvent *event) { x += GraphStart; // event->angleDelta doesn't exist in QT4, both exist in 5.12.8 and 5.14.2 and event->delta doesn't exist in 5.15.0 #if QT_VERSION >= 0x050d00 - Zoom(1.0-(float)event->angleDelta().y()/(120/zoom_offset), x); + Zoom(1.0 - (float)event->angleDelta().y() / (120 / zoom_offset), x); #else - Zoom(1.0-(float)event->delta()/(120/zoom_offset), x); + Zoom(1.0 - (float)event->delta() / (120 / zoom_offset), x); #endif } else { #if QT_VERSION >= 0x050d00 - Move(PageWidth*(-(float)event->angleDelta().y()/(120/move_offset))); + Move(PageWidth * (-(float)event->angleDelta().y() / (120 / move_offset))); #else - Move(PageWidth*(-(float)event->delta()/(120/move_offset))); + Move(PageWidth * (-(float)event->delta() / (120 / move_offset))); #endif } this->update(); diff --git a/common/commonutil.c b/common/commonutil.c index 9be805f31..02f64a69e 100644 --- a/common/commonutil.c +++ b/common/commonutil.c @@ -145,12 +145,12 @@ void htole24(uint32_t val, uint8_t data[3]) { // ROL on u32 uint32_t rotl(uint32_t a, uint8_t n) { - n &= 31; - return (a << n) | (a >> (32 - n)); + n &= 31; + return (a << n) | (a >> (32 - n)); } // ROR on u32 uint32_t rotr(uint32_t a, uint8_t n) { - n &= 31; - return (a >> n) | (a << (32 - n)); -} \ No newline at end of file + n &= 31; + return (a >> n) | (a << (32 - n)); +} diff --git a/common/generator.c b/common/generator.c index d0644c61a..a6324d24f 100644 --- a/common/generator.c +++ b/common/generator.c @@ -419,7 +419,7 @@ uint32_t lf_t55xx_white_pwdgen(uint32_t id) { uint32_t r1 = rotl(id & 0x000000ec, 8); uint32_t r2 = rotl(id & 0x86000000, 16); uint32_t pwd = 0x10303; - pwd += ((id & 0x86ee00ec) ^ r1 ^ r2 ); + pwd += ((id & 0x86ee00ec) ^ r1 ^ r2); return pwd; } @@ -483,7 +483,7 @@ int generator_selftest(void) { if (success) testresult++; PrintAndLogEx(success ? SUCCESS : WARNING, "ID | 0x00000080 | %08"PRIx32 " - %s", lf_id, success ? "OK" : "->00018383<--"); - + PrintAndLogEx(SUCCESS, "------------------- Selftest %s", (testresult == NUM_OF_TEST) ? "OK" : "fail"); return PM3_SUCCESS; } diff --git a/common/lz4/lz4.c b/common/lz4/lz4.c index 78def982d..ac6cbbb99 100644 --- a/common/lz4/lz4.c +++ b/common/lz4/lz4.c @@ -200,7 +200,7 @@ #define MFLIMIT 12 /* see ../doc/lz4_Block_format.md#parsing-restrictions */ #define MATCH_SAFEGUARD_DISTANCE ((2*WILDCOPYLENGTH) - MINMATCH) /* ensure it's possible to write 2 x wildcopyLength without overflowing output buffer */ #define FASTLOOP_SAFE_DISTANCE 64 -static const int LZ4_minLength = (MFLIMIT+1); +static const int LZ4_minLength = (MFLIMIT + 1); #define KB *(1 <<10) #define MB *(1 <<20) @@ -232,7 +232,7 @@ static const int LZ4_minLength = (MFLIMIT+1); #if defined(LZ4_DEBUG) && (LZ4_DEBUG>=2) # include - static int g_debuglog_enable = 1; +static int g_debuglog_enable = 1; # define DEBUGLOG(l, ...) { \ if ((g_debuglog_enable) && (l<=LZ4_DEBUG)) { \ fprintf(stderr, __FILE__ ": "); \ @@ -249,29 +249,29 @@ static const int LZ4_minLength = (MFLIMIT+1); **************************************/ #if defined(__cplusplus) || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */) # include - typedef uint8_t BYTE; - typedef uint16_t U16; - typedef uint32_t U32; - typedef int32_t S32; - typedef uint64_t U64; - typedef uintptr_t uptrval; +typedef uint8_t BYTE; +typedef uint16_t U16; +typedef uint32_t U32; +typedef int32_t S32; +typedef uint64_t U64; +typedef uintptr_t uptrval; #else # include # if UINT_MAX != 4294967295UL # error "LZ4 code (when not C++ or C99) assumes that sizeof(int) == 4" # endif - typedef unsigned char BYTE; - typedef unsigned short U16; - typedef unsigned int U32; - typedef signed int S32; - typedef unsigned long long U64; - typedef size_t uptrval; /* generally true, except OpenVMS-64 */ +typedef unsigned char BYTE; +typedef unsigned short U16; +typedef unsigned int U32; +typedef signed int S32; +typedef unsigned long long U64; +typedef size_t uptrval; /* generally true, except OpenVMS-64 */ #endif #if defined(__x86_64__) - typedef U64 reg_t; /* 64-bits in x32 mode */ +typedef U64 reg_t; /* 64-bits in x32 mode */ #else - typedef size_t reg_t; /* 32-bits in x32 mode */ +typedef size_t reg_t; /* 32-bits in x32 mode */ #endif typedef enum { @@ -299,8 +299,7 @@ typedef enum { #define LZ4_memcpy(dst, src, size) memcpy(dst, src, size) #endif -static unsigned LZ4_isLittleEndian(void) -{ +static unsigned LZ4_isLittleEndian(void) { const union { U32 u; BYTE c[4]; } one = { 1 }; /* don't use static : performance detrimental */ return one.c[0]; } @@ -309,12 +308,12 @@ static unsigned LZ4_isLittleEndian(void) #if defined(LZ4_FORCE_MEMORY_ACCESS) && (LZ4_FORCE_MEMORY_ACCESS==2) /* lie to the compiler about data alignment; use with caution */ -static U16 LZ4_read16(const void* memPtr) { return *(const U16*) memPtr; } -static U32 LZ4_read32(const void* memPtr) { return *(const U32*) memPtr; } -static reg_t LZ4_read_ARCH(const void* memPtr) { return *(const reg_t*) memPtr; } +static U16 LZ4_read16(const void *memPtr) { return *(const U16 *) memPtr; } +static U32 LZ4_read32(const void *memPtr) { return *(const U32 *) memPtr; } +static reg_t LZ4_read_ARCH(const void *memPtr) { return *(const reg_t *) memPtr; } -static void LZ4_write16(void* memPtr, U16 value) { *(U16*)memPtr = value; } -static void LZ4_write32(void* memPtr, U32 value) { *(U32*)memPtr = value; } +static void LZ4_write16(void *memPtr, U16 value) { *(U16 *)memPtr = value; } +static void LZ4_write32(void *memPtr, U32 value) { *(U32 *)memPtr = value; } #elif defined(LZ4_FORCE_MEMORY_ACCESS) && (LZ4_FORCE_MEMORY_ACCESS==1) @@ -322,73 +321,72 @@ static void LZ4_write32(void* memPtr, U32 value) { *(U32*)memPtr = value; } /* currently only defined for gcc and icc */ typedef union { U16 u16; U32 u32; reg_t uArch; } __attribute__((packed)) unalign; -static U16 LZ4_read16(const void* ptr) { return ((const unalign*)ptr)->u16; } -static U32 LZ4_read32(const void* ptr) { return ((const unalign*)ptr)->u32; } -static reg_t LZ4_read_ARCH(const void* ptr) { return ((const unalign*)ptr)->uArch; } +static U16 LZ4_read16(const void *ptr) { return ((const unalign *)ptr)->u16; } +static U32 LZ4_read32(const void *ptr) { return ((const unalign *)ptr)->u32; } +static reg_t LZ4_read_ARCH(const void *ptr) { return ((const unalign *)ptr)->uArch; } -static void LZ4_write16(void* memPtr, U16 value) { ((unalign*)memPtr)->u16 = value; } -static void LZ4_write32(void* memPtr, U32 value) { ((unalign*)memPtr)->u32 = value; } +static void LZ4_write16(void *memPtr, U16 value) { ((unalign *)memPtr)->u16 = value; } +static void LZ4_write32(void *memPtr, U32 value) { ((unalign *)memPtr)->u32 = value; } #else /* safe and portable access using memcpy() */ -static U16 LZ4_read16(const void* memPtr) -{ - U16 val; LZ4_memcpy(&val, memPtr, sizeof(val)); return val; +static U16 LZ4_read16(const void *memPtr) { + U16 val; + LZ4_memcpy(&val, memPtr, sizeof(val)); + return val; } -static U32 LZ4_read32(const void* memPtr) -{ - U32 val; LZ4_memcpy(&val, memPtr, sizeof(val)); return val; +static U32 LZ4_read32(const void *memPtr) { + U32 val; + LZ4_memcpy(&val, memPtr, sizeof(val)); + return val; } -static reg_t LZ4_read_ARCH(const void* memPtr) -{ - reg_t val; LZ4_memcpy(&val, memPtr, sizeof(val)); return val; +static reg_t LZ4_read_ARCH(const void *memPtr) { + reg_t val; + LZ4_memcpy(&val, memPtr, sizeof(val)); + return val; } -static void LZ4_write16(void* memPtr, U16 value) -{ +static void LZ4_write16(void *memPtr, U16 value) { LZ4_memcpy(memPtr, &value, sizeof(value)); } -static void LZ4_write32(void* memPtr, U32 value) -{ +static void LZ4_write32(void *memPtr, U32 value) { LZ4_memcpy(memPtr, &value, sizeof(value)); } #endif /* LZ4_FORCE_MEMORY_ACCESS */ -static U16 LZ4_readLE16(const void* memPtr) -{ +static U16 LZ4_readLE16(const void *memPtr) { if (LZ4_isLittleEndian()) { return LZ4_read16(memPtr); } else { - const BYTE* p = (const BYTE*)memPtr; - return (U16)((U16)p[0] + (p[1]<<8)); + const BYTE *p = (const BYTE *)memPtr; + return (U16)((U16)p[0] + (p[1] << 8)); } } -static void LZ4_writeLE16(void* memPtr, U16 value) -{ +static void LZ4_writeLE16(void *memPtr, U16 value) { if (LZ4_isLittleEndian()) { LZ4_write16(memPtr, value); } else { - BYTE* p = (BYTE*)memPtr; + BYTE *p = (BYTE *)memPtr; p[0] = (BYTE) value; - p[1] = (BYTE)(value>>8); + p[1] = (BYTE)(value >> 8); } } /* customized variant of memcpy, which can overwrite up to 8 bytes beyond dstEnd */ LZ4_FORCE_O2_INLINE_GCC_PPC64LE -void LZ4_wildCopy8(void* dstPtr, const void* srcPtr, void* dstEnd) -{ - BYTE* d = (BYTE*)dstPtr; - const BYTE* s = (const BYTE*)srcPtr; - BYTE* const e = (BYTE*)dstEnd; +void LZ4_wildCopy8(void *dstPtr, const void *srcPtr, void *dstEnd) { + BYTE *d = (BYTE *)dstPtr; + const BYTE *s = (const BYTE *)srcPtr; + BYTE *const e = (BYTE *)dstEnd; - do { LZ4_memcpy(d,s,8); d+=8; s+=8; } while (d= 16. */ LZ4_FORCE_O2_INLINE_GCC_PPC64LE void -LZ4_wildCopy32(void* dstPtr, const void* srcPtr, void* dstEnd) -{ - BYTE* d = (BYTE*)dstPtr; - const BYTE* s = (const BYTE*)srcPtr; - BYTE* const e = (BYTE*)dstEnd; +LZ4_wildCopy32(void *dstPtr, const void *srcPtr, void *dstEnd) { + BYTE *d = (BYTE *)dstPtr; + const BYTE *s = (const BYTE *)srcPtr; + BYTE *const e = (BYTE *)dstEnd; - do { LZ4_memcpy(d,s,16); LZ4_memcpy(d+16,s+16,16); d+=32; s+=32; } while (d= dstPtr + MINMATCH * - there is at least 8 bytes available to write after dstEnd */ LZ4_FORCE_O2_INLINE_GCC_PPC64LE void -LZ4_memcpy_using_offset(BYTE* dstPtr, const BYTE* srcPtr, BYTE* dstEnd, const size_t offset) -{ +LZ4_memcpy_using_offset(BYTE *dstPtr, const BYTE *srcPtr, BYTE *dstEnd, const size_t offset) { BYTE v[8]; assert(dstEnd >= dstPtr + MINMATCH); LZ4_write32(dstPtr, 0); /* silence an msan warning when offset==0 */ - switch(offset) { - case 1: - memset(v, *srcPtr, 8); - break; - case 2: - LZ4_memcpy(v, srcPtr, 2); - LZ4_memcpy(&v[2], srcPtr, 2); - LZ4_memcpy(&v[4], &v[0], 4); - break; - case 4: - LZ4_memcpy(v, srcPtr, 4); - LZ4_memcpy(&v[4], srcPtr, 4); - break; - default: - LZ4_memcpy_using_offset_base(dstPtr, srcPtr, dstEnd, offset); - return; + switch (offset) { + case 1: + memset(v, *srcPtr, 8); + break; + case 2: + LZ4_memcpy(v, srcPtr, 2); + LZ4_memcpy(&v[2], srcPtr, 2); + LZ4_memcpy(&v[4], &v[0], 4); + break; + case 4: + LZ4_memcpy(v, srcPtr, 4); + LZ4_memcpy(&v[4], srcPtr, 4); + break; + default: + LZ4_memcpy_using_offset_base(dstPtr, srcPtr, dstEnd, offset); + return; } LZ4_memcpy(dstPtr, v, 8); @@ -486,8 +482,7 @@ LZ4_memcpy_using_offset(BYTE* dstPtr, const BYTE* srcPtr, BYTE* dstEnd, const si /*-************************************ * Common functions **************************************/ -static unsigned LZ4_NbCommonBytes (reg_t val) -{ +static unsigned LZ4_NbCommonBytes(reg_t val) { assert(val != 0); if (LZ4_isLittleEndian()) { if (sizeof(val) == 8) { @@ -521,8 +516,8 @@ static unsigned LZ4_NbCommonBytes (reg_t val) return (unsigned)((((val - 1) ^ val) & (m - 1)) * m) >> 24; # endif } - } else /* Big Endian CPU */ { - if (sizeof(val)==8) { + } else { /* Big Endian CPU */ + if (sizeof(val) == 8) { # if (defined(__clang__) || (defined(__GNUC__) && ((__GNUC__ > 3) || \ ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 4))))) && \ !defined(__TINYC__) && !defined(LZ4_FORCE_SW_BITCOUNT) @@ -548,12 +543,14 @@ static unsigned LZ4_NbCommonBytes (reg_t val) /* this method doesn't consume memory space like the previous one, * but it contains several branches, * that may end up slowing execution */ - static const U32 by32 = sizeof(val)*4; /* 32 on 64 bits (goal), 16 on 32 bits. + static const U32 by32 = sizeof(val) * 4; /* 32 on 64 bits (goal), 16 on 32 bits. Just to avoid some static analyzer complaining about shift by 32 on 32-bits target. Note that this code path is never triggered in 32-bits mode. */ unsigned r; - if (!(val>>by32)) { r=4; } else { r=0; val>>=by32; } - if (!(val>>16)) { r+=2; val>>=8; } else { val>>=24; } + if (!(val >> by32)) { r = 4; } + else { r = 0; val >>= by32; } + if (!(val >> 16)) { r += 2; val >>= 8; } + else { val >>= 24; } r += (!val); return r; #endif @@ -566,7 +563,7 @@ static unsigned LZ4_NbCommonBytes (reg_t val) # else val >>= 8; val = ((((val + 0x00FFFF00) | 0x00FFFFFF) + val) | - (val + 0x00FF0000)) >> 24; + (val + 0x00FF0000)) >> 24; return (unsigned)val ^ 3; # endif } @@ -576,28 +573,29 @@ static unsigned LZ4_NbCommonBytes (reg_t val) #define STEPSIZE sizeof(reg_t) LZ4_FORCE_INLINE -unsigned LZ4_count(const BYTE* pIn, const BYTE* pMatch, const BYTE* pInLimit) -{ - const BYTE* const pStart = pIn; +unsigned LZ4_count(const BYTE *pIn, const BYTE *pMatch, const BYTE *pInLimit) { + const BYTE *const pStart = pIn; - if (likely(pIn < pInLimit-(STEPSIZE-1))) { + if (likely(pIn < pInLimit - (STEPSIZE - 1))) { reg_t const diff = LZ4_read_ARCH(pMatch) ^ LZ4_read_ARCH(pIn); if (!diff) { - pIn+=STEPSIZE; pMatch+=STEPSIZE; + pIn += STEPSIZE; + pMatch += STEPSIZE; } else { return LZ4_NbCommonBytes(diff); - } } + } + } - while (likely(pIn < pInLimit-(STEPSIZE-1))) { + while (likely(pIn < pInLimit - (STEPSIZE - 1))) { reg_t const diff = LZ4_read_ARCH(pMatch) ^ LZ4_read_ARCH(pIn); - if (!diff) { pIn+=STEPSIZE; pMatch+=STEPSIZE; continue; } + if (!diff) { pIn += STEPSIZE; pMatch += STEPSIZE; continue; } pIn += LZ4_NbCommonBytes(diff); return (unsigned)(pIn - pStart); } - if ((STEPSIZE==8) && (pIn<(pInLimit-3)) && (LZ4_read32(pMatch) == LZ4_read32(pIn))) { pIn+=4; pMatch+=4; } - if ((pIn<(pInLimit-1)) && (LZ4_read16(pMatch) == LZ4_read16(pIn))) { pIn+=2; pMatch+=2; } - if ((pIn compression run slower on incompressible data */ @@ -645,8 +643,8 @@ typedef enum { noDictIssue = 0, dictSmall } dictIssue_directive; /*-************************************ * Local Utils **************************************/ -int LZ4_versionNumber (void) { return LZ4_VERSION_NUMBER; } -const char* LZ4_versionString(void) { return LZ4_VERSION_STRING; } +int LZ4_versionNumber(void) { return LZ4_VERSION_NUMBER; } +const char *LZ4_versionString(void) { return LZ4_VERSION_STRING; } int LZ4_compressBound(int isize) { return LZ4_COMPRESSBOUND(isize); } int LZ4_sizeofState(void) { return LZ4_STREAMSIZE; } @@ -658,11 +656,11 @@ int LZ4_sizeofState(void) { return LZ4_STREAMSIZE; } extern "C" { #endif -int LZ4_compress_forceExtDict (LZ4_stream_t* LZ4_dict, const char* source, char* dest, int srcSize); +int LZ4_compress_forceExtDict(LZ4_stream_t *LZ4_dict, const char *source, char *dest, int srcSize); -int LZ4_decompress_safe_forceExtDict(const char* source, char* dest, +int LZ4_decompress_safe_forceExtDict(const char *source, char *dest, int compressedSize, int maxOutputSize, - const void* dictStart, size_t dictSize); + const void *dictStart, size_t dictSize); #if defined (__cplusplus) } @@ -671,17 +669,15 @@ int LZ4_decompress_safe_forceExtDict(const char* source, char* dest, /*-****************************** * Compression functions ********************************/ -LZ4_FORCE_INLINE U32 LZ4_hash4(U32 sequence, tableType_t const tableType) -{ +LZ4_FORCE_INLINE U32 LZ4_hash4(U32 sequence, tableType_t const tableType) { if (tableType == byU16) - return ((sequence * 2654435761U) >> ((MINMATCH*8)-(LZ4_HASHLOG+1))); + return ((sequence * 2654435761U) >> ((MINMATCH * 8) - (LZ4_HASHLOG + 1))); else - return ((sequence * 2654435761U) >> ((MINMATCH*8)-LZ4_HASHLOG)); + return ((sequence * 2654435761U) >> ((MINMATCH * 8) - LZ4_HASHLOG)); } -LZ4_FORCE_INLINE U32 LZ4_hash5(U64 sequence, tableType_t const tableType) -{ - const U32 hashLog = (tableType == byU16) ? LZ4_HASHLOG+1 : LZ4_HASHLOG; +LZ4_FORCE_INLINE U32 LZ4_hash5(U64 sequence, tableType_t const tableType) { + const U32 hashLog = (tableType == byU16) ? LZ4_HASHLOG + 1 : LZ4_HASHLOG; if (LZ4_isLittleEndian()) { const U64 prime5bytes = 889523592379ULL; return (U32)(((sequence << 24) * prime5bytes) >> (64 - hashLog)); @@ -691,51 +687,51 @@ LZ4_FORCE_INLINE U32 LZ4_hash5(U64 sequence, tableType_t const tableType) } } -LZ4_FORCE_INLINE U32 LZ4_hashPosition(const void* const p, tableType_t const tableType) -{ - if ((sizeof(reg_t)==8) && (tableType != byU16)) return LZ4_hash5(LZ4_read_ARCH(p), tableType); +LZ4_FORCE_INLINE U32 LZ4_hashPosition(const void *const p, tableType_t const tableType) { + if ((sizeof(reg_t) == 8) && (tableType != byU16)) return LZ4_hash5(LZ4_read_ARCH(p), tableType); return LZ4_hash4(LZ4_read32(p), tableType); } -LZ4_FORCE_INLINE void LZ4_clearHash(U32 h, void* tableBase, tableType_t const tableType) -{ - switch (tableType) - { - default: /* fallthrough */ - case clearedTable: { /* illegal! */ assert(0); return; } - case byPtr: { const BYTE** hashTable = (const BYTE**)tableBase; hashTable[h] = NULL; return; } - case byU32: { U32* hashTable = (U32*) tableBase; hashTable[h] = 0; return; } - case byU16: { U16* hashTable = (U16*) tableBase; hashTable[h] = 0; return; } +LZ4_FORCE_INLINE void LZ4_clearHash(U32 h, void *tableBase, tableType_t const tableType) { + switch (tableType) { + default: /* fallthrough */ + case clearedTable: { /* illegal! */ assert(0); return; } + case byPtr: + { const BYTE **hashTable = (const BYTE **)tableBase; hashTable[h] = NULL; return; } + case byU32: + { U32 *hashTable = (U32 *) tableBase; hashTable[h] = 0; return; } + case byU16: + { U16 *hashTable = (U16 *) tableBase; hashTable[h] = 0; return; } } } -LZ4_FORCE_INLINE void LZ4_putIndexOnHash(U32 idx, U32 h, void* tableBase, tableType_t const tableType) -{ - switch (tableType) - { - default: /* fallthrough */ - case clearedTable: /* fallthrough */ - case byPtr: { /* illegal! */ assert(0); return; } - case byU32: { U32* hashTable = (U32*) tableBase; hashTable[h] = idx; return; } - case byU16: { U16* hashTable = (U16*) tableBase; assert(idx < 65536); hashTable[h] = (U16)idx; return; } +LZ4_FORCE_INLINE void LZ4_putIndexOnHash(U32 idx, U32 h, void *tableBase, tableType_t const tableType) { + switch (tableType) { + default: /* fallthrough */ + case clearedTable: /* fallthrough */ + case byPtr: { /* illegal! */ assert(0); return; } + case byU32: + { U32 *hashTable = (U32 *) tableBase; hashTable[h] = idx; return; } + case byU16: + { U16 *hashTable = (U16 *) tableBase; assert(idx < 65536); hashTable[h] = (U16)idx; return; } } } -LZ4_FORCE_INLINE void LZ4_putPositionOnHash(const BYTE* p, U32 h, - void* tableBase, tableType_t const tableType, - const BYTE* srcBase) -{ - switch (tableType) - { - case clearedTable: { /* illegal! */ assert(0); return; } - case byPtr: { const BYTE** hashTable = (const BYTE**)tableBase; hashTable[h] = p; return; } - case byU32: { U32* hashTable = (U32*) tableBase; hashTable[h] = (U32)(p-srcBase); return; } - case byU16: { U16* hashTable = (U16*) tableBase; hashTable[h] = (U16)(p-srcBase); return; } +LZ4_FORCE_INLINE void LZ4_putPositionOnHash(const BYTE *p, U32 h, + void *tableBase, tableType_t const tableType, + const BYTE *srcBase) { + switch (tableType) { + case clearedTable: { /* illegal! */ assert(0); return; } + case byPtr: + { const BYTE **hashTable = (const BYTE **)tableBase; hashTable[h] = p; return; } + case byU32: + { U32 *hashTable = (U32 *) tableBase; hashTable[h] = (U32)(p - srcBase); return; } + case byU16: + { U16 *hashTable = (U16 *) tableBase; hashTable[h] = (U16)(p - srcBase); return; } } } -LZ4_FORCE_INLINE void LZ4_putPosition(const BYTE* p, void* tableBase, tableType_t tableType, const BYTE* srcBase) -{ +LZ4_FORCE_INLINE void LZ4_putPosition(const BYTE *p, void *tableBase, tableType_t tableType, const BYTE *srcBase) { U32 const h = LZ4_hashPosition(p, tableType); LZ4_putPositionOnHash(p, h, tableBase, tableType, srcBase); } @@ -746,42 +742,40 @@ LZ4_FORCE_INLINE void LZ4_putPosition(const BYTE* p, void* tableBase, tableType_ * Assumption 1 : only valid if tableType == byU32 or byU16. * Assumption 2 : h is presumed valid (within limits of hash table) */ -LZ4_FORCE_INLINE U32 LZ4_getIndexOnHash(U32 h, const void* tableBase, tableType_t tableType) -{ +LZ4_FORCE_INLINE U32 LZ4_getIndexOnHash(U32 h, const void *tableBase, tableType_t tableType) { LZ4_STATIC_ASSERT(LZ4_MEMORY_USAGE > 2); if (tableType == byU32) { - const U32* const hashTable = (const U32*) tableBase; - assert(h < (1U << (LZ4_MEMORY_USAGE-2))); + const U32 *const hashTable = (const U32 *) tableBase; + assert(h < (1U << (LZ4_MEMORY_USAGE - 2))); return hashTable[h]; } if (tableType == byU16) { - const U16* const hashTable = (const U16*) tableBase; - assert(h < (1U << (LZ4_MEMORY_USAGE-1))); + const U16 *const hashTable = (const U16 *) tableBase; + assert(h < (1U << (LZ4_MEMORY_USAGE - 1))); return hashTable[h]; } - assert(0); return 0; /* forbidden case */ + assert(0); + return 0; /* forbidden case */ } -static const BYTE* LZ4_getPositionOnHash(U32 h, const void* tableBase, tableType_t tableType, const BYTE* srcBase) -{ - if (tableType == byPtr) { const BYTE* const* hashTable = (const BYTE* const*) tableBase; return hashTable[h]; } - if (tableType == byU32) { const U32* const hashTable = (const U32*) tableBase; return hashTable[h] + srcBase; } - { const U16* const hashTable = (const U16*) tableBase; return hashTable[h] + srcBase; } /* default, to ensure a return */ +static const BYTE *LZ4_getPositionOnHash(U32 h, const void *tableBase, tableType_t tableType, const BYTE *srcBase) { + if (tableType == byPtr) { const BYTE *const *hashTable = (const BYTE * const *) tableBase; return hashTable[h]; } + if (tableType == byU32) { const U32 *const hashTable = (const U32 *) tableBase; return hashTable[h] + srcBase; } + { const U16 *const hashTable = (const U16 *) tableBase; return hashTable[h] + srcBase; } /* default, to ensure a return */ } -LZ4_FORCE_INLINE const BYTE* -LZ4_getPosition(const BYTE* p, - const void* tableBase, tableType_t tableType, - const BYTE* srcBase) -{ +LZ4_FORCE_INLINE const BYTE * +LZ4_getPosition(const BYTE *p, + const void *tableBase, tableType_t tableType, + const BYTE *srcBase) { U32 const h = LZ4_hashPosition(p, tableType); return LZ4_getPositionOnHash(h, tableBase, tableType, srcBase); } LZ4_FORCE_INLINE void -LZ4_prepareTable(LZ4_stream_t_internal* const cctx, - const int inputSize, - const tableType_t tableType) { +LZ4_prepareTable(LZ4_stream_t_internal *const cctx, + const int inputSize, + const tableType_t tableType) { /* If the table hasn't been used, it's guaranteed to be zeroed out, and is * therefore safe to use no matter what mode we're in. Otherwise, we figure * out if it's safe to leave as is or whether it needs to be reset. @@ -789,11 +783,10 @@ LZ4_prepareTable(LZ4_stream_t_internal* const cctx, if ((tableType_t)cctx->tableType != clearedTable) { assert(inputSize >= 0); if ((tableType_t)cctx->tableType != tableType - || ((tableType == byU16) && cctx->currentOffset + (unsigned)inputSize >= 0xFFFFU) - || ((tableType == byU32) && cctx->currentOffset > 1 GB) - || tableType == byPtr - || inputSize >= 4 KB) - { + || ((tableType == byU16) && cctx->currentOffset + (unsigned)inputSize >= 0xFFFFU) + || ((tableType == byU32) && cctx->currentOffset > 1 GB) + || tableType == byPtr + || inputSize >= 4 KB) { DEBUGLOG(4, "LZ4_prepareTable: Resetting table in %p", cctx); MEM_INIT(cctx->hashTable, 0, LZ4_HASHTABLESIZE); cctx->currentOffset = 0; @@ -825,27 +818,26 @@ LZ4_prepareTable(LZ4_stream_t_internal* const cctx, * - inputSize > 0 */ LZ4_FORCE_INLINE int LZ4_compress_generic_validated( - LZ4_stream_t_internal* const cctx, - const char* const source, - char* const dest, - const int inputSize, - int *inputConsumed, /* only written when outputDirective == fillOutput */ - const int maxOutputSize, - const limitedOutput_directive outputDirective, - const tableType_t tableType, - const dict_directive dictDirective, - const dictIssue_directive dictIssue, - const int acceleration) -{ + LZ4_stream_t_internal *const cctx, + const char *const source, + char *const dest, + const int inputSize, + int *inputConsumed, /* only written when outputDirective == fillOutput */ + const int maxOutputSize, + const limitedOutput_directive outputDirective, + const tableType_t tableType, + const dict_directive dictDirective, + const dictIssue_directive dictIssue, + const int acceleration) { int result; - const BYTE* ip = (const BYTE*) source; + const BYTE *ip = (const BYTE *) source; U32 const startIndex = cctx->currentOffset; - const BYTE* base = (const BYTE*) source - startIndex; - const BYTE* lowLimit; + const BYTE *base = (const BYTE *) source - startIndex; + const BYTE *lowLimit; - const LZ4_stream_t_internal* dictCtx = (const LZ4_stream_t_internal*) cctx->dictCtx; - const BYTE* const dictionary = + const LZ4_stream_t_internal *dictCtx = (const LZ4_stream_t_internal *) cctx->dictCtx; + const BYTE *const dictionary = dictDirective == usingDictCtx ? dictCtx->dictionary : cctx->dictionary; const U32 dictSize = dictDirective == usingDictCtx ? dictCtx->dictSize : cctx->dictSize; @@ -853,20 +845,20 @@ LZ4_FORCE_INLINE int LZ4_compress_generic_validated( int const maybe_extMem = (dictDirective == usingExtDict) || (dictDirective == usingDictCtx); U32 const prefixIdxLimit = startIndex - dictSize; /* used when dictDirective == dictSmall */ - const BYTE* const dictEnd = dictionary ? dictionary + dictSize : dictionary; - const BYTE* anchor = (const BYTE*) source; - const BYTE* const iend = ip + inputSize; - const BYTE* const mflimitPlusOne = iend - MFLIMIT + 1; - const BYTE* const matchlimit = iend - LASTLITERALS; + const BYTE *const dictEnd = dictionary ? dictionary + dictSize : dictionary; + const BYTE *anchor = (const BYTE *) source; + const BYTE *const iend = ip + inputSize; + const BYTE *const mflimitPlusOne = iend - MFLIMIT + 1; + const BYTE *const matchlimit = iend - LASTLITERALS; /* the dictCtx currentOffset is indexed on the start of the dictionary, * while a dictionary in the current context precedes the currentOffset */ - const BYTE* dictBase = !dictionary ? NULL : (dictDirective == usingDictCtx) ? - dictionary + dictSize - dictCtx->currentOffset : - dictionary + dictSize - startIndex; + const BYTE *dictBase = !dictionary ? NULL : (dictDirective == usingDictCtx) ? + dictionary + dictSize - dictCtx->currentOffset : + dictionary + dictSize - startIndex; - BYTE* op = (BYTE*) dest; - BYTE* const olimit = op + maxOutputSize; + BYTE *op = (BYTE *) dest; + BYTE *const olimit = op + maxOutputSize; U32 offset = 0; U32 forwardH; @@ -876,11 +868,11 @@ LZ4_FORCE_INLINE int LZ4_compress_generic_validated( /* If init conditions are not met, we don't have to mark stream * as having dirty context, since no action was taken yet */ if (outputDirective == fillOutput && maxOutputSize < 1) { return 0; } /* Impossible to store anything */ - if ((tableType == byU16) && (inputSize>=LZ4_64Klimit)) { return 0; } /* Size too large (not within 64K limit) */ - if (tableType==byPtr) assert(dictDirective==noDict); /* only supported use case with byPtr */ + if ((tableType == byU16) && (inputSize >= LZ4_64Klimit)) { return 0; } /* Size too large (not within 64K limit) */ + if (tableType == byPtr) assert(dictDirective == noDict); /* only supported use case with byPtr */ assert(acceleration >= 1); - lowLimit = (const BYTE*)source - (dictDirective == withPrefix64k ? dictSize : 0); + lowLimit = (const BYTE *)source - (dictDirective == withPrefix64k ? dictSize : 0); /* Update context state */ if (dictDirective == usingDictCtx) { @@ -894,21 +886,22 @@ LZ4_FORCE_INLINE int LZ4_compress_generic_validated( cctx->currentOffset += (U32)inputSize; cctx->tableType = (U32)tableType; - if (inputSizehashTable, tableType, base); - ip++; forwardH = LZ4_hashPosition(ip, tableType); + ip++; + forwardH = LZ4_hashPosition(ip, tableType); /* Main Loop */ - for ( ; ; ) { - const BYTE* match; - BYTE* token; - const BYTE* filledIp; + for (; ;) { + const BYTE *match; + BYTE *token; + const BYTE *filledIp; /* Find a match */ if (tableType == byPtr) { - const BYTE* forwardIp = ip; + const BYTE *forwardIp = ip; int step = 1; int searchMatchNb = acceleration << LZ4_skipTrigger; do { @@ -924,12 +917,12 @@ LZ4_FORCE_INLINE int LZ4_compress_generic_validated( forwardH = LZ4_hashPosition(forwardIp, tableType); LZ4_putPositionOnHash(ip, h, cctx->hashTable, tableType, base); - } while ( (match+LZ4_DISTANCE_MAX < ip) - || (LZ4_read32(match) != LZ4_read32(ip)) ); + } while ((match + LZ4_DISTANCE_MAX < ip) + || (LZ4_read32(match) != LZ4_read32(ip))); } else { /* byU32, byU16 */ - const BYTE* forwardIp = ip; + const BYTE *forwardIp = ip; int step = 1; int searchMatchNb = acceleration << LZ4_skipTrigger; do { @@ -955,9 +948,9 @@ LZ4_FORCE_INLINE int LZ4_compress_generic_validated( lowLimit = dictionary; } else { match = base + matchIndex; - lowLimit = (const BYTE*)source; + lowLimit = (const BYTE *)source; } - } else if (dictDirective==usingExtDict) { + } else if (dictDirective == usingExtDict) { if (matchIndex < startIndex) { DEBUGLOG(7, "extDict candidate: matchIndex=%5u < startIndex=%5u", matchIndex, startIndex); assert(startIndex - matchIndex >= MINMATCH); @@ -965,7 +958,7 @@ LZ4_FORCE_INLINE int LZ4_compress_generic_validated( lowLimit = dictionary; } else { match = base + matchIndex; - lowLimit = (const BYTE*)source; + lowLimit = (const BYTE *)source; } } else { /* single continuous memory segment */ match = base + matchIndex; @@ -976,8 +969,8 @@ LZ4_FORCE_INLINE int LZ4_compress_generic_validated( DEBUGLOG(7, "candidate at pos=%u (offset=%u \n", matchIndex, current - matchIndex); if ((dictIssue == dictSmall) && (matchIndex < prefixIdxLimit)) { continue; } /* match outside of valid area */ assert(matchIndex < current); - if ( ((tableType != byU16) || (LZ4_DISTANCE_MAX < LZ4_DISTANCE_ABSOLUTE_MAX)) - && (matchIndex+LZ4_DISTANCE_MAX < current)) { + if (((tableType != byU16) || (LZ4_DISTANCE_MAX < LZ4_DISTANCE_ABSOLUTE_MAX)) + && (matchIndex + LZ4_DISTANCE_MAX < current)) { continue; } /* too far */ assert((current - matchIndex) <= LZ4_DISTANCE_MAX); /* match now expected within distance */ @@ -987,38 +980,38 @@ LZ4_FORCE_INLINE int LZ4_compress_generic_validated( break; /* match found */ } - } while(1); + } while (1); } /* Catch up */ filledIp = ip; - while (((ip>anchor) & (match > lowLimit)) && (unlikely(ip[-1]==match[-1]))) { ip--; match--; } + while (((ip > anchor) & (match > lowLimit)) && (unlikely(ip[-1] == match[-1]))) { ip--; match--; } /* Encode Literals */ - { unsigned const litLength = (unsigned)(ip - anchor); + { + unsigned const litLength = (unsigned)(ip - anchor); token = op++; if ((outputDirective == limitedOutput) && /* Check output buffer overflow */ - (unlikely(op + litLength + (2 + 1 + LASTLITERALS) + (litLength/255) > olimit)) ) { + (unlikely(op + litLength + (2 + 1 + LASTLITERALS) + (litLength / 255) > olimit))) { return 0; /* cannot compress within `dst` budget. Stored indexes in hash table are nonetheless fine */ } if ((outputDirective == fillOutput) && - (unlikely(op + (litLength+240)/255 /* litlen */ + litLength /* literals */ + 2 /* offset */ + 1 /* token */ + MFLIMIT - MINMATCH /* min last literals so last match is <= end - MFLIMIT */ > olimit))) { + (unlikely(op + (litLength + 240) / 255 /* litlen */ + litLength /* literals */ + 2 /* offset */ + 1 /* token */ + MFLIMIT - MINMATCH /* min last literals so last match is <= end - MFLIMIT */ > olimit))) { op--; goto _last_literals; } if (litLength >= RUN_MASK) { int len = (int)(litLength - RUN_MASK); - *token = (RUN_MASK<= 255 ; len-=255) *op++ = 255; + *token = (RUN_MASK << ML_BITS); + for (; len >= 255 ; len -= 255) * op++ = 255; *op++ = (BYTE)len; - } - else *token = (BYTE)(litLength< olimit)) { + (op + 2 /* offset */ + 1 /* token */ + MFLIMIT - MINMATCH /* min last literals so last match is <= end - MFLIMIT */ > olimit)) { /* the match was too close to the end, rewind and go to last literals */ op = token; goto _last_literals; @@ -1039,39 +1032,42 @@ _next_match: /* Encode Offset */ if (maybe_extMem) { /* static test */ - DEBUGLOG(6, " with offset=%u (ext if > %i)", offset, (int)(ip - (const BYTE*)source)); + DEBUGLOG(6, " with offset=%u (ext if > %i)", offset, (int)(ip - (const BYTE *)source)); assert(offset <= LZ4_DISTANCE_MAX && offset > 0); - LZ4_writeLE16(op, (U16)offset); op+=2; + LZ4_writeLE16(op, (U16)offset); + op += 2; } else { DEBUGLOG(6, " with offset=%u (same segment)", (U32)(ip - match)); - assert(ip-match <= LZ4_DISTANCE_MAX); - LZ4_writeLE16(op, (U16)(ip - match)); op+=2; + assert(ip - match <= LZ4_DISTANCE_MAX); + LZ4_writeLE16(op, (U16)(ip - match)); + op += 2; } /* Encode MatchLength */ - { unsigned matchCode; + { + unsigned matchCode; - if ( (dictDirective==usingExtDict || dictDirective==usingDictCtx) - && (lowLimit==dictionary) /* match within extDict */ ) { - const BYTE* limit = ip + (dictEnd-match); + if ((dictDirective == usingExtDict || dictDirective == usingDictCtx) + && (lowLimit == dictionary) /* match within extDict */) { + const BYTE *limit = ip + (dictEnd - match); assert(dictEnd > match); if (limit > matchlimit) limit = matchlimit; - matchCode = LZ4_count(ip+MINMATCH, match+MINMATCH, limit); + matchCode = LZ4_count(ip + MINMATCH, match + MINMATCH, limit); ip += (size_t)matchCode + MINMATCH; - if (ip==limit) { - unsigned const more = LZ4_count(limit, (const BYTE*)source, matchlimit); + if (ip == limit) { + unsigned const more = LZ4_count(limit, (const BYTE *)source, matchlimit); matchCode += more; ip += more; } - DEBUGLOG(6, " with matchLength=%u starting in extDict", matchCode+MINMATCH); + DEBUGLOG(6, " with matchLength=%u starting in extDict", matchCode + MINMATCH); } else { - matchCode = LZ4_count(ip+MINMATCH, match+MINMATCH, matchlimit); + matchCode = LZ4_count(ip + MINMATCH, match + MINMATCH, matchlimit); ip += (size_t)matchCode + MINMATCH; - DEBUGLOG(6, " with matchLength=%u", matchCode+MINMATCH); + DEBUGLOG(6, " with matchLength=%u", matchCode + MINMATCH); } if ((outputDirective) && /* Check output buffer overflow */ - (unlikely(op + (1 + LASTLITERALS) + (matchCode+240)/255 > olimit)) ) { + (unlikely(op + (1 + LASTLITERALS) + (matchCode + 240) / 255 > olimit))) { if (outputDirective == fillOutput) { /* Match description too long : reduce it */ U32 newMatchCode = 15 /* in token */ - 1 /* to avoid needing a zero byte */ + ((U32)(olimit - op) - 1 - LASTLITERALS) * 255; @@ -1084,7 +1080,7 @@ _next_match: * a problem if we reuse the hash table. So we have to remove these positions * from the hash table. */ - const BYTE* ptr; + const BYTE *ptr; DEBUGLOG(5, "Clearing %u positions", (U32)(filledIp - ip)); for (ptr = ip; ptr <= filledIp; ++ptr) { U32 const h = LZ4_hashPosition(ptr, tableType); @@ -1100,10 +1096,10 @@ _next_match: *token += ML_MASK; matchCode -= ML_MASK; LZ4_write32(op, 0xFFFFFFFF); - while (matchCode >= 4*255) { - op+=4; + while (matchCode >= 4 * 255) { + op += 4; LZ4_write32(op, 0xFFFFFFFF); - matchCode -= 4*255; + matchCode -= 4 * 255; } op += matchCode / 255; *op++ = (BYTE)(matchCode % 255); @@ -1119,21 +1115,21 @@ _next_match: if (ip >= mflimitPlusOne) break; /* Fill table */ - LZ4_putPosition(ip-2, cctx->hashTable, tableType, base); + LZ4_putPosition(ip - 2, cctx->hashTable, tableType, base); /* Test next position */ if (tableType == byPtr) { match = LZ4_getPosition(ip, cctx->hashTable, tableType, base); LZ4_putPosition(ip, cctx->hashTable, tableType, base); - if ( (match+LZ4_DISTANCE_MAX >= ip) - && (LZ4_read32(match) == LZ4_read32(ip)) ) - { token=op++; *token=0; goto _next_match; } + if ((match + LZ4_DISTANCE_MAX >= ip) + && (LZ4_read32(match) == LZ4_read32(ip))) + { token = op++; *token = 0; goto _next_match; } } else { /* byU32, byU16 */ U32 const h = LZ4_hashPosition(ip, tableType); - U32 const current = (U32)(ip-base); + U32 const current = (U32)(ip - base); U32 matchIndex = LZ4_getIndexOnHash(h, cctx->hashTable, tableType); assert(matchIndex < current); if (dictDirective == usingDictCtx) { @@ -1145,29 +1141,29 @@ _next_match: matchIndex += dictDelta; } else { match = base + matchIndex; - lowLimit = (const BYTE*)source; /* required for match length counter */ + lowLimit = (const BYTE *)source; /* required for match length counter */ } - } else if (dictDirective==usingExtDict) { + } else if (dictDirective == usingExtDict) { if (matchIndex < startIndex) { match = dictBase + matchIndex; lowLimit = dictionary; /* required for match length counter */ } else { match = base + matchIndex; - lowLimit = (const BYTE*)source; /* required for match length counter */ + lowLimit = (const BYTE *)source; /* required for match length counter */ } } else { /* single memory segment */ match = base + matchIndex; } LZ4_putIndexOnHash(current, h, cctx->hashTable, tableType); assert(matchIndex < current); - if ( ((dictIssue==dictSmall) ? (matchIndex >= prefixIdxLimit) : 1) - && (((tableType==byU16) && (LZ4_DISTANCE_MAX == LZ4_DISTANCE_ABSOLUTE_MAX)) ? 1 : (matchIndex+LZ4_DISTANCE_MAX >= current)) - && (LZ4_read32(match) == LZ4_read32(ip)) ) { - token=op++; - *token=0; + if (((dictIssue == dictSmall) ? (matchIndex >= prefixIdxLimit) : 1) + && (((tableType == byU16) && (LZ4_DISTANCE_MAX == LZ4_DISTANCE_ABSOLUTE_MAX)) ? 1 : (matchIndex + LZ4_DISTANCE_MAX >= current)) + && (LZ4_read32(match) == LZ4_read32(ip))) { + token = op++; + *token = 0; if (maybe_extMem) offset = current - matchIndex; DEBUGLOG(6, "seq.start:%i, literals=%u, match.start:%i", - (int)(anchor-(const BYTE*)source), 0, (int)(ip-(const BYTE*)source)); + (int)(anchor - (const BYTE *)source), 0, (int)(ip - (const BYTE *)source)); goto _next_match; } } @@ -1179,14 +1175,15 @@ _next_match: _last_literals: /* Encode Last Literals */ - { size_t lastRun = (size_t)(iend - anchor); - if ( (outputDirective) && /* Check output buffer overflow */ - (op + lastRun + 1 + ((lastRun+255-RUN_MASK)/255) > olimit)) { + { + size_t lastRun = (size_t)(iend - anchor); + if ((outputDirective) && /* Check output buffer overflow */ + (op + lastRun + 1 + ((lastRun + 255 - RUN_MASK) / 255) > olimit)) { if (outputDirective == fillOutput) { /* adapt lastRun to fill 'dst' */ assert(olimit >= op); - lastRun = (size_t)(olimit-op) - 1; - lastRun -= (lastRun+240)/255; + lastRun = (size_t)(olimit - op) - 1; + lastRun -= (lastRun + 240) / 255; } else { assert(outputDirective == limitedOutput); return 0; /* cannot compress within `dst` budget. Stored indexes in hash table are nonetheless fine */ @@ -1195,10 +1192,10 @@ _last_literals: if (lastRun >= RUN_MASK) { size_t accumulator = lastRun - RUN_MASK; *op++ = RUN_MASK << ML_BITS; - for(; accumulator >= 255 ; accumulator-=255) *op++ = 255; + for (; accumulator >= 255 ; accumulator -= 255) * op++ = 255; *op++ = (BYTE) accumulator; } else { - *op++ = (BYTE)(lastRun< 0); DEBUGLOG(5, "LZ4_compress_generic: compressed %i bytes into %i bytes", inputSize, result); return result; @@ -1219,20 +1216,19 @@ _last_literals: * takes care of src == (NULL, 0) * and forward the rest to LZ4_compress_generic_validated */ LZ4_FORCE_INLINE int LZ4_compress_generic( - LZ4_stream_t_internal* const cctx, - const char* const src, - char* const dst, - const int srcSize, - int *inputConsumed, /* only written when outputDirective == fillOutput */ - const int dstCapacity, - const limitedOutput_directive outputDirective, - const tableType_t tableType, - const dict_directive dictDirective, - const dictIssue_directive dictIssue, - const int acceleration) -{ + LZ4_stream_t_internal *const cctx, + const char *const src, + char *const dst, + const int srcSize, + int *inputConsumed, /* only written when outputDirective == fillOutput */ + const int dstCapacity, + const limitedOutput_directive outputDirective, + const tableType_t tableType, + const dict_directive dictDirective, + const dictIssue_directive dictIssue, + const int acceleration) { DEBUGLOG(5, "LZ4_compress_generic: srcSize=%i, dstCapacity=%i", - srcSize, dstCapacity); + srcSize, dstCapacity); if ((U32)srcSize > (U32)LZ4_MAX_INPUT_SIZE) { return 0; } /* Unsupported srcSize, too large (or negative) */ if (srcSize == 0) { /* src == NULL supported if srcSize == 0 */ @@ -1242,7 +1238,7 @@ LZ4_FORCE_INLINE int LZ4_compress_generic( assert(dst != NULL); dst[0] = 0; if (outputDirective == fillOutput) { - assert (inputConsumed != NULL); + assert(inputConsumed != NULL); *inputConsumed = 0; } return 1; @@ -1250,15 +1246,14 @@ LZ4_FORCE_INLINE int LZ4_compress_generic( assert(src != NULL); return LZ4_compress_generic_validated(cctx, src, dst, srcSize, - inputConsumed, /* only written into if outputDirective == fillOutput */ - dstCapacity, outputDirective, - tableType, dictDirective, dictIssue, acceleration); + inputConsumed, /* only written into if outputDirective == fillOutput */ + dstCapacity, outputDirective, + tableType, dictDirective, dictIssue, acceleration); } -int LZ4_compress_fast_extState(void* state, const char* source, char* dest, int inputSize, int maxOutputSize, int acceleration) -{ - LZ4_stream_t_internal* const ctx = & LZ4_initStream(state, sizeof(LZ4_stream_t)) -> internal_donotuse; +int LZ4_compress_fast_extState(void *state, const char *source, char *dest, int inputSize, int maxOutputSize, int acceleration) { + LZ4_stream_t_internal *const ctx = & LZ4_initStream(state, sizeof(LZ4_stream_t)) -> internal_donotuse; assert(ctx != NULL); if (acceleration < 1) acceleration = LZ4_ACCELERATION_DEFAULT; if (acceleration > LZ4_ACCELERATION_MAX) acceleration = LZ4_ACCELERATION_MAX; @@ -1266,14 +1261,14 @@ int LZ4_compress_fast_extState(void* state, const char* source, char* dest, int if (inputSize < LZ4_64Klimit) { return LZ4_compress_generic(ctx, source, dest, inputSize, NULL, 0, notLimited, byU16, noDict, noDictIssue, acceleration); } else { - const tableType_t tableType = ((sizeof(void*)==4) && ((uptrval)source > LZ4_DISTANCE_MAX)) ? byPtr : byU32; + const tableType_t tableType = ((sizeof(void *) == 4) && ((uptrval)source > LZ4_DISTANCE_MAX)) ? byPtr : byU32; return LZ4_compress_generic(ctx, source, dest, inputSize, NULL, 0, notLimited, tableType, noDict, noDictIssue, acceleration); } } else { if (inputSize < LZ4_64Klimit) { return LZ4_compress_generic(ctx, source, dest, inputSize, NULL, maxOutputSize, limitedOutput, byU16, noDict, noDictIssue, acceleration); } else { - const tableType_t tableType = ((sizeof(void*)==4) && ((uptrval)source > LZ4_DISTANCE_MAX)) ? byPtr : byU32; + const tableType_t tableType = ((sizeof(void *) == 4) && ((uptrval)source > LZ4_DISTANCE_MAX)) ? byPtr : byU32; return LZ4_compress_generic(ctx, source, dest, inputSize, NULL, maxOutputSize, limitedOutput, tableType, noDict, noDictIssue, acceleration); } } @@ -1288,9 +1283,8 @@ int LZ4_compress_fast_extState(void* state, const char* source, char* dest, int * (see comment in lz4.h on LZ4_resetStream_fast() for a definition of * "correctly initialized"). */ -int LZ4_compress_fast_extState_fastReset(void* state, const char* src, char* dst, int srcSize, int dstCapacity, int acceleration) -{ - LZ4_stream_t_internal* ctx = &((LZ4_stream_t*)state)->internal_donotuse; +int LZ4_compress_fast_extState_fastReset(void *state, const char *src, char *dst, int srcSize, int dstCapacity, int acceleration) { + LZ4_stream_t_internal *ctx = &((LZ4_stream_t *)state)->internal_donotuse; if (acceleration < 1) acceleration = LZ4_ACCELERATION_DEFAULT; if (acceleration > LZ4_ACCELERATION_MAX) acceleration = LZ4_ACCELERATION_MAX; @@ -1304,7 +1298,7 @@ int LZ4_compress_fast_extState_fastReset(void* state, const char* src, char* dst return LZ4_compress_generic(ctx, src, dst, srcSize, NULL, 0, notLimited, tableType, noDict, noDictIssue, acceleration); } } else { - const tableType_t tableType = ((sizeof(void*)==4) && ((uptrval)src > LZ4_DISTANCE_MAX)) ? byPtr : byU32; + const tableType_t tableType = ((sizeof(void *) == 4) && ((uptrval)src > LZ4_DISTANCE_MAX)) ? byPtr : byU32; LZ4_prepareTable(ctx, srcSize, tableType); return LZ4_compress_generic(ctx, src, dst, srcSize, NULL, 0, notLimited, tableType, noDict, noDictIssue, acceleration); } @@ -1318,7 +1312,7 @@ int LZ4_compress_fast_extState_fastReset(void* state, const char* src, char* dst return LZ4_compress_generic(ctx, src, dst, srcSize, NULL, dstCapacity, limitedOutput, tableType, noDict, noDictIssue, acceleration); } } else { - const tableType_t tableType = ((sizeof(void*)==4) && ((uptrval)src > LZ4_DISTANCE_MAX)) ? byPtr : byU32; + const tableType_t tableType = ((sizeof(void *) == 4) && ((uptrval)src > LZ4_DISTANCE_MAX)) ? byPtr : byU32; LZ4_prepareTable(ctx, srcSize, tableType); return LZ4_compress_generic(ctx, src, dst, srcSize, NULL, dstCapacity, limitedOutput, tableType, noDict, noDictIssue, acceleration); } @@ -1326,15 +1320,14 @@ int LZ4_compress_fast_extState_fastReset(void* state, const char* src, char* dst } -int LZ4_compress_fast(const char* source, char* dest, int inputSize, int maxOutputSize, int acceleration) -{ +int LZ4_compress_fast(const char *source, char *dest, int inputSize, int maxOutputSize, int acceleration) { int result; #if (LZ4_HEAPMODE) - LZ4_stream_t* ctxPtr = ALLOC(sizeof(LZ4_stream_t)); /* malloc-calloc always properly aligned */ + LZ4_stream_t *ctxPtr = ALLOC(sizeof(LZ4_stream_t)); /* malloc-calloc always properly aligned */ if (ctxPtr == NULL) return 0; #else LZ4_stream_t ctx; - LZ4_stream_t* const ctxPtr = &ctx; + LZ4_stream_t *const ctxPtr = &ctx; #endif result = LZ4_compress_fast_extState(ctxPtr, source, dest, inputSize, maxOutputSize, acceleration); @@ -1345,8 +1338,7 @@ int LZ4_compress_fast(const char* source, char* dest, int inputSize, int maxOutp } -int LZ4_compress_default(const char* src, char* dst, int srcSize, int maxOutputSize) -{ +int LZ4_compress_default(const char *src, char *dst, int srcSize, int maxOutputSize) { return LZ4_compress_fast(src, dst, srcSize, maxOutputSize, 1); } @@ -1354,10 +1346,10 @@ int LZ4_compress_default(const char* src, char* dst, int srcSize, int maxOutputS /* Note!: This function leaves the stream in an unclean/broken state! * It is not safe to subsequently use the same state with a _fastReset() or * _continue() call without resetting it. */ -static int LZ4_compress_destSize_extState (LZ4_stream_t* state, const char* src, char* dst, int* srcSizePtr, int targetDstSize) -{ - void* const s = LZ4_initStream(state, sizeof (*state)); - assert(s != NULL); (void)s; +static int LZ4_compress_destSize_extState(LZ4_stream_t *state, const char *src, char *dst, int *srcSizePtr, int targetDstSize) { + void *const s = LZ4_initStream(state, sizeof(*state)); + assert(s != NULL); + (void)s; if (targetDstSize >= LZ4_compressBound(*srcSizePtr)) { /* compression success is guaranteed */ return LZ4_compress_fast_extState(state, src, dst, *srcSizePtr, targetDstSize, 1); @@ -1365,20 +1357,20 @@ static int LZ4_compress_destSize_extState (LZ4_stream_t* state, const char* src, if (*srcSizePtr < LZ4_64Klimit) { return LZ4_compress_generic(&state->internal_donotuse, src, dst, *srcSizePtr, srcSizePtr, targetDstSize, fillOutput, byU16, noDict, noDictIssue, 1); } else { - tableType_t const addrMode = ((sizeof(void*)==4) && ((uptrval)src > LZ4_DISTANCE_MAX)) ? byPtr : byU32; + tableType_t const addrMode = ((sizeof(void *) == 4) && ((uptrval)src > LZ4_DISTANCE_MAX)) ? byPtr : byU32; return LZ4_compress_generic(&state->internal_donotuse, src, dst, *srcSizePtr, srcSizePtr, targetDstSize, fillOutput, addrMode, noDict, noDictIssue, 1); - } } + } + } } -int LZ4_compress_destSize(const char* src, char* dst, int* srcSizePtr, int targetDstSize) -{ +int LZ4_compress_destSize(const char *src, char *dst, int *srcSizePtr, int targetDstSize) { #if (LZ4_HEAPMODE) - LZ4_stream_t* ctx = (LZ4_stream_t*)ALLOC(sizeof(LZ4_stream_t)); /* malloc-calloc always properly aligned */ + LZ4_stream_t *ctx = (LZ4_stream_t *)ALLOC(sizeof(LZ4_stream_t)); /* malloc-calloc always properly aligned */ if (ctx == NULL) return 0; #else LZ4_stream_t ctxBody; - LZ4_stream_t* ctx = &ctxBody; + LZ4_stream_t *ctx = &ctxBody; #endif int result = LZ4_compress_destSize_extState(ctx, src, dst, srcSizePtr, targetDstSize); @@ -1395,9 +1387,8 @@ int LZ4_compress_destSize(const char* src, char* dst, int* srcSizePtr, int targe * Streaming functions ********************************/ -LZ4_stream_t* LZ4_createStream(void) -{ - LZ4_stream_t* const lz4s = (LZ4_stream_t*)ALLOC(sizeof(LZ4_stream_t)); +LZ4_stream_t *LZ4_createStream(void) { + LZ4_stream_t *const lz4s = (LZ4_stream_t *)ALLOC(sizeof(LZ4_stream_t)); LZ4_STATIC_ASSERT(LZ4_STREAMSIZE >= sizeof(LZ4_stream_t_internal)); /* A compilation error here means LZ4_STREAMSIZE is not large enough */ DEBUGLOG(4, "LZ4_createStream %p", lz4s); if (lz4s == NULL) return NULL; @@ -1408,15 +1399,13 @@ LZ4_stream_t* LZ4_createStream(void) #ifndef _MSC_VER /* for some reason, Visual fails the aligment test on 32-bit x86 : it reports an aligment of 8-bytes, while actually aligning LZ4_stream_t on 4 bytes. */ -static size_t LZ4_stream_t_alignment(void) -{ +static size_t LZ4_stream_t_alignment(void) { typedef struct { char c; LZ4_stream_t t; } t_a; return sizeof(t_a) - sizeof(LZ4_stream_t); } #endif -LZ4_stream_t* LZ4_initStream (void* buffer, size_t size) -{ +LZ4_stream_t *LZ4_initStream(void *buffer, size_t size) { DEBUGLOG(5, "LZ4_initStream"); if (buffer == NULL) { return NULL; } if (size < sizeof(LZ4_stream_t)) { return NULL; } @@ -1426,23 +1415,21 @@ LZ4_stream_t* LZ4_initStream (void* buffer, size_t size) if (((size_t)buffer) & (LZ4_stream_t_alignment() - 1)) { return NULL; } /* alignment check */ #endif MEM_INIT(buffer, 0, sizeof(LZ4_stream_t)); - return (LZ4_stream_t*)buffer; + return (LZ4_stream_t *)buffer; } /* resetStream is now deprecated, * prefer initStream() which is more general */ -void LZ4_resetStream (LZ4_stream_t* LZ4_stream) -{ +void LZ4_resetStream(LZ4_stream_t *LZ4_stream) { DEBUGLOG(5, "LZ4_resetStream (ctx:%p)", LZ4_stream); MEM_INIT(LZ4_stream, 0, sizeof(LZ4_stream_t)); } -void LZ4_resetStream_fast(LZ4_stream_t* ctx) { +void LZ4_resetStream_fast(LZ4_stream_t *ctx) { LZ4_prepareTable(&(ctx->internal_donotuse), 0, byU32); } -int LZ4_freeStream (LZ4_stream_t* LZ4_stream) -{ +int LZ4_freeStream(LZ4_stream_t *LZ4_stream) { if (!LZ4_stream) return 0; /* support free on NULL */ DEBUGLOG(5, "LZ4_freeStream %p", LZ4_stream); FREEMEM(LZ4_stream); @@ -1451,13 +1438,12 @@ int LZ4_freeStream (LZ4_stream_t* LZ4_stream) #define HASH_UNIT sizeof(reg_t) -int LZ4_loadDict (LZ4_stream_t* LZ4_dict, const char* dictionary, int dictSize) -{ - LZ4_stream_t_internal* dict = &LZ4_dict->internal_donotuse; +int LZ4_loadDict(LZ4_stream_t *LZ4_dict, const char *dictionary, int dictSize) { + LZ4_stream_t_internal *dict = &LZ4_dict->internal_donotuse; const tableType_t tableType = byU32; - const BYTE* p = (const BYTE*)dictionary; - const BYTE* const dictEnd = p + dictSize; - const BYTE* base; + const BYTE *p = (const BYTE *)dictionary; + const BYTE *const dictEnd = p + dictSize; + const BYTE *base; DEBUGLOG(4, "LZ4_loadDict (%i bytes from %p into %p)", dictSize, dictionary, LZ4_dict); @@ -1485,17 +1471,17 @@ int LZ4_loadDict (LZ4_stream_t* LZ4_dict, const char* dictionary, int dictSize) dict->dictSize = (U32)(dictEnd - p); dict->tableType = (U32)tableType; - while (p <= dictEnd-HASH_UNIT) { + while (p <= dictEnd - HASH_UNIT) { LZ4_putPosition(p, dict->hashTable, tableType, base); - p+=3; + p += 3; } return (int)dict->dictSize; } -void LZ4_attach_dictionary(LZ4_stream_t* workingStream, const LZ4_stream_t* dictionaryStream) { - const LZ4_stream_t_internal* dictCtx = dictionaryStream == NULL ? NULL : - &(dictionaryStream->internal_donotuse); +void LZ4_attach_dictionary(LZ4_stream_t *workingStream, const LZ4_stream_t *dictionaryStream) { + const LZ4_stream_t_internal *dictCtx = dictionaryStream == NULL ? NULL : + &(dictionaryStream->internal_donotuse); DEBUGLOG(4, "LZ4_attach_dictionary (%p, %p, size %u)", workingStream, dictionaryStream, @@ -1521,17 +1507,16 @@ void LZ4_attach_dictionary(LZ4_stream_t* workingStream, const LZ4_stream_t* dict } -static void LZ4_renormDictT(LZ4_stream_t_internal* LZ4_dict, int nextSize) -{ +static void LZ4_renormDictT(LZ4_stream_t_internal *LZ4_dict, int nextSize) { assert(nextSize >= 0); if (LZ4_dict->currentOffset + (unsigned)nextSize > 0x80000000) { /* potential ptrdiff_t overflow (32-bits mode) */ /* rescale hash table */ U32 const delta = LZ4_dict->currentOffset - 64 KB; - const BYTE* dictEnd = LZ4_dict->dictionary + LZ4_dict->dictSize; + const BYTE *dictEnd = LZ4_dict->dictionary + LZ4_dict->dictSize; int i; DEBUGLOG(4, "LZ4_renormDictT"); - for (i=0; ihashTable[i] < delta) LZ4_dict->hashTable[i]=0; + for (i = 0; i < LZ4_HASH_SIZE_U32; i++) { + if (LZ4_dict->hashTable[i] < delta) LZ4_dict->hashTable[i] = 0; else LZ4_dict->hashTable[i] -= delta; } LZ4_dict->currentOffset = 64 KB; @@ -1541,14 +1526,13 @@ static void LZ4_renormDictT(LZ4_stream_t_internal* LZ4_dict, int nextSize) } -int LZ4_compress_fast_continue (LZ4_stream_t* LZ4_stream, - const char* source, char* dest, - int inputSize, int maxOutputSize, - int acceleration) -{ +int LZ4_compress_fast_continue(LZ4_stream_t *LZ4_stream, + const char *source, char *dest, + int inputSize, int maxOutputSize, + int acceleration) { const tableType_t tableType = byU32; - LZ4_stream_t_internal* streamPtr = &LZ4_stream->internal_donotuse; - const BYTE* dictEnd = streamPtr->dictionary + streamPtr->dictSize; + LZ4_stream_t_internal *streamPtr = &LZ4_stream->internal_donotuse; + const BYTE *dictEnd = streamPtr->dictionary + streamPtr->dictSize; DEBUGLOG(5, "LZ4_compress_fast_continue (inputSize=%i)", inputSize); @@ -1557,16 +1541,17 @@ int LZ4_compress_fast_continue (LZ4_stream_t* LZ4_stream, if (acceleration > LZ4_ACCELERATION_MAX) acceleration = LZ4_ACCELERATION_MAX; /* invalidate tiny dictionaries */ - if ( (streamPtr->dictSize-1 < 4-1) /* intentional underflow */ - && (dictEnd != (const BYTE*)source) ) { + if ((streamPtr->dictSize - 1 < 4 - 1) /* intentional underflow */ + && (dictEnd != (const BYTE *)source)) { DEBUGLOG(5, "LZ4_compress_fast_continue: dictSize(%u) at addr:%p is too small", streamPtr->dictSize, streamPtr->dictionary); streamPtr->dictSize = 0; - streamPtr->dictionary = (const BYTE*)source; - dictEnd = (const BYTE*)source; + streamPtr->dictionary = (const BYTE *)source; + dictEnd = (const BYTE *)source; } /* Check overlapping input/dictionary space */ - { const BYTE* sourceEnd = (const BYTE*) source + inputSize; + { + const BYTE *sourceEnd = (const BYTE *) source + inputSize; if ((sourceEnd > streamPtr->dictionary) && (sourceEnd < dictEnd)) { streamPtr->dictSize = (U32)(dictEnd - sourceEnd); if (streamPtr->dictSize > 64 KB) streamPtr->dictSize = 64 KB; @@ -1576,7 +1561,7 @@ int LZ4_compress_fast_continue (LZ4_stream_t* LZ4_stream, } /* prefix mode : source data follows dictionary */ - if (dictEnd == (const BYTE*)source) { + if (dictEnd == (const BYTE *)source) { if ((streamPtr->dictSize < 64 KB) && (streamPtr->dictSize < streamPtr->currentOffset)) return LZ4_compress_generic(streamPtr, source, dest, inputSize, NULL, maxOutputSize, limitedOutput, tableType, withPrefix64k, dictSmall, acceleration); else @@ -1584,7 +1569,8 @@ int LZ4_compress_fast_continue (LZ4_stream_t* LZ4_stream, } /* external dictionary mode */ - { int result; + { + int result; if (streamPtr->dictCtx) { /* We depend here on the fact that dictCtx'es (produced by * LZ4_loadDict) guarantee that their tables contain no references @@ -1609,7 +1595,7 @@ int LZ4_compress_fast_continue (LZ4_stream_t* LZ4_stream, result = LZ4_compress_generic(streamPtr, source, dest, inputSize, NULL, maxOutputSize, limitedOutput, tableType, usingExtDict, noDictIssue, acceleration); } } - streamPtr->dictionary = (const BYTE*)source; + streamPtr->dictionary = (const BYTE *)source; streamPtr->dictSize = (U32)inputSize; return result; } @@ -1617,9 +1603,8 @@ int LZ4_compress_fast_continue (LZ4_stream_t* LZ4_stream, /* Hidden debug function, to force-test external dictionary mode */ -int LZ4_compress_forceExtDict (LZ4_stream_t* LZ4_dict, const char* source, char* dest, int srcSize) -{ - LZ4_stream_t_internal* streamPtr = &LZ4_dict->internal_donotuse; +int LZ4_compress_forceExtDict(LZ4_stream_t *LZ4_dict, const char *source, char *dest, int srcSize) { + LZ4_stream_t_internal *streamPtr = &LZ4_dict->internal_donotuse; int result; LZ4_renormDictT(streamPtr, srcSize); @@ -1630,7 +1615,7 @@ int LZ4_compress_forceExtDict (LZ4_stream_t* LZ4_dict, const char* source, char* result = LZ4_compress_generic(streamPtr, source, dest, srcSize, NULL, 0, notLimited, byU32, usingExtDict, noDictIssue, 1); } - streamPtr->dictionary = (const BYTE*)source; + streamPtr->dictionary = (const BYTE *)source; streamPtr->dictSize = (U32)srcSize; return result; @@ -1644,17 +1629,16 @@ int LZ4_compress_forceExtDict (LZ4_stream_t* LZ4_dict, const char* source, char* * dictionary is immediately usable, you can therefore call LZ4_compress_fast_continue(). * Return : saved dictionary size in bytes (necessarily <= dictSize), or 0 if error. */ -int LZ4_saveDict (LZ4_stream_t* LZ4_dict, char* safeBuffer, int dictSize) -{ - LZ4_stream_t_internal* const dict = &LZ4_dict->internal_donotuse; - const BYTE* const previousDictEnd = dict->dictionary + dict->dictSize; +int LZ4_saveDict(LZ4_stream_t *LZ4_dict, char *safeBuffer, int dictSize) { + LZ4_stream_t_internal *const dict = &LZ4_dict->internal_donotuse; + const BYTE *const previousDictEnd = dict->dictionary + dict->dictSize; if ((U32)dictSize > 64 KB) { dictSize = 64 KB; } /* useless to define a dictionary > 64 KB */ if ((U32)dictSize > dict->dictSize) { dictSize = (int)dict->dictSize; } memmove(safeBuffer, previousDictEnd - dictSize, dictSize); - dict->dictionary = (const BYTE*)safeBuffer; + dict->dictionary = (const BYTE *)safeBuffer; dict->dictSize = (U32)dictSize; return dictSize; @@ -1682,29 +1666,28 @@ typedef enum { decode_full_block = 0, partial_decode = 1 } earlyEnd_directive; */ typedef enum { loop_error = -2, initial_error = -1, ok = 0 } variable_length_error; LZ4_FORCE_INLINE unsigned -read_variable_length(const BYTE**ip, const BYTE* lencheck, int loop_check, int initial_check, variable_length_error* error) -{ - U32 length = 0; - U32 s; - if (initial_check && unlikely((*ip) >= lencheck)) { /* overflow detection */ - *error = initial_error; - return length; - } - do { - s = **ip; - (*ip)++; - length += s; - if (loop_check && unlikely((*ip) >= lencheck)) { /* overflow detection */ - *error = loop_error; - return length; +read_variable_length(const BYTE **ip, const BYTE *lencheck, int loop_check, int initial_check, variable_length_error *error) { + U32 length = 0; + U32 s; + if (initial_check && unlikely((*ip) >= lencheck)) { /* overflow detection */ + *error = initial_error; + return length; } - } while (s==255); + do { + s = **ip; + (*ip)++; + length += s; + if (loop_check && unlikely((*ip) >= lencheck)) { /* overflow detection */ + *error = loop_error; + return length; + } + } while (s == 255); - return length; + return length; } -int LZ4_decompress_generic(const char* const src, char* const dst, int srcSize, int outputSize, endCondition_directive endOnInput, earlyEnd_directive partialDecoding, - dict_directive dict, const BYTE* const lowPrefix, const BYTE* const dictStart, const size_t dictSize ); +int LZ4_decompress_generic(const char *const src, char *const dst, int srcSize, int outputSize, endCondition_directive endOnInput, earlyEnd_directive partialDecoding, + dict_directive dict, const BYTE *const lowPrefix, const BYTE *const dictStart, const size_t dictSize); /*! LZ4_decompress_generic() : * This generic decompression function covers all use cases. @@ -1714,39 +1697,39 @@ int LZ4_decompress_generic(const char* const src, char* const dst, int srcSize, */ int LZ4_decompress_generic( - const char* const src, - char* const dst, - int srcSize, - int outputSize, /* If endOnInput==endOnInputSize, this value is `dstCapacity` */ + const char *const src, + char *const dst, + int srcSize, + int outputSize, /* If endOnInput==endOnInputSize, this value is `dstCapacity` */ - endCondition_directive endOnInput, /* endOnOutputSize, endOnInputSize */ - earlyEnd_directive partialDecoding, /* full, partial */ - dict_directive dict, /* noDict, withPrefix64k, usingExtDict */ - const BYTE* const lowPrefix, /* always <= dst, == dst when no prefix */ - const BYTE* const dictStart, /* only if dict==usingExtDict */ - const size_t dictSize /* note : = 0 if noDict */ - ) -{ + endCondition_directive endOnInput, /* endOnOutputSize, endOnInputSize */ + earlyEnd_directive partialDecoding, /* full, partial */ + dict_directive dict, /* noDict, withPrefix64k, usingExtDict */ + const BYTE *const lowPrefix, /* always <= dst, == dst when no prefix */ + const BYTE *const dictStart, /* only if dict==usingExtDict */ + const size_t dictSize /* note : = 0 if noDict */ +) { if (src == NULL) { return -1; } - { const BYTE* ip = (const BYTE*) src; - const BYTE* const iend = ip + srcSize; + { + const BYTE *ip = (const BYTE *) src; + const BYTE *const iend = ip + srcSize; - BYTE* op = (BYTE*) dst; - BYTE* const oend = op + outputSize; - BYTE* cpy; + BYTE *op = (BYTE *) dst; + BYTE *const oend = op + outputSize; + BYTE *cpy; - const BYTE* const dictEnd = (dictStart == NULL) ? NULL : dictStart + dictSize; + const BYTE *const dictEnd = (dictStart == NULL) ? NULL : dictStart + dictSize; - const int safeDecode = (endOnInput==endOnInputSize); + const int safeDecode = (endOnInput == endOnInputSize); const int checkOffset = ((safeDecode) && (dictSize < (int)(64 KB))); /* Set up the "end" pointers for the shortcut. */ - const BYTE* const shortiend = iend - (endOnInput ? 14 : 8) /*maxLL*/ - 2 /*offset*/; - const BYTE* const shortoend = oend - (endOnInput ? 14 : 8) /*maxLL*/ - 18 /*maxML*/; + const BYTE *const shortiend = iend - (endOnInput ? 14 : 8) /*maxLL*/ - 2 /*offset*/; + const BYTE *const shortoend = oend - (endOnInput ? 14 : 8) /*maxLL*/ - 18 /*maxML*/; - const BYTE* match; + const BYTE *match; size_t offset; unsigned token; size_t length; @@ -1756,15 +1739,15 @@ LZ4_decompress_generic( /* Special cases */ assert(lowPrefix <= op); - if ((endOnInput) && (unlikely(outputSize==0))) { + if ((endOnInput) && (unlikely(outputSize == 0))) { /* Empty output buffer */ if (partialDecoding) return 0; - return ((srcSize==1) && (*ip==0)) ? 0 : -1; + return ((srcSize == 1) && (*ip == 0)) ? 0 : -1; } - if ((!endOnInput) && (unlikely(outputSize==0))) { return (*ip==0 ? 1 : -1); } - if ((endOnInput) && unlikely(srcSize==0)) { return -1; } + if ((!endOnInput) && (unlikely(outputSize == 0))) { return (*ip == 0 ? 1 : -1); } + if ((endOnInput) && unlikely(srcSize == 0)) { return -1; } - /* Currently the fast loop shows a regression on qualcomm arm chips. */ + /* Currently the fast loop shows a regression on qualcomm arm chips. */ #if LZ4_FAST_DEC_LOOP if ((oend - op) < FASTLOOP_SAFE_DISTANCE) { DEBUGLOG(6, "skip fast decode loop"); @@ -1784,42 +1767,45 @@ LZ4_decompress_generic( /* decode literal length */ if (length == RUN_MASK) { variable_length_error error = ok; - length += read_variable_length(&ip, iend-RUN_MASK, endOnInput, endOnInput, &error); + length += read_variable_length(&ip, iend - RUN_MASK, endOnInput, endOnInput, &error); if (error == initial_error) { goto _output_error; } - if ((safeDecode) && unlikely((uptrval)(op)+length<(uptrval)(op))) { goto _output_error; } /* overflow detection */ - if ((safeDecode) && unlikely((uptrval)(ip)+length<(uptrval)(ip))) { goto _output_error; } /* overflow detection */ + if ((safeDecode) && unlikely((uptrval)(op) + length < (uptrval)(op))) { goto _output_error; } /* overflow detection */ + if ((safeDecode) && unlikely((uptrval)(ip) + length < (uptrval)(ip))) { goto _output_error; } /* overflow detection */ /* copy literals */ - cpy = op+length; + cpy = op + length; LZ4_STATIC_ASSERT(MFLIMIT >= WILDCOPYLENGTH); if (endOnInput) { /* LZ4_decompress_safe() */ - if ((cpy>oend-32) || (ip+length>iend-32)) { goto safe_literal_copy; } + if ((cpy > oend - 32) || (ip + length > iend - 32)) { goto safe_literal_copy; } LZ4_wildCopy32(op, ip, cpy); } else { /* LZ4_decompress_fast() */ - if (cpy>oend-8) { goto safe_literal_copy; } + if (cpy > oend - 8) { goto safe_literal_copy; } LZ4_wildCopy8(op, ip, cpy); /* LZ4_decompress_fast() cannot copy more than 8 bytes at a time : * it doesn't know input length, and only relies on end-of-block properties */ } - ip += length; op = cpy; + ip += length; + op = cpy; } else { - cpy = op+length; + cpy = op + length; if (endOnInput) { /* LZ4_decompress_safe() */ DEBUGLOG(7, "copy %u bytes in a 16-bytes stripe", (unsigned)length); /* We don't need to check oend, since we check it once for each loop below */ - if (ip > iend-(16 + 1/*max lit + offset + nextToken*/)) { goto safe_literal_copy; } + if (ip > iend - (16 + 1/*max lit + offset + nextToken*/)) { goto safe_literal_copy; } /* Literals can only be 14, but hope compilers optimize if we copy by a register size */ LZ4_memcpy(op, ip, 16); } else { /* LZ4_decompress_fast() */ /* LZ4_decompress_fast() cannot copy more than 8 bytes at a time : * it doesn't know input length, and relies on end-of-block properties */ LZ4_memcpy(op, ip, 8); - if (length > 8) { LZ4_memcpy(op+8, ip+8, 8); } + if (length > 8) { LZ4_memcpy(op + 8, ip + 8, 8); } } - ip += length; op = cpy; + ip += length; + op = cpy; } /* get offset */ - offset = LZ4_readLE16(ip); ip+=2; + offset = LZ4_readLE16(ip); + ip += 2; match = op - offset; assert(match <= op); @@ -1827,11 +1813,11 @@ LZ4_decompress_generic( length = token & ML_MASK; if (length == ML_MASK) { - variable_length_error error = ok; - if ((checkOffset) && (unlikely(match + dictSize < lowPrefix))) { goto _output_error; } /* Error : offset outside buffers */ - length += read_variable_length(&ip, iend - LASTLITERALS + 1, endOnInput, 0, &error); - if (error != ok) { goto _output_error; } - if ((safeDecode) && unlikely((uptrval)(op)+length<(uptrval)op)) { goto _output_error; } /* overflow detection */ + variable_length_error error = ok; + if ((checkOffset) && (unlikely(match + dictSize < lowPrefix))) { goto _output_error; } /* Error : offset outside buffers */ + length += read_variable_length(&ip, iend - LASTLITERALS + 1, endOnInput, 0, &error); + if (error != ok) { goto _output_error; } + if ((safeDecode) && unlikely((uptrval)(op) + length < (uptrval)op)) { goto _output_error; } /* overflow detection */ length += MINMATCH; if (op + length >= oend - FASTLOOP_SAFE_DISTANCE) { goto safe_match_copy; @@ -1850,26 +1836,29 @@ LZ4_decompress_generic( assert(op + 18 <= oend); LZ4_memcpy(op, match, 8); - LZ4_memcpy(op+8, match+8, 8); - LZ4_memcpy(op+16, match+16, 2); + LZ4_memcpy(op + 8, match + 8, 8); + LZ4_memcpy(op + 16, match + 16, 2); op += length; continue; - } } } + } + } + } if ((checkOffset) && (unlikely(match + dictSize < lowPrefix))) { goto _output_error; } /* Error : offset outside buffers */ /* match starting within external dictionary */ - if ((dict==usingExtDict) && (match < lowPrefix)) { - if (unlikely(op+length > oend-LASTLITERALS)) { + if ((dict == usingExtDict) && (match < lowPrefix)) { + if (unlikely(op + length > oend - LASTLITERALS)) { if (partialDecoding) { DEBUGLOG(7, "partialDecoding: dictionary match, close to dstEnd"); - length = MIN(length, (size_t)(oend-op)); + length = MIN(length, (size_t)(oend - op)); } else { goto _output_error; /* end-of-block condition violated */ - } } + } + } - if (length <= (size_t)(lowPrefix-match)) { + if (length <= (size_t)(lowPrefix - match)) { /* match fits entirely within external dictionary : just copy */ - memmove(op, dictEnd - (lowPrefix-match), length); + memmove(op, dictEnd - (lowPrefix - match), length); op += length; } else { /* match stretches into both external dictionary and current block */ @@ -1878,21 +1867,22 @@ LZ4_decompress_generic( LZ4_memcpy(op, dictEnd - copySize, copySize); op += copySize; if (restSize > (size_t)(op - lowPrefix)) { /* overlap copy */ - BYTE* const endOfMatch = op + restSize; - const BYTE* copyFrom = lowPrefix; + BYTE *const endOfMatch = op + restSize; + const BYTE *copyFrom = lowPrefix; while (op < endOfMatch) { *op++ = *copyFrom++; } } else { LZ4_memcpy(op, lowPrefix, restSize); op += restSize; - } } + } + } continue; } /* copy match within block */ cpy = op + length; - assert((op <= oend) && (oend-op >= 32)); - if (unlikely(offset<16)) { + assert((op <= oend) && (oend - op >= 32)); + if (unlikely(offset < 16)) { LZ4_memcpy_using_offset(op, match, cpy, offset); } else { LZ4_wildCopy32(op, match, cpy); @@ -1900,7 +1890,7 @@ LZ4_decompress_generic( op = cpy; /* wildcopy correction */ } - safe_decode: +safe_decode: #endif /* Main Loop : decode remaining sequences where output < FASTLOOP_SAFE_DISTANCE */ @@ -1919,28 +1909,30 @@ LZ4_decompress_generic( * those 18 bytes earlier, upon entering the shortcut (in other words, * there is a combined check for both stages). */ - if ( (endOnInput ? length != RUN_MASK : length <= 8) - /* strictly "less than" on input, to re-enter the loop with at least one byte */ - && likely((endOnInput ? ip < shortiend : 1) & (op <= shortoend)) ) { + if ((endOnInput ? length != RUN_MASK : length <= 8) + /* strictly "less than" on input, to re-enter the loop with at least one byte */ + && likely((endOnInput ? ip < shortiend : 1) & (op <= shortoend))) { /* Copy the literals */ LZ4_memcpy(op, ip, endOnInput ? 16 : 8); - op += length; ip += length; + op += length; + ip += length; /* The second stage: prepare for match copying, decode full info. * If it doesn't work out, the info won't be wasted. */ length = token & ML_MASK; /* match length */ - offset = LZ4_readLE16(ip); ip += 2; + offset = LZ4_readLE16(ip); + ip += 2; match = op - offset; assert(match <= op); /* check overflow */ /* Do not deal with overlapping matches. */ - if ( (length != ML_MASK) - && (offset >= 8) - && (dict==withPrefix64k || match >= lowPrefix) ) { + if ((length != ML_MASK) + && (offset >= 8) + && (dict == withPrefix64k || match >= lowPrefix)) { /* Copy the match. */ LZ4_memcpy(op + 0, match + 0, 8); LZ4_memcpy(op + 8, match + 8, 8); - LZ4_memcpy(op +16, match +16, 2); + LZ4_memcpy(op + 16, match + 16, 2); op += length + MINMATCH; /* Both stages worked, load the next token. */ continue; @@ -1954,21 +1946,20 @@ LZ4_decompress_generic( /* decode literal length */ if (length == RUN_MASK) { variable_length_error error = ok; - length += read_variable_length(&ip, iend-RUN_MASK, endOnInput, endOnInput, &error); + length += read_variable_length(&ip, iend - RUN_MASK, endOnInput, endOnInput, &error); if (error == initial_error) { goto _output_error; } - if ((safeDecode) && unlikely((uptrval)(op)+length<(uptrval)(op))) { goto _output_error; } /* overflow detection */ - if ((safeDecode) && unlikely((uptrval)(ip)+length<(uptrval)(ip))) { goto _output_error; } /* overflow detection */ + if ((safeDecode) && unlikely((uptrval)(op) + length < (uptrval)(op))) { goto _output_error; } /* overflow detection */ + if ((safeDecode) && unlikely((uptrval)(ip) + length < (uptrval)(ip))) { goto _output_error; } /* overflow detection */ } /* copy literals */ - cpy = op+length; + cpy = op + length; #if LZ4_FAST_DEC_LOOP - safe_literal_copy: +safe_literal_copy: #endif LZ4_STATIC_ASSERT(MFLIMIT >= WILDCOPYLENGTH); - if ( ((endOnInput) && ((cpy>oend-MFLIMIT) || (ip+length>iend-(2+1+LASTLITERALS))) ) - || ((!endOnInput) && (cpy>oend-WILDCOPYLENGTH)) ) - { + if (((endOnInput) && ((cpy > oend - MFLIMIT) || (ip + length > iend - (2 + 1 + LASTLITERALS)))) + || ((!endOnInput) && (cpy > oend - WILDCOPYLENGTH))) { /* We've either hit the input parsing restriction or the output parsing restriction. * In the normal scenario, decoding a full block, it must be the last sequence, * otherwise it's an error (invalid input or dimensions). @@ -1986,8 +1977,8 @@ LZ4_decompress_generic( /* Finishing in the middle of a literals segment, * due to lack of input. */ - if (ip+length > iend) { - length = (size_t)(iend-ip); + if (ip + length > iend) { + length = (size_t)(iend - ip); cpy = op + length; } /* Finishing in the middle of a literals segment, @@ -1995,18 +1986,18 @@ LZ4_decompress_generic( */ if (cpy > oend) { cpy = oend; - assert(op<=oend); - length = (size_t)(oend-op); + assert(op <= oend); + length = (size_t)(oend - op); } } else { /* We must be on the last sequence because of the parsing limitations so check * that we exactly regenerate the original size (must be exact when !endOnInput). */ if ((!endOnInput) && (cpy != oend)) { goto _output_error; } - /* We must be on the last sequence (or invalid) because of the parsing limitations - * so check that we exactly consume the input and don't overrun the output buffer. - */ - if ((endOnInput) && ((ip+length != iend) || (cpy > oend))) { goto _output_error; } + /* We must be on the last sequence (or invalid) because of the parsing limitations + * so check that we exactly consume the input and don't overrun the output buffer. + */ + if ((endOnInput) && ((ip + length != iend) || (cpy > oend))) { goto _output_error; } } memmove(op, ip, length); /* supports overlapping memory regions; only matters for in-place decompression scenarios */ ip += length; @@ -2016,44 +2007,46 @@ LZ4_decompress_generic( * filled the output buffer or * can't proceed with reading an offset for following match. */ - if (!partialDecoding || (cpy == oend) || (ip >= (iend-2))) { + if (!partialDecoding || (cpy == oend) || (ip >= (iend - 2))) { break; } } else { LZ4_wildCopy8(op, ip, cpy); /* may overwrite up to WILDCOPYLENGTH beyond cpy */ - ip += length; op = cpy; + ip += length; + op = cpy; } /* get offset */ - offset = LZ4_readLE16(ip); ip+=2; + offset = LZ4_readLE16(ip); + ip += 2; match = op - offset; /* get matchlength */ length = token & ML_MASK; - _copy_match: +_copy_match: if (length == ML_MASK) { - variable_length_error error = ok; - length += read_variable_length(&ip, iend - LASTLITERALS + 1, endOnInput, 0, &error); - if (error != ok) goto _output_error; - if ((safeDecode) && unlikely((uptrval)(op)+length<(uptrval)op)) goto _output_error; /* overflow detection */ + variable_length_error error = ok; + length += read_variable_length(&ip, iend - LASTLITERALS + 1, endOnInput, 0, &error); + if (error != ok) goto _output_error; + if ((safeDecode) && unlikely((uptrval)(op) + length < (uptrval)op)) goto _output_error; /* overflow detection */ } length += MINMATCH; #if LZ4_FAST_DEC_LOOP - safe_match_copy: +safe_match_copy: #endif if ((checkOffset) && (unlikely(match + dictSize < lowPrefix))) goto _output_error; /* Error : offset outside buffers */ /* match starting within external dictionary */ - if ((dict==usingExtDict) && (match < lowPrefix)) { - if (unlikely(op+length > oend-LASTLITERALS)) { - if (partialDecoding) length = MIN(length, (size_t)(oend-op)); + if ((dict == usingExtDict) && (match < lowPrefix)) { + if (unlikely(op + length > oend - LASTLITERALS)) { + if (partialDecoding) length = MIN(length, (size_t)(oend - op)); else goto _output_error; /* doesn't respect parsing restriction */ } - if (length <= (size_t)(lowPrefix-match)) { + if (length <= (size_t)(lowPrefix - match)) { /* match fits entirely within external dictionary : just copy */ - memmove(op, dictEnd - (lowPrefix-match), length); + memmove(op, dictEnd - (lowPrefix - match), length); op += length; } else { /* match stretches into both external dictionary and current block */ @@ -2062,13 +2055,14 @@ LZ4_decompress_generic( LZ4_memcpy(op, dictEnd - copySize, copySize); op += copySize; if (restSize > (size_t)(op - lowPrefix)) { /* overlap copy */ - BYTE* const endOfMatch = op + restSize; - const BYTE* copyFrom = lowPrefix; + BYTE *const endOfMatch = op + restSize; + const BYTE *copyFrom = lowPrefix; while (op < endOfMatch) *op++ = *copyFrom++; } else { LZ4_memcpy(op, lowPrefix, restSize); op += restSize; - } } + } + } continue; } assert(match >= lowPrefix); @@ -2077,11 +2071,11 @@ LZ4_decompress_generic( cpy = op + length; /* partialDecoding : may end anywhere within the block */ - assert(op<=oend); - if (partialDecoding && (cpy > oend-MATCH_SAFEGUARD_DISTANCE)) { - size_t const mlen = MIN(length, (size_t)(oend-op)); - const BYTE* const matchEnd = match + mlen; - BYTE* const copyEnd = op + mlen; + assert(op <= oend); + if (partialDecoding && (cpy > oend - MATCH_SAFEGUARD_DISTANCE)) { + size_t const mlen = MIN(length, (size_t)(oend - op)); + const BYTE *const matchEnd = match + mlen; + BYTE *const copyEnd = op + mlen; if (matchEnd > op) { /* overlap copy */ while (op < copyEnd) { *op++ = *match++; } } else { @@ -2092,14 +2086,14 @@ LZ4_decompress_generic( continue; } - if (unlikely(offset<8)) { + if (unlikely(offset < 8)) { LZ4_write32(op, 0); /* silence msan warning when offset==0 */ op[0] = match[0]; op[1] = match[1]; op[2] = match[2]; op[3] = match[3]; match += inc32table[offset]; - LZ4_memcpy(op+4, match, 4); + LZ4_memcpy(op + 4, match, 4); match -= dec64table[offset]; } else { LZ4_memcpy(op, match, 8); @@ -2107,9 +2101,9 @@ LZ4_decompress_generic( } op += 8; - if (unlikely(cpy > oend-MATCH_SAFEGUARD_DISTANCE)) { - BYTE* const oCopyLimit = oend - (WILDCOPYLENGTH-1); - if (cpy > oend-LASTLITERALS) { goto _output_error; } /* Error : last LASTLITERALS bytes must be literals (uncompressed) */ + if (unlikely(cpy > oend - MATCH_SAFEGUARD_DISTANCE)) { + BYTE *const oCopyLimit = oend - (WILDCOPYLENGTH - 1); + if (cpy > oend - LASTLITERALS) { goto _output_error; } /* Error : last LASTLITERALS bytes must be literals (uncompressed) */ if (op < oCopyLimit) { LZ4_wildCopy8(op, match, oCopyLimit); match += oCopyLimit - op; @@ -2118,22 +2112,22 @@ LZ4_decompress_generic( while (op < cpy) { *op++ = *match++; } } else { LZ4_memcpy(op, match, 8); - if (length > 16) { LZ4_wildCopy8(op+8, match+8, cpy); } + if (length > 16) { LZ4_wildCopy8(op + 8, match + 8, cpy); } } op = cpy; /* wildcopy correction */ } /* end of decoding */ if (endOnInput) { - DEBUGLOG(5, "decoded %i bytes", (int) (((char*)op)-dst)); - return (int) (((char*)op)-dst); /* Nb of output bytes decoded */ - } else { - return (int) (((const char*)ip)-src); /* Nb of input bytes read */ - } + DEBUGLOG(5, "decoded %i bytes", (int)(((char *)op) - dst)); + return (int)(((char *)op) - dst); /* Nb of output bytes decoded */ + } else { + return (int)(((const char *)ip) - src); /* Nb of input bytes read */ + } /* Overflow error detected */ - _output_error: - return (int) (-(((const char*)ip)-src))-1; +_output_error: + return (int)(-(((const char *)ip) - src)) - 1; } } @@ -2141,74 +2135,66 @@ LZ4_decompress_generic( /*===== Instantiate the API decoding functions. =====*/ LZ4_FORCE_O2_GCC_PPC64LE -int LZ4_decompress_safe(const char* source, char* dest, int compressedSize, int maxDecompressedSize) -{ +int LZ4_decompress_safe(const char *source, char *dest, int compressedSize, int maxDecompressedSize) { return LZ4_decompress_generic(source, dest, compressedSize, maxDecompressedSize, endOnInputSize, decode_full_block, noDict, - (BYTE*)dest, NULL, 0); + (BYTE *)dest, NULL, 0); } LZ4_FORCE_O2_GCC_PPC64LE -int LZ4_decompress_safe_partial(const char* src, char* dst, int compressedSize, int targetOutputSize, int dstCapacity) -{ +int LZ4_decompress_safe_partial(const char *src, char *dst, int compressedSize, int targetOutputSize, int dstCapacity) { dstCapacity = MIN(targetOutputSize, dstCapacity); return LZ4_decompress_generic(src, dst, compressedSize, dstCapacity, endOnInputSize, partial_decode, - noDict, (BYTE*)dst, NULL, 0); + noDict, (BYTE *)dst, NULL, 0); } LZ4_FORCE_O2_GCC_PPC64LE -int LZ4_decompress_fast(const char* source, char* dest, int originalSize) -{ +int LZ4_decompress_fast(const char *source, char *dest, int originalSize) { return LZ4_decompress_generic(source, dest, 0, originalSize, endOnOutputSize, decode_full_block, withPrefix64k, - (BYTE*)dest - 64 KB, NULL, 0); + (BYTE *)dest - 64 KB, NULL, 0); } /*===== Instantiate a few more decoding cases, used more than once. =====*/ LZ4_FORCE_O2_GCC_PPC64LE /* Exported, an obsolete API function. */ -int LZ4_decompress_safe_withPrefix64k(const char* source, char* dest, int compressedSize, int maxOutputSize) -{ +int LZ4_decompress_safe_withPrefix64k(const char *source, char *dest, int compressedSize, int maxOutputSize) { return LZ4_decompress_generic(source, dest, compressedSize, maxOutputSize, endOnInputSize, decode_full_block, withPrefix64k, - (BYTE*)dest - 64 KB, NULL, 0); + (BYTE *)dest - 64 KB, NULL, 0); } /* Another obsolete API function, paired with the previous one. */ -int LZ4_decompress_fast_withPrefix64k(const char* source, char* dest, int originalSize) -{ +int LZ4_decompress_fast_withPrefix64k(const char *source, char *dest, int originalSize) { /* LZ4_decompress_fast doesn't validate match offsets, * and thus serves well with any prefixed dictionary. */ return LZ4_decompress_fast(source, dest, originalSize); } LZ4_FORCE_O2_GCC_PPC64LE -static int LZ4_decompress_safe_withSmallPrefix(const char* source, char* dest, int compressedSize, int maxOutputSize, - size_t prefixSize) -{ +static int LZ4_decompress_safe_withSmallPrefix(const char *source, char *dest, int compressedSize, int maxOutputSize, + size_t prefixSize) { return LZ4_decompress_generic(source, dest, compressedSize, maxOutputSize, endOnInputSize, decode_full_block, noDict, - (BYTE*)dest-prefixSize, NULL, 0); + (BYTE *)dest - prefixSize, NULL, 0); } LZ4_FORCE_O2_GCC_PPC64LE -int LZ4_decompress_safe_forceExtDict(const char* source, char* dest, +int LZ4_decompress_safe_forceExtDict(const char *source, char *dest, int compressedSize, int maxOutputSize, - const void* dictStart, size_t dictSize) -{ + const void *dictStart, size_t dictSize) { return LZ4_decompress_generic(source, dest, compressedSize, maxOutputSize, endOnInputSize, decode_full_block, usingExtDict, - (BYTE*)dest, (const BYTE*)dictStart, dictSize); + (BYTE *)dest, (const BYTE *)dictStart, dictSize); } LZ4_FORCE_O2_GCC_PPC64LE -static int LZ4_decompress_fast_extDict(const char* source, char* dest, int originalSize, - const void* dictStart, size_t dictSize) -{ +static int LZ4_decompress_fast_extDict(const char *source, char *dest, int originalSize, + const void *dictStart, size_t dictSize) { return LZ4_decompress_generic(source, dest, 0, originalSize, endOnOutputSize, decode_full_block, usingExtDict, - (BYTE*)dest, (const BYTE*)dictStart, dictSize); + (BYTE *)dest, (const BYTE *)dictStart, dictSize); } /* The "double dictionary" mode, for use with e.g. ring buffers: the first part @@ -2216,34 +2202,30 @@ static int LZ4_decompress_fast_extDict(const char* source, char* dest, int origi * These routines are used only once, in LZ4_decompress_*_continue(). */ LZ4_FORCE_INLINE -int LZ4_decompress_safe_doubleDict(const char* source, char* dest, int compressedSize, int maxOutputSize, - size_t prefixSize, const void* dictStart, size_t dictSize) -{ +int LZ4_decompress_safe_doubleDict(const char *source, char *dest, int compressedSize, int maxOutputSize, + size_t prefixSize, const void *dictStart, size_t dictSize) { return LZ4_decompress_generic(source, dest, compressedSize, maxOutputSize, endOnInputSize, decode_full_block, usingExtDict, - (BYTE*)dest-prefixSize, (const BYTE*)dictStart, dictSize); + (BYTE *)dest - prefixSize, (const BYTE *)dictStart, dictSize); } LZ4_FORCE_INLINE -int LZ4_decompress_fast_doubleDict(const char* source, char* dest, int originalSize, - size_t prefixSize, const void* dictStart, size_t dictSize) -{ +int LZ4_decompress_fast_doubleDict(const char *source, char *dest, int originalSize, + size_t prefixSize, const void *dictStart, size_t dictSize) { return LZ4_decompress_generic(source, dest, 0, originalSize, endOnOutputSize, decode_full_block, usingExtDict, - (BYTE*)dest-prefixSize, (const BYTE*)dictStart, dictSize); + (BYTE *)dest - prefixSize, (const BYTE *)dictStart, dictSize); } /*===== streaming decompression functions =====*/ -LZ4_streamDecode_t* LZ4_createStreamDecode(void) -{ - LZ4_streamDecode_t* lz4s = (LZ4_streamDecode_t*) ALLOC_AND_ZERO(sizeof(LZ4_streamDecode_t)); +LZ4_streamDecode_t *LZ4_createStreamDecode(void) { + LZ4_streamDecode_t *lz4s = (LZ4_streamDecode_t *) ALLOC_AND_ZERO(sizeof(LZ4_streamDecode_t)); LZ4_STATIC_ASSERT(LZ4_STREAMDECODESIZE >= sizeof(LZ4_streamDecode_t_internal)); /* A compilation error here means LZ4_STREAMDECODESIZE is not large enough */ return lz4s; } -int LZ4_freeStreamDecode (LZ4_streamDecode_t* LZ4_stream) -{ +int LZ4_freeStreamDecode(LZ4_streamDecode_t *LZ4_stream) { if (LZ4_stream == NULL) { return 0; } /* support free on NULL */ FREEMEM(LZ4_stream); return 0; @@ -2255,11 +2237,10 @@ int LZ4_freeStreamDecode (LZ4_streamDecode_t* LZ4_stream) * Loading a size of 0 is allowed (same effect as no dictionary). * @return : 1 if OK, 0 if error */ -int LZ4_setStreamDecode (LZ4_streamDecode_t* LZ4_streamDecode, const char* dictionary, int dictSize) -{ - LZ4_streamDecode_t_internal* lz4sd = &LZ4_streamDecode->internal_donotuse; +int LZ4_setStreamDecode(LZ4_streamDecode_t *LZ4_streamDecode, const char *dictionary, int dictSize) { + LZ4_streamDecode_t_internal *lz4sd = &LZ4_streamDecode->internal_donotuse; lz4sd->prefixSize = (size_t) dictSize; - lz4sd->prefixEnd = (const BYTE*) dictionary + dictSize; + lz4sd->prefixEnd = (const BYTE *) dictionary + dictSize; lz4sd->externalDict = NULL; lz4sd->extDictSize = 0; return 1; @@ -2276,8 +2257,7 @@ int LZ4_setStreamDecode (LZ4_streamDecode_t* LZ4_streamDecode, const char* dicti * @return : minimum ring buffer size, * or 0 if there is an error (invalid maxBlockSize). */ -int LZ4_decoderRingBufferSize(int maxBlockSize) -{ +int LZ4_decoderRingBufferSize(int maxBlockSize) { if (maxBlockSize < 0) return 0; if (maxBlockSize > LZ4_MAX_INPUT_SIZE) return 0; if (maxBlockSize < 16) maxBlockSize = 16; @@ -2292,9 +2272,8 @@ int LZ4_decoderRingBufferSize(int maxBlockSize) and indicate where it stands using LZ4_setStreamDecode() */ LZ4_FORCE_O2_GCC_PPC64LE -int LZ4_decompress_safe_continue (LZ4_streamDecode_t* LZ4_streamDecode, const char* source, char* dest, int compressedSize, int maxOutputSize) -{ - LZ4_streamDecode_t_internal* lz4sd = &LZ4_streamDecode->internal_donotuse; +int LZ4_decompress_safe_continue(LZ4_streamDecode_t *LZ4_streamDecode, const char *source, char *dest, int compressedSize, int maxOutputSize) { + LZ4_streamDecode_t_internal *lz4sd = &LZ4_streamDecode->internal_donotuse; int result; if (lz4sd->prefixSize == 0) { @@ -2303,8 +2282,8 @@ int LZ4_decompress_safe_continue (LZ4_streamDecode_t* LZ4_streamDecode, const ch result = LZ4_decompress_safe(source, dest, compressedSize, maxOutputSize); if (result <= 0) return result; lz4sd->prefixSize = (size_t)result; - lz4sd->prefixEnd = (BYTE*)dest + result; - } else if (lz4sd->prefixEnd == (BYTE*)dest) { + lz4sd->prefixEnd = (BYTE *)dest + result; + } else if (lz4sd->prefixEnd == (BYTE *)dest) { /* They're rolling the current segment. */ if (lz4sd->prefixSize >= 64 KB - 1) result = LZ4_decompress_safe_withPrefix64k(source, dest, compressedSize, maxOutputSize); @@ -2325,16 +2304,15 @@ int LZ4_decompress_safe_continue (LZ4_streamDecode_t* LZ4_streamDecode, const ch lz4sd->externalDict, lz4sd->extDictSize); if (result <= 0) return result; lz4sd->prefixSize = (size_t)result; - lz4sd->prefixEnd = (BYTE*)dest + result; + lz4sd->prefixEnd = (BYTE *)dest + result; } return result; } LZ4_FORCE_O2_GCC_PPC64LE -int LZ4_decompress_fast_continue (LZ4_streamDecode_t* LZ4_streamDecode, const char* source, char* dest, int originalSize) -{ - LZ4_streamDecode_t_internal* lz4sd = &LZ4_streamDecode->internal_donotuse; +int LZ4_decompress_fast_continue(LZ4_streamDecode_t *LZ4_streamDecode, const char *source, char *dest, int originalSize) { + LZ4_streamDecode_t_internal *lz4sd = &LZ4_streamDecode->internal_donotuse; int result; assert(originalSize >= 0); @@ -2343,8 +2321,8 @@ int LZ4_decompress_fast_continue (LZ4_streamDecode_t* LZ4_streamDecode, const ch result = LZ4_decompress_fast(source, dest, originalSize); if (result <= 0) return result; lz4sd->prefixSize = (size_t)originalSize; - lz4sd->prefixEnd = (BYTE*)dest + originalSize; - } else if (lz4sd->prefixEnd == (BYTE*)dest) { + lz4sd->prefixEnd = (BYTE *)dest + originalSize; + } else if (lz4sd->prefixEnd == (BYTE *)dest) { if (lz4sd->prefixSize >= 64 KB - 1 || lz4sd->extDictSize == 0) result = LZ4_decompress_fast(source, dest, originalSize); else @@ -2360,7 +2338,7 @@ int LZ4_decompress_fast_continue (LZ4_streamDecode_t* LZ4_streamDecode, const ch lz4sd->externalDict, lz4sd->extDictSize); if (result <= 0) return result; lz4sd->prefixSize = (size_t)originalSize; - lz4sd->prefixEnd = (BYTE*)dest + originalSize; + lz4sd->prefixEnd = (BYTE *)dest + originalSize; } return result; @@ -2374,11 +2352,10 @@ Advanced decoding functions : the dictionary must be explicitly provided within parameters */ -int LZ4_decompress_safe_usingDict(const char* source, char* dest, int compressedSize, int maxOutputSize, const char* dictStart, int dictSize) -{ - if (dictSize==0) +int LZ4_decompress_safe_usingDict(const char *source, char *dest, int compressedSize, int maxOutputSize, const char *dictStart, int dictSize) { + if (dictSize == 0) return LZ4_decompress_safe(source, dest, compressedSize, maxOutputSize); - if (dictStart+dictSize == dest) { + if (dictStart + dictSize == dest) { if (dictSize >= 64 KB - 1) { return LZ4_decompress_safe_withPrefix64k(source, dest, compressedSize, maxOutputSize); } @@ -2389,9 +2366,8 @@ int LZ4_decompress_safe_usingDict(const char* source, char* dest, int compressed return LZ4_decompress_safe_forceExtDict(source, dest, compressedSize, maxOutputSize, dictStart, (size_t)dictSize); } -int LZ4_decompress_fast_usingDict(const char* source, char* dest, int originalSize, const char* dictStart, int dictSize) -{ - if (dictSize==0 || dictStart+dictSize == dest) +int LZ4_decompress_fast_usingDict(const char *source, char *dest, int originalSize, const char *dictStart, int dictSize) { + if (dictSize == 0 || dictStart + dictSize == dest) return LZ4_decompress_fast(source, dest, originalSize); assert(dictSize >= 0); return LZ4_decompress_fast_extDict(source, dest, originalSize, dictStart, (size_t)dictSize); @@ -2402,28 +2378,22 @@ int LZ4_decompress_fast_usingDict(const char* source, char* dest, int originalSi * Obsolete Functions ***************************************************/ /* obsolete compression functions */ -int LZ4_compress_limitedOutput(const char* source, char* dest, int inputSize, int maxOutputSize) -{ +int LZ4_compress_limitedOutput(const char *source, char *dest, int inputSize, int maxOutputSize) { return LZ4_compress_default(source, dest, inputSize, maxOutputSize); } -int LZ4_compress(const char* src, char* dest, int srcSize) -{ +int LZ4_compress(const char *src, char *dest, int srcSize) { return LZ4_compress_default(src, dest, srcSize, LZ4_compressBound(srcSize)); } -int LZ4_compress_limitedOutput_withState (void* state, const char* src, char* dst, int srcSize, int dstSize) -{ +int LZ4_compress_limitedOutput_withState(void *state, const char *src, char *dst, int srcSize, int dstSize) { return LZ4_compress_fast_extState(state, src, dst, srcSize, dstSize, 1); } -int LZ4_compress_withState (void* state, const char* src, char* dst, int srcSize) -{ +int LZ4_compress_withState(void *state, const char *src, char *dst, int srcSize) { return LZ4_compress_fast_extState(state, src, dst, srcSize, LZ4_compressBound(srcSize), 1); } -int LZ4_compress_limitedOutput_continue (LZ4_stream_t* LZ4_stream, const char* src, char* dst, int srcSize, int dstCapacity) -{ +int LZ4_compress_limitedOutput_continue(LZ4_stream_t *LZ4_stream, const char *src, char *dst, int srcSize, int dstCapacity) { return LZ4_compress_fast_continue(LZ4_stream, src, dst, srcSize, dstCapacity, 1); } -int LZ4_compress_continue (LZ4_stream_t* LZ4_stream, const char* source, char* dest, int inputSize) -{ +int LZ4_compress_continue(LZ4_stream_t *LZ4_stream, const char *source, char *dest, int inputSize) { return LZ4_compress_fast_continue(LZ4_stream, source, dest, inputSize, LZ4_compressBound(inputSize), 1); } @@ -2433,12 +2403,10 @@ They are only provided here for compatibility with older user programs. - LZ4_uncompress is totally equivalent to LZ4_decompress_fast - LZ4_uncompress_unknownOutputSize is totally equivalent to LZ4_decompress_safe */ -int LZ4_uncompress (const char* source, char* dest, int outputSize) -{ +int LZ4_uncompress(const char *source, char *dest, int outputSize) { return LZ4_decompress_fast(source, dest, outputSize); } -int LZ4_uncompress_unknownOutputSize (const char* source, char* dest, int isize, int maxOutputSize) -{ +int LZ4_uncompress_unknownOutputSize(const char *source, char *dest, int isize, int maxOutputSize) { return LZ4_decompress_safe(source, dest, isize, maxOutputSize); } @@ -2446,23 +2414,20 @@ int LZ4_uncompress_unknownOutputSize (const char* source, char* dest, int isize, int LZ4_sizeofStreamState(void) { return LZ4_STREAMSIZE; } -int LZ4_resetStreamState(void* state, char* inputBuffer) -{ +int LZ4_resetStreamState(void *state, char *inputBuffer) { (void)inputBuffer; - LZ4_resetStream((LZ4_stream_t*)state); + LZ4_resetStream((LZ4_stream_t *)state); return 0; } -void* LZ4_create (char* inputBuffer) -{ +void *LZ4_create(char *inputBuffer) { (void)inputBuffer; return LZ4_createStream(); } -char* LZ4_slideInputBuffer (void* state) -{ +char *LZ4_slideInputBuffer(void *state) { /* avoid const char * -> char * conversion warning */ - return (char *)(uptrval)((LZ4_stream_t*)state)->internal_donotuse.dictionary; + return (char *)(uptrval)((LZ4_stream_t *)state)->internal_donotuse.dictionary; } #endif /* LZ4_COMMONDEFS_ONLY */ diff --git a/common/lz4/lz4.h b/common/lz4/lz4.h index 5474005d7..bc8df87b7 100644 --- a/common/lz4/lz4.h +++ b/common/lz4/lz4.h @@ -109,8 +109,8 @@ extern "C" { #define LZ4_EXPAND_AND_QUOTE(str) LZ4_QUOTE(str) #define LZ4_VERSION_STRING LZ4_EXPAND_AND_QUOTE(LZ4_LIB_VERSION) -LZ4LIB_API int LZ4_versionNumber (void); /**< library version number; useful to check dll version */ -LZ4LIB_API const char* LZ4_versionString (void); /**< library version string; useful to check dll version */ +LZ4LIB_API int LZ4_versionNumber(void); /**< library version number; useful to check dll version */ +LZ4LIB_API const char *LZ4_versionString(void); /**< library version string; useful to check dll version */ /*-************************************ @@ -145,7 +145,7 @@ LZ4LIB_API const char* LZ4_versionString (void); /**< library version string; * or 0 if compression fails * Note : This function is protected against buffer overflow scenarios (never writes outside 'dst' buffer, nor read outside 'source' buffer). */ -LZ4LIB_API int LZ4_compress_default(const char* src, char* dst, int srcSize, int dstCapacity); +LZ4LIB_API int LZ4_compress_default(const char *src, char *dst, int srcSize, int dstCapacity); /*! LZ4_decompress_safe() : * compressedSize : is the exact complete size of the compressed block. @@ -161,7 +161,7 @@ LZ4LIB_API int LZ4_compress_default(const char* src, char* dst, int srcSize, int * The implementation is free to send / store / derive this information in whichever way is most beneficial. * If there is a need for a different format which bundles together both compressed data and its metadata, consider looking at lz4frame.h instead. */ -LZ4LIB_API int LZ4_decompress_safe (const char* src, char* dst, int compressedSize, int dstCapacity); +LZ4LIB_API int LZ4_decompress_safe(const char *src, char *dst, int compressedSize, int dstCapacity); /*-************************************ @@ -189,7 +189,7 @@ LZ4LIB_API int LZ4_compressBound(int inputSize); Values <= 0 will be replaced by LZ4_ACCELERATION_DEFAULT (currently == 1, see lz4.c). Values > LZ4_ACCELERATION_MAX will be replaced by LZ4_ACCELERATION_MAX (currently == 65537, see lz4.c). */ -LZ4LIB_API int LZ4_compress_fast (const char* src, char* dst, int srcSize, int dstCapacity, int acceleration); +LZ4LIB_API int LZ4_compress_fast(const char *src, char *dst, int srcSize, int dstCapacity, int acceleration); /*! LZ4_compress_fast_extState() : @@ -199,7 +199,7 @@ LZ4LIB_API int LZ4_compress_fast (const char* src, char* dst, int srcSize, int d * Then, provide this buffer as `void* state` to compression function. */ LZ4LIB_API int LZ4_sizeofState(void); -LZ4LIB_API int LZ4_compress_fast_extState (void* state, const char* src, char* dst, int srcSize, int dstCapacity, int acceleration); +LZ4LIB_API int LZ4_compress_fast_extState(void *state, const char *src, char *dst, int srcSize, int dstCapacity, int acceleration); /*! LZ4_compress_destSize() : @@ -225,7 +225,7 @@ LZ4LIB_API int LZ4_compress_fast_extState (void* state, const char* src, char* d * a dstCapacity which is > decompressedSize, by at least 1 byte. * See https://github.com/lz4/lz4/issues/859 for details */ -LZ4LIB_API int LZ4_compress_destSize (const char* src, char* dst, int* srcSizePtr, int targetDstSize); +LZ4LIB_API int LZ4_compress_destSize(const char *src, char *dst, int *srcSizePtr, int targetDstSize); /*! LZ4_decompress_safe_partial() : @@ -262,7 +262,7 @@ LZ4LIB_API int LZ4_compress_destSize (const char* src, char* dst, int* srcSizePt * then targetOutputSize **MUST** be <= block's decompressed size. * Otherwise, *silent corruption will occur*. */ -LZ4LIB_API int LZ4_decompress_safe_partial (const char* src, char* dst, int srcSize, int targetOutputSize, int dstCapacity); +LZ4LIB_API int LZ4_decompress_safe_partial(const char *src, char *dst, int srcSize, int targetOutputSize, int dstCapacity); /*-********************************************* @@ -270,8 +270,8 @@ LZ4LIB_API int LZ4_decompress_safe_partial (const char* src, char* dst, int srcS ***********************************************/ typedef union LZ4_stream_u LZ4_stream_t; /* incomplete type (defined later) */ -LZ4LIB_API LZ4_stream_t* LZ4_createStream(void); -LZ4LIB_API int LZ4_freeStream (LZ4_stream_t* streamPtr); +LZ4LIB_API LZ4_stream_t *LZ4_createStream(void); +LZ4LIB_API int LZ4_freeStream(LZ4_stream_t *streamPtr); /*! LZ4_resetStream_fast() : v1.9.0+ * Use this to prepare an LZ4_stream_t for a new chain of dependent blocks @@ -295,7 +295,7 @@ LZ4LIB_API int LZ4_freeStream (LZ4_stream_t* streamPtr); * The *extState* functions perform their own resets. * Invoking LZ4_resetStream_fast() before is redundant, and even counterproductive. */ -LZ4LIB_API void LZ4_resetStream_fast (LZ4_stream_t* streamPtr); +LZ4LIB_API void LZ4_resetStream_fast(LZ4_stream_t *streamPtr); /*! LZ4_loadDict() : * Use this function to reference a static dictionary into LZ4_stream_t. @@ -308,7 +308,7 @@ LZ4LIB_API void LZ4_resetStream_fast (LZ4_stream_t* streamPtr); * Loading a size of 0 is allowed, and is the same as reset. * @return : loaded dictionary size, in bytes (necessarily <= 64 KB) */ -LZ4LIB_API int LZ4_loadDict (LZ4_stream_t* streamPtr, const char* dictionary, int dictSize); +LZ4LIB_API int LZ4_loadDict(LZ4_stream_t *streamPtr, const char *dictionary, int dictSize); /*! LZ4_compress_fast_continue() : * Compress 'src' content using data from previously compressed blocks, for better compression ratio. @@ -333,7 +333,7 @@ LZ4LIB_API int LZ4_loadDict (LZ4_stream_t* streamPtr, const char* dictionary, in * * Note 5 : After an error, the stream status is undefined (invalid), it can only be reset or freed. */ -LZ4LIB_API int LZ4_compress_fast_continue (LZ4_stream_t* streamPtr, const char* src, char* dst, int srcSize, int dstCapacity, int acceleration); +LZ4LIB_API int LZ4_compress_fast_continue(LZ4_stream_t *streamPtr, const char *src, char *dst, int srcSize, int dstCapacity, int acceleration); /*! LZ4_saveDict() : * If last 64KB data cannot be guaranteed to remain available at its current memory location, @@ -342,7 +342,7 @@ LZ4LIB_API int LZ4_compress_fast_continue (LZ4_stream_t* streamPtr, const char* * but is much faster, because LZ4_saveDict() doesn't need to rebuild tables. * @return : saved dictionary size in bytes (necessarily <= maxDictSize), or 0 if error. */ -LZ4LIB_API int LZ4_saveDict (LZ4_stream_t* streamPtr, char* safeBuffer, int maxDictSize); +LZ4LIB_API int LZ4_saveDict(LZ4_stream_t *streamPtr, char *safeBuffer, int maxDictSize); /*-********************************************** @@ -355,8 +355,8 @@ typedef union LZ4_streamDecode_u LZ4_streamDecode_t; /* tracking context */ * creation / destruction of streaming decompression tracking context. * A tracking context can be re-used multiple times. */ -LZ4LIB_API LZ4_streamDecode_t* LZ4_createStreamDecode(void); -LZ4LIB_API int LZ4_freeStreamDecode (LZ4_streamDecode_t* LZ4_stream); +LZ4LIB_API LZ4_streamDecode_t *LZ4_createStreamDecode(void); +LZ4LIB_API int LZ4_freeStreamDecode(LZ4_streamDecode_t *LZ4_stream); /*! LZ4_setStreamDecode() : * An LZ4_streamDecode_t context can be allocated once and re-used multiple times. @@ -365,7 +365,7 @@ LZ4LIB_API int LZ4_freeStreamDecode (LZ4_streamDecode_t* LZ4_str * Dictionary is presumed stable : it must remain accessible and unmodified during next decompression. * @return : 1 if OK, 0 if error */ -LZ4LIB_API int LZ4_setStreamDecode (LZ4_streamDecode_t* LZ4_streamDecode, const char* dictionary, int dictSize); +LZ4LIB_API int LZ4_setStreamDecode(LZ4_streamDecode_t *LZ4_streamDecode, const char *dictionary, int dictSize); /*! LZ4_decoderRingBufferSize() : v1.8.2+ * Note : in a ring buffer scenario (optional), @@ -406,7 +406,7 @@ LZ4LIB_API int LZ4_decoderRingBufferSize(int maxBlockSize); * save the last 64KB of decoded data into a safe buffer where it can't be modified during decompression, * then indicate where this data is saved using LZ4_setStreamDecode(), before decompressing next block. */ -LZ4LIB_API int LZ4_decompress_safe_continue (LZ4_streamDecode_t* LZ4_streamDecode, const char* src, char* dst, int srcSize, int dstCapacity); +LZ4LIB_API int LZ4_decompress_safe_continue(LZ4_streamDecode_t *LZ4_streamDecode, const char *src, char *dst, int srcSize, int dstCapacity); /*! LZ4_decompress_*_usingDict() : @@ -417,7 +417,7 @@ LZ4LIB_API int LZ4_decompress_safe_continue (LZ4_streamDecode_t* LZ4_streamDecod * Performance tip : Decompression speed can be substantially increased * when dst == dictStart + dictSize. */ -LZ4LIB_API int LZ4_decompress_safe_usingDict (const char* src, char* dst, int srcSize, int dstCapcity, const char* dictStart, int dictSize); +LZ4LIB_API int LZ4_decompress_safe_usingDict(const char *src, char *dst, int srcSize, int dstCapcity, const char *dictStart, int dictSize); #endif /* LZ4_H_2983827168210 */ @@ -468,7 +468,7 @@ LZ4LIB_API int LZ4_decompress_safe_usingDict (const char* src, char* dst, int sr * this function initializes the provided state with a call to something like LZ4_resetStream_fast() * while LZ4_compress_fast_extState() starts with a call to LZ4_resetStream(). */ -LZ4LIB_STATIC_API int LZ4_compress_fast_extState_fastReset (void* state, const char* src, char* dst, int srcSize, int dstCapacity, int acceleration); +LZ4LIB_STATIC_API int LZ4_compress_fast_extState_fastReset(void *state, const char *src, char *dst, int srcSize, int dstCapacity, int acceleration); /*! LZ4_attach_dictionary() : * This is an experimental API that allows @@ -496,7 +496,7 @@ LZ4LIB_STATIC_API int LZ4_compress_fast_extState_fastReset (void* state, const c * stream (and source buffer) must remain in-place / accessible / unchanged * through the completion of the first compression call on the stream. */ -LZ4LIB_STATIC_API void LZ4_attach_dictionary(LZ4_stream_t* workingStream, const LZ4_stream_t* dictionaryStream); +LZ4LIB_STATIC_API void LZ4_attach_dictionary(LZ4_stream_t *workingStream, const LZ4_stream_t *dictionaryStream); /*! In-place compression and decompression @@ -587,15 +587,15 @@ struct LZ4_stream_t_internal { uint32_t hashTable[LZ4_HASH_SIZE_U32]; uint32_t currentOffset; uint32_t tableType; - const uint8_t* dictionary; - const LZ4_stream_t_internal* dictCtx; + const uint8_t *dictionary; + const LZ4_stream_t_internal *dictCtx; uint32_t dictSize; }; typedef struct { - const uint8_t* externalDict; + const uint8_t *externalDict; size_t extDictSize; - const uint8_t* prefixEnd; + const uint8_t *prefixEnd; size_t prefixSize; } LZ4_streamDecode_t_internal; @@ -606,14 +606,14 @@ struct LZ4_stream_t_internal { unsigned int hashTable[LZ4_HASH_SIZE_U32]; unsigned int currentOffset; unsigned int tableType; - const unsigned char* dictionary; - const LZ4_stream_t_internal* dictCtx; + const unsigned char *dictionary; + const LZ4_stream_t_internal *dictCtx; unsigned int dictSize; }; typedef struct { - const unsigned char* externalDict; - const unsigned char* prefixEnd; + const unsigned char *externalDict; + const unsigned char *prefixEnd; size_t extDictSize; size_t prefixSize; } LZ4_streamDecode_t_internal; @@ -650,7 +650,7 @@ union LZ4_stream_u { * Note2: An LZ4_stream_t structure guarantees correct alignment and size. * Note3: Before v1.9.0, use LZ4_resetStream() instead */ -LZ4LIB_API LZ4_stream_t* LZ4_initStream (void* buffer, size_t size); +LZ4LIB_API LZ4_stream_t *LZ4_initStream(void *buffer, size_t size); /*! LZ4_streamDecode_t : @@ -702,16 +702,16 @@ union LZ4_streamDecode_u { #endif /* LZ4_DISABLE_DEPRECATE_WARNINGS */ /* Obsolete compression functions */ -LZ4_DEPRECATED("use LZ4_compress_default() instead") LZ4LIB_API int LZ4_compress (const char* src, char* dest, int srcSize); -LZ4_DEPRECATED("use LZ4_compress_default() instead") LZ4LIB_API int LZ4_compress_limitedOutput (const char* src, char* dest, int srcSize, int maxOutputSize); -LZ4_DEPRECATED("use LZ4_compress_fast_extState() instead") LZ4LIB_API int LZ4_compress_withState (void* state, const char* source, char* dest, int inputSize); -LZ4_DEPRECATED("use LZ4_compress_fast_extState() instead") LZ4LIB_API int LZ4_compress_limitedOutput_withState (void* state, const char* source, char* dest, int inputSize, int maxOutputSize); -LZ4_DEPRECATED("use LZ4_compress_fast_continue() instead") LZ4LIB_API int LZ4_compress_continue (LZ4_stream_t* LZ4_streamPtr, const char* source, char* dest, int inputSize); -LZ4_DEPRECATED("use LZ4_compress_fast_continue() instead") LZ4LIB_API int LZ4_compress_limitedOutput_continue (LZ4_stream_t* LZ4_streamPtr, const char* source, char* dest, int inputSize, int maxOutputSize); +LZ4_DEPRECATED("use LZ4_compress_default() instead") LZ4LIB_API int LZ4_compress(const char *src, char *dest, int srcSize); +LZ4_DEPRECATED("use LZ4_compress_default() instead") LZ4LIB_API int LZ4_compress_limitedOutput(const char *src, char *dest, int srcSize, int maxOutputSize); +LZ4_DEPRECATED("use LZ4_compress_fast_extState() instead") LZ4LIB_API int LZ4_compress_withState(void *state, const char *source, char *dest, int inputSize); +LZ4_DEPRECATED("use LZ4_compress_fast_extState() instead") LZ4LIB_API int LZ4_compress_limitedOutput_withState(void *state, const char *source, char *dest, int inputSize, int maxOutputSize); +LZ4_DEPRECATED("use LZ4_compress_fast_continue() instead") LZ4LIB_API int LZ4_compress_continue(LZ4_stream_t *LZ4_streamPtr, const char *source, char *dest, int inputSize); +LZ4_DEPRECATED("use LZ4_compress_fast_continue() instead") LZ4LIB_API int LZ4_compress_limitedOutput_continue(LZ4_stream_t *LZ4_streamPtr, const char *source, char *dest, int inputSize, int maxOutputSize); /* Obsolete decompression functions */ -LZ4_DEPRECATED("use LZ4_decompress_fast() instead") LZ4LIB_API int LZ4_uncompress (const char* source, char* dest, int outputSize); -LZ4_DEPRECATED("use LZ4_decompress_safe() instead") LZ4LIB_API int LZ4_uncompress_unknownOutputSize (const char* source, char* dest, int isize, int maxOutputSize); +LZ4_DEPRECATED("use LZ4_decompress_fast() instead") LZ4LIB_API int LZ4_uncompress(const char *source, char *dest, int outputSize); +LZ4_DEPRECATED("use LZ4_decompress_safe() instead") LZ4LIB_API int LZ4_uncompress_unknownOutputSize(const char *source, char *dest, int isize, int maxOutputSize); /* Obsolete streaming functions; degraded functionality; do not use! * @@ -722,14 +722,14 @@ LZ4_DEPRECATED("use LZ4_decompress_safe() instead") LZ4LIB_API int LZ4_uncompres * achieved will therefore be no better than compressing each chunk * independently. */ -LZ4_DEPRECATED("Use LZ4_createStream() instead") LZ4LIB_API void* LZ4_create (char* inputBuffer); +LZ4_DEPRECATED("Use LZ4_createStream() instead") LZ4LIB_API void *LZ4_create(char *inputBuffer); LZ4_DEPRECATED("Use LZ4_createStream() instead") LZ4LIB_API int LZ4_sizeofStreamState(void); -LZ4_DEPRECATED("Use LZ4_resetStream() instead") LZ4LIB_API int LZ4_resetStreamState(void* state, char* inputBuffer); -LZ4_DEPRECATED("Use LZ4_saveDict() instead") LZ4LIB_API char* LZ4_slideInputBuffer (void* state); +LZ4_DEPRECATED("Use LZ4_resetStream() instead") LZ4LIB_API int LZ4_resetStreamState(void *state, char *inputBuffer); +LZ4_DEPRECATED("Use LZ4_saveDict() instead") LZ4LIB_API char *LZ4_slideInputBuffer(void *state); /* Obsolete streaming decoding functions */ -LZ4_DEPRECATED("use LZ4_decompress_safe_usingDict() instead") LZ4LIB_API int LZ4_decompress_safe_withPrefix64k (const char* src, char* dst, int compressedSize, int maxDstSize); -LZ4_DEPRECATED("use LZ4_decompress_fast_usingDict() instead") LZ4LIB_API int LZ4_decompress_fast_withPrefix64k (const char* src, char* dst, int originalSize); +LZ4_DEPRECATED("use LZ4_decompress_safe_usingDict() instead") LZ4LIB_API int LZ4_decompress_safe_withPrefix64k(const char *src, char *dst, int compressedSize, int maxDstSize); +LZ4_DEPRECATED("use LZ4_decompress_fast_usingDict() instead") LZ4LIB_API int LZ4_decompress_fast_withPrefix64k(const char *src, char *dst, int originalSize); /*! LZ4_decompress_fast() : **unsafe!** * These functions used to be faster than LZ4_decompress_safe(), @@ -760,11 +760,11 @@ LZ4_DEPRECATED("use LZ4_decompress_fast_usingDict() instead") LZ4LIB_API int LZ4 */ LZ4_DEPRECATED("This function is deprecated and unsafe. Consider using LZ4_decompress_safe() instead") -LZ4LIB_API int LZ4_decompress_fast (const char* src, char* dst, int originalSize); +LZ4LIB_API int LZ4_decompress_fast(const char *src, char *dst, int originalSize); LZ4_DEPRECATED("This function is deprecated and unsafe. Consider using LZ4_decompress_safe_continue() instead") -LZ4LIB_API int LZ4_decompress_fast_continue (LZ4_streamDecode_t* LZ4_streamDecode, const char* src, char* dst, int originalSize); +LZ4LIB_API int LZ4_decompress_fast_continue(LZ4_streamDecode_t *LZ4_streamDecode, const char *src, char *dst, int originalSize); LZ4_DEPRECATED("This function is deprecated and unsafe. Consider using LZ4_decompress_safe_usingDict() instead") -LZ4LIB_API int LZ4_decompress_fast_usingDict (const char* src, char* dst, int originalSize, const char* dictStart, int dictSize); +LZ4LIB_API int LZ4_decompress_fast_usingDict(const char *src, char *dst, int originalSize, const char *dictStart, int dictSize); /*! LZ4_resetStream() : * An LZ4_stream_t structure must be initialized at least once. @@ -772,7 +772,7 @@ LZ4LIB_API int LZ4_decompress_fast_usingDict (const char* src, char* dst, int or * Consider switching to LZ4_initStream(), * invoking LZ4_resetStream() will trigger deprecation warnings in the future. */ -LZ4LIB_API void LZ4_resetStream (LZ4_stream_t* streamPtr); +LZ4LIB_API void LZ4_resetStream(LZ4_stream_t *streamPtr); #endif /* LZ4_H_98237428734687 */ diff --git a/common/lz4/lz4hc.c b/common/lz4/lz4hc.c index 687f87e6f..6c047f221 100644 --- a/common/lz4/lz4hc.c +++ b/common/lz4/lz4hc.c @@ -84,20 +84,18 @@ typedef enum { noDictCtx, usingDictCtxHc } dictCtx_directive; /* Make fields passed to, and updated by LZ4HC_encodeSequence explicit */ #define UPDATABLE(ip, op, anchor) &ip, &op, &anchor -static U32 LZ4HC_hashPtr(const void* ptr) { return HASH_FUNCTION(LZ4_read32(ptr)); } +static U32 LZ4HC_hashPtr(const void *ptr) { return HASH_FUNCTION(LZ4_read32(ptr)); } /************************************** * HC Compression **************************************/ -static void LZ4HC_clearTables (LZ4HC_CCtx_internal* hc4) -{ - MEM_INIT((void*)hc4->hashTable, 0, sizeof(hc4->hashTable)); +static void LZ4HC_clearTables(LZ4HC_CCtx_internal *hc4) { + MEM_INIT((void *)hc4->hashTable, 0, sizeof(hc4->hashTable)); MEM_INIT(hc4->chainTable, 0xFF, sizeof(hc4->chainTable)); } -static void LZ4HC_init_internal (LZ4HC_CCtx_internal* hc4, const BYTE* start) -{ +static void LZ4HC_init_internal(LZ4HC_CCtx_internal *hc4, const BYTE *start) { uptrval startingOffset = (uptrval)(hc4->end - hc4->base); if (startingOffset > 1 GB) { LZ4HC_clearTables(hc4); @@ -114,18 +112,17 @@ static void LZ4HC_init_internal (LZ4HC_CCtx_internal* hc4, const BYTE* start) /* Update chains up to ip (excluded) */ -LZ4_FORCE_INLINE void LZ4HC_Insert (LZ4HC_CCtx_internal* hc4, const BYTE* ip) -{ - U16* const chainTable = hc4->chainTable; - U32* const hashTable = hc4->hashTable; - const BYTE* const base = hc4->base; +LZ4_FORCE_INLINE void LZ4HC_Insert(LZ4HC_CCtx_internal *hc4, const BYTE *ip) { + U16 *const chainTable = hc4->chainTable; + U32 *const hashTable = hc4->hashTable; + const BYTE *const base = hc4->base; U32 const target = (U32)(ip - base); U32 idx = hc4->nextToUpdate; while (idx < target) { - U32 const h = LZ4HC_hashPtr(base+idx); + U32 const h = LZ4HC_hashPtr(base + idx); size_t delta = idx - hashTable[h]; - if (delta>LZ4_DISTANCE_MAX) delta = LZ4_DISTANCE_MAX; + if (delta > LZ4_DISTANCE_MAX) delta = LZ4_DISTANCE_MAX; DELTANEXTU16(chainTable, idx) = (U16)delta; hashTable[h] = idx; idx++; @@ -137,17 +134,18 @@ LZ4_FORCE_INLINE void LZ4HC_Insert (LZ4HC_CCtx_internal* hc4, const BYTE* ip) /** LZ4HC_countBack() : * @return : negative value, nb of common bytes before ip/match */ LZ4_FORCE_INLINE -int LZ4HC_countBack(const BYTE* const ip, const BYTE* const match, - const BYTE* const iMin, const BYTE* const mMin) -{ +int LZ4HC_countBack(const BYTE *const ip, const BYTE *const match, + const BYTE *const iMin, const BYTE *const mMin) { int back = 0; int const min = (int)MAX(iMin - ip, mMin - match); assert(min <= 0); - assert(ip >= iMin); assert((size_t)(ip-iMin) < (1U<<31)); - assert(match >= mMin); assert((size_t)(match - mMin) < (1U<<31)); - while ( (back > min) - && (ip[back-1] == match[back-1]) ) - back--; + assert(ip >= iMin); + assert((size_t)(ip - iMin) < (1U << 31)); + assert(match >= mMin); + assert((size_t)(match - mMin) < (1U << 31)); + while ((back > min) + && (ip[back - 1] == match[back - 1])) + back--; return back; } @@ -158,8 +156,7 @@ int LZ4HC_countBack(const BYTE* const ip, const BYTE* const match, #endif -static U32 LZ4HC_rotatePattern(size_t const rotate, U32 const pattern) -{ +static U32 LZ4HC_rotatePattern(size_t const rotate, U32 const pattern) { size_t const bitsToRotate = (rotate & (sizeof(pattern) - 1)) << 3; if (bitsToRotate == 0) return pattern; @@ -169,29 +166,30 @@ static U32 LZ4HC_rotatePattern(size_t const rotate, U32 const pattern) /* LZ4HC_countPattern() : * pattern32 must be a sample of repetitive pattern of length 1, 2 or 4 (but not 3!) */ static unsigned -LZ4HC_countPattern(const BYTE* ip, const BYTE* const iEnd, U32 const pattern32) -{ - const BYTE* const iStart = ip; - reg_t const pattern = (sizeof(pattern)==8) ? (reg_t)pattern32 + (((reg_t)pattern32) << 32) : pattern32; +LZ4HC_countPattern(const BYTE *ip, const BYTE *const iEnd, U32 const pattern32) { + const BYTE *const iStart = ip; + reg_t const pattern = (sizeof(pattern) == 8) ? (reg_t)pattern32 + (((reg_t)pattern32) << 32) : pattern32; - while (likely(ip < iEnd-(sizeof(pattern)-1))) { + while (likely(ip < iEnd - (sizeof(pattern) - 1))) { reg_t const diff = LZ4_read_ARCH(ip) ^ pattern; - if (!diff) { ip+=sizeof(pattern); continue; } + if (!diff) { ip += sizeof(pattern); continue; } ip += LZ4_NbCommonBytes(diff); return (unsigned)(ip - iStart); } if (LZ4_isLittleEndian()) { reg_t patternByte = pattern; - while ((ip>= 8; + while ((ip < iEnd) && (*ip == (BYTE)patternByte)) { + ip++; + patternByte >>= 8; } } else { /* big endian */ - U32 bitOffset = (sizeof(pattern)*8) - 8; + U32 bitOffset = (sizeof(pattern) * 8) - 8; while (ip < iEnd) { BYTE const byte = (BYTE)(pattern >> bitOffset); if (*ip != byte) break; - ip ++; bitOffset -= 8; + ip ++; + bitOffset -= 8; } } @@ -202,19 +200,21 @@ LZ4HC_countPattern(const BYTE* ip, const BYTE* const iEnd, U32 const pattern32) * pattern must be a sample of repetitive pattern of length 1, 2 or 4 (but not 3!) * read using natural platform endianess */ static unsigned -LZ4HC_reverseCountPattern(const BYTE* ip, const BYTE* const iLow, U32 pattern) -{ - const BYTE* const iStart = ip; +LZ4HC_reverseCountPattern(const BYTE *ip, const BYTE *const iLow, U32 pattern) { + const BYTE *const iStart = ip; - while (likely(ip >= iLow+4)) { - if (LZ4_read32(ip-4) != pattern) break; + while (likely(ip >= iLow + 4)) { + if (LZ4_read32(ip - 4) != pattern) break; ip -= 4; } - { const BYTE* bytePtr = (const BYTE*)(&pattern) + 3; /* works for any endianess */ - while (likely(ip>iLow)) { + { + const BYTE *bytePtr = (const BYTE *)(&pattern) + 3; /* works for any endianess */ + while (likely(ip > iLow)) { if (ip[-1] != *bytePtr) break; - ip--; bytePtr--; - } } + ip--; + bytePtr--; + } + } return (unsigned)(iStart - ip); } @@ -223,39 +223,37 @@ LZ4HC_reverseCountPattern(const BYTE* ip, const BYTE* const iLow, U32 pattern) * 4 byte MINMATCH would overflow. * @returns true if the match index is okay. */ -static int LZ4HC_protectDictEnd(U32 const dictLimit, U32 const matchIndex) -{ +static int LZ4HC_protectDictEnd(U32 const dictLimit, U32 const matchIndex) { return ((U32)((dictLimit - 1) - matchIndex) >= 3); } typedef enum { rep_untested, rep_not, rep_confirmed } repeat_state_e; -typedef enum { favorCompressionRatio=0, favorDecompressionSpeed } HCfavor_e; +typedef enum { favorCompressionRatio = 0, favorDecompressionSpeed } HCfavor_e; LZ4_FORCE_INLINE int -LZ4HC_InsertAndGetWiderMatch ( - LZ4HC_CCtx_internal* hc4, - const BYTE* const ip, - const BYTE* const iLowLimit, - const BYTE* const iHighLimit, +LZ4HC_InsertAndGetWiderMatch( + LZ4HC_CCtx_internal *hc4, + const BYTE *const ip, + const BYTE *const iLowLimit, + const BYTE *const iHighLimit, int longest, - const BYTE** matchpos, - const BYTE** startpos, + const BYTE **matchpos, + const BYTE **startpos, const int maxNbAttempts, const int patternAnalysis, const int chainSwap, const dictCtx_directive dict, - const HCfavor_e favorDecSpeed) -{ - U16* const chainTable = hc4->chainTable; - U32* const HashTable = hc4->hashTable; - const LZ4HC_CCtx_internal * const dictCtx = hc4->dictCtx; - const BYTE* const base = hc4->base; + const HCfavor_e favorDecSpeed) { + U16 *const chainTable = hc4->chainTable; + U32 *const HashTable = hc4->hashTable; + const LZ4HC_CCtx_internal *const dictCtx = hc4->dictCtx; + const BYTE *const base = hc4->base; const U32 dictLimit = hc4->dictLimit; - const BYTE* const lowPrefixPtr = base + dictLimit; + const BYTE *const lowPrefixPtr = base + dictLimit; const U32 ipIndex = (U32)(ip - base); const U32 lowestMatchIndex = (hc4->lowLimit + (LZ4_DISTANCE_MAX + 1) > ipIndex) ? hc4->lowLimit : ipIndex - LZ4_DISTANCE_MAX; - const BYTE* const dictBase = hc4->dictBase; - int const lookBackLength = (int)(ip-iLowLimit); + const BYTE *const dictBase = hc4->dictBase; + int const lookBackLength = (int)(ip - iLowLimit); int nbAttempts = maxNbAttempts; U32 matchChainPos = 0; U32 const pattern = LZ4_read32(ip); @@ -268,49 +266,53 @@ LZ4HC_InsertAndGetWiderMatch ( LZ4HC_Insert(hc4, ip); matchIndex = HashTable[LZ4HC_hashPtr(ip)]; DEBUGLOG(7, "First match at index %u / %u (lowestMatchIndex)", - matchIndex, lowestMatchIndex); + matchIndex, lowestMatchIndex); - while ((matchIndex>=lowestMatchIndex) && (nbAttempts)) { - int matchLength=0; + while ((matchIndex >= lowestMatchIndex) && (nbAttempts)) { + int matchLength = 0; nbAttempts--; assert(matchIndex < ipIndex); if (favorDecSpeed && (ipIndex - matchIndex < 8)) { /* do nothing */ } else if (matchIndex >= dictLimit) { /* within current Prefix */ - const BYTE* const matchPtr = base + matchIndex; + const BYTE *const matchPtr = base + matchIndex; assert(matchPtr >= lowPrefixPtr); assert(matchPtr < ip); assert(longest >= 1); if (LZ4_read16(iLowLimit + longest - 1) == LZ4_read16(matchPtr - lookBackLength + longest - 1)) { if (LZ4_read32(matchPtr) == pattern) { int const back = lookBackLength ? LZ4HC_countBack(ip, matchPtr, iLowLimit, lowPrefixPtr) : 0; - matchLength = MINMATCH + (int)LZ4_count(ip+MINMATCH, matchPtr+MINMATCH, iHighLimit); + matchLength = MINMATCH + (int)LZ4_count(ip + MINMATCH, matchPtr + MINMATCH, iHighLimit); matchLength -= back; if (matchLength > longest) { longest = matchLength; *matchpos = matchPtr + back; *startpos = ip + back; - } } } + } + } + } } else { /* lowestMatchIndex <= matchIndex < dictLimit */ - const BYTE* const matchPtr = dictBase + matchIndex; + const BYTE *const matchPtr = dictBase + matchIndex; if (LZ4_read32(matchPtr) == pattern) { - const BYTE* const dictStart = dictBase + hc4->lowLimit; + const BYTE *const dictStart = dictBase + hc4->lowLimit; int back = 0; - const BYTE* vLimit = ip + (dictLimit - matchIndex); + const BYTE *vLimit = ip + (dictLimit - matchIndex); if (vLimit > iHighLimit) vLimit = iHighLimit; - matchLength = (int)LZ4_count(ip+MINMATCH, matchPtr+MINMATCH, vLimit) + MINMATCH; - if ((ip+matchLength == vLimit) && (vLimit < iHighLimit)) - matchLength += LZ4_count(ip+matchLength, lowPrefixPtr, iHighLimit); + matchLength = (int)LZ4_count(ip + MINMATCH, matchPtr + MINMATCH, vLimit) + MINMATCH; + if ((ip + matchLength == vLimit) && (vLimit < iHighLimit)) + matchLength += LZ4_count(ip + matchLength, lowPrefixPtr, iHighLimit); back = lookBackLength ? LZ4HC_countBack(ip, matchPtr, iLowLimit, dictStart) : 0; matchLength -= back; if (matchLength > longest) { longest = matchLength; *matchpos = base + matchIndex + back; /* virtual pos, relative to ip, to retrieve offset */ *startpos = ip + back; - } } } + } + } + } - if (chainSwap && matchLength==longest) { /* better match => select a better chain */ - assert(lookBackLength==0); /* search forward only */ + if (chainSwap && matchLength == longest) { /* better match => select a better chain */ + assert(lookBackLength == 0); /* search forward only */ if (matchIndex + (U32)longest <= ipIndex) { int const kTrigger = 4; U32 distanceToNextMatch = 1; @@ -331,33 +333,38 @@ LZ4HC_InsertAndGetWiderMatch ( if (distanceToNextMatch > matchIndex) break; /* avoid overflow */ matchIndex -= distanceToNextMatch; continue; - } } } + } + } + } - { U32 const distNextMatch = DELTANEXTU16(chainTable, matchIndex); - if (patternAnalysis && distNextMatch==1 && matchChainPos==0) { - U32 const matchCandidateIdx = matchIndex-1; + { + U32 const distNextMatch = DELTANEXTU16(chainTable, matchIndex); + if (patternAnalysis && distNextMatch == 1 && matchChainPos == 0) { + U32 const matchCandidateIdx = matchIndex - 1; /* may be a repeated pattern */ if (repeat == rep_untested) { - if ( ((pattern & 0xFFFF) == (pattern >> 16)) - & ((pattern & 0xFF) == (pattern >> 24)) ) { + if (((pattern & 0xFFFF) == (pattern >> 16)) + & ((pattern & 0xFF) == (pattern >> 24))) { repeat = rep_confirmed; - srcPatternLength = LZ4HC_countPattern(ip+sizeof(pattern), iHighLimit, pattern) + sizeof(pattern); + srcPatternLength = LZ4HC_countPattern(ip + sizeof(pattern), iHighLimit, pattern) + sizeof(pattern); } else { repeat = rep_not; - } } - if ( (repeat == rep_confirmed) && (matchCandidateIdx >= lowestMatchIndex) - && LZ4HC_protectDictEnd(dictLimit, matchCandidateIdx) ) { + } + } + if ((repeat == rep_confirmed) && (matchCandidateIdx >= lowestMatchIndex) + && LZ4HC_protectDictEnd(dictLimit, matchCandidateIdx)) { const int extDict = matchCandidateIdx < dictLimit; - const BYTE* const matchPtr = (extDict ? dictBase : base) + matchCandidateIdx; + const BYTE *const matchPtr = (extDict ? dictBase : base) + matchCandidateIdx; if (LZ4_read32(matchPtr) == pattern) { /* good candidate */ - const BYTE* const dictStart = dictBase + hc4->lowLimit; - const BYTE* const iLimit = extDict ? dictBase + dictLimit : iHighLimit; - size_t forwardPatternLength = LZ4HC_countPattern(matchPtr+sizeof(pattern), iLimit, pattern) + sizeof(pattern); + const BYTE *const dictStart = dictBase + hc4->lowLimit; + const BYTE *const iLimit = extDict ? dictBase + dictLimit : iHighLimit; + size_t forwardPatternLength = LZ4HC_countPattern(matchPtr + sizeof(pattern), iLimit, pattern) + sizeof(pattern); if (extDict && matchPtr + forwardPatternLength == iLimit) { U32 const rotatedPattern = LZ4HC_rotatePattern(forwardPatternLength, pattern); forwardPatternLength += LZ4HC_countPattern(lowPrefixPtr, iHighLimit, rotatedPattern); } - { const BYTE* const lowestMatchPtr = extDict ? dictStart : lowPrefixPtr; + { + const BYTE *const lowestMatchPtr = extDict ? dictStart : lowPrefixPtr; size_t backLength = LZ4HC_reverseCountPattern(matchPtr, lowestMatchPtr, pattern); size_t currentSegmentLength; if (!extDict && matchPtr - backLength == lowPrefixPtr && hc4->lowLimit < dictLimit) { @@ -369,8 +376,8 @@ LZ4HC_InsertAndGetWiderMatch ( assert(matchCandidateIdx - backLength >= lowestMatchIndex); currentSegmentLength = backLength + forwardPatternLength; /* Adjust to end of pattern if the source pattern fits, otherwise the beginning of the pattern */ - if ( (currentSegmentLength >= srcPatternLength) /* current pattern segment large enough to contain full srcPatternLength */ - && (forwardPatternLength <= srcPatternLength) ) { /* haven't reached this position yet */ + if ((currentSegmentLength >= srcPatternLength) /* current pattern segment large enough to contain full srcPatternLength */ + && (forwardPatternLength <= srcPatternLength)) { /* haven't reached this position yet */ U32 const newMatchIndex = matchCandidateIdx + (U32)forwardPatternLength - (U32)srcPatternLength; /* best position, full pattern, might be followed by more match */ if (LZ4HC_protectDictEnd(dictLimit, newMatchIndex)) matchIndex = newMatchIndex; @@ -386,7 +393,7 @@ LZ4HC_InsertAndGetWiderMatch ( matchIndex = dictLimit; } else { matchIndex = newMatchIndex; - if (lookBackLength==0) { /* no back possible */ + if (lookBackLength == 0) { /* no back possible */ size_t const maxML = MIN(currentSegmentLength, srcPatternLength); if ((size_t)longest < maxML) { assert(base + matchIndex != ip); @@ -396,95 +403,104 @@ LZ4HC_InsertAndGetWiderMatch ( *matchpos = base + matchIndex; /* virtual pos, relative to ip, to retrieve offset */ *startpos = ip; } - { U32 const distToNextPattern = DELTANEXTU16(chainTable, matchIndex); + { + U32 const distToNextPattern = DELTANEXTU16(chainTable, matchIndex); if (distToNextPattern > matchIndex) break; /* avoid overflow */ matchIndex -= distToNextPattern; - } } } } } + } + } + } + } + } continue; - } } - } } /* PA optimization */ + } + } + } + } /* PA optimization */ /* follow current chain */ matchIndex -= DELTANEXTU16(chainTable, matchIndex + matchChainPos); } /* while ((matchIndex>=lowestMatchIndex) && (nbAttempts)) */ - if ( dict == usingDictCtxHc - && nbAttempts - && ipIndex - lowestMatchIndex < LZ4_DISTANCE_MAX) { + if (dict == usingDictCtxHc + && nbAttempts + && ipIndex - lowestMatchIndex < LZ4_DISTANCE_MAX) { size_t const dictEndOffset = (size_t)(dictCtx->end - dictCtx->base); U32 dictMatchIndex = dictCtx->hashTable[LZ4HC_hashPtr(ip)]; assert(dictEndOffset <= 1 GB); matchIndex = dictMatchIndex + lowestMatchIndex - (U32)dictEndOffset; while (ipIndex - matchIndex <= LZ4_DISTANCE_MAX && nbAttempts--) { - const BYTE* const matchPtr = dictCtx->base + dictMatchIndex; + const BYTE *const matchPtr = dictCtx->base + dictMatchIndex; if (LZ4_read32(matchPtr) == pattern) { int mlt; int back = 0; - const BYTE* vLimit = ip + (dictEndOffset - dictMatchIndex); + const BYTE *vLimit = ip + (dictEndOffset - dictMatchIndex); if (vLimit > iHighLimit) vLimit = iHighLimit; - mlt = (int)LZ4_count(ip+MINMATCH, matchPtr+MINMATCH, vLimit) + MINMATCH; + mlt = (int)LZ4_count(ip + MINMATCH, matchPtr + MINMATCH, vLimit) + MINMATCH; back = lookBackLength ? LZ4HC_countBack(ip, matchPtr, iLowLimit, dictCtx->base + dictCtx->dictLimit) : 0; mlt -= back; if (mlt > longest) { longest = mlt; *matchpos = base + matchIndex + back; *startpos = ip + back; - } } + } + } - { U32 const nextOffset = DELTANEXTU16(dictCtx->chainTable, dictMatchIndex); + { + U32 const nextOffset = DELTANEXTU16(dictCtx->chainTable, dictMatchIndex); dictMatchIndex -= nextOffset; matchIndex -= nextOffset; - } } } + } + } + } return longest; } LZ4_FORCE_INLINE -int LZ4HC_InsertAndFindBestMatch(LZ4HC_CCtx_internal* const hc4, /* Index table will be updated */ - const BYTE* const ip, const BYTE* const iLimit, - const BYTE** matchpos, +int LZ4HC_InsertAndFindBestMatch(LZ4HC_CCtx_internal *const hc4, /* Index table will be updated */ + const BYTE *const ip, const BYTE *const iLimit, + const BYTE **matchpos, const int maxNbAttempts, const int patternAnalysis, - const dictCtx_directive dict) -{ - const BYTE* uselessPtr = ip; + const dictCtx_directive dict) { + const BYTE *uselessPtr = ip; /* note : LZ4HC_InsertAndGetWiderMatch() is able to modify the starting position of a match (*startpos), * but this won't be the case here, as we define iLowLimit==ip, * so LZ4HC_InsertAndGetWiderMatch() won't be allowed to search past ip */ - return LZ4HC_InsertAndGetWiderMatch(hc4, ip, ip, iLimit, MINMATCH-1, matchpos, &uselessPtr, maxNbAttempts, patternAnalysis, 0 /*chainSwap*/, dict, favorCompressionRatio); + return LZ4HC_InsertAndGetWiderMatch(hc4, ip, ip, iLimit, MINMATCH - 1, matchpos, &uselessPtr, maxNbAttempts, patternAnalysis, 0 /*chainSwap*/, dict, favorCompressionRatio); } /* LZ4HC_encodeSequence() : * @return : 0 if ok, * 1 if buffer issue detected */ -LZ4_FORCE_INLINE int LZ4HC_encodeSequence ( - const BYTE** ip, - BYTE** op, - const BYTE** anchor, +LZ4_FORCE_INLINE int LZ4HC_encodeSequence( + const BYTE **ip, + BYTE **op, + const BYTE **anchor, int matchLength, - const BYTE* const match, + const BYTE *const match, limitedOutput_directive limit, - BYTE* oend) -{ + BYTE *oend) { size_t length; - BYTE* const token = (*op)++; + BYTE *const token = (*op)++; #if defined(LZ4_DEBUG) && (LZ4_DEBUG >= 6) - static const BYTE* start = NULL; + static const BYTE *start = NULL; static U32 totalCost = 0; - U32 const pos = (start==NULL) ? 0 : (U32)(*anchor - start); + U32 const pos = (start == NULL) ? 0 : (U32)(*anchor - start); U32 const ll = (U32)(*ip - *anchor); - U32 const llAdd = (ll>=15) ? ((ll-15) / 255) + 1 : 0; - U32 const mlAdd = (matchLength>=19) ? ((matchLength-19) / 255) + 1 : 0; + U32 const llAdd = (ll >= 15) ? ((ll - 15) / 255) + 1 : 0; + U32 const mlAdd = (matchLength >= 19) ? ((matchLength - 19) / 255) + 1 : 0; U32 const cost = 1 + llAdd + ll + 2 + mlAdd; - if (start==NULL) start = *anchor; /* only works for single segment */ + if (start == NULL) start = *anchor; /* only works for single segment */ /* g_debuglog_enable = (pos >= 2228) & (pos <= 2262); */ DEBUGLOG(6, "pos:%7u -- literals:%3u, match:%4i, offset:%5u, cost:%3u + %u", - pos, - (U32)(*ip - *anchor), matchLength, (U32)(*ip-match), - cost, totalCost); + pos, + (U32)(*ip - *anchor), matchLength, (U32)(*ip - match), + cost, totalCost); totalCost += cost; #endif @@ -494,7 +510,7 @@ LZ4_FORCE_INLINE int LZ4HC_encodeSequence ( if (length >= RUN_MASK) { size_t len = length - RUN_MASK; *token = (RUN_MASK << ML_BITS); - for(; len >= 255 ; len -= 255) *(*op)++ = 255; + for (; len >= 255 ; len -= 255) * (*op)++ = 255; *(*op)++ = (BYTE)len; } else { *token = (BYTE)(length << ML_BITS); @@ -505,8 +521,9 @@ LZ4_FORCE_INLINE int LZ4HC_encodeSequence ( *op += length; /* Encode Offset */ - assert( (*ip - match) <= LZ4_DISTANCE_MAX ); /* note : consider providing offset as a value, rather than as a pointer difference */ - LZ4_writeLE16(*op, (U16)(*ip-match)); *op += 2; + assert((*ip - match) <= LZ4_DISTANCE_MAX); /* note : consider providing offset as a value, rather than as a pointer difference */ + LZ4_writeLE16(*op, (U16)(*ip - match)); + *op += 2; /* Encode MatchLength */ assert(matchLength >= MINMATCH); @@ -515,7 +532,7 @@ LZ4_FORCE_INLINE int LZ4HC_encodeSequence ( if (length >= ML_MASK) { *token += ML_MASK; length -= ML_MASK; - for(; length >= 510 ; length -= 510) { *(*op)++ = 255; *(*op)++ = 255; } + for (; length >= 510 ; length -= 510) { *(*op)++ = 255; *(*op)++ = 255; } if (length >= 255) { length -= 255; *(*op)++ = 255; } *(*op)++ = (BYTE)length; } else { @@ -529,38 +546,37 @@ LZ4_FORCE_INLINE int LZ4HC_encodeSequence ( return 0; } -LZ4_FORCE_INLINE int LZ4HC_compress_hashChain ( - LZ4HC_CCtx_internal* const ctx, - const char* const source, - char* const dest, - int* srcSizePtr, +LZ4_FORCE_INLINE int LZ4HC_compress_hashChain( + LZ4HC_CCtx_internal *const ctx, + const char *const source, + char *const dest, + int *srcSizePtr, int const maxOutputSize, unsigned maxNbAttempts, const limitedOutput_directive limit, const dictCtx_directive dict - ) -{ +) { const int inputSize = *srcSizePtr; const int patternAnalysis = (maxNbAttempts > 128); /* levels 9+ */ - const BYTE* ip = (const BYTE*) source; - const BYTE* anchor = ip; - const BYTE* const iend = ip + inputSize; - const BYTE* const mflimit = iend - MFLIMIT; - const BYTE* const matchlimit = (iend - LASTLITERALS); + const BYTE *ip = (const BYTE *) source; + const BYTE *anchor = ip; + const BYTE *const iend = ip + inputSize; + const BYTE *const mflimit = iend - MFLIMIT; + const BYTE *const matchlimit = (iend - LASTLITERALS); - BYTE* optr = (BYTE*) dest; - BYTE* op = (BYTE*) dest; - BYTE* oend = op + maxOutputSize; + BYTE *optr = (BYTE *) dest; + BYTE *op = (BYTE *) dest; + BYTE *oend = op + maxOutputSize; int ml0, ml, ml2, ml3; - const BYTE* start0; - const BYTE* ref0; - const BYTE* ref = NULL; - const BYTE* start2 = NULL; - const BYTE* ref2 = NULL; - const BYTE* start3 = NULL; - const BYTE* ref3 = NULL; + const BYTE *start0; + const BYTE *ref0; + const BYTE *ref = NULL; + const BYTE *start2 = NULL; + const BYTE *ref2 = NULL; + const BYTE *start3 = NULL; + const BYTE *ref3 = NULL; /* init */ *srcSizePtr = 0; @@ -570,16 +586,18 @@ LZ4_FORCE_INLINE int LZ4HC_compress_hashChain ( /* Main Loop */ while (ip <= mflimit) { ml = LZ4HC_InsertAndFindBestMatch(ctx, ip, matchlimit, &ref, maxNbAttempts, patternAnalysis, dict); - if (ml OPTIMAL_ML) new_ml = OPTIMAL_ML; - if (ip+new_ml > start2 + ml2 - MINMATCH) new_ml = (int)(start2 - ip) + ml2 - MINMATCH; + if (ip + new_ml > start2 + ml2 - MINMATCH) new_ml = (int)(start2 - ip) + ml2 - MINMATCH; correction = new_ml - (int)(start2 - ip); if (correction > 0) { start2 += correction; @@ -623,15 +644,15 @@ _Search3: if (start2 + ml2 <= mflimit) { ml3 = LZ4HC_InsertAndGetWiderMatch(ctx, - start2 + ml2 - 3, start2, matchlimit, ml2, &ref3, &start3, - maxNbAttempts, patternAnalysis, 0, dict, favorCompressionRatio); + start2 + ml2 - 3, start2, matchlimit, ml2, &ref3, &start3, + maxNbAttempts, patternAnalysis, 0, dict, favorCompressionRatio); } else { ml3 = ml2; } if (ml3 == ml2) { /* No better match => encode ML1 and ML2 */ /* ip & ref are known; Now for ml */ - if (start2 < ip+ml) ml = (int)(start2 - ip); + if (start2 < ip + ml) ml = (int)(start2 - ip); /* Now, encode 2 sequences */ optr = op; if (LZ4HC_encodeSequence(UPDATABLE(ip, op, anchor), ml, ref, limit, oend)) goto _dest_overflow; @@ -641,10 +662,10 @@ _Search3: continue; } - if (start3 < ip+ml+3) { /* Not enough space for match 2 : remove it */ - if (start3 >= (ip+ml)) { /* can write Seq1 immediately ==> Seq2 is removed, so Seq3 becomes Seq1 */ - if (start2 < ip+ml) { - int correction = (int)(ip+ml - start2); + if (start3 < ip + ml + 3) { /* Not enough space for match 2 : remove it */ + if (start3 >= (ip + ml)) { /* can write Seq1 immediately ==> Seq2 is removed, so Seq3 becomes Seq1 */ + if (start2 < ip + ml) { + int correction = (int)(ip + ml - start2); start2 += correction; ref2 += correction; ml2 -= correction; @@ -678,7 +699,7 @@ _Search3: * let's write the first one ML1. * ip & ref are known; Now decide ml. */ - if (start2 < ip+ml) { + if (start2 < ip + ml) { if ((start2 - ip) < OPTIMAL_ML) { int correction; if (ml > OPTIMAL_ML) ml = OPTIMAL_ML; @@ -697,10 +718,14 @@ _Search3: if (LZ4HC_encodeSequence(UPDATABLE(ip, op, anchor), ml, ref, limit, oend)) goto _dest_overflow; /* ML2 becomes ML1 */ - ip = start2; ref = ref2; ml = ml2; + ip = start2; + ref = ref2; + ml = ml2; /* ML3 becomes ML2 */ - start2 = start3; ref2 = ref3; ml2 = ml3; + start2 = start3; + ref2 = ref3; + ml2 = ml3; /* let's find a new ML3 */ goto _Search3; @@ -708,7 +733,8 @@ _Search3: _last_literals: /* Encode Last Literals */ - { size_t lastRunSize = (size_t)(iend - anchor); /* literals */ + { + size_t lastRunSize = (size_t)(iend - anchor); /* literals */ size_t litLength = (lastRunSize + 255 - RUN_MASK) / 255; size_t const totalSize = 1 + litLength + lastRunSize; if (limit == fillOutput) oend += LASTLITERALS; /* restore correct value */ @@ -724,7 +750,7 @@ _last_literals: if (lastRunSize >= RUN_MASK) { size_t accumulator = lastRunSize - RUN_MASK; *op++ = (RUN_MASK << ML_BITS); - for(; accumulator >= 255 ; accumulator -= 255) *op++ = 255; + for (; accumulator >= 255 ; accumulator -= 255) * op++ = 255; *op++ = (BYTE) accumulator; } else { *op++ = (BYTE)(lastRunSize << ML_BITS); @@ -734,8 +760,8 @@ _last_literals: } /* End */ - *srcSizePtr = (int) (((const char*)ip) - source); - return (int) (((char*)op)-dest); + *srcSizePtr = (int)(((const char *)ip) - source); + return (int)(((char *)op) - dest); _dest_overflow: if (limit == fillOutput) { @@ -746,33 +772,32 @@ _dest_overflow: } -static int LZ4HC_compress_optimal( LZ4HC_CCtx_internal* ctx, - const char* const source, char* dst, - int* srcSizePtr, int dstCapacity, - int const nbSearches, size_t sufficient_len, - const limitedOutput_directive limit, int const fullUpdate, - const dictCtx_directive dict, - HCfavor_e favorDecSpeed); +static int LZ4HC_compress_optimal(LZ4HC_CCtx_internal *ctx, + const char *const source, char *dst, + int *srcSizePtr, int dstCapacity, + int const nbSearches, size_t sufficient_len, + const limitedOutput_directive limit, int const fullUpdate, + const dictCtx_directive dict, + HCfavor_e favorDecSpeed); -LZ4_FORCE_INLINE int LZ4HC_compress_generic_internal ( - LZ4HC_CCtx_internal* const ctx, - const char* const src, - char* const dst, - int* const srcSizePtr, +LZ4_FORCE_INLINE int LZ4HC_compress_generic_internal( + LZ4HC_CCtx_internal *const ctx, + const char *const src, + char *const dst, + int *const srcSizePtr, int const dstCapacity, int cLevel, const limitedOutput_directive limit, const dictCtx_directive dict - ) -{ +) { typedef enum { lz4hc, lz4opt } lz4hc_strat_e; typedef struct { lz4hc_strat_e strat; U32 nbSearches; U32 targetLength; } cParams_t; - static const cParams_t clTable[LZ4HC_CLEVEL_MAX+1] = { + static const cParams_t clTable[LZ4HC_CLEVEL_MAX + 1] = { { lz4hc, 2, 16 }, /* 0, unused */ { lz4hc, 2, 16 }, /* 1, unused */ { lz4hc, 2, 16 }, /* 2, unused */ @@ -784,8 +809,8 @@ LZ4_FORCE_INLINE int LZ4HC_compress_generic_internal ( { lz4hc, 128, 16 }, /* 8 */ { lz4hc, 256, 16 }, /* 9 */ { lz4opt, 96, 64 }, /*10==LZ4HC_CLEVEL_OPT_MIN*/ - { lz4opt, 512,128 }, /*11 */ - { lz4opt,16384,LZ4_OPT_NUM }, /* 12==LZ4HC_CLEVEL_MAX */ + { lz4opt, 512, 128 }, /*11 */ + { lz4opt, 16384, LZ4_OPT_NUM }, /* 12==LZ4HC_CLEVEL_MAX */ }; DEBUGLOG(4, "LZ4HC_compress_generic(ctx=%p, src=%p, srcSize=%d)", ctx, src, *srcSizePtr); @@ -796,55 +821,54 @@ LZ4_FORCE_INLINE int LZ4HC_compress_generic_internal ( ctx->end += *srcSizePtr; if (cLevel < 1) cLevel = LZ4HC_CLEVEL_DEFAULT; /* note : convention is different from lz4frame, maybe something to review */ cLevel = MIN(LZ4HC_CLEVEL_MAX, cLevel); - { cParams_t const cParam = clTable[cLevel]; + { + cParams_t const cParam = clTable[cLevel]; HCfavor_e const favor = ctx->favorDecSpeed ? favorDecompressionSpeed : favorCompressionRatio; int result; if (cParam.strat == lz4hc) { result = LZ4HC_compress_hashChain(ctx, - src, dst, srcSizePtr, dstCapacity, - cParam.nbSearches, limit, dict); + src, dst, srcSizePtr, dstCapacity, + cParam.nbSearches, limit, dict); } else { assert(cParam.strat == lz4opt); result = LZ4HC_compress_optimal(ctx, - src, dst, srcSizePtr, dstCapacity, - (int)cParam.nbSearches, cParam.targetLength, limit, - cLevel == LZ4HC_CLEVEL_MAX, /* ultra mode */ - dict, favor); + src, dst, srcSizePtr, dstCapacity, + (int)cParam.nbSearches, cParam.targetLength, limit, + cLevel == LZ4HC_CLEVEL_MAX, /* ultra mode */ + dict, favor); } if (result <= 0) ctx->dirty = 1; return result; } } -static void LZ4HC_setExternalDict(LZ4HC_CCtx_internal* ctxPtr, const BYTE* newBlock); +static void LZ4HC_setExternalDict(LZ4HC_CCtx_internal *ctxPtr, const BYTE *newBlock); static int -LZ4HC_compress_generic_noDictCtx ( - LZ4HC_CCtx_internal* const ctx, - const char* const src, - char* const dst, - int* const srcSizePtr, - int const dstCapacity, - int cLevel, - limitedOutput_directive limit - ) -{ +LZ4HC_compress_generic_noDictCtx( + LZ4HC_CCtx_internal *const ctx, + const char *const src, + char *const dst, + int *const srcSizePtr, + int const dstCapacity, + int cLevel, + limitedOutput_directive limit +) { assert(ctx->dictCtx == NULL); return LZ4HC_compress_generic_internal(ctx, src, dst, srcSizePtr, dstCapacity, cLevel, limit, noDictCtx); } static int -LZ4HC_compress_generic_dictCtx ( - LZ4HC_CCtx_internal* const ctx, - const char* const src, - char* const dst, - int* const srcSizePtr, - int const dstCapacity, - int cLevel, - limitedOutput_directive limit - ) -{ +LZ4HC_compress_generic_dictCtx( + LZ4HC_CCtx_internal *const ctx, + const char *const src, + char *const dst, + int *const srcSizePtr, + int const dstCapacity, + int cLevel, + limitedOutput_directive limit +) { const size_t position = (size_t)(ctx->end - ctx->base) - ctx->lowLimit; assert(ctx->dictCtx != NULL); if (position >= 64 KB) { @@ -861,16 +885,15 @@ LZ4HC_compress_generic_dictCtx ( } static int -LZ4HC_compress_generic ( - LZ4HC_CCtx_internal* const ctx, - const char* const src, - char* const dst, - int* const srcSizePtr, - int const dstCapacity, - int cLevel, - limitedOutput_directive limit - ) -{ +LZ4HC_compress_generic( + LZ4HC_CCtx_internal *const ctx, + const char *const src, + char *const dst, + int *const srcSizePtr, + int const dstCapacity, + int cLevel, + limitedOutput_directive limit +) { if (ctx->dictCtx == NULL) { return LZ4HC_compress_generic_noDictCtx(ctx, src, dst, srcSizePtr, dstCapacity, cLevel, limit); } else { @@ -884,8 +907,7 @@ int LZ4_sizeofStateHC(void) { return (int)sizeof(LZ4_streamHC_t); } #ifndef _MSC_VER /* for some reason, Visual fails the aligment test on 32-bit x86 : * it reports an aligment of 8-bytes, * while actually aligning LZ4_streamHC_t on 4 bytes. */ -static size_t LZ4_streamHC_t_alignment(void) -{ +static size_t LZ4_streamHC_t_alignment(void) { typedef struct { char c; LZ4_streamHC_t t; } t_a; return sizeof(t_a) - sizeof(LZ4_streamHC_t); } @@ -893,37 +915,34 @@ static size_t LZ4_streamHC_t_alignment(void) /* state is presumed correctly initialized, * in which case its size and alignment have already been validate */ -int LZ4_compress_HC_extStateHC_fastReset (void* state, const char* src, char* dst, int srcSize, int dstCapacity, int compressionLevel) -{ - LZ4HC_CCtx_internal* const ctx = &((LZ4_streamHC_t*)state)->internal_donotuse; +int LZ4_compress_HC_extStateHC_fastReset(void *state, const char *src, char *dst, int srcSize, int dstCapacity, int compressionLevel) { + LZ4HC_CCtx_internal *const ctx = &((LZ4_streamHC_t *)state)->internal_donotuse; #ifndef _MSC_VER /* for some reason, Visual fails the aligment test on 32-bit x86 : * it reports an aligment of 8-bytes, * while actually aligning LZ4_streamHC_t on 4 bytes. */ assert(((size_t)state & (LZ4_streamHC_t_alignment() - 1)) == 0); /* check alignment */ #endif - if (((size_t)(state)&(sizeof(void*)-1)) != 0) return 0; /* Error : state is not aligned for pointers (32 or 64 bits) */ - LZ4_resetStreamHC_fast((LZ4_streamHC_t*)state, compressionLevel); - LZ4HC_init_internal (ctx, (const BYTE*)src); + if (((size_t)(state) & (sizeof(void *) -1)) != 0) return 0; /* Error : state is not aligned for pointers (32 or 64 bits) */ + LZ4_resetStreamHC_fast((LZ4_streamHC_t *)state, compressionLevel); + LZ4HC_init_internal(ctx, (const BYTE *)src); if (dstCapacity < LZ4_compressBound(srcSize)) - return LZ4HC_compress_generic (ctx, src, dst, &srcSize, dstCapacity, compressionLevel, limitedOutput); + return LZ4HC_compress_generic(ctx, src, dst, &srcSize, dstCapacity, compressionLevel, limitedOutput); else - return LZ4HC_compress_generic (ctx, src, dst, &srcSize, dstCapacity, compressionLevel, notLimited); + return LZ4HC_compress_generic(ctx, src, dst, &srcSize, dstCapacity, compressionLevel, notLimited); } -int LZ4_compress_HC_extStateHC (void* state, const char* src, char* dst, int srcSize, int dstCapacity, int compressionLevel) -{ - LZ4_streamHC_t* const ctx = LZ4_initStreamHC(state, sizeof(*ctx)); - if (ctx==NULL) return 0; /* init failure */ +int LZ4_compress_HC_extStateHC(void *state, const char *src, char *dst, int srcSize, int dstCapacity, int compressionLevel) { + LZ4_streamHC_t *const ctx = LZ4_initStreamHC(state, sizeof(*ctx)); + if (ctx == NULL) return 0; /* init failure */ return LZ4_compress_HC_extStateHC_fastReset(state, src, dst, srcSize, dstCapacity, compressionLevel); } -int LZ4_compress_HC(const char* src, char* dst, int srcSize, int dstCapacity, int compressionLevel) -{ +int LZ4_compress_HC(const char *src, char *dst, int srcSize, int dstCapacity, int compressionLevel) { #if defined(LZ4HC_HEAPMODE) && LZ4HC_HEAPMODE==1 - LZ4_streamHC_t* const statePtr = (LZ4_streamHC_t*)ALLOC(sizeof(LZ4_streamHC_t)); + LZ4_streamHC_t *const statePtr = (LZ4_streamHC_t *)ALLOC(sizeof(LZ4_streamHC_t)); #else LZ4_streamHC_t state; - LZ4_streamHC_t* const statePtr = &state; + LZ4_streamHC_t *const statePtr = &state; #endif int const cSize = LZ4_compress_HC_extStateHC(statePtr, src, dst, srcSize, dstCapacity, compressionLevel); #if defined(LZ4HC_HEAPMODE) && LZ4HC_HEAPMODE==1 @@ -933,11 +952,10 @@ int LZ4_compress_HC(const char* src, char* dst, int srcSize, int dstCapacity, in } /* state is presumed sized correctly (>= sizeof(LZ4_streamHC_t)) */ -int LZ4_compress_HC_destSize(void* state, const char* source, char* dest, int* sourceSizePtr, int targetDestSize, int cLevel) -{ - LZ4_streamHC_t* const ctx = LZ4_initStreamHC(state, sizeof(*ctx)); - if (ctx==NULL) return 0; /* init failure */ - LZ4HC_init_internal(&ctx->internal_donotuse, (const BYTE*) source); +int LZ4_compress_HC_destSize(void *state, const char *source, char *dest, int *sourceSizePtr, int targetDestSize, int cLevel) { + LZ4_streamHC_t *const ctx = LZ4_initStreamHC(state, sizeof(*ctx)); + if (ctx == NULL) return 0; /* init failure */ + LZ4HC_init_internal(&ctx->internal_donotuse, (const BYTE *) source); LZ4_setCompressionLevel(ctx, cLevel); return LZ4HC_compress_generic(&ctx->internal_donotuse, source, dest, sourceSizePtr, targetDestSize, cLevel, fillOutput); } @@ -948,16 +966,14 @@ int LZ4_compress_HC_destSize(void* state, const char* source, char* dest, int* s * Streaming Functions **************************************/ /* allocation */ -LZ4_streamHC_t* LZ4_createStreamHC(void) -{ - LZ4_streamHC_t* const LZ4_streamHCPtr = (LZ4_streamHC_t*)ALLOC(sizeof(LZ4_streamHC_t)); - if (LZ4_streamHCPtr==NULL) return NULL; +LZ4_streamHC_t *LZ4_createStreamHC(void) { + LZ4_streamHC_t *const LZ4_streamHCPtr = (LZ4_streamHC_t *)ALLOC(sizeof(LZ4_streamHC_t)); + if (LZ4_streamHCPtr == NULL) return NULL; LZ4_initStreamHC(LZ4_streamHCPtr, sizeof(*LZ4_streamHCPtr)); /* full initialization, malloc'ed buffer can be full of garbage */ return LZ4_streamHCPtr; } -int LZ4_freeStreamHC (LZ4_streamHC_t* LZ4_streamHCPtr) -{ +int LZ4_freeStreamHC(LZ4_streamHC_t *LZ4_streamHCPtr) { DEBUGLOG(4, "LZ4_freeStreamHC(%p)", LZ4_streamHCPtr); if (!LZ4_streamHCPtr) return 0; /* support free on NULL */ FREEMEM(LZ4_streamHCPtr); @@ -965,9 +981,8 @@ int LZ4_freeStreamHC (LZ4_streamHC_t* LZ4_streamHCPtr) } -LZ4_streamHC_t* LZ4_initStreamHC (void* buffer, size_t size) -{ - LZ4_streamHC_t* const LZ4_streamHCPtr = (LZ4_streamHC_t*)buffer; +LZ4_streamHC_t *LZ4_initStreamHC(void *buffer, size_t size) { + LZ4_streamHC_t *const LZ4_streamHCPtr = (LZ4_streamHC_t *)buffer; if (buffer == NULL) return NULL; if (size < sizeof(LZ4_streamHC_t)) return NULL; #ifndef _MSC_VER /* for some reason, Visual fails the aligment test on 32-bit x86 : @@ -979,7 +994,7 @@ LZ4_streamHC_t* LZ4_initStreamHC (void* buffer, size_t size) LZ4_STATIC_ASSERT(sizeof(LZ4HC_CCtx_internal) <= LZ4_STREAMHCSIZE); DEBUGLOG(4, "LZ4_initStreamHC(%p, %u)", LZ4_streamHCPtr, (unsigned)size); /* end-base will trigger a clearTable on starting compression */ - LZ4_streamHCPtr->internal_donotuse.end = (const BYTE *)(ptrdiff_t)-1; + LZ4_streamHCPtr->internal_donotuse.end = (const BYTE *)(ptrdiff_t) -1; LZ4_streamHCPtr->internal_donotuse.base = NULL; LZ4_streamHCPtr->internal_donotuse.dictCtx = NULL; LZ4_streamHCPtr->internal_donotuse.favorDecSpeed = 0; @@ -989,14 +1004,12 @@ LZ4_streamHC_t* LZ4_initStreamHC (void* buffer, size_t size) } /* just a stub */ -void LZ4_resetStreamHC (LZ4_streamHC_t* LZ4_streamHCPtr, int compressionLevel) -{ +void LZ4_resetStreamHC(LZ4_streamHC_t *LZ4_streamHCPtr, int compressionLevel) { LZ4_initStreamHC(LZ4_streamHCPtr, sizeof(*LZ4_streamHCPtr)); LZ4_setCompressionLevel(LZ4_streamHCPtr, compressionLevel); } -void LZ4_resetStreamHC_fast (LZ4_streamHC_t* LZ4_streamHCPtr, int compressionLevel) -{ +void LZ4_resetStreamHC_fast(LZ4_streamHC_t *LZ4_streamHCPtr, int compressionLevel) { DEBUGLOG(4, "LZ4_resetStreamHC_fast(%p, %d)", LZ4_streamHCPtr, compressionLevel); if (LZ4_streamHCPtr->internal_donotuse.dirty) { LZ4_initStreamHC(LZ4_streamHCPtr, sizeof(*LZ4_streamHCPtr)); @@ -1009,25 +1022,22 @@ void LZ4_resetStreamHC_fast (LZ4_streamHC_t* LZ4_streamHCPtr, int compressionLev LZ4_setCompressionLevel(LZ4_streamHCPtr, compressionLevel); } -void LZ4_setCompressionLevel(LZ4_streamHC_t* LZ4_streamHCPtr, int compressionLevel) -{ +void LZ4_setCompressionLevel(LZ4_streamHC_t *LZ4_streamHCPtr, int compressionLevel) { DEBUGLOG(5, "LZ4_setCompressionLevel(%p, %d)", LZ4_streamHCPtr, compressionLevel); if (compressionLevel < 1) compressionLevel = LZ4HC_CLEVEL_DEFAULT; if (compressionLevel > LZ4HC_CLEVEL_MAX) compressionLevel = LZ4HC_CLEVEL_MAX; LZ4_streamHCPtr->internal_donotuse.compressionLevel = (short)compressionLevel; } -void LZ4_favorDecompressionSpeed(LZ4_streamHC_t* LZ4_streamHCPtr, int favor) -{ - LZ4_streamHCPtr->internal_donotuse.favorDecSpeed = (favor!=0); +void LZ4_favorDecompressionSpeed(LZ4_streamHC_t *LZ4_streamHCPtr, int favor) { + LZ4_streamHCPtr->internal_donotuse.favorDecSpeed = (favor != 0); } /* LZ4_loadDictHC() : * LZ4_streamHCPtr is presumed properly initialized */ -int LZ4_loadDictHC (LZ4_streamHC_t* LZ4_streamHCPtr, - const char* dictionary, int dictSize) -{ - LZ4HC_CCtx_internal* const ctxPtr = &LZ4_streamHCPtr->internal_donotuse; +int LZ4_loadDictHC(LZ4_streamHC_t *LZ4_streamHCPtr, + const char *dictionary, int dictSize) { + LZ4HC_CCtx_internal *const ctxPtr = &LZ4_streamHCPtr->internal_donotuse; DEBUGLOG(4, "LZ4_loadDictHC(ctx:%p, dict:%p, dictSize:%d)", LZ4_streamHCPtr, dictionary, dictSize); assert(LZ4_streamHCPtr != NULL); if (dictSize > 64 KB) { @@ -1035,13 +1045,14 @@ int LZ4_loadDictHC (LZ4_streamHC_t* LZ4_streamHCPtr, dictSize = 64 KB; } /* need a full initialization, there are bad side-effects when using resetFast() */ - { int const cLevel = ctxPtr->compressionLevel; + { + int const cLevel = ctxPtr->compressionLevel; LZ4_initStreamHC(LZ4_streamHCPtr, sizeof(*LZ4_streamHCPtr)); LZ4_setCompressionLevel(LZ4_streamHCPtr, cLevel); } - LZ4HC_init_internal (ctxPtr, (const BYTE*)dictionary); - ctxPtr->end = (const BYTE*)dictionary + dictSize; - if (dictSize >= 4) LZ4HC_Insert (ctxPtr, ctxPtr->end-3); + LZ4HC_init_internal(ctxPtr, (const BYTE *)dictionary); + ctxPtr->end = (const BYTE *)dictionary + dictSize; + if (dictSize >= 4) LZ4HC_Insert(ctxPtr, ctxPtr->end - 3); return dictSize; } @@ -1051,11 +1062,10 @@ void LZ4_attach_HC_dictionary(LZ4_streamHC_t *working_stream, const LZ4_streamHC /* compression */ -static void LZ4HC_setExternalDict(LZ4HC_CCtx_internal* ctxPtr, const BYTE* newBlock) -{ +static void LZ4HC_setExternalDict(LZ4HC_CCtx_internal *ctxPtr, const BYTE *newBlock) { DEBUGLOG(4, "LZ4HC_setExternalDict(%p, %p)", ctxPtr, newBlock); if (ctxPtr->end >= ctxPtr->base + ctxPtr->dictLimit + 4) - LZ4HC_Insert (ctxPtr, ctxPtr->end-3); /* Referencing remaining dictionary content */ + LZ4HC_Insert(ctxPtr, ctxPtr->end - 3); /* Referencing remaining dictionary content */ /* Only one memory segment for extDict, so any previous extDict is lost at this stage */ ctxPtr->lowLimit = ctxPtr->dictLimit; @@ -1069,53 +1079,51 @@ static void LZ4HC_setExternalDict(LZ4HC_CCtx_internal* ctxPtr, const BYTE* newBl ctxPtr->dictCtx = NULL; } -static int LZ4_compressHC_continue_generic (LZ4_streamHC_t* LZ4_streamHCPtr, - const char* src, char* dst, - int* srcSizePtr, int dstCapacity, - limitedOutput_directive limit) -{ - LZ4HC_CCtx_internal* const ctxPtr = &LZ4_streamHCPtr->internal_donotuse; +static int LZ4_compressHC_continue_generic(LZ4_streamHC_t *LZ4_streamHCPtr, + const char *src, char *dst, + int *srcSizePtr, int dstCapacity, + limitedOutput_directive limit) { + LZ4HC_CCtx_internal *const ctxPtr = &LZ4_streamHCPtr->internal_donotuse; DEBUGLOG(4, "LZ4_compressHC_continue_generic(ctx=%p, src=%p, srcSize=%d)", - LZ4_streamHCPtr, src, *srcSizePtr); + LZ4_streamHCPtr, src, *srcSizePtr); assert(ctxPtr != NULL); /* auto-init if forgotten */ - if (ctxPtr->base == NULL) LZ4HC_init_internal (ctxPtr, (const BYTE*) src); + if (ctxPtr->base == NULL) LZ4HC_init_internal(ctxPtr, (const BYTE *) src); /* Check overflow */ if ((size_t)(ctxPtr->end - ctxPtr->base) > 2 GB) { size_t dictSize = (size_t)(ctxPtr->end - ctxPtr->base) - ctxPtr->dictLimit; if (dictSize > 64 KB) dictSize = 64 KB; - LZ4_loadDictHC(LZ4_streamHCPtr, (const char*)(ctxPtr->end) - dictSize, (int)dictSize); + LZ4_loadDictHC(LZ4_streamHCPtr, (const char *)(ctxPtr->end) - dictSize, (int)dictSize); } /* Check if blocks follow each other */ - if ((const BYTE*)src != ctxPtr->end) - LZ4HC_setExternalDict(ctxPtr, (const BYTE*)src); + if ((const BYTE *)src != ctxPtr->end) + LZ4HC_setExternalDict(ctxPtr, (const BYTE *)src); /* Check overlapping input/dictionary space */ - { const BYTE* sourceEnd = (const BYTE*) src + *srcSizePtr; - const BYTE* const dictBegin = ctxPtr->dictBase + ctxPtr->lowLimit; - const BYTE* const dictEnd = ctxPtr->dictBase + ctxPtr->dictLimit; - if ((sourceEnd > dictBegin) && ((const BYTE*)src < dictEnd)) { + { + const BYTE *sourceEnd = (const BYTE *) src + *srcSizePtr; + const BYTE *const dictBegin = ctxPtr->dictBase + ctxPtr->lowLimit; + const BYTE *const dictEnd = ctxPtr->dictBase + ctxPtr->dictLimit; + if ((sourceEnd > dictBegin) && ((const BYTE *)src < dictEnd)) { if (sourceEnd > dictEnd) sourceEnd = dictEnd; ctxPtr->lowLimit = (U32)(sourceEnd - ctxPtr->dictBase); if (ctxPtr->dictLimit - ctxPtr->lowLimit < 4) ctxPtr->lowLimit = ctxPtr->dictLimit; } } - return LZ4HC_compress_generic (ctxPtr, src, dst, srcSizePtr, dstCapacity, ctxPtr->compressionLevel, limit); + return LZ4HC_compress_generic(ctxPtr, src, dst, srcSizePtr, dstCapacity, ctxPtr->compressionLevel, limit); } -int LZ4_compress_HC_continue (LZ4_streamHC_t* LZ4_streamHCPtr, const char* src, char* dst, int srcSize, int dstCapacity) -{ +int LZ4_compress_HC_continue(LZ4_streamHC_t *LZ4_streamHCPtr, const char *src, char *dst, int srcSize, int dstCapacity) { if (dstCapacity < LZ4_compressBound(srcSize)) - return LZ4_compressHC_continue_generic (LZ4_streamHCPtr, src, dst, &srcSize, dstCapacity, limitedOutput); + return LZ4_compressHC_continue_generic(LZ4_streamHCPtr, src, dst, &srcSize, dstCapacity, limitedOutput); else - return LZ4_compressHC_continue_generic (LZ4_streamHCPtr, src, dst, &srcSize, dstCapacity, notLimited); + return LZ4_compressHC_continue_generic(LZ4_streamHCPtr, src, dst, &srcSize, dstCapacity, notLimited); } -int LZ4_compress_HC_continue_destSize (LZ4_streamHC_t* LZ4_streamHCPtr, const char* src, char* dst, int* srcSizePtr, int targetDestSize) -{ +int LZ4_compress_HC_continue_destSize(LZ4_streamHC_t *LZ4_streamHCPtr, const char *src, char *dst, int *srcSizePtr, int targetDestSize) { return LZ4_compressHC_continue_generic(LZ4_streamHCPtr, src, dst, srcSizePtr, targetDestSize, fillOutput); } @@ -1123,17 +1131,17 @@ int LZ4_compress_HC_continue_destSize (LZ4_streamHC_t* LZ4_streamHCPtr, const ch /* dictionary saving */ -int LZ4_saveDictHC (LZ4_streamHC_t* LZ4_streamHCPtr, char* safeBuffer, int dictSize) -{ - LZ4HC_CCtx_internal* const streamPtr = &LZ4_streamHCPtr->internal_donotuse; +int LZ4_saveDictHC(LZ4_streamHC_t *LZ4_streamHCPtr, char *safeBuffer, int dictSize) { + LZ4HC_CCtx_internal *const streamPtr = &LZ4_streamHCPtr->internal_donotuse; int const prefixSize = (int)(streamPtr->end - (streamPtr->base + streamPtr->dictLimit)); DEBUGLOG(4, "LZ4_saveDictHC(%p, %p, %d)", LZ4_streamHCPtr, safeBuffer, dictSize); if (dictSize > 64 KB) dictSize = 64 KB; if (dictSize < 4) dictSize = 0; if (dictSize > prefixSize) dictSize = prefixSize; memmove(safeBuffer, streamPtr->end - dictSize, dictSize); - { U32 const endIndex = (U32)(streamPtr->end - streamPtr->base); - streamPtr->end = (const BYTE*)safeBuffer + dictSize; + { + U32 const endIndex = (U32)(streamPtr->end - streamPtr->base); + streamPtr->end = (const BYTE *)safeBuffer + dictSize; streamPtr->base = streamPtr->end - endIndex; streamPtr->dictLimit = endIndex - (U32)dictSize; streamPtr->lowLimit = endIndex - (U32)dictSize; @@ -1150,16 +1158,16 @@ int LZ4_saveDictHC (LZ4_streamHC_t* LZ4_streamHCPtr, char* safeBuffer, int dictS /* These functions currently generate deprecation warnings */ /* Wrappers for deprecated compression functions */ -int LZ4_compressHC(const char* src, char* dst, int srcSize) { return LZ4_compress_HC (src, dst, srcSize, LZ4_compressBound(srcSize), 0); } -int LZ4_compressHC_limitedOutput(const char* src, char* dst, int srcSize, int maxDstSize) { return LZ4_compress_HC(src, dst, srcSize, maxDstSize, 0); } -int LZ4_compressHC2(const char* src, char* dst, int srcSize, int cLevel) { return LZ4_compress_HC (src, dst, srcSize, LZ4_compressBound(srcSize), cLevel); } -int LZ4_compressHC2_limitedOutput(const char* src, char* dst, int srcSize, int maxDstSize, int cLevel) { return LZ4_compress_HC(src, dst, srcSize, maxDstSize, cLevel); } -int LZ4_compressHC_withStateHC (void* state, const char* src, char* dst, int srcSize) { return LZ4_compress_HC_extStateHC (state, src, dst, srcSize, LZ4_compressBound(srcSize), 0); } -int LZ4_compressHC_limitedOutput_withStateHC (void* state, const char* src, char* dst, int srcSize, int maxDstSize) { return LZ4_compress_HC_extStateHC (state, src, dst, srcSize, maxDstSize, 0); } -int LZ4_compressHC2_withStateHC (void* state, const char* src, char* dst, int srcSize, int cLevel) { return LZ4_compress_HC_extStateHC(state, src, dst, srcSize, LZ4_compressBound(srcSize), cLevel); } -int LZ4_compressHC2_limitedOutput_withStateHC (void* state, const char* src, char* dst, int srcSize, int maxDstSize, int cLevel) { return LZ4_compress_HC_extStateHC(state, src, dst, srcSize, maxDstSize, cLevel); } -int LZ4_compressHC_continue (LZ4_streamHC_t* ctx, const char* src, char* dst, int srcSize) { return LZ4_compress_HC_continue (ctx, src, dst, srcSize, LZ4_compressBound(srcSize)); } -int LZ4_compressHC_limitedOutput_continue (LZ4_streamHC_t* ctx, const char* src, char* dst, int srcSize, int maxDstSize) { return LZ4_compress_HC_continue (ctx, src, dst, srcSize, maxDstSize); } +int LZ4_compressHC(const char *src, char *dst, int srcSize) { return LZ4_compress_HC(src, dst, srcSize, LZ4_compressBound(srcSize), 0); } +int LZ4_compressHC_limitedOutput(const char *src, char *dst, int srcSize, int maxDstSize) { return LZ4_compress_HC(src, dst, srcSize, maxDstSize, 0); } +int LZ4_compressHC2(const char *src, char *dst, int srcSize, int cLevel) { return LZ4_compress_HC(src, dst, srcSize, LZ4_compressBound(srcSize), cLevel); } +int LZ4_compressHC2_limitedOutput(const char *src, char *dst, int srcSize, int maxDstSize, int cLevel) { return LZ4_compress_HC(src, dst, srcSize, maxDstSize, cLevel); } +int LZ4_compressHC_withStateHC(void *state, const char *src, char *dst, int srcSize) { return LZ4_compress_HC_extStateHC(state, src, dst, srcSize, LZ4_compressBound(srcSize), 0); } +int LZ4_compressHC_limitedOutput_withStateHC(void *state, const char *src, char *dst, int srcSize, int maxDstSize) { return LZ4_compress_HC_extStateHC(state, src, dst, srcSize, maxDstSize, 0); } +int LZ4_compressHC2_withStateHC(void *state, const char *src, char *dst, int srcSize, int cLevel) { return LZ4_compress_HC_extStateHC(state, src, dst, srcSize, LZ4_compressBound(srcSize), cLevel); } +int LZ4_compressHC2_limitedOutput_withStateHC(void *state, const char *src, char *dst, int srcSize, int maxDstSize, int cLevel) { return LZ4_compress_HC_extStateHC(state, src, dst, srcSize, maxDstSize, cLevel); } +int LZ4_compressHC_continue(LZ4_streamHC_t *ctx, const char *src, char *dst, int srcSize) { return LZ4_compress_HC_continue(ctx, src, dst, srcSize, LZ4_compressBound(srcSize)); } +int LZ4_compressHC_limitedOutput_continue(LZ4_streamHC_t *ctx, const char *src, char *dst, int srcSize, int maxDstSize) { return LZ4_compress_HC_continue(ctx, src, dst, srcSize, maxDstSize); } /* Deprecated streaming functions */ @@ -1167,42 +1175,36 @@ int LZ4_sizeofStreamStateHC(void) { return LZ4_STREAMHCSIZE; } /* state is presumed correctly sized, aka >= sizeof(LZ4_streamHC_t) * @return : 0 on success, !=0 if error */ -int LZ4_resetStreamStateHC(void* state, char* inputBuffer) -{ - LZ4_streamHC_t* const hc4 = LZ4_initStreamHC(state, sizeof(*hc4)); +int LZ4_resetStreamStateHC(void *state, char *inputBuffer) { + LZ4_streamHC_t *const hc4 = LZ4_initStreamHC(state, sizeof(*hc4)); if (hc4 == NULL) return 1; /* init failed */ - LZ4HC_init_internal (&hc4->internal_donotuse, (const BYTE*)inputBuffer); + LZ4HC_init_internal(&hc4->internal_donotuse, (const BYTE *)inputBuffer); return 0; } -void* LZ4_createHC (const char* inputBuffer) -{ - LZ4_streamHC_t* const hc4 = LZ4_createStreamHC(); +void *LZ4_createHC(const char *inputBuffer) { + LZ4_streamHC_t *const hc4 = LZ4_createStreamHC(); if (hc4 == NULL) return NULL; /* not enough memory */ - LZ4HC_init_internal (&hc4->internal_donotuse, (const BYTE*)inputBuffer); + LZ4HC_init_internal(&hc4->internal_donotuse, (const BYTE *)inputBuffer); return hc4; } -int LZ4_freeHC (void* LZ4HC_Data) -{ +int LZ4_freeHC(void *LZ4HC_Data) { if (!LZ4HC_Data) return 0; /* support free on NULL */ FREEMEM(LZ4HC_Data); return 0; } -int LZ4_compressHC2_continue (void* LZ4HC_Data, const char* src, char* dst, int srcSize, int cLevel) -{ - return LZ4HC_compress_generic (&((LZ4_streamHC_t*)LZ4HC_Data)->internal_donotuse, src, dst, &srcSize, 0, cLevel, notLimited); +int LZ4_compressHC2_continue(void *LZ4HC_Data, const char *src, char *dst, int srcSize, int cLevel) { + return LZ4HC_compress_generic(&((LZ4_streamHC_t *)LZ4HC_Data)->internal_donotuse, src, dst, &srcSize, 0, cLevel, notLimited); } -int LZ4_compressHC2_limitedOutput_continue (void* LZ4HC_Data, const char* src, char* dst, int srcSize, int dstCapacity, int cLevel) -{ - return LZ4HC_compress_generic (&((LZ4_streamHC_t*)LZ4HC_Data)->internal_donotuse, src, dst, &srcSize, dstCapacity, cLevel, limitedOutput); +int LZ4_compressHC2_limitedOutput_continue(void *LZ4HC_Data, const char *src, char *dst, int srcSize, int dstCapacity, int cLevel) { + return LZ4HC_compress_generic(&((LZ4_streamHC_t *)LZ4HC_Data)->internal_donotuse, src, dst, &srcSize, dstCapacity, cLevel, limitedOutput); } -char* LZ4_slideInputBufferHC(void* LZ4HC_Data) -{ - LZ4_streamHC_t *ctx = (LZ4_streamHC_t*)LZ4HC_Data; +char *LZ4_slideInputBufferHC(void *LZ4HC_Data) { + LZ4_streamHC_t *ctx = (LZ4_streamHC_t *)LZ4HC_Data; const BYTE *bufferStart = ctx->internal_donotuse.base + ctx->internal_donotuse.lowLimit; LZ4_resetStreamHC_fast(ctx, ctx->internal_donotuse.compressionLevel); /* avoid const char * -> char * conversion warning :( */ @@ -1221,27 +1223,25 @@ typedef struct { } LZ4HC_optimal_t; /* price in bytes */ -LZ4_FORCE_INLINE int LZ4HC_literalsPrice(int const litlen) -{ +LZ4_FORCE_INLINE int LZ4HC_literalsPrice(int const litlen) { int price = litlen; assert(litlen >= 0); if (litlen >= (int)RUN_MASK) - price += 1 + ((litlen-(int)RUN_MASK) / 255); + price += 1 + ((litlen - (int)RUN_MASK) / 255); return price; } /* requires mlen >= MINMATCH */ -LZ4_FORCE_INLINE int LZ4HC_sequencePrice(int litlen, int mlen) -{ +LZ4_FORCE_INLINE int LZ4HC_sequencePrice(int litlen, int mlen) { int price = 1 + 2 ; /* token + 16-bit offset */ assert(litlen >= 0); assert(mlen >= MINMATCH); price += LZ4HC_literalsPrice(litlen); - if (mlen >= (int)(ML_MASK+MINMATCH)) - price += 1 + ((mlen-(int)(ML_MASK+MINMATCH)) / 255); + if (mlen >= (int)(ML_MASK + MINMATCH)) + price += 1 + ((mlen - (int)(ML_MASK + MINMATCH)) / 255); return price; } @@ -1253,56 +1253,54 @@ typedef struct { } LZ4HC_match_t; LZ4_FORCE_INLINE LZ4HC_match_t -LZ4HC_FindLongerMatch(LZ4HC_CCtx_internal* const ctx, - const BYTE* ip, const BYTE* const iHighLimit, +LZ4HC_FindLongerMatch(LZ4HC_CCtx_internal *const ctx, + const BYTE *ip, const BYTE *const iHighLimit, int minLen, int nbSearches, const dictCtx_directive dict, - const HCfavor_e favorDecSpeed) -{ - LZ4HC_match_t match = { 0 , 0 }; - const BYTE* matchPtr = NULL; + const HCfavor_e favorDecSpeed) { + LZ4HC_match_t match = { 0, 0 }; + const BYTE *matchPtr = NULL; /* note : LZ4HC_InsertAndGetWiderMatch() is able to modify the starting position of a match (*startpos), * but this won't be the case here, as we define iLowLimit==ip, * so LZ4HC_InsertAndGetWiderMatch() won't be allowed to search past ip */ int matchLength = LZ4HC_InsertAndGetWiderMatch(ctx, ip, ip, iHighLimit, minLen, &matchPtr, &ip, nbSearches, 1 /*patternAnalysis*/, 1 /*chainSwap*/, dict, favorDecSpeed); if (matchLength <= minLen) return match; if (favorDecSpeed) { - if ((matchLength>18) & (matchLength<=36)) matchLength=18; /* favor shortcut */ + if ((matchLength > 18) & (matchLength <= 36)) matchLength = 18; /* favor shortcut */ } match.len = matchLength; - match.off = (int)(ip-matchPtr); + match.off = (int)(ip - matchPtr); return match; } -static int LZ4HC_compress_optimal ( LZ4HC_CCtx_internal* ctx, - const char* const source, - char* dst, - int* srcSizePtr, - int dstCapacity, - int const nbSearches, - size_t sufficient_len, - const limitedOutput_directive limit, - int const fullUpdate, - const dictCtx_directive dict, - const HCfavor_e favorDecSpeed) -{ +static int LZ4HC_compress_optimal(LZ4HC_CCtx_internal *ctx, + const char *const source, + char *dst, + int *srcSizePtr, + int dstCapacity, + int const nbSearches, + size_t sufficient_len, + const limitedOutput_directive limit, + int const fullUpdate, + const dictCtx_directive dict, + const HCfavor_e favorDecSpeed) { int retval = 0; #define TRAILING_LITERALS 3 #ifdef LZ4HC_HEAPMODE - LZ4HC_optimal_t* const opt = (LZ4HC_optimal_t*)malloc(sizeof(LZ4HC_optimal_t) * (LZ4_OPT_NUM + TRAILING_LITERALS)); + LZ4HC_optimal_t *const opt = (LZ4HC_optimal_t *)malloc(sizeof(LZ4HC_optimal_t) * (LZ4_OPT_NUM + TRAILING_LITERALS)); #else LZ4HC_optimal_t opt[LZ4_OPT_NUM + TRAILING_LITERALS]; /* ~64 KB, which is a bit large for stack... */ #endif - const BYTE* ip = (const BYTE*) source; - const BYTE* anchor = ip; - const BYTE* const iend = ip + *srcSizePtr; - const BYTE* const mflimit = iend - MFLIMIT; - const BYTE* const matchlimit = iend - LASTLITERALS; - BYTE* op = (BYTE*) dst; - BYTE* opSaved = (BYTE*) dst; - BYTE* oend = op + dstCapacity; + const BYTE *ip = (const BYTE *) source; + const BYTE *anchor = ip; + const BYTE *const iend = ip + *srcSizePtr; + const BYTE *const mflimit = iend - MFLIMIT; + const BYTE *const matchlimit = iend - LASTLITERALS; + BYTE *op = (BYTE *) dst; + BYTE *opSaved = (BYTE *) dst; + BYTE *oend = op + dstCapacity; /* init */ #ifdef LZ4HC_HEAPMODE @@ -1311,244 +1309,263 @@ static int LZ4HC_compress_optimal ( LZ4HC_CCtx_internal* ctx, DEBUGLOG(5, "LZ4HC_compress_optimal(dst=%p, dstCapa=%u)", dst, (unsigned)dstCapacity); *srcSizePtr = 0; if (limit == fillOutput) oend -= LASTLITERALS; /* Hack for support LZ4 format restriction */ - if (sufficient_len >= LZ4_OPT_NUM) sufficient_len = LZ4_OPT_NUM-1; + if (sufficient_len >= LZ4_OPT_NUM) sufficient_len = LZ4_OPT_NUM - 1; /* Main Loop */ assert(ip - anchor < LZ4_MAX_INPUT_SIZE); while (ip <= mflimit) { - int const llen = (int)(ip - anchor); - int best_mlen, best_off; - int cur, last_match_pos = 0; + int const llen = (int)(ip - anchor); + int best_mlen, best_off; + int cur, last_match_pos = 0; - LZ4HC_match_t const firstMatch = LZ4HC_FindLongerMatch(ctx, ip, matchlimit, MINMATCH-1, nbSearches, dict, favorDecSpeed); - if (firstMatch.len==0) { ip++; continue; } + LZ4HC_match_t const firstMatch = LZ4HC_FindLongerMatch(ctx, ip, matchlimit, MINMATCH - 1, nbSearches, dict, favorDecSpeed); + if (firstMatch.len == 0) { ip++; continue; } - if ((size_t)firstMatch.len > sufficient_len) { - /* good enough solution : immediate encoding */ - int const firstML = firstMatch.len; - const BYTE* const matchPos = ip - firstMatch.off; - opSaved = op; - if ( LZ4HC_encodeSequence(UPDATABLE(ip, op, anchor), firstML, matchPos, limit, oend) ) /* updates ip, op and anchor */ - goto _dest_overflow; - continue; - } + if ((size_t)firstMatch.len > sufficient_len) { + /* good enough solution : immediate encoding */ + int const firstML = firstMatch.len; + const BYTE *const matchPos = ip - firstMatch.off; + opSaved = op; + if (LZ4HC_encodeSequence(UPDATABLE(ip, op, anchor), firstML, matchPos, limit, oend)) /* updates ip, op and anchor */ + goto _dest_overflow; + continue; + } - /* set prices for first positions (literals) */ - { int rPos; - for (rPos = 0 ; rPos < MINMATCH ; rPos++) { - int const cost = LZ4HC_literalsPrice(llen + rPos); - opt[rPos].mlen = 1; - opt[rPos].off = 0; - opt[rPos].litlen = llen + rPos; - opt[rPos].price = cost; - DEBUGLOG(7, "rPos:%3i => price:%3i (litlen=%i) -- initial setup", - rPos, cost, opt[rPos].litlen); - } } - /* set prices using initial match */ - { int mlen = MINMATCH; - int const matchML = firstMatch.len; /* necessarily < sufficient_len < LZ4_OPT_NUM */ - int const offset = firstMatch.off; - assert(matchML < LZ4_OPT_NUM); - for ( ; mlen <= matchML ; mlen++) { - int const cost = LZ4HC_sequencePrice(llen, mlen); - opt[mlen].mlen = mlen; - opt[mlen].off = offset; - opt[mlen].litlen = llen; - opt[mlen].price = cost; - DEBUGLOG(7, "rPos:%3i => price:%3i (matchlen=%i) -- initial setup", - mlen, cost, mlen); - } } - last_match_pos = firstMatch.len; - { int addLit; - for (addLit = 1; addLit <= TRAILING_LITERALS; addLit ++) { - opt[last_match_pos+addLit].mlen = 1; /* literal */ - opt[last_match_pos+addLit].off = 0; - opt[last_match_pos+addLit].litlen = addLit; - opt[last_match_pos+addLit].price = opt[last_match_pos].price + LZ4HC_literalsPrice(addLit); - DEBUGLOG(7, "rPos:%3i => price:%3i (litlen=%i) -- initial setup", - last_match_pos+addLit, opt[last_match_pos+addLit].price, addLit); - } } + /* set prices for first positions (literals) */ + { + int rPos; + for (rPos = 0 ; rPos < MINMATCH ; rPos++) { + int const cost = LZ4HC_literalsPrice(llen + rPos); + opt[rPos].mlen = 1; + opt[rPos].off = 0; + opt[rPos].litlen = llen + rPos; + opt[rPos].price = cost; + DEBUGLOG(7, "rPos:%3i => price:%3i (litlen=%i) -- initial setup", + rPos, cost, opt[rPos].litlen); + } + } + /* set prices using initial match */ + { + int mlen = MINMATCH; + int const matchML = firstMatch.len; /* necessarily < sufficient_len < LZ4_OPT_NUM */ + int const offset = firstMatch.off; + assert(matchML < LZ4_OPT_NUM); + for (; mlen <= matchML ; mlen++) { + int const cost = LZ4HC_sequencePrice(llen, mlen); + opt[mlen].mlen = mlen; + opt[mlen].off = offset; + opt[mlen].litlen = llen; + opt[mlen].price = cost; + DEBUGLOG(7, "rPos:%3i => price:%3i (matchlen=%i) -- initial setup", + mlen, cost, mlen); + } + } + last_match_pos = firstMatch.len; + { + int addLit; + for (addLit = 1; addLit <= TRAILING_LITERALS; addLit ++) { + opt[last_match_pos + addLit].mlen = 1; /* literal */ + opt[last_match_pos + addLit].off = 0; + opt[last_match_pos + addLit].litlen = addLit; + opt[last_match_pos + addLit].price = opt[last_match_pos].price + LZ4HC_literalsPrice(addLit); + DEBUGLOG(7, "rPos:%3i => price:%3i (litlen=%i) -- initial setup", + last_match_pos + addLit, opt[last_match_pos + addLit].price, addLit); + } + } - /* check further positions */ - for (cur = 1; cur < last_match_pos; cur++) { - const BYTE* const curPtr = ip + cur; - LZ4HC_match_t newMatch; + /* check further positions */ + for (cur = 1; cur < last_match_pos; cur++) { + const BYTE *const curPtr = ip + cur; + LZ4HC_match_t newMatch; - if (curPtr > mflimit) break; - DEBUGLOG(7, "rPos:%u[%u] vs [%u]%u", - cur, opt[cur].price, opt[cur+1].price, cur+1); - if (fullUpdate) { - /* not useful to search here if next position has same (or lower) cost */ - if ( (opt[cur+1].price <= opt[cur].price) - /* in some cases, next position has same cost, but cost rises sharply after, so a small match would still be beneficial */ - && (opt[cur+MINMATCH].price < opt[cur].price + 3/*min seq price*/) ) - continue; - } else { - /* not useful to search here if next position has same (or lower) cost */ - if (opt[cur+1].price <= opt[cur].price) continue; - } + if (curPtr > mflimit) break; + DEBUGLOG(7, "rPos:%u[%u] vs [%u]%u", + cur, opt[cur].price, opt[cur + 1].price, cur + 1); + if (fullUpdate) { + /* not useful to search here if next position has same (or lower) cost */ + if ((opt[cur + 1].price <= opt[cur].price) + /* in some cases, next position has same cost, but cost rises sharply after, so a small match would still be beneficial */ + && (opt[cur + MINMATCH].price < opt[cur].price + 3/*min seq price*/)) + continue; + } else { + /* not useful to search here if next position has same (or lower) cost */ + if (opt[cur + 1].price <= opt[cur].price) continue; + } - DEBUGLOG(7, "search at rPos:%u", cur); - if (fullUpdate) - newMatch = LZ4HC_FindLongerMatch(ctx, curPtr, matchlimit, MINMATCH-1, nbSearches, dict, favorDecSpeed); - else - /* only test matches of minimum length; slightly faster, but misses a few bytes */ - newMatch = LZ4HC_FindLongerMatch(ctx, curPtr, matchlimit, last_match_pos - cur, nbSearches, dict, favorDecSpeed); - if (!newMatch.len) continue; + DEBUGLOG(7, "search at rPos:%u", cur); + if (fullUpdate) + newMatch = LZ4HC_FindLongerMatch(ctx, curPtr, matchlimit, MINMATCH - 1, nbSearches, dict, favorDecSpeed); + else + /* only test matches of minimum length; slightly faster, but misses a few bytes */ + newMatch = LZ4HC_FindLongerMatch(ctx, curPtr, matchlimit, last_match_pos - cur, nbSearches, dict, favorDecSpeed); + if (!newMatch.len) continue; - if ( ((size_t)newMatch.len > sufficient_len) - || (newMatch.len + cur >= LZ4_OPT_NUM) ) { - /* immediate encoding */ - best_mlen = newMatch.len; - best_off = newMatch.off; - last_match_pos = cur + 1; - goto encode; - } + if (((size_t)newMatch.len > sufficient_len) + || (newMatch.len + cur >= LZ4_OPT_NUM)) { + /* immediate encoding */ + best_mlen = newMatch.len; + best_off = newMatch.off; + last_match_pos = cur + 1; + goto encode; + } - /* before match : set price with literals at beginning */ - { int const baseLitlen = opt[cur].litlen; - int litlen; - for (litlen = 1; litlen < MINMATCH; litlen++) { - int const price = opt[cur].price - LZ4HC_literalsPrice(baseLitlen) + LZ4HC_literalsPrice(baseLitlen+litlen); - int const pos = cur + litlen; - if (price < opt[pos].price) { - opt[pos].mlen = 1; /* literal */ - opt[pos].off = 0; - opt[pos].litlen = baseLitlen+litlen; - opt[pos].price = price; - DEBUGLOG(7, "rPos:%3i => price:%3i (litlen=%i)", - pos, price, opt[pos].litlen); - } } } + /* before match : set price with literals at beginning */ + { + int const baseLitlen = opt[cur].litlen; + int litlen; + for (litlen = 1; litlen < MINMATCH; litlen++) { + int const price = opt[cur].price - LZ4HC_literalsPrice(baseLitlen) + LZ4HC_literalsPrice(baseLitlen + litlen); + int const pos = cur + litlen; + if (price < opt[pos].price) { + opt[pos].mlen = 1; /* literal */ + opt[pos].off = 0; + opt[pos].litlen = baseLitlen + litlen; + opt[pos].price = price; + DEBUGLOG(7, "rPos:%3i => price:%3i (litlen=%i)", + pos, price, opt[pos].litlen); + } + } + } - /* set prices using match at position = cur */ - { int const matchML = newMatch.len; - int ml = MINMATCH; + /* set prices using match at position = cur */ + { + int const matchML = newMatch.len; + int ml = MINMATCH; - assert(cur + newMatch.len < LZ4_OPT_NUM); - for ( ; ml <= matchML ; ml++) { - int const pos = cur + ml; - int const offset = newMatch.off; - int price; - int ll; - DEBUGLOG(7, "testing price rPos %i (last_match_pos=%i)", - pos, last_match_pos); - if (opt[cur].mlen == 1) { - ll = opt[cur].litlen; - price = ((cur > ll) ? opt[cur - ll].price : 0) - + LZ4HC_sequencePrice(ll, ml); - } else { - ll = 0; - price = opt[cur].price + LZ4HC_sequencePrice(0, ml); - } + assert(cur + newMatch.len < LZ4_OPT_NUM); + for (; ml <= matchML ; ml++) { + int const pos = cur + ml; + int const offset = newMatch.off; + int price; + int ll; + DEBUGLOG(7, "testing price rPos %i (last_match_pos=%i)", + pos, last_match_pos); + if (opt[cur].mlen == 1) { + ll = opt[cur].litlen; + price = ((cur > ll) ? opt[cur - ll].price : 0) + + LZ4HC_sequencePrice(ll, ml); + } else { + ll = 0; + price = opt[cur].price + LZ4HC_sequencePrice(0, ml); + } assert((U32)favorDecSpeed <= 1); - if (pos > last_match_pos+TRAILING_LITERALS - || price <= opt[pos].price - (int)favorDecSpeed) { - DEBUGLOG(7, "rPos:%3i => price:%3i (matchlen=%i)", - pos, price, ml); - assert(pos < LZ4_OPT_NUM); - if ( (ml == matchML) /* last pos of last match */ - && (last_match_pos < pos) ) - last_match_pos = pos; - opt[pos].mlen = ml; - opt[pos].off = offset; - opt[pos].litlen = ll; - opt[pos].price = price; - } } } - /* complete following positions with literals */ - { int addLit; - for (addLit = 1; addLit <= TRAILING_LITERALS; addLit ++) { - opt[last_match_pos+addLit].mlen = 1; /* literal */ - opt[last_match_pos+addLit].off = 0; - opt[last_match_pos+addLit].litlen = addLit; - opt[last_match_pos+addLit].price = opt[last_match_pos].price + LZ4HC_literalsPrice(addLit); - DEBUGLOG(7, "rPos:%3i => price:%3i (litlen=%i)", last_match_pos+addLit, opt[last_match_pos+addLit].price, addLit); - } } - } /* for (cur = 1; cur <= last_match_pos; cur++) */ + if (pos > last_match_pos + TRAILING_LITERALS + || price <= opt[pos].price - (int)favorDecSpeed) { + DEBUGLOG(7, "rPos:%3i => price:%3i (matchlen=%i)", + pos, price, ml); + assert(pos < LZ4_OPT_NUM); + if ((ml == matchML) /* last pos of last match */ + && (last_match_pos < pos)) + last_match_pos = pos; + opt[pos].mlen = ml; + opt[pos].off = offset; + opt[pos].litlen = ll; + opt[pos].price = price; + } + } + } + /* complete following positions with literals */ + { + int addLit; + for (addLit = 1; addLit <= TRAILING_LITERALS; addLit ++) { + opt[last_match_pos + addLit].mlen = 1; /* literal */ + opt[last_match_pos + addLit].off = 0; + opt[last_match_pos + addLit].litlen = addLit; + opt[last_match_pos + addLit].price = opt[last_match_pos].price + LZ4HC_literalsPrice(addLit); + DEBUGLOG(7, "rPos:%3i => price:%3i (litlen=%i)", last_match_pos + addLit, opt[last_match_pos + addLit].price, addLit); + } + } + } /* for (cur = 1; cur <= last_match_pos; cur++) */ - assert(last_match_pos < LZ4_OPT_NUM + TRAILING_LITERALS); - best_mlen = opt[last_match_pos].mlen; - best_off = opt[last_match_pos].off; - cur = last_match_pos - best_mlen; + assert(last_match_pos < LZ4_OPT_NUM + TRAILING_LITERALS); + best_mlen = opt[last_match_pos].mlen; + best_off = opt[last_match_pos].off; + cur = last_match_pos - best_mlen; - encode: /* cur, last_match_pos, best_mlen, best_off must be set */ - assert(cur < LZ4_OPT_NUM); - assert(last_match_pos >= 1); /* == 1 when only one candidate */ - DEBUGLOG(6, "reverse traversal, looking for shortest path (last_match_pos=%i)", last_match_pos); - { int candidate_pos = cur; - int selected_matchLength = best_mlen; - int selected_offset = best_off; - while (1) { /* from end to beginning */ - int const next_matchLength = opt[candidate_pos].mlen; /* can be 1, means literal */ - int const next_offset = opt[candidate_pos].off; - DEBUGLOG(7, "pos %i: sequence length %i", candidate_pos, selected_matchLength); - opt[candidate_pos].mlen = selected_matchLength; - opt[candidate_pos].off = selected_offset; - selected_matchLength = next_matchLength; - selected_offset = next_offset; - if (next_matchLength > candidate_pos) break; /* last match elected, first match to encode */ - assert(next_matchLength > 0); /* can be 1, means literal */ - candidate_pos -= next_matchLength; - } } +encode: /* cur, last_match_pos, best_mlen, best_off must be set */ + assert(cur < LZ4_OPT_NUM); + assert(last_match_pos >= 1); /* == 1 when only one candidate */ + DEBUGLOG(6, "reverse traversal, looking for shortest path (last_match_pos=%i)", last_match_pos); + { + int candidate_pos = cur; + int selected_matchLength = best_mlen; + int selected_offset = best_off; + while (1) { /* from end to beginning */ + int const next_matchLength = opt[candidate_pos].mlen; /* can be 1, means literal */ + int const next_offset = opt[candidate_pos].off; + DEBUGLOG(7, "pos %i: sequence length %i", candidate_pos, selected_matchLength); + opt[candidate_pos].mlen = selected_matchLength; + opt[candidate_pos].off = selected_offset; + selected_matchLength = next_matchLength; + selected_offset = next_offset; + if (next_matchLength > candidate_pos) break; /* last match elected, first match to encode */ + assert(next_matchLength > 0); /* can be 1, means literal */ + candidate_pos -= next_matchLength; + } + } - /* encode all recorded sequences in order */ - { int rPos = 0; /* relative position (to ip) */ - while (rPos < last_match_pos) { - int const ml = opt[rPos].mlen; - int const offset = opt[rPos].off; - if (ml == 1) { ip++; rPos++; continue; } /* literal; note: can end up with several literals, in which case, skip them */ - rPos += ml; - assert(ml >= MINMATCH); - assert((offset >= 1) && (offset <= LZ4_DISTANCE_MAX)); - opSaved = op; - if ( LZ4HC_encodeSequence(UPDATABLE(ip, op, anchor), ml, ip - offset, limit, oend) ) /* updates ip, op and anchor */ - goto _dest_overflow; - } } - } /* while (ip <= mflimit) */ + /* encode all recorded sequences in order */ + { + int rPos = 0; /* relative position (to ip) */ + while (rPos < last_match_pos) { + int const ml = opt[rPos].mlen; + int const offset = opt[rPos].off; + if (ml == 1) { ip++; rPos++; continue; } /* literal; note: can end up with several literals, in which case, skip them */ + rPos += ml; + assert(ml >= MINMATCH); + assert((offset >= 1) && (offset <= LZ4_DISTANCE_MAX)); + opSaved = op; + if (LZ4HC_encodeSequence(UPDATABLE(ip, op, anchor), ml, ip - offset, limit, oend)) /* updates ip, op and anchor */ + goto _dest_overflow; + } + } + } /* while (ip <= mflimit) */ - _last_literals: - /* Encode Last Literals */ - { size_t lastRunSize = (size_t)(iend - anchor); /* literals */ - size_t litLength = (lastRunSize + 255 - RUN_MASK) / 255; - size_t const totalSize = 1 + litLength + lastRunSize; - if (limit == fillOutput) oend += LASTLITERALS; /* restore correct value */ - if (limit && (op + totalSize > oend)) { - if (limit == limitedOutput) { /* Check output limit */ +_last_literals: + /* Encode Last Literals */ + { + size_t lastRunSize = (size_t)(iend - anchor); /* literals */ + size_t litLength = (lastRunSize + 255 - RUN_MASK) / 255; + size_t const totalSize = 1 + litLength + lastRunSize; + if (limit == fillOutput) oend += LASTLITERALS; /* restore correct value */ + if (limit && (op + totalSize > oend)) { + if (limit == limitedOutput) { /* Check output limit */ retval = 0; goto _return_label; - } - /* adapt lastRunSize to fill 'dst' */ - lastRunSize = (size_t)(oend - op) - 1; - litLength = (lastRunSize + 255 - RUN_MASK) / 255; - lastRunSize -= litLength; - } - ip = anchor + lastRunSize; + } + /* adapt lastRunSize to fill 'dst' */ + lastRunSize = (size_t)(oend - op) - 1; + litLength = (lastRunSize + 255 - RUN_MASK) / 255; + lastRunSize -= litLength; + } + ip = anchor + lastRunSize; - if (lastRunSize >= RUN_MASK) { - size_t accumulator = lastRunSize - RUN_MASK; - *op++ = (RUN_MASK << ML_BITS); - for(; accumulator >= 255 ; accumulator -= 255) *op++ = 255; - *op++ = (BYTE) accumulator; - } else { - *op++ = (BYTE)(lastRunSize << ML_BITS); - } - memcpy(op, anchor, lastRunSize); - op += lastRunSize; - } + if (lastRunSize >= RUN_MASK) { + size_t accumulator = lastRunSize - RUN_MASK; + *op++ = (RUN_MASK << ML_BITS); + for (; accumulator >= 255 ; accumulator -= 255) * op++ = 255; + *op++ = (BYTE) accumulator; + } else { + *op++ = (BYTE)(lastRunSize << ML_BITS); + } + memcpy(op, anchor, lastRunSize); + op += lastRunSize; + } - /* End */ - *srcSizePtr = (int) (((const char*)ip) - source); - retval = (int) ((char*)op-dst); - goto _return_label; + /* End */ + *srcSizePtr = (int)(((const char *)ip) - source); + retval = (int)((char *)op - dst); + goto _return_label; - _dest_overflow: - if (limit == fillOutput) { - op = opSaved; /* restore correct out pointer */ - goto _last_literals; - } - _return_label: +_dest_overflow: + if (limit == fillOutput) { + op = opSaved; /* restore correct out pointer */ + goto _last_literals; + } +_return_label: #ifdef LZ4HC_HEAPMODE - free(opt); + free(opt); #endif - return retval; - } + return retval; +} diff --git a/common/lz4/lz4hc.h b/common/lz4/lz4hc.h index 44e35bbf6..be39e08a3 100644 --- a/common/lz4/lz4hc.h +++ b/common/lz4/lz4hc.h @@ -63,7 +63,7 @@ extern "C" { * @return : the number of bytes written into 'dst' * or 0 if compression fails. */ -LZ4LIB_API int LZ4_compress_HC (const char* src, char* dst, int srcSize, int dstCapacity, int compressionLevel); +LZ4LIB_API int LZ4_compress_HC(const char *src, char *dst, int srcSize, int dstCapacity, int compressionLevel); /* Note : @@ -77,7 +77,7 @@ LZ4LIB_API int LZ4_compress_HC (const char* src, char* dst, int srcSize, int dst * Memory segment must be aligned on 8-bytes boundaries (which a normal malloc() should do properly). */ LZ4LIB_API int LZ4_sizeofStateHC(void); -LZ4LIB_API int LZ4_compress_HC_extStateHC(void* stateHC, const char* src, char* dst, int srcSize, int maxDstSize, int compressionLevel); +LZ4LIB_API int LZ4_compress_HC_extStateHC(void *stateHC, const char *src, char *dst, int srcSize, int maxDstSize, int compressionLevel); /*! LZ4_compress_HC_destSize() : v1.9.0+ @@ -88,9 +88,9 @@ LZ4LIB_API int LZ4_compress_HC_extStateHC(void* stateHC, const char* src, char* * or 0 if compression fails. * `srcSizePtr` : on success, *srcSizePtr is updated to indicate how much bytes were read from `src` */ -LZ4LIB_API int LZ4_compress_HC_destSize(void* stateHC, - const char* src, char* dst, - int* srcSizePtr, int targetDstSize, +LZ4LIB_API int LZ4_compress_HC_destSize(void *stateHC, + const char *src, char *dst, + int *srcSizePtr, int targetDstSize, int compressionLevel); @@ -98,7 +98,7 @@ LZ4LIB_API int LZ4_compress_HC_destSize(void* stateHC, * Streaming Compression * Bufferless synchronous API **************************************/ - typedef union LZ4_streamHC_u LZ4_streamHC_t; /* incomplete type (defined later) */ +typedef union LZ4_streamHC_u LZ4_streamHC_t; /* incomplete type (defined later) */ /*! LZ4_createStreamHC() and LZ4_freeStreamHC() : * These functions create and release memory for LZ4 HC streaming state. @@ -106,8 +106,8 @@ LZ4LIB_API int LZ4_compress_HC_destSize(void* stateHC, * A same state can be used multiple times consecutively, * starting with LZ4_resetStreamHC_fast() to start a new stream of blocks. */ -LZ4LIB_API LZ4_streamHC_t* LZ4_createStreamHC(void); -LZ4LIB_API int LZ4_freeStreamHC (LZ4_streamHC_t* streamHCPtr); +LZ4LIB_API LZ4_streamHC_t *LZ4_createStreamHC(void); +LZ4LIB_API int LZ4_freeStreamHC(LZ4_streamHC_t *streamHCPtr); /* These functions compress data in successive blocks of any size, @@ -152,12 +152,12 @@ LZ4LIB_API int LZ4_freeStreamHC (LZ4_streamHC_t* streamHCPtr); just by resetting it, using LZ4_resetStreamHC_fast(). */ -LZ4LIB_API void LZ4_resetStreamHC_fast(LZ4_streamHC_t* streamHCPtr, int compressionLevel); /* v1.9.0+ */ -LZ4LIB_API int LZ4_loadDictHC (LZ4_streamHC_t* streamHCPtr, const char* dictionary, int dictSize); +LZ4LIB_API void LZ4_resetStreamHC_fast(LZ4_streamHC_t *streamHCPtr, int compressionLevel); /* v1.9.0+ */ +LZ4LIB_API int LZ4_loadDictHC(LZ4_streamHC_t *streamHCPtr, const char *dictionary, int dictSize); -LZ4LIB_API int LZ4_compress_HC_continue (LZ4_streamHC_t* streamHCPtr, - const char* src, char* dst, - int srcSize, int maxDstSize); +LZ4LIB_API int LZ4_compress_HC_continue(LZ4_streamHC_t *streamHCPtr, + const char *src, char *dst, + int srcSize, int maxDstSize); /*! LZ4_compress_HC_continue_destSize() : v1.9.0+ * Similar to LZ4_compress_HC_continue(), @@ -169,11 +169,11 @@ LZ4LIB_API int LZ4_compress_HC_continue (LZ4_streamHC_t* streamHCPtr, * `srcSizePtr` : on success, *srcSizePtr will be updated to indicate how much bytes were read from `src`. * Note that this function may not consume the entire input. */ -LZ4LIB_API int LZ4_compress_HC_continue_destSize(LZ4_streamHC_t* LZ4_streamHCPtr, - const char* src, char* dst, - int* srcSizePtr, int targetDstSize); +LZ4LIB_API int LZ4_compress_HC_continue_destSize(LZ4_streamHC_t *LZ4_streamHCPtr, + const char *src, char *dst, + int *srcSizePtr, int targetDstSize); -LZ4LIB_API int LZ4_saveDictHC (LZ4_streamHC_t* streamHCPtr, char* safeBuffer, int maxDictSize); +LZ4LIB_API int LZ4_saveDictHC(LZ4_streamHC_t *streamHCPtr, char *safeBuffer, int maxDictSize); @@ -202,13 +202,12 @@ LZ4LIB_API int LZ4_saveDictHC (LZ4_streamHC_t* streamHCPtr, char* safeBuffer, in #include typedef struct LZ4HC_CCtx_internal LZ4HC_CCtx_internal; -struct LZ4HC_CCtx_internal -{ +struct LZ4HC_CCtx_internal { uint32_t hashTable[LZ4HC_HASHTABLESIZE]; uint16_t chainTable[LZ4HC_MAXD]; - const uint8_t* end; /* next block here to continue on current prefix */ - const uint8_t* base; /* All index relative to this position */ - const uint8_t* dictBase; /* alternate base for extDict */ + const uint8_t *end; /* next block here to continue on current prefix */ + const uint8_t *base; /* All index relative to this position */ + const uint8_t *dictBase; /* alternate base for extDict */ uint32_t dictLimit; /* below that point, need extDict */ uint32_t lowLimit; /* below that point, no more dict */ uint32_t nextToUpdate; /* index from which to continue dictionary update */ @@ -216,19 +215,18 @@ struct LZ4HC_CCtx_internal int8_t favorDecSpeed; /* favor decompression speed if this flag set, otherwise, favor compression ratio */ int8_t dirty; /* stream has to be fully reset if this flag is set */ - const LZ4HC_CCtx_internal* dictCtx; + const LZ4HC_CCtx_internal *dictCtx; }; #else typedef struct LZ4HC_CCtx_internal LZ4HC_CCtx_internal; -struct LZ4HC_CCtx_internal -{ +struct LZ4HC_CCtx_internal { unsigned int hashTable[LZ4HC_HASHTABLESIZE]; unsigned short chainTable[LZ4HC_MAXD]; - const unsigned char* end; /* next block here to continue on current prefix */ - const unsigned char* base; /* All index relative to this position */ - const unsigned char* dictBase; /* alternate base for extDict */ + const unsigned char *end; /* next block here to continue on current prefix */ + const unsigned char *base; /* All index relative to this position */ + const unsigned char *dictBase; /* alternate base for extDict */ unsigned int dictLimit; /* below that point, need extDict */ unsigned int lowLimit; /* below that point, no more dict */ unsigned int nextToUpdate; /* index from which to continue dictionary update */ @@ -236,7 +234,7 @@ struct LZ4HC_CCtx_internal char favorDecSpeed; /* favor decompression speed if this flag set, otherwise, favor compression ratio */ char dirty; /* stream has to be fully reset if this flag is set */ - const LZ4HC_CCtx_internal* dictCtx; + const LZ4HC_CCtx_internal *dictCtx; }; #endif @@ -269,7 +267,7 @@ union LZ4_streamHC_u { * Required before first use of a statically allocated LZ4_streamHC_t. * Before v1.9.0 : use LZ4_resetStreamHC() instead */ -LZ4LIB_API LZ4_streamHC_t* LZ4_initStreamHC (void* buffer, size_t size); +LZ4LIB_API LZ4_streamHC_t *LZ4_initStreamHC(void *buffer, size_t size); /*-************************************ @@ -278,16 +276,16 @@ LZ4LIB_API LZ4_streamHC_t* LZ4_initStreamHC (void* buffer, size_t size); /* see lz4.h LZ4_DISABLE_DEPRECATE_WARNINGS to turn off deprecation warnings */ /* deprecated compression functions */ -LZ4_DEPRECATED("use LZ4_compress_HC() instead") LZ4LIB_API int LZ4_compressHC (const char* source, char* dest, int inputSize); -LZ4_DEPRECATED("use LZ4_compress_HC() instead") LZ4LIB_API int LZ4_compressHC_limitedOutput (const char* source, char* dest, int inputSize, int maxOutputSize); -LZ4_DEPRECATED("use LZ4_compress_HC() instead") LZ4LIB_API int LZ4_compressHC2 (const char* source, char* dest, int inputSize, int compressionLevel); -LZ4_DEPRECATED("use LZ4_compress_HC() instead") LZ4LIB_API int LZ4_compressHC2_limitedOutput(const char* source, char* dest, int inputSize, int maxOutputSize, int compressionLevel); -LZ4_DEPRECATED("use LZ4_compress_HC_extStateHC() instead") LZ4LIB_API int LZ4_compressHC_withStateHC (void* state, const char* source, char* dest, int inputSize); -LZ4_DEPRECATED("use LZ4_compress_HC_extStateHC() instead") LZ4LIB_API int LZ4_compressHC_limitedOutput_withStateHC (void* state, const char* source, char* dest, int inputSize, int maxOutputSize); -LZ4_DEPRECATED("use LZ4_compress_HC_extStateHC() instead") LZ4LIB_API int LZ4_compressHC2_withStateHC (void* state, const char* source, char* dest, int inputSize, int compressionLevel); -LZ4_DEPRECATED("use LZ4_compress_HC_extStateHC() instead") LZ4LIB_API int LZ4_compressHC2_limitedOutput_withStateHC(void* state, const char* source, char* dest, int inputSize, int maxOutputSize, int compressionLevel); -LZ4_DEPRECATED("use LZ4_compress_HC_continue() instead") LZ4LIB_API int LZ4_compressHC_continue (LZ4_streamHC_t* LZ4_streamHCPtr, const char* source, char* dest, int inputSize); -LZ4_DEPRECATED("use LZ4_compress_HC_continue() instead") LZ4LIB_API int LZ4_compressHC_limitedOutput_continue (LZ4_streamHC_t* LZ4_streamHCPtr, const char* source, char* dest, int inputSize, int maxOutputSize); +LZ4_DEPRECATED("use LZ4_compress_HC() instead") LZ4LIB_API int LZ4_compressHC(const char *source, char *dest, int inputSize); +LZ4_DEPRECATED("use LZ4_compress_HC() instead") LZ4LIB_API int LZ4_compressHC_limitedOutput(const char *source, char *dest, int inputSize, int maxOutputSize); +LZ4_DEPRECATED("use LZ4_compress_HC() instead") LZ4LIB_API int LZ4_compressHC2(const char *source, char *dest, int inputSize, int compressionLevel); +LZ4_DEPRECATED("use LZ4_compress_HC() instead") LZ4LIB_API int LZ4_compressHC2_limitedOutput(const char *source, char *dest, int inputSize, int maxOutputSize, int compressionLevel); +LZ4_DEPRECATED("use LZ4_compress_HC_extStateHC() instead") LZ4LIB_API int LZ4_compressHC_withStateHC(void *state, const char *source, char *dest, int inputSize); +LZ4_DEPRECATED("use LZ4_compress_HC_extStateHC() instead") LZ4LIB_API int LZ4_compressHC_limitedOutput_withStateHC(void *state, const char *source, char *dest, int inputSize, int maxOutputSize); +LZ4_DEPRECATED("use LZ4_compress_HC_extStateHC() instead") LZ4LIB_API int LZ4_compressHC2_withStateHC(void *state, const char *source, char *dest, int inputSize, int compressionLevel); +LZ4_DEPRECATED("use LZ4_compress_HC_extStateHC() instead") LZ4LIB_API int LZ4_compressHC2_limitedOutput_withStateHC(void *state, const char *source, char *dest, int inputSize, int maxOutputSize, int compressionLevel); +LZ4_DEPRECATED("use LZ4_compress_HC_continue() instead") LZ4LIB_API int LZ4_compressHC_continue(LZ4_streamHC_t *LZ4_streamHCPtr, const char *source, char *dest, int inputSize); +LZ4_DEPRECATED("use LZ4_compress_HC_continue() instead") LZ4LIB_API int LZ4_compressHC_limitedOutput_continue(LZ4_streamHC_t *LZ4_streamHCPtr, const char *source, char *dest, int inputSize, int maxOutputSize); /* Obsolete streaming functions; degraded functionality; do not use! * @@ -297,13 +295,13 @@ LZ4_DEPRECATED("use LZ4_compress_HC_continue() instead") LZ4LIB_API int LZ4_comp * LZ4_slideInputBufferHC() will truncate the history of the stream, rather * than preserve a window-sized chunk of history. */ -LZ4_DEPRECATED("use LZ4_createStreamHC() instead") LZ4LIB_API void* LZ4_createHC (const char* inputBuffer); -LZ4_DEPRECATED("use LZ4_saveDictHC() instead") LZ4LIB_API char* LZ4_slideInputBufferHC (void* LZ4HC_Data); -LZ4_DEPRECATED("use LZ4_freeStreamHC() instead") LZ4LIB_API int LZ4_freeHC (void* LZ4HC_Data); -LZ4_DEPRECATED("use LZ4_compress_HC_continue() instead") LZ4LIB_API int LZ4_compressHC2_continue (void* LZ4HC_Data, const char* source, char* dest, int inputSize, int compressionLevel); -LZ4_DEPRECATED("use LZ4_compress_HC_continue() instead") LZ4LIB_API int LZ4_compressHC2_limitedOutput_continue (void* LZ4HC_Data, const char* source, char* dest, int inputSize, int maxOutputSize, int compressionLevel); +LZ4_DEPRECATED("use LZ4_createStreamHC() instead") LZ4LIB_API void *LZ4_createHC(const char *inputBuffer); +LZ4_DEPRECATED("use LZ4_saveDictHC() instead") LZ4LIB_API char *LZ4_slideInputBufferHC(void *LZ4HC_Data); +LZ4_DEPRECATED("use LZ4_freeStreamHC() instead") LZ4LIB_API int LZ4_freeHC(void *LZ4HC_Data); +LZ4_DEPRECATED("use LZ4_compress_HC_continue() instead") LZ4LIB_API int LZ4_compressHC2_continue(void *LZ4HC_Data, const char *source, char *dest, int inputSize, int compressionLevel); +LZ4_DEPRECATED("use LZ4_compress_HC_continue() instead") LZ4LIB_API int LZ4_compressHC2_limitedOutput_continue(void *LZ4HC_Data, const char *source, char *dest, int inputSize, int maxOutputSize, int compressionLevel); LZ4_DEPRECATED("use LZ4_createStreamHC() instead") LZ4LIB_API int LZ4_sizeofStreamStateHC(void); -LZ4_DEPRECATED("use LZ4_initStreamHC() instead") LZ4LIB_API int LZ4_resetStreamStateHC(void* state, char* inputBuffer); +LZ4_DEPRECATED("use LZ4_initStreamHC() instead") LZ4LIB_API int LZ4_resetStreamStateHC(void *state, char *inputBuffer); /* LZ4_resetStreamHC() is now replaced by LZ4_initStreamHC(). @@ -314,7 +312,7 @@ LZ4_DEPRECATED("use LZ4_initStreamHC() instead") LZ4LIB_API int LZ4_resetStre * It is recommended to switch to LZ4_initStreamHC(). * LZ4_resetStreamHC() will generate deprecation warnings in a future version. */ -LZ4LIB_API void LZ4_resetStreamHC (LZ4_streamHC_t* streamHCPtr, int compressionLevel); +LZ4LIB_API void LZ4_resetStreamHC(LZ4_streamHC_t *streamHCPtr, int compressionLevel); #if defined (__cplusplus) @@ -349,14 +347,14 @@ extern "C" { * for dynamic adaptation. */ LZ4LIB_STATIC_API void LZ4_setCompressionLevel( - LZ4_streamHC_t* LZ4_streamHCPtr, int compressionLevel); + LZ4_streamHC_t *LZ4_streamHCPtr, int compressionLevel); /*! LZ4_favorDecompressionSpeed() : v1.8.2+ (experimental) * Opt. Parser will favor decompression speed over compression ratio. * Only applicable to levels >= LZ4HC_CLEVEL_OPT_MIN. */ LZ4LIB_STATIC_API void LZ4_favorDecompressionSpeed( - LZ4_streamHC_t* LZ4_streamHCPtr, int favor); + LZ4_streamHC_t *LZ4_streamHCPtr, int favor); /*! LZ4_resetStreamHC_fast() : v1.9.0+ * When an LZ4_streamHC_t is known to be in a internally coherent state, @@ -382,7 +380,7 @@ LZ4LIB_STATIC_API void LZ4_favorDecompressionSpeed( * clear any existing history and settings from the context. */ LZ4LIB_STATIC_API void LZ4_resetStreamHC_fast( - LZ4_streamHC_t* LZ4_streamHCPtr, int compressionLevel); + LZ4_streamHC_t *LZ4_streamHCPtr, int compressionLevel); /*! LZ4_compress_HC_extStateHC_fastReset() : * A variant of LZ4_compress_HC_extStateHC(). @@ -395,9 +393,9 @@ LZ4LIB_STATIC_API void LZ4_resetStreamHC_fast( * LZ4_resetStreamHC_fast() while LZ4_compress_HC_extStateHC() starts with a * call to LZ4_resetStreamHC(). */ -LZ4LIB_STATIC_API int LZ4_compress_HC_extStateHC_fastReset ( - void* state, - const char* src, char* dst, +LZ4LIB_STATIC_API int LZ4_compress_HC_extStateHC_fastReset( + void *state, + const char *src, char *dst, int srcSize, int dstCapacity, int compressionLevel); @@ -427,7 +425,7 @@ LZ4LIB_STATIC_API int LZ4_compress_HC_extStateHC_fastReset ( * through the lifetime of the stream session. */ LZ4LIB_STATIC_API void LZ4_attach_HC_dictionary( - LZ4_streamHC_t *working_stream, + LZ4_streamHC_t *working_stream, const LZ4_streamHC_t *dictionary_stream); #if defined (__cplusplus) From 181bb3bc74ad08e211d4a244badc750dd47b8c71 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 30 Sep 2020 17:06:19 +0200 Subject: [PATCH 0711/1047] added: hf 14b apdu --- armsrc/epa.c | 2 +- armsrc/iso14443b.c | 231 +++++++++++++++++----------- armsrc/iso14443b.h | 2 +- client/src/cmdhf14b.c | 341 +++++++++++++++++++++++++++++++++++++++++- 4 files changed, 483 insertions(+), 93 deletions(-) diff --git a/armsrc/epa.c b/armsrc/epa.c index dd7dfb57d..317f2ce7b 100644 --- a/armsrc/epa.c +++ b/armsrc/epa.c @@ -118,7 +118,7 @@ static int EPA_APDU(uint8_t *apdu, size_t length, uint8_t *response, uint16_t re case 'a': return iso14_apdu(apdu, (uint16_t) length, false, response, NULL); case 'b': - return iso14443b_apdu(apdu, length, response, respmaxlen); + return iso14443b_apdu(apdu, length, false, response, respmaxlen); default: return 0; } diff --git a/armsrc/iso14443b.c b/armsrc/iso14443b.c index e91fce41a..88e117672 100644 --- a/armsrc/iso14443b.c +++ b/armsrc/iso14443b.c @@ -41,15 +41,18 @@ // defaults to 2000ms #ifndef FWT_TIMEOUT_14B -# define FWT_TIMEOUT_14B 35312 +# define FWT_TIMEOUT_14B 35312 #endif +// 1 tick == 1/13.56 mhz +// 1 us = 1.5 tick + // 330/848kHz = 1558us / 4 == 400us, -#define ISO14443B_READER_TIMEOUT 1700 //330 +#define ISO14443B_READER_TIMEOUT 10000 //330 // 1024/3.39MHz = 302.1us between end of tag response and next reader cmd -#define DELAY_ISO14443B_VICC_TO_VCD_READER 600 // 1024 -#define DELAY_ISO14443B_VCD_TO_VICC_READER 600// 1056 +#define DELAY_ISO14443B_VICC_TO_VCD_READER (28*9) // 1024 ( counting from start of PICC EOF 14 ETU's) +#define DELAY_ISO14443B_VCD_TO_VICC_READER (28*9) // 1056 #ifndef RECEIVE_MASK # define RECEIVE_MASK (DMA_BUFFER_SIZE - 1) @@ -57,7 +60,7 @@ // Guard Time (per 14443-2) #ifndef TR0 -# define TR0 64 // TR0 max is 256/fs = 256/(848kHz) = 302us or 64 samples from FPGA +# define TR0 32 // TR0 max is 151/fs = 151/(848kHz) = 302us or 64 samples from FPGA #endif // Synchronization time (per 14443-2) @@ -76,10 +79,9 @@ static void iso14b_set_timeout(uint32_t timeout); static void iso14b_set_maxframesize(uint16_t size); // the block number for the ISO14443-4 PCB (used with APDUs) -static uint8_t pcb_blocknum = 0; +static uint8_t iso14b_pcb_blocknum = 0; static uint32_t iso14b_timeout = FWT_TIMEOUT_14B; - /* ISO 14443 B * * Reader to card | ASK - Amplitude Shift Keying Modulation (PCD to PICC for Type B) (NRZ-L encodig) @@ -306,7 +308,6 @@ static void Demod14bInit(uint8_t *data, uint16_t max_len) { Demod14bReset(); } - /* * 9.4395 us = 1 ETU and clock is about 1.5 us * 13560000Hz @@ -740,7 +741,7 @@ void SimulateIso14443bTag(uint32_t pupi) { */ static RAMFUNC int Handle14443bSamplesFromTag(int ci, int cq) { - int v; + int v = 0; // The soft decision on the bit uses an estimate of just the // quadrant of the reference angle, not the exact angle. @@ -757,7 +758,7 @@ static RAMFUNC int Handle14443bSamplesFromTag(int ci, int cq) { } \ } -#define SUBCARRIER_DETECT_THRESHOLD 8 +#define SUBCARRIER_DETECT_THRESHOLD 8 // Subcarrier amplitude v = sqrt(ci^2 + cq^2), approximated here by max(abs(ci),abs(cq)) + 1/2*min(abs(ci),abs(cq))) #define AMPLITUDE(ci,cq) (MAX(ABS(ci),ABS(cq)) + (MIN(ABS(ci),ABS(cq))/2)) @@ -797,7 +798,7 @@ static RAMFUNC int Handle14443bSamplesFromTag(int ci, int cq) { Demod.state = DEMOD_GOT_FALLING_EDGE_OF_SOF; Demod.posCount = 0; // start of SOF sequence } else { - if (Demod.posCount > 200 / 4) { // maximum length of TR1 = 200 1/fs + if (Demod.posCount > 200/4) { // maximum length of TR1 = 200 1/fs Demod.state = DEMOD_UNSYNCD; } } @@ -820,7 +821,7 @@ static RAMFUNC int Handle14443bSamplesFromTag(int ci, int cq) { Demod.state = DEMOD_AWAITING_START_BIT; } } else { - if (Demod.posCount > 14 * 2) { // low phase of SOF too long (> 12 etu) + if (Demod.posCount > 12 * 2) { // low phase of SOF too long (> 12 etu) Demod.state = DEMOD_UNSYNCD; LED_C_OFF(); } @@ -831,7 +832,7 @@ static RAMFUNC int Handle14443bSamplesFromTag(int ci, int cq) { Demod.posCount++; MAKE_SOFT_DECISION(); if (v > 0) { - if (Demod.posCount > 6 * 2) { // max 19us between characters = 16 1/fs, max 3 etu after low phase of SOF = 24 1/fs + if (Demod.posCount > 3 * 2) { // max 19us between characters = 16 1/fs, max 3 etu after low phase of SOF = 24 1/fs LED_C_OFF(); if (Demod.bitCount == 0 && Demod.len == 0) { // received SOF only, this is valid for iClass/Picopass return true; @@ -873,7 +874,7 @@ static RAMFUNC int Handle14443bSamplesFromTag(int ci, int cq) { Demod.bitCount = 0; Demod.state = DEMOD_AWAITING_START_BIT; } else { - Demod.state = DEMOD_UNSYNCD; + Demod.state = DEMOD_AWAITING_FALLING_EDGE_OF_SOF; LED_C_OFF(); if (s == 0x000) { // This is EOF (start, stop and all data bits == '0' @@ -894,23 +895,16 @@ static RAMFUNC int Handle14443bSamplesFromTag(int ci, int cq) { return false; } - /* * Demodulate the samples we received from the tag, also log to tracebuffer */ static int Get14443bAnswerFromTag(uint8_t *response, uint16_t max_len, int timeout, uint32_t *eof_time) { - + int samples = 0, ret = 0; // Set up the demodulator for tag -> reader responses. Demod14bInit(response, max_len); - - // wait for last transfer to complete - while (!(AT91C_BASE_SSC->SSC_SR & AT91C_SSC_TXEMPTY)) {}; - - // And put the FPGA in the appropriate mode - FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER | FPGA_HF_READER_SUBCARRIER_848_KHZ | FPGA_HF_READER_MODE_RECEIVE_IQ); - + // Setup and start DMA. FpgaSetupSsc(FPGA_MAJOR_MODE_HF_READER); @@ -924,6 +918,9 @@ static int Get14443bAnswerFromTag(uint8_t *response, uint16_t max_len, int timeo uint32_t dma_start_time = 0; uint16_t *upTo = dma->buf; + // Put FPGA in the appropriate mode + FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER | FPGA_HF_READER_SUBCARRIER_848_KHZ | FPGA_HF_READER_MODE_RECEIVE_IQ); + for (;;) { volatile uint16_t behindBy = ((uint16_t *)AT91C_BASE_PDC_SSC->PDC_RPR - upTo) & (DMA_BUFFER_SIZE - 1); @@ -971,7 +968,7 @@ static int Get14443bAnswerFromTag(uint8_t *response, uint16_t max_len, int timeo if (Handle14443bSamplesFromTag(ci, cq)) { - *eof_time = dma_start_time + (samples * 16) - DELAY_TAG_TO_ARM; // end of EOF + *eof_time = dma_start_time + (samples ) - DELAY_TAG_TO_ARM; // end of EOF if (Demod.len > Demod.max_len) { ret = -2; // overflow @@ -986,19 +983,17 @@ static int Get14443bAnswerFromTag(uint8_t *response, uint16_t max_len, int timeo } FpgaDisableSscDma(); - if (ret < 0) { return ret; } if (Demod.len > 0) { uint32_t sof_time = *eof_time - - (Demod.len * 8 * 8 * 16) // time for byte transfers - - (32 * 16) // time for SOF transfer - - 0; // time for EOF transfer + - (Demod.len * (8 + 2)) // time for byte transfers + - (12) // time for SOF transfer + - (12); // time for EOF transfer LogTrace(Demod.output, Demod.len, (sof_time * 4), (*eof_time * 4), NULL, false); } - return Demod.len; } @@ -1011,6 +1006,7 @@ static void TransmitFor14443b_AsReader(uint32_t *start_time) { FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER | FPGA_HF_READER_MODE_SEND_SHALLOW_MOD); + // TR2 minimum 14 ETUs if (*start_time < DELAY_ARM_TO_TAG) { *start_time = DELAY_ARM_TO_TAG; } @@ -1018,21 +1014,20 @@ static void TransmitFor14443b_AsReader(uint32_t *start_time) { *start_time = (*start_time - DELAY_ARM_TO_TAG) & 0xfffffff0; if (GetCountSspClk() > *start_time) { // we may miss the intended time - *start_time = (GetCountSspClk() + 16) & 0xfffffff0; // next possible time + *start_time = (GetCountSspClk() + 32) & 0xfffffff0; // next possible time } - + // wait - while (GetCountSspClk() < *start_time) ; + while (GetCountSspClk() < *start_time); LED_B_ON(); for (int c = 0; c < ts->max; c++) { volatile uint8_t data = ts->buf[c]; - for (int i = 0; i < 8; i++) { - uint16_t send_word = (data & 0x80) ? 0x0000 : 0xffff; + for (uint8_t i = 0; i < 8; i++) { + volatile uint16_t send_word = (data & 0x80) ? 0x0000 : 0xFFFF; while (!(AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_TXRDY))) ; - AT91C_BASE_SSC->SSC_THR = send_word; while (!(AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_TXRDY))) ; @@ -1045,6 +1040,9 @@ static void TransmitFor14443b_AsReader(uint32_t *start_time) { LED_B_OFF(); *start_time += DELAY_ARM_TO_TAG; + + // wait for last transfer to complete + while (!(AT91C_BASE_SSC->SSC_SR & AT91C_SSC_TXEMPTY)) {}; } //----------------------------------------------------------------------------- @@ -1061,32 +1059,38 @@ static void CodeIso14443bAsReader(const uint8_t *cmd, int len) { * - no modulation ONES * * 1 ETU == 1 BIT! - * TR0 - 8 ETUS minimum. + * TR0 - 8 ETU's minimum. + * TR0 - 32 ETU's maximum for ATQB only + * TR0 - FWT for all other commands * * QUESTION: how long is a 1 or 0 in pulses in the xcorr_848 mode? * 1 "stuffbit" = 1ETU (9us) + * + * TR2 - After the PICC response, the PCD is required to wait the Frame Delay Time (TR2) + before transmission of the next command. The minimum frame delay time required for + all commands is 14 ETUs + * */ - + int i; tosend_reset(); - + // Send SOF // 10-11 ETUs of ZERO - for (int i = 0; i < 10; i++) + for (i = 0; i < 10; i++) { tosend_stuffbit(0); - - + } // 2-3 ETUs of ONE tosend_stuffbit(1); tosend_stuffbit(1); // Sending cmd, LSB // from here we add BITS - for (int i = 0; i < len; i++) { + for (i = 0; i < len; i++) { // Start bit tosend_stuffbit(0); - // Data bits - uint8_t b = cmd[i]; + // Data bits + volatile uint8_t b = cmd[i]; tosend_stuffbit(b & 1); tosend_stuffbit((b >> 1) & 1); tosend_stuffbit((b >> 2) & 1); @@ -1098,28 +1102,28 @@ static void CodeIso14443bAsReader(const uint8_t *cmd, int len) { // Stop bit tosend_stuffbit(1); - // EGT extra guard time - // For PCD it ranges 0-57us (1etu = 9us) -// tosend_stuffbit(1); -// tosend_stuffbit(1); -// tosend_stuffbit(1); + // EGT extra guard time 1 ETU = 9us + // For PCD it ranges 0-57us === 0 - 6 ETU + // FOR PICC it ranges 0-19us == 0 - 2 ETU } // Send EOF // 10-11 ETUs of ZERO - for (int i = 0; i < 10; i++) + for (i = 0; i < 10; i++) { tosend_stuffbit(0); + } - // Transition time. TR0 - guard time - // 8ETUS minum? - // Per specification, Subcarrier must be stopped no later than 2 ETUs after EOF. - // I'm guessing this is for the FPGA to be able to send all bits before we switch to listening mode + tosend_stuffbit(1); + /* Transition time. TR0 - guard time + * TR0 - 8 ETU's minimum. + * TR0 - 32 ETU's maximum for ATQB only + * TR0 - FWT for all other commands + * 32,64,128,256,512, ... , 262144, 524288 ETU + */ - // ensure that last byte is filled up - for (int i = 0; i < 8 ; ++i) + for (i = 0; i < 8 ; ++i) tosend_stuffbit(1); - // TR1 - Synchronization time // Convert from last character reference to length tosend_t *ts = get_tosend(); ts->max++; @@ -1132,54 +1136,100 @@ static void CodeAndTransmit14443bAsReader(const uint8_t *cmd, int len, uint32_t tosend_t *ts = get_tosend(); CodeIso14443bAsReader(cmd, len); TransmitFor14443b_AsReader(start_time); - *eof_time = *start_time + (32 * (8 * ts->max)); + *eof_time = *start_time + (10 * ts->max) + 10 + 2 + 10; LogTrace(cmd, len, *start_time, *eof_time, NULL, true); } /* Sends an APDU to the tag * TODO: check CRC and preamble */ -int iso14443b_apdu(uint8_t const *message, size_t message_length, uint8_t *response, uint16_t respmaxlen) { +int iso14443b_apdu(uint8_t const *msg, size_t msg_len, bool send_chaining, uint8_t *response, uint16_t respmaxlen) { - LED_A_ON(); - uint8_t message_frame[message_length + 4]; - // PCB - message_frame[0] = 0x0A | pcb_blocknum; - pcb_blocknum ^= 1; - // CID - message_frame[1] = 0; - // INF - memcpy(message_frame + 2, message, message_length); - // EDC (CRC) - AddCrc14B(message_frame, message_length + 2); + uint8_t real_cmd[msg_len + 4]; + + if (msg_len) { + // ISO 14443 APDU frame: PCB [CID] [NAD] APDU CRC PCB=0x02 + real_cmd[0] = 0x02; // bnr, nad, cid, chn=0; i-block(0x00) + if (send_chaining) { + real_cmd[0] |= 0x10; + } + // put block number into the PCB + real_cmd[0] |= iso14b_pcb_blocknum; + memcpy(real_cmd + 1, msg, msg_len); + } else { + // R-block. ACK + real_cmd[0] = 0xA2; // r-block + ACK + real_cmd[0] |= iso14b_pcb_blocknum; + } + + AddCrc14B(real_cmd, msg_len + 1); // send uint32_t start_time = 0; uint32_t eof_time = 0; - CodeAndTransmit14443bAsReader(message_frame, sizeof(message_frame), &start_time, &eof_time); - - // Get response? - if (response == NULL) { - LED_A_OFF(); - return 0; - } + CodeAndTransmit14443bAsReader(real_cmd, msg_len + 3, &start_time, &eof_time); eof_time += DELAY_ISO14443B_VCD_TO_VICC_READER; - int retlen = Get14443bAnswerFromTag(response, respmaxlen, ISO14443B_READER_TIMEOUT, &eof_time); + int len = Get14443bAnswerFromTag(response, respmaxlen, ISO14443B_READER_TIMEOUT, &eof_time); FpgaDisableTracing(); - if (retlen < 3) { - LED_A_OFF(); - return -1; + uint8_t *data_bytes = (uint8_t *) response; + + if (len <= 0) { + return 0; //DATA LINK ERROR + } else { + // S-Block WTX + while (len && ((data_bytes[0] & 0xF2) == 0xF2)) { + uint32_t save_iso14b_timeout = iso14b_timeout; + // temporarily increase timeout + iso14b_set_timeout(MAX((data_bytes[1] & 0x3f) * save_iso14b_timeout, ISO14443B_READER_TIMEOUT)); + // Transmit WTX back + // byte1 - WTXM [1..59]. command FWT=FWT*WTXM + data_bytes[1] = data_bytes[1] & 0x3f; // 2 high bits mandatory set to 0b + // now need to fix CRC. + AddCrc14B(data_bytes, len - 2); + + // transmit S-Block + CodeAndTransmit14443bAsReader(data_bytes, len, &start_time, &eof_time); + + // retrieve the result again (with increased timeout) + eof_time += DELAY_ISO14443B_VCD_TO_VICC_READER; + len = Get14443bAnswerFromTag(response, respmaxlen, ISO14443B_READER_TIMEOUT, &eof_time); + FpgaDisableTracing(); + + data_bytes = response; + // restore timeout + iso14b_set_timeout(save_iso14b_timeout); + } + + // if we received an I- or R(ACK)-Block with a block number equal to the + // current block number, toggle the current block number + if (len >= 3 // PCB+CRC = 3 bytes + && ((data_bytes[0] & 0xC0) == 0 // I-Block + || (data_bytes[0] & 0xD0) == 0x80) // R-Block with ACK bit set to 0 + && (data_bytes[0] & 0x01) == iso14b_pcb_blocknum) { // equal block numbers + iso14b_pcb_blocknum ^= 1; + } + + // if we received I-block with chaining we need to send ACK and receive another block of data + if (response) + *response = data_bytes[0]; + + // crc check + if (len >= 3 && !check_crc(CRC_14443_B, data_bytes, len)) { + return -1; + } } - // VALIDATE CRC - if (!check_crc(CRC_14443_B, response, retlen)) { - if (DBGLEVEL > DBG_DEBUG) DbpString("CRC fail"); - return -2; + if (len) { + // cut frame byte + len -= 1; + // memmove(data_bytes, data_bytes + 1, len); + for (int i = 0; i < len; i++) + data_bytes[i] = data_bytes[i + 1]; } - return retlen; + return len; } /** @@ -1272,7 +1322,10 @@ static int iso14443b_select_srx_card(iso14b_card_select_t *card) { int iso14443b_select_card(iso14b_card_select_t *card) { // WUPB command (including CRC) // Note: WUPB wakes up all tags, REQB doesn't wake up tags in HALT state - static const uint8_t wupb[] = { ISO14443B_REQB, 0x00, 0x08, 0x39, 0x73 }; + // WUTB or REQB is denoted in the third byte, lower nibble. 0 vs 8 + //static const uint8_t wupb[] = { ISO14443B_REQB, 0x00, 0x08, 0x39, 0x73 }; + static const uint8_t wupb[] = { ISO14443B_REQB, 0x00, 0x00, 0x71, 0xff }; + // ATTRIB command (with space for CRC) uint8_t attrib[] = { ISO14443B_ATTRIB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00}; @@ -1350,7 +1403,7 @@ int iso14443b_select_card(iso14b_card_select_t *card) { } } // reset PCB block number - pcb_blocknum = 0; + iso14b_pcb_blocknum = 0; return 0; } @@ -1720,7 +1773,7 @@ void SendRawCommand14443B_Ex(PacketCommandNG *c) { if ((param & ISO14B_APDU) == ISO14B_APDU) { uint8_t buf[100] = {0}; - status = iso14443b_apdu(cmd, len, buf, sizeof(buf)); + status = iso14443b_apdu(cmd, len, (param & ISO14A_SEND_CHAINING), buf, sizeof(buf)); reply_mix(CMD_HF_ISO14443B_COMMAND, status, status, 0, buf, status); } diff --git a/armsrc/iso14443b.h b/armsrc/iso14443b.h index 199e5c63f..84c264c92 100644 --- a/armsrc/iso14443b.h +++ b/armsrc/iso14443b.h @@ -27,7 +27,7 @@ #endif void iso14443b_setup(void); -int iso14443b_apdu(uint8_t const *message, size_t message_length, uint8_t *response, uint16_t respmaxlen); +int iso14443b_apdu(uint8_t const *msg, size_t msg_len, bool send_chaining, uint8_t *response, uint16_t respmaxlen); int iso14443b_select_card(iso14b_card_select_t *card); int iso14443b_select_card_srx(iso14b_card_select_t *card); diff --git a/client/src/cmdhf14b.c b/client/src/cmdhf14b.c index 51558bcd4..8a355073d 100644 --- a/client/src/cmdhf14b.c +++ b/client/src/cmdhf14b.c @@ -10,12 +10,14 @@ //----------------------------------------------------------------------------- #include "cmdhf14b.h" - #include #include "fileutils.h" #include "cmdparser.h" // command_t +#include "commonutil.h" // ARRAYLEN #include "comms.h" // clearCommandBuffer +#include "emv/emvcore.h" // TLVPrintFromBuffer #include "cmdtrace.h" +#include "cliparser.h" #include "crc16.h" #include "cmdhf14a.h" #include "protocols.h" // definitions of ISO14B/7816 protocol @@ -24,6 +26,11 @@ #define TIMEOUT 2000 +// iso14b apdu input frame length +static uint16_t apdu_frame_length = 0; +uint16_t ats_fsc[] = {16, 24, 32, 40, 48, 64, 96, 128, 256}; +bool apdu_in_framing_enable = true; + static int CmdHelp(const char *Cmd); static int usage_hf_14b_info(void) { @@ -145,7 +152,6 @@ static uint16_t get_sw(uint8_t *d, uint8_t n) { static bool waitCmd14b(bool verbose) { PacketResponseNG resp; - if (WaitForResponseTimeout(CMD_HF_ISO14443B_COMMAND, &resp, TIMEOUT)) { uint16_t len = (resp.oldarg[1] & 0xFFFF); @@ -1270,6 +1276,336 @@ static int srix4kValid(const char *Cmd) { } */ +static int select_card_14443b_4(bool disconnect, iso14b_card_select_t *card) { + + PacketResponseNG resp; + if (card) + memset(card, 0, sizeof(iso14b_card_select_t)); + + switch_off_field_14b(); + + // Anticollision + SELECT STD card + SendCommandMIX(CMD_HF_ISO14443B_COMMAND, ISO14B_CONNECT | ISO14B_SELECT_STD, 0, 0, NULL, 0); + if (WaitForResponseTimeout(CMD_HF_ISO14443B_COMMAND, &resp, TIMEOUT) == false) { + PrintAndLogEx(INFO, "Trying 14B Select SR"); + + // Anticollision + SELECT SR card + SendCommandMIX(CMD_HF_ISO14443B_COMMAND, ISO14B_CONNECT | ISO14B_SELECT_SR, 0, 0, NULL, 0); + if (WaitForResponseTimeout(CMD_HF_ISO14443B_COMMAND, &resp, TIMEOUT) == false) { + PrintAndLogEx(ERR, "connection timeout"); + switch_off_field_14b(); + return PM3_ESOFT; + } + } + + // check result + int status = resp.oldarg[0]; + if (status < 0) { + PrintAndLogEx(ERR, "No card in field."); + switch_off_field_14b(); + return PM3_ESOFT; + } + + apdu_frame_length = 0; + // get frame length from ATS in card data structure + iso14b_card_select_t *vcard = (iso14b_card_select_t *) resp.data.asBytes; +// uint8_t fsci = vcard->atqb[1] & 0x0f; +// if (fsci < ARRAYLEN(ats_fsc)) { +// apdu_frame_length = ats_fsc[fsci]; +// } + + if (card) { + memcpy(card, vcard, sizeof(iso14b_card_select_t)); + } + + if (disconnect) { + switch_off_field_14b(); + } + return PM3_SUCCESS; +} + +static int handle_14b_apdu(bool chainingin, uint8_t *datain, int datainlen, bool activateField, uint8_t *dataout, int maxdataoutlen, int *dataoutlen, bool *chainingout) { + *chainingout = false; + + if (activateField) { + // select with no disconnect and set frameLength + int selres = select_card_14443b_4(false, NULL); + if (selres != PM3_SUCCESS) + return selres; + } + + uint16_t flags = 0; + + // Don't support 14B chaining yet + if (chainingin) + flags = ISO14B_SEND_CHAINING; + + // "Command APDU" length should be 5+255+1, but javacard's APDU buffer might be smaller - 133 bytes + // https://stackoverflow.com/questions/32994936/safe-max-java-card-apdu-data-command-and-respond-size + // here length PM3_CMD_DATA_SIZE=512 + // timeout must be authomatically set by "get ATS" + if (datain) + SendCommandMIX(CMD_HF_ISO14443B_COMMAND, ISO14B_APDU | flags, (datainlen & 0xFFFF), 0, datain, datainlen & 0xFFFF); + else + SendCommandMIX(CMD_HF_ISO14443B_COMMAND, ISO14B_APDU | flags, 0, 0, NULL, 0); + + PacketResponseNG resp; + if (WaitForResponseTimeout(CMD_HF_ISO14443B_COMMAND, &resp, TIMEOUT)) { + uint8_t *recv = resp.data.asBytes; + int iLen = resp.oldarg[0]; + uint8_t res = resp.oldarg[1]; + + int dlen = iLen - 2; + if (dlen < 0) { + dlen = 0; + } + *dataoutlen += dlen; + + if (maxdataoutlen && *dataoutlen > maxdataoutlen) { + PrintAndLogEx(ERR, "APDU: Buffer too small(%d). Needs %d bytes", *dataoutlen, maxdataoutlen); + return PM3_ESOFT; + } + + // I-block ACK + if ((res & 0xf2) == 0xa2) { + *dataoutlen = 0; + *chainingout = true; + return PM3_SUCCESS; + } + + if (!iLen) { + PrintAndLogEx(ERR, "APDU: No APDU response."); + return PM3_ESOFT; + } + + // check apdu length + if (iLen < 2 && iLen >= 0) { + PrintAndLogEx(ERR, "APDU: Small APDU response. Len=%d", iLen); + return PM3_ESOFT; + } + + // check block TODO + if (iLen == -2) { + PrintAndLogEx(ERR, "APDU: Block type mismatch."); + return PM3_ESOFT; + } + + memcpy(dataout, recv, dlen); + + // chaining + if ((res & 0x10) != 0) { + *chainingout = true; + } + + // CRC Check + if (iLen == -1) { + PrintAndLogEx(ERR, "APDU: ISO 14443A CRC error."); + return PM3_ESOFT; + } + } else { + PrintAndLogEx(ERR, "APDU: Reply timeout."); + return PM3_ETIMEOUT; + } + + return PM3_SUCCESS; +} + +static int exchange_14b_apdu(uint8_t *datain, int datainlen, bool activate_field, bool leave_signal_on, uint8_t *dataout, int maxdataoutlen, int *dataoutlen) { + *dataoutlen = 0; + bool chaining = false; + int res; + + // 3 byte here - 1b framing header, 2b crc16 + if (apdu_in_framing_enable && + ((apdu_frame_length && (datainlen > apdu_frame_length - 3)) || (datainlen > PM3_CMD_DATA_SIZE - 3))) { + int clen = 0; + + bool v_activate_field = activate_field; + + do { + int vlen = MIN(apdu_frame_length - 3, datainlen - clen); + bool chainBlockNotLast = ((clen + vlen) < datainlen); + + *dataoutlen = 0; + res = handle_14b_apdu(chainBlockNotLast, &datain[clen], vlen, v_activate_field, dataout, maxdataoutlen, dataoutlen, &chaining); + if (res) { + if (leave_signal_on == false) + switch_off_field_14b(); + + return 200; + } + + // check R-block ACK +//TODO check this one... + if ((*dataoutlen == 0) && (*dataoutlen != 0 || chaining != chainBlockNotLast)) { // *dataoutlen!=0. 'A && (!A || B)' is equivalent to 'A && B' + if (leave_signal_on == false) { + switch_off_field_14b(); + } + return 201; + } + + clen += vlen; + v_activate_field = false; + if (*dataoutlen) { + if (clen != datainlen) + PrintAndLogEx(ERR, "APDU: I-block/R-block sequence error. Data len=%d, Sent=%d, Last packet len=%d", datainlen, clen, *dataoutlen); + break; + } + } while (clen < datainlen); + + } else { + + res = handle_14b_apdu(false, datain, datainlen, activate_field, dataout, maxdataoutlen, dataoutlen, &chaining); + if (res != PM3_SUCCESS) { + if (leave_signal_on == false) { + switch_off_field_14b(); + } + return res; + } + } + + while (chaining) { + // I-block with chaining + res = handle_14b_apdu(false, NULL, 0, false, &dataout[*dataoutlen], maxdataoutlen, dataoutlen, &chaining); + if (res != PM3_SUCCESS) { + if (leave_signal_on == false) { + switch_off_field_14b(); + } + return 100; + } + } + + if (leave_signal_on == false) { + switch_off_field_14b(); + } + + return PM3_SUCCESS; +} + +// ISO14443-4. 7. Half-duplex block transmission protocol +static int CmdHF14BAPDU(const char *Cmd) { + uint8_t data[PM3_CMD_DATA_SIZE]; + int datalen = 0; + uint8_t header[PM3_CMD_DATA_SIZE]; + int headerlen = 0; + bool activate_field = false; + bool leave_signal_on = false; + bool decode_TLV = false; + bool decode_APDU = false; + bool make_APDU = false; + bool extended_APDU = false; + int le = 0; + + CLIParserContext *ctx; + CLIParserInit(&ctx, "hf 14b apdu", + "Sends an ISO 7816-4 APDU via ISO 14443-4 block transmission protocol (T=CL). works with all apdu types from ISO 7816-4:2013", + "hf 14b apdu -s 94a40800043f000002\n" + "hf 14b apdu -sd 00A404000E325041592E5359532E444446303100 -> decode apdu\n" + "hf 14b apdu -sm 00A40400 325041592E5359532E4444463031 -l 256 -> encode standard apdu\n" + "hf 14b apdu -sm 00A40400 325041592E5359532E4444463031 -el 65536 -> encode extended apdu\n"); + + void *argtable[] = { + arg_param_begin, + arg_lit0("s", "select", "activate field and select card"), + arg_lit0("k", "keep", "leave the signal field ON after receive response"), + arg_lit0("t", "tlv", "executes TLV decoder if it possible"), + arg_lit0("d", "decode", "decode apdu request if it possible"), + arg_str0("m", "make", "", "make apdu with head from this field and data from data field. Must be 4 bytes length: "), + arg_lit0("e", "extended", "make extended length apdu if `m` parameter included"), + arg_int0("l", "le", "", "Le apdu parameter if `m` parameter included"), + arg_strx1(NULL, NULL, "", "data if `m` parameter included"), + arg_param_end + }; + CLIExecWithReturn(ctx, Cmd, argtable, false); + + activate_field = arg_get_lit(ctx, 1); + leave_signal_on = arg_get_lit(ctx, 2); + decode_TLV = arg_get_lit(ctx, 3); + decode_APDU = arg_get_lit(ctx, 4); + + CLIGetHexWithReturn(ctx, 5, header, &headerlen); + make_APDU = headerlen > 0; + if (make_APDU && headerlen != 4) { + PrintAndLogEx(ERR, "header length must be 4 bytes instead of %d", headerlen); + CLIParserFree(ctx); + return PM3_EINVARG; + } + + extended_APDU = arg_get_lit(ctx, 6); + le = arg_get_int_def(ctx, 7, 0); + + if (make_APDU) { + uint8_t apdudata[PM3_CMD_DATA_SIZE] = {0}; + int apdudatalen = 0; + + CLIGetHexBLessWithReturn(ctx, 8, apdudata, &apdudatalen, 1 + 2); + + APDUStruct apdu; + apdu.cla = header[0]; + apdu.ins = header[1]; + apdu.p1 = header[2]; + apdu.p2 = header[3]; + + apdu.lc = apdudatalen; + apdu.data = apdudata; + + apdu.extended_apdu = extended_APDU; + apdu.le = le; + + if (APDUEncode(&apdu, data, &datalen)) { + PrintAndLogEx(ERR, "can't make apdu with provided parameters."); + CLIParserFree(ctx); + return PM3_EINVARG; + } + + } else { + if (extended_APDU) { + PrintAndLogEx(ERR, "make mode not set but here `e` option."); + CLIParserFree(ctx); + return PM3_EINVARG; + } + if (le > 0) { + PrintAndLogEx(ERR, "make mode not set but here `l` option."); + CLIParserFree(ctx); + return PM3_EINVARG; + } + + // len = data + PCB(1b) + CRC(2b) + CLIGetHexBLessWithReturn(ctx, 8, data, &datalen, 1 + 2); + } + CLIParserFree(ctx); + + PrintAndLogEx(NORMAL, ">>>>[%s%s%s] %s", + activate_field ? "sel " : "", + leave_signal_on ? "keep " : "", + decode_TLV ? "TLV" : "", + sprint_hex(data, datalen) + ); + + if (decode_APDU) { + APDUStruct apdu; + if (APDUDecode(data, datalen, &apdu) == 0) + APDUPrint(apdu); + else + PrintAndLogEx(WARNING, "can't decode APDU."); + } + + int res = exchange_14b_apdu(data, datalen, activate_field, leave_signal_on, data, PM3_CMD_DATA_SIZE, &datalen); + if (res != PM3_SUCCESS) { + return res; + } + + PrintAndLogEx(NORMAL, "<<<< %s", sprint_hex(data, datalen)); + PrintAndLogEx(SUCCESS, "APDU response: %02x %02x - %s", data[datalen - 2], data[datalen - 1], GetAPDUCodeDescription(data[datalen - 2], data[datalen - 1])); + + // TLV decoder + if (decode_TLV && datalen > 4) { + TLVPrintFromBuffer(data, datalen - 2); + } + + return PM3_SUCCESS; +} + static int CmdHF14BNdef(const char *Cmd) { char c = tolower(param_getchar(Cmd, 0)); if (c == 'h' || c == 0x00) return usage_hf_14b_ndef(); @@ -1352,6 +1688,7 @@ static int CmdHF14BNdef(const char *Cmd) { static command_t CommandTable[] = { {"help", CmdHelp, AlwaysAvailable, "This help"}, + {"apdu", CmdHF14BAPDU, IfPm3Iso14443b, "Send ISO 14443-4 APDU to tag"}, {"dump", CmdHF14BDump, IfPm3Iso14443b, "Read all memory pages of an ISO14443-B tag, save to file"}, {"info", CmdHF14Binfo, IfPm3Iso14443b, "Tag information"}, {"list", CmdHF14BList, AlwaysAvailable, "List ISO 14443B history"}, From 46352dfcccb3d80de034c8480071e741a8190224 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 30 Sep 2020 17:06:39 +0200 Subject: [PATCH 0712/1047] 14b_chaining --- include/mifare.h | 1 + 1 file changed, 1 insertion(+) diff --git a/include/mifare.h b/include/mifare.h index 264b121c1..f8cdf72af 100644 --- a/include/mifare.h +++ b/include/mifare.h @@ -116,6 +116,7 @@ typedef enum ISO14B_COMMAND { ISO14B_SELECT_STD = (1 << 6), ISO14B_SELECT_SR = (1 << 7), ISO14B_SET_TIMEOUT = (1 << 8), + ISO14B_SEND_CHAINING = (1 << 9), } iso14b_command_t; typedef enum ISO15_COMMAND { From f221d127a1d12e052c7fa0133f6389ef109ce292 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 30 Sep 2020 18:19:51 +0200 Subject: [PATCH 0713/1047] wrong flag --- armsrc/iso14443b.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/armsrc/iso14443b.c b/armsrc/iso14443b.c index 88e117672..4646b2731 100644 --- a/armsrc/iso14443b.c +++ b/armsrc/iso14443b.c @@ -1184,7 +1184,7 @@ int iso14443b_apdu(uint8_t const *msg, size_t msg_len, bool send_chaining, uint8 // temporarily increase timeout iso14b_set_timeout(MAX((data_bytes[1] & 0x3f) * save_iso14b_timeout, ISO14443B_READER_TIMEOUT)); // Transmit WTX back - // byte1 - WTXM [1..59]. command FWT=FWT*WTXM + // byte1 - WTXM [1..59]. command FWT = FWT * WTXM data_bytes[1] = data_bytes[1] & 0x3f; // 2 high bits mandatory set to 0b // now need to fix CRC. AddCrc14B(data_bytes, len - 2); @@ -1204,7 +1204,7 @@ int iso14443b_apdu(uint8_t const *msg, size_t msg_len, bool send_chaining, uint8 // if we received an I- or R(ACK)-Block with a block number equal to the // current block number, toggle the current block number - if (len >= 3 // PCB+CRC = 3 bytes + if (len >= 3 // PCB + CRC = 3 bytes && ((data_bytes[0] & 0xC0) == 0 // I-Block || (data_bytes[0] & 0xD0) == 0x80) // R-Block with ACK bit set to 0 && (data_bytes[0] & 0x01) == iso14b_pcb_blocknum) { // equal block numbers @@ -1736,6 +1736,7 @@ void SendRawCommand14443B_Ex(PacketCommandNG *c) { size_t len = c->oldarg[1] & 0xffff; uint32_t timeout = c->oldarg[2]; uint8_t *cmd = c->data.asBytes; + uint8_t buf[PM3_CMD_DATA_SIZE] = {0x00}; if (DBGLEVEL > DBG_DEBUG) Dbprintf("14b raw: param, %04x", param); @@ -1772,8 +1773,7 @@ void SendRawCommand14443B_Ex(PacketCommandNG *c) { } if ((param & ISO14B_APDU) == ISO14B_APDU) { - uint8_t buf[100] = {0}; - status = iso14443b_apdu(cmd, len, (param & ISO14A_SEND_CHAINING), buf, sizeof(buf)); + status = iso14443b_apdu(cmd, len, (param & ISO14B_SEND_CHAINING), buf, sizeof(buf)); reply_mix(CMD_HF_ISO14443B_COMMAND, status, status, 0, buf, status); } From 9e05faabffbb99876850cc3330411b4c9dc0f60b Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 30 Sep 2020 19:20:40 +0200 Subject: [PATCH 0714/1047] unify buffers --- armsrc/iso14443b.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/armsrc/iso14443b.c b/armsrc/iso14443b.c index 4646b2731..ece5edfd3 100644 --- a/armsrc/iso14443b.c +++ b/armsrc/iso14443b.c @@ -1774,7 +1774,8 @@ void SendRawCommand14443B_Ex(PacketCommandNG *c) { if ((param & ISO14B_APDU) == ISO14B_APDU) { status = iso14443b_apdu(cmd, len, (param & ISO14B_SEND_CHAINING), buf, sizeof(buf)); - reply_mix(CMD_HF_ISO14443B_COMMAND, status, status, 0, buf, status); + sendlen = MIN(Demod.len, PM3_CMD_DATA_SIZE); + reply_mix(CMD_HF_ISO14443B_COMMAND, status, status, 0, buf, sendlen); } if ((param & ISO14B_RAW) == ISO14B_RAW) { @@ -1782,8 +1783,6 @@ void SendRawCommand14443B_Ex(PacketCommandNG *c) { AddCrc14B(cmd, len); len += 2; } - uint8_t buf[100] = {0}; - uint32_t start_time = 0; uint32_t eof_time = 0; CodeAndTransmit14443bAsReader(cmd, len, &start_time, &eof_time); From 5ef142620de834b6d5260cf8544a61cf2e25f8eb Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 30 Sep 2020 19:21:03 +0200 Subject: [PATCH 0715/1047] fix 14b apdu return --- client/src/cmdhf14b.c | 41 +++++++++++++++-------------------------- 1 file changed, 15 insertions(+), 26 deletions(-) diff --git a/client/src/cmdhf14b.c b/client/src/cmdhf14b.c index 8a355073d..24fda01c0 100644 --- a/client/src/cmdhf14b.c +++ b/client/src/cmdhf14b.c @@ -1335,15 +1335,13 @@ static int handle_14b_apdu(bool chainingin, uint8_t *datain, int datainlen, bool } uint16_t flags = 0; - - // Don't support 14B chaining yet + if (chainingin) flags = ISO14B_SEND_CHAINING; // "Command APDU" length should be 5+255+1, but javacard's APDU buffer might be smaller - 133 bytes // https://stackoverflow.com/questions/32994936/safe-max-java-card-apdu-data-command-and-respond-size // here length PM3_CMD_DATA_SIZE=512 - // timeout must be authomatically set by "get ATS" if (datain) SendCommandMIX(CMD_HF_ISO14443B_COMMAND, ISO14B_APDU | flags, (datainlen & 0xFFFF), 0, datain, datainlen & 0xFFFF); else @@ -1352,13 +1350,14 @@ static int handle_14b_apdu(bool chainingin, uint8_t *datain, int datainlen, bool PacketResponseNG resp; if (WaitForResponseTimeout(CMD_HF_ISO14443B_COMMAND, &resp, TIMEOUT)) { uint8_t *recv = resp.data.asBytes; - int iLen = resp.oldarg[0]; + int rlen = resp.oldarg[0]; uint8_t res = resp.oldarg[1]; - int dlen = iLen - 2; + int dlen = rlen - 2; if (dlen < 0) { dlen = 0; } + *dataoutlen += dlen; if (maxdataoutlen && *dataoutlen > maxdataoutlen) { @@ -1373,20 +1372,14 @@ static int handle_14b_apdu(bool chainingin, uint8_t *datain, int datainlen, bool return PM3_SUCCESS; } - if (!iLen) { + if (rlen < 0) { PrintAndLogEx(ERR, "APDU: No APDU response."); return PM3_ESOFT; } // check apdu length - if (iLen < 2 && iLen >= 0) { - PrintAndLogEx(ERR, "APDU: Small APDU response. Len=%d", iLen); - return PM3_ESOFT; - } - - // check block TODO - if (iLen == -2) { - PrintAndLogEx(ERR, "APDU: Block type mismatch."); + if (rlen == 0 && rlen == 1) { + PrintAndLogEx(ERR, "APDU: Small APDU response. Len=%d", rlen); return PM3_ESOFT; } @@ -1397,11 +1390,6 @@ static int handle_14b_apdu(bool chainingin, uint8_t *datain, int datainlen, bool *chainingout = true; } - // CRC Check - if (iLen == -1) { - PrintAndLogEx(ERR, "APDU: ISO 14443A CRC error."); - return PM3_ESOFT; - } } else { PrintAndLogEx(ERR, "APDU: Reply timeout."); return PM3_ETIMEOUT; @@ -1418,8 +1406,8 @@ static int exchange_14b_apdu(uint8_t *datain, int datainlen, bool activate_field // 3 byte here - 1b framing header, 2b crc16 if (apdu_in_framing_enable && ((apdu_frame_length && (datainlen > apdu_frame_length - 3)) || (datainlen > PM3_CMD_DATA_SIZE - 3))) { - int clen = 0; + int clen = 0; bool v_activate_field = activate_field; do { @@ -1435,9 +1423,10 @@ static int exchange_14b_apdu(uint8_t *datain, int datainlen, bool activate_field return 200; } + // TODO check this one... // check R-block ACK -//TODO check this one... - if ((*dataoutlen == 0) && (*dataoutlen != 0 || chaining != chainBlockNotLast)) { // *dataoutlen!=0. 'A && (!A || B)' is equivalent to 'A && B' + // *dataoutlen!=0. 'A && (!A || B)' is equivalent to 'A && B' + if ((*dataoutlen == 0) && (*dataoutlen != 0 || chaining != chainBlockNotLast)) { if (leave_signal_on == false) { switch_off_field_14b(); } @@ -1576,9 +1565,9 @@ static int CmdHF14BAPDU(const char *Cmd) { CLIParserFree(ctx); PrintAndLogEx(NORMAL, ">>>>[%s%s%s] %s", - activate_field ? "sel " : "", - leave_signal_on ? "keep " : "", - decode_TLV ? "TLV" : "", + activate_field ? "sel" : "", + leave_signal_on ? " keep" : "", + decode_TLV ? " TLV" : "", sprint_hex(data, datalen) ); @@ -1596,7 +1585,7 @@ static int CmdHF14BAPDU(const char *Cmd) { } PrintAndLogEx(NORMAL, "<<<< %s", sprint_hex(data, datalen)); - PrintAndLogEx(SUCCESS, "APDU response: %02x %02x - %s", data[datalen - 2], data[datalen - 1], GetAPDUCodeDescription(data[datalen - 2], data[datalen - 1])); + PrintAndLogEx(SUCCESS, "APDU response: " _YELLOW_("%02x %02x") " - %s", data[datalen - 2], data[datalen - 1], GetAPDUCodeDescription(data[datalen - 2], data[datalen - 1])); // TLV decoder if (decode_TLV && datalen > 4) { From a14c7f90b26534edaa89afd0e87712562b8b0f70 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 30 Sep 2020 19:22:36 +0200 Subject: [PATCH 0716/1047] textual --- CHANGELOG.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bb7fbe7b6..61f3e89b2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,8 +3,9 @@ All notable changes to this project will be documented in this file. This project uses the changelog in accordance with [keepchangelog](http://keepachangelog.com/). Please use this to write notable changes, which is not the same as git commit log... ## [unreleased][unreleased] - - Add lf t55xx chk e option. Checks calculated password based on the EM4100 id from some white cloners forumla by paleopterix (@mwalker33) - - Add lf t55xx sniff to allow extracting commands and passwords used be cloners. (@mwalker33) + - Add `hf 14b apdu` - send APDU over ISO14443B (@iceman1001) + - Add `lf t55xx chk e option` - Checks calculated password based on the EM4100 id from some white cloners forumla by paleopterix (@mwalker33) + - Add `lf t55xx sniff` to allow extracting commands and passwords used be cloners. (@mwalker33) - Add options to `lf read`, `lf cmdread`, `lf sniff` for repeated acquisitions (@doegox) - Change options of `lf read` to match `lf cmdread`, this affects historical `d` and `s` options (@doegox) - Add `hf waveshare` to upload picture to Waveshare NFC-Powered e-Paper (@doegox) From 9140579735b0b655c6ed754e04128f53f36eac5c Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 30 Sep 2020 19:42:50 +0200 Subject: [PATCH 0717/1047] hf 14b ndef - hooking up some steps --- client/src/cmdhf14b.c | 60 ++++++++++++++++++++++++++----------------- 1 file changed, 36 insertions(+), 24 deletions(-) diff --git a/client/src/cmdhf14b.c b/client/src/cmdhf14b.c index 24fda01c0..7fdff6c8c 100644 --- a/client/src/cmdhf14b.c +++ b/client/src/cmdhf14b.c @@ -1599,8 +1599,8 @@ static int CmdHF14BNdef(const char *Cmd) { char c = tolower(param_getchar(Cmd, 0)); if (c == 'h' || c == 0x00) return usage_hf_14b_ndef(); -// bool activate_field = true; -// bool keep_field_on = true; + bool activate_field = true; + bool keep_field_on = true; uint8_t response[PM3_CMD_DATA_SIZE]; int resplen = 0; @@ -1608,22 +1608,25 @@ static int CmdHF14BNdef(const char *Cmd) { uint8_t aSELECT_AID[80]; int aSELECT_AID_n = 0; param_gethex_to_eol("00a4040007d276000085010100", 0, aSELECT_AID, sizeof(aSELECT_AID), &aSELECT_AID_n); - int res = 0; -// int res = ExchangeAPDU14a(aSELECT_AID, aSELECT_AID_n, activate_field, keep_field_on, response, sizeof(response), &resplen); - if (res) - return res; + int res = exchange_14b_apdu(aSELECT_AID, aSELECT_AID_n, activate_field, keep_field_on, response, sizeof(response), &resplen); + if (res) { + goto out; + } - if (resplen < 2) - return PM3_ESOFT; + if (resplen < 2) { + res = PM3_ESOFT; + goto out; + } uint16_t sw = get_sw(response, resplen); if (sw != 0x9000) { PrintAndLogEx(ERR, "Selecting NDEF aid failed (%04x - %s).", sw, GetAPDUCodeDescription(sw >> 8, sw & 0xff)); - return PM3_ESOFT; + res = PM3_ESOFT; + goto out; } -// activate_field = false; -// keep_field_on = true; + activate_field = false; + keep_field_on = true; // --------------- Send CC select ---------------- // --------------- Read binary ---------------- @@ -1631,48 +1634,57 @@ static int CmdHF14BNdef(const char *Cmd) { uint8_t aSELECT_FILE_NDEF[30]; int aSELECT_FILE_NDEF_n = 0; param_gethex_to_eol("00a4000c020001", 0, aSELECT_FILE_NDEF, sizeof(aSELECT_FILE_NDEF), &aSELECT_FILE_NDEF_n); -// res = ExchangeAPDU14a(aSELECT_FILE_NDEF, aSELECT_FILE_NDEF_n, activate_field, keep_field_on, response, sizeof(response), &resplen); + res = exchange_14b_apdu(aSELECT_FILE_NDEF, aSELECT_FILE_NDEF_n, activate_field, keep_field_on, response, sizeof(response), &resplen); if (res) - return res; + goto out; sw = get_sw(response, resplen); if (sw != 0x9000) { PrintAndLogEx(ERR, "Selecting NDEF file failed (%04x - %s).", sw, GetAPDUCodeDescription(sw >> 8, sw & 0xff)); - return PM3_ESOFT; + res = PM3_ESOFT; + goto out; } // --------------- Read binary ---------------- uint8_t aREAD_NDEF[30]; int aREAD_NDEF_n = 0; param_gethex_to_eol("00b0000002", 0, aREAD_NDEF, sizeof(aREAD_NDEF), &aREAD_NDEF_n); -// res = ExchangeAPDU14a(aREAD_NDEF, aREAD_NDEF_n, activate_field, keep_field_on, response, sizeof(response), &resplen); - if (res) - return res; + res = exchange_14b_apdu(aREAD_NDEF, aREAD_NDEF_n, activate_field, keep_field_on, response, sizeof(response), &resplen); + if (res) { + goto out; + } sw = get_sw(response, resplen); if (sw != 0x9000) { PrintAndLogEx(ERR, "reading NDEF file failed (%04x - %s).", sw, GetAPDUCodeDescription(sw >> 8, sw & 0xff)); - return PM3_ESOFT; + res = PM3_ESOFT; + goto out; } // take offset from response uint8_t offset = response[1]; // --------------- Read binary w offset ---------------- -// keep_field_on = false; + keep_field_on = false; aREAD_NDEF_n = 0; param_gethex_to_eol("00b00002", 0, aREAD_NDEF, sizeof(aREAD_NDEF), &aREAD_NDEF_n); aREAD_NDEF[4] = offset; -// res = ExchangeAPDU14a(aREAD_NDEF, aREAD_NDEF_n, activate_field, keep_field_on, response, sizeof(response), &resplen); - if (res) - return res; + res = exchange_14b_apdu(aREAD_NDEF, aREAD_NDEF_n, activate_field, keep_field_on, response, sizeof(response), &resplen); + if (res) { + goto out; + } sw = get_sw(response, resplen); if (sw != 0x9000) { PrintAndLogEx(ERR, "reading NDEF file failed (%04x - %s).", sw, GetAPDUCodeDescription(sw >> 8, sw & 0xff)); - return PM3_ESOFT; + res = PM3_ESOFT; + goto out; } - return NDEFRecordsDecodeAndPrint(response + 2, resplen - 4); + res = NDEFRecordsDecodeAndPrint(response + 2, resplen - 4); + +out: + switch_off_field_14b(); + return res; } static command_t CommandTable[] = { From c048e5cf13acd198c960de1b205b3fcdc535f160 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 30 Sep 2020 19:48:53 +0200 Subject: [PATCH 0718/1047] hf 14b ndef - convert to cliparse --- client/src/cmdhf14b.c | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/client/src/cmdhf14b.c b/client/src/cmdhf14b.c index 7fdff6c8c..6ae6ac15a 100644 --- a/client/src/cmdhf14b.c +++ b/client/src/cmdhf14b.c @@ -125,15 +125,6 @@ static int usage_hf_14b_dump(void) { ); return PM3_SUCCESS; } -static int usage_hf_14b_ndef(void) { - PrintAndLogEx(NORMAL, "\n Print NFC Data Exchange Format (NDEF)\n"); - PrintAndLogEx(NORMAL, "Usage: hf 14b ndef [h]"); - PrintAndLogEx(NORMAL, "Options:"); - PrintAndLogEx(NORMAL, " h : This help"); - PrintAndLogEx(NORMAL, "Examples:"); - PrintAndLogEx(NORMAL, _YELLOW_(" hf 14b ndef")); - return PM3_SUCCESS; -} static int switch_off_field_14b(void) { clearCommandBuffer(); @@ -1596,8 +1587,18 @@ static int CmdHF14BAPDU(const char *Cmd) { } static int CmdHF14BNdef(const char *Cmd) { - char c = tolower(param_getchar(Cmd, 0)); - if (c == 'h' || c == 0x00) return usage_hf_14b_ndef(); + + CLIParserContext *ctx; + CLIParserInit(&ctx, "hf 14b ndef", + "Print NFC Data Exchange Format (NDEF)", + "hf 14b ndef" + ); + void *argtable[] = { + arg_param_begin, + arg_param_end + }; + CLIExecWithReturn(ctx, Cmd, argtable, true); + CLIParserFree(ctx); bool activate_field = true; bool keep_field_on = true; From 4b8117cdb28f695e018c36869990227365ece71b Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 30 Sep 2020 20:09:27 +0200 Subject: [PATCH 0719/1047] coverity 294394 --- client/src/cmdtrace.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/src/cmdtrace.c b/client/src/cmdtrace.c index 0af9de005..8f6a11949 100644 --- a/client/src/cmdtrace.c +++ b/client/src/cmdtrace.c @@ -203,7 +203,7 @@ static uint16_t printTraceLine(uint16_t tracepos, uint16_t traceLen, uint8_t *tr data_len = hdr->data_len; if (tracepos + TRACELOG_HDR_LEN + data_len + TRACELOG_PARITY_LEN(hdr) > traceLen) { - PrintAndLogEx(DEBUG, "trace pos offset %u larger than reported tracelen %u", tracepos + TRACELOG_HDR_LEN + data_len + TRACELOG_PARITY_LEN(hdr), traceLen); + PrintAndLogEx(DEBUG, "trace pos offset %"PRIu32 " larger than reported tracelen %u", tracepos + TRACELOG_HDR_LEN + data_len + TRACELOG_PARITY_LEN(hdr), traceLen); return traceLen; } From a77ce27a68fbf1ae7f205a2996bb4f9cc0542ab5 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 30 Sep 2020 20:09:50 +0200 Subject: [PATCH 0720/1047] coverity 303144 --- client/src/cmdhf14b.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/src/cmdhf14b.c b/client/src/cmdhf14b.c index 6ae6ac15a..9eca2fc06 100644 --- a/client/src/cmdhf14b.c +++ b/client/src/cmdhf14b.c @@ -1369,7 +1369,7 @@ static int handle_14b_apdu(bool chainingin, uint8_t *datain, int datainlen, bool } // check apdu length - if (rlen == 0 && rlen == 1) { + if (rlen == 0 || rlen == 1) { PrintAndLogEx(ERR, "APDU: Small APDU response. Len=%d", rlen); return PM3_ESOFT; } From 980049270c8d6e6591bd8e34c5fb5f3730d5a347 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 30 Sep 2020 20:14:13 +0200 Subject: [PATCH 0721/1047] coverity 301403 --- client/src/cmdhfwaveshare.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/src/cmdhfwaveshare.c b/client/src/cmdhfwaveshare.c index dd34c046b..6b106dea1 100644 --- a/client/src/cmdhfwaveshare.c +++ b/client/src/cmdhfwaveshare.c @@ -565,7 +565,7 @@ static int transceive_blocking(uint8_t *txBuf, uint16_t txBufLen, uint8_t *rxBuf if (WaitForResponseTimeout(CMD_ACK, &resp, 2000)) { if (resp.oldarg[0] > rxBufLen) { - PrintAndLogEx(WARNING, "Received %u bytes, rxBuf too small (%u)", resp.oldarg[0], rxBufLen); + PrintAndLogEx(WARNING, "Received %"PRIu32 " bytes, rxBuf too small (%u)", resp.oldarg[0], rxBufLen); memcpy(rxBuf, resp.data.asBytes, rxBufLen); *actLen = rxBufLen; return PM3_ESOFT; From e662ee870577abdbbf394ae042d213ba9afeed12 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 30 Sep 2020 20:19:45 +0200 Subject: [PATCH 0722/1047] coverity 294114 --- client/src/cmdlfem4x50.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/client/src/cmdlfem4x50.c b/client/src/cmdlfem4x50.c index 124ffe8c0..630e044ba 100644 --- a/client/src/cmdlfem4x50.c +++ b/client/src/cmdlfem4x50.c @@ -557,6 +557,8 @@ int em4x50_read(em4x50_data_t *etd, em4x50_word_t *out, bool verbose) { int CmdEM4x50Read(const char *Cmd) { em4x50_data_t etd; + memset(&etd, 0x00, sizeof(em4x50_data_t)); + etd.pwd_given = false; etd.addr_given = false; etd.newpwd_given = false; From eda78a3c813368416ec180d2fc765fead88cf0d9 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 1 Oct 2020 00:15:29 +0200 Subject: [PATCH 0723/1047] hf 14a/b raw - unify param --- client/src/cmdhf14a.c | 67 +++++++++++++++++++++---------------------- client/src/cmdhf14b.c | 14 ++++----- 2 files changed, 40 insertions(+), 41 deletions(-) diff --git a/client/src/cmdhf14a.c b/client/src/cmdhf14a.c index 2e222eec1..4044273a7 100644 --- a/client/src/cmdhf14a.c +++ b/client/src/cmdhf14a.c @@ -246,11 +246,11 @@ static int usage_hf_14a_sniff(void) { return PM3_SUCCESS; } static int usage_hf_14a_raw(void) { - PrintAndLogEx(NORMAL, "Usage: hf 14a raw [-h] [-r] [-c] [-p] [-a] [-T] [-t] [-b] <0A 0B 0C ... hex>"); + PrintAndLogEx(NORMAL, "Usage: hf 14a raw [-h] [-r] [-c] [-k] [-a] [-T] [-t] [-b] <0A 0B 0C ... hex>"); PrintAndLogEx(NORMAL, " -h this help"); PrintAndLogEx(NORMAL, " -r do not read response"); PrintAndLogEx(NORMAL, " -c calculate and append CRC"); - PrintAndLogEx(NORMAL, " -p leave the signal field ON after receive"); + PrintAndLogEx(NORMAL, " -k keep signal field ON after receive"); PrintAndLogEx(NORMAL, " -a active signal field ON without select"); PrintAndLogEx(NORMAL, " -s active signal field ON with select"); PrintAndLogEx(NORMAL, " -b number of bits to send. Useful for send partial byte"); @@ -1186,7 +1186,7 @@ static int CmdHF14AAPDU(const char *Cmd) { static int CmdHF14ACmdRaw(const char *Cmd) { bool reply = 1; bool crc = false; - bool power = false; + bool keep_field_on = false; bool active = false; bool active_select = false; bool no_rats = false; @@ -1218,8 +1218,8 @@ static int CmdHF14ACmdRaw(const char *Cmd) { case 'c': crc = true; break; - case 'p': - power = true; + case 'k': + keep_field_on = true; break; case 'a': active = true; @@ -1306,7 +1306,7 @@ static int CmdHF14ACmdRaw(const char *Cmd) { argtimeout = 13560000 / 1000 / (8 * 16) * timeout; // timeout in ETUs (time to transfer 1 bit, approx. 9.4 us) } - if (power) { + if (keep_field_on) { flags |= ISO14A_NO_DISCONNECT; } @@ -1423,38 +1423,10 @@ static int CmdHF14AChaining(const char *Cmd) { return 0; } -static command_t CommandTable[] = { - {"help", CmdHelp, AlwaysAvailable, "This help"}, - {"list", CmdHF14AList, AlwaysAvailable, "List ISO 14443-a history"}, - {"info", CmdHF14AInfo, IfPm3Iso14443a, "Tag information"}, - {"reader", CmdHF14AReader, IfPm3Iso14443a, "Act like an ISO14443-a reader"}, - {"cuids", CmdHF14ACUIDs, IfPm3Iso14443a, " Collect n>0 ISO14443-a UIDs in one go"}, - {"sim", CmdHF14ASim, IfPm3Iso14443a, " -- Simulate ISO 14443-a tag"}, - {"sniff", CmdHF14ASniff, IfPm3Iso14443a, "sniff ISO 14443-a traffic"}, - {"apdu", CmdHF14AAPDU, IfPm3Iso14443a, "Send ISO 14443-4 APDU to tag"}, - {"chaining", CmdHF14AChaining, IfPm3Iso14443a, "Control ISO 14443-4 input chaining"}, - {"raw", CmdHF14ACmdRaw, IfPm3Iso14443a, "Send raw hex data to tag"}, - {"antifuzz", CmdHF14AAntiFuzz, IfPm3Iso14443a, "Fuzzing the anticollision phase. Warning! Readers may react strange"}, - {"config", CmdHf14AConfig, IfPm3Iso14443a, "Configure 14a settings (use with caution)"}, - {NULL, NULL, NULL, NULL} -}; - -static int CmdHelp(const char *Cmd) { - (void)Cmd; // Cmd is not used so far - CmdsHelp(CommandTable); - return PM3_SUCCESS; -} - -int CmdHF14A(const char *Cmd) { - clearCommandBuffer(); - return CmdsParse(CommandTable, Cmd); -} - static void printTag(const char *tag) { PrintAndLogEx(SUCCESS, " " _YELLOW_("%s"), tag); } - typedef enum { MTNONE = 0, MTCLASSIC = 1, @@ -2030,3 +2002,30 @@ int infoHF14A(bool verbose, bool do_nack_test, bool do_aid_search) { DropField(); return select_status; } + +static command_t CommandTable[] = { + {"help", CmdHelp, AlwaysAvailable, "This help"}, + {"list", CmdHF14AList, AlwaysAvailable, "List ISO 14443-a history"}, + {"info", CmdHF14AInfo, IfPm3Iso14443a, "Tag information"}, + {"reader", CmdHF14AReader, IfPm3Iso14443a, "Act like an ISO14443-a reader"}, + {"cuids", CmdHF14ACUIDs, IfPm3Iso14443a, " Collect n>0 ISO14443-a UIDs in one go"}, + {"sim", CmdHF14ASim, IfPm3Iso14443a, " -- Simulate ISO 14443-a tag"}, + {"sniff", CmdHF14ASniff, IfPm3Iso14443a, "sniff ISO 14443-a traffic"}, + {"apdu", CmdHF14AAPDU, IfPm3Iso14443a, "Send ISO 14443-4 APDU to tag"}, + {"chaining", CmdHF14AChaining, IfPm3Iso14443a, "Control ISO 14443-4 input chaining"}, + {"raw", CmdHF14ACmdRaw, IfPm3Iso14443a, "Send raw hex data to tag"}, + {"antifuzz", CmdHF14AAntiFuzz, IfPm3Iso14443a, "Fuzzing the anticollision phase. Warning! Readers may react strange"}, + {"config", CmdHf14AConfig, IfPm3Iso14443a, "Configure 14a settings (use with caution)"}, + {NULL, NULL, NULL, NULL} +}; + +static int CmdHelp(const char *Cmd) { + (void)Cmd; // Cmd is not used so far + CmdsHelp(CommandTable); + return PM3_SUCCESS; +} + +int CmdHF14A(const char *Cmd) { + clearCommandBuffer(); + return CmdsParse(CommandTable, Cmd); +} diff --git a/client/src/cmdhf14b.c b/client/src/cmdhf14b.c index 9eca2fc06..ac30276e3 100644 --- a/client/src/cmdhf14b.c +++ b/client/src/cmdhf14b.c @@ -52,17 +52,17 @@ static int usage_hf_14b_reader(void) { return PM3_SUCCESS; } static int usage_hf_14b_raw(void) { - PrintAndLogEx(NORMAL, "Usage: hf 14b raw [-h] [-r] [-c] [-p] [-s / -ss] [-t] <0A 0B 0C ... hex>"); + PrintAndLogEx(NORMAL, "Usage: hf 14b raw [-h] [-r] [-c] [-k] [-s / -ss] [-t] <0A 0B 0C ... hex>"); PrintAndLogEx(NORMAL, "Options:"); PrintAndLogEx(NORMAL, " -h this help"); PrintAndLogEx(NORMAL, " -r do not read response"); PrintAndLogEx(NORMAL, " -c calculate and append CRC"); - PrintAndLogEx(NORMAL, " -p leave the field on after receive"); + PrintAndLogEx(NORMAL, " -k keep signal field ON after receive"); PrintAndLogEx(NORMAL, " -s active signal field ON with select"); PrintAndLogEx(NORMAL, " -ss active signal field ON with select for SRx ST Microelectronics tags"); PrintAndLogEx(NORMAL, " -t timeout in ms"); PrintAndLogEx(NORMAL, "Example:"); - PrintAndLogEx(NORMAL, _YELLOW_(" hf 14b raw -s -c -p 0200a40400")); + PrintAndLogEx(NORMAL, _YELLOW_(" hf 14b raw -s -c -k 0200a40400")); return PM3_SUCCESS; } static int usage_hf_14b_sniff(void) { @@ -203,7 +203,7 @@ static int CmdHF14BSniff(const char *Cmd) { } static int CmdHF14BCmdRaw(const char *Cmd) { - bool reply = true, power = false, select = false, hasTimeout = false; + bool reply = true, keep_field_on = false, select = false, hasTimeout = false; char buf[5] = ""; int i = 0; uint8_t data[PM3_CMD_DATA_SIZE] = {0x00}; @@ -228,8 +228,8 @@ static int CmdHF14BCmdRaw(const char *Cmd) { case 'c': flags |= ISO14B_APPEND_CRC; break; - case 'p': - power = true; + case 'k': + keep_field_on = true; break; case 's': select = true; @@ -283,7 +283,7 @@ static int CmdHF14BCmdRaw(const char *Cmd) { time_wait = 13560000 / 1000 / (8 * 16) * user_timeout; // timeout in ETUs (time to transfer 1 bit, approx. 9.4 us) } - if (power == 0) + if (keep_field_on == 0) flags |= ISO14B_DISCONNECT; if (datalen > 0) From 46e6ba5dede666ee263d0b9f5467e0c3b7bf43bb Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 1 Oct 2020 00:26:18 +0200 Subject: [PATCH 0724/1047] -p refs - unify param --- client/src/cmdhf14b.c | 4 ++-- client/src/cmdhffelica.c | 12 ++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/client/src/cmdhf14b.c b/client/src/cmdhf14b.c index ac30276e3..ebb865d06 100644 --- a/client/src/cmdhf14b.c +++ b/client/src/cmdhf14b.c @@ -926,10 +926,10 @@ static int CmdHF14BReadSri(const char *Cmd) { static int CmdHF14BWriteSri(const char *Cmd) { /* * For SRIX4K blocks 00 - 7F - * hf 14b raw -c -p 09 $srix4kwblock $srix4kwdata + * hf 14b raw -c -k 09 $srix4kwblock $srix4kwdata * * For SR512 blocks 00 - 0F - * hf 14b raw -c -p 09 $sr512wblock $sr512wdata + * hf 14b raw -c -k 09 $sr512wblock $sr512wdata * * Special block FF = otp_lock_reg block. * Data len 4 bytes- diff --git a/client/src/cmdhffelica.c b/client/src/cmdhffelica.c index 9e48f1577..fde071419 100644 --- a/client/src/cmdhffelica.c +++ b/client/src/cmdhffelica.c @@ -84,11 +84,11 @@ static int usage_hf_felica_dumplite(void) { } static int usage_hf_felica_raw(void) { - PrintAndLogEx(NORMAL, "Usage: hf felica raw [-h] [-r] [-c] [-p] [-a] <0A 0B 0C ... hex>"); + PrintAndLogEx(NORMAL, "Usage: hf felica raw [-h] [-r] [-c] [-k] [-a] <0A 0B 0C ... hex>"); PrintAndLogEx(NORMAL, " -h this help"); PrintAndLogEx(NORMAL, " -r do not read response"); PrintAndLogEx(NORMAL, " -c calculate and append CRC"); - PrintAndLogEx(NORMAL, " -p leave the signal field ON after receive"); + PrintAndLogEx(NORMAL, " -k keep signal field ON after receive"); PrintAndLogEx(NORMAL, " -a active signal field ON without select"); PrintAndLogEx(NORMAL, " -s active signal field ON with select"); return PM3_SUCCESS; @@ -1687,7 +1687,7 @@ static int CmdHFFelicaDumpLite(const char *Cmd) { static int CmdHFFelicaCmdRaw(const char *Cmd) { bool reply = 1; bool crc = false; - bool power = false; + bool keep_field_on = false; bool active = false; bool active_select = false; uint16_t numbits = 0; @@ -1714,8 +1714,8 @@ static int CmdHFFelicaCmdRaw(const char *Cmd) { case 'c': crc = true; break; - case 'p': - power = true; + case 'k': + keep_field_on = true; break; case 'a': active = true; @@ -1771,7 +1771,7 @@ static int CmdHFFelicaCmdRaw(const char *Cmd) { flags |= FELICA_NO_SELECT; } - if (power) { + if (keep_field_on) { flags |= FELICA_NO_DISCONNECT; } From beadecf7eb0a2ec5635fbb8bf0eb89279e1bfe44 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Thu, 1 Oct 2020 00:29:24 +0200 Subject: [PATCH 0725/1047] -p refs - unify param --- client/luascripts/hf_14a_raw.lua | 12 ++++++------ client/luascripts/hf_14a_read-ltocm.lua | 8 ++++---- client/luascripts/hf_mf_magicrevive.lua | 20 ++++++++++---------- client/luascripts/hf_mfu_setuid.lua | 20 ++++++++++---------- doc/magic_cards_notes.md | 18 +++++++++--------- 5 files changed, 39 insertions(+), 39 deletions(-) diff --git a/client/luascripts/hf_14a_raw.lua b/client/luascripts/hf_14a_raw.lua index 35d2cff87..1d087a1c4 100644 --- a/client/luascripts/hf_14a_raw.lua +++ b/client/luascripts/hf_14a_raw.lua @@ -11,10 +11,10 @@ This is a script to allow raw 14443a commands to be sent and received. ]] example = [[ # 1. Connect and don't disconnect - script run hf_14a_raw -p + script run hf_14a_raw -k # 2. Send mf auth, read response (nonce) - script run hf_14a_raw -o -x 6000F57b -p + script run hf_14a_raw -o -x 6000F57b -k # 3. disconnect script run hf_14a_raw -o @@ -26,10 +26,10 @@ usage = [[ script run hf_14a_raw -x 6000F57b ]] arguments = [[ - -o do not connect - use this only if you previously used -p to stay connected + -o do not connect - use this only if you previously used -k to stay connected -r do not read response -c calculate and append CRC - -p stay connected - dont inactivate the field + -k stay connected - dont inactivate the field -x Data to send (NO SPACES!) -d Debug flag -t Topaz mode @@ -187,8 +187,8 @@ function selftest() DEBUG = true dbg('Performing test') main() - main('-p') - main(' -o -x 6000F57b -p') + main('-k') + main(' -o -x 6000F57b -k') main('-o') main('-x 6000F57b') dbg('Tests done') diff --git a/client/luascripts/hf_14a_read-ltocm.lua b/client/luascripts/hf_14a_read-ltocm.lua index f88cd2c67..362868177 100644 --- a/client/luascripts/hf_14a_read-ltocm.lua +++ b/client/luascripts/hf_14a_read-ltocm.lua @@ -135,13 +135,13 @@ function main(args) end -- Original loop --- core.console("hf 14a raw -a -p -b 7 45") --- local cmd_select = string.format("hf 14a raw -c -p 9370%s", serial_number) +-- core.console("hf 14a raw -a -k -b 7 45") +-- local cmd_select = string.format("hf 14a raw -c -k 9370%s", serial_number) -- core.console(cmd_select) -- for i = 0, 254 do --- local cmd_rd_blk = string.format("hf 14a raw -c -p 30 %02x", i) +-- local cmd_rd_blk = string.format("hf 14a raw -c -k 30 %02x", i) -- core.console(cmd_rd_blk) --- core.console("hf 14a raw -p 80") +-- core.console("hf 14a raw -k 80") -- end -- core.console("hf 14a raw -r") diff --git a/client/luascripts/hf_mf_magicrevive.lua b/client/luascripts/hf_mf_magicrevive.lua index abbb45576..9354b0f96 100644 --- a/client/luascripts/hf_mf_magicrevive.lua +++ b/client/luascripts/hf_mf_magicrevive.lua @@ -59,24 +59,24 @@ end local function cmdUltralight() return { - [0] = 'hf 14a raw -p -a -b 7 40', - [1] = 'hf 14a raw -p -a 43', + [0] = 'hf 14a raw -k -a -b 7 40', + [1] = 'hf 14a raw -k -a 43', [2] = 'hf 14a raw -c -a A2005380712A', - [3] = 'hf 14a raw -p -a -b 7 40', - [4] = 'hf 14a raw -p -a 43', + [3] = 'hf 14a raw -k -a -b 7 40', + [4] = 'hf 14a raw -k -a 43', [5] = 'hf 14a raw -c -a A2010200D980', - [6] = 'hf 14a raw -p -a -b 7 40', - [7] = 'hf 14a raw -p -a 43', + [6] = 'hf 14a raw -k -a -b 7 40', + [7] = 'hf 14a raw -k -a 43', [8] = 'hf 14a raw -c -a A2025B480000', [9] = 'hf 14a raw -c -a 5000', } end local function cmdClassic() return { - [0] = 'hf 14a raw -p -a -b 7 40', - [1] = 'hf 14a raw -p -a 43', - [2] = 'hf 14a raw -c -p -a A000', - [3] = 'hf 14a raw -c -p -a 01020304049802000000000000001001', + [0] = 'hf 14a raw -k -a -b 7 40', + [1] = 'hf 14a raw -k -a 43', + [2] = 'hf 14a raw -c -k -a A000', + [3] = 'hf 14a raw -c -k -a 01020304049802000000000000001001', [4] = 'hf 14a raw -c -a 5000', } end diff --git a/client/luascripts/hf_mfu_setuid.lua b/client/luascripts/hf_mfu_setuid.lua index 6b161b054..86bef09c3 100644 --- a/client/luascripts/hf_mfu_setuid.lua +++ b/client/luascripts/hf_mfu_setuid.lua @@ -70,18 +70,18 @@ function magicUID(b0, b1, b2) print('Using backdoor Magic tag function') -- write block 0 - core.console('hf 14a raw -p -a -b 7 40') - core.console('hf 14a raw -p -a 43') + core.console('hf 14a raw -k -a -b 7 40') + core.console('hf 14a raw -k -a 43') core.console('hf 14a raw -c -a A200'..b0) -- write block 1 - core.console('hf 14a raw -p -a -b 7 40') - core.console('hf 14a raw -p -a 43') + core.console('hf 14a raw -k -a -b 7 40') + core.console('hf 14a raw -k -a 43') core.console('hf 14a raw -c -a A201'..b1) -- write block 2 - core.console('hf 14a raw -p -a -b 7 40') - core.console('hf 14a raw -p -a 43') + core.console('hf 14a raw -k -a -b 7 40') + core.console('hf 14a raw -k -a 43') core.console('hf 14a raw -c -a A202'..b2) end -- @@ -90,16 +90,16 @@ function brickableUID(b0, b1, b2) print('Using BRICKABLE Magic tag function') - core.console('hf 14a raw -p -s -3') + core.console('hf 14a raw -k -s -3') -- write block 0 - core.console('hf 14a raw -p -c A200'..b0) + core.console('hf 14a raw -k -c A200'..b0) -- write block 1 - core.console('hf 14a raw -p -c A201'..b1) + core.console('hf 14a raw -k -c A201'..b1) -- write block 2 - core.console('hf 14a raw -p -c A202'..b2) + core.console('hf 14a raw -k -c A202'..b2) end --- -- The main entry point diff --git a/doc/magic_cards_notes.md b/doc/magic_cards_notes.md index 9f95bef5e..9b71e52c0 100644 --- a/doc/magic_cards_notes.md +++ b/doc/magic_cards_notes.md @@ -200,14 +200,14 @@ script run run hf_mf_magicrevive To execute commands manually: ``` -hf 14a raw -a -p -b 7 40 -hf 14a raw -p 43 -hf 14a raw -p -c A000 +hf 14a raw -a -k -b 7 40 +hf 14a raw -k 43 +hf 14a raw -k -c A000 hf 14a raw -c -t 1000 11223344440804006263646566676869 ``` wipe: ``` -hf 14a raw -a -p -b 7 40 +hf 14a raw -a -k -b 7 40 hf 14a raw -t 1000 41 ``` @@ -383,9 +383,9 @@ Same as MIFARE Classic DirectWrite, but block0 can be locked with special comman To lock definitively block0: ``` -hf 14a raw -a -p -b 7 40 -hf 14a raw -p 43 -hf 14a raw -p -c e000 +hf 14a raw -a -k -b 7 40 +hf 14a raw -k 43 +hf 14a raw -k -c e000 hf 14a raw -c 85000000000000000000000000000008 ``` @@ -581,8 +581,8 @@ hf mfu setuid Equivalent: don't use `hf mfu wrbl` as you need to write three blocks in a row, but do, with proper BCCx: ``` -hf 14a raw -s -c -p a2 00 041122bf -hf 14a raw -c -p a2 01 33445566 +hf 14a raw -s -c -k a2 00 041122bf +hf 14a raw -c -k a2 01 33445566 hf 14a raw -c a2 02 44480000 ``` From 6fc3b9a4a775863ae005233aad50bc5685125b67 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 1 Oct 2020 00:31:27 +0200 Subject: [PATCH 0726/1047] -p refs - unify param --- client/src/cmdhf15.c | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/client/src/cmdhf15.c b/client/src/cmdhf15.c index ca08b575b..cbef47554 100644 --- a/client/src/cmdhf15.c +++ b/client/src/cmdhf15.c @@ -315,10 +315,10 @@ static int usage_15_raw(void) { {"-r", "do not read response" }, {"-2", "use slower '1 out of 256' mode" }, {"-c", "calculate and append CRC" }, - {"-p", "leave the signal field ON" }, + {"-k", "keep signal field ON after receive" }, {"", "Tip: turn on debugging for verbose output"}, }; - PrintAndLogEx(NORMAL, "Usage: hf 15 raw [-r] [-2] [-c] <0A 0B 0C ... hex>\n"); + PrintAndLogEx(NORMAL, "Usage: hf 15 raw [-r] [-2] [-k] [-c] <0A 0B 0C ... hex>\n"); PrintAndLogOptions(options, 4, 3); return PM3_SUCCESS; } @@ -1353,7 +1353,7 @@ static int CmdHF15Raw(const char *Cmd) { if (strlen(Cmd) < 3 || cmdp == 'h') return usage_15_raw(); int reply = 1, fast = 1, i = 0; - bool crc = false, leaveSignalON = false; + bool crc = false, keep_field_on = false; char buf[5] = ""; uint8_t data[100]; uint32_t datalen = 0, temp; @@ -1364,21 +1364,18 @@ static int CmdHF15Raw(const char *Cmd) { while (Cmd[i] != '\0') { if (Cmd[i] == ' ' || Cmd[i] == '\t') { i++; continue; } if (Cmd[i] == '-') { - switch (Cmd[i + 1]) { + switch (tolower(Cmd[i + 1])) { case 'r': - case 'R': reply = 0; break; case '2': fast = 0; break; case 'c': - case 'C': crc = true; break; - case 'p': - case 'P': - leaveSignalON = true; + case 'k': + keep_field_on = true; break; default: PrintAndLogEx(WARNING, "Invalid option"); @@ -1429,7 +1426,7 @@ static int CmdHF15Raw(const char *Cmd) { } } - if (leaveSignalON == false) + if (keep_field_on == false) DropField(); return PM3_SUCCESS; From 5e91f35cd63f1666088741dce92c9d3cc8b17b97 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 1 Oct 2020 00:37:37 +0200 Subject: [PATCH 0727/1047] make sure tosend is not contain spurious bits from before --- armsrc/iso14443b.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/armsrc/iso14443b.c b/armsrc/iso14443b.c index ece5edfd3..57699af62 100644 --- a/armsrc/iso14443b.c +++ b/armsrc/iso14443b.c @@ -906,7 +906,7 @@ static int Get14443bAnswerFromTag(uint8_t *response, uint16_t max_len, int timeo Demod14bInit(response, max_len); // Setup and start DMA. - FpgaSetupSsc(FPGA_MAJOR_MODE_HF_READER); + //FpgaSetupSsc(FPGA_MAJOR_MODE_HF_READER); // The DMA buffer, used to stream samples from the FPGA dmabuf16_t *dma = get_dma16(); @@ -1105,6 +1105,7 @@ static void CodeIso14443bAsReader(const uint8_t *cmd, int len) { // EGT extra guard time 1 ETU = 9us // For PCD it ranges 0-57us === 0 - 6 ETU // FOR PICC it ranges 0-19us == 0 - 2 ETU + } // Send EOF @@ -1120,13 +1121,10 @@ static void CodeIso14443bAsReader(const uint8_t *cmd, int len) { * TR0 - FWT for all other commands * 32,64,128,256,512, ... , 262144, 524288 ETU */ + int pad = (12 + (len * 10) + 11) & 0x7; - for (i = 0; i < 8 ; ++i) + for (i = 0; i < 16 - pad; ++i) tosend_stuffbit(1); - - // Convert from last character reference to length - tosend_t *ts = get_tosend(); - ts->max++; } /* From 6953570c2ef8244c09ce120d9afb596cb739f657 Mon Sep 17 00:00:00 2001 From: mwalker33 Date: Thu, 1 Oct 2020 11:53:05 +1000 Subject: [PATCH 0728/1047] Create cliparser.md Draft cliparser notes/guide --- doc/cliparser.md | 114 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 doc/cliparser.md diff --git a/doc/cliparser.md b/doc/cliparser.md new file mode 100644 index 000000000..83002dda4 --- /dev/null +++ b/doc/cliparser.md @@ -0,0 +1,114 @@ +# cliparser - proxmark3-rrg + +## cliparser setup and use + +*** Draft notes - needs work *** + +Note: the parser will format and color and layout as needed. + +## common options +where possiable all options should be lowercase. +extended options preceeded with -- should be short +options provided directly (without an option identifier) should be avoided. +-vv for extra verbos should be avoided; use of debug level is prefered. +whith --options the equle is not needed (will work with and without) so dont use '=' +e.g. cmd --cn 12345 + + -h --help : help + --cn : card number + --fn : facility number + --q5 : target is lf q5 card + --raw : raw data + -k --key : key supplied + -n --keyno : key number to use + -v --verbose : flag when output should provide more information, not conidered debug. + -1 --buffer : use the sample buffer + +### setup the parser data structure +Header file to include + + #include "cliparser.h" + +In the command function, setup the context + + CLIParserContext *ctx; + + +### define the text +CLIParserInit (\, \, \); + +use -> to seperate example and example comment and \\n to seperate examples. +e.g. lf indala clone -r a0000000a0002021 -> this uses ..... + + CLIParserInit(&ctx, "lf indala clone", + "clone INDALA UID to T55x7 or Q5/T5555 tag", + "lf indala clone --heden 888\n" + "lf indala clone --fc 123 --cn 1337\n" + "lf indala clone -r a0000000a0002021\n" + "lf indala clone -l -r 80000001b23523a6c2e31eba3cbee4afb3c6ad1fcf649393928c14e5"); + +### define the options + + void *argtable[] = { + arg_param_begin, + arg_lit0("l", "long", "optional - long UID 224 bits"), + arg_int0("c", "heden", "", "Cardnumber for Heden 2L format"), + arg_strx0("r", "raw", "", "raw bytes"), + arg_lit0("q", "Q5", "optional - specify writing to Q5/T5555 tag"), + arg_int0(NULL, "fc", "", "Facility Code (26 bit format)"), + arg_int0(NULL, "cn", "", "Cardnumber (26 bit format)"), + arg_param_end + }; + +**Notes:** +booleen : arg_lit0 ("\", "\", \["\",\] \<"description"\>); +optional integer : arg_int0 ("\", "\", \["\",\] \<"description"\>); +required integer : arg_int1 ("\", "\", \["\",\] \<"description"\>); +optional string : arg_strx0 ("\", "\", \["\",\] \<"description"\>); +required string : arg_strx1 ("\", "\", \["\",\] \<"description"\>); + +** if an option does not have a short or long option, use NULL in its place. ** + +### show the menu +CLIExecWithReturn(\, \, \, \); + + CLIExecWithReturn(ctx, Cmd, argtable, false); + +### clean up +Once you have extracted the options, cleanup the context. + + CLIParserFree(ctx); + +### retreiving options +**bool option** +arg_get_lit(\, \); + + is_long_uid = arg_get_lit(ctx, 1); + +**int option** +arg_get_int_def(\, \, \); + + cardnumber = arg_get_int_def(ctx, 2, -1); + +**hex option** +CLIGetHexWithReturn(\, \, \, \); + ?? as an array of uint_8 ?? + + uint8_t aid[2] = {0}; + int aidlen; + CLIGetHexWithReturn(ctx, 2, aid, &aidlen); + +**hex option returning ???** + + uint8_t key[24] = {0}; + int keylen = 0; + int res_klen = CLIParamHexToBuf(arg_get_str(ctx, 3), key, 24, &keylen); + quick test : seems res_keylen == 0 when ok so not key len ??? + +**string option** +CLIGetStrWithReturn(\,\, \, \); + + uint8_t Buffer[100]; + int BufLen; + CLIGetStrWithReturn(ctx,7, Buffer, &BufLen); + From cda0e88be11959b9e02cd16ffe7db5195cc0a194 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 1 Oct 2020 08:04:47 +0200 Subject: [PATCH 0729/1047] textual --- CHANGELOG.md | 1 + README.md | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 61f3e89b2..9cd0f8b2f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ All notable changes to this project will be documented in this file. This project uses the changelog in accordance with [keepchangelog](http://keepachangelog.com/). Please use this to write notable changes, which is not the same as git commit log... ## [unreleased][unreleased] + - Add doc/cliparser.md (@mwalker33) - Add `hf 14b apdu` - send APDU over ISO14443B (@iceman1001) - Add `lf t55xx chk e option` - Checks calculated password based on the EM4100 id from some white cloners forumla by paleopterix (@mwalker33) - Add `lf t55xx sniff` to allow extracting commands and passwords used be cloners. (@mwalker33) diff --git a/README.md b/README.md index ac4ab1f6d..8fb77dc14 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,7 @@ |[Notes on file formats used with Proxmark3](/doc/extensions_notes.md)|[Notes on MFU binary format](/doc/mfu_binary_format_notes.md)|[Notes on FPGA & ARM](/doc/fpga_arm_notes.md)| |[Developing standalone mode](/armsrc/Standalone/readme.md)|[Wiki about standalone mode](https://github.com/RfidResearchGroup/proxmark3/wiki/Standalone-mode)|[Notes on Magic cards](/doc/magic_cards_notes.md)| |[Notes on Color usage](/doc/colors_notes.md)|[Makefile vs CMake](/doc/md/Development/Makefile-vs-CMake.md)|[Notes on Cloner guns](/doc/cloner_notes.md)| - +|[Notes on cliparser usage](/doc/cliparser.md)||| ## Build for non-RDV4 Proxmark3 platforms From f56cbc82f53cb46e52fddeaf0be7ede078e93697 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Thu, 1 Oct 2020 02:14:49 +0200 Subject: [PATCH 0730/1047] Add support for 14b' aka Innovatron in armsrc/iso14443b.c --- CHANGELOG.md | 1 + armsrc/iso14443b.c | 123 +++++++++++++++++++++++++-------------------- 2 files changed, 69 insertions(+), 55 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9cd0f8b2f..7e5f00a78 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ All notable changes to this project will be documented in this file. This project uses the changelog in accordance with [keepchangelog](http://keepachangelog.com/). Please use this to write notable changes, which is not the same as git commit log... ## [unreleased][unreleased] + - Add low level support for 14b' aka Innovatron (@doegox) - Add doc/cliparser.md (@mwalker33) - Add `hf 14b apdu` - send APDU over ISO14443B (@iceman1001) - Add `lf t55xx chk e option` - Checks calculated password based on the EM4100 id from some white cloners forumla by paleopterix (@mwalker33) diff --git a/armsrc/iso14443b.c b/armsrc/iso14443b.c index 57699af62..c3e1a58d5 100644 --- a/armsrc/iso14443b.c +++ b/armsrc/iso14443b.c @@ -274,8 +274,7 @@ static struct { enum { DEMOD_UNSYNCD, DEMOD_PHASE_REF_TRAINING, - DEMOD_AWAITING_FALLING_EDGE_OF_SOF, - DEMOD_GOT_FALLING_EDGE_OF_SOF, + WAIT_FOR_RISING_EDGE_OF_SOF, DEMOD_AWAITING_START_BIT, DEMOD_RECEIVING_DATA } state; @@ -724,6 +723,13 @@ void SimulateIso14443bTag(uint32_t pupi) { // tag's response, which we leave in the buffer to be demodulated on the // PC side. //============================================================================= +// We support both 14b framing and 14b' framing. +// 14b framing looks like: +// xxxxxxxx1111111111111111-000000000011-0........1-0........1-0........1-1-0........1-0........1-1000000000011xxxxxx +// TR1 SOF 10*0+2*1 start-stop ^^^^^^^^byte ^ occasional stuff bit EOF 10*0+N*1 +// 14b' framing looks like: +// xxxxxxxxxxxxxxxx111111111111111111111-0........1-0........1-0........1-1-0........1-0........1-000000000000xxxxxxx +// SOF? start-stop ^^^^^^^^byte ^ occasional stuff bit EOF /* * Handles reception of a bit from the tag @@ -774,57 +780,33 @@ static RAMFUNC int Handle14443bSamplesFromTag(int ci, int cq) { break; } case DEMOD_PHASE_REF_TRAINING: { - if (Demod.posCount < 8) { - if (AMPLITUDE(ci, cq) > SUBCARRIER_DETECT_THRESHOLD) { - // set the reference phase (will code a logic '1') by averaging over 32 1/fs. - // note: synchronization time > 80 1/fs - Demod.sumI += ci; - Demod.sumQ += cq; - Demod.posCount++; + // While we get a constant signal + if (AMPLITUDE(ci, cq) > SUBCARRIER_DETECT_THRESHOLD) { + if (((ABS(Demod.sumI) > ABS(Demod.sumQ)) && (((ci > 0) && (Demod.sumI > 0)) || ((ci < 0) && (Demod.sumI < 0)))) || // signal closer to horizontal, polarity check based on on I + ((ABS(Demod.sumI) <= ABS(Demod.sumQ)) && (((cq > 0) && (Demod.sumQ > 0)) || ((cq < 0) && (Demod.sumQ < 0))))) { // signal closer to vertical, polarity check based on on Q + if (Demod.posCount < 10) { // refine signal approximation during first 10 samples + Demod.sumI += ci; + Demod.sumQ += cq; + } + Demod.posCount += 1; } else { - // subcarrier lost - Demod.state = DEMOD_UNSYNCD; + // transition + if (Demod.posCount < 10) { + // subcarrier lost + Demod.state = DEMOD_UNSYNCD; + break; + } else { + // at this point it can be start of 14b' data or start of 14b SOF + MAKE_SOFT_DECISION(); + Demod.posCount = 1; // this was the first half + Demod.thisBit = v; + Demod.shiftReg = 0; + Demod.state = DEMOD_RECEIVING_DATA; + } } } else { - Demod.state = DEMOD_AWAITING_FALLING_EDGE_OF_SOF; - } - break; - } - case DEMOD_AWAITING_FALLING_EDGE_OF_SOF: { - - MAKE_SOFT_DECISION(); - - if (v < 0) { // logic '0' detected - Demod.state = DEMOD_GOT_FALLING_EDGE_OF_SOF; - Demod.posCount = 0; // start of SOF sequence - } else { - if (Demod.posCount > 200/4) { // maximum length of TR1 = 200 1/fs - Demod.state = DEMOD_UNSYNCD; - } - } - Demod.posCount++; - break; - } - case DEMOD_GOT_FALLING_EDGE_OF_SOF: { - - Demod.posCount++; - MAKE_SOFT_DECISION(); - - if (v > 0) { - if (Demod.posCount < 9 * 2) { // low phase of SOF too short (< 9 etu). Note: spec is >= 10, but FPGA tends to "smear" edges - Demod.state = DEMOD_UNSYNCD; - } else { - LED_C_ON(); // Got SOF - Demod.posCount = 0; - Demod.bitCount = 0; - Demod.len = 0; - Demod.state = DEMOD_AWAITING_START_BIT; - } - } else { - if (Demod.posCount > 12 * 2) { // low phase of SOF too long (> 12 etu) - Demod.state = DEMOD_UNSYNCD; - LED_C_OFF(); - } + // subcarrier lost + Demod.state = DEMOD_UNSYNCD; } break; } @@ -848,6 +830,28 @@ static RAMFUNC int Handle14443bSamplesFromTag(int ci, int cq) { } break; } + case WAIT_FOR_RISING_EDGE_OF_SOF: { + + Demod.posCount++; + MAKE_SOFT_DECISION(); + if (v > 0) { + if (Demod.posCount < 9 * 2) { // low phase of SOF too short (< 9 etu). Note: spec is >= 10, but FPGA tends to "smear" edges + Demod.state = DEMOD_UNSYNCD; + } else { + LED_C_ON(); // Got SOF + Demod.posCount = 0; + Demod.bitCount = 0; + Demod.len = 0; + Demod.state = DEMOD_AWAITING_START_BIT; + } + } else { + if (Demod.posCount > 12 * 2) { // low phase of SOF too long (> 12 etu) + Demod.state = DEMOD_UNSYNCD; + LED_C_OFF(); + } + } + break; + } case DEMOD_RECEIVING_DATA: { MAKE_SOFT_DECISION(); @@ -874,11 +878,20 @@ static RAMFUNC int Handle14443bSamplesFromTag(int ci, int cq) { Demod.bitCount = 0; Demod.state = DEMOD_AWAITING_START_BIT; } else { - Demod.state = DEMOD_AWAITING_FALLING_EDGE_OF_SOF; - LED_C_OFF(); if (s == 0x000) { - // This is EOF (start, stop and all data bits == '0' - return true; + if (Demod.len > 0) { + LED_C_OFF(); + // This is EOF (start, stop and all data bits == '0' + return true; + } else { + // Zeroes but no data acquired yet? + // => Still in SOF of 14b, wait for raising edge + Demod.posCount = 10 * 2; + Demod.bitCount = 0; + Demod.len = 0; + Demod.state = WAIT_FOR_RISING_EDGE_OF_SOF; + break; + } } } } @@ -1692,7 +1705,7 @@ void SniffIso14443b(void) { expect_tag_answer = false; tag_is_active = false; } else { - tag_is_active = (Demod.state > DEMOD_GOT_FALLING_EDGE_OF_SOF); + tag_is_active = (Demod.state > WAIT_FOR_RISING_EDGE_OF_SOF); } } } From a2abfb44ae8520a95dba7be9beba0d4f677a4895 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 1 Oct 2020 23:48:32 +0200 Subject: [PATCH 0731/1047] correction of text --- fpga/fpga_lf.v | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fpga/fpga_lf.v b/fpga/fpga_lf.v index aa79da234..3b37e44f0 100644 --- a/fpga/fpga_lf.v +++ b/fpga/fpga_lf.v @@ -100,7 +100,7 @@ module fpga_lf( lf_ed_threshold = 8bits threshold value. conf_word 12bits - conf_word[7:5] = 3bit major mode. + conf_word[8:6] = 3bit major mode. conf_word[0] = 1bit lf_field conf_word[1] = 1bit lf_ed_toggle_mode conf_word[7:0] = 8bit divisor @@ -110,7 +110,7 @@ module fpga_lf( bit | 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 -----+------------------------------------------- cmd | x x x x -major| x x x +major| x x x opt | x x divi | x x x x x x x x thres| x x x x x x x x From cf3b18605f3430757194141dcd6086f964ad166b Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 1 Oct 2020 23:49:01 +0200 Subject: [PATCH 0732/1047] correction of text --- fpga/fpga_hf.v | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/fpga/fpga_hf.v b/fpga/fpga_hf.v index df3780fc6..add927514 100644 --- a/fpga/fpga_hf.v +++ b/fpga/fpga_hf.v @@ -92,7 +92,8 @@ module fpga_hf( //----------------------------------------------------------------------------- /* - Attempt to write up how its hooked up. Iceman 2020. + Attempt to write up how its hooked up. + / Iceman, 2020 Communication between ARM / FPGA is done inside armsrc/fpgaloader.c see: function FpgaSendCommand() Send 16 bit command / data pair to FPGA @@ -108,8 +109,9 @@ module fpga_hf( bit | 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 -----+------------------------------------------- cmd | x x x x -major| x x x -opt | x x x +major| x x x +opt | x x x x +sub | x x divi | x x x x x x x x thres| x x x x x x x x -----+------------------------------------------- From b1c1433e4573b5d7d196acda00650bf9a5fa9f40 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Fri, 2 Oct 2020 00:58:41 +0200 Subject: [PATCH 0733/1047] 14b: safer handling of corrupted signals --- armsrc/iso14443b.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/armsrc/iso14443b.c b/armsrc/iso14443b.c index c3e1a58d5..be8b820e0 100644 --- a/armsrc/iso14443b.c +++ b/armsrc/iso14443b.c @@ -893,6 +893,16 @@ static RAMFUNC int Handle14443bSamplesFromTag(int ci, int cq) { break; } } + if (AMPLITUDE(ci, cq) < SUBCARRIER_DETECT_THRESHOLD) { + LED_C_OFF(); + // subcarrier lost + Demod.state = DEMOD_UNSYNCD; + if (Demod.len > 0) { // no EOF but no signal anymore and we got data, e.g. ASK CTx + return true; + } + } + // we have still signal but no proper byte or EOF? this shouldn't happen + Demod.state = WAIT_FOR_RISING_EDGE_OF_SOF; } } Demod.posCount = 0; From b3a3828c3ff07ccfe28088c0490c286ce7b2e929 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Fri, 2 Oct 2020 01:18:49 +0200 Subject: [PATCH 0734/1047] add 14b* traces --- traces/README.md | 5 +- traces/hf_14b_raw_010fxxxxxxxx_innovatron.pm3 | 3072 +++++++++++++++++ traces/hf_14b_raw_0600_st_sri512.pm3 | 3072 +++++++++++++++++ traces/hf_14b_raw_10_ask_ctx.pm3 | 3072 +++++++++++++++++ 4 files changed, 9220 insertions(+), 1 deletion(-) create mode 100644 traces/hf_14b_raw_010fxxxxxxxx_innovatron.pm3 create mode 100644 traces/hf_14b_raw_0600_st_sri512.pm3 create mode 100644 traces/hf_14b_raw_10_ask_ctx.pm3 diff --git a/traces/README.md b/traces/README.md index 78675df95..9d0271cc9 100644 --- a/traces/README.md +++ b/traces/README.md @@ -64,7 +64,10 @@ |filename|description| |--------|-----------| -|hf_14b_raw_050008_resp.pm3 |Response to `hf 14b raw -c 050008`| +|hf_14b_raw_050008_resp.pm3 |Response of 14b card to `hf 14b raw -c 050008`| +|hf_14b_raw_0600_st_sri512.pm3 |Response of ST SRI512 to `hf 14b raw -c 0600`| +|hf_14b_raw_10_ask_ctx.pm3 |Response of ASK CTx to `hf 14b raw -c 10`| +|hf_14b_raw_010fxxxxxxxx_innovatron.pm3 |Response of 14b' card to `hf 14b raw -c -k 010fxxxxxxxx`| ## HF sniffed traces diff --git a/traces/hf_14b_raw_010fxxxxxxxx_innovatron.pm3 b/traces/hf_14b_raw_010fxxxxxxxx_innovatron.pm3 new file mode 100644 index 000000000..bd23d1760 --- /dev/null +++ b/traces/hf_14b_raw_010fxxxxxxxx_innovatron.pm3 @@ -0,0 +1,3072 @@ +-113 +-2 +-4 +-5 +-5 +-3 +-4 +-4 +-6 +-5 +-2 +-3 +-4 +-4 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-97 +-71 +-51 +-36 +-26 +-20 +-15 +-11 +-9 +-7 +-6 +-4 +-4 +-3 +-4 +-4 +-3 +-3 +-4 +-3 +-3 +-2 +-3 +-3 +-4 +-4 +-4 +-4 +-4 +-3 +-3 +-3 +-3 +-2 +-2 +-3 +-3 +-4 +-4 +-3 +-3 +-3 +-3 +-3 +-2 +-3 +-3 +-4 +-4 +-4 +-3 +-2 +-3 +-3 +-3 +-3 +-4 +-4 +-4 +-3 +-3 +-2 +-2 +-3 +-3 +-4 +-3 +-3 +-4 +-3 +-4 +-3 +-3 +-3 +-3 +-3 +-4 +-3 +-3 +-4 +-4 +-2 +-2 +-3 +-3 +-3 +-4 +-3 +-4 +-4 +-3 +-2 +-2 +-3 +-3 +-3 +43 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +94 +63 +14 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-45 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +63 +41 +27 +18 +14 +11 +10 +8 +8 +5 +1 +-2 +-4 +-7 +-9 +-7 +-5 +-5 +-4 +-3 +-2 +0 +-3 +-3 +-4 +-5 +-6 +-7 +-6 +-6 +-6 +-3 +-3 +-2 +-2 +-4 +-3 +-4 +-6 +-7 +-6 +-4 +-4 +-4 +-3 +-3 +-4 +-4 +-4 +-65 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-100 +-73 +-52 +-38 +-27 +-19 +-14 +-11 +-9 +-7 +-7 +-5 +-5 +-4 +-3 +-3 +-3 +-2 +-3 +-3 +-3 +-4 +-3 +-3 +-2 +-2 +-3 +-3 +-4 +-4 +-3 +-3 +-3 +-2 +-2 +-2 +-4 +-3 +-3 +-4 +-3 +-3 +-4 +-3 +-2 +-3 +-3 +-3 +25 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +94 +63 +24 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-58 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +93 +63 +21 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-48 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +91 +62 +11 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-94 +-69 +-51 +-36 +-26 +-19 +-14 +-11 +-9 +-7 +-6 +-4 +-4 +-4 +-4 +-3 +57 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +91 +60 +-12 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-97 +-71 +-51 +-37 +-26 +-18 +-14 +-10 +-8 +-7 +-6 +-5 +-5 +-4 +-3 +-3 +62 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +59 +-23 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-31 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +62 +25 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-65 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +93 +63 +41 +28 +19 +13 +11 +10 +10 +8 +5 +2 +-3 +-7 +-8 +-8 +-7 +-4 +-4 +-4 +-2 +0 +0 +-3 +-4 +-5 +-7 +-6 +-7 +-7 +-6 +-4 +-2 +-2 +-3 +-4 +-5 +-4 +-4 +-5 +-5 +-6 +-6 +-4 +-5 +-6 +-4 +-4 +-4 +-3 +-35 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-98 +-72 +-52 +-37 +-27 +-20 +-14 +-10 +-8 +-6 +-6 +-5 +-5 +-4 +-4 +-4 +55 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +88 +60 +-9 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-35 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +91 +62 +-17 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +60 +42 +29 +18 +13 +11 +11 +9 +6 +5 +1 +-4 +-5 +-7 +-7 +-6 +-6 +-22 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-70 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +94 +63 +23 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-52 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +62 +45 +28 +17 +17 +13 +10 +8 +6 +3 +0 +0 +-4 +-7 +-9 +-8 +-4 +-35 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-46 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +61 +-7 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-38 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +89 +62 +-13 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-35 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +60 +-21 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +61 +-23 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-64 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +64 +25 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-95 +-70 +-50 +-37 +-27 +-19 +-15 +-11 +-8 +-6 +-5 +-4 +-5 +-4 +-5 +-4 +45 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +91 +62 +11 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-96 +-71 +-51 +-36 +-25 +-18 +-14 +-10 +-8 +-6 +-6 +-5 +-5 +-4 +-4 +-3 +-2 +-1 +-3 +-3 +-3 +-2 +-3 +-3 +-4 +-3 +-2 +-2 +-3 +-3 +-3 +-3 +58 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +60 +-15 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-97 +-71 +-49 +-36 +-26 +-19 +-14 +-11 +-8 +-6 +-7 +-5 +-4 +-3 +-4 +-3 +63 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +91 +60 +-24 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +91 +61 +41 +26 +18 +12 +11 +9 +9 +8 +5 +0 +-2 +-5 +-8 +-7 +-6 +-6 +-21 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-58 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +63 +43 +25 +15 +11 +11 +12 +10 +9 +7 +2 +0 +-5 +-9 +-10 +-9 +-6 +-33 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-98 +-71 +-51 +-37 +-27 +-19 +-14 +-11 +-8 +-7 +-5 +-4 +-4 +-4 +-4 +-4 +-3 +-3 +-3 +-3 +-2 +-2 +-3 +-2 +-3 +-4 +-3 +-3 +-4 +-3 +-2 +-2 +58 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +60 +-12 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-114 +-96 +-71 +-51 +-37 +-27 +-19 +-13 +-9 +-8 +-6 +-6 +-5 +-4 +-4 +-4 +-4 +-3 +-3 +-2 +-2 +-3 +-2 +-3 +-3 +-4 +-3 +-3 +-3 +-3 +-2 +-3 +-3 +-3 +-4 +-2 +-3 +-3 +-2 +-2 +-3 +-3 +-3 +-4 +-4 +-3 +-3 +-2 +-2 +-2 +-2 +-2 +-3 +-4 +-4 +-3 +-3 +-3 +-2 +-2 +-3 +-3 +-3 +-3 +-3 +-3 +-4 +-3 +-2 +-2 +-3 +-3 +-3 +-4 +-3 +-3 +-4 +-3 +-3 +-2 +-2 +-3 +-4 +-4 +-3 +-3 +-3 +-3 +-2 +-3 +-2 +-3 +-4 +-3 +-4 +-4 +-3 +-2 +-2 +-2 +-3 +-3 +-3 +-3 +-3 +-4 +-3 +-3 +-3 +-3 +-2 +-4 +-3 +-3 +-3 +-4 +-3 +-2 +-2 +-2 +-3 +-3 +-3 +-3 +-4 +-4 +-3 +-2 +-3 +-3 +-2 +-2 +-3 +-4 +-4 +-3 +-2 +-3 +-3 +-3 +-3 +-2 +-3 +-3 +-3 +51 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +64 +43 +30 +20 +21 +15 +13 +10 +6 +2 +-3 +-2 +-7 +-8 +-6 +-6 +-6 +-4 +-3 +-1 +0 +-1 +-3 +-4 +-7 +-6 +-7 +-7 +-6 +-4 +-4 +-3 +-1 +-1 +-3 +-5 +-6 +-6 +-6 +-7 +-5 +-2 +-3 +-3 +-4 +-2 +-3 +-5 +-4 +-4 +-5 +-4 +-6 +-4 +-2 +-4 +-3 +-3 +-5 +-5 +-5 +-4 +-6 +-2 +-4 +-4 +-5 +-5 +-4 +-4 +-3 +-4 +-4 +-4 +-7 +-2 +-4 +-5 +-5 +-5 +-3 +-2 +-3 +-4 +-5 +-6 +-5 +-5 +-4 +-3 +-5 +-3 +-3 +-4 +-5 +-5 +-4 +-6 +-2 +-3 +-4 +-4 +-4 +-4 +-5 +-4 +-4 +-4 +-4 +-7 +-2 +-3 +-4 +-4 +-6 +-5 +-3 +-4 +-5 +-4 +-4 +-4 +-4 +-3 +-2 +-5 +-4 +-4 +-5 +-5 +-4 +-3 +-6 +-2 +-4 +-5 +-5 +-5 +-4 +-5 +-4 +-3 +-4 +-5 +-7 +-2 +-3 +-5 +-5 +-5 +-4 +-2 +-3 +-5 +-5 +-6 +-5 +-4 +-4 +-2 +-4 +-3 +-4 +-5 +-5 +-5 +-4 +-6 +-2 +-3 +-4 +-4 +-5 +-5 +-5 +-4 +-4 +-4 +-4 +-7 +-2 +-2 +-5 +-6 +-6 +-4 +-3 +-4 +-4 +-4 +-5 +-5 +-3 +-4 +-4 +-5 +-4 +-4 +-6 +-4 +-3 +-4 +-5 +-5 +-3 +-4 +-5 +-4 +-4 +-4 +-4 +-5 +-5 +-6 +-4 +-4 +-5 +-4 +-1 +-4 +-5 +-6 +-3 +-3 +-5 +-4 +-3 +-4 +-4 +-4 +-4 +-6 +-5 +-5 +-6 +-4 +-2 +-3 +-4 +-5 +-5 +-3 +-4 +-4 +-6 +-5 +-2 +-3 +-4 +-6 +-5 +-3 +-4 +-4 +-6 +-5 +-2 +-3 +-4 +-6 +-5 +-3 +-4 +-4 +-6 +-4 +-2 +-3 +-4 +-6 +-5 +-3 +-5 +-2 +-4 +-4 +-4 +-3 +-4 +-6 +-5 +-3 +-5 +-4 +-6 +-5 +-1 +-3 +-6 +-5 +-4 +-4 +-5 +-2 +-4 +-5 +-3 +-3 +-6 +-4 +-4 +-5 +-4 +-3 +-5 +-5 +-4 +-4 +-3 +-6 +-4 +-3 +-5 +-4 +-7 +-1 +-4 +-5 +-5 +-4 +-5 +-4 +-5 +-3 +-4 +-3 +-5 +-5 +-5 +-5 +-4 +-5 +-3 +-2 +-5 +-4 +-4 +-4 +-6 +-5 +-4 +-4 +-4 +-6 +-4 +-4 +-3 +-3 +-5 +-4 +-7 +-2 +-4 +-4 +-4 +-3 +-5 +-5 +-6 +-3 +-4 +-3 +-5 +-4 +-4 +-5 +-4 +-6 +-4 +-3 +-5 +-3 +-3 +-4 +-5 +-5 +-4 +-4 +-4 +-6 +-5 +-4 +-3 +-6 +-1 +-4 +-5 +-4 +-5 +-4 +-6 +-1 +-4 +-4 +-5 +-3 +-5 +-6 +-3 +-4 +-4 +-4 +-4 +-4 +-4 +-6 +-7 +-4 +-5 +-5 +-2 +-3 +-5 +-4 +-3 +-6 +-4 +-3 +-4 +-5 +-5 +-3 +-3 +-5 +-4 +-6 +-5 +-3 +-5 +-4 +-3 +-4 +-5 +-5 +-4 +-3 +-5 +-4 +-6 +-3 +-2 +-4 +-5 +-5 +-5 +-4 +-6 +-2 +-4 +-5 +-3 +-6 +-1 +-4 +-5 +-5 +-5 +-5 +-4 +-9 +-4 +-3 +-4 +-4 +2 +-3 +-5 +-5 +-4 +-4 +-6 +-5 +-2 +-4 +-5 +58 +127 +10 +127 +-37 +127 +-65 +118 +-79 +110 +-86 +100 +-94 +95 +-95 +95 +-98 +92 +-98 +96 +-96 +94 +-97 +94 +-96 +94 +-99 +90 +-100 +94 +-97 +93 +-98 +94 +-96 +94 +-99 +91 +-99 +94 +-98 +92 +-99 +93 +-96 +94 +-98 +92 +-98 +95 +-98 +92 +-99 +93 +-97 +94 +-98 +92 +-98 +95 +-97 +92 +-99 +93 +-98 +93 +-99 +92 +-98 +95 +-97 +93 +-99 +93 +-97 +93 +-99 +92 +-98 +94 +-97 +93 +-99 +92 +-97 +94 +-98 +92 +-98 +95 +-97 +93 +-99 +92 +-97 +94 +-98 +92 +-98 +95 +-97 +92 +-99 +92 +-98 +93 +-99 +92 +-98 +95 +-96 +93 +-99 +92 +-98 +94 +-98 +92 +-98 +95 +-97 +93 +-99 +92 +-97 +94 +-98 +92 +-98 +95 +-97 +93 +-99 +92 +-97 +94 +-98 +92 +-98 +95 +-97 +92 +-99 +93 +-97 +94 +-98 +92 +-98 +95 +-97 +92 +-100 +92 +-97 +94 +-98 +92 +-98 +95 +-97 +92 +-100 +92 +-97 +94 +-98 +92 +-98 +95 +-98 +92 +-99 +92 +-97 +94 +-98 +92 +-98 +94 +-98 +92 +-99 +93 +-97 +94 +-98 +92 +-98 +94 +-97 +92 +-100 +93 +-97 +94 +-98 +92 +-98 +94 +-98 +92 +-99 +93 +-97 +94 +-98 +92 +-98 +94 +-98 +92 +-99 +93 +-97 +94 +-98 +91 +-98 +94 +-98 +92 +-99 +93 +-97 +94 +-98 +91 +-99 +94 +-97 +93 +-99 +93 +-97 +94 +-98 +92 +-99 +94 +-97 +93 +-99 +93 +-96 +94 +-99 +91 +-99 +94 +-98 +93 +-99 +93 +-96 +94 +-99 +91 +-98 +95 +-97 +93 +-99 +93 +-96 +94 +-99 +91 +-99 +95 +-97 +93 +-99 +93 +-97 +93 +-99 +91 +-98 +95 +-97 +93 +-99 +93 +-97 +94 +-98 +92 +-98 +94 +-97 +93 +-98 +93 +-97 +94 +-98 +91 +-98 +95 +-97 +93 +-99 +93 +-98 +94 +-98 +91 +-98 +95 +-97 +93 +-99 +92 +-97 +94 +-98 +92 +-98 +95 +-97 +93 +-100 +92 +-98 +95 +-98 +92 +-97 +127 +82 +-114 +67 +-114 +78 +-107 +85 +-103 +89 +-102 +89 +-99 +91 +-100 +92 +-114 +-86 +122 +-68 +116 +-83 +103 +-90 +100 +-94 +95 +-95 +99 +-94 +94 +-98 +127 +78 +-114 +67 +-114 +78 +-107 +87 +-102 +89 +-102 +90 +-99 +92 +-100 +92 +-99 +93 +-98 +94 +-97 +92 +-98 +94 +-96 +93 +-100 +91 +-97 +93 +-98 +94 +-97 +94 +-98 +94 +-98 +91 +-99 +94 +-96 +93 +-99 +93 +-96 +93 +-98 +93 +-99 +93 +-98 +94 +-97 +92 +-98 +94 +-97 +93 +-99 +92 +-96 +94 +-98 +93 +-99 +92 +-99 +93 +-98 +92 +-98 +94 +-96 +93 +-99 +92 +-97 +93 +-98 +93 +-98 +93 +-98 +94 +-98 +91 +-98 +94 +-96 +93 +-99 +93 +-96 +93 +-99 +93 +-99 +93 +-98 +94 +-97 +92 +-99 +93 +-98 +93 +-97 +92 +-96 +93 +-98 +92 +-114 +-86 +123 +-68 +114 +-83 +105 +-88 +100 +-94 +96 +-95 +98 +-95 +94 +-97 +127 +82 +-114 +66 +-114 +78 +-107 +85 +-102 +90 +-101 +90 +-99 +91 +-100 +91 +-114 +-86 +122 +-68 +116 +-83 +103 +-90 +100 +-94 +95 +-95 +99 +-94 +95 +-97 +127 +78 +-114 +67 +-114 +77 +-107 +88 +-101 +89 +-102 +90 +-99 +92 +-100 +92 +-99 +93 +-98 +94 +-98 +92 +-98 +94 +-97 +93 +-99 +92 +-97 +93 +-99 +93 +-98 +93 +-98 +94 +-97 +92 +-99 +94 +-97 +93 +-99 +93 +-96 +94 +-98 +93 +-99 +92 +-99 +93 +-98 +92 +-98 +94 +-97 +93 +-99 +92 +-97 +94 +-98 +93 +-98 +93 +-98 +93 +-98 +92 +-98 +94 +-96 +93 +-99 +92 +-97 +93 +-99 +93 +-98 +93 +-98 +94 +-98 +91 +-99 +94 +-97 +93 +-98 +93 +-96 +94 +-98 +92 +-99 +93 +-98 +94 +-97 +92 +-98 +94 +-98 +92 +-98 +91 +-97 +93 +-98 +93 +-114 +-85 +123 +-68 +114 +-83 +105 +-88 +100 +-94 +96 +-95 +97 +-96 +93 +-97 +127 +81 +-114 +67 +-114 +78 +-107 +85 +-102 +90 +-101 +90 +-99 +92 +-100 +91 +-99 +93 +-98 +94 +-97 +92 +-99 +93 +-98 +92 +-99 +92 +-96 +94 +-98 +93 +-114 +-87 +121 +-68 +115 +-84 +104 +-89 +101 +-94 +95 +-95 +98 +-95 +94 +-97 +93 +-98 +92 +-98 +92 +-99 +93 +-97 +96 +-97 +92 +-98 +95 +-98 +91 +-99 +127 +79 +-114 +68 +-114 +78 +-108 +87 +-102 +88 +-103 +89 +-99 +92 +-99 +92 +-114 +-86 +122 +-68 +116 +-83 +104 +-90 +100 +-94 +95 +-95 +98 +-94 +95 +-97 +127 +79 +-114 +66 +-114 +77 +-108 +87 +-101 +90 +-101 +90 +-99 +91 +-100 +91 +-99 +93 +-98 +94 +-97 +92 +-99 +93 +-98 +92 +-99 +92 +-96 +94 +-98 +93 +-99 +93 +-98 +94 +-98 +92 +-98 +94 +-97 +93 +-97 +92 +-96 +93 +-98 +93 +-114 +-85 +123 +-69 +113 +-83 +105 +-89 +100 +-94 +97 +-94 +98 +-96 +93 +-98 +127 +81 +-114 +67 +-114 +79 +-107 +85 +-102 +89 +-102 +90 +-99 +92 +-100 +91 +-114 +-87 +122 +-68 +116 +-83 +104 +-89 +101 +-94 +94 +-96 +98 +-95 +94 +-97 +93 +-98 +92 +-98 +92 +-99 +93 +-97 +95 +-98 +92 +-98 +95 +-98 +92 +-99 +92 +-98 +93 +-97 +94 +-98 +92 +-98 +94 +-98 +91 +-98 +96 +-97 +93 +-98 +127 +78 +-114 +68 +-114 +78 +-107 +87 +-102 +88 +-103 +89 +-99 +92 +-99 +93 +-98 +93 +-98 +93 +-98 +91 +-98 +93 +-97 +93 +-99 +92 +-97 +93 +-98 +93 +-98 +93 +-98 +93 +-98 +91 +-99 +94 +-96 +93 +-99 +93 +-96 +93 +-99 +92 +-99 +92 +-98 +94 +-97 +92 +-98 +94 +-97 +92 +-99 +92 +-96 +94 +-98 +93 +-99 +92 +-98 +93 +-98 +92 +-98 +94 +-97 +93 +-98 +91 +-97 +93 +-99 +93 +-114 +-85 +123 +-68 +113 +-83 +105 +-89 +100 +-94 +96 +-94 +98 +-96 +93 +-98 +127 +78 +-114 +65 +-114 +81 +-107 +86 +-104 +89 +-100 +91 +-100 +90 +-100 +94 +-98 +92 +-99 +92 +-96 +94 +-98 +92 +-98 +94 +-99 +92 +-99 +92 +-96 +94 +-97 +92 +-98 +94 +-98 +92 +-99 +92 +-97 +93 +-98 +92 +-98 +94 +-98 +92 +-99 +92 +-96 +93 +-98 +92 +-99 +94 +-98 +92 +-99 +92 +-96 +94 +-98 +91 +-99 +94 +-98 +93 +-99 +93 +-96 +94 +-98 +91 +-99 +95 +-98 +93 +-99 +93 +-96 +93 +-99 +91 +-98 +95 +-97 +93 +-99 +93 +-96 +93 +-99 +91 +-98 +94 +-97 +93 +-99 +92 +-97 +93 +-99 +91 +-98 +95 +-98 +93 +-98 +92 +-97 +93 +-99 +91 +-98 +95 +-97 +93 +-98 +93 +-97 +93 +-98 +91 +-98 +95 +-97 +93 +-99 +92 +-97 +93 +-98 +92 +-98 +95 +-97 +93 +-99 +92 +-97 +93 +-99 +92 +-98 +95 +-98 +93 +-99 +92 +-97 +93 +-98 +92 +-98 +95 +-97 +93 +-99 +92 +-97 +93 +-98 +92 +-98 +95 +-97 +92 +-100 +92 +-97 +93 +-98 +92 +-98 +95 +-98 +92 +-99 +92 +-96 +94 +-98 +92 +-98 +95 +-99 +92 +-98 +95 +-97 +92 +-114 +-114 +-114 +-85 +-65 +-47 +-37 +-30 diff --git a/traces/hf_14b_raw_0600_st_sri512.pm3 b/traces/hf_14b_raw_0600_st_sri512.pm3 new file mode 100644 index 000000000..f3bf5b3c4 --- /dev/null +++ b/traces/hf_14b_raw_0600_st_sri512.pm3 @@ -0,0 +1,3072 @@ +127 +-8 +-7 +-8 +-8 +-8 +-7 +-8 +-8 +-8 +-7 +-8 +-8 +-8 +-8 +-9 +-8 +-8 +-8 +-8 +-7 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-7 +-8 +-7 +-8 +-8 +-8 +-8 +-8 +-8 +-7 +-8 +-8 +-7 +-8 +-8 +-8 +-7 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-7 +-7 +-7 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-7 +-8 +-8 +-8 +-8 +-8 +-7 +-7 +-7 +-8 +-8 +-8 +-8 +-8 +-7 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-9 +-8 +-8 +-7 +-7 +-7 +-7 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-7 +-7 +-7 +-8 +-8 +-8 +-7 +-8 +-8 +-8 +-7 +-8 +-8 +-8 +-8 +-8 +-7 +-8 +-8 +-8 +-7 +-7 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-7 +-7 +-7 +-8 +-8 +-8 +-8 +-8 +-7 +-8 +-7 +-7 +-8 +-8 +-8 +-8 +-7 +-8 +-8 +-8 +-7 +-8 +-7 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-7 +-8 +-7 +-7 +-7 +-9 +-8 +-8 +-7 +-8 +-7 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-7 +-7 +-8 +-7 +-8 +-8 +-8 +-8 +-8 +-8 +-7 +-7 +-7 +-7 +-8 +-8 +-9 +-8 +-8 +-8 +-8 +-7 +-7 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-7 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-7 +-7 +-7 +-7 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-7 +-7 +-7 +-8 +-8 +-8 +-7 +-7 +-8 +-8 +-7 +-8 +-8 +-8 +-8 +-9 +-8 +-8 +-8 +-8 +-7 +-8 +-8 +-9 +-8 +-8 +-8 +-8 +-7 +-7 +-7 +-8 +-7 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-7 +-8 +-8 +-8 +-8 +-8 +-7 +-8 +-8 +-8 +-7 +-7 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-7 +-7 +-8 +-9 +-8 +-8 +-8 +-8 +-7 +-7 +-7 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-7 +-7 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-7 +-8 +-8 +-8 +-8 +-8 +-8 +-7 +-7 +-7 +-7 +-8 +-8 +-8 +-8 +-8 +-7 +-7 +-7 +-8 +-8 +-9 +-8 +-8 +-8 +-8 +-7 +-7 +-7 +-7 +-8 +-9 +-8 +-8 +-8 +-9 +-8 +-8 +-7 +-8 +-7 +-8 +-8 +-8 +-8 +-8 +-7 +-7 +-7 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-7 +-8 +-8 +-7 +-8 +-8 +-8 +-7 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-7 +-7 +-7 +-8 +-8 +-9 +-8 +-8 +-8 +-8 +-8 +-7 +-7 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-7 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-7 +-8 +-7 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-7 +-8 +-7 +-8 +-8 +-8 +-8 +-8 +-7 +-7 +-7 +-8 +-7 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-7 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-7 +-8 +-8 +-8 +-8 +-8 +-8 +-7 +-8 +-7 +-7 +-7 +-8 +-8 +-8 +-8 +-8 +-7 +-7 +-8 +-8 +-7 +-8 +-8 +-9 +-7 +-8 +-8 +-8 +-7 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-7 +-7 +-7 +-7 +-7 +-9 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-9 +-8 +-8 +-8 +-8 +-8 +-7 +-7 +-8 +-7 +-8 +-8 +-8 +-8 +-8 +-8 +-7 +-7 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-7 +-8 +-8 +-8 +-8 +-8 +-7 +-8 +-7 +-8 +-7 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-7 +-7 +-8 +-9 +-8 +-8 +-8 +-8 +-7 +-7 +-7 +-7 +-7 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-7 +-8 +-7 +-8 +-8 +-9 +-7 +-7 +-7 +-8 +-7 +-7 +-8 +-8 +-8 +-8 +-8 +-8 +-7 +-8 +-7 +-8 +-7 +-8 +-8 +-8 +-8 +-8 +-7 +-7 +-7 +-8 +-7 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-7 +-7 +-7 +-8 +-7 +-7 +-8 +-8 +-8 +-8 +-8 +-8 +-7 +-8 +-7 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-7 +-8 +-8 +-7 +-7 +-8 +-8 +-7 +-27 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-89 +-65 +-48 +-36 +-28 +-22 +-17 +-13 +-12 +-10 +-10 +-9 +-9 +-9 +-8 +-8 +-7 +-7 +-7 +-7 +-8 +-8 +-8 +-8 +-8 +-8 +-7 +-8 +-7 +-7 +-8 +-7 +-8 +-8 +-8 +-8 +-7 +-7 +-7 +-7 +-8 +-8 +-8 +-8 +-8 +-8 +-7 +-7 +-7 +-7 +-8 +-8 +-8 +-8 +-8 +-8 +-7 +-7 +-7 +-7 +-8 +-8 +-8 +-8 +-8 +-8 +-7 +-8 +-8 +-7 +-8 +-8 +-8 +-8 +-8 +-8 +-7 +-7 +-7 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-7 +-7 +-8 +-8 +-7 +-8 +-8 +-8 +-8 +-7 +-7 +-7 +-7 +-8 +-7 +-8 +-8 +-8 +-8 +-7 +-8 +-8 +-7 +-8 +-8 +-8 +-8 +-8 +-7 +-8 +-7 +-8 +-8 +-7 +-8 +-8 +-8 +-8 +-8 +-7 +-7 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-7 +-7 +-7 +-8 +-7 +-8 +-8 +-8 +-8 +60 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +115 +78 +52 +34 +21 +14 +9 +6 +4 +2 +-1 +-3 +-5 +-8 +-9 +-10 +-9 +-9 +-9 +-27 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-90 +-67 +-49 +-36 +-27 +-21 +-17 +-14 +-12 +-11 +-10 +-9 +-10 +-8 +-7 +-8 +30 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +80 +53 +34 +21 +13 +9 +6 +5 +3 +1 +-2 +-5 +-7 +-9 +-11 +-12 +-10 +-9 +-28 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-118 +-85 +-63 +-46 +-35 +-27 +-21 +-17 +-15 +-13 +-11 +-9 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-7 +-7 +-7 +-7 +-8 +-8 +-8 +-8 +-8 +-8 +-7 +-7 +-7 +-8 +-8 +-7 +-8 +-8 +-8 +-8 +-7 +-7 +-7 +-7 +-8 +-8 +-8 +-8 +-8 +-8 +-7 +-8 +-8 +-7 +-8 +-8 +-8 +-8 +-8 +-8 +-7 +-8 +-7 +-8 +56 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +79 +52 +-22 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-116 +-85 +-63 +-47 +-35 +-26 +-20 +-16 +-14 +-12 +-11 +-10 +-9 +-10 +-9 +-8 +-7 +-7 +-8 +-8 +-7 +-8 +-8 +-8 +-8 +-7 +-7 +-7 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-7 +-8 +-7 +-8 +-8 +-8 +-8 +-8 +-8 +-7 +-7 +-7 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-7 +-7 +-7 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-7 +-7 +-8 +-8 +-8 +-7 +-8 +-8 +-8 +-8 +-7 +-7 +-7 +-8 +-8 +-8 +-8 +-8 +-8 +-7 +-7 +-7 +-7 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-7 +-7 +-7 +-8 +-8 +-7 +-8 +-8 +-8 +-7 +-7 +-7 +-7 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-7 +-7 +-8 +-8 +-7 +-8 +-8 +-8 +-8 +-8 +-7 +-7 +-8 +-8 +47 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +81 +53 +1 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-115 +-26 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +116 +79 +52 +33 +20 +11 +7 +3 +3 +2 +1 +-1 +-4 +-6 +-8 +-9 +-10 +-10 +-9 +-8 +-7 +-6 +-6 +-6 +-6 +-7 +-7 +-8 +-9 +-9 +-9 +-9 +-9 +-8 +-7 +-68 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-20 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +114 +77 +51 +13 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-87 +-64 +-48 +-36 +-28 +-22 +-18 +-15 +-12 +-10 +-10 +-8 +-9 +-8 +-8 +-8 +26 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +81 +52 +33 +20 +13 +9 +7 +5 +4 +2 +-2 +-5 +-8 +-9 +-11 +-11 +-10 +-9 +-28 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-118 +-39 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +81 +53 +33 +19 +10 +5 +3 +2 +2 +1 +0 +-2 +-5 +-8 +-10 +-11 +-11 +-11 +-40 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-118 +-27 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +79 +51 +32 +20 +11 +6 +4 +2 +1 +1 +0 +-3 +-5 +-7 +-9 +-11 +-11 +-11 +-64 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-23 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +115 +78 +50 +-32 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-117 +-66 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +81 +53 +15 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-119 +-88 +-64 +-47 +-35 +-27 +-21 +-17 +-15 +-13 +-11 +-10 +-9 +-8 +-7 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-7 +-7 +-7 +-8 +-8 +-8 +-8 +-8 +-8 +-7 +-7 +-7 +-8 +-7 +-8 +-8 +-8 +-8 +-8 +-7 +-7 +-7 +-8 +-8 +-7 +-8 +-8 +-8 +-8 +-8 +-7 +-8 +-7 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-7 +-7 +-7 +-8 +-8 +-8 +-8 +-8 +-8 +-7 +-7 +-7 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-7 +-8 +-7 +-7 +-8 +-7 +-8 +-8 +-8 +-8 +-8 +-7 +-7 +-7 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-7 +-7 +-8 +-7 +-8 +-8 +-8 +-8 +-8 +-7 +-8 +-7 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-7 +-8 +-7 +-8 +-8 +-7 +-8 +-8 +-8 +-8 +-7 +-7 +-8 +-7 +-8 +-7 +-8 +-8 +-8 +-8 +-7 +59 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +116 +78 +52 +35 +22 +14 +9 +6 +4 +1 +0 +-3 +-6 +-7 +-9 +-10 +-10 +-9 +-8 +-7 +-6 +-5 +-6 +-7 +-7 +-8 +-8 +-9 +-9 +-8 +-8 +-7 +-7 +-6 +-7 +-7 +-7 +-7 +-8 +-8 +-8 +-8 +-8 +-7 +-8 +-8 +-8 +-7 +-5 +-6 +-7 +-7 +-8 +-8 +-8 +-8 +-8 +-7 +-7 +-7 +-8 +-7 +-7 +-8 +-8 +-8 +-8 +-8 +-8 +-7 +-7 +-7 +-7 +-8 +-8 +-8 +-8 +-8 +-8 +-7 +-7 +-7 +-8 +-8 +-8 +-8 +-8 +-8 +-7 +-7 +-7 +-7 +-8 +-8 +-8 +-7 +-7 +-7 +-7 +-6 +-7 +-7 +-7 +-8 +-8 +-8 +-8 +-8 +-8 +-7 +-7 +-8 +-8 +-8 +-9 +-8 +-8 +-7 +-8 +-7 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-7 +-8 +-7 +-7 +-7 +-8 +-8 +-8 +-8 +-8 +-8 +-7 +-7 +-8 +-8 +-8 +-8 +-8 +-7 +-7 +-7 +-7 +-7 +-7 +-8 +-8 +-8 +-8 +-8 +-7 +-7 +-7 +-7 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-7 +-7 +-7 +-7 +-7 +-8 +-8 +-8 +-7 +-7 +-7 +-8 +-7 +-8 +-8 +-8 +-8 +-8 +-7 +-8 +-7 +-8 +-7 +-8 +-8 +-8 +-7 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-7 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-9 +-8 +-7 +-8 +-8 +-8 +-8 +-8 +-8 +-7 +-8 +-8 +-8 +-7 +-7 +-7 +-8 +-8 +-8 +-8 +-8 +-7 +-8 +-8 +-7 +-8 +-8 +-8 +-7 +-7 +-8 +-8 +-8 +-8 +-8 +-8 +-9 +-8 +-8 +-8 +-8 +-8 +-8 +-7 +-8 +-8 +127 +127 +41 +127 +-69 +127 +-111 +127 +-114 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +87 +-119 +47 +-119 +122 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +58 +127 +-67 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +87 +-119 +47 +-119 +122 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +72 +127 +-66 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +84 +-119 +44 +-119 +121 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +69 +127 +-65 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +83 +-119 +45 +-119 +121 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +72 +127 +-66 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +85 +-119 +47 +-119 +122 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +77 +127 +-65 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +86 +-119 +47 +-119 +122 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +68 +127 +-69 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +87 +-119 +46 +-119 +122 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +69 +127 +-66 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +85 +-119 +45 +-119 +121 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +66 +127 +-65 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +85 +-119 +45 +-119 +121 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +62 +127 +-68 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +84 +-119 +45 +-119 +122 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +62 +127 +-68 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +84 +-119 +45 +-119 +122 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +59 +127 +-67 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +84 +-119 +46 +-119 +122 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +57 +127 +-67 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 +127 +-119 diff --git a/traces/hf_14b_raw_10_ask_ctx.pm3 b/traces/hf_14b_raw_10_ask_ctx.pm3 new file mode 100644 index 000000000..8412b471e --- /dev/null +++ b/traces/hf_14b_raw_10_ask_ctx.pm3 @@ -0,0 +1,3072 @@ +-6 +-6 +-6 +-5 +-5 +-5 +-5 +-5 +-6 +-6 +-6 +-5 +-5 +-5 +-5 +-5 +-5 +-6 +-6 +-6 +-6 +-5 +-5 +-5 +-5 +-5 +-6 +-6 +-6 +-6 +-6 +-5 +-5 +-5 +-5 +-5 +-5 +-6 +-6 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-6 +-6 +-6 +-6 +-6 +-5 +-5 +-5 +-5 +-5 +-6 +-6 +-6 +-6 +-6 +-6 +-5 +-5 +-5 +-6 +-6 +-6 +-6 +-6 +-6 +-5 +-5 +-5 +-5 +-6 +-6 +-6 +-6 +-6 +-6 +-5 +-5 +-5 +-6 +-6 +-6 +-6 +-6 +-5 +-5 +-5 +-5 +-5 +-6 +-6 +-6 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-6 +-6 +-6 +-6 +-5 +-6 +-5 +-5 +-5 +-6 +-6 +-6 +-6 +-6 +-5 +-5 +-5 +-5 +-6 +-6 +-6 +-6 +-6 +-6 +-5 +-5 +-5 +-5 +-6 +-6 +-6 +-6 +-6 +-5 +-5 +-5 +-5 +-5 +-6 +-6 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-6 +-6 +-6 +-5 +-5 +-5 +-5 +-5 +-6 +-6 +-6 +-6 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-6 +-6 +-6 +-6 +-5 +-5 +-5 +-5 +-5 +-6 +-6 +-6 +-6 +-6 +-6 +-5 +-5 +-5 +-5 +-5 +-6 +-6 +-6 +-5 +-5 +-5 +-5 +-5 +-5 +-6 +-6 +-6 +-6 +-5 +-5 +-5 +-5 +-5 +-5 +-6 +-6 +-6 +-6 +-5 +-5 +-5 +-5 +-6 +-5 +-6 +-6 +-6 +-6 +-5 +-5 +-5 +-5 +-5 +-6 +-6 +-6 +-6 +-6 +-6 +-5 +-5 +-5 +-6 +-6 +-6 +-6 +-5 +-6 +-5 +-5 +-5 +-5 +-5 +-5 +-6 +-6 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-6 +-6 +-6 +-6 +-5 +-5 +-5 +-5 +-6 +-6 +-6 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-6 +-6 +-6 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-6 +-6 +-6 +-6 +-5 +-6 +-5 +-5 +-5 +-5 +-6 +-6 +-6 +-6 +-6 +-5 +-5 +-5 +-5 +-6 +-6 +-6 +-6 +-6 +-5 +-5 +100 +-6 +-5 +-6 +-6 +-6 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-6 +-6 +-6 +-5 +-6 +-5 +-5 +-5 +-5 +-5 +-6 +-6 +-6 +-6 +-6 +-5 +-5 +-5 +-5 +-6 +-6 +-6 +-6 +-5 +-5 +-5 +-5 +-5 +-5 +-6 +-6 +-5 +-6 +-6 +-5 +-5 +-5 +-5 +-5 +-6 +-6 +-6 +-6 +-6 +-5 +-5 +-5 +-5 +-5 +-6 +-6 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-6 +-6 +-6 +-6 +-6 +-5 +-5 +-5 +-5 +-5 +-6 +-6 +-6 +-6 +-6 +-5 +-5 +-5 +-5 +-5 +-6 +-6 +-6 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-6 +-6 +-6 +-6 +-6 +-5 +-5 +-5 +-5 +-5 +-5 +-6 +-6 +-6 +-6 +-5 +-5 +-5 +-5 +-5 +-6 +-6 +-6 +-6 +-6 +-6 +-5 +-5 +-5 +-5 +-6 +-6 +-6 +-6 +-6 +-5 +-5 +-5 +-5 +-5 +-6 +-6 +-6 +-5 +-5 +-5 +-5 +-5 +-6 +-5 +-6 +-6 +-6 +-5 +-6 +-5 +-5 +-5 +-5 +-6 +-6 +-6 +-6 +-5 +-6 +-5 +-5 +-5 +-5 +-6 +-6 +-5 +-5 +-5 +-5 +-5 +-6 +-5 +-5 +-5 +-6 +-6 +-6 +-6 +-6 +-5 +-5 +-5 +-5 +-6 +-5 +-6 +-6 +-5 +-5 +-5 +-5 +-5 +-5 +-6 +-6 +-6 +-6 +-6 +-6 +-5 +-5 +-5 +-5 +-6 +-6 +-6 +-6 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-6 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-6 +-6 +-6 +-6 +-5 +-5 +-5 +-5 +-5 +-6 +-6 +-6 +-6 +-6 +-6 +-5 +-5 +-5 +-5 +-6 +-6 +-6 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-6 +-6 +-6 +-5 +-5 +-5 +-5 +-5 +-5 +-6 +-6 +-6 +-6 +-5 +-5 +-5 +-5 +-5 +-6 +-6 +-6 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-6 +-6 +-6 +-6 +-6 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-6 +-5 +-5 +-5 +-5 +-5 +-5 +-6 +-5 +-6 +-6 +-5 +-6 +-5 +-5 +-5 +-5 +-6 +-6 +-6 +-6 +-5 +-6 +-5 +-5 +-5 +-5 +-6 +-6 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-6 +-6 +-6 +-6 +-6 +-5 +-6 +-5 +-5 +-6 +-5 +-6 +-6 +-6 +-6 +-5 +-5 +-5 +-5 +-6 +-6 +-6 +-6 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-6 +-6 +-6 +-6 +-6 +-5 +-5 +-5 +-5 +-5 +-6 +-5 +-6 +-5 +-5 +-5 +-5 +-5 +-5 +-6 +-6 +-5 +-6 +-6 +-5 +-5 +-5 +-5 +-5 +-6 +-6 +-6 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-6 +-6 +-6 +-6 +-6 +-5 +-5 +-5 +-5 +-5 +-6 +-6 +-6 +-6 +-5 +-5 +-5 +-5 +-5 +-6 +-6 +-6 +-5 +-5 +-5 +-4 +-5 +-5 +-5 +-6 +-6 +-6 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-6 +-6 +-6 +-6 +-5 +-5 +-5 +-5 +-5 +-5 +-6 +-6 +-6 +-6 +-5 +-5 +-5 +-5 +-6 +-6 +-6 +-6 +-6 +-5 +-5 +-6 +-5 +-5 +-5 +-6 +-6 +-5 +-6 +-5 +-5 +-5 +-5 +-5 +-5 +-6 +-6 +-6 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-6 +-6 +-6 +-6 +-5 +-5 +-5 +-5 +-6 +-6 +-6 +-6 +-6 +-6 +-5 +-5 +-5 +-5 +-5 +-6 +-6 +-6 +-5 +-5 +-5 +-5 +-5 +-5 +-6 +-6 +-6 +-6 +-5 +-5 +-5 +-5 +-5 +-5 +-6 +-6 +-5 +-5 +-5 +-5 +-5 +-18 +-116 +-116 +-116 +-116 +-116 +-116 +-116 +-116 +-116 +-116 +-116 +-116 +-100 +-73 +-53 +-39 +-29 +-21 +-16 +-13 +-10 +-8 +-7 +-7 +-6 +-6 +-5 +-5 +-5 +-5 +-5 +-5 +-4 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-4 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +56 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +94 +69 +50 +35 +25 +16 +9 +5 +1 +-1 +-3 +-3 +-3 +-3 +-3 +-3 +-4 +-5 +-6 +-6 +-69 +-116 +-116 +-116 +-116 +-116 +-116 +-116 +-116 +-116 +-116 +-116 +-116 +-99 +-72 +-52 +-38 +-28 +-21 +-16 +-12 +-10 +-9 +-8 +-7 +-6 +-6 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-4 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +35 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +96 +70 +51 +36 +3 +-116 +-116 +-116 +-116 +-116 +-116 +-116 +-116 +-116 +-116 +-116 +-116 +-96 +-69 +-50 +-37 +-28 +-21 +-16 +-13 +-10 +-8 +-7 +-7 +-6 +-6 +-6 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +51 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +69 +50 +36 +-25 +-116 +-116 +-116 +-116 +-116 +-116 +-116 +-116 +-116 +-116 +-116 +-116 +-96 +-70 +-51 +22 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +91 +66 +48 +34 +-35 +-116 +-116 +-116 +-116 +-116 +-116 +-116 +-116 +-116 +-116 +-116 +-116 +-96 +-69 +-50 +-37 +-27 +-21 +-16 +-13 +-10 +-9 +-8 +-7 +-6 +-5 +-5 +-5 +-5 +-5 +-5 +61 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +93 +68 +49 +35 +24 +16 +10 +5 +1 +-1 +-2 +-3 +-3 +-4 +-3 +-4 +-4 +-4 +-5 +-5 +-6 +-7 +-7 +-6 +-6 +-6 +-5 +-4 +-5 +-5 +-5 +-6 +-6 +-6 +-6 +-6 +-6 +-5 +-5 +-5 +-5 +-5 +-6 +-6 +-6 +-6 +-6 +-6 +-6 +-6 +-6 +-6 +-6 +-5 +-5 +-5 +-6 +-5 +-5 +-6 +-6 +-7 +-6 +-6 +-6 +-5 +-5 +-5 +-5 +-5 +-5 +-6 +-6 +-6 +-6 +-6 +-5 +-5 +-5 +-5 +-5 +-5 +-6 +-5 +-34 +-116 +-116 +-116 +-116 +-116 +-116 +-116 +-116 +-116 +-116 +-116 +-116 +-99 +-72 +-52 +-38 +-28 +-21 +-16 +-13 +-10 +-9 +-8 +-7 +-6 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-4 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +59 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +94 +69 +50 +35 +25 +16 +9 +5 +1 +-1 +-2 +-3 +-3 +-3 +-3 +-3 +-3 +-5 +-5 +-6 +-6 +-6 +-6 +-6 +-6 +-5 +-4 +-5 +-5 +-6 +-6 +-6 +-6 +-6 +-6 +-6 +-6 +-6 +-6 +-6 +-5 +-5 +-5 +-5 +-5 +-6 +-5 +-6 +-6 +-6 +-6 +-5 +-19 +-116 +-116 +-116 +-116 +-116 +-116 +-116 +-116 +-116 +-116 +-116 +-116 +-99 +-72 +-52 +-38 +-28 +-21 +-16 +-13 +-10 +-9 +-8 +-7 +-6 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-4 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +60 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +94 +68 +49 +35 +24 +16 +9 +4 +1 +-1 +-2 +-4 +-4 +-3 +-3 +-4 +-4 +-5 +-5 +-5 +-6 +-7 +-6 +-7 +-5 +-6 +-5 +-5 +-5 +-5 +-6 +-6 +-6 +-7 +-6 +-6 +-5 +-5 +-4 +-5 +-6 +-5 +-6 +-6 +-6 +-6 +-5 +-5 +-5 +-5 +-6 +-6 +-6 +-6 +-6 +-6 +-5 +-6 +-5 +-6 +-6 +-7 +-6 +-7 +-5 +-6 +-6 +-5 +-5 +-6 +-6 +-7 +-6 +-6 +-5 +-6 +-6 +-6 +-5 +-6 +-6 +-7 +-5 +-5 +-5 +-5 +-5 +-5 +-6 +-5 +-6 +-6 +-6 +-5 +-6 +-5 +-5 +-5 +-5 +-5 +-6 +-6 +-6 +-6 +-6 +-5 +-5 +-5 +-5 +-5 +-6 +-6 +-6 +-6 +-6 +-5 +-5 +-5 +-5 +-5 +-6 +-6 +-6 +-6 +-6 +-5 +-5 +-5 +-5 +-5 +-6 +-6 +-6 +-5 +-6 +-6 +-5 +-5 +-5 +-6 +-6 +-6 +-6 +-6 +-6 +-5 +-5 +-5 +-5 +-5 +-6 +-6 +-6 +-6 +-6 +-5 +-5 +-5 +-5 +-6 +-6 +-6 +-6 +-5 +-5 +-5 +-5 +-5 +-5 +-6 +-6 +-6 +-6 +-5 +-5 +-5 +-5 +-5 +-5 +-6 +-6 +-6 +-6 +-6 +-5 +-5 +-5 +-5 +-5 +-5 +-6 +-6 +-6 +-6 +-5 +-5 +-5 +-5 +-5 +-5 +-6 +-6 +-6 +-6 +-5 +-5 +-5 +-5 +-6 +-5 +-6 +-6 +-6 +-5 +-6 +-6 +-5 +-5 +-5 +-6 +-6 +-6 +-5 +-5 +-5 +-5 +-5 +-5 +-6 +-6 +-6 +-6 +-5 +-6 +-5 +-5 +-5 +-5 +-5 +-6 +-6 +-6 +-6 +-6 +-5 +-5 +-5 +-5 +-6 +-6 +-5 +-5 +-5 +-6 +-5 +-5 +-5 +-6 +-6 +-6 +-6 +-5 +-6 +-6 +-5 +-5 +-6 +-7 +127 +127 +-38 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +10 +-116 +101 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +-2 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +10 +-116 +100 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +-1 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +11 +-116 +100 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +-1 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +10 +-116 +101 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +-2 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +10 +-116 +100 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +-2 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +10 +-116 +101 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +-1 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +11 +-116 +100 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +-1 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +10 +-116 +100 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +-1 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +10 +-116 +101 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +-1 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +127 +-116 +-116 +-116 +-84 +-61 +-45 +-35 +-28 +-23 +-19 +-15 +-12 +-9 +-7 +-6 +-5 +-6 +-6 +-7 +-7 +-7 +-7 +-6 +-6 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-6 +-5 +-6 +-7 +-6 +-6 +-6 +-6 +-5 +-5 +-4 +-5 +-5 +-5 +-6 +-6 +-6 +-6 +-6 +-6 +-5 +-5 +-5 +-5 +-5 +-5 +-6 +-6 +-6 +-6 +-6 +-6 +-6 +-5 +-5 +-5 +-6 +-6 +-6 +-6 +-6 +-6 +-6 +-5 +-5 +-6 +-6 +-6 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-6 +-6 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-6 +-6 +-6 +-6 +-5 +-4 +-5 +-5 +-5 +-5 +-6 +-6 +-6 +-6 +-5 +-5 +-5 +-5 +-5 +-6 +-6 +-6 +-6 +-5 +-5 +-5 +-5 +-5 +-6 +-6 +-6 +-6 +-6 +-5 +-5 +-5 +-5 +-5 +-6 +-6 +-6 +-5 +-6 +-5 +-5 +-5 +-5 +-6 +-5 +-6 +-6 +-6 +-6 +-6 +-5 +-5 +-5 +-6 +-5 +-6 +-5 +-5 +-6 +-5 +-5 +-5 +-5 +-6 +-6 +-6 +-6 +-6 +-5 +-5 +-5 +-5 +-6 +-6 +-6 +-6 +-6 +-6 +-5 +-5 +-5 +-5 +-6 +-6 +-6 +-5 +-5 +-6 +-5 +-5 +-5 +-5 +-6 +-6 +-6 +-6 +-6 +-6 +-5 +-5 +-5 +-5 +-6 +-6 +-6 +-5 +-6 +-5 +-5 +-5 +-5 +-5 From affd92f79acbe662b5280ce2271abe828180b1fe Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Fri, 2 Oct 2020 01:29:21 +0200 Subject: [PATCH 0735/1047] hf 14b reader - added simple ask ct detection --- client/src/cmdhf14b.c | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/client/src/cmdhf14b.c b/client/src/cmdhf14b.c index ebb865d06..59d53b221 100644 --- a/client/src/cmdhf14b.c +++ b/client/src/cmdhf14b.c @@ -810,6 +810,39 @@ static bool HF14B_Std_Reader(bool verbose) { return is_success; } +static bool HF14B_ask_ct_Reader(bool verbose) { + uint8_t cmd[] = {0x10}; + uint8_t datalen = 1; + + // 14b get and print UID only (general info) + uint32_t flags = ISO14B_CONNECT | ISO14B_RAW | ISO14B_APPEND_CRC; + + clearCommandBuffer(); + PacketResponseNG resp; + SendCommandMIX(CMD_HF_ISO14443B_COMMAND, flags, datalen, 0, cmd, sizeof(cmd)); + + if (!WaitForResponseTimeout(CMD_HF_ISO14443B_COMMAND, &resp, TIMEOUT)) { + if (verbose) PrintAndLogEx(WARNING, "command execution timeout"); + switch_off_field_14b(); + return false; + } + + int status = resp.oldarg[0]; + PrintAndLogEx(DEBUG, "status %d", status); + bool retval = false; + if (status == 0) { + PrintAndLogEx(SUCCESS, "\nASK CT - 14443-3b tag found:"); + retval = true; + } else if (status > 0) { + PrintAndLogEx(SUCCESS, "\nASK CT - 14443-3b tag found:"); + PrintAndLogEx(SUCCESS, "%s", sprint_hex(resp.data.asBytes, status)); + retval = true; + } + + switch_off_field_14b(); + return retval; +} + // test for other 14b type tags (mimic another reader - don't have tags to identify) static bool HF14B_Other_Reader(bool verbose) { @@ -1749,6 +1782,9 @@ int readHF14B(bool verbose) { if (HF14B_Other_Reader(verbose)) return 1; + if (HF14B_ask_ct_Reader(verbose)) + return 1; + if (verbose) PrintAndLogEx(FAILED, "no 14443-B tag found"); return 0; } From fc6492288ca3f46e4c1b2aa6751845278769fe7c Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Fri, 2 Oct 2020 02:20:35 +0200 Subject: [PATCH 0736/1047] add trace --- traces/README.md | 1 + .../hf_14b_raw_0600_st_sri512_collision.pm3 | 3072 +++++++++++++++++ 2 files changed, 3073 insertions(+) create mode 100644 traces/hf_14b_raw_0600_st_sri512_collision.pm3 diff --git a/traces/README.md b/traces/README.md index 9d0271cc9..2c28d2e8e 100644 --- a/traces/README.md +++ b/traces/README.md @@ -66,6 +66,7 @@ |--------|-----------| |hf_14b_raw_050008_resp.pm3 |Response of 14b card to `hf 14b raw -c 050008`| |hf_14b_raw_0600_st_sri512.pm3 |Response of ST SRI512 to `hf 14b raw -c 0600`| +|hf_14b_raw_0600_st_sri512_collision.pm3 |Same but with two cards, showing the collisions in answers| |hf_14b_raw_10_ask_ctx.pm3 |Response of ASK CTx to `hf 14b raw -c 10`| |hf_14b_raw_010fxxxxxxxx_innovatron.pm3 |Response of 14b' card to `hf 14b raw -c -k 010fxxxxxxxx`| diff --git a/traces/hf_14b_raw_0600_st_sri512_collision.pm3 b/traces/hf_14b_raw_0600_st_sri512_collision.pm3 new file mode 100644 index 000000000..a7782819a --- /dev/null +++ b/traces/hf_14b_raw_0600_st_sri512_collision.pm3 @@ -0,0 +1,3072 @@ +22 +7 +8 +8 +8 +7 +9 +8 +8 +7 +8 +7 +7 +7 +8 +8 +7 +8 +8 +6 +8 +8 +8 +7 +8 +8 +8 +7 +8 +8 +7 +8 +9 +7 +8 +8 +8 +7 +8 +8 +7 +8 +7 +9 +9 +8 +8 +8 +8 +6 +7 +7 +8 +8 +9 +9 +8 +8 +8 +7 +7 +8 +8 +8 +7 +8 +7 +8 +8 +7 +8 +7 +9 +7 +7 +8 +8 +7 +7 +9 +8 +8 +8 +8 +9 +8 +8 +8 +7 +7 +7 +8 +8 +8 +8 +8 +9 +7 +7 +7 +7 +8 +8 +7 +8 +9 +8 +8 +8 +8 +7 +7 +8 +7 +8 +8 +8 +8 +8 +9 +8 +7 +8 +8 +9 +7 +7 +7 +7 +6 +8 +8 +8 +8 +9 +8 +8 +8 +8 +7 +8 +8 +8 +7 +7 +8 +8 +7 +7 +8 +8 +6 +9 +8 +7 +7 +7 +6 +8 +8 +9 +8 +8 +8 +8 +8 +8 +7 +8 +8 +7 +8 +8 +7 +8 +7 +7 +7 +7 +7 +7 +8 +7 +8 +7 +10 +8 +7 +8 +8 +8 +8 +8 +8 +8 +8 +9 +7 +8 +8 +9 +7 +9 +8 +8 +8 +8 +7 +8 +7 +9 +8 +9 +7 +10 +8 +8 +8 +7 +7 +7 +8 +9 +7 +8 +8 +8 +7 +8 +8 +7 +7 +8 +7 +9 +7 +8 +7 +7 +7 +9 +8 +7 +7 +8 +8 +7 +8 +7 +7 +8 +8 +9 +8 +9 +8 +8 +7 +8 +7 +8 +9 +8 +8 +8 +8 +7 +7 +7 +9 +8 +8 +7 +8 +8 +8 +8 +7 +7 +7 +9 +8 +7 +8 +8 +8 +7 +8 +7 +7 +8 +8 +7 +7 +8 +8 +7 +7 +8 +8 +8 +9 +8 +8 +8 +8 +7 +6 +8 +7 +8 +8 +9 +9 +8 +6 +8 +6 +7 +8 +7 +7 +8 +8 +8 +8 +8 +8 +8 +7 +8 +8 +7 +7 +8 +7 +8 +8 +8 +7 +7 +8 +8 +7 +7 +8 +8 +8 +9 +8 +8 +8 +9 +8 +7 +7 +8 +7 +8 +7 +8 +7 +9 +8 +8 +8 +8 +8 +7 +7 +8 +8 +10 +7 +8 +8 +7 +8 +8 +8 +8 +7 +8 +7 +7 +7 +7 +8 +8 +8 +8 +8 +9 +8 +7 +7 +7 +7 +7 +7 +8 +8 +9 +8 +8 +8 +8 +8 +8 +7 +7 +9 +8 +7 +8 +8 +8 +8 +8 +7 +8 +8 +8 +7 +7 +7 +8 +8 +9 +8 +9 +7 +7 +8 +7 +7 +8 +8 +8 +8 +8 +8 +8 +8 +8 +7 +6 +8 +8 +8 +7 +8 +8 +7 +9 +7 +8 +7 +8 +8 +8 +8 +7 +8 +7 +8 +8 +8 +9 +8 +8 +7 +7 +8 +7 +8 +8 +7 +8 +9 +8 +8 +7 +8 +8 +7 +8 +8 +8 +8 +9 +8 +8 +6 +7 +8 +7 +7 +8 +8 +8 +9 +8 +8 +7 +8 +8 +7 +8 +8 +7 +7 +8 +8 +8 +8 +9 +8 +8 +7 +8 +7 +8 +7 +8 +7 +6 +8 +8 +8 +8 +8 +8 +7 +8 +7 +7 +7 +8 +8 +8 +8 +7 +8 +8 +7 +7 +7 +8 +8 +8 +7 +8 +8 +7 +6 +9 +7 +7 +8 +8 +8 +6 +8 +8 +8 +8 +9 +8 +8 +8 +8 +7 +7 +7 +8 +8 +8 +8 +8 +8 +8 +8 +8 +7 +7 +8 +8 +8 +8 +8 +9 +8 +8 +7 +7 +8 +8 +7 +7 +8 +7 +8 +8 +9 +8 +8 +8 +8 +7 +8 +8 +7 +7 +7 +9 +7 +8 +8 +8 +8 +7 +8 +7 +7 +7 +8 +8 +8 +9 +8 +8 +7 +7 +9 +8 +9 +8 +7 +7 +8 +8 +7 +8 +9 +8 +8 +9 +9 +8 +7 +7 +8 +8 +8 +7 +8 +8 +9 +8 +8 +7 +7 +7 +7 +9 +7 +8 +7 +8 +8 +7 +7 +8 +8 +7 +8 +7 +9 +7 +7 +8 +7 +8 +-17 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-77 +-52 +-35 +-23 +-15 +-9 +-5 +-2 +0 +2 +5 +7 +8 +7 +8 +7 +7 +6 +5 +5 +7 +8 +8 +8 +8 +7 +6 +7 +7 +6 +7 +8 +8 +7 +7 +6 +7 +6 +7 +6 +7 +7 +8 +7 +8 +7 +7 +6 +6 +6 +8 +8 +8 +8 +8 +7 +6 +6 +6 +6 +7 +8 +9 +8 +8 +7 +6 +6 +7 +6 +7 +8 +9 +8 +7 +7 +7 +6 +7 +6 +7 +7 +8 +7 +6 +7 +6 +6 +7 +6 +7 +7 +8 +8 +8 +7 +7 +6 +6 +7 +8 +8 +8 +8 +8 +7 +6 +6 +6 +6 +7 +7 +8 +7 +7 +6 +7 +7 +7 +7 +7 +8 +8 +8 +7 +6 +7 +7 +6 +6 +8 +8 +9 +8 +7 +6 +7 +6 +6 +6 +8 +8 +8 +8 +8 +58 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +86 +65 +51 +41 +34 +27 +21 +16 +9 +6 +4 +3 +4 +7 +7 +11 +13 +13 +11 +-14 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-77 +-54 +-36 +-24 +-16 +-10 +-6 +-3 +1 +4 +6 +6 +7 +7 +7 +7 +7 +70 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +84 +65 +52 +44 +35 +27 +22 +15 +9 +4 +2 +2 +3 +6 +10 +12 +13 +14 +12 +-16 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-76 +-52 +-35 +-23 +-14 +-7 +-4 +-1 +1 +2 +4 +5 +6 +6 +8 +8 +8 +8 +7 +6 +6 +5 +6 +6 +7 +8 +9 +8 +8 +7 +7 +6 +6 +6 +7 +7 +8 +7 +7 +6 +7 +7 +6 +6 +8 +8 +9 +7 +7 +6 +7 +7 +6 +6 +8 +8 +9 +8 +6 +6 +7 +7 +6 +6 +8 +48 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +87 +65 +51 +17 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-78 +-55 +-37 +-24 +-16 +-9 +-5 +-2 +1 +4 +6 +5 +6 +7 +7 +7 +6 +6 +7 +8 +8 +8 +7 +6 +7 +6 +7 +6 +7 +8 +9 +7 +6 +7 +6 +6 +7 +6 +7 +7 +8 +8 +8 +6 +6 +6 +6 +6 +7 +7 +8 +7 +6 +7 +7 +7 +7 +6 +7 +8 +8 +8 +8 +7 +7 +6 +6 +6 +7 +8 +8 +8 +7 +7 +6 +6 +7 +5 +6 +7 +8 +8 +8 +8 +6 +7 +7 +6 +7 +8 +8 +8 +8 +6 +7 +6 +6 +7 +7 +7 +9 +8 +8 +7 +7 +6 +6 +6 +7 +8 +8 +8 +8 +7 +7 +6 +6 +5 +6 +7 +8 +8 +8 +7 +7 +7 +6 +6 +6 +77 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +85 +64 +51 +4 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-74 +19 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +113 +80 +61 +48 +39 +35 +28 +22 +16 +12 +7 +3 +3 +3 +4 +6 +10 +11 +12 +13 +11 +10 +7 +6 +5 +4 +4 +5 +7 +8 +9 +11 +11 +10 +8 +8 +-19 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-78 +-3 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +112 +81 +61 +49 +17 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-79 +-55 +-38 +-24 +-14 +-7 +-3 +0 +1 +2 +3 +3 +5 +6 +8 +8 +9 +70 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +84 +65 +51 +42 +33 +28 +21 +14 +10 +5 +5 +3 +3 +7 +8 +9 +11 +13 +13 +-17 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-75 +14 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +110 +78 +59 +48 +40 +36 +31 +24 +19 +12 +6 +3 +1 +2 +3 +6 +10 +12 +13 +13 +-22 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-76 +17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +111 +78 +59 +47 +40 +35 +30 +25 +19 +13 +7 +3 +1 +1 +2 +6 +9 +12 +13 +13 +-11 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-79 +-9 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +113 +81 +61 +48 +15 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-79 +-1 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +115 +83 +63 +50 +15 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-104 +-79 +-55 +-37 +-24 +-14 +-7 +-4 +-1 +1 +2 +4 +5 +6 +5 +8 +8 +8 +8 +7 +6 +6 +6 +6 +6 +8 +8 +8 +8 +7 +6 +7 +6 +6 +5 +7 +7 +8 +8 +8 +6 +7 +7 +6 +6 +7 +8 +8 +8 +8 +6 +7 +7 +6 +6 +7 +7 +8 +8 +8 +6 +7 +6 +7 +6 +7 +8 +8 +7 +8 +6 +7 +7 +6 +6 +7 +7 +8 +8 +8 +7 +7 +7 +6 +6 +6 +8 +8 +8 +8 +7 +6 +6 +6 +6 +7 +8 +8 +8 +7 +7 +6 +6 +6 +6 +6 +8 +9 +8 +8 +7 +6 +6 +7 +6 +6 +7 +8 +8 +8 +7 +7 +7 +6 +6 +5 +7 +9 +8 +9 +7 +6 +7 +6 +6 +7 +7 +8 +8 +8 +7 +7 +6 +6 +6 +6 +55 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +87 +65 +52 +42 +35 +28 +22 +14 +10 +5 +4 +2 +5 +6 +8 +11 +11 +11 +12 +10 +8 +7 +5 +4 +4 +5 +8 +8 +9 +10 +9 +10 +10 +8 +7 +6 +6 +6 +5 +8 +7 +9 +8 +10 +8 +9 +8 +7 +9 +6 +6 +6 +8 +8 +9 +10 +8 +8 +9 +8 +7 +8 +7 +8 +7 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +9 +8 +8 +7 +7 +7 +7 +9 +8 +8 +9 +8 +9 +8 +7 +8 +7 +7 +8 +8 +8 +8 +9 +8 +8 +7 +8 +7 +8 +8 +8 +8 +8 +8 +8 +8 +9 +8 +8 +8 +7 +9 +8 +8 +8 +7 +8 +8 +9 +8 +8 +8 +8 +8 +7 +8 +8 +7 +7 +9 +9 +8 +8 +8 +8 +8 +8 +8 +8 +8 +9 +8 +9 +8 +7 +7 +7 +8 +8 +8 +8 +8 +8 +7 +9 +7 +7 +7 +7 +8 +7 +9 +7 +8 +8 +9 +8 +8 +7 +8 +8 +8 +8 +8 +9 +8 +9 +8 +8 +7 +10 +8 +7 +8 +8 +7 +8 +8 +8 +8 +8 +8 +8 +7 +8 +8 +7 +8 +8 +8 +8 +9 +8 +7 +7 +8 +8 +8 +8 +8 +8 +8 +7 +8 +8 +8 +9 +8 +9 +7 +8 +8 +8 +8 +8 +8 +8 +8 +9 +8 +9 +7 +7 +7 +8 +8 +8 +8 +9 +8 +9 +8 +8 +6 +7 +23 +55 +1 +34 +-9 +29 +-13 +28 +-15 +26 +-17 +23 +-20 +20 +-22 +20 +-21 +20 +-18 +23 +-18 +23 +-17 +22 +-19 +21 +-20 +19 +-21 +21 +-19 +22 +-18 +23 +-18 +21 +-19 +21 +-20 +21 +-19 +21 +-19 +22 +-18 +22 +-19 +22 +-19 +21 +-19 +21 +-19 +21 +-20 +21 +-20 +21 +-18 +23 +-19 +21 +-19 +21 +-19 +21 +-19 +21 +-19 +22 +-18 +22 +-19 +23 +-19 +20 +-20 +21 +-19 +21 +-19 +22 +-19 +21 +-19 +21 +-20 +21 +-18 +21 +-18 +22 +-18 +21 +-19 +22 +-19 +22 +-18 +22 +-19 +21 +-18 +21 +-19 +22 +-18 +22 +-19 +22 +-19 +21 +-19 +21 +-19 +21 +-19 +22 +-19 +21 +-19 +21 +-19 +21 +-19 +21 +-20 +22 +-18 +21 +-19 +22 +-19 +22 +-20 +21 +-19 +21 +-18 +22 +-19 +21 +-19 +21 +-19 +21 +-18 +21 +-19 +21 +-18 +21 +-19 +22 +-19 +21 +-19 +22 +-19 +21 +-19 +21 +-20 +21 +-19 +21 +-19 +22 +-18 +21 +-18 +21 +-20 +21 +-20 +22 +-18 +21 +-18 +22 +-19 +21 +-19 +22 +-20 +23 +-18 +21 +-19 +21 +-19 +21 +-20 +22 +-18 +21 +-19 +22 +-19 +21 +-20 +21 +-19 +21 +-19 +22 +-18 +22 +-19 +22 +-20 +21 +-19 +21 +-18 +22 +-19 +22 +-18 +23 +-21 +22 +-18 +22 +-19 +22 +-18 +21 +-20 +21 +-19 +21 +-19 +22 +-18 +21 +-19 +22 +-20 +21 +-19 +21 +-19 +21 +-19 +22 +-18 +22 +-19 +21 +-20 +22 +-20 +21 +-19 +22 +-18 +21 +-19 +111 +-1 +-46 +3 +-31 +14 +-23 +19 +-22 +18 +-21 +19 +-20 +20 +-19 +22 +-18 +21 +-18 +21 +-19 +21 +-19 +21 +-19 +21 +-18 +20 +-20 +21 +-19 +21 +-18 +21 +-19 +21 +-18 +21 +-20 +21 +-18 +21 +-19 +22 +-18 +21 +-19 +21 +-19 +20 +-19 +21 +-19 +21 +-18 +22 +-19 +21 +-18 +21 +-19 +21 +-18 +21 +-18 +21 +-19 +20 +-19 +21 +-19 +21 +-18 +22 +-18 +21 +-19 +20 +-20 +21 +-19 +21 +-19 +22 +-17 +21 +-20 +22 +-18 +21 +-19 +21 +-19 +21 +-19 +21 +-20 +21 +-18 +21 +-18 +21 +-18 +21 +-19 +21 +-19 +20 +-18 +22 +-18 +21 +-18 +22 +-19 +20 +-19 +21 +-20 +21 +-19 +21 +-19 +22 +-19 +20 +-19 +22 +-19 +21 +-19 +21 +-18 +21 +-19 +21 +-19 +21 +-18 +21 +-19 +21 +-19 +21 +-20 +21 +-19 +21 +-18 +22 +-18 +22 +-19 +21 +-20 +20 +-19 +21 +-18 +22 +-31 +-9 +33 +-13 +24 +-18 +22 +-18 +22 +-18 +23 +-16 +23 +-18 +22 +-19 +20 +-20 +21 +-20 +21 +-19 +22 +-19 +22 +-17 +23 +-18 +22 +-19 +21 +-20 +111 +-1 +-47 +3 +-30 +15 +-22 +19 +-20 +19 +-23 +18 +-21 +19 +-20 +22 +-18 +23 +-17 +22 +-19 +20 +-19 +21 +-20 +20 +-19 +21 +-19 +21 +-17 +21 +-18 +-3 +95 +-9 +77 +-19 +70 +-23 +68 +-23 +67 +-25 +68 +-25 +67 +-27 +65 +-2 +-48 +0 +-32 +13 +-24 +19 +-20 +20 +-21 +21 +-21 +19 +-20 +21 +-33 +94 +-8 +78 +-18 +70 +-22 +68 +-24 +67 +-25 +66 +-26 +66 +-26 +65 +-19 +-6 +-38 +10 +-26 +16 +-22 +18 +-20 +19 +-20 +20 +-19 +20 +-19 +21 +-18 +-3 +95 +-8 +79 +-18 +71 +-22 +68 +-24 +67 +-26 +67 +-26 +67 +-26 +-20 +-21 +19 +-23 +17 +-21 +20 +-19 +21 +-17 +23 +-17 +23 +-19 +20 +-20 +110 +-1 +-47 +3 +-30 +15 +-23 +19 +-20 +19 +-22 +19 +-22 +19 +-20 +22 +-32 +-9 +35 +-11 +26 +-18 +22 +-19 +21 +-19 +21 +-19 +22 +-17 +23 +-17 +112 +-1 +-47 +1 +-32 +13 +-24 +18 +-20 +20 +-20 +20 +-20 +20 +-20 +21 +-19 +21 +-19 +22 +-18 +21 +-19 +21 +-19 +21 +-19 +21 +-19 +21 +-18 +21 +-19 +21 +-18 +21 +-19 +21 +-18 +22 +-18 +22 +-19 +20 +-19 +21 +-19 +21 +-31 +-9 +34 +-13 +24 +-19 +22 +-19 +22 +-18 +23 +-16 +24 +-18 +22 +-19 +110 +-28 +65 +-25 +67 +-24 +67 +-24 +67 +-26 +66 +-27 +64 +-27 +65 +-27 +-21 +86 +-24 +67 +-24 +67 +-25 +66 +-25 +66 +-27 +65 +-27 +65 +-27 +66 +-26 +-35 +16 +-24 +17 +-23 +19 +-21 +19 +-20 +22 +-18 +22 +-18 +22 +-19 +112 +-27 +66 +-25 +66 +-23 +66 +-26 +66 +-26 +65 +-27 +66 +-27 +66 +-26 +66 +-1 +-48 +2 +-31 +13 +-24 +18 +-22 +19 +-21 +20 +-21 +20 +-19 +21 +-32 +-9 +34 +-11 +24 +-18 +22 +-19 +22 +-19 +23 +-18 +23 +-18 +22 +-19 +110 +0 +-47 +2 +-31 +14 +-22 +20 +-21 +19 +-21 +19 +-20 +19 +-20 +21 +-18 +22 +-18 +22 +-18 +21 +-18 +21 +-19 +20 +-20 +21 +-19 +20 +-18 +23 +-32 +95 +-8 +77 +-19 +71 +-24 +67 +-25 +68 +-25 +67 +-25 +67 +-27 +65 +-27 +65 +-27 +65 +-26 +66 +-24 +67 +-26 +66 +-26 +66 +-26 +65 +-27 +65 +-27 +65 +-26 +65 +-26 +65 +-26 +65 +-27 +66 +-27 +65 +-26 +66 +-25 +66 +-25 +-34 +17 +-25 +18 +-23 +17 +-21 +20 +-19 +21 +-18 +23 +-18 +22 +-19 +21 +-20 +20 +-20 +21 +-19 +23 +-17 +21 +-19 +22 +-19 +21 +-19 +21 +-18 +111 +0 +-46 +3 +-31 +14 +-22 +19 +-21 +19 +-21 +18 +-21 +19 +-20 +21 +-17 +-1 +96 +-8 +79 +-19 +70 +-23 +68 +-26 +67 +-25 +68 +-25 +67 +-26 +-20 +-22 +19 +-22 +19 +-22 +21 +-19 +21 +-19 +23 +-18 +22 +-18 +22 +-19 +110 +-1 +-48 +1 +-30 +15 +-22 +19 +-20 +20 +-21 +18 +-21 +18 +-21 +20 +-18 +22 +-17 +23 +-18 +21 +-19 +21 +-20 +20 +-20 +21 +-18 +21 +-18 +22 +-18 +22 +-18 +21 +-19 +20 +-19 +21 +-19 +21 +-18 +21 +-18 +21 +-18 +21 +-18 +21 +-19 +21 +-18 +22 +-19 +22 +-18 +22 +-18 +21 +-19 +20 +-20 +21 +-19 +21 +-19 +22 +-19 +20 +-18 +21 +-19 +21 +-18 +21 +-18 +21 +-18 +21 +-19 +21 +-19 +21 +-19 +22 +-19 +21 +-19 +21 +-19 +21 +-18 +22 +-19 +22 +-18 +21 +-19 +21 +-19 +21 +-19 +22 +-18 +22 +-18 +22 +-19 +20 +-19 +21 +-19 +21 +-18 +22 +-18 +21 +-18 +21 +-19 +21 +-18 +20 +-19 +21 +-19 +20 +-19 +21 +-18 +21 +-19 +21 +-20 +21 +-19 +21 +-20 +21 +-18 +21 +-19 +22 +-18 +22 +-20 +21 +-19 +21 +-18 +22 +-18 +21 +-18 +21 +-19 +20 +-19 +21 +-33 +-9 +34 +-12 +25 +-17 +22 +-19 +22 +-18 +23 +-17 +23 +-17 +22 +-19 +21 +-20 +20 +-21 +22 +-20 +22 +-17 +22 +-19 +21 +-19 +21 +-19 +21 +-18 +21 +-19 From 67c175fe7a760ca0cd956c2e767107e5c0980fba Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Fri, 2 Oct 2020 02:56:29 +0200 Subject: [PATCH 0737/1047] hf 14b reader: show actual ASK CTx UID --- client/src/cmdhf14b.c | 70 ++++++++++++++++++++++++++++++++----------- 1 file changed, 53 insertions(+), 17 deletions(-) diff --git a/client/src/cmdhf14b.c b/client/src/cmdhf14b.c index 59d53b221..9bdeb8c91 100644 --- a/client/src/cmdhf14b.c +++ b/client/src/cmdhf14b.c @@ -811,15 +811,19 @@ static bool HF14B_Std_Reader(bool verbose) { } static bool HF14B_ask_ct_Reader(bool verbose) { - uint8_t cmd[] = {0x10}; - uint8_t datalen = 1; + uint8_t cmd1[] = {0x10}; + uint8_t cmd2[] = {0x9F, 0xFF, 0xFF}; + uint8_t cmd3[] = {0xC4}; + uint8_t uid[4]; + uint8_t pc, fc; // 14b get and print UID only (general info) uint32_t flags = ISO14B_CONNECT | ISO14B_RAW | ISO14B_APPEND_CRC; + PacketResponseNG resp; + int status; clearCommandBuffer(); - PacketResponseNG resp; - SendCommandMIX(CMD_HF_ISO14443B_COMMAND, flags, datalen, 0, cmd, sizeof(cmd)); + SendCommandMIX(CMD_HF_ISO14443B_COMMAND, flags, sizeof(cmd1), 0, cmd1, sizeof(cmd1)); if (!WaitForResponseTimeout(CMD_HF_ISO14443B_COMMAND, &resp, TIMEOUT)) { if (verbose) PrintAndLogEx(WARNING, "command execution timeout"); @@ -827,20 +831,52 @@ static bool HF14B_ask_ct_Reader(bool verbose) { return false; } - int status = resp.oldarg[0]; - PrintAndLogEx(DEBUG, "status %d", status); - bool retval = false; - if (status == 0) { - PrintAndLogEx(SUCCESS, "\nASK CT - 14443-3b tag found:"); - retval = true; - } else if (status > 0) { - PrintAndLogEx(SUCCESS, "\nASK CT - 14443-3b tag found:"); - PrintAndLogEx(SUCCESS, "%s", sprint_hex(resp.data.asBytes, status)); - retval = true; + status = resp.oldarg[0]; + PrintAndLogEx(DEBUG, "status cmd1 %d", status); + if (status == 4) { + pc = resp.data.asBytes[0]; + fc = resp.data.asBytes[1]; + } else { + switch_off_field_14b(); + return false; + } + clearCommandBuffer(); + SendCommandMIX(CMD_HF_ISO14443B_COMMAND, flags, sizeof(cmd2), 0, cmd2, sizeof(cmd2)); + if (!WaitForResponseTimeout(CMD_HF_ISO14443B_COMMAND, &resp, TIMEOUT)) { + if (verbose) PrintAndLogEx(WARNING, "command execution timeout"); + switch_off_field_14b(); + return false; + } + status = resp.oldarg[0]; + PrintAndLogEx(DEBUG, "status cmd2 %d", status); + if (status == 4) { + uid[0] = resp.data.asBytes[0]; + uid[1] = resp.data.asBytes[1]; + } else { + switch_off_field_14b(); + return false; + } + clearCommandBuffer(); + SendCommandMIX(CMD_HF_ISO14443B_COMMAND, flags, sizeof(cmd3), 0, cmd3, sizeof(cmd3)); + if (!WaitForResponseTimeout(CMD_HF_ISO14443B_COMMAND, &resp, TIMEOUT)) { + if (verbose) PrintAndLogEx(WARNING, "command execution timeout"); + switch_off_field_14b(); + return false; + } + status = resp.oldarg[0]; + PrintAndLogEx(DEBUG, "status cmd3 %d", status); + if (status == 4) { + uid[2] = resp.data.asBytes[0]; + uid[3] = resp.data.asBytes[1]; + uint32_t uid32 = uid[0] + (uid[1] << 8) + (uid[2] << 16) + (uid[3] << 24); + PrintAndLogEx(SUCCESS, "\nASK CT - 14443-3b tag found:"); + PrintAndLogEx(SUCCESS, "UID: %02X%02X%02X%02X (%u) Product code: %02X Fab code: %02X", uid[0], uid[1], uid[2], uid[3], uid32, pc, fc); + switch_off_field_14b(); + return true; + } else { + switch_off_field_14b(); + return false; } - - switch_off_field_14b(); - return retval; } // test for other 14b type tags (mimic another reader - don't have tags to identify) From 5202eb8587e868bc0de777c8b5bbafb84cf21135 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Fri, 2 Oct 2020 14:30:15 +0200 Subject: [PATCH 0738/1047] broke out type prototyping from mifare.h --- include/iso14b.h | 43 +++++++++++++++++ include/iso15.h | 33 +++++++++++++ include/iso18.h | 119 +++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 195 insertions(+) create mode 100644 include/iso14b.h create mode 100644 include/iso15.h create mode 100644 include/iso18.h diff --git a/include/iso14b.h b/include/iso14b.h new file mode 100644 index 000000000..e1baf231a --- /dev/null +++ b/include/iso14b.h @@ -0,0 +1,43 @@ +//----------------------------------------------------------------------------- +// (c) 2020 Iceman +// +// This code is licensed to you under the terms of the GNU GPL, version 2 or, +// at your option, any later version. See the LICENSE.txt file for the text of +// the license. +//----------------------------------------------------------------------------- +// ISO 14443B type prototyping +//----------------------------------------------------------------------------- + +#ifndef _ISO14B_H_ +#define _ISO14B_H_ + +#include "common.h" +typedef struct { + uint8_t uid[10]; + uint8_t uidlen; + uint8_t atqb[7]; + uint8_t chipid; + uint8_t cid; +} PACKED iso14b_card_select_t; + +typedef struct { + uint8_t uid[4]; + uint8_t pc; + uint8_t fc; +} PACKED iso14b_cts_card_select_t; + +typedef enum ISO14B_COMMAND { + ISO14B_CONNECT = (1 << 0), + ISO14B_DISCONNECT = (1 << 1), + ISO14B_APDU = (1 << 2), + ISO14B_RAW = (1 << 3), + ISO14B_REQUEST_TRIGGER = (1 << 4), + ISO14B_APPEND_CRC = (1 << 5), + ISO14B_SELECT_STD = (1 << 6), + ISO14B_SELECT_SR = (1 << 7), + ISO14B_SET_TIMEOUT = (1 << 8), + ISO14B_SEND_CHAINING = (1 << 9), + ISO14B_SELECT_CTS = (1 << 10), +} iso14b_command_t; + +#endif // _ISO14B_H_ \ No newline at end of file diff --git a/include/iso15.h b/include/iso15.h new file mode 100644 index 000000000..228669cda --- /dev/null +++ b/include/iso15.h @@ -0,0 +1,33 @@ +//----------------------------------------------------------------------------- +// (c) 2020 Iceman +// +// This code is licensed to you under the terms of the GNU GPL, version 2 or, +// at your option, any later version. See the LICENSE.txt file for the text of +// the license. +//----------------------------------------------------------------------------- +// ISO 15693 type prototyping +//----------------------------------------------------------------------------- + +#ifndef _ISO15_H_ +#define _ISO15_H_ + +#include "common.h" +typedef struct { + uint8_t uid[10]; + uint8_t uidlen; + uint8_t atqb[7]; + uint8_t chipid; + uint8_t cid; +} PACKED iso14b_card_select_t; + +typedef enum ISO15_COMMAND { + ISO15_CONNECT = (1 << 0), + ISO15_NO_DISCONNECT = (1 << 1), + ISO15_RAW = (1 << 2), + ISO15_APPEND_CRC = (1 << 3), + ISO15_HIGH_SPEED = (1 << 4), + ISO15_READ_RESPONSE = (1 << 5) +} iso15_command_t; + + +#endif // _ISO15_H_ \ No newline at end of file diff --git a/include/iso18.h b/include/iso18.h new file mode 100644 index 000000000..711bba495 --- /dev/null +++ b/include/iso18.h @@ -0,0 +1,119 @@ +//----------------------------------------------------------------------------- +// (c) 2020 Iceman +// +// This code is licensed to you under the terms of the GNU GPL, version 2 or, +// at your option, any later version. See the LICENSE.txt file for the text of +// the license. +//----------------------------------------------------------------------------- +// ISO 18002 / FeliCa type prototyping +//----------------------------------------------------------------------------- +#ifndef _ISO18_H_ +#define _ISO18_H_ + +#include "common.h" + +typedef enum FELICA_COMMAND { + FELICA_CONNECT = (1 << 0), + FELICA_NO_DISCONNECT = (1 << 1), + FELICA_RAW = (1 << 3), + FELICA_APPEND_CRC = (1 << 5), + FELICA_NO_SELECT = (1 << 6), +} felica_command_t; + +//----------------------------------------------------------------------------- +// FeliCa +//----------------------------------------------------------------------------- +// IDm = ID manufacturer +// mc = manufactureCode +// mc1 mc2 u1 u2 u3 u4 u5 u6 +// PMm = Product manufacturer +// icCode = +// ic1 = ROM +// ic2 = IC +// maximum response time = +// B3(request service) +// B4(request response) +// B5(authenticate) +// B6(read) +// B7(write) +// B8() + +// ServiceCode 2bytes (access-rights) +// FileSystem = 1 Block = 16 bytes + + +typedef struct { + uint8_t IDm[8]; + uint8_t code[2]; + uint8_t uid[6]; + uint8_t PMm[8]; + uint8_t iccode[2]; + uint8_t mrt[6]; + uint8_t servicecode[2]; +} PACKED felica_card_select_t; + +typedef struct { + uint8_t sync[2]; + uint8_t length[1]; + uint8_t cmd_code[1]; + uint8_t IDm[8]; +} PACKED felica_frame_response_t; + +typedef struct { + uint8_t status_flag1[1]; + uint8_t status_flag2[1]; +} PACKED felica_status_flags_t; + +typedef struct { + felica_frame_response_t frame_response; + uint8_t node_number[1]; + uint8_t node_key_versions[2]; +} PACKED felica_request_service_response_t; + +typedef struct { + felica_frame_response_t frame_response; + uint8_t mode[1]; +} PACKED felica_request_request_response_t; + +typedef struct { + felica_frame_response_t frame_response; + felica_status_flags_t status_flags; + uint8_t number_of_block[1]; + uint8_t block_data[16]; + uint8_t block_element_number[1]; +} PACKED felica_read_without_encryption_response_t; + +typedef struct { + felica_frame_response_t frame_response; + felica_status_flags_t status_flags; +} PACKED felica_status_response_t; + +typedef struct { + felica_frame_response_t frame_response; + uint8_t number_of_systems[1]; + uint8_t system_code_list[32]; +} PACKED felica_syscode_response_t; + +typedef struct { + felica_frame_response_t frame_response; + felica_status_flags_t status_flags; + uint8_t format_version[1]; + uint8_t basic_version[2]; + uint8_t number_of_option[1]; + uint8_t option_version_list[4]; +} PACKED felica_request_spec_response_t; + +typedef struct { + felica_frame_response_t frame_response; + uint8_t m2c[8]; + uint8_t m3c[8]; +} PACKED felica_auth1_response_t; + +typedef struct { + uint8_t code[1]; + uint8_t IDtc[8]; + uint8_t IDi[8]; + uint8_t PMi[8]; +} PACKED felica_auth2_response_t; + +#endif // _ISO18_H_ \ No newline at end of file From 108424d3265ea89cd09ca76c252b7426f878ffc8 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Fri, 2 Oct 2020 14:30:37 +0200 Subject: [PATCH 0739/1047] add ASK C-ticket commands --- include/protocols.h | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/include/protocols.h b/include/protocols.h index 7cd547fef..d2af15647 100644 --- a/include/protocols.h +++ b/include/protocols.h @@ -247,6 +247,16 @@ ISO 7816-4 Basic interindustry commands. For command APDU's. #define ISO14443B_PING 0xBA #define ISO14443B_PONG 0xAB +// ASK C-ticket +#define ASK_REQT 0x10 +#define ASK_IDENTIFY 0x0F +#define ASK_SELECT 0x9F +#define ASK_MULTREAD (0x1 << 4) // High nibble +#define ASK_UPDATE (0x3 << 4) // High nibble +#define ASK_WRITE (0x5 << 4) // High nibble +#define ASK_READ (0x6 << 4) // High nibble +#define ASK_DESACTIVATE 0xF0 + // defined crypto RF commands // only interpreting channel 1 communication From b2e58df80746e9ad4acf2d0486205898888e0127 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Fri, 2 Oct 2020 14:31:03 +0200 Subject: [PATCH 0740/1047] new ref to inclue --- client/src/cmdhffelica.c | 2 +- client/src/cmdhffelica.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/client/src/cmdhffelica.c b/client/src/cmdhffelica.c index fde071419..092677b42 100644 --- a/client/src/cmdhffelica.c +++ b/client/src/cmdhffelica.c @@ -21,7 +21,7 @@ #include "crc16.h" #include "util.h" #include "ui.h" -#include "mifare.h" // felica_card_select_t struct +#include "iso18.h" // felica_card_select_t struct #include "des.h" #define AddCrc(data, len) compute_crc(CRC_FELICA, (data), (len), (data)+(len)+1, (data)+(len)) diff --git a/client/src/cmdhffelica.h b/client/src/cmdhffelica.h index 8d8156006..e7be7ede1 100644 --- a/client/src/cmdhffelica.h +++ b/client/src/cmdhffelica.h @@ -12,7 +12,7 @@ #define CMDHFFELICA_H__ #include "common.h" -#include "mifare.h" +#include "iso18.h" int CmdHFFelica(const char *Cmd); int readFelicaUid(bool verbose); From 9956c5af312eda970e02c814efdd86240b27f284 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Fri, 2 Oct 2020 14:31:11 +0200 Subject: [PATCH 0741/1047] new ref to inclue --- client/src/cmdhfcryptorf.c | 1 + 1 file changed, 1 insertion(+) diff --git a/client/src/cmdhfcryptorf.c b/client/src/cmdhfcryptorf.c index 98eada2ba..b473b2fa2 100644 --- a/client/src/cmdhfcryptorf.c +++ b/client/src/cmdhfcryptorf.c @@ -19,6 +19,7 @@ #include "crc16.h" #include "cmdhf14a.h" #include "protocols.h" // definitions of ISO14B protocol +#include "iso14b.h" #define TIMEOUT 2000 static int CmdHelp(const char *Cmd); From 31f5502171d2a5b59861d3d46d5c009a8d8e9790 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Fri, 2 Oct 2020 14:31:52 +0200 Subject: [PATCH 0742/1047] remade ASK C-ticket select to deviceside --- armsrc/felica.c | 2 +- armsrc/iso14443b.c | 93 +++++++++++++++++++++++++++-- armsrc/iso14443b.h | 2 +- client/src/cmdhf14b.c | 134 +++++++++++++++++++----------------------- 4 files changed, 149 insertions(+), 82 deletions(-) diff --git a/armsrc/felica.c b/armsrc/felica.c index 53f78d17b..aafdae5d8 100644 --- a/armsrc/felica.c +++ b/armsrc/felica.c @@ -9,7 +9,7 @@ #include "commonutil.h" #include "dbprint.h" #include "ticks.h" -#include "mifare.h" +#include "iso18.h" // FeliCa timings // minimum time between the start bits of consecutive transfers from reader to tag: 6800 carrier (13.56MHz) cycles diff --git a/armsrc/iso14443b.c b/armsrc/iso14443b.c index be8b820e0..e4fe67a64 100644 --- a/armsrc/iso14443b.c +++ b/armsrc/iso14443b.c @@ -902,7 +902,11 @@ static RAMFUNC int Handle14443bSamplesFromTag(int ci, int cq) { } } // we have still signal but no proper byte or EOF? this shouldn't happen + //Demod.posCount = 10 * 2; + Demod.bitCount = 0; + Demod.len = 0; Demod.state = WAIT_FOR_RISING_EDGE_OF_SOF; + break; } } Demod.posCount = 0; @@ -1253,6 +1257,79 @@ int iso14443b_apdu(uint8_t const *msg, size_t msg_len, bool send_chaining, uint8 return len; } +/** +* ASK CTS initialise. +*/ +static int iso14443b_select_cts_card(iso14b_cts_card_select_t *card) { + // INITIATE command: wake up the tag using the INITIATE + uint8_t cmdINIT[] = {ASK_REQT, 0xF9, 0xE0}; + uint8_t cmdMSBUID[] = {ASK_SELECT, 0xFF, 0xFF, 0x00, 0x00}; + uint8_t cmdLSBUID[] = {0xC4, 0x00, 0x00}; + + AddCrc14B(cmdMSBUID, 3); + AddCrc14B(cmdLSBUID, 1); + + uint8_t r[8]; + + uint32_t start_time = 0; + uint32_t eof_time = 0; + CodeAndTransmit14443bAsReader(cmdINIT, sizeof(cmdINIT), &start_time, &eof_time); + + eof_time += DELAY_ISO14443B_VCD_TO_VICC_READER; + int retlen = Get14443bAnswerFromTag(r, sizeof(r), ISO14443B_READER_TIMEOUT, &eof_time); + FpgaDisableTracing(); + + if (retlen != 4) { + return -1; + } + if (check_crc(CRC_14443_B, r, retlen) == false) { + return -2; + } + + if (card) { + // pc. fc Product code, Facility code + card->pc = r[0]; + card->fc = r[1]; + } + + start_time = eof_time + DELAY_ISO14443B_VICC_TO_VCD_READER; + CodeAndTransmit14443bAsReader(cmdMSBUID, sizeof(cmdMSBUID), &start_time, &eof_time); + + eof_time += DELAY_ISO14443B_VCD_TO_VICC_READER; + retlen = Get14443bAnswerFromTag(r, sizeof(r), ISO14443B_READER_TIMEOUT, &eof_time); + FpgaDisableTracing(); + + if (retlen != 4) { + return -1; + } + if (check_crc(CRC_14443_B, r, retlen) == false) { + return -2; + } + + if (card) { + memcpy(card->uid, r, 2); + } + + start_time = eof_time + DELAY_ISO14443B_VICC_TO_VCD_READER; + CodeAndTransmit14443bAsReader(cmdLSBUID, sizeof(cmdLSBUID), &start_time, &eof_time); + + eof_time += DELAY_ISO14443B_VCD_TO_VICC_READER; + retlen = Get14443bAnswerFromTag(r, sizeof(r), ISO14443B_READER_TIMEOUT, &eof_time); + FpgaDisableTracing(); + + if (retlen != 4) { + return -1; + } + if (check_crc(CRC_14443_B, r, retlen) == false) { + return -2; + } + + if (card) { + memcpy(card->uid + 2, r, 2); + } + + return 0; +} /** * SRx Initialise. */ @@ -1271,8 +1348,9 @@ static int iso14443b_select_srx_card(iso14b_card_select_t *card) { int retlen = Get14443bAnswerFromTag(r_init, sizeof(r_init), ISO14443B_READER_TIMEOUT, &eof_time); FpgaDisableTracing(); - if (retlen <= 0) + if (retlen <= 0) { return -1; + } // Randomly generated Chip ID if (card) { @@ -1295,8 +1373,6 @@ static int iso14443b_select_srx_card(iso14b_card_select_t *card) { if (retlen != 3) { return -1; } - - // Check the CRC of the answer: if (!check_crc(CRC_14443_B, r_select, retlen)) { return -2; } @@ -1321,8 +1397,6 @@ static int iso14443b_select_srx_card(iso14b_card_select_t *card) { if (retlen != 10) { return -1; } - - // The check the CRC of the answer if (!check_crc(CRC_14443_B, r_papid, retlen)) { return -2; } @@ -1793,6 +1867,15 @@ void SendRawCommand14443B_Ex(PacketCommandNG *c) { if (status > 0) goto out; } + if ((param & ISO14B_SELECT_CTS) == ISO14B_SELECT_CTS) { + iso14b_cts_card_select_t cts; + sendlen = sizeof(iso14b_cts_card_select_t); + status = iso14443b_select_cts_card(&cts); + reply_mix(CMD_HF_ISO14443B_COMMAND, status, sendlen, 0, (uint8_t *)&cts, sendlen); + // 0: OK 2: demod fail, 3:crc fail, + if (status > 0) goto out; + } + if ((param & ISO14B_APDU) == ISO14B_APDU) { status = iso14443b_apdu(cmd, len, (param & ISO14B_SEND_CHAINING), buf, sizeof(buf)); sendlen = MIN(Demod.len, PM3_CMD_DATA_SIZE); diff --git a/armsrc/iso14443b.h b/armsrc/iso14443b.h index 84c264c92..3fde4ffe0 100644 --- a/armsrc/iso14443b.h +++ b/armsrc/iso14443b.h @@ -15,7 +15,7 @@ #include "common.h" -#include "mifare.h" +#include "iso14b.h" #include "pm3_cmd.h" #ifndef AddCrc14A diff --git a/client/src/cmdhf14b.c b/client/src/cmdhf14b.c index 9bdeb8c91..fe496919e 100644 --- a/client/src/cmdhf14b.c +++ b/client/src/cmdhf14b.c @@ -11,6 +11,7 @@ #include "cmdhf14b.h" #include +#include "iso14b.h" #include "fileutils.h" #include "cmdparser.h" // command_t #include "commonutil.h" // ARRAYLEN @@ -43,10 +44,10 @@ static int usage_hf_14b_info(void) { return PM3_SUCCESS; } static int usage_hf_14b_reader(void) { - PrintAndLogEx(NORMAL, "Usage: hf 14b reader [h] [s]"); + PrintAndLogEx(NORMAL, "Usage: hf 14b reader [h] [v]"); PrintAndLogEx(NORMAL, "Options:"); PrintAndLogEx(NORMAL, " h this help"); - PrintAndLogEx(NORMAL, " s silently"); + PrintAndLogEx(NORMAL, " v verbose"); PrintAndLogEx(NORMAL, "Example:"); PrintAndLogEx(NORMAL, _YELLOW_(" hf 14b reader")); return PM3_SUCCESS; @@ -632,6 +633,20 @@ static void print_st_general_info(uint8_t *data, uint8_t len) { PrintAndLogEx(SUCCESS, "Chip: %02X, " _YELLOW_("%s"), chipid, get_ST_Chip_Model(chipid)); } +// print UID info from ASK CT chips +static void print_ct_general_info(void *vcard) { + iso14b_cts_card_select_t card; + memcpy(&card, (iso14b_cts_card_select_t *)vcard, sizeof(iso14b_cts_card_select_t)); + + uint32_t uid32 = (card.uid[0] |card.uid[1] << 8 |card.uid[2] << 16 | card.uid[3] << 24); + PrintAndLogEx(SUCCESS, "ASK C-Ticket"); + PrintAndLogEx(SUCCESS, " UID: " _GREEN_("%s") " ( " _YELLOW_("%u") " )", sprint_hex(card.uid, sizeof(card.uid)), uid32); + PrintAndLogEx(SUCCESS, " Product Code: %02X", card.pc); + PrintAndLogEx(SUCCESS, " Facility Code: %02X", card.fc); + PrintAndLogEx(NORMAL, ""); + +} + // iceman, some 14B APDU break down // 05 00 00 = find one tag in field // 1d xx xx xx xx 00 08 01 00 = attrib xx=UID (resp 10 [f9 e0]) @@ -726,7 +741,7 @@ static int CmdHF14Binfo(const char *Cmd) { return infoHF14B(verbose); } -static bool HF14B_ST_Reader(bool verbose) { +static bool HF14B_st_reader(bool verbose) { bool is_success = false; @@ -751,22 +766,22 @@ static bool HF14B_ST_Reader(bool verbose) { is_success = true; break; case -1: - if (verbose) PrintAndLogEx(FAILED, "ISO 14443-3 ATTRIB fail"); + if (verbose) PrintAndLogEx(FAILED, "ISO 14443-3 ST ATTRIB fail"); break; case -2: - if (verbose) PrintAndLogEx(FAILED, "ISO 14443-3 CRC fail"); + if (verbose) PrintAndLogEx(FAILED, "ISO 14443-3 ST CRC fail"); break; case -3: - if (verbose) PrintAndLogEx(FAILED, "ISO 14443-3 random chip id fail"); + if (verbose) PrintAndLogEx(FAILED, "ISO 14443-3 ST random chip id fail"); break; default: - if (verbose) PrintAndLogEx(FAILED, "ISO 14443-b card select SRx failed"); + if (verbose) PrintAndLogEx(FAILED, "ISO 14443-b ST card select SRx failed"); break; } return is_success; } -static bool HF14B_Std_Reader(bool verbose) { +static bool HF14B_std_reader(bool verbose) { bool is_success = false; @@ -810,77 +825,45 @@ static bool HF14B_Std_Reader(bool verbose) { return is_success; } -static bool HF14B_ask_ct_Reader(bool verbose) { - uint8_t cmd1[] = {0x10}; - uint8_t cmd2[] = {0x9F, 0xFF, 0xFF}; - uint8_t cmd3[] = {0xC4}; - uint8_t uid[4]; - uint8_t pc, fc; +static bool HF14B_ask_ct_reader(bool verbose) { + + bool is_success = false; // 14b get and print UID only (general info) - uint32_t flags = ISO14B_CONNECT | ISO14B_RAW | ISO14B_APPEND_CRC; + clearCommandBuffer(); PacketResponseNG resp; - int status; - - clearCommandBuffer(); - SendCommandMIX(CMD_HF_ISO14443B_COMMAND, flags, sizeof(cmd1), 0, cmd1, sizeof(cmd1)); - - if (!WaitForResponseTimeout(CMD_HF_ISO14443B_COMMAND, &resp, TIMEOUT)) { + SendCommandMIX(CMD_HF_ISO14443B_COMMAND, ISO14B_CONNECT | ISO14B_SELECT_CTS | ISO14B_DISCONNECT, 0, 0, NULL, 0); + if (WaitForResponseTimeout(CMD_HF_ISO14443B_COMMAND, &resp, TIMEOUT) == false) { if (verbose) PrintAndLogEx(WARNING, "command execution timeout"); - switch_off_field_14b(); return false; } - status = resp.oldarg[0]; - PrintAndLogEx(DEBUG, "status cmd1 %d", status); - if (status == 4) { - pc = resp.data.asBytes[0]; - fc = resp.data.asBytes[1]; - } else { - switch_off_field_14b(); - return false; - } - clearCommandBuffer(); - SendCommandMIX(CMD_HF_ISO14443B_COMMAND, flags, sizeof(cmd2), 0, cmd2, sizeof(cmd2)); - if (!WaitForResponseTimeout(CMD_HF_ISO14443B_COMMAND, &resp, TIMEOUT)) { - if (verbose) PrintAndLogEx(WARNING, "command execution timeout"); - switch_off_field_14b(); - return false; - } - status = resp.oldarg[0]; - PrintAndLogEx(DEBUG, "status cmd2 %d", status); - if (status == 4) { - uid[0] = resp.data.asBytes[0]; - uid[1] = resp.data.asBytes[1]; - } else { - switch_off_field_14b(); - return false; - } - clearCommandBuffer(); - SendCommandMIX(CMD_HF_ISO14443B_COMMAND, flags, sizeof(cmd3), 0, cmd3, sizeof(cmd3)); - if (!WaitForResponseTimeout(CMD_HF_ISO14443B_COMMAND, &resp, TIMEOUT)) { - if (verbose) PrintAndLogEx(WARNING, "command execution timeout"); - switch_off_field_14b(); - return false; - } - status = resp.oldarg[0]; - PrintAndLogEx(DEBUG, "status cmd3 %d", status); - if (status == 4) { - uid[2] = resp.data.asBytes[0]; - uid[3] = resp.data.asBytes[1]; - uint32_t uid32 = uid[0] + (uid[1] << 8) + (uid[2] << 16) + (uid[3] << 24); - PrintAndLogEx(SUCCESS, "\nASK CT - 14443-3b tag found:"); - PrintAndLogEx(SUCCESS, "UID: %02X%02X%02X%02X (%u) Product code: %02X Fab code: %02X", uid[0], uid[1], uid[2], uid[3], uid32, pc, fc); - switch_off_field_14b(); - return true; - } else { - switch_off_field_14b(); - return false; + int status = resp.oldarg[0]; + + switch (status) { + case 0: { + print_ct_general_info(resp.data.asBytes); + is_success = true; + break; + } + case -1: { + if (verbose) PrintAndLogEx(FAILED, "ISO 14443-3 CTS wrong length"); + break; + } + case -2: { + if (verbose) PrintAndLogEx(FAILED, "ISO 14443-3 CTS CRC fail"); + break; + } + default: { + if (verbose) PrintAndLogEx(FAILED, "ISO 14443-b CTS card select failed"); + break; + } } + return is_success; } // test for other 14b type tags (mimic another reader - don't have tags to identify) -static bool HF14B_Other_Reader(bool verbose) { +static bool HF14B_other_reader(bool verbose) { uint8_t data[] = {0x00, 0x0b, 0x3f, 0x80}; uint8_t datalen = 4; @@ -969,7 +952,7 @@ static bool HF14B_Other_Reader(bool verbose) { static int CmdHF14BReader(const char *Cmd) { char cmdp = tolower(param_getchar(Cmd, 0)); if (cmdp == 'h') return usage_hf_14b_reader(); - bool verbose = !(cmdp == 's'); + bool verbose = (cmdp == 'v'); return readHF14B(verbose); } @@ -1806,19 +1789,20 @@ int infoHF14B(bool verbose) { int readHF14B(bool verbose) { // try std 14b (atqb) - if (HF14B_Std_Reader(verbose)) + if (HF14B_std_reader(verbose)) return 1; // try ST Microelectronics 14b - if (HF14B_ST_Reader(verbose)) + if (HF14B_st_reader(verbose)) + return 1; + + // try ASK CT 14b + if (HF14B_ask_ct_reader(verbose)) return 1; // try unknown 14b read commands (to be identified later) // could be read of calypso, CEPAS, moneo, or pico pass. - if (HF14B_Other_Reader(verbose)) - return 1; - - if (HF14B_ask_ct_Reader(verbose)) + if (HF14B_other_reader(verbose)) return 1; if (verbose) PrintAndLogEx(FAILED, "no 14443-B tag found"); From 235cca276d17a6ec9db66605f22a0a64f3a9e61f Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Fri, 2 Oct 2020 14:32:16 +0200 Subject: [PATCH 0743/1047] moved old type --- include/mifare.h | 150 +++-------------------------------------------- 1 file changed, 7 insertions(+), 143 deletions(-) diff --git a/include/mifare.h b/include/mifare.h index f8cdf72af..2fe6b84e4 100644 --- a/include/mifare.h +++ b/include/mifare.h @@ -94,40 +94,6 @@ typedef enum { MFDES_ALGO_AES = 4 } mifare_des_authalgo_t; - -//----------------------------------------------------------------------------- -// ISO 14443B -//----------------------------------------------------------------------------- -typedef struct { - uint8_t uid[10]; - uint8_t uidlen; - uint8_t atqb[7]; - uint8_t chipid; - uint8_t cid; -} PACKED iso14b_card_select_t; - -typedef enum ISO14B_COMMAND { - ISO14B_CONNECT = (1 << 0), - ISO14B_DISCONNECT = (1 << 1), - ISO14B_APDU = (1 << 2), - ISO14B_RAW = (1 << 3), - ISO14B_REQUEST_TRIGGER = (1 << 4), - ISO14B_APPEND_CRC = (1 << 5), - ISO14B_SELECT_STD = (1 << 6), - ISO14B_SELECT_SR = (1 << 7), - ISO14B_SET_TIMEOUT = (1 << 8), - ISO14B_SEND_CHAINING = (1 << 9), -} iso14b_command_t; - -typedef enum ISO15_COMMAND { - ISO15_CONNECT = (1 << 0), - ISO15_NO_DISCONNECT = (1 << 1), - ISO15_RAW = (1 << 2), - ISO15_APPEND_CRC = (1 << 3), - ISO15_HIGH_SPEED = (1 << 4), - ISO15_READ_RESPONSE = (1 << 5) -} iso15_command_t; - //----------------------------------------------------------------------------- // "hf 14a sim x", "hf mf sim x" attacks //----------------------------------------------------------------------------- @@ -158,116 +124,14 @@ typedef struct { } PACKED smart_card_atr_t; typedef enum SMARTCARD_COMMAND { - SC_CONNECT = (1 << 0), - SC_NO_DISCONNECT = (1 << 1), - SC_RAW = (1 << 2), - SC_SELECT = (1 << 3), - SC_RAW_T0 = (1 << 4), - SC_CLEARLOG = (1 << 5), - SC_LOG = (1 << 6), + SC_CONNECT = (1 << 0), + SC_NO_DISCONNECT = (1 << 1), + SC_RAW = (1 << 2), + SC_SELECT = (1 << 3), + SC_RAW_T0 = (1 << 4), + SC_CLEARLOG = (1 << 5), + SC_LOG = (1 << 6), } smartcard_command_t; -//----------------------------------------------------------------------------- -// FeliCa -//----------------------------------------------------------------------------- -// IDm = ID manufacturer -// mc = manufactureCode -// mc1 mc2 u1 u2 u3 u4 u5 u6 -// PMm = Product manufacturer -// icCode = -// ic1 = ROM -// ic2 = IC -// maximum response time = -// B3(request service) -// B4(request response) -// B5(authenticate) -// B6(read) -// B7(write) -// B8() - -// ServiceCode 2bytes (access-rights) -// FileSystem = 1 Block = 16 bytes -typedef struct { - uint8_t IDm[8]; - uint8_t code[2]; - uint8_t uid[6]; - uint8_t PMm[8]; - uint8_t iccode[2]; - uint8_t mrt[6]; - uint8_t servicecode[2]; -} PACKED felica_card_select_t; - -typedef struct { - uint8_t sync[2]; - uint8_t length[1]; - uint8_t cmd_code[1]; - uint8_t IDm[8]; -} PACKED felica_frame_response_t; - -typedef struct { - uint8_t status_flag1[1]; - uint8_t status_flag2[1]; -} PACKED felica_status_flags_t; - -typedef struct { - felica_frame_response_t frame_response; - uint8_t node_number[1]; - uint8_t node_key_versions[2]; -} PACKED felica_request_service_response_t; - -typedef struct { - felica_frame_response_t frame_response; - uint8_t mode[1]; -} PACKED felica_request_request_response_t; - -typedef struct { - felica_frame_response_t frame_response; - felica_status_flags_t status_flags; - uint8_t number_of_block[1]; - uint8_t block_data[16]; - uint8_t block_element_number[1]; -} PACKED felica_read_without_encryption_response_t; - -typedef struct { - felica_frame_response_t frame_response; - felica_status_flags_t status_flags; -} PACKED felica_status_response_t; - -typedef struct { - felica_frame_response_t frame_response; - uint8_t number_of_systems[1]; - uint8_t system_code_list[32]; -} PACKED felica_syscode_response_t; - -typedef struct { - felica_frame_response_t frame_response; - felica_status_flags_t status_flags; - uint8_t format_version[1]; - uint8_t basic_version[2]; - uint8_t number_of_option[1]; - uint8_t option_version_list[4]; -} PACKED felica_request_spec_response_t; - -typedef struct { - felica_frame_response_t frame_response; - uint8_t m2c[8]; - uint8_t m3c[8]; -} PACKED felica_auth1_response_t; - -typedef struct { - uint8_t code[1]; - uint8_t IDtc[8]; - uint8_t IDi[8]; - uint8_t PMi[8]; -} PACKED felica_auth2_response_t; - - -typedef enum FELICA_COMMAND { - FELICA_CONNECT = (1 << 0), - FELICA_NO_DISCONNECT = (1 << 1), - FELICA_RAW = (1 << 3), - FELICA_APPEND_CRC = (1 << 5), - FELICA_NO_SELECT = (1 << 6), -} felica_command_t; #endif // _MIFARE_H_ From c3872e626b0c99bc06a0e48284f6fbfad6ec87b4 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Fri, 2 Oct 2020 15:26:10 +0200 Subject: [PATCH 0744/1047] hf 14b raw -> now using cliparser. -s now has number to denote which select to use. 0,1,2 --- client/src/cmdhf14b.c | 145 ++++++++++++++++++------------------------ 1 file changed, 62 insertions(+), 83 deletions(-) diff --git a/client/src/cmdhf14b.c b/client/src/cmdhf14b.c index fe496919e..cc8067f7c 100644 --- a/client/src/cmdhf14b.c +++ b/client/src/cmdhf14b.c @@ -52,20 +52,6 @@ static int usage_hf_14b_reader(void) { PrintAndLogEx(NORMAL, _YELLOW_(" hf 14b reader")); return PM3_SUCCESS; } -static int usage_hf_14b_raw(void) { - PrintAndLogEx(NORMAL, "Usage: hf 14b raw [-h] [-r] [-c] [-k] [-s / -ss] [-t] <0A 0B 0C ... hex>"); - PrintAndLogEx(NORMAL, "Options:"); - PrintAndLogEx(NORMAL, " -h this help"); - PrintAndLogEx(NORMAL, " -r do not read response"); - PrintAndLogEx(NORMAL, " -c calculate and append CRC"); - PrintAndLogEx(NORMAL, " -k keep signal field ON after receive"); - PrintAndLogEx(NORMAL, " -s active signal field ON with select"); - PrintAndLogEx(NORMAL, " -ss active signal field ON with select for SRx ST Microelectronics tags"); - PrintAndLogEx(NORMAL, " -t timeout in ms"); - PrintAndLogEx(NORMAL, "Example:"); - PrintAndLogEx(NORMAL, _YELLOW_(" hf 14b raw -s -c -k 0200a40400")); - return PM3_SUCCESS; -} static int usage_hf_14b_sniff(void) { PrintAndLogEx(NORMAL, "It get data from the field and saves it into command buffer."); PrintAndLogEx(NORMAL, "Buffer accessible from command 'hf list 14b'"); @@ -162,6 +148,8 @@ static bool waitCmd14b(bool verbose) { (crc) ? _GREEN_("ok") : _RED_("fail") ); } else if (len == 0) { + if (verbose) + PrintAndLogEx(INFO, "no response from tag"); } else { PrintAndLogEx(SUCCESS, "len %u | %s", len, sprint_hex(data, len)); } @@ -204,76 +192,67 @@ static int CmdHF14BSniff(const char *Cmd) { } static int CmdHF14BCmdRaw(const char *Cmd) { - bool reply = true, keep_field_on = false, select = false, hasTimeout = false; - char buf[5] = ""; - int i = 0; - uint8_t data[PM3_CMD_DATA_SIZE] = {0x00}; - uint16_t datalen = 0; + + CLIParserContext *ctx; + CLIParserInit(&ctx, "hf 14b raw", + "Sends raw bytes to card ", + "hf 14b raw -s 0 -c -k 0200a40400" + ); + + void *argtable[] = { + arg_param_begin, + arg_lit0("k", "keep", "leave the signal field ON after receive response"), + arg_int0("s", "select", "decimal", "activate field and select card (0 = std, 1 = SRx ST, 2 = ASK C-ticket"), + arg_lit0("c", "crc", "calculate and append CRC"), + arg_lit0("r", "noresponse", "do not read response"), + arg_int0("t", "timeout", "decimal", "timeout in ms"), + arg_lit0("v", "verbose", "verbose"), + arg_strx0(NULL, NULL, "", "bytes to send"), + arg_param_end + }; + CLIExecWithReturn(ctx, Cmd, argtable, false); + + bool select = false; + bool keep_field_on = arg_get_lit(ctx, 1); + int select_type = arg_get_int_def(ctx, 2, -1); + bool add_crc = arg_get_lit(ctx, 3); + bool read_reply = arg_get_lit(ctx, 4); + int user_timeout = arg_get_int_def(ctx, 5, -1); + bool verbose = arg_get_lit(ctx, 6); + uint32_t flags = ISO14B_CONNECT; - uint32_t temp = 0, user_timeout = 0, time_wait = 0; - - if (strlen(Cmd) < 2) return usage_hf_14b_raw(); - - // strip - while (*Cmd == ' ' || *Cmd == '\t') ++Cmd; - - while (Cmd[i] != '\0') { - if (Cmd[i] == ' ' || Cmd[i] == '\t') { ++i; continue; } - if (Cmd[i] == '-') { - switch (tolower(Cmd[i + 1])) { - case 'h': - return usage_hf_14b_raw(); - case 'r': - reply = false; - break; - case 'c': - flags |= ISO14B_APPEND_CRC; - break; - case 'k': - keep_field_on = true; - break; - case 's': - select = true; - if (tolower(Cmd[i + 2]) == 's') { - flags |= ISO14B_SELECT_SR; - ++i; - } else { - flags |= ISO14B_SELECT_STD; - } - break; - case 't': - hasTimeout = true; - sscanf(Cmd + i + 2, "%d", &user_timeout); - i += 3; - while (Cmd[i] != ' ' && Cmd[i] != '\0') { i++; } - i -= 2; - break; - default: - return usage_hf_14b_raw(); - } - i += 2; - continue; - } - if ((Cmd[i] >= '0' && Cmd[i] <= '9') || - (Cmd[i] >= 'a' && Cmd[i] <= 'f') || - (Cmd[i] >= 'A' && Cmd[i] <= 'F')) { - buf[strlen(buf) + 1] = 0; - buf[strlen(buf)] = Cmd[i]; - i++; - - if (strlen(buf) >= 2) { - sscanf(buf, "%x", &temp); - data[datalen++] = (uint8_t)(temp & 0xff); - *buf = 0; - memset(buf, 0x00, sizeof(buf)); - } - continue; - } - PrintAndLogEx(WARNING, "unknown parameter '%c'\n", param_getchar(Cmd, i)); - return PM3_EINVARG; + if (add_crc) { + flags |= ISO14B_APPEND_CRC; } - if (hasTimeout) { + switch(select_type) { + case 0: + select = true; + flags |= ISO14B_SELECT_STD; + if (verbose) + PrintAndLogEx(INFO, "using standard select"); + break; + case 1: + select = true; + flags |= ISO14B_SELECT_SR; + if (verbose) + PrintAndLogEx(INFO, "using SRx ST select"); + break; + case 2: + select = true; + flags |= ISO14B_SELECT_CTS; + if (verbose) + PrintAndLogEx(INFO, "using ASK C-ticket select"); + break; + } + + uint8_t data[PM3_CMD_DATA_SIZE] = {0x00}; + int datalen = 0; + CLIParamHexToBuf(arg_get_str(ctx, 7), data, sizeof(data), &datalen); + CLIParserFree(ctx); + + uint32_t time_wait = 0; + if (user_timeout > 0) { #define MAX_14B_TIMEOUT 40542464 // = (2^32-1) * (8*16) / 13560000Hz * 1000ms/s flags |= ISO14B_SET_TIMEOUT; @@ -296,14 +275,14 @@ static int CmdHF14BCmdRaw(const char *Cmd) { clearCommandBuffer(); SendCommandMIX(CMD_HF_ISO14443B_COMMAND, flags, datalen, time_wait, data, datalen); - if (reply == false) { + if (read_reply == false) { return PM3_SUCCESS; } bool success = true; // get back iso14b_card_select_t, don't print it. if (select) { - success = waitCmd14b(false); + success = waitCmd14b(verbose); } // get back response from the raw bytes you sent. From 206b699af44d4b2d5c1e27b92b7341c328ebb23d Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Fri, 2 Oct 2020 16:53:03 +0200 Subject: [PATCH 0745/1047] hf 14b raw - adapt params --- client/src/cmdhf14b.c | 81 ++++++++++++++++++++++++------------------- 1 file changed, 45 insertions(+), 36 deletions(-) diff --git a/client/src/cmdhf14b.c b/client/src/cmdhf14b.c index cc8067f7c..46969145f 100644 --- a/client/src/cmdhf14b.c +++ b/client/src/cmdhf14b.c @@ -127,7 +127,7 @@ static uint16_t get_sw(uint8_t *d, uint8_t n) { return d[n] * 0x0100 + d[n + 1]; } -static bool waitCmd14b(bool verbose) { +static bool wait_cmd_14b(bool verbose) { PacketResponseNG resp; if (WaitForResponseTimeout(CMD_HF_ISO14443B_COMMAND, &resp, TIMEOUT)) { @@ -196,13 +196,17 @@ static int CmdHF14BCmdRaw(const char *Cmd) { CLIParserContext *ctx; CLIParserInit(&ctx, "hf 14b raw", "Sends raw bytes to card ", - "hf 14b raw -s 0 -c -k 0200a40400" + "hf 14b raw -s -c -k 0200a40400\n" + "hf 14b raw --sr -c -k 0200a40400\n" + "hf 14b raw --cts -c -k 0200a40400\n" ); void *argtable[] = { arg_param_begin, arg_lit0("k", "keep", "leave the signal field ON after receive response"), - arg_int0("s", "select", "decimal", "activate field and select card (0 = std, 1 = SRx ST, 2 = ASK C-ticket"), + arg_lit0("s", "std", "activate field and select standard card"), + arg_lit0(NULL, "sr", "activate field and select SRx ST"), + arg_lit0(NULL, "cts", "activate field and select ASK C-ticket"), arg_lit0("c", "crc", "calculate and append CRC"), arg_lit0("r", "noresponse", "do not read response"), arg_int0("t", "timeout", "decimal", "timeout in ms"), @@ -214,41 +218,39 @@ static int CmdHF14BCmdRaw(const char *Cmd) { bool select = false; bool keep_field_on = arg_get_lit(ctx, 1); - int select_type = arg_get_int_def(ctx, 2, -1); - bool add_crc = arg_get_lit(ctx, 3); - bool read_reply = arg_get_lit(ctx, 4); - int user_timeout = arg_get_int_def(ctx, 5, -1); - bool verbose = arg_get_lit(ctx, 6); + bool select_std = arg_get_lit(ctx, 2); + bool select_sr = arg_get_lit(ctx, 3); + bool select_cts = arg_get_lit(ctx, 4); + bool add_crc = arg_get_lit(ctx, 5); + bool read_reply = !arg_get_lit(ctx, 6); + int user_timeout = arg_get_int_def(ctx, 7, -1); + bool verbose = arg_get_lit(ctx, 8); uint32_t flags = ISO14B_CONNECT; if (add_crc) { flags |= ISO14B_APPEND_CRC; } - switch(select_type) { - case 0: - select = true; - flags |= ISO14B_SELECT_STD; - if (verbose) - PrintAndLogEx(INFO, "using standard select"); - break; - case 1: - select = true; - flags |= ISO14B_SELECT_SR; - if (verbose) - PrintAndLogEx(INFO, "using SRx ST select"); - break; - case 2: - select = true; - flags |= ISO14B_SELECT_CTS; - if (verbose) - PrintAndLogEx(INFO, "using ASK C-ticket select"); - break; + if (select_std) { + select = true; + flags |= ISO14B_SELECT_STD; + if (verbose) + PrintAndLogEx(INFO, "using standard select"); + } else if (select_sr) { + select = true; + flags |= ISO14B_SELECT_SR; + if (verbose) + PrintAndLogEx(INFO, "using SRx ST select"); + } else if (select_cts) { + select = true; + flags |= ISO14B_SELECT_CTS; + if (verbose) + PrintAndLogEx(INFO, "using ASK C-ticket select"); } uint8_t data[PM3_CMD_DATA_SIZE] = {0x00}; int datalen = 0; - CLIParamHexToBuf(arg_get_str(ctx, 7), data, sizeof(data), &datalen); + CLIParamHexToBuf(arg_get_str(ctx, 9), data, sizeof(data), &datalen); CLIParserFree(ctx); uint32_t time_wait = 0; @@ -258,9 +260,11 @@ static int CmdHF14BCmdRaw(const char *Cmd) { flags |= ISO14B_SET_TIMEOUT; if (user_timeout > MAX_14B_TIMEOUT) { user_timeout = MAX_14B_TIMEOUT; - PrintAndLogEx(INFO, "Set timeout to 40542 seconds (11.26 hours). The max we can wait for response"); + PrintAndLogEx(INFO, "set timeout to 40542 seconds (11.26 hours). The max we can wait for response"); } time_wait = 13560000 / 1000 / (8 * 16) * user_timeout; // timeout in ETUs (time to transfer 1 bit, approx. 9.4 us) + if (verbose) + PrintAndLogEx(INFO, "using timeout %u", user_timeout); } if (keep_field_on == 0) @@ -274,7 +278,6 @@ static int CmdHF14BCmdRaw(const char *Cmd) { clearCommandBuffer(); SendCommandMIX(CMD_HF_ISO14443B_COMMAND, flags, datalen, time_wait, data, datalen); - if (read_reply == false) { return PM3_SUCCESS; } @@ -282,12 +285,12 @@ static int CmdHF14BCmdRaw(const char *Cmd) { bool success = true; // get back iso14b_card_select_t, don't print it. if (select) { - success = waitCmd14b(verbose); + success = wait_cmd_14b(verbose); } // get back response from the raw bytes you sent. if (success && datalen > 0) { - waitCmd14b(true); + wait_cmd_14b(true); } return PM3_SUCCESS; @@ -1309,14 +1312,20 @@ static int select_card_14443b_4(bool disconnect, iso14b_card_select_t *card) { // Anticollision + SELECT STD card SendCommandMIX(CMD_HF_ISO14443B_COMMAND, ISO14B_CONNECT | ISO14B_SELECT_STD, 0, 0, NULL, 0); if (WaitForResponseTimeout(CMD_HF_ISO14443B_COMMAND, &resp, TIMEOUT) == false) { - PrintAndLogEx(INFO, "Trying 14B Select SR"); + PrintAndLogEx(INFO, "Trying 14B Select SRx"); // Anticollision + SELECT SR card SendCommandMIX(CMD_HF_ISO14443B_COMMAND, ISO14B_CONNECT | ISO14B_SELECT_SR, 0, 0, NULL, 0); if (WaitForResponseTimeout(CMD_HF_ISO14443B_COMMAND, &resp, TIMEOUT) == false) { - PrintAndLogEx(ERR, "connection timeout"); - switch_off_field_14b(); - return PM3_ESOFT; + PrintAndLogEx(INFO, "Trying 14B Select CTS"); + + // Anticollision + SELECT ASK C-Ticket card + SendCommandMIX(CMD_HF_ISO14443B_COMMAND, ISO14B_CONNECT | ISO14B_SELECT_CTS, 0, 0, NULL, 0); + if (WaitForResponseTimeout(CMD_HF_ISO14443B_COMMAND, &resp, TIMEOUT) == false) { + PrintAndLogEx(ERR, "connection timeout"); + switch_off_field_14b(); + return PM3_ESOFT; + } } } From 67a672e6dc5c04ea6bc02362d54d28fef6f51f3b Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Fri, 2 Oct 2020 17:06:42 +0200 Subject: [PATCH 0746/1047] hf 14b sniff - wait for button press --- client/src/cmdhf14b.c | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/client/src/cmdhf14b.c b/client/src/cmdhf14b.c index 46969145f..a1be64ffd 100644 --- a/client/src/cmdhf14b.c +++ b/client/src/cmdhf14b.c @@ -52,16 +52,6 @@ static int usage_hf_14b_reader(void) { PrintAndLogEx(NORMAL, _YELLOW_(" hf 14b reader")); return PM3_SUCCESS; } -static int usage_hf_14b_sniff(void) { - PrintAndLogEx(NORMAL, "It get data from the field and saves it into command buffer."); - PrintAndLogEx(NORMAL, "Buffer accessible from command 'hf list 14b'"); - PrintAndLogEx(NORMAL, "Usage: hf 14b sniff [h]"); - PrintAndLogEx(NORMAL, "Options:"); - PrintAndLogEx(NORMAL, " h this help"); - PrintAndLogEx(NORMAL, "Example:"); - PrintAndLogEx(NORMAL, _YELLOW_(" hf 14b sniff")); - return PM3_SUCCESS; -} static int usage_hf_14b_sim(void) { PrintAndLogEx(NORMAL, "Emulating ISO/IEC 14443 type B tag with 4 UID / PUPI"); PrintAndLogEx(NORMAL, "Usage: hf 14b sim [h] u "); @@ -183,11 +173,27 @@ static int CmdHF14BSim(const char *Cmd) { static int CmdHF14BSniff(const char *Cmd) { - char cmdp = tolower(param_getchar(Cmd, 0)); - if (cmdp == 'h') return usage_hf_14b_sniff(); - + CLIParserContext *ctx; + CLIParserInit(&ctx, "hf 14b sniff", + "Sniff the communication reader and tag", + "hf 14b sniff" + ); + + void *argtable[] = { + arg_param_begin, + arg_param_end + }; + CLIExecWithReturn(ctx, Cmd, argtable, true); + CLIParserFree(ctx); + + PacketResponseNG resp; clearCommandBuffer(); SendCommandNG(CMD_HF_ISO14443B_SNIFF, NULL, 0); + + WaitForResponse(CMD_HF_ISO14443B_SNIFF, &resp); + + PrintAndLogEx(HINT, "Try `" _YELLOW_("hf 14b list") "` to view captured tracelog"); + PrintAndLogEx(HINT, "Try `" _YELLOW_("trace save h") "` to save tracelog for later analysing"); return PM3_SUCCESS; } From 19a458e31efc35d6fda9e66969cb24eed59e25cc Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Fri, 2 Oct 2020 17:07:03 +0200 Subject: [PATCH 0747/1047] textual --- client/src/cmdhf14a.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/src/cmdhf14a.c b/client/src/cmdhf14a.c index 4044273a7..49cdf2e90 100644 --- a/client/src/cmdhf14a.c +++ b/client/src/cmdhf14a.c @@ -236,8 +236,8 @@ static int usage_hf_14a_sim(void) { return PM3_SUCCESS; } static int usage_hf_14a_sniff(void) { - PrintAndLogEx(NORMAL, "It get data from the field and saves it into command buffer."); - PrintAndLogEx(NORMAL, "Buffer accessible from command 'hf list 14a'"); + PrintAndLogEx(NORMAL, "Collect data from the field and save into command buffer."); + PrintAndLogEx(NORMAL, "Buffer accessible from command 'hf 14a list'"); PrintAndLogEx(NORMAL, "Usage: hf 14a sniff [c][r]"); PrintAndLogEx(NORMAL, "c - triggered by first data from card"); PrintAndLogEx(NORMAL, "r - triggered by first 7-bit request from reader (REQ,WUP,...)"); From 01af87e6d7bbb6342c7983c0f67585b30be9487f Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Fri, 2 Oct 2020 18:06:21 +0200 Subject: [PATCH 0748/1047] hf 14b sniff, sim, info, - now uses cliparser --- armsrc/appmain.c | 3 +- armsrc/iso14443b.c | 12 +++--- armsrc/iso14443b.h | 2 +- client/src/cmdhf14b.c | 91 +++++++++++++++++++++++-------------------- 4 files changed, 56 insertions(+), 52 deletions(-) diff --git a/armsrc/appmain.c b/armsrc/appmain.c index 42161d738..2c6ace8ee 100644 --- a/armsrc/appmain.c +++ b/armsrc/appmain.c @@ -1126,11 +1126,10 @@ static void PacketReceived(PacketCommandNG *packet) { break; } case CMD_HF_ISO14443B_SIMULATE: { - SimulateIso14443bTag(packet->oldarg[0]); + SimulateIso14443bTag(packet->data.asBytes); break; } case CMD_HF_ISO14443B_COMMAND: { - //SendRawCommand14443B(packet->oldarg[0],packet->oldarg[1],packet->oldarg[2],packet->data.asBytes); SendRawCommand14443B_Ex(packet); break; } diff --git a/armsrc/iso14443b.c b/armsrc/iso14443b.c index e4fe67a64..ccbe06e5c 100644 --- a/armsrc/iso14443b.c +++ b/armsrc/iso14443b.c @@ -530,7 +530,7 @@ static void TransmitFor14443b_AsTag(uint8_t *response, uint16_t len) { // Main loop of simulated tag: receive commands from reader, decide what // response to send, and send it. //----------------------------------------------------------------------------- -void SimulateIso14443bTag(uint32_t pupi) { +void SimulateIso14443bTag(uint8_t *pupi) { LED_A_ON(); // the only commands we understand is WUPB, AFI=0, Select All, N=1: @@ -553,15 +553,15 @@ void SimulateIso14443bTag(uint32_t pupi) { 0x5e, 0xd7 }; - // response to HLTB and ATTRIB - static const uint8_t respOK[] = {0x00, 0x78, 0xF0}; - // ...PUPI/UID supplied from user. Adjust ATQB response accordingly - if (pupi > 0) { - num_to_bytes(pupi, 4, respATQB + 1); + if (memcmp("\x00\x00\x00\x00", pupi, 4) != 0) { + memcpy(respATQB + 1, pupi, 4); AddCrc14B(respATQB, 12); } + // response to HLTB and ATTRIB + static const uint8_t respOK[] = {0x00, 0x78, 0xF0}; + // setup device. FpgaDownloadAndGo(FPGA_BITSTREAM_HF); diff --git a/armsrc/iso14443b.h b/armsrc/iso14443b.h index 3fde4ffe0..7e5023e1b 100644 --- a/armsrc/iso14443b.h +++ b/armsrc/iso14443b.h @@ -32,7 +32,7 @@ int iso14443b_apdu(uint8_t const *msg, size_t msg_len, bool send_chaining, uint8 int iso14443b_select_card(iso14b_card_select_t *card); int iso14443b_select_card_srx(iso14b_card_select_t *card); -void SimulateIso14443bTag(uint32_t pupi); +void SimulateIso14443bTag(uint8_t *pupi); void AcquireRawAdcSamplesIso14443b(uint32_t parameter); void ReadSTMemoryIso14443b(uint16_t numofblocks); void SniffIso14443b(void); diff --git a/client/src/cmdhf14b.c b/client/src/cmdhf14b.c index a1be64ffd..dd90a4e39 100644 --- a/client/src/cmdhf14b.c +++ b/client/src/cmdhf14b.c @@ -34,35 +34,6 @@ bool apdu_in_framing_enable = true; static int CmdHelp(const char *Cmd); -static int usage_hf_14b_info(void) { - PrintAndLogEx(NORMAL, "Usage: hf 14b info [h] [s]"); - PrintAndLogEx(NORMAL, "Options:"); - PrintAndLogEx(NORMAL, " h this help"); - PrintAndLogEx(NORMAL, " s silently"); - PrintAndLogEx(NORMAL, "Example:"); - PrintAndLogEx(NORMAL, _YELLOW_(" hf 14b info")); - return PM3_SUCCESS; -} -static int usage_hf_14b_reader(void) { - PrintAndLogEx(NORMAL, "Usage: hf 14b reader [h] [v]"); - PrintAndLogEx(NORMAL, "Options:"); - PrintAndLogEx(NORMAL, " h this help"); - PrintAndLogEx(NORMAL, " v verbose"); - PrintAndLogEx(NORMAL, "Example:"); - PrintAndLogEx(NORMAL, _YELLOW_(" hf 14b reader")); - return PM3_SUCCESS; -} -static int usage_hf_14b_sim(void) { - PrintAndLogEx(NORMAL, "Emulating ISO/IEC 14443 type B tag with 4 UID / PUPI"); - PrintAndLogEx(NORMAL, "Usage: hf 14b sim [h] u "); - PrintAndLogEx(NORMAL, "Options:"); - PrintAndLogEx(NORMAL, " h this help"); - PrintAndLogEx(NORMAL, " u 4byte UID/PUPI"); - PrintAndLogEx(NORMAL, "Example:"); - PrintAndLogEx(NORMAL, _YELLOW_(" hf 14b sim")); - PrintAndLogEx(NORMAL, _YELLOW_(" hf 14b sim u 11223344")); - return PM3_SUCCESS; -} static int usage_hf_14b_read_srx(void) { PrintAndLogEx(NORMAL, "Usage: hf 14b sriread [h] <1|2>"); PrintAndLogEx(NORMAL, "Options:"); @@ -158,16 +129,29 @@ static int CmdHF14BList(const char *Cmd) { } static int CmdHF14BSim(const char *Cmd) { - char cmdp = tolower(param_getchar(Cmd, 0)); - if (cmdp == 'h') return usage_hf_14b_sim(); - - uint32_t pupi = 0; - if (cmdp == 'u') { - pupi = param_get32ex(Cmd, 1, 0, 16); - } + + CLIParserContext *ctx; + CLIParserInit(&ctx, "hf 14b sim", + "Simulate a ISO/IEC 14443 type B tag with 4 byte UID / PUPI", + "hf 14b sim\n" + "hf 14b sim -u 11AA33BB" + ); + + void *argtable[] = { + arg_param_begin, + arg_strx0("u", "uid", "hex", "4byte UID/PUPI"), + arg_param_end + }; + CLIExecWithReturn(ctx, Cmd, argtable, true); + + uint8_t pupi[4]; + int n = 0; + CLIParamHexToBuf(arg_get_str(ctx, 1), pupi, sizeof(pupi), &n); + CLIParserFree(ctx); clearCommandBuffer(); - SendCommandMIX(CMD_HF_ISO14443B_SIMULATE, pupi, 0, 0, NULL, 0); + SendCommandNG(CMD_HF_ISO14443B_SIMULATE, pupi, sizeof(pupi)); + return PM3_SUCCESS; } @@ -722,10 +706,20 @@ static bool HF14B_ST_Info(bool verbose) { // menu command to get and print all info known about any known 14b tag static int CmdHF14Binfo(const char *Cmd) { - char cmdp = tolower(param_getchar(Cmd, 0)); - if (cmdp == 'h') return usage_hf_14b_info(); + CLIParserContext *ctx; + CLIParserInit(&ctx, "hf 14b info", + "Tag information for ISO/IEC 14443 type B based tags", + "hf 14b info\n" + ); - bool verbose = !(cmdp == 's'); + void *argtable[] = { + arg_param_begin, + arg_lit0("v", "verbose", "verbose"), + arg_param_end + }; + CLIExecWithReturn(ctx, Cmd, argtable, true); + bool verbose = arg_get_lit(ctx, 1); + CLIParserFree(ctx); return infoHF14B(verbose); } @@ -938,9 +932,20 @@ static bool HF14B_other_reader(bool verbose) { // menu command to get and print general info about all known 14b chips static int CmdHF14BReader(const char *Cmd) { - char cmdp = tolower(param_getchar(Cmd, 0)); - if (cmdp == 'h') return usage_hf_14b_reader(); - bool verbose = (cmdp == 'v'); + CLIParserContext *ctx; + CLIParserInit(&ctx, "hf 14b reader", + "Act as a 14443B reader to identify a tag", + "hf 14b reader\n" + ); + + void *argtable[] = { + arg_param_begin, + arg_lit0("v", "verbose", "verbose"), + arg_param_end + }; + CLIExecWithReturn(ctx, Cmd, argtable, true); + bool verbose = arg_get_lit(ctx, 1); + CLIParserFree(ctx); return readHF14B(verbose); } From 2b4124d66566a9d18701642b582ec043302d99fd Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Fri, 2 Oct 2020 19:40:01 +0200 Subject: [PATCH 0749/1047] hf 14b dump - now uses cliparser, and only work on ST SRx tags --- client/src/cmdhf14b.c | 90 +++++++++++++++++-------------------------- 1 file changed, 35 insertions(+), 55 deletions(-) diff --git a/client/src/cmdhf14b.c b/client/src/cmdhf14b.c index dd90a4e39..d4c31237d 100644 --- a/client/src/cmdhf14b.c +++ b/client/src/cmdhf14b.c @@ -58,21 +58,6 @@ static int usage_hf_14b_write_srx(void) { PrintAndLogEx(NORMAL, _YELLOW_(" hf 14b sriwrite 2 FF 11223344")); return PM3_SUCCESS; } -static int usage_hf_14b_dump(void) { - PrintAndLogEx(NORMAL, "This command dumps the contents of a ISO-14443-B tag and save it to file\n" - "If memory size defaults to SRI4K if auto detect fails.\n" - "\n" - "Usage: hf 14b dump [h] \n" - "Options:\n" - "\th this help\n" - "\tf (optional) filename, if no UID will be used as filename\n" - "\n" - "Example:\n" - _YELLOW_("\thf 14b dump\n") - _YELLOW_("\thf 14b dump f mydump") - ); - return PM3_SUCCESS; -} static int switch_off_field_14b(void) { clearCommandBuffer(); @@ -373,7 +358,7 @@ static int print_atqb_resp(uint8_t *data, uint8_t cid) { } // get SRx chip model (from UID) // from ST Microelectronics -static char *get_ST_Chip_Model(uint8_t data) { +static char *get_st_chip_model(uint8_t data) { static char model[20]; char *retStr = model; memset(model, 0, sizeof(model)); @@ -602,7 +587,7 @@ static void print_st_general_info(uint8_t *data, uint8_t len) { PrintAndLogEx(NORMAL, ""); PrintAndLogEx(SUCCESS, " UID: " _GREEN_("%s"), sprint_hex(SwapEndian64(data, 8, 8), len)); PrintAndLogEx(SUCCESS, " MFG: %02X, " _YELLOW_("%s"), mfgid, getTagInfo(mfgid)); - PrintAndLogEx(SUCCESS, "Chip: %02X, " _YELLOW_("%s"), chipid, get_ST_Chip_Model(chipid)); + PrintAndLogEx(SUCCESS, "Chip: %02X, " _YELLOW_("%s"), chipid, get_st_chip_model(chipid)); } // print UID info from ASK CT chips @@ -619,12 +604,9 @@ static void print_ct_general_info(void *vcard) { } -// iceman, some 14B APDU break down +// iceman, calypso? // 05 00 00 = find one tag in field // 1d xx xx xx xx 00 08 01 00 = attrib xx=UID (resp 10 [f9 e0]) -// a3 = ? (resp 03 [e2 c2]) -// 02 = ? (resp 02 [6a d3]) -// 022b (resp 02 67 00 [29 5b]) // 0200a40400 (resp 02 67 00 [29 5b]) // 0200a4040c07a0000002480300 (resp 02 67 00 [29 5b]) // 0200a4040c07a0000002480200 (resp 02 67 00 [29 5b]) @@ -633,10 +615,6 @@ static void print_ct_general_info(void *vcard) { // 0200a404000cd2760001354b414e4d30310000 (resp 02 6a 82 [4b 4c]) // 0200a404000ca000000063504b43532d313500 (resp 02 6a 82 [4b 4c]) // 0200a4040010a000000018300301000000000000000000 (resp 02 6a 82 [4b 4c]) -// 03 = ? (resp 03 [e3 c2]) -// c2 = ? (resp c2 [66 15]) -// b2 = ? (resp a3 [e9 67]) -// a2 = ? (resp 02 [6a d3]) // 14b get and print Full Info (as much as we know) static bool HF14B_Std_Info(bool verbose) { @@ -1036,43 +1014,45 @@ static int CmdHF14BWriteSri(const char *Cmd) { // need to write to file static int CmdHF14BDump(const char *Cmd) { - uint8_t fileNameLen = 0; + CLIParserContext *ctx; + CLIParserInit(&ctx, "hf 14b dump", + "This command dumps the contents of a ISO-14443-B tag and save it to file\n" + "Tries to autodetect cardtype, memory size defaults to SRI4K", + "hf 14b dump\n" + "hf 14b dump -f myfilename\n" + ); + + void *argtable[] = { + arg_param_begin, + arg_strx0("f", "file", "", "(optional) filename, if no UID will be used as filename"), + arg_param_end + }; + CLIExecWithReturn(ctx, Cmd, argtable, true); + + int fnlen = 0; char filename[FILE_PATH_SIZE] = {0}; char *fptr = filename; - bool errors = false; - uint8_t cmdp = 0, cardtype = 1; - uint16_t cardsize = 0; - - while (param_getchar(Cmd, cmdp) != 0x00 && !errors) { - switch (tolower(param_getchar(Cmd, cmdp))) { - case 'h': - return usage_hf_14b_dump(); - case 'f': - fileNameLen = param_getstr(Cmd, cmdp + 1, filename, FILE_PATH_SIZE); - cmdp += 2; - break; - default: - PrintAndLogEx(WARNING, "Unknown parameter '%c'\n", param_getchar(Cmd, cmdp)); - errors = true; - break; - } - } - - //Validations - if (errors) return usage_hf_14b_dump(); + CLIParamStrToBuf(arg_get_str(ctx, 1), (uint8_t*)filename, FILE_PATH_SIZE, &fnlen); + CLIParserFree(ctx); iso14b_card_select_t card; if (get_14b_UID(&card) == false) { - PrintAndLogEx(WARNING, "No tag found."); + PrintAndLogEx(WARNING, "no tag found"); + return PM3_SUCCESS; + } + + if (card.uidlen != 8) { + PrintAndLogEx(FAILED, "current dump command only work with SRI4K / SRI512 tags"); return PM3_SUCCESS; } // detect cardsize // 1 = 4096 // 2 = 512 - cardtype = get_st_cardsize(card.uid); - + uint8_t cardtype = get_st_cardsize(card.uid); uint8_t blocks = 0; + uint16_t cardsize = 0; + switch (cardtype) { case 2: cardsize = (512 / 8) + 4; @@ -1085,17 +1065,17 @@ static int CmdHF14BDump(const char *Cmd) { break; } - if (fileNameLen < 1) { - PrintAndLogEx(INFO, "Using UID as filename"); + if (fnlen < 1) { + PrintAndLogEx(INFO, "using UID as filename"); fptr += sprintf(fptr, "hf-14b-"); FillFileNameByUID(fptr, SwapEndian64(card.uid, card.uidlen, 8), "-dump", card.uidlen); } uint8_t chipid = get_st_chipid(card.uid); - PrintAndLogEx(SUCCESS, "Found a " _GREEN_("%s") " tag", get_ST_Chip_Model(chipid)); + PrintAndLogEx(SUCCESS, "found a " _GREEN_("%s") " tag", get_st_chip_model(chipid)); // detect blocksize from card :) - PrintAndLogEx(INFO, "Reading memory from tag UID " _GREEN_("%s"), sprint_hex_inrow(SwapEndian64(card.uid, card.uidlen, 8), card.uidlen)); + PrintAndLogEx(INFO, "reading tag memory from UID " _GREEN_("%s"), sprint_hex_inrow(SwapEndian64(card.uid, card.uidlen, 8), card.uidlen)); uint8_t data[cardsize]; memset(data, 0, sizeof(data)); @@ -1163,7 +1143,7 @@ static int CmdHF14BDump(const char *Cmd) { PrintAndLogEx(NORMAL, ""); if (blocknum != 0xFF) { - PrintAndLogEx(FAILED, "Dump failed"); + PrintAndLogEx(FAILED, "dump failed"); goto out; } From 7eadc900c19f0ba40f73c2985e5bbd7fefe751e0 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Fri, 2 Oct 2020 19:42:19 +0200 Subject: [PATCH 0750/1047] pwr_oe2 is LF --- fpga/hi_flite.v | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/fpga/hi_flite.v b/fpga/hi_flite.v index 6cb87825e..c87a002cc 100644 --- a/fpga/hi_flite.v +++ b/fpga/hi_flite.v @@ -39,6 +39,7 @@ wire disabl = mod_type[0]; // Most off, oe4 for modulation; // Trying reader emulation (would presumably just require switching power on, but I am not sure) assign pwr_lo = 1'b0; +assign pwr_oe2 = 1'b0; // 512x64/fc -wait before ts0, 32768 ticks // tslot: 256*64/fc @@ -339,7 +340,6 @@ end //put modulation here to maintain the correct clock. Seems that some readers are sensitive to that reg pwr_hi; reg pwr_oe1; -reg pwr_oe2; reg pwr_oe3; reg pwr_oe4; @@ -351,7 +351,6 @@ begin begin pwr_hi <= ck_1356meg; pwr_oe1 <= 1'b0;//mod; - pwr_oe2 <= 1'b0;//mod; pwr_oe3 <= 1'b0;//mod; pwr_oe4 <= mod;//1'b0; end @@ -359,10 +358,12 @@ begin begin pwr_hi <= 1'b0; pwr_oe1 <= 1'b0; - pwr_oe2 <= 1'b0; pwr_oe3 <= 1'b0; pwr_oe4 <= mod; end end + + + endmodule From 8e5a2850997da79e2ac628c6fc8db7ec04e7e83c Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Fri, 2 Oct 2020 19:42:47 +0200 Subject: [PATCH 0751/1047] textual --- fpga/hi_iso14443a.v | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/fpga/hi_iso14443a.v b/fpga/hi_iso14443a.v index 958436e69..f339b14e6 100644 --- a/fpga/hi_iso14443a.v +++ b/fpga/hi_iso14443a.v @@ -540,16 +540,14 @@ begin bit_to_arm = sendbit; end - - - assign ssp_din = bit_to_arm; // Subcarrier (adc_clk/16, for FPGA_HF_ISO14443A_TAGSIM_MOD only). wire sub_carrier; assign sub_carrier = ~sub_carrier_cnt[3]; -// in FPGA_HF_ISO14443A_READER_MOD: drop carrier for mod_sig_coil==1 (pause); in FPGA_HF_ISO14443A_READER_LISTEN: carrier always on; in other modes: carrier always off +// in FPGA_HF_ISO14443A_READER_MOD: drop carrier for mod_sig_coil == 1 (pause); +// in FPGA_HF_ISO14443A_READER_LISTEN: carrier always on; in other modes: carrier always off assign pwr_hi = (ck_1356meg & (((mod_type == `FPGA_HF_ISO14443A_READER_MOD) & ~mod_sig_coil) || (mod_type == `FPGA_HF_ISO14443A_READER_LISTEN))); @@ -566,7 +564,6 @@ assign pwr_oe4 = mod_sig_coil & sub_carrier & (mod_type == `FPGA_HF_ISO14443A_TA assign pwr_oe2 = 1'b0; assign pwr_lo = 1'b0; - assign dbg = negedge_cnt[3]; endmodule From 40413c9b0cb5459fc4c39a18b70c1f4726c1b6ab Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Fri, 2 Oct 2020 20:19:58 +0200 Subject: [PATCH 0752/1047] zero padding --- client/src/cmdhf14b.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/src/cmdhf14b.c b/client/src/cmdhf14b.c index d4c31237d..5f3936cf6 100644 --- a/client/src/cmdhf14b.c +++ b/client/src/cmdhf14b.c @@ -597,7 +597,7 @@ static void print_ct_general_info(void *vcard) { uint32_t uid32 = (card.uid[0] |card.uid[1] << 8 |card.uid[2] << 16 | card.uid[3] << 24); PrintAndLogEx(SUCCESS, "ASK C-Ticket"); - PrintAndLogEx(SUCCESS, " UID: " _GREEN_("%s") " ( " _YELLOW_("%u") " )", sprint_hex(card.uid, sizeof(card.uid)), uid32); + PrintAndLogEx(SUCCESS, " UID: " _GREEN_("%s") " ( " _YELLOW_("%010u") " )", sprint_hex(card.uid, sizeof(card.uid)), uid32); PrintAndLogEx(SUCCESS, " Product Code: %02X", card.pc); PrintAndLogEx(SUCCESS, " Facility Code: %02X", card.fc); PrintAndLogEx(NORMAL, ""); From d612f17b13f760c98d5e3b10c8f5974a2a39de6e Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sat, 3 Oct 2020 00:03:44 +0200 Subject: [PATCH 0753/1047] hf 14b sriread - uses cliparser --- client/src/cmdhf14b.c | 43 +++++++++++++++++++++++++++++-------------- 1 file changed, 29 insertions(+), 14 deletions(-) diff --git a/client/src/cmdhf14b.c b/client/src/cmdhf14b.c index 5f3936cf6..87589f299 100644 --- a/client/src/cmdhf14b.c +++ b/client/src/cmdhf14b.c @@ -34,16 +34,6 @@ bool apdu_in_framing_enable = true; static int CmdHelp(const char *Cmd); -static int usage_hf_14b_read_srx(void) { - PrintAndLogEx(NORMAL, "Usage: hf 14b sriread [h] <1|2>"); - PrintAndLogEx(NORMAL, "Options:"); - PrintAndLogEx(NORMAL, " h this help"); - PrintAndLogEx(NORMAL, " <1|2> 1 = SRIX4K , 2 = SRI512"); - PrintAndLogEx(NORMAL, "Example:"); - PrintAndLogEx(NORMAL, _YELLOW_(" hf 14b sriread 1")); - PrintAndLogEx(NORMAL, _YELLOW_(" hf 14b sriread 2")); - return PM3_SUCCESS; -} static int usage_hf_14b_write_srx(void) { PrintAndLogEx(NORMAL, "Usage: hf 14b [h] sriwrite <1|2> "); PrintAndLogEx(NORMAL, "Options:"); @@ -932,11 +922,36 @@ static int CmdHF14BReader(const char *Cmd) { * this command just dumps the contents of the memory/ */ static int CmdHF14BReadSri(const char *Cmd) { - char cmdp = tolower(param_getchar(Cmd, 0)); - if (strlen(Cmd) < 1 || cmdp == 'h') return usage_hf_14b_read_srx(); + + CLIParserContext *ctx; + CLIParserInit(&ctx, "hf 14b sriread", + "Read contents of a SRI512 | SRIX4K tag", + "hf 14b sriread\n" + ); + + void *argtable[] = { + arg_param_begin, + arg_param_end + }; + CLIExecWithReturn(ctx, Cmd, argtable, true); + CLIParserFree(ctx); + + iso14b_card_select_t card; + if (get_14b_UID(&card) == false) { + PrintAndLogEx(WARNING, "no tag found"); + return PM3_SUCCESS; + } - uint8_t tagtype = param_get8(Cmd, 0); - uint8_t blocks = (tagtype == 1) ? 0x7F : 0x0F; + if (card.uidlen != 8) { + PrintAndLogEx(FAILED, "current dump command only work with SRI4K / SRI512 tags"); + return PM3_SUCCESS; + } + + // detect cardsize + // 1 = 4096 + // 2 = 512 + uint8_t cardtype = get_st_cardsize(card.uid); + uint8_t blocks = (cardtype == 1) ? 0x7F : 0x0F; clearCommandBuffer(); SendCommandMIX(CMD_HF_SRI_READ, blocks, 0, 0, NULL, 0); From 3787c6e991badad4173f18b211b81257df1a274a Mon Sep 17 00:00:00 2001 From: tcprst Date: Fri, 2 Oct 2020 21:23:03 -0400 Subject: [PATCH 0754/1047] hf st commands - now use cliparser --- client/src/cmdhfst.c | 364 +++++++++++++++++++++---------------------- 1 file changed, 179 insertions(+), 185 deletions(-) diff --git a/client/src/cmdhfst.c b/client/src/cmdhfst.c index 8308df9b1..ce40946c1 100644 --- a/client/src/cmdhfst.c +++ b/client/src/cmdhfst.c @@ -14,6 +14,7 @@ #include "cmdparser.h" // command_t #include "comms.h" // clearCommandBuffer #include "cmdtrace.h" +#include "cliparser.h" #include "crc16.h" #include "cmdhf14a.h" #include "protocols.h" // definitions of ISO14A/7816 protocol @@ -21,65 +22,9 @@ #include "mifare/ndef.h" // NDEFRecordsDecodeAndPrint #define TIMEOUT 2000 + static int CmdHelp(const char *Cmd); -static int usage_hf_st_info(void) { - PrintAndLogEx(NORMAL, "Usage: hf st info [h]"); - PrintAndLogEx(NORMAL, "Options:"); - PrintAndLogEx(NORMAL, " h this help"); - PrintAndLogEx(NORMAL, "Example:"); - PrintAndLogEx(NORMAL, _YELLOW_(" hf st info")); - return PM3_SUCCESS; -} -static int usage_hf_st_sim(void) { - PrintAndLogEx(NORMAL, "\n Emulating ST25TA512B tag with 7 byte UID\n"); - PrintAndLogEx(NORMAL, "Usage: hf st sim [h] u "); - PrintAndLogEx(NORMAL, "Options:"); - PrintAndLogEx(NORMAL, " h : This help"); - PrintAndLogEx(NORMAL, " u : 7 byte UID"); - PrintAndLogEx(NORMAL, "Examples:"); - PrintAndLogEx(NORMAL, _YELLOW_(" hf st sim u 02E2007D0FCA4C")); - return PM3_SUCCESS; -} -static int usage_hf_st_ndef(void) { - PrintAndLogEx(NORMAL, "\n Print NFC Data Exchange Format (NDEF)\n"); - PrintAndLogEx(NORMAL, "Usage: hf st ndef [h] p "); - PrintAndLogEx(NORMAL, "Options:"); - PrintAndLogEx(NORMAL, " h : This help"); - PrintAndLogEx(NORMAL, " p : 16 byte password"); - PrintAndLogEx(NORMAL, "Examples:"); - PrintAndLogEx(NORMAL, _YELLOW_(" hf st ndef p 82E80053D4CA5C0B656D852CC696C8A1")); - return PM3_SUCCESS; -} - -static int usage_hf_st_protect(void) { - PrintAndLogEx(NORMAL, "\n Change R/W protection for NFC Data Exchange Format (NDEF)\n"); - PrintAndLogEx(NORMAL, "Usage: hf st protect [h] p r|w [0|1]"); - PrintAndLogEx(NORMAL, "Options:"); - PrintAndLogEx(NORMAL, " h : This help"); - PrintAndLogEx(NORMAL, " p : 16 byte write password"); - PrintAndLogEx(NORMAL, " r|w : Change (r)ead or (w)rite protection"); - PrintAndLogEx(NORMAL, " [0|1] : Enable / Disable protection"); - PrintAndLogEx(NORMAL, " 0 = Disable (default)"); - PrintAndLogEx(NORMAL, " 1 = Enable"); - PrintAndLogEx(NORMAL, "Examples:"); - PrintAndLogEx(NORMAL, _YELLOW_(" hf st protect p 82E80053D4CA5C0B656D852CC696C8A1 r 0")); - return PM3_SUCCESS; -} - -static int usage_hf_st_pwd(void) { - PrintAndLogEx(NORMAL, "\n Change R/W password for NFC Data Exchange Format (NDEF)\n"); - PrintAndLogEx(NORMAL, "Usage: hf st pwd [h] p r|w n "); - PrintAndLogEx(NORMAL, "Options:"); - PrintAndLogEx(NORMAL, " h : This help"); - PrintAndLogEx(NORMAL, " p : 16 byte write password"); - PrintAndLogEx(NORMAL, " r|w : Change (r)ead or (w)rite password"); - PrintAndLogEx(NORMAL, " n : New 16 byte password"); - PrintAndLogEx(NORMAL, "Examples:"); - PrintAndLogEx(NORMAL, _YELLOW_(" hf st pwd p 82E80053D4CA5C0B656D852CC696C8A1 r n 00000000000000000000000000000000")); - return PM3_SUCCESS; -} - // get ST Microelectronics chip model (from UID) static char *get_st_chip_model(uint8_t pc) { static char model[40]; @@ -348,26 +293,44 @@ int infoHF_ST(void) { return PM3_SUCCESS; } -// menu command to get and print all info known about any known 14b tag +// menu command to get and print all info known about any known ST25TA tag static int cmd_hf_st_info(const char *Cmd) { - char c = tolower(param_getchar(Cmd, 0)); - if (c == 'h') return usage_hf_st_info(); + CLIParserContext *ctx; + CLIParserInit(&ctx, "hf st info", + "Get info about ST25TA tag", + "hf st info" + ); + + void *argtable[] = { + arg_param_begin, + arg_param_end + }; + CLIExecWithReturn(ctx, Cmd, argtable, true); + CLIParserFree(ctx); return infoHF_ST(); } static int cmd_hf_st_sim(const char *Cmd) { - char c = tolower(param_getchar(Cmd, 0)); - if (c == 'h' || c == 0x00) return usage_hf_st_sim(); - int uidlen = 0; - uint8_t cmdp = 0; uint8_t uid[7] = {0}; - if (c == 'u') { - param_gethex_ex(Cmd, cmdp + 1, uid, &uidlen); - uidlen >>= 1; - if (uidlen != 7) { - return usage_hf_st_sim(); - } + + CLIParserContext *ctx; + CLIParserInit(&ctx, "hf st sim", + "Emulating ST25TA512B tag with 7 byte UID", + "hf st sim -u 02E2007D0FCA4C\n"); + + void *argtable[] = { + arg_param_begin, + arg_strx1("u", "uid", "", "7 byte UID"), + arg_param_end + }; + CLIExecWithReturn(ctx, Cmd, argtable, false); + + CLIGetHexWithReturn(ctx, 1, uid, &uidlen); + + if (uidlen != 7) { + PrintAndLogEx(ERR, "UID must be 7 hex bytes"); + return PM3_EINVARG; } char param[40]; @@ -376,18 +339,32 @@ static int cmd_hf_st_sim(const char *Cmd) { } static int cmd_hf_st_ndef(const char *Cmd) { - char c = tolower(param_getchar(Cmd, 0)); - if (c == 'h' || c == 0x00) return usage_hf_st_ndef(); - int pwdlen = 0; - uint8_t cmdp = 0; uint8_t pwd[16] = {0}; - if (c == 'p') { - param_gethex_ex(Cmd, cmdp + 1, pwd, &pwdlen); - pwdlen >>= 1; + bool with_pwd = false; + + CLIParserContext *ctx; + CLIParserInit(&ctx, "hf st ndef", + "Read NFC Data Exchange Format (NDEF) file on ST25TA", + "hf st ndef -p 82E80053D4CA5C0B656D852CC696C8A1\n"); + + void *argtable[] = { + arg_param_begin, + arg_str0("p", "password", "", "16 byte read password"), + arg_param_end + }; + CLIExecWithReturn(ctx, Cmd, argtable, true); + + CLIGetHexWithReturn(ctx, 1, pwd, &pwdlen); + + if (pwdlen == 0) { + with_pwd = false; + } else { if (pwdlen != 16) { - return usage_hf_st_ndef(); + PrintAndLogEx(ERR, "Password must be 16 hex bytes"); + return PM3_EINVARG; } + with_pwd = true; } bool activate_field = true; @@ -429,27 +406,29 @@ static int cmd_hf_st_ndef(const char *Cmd) { return PM3_ESOFT; } - // --------------- VERIFY ---------------- - uint8_t aVERIFY[30]; - int aVERIFY_n = 0; - param_gethex_to_eol("0020000100", 0, aVERIFY, sizeof(aVERIFY), &aVERIFY_n); - res = ExchangeAPDU14a(aVERIFY, aVERIFY_n, activate_field, keep_field_on, response, sizeof(response), &resplen); - if (res) - return res; - - sw = get_sw(response, resplen); - if (sw == 0x6300) { - // need to provide 16byte password - param_gethex_to_eol("0020000110", 0, aVERIFY, sizeof(aVERIFY), &aVERIFY_n); - memcpy(aVERIFY + aVERIFY_n, pwd, pwdlen); - res = ExchangeAPDU14a(aVERIFY, aVERIFY_n + pwdlen, activate_field, keep_field_on, response, sizeof(response), &resplen); + if (with_pwd) { + // --------------- VERIFY ---------------- + uint8_t aVERIFY[30]; + int aVERIFY_n = 0; + param_gethex_to_eol("0020000100", 0, aVERIFY, sizeof(aVERIFY), &aVERIFY_n); + res = ExchangeAPDU14a(aVERIFY, aVERIFY_n, activate_field, keep_field_on, response, sizeof(response), &resplen); if (res) return res; sw = get_sw(response, resplen); - if (sw != 0x9000) { - PrintAndLogEx(ERR, "Verify password failed (%04x - %s).", sw, GetAPDUCodeDescription(sw >> 8, sw & 0xff)); - return PM3_ESOFT; + if (sw == 0x6300) { + // need to provide 16byte password + param_gethex_to_eol("0020000110", 0, aVERIFY, sizeof(aVERIFY), &aVERIFY_n); + memcpy(aVERIFY + aVERIFY_n, pwd, pwdlen); + res = ExchangeAPDU14a(aVERIFY, aVERIFY_n + pwdlen, activate_field, keep_field_on, response, sizeof(response), &resplen); + if (res) + return res; + + sw = get_sw(response, resplen); + if (sw != 0x9000) { + PrintAndLogEx(ERR, "Verify password failed (%04x - %s).", sw, GetAPDUCodeDescription(sw >> 8, sw & 0xff)); + return PM3_ESOFT; + } } } @@ -473,57 +452,72 @@ static int cmd_hf_st_ndef(const char *Cmd) { static int cmd_hf_st_protect(const char *Cmd) { - uint8_t cmdp = 0; - bool errors = false; int pwdlen = 0; uint8_t pwd[16] = {0}; int statelen = 3; - uint8_t state[3] = {0x26, 0, 0}; + uint8_t state[3] = {0x26, 0, 0x02}; - while (param_getchar(Cmd, cmdp) != 0x00 && !errors) { - switch (tolower(param_getchar(Cmd, cmdp))) { - case 'h': - return usage_hf_st_protect(); - case '0': - state[0] = 0x26; //Disable protection - cmdp++; - break; - case '1': - state[0] = 0x28; //Enable protection - cmdp++; - break; - case 'r': - state[2] = 0x01; - cmdp++; - break; - case 'w': - state[2] = 0x02; - cmdp++; - break; - case 'p': - param_gethex_ex(Cmd, cmdp + 1, pwd, &pwdlen); - pwdlen >>= 1; - cmdp += 2; - break; - default: - PrintAndLogEx(WARNING, "Unknown parameter '%c'", param_getchar(Cmd, cmdp)); - errors = true; - break; - } - } + bool disable_protection = false; + bool enable_protection = false; + bool read_protection = false; + bool write_protection = false; + + CLIParserContext *ctx; + CLIParserInit(&ctx, "hf st protect", + "Change read or write protection for NFC Data Exchange Format (NDEF) file on ST25TA", + "hf st protect -p 82E80053D4CA5C0B656D852CC696C8A1 -r -e -> enable read protection\n" + "hf st protect -p 82E80053D4CA5C0B656D852CC696C8A1 -w -d -> disable write protection\n"); + + void *argtable[] = { + arg_param_begin, + arg_lit0("e", "enable", "enable protection"), + arg_lit0("d", "disable", "disable protection (default)"), + arg_lit0("r", "read", "change read protection"), + arg_lit0("w", "write", "change write protection (default)"), + arg_str1("p", "password", "", "16 byte write password"), + arg_param_end + }; + CLIExecWithReturn(ctx, Cmd, argtable, false); + + enable_protection = arg_get_lit(ctx, 1); + disable_protection = arg_get_lit(ctx, 2); + read_protection = arg_get_lit(ctx, 3); + write_protection = arg_get_lit(ctx, 4); + + CLIGetHexWithReturn(ctx, 5, pwd, &pwdlen); + + CLIParserFree(ctx); //Validations - if (state[2] == 0x00) { - PrintAndLogEx(WARNING, "Missing action (r)ead or (w)rite"); - errors = true; - } - if (pwdlen != 16) { - PrintAndLogEx(WARNING, "Missing 16 byte password"); - errors = true; + if (enable_protection && disable_protection) { + PrintAndLogEx(ERR, "Must specify either enable or disable protection, not both"); + return PM3_EINVARG; + } else { + if (enable_protection) { + state[0] = 0x28; + } + if (disable_protection) { + state[0] = 0x26; + } } - if (errors || cmdp == 0) return usage_hf_st_protect(); + if (read_protection && write_protection) { + PrintAndLogEx(ERR, "Must specify either read or write protection, not both"); + return PM3_EINVARG; + } else { + if (read_protection) { + state[2] = 0x01; + } + if (write_protection) { + state[2] = 0x02; + } + } + + if (pwdlen != 16) { + PrintAndLogEx(ERR, "Missing 16 byte password"); + return PM3_EINVARG; + } bool activate_field = true; bool keep_field_on = true; @@ -603,63 +597,63 @@ static int cmd_hf_st_protect(const char *Cmd) { } static int cmd_hf_st_pwd(const char *Cmd) { - char c = tolower(param_getchar(Cmd, 0)); - if (c == 'h' || c == 0x00) return usage_hf_st_pwd(); - uint8_t cmdp = 0; - bool errors = false; int pwdlen = 0; uint8_t pwd[16] = {0}; int newpwdlen = 0; uint8_t newpwd[16] = {0}; int changePwdlen = 4; - uint8_t changePwd[4] = {0x24, 0x00, 0x00, 0x10}; + uint8_t changePwd[4] = {0x24, 0x00, 0x01, 0x10}; + bool change_read_password = false; + bool change_write_password = false; - while (param_getchar(Cmd, cmdp) != 0x00 && !errors) { - switch (tolower(param_getchar(Cmd, cmdp))) { - case 'h': - return usage_hf_st_pwd(); - case 'r': - changePwd[2] = 0x01; - cmdp++; - break; - case 'w': - changePwd[2] = 0x02; - cmdp++; - break; - case 'p': - param_gethex_ex(Cmd, cmdp + 1, pwd, &pwdlen); - pwdlen >>= 1; - cmdp += 2; - break; - case 'n': - param_gethex_ex(Cmd, cmdp + 1, newpwd, &newpwdlen); - newpwdlen >>= 1; - cmdp += 2; - break; - default: - PrintAndLogEx(WARNING, "Unknown parameter '%c'", param_getchar(Cmd, cmdp)); - errors = true; - break; + CLIParserContext *ctx; + CLIParserInit(&ctx, "hf st pwd", + "Change read or write password for NFC Data Exchange Format (NDEF) file on ST25TA", + "hf st pwd -p 82E80053D4CA5C0B656D852CC696C8A1 -r -n 00000000000000000000000000000000 -> change read password\n" + "hf st pwd -p 82E80053D4CA5C0B656D852CC696C8A1 -w -n 00000000000000000000000000000000 -> change write password\n"); + + void *argtable[] = { + arg_param_begin, + arg_lit0("r", "read", "change the read password (default)"), + arg_lit0("w", "write", "change the write password"), + arg_str1("p", "password", "", "current 16 byte write password"), + arg_str1("n", "new", "", "new 16 byte password"), + arg_param_end + }; + CLIExecWithReturn(ctx, Cmd, argtable, false); + + change_read_password = arg_get_lit(ctx, 1); + change_write_password = arg_get_lit(ctx, 2); + + CLIGetHexWithReturn(ctx, 3, pwd, &pwdlen); + + CLIGetHexWithReturn(ctx, 4, newpwd, &newpwdlen); + + if (change_read_password && change_write_password) { + PrintAndLogEx(ERR, "Must specify either read or write, not both"); + CLIParserFree(ctx); + return PM3_EINVARG; + } else { + if (change_read_password) { + changePwd[2] = 0x01; + } + if (change_write_password) { + changePwd[2] = 0x02; } } - //Validations + CLIParserFree(ctx); - if (changePwd[2] == 0x00) { - PrintAndLogEx(WARNING, "Missing password specification: (r)ead or (w)rite"); - errors = true; - } if (pwdlen != 16) { - PrintAndLogEx(WARNING, "Missing original 16 byte password"); - errors = true; + PrintAndLogEx(ERR, "Original write password must be 16 hex bytes"); + return PM3_EINVARG; } if (newpwdlen != 16) { - PrintAndLogEx(WARNING, "Missing new 16 byte password"); - errors = true; + PrintAndLogEx(ERR, "New password must be 16 hex bytes"); + return PM3_EINVARG; } - if (errors || cmdp == 0) return usage_hf_st_pwd(); - + bool activate_field = true; bool keep_field_on = true; uint8_t response[PM3_CMD_DATA_SIZE]; @@ -745,13 +739,13 @@ static int cmd_hf_st_list(const char *Cmd) { } static command_t CommandTable[] = { - {"help", CmdHelp, AlwaysAvailable, "This help"}, - {"info", cmd_hf_st_info, IfPm3Iso14443a, "Tag information"}, - {"list", cmd_hf_st_list, AlwaysAvailable, "List ISO 14443A/7816 history"}, - {"ndef", cmd_hf_st_ndef, AlwaysAvailable, "read NDEF file on tag"}, + {"help", CmdHelp, AlwaysAvailable, "This help"}, + {"info", cmd_hf_st_info, IfPm3Iso14443a, "Tag information"}, + {"list", cmd_hf_st_list, AlwaysAvailable, "List ISO 14443A/7816 history"}, + {"ndef", cmd_hf_st_ndef, AlwaysAvailable, "read NDEF file on tag"}, {"protect", cmd_hf_st_protect, IfPm3Iso14443a, "change protection on tag"}, - {"pwd", cmd_hf_st_pwd, IfPm3Iso14443a, "change password on tag"}, - {"sim", cmd_hf_st_sim, IfPm3Iso14443a, "Fake ISO 14443A/ST tag"}, + {"pwd", cmd_hf_st_pwd, IfPm3Iso14443a, "change password on tag"}, + {"sim", cmd_hf_st_sim, IfPm3Iso14443a, "Fake ISO 14443A/ST tag"}, {NULL, NULL, NULL, NULL} }; From 5e18463f8b343d507b11b361d62e0720fbb5a884 Mon Sep 17 00:00:00 2001 From: mwalker33 Date: Sat, 3 Oct 2020 11:34:33 +1000 Subject: [PATCH 0755/1047] Update cliparser.md Added 0 or 1 string option a little formatting. --- doc/cliparser.md | 35 ++++++++++++++++++++++------------- 1 file changed, 22 insertions(+), 13 deletions(-) diff --git a/doc/cliparser.md b/doc/cliparser.md index 83002dda4..044f8f8e3 100644 --- a/doc/cliparser.md +++ b/doc/cliparser.md @@ -6,14 +6,15 @@ Note: the parser will format and color and layout as needed. -## common options -where possiable all options should be lowercase. -extended options preceeded with -- should be short -options provided directly (without an option identifier) should be avoided. --vv for extra verbos should be avoided; use of debug level is prefered. -whith --options the equle is not needed (will work with and without) so dont use '=' -e.g. cmd --cn 12345 +## design comments +* where possiable all options should be lowercase. +* extended options preceeded with -- should be short +* options provided directly (without an option identifier) should be avoided. +* -vv for extra verbos should be avoided; use of debug level is prefered. +* with --options the equal is not needed (will work with and without) so dont use '=' + e.g. cmd --cn 12345 +## common options -h --help : help --cn : card number --fn : facility number @@ -61,13 +62,21 @@ e.g. lf indala clone -r a0000000a0002021 -> this uses ..... }; **Notes:** -booleen : arg_lit0 ("\", "\", \["\",\] \<"description"\>); -optional integer : arg_int0 ("\", "\", \["\",\] \<"description"\>); -required integer : arg_int1 ("\", "\", \["\",\] \<"description"\>); -optional string : arg_strx0 ("\", "\", \["\",\] \<"description"\>); -required string : arg_strx1 ("\", "\", \["\",\] \<"description"\>); +booleen : arg_lit0 ("\", "\", \["\",\] \<"description"\>) -** if an option does not have a short or long option, use NULL in its place. ** +**integer** + optional integer : arg_int0 ("\", "\", \["\",\] \<"description"\>)\ + required integer : arg_int1 ("\", "\", \["\",\] \<"description"\>) + +**Strings 0 or 1** + optional string : arg_str0("\", "\", \["\",\] \<"description"\>)\ + required string : arg_str1("\", "\", \["\",\] \<"description"\>) + +**Strings x to 250** + optional string : arg_strx0 ("\", "\", \["\",\] \<"description"\>)\ + required string : arg_strx1 ("\", "\", \["\",\] \<"description"\>) + +**if an option does not have a short or long option, use NULL in its place** ### show the menu CLIExecWithReturn(\, \, \, \); From 3da213015317628cc1f9cd22b566e21b7b48524e Mon Sep 17 00:00:00 2001 From: tcprst Date: Fri, 2 Oct 2020 21:35:09 -0400 Subject: [PATCH 0756/1047] fix cliparser for hf st sim UID --- client/src/cmdhfst.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/src/cmdhfst.c b/client/src/cmdhfst.c index ce40946c1..ff2b682bc 100644 --- a/client/src/cmdhfst.c +++ b/client/src/cmdhfst.c @@ -321,7 +321,7 @@ static int cmd_hf_st_sim(const char *Cmd) { void *argtable[] = { arg_param_begin, - arg_strx1("u", "uid", "", "7 byte UID"), + arg_str1("u", "uid", "", "7 byte UID"), arg_param_end }; CLIExecWithReturn(ctx, Cmd, argtable, false); From dff8848af2b839741e6508d199fe154772235dd8 Mon Sep 17 00:00:00 2001 From: Iceman Date: Sat, 3 Oct 2020 10:36:05 +0200 Subject: [PATCH 0757/1047] Update cliparser.md --- doc/cliparser.md | 40 +++++++++++++++++++++++++++++++++++----- 1 file changed, 35 insertions(+), 5 deletions(-) diff --git a/doc/cliparser.md b/doc/cliparser.md index 044f8f8e3..bbc6c6b42 100644 --- a/doc/cliparser.md +++ b/doc/cliparser.md @@ -1,12 +1,33 @@ -# cliparser - proxmark3-rrg +# Cliparser + +The old style with mixed custom commandline parsing of user parameters or options was messy and confusing. You can find all kinds in the Proxmark3 client. +Samples +``` +data xxxx h +script run x.lua -h +hf 14a raw -h +hf 14b raw -ss +lf search 1 +lf config h H +``` +In order to counter this and unify it, there was discussion over at the official repository a few years ago (link to issue) and there it became clear a change is needed. Among the different solutions suggested @merlokk's idea of using the lib cliparser was agreed upon. The lib was adapted and implemented for commands like +``` +emv +hf fido +``` +And then it fell into silence since it wasn't well documented how to use the cliparser. Looking at source code wasn't very efficient. However the need of a better cli parsing was still there. Fast forward today, where more commands has used the cliparser but it still wasn't the natural way when adding a new client command to the Proxmark3 client. After more discussions among @doegox, @iceman1001 and @mrwalker the concept became more clear on how to use the cliparser lib in the _preferred_ way. The aftermath was a design and layout specfied which lead to a simpler implemtentation of the cliparser in the client source code while still unfiy all helptexts with the new colours support and a defined layout. As seen below, the simplicity and clearness. + +![sample of new style helptext](http://www.icedev.se/proxmark3/helptext.png) + + ## cliparser setup and use -*** Draft notes - needs work *** - -Note: the parser will format and color and layout as needed. +The parser will format and color and layout as needed. +It will also add the `-h --help` option automatic. ## design comments + * where possiable all options should be lowercase. * extended options preceeded with -- should be short * options provided directly (without an option identifier) should be avoided. @@ -14,6 +35,8 @@ Note: the parser will format and color and layout as needed. * with --options the equal is not needed (will work with and without) so dont use '=' e.g. cmd --cn 12345 + + ## common options -h --help : help --cn : card number @@ -25,6 +48,10 @@ Note: the parser will format and color and layout as needed. -v --verbose : flag when output should provide more information, not conidered debug. -1 --buffer : use the sample buffer + + +## How to implement in source code + ### setup the parser data structure Header file to include @@ -60,7 +87,10 @@ e.g. lf indala clone -r a0000000a0002021 -> this uses ..... arg_int0(NULL, "cn", "", "Cardnumber (26 bit format)"), arg_param_end }; - + +_All options has a parameter index, since `-h --help` is added automatic, it will be assigned index 0. +Hence all options you add will start at index 1 and upwards._ + **Notes:** booleen : arg_lit0 ("\", "\", \["\",\] \<"description"\>) From e6398674b0d16c399b4becefdf0ddb8842b443d2 Mon Sep 17 00:00:00 2001 From: mwalker33 Date: Sat, 3 Oct 2020 19:06:01 +1000 Subject: [PATCH 0758/1047] Cliparser cleanup Update to remove "=" from help text update md file, fix typos and better notses for the options. --- client/deps/cliparser/argtable3.c | 7 ++++++- doc/cliparser.md | 35 ++++++++++++++++++------------- 2 files changed, 27 insertions(+), 15 deletions(-) diff --git a/client/deps/cliparser/argtable3.c b/client/deps/cliparser/argtable3.c index f0b6a4d37..134c82306 100644 --- a/client/deps/cliparser/argtable3.c +++ b/client/deps/cliparser/argtable3.c @@ -4270,10 +4270,15 @@ static void arg_cat_optionv(char *dest, } if (datatype) { - if (longopts) +/* if (longopts) arg_cat(&dest, "=", &ndest); else if (shortopts) arg_cat(&dest, " ", &ndest); +*/ + if (longopts) + arg_cat(&dest, " ", &ndest); + else if (shortopts) + arg_cat(&dest, " ", &ndest); if (optvalue) { arg_cat(&dest, "[", &ndest); diff --git a/doc/cliparser.md b/doc/cliparser.md index bbc6c6b42..430583523 100644 --- a/doc/cliparser.md +++ b/doc/cliparser.md @@ -28,11 +28,11 @@ It will also add the `-h --help` option automatic. ## design comments -* where possiable all options should be lowercase. -* extended options preceeded with -- should be short +* where possible all options should be lowercase. +* extended options preceded with -- should be short * options provided directly (without an option identifier) should be avoided. -* -vv for extra verbos should be avoided; use of debug level is prefered. -* with --options the equal is not needed (will work with and without) so dont use '=' +* -vv for extra verbos should be avoided; use of debug level is preferred. +* with --options the equal is not needed (will work with and without) so don't use '=' e.g. cmd --cn 12345 @@ -62,10 +62,10 @@ In the command function, setup the context CLIParserContext *ctx; -### define the text +### define the context CLIParserInit (\, \, \); -use -> to seperate example and example comment and \\n to seperate examples. +use -> to separate example and example comment and \\n to separate examples. e.g. lf indala clone -r a0000000a0002021 -> this uses ..... CLIParserInit(&ctx, "lf indala clone", @@ -92,21 +92,28 @@ _All options has a parameter index, since `-h --help` is added automatic, it wi Hence all options you add will start at index 1 and upwards._ **Notes:** -booleen : arg_lit0 ("\", "\", \["\",\] \<"description"\>) +**bool option. true if supplied** +bool : arg_lit0 ("\", "\", \["\",\] \<"description"\>) -**integer** - optional integer : arg_int0 ("\", "\", \["\",\] \<"description"\>)\ +**integer that is optional** + optional integer : arg_int0 ("\", "\", \["\",\] \<"description"\>) + +**integer that is required** required integer : arg_int1 ("\", "\", \["\",\] \<"description"\>) -**Strings 0 or 1** - optional string : arg_str0("\", "\", \["\",\] \<"description"\>)\ +**String option that is optional and only one instance can be provided** + optional string : arg_str0("\", "\", \["\",\] \<"description"\>) + +**String option that is required and only one instance can be provided** required string : arg_str1("\", "\", \["\",\] \<"description"\>) -**Strings x to 250** - optional string : arg_strx0 ("\", "\", \["\",\] \<"description"\>)\ +**String option that is optional and can have up to 250 instances provided** + optional string : arg_strx0 ("\", "\", \["\",\] \<"description"\>) + +**String option that is required/at least one instance and can have up to 250 instances** required string : arg_strx1 ("\", "\", \["\",\] \<"description"\>) -**if an option does not have a short or long option, use NULL in its place** +**if an option does not have a short or long option, use NULL in its place** ### show the menu CLIExecWithReturn(\, \, \, \); From 5f78d382214ff9e20c9fbed24f8fa52645f943e9 Mon Sep 17 00:00:00 2001 From: Iceman Date: Sat, 3 Oct 2020 11:21:25 +0200 Subject: [PATCH 0759/1047] Update cliparser.md --- doc/cliparser.md | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/doc/cliparser.md b/doc/cliparser.md index 430583523..e4cc8e062 100644 --- a/doc/cliparser.md +++ b/doc/cliparser.md @@ -10,16 +10,30 @@ hf 14b raw -ss lf search 1 lf config h H ``` -In order to counter this and unify it, there was discussion over at the official repository a few years ago (link to issue) and there it became clear a change is needed. Among the different solutions suggested @merlokk's idea of using the lib cliparser was agreed upon. The lib was adapted and implemented for commands like +even the external tools which we collected into this repo, under folder */tools/* folder uses their own argument parsing. + + +In order to counter this and unify it, there was discussion over at the official repository a few years ago [link to issue](https://github.com/Proxmark/proxmark3/issues/467) and there it became clear a change is needed. Among the different solutions suggested @merlokk's idea of using the lib cliparser was agreed upon. The lib was adapted and implemented for commands like + ``` -emv -hf fido +[usb] pm3 --> emv +[usb] pm3 --> hf fido ``` -And then it fell into silence since it wasn't well documented how to use the cliparser. Looking at source code wasn't very efficient. However the need of a better cli parsing was still there. Fast forward today, where more commands has used the cliparser but it still wasn't the natural way when adding a new client command to the Proxmark3 client. After more discussions among @doegox, @iceman1001 and @mrwalker the concept became more clear on how to use the cliparser lib in the _preferred_ way. The aftermath was a design and layout specfied which lead to a simpler implemtentation of the cliparser in the client source code while still unfiy all helptexts with the new colours support and a defined layout. As seen below, the simplicity and clearness. + +And then it fell into silence since it wasn't well documented how to use the cliparser. Looking at source code wasn't very efficient. However the need of a better cli parsing was still there. + +Fast forward today, where more commands has used the cliparser but it still wasn't the natural way when adding a new client command to the Proxmark3 client. +After more discussions among @doegox, @iceman1001 and @mrwalker the concept became more clear on how to use the cliparser lib in the _preferred_ way. + +The aftermath was a design and layout specfied which lead to a simpler implemtentation of the cliparser in the client source code while still unfiy all helptexts with the new colours support and a defined layout. As seen below, the simplicity and clearness. ![sample of new style helptext](http://www.icedev.se/proxmark3/helptext.png) +Furthermore @mrwalker offered to take notes and thus this document was created. + +This is the _new_ and _prefered_ way to implement _helptext_ and _cli parsing_ for Proxmark3 client commands and it's external tools. + ## cliparser setup and use @@ -126,6 +140,12 @@ Once you have extracted the options, cleanup the context. CLIParserFree(ctx); ### retreiving options + + +The parser will format and color and layout as needed. +It will also add the `-h --help` option automatic. + + **bool option** arg_get_lit(\, \); From 670e2fb6b078076ea06cd4a6803bc3fdf0734fe6 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sat, 3 Oct 2020 11:48:52 +0200 Subject: [PATCH 0760/1047] standard form output (concatenated) --- client/deps/cliparser/cliparser.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/deps/cliparser/cliparser.c b/client/deps/cliparser/cliparser.c index 042dae99d..4ec4eb303 100644 --- a/client/deps/cliparser/cliparser.c +++ b/client/deps/cliparser/cliparser.c @@ -69,8 +69,8 @@ int CLIParserParseArg(CLIParserContext *ctx, int argc, char **argv, void *vargta PrintAndLogEx(NORMAL, "\n"_SectionTagColor_("usage:")); PrintAndLogEx(NORMAL, " "_CommandColor_("%s")NOLF, ctx->programName); - arg_print_syntaxv(stdout, ctx->argtable, "\n\n"); - + arg_print_syntax(stdout, ctx->argtable, "\n\n"); + PrintAndLogEx(NORMAL, _SectionTagColor_("options:")); arg_print_glossary(stdout, ctx->argtable, " "_ArgColor_("%-30s")" "_ArgHelpColor_("%s")"\n"); From 68f0945d48d2b8e7ea333e88839a7639315aef79 Mon Sep 17 00:00:00 2001 From: mwalker33 Date: Sat, 3 Oct 2020 20:21:16 +1000 Subject: [PATCH 0761/1047] Update argtable3.c Remove = when only long option --- client/deps/cliparser/argtable3.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/client/deps/cliparser/argtable3.c b/client/deps/cliparser/argtable3.c index 134c82306..5019001e4 100644 --- a/client/deps/cliparser/argtable3.c +++ b/client/deps/cliparser/argtable3.c @@ -4195,7 +4195,8 @@ static void arg_cat_option(char *dest, #endif if (datatype) { - arg_cat(&dest, "=", &ndest); +// arg_cat(&dest, "=", &ndest); + arg_cat(&dest, " ", &ndest); if (optvalue) { arg_cat(&dest, "[", &ndest); arg_cat(&dest, datatype, &ndest); From 2f0fec449b25faffcd709178077285910ff49536 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sat, 3 Oct 2020 14:09:24 +0200 Subject: [PATCH 0762/1047] fix wrong param --- client/src/cmdhf14b.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/client/src/cmdhf14b.c b/client/src/cmdhf14b.c index 87589f299..15cf0a2c0 100644 --- a/client/src/cmdhf14b.c +++ b/client/src/cmdhf14b.c @@ -168,15 +168,15 @@ static int CmdHF14BCmdRaw(const char *Cmd) { void *argtable[] = { arg_param_begin, - arg_lit0("k", "keep", "leave the signal field ON after receive response"), - arg_lit0("s", "std", "activate field and select standard card"), - arg_lit0(NULL, "sr", "activate field and select SRx ST"), - arg_lit0(NULL, "cts", "activate field and select ASK C-ticket"), - arg_lit0("c", "crc", "calculate and append CRC"), - arg_lit0("r", "noresponse", "do not read response"), - arg_int0("t", "timeout", "decimal", "timeout in ms"), - arg_lit0("v", "verbose", "verbose"), - arg_strx0(NULL, NULL, "", "bytes to send"), + arg_lit0("k", "keep", "leave the signal field ON after receive response"), + arg_lit0("s", "std", "activate field and select standard card"), + arg_lit0(NULL, "sr", "activate field and select SRx ST"), + arg_lit0(NULL, "cts", "activate field and select ASK C-ticket"), + arg_lit0("c", "crc", "calculate and append CRC"), + arg_lit0("r", "noresponse", "do not read response"), + arg_int0("t", "timeout", "dec", "timeout in ms"), + arg_lit0("v", "verbose", "verbose"), + arg_strx0(NULL, NULL, "", "bytes to send"), arg_param_end }; CLIExecWithReturn(ctx, Cmd, argtable, false); @@ -1022,7 +1022,7 @@ static int CmdHF14BWriteSri(const char *Cmd) { ); } - sprintf(str, "-ss -c %02x %02x %02x %02x %02x %02x", ISO14443B_WRITE_BLK, blockno, data[0], data[1], data[2], data[3]); + sprintf(str, "--ss -c %02x %02x %02x %02x %02x %02x", ISO14443B_WRITE_BLK, blockno, data[0], data[1], data[2], data[3]); return CmdHF14BCmdRaw(str); } From cc245016ea238645bc4e4ba021e8d08ed5e1a579 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sat, 3 Oct 2020 17:12:58 +0200 Subject: [PATCH 0763/1047] mem * - now uses cliparser --- client/cmdscripts/rdv4_init_extflash.cmd | 6 +- client/luascripts/init_rdv4.lua | 6 +- client/src/cmdflashmem.c | 473 ++++++++++------------- 3 files changed, 212 insertions(+), 273 deletions(-) diff --git a/client/cmdscripts/rdv4_init_extflash.cmd b/client/cmdscripts/rdv4_init_extflash.cmd index 2cae05294..6fe6de3ba 100755 --- a/client/cmdscripts/rdv4_init_extflash.cmd +++ b/client/cmdscripts/rdv4_init_extflash.cmd @@ -1,6 +1,6 @@ #!/usr/bin/env -S pm3 -s -mem load f mfc_default_keys m -mem load f t55xx_default_pwds t -mem load f iclass_default_keys i +mem load -f mfc_default_keys --mfc +mem load -f t55xx_default_pwds --t55xx +mem load -f iclass_default_keys --iclass lf t55xx deviceconfig z p diff --git a/client/luascripts/init_rdv4.lua b/client/luascripts/init_rdv4.lua index bc18dc0a9..a724ed189 100644 --- a/client/luascripts/init_rdv4.lua +++ b/client/luascripts/init_rdv4.lua @@ -74,9 +74,9 @@ function main(args) -- Upload dictionaries print('Uploading dictionaries to RDV4 flashmemory') print(dash) - core.console('mem load f mfc_default_keys m') - core.console('mem load f t55xx_default_pwds t') - core.console('mem load f iclass_default_keys i') + core.console('mem load -f mfc_default_keys --mfc') + core.console('mem load -f t55xx_default_pwds --t55xx') + core.console('mem load -f iclass_default_keys --iclass') print(dash) -- T55x7 Device configuration diff --git a/client/src/cmdflashmem.c b/client/src/cmdflashmem.c index e90e6025c..c3cf85585 100644 --- a/client/src/cmdflashmem.c +++ b/client/src/cmdflashmem.c @@ -8,16 +8,13 @@ // Proxmark3 RDV40 Flash memory commands //----------------------------------------------------------------------------- #include "cmdflashmem.h" - #include - -#include "cmdparser.h" // command_t - +#include "cmdparser.h" // command_t +#include "cliparser.h" #include "pmflash.h" -#include "fileutils.h" //saveFile -#include "comms.h" //getfromdevice +#include "fileutils.h" // saveFile +#include "comms.h" // getfromdevice #include "cmdflashmemspiffs.h" // spiffs commands - #include "rsa.h" #include "sha1.h" @@ -29,90 +26,34 @@ static int CmdHelp(const char *Cmd); -static int usage_flashmem_spibaud(void) { - PrintAndLogEx(NORMAL, "Usage: mem spibaud [h] "); - PrintAndLogEx(NORMAL, "Options:"); - PrintAndLogEx(NORMAL, " h this help"); - PrintAndLogEx(NORMAL, " SPI baudrate in MHz [24|48]"); - PrintAndLogEx(NORMAL, " "); - PrintAndLogEx(NORMAL, " If >= 24MHz, FASTREADS instead of READS instruction will be used."); - PrintAndLogEx(NORMAL, " Reading Flash ID will virtually always fail under 48MHz setting"); - PrintAndLogEx(NORMAL, " Unless you know what you are doing, please stay at 24MHz"); - PrintAndLogEx(NORMAL, "Examples:"); - PrintAndLogEx(NORMAL, " mem spibaud 48"); - return PM3_SUCCESS; -} - -static int usage_flashmem_load(void) { - PrintAndLogEx(NORMAL, "Loads binary file into flash memory on device"); - PrintAndLogEx(NORMAL, "Usage: mem load [o ] f [m|t|i]"); - PrintAndLogEx(NORMAL, "Warning: mem area to be written must have been wiped first"); - PrintAndLogEx(NORMAL, "(this is already taken care when loading dictionaries)"); - PrintAndLogEx(NORMAL, " o : offset in memory"); - PrintAndLogEx(NORMAL, " f : file name"); - PrintAndLogEx(NORMAL, " m : upload 6 bytes keys (mifare key dictionary)"); - PrintAndLogEx(NORMAL, " i : upload 8 bytes keys (iClass key dictionary)"); - PrintAndLogEx(NORMAL, " t : upload 4 bytes keys (pwd dictionary)"); - PrintAndLogEx(NORMAL, ""); - PrintAndLogEx(NORMAL, "Examples:"); - PrintAndLogEx(NORMAL, " mem load f myfile"); // upload file myfile at default offset 0 - PrintAndLogEx(NORMAL, " mem load f myfile o 1024"); // upload file myfile at offset 1024 - PrintAndLogEx(NORMAL, " mem load f mfc_default_keys m"); - PrintAndLogEx(NORMAL, " mem load f t55xx_default_pwds t"); - PrintAndLogEx(NORMAL, " mem load f iclass_default_keys i"); - return PM3_SUCCESS; -} -static int usage_flashmem_dump(void) { - PrintAndLogEx(NORMAL, "Dumps flash memory on device into a file or in console"); - PrintAndLogEx(NORMAL, " Usage: mem dump [o ] [l ] [f ] [p]"); - PrintAndLogEx(NORMAL, " o : offset in memory"); - PrintAndLogEx(NORMAL, " l : length"); - PrintAndLogEx(NORMAL, " f : file name"); - PrintAndLogEx(NORMAL, " p : print dump in console"); - PrintAndLogEx(NORMAL, " You must specify at lease option f or option p, both if you wish"); - PrintAndLogEx(NORMAL, ""); - PrintAndLogEx(NORMAL, "Examples:"); - PrintAndLogEx(NORMAL, " mem dump f myfile"); // download whole flashmem to file myfile - PrintAndLogEx(NORMAL, " mem dump p o 262015 l 128"); // display 128 bytes from offset 262015 (RSA sig) - PrintAndLogEx(NORMAL, " mem dump p f myfile o 241664 l 58"); // download and display 58 bytes from offset 241664 to file myfile - return PM3_SUCCESS; -} -static int usage_flashmem_wipe(void) { - - PrintAndLogEx(WARNING, "[OBS] use with caution."); - PrintAndLogEx(NORMAL, "Wipe flash memory on device, which fills memory with 0xFF\n"); - - PrintAndLogEx(NORMAL, " Usage: mem wipe p "); - PrintAndLogEx(NORMAL, " p : 0,1,2 page memory"); -// PrintAndLogEx(NORMAL, " i : inital total wipe"); - PrintAndLogEx(NORMAL, ""); - PrintAndLogEx(NORMAL, "Examples:"); - PrintAndLogEx(NORMAL, " mem wipe p 0"); // wipes first page. - return PM3_SUCCESS; -} -static int usage_flashmem_info(void) { - PrintAndLogEx(NORMAL, "Collect signature and verify it from flash memory\n"); - PrintAndLogEx(NORMAL, " Usage: mem info"); -// PrintAndLogEx(NORMAL, " s : create a signature"); -// PrintAndLogEx(NORMAL, " w : write signature to flash memory"); - PrintAndLogEx(NORMAL, ""); - PrintAndLogEx(NORMAL, "Examples:"); - PrintAndLogEx(NORMAL, " mem info"); -// PrintAndLogEx(NORMAL, " mem info s"); - return PM3_SUCCESS; -} - static int CmdFlashmemSpiBaudrate(const char *Cmd) { + + CLIParserContext *ctx; + CLIParserInit(&ctx, " mem baudrate 48", + "Set the baudrate for the SPI flash memory communications.\n" + "Reading Flash ID will virtually always fail under 48MHz setting.\n" + "Unless you know what you are doing, please stay at 24MHz.\n" + "If >= 24MHz, FASTREADS instead of READS instruction will be used.", + "mem baudrate --mhz 48" + ); + + void *argtable[] = { + arg_param_begin, + arg_int1(NULL, "mhz", "<24|48>", "SPI baudrate in MHz"), + arg_param_end + }; + CLIExecWithReturn(ctx, Cmd, argtable, false); + int br = arg_get_int_def(ctx, 1, -1); + CLIParserFree(ctx); - char ctmp = tolower(param_getchar(Cmd, 0)); - if (strlen(Cmd) < 1 || ctmp == 'h') { - return usage_flashmem_spibaud(); + if (br == -1) { + PrintAndLogEx(ERR, "failed to get baudrate"); + return PM3_EINVARG; } - uint32_t baudrate = param_get32ex(Cmd, 0, 0, 10); - baudrate = baudrate * 1000000; + uint32_t baudrate = br * 1000000; if (baudrate != FLASH_BAUD && baudrate != FLASH_MINBAUD) { - usage_flashmem_spibaud(); + PrintAndLogEx(ERR, "wrong baudrate. Only 24 or 48 is allowed"); return PM3_EINVARG; } SendCommandNG(CMD_FLASHMEM_SET_SPIBAUDRATE, (uint8_t *)&baudrate, sizeof(uint32_t)); @@ -121,52 +62,50 @@ static int CmdFlashmemSpiBaudrate(const char *Cmd) { static int CmdFlashMemLoad(const char *Cmd) { - uint32_t start_index = 0; + CLIParserContext *ctx; + CLIParserInit(&ctx, "mem load", + "Loads binary file into flash memory on device\n" + "Warning: mem area to be written must have been wiped first\n" + "( this is already taken care when loading dictionaries )", + "mem load -f myfile -> upload file myfile values at default offset 0\n" + "mem load -f myfile -o 1024 -> upload file myfile values at offset 1024\n" + "mem load -f mfc_default_keys -m -> upload MFC keys\n" + "mem load -f t55xx_default_pwds -t -> upload T55XX passwords\n" + "mem load -f iclass_default_keys -i -> upload iCLASS keys\n" + ); + + void *argtable[] = { + arg_param_begin, + arg_int0("o", "offset", "", "offset in memory"), + arg_lit0("m", "mifare,mfc", "upload 6 bytes keys (mifare key dictionary)"), + arg_lit0("i", "iclass", "upload 8 bytes keys (iClass key dictionary)"), + arg_lit0("t", "t55xx", "upload 4 bytes keys (password dictionary)"), + arg_strx0("f", "file", "", "file name"), + arg_param_end + }; + CLIExecWithReturn(ctx, Cmd, argtable, false); + + int offset = arg_get_int_def(ctx, 1, 0); + bool is_mfc = arg_get_lit(ctx, 2); + bool is_iclass = arg_get_lit(ctx, 3); + bool is_t55xx = arg_get_lit(ctx, 4); + int fnlen = 0; char filename[FILE_PATH_SIZE] = {0}; - bool errors = false; - uint8_t cmdp = 0; + CLIParamStrToBuf(arg_get_str(ctx, 5), (uint8_t*)filename, FILE_PATH_SIZE, &fnlen); + CLIParserFree(ctx); + Dictionary_t d = DICTIONARY_NONE; - - while (param_getchar(Cmd, cmdp) != 0x00 && !errors) { - switch (tolower(param_getchar(Cmd, cmdp))) { - case 'h': - return usage_flashmem_load(); - case 'f': - if (param_getstr(Cmd, cmdp + 1, filename, FILE_PATH_SIZE) >= FILE_PATH_SIZE) { - PrintAndLogEx(FAILED, "Filename too long"); - errors = true; - break; - } - cmdp += 2; - break; - case 'o': - start_index = param_get32ex(Cmd, cmdp + 1, 0, 10); - cmdp += 2; - break; - case 'm': - d = DICTIONARY_MIFARE; - cmdp++; - break; - case 't': - d = DICTIONARY_T55XX; - cmdp++; - break; - case 'i': - d = DICTIONARY_ICLASS; - cmdp++; - break; - default: - PrintAndLogEx(WARNING, "Unknown parameter '%c'", param_getchar(Cmd, cmdp)); - errors = true; - break; - } + if (is_mfc) { + d = DICTIONARY_MIFARE; + PrintAndLogEx(INFO, "treating file as MIFARE Classic keys"); + } else if (is_iclass) { + d = DICTIONARY_ICLASS; + PrintAndLogEx(INFO, "treating file as iCLASS keys"); + } else if (is_t55xx) { + d = DICTIONARY_T55XX; + PrintAndLogEx(INFO, "treating file as T55xx passwords"); } - //Validations - if (errors || cmdp == 0) { - usage_flashmem_load(); - return PM3_EINVARG; - } size_t datalen = 0; uint32_t keycount = 0; int res = 0; @@ -174,7 +113,7 @@ static int CmdFlashMemLoad(const char *Cmd) { switch (d) { case DICTIONARY_MIFARE: - start_index = DEFAULT_MF_KEYS_OFFSET; + offset = DEFAULT_MF_KEYS_OFFSET; res = loadFileDICTIONARY(filename, data + 2, &datalen, 6, &keycount); if (res || !keycount) { free(data); @@ -189,7 +128,7 @@ static int CmdFlashMemLoad(const char *Cmd) { datalen += 2; break; case DICTIONARY_T55XX: - start_index = DEFAULT_T55XX_KEYS_OFFSET; + offset = DEFAULT_T55XX_KEYS_OFFSET; res = loadFileDICTIONARY(filename, data + 2, &datalen, 4, &keycount); if (res || !keycount) { free(data); @@ -204,7 +143,7 @@ static int CmdFlashMemLoad(const char *Cmd) { datalen += 2; break; case DICTIONARY_ICLASS: - start_index = DEFAULT_ICLASS_KEYS_OFFSET; + offset = DEFAULT_ICLASS_KEYS_OFFSET; res = loadFileDICTIONARY(filename, data + 2, &datalen, 8, &keycount); if (res || !keycount) { free(data); @@ -253,13 +192,13 @@ static int CmdFlashMemLoad(const char *Cmd) { clearCommandBuffer(); - SendCommandOLD(CMD_FLASHMEM_WRITE, start_index + bytes_sent, bytes_in_packet, 0, data + bytes_sent, bytes_in_packet); + SendCommandOLD(CMD_FLASHMEM_WRITE, offset + bytes_sent, bytes_in_packet, 0, data + bytes_sent, bytes_in_packet); bytes_remaining -= bytes_in_packet; bytes_sent += bytes_in_packet; PacketResponseNG resp; - if (!WaitForResponseTimeout(CMD_ACK, &resp, 2000)) { + if (WaitForResponseTimeout(CMD_ACK, &resp, 2000) == false) { PrintAndLogEx(WARNING, "timeout while waiting for reply."); conn.block_after_ACK = false; free(data); @@ -276,54 +215,37 @@ static int CmdFlashMemLoad(const char *Cmd) { conn.block_after_ACK = false; free(data); - PrintAndLogEx(SUCCESS, "Wrote "_GREEN_("%zu")" bytes to offset "_GREEN_("%u"), datalen, start_index); + PrintAndLogEx(SUCCESS, "Wrote "_GREEN_("%zu")" bytes to offset "_GREEN_("%u"), datalen, offset); return PM3_SUCCESS; } + static int CmdFlashMemDump(const char *Cmd) { + CLIParserContext *ctx; + CLIParserInit(&ctx, "mem dump", + "Dumps flash memory on device into a file or view in console", + "mem dump -f myfile -> download all flashmem to file\n" + "mem dump --view -o 262015 --len 128 -> display 128 bytes from offset 262015 (RSA sig)\n" + "mem dump --view -f myfile -o 241664 --len 58 -> display 58 bytes from offset 241664 and save to file" + ); + + void *argtable[] = { + arg_param_begin, + arg_int0("o", "offset", "", "offset in memory"), + arg_int0("l", "len", "", "length"), + arg_lit0("v", "view", "view dump"), + arg_strx0("f", "file", "", "file name"), + arg_param_end + }; + CLIExecWithReturn(ctx, Cmd, argtable, false); + + int offset = arg_get_int_def(ctx, 1, 0); + int len = arg_get_int_def(ctx, 2, FLASH_MEM_MAX_SIZE); + bool view = arg_get_lit(ctx, 3); + int fnlen = 0; char filename[FILE_PATH_SIZE] = {0}; - uint8_t cmdp = 0; - bool errors = false; - bool print = false; - uint32_t start_index = 0, len = FLASH_MEM_MAX_SIZE; - - while (param_getchar(Cmd, cmdp) != 0x00 && !errors) { - switch (tolower(param_getchar(Cmd, cmdp))) { - case 'h': - return usage_flashmem_dump(); - case 'l': - len = param_get32ex(Cmd, cmdp + 1, FLASH_MEM_MAX_SIZE, 10); - cmdp += 2; - break; - case 'o': - start_index = param_get32ex(Cmd, cmdp + 1, 0, 10); - cmdp += 2; - break; - case 'p': - print = true; - cmdp += 1; - break; - case 'f': - //File handling - if (param_getstr(Cmd, cmdp + 1, filename, FILE_PATH_SIZE) >= FILE_PATH_SIZE) { - PrintAndLogEx(FAILED, "Filename too long"); - errors = true; - break; - } - cmdp += 2; - break; - default: - PrintAndLogEx(WARNING, "Unknown parameter '%c'", param_getchar(Cmd, cmdp)); - errors = true; - break; - } - } - - //Validations - if (errors || cmdp == 0) { - usage_flashmem_dump(); - return PM3_EINVARG; - } + CLIParamStrToBuf(arg_get_str(ctx, 4), (uint8_t*)filename, FILE_PATH_SIZE, &fnlen); + CLIParserFree(ctx); uint8_t *dump = calloc(len, sizeof(uint8_t)); if (!dump) { @@ -331,14 +253,15 @@ static int CmdFlashMemDump(const char *Cmd) { return PM3_EMALLOC; } - PrintAndLogEx(INFO, "downloading "_YELLOW_("%u")" bytes from flashmem", len); - if (!GetFromDevice(FLASH_MEM, dump, len, start_index, NULL, 0, NULL, -1, true)) { - PrintAndLogEx(FAILED, "ERROR; downloading from flashmemory"); + PrintAndLogEx(INFO, "downloading "_YELLOW_("%u")" bytes from flash memory", len); + if (!GetFromDevice(FLASH_MEM, dump, len, offset, NULL, 0, NULL, -1, true)) { + PrintAndLogEx(FAILED, "ERROR; downloading from flash memory"); free(dump); return PM3_EFLASH; } - if (print) { + if (view) { + PrintAndLogEx(INFO, "---- " _CYAN_("data") " ---------------"); print_hex_break(dump, len, 32); } @@ -350,39 +273,32 @@ static int CmdFlashMemDump(const char *Cmd) { free(dump); return PM3_SUCCESS; } + static int CmdFlashMemWipe(const char *Cmd) { - uint8_t cmdp = 0; - bool errors = false; - bool initalwipe = false; - uint8_t page = 0; - while (param_getchar(Cmd, cmdp) != 0x00 && !errors) { - switch (tolower(param_getchar(Cmd, cmdp))) { - case 'h': - return usage_flashmem_wipe(); - case 'p': - page = param_get8ex(Cmd, cmdp + 1, 0, 10); - if (page > 2) { - PrintAndLogEx(WARNING, "page must be 0, 1 or 2"); - errors = true; - break; - } - cmdp += 2; - break; - case 'i': - initalwipe = true; - cmdp++; - break; - default: - PrintAndLogEx(WARNING, "Unknown parameter '%c'", param_getchar(Cmd, cmdp)); - errors = true; - break; - } - } + CLIParserContext *ctx; + CLIParserInit(&ctx, "mem wipe", + "Wipe flash memory on device, which fills it with 0xFF\n" + _WHITE_("[ ") _RED_("!!! OBS") " ] use with caution", + "mem wipe -p 0 -> wipes first page" +// "mem wipe -i -> inital total wipe" + ); - //Validations - if (errors || cmdp == 0) { - usage_flashmem_wipe(); + void *argtable[] = { + arg_param_begin, + arg_int0("p", NULL, "", "0,1,2 page memory"), +// arg_lit0("i", NULL, "inital total wipe"), + arg_param_end + }; + CLIExecWithReturn(ctx, Cmd, argtable, false); + + bool initalwipe = false; + int page = arg_get_int_def(ctx, 1, -1); +// initalwipe = arg_get_lit(ctx, 2); + CLIParserFree(ctx); + + if (page < 0 || page > 2 ) { + PrintAndLogEx(WARNING, "page must be 0, 1 or 2"); return PM3_EINVARG; } @@ -393,59 +309,51 @@ static int CmdFlashMemWipe(const char *Cmd) { PrintAndLogEx(WARNING, "timeout while waiting for reply."); return PM3_ETIMEOUT; } + + const char* msg = "Flash WIPE "; uint8_t isok = resp.oldarg[0] & 0xFF; if (isok) - PrintAndLogEx(SUCCESS, "Flash WIPE ok"); + PrintAndLogEx(SUCCESS, "%s ( " _GREEN_("ok")" )", msg); else { - PrintAndLogEx(FAILED, "Flash WIPE failed"); + PrintAndLogEx(FAILED, "%s ( " _RED_("failed") " )", msg); return PM3_EFLASH; } return PM3_SUCCESS; } + static int CmdFlashMemInfo(const char *Cmd) { - uint8_t sha_hash[20] = {0}; - mbedtls_rsa_context rsa; + CLIParserContext *ctx; + CLIParserInit(&ctx, "mem info", + "Collect signature and verify it from flash memory", + "mem info" +// "mem info -s" + ); - uint8_t cmdp = 0; - bool errors = false, shall_write = false, shall_sign = false; - while (param_getchar(Cmd, cmdp) != 0x00 && !errors) { - switch (tolower(param_getchar(Cmd, cmdp))) { - case 'h': - return usage_flashmem_info(); - case 's': { - shall_sign = true; - cmdp++; - break; - } - case 'w': - shall_write = true; - cmdp++; - break; - default: - PrintAndLogEx(WARNING, "Unknown parameter '%c'", param_getchar(Cmd, cmdp)); - errors = true; - break; - } - } + void *argtable[] = { + arg_param_begin, +// arg_lit0("s", NULL, "create a signature"), +// arg_lit0("w", NULL, "write signature to flash memory"), + arg_param_end + }; + CLIExecWithReturn(ctx, Cmd, argtable, true); - //Validations - if (errors) { - usage_flashmem_info(); - return PM3_EINVARG; - } + bool shall_sign = false, shall_write = false; +// shall_sign = arg_get_lit(ctx, 1); +// shall_write = arg_get_lit(ctx, 2); + CLIParserFree(ctx); clearCommandBuffer(); SendCommandNG(CMD_FLASHMEM_INFO, NULL, 0); PacketResponseNG resp; - if (!WaitForResponseTimeout(CMD_ACK, &resp, 2500)) { - PrintAndLogEx(WARNING, "timeout while waiting for reply."); + if (WaitForResponseTimeout(CMD_ACK, &resp, 2500) == false) { + PrintAndLogEx(WARNING, "timeout while waiting for reply"); return PM3_ETIMEOUT; } uint8_t isok = resp.oldarg[0] & 0xFF; - if (!isok) { + if (isok == false) { PrintAndLogEx(FAILED, "failed"); return PM3_EFLASH; } @@ -455,15 +363,20 @@ static int CmdFlashMemInfo(const char *Cmd) { memcpy(&mem, (rdv40_validation_t *)resp.data.asBytes, sizeof(rdv40_validation_t)); // Flash ID hash (sha1) + uint8_t sha_hash[20] = {0}; mbedtls_sha1(mem.flashid, sizeof(mem.flashid), sha_hash); // print header - PrintAndLogEx(INFO, "\n--- Flash memory Information ---------"); - PrintAndLogEx(INFO, "-------------------------------------------------------------"); - PrintAndLogEx(INFO, "ID | %s", sprint_hex(mem.flashid, sizeof(mem.flashid))); - PrintAndLogEx(INFO, "SHA1 | %s", sprint_hex(sha_hash, sizeof(sha_hash))); - PrintAndLogEx(INFO, "RSA SIGNATURE |"); - print_hex_break(mem.signature, sizeof(mem.signature), 32); + PrintAndLogEx(NORMAL, ""); + PrintAndLogEx(INFO, "--- " _CYAN_("Flash memory Information") " ---------"); +// PrintAndLogEx(INFO, "-----------------------------------------------------------------"); + PrintAndLogEx(INFO, "ID................... %s", sprint_hex_inrow(mem.flashid, sizeof(mem.flashid))); + PrintAndLogEx(INFO, "SHA1................. %s", sprint_hex_inrow(sha_hash, sizeof(sha_hash))); + PrintAndLogEx(NORMAL, ""); + PrintAndLogEx(INFO, "--- " _CYAN_("RDV4 RSA signature") " ---------------"); + for (int i = 0; i < (sizeof(mem.signature) / 32); i++) { + PrintAndLogEx(INFO, " %s", sprint_hex_inrow(mem.signature + (i * 32), 32)); + } //------------------------------------------------------------------------------- // RRG Public RSA Key @@ -473,7 +386,10 @@ static int CmdFlashMemInfo(const char *Cmd) { #define RSA_E "010001" // public key modulus N -#define RSA_N "E28D809BF323171D11D1ACA4C32A5B7E0A8974FD171E75AD120D60E9B76968FF4B0A6364AE50583F9555B8EE1A725F279E949246DF0EFCE4C02B9F3ACDCC623F9337F21C0C066FFB703D8BFCB5067F309E056772096642C2B1A8F50305D5EC33DB7FB5A3C8AC42EB635AE3C148C910750ABAA280CE82DC2F180F49F30A1393B5" +#define RSA_N "E28D809BF323171D11D1ACA4C32A5B7E0A8974FD171E75AD120D60E9B76968FF" \ + "4B0A6364AE50583F9555B8EE1A725F279E949246DF0EFCE4C02B9F3ACDCC623F" \ + "9337F21C0C066FFB703D8BFCB5067F309E056772096642C2B1A8F50305D5EC33" \ + "DB7FB5A3C8AC42EB635AE3C148C910750ABAA280CE82DC2F180F49F30A1393B5" //------------------------------------------------------------------------------- // Example RSA-1024 keypair, for test purposes (from common/polarssl/rsa.c) @@ -516,9 +432,9 @@ static int CmdFlashMemInfo(const char *Cmd) { "F5A3B2A5D33605AEBBCCBA7FEB9F2D2F" \ "A74206CEC169D74BF5A8C50D6F48EA08" - #define KEY_LEN 128 + mbedtls_rsa_context rsa; mbedtls_rsa_init(&rsa, MBEDTLS_RSA_PKCS_V15, 0); rsa.len = KEY_LEN; @@ -532,13 +448,31 @@ static int CmdFlashMemInfo(const char *Cmd) { mbedtls_mpi_read_string(&rsa.DQ, 16, RSA_DQ); mbedtls_mpi_read_string(&rsa.QP, 16, RSA_QP); - PrintAndLogEx(INFO, "KEY length | %d", KEY_LEN); - bool is_keyok = (mbedtls_rsa_check_pubkey(&rsa) == 0 || mbedtls_rsa_check_privkey(&rsa) == 0); + + PrintAndLogEx(NORMAL, ""); + PrintAndLogEx(INFO, "--- " _CYAN_("RDV4 RSA Public key") " --------------"); + + char str_exp[10]; + char str_pk[261]; + size_t exlen = 0, pklen = 0; + mbedtls_mpi_write_string(&rsa.E, 16, str_exp, sizeof(str_exp), &exlen); + mbedtls_mpi_write_string(&rsa.N, 16, str_pk, sizeof(str_pk), &pklen); + + PrintAndLogEx(INFO, "Len.................. %u", rsa.len); + PrintAndLogEx(INFO, "Exponent............. %s", str_exp); + PrintAndLogEx(INFO, "Public key modulus N"); + PrintAndLogEx(INFO, " %.64s", str_pk); + PrintAndLogEx(INFO, " %.64s", str_pk + 64); + PrintAndLogEx(INFO, " %.64s", str_pk + 128); + PrintAndLogEx(INFO, " %.64s", str_pk + 192); + + PrintAndLogEx(NORMAL, ""); + const char *msgkey = "RSA key validation... "; if (is_keyok) - PrintAndLogEx(SUCCESS, "RSA key validation ok"); + PrintAndLogEx(SUCCESS, "%s( " _GREEN_("ok") " )", msgkey); else - PrintAndLogEx(FAILED, "RSA key validation failed"); + PrintAndLogEx(FAILED, "%s( " _RED_("failed") " )", msgkey); // uint8_t from_device[KEY_LEN]; @@ -554,10 +488,11 @@ static int CmdFlashMemInfo(const char *Cmd) { if (shall_sign) { int is_signed = mbedtls_rsa_pkcs1_sign(&rsa, NULL, NULL, MBEDTLS_RSA_PRIVATE, MBEDTLS_MD_SHA1, 20, sha_hash, sign); + const char *msgsign = "RSA signing.......... "; if (is_signed == 0) - PrintAndLogEx(SUCCESS, "RSA Signing ok"); + PrintAndLogEx(SUCCESS, "%s( " _GREEN_("ok") " )", msgsign); else - PrintAndLogEx(FAILED, "RSA Signing failed"); + PrintAndLogEx(FAILED, "%s( " _RED_("failed") " )", msgsign); if (shall_write) { // save to mem @@ -574,29 +509,33 @@ static int CmdFlashMemInfo(const char *Cmd) { } } - PrintAndLogEx(INFO, "Signed | "); - print_hex_break(sign, sizeof(sign), 32); + PrintAndLogEx(INFO, "Signed"); + for (int i = 0; i < (sizeof(sign) / 32); i++) { + PrintAndLogEx(INFO, " %s", sprint_hex_inrow(sign + (i * 32), 32)); + } } // Verify (public key) int is_verified = mbedtls_rsa_pkcs1_verify(&rsa, NULL, NULL, MBEDTLS_RSA_PUBLIC, MBEDTLS_MD_SHA1, 20, sha_hash, from_device); + const char *msgverify = "RSA verification..... "; if (is_verified == 0) - PrintAndLogEx(SUCCESS, "RSA Verification ok"); + PrintAndLogEx(SUCCESS, "%s( " _GREEN_("ok") " )", msgverify); else - PrintAndLogEx(FAILED, "RSA Verification failed"); + PrintAndLogEx(FAILED, "%s( " _RED_("failed") " )", msgverify); + PrintAndLogEx(NORMAL, ""); mbedtls_rsa_free(&rsa); return PM3_SUCCESS; } static command_t CommandTable[] = { {"help", CmdHelp, AlwaysAvailable, "This help"}, - {"spiffs", CmdFlashMemSpiFFS, IfPm3Flash, "High level SPI FileSystem Flash manipulation [rdv40]"}, - {"spibaud", CmdFlashmemSpiBaudrate, IfPm3Flash, "Set Flash memory Spi baudrate [rdv40]"}, - {"info", CmdFlashMemInfo, IfPm3Flash, "Flash memory information [rdv40]"}, - {"load", CmdFlashMemLoad, IfPm3Flash, "Load data into flash memory [rdv40]"}, - {"dump", CmdFlashMemDump, IfPm3Flash, "Dump data from flash memory [rdv40]"}, - {"wipe", CmdFlashMemWipe, IfPm3Flash, "Wipe data from flash memory [rdv40]"}, + {"baudrate", CmdFlashmemSpiBaudrate, IfPm3Flash, "Set Flash memory Spi baudrate"}, + {"spiffs", CmdFlashMemSpiFFS, IfPm3Flash, "High level SPI FileSystem Flash manipulation"}, + {"info", CmdFlashMemInfo, IfPm3Flash, "Flash memory information"}, + {"load", CmdFlashMemLoad, IfPm3Flash, "Load data into flash memory"}, + {"dump", CmdFlashMemDump, IfPm3Flash, "Dump data from flash memory"}, + {"wipe", CmdFlashMemWipe, IfPm3Flash, "Wipe data from flash memory"}, {NULL, NULL, NULL, NULL} }; From 8e1546b0128acf73a5a796891f91023c5ce4195b Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sat, 3 Oct 2020 17:14:57 +0200 Subject: [PATCH 0764/1047] textual --- client/src/cmdflashmem.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/src/cmdflashmem.c b/client/src/cmdflashmem.c index c3cf85585..1262b5645 100644 --- a/client/src/cmdflashmem.c +++ b/client/src/cmdflashmem.c @@ -29,7 +29,7 @@ static int CmdHelp(const char *Cmd); static int CmdFlashmemSpiBaudrate(const char *Cmd) { CLIParserContext *ctx; - CLIParserInit(&ctx, " mem baudrate 48", + CLIParserInit(&ctx, "mem baudrate", "Set the baudrate for the SPI flash memory communications.\n" "Reading Flash ID will virtually always fail under 48MHz setting.\n" "Unless you know what you are doing, please stay at 24MHz.\n" From e5f746e018d0c2fa53d3cb47d0875dac850ef948 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Sat, 3 Oct 2020 19:08:27 +0200 Subject: [PATCH 0765/1047] fix 14b apdu --- armsrc/epa.c | 2 +- armsrc/iso14443b.c | 19 ++++++++++--------- armsrc/iso14443b.h | 2 +- 3 files changed, 12 insertions(+), 11 deletions(-) diff --git a/armsrc/epa.c b/armsrc/epa.c index 317f2ce7b..2a0025610 100644 --- a/armsrc/epa.c +++ b/armsrc/epa.c @@ -118,7 +118,7 @@ static int EPA_APDU(uint8_t *apdu, size_t length, uint8_t *response, uint16_t re case 'a': return iso14_apdu(apdu, (uint16_t) length, false, response, NULL); case 'b': - return iso14443b_apdu(apdu, length, false, response, respmaxlen); + return iso14443b_apdu(apdu, length, false, response, respmaxlen, NULL); default: return 0; } diff --git a/armsrc/iso14443b.c b/armsrc/iso14443b.c index ccbe06e5c..01d890d28 100644 --- a/armsrc/iso14443b.c +++ b/armsrc/iso14443b.c @@ -1168,7 +1168,7 @@ static void CodeAndTransmit14443bAsReader(const uint8_t *cmd, int len, uint32_t /* Sends an APDU to the tag * TODO: check CRC and preamble */ -int iso14443b_apdu(uint8_t const *msg, size_t msg_len, bool send_chaining, uint8_t *response, uint16_t respmaxlen) { +int iso14443b_apdu(uint8_t const *msg, size_t msg_len, bool send_chaining, void *rxdata, uint16_t rxmaxlen, uint8_t *res) { uint8_t real_cmd[msg_len + 4]; @@ -1195,10 +1195,10 @@ int iso14443b_apdu(uint8_t const *msg, size_t msg_len, bool send_chaining, uint8 CodeAndTransmit14443bAsReader(real_cmd, msg_len + 3, &start_time, &eof_time); eof_time += DELAY_ISO14443B_VCD_TO_VICC_READER; - int len = Get14443bAnswerFromTag(response, respmaxlen, ISO14443B_READER_TIMEOUT, &eof_time); + int len = Get14443bAnswerFromTag(rxdata, rxmaxlen, ISO14443B_READER_TIMEOUT, &eof_time); FpgaDisableTracing(); - uint8_t *data_bytes = (uint8_t *) response; + uint8_t *data_bytes = (uint8_t *) rxdata; if (len <= 0) { return 0; //DATA LINK ERROR @@ -1219,10 +1219,10 @@ int iso14443b_apdu(uint8_t const *msg, size_t msg_len, bool send_chaining, uint8 // retrieve the result again (with increased timeout) eof_time += DELAY_ISO14443B_VCD_TO_VICC_READER; - len = Get14443bAnswerFromTag(response, respmaxlen, ISO14443B_READER_TIMEOUT, &eof_time); + len = Get14443bAnswerFromTag(rxdata, rxmaxlen, ISO14443B_READER_TIMEOUT, &eof_time); FpgaDisableTracing(); - data_bytes = response; + data_bytes = rxdata; // restore timeout iso14b_set_timeout(save_iso14b_timeout); } @@ -1237,8 +1237,8 @@ int iso14443b_apdu(uint8_t const *msg, size_t msg_len, bool send_chaining, uint8 } // if we received I-block with chaining we need to send ACK and receive another block of data - if (response) - *response = data_bytes[0]; + if (res) + *res = data_bytes[0]; // crc check if (len >= 3 && !check_crc(CRC_14443_B, data_bytes, len)) { @@ -1877,9 +1877,10 @@ void SendRawCommand14443B_Ex(PacketCommandNG *c) { } if ((param & ISO14B_APDU) == ISO14B_APDU) { - status = iso14443b_apdu(cmd, len, (param & ISO14B_SEND_CHAINING), buf, sizeof(buf)); + uint8_t res; + status = iso14443b_apdu(cmd, len, (param & ISO14B_SEND_CHAINING), buf, sizeof(buf), &res); sendlen = MIN(Demod.len, PM3_CMD_DATA_SIZE); - reply_mix(CMD_HF_ISO14443B_COMMAND, status, status, 0, buf, sendlen); + reply_mix(CMD_HF_ISO14443B_COMMAND, status, res, 0, buf, sendlen); } if ((param & ISO14B_RAW) == ISO14B_RAW) { diff --git a/armsrc/iso14443b.h b/armsrc/iso14443b.h index 7e5023e1b..f770bbf8c 100644 --- a/armsrc/iso14443b.h +++ b/armsrc/iso14443b.h @@ -27,7 +27,7 @@ #endif void iso14443b_setup(void); -int iso14443b_apdu(uint8_t const *msg, size_t msg_len, bool send_chaining, uint8_t *response, uint16_t respmaxlen); +int iso14443b_apdu(uint8_t const *msg, size_t msg_len, bool send_chaining, void *rxdata, uint16_t rxmaxlen, uint8_t *res); int iso14443b_select_card(iso14b_card_select_t *card); int iso14443b_select_card_srx(iso14b_card_select_t *card); From 51c0d07eb92103418aac15c1829aba92a054389c Mon Sep 17 00:00:00 2001 From: tcprst Date: Sat, 3 Oct 2020 15:40:03 -0400 Subject: [PATCH 0766/1047] lf hid clone, sim, brute, watch - now use cliparser --- client/src/cmdlfhid.c | 281 ++++++++++++++++++++---------------------- doc/cheatsheet.md | 18 +-- traces/lf_ATA5577.txt | 2 +- 3 files changed, 143 insertions(+), 158 deletions(-) diff --git a/client/src/cmdlfhid.c b/client/src/cmdlfhid.c index 383243523..e7a45ed75 100644 --- a/client/src/cmdlfhid.c +++ b/client/src/cmdlfhid.c @@ -29,6 +29,7 @@ #include "cmdparser.h" // command_t #include "comms.h" #include "commonutil.h" // ARRAYLEN +#include "cliparser.h" #include "ui.h" #include "graph.h" #include "cmddata.h" //for g_debugMode, demodbuff cmds @@ -43,70 +44,6 @@ static int CmdHelp(const char *Cmd); -static int usage_lf_hid_watch(void) { - PrintAndLogEx(NORMAL, "Enables HID compatible reader mode printing details."); - PrintAndLogEx(NORMAL, "By default, values are printed and logged until the button is pressed or another USB command is issued."); - PrintAndLogEx(NORMAL, ""); - PrintAndLogEx(NORMAL, "Usage: lf hid watch"); - PrintAndLogEx(NORMAL, ""); - PrintAndLogEx(NORMAL, "Examples:"); - PrintAndLogEx(NORMAL, _YELLOW_(" lf hid watch")); - PrintAndLogEx(NORMAL, ""); - return PM3_SUCCESS; -} -static int usage_lf_hid_sim(void) { - PrintAndLogEx(NORMAL, "Enables simulation of HID card with card number."); - PrintAndLogEx(NORMAL, "Simulation runs until the button is pressed or another USB command is issued."); - PrintAndLogEx(NORMAL, ""); - PrintAndLogEx(NORMAL, "Usage: lf hid sim [h] [ID]"); - PrintAndLogEx(NORMAL, "Options:"); - PrintAndLogEx(NORMAL, " h - This help"); - PrintAndLogEx(NORMAL, " ID - HID id"); - PrintAndLogEx(NORMAL, "Examples:"); - PrintAndLogEx(NORMAL, _YELLOW_(" lf hid sim 2006ec0c86")); - PrintAndLogEx(NORMAL, ""); - return PM3_SUCCESS; -} -static int usage_lf_hid_clone(void) { - PrintAndLogEx(NORMAL, "Clone HID to T55x7. " _BLUE_("Tag must be on antenna!")); - PrintAndLogEx(NORMAL, ""); - PrintAndLogEx(NORMAL, "Usage: lf hid clone [h] [l] ID"); - PrintAndLogEx(NORMAL, "Options:"); - PrintAndLogEx(NORMAL, " h - This help"); - PrintAndLogEx(NORMAL, " l - 84bit ID"); - PrintAndLogEx(NORMAL, " ID - HID id"); - PrintAndLogEx(NORMAL, "Examples:"); - PrintAndLogEx(NORMAL, _YELLOW_(" lf hid clone 2006ec0c86")); - PrintAndLogEx(NORMAL, _YELLOW_(" lf hid clone l 2006ec0c86")); - PrintAndLogEx(NORMAL, ""); - return PM3_SUCCESS; -} -static int usage_lf_hid_brute(void) { - PrintAndLogEx(NORMAL, "Enables bruteforce of HID readers with specified facility code."); - PrintAndLogEx(NORMAL, "This is a attack against reader. if cardnumber is given, it starts with it and goes up / down one step"); - PrintAndLogEx(NORMAL, "if cardnumber is not given, it starts with 1 and goes up to 65535"); - PrintAndLogEx(NORMAL, ""); - PrintAndLogEx(NORMAL, "Usage: lf hid brute [h] [v] w [ (decimal)>] [up|down] {...}"); - PrintAndLogEx(NORMAL, "Options:"); - PrintAndLogEx(NORMAL, " h : This help"); - PrintAndLogEx(NORMAL, " w : see " _YELLOW_("`wiegand list`") " for available formats"); - PrintAndLogEx(NORMAL, " f : facility code"); - PrintAndLogEx(NORMAL, " c : card number to start with"); - PrintAndLogEx(NORMAL, " i : issue level"); - PrintAndLogEx(NORMAL, " o : OEM code"); - PrintAndLogEx(NORMAL, " d : delay betweens attempts in ms. Default 1000ms"); - PrintAndLogEx(NORMAL, " v : verbose logging, show all tries"); - PrintAndLogEx(NORMAL, " up : direction to increment card number. (default is both directions)"); - PrintAndLogEx(NORMAL, " down : direction to decrement card number. (default is both directions)"); - PrintAndLogEx(NORMAL, ""); - PrintAndLogEx(NORMAL, "Examples:"); - PrintAndLogEx(NORMAL, _YELLOW_(" lf hid brute w H10301 f 224")); - PrintAndLogEx(NORMAL, _YELLOW_(" lf hid brute w H10301 f 21 d 2000")); - PrintAndLogEx(NORMAL, _YELLOW_(" lf hid brute v w H10301 f 21 c 200 d 2000")); - PrintAndLogEx(NORMAL, ""); - return PM3_SUCCESS; -} - // sending three times. Didn't seem to break the previous sim? static int sendPing(void) { SendCommandNG(CMD_PING, NULL, 0); @@ -276,8 +213,20 @@ static int CmdHIDRead(const char *Cmd) { // this read loops on device side. // uses the demod in lfops.c static int CmdHIDWatch(const char *Cmd) { - uint8_t c = tolower(param_getchar(Cmd, 0)); - if (c == 'h') return usage_lf_hid_watch(); + CLIParserContext *ctx; + + CLIParserInit(&ctx, "lf hid watch", + "Enables HID compatible reader mode printing details.\n" + "By default, values are printed and logged until the button is pressed or another USB command is issued.\n", + "lf hid watch" + ); + + void *argtable[] = { + arg_param_begin, + arg_param_end + }; + CLIExecWithReturn(ctx, Cmd, argtable, true); + CLIParserFree(ctx); PrintAndLogEx(SUCCESS, "Watching for HID Prox cards - place tag on antenna"); PrintAndLogEx(INFO, "Press pm3-button to stop reading cards"); @@ -290,28 +239,52 @@ static int CmdHIDWatch(const char *Cmd) { } static int CmdHIDSim(const char *Cmd) { + int idlen = 0; + uint8_t id[10] = {0}; lf_hidsim_t payload; payload.longFMT = 0; uint32_t hi2 = 0, hi = 0, lo = 0; - uint32_t n = 0, i = 0; + uint32_t i = 0; - uint8_t ctmp = tolower(param_getchar(Cmd, 0)); - if (strlen(Cmd) == 0 || ctmp == 'h') return usage_lf_hid_sim(); + CLIParserContext *ctx; + CLIParserInit(&ctx, "lf hid sim", + "Enables simulation of HID card with card number.", + "lf hid sim 2006ec0c86" + ); + + void *argtable[] = { + arg_param_begin, + arg_lit0("l", "long", "Simulate HID tag with long ID"), + arg_str1(NULL, NULL, "", "HID tag ID"), + arg_param_end + }; + CLIExecWithReturn(ctx, Cmd, argtable, false); - if (strchr(Cmd, 'l') != 0) { - i++; - while (sscanf(&Cmd[i++], "%1x", &n) == 1) { + bool long_id = arg_get_lit(ctx, 1); + + CLIGetHexWithReturn(ctx, 2, id, &idlen); + + CLIParserFree(ctx); + + if (long_id) { + for (i=0; i < idlen; ++i) { hi2 = (hi2 << 4) | (hi >> 28); hi = (hi << 4) | (lo >> 28); - lo = (lo << 4) | (n & 0xf); - } + lo = (lo << 4) | (id[i] >> 4); //get first 4 bits + hi2 = (hi2 << 4) | (hi >> 28); + hi = (hi << 4) | (lo >> 28); + lo = (lo << 4) | (id[i] & 0xf); //get last 4 bits + } PrintAndLogEx(INFO, "Simulating HID tag with long ID: " _GREEN_("%x%08x%08x"), hi2, hi, lo); payload.longFMT = 1; } else { - while (sscanf(&Cmd[i++], "%1x", &n) == 1) { + for (i=0; i < idlen; ++i) { hi = (hi << 4) | (lo >> 28); - lo = (lo << 4) | (n & 0xf); + lo = (lo << 4) | (id[i] >> 4); //get first 4 bits + + hi = (hi << 4) | (lo >> 28); + lo = (lo << 4) | (id[i] & 0xf); //get last 4 bits } PrintAndLogEx(SUCCESS, "Simulating HID tag with ID: " _GREEN_("%x%08x"), hi, lo); hi2 = 0; @@ -334,28 +307,55 @@ static int CmdHIDSim(const char *Cmd) { } static int CmdHIDClone(const char *Cmd) { + int idlen = 0; + uint8_t id[10] = {0}; uint32_t hi2 = 0, hi = 0, lo = 0; - uint32_t n = 0, i = 0; + uint32_t i = 0; + + CLIParserContext *ctx; + CLIParserInit(&ctx, "lf hid clone", + "Clone HID to T55x7. Tag must be on antenna!", + "lf hid clone 2006ec0c86\n" + "lf hid clone -l 2006ec0c86" + ); + + void *argtable[] = { + arg_param_begin, + arg_lit0("l", "long", "84bit HID long ID"), + arg_str1(NULL, NULL, "", "HID tag ID"), + arg_param_end + }; + CLIExecWithReturn(ctx, Cmd, argtable, false); + + bool long_id = arg_get_lit(ctx, 1); + + CLIGetHexWithReturn(ctx, 2, id, &idlen); + + CLIParserFree(ctx); - uint8_t ctmp = tolower(param_getchar(Cmd, 0)); - if (strlen(Cmd) == 0 || ctmp == 'h') return usage_lf_hid_clone(); uint8_t longid[1] = {0}; - if (strchr(Cmd, 'l') != 0) { - i++; - while (sscanf(&Cmd[i++], "%1x", &n) == 1) { + + if (long_id) { + for (i=0; i < idlen; ++i) { hi2 = (hi2 << 4) | (hi >> 28); hi = (hi << 4) | (lo >> 28); - lo = (lo << 4) | (n & 0xf); - } + lo = (lo << 4) | (id[i] >> 4); //get first 4 bits + hi2 = (hi2 << 4) | (hi >> 28); + hi = (hi << 4) | (lo >> 28); + lo = (lo << 4) | (id[i] & 0xf); //get last 4 bits + } PrintAndLogEx(INFO, "Preparing to clone HID tag with long ID: " _GREEN_("%x%08x%08x"), hi2, hi, lo); longid[0] = 1; } else { - while (sscanf(&Cmd[i++], "%1x", &n) == 1) { + for (i=0; i < idlen; ++i) { hi = (hi << 4) | (lo >> 28); - lo = (lo << 4) | (n & 0xf); + lo = (lo << 4) | (id[i] >> 4); //get first 4 bits + + hi = (hi << 4) | (lo >> 28); + lo = (lo << 4) | (id[i] & 0xf); //get last 4 bits } PrintAndLogEx(INFO, "Preparing to clone HID tag with ID: " _GREEN_("%x%08x"), hi, lo); hi2 = 0; @@ -385,82 +385,63 @@ static int CmdHIDClone(const char *Cmd) { static int CmdHIDBrute(const char *Cmd) { - bool errors = false, verbose = false; uint32_t delay = 1000; - uint8_t cmdp = 0; int format_idx = -1; int direction = 0; - char format[16] = {0}; + uint8_t format[16] = {0}; + int formatLen; wiegand_card_t cn_hi, cn_low; memset(&cn_hi, 0, sizeof(wiegand_card_t)); - while (param_getchar(Cmd, cmdp) != 0x00 && !errors) { + CLIParserContext *ctx; + CLIParserInit(&ctx, "lf hid brute", + "Enables bruteforce of HID readers with specified facility code.\n" + "This is a attack against reader. if cardnumber is given, it starts with it and goes up / down one step\n" + "if cardnumber is not given, it starts with 1 and goes up to 65535", + "lf hid brute -w H10301 -f 224\n" + "lf hid brute -w H10301 -f 21 -d 2000\n" + "lf hid brute -v -w H10301 -f 21 -c 200 -d 2000\n" + ); + + void *argtable[] = { + arg_param_begin, + arg_lit0("v", "verbose", "verbose logging, show all tries"), + arg_str1("w", "wiegand", "format", "see " _YELLOW_("`wiegand list`") " for available formats"), + arg_int0("f", "fn", "dec", "facility code"), + arg_int0("c", "cn", "dec", "card number to start with"), + arg_int0("i", NULL, "dec", "issue level"), + arg_int0("o", "oem", "dec", "OEM code"), + arg_int0("d", "delay", "dec", "delay betweens attempts in ms. Default 1000ms"), + arg_lit0(NULL, "up", "direction to increment card number. (default is both directions)"), + arg_lit0(NULL, "down", "direction to decrement card number. (default is both directions)"), + arg_param_end + }; + CLIExecWithReturn(ctx, Cmd, argtable, false); - char s[10] = {0}; - if (param_getstr(Cmd, cmdp, s, sizeof(s)) > 0) { - if (strlen(s) > 1) { - str_lower((char *)s); - if (str_startswith(s, "up")) { - direction = 1; - } else if (str_startswith(s, "do")) { - direction = 2; - } - cmdp++; - continue; - } - } - - switch (tolower(param_getchar(Cmd, cmdp))) { - case 'h': - return usage_lf_hid_brute(); - case 'w': - param_getstr(Cmd, cmdp + 1, format, sizeof(format)); - format_idx = HIDFindCardFormat(format); - if (format_idx == -1) { - PrintAndLogEx(WARNING, "Unknown format: " _YELLOW_("%s"), format); - errors = true; - } - cmdp += 2; - break; - case 'c': - cn_hi.CardNumber = param_get32ex(Cmd, cmdp + 1, 0, 10); - cmdp += 2; - break; - case 'd': - // delay between attemps, defaults to 1000ms. - delay = param_get32ex(Cmd, cmdp + 1, 1000, 10); - cmdp += 2; - break; - case 'f': - cn_hi.FacilityCode = param_get32ex(Cmd, cmdp + 1, 0, 10); - cmdp += 2; - break; - case 'i': - cn_hi.IssueLevel = param_get32ex(Cmd, cmdp + 1, 0, 10); - cmdp += 2; - break; - case 'o': - cn_hi.OEM = param_get32ex(Cmd, cmdp + 1, 0, 10); - cmdp += 2; - break; - case 'v': - verbose = true; - cmdp++; - break; - default: - PrintAndLogEx(WARNING, "Unknown parameter: " _YELLOW_("'%c'"), param_getchar(Cmd, cmdp)); - errors = true; - break; - } - } + bool verbose = arg_get_lit(ctx, 1); + + CLIGetStrWithReturn(ctx, 2, format, &formatLen); + format_idx = HIDFindCardFormat((char*) format); if (format_idx == -1) { - PrintAndLogEx(ERR, "You must select a wiegand format. See " _YELLOW_("`wiegand list`") " for available formats\n"); - errors = true; + PrintAndLogEx(WARNING, "Unknown format: " _YELLOW_("%s"), format); + return PM3_EINVARG; } - if (errors) return usage_lf_hid_brute(); + cn_hi.FacilityCode = arg_get_int_def(ctx, 3, 0); + cn_hi.CardNumber = arg_get_int_def(ctx, 4, 0); + cn_hi.IssueLevel = arg_get_int_def(ctx, 5, 0); + cn_hi.OEM = arg_get_int_def(ctx, 6, 0); + delay = arg_get_int_def(ctx, 7, 1000); + + if (arg_get_lit(ctx, 8) && arg_get_lit(ctx, 9)) { + direction = 0; + } else if (arg_get_lit(ctx, 8)) { + direction = 1; + } else if (arg_get_lit(ctx, 9)) { + direction = 2; + } if (verbose) { PrintAndLogEx(INFO, "Wiegand format#.. %i", format_idx); diff --git a/doc/cheatsheet.md b/doc/cheatsheet.md index 7da56cbcd..02701b53d 100644 --- a/doc/cheatsheet.md +++ b/doc/cheatsheet.md @@ -379,14 +379,18 @@ Brute force HID reader ``` Options --- -a : 26|33|34|35|37|40|44|84 -f : 8-bit value HID facility code -c : (optional) cardnumber to start with, max 65535 -d : delay betweens attempts in ms. Default 1000ms -v : verbose logging, show all tries +-v, --verbose : verbose logging, show all tries +-w, --wiegand format : see `wiegand list` for available formats +-f, --fn dec : facility code +-c, --cn dec : card number to start with +-i dec : issue level +-o, --oem dec : OEM code +-d, --delay dec : delay betweens attempts in ms. Default 1000ms +--up : direction to increment card number. (default is both directions) +--down : direction to decrement card number. (default is both directions) -pm3 --> lf hid brute a 26 f 224 -pm3 --> lf hid brute v a 26 f 21 c 200 d 2000 +pm3 --> lf hid brute -w H10301 -f 224 +pm3 --> lf hid brute -v -w H10301 -f 21 -c 200 -d 2000 ``` ## Indala diff --git a/traces/lf_ATA5577.txt b/traces/lf_ATA5577.txt index 5e3c27995..b725c69fa 100644 --- a/traces/lf_ATA5577.txt +++ b/traces/lf_ATA5577.txt @@ -32,7 +32,7 @@ lf hid clone 2006ec0c86 lf read s 10000 data save f lf_t5577_hid -lf hid clone l 2006ec0c86 +lf hid clone -l 2006ec0c86 lf read s 20000 data save f lf_t5577_hid_84 From c0635b904530d3325124348b2665a60cf09caaeb Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sun, 4 Oct 2020 00:05:37 +0200 Subject: [PATCH 0767/1047] convert to 14b apdu --- client/luascripts/hf_14b_calypso.lua | 48 ++++++++++++++-------------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/client/luascripts/hf_14b_calypso.lua b/client/luascripts/hf_14b_calypso.lua index 6fa40711e..72ac0f102 100644 --- a/client/luascripts/hf_14b_calypso.lua +++ b/client/luascripts/hf_14b_calypso.lua @@ -32,7 +32,7 @@ device-side. local function calypso_parse(result) local r = Command.parse(result) if r.arg1 >= 0 then - local len = r.arg2 * 2 + local len = r.arg1 * 2 if len > 0 then r.data = string.sub(r.data, 0, len); return r, nil @@ -113,8 +113,9 @@ end local function calypso_send_cmd_raw(data, ignoreresponse ) local command, flags, result, err - flags = lib14b.ISO14B_COMMAND.ISO14B_RAW + - lib14b.ISO14B_COMMAND.ISO14B_APPEND_CRC + flags = lib14b.ISO14B_COMMAND.ISO14B_APDU +-- flags = lib14b.ISO14B_COMMAND.ISO14B_RAW + +-- lib14b.ISO14B_COMMAND.ISO14B_APPEND_CRC data = data or "00" @@ -162,6 +163,7 @@ local function calypso_apdu_status(apdu) return status, desc, err end +local CLA = '94' local _calypso_cmds = { -- Break down of command bytes: @@ -184,27 +186,25 @@ local _calypso_cmds = { -- Electronic Purse file -- Electronic Transaction log file - - --['01.Select ICC file'] = '0294 a4 00 0002 3f00', - ['01.Select ICC file'] = '0294 a4 080004 3f00 0002', - ['02.ICC'] = '0394 b2 01 041d', - ['03.Select EnvHol file'] = '0294 a4 080004 2000 2001', - ['04.EnvHol1'] = '0394 b2 01 041d', - ['05.Select EvLog file'] = '0294 a4 080004 2000 2010', - ['06.EvLog1'] = '0394 b2 01 041d', - ['07.EvLog2'] = '0294 b2 02 041d', - ['08.EvLog3'] = '0394 b2 03 041d', - ['09.Select ConList file']= '0294 a4 080004 2000 2050', - ['10.ConList'] = '0394 b2 01 041d', - ['11.Select Contra file'] = '0294 a4 080004 2000 2020', - ['12.Contra1'] = '0394 b2 01 041d', - ['13.Contra2'] = '0294 b2 02 041d', - ['14.Contra3'] = '0394 b2 03 041d', - ['15.Contra4'] = '0294 b2 04 041d', - ['16.Select Counter file']= '0394 a4 080004 2000 2069', - ['17.Counter'] = '0294 b2 01 041d', - ['18.Select SpecEv file'] = '0394 a4 080004 2000 2040', - ['19.SpecEv1'] = '0294 b2 01 041d', + ['01.Select ICC file'] = CLA..'a4 080004 3f00 0002', + ['02.ICC'] = CLA..'b2 01 041d', + ['03.Select EnvHol file'] = CLA..'a4 080004 2000 2001', + ['04.EnvHol1'] = CLA..'b2 01 041d', + ['05.Select EvLog file'] = CLA..'a4 080004 2000 2010', + ['06.EvLog1'] = CLA..'b2 01 041d', + ['07.EvLog2'] = CLA..'b2 02 041d', + ['08.EvLog3'] = CLA..'b2 03 041d', + ['09.Select ConList file']= CLA..'a4 080004 2000 2050', + ['10.ConList'] = CLA..'b2 01 041d', + ['11.Select Contra file'] = CLA..'a4 080004 2000 2020', + ['12.Contra1'] = CLA..'b2 01 041d', + ['13.Contra2'] = CLA..'b2 02 041d', + ['14.Contra3'] = CLA..'b2 03 041d', + ['15.Contra4'] = CLA..'b2 04 041d', + ['16.Select Counter file']= CLA..'a4 080004 2000 2069', + ['17.Counter'] = CLA..'b2 01 041d', + ['18.Select SpecEv file'] = CLA..'a4 080004 2000 2040', + ['19.SpecEv1'] = CLA..'b2 01 041d', } --- From 3771f14c2b7ac8b75f056ce08b7c7463d4120e95 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sun, 4 Oct 2020 02:09:16 +0200 Subject: [PATCH 0768/1047] 14b mobib script --- client/luascripts/hf_14b_mobib.lua | 277 +++++++++++++++++++++++++++++ 1 file changed, 277 insertions(+) create mode 100644 client/luascripts/hf_14b_mobib.lua diff --git a/client/luascripts/hf_14b_mobib.lua b/client/luascripts/hf_14b_mobib.lua new file mode 100644 index 000000000..01dd0f3a0 --- /dev/null +++ b/client/luascripts/hf_14b_mobib.lua @@ -0,0 +1,277 @@ +local cmds = require('commands') +local getopt = require('getopt') +local lib14b = require('read14b') +local utils = require('utils') +local iso7816 = require('7816_error') +local ansicolors = require('ansicolors') + +copyright = '' +author = 'Iceman' +version = 'v1.0.0' +desc = [[ +This is a script to communicate with a MOBIB tag using the '14b raw' commands +]] +example = [[ + script run hf_14b_mobib + script run hf_14b_mobib -b 11223344 + +]] +usage = [[ +script run hf_14b_mobib -h -b +]] +arguments = [[ + h this helptext + b raw bytes to send +]] + +--[[ +This script communicates with /armsrc/iso14443b.c, +Check there for details about data format and how commands are interpreted on the +device-side. +]] + +local function calypso_parse(result) + local r = Command.parse(result) + if r.arg1 >= 0 then + local len = r.arg1 * 2 + if len > 0 then + r.data = string.sub(r.data, 0, len); + return r, nil + end + end + return nil,nil +end +--- +-- A debug printout-function +local function dbg(args) + if not DEBUG then return end + if type(args) == 'table' then + local i = 1 + while args[i] do + dbg(args[i]) + i = i+1 + end + else + print('###', args) + end +end +--- +-- This is only meant to be used when errors occur +local function oops(err) + print('ERROR: ', err) + lib14b.disconnect() + return nil, err +end +--- +-- Usage help +local function help() + print(copyright) + print(author) + print(version) + print(desc) + print(ansicolors.cyan..'Usage'..ansicolors.reset) + print(usage) + print(ansicolors.cyan..'Arguments'..ansicolors.reset) + print(arguments) + print(ansicolors.cyan..'Example usage'..ansicolors.reset) + print(example) +end +-- +-- helper function, give current count of items in lua-table. +local function tablelen(T) + local count = 0 + for _ in pairs(T) do count = count + 1 end + return count +end +--- +-- helper function, gives a sorted table from table t, +-- order can be a seperate sorting-order function. +local function spairs(t, order) + -- collect the keys + local keys = {} + for k in pairs(t) do keys[#keys+1] = k end + + -- if order function given, sort by it by passing the table and keys a, b, + -- otherwise just sort the keys + if order then + table.sort(keys, function(a,b) return order(t, a, b) end) + else + table.sort(keys) + end + + -- return the iterator function + local i = 0 + return function() + i = i + 1 + if keys[i] then + return keys[i], t[keys[i]] + end + end +end +--- +-- Sends a usbpackage , "hf 14b raw" +-- if it reads the response, it converts it to a lua object "Command" first and the Data is cut to correct length. +local function calypso_send_cmd_raw(data, ignoreresponse ) + + local command, flags, result, err + flags = lib14b.ISO14B_COMMAND.ISO14B_APDU + + data = data or "00" + + command = Command:newMIX{ + cmd = cmds.CMD_HF_ISO14443B_COMMAND, + arg1 = flags, + arg2 = #data/2, -- LEN of data, half the length of the ASCII-string hex string + data = data} -- data bytes (commands etc) + + local use_cmd_ack = true + result, err = command:sendMIX(ignoreresponse, 2000, use_cmd_ack) + if result then + local count,cmd,arg0,arg1,arg2 = bin.unpack('LLLL', result) + if arg0 >= 0 then + return calypso_parse(result) + else + err = 'card response failed' + end + else + err = 'No response from card' + end + return result, err +end +--- +-- calypso_card_num : Reads card number from ATR and +-- writes it in the tree in decimal format. +local function calypso_card_num(card) + if not card then return end + local card_num = tonumber( card.uid:sub(1,8),16 ) + print('') + print('Card UID ' ..ansicolors.green..card.uid:format('%x')..ansicolors.reset) + print('Card Number ' ..ansicolors.green..string.format('%u', card_num)..ansicolors.reset) + print('-----------------------') +end +--- +-- analyse CALYPSO apdu status bytes. +local function calypso_apdu_status(apdu) + -- last two is CRC + -- next two is APDU status bytes. + local mess = 'FAIL' + local sw = apdu:sub( #apdu-7, #apdu-4) + desc, err = iso7816.tostring(sw) + --print ('SW', sw, desc, err ) + local status = ( sw == '9000' ) + return status, desc, err +end + +local CLA = '00' +local _calypso_cmds = { + ['01.SELECT AID 1TIC.ICA'] = CLA..'a4 0400 08 315449432e494341', + ['02.Select ICC file a'] = CLA..'a4 0000 02 3f00', + ['03.Select ICC file b'] = CLA..'a4 0000 02 0002', + ['04.ICC'] = CLA..'b2 0104 1d', + ['05.Select Holder file'] = CLA..'a4 0000 02 3f1c', + ['06.Holder1'] = CLA..'b2 0104 1d', + ['07.Holder2'] = CLA..'b2 0204 1d', + ['08.Select EnvHol file a'] = CLA..'a4 0000 00', + ['09.Select EnvHol file b'] = CLA..'a4 0000 02 2000', + ['10.Select EnvHol file c'] = CLA..'a4 0000 02 2001', + ['11.EnvHol1'] = CLA..'b2 0104 1d', + ['11.EnvHol2'] = CLA..'b2 0204 1d', + ['12.Select EvLog file'] = CLA..'a4 0000 02 2010', + ['13.EvLog1'] = CLA..'b2 0104 1d', + ['14.EvLog2'] = CLA..'b2 0204 1d', + ['15.EvLog3'] = CLA..'b2 0304 1d', + ['16.Select ConList file'] = CLA..'a4 0000 02 2050', + ['17.ConList'] = CLA..'b2 0104 1d', + ['18.Select Contra file'] = CLA..'a4 0000 02 2020', + ['19.Contra1'] = CLA..'b2 0104 1d', + ['20.Contra2'] = CLA..'b2 0204 1d', + ['21.Contra3'] = CLA..'b2 0304 1d', + ['22.Contra4'] = CLA..'b2 0404 1d', + ['23.Contra5'] = CLA..'b2 0504 1d', + ['24.Contra6'] = CLA..'b2 0604 1d', + ['25.Contra7'] = CLA..'b2 0704 1d', + ['26.Contra8'] = CLA..'b2 0804 1d', + ['27.Contra9'] = CLA..'b2 0904 1d', + ['28.ContraA'] = CLA..'b2 0a04 1d', + ['29.ContraB'] = CLA..'b2 0b04 1d', + ['30.ContraC'] = CLA..'b2 0c04 1d', + ['31.Select Counter file'] = CLA..'a4 0000 02 2069', + ['32.Counter'] = CLA..'b2 0104 1d', + ['33.Select LoadLog file a'] = CLA..'a4 0000 00', + ['34.Select LoadLog file b'] = CLA..'a4 0000 02 1000', + ['35.Select LoadLog file c'] = CLA..'a4 0000 02 1014', + ['36.LoadLog'] = CLA..'b2 0104 1d', + ['37.Select Purcha file'] = CLA..'a4 0000 02 1015', + ['38.Purcha1'] = CLA..'b2 0104 1d', + ['39.Purcha2'] = CLA..'b2 0204 1d', + ['40.Purcha3'] = CLA..'b2 0304 1d', + ['41.Select SpecEv file a'] = CLA..'a4 0000 00', + ['42.Select SpecEv file b'] = CLA..'a4 0000 02 2000', + ['43.Select SpecEv file c'] = CLA..'a4 0000 02 2040', + ['44.SpecEv1'] = CLA..'b2 0104 1d', + ['45.SpecEv2'] = CLA..'b2 0204 1d', + ['46.SpecEv3'] = CLA..'b2 0304 1d', + ['47.SpecEv4'] = CLA..'b2 0404 1d', +} + +--- +-- The main entry point +function main(args) + + print( string.rep('--',20) ) + print( string.rep('--',20) ) + print() + + local data, apdu, flags, uid, cid, result, err, card + -- Read the parameters + for o, a in getopt.getopt(args, 'h') do + if o == 'h' then return help() end + if o == 'b' then bytes = a end + end + +-- lib14b.connect() + + -- Select 14b tag. + card, err = lib14b.waitFor14443b() + if not card then return oops(err) end + + calypso_card_num(card) + cid = card.cid + + for i, apdu in spairs(_calypso_cmds) do + print('>> '..ansicolors.yellow..i..ansicolors.reset) + apdu = apdu:gsub('%s+', '') + result, err = calypso_send_cmd_raw(apdu , false) + if err then + print('<< '..err) + else + if result then + local status, desc, err = calypso_apdu_status(result.data) + local d = result.data:sub(3, (#result.data - 8)) + if status then + print('<< '..d..' ('..ansicolors.green..'ok'..ansicolors.reset..')') + else + print('<< '..d..' '..ansicolors.red..err..ansicolors.reset ) + end + else + print('<< no answer') + end + end + end + lib14b.disconnect() +end +--- +-- a simple selftest function, tries to convert +function selftest() + DEBUG = true + dbg('Performing test') + dbg('Tests done') +end +-- Flip the switch here to perform a sanity check. +-- It read a nonce in two different ways, as specified in the usage-section +if '--test'==args then + selftest() +else + -- Call the main + main(args) +end From dd970ea56255a31f74ff741b9dddf8f82be35658 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sun, 4 Oct 2020 02:09:58 +0200 Subject: [PATCH 0769/1047] text --- armsrc/hfsnoop.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/armsrc/hfsnoop.c b/armsrc/hfsnoop.c index ec13dbc85..4e4539f3e 100644 --- a/armsrc/hfsnoop.c +++ b/armsrc/hfsnoop.c @@ -99,7 +99,7 @@ int HfSniff(uint32_t samplesToSkip, uint32_t triggersToSkip, uint16_t *len) { optimizedSniff((uint16_t *)mem, *len); - if (DBGLEVEL >= DBG_INFO) { + if (DBGLEVEL >= DBG_INFO) { Dbprintf("Trigger kicked in (%d >= 180)", r); Dbprintf("Collected %u samples", *len); } From 12b3a7c2363df17e4c735d121c896ab4a33d3538 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sun, 4 Oct 2020 02:24:10 +0200 Subject: [PATCH 0770/1047] fix: data mtrim - no crashing --- client/src/cmddata.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/client/src/cmddata.c b/client/src/cmddata.c index ffa6785b4..74f6b4a23 100644 --- a/client/src/cmddata.c +++ b/client/src/cmddata.c @@ -1825,7 +1825,8 @@ static int CmdMtrim(const char *Cmd) { uint32_t start = 0, stop = 0; sscanf(Cmd, "%u %u", &start, &stop); - if (start > GraphTraceLen || stop > GraphTraceLen || start > stop) return PM3_ESOFT; + if (start > GraphTraceLen || stop > GraphTraceLen || start >= stop) + return PM3_ESOFT; // leave start position sample start++; From dc9e16a4e1c14aa3cc21b4df40528f5074927925 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sun, 4 Oct 2020 10:57:21 +0200 Subject: [PATCH 0771/1047] add some defines to get double --- client/deps/cliparser/cliparser.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/client/deps/cliparser/cliparser.h b/client/deps/cliparser/cliparser.h index 51c2ed8d5..90b74f774 100644 --- a/client/deps/cliparser/cliparser.h +++ b/client/deps/cliparser/cliparser.h @@ -19,9 +19,15 @@ #define arg_getsize(a) (sizeof(a) / sizeof(a[0])) #define arg_get_lit(ctx, n) (((struct arg_lit*)((ctx)->argtable)[n])->count) + #define arg_get_int_count(ctx, n)(((struct arg_int*)((ctx)->argtable)[n])->count) #define arg_get_int(ctx, n) (((struct arg_int*)((ctx)->argtable)[n])->ival[0]) #define arg_get_int_def(ctx, n, def)(arg_get_int_count((ctx), n) ? (arg_get_int((ctx), n)) : (def)) + +#define arg_get_dbl_count(ctx, n)(((struct arg_dbl*)((ctx)->argtable)[n])->count) +#define arg_get_dbl(ctx, n) (((struct arg_dbl*)((ctx)->argtable)[n])->dval[0]) +#define arg_get_dbl_def(ctx, n, def)(arg_get_dbl_count((ctx), n) ? (arg_get_dbl((ctx), n)) : (def)) + #define arg_get_str(ctx, n) ((struct arg_str*)((ctx)->argtable)[n]) #define arg_get_str_len(ctx, n) (strlen(((struct arg_str*)((ctx)->argtable)[n])->sval[0])) From 1267584e3f9fc103c33cf42021bdf5d3d496738e Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sun, 4 Oct 2020 11:07:26 +0200 Subject: [PATCH 0772/1047] wiegand - now uses cli parse --- client/src/cmdwiegand.c | 211 +++++++++++++++++----------------------- doc/cheatsheet.md | 38 ++++---- 2 files changed, 107 insertions(+), 142 deletions(-) diff --git a/client/src/cmdwiegand.c b/client/src/cmdwiegand.c index 19f166284..3be648ed4 100644 --- a/client/src/cmdwiegand.c +++ b/client/src/cmdwiegand.c @@ -13,6 +13,7 @@ #include #include #include "cmdparser.h" // command_t +#include "cliparser.h" #include "comms.h" #include "pm3_cmd.h" #include "protocols.h" @@ -24,164 +25,126 @@ static int CmdHelp(const char *Cmd); -static int usage_wiegand_list(void) { - PrintAndLogEx(NORMAL, "List available wiegand formats"); - return PM3_SUCCESS; -} -static int usage_wiegand_encode(void) { - PrintAndLogEx(NORMAL, "Encode wiegand formatted number to raw hex"); - PrintAndLogEx(NORMAL, "Usage: wiegand encode [w ] [ ] {...}"); - PrintAndLogEx(NORMAL, "Options:"); - PrintAndLogEx(NORMAL, " w see `wiegand list` for available formats"); - PrintAndLogEx(NORMAL, " c card number"); - PrintAndLogEx(NORMAL, " f facility code"); - PrintAndLogEx(NORMAL, " i issue Level"); - PrintAndLogEx(NORMAL, " o OEM code"); - PrintAndLogEx(NORMAL, ""); - PrintAndLogEx(NORMAL, "samples:"); - PrintAndLogEx(NORMAL, " wiegand encode w H10301 f 101 c 1337"); - return PM3_SUCCESS; -} -static int usage_wiegand_decode(void) { - PrintAndLogEx(NORMAL, "Decode raw hex to wiegand format"); - PrintAndLogEx(NORMAL, "Usage: wiegand decode [id]

"); - PrintAndLogEx(NORMAL, " p ignore invalid parity"); - PrintAndLogEx(NORMAL, ""); - PrintAndLogEx(NORMAL, "Samples:"); - PrintAndLogEx(NORMAL, " wiegand decode 2006f623ae"); - return PM3_SUCCESS; -} - -static void PrintTagId(wiegand_message_t *packed) { +static void print_wiegand_code(wiegand_message_t *packed) { + const char* s = "Encoded wiegand: "; if (packed->Top != 0) { - PrintAndLogEx(SUCCESS, "Card ID: %X%08X%08X", - (uint32_t)packed->Top, - (uint32_t)packed->Mid, - (uint32_t)packed->Bot) - ; + PrintAndLogEx(SUCCESS, "%s" _GREEN_("%X%08X%08X"), + s, + (uint32_t)packed->Top, + (uint32_t)packed->Mid, + (uint32_t)packed->Bot + ); } else { - PrintAndLogEx(SUCCESS, "Card ID: %X%08X", - (uint32_t)packed->Mid, - (uint32_t)packed->Bot) - ; + PrintAndLogEx(SUCCESS, "%s" _YELLOW_("%X%08X"), + s, + (uint32_t)packed->Mid, + (uint32_t)packed->Bot + ); } } int CmdWiegandList(const char *Cmd) { - bool errors = false; - char cmdp = 0; - while (param_getchar(Cmd, cmdp) != 0x00 && !errors) { - switch (tolower(param_getchar(Cmd, cmdp))) { - case 'h': - return usage_wiegand_list(); - default: - PrintAndLogEx(WARNING, "Unknown parameter '%c'", param_getchar(Cmd, cmdp)); - errors = true; - break; - } - } + + CLIParserContext *ctx; + CLIParserInit(&ctx, "wiegand info", + "List available wiegand formats", + "wiegand list" + ); + + void *argtable[] = { + arg_param_begin, + arg_param_end + }; + CLIExecWithReturn(ctx, Cmd, argtable, true); + CLIParserFree(ctx); + HIDListFormats(); return PM3_SUCCESS; } int CmdWiegandEncode(const char *Cmd) { - int format_idx = -1; - char format[16] = {0}; + CLIParserContext *ctx; + CLIParserInit(&ctx, "wiegand encode", + "Encode wiegand formatted number to raw hex", + "wiegand encode -w H10301 --fc 101 --cn 1337" + ); + + void *argtable[] = { + arg_param_begin, + arg_int0(NULL, "fc", "", "facility number"), + arg_int1(NULL, "cn", "", "card number"), + arg_int0(NULL, "issue", "", "issue level"), + arg_int0(NULL, "oem", "", "OEM code"), + arg_strx1("w", "wiegand", "", "see `wiegand list` for available formats"), + arg_param_end + }; + CLIExecWithReturn(ctx, Cmd, argtable, true); wiegand_card_t data; memset(&data, 0, sizeof(wiegand_card_t)); + + data.FacilityCode = (uint32_t)arg_get_int_def(ctx, 1, 0); + data.CardNumber = (uint64_t)arg_get_int_def(ctx, 2, 0); + data.IssueLevel = (uint32_t)arg_get_int_def(ctx, 3, 0); + data.OEM = (uint32_t)arg_get_int_def(ctx, 4, 0); - bool errors = false; - char cmdp = 0; - while (param_getchar(Cmd, cmdp) != 0x00 && !errors) { - switch (tolower(param_getchar(Cmd, cmdp))) { - case 'h': - return usage_wiegand_encode(); - case 'w': - param_getstr(Cmd, cmdp + 1, format, sizeof(format)); - format_idx = HIDFindCardFormat(format); - if (format_idx == -1) { - PrintAndLogEx(WARNING, "Unknown format: %s", format); - errors = true; - } - cmdp += 2; - break; - case 'i': - data.IssueLevel = param_get32ex(Cmd, cmdp + 1, 0, 10); - cmdp += 2; - break; - case 'f': - data.FacilityCode = param_get32ex(Cmd, cmdp + 1, 0, 10); - cmdp += 2; - break; - case 'c': - data.CardNumber = param_get64ex(Cmd, cmdp + 1, 0, 10); - cmdp += 2; - break; - case 'o': - data.OEM = param_get32ex(Cmd, cmdp + 1, 0, 10); - cmdp += 2; - break; - default: - PrintAndLogEx(WARNING, "Unknown parameter '%c'", param_getchar(Cmd, cmdp)); - errors = true; - break; - } + int len = 0; + char format[16] = {0}; + CLIParamStrToBuf(arg_get_str(ctx, 5), (uint8_t*)format, sizeof(format), &len); + CLIParserFree(ctx); + + int idx = HIDFindCardFormat(format); + if (idx == -1) { + PrintAndLogEx(WARNING, "Unknown format: %s", format); + return PM3_EINVARG; } - if (errors || cmdp == 0) return usage_wiegand_encode(); wiegand_message_t packed; memset(&packed, 0, sizeof(wiegand_message_t)); - if (HIDPack(format_idx, &data, &packed) == false) { + if (HIDPack(idx, &data, &packed) == false) { PrintAndLogEx(WARNING, "The card data could not be encoded in the selected format."); return PM3_ESOFT; } - PrintTagId(&packed); + print_wiegand_code(&packed); return PM3_SUCCESS; } int CmdWiegandDecode(const char *Cmd) { - uint32_t top = 0, mid = 0, bot = 0; - bool ignore_parity = false, gothex = false; - bool errors = false; - char cmdp = 0; - while (param_getchar(Cmd, cmdp) != 0x00 && !errors) { - uint32_t slen = param_getlength(Cmd, cmdp); - slen++; // null termin - if (slen > 2) { - char *s = calloc(slen, sizeof(uint8_t)); - param_getstr(Cmd, cmdp, s, slen); - hexstring_to_u96(&top, &mid, &bot, s); - free(s); - gothex = true; - cmdp++; - continue; - } - switch (tolower(param_getchar(Cmd, cmdp))) { - case 'h': - return usage_wiegand_decode(); - case 'p': - ignore_parity = true; - cmdp++; - break; - default: - PrintAndLogEx(WARNING, "Unknown parameter '%c'", param_getchar(Cmd, cmdp)); - errors = true; - break; - } - } - if (gothex == false) - errors = true; + CLIParserContext *ctx; + CLIParserInit(&ctx, "wiegand decode", + "Decode raw hex to wiegand format", + "wiegand decode --raw 2006f623ae" + ); - if (errors || cmdp < 1) return usage_wiegand_decode(); + void *argtable[] = { + arg_param_begin, + arg_lit0("p", "parity", "ignore invalid parity"), + arg_strx1(NULL, "raw", "", "raw hex to be decoded"), + arg_param_end + }; + CLIExecWithReturn(ctx, Cmd, argtable, false); + + bool ignore_parity = arg_get_lit(ctx, 1); + int len = 0; + char hex[40] = {0}; + CLIParamStrToBuf(arg_get_str(ctx, 2), (uint8_t*)hex, sizeof(hex), &len); + CLIParserFree(ctx); + + if (len == 0) { + PrintAndLogEx(ERR, "empty input"); + return PM3_EINVARG; + } + + uint32_t top = 0, mid = 0, bot = 0; + hexstring_to_u96(&top, &mid, &bot, hex); wiegand_message_t packed = initialize_message_object(top, mid, bot); - HIDTryUnpack(&packed, ignore_parity); + return PM3_SUCCESS; } diff --git a/doc/cheatsheet.md b/doc/cheatsheet.md index 02701b53d..bee2b2b5e 100644 --- a/doc/cheatsheet.md +++ b/doc/cheatsheet.md @@ -332,23 +332,25 @@ Convert Site & Facility code to Wiegand raw hex ``` Options --- -w o f c i -w : wiegand format to use -o : OEM number / site code -f : facility code -c : card number -i : issue level +-w --oem --fc --cn --issue -pm3 --> wiegand encode 0 56 150 +-w : wiegand format to use +--oem : OEM number / site code +--fc : facility code +--cn : card number +--issue : issue level + +pm3 --> wiegand encode -w H10301 --oem 0 --fc 56 --cn 150 ``` Convert Site & Facility code from Wiegand raw hex to numbers ``` Options --- -p : ignore parity errors +-p : ignore parity errors +--raw : raw hex to be decoded -pm3 --> wiegand decode 2006f623ae +pm3 --> wiegand decode --raw 2006f623ae ``` ## HID Prox @@ -556,7 +558,7 @@ pm3 --> script list View lua helptext ``` -pm3 --> script run -h +pm3 --> script run -h ``` @@ -599,15 +601,15 @@ Load default keys into flash memory (RDV4 only) ``` Options --- -o : offset in memory -f : file name -m : upload 6 bytes keys (mifare key dictionary) -i : upload 8 bytes keys (iClass key dictionary) -t : upload 4 bytes keys (pwd dictionary) +-o : offset in memory +-f : file name +--mfc : upload 6 bytes keys (mifare key dictionary) +--iclass : upload 8 bytes keys (iClass key dictionary) +--t55xx : upload 4 bytes keys (pwd dictionary) -pm3 --> mem load f mfc_default_keys m -pm3 --> mem load f t55xx_default_pwds t -pm3 --> mem load f iclass_default_keys i +pm3 --> mem load -f mfc_default_keys --mfc +pm3 --> mem load -f t55xx_default_pwds --t5xx +pm3 --> mem load -f iclass_default_keys --iclass ``` ## Sim Module From 55bbbaf049a15026ed971b3a35854ed30e33ae93 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sun, 4 Oct 2020 11:09:54 +0200 Subject: [PATCH 0773/1047] text --- client/src/cmdwiegand.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/src/cmdwiegand.c b/client/src/cmdwiegand.c index 3be648ed4..0cd694103 100644 --- a/client/src/cmdwiegand.c +++ b/client/src/cmdwiegand.c @@ -151,8 +151,8 @@ int CmdWiegandDecode(const char *Cmd) { static command_t CommandTable[] = { {"help", CmdHelp, AlwaysAvailable, "This help"}, {"list", CmdWiegandList, AlwaysAvailable, "List available wiegand formats"}, - {"encode", CmdWiegandEncode, AlwaysAvailable, "Convert "}, - {"decode", CmdWiegandDecode, AlwaysAvailable, "Convert raw hex to wiegand format"}, + {"encode", CmdWiegandEncode, AlwaysAvailable, "Encode to wiegand raw hex"}, + {"decode", CmdWiegandDecode, AlwaysAvailable, "Convert raw hex to decoded wiegand format"}, {NULL, NULL, NULL, NULL} }; From 6a87677273c2342ea45ebee188ce396ceea749b9 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Sun, 4 Oct 2020 13:46:15 +0200 Subject: [PATCH 0774/1047] fix inverse zoom factors --- client/src/proxguiqt.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/client/src/proxguiqt.cpp b/client/src/proxguiqt.cpp index aa74a83fd..52f0a8955 100644 --- a/client/src/proxguiqt.cpp +++ b/client/src/proxguiqt.cpp @@ -697,10 +697,15 @@ void Plot::wheelEvent(QWheelEvent *event) { x += GraphStart; // event->angleDelta doesn't exist in QT4, both exist in 5.12.8 and 5.14.2 and event->delta doesn't exist in 5.15.0 #if QT_VERSION >= 0x050d00 - Zoom(1.0 - (float)event->angleDelta().y() / (120 / zoom_offset), x); + float delta = event->angleDelta().y(); #else - Zoom(1.0 - (float)event->delta() / (120 / zoom_offset), x); + float delta = event->delta(); #endif + if (delta < 0) { + Zoom(1.0 - (float)delta / (120 / zoom_offset), x); + } else { + Zoom(1.0 / (1.0 + (float)delta / (120 / zoom_offset)), x); + } } else { #if QT_VERSION >= 0x050d00 Move(PageWidth * (-(float)event->angleDelta().y() / (120 / move_offset))); From aa3d29e6ac19f9a135e16f241352e958934d0b01 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Sun, 4 Oct 2020 15:11:36 +0200 Subject: [PATCH 0775/1047] CLIParamStrToBuf: add string null terminator --- client/deps/cliparser/cliparser.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/client/deps/cliparser/cliparser.c b/client/deps/cliparser/cliparser.c index 4ec4eb303..8ce757792 100644 --- a/client/deps/cliparser/cliparser.c +++ b/client/deps/cliparser/cliparser.c @@ -251,12 +251,13 @@ int CLIParamStrToBuf(struct arg_str *argstr, uint8_t *data, int maxdatalen, int if (!ibuf) return 0; - if (ibuf > maxdatalen) { + if (ibuf + 1 > maxdatalen) { + printf("Parameter error: string too long, expect max %i chars\n", maxdatalen - 1); fflush(stdout); return 2; } - memcpy(data, tmp_buf, ibuf); + memcpy(data, tmp_buf, ibuf + 1); *datalen = ibuf; return 0; } From 7009f2ade7a3fb0140fd0b6a2c6b11e078bfc3e2 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Sun, 4 Oct 2020 15:13:32 +0200 Subject: [PATCH 0776/1047] clean cliparser doc and add arg_dbl --- doc/cliparser.md | 86 ++++++++++++++++++++++++++---------------------- 1 file changed, 46 insertions(+), 40 deletions(-) diff --git a/doc/cliparser.md b/doc/cliparser.md index e4cc8e062..0e4691757 100644 --- a/doc/cliparser.md +++ b/doc/cliparser.md @@ -13,24 +13,24 @@ lf config h H even the external tools which we collected into this repo, under folder */tools/* folder uses their own argument parsing. -In order to counter this and unify it, there was discussion over at the official repository a few years ago [link to issue](https://github.com/Proxmark/proxmark3/issues/467) and there it became clear a change is needed. Among the different solutions suggested @merlokk's idea of using the lib cliparser was agreed upon. The lib was adapted and implemented for commands like +In order to counter this and unify it, there was discussion over at the official repository a few years ago [link to issue](https://github.com/Proxmark/proxmark3/issues/467) and there it became clear a change is needed. Among the different solutions suggested @merlokk's idea of using the lib cliparser was agreed upon. The lib was adapted and implemented for commands like ``` [usb] pm3 --> emv [usb] pm3 --> hf fido ``` -And then it fell into silence since it wasn't well documented how to use the cliparser. Looking at source code wasn't very efficient. However the need of a better cli parsing was still there. +And then it fell into silence since it wasn't well documented how to use the cliparser. Looking at source code wasn't very efficient. However the need of a better cli parsing was still there. Fast forward today, where more commands has used the cliparser but it still wasn't the natural way when adding a new client command to the Proxmark3 client. -After more discussions among @doegox, @iceman1001 and @mrwalker the concept became more clear on how to use the cliparser lib in the _preferred_ way. +After more discussions among @doegox, @iceman1001 and @mrwalker the concept became more clear on how to use the cliparser lib in the _preferred_ way. -The aftermath was a design and layout specfied which lead to a simpler implemtentation of the cliparser in the client source code while still unfiy all helptexts with the new colours support and a defined layout. As seen below, the simplicity and clearness. +The aftermath was a design and layout specfied which lead to a simpler implemtentation of the cliparser in the client source code while still unfiy all helptexts with the new colours support and a defined layout. As seen below, the simplicity and clearness. ![sample of new style helptext](http://www.icedev.se/proxmark3/helptext.png) -Furthermore @mrwalker offered to take notes and thus this document was created. +Furthermore @mrwalker offered to take notes and thus this document was created. This is the _new_ and _prefered_ way to implement _helptext_ and _cli parsing_ for Proxmark3 client commands and it's external tools. @@ -42,11 +42,11 @@ It will also add the `-h --help` option automatic. ## design comments -* where possible all options should be lowercase. -* extended options preceded with -- should be short -* options provided directly (without an option identifier) should be avoided. -* -vv for extra verbos should be avoided; use of debug level is preferred. -* with --options the equal is not needed (will work with and without) so don't use '=' +* where possible all options should be lowercase. +* extended options preceded with -- should be short +* options provided directly (without an option identifier) should be avoided. +* -vv for extra verbos should be avoided; use of debug level is preferred. +* with --options the equal is not needed (will work with and without) so don't use '=' e.g. cmd --cn 12345 @@ -82,9 +82,9 @@ CLIParserInit (\, \, \); use -> to separate example and example comment and \\n to separate examples. e.g. lf indala clone -r a0000000a0002021 -> this uses ..... - CLIParserInit(&ctx, "lf indala clone", - "clone INDALA UID to T55x7 or Q5/T5555 tag", - "lf indala clone --heden 888\n" + CLIParserInit(&ctx, "lf indala clone", + "clone INDALA UID to T55x7 or Q5/T5555 tag", + "lf indala clone --heden 888\n" "lf indala clone --fc 123 --cn 1337\n" "lf indala clone -r a0000000a0002021\n" "lf indala clone -l -r 80000001b23523a6c2e31eba3cbee4afb3c6ad1fcf649393928c14e5"); @@ -93,9 +93,9 @@ e.g. lf indala clone -r a0000000a0002021 -> this uses ..... void *argtable[] = { arg_param_begin, - arg_lit0("l", "long", "optional - long UID 224 bits"), - arg_int0("c", "heden", "", "Cardnumber for Heden 2L format"), - arg_strx0("r", "raw", "", "raw bytes"), + arg_lit0("l", "long", "optional - long UID 224 bits"), + arg_int0("c", "heden", "", "Cardnumber for Heden 2L format"), + arg_strx0("r", "raw", "", "raw bytes"), arg_lit0("q", "Q5", "optional - specify writing to Q5/T5555 tag"), arg_int0(NULL, "fc", "", "Facility Code (26 bit format)"), arg_int0(NULL, "cn", "", "Cardnumber (26 bit format)"), @@ -105,30 +105,36 @@ e.g. lf indala clone -r a0000000a0002021 -> this uses ..... _All options has a parameter index, since `-h --help` is added automatic, it will be assigned index 0. Hence all options you add will start at index 1 and upwards._ -**Notes:** -**bool option. true if supplied** -bool : arg_lit0 ("\", "\", \["\",\] \<"description"\>) +**Notes:** +**bool option. true if supplied** +bool : arg_lit0 ("\", "\", \<"description"\>) -**integer that is optional** - optional integer : arg_int0 ("\", "\", \["\",\] \<"description"\>) +**integer that is optional** + optional integer : arg_int0 ("\", "\", "\", \<"description"\>) -**integer that is required** - required integer : arg_int1 ("\", "\", \["\",\] \<"description"\>) +**integer that is required** + required integer : arg_int1 ("\", "\", "\", \<"description"\>) -**String option that is optional and only one instance can be provided** - optional string : arg_str0("\", "\", \["\",\] \<"description"\>) +**double that is optional** + optional double : arg_dbl0 ("\", "\", "\", \<"description"\>) -**String option that is required and only one instance can be provided** - required string : arg_str1("\", "\", \["\",\] \<"description"\>) +**double that is required** + required double : arg_dbl1 ("\", "\", "\", \<"description"\>) -**String option that is optional and can have up to 250 instances provided** - optional string : arg_strx0 ("\", "\", \["\",\] \<"description"\>) +**String option that is optional and only one instance can be provided** + optional string : arg_str0("\", "\", "\", \<"description"\>) -**String option that is required/at least one instance and can have up to 250 instances** - required string : arg_strx1 ("\", "\", \["\",\] \<"description"\>) +**String option that is required and only one instance can be provided** + required string : arg_str1("\", "\", "\", \<"description"\>) + +**String option that is optional and can have up to 250 instances provided** + optional string : arg_strx0 ("\", "\", "\", \<"description"\>) + +**String option that is required/at least one instance and can have up to 250 instances** + required string : arg_strx1 ("\", "\", "\", \<"description"\>) + +**if an option does not have a short or long option, use NULL in its place** -**if an option does not have a short or long option, use NULL in its place** - ### show the menu CLIExecWithReturn(\, \, \, \); @@ -146,32 +152,32 @@ The parser will format and color and layout as needed. It will also add the `-h --help` option automatic. -**bool option** +**bool option** arg_get_lit(\, \); is_long_uid = arg_get_lit(ctx, 1); -**int option** +**int option** arg_get_int_def(\, \, \); cardnumber = arg_get_int_def(ctx, 2, -1); -**hex option** +**hex option** CLIGetHexWithReturn(\, \, \, \); ?? as an array of uint_8 ?? - + uint8_t aid[2] = {0}; int aidlen; CLIGetHexWithReturn(ctx, 2, aid, &aidlen); -**hex option returning ???** +**hex option returning ???** uint8_t key[24] = {0}; int keylen = 0; int res_klen = CLIParamHexToBuf(arg_get_str(ctx, 3), key, 24, &keylen); - quick test : seems res_keylen == 0 when ok so not key len ??? + quick test : seems res_keylen == 0 when ok so not key len ??? -**string option** +**string option** CLIGetStrWithReturn(\,\, \, \); uint8_t Buffer[100]; From 2d15fde0a86d712f640fbdf7de00db49e63de02b Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Sun, 4 Oct 2020 15:14:56 +0200 Subject: [PATCH 0777/1047] data scale: use cliparser and add unit string --- client/src/cmddata.c | 38 +++++++++++++++++++++----------------- client/src/proxgui.h | 1 + client/src/proxguiqt.cpp | 3 ++- client/src/ui.c | 1 + 4 files changed, 25 insertions(+), 18 deletions(-) diff --git a/client/src/cmddata.c b/client/src/cmddata.c index 74f6b4a23..7e5025814 100644 --- a/client/src/cmddata.c +++ b/client/src/cmddata.c @@ -50,20 +50,6 @@ static int usage_data_save(void) { PrintAndLogEx(NORMAL, " data save f mytrace w - save graphbuffer to wave file"); return PM3_SUCCESS; } -static int usage_data_scale(void) { - PrintAndLogEx(NORMAL, "Set cursor display scale."); - PrintAndLogEx(NORMAL, "Setting the scale makes the differential `dt` reading between the yellow and purple markers meaningful. "); - PrintAndLogEx(NORMAL, "once the scale is set, the differential reading between brackets is the time duration in seconds."); - PrintAndLogEx(NORMAL, "For example, if acquiring in 125kHz, use scale 125."); - PrintAndLogEx(NORMAL, ""); - PrintAndLogEx(NORMAL, "Usage: data scale [h] "); - PrintAndLogEx(NORMAL, "Options:"); - PrintAndLogEx(NORMAL, " h this help"); - PrintAndLogEx(NORMAL, " sets scale of carrier frequency expressed in kHz"); - PrintAndLogEx(NORMAL, "Samples:"); - PrintAndLogEx(NORMAL, " data scale 125 - if sampled in 125kHz"); - return PM3_SUCCESS; -} static int usage_data_printdemodbuf(void) { PrintAndLogEx(NORMAL, "Usage: data printdemodbuffer x o l "); PrintAndLogEx(NORMAL, "Options:"); @@ -1913,14 +1899,32 @@ int CmdSave(const char *Cmd) { } static int CmdScale(const char *Cmd) { - char cmdp = tolower(param_getchar(Cmd, 0)); - if (strlen(Cmd) == 0 || cmdp == 'h') return usage_data_scale(); - CursorScaleFactor = atoi(Cmd); + CLIParserContext *ctx; + CLIParserInit(&ctx, "data scale", + "Set cursor display scale.\n" + "Setting the scale makes the differential `dt` reading between the yellow and purple markers meaningful.\n" + "once the scale is set, the differential reading between brackets can become a time duration.", + "data scale --sr 125 -u ms -> if sampled in 125 kHz, reading will be in milliseconds\n" + "data scale --sr 1.695 -u us -> if HF, sampling is 1.695 MHz. Reading will be in microseconds\n" + "data scale --sr 16 -u ETU -> if HF, 16 samples per ETU. Reading will be in ETUs" + ); + void *argtable[] = { + arg_param_begin, + arg_dbl1(NULL, "sr", "", "sets scale according to sampling rate"), + arg_str0("u", "unit", "", "time unit to display (max 10 chars)"), + arg_param_end + }; + CLIExecWithReturn(ctx, Cmd, argtable, false); + CursorScaleFactor = arg_get_dbl_def(ctx, 1, 0); if (CursorScaleFactor == 0) { PrintAndLogEx(FAILED, "bad, can't have zero scale"); CursorScaleFactor = 1; } + int len = 0; + CursorScaleFactorUint[0] = '\x00'; + CLIParamStrToBuf(arg_get_str(ctx, 2), (uint8_t*)CursorScaleFactorUint, sizeof(CursorScaleFactorUint), &len); + CLIParserFree(ctx); RepaintGraphWindow(); return PM3_SUCCESS; } diff --git a/client/src/proxgui.h b/client/src/proxgui.h index cc9c9e118..00c954123 100644 --- a/client/src/proxgui.h +++ b/client/src/proxgui.h @@ -27,6 +27,7 @@ void InitGraphics(int argc, char **argv, char *script_cmds_file, char *script_cm void ExitGraphics(void); extern double CursorScaleFactor; +extern char CursorScaleFactorUint[11]; extern int PlotGridX, PlotGridY, PlotGridXdefault, PlotGridYdefault, GridOffset; extern uint32_t CursorCPos, CursorDPos; extern int CommandFinished; diff --git a/client/src/proxguiqt.cpp b/client/src/proxguiqt.cpp index 52f0a8955..ed4e049dd 100644 --- a/client/src/proxguiqt.cpp +++ b/client/src/proxguiqt.cpp @@ -596,10 +596,11 @@ void Plot::paintEvent(QPaintEvent *event) { //Draw annotations char str[200]; - sprintf(str, "@%u dt=%u [%2.2f] zoom=%2.2f CursorAPos=%u CursorBPos=%u GridX=%d GridY=%d (%s) GridXoffset=%d", + sprintf(str, "@%u dt=%i [%2.2f %s] zoom=%2.2f CursorAPos=%u CursorBPos=%u GridX=%d GridY=%d (%s) GridXoffset=%d", GraphStart, CursorBPos - CursorAPos, ((int32_t)(CursorBPos - CursorAPos)) / CursorScaleFactor, + CursorScaleFactorUint, GraphPixelsPerPoint, CursorAPos, CursorBPos, diff --git a/client/src/ui.c b/client/src/ui.c index f05a96682..579b21f42 100644 --- a/client/src/ui.c +++ b/client/src/ui.c @@ -38,6 +38,7 @@ session_arg_t session; double CursorScaleFactor = 1; +char CursorScaleFactorUint[11] = {0}; int PlotGridX = 0, PlotGridY = 0, PlotGridXdefault = 64, PlotGridYdefault = 64; uint32_t CursorCPos = 0, CursorDPos = 0; double GraphPixelsPerPoint = 1.f; // How many visual pixels are between each sample point (x axis) From e41efe192b4433280fffd5ddafa0c1a5a741ec62 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Sun, 4 Oct 2020 15:20:28 +0200 Subject: [PATCH 0778/1047] data scale: check param --- client/src/cmddata.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/client/src/cmddata.c b/client/src/cmddata.c index 7e5025814..e183af77c 100644 --- a/client/src/cmddata.c +++ b/client/src/cmddata.c @@ -1916,9 +1916,9 @@ static int CmdScale(const char *Cmd) { arg_param_end }; CLIExecWithReturn(ctx, Cmd, argtable, false); - CursorScaleFactor = arg_get_dbl_def(ctx, 1, 0); - if (CursorScaleFactor == 0) { - PrintAndLogEx(FAILED, "bad, can't have zero scale"); + CursorScaleFactor = arg_get_dbl_def(ctx, 1, 1); + if (CursorScaleFactor <= 0) { + PrintAndLogEx(FAILED, "bad, can't have negative or zero scale"); CursorScaleFactor = 1; } int len = 0; From ad494a152cb83255a9ad383d8190e7ded6d72602 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sun, 4 Oct 2020 16:13:17 +0200 Subject: [PATCH 0779/1047] cliparser returns signed ints, to get unsigned 32 we need to use the double. --- client/deps/cliparser/cliparser.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/client/deps/cliparser/cliparser.h b/client/deps/cliparser/cliparser.h index 90b74f774..f82c40f7e 100644 --- a/client/deps/cliparser/cliparser.h +++ b/client/deps/cliparser/cliparser.h @@ -28,12 +28,18 @@ #define arg_get_dbl(ctx, n) (((struct arg_dbl*)((ctx)->argtable)[n])->dval[0]) #define arg_get_dbl_def(ctx, n, def)(arg_get_dbl_count((ctx), n) ? (arg_get_dbl((ctx), n)) : (def)) +#define arg_get_u32(ctx, n) (uint32_t)(((struct arg_dbl*)((ctx)->argtable)[n])->dval[0]) +#define arg_get_u32_def(ctx, n, def) (arg_get_dbl_count((ctx), n) ? (arg_get_u32((ctx), n)) : (uint32_t)(def)) + #define arg_get_str(ctx, n) ((struct arg_str*)((ctx)->argtable)[n]) #define arg_get_str_len(ctx, n) (strlen(((struct arg_str*)((ctx)->argtable)[n])->sval[0])) #define arg_strx1(shortopts, longopts, datatype, glossary) (arg_strn((shortopts), (longopts), (datatype), 1, 250, (glossary))) #define arg_strx0(shortopts, longopts, datatype, glossary) (arg_strn((shortopts), (longopts), (datatype), 0, 250, (glossary))) +#define arg_u32_0 arg_dbl0 +#define arg_u32_1 arg_dbl1 + #define CLIParserFree(ctx) if ((ctx)) {arg_freetable(ctx->argtable, ctx->argtableLen); free((ctx)); (ctx)=NULL;} #define CLIExecWithReturn(ctx, cmd, atbl, ifempty) if (CLIParserParseString(ctx, cmd, atbl, arg_getsize(atbl), ifempty)) {CLIParserFree((ctx)); return PM3_ESOFT;} #define CLIGetHexBLessWithReturn(ctx, paramnum, data, datalen, delta) if (CLIParamHexToBuf(arg_get_str(ctx, paramnum), data, sizeof(data) - (delta), datalen)) {CLIParserFree((ctx)); return PM3_ESOFT;} From 166e626c98bc40536f02ec95bce919d1fd13e495 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sun, 4 Oct 2020 17:41:04 +0200 Subject: [PATCH 0780/1047] add u64_y support in argtable-cliparser. --- client/deps/cliparser/argtable3.c | 261 +++++++++++++++++++++++++++++- client/deps/cliparser/argtable3.h | 44 ++--- client/deps/cliparser/cliparser.h | 43 ++--- 3 files changed, 306 insertions(+), 42 deletions(-) diff --git a/client/deps/cliparser/argtable3.c b/client/deps/cliparser/argtable3.c index 5019001e4..f97e9ff25 100644 --- a/client/deps/cliparser/argtable3.c +++ b/client/deps/cliparser/argtable3.c @@ -1408,7 +1408,7 @@ static int arg_dbl_scanfn(struct arg_dbl *parent, const char *argval) { /* extract double from argval into val */ val = strtod(argval, &end); - + printf("ice %lf \n", val); /* if success then store result in parent->dval[] array otherwise return error*/ if (*end == 0) parent->dval[parent->count++] = val; @@ -1927,10 +1927,8 @@ struct arg_file *arg_filen( #include #include #include - #include "argtable3.h" - static void arg_int_resetfn(struct arg_int *parent) { ARG_TRACE(("%s:resetfn(%p)\n", __FILE__, parent)); parent->count = 0; @@ -2226,6 +2224,263 @@ struct arg_int *arg_intn( ARG_TRACE(("arg_intn() returns %p\n", result)); return result; } + + +// uint64_t support +#include +#include +#include +static uint64_t strtollu0X(const char *str, + const char * *endptr, + char X, + int base) { + uint64_t val; /* stores result */ + int s = 1; /* sign is +1 or -1 */ + const char *ptr = str; /* ptr to current position in str */ + + /* skip leading whitespace */ + while (ISSPACE(*ptr)) + ptr++; + // printf("1) %s\n",ptr); + + /* scan optional sign character */ + switch (*ptr) { + case '+': + ptr++; + s = 1; + break; + case '-': + ptr++; + s = -1; + break; + default: + s = 1; + break; + } + // printf("2) %s\n",ptr); + + /* '0X' prefix */ + if ((*ptr++) != '0') { + /* printf("failed to detect '0'\n"); */ + *endptr = str; + return 0; + } + // printf("3) %s\n",ptr); + if (toupper(*ptr++) != toupper(X)) { + /* printf("failed to detect '%c'\n",X); */ + *endptr = str; + return 0; + } + // printf("4) %s\n",ptr); + + /* attempt conversion on remainder of string using strtol() */ + val = strtoull(ptr, (char * *)endptr, base); + + if (*endptr == ptr) { + /* conversion failed */ + *endptr = str; + return 0; + } + + /* success */ + return s * val; +} + + +static void arg_u64_resetfn(struct arg_u64 *parent) { + ARG_TRACE(("%s:resetfn(%p)\n", __FILE__, parent)); + parent->count = 0; +} + +static int arg_u64_scanfn(struct arg_u64 *parent, const char *argval) { + int errorcode = 0; + if (parent->count == parent->hdr.maxcount) { + /* maximum number of arguments exceeded */ + errorcode = EMAXCOUNT; + } else if (!argval) { + /* a valid argument with no argument value was given. */ + /* This happens when an optional argument value was invoked. */ + /* leave parent arguiment value unaltered but still count the argument. */ + parent->count++; + } else { + uint64_t val; + const char *end; + + /* attempt to extract hex integer (eg: +0x123) from argval into val conversion */ + val = strtollu0X(argval, &end, 'X', 16); + if (end == argval) { + /* hex failed, attempt octal conversion (eg +0o123) */ + val = strtollu0X(argval, &end, 'O', 8); + if (end == argval) { + /* octal failed, attempt binary conversion (eg +0B101) */ + val = strtollu0X(argval, &end, 'B', 2); + if (end == argval) { + /* binary failed, attempt decimal conversion with no prefix (eg 1234) */ + val = strtoull(argval, (char * *)&end, 10); + if (end == argval) { + /* all supported number formats failed */ + return EBADINT; + } + } + } + } + + /* Safety check for integer overflow. WARNING: this check */ + /* achieves nothing on machines where size(int)==size(long). */ + if (val > ULLONG_MAX) +#ifdef __STDC_WANT_SECURE_LIB__ + errorcode = EOVERFLOW_; +#else + errorcode = EOVERFLOW; +#endif + + /* Detect any suffixes (KB,MB,GB) and multiply argument value appropriately. */ + /* We need to be mindful of integer overflows when using such big numbers. */ + if (detectsuffix(end, "KB")) { /* kilobytes */ + if (val > (ULLONG_MAX / 1024)) +#ifdef __STDC_WANT_SECURE_LIB__ + errorcode = EOVERFLOW_; /* Overflow would occur if we proceed */ +#else + errorcode = EOVERFLOW; /* Overflow would occur if we proceed */ +#endif + else + val *= 1024; /* 1KB = 1024 */ + } else if (detectsuffix(end, "MB")) { /* megabytes */ + if (val > (ULLONG_MAX / 1048576)) +#ifdef __STDC_WANT_SECURE_LIB__ + errorcode = EOVERFLOW_; /* Overflow would occur if we proceed */ +#else + errorcode = EOVERFLOW; /* Overflow would occur if we proceed */ +#endif + else + val *= 1048576; /* 1MB = 1024*1024 */ + } else if (detectsuffix(end, "GB")) { /* gigabytes */ + if (val > (ULLONG_MAX / 1073741824)) +#ifdef __STDC_WANT_SECURE_LIB__ + errorcode = EOVERFLOW_; /* Overflow would occur if we proceed */ +#else + errorcode = EOVERFLOW; /* Overflow would occur if we proceed */ +#endif + else + val *= 1073741824; /* 1GB = 1024*1024*1024 */ + } else if (!detectsuffix(end, "")) + errorcode = EBADINT; /* invalid suffix detected */ + + /* if success then store result in parent->uval[] array */ + if (errorcode == 0) + parent->uval[parent->count++] = val; + } + + /* printf("%s:scanfn(%p,%p) returns %d\n",__FILE__,parent,argval,errorcode); */ + return errorcode; +} + +static int arg_u64_checkfn(struct arg_u64 *parent) { + int errorcode = (parent->count < parent->hdr.mincount) ? EMINCOUNT : 0; + /*printf("%s:checkfn(%p) returns %d\n",__FILE__,parent,errorcode);*/ + return errorcode; +} + +static void arg_u64_errorfn( + struct arg_u64 *parent, + FILE *fp, + int errorcode, + const char *argval, + const char *progname) { + const char *shortopts = parent->hdr.shortopts; + const char *longopts = parent->hdr.longopts; + const char *datatype = parent->hdr.datatype; + + /* make argval NULL safe */ + argval = argval ? argval : ""; + + fprintf(fp, "%s: ", progname); + switch (errorcode) { + case EMINCOUNT: + fputs("missing option ", fp); + arg_print_option(fp, shortopts, longopts, datatype, "\n"); + break; + + case EMAXCOUNT: + fputs("excess option ", fp); + arg_print_option(fp, shortopts, longopts, argval, "\n"); + break; + + case EBADINT: + fprintf(fp, "invalid argument \"%s\" to option ", argval); + arg_print_option(fp, shortopts, longopts, datatype, "\n"); + break; + +#ifdef __STDC_WANT_SECURE_LIB__ + case EOVERFLOW_: +#else + case EOVERFLOW: +#endif + fputs("integer overflow at option ", fp); + arg_print_option(fp, shortopts, longopts, datatype, " "); + fprintf(fp, "(%s is too large)\n", argval); + break; + } +} + +struct arg_u64 *arg_u64_0( + const char *shortopts, + const char *longopts, + const char *datatype, + const char *glossary) { + return arg_u64_n(shortopts, longopts, datatype, 0, 1, glossary); +} + +struct arg_u64 *arg_u64_1( + const char *shortopts, + const char *longopts, + const char *datatype, + const char *glossary) { + return arg_u64_n(shortopts, longopts, datatype, 1, 1, glossary); +} + +struct arg_u64 *arg_u64_n( + const char *shortopts, + const char *longopts, + const char *datatype, + int mincount, + int maxcount, + const char *glossary) { + size_t nbytes; + struct arg_u64 *result; + + /* foolproof things by ensuring maxcount is not less than mincount */ + maxcount = (maxcount < mincount) ? mincount : maxcount; + + nbytes = sizeof(struct arg_u64) /* storage for struct arg_u64 */ + + maxcount * sizeof(uint64_t); /* storage for uval[maxcount] array */ + + result = (struct arg_u64 *)malloc(nbytes); + if (result) { + /* init the arg_hdr struct */ + result->hdr.flag = ARG_HASVALUE; + result->hdr.shortopts = shortopts; + result->hdr.longopts = longopts; + result->hdr.datatype = datatype ? datatype : ""; + result->hdr.glossary = glossary; + result->hdr.mincount = mincount; + result->hdr.maxcount = maxcount; + result->hdr.parent = result; + result->hdr.resetfn = (arg_resetfn *)arg_u64_resetfn; + result->hdr.scanfn = (arg_scanfn *)arg_u64_scanfn; + result->hdr.checkfn = (arg_checkfn *)arg_u64_checkfn; + result->hdr.errorfn = (arg_errorfn *)arg_u64_errorfn; + + /* store the uval[maxcount] array immediately after the arg_int struct */ + result->uval = (uint64_t *)(result + 1); + result->count = 0; + } + + ARG_TRACE(("arg_u64_n() returns %p\n", result)); + return result; +} + + /******************************************************************************* * This file is part of the argtable3 library. * diff --git a/client/deps/cliparser/argtable3.h b/client/deps/cliparser/argtable3.h index d8e3c53cc..2988d013f 100644 --- a/client/deps/cliparser/argtable3.h +++ b/client/deps/cliparser/argtable3.h @@ -35,6 +35,7 @@ #include /* FILE */ #include /* struct tm */ +#include #ifdef __cplusplus extern "C" { @@ -110,6 +111,12 @@ struct arg_int { int *ival; /* Array of parsed argument values */ }; +struct arg_u64 { + struct arg_hdr hdr; /* The mandatory argtable header struct */ + int count; /* Number of matching command line args */ + uint64_t *uval; /* Array of parsed argument values */ +}; + struct arg_dbl { struct arg_hdr hdr; /* The mandatory argtable header struct */ int count; /* Number of matching command line args */ @@ -176,32 +183,29 @@ struct arg_lit *arg_litn(const char *shortopts, int maxcount, const char *glossary); -struct arg_key *arg_key0(const char *keyword, - int flags, +struct arg_key *arg_key0(const char *keyword, int flags, const char *glossary); +struct arg_key *arg_key1(const char *keyword, int flags, const char *glossary); +struct arg_key *arg_keyn(const char *keyword, int flags, int mincount, int maxcount, const char *glossary); + +struct arg_int *arg_int0(const char *shortopts, const char *longopts, const char *datatype, const char *glossary); +struct arg_int *arg_int1(const char *shortopts, const char *longopts, const char *datatype, const char *glossary); +struct arg_int *arg_intn(const char *shortopts, const char *longopts, const char *datatype, int mincount, int maxcount, const char *glossary); + +struct arg_u64 *arg_u64_0(const char *shortopts, + const char *longopts, + const char *datatype, const char *glossary); -struct arg_key *arg_key1(const char *keyword, - int flags, +struct arg_u64 *arg_u64_1(const char *shortopts, + const char *longopts, + const char *datatype, const char *glossary); -struct arg_key *arg_keyn(const char *keyword, - int flags, +struct arg_u64 *arg_u64_n(const char *shortopts, + const char *longopts, + const char *datatype, int mincount, int maxcount, const char *glossary); -struct arg_int *arg_int0(const char *shortopts, - const char *longopts, - const char *datatype, - const char *glossary); -struct arg_int *arg_int1(const char *shortopts, - const char *longopts, - const char *datatype, - const char *glossary); -struct arg_int *arg_intn(const char *shortopts, - const char *longopts, - const char *datatype, - int mincount, - int maxcount, - const char *glossary); struct arg_dbl *arg_dbl0(const char *shortopts, const char *longopts, diff --git a/client/deps/cliparser/cliparser.h b/client/deps/cliparser/cliparser.h index f82c40f7e..68beca038 100644 --- a/client/deps/cliparser/cliparser.h +++ b/client/deps/cliparser/cliparser.h @@ -17,34 +17,39 @@ #define arg_param_begin arg_lit0("h", "help", "This help") #define arg_param_end arg_end(20) -#define arg_getsize(a) (sizeof(a) / sizeof(a[0])) -#define arg_get_lit(ctx, n) (((struct arg_lit*)((ctx)->argtable)[n])->count) +#define arg_getsize(a) (sizeof(a) / sizeof(a[0])) +#define arg_get_lit(ctx, n) (((struct arg_lit*)((ctx)->argtable)[(n)])->count) -#define arg_get_int_count(ctx, n)(((struct arg_int*)((ctx)->argtable)[n])->count) -#define arg_get_int(ctx, n) (((struct arg_int*)((ctx)->argtable)[n])->ival[0]) -#define arg_get_int_def(ctx, n, def)(arg_get_int_count((ctx), n) ? (arg_get_int((ctx), n)) : (def)) +#define arg_get_int_count(ctx, n) (((struct arg_int*)((ctx)->argtable)[(n)])->count) +#define arg_get_int(ctx, n) (((struct arg_int*)((ctx)->argtable)[(n)])->ival[0]) +#define arg_get_int_def(ctx, n, def)(arg_get_int_count((ctx), (n)) ? (arg_get_int((ctx), (n))) : (def)) -#define arg_get_dbl_count(ctx, n)(((struct arg_dbl*)((ctx)->argtable)[n])->count) -#define arg_get_dbl(ctx, n) (((struct arg_dbl*)((ctx)->argtable)[n])->dval[0]) -#define arg_get_dbl_def(ctx, n, def)(arg_get_dbl_count((ctx), n) ? (arg_get_dbl((ctx), n)) : (def)) +#define arg_get_dbl_count(ctx, n) (((struct arg_dbl*)((ctx)->argtable)[(n)])->count) +#define arg_get_dbl(ctx, n) (((struct arg_dbl*)((ctx)->argtable)[(n)])->dval[0]) +#define arg_get_dbl_def(ctx, n, def)(arg_get_dbl_count((ctx), (n)) ? (arg_get_dbl((ctx), (n))) : (def)) -#define arg_get_u32(ctx, n) (uint32_t)(((struct arg_dbl*)((ctx)->argtable)[n])->dval[0]) -#define arg_get_u32_def(ctx, n, def) (arg_get_dbl_count((ctx), n) ? (arg_get_u32((ctx), n)) : (uint32_t)(def)) +#define arg_get_u32(ctx, n) (uint32_t)(((struct arg_u64*)((ctx)->argtable)[(n)])->uval[0]) +#define arg_get_u32_def(ctx, n, def) (arg_get_u64_count((ctx), (n)) ? (arg_get_u32((ctx), (n))) : (uint32_t)(def)) -#define arg_get_str(ctx, n) ((struct arg_str*)((ctx)->argtable)[n]) -#define arg_get_str_len(ctx, n) (strlen(((struct arg_str*)((ctx)->argtable)[n])->sval[0])) +#define arg_get_u64_count(ctx, n) (((struct arg_u64*)((ctx)->argtable)[(n)])->count) +#define arg_get_u64(ctx, n) (((struct arg_u64*)((ctx)->argtable)[(n)])->uval[0]) +#define arg_get_u64_def(ctx, n, def) (arg_get_u64_count((ctx), (n)) ? (arg_get_u64((ctx), (n))) : (uint64_t)(def)) + +#define arg_get_str(ctx, n) ((struct arg_str*)((ctx)->argtable)[(n)]) +#define arg_get_str_len(ctx, n) (strlen(((struct arg_str*)((ctx)->argtable)[(n)])->sval[0])) #define arg_strx1(shortopts, longopts, datatype, glossary) (arg_strn((shortopts), (longopts), (datatype), 1, 250, (glossary))) #define arg_strx0(shortopts, longopts, datatype, glossary) (arg_strn((shortopts), (longopts), (datatype), 0, 250, (glossary))) -#define arg_u32_0 arg_dbl0 -#define arg_u32_1 arg_dbl1 +#define CLIParserFree(ctx) if ((ctx)) {arg_freetable((ctx)->argtable, (ctx)->argtableLen); free((ctx)); (ctx)=NULL;} -#define CLIParserFree(ctx) if ((ctx)) {arg_freetable(ctx->argtable, ctx->argtableLen); free((ctx)); (ctx)=NULL;} -#define CLIExecWithReturn(ctx, cmd, atbl, ifempty) if (CLIParserParseString(ctx, cmd, atbl, arg_getsize(atbl), ifempty)) {CLIParserFree((ctx)); return PM3_ESOFT;} -#define CLIGetHexBLessWithReturn(ctx, paramnum, data, datalen, delta) if (CLIParamHexToBuf(arg_get_str(ctx, paramnum), data, sizeof(data) - (delta), datalen)) {CLIParserFree((ctx)); return PM3_ESOFT;} -#define CLIGetHexWithReturn(ctx, paramnum, data, datalen) if (CLIParamHexToBuf(arg_get_str(ctx, paramnum), data, sizeof(data), datalen)) {CLIParserFree((ctx)); return PM3_ESOFT;} -#define CLIGetStrWithReturn(ctx, paramnum, data, datalen) if (CLIParamStrToBuf(arg_get_str(ctx, paramnum), data, sizeof(data), datalen)) {CLIParserFree((ctx)); return PM3_ESOFT;} +#define CLIExecWithReturn(ctx, cmd, atbl, ifempty) if (CLIParserParseString((ctx), (cmd), (atbl), arg_getsize((atbl)), (ifempty))) {CLIParserFree((ctx)); return PM3_ESOFT;} + +#define CLIGetHexBLessWithReturn(ctx, paramnum, data, datalen, delta) if (CLIParamHexToBuf(arg_get_str((ctx), (paramnum)), (data), sizeof((data)) - (delta), (datalen))) {CLIParserFree((ctx)); return PM3_ESOFT;} + +#define CLIGetHexWithReturn(ctx, paramnum, data, datalen) if (CLIParamHexToBuf(arg_get_str((ctx), (paramnum)), (data), sizeof((data)), (datalen))) {CLIParserFree((ctx)); return PM3_ESOFT;} + +#define CLIGetStrWithReturn(ctx, paramnum, data, datalen) if (CLIParamStrToBuf(arg_get_str((ctx), (paramnum)), (data), sizeof((data)), (datalen))) {CLIParserFree((ctx)); return PM3_ESOFT;} typedef struct { void **argtable; From c528eacf24dd14c5258d8b995582515cdf06c547 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sun, 4 Oct 2020 17:41:27 +0200 Subject: [PATCH 0781/1047] wiegand cmds now use cliparse --- client/src/cmdwiegand.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/client/src/cmdwiegand.c b/client/src/cmdwiegand.c index 0cd694103..f81d7c177 100644 --- a/client/src/cmdwiegand.c +++ b/client/src/cmdwiegand.c @@ -72,10 +72,10 @@ int CmdWiegandEncode(const char *Cmd) { void *argtable[] = { arg_param_begin, - arg_int0(NULL, "fc", "", "facility number"), - arg_int1(NULL, "cn", "", "card number"), - arg_int0(NULL, "issue", "", "issue level"), - arg_int0(NULL, "oem", "", "OEM code"), + arg_u64_0(NULL, "fc", "", "facility number"), + arg_u64_1(NULL, "cn", "", "card number"), + arg_u64_0(NULL, "issue", "", "issue level"), + arg_u64_0(NULL, "oem", "", "OEM code"), arg_strx1("w", "wiegand", "", "see `wiegand list` for available formats"), arg_param_end }; @@ -84,11 +84,11 @@ int CmdWiegandEncode(const char *Cmd) { wiegand_card_t data; memset(&data, 0, sizeof(wiegand_card_t)); - data.FacilityCode = (uint32_t)arg_get_int_def(ctx, 1, 0); - data.CardNumber = (uint64_t)arg_get_int_def(ctx, 2, 0); - data.IssueLevel = (uint32_t)arg_get_int_def(ctx, 3, 0); - data.OEM = (uint32_t)arg_get_int_def(ctx, 4, 0); - + data.FacilityCode = arg_get_u32_def(ctx, 1, 0); + data.CardNumber = arg_get_u64_def(ctx, 2, 0); + data.IssueLevel = arg_get_u32_def(ctx, 3, 0); + data.OEM = arg_get_u32_def(ctx, 4, 0); + int len = 0; char format[16] = {0}; CLIParamStrToBuf(arg_get_str(ctx, 5), (uint8_t*)format, sizeof(format), &len); From 4f4593d9fa83a54a3b78b55ba0569f71346cdd10 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sun, 4 Oct 2020 18:54:43 +0200 Subject: [PATCH 0782/1047] remove debugstatement --- client/deps/cliparser/argtable3.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/deps/cliparser/argtable3.c b/client/deps/cliparser/argtable3.c index f97e9ff25..c42260f76 100644 --- a/client/deps/cliparser/argtable3.c +++ b/client/deps/cliparser/argtable3.c @@ -1408,7 +1408,7 @@ static int arg_dbl_scanfn(struct arg_dbl *parent, const char *argval) { /* extract double from argval into val */ val = strtod(argval, &end); - printf("ice %lf \n", val); + /* if success then store result in parent->dval[] array otherwise return error*/ if (*end == 0) parent->dval[parent->count++] = val; From 77f4371cd18a67e0eea779f1a8f043a269626686 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sun, 4 Oct 2020 19:39:22 +0200 Subject: [PATCH 0783/1047] plot --- armsrc/iso15693.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/armsrc/iso15693.c b/armsrc/iso15693.c index 3125f90bf..f3c3494a9 100644 --- a/armsrc/iso15693.c +++ b/armsrc/iso15693.c @@ -1479,6 +1479,7 @@ int SendDataTag(uint8_t *send, int sendlen, bool init, bool speed_fast, uint8_t if (recv != NULL) { res = GetIso15693AnswerFromTag(recv, max_recv_len, timeout, eof_time); } + FpgaDisableTracing(); return res; } @@ -1494,6 +1495,7 @@ int SendDataTagEOF(uint8_t *recv, uint16_t max_recv_len, uint32_t start_time, ui if (recv != NULL) { res = GetIso15693AnswerFromTag(recv, max_recv_len, timeout, eof_time); } + FpgaDisableTracing(); return res; } From 67da4e6b36d36e3e7b94bc2c9e8bbe811ebb50ca Mon Sep 17 00:00:00 2001 From: tcprst Date: Sun, 4 Oct 2020 13:59:02 -0400 Subject: [PATCH 0784/1047] lf keri clone, sim - now use cliparser --- client/src/cmdlfkeri.c | 123 ++++++++++++++++------------------------- 1 file changed, 48 insertions(+), 75 deletions(-) diff --git a/client/src/cmdlfkeri.c b/client/src/cmdlfkeri.c index eafa53648..ee11144d8 100644 --- a/client/src/cmdlfkeri.c +++ b/client/src/cmdlfkeri.c @@ -17,6 +17,7 @@ #include "commonutil.h" // ARRAYLEN #include "cmdparser.h" // command_t +#include "cliparser.h" #include "comms.h" #include "ui.h" #include "cmddata.h" @@ -26,43 +27,6 @@ #include "cmdlft55xx.h" // verifywrite static int CmdHelp(const char *Cmd); - -static int usage_lf_keri_clone(void) { - PrintAndLogEx(NORMAL, "clone a KERI tag to a T55x7 or Q5/T5555 tag\n"); - PrintAndLogEx(NORMAL, "Usage: lf keri clone [h] "); - PrintAndLogEx(NORMAL, "Usage extended: lf keri clone [h] t [f ] [c ] "); - PrintAndLogEx(NORMAL, "Options:"); - PrintAndLogEx(NORMAL, " h : This help"); - PrintAndLogEx(NORMAL, " : Keri Internal ID"); - PrintAndLogEx(NORMAL, " : specify writing to Q5/T5555 tag"); - // New format - PrintAndLogEx(NORMAL, " [m|i] : Type m - MS, i - Internal ID"); - PrintAndLogEx(NORMAL, " : Facility Code"); - PrintAndLogEx(NORMAL, " : Card Number"); - PrintAndLogEx(NORMAL, ""); - PrintAndLogEx(NORMAL, "Examples:"); - PrintAndLogEx(NORMAL, _YELLOW_(" lf keri clone 112233")); - PrintAndLogEx(NORMAL, _YELLOW_(" lf keri clone t i fc 6 cn 12345")); - PrintAndLogEx(NORMAL, _YELLOW_(" lf keri clone t m f 6 c 12345")); - PrintAndLogEx(NORMAL, ""); - return PM3_SUCCESS; -} - -static int usage_lf_keri_sim(void) { - PrintAndLogEx(NORMAL, "Enables simulation of KERI card with specified card number."); - PrintAndLogEx(NORMAL, "Simulation runs until the button is pressed or another USB command is issued."); - PrintAndLogEx(NORMAL, ""); - PrintAndLogEx(NORMAL, "Usage: lf keri sim [h] "); - PrintAndLogEx(NORMAL, "Options:"); - PrintAndLogEx(NORMAL, " h : This help"); - PrintAndLogEx(NORMAL, " : Keri Internal ID"); - PrintAndLogEx(NORMAL, ""); - PrintAndLogEx(NORMAL, "Examples:"); - PrintAndLogEx(NORMAL, _YELLOW_(" lf keri sim 112233")); - PrintAndLogEx(NORMAL, ""); - return PM3_SUCCESS; -} - typedef enum {Scramble = 0, Descramble = 1} KeriMSScramble_t; static int CmdKeriMSScramble(KeriMSScramble_t Action, uint32_t *FC, uint32_t *ID, uint32_t *CardID) { @@ -222,8 +186,9 @@ static int CmdKeriRead(const char *Cmd) { static int CmdKeriClone(const char *Cmd) { bool q5 = false; - uint8_t cmdidx = 0; - char keritype = 'i'; // default to internalid + + uint8_t keritype[2] = {'i'}; // default to internalid + int typeLen = 0; uint32_t fc = 0; uint32_t cid = 0; uint32_t internalid = 0; @@ -240,42 +205,35 @@ static int CmdKeriClone(const char *Cmd) { // dynamic bitrate used blocks[0] |= 0xF << 18; - char cmdp = tolower(param_getchar(Cmd, 0)); - if (strlen(Cmd) == 0 || cmdp == 'h') return usage_lf_keri_clone(); + CLIParserContext *ctx; + CLIParserInit(&ctx, "lf keri clone", + "clone a KERI tag to a T55x7 or Q5/T5555 tag", + "lf keri clone -t i --id 12345\n" + "lf keri clone -t m --fc 6 --id 12345\n"); - // Assume old format for backwards compatibility and only parameter is the internal id - cid = param_get32ex(Cmd, 0, 0, 10); - - // find other options - while (param_getchar(Cmd, cmdidx) != 0x00) { // && !errors) { - switch (tolower(param_getchar(Cmd, cmdidx))) { - case 'h': // help - return usage_lf_keri_clone(); - case 't': // format type - keritype = tolower(param_getchar(Cmd, cmdidx + 1)); - cmdidx += 2; - break; - case 'f': // fc - fc = param_get32ex(Cmd, cmdidx + 1, 0, 10); - cmdidx += 2; - break; - case 'c': // cardid - cid = param_get32ex(Cmd, cmdidx + 1, 0, 10); - cmdidx += 2; - break; - case 'q': // q5 - blocks[0] = T5555_FIXED | T5555_MODULATION_PSK1 | T5555_SET_BITRATE(32) | T5555_PSK_RF_2 | 2 << T5555_MAXBLOCK_SHIFT; - q5 = true; - cmdidx++; - break; - default: - // Skip unknown - cmdidx++; - } + void *argtable[] = { + arg_param_begin, + arg_lit0("q", "q5", "specify writing to Q5/T5555 tag"), + arg_str0("t", "type", "", "Type m - MS, i - Internal ID"), + arg_int0(NULL, "fc", "", "Facility Code"), + arg_int1(NULL, "id", "", "Keri ID"), + arg_param_end + }; + CLIExecWithReturn(ctx, Cmd, argtable, false); + + if (arg_get_lit(ctx, 1)) { + blocks[0] = T5555_FIXED | T5555_MODULATION_PSK1 | T5555_SET_BITRATE(32) | T5555_PSK_RF_2 | 2 << T5555_MAXBLOCK_SHIFT; + q5 = true; } + CLIGetStrWithReturn(ctx, 2, keritype, &typeLen); + + fc = arg_get_int_def(ctx, 3, 0); + cid = arg_get_int_def(ctx, 4, 0); + CLIParserFree(ctx); + // Setup card data/build internal id - switch (keritype) { + switch (keritype[0]) { case 'i' : // Internal ID // MSB is ONE internalid = cid | 0x80000000; @@ -283,6 +241,9 @@ static int CmdKeriClone(const char *Cmd) { case 'm' : // MS CmdKeriMSScramble(Scramble, &fc, &cid, &internalid); break; + default : + PrintAndLogEx(ERR, "Invalid type"); + return PM3_EINVARG; } // Prepare and write to card @@ -303,11 +264,23 @@ static int CmdKeriClone(const char *Cmd) { static int CmdKeriSim(const char *Cmd) { - char cmdp = tolower(param_getchar(Cmd, 0)); - if (strlen(Cmd) == 0 || cmdp == 'h') - return usage_lf_keri_sim(); + CLIParserContext *ctx; + CLIParserInit(&ctx, "lf keri sim", + "Enables simulation of KERI card with card number.", + "lf keri sim --id 112233" + ); + + void *argtable[] = { + arg_param_begin, + arg_int1(NULL, "id", "", "KERI Internal ID"), + arg_param_end + }; + CLIExecWithReturn(ctx, Cmd, argtable, false); - uint64_t internalid = param_get32ex(Cmd, 0, 0, 10); + uint64_t internalid = arg_get_int_def(ctx, 1, 0); + + CLIParserFree(ctx); + internalid |= 0x80000000; internalid <<= 3; internalid += 7; From e179fdb3b071c75ae3a9bd40a822f4d6a92a5cd5 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Sun, 4 Oct 2020 20:01:08 +0200 Subject: [PATCH 0785/1047] plot: fix mean, rework annotations --- client/src/cmddata.c | 10 +++++----- client/src/proxgui.h | 2 +- client/src/proxguiqt.cpp | 25 +++++++++++++++++-------- client/src/proxguiqt.h | 1 + client/src/ui.c | 2 +- 5 files changed, 25 insertions(+), 15 deletions(-) diff --git a/client/src/cmddata.c b/client/src/cmddata.c index e183af77c..cdbf1f04b 100644 --- a/client/src/cmddata.c +++ b/client/src/cmddata.c @@ -1905,9 +1905,9 @@ static int CmdScale(const char *Cmd) { "Set cursor display scale.\n" "Setting the scale makes the differential `dt` reading between the yellow and purple markers meaningful.\n" "once the scale is set, the differential reading between brackets can become a time duration.", - "data scale --sr 125 -u ms -> if sampled in 125 kHz, reading will be in milliseconds\n" - "data scale --sr 1.695 -u us -> if HF, sampling is 1.695 MHz. Reading will be in microseconds\n" - "data scale --sr 16 -u ETU -> if HF, 16 samples per ETU. Reading will be in ETUs" + "data scale --sr 125 -u ms -> for LF sampled at 125 kHz. Reading will be in milliseconds\n" + "data scale --sr 1.695 -u us -> for HF sampled at 1.695 MHz. Reading will be in microseconds\n" + "data scale --sr 16 -u ETU -> for HF with 16 samples per ETU. Reading will be in ETUs" ); void *argtable[] = { arg_param_begin, @@ -1922,8 +1922,8 @@ static int CmdScale(const char *Cmd) { CursorScaleFactor = 1; } int len = 0; - CursorScaleFactorUint[0] = '\x00'; - CLIParamStrToBuf(arg_get_str(ctx, 2), (uint8_t*)CursorScaleFactorUint, sizeof(CursorScaleFactorUint), &len); + CursorScaleFactorUnit[0] = '\x00'; + CLIParamStrToBuf(arg_get_str(ctx, 2), (uint8_t*)CursorScaleFactorUnit, sizeof(CursorScaleFactorUnit), &len); CLIParserFree(ctx); RepaintGraphWindow(); return PM3_SUCCESS; diff --git a/client/src/proxgui.h b/client/src/proxgui.h index 00c954123..921e4dcd5 100644 --- a/client/src/proxgui.h +++ b/client/src/proxgui.h @@ -27,7 +27,7 @@ void InitGraphics(int argc, char **argv, char *script_cmds_file, char *script_cm void ExitGraphics(void); extern double CursorScaleFactor; -extern char CursorScaleFactorUint[11]; +extern char CursorScaleFactorUnit[11]; extern int PlotGridX, PlotGridY, PlotGridXdefault, PlotGridYdefault, GridOffset; extern uint32_t CursorCPos, CursorDPos; extern int CommandFinished; diff --git a/client/src/proxguiqt.cpp b/client/src/proxguiqt.cpp index ed4e049dd..79fc403ff 100644 --- a/client/src/proxguiqt.cpp +++ b/client/src/proxguiqt.cpp @@ -424,7 +424,8 @@ void Plot::PlotGraph(int *buffer, size_t len, QRect plotRect, QRect annotationRe if (len == 0) return; // clock_t begin = clock(); QPainterPath penPath; - int vMin = INT_MAX, vMax = INT_MIN, vMean = 0, v = 0; + int vMin = INT_MAX, vMax = INT_MIN, v = 0; + int64_t vMean = 0; uint32_t i = 0; int x = xCoordOf(GraphStart, plotRect); int y = yCoordOf(buffer[GraphStart], plotRect, g_absVMax); @@ -447,7 +448,8 @@ void Plot::PlotGraph(int *buffer, size_t len, QRect plotRect, QRect annotationRe if (v > vMax) vMax = v; vMean += v; } - vMean /= (i - GraphStart); + GraphStop = i; + vMean /= (GraphStop - GraphStart); painter->setPen(getColor(graphNum)); @@ -483,10 +485,9 @@ void Plot::PlotGraph(int *buffer, size_t len, QRect plotRect, QRect annotationRe //Graph annotations painter->drawPath(penPath); char str[200]; - sprintf(str, "max=%d min=%d mean=%d n=%u/%zu CursorAVal=[%d] CursorBVal=[%d]", - vMax, vMin, vMean, i, len, buffer[CursorAPos], buffer[CursorBPos]); + sprintf(str, "max=%d min=%d mean=%" PRId64 " n=%u/%zu CursorAVal=[%d] CursorBVal=[%d]", + vMax, vMin, vMean, GraphStop - GraphStart, len, buffer[CursorAPos], buffer[CursorBPos]); painter->drawText(20, annotationRect.bottom() - 23 - 20 * graphNum, str); - //clock_t end = clock(); //double elapsed_secs = double(end - begin) / CLOCKS_PER_SEC; //printf("Plot time %f\n", elapsed_secs); @@ -596,11 +597,19 @@ void Plot::paintEvent(QPaintEvent *event) { //Draw annotations char str[200]; - sprintf(str, "@%u dt=%i [%2.2f %s] zoom=%2.2f CursorAPos=%u CursorBPos=%u GridX=%d GridY=%d (%s) GridXoffset=%d", + char scalestr[30] = {0}; + if (CursorScaleFactor != 1) { + if (CursorScaleFactorUnit[0] == '\x00') { + sprintf(scalestr, "[%2.2f] ", ((int32_t)(CursorBPos - CursorAPos)) / CursorScaleFactor); + } else { + sprintf(scalestr, "[%2.2f %s] ", ((int32_t)(CursorBPos - CursorAPos)) / CursorScaleFactor, CursorScaleFactorUnit); + } + } + sprintf(str, "@%u..%u dt=%i %szoom=%2.2f CursorAPos=%u CursorBPos=%u GridX=%d GridY=%d (%s) GridXoffset=%d", GraphStart, + GraphStop, CursorBPos - CursorAPos, - ((int32_t)(CursorBPos - CursorAPos)) / CursorScaleFactor, - CursorScaleFactorUint, + scalestr, GraphPixelsPerPoint, CursorAPos, CursorBPos, diff --git a/client/src/proxguiqt.h b/client/src/proxguiqt.h index 3264a2919..ea9638832 100644 --- a/client/src/proxguiqt.h +++ b/client/src/proxguiqt.h @@ -32,6 +32,7 @@ class Plot: public QWidget { private: QWidget *master; uint32_t GraphStart; // Starting point/offset for the left side of the graph + uint32_t GraphStop; // Stop point/offset for the right side of the graph double GraphPixelsPerPoint; // How many visual pixels are between each sample point (x axis) uint32_t CursorAPos; uint32_t CursorBPos; diff --git a/client/src/ui.c b/client/src/ui.c index 579b21f42..ecc0cb94e 100644 --- a/client/src/ui.c +++ b/client/src/ui.c @@ -38,7 +38,7 @@ session_arg_t session; double CursorScaleFactor = 1; -char CursorScaleFactorUint[11] = {0}; +char CursorScaleFactorUnit[11] = {0}; int PlotGridX = 0, PlotGridY = 0, PlotGridXdefault = 64, PlotGridYdefault = 64; uint32_t CursorCPos = 0, CursorDPos = 0; double GraphPixelsPerPoint = 1.f; // How many visual pixels are between each sample point (x axis) From 2422622da1c2490b13dd6f999ef5a9275a3806ca Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Sun, 4 Oct 2020 20:01:27 +0200 Subject: [PATCH 0786/1047] plot: add Trim (T) --- client/src/proxguiqt.cpp | 24 ++++++++++++++++++++++++ client/src/proxguiqt.h | 1 + 2 files changed, 25 insertions(+) diff --git a/client/src/proxguiqt.cpp b/client/src/proxguiqt.cpp index 79fc403ff..3e94469c0 100644 --- a/client/src/proxguiqt.cpp +++ b/client/src/proxguiqt.cpp @@ -687,6 +687,25 @@ void Plot::Move(int offset) { } } +void Plot::Trim(void) { + uint32_t lref, rref; + if ((CursorAPos == 0) || (CursorBPos == 0)) { // if we don't have both cursors set + lref = GraphStart; + rref = GraphStop; + } else { + lref = CursorAPos < CursorBPos ? CursorAPos : CursorBPos; + rref = CursorAPos < CursorBPos ? CursorBPos : CursorAPos; + GraphPixelsPerPoint = GraphPixelsPerPoint * (GraphStop - GraphStart) / (rref - lref); + CursorAPos -= lref; + CursorBPos -= lref; + } + for (uint32_t i = lref; i < rref; ++i) + GraphBuffer[i - lref] = GraphBuffer[i]; + GraphTraceLen = rref - lref; + GraphStart = 0; +// RepaintGraphWindow(); +} + void Plot::wheelEvent(QWheelEvent *event) { // event->delta() // 120 => shift right 5% @@ -809,6 +828,7 @@ void Plot::keyPressEvent(QKeyEvent *event) { puts("\tH Show help"); puts("\tL Toggle lock grid relative to samples"); puts("\tQ Hide window"); + puts("\tT Trim data on displayed window or on cursors if defined"); puts("\tHOME Move to the start of the graph"); puts("\tEND Move to the end of the graph"); puts("\tPGUP Page left"); @@ -838,6 +858,10 @@ void Plot::keyPressEvent(QKeyEvent *event) { master->hide(); break; + case Qt::Key_T: + Trim(); + break; + case Qt::Key_Home: GraphStart = 0; break; diff --git a/client/src/proxguiqt.h b/client/src/proxguiqt.h index ea9638832..c7178eff8 100644 --- a/client/src/proxguiqt.h +++ b/client/src/proxguiqt.h @@ -53,6 +53,7 @@ class Plot: public QWidget { void closeEvent(QCloseEvent *event); void Zoom(float factor, int refX); void Move(int offset); + void Trim(void); void wheelEvent(QWheelEvent *event); void mouseMoveEvent(QMouseEvent *event); void mousePressEvent(QMouseEvent *event) { mouseMoveEvent(event); } From 1b0875dd781a106c0e5708016f48010165c9abc5 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Sun, 4 Oct 2020 20:06:18 +0200 Subject: [PATCH 0787/1047] remove comment --- client/src/proxguiqt.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/client/src/proxguiqt.cpp b/client/src/proxguiqt.cpp index 3e94469c0..e0fe0c2c1 100644 --- a/client/src/proxguiqt.cpp +++ b/client/src/proxguiqt.cpp @@ -703,7 +703,6 @@ void Plot::Trim(void) { GraphBuffer[i - lref] = GraphBuffer[i]; GraphTraceLen = rref - lref; GraphStart = 0; -// RepaintGraphWindow(); } void Plot::wheelEvent(QWheelEvent *event) { From bc34aba17597dc860d4e14c9992af91ecccc307a Mon Sep 17 00:00:00 2001 From: tcprst Date: Sun, 4 Oct 2020 14:08:07 -0400 Subject: [PATCH 0788/1047] update scripts with new keri syntax --- client/cmdscripts/test_psk_clone.cmd | 2 +- traces/lf_ATA5577.txt | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/client/cmdscripts/test_psk_clone.cmd b/client/cmdscripts/test_psk_clone.cmd index f37ddcfea..784fecd1e 100644 --- a/client/cmdscripts/test_psk_clone.cmd +++ b/client/cmdscripts/test_psk_clone.cmd @@ -14,7 +14,7 @@ lf search rem Test of keri clone & read lf t55xx wipe -lf keri clone 1337 +lf keri clone --id 1337 lf keri read lf search diff --git a/traces/lf_ATA5577.txt b/traces/lf_ATA5577.txt index b725c69fa..9feb1478d 100644 --- a/traces/lf_ATA5577.txt +++ b/traces/lf_ATA5577.txt @@ -56,15 +56,15 @@ lf jablotron clone 112233 lf read s 16000 data save f lf_t5577_jablotron -lf keri clone 112233 +lf keri clone --id 112233 lf read s 10000 data save f lf_t5577_keri -lf keri clone t i fc 6 cn 12345 +lf keri clone -t i --fc 6 --id 12345 lf read s 10000 data save f lf_t5577_keri_internalid -lf keri clone t m f 6 c 12345 +lf keri clone -t m --fc 6 --id 12345 lf read s 10000 data save f lf_t5577_keri_msid From 0339667e9eb0282fd8571baf17bbb9f5cb8ce668 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Sun, 4 Oct 2020 20:33:56 +0200 Subject: [PATCH 0789/1047] cliparser: ignore extra spaces between options --- client/deps/cliparser/argtable3.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/client/deps/cliparser/argtable3.c b/client/deps/cliparser/argtable3.c index c42260f76..c34ee982b 100644 --- a/client/deps/cliparser/argtable3.c +++ b/client/deps/cliparser/argtable3.c @@ -4275,7 +4275,10 @@ static void arg_parse_untagged(int argc, /* register an error for each unused argv[] entry */ while (optind < argc) { /*printf("arg_parse_untagged(): argv[%d]=\"%s\" not consumed\n",optind,argv[optind]);*/ - arg_register_error(endtable, endtable, ARG_ENOMATCH, argv[optind++]); + if (argv[optind][0] != '\x00') { + arg_register_error(endtable, endtable, ARG_ENOMATCH, argv[optind]); + } + optind++; } return; From b95d834e96fac8df3b0a6499a948f4a6b7290d53 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Sun, 4 Oct 2020 21:01:08 +0200 Subject: [PATCH 0790/1047] attempt to fix 996 --- client/src/proxguiqt.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/src/proxguiqt.cpp b/client/src/proxguiqt.cpp index e0fe0c2c1..b4280d958 100644 --- a/client/src/proxguiqt.cpp +++ b/client/src/proxguiqt.cpp @@ -8,7 +8,7 @@ // GUI (QT) //----------------------------------------------------------------------------- #include "proxguiqt.h" - +#include #include #include #include From 064aa6775db69386e4c6fd1988d4e62086674d84 Mon Sep 17 00:00:00 2001 From: Gator96100 Date: Sun, 4 Oct 2020 21:15:35 +0200 Subject: [PATCH 0791/1047] Appveyor using build cache for ProxSpace --- appveyor.yml | 31 +++++++++++++++++++------------ 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index d5ef4ac7f..f261e2b15 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,6 +1,8 @@ version: 3.0.1.{build} image: Visual Studio 2019 clone_folder: C:\ProxSpace\pm3\proxmark +cache: + - C:\cache environment: proxspace_url: https://github.com/Gator96100/ProxSpace/archive/master.zip proxspace_zip_file: \proxspace.zip @@ -101,17 +103,7 @@ clone_script: Write-Host "[ OK ]" -ForegroundColor Green } - Write-Host "ProxSpace: Removing folder..." -NoNewLine - $PSInstallTime=[System.Environment]::TickCount - - cd \ - - Remove-Item -Recurse -Force -Path $env:proxspace_path - - Write-Host "[ OK ]" -ForegroundColor Green - - Receive-Job -Job $WSLjob Write-Host "ProxSpace: downloading..." -NoNewLine @@ -137,6 +129,12 @@ clone_script: Get-ChildItem -Path "\$env:proxspace_zip_folder_name" | Rename-Item -NewName (Split-Path $env:proxspace_path -Leaf) + Write-Host "[ OK ]" -ForegroundColor Gree + + Write-Host "ProxSpace: move cache..." -NoNewLine + + Move-Item -Path "C:\cache" -Destination "$env:proxspace_path\msys2\var\chache" + Write-Host "[ OK ]" -ForegroundColor Gree ExecUpdate "ProxSpace: initial msys2 startup..." $true @@ -152,8 +150,6 @@ clone_script: GitClone "ProxSpace: Cloning repository <$env:appveyor_repo_name> to $env:appveyor_build_folder ..." $env:appveyor_build_folder - Receive-Job -Wait -Job $WSLjob - GitClone "WSL: Cloning repository <$env:appveyor_repo_name> to $env:wsl_git_path ..." $env:wsl_git_path @@ -202,6 +198,9 @@ build_script: throw "Tests error." } } + + #WSL: wait for installation to finish + Receive-Job -Wait -Name WSLInstall #Windows Subsystem for Linux (WSL) Write-Host "---------- WSL make ----------" -ForegroundColor Yellow @@ -276,6 +275,14 @@ build_script: ExecCheck "PS cmake Tests" + Write-Host "ProxSpace: create new cache..." -NoNewLine + + ExecMinGWCmd 'yes | pacman -Sc > /dev/null 2>&1' + + Move-Item -Path "$env:proxspace_path\msys2\var\chache" -Destination "C:\cache" + + Write-Host "[ OK ]" -ForegroundColor Gree + Receive-Job -Wait -Job $WSLjob From c2799c528ab5ea0ecfc2b8044f062fed7e12fb78 Mon Sep 17 00:00:00 2001 From: Gator96100 Date: Sun, 4 Oct 2020 21:23:45 +0200 Subject: [PATCH 0792/1047] Appveyor continue if cache does not exist --- appveyor.yml | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index f261e2b15..ef07fd286 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -103,7 +103,15 @@ clone_script: Write-Host "[ OK ]" -ForegroundColor Green } + Write-Host "ProxSpace: Removing folder..." -NoNewLine + $PSInstallTime=[System.Environment]::TickCount + + cd \ + + Remove-Item -Recurse -Force -Path $env:proxspace_path -ErrorAction SilentlyContinue + + Write-Host "[ OK ]" -ForegroundColor Green Write-Host "ProxSpace: downloading..." -NoNewLine @@ -133,7 +141,7 @@ clone_script: Write-Host "ProxSpace: move cache..." -NoNewLine - Move-Item -Path "C:\cache" -Destination "$env:proxspace_path\msys2\var\chache" + Move-Item -Path "C:\cache" -Destination "$env:proxspace_path\msys2\var\chache" -ErrorAction SilentlyContinue Write-Host "[ OK ]" -ForegroundColor Gree From e1ec356a002a738283d952b2a1c549b6e8a03b8d Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Sun, 4 Oct 2020 21:57:02 +0200 Subject: [PATCH 0793/1047] typos --- doc/cliparser.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/doc/cliparser.md b/doc/cliparser.md index 0e4691757..0114525bc 100644 --- a/doc/cliparser.md +++ b/doc/cliparser.md @@ -25,14 +25,14 @@ And then it fell into silence since it wasn't well documented how to use the cli Fast forward today, where more commands has used the cliparser but it still wasn't the natural way when adding a new client command to the Proxmark3 client. After more discussions among @doegox, @iceman1001 and @mrwalker the concept became more clear on how to use the cliparser lib in the _preferred_ way. -The aftermath was a design and layout specfied which lead to a simpler implemtentation of the cliparser in the client source code while still unfiy all helptexts with the new colours support and a defined layout. As seen below, the simplicity and clearness. +The aftermath was a design and layout specified which lead to a simpler implementation of the cliparser in the client source code while still unifiy all helptexts with the new colours support and a defined layout. As seen below, the simplicity and clearness. ![sample of new style helptext](http://www.icedev.se/proxmark3/helptext.png) Furthermore @mrwalker offered to take notes and thus this document was created. -This is the _new_ and _prefered_ way to implement _helptext_ and _cli parsing_ for Proxmark3 client commands and it's external tools. +This is the _new_ and _preferred_ way to implement _helptext_ and _cli parsing_ for Proxmark3 client commands and it's external tools. ## cliparser setup and use @@ -45,7 +45,7 @@ It will also add the `-h --help` option automatic. * where possible all options should be lowercase. * extended options preceded with -- should be short * options provided directly (without an option identifier) should be avoided. -* -vv for extra verbos should be avoided; use of debug level is preferred. +* -vv for extra verbose should be avoided; use of debug level is preferred. * with --options the equal is not needed (will work with and without) so don't use '=' e.g. cmd --cn 12345 @@ -59,7 +59,7 @@ It will also add the `-h --help` option automatic. --raw : raw data -k --key : key supplied -n --keyno : key number to use - -v --verbose : flag when output should provide more information, not conidered debug. + -v --verbose : flag when output should provide more information, not considered debug. -1 --buffer : use the sample buffer @@ -77,7 +77,7 @@ In the command function, setup the context ### define the context -CLIParserInit (\, \, \); +`CLIParserInit (\, \, \);` use -> to separate example and example comment and \\n to separate examples. e.g. lf indala clone -r a0000000a0002021 -> this uses ..... @@ -136,16 +136,16 @@ bool : arg_lit0 ("\", "\", \<"description"\>) **if an option does not have a short or long option, use NULL in its place** ### show the menu -CLIExecWithReturn(\, \, \, \); +`CLIExecWithReturn(\, \, \, \);` CLIExecWithReturn(ctx, Cmd, argtable, false); ### clean up Once you have extracted the options, cleanup the context. - CLIParserFree(ctx); + CLIParserFree(ctx); -### retreiving options +### retrieving options The parser will format and color and layout as needed. From 16dd79e5fd22e41feefb132750fe2622d758c38b Mon Sep 17 00:00:00 2001 From: Gator96100 Date: Sun, 4 Oct 2020 22:01:57 +0200 Subject: [PATCH 0794/1047] Appveyor create cache even if build fails --- appveyor.yml | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index ef07fd286..3d533492c 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -147,8 +147,7 @@ clone_script: ExecUpdate "ProxSpace: initial msys2 startup..." $true - ExecUpdate "ProxSpace: installing required packages..." $false - + ExecUpdate "ProxSpace: installing required packages..." $false $psversion = (Select-String -Pattern 'PSVERSION=' -SimpleMatch -Path "$env:proxspace_path\msys2\ps\09-proxspace_setup.post").Line.Split("""")[1] @@ -241,6 +240,14 @@ build_script: #ProxSpace + Write-Host "ProxSpace: create new cache..." -NoNewLine + + ExecMinGWCmd 'yes | pacman -Sc > /dev/null 2>&1' + + Move-Item -Path "$env:proxspace_path\msys2\var\chache" -Destination "C:\cache" + + Write-Host "[ OK ]" -ForegroundColor Gree + Write-Host "---------- PS make ----------" -ForegroundColor Yellow $TestTime=[System.Environment]::TickCount @@ -283,14 +290,6 @@ build_script: ExecCheck "PS cmake Tests" - Write-Host "ProxSpace: create new cache..." -NoNewLine - - ExecMinGWCmd 'yes | pacman -Sc > /dev/null 2>&1' - - Move-Item -Path "$env:proxspace_path\msys2\var\chache" -Destination "C:\cache" - - Write-Host "[ OK ]" -ForegroundColor Gree - Receive-Job -Wait -Job $WSLjob From 42c3be5a34dee1663a14b80c855e4e125205eb2b Mon Sep 17 00:00:00 2001 From: Gator96100 Date: Sun, 4 Oct 2020 22:17:37 +0200 Subject: [PATCH 0795/1047] typo --- appveyor.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 3d533492c..00803b339 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -141,7 +141,7 @@ clone_script: Write-Host "ProxSpace: move cache..." -NoNewLine - Move-Item -Path "C:\cache" -Destination "$env:proxspace_path\msys2\var\chache" -ErrorAction SilentlyContinue + Move-Item -Path "C:\cache" -Destination "$env:proxspace_path\msys2\var\cache" -ErrorAction SilentlyContinue Write-Host "[ OK ]" -ForegroundColor Gree @@ -244,7 +244,7 @@ build_script: ExecMinGWCmd 'yes | pacman -Sc > /dev/null 2>&1' - Move-Item -Path "$env:proxspace_path\msys2\var\chache" -Destination "C:\cache" + Move-Item -Path "$env:proxspace_path\msys2\var\cache" -Destination "C:\cache" Write-Host "[ OK ]" -ForegroundColor Gree From 6fc0ddcf1560db0573071335a648d807b338fe57 Mon Sep 17 00:00:00 2001 From: Iceman Date: Sun, 4 Oct 2020 22:19:08 +0200 Subject: [PATCH 0796/1047] Update cliparser.md --- doc/cliparser.md | 62 ++++++++++++++++++++++++++++++++---------------- 1 file changed, 42 insertions(+), 20 deletions(-) diff --git a/doc/cliparser.md b/doc/cliparser.md index 0114525bc..cba87777a 100644 --- a/doc/cliparser.md +++ b/doc/cliparser.md @@ -103,38 +103,48 @@ e.g. lf indala clone -r a0000000a0002021 -> this uses ..... }; _All options has a parameter index, since `-h --help` is added automatic, it will be assigned index 0. -Hence all options you add will start at index 1 and upwards._ +Hence all options you add will start at index 1 and upwards. It added in the define "arg_param_begin_ -**Notes:** -**bool option. true if supplied** -bool : arg_lit0 ("\", "\", \<"description"\>) +### Notes: +#### bool option. true if supplied +`bool : arg_lit0 ("", "", <"description">)` -**integer that is optional** - optional integer : arg_int0 ("\", "\", "\", \<"description"\>) +#### integer that is optional +`optional integer : arg_int0 ("", "", "", <"description">)` -**integer that is required** - required integer : arg_int1 ("\", "\", "\", \<"description"\>) +#### integer that is required +`required integer : arg_int1 ("", "", "", <"description">)` -**double that is optional** - optional double : arg_dbl0 ("\", "\", "\", \<"description"\>) +#### double that is optional +`optional double : arg_dbl0 ("", "", "", <"description">)` -**double that is required** - required double : arg_dbl1 ("\", "\", "\", \<"description"\>) +#### double that is required +`required double : arg_dbl1 ("", "", "", <"description">)` -**String option that is optional and only one instance can be provided** - optional string : arg_str0("\", "\", "\", \<"description"\>) +#### String option that is optional and only one instance can be provided +`optional string : arg_str0 ("", "", "", <"description">)` -**String option that is required and only one instance can be provided** - required string : arg_str1("\", "\", "\", \<"description"\>) +#### String option that is required and only one instance can be provided +`required string : arg_str1 ("", "", "", <"description">)` -**String option that is optional and can have up to 250 instances provided** - optional string : arg_strx0 ("\", "\", "\", \<"description"\>) +#### String option that is optional and can have up to 250 instances provided +`optional string : arg_strx0 ("", "", "", <"description">)` + +#### String option that is required/at least one instance and can have up to 250 instances +`required string : arg_strx1 ("", "", "", <"description">)` + +Unsigned values, like u32 and u64 can be accomplished with + +#### unsigned integer optional +`optional unsigned : arg_u64_0 ("", "", "", <"description">)` + +#### unsigned integer required +`required unsigned : arg_u64_1 ("", "", "", <"description">)` -**String option that is required/at least one instance and can have up to 250 instances** - required string : arg_strx1 ("\", "\", "\", \<"description"\>) **if an option does not have a short or long option, use NULL in its place** + ### show the menu `CLIExecWithReturn(\, \, \, \);` @@ -162,6 +172,18 @@ arg_get_int_def(\, \, \); cardnumber = arg_get_int_def(ctx, 2, -1); + +**uint32** +arg_get_u32_def(\, \, \); + + cardnumber = arg_get_u32_def(ctx, 2, 0); + +**uint64** +arg_get_u64_def(\, \, \); + + cardnumber = arg_get_u64_def(ctx, 2, 0); + + **hex option** CLIGetHexWithReturn(\, \, \, \); ?? as an array of uint_8 ?? From 73af6527b910d64505f1ddd7edae82227d7da4f4 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sun, 4 Oct 2020 22:48:33 +0200 Subject: [PATCH 0797/1047] hf 14b raw, apdu - adapt options --- client/src/cmdhf14b.c | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/client/src/cmdhf14b.c b/client/src/cmdhf14b.c index 15cf0a2c0..5532c5440 100644 --- a/client/src/cmdhf14b.c +++ b/client/src/cmdhf14b.c @@ -161,9 +161,9 @@ static int CmdHF14BCmdRaw(const char *Cmd) { CLIParserContext *ctx; CLIParserInit(&ctx, "hf 14b raw", "Sends raw bytes to card ", - "hf 14b raw -s -c -k 0200a40400\n" - "hf 14b raw --sr -c -k 0200a40400\n" - "hf 14b raw --cts -c -k 0200a40400\n" + "hf 14b raw -cks --data 0200a40400 -> standard select\n" + "hf 14b raw -ck --sr --data 0200a40400 -> SRx select\n" + "hf 14b raw -ck --cts --data 0200a40400 -> C-ticket select\n" ); void *argtable[] = { @@ -173,10 +173,10 @@ static int CmdHF14BCmdRaw(const char *Cmd) { arg_lit0(NULL, "sr", "activate field and select SRx ST"), arg_lit0(NULL, "cts", "activate field and select ASK C-ticket"), arg_lit0("c", "crc", "calculate and append CRC"), - arg_lit0("r", "noresponse", "do not read response"), - arg_int0("t", "timeout", "dec", "timeout in ms"), - arg_lit0("v", "verbose", "verbose"), - arg_strx0(NULL, NULL, "", "bytes to send"), + arg_lit0("r", "noresponse", "do not read response"), + arg_int0("t", "timeout", "", "timeout in ms"), + arg_lit0("v", "verbose", "verbose"), + arg_strx0("d", "data", "", "data, bytes to send"), arg_param_end }; CLIExecWithReturn(ctx, Cmd, argtable, false); @@ -1525,10 +1525,10 @@ static int CmdHF14BAPDU(const char *Cmd) { CLIParserContext *ctx; CLIParserInit(&ctx, "hf 14b apdu", "Sends an ISO 7816-4 APDU via ISO 14443-4 block transmission protocol (T=CL). works with all apdu types from ISO 7816-4:2013", - "hf 14b apdu -s 94a40800043f000002\n" - "hf 14b apdu -sd 00A404000E325041592E5359532E444446303100 -> decode apdu\n" - "hf 14b apdu -sm 00A40400 325041592E5359532E4444463031 -l 256 -> encode standard apdu\n" - "hf 14b apdu -sm 00A40400 325041592E5359532E4444463031 -el 65536 -> encode extended apdu\n"); + "hf 14b apdu -s --hex 94a40800043f000002\n" + "hf 14b apdu -sd --hex 00A404000E325041592E5359532E444446303100 -> decode apdu\n" + "hf 14b apdu -sm 00A40400 -l 256 --hex 325041592E5359532E4444463031 -> encode standard apdu\n" + "hf 14b apdu -sm 00A40400 -el 65536 --hex 325041592E5359532E4444463031 -> encode extended apdu\n"); void *argtable[] = { arg_param_begin, @@ -1536,10 +1536,10 @@ static int CmdHF14BAPDU(const char *Cmd) { arg_lit0("k", "keep", "leave the signal field ON after receive response"), arg_lit0("t", "tlv", "executes TLV decoder if it possible"), arg_lit0("d", "decode", "decode apdu request if it possible"), - arg_str0("m", "make", "", "make apdu with head from this field and data from data field. Must be 4 bytes length: "), + arg_str0("m", "make", "", "make apdu with head from this field and data from data field. Must be 4 bytes length: "), arg_lit0("e", "extended", "make extended length apdu if `m` parameter included"), - arg_int0("l", "le", "", "Le apdu parameter if `m` parameter included"), - arg_strx1(NULL, NULL, "", "data if `m` parameter included"), + arg_int0("l", "le", "", "Le apdu parameter if `m` parameter included"), + arg_strx1("h", "hex", "", " if `m` parameter included"), arg_param_end }; CLIExecWithReturn(ctx, Cmd, argtable, false); From 9b801434e90be001f457a52787519bd8153591d2 Mon Sep 17 00:00:00 2001 From: Gator96100 Date: Sun, 4 Oct 2020 22:51:01 +0200 Subject: [PATCH 0798/1047] Appveyor test --- appveyor.yml | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 00803b339..ecf85de1b 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -71,6 +71,11 @@ clone_script: } } + Function ExecMinGWCmd($Cmd) { + cd $env:proxspace_path + ./runme64.bat -c "$Cmd" + } + $WSLjob = Start-Job -Name WSLInstall -ScriptBlock { Function WSLExec($Text, $Cmd) { Write-Host "$Text" @@ -145,9 +150,13 @@ clone_script: Write-Host "[ OK ]" -ForegroundColor Gree - ExecUpdate "ProxSpace: initial msys2 startup..." $true + #ExecUpdate "ProxSpace: initial msys2 startup..." $true - ExecUpdate "ProxSpace: installing required packages..." $false + ExecMinGWCmd exit + + ExecMinGWCmd exit + + #ExecUpdate "ProxSpace: installing required packages..." $false $psversion = (Select-String -Pattern 'PSVERSION=' -SimpleMatch -Path "$env:proxspace_path\msys2\ps\09-proxspace_setup.post").Line.Split("""")[1] From c315e7b30bb3ef32d2fdf1b138200979a95363a8 Mon Sep 17 00:00:00 2001 From: Gator96100 Date: Sun, 4 Oct 2020 23:17:44 +0200 Subject: [PATCH 0799/1047] Appveyor use ScriptBlock for ProxSpace install --- appveyor.yml | 38 ++++++++++++++++++++------------------ 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index ecf85de1b..3cb87d2be 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -38,29 +38,38 @@ clone_script: Function ExecUpdate($Text, $firstStart) { Write-Host "$Text" - Start-Process "cmd.exe" "/c ""cd /D $env:proxspace_path && runme64.bat -c ""exit""""" + + $PSjob = Start-Job -Name PSInstall -ScriptBlock { + cd $env:proxspace_path + ./runme64.bat -c "exit" + } + $StartTime=[System.Environment]::TickCount Start-Sleep -s 10 - while($true) { - $cmdprocess = Get-Process "cmd" -ErrorAction SilentlyContinue - - if (!$cmdprocess -Or $cmdprocess.HasExited) { + while($true) { + if ($PSjob.State -eq 'Completed') { Write-Host "$Text" -NoNewLine Write-Host "[ OK ]" -ForegroundColor Green break } + if ($PSjob.State -eq 'Failed') { + Write-Host "$Text" -NoNewLine + Write-Host "[ Failed ]" -ForegroundColor Red + break + } + if ($firstStart -And (Test-Path "$env:proxspace_path\msys2\etc\pacman.conf.pacnew")) { Start-Sleep -s 5 - $tmp = $cmdprocess.CloseMainWindow() + Stop-Job -Job $PSjob Start-Sleep -s 5 - Stop-Process -Name "cmd" -Force -ErrorAction SilentlyContinue Write-Host "$Text" -NoNewLine Write-Host "Exit by pacman.conf" -ForegroundColor Green break } if ([System.Environment]::TickCount-$StartTime -gt 1000000) { + Stop-Job -Job $PSjob Write-Host "$Text" -NoNewLine Write-host "Exit by timeout" -ForegroundColor Yellow break @@ -69,11 +78,8 @@ clone_script: Start-Sleep -s 5 Receive-Job -Job $WSLjob } - } - - Function ExecMinGWCmd($Cmd) { - cd $env:proxspace_path - ./runme64.bat -c "$Cmd" + + Receive-Job -Wait -Job $PSjob } $WSLjob = Start-Job -Name WSLInstall -ScriptBlock { @@ -150,13 +156,9 @@ clone_script: Write-Host "[ OK ]" -ForegroundColor Gree - #ExecUpdate "ProxSpace: initial msys2 startup..." $true + ExecUpdate "ProxSpace: initial msys2 startup..." $true - ExecMinGWCmd exit - - ExecMinGWCmd exit - - #ExecUpdate "ProxSpace: installing required packages..." $false + ExecUpdate "ProxSpace: installing required packages..." $false $psversion = (Select-String -Pattern 'PSVERSION=' -SimpleMatch -Path "$env:proxspace_path\msys2\ps\09-proxspace_setup.post").Line.Split("""")[1] From 19462c124f1263d135e956cc5737cac0a31caeba Mon Sep 17 00:00:00 2001 From: Gator96100 Date: Sun, 4 Oct 2020 23:33:35 +0200 Subject: [PATCH 0800/1047] Removed debug output --- appveyor.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 3cb87d2be..1dfd8a762 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -78,8 +78,6 @@ clone_script: Start-Sleep -s 5 Receive-Job -Job $WSLjob } - - Receive-Job -Wait -Job $PSjob } $WSLjob = Start-Job -Name WSLInstall -ScriptBlock { From b3c85dc0ab53b7fa59ef230f342d5f420d0c6de7 Mon Sep 17 00:00:00 2001 From: Gator96100 Date: Sun, 4 Oct 2020 23:41:04 +0200 Subject: [PATCH 0801/1047] Appveyor save cache on failed build --- appveyor.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/appveyor.yml b/appveyor.yml index 1dfd8a762..5f19abdce 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -10,6 +10,7 @@ environment: proxspace_path: \ProxSpace proxspace_home_path: \ProxSpace\pm3 wsl_git_path: C:\proxmark + APPVEYOR_SAVE_CACHE_ON_ERROR: true init: - ps: >- From d1526a6fc7dc3e80c01084e362f5e2f83b15a096 Mon Sep 17 00:00:00 2001 From: Gator96100 Date: Mon, 5 Oct 2020 00:18:07 +0200 Subject: [PATCH 0802/1047] Appveyor test --- appveyor.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/appveyor.yml b/appveyor.yml index 5f19abdce..6bec35c00 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -79,6 +79,7 @@ clone_script: Start-Sleep -s 5 Receive-Job -Job $WSLjob } + Receive-Job -Wait -Job $PSjob } $WSLjob = Start-Job -Name WSLInstall -ScriptBlock { From 3efa218cbf230ce4251daced8a77e65fcf14b7e5 Mon Sep 17 00:00:00 2001 From: Gator96100 Date: Mon, 5 Oct 2020 00:31:45 +0200 Subject: [PATCH 0803/1047] Copy cache instead of moving --- appveyor.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 6bec35c00..16aa2e7b9 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -152,7 +152,7 @@ clone_script: Write-Host "ProxSpace: move cache..." -NoNewLine - Move-Item -Path "C:\cache" -Destination "$env:proxspace_path\msys2\var\cache" -ErrorAction SilentlyContinue + Copy-Item -Path "C:\cache\*" -Destination "$env:proxspace_path\msys2\var\cache\pacman\pkg" -Recurse -Force -ErrorAction SilentlyContinue Write-Host "[ OK ]" -ForegroundColor Gree @@ -255,7 +255,7 @@ build_script: ExecMinGWCmd 'yes | pacman -Sc > /dev/null 2>&1' - Move-Item -Path "$env:proxspace_path\msys2\var\cache" -Destination "C:\cache" + Copy-Item -Path "$env:proxspace_path\msys2\var\cache\pacman\pkg\*" -Destination "C:\cache" -Recurse -Force Write-Host "[ OK ]" -ForegroundColor Gree From 7a62e7d90fb6fe58ce0a295317849ef877f38b6a Mon Sep 17 00:00:00 2001 From: Gator96100 Date: Mon, 5 Oct 2020 01:05:41 +0200 Subject: [PATCH 0804/1047] Clean cache on appveyor.yml changes --- appveyor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index 16aa2e7b9..be92483f0 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -2,7 +2,7 @@ version: 3.0.1.{build} image: Visual Studio 2019 clone_folder: C:\ProxSpace\pm3\proxmark cache: - - C:\cache + - C:\cache -> appveyor.yml environment: proxspace_url: https://github.com/Gator96100/ProxSpace/archive/master.zip proxspace_zip_file: \proxspace.zip From b629e3550caf17e7aee89d8bff8b7777837964f3 Mon Sep 17 00:00:00 2001 From: Gator96100 Date: Mon, 5 Oct 2020 01:32:45 +0200 Subject: [PATCH 0805/1047] Tests --- appveyor.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/appveyor.yml b/appveyor.yml index be92483f0..e1f66c9df 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -152,6 +152,8 @@ clone_script: Write-Host "ProxSpace: move cache..." -NoNewLine + Get-ChildItem C:\cache + Copy-Item -Path "C:\cache\*" -Destination "$env:proxspace_path\msys2\var\cache\pacman\pkg" -Recurse -Force -ErrorAction SilentlyContinue Write-Host "[ OK ]" -ForegroundColor Gree @@ -255,8 +257,12 @@ build_script: ExecMinGWCmd 'yes | pacman -Sc > /dev/null 2>&1' + Remove-Item -Recurse -Force -Path "C:\cache\*" -ErrorAction SilentlyContinue + Copy-Item -Path "$env:proxspace_path\msys2\var\cache\pacman\pkg\*" -Destination "C:\cache" -Recurse -Force + Get-ChildItem C:\cache + Write-Host "[ OK ]" -ForegroundColor Gree Write-Host "---------- PS make ----------" -ForegroundColor Yellow From 79595769967f0c4e35353dbad9b2c3a4a5fb0796 Mon Sep 17 00:00:00 2001 From: Gator96100 Date: Mon, 5 Oct 2020 01:35:10 +0200 Subject: [PATCH 0806/1047] Tests --- appveyor.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index e1f66c9df..ea6d318d4 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -7,7 +7,7 @@ environment: proxspace_url: https://github.com/Gator96100/ProxSpace/archive/master.zip proxspace_zip_file: \proxspace.zip proxspace_zip_folder_name: ProxSpace-* - proxspace_path: \ProxSpace + proxspace_path: C:\ProxSpace proxspace_home_path: \ProxSpace\pm3 wsl_git_path: C:\proxmark APPVEYOR_SAVE_CACHE_ON_ERROR: true @@ -156,6 +156,8 @@ clone_script: Copy-Item -Path "C:\cache\*" -Destination "$env:proxspace_path\msys2\var\cache\pacman\pkg" -Recurse -Force -ErrorAction SilentlyContinue + Get-ChildItem $env:proxspace_path\msys2\var\cache\pacman\pkg + Write-Host "[ OK ]" -ForegroundColor Gree ExecUpdate "ProxSpace: initial msys2 startup..." $true From b833ea5e75d15394f40c2b9d39b6acd558449401 Mon Sep 17 00:00:00 2001 From: Gator96100 Date: Mon, 5 Oct 2020 01:58:48 +0200 Subject: [PATCH 0807/1047] Tests --- appveyor.yml | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index ea6d318d4..7e25e82e7 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -152,10 +152,12 @@ clone_script: Write-Host "ProxSpace: move cache..." -NoNewLine - Get-ChildItem C:\cache + Get-ChildItem "C:\cache" Copy-Item -Path "C:\cache\*" -Destination "$env:proxspace_path\msys2\var\cache\pacman\pkg" -Recurse -Force -ErrorAction SilentlyContinue + Get-ChildItem "C:\cache" + Get-ChildItem $env:proxspace_path\msys2\var\cache\pacman\pkg Write-Host "[ OK ]" -ForegroundColor Gree @@ -181,6 +183,8 @@ build_script: $pmfolder = Split-Path $env:appveyor_build_folder -Leaf + Get-ChildItem "C:\cache" + Function ExecMinGWCmd($Cmd) { cd $env:proxspace_path ./runme64.bat -c "cd $pmfolder && $Cmd" @@ -257,13 +261,17 @@ build_script: Write-Host "ProxSpace: create new cache..." -NoNewLine + Get-ChildItem "$env:proxspace_path\msys2\var\cache\pacman\pkg\" + ExecMinGWCmd 'yes | pacman -Sc > /dev/null 2>&1' Remove-Item -Recurse -Force -Path "C:\cache\*" -ErrorAction SilentlyContinue Copy-Item -Path "$env:proxspace_path\msys2\var\cache\pacman\pkg\*" -Destination "C:\cache" -Recurse -Force - Get-ChildItem C:\cache + Get-ChildItem "C:\cache" + + Get-ChildItem "$env:proxspace_path\msys2\var\cache\pacman\pkg\" Write-Host "[ OK ]" -ForegroundColor Gree From 504ba622e3db319e84896dac803e012dea1664e5 Mon Sep 17 00:00:00 2001 From: Gator96100 Date: Mon, 5 Oct 2020 01:59:52 +0200 Subject: [PATCH 0808/1047] Tests --- appveyor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index 7e25e82e7..a87815baf 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -2,7 +2,7 @@ version: 3.0.1.{build} image: Visual Studio 2019 clone_folder: C:\ProxSpace\pm3\proxmark cache: - - C:\cache -> appveyor.yml + - C:\cache environment: proxspace_url: https://github.com/Gator96100/ProxSpace/archive/master.zip proxspace_zip_file: \proxspace.zip From 30a770cfdc2915924acc43b27fd775579ad56172 Mon Sep 17 00:00:00 2001 From: Gator96100 Date: Mon, 5 Oct 2020 02:24:46 +0200 Subject: [PATCH 0809/1047] Tests --- appveyor.yml | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index a87815baf..4ffcadf1a 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -152,13 +152,11 @@ clone_script: Write-Host "ProxSpace: move cache..." -NoNewLine - Get-ChildItem "C:\cache" + Copy-Item -Path "C:\cache\*" -Destination "$env:proxspace_path\msys2\var\cache\pacman\pkg" -Recurse -Force - Copy-Item -Path "C:\cache\*" -Destination "$env:proxspace_path\msys2\var\cache\pacman\pkg" -Recurse -Force -ErrorAction SilentlyContinue + Get-ChildItem "C:\cache\" - Get-ChildItem "C:\cache" - - Get-ChildItem $env:proxspace_path\msys2\var\cache\pacman\pkg + Get-ChildItem "$env:proxspace_path\msys2\var\cache\pacman\pkg\" Write-Host "[ OK ]" -ForegroundColor Gree @@ -176,6 +174,10 @@ clone_script: GitClone "WSL: Cloning repository <$env:appveyor_repo_name> to $env:wsl_git_path ..." $env:wsl_git_path + Get-ChildItem "C:\cache\" + + Get-ChildItem "$env:proxspace_path\msys2\var\cache\pacman\pkg\" + install: build_script: @@ -261,15 +263,17 @@ build_script: Write-Host "ProxSpace: create new cache..." -NoNewLine - Get-ChildItem "$env:proxspace_path\msys2\var\cache\pacman\pkg\" - ExecMinGWCmd 'yes | pacman -Sc > /dev/null 2>&1' - Remove-Item -Recurse -Force -Path "C:\cache\*" -ErrorAction SilentlyContinue + #Remove-Item -Recurse -Force -Path "C:\cache\*" -ErrorAction SilentlyContinue + + Get-ChildItem "C:\cache\" + + Get-ChildItem "$env:proxspace_path\msys2\var\cache\pacman\pkg\" Copy-Item -Path "$env:proxspace_path\msys2\var\cache\pacman\pkg\*" -Destination "C:\cache" -Recurse -Force - Get-ChildItem "C:\cache" + Get-ChildItem "C:\cache\" Get-ChildItem "$env:proxspace_path\msys2\var\cache\pacman\pkg\" From f09403bae596972a0c9558cbe1ff59002f7c292c Mon Sep 17 00:00:00 2001 From: Gator96100 Date: Mon, 5 Oct 2020 03:23:02 +0200 Subject: [PATCH 0810/1047] WIP --- appveyor.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/appveyor.yml b/appveyor.yml index 4ffcadf1a..4e31c1832 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -271,6 +271,8 @@ build_script: Get-ChildItem "$env:proxspace_path\msys2\var\cache\pacman\pkg\" + New-Item -ItemType Directory -Force -Path "C:\cache" + Copy-Item -Path "$env:proxspace_path\msys2\var\cache\pacman\pkg\*" -Destination "C:\cache" -Recurse -Force Get-ChildItem "C:\cache\" From 3d0449a63a0f98e570feb7bb2e00ba840ef8069a Mon Sep 17 00:00:00 2001 From: Gator96100 Date: Mon, 5 Oct 2020 04:06:45 +0200 Subject: [PATCH 0811/1047] WIP --- appveyor.yml | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 4e31c1832..b3db4b210 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -2,7 +2,7 @@ version: 3.0.1.{build} image: Visual Studio 2019 clone_folder: C:\ProxSpace\pm3\proxmark cache: - - C:\cache + - C:\cache -> appveyor.yml environment: proxspace_url: https://github.com/Gator96100/ProxSpace/archive/master.zip proxspace_zip_file: \proxspace.zip @@ -152,7 +152,7 @@ clone_script: Write-Host "ProxSpace: move cache..." -NoNewLine - Copy-Item -Path "C:\cache\*" -Destination "$env:proxspace_path\msys2\var\cache\pacman\pkg" -Recurse -Force + Move-Item -Path "C:\cache" -Destination "$env:proxspace_path\msys2\var\cache" -Force Get-ChildItem "C:\cache\" @@ -265,15 +265,11 @@ build_script: ExecMinGWCmd 'yes | pacman -Sc > /dev/null 2>&1' - #Remove-Item -Recurse -Force -Path "C:\cache\*" -ErrorAction SilentlyContinue - Get-ChildItem "C:\cache\" - Get-ChildItem "$env:proxspace_path\msys2\var\cache\pacman\pkg\" + Get-ChildItem "$env:proxspace_path\msys2\var\cache\pacman\pkg\" - New-Item -ItemType Directory -Force -Path "C:\cache" - - Copy-Item -Path "$env:proxspace_path\msys2\var\cache\pacman\pkg\*" -Destination "C:\cache" -Recurse -Force + Move-Item -Path "$env:proxspace_path\msys2\var\cache" -Destination "C:\cache" -Force Get-ChildItem "C:\cache\" From c94c17139a498092c835202d84b8ac01c9a3fef9 Mon Sep 17 00:00:00 2001 From: Gator96100 Date: Mon, 5 Oct 2020 04:14:46 +0200 Subject: [PATCH 0812/1047] WIP --- appveyor.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index b3db4b210..5012a9630 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -2,7 +2,7 @@ version: 3.0.1.{build} image: Visual Studio 2019 clone_folder: C:\ProxSpace\pm3\proxmark cache: - - C:\cache -> appveyor.yml + - C:\cache environment: proxspace_url: https://github.com/Gator96100/ProxSpace/archive/master.zip proxspace_zip_file: \proxspace.zip @@ -79,7 +79,6 @@ clone_script: Start-Sleep -s 5 Receive-Job -Job $WSLjob } - Receive-Job -Wait -Job $PSjob } $WSLjob = Start-Job -Name WSLInstall -ScriptBlock { From 786686cf8212c7f9ead485950f699af2ad3cab82 Mon Sep 17 00:00:00 2001 From: Gator96100 Date: Mon, 5 Oct 2020 04:32:09 +0200 Subject: [PATCH 0813/1047] WIP --- appveyor.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 5012a9630..b6eae83f2 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -153,7 +153,7 @@ clone_script: Move-Item -Path "C:\cache" -Destination "$env:proxspace_path\msys2\var\cache" -Force - Get-ChildItem "C:\cache\" + Get-ChildItem "C:\" Get-ChildItem "$env:proxspace_path\msys2\var\cache\pacman\pkg\" @@ -184,8 +184,6 @@ build_script: $pmfolder = Split-Path $env:appveyor_build_folder -Leaf - Get-ChildItem "C:\cache" - Function ExecMinGWCmd($Cmd) { cd $env:proxspace_path ./runme64.bat -c "cd $pmfolder && $Cmd" @@ -268,6 +266,8 @@ build_script: Get-ChildItem "$env:proxspace_path\msys2\var\cache\pacman\pkg\" + Remove-Item -Recurse -Force -Path C:\cache -ErrorAction SilentlyContinue + Move-Item -Path "$env:proxspace_path\msys2\var\cache" -Destination "C:\cache" -Force Get-ChildItem "C:\cache\" From fd6c8eb7d48a3f4934ddcc9674d91256d7353437 Mon Sep 17 00:00:00 2001 From: Gator96100 Date: Mon, 5 Oct 2020 05:00:19 +0200 Subject: [PATCH 0814/1047] WIP --- appveyor.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/appveyor.yml b/appveyor.yml index b6eae83f2..8a89d1c14 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -151,6 +151,8 @@ clone_script: Write-Host "ProxSpace: move cache..." -NoNewLine + "dummy" > C\cache\update_cache.txt + Move-Item -Path "C:\cache" -Destination "$env:proxspace_path\msys2\var\cache" -Force Get-ChildItem "C:\" From 3b8c54ad5227ff0dd8c8b4e4122b5711f59c0348 Mon Sep 17 00:00:00 2001 From: Gator96100 Date: Mon, 5 Oct 2020 05:10:25 +0200 Subject: [PATCH 0815/1047] Appveyor cache fixes --- appveyor.yml | 141 +++++++++++++++++++++++++++------------------------ 1 file changed, 74 insertions(+), 67 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 8a89d1c14..71b2e709b 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -35,6 +35,78 @@ init: # iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1')) clone_script: +- ps: >- + + Function GitClone($Text, $Folder) { + Write-Host "$Text" -NoNewLine + if(-not $env:appveyor_pull_request_number) { + git clone -q --branch=$env:appveyor_repo_branch https://github.com/$env:appveyor_repo_name.git $Folder + cd $Folder + git checkout -qf $env:appveyor_repo_commit + } else { + git clone -q https://github.com/$env:appveyor_repo_name.git $Folder + cd $Folder + git fetch -q origin +refs/pull/$env:appveyor_pull_request_number/merge: + git checkout -qf FETCH_HEAD + } + Write-Host "[ OK ]" -ForegroundColor Green + } + + $WSLjob = Start-Job -Name WSLInstall -ScriptBlock { + Function WSLExec($Text, $Cmd) { + Write-Host "$Text" + wsl -- bash -c $Cmd + Write-Host "$Text" -NoNewLine + Write-Host "[ OK ]" -ForegroundColor Green + } + + $WSLInstallTime=[System.Environment]::TickCount + WSLExec "WSL update..." "sudo apt-get update 1>/dev/null" + WSLExec "WSL upgrade..." "sudo apt-get upgrade -y 1>/dev/null" + WSLExec "WSL cleanup..." "sudo apt-get auto-remove -y 1>/dev/null" + WSLExec "WSL install..." "sudo apt-get -y install --reinstall --no-install-recommends git ca-certificates build-essential pkg-config libreadline-dev gcc-arm-none-eabi libnewlib-dev libbz2-dev qtbase5-dev cmake 1>/dev/null" + WSLExec "WSL QT fix..." "sudo strip --remove-section=.note.ABI-tag /usr/lib/x86_64-linux-gnu/libQt5Core.so.5" + Add-AppveyorMessage -Message "WSL setup took $(([System.Environment]::TickCount-$WSLInstallTime) / 1000) sec" -Category Information + } + + Write-Host "ProxSpace: Removing folder..." -NoNewLine + + Remove-Item -Recurse -Force -Path $env:proxspace_path -ErrorAction SilentlyContinue + + Write-Host "[ OK ]" -ForegroundColor Green + + Write-Host "ProxSpace: downloading..." -NoNewLine + + [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 + + Invoke-WebRequest "$env:proxspace_url" -outfile "$env:proxspace_zip_file" + + Write-Host "[ OK ]" -ForegroundColor Green + + Write-Host "ProxSpace: extracting..." -NoNewLine + + Expand-Archive -LiteralPath "$env:proxspace_zip_file" -DestinationPath "\" + + Remove-Item "$env:proxspace_zip_file" + + Write-Host "[ OK ]" -ForegroundColor Green + + Write-Host "ProxSpace: renaming folder..." -NoNewLine + + Get-ChildItem -Path "\$env:proxspace_zip_folder_name" | Rename-Item -NewName (Split-Path $env:proxspace_path -Leaf) + + Write-Host "[ OK ]" -ForegroundColor Gree + + $psversion = (Select-String -Pattern 'PSVERSION=' -SimpleMatch -Path "$env:proxspace_path\msys2\ps\09-proxspace_setup.post").Line.Split("""")[1] + + Write-Host "ProxSpace version: $psversion" -ForegroundColor Yellow + + GitClone "ProxSpace: Cloning repository <$env:appveyor_repo_name> to $env:appveyor_build_folder ..." $env:appveyor_build_folder + + GitClone "WSL: Cloning repository <$env:appveyor_repo_name> to $env:wsl_git_path ..." $env:wsl_git_path + + +install: - ps: >- Function ExecUpdate($Text, $firstStart) { @@ -77,27 +149,10 @@ clone_script: } Start-Sleep -s 5 - Receive-Job -Job $WSLjob + Receive-Job -Name WSLInstall } } - $WSLjob = Start-Job -Name WSLInstall -ScriptBlock { - Function WSLExec($Text, $Cmd) { - Write-Host "$Text" - wsl -- bash -c $Cmd - Write-Host "$Text" -NoNewLine - Write-Host "[ OK ]" -ForegroundColor Green - } - - $WSLInstallTime=[System.Environment]::TickCount - WSLExec "WSL update..." "sudo apt-get update 1>/dev/null" - WSLExec "WSL upgrade..." "sudo apt-get upgrade -y 1>/dev/null" - WSLExec "WSL cleanup..." "sudo apt-get auto-remove -y 1>/dev/null" - WSLExec "WSL install..." "sudo apt-get -y install --reinstall --no-install-recommends git ca-certificates build-essential pkg-config libreadline-dev gcc-arm-none-eabi libnewlib-dev libbz2-dev qtbase5-dev cmake 1>/dev/null" - WSLExec "WSL QT fix..." "sudo strip --remove-section=.note.ABI-tag /usr/lib/x86_64-linux-gnu/libQt5Core.so.5" - Add-AppveyorMessage -Message "WSL setup took $(([System.Environment]::TickCount-$WSLInstallTime) / 1000) sec" -Category Information - } - Function GitClone($Text, $Folder) { Write-Host "$Text" -NoNewLine if(-not $env:appveyor_pull_request_number) { @@ -113,46 +168,12 @@ clone_script: Write-Host "[ OK ]" -ForegroundColor Green } - Write-Host "ProxSpace: Removing folder..." -NoNewLine - $PSInstallTime=[System.Environment]::TickCount - cd \ - - Remove-Item -Recurse -Force -Path $env:proxspace_path -ErrorAction SilentlyContinue - - Write-Host "[ OK ]" -ForegroundColor Green - - Write-Host "ProxSpace: downloading..." -NoNewLine - - [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 - - Invoke-WebRequest "$env:proxspace_url" -outfile "$env:proxspace_zip_file" - - Write-Host "[ OK ]" -ForegroundColor Green - - Receive-Job -Job $WSLjob - - Write-Host "ProxSpace: extracting..." -NoNewLine - - Expand-Archive -LiteralPath "$env:proxspace_zip_file" -DestinationPath "\" - - Remove-Item "$env:proxspace_zip_file" - - Write-Host "[ OK ]" -ForegroundColor Green - - Receive-Job -Job $WSLjob - - Write-Host "ProxSpace: renaming folder..." -NoNewLine - - Get-ChildItem -Path "\$env:proxspace_zip_folder_name" | Rename-Item -NewName (Split-Path $env:proxspace_path -Leaf) - Write-Host "[ OK ]" -ForegroundColor Gree Write-Host "ProxSpace: move cache..." -NoNewLine - "dummy" > C\cache\update_cache.txt - Move-Item -Path "C:\cache" -Destination "$env:proxspace_path\msys2\var\cache" -Force Get-ChildItem "C:\" @@ -163,24 +184,10 @@ clone_script: ExecUpdate "ProxSpace: initial msys2 startup..." $true - ExecUpdate "ProxSpace: installing required packages..." $false - - $psversion = (Select-String -Pattern 'PSVERSION=' -SimpleMatch -Path "$env:proxspace_path\msys2\ps\09-proxspace_setup.post").Line.Split("""")[1] - - Write-Host "ProxSpace version: $psversion" -ForegroundColor Yellow + ExecUpdate "ProxSpace: installing required packages..." $false Add-AppveyorMessage -Message "ProxSpace download and update took $(([System.Environment]::TickCount-$PSInstallTime) / 1000) sec" -Category Information - - GitClone "ProxSpace: Cloning repository <$env:appveyor_repo_name> to $env:appveyor_build_folder ..." $env:appveyor_build_folder - - GitClone "WSL: Cloning repository <$env:appveyor_repo_name> to $env:wsl_git_path ..." $env:wsl_git_path - - Get-ChildItem "C:\cache\" - - Get-ChildItem "$env:proxspace_path\msys2\var\cache\pacman\pkg\" - -install: build_script: - ps: >- From 585781ad089d8d64c7b3aa52e18979927c4f541a Mon Sep 17 00:00:00 2001 From: Gator96100 Date: Mon, 5 Oct 2020 05:14:34 +0200 Subject: [PATCH 0816/1047] Appveyor cleanup --- appveyor.yml | 21 ++++++--------------- 1 file changed, 6 insertions(+), 15 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 71b2e709b..da2ade65a 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -9,6 +9,7 @@ environment: proxspace_zip_folder_name: ProxSpace-* proxspace_path: C:\ProxSpace proxspace_home_path: \ProxSpace\pm3 + proxspace_cache_path: C:\cache wsl_git_path: C:\proxmark APPVEYOR_SAVE_CACHE_ON_ERROR: true @@ -71,6 +72,8 @@ clone_script: Write-Host "ProxSpace: Removing folder..." -NoNewLine + cd \ + Remove-Item -Recurse -Force -Path $env:proxspace_path -ErrorAction SilentlyContinue Write-Host "[ OK ]" -ForegroundColor Green @@ -174,11 +177,7 @@ install: Write-Host "ProxSpace: move cache..." -NoNewLine - Move-Item -Path "C:\cache" -Destination "$env:proxspace_path\msys2\var\cache" -Force - - Get-ChildItem "C:\" - - Get-ChildItem "$env:proxspace_path\msys2\var\cache\pacman\pkg\" + Move-Item -Path "$env:proxspace_cache_path" -Destination "$env:proxspace_path\msys2\var\cache" -Force Write-Host "[ OK ]" -ForegroundColor Gree @@ -271,17 +270,9 @@ build_script: ExecMinGWCmd 'yes | pacman -Sc > /dev/null 2>&1' - Get-ChildItem "C:\cache\" + Remove-Item -Recurse -Force -Path "$env:proxspace_cache_path" -ErrorAction SilentlyContinue - Get-ChildItem "$env:proxspace_path\msys2\var\cache\pacman\pkg\" - - Remove-Item -Recurse -Force -Path C:\cache -ErrorAction SilentlyContinue - - Move-Item -Path "$env:proxspace_path\msys2\var\cache" -Destination "C:\cache" -Force - - Get-ChildItem "C:\cache\" - - Get-ChildItem "$env:proxspace_path\msys2\var\cache\pacman\pkg\" + Move-Item -Path "$env:proxspace_path\msys2\var\cache" -Destination "$env:proxspace_cache_path" -Force Write-Host "[ OK ]" -ForegroundColor Gree From bebdf6dc2751842481195a34c66349bde3012773 Mon Sep 17 00:00:00 2001 From: Gator96100 Date: Mon, 5 Oct 2020 05:21:56 +0200 Subject: [PATCH 0817/1047] Tests --- appveyor.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index da2ade65a..329bf74c6 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -173,12 +173,12 @@ install: $PSInstallTime=[System.Environment]::TickCount - Write-Host "[ OK ]" -ForegroundColor Gree - Write-Host "ProxSpace: move cache..." -NoNewLine Move-Item -Path "$env:proxspace_cache_path" -Destination "$env:proxspace_path\msys2\var\cache" -Force + Get-ChildItem "$env:proxspace_path\msys2\var\cache\pacman\pkg\" + Write-Host "[ OK ]" -ForegroundColor Gree ExecUpdate "ProxSpace: initial msys2 startup..." $true From 656f7dd580dc4cc7ca9d0707365670fe14b15222 Mon Sep 17 00:00:00 2001 From: Gator96100 Date: Mon, 5 Oct 2020 05:30:21 +0200 Subject: [PATCH 0818/1047] Appveyor cleanup --- appveyor.yml | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 329bf74c6..815c4fab1 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -2,7 +2,7 @@ version: 3.0.1.{build} image: Visual Studio 2019 clone_folder: C:\ProxSpace\pm3\proxmark cache: - - C:\cache + - C:\cache -> appveyor.yml environment: proxspace_url: https://github.com/Gator96100/ProxSpace/archive/master.zip proxspace_zip_file: \proxspace.zip @@ -70,6 +70,8 @@ clone_script: Add-AppveyorMessage -Message "WSL setup took $(([System.Environment]::TickCount-$WSLInstallTime) / 1000) sec" -Category Information } + $env:PSInstallTime=[System.Environment]::TickCount + Write-Host "ProxSpace: Removing folder..." -NoNewLine cd \ @@ -171,21 +173,17 @@ install: Write-Host "[ OK ]" -ForegroundColor Green } - $PSInstallTime=[System.Environment]::TickCount - Write-Host "ProxSpace: move cache..." -NoNewLine Move-Item -Path "$env:proxspace_cache_path" -Destination "$env:proxspace_path\msys2\var\cache" -Force - Get-ChildItem "$env:proxspace_path\msys2\var\cache\pacman\pkg\" - Write-Host "[ OK ]" -ForegroundColor Gree ExecUpdate "ProxSpace: initial msys2 startup..." $true ExecUpdate "ProxSpace: installing required packages..." $false - Add-AppveyorMessage -Message "ProxSpace download and update took $(([System.Environment]::TickCount-$PSInstallTime) / 1000) sec" -Category Information + Add-AppveyorMessage -Message "ProxSpace download and update took $(([System.Environment]::TickCount-$env:PSInstallTime) / 1000) sec" -Category Information build_script: - ps: >- From 82806379ce946fd177afc33e5a2b9eec8b816f61 Mon Sep 17 00:00:00 2001 From: Gator96100 Date: Mon, 5 Oct 2020 05:33:39 +0200 Subject: [PATCH 0819/1047] Fix --- appveyor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index 815c4fab1..8586bb48a 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -175,7 +175,7 @@ install: Write-Host "ProxSpace: move cache..." -NoNewLine - Move-Item -Path "$env:proxspace_cache_path" -Destination "$env:proxspace_path\msys2\var\cache" -Force + Move-Item -Path "$env:proxspace_cache_path" -Destination "$env:proxspace_path\msys2\var\cache" -Force -ErrorAction SilentlyContinue Write-Host "[ OK ]" -ForegroundColor Gree From 13badb6088d8cba49d812d4e20ebd7eea34f9691 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Mon, 5 Oct 2020 09:34:29 +0200 Subject: [PATCH 0820/1047] scroll zoom: use fractions of power of 2 to avoid desync between key and mouse zoom --- client/src/proxguiqt.cpp | 12 ++++++------ client/src/proxguiqt.h | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/client/src/proxguiqt.cpp b/client/src/proxguiqt.cpp index b4280d958..0e791d77a 100644 --- a/client/src/proxguiqt.cpp +++ b/client/src/proxguiqt.cpp @@ -647,7 +647,7 @@ void Plot::closeEvent(QCloseEvent *event) { g_useOverlays = false; } -void Plot::Zoom(float factor, int refX) { +void Plot::Zoom(double factor, int refX) { if (factor >= 1) { // Zoom in if (GraphPixelsPerPoint <= 25 * factor) { GraphPixelsPerPoint *= factor; @@ -710,9 +710,9 @@ void Plot::wheelEvent(QWheelEvent *event) { // 120 => shift right 5% // -120 => shift left 5% const float move_offset = 0.05; - // -120+shift => zoom in 10% - // 120+shift => zoom out 10% - const float zoom_offset = 0.1; + // -120+shift => zoom in (5 times = *2) + // 120+shift => zoom out (5 times = /2) + const double zoom_offset = 1.148698354997035; // 2**(1/5) if (event->modifiers() & Qt::ShiftModifier) { // event->position doesn't exist in QT5.12.8, both exist in 5.14.2 and event->x doesn't exist in 5.15.0 #if QT_VERSION >= 0x050d00 @@ -730,9 +730,9 @@ void Plot::wheelEvent(QWheelEvent *event) { float delta = event->delta(); #endif if (delta < 0) { - Zoom(1.0 - (float)delta / (120 / zoom_offset), x); + Zoom(zoom_offset, x); } else { - Zoom(1.0 / (1.0 + (float)delta / (120 / zoom_offset)), x); + Zoom(1.0 / zoom_offset, x); } } else { #if QT_VERSION >= 0x050d00 diff --git a/client/src/proxguiqt.h b/client/src/proxguiqt.h index c7178eff8..49a69454f 100644 --- a/client/src/proxguiqt.h +++ b/client/src/proxguiqt.h @@ -51,7 +51,7 @@ class Plot: public QWidget { protected: void paintEvent(QPaintEvent *event); void closeEvent(QCloseEvent *event); - void Zoom(float factor, int refX); + void Zoom(double factor, int refX); void Move(int offset); void Trim(void); void wheelEvent(QWheelEvent *event); From 8baeaa58e2cfc239335bfe4065188fb002732fd0 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Mon, 5 Oct 2020 10:02:32 +0200 Subject: [PATCH 0821/1047] 14b -add option for cleatrace, empty card struct, and adapt the padding of bits --- armsrc/iso14443b.c | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/armsrc/iso14443b.c b/armsrc/iso14443b.c index 01d890d28..f333ac88e 100644 --- a/armsrc/iso14443b.c +++ b/armsrc/iso14443b.c @@ -784,6 +784,7 @@ static RAMFUNC int Handle14443bSamplesFromTag(int ci, int cq) { if (AMPLITUDE(ci, cq) > SUBCARRIER_DETECT_THRESHOLD) { if (((ABS(Demod.sumI) > ABS(Demod.sumQ)) && (((ci > 0) && (Demod.sumI > 0)) || ((ci < 0) && (Demod.sumI < 0)))) || // signal closer to horizontal, polarity check based on on I ((ABS(Demod.sumI) <= ABS(Demod.sumQ)) && (((cq > 0) && (Demod.sumQ > 0)) || ((cq < 0) && (Demod.sumQ < 0))))) { // signal closer to vertical, polarity check based on on Q + if (Demod.posCount < 10) { // refine signal approximation during first 10 samples Demod.sumI += ci; Demod.sumQ += cq; @@ -1103,7 +1104,7 @@ static void CodeIso14443bAsReader(const uint8_t *cmd, int len) { // Send SOF // 10-11 ETUs of ZERO - for (i = 0; i < 10; i++) { + for (i = 0; i < 11; i++) { tosend_stuffbit(0); } // 2-3 ETUs of ONE @@ -1132,23 +1133,21 @@ static void CodeIso14443bAsReader(const uint8_t *cmd, int len) { // EGT extra guard time 1 ETU = 9us // For PCD it ranges 0-57us === 0 - 6 ETU // FOR PICC it ranges 0-19us == 0 - 2 ETU - } // Send EOF // 10-11 ETUs of ZERO - for (i = 0; i < 10; i++) { + for (i = 0; i < 11; i++) { tosend_stuffbit(0); } - tosend_stuffbit(1); /* Transition time. TR0 - guard time * TR0 - 8 ETU's minimum. * TR0 - 32 ETU's maximum for ATQB only * TR0 - FWT for all other commands * 32,64,128,256,512, ... , 262144, 524288 ETU */ - int pad = (12 + (len * 10) + 11) & 0x7; + int pad = (11 + 2 + (len * 10) + 11) & 0x7; for (i = 0; i < 16 - pad; ++i) tosend_stuffbit(1); @@ -1524,7 +1523,7 @@ void iso14443b_setup(void) { // Signal field is on with the appropriate LED FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER | FPGA_HF_READER_MODE_SEND_SHALLOW_MOD); - SpinDelay(100); + SpinDelay(50); // Start the timer StartCountSspClk(); @@ -1841,17 +1840,21 @@ void SendRawCommand14443B_Ex(PacketCommandNG *c) { if ((param & ISO14B_CONNECT) == ISO14B_CONNECT) { iso14443b_setup(); - clear_trace(); } - if ((param & ISO14B_SET_TIMEOUT)) + if ((param & ISO14B_SET_TIMEOUT) == ISO14B_SET_TIMEOUT) { iso14b_set_timeout(timeout); - + } + + if ((param & ISO14B_CLEARTRACE) == ISO14B_CLEARTRACE) { + clear_trace(); + } set_tracing(true); int status; uint32_t sendlen = sizeof(iso14b_card_select_t); iso14b_card_select_t card; + memset((void*)&card, 0x00, sizeof(card)); if ((param & ISO14B_SELECT_STD) == ISO14B_SELECT_STD) { status = iso14443b_select_card(&card); From ad20dcb30aa95bbdfe31265875e8efe8cac86b1d Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Mon, 5 Oct 2020 10:03:19 +0200 Subject: [PATCH 0822/1047] 14a - less wake up wait --- armsrc/iso14443a.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/armsrc/iso14443a.c b/armsrc/iso14443a.c index 6ada61171..6cd7c9525 100644 --- a/armsrc/iso14443a.c +++ b/armsrc/iso14443a.c @@ -2687,7 +2687,7 @@ void iso14443a_setup(uint8_t fpga_minor_mode) { LED_D_ON(); FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_ISO14443A | fpga_minor_mode); - SpinDelay(100); + SpinDelay(50); // Start the timer StartCountSspClk(); From 4eef1f1bff3c1494eb9a9ddd96beea135ea140d1 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Mon, 5 Oct 2020 10:07:16 +0200 Subject: [PATCH 0823/1047] Trim: GraphPixelsPerPoint mush remain a power of zoom_offset --- client/src/proxguiqt.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/client/src/proxguiqt.cpp b/client/src/proxguiqt.cpp index 0e791d77a..15b96a16a 100644 --- a/client/src/proxguiqt.cpp +++ b/client/src/proxguiqt.cpp @@ -689,13 +689,19 @@ void Plot::Move(int offset) { void Plot::Trim(void) { uint32_t lref, rref; + const double zoom_offset = 1.148698354997035; // 2**(1/5) if ((CursorAPos == 0) || (CursorBPos == 0)) { // if we don't have both cursors set lref = GraphStart; rref = GraphStop; } else { lref = CursorAPos < CursorBPos ? CursorAPos : CursorBPos; rref = CursorAPos < CursorBPos ? CursorBPos : CursorAPos; - GraphPixelsPerPoint = GraphPixelsPerPoint * (GraphStop - GraphStart) / (rref - lref); + // GraphPixelsPerPoint mush remain a power of zoom_offset + double GPPPtarget = GraphPixelsPerPoint * (GraphStop - GraphStart) / (rref - lref); + while (GraphPixelsPerPoint < GPPPtarget) { + GraphPixelsPerPoint *= zoom_offset; + } + GraphPixelsPerPoint /= zoom_offset; CursorAPos -= lref; CursorBPos -= lref; } From 24ec1944283f56fa0d28d1074092023ed57fc406 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Mon, 5 Oct 2020 10:29:20 +0200 Subject: [PATCH 0824/1047] 14b raw -add CLEARTRACE --- include/iso14b.h | 1 + 1 file changed, 1 insertion(+) diff --git a/include/iso14b.h b/include/iso14b.h index e1baf231a..4be7a8753 100644 --- a/include/iso14b.h +++ b/include/iso14b.h @@ -38,6 +38,7 @@ typedef enum ISO14B_COMMAND { ISO14B_SET_TIMEOUT = (1 << 8), ISO14B_SEND_CHAINING = (1 << 9), ISO14B_SELECT_CTS = (1 << 10), + ISO14B_CLEARTRACE = (1 << 11), } iso14b_command_t; #endif // _ISO14B_H_ \ No newline at end of file From f6640966edb82ed58afa77124cf732eaa37eb121 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Mon, 5 Oct 2020 10:31:53 +0200 Subject: [PATCH 0825/1047] coverity 303194 --- client/src/cmdhfst.c | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) diff --git a/client/src/cmdhfst.c b/client/src/cmdhfst.c index ff2b682bc..78b3006ef 100644 --- a/client/src/cmdhfst.c +++ b/client/src/cmdhfst.c @@ -325,8 +325,8 @@ static int cmd_hf_st_sim(const char *Cmd) { arg_param_end }; CLIExecWithReturn(ctx, Cmd, argtable, false); - CLIGetHexWithReturn(ctx, 1, uid, &uidlen); + CLIParserFree(ctx); if (uidlen != 7) { PrintAndLogEx(ERR, "UID must be 7 hex bytes"); @@ -350,12 +350,12 @@ static int cmd_hf_st_ndef(const char *Cmd) { void *argtable[] = { arg_param_begin, - arg_str0("p", "password", "", "16 byte read password"), + arg_str0("p", "pwd", "", "16 byte read password"), arg_param_end }; CLIExecWithReturn(ctx, Cmd, argtable, true); - CLIGetHexWithReturn(ctx, 1, pwd, &pwdlen); + CLIParserFree(ctx); if (pwdlen == 0) { with_pwd = false; @@ -483,13 +483,10 @@ static int cmd_hf_st_protect(const char *Cmd) { disable_protection = arg_get_lit(ctx, 2); read_protection = arg_get_lit(ctx, 3); write_protection = arg_get_lit(ctx, 4); - CLIGetHexWithReturn(ctx, 5, pwd, &pwdlen); - CLIParserFree(ctx); //Validations - if (enable_protection && disable_protection) { PrintAndLogEx(ERR, "Must specify either enable or disable protection, not both"); return PM3_EINVARG; @@ -625,14 +622,12 @@ static int cmd_hf_st_pwd(const char *Cmd) { change_read_password = arg_get_lit(ctx, 1); change_write_password = arg_get_lit(ctx, 2); - CLIGetHexWithReturn(ctx, 3, pwd, &pwdlen); - CLIGetHexWithReturn(ctx, 4, newpwd, &newpwdlen); - + CLIParserFree(ctx); + if (change_read_password && change_write_password) { PrintAndLogEx(ERR, "Must specify either read or write, not both"); - CLIParserFree(ctx); return PM3_EINVARG; } else { if (change_read_password) { @@ -643,8 +638,6 @@ static int cmd_hf_st_pwd(const char *Cmd) { } } - CLIParserFree(ctx); - if (pwdlen != 16) { PrintAndLogEx(ERR, "Original write password must be 16 hex bytes"); return PM3_EINVARG; @@ -727,9 +720,7 @@ static int cmd_hf_st_pwd(const char *Cmd) { return PM3_ESOFT; } PrintAndLogEx(SUCCESS, " %s password changed", ((changePwd[2] & 0x01) == 0x01) ? _YELLOW_("read") : _YELLOW_("write")); - return PM3_SUCCESS; - } static int cmd_hf_st_list(const char *Cmd) { From 7dcc4a2a7689e4e308075f8b779110f75e77396a Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Mon, 5 Oct 2020 10:33:34 +0200 Subject: [PATCH 0826/1047] renamed a fault param, starting to adapt 14b raw to deal with different selects and not clearing trace. --- client/src/cmdhf14b.c | 75 +++++++++++++++++++++++++++++++------------ 1 file changed, 54 insertions(+), 21 deletions(-) diff --git a/client/src/cmdhf14b.c b/client/src/cmdhf14b.c index 5532c5440..542dc3aec 100644 --- a/client/src/cmdhf14b.c +++ b/client/src/cmdhf14b.c @@ -63,7 +63,7 @@ static uint16_t get_sw(uint8_t *d, uint8_t n) { return d[n] * 0x0100 + d[n + 1]; } -static bool wait_cmd_14b(bool verbose) { +static bool wait_cmd_14b(bool verbose, bool is_select) { PacketResponseNG resp; if (WaitForResponseTimeout(CMD_HF_ISO14443B_COMMAND, &resp, TIMEOUT)) { @@ -71,6 +71,23 @@ static bool wait_cmd_14b(bool verbose) { uint16_t len = (resp.oldarg[1] & 0xFFFF); uint8_t *data = resp.data.asBytes; + // handle select responses + if (is_select) { + + // 0: OK; -1: attrib fail; -2:crc fail + int status = (int)resp.oldarg[0]; + if (status == 0) { + + if (verbose) { + PrintAndLogEx(SUCCESS, "len %u | %s", len, sprint_hex(data, len)); + } + return true; + } else { + return false; + } + } + + // handle raw bytes responses if (verbose) { if (len >= 3) { @@ -121,12 +138,14 @@ static int CmdHF14BSim(const char *Cmd) { uint8_t pupi[4]; int n = 0; - CLIParamHexToBuf(arg_get_str(ctx, 1), pupi, sizeof(pupi), &n); + int res = CLIParamHexToBuf(arg_get_str(ctx, 1), pupi, sizeof(pupi), &n); + if (res) { + PrintAndLogEx(FAILED, "failed to read pupi"); + return PM3_EINVARG; + } CLIParserFree(ctx); - clearCommandBuffer(); - SendCommandNG(CMD_HF_ISO14443B_SIMULATE, pupi, sizeof(pupi)); - + SendCommandNG(CMD_HF_ISO14443B_SIMULATE, pupi, sizeof(pupi)); return PM3_SUCCESS; } @@ -181,7 +200,6 @@ static int CmdHF14BCmdRaw(const char *Cmd) { }; CLIExecWithReturn(ctx, Cmd, argtable, false); - bool select = false; bool keep_field_on = arg_get_lit(ctx, 1); bool select_std = arg_get_lit(ctx, 2); bool select_sr = arg_get_lit(ctx, 3); @@ -197,25 +215,25 @@ static int CmdHF14BCmdRaw(const char *Cmd) { } if (select_std) { - select = true; - flags |= ISO14B_SELECT_STD; + flags |= (ISO14B_SELECT_STD | ISO14B_CLEARTRACE); if (verbose) PrintAndLogEx(INFO, "using standard select"); } else if (select_sr) { - select = true; - flags |= ISO14B_SELECT_SR; + flags |= (ISO14B_SELECT_SR | ISO14B_CLEARTRACE); if (verbose) - PrintAndLogEx(INFO, "using SRx ST select"); + PrintAndLogEx(INFO, "using ST/SRx select"); } else if (select_cts) { - select = true; - flags |= ISO14B_SELECT_CTS; + flags |= (ISO14B_SELECT_CTS | ISO14B_CLEARTRACE); if (verbose) - PrintAndLogEx(INFO, "using ASK C-ticket select"); + PrintAndLogEx(INFO, "using ASK/C-ticket select"); } uint8_t data[PM3_CMD_DATA_SIZE] = {0x00}; int datalen = 0; - CLIParamHexToBuf(arg_get_str(ctx, 9), data, sizeof(data), &datalen); + int res = CLIParamHexToBuf(arg_get_str(ctx, 9), data, sizeof(data), &datalen); + if (res && verbose) { + PrintAndLogEx(INFO, "called with no raw bytes"); + } CLIParserFree(ctx); uint32_t time_wait = 0; @@ -244,18 +262,33 @@ static int CmdHF14BCmdRaw(const char *Cmd) { clearCommandBuffer(); SendCommandMIX(CMD_HF_ISO14443B_COMMAND, flags, datalen, time_wait, data, datalen); if (read_reply == false) { + clearCommandBuffer(); return PM3_SUCCESS; } - bool success = true; - // get back iso14b_card_select_t, don't print it. - if (select) { - success = wait_cmd_14b(verbose); + bool success = true; + // Select, device will send back iso14b_card_select_t, don't print it. + if (select_std) { + success = wait_cmd_14b(verbose, true); + if (verbose && success) + PrintAndLogEx(SUCCESS, "Got response for standard select"); + } + + if (select_sr) { + success = wait_cmd_14b(verbose, true); + if (verbose && success) + PrintAndLogEx(SUCCESS, "Got response for ST/SRx select"); + } + + if (select_cts) { + success = wait_cmd_14b(verbose, true); + if (verbose && success) + PrintAndLogEx(SUCCESS, "Got response for ASK/C-ticket select"); } // get back response from the raw bytes you sent. if (success && datalen > 0) { - wait_cmd_14b(true); + wait_cmd_14b(true, false); } return PM3_SUCCESS; @@ -1539,7 +1572,7 @@ static int CmdHF14BAPDU(const char *Cmd) { arg_str0("m", "make", "", "make apdu with head from this field and data from data field. Must be 4 bytes length: "), arg_lit0("e", "extended", "make extended length apdu if `m` parameter included"), arg_int0("l", "le", "", "Le apdu parameter if `m` parameter included"), - arg_strx1("h", "hex", "", " if `m` parameter included"), + arg_strx1(NULL, "hex", "", " if `m` parameter included"), arg_param_end }; CLIExecWithReturn(ctx, Cmd, argtable, false); From 128fdd82e2b5c34f3e65402a54e8ff1d7468e416 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Mon, 5 Oct 2020 12:12:18 +0200 Subject: [PATCH 0827/1047] text --- client/src/cmddata.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/src/cmddata.c b/client/src/cmddata.c index cdbf1f04b..faeba709d 100644 --- a/client/src/cmddata.c +++ b/client/src/cmddata.c @@ -1906,8 +1906,8 @@ static int CmdScale(const char *Cmd) { "Setting the scale makes the differential `dt` reading between the yellow and purple markers meaningful.\n" "once the scale is set, the differential reading between brackets can become a time duration.", "data scale --sr 125 -u ms -> for LF sampled at 125 kHz. Reading will be in milliseconds\n" - "data scale --sr 1.695 -u us -> for HF sampled at 1.695 MHz. Reading will be in microseconds\n" - "data scale --sr 16 -u ETU -> for HF with 16 samples per ETU. Reading will be in ETUs" + "data scale --sr 1.695 -u us -> for HF sampled at 16 * fc/128. Reading will be in microseconds\n" + "data scale --sr 16 -u ETU -> for HF with 16 samples per ETU (fc/128). Reading will be in ETUs" ); void *argtable[] = { arg_param_begin, From 1f2133fa178c127d3dae4ca7fc3c93f6fa80b521 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Mon, 5 Oct 2020 12:16:19 +0200 Subject: [PATCH 0828/1047] zoom: add ctrl for small increments with key, to get same as with wheel --- client/src/proxguiqt.cpp | 45 +++++++++++++++++++++++++++++----------- client/src/proxguiqt.h | 2 +- 2 files changed, 34 insertions(+), 13 deletions(-) diff --git a/client/src/proxguiqt.cpp b/client/src/proxguiqt.cpp index 15b96a16a..089b2eb93 100644 --- a/client/src/proxguiqt.cpp +++ b/client/src/proxguiqt.cpp @@ -647,19 +647,23 @@ void Plot::closeEvent(QCloseEvent *event) { g_useOverlays = false; } -void Plot::Zoom(double factor, int refX) { +void Plot::Zoom(double factor, uint32_t refX) { if (factor >= 1) { // Zoom in if (GraphPixelsPerPoint <= 25 * factor) { GraphPixelsPerPoint *= factor; - GraphStart += (refX - GraphStart) - ((refX - GraphStart) / factor); + if (refX > GraphStart) { + GraphStart += (refX - GraphStart) - ((refX - GraphStart) / factor); + } } } else { // Zoom out if (GraphPixelsPerPoint >= 0.01 / factor) { GraphPixelsPerPoint *= factor; - if (GraphStart >= ((refX - GraphStart) / factor) - (refX - GraphStart)) { - GraphStart -= ((refX - GraphStart) / factor) - (refX - GraphStart); - } else { - GraphStart = 0; + if (refX > GraphStart) { + if (GraphStart >= ((refX - GraphStart) / factor) - (refX - GraphStart)) { + GraphStart -= ((refX - GraphStart) / factor) - (refX - GraphStart); + } else { + GraphStart = 0; + } } } } @@ -722,9 +726,9 @@ void Plot::wheelEvent(QWheelEvent *event) { if (event->modifiers() & Qt::ShiftModifier) { // event->position doesn't exist in QT5.12.8, both exist in 5.14.2 and event->x doesn't exist in 5.15.0 #if QT_VERSION >= 0x050d00 - int x = event->position().x(); + uint32_t x = event->position().x(); #else - int x = event->x(); + uint32_t x = event->x(); #endif x -= WIDTH_AXES; x = (int)(x / GraphPixelsPerPoint); @@ -765,6 +769,7 @@ void Plot::mouseMoveEvent(QMouseEvent *event) { void Plot::keyPressEvent(QKeyEvent *event) { uint32_t offset; // Left/right movement offset (in sample size) + const double zoom_offset = 1.148698354997035; // 2**(1/5) if (event->modifiers() & Qt::ShiftModifier) { if (PlotGridX) @@ -781,17 +786,33 @@ void Plot::keyPressEvent(QKeyEvent *event) { switch (event->key()) { case Qt::Key_Down: if (event->modifiers() & Qt::ShiftModifier) { - Zoom(2, CursorBPos); + if (event->modifiers() & Qt::ControlModifier) { + Zoom(zoom_offset, CursorBPos); + } else { + Zoom(2, CursorBPos); + } } else { - Zoom(2, CursorAPos); + if (event->modifiers() & Qt::ControlModifier) { + Zoom(zoom_offset, CursorAPos); + } else { + Zoom(2, CursorAPos); + } } break; case Qt::Key_Up: if (event->modifiers() & Qt::ShiftModifier) { - Zoom(0.5, CursorBPos); + if (event->modifiers() & Qt::ControlModifier) { + Zoom(1.0/zoom_offset, CursorBPos); + } else { + Zoom(0.5, CursorBPos); + } } else { - Zoom(0.5, CursorAPos); + if (event->modifiers() & Qt::ControlModifier) { + Zoom(1.0/zoom_offset, CursorAPos); + } else { + Zoom(0.5, CursorAPos); + } } break; diff --git a/client/src/proxguiqt.h b/client/src/proxguiqt.h index 49a69454f..168b1b9eb 100644 --- a/client/src/proxguiqt.h +++ b/client/src/proxguiqt.h @@ -51,7 +51,7 @@ class Plot: public QWidget { protected: void paintEvent(QPaintEvent *event); void closeEvent(QCloseEvent *event); - void Zoom(double factor, int refX); + void Zoom(double factor, uint32_t refX); void Move(int offset); void Trim(void); void wheelEvent(QWheelEvent *event); From 7051941525ad1a95c6a6d4e160f34dcfc50957cc Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Mon, 5 Oct 2020 12:27:52 +0200 Subject: [PATCH 0829/1047] colored plot help --- client/src/proxguiqt.cpp | 56 +++++++++++++++++++--------------------- 1 file changed, 26 insertions(+), 30 deletions(-) diff --git a/client/src/proxguiqt.cpp b/client/src/proxguiqt.cpp index 089b2eb93..02a9b4c7b 100644 --- a/client/src/proxguiqt.cpp +++ b/client/src/proxguiqt.cpp @@ -840,36 +840,32 @@ void Plot::keyPressEvent(QKeyEvent *event) { break; case Qt::Key_H: - puts("\n-----------------------------------------------------------------------"); - puts("PLOT window keystrokes"); - puts("\tKey Action"); - puts("-----------------------------------------------------------------------"); - puts("\tUP Zoom out around yellow cursor"); - puts("\t UP Zoom out around purple cursor"); - puts("\t WHEEL MOUSE UP Zoom out around mouse cursor"); - puts("\tDOWN Zoom in around yellow cursor"); - puts("\t DOWN Zoom in around purple cursor"); - puts("\t WHEEL MOUSE DOWN Zoom in around mouse cursor"); - puts("\tG Toggle grid display"); - puts("\tH Show help"); - puts("\tL Toggle lock grid relative to samples"); - puts("\tQ Hide window"); - puts("\tT Trim data on displayed window or on cursors if defined"); - puts("\tHOME Move to the start of the graph"); - puts("\tEND Move to the end of the graph"); - puts("\tPGUP Page left"); - puts("\tPGDOWN Page right"); - puts("\tLEFT Move left"); - puts("\tRIGHT Move right"); - puts("\tWHEEL MOUSE UP Move left"); - puts("\tWHEEL MOUSE DOWN Move right"); - puts("\t LEFT Move left 1 sample"); - puts("\t RIGHT Move right 1 sample"); - puts("\t LEFT Page left"); - puts("\t RIGHT Page right"); - puts("\tLEFT MOUSE CLICK Set yellow cursor"); - puts("\tRIGHT MOUSE CLICK Set purple cursor"); - puts("-----------------------------------------------------------------------"); + g_printAndLog = PRINTANDLOG_PRINT; + PrintAndLogEx(NORMAL, "\n\n" _CYAN_("PLOT window keystrokes and mouse events")); + PrintAndLogEx(NORMAL, "\n" _GREEN_("Move:")); + PrintAndLogEx(NORMAL, " %-*s%s", 25+9+9, _RED_("Home") "/" _RED_("End"), "Move to the start/end of the graph"); + PrintAndLogEx(NORMAL, " %-*s%s", 25+9, _YELLOW_("Mouse wheel"), "Move left/right"); + PrintAndLogEx(NORMAL, " %-*s%s", 25+9+9, _RED_("Left") "/" _RED_("Right"), "Move left/right"); + PrintAndLogEx(NORMAL, " %-*s%s", 25+9, " + " _RED_("Ctrl"), "... by 1 sample"); + PrintAndLogEx(NORMAL, " %-*s%s", 25+9, " + " _RED_("Shift"), "... by 1 window"); + PrintAndLogEx(NORMAL, " %-*s%s", 25+9+9, _RED_("PgUp") "/" _RED_("PgDown"), "Move left/right by 1 window"); + PrintAndLogEx(NORMAL, "\n" _GREEN_("Zoom:")); + PrintAndLogEx(NORMAL, " %-*s%s", 25+9+9, _RED_("Shift") " + " _YELLOW_("Mouse wheel"), "Zoom in/out around mouse cursor"); + PrintAndLogEx(NORMAL, " %-*s%s", 25+9+9, _RED_("Down") "/" _RED_("Up"), "Zoom in/out around yellow cursor"); + PrintAndLogEx(NORMAL, " %-*s%s", 25+9, " + " _RED_("Ctrl"), "... with smaller increment"); + PrintAndLogEx(NORMAL, " %-*s%s", 25+9, " + " _RED_("Shift"), "... around purple cursor"); + PrintAndLogEx(NORMAL, " %-*s%s", 25+9, _RED_("h"), "Show this help"); + PrintAndLogEx(NORMAL, "\n" _GREEN_("Trim:")); + PrintAndLogEx(NORMAL, " %-*s%s", 25+9, _RED_("t"), "Trim data on window or on cursors if defined"); + PrintAndLogEx(NORMAL, "\n" _GREEN_("Grid:")); + PrintAndLogEx(NORMAL, " %-*s%s", 25+9, _RED_("g"), "Toggle grid display"); + PrintAndLogEx(NORMAL, " %-*s%s", 25+9, _RED_("l"), "Toggle lock grid relative to samples"); + PrintAndLogEx(NORMAL, "\n" _GREEN_("Misc:")); + PrintAndLogEx(NORMAL, " %-*s%s", 25+9, _YELLOW_("Left mouse click"), "Set yellow cursor"); + PrintAndLogEx(NORMAL, " %-*s%s", 25+9, _YELLOW_("Right mouse click"), "Set purple cursor"); + PrintAndLogEx(NORMAL, " %-*s%s", 25+9, _RED_("h"), "Show this help"); + PrintAndLogEx(NORMAL, " %-*s%s", 25+9, _RED_("q"), "Close plot window"); + g_printAndLog = PRINTANDLOG_PRINT | PRINTANDLOG_LOG; break; case Qt::Key_L: From f7f4ce1fb730d099e2ac3aef6b15ba4916fcda82 Mon Sep 17 00:00:00 2001 From: Gator96100 Date: Mon, 5 Oct 2020 12:35:10 +0200 Subject: [PATCH 0830/1047] Enabled debug output --- appveyor.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index 8586bb48a..28ced036e 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -2,7 +2,7 @@ version: 3.0.1.{build} image: Visual Studio 2019 clone_folder: C:\ProxSpace\pm3\proxmark cache: - - C:\cache -> appveyor.yml + - C:\cache environment: proxspace_url: https://github.com/Gator96100/ProxSpace/archive/master.zip proxspace_zip_file: \proxspace.zip @@ -156,6 +156,7 @@ install: Start-Sleep -s 5 Receive-Job -Name WSLInstall } + Receive-Job -Wait -Name PSInstall } Function GitClone($Text, $Folder) { From f157fac2fb036059275d00bc8c2e7425d1194a5e Mon Sep 17 00:00:00 2001 From: mwalker33 Date: Mon, 5 Oct 2020 21:19:09 +1100 Subject: [PATCH 0831/1047] Add option to hide/show plot sliders --- client/Makefile | 9 +++++ client/src/preferences.c | 76 +++++++++++++++++++++++++++++++++++++++- client/src/proxguiqt.cpp | 11 ++++-- client/src/ui.h | 1 + 4 files changed, 94 insertions(+), 3 deletions(-) diff --git a/client/Makefile b/client/Makefile index 29fb4462e..ba7802bbf 100644 --- a/client/Makefile +++ b/client/Makefile @@ -299,6 +299,15 @@ endif CXXFLAGS ?= -Wall -Werror -O3 PM3CXXFLAGS = $(CXXFLAGS) PM3CXXFLAGS += -I../include +ifneq (,$(findstring MINGW,$(platform))) + # Mingw uses by default Microsoft printf, we want the GNU printf (e.g. for %z) + # and setting _ISOC99_SOURCE sets internally __USE_MINGW_ANSI_STDIO=1 + # FTR __USE_MINGW_ANSI_STDIO seems deprecated in Mingw32 + # but not Mingw64 https://fr.osdn.net/projects/mingw/lists/archive/users/2019-January/000199.html + PM3CXXFLAGS += -D_ISOC99_SOURCE +endif + + ifeq ($(QT_FOUND),1) PM3CFLAGS += -DHAVE_GUI diff --git a/client/src/preferences.c b/client/src/preferences.c index 40a93a948..5865bac8b 100644 --- a/client/src/preferences.c +++ b/client/src/preferences.c @@ -52,6 +52,7 @@ int preferences_load(void) { session.overlay.y = 60 + session.plot.y + session.plot.h; session.overlay.h = 200; session.overlay.w = session.plot.w; + session.overlay_sliders = true; session.show_hints = false; // setDefaultPath (spDefault, ""); @@ -185,6 +186,7 @@ void preferences_save_callback(json_t *root) { JsonSaveInt(root, "window.overlay.ypos", session.overlay.y); JsonSaveInt(root, "window.overlay.hsize", session.overlay.h); JsonSaveInt(root, "window.overlay.wsize", session.overlay.w); + JsonSaveBoolean(root, "window.overlay.sliders", session.overlay_sliders); // Log level, convert to text switch (session.client_debug_level) { @@ -270,6 +272,8 @@ void preferences_load_callback(json_t *root) { session.overlay.h = i1; if (json_unpack_ex(root, &up_error, 0, "{s:i}", "window.overlay.wsize", &i1) == 0) session.overlay.w = i1; + if (json_unpack_ex(root, &up_error, 0, "{s:b}", "window.overlay.sliders", &b1) == 0) + session.overlay_sliders = b1; // show options if (json_unpack_ex(root, &up_error, 0, "{s:s}", "show.emoji", &s1) == 0) { @@ -353,6 +357,16 @@ static int usage_set_hints(void) { PrintAndLogEx(NORMAL, " "_GREEN_("on")" - Display hints"); return PM3_SUCCESS; } + +static int usage_set_plotsliders(void) { + PrintAndLogEx(NORMAL, "Usage: pref set plotsliders "); + PrintAndLogEx(NORMAL, "Options:"); + PrintAndLogEx(NORMAL, " "_GREEN_("help")" - This help"); + PrintAndLogEx(NORMAL, " "_GREEN_("on")" - show plot slider controls"); + PrintAndLogEx(NORMAL, " "_GREEN_("off")" - hide plot slider controls"); + return PM3_SUCCESS; +} + /* static int usage_set_savePaths(void) { PrintAndLogEx(NORMAL, "Usage: pref set savepaths [help] [create] [default ] [dump ] [trace ]"); @@ -492,6 +506,13 @@ static void showHintsState(prefShowOpt_t opt) { PrintAndLogEx(INFO, " %s hints.................. "_WHITE_("off"), prefShowMsg(opt)); } +static void showPlotSliderState(prefShowOpt_t opt) { + if (session.overlay_sliders) + PrintAndLogEx(INFO, " %s show plot sliders...... "_GREEN_("on"), prefShowMsg(opt)); + else + PrintAndLogEx(INFO, " %s show plot sliders...... "_WHITE_("off"), prefShowMsg(opt)); +} + static int setCmdEmoji(const char *Cmd) { uint8_t cmdp = 0; @@ -755,6 +776,52 @@ static int setCmdHint(const char *Cmd) { return PM3_SUCCESS; } +static int setCmdPlotSliders(const char *Cmd) { + uint8_t cmdp = 0; + bool errors = false; + bool validValue = false; + char strOpt[50]; + bool newValue = session.overlay_sliders; + + if (param_getchar(Cmd, cmdp) == 0x00) + return usage_set_plotsliders(); + + while ((param_getchar(Cmd, cmdp) != 0x00) && !errors) { + + if (param_getstr(Cmd, cmdp++, strOpt, sizeof(strOpt)) != 0) { + str_lower(strOpt); // convert to lowercase + + if (strncmp(strOpt, "help", 4) == 0) + return usage_set_plotsliders(); + if (strncmp(strOpt, "off", 3) == 0) { + validValue = true; + newValue = false; + } + if (strncmp(strOpt, "on", 2) == 0) { + validValue = true; + newValue = true; + } + + if (validValue) { + if (session.overlay_sliders != newValue) {// changed + showPlotSliderState(prefShowOLD); + session.overlay_sliders = newValue; + showPlotSliderState(prefShowNEW); + preferences_save(); + } else { + PrintAndLogEx(INFO, "nothing changed"); + showPlotSliderState(prefShowNone); + } + } else { + PrintAndLogEx(ERR, "invalid option"); + return usage_set_plotsliders(); + } + } + } + + return PM3_SUCCESS; +} + /* static int setCmdSavePaths (const char *Cmd) { uint8_t cmdp = 0; @@ -866,6 +933,11 @@ static int getCmdDebug(const char *Cmd) { return PM3_SUCCESS; } +static int getCmdPlotSlider(const char *Cmd) { + showPlotSliderState(prefShowNone); + return PM3_SUCCESS; +} + static command_t getCommandTable[] = { // {"help", getCmdHelp, AlwaysAvailable, "This help"}, {"emoji", getCmdEmoji, AlwaysAvailable, "Get emoji display preference"}, @@ -873,6 +945,7 @@ static command_t getCommandTable[] = { {"color", getCmdColor, AlwaysAvailable, "Get color support preference"}, // {"defaultsavepaths", getCmdSavePaths, AlwaysAvailable, "... to be adjusted next ... "}, {"clientdebug", getCmdDebug, AlwaysAvailable, "Get client debug level preference"}, + {"plotsliders", getCmdPlotSlider, AlwaysAvailable, "Get plot slider display preference"}, // {"devicedebug", getCmdDeviceDebug, AlwaysAvailable, "Get device debug level"}, {NULL, NULL, NULL, NULL} }; @@ -884,6 +957,7 @@ static command_t setCommandTable[] = { {"color", setCmdColor, AlwaysAvailable, "Set color support"}, // {"defaultsavepaths", setCmdSavePaths, AlwaysAvailable, "... to be adjusted next ... "}, {"clientdebug", setCmdDebug, AlwaysAvailable, "Set client debug level"}, + {"plotsliders",setCmdPlotSliders, AlwaysAvailable, "Set plot slider display"}, // {"devicedebug", setCmdDeviceDebug, AlwaysAvailable, "Set device debug level"}, {NULL, NULL, NULL, NULL} }; @@ -925,8 +999,8 @@ static int CmdPrefShow(const char *Cmd) { // showSavePathState(spDefault, prefShowNone); // showSavePathState(spDump, prefShowNone); // showSavePathState(spTrace, prefShowNone); - showClientDebugState(prefShowNone); + showPlotSliderState(prefShowNone); // showDeviceDebugState(prefShowNone); PrintAndLogEx(NORMAL, ""); return PM3_SUCCESS; diff --git a/client/src/proxguiqt.cpp b/client/src/proxguiqt.cpp index 02a9b4c7b..a40e751be 100644 --- a/client/src/proxguiqt.cpp +++ b/client/src/proxguiqt.cpp @@ -7,6 +7,7 @@ //----------------------------------------------------------------------------- // GUI (QT) //----------------------------------------------------------------------------- +#define __STDC_FORMAT_MACROS #include "proxguiqt.h" #include #include @@ -251,7 +252,8 @@ ProxWidget::ProxWidget(QWidget *parent, ProxGuiQT *master) : QWidget(parent) { QString ct = QString("[*]Slider [ %1 ]").arg(conn.serial_port_name); controlWidget->setWindowTitle(ct); - controlWidget->show(); + // The hide/show event functions should take care of this. + // controlWidget->show(); // now that is up, reset pos/size change flags session.window_changed = false; @@ -289,7 +291,10 @@ void ProxWidget::hideEvent(QHideEvent *event) { plot->hide(); } void ProxWidget::showEvent(QShowEvent *event) { - controlWidget->show(); + if (session.overlay_sliders) + controlWidget->show(); + else + controlWidget->hide(); plot->show(); } void ProxWidget::moveEvent(QMoveEvent *event) { @@ -485,6 +490,8 @@ void Plot::PlotGraph(int *buffer, size_t len, QRect plotRect, QRect annotationRe //Graph annotations painter->drawPath(penPath); char str[200]; +// sprintf(str, "max=%d min=%d mean=%llu n=%u/%zu CursorAVal=[%d] CursorBVal=[%d]", +// vMax, vMin, vMean, GraphStop - GraphStart, len, buffer[CursorAPos], buffer[CursorBPos]); sprintf(str, "max=%d min=%d mean=%" PRId64 " n=%u/%zu CursorAVal=[%d] CursorBVal=[%d]", vMax, vMin, vMean, GraphStop - GraphStart, len, buffer[CursorAPos], buffer[CursorBPos]); painter->drawText(20, annotationRect.bottom() - 23 - 20 * graphNum, str); diff --git a/client/src/ui.h b/client/src/ui.h index f19f2024a..66f6df279 100644 --- a/client/src/ui.h +++ b/client/src/ui.h @@ -40,6 +40,7 @@ typedef struct { bool window_changed; // track if plot/overlay pos/size changed to save on exit qtWindow_t plot; qtWindow_t overlay; + bool overlay_sliders; // char *defaultPaths[spItemCount]; // Array should allow loop searching for files clientdebugLevel_t client_debug_level; // uint8_t device_debug_level; From 3286bdaad22a011fd6b866e14a5e047b47d68e87 Mon Sep 17 00:00:00 2001 From: mwalker33 Date: Mon, 5 Oct 2020 21:28:20 +1100 Subject: [PATCH 0832/1047] Update Makefile Restore the original client makefile --- client/Makefile | 9 --------- 1 file changed, 9 deletions(-) diff --git a/client/Makefile b/client/Makefile index ba7802bbf..29fb4462e 100644 --- a/client/Makefile +++ b/client/Makefile @@ -299,15 +299,6 @@ endif CXXFLAGS ?= -Wall -Werror -O3 PM3CXXFLAGS = $(CXXFLAGS) PM3CXXFLAGS += -I../include -ifneq (,$(findstring MINGW,$(platform))) - # Mingw uses by default Microsoft printf, we want the GNU printf (e.g. for %z) - # and setting _ISOC99_SOURCE sets internally __USE_MINGW_ANSI_STDIO=1 - # FTR __USE_MINGW_ANSI_STDIO seems deprecated in Mingw32 - # but not Mingw64 https://fr.osdn.net/projects/mingw/lists/archive/users/2019-January/000199.html - PM3CXXFLAGS += -D_ISOC99_SOURCE -endif - - ifeq ($(QT_FOUND),1) PM3CFLAGS += -DHAVE_GUI From 702e9b774edc65bc4c7918063f710001ae6ec899 Mon Sep 17 00:00:00 2001 From: mwalker33 Date: Mon, 5 Oct 2020 21:32:00 +1100 Subject: [PATCH 0833/1047] Update proxguiqt.cpp Removed comment test sprintf --- client/src/proxguiqt.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/client/src/proxguiqt.cpp b/client/src/proxguiqt.cpp index a40e751be..397ef3560 100644 --- a/client/src/proxguiqt.cpp +++ b/client/src/proxguiqt.cpp @@ -490,8 +490,6 @@ void Plot::PlotGraph(int *buffer, size_t len, QRect plotRect, QRect annotationRe //Graph annotations painter->drawPath(penPath); char str[200]; -// sprintf(str, "max=%d min=%d mean=%llu n=%u/%zu CursorAVal=[%d] CursorBVal=[%d]", -// vMax, vMin, vMean, GraphStop - GraphStart, len, buffer[CursorAPos], buffer[CursorBPos]); sprintf(str, "max=%d min=%d mean=%" PRId64 " n=%u/%zu CursorAVal=[%d] CursorBVal=[%d]", vMax, vMin, vMean, GraphStop - GraphStart, len, buffer[CursorAPos], buffer[CursorBPos]); painter->drawText(20, annotationRect.bottom() - 23 - 20 * graphNum, str); From fbec6b0c358d6a720e5b2cfa3dd5872aaaf44ca9 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Mon, 5 Oct 2020 12:58:33 +0200 Subject: [PATCH 0834/1047] puts -> printandlog --- client/src/cmdscript.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/src/cmdscript.c b/client/src/cmdscript.c index bb2ee72dc..40c4f3aa6 100644 --- a/client/src/cmdscript.c +++ b/client/src/cmdscript.c @@ -292,7 +292,7 @@ static int CmdScriptRun(const char *Cmd) { // get the top of the stack as the error and pop it off const char *str = lua_tostring(lua_state, lua_gettop(lua_state)); lua_pop(lua_state, 1); - puts(str); + PrintAndLogEx(FAILED, _RED_("error") " - %s", str); } //luaL_dofile(lua_state, buf); From 91c9136347bf25afba3e4b1cae9bca4e97de8be3 Mon Sep 17 00:00:00 2001 From: Gator96100 Date: Mon, 5 Oct 2020 13:18:18 +0200 Subject: [PATCH 0835/1047] Moved cache creation to on_finish --- appveyor.yml | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 28ced036e..cff59e737 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -265,16 +265,6 @@ build_script: #ProxSpace - Write-Host "ProxSpace: create new cache..." -NoNewLine - - ExecMinGWCmd 'yes | pacman -Sc > /dev/null 2>&1' - - Remove-Item -Recurse -Force -Path "$env:proxspace_cache_path" -ErrorAction SilentlyContinue - - Move-Item -Path "$env:proxspace_path\msys2\var\cache" -Destination "$env:proxspace_cache_path" -Force - - Write-Host "[ OK ]" -ForegroundColor Gree - Write-Host "---------- PS make ----------" -ForegroundColor Yellow $TestTime=[System.Environment]::TickCount @@ -333,4 +323,17 @@ on_success: on_failure: - ps: Write-Host "Build error." -ForegroundColor Red on_finish: -- ps: # $blockRdp = $true; iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1')) +- ps: >- + # $blockRdp = $true; iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1')) + + Write-Host "ProxSpace: create new cache..." -NoNewLine + + cd $env:proxspace_path + + ./runme64.bat -c "yes | pacman -Sc > /dev/null 2>&1" + + Remove-Item -Recurse -Force -Path "$env:proxspace_cache_path" -ErrorAction SilentlyContinue + + Move-Item -Path "$env:proxspace_path\msys2\var\cache" -Destination "$env:proxspace_cache_path" -Force + + Write-Host "[ OK ]" -ForegroundColor Gree From bc20c0e6fcf42312f67024e930808b281c7f1dd8 Mon Sep 17 00:00:00 2001 From: Gator96100 Date: Mon, 5 Oct 2020 13:23:15 +0200 Subject: [PATCH 0836/1047] WIP --- appveyor.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index cff59e737..7c99e48b4 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -324,8 +324,9 @@ on_failure: - ps: Write-Host "Build error." -ForegroundColor Red on_finish: - ps: >- - # $blockRdp = $true; iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1')) - + + # $blockRdp = $true; iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1')) + Write-Host "ProxSpace: create new cache..." -NoNewLine cd $env:proxspace_path @@ -337,3 +338,4 @@ on_finish: Move-Item -Path "$env:proxspace_path\msys2\var\cache" -Destination "$env:proxspace_cache_path" -Force Write-Host "[ OK ]" -ForegroundColor Gree + \ No newline at end of file From d5cc802e572fcc3f4fa3039782fa2ae475c9052c Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Mon, 5 Oct 2020 13:33:24 +0200 Subject: [PATCH 0837/1047] coverity 294394 --- client/src/cmdtrace.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/src/cmdtrace.c b/client/src/cmdtrace.c index 8f6a11949..75744f069 100644 --- a/client/src/cmdtrace.c +++ b/client/src/cmdtrace.c @@ -203,7 +203,7 @@ static uint16_t printTraceLine(uint16_t tracepos, uint16_t traceLen, uint8_t *tr data_len = hdr->data_len; if (tracepos + TRACELOG_HDR_LEN + data_len + TRACELOG_PARITY_LEN(hdr) > traceLen) { - PrintAndLogEx(DEBUG, "trace pos offset %"PRIu32 " larger than reported tracelen %u", tracepos + TRACELOG_HDR_LEN + data_len + TRACELOG_PARITY_LEN(hdr), traceLen); + PrintAndLogEx(DEBUG, "trace pos offset %"PRIu64 " larger than reported tracelen %u", tracepos + TRACELOG_HDR_LEN + data_len + TRACELOG_PARITY_LEN(hdr), traceLen); return traceLen; } From a5bd3d7c32cd38d4ecfbae5efd24e57998ab8f86 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Mon, 5 Oct 2020 13:36:17 +0200 Subject: [PATCH 0838/1047] coverity 303191 --- client/src/proxguiqt.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/client/src/proxguiqt.cpp b/client/src/proxguiqt.cpp index 397ef3560..8c0651b10 100644 --- a/client/src/proxguiqt.cpp +++ b/client/src/proxguiqt.cpp @@ -638,11 +638,12 @@ Plot::Plot(QWidget *parent) : QWidget(parent), GraphStart(0), GraphPixelsPerPoin palette.setColor(QPalette::Button, QColor(100, 100, 100)); setPalette(palette); setAutoFillBackground(true); + CursorAPos = 0; CursorBPos = 0; + GraphStop = 0; setWindowTitle(tr("Sliders")); - master = parent; } From d2e75de06e1fcc42476e6b048d5f30a8771ace53 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Mon, 5 Oct 2020 13:38:04 +0200 Subject: [PATCH 0839/1047] coverity 303195 --- client/src/cmdlfhid.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/client/src/cmdlfhid.c b/client/src/cmdlfhid.c index e7a45ed75..191733bf4 100644 --- a/client/src/cmdlfhid.c +++ b/client/src/cmdlfhid.c @@ -426,6 +426,7 @@ static int CmdHIDBrute(const char *Cmd) { format_idx = HIDFindCardFormat((char*) format); if (format_idx == -1) { PrintAndLogEx(WARNING, "Unknown format: " _YELLOW_("%s"), format); + CLIParserFree(ctx); return PM3_EINVARG; } @@ -435,6 +436,8 @@ static int CmdHIDBrute(const char *Cmd) { cn_hi.OEM = arg_get_int_def(ctx, 6, 0); delay = arg_get_int_def(ctx, 7, 1000); + CLIParserFree(ctx); + if (arg_get_lit(ctx, 8) && arg_get_lit(ctx, 9)) { direction = 0; } else if (arg_get_lit(ctx, 8)) { From 537a21b2faef9f725359ac4aa698b178d6f14bf3 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Mon, 5 Oct 2020 13:39:10 +0200 Subject: [PATCH 0840/1047] coverity 303199 --- client/src/cmdflashmem.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/src/cmdflashmem.c b/client/src/cmdflashmem.c index 1262b5645..274d9366b 100644 --- a/client/src/cmdflashmem.c +++ b/client/src/cmdflashmem.c @@ -459,7 +459,7 @@ static int CmdFlashMemInfo(const char *Cmd) { mbedtls_mpi_write_string(&rsa.E, 16, str_exp, sizeof(str_exp), &exlen); mbedtls_mpi_write_string(&rsa.N, 16, str_pk, sizeof(str_pk), &pklen); - PrintAndLogEx(INFO, "Len.................. %u", rsa.len); + PrintAndLogEx(INFO, "Len.................. %"PRIu64, rsa.len); PrintAndLogEx(INFO, "Exponent............. %s", str_exp); PrintAndLogEx(INFO, "Public key modulus N"); PrintAndLogEx(INFO, " %.64s", str_pk); From 904bc51fb65f241583726d024d194c2de841a370 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Mon, 5 Oct 2020 13:40:01 +0200 Subject: [PATCH 0841/1047] coverity 303200 --- client/src/cmdhf14b.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/client/src/cmdhf14b.c b/client/src/cmdhf14b.c index 542dc3aec..eae32c324 100644 --- a/client/src/cmdhf14b.c +++ b/client/src/cmdhf14b.c @@ -139,11 +139,12 @@ static int CmdHF14BSim(const char *Cmd) { uint8_t pupi[4]; int n = 0; int res = CLIParamHexToBuf(arg_get_str(ctx, 1), pupi, sizeof(pupi), &n); + CLIParserFree(ctx); + if (res) { PrintAndLogEx(FAILED, "failed to read pupi"); return PM3_EINVARG; } - CLIParserFree(ctx); clearCommandBuffer(); SendCommandNG(CMD_HF_ISO14443B_SIMULATE, pupi, sizeof(pupi)); return PM3_SUCCESS; From cb8635767b589aaa444ce917248b0ffd796ca44d Mon Sep 17 00:00:00 2001 From: Gator96100 Date: Mon, 5 Oct 2020 13:44:26 +0200 Subject: [PATCH 0842/1047] WIP --- appveyor.yml | 33 ++++++++++++++++----------------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 7c99e48b4..ded1fc55a 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -176,7 +176,7 @@ install: Write-Host "ProxSpace: move cache..." -NoNewLine - Move-Item -Path "$env:proxspace_cache_path" -Destination "$env:proxspace_path\msys2\var\cache" -Force -ErrorAction SilentlyContinue + #Move-Item -Path "$env:proxspace_cache_path" -Destination "$env:proxspace_path\msys2\var\cache" -Force -ErrorAction SilentlyContinue Write-Host "[ OK ]" -ForegroundColor Gree @@ -265,6 +265,18 @@ build_script: #ProxSpace + Write-Host "ProxSpace: create new cache..." -NoNewLine + + cd $env:proxspace_path + + #./runme64.bat -c "yes | pacman -Sc > /dev/null 2>&1" + + #Remove-Item -Recurse -Force -Path "$env:proxspace_cache_path" -ErrorAction SilentlyContinue + + #Move-Item -Path "$env:proxspace_path\msys2\var\cache" -Destination "$env:proxspace_cache_path" -Force + + Write-Host "[ OK ]" -ForegroundColor Gree + Write-Host "---------- PS make ----------" -ForegroundColor Yellow $TestTime=[System.Environment]::TickCount @@ -301,6 +313,8 @@ build_script: ExecMinGWCmd 'mkdir -p client/build; cd client/build; cmake -G""MSYS Makefiles"" ..; make VERBOSE=1;' + ExecMinGWCmd 'cat /pm3/proxmark/client/build/CMakeFiles/CMakeOutput.log' + Write-Host "---------- PS cmake tests ----------" -ForegroundColor Yellow ExecMinGWCmd './tools/pm3_tests.sh --clientbin client/build/proxmark3.exe client' @@ -323,19 +337,4 @@ on_success: on_failure: - ps: Write-Host "Build error." -ForegroundColor Red on_finish: -- ps: >- - - # $blockRdp = $true; iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1')) - - Write-Host "ProxSpace: create new cache..." -NoNewLine - - cd $env:proxspace_path - - ./runme64.bat -c "yes | pacman -Sc > /dev/null 2>&1" - - Remove-Item -Recurse -Force -Path "$env:proxspace_cache_path" -ErrorAction SilentlyContinue - - Move-Item -Path "$env:proxspace_path\msys2\var\cache" -Destination "$env:proxspace_cache_path" -Force - - Write-Host "[ OK ]" -ForegroundColor Gree - \ No newline at end of file +- ps: # $blockRdp = $true; iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1')) \ No newline at end of file From 08a875c2594c7376cd3b8d17f3f7afc5823f8f82 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Mon, 5 Oct 2020 13:56:12 +0200 Subject: [PATCH 0843/1047] coverity 301403 --- client/src/cmdhfwaveshare.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/src/cmdhfwaveshare.c b/client/src/cmdhfwaveshare.c index 6b106dea1..b082dcb0c 100644 --- a/client/src/cmdhfwaveshare.c +++ b/client/src/cmdhfwaveshare.c @@ -565,7 +565,7 @@ static int transceive_blocking(uint8_t *txBuf, uint16_t txBufLen, uint8_t *rxBuf if (WaitForResponseTimeout(CMD_ACK, &resp, 2000)) { if (resp.oldarg[0] > rxBufLen) { - PrintAndLogEx(WARNING, "Received %"PRIu32 " bytes, rxBuf too small (%u)", resp.oldarg[0], rxBufLen); + PrintAndLogEx(WARNING, "Received %"PRIu64 " bytes, rxBuf too small (%u)", resp.oldarg[0], rxBufLen); memcpy(rxBuf, resp.data.asBytes, rxBufLen); *actLen = rxBufLen; return PM3_ESOFT; From 9512e349a7e901d1b6a8ff845ba1a5216aae306c Mon Sep 17 00:00:00 2001 From: Gator96100 Date: Mon, 5 Oct 2020 14:22:43 +0200 Subject: [PATCH 0844/1047] WIP --- appveyor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index ded1fc55a..cdd337a0d 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -232,7 +232,7 @@ build_script: } #WSL: wait for installation to finish - Receive-Job -Wait -Name WSLInstall + Receive-Job -Wait -Name WSLInstall -ErrorAction SilentlyContinue #Windows Subsystem for Linux (WSL) Write-Host "---------- WSL make ----------" -ForegroundColor Yellow From 678cbf35767da6dd27e0936135f9ad1ae86838df Mon Sep 17 00:00:00 2001 From: Gator96100 Date: Mon, 5 Oct 2020 14:27:50 +0200 Subject: [PATCH 0845/1047] WIP --- appveyor.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index cdd337a0d..891012725 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -154,9 +154,9 @@ install: } Start-Sleep -s 5 - Receive-Job -Name WSLInstall + Receive-Job -Name WSLInstall -ErrorAction SilentlyContinue } - Receive-Job -Wait -Name PSInstall + #Receive-Job -Wait -Name PSInstall } Function GitClone($Text, $Folder) { From 21251b32208b5bbb43a1113ca1876b2cd285b63c Mon Sep 17 00:00:00 2001 From: Gator96100 Date: Mon, 5 Oct 2020 15:40:17 +0200 Subject: [PATCH 0846/1047] Enabled cache creation --- appveyor.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 891012725..a40d2955c 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -269,11 +269,11 @@ build_script: cd $env:proxspace_path - #./runme64.bat -c "yes | pacman -Sc > /dev/null 2>&1" + ./runme64.bat -c "yes | pacman -Sc > /dev/null 2>&1" - #Remove-Item -Recurse -Force -Path "$env:proxspace_cache_path" -ErrorAction SilentlyContinue + Remove-Item -Recurse -Force -Path "$env:proxspace_cache_path" -ErrorAction SilentlyContinue - #Move-Item -Path "$env:proxspace_path\msys2\var\cache" -Destination "$env:proxspace_cache_path" -Force + Move-Item -Path "$env:proxspace_path\msys2\var\cache" -Destination "$env:proxspace_cache_path" -Force Write-Host "[ OK ]" -ForegroundColor Gree From 4685c5ae707e8743b6ae28cb4eddf939b50ba99c Mon Sep 17 00:00:00 2001 From: Gator96100 Date: Mon, 5 Oct 2020 17:03:07 +0200 Subject: [PATCH 0847/1047] Enabled cache usage --- appveyor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index a40d2955c..e849d670b 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -176,7 +176,7 @@ install: Write-Host "ProxSpace: move cache..." -NoNewLine - #Move-Item -Path "$env:proxspace_cache_path" -Destination "$env:proxspace_path\msys2\var\cache" -Force -ErrorAction SilentlyContinue + Move-Item -Path "$env:proxspace_cache_path" -Destination "$env:proxspace_path\msys2\var\cache" -Force -ErrorAction SilentlyContinue Write-Host "[ OK ]" -ForegroundColor Gree From fcff53517b1a38b875129ba1c57d44690e41917c Mon Sep 17 00:00:00 2001 From: Gator96100 Date: Mon, 5 Oct 2020 17:54:39 +0200 Subject: [PATCH 0848/1047] Copy cache --- appveyor.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index e849d670b..5331c1472 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -176,7 +176,9 @@ install: Write-Host "ProxSpace: move cache..." -NoNewLine - Move-Item -Path "$env:proxspace_cache_path" -Destination "$env:proxspace_path\msys2\var\cache" -Force -ErrorAction SilentlyContinue + New-Item -ItemType Directory -Force -Path "$env:proxspace_path\msys2\var\cache\" + + Copy-Item -Path "$env:proxspace_cache_path\*" -Destination "$env:proxspace_path\msys2\var\cache\" -Force -Recurse -ErrorAction SilentlyContinue Write-Host "[ OK ]" -ForegroundColor Gree From 93f438d71a0a12bdcf7122f127ab46070090fcb2 Mon Sep 17 00:00:00 2001 From: Gator96100 Date: Mon, 5 Oct 2020 18:03:42 +0200 Subject: [PATCH 0849/1047] WIP --- appveyor.yml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index 5331c1472..ba798ab2b 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -176,10 +176,16 @@ install: Write-Host "ProxSpace: move cache..." -NoNewLine - New-Item -ItemType Directory -Force -Path "$env:proxspace_path\msys2\var\cache\" + New-Item -ItemType Directory -Force -Path "$env:proxspace_path\msys2\var\cache\" | Out-Null Copy-Item -Path "$env:proxspace_cache_path\*" -Destination "$env:proxspace_path\msys2\var\cache\" -Force -Recurse -ErrorAction SilentlyContinue + Get-ChildItem "$env:proxspace_path\msys2\var\cache\" + + Get-ChildItem "$env:proxspace_path\msys2\var\cache\pacman\" + + Get-ChildItem "$env:proxspace_path\msys2\var\cache\pacman\pkg\" + Write-Host "[ OK ]" -ForegroundColor Gree ExecUpdate "ProxSpace: initial msys2 startup..." $true From 004318a8d857735493a8afe251dacc4bd55c26d9 Mon Sep 17 00:00:00 2001 From: Gator96100 Date: Mon, 5 Oct 2020 18:30:09 +0200 Subject: [PATCH 0850/1047] Cleanup --- appveyor.yml | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index ba798ab2b..0d960d04a 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -2,7 +2,7 @@ version: 3.0.1.{build} image: Visual Studio 2019 clone_folder: C:\ProxSpace\pm3\proxmark cache: - - C:\cache + - C:\cache -> appveyor.yml environment: proxspace_url: https://github.com/Gator96100/ProxSpace/archive/master.zip proxspace_zip_file: \proxspace.zip @@ -180,12 +180,6 @@ install: Copy-Item -Path "$env:proxspace_cache_path\*" -Destination "$env:proxspace_path\msys2\var\cache\" -Force -Recurse -ErrorAction SilentlyContinue - Get-ChildItem "$env:proxspace_path\msys2\var\cache\" - - Get-ChildItem "$env:proxspace_path\msys2\var\cache\pacman\" - - Get-ChildItem "$env:proxspace_path\msys2\var\cache\pacman\pkg\" - Write-Host "[ OK ]" -ForegroundColor Gree ExecUpdate "ProxSpace: initial msys2 startup..." $true @@ -221,6 +215,7 @@ build_script: $WSLjob = Start-Job -Name WSLCompile -ScriptBlock { Function ExecWSLCmd($Cmd) { + cd $env:wsl_git_path wsl -- bash -c $Cmd } @@ -244,7 +239,6 @@ build_script: #Windows Subsystem for Linux (WSL) Write-Host "---------- WSL make ----------" -ForegroundColor Yellow - cd $env:wsl_git_path $TestTime=[System.Environment]::TickCount ExecWSLCmd "make clean;make V=1" #some checks From de2b098731d0ded4496f3ee192b3dd906b7c597f Mon Sep 17 00:00:00 2001 From: Gator96100 Date: Mon, 5 Oct 2020 19:05:54 +0200 Subject: [PATCH 0851/1047] Removed debug output --- appveyor.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 0d960d04a..e8022a4b8 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -315,8 +315,6 @@ build_script: ExecMinGWCmd 'mkdir -p client/build; cd client/build; cmake -G""MSYS Makefiles"" ..; make VERBOSE=1;' - ExecMinGWCmd 'cat /pm3/proxmark/client/build/CMakeFiles/CMakeOutput.log' - Write-Host "---------- PS cmake tests ----------" -ForegroundColor Yellow ExecMinGWCmd './tools/pm3_tests.sh --clientbin client/build/proxmark3.exe client' From 6fb7f0d45900339e5bab86f823e5030ac68f06a7 Mon Sep 17 00:00:00 2001 From: Gator96100 Date: Mon, 5 Oct 2020 19:35:50 +0200 Subject: [PATCH 0852/1047] Moved cache folder --- appveyor.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index e8022a4b8..a43c1178c 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -2,14 +2,14 @@ version: 3.0.1.{build} image: Visual Studio 2019 clone_folder: C:\ProxSpace\pm3\proxmark cache: - - C:\cache -> appveyor.yml + - C:\ps-cache -> appveyor.yml environment: proxspace_url: https://github.com/Gator96100/ProxSpace/archive/master.zip proxspace_zip_file: \proxspace.zip proxspace_zip_folder_name: ProxSpace-* proxspace_path: C:\ProxSpace proxspace_home_path: \ProxSpace\pm3 - proxspace_cache_path: C:\cache + proxspace_cache_path: C:\ps-cache wsl_git_path: C:\proxmark APPVEYOR_SAVE_CACHE_ON_ERROR: true From d8378cee310d914dfdc28bcfc8b806217e895ec9 Mon Sep 17 00:00:00 2001 From: Gator96100 Date: Mon, 5 Oct 2020 20:29:12 +0200 Subject: [PATCH 0853/1047] Test --- appveyor.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/appveyor.yml b/appveyor.yml index a43c1178c..10ba9090c 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -236,6 +236,8 @@ build_script: #WSL: wait for installation to finish Receive-Job -Wait -Name WSLInstall -ErrorAction SilentlyContinue + + Add-AppveyorMessage -Message "WSL start" -Category Information #Windows Subsystem for Linux (WSL) Write-Host "---------- WSL make ----------" -ForegroundColor Yellow From fc7ec34ca3bc6949f59c25f454bf3e5d2c23d1c2 Mon Sep 17 00:00:00 2001 From: Gator96100 Date: Mon, 5 Oct 2020 21:11:46 +0200 Subject: [PATCH 0854/1047] Fix --- appveyor.yml | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 10ba9090c..160d46564 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -53,6 +53,8 @@ clone_script: Write-Host "[ OK ]" -ForegroundColor Green } + $env:wsl_installed = false + $WSLjob = Start-Job -Name WSLInstall -ScriptBlock { Function WSLExec($Text, $Cmd) { Write-Host "$Text" @@ -68,6 +70,7 @@ clone_script: WSLExec "WSL install..." "sudo apt-get -y install --reinstall --no-install-recommends git ca-certificates build-essential pkg-config libreadline-dev gcc-arm-none-eabi libnewlib-dev libbz2-dev qtbase5-dev cmake 1>/dev/null" WSLExec "WSL QT fix..." "sudo strip --remove-section=.note.ABI-tag /usr/lib/x86_64-linux-gnu/libQt5Core.so.5" Add-AppveyorMessage -Message "WSL setup took $(([System.Environment]::TickCount-$WSLInstallTime) / 1000) sec" -Category Information + $env:wsl_installed = true } $env:PSInstallTime=[System.Environment]::TickCount @@ -235,9 +238,9 @@ build_script: } #WSL: wait for installation to finish - Receive-Job -Wait -Name WSLInstall -ErrorAction SilentlyContinue - - Add-AppveyorMessage -Message "WSL start" -Category Information + while(!$env:wsl_installed) { + Start-Sleep -s 5 + } #Windows Subsystem for Linux (WSL) Write-Host "---------- WSL make ----------" -ForegroundColor Yellow From 7cebb832b648943ad33feba7755351396b3f9e8f Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Mon, 5 Oct 2020 21:39:47 +0200 Subject: [PATCH 0855/1047] 14a,b raw - textual --- client/src/cmdhf14a.c | 28 +++++++++++++++++++++------- client/src/cmdhf14b.c | 38 ++++++++++++++++++++------------------ 2 files changed, 41 insertions(+), 25 deletions(-) diff --git a/client/src/cmdhf14a.c b/client/src/cmdhf14a.c index 49cdf2e90..d63c4ce91 100644 --- a/client/src/cmdhf14a.c +++ b/client/src/cmdhf14a.c @@ -1267,14 +1267,14 @@ static int CmdHF14ACmdRaw(const char *Cmd) { *buf = 0; if (++datalen >= sizeof(data)) { if (crc) - PrintAndLogEx(NORMAL, "Buffer is full, we can't add CRC to your data"); + PrintAndLogEx(FAILED, "Buffer is full, we can't add CRC to your data"); break; } } continue; } - PrintAndLogEx(NORMAL, "Invalid char on input"); - return 0; + PrintAndLogEx(FAILED, "Invalid char on input"); + return PM3_ESOFT; } if (crc && datalen > 0 && datalen < sizeof(data) - 2) { @@ -1301,7 +1301,7 @@ static int CmdHF14ACmdRaw(const char *Cmd) { flags |= ISO14A_SET_TIMEOUT; if (timeout > MAX_TIMEOUT) { timeout = MAX_TIMEOUT; - PrintAndLogEx(NORMAL, "Set timeout to 40542 seconds (11.26 hours). The max we can wait for response"); + PrintAndLogEx(INFO, "Set timeout to 40542 seconds (11.26 hours). The max we can wait for response"); } argtimeout = 13560000 / 1000 / (8 * 16) * timeout; // timeout in ETUs (time to transfer 1 bit, approx. 9.4 us) } @@ -1345,18 +1345,32 @@ static int waitCmd(uint8_t iSelect, uint32_t timeout) { if (iSelect) { len = (resp.oldarg[1] & 0xFFFF); if (len) { - PrintAndLogEx(NORMAL, "Card selected. UID[%i]:", len); + PrintAndLogEx(SUCCESS, "Card selected. UID[%u]:", len); } else { PrintAndLogEx(WARNING, "Can't select card."); } } else { - PrintAndLogEx(NORMAL, "received %i bytes", len); + PrintAndLogEx(SUCCESS, "received " _YELLOW_("%u") " bytes", len); } if (!len) return 1; - PrintAndLogEx(NORMAL, "%s", sprint_hex(resp.data.asBytes, len)); + uint8_t *data = resp.data.asBytes; + + if (len >= 3) { + bool crc = check_crc(CRC_14443_A, data, len); + + PrintAndLogEx(SUCCESS, "%s[%02X %02X] %s", + sprint_hex(data, len - 2), + data[len - 2], + data[len - 1], + (crc) ? _GREEN_("ok") : _RED_("fail") + ); + } else { + PrintAndLogEx(SUCCESS, "%s", sprint_hex(data, len)); + } + } else { PrintAndLogEx(WARNING, "timeout while waiting for reply."); return 3; diff --git a/client/src/cmdhf14b.c b/client/src/cmdhf14b.c index eae32c324..fffad5d9a 100644 --- a/client/src/cmdhf14b.c +++ b/client/src/cmdhf14b.c @@ -79,7 +79,8 @@ static bool wait_cmd_14b(bool verbose, bool is_select) { if (status == 0) { if (verbose) { - PrintAndLogEx(SUCCESS, "len %u | %s", len, sprint_hex(data, len)); + PrintAndLogEx(SUCCESS, "received " _YELLOW_("%u") " bytes", len); + PrintAndLogEx(SUCCESS, "%s", sprint_hex(data, len)); } return true; } else { @@ -93,8 +94,8 @@ static bool wait_cmd_14b(bool verbose, bool is_select) { if (len >= 3) { bool crc = check_crc(CRC_14443_B, data, len); - PrintAndLogEx(SUCCESS, "len %u | %s[%02X %02X] %s", - len, + PrintAndLogEx(SUCCESS, "received " _YELLOW_("%u") " bytes", len); + PrintAndLogEx(SUCCESS, "%s[%02X %02X] %s", sprint_hex(data, len - 2), data[len - 2], data[len - 1], @@ -104,12 +105,12 @@ static bool wait_cmd_14b(bool verbose, bool is_select) { if (verbose) PrintAndLogEx(INFO, "no response from tag"); } else { - PrintAndLogEx(SUCCESS, "len %u | %s", len, sprint_hex(data, len)); + PrintAndLogEx(SUCCESS, "%s", sprint_hex(data, len)); } } return true; } else { - PrintAndLogEx(WARNING, "command execution timeout"); + PrintAndLogEx(WARNING, "timeout while waiting for reply"); return false; } } @@ -189,11 +190,11 @@ static int CmdHF14BCmdRaw(const char *Cmd) { void *argtable[] = { arg_param_begin, arg_lit0("k", "keep", "leave the signal field ON after receive response"), - arg_lit0("s", "std", "activate field and select standard card"), - arg_lit0(NULL, "sr", "activate field and select SRx ST"), - arg_lit0(NULL, "cts", "activate field and select ASK C-ticket"), + arg_lit0("s", "std", "activate field, use ISO14B select"), + arg_lit0(NULL, "sr", "activate field, use SRx ST select"), + arg_lit0(NULL, "cts", "activate field, use ASK C-ticket select"), arg_lit0("c", "crc", "calculate and append CRC"), - arg_lit0("r", "noresponse", "do not read response"), + arg_lit0("r", "noresponse", "do not read response from card"), arg_int0("t", "timeout", "", "timeout in ms"), arg_lit0("v", "verbose", "verbose"), arg_strx0("d", "data", "", "data, bytes to send"), @@ -218,7 +219,7 @@ static int CmdHF14BCmdRaw(const char *Cmd) { if (select_std) { flags |= (ISO14B_SELECT_STD | ISO14B_CLEARTRACE); if (verbose) - PrintAndLogEx(INFO, "using standard select"); + PrintAndLogEx(INFO, "using ISO14443-B select"); } else if (select_sr) { flags |= (ISO14B_SELECT_SR | ISO14B_CLEARTRACE); if (verbose) @@ -268,6 +269,7 @@ static int CmdHF14BCmdRaw(const char *Cmd) { } bool success = true; + // Select, device will send back iso14b_card_select_t, don't print it. if (select_std) { success = wait_cmd_14b(verbose, true); @@ -651,7 +653,7 @@ static bool HF14B_Std_Info(bool verbose) { SendCommandMIX(CMD_HF_ISO14443B_COMMAND, ISO14B_CONNECT | ISO14B_SELECT_STD | ISO14B_DISCONNECT, 0, 0, NULL, 0); if (!WaitForResponseTimeout(CMD_HF_ISO14443B_COMMAND, &resp, TIMEOUT)) { - if (verbose) PrintAndLogEx(WARNING, "command execution timeout"); + if (verbose) PrintAndLogEx(WARNING, "timeout while waiting for reply"); switch_off_field_14b(); return is_success; } @@ -691,7 +693,7 @@ static bool HF14B_ST_Info(bool verbose) { SendCommandMIX(CMD_HF_ISO14443B_COMMAND, ISO14B_CONNECT | ISO14B_SELECT_SR | ISO14B_DISCONNECT, 0, 0, NULL, 0); if (!WaitForResponseTimeout(CMD_HF_ISO14443B_COMMAND, &resp, TIMEOUT)) { - if (verbose) PrintAndLogEx(WARNING, "command execution timeout"); + if (verbose) PrintAndLogEx(WARNING, "timeout while waiting for reply"); return false; } @@ -735,7 +737,7 @@ static bool HF14B_st_reader(bool verbose) { SendCommandMIX(CMD_HF_ISO14443B_COMMAND, ISO14B_CONNECT | ISO14B_SELECT_SR | ISO14B_DISCONNECT, 0, 0, NULL, 0); if (!WaitForResponseTimeout(CMD_HF_ISO14443B_COMMAND, &resp, TIMEOUT)) { - if (verbose) PrintAndLogEx(WARNING, "command execution timeout"); + if (verbose) PrintAndLogEx(WARNING, "timeout while waiting for reply"); return is_success; } @@ -775,7 +777,7 @@ static bool HF14B_std_reader(bool verbose) { SendCommandMIX(CMD_HF_ISO14443B_COMMAND, ISO14B_CONNECT | ISO14B_SELECT_STD | ISO14B_DISCONNECT, 0, 0, NULL, 0); if (WaitForResponseTimeout(CMD_HF_ISO14443B_COMMAND, &resp, TIMEOUT) == false) { - if (verbose) PrintAndLogEx(WARNING, "command execution timeout"); + if (verbose) PrintAndLogEx(WARNING, "timeout while waiting for reply"); return false; } @@ -818,7 +820,7 @@ static bool HF14B_ask_ct_reader(bool verbose) { PacketResponseNG resp; SendCommandMIX(CMD_HF_ISO14443B_COMMAND, ISO14B_CONNECT | ISO14B_SELECT_CTS | ISO14B_DISCONNECT, 0, 0, NULL, 0); if (WaitForResponseTimeout(CMD_HF_ISO14443B_COMMAND, &resp, TIMEOUT) == false) { - if (verbose) PrintAndLogEx(WARNING, "command execution timeout"); + if (verbose) PrintAndLogEx(WARNING, "timeout while waiting for reply"); return false; } @@ -860,7 +862,7 @@ static bool HF14B_other_reader(bool verbose) { SendCommandMIX(CMD_HF_ISO14443B_COMMAND, flags, datalen, 0, data, datalen); if (!WaitForResponseTimeout(CMD_HF_ISO14443B_COMMAND, &resp, TIMEOUT)) { - if (verbose) PrintAndLogEx(WARNING, "command execution timeout"); + if (verbose) PrintAndLogEx(WARNING, "timeout while waiting for reply"); switch_off_field_14b(); return false; } @@ -884,7 +886,7 @@ static bool HF14B_other_reader(bool verbose) { clearCommandBuffer(); SendCommandMIX(CMD_HF_ISO14443B_COMMAND, flags, 1, 0, data, 1); if (!WaitForResponseTimeout(CMD_HF_ISO14443B_COMMAND, &resp, TIMEOUT)) { - if (verbose) PrintAndLogEx(WARNING, "command execution timeout"); + if (verbose) PrintAndLogEx(WARNING, "timeout while waiting for reply"); switch_off_field_14b(); return false; } @@ -908,7 +910,7 @@ static bool HF14B_other_reader(bool verbose) { clearCommandBuffer(); SendCommandMIX(CMD_HF_ISO14443B_COMMAND, flags, 1, 0, data, 1); if (!WaitForResponseTimeout(CMD_HF_ISO14443B_COMMAND, &resp, TIMEOUT)) { - if (verbose) PrintAndLogEx(WARNING, "command execution timeout"); + if (verbose) PrintAndLogEx(WARNING, "timeout while waiting for reply"); switch_off_field_14b(); return false; } From 4003f47b6e446c32a261dd7cef756407cd349fe0 Mon Sep 17 00:00:00 2001 From: Gator96100 Date: Mon, 5 Oct 2020 21:47:13 +0200 Subject: [PATCH 0856/1047] WIP --- appveyor.yml | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 160d46564..9d1da7ef0 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -2,7 +2,7 @@ version: 3.0.1.{build} image: Visual Studio 2019 clone_folder: C:\ProxSpace\pm3\proxmark cache: - - C:\ps-cache -> appveyor.yml + - C:\ps-cache environment: proxspace_url: https://github.com/Gator96100/ProxSpace/archive/master.zip proxspace_zip_file: \proxspace.zip @@ -53,9 +53,7 @@ clone_script: Write-Host "[ OK ]" -ForegroundColor Green } - $env:wsl_installed = false - - $WSLjob = Start-Job -Name WSLInstall -ScriptBlock { + $env:WSLInstalljob = Start-Job -Name WSLInstall -ScriptBlock { Function WSLExec($Text, $Cmd) { Write-Host "$Text" wsl -- bash -c $Cmd @@ -70,7 +68,6 @@ clone_script: WSLExec "WSL install..." "sudo apt-get -y install --reinstall --no-install-recommends git ca-certificates build-essential pkg-config libreadline-dev gcc-arm-none-eabi libnewlib-dev libbz2-dev qtbase5-dev cmake 1>/dev/null" WSLExec "WSL QT fix..." "sudo strip --remove-section=.note.ABI-tag /usr/lib/x86_64-linux-gnu/libQt5Core.so.5" Add-AppveyorMessage -Message "WSL setup took $(([System.Environment]::TickCount-$WSLInstallTime) / 1000) sec" -Category Information - $env:wsl_installed = true } $env:PSInstallTime=[System.Environment]::TickCount @@ -157,7 +154,7 @@ install: } Start-Sleep -s 5 - Receive-Job -Name WSLInstall -ErrorAction SilentlyContinue + Receive-Job -Job $env:WSLInstalljob -ErrorAction SilentlyContinue } #Receive-Job -Wait -Name PSInstall } @@ -238,9 +235,7 @@ build_script: } #WSL: wait for installation to finish - while(!$env:wsl_installed) { - Start-Sleep -s 5 - } + Receive-Job -Job $env:WSLInstalljob -ErrorAction SilentlyContinue #Windows Subsystem for Linux (WSL) Write-Host "---------- WSL make ----------" -ForegroundColor Yellow From bf70999c4e15e086a752990ff2b91cf94c1f2759 Mon Sep 17 00:00:00 2001 From: Gator96100 Date: Mon, 5 Oct 2020 22:06:03 +0200 Subject: [PATCH 0857/1047] Can't use receive-job withing jobs --- appveyor.yml | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 9d1da7ef0..c8e1f6ee6 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -53,7 +53,9 @@ clone_script: Write-Host "[ OK ]" -ForegroundColor Green } - $env:WSLInstalljob = Start-Job -Name WSLInstall -ScriptBlock { + $env:wsl_install_running = true + + $WSLjob = Start-Job -Name WSLInstall -ScriptBlock { Function WSLExec($Text, $Cmd) { Write-Host "$Text" wsl -- bash -c $Cmd @@ -68,6 +70,7 @@ clone_script: WSLExec "WSL install..." "sudo apt-get -y install --reinstall --no-install-recommends git ca-certificates build-essential pkg-config libreadline-dev gcc-arm-none-eabi libnewlib-dev libbz2-dev qtbase5-dev cmake 1>/dev/null" WSLExec "WSL QT fix..." "sudo strip --remove-section=.note.ABI-tag /usr/lib/x86_64-linux-gnu/libQt5Core.so.5" Add-AppveyorMessage -Message "WSL setup took $(([System.Environment]::TickCount-$WSLInstallTime) / 1000) sec" -Category Information + $env:wsl_install_running = false } $env:PSInstallTime=[System.Environment]::TickCount @@ -154,7 +157,7 @@ install: } Start-Sleep -s 5 - Receive-Job -Job $env:WSLInstalljob -ErrorAction SilentlyContinue + Receive-Job -Name WSLInstall -ErrorAction SilentlyContinue } #Receive-Job -Wait -Name PSInstall } @@ -235,7 +238,13 @@ build_script: } #WSL: wait for installation to finish - Receive-Job -Job $env:WSLInstalljob -ErrorAction SilentlyContinue + if($env:wsl_install_running){ + Write-Host "Waiting for WSL installation to finish..." + while($env:wsl_install_running) { + Start-Sleep -s 1 + } + Write-Host "$Name [ OK ]" -ForegroundColor Green + } #Windows Subsystem for Linux (WSL) Write-Host "---------- WSL make ----------" -ForegroundColor Yellow @@ -321,6 +330,8 @@ build_script: ExecCheck "PS cmake Tests" + Receive-Job -Wait -Name WSLInstall -ErrorAction SilentlyContinue + Receive-Job -Wait -Job $WSLjob From 9c856fd9f4e3d06fc57eba4d5764dbe6286efcd5 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Mon, 5 Oct 2020 22:31:06 +0200 Subject: [PATCH 0858/1047] Gen3 detection: be prudent, false positives are possible --- client/src/mifare/mifarehost.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/src/mifare/mifarehost.c b/client/src/mifare/mifarehost.c index 78fca3487..5618868fe 100644 --- a/client/src/mifare/mifarehost.c +++ b/client/src/mifare/mifarehost.c @@ -1178,7 +1178,7 @@ int detect_mf_magic(bool is_mfc) { PrintAndLogEx(SUCCESS, "Magic capabilities : " _GREEN_("Gen 2 / CUID")); break; case MAGIC_GEN_3: - PrintAndLogEx(SUCCESS, "Magic capabilities : " _GREEN_("Gen 3 / APDU")); + PrintAndLogEx(SUCCESS, "Magic capabilities : maybe " _GREEN_("Gen 3 / APDU")); break; case MAGIC_GEN_UNFUSED: PrintAndLogEx(SUCCESS, "Magic capabilities : " _GREEN_("Write Once / FUID")); From 8691d3b77fed059bcafa0c325ecc02ddf14ced89 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Mon, 5 Oct 2020 22:33:08 +0200 Subject: [PATCH 0859/1047] hf 14a info: tells when no ATS but SAK pretends 14a-4 --- client/src/cmdhf14a.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/client/src/cmdhf14a.c b/client/src/cmdhf14a.c index d63c4ce91..2b5570408 100644 --- a/client/src/cmdhf14a.c +++ b/client/src/cmdhf14a.c @@ -1968,6 +1968,9 @@ int infoHF14A(bool verbose, bool do_nack_test, bool do_aid_search) { } } else { PrintAndLogEx(INFO, "proprietary non iso14443-4 card found, RATS not supported"); + if ((card.sak & 0x20) == 0x20) { + PrintAndLogEx(INFO, "SAK incorrectly claims that card supports RATS"); + } } int isMagic = 0; From afe63161b3627a73b05dbb40170a8d4951ad6f85 Mon Sep 17 00:00:00 2001 From: Gator96100 Date: Mon, 5 Oct 2020 22:58:51 +0200 Subject: [PATCH 0860/1047] WIP --- appveyor.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index c8e1f6ee6..ade2526f0 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -29,7 +29,6 @@ init: $releasename+=$env:APPVEYOR_BUILD_VERSION + " [" + $env:APPVEYOR_REPO_COMMIT_SHORT + "]" - Write-Host "repository: $env:appveyor_repo_name branch:$env:APPVEYOR_REPO_BRANCH release: $releasename" -ForegroundColor Yellow Add-AppveyorMessage -Message "[$env:APPVEYOR_REPO_COMMIT_SHORT]$env:appveyor_repo_name($env:APPVEYOR_REPO_BRANCH)" -Category Information -Details "repository: $env:appveyor_repo_name branch: $env:APPVEYOR_REPO_BRANCH release: $releasename" @@ -239,12 +238,14 @@ build_script: #WSL: wait for installation to finish if($env:wsl_install_running){ - Write-Host "Waiting for WSL installation to finish..." + Write-Host "Waiting for WSL installation to finish..." -NoNewLine while($env:wsl_install_running) { - Start-Sleep -s 1 + Start-Sleep -s 5 } Write-Host "$Name [ OK ]" -ForegroundColor Green } + + Add-AppveyorMessage -Message "WSL start: $env:wsl_install_running" -Category Information #Windows Subsystem for Linux (WSL) Write-Host "---------- WSL make ----------" -ForegroundColor Yellow @@ -333,7 +334,6 @@ build_script: Receive-Job -Wait -Name WSLInstall -ErrorAction SilentlyContinue Receive-Job -Wait -Job $WSLjob - test_script: - ps: >- From afe04ba2227c884db919d7af12a0e94c7f7bb933 Mon Sep 17 00:00:00 2001 From: Gator96100 Date: Mon, 5 Oct 2020 23:35:21 +0200 Subject: [PATCH 0861/1047] Test --- appveyor.yml | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index ade2526f0..397d36aa2 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -52,8 +52,6 @@ clone_script: Write-Host "[ OK ]" -ForegroundColor Green } - $env:wsl_install_running = true - $WSLjob = Start-Job -Name WSLInstall -ScriptBlock { Function WSLExec($Text, $Cmd) { Write-Host "$Text" @@ -69,7 +67,6 @@ clone_script: WSLExec "WSL install..." "sudo apt-get -y install --reinstall --no-install-recommends git ca-certificates build-essential pkg-config libreadline-dev gcc-arm-none-eabi libnewlib-dev libbz2-dev qtbase5-dev cmake 1>/dev/null" WSLExec "WSL QT fix..." "sudo strip --remove-section=.note.ABI-tag /usr/lib/x86_64-linux-gnu/libQt5Core.so.5" Add-AppveyorMessage -Message "WSL setup took $(([System.Environment]::TickCount-$WSLInstallTime) / 1000) sec" -Category Information - $env:wsl_install_running = false } $env:PSInstallTime=[System.Environment]::TickCount @@ -237,13 +234,7 @@ build_script: } #WSL: wait for installation to finish - if($env:wsl_install_running){ - Write-Host "Waiting for WSL installation to finish..." -NoNewLine - while($env:wsl_install_running) { - Start-Sleep -s 5 - } - Write-Host "$Name [ OK ]" -ForegroundColor Green - } + Receive-Job -Wait -Job $input -ErrorAction SilentlyContinue Add-AppveyorMessage -Message "WSL start: $env:wsl_install_running" -Category Information @@ -273,7 +264,7 @@ build_script: Write-Host "---------- WSL cmake tests ----------" -ForegroundColor Yellow ExecWSLCmd './tools/pm3_tests.sh --clientbin client/build/proxmark3 client' ExecCheck "WSL cmake Tests" - } + } -InputObject Get-Job -Name WSLInstall #ProxSpace @@ -331,8 +322,6 @@ build_script: ExecCheck "PS cmake Tests" - Receive-Job -Wait -Name WSLInstall -ErrorAction SilentlyContinue - Receive-Job -Wait -Job $WSLjob test_script: From 9b173b01ac2783891bf8a1457c9b4cffb638ff17 Mon Sep 17 00:00:00 2001 From: Gator96100 Date: Mon, 5 Oct 2020 23:45:26 +0200 Subject: [PATCH 0862/1047] Test --- appveyor.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index 397d36aa2..409f5923a 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -212,6 +212,8 @@ build_script: } } + $WSLInstalljob = Get-Job -Name WSLInstall + $WSLjob = Start-Job -Name WSLCompile -ScriptBlock { Function ExecWSLCmd($Cmd) { cd $env:wsl_git_path @@ -264,7 +266,7 @@ build_script: Write-Host "---------- WSL cmake tests ----------" -ForegroundColor Yellow ExecWSLCmd './tools/pm3_tests.sh --clientbin client/build/proxmark3 client' ExecCheck "WSL cmake Tests" - } -InputObject Get-Job -Name WSLInstall + } -InputObject $WSLInstalljob #ProxSpace From 42ca4dd8581253bafedb3e64ad41ed74a334e706 Mon Sep 17 00:00:00 2001 From: Gator96100 Date: Tue, 6 Oct 2020 00:00:38 +0200 Subject: [PATCH 0863/1047] WIP --- appveyor.yml | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 409f5923a..3a9a34b8a 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -52,6 +52,8 @@ clone_script: Write-Host "[ OK ]" -ForegroundColor Green } + $global:wsl_install_running = true + $WSLjob = Start-Job -Name WSLInstall -ScriptBlock { Function WSLExec($Text, $Cmd) { Write-Host "$Text" @@ -67,6 +69,7 @@ clone_script: WSLExec "WSL install..." "sudo apt-get -y install --reinstall --no-install-recommends git ca-certificates build-essential pkg-config libreadline-dev gcc-arm-none-eabi libnewlib-dev libbz2-dev qtbase5-dev cmake 1>/dev/null" WSLExec "WSL QT fix..." "sudo strip --remove-section=.note.ABI-tag /usr/lib/x86_64-linux-gnu/libQt5Core.so.5" Add-AppveyorMessage -Message "WSL setup took $(([System.Environment]::TickCount-$WSLInstallTime) / 1000) sec" -Category Information + $global:wsl_install_running = false } $env:PSInstallTime=[System.Environment]::TickCount @@ -212,8 +215,6 @@ build_script: } } - $WSLInstalljob = Get-Job -Name WSLInstall - $WSLjob = Start-Job -Name WSLCompile -ScriptBlock { Function ExecWSLCmd($Cmd) { cd $env:wsl_git_path @@ -236,9 +237,15 @@ build_script: } #WSL: wait for installation to finish - Receive-Job -Wait -Job $input -ErrorAction SilentlyContinue + if($global:wsl_install_running){ + Write-Host "Waiting for WSL installation to finish..." -NoNewLine + while($global:wsl_install_running) { + Start-Sleep -s 5 + } + Write-Host "$Name [ OK ]" -ForegroundColor Green + } - Add-AppveyorMessage -Message "WSL start: $env:wsl_install_running" -Category Information + Add-AppveyorMessage -Message "WSL start: $global:wsl_install_running" -Category Information #Windows Subsystem for Linux (WSL) Write-Host "---------- WSL make ----------" -ForegroundColor Yellow @@ -266,7 +273,7 @@ build_script: Write-Host "---------- WSL cmake tests ----------" -ForegroundColor Yellow ExecWSLCmd './tools/pm3_tests.sh --clientbin client/build/proxmark3 client' ExecCheck "WSL cmake Tests" - } -InputObject $WSLInstalljob + } #ProxSpace @@ -324,6 +331,8 @@ build_script: ExecCheck "PS cmake Tests" + Receive-Job -Wait -Name WSLInstall -ErrorAction SilentlyContinue + Receive-Job -Wait -Job $WSLjob test_script: From bba256532f6d5a623e061850c79341ab4ac0703a Mon Sep 17 00:00:00 2001 From: Gator96100 Date: Tue, 6 Oct 2020 00:13:09 +0200 Subject: [PATCH 0864/1047] Fix --- appveyor.yml | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 3a9a34b8a..0a04c0d4f 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -2,7 +2,7 @@ version: 3.0.1.{build} image: Visual Studio 2019 clone_folder: C:\ProxSpace\pm3\proxmark cache: - - C:\ps-cache + - C:\ps-cache -> appveyor.yml environment: proxspace_url: https://github.com/Gator96100/ProxSpace/archive/master.zip proxspace_zip_file: \proxspace.zip @@ -52,8 +52,6 @@ clone_script: Write-Host "[ OK ]" -ForegroundColor Green } - $global:wsl_install_running = true - $WSLjob = Start-Job -Name WSLInstall -ScriptBlock { Function WSLExec($Text, $Cmd) { Write-Host "$Text" @@ -69,7 +67,7 @@ clone_script: WSLExec "WSL install..." "sudo apt-get -y install --reinstall --no-install-recommends git ca-certificates build-essential pkg-config libreadline-dev gcc-arm-none-eabi libnewlib-dev libbz2-dev qtbase5-dev cmake 1>/dev/null" WSLExec "WSL QT fix..." "sudo strip --remove-section=.note.ABI-tag /usr/lib/x86_64-linux-gnu/libQt5Core.so.5" Add-AppveyorMessage -Message "WSL setup took $(([System.Environment]::TickCount-$WSLInstallTime) / 1000) sec" -Category Information - $global:wsl_install_running = false + New-Item -ItemType "file" -Path "C:\WSL-Finished.txt" -Force } $env:PSInstallTime=[System.Environment]::TickCount @@ -237,15 +235,14 @@ build_script: } #WSL: wait for installation to finish - if($global:wsl_install_running){ + if(!(Test-Path "C:\WSL-Finished.txt")){ Write-Host "Waiting for WSL installation to finish..." -NoNewLine - while($global:wsl_install_running) { + while(!(Test-Path "C:\WSL-Finished.txt")) { Start-Sleep -s 5 } - Write-Host "$Name [ OK ]" -ForegroundColor Green + Remove-Item -Force "C:\WSL-Finished.txt" -ErrorAction SilentlyContinue + Write-Host "$Name [ OK ]" -ForegroundColor Green } - - Add-AppveyorMessage -Message "WSL start: $global:wsl_install_running" -Category Information #Windows Subsystem for Linux (WSL) Write-Host "---------- WSL make ----------" -ForegroundColor Yellow From fb90c078ff31509bcc6fb95d67e9579ba541a2ef Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Tue, 6 Oct 2020 00:38:30 +0200 Subject: [PATCH 0865/1047] HF_MFSDSAL: turn HF field off --- armsrc/Standalone/hf_msdsal.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/armsrc/Standalone/hf_msdsal.c b/armsrc/Standalone/hf_msdsal.c index f97dc0d7c..b5585c188 100644 --- a/armsrc/Standalone/hf_msdsal.c +++ b/armsrc/Standalone/hf_msdsal.c @@ -305,6 +305,8 @@ void RunMod(void) { DbpString("\n"_YELLOW_("!!") "Waiting for a card reader..."); } } + FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); + LED_D_OFF(); } else if (state == STATE_EMU) { LED_A_OFF(); LED_C_ON(); From 7b599c7f675f1e488959fede2ad647cd0b90c02f Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Tue, 6 Oct 2020 00:51:52 +0200 Subject: [PATCH 0866/1047] HF_AVEFUL: HF field off and sleep between polls --- armsrc/Standalone/hf_aveful.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/armsrc/Standalone/hf_aveful.c b/armsrc/Standalone/hf_aveful.c index 9a56be82c..2fa8a88e5 100644 --- a/armsrc/Standalone/hf_aveful.c +++ b/armsrc/Standalone/hf_aveful.c @@ -155,6 +155,9 @@ void RunMod(void) { break; else if (state == STATE_SEARCH) { if (!iso14443a_select_card(NULL, &card, NULL, true, 0, true)) { + FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); + LED_D_OFF(); + SpinDelay(500); continue; } else { if (card.sak == SAK && card.atqa[0] == ATQA0 && card.atqa[1] == ATQA1 && card.uidlen == 7) { From 6540b4561cda00fc19c126a35366d30cf94ffbfd Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Tue, 6 Oct 2020 00:52:11 +0200 Subject: [PATCH 0867/1047] HF_AVEFUL: allow to exit mode with long press --- armsrc/Standalone/hf_aveful.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/armsrc/Standalone/hf_aveful.c b/armsrc/Standalone/hf_aveful.c index 2fa8a88e5..97ef78745 100644 --- a/armsrc/Standalone/hf_aveful.c +++ b/armsrc/Standalone/hf_aveful.c @@ -147,9 +147,10 @@ void RunMod(void) { int state = STATE_SEARCH; DbpString("Scanning..."); + int button_pressed = BUTTON_NO_CLICK; for (;;) { // Was our button held down or pressed? - int button_pressed = BUTTON_HELD(1000); + button_pressed = BUTTON_HELD(1000); if (button_pressed != BUTTON_NO_CLICK || data_available()) break; @@ -248,6 +249,8 @@ void RunMod(void) { state = STATE_SEARCH; } } + if (button_pressed == BUTTON_HOLD) //Holding down the button + break; } DbpString("exiting"); From cdd39f3ac33c68c0008b7751087bff650290c7ac Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Tue, 6 Oct 2020 01:05:26 +0200 Subject: [PATCH 0868/1047] HF_COLIN: HF field off and sleep between polls --- armsrc/Standalone/hf_colin.c | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/armsrc/Standalone/hf_colin.c b/armsrc/Standalone/hf_colin.c index 8e20ae414..e3115ee7a 100644 --- a/armsrc/Standalone/hf_colin.c +++ b/armsrc/Standalone/hf_colin.c @@ -484,22 +484,18 @@ failtag: iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN); SpinOff(50); LED_A_ON(); - uint8_t ticker = 0; while (!iso14443a_select_card(cjuid, &p_card, &cjcuid, true, 0, true)) { WDT_HIT(); - - ticker++; - if (ticker % 64 == 0) { - LED_A_INV(); - } - if (BUTTON_HELD(10) == BUTTON_HOLD) { WDT_HIT(); DbprintfEx(FLAG_NEWLINE, "\t\t\t[ READING FLASH ]"); ReadLastTagFromFlash(); goto readysim; } + FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); + SpinDelay(500); + LED_A_INV(); } SpinOff(50); From 216d86b604616538669603f85d59eab1a5368994 Mon Sep 17 00:00:00 2001 From: Gator96100 Date: Tue, 6 Oct 2020 01:07:39 +0200 Subject: [PATCH 0869/1047] Hide output --- appveyor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index 0a04c0d4f..44e6b6040 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -67,7 +67,7 @@ clone_script: WSLExec "WSL install..." "sudo apt-get -y install --reinstall --no-install-recommends git ca-certificates build-essential pkg-config libreadline-dev gcc-arm-none-eabi libnewlib-dev libbz2-dev qtbase5-dev cmake 1>/dev/null" WSLExec "WSL QT fix..." "sudo strip --remove-section=.note.ABI-tag /usr/lib/x86_64-linux-gnu/libQt5Core.so.5" Add-AppveyorMessage -Message "WSL setup took $(([System.Environment]::TickCount-$WSLInstallTime) / 1000) sec" -Category Information - New-Item -ItemType "file" -Path "C:\WSL-Finished.txt" -Force + New-Item -ItemType "file" -Path "C:\WSL-Finished.txt" -Force | Out-Null } $env:PSInstallTime=[System.Environment]::TickCount From b081684f2212101d2128e3c50d2afcd809da4dd8 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Tue, 6 Oct 2020 01:17:40 +0200 Subject: [PATCH 0870/1047] HF_MATTYRUN: turn leds off when quitting mode --- armsrc/Standalone/hf_mattyrun.c | 1 + 1 file changed, 1 insertion(+) diff --git a/armsrc/Standalone/hf_mattyrun.c b/armsrc/Standalone/hf_mattyrun.c index c0d603fbd..e14e89789 100644 --- a/armsrc/Standalone/hf_mattyrun.c +++ b/armsrc/Standalone/hf_mattyrun.c @@ -575,4 +575,5 @@ void RunMod(void) { } } } + LEDsoff(); } From 1610bf7e230c6f11839baefa501a3c68bb4290f1 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Tue, 6 Oct 2020 01:26:14 +0200 Subject: [PATCH 0871/1047] HF_YOUNG: HF field off and sleep between polls --- armsrc/Standalone/hf_young.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/armsrc/Standalone/hf_young.c b/armsrc/Standalone/hf_young.c index a1b32dfab..c33d0cf5c 100644 --- a/armsrc/Standalone/hf_young.c +++ b/armsrc/Standalone/hf_young.c @@ -89,6 +89,9 @@ void RunMod(void) { } if (!iso14443a_select_card(NULL, &card[selected], NULL, true, 0, true)) { + FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); + LED_D_OFF(); + SpinDelay(500); continue; } else { Dbprintf("Read UID:"); From f43ad0a23958209d5e217e91707066a5697e6f71 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Tue, 6 Oct 2020 01:26:36 +0200 Subject: [PATCH 0872/1047] HF_YOUNG: turn leds off when quitting mode --- armsrc/Standalone/hf_young.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/armsrc/Standalone/hf_young.c b/armsrc/Standalone/hf_young.c index c33d0cf5c..1673b8975 100644 --- a/armsrc/Standalone/hf_young.c +++ b/armsrc/Standalone/hf_young.c @@ -54,7 +54,7 @@ void RunMod(void) { for (;;) { WDT_HIT(); // exit from Standalone Mode, send a usbcommand. - if (data_available()) return; + if (data_available()) break; SpinDelay(300); @@ -72,7 +72,7 @@ void RunMod(void) { for (;;) { // exit from Standalone Mode, send a usbcommand. - if (data_available()) return; + if (data_available()) break; if (BUTTON_PRESS()) { if (cardRead[selected]) { @@ -223,7 +223,7 @@ void RunMod(void) { DbpString("Playing"); for (; ;) { // exit from Standalone Mode, send a usbcommand. - if (data_available()) return; + if (data_available()) break; int button_pressed = BUTTON_HELD(1000); if (button_pressed == BUTTON_NO_CLICK) { // No button action, proceed with sim @@ -280,4 +280,6 @@ void RunMod(void) { LED(selected + 1, 0); } } + DbpString(_YELLOW_("[=]") "exiting"); + LEDsoff(); } From d316d96e047d9038068a24e8484b53318638643d Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Tue, 6 Oct 2020 10:21:07 +0200 Subject: [PATCH 0873/1047] lf hid demod - now uses wiegandtools instead --- client/src/cmdlfhid.c | 58 +++---------------------------------------- 1 file changed, 3 insertions(+), 55 deletions(-) diff --git a/client/src/cmdlfhid.c b/client/src/cmdlfhid.c index 191733bf4..6276abb8b 100644 --- a/client/src/cmdlfhid.c +++ b/client/src/cmdlfhid.c @@ -37,6 +37,7 @@ #include "util_posix.h" #include "lfdemod.h" #include "wiegand_formats.h" +#include "wiegand_formatutils.h" #ifndef BITS # define BITS 96 @@ -135,61 +136,8 @@ int demodHID(bool verbose) { return PM3_ESOFT; } - if (hi2 != 0) { //extra large HID tags - PrintAndLogEx(SUCCESS, "HID Prox - " _GREEN_("%x%08x%08x (%u)"), hi2, hi, lo, (lo >> 1) & 0xFFFF); - } else { //standard HID tags <38 bits - uint8_t fmtLen = 0; - uint32_t cc = 0; - uint32_t fc = 0; - uint32_t cardnum = 0; - uint8_t oem = 0; - if (((hi >> 5) & 1) == 1) {//if bit 38 is set then < 37 bit format is used - uint32_t lo2 = 0; - lo2 = (((hi & 31) << 12) | (lo >> 20)); //get bits 21-37 to check for format len bit - uint8_t idx3 = 1; - while (lo2 > 1) { //find last bit set to 1 (format len bit) - lo2 >>= 1; - idx3++; - } - fmtLen = idx3 + 19; - fc = 0; - cardnum = 0; - if (fmtLen == 26) { - cardnum = (lo >> 1) & 0xFFFF; - fc = (lo >> 17) & 0xFF; - } - if (fmtLen == 32 && (lo & 0x40000000)) { //if 32 bit and Kastle bit set - cardnum = (lo >> 1) & 0xFFFF; - fc = (lo >> 17) & 0xFF; - cc = (lo >> 25) & 0x1F; - } - if (fmtLen == 34) { - cardnum = (lo >> 1) & 0xFFFF; - fc = ((hi & 1) << 15) | (lo >> 17); - } - if (fmtLen == 35) { - cardnum = (lo >> 1) & 0xFFFFF; - fc = ((hi & 1) << 11) | (lo >> 21); - } - if (fmtLen == 36) { - oem = (lo >> 1) & 0x3; - cardnum = (lo >> 3) & 0xFFFF; - fc = (hi & 0x7) << 13 | ((lo >> 19) & 0xFFFF); - } - } else { //if bit 38 is not set then 37 bit format is used - fmtLen = 37; - cardnum = (lo >> 1) & 0x7FFFF; - fc = ((hi & 0xF) << 12) | (lo >> 20); - } - if (fmtLen == 32 && (lo & 0x40000000)) { //if 32 bit and Kastle bit set - PrintAndLogEx(SUCCESS, - "HID Prox (Kastle format) - " _GREEN_("%x%08x (%u)") " - len: " _GREEN_("32") " bit CC: " _GREEN_("%u") " FC: " _GREEN_("%u") " Card: " _GREEN_("%u"), hi, lo, (lo >> 1) & 0xFFFF, cc, fc, cardnum); - } else { - PrintAndLogEx(SUCCESS, - "HID Prox - " _GREEN_("%x%08x (%u)") " - len: " _GREEN_("%u") " bit - OEM: " _GREEN_("%03u") " FC: " _GREEN_("%u")" Card: " _GREEN_("%u"), - hi, lo, cardnum, fmtLen, oem, fc, cardnum); - } - } + wiegand_message_t packed = initialize_message_object(hi2, hi, lo); + HIDTryUnpack(&packed, false); PrintAndLogEx(DEBUG, "DEBUG: HID idx: %d, Len: %zu, Printing Demod Buffer: ", idx, size); if (g_debugMode) From 957a1a8bf32329110d619dd628fc88809d6ceb59 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Tue, 6 Oct 2020 10:21:46 +0200 Subject: [PATCH 0874/1047] lf fdx demod - less strick len check --- client/src/cmdlffdx.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/src/cmdlffdx.c b/client/src/cmdlffdx.c index 14e6389d5..03c9728d7 100644 --- a/client/src/cmdlffdx.c +++ b/client/src/cmdlffdx.c @@ -589,7 +589,7 @@ int detectFDXB(uint8_t *dest, size_t *size) { uint8_t preamble[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}; if (!preambleSearch(dest, preamble, sizeof(preamble), size, &startIdx)) return -2; //preamble not found - if (*size != 128) return -3; //wrong demoded size + if (*size < 128) return -3; //wrong demoded size //return start position return (int)startIdx; } From 72a0ee09947bfbfee63d3c5a80b3208c965daf2c Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Tue, 6 Oct 2020 11:33:28 +0200 Subject: [PATCH 0875/1047] waveshare: extra checks and info --- client/src/cmdhfwaveshare.c | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/client/src/cmdhfwaveshare.c b/client/src/cmdhfwaveshare.c index b082dcb0c..d4f54a126 100644 --- a/client/src/cmdhfwaveshare.c +++ b/client/src/cmdhfwaveshare.c @@ -98,7 +98,7 @@ static int usage_hf_waveshare_loadbmp(void) { PrintAndLogEx(NORMAL, " m : " _YELLOW_("model number") " of your tag"); PrintAndLogEx(NORMAL, " s : save dithered version in filename-[n].bmp, only for RGB BMP"); for (uint8_t i = 0; i < MEND; i++) { - PrintAndLogEx(NORMAL, " m %2i : %s", i, models[i].desc); + PrintAndLogEx(NORMAL, " m %2i : %-30s (%i*%i)", i, models[i].desc, models[i].width, models[i].height); } PrintAndLogEx(NORMAL, ""); PrintAndLogEx(NORMAL, "Examples:"); @@ -138,9 +138,15 @@ static int read_bmp_bitmap(const uint8_t *bmp, const size_t bmpsize, uint8_t mod uint8_t color_flag = pbmpheader->Color_1; // Get BMP file data pointer uint32_t offset = pbmpheader->offset; + uint16_t width = pbmpheader->BMP_Width; + uint16_t height = pbmpheader->BMP_Height; + if ((width + 8) * height > WSMAPSIZE * 8) { + PrintAndLogEx(WARNING, "The file is too large, aborting!"); + return PM3_ESOFT; + } uint16_t X, Y; - uint16_t Image_Width_Byte = (pbmpheader->BMP_Width % 8 == 0) ? (pbmpheader->BMP_Width / 8) : (pbmpheader->BMP_Width / 8 + 1); + uint16_t Image_Width_Byte = (width % 8 == 0) ? (width / 8) : (width / 8 + 1); uint16_t Bmp_Width_Byte = (Image_Width_Byte % 4 == 0) ? Image_Width_Byte : ((Image_Width_Byte / 4 + 1) * 4); *black = calloc(WSMAPSIZE, sizeof(uint8_t)); @@ -148,10 +154,10 @@ static int read_bmp_bitmap(const uint8_t *bmp, const size_t bmpsize, uint8_t mod return PM3_EMALLOC; } // Write data into RAM - for (Y = 0; Y < pbmpheader->BMP_Height; Y++) { // columns + for (Y = 0; Y < height; Y++) { // columns for (X = 0; X < Bmp_Width_Byte; X++) { // lines - if ((X < Image_Width_Byte) && ((X + (pbmpheader->BMP_Height - Y - 1) * Image_Width_Byte) < WSMAPSIZE)) { - (*black)[X + (pbmpheader->BMP_Height - Y - 1) * Image_Width_Byte] = color_flag ? bmp[offset] : ~bmp[offset]; + if ((X < Image_Width_Byte) && ((X + (height - Y - 1) * Image_Width_Byte) < WSMAPSIZE)) { + (*black)[X + (height - Y - 1) * Image_Width_Byte] = color_flag ? bmp[offset] : ~bmp[offset]; } offset++; } @@ -381,6 +387,10 @@ static int read_bmp_rgb(uint8_t *bmp, const size_t bmpsize, uint8_t model_nr, ui uint32_t offset = pbmpheader->offset; uint16_t width = pbmpheader->BMP_Width; uint16_t height = pbmpheader->BMP_Height; + if ((width + 8) * height > WSMAPSIZE * 8) { + PrintAndLogEx(WARNING, "The file is too large, aborting!"); + return PM3_ESOFT; + } int16_t *chanR = calloc(width * height, sizeof(int16_t)); if (chanR == NULL) { @@ -1042,7 +1052,7 @@ static int CmdHF14AWSLoadBmp(const char *Cmd) { free(bmp); return PM3_ESOFT; } else { - PrintAndLogEx(ERR, "Error, BMP color depth %i not supported", depth); + PrintAndLogEx(ERR, "Error, BMP color depth %i not supported. Must be 1 (BW) or 24 (RGB)", depth); free(bmp); return PM3_ESOFT; } From 701b924f0362d97a54a67627348b2862acc2355e Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Tue, 6 Oct 2020 11:44:55 +0200 Subject: [PATCH 0876/1047] hf waveshare loadbmp - now uses cliparser --- client/src/cmdhfwaveshare.c | 99 +++++++++++++++++-------------------- 1 file changed, 46 insertions(+), 53 deletions(-) diff --git a/client/src/cmdhfwaveshare.c b/client/src/cmdhfwaveshare.c index d4f54a126..d9392a62e 100644 --- a/client/src/cmdhfwaveshare.c +++ b/client/src/cmdhfwaveshare.c @@ -13,6 +13,7 @@ #include "util.h" #include "fileutils.h" #include "util_posix.h" // msleep +#include "cliparser.h" // Currently the largest pixel 880*528 only needs 58.08K bytes #define WSMAPSIZE 60000 @@ -90,23 +91,6 @@ static model_t models[] = { static int CmdHelp(const char *Cmd); -static int usage_hf_waveshare_loadbmp(void) { - PrintAndLogEx(NORMAL, "Load BMP file to Waveshare NFC ePaper."); - PrintAndLogEx(NORMAL, "Usage: hf waveshare loadbmp [h] f m [s]"); - PrintAndLogEx(NORMAL, " Options :"); - PrintAndLogEx(NORMAL, " f : " _YELLOW_("filename[.bmp]") " to upload to tag"); - PrintAndLogEx(NORMAL, " m : " _YELLOW_("model number") " of your tag"); - PrintAndLogEx(NORMAL, " s : save dithered version in filename-[n].bmp, only for RGB BMP"); - for (uint8_t i = 0; i < MEND; i++) { - PrintAndLogEx(NORMAL, " m %2i : %-30s (%i*%i)", i, models[i].desc, models[i].width, models[i].height); - } - PrintAndLogEx(NORMAL, ""); - PrintAndLogEx(NORMAL, "Examples:"); - PrintAndLogEx(NORMAL, _YELLOW_(" hf waveshare loadbmp m 0 f myfile")); - PrintAndLogEx(NORMAL, ""); - return PM3_SUCCESS; -} - static int picture_bit_depth(const uint8_t *bmp, const size_t bmpsize, const uint8_t model_nr) { if (bmpsize < sizeof(BMP_HEADER)) return PM3_ESOFT; @@ -976,50 +960,59 @@ static int start_drawing(uint8_t model_nr, uint8_t *black, uint8_t *red) { static int CmdHF14AWSLoadBmp(const char *Cmd) { - char filename[FILE_PATH_SIZE] = {0}; - uint8_t cmdp = 0; - bool errors = false; - size_t filenamelen = 0; - uint8_t model_nr = 0xff; - bool save_conversions = false; - while (param_getchar(Cmd, cmdp) != 0x00 && !errors) { - switch (tolower(param_getchar(Cmd, cmdp))) { - case 'h': - return usage_hf_waveshare_loadbmp(); - case 'f': - filenamelen = param_getstr(Cmd, cmdp + 1, filename, FILE_PATH_SIZE); - if (filenamelen > FILE_PATH_SIZE - 5) - filenamelen = FILE_PATH_SIZE - 5; - cmdp += 2; - break; - case 'm': - model_nr = param_get8(Cmd, cmdp + 1); - cmdp += 2; - break; - case 's': - save_conversions = true; - cmdp += 1; - break; - default: - PrintAndLogEx(WARNING, "Unknown parameter: " _RED_("'%c'"), param_getchar(Cmd, cmdp)); - errors = true; - break; - } + char desc[800] = {0}; + for (uint8_t i = 0; i < MEND; i++) { + snprintf(desc + strlen(desc), + sizeof(desc) - strlen(desc), + "hf waveshare loadbmp -f myfile -m %2u -> %s ( %u, %u )\n", + i, + models[i].desc, + models[i].width, + models[i].height + ); } + CLIParserContext *ctx; + CLIParserInit(&ctx, "hf waveshare loadbmp", + "Load BMP file to Waveshare NFC ePaper.", + desc + ); + + char modeldesc[40]; + snprintf(modeldesc, sizeof(modeldesc), "model number [0 - %u] of your tag", MEND - 1); + + void *argtable[] = { + arg_param_begin, + arg_int1("m", NULL, "", modeldesc), + arg_lit0("s", "save", "save dithered version in filename-[n].bmp, only for RGB BMP"), + arg_strx0("f", "file", "", "filename[.bmp] to upload to tag"), + arg_param_end + }; + + CLIExecWithReturn(ctx, Cmd, argtable, false); + + int model_nr = arg_get_int_def(ctx, 1, -1); + bool save_conversions = arg_get_lit(ctx, 2); + + int fnlen = 0; + char filename[FILE_PATH_SIZE] = {0}; + CLIParamStrToBuf(arg_get_str(ctx, 3), (uint8_t*)filename, FILE_PATH_SIZE, &fnlen); + CLIParserFree(ctx); + //Validations - if (filenamelen < 1) { + if (fnlen < 1) { PrintAndLogEx(WARNING, "Missing filename"); - errors = true; + return PM3_EINVARG; } - if (model_nr == 0xff) { + if (model_nr == -1) { PrintAndLogEx(WARNING, "Missing model"); - errors = true; - } else if (model_nr >= MEND) { + return PM3_EINVARG; + } + if (model_nr >= MEND) { PrintAndLogEx(WARNING, "Unknown model"); - errors = true; + return PM3_EINVARG; } - if (errors || cmdp == 0) return usage_hf_waveshare_loadbmp(); + uint8_t *bmp = NULL; uint8_t *black = NULL; From afa8393aa8158aefd751b522f3eac3d96a771340 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Tue, 6 Oct 2020 11:53:48 +0200 Subject: [PATCH 0877/1047] hf waveshare loadbmp -f is mandatory --- client/src/cmdhfwaveshare.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/client/src/cmdhfwaveshare.c b/client/src/cmdhfwaveshare.c index d9392a62e..dcac2e73f 100644 --- a/client/src/cmdhfwaveshare.c +++ b/client/src/cmdhfwaveshare.c @@ -957,7 +957,6 @@ static int start_drawing(uint8_t model_nr, uint8_t *black, uint8_t *red) { return PM3_SUCCESS; } - static int CmdHF14AWSLoadBmp(const char *Cmd) { char desc[800] = {0}; @@ -985,7 +984,7 @@ static int CmdHF14AWSLoadBmp(const char *Cmd) { arg_param_begin, arg_int1("m", NULL, "", modeldesc), arg_lit0("s", "save", "save dithered version in filename-[n].bmp, only for RGB BMP"), - arg_strx0("f", "file", "", "filename[.bmp] to upload to tag"), + arg_strx1("f", "file", "", "filename[.bmp] to upload to tag"), arg_param_end }; @@ -1013,7 +1012,6 @@ static int CmdHF14AWSLoadBmp(const char *Cmd) { return PM3_EINVARG; } - uint8_t *bmp = NULL; uint8_t *black = NULL; uint8_t *red = NULL; From 5304eca07d126b473e603aafa4bda215a7cdb8da Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Tue, 6 Oct 2020 11:58:32 +0200 Subject: [PATCH 0878/1047] hf waveshare loadbmp -f only one --- client/src/cmdhfwaveshare.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/src/cmdhfwaveshare.c b/client/src/cmdhfwaveshare.c index dcac2e73f..224fe9757 100644 --- a/client/src/cmdhfwaveshare.c +++ b/client/src/cmdhfwaveshare.c @@ -984,7 +984,7 @@ static int CmdHF14AWSLoadBmp(const char *Cmd) { arg_param_begin, arg_int1("m", NULL, "", modeldesc), arg_lit0("s", "save", "save dithered version in filename-[n].bmp, only for RGB BMP"), - arg_strx1("f", "file", "", "filename[.bmp] to upload to tag"), + arg_str1("f", "file", "", "filename[.bmp] to upload to tag"), arg_param_end }; From 31909ff1405a190c6d254c77dbe3e36748d0711e Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Tue, 6 Oct 2020 12:01:11 +0200 Subject: [PATCH 0879/1047] text --- client/src/mifare/mifarehost.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/src/mifare/mifarehost.c b/client/src/mifare/mifarehost.c index 5618868fe..ee714d284 100644 --- a/client/src/mifare/mifarehost.c +++ b/client/src/mifare/mifarehost.c @@ -1178,7 +1178,7 @@ int detect_mf_magic(bool is_mfc) { PrintAndLogEx(SUCCESS, "Magic capabilities : " _GREEN_("Gen 2 / CUID")); break; case MAGIC_GEN_3: - PrintAndLogEx(SUCCESS, "Magic capabilities : maybe " _GREEN_("Gen 3 / APDU")); + PrintAndLogEx(SUCCESS, "Magic capabilities : possibly " _GREEN_("Gen 3 / APDU")); break; case MAGIC_GEN_UNFUSED: PrintAndLogEx(SUCCESS, "Magic capabilities : " _GREEN_("Write Once / FUID")); From 64e1498cc73e45ed8755a38e203299d594b07601 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Tue, 6 Oct 2020 12:13:39 +0200 Subject: [PATCH 0880/1047] data scale -> timescale --- client/src/cmddata.c | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/client/src/cmddata.c b/client/src/cmddata.c index faeba709d..47599c5de 100644 --- a/client/src/cmddata.c +++ b/client/src/cmddata.c @@ -1898,27 +1898,27 @@ int CmdSave(const char *Cmd) { return saveFilePM3(filename, GraphBuffer, GraphTraceLen); } -static int CmdScale(const char *Cmd) { +static int CmdTimeScale(const char *Cmd) { CLIParserContext *ctx; - CLIParserInit(&ctx, "data scale", - "Set cursor display scale.\n" - "Setting the scale makes the differential `dt` reading between the yellow and purple markers meaningful.\n" - "once the scale is set, the differential reading between brackets can become a time duration.", - "data scale --sr 125 -u ms -> for LF sampled at 125 kHz. Reading will be in milliseconds\n" - "data scale --sr 1.695 -u us -> for HF sampled at 16 * fc/128. Reading will be in microseconds\n" - "data scale --sr 16 -u ETU -> for HF with 16 samples per ETU (fc/128). Reading will be in ETUs" + CLIParserInit(&ctx, "data timescale", + "Set cursor display timescale.\n" + "Setting the timescale makes the differential `dt` reading between the yellow and purple markers meaningful.\n" + "once the timescale is set, the differential reading between brackets can become a time duration.", + "data timescale --sr 125 -u ms -> for LF sampled at 125 kHz. Reading will be in milliseconds\n" + "data timescale --sr 1.695 -u us -> for HF sampled at 16 * fc/128. Reading will be in microseconds\n" + "data timescale --sr 16 -u ETU -> for HF with 16 samples per ETU (fc/128). Reading will be in ETUs" ); void *argtable[] = { arg_param_begin, - arg_dbl1(NULL, "sr", "", "sets scale according to sampling rate"), + arg_dbl1(NULL, "sr", "", "sets timescale factor according to sampling rate"), arg_str0("u", "unit", "", "time unit to display (max 10 chars)"), arg_param_end }; CLIExecWithReturn(ctx, Cmd, argtable, false); CursorScaleFactor = arg_get_dbl_def(ctx, 1, 1); if (CursorScaleFactor <= 0) { - PrintAndLogEx(FAILED, "bad, can't have negative or zero scale"); + PrintAndLogEx(FAILED, "bad, can't have negative or zero timescale factor"); CursorScaleFactor = 1; } int len = 0; @@ -2328,7 +2328,7 @@ static command_t CommandTable[] = { {"samples", CmdSamples, IfPm3Present, "[512 - 40000] -- Get raw samples for graph window (GraphBuffer)"}, {"save", CmdSave, AlwaysAvailable, "Save trace (from graph window)"}, {"setgraphmarkers", CmdSetGraphMarkers, AlwaysAvailable, "[orange_marker] [blue_marker] (in graph window)"}, - {"scale", CmdScale, AlwaysAvailable, " -- Set cursor display scale in carrier frequency expressed in kHz"}, + {"timescale", CmdTimeScale, AlwaysAvailable, "Set a timescale to get a differential reading between the yellow and purple markers as time duration\n"}, {"setdebugmode", CmdSetDebugMode, AlwaysAvailable, "<0|1|2> -- Set Debugging Level on client side"}, {"shiftgraphzero", CmdGraphShiftZero, AlwaysAvailable, " -- Shift 0 for Graphed wave + or - shift value"}, {"dirthreshold", CmdDirectionalThreshold, AlwaysAvailable, " -- Max rising higher up-thres/ Min falling lower down-thres, keep rest as prev."}, From 422ca0de20734be83c5a056142bb6385d0b33cf8 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Tue, 6 Oct 2020 12:17:32 +0200 Subject: [PATCH 0881/1047] update commands.md --- doc/commands.md | 1558 +++++++++++++++++++++++++---------------------- 1 file changed, 825 insertions(+), 733 deletions(-) diff --git a/doc/commands.md b/doc/commands.md index 487d91e29..94d28dfdf 100644 --- a/doc/commands.md +++ b/doc/commands.md @@ -1,913 +1,1005 @@ # Proxmark3 command dump - + Some commands are available only if a Proxmark3 is actually connected. - + Check column "offline" for their availability. - - -|command |offline |description -|------- |------- |----------- -|`help `|Y |`This help. Use ' help' for details of a particular command.` -|`auto `|N |`Automated detection process for unknown tags` -|`msleep `|Y |`Add a pause in milliseconds` -|`rem `|Y |`Add a text line in log file` -|`quit `|Y |`` -|`exit `|Y |`Exit program` - + +|command |offline |description +|------- |------- |----------- +|`auto `|N |`Automated detection process for unknown tags` +|`clear `|Y |`clear screen` +|`help `|Y |`This help. Use ' help' for details of a particular command.` +|`hints `|Y |`Turn hints on / off` +|`msleep `|Y |`Add a pause in milliseconds` +|`pref `|Y |`Edit preferences` +|`rem `|Y |`Add a text line in log file` +|`quit `|Y |`` +|`exit `|Y |`Exit program` + + ### analyse { Analyse utils... } - -|command |offline |description -|------- |------- |----------- -|`analyse help `|Y |`This help` -|`analyse lcr `|Y |`Generate final byte for XOR LRC` -|`analyse crc `|Y |`Stub method for CRC evaluations` -|`analyse chksum `|Y |`Checksum with adding, masking and one's complement` -|`analyse dates `|Y |`Look for datestamps in a given array of bytes` -|`analyse tea `|Y |`Crypto TEA test` -|`analyse lfsr `|Y |`LFSR tests` -|`analyse a `|Y |`num bits test` -|`analyse nuid `|Y |`create NUID from 7byte UID` -|`analyse demodbuff `|Y |`Load binary string to demodbuffer` - +|command |offline |description +|------- |------- |----------- +|`analyse help `|Y |`This help` +|`analyse lcr `|Y |`Generate final byte for XOR LRC` +|`analyse crc `|Y |`Stub method for CRC evaluations` +|`analyse chksum `|Y |`Checksum with adding, masking and one's complement` +|`analyse dates `|Y |`Look for datestamps in a given array of bytes` +|`analyse tea `|Y |`Crypto TEA test` +|`analyse lfsr `|Y |`LFSR tests` +|`analyse a `|Y |`num bits test` +|`analyse nuid `|Y |`create NUID from 7byte UID` +|`analyse demodbuff `|Y |`Load binary string to demodbuffer` +|`analyse freq `|Y |`Calc wave lengths` + + ### data { Plot window / data buffer manipulation... } - -|command |offline |description -|------- |------- |----------- -|`data help `|Y |`This help` -|`data askedgedetect `|Y |`[threshold] Adjust Graph for manual ASK demod using the length of sample differences to detect the edge of a wave (use 20-45, def:25)` -|`data autocorr `|Y |`[window length] [g] -- Autocorrelation over window - g to save back to GraphBuffer (overwrite)` -|`data biphaserawdecode `|Y |`[offset] [invert<0|1>] [maxErr] -- Biphase decode bin stream in DemodBuffer (offset = 0|1 bits to shift the decode start)` -|`data bin2hex `|Y |` -- Converts binary to hexadecimal` -|`data bitsamples `|N |`Get raw samples as bitstring` -|`data buffclear `|Y |`Clears bigbuff on deviceside and graph window` -|`data convertbitstream `|Y |`Convert GraphBuffer's 0/1 values to 127 / -127` -|`data dec `|Y |`Decimate samples` -|`data detectclock `|Y |`[] Detect ASK, FSK, NRZ, PSK clock rate of wave in GraphBuffer` -|`data fsktonrz `|Y |`Convert fsk2 to nrz wave for alternate fsk demodulating (for weak fsk)` -|`data getbitstream `|Y |`Convert GraphBuffer's >=1 values to 1 and <1 to 0` -|`data grid `|Y |` -- overlay grid on graph window, use zero value to turn off either` -|`data hexsamples `|N |` [] -- Dump big buffer as hex bytes` -|`data hex2bin `|Y |` -- Converts hexadecimal to binary` -|`data hide `|Y |`Hide graph window` -|`data hpf `|Y |`Remove DC offset from trace` -|`data load `|Y |` -- Load trace (to graph window` -|`data ltrim `|Y |` -- Trim samples from left of trace` -|`data rtrim `|Y |` -- Trim samples from right of trace` -|`data mtrim `|Y |` -- Trim out samples from the specified start to the specified stop` -|`data manrawdecode `|Y |`[invert] [maxErr] -- Manchester decode binary stream in DemodBuffer` -|`data norm `|Y |`Normalize max/min to +/-128` -|`data plot `|Y |`Show graph window (hit 'h' in window for keystroke help)` -|`data printdemodbuffer `|Y |`[x] [o] [l] -- print the data in the DemodBuffer - 'x' for hex output` -|`data rawdemod `|Y |`[modulation] ... -see help (h option) -- Demodulate the data in the GraphBuffer and output binary` -|`data samples `|N |`[512 - 40000] -- Get raw samples for graph window (GraphBuffer)` -|`data save `|Y |`Save trace (from graph window)` -|`data setgraphmarkers `|Y |`[orange_marker] [blue_marker] (in graph window)` -|`data scale `|Y |` -- Set cursor display scale in carrier frequency expressed in kHz` -|`data setdebugmode `|Y |`<0|1|2> -- Set Debugging Level on client side` -|`data shiftgraphzero `|Y |` -- Shift 0 for Graphed wave + or - shift value` -|`data dirthreshold `|Y |` -- Max rising higher up-thres/ Min falling lower down-thres, keep rest as prev.` -|`data tune `|N |`Get hw tune samples for graph window` -|`data undec `|Y |`Un-decimate samples by 2` -|`data zerocrossings `|Y |`Count time between zero-crossings` -|`data iir `|Y |`apply IIR buttersworth filter on plotdata` - +|command |offline |description +|------- |------- |----------- +|`data help `|Y |`This help` +|`data askedgedetect `|Y |`[threshold] Adjust Graph for manual ASK demod using the length of sample differences to detect the edge of a wave (use 20-45, def:25)` +|`data autocorr `|Y |`[window length] [g] -- Autocorrelation over window - g to save back to GraphBuffer (overwrite)` +|`data biphaserawdecode `|Y |`[offset] [invert<0|1>] [maxErr] -- Biphase decode bin stream in DemodBuffer (offset = 0|1 bits to shift the decode start)` +|`data bin2hex `|Y |` -- Converts binary to hexadecimal` +|`data bitsamples `|N |`Get raw samples as bitstring` +|`data buffclear `|Y |`Clears bigbuff on deviceside and graph window` +|`data convertbitstream `|Y |`Convert GraphBuffer's 0/1 values to 127 / -127` +|`data dec `|Y |`Decimate samples` +|`data detectclock `|Y |`[] Detect ASK, FSK, NRZ, PSK clock rate of wave in GraphBuffer` +|`data fsktonrz `|Y |`Convert fsk2 to nrz wave for alternate fsk demodulating (for weak fsk)` +|`data getbitstream `|Y |`Convert GraphBuffer's >=1 values to 1 and <1 to 0` +|`data grid `|Y |` -- overlay grid on graph window, use zero value to turn off either` +|`data hexsamples `|N |` [] -- Dump big buffer as hex bytes` +|`data hex2bin `|Y |` -- Converts hexadecimal to binary` +|`data hide `|Y |`Hide graph window` +|`data hpf `|Y |`Remove DC offset from trace` +|`data load `|Y |` -- Load trace (to graph window` +|`data ltrim `|Y |` -- Trim samples from left of trace` +|`data rtrim `|Y |` -- Trim samples from right of trace` +|`data mtrim `|Y |` -- Trim out samples from the specified start to the specified stop` +|`data manrawdecode `|Y |`[invert] [maxErr] -- Manchester decode binary stream in DemodBuffer` +|`data norm `|Y |`Normalize max/min to +/-128` +|`data plot `|Y |`Show graph window (hit 'h' in window for keystroke help)` +|`data printdemodbuffer `|Y |`[x] [o] [l] -- print the data in the DemodBuffer - 'x' for hex output` +|`data rawdemod `|Y |`[modulation] ... -see help (h option) -- Demodulate the data in the GraphBuffer and output binary` +|`data samples `|N |`[512 - 40000] -- Get raw samples for graph window (GraphBuffer)` +|`data save `|Y |`Save trace (from graph window)` +|`data setgraphmarkers `|Y |`[orange_marker] [blue_marker] (in graph window)` +|`data scale `|Y |` -- Set cursor display scale in carrier frequency expressed in kHz` +|`data setdebugmode `|Y |`<0|1|2> -- Set Debugging Level on client side` +|`data shiftgraphzero `|Y |` -- Shift 0 for Graphed wave + or - shift value` +|`data dirthreshold `|Y |` -- Max rising higher up-thres/ Min falling lower down-thres, keep rest as prev.` +|`data tune `|N |`Get hw tune samples for graph window` +|`data undec `|Y |`Un-decimate samples by 2` +|`data zerocrossings `|Y |`Count time between zero-crossings` +|`data iir `|Y |`apply IIR buttersworth filter on plotdata` +|`data ndef `|Y |`Decode NDEF records` + + ### emv { EMV ISO-14443 / ISO-7816... } - -|command |offline |description -|------- |------- |----------- -|`emv help `|Y |`This help` -|`emv exec `|N |`Executes EMV contactless transaction.` -|`emv pse `|N |`Execute PPSE. It selects 2PAY.SYS.DDF01 or 1PAY.SYS.DDF01 directory.` -|`emv search `|N |`Try to select all applets from applets list and print installed applets.` -|`emv select `|N |`Select applet.` -|`emv gpo `|N |`Execute GetProcessingOptions.` -|`emv readrec `|N |`Read files from card.` -|`emv genac `|N |`Generate ApplicationCryptogram.` -|`emv challenge `|N |`Generate challenge.` -|`emv intauth `|N |`Internal authentication.` -|`emv scan `|N |`Scan EMV card and save it contents to json file for emulator.` -|`emv test `|Y |`Crypto logic test.` -|`emv list `|Y |`List ISO7816 history` -|`emv roca `|N |`Extract public keys and run ROCA test` - +|command |offline |description +|------- |------- |----------- +|`emv help `|Y |`This help` +|`emv exec `|N |`Executes EMV contactless transaction.` +|`emv pse `|N |`Execute PPSE. It selects 2PAY.SYS.DDF01 or 1PAY.SYS.DDF01 directory.` +|`emv search `|N |`Try to select all applets from applets list and print installed applets.` +|`emv select `|N |`Select applet.` +|`emv gpo `|N |`Execute GetProcessingOptions.` +|`emv readrec `|N |`Read files from card.` +|`emv genac `|N |`Generate ApplicationCryptogram.` +|`emv challenge `|N |`Generate challenge.` +|`emv intauth `|N |`Internal authentication.` +|`emv scan `|N |`Scan EMV card and save it contents to json file for emulator.` +|`emv test `|Y |`Crypto logic test.` +|`emv list `|Y |`List ISO7816 history` +|`emv roca `|N |`Extract public keys and run ROCA test` + + ### hf { High frequency commands... } - -|command |offline |description -|------- |------- |----------- -|`hf help `|Y |`This help` -|`hf list `|Y |`List protocol data in trace buffer` -|`hf tune `|N |`Continuously measure HF antenna tuning` -|`hf search `|Y |`Search for known HF tags` -|`hf sniff `|N |` Generic HF Sniff` - +|command |offline |description +|------- |------- |----------- +|`hf help `|Y |`This help` +|`hf list `|Y |`List protocol data in trace buffer` +|`hf plot `|N |`Plot signal` +|`hf tune `|N |`Continuously measure HF antenna tuning` +|`hf search `|Y |`Search for known HF tags` +|`hf sniff `|N |` Generic HF Sniff` + + ### hf 14a { ISO14443A RFIDs... } - -|command |offline |description -|------- |------- |----------- -|`hf 14a help `|Y |`This help` -|`hf 14a list `|Y |`List ISO 14443-a history` -|`hf 14a info `|N |`Tag information` -|`hf 14a reader `|N |`Act like an ISO14443-a reader` -|`hf 14a cuids `|N |` Collect n>0 ISO14443-a UIDs in one go` -|`hf 14a sim `|N |` -- Simulate ISO 14443-a tag` -|`hf 14a sniff `|N |`sniff ISO 14443-a traffic` -|`hf 14a apdu `|N |`Send ISO 14443-4 APDU to tag` -|`hf 14a chaining `|N |`Control ISO 14443-4 input chaining` -|`hf 14a raw `|N |`Send raw hex data to tag` -|`hf 14a antifuzz `|N |`Fuzzing the anticollision phase. Warning! Readers may react strange` - +|command |offline |description +|------- |------- |----------- +|`hf 14a help `|Y |`This help` +|`hf 14a list `|Y |`List ISO 14443-a history` +|`hf 14a info `|N |`Tag information` +|`hf 14a reader `|N |`Act like an ISO14443-a reader` +|`hf 14a cuids `|N |` Collect n>0 ISO14443-a UIDs in one go` +|`hf 14a sim `|N |` -- Simulate ISO 14443-a tag` +|`hf 14a sniff `|N |`sniff ISO 14443-a traffic` +|`hf 14a apdu `|N |`Send ISO 14443-4 APDU to tag` +|`hf 14a chaining `|N |`Control ISO 14443-4 input chaining` +|`hf 14a raw `|N |`Send raw hex data to tag` +|`hf 14a antifuzz `|N |`Fuzzing the anticollision phase. Warning! Readers may react strange` +|`hf 14a config `|N |`Configure 14a settings (use with caution)` + + ### hf 14b { ISO14443B RFIDs... } - -|command |offline |description -|------- |------- |----------- -|`hf 14b help `|Y |`This help` -|`hf 14b dump `|N |`Read all memory pages of an ISO14443-B tag, save to file` -|`hf 14b info `|N |`Tag information` -|`hf 14b list `|Y |`List ISO 14443B history` -|`hf 14b raw `|N |`Send raw hex data to tag` -|`hf 14b reader `|N |`Act as a 14443B reader to identify a tag` -|`hf 14b sim `|N |`Fake ISO 14443B tag` -|`hf 14b sniff `|N |`Eavesdrop ISO 14443B` -|`hf 14b sriread `|N |`Read contents of a SRI512 | SRIX4K tag` -|`hf 14b sriwrite `|N |`Write data to a SRI512 | SRIX4K tag` - +|command |offline |description +|------- |------- |----------- +|`hf 14b help `|Y |`This help` +|`hf 14b apdu `|N |`Send ISO 14443-4 APDU to tag` +|`hf 14b dump `|N |`Read all memory pages of an ISO14443-B tag, save to file` +|`hf 14b info `|N |`Tag information` +|`hf 14b list `|Y |`List ISO 14443B history` +|`hf 14b ndef `|N |`Read NDEF file on tag` +|`hf 14b raw `|N |`Send raw hex data to tag` +|`hf 14b reader `|N |`Act as a 14443B reader to identify a tag` +|`hf 14b sim `|N |`Fake ISO 14443B tag` +|`hf 14b sniff `|N |`Eavesdrop ISO 14443B` +|`hf 14b sriread `|N |`Read contents of a SRI512 | SRIX4K tag` +|`hf 14b sriwrite `|N |`Write data to a SRI512 | SRIX4K tag` + + ### hf 15 { ISO15693 RFIDs... } - -|command |offline |description -|------- |------- |----------- -|`hf 15 help `|Y |`This help` -|`hf 15 demod `|Y |`Demodulate ISO15693 from tag` -|`hf 15 dump `|N |`Read all memory pages of an ISO15693 tag, save to file` -|`hf 15 findafi `|N |`Brute force AFI of an ISO15693 tag` -|`hf 15 writeafi `|N |`Writes the AFI on an ISO15693 tag` -|`hf 15 writedsfid `|N |`Writes the DSFID on an ISO15693 tag` -|`hf 15 info `|N |`Tag information` -|`hf 15 list `|Y |`List ISO15693 history` -|`hf 15 raw `|N |`Send raw hex data to tag` -|`hf 15 reader `|N |`Act like an ISO15693 reader` -|`hf 15 record `|N |`Record Samples (ISO15693)` -|`hf 15 restore `|N |`Restore from file to all memory pages of an ISO15693 tag` -|`hf 15 sim `|N |`Fake an ISO15693 tag` -|`hf 15 samples `|N |`Acquire Samples as Reader (enables carrier, sends inquiry)` -|`hf 15 read `|N |`Read a block` -|`hf 15 write `|N |`Write a block` -|`hf 15 readmulti `|N |`Reads multiple Blocks` -|`hf 15 csetuid `|N |`Set UID for magic Chinese card` - +|command |offline |description +|------- |------- |----------- +|`hf 15 help `|Y |`This help` +|`hf 15 list `|Y |`List ISO15693 history` +|`hf 15 demod `|Y |`Demodulate ISO15693 from tag` +|`hf 15 dump `|N |`Read all memory pages of an ISO15693 tag, save to file` +|`hf 15 info `|N |`Tag information` +|`hf 15 sniff `|N |`Sniff ISO15693 traffic` +|`hf 15 raw `|N |`Send raw hex data to tag` +|`hf 15 read `|N |`Read a block` +|`hf 15 reader `|N |`Act like an ISO15693 reader` +|`hf 15 readmulti `|N |`Reads multiple Blocks` +|`hf 15 restore `|N |`Restore from file to all memory pages of an ISO15693 tag` +|`hf 15 samples `|N |`Acquire Samples as Reader (enables carrier, sends inquiry)` +|`hf 15 sim `|N |`Fake an ISO15693 tag` +|`hf 15 write `|N |`Write a block` +|`hf 15 findafi `|N |`Brute force AFI of an ISO15693 tag` +|`hf 15 writeafi `|N |`Writes the AFI on an ISO15693 tag` +|`hf 15 writedsfid `|N |`Writes the DSFID on an ISO15693 tag` +|`hf 15 csetuid `|N |`Set UID for magic Chinese card` + + ### hf epa { German Identification Card... } - -|command |offline |description -|------- |------- |----------- -|`hf epa help `|Y |`This help` -|`hf epa cnonces `|N |` Acquire n>0 encrypted PACE nonces of size m>0 with d sec pauses` -|`hf epa preplay `|N |` Perform PACE protocol by replaying given APDUs` - +|command |offline |description +|------- |------- |----------- +|`hf epa help `|Y |`This help` +|`hf epa cnonces `|N |` Acquire n>0 encrypted PACE nonces of size m>0 with d sec pauses` +|`hf epa preplay `|N |` Perform PACE protocol by replaying given APDUs` + + ### hf felica { ISO18092 / Felica RFIDs... } - -|command |offline |description -|------- |------- |----------- -|`hf felica help `|Y |`This help` -|`hf felica list `|Y |`List ISO 18092/FeliCa history` -|`hf felica reader `|N |`Act like an ISO18092/FeliCa reader` -|`hf felica sniff `|N |`Sniff ISO 18092/FeliCa traffic` -|`hf felica raw `|N |`Send raw hex data to tag` -|`hf felica rqservice `|N |`verify the existence of Area and Service, and to acquire Key Version.` -|`hf felica rqresponse `|N |`verify the existence of a card and its Mode.` -|`hf felica rdunencrypted`|N |`read Block Data from authentication-not-required Service.` -|`hf felica wrunencrypted`|N |`write Block Data to an authentication-not-required Service.` -|`hf felica scsvcode `|N |`acquire Area Code and Service Code.` -|`hf felica rqsyscode `|N |`acquire System Code registered to the card.` -|`hf felica auth1 `|N |`authenticate a card. Start mutual authentication with Auth1` -|`hf felica auth2 `|N |`allow a card to authenticate a Reader/Writer. Complete mutual authentication` -|`hf felica read `|N |`read Block Data from authentication-required Service.` -|`hf felica rqspecver `|N |`acquire the version of card OS.` -|`hf felica resetmode `|N |`reset Mode to Mode 0.` -|`hf felica litesim `|N |` - only reply to poll request` -|`hf felica litedump `|N |`Wait for and try dumping FelicaLite` - -### hf legic +|command |offline |description +|------- |------- |----------- +|`hf felica help `|Y |`This help` +|`hf felica list `|Y |`List ISO 18092/FeliCa history` +|`hf felica reader `|N |`Act like an ISO18092/FeliCa reader` +|`hf felica sniff `|N |`Sniff ISO 18092/FeliCa traffic` +|`hf felica raw `|N |`Send raw hex data to tag` +|`hf felica rdunencrypted`|N |`read Block Data from authentication-not-required Service.` +|`hf felica wrunencrypted`|N |`write Block Data to an authentication-not-required Service.` +|`hf felica rqservice `|N |`verify the existence of Area and Service, and to acquire Key Version.` +|`hf felica rqresponse `|N |`verify the existence of a card and its Mode.` +|`hf felica scsvcode `|N |`acquire Area Code and Service Code.` +|`hf felica rqsyscode `|N |`acquire System Code registered to the card.` +|`hf felica auth1 `|N |`authenticate a card. Start mutual authentication with Auth1` +|`hf felica auth2 `|N |`allow a card to authenticate a Reader/Writer. Complete mutual authentication` +|`hf felica rqspecver `|N |`acquire the version of card OS.` +|`hf felica resetmode `|N |`reset Mode to Mode 0.` +|`hf felica litesim `|N |` - only reply to poll request` +|`hf felica litedump `|N |`Wait for and try dumping FelicaLite` - { LEGIC RFIDs... } - -|command |offline |description -|------- |------- |----------- -|`hf legic help `|Y |`This help` -|`hf legic reader `|N |`LEGIC Prime Reader UID and tag info` -|`hf legic info `|N |`Display deobfuscated and decoded LEGIC Prime tag data` -|`hf legic dump `|N |`Dump LEGIC Prime tag to binary file` -|`hf legic restore `|N |`Restore a dump file onto a LEGIC Prime tag` -|`hf legic rdmem `|N |`Read bytes from a LEGIC Prime tag` -|`hf legic sim `|N |`Start tag simulator` -|`hf legic write `|N |`Write data to a LEGIC Prime tag` -|`hf legic crc `|Y |`Calculate Legic CRC over given bytes` -|`hf legic eload `|N |`Load binary dump to emulator memory` -|`hf legic esave `|N |`Save emulator memory to binary file` -|`hf legic list `|Y |`List LEGIC history` -|`hf legic wipe `|N |`Wipe a LEGIC Prime tag` - -### hf iclass - - { ICLASS RFIDs... } - -|command |offline |description -|------- |------- |----------- -|`hf iclass help `|Y |`This help` -|`hf iclass calcnewkey `|Y |`[options..] Calc diversified keys (blocks 3 & 4) to write new keys` -|`hf iclass chk `|Y |`[options..] Check keys` -|`hf iclass clone `|N |`[options..] Restore a dump file onto a iClass tag` -|`hf iclass decrypt `|Y |`[options..] Decrypt given block data or tag dump file` -|`hf iclass dump `|N |`[options..] Dump iClass tag to file` -|`hf iclass eload `|N |`[f ] Load iClass dump file into emulator memory` -|`hf iclass encrypt `|Y |`[options..] Encrypt given block data` -|`hf iclass info `|Y |` Tag information` -|`hf iclass list `|Y |` List iClass history` -|`hf iclass loclass `|Y |`[options..] Use loclass to perform bruteforce reader attack` -|`hf iclass lookup `|Y |`[options..] Uses authentication trace to check for key in dictionary file` -|`hf iclass managekeys `|Y |`[options..] Manage keys to use with iClass` -|`hf iclass permutekey `|N |` Permute function from 'heart of darkness' paper` -|`hf iclass rdbl `|N |`[options..] Read iClass block` -|`hf iclass reader `|N |` Act like an iClass reader` -|`hf iclass readtagfile `|Y |`[options..] Display content from tag dump file` -|`hf iclass replay `|N |` Read iClass tag via replay attack` -|`hf iclass sim `|N |`[options..] Simulate iClass tag` -|`hf iclass sniff `|N |` Eavesdrop iClass communication` -|`hf iclass wrbl `|N |`[options..] Write iClass block` - - -### hf mf - - { MIFARE RFIDs... } - -|command |offline |description -|------- |------- |----------- -|`hf mf help `|Y |`This help` -|`hf mf list `|Y |`List MIFARE history` -|`hf mf darkside `|N |`Darkside attack` -|`hf mf nested `|N |`Nested attack` -|`hf mf hardnested `|Y |`Nested attack for hardened MIFARE Classic cards` -|`hf mf autopwn `|N |`Automatic key recovery tool for MIFARE Classic` -|`hf mf nack `|N |`Test for MIFARE NACK bug` -|`hf mf chk `|N |`Check keys` -|`hf mf fchk `|N |`Check keys fast, targets all keys on card` -|`hf mf decrypt `|Y |`[nt] [ar_enc] [at_enc] [data] - to decrypt sniff or trace` -|`hf mf rdbl `|N |`Read MIFARE classic block` -|`hf mf rdsc `|N |`Read MIFARE classic sector` -|`hf mf dump `|N |`Dump MIFARE classic tag to binary file` -|`hf mf restore `|N |`Restore MIFARE classic binary file to BLANK tag` -|`hf mf wrbl `|N |`Write MIFARE classic block` -|`hf mf setmod `|N |`Set MIFARE Classic EV1 load modulation strength` -|`hf mf auth4 `|N |`ISO14443-4 AES authentication` -|`hf mf sim `|N |`Simulate MIFARE card` -|`hf mf eclr `|N |`Clear simulator memory` -|`hf mf egetblk `|N |`Get simulator memory block` -|`hf mf egetsc `|N |`Get simulator memory sector` -|`hf mf eset `|N |`Set simulator memory block` -|`hf mf eload `|N |`Load from file emul dump` -|`hf mf esave `|N |`Save to file emul dump` -|`hf mf ecfill `|N |`Fill simulator memory with help of keys from simulator` -|`hf mf ekeyprn `|N |`Print keys from simulator memory` -|`hf mf eview `|N |`View simulator memory` -|`hf mf csetuid `|N |`Set UID (magic chinese card)` -|`hf mf cwipe `|N |`Wipe card to default UID/Sectors/Keys` -|`hf mf csetblk `|N |`Write block (magic chinese card)` -|`hf mf cgetblk `|N |`Read block (magic chinese card)` -|`hf mf cgetsc `|N |`Read sector (magic chinese card)` -|`hf mf cload `|N |`Load dump (magic chinese card)` -|`hf mf csave `|N |`Save dump from magic chinese card into file or emulator` -|`hf mf cview `|N |`View card memory (magic chinese card)` -|`hf mf mad `|N |`Checks and prints MAD` -|`hf mf ndef `|N |`Prints NDEF records from card` -|`hf mf ice `|N |`collect MIFARE Classic nonces to file` - - -### hf mfp - - { MIFARE Plus RFIDs... } - -|command |offline |description -|------- |------- |----------- -|`hf mfp help `|Y |`This help` -|`hf mfp info `|N |`Info about Mifare Plus tag` -|`hf mfp wrp `|N |`Write Perso command` -|`hf mfp initp `|N |`Fills all the card's keys` -|`hf mfp commitp `|N |`Move card to SL1 or SL3 mode` -|`hf mfp auth `|N |`Authentication` -|`hf mfp rdbl `|N |`Read blocks` -|`hf mfp rdsc `|N |`Read sectors` -|`hf mfp wrbl `|N |`Write blocks` -|`hf mfp chk `|N |`Check keys` -|`hf mfp mad `|N |`Checks and prints MAD` -|`hf mfp ndef `|N |`Prints NDEF records from card` - - -### hf mfu - - { MIFARE Ultralight RFIDs... } - -|command |offline |description -|------- |------- |----------- -|`hf mfu help `|Y |`This help` -|`hf mfu info `|N |`Tag information` -|`hf mfu dump `|N |`Dump Ultralight / Ultralight-C / NTAG tag to binary file` -|`hf mfu restore `|N |`Restore a dump onto a MFU MAGIC tag` -|`hf mfu eload `|N |`load Ultralight .eml dump file into emulator memory` -|`hf mfu rdbl `|N |`Read block` -|`hf mfu wrbl `|N |`Write block` -|`hf mfu cauth `|N |`Authentication - Ultralight C` -|`hf mfu setpwd `|N |`Set 3des password - Ultralight-C` -|`hf mfu setuid `|N |`Set UID - MAGIC tags only` -|`hf mfu sim `|N |`Simulate Ultralight from emulator memory` -|`hf mfu gen `|Y |`Generate 3des mifare diversified keys` -|`hf mfu pwdgen `|Y |`Generate pwd from known algos` -|`hf mfu otptear `|N |`Tear-off test on OTP bits` - - -### hf mfdes - - { MIFARE Desfire RFIDs... } - -|command |offline |description -|------- |------- |----------- -|`hf mfdes help `|Y |`This help` -|`hf mfdes info `|N |`Tag information` -|`hf mfdes enum `|N |`Tries enumerate all applications` -|`hf mfdes auth `|N |`Tries a MIFARE DesFire Authentication` - - -### hf topaz - - { TOPAZ (NFC Type 1) RFIDs... } - -|command |offline |description -|------- |------- |----------- -|`hf topaz help `|Y |`This help` -|`hf topaz reader `|N |`Act like a Topaz reader` -|`hf topaz sim `|N |` -- Simulate Topaz tag` -|`hf topaz sniff `|N |`Sniff Topaz reader-tag communication` -|`hf topaz raw `|N |`Send raw hex data to tag` -|`hf topaz list `|Y |`List Topaz history` - - ### hf fido { FIDO and FIDO2 authenticators... } - -|command |offline |description -|------- |------- |----------- -|`hf fido help `|Y |`This help.` -|`hf fido info `|N |`Info about FIDO tag.` -|`hf fido reg `|N |`FIDO U2F Registration Message.` -|`hf fido auth `|N |`FIDO U2F Authentication Message.` -|`hf fido make `|N |`FIDO2 MakeCredential command.` -|`hf fido assert `|N |`FIDO2 GetAssertion command.` - +|command |offline |description +|------- |------- |----------- +|`hf fido help `|Y |`This help.` +|`hf fido info `|N |`Info about FIDO tag.` +|`hf fido reg `|N |`FIDO U2F Registration Message.` +|`hf fido auth `|N |`FIDO U2F Authentication Message.` +|`hf fido make `|N |`FIDO2 MakeCredential command.` +|`hf fido assert `|N |`FIDO2 GetAssertion command.` + + +### hf iclass + + { ICLASS RFIDs... } + +|command |offline |description +|------- |------- |----------- +|`hf iclass help `|Y |`This help` +|`hf iclass dump `|N |`[options..] Dump Picopass / iCLASS tag to file` +|`hf iclass info `|Y |` Tag information` +|`hf iclass list `|Y |` List iclass history` +|`hf iclass rdbl `|N |`[options..] Read Picopass / iCLASS block` +|`hf iclass reader `|N |` Act like an Picopass / iCLASS reader` +|`hf iclass restore `|N |`[options..] Restore a dump file onto a Picopass / iCLASS tag` +|`hf iclass sniff `|N |` Eavesdrop Picopass / iCLASS communication` +|`hf iclass wrbl `|N |`[options..] Write Picopass / iCLASS block` +|`hf iclass chk `|Y |`[options..] Check keys` +|`hf iclass loclass `|Y |`[options..] Use loclass to perform bruteforce reader attack` +|`hf iclass lookup `|Y |`[options..] Uses authentication trace to check for key in dictionary file` +|`hf iclass replay `|N |` Read Picopass / iCLASS tag via replay attack` +|`hf iclass sim `|N |`[options..] Simulate iCLASS tag` +|`hf iclass eload `|N |`[f ] Load Picopass / iCLASS dump file into emulator memory` +|`hf iclass esave `|N |`[f ] Save emulator memory to file` +|`hf iclass eview `|N |`[options..] View emulator memory` +|`hf iclass calcnewkey `|Y |`[options..] Calc diversified keys (blocks 3 & 4) to write new keys` +|`hf iclass encrypt `|Y |`[options..] Encrypt given block data` +|`hf iclass decrypt `|Y |`[options..] Decrypt given block data or tag dump file` +|`hf iclass managekeys `|Y |`[options..] Manage keys to use with iclass commands` +|`hf iclass permutekey `|N |` Permute function from 'heart of darkness' paper` +|`hf iclass view `|Y |`[options..] Display content from tag dump file` + + +### hf legic + + { LEGIC RFIDs... } + +|command |offline |description +|------- |------- |----------- +|`hf legic help `|Y |`This help` +|`hf legic list `|Y |`List LEGIC history` +|`hf legic reader `|N |`LEGIC Prime Reader UID and tag info` +|`hf legic info `|N |`Display deobfuscated and decoded LEGIC Prime tag data` +|`hf legic dump `|N |`Dump LEGIC Prime tag to binary file` +|`hf legic restore `|N |`Restore a dump file onto a LEGIC Prime tag` +|`hf legic rdbl `|N |`Read bytes from a LEGIC Prime tag` +|`hf legic sim `|N |`Start tag simulator` +|`hf legic wrbl `|N |`Write data to a LEGIC Prime tag` +|`hf legic crc `|Y |`Calculate Legic CRC over given bytes` +|`hf legic eload `|Y |`Load binary dump to emulator memory` +|`hf legic esave `|Y |`Save emulator memory to binary file` +|`hf legic wipe `|N |`Wipe a LEGIC Prime tag` + + +### hf lto + + { LTO Cartridge Memory RFIDs... } + +|command |offline |description +|------- |------- |----------- +|`hf lto help `|Y |`This help` +|`hf lto dump `|N |`Dump LTO-CM tag to file` +|`hf lto restore `|N |`Restore dump file to LTO-CM tag` +|`hf lto info `|N |`Tag information` +|`hf lto rdbl `|N |`Read block` +|`hf lto wrbl `|N |`Write block` +|`hf lto list `|Y |`List LTO-CM history` + + +### hf mf + + { MIFARE RFIDs... } + +|command |offline |description +|------- |------- |----------- +|`hf mf help `|Y |`This help` +|`hf mf list `|Y |`List MIFARE history` +|`hf mf darkside `|N |`Darkside attack` +|`hf mf nested `|N |`Nested attack` +|`hf mf hardnested `|Y |`Nested attack for hardened MIFARE Classic cards` +|`hf mf staticnested `|N |`Nested attack against static nonce MIFARE Classic cards` +|`hf mf autopwn `|N |`Automatic key recovery tool for MIFARE Classic` +|`hf mf nack `|N |`Test for MIFARE NACK bug` +|`hf mf chk `|N |`Check keys` +|`hf mf fchk `|N |`Check keys fast, targets all keys on card` +|`hf mf decrypt `|Y |`[nt] [ar_enc] [at_enc] [data] - to decrypt sniff or trace` +|`hf mf auth4 `|N |`ISO14443-4 AES authentication` +|`hf mf dump `|N |`Dump MIFARE Classic tag to binary file` +|`hf mf mad `|N |`Checks and prints MAD` +|`hf mf ndef `|N |`Prints NDEF records from card` +|`hf mf personalize `|N |`Personalize UID (MIFARE Classic EV1 only)` +|`hf mf rdbl `|N |`Read MIFARE Classic block` +|`hf mf rdsc `|N |`Read MIFARE Classic sector` +|`hf mf restore `|N |`Restore MIFARE Classic binary file to BLANK tag` +|`hf mf setmod `|N |`Set MIFARE Classic EV1 load modulation strength` +|`hf mf wrbl `|N |`Write MIFARE Classic block` +|`hf mf sim `|N |`Simulate MIFARE card` +|`hf mf ecfill `|N |`Fill simulator memory with help of keys from simulator` +|`hf mf eclr `|N |`Clear simulator memory` +|`hf mf egetblk `|N |`Get simulator memory block` +|`hf mf egetsc `|N |`Get simulator memory sector` +|`hf mf ekeyprn `|N |`Print keys from simulator memory` +|`hf mf eload `|N |`Load from file emul dump` +|`hf mf esave `|N |`Save to file emul dump` +|`hf mf eset `|N |`Set simulator memory block` +|`hf mf eview `|N |`View emul memory` +|`hf mf cgetblk `|N |`Read block` +|`hf mf cgetsc `|N |`Read sector` +|`hf mf cload `|N |`Load dump` +|`hf mf csave `|N |`Save dump from card into file or emulator` +|`hf mf csetblk `|N |`Write block` +|`hf mf csetuid `|N |`Set UID` +|`hf mf cview `|N |`view card` +|`hf mf cwipe `|N |`Wipe card to default UID/Sectors/Keys` +|`hf mf gen3uid `|N |`Set UID without manufacturer block` +|`hf mf gen3blk `|N |`Overwrite full manufacturer block` +|`hf mf gen3freeze `|N |`Perma lock further UID changes` +|`hf mf ice `|N |`collect MIFARE Classic nonces to file` + + +### hf mfp + + { MIFARE Plus RFIDs... } + +|command |offline |description +|------- |------- |----------- +|`hf mfp help `|Y |`This help` +|`hf mfp info `|N |`Info about Mifare Plus tag` +|`hf mfp wrp `|N |`Write Perso command` +|`hf mfp initp `|N |`Fills all the card's keys` +|`hf mfp commitp `|N |`Move card to SL1 or SL3 mode` +|`hf mfp auth `|N |`Authentication` +|`hf mfp rdbl `|N |`Read blocks` +|`hf mfp rdsc `|N |`Read sectors` +|`hf mfp wrbl `|N |`Write blocks` +|`hf mfp chk `|N |`Check keys` +|`hf mfp mad `|N |`Checks and prints MAD` +|`hf mfp ndef `|N |`Prints NDEF records from card` + + +### hf mfu + + { MIFARE Ultralight RFIDs... } + +|command |offline |description +|------- |------- |----------- +|`hf mfu help `|Y |`This help` +|`hf mfu info `|N |`Tag information` +|`hf mfu dump `|N |`Dump Ultralight / Ultralight-C / NTAG tag to binary file` +|`hf mfu restore `|N |`Restore a dump onto a MFU MAGIC tag` +|`hf mfu eload `|N |`load Ultralight .eml dump file into emulator memory` +|`hf mfu rdbl `|N |`Read block` +|`hf mfu wrbl `|N |`Write block` +|`hf mfu cauth `|N |`Authentication - Ultralight C` +|`hf mfu setpwd `|N |`Set 3des password - Ultralight-C` +|`hf mfu setuid `|N |`Set UID - MAGIC tags only` +|`hf mfu sim `|N |`Simulate Ultralight from emulator memory` +|`hf mfu gen `|Y |`Generate 3des mifare diversified keys` +|`hf mfu pwdgen `|Y |`Generate pwd from known algos` +|`hf mfu otptear `|N |`Tear-off test on OTP bits` +|`hf mfu ndef `|N |`Prints NDEF records from card` + + +### hf mfdes + + { MIFARE Desfire RFIDs... } + +|command |offline |description +|------- |------- |----------- +|`hf mfdes help `|Y |`This help` +|`hf mfdes info `|N |`Tag information` +|`hf mfdes list `|Y |`List DESFire (ISO 14443A) history` +|`hf mfdes enum `|N |`Tries enumerate all applications` +|`hf mfdes auth `|N |`Tries a MIFARE DesFire Authentication` +|`hf mfdes getuid `|N |`Get random uid` +|`hf mfdes selectaid `|N |`Select Application ID` +|`hf mfdes createaid `|N |`Create Application ID` +|`hf mfdes deleteaid `|N |`Delete Application ID` +|`hf mfdes createfile `|N |`Create Standard/Backup File` +|`hf mfdes createvaluefile`|N |`Create Value File` +|`hf mfdes createrecordfile`|N |`Create Linear/Cyclic Record File` +|`hf mfdes deletefile `|N |`Create Delete File` +|`hf mfdes clearfile `|N |`Clear record File` +|`hf mfdes readdata `|N |`Read data from standard/backup/record file` +|`hf mfdes writedata `|N |`Write data to standard/backup/record file` +|`hf mfdes getvalue `|N |`Get value of file` +|`hf mfdes changevalue `|N |`Write value of a value file (credit/debit/clear)` +|`hf mfdes changekey `|N |`Change Key` +|`hf mfdes formatpicc `|N |`Format PICC` +|`hf mfdes dump `|N |`Dump all files` +|`hf mfdes chk `|N |`Check keys` + + +### hf st + + { ST Rothult RFIDs... } + +|command |offline |description +|------- |------- |----------- +|`hf st help `|Y |`This help` +|`hf st info `|N |`Tag information` +|`hf st list `|Y |`List ISO 14443A/7816 history` +|`hf st ndef `|Y |`read NDEF file on tag` +|`hf st protect `|N |`change protection on tag` +|`hf st pwd `|N |`change password on tag` +|`hf st sim `|N |`Fake ISO 14443A/ST tag` + + ### hf thinfilm { Thinfilm RFIDs... } - -|command |offline |description -|------- |------- |----------- -|`hf thinfilm help `|Y |`This help` -|`hf thinfilm info `|N |`Tag information` -|`hf thinfilm list `|Y |`List NFC Barcode / Thinfilm history - not correct` -|`hf thinfilm sim `|N |`Fake Thinfilm tag` - +|command |offline |description +|------- |------- |----------- +|`hf thinfilm help `|Y |`This help` +|`hf thinfilm info `|N |`Tag information` +|`hf thinfilm list `|Y |`List NFC Barcode / Thinfilm history - not correct` +|`hf thinfilm sim `|N |`Fake Thinfilm tag` + + +### hf topaz + + { TOPAZ (NFC Type 1) RFIDs... } + +|command |offline |description +|------- |------- |----------- +|`hf topaz help `|Y |`This help` +|`hf topaz list `|Y |`List Topaz history` +|`hf topaz info `|N |`Tag information` +|`hf topaz reader `|N |`Act like a Topaz reader` +|`hf topaz sim `|N |` -- Simulate Topaz tag` +|`hf topaz sniff `|N |`Sniff Topaz reader-tag communication` +|`hf topaz raw `|N |`Send raw hex data to tag` + + +### hf waveshare + + { Waveshare NFC ePaper... } + +|command |offline |description +|------- |------- |----------- +|`hf waveshare help `|Y |`This help` +|`hf waveshare loadbmp `|N |`Load BMP file to Waveshare NFC ePaper` + + ### hw { Hardware commands... } - -|command |offline |description -|------- |------- |----------- -|`hw help `|Y |`This help` -|`hw connect `|Y |`connect Proxmark3 to serial port` -|`hw dbg `|N |`Set Proxmark3 debug level` -|`hw detectreader `|N |`['l'|'h'] -- Detect external reader field (option 'l' or 'h' to limit to LF or HF)` -|`hw fpgaoff `|N |`Set FPGA off` -|`hw lcd `|N |` -- Send command/data to LCD` -|`hw lcdreset `|N |`Hardware reset LCD` -|`hw ping `|N |`Test if the Proxmark3 is responsive` -|`hw readmem `|N |`[address] -- Read memory at decimal address from flash` -|`hw reset `|N |`Reset the Proxmark3` -|`hw setlfdivisor `|N |`<19 - 255> -- Drive LF antenna at 12MHz/(divisor+1)` -|`hw setmux `|N |`Set the ADC mux to a specific value` -|`hw standalone `|N |`Jump to the standalone mode` -|`hw status `|N |`Show runtime status information about the connected Proxmark3` -|`hw tia `|N |`Trigger a Timing Interval Acquisition to re-adjust the RealTimeCounter divider` -|`hw tune `|N |`Measure antenna tuning` -|`hw version `|N |`Show version information about the connected Proxmark3` - +|command |offline |description +|------- |------- |----------- +|`hw help `|Y |`This help` +|`hw connect `|Y |`connect Proxmark3 to serial port` +|`hw dbg `|N |`Set Proxmark3 debug level` +|`hw detectreader `|N |`['l'|'h'] -- Detect external reader field (option 'l' or 'h' to limit to LF or HF)` +|`hw fpgaoff `|N |`Set FPGA off` +|`hw lcd `|N |` -- Send command/data to LCD` +|`hw lcdreset `|N |`Hardware reset LCD` +|`hw ping `|N |`Test if the Proxmark3 is responsive` +|`hw readmem `|N |`[address] -- Read memory at decimal address from flash` +|`hw reset `|N |`Reset the Proxmark3` +|`hw setlfdivisor `|N |`<19 - 255> -- Drive LF antenna at 12MHz/(divisor+1)` +|`hw setmux `|N |`Set the ADC mux to a specific value` +|`hw standalone `|N |`Jump to the standalone mode` +|`hw status `|N |`Show runtime status information about the connected Proxmark3` +|`hw tia `|N |`Trigger a Timing Interval Acquisition to re-adjust the RealTimeCounter divider` +|`hw tune `|N |`Measure antenna tuning` +|`hw version `|N |`Show version information about the connected Proxmark3` + + ### lf { Low frequency commands... } - -|command |offline |description -|------- |------- |----------- -|`lf help `|Y |`This help` -|`lf config `|N |`Get/Set config for LF sampling, bit/sample, decimation, frequency` -|`lf cmdread `|N |`Modulate LF reader field to send command before read (all periods in microseconds)` -|`lf read `|N |`Read LF tag` -|`lf search `|Y |`Read and Search for valid known tag (in offline mode it you can load first then search)` -|`lf sim `|N |`Simulate LF tag from buffer with optional GAP (in microseconds)` -|`lf simask `|N |`Simulate LF ASK tag from demodbuffer or input` -|`lf simfsk `|N |`Simulate LF FSK tag from demodbuffer or input` -|`lf simpsk `|N |`Simulate LF PSK tag from demodbuffer or input` -|`lf simbidir `|N |`Simulate LF tag (with bidirectional data transmission between reader and tag)` -|`lf sniff `|N |`Sniff LF traffic between reader and tag` -|`lf tune `|N |`Continuously measure LF antenna tuning` - +|command |offline |description +|------- |------- |----------- +|`lf help `|Y |`This help` +|`lf config `|N |`Get/Set config for LF sampling, bit/sample, decimation, frequency` +|`lf cmdread `|N |`Modulate LF reader field to send command before read (all periods in microseconds)` +|`lf read `|N |`Read LF tag` +|`lf search `|Y |`Read and Search for valid known tag (in offline mode it you can load first then search)` +|`lf sim `|N |`Simulate LF tag from buffer with optional GAP (in microseconds)` +|`lf simask `|N |`Simulate LF ASK tag from demodbuffer or input` +|`lf simfsk `|N |`Simulate LF FSK tag from demodbuffer or input` +|`lf simpsk `|N |`Simulate LF PSK tag from demodbuffer or input` +|`lf simbidir `|N |`Simulate LF tag (with bidirectional data transmission between reader and tag)` +|`lf sniff `|N |`Sniff LF traffic between reader and tag` +|`lf tune `|N |`Continuously measure LF antenna tuning` + + ### lf awid { AWID RFIDs... } - -|command |offline |description -|------- |------- |----------- -|`lf awid help `|Y |`this help` -|`lf awid demod `|Y |`demodulate an AWID FSK tag from the GraphBuffer` -|`lf awid read `|N |`attempt to read and extract tag data` -|`lf awid clone `|N |`clone AWID tag to T55x7 (or to q5/T5555)` -|`lf awid sim `|N |`simulate AWID tag` -|`lf awid brute `|N |`Bruteforce card number against reader` -|`lf awid watch `|N |`continuously watch for cards. Reader mode` - +|command |offline |description +|------- |------- |----------- +|`lf awid help `|Y |`this help` +|`lf awid demod `|Y |`demodulate an AWID FSK tag from the GraphBuffer` +|`lf awid read `|N |`attempt to read and extract tag data` +|`lf awid clone `|N |`clone AWID tag to T55x7 or Q5/T5555` +|`lf awid sim `|N |`simulate AWID tag` +|`lf awid brute `|N |`Bruteforce card number against reader` +|`lf awid watch `|N |`continuously watch for cards. Reader mode` + + ### lf cotag { COTAG CHIPs... } - -|command |offline |description -|------- |------- |----------- -|`lf cotag help `|Y |`This help` -|`lf cotag demod `|Y |`Tries to decode a COTAG signal` -|`lf cotag read `|N |`Attempt to read and extract tag data` - +|command |offline |description +|------- |------- |----------- +|`lf cotag help `|Y |`This help` +|`lf cotag demod `|Y |`Tries to decode a COTAG signal` +|`lf cotag read `|N |`Attempt to read and extract tag data` + + ### lf em { EM4X CHIPs & RFIDs... } - -|command |offline |description -|------- |------- |----------- -|`lf em help `|Y |`This help` -|`lf em 410x_demod `|Y |`demodulate a EM410x tag from the GraphBuffer` -|`lf em 410x_read `|N |`attempt to read and extract tag data` -|`lf em 410x_sim `|N |`simulate EM410x tag` -|`lf em 410x_brute `|N |`reader bruteforce attack by simulating EM410x tags` -|`lf em 410x_watch `|N |`watches for EM410x 125/134 kHz tags (option 'h' for 134)` -|`lf em 410x_spoof `|N |`watches for EM410x 125/134 kHz tags, and replays them. (option 'h' for 134)` -|`lf em 410x_clone `|N |`write EM410x UID to T5555(Q5) or T55x7 tag` -|`lf em 4x05_demod `|Y |`demodulate a EM4x05/EM4x69 tag from the GraphBuffer` -|`lf em 4x05_dump `|N |`dump EM4x05/EM4x69 tag` -|`lf em 4x05_wipe `|N |`wipe EM4x05/EM4x69 tag` -|`lf em 4x05_info `|N |`tag information EM4x05/EM4x69` -|`lf em 4x05_read `|N |`read word data from EM4x05/EM4x69` -|`lf em 4x05_write `|N |`write word data to EM4x05/EM4x69` -|`lf em 4x50_demod `|Y |`demodulate a EM4x50 tag from the GraphBuffer` -|`lf em 4x50_dump `|N |`dump EM4x50 tag` -|`lf em 4x50_read `|N |`read word data from EM4x50` -|`lf em 4x50_write `|N |`write word data to EM4x50` - +|command |offline |description +|------- |------- |----------- +|`lf em help `|Y |`This help` +|`lf em 410x_demod `|Y |`demodulate a EM410x tag from the GraphBuffer` +|`lf em 410x_read `|N |`attempt to read and extract tag data` +|`lf em 410x_sim `|N |`simulate EM410x tag` +|`lf em 410x_brute `|N |`reader bruteforce attack by simulating EM410x tags` +|`lf em 410x_watch `|N |`watches for EM410x 125/134 kHz tags (option 'h' for 134)` +|`lf em 410x_spoof `|N |`watches for EM410x 125/134 kHz tags, and replays them. (option 'h' for 134)` +|`lf em 410x_clone `|N |`write EM410x UID to T55x7 or Q5/T5555 tag` +|`lf em 4x05_demod `|Y |`demodulate a EM4x05/EM4x69 tag from the GraphBuffer` +|`lf em 4x05_dump `|N |`dump EM4x05/EM4x69 tag` +|`lf em 4x05_wipe `|N |`wipe EM4x05/EM4x69 tag` +|`lf em 4x05_info `|N |`tag information EM4x05/EM4x69` +|`lf em 4x05_read `|N |`read word data from EM4x05/EM4x69` +|`lf em 4x05_write `|N |`write word data to EM4x05/EM4x69` +|`lf em 4x50_dump `|N |`dump EM4x50 tag` +|`lf em 4x50_info `|N |`tag information EM4x50` +|`lf em 4x50_write `|N |`write word data to EM4x50` +|`lf em 4x50_write_password`|N |`change passwword of EM4x50 tag` +|`lf em 4x50_read `|N |`read word data from EM4x50` +|`lf em 4x50_wipe `|N |`wipe data from EM4x50` + + ### lf fdx { FDX-B RFIDs... } - -|command |offline |description -|------- |------- |----------- -|`lf fdx help `|Y |`this help` -|`lf fdx demod `|Y |`demodulate a FDX-B ISO11784/85 tag from the GraphBuffer` -|`lf fdx read `|N |`attempt to read and extract tag data` -|`lf fdx clone `|N |`clone animal ID tag to T55x7 (or to q5/T5555)` -|`lf fdx sim `|N |`simulate Animal ID tag` - +|command |offline |description +|------- |------- |----------- +|`lf fdx help `|Y |`this help` +|`lf fdx demod `|Y |`demodulate a FDX-B ISO11784/85 tag from the GraphBuffer` +|`lf fdx read `|N |`attempt to read at 134kHz and extract tag data` +|`lf fdx clone `|N |`clone animal ID tag to T55x7 or Q5/T5555` +|`lf fdx sim `|N |`simulate Animal ID tag` + + ### lf gallagher { GALLAGHER RFIDs... } - -|command |offline |description -|------- |------- |----------- -|`lf gallagher help `|Y |`This help` -|`lf gallagher demod `|Y |`Demodulate an GALLAGHER tag from the GraphBuffer` -|`lf gallagher read `|N |`Attempt to read and extract tag data from the antenna` -|`lf gallagher clone `|N |`clone GALLAGHER tag to T55x7` -|`lf gallagher sim `|N |`simulate GALLAGHER tag` - +|command |offline |description +|------- |------- |----------- +|`lf gallagher help `|Y |`This help` +|`lf gallagher demod `|Y |`Demodulate an GALLAGHER tag from the GraphBuffer` +|`lf gallagher read `|N |`Attempt to read and extract tag data from the antenna` +|`lf gallagher clone `|N |`clone GALLAGHER tag to T55x7` +|`lf gallagher sim `|N |`simulate GALLAGHER tag` + + ### lf gproxii { Guardall Prox II RFIDs... } - -|command |offline |description -|------- |------- |----------- -|`lf gproxii help `|Y |`this help` -|`lf gproxii demod `|Y |`demodulate a G Prox II tag from the GraphBuffer` -|`lf gproxii read `|N |`attempt to read and extract tag data from the antenna` -|`lf gproxii clone `|N |`clone Guardall tag to T55x7` -|`lf gproxii sim `|N |`simulate Guardall tag` - +|command |offline |description +|------- |------- |----------- +|`lf gproxii help `|Y |`this help` +|`lf gproxii demod `|Y |`demodulate a G Prox II tag from the GraphBuffer` +|`lf gproxii read `|N |`attempt to read and extract tag data from the antenna` +|`lf gproxii clone `|N |`clone Guardall tag to T55x7 or Q5/T5555` +|`lf gproxii sim `|N |`simulate Guardall tag` + + ### lf hid - { HID RFIDs... } - -|command |offline |description -|------- |------- |----------- -|`lf hid help `|Y |`this help` -|`lf hid demod `|Y |`demodulate HID Prox tag from the GraphBuffer` -|`lf hid read `|N |`attempt to read and extract tag data` -|`lf hid clone `|N |`clone HID tag to T55x7` -|`lf hid sim `|N |`simulate HID tag` -|`lf hid brute `|N |`bruteforce card number against reader` -|`lf hid watch `|N |`continuously watch for cards. Reader mode` + { HID Prox RFIDs... } + +|command |offline |description +|------- |------- |----------- +|`lf hid help `|Y |`this help` +|`lf hid demod `|Y |`demodulate HID Prox tag from the GraphBuffer` +|`lf hid read `|N |`attempt to read and extract tag data` +|`lf hid clone `|N |`clone HID tag to T55x7` +|`lf hid sim `|N |`simulate HID tag` +|`lf hid brute `|N |`bruteforce card number against reader` +|`lf hid watch `|N |`continuously watch for cards. Reader mode` + - ### lf hitag { Hitag CHIPs... } - -|command |offline |description -|------- |------- |----------- -|`lf hitag help `|Y |`This help` -|`lf hitag list `|N |`List Hitag trace history` -|`lf hitag info `|N |`Tag information` -|`lf hitag reader `|N |`Act like a Hitag Reader` -|`lf hitag sim `|N |`Simulate Hitag transponder` -|`lf hitag sniff `|N |`Eavesdrop Hitag communication` -|`lf hitag writer `|N |`Act like a Hitag Writer` -|`lf hitag cc `|N |`Test all challenges` - +|command |offline |description +|------- |------- |----------- +|`lf hitag help `|Y |`This help` +|`lf hitag list `|N |`List Hitag trace history` +|`lf hitag info `|N |`Tag information` +|`lf hitag reader `|N |`Act like a Hitag Reader` +|`lf hitag sim `|N |`Simulate Hitag transponder` +|`lf hitag sniff `|N |`Eavesdrop Hitag communication` +|`lf hitag writer `|N |`Act like a Hitag Writer` +|`lf hitag dump `|N |`Dump Hitag2 tag` +|`lf hitag cc `|N |`Test all challenges` + + +### lf idteck + + { Idteck RFIDs... } + +|command |offline |description +|------- |------- |----------- +|`lf idteck help `|Y |`This help` +|`lf idteck demod `|Y |`Demodulate an Idteck tag from the GraphBuffer` +|`lf idteck read `|N |`Attempt to read and Extract tag data from the antenna` + + ### lf indala { Indala RFIDs... } - -|command |offline |description -|------- |------- |----------- -|`lf indala help `|Y |`this help` -|`lf indala demod `|Y |`demodulate an indala tag (PSK1) from GraphBuffer` -|`lf indala altdemod `|Y |`alternative method to Demodulate samples for Indala 64 bit UID (option '224' for 224 bit)` -|`lf indala read `|N |`read an Indala Prox tag from the antenna` -|`lf indala clone `|N |`clone Indala tag to T55x7` -|`lf indala sim `|N |`simulate Indala tag` - +|command |offline |description +|------- |------- |----------- +|`lf indala help `|Y |`this help` +|`lf indala demod `|Y |`demodulate an indala tag (PSK1) from GraphBuffer` +|`lf indala altdemod `|Y |`alternative method to Demodulate samples for Indala 64 bit UID (option '224' for 224 bit)` +|`lf indala read `|N |`read an Indala Prox tag from the antenna` +|`lf indala clone `|N |`clone Indala tag to T55x7 or Q5/T5555` +|`lf indala sim `|N |`simulate Indala tag` + + ### lf io { ioProx RFIDs... } - -|command |offline |description -|------- |------- |----------- -|`lf io help `|Y |`this help` -|`lf io demod `|Y |`demodulate an IOProx tag from the GraphBuffer` -|`lf io read `|N |`attempt to read and extract tag data` -|`lf io clone `|N |`clone IOProx tag to T55x7 (or to q5/T5555)` -|`lf io sim `|N |`simulate IOProx tag` -|`lf io watch `|N |`continuously watch for cards. Reader mode` - +|command |offline |description +|------- |------- |----------- +|`lf io help `|Y |`this help` +|`lf io demod `|Y |`demodulate an IOProx tag from the GraphBuffer` +|`lf io read `|N |`attempt to read and extract tag data` +|`lf io clone `|N |`clone IOProx tag to T55x7 or Q5/T5555` +|`lf io sim `|N |`simulate IOProx tag` +|`lf io watch `|N |`continuously watch for cards. Reader mode` + + ### lf jablotron { Jablotron RFIDs... } - -|command |offline |description -|------- |------- |----------- -|`lf jablotron help `|Y |`This help` -|`lf jablotron demod `|Y |`Demodulate an Jablotron tag from the GraphBuffer` -|`lf jablotron read `|N |`Attempt to read and extract tag data from the antenna` -|`lf jablotron clone `|N |`clone jablotron tag to T55x7 (or to q5/T5555)` -|`lf jablotron sim `|N |`simulate jablotron tag` - +|command |offline |description +|------- |------- |----------- +|`lf jablotron help `|Y |`This help` +|`lf jablotron demod `|Y |`Demodulate an Jablotron tag from the GraphBuffer` +|`lf jablotron read `|N |`Attempt to read and extract tag data from the antenna` +|`lf jablotron clone `|N |`clone jablotron tag to T55x7 or Q5/T5555` +|`lf jablotron sim `|N |`simulate jablotron tag` + + ### lf keri { KERI RFIDs... } - -|command |offline |description -|------- |------- |----------- -|`lf keri help `|Y |`This help` -|`lf keri demod `|Y |`Demodulate an KERI tag from the GraphBuffer` -|`lf keri read `|N |`Attempt to read and extract tag data from the antenna` -|`lf keri clone `|N |`clone KERI tag to T55x7 (or to q5/T5555)` -|`lf keri sim `|N |`simulate KERI tag` - -### lf nedap +|command |offline |description +|------- |------- |----------- +|`lf keri help `|Y |`This help` +|`lf keri demod `|Y |`Demodulate an KERI tag from the GraphBuffer` +|`lf keri read `|N |`Attempt to read and extract tag data from the antenna` +|`lf keri clone `|N |`clone KERI tag to T55x7 or Q5/T5555` +|`lf keri sim `|N |`simulate KERI tag` - { Nedap RFIDs... } - -|command |offline |description -|------- |------- |----------- -|`lf nedap help `|Y |`This help` -|`lf nedap demod `|Y |`Demodulate Nedap tag from the GraphBuffer` -|`lf nedap generate `|Y |`Generate Nedap bitstream in DemodBuffer` -|`lf nedap read `|N |`Attempt to read and extract tag data from the antenna` -|`lf nedap clone `|N |`Clone Nedap tag to T55x7` -|`lf nedap sim `|N |`Simulate Nedap tag` - -### lf nexwatch - - { NexWatch RFIDs... } - -|command |offline |description -|------- |------- |----------- -|`lf nexwatch help `|Y |`This help` -|`lf nexwatch demod `|Y |`Demodulate a NexWatch tag (nexkey, quadrakey) from the GraphBuffer` -|`lf nexwatch read `|N |`Attempt to Read and Extract tag data from the antenna` -|`lf nexwatch clone `|N |`clone NexWatch tag to T55x7` -|`lf nexwatch sim `|N |`simulate NexWatch tag` - - -### lf noralsy - - { Noralsy RFIDs... } - -|command |offline |description -|------- |------- |----------- -|`lf noralsy help `|Y |`This help` -|`lf noralsy demod `|Y |`Demodulate an Noralsy tag from the GraphBuffer` -|`lf noralsy read `|N |`Attempt to read and extract tag data from the antenna` -|`lf noralsy clone `|N |`clone Noralsy tag to T55x7 (or to q5/T5555)` -|`lf noralsy sim `|N |`simulate Noralsy tag` - - ### lf motorola { Motorola RFIDs... } - -|command |offline |description -|------- |------- |----------- -|`lf motorola help `|Y |`This help` -|`lf motorola demod `|Y |`Demodulate an MOTOROLA tag from the GraphBuffer` -|`lf motorola read `|N |`Attempt to read and extract tag data from the antenna` -|`lf motorola clone `|N |`clone MOTOROLA tag to T55x7` -|`lf motorola sim `|N |`simulate MOTOROLA tag` - +|command |offline |description +|------- |------- |----------- +|`lf motorola help `|Y |`This help` +|`lf motorola demod `|Y |`Demodulate an MOTOROLA tag from the GraphBuffer` +|`lf motorola read `|N |`Attempt to read and extract tag data from the antenna` +|`lf motorola clone `|N |`clone MOTOROLA tag to T55x7` +|`lf motorola sim `|N |`simulate MOTOROLA tag` + + +### lf nedap + + { Nedap RFIDs... } + +|command |offline |description +|------- |------- |----------- +|`lf nedap help `|Y |`This help` +|`lf nedap demod `|Y |`Demodulate Nedap tag from the GraphBuffer` +|`lf nedap generate `|Y |`Generate Nedap bitstream in DemodBuffer` +|`lf nedap read `|N |`Attempt to read and extract tag data from the antenna` +|`lf nedap clone `|N |`Clone Nedap tag to T55x7 or Q5/T5555` +|`lf nedap sim `|N |`Simulate Nedap tag` + + +### lf nexwatch + + { NexWatch RFIDs... } + +|command |offline |description +|------- |------- |----------- +|`lf nexwatch help `|Y |`This help` +|`lf nexwatch demod `|Y |`Demodulate a NexWatch tag (nexkey, quadrakey) from the GraphBuffer` +|`lf nexwatch read `|N |`Attempt to Read and Extract tag data from the antenna` +|`lf nexwatch clone `|N |`clone NexWatch tag to T55x7` +|`lf nexwatch sim `|N |`simulate NexWatch tag` + + +### lf noralsy + + { Noralsy RFIDs... } + +|command |offline |description +|------- |------- |----------- +|`lf noralsy help `|Y |`This help` +|`lf noralsy demod `|Y |`Demodulate an Noralsy tag from the GraphBuffer` +|`lf noralsy read `|N |`Attempt to read and extract tag data from the antenna` +|`lf noralsy clone `|N |`clone Noralsy tag to T55x7 or Q5/T5555` +|`lf noralsy sim `|N |`simulate Noralsy tag` + + ### lf pac { PAC/Stanley RFIDs... } - -|command |offline |description -|------- |------- |----------- -|`lf pac help `|Y |`This help` -|`lf pac demod `|Y |`Demodulate a PAC tag from the GraphBuffer` -|`lf pac read `|N |`Attempt to read and extract tag data from the antenna` -|`lf pac clone `|N |`clone PAC tag to T55x7` -|`lf pac sim `|N |`simulate PAC tag` - +|command |offline |description +|------- |------- |----------- +|`lf pac help `|Y |`This help` +|`lf pac demod `|Y |`Demodulate a PAC tag from the GraphBuffer` +|`lf pac read `|N |`Attempt to read and extract tag data from the antenna` +|`lf pac clone `|N |`clone PAC tag to T55x7` +|`lf pac sim `|N |`simulate PAC tag` + + ### lf paradox { Paradox RFIDs... } - -|command |offline |description -|------- |------- |----------- -|`lf paradox help `|Y |`This help` -|`lf paradox demod `|Y |`Demodulate a Paradox FSK tag from the GraphBuffer` -|`lf paradox read `|N |`Attempt to read and Extract tag data from the antenna` -|`lf paradox clone `|N |`clone paradox tag to T55x7` -|`lf paradox sim `|N |`simulate paradox tag` - +|command |offline |description +|------- |------- |----------- +|`lf paradox help `|Y |`This help` +|`lf paradox demod `|Y |`Demodulate a Paradox FSK tag from the GraphBuffer` +|`lf paradox read `|N |`Attempt to read and Extract tag data from the antenna` +|`lf paradox clone `|N |`clone paradox tag to T55x7` +|`lf paradox sim `|N |`simulate paradox tag` + + ### lf pcf7931 { PCF7931 CHIPs... } - -|command |offline |description -|------- |------- |----------- -|`lf pcf7931 help `|Y |`This help` -|`lf pcf7931 read `|N |`Read content of a PCF7931 transponder` -|`lf pcf7931 write `|N |`Write data on a PCF7931 transponder.` -|`lf pcf7931 config `|Y |`Configure the password, the tags initialization delay and time offsets (optional)` - +|command |offline |description +|------- |------- |----------- +|`lf pcf7931 help `|Y |`This help` +|`lf pcf7931 read `|N |`Read content of a PCF7931 transponder` +|`lf pcf7931 write `|N |`Write data on a PCF7931 transponder.` +|`lf pcf7931 config `|Y |`Configure the password, the tags initialization delay and time offsets (optional)` + + ### lf presco { Presco RFIDs... } - -|command |offline |description -|------- |------- |----------- -|`lf presco help `|Y |`This help` -|`lf presco read `|N |`Attempt to read and Extract tag data` -|`lf presco clone `|N |`clone presco tag to T55x7 (or to q5/T5555)` -|`lf presco sim `|N |`simulate presco tag` - +|command |offline |description +|------- |------- |----------- +|`lf presco help `|Y |`This help` +|`lf presco demod `|Y |`demodulate Presco tag from the GraphBuffer` +|`lf presco read `|N |`Attempt to read and Extract tag data` +|`lf presco clone `|N |`clone presco tag to T55x7 or Q5/T5555` +|`lf presco sim `|N |`simulate presco tag` + + ### lf pyramid { Farpointe/Pyramid RFIDs... } - -|command |offline |description -|------- |------- |----------- -|`lf pyramid help `|Y |`this help` -|`lf pyramid demod `|Y |`demodulate a Pyramid FSK tag from the GraphBuffer` -|`lf pyramid read `|N |`attempt to read and extract tag data` -|`lf pyramid clone `|N |`clone pyramid tag to T55x7 (or to q5/T5555)` -|`lf pyramid sim `|N |`simulate pyramid tag` - +|command |offline |description +|------- |------- |----------- +|`lf pyramid help `|Y |`this help` +|`lf pyramid demod `|Y |`demodulate a Pyramid FSK tag from the GraphBuffer` +|`lf pyramid read `|N |`attempt to read and extract tag data` +|`lf pyramid clone `|N |`clone pyramid tag to T55x7 or Q5/T5555` +|`lf pyramid sim `|N |`simulate pyramid tag` + + ### lf securakey { Securakey RFIDs... } - -|command |offline |description -|------- |------- |----------- -|`lf securakey help `|Y |`This help` -|`lf securakey demod `|Y |`Demodulate an Securakey tag from the GraphBuffer` -|`lf securakey read `|N |`Attempt to read and extract tag data from the antenna` -|`lf securakey clone `|N |`clone Securakey tag to T55x7` -|`lf securakey sim `|N |`simulate Securakey tag` - +|command |offline |description +|------- |------- |----------- +|`lf securakey help `|Y |`This help` +|`lf securakey demod `|Y |`Demodulate an Securakey tag from the GraphBuffer` +|`lf securakey read `|N |`Attempt to read and extract tag data from the antenna` +|`lf securakey clone `|N |`clone Securakey tag to T55x7` +|`lf securakey sim `|N |`simulate Securakey tag` + + ### lf ti { TI CHIPs... } - -|command |offline |description -|------- |------- |----------- -|`lf ti help `|Y |`This help` -|`lf ti demod `|Y |`Demodulate raw bits for TI-type LF tag from the GraphBuffer` -|`lf ti read `|N |`Read and decode a TI 134 kHz tag` -|`lf ti write `|N |`Write new data to a r/w TI 134 kHz tag` - +|command |offline |description +|------- |------- |----------- +|`lf ti help `|Y |`This help` +|`lf ti demod `|Y |`Demodulate raw bits for TI-type LF tag from the GraphBuffer` +|`lf ti read `|N |`Read and decode a TI 134 kHz tag` +|`lf ti write `|N |`Write new data to a r/w TI 134 kHz tag` + + ### lf t55xx { T55xx CHIPs... } - -|command |offline |description -|------- |------- |----------- -|`lf t55xx help `|Y |`This help` -|`lf t55xx bruteforce `|N |` Simple bruteforce attack to find password` -|`lf t55xx config `|Y |`Set/Get T55XX configuration (modulation, inverted, offset, rate)` -|`lf t55xx chk `|N |`Check passwords from dictionary/flash` -|`lf t55xx clonehelp `|N |`Shows the available clone commands` -|`lf t55xx dangerraw `|N |`Sends raw bitstream. Dangerous, do not use!! b t ` -|`lf t55xx detect `|Y |`[1] Try detecting the tag modulation from reading the configuration block.` -|`lf t55xx deviceconfig `|N |`Set/Get T55XX device configuration (startgap, writegap, write0, write1, readgap` -|`lf t55xx dump `|N |`[password] [o] Dump T55xx card Page 0 block 0-7. Optional [password], [override]` -|`lf t55xx restore `|N |`f [p ] Restore T55xx card Page 0 / Page 1 blocks` -|`lf t55xx info `|Y |`[1] Show T55x7 configuration data (page 0/ blk 0)` -|`lf t55xx p1detect `|N |`[1] Try detecting if this is a t55xx tag by reading page 1` -|`lf t55xx protect `|N |`Password protect tag` -|`lf t55xx read `|N |`b p [password] [o] [1] -- Read T55xx block data. Optional [p password], [override], [page1]` -|`lf t55xx resetread `|N |`Send Reset Cmd then lf read the stream to attempt to identify the start of it (needs a demod and/or plot after)` -|`lf t55xx recoverpw `|N |`[password] Try to recover from bad password write from a cloner. Only use on PW protected chips!` -|`lf t55xx sniff `|N |`Attempt to recover T55xx commands from sample buffer` -|`lf t55xx special `|N |`Show block changes with 64 different offsets` -|`lf t55xx trace `|Y |`[1] Show T55x7 traceability data (page 1/ blk 0-1)` -|`lf t55xx wakeup `|N |`Send AOR wakeup command` -|`lf t55xx wipe `|N |`[q] Wipe a T55xx tag and set defaults (will destroy any data on tag)` -|`lf t55xx write `|N |`b d p [password] [1] -- Write T55xx block data. Optional [p password], [page1]` - +|command |offline |description +|------- |------- |----------- +|`lf t55xx help `|Y |`This help` +|`lf t55xx clonehelp `|N |`Shows the available clone commands` +|`lf t55xx config `|Y |`Set/Get T55XX configuration (modulation, inverted, offset, rate)` +|`lf t55xx dangerraw `|N |`Sends raw bitstream. Dangerous, do not use!! b t ` +|`lf t55xx detect `|Y |`[1] Try detecting the tag modulation from reading the configuration block.` +|`lf t55xx deviceconfig `|N |`Set/Get T55XX device configuration (startgap, writegap, write0, write1, readgap` +|`lf t55xx dump `|N |`[password] [o] Dump T55xx card Page 0 block 0-7. Optional [password], [override]` +|`lf t55xx info `|Y |`[1] Show T55x7 configuration data (page 0/ blk 0)` +|`lf t55xx p1detect `|N |`[1] Try detecting if this is a t55xx tag by reading page 1` +|`lf t55xx read `|N |`b p [password] [o] [1] -- Read T55xx block data. Optional [p password], [override], [page1]` +|`lf t55xx resetread `|N |`Send Reset Cmd then lf read the stream to attempt to identify the start of it (needs a demod and/or plot after)` +|`lf t55xx restore `|N |`f [p ] Restore T55xx card Page 0 / Page 1 blocks` +|`lf t55xx trace `|Y |`[1] Show T55x7 traceability data (page 1/ blk 0-1)` +|`lf t55xx wakeup `|N |`Send AOR wakeup command` +|`lf t55xx write `|N |`b d p [password] [1] -- Write T55xx block data. Optional [p password], [page1]` +|`lf t55xx bruteforce `|N |` Simple bruteforce attack to find password` +|`lf t55xx chk `|N |`Check passwords from dictionary/flash` +|`lf t55xx protect `|N |`Password protect tag` +|`lf t55xx recoverpw `|N |`[password] Try to recover from bad password write from a cloner. Only use on PW protected chips!` +|`lf t55xx sniff `|Y |`Attempt to recover T55xx commands from sample buffer` +|`lf t55xx special `|N |`Show block changes with 64 different offsets` +|`lf t55xx wipe `|N |`[q] Wipe a T55xx tag and set defaults (will destroy any data on tag)` + + ### lf viking { Viking RFIDs... } - -|command |offline |description -|------- |------- |----------- -|`lf viking help `|Y |`This help` -|`lf viking demod `|Y |`Demodulate a Viking tag from the GraphBuffer` -|`lf viking read `|N |`Attempt to read and Extract tag data from the antenna` -|`lf viking clone `|N |`clone Viking tag to T55x7 (or to q5/T5555)` -|`lf viking sim `|N |`simulate Viking tag` - +|command |offline |description +|------- |------- |----------- +|`lf viking help `|Y |`This help` +|`lf viking demod `|Y |`Demodulate a Viking tag from the GraphBuffer` +|`lf viking read `|N |`Attempt to read and Extract tag data from the antenna` +|`lf viking clone `|N |`clone Viking tag to T55x7 or Q5/T5555` +|`lf viking sim `|N |`simulate Viking tag` + + ### lf visa2000 { Visa2000 RFIDs... } - -|command |offline |description -|------- |------- |----------- -|`lf visa2000 help `|Y |`This help` -|`lf visa2000 demod `|Y |`demodulate an VISA2000 tag from the GraphBuffer` -|`lf visa2000 read `|N |`attempt to read and extract tag data from the antenna` -|`lf visa2000 clone `|N |`clone Visa2000 tag to T55x7 (or to q5/T5555)` -|`lf visa2000 sim `|N |`simulate Visa2000 tag` - +|command |offline |description +|------- |------- |----------- +|`lf visa2000 help `|Y |`This help` +|`lf visa2000 demod `|Y |`demodulate an VISA2000 tag from the GraphBuffer` +|`lf visa2000 read `|N |`attempt to read and extract tag data from the antenna` +|`lf visa2000 clone `|N |`clone Visa2000 tag to T55x7 or Q5/T5555` +|`lf visa2000 sim `|N |`simulate Visa2000 tag` + + ### mem { Flash Memory manipulation... } - -|command |offline |description -|------- |------- |----------- -|`mem help `|Y |`This help` -|`mem spiffs `|N |`High level SPI FileSystem Flash manipulation [rdv40]` -|`mem spibaud `|N |`Set Flash memory Spi baudrate [rdv40]` -|`mem info `|N |`Flash memory information [rdv40]` -|`mem load `|N |`Load data into flash memory [rdv40]` -|`mem dump `|N |`Dump data from flash memory [rdv40]` -|`mem wipe `|N |`Wipe data from flash memory [rdv40]` - +|command |offline |description +|------- |------- |----------- +|`mem help `|Y |`This help` +|`mem baudrate `|N |`Set Flash memory Spi baudrate` +|`mem spiffs `|N |`High level SPI FileSystem Flash manipulation` +|`mem info `|N |`Flash memory information` +|`mem load `|N |`Load data into flash memory` +|`mem dump `|N |`Dump data from flash memory` +|`mem wipe `|N |`Wipe data from flash memory` + + ### reveng { CRC calculations from RevEng software } - -### sc + +[=] reveng: no mode switch specified. Use reveng -h for help. + +### smart { Smart card ISO-7816 commands... } - -|command |offline |description -|------- |------- |----------- -|`smart help `|Y |`This help` -|`smart list `|N |`List ISO 7816 history` -|`smart info `|N |`Tag information` -|`smart reader `|N |`Act like an IS07816 reader` -|`smart raw `|N |`Send raw hex data to tag` -|`smart upgrade `|Y |`Upgrade sim module firmware` -|`smart setclock `|N |`Set clock speed` -|`smart brute `|N |`Bruteforce SFI` - +|command |offline |description +|------- |------- |----------- +|`smart help `|Y |`This help` +|`smart list `|N |`List ISO 7816 history` +|`smart info `|N |`Tag information` +|`smart reader `|N |`Act like an IS07816 reader` +|`smart raw `|N |`Send raw hex data to tag` +|`smart upgrade `|Y |`Upgrade sim module firmware` +|`smart setclock `|N |`Set clock speed` +|`smart brute `|N |`Bruteforce SFI` + + ### script { Scripting commands } - -|command |offline |description -|------- |------- |----------- -|`script help `|Y |`This help` -|`script list `|Y |`List available scripts` -|`script run `|Y |` -- Execute a script` - +|command |offline |description +|------- |------- |----------- +|`script help `|Y |`Usage info` +|`script list `|Y |`List available scripts` +|`script run `|Y |` -- execute a script` + + ### trace { Trace manipulation... } - -|command |offline |description -|------- |------- |----------- -|`trace help `|Y |`This help` -|`trace list `|Y |`List protocol data in trace buffer` -|`trace load `|Y |`Load trace from file` -|`trace save `|Y |`Save trace buffer to file` - +|command |offline |description +|------- |------- |----------- +|`trace help `|Y |`This help` +|`trace list `|Y |`List protocol data in trace buffer` +|`trace load `|Y |`Load trace from file` +|`trace save `|Y |`Save trace buffer to file` + + ### usart { USART commands... } - -|command |offline |description -|------- |------- |----------- -|`usart help `|Y |`This help` -|`usart btpin `|N |`Change BT add-on PIN` -|`usart btfactory `|N |`Reset BT add-on to factory settings` -|`usart tx `|N |`Send string over USART` -|`usart rx `|N |`Receive string over USART` -|`usart txrx `|N |`Send string over USART and wait for response` -|`usart txhex `|N |`Send bytes over USART` -|`usart rxhex `|N |`Receive bytes over USART` -|`usart config `|N |`Configure USART` - +|command |offline |description +|------- |------- |----------- +|`usart help `|Y |`This help` +|`usart btpin `|N |`Change BT add-on PIN` +|`usart btfactory `|N |`Reset BT add-on to factory settings` +|`usart tx `|N |`Send string over USART` +|`usart rx `|N |`Receive string over USART` +|`usart txrx `|N |`Send string over USART and wait for response` +|`usart txhex `|N |`Send bytes over USART` +|`usart rxhex `|N |`Receive bytes over USART` +|`usart config `|N |`Configure USART` + + ### wiegand { Wiegand format manipulation... } - -|command |offline |description -|------- |------- |----------- -|`wiegand help `|Y |`This help` -|`wiegand list `|Y |`List available wiegand formats` -|`wiegand encode `|Y |`Convert ` -|`wiegand decode `|Y |`Convert raw hex to wiegand format` - +|command |offline |description +|------- |------- |----------- +|`wiegand help `|Y |`This help` +|`wiegand list `|Y |`List available wiegand formats` +|`wiegand encode `|Y |`Encode to wiegand raw hex` +|`wiegand decode `|Y |`Convert raw hex to decoded wiegand format` + + From 30cc0b4b486dd1fbd223f90abda8445746e64790 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Tue, 6 Oct 2020 12:22:23 +0200 Subject: [PATCH 0882/1047] fix lf wiegand - only take one format --- client/src/cmdwiegand.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/src/cmdwiegand.c b/client/src/cmdwiegand.c index f81d7c177..25727db33 100644 --- a/client/src/cmdwiegand.c +++ b/client/src/cmdwiegand.c @@ -76,7 +76,7 @@ int CmdWiegandEncode(const char *Cmd) { arg_u64_1(NULL, "cn", "", "card number"), arg_u64_0(NULL, "issue", "", "issue level"), arg_u64_0(NULL, "oem", "", "OEM code"), - arg_strx1("w", "wiegand", "", "see `wiegand list` for available formats"), + arg_str1("w", "wiegand", "", "see `wiegand list` for available formats"), arg_param_end }; CLIExecWithReturn(ctx, Cmd, argtable, true); From fd3b440eea175fcf9b42728dc4cdb5aebf37fee9 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Tue, 6 Oct 2020 14:11:09 +0200 Subject: [PATCH 0883/1047] plot trim: adjust demod graph and cursors when possible --- client/src/cmddata.c | 3 ++- client/src/cmddata.h | 2 +- client/src/proxguiqt.cpp | 11 +++++++++++ 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/client/src/cmddata.c b/client/src/cmddata.c index 47599c5de..f9bef7083 100644 --- a/client/src/cmddata.c +++ b/client/src/cmddata.c @@ -30,7 +30,7 @@ uint8_t DemodBuffer[MAX_DEMOD_BUF_LEN]; size_t DemodBufferLen = 0; -size_t g_DemodStartIdx = 0; +int32_t g_DemodStartIdx = 0; int g_DemodClock = 0; static int CmdHelp(const char *Cmd); @@ -1789,6 +1789,7 @@ int CmdLtrim(const char *Cmd) { GraphBuffer[i - ds] = GraphBuffer[i]; GraphTraceLen -= ds; + g_DemodStartIdx -= ds; RepaintGraphWindow(); return PM3_SUCCESS; } diff --git a/client/src/cmddata.h b/client/src/cmddata.h index 86a60a9bb..b009aaaf8 100644 --- a/client/src/cmddata.h +++ b/client/src/cmddata.h @@ -86,7 +86,7 @@ extern uint8_t DemodBuffer[MAX_DEMOD_BUF_LEN]; extern size_t DemodBufferLen; extern int g_DemodClock; -extern size_t g_DemodStartIdx; +extern int32_t g_DemodStartIdx; #ifdef __cplusplus } diff --git a/client/src/proxguiqt.cpp b/client/src/proxguiqt.cpp index 8c0651b10..6436b5b85 100644 --- a/client/src/proxguiqt.cpp +++ b/client/src/proxguiqt.cpp @@ -703,6 +703,16 @@ void Plot::Trim(void) { if ((CursorAPos == 0) || (CursorBPos == 0)) { // if we don't have both cursors set lref = GraphStart; rref = GraphStop; + if (CursorAPos >= lref) { + CursorAPos -= lref; + } else { + CursorAPos = 0; + } + if (CursorBPos >= lref) { + CursorBPos -= lref; + } else { + CursorBPos = 0; + } } else { lref = CursorAPos < CursorBPos ? CursorAPos : CursorBPos; rref = CursorAPos < CursorBPos ? CursorBPos : CursorAPos; @@ -715,6 +725,7 @@ void Plot::Trim(void) { CursorAPos -= lref; CursorBPos -= lref; } + g_DemodStartIdx -= lref; for (uint32_t i = lref; i < rref; ++i) GraphBuffer[i - lref] = GraphBuffer[i]; GraphTraceLen = rref - lref; From 5b4e4dc4a48561139ddd935b6f532ab208d7f816 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Tue, 6 Oct 2020 14:23:11 +0200 Subject: [PATCH 0884/1047] plot: add to realign demod plot on samples --- client/src/proxguiqt.cpp | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/client/src/proxguiqt.cpp b/client/src/proxguiqt.cpp index 6436b5b85..0634297f8 100644 --- a/client/src/proxguiqt.cpp +++ b/client/src/proxguiqt.cpp @@ -841,6 +841,14 @@ void Plot::keyPressEvent(QKeyEvent *event) { Move(-offset); break; + case Qt::Key_Greater: + g_DemodStartIdx += 1; + break; + + case Qt::Key_Less: + g_DemodStartIdx -= 1; + break; + case Qt::Key_G: if (PlotGridX || PlotGridY) { PlotGridX = 0; @@ -874,9 +882,10 @@ void Plot::keyPressEvent(QKeyEvent *event) { PrintAndLogEx(NORMAL, " %-*s%s", 25+9, _RED_("h"), "Show this help"); PrintAndLogEx(NORMAL, "\n" _GREEN_("Trim:")); PrintAndLogEx(NORMAL, " %-*s%s", 25+9, _RED_("t"), "Trim data on window or on cursors if defined"); - PrintAndLogEx(NORMAL, "\n" _GREEN_("Grid:")); - PrintAndLogEx(NORMAL, " %-*s%s", 25+9, _RED_("g"), "Toggle grid display"); + PrintAndLogEx(NORMAL, "\n" _GREEN_("Grid and demod:")); + PrintAndLogEx(NORMAL, " %-*s%s", 25+9, _RED_("g"), "Toggle grid and demodulation plot display"); PrintAndLogEx(NORMAL, " %-*s%s", 25+9, _RED_("l"), "Toggle lock grid relative to samples"); + PrintAndLogEx(NORMAL, " %-*s%s", 25+9+9, _RED_("<") "/" _RED_(">"), "Move demodulation left/right relative to samples"); PrintAndLogEx(NORMAL, "\n" _GREEN_("Misc:")); PrintAndLogEx(NORMAL, " %-*s%s", 25+9, _YELLOW_("Left mouse click"), "Set yellow cursor"); PrintAndLogEx(NORMAL, " %-*s%s", 25+9, _YELLOW_("Right mouse click"), "Set purple cursor"); From a5c6130c7a82f4efa849eb1f731aa87dad87bb5f Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Tue, 6 Oct 2020 14:32:14 +0200 Subject: [PATCH 0885/1047] waveshare: fix 'may be used uninitialized' warning --- client/src/cmdhfwaveshare.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/src/cmdhfwaveshare.c b/client/src/cmdhfwaveshare.c index 224fe9757..3cc2bf99f 100644 --- a/client/src/cmdhfwaveshare.c +++ b/client/src/cmdhfwaveshare.c @@ -231,7 +231,7 @@ static void dither_rgb_inplace(int16_t *chanR, int16_t *chanG, int16_t *chanB, u int16_t oldR = chanR[XX + Y * width]; int16_t oldG = chanG[XX + Y * width]; int16_t oldB = chanB[XX + Y * width]; - uint8_t newR, newG, newB; + uint8_t newR = 0, newG = 0, newB = 0; nearest_color(oldR, oldG, oldB, palette, palettelen, &newR, &newG, &newB); chanR[XX + Y * width] = newR; chanG[XX + Y * width] = newG; From 91d9463c2adbb410a6974e292a2cebf7216885ee Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Tue, 6 Oct 2020 14:39:36 +0200 Subject: [PATCH 0886/1047] cmdtrace: avoid 'strncat output may be truncated' warning --- client/src/cmdtrace.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/client/src/cmdtrace.c b/client/src/cmdtrace.c index 75744f069..917ee50bd 100644 --- a/client/src/cmdtrace.c +++ b/client/src/cmdtrace.c @@ -159,10 +159,8 @@ static uint16_t printHexLine(uint16_t tracepos, uint16_t traceLen, uint8_t *trac char temp_str2[3] = {0}; sprintf(data_len_str, "%04x", hdr->data_len); - strncat(temp_str1, data_len_str, 2); - temp_str1[2] = '\0'; - strncat(temp_str2, data_len_str + 2, 2); - temp_str2[2] = '\0'; + memmove(temp_str1, data_len_str, 2); + memmove(temp_str2, data_len_str + 2, 2); PrintAndLogEx(NORMAL, "0.%010u", hdr->timestamp); PrintAndLogEx(NORMAL, "000000 00 %s %s %s %s", From 25180af1357de4a3e6ed34d0d93d6cb14e8825fe Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Tue, 6 Oct 2020 14:56:26 +0200 Subject: [PATCH 0887/1047] DEFLDFLAGS --- Makefile.defs | 1 + Makefile.host | 1 + client/Makefile | 1 + 3 files changed, 3 insertions(+) diff --git a/Makefile.defs b/Makefile.defs index 1c702930a..b4dcfd0da 100644 --- a/Makefile.defs +++ b/Makefile.defs @@ -50,6 +50,7 @@ endif DEFCXXFLAGS = -Wall -Werror -O3 -pipe DEFCFLAGS = -Wall -Werror -O3 -fstrict-aliasing -pipe +DEFLDFLAGS = # Some more warnings we want as errors: DEFCFLAGS += -Wbad-function-cast -Wredundant-decls -Wmissing-prototypes -Wchar-subscripts -Wshadow -Wundef -Wwrite-strings -Wunused -Wuninitialized -Wpointer-arith -Winline -Wformat -Wformat-security -Winit-self -Wmissing-include-dirs -Wnested-externs -Wmissing-declarations -Wempty-body -Wignored-qualifiers -Wmissing-field-initializers -Wtype-limits -Wold-style-definition # Some more warnings we need first to eliminate, so temporarely tolerated: diff --git a/Makefile.host b/Makefile.host index e374a9294..694ab5a1c 100644 --- a/Makefile.host +++ b/Makefile.host @@ -19,6 +19,7 @@ CFLAGS ?= $(DEFCFLAGS) CFLAGS += $(MYDEFS) $(MYCFLAGS) $(MYINCLUDES) CXXFLAGS ?= $(DEFCXXFLAGS) CXXFLAGS += $(MYDEFS) $(MYCXXFLAGS) $(MYINCLUDES) +LDFLAGS ?= $(DEFLDFLAGS) LDFLAGS += $(MYLDFLAGS) LDLIBS += $(MYLDLIBS) diff --git a/client/Makefile b/client/Makefile index 29fb4462e..ac51cb1bd 100644 --- a/client/Makefile +++ b/client/Makefile @@ -309,6 +309,7 @@ ifeq ($(QT_FOUND),1) endif endif +LDFLAGS ?= $(DEFLDFLAGS) PM3LDFLAGS = $(LDFLAGS) ifeq ($(platform),Darwin) PM3LDFLAGS += -framework Foundation -framework AppKit From adacace01250ac2d86a105b609761621d2534581 Mon Sep 17 00:00:00 2001 From: tcprst Date: Sun, 4 Oct 2020 14:52:59 -0400 Subject: [PATCH 0888/1047] hf iclass permute - now use cliparser --- client/src/cmdhficlass.c | 41 +++++++++++++++++++--------------------- 1 file changed, 19 insertions(+), 22 deletions(-) diff --git a/client/src/cmdhficlass.c b/client/src/cmdhficlass.c index 8dfe7720a..bc1337c0e 100644 --- a/client/src/cmdhficlass.c +++ b/client/src/cmdhficlass.c @@ -18,6 +18,7 @@ #include "cmdparser.h" // command_t #include "commonutil.h" // ARRAYLEN #include "cmdtrace.h" +#include "cliparser.h" #include "util_posix.h" #include "comms.h" #include "des.h" @@ -359,20 +360,7 @@ static int usage_hf_iclass_lookup(void) { PrintAndLogEx(NORMAL, ""); return PM3_SUCCESS; } -static int usage_hf_iclass_permutekey(void) { - PrintAndLogEx(NORMAL, "Permute function from 'heart of darkness' paper.\n"); - PrintAndLogEx(NORMAL, "Usage: hf iclass permute [h] \n"); - PrintAndLogEx(NORMAL, "Options:"); - PrintAndLogEx(NORMAL, " h Show this help"); - PrintAndLogEx(NORMAL, " r reverse permuted key"); - PrintAndLogEx(NORMAL, " f permute key"); - PrintAndLogEx(NORMAL, " input bytes"); - PrintAndLogEx(NORMAL, ""); - PrintAndLogEx(NORMAL, "Examples:"); - PrintAndLogEx(NORMAL, _YELLOW_("\thf iclass permute r 0123456789abcdef")); - PrintAndLogEx(NORMAL, ""); - return PM3_SUCCESS; -} + static int cmp_uint32(const void *a, const void *b) { @@ -3522,17 +3510,26 @@ static int CmdHFiClassPermuteKey(const char *Cmd) { uint8_t data[16] = {0}; bool isReverse = false; int len = 0; - char cmdp = tolower(param_getchar(Cmd, 0)); - if (strlen(Cmd) == 0 || cmdp == 'h') - return usage_hf_iclass_permutekey(); - isReverse = (cmdp == 'r'); + CLIParserContext *ctx; + CLIParserInit(&ctx, "hf iclass permute", + "Permute function from 'heart of darkness' paper.", + "hf iclass permute --reverse --key 0123456789abcdef\n" + "hf iclass permute --key ff55330f0055330f\n"); - param_gethex_ex(Cmd, 1, data, &len); - if (len % 2) - return usage_hf_iclass_permutekey(); + void *argtable[] = { + arg_param_begin, + arg_lit0(NULL, "reverse", "reverse permuted key"), + arg_str1(NULL, "key", "", "input key"), + arg_param_end + }; + CLIExecWithReturn(ctx, Cmd, argtable, false); - len >>= 1; + isReverse = arg_get_lit(ctx, 1); + + CLIGetHexWithReturn(ctx, 2, data, &len); + + CLIParserFree(ctx); memcpy(key, data, 8); From c85d919e20e0154ea854c8e21b40fd13ee9c8867 Mon Sep 17 00:00:00 2001 From: tcprst Date: Sun, 4 Oct 2020 15:23:48 -0400 Subject: [PATCH 0889/1047] hf iclass view - now use cliparser --- client/src/cmdhficlass.c | 75 +++++++++++++--------------------------- 1 file changed, 24 insertions(+), 51 deletions(-) diff --git a/client/src/cmdhficlass.c b/client/src/cmdhficlass.c index bc1337c0e..14756328f 100644 --- a/client/src/cmdhficlass.c +++ b/client/src/cmdhficlass.c @@ -225,21 +225,6 @@ static int usage_hf_iclass_readblock(void) { PrintAndLogEx(NORMAL, ""); return PM3_SUCCESS; } -static int usage_hf_iclass_view(void) { - PrintAndLogEx(NORMAL, "Print a iCLASS tag dump file\n"); - PrintAndLogEx(NORMAL, "Usage: hf iClass view [f ] [s ] [e ] [v]\n"); - PrintAndLogEx(NORMAL, "Options:"); - PrintAndLogEx(NORMAL, " h Show this help"); - PrintAndLogEx(NORMAL, " f filename of dump"); - PrintAndLogEx(NORMAL, " s print from this block (default block6)"); - PrintAndLogEx(NORMAL, " e end printing at this block (default 0, ALL)"); - PrintAndLogEx(NORMAL, " v verbose output"); - PrintAndLogEx(NORMAL, "Examples:"); - PrintAndLogEx(NORMAL, _YELLOW_("\thf iclass view f hf-iclass-AA162D30F8FF12F1-dump.bin")); - PrintAndLogEx(NORMAL, _YELLOW_("\thf iclass view s 1 f hf-iclass-AA162D30F8FF12F1-dump.bin")); - PrintAndLogEx(NORMAL, ""); - return PM3_SUCCESS; -} static int usage_hf_iclass_calc_newkey(void) { PrintAndLogEx(NORMAL, "Calculate new key for updating\n"); PrintAndLogEx(NORMAL, "Usage: hf iclass calc_newkey o n s [csn] e\n"); @@ -2668,43 +2653,31 @@ void printIclassDumpContents(uint8_t *iclass_dump, uint8_t startblock, uint8_t e } static int CmdHFiClassView(const char *Cmd) { - int startblock = 0; - int endblock = 0; - char filename[FILE_PATH_SIZE]; - bool errors = false, verbose = false; - uint8_t cmdp = 0; - while (param_getchar(Cmd, cmdp) != 0x00 && !errors) { - switch (tolower(param_getchar(Cmd, cmdp))) { - case 'h': - return usage_hf_iclass_view(); - case 'f': - if (param_getstr(Cmd, cmdp + 1, filename, FILE_PATH_SIZE) >= FILE_PATH_SIZE) { - PrintAndLogEx(FAILED, "Filename too long"); - errors = true; - break; - } - cmdp += 2; - break; - case 's': - startblock = param_get8ex(Cmd, cmdp + 1, 0, 10); - cmdp += 2; - break; - case 'e': - endblock = param_get8ex(Cmd, cmdp + 1, 0, 10); - cmdp += 2; - break; - case 'v': - verbose = true; - cmdp++; - break; - default: - PrintAndLogEx(WARNING, "unknown parameter '%c'\n", param_getchar(Cmd, cmdp)); - errors = true; - break; - } - } + CLIParserContext *ctx; + CLIParserInit(&ctx, "hf iclass view", + "Print a iCLASS tag dump file", + "hf iclass view -f hf-iclass-AA162D30F8FF12F1-dump.bin\n" + "hf iclass view --startblock 1 --file hf-iclass-AA162D30F8FF12F1-dump.bin\n"); - if (errors || (strlen(Cmd) == 0)) return usage_hf_iclass_view(); + void *argtable[] = { + arg_param_begin, + arg_str1("f", "file", "", "filename of dump"), + arg_int0(NULL, "startblock", "", "print from this block (default block6)"), + arg_int0(NULL, "endblock", "", "end printing at this block (default 0, ALL)"), + arg_lit0("v", "verbose", "verbose output"), + arg_param_end + }; + CLIExecWithReturn(ctx, Cmd, argtable, false); + + int fnlen = 0; + char filename[FILE_PATH_SIZE]; + CLIParamStrToBuf(arg_get_str(ctx, 1), (uint8_t*)filename, FILE_PATH_SIZE, &fnlen); + + int startblock = arg_get_int_def(ctx, 2, 0); + int endblock = arg_get_int_def(ctx, 3, 0); + bool verbose = arg_get_lit(ctx, 4); + + CLIParserFree(ctx); uint8_t *dump = NULL; size_t bytes_read = 0; From fbc7f05ad1537975d08dc9757559aaf45a5b5088 Mon Sep 17 00:00:00 2001 From: tcprst Date: Tue, 6 Oct 2020 09:03:24 -0400 Subject: [PATCH 0890/1047] rebase on master, fix merge conflict --- armsrc/Standalone/hf_iceclass.c | 2 +- client/src/cmdhficlass.c | 12 ++--- doc/cheatsheet.md | 5 +- doc/commands.md | 88 ++++++++++----------------------- 4 files changed, 35 insertions(+), 72 deletions(-) diff --git a/armsrc/Standalone/hf_iceclass.c b/armsrc/Standalone/hf_iceclass.c index 2a0ef6236..00de115e6 100644 --- a/armsrc/Standalone/hf_iceclass.c +++ b/armsrc/Standalone/hf_iceclass.c @@ -125,7 +125,7 @@ static void download_instructions(uint8_t t) { case ICE_STATE_FULLSIM: { DbpString("The emulator memory was saved to SPIFFS"); DbpString("1. " _YELLOW_("mem spiffs dump o " HF_ICLASS_FULLSIM_MOD_BIN " f " HF_ICLASS_FULLSIM_MOD" e")); - DbpString("2. " _YELLOW_("hf iclass view f " HF_ICLASS_FULLSIM_MOD_BIN)); + DbpString("2. " _YELLOW_("hf iclass view -f " HF_ICLASS_FULLSIM_MOD_BIN)); break; } case ICE_STATE_ATTACK: { diff --git a/client/src/cmdhficlass.c b/client/src/cmdhficlass.c index 14756328f..6417de85b 100644 --- a/client/src/cmdhficlass.c +++ b/client/src/cmdhficlass.c @@ -2661,10 +2661,10 @@ static int CmdHFiClassView(const char *Cmd) { void *argtable[] = { arg_param_begin, - arg_str1("f", "file", "", "filename of dump"), - arg_int0(NULL, "startblock", "", "print from this block (default block6)"), - arg_int0(NULL, "endblock", "", "end printing at this block (default 0, ALL)"), - arg_lit0("v", "verbose", "verbose output"), + arg_str1("f", "file", "", "filename of dump"), + arg_int0("s", "startblock", "", "print from this block (default block6)"), + arg_int0("e", "endblock", "", "end printing at this block (default 0, ALL)"), + arg_lit0("v", "verbose", "verbose output"), arg_param_end }; CLIExecWithReturn(ctx, Cmd, argtable, false); @@ -3492,7 +3492,7 @@ static int CmdHFiClassPermuteKey(const char *Cmd) { void *argtable[] = { arg_param_begin, - arg_lit0(NULL, "reverse", "reverse permuted key"), + arg_lit0("r", "reverse", "reverse permuted key"), arg_str1(NULL, "key", "", "input key"), arg_param_end }; @@ -3550,7 +3550,7 @@ static command_t CommandTable[] = { {"encrypt", CmdHFiClassEncryptBlk, AlwaysAvailable, "[options..] Encrypt given block data"}, {"decrypt", CmdHFiClassDecrypt, AlwaysAvailable, "[options..] Decrypt given block data or tag dump file" }, {"managekeys", CmdHFiClassManageKeys, AlwaysAvailable, "[options..] Manage keys to use with iclass commands"}, - {"permutekey", CmdHFiClassPermuteKey, IfPm3Iclass, " Permute function from 'heart of darkness' paper"}, + {"permute", CmdHFiClassPermuteKey, IfPm3Iclass, " Permute function from 'heart of darkness' paper"}, {"view", CmdHFiClassView, AlwaysAvailable, "[options..] Display content from tag dump file"}, {NULL, NULL, NULL, NULL} diff --git a/doc/cheatsheet.md b/doc/cheatsheet.md index bee2b2b5e..5e46f68df 100644 --- a/doc/cheatsheet.md +++ b/doc/cheatsheet.md @@ -46,9 +46,10 @@ Reverse permute iCLASS master key ``` Options --- -r reverse permuted key +-r --reverse : reverse permuted key + --key : input key -pm3 --> hf iclass permute r 3F90EBF0910F7B6F +pm3 --> hf iclass permute --reverse --key 3F90EBF0910F7B6F ``` iCLASS Reader diff --git a/doc/commands.md b/doc/commands.md index 94d28dfdf..40ce18a23 100644 --- a/doc/commands.md +++ b/doc/commands.md @@ -241,70 +241,32 @@ Check column "offline" for their availability. ### hf iclass { ICLASS RFIDs... } + +|command |offline |description +|------- |------- |----------- +|`hf iclass help `|Y |`This help` +|`hf iclass calcnewkey `|Y |`[options..] Calc diversified keys (blocks 3 & 4) to write new keys` +|`hf iclass chk `|Y |`[options..] Check keys` +|`hf iclass clone `|N |`[options..] Restore a dump file onto a iClass tag` +|`hf iclass decrypt `|Y |`[options..] Decrypt given block data or tag dump file` +|`hf iclass dump `|N |`[options..] Dump iClass tag to file` +|`hf iclass eload `|N |`[f ] Load iClass dump file into emulator memory` +|`hf iclass encrypt `|Y |`[options..] Encrypt given block data` +|`hf iclass info `|Y |` Tag information` +|`hf iclass list `|Y |` List iClass history` +|`hf iclass loclass `|Y |`[options..] Use loclass to perform bruteforce reader attack` +|`hf iclass lookup `|Y |`[options..] Uses authentication trace to check for key in dictionary file` +|`hf iclass managekeys `|Y |`[options..] Manage keys to use with iClass` +|`hf iclass permute `|N |` Permute function from 'heart of darkness' paper` +|`hf iclass rdbl `|N |`[options..] Read iClass block` +|`hf iclass reader `|N |` Act like an iClass reader` +|`hf iclass readtagfile `|Y |`[options..] Display content from tag dump file` +|`hf iclass replay `|N |` Read iClass tag via replay attack` +|`hf iclass sim `|N |`[options..] Simulate iClass tag` +|`hf iclass sniff `|N |` Eavesdrop iClass communication` +|`hf iclass wrbl `|N |`[options..] Write iClass block` -|command |offline |description -|------- |------- |----------- -|`hf iclass help `|Y |`This help` -|`hf iclass dump `|N |`[options..] Dump Picopass / iCLASS tag to file` -|`hf iclass info `|Y |` Tag information` -|`hf iclass list `|Y |` List iclass history` -|`hf iclass rdbl `|N |`[options..] Read Picopass / iCLASS block` -|`hf iclass reader `|N |` Act like an Picopass / iCLASS reader` -|`hf iclass restore `|N |`[options..] Restore a dump file onto a Picopass / iCLASS tag` -|`hf iclass sniff `|N |` Eavesdrop Picopass / iCLASS communication` -|`hf iclass wrbl `|N |`[options..] Write Picopass / iCLASS block` -|`hf iclass chk `|Y |`[options..] Check keys` -|`hf iclass loclass `|Y |`[options..] Use loclass to perform bruteforce reader attack` -|`hf iclass lookup `|Y |`[options..] Uses authentication trace to check for key in dictionary file` -|`hf iclass replay `|N |` Read Picopass / iCLASS tag via replay attack` -|`hf iclass sim `|N |`[options..] Simulate iCLASS tag` -|`hf iclass eload `|N |`[f ] Load Picopass / iCLASS dump file into emulator memory` -|`hf iclass esave `|N |`[f ] Save emulator memory to file` -|`hf iclass eview `|N |`[options..] View emulator memory` -|`hf iclass calcnewkey `|Y |`[options..] Calc diversified keys (blocks 3 & 4) to write new keys` -|`hf iclass encrypt `|Y |`[options..] Encrypt given block data` -|`hf iclass decrypt `|Y |`[options..] Decrypt given block data or tag dump file` -|`hf iclass managekeys `|Y |`[options..] Manage keys to use with iclass commands` -|`hf iclass permutekey `|N |` Permute function from 'heart of darkness' paper` -|`hf iclass view `|Y |`[options..] Display content from tag dump file` - - -### hf legic - - { LEGIC RFIDs... } - -|command |offline |description -|------- |------- |----------- -|`hf legic help `|Y |`This help` -|`hf legic list `|Y |`List LEGIC history` -|`hf legic reader `|N |`LEGIC Prime Reader UID and tag info` -|`hf legic info `|N |`Display deobfuscated and decoded LEGIC Prime tag data` -|`hf legic dump `|N |`Dump LEGIC Prime tag to binary file` -|`hf legic restore `|N |`Restore a dump file onto a LEGIC Prime tag` -|`hf legic rdbl `|N |`Read bytes from a LEGIC Prime tag` -|`hf legic sim `|N |`Start tag simulator` -|`hf legic wrbl `|N |`Write data to a LEGIC Prime tag` -|`hf legic crc `|Y |`Calculate Legic CRC over given bytes` -|`hf legic eload `|Y |`Load binary dump to emulator memory` -|`hf legic esave `|Y |`Save emulator memory to binary file` -|`hf legic wipe `|N |`Wipe a LEGIC Prime tag` - - -### hf lto - - { LTO Cartridge Memory RFIDs... } - -|command |offline |description -|------- |------- |----------- -|`hf lto help `|Y |`This help` -|`hf lto dump `|N |`Dump LTO-CM tag to file` -|`hf lto restore `|N |`Restore dump file to LTO-CM tag` -|`hf lto info `|N |`Tag information` -|`hf lto rdbl `|N |`Read block` -|`hf lto wrbl `|N |`Write block` -|`hf lto list `|Y |`List LTO-CM history` - - + ### hf mf { MIFARE RFIDs... } From c276f48c464d98c0e9fbb30add9236052d68be5e Mon Sep 17 00:00:00 2001 From: tcprst Date: Tue, 6 Oct 2020 09:35:49 -0400 Subject: [PATCH 0891/1047] fix dropped legic, lto --- doc/commands.md | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/doc/commands.md b/doc/commands.md index 40ce18a23..9771b8942 100644 --- a/doc/commands.md +++ b/doc/commands.md @@ -266,6 +266,42 @@ Check column "offline" for their availability. |`hf iclass sniff `|N |` Eavesdrop iClass communication` |`hf iclass wrbl `|N |`[options..] Write iClass block` + +### hf legic + + { LEGIC RFIDs... } + +|command |offline |description +|------- |------- |----------- +|`hf legic help `|Y |`This help` +|`hf legic list `|Y |`List LEGIC history` +|`hf legic reader `|N |`LEGIC Prime Reader UID and tag info` +|`hf legic info `|N |`Display deobfuscated and decoded LEGIC Prime tag data` +|`hf legic dump `|N |`Dump LEGIC Prime tag to binary file` +|`hf legic restore `|N |`Restore a dump file onto a LEGIC Prime tag` +|`hf legic rdbl `|N |`Read bytes from a LEGIC Prime tag` +|`hf legic sim `|N |`Start tag simulator` +|`hf legic wrbl `|N |`Write data to a LEGIC Prime tag` +|`hf legic crc `|Y |`Calculate Legic CRC over given bytes` +|`hf legic eload `|Y |`Load binary dump to emulator memory` +|`hf legic esave `|Y |`Save emulator memory to binary file` +|`hf legic wipe `|N |`Wipe a LEGIC Prime tag` + + +### hf lto + + { LTO Cartridge Memory RFIDs... } + +|command |offline |description +|------- |------- |----------- +|`hf lto help `|Y |`This help` +|`hf lto dump `|N |`Dump LTO-CM tag to file` +|`hf lto restore `|N |`Restore dump file to LTO-CM tag` +|`hf lto info `|N |`Tag information` +|`hf lto rdbl `|N |`Read block` +|`hf lto wrbl `|N |`Write block` +|`hf lto list `|Y |`List LTO-CM history` + ### hf mf From 4447e72486fe38d0c9004ede0fd5db8b4831fdf0 Mon Sep 17 00:00:00 2001 From: tcprst Date: Tue, 6 Oct 2020 09:38:57 -0400 Subject: [PATCH 0892/1047] rebase - fix missed iclass doc changes --- doc/commands.md | 48 +++++++++++++++++++++++++----------------------- 1 file changed, 25 insertions(+), 23 deletions(-) diff --git a/doc/commands.md b/doc/commands.md index 9771b8942..c0aeea991 100644 --- a/doc/commands.md +++ b/doc/commands.md @@ -242,29 +242,31 @@ Check column "offline" for their availability. { ICLASS RFIDs... } -|command |offline |description -|------- |------- |----------- -|`hf iclass help `|Y |`This help` -|`hf iclass calcnewkey `|Y |`[options..] Calc diversified keys (blocks 3 & 4) to write new keys` -|`hf iclass chk `|Y |`[options..] Check keys` -|`hf iclass clone `|N |`[options..] Restore a dump file onto a iClass tag` -|`hf iclass decrypt `|Y |`[options..] Decrypt given block data or tag dump file` -|`hf iclass dump `|N |`[options..] Dump iClass tag to file` -|`hf iclass eload `|N |`[f ] Load iClass dump file into emulator memory` -|`hf iclass encrypt `|Y |`[options..] Encrypt given block data` -|`hf iclass info `|Y |` Tag information` -|`hf iclass list `|Y |` List iClass history` -|`hf iclass loclass `|Y |`[options..] Use loclass to perform bruteforce reader attack` -|`hf iclass lookup `|Y |`[options..] Uses authentication trace to check for key in dictionary file` -|`hf iclass managekeys `|Y |`[options..] Manage keys to use with iClass` -|`hf iclass permute `|N |` Permute function from 'heart of darkness' paper` -|`hf iclass rdbl `|N |`[options..] Read iClass block` -|`hf iclass reader `|N |` Act like an iClass reader` -|`hf iclass readtagfile `|Y |`[options..] Display content from tag dump file` -|`hf iclass replay `|N |` Read iClass tag via replay attack` -|`hf iclass sim `|N |`[options..] Simulate iClass tag` -|`hf iclass sniff `|N |` Eavesdrop iClass communication` -|`hf iclass wrbl `|N |`[options..] Write iClass block` +|command |offline |description +|------- |------- |----------- +|`hf iclass help `|Y |`This help` +|`hf iclass dump `|N |`[options..] Dump Picopass / iCLASS tag to file` +|`hf iclass info `|Y |` Tag information` +|`hf iclass list `|Y |` List iclass history` +|`hf iclass rdbl `|N |`[options..] Read Picopass / iCLASS block` +|`hf iclass reader `|N |` Act like an Picopass / iCLASS reader` +|`hf iclass restore `|N |`[options..] Restore a dump file onto a Picopass / iCLASS tag` +|`hf iclass sniff `|N |` Eavesdrop Picopass / iCLASS communication` +|`hf iclass wrbl `|N |`[options..] Write Picopass / iCLASS block` +|`hf iclass chk `|Y |`[options..] Check keys` +|`hf iclass loclass `|Y |`[options..] Use loclass to perform bruteforce reader attack` +|`hf iclass lookup `|Y |`[options..] Uses authentication trace to check for key in dictionary file` +|`hf iclass replay `|N |` Read Picopass / iCLASS tag via replay attack` +|`hf iclass sim `|N |`[options..] Simulate iCLASS tag` +|`hf iclass eload `|N |`[f ] Load Picopass / iCLASS dump file into emulator memory` +|`hf iclass esave `|N |`[f ] Save emulator memory to file` +|`hf iclass eview `|N |`[options..] View emulator memory` +|`hf iclass calcnewkey `|Y |`[options..] Calc diversified keys (blocks 3 & 4) to write new keys` +|`hf iclass encrypt `|Y |`[options..] Encrypt given block data` +|`hf iclass decrypt `|Y |`[options..] Decrypt given block data or tag dump file` +|`hf iclass managekeys `|Y |`[options..] Manage keys to use with iclass commands` +|`hf iclass permute `|N |` Permute function from 'heart of darkness' paper` +|`hf iclass view `|Y |`[options..] Display content from tag dump file` ### hf legic From a647ceda23acfb5ec6e40e93d41b7e282256a296 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Tue, 6 Oct 2020 15:41:57 +0200 Subject: [PATCH 0893/1047] fix buffer underflow read --- client/src/ui.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/src/ui.c b/client/src/ui.c index ecc0cb94e..26759cc4d 100644 --- a/client/src/ui.c +++ b/client/src/ui.c @@ -356,7 +356,7 @@ static void fPrintAndLog(FILE *stream, const char *fmt, ...) { va_start(argptr, fmt); vsnprintf(buffer, sizeof(buffer), fmt, argptr); va_end(argptr); - if (buffer[strlen(buffer) - 1] == NOLF[0]) { + if (strlen(buffer) > 0 && buffer[strlen(buffer) - 1] == NOLF[0]) { linefeed = false; buffer[strlen(buffer) - 1] = 0; } From 8ad8e2322e75e3889f5b7b81d25c0c8e4ad838ce Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Tue, 6 Oct 2020 15:42:17 +0200 Subject: [PATCH 0894/1047] fix heap - unpack return ref to int* --- client/src/preferences.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/client/src/preferences.c b/client/src/preferences.c index 5865bac8b..b7e695ea1 100644 --- a/client/src/preferences.c +++ b/client/src/preferences.c @@ -227,7 +227,7 @@ void preferences_save_callback(json_t *root) { void preferences_load_callback(json_t *root) { json_error_t up_error = {0}; - bool b1; + int b1; int i1; const char *s1; char tempStr [500]; // to use str_lower() since json unpack uses const char * @@ -273,7 +273,7 @@ void preferences_load_callback(json_t *root) { if (json_unpack_ex(root, &up_error, 0, "{s:i}", "window.overlay.wsize", &i1) == 0) session.overlay.w = i1; if (json_unpack_ex(root, &up_error, 0, "{s:b}", "window.overlay.sliders", &b1) == 0) - session.overlay_sliders = b1; + session.overlay_sliders = (bool)b1; // show options if (json_unpack_ex(root, &up_error, 0, "{s:s}", "show.emoji", &s1) == 0) { @@ -286,10 +286,10 @@ void preferences_load_callback(json_t *root) { } if (json_unpack_ex(root, &up_error, 0, "{s:b}", "show.hints", &b1) == 0) - session.show_hints = b1; + session.show_hints = (bool)b1; if (json_unpack_ex(root, &up_error, 0, "{s:b}", "os.supports.colors", &b1) == 0) - session.supports_colors = b1; + session.supports_colors = (bool)b1; /* // Logging Level if (json_unpack_ex(root, &up_error, 0, "{s:s}", "device.debug.level", &s1) == 0) { From 154d3ff22255ee9c5d1390a8a4932f0d0c9ec7e4 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Tue, 6 Oct 2020 15:54:56 +0200 Subject: [PATCH 0895/1047] bad copies --- client/src/cmdcrc.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/client/src/cmdcrc.c b/client/src/cmdcrc.c index 8830f5530..472a361fe 100644 --- a/client/src/cmdcrc.c +++ b/client/src/cmdcrc.c @@ -25,6 +25,7 @@ #include "reveng.h" #include "ui.h" #include "util.h" +#include "pm3_cmd.h" #define MAX_ARGS 20 @@ -497,12 +498,12 @@ static int CmdrevengSearch(const char *Cmd) { } int CmdCrc(const char *Cmd) { - char name[] = {"reveng "}; - char Cmd2[100 + 7]; - memcpy(Cmd2, name, 7); - memcpy(Cmd2 + 7, Cmd, 100); + char c[100 + 7]; + snprintf(c, sizeof(c), "reveng "); + snprintf(c + strlen(c), sizeof(c) - strlen(c), Cmd, strlen(Cmd)); + char *argv[MAX_ARGS]; - int argc = split(Cmd2, argv); + int argc = split(c, argv); if (argc == 3 && memcmp(argv[1], "-g", 2) == 0) { CmdrevengSearch(argv[2]); @@ -512,6 +513,6 @@ int CmdCrc(const char *Cmd) { for (int i = 0; i < argc; ++i) { free(argv[i]); } - return 0; + return PM3_SUCCESS; } From feae472a41ad184c72434df55eae55ace7d0e377 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Tue, 6 Oct 2020 15:59:12 +0200 Subject: [PATCH 0896/1047] mem leaks --- client/src/emv/emv_roca.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/client/src/emv/emv_roca.c b/client/src/emv/emv_roca.c index 0faf59ffb..e8eb82d83 100644 --- a/client/src/emv/emv_roca.c +++ b/client/src/emv/emv_roca.c @@ -119,15 +119,17 @@ bool emv_rocacheck(const unsigned char *buf, size_t buflen, bool verbose) { MBEDTLS_MPI_CHK(mbedtls_mpi_shift_l(&g_one, mpi_get_uint(&t_temp))); - if (bitand_is_zero(&g_one, &prints[i])) { - if (verbose) - PrintAndLogEx(FAILED, "No fingerprint found.\n"); - goto cleanup; - } - - mbedtls_mpi_free(&g_one); mbedtls_mpi_free(&t_temp); mbedtls_mpi_free(&t_prime); + + if (bitand_is_zero(&g_one, &prints[i])) { + if (verbose) { + PrintAndLogEx(FAILED, "No fingerprint found.\n"); + } + mbedtls_mpi_free(&g_one); + goto cleanup; + } + mbedtls_mpi_free(&g_one); } ret = true; From f2078ec0c2a81fb8cbb88004745f410b2c9071a1 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Tue, 6 Oct 2020 16:17:22 +0200 Subject: [PATCH 0897/1047] free args --- tools/mf_nonce_brute/mf_nonce_brute.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/tools/mf_nonce_brute/mf_nonce_brute.c b/tools/mf_nonce_brute/mf_nonce_brute.c index 93a3025ea..094c66c2a 100644 --- a/tools/mf_nonce_brute/mf_nonce_brute.c +++ b/tools/mf_nonce_brute/mf_nonce_brute.c @@ -218,7 +218,7 @@ static void *brute_thread(void *arguments) { //int shift = (int)arg; struct thread_args *args = (struct thread_args *) arguments; - struct Crypto1State *revstate; + struct Crypto1State *revstate = NULL; uint64_t key; // recovered key candidate uint32_t ks2; // keystream used to encrypt reader response uint32_t ks3; // keystream used to encrypt tag response @@ -234,7 +234,9 @@ static void *brute_thread(void *arguments) { for (count = args->idx; count < 0xFFFF; count += thread_count - 1) { found = global_found; - if (found) break; + if (found) { + break; + } nt = count << 16 | prng_successor(count, 16); @@ -277,6 +279,7 @@ static void *brute_thread(void *arguments) { if (!isOK) { printf("<-- not a valid cmd\n"); pthread_mutex_unlock(&print_lock); + free(revstate); continue; } else { printf("<-- Valid cmd\n"); @@ -302,6 +305,8 @@ static void *brute_thread(void *arguments) { pthread_mutex_unlock(&print_lock); } } + + free(args); return NULL; } From 01c35a9bfb20e7e0e9c31f2ac70269aec5461465 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Tue, 6 Oct 2020 16:17:57 +0200 Subject: [PATCH 0898/1047] style --- client/deps/jansson/pack_unpack.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/client/deps/jansson/pack_unpack.c b/client/deps/jansson/pack_unpack.c index 279499ebd..5ee4a8be9 100644 --- a/client/deps/jansson/pack_unpack.c +++ b/client/deps/jansson/pack_unpack.c @@ -740,8 +740,12 @@ static int unpack(scanner_t *s, json_t *root, va_list *ap) { case 'b': if (root && !json_is_boolean(root)) { - set_error(s, "", json_error_wrong_type, "Expected true or false, got %s", - type_name(root)); + set_error(s, + "", + json_error_wrong_type, + "Expected true or false, got %s", + type_name(root) + ); return -1; } From 042342dc8f663deffc566a39e0df4bb31fcca8bf Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Tue, 6 Oct 2020 16:56:20 +0200 Subject: [PATCH 0899/1047] fpga_compress: fix mem leak --- tools/fpga_compress/fpga_compress.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/tools/fpga_compress/fpga_compress.c b/tools/fpga_compress/fpga_compress.c index c588fd5f7..005e66fce 100644 --- a/tools/fpga_compress/fpga_compress.c +++ b/tools/fpga_compress/fpga_compress.c @@ -396,11 +396,13 @@ int main(int argc, char **argv) { return (EXIT_FAILURE); } if (generate_version_file) { - if (generate_fpga_version_info(infiles, infile_names, num_input_files, outfile)) { - free(infile_names); - free(infiles); + int ret = generate_fpga_version_info(infiles, infile_names, num_input_files, outfile); + free(infile_names); + free(infiles); + if (ret) { return (EXIT_FAILURE); } + return (ret); } else { int ret = zlib_compress(infiles, num_input_files, outfile); free(infile_names); From 66d67bcd9e1d27347645f8ada2129d1c96561a3f Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Tue, 6 Oct 2020 16:58:42 +0200 Subject: [PATCH 0900/1047] Makefile: add SANITIZE=1 to chase mem issues (host only) --- Makefile.defs | 6 ++++++ doc/md/Development/Makefile-vs-CMake.md | 3 +++ 2 files changed, 9 insertions(+) diff --git a/Makefile.defs b/Makefile.defs index b4dcfd0da..06eb2e36f 100644 --- a/Makefile.defs +++ b/Makefile.defs @@ -51,6 +51,12 @@ endif DEFCXXFLAGS = -Wall -Werror -O3 -pipe DEFCFLAGS = -Wall -Werror -O3 -fstrict-aliasing -pipe DEFLDFLAGS = +# Next ones are activated only if SANITIZE=1 +ifeq ($(SANITIZE),1) + DEFCFLAGS += -g -fsanitize=address -fno-omit-frame-pointer + DEFCXXFLAGS += -g -fsanitize=address -fno-omit-frame-pointer + DEFLDFLAGS += -g -fsanitize=address +endif # Some more warnings we want as errors: DEFCFLAGS += -Wbad-function-cast -Wredundant-decls -Wmissing-prototypes -Wchar-subscripts -Wshadow -Wundef -Wwrite-strings -Wunused -Wuninitialized -Wpointer-arith -Winline -Wformat -Wformat-security -Winit-self -Wmissing-include-dirs -Wnested-externs -Wmissing-declarations -Wempty-body -Wignored-qualifiers -Wmissing-field-initializers -Wtype-limits -Wold-style-definition # Some more warnings we need first to eliminate, so temporarely tolerated: diff --git a/doc/md/Development/Makefile-vs-CMake.md b/doc/md/Development/Makefile-vs-CMake.md index 649b9beaa..314cd1e7a 100644 --- a/doc/md/Development/Makefile-vs-CMake.md +++ b/doc/md/Development/Makefile-vs-CMake.md @@ -15,6 +15,9 @@ At the moment both are maintained because they don't perfectly overlap yet. |-----|---|---|---| | verbose | V=1 | VERBOSE=1 | | | warnings management | yes (1) | **no** | (1) cf Makefile.defs | +| extra GCC warnings | GCCEXTRA=1 | **no** | | +| extra Clang warnings | CLANGEXTRA=1 | **no** | only on host | +| AddressSanitize | SANITIZE=1 | **no** | only on host | | compilation | in place | in build dir | | | user `CFLAGS`/`LDFLAGS` | envvars honored (1) | envvars honored (2) | (1) also `LDLIBS` and `INCLUDES_CLIENT` for more tuning (2) only at first cmake call | | Mingw gnu printf | `_ISOC99_SOURCE` | `_ISOC99_SOURCE` | and in cbor.h: `__attribute__((format (__MINGW_PRINTF_FORMAT, 2, 3)))`| From e90c38617990885b35d53e13d63dd2b9867aff88 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Tue, 6 Oct 2020 16:59:40 +0200 Subject: [PATCH 0901/1047] LZ4: silent AddressSanitizer false positive? int8_t x = 0; <= writing 2 bytes?? --- common/lz4/lz4hc.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/common/lz4/lz4hc.c b/common/lz4/lz4hc.c index 6c047f221..6e74164a5 100644 --- a/common/lz4/lz4hc.c +++ b/common/lz4/lz4hc.c @@ -61,6 +61,12 @@ # pragma clang diagnostic ignored "-Wunused-function" #endif +#if defined(__clang__) || defined (__GNUC__) +# define ATTRIBUTE_NO_SANITIZE_ADDRESS __attribute__((no_sanitize_address)) +#else +# define ATTRIBUTE_NO_SANITIZE_ADDRESS +#endif + /*=== Enums ===*/ typedef enum { noDictCtx, usingDictCtxHc } dictCtx_directive; @@ -980,7 +986,10 @@ int LZ4_freeStreamHC(LZ4_streamHC_t *LZ4_streamHCPtr) { return 0; } - +// Skip AddressSanitizer which breaks compilation strangely on +// lz4/lz4hc.c: error: writing 2 bytes into a region of size 1 [-Werror=stringop-overflow=] +// | LZ4_streamHCPtr->internal_donotuse.favorDecSpeed = 0; +ATTRIBUTE_NO_SANITIZE_ADDRESS LZ4_streamHC_t *LZ4_initStreamHC(void *buffer, size_t size) { LZ4_streamHC_t *const LZ4_streamHCPtr = (LZ4_streamHC_t *)buffer; if (buffer == NULL) return NULL; From 4eb11f470de576c6ce9694e6f8013b600f8a99a5 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Tue, 6 Oct 2020 17:14:10 +0200 Subject: [PATCH 0902/1047] reveng mem leaks --- client/deps/reveng/cli.c | 42 ++++++++++++++++++++++++++++++---------- client/src/cmdcrc.c | 27 ++++++++++++++++++-------- 2 files changed, 51 insertions(+), 18 deletions(-) diff --git a/client/deps/reveng/cli.c b/client/deps/reveng/cli.c index 88e8d3722..b0c72421b 100644 --- a/client/deps/reveng/cli.c +++ b/client/deps/reveng/cli.c @@ -167,8 +167,9 @@ int reveng_main(int argc, char *argv[]) { pkchop(&model.spoly); width = plen(model.spoly); rflags |= R_HAVEP; - if (c == 'P') + if (c == 'P') { prcp(&model.spoly); + } mnovel(&model); break; case 'l': /* l little-endian input and output */ @@ -332,6 +333,7 @@ ipqx: mbynum(&model, --args); ufound(&model); } while (args); + mfree(&model); break; case 'd': /* d dump CRC model */ /* maybe we don't want to do this: @@ -387,6 +389,10 @@ ipqx: apolys = calloc(args * sizeof(poly_t), sizeof(char)); if (!apolys) { uerror("cannot allocate memory for argument list"); + pfree(&model.spoly); + pfree(&model.init); + pfree(&model.xorout); + mfree(&model); return 0; } @@ -421,16 +427,20 @@ ipqx: continue; if (rflags & R_HAVEX && psncmp(&model.xorout, &pset.xorout)) continue; + apoly = pclone(pset.xorout); - if (pset.flags & P_REFOUT) + if (pset.flags & P_REFOUT) { prev(&apoly); + } + for (qptr = apolys; qptr < pptr; ++qptr) { crc = pcrc(*qptr, pset.spoly, pset.init, apoly, 0); if (ptst(crc)) { pfree(&crc); break; - } else + } else { pfree(&crc); + } } pfree(&apoly); if (qptr == pptr) { @@ -444,14 +454,19 @@ ipqx: /* toggle refIn/refOut and reflect arguments */ if (~rflags & R_HAVERI) { model.flags ^= P_REFIN | P_REFOUT; - for (qptr = apolys; qptr < pptr; ++qptr) + for (qptr = apolys; qptr < pptr; ++qptr) { prevch(qptr, ibperhx); + } } } while (~rflags & R_HAVERI && ++pass < 2); } + if (uflags & C_RESULT) { - for (qptr = apolys; qptr < pptr; ++qptr) + for (qptr = apolys; qptr < pptr; ++qptr) { pfree(qptr); + } + free(apolys); + mfree(&model); return 1; //exit(EXIT_SUCCESS); } @@ -467,8 +482,10 @@ ipqx: pass = 0; do { mptr = candmods = reveng(&model, qpoly, rflags, args, apolys); - if (mptr && plen(mptr->spoly)) + if (mptr && plen(mptr->spoly)) { uflags |= C_RESULT; + } + while (mptr && plen(mptr->spoly)) { /* results were printed by the callback * string = mtostr(mptr); @@ -478,26 +495,31 @@ ipqx: mfree(mptr++); } free(candmods); + if (~rflags & R_HAVERI) { model.flags ^= P_REFIN | P_REFOUT; - for (qptr = apolys; qptr < pptr; ++qptr) + for (qptr = apolys; qptr < pptr; ++qptr) { prevch(qptr, ibperhx); + } } } while (~rflags & R_HAVERI && ++pass < 2); - for (qptr = apolys; qptr < pptr; ++qptr) + + for (qptr = apolys; qptr < pptr; ++qptr) { pfree(qptr); + } + free(apolys); + if (~uflags & C_RESULT) uerror("no models found"); + break; default: /* no mode specified */ fprintf(stderr, "%s: no mode switch specified. Use %s -h for help.\n", myname, myname); return 0; - //exit(EXIT_FAILURE); } return 1; - //exit(EXIT_SUCCESS); } void diff --git a/client/src/cmdcrc.c b/client/src/cmdcrc.c index 472a361fe..964f19247 100644 --- a/client/src/cmdcrc.c +++ b/client/src/cmdcrc.c @@ -254,7 +254,6 @@ int RunModel(char *inModel, char *inHexStr, bool reverse, char endian, char *res int ibperhx = 8, obperhx = 8; // int rflags = 0; // search flags - int c; poly_t apoly, crc; char *string; @@ -266,7 +265,7 @@ int RunModel(char *inModel, char *inHexStr, bool reverse, char endian, char *res SETBMP(); //set model - c = mbynam(&model, inModel); + int c = mbynam(&model, inModel); if (!c) { PrintAndLogEx(ERR, "error: preset model '%s' not found. Use reveng -D to list presets. [%d]", inModel, c); return 0; @@ -406,7 +405,7 @@ static int CmdrevengSearch(const char *Cmd) { #define NMODELS 106 - char inHexStr[100] = {0x00}; + char inHexStr[256] = {0x00}; int dataLen = param_getstr(Cmd, 0, inHexStr, sizeof(inHexStr)); if (dataLen < 4) return 0; @@ -419,7 +418,12 @@ static int CmdrevengSearch(const char *Cmd) { char revResult[30]; int ans = GetModels(Models, &count, width); bool found = false; - if (!ans) return 0; + if (!ans) { + for (int i = 0; i < count; i++) { + free(Models[i]); + } + return 0; + } // try each model and get result for (int i = 0; i < count; i++) { @@ -430,8 +434,10 @@ static int CmdrevengSearch(const char *Cmd) { // round up to # of characters in this model's crc uint8_t crcChars = ((width[i] + 7) / 8) * 2; // can't test a model that has more crc digits than our data - if (crcChars >= dataLen) + if (crcChars >= dataLen) { + free(Models[i]); continue; + } PrintAndLogEx(DEBUG , "DEBUG: dataLen %d, crcChars %u, width[i] %u" @@ -440,8 +446,10 @@ static int CmdrevengSearch(const char *Cmd) { , width[i] ); - if (crcChars == 0) + if (crcChars == 0) { + free(Models[i]); continue; + } memset(result, 0, 30); char *inCRC = calloc(crcChars + 1, sizeof(char)); @@ -493,8 +501,10 @@ static int CmdrevengSearch(const char *Cmd) { free(Models[i]); } - if (!found) PrintAndLogEx(FAILED, "\nno matches found\n"); - return 1; + if (found == false) + PrintAndLogEx(FAILED, "\nno matches found\n"); + + return PM3_SUCCESS; } int CmdCrc(const char *Cmd) { @@ -510,6 +520,7 @@ int CmdCrc(const char *Cmd) { } else { reveng_main(argc, argv); } + for (int i = 0; i < argc; ++i) { free(argv[i]); } From 92a768ce0e9f86d5c7dfce88e937bbd0b9b75e45 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Tue, 6 Oct 2020 17:23:15 +0200 Subject: [PATCH 0903/1047] fix regression test since lf hid demod output has changed --- tools/pm3_tests.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/pm3_tests.sh b/tools/pm3_tests.sh index 616629cde..3568667b3 100755 --- a/tools/pm3_tests.sh +++ b/tools/pm3_tests.sh @@ -376,7 +376,7 @@ while true; do "G-Prox-II - len: 26 FC: 123 Card: 11223, Raw: f98c7038c63356c7ac26398c"; then break; fi if ! CheckExecute slow "lf T55 hid test" "$CLIENTBIN -c 'data load traces/lf_ATA5577_hid.pm3; lf search 1'" "HID Prox ID found"; then break; fi if ! CheckExecute slow "lf T55 hid test2" "$CLIENTBIN -c 'data load traces/lf_ATA5577_hid.pm3; lf hid demod'" \ - "HID Prox - 2006ec0c86 (1603) - len: 26 bit - OEM: 000 FC: 118 Card: 1603"; then break; fi + "HID H10301 26-bit; FC: 118 CN: 1603"; then break; fi if ! CheckExecute slow "lf T55 hid_84 test" "$CLIENTBIN -c 'data load traces/lf_ATA5577_hid_84.pm3; lf search 1'" "HID Prox ID found"; then break; fi if ! CheckExecute slow "lf T55 hid_84 test2" "$CLIENTBIN -c 'data load traces/lf_ATA5577_hid_84.pm3; lf hid demod'" \ "HID Prox - 9e000000000022006ec0c86 (1603)"; then break; fi From fdac4da3029104c2aa83d4e7f110082ec668bcca Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Tue, 6 Oct 2020 17:31:31 +0200 Subject: [PATCH 0904/1047] skip address read oob in lz4 for now --- common/lz4/lz4.c | 2 ++ common/lz4/lz4.h | 5 +++++ common/lz4/lz4hc.c | 6 ------ 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/common/lz4/lz4.c b/common/lz4/lz4.c index ac6cbbb99..67db8367e 100644 --- a/common/lz4/lz4.c +++ b/common/lz4/lz4.c @@ -322,6 +322,8 @@ static void LZ4_write32(void *memPtr, U32 value) { *(U32 *)memPtr = value; } typedef union { U16 u16; U32 u32; reg_t uArch; } __attribute__((packed)) unalign; static U16 LZ4_read16(const void *ptr) { return ((const unalign *)ptr)->u16; } +// Tolerate reads on buffer boundary +ATTRIBUTE_NO_SANITIZE_ADDRESS static U32 LZ4_read32(const void *ptr) { return ((const unalign *)ptr)->u32; } static reg_t LZ4_read_ARCH(const void *ptr) { return ((const unalign *)ptr)->uArch; } diff --git a/common/lz4/lz4.h b/common/lz4/lz4.h index bc8df87b7..42aedbbc3 100644 --- a/common/lz4/lz4.h +++ b/common/lz4/lz4.h @@ -42,6 +42,11 @@ extern "C" { /* --- Dependency --- */ #include /* size_t */ +#if defined(__clang__) || defined (__GNUC__) +# define ATTRIBUTE_NO_SANITIZE_ADDRESS __attribute__((no_sanitize_address)) +#else +# define ATTRIBUTE_NO_SANITIZE_ADDRESS +#endif /** Introduction diff --git a/common/lz4/lz4hc.c b/common/lz4/lz4hc.c index 6e74164a5..e92d63fe2 100644 --- a/common/lz4/lz4hc.c +++ b/common/lz4/lz4hc.c @@ -61,12 +61,6 @@ # pragma clang diagnostic ignored "-Wunused-function" #endif -#if defined(__clang__) || defined (__GNUC__) -# define ATTRIBUTE_NO_SANITIZE_ADDRESS __attribute__((no_sanitize_address)) -#else -# define ATTRIBUTE_NO_SANITIZE_ADDRESS -#endif - /*=== Enums ===*/ typedef enum { noDictCtx, usingDictCtxHc } dictCtx_directive; From e9480b8e69648df8c761231f04327da300cc5b2d Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Tue, 6 Oct 2020 17:43:49 +0200 Subject: [PATCH 0905/1047] update lz4 from repo --- common/lz4/lz4.c | 35 ++++++------ common/lz4/lz4.h | 7 +-- common/lz4/lz4hc.c | 134 ++++++++++++++++++++++++++++++++------------- 3 files changed, 117 insertions(+), 59 deletions(-) diff --git a/common/lz4/lz4.c b/common/lz4/lz4.c index 67db8367e..cc5ce9c80 100644 --- a/common/lz4/lz4.c +++ b/common/lz4/lz4.c @@ -247,6 +247,7 @@ static int g_debuglog_enable = 1; /*-************************************ * Types **************************************/ +#include #if defined(__cplusplus) || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */) # include typedef uint8_t BYTE; @@ -256,7 +257,6 @@ typedef int32_t S32; typedef uint64_t U64; typedef uintptr_t uptrval; #else -# include # if UINT_MAX != 4294967295UL # error "LZ4 code (when not C++ or C99) assumes that sizeof(int) == 4" # endif @@ -322,8 +322,6 @@ static void LZ4_write32(void *memPtr, U32 value) { *(U32 *)memPtr = value; } typedef union { U16 u16; U32 u32; reg_t uArch; } __attribute__((packed)) unalign; static U16 LZ4_read16(const void *ptr) { return ((const unalign *)ptr)->u16; } -// Tolerate reads on buffer boundary -ATTRIBUTE_NO_SANITIZE_ADDRESS static U32 LZ4_read32(const void *ptr) { return ((const unalign *)ptr)->u32; } static reg_t LZ4_read_ARCH(const void *ptr) { return ((const unalign *)ptr)->uArch; } @@ -1184,13 +1182,14 @@ _last_literals: if (outputDirective == fillOutput) { /* adapt lastRun to fill 'dst' */ assert(olimit >= op); - lastRun = (size_t)(olimit - op) - 1; - lastRun -= (lastRun + 240) / 255; + lastRun = (size_t)(olimit - op) - 1/*token*/; + lastRun -= (lastRun + 256 - RUN_MASK) / 256; /*additional length tokens*/ } else { assert(outputDirective == limitedOutput); return 0; /* cannot compress within `dst` budget. Stored indexes in hash table are nonetheless fine */ } } + DEBUGLOG(6, "Final literal run : %i literals", (int)lastRun); if (lastRun >= RUN_MASK) { size_t accumulator = lastRun - RUN_MASK; *op++ = RUN_MASK << ML_BITS; @@ -1668,7 +1667,9 @@ typedef enum { decode_full_block = 0, partial_decode = 1 } earlyEnd_directive; */ typedef enum { loop_error = -2, initial_error = -1, ok = 0 } variable_length_error; LZ4_FORCE_INLINE unsigned -read_variable_length(const BYTE **ip, const BYTE *lencheck, int loop_check, int initial_check, variable_length_error *error) { +read_variable_length(const BYTE **ip, const BYTE *lencheck, + int loop_check, int initial_check, + variable_length_error *error) { U32 length = 0; U32 s; if (initial_check && unlikely((*ip) >= lencheck)) { /* overflow detection */ @@ -1688,16 +1689,13 @@ read_variable_length(const BYTE **ip, const BYTE *lencheck, int loop_check, int return length; } -int LZ4_decompress_generic(const char *const src, char *const dst, int srcSize, int outputSize, endCondition_directive endOnInput, earlyEnd_directive partialDecoding, - dict_directive dict, const BYTE *const lowPrefix, const BYTE *const dictStart, const size_t dictSize); - /*! LZ4_decompress_generic() : * This generic decompression function covers all use cases. * It shall be instantiated several times, using different sets of directives. * Note that it is important for performance that this function really get inlined, * in order to remove useless branches during compilation optimization. */ -int +LZ4_FORCE_INLINE int LZ4_decompress_generic( const char *const src, char *const dst, @@ -1769,7 +1767,7 @@ LZ4_decompress_generic( /* decode literal length */ if (length == RUN_MASK) { variable_length_error error = ok; - length += read_variable_length(&ip, iend - RUN_MASK, endOnInput, endOnInput, &error); + length += read_variable_length(&ip, iend - RUN_MASK, (int)endOnInput, (int)endOnInput, &error); if (error == initial_error) { goto _output_error; } if ((safeDecode) && unlikely((uptrval)(op) + length < (uptrval)(op))) { goto _output_error; } /* overflow detection */ if ((safeDecode) && unlikely((uptrval)(ip) + length < (uptrval)(ip))) { goto _output_error; } /* overflow detection */ @@ -1817,7 +1815,7 @@ LZ4_decompress_generic( if (length == ML_MASK) { variable_length_error error = ok; if ((checkOffset) && (unlikely(match + dictSize < lowPrefix))) { goto _output_error; } /* Error : offset outside buffers */ - length += read_variable_length(&ip, iend - LASTLITERALS + 1, endOnInput, 0, &error); + length += read_variable_length(&ip, iend - LASTLITERALS + 1, (int)endOnInput, 0, &error); if (error != ok) { goto _output_error; } if ((safeDecode) && unlikely((uptrval)(op) + length < (uptrval)op)) { goto _output_error; } /* overflow detection */ length += MINMATCH; @@ -1846,7 +1844,7 @@ LZ4_decompress_generic( } } - if ((checkOffset) && (unlikely(match + dictSize < lowPrefix))) { goto _output_error; } /* Error : offset outside buffers */ + if (checkOffset && (unlikely(match + dictSize < lowPrefix))) { goto _output_error; } /* Error : offset outside buffers */ /* match starting within external dictionary */ if ((dict == usingExtDict) && (match < lowPrefix)) { if (unlikely(op + length > oend - LASTLITERALS)) { @@ -1948,7 +1946,7 @@ safe_decode: /* decode literal length */ if (length == RUN_MASK) { variable_length_error error = ok; - length += read_variable_length(&ip, iend - RUN_MASK, endOnInput, endOnInput, &error); + length += read_variable_length(&ip, iend - RUN_MASK, (int)endOnInput, (int)endOnInput, &error); if (error == initial_error) { goto _output_error; } if ((safeDecode) && unlikely((uptrval)(op) + length < (uptrval)(op))) { goto _output_error; } /* overflow detection */ if ((safeDecode) && unlikely((uptrval)(ip) + length < (uptrval)(ip))) { goto _output_error; } /* overflow detection */ @@ -1999,7 +1997,12 @@ safe_literal_copy: /* We must be on the last sequence (or invalid) because of the parsing limitations * so check that we exactly consume the input and don't overrun the output buffer. */ - if ((endOnInput) && ((ip + length != iend) || (cpy > oend))) { goto _output_error; } + if ((endOnInput) && ((ip + length != iend) || (cpy > oend))) { + DEBUGLOG(6, "should have been last run of literals") + DEBUGLOG(6, "ip(%p) + length(%i) = %p != iend (%p)", ip, (int)length, ip + length, iend); + DEBUGLOG(6, "or cpy(%p) > oend(%p)", cpy, oend); + goto _output_error; + } } memmove(op, ip, length); /* supports overlapping memory regions; only matters for in-place decompression scenarios */ ip += length; @@ -2029,7 +2032,7 @@ safe_literal_copy: _copy_match: if (length == ML_MASK) { variable_length_error error = ok; - length += read_variable_length(&ip, iend - LASTLITERALS + 1, endOnInput, 0, &error); + length += read_variable_length(&ip, iend - LASTLITERALS + 1, (int)endOnInput, 0, &error); if (error != ok) goto _output_error; if ((safeDecode) && unlikely((uptrval)(op) + length < (uptrval)op)) goto _output_error; /* overflow detection */ } diff --git a/common/lz4/lz4.h b/common/lz4/lz4.h index 42aedbbc3..99d3dcfe7 100644 --- a/common/lz4/lz4.h +++ b/common/lz4/lz4.h @@ -42,11 +42,6 @@ extern "C" { /* --- Dependency --- */ #include /* size_t */ -#if defined(__clang__) || defined (__GNUC__) -# define ATTRIBUTE_NO_SANITIZE_ADDRESS __attribute__((no_sanitize_address)) -#else -# define ATTRIBUTE_NO_SANITIZE_ADDRESS -#endif /** Introduction @@ -105,7 +100,7 @@ extern "C" { /*------ Version ------*/ #define LZ4_VERSION_MAJOR 1 /* for breaking interface changes */ #define LZ4_VERSION_MINOR 9 /* for new (non-breaking) interface capabilities */ -#define LZ4_VERSION_RELEASE 2 /* for tweaks, bug-fixes, or development */ +#define LZ4_VERSION_RELEASE 3 /* for tweaks, bug-fixes, or development */ #define LZ4_VERSION_NUMBER (LZ4_VERSION_MAJOR *100*100 + LZ4_VERSION_MINOR *100 + LZ4_VERSION_RELEASE) diff --git a/common/lz4/lz4hc.c b/common/lz4/lz4hc.c index e92d63fe2..0667a7cd9 100644 --- a/common/lz4/lz4hc.c +++ b/common/lz4/lz4hc.c @@ -268,7 +268,7 @@ LZ4HC_InsertAndGetWiderMatch( DEBUGLOG(7, "First match at index %u / %u (lowestMatchIndex)", matchIndex, lowestMatchIndex); - while ((matchIndex >= lowestMatchIndex) && (nbAttempts)) { + while ((matchIndex >= lowestMatchIndex) && (nbAttempts > 0)) { int matchLength = 0; nbAttempts--; assert(matchIndex < ipIndex); @@ -424,7 +424,7 @@ LZ4HC_InsertAndGetWiderMatch( } /* while ((matchIndex>=lowestMatchIndex) && (nbAttempts)) */ if (dict == usingDictCtxHc - && nbAttempts + && nbAttempts > 0 && ipIndex - lowestMatchIndex < LZ4_DISTANCE_MAX) { size_t const dictEndOffset = (size_t)(dictCtx->end - dictCtx->base); U32 dictMatchIndex = dictCtx->hashTable[LZ4HC_hashPtr(ip)]; @@ -497,7 +497,7 @@ LZ4_FORCE_INLINE int LZ4HC_encodeSequence( U32 const cost = 1 + llAdd + ll + 2 + mlAdd; if (start == NULL) start = *anchor; /* only works for single segment */ /* g_debuglog_enable = (pos >= 2228) & (pos <= 2262); */ - DEBUGLOG(6, "pos:%7u -- literals:%3u, match:%4i, offset:%5u, cost:%3u + %u", + DEBUGLOG(6, "pos:%7u -- literals:%4u, match:%4i, offset:%5u, cost:%4u + %5u", pos, (U32)(*ip - *anchor), matchLength, (U32)(*ip - match), cost, totalCost); @@ -506,7 +506,13 @@ LZ4_FORCE_INLINE int LZ4HC_encodeSequence( /* Encode Literal length */ length = (size_t)(*ip - *anchor); - if ((limit) && ((*op + (length / 255) + length + (2 + 1 + LASTLITERALS)) > oend)) return 1; /* Check output limit */ + LZ4_STATIC_ASSERT(notLimited == 0); + /* Check output limit */ + if (limit && ((*op + (length / 255) + length + (2 + 1 + LASTLITERALS)) > oend)) { + DEBUGLOG(6, "Not enough room to write %i literals (%i bytes remaining)", + (int)length, (int)(oend - *op)); + return 1; + } if (length >= RUN_MASK) { size_t len = length - RUN_MASK; *token = (RUN_MASK << ML_BITS); @@ -528,7 +534,10 @@ LZ4_FORCE_INLINE int LZ4HC_encodeSequence( /* Encode MatchLength */ assert(matchLength >= MINMATCH); length = (size_t)matchLength - MINMATCH; - if ((limit) && (*op + (length / 255) + (1 + LASTLITERALS) > oend)) return 1; /* Check output limit */ + if (limit && (*op + (length / 255) + (1 + LASTLITERALS) > oend)) { + DEBUGLOG(6, "Not enough room to write match length"); + return 1; /* Check output limit */ + } if (length >= ML_MASK) { *token += ML_MASK; length -= ML_MASK; @@ -552,7 +561,7 @@ LZ4_FORCE_INLINE int LZ4HC_compress_hashChain( char *const dest, int *srcSizePtr, int const maxOutputSize, - unsigned maxNbAttempts, + int maxNbAttempts, const limitedOutput_directive limit, const dictCtx_directive dict ) { @@ -581,7 +590,7 @@ LZ4_FORCE_INLINE int LZ4HC_compress_hashChain( /* init */ *srcSizePtr = 0; if (limit == fillOutput) oend -= LASTLITERALS; /* Hack for support LZ4 format restriction */ - if (inputSize < LZ4_minLength) goto _last_literals; /* Input too small, no compression (all literals) */ + if (inputSize < LZ4_minLength) goto _last_literals; /* Input too small, no compression (all literals) */ /* Main Loop */ while (ip <= mflimit) { @@ -658,7 +667,11 @@ _Search3: if (LZ4HC_encodeSequence(UPDATABLE(ip, op, anchor), ml, ref, limit, oend)) goto _dest_overflow; ip = start2; optr = op; - if (LZ4HC_encodeSequence(UPDATABLE(ip, op, anchor), ml2, ref2, limit, oend)) goto _dest_overflow; + if (LZ4HC_encodeSequence(UPDATABLE(ip, op, anchor), ml2, ref2, limit, oend)) { + ml = ml2; + ref = ref2; + goto _dest_overflow; + } continue; } @@ -735,17 +748,18 @@ _last_literals: /* Encode Last Literals */ { size_t lastRunSize = (size_t)(iend - anchor); /* literals */ - size_t litLength = (lastRunSize + 255 - RUN_MASK) / 255; - size_t const totalSize = 1 + litLength + lastRunSize; + size_t llAdd = (lastRunSize + 255 - RUN_MASK) / 255; + size_t const totalSize = 1 + llAdd + lastRunSize; if (limit == fillOutput) oend += LASTLITERALS; /* restore correct value */ if (limit && (op + totalSize > oend)) { - if (limit == limitedOutput) return 0; /* Check output limit */ + if (limit == limitedOutput) return 0; /* adapt lastRunSize to fill 'dest' */ - lastRunSize = (size_t)(oend - op) - 1; - litLength = (lastRunSize + 255 - RUN_MASK) / 255; - lastRunSize -= litLength; + lastRunSize = (size_t)(oend - op) - 1 /*token*/; + llAdd = (lastRunSize + 256 - RUN_MASK) / 256; + lastRunSize -= llAdd; } - ip = anchor + lastRunSize; + DEBUGLOG(6, "Final literal run : %i literals", (int)lastRunSize); + ip = anchor + lastRunSize; /* can be != iend if limit==fillOutput */ if (lastRunSize >= RUN_MASK) { size_t accumulator = lastRunSize - RUN_MASK; @@ -765,9 +779,27 @@ _last_literals: _dest_overflow: if (limit == fillOutput) { + /* Assumption : ip, anchor, ml and ref must be set correctly */ + size_t const ll = (size_t)(ip - anchor); + size_t const ll_addbytes = (ll + 240) / 255; + size_t const ll_totalCost = 1 + ll_addbytes + ll; + BYTE *const maxLitPos = oend - 3; /* 2 for offset, 1 for token */ + DEBUGLOG(6, "Last sequence overflowing"); op = optr; /* restore correct out pointer */ + if (op + ll_totalCost <= maxLitPos) { + /* ll validated; now adjust match length */ + size_t const bytesLeftForMl = (size_t)(maxLitPos - (op + ll_totalCost)); + size_t const maxMlSize = MINMATCH + (ML_MASK - 1) + (bytesLeftForMl * 255); + assert(maxMlSize < INT_MAX); + assert(ml >= 0); + if ((size_t)ml > maxMlSize) ml = (int)maxMlSize; + if ((oend + LASTLITERALS) - (op + ll_totalCost + 2) - 1 + ml >= MFLIMIT) { + LZ4HC_encodeSequence(UPDATABLE(ip, op, anchor), ml, ref, notLimited, oend); + } + } goto _last_literals; } + /* compression failed */ return 0; } @@ -794,7 +826,7 @@ LZ4_FORCE_INLINE int LZ4HC_compress_generic_internal( typedef enum { lz4hc, lz4opt } lz4hc_strat_e; typedef struct { lz4hc_strat_e strat; - U32 nbSearches; + int nbSearches; U32 targetLength; } cParams_t; static const cParams_t clTable[LZ4HC_CLEVEL_MAX + 1] = { @@ -813,7 +845,8 @@ LZ4_FORCE_INLINE int LZ4HC_compress_generic_internal( { lz4opt, 16384, LZ4_OPT_NUM }, /* 12==LZ4HC_CLEVEL_MAX */ }; - DEBUGLOG(4, "LZ4HC_compress_generic(ctx=%p, src=%p, srcSize=%d)", ctx, src, *srcSizePtr); + DEBUGLOG(4, "LZ4HC_compress_generic(ctx=%p, src=%p, srcSize=%d, limit=%d)", + ctx, src, *srcSizePtr, limit); if (limit == fillOutput && dstCapacity < 1) return 0; /* Impossible to store anything */ if ((U32)*srcSizePtr > (U32)LZ4_MAX_INPUT_SIZE) return 0; /* Unsupported input size (too large or negative) */ @@ -834,7 +867,7 @@ LZ4_FORCE_INLINE int LZ4HC_compress_generic_internal( assert(cParam.strat == lz4opt); result = LZ4HC_compress_optimal(ctx, src, dst, srcSizePtr, dstCapacity, - (int)cParam.nbSearches, cParam.targetLength, limit, + cParam.nbSearches, cParam.targetLength, limit, cLevel == LZ4HC_CLEVEL_MAX, /* ultra mode */ dict, favor); } @@ -967,10 +1000,12 @@ int LZ4_compress_HC_destSize(void *state, const char *source, char *dest, int *s **************************************/ /* allocation */ LZ4_streamHC_t *LZ4_createStreamHC(void) { - LZ4_streamHC_t *const LZ4_streamHCPtr = (LZ4_streamHC_t *)ALLOC(sizeof(LZ4_streamHC_t)); - if (LZ4_streamHCPtr == NULL) return NULL; - LZ4_initStreamHC(LZ4_streamHCPtr, sizeof(*LZ4_streamHCPtr)); /* full initialization, malloc'ed buffer can be full of garbage */ - return LZ4_streamHCPtr; + LZ4_streamHC_t *const state = (LZ4_streamHC_t *)ALLOC(sizeof(LZ4_streamHC_t)); + if (LZ4_initStreamHC(state, sizeof(*state)) == NULL) { + free(state); + return NULL; + } + return state; } int LZ4_freeStreamHC(LZ4_streamHC_t *LZ4_streamHCPtr) { @@ -980,10 +1015,7 @@ int LZ4_freeStreamHC(LZ4_streamHC_t *LZ4_streamHCPtr) { return 0; } -// Skip AddressSanitizer which breaks compilation strangely on -// lz4/lz4hc.c: error: writing 2 bytes into a region of size 1 [-Werror=stringop-overflow=] -// | LZ4_streamHCPtr->internal_donotuse.favorDecSpeed = 0; -ATTRIBUTE_NO_SANITIZE_ADDRESS + LZ4_streamHC_t *LZ4_initStreamHC(void *buffer, size_t size) { LZ4_streamHC_t *const LZ4_streamHCPtr = (LZ4_streamHC_t *)buffer; if (buffer == NULL) return NULL; @@ -1087,8 +1119,8 @@ static int LZ4_compressHC_continue_generic(LZ4_streamHC_t *LZ4_streamHCPtr, int *srcSizePtr, int dstCapacity, limitedOutput_directive limit) { LZ4HC_CCtx_internal *const ctxPtr = &LZ4_streamHCPtr->internal_donotuse; - DEBUGLOG(4, "LZ4_compressHC_continue_generic(ctx=%p, src=%p, srcSize=%d)", - LZ4_streamHCPtr, src, *srcSizePtr); + DEBUGLOG(5, "LZ4_compressHC_continue_generic(ctx=%p, src=%p, srcSize=%d, limit=%d)", + LZ4_streamHCPtr, src, *srcSizePtr, limit); assert(ctxPtr != NULL); /* auto-init if forgotten */ if (ctxPtr->base == NULL) LZ4HC_init_internal(ctxPtr, (const BYTE *) src); @@ -1304,6 +1336,8 @@ static int LZ4HC_compress_optimal(LZ4HC_CCtx_internal *ctx, BYTE *op = (BYTE *) dst; BYTE *opSaved = (BYTE *) dst; BYTE *oend = op + dstCapacity; + int ovml = MINMATCH; /* overflow - last sequence */ + const BYTE *ovref = NULL; /* init */ #ifdef LZ4HC_HEAPMODE @@ -1315,7 +1349,6 @@ static int LZ4HC_compress_optimal(LZ4HC_CCtx_internal *ctx, if (sufficient_len >= LZ4_OPT_NUM) sufficient_len = LZ4_OPT_NUM - 1; /* Main Loop */ - assert(ip - anchor < LZ4_MAX_INPUT_SIZE); while (ip <= mflimit) { int const llen = (int)(ip - anchor); int best_mlen, best_off; @@ -1329,8 +1362,11 @@ static int LZ4HC_compress_optimal(LZ4HC_CCtx_internal *ctx, int const firstML = firstMatch.len; const BYTE *const matchPos = ip - firstMatch.off; opSaved = op; - if (LZ4HC_encodeSequence(UPDATABLE(ip, op, anchor), firstML, matchPos, limit, oend)) /* updates ip, op and anchor */ + if (LZ4HC_encodeSequence(UPDATABLE(ip, op, anchor), firstML, matchPos, limit, oend)) { /* updates ip, op and anchor */ + ovml = firstML; + ovref = matchPos; goto _dest_overflow; + } continue; } @@ -1519,8 +1555,11 @@ encode: /* cur, last_match_pos, best_mlen, best_off must be set */ assert(ml >= MINMATCH); assert((offset >= 1) && (offset <= LZ4_DISTANCE_MAX)); opSaved = op; - if (LZ4HC_encodeSequence(UPDATABLE(ip, op, anchor), ml, ip - offset, limit, oend)) /* updates ip, op and anchor */ + if (LZ4HC_encodeSequence(UPDATABLE(ip, op, anchor), ml, ip - offset, limit, oend)) { /* updates ip, op and anchor */ + ovml = ml; + ovref = ip - offset; goto _dest_overflow; + } } } } /* while (ip <= mflimit) */ @@ -1529,8 +1568,8 @@ _last_literals: /* Encode Last Literals */ { size_t lastRunSize = (size_t)(iend - anchor); /* literals */ - size_t litLength = (lastRunSize + 255 - RUN_MASK) / 255; - size_t const totalSize = 1 + litLength + lastRunSize; + size_t llAdd = (lastRunSize + 255 - RUN_MASK) / 255; + size_t const totalSize = 1 + llAdd + lastRunSize; if (limit == fillOutput) oend += LASTLITERALS; /* restore correct value */ if (limit && (op + totalSize > oend)) { if (limit == limitedOutput) { /* Check output limit */ @@ -1538,11 +1577,12 @@ _last_literals: goto _return_label; } /* adapt lastRunSize to fill 'dst' */ - lastRunSize = (size_t)(oend - op) - 1; - litLength = (lastRunSize + 255 - RUN_MASK) / 255; - lastRunSize -= litLength; + lastRunSize = (size_t)(oend - op) - 1 /*token*/; + llAdd = (lastRunSize + 256 - RUN_MASK) / 256; + lastRunSize -= llAdd; } - ip = anchor + lastRunSize; + DEBUGLOG(6, "Final literal run : %i literals", (int)lastRunSize); + ip = anchor + lastRunSize; /* can be != iend if limit==fillOutput */ if (lastRunSize >= RUN_MASK) { size_t accumulator = lastRunSize - RUN_MASK; @@ -1563,7 +1603,27 @@ _last_literals: _dest_overflow: if (limit == fillOutput) { + /* Assumption : ip, anchor, ovml and ovref must be set correctly */ + size_t const ll = (size_t)(ip - anchor); + size_t const ll_addbytes = (ll + 240) / 255; + size_t const ll_totalCost = 1 + ll_addbytes + ll; + BYTE *const maxLitPos = oend - 3; /* 2 for offset, 1 for token */ + DEBUGLOG(6, "Last sequence overflowing (only %i bytes remaining)", (int)(oend - 1 - opSaved)); op = opSaved; /* restore correct out pointer */ + if (op + ll_totalCost <= maxLitPos) { + /* ll validated; now adjust match length */ + size_t const bytesLeftForMl = (size_t)(maxLitPos - (op + ll_totalCost)); + size_t const maxMlSize = MINMATCH + (ML_MASK - 1) + (bytesLeftForMl * 255); + assert(maxMlSize < INT_MAX); + assert(ovml >= 0); + if ((size_t)ovml > maxMlSize) ovml = (int)maxMlSize; + if ((oend + LASTLITERALS) - (op + ll_totalCost + 2) - 1 + ovml >= MFLIMIT) { + DEBUGLOG(6, "Space to end : %i + ml (%i)", (int)((oend + LASTLITERALS) - (op + ll_totalCost + 2) - 1), ovml); + DEBUGLOG(6, "Before : ip = %p, anchor = %p", ip, anchor); + LZ4HC_encodeSequence(UPDATABLE(ip, op, anchor), ovml, ovref, notLimited, oend); + DEBUGLOG(6, "After : ip = %p, anchor = %p", ip, anchor); + } + } goto _last_literals; } _return_label: From b073a1df6504cc8cf0418d8484b54ddd6cc8ecc6 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Mon, 28 Sep 2020 14:06:44 +0200 Subject: [PATCH 0906/1047] apply our patch on latest lz4 --- common/lz4/lz4.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/common/lz4/lz4.c b/common/lz4/lz4.c index cc5ce9c80..f65fbb71e 100644 --- a/common/lz4/lz4.c +++ b/common/lz4/lz4.c @@ -1689,13 +1689,16 @@ read_variable_length(const BYTE **ip, const BYTE *lencheck, return length; } +int LZ4_decompress_generic(const char* const src, char* const dst, int srcSize, int outputSize, endCondition_directive endOnInput, earlyEnd_directive partialDecoding, + dict_directive dict, const BYTE* const lowPrefix, const BYTE* const dictStart, const size_t dictSize ); + /*! LZ4_decompress_generic() : * This generic decompression function covers all use cases. * It shall be instantiated several times, using different sets of directives. * Note that it is important for performance that this function really get inlined, * in order to remove useless branches during compilation optimization. */ -LZ4_FORCE_INLINE int +int LZ4_decompress_generic( const char *const src, char *const dst, From 02d861d30480774202b54e941816f9788d01744a Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Tue, 6 Oct 2020 17:31:31 +0200 Subject: [PATCH 0907/1047] skip address read oob in lz4 for now --- common/lz4/lz4.c | 2 ++ common/lz4/lz4.h | 5 +++++ 2 files changed, 7 insertions(+) diff --git a/common/lz4/lz4.c b/common/lz4/lz4.c index f65fbb71e..7d6e1b356 100644 --- a/common/lz4/lz4.c +++ b/common/lz4/lz4.c @@ -322,6 +322,8 @@ static void LZ4_write32(void *memPtr, U32 value) { *(U32 *)memPtr = value; } typedef union { U16 u16; U32 u32; reg_t uArch; } __attribute__((packed)) unalign; static U16 LZ4_read16(const void *ptr) { return ((const unalign *)ptr)->u16; } +// Tolerate reads on buffer boundary +ATTRIBUTE_NO_SANITIZE_ADDRESS static U32 LZ4_read32(const void *ptr) { return ((const unalign *)ptr)->u32; } static reg_t LZ4_read_ARCH(const void *ptr) { return ((const unalign *)ptr)->uArch; } diff --git a/common/lz4/lz4.h b/common/lz4/lz4.h index 99d3dcfe7..c4ea38094 100644 --- a/common/lz4/lz4.h +++ b/common/lz4/lz4.h @@ -42,6 +42,11 @@ extern "C" { /* --- Dependency --- */ #include /* size_t */ +#if defined(__clang__) || defined (__GNUC__) +# define ATTRIBUTE_NO_SANITIZE_ADDRESS __attribute__((no_sanitize_address)) +#else +# define ATTRIBUTE_NO_SANITIZE_ADDRESS +#endif /** Introduction From c55b4d5aac58449ee6b7e6dd90c2878fa44c912f Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Tue, 6 Oct 2020 17:50:20 +0200 Subject: [PATCH 0908/1047] style --- client/src/cmdlfhid.c | 32 ++++++++++++++-------------- client/src/cmdlfkeri.c | 12 +++++------ client/src/cmdwiegand.c | 46 ++++++++++++++++++++--------------------- 3 files changed, 45 insertions(+), 45 deletions(-) diff --git a/client/src/cmdlfhid.c b/client/src/cmdlfhid.c index 6276abb8b..a6ecd8e2f 100644 --- a/client/src/cmdlfhid.c +++ b/client/src/cmdlfhid.c @@ -167,8 +167,8 @@ static int CmdHIDWatch(const char *Cmd) { "Enables HID compatible reader mode printing details.\n" "By default, values are printed and logged until the button is pressed or another USB command is issued.\n", "lf hid watch" - ); - + ); + void *argtable[] = { arg_param_begin, arg_param_end @@ -198,8 +198,8 @@ static int CmdHIDSim(const char *Cmd) { CLIParserInit(&ctx, "lf hid sim", "Enables simulation of HID card with card number.", "lf hid sim 2006ec0c86" - ); - + ); + void *argtable[] = { arg_param_begin, arg_lit0("l", "long", "Simulate HID tag with long ID"), @@ -215,7 +215,7 @@ static int CmdHIDSim(const char *Cmd) { CLIParserFree(ctx); if (long_id) { - for (i=0; i < idlen; ++i) { + for (i = 0; i < idlen; ++i) { hi2 = (hi2 << 4) | (hi >> 28); hi = (hi << 4) | (lo >> 28); lo = (lo << 4) | (id[i] >> 4); //get first 4 bits @@ -227,7 +227,7 @@ static int CmdHIDSim(const char *Cmd) { PrintAndLogEx(INFO, "Simulating HID tag with long ID: " _GREEN_("%x%08x%08x"), hi2, hi, lo); payload.longFMT = 1; } else { - for (i=0; i < idlen; ++i) { + for (i = 0; i < idlen; ++i) { hi = (hi << 4) | (lo >> 28); lo = (lo << 4) | (id[i] >> 4); //get first 4 bits @@ -266,8 +266,8 @@ static int CmdHIDClone(const char *Cmd) { "Clone HID to T55x7. Tag must be on antenna!", "lf hid clone 2006ec0c86\n" "lf hid clone -l 2006ec0c86" - ); - + ); + void *argtable[] = { arg_param_begin, arg_lit0("l", "long", "84bit HID long ID"), @@ -285,7 +285,7 @@ static int CmdHIDClone(const char *Cmd) { uint8_t longid[1] = {0}; if (long_id) { - for (i=0; i < idlen; ++i) { + for (i = 0; i < idlen; ++i) { hi2 = (hi2 << 4) | (hi >> 28); hi = (hi << 4) | (lo >> 28); lo = (lo << 4) | (id[i] >> 4); //get first 4 bits @@ -298,7 +298,7 @@ static int CmdHIDClone(const char *Cmd) { longid[0] = 1; } else { - for (i=0; i < idlen; ++i) { + for (i = 0; i < idlen; ++i) { hi = (hi << 4) | (lo >> 28); lo = (lo << 4) | (id[i] >> 4); //get first 4 bits @@ -350,8 +350,8 @@ static int CmdHIDBrute(const char *Cmd) { "lf hid brute -w H10301 -f 224\n" "lf hid brute -w H10301 -f 21 -d 2000\n" "lf hid brute -v -w H10301 -f 21 -c 200 -d 2000\n" - ); - + ); + void *argtable[] = { arg_param_begin, arg_lit0("v", "verbose", "verbose logging, show all tries"), @@ -360,18 +360,18 @@ static int CmdHIDBrute(const char *Cmd) { arg_int0("c", "cn", "dec", "card number to start with"), arg_int0("i", NULL, "dec", "issue level"), arg_int0("o", "oem", "dec", "OEM code"), - arg_int0("d", "delay", "dec", "delay betweens attempts in ms. Default 1000ms"), + arg_int0("d", "delay", "dec", "delay betweens attempts in ms. Default 1000ms"), arg_lit0(NULL, "up", "direction to increment card number. (default is both directions)"), - arg_lit0(NULL, "down", "direction to decrement card number. (default is both directions)"), + arg_lit0(NULL, "down", "direction to decrement card number. (default is both directions)"), arg_param_end }; CLIExecWithReturn(ctx, Cmd, argtable, false); bool verbose = arg_get_lit(ctx, 1); - + CLIGetStrWithReturn(ctx, 2, format, &formatLen); - format_idx = HIDFindCardFormat((char*) format); + format_idx = HIDFindCardFormat((char *) format); if (format_idx == -1) { PrintAndLogEx(WARNING, "Unknown format: " _YELLOW_("%s"), format); CLIParserFree(ctx); diff --git a/client/src/cmdlfkeri.c b/client/src/cmdlfkeri.c index ee11144d8..1279c6f8c 100644 --- a/client/src/cmdlfkeri.c +++ b/client/src/cmdlfkeri.c @@ -186,7 +186,7 @@ static int CmdKeriRead(const char *Cmd) { static int CmdKeriClone(const char *Cmd) { bool q5 = false; - + uint8_t keritype[2] = {'i'}; // default to internalid int typeLen = 0; uint32_t fc = 0; @@ -213,14 +213,14 @@ static int CmdKeriClone(const char *Cmd) { void *argtable[] = { arg_param_begin, - arg_lit0("q", "q5", "specify writing to Q5/T5555 tag"), + arg_lit0("q", "q5", "specify writing to Q5/T5555 tag"), arg_str0("t", "type", "", "Type m - MS, i - Internal ID"), arg_int0(NULL, "fc", "", "Facility Code"), arg_int1(NULL, "id", "", "Keri ID"), arg_param_end }; CLIExecWithReturn(ctx, Cmd, argtable, false); - + if (arg_get_lit(ctx, 1)) { blocks[0] = T5555_FIXED | T5555_MODULATION_PSK1 | T5555_SET_BITRATE(32) | T5555_PSK_RF_2 | 2 << T5555_MAXBLOCK_SHIFT; q5 = true; @@ -268,8 +268,8 @@ static int CmdKeriSim(const char *Cmd) { CLIParserInit(&ctx, "lf keri sim", "Enables simulation of KERI card with card number.", "lf keri sim --id 112233" - ); - + ); + void *argtable[] = { arg_param_begin, arg_int1(NULL, "id", "", "KERI Internal ID"), @@ -280,7 +280,7 @@ static int CmdKeriSim(const char *Cmd) { uint64_t internalid = arg_get_int_def(ctx, 1, 0); CLIParserFree(ctx); - + internalid |= 0x80000000; internalid <<= 3; internalid += 7; diff --git a/client/src/cmdwiegand.c b/client/src/cmdwiegand.c index 25727db33..0e4b31b1c 100644 --- a/client/src/cmdwiegand.c +++ b/client/src/cmdwiegand.c @@ -26,30 +26,30 @@ static int CmdHelp(const char *Cmd); static void print_wiegand_code(wiegand_message_t *packed) { - const char* s = "Encoded wiegand: "; + const char *s = "Encoded wiegand: "; if (packed->Top != 0) { PrintAndLogEx(SUCCESS, "%s" _GREEN_("%X%08X%08X"), - s, - (uint32_t)packed->Top, - (uint32_t)packed->Mid, - (uint32_t)packed->Bot - ); + s, + (uint32_t)packed->Top, + (uint32_t)packed->Mid, + (uint32_t)packed->Bot + ); } else { PrintAndLogEx(SUCCESS, "%s" _YELLOW_("%X%08X"), - s, - (uint32_t)packed->Mid, - (uint32_t)packed->Bot - ); + s, + (uint32_t)packed->Mid, + (uint32_t)packed->Bot + ); } } int CmdWiegandList(const char *Cmd) { - + CLIParserContext *ctx; CLIParserInit(&ctx, "wiegand info", "List available wiegand formats", "wiegand list" - ); + ); void *argtable[] = { arg_param_begin, @@ -68,7 +68,7 @@ int CmdWiegandEncode(const char *Cmd) { CLIParserInit(&ctx, "wiegand encode", "Encode wiegand formatted number to raw hex", "wiegand encode -w H10301 --fc 101 --cn 1337" - ); + ); void *argtable[] = { arg_param_begin, @@ -76,22 +76,22 @@ int CmdWiegandEncode(const char *Cmd) { arg_u64_1(NULL, "cn", "", "card number"), arg_u64_0(NULL, "issue", "", "issue level"), arg_u64_0(NULL, "oem", "", "OEM code"), - arg_str1("w", "wiegand", "", "see `wiegand list` for available formats"), + arg_str1("w", "wiegand", "", "see `wiegand list` for available formats"), arg_param_end }; CLIExecWithReturn(ctx, Cmd, argtable, true); wiegand_card_t data; memset(&data, 0, sizeof(wiegand_card_t)); - + data.FacilityCode = arg_get_u32_def(ctx, 1, 0); data.CardNumber = arg_get_u64_def(ctx, 2, 0); data.IssueLevel = arg_get_u32_def(ctx, 3, 0); data.OEM = arg_get_u32_def(ctx, 4, 0); - + int len = 0; char format[16] = {0}; - CLIParamStrToBuf(arg_get_str(ctx, 5), (uint8_t*)format, sizeof(format), &len); + CLIParamStrToBuf(arg_get_str(ctx, 5), (uint8_t *)format, sizeof(format), &len); CLIParserFree(ctx); int idx = HIDFindCardFormat(format); @@ -118,7 +118,7 @@ int CmdWiegandDecode(const char *Cmd) { CLIParserInit(&ctx, "wiegand decode", "Decode raw hex to wiegand format", "wiegand decode --raw 2006f623ae" - ); + ); void *argtable[] = { arg_param_begin, @@ -128,19 +128,19 @@ int CmdWiegandDecode(const char *Cmd) { }; CLIExecWithReturn(ctx, Cmd, argtable, false); - bool ignore_parity = arg_get_lit(ctx, 1); + bool ignore_parity = arg_get_lit(ctx, 1); int len = 0; char hex[40] = {0}; - CLIParamStrToBuf(arg_get_str(ctx, 2), (uint8_t*)hex, sizeof(hex), &len); + CLIParamStrToBuf(arg_get_str(ctx, 2), (uint8_t *)hex, sizeof(hex), &len); CLIParserFree(ctx); - + if (len == 0) { PrintAndLogEx(ERR, "empty input"); return PM3_EINVARG; } - + uint32_t top = 0, mid = 0, bot = 0; - hexstring_to_u96(&top, &mid, &bot, hex); + hexstring_to_u96(&top, &mid, &bot, hex); wiegand_message_t packed = initialize_message_object(top, mid, bot); HIDTryUnpack(&packed, ignore_parity); From 64f9bb5e01cc903515904548d082d19134c3acf8 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Tue, 6 Oct 2020 18:00:00 +0200 Subject: [PATCH 0909/1047] style --- client/deps/cliparser/argtable3.c | 16 +++++----- client/deps/cliparser/argtable3.h | 22 +++++++------- client/deps/cliparser/cliparser.c | 2 +- client/deps/jansson/pack_unpack.c | 2 +- client/deps/reveng/cli.c | 2 +- client/src/cmdcrc.c | 2 +- client/src/cmddata.c | 6 ++-- client/src/cmdflashmem.c | 34 ++++++++++----------- client/src/cmdhf14a.c | 2 +- client/src/cmdhficlass.c | 12 ++++---- client/src/cmdhfst.c | 12 ++++---- client/src/cmdhfwaveshare.c | 26 ++++++++-------- client/src/emv/emv_roca.c | 4 +-- client/src/preferences.c | 2 +- client/src/proxguiqt.cpp | 44 +++++++++++++-------------- include/iso14b.h | 30 +++++++++--------- include/iso15.h | 16 +++++----- include/iso18.h | 12 ++++---- include/mifare.h | 14 ++++----- tools/mf_nonce_brute/mf_nonce_brute.c | 10 +++--- 20 files changed, 135 insertions(+), 135 deletions(-) diff --git a/client/deps/cliparser/argtable3.c b/client/deps/cliparser/argtable3.c index c34ee982b..2fe32b082 100644 --- a/client/deps/cliparser/argtable3.c +++ b/client/deps/cliparser/argtable3.c @@ -2231,9 +2231,9 @@ struct arg_int *arg_intn( #include #include static uint64_t strtollu0X(const char *str, - const char * *endptr, - char X, - int base) { + const char * *endptr, + char X, + int base) { uint64_t val; /* stores result */ int s = 1; /* sign is +1 or -1 */ const char *ptr = str; /* ptr to current position in str */ @@ -4529,11 +4529,11 @@ static void arg_cat_optionv(char *dest, } if (datatype) { -/* if (longopts) - arg_cat(&dest, "=", &ndest); - else if (shortopts) - arg_cat(&dest, " ", &ndest); -*/ + /* if (longopts) + arg_cat(&dest, "=", &ndest); + else if (shortopts) + arg_cat(&dest, " ", &ndest); + */ if (longopts) arg_cat(&dest, " ", &ndest); else if (shortopts) diff --git a/client/deps/cliparser/argtable3.h b/client/deps/cliparser/argtable3.h index 2988d013f..55564aa2f 100644 --- a/client/deps/cliparser/argtable3.h +++ b/client/deps/cliparser/argtable3.h @@ -192,19 +192,19 @@ struct arg_int *arg_int1(const char *shortopts, const char *longopts, const char struct arg_int *arg_intn(const char *shortopts, const char *longopts, const char *datatype, int mincount, int maxcount, const char *glossary); struct arg_u64 *arg_u64_0(const char *shortopts, - const char *longopts, - const char *datatype, - const char *glossary); + const char *longopts, + const char *datatype, + const char *glossary); struct arg_u64 *arg_u64_1(const char *shortopts, - const char *longopts, - const char *datatype, - const char *glossary); + const char *longopts, + const char *datatype, + const char *glossary); struct arg_u64 *arg_u64_n(const char *shortopts, - const char *longopts, - const char *datatype, - int mincount, - int maxcount, - const char *glossary); + const char *longopts, + const char *datatype, + int mincount, + int maxcount, + const char *glossary); struct arg_dbl *arg_dbl0(const char *shortopts, diff --git a/client/deps/cliparser/cliparser.c b/client/deps/cliparser/cliparser.c index 8ce757792..cc82fc334 100644 --- a/client/deps/cliparser/cliparser.c +++ b/client/deps/cliparser/cliparser.c @@ -70,7 +70,7 @@ int CLIParserParseArg(CLIParserContext *ctx, int argc, char **argv, void *vargta PrintAndLogEx(NORMAL, "\n"_SectionTagColor_("usage:")); PrintAndLogEx(NORMAL, " "_CommandColor_("%s")NOLF, ctx->programName); arg_print_syntax(stdout, ctx->argtable, "\n\n"); - + PrintAndLogEx(NORMAL, _SectionTagColor_("options:")); arg_print_glossary(stdout, ctx->argtable, " "_ArgColor_("%-30s")" "_ArgHelpColor_("%s")"\n"); diff --git a/client/deps/jansson/pack_unpack.c b/client/deps/jansson/pack_unpack.c index 5ee4a8be9..fbe0d44ef 100644 --- a/client/deps/jansson/pack_unpack.c +++ b/client/deps/jansson/pack_unpack.c @@ -745,7 +745,7 @@ static int unpack(scanner_t *s, json_t *root, va_list *ap) { json_error_wrong_type, "Expected true or false, got %s", type_name(root) - ); + ); return -1; } diff --git a/client/deps/reveng/cli.c b/client/deps/reveng/cli.c index b0c72421b..5d5d91a18 100644 --- a/client/deps/reveng/cli.c +++ b/client/deps/reveng/cli.c @@ -333,7 +333,7 @@ ipqx: mbynum(&model, --args); ufound(&model); } while (args); - mfree(&model); + mfree(&model); break; case 'd': /* d dump CRC model */ /* maybe we don't want to do this: diff --git a/client/src/cmdcrc.c b/client/src/cmdcrc.c index 964f19247..4f241dcee 100644 --- a/client/src/cmdcrc.c +++ b/client/src/cmdcrc.c @@ -447,7 +447,7 @@ static int CmdrevengSearch(const char *Cmd) { ); if (crcChars == 0) { - free(Models[i]); + free(Models[i]); continue; } diff --git a/client/src/cmddata.c b/client/src/cmddata.c index f9bef7083..5d0c002a7 100644 --- a/client/src/cmddata.c +++ b/client/src/cmddata.c @@ -1812,7 +1812,7 @@ static int CmdMtrim(const char *Cmd) { uint32_t start = 0, stop = 0; sscanf(Cmd, "%u %u", &start, &stop); - if (start > GraphTraceLen || stop > GraphTraceLen || start >= stop) + if (start > GraphTraceLen || stop > GraphTraceLen || start >= stop) return PM3_ESOFT; // leave start position sample @@ -1909,7 +1909,7 @@ static int CmdTimeScale(const char *Cmd) { "data timescale --sr 125 -u ms -> for LF sampled at 125 kHz. Reading will be in milliseconds\n" "data timescale --sr 1.695 -u us -> for HF sampled at 16 * fc/128. Reading will be in microseconds\n" "data timescale --sr 16 -u ETU -> for HF with 16 samples per ETU (fc/128). Reading will be in ETUs" - ); + ); void *argtable[] = { arg_param_begin, arg_dbl1(NULL, "sr", "", "sets timescale factor according to sampling rate"), @@ -1924,7 +1924,7 @@ static int CmdTimeScale(const char *Cmd) { } int len = 0; CursorScaleFactorUnit[0] = '\x00'; - CLIParamStrToBuf(arg_get_str(ctx, 2), (uint8_t*)CursorScaleFactorUnit, sizeof(CursorScaleFactorUnit), &len); + CLIParamStrToBuf(arg_get_str(ctx, 2), (uint8_t *)CursorScaleFactorUnit, sizeof(CursorScaleFactorUnit), &len); CLIParserFree(ctx); RepaintGraphWindow(); return PM3_SUCCESS; diff --git a/client/src/cmdflashmem.c b/client/src/cmdflashmem.c index 274d9366b..7f663c45b 100644 --- a/client/src/cmdflashmem.c +++ b/client/src/cmdflashmem.c @@ -27,7 +27,7 @@ static int CmdHelp(const char *Cmd); static int CmdFlashmemSpiBaudrate(const char *Cmd) { - + CLIParserContext *ctx; CLIParserInit(&ctx, "mem baudrate", "Set the baudrate for the SPI flash memory communications.\n" @@ -35,8 +35,8 @@ static int CmdFlashmemSpiBaudrate(const char *Cmd) { "Unless you know what you are doing, please stay at 24MHz.\n" "If >= 24MHz, FASTREADS instead of READS instruction will be used.", "mem baudrate --mhz 48" - ); - + ); + void *argtable[] = { arg_param_begin, arg_int1(NULL, "mhz", "<24|48>", "SPI baudrate in MHz"), @@ -72,7 +72,7 @@ static int CmdFlashMemLoad(const char *Cmd) { "mem load -f mfc_default_keys -m -> upload MFC keys\n" "mem load -f t55xx_default_pwds -t -> upload T55XX passwords\n" "mem load -f iclass_default_keys -i -> upload iCLASS keys\n" - ); + ); void *argtable[] = { arg_param_begin, @@ -88,10 +88,10 @@ static int CmdFlashMemLoad(const char *Cmd) { int offset = arg_get_int_def(ctx, 1, 0); bool is_mfc = arg_get_lit(ctx, 2); bool is_iclass = arg_get_lit(ctx, 3); - bool is_t55xx = arg_get_lit(ctx, 4); + bool is_t55xx = arg_get_lit(ctx, 4); int fnlen = 0; char filename[FILE_PATH_SIZE] = {0}; - CLIParamStrToBuf(arg_get_str(ctx, 5), (uint8_t*)filename, FILE_PATH_SIZE, &fnlen); + CLIParamStrToBuf(arg_get_str(ctx, 5), (uint8_t *)filename, FILE_PATH_SIZE, &fnlen); CLIParserFree(ctx); Dictionary_t d = DICTIONARY_NONE; @@ -227,7 +227,7 @@ static int CmdFlashMemDump(const char *Cmd) { "mem dump -f myfile -> download all flashmem to file\n" "mem dump --view -o 262015 --len 128 -> display 128 bytes from offset 262015 (RSA sig)\n" "mem dump --view -f myfile -o 241664 --len 58 -> display 58 bytes from offset 241664 and save to file" - ); + ); void *argtable[] = { arg_param_begin, @@ -244,7 +244,7 @@ static int CmdFlashMemDump(const char *Cmd) { bool view = arg_get_lit(ctx, 3); int fnlen = 0; char filename[FILE_PATH_SIZE] = {0}; - CLIParamStrToBuf(arg_get_str(ctx, 4), (uint8_t*)filename, FILE_PATH_SIZE, &fnlen); + CLIParamStrToBuf(arg_get_str(ctx, 4), (uint8_t *)filename, FILE_PATH_SIZE, &fnlen); CLIParserFree(ctx); uint8_t *dump = calloc(len, sizeof(uint8_t)); @@ -282,7 +282,7 @@ static int CmdFlashMemWipe(const char *Cmd) { _WHITE_("[ ") _RED_("!!! OBS") " ] use with caution", "mem wipe -p 0 -> wipes first page" // "mem wipe -i -> inital total wipe" - ); + ); void *argtable[] = { arg_param_begin, @@ -297,7 +297,7 @@ static int CmdFlashMemWipe(const char *Cmd) { // initalwipe = arg_get_lit(ctx, 2); CLIParserFree(ctx); - if (page < 0 || page > 2 ) { + if (page < 0 || page > 2) { PrintAndLogEx(WARNING, "page must be 0, 1 or 2"); return PM3_EINVARG; } @@ -309,8 +309,8 @@ static int CmdFlashMemWipe(const char *Cmd) { PrintAndLogEx(WARNING, "timeout while waiting for reply."); return PM3_ETIMEOUT; } - - const char* msg = "Flash WIPE "; + + const char *msg = "Flash WIPE "; uint8_t isok = resp.oldarg[0] & 0xFF; if (isok) PrintAndLogEx(SUCCESS, "%s ( " _GREEN_("ok")" )", msg); @@ -329,7 +329,7 @@ static int CmdFlashMemInfo(const char *Cmd) { "Collect signature and verify it from flash memory", "mem info" // "mem info -s" - ); + ); void *argtable[] = { arg_param_begin, @@ -375,7 +375,7 @@ static int CmdFlashMemInfo(const char *Cmd) { PrintAndLogEx(NORMAL, ""); PrintAndLogEx(INFO, "--- " _CYAN_("RDV4 RSA signature") " ---------------"); for (int i = 0; i < (sizeof(mem.signature) / 32); i++) { - PrintAndLogEx(INFO, " %s", sprint_hex_inrow(mem.signature + (i * 32), 32)); + PrintAndLogEx(INFO, " %s", sprint_hex_inrow(mem.signature + (i * 32), 32)); } //------------------------------------------------------------------------------- @@ -453,7 +453,7 @@ static int CmdFlashMemInfo(const char *Cmd) { PrintAndLogEx(NORMAL, ""); PrintAndLogEx(INFO, "--- " _CYAN_("RDV4 RSA Public key") " --------------"); - char str_exp[10]; + char str_exp[10]; char str_pk[261]; size_t exlen = 0, pklen = 0; mbedtls_mpi_write_string(&rsa.E, 16, str_exp, sizeof(str_exp), &exlen); @@ -468,7 +468,7 @@ static int CmdFlashMemInfo(const char *Cmd) { PrintAndLogEx(INFO, " %.64s", str_pk + 192); PrintAndLogEx(NORMAL, ""); - const char *msgkey = "RSA key validation... "; + const char *msgkey = "RSA key validation... "; if (is_keyok) PrintAndLogEx(SUCCESS, "%s( " _GREEN_("ok") " )", msgkey); else @@ -511,7 +511,7 @@ static int CmdFlashMemInfo(const char *Cmd) { } PrintAndLogEx(INFO, "Signed"); for (int i = 0; i < (sizeof(sign) / 32); i++) { - PrintAndLogEx(INFO, " %s", sprint_hex_inrow(sign + (i * 32), 32)); + PrintAndLogEx(INFO, " %s", sprint_hex_inrow(sign + (i * 32), 32)); } } diff --git a/client/src/cmdhf14a.c b/client/src/cmdhf14a.c index 2b5570408..af5e378e6 100644 --- a/client/src/cmdhf14a.c +++ b/client/src/cmdhf14a.c @@ -1366,7 +1366,7 @@ static int waitCmd(uint8_t iSelect, uint32_t timeout) { data[len - 2], data[len - 1], (crc) ? _GREEN_("ok") : _RED_("fail") - ); + ); } else { PrintAndLogEx(SUCCESS, "%s", sprint_hex(data, len)); } diff --git a/client/src/cmdhficlass.c b/client/src/cmdhficlass.c index 6417de85b..1ce21f5fe 100644 --- a/client/src/cmdhficlass.c +++ b/client/src/cmdhficlass.c @@ -2662,7 +2662,7 @@ static int CmdHFiClassView(const char *Cmd) { void *argtable[] = { arg_param_begin, arg_str1("f", "file", "", "filename of dump"), - arg_int0("s", "startblock", "", "print from this block (default block6)"), + arg_int0("s", "startblock", "", "print from this block (default block6)"), arg_int0("e", "endblock", "", "end printing at this block (default 0, ALL)"), arg_lit0("v", "verbose", "verbose output"), arg_param_end @@ -2671,13 +2671,13 @@ static int CmdHFiClassView(const char *Cmd) { int fnlen = 0; char filename[FILE_PATH_SIZE]; - CLIParamStrToBuf(arg_get_str(ctx, 1), (uint8_t*)filename, FILE_PATH_SIZE, &fnlen); + CLIParamStrToBuf(arg_get_str(ctx, 1), (uint8_t *)filename, FILE_PATH_SIZE, &fnlen); int startblock = arg_get_int_def(ctx, 2, 0); int endblock = arg_get_int_def(ctx, 3, 0); bool verbose = arg_get_lit(ctx, 4); - CLIParserFree(ctx); + CLIParserFree(ctx); uint8_t *dump = NULL; size_t bytes_read = 0; @@ -3492,17 +3492,17 @@ static int CmdHFiClassPermuteKey(const char *Cmd) { void *argtable[] = { arg_param_begin, - arg_lit0("r", "reverse", "reverse permuted key"), + arg_lit0("r", "reverse", "reverse permuted key"), arg_str1(NULL, "key", "", "input key"), arg_param_end }; CLIExecWithReturn(ctx, Cmd, argtable, false); isReverse = arg_get_lit(ctx, 1); - + CLIGetHexWithReturn(ctx, 2, data, &len); - CLIParserFree(ctx); + CLIParserFree(ctx); memcpy(key, data, 8); diff --git a/client/src/cmdhfst.c b/client/src/cmdhfst.c index 78b3006ef..de9588ee3 100644 --- a/client/src/cmdhfst.c +++ b/client/src/cmdhfst.c @@ -299,8 +299,8 @@ static int cmd_hf_st_info(const char *Cmd) { CLIParserInit(&ctx, "hf st info", "Get info about ST25TA tag", "hf st info" - ); - + ); + void *argtable[] = { arg_param_begin, arg_param_end @@ -471,7 +471,7 @@ static int cmd_hf_st_protect(const char *Cmd) { void *argtable[] = { arg_param_begin, arg_lit0("e", "enable", "enable protection"), - arg_lit0("d", "disable", "disable protection (default)"), + arg_lit0("d", "disable", "disable protection (default)"), arg_lit0("r", "read", "change read protection"), arg_lit0("w", "write", "change write protection (default)"), arg_str1("p", "password", "", "16 byte write password"), @@ -484,7 +484,7 @@ static int cmd_hf_st_protect(const char *Cmd) { read_protection = arg_get_lit(ctx, 3); write_protection = arg_get_lit(ctx, 4); CLIGetHexWithReturn(ctx, 5, pwd, &pwdlen); - CLIParserFree(ctx); + CLIParserFree(ctx); //Validations if (enable_protection && disable_protection) { @@ -625,7 +625,7 @@ static int cmd_hf_st_pwd(const char *Cmd) { CLIGetHexWithReturn(ctx, 3, pwd, &pwdlen); CLIGetHexWithReturn(ctx, 4, newpwd, &newpwdlen); CLIParserFree(ctx); - + if (change_read_password && change_write_password) { PrintAndLogEx(ERR, "Must specify either read or write, not both"); return PM3_EINVARG; @@ -646,7 +646,7 @@ static int cmd_hf_st_pwd(const char *Cmd) { PrintAndLogEx(ERR, "New password must be 16 hex bytes"); return PM3_EINVARG; } - + bool activate_field = true; bool keep_field_on = true; uint8_t response[PM3_CMD_DATA_SIZE]; diff --git a/client/src/cmdhfwaveshare.c b/client/src/cmdhfwaveshare.c index 3cc2bf99f..b7148c6df 100644 --- a/client/src/cmdhfwaveshare.c +++ b/client/src/cmdhfwaveshare.c @@ -962,31 +962,31 @@ static int CmdHF14AWSLoadBmp(const char *Cmd) { char desc[800] = {0}; for (uint8_t i = 0; i < MEND; i++) { snprintf(desc + strlen(desc), - sizeof(desc) - strlen(desc), - "hf waveshare loadbmp -f myfile -m %2u -> %s ( %u, %u )\n", - i, - models[i].desc, - models[i].width, - models[i].height - ); + sizeof(desc) - strlen(desc), + "hf waveshare loadbmp -f myfile -m %2u -> %s ( %u, %u )\n", + i, + models[i].desc, + models[i].width, + models[i].height + ); } CLIParserContext *ctx; CLIParserInit(&ctx, "hf waveshare loadbmp", "Load BMP file to Waveshare NFC ePaper.", desc - ); - + ); + char modeldesc[40]; snprintf(modeldesc, sizeof(modeldesc), "model number [0 - %u] of your tag", MEND - 1); - + void *argtable[] = { arg_param_begin, arg_int1("m", NULL, "", modeldesc), arg_lit0("s", "save", "save dithered version in filename-[n].bmp, only for RGB BMP"), arg_str1("f", "file", "", "filename[.bmp] to upload to tag"), arg_param_end - }; + }; CLIExecWithReturn(ctx, Cmd, argtable, false); @@ -995,7 +995,7 @@ static int CmdHF14AWSLoadBmp(const char *Cmd) { int fnlen = 0; char filename[FILE_PATH_SIZE] = {0}; - CLIParamStrToBuf(arg_get_str(ctx, 3), (uint8_t*)filename, FILE_PATH_SIZE, &fnlen); + CLIParamStrToBuf(arg_get_str(ctx, 3), (uint8_t *)filename, FILE_PATH_SIZE, &fnlen); CLIParserFree(ctx); //Validations @@ -1006,7 +1006,7 @@ static int CmdHF14AWSLoadBmp(const char *Cmd) { if (model_nr == -1) { PrintAndLogEx(WARNING, "Missing model"); return PM3_EINVARG; - } + } if (model_nr >= MEND) { PrintAndLogEx(WARNING, "Unknown model"); return PM3_EINVARG; diff --git a/client/src/emv/emv_roca.c b/client/src/emv/emv_roca.c index e8eb82d83..bf155754e 100644 --- a/client/src/emv/emv_roca.c +++ b/client/src/emv/emv_roca.c @@ -121,12 +121,12 @@ bool emv_rocacheck(const unsigned char *buf, size_t buflen, bool verbose) { mbedtls_mpi_free(&t_temp); mbedtls_mpi_free(&t_prime); - + if (bitand_is_zero(&g_one, &prints[i])) { if (verbose) { PrintAndLogEx(FAILED, "No fingerprint found.\n"); } - mbedtls_mpi_free(&g_one); + mbedtls_mpi_free(&g_one); goto cleanup; } mbedtls_mpi_free(&g_one); diff --git a/client/src/preferences.c b/client/src/preferences.c index b7e695ea1..5c5431d83 100644 --- a/client/src/preferences.c +++ b/client/src/preferences.c @@ -957,7 +957,7 @@ static command_t setCommandTable[] = { {"color", setCmdColor, AlwaysAvailable, "Set color support"}, // {"defaultsavepaths", setCmdSavePaths, AlwaysAvailable, "... to be adjusted next ... "}, {"clientdebug", setCmdDebug, AlwaysAvailable, "Set client debug level"}, - {"plotsliders",setCmdPlotSliders, AlwaysAvailable, "Set plot slider display"}, + {"plotsliders", setCmdPlotSliders, AlwaysAvailable, "Set plot slider display"}, // {"devicedebug", setCmdDeviceDebug, AlwaysAvailable, "Set device debug level"}, {NULL, NULL, NULL, NULL} }; diff --git a/client/src/proxguiqt.cpp b/client/src/proxguiqt.cpp index 0634297f8..72ff8ff12 100644 --- a/client/src/proxguiqt.cpp +++ b/client/src/proxguiqt.cpp @@ -7,7 +7,7 @@ //----------------------------------------------------------------------------- // GUI (QT) //----------------------------------------------------------------------------- -#define __STDC_FORMAT_MACROS +#define __STDC_FORMAT_MACROS #include "proxguiqt.h" #include #include @@ -820,13 +820,13 @@ void Plot::keyPressEvent(QKeyEvent *event) { case Qt::Key_Up: if (event->modifiers() & Qt::ShiftModifier) { if (event->modifiers() & Qt::ControlModifier) { - Zoom(1.0/zoom_offset, CursorBPos); + Zoom(1.0 / zoom_offset, CursorBPos); } else { Zoom(0.5, CursorBPos); } } else { if (event->modifiers() & Qt::ControlModifier) { - Zoom(1.0/zoom_offset, CursorAPos); + Zoom(1.0 / zoom_offset, CursorAPos); } else { Zoom(0.5, CursorAPos); } @@ -868,29 +868,29 @@ void Plot::keyPressEvent(QKeyEvent *event) { g_printAndLog = PRINTANDLOG_PRINT; PrintAndLogEx(NORMAL, "\n\n" _CYAN_("PLOT window keystrokes and mouse events")); PrintAndLogEx(NORMAL, "\n" _GREEN_("Move:")); - PrintAndLogEx(NORMAL, " %-*s%s", 25+9+9, _RED_("Home") "/" _RED_("End"), "Move to the start/end of the graph"); - PrintAndLogEx(NORMAL, " %-*s%s", 25+9, _YELLOW_("Mouse wheel"), "Move left/right"); - PrintAndLogEx(NORMAL, " %-*s%s", 25+9+9, _RED_("Left") "/" _RED_("Right"), "Move left/right"); - PrintAndLogEx(NORMAL, " %-*s%s", 25+9, " + " _RED_("Ctrl"), "... by 1 sample"); - PrintAndLogEx(NORMAL, " %-*s%s", 25+9, " + " _RED_("Shift"), "... by 1 window"); - PrintAndLogEx(NORMAL, " %-*s%s", 25+9+9, _RED_("PgUp") "/" _RED_("PgDown"), "Move left/right by 1 window"); + PrintAndLogEx(NORMAL, " %-*s%s", 25 + 9 + 9, _RED_("Home") "/" _RED_("End"), "Move to the start/end of the graph"); + PrintAndLogEx(NORMAL, " %-*s%s", 25 + 9, _YELLOW_("Mouse wheel"), "Move left/right"); + PrintAndLogEx(NORMAL, " %-*s%s", 25 + 9 + 9, _RED_("Left") "/" _RED_("Right"), "Move left/right"); + PrintAndLogEx(NORMAL, " %-*s%s", 25 + 9, " + " _RED_("Ctrl"), "... by 1 sample"); + PrintAndLogEx(NORMAL, " %-*s%s", 25 + 9, " + " _RED_("Shift"), "... by 1 window"); + PrintAndLogEx(NORMAL, " %-*s%s", 25 + 9 + 9, _RED_("PgUp") "/" _RED_("PgDown"), "Move left/right by 1 window"); PrintAndLogEx(NORMAL, "\n" _GREEN_("Zoom:")); - PrintAndLogEx(NORMAL, " %-*s%s", 25+9+9, _RED_("Shift") " + " _YELLOW_("Mouse wheel"), "Zoom in/out around mouse cursor"); - PrintAndLogEx(NORMAL, " %-*s%s", 25+9+9, _RED_("Down") "/" _RED_("Up"), "Zoom in/out around yellow cursor"); - PrintAndLogEx(NORMAL, " %-*s%s", 25+9, " + " _RED_("Ctrl"), "... with smaller increment"); - PrintAndLogEx(NORMAL, " %-*s%s", 25+9, " + " _RED_("Shift"), "... around purple cursor"); - PrintAndLogEx(NORMAL, " %-*s%s", 25+9, _RED_("h"), "Show this help"); + PrintAndLogEx(NORMAL, " %-*s%s", 25 + 9 + 9, _RED_("Shift") " + " _YELLOW_("Mouse wheel"), "Zoom in/out around mouse cursor"); + PrintAndLogEx(NORMAL, " %-*s%s", 25 + 9 + 9, _RED_("Down") "/" _RED_("Up"), "Zoom in/out around yellow cursor"); + PrintAndLogEx(NORMAL, " %-*s%s", 25 + 9, " + " _RED_("Ctrl"), "... with smaller increment"); + PrintAndLogEx(NORMAL, " %-*s%s", 25 + 9, " + " _RED_("Shift"), "... around purple cursor"); + PrintAndLogEx(NORMAL, " %-*s%s", 25 + 9, _RED_("h"), "Show this help"); PrintAndLogEx(NORMAL, "\n" _GREEN_("Trim:")); - PrintAndLogEx(NORMAL, " %-*s%s", 25+9, _RED_("t"), "Trim data on window or on cursors if defined"); + PrintAndLogEx(NORMAL, " %-*s%s", 25 + 9, _RED_("t"), "Trim data on window or on cursors if defined"); PrintAndLogEx(NORMAL, "\n" _GREEN_("Grid and demod:")); - PrintAndLogEx(NORMAL, " %-*s%s", 25+9, _RED_("g"), "Toggle grid and demodulation plot display"); - PrintAndLogEx(NORMAL, " %-*s%s", 25+9, _RED_("l"), "Toggle lock grid relative to samples"); - PrintAndLogEx(NORMAL, " %-*s%s", 25+9+9, _RED_("<") "/" _RED_(">"), "Move demodulation left/right relative to samples"); + PrintAndLogEx(NORMAL, " %-*s%s", 25 + 9, _RED_("g"), "Toggle grid and demodulation plot display"); + PrintAndLogEx(NORMAL, " %-*s%s", 25 + 9, _RED_("l"), "Toggle lock grid relative to samples"); + PrintAndLogEx(NORMAL, " %-*s%s", 25 + 9 + 9, _RED_("<") "/" _RED_(">"), "Move demodulation left/right relative to samples"); PrintAndLogEx(NORMAL, "\n" _GREEN_("Misc:")); - PrintAndLogEx(NORMAL, " %-*s%s", 25+9, _YELLOW_("Left mouse click"), "Set yellow cursor"); - PrintAndLogEx(NORMAL, " %-*s%s", 25+9, _YELLOW_("Right mouse click"), "Set purple cursor"); - PrintAndLogEx(NORMAL, " %-*s%s", 25+9, _RED_("h"), "Show this help"); - PrintAndLogEx(NORMAL, " %-*s%s", 25+9, _RED_("q"), "Close plot window"); + PrintAndLogEx(NORMAL, " %-*s%s", 25 + 9, _YELLOW_("Left mouse click"), "Set yellow cursor"); + PrintAndLogEx(NORMAL, " %-*s%s", 25 + 9, _YELLOW_("Right mouse click"), "Set purple cursor"); + PrintAndLogEx(NORMAL, " %-*s%s", 25 + 9, _RED_("h"), "Show this help"); + PrintAndLogEx(NORMAL, " %-*s%s", 25 + 9, _RED_("q"), "Close plot window"); g_printAndLog = PRINTANDLOG_PRINT | PRINTANDLOG_LOG; break; diff --git a/include/iso14b.h b/include/iso14b.h index 4be7a8753..ad4edc560 100644 --- a/include/iso14b.h +++ b/include/iso14b.h @@ -12,7 +12,7 @@ #define _ISO14B_H_ #include "common.h" -typedef struct { +typedef struct { uint8_t uid[10]; uint8_t uidlen; uint8_t atqb[7]; @@ -20,25 +20,25 @@ typedef struct { uint8_t cid; } PACKED iso14b_card_select_t; -typedef struct { +typedef struct { uint8_t uid[4]; uint8_t pc; uint8_t fc; } PACKED iso14b_cts_card_select_t; typedef enum ISO14B_COMMAND { - ISO14B_CONNECT = (1 << 0), - ISO14B_DISCONNECT = (1 << 1), - ISO14B_APDU = (1 << 2), - ISO14B_RAW = (1 << 3), - ISO14B_REQUEST_TRIGGER = (1 << 4), - ISO14B_APPEND_CRC = (1 << 5), - ISO14B_SELECT_STD = (1 << 6), - ISO14B_SELECT_SR = (1 << 7), - ISO14B_SET_TIMEOUT = (1 << 8), - ISO14B_SEND_CHAINING = (1 << 9), - ISO14B_SELECT_CTS = (1 << 10), - ISO14B_CLEARTRACE = (1 << 11), + ISO14B_CONNECT = (1 << 0), + ISO14B_DISCONNECT = (1 << 1), + ISO14B_APDU = (1 << 2), + ISO14B_RAW = (1 << 3), + ISO14B_REQUEST_TRIGGER = (1 << 4), + ISO14B_APPEND_CRC = (1 << 5), + ISO14B_SELECT_STD = (1 << 6), + ISO14B_SELECT_SR = (1 << 7), + ISO14B_SET_TIMEOUT = (1 << 8), + ISO14B_SEND_CHAINING = (1 << 9), + ISO14B_SELECT_CTS = (1 << 10), + ISO14B_CLEARTRACE = (1 << 11), } iso14b_command_t; -#endif // _ISO14B_H_ \ No newline at end of file +#endif // _ISO14B_H_ diff --git a/include/iso15.h b/include/iso15.h index 228669cda..674f28f9c 100644 --- a/include/iso15.h +++ b/include/iso15.h @@ -12,7 +12,7 @@ #define _ISO15_H_ #include "common.h" -typedef struct { +typedef struct { uint8_t uid[10]; uint8_t uidlen; uint8_t atqb[7]; @@ -21,13 +21,13 @@ typedef struct { } PACKED iso14b_card_select_t; typedef enum ISO15_COMMAND { - ISO15_CONNECT = (1 << 0), - ISO15_NO_DISCONNECT = (1 << 1), - ISO15_RAW = (1 << 2), - ISO15_APPEND_CRC = (1 << 3), - ISO15_HIGH_SPEED = (1 << 4), - ISO15_READ_RESPONSE = (1 << 5) + ISO15_CONNECT = (1 << 0), + ISO15_NO_DISCONNECT = (1 << 1), + ISO15_RAW = (1 << 2), + ISO15_APPEND_CRC = (1 << 3), + ISO15_HIGH_SPEED = (1 << 4), + ISO15_READ_RESPONSE = (1 << 5) } iso15_command_t; -#endif // _ISO15_H_ \ No newline at end of file +#endif // _ISO15_H_ diff --git a/include/iso18.h b/include/iso18.h index 711bba495..27f8078a0 100644 --- a/include/iso18.h +++ b/include/iso18.h @@ -13,11 +13,11 @@ #include "common.h" typedef enum FELICA_COMMAND { - FELICA_CONNECT = (1 << 0), - FELICA_NO_DISCONNECT = (1 << 1), - FELICA_RAW = (1 << 3), - FELICA_APPEND_CRC = (1 << 5), - FELICA_NO_SELECT = (1 << 6), + FELICA_CONNECT = (1 << 0), + FELICA_NO_DISCONNECT = (1 << 1), + FELICA_RAW = (1 << 3), + FELICA_APPEND_CRC = (1 << 5), + FELICA_NO_SELECT = (1 << 6), } felica_command_t; //----------------------------------------------------------------------------- @@ -116,4 +116,4 @@ typedef struct { uint8_t PMi[8]; } PACKED felica_auth2_response_t; -#endif // _ISO18_H_ \ No newline at end of file +#endif // _ISO18_H_ diff --git a/include/mifare.h b/include/mifare.h index 2fe6b84e4..476a4e28b 100644 --- a/include/mifare.h +++ b/include/mifare.h @@ -124,13 +124,13 @@ typedef struct { } PACKED smart_card_atr_t; typedef enum SMARTCARD_COMMAND { - SC_CONNECT = (1 << 0), - SC_NO_DISCONNECT = (1 << 1), - SC_RAW = (1 << 2), - SC_SELECT = (1 << 3), - SC_RAW_T0 = (1 << 4), - SC_CLEARLOG = (1 << 5), - SC_LOG = (1 << 6), + SC_CONNECT = (1 << 0), + SC_NO_DISCONNECT = (1 << 1), + SC_RAW = (1 << 2), + SC_SELECT = (1 << 3), + SC_RAW_T0 = (1 << 4), + SC_CLEARLOG = (1 << 5), + SC_LOG = (1 << 6), } smartcard_command_t; diff --git a/tools/mf_nonce_brute/mf_nonce_brute.c b/tools/mf_nonce_brute/mf_nonce_brute.c index 094c66c2a..3dcfe9918 100644 --- a/tools/mf_nonce_brute/mf_nonce_brute.c +++ b/tools/mf_nonce_brute/mf_nonce_brute.c @@ -268,15 +268,13 @@ static void *brute_thread(void *arguments) { printf("CMD enc(%08x)\n", cmd_enc); printf(" dec(%08x)\t", decrypted); - uint8_t isOK = 0; // check if cmd exists - isOK = checkValidCmd(decrypted); + uint8_t isOK = checkValidCmd(decrypted); (void)isOK; // Add a crc-check. isOK = checkCRC(decrypted); - - if (!isOK) { + if (isOK == false) { printf("<-- not a valid cmd\n"); pthread_mutex_unlock(&print_lock); free(revstate); @@ -305,8 +303,10 @@ static void *brute_thread(void *arguments) { pthread_mutex_unlock(&print_lock); } } + if (revstate) + free(revstate); - free(args); + free(args); return NULL; } From 6fc6517ccb567c2299cae58b76ec5655b62b68e2 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Tue, 6 Oct 2020 16:59:40 +0200 Subject: [PATCH 0910/1047] LZ4: silent AddressSanitizer false positive? int8_t x = 0; <= writing 2 bytes?? --- common/lz4/lz4hc.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/common/lz4/lz4hc.c b/common/lz4/lz4hc.c index 0667a7cd9..d53fb1912 100644 --- a/common/lz4/lz4hc.c +++ b/common/lz4/lz4hc.c @@ -1015,7 +1015,10 @@ int LZ4_freeStreamHC(LZ4_streamHC_t *LZ4_streamHCPtr) { return 0; } - +// Skip AddressSanitizer which breaks compilation strangely on +// lz4/lz4hc.c: error: writing 2 bytes into a region of size 1 [-Werror=stringop-overflow=] +// | LZ4_streamHCPtr->internal_donotuse.favorDecSpeed = 0; +ATTRIBUTE_NO_SANITIZE_ADDRESS LZ4_streamHC_t *LZ4_initStreamHC(void *buffer, size_t size) { LZ4_streamHC_t *const LZ4_streamHCPtr = (LZ4_streamHC_t *)buffer; if (buffer == NULL) return NULL; From 008c920db09e14d9031fccf887cf1586cce714bc Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Tue, 6 Oct 2020 18:11:45 +0200 Subject: [PATCH 0911/1047] Add incognito option to avoid manglign history & logs during tests --- client/src/proxmark3.c | 40 ++++++++++++++++++++++++++-------------- client/src/ui.c | 3 +++ client/src/ui.h | 1 + tools/pm3_tests.sh | 2 ++ 4 files changed, 32 insertions(+), 14 deletions(-) diff --git a/client/src/proxmark3.c b/client/src/proxmark3.c index 1b074d9fe..0c5a3226b 100644 --- a/client/src/proxmark3.c +++ b/client/src/proxmark3.c @@ -245,22 +245,26 @@ main_loop(char *script_cmds_file, char *script_cmd, bool stayInCommandLoop) { #ifdef HAVE_READLINE session.history_path = NULL; - if (searchHomeFilePath(&session.history_path, NULL, PROXHISTORY, true) != PM3_SUCCESS) { - PrintAndLogEx(ERR, "No history will be recorded"); - session.history_path = NULL; + if (session.incognito) { + PrintAndLogEx(INFO, "No history will be recorded"); } else { + if (searchHomeFilePath(&session.history_path, NULL, PROXHISTORY, true) != PM3_SUCCESS) { + PrintAndLogEx(ERR, "No history will be recorded"); + session.history_path = NULL; + } else { -# if defined(_WIN32) -// SetConsoleCtrlHandler((PHANDLER_ROUTINE)terminate_handler, true); -# else - struct sigaction action; - memset(&action, 0, sizeof(action)); - action.sa_handler = &terminate_handler; - sigaction(SIGINT, &action, &old_action); -# endif - rl_catch_signals = 1; - rl_set_signals(); - read_history(session.history_path); + # if defined(_WIN32) + // SetConsoleCtrlHandler((PHANDLER_ROUTINE)terminate_handler, true); + # else + struct sigaction action; + memset(&action, 0, sizeof(action)); + action.sa_handler = &terminate_handler; + sigaction(SIGINT, &action, &old_action); + # endif + rl_catch_signals = 1; + rl_set_signals(); + read_history(session.history_path); + } } #endif @@ -565,6 +569,7 @@ static void show_help(bool showFullHelp, char *exec_name) { PrintAndLogEx(NORMAL, " -l/--lua execute lua script."); PrintAndLogEx(NORMAL, " -s/--script-file script file with one Proxmark3 command per line"); PrintAndLogEx(NORMAL, " -i/--interactive enter interactive mode after executing the script or the command"); + PrintAndLogEx(NORMAL, " --incognito do not use history nor log files"); PrintAndLogEx(NORMAL, "\nOptions in flasher mode:"); PrintAndLogEx(NORMAL, " --flash flash Proxmark3, requires at least one --image"); PrintAndLogEx(NORMAL, " --unlock-bootloader Enable flashing of bootloader area *DANGEROUS* (need --flash or --flash-info)"); @@ -698,6 +703,7 @@ int main(int argc, char *argv[]) { session.pm3_present = false; session.help_dump_mode = false; + session.incognito = false; bool waitCOMPort = false; bool addLuaExec = false; bool stayInCommandLoop = false; @@ -903,6 +909,12 @@ int main(int argc, char *argv[]) { continue; } + // do not use history nor log files + if (strcmp(argv[i], "--incognito") == 0) { + session.incognito = true; + continue; + } + // go to flash mode if (strcmp(argv[i], "--flash") == 0) { flash_mode = true; diff --git a/client/src/ui.c b/client/src/ui.c index 26759cc4d..9bf097583 100644 --- a/client/src/ui.c +++ b/client/src/ui.c @@ -305,6 +305,9 @@ static void fPrintAndLog(FILE *stream, const char *fmt, ...) { pthread_mutex_lock(&print_lock); bool linefeed = true; + if (logging && session.incognito) { + logging = 0; + } if ((g_printAndLog & PRINTANDLOG_LOG) && logging && !logfile) { char *my_logfile_path = NULL; char filename[40]; diff --git a/client/src/ui.h b/client/src/ui.h index 66f6df279..b30f6c868 100644 --- a/client/src/ui.h +++ b/client/src/ui.h @@ -41,6 +41,7 @@ typedef struct { qtWindow_t plot; qtWindow_t overlay; bool overlay_sliders; + bool incognito; // char *defaultPaths[spItemCount]; // Array should allow loop searching for files clientdebugLevel_t client_debug_level; // uint8_t device_debug_level; diff --git a/tools/pm3_tests.sh b/tools/pm3_tests.sh index 3568667b3..da335bb9b 100755 --- a/tools/pm3_tests.sh +++ b/tools/pm3_tests.sh @@ -322,6 +322,8 @@ while true; do if $TESTALL || $TESTCLIENT; then echo -e "\n${C_BLUE}Testing client:${C_NC} ${CLIENTBIN:=./client/proxmark3}" if ! CheckFileExist "proxmark3 exists" "$CLIENTBIN"; then break; fi + # Avoid mangling history and logs + CLIENTBIN="$CLIENTBIN --incognito" echo -e "\n${C_BLUE}Testing basic help:${C_NC}" if ! CheckExecute "proxmark help" "$CLIENTBIN -h" "wait"; then break; fi if ! CheckExecute "proxmark help text ISO7816" "$CLIENTBIN -t 2>&1" "ISO7816"; then break; fi From cb20d9344890e64e9a4d197291074aad56945d05 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Tue, 6 Oct 2020 18:40:54 +0200 Subject: [PATCH 0912/1047] Makefile: integrate commands.md generation to 'make style' --- Makefile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Makefile b/Makefile index 1f3b0b44b..cb0d848cd 100644 --- a/Makefile +++ b/Makefile @@ -259,6 +259,8 @@ style: --keep-one-line-blocks --max-instatement-indent=60 \ --style=google --pad-oper --unpad-paren --pad-header \ --align-pointer=name {} \; + # Update commands.md + [ -x client/proxmark3 ] && client/proxmark3 -m > doc/commands.md # Detecting weird codepages and tabs. miscchecks: From 3f9ddf9b2978e2f5ce7c87b7749b88cbe170831f Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Tue, 6 Oct 2020 18:41:15 +0200 Subject: [PATCH 0913/1047] make style --- armsrc/iso14443b.c | 28 +++++++------- client/src/cmdhf14b.c | 86 +++++++++++++++++++++--------------------- client/src/proxmark3.c | 8 ++-- common/lz4/lz4.c | 4 +- doc/commands.md | 9 +++-- fpga/fpga_hf.v | 2 +- fpga/hi_iso14443a.v | 2 +- 7 files changed, 70 insertions(+), 69 deletions(-) diff --git a/armsrc/iso14443b.c b/armsrc/iso14443b.c index f333ac88e..049231c21 100644 --- a/armsrc/iso14443b.c +++ b/armsrc/iso14443b.c @@ -783,7 +783,7 @@ static RAMFUNC int Handle14443bSamplesFromTag(int ci, int cq) { // While we get a constant signal if (AMPLITUDE(ci, cq) > SUBCARRIER_DETECT_THRESHOLD) { if (((ABS(Demod.sumI) > ABS(Demod.sumQ)) && (((ci > 0) && (Demod.sumI > 0)) || ((ci < 0) && (Demod.sumI < 0)))) || // signal closer to horizontal, polarity check based on on I - ((ABS(Demod.sumI) <= ABS(Demod.sumQ)) && (((cq > 0) && (Demod.sumQ > 0)) || ((cq < 0) && (Demod.sumQ < 0))))) { // signal closer to vertical, polarity check based on on Q + ((ABS(Demod.sumI) <= ABS(Demod.sumQ)) && (((cq > 0) && (Demod.sumQ > 0)) || ((cq < 0) && (Demod.sumQ < 0))))) { // signal closer to vertical, polarity check based on on Q if (Demod.posCount < 10) { // refine signal approximation during first 10 samples Demod.sumI += ci; @@ -927,12 +927,12 @@ static RAMFUNC int Handle14443bSamplesFromTag(int ci, int cq) { * Demodulate the samples we received from the tag, also log to tracebuffer */ static int Get14443bAnswerFromTag(uint8_t *response, uint16_t max_len, int timeout, uint32_t *eof_time) { - + int samples = 0, ret = 0; // Set up the demodulator for tag -> reader responses. Demod14bInit(response, max_len); - + // Setup and start DMA. //FpgaSetupSsc(FPGA_MAJOR_MODE_HF_READER); @@ -996,7 +996,7 @@ static int Get14443bAnswerFromTag(uint8_t *response, uint16_t max_len, int timeo if (Handle14443bSamplesFromTag(ci, cq)) { - *eof_time = dma_start_time + (samples ) - DELAY_TAG_TO_ARM; // end of EOF + *eof_time = dma_start_time + (samples) - DELAY_TAG_TO_ARM; // end of EOF if (Demod.len > Demod.max_len) { ret = -2; // overflow @@ -1044,7 +1044,7 @@ static void TransmitFor14443b_AsReader(uint32_t *start_time) { if (GetCountSspClk() > *start_time) { // we may miss the intended time *start_time = (GetCountSspClk() + 32) & 0xfffffff0; // next possible time } - + // wait while (GetCountSspClk() < *start_time); @@ -1068,7 +1068,7 @@ static void TransmitFor14443b_AsReader(uint32_t *start_time) { LED_B_OFF(); *start_time += DELAY_ARM_TO_TAG; - + // wait for last transfer to complete while (!(AT91C_BASE_SSC->SSC_SR & AT91C_SSC_TXEMPTY)) {}; } @@ -1093,7 +1093,7 @@ static void CodeIso14443bAsReader(const uint8_t *cmd, int len) { * * QUESTION: how long is a 1 or 0 in pulses in the xcorr_848 mode? * 1 "stuffbit" = 1ETU (9us) - * + * * TR2 - After the PICC response, the PCD is required to wait the Frame Delay Time (TR2) before transmission of the next command. The minimum frame delay time required for all commands is 14 ETUs @@ -1101,7 +1101,7 @@ static void CodeIso14443bAsReader(const uint8_t *cmd, int len) { */ int i; tosend_reset(); - + // Send SOF // 10-11 ETUs of ZERO for (i = 0; i < 11; i++) { @@ -1185,7 +1185,7 @@ int iso14443b_apdu(uint8_t const *msg, size_t msg_len, bool send_chaining, void real_cmd[0] = 0xA2; // r-block + ACK real_cmd[0] |= iso14b_pcb_blocknum; } - + AddCrc14B(real_cmd, msg_len + 1); // send @@ -1269,7 +1269,7 @@ static int iso14443b_select_cts_card(iso14b_cts_card_select_t *card) { AddCrc14B(cmdLSBUID, 1); uint8_t r[8]; - + uint32_t start_time = 0; uint32_t eof_time = 0; CodeAndTransmit14443bAsReader(cmdINIT, sizeof(cmdINIT), &start_time, &eof_time); @@ -1842,10 +1842,10 @@ void SendRawCommand14443B_Ex(PacketCommandNG *c) { iso14443b_setup(); } - if ((param & ISO14B_SET_TIMEOUT) == ISO14B_SET_TIMEOUT) { + if ((param & ISO14B_SET_TIMEOUT) == ISO14B_SET_TIMEOUT) { iso14b_set_timeout(timeout); } - + if ((param & ISO14B_CLEARTRACE) == ISO14B_CLEARTRACE) { clear_trace(); } @@ -1854,7 +1854,7 @@ void SendRawCommand14443B_Ex(PacketCommandNG *c) { int status; uint32_t sendlen = sizeof(iso14b_card_select_t); iso14b_card_select_t card; - memset((void*)&card, 0x00, sizeof(card)); + memset((void *)&card, 0x00, sizeof(card)); if ((param & ISO14B_SELECT_STD) == ISO14B_SELECT_STD) { status = iso14443b_select_card(&card); @@ -1877,7 +1877,7 @@ void SendRawCommand14443B_Ex(PacketCommandNG *c) { reply_mix(CMD_HF_ISO14443B_COMMAND, status, sendlen, 0, (uint8_t *)&cts, sendlen); // 0: OK 2: demod fail, 3:crc fail, if (status > 0) goto out; - } + } if ((param & ISO14B_APDU) == ISO14B_APDU) { uint8_t res; diff --git a/client/src/cmdhf14b.c b/client/src/cmdhf14b.c index fffad5d9a..5989fe23c 100644 --- a/client/src/cmdhf14b.c +++ b/client/src/cmdhf14b.c @@ -77,9 +77,9 @@ static bool wait_cmd_14b(bool verbose, bool is_select) { // 0: OK; -1: attrib fail; -2:crc fail int status = (int)resp.oldarg[0]; if (status == 0) { - + if (verbose) { - PrintAndLogEx(SUCCESS, "received " _YELLOW_("%u") " bytes", len); + PrintAndLogEx(SUCCESS, "received " _YELLOW_("%u") " bytes", len); PrintAndLogEx(SUCCESS, "%s", sprint_hex(data, len)); } return true; @@ -122,32 +122,32 @@ static int CmdHF14BList(const char *Cmd) { } static int CmdHF14BSim(const char *Cmd) { - + CLIParserContext *ctx; CLIParserInit(&ctx, "hf 14b sim", "Simulate a ISO/IEC 14443 type B tag with 4 byte UID / PUPI", "hf 14b sim\n" "hf 14b sim -u 11AA33BB" - ); - + ); + void *argtable[] = { arg_param_begin, arg_strx0("u", "uid", "hex", "4byte UID/PUPI"), arg_param_end }; CLIExecWithReturn(ctx, Cmd, argtable, true); - + uint8_t pupi[4]; int n = 0; int res = CLIParamHexToBuf(arg_get_str(ctx, 1), pupi, sizeof(pupi), &n); CLIParserFree(ctx); - + if (res) { PrintAndLogEx(FAILED, "failed to read pupi"); return PM3_EINVARG; } clearCommandBuffer(); - SendCommandNG(CMD_HF_ISO14443B_SIMULATE, pupi, sizeof(pupi)); + SendCommandNG(CMD_HF_ISO14443B_SIMULATE, pupi, sizeof(pupi)); return PM3_SUCCESS; } @@ -157,36 +157,36 @@ static int CmdHF14BSniff(const char *Cmd) { CLIParserInit(&ctx, "hf 14b sniff", "Sniff the communication reader and tag", "hf 14b sniff" - ); - + ); + void *argtable[] = { arg_param_begin, arg_param_end }; CLIExecWithReturn(ctx, Cmd, argtable, true); CLIParserFree(ctx); - + PacketResponseNG resp; clearCommandBuffer(); SendCommandNG(CMD_HF_ISO14443B_SNIFF, NULL, 0); WaitForResponse(CMD_HF_ISO14443B_SNIFF, &resp); - + PrintAndLogEx(HINT, "Try `" _YELLOW_("hf 14b list") "` to view captured tracelog"); PrintAndLogEx(HINT, "Try `" _YELLOW_("trace save h") "` to save tracelog for later analysing"); return PM3_SUCCESS; } static int CmdHF14BCmdRaw(const char *Cmd) { - + CLIParserContext *ctx; CLIParserInit(&ctx, "hf 14b raw", "Sends raw bytes to card ", "hf 14b raw -cks --data 0200a40400 -> standard select\n" "hf 14b raw -ck --sr --data 0200a40400 -> SRx select\n" "hf 14b raw -ck --cts --data 0200a40400 -> C-ticket select\n" - ); - + ); + void *argtable[] = { arg_param_begin, arg_lit0("k", "keep", "leave the signal field ON after receive response"), @@ -268,7 +268,7 @@ static int CmdHF14BCmdRaw(const char *Cmd) { return PM3_SUCCESS; } - bool success = true; + bool success = true; // Select, device will send back iso14b_card_select_t, don't print it. if (select_std) { @@ -620,8 +620,8 @@ static void print_st_general_info(uint8_t *data, uint8_t len) { static void print_ct_general_info(void *vcard) { iso14b_cts_card_select_t card; memcpy(&card, (iso14b_cts_card_select_t *)vcard, sizeof(iso14b_cts_card_select_t)); - - uint32_t uid32 = (card.uid[0] |card.uid[1] << 8 |card.uid[2] << 16 | card.uid[3] << 24); + + uint32_t uid32 = (card.uid[0] | card.uid[1] << 8 | card.uid[2] << 16 | card.uid[3] << 24); PrintAndLogEx(SUCCESS, "ASK C-Ticket"); PrintAndLogEx(SUCCESS, " UID: " _GREEN_("%s") " ( " _YELLOW_("%010u") " )", sprint_hex(card.uid, sizeof(card.uid)), uid32); PrintAndLogEx(SUCCESS, " Product Code: %02X", card.pc); @@ -714,7 +714,7 @@ static int CmdHF14Binfo(const char *Cmd) { CLIParserInit(&ctx, "hf 14b info", "Tag information for ISO/IEC 14443 type B based tags", "hf 14b info\n" - ); + ); void *argtable[] = { arg_param_begin, @@ -940,7 +940,7 @@ static int CmdHF14BReader(const char *Cmd) { CLIParserInit(&ctx, "hf 14b reader", "Act as a 14443B reader to identify a tag", "hf 14b reader\n" - ); + ); void *argtable[] = { arg_param_begin, @@ -958,20 +958,20 @@ static int CmdHF14BReader(const char *Cmd) { * this command just dumps the contents of the memory/ */ static int CmdHF14BReadSri(const char *Cmd) { - + CLIParserContext *ctx; CLIParserInit(&ctx, "hf 14b sriread", "Read contents of a SRI512 | SRIX4K tag", "hf 14b sriread\n" - ); - + ); + void *argtable[] = { arg_param_begin, arg_param_end }; - CLIExecWithReturn(ctx, Cmd, argtable, true); + CLIExecWithReturn(ctx, Cmd, argtable, true); CLIParserFree(ctx); - + iso14b_card_select_t card; if (get_14b_UID(&card) == false) { PrintAndLogEx(WARNING, "no tag found"); @@ -979,7 +979,7 @@ static int CmdHF14BReadSri(const char *Cmd) { } if (card.uidlen != 8) { - PrintAndLogEx(FAILED, "current dump command only work with SRI4K / SRI512 tags"); + PrintAndLogEx(FAILED, "current dump command only work with SRI4K / SRI512 tags"); return PM3_SUCCESS; } @@ -1071,8 +1071,8 @@ static int CmdHF14BDump(const char *Cmd) { "Tries to autodetect cardtype, memory size defaults to SRI4K", "hf 14b dump\n" "hf 14b dump -f myfilename\n" - ); - + ); + void *argtable[] = { arg_param_begin, arg_strx0("f", "file", "", "(optional) filename, if no UID will be used as filename"), @@ -1083,7 +1083,7 @@ static int CmdHF14BDump(const char *Cmd) { int fnlen = 0; char filename[FILE_PATH_SIZE] = {0}; char *fptr = filename; - CLIParamStrToBuf(arg_get_str(ctx, 1), (uint8_t*)filename, FILE_PATH_SIZE, &fnlen); + CLIParamStrToBuf(arg_get_str(ctx, 1), (uint8_t *)filename, FILE_PATH_SIZE, &fnlen); CLIParserFree(ctx); iso14b_card_select_t card; @@ -1091,9 +1091,9 @@ static int CmdHF14BDump(const char *Cmd) { PrintAndLogEx(WARNING, "no tag found"); return PM3_SUCCESS; } - + if (card.uidlen != 8) { - PrintAndLogEx(FAILED, "current dump command only work with SRI4K / SRI512 tags"); + PrintAndLogEx(FAILED, "current dump command only work with SRI4K / SRI512 tags"); return PM3_SUCCESS; } @@ -1358,12 +1358,12 @@ static int select_card_14443b_4(bool disconnect, iso14b_card_select_t *card) { // Anticollision + SELECT SR card SendCommandMIX(CMD_HF_ISO14443B_COMMAND, ISO14B_CONNECT | ISO14B_SELECT_SR, 0, 0, NULL, 0); - if (WaitForResponseTimeout(CMD_HF_ISO14443B_COMMAND, &resp, TIMEOUT) == false) { + if (WaitForResponseTimeout(CMD_HF_ISO14443B_COMMAND, &resp, TIMEOUT) == false) { PrintAndLogEx(INFO, "Trying 14B Select CTS"); // Anticollision + SELECT ASK C-Ticket card SendCommandMIX(CMD_HF_ISO14443B_COMMAND, ISO14B_CONNECT | ISO14B_SELECT_CTS, 0, 0, NULL, 0); - if (WaitForResponseTimeout(CMD_HF_ISO14443B_COMMAND, &resp, TIMEOUT) == false) { + if (WaitForResponseTimeout(CMD_HF_ISO14443B_COMMAND, &resp, TIMEOUT) == false) { PrintAndLogEx(ERR, "connection timeout"); switch_off_field_14b(); return PM3_ESOFT; @@ -1430,7 +1430,7 @@ static int handle_14b_apdu(bool chainingin, uint8_t *datain, int datainlen, bool if (dlen < 0) { dlen = 0; } - + *dataoutlen += dlen; if (maxdataoutlen && *dataoutlen > maxdataoutlen) { @@ -1499,7 +1499,7 @@ static int exchange_14b_apdu(uint8_t *datain, int datainlen, bool activate_field // TODO check this one... // check R-block ACK // *dataoutlen!=0. 'A && (!A || B)' is equivalent to 'A && B' - if ((*dataoutlen == 0) && (*dataoutlen != 0 || chaining != chainBlockNotLast)) { + if ((*dataoutlen == 0) && (*dataoutlen != 0 || chaining != chainBlockNotLast)) { if (leave_signal_on == false) { switch_off_field_14b(); } @@ -1638,11 +1638,11 @@ static int CmdHF14BAPDU(const char *Cmd) { CLIParserFree(ctx); PrintAndLogEx(NORMAL, ">>>>[%s%s%s] %s", - activate_field ? "sel" : "", - leave_signal_on ? " keep" : "", - decode_TLV ? " TLV" : "", - sprint_hex(data, datalen) - ); + activate_field ? "sel" : "", + leave_signal_on ? " keep" : "", + decode_TLV ? " TLV" : "", + sprint_hex(data, datalen) + ); if (decode_APDU) { APDUStruct apdu; @@ -1674,7 +1674,7 @@ static int CmdHF14BNdef(const char *Cmd) { CLIParserInit(&ctx, "hf 14b ndef", "Print NFC Data Exchange Format (NDEF)", "hf 14b ndef" - ); + ); void *argtable[] = { arg_param_begin, arg_param_end @@ -1764,7 +1764,7 @@ static int CmdHF14BNdef(const char *Cmd) { } res = NDEFRecordsDecodeAndPrint(response + 2, resplen - 4); - + out: switch_off_field_14b(); return res; @@ -1772,7 +1772,7 @@ out: static command_t CommandTable[] = { {"help", CmdHelp, AlwaysAvailable, "This help"}, - {"apdu", CmdHF14BAPDU, IfPm3Iso14443b, "Send ISO 14443-4 APDU to tag"}, + {"apdu", CmdHF14BAPDU, IfPm3Iso14443b, "Send ISO 14443-4 APDU to tag"}, {"dump", CmdHF14BDump, IfPm3Iso14443b, "Read all memory pages of an ISO14443-B tag, save to file"}, {"info", CmdHF14Binfo, IfPm3Iso14443b, "Tag information"}, {"list", CmdHF14BList, AlwaysAvailable, "List ISO 14443B history"}, diff --git a/client/src/proxmark3.c b/client/src/proxmark3.c index 0c5a3226b..92d2e36c6 100644 --- a/client/src/proxmark3.c +++ b/client/src/proxmark3.c @@ -253,14 +253,14 @@ main_loop(char *script_cmds_file, char *script_cmd, bool stayInCommandLoop) { session.history_path = NULL; } else { - # if defined(_WIN32) - // SetConsoleCtrlHandler((PHANDLER_ROUTINE)terminate_handler, true); - # else +# if defined(_WIN32) + // SetConsoleCtrlHandler((PHANDLER_ROUTINE)terminate_handler, true); +# else struct sigaction action; memset(&action, 0, sizeof(action)); action.sa_handler = &terminate_handler; sigaction(SIGINT, &action, &old_action); - # endif +# endif rl_catch_signals = 1; rl_set_signals(); read_history(session.history_path); diff --git a/common/lz4/lz4.c b/common/lz4/lz4.c index 7d6e1b356..da5bbf1e2 100644 --- a/common/lz4/lz4.c +++ b/common/lz4/lz4.c @@ -1691,8 +1691,8 @@ read_variable_length(const BYTE **ip, const BYTE *lencheck, return length; } -int LZ4_decompress_generic(const char* const src, char* const dst, int srcSize, int outputSize, endCondition_directive endOnInput, earlyEnd_directive partialDecoding, - dict_directive dict, const BYTE* const lowPrefix, const BYTE* const dictStart, const size_t dictSize ); +int LZ4_decompress_generic(const char *const src, char *const dst, int srcSize, int outputSize, endCondition_directive endOnInput, earlyEnd_directive partialDecoding, + dict_directive dict, const BYTE *const lowPrefix, const BYTE *const dictStart, const size_t dictSize); /*! LZ4_decompress_generic() : * This generic decompression function covers all use cases. diff --git a/doc/commands.md b/doc/commands.md index c0aeea991..c6c5ad65d 100644 --- a/doc/commands.md +++ b/doc/commands.md @@ -75,7 +75,8 @@ Check column "offline" for their availability. |`data samples `|N |`[512 - 40000] -- Get raw samples for graph window (GraphBuffer)` |`data save `|Y |`Save trace (from graph window)` |`data setgraphmarkers `|Y |`[orange_marker] [blue_marker] (in graph window)` -|`data scale `|Y |` -- Set cursor display scale in carrier frequency expressed in kHz` +|`data timescale `|Y |`Set a timescale to get a differential reading between the yellow and purple markers as time duration +` |`data setdebugmode `|Y |`<0|1|2> -- Set Debugging Level on client side` |`data shiftgraphzero `|Y |` -- Shift 0 for Graphed wave + or - shift value` |`data dirthreshold `|Y |` -- Max rising higher up-thres/ Min falling lower down-thres, keep rest as prev.` @@ -241,7 +242,7 @@ Check column "offline" for their availability. ### hf iclass { ICLASS RFIDs... } - + |command |offline |description |------- |------- |----------- |`hf iclass help `|Y |`This help` @@ -266,7 +267,7 @@ Check column "offline" for their availability. |`hf iclass decrypt `|Y |`[options..] Decrypt given block data or tag dump file` |`hf iclass managekeys `|Y |`[options..] Manage keys to use with iclass commands` |`hf iclass permute `|N |` Permute function from 'heart of darkness' paper` -|`hf iclass view `|Y |`[options..] Display content from tag dump file` +|`hf iclass view `|Y |`[options..] Display content from tag dump file` ### hf legic @@ -304,7 +305,7 @@ Check column "offline" for their availability. |`hf lto wrbl `|N |`Write block` |`hf lto list `|Y |`List LTO-CM history` - + ### hf mf { MIFARE RFIDs... } diff --git a/fpga/fpga_hf.v b/fpga/fpga_hf.v index add927514..8659fe4e2 100644 --- a/fpga/fpga_hf.v +++ b/fpga/fpga_hf.v @@ -111,7 +111,7 @@ bit | 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 cmd | x x x x major| x x x opt | x x x x -sub | x x +sub | x x divi | x x x x x x x x thres| x x x x x x x x -----+------------------------------------------- diff --git a/fpga/hi_iso14443a.v b/fpga/hi_iso14443a.v index f339b14e6..21aa118d2 100644 --- a/fpga/hi_iso14443a.v +++ b/fpga/hi_iso14443a.v @@ -546,7 +546,7 @@ assign ssp_din = bit_to_arm; wire sub_carrier; assign sub_carrier = ~sub_carrier_cnt[3]; -// in FPGA_HF_ISO14443A_READER_MOD: drop carrier for mod_sig_coil == 1 (pause); +// in FPGA_HF_ISO14443A_READER_MOD: drop carrier for mod_sig_coil == 1 (pause); // in FPGA_HF_ISO14443A_READER_LISTEN: carrier always on; in other modes: carrier always off assign pwr_hi = (ck_1356meg & (((mod_type == `FPGA_HF_ISO14443A_READER_MOD) & ~mod_sig_coil) || (mod_type == `FPGA_HF_ISO14443A_READER_LISTEN))); From 073c6304588adb5fb9b21d30aa03af53415f9974 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Tue, 6 Oct 2020 20:31:21 +0200 Subject: [PATCH 0914/1047] data raw am - fix length checks --- client/src/cmddata.c | 42 ++++++++++++++++++++++++++---------------- 1 file changed, 26 insertions(+), 16 deletions(-) diff --git a/client/src/cmddata.c b/client/src/cmddata.c index 5d0c002a7..b566d24e8 100644 --- a/client/src/cmddata.c +++ b/client/src/cmddata.c @@ -638,28 +638,38 @@ int ASKDemod(int clk, int invert, int maxErr, size_t maxLen, bool amplify, bool //attempts to demodulate ask while decoding manchester //prints binary found and saves in graphbuffer for further commands static int Cmdaskmandemod(const char *Cmd) { + + size_t slen = strlen(Cmd); + char cmdp = tolower(param_getchar(Cmd, 0)); - if (strlen(Cmd) > 45 || cmdp == 'h') return usage_data_rawdemod_am(); - bool st = false; - if (Cmd[0] == 's') { - st = true; - Cmd++; - } else if (Cmd[1] == 's') { - st = true; - Cmd += 2; - } - int clk = 0; - int invert = 0; - int maxErr = 100; + if (slen > 45 || cmdp == 'h') return usage_data_rawdemod_am(); + + bool st = false, amplify = false; + int clk = 0, invert = 0, maxErr = 100; size_t maxLen = 0; - bool amplify = false; - char amp = tolower(param_getchar(Cmd, 0)); - sscanf(Cmd, "%i %i %i %zu %c", &clk, &invert, &maxErr, &maxLen, &); - amplify = amp == 'a'; + + if (slen) { + + + if (Cmd[0] == 's') { + st = true; + Cmd++; + } else if (slen > 1 && Cmd[1] == 's') { + st = true; + Cmd += 2; + } + + char amp = tolower(param_getchar(Cmd, 0)); + sscanf(Cmd, "%i %i %i %zu %c", &clk, &invert, &maxErr, &maxLen, &); + + amplify = (amp == 'a'); + } + if (clk == 1) { invert = 1; clk = 0; } + if (invert != 0 && invert != 1) { PrintAndLogEx(WARNING, "Invalid value for invert: %i", invert); return PM3_EINVARG; From 9cf304c8fde1b8f6f77fef1f08c138d0baa4bed3 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Tue, 6 Oct 2020 20:16:23 +0200 Subject: [PATCH 0915/1047] Avoid file with special char --- README.md | 2 +- ...ity-Scan-Config-&-Run.md => Coverity-Scan-Config-and-Run.md} | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename doc/md/Development/{Coverity-Scan-Config-&-Run.md => Coverity-Scan-Config-and-Run.md} (100%) diff --git a/README.md b/README.md index 8fb77dc14..74bf3fe98 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,7 @@ | ------------------- |:-------------------:| -------------------:| |[Notes on UART](/doc/uart_notes.md)|[Notes on Termux / Android](/doc/termux_notes.md)|[Notes on paths](/doc/path_notes.md)| |[Notes on frame format](/doc/new_frame_format.md)|[Notes on tracelog / wireshark](/doc/trace_notes.md)|[Notes on EMV](/doc/emv_notes.md)| -|[Notes on external flash](/doc/ext_flash_notes.md)|[Notes on loclass](/doc/loclass_notes.md)|[Notes on Coverity Scan Config & Run](/doc/md/Development/Coverity-Scan-Config-%26-Run.md)| +|[Notes on external flash](/doc/ext_flash_notes.md)|[Notes on loclass](/doc/loclass_notes.md)|[Notes on Coverity Scan Config & Run](/doc/md/Development/Coverity-Scan-Config-and-Run.md)| |[Notes on file formats used with Proxmark3](/doc/extensions_notes.md)|[Notes on MFU binary format](/doc/mfu_binary_format_notes.md)|[Notes on FPGA & ARM](/doc/fpga_arm_notes.md)| |[Developing standalone mode](/armsrc/Standalone/readme.md)|[Wiki about standalone mode](https://github.com/RfidResearchGroup/proxmark3/wiki/Standalone-mode)|[Notes on Magic cards](/doc/magic_cards_notes.md)| |[Notes on Color usage](/doc/colors_notes.md)|[Makefile vs CMake](/doc/md/Development/Makefile-vs-CMake.md)|[Notes on Cloner guns](/doc/cloner_notes.md)| diff --git a/doc/md/Development/Coverity-Scan-Config-&-Run.md b/doc/md/Development/Coverity-Scan-Config-and-Run.md similarity index 100% rename from doc/md/Development/Coverity-Scan-Config-&-Run.md rename to doc/md/Development/Coverity-Scan-Config-and-Run.md From d0889cb70f23aedb1f5cec7e9c0e564be1e47d55 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Tue, 6 Oct 2020 20:06:40 +0200 Subject: [PATCH 0916/1047] Makefile: helper to convert tabs: make miscchecks EDIT=1 --- Makefile | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/Makefile b/Makefile index cb0d848cd..4634a8b54 100644 --- a/Makefile +++ b/Makefile @@ -248,7 +248,7 @@ print-%: ; @echo $* = $($*) style: # Make sure astyle is installed @which astyle >/dev/null || ( echo "Please install 'astyle' package first" ; exit 1 ) - # Remove spaces & tabs at EOL, add LF at EOF if needed on *.c, *.h, *.cpp. *.lua, *.py, *.pl, Makefile + # Remove spaces & tabs at EOL, add LF at EOF if needed on *.c, *.h, *.cpp. *.lua, *.py, *.pl, Makefile, *.v find . \( -not -path "./cov-int/*" -and -not -path "./fpga/xst/*" -and \( -name "*.[ch]" -or \( -name "*.cpp" -and -not -name "*.moc.cpp" \) -or -name "*.lua" -or -name "*.py" -or -name "*.pl" -or -name "Makefile" -or -name "*.v" \) \) \ -exec perl -pi -e 's/[ \t]+$$//' {} \; \ -exec sh -c "tail -c1 {} | xxd -p | tail -1 | grep -q -v 0a$$" \; \ @@ -263,21 +263,28 @@ style: [ -x client/proxmark3 ] && client/proxmark3 -m > doc/commands.md # Detecting weird codepages and tabs. +ifeq ($(platform),Darwin) +miscchecks: TABSCMD=egrep -l '\t' {} +else +miscchecks: TABSCMD=grep -lP '\t' {} +endif +ifneq (,$(EDIT)) +miscchecks: TABSCMD+= && vi {} -c ':set tabstop=4' -c ':set et|retab' -c ':wq' +endif miscchecks: - # Make sure recode is installed +# Make sure recode is installed @which recode >/dev/null || ( echo "Please install 'recode' package first" ; exit 1 ) @echo "Files with suspicious chars:" - @find . \( -name "*.[ch]" -or -name "*.cpp" -or -name "*.lua" -or -name "*.py" -or -name "*.pl" -or -name "Makefile" -or -name "*.v" \) \ + @find . \( -not -path "./cov-int/*" -and -not -path "./client/deps/*" -and \( -name "*.[ch]" -or -name "*.cpp" -or -name "*.lua" -or -name "*.py" -or -name "*.pl" -or -name "Makefile" -or -name "*.v" \) \) \ -exec sh -c "cat {} |recode utf8.. >/dev/null || echo {}" \; - @echo "Files with tabs:" -# to remove tabs within lines, one can try with: vi $file -c ':set tabstop=4' -c ':set et|retab' -c ':wq' -ifeq ($(platform),Darwin) - @find . \( -name "*.[ch]" -or \( -name "*.cpp" -and -not -name "*.moc.cpp" \) -or -name "*.lua" -or -name "*.py" -or -name "*.pl" -or -name "*.md" -or -name "*.txt" -or -name "*.awk" -or -name "*.v" \) \ - -exec egrep -l '\t' {} \; +ifneq (,$(EDIT)) + @echo "Files with tabs: (EDIT enabled, files will be rewritten!)" else - @find . \( -name "*.[ch]" -or \( -name "*.cpp" -and -not -name "*.moc.cpp" \) -or -name "*.lua" -or -name "*.py" -or -name "*.pl" -or -name "*.md" -or -name "*.txt" -or -name "*.awk" -or -name "*.v" \) \ - -exec grep -lP '\t' {} \; + @echo "Files with tabs: (rerun with EDIT=1 if you want to convert them with vim)" endif +# to remove tabs within lines, one can try with: vi $file -c ':set tabstop=4' -c ':set et|retab' -c ':wq' + @find . \( -not -path "./cov-int/*" -and -not -path "./client/deps/*" -and \( -name "*.[ch]" -or \( -name "*.cpp" -and -not -name "*.moc.cpp" \) -or -name "*.lua" -or -name "*.py" -or -name "*.pl" -or -name "*.md" -or -name "*.txt" -or -name "*.awk" -or -name "*.v" \) \) \ + -exec sh -c "$(TABSCMD)" \; # @echo "Files with printf \\\\t:" # @find . \( -name "*.[ch]" -or \( -name "*.cpp" -and -not -name "*.moc.cpp" \) -or -name "*.lua" -or -name "*.py" -or -name "*.pl" -or -name "*.md" -or -name "*.txt" -or -name "*.awk" -or -name "*.v" \) \ # -exec grep -lP '\\t' {} \; From 491adacb94641ed210cd6c096a837b0c31c60ee7 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Tue, 6 Oct 2020 20:44:23 +0200 Subject: [PATCH 0917/1047] get rid of tabs --- armsrc/iso14443b.c | 40 +- armsrc/iso15693.c | 176 ++--- client/luascripts/hf_mf_dump-luxeo.lua | 310 ++++---- client/luascripts/hf_mf_gen3_writer.lua | 20 +- client/luascripts/hf_mf_uidbruteforce.lua | 2 +- client/luascripts/hf_mfu_magicwrite.lua | 864 +++++++++++----------- doc/fpga_arm_notes.md | 50 +- fpga/fpga_felica.v | 22 +- fpga/fpga_hf.v | 26 +- fpga/hi_get_trace.v | 176 ++--- fpga/hi_iso14443a.v | 30 +- fpga/hi_reader.v | 218 +++--- fpga/hi_simulate.v | 38 +- tools/hitag2crack/common/hitagcrypto.c | 8 +- tools/hitag2crack/common/hitagcrypto.h | 4 +- tools/mf_nonce_brute/iso14443crc.h | 6 +- tools/mf_nonce_brute/protocol.h | 4 +- tools/mf_nonce_brute/sleep.c | 2 +- 18 files changed, 998 insertions(+), 998 deletions(-) diff --git a/armsrc/iso14443b.c b/armsrc/iso14443b.c index 049231c21..976e13148 100644 --- a/armsrc/iso14443b.c +++ b/armsrc/iso14443b.c @@ -752,26 +752,26 @@ static RAMFUNC int Handle14443bSamplesFromTag(int ci, int cq) { // The soft decision on the bit uses an estimate of just the // quadrant of the reference angle, not the exact angle. #define MAKE_SOFT_DECISION() { \ - if(Demod.sumI > 0) { \ - v = ci; \ - } else { \ - v = -ci; \ - } \ - if(Demod.sumQ > 0) { \ - v += cq; \ - } else { \ - v -= cq; \ - } \ - } + if(Demod.sumI > 0) { \ + v = ci; \ + } else { \ + v = -ci; \ + } \ + if(Demod.sumQ > 0) { \ + v += cq; \ + } else { \ + v -= cq; \ + } \ + } -#define SUBCARRIER_DETECT_THRESHOLD 8 +#define SUBCARRIER_DETECT_THRESHOLD 8 // Subcarrier amplitude v = sqrt(ci^2 + cq^2), approximated here by max(abs(ci),abs(cq)) + 1/2*min(abs(ci),abs(cq))) #define AMPLITUDE(ci,cq) (MAX(ABS(ci),ABS(cq)) + (MIN(ABS(ci),ABS(cq))/2)) switch (Demod.state) { case DEMOD_UNSYNCD: { - if (AMPLITUDE(ci, cq) > SUBCARRIER_DETECT_THRESHOLD) { // subcarrier detected + if (AMPLITUDE(ci, cq) > SUBCARRIER_DETECT_THRESHOLD) { // subcarrier detected Demod.state = DEMOD_PHASE_REF_TRAINING; Demod.sumI = ci; Demod.sumQ = cq; @@ -799,7 +799,7 @@ static RAMFUNC int Handle14443bSamplesFromTag(int ci, int cq) { } else { // at this point it can be start of 14b' data or start of 14b SOF MAKE_SOFT_DECISION(); - Demod.posCount = 1; // this was the first half + Demod.posCount = 1; // this was the first half Demod.thisBit = v; Demod.shiftReg = 0; Demod.state = DEMOD_RECEIVING_DATA; @@ -815,7 +815,7 @@ static RAMFUNC int Handle14443bSamplesFromTag(int ci, int cq) { Demod.posCount++; MAKE_SOFT_DECISION(); if (v > 0) { - if (Demod.posCount > 3 * 2) { // max 19us between characters = 16 1/fs, max 3 etu after low phase of SOF = 24 1/fs + if (Demod.posCount > 3 * 2) { // max 19us between characters = 16 1/fs, max 3 etu after low phase of SOF = 24 1/fs LED_C_OFF(); if (Demod.bitCount == 0 && Demod.len == 0) { // received SOF only, this is valid for iClass/Picopass return true; @@ -823,8 +823,8 @@ static RAMFUNC int Handle14443bSamplesFromTag(int ci, int cq) { Demod.state = DEMOD_UNSYNCD; } } - } else { // start bit detected - Demod.posCount = 1; // this was the first half + } else { // start bit detected + Demod.posCount = 1; // this was the first half Demod.thisBit = v; Demod.shiftReg = 0; Demod.state = DEMOD_RECEIVING_DATA; @@ -857,14 +857,14 @@ static RAMFUNC int Handle14443bSamplesFromTag(int ci, int cq) { MAKE_SOFT_DECISION(); - if (Demod.posCount == 0) { // first half of bit + if (Demod.posCount == 0) { // first half of bit Demod.thisBit = v; Demod.posCount = 1; - } else { // second half of bit + } else { // second half of bit Demod.thisBit += v; Demod.shiftReg >>= 1; - if (Demod.thisBit > 0) { // logic '1' + if (Demod.thisBit > 0) { // logic '1' Demod.shiftReg |= 0x200; } diff --git a/armsrc/iso15693.c b/armsrc/iso15693.c index f3c3494a9..e84edd8a0 100644 --- a/armsrc/iso15693.c +++ b/armsrc/iso15693.c @@ -1883,112 +1883,112 @@ void LockPassSlixIso15693(uint32_t pass_id, uint32_t password) { LED_A_ON(); - uint8_t cmd_inventory[] = {ISO15693_REQ_DATARATE_HIGH | ISO15693_REQ_INVENTORY | ISO15693_REQINV_SLOT1, 0x01, 0x00, 0x00, 0x00 }; - uint8_t cmd_get_rnd[] = {ISO15693_REQ_DATARATE_HIGH, 0xB2, 0x04, 0x00, 0x00 }; - uint8_t cmd_set_pass[] = {ISO15693_REQ_DATARATE_HIGH, 0xB3, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; - //uint8_t cmd_write_pass[] = {ISO15693_REQ_DATARATE_HIGH | ISO15693_REQ_ADDRESS, 0xB4, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; - uint8_t cmd_lock_pass[] = {ISO15693_REQ_DATARATE_HIGH | ISO15693_REQ_ADDRESS, 0xB5, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00 }; - uint16_t crc; - int recvlen = 0; - uint8_t recvbuf[ISO15693_MAX_RESPONSE_LENGTH]; - uint32_t start_time = 0; - bool done = false; + uint8_t cmd_inventory[] = {ISO15693_REQ_DATARATE_HIGH | ISO15693_REQ_INVENTORY | ISO15693_REQINV_SLOT1, 0x01, 0x00, 0x00, 0x00 }; + uint8_t cmd_get_rnd[] = {ISO15693_REQ_DATARATE_HIGH, 0xB2, 0x04, 0x00, 0x00 }; + uint8_t cmd_set_pass[] = {ISO15693_REQ_DATARATE_HIGH, 0xB3, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; + //uint8_t cmd_write_pass[] = {ISO15693_REQ_DATARATE_HIGH | ISO15693_REQ_ADDRESS, 0xB4, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; + uint8_t cmd_lock_pass[] = {ISO15693_REQ_DATARATE_HIGH | ISO15693_REQ_ADDRESS, 0xB5, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00 }; + uint16_t crc; + int recvlen = 0; + uint8_t recvbuf[ISO15693_MAX_RESPONSE_LENGTH]; + uint32_t start_time = 0; + bool done = false; - // setup 'get random number' command - crc = Iso15693Crc(cmd_get_rnd, 3); - cmd_get_rnd[3] = crc & 0xff; - cmd_get_rnd[4] = crc >> 8; + // setup 'get random number' command + crc = Iso15693Crc(cmd_get_rnd, 3); + cmd_get_rnd[3] = crc & 0xff; + cmd_get_rnd[4] = crc >> 8; - Dbprintf("LockPass: Press button lock password, long-press to terminate."); + Dbprintf("LockPass: Press button lock password, long-press to terminate."); - while (!done) { + while (!done) { - LED_D_ON(); - switch(BUTTON_HELD(1000)) { - case BUTTON_SINGLE_CLICK: - Dbprintf("LockPass: Reset 'DONE'-LED (A)"); - LED_A_OFF(); - LED_B_OFF(); - LED_C_OFF(); - break; - case BUTTON_HOLD: - Dbprintf("LockPass: Terminating"); - done = true; - break; - default: - SpinDelay(50); - continue; - } + LED_D_ON(); + switch(BUTTON_HELD(1000)) { + case BUTTON_SINGLE_CLICK: + Dbprintf("LockPass: Reset 'DONE'-LED (A)"); + LED_A_OFF(); + LED_B_OFF(); + LED_C_OFF(); + break; + case BUTTON_HOLD: + Dbprintf("LockPass: Terminating"); + done = true; + break; + default: + SpinDelay(50); + continue; + } - if (done) [ - break; - } + if (done) [ + break; + } - recvlen = SendDataTag(cmd_get_rnd, sizeof(cmd_get_rnd), true, true, recvbuf, sizeof(recvbuf), start_time); - if (recvlen != 5) { - LED_C_ON(); - } else { - Dbprintf("LockPass: Received random 0x%02X%02X (%d)", recvbuf[1], recvbuf[2], recvlen); + recvlen = SendDataTag(cmd_get_rnd, sizeof(cmd_get_rnd), true, true, recvbuf, sizeof(recvbuf), start_time); + if (recvlen != 5) { + LED_C_ON(); + } else { + Dbprintf("LockPass: Received random 0x%02X%02X (%d)", recvbuf[1], recvbuf[2], recvlen); - // setup 'set password' command - cmd_set_pass[4] = ((password>>0) &0xFF) ^ recvbuf[1]; - cmd_set_pass[5] = ((password>>8) &0xFF) ^ recvbuf[2]; - cmd_set_pass[6] = ((password>>16) &0xFF) ^ recvbuf[1]; - cmd_set_pass[7] = ((password>>24) &0xFF) ^ recvbuf[2]; + // setup 'set password' command + cmd_set_pass[4] = ((password>>0) &0xFF) ^ recvbuf[1]; + cmd_set_pass[5] = ((password>>8) &0xFF) ^ recvbuf[2]; + cmd_set_pass[6] = ((password>>16) &0xFF) ^ recvbuf[1]; + cmd_set_pass[7] = ((password>>24) &0xFF) ^ recvbuf[2]; - crc = Iso15693Crc(cmd_set_pass, 8); - cmd_set_pass[8] = crc & 0xff; - cmd_set_pass[9] = crc >> 8; + crc = Iso15693Crc(cmd_set_pass, 8); + cmd_set_pass[8] = crc & 0xff; + cmd_set_pass[9] = crc >> 8; - Dbprintf("LockPass: Sending old password to end privacy mode", cmd_set_pass[4], cmd_set_pass[5], cmd_set_pass[6], cmd_set_pass[7]); - recvlen = SendDataTag(cmd_set_pass, sizeof(cmd_set_pass), false, true, recvbuf, sizeof(recvbuf), start_time); - if (recvlen != 3) { - Dbprintf("LockPass: Failed to set password (%d)", recvlen); - LED_B_ON(); - } else { - crc = Iso15693Crc(cmd_inventory, 3); - cmd_inventory[3] = crc & 0xff; - cmd_inventory[4] = crc >> 8; + Dbprintf("LockPass: Sending old password to end privacy mode", cmd_set_pass[4], cmd_set_pass[5], cmd_set_pass[6], cmd_set_pass[7]); + recvlen = SendDataTag(cmd_set_pass, sizeof(cmd_set_pass), false, true, recvbuf, sizeof(recvbuf), start_time); + if (recvlen != 3) { + Dbprintf("LockPass: Failed to set password (%d)", recvlen); + LED_B_ON(); + } else { + crc = Iso15693Crc(cmd_inventory, 3); + cmd_inventory[3] = crc & 0xff; + cmd_inventory[4] = crc >> 8; - Dbprintf("LockPass: Searching for tag..."); - recvlen = SendDataTag(cmd_inventory, sizeof(cmd_inventory), false, true, recvbuf, sizeof(recvbuf), start_time); - if (recvlen != 12) { - Dbprintf("LockPass: Failed to read inventory (%d)", recvlen); - LED_B_ON(); - LED_C_ON(); - } else { + Dbprintf("LockPass: Searching for tag..."); + recvlen = SendDataTag(cmd_inventory, sizeof(cmd_inventory), false, true, recvbuf, sizeof(recvbuf), start_time); + if (recvlen != 12) { + Dbprintf("LockPass: Failed to read inventory (%d)", recvlen); + LED_B_ON(); + LED_C_ON(); + } else { - Dbprintf("LockPass: Answer from %02X%02X%02X%02X%02X%02X%02X%02X", recvbuf[9], recvbuf[8], recvbuf[7], recvbuf[6], recvbuf[5], recvbuf[4], recvbuf[3], recvbuf[2]); + Dbprintf("LockPass: Answer from %02X%02X%02X%02X%02X%02X%02X%02X", recvbuf[9], recvbuf[8], recvbuf[7], recvbuf[6], recvbuf[5], recvbuf[4], recvbuf[3], recvbuf[2]); - memcpy(&cmd_lock_pass[3], &recvbuf[2], 8); + memcpy(&cmd_lock_pass[3], &recvbuf[2], 8); - cmd_lock_pass[8+3] = pass_id; + cmd_lock_pass[8+3] = pass_id; - crc = Iso15693Crc(cmd_lock_pass, 8+4); - cmd_lock_pass[8+4] = crc & 0xff; - cmd_lock_pass[8+5] = crc >> 8; + crc = Iso15693Crc(cmd_lock_pass, 8+4); + cmd_lock_pass[8+4] = crc & 0xff; + cmd_lock_pass[8+5] = crc >> 8; - Dbprintf("LockPass: locking to password 0x%02X%02X%02X%02X for ID %02X", cmd_set_pass[4], cmd_set_pass[5], cmd_set_pass[6], cmd_set_pass[7], pass_id); + Dbprintf("LockPass: locking to password 0x%02X%02X%02X%02X for ID %02X", cmd_set_pass[4], cmd_set_pass[5], cmd_set_pass[6], cmd_set_pass[7], pass_id); - recvlen = SendDataTag(cmd_lock_pass, sizeof(cmd_lock_pass), false, true, recvbuf, sizeof(recvbuf), start_time); - if (recvlen != 3) { - Dbprintf("LockPass: Failed to lock password (%d)", recvlen); - } else { - Dbprintf("LockPass: Successful (%d)", recvlen); - } - LED_A_ON(); - } - } } - } + recvlen = SendDataTag(cmd_lock_pass, sizeof(cmd_lock_pass), false, true, recvbuf, sizeof(recvbuf), start_time); + if (recvlen != 3) { + Dbprintf("LockPass: Failed to lock password (%d)", recvlen); + } else { + Dbprintf("LockPass: Successful (%d)", recvlen); + } + LED_A_ON(); + } + } } + } - Dbprintf("LockPass: Finishing"); - FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); + Dbprintf("LockPass: Finishing"); + FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); - cmd_send(CMD_ACK, recvlen, 0, 0, recvbuf, recvlen); - LED_A_OFF(); - LED_B_OFF(); - LED_C_OFF(); - LED_D_OFF(); + cmd_send(CMD_ACK, recvlen, 0, 0, recvbuf, recvlen); + LED_A_OFF(); + LED_B_OFF(); + LED_C_OFF(); + LED_D_OFF(); } */ diff --git a/client/luascripts/hf_mf_dump-luxeo.lua b/client/luascripts/hf_mf_dump-luxeo.lua index 3ee86ecbc..70f1b42e0 100644 --- a/client/luascripts/hf_mf_dump-luxeo.lua +++ b/client/luascripts/hf_mf_dump-luxeo.lua @@ -77,65 +77,65 @@ local function setdevicedebug( status ) end local function xteaCrypt(num_rounds, v, key) - local v0 = v[0] - local v1 = v[1] - local delta = 0x9E3779B9 - local sum = 0 + local v0 = v[0] + local v1 = v[1] + local delta = 0x9E3779B9 + local sum = 0 - for i = 0, num_rounds-1 do - -- v0 += (((v1 << 4) ^ (v1 >> 5)) + v1) ^ (sum + key[sum & 3]); - v0 = band(bxor(bxor(lsh(v1,4), rsh(v1,5)) + v1, sum + key[band(sum,3)]) + v0, 0xFFFFFFFF) - sum = band(sum + delta, 0xFFFFFFFF) - -- v1 += (((v0 << 4) ^ (v0 >> 5)) + v0) ^ (sum + key[(sum>>11) & 3]); - v1 = band(bxor(bxor(lsh(v0,4), rsh(v0,5)) + v0, sum + key[band(rsh(sum,11),3)]) + v1, 0xFFFFFFFF) - end - v[0] = v0 - v[1] = v1 + for i = 0, num_rounds-1 do + -- v0 += (((v1 << 4) ^ (v1 >> 5)) + v1) ^ (sum + key[sum & 3]); + v0 = band(bxor(bxor(lsh(v1,4), rsh(v1,5)) + v1, sum + key[band(sum,3)]) + v0, 0xFFFFFFFF) + sum = band(sum + delta, 0xFFFFFFFF) + -- v1 += (((v0 << 4) ^ (v0 >> 5)) + v0) ^ (sum + key[(sum>>11) & 3]); + v1 = band(bxor(bxor(lsh(v0,4), rsh(v0,5)) + v0, sum + key[band(rsh(sum,11),3)]) + v1, 0xFFFFFFFF) + end + v[0] = v0 + v[1] = v1 end local function xteaDecrypt(num_rounds, v, key) - local v0 = v[0] - local v1 = v[1] - local delta = 0x9E3779B9 - local sum = band(delta * num_rounds, 0xFFFFFFFF) + local v0 = v[0] + local v1 = v[1] + local delta = 0x9E3779B9 + local sum = band(delta * num_rounds, 0xFFFFFFFF) - for i = 0, num_rounds-1 do - -- v1 -= (((v0 << 4) ^ (v0 >> 5)) + v0) ^ (sum + key[(sum>>11) & 3]); - v1 = band(v1 - bxor(bxor(lsh(v0,4), rsh(v0,5)) + v0, sum + key[band(rsh(sum,11),3)]), 0xFFFFFFFF) - sum = band(sum - delta, 0xFFFFFFFF) - -- v0 -= (((v1 << 4) ^ (v1 >> 5)) + v1) ^ (sum + key[sum & 3]); - v0 = band(v0 - bxor(bxor(lsh(v1,4), rsh(v1,5)) + v1, sum + key[band(sum,3)]), 0xFFFFFFFF) - end - v[0] = v0 - v[1] = v1 + for i = 0, num_rounds-1 do + -- v1 -= (((v0 << 4) ^ (v0 >> 5)) + v0) ^ (sum + key[(sum>>11) & 3]); + v1 = band(v1 - bxor(bxor(lsh(v0,4), rsh(v0,5)) + v0, sum + key[band(rsh(sum,11),3)]), 0xFFFFFFFF) + sum = band(sum - delta, 0xFFFFFFFF) + -- v0 -= (((v1 << 4) ^ (v1 >> 5)) + v1) ^ (sum + key[sum & 3]); + v0 = band(v0 - bxor(bxor(lsh(v1,4), rsh(v1,5)) + v1, sum + key[band(sum,3)]), 0xFFFFFFFF) + end + v[0] = v0 + v[1] = v1 end local function createxteakey(mfuid) - local xteakey = {} - local buid = {} - local tmpkey = {} - local uid = {} + local xteakey = {} + local buid = {} + local tmpkey = {} + local uid = {} - -- Warning ! "it is customary in Lua to START ARRAYS WITH ONE" - buid = utils.ConvertHexToBytes(mfuid) - uid[0] = bor(buid[1], lsh(buid[2], 8)) - uid[1] = bor(buid[3], lsh(buid[4], 8)) + -- Warning ! "it is customary in Lua to START ARRAYS WITH ONE" + buid = utils.ConvertHexToBytes(mfuid) + uid[0] = bor(buid[1], lsh(buid[2], 8)) + uid[1] = bor(buid[3], lsh(buid[4], 8)) - tmpkey[0] = 0x198B - tmpkey[1] = uid[0] - tmpkey[2] = 0x46D8 - tmpkey[3] = uid[1] - tmpkey[4] = 0x5310 - tmpkey[5] = bxor(uid[0], 0xA312) - tmpkey[6] = 0xFFCB - tmpkey[7] = bxor(uid[1], 0x55AA) + tmpkey[0] = 0x198B + tmpkey[1] = uid[0] + tmpkey[2] = 0x46D8 + tmpkey[3] = uid[1] + tmpkey[4] = 0x5310 + tmpkey[5] = bxor(uid[0], 0xA312) + tmpkey[6] = 0xFFCB + tmpkey[7] = bxor(uid[1], 0x55AA) - xteakey[0] = bor(lsh(tmpkey[1], 16), tmpkey[0]) - xteakey[1] = bor(lsh(tmpkey[3], 16), tmpkey[2]) - xteakey[2] = bor(lsh(tmpkey[5], 16), tmpkey[4]) - xteakey[3] = bor(lsh(tmpkey[7], 16), tmpkey[6]) + xteakey[0] = bor(lsh(tmpkey[1], 16), tmpkey[0]) + xteakey[1] = bor(lsh(tmpkey[3], 16), tmpkey[2]) + xteakey[2] = bor(lsh(tmpkey[5], 16), tmpkey[4]) + xteakey[3] = bor(lsh(tmpkey[7], 16), tmpkey[6]) - return xteakey + return xteakey end local function getblockdata(response) @@ -160,38 +160,38 @@ local function readblock(blockno, key) end local function readtag(mfkey,xteakey) - local tagdata = {} - local cleardata = {} - local v = {} - local vv = {} + local tagdata = {} + local cleardata = {} + local v = {} + local vv = {} - -- Read 4 sectors and build table - for sect = 8, 11 do - for blockn = sect * 4, (sect * 4) + 2 do - local blockdata = readblock(blockn, mfkey) - if not blockdata then return oops('[!] failed reading block') end - table.insert(tagdata, blockdata) - end - end + -- Read 4 sectors and build table + for sect = 8, 11 do + for blockn = sect * 4, (sect * 4) + 2 do + local blockdata = readblock(blockn, mfkey) + if not blockdata then return oops('[!] failed reading block') end + table.insert(tagdata, blockdata) + end + end - -- Decrypt data and build clear table - for key,value in ipairs(tagdata) do - local clearblockdata - v[0] = utils.SwapEndianness(value:sub(1, 8), 32) - v[1] = utils.SwapEndianness(value:sub(9, 16), 32) - xteaDecrypt(16, v, xteakey) - vv[0] = utils.SwapEndianness(value:sub(17, 24), 32) - vv[1] = utils.SwapEndianness(value:sub(25, 32), 32) - xteaDecrypt(16, vv, xteakey) - clearblockdata=string.format("%08X%08X%08X%08X", - utils.SwapEndianness(string.format("%08X", v[0]), 32), - utils.SwapEndianness(string.format("%08X", v[1]), 32), - utils.SwapEndianness(string.format("%08X", vv[0]), 32), - utils.SwapEndianness(string.format("%08X", vv[1]), 32)) - table.insert(cleardata, clearblockdata) - end + -- Decrypt data and build clear table + for key,value in ipairs(tagdata) do + local clearblockdata + v[0] = utils.SwapEndianness(value:sub(1, 8), 32) + v[1] = utils.SwapEndianness(value:sub(9, 16), 32) + xteaDecrypt(16, v, xteakey) + vv[0] = utils.SwapEndianness(value:sub(17, 24), 32) + vv[1] = utils.SwapEndianness(value:sub(25, 32), 32) + xteaDecrypt(16, vv, xteakey) + clearblockdata=string.format("%08X%08X%08X%08X", + utils.SwapEndianness(string.format("%08X", v[0]), 32), + utils.SwapEndianness(string.format("%08X", v[1]), 32), + utils.SwapEndianness(string.format("%08X", vv[0]), 32), + utils.SwapEndianness(string.format("%08X", vv[1]), 32)) + table.insert(cleardata, clearblockdata) + end - return tagdata,cleardata + return tagdata,cleardata end @@ -203,98 +203,98 @@ local function main(args) if o == 'h' then return help() end end - local xteakey = {} - -- local v = {} - local edata = {} - local cdata = {} + local xteakey = {} + -- local v = {} + local edata = {} + local cdata = {} - -- Turn off Debug - setdevicedebug(false) + -- Turn off Debug + setdevicedebug(false) - -- GET TAG UID - tag, err = lib14a.read(false, true) - if err then - lib14a.disconnect() - return oops(err) - end - core.clearCommandBuffer() + -- GET TAG UID + tag, err = lib14a.read(false, true) + if err then + lib14a.disconnect() + return oops(err) + end + core.clearCommandBuffer() - -- simple tag check - if 0x08 ~= tag.sak then - if 0x0400 ~= tag.atqa then - return oops(('[fail] found tag %s :: looking for Mifare S50 1k'):format(tag.name)) - end - end + -- simple tag check + if 0x08 ~= tag.sak then + if 0x0400 ~= tag.atqa then + return oops(('[fail] found tag %s :: looking for Mifare S50 1k'):format(tag.name)) + end + end - xteakey = createxteakey(tag.uid) - print(acblue.."UID: "..tag.uid..acoff) - print(acblue..string.format("XTEA key: %08X %08X %08X %08X", xteakey[0], xteakey[1], xteakey[2], xteakey[3])..acoff) + xteakey = createxteakey(tag.uid) + print(acblue.."UID: "..tag.uid..acoff) + print(acblue..string.format("XTEA key: %08X %08X %08X %08X", xteakey[0], xteakey[1], xteakey[2], xteakey[3])..acoff) - edata, cdata = readtag("415A54454B4D", xteakey) + edata, cdata = readtag("415A54454B4D", xteakey) - if edata == nil or cdata == nil then - print("ERROR Reading tag!") - return nil - end + if edata == nil or cdata == nil then + print("ERROR Reading tag!") + return nil + end - print("Ciphered data:") - for key,value in ipairs(edata) do - print(value) - if key % 3 == 0 then print("") end - end + print("Ciphered data:") + for key,value in ipairs(edata) do + print(value) + if key % 3 == 0 then print("") end + end - -- compute CRC for each segment + -- compute CRC for each segment crcH = utils.SwapEndianness(core.reveng_runmodel("CRC-16/ARC", cdata[1]..cdata[2]..cdata[3]:sub(1,28), false, '0'),16) crcA = utils.SwapEndianness(core.reveng_runmodel("CRC-16/ARC", cdata[4]..cdata[5]..cdata[6]..cdata[7]:sub(1,28), false, '0'),16) crcB = utils.SwapEndianness(core.reveng_runmodel("CRC-16/ARC", cdata[8]..cdata[9]..cdata[10]..cdata[11]:sub(1,28), false, '0'),16) - print("\nHeader:") - for key,value in ipairs(cdata) do - if key == 3 then - print(value:sub(1,28)..acmagenta..value:sub(29,32)..acoff) - if utils.SwapEndianness(value:sub(29,32),16) == crcH then strcrc = " OK" else strcrc = acred.." CRCERROR !!" end - print(acmagenta.."CRC16/ARC = "..string.format("0x%04X", crcH)..strcrc..acoff) - print("\nDataA:") - elseif key == 4 then - print(acgreen..value:sub(1,4)..acoff..value:sub(5,16)..accyan..value:sub(17,24)..acoff..value:sub(25,26)..accyan..value:sub(27,28)..acoff..value:sub(29,32)) - versionA = utils.SwapEndianness(value:sub(1,4),16) - dateA = string.format("%d/%02d/%02d %02d:%02d", tonumber(value:sub(17,18),10)+2000, tonumber(value:sub(19,20),10), - tonumber(string.format("%02X", band(tonumber(value:sub(21,22),16),0x3f)),10), - tonumber(value:sub(23,24),10), tonumber(value:sub(27,28),10)) - elseif key == 8 then - print(acgreen..value:sub(1,4)..acoff..value:sub(5,16)..accyan..value:sub(17,24)..acoff..value:sub(25,26)..accyan..value:sub(27,28)..acoff..value:sub(29,32)) - versionB = utils.SwapEndianness(value:sub(1,4),16) - dateB = string.format("%d/%02d/%02d %02d:%02d", tonumber(value:sub(17,18),10)+2000, tonumber(value:sub(19,20),10), - tonumber(string.format("%02X", band(tonumber(value:sub(21,22),16),0x3f)),10), - tonumber(value:sub(23,24),10), tonumber(value:sub(27,28),10)) - elseif key == 5 then - print(acyellow..value:sub(1,4)..acoff..value:sub(5,32)) - creditA = utils.SwapEndianness(value:sub(1,4),16)/100 - elseif key == 9 then - print(acyellow..value:sub(1,4)..acoff..value:sub(5,32)) - creditB = utils.SwapEndianness(value:sub(1,4),16)/100 - elseif key == 7 then - print(value:sub(1,28)..acmagenta..value:sub(29,32)..acoff) - print(acgreen.."Version "..string.format("0x%04X", versionA)..acoff) - print(acyellow.."Credit : "..creditA..acoff) - if utils.SwapEndianness(value:sub(29,32),16) == crcA then strcrc = " OK" else strcrc = acred.." CRCERROR !!" end - print(acmagenta.."CRC16/ARC = "..string.format("0x%04X", crcA)..strcrc..acoff) - print(accyan.."Date: "..dateA..acoff) - print("\nDataB:") - elseif key == 11 then - print(value:sub(1,28)..acmagenta..value:sub(29,32)..acoff) - print(acgreen.."Version "..string.format("0x%04X", versionB)..acoff) - print(acyellow.."Credit : "..creditB..acoff) - if utils.SwapEndianness(value:sub(29,32),16) == crcB then strcrc = " OK" else strcrc = acred.." CRCERROR !!" end - print(acmagenta.."CRC16/ARC = "..string.format("0x%04X", crcB)..strcrc..acoff) - print(accyan.."Date: "..dateB..acoff) - print("\nFooter:") - else - print(value) - end - end + print("\nHeader:") + for key,value in ipairs(cdata) do + if key == 3 then + print(value:sub(1,28)..acmagenta..value:sub(29,32)..acoff) + if utils.SwapEndianness(value:sub(29,32),16) == crcH then strcrc = " OK" else strcrc = acred.." CRCERROR !!" end + print(acmagenta.."CRC16/ARC = "..string.format("0x%04X", crcH)..strcrc..acoff) + print("\nDataA:") + elseif key == 4 then + print(acgreen..value:sub(1,4)..acoff..value:sub(5,16)..accyan..value:sub(17,24)..acoff..value:sub(25,26)..accyan..value:sub(27,28)..acoff..value:sub(29,32)) + versionA = utils.SwapEndianness(value:sub(1,4),16) + dateA = string.format("%d/%02d/%02d %02d:%02d", tonumber(value:sub(17,18),10)+2000, tonumber(value:sub(19,20),10), + tonumber(string.format("%02X", band(tonumber(value:sub(21,22),16),0x3f)),10), + tonumber(value:sub(23,24),10), tonumber(value:sub(27,28),10)) + elseif key == 8 then + print(acgreen..value:sub(1,4)..acoff..value:sub(5,16)..accyan..value:sub(17,24)..acoff..value:sub(25,26)..accyan..value:sub(27,28)..acoff..value:sub(29,32)) + versionB = utils.SwapEndianness(value:sub(1,4),16) + dateB = string.format("%d/%02d/%02d %02d:%02d", tonumber(value:sub(17,18),10)+2000, tonumber(value:sub(19,20),10), + tonumber(string.format("%02X", band(tonumber(value:sub(21,22),16),0x3f)),10), + tonumber(value:sub(23,24),10), tonumber(value:sub(27,28),10)) + elseif key == 5 then + print(acyellow..value:sub(1,4)..acoff..value:sub(5,32)) + creditA = utils.SwapEndianness(value:sub(1,4),16)/100 + elseif key == 9 then + print(acyellow..value:sub(1,4)..acoff..value:sub(5,32)) + creditB = utils.SwapEndianness(value:sub(1,4),16)/100 + elseif key == 7 then + print(value:sub(1,28)..acmagenta..value:sub(29,32)..acoff) + print(acgreen.."Version "..string.format("0x%04X", versionA)..acoff) + print(acyellow.."Credit : "..creditA..acoff) + if utils.SwapEndianness(value:sub(29,32),16) == crcA then strcrc = " OK" else strcrc = acred.." CRCERROR !!" end + print(acmagenta.."CRC16/ARC = "..string.format("0x%04X", crcA)..strcrc..acoff) + print(accyan.."Date: "..dateA..acoff) + print("\nDataB:") + elseif key == 11 then + print(value:sub(1,28)..acmagenta..value:sub(29,32)..acoff) + print(acgreen.."Version "..string.format("0x%04X", versionB)..acoff) + print(acyellow.."Credit : "..creditB..acoff) + if utils.SwapEndianness(value:sub(29,32),16) == crcB then strcrc = " OK" else strcrc = acred.." CRCERROR !!" end + print(acmagenta.."CRC16/ARC = "..string.format("0x%04X", crcB)..strcrc..acoff) + print(accyan.."Date: "..dateB..acoff) + print("\nFooter:") + else + print(value) + end + end - return + return end main(args) diff --git a/client/luascripts/hf_mf_gen3_writer.lua b/client/luascripts/hf_mf_gen3_writer.lua index 7795ac26c..1257f3413 100644 --- a/client/luascripts/hf_mf_gen3_writer.lua +++ b/client/luascripts/hf_mf_gen3_writer.lua @@ -34,7 +34,7 @@ version = 'v1.0.0' desc = [[ This script gives you an easy way to write your *.eml dumps into normal MIFARE Classic and Magic Gen3 cards. - Works with both 4 and 7 bytes NXP MIFARE Classic 1K cards. + Works with both 4 and 7 bytes NXP MIFARE Classic 1K cards. The script also has the possibility to change UID and permanent lock uid on magic Gen3 cards. It supports the following functionality. @@ -47,18 +47,18 @@ desc = [[ Script works in a wizard styled way. - Author Youtube channel: https://yev.ooo/ + Author Youtube channel: https://yev.ooo/ - Many Thanks, - Best Regards + Many Thanks, + Best Regards ]] example = [[ 1. script run mfc_gen3_writer ]] usage = [[ - Give script to know if you uses an Windows OS + Give script to know if you uses an Windows OS Select your *.eml dump from list to write to the card. - Follow the wizard. + Follow the wizard. ]] -- --- @@ -163,9 +163,9 @@ end -- local function KeyAB() if default_key_type == '00' then - return 'KeyA' + return 'KeyA' else - return 'KeyB' + return 'KeyB' end end -- @@ -265,7 +265,7 @@ local function main(args) eml_file_uid_end = 22 eml_file_lengt = 31 else - eml_file_uid_start = 9 + eml_file_uid_start = 9 eml_file_uid_end = 16 eml_file_lengt = 25 end @@ -366,7 +366,7 @@ local function main(args) print(tab) -- if checkkey() == true then - print(tab) + print(tab) if (utils.confirm(' Card is Empty. Write selected dump to card ?') == true) then for i = 1, #eml do core.console(string.format(cmd_wrbl_b, (i-1), default_key, eml[i])) diff --git a/client/luascripts/hf_mf_uidbruteforce.lua b/client/luascripts/hf_mf_uidbruteforce.lua index 461e8aad3..fc85b63bb 100644 --- a/client/luascripts/hf_mf_uidbruteforce.lua +++ b/client/luascripts/hf_mf_uidbruteforce.lua @@ -114,7 +114,7 @@ local function main(args) local c = string.format( command, n ) print('Running: "'..c..'"') core.console(c) - core.console('msleep '..timeout); + core.console('msleep '..timeout); core.console('hw ping') end diff --git a/client/luascripts/hf_mfu_magicwrite.lua b/client/luascripts/hf_mfu_magicwrite.lua index e29296f45..2961bd54c 100644 --- a/client/luascripts/hf_mfu_magicwrite.lua +++ b/client/luascripts/hf_mfu_magicwrite.lua @@ -15,75 +15,75 @@ author = 'Christian Herrmann' version = 'v1.1.3' desc = 'This script enables easy programming of a MAGIC NTAG 21* card' example = [[ - -- wipe tag - script run hf_mfu_magicwrite -w + -- wipe tag + script run hf_mfu_magicwrite -w - -- wipe a locked down tag by giving the password - script run hf_mfu_magicwrite -k ffffffff -w + -- wipe a locked down tag by giving the password + script run hf_mfu_magicwrite -k ffffffff -w - --read magic tag configuration - script run hf_mfu_magicwrite -c + --read magic tag configuration + script run hf_mfu_magicwrite -c - -- set uid - script run hf_mfu_magicwrite -u 04112233445566 + -- set uid + script run hf_mfu_magicwrite -u 04112233445566 - -- set pwd / pack - script run hf_mfu_magicwrite -p 11223344 -a 8080 + -- set pwd / pack + script run hf_mfu_magicwrite -p 11223344 -a 8080 - -- set version to NTAG213 - script run hf_mfu_magicwrite -v 0004040201000f03 + -- set version to NTAG213 + script run hf_mfu_magicwrite -v 0004040201000f03 - -- set signature - script run hf_mfu_magicwrite -s 1122334455667788990011223344556677889900112233445566778899001122 + -- set signature + script run hf_mfu_magicwrite -s 1122334455667788990011223344556677889900112233445566778899001122 ]] usage = [[ script run hf_mfu_easywrite -h -k -c -w -u -t -p -a -s -o -v ]] arguments = [[ - -h this help - -c read magic configuration - -u UID (14 hexsymbols), set UID on tag - -t tag type to impersonate - 1 = UL_EV1 48k - 2 = UL_EV1 128k - 3 = NTAG 210 - 4 = NTAG 212 - 5 = NTAG 213 (true) - 6 = NTAG 215 (true) - 7 = NTAG 216 (true) - 8 = NTAG I2C 1K - 9 = NTAG I2C 2K - 10 = NTAG I2C 1K PLUS - 11 = NTAG I2C 2K PLUS - 12 = NTAG 213F (true) - 13 = NTAG 216F (true) - -p password (8 hexsymbols), set password on tag. - -a pack ( 4 hexsymbols), set pack on tag. - -s signature data (64 hexsymbols), set signature data on tag. - -o OTP data (8 hexsymbols), set one-time-pad data on tag. - -v version data (16 hexsymbols), set version data on tag. - -w wipe tag. You can specify password if the tag has been locked down. Fills tag with zeros and put default values for NTAG213 (like -t 5) - -k pwd to use with the wipe option + -h this help + -c read magic configuration + -u UID (14 hexsymbols), set UID on tag + -t tag type to impersonate + 1 = UL_EV1 48k + 2 = UL_EV1 128k + 3 = NTAG 210 + 4 = NTAG 212 + 5 = NTAG 213 (true) + 6 = NTAG 215 (true) + 7 = NTAG 216 (true) + 8 = NTAG I2C 1K + 9 = NTAG I2C 2K + 10 = NTAG I2C 1K PLUS + 11 = NTAG I2C 2K PLUS + 12 = NTAG 213F (true) + 13 = NTAG 216F (true) + -p password (8 hexsymbols), set password on tag. + -a pack ( 4 hexsymbols), set pack on tag. + -s signature data (64 hexsymbols), set signature data on tag. + -o OTP data (8 hexsymbols), set one-time-pad data on tag. + -v version data (16 hexsymbols), set version data on tag. + -w wipe tag. You can specify password if the tag has been locked down. Fills tag with zeros and put default values for NTAG213 (like -t 5) + -k pwd to use with the wipe option ]] --- -- A debug printout-function local function dbg(args) - if not DEBUG then return end - if type(args) == 'table' then - local i = 1 - while result[i] do - dbg(result[i]) - i = i+1 - end - else - print('###', args) - end + if not DEBUG then return end + if type(args) == 'table' then + local i = 1 + while result[i] do + dbg(result[i]) + i = i+1 + end + else + print('###', args) + end end -- This is only meant to be used when errors occur local function oops(err) - print("ERROR: ",err) + print("ERROR: ",err) core.clearCommandBuffer() - return nil, err + return nil, err end --- -- Usage help @@ -102,11 +102,11 @@ end --- -- set the global password variable local function set_password(pwd) - if pwd == nil then _password = nil; return true, 'Ok' end - if #pwd ~= 8 then return nil, 'password wrong length. Must be 4 hex bytes' end - if #pwd == 0 then _password = nil end - _password = pwd - return true, 'Ok' + if pwd == nil then _password = nil; return true, 'Ok' end + if #pwd ~= 8 then return nil, 'password wrong length. Must be 4 hex bytes' end + if #pwd == 0 then _password = nil end + _password = pwd + return true, 'Ok' end --- Picks out and displays the data read from a tag -- Specifically, takes a usb packet, converts to a Command @@ -114,37 +114,37 @@ end -- reads the number of bytes specified in arg1 (arg0 in c-struct) -- @param usbpacket the data received from the device local function getResponseData(usbpacket) - local resp = Command.parse(usbpacket) - local len = tonumber(resp.arg1) * 2 - return string.sub(tostring(resp.data), 0, len); + local resp = Command.parse(usbpacket) + local len = tonumber(resp.arg1) * 2 + return string.sub(tostring(resp.data), 0, len); end --- -- local function sendRaw(rawdata, options) - local flags = lib14a.ISO14A_COMMAND.ISO14A_NO_DISCONNECT - + lib14a.ISO14A_COMMAND.ISO14A_RAW - + lib14a.ISO14A_COMMAND.ISO14A_APPEND_CRC + local flags = lib14a.ISO14A_COMMAND.ISO14A_NO_DISCONNECT + + lib14a.ISO14A_COMMAND.ISO14A_RAW + + lib14a.ISO14A_COMMAND.ISO14A_APPEND_CRC - local c = Command:newMIX{cmd = cmds.CMD_HF_ISO14443A_READER, - arg1 = flags, - -- arg2 contains the length, which is half the length of the ASCII-string rawdata - arg2 = string.len(rawdata)/2, - data = rawdata} + local c = Command:newMIX{cmd = cmds.CMD_HF_ISO14443A_READER, + arg1 = flags, + -- arg2 contains the length, which is half the length of the ASCII-string rawdata + arg2 = string.len(rawdata)/2, + data = rawdata} return c:sendMIX(options.ignore_response) end --- -- local function send(payload) - local usb, err = sendRaw(payload,{ignore_response = false}) - if err then return oops(err) end - return getResponseData(usb) + local usb, err = sendRaw(payload,{ignore_response = false}) + if err then return oops(err) end + return getResponseData(usb) end --- -- select tag and if password is set, authenticate local function connect() - core.clearCommandBuffer() + core.clearCommandBuffer() -- First of all, connect info, err = lib14a.read(true, true) @@ -154,221 +154,221 @@ local function connect() end core.clearCommandBuffer() - --authenticate if needed using global variable - if _password then - send('1B'.._password) - end + --authenticate if needed using global variable + if _password then + send('1B'.._password) + end return true end -- -- Read magic configuration local function read_config() - local info = connect() + local info = connect() if not info then return false, "Can't select card" end - -- read PWD - local pwd = send("30F0"):sub(1,8) + -- read PWD + local pwd = send("30F0"):sub(1,8) - -- 04 response indicates that blocks has been locked down. - if pwd == '04' then lib14a.disconnect(); return nil, "can't read configuration, "..err_lock end + -- 04 response indicates that blocks has been locked down. + if pwd == '04' then lib14a.disconnect(); return nil, "can't read configuration, "..err_lock end - -- read PACK - local pack = send("30F1"):sub(1,4) + -- read PACK + local pack = send("30F1"):sub(1,4) - -- read SIGNATURE - local signature1 = send('30F2'):sub(1,32) - local signature2 = send('30F6'):sub(1,32) + -- read SIGNATURE + local signature1 = send('30F2'):sub(1,32) + local signature2 = send('30F6'):sub(1,32) - -- read VERSION - local version = send('30FA'):sub(1,16) - -- read config - local cardtype = send('30FC'):sub(1,2) + -- read VERSION + local version = send('30FA'):sub(1,16) + -- read config + local cardtype = send('30FC'):sub(1,2) - local typestr = '' - if cardtype == '00' then typestr = 'NTAG 213' - elseif cardtype == '01' then typestr = 'NTAG 215' - elseif cardtype == '02' then typestr = 'NTAG 216' - end + local typestr = '' + if cardtype == '00' then typestr = 'NTAG 213' + elseif cardtype == '01' then typestr = 'NTAG 215' + elseif cardtype == '02' then typestr = 'NTAG 216' + end - print('Magic NTAG 21* Configuration') - print(' - Type ', typestr, '(genuine cardtype)') - print(' - Password', pwd) - print(' - Pack ', pack) - print(' - Version ', version) - print(' - Signature', signature1..signature2) + print('Magic NTAG 21* Configuration') + print(' - Type ', typestr, '(genuine cardtype)') + print(' - Password', pwd) + print(' - Pack ', pack) + print(' - Version ', version) + print(' - Signature', signature1..signature2) - lib14a.disconnect() - return true, 'Ok' + lib14a.disconnect() + return true, 'Ok' end --- -- Write SIGNATURE data local function write_signature(data) - -- uid string checks - if data == nil then return nil, 'empty data string' end - if #data == 0 then return nil, 'empty data string' end - if #data ~= 64 then return nil, 'data wrong length. Should be 32 hex bytes' end + -- uid string checks + if data == nil then return nil, 'empty data string' end + if #data == 0 then return nil, 'empty data string' end + if #data ~= 64 then return nil, 'data wrong length. Should be 32 hex bytes' end - local info = connect() + local info = connect() if not info then return false, "Can't select card" end - print('Writing new signature') + print('Writing new signature') - local b,c - local cmd = 'A2F%d%s' - local j = 2 - for i = 1, #data, 8 do - b = data:sub(i,i+7) - c = cmd:format(j,b) - local resp = send(c) - if resp == '04' then lib14a.disconnect(); return nil, 'Failed to write signature' end - j = j + 1 - end - lib14a.disconnect() - return true, 'Ok' + local b,c + local cmd = 'A2F%d%s' + local j = 2 + for i = 1, #data, 8 do + b = data:sub(i,i+7) + c = cmd:format(j,b) + local resp = send(c) + if resp == '04' then lib14a.disconnect(); return nil, 'Failed to write signature' end + j = j + 1 + end + lib14a.disconnect() + return true, 'Ok' end --- -- Write PWD local function write_pwd(pwd) - -- PWD string checks - if pwd == nil then return nil, 'empty PWD string' end - if #pwd == 0 then return nil, 'empty PWD string' end - if #pwd ~= 8 then return nil, 'PWD wrong length. Should be 4 hex bytes' end + -- PWD string checks + if pwd == nil then return nil, 'empty PWD string' end + if #pwd == 0 then return nil, 'empty PWD string' end + if #pwd ~= 8 then return nil, 'PWD wrong length. Should be 4 hex bytes' end - local info = connect() + local info = connect() if not info then return false, "Can't select card" end - print('Writing new PWD ', pwd) + print('Writing new PWD ', pwd) - local resp = send('A2F0'..pwd) - lib14a.disconnect() - if resp == '04' then - return nil, 'Failed to write password' - else - return true, 'Ok' - end + local resp = send('A2F0'..pwd) + lib14a.disconnect() + if resp == '04' then + return nil, 'Failed to write password' + else + return true, 'Ok' + end end --- -- Write PACK local function write_pack(pack) - -- PACK string checks - if pack == nil then return nil, 'empty PACK string' end - if #pack == 0 then return nil, 'empty PACK string' end - if #pack ~= 4 then return nil, 'PACK wrong length. Should be 4 hex bytes' end + -- PACK string checks + if pack == nil then return nil, 'empty PACK string' end + if #pack == 0 then return nil, 'empty PACK string' end + if #pack ~= 4 then return nil, 'PACK wrong length. Should be 4 hex bytes' end - local info = connect() + local info = connect() if not info then return false, "Can't select card" end - print('Writing new PACK', pack) + print('Writing new PACK', pack) - local resp = send('A2F1'..pack..'0000') - lib14a.disconnect() - if resp == '04' then - return nil, 'Failed to write pack' - else - return true, 'Ok' - end + local resp = send('A2F1'..pack..'0000') + lib14a.disconnect() + if resp == '04' then + return nil, 'Failed to write pack' + else + return true, 'Ok' + end end -- -- Write OTP block local function write_otp(block3) - -- OTP string checks - if block3 == nil then return nil, 'empty OTP string' end - if #block3 == 0 then return nil, 'empty OTP string' end - if #block3 ~= 8 then return nil, 'OTP wrong length. Should be 4 hex bytes' end + -- OTP string checks + if block3 == nil then return nil, 'empty OTP string' end + if #block3 == 0 then return nil, 'empty OTP string' end + if #block3 ~= 8 then return nil, 'OTP wrong length. Should be 4 hex bytes' end - local info = connect() + local info = connect() if not info then return false, "Can't select card" end - print('Writing new OTP ', block3) + print('Writing new OTP ', block3) - local resp = send('A203'..block3) - lib14a.disconnect() - if resp == '04' then - return nil, 'Failed to write OTP' - else - return true, 'Ok' - end + local resp = send('A203'..block3) + lib14a.disconnect() + if resp == '04' then + return nil, 'Failed to write OTP' + else + return true, 'Ok' + end end -- -- Writes a UID with bcc1, bcc2. Needs a magic tag. local function write_uid(uid) - -- uid string checks - if uid == nil then return nil, 'empty uid string' end - if #uid == 0 then return nil, 'empty uid string' end - if #uid ~= 14 then return nil, 'uid wrong length. Should be 7 hex bytes' end + -- uid string checks + if uid == nil then return nil, 'empty uid string' end + if #uid == 0 then return nil, 'empty uid string' end + if #uid ~= 14 then return nil, 'uid wrong length. Should be 7 hex bytes' end - local info = connect() + local info = connect() if not info then return false, "Can't select card" end - print('Writing new UID ', uid) + print('Writing new UID ', uid) - local uidbytes = utils.ConvertHexToBytes(uid) - local bcc1 = bxor(bxor(bxor(uidbytes[1], uidbytes[2]), uidbytes[3]), 0x88) - local bcc2 = bxor(bxor(bxor(uidbytes[4], uidbytes[5]), uidbytes[6]), uidbytes[7]) - local block0 = string.format('%02X%02X%02X%02X', uidbytes[1], uidbytes[2], uidbytes[3], bcc1) - local block1 = string.format('%02X%02X%02X%02X', uidbytes[4], uidbytes[5], uidbytes[6], uidbytes[7]) - local block2 = string.format('%02X%02X%02X%02X', bcc2, 0x48, 0x00, 0x00) - local resp + local uidbytes = utils.ConvertHexToBytes(uid) + local bcc1 = bxor(bxor(bxor(uidbytes[1], uidbytes[2]), uidbytes[3]), 0x88) + local bcc2 = bxor(bxor(bxor(uidbytes[4], uidbytes[5]), uidbytes[6]), uidbytes[7]) + local block0 = string.format('%02X%02X%02X%02X', uidbytes[1], uidbytes[2], uidbytes[3], bcc1) + local block1 = string.format('%02X%02X%02X%02X', uidbytes[4], uidbytes[5], uidbytes[6], uidbytes[7]) + local block2 = string.format('%02X%02X%02X%02X', bcc2, 0x48, 0x00, 0x00) + local resp - resp = send('A200'..block0) - resp = send('A201'..block1) - resp = send('A202'..block2) - lib14a.disconnect() + resp = send('A200'..block0) + resp = send('A201'..block1) + resp = send('A202'..block2) + lib14a.disconnect() - if resp == '04' then - return nil, 'Failed to write new uid' - else - return true, 'Ok' - end + if resp == '04' then + return nil, 'Failed to write new uid' + else + return true, 'Ok' + end end --- -- Write VERSION data, -- make sure you have correct version data local function write_version(data) - -- version string checks - if data == nil then return nil, 'empty version string' end - if #data == 0 then return nil, 'empty version string' end - if #data ~= 16 then return nil, 'version wrong length. Should be 8 hex bytes' end + -- version string checks + if data == nil then return nil, 'empty version string' end + if #data == 0 then return nil, 'empty version string' end + if #data ~= 16 then return nil, 'version wrong length. Should be 8 hex bytes' end - local info = connect() + local info = connect() if not info then return false, "Can't select card" end - print('Writing new version', data) + print('Writing new version', data) - local b1 = data:sub(1,8) - local b2 = data:sub(9,16) - local resp - resp = send('A2FA'..b1) - resp = send('A2FB'..b2) - lib14a.disconnect() - if resp == '04' then - return nil, 'Failed to write version' - else - return true, 'Ok' - end + local b1 = data:sub(1,8) + local b2 = data:sub(9,16) + local resp + resp = send('A2FA'..b1) + resp = send('A2FB'..b2) + lib14a.disconnect() + if resp == '04' then + return nil, 'Failed to write version' + else + return true, 'Ok' + end end --- -- writen TYPE which card is based on. -- 00 = 213, 01 = 215, 02 = 216 local function write_type(data) - -- type string checks - if data == nil then return nil, 'empty type string' end - if #data == 0 then return nil, 'empty type string' end - if #data ~= 2 then return nil, 'type wrong length. Should be 1 hex byte' end + -- type string checks + if data == nil then return nil, 'empty type string' end + if #data == 0 then return nil, 'empty type string' end + if #data ~= 2 then return nil, 'type wrong length. Should be 1 hex byte' end local info = connect() if not info then return false, "Can't select card" end - print('Writing new type', data) + print('Writing new type', data) - local resp = send('A2FC'..data..'000000') - lib14a.disconnect() - if resp == '04' then - return nil, 'Failed to write type' - else - return true, 'Ok' - end + local resp = send('A2FC'..data..'000000') + lib14a.disconnect() + if resp == '04' then + return nil, 'Failed to write type' + else + return true, 'Ok' + end end --- -- Set tag type. Predefinde version data together with magic type set. @@ -376,283 +376,283 @@ end -- we only truely be three types NTAG 213,215 and 216 local function set_type(tagtype) - -- tagtype checks - if type(tagtype) == 'string' then tagtype = tonumber(tagtype, 10) end - if tagtype == nil then return nil, 'empty tagtype' end + -- tagtype checks + if type(tagtype) == 'string' then tagtype = tonumber(tagtype, 10) end + if tagtype == nil then return nil, 'empty tagtype' end - if tagtype == 1 then - print('Setting: UL-EV1 48') - write_otp('00000000') -- Setting OTP to default 00 00 00 00 - write_version('0004030101000b03') -- UL-EV1 (48) 00 04 03 01 01 00 0b 03 - write_type('00') -- based on NTAG213.. + if tagtype == 1 then + print('Setting: UL-EV1 48') + write_otp('00000000') -- Setting OTP to default 00 00 00 00 + write_version('0004030101000b03') -- UL-EV1 (48) 00 04 03 01 01 00 0b 03 + write_type('00') -- based on NTAG213.. - -- Setting UL-Ev1 default config bl 16,17 - connect() - send('a210000000FF') - send('a21100050000') + -- Setting UL-Ev1 default config bl 16,17 + connect() + send('a210000000FF') + send('a21100050000') - elseif tagtype == 2 then - print('Setting: UL-EV1 128') - write_otp('00000000') -- Setting OTP to default 00 00 00 00 - write_version('0004030101000e03') -- UL-EV1 (128) 00 04 03 01 01 00 0e 03 - write_type('01') + elseif tagtype == 2 then + print('Setting: UL-EV1 128') + write_otp('00000000') -- Setting OTP to default 00 00 00 00 + write_version('0004030101000e03') -- UL-EV1 (128) 00 04 03 01 01 00 0e 03 + write_type('01') - -- Setting UL-Ev1 default config bl 37,38 - connect() - send('a225000000FF') - send('a22600050000') - elseif tagtype == 3 then - print('Setting: NTAG 210') - write_version('0004040101000b03') -- NTAG210 00 04 04 01 01 00 0b 03 - write_type('00') + -- Setting UL-Ev1 default config bl 37,38 + connect() + send('a225000000FF') + send('a22600050000') + elseif tagtype == 3 then + print('Setting: NTAG 210') + write_version('0004040101000b03') -- NTAG210 00 04 04 01 01 00 0b 03 + write_type('00') - -- Setting NTAG210 default CC block456 - connect() - send('a203e1100600') - send('a2040300fe00') - send('a20500000000') - -- Setting cfg1/cfg2 - send('a210000000FF') - send('a21100050000') - elseif tagtype == 4 then - print('Setting: NTAG 212') - write_version('0004040101000E03') -- NTAG212 00 04 04 01 01 00 0E 03 - write_type('00') + -- Setting NTAG210 default CC block456 + connect() + send('a203e1100600') + send('a2040300fe00') + send('a20500000000') + -- Setting cfg1/cfg2 + send('a210000000FF') + send('a21100050000') + elseif tagtype == 4 then + print('Setting: NTAG 212') + write_version('0004040101000E03') -- NTAG212 00 04 04 01 01 00 0E 03 + write_type('00') - -- Setting NTAG212 default CC block456 - connect() - send('a203e1101000') - send('a2040103900a') - send('a205340300fe') - -- Setting cfg1/cfg2 - send('a225000000FF') - send('a22600050000') - elseif tagtype == 5 then - print('Setting: NTAG 213') - write_version('0004040201000F03') -- NTAG213 00 04 04 02 01 00 0f 03 - write_type('00') + -- Setting NTAG212 default CC block456 + connect() + send('a203e1101000') + send('a2040103900a') + send('a205340300fe') + -- Setting cfg1/cfg2 + send('a225000000FF') + send('a22600050000') + elseif tagtype == 5 then + print('Setting: NTAG 213') + write_version('0004040201000F03') -- NTAG213 00 04 04 02 01 00 0f 03 + write_type('00') - -- Setting NTAG213 default CC block456 - connect() - send('a203e1101200') - send('a2040103a00c') - send('a205340300fe') - -- setting cfg1/cfg2 - send('a229000000ff') - send('a22a00050000') - elseif tagtype == 6 then - print('Setting: NTAG 215') - write_version('0004040201001103') -- NTAG215 00 04 04 02 01 00 11 03 - write_type('01') + -- Setting NTAG213 default CC block456 + connect() + send('a203e1101200') + send('a2040103a00c') + send('a205340300fe') + -- setting cfg1/cfg2 + send('a229000000ff') + send('a22a00050000') + elseif tagtype == 6 then + print('Setting: NTAG 215') + write_version('0004040201001103') -- NTAG215 00 04 04 02 01 00 11 03 + write_type('01') - -- Setting NTAG215 default CC block456 - connect() - send('a203e1103e00') - send('a2040300fe00') - send('a20500000000') - -- setting cfg1/cfg2 - send('a283000000ff') - send('a28400050000') - elseif tagtype == 7 then - print('Setting: NTAG 216') - write_version('0004040201001303') -- NTAG216 00 04 04 02 01 00 13 03 - write_type('02') + -- Setting NTAG215 default CC block456 + connect() + send('a203e1103e00') + send('a2040300fe00') + send('a20500000000') + -- setting cfg1/cfg2 + send('a283000000ff') + send('a28400050000') + elseif tagtype == 7 then + print('Setting: NTAG 216') + write_version('0004040201001303') -- NTAG216 00 04 04 02 01 00 13 03 + write_type('02') - -- Setting NTAG216 default CC block456 - connect() - send('a203e1106d00') - send('a2040300fe00') - send('a20500000000') - -- setting cfg1/cfg2 - send('a2e3000000ff') - send('a2e400050000') - elseif tagtype == 8 then - print('Setting: NTAG I2C 1K') - write_version('0004040502011303') -- NTAG_I2C_1K 00 04 04 05 02 01 13 03 - write_type('02') + -- Setting NTAG216 default CC block456 + connect() + send('a203e1106d00') + send('a2040300fe00') + send('a20500000000') + -- setting cfg1/cfg2 + send('a2e3000000ff') + send('a2e400050000') + elseif tagtype == 8 then + print('Setting: NTAG I2C 1K') + write_version('0004040502011303') -- NTAG_I2C_1K 00 04 04 05 02 01 13 03 + write_type('02') - -- Setting NTAG I2C 1K default CC block456 - connect() - send('a203e1106D00') - send('a2040300fe00') - send('a20500000000') - elseif tagtype == 9 then - print('Setting: NTAG I2C 2K') - write_version('0004040502011503') -- NTAG_I2C_2K 00 04 04 05 02 01 15 03 - write_type('02') + -- Setting NTAG I2C 1K default CC block456 + connect() + send('a203e1106D00') + send('a2040300fe00') + send('a20500000000') + elseif tagtype == 9 then + print('Setting: NTAG I2C 2K') + write_version('0004040502011503') -- NTAG_I2C_2K 00 04 04 05 02 01 15 03 + write_type('02') - -- Setting NTAG I2C 2K default CC block456 - connect() - send('a203e110EA00') - send('a2040300fe00') - send('a20500000000') - elseif tagtype == 10 then - print('Setting: NTAG I2C plus 1K') - write_version('0004040502021303') -- NTAG_I2C_1K 00 04 04 05 02 02 13 03 - write_type('02') + -- Setting NTAG I2C 2K default CC block456 + connect() + send('a203e110EA00') + send('a2040300fe00') + send('a20500000000') + elseif tagtype == 10 then + print('Setting: NTAG I2C plus 1K') + write_version('0004040502021303') -- NTAG_I2C_1K 00 04 04 05 02 02 13 03 + write_type('02') - -- Setting NTAG I2C 1K default CC block456 - connect() - send('a203e1106D00') - send('a2040300fe00') - send('a20500000000') - elseif tagtype == 11 then - print('Setting: NTAG I2C plus 2K') - write_version('0004040502021503') -- NTAG_I2C_2K 00 04 04 05 02 02 15 03 - write_type('02') + -- Setting NTAG I2C 1K default CC block456 + connect() + send('a203e1106D00') + send('a2040300fe00') + send('a20500000000') + elseif tagtype == 11 then + print('Setting: NTAG I2C plus 2K') + write_version('0004040502021503') -- NTAG_I2C_2K 00 04 04 05 02 02 15 03 + write_type('02') - -- Setting NTAG I2C 2K default CC block456 - connect() - send('a203e1106D00') - send('a2040300fe00') - send('a20500000000') - elseif tagtype == 12 then - print('Setting: NTAG 213F') - write_version('0004040401000F03') -- NTAG213F 00 04 04 04 01 00 0f 03 - write_type('00') + -- Setting NTAG I2C 2K default CC block456 + connect() + send('a203e1106D00') + send('a2040300fe00') + send('a20500000000') + elseif tagtype == 12 then + print('Setting: NTAG 213F') + write_version('0004040401000F03') -- NTAG213F 00 04 04 04 01 00 0f 03 + write_type('00') - -- Setting NTAG213 default CC block456 - connect() - send('a203e1101200') - send('a2040103a00c') - send('a205340300fe') - -- setting cfg1/cfg2 - send('a229000000ff') - send('a22a00050000') - elseif tagtype == 13 then - print('Setting: NTAG 216F') - write_version('0004040401001303') -- NTAG216F 00 04 04 04 01 00 13 03 - write_type('02') + -- Setting NTAG213 default CC block456 + connect() + send('a203e1101200') + send('a2040103a00c') + send('a205340300fe') + -- setting cfg1/cfg2 + send('a229000000ff') + send('a22a00050000') + elseif tagtype == 13 then + print('Setting: NTAG 216F') + write_version('0004040401001303') -- NTAG216F 00 04 04 04 01 00 13 03 + write_type('02') - -- Setting NTAG216 default CC block456 - connect() - send('a203e1106d00') - send('a2040300fe00') - send('a20500000000') - -- setting cfg1/cfg2 - send('a2e3000000ff') - send('a2e400050000') - end + -- Setting NTAG216 default CC block456 + connect() + send('a203e1106d00') + send('a2040300fe00') + send('a20500000000') + -- setting cfg1/cfg2 + send('a2e3000000ff') + send('a2e400050000') + end - lib14a.disconnect() - if resp == '04' then - return nil, 'Failed to set type' - else - return true, 'Ok' - end + lib14a.disconnect() + if resp == '04' then + return nil, 'Failed to set type' + else + return true, 'Ok' + end end --- -- wipe tag local function wipe() - local info = connect() + local info = connect() if not info then return false, "Can't select card" end - local err, msg, resp - local cmd_empty = 'A2%02X00000000' - local cmd_cfg1 = 'A2%02X000000FF' - local cmd_cfg2 = 'A2%02X00050000' + local err, msg, resp + local cmd_empty = 'A2%02X00000000' + local cmd_cfg1 = 'A2%02X000000FF' + local cmd_cfg2 = 'A2%02X00050000' - print('Wiping tag') + print('Wiping tag') - for b = 3, 0xFB do - --configuration block 0 - if b == 0x29 or b == 0x83 or b == 0xe3 then - local cmd = (cmd_cfg1):format(b) - resp = send(cmd) - --configuration block 1 - elseif b == 0x2a or b == 0x84 or b == 0xe4 then - local cmd = (cmd_cfg2):format(b) - resp = send(cmd) - else - resp = send(cmd_empty:format(b)) - end - if resp == '04' or #resp == 0 then - io.write('\nwrote block '..b, ' failed\n') - err = true - else - io.write('.') - end - io.flush() - end - io.write('\r\n') + for b = 3, 0xFB do + --configuration block 0 + if b == 0x29 or b == 0x83 or b == 0xe3 then + local cmd = (cmd_cfg1):format(b) + resp = send(cmd) + --configuration block 1 + elseif b == 0x2a or b == 0x84 or b == 0xe4 then + local cmd = (cmd_cfg2):format(b) + resp = send(cmd) + else + resp = send(cmd_empty:format(b)) + end + if resp == '04' or #resp == 0 then + io.write('\nwrote block '..b, ' failed\n') + err = true + else + io.write('.') + end + io.flush() + end + io.write('\r\n') - lib14a.disconnect() + lib14a.disconnect() - if err then return nil, "Tag locked down, "..err_lock end + if err then return nil, "Tag locked down, "..err_lock end - print('setting default values...') + print('setting default values...') - set_password(nil) + set_password(nil) - -- set NTAG213 default values - err, msg = set_type(5) - if err == nil then return err, msg end + -- set NTAG213 default values + err, msg = set_type(5) + if err == nil then return err, msg end - --set UID - err, msg = write_uid('04112233445566') - if err == nil then return err, msg end + --set UID + err, msg = write_uid('04112233445566') + if err == nil then return err, msg end - --set pwd - err, msg = write_pwd('FFFFFFFF') - if err == nil then return err, msg end + --set pwd + err, msg = write_pwd('FFFFFFFF') + if err == nil then return err, msg end - --set pack - err, msg = write_pack('0000') - if err == nil then return err, msg end + --set pack + err, msg = write_pack('0000') + if err == nil then return err, msg end - return true, 'Ok' + return true, 'Ok' end --- -- The main entry point function main(args) - print( string.rep('--',20) ) - print( string.rep('--',20) ) - print() + print( string.rep('--',20) ) + print( string.rep('--',20) ) + print() - local err, msg + local err, msg - if #args == 0 then return help() end + if #args == 0 then return help() end - -- Read the parameters - for o, a in getopt.getopt(args, 'hck:u:t:p:a:s:o:v:w') do + -- Read the parameters + for o, a in getopt.getopt(args, 'hck:u:t:p:a:s:o:v:w') do - -- help - if o == "h" then return help() end + -- help + if o == "h" then return help() end - --key - if o == 'k' then err, msg = set_password(a) end + --key + if o == 'k' then err, msg = set_password(a) end - -- configuration - if o == "c" then err, msg = read_config() end + -- configuration + if o == "c" then err, msg = read_config() end - --wipe tag - if o == "w" then err, msg = wipe() end + --wipe tag + if o == "w" then err, msg = wipe() end - -- write uid - if o == "u" then err, msg = write_uid(a) end + -- write uid + if o == "u" then err, msg = write_uid(a) end - -- write type/version - if o == "t" then err, msg = set_type(a) end + -- write type/version + if o == "t" then err, msg = set_type(a) end - -- write pwd - if o == "p" then err, msg = write_pwd(a) end + -- write pwd + if o == "p" then err, msg = write_pwd(a) end - -- write pack - if o == "a" then err, msg = write_pack(a) end + -- write pack + if o == "a" then err, msg = write_pack(a) end - -- write signature - if o == "s" then err, msg = write_signature(a) end + -- write signature + if o == "s" then err, msg = write_signature(a) end - -- write otp - if o == "o" then err, msg = write_otp(a) end + -- write otp + if o == "o" then err, msg = write_otp(a) end - -- write version - if o == "v" then err, msg = write_version(a) end + -- write version + if o == "v" then err, msg = write_version(a) end - if err == nil then return oops(msg) end - end + if err == nil then return oops(msg) end + end end diff --git a/doc/fpga_arm_notes.md b/doc/fpga_arm_notes.md index c066b316b..6aa5b0453 100644 --- a/doc/fpga_arm_notes.md +++ b/doc/fpga_arm_notes.md @@ -65,37 +65,37 @@ ARM, send a 16bit configuration with fits the select major mode. ## ARM GPIO setup ``` - // First configure the GPIOs, and get ourselves a clock. - AT91C_BASE_PIOA->PIO_ASR = - GPIO_SSC_FRAME | - GPIO_SSC_DIN | - GPIO_SSC_DOUT | - GPIO_SSC_CLK; - AT91C_BASE_PIOA->PIO_PDR = GPIO_SSC_DOUT; + // First configure the GPIOs, and get ourselves a clock. + AT91C_BASE_PIOA->PIO_ASR = + GPIO_SSC_FRAME | + GPIO_SSC_DIN | + GPIO_SSC_DOUT | + GPIO_SSC_CLK; + AT91C_BASE_PIOA->PIO_PDR = GPIO_SSC_DOUT; - AT91C_BASE_PMC->PMC_PCER = (1 << AT91C_ID_SSC); + AT91C_BASE_PMC->PMC_PCER = (1 << AT91C_ID_SSC); - // Now set up the SSC proper, starting from a known state. - AT91C_BASE_SSC->SSC_CR = AT91C_SSC_SWRST; + // Now set up the SSC proper, starting from a known state. + AT91C_BASE_SSC->SSC_CR = AT91C_SSC_SWRST; - // RX clock comes from TX clock, RX starts on Transmit Start, - // data and frame signal is sampled on falling edge of RK - AT91C_BASE_SSC->SSC_RCMR = SSC_CLOCK_MODE_SELECT(1) | SSC_CLOCK_MODE_START(1); + // RX clock comes from TX clock, RX starts on Transmit Start, + // data and frame signal is sampled on falling edge of RK + AT91C_BASE_SSC->SSC_RCMR = SSC_CLOCK_MODE_SELECT(1) | SSC_CLOCK_MODE_START(1); - // 8, 16 or 32 bits per transfer, no loopback, MSB first, 1 transfer per sync - // pulse, no output sync - if ((FPGA_mode & FPGA_MAJOR_MODE_MASK) == FPGA_MAJOR_MODE_HF_READER && FpgaGetCurrent() == FPGA_BITSTREAM_HF) { - AT91C_BASE_SSC->SSC_RFMR = SSC_FRAME_MODE_BITS_IN_WORD(16) | AT91C_SSC_MSBF | SSC_FRAME_MODE_WORDS_PER_TRANSFER(0); - } else { - AT91C_BASE_SSC->SSC_RFMR = SSC_FRAME_MODE_BITS_IN_WORD(8) | AT91C_SSC_MSBF | SSC_FRAME_MODE_WORDS_PER_TRANSFER(0); - } + // 8, 16 or 32 bits per transfer, no loopback, MSB first, 1 transfer per sync + // pulse, no output sync + if ((FPGA_mode & FPGA_MAJOR_MODE_MASK) == FPGA_MAJOR_MODE_HF_READER && FpgaGetCurrent() == FPGA_BITSTREAM_HF) { + AT91C_BASE_SSC->SSC_RFMR = SSC_FRAME_MODE_BITS_IN_WORD(16) | AT91C_SSC_MSBF | SSC_FRAME_MODE_WORDS_PER_TRANSFER(0); + } else { + AT91C_BASE_SSC->SSC_RFMR = SSC_FRAME_MODE_BITS_IN_WORD(8) | AT91C_SSC_MSBF | SSC_FRAME_MODE_WORDS_PER_TRANSFER(0); + } - // TX clock comes from TK pin, no clock output, outputs change on rising edge of TK, - // TF (frame sync) is sampled on falling edge of TK, start TX on rising edge of TF - AT91C_BASE_SSC->SSC_TCMR = SSC_CLOCK_MODE_SELECT(2) | SSC_CLOCK_MODE_START(5); + // TX clock comes from TK pin, no clock output, outputs change on rising edge of TK, + // TF (frame sync) is sampled on falling edge of TK, start TX on rising edge of TF + AT91C_BASE_SSC->SSC_TCMR = SSC_CLOCK_MODE_SELECT(2) | SSC_CLOCK_MODE_START(5); - // tx framing is the same as the rx framing - AT91C_BASE_SSC->SSC_TFMR = AT91C_BASE_SSC->SSC_RFMR; + // tx framing is the same as the rx framing + AT91C_BASE_SSC->SSC_TFMR = AT91C_BASE_SSC->SSC_RFMR; ``` diff --git a/fpga/fpga_felica.v b/fpga/fpga_felica.v index a569e9f5b..2cdc0bdbe 100644 --- a/fpga/fpga_felica.v +++ b/fpga/fpga_felica.v @@ -154,22 +154,22 @@ wire [3:0] minor_mode = conf_word[3:0]; // 000 - HF reader hi_reader hr( - ck_1356megb, - hr_pwr_lo, hr_pwr_hi, hr_pwr_oe1, hr_pwr_oe2, hr_pwr_oe3, hr_pwr_oe4, - adc_d, hr_adc_clk, - hr_ssp_frame, hr_ssp_din, ssp_dout, hr_ssp_clk, - hr_dbg, - subcarrier_frequency, minor_mode + ck_1356megb, + hr_pwr_lo, hr_pwr_hi, hr_pwr_oe1, hr_pwr_oe2, hr_pwr_oe3, hr_pwr_oe4, + adc_d, hr_adc_clk, + hr_ssp_frame, hr_ssp_din, ssp_dout, hr_ssp_clk, + hr_dbg, + subcarrier_frequency, minor_mode ); // 001 - HF simulated tag hi_simulate hs( - ck_1356meg, + ck_1356meg, hs_pwr_lo, hs_pwr_hi, hs_pwr_oe1, hs_pwr_oe2, hs_pwr_oe3, hs_pwr_oe4, adc_d, hs_adc_clk, hs_ssp_frame, hs_ssp_din, ssp_dout, hs_ssp_clk, hs_dbg, - minor_mode + minor_mode ); // 011 - HF sniff @@ -192,9 +192,9 @@ hi_flite hfl( // 101 - HF get trace hi_get_trace gt( - ck_1356megb, - adc_d, trace_enable, major_mode, - gt_ssp_frame, gt_ssp_din, gt_ssp_clk + ck_1356megb, + adc_d, trace_enable, major_mode, + gt_ssp_frame, gt_ssp_din, gt_ssp_clk ); // Major modes: diff --git a/fpga/fpga_hf.v b/fpga/fpga_hf.v index 8659fe4e2..684f38f70 100644 --- a/fpga/fpga_hf.v +++ b/fpga/fpga_hf.v @@ -156,32 +156,32 @@ wire [3:0] minor_mode = conf_word[3:0]; // 000 - HF reader hi_reader hr( - ck_1356megb, - hr_pwr_lo, hr_pwr_hi, hr_pwr_oe1, hr_pwr_oe2, hr_pwr_oe3, hr_pwr_oe4, - adc_d, hr_adc_clk, - hr_ssp_frame, hr_ssp_din, ssp_dout, hr_ssp_clk, - hr_dbg, - subcarrier_frequency, minor_mode + ck_1356megb, + hr_pwr_lo, hr_pwr_hi, hr_pwr_oe1, hr_pwr_oe2, hr_pwr_oe3, hr_pwr_oe4, + adc_d, hr_adc_clk, + hr_ssp_frame, hr_ssp_din, ssp_dout, hr_ssp_clk, + hr_dbg, + subcarrier_frequency, minor_mode ); // 001 - HF simulated tag hi_simulate hs( - ck_1356meg, + ck_1356meg, hs_pwr_lo, hs_pwr_hi, hs_pwr_oe1, hs_pwr_oe2, hs_pwr_oe3, hs_pwr_oe4, adc_d, hs_adc_clk, hs_ssp_frame, hs_ssp_din, ssp_dout, hs_ssp_clk, hs_dbg, - minor_mode + minor_mode ); // 010 - HF ISO14443-A hi_iso14443a hisn( - ck_1356meg, + ck_1356meg, hisn_pwr_lo, hisn_pwr_hi, hisn_pwr_oe1, hisn_pwr_oe2, hisn_pwr_oe3, hisn_pwr_oe4, adc_d, hisn_adc_clk, hisn_ssp_frame, hisn_ssp_din, ssp_dout, hisn_ssp_clk, hisn_dbg, - minor_mode + minor_mode ); // 011 - HF sniff @@ -206,9 +206,9 @@ hi_flite hfl( // 101 - HF get trace hi_get_trace gt( - ck_1356megb, - adc_d, trace_enable, major_mode, - gt_ssp_frame, gt_ssp_din, gt_ssp_clk + ck_1356megb, + adc_d, trace_enable, major_mode, + gt_ssp_frame, gt_ssp_din, gt_ssp_clk ); // Major modes: diff --git a/fpga/hi_get_trace.v b/fpga/hi_get_trace.v index aae4054cf..03a96af96 100644 --- a/fpga/hi_get_trace.v +++ b/fpga/hi_get_trace.v @@ -10,25 +10,25 @@ module hi_get_trace( ); input ck_1356megb; input [7:0] adc_d; - input trace_enable; - input [2:0] major_mode; + input trace_enable; + input [2:0] major_mode; output ssp_frame, ssp_din, ssp_clk; // clock divider reg [6:0] clock_cnt; always @(negedge ck_1356megb) begin - clock_cnt <= clock_cnt + 1; + clock_cnt <= clock_cnt + 1; end // sample at 13,56MHz / 8. The highest signal frequency (subcarrier) is 848,5kHz, i.e. in this case we oversample by a factor of 2 reg [2:0] sample_clock; always @(negedge ck_1356megb) begin - if (sample_clock == 3'd7) - sample_clock <= 3'd0; - else - sample_clock <= sample_clock + 1; + if (sample_clock == 3'd7) + sample_clock <= 3'd0; + else + sample_clock <= sample_clock + 1; end @@ -39,65 +39,65 @@ reg write_enable1; reg write_enable2; always @(negedge ck_1356megb) begin - previous_major_mode <= major_mode; - if (major_mode == `FPGA_MAJOR_MODE_HF_GET_TRACE) - begin - write_enable1 <= 1'b0; - write_enable2 <= 1'b0; - if (previous_major_mode != `FPGA_MAJOR_MODE_HF_GET_TRACE) // just switched into GET_TRACE mode - addr <= start_addr; - if (clock_cnt == 7'd0) - begin - if (addr == 12'd3071) - addr <= 12'd0; - else - addr <= addr + 1; - end - end - else if (major_mode != `FPGA_MAJOR_MODE_OFF) - begin - if (trace_enable) - begin - if (addr[11] == 1'b0) - begin - write_enable1 <= 1'b1; - write_enable2 <= 1'b0; - end - else - begin - write_enable1 <= 1'b0; - write_enable2 <= 1'b1; - end - if (sample_clock == 3'b000) - begin - if (addr == 12'd3071) - begin - addr <= 12'd0; - write_enable1 <= 1'b1; - write_enable2 <= 1'b0; - end - else - begin - addr <= addr + 1; - end - end - end - else - begin - write_enable1 <= 1'b0; - write_enable2 <= 1'b0; - start_addr <= addr; - end - end - else // major_mode == `FPGA_MAJOR_MODE_OFF - begin - write_enable1 <= 1'b0; - write_enable2 <= 1'b0; - if (previous_major_mode != `FPGA_MAJOR_MODE_OFF && previous_major_mode != `FPGA_MAJOR_MODE_HF_GET_TRACE) // just switched off + previous_major_mode <= major_mode; + if (major_mode == `FPGA_MAJOR_MODE_HF_GET_TRACE) + begin + write_enable1 <= 1'b0; + write_enable2 <= 1'b0; + if (previous_major_mode != `FPGA_MAJOR_MODE_HF_GET_TRACE) // just switched into GET_TRACE mode + addr <= start_addr; + if (clock_cnt == 7'd0) + begin + if (addr == 12'd3071) + addr <= 12'd0; + else + addr <= addr + 1; + end + end + else if (major_mode != `FPGA_MAJOR_MODE_OFF) + begin + if (trace_enable) + begin + if (addr[11] == 1'b0) + begin + write_enable1 <= 1'b1; + write_enable2 <= 1'b0; + end + else + begin + write_enable1 <= 1'b0; + write_enable2 <= 1'b1; + end + if (sample_clock == 3'b000) + begin + if (addr == 12'd3071) begin - start_addr <= addr; + addr <= 12'd0; + write_enable1 <= 1'b1; + write_enable2 <= 1'b0; end - end + else + begin + addr <= addr + 1; + end + end + end + else + begin + write_enable1 <= 1'b0; + write_enable2 <= 1'b0; + start_addr <= addr; + end + end + else // major_mode == `FPGA_MAJOR_MODE_OFF + begin + write_enable1 <= 1'b0; + write_enable2 <= 1'b0; + if (previous_major_mode != `FPGA_MAJOR_MODE_OFF && previous_major_mode != `FPGA_MAJOR_MODE_HF_GET_TRACE) // just switched off + begin + start_addr <= addr; + end + end end @@ -108,20 +108,20 @@ reg [7:0] ram2 [1023:0]; // 1024 u8 always @(negedge ck_1356megb) begin - if (write_enable1) - begin - ram1[addr[10:0]] <= adc_d; - D_out1 <= adc_d; - end - else - D_out1 <= ram1[addr[10:0]]; - if (write_enable2) + if (write_enable1) + begin + ram1[addr[10:0]] <= adc_d; + D_out1 <= adc_d; + end + else + D_out1 <= ram1[addr[10:0]]; + if (write_enable2) begin - ram2[addr[9:0]] <= adc_d; - D_out2 <= adc_d; - end - else - D_out2 <= ram2[addr[9:0]]; + ram2[addr[9:0]] <= adc_d; + D_out2 <= adc_d; + end + else + D_out2 <= ram2[addr[9:0]]; end @@ -133,27 +133,27 @@ reg [7:0] shift_out; always @(negedge ck_1356megb) begin if (clock_cnt[3:0] == 4'd0) // update shift register every 16 clock cycles - begin - if (clock_cnt[6:4] == 3'd0) // either load new value - begin + begin + if (clock_cnt[6:4] == 3'd0) // either load new value + begin if (addr[11] == 1'b0) shift_out <= D_out1; else shift_out <= D_out2; - end - else + end + else begin // or shift left shift_out[7:1] <= shift_out[6:0]; end - end + end - ssp_clk <= ~clock_cnt[3]; // ssp_clk frequency = 13,56MHz / 16 = 847,5 kHz + ssp_clk <= ~clock_cnt[3]; // ssp_clk frequency = 13,56MHz / 16 = 847,5 kHz - if (clock_cnt[6:4] == 3'b000) // set ssp_frame for 0...31 - ssp_frame <= 1'b1; - else - ssp_frame <= 1'b0; + if (clock_cnt[6:4] == 3'b000) // set ssp_frame for 0...31 + ssp_frame <= 1'b1; + else + ssp_frame <= 1'b0; end diff --git a/fpga/hi_iso14443a.v b/fpga/hi_iso14443a.v index 21aa118d2..98a2d3930 100644 --- a/fpga/hi_iso14443a.v +++ b/fpga/hi_iso14443a.v @@ -142,7 +142,7 @@ begin end // adjust internal timer counter if necessary: - if (negedge_cnt[3:0] == 4'd13 && (mod_type == `FPGA_HF_ISO14443A_SNIFFER || mod_type == `FPGA_HF_ISO14443A_TAGSIM_LISTEN) && deep_modulation) + if (negedge_cnt[3:0] == 4'd13 && (mod_type == `FPGA_HF_ISO14443A_SNIFFER || mod_type == `FPGA_HF_ISO14443A_TAGSIM_LISTEN) && deep_modulation) begin if (reader_falling_edge_time == 4'd1) // reader signal changes right after sampling. Better sample earlier next time. begin @@ -176,7 +176,7 @@ reg [3:0] mod_detect_reset_time; always @(negedge adc_clk) begin - if (mod_type == `FPGA_HF_ISO14443A_READER_LISTEN) + if (mod_type == `FPGA_HF_ISO14443A_READER_LISTEN) // (our) reader signal changes at negedge_cnt[3:0]=9, tag response expected to start n*16+4 ticks later, further delayed by // 3 ticks ADC conversion. The maximum filter output (edge detected) will be detected after subcarrier zero crossing (+7 ticks). // To allow some timing variances, we want to have the maximum filter outputs well within the detection window, i.e. @@ -186,7 +186,7 @@ begin mod_detect_reset_time <= 4'd4; end else - if (mod_type == `FPGA_HF_ISO14443A_SNIFFER) + if (mod_type == `FPGA_HF_ISO14443A_SNIFFER) begin // detect a rising edge of reader's signal and sync modulation detector to the tag's answer: if (~pre_after_hysteresis && after_hysteresis && deep_modulation) @@ -354,7 +354,7 @@ reg mod_sig_coil; always @(negedge adc_clk) begin - if (mod_type == `FPGA_HF_ISO14443A_TAGSIM_MOD) // need to take care of proper fdt timing + if (mod_type == `FPGA_HF_ISO14443A_TAGSIM_MOD) // need to take care of proper fdt timing begin if(fdt_counter == `FDT_COUNT) begin @@ -429,7 +429,7 @@ always @(negedge adc_clk) begin if (negedge_cnt[5:0] == 6'd63) // fill the buffer begin - if (mod_type == `FPGA_HF_ISO14443A_SNIFFER) + if (mod_type == `FPGA_HF_ISO14443A_SNIFFER) begin if(deep_modulation) // a reader is sending (or there's no field at all) begin @@ -446,7 +446,7 @@ begin end end - if(negedge_cnt[2:0] == 3'b000 && mod_type == `FPGA_HF_ISO14443A_SNIFFER) // shift at double speed + if(negedge_cnt[2:0] == 3'b000 && mod_type == `FPGA_HF_ISO14443A_SNIFFER) // shift at double speed begin // Don't shift if we just loaded new data, obviously. if(negedge_cnt[5:0] != 6'd0) @@ -455,7 +455,7 @@ begin end end - if(negedge_cnt[3:0] == 4'b0000 && mod_type != `FPGA_HF_ISO14443A_SNIFFER) + if(negedge_cnt[3:0] == 4'b0000 && mod_type != `FPGA_HF_ISO14443A_SNIFFER) begin // Don't shift if we just loaded new data, obviously. if(negedge_cnt[6:0] != 7'd0) @@ -475,8 +475,8 @@ reg ssp_frame; always @(negedge adc_clk) begin - if(mod_type == `FPGA_HF_ISO14443A_SNIFFER) - // FPGA_HF_ISO14443A_SNIFFER mode (ssp_clk = adc_clk / 8, ssp_frame clock = adc_clk / 64)): + if(mod_type == `FPGA_HF_ISO14443A_SNIFFER) + // FPGA_HF_ISO14443A_SNIFFER mode (ssp_clk = adc_clk / 8, ssp_frame clock = adc_clk / 64)): begin if(negedge_cnt[2:0] == 3'd0) ssp_clk <= 1'b1; @@ -496,7 +496,7 @@ begin if(negedge_cnt[3:0] == 4'd8) ssp_clk <= 1'b0; - if(negedge_cnt[6:0] == 7'd7) // ssp_frame rising edge indicates start of frame, sampled on falling edge of ssp_clk + if(negedge_cnt[6:0] == 7'd7) // ssp_frame rising edge indicates start of frame, sampled on falling edge of ssp_clk ssp_frame <= 1'b1; if(negedge_cnt[6:0] == 7'd23) ssp_frame <= 1'b0; @@ -516,23 +516,23 @@ begin if(negedge_cnt[3:0] == 4'd0) begin // What do we communicate to the ARM - if(mod_type == `FPGA_HF_ISO14443A_TAGSIM_LISTEN) + if(mod_type == `FPGA_HF_ISO14443A_TAGSIM_LISTEN) sendbit = after_hysteresis; - else if(mod_type == `FPGA_HF_ISO14443A_TAGSIM_MOD) + else if(mod_type == `FPGA_HF_ISO14443A_TAGSIM_MOD) /* if(fdt_counter > 11'd772) sendbit = mod_sig_coil; // huh? else */ sendbit = fdt_indicator; - else if (mod_type == `FPGA_HF_ISO14443A_READER_LISTEN) + else if (mod_type == `FPGA_HF_ISO14443A_READER_LISTEN) sendbit = curbit; else sendbit = 1'b0; end - if(mod_type == `FPGA_HF_ISO14443A_SNIFFER) + if(mod_type == `FPGA_HF_ISO14443A_SNIFFER) // send sampled reader and tag data: bit_to_arm = to_arm[7]; - else if (mod_type == `FPGA_HF_ISO14443A_TAGSIM_MOD && fdt_elapsed && temp_buffer_reset) + else if (mod_type == `FPGA_HF_ISO14443A_TAGSIM_MOD && fdt_elapsed && temp_buffer_reset) // send timing information: bit_to_arm = to_arm[7]; else diff --git a/fpga/hi_reader.v b/fpga/hi_reader.v index b90f9a99c..c5ffa7b85 100644 --- a/fpga/hi_reader.v +++ b/fpga/hi_reader.v @@ -19,7 +19,7 @@ module hi_reader( output ssp_frame, ssp_din, ssp_clk; output dbg; input [1:0] subcarrier_frequency; - input [3:0] minor_mode; + input [3:0] minor_mode; assign adc_clk = ck_1356meg; // sample frequency is 13,56 MHz @@ -58,7 +58,7 @@ end reg [5:0] corr_i_cnt; always @(negedge adc_clk) begin - corr_i_cnt <= corr_i_cnt + 1; + corr_i_cnt <= corr_i_cnt + 1; end @@ -83,28 +83,28 @@ reg [12:0] min_ci_cq_2; // min_ci_cq / 2 always @(*) begin - if (corr_i_accum[13] == 1'b0) - abs_ci <= corr_i_accum; - else - abs_ci <= -corr_i_accum; + if (corr_i_accum[13] == 1'b0) + abs_ci <= corr_i_accum; + else + abs_ci <= -corr_i_accum; - if (corr_q_accum[13] == 1'b0) - abs_cq <= corr_q_accum; - else - abs_cq <= -corr_q_accum; + if (corr_q_accum[13] == 1'b0) + abs_cq <= corr_q_accum; + else + abs_cq <= -corr_q_accum; - if (abs_ci > abs_cq) - begin - max_ci_cq <= abs_ci; - min_ci_cq_2 <= abs_cq / 2; - end - else - begin - max_ci_cq <= abs_cq; - min_ci_cq_2 <= abs_ci / 2; - end + if (abs_ci > abs_cq) + begin + max_ci_cq <= abs_ci; + min_ci_cq_2 <= abs_cq / 2; + end + else + begin + max_ci_cq <= abs_cq; + min_ci_cq_2 <= abs_ci / 2; + end - corr_amplitude <= max_ci_cq + min_ci_cq_2; + corr_amplitude <= max_ci_cq + min_ci_cq_2; end @@ -115,21 +115,21 @@ reg subcarrier_Q; always @(*) begin - if (subcarrier_frequency == `FPGA_HF_READER_SUBCARRIER_848_KHZ) - begin - subcarrier_I = ~corr_i_cnt[3]; - subcarrier_Q = ~(corr_i_cnt[3] ^ corr_i_cnt[2]); - end - else if (subcarrier_frequency == `FPGA_HF_READER_SUBCARRIER_212_KHZ) - begin - subcarrier_I = ~corr_i_cnt[5]; - subcarrier_Q = ~(corr_i_cnt[5] ^ corr_i_cnt[4]); - end - else - begin // 424 kHz - subcarrier_I = ~corr_i_cnt[4]; - subcarrier_Q = ~(corr_i_cnt[4] ^ corr_i_cnt[3]); - end + if (subcarrier_frequency == `FPGA_HF_READER_SUBCARRIER_848_KHZ) + begin + subcarrier_I = ~corr_i_cnt[3]; + subcarrier_Q = ~(corr_i_cnt[3] ^ corr_i_cnt[2]); + end + else if (subcarrier_frequency == `FPGA_HF_READER_SUBCARRIER_212_KHZ) + begin + subcarrier_I = ~corr_i_cnt[5]; + subcarrier_Q = ~(corr_i_cnt[5] ^ corr_i_cnt[4]); + end + else + begin // 424 kHz + subcarrier_I = ~corr_i_cnt[4]; + subcarrier_Q = ~(corr_i_cnt[4] ^ corr_i_cnt[3]); + end end @@ -143,64 +143,64 @@ begin begin if (minor_mode == `FPGA_HF_READER_MODE_SNIFF_AMPLITUDE) begin - // send amplitude plus 2 bits reader signal - corr_i_out <= corr_amplitude[13:6]; - corr_q_out <= {corr_amplitude[5:0], after_hysteresis_prev_prev, after_hysteresis_prev}; - end - else if (minor_mode == `FPGA_HF_READER_MODE_SNIFF_IQ) - begin + // send amplitude plus 2 bits reader signal + corr_i_out <= corr_amplitude[13:6]; + corr_q_out <= {corr_amplitude[5:0], after_hysteresis_prev_prev, after_hysteresis_prev}; + end + else if (minor_mode == `FPGA_HF_READER_MODE_SNIFF_IQ) + begin - // Send 7 most significant bits of in phase tag signal (signed), plus 1 bit reader signal - if (corr_i_accum[13:11] == 3'b000 || corr_i_accum[13:11] == 3'b111) - corr_i_out <= {corr_i_accum[11:5], after_hysteresis_prev_prev}; - else // truncate to maximum value - if (corr_i_accum[13] == 1'b0) - corr_i_out <= {7'b0111111, after_hysteresis_prev_prev}; - else - corr_i_out <= {7'b1000000, after_hysteresis_prev_prev}; + // Send 7 most significant bits of in phase tag signal (signed), plus 1 bit reader signal + if (corr_i_accum[13:11] == 3'b000 || corr_i_accum[13:11] == 3'b111) + corr_i_out <= {corr_i_accum[11:5], after_hysteresis_prev_prev}; + else // truncate to maximum value + if (corr_i_accum[13] == 1'b0) + corr_i_out <= {7'b0111111, after_hysteresis_prev_prev}; + else + corr_i_out <= {7'b1000000, after_hysteresis_prev_prev}; - // Send 7 most significant bits of quadrature phase tag signal (signed), plus 1 bit reader signal - if (corr_q_accum[13:11] == 3'b000 || corr_q_accum[13:11] == 3'b111) - corr_q_out <= {corr_q_accum[11:5], after_hysteresis_prev}; - else // truncate to maximum value - if (corr_q_accum[13] == 1'b0) - corr_q_out <= {7'b0111111, after_hysteresis_prev}; - else - corr_q_out <= {7'b1000000, after_hysteresis_prev}; - end + // Send 7 most significant bits of quadrature phase tag signal (signed), plus 1 bit reader signal + if (corr_q_accum[13:11] == 3'b000 || corr_q_accum[13:11] == 3'b111) + corr_q_out <= {corr_q_accum[11:5], after_hysteresis_prev}; + else // truncate to maximum value + if (corr_q_accum[13] == 1'b0) + corr_q_out <= {7'b0111111, after_hysteresis_prev}; + else + corr_q_out <= {7'b1000000, after_hysteresis_prev}; + end else if (minor_mode == `FPGA_HF_READER_MODE_RECEIVE_AMPLITUDE) begin - // send amplitude - corr_i_out <= {2'b00, corr_amplitude[13:8]}; - corr_q_out <= corr_amplitude[7:0]; - end - else if (minor_mode == `FPGA_HF_READER_MODE_RECEIVE_IQ) - begin + // send amplitude + corr_i_out <= {2'b00, corr_amplitude[13:8]}; + corr_q_out <= corr_amplitude[7:0]; + end + else if (minor_mode == `FPGA_HF_READER_MODE_RECEIVE_IQ) + begin - // Send 8 bits of in phase tag signal - if (corr_i_accum[13:11] == 3'b000 || corr_i_accum[13:11] == 3'b111) - corr_i_out <= corr_i_accum[11:4]; - else // truncate to maximum value - if (corr_i_accum[13] == 1'b0) - corr_i_out <= 8'b01111111; - else - corr_i_out <= 8'b10000000; + // Send 8 bits of in phase tag signal + if (corr_i_accum[13:11] == 3'b000 || corr_i_accum[13:11] == 3'b111) + corr_i_out <= corr_i_accum[11:4]; + else // truncate to maximum value + if (corr_i_accum[13] == 1'b0) + corr_i_out <= 8'b01111111; + else + corr_i_out <= 8'b10000000; - // Send 8 bits of quadrature phase tag signal - if (corr_q_accum[13:11] == 3'b000 || corr_q_accum[13:11] == 3'b111) - corr_q_out <= corr_q_accum[11:4]; - else // truncate to maximum value - if (corr_q_accum[13] == 1'b0) - corr_q_out <= 8'b01111111; - else - corr_q_out <= 8'b10000000; - end + // Send 8 bits of quadrature phase tag signal + if (corr_q_accum[13:11] == 3'b000 || corr_q_accum[13:11] == 3'b111) + corr_q_out <= corr_q_accum[11:4]; + else // truncate to maximum value + if (corr_q_accum[13] == 1'b0) + corr_q_out <= 8'b01111111; + else + corr_q_out <= 8'b10000000; + end - // for each Q/I pair report two reader signal samples when sniffing. Store the 1st. - after_hysteresis_prev_prev <= after_hysteresis; + // for each Q/I pair report two reader signal samples when sniffing. Store the 1st. + after_hysteresis_prev_prev <= after_hysteresis; - // Initialize next correlation. - // Both I and Q reference signals are high when corr_i_nct == 0. Therefore need to accumulate. + // Initialize next correlation. + // Both I and Q reference signals are high when corr_i_nct == 0. Therefore need to accumulate. corr_i_accum <= $signed({1'b0, adc_d}); corr_q_accum <= $signed({1'b0, adc_d}); end @@ -217,14 +217,14 @@ begin corr_q_accum <= corr_q_accum - $signed({1'b0, adc_d}); end - // for each Q/I pair report two reader signal samples when sniffing. Store the 2nd. + // for each Q/I pair report two reader signal samples when sniffing. Store the 2nd. if (corr_i_cnt == 6'd32) after_hysteresis_prev <= after_hysteresis; // Then the result from last time is serialized and send out to the ARM. // We get one report each cycle, and each report is 16 bits, so the // ssp_clk should be the adc_clk divided by 64/16 = 4. - // ssp_clk frequency = 13,56MHz / 4 = 3.39MHz + // ssp_clk frequency = 13,56MHz / 4 = 3.39MHz if (corr_i_cnt[1:0] == 2'b00) begin @@ -261,8 +261,8 @@ begin if (corr_i_cnt[1:0] == 2'b10) ssp_clk <= 1'b0; - // set ssp_frame signal for corr_i_cnt = 1..3 - // (send one frame with 16 Bits) + // set ssp_frame signal for corr_i_cnt = 1..3 + // (send one frame with 16 Bits) if (corr_i_cnt == 6'd1) ssp_frame <= 1'b1; @@ -280,11 +280,11 @@ reg [3:0] jam_counter; always @(negedge adc_clk) begin - if (corr_i_cnt == 6'd0) - begin - jam_counter <= jam_counter + 1; - jam_signal <= jam_counter[1] ^ jam_counter[3]; - end + if (corr_i_cnt == 6'd0) + begin + jam_counter <= jam_counter + 1; + jam_signal <= jam_counter[1] ^ jam_counter[3]; + end end // Antenna drivers @@ -303,22 +303,22 @@ begin pwr_oe4 = 1'b0; end else if (minor_mode == `FPGA_HF_READER_MODE_SEND_JAM) - begin + begin pwr_hi = ck_1356meg & jam_signal; pwr_oe4 = 1'b0; - end - else if (minor_mode == `FPGA_HF_READER_MODE_SNIFF_IQ - || minor_mode == `FPGA_HF_READER_MODE_SNIFF_AMPLITUDE - || minor_mode == `FPGA_HF_READER_MODE_SNIFF_PHASE) - begin // all off - pwr_hi = 1'b0; - pwr_oe4 = 1'b0; - end - else // receiving from tag - begin - pwr_hi = ck_1356meg; - pwr_oe4 = 1'b0; - end + end + else if (minor_mode == `FPGA_HF_READER_MODE_SNIFF_IQ + || minor_mode == `FPGA_HF_READER_MODE_SNIFF_AMPLITUDE + || minor_mode == `FPGA_HF_READER_MODE_SNIFF_PHASE) + begin // all off + pwr_hi = 1'b0; + pwr_oe4 = 1'b0; + end + else // receiving from tag + begin + pwr_hi = ck_1356meg; + pwr_oe4 = 1'b0; + end end // always on diff --git a/fpga/hi_simulate.v b/fpga/hi_simulate.v index 87a3aa39e..33a6cf26c 100644 --- a/fpga/hi_simulate.v +++ b/fpga/hi_simulate.v @@ -35,8 +35,8 @@ module hi_simulate( // Power amp goes between LOW and tri-state, so pwr_hi (and pwr_lo) can // always be low. -assign pwr_hi = 1'b0; // HF antenna connected to GND -assign pwr_lo = 1'b0; // LF antenna connected to GND +assign pwr_hi = 1'b0; // HF antenna connected to GND +assign pwr_lo = 1'b0; // LF antenna connected to GND // This one is all LF, so doesn't matter assign pwr_oe2 = 1'b0; @@ -53,7 +53,7 @@ begin if (& adc_d[7:5]) after_hysteresis <= 1'b1; // if (adc_d >= 224) else if (~(| adc_d[7:5])) after_hysteresis <= 1'b0; // if (adc_d <= 31) - if (adc_d >= 224) + if (adc_d >= 224) begin has_been_low_for <= 12'd0; end @@ -65,9 +65,9 @@ begin after_hysteresis <= 1'b1; end else - begin + begin has_been_low_for <= has_been_low_for + 1; - end + end end end @@ -100,20 +100,20 @@ end reg ssp_frame; always @(negedge adc_clk) begin - if (mod_type == `FPGA_HF_SIMULATOR_MODULATE_212K) - begin - if (ssp_clk_divider[8:5] == 4'd1) - ssp_frame <= 1'b1; - if (ssp_clk_divider[8:5] == 4'd5) - ssp_frame <= 1'b0; - end + if (mod_type == `FPGA_HF_SIMULATOR_MODULATE_212K) + begin + if (ssp_clk_divider[8:5] == 4'd1) + ssp_frame <= 1'b1; + if (ssp_clk_divider[8:5] == 4'd5) + ssp_frame <= 1'b0; + end else - begin - if (ssp_clk_divider[7:4] == 4'd1) - ssp_frame <= 1'b1; - if (ssp_clk_divider[7:4] == 4'd5) - ssp_frame <= 1'b0; - end + begin + if (ssp_clk_divider[7:4] == 4'd1) + ssp_frame <= 1'b1; + if (ssp_clk_divider[7:4] == 4'd5) + ssp_frame <= 1'b0; + end end @@ -143,6 +143,6 @@ always @(*) assign pwr_oe1 = 1'b0; // 33 Ohms Load assign pwr_oe4 = modulating_carrier; // 33 Ohms Load // This one is always on, so that we can watch the carrier. -assign pwr_oe3 = 1'b0; // 10k Load +assign pwr_oe3 = 1'b0; // 10k Load endmodule diff --git a/tools/hitag2crack/common/hitagcrypto.c b/tools/hitag2crack/common/hitagcrypto.c index 03341f216..a4b63c366 100644 --- a/tools/hitag2crack/common/hitagcrypto.c +++ b/tools/hitag2crack/common/hitagcrypto.c @@ -188,7 +188,7 @@ HITAG 2 256 Bit total memory Read/Write 8 pages of 32 bits, inc UID (32), - secret key (64), password (24), config (8) + secret key (64), password (24), config (8) HITAG S 32 32 bits Unique Identifier Read Only HITAG S 256 256 bits total memory Read/Write @@ -227,9 +227,9 @@ static uint32_t hitag2_crypt(uint64_t x); static uint32_t hitag2_crypt(uint64_t x) { - const uint32_t ht2_function4a = 0x2C79; // 0010 1100 0111 1001 - const uint32_t ht2_function4b = 0x6671; // 0110 0110 0111 0001 - const uint32_t ht2_function5c = 0x7907287B; // 0111 1001 0000 0111 0010 1000 0111 1011 + const uint32_t ht2_function4a = 0x2C79; // 0010 1100 0111 1001 + const uint32_t ht2_function4b = 0x6671; // 0110 0110 0111 0001 + const uint32_t ht2_function5c = 0x7907287B; // 0111 1001 0000 0111 0010 1000 0111 1011 uint32_t bitindex; bitindex = (ht2_function4a >> pickbits2_2(x, 1, 4)) & 1; diff --git a/tools/hitag2crack/common/hitagcrypto.h b/tools/hitag2crack/common/hitagcrypto.h index 274d3d82c..76350eb7c 100644 --- a/tools/hitag2crack/common/hitagcrypto.h +++ b/tools/hitag2crack/common/hitagcrypto.h @@ -132,7 +132,7 @@ #ifndef HITAGCRYPTO_H -#define HITAGCRYPTO_H +#define HITAGCRYPTO_H #include @@ -163,5 +163,5 @@ void hitag2_init(Hitag_State *pstate, uint64_t sharedkey, uint32_t serialnum, ui uint32_t hitag2_nstep(Hitag_State *pstate, uint32_t steps); -#endif /* HITAGCRYPTO_H */ +#endif /* HITAGCRYPTO_H */ diff --git a/tools/mf_nonce_brute/iso14443crc.h b/tools/mf_nonce_brute/iso14443crc.h index e9a82d521..5dbe125f4 100644 --- a/tools/mf_nonce_brute/iso14443crc.h +++ b/tools/mf_nonce_brute/iso14443crc.h @@ -13,9 +13,9 @@ // Routines to compute the CRCs (two different flavours, just for confusion) // required for ISO 14443, swiped directly from the spec. //----------------------------------------------------------------------------- -#define CRC_14443_A 0x6363 /* ITU-V.41 */ -#define CRC_14443_B 0xFFFF /* ISO/IEC 13239 (formerly ISO/IEC 3309) */ -#define CRC_ICLASS 0xE012 /* ICLASS PREFIX */ +#define CRC_14443_A 0x6363 /* ITU-V.41 */ +#define CRC_14443_B 0xFFFF /* ISO/IEC 13239 (formerly ISO/IEC 3309) */ +#define CRC_ICLASS 0xE012 /* ICLASS PREFIX */ void ComputeCrc14443(int CrcType, const unsigned char *Data, int Length, diff --git a/tools/mf_nonce_brute/protocol.h b/tools/mf_nonce_brute/protocol.h index 4f7f8b7e0..50784392f 100644 --- a/tools/mf_nonce_brute/protocol.h +++ b/tools/mf_nonce_brute/protocol.h @@ -4,8 +4,8 @@ #define ISO14443A_CMD_READBLOCK 0x30 #define ISO14443A_CMD_WRITEBLOCK 0xA0 -#define MIFARE_AUTH_KEYA 0x60 -#define MIFARE_AUTH_KEYB 0x61 +#define MIFARE_AUTH_KEYA 0x60 +#define MIFARE_AUTH_KEYB 0x61 #define MIFARE_CMD_INC 0xC0 #define MIFARE_CMD_DEC 0xC1 #define MIFARE_CMD_RESTORE 0xC2 diff --git a/tools/mf_nonce_brute/sleep.c b/tools/mf_nonce_brute/sleep.c index 0dd4c089d..2a98b10b8 100644 --- a/tools/mf_nonce_brute/sleep.c +++ b/tools/mf_nonce_brute/sleep.c @@ -10,7 +10,7 @@ #ifndef _WIN32 -#define _POSIX_C_SOURCE 199309L +#define _POSIX_C_SOURCE 199309L #include "sleep.h" #include #include From 26f7f07120720f945b15370d82189ffb6170975c Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Tue, 6 Oct 2020 21:35:40 +0200 Subject: [PATCH 0918/1047] mem leak out of bounds --- client/src/cmdhfmfhard.c | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/client/src/cmdhfmfhard.c b/client/src/cmdhfmfhard.c index 3d378322e..cea704d7f 100644 --- a/client/src/cmdhfmfhard.c +++ b/client/src/cmdhfmfhard.c @@ -143,12 +143,10 @@ static inline void clear_bitarray24(uint32_t *bitarray) { memset(bitarray, 0x00, sizeof(uint32_t) * (1 << 19)); } - static inline void set_bitarray24(uint32_t *bitarray) { memset(bitarray, 0xff, sizeof(uint32_t) * (1 << 19)); } - static inline void set_bit24(uint32_t *bitarray, uint32_t index) { bitarray[index >> 5] |= 0x80000000 >> (index & 0x0000001f); } @@ -157,36 +155,46 @@ static inline uint32_t test_bit24(uint32_t *bitarray, uint32_t index) { return bitarray[index >> 5] & (0x80000000 >> (index & 0x0000001f)); } - static inline uint32_t next_state(uint32_t *bitarray, uint32_t state) { - if (++state == 1 << 24) return 1 << 24; + if (++state == (1 << 24)) { + return (1 << 24); + } + uint32_t index = state >> 5; - uint_fast8_t bit = state & 0x1f; + uint_fast8_t bit = state & 0x1F; uint32_t line = bitarray[index] << bit; - while (bit <= 0x1f) { - if (line & 0x80000000) return state; + + while (bit <= 0x1F) { + if (line & 0x80000000) { + return state; + } state++; bit++; line <<= 1; } index++; - while (bitarray[index] == 0x00000000 && state < 1 << 24) { + while (state < (1 << 24) && bitarray[index] == 0x00000000 ) { index++; state += 0x20; } - if (state >= 1 << 24) return 1 << 24; + + if (state >= (1 << 24)) { + return (1 << 24); + } #if defined __GNUC__ return state + __builtin_clz(bitarray[index]); #else bit = 0x00; line = bitarray[index]; - while (bit <= 0x1f) { - if (line & 0x80000000) return state; + while (bit <= 0x1F) { + if (line & 0x80000000) { + return state; + } state++; bit++; line <<= 1; } - return 1 << 24; + return (1 << 24); #endif } From f856087aa96adce186427a7ef6bd6bb525215786 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Tue, 6 Oct 2020 21:45:32 +0200 Subject: [PATCH 0919/1047] move jansson files from client --- client/CMakeLists.txt | 1 - client/Makefile | 2 +- client/deps/jansson/Makefile | 3 ++- client/{src => deps/jansson}/jansson_path.c | 4 +--- client/{src => deps/jansson}/jansson_path.h | 0 5 files changed, 4 insertions(+), 6 deletions(-) rename client/{src => deps/jansson}/jansson_path.c (99%) rename client/{src => deps/jansson}/jansson_path.h (100%) diff --git a/client/CMakeLists.txt b/client/CMakeLists.txt index dd4811435..a71e5715d 100644 --- a/client/CMakeLists.txt +++ b/client/CMakeLists.txt @@ -283,7 +283,6 @@ set (TARGET_SOURCES ${PM3_ROOT}/client/src/fileutils.c ${PM3_ROOT}/client/src/flash.c ${PM3_ROOT}/client/src/graph.c - ${PM3_ROOT}/client/src/jansson_path.c ${PM3_ROOT}/client/src/preferences.c ${PM3_ROOT}/client/src/pm3_binlib.c ${PM3_ROOT}/client/src/pm3_bitlib.c diff --git a/client/Makefile b/client/Makefile index ac51cb1bd..3477c560a 100644 --- a/client/Makefile +++ b/client/Makefile @@ -272,6 +272,7 @@ PM3CFLAGS = $(CFLAGS) PM3CFLAGS += -I./src -I../include -I../common -I../common_fpga $(INCLUDES) # WIP Testing #PM3CFLAGS += -std=c11 -pedantic +PM3CFLAGS += -g PREFIX ?= /usr/local ifneq (,$(findstring MINGW,$(platform))) @@ -505,7 +506,6 @@ SRCS = aidsearch.c \ flash.c \ generator.c \ graph.c \ - jansson_path.c \ loclass/cipher.c \ loclass/cipherutils.c \ loclass/elite_crack.c \ diff --git a/client/deps/jansson/Makefile b/client/deps/jansson/Makefile index b51c4a77c..91f4eec7c 100644 --- a/client/deps/jansson/Makefile +++ b/client/deps/jansson/Makefile @@ -13,7 +13,8 @@ MYSRCS = \ strbuffer.c \ strconv.c \ utf.c \ - value.c + value.c \ + jansson_path.c LIB_A = libjansson.a diff --git a/client/src/jansson_path.c b/client/deps/jansson/jansson_path.c similarity index 99% rename from client/src/jansson_path.c rename to client/deps/jansson/jansson_path.c index b0db54675..8bc224fcd 100644 --- a/client/src/jansson_path.c +++ b/client/deps/jansson/jansson_path.c @@ -38,9 +38,7 @@ static void jsonp_free(void *ptr) { } static char *jsonp_strndup(const char *str, size_t len) { - char *new_str; - - new_str = jsonp_malloc(len + 1); + char *new_str = jsonp_malloc(len + 1); if (!new_str) return NULL; diff --git a/client/src/jansson_path.h b/client/deps/jansson/jansson_path.h similarity index 100% rename from client/src/jansson_path.h rename to client/deps/jansson/jansson_path.h From a659e240646c1a1187a9ff0517902ce820d24604 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Tue, 6 Oct 2020 23:20:50 +0200 Subject: [PATCH 0920/1047] text --- client/deps/hardnested/hardnested_bruteforce.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/deps/hardnested/hardnested_bruteforce.c b/client/deps/hardnested/hardnested_bruteforce.c index 82f8c6c04..0c768f400 100644 --- a/client/deps/hardnested/hardnested_bruteforce.c +++ b/client/deps/hardnested/hardnested_bruteforce.c @@ -174,7 +174,7 @@ crack_states_thread(void *x) { char progress_text[80]; char keystr[19]; sprintf(keystr, "%012" PRIx64 " ", key); - sprintf(progress_text, "Brute force phase completed. Key found: " _YELLOW_("%s"), keystr); + sprintf(progress_text, "Brute force phase completed. Key found: " _YELLOW_("%s"), keystr); hardnested_print_progress(thread_arg->num_acquired_nonces, progress_text, 0.0, 0); break; } else if (keys_found) { From 83baa88340946a3c3e9ba8312e480262d8301a0a Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Tue, 6 Oct 2020 23:26:56 +0200 Subject: [PATCH 0921/1047] filename pointer mem leak --- client/src/cmdhfmf.c | 30 ++++++++++++++++++++++++++---- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/client/src/cmdhfmf.c b/client/src/cmdhfmf.c index a06c7a3ae..a86e11f38 100644 --- a/client/src/cmdhfmf.c +++ b/client/src/cmdhfmf.c @@ -1002,6 +1002,7 @@ static int CmdHF14AMfDump(const char *Cmd) { return PM3_ESOFT; strcpy(keyFilename, fptr); + free(fptr); } if ((f = fopen(keyFilename, "rb")) == NULL) { @@ -1163,6 +1164,7 @@ static int CmdHF14AMfDump(const char *Cmd) { return PM3_ESOFT; strcpy(dataFilename, fptr); + free(fptr); } uint16_t bytes = 16 * (FirstBlockOfSector(numSectors - 1) + NumBlocksPerSector(numSectors - 1)); @@ -1226,6 +1228,7 @@ static int CmdHF14AMfRestore(const char *Cmd) { return 1; strcpy(keyFilename, fptr); + free(fptr); } if ((fkeys = fopen(keyFilename, "rb")) == NULL) { @@ -1260,6 +1263,7 @@ static int CmdHF14AMfRestore(const char *Cmd) { return 1; strcpy(dataFilename, fptr); + free(fptr); } if ((fdump = fopen(dataFilename, "rb")) == NULL) { @@ -1570,8 +1574,10 @@ jumptoend: if (createMfcKeyDump(fptr, SectorsCnt, e_sector) != PM3_SUCCESS) { PrintAndLogEx(ERR, "Failed to save keys to file"); free(e_sector); + free(fptr); return PM3_ESOFT; } + free(fptr); } free(e_sector); } @@ -1775,8 +1781,10 @@ jumptoend: if (createMfcKeyDump(fptr, SectorsCnt, e_sector) != PM3_SUCCESS) { PrintAndLogEx(ERR, "Failed to save keys to file"); free(e_sector); + free(fptr); return PM3_ESOFT; } + free(fptr); } free(e_sector); @@ -2013,7 +2021,6 @@ static int CmdHF14AMfAutoPWN(const char *Cmd) { uint8_t block[16] = {0x00}; uint8_t *dump; int bytes; - char *fnameptr = filename; // Settings bool slow = false; bool legacy_mfchk = false; @@ -2136,7 +2143,6 @@ static int CmdHF14AMfAutoPWN(const char *Cmd) { // read uid to generate a filename for the key file char *fptr = GenerateFilename("hf-mf-", "-key.bin"); - // check if tag doesn't have static nonce has_staticnonce = detect_classic_static_nonce(); @@ -2146,6 +2152,7 @@ static int CmdHF14AMfAutoPWN(const char *Cmd) { if (prng_type < 0) { PrintAndLogEx(FAILED, "\nNo tag detected or other tag communication error"); free(e_sector); + free(fptr); return prng_type; } } @@ -2259,6 +2266,7 @@ static int CmdHF14AMfAutoPWN(const char *Cmd) { keyBlock = calloc(ARRAYLEN(g_mifare_default_keys), 6); if (keyBlock == NULL) { free(e_sector); + free(fptr); return PM3_EMALLOC; } @@ -2403,6 +2411,7 @@ noValidKeyFound: PrintAndLogEx(FAILED, "No usable key was found!"); free(keyBlock); free(e_sector); + free(fptr); return PM3_ESOFT; } } @@ -2516,11 +2525,13 @@ tryNested: case PM3_ETIMEOUT: { PrintAndLogEx(ERR, "\nError: No response from Proxmark3."); free(e_sector); + free(fptr); return PM3_ESOFT; } case PM3_EOPABORTED: { PrintAndLogEx(WARNING, "\nButton pressed. Aborted."); free(e_sector); + free(fptr); return PM3_EOPABORTED; } case PM3_EFAILED: { @@ -2551,6 +2562,7 @@ tryNested: default: { PrintAndLogEx(ERR, "unknown Error.\n"); free(e_sector); + free(fptr); return PM3_ESOFT; } } @@ -2582,6 +2594,7 @@ tryHardnested: // If the nested attack fails then we try the hardnested attack } } free(e_sector); + free(fptr); return PM3_ESOFT; } @@ -2606,11 +2619,13 @@ tryStaticnested: case PM3_ETIMEOUT: { PrintAndLogEx(ERR, "\nError: No response from Proxmark3."); free(e_sector); + free(fptr); return PM3_ESOFT; } case PM3_EOPABORTED: { PrintAndLogEx(WARNING, "\nButton pressed. Aborted."); free(e_sector); + free(fptr); return PM3_EOPABORTED; } case PM3_SUCCESS: { @@ -2676,6 +2691,7 @@ all_found: if (!dump) { PrintAndLogEx(ERR, "Fail, cannot allocate memory"); free(e_sector); + free(fptr); return PM3_EMALLOC; } memset(dump, 0, bytes); @@ -2685,16 +2701,19 @@ all_found: PrintAndLogEx(ERR, "Fail, transfer from device time-out"); free(e_sector); free(dump); + free(fptr); return PM3_ETIMEOUT; } - fnameptr = GenerateFilename("hf-mf-", "-dump"); + char *fnameptr = GenerateFilename("hf-mf-", "-dump"); if (fnameptr == NULL) { free(dump); free(e_sector); + free(fptr); return PM3_ESOFT; } strcpy(filename, fnameptr); + free(fnameptr); saveFile(filename, ".bin", dump, bytes); saveFileEML(filename, dump, bytes, MFBLOCK_SIZE); @@ -2706,6 +2725,7 @@ all_found: free(dump); free(e_sector); + free(fptr); return PM3_SUCCESS; } @@ -2982,6 +3002,7 @@ out: if (createMfcKeyDump(fptr, sectorsCnt, e_sector) != PM3_SUCCESS) { PrintAndLogEx(ERR, "Failed to save keys to file"); } + free(fptr); } } @@ -3285,6 +3306,7 @@ out: if (createMfcKeyDump(fptr, SectorsCnt, e_sector) != PM3_SUCCESS) { PrintAndLogEx(ERR, "Failed to save keys to file"); } + free(fptr); } free(keyBlock); @@ -4040,7 +4062,6 @@ static int CmdHF14AMfEKeyPrn(const char *Cmd) { char *fptr = filename; fptr += snprintf(fptr, sizeof(filename), "hf-mf-"); FillFileNameByUID(fptr + strlen(fptr), uid, "-key", sizeof(uid)); - createMfcKeyDump(filename, sectors_cnt, e_sector); } @@ -4732,6 +4753,7 @@ static int CmdHF14AMfice(const char *Cmd) { if (fptr == NULL) return PM3_EFILE; strcpy(filename, fptr); + free(fptr); } PrintAndLogEx(NORMAL, "Collecting "_YELLOW_("%u")" nonces \n", limit); From 02df6ebbf79f0bc10e153d3d81e83bf473f311bb Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Tue, 6 Oct 2020 23:45:04 +0200 Subject: [PATCH 0922/1047] bad memcpy based on size --- client/src/mifare/mifarehost.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/client/src/mifare/mifarehost.c b/client/src/mifare/mifarehost.c index ee714d284..5eb3f6fd7 100644 --- a/client/src/mifare/mifarehost.c +++ b/client/src/mifare/mifarehost.c @@ -816,14 +816,16 @@ int mfEmlSetMem_xt(uint8_t *data, int blockNum, int blocksCount, int blockBtWidt return PM3_ESOFT; } - struct p *payload = calloc(1, sizeof(struct p) + size); + size_t paylen = sizeof(struct p) + size; + struct p *payload = calloc(1, paylen); + payload->blockno = blockNum; payload->blockcnt = blocksCount; payload->blockwidth = blockBtWidth; memcpy(payload->data, data, size); clearCommandBuffer(); - SendCommandNG(CMD_HF_MIFARE_EML_MEMSET, (uint8_t *)payload, sizeof(payload) + size); + SendCommandNG(CMD_HF_MIFARE_EML_MEMSET, (uint8_t *)payload, paylen); free(payload); return PM3_SUCCESS; } From 634270f1729b49d8d74e08f05d6cb63e5a652e87 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Tue, 6 Oct 2020 23:46:56 +0200 Subject: [PATCH 0923/1047] remove debug symbols --- client/Makefile | 1 - 1 file changed, 1 deletion(-) diff --git a/client/Makefile b/client/Makefile index 3477c560a..e2689edd5 100644 --- a/client/Makefile +++ b/client/Makefile @@ -272,7 +272,6 @@ PM3CFLAGS = $(CFLAGS) PM3CFLAGS += -I./src -I../include -I../common -I../common_fpga $(INCLUDES) # WIP Testing #PM3CFLAGS += -std=c11 -pedantic -PM3CFLAGS += -g PREFIX ?= /usr/local ifneq (,$(findstring MINGW,$(platform))) From 6338a9edbb1d29f4e707a4656b989b809a3d6ebe Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 7 Oct 2020 00:03:08 +0200 Subject: [PATCH 0924/1047] fix json memory leaks --- client/src/emv/emvjson.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/client/src/emv/emvjson.c b/client/src/emv/emvjson.c index 43f5095e2..0931fb2e8 100644 --- a/client/src/emv/emvjson.c +++ b/client/src/emv/emvjson.c @@ -9,9 +9,7 @@ //----------------------------------------------------------------------------- #include "emvjson.h" - #include - #include "commonutil.h" // ARRAYLEN #include "ui.h" #include "util.h" @@ -75,7 +73,7 @@ int JsonSaveJsonObject(json_t *root, const char *path, json_t *value) { return 1; if (path[0] == '$') { - if (json_path_set(root, path, value, 0, &error)) { + if (json_path_set_new(root, path, value, 0, &error)) { PrintAndLogEx(ERR, "ERROR: can't set json path: %s", error.text); return 2; } else { From 8c726c157ba5db8713fec2107d7545c7a1e1582f Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 7 Oct 2020 00:04:20 +0200 Subject: [PATCH 0925/1047] fix savejson mem leaks --- client/src/fileutils.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/client/src/fileutils.c b/client/src/fileutils.c index be6cab977..9b6482a66 100644 --- a/client/src/fileutils.c +++ b/client/src/fileutils.c @@ -573,16 +573,16 @@ int saveFileJSONex(const char *preferredName, JSONFileType ftype, uint8_t *data, int res = json_dump_file(root, fileName, JSON_INDENT(2)); if (res) { PrintAndLogEx(FAILED, "error: can't save the file: " _YELLOW_("%s"), fileName); - json_decref(root); retval = 200; goto out; } - if (verbose) - PrintAndLogEx(SUCCESS, "saved to json file " _YELLOW_("%s"), fileName); - json_decref(root); + if (verbose) { + PrintAndLogEx(SUCCESS, "saved to json file " _YELLOW_("%s"), fileName); + } out: + json_decref(root); free(fileName); return retval; } From 0439e3ed60d701d7850029cc7fcda564bff3787e Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 7 Oct 2020 00:05:12 +0200 Subject: [PATCH 0926/1047] style --- client/src/cmddata.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/client/src/cmddata.c b/client/src/cmddata.c index b566d24e8..16bd7f4f8 100644 --- a/client/src/cmddata.c +++ b/client/src/cmddata.c @@ -649,8 +649,7 @@ static int Cmdaskmandemod(const char *Cmd) { size_t maxLen = 0; if (slen) { - - + if (Cmd[0] == 's') { st = true; Cmd++; From 3abdf1c6518fb22dcd990ba071d2817452ab68a3 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 7 Oct 2020 00:14:41 +0200 Subject: [PATCH 0927/1047] reverse mem fix --- tools/mf_nonce_brute/mf_nonce_brute.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/tools/mf_nonce_brute/mf_nonce_brute.c b/tools/mf_nonce_brute/mf_nonce_brute.c index 3dcfe9918..9891b99cc 100644 --- a/tools/mf_nonce_brute/mf_nonce_brute.c +++ b/tools/mf_nonce_brute/mf_nonce_brute.c @@ -303,9 +303,6 @@ static void *brute_thread(void *arguments) { pthread_mutex_unlock(&print_lock); } } - if (revstate) - free(revstate); - free(args); return NULL; } From 7ea0324a62d34b426f0867f14ebb68832756c894 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 7 Oct 2020 00:47:34 +0200 Subject: [PATCH 0928/1047] lf hid read - increase amount of samples to reaed in order to fit long formats --- client/src/cmdlfhid.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/src/cmdlfhid.c b/client/src/cmdlfhid.c index a6ecd8e2f..4513c379f 100644 --- a/client/src/cmdlfhid.c +++ b/client/src/cmdlfhid.c @@ -154,7 +154,7 @@ static int CmdHIDDemod(const char *Cmd) { // this read is the "normal" read, which download lf signal and tries to demod here. static int CmdHIDRead(const char *Cmd) { (void)Cmd; // Cmd is not used so far - lf_read(false, 12000); + lf_read(false, 16000); return demodHID(true); } From 3872b5bd66555fd110de9d116227bf93461b1544 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Wed, 7 Oct 2020 01:11:40 +0200 Subject: [PATCH 0929/1047] Move back jansson_path as it's not part of upstream and breaks usage of system jansson lib --- client/CMakeLists.txt | 1 + client/Makefile | 1 + client/deps/jansson/Makefile | 3 +-- client/{deps/jansson => src}/jansson_path.c | 0 client/{deps/jansson => src}/jansson_path.h | 0 5 files changed, 3 insertions(+), 2 deletions(-) rename client/{deps/jansson => src}/jansson_path.c (100%) rename client/{deps/jansson => src}/jansson_path.h (100%) diff --git a/client/CMakeLists.txt b/client/CMakeLists.txt index a71e5715d..dd4811435 100644 --- a/client/CMakeLists.txt +++ b/client/CMakeLists.txt @@ -283,6 +283,7 @@ set (TARGET_SOURCES ${PM3_ROOT}/client/src/fileutils.c ${PM3_ROOT}/client/src/flash.c ${PM3_ROOT}/client/src/graph.c + ${PM3_ROOT}/client/src/jansson_path.c ${PM3_ROOT}/client/src/preferences.c ${PM3_ROOT}/client/src/pm3_binlib.c ${PM3_ROOT}/client/src/pm3_bitlib.c diff --git a/client/Makefile b/client/Makefile index e2689edd5..ac51cb1bd 100644 --- a/client/Makefile +++ b/client/Makefile @@ -505,6 +505,7 @@ SRCS = aidsearch.c \ flash.c \ generator.c \ graph.c \ + jansson_path.c \ loclass/cipher.c \ loclass/cipherutils.c \ loclass/elite_crack.c \ diff --git a/client/deps/jansson/Makefile b/client/deps/jansson/Makefile index 91f4eec7c..b51c4a77c 100644 --- a/client/deps/jansson/Makefile +++ b/client/deps/jansson/Makefile @@ -13,8 +13,7 @@ MYSRCS = \ strbuffer.c \ strconv.c \ utf.c \ - value.c \ - jansson_path.c + value.c LIB_A = libjansson.a diff --git a/client/deps/jansson/jansson_path.c b/client/src/jansson_path.c similarity index 100% rename from client/deps/jansson/jansson_path.c rename to client/src/jansson_path.c diff --git a/client/deps/jansson/jansson_path.h b/client/src/jansson_path.h similarity index 100% rename from client/deps/jansson/jansson_path.h rename to client/src/jansson_path.h From 2e670d7db42cda2fbb86daa6dee3a3c0c7fddbfe Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Wed, 7 Oct 2020 01:24:33 +0200 Subject: [PATCH 0930/1047] Makefile.hal: make it easier to comment parts --- common_arm/Makefile.hal | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/common_arm/Makefile.hal b/common_arm/Makefile.hal index 0ae8b2d19..5b327a951 100644 --- a/common_arm/Makefile.hal +++ b/common_arm/Makefile.hal @@ -79,22 +79,20 @@ ifneq (,$(PLATFORM_EXTRAS_TMP)) endif # common LF support -PLATFORM_DEFS += \ - -DWITH_LF \ - -DWITH_HITAG \ - -DWITH_EM4x50 +PLATFORM_DEFS += -DWITH_LF +PLATFORM_DEFS += -DWITH_HITAG +PLATFORM_DEFS += -DWITH_EM4x50 # common HF support -PLATFORM_DEFS += \ - -DWITH_ISO15693 \ - -DWITH_LEGICRF \ - -DWITH_ISO14443b \ - -DWITH_ISO14443a \ - -DWITH_ICLASS \ - -DWITH_FELICA \ - -DWITH_NFCBARCODE \ - -DWITH_HFSNIFF \ - -DWITH_HFPLOT +PLATFORM_DEFS += -DWITH_ISO15693 +PLATFORM_DEFS += -DWITH_LEGICRF +PLATFORM_DEFS += -DWITH_ISO14443b +PLATFORM_DEFS += -DWITH_ISO14443a +PLATFORM_DEFS += -DWITH_ICLASS +PLATFORM_DEFS += -DWITH_FELICA +PLATFORM_DEFS += -DWITH_NFCBARCODE +PLATFORM_DEFS += -DWITH_HFSNIFF +PLATFORM_DEFS += -DWITH_HFPLOT # Standalone mode From eb05cadb1c7b85db35d2c6792a9b66cf69fd0f99 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 7 Oct 2020 01:29:00 +0200 Subject: [PATCH 0931/1047] hid --- client/src/cmdlfhid.c | 13 +- tools/pm3_tests.sh | 6 +- traces/lf_ATA5577.txt | 62 +- traces/lf_ATA5577_hid_48.pm3 | 20000 +++++++++++++++++++++++++++++++++ traces/lf_ATA5577_hid_84.pm3 | 20000 --------------------------------- 5 files changed, 20039 insertions(+), 20042 deletions(-) create mode 100644 traces/lf_ATA5577_hid_48.pm3 delete mode 100644 traces/lf_ATA5577_hid_84.pm3 diff --git a/client/src/cmdlfhid.c b/client/src/cmdlfhid.c index 4513c379f..54a650943 100644 --- a/client/src/cmdlfhid.c +++ b/client/src/cmdlfhid.c @@ -257,15 +257,15 @@ static int CmdHIDSim(const char *Cmd) { static int CmdHIDClone(const char *Cmd) { int idlen = 0; uint8_t id[10] = {0}; - - uint32_t hi2 = 0, hi = 0, lo = 0; - uint32_t i = 0; + uint32_t hi2 = 0, hi = 0, lo = 0, i = 0; CLIParserContext *ctx; CLIParserInit(&ctx, "lf hid clone", "Clone HID to T55x7. Tag must be on antenna!", - "lf hid clone 2006ec0c86\n" - "lf hid clone -l 2006ec0c86" + "lf hid clone 2006ec0c86 -> HID 10301 26 bit\n" + "lf hid clone 2e0ec00c87 -> HID Corporate 35 bit\n" + "lf hid clone -l 01f0760643c3 -> HID P10001 40 bit\n" + "lf hid clone -l 01400076000c86 -> HID Corporate 48 bit" ); void *argtable[] = { @@ -275,11 +275,8 @@ static int CmdHIDClone(const char *Cmd) { arg_param_end }; CLIExecWithReturn(ctx, Cmd, argtable, false); - bool long_id = arg_get_lit(ctx, 1); - CLIGetHexWithReturn(ctx, 2, id, &idlen); - CLIParserFree(ctx); uint8_t longid[1] = {0}; diff --git a/tools/pm3_tests.sh b/tools/pm3_tests.sh index da335bb9b..8189c97a5 100755 --- a/tools/pm3_tests.sh +++ b/tools/pm3_tests.sh @@ -379,9 +379,9 @@ while true; do if ! CheckExecute slow "lf T55 hid test" "$CLIENTBIN -c 'data load traces/lf_ATA5577_hid.pm3; lf search 1'" "HID Prox ID found"; then break; fi if ! CheckExecute slow "lf T55 hid test2" "$CLIENTBIN -c 'data load traces/lf_ATA5577_hid.pm3; lf hid demod'" \ "HID H10301 26-bit; FC: 118 CN: 1603"; then break; fi - if ! CheckExecute slow "lf T55 hid_84 test" "$CLIENTBIN -c 'data load traces/lf_ATA5577_hid_84.pm3; lf search 1'" "HID Prox ID found"; then break; fi - if ! CheckExecute slow "lf T55 hid_84 test2" "$CLIENTBIN -c 'data load traces/lf_ATA5577_hid_84.pm3; lf hid demod'" \ - "HID Prox - 9e000000000022006ec0c86 (1603)"; then break; fi + if ! CheckExecute slow "lf T55 hid_48 test" "$CLIENTBIN -c 'data load traces/lf_ATA5577_hid_48.pm3; lf search 1'" "HID Prox ID found"; then break; fi + if ! CheckExecute slow "lf T55 hid_48 test2" "$CLIENTBIN -c 'data load traces/lf_ATA5577_hid_48.pm3; lf hid demod'" \ + "HID Corporate 1000 48-bit"; then break; fi if ! CheckExecute slow "lf T55 indala_hedem test" "$CLIENTBIN -c 'data load traces/lf_ATA5577_indala_hedem.pm3; lf search 1'" "Indala ID found"; then break; fi if ! CheckExecute slow "lf T55 indala_hedem test2" "$CLIENTBIN -c 'data load traces/lf_ATA5577_indala_hedem.pm3; lf indala demod'" \ "Heden-2L \| 888"; then break; fi diff --git a/traces/lf_ATA5577.txt b/traces/lf_ATA5577.txt index 9feb1478d..7d9ac4561 100644 --- a/traces/lf_ATA5577.txt +++ b/traces/lf_ATA5577.txt @@ -2,120 +2,120 @@ These traces have been generated with a T5577: lf awid clone 26 224 1337 lf read s 10000 -data save f lf_t5577_awid_26 +data save f lf_ATA5577_awid_26 lf awid clone 50 2001 13371337 lf read s 10000 -data save f lf_t5577_awid_50 +data save f lf_ATA5577_awid_50 lf em 410x_write 0F0368568B 1 lf read s 10000 -data save f lf_t5577_em410x +data save f lf_ATA5577_em410x lf fdx clone c 999 n 112233 s lf read s 10000 -data save f lf_t5577_fdx_animal +data save f lf_ATA5577_fdx_animal lf fdx clone c 999 n 112233 e 16a lf read s 10000 -data save f lf_t5577_fdx_extended +data save f lf_ATA5577_fdx_extended lf gallagher clone b 0FFD5461A9DA1346B2D1AC32 lf read s 10000 -data save f lf_t5577_gallagher +data save f lf_ATA5577_gallagher lf gproxii clone 26 123 11223 lf read s 10000 -data save f lf_t5577_gproxii +data save f lf_ATA5577_gproxii lf hid clone 2006ec0c86 lf read s 10000 -data save f lf_t5577_hid +data save f lf_ATA5577_hid -lf hid clone -l 2006ec0c86 +lf hid clone -l 01400076000c86 lf read s 20000 -data save f lf_t5577_hid_84 +data save f lf_ATA5577_hid_48 lf indala clone --heden 888 lf read s 10000 -data save f lf_t5577_indala_hedem +data save f lf_ATA5577_indala_hedem lf indala clone --fc 123 --cn 1337 lf read s 10000 -data save f lf_t5577_indala +data save f lf_ATA5577_indala lf indala clone -l -r 80000001b23523a6c2e31eba3cbee4afb3c6ad1fcf649393928c14e5 lf read s 10000 -data save f lf_t5577_indala_224 +data save f lf_ATA5577_indala_224 lf io clone 01 101 1337 lf read s 10000 -data save f lf_t5577_io +data save f lf_ATA5577_io lf jablotron clone 112233 lf read s 16000 -data save f lf_t5577_jablotron +data save f lf_ATA5577_jablotron lf keri clone --id 112233 lf read s 10000 -data save f lf_t5577_keri +data save f lf_ATA5577_keri lf keri clone -t i --fc 6 --id 12345 lf read s 10000 -data save f lf_t5577_keri_internalid +data save f lf_ATA5577_keri_internalid lf keri clone -t m --fc 6 --id 12345 lf read s 10000 -data save f lf_t5577_keri_msid +data save f lf_ATA5577_keri_msid lf motorola clone a0000000a0002021 lf read s 10000 -data save f lf_t5577_motorola +data save f lf_ATA5577_motorola lf nedap clone s 1 c 123 i 12345 lf read s 16000 -data save f lf_t5577_nedap +data save f lf_ATA5577_nedap lf nexwatch clone r 5600000000213C9F8F150C lf read s 10000 -data save f lf_t5577_nexwatch +data save f lf_ATA5577_nexwatch lf nexwatch clone c 521512301 m 1 n lf read s 10000 -data save f lf_t5577_nexwatch_nexkey +data save f lf_ATA5577_nexwatch_nexkey lf nexwatch clone c 521512301 m 1 q lf read s 10000 -data save f lf_t5577_nexwatch_quadrakey +data save f lf_ATA5577_nexwatch_quadrakey lf noralsy clone 112233 lf read s 10000 -data save f lf_t5577_noralsy +data save f lf_ATA5577_noralsy lf pac clone c CD4F5552 lf read s 10000 -data save f lf_t5577_pac +data save f lf_ATA5577_pac lf paradox clone b 0f55555695596a6a9999a59a lf read s 10000 -data save f lf_t5577_paradox +data save f lf_ATA5577_paradox lf presco clone d 123456789 lf read s 12000 -data save f lf_t5577_presco +data save f lf_ATA5577_presco lf pyramid clone 123 11223 lf read s 10000 -data save f lf_t5577_pyramid +data save f lf_ATA5577_pyramid lf securakey clone b 7FCB400001ADEA5344300000 lf read s 10000 -data save f lf_t5577_securakey +data save f lf_ATA5577_securakey lf viking clone 1A337 lf read s 10000 -data save f lf_t5577_viking +data save f lf_ATA5577_viking lf visa2000 clone 112233 lf read s 10000 -data save f lf_t5577_visa2000 +data save f lf_ATA5577_visa2000 diff --git a/traces/lf_ATA5577_hid_48.pm3 b/traces/lf_ATA5577_hid_48.pm3 new file mode 100644 index 000000000..d7131d77e --- /dev/null +++ b/traces/lf_ATA5577_hid_48.pm3 @@ -0,0 +1,20000 @@ +124 +124 +105 +-15 +-122 +-127 +-127 +-100 +38 +124 +124 +124 +104 +-17 +-124 +-127 +-127 +-101 +37 +124 +124 +124 +102 +-18 +-125 +-127 +-127 +-99 +39 +124 +124 +87 +-30 +-127 +-127 +-66 +59 +124 +124 +88 +-29 +-127 +-127 +-68 +55 +124 +124 +83 +-34 +-127 +-127 +-68 +56 +124 +124 +85 +-33 +-127 +-127 +-72 +53 +124 +124 +78 +-39 +-127 +-127 +-74 +52 +124 +124 +80 +-38 +-127 +-127 +-75 +50 +124 +124 +83 +-34 +-127 +-127 +-127 +-99 +41 +124 +124 +124 +114 +-8 +-116 +-127 +-127 +-96 +42 +124 +124 +124 +108 +-13 +-121 +-127 +-127 +-97 +40 +124 +124 +124 +106 +-14 +-122 +-127 +-127 +-97 +40 +124 +124 +124 +106 +-14 +-122 +-127 +-127 +-98 +39 +124 +124 +124 +108 +-13 +-121 +-127 +-70 +51 +124 +124 +76 +-41 +-127 +-127 +-81 +44 +124 +124 +76 +-41 +-127 +-127 +-80 +45 +124 +124 +80 +-37 +-127 +-127 +-76 +46 +124 +124 +75 +-41 +-127 +-127 +-74 +50 +124 +124 +77 +-40 +-127 +-127 +-74 +51 +124 +124 +84 +-33 +-127 +-127 +-127 +-98 +43 +124 +124 +124 +110 +-11 +-119 +-127 +-127 +-96 +41 +124 +124 +124 +111 +-11 +-118 +-127 +-127 +-98 +40 +124 +124 +124 +108 +-13 +-120 +-127 +-127 +-99 +38 +124 +124 +124 +107 +-14 +-121 +-127 +-127 +-96 +42 +124 +124 +124 +110 +-11 +-119 +-127 +-72 +50 +124 +124 +72 +-45 +-127 +-127 +-81 +44 +124 +124 +75 +-41 +-127 +-127 +-80 +45 +124 +124 +78 +-38 +-127 +-127 +-76 +47 +124 +124 +75 +-42 +-127 +-127 +-74 +50 +124 +124 +80 +-37 +-127 +-127 +-77 +48 +124 +124 +79 +-37 +-127 +-127 +-76 +48 +124 +124 +124 +99 +-21 +-127 +-127 +-127 +-110 +29 +122 +124 +124 +96 +-23 +-127 +-127 +-127 +-106 +32 +124 +124 +124 +103 +-17 +-124 +-127 +-127 +-102 +35 +124 +124 +124 +104 +-16 +-123 +-127 +-127 +-98 +38 +124 +124 +124 +104 +-16 +-124 +-127 +-127 +-101 +36 +124 +124 +84 +-33 +-127 +-127 +-63 +60 +124 +124 +86 +-31 +-127 +-127 +-65 +59 +124 +124 +84 +-34 +-127 +-127 +-71 +54 +124 +124 +83 +-35 +-127 +-127 +-72 +51 +124 +124 +80 +-37 +-127 +-127 +-70 +54 +124 +124 +82 +-35 +-127 +-127 +-73 +50 +124 +124 +124 +99 +-21 +-127 +-127 +-127 +-108 +30 +123 +124 +124 +97 +-23 +-127 +-127 +-127 +-104 +33 +124 +124 +124 +105 +-15 +-123 +-127 +-127 +-100 +36 +124 +124 +124 +103 +-17 +-125 +-127 +-127 +-99 +37 +124 +124 +124 +103 +-17 +-125 +-127 +-127 +-98 +40 +124 +124 +85 +-32 +-127 +-127 +-65 +60 +124 +124 +90 +-28 +-127 +-127 +-69 +55 +124 +124 +84 +-34 +-127 +-127 +-69 +54 +124 +124 +81 +-36 +-127 +-127 +-71 +54 +124 +124 +81 +-37 +-127 +-127 +-75 +50 +124 +124 +80 +-37 +-127 +-127 +-73 +50 +124 +124 +81 +-36 +-127 +-127 +-127 +-96 +43 +124 +124 +124 +111 +-10 +-118 +-127 +-127 +-93 +46 +124 +124 +124 +110 +-11 +-119 +-127 +-127 +-97 +41 +124 +124 +124 +109 +-12 +-120 +-127 +-127 +-100 +38 +124 +124 +124 +108 +-13 +-120 +-127 +-127 +-101 +37 +124 +124 +124 +110 +-11 +-119 +-127 +-127 +-96 +40 +124 +124 +124 +107 +-14 +-122 +-127 +-127 +-99 +39 +124 +124 +124 +105 +-16 +-123 +-127 +-127 +-99 +38 +124 +124 +124 +105 +-16 +-123 +-127 +-127 +-97 +41 +124 +124 +124 +107 +-14 +-121 +-127 +-127 +-101 +38 +124 +124 +124 +109 +-13 +-120 +-127 +-73 +49 +124 +124 +74 +-43 +-127 +-127 +-82 +43 +124 +124 +75 +-41 +-127 +-127 +-77 +46 +124 +124 +78 +-38 +-127 +-127 +-73 +51 +124 +124 +77 +-40 +-127 +-127 +-77 +48 +124 +124 +79 +-38 +-127 +-127 +-72 +51 +124 +124 +80 +-37 +-127 +-127 +-127 +-97 +41 +124 +124 +124 +110 +-11 +-119 +-127 +-127 +-95 +42 +124 +124 +124 +110 +-11 +-119 +-127 +-127 +-97 +41 +124 +124 +124 +109 +-12 +-120 +-127 +-127 +-98 +40 +124 +124 +124 +108 +-13 +-121 +-127 +-127 +-100 +38 +124 +124 +124 +111 +-10 +-118 +-127 +-74 +47 +124 +124 +74 +-43 +-127 +-127 +-82 +42 +124 +124 +73 +-43 +-127 +-127 +-78 +47 +124 +124 +78 +-38 +-127 +-127 +-77 +47 +124 +124 +76 +-40 +-127 +-127 +-77 +48 +124 +124 +79 +-38 +-127 +-127 +-74 +49 +124 +124 +78 +-39 +-127 +-127 +-74 +48 +124 +124 +124 +97 +-23 +-127 +-127 +-127 +-110 +27 +121 +124 +124 +98 +-22 +-127 +-127 +-127 +-103 +35 +124 +124 +124 +103 +-17 +-125 +-127 +-127 +-100 +38 +124 +124 +124 +106 +-14 +-122 +-127 +-127 +-103 +36 +124 +124 +124 +104 +-16 +-124 +-127 +-127 +-100 +38 +124 +124 +86 +-32 +-127 +-127 +-65 +60 +124 +124 +86 +-32 +-127 +-127 +-66 +56 +124 +124 +83 +-34 +-127 +-127 +-68 +54 +124 +124 +80 +-37 +-127 +-127 +-70 +54 +124 +124 +81 +-36 +-127 +-127 +-74 +51 +124 +124 +80 +-37 +-127 +-127 +-75 +49 +124 +124 +80 +-37 +-127 +-127 +-74 +49 +124 +124 +78 +-39 +-127 +-127 +-73 +51 +124 +124 +77 +-40 +-127 +-127 +-74 +51 +124 +124 +82 +-35 +-127 +-127 +-74 +49 +124 +124 +78 +-39 +-127 +-127 +-74 +51 +124 +124 +77 +-40 +-127 +-127 +-73 +52 +124 +124 +81 +-36 +-127 +-127 +-127 +-96 +44 +124 +124 +124 +111 +-10 +-118 +-127 +-127 +-95 +43 +124 +124 +124 +111 +-11 +-119 +-127 +-127 +-99 +40 +124 +124 +124 +107 +-14 +-122 +-127 +-127 +-99 +40 +124 +124 +124 +106 +-15 +-122 +-127 +-127 +-100 +38 +124 +124 +124 +110 +-11 +-119 +-127 +-127 +-101 +37 +124 +124 +124 +108 +-13 +-120 +-127 +-127 +-99 +39 +124 +124 +124 +105 +-16 +-123 +-127 +-127 +-100 +37 +124 +124 +124 +107 +-14 +-121 +-127 +-127 +-101 +37 +124 +124 +124 +108 +-13 +-121 +-127 +-127 +-101 +36 +124 +124 +124 +109 +-12 +-120 +-127 +-73 +48 +124 +124 +72 +-44 +-127 +-127 +-81 +44 +124 +124 +75 +-41 +-127 +-127 +-79 +45 +124 +124 +80 +-37 +-127 +-127 +-76 +46 +124 +124 +75 +-41 +-127 +-127 +-75 +48 +124 +124 +76 +-40 +-127 +-127 +-73 +50 +124 +124 +80 +-37 +-127 +-127 +-127 +-97 +44 +124 +124 +124 +113 +-9 +-117 +-127 +-127 +-97 +41 +124 +124 +124 +110 +-12 +-119 +-127 +-127 +-99 +40 +124 +124 +124 +109 +-12 +-120 +-127 +-127 +-97 +39 +124 +124 +124 +106 +-14 +-122 +-127 +-127 +-97 +40 +124 +124 +124 +108 +-12 +-120 +-127 +-71 +48 +124 +124 +71 +-45 +-127 +-127 +-79 +46 +124 +124 +74 +-43 +-127 +-127 +-78 +47 +124 +124 +80 +-37 +-127 +-127 +-73 +50 +124 +124 +74 +-42 +-127 +-127 +-75 +50 +124 +124 +76 +-41 +-127 +-127 +-75 +51 +124 +124 +77 +-39 +-127 +-127 +-75 +50 +124 +124 +80 +-38 +-127 +-127 +-76 +48 +124 +124 +78 +-39 +-127 +-127 +-73 +52 +124 +124 +78 +-39 +-127 +-127 +-75 +51 +124 +124 +77 +-40 +-127 +-127 +-75 +50 +124 +124 +79 +-38 +-127 +-127 +-75 +48 +124 +124 +79 +-38 +-127 +-127 +-73 +52 +124 +124 +124 +100 +-20 +-127 +-127 +-127 +-110 +27 +122 +124 +124 +97 +-23 +-127 +-127 +-127 +-104 +32 +124 +124 +124 +105 +-15 +-123 +-127 +-127 +-102 +34 +124 +124 +124 +104 +-17 +-124 +-127 +-127 +-100 +36 +124 +124 +124 +103 +-17 +-124 +-127 +-127 +-98 +40 +124 +124 +86 +-31 +-127 +-127 +-66 +59 +124 +124 +88 +-29 +-127 +-127 +-68 +55 +124 +124 +84 +-34 +-127 +-127 +-68 +55 +124 +124 +82 +-36 +-127 +-127 +-71 +53 +124 +124 +80 +-37 +-127 +-127 +-74 +50 +124 +124 +81 +-36 +-127 +-127 +-75 +48 +124 +124 +81 +-36 +-127 +-127 +-127 +-95 +44 +124 +124 +124 +113 +-9 +-117 +-127 +-127 +-96 +44 +124 +124 +124 +109 +-12 +-120 +-127 +-127 +-96 +42 +124 +124 +124 +108 +-13 +-121 +-127 +-127 +-99 +40 +124 +124 +124 +109 +-12 +-120 +-127 +-127 +-99 +37 +124 +124 +124 +109 +-12 +-120 +-127 +-74 +46 +124 +124 +72 +-45 +-127 +-127 +-78 +46 +124 +124 +73 +-44 +-127 +-127 +-78 +48 +124 +124 +81 +-36 +-127 +-127 +-73 +49 +124 +124 +75 +-42 +-127 +-127 +-77 +46 +124 +124 +76 +-41 +-127 +-127 +-75 +48 +124 +124 +80 +-37 +-127 +-127 +-127 +-95 +44 +124 +124 +124 +110 +-11 +-119 +-127 +-127 +-94 +45 +124 +124 +124 +111 +-11 +-119 +-127 +-127 +-98 +41 +124 +124 +124 +109 +-12 +-120 +-127 +-127 +-100 +38 +124 +124 +124 +108 +-13 +-121 +-127 +-127 +-101 +38 +124 +124 +124 +111 +-10 +-118 +-127 +-70 +51 +124 +124 +71 +-46 +-127 +-127 +-79 +45 +124 +124 +72 +-45 +-127 +-127 +-78 +48 +124 +124 +78 +-38 +-127 +-127 +-77 +47 +124 +124 +77 +-40 +-127 +-127 +-78 +46 +124 +124 +77 +-40 +-127 +-127 +-73 +52 +124 +124 +81 +-37 +-127 +-127 +-74 +50 +124 +124 +124 +95 +-25 +-127 +-127 +-127 +-108 +29 +122 +124 +124 +97 +-23 +-127 +-127 +-127 +-103 +34 +124 +124 +124 +103 +-17 +-125 +-127 +-127 +-100 +38 +124 +124 +124 +104 +-17 +-124 +-127 +-127 +-101 +37 +124 +124 +124 +105 +-16 +-123 +-127 +-127 +-101 +37 +124 +124 +85 +-32 +-127 +-127 +-65 +58 +124 +124 +86 +-31 +-127 +-127 +-65 +58 +124 +124 +82 +-35 +-127 +-127 +-70 +55 +124 +124 +83 +-34 +-127 +-127 +-73 +51 +124 +124 +80 +-36 +-127 +-127 +-72 +51 +124 +124 +77 +-39 +-127 +-127 +-72 +53 +124 +124 +124 +101 +-19 +-127 +-127 +-127 +-110 +27 +122 +124 +124 +99 +-21 +-127 +-127 +-127 +-105 +34 +124 +124 +124 +108 +-13 +-121 +-127 +-127 +-104 +34 +124 +124 +124 +104 +-17 +-124 +-127 +-127 +-103 +35 +124 +124 +124 +106 +-15 +-123 +-127 +-127 +-101 +37 +124 +124 +85 +-33 +-127 +-127 +-64 +61 +124 +124 +86 +-32 +-127 +-127 +-67 +58 +124 +124 +85 +-33 +-127 +-127 +-71 +53 +124 +124 +85 +-33 +-127 +-127 +-73 +50 +124 +124 +78 +-39 +-127 +-127 +-72 +51 +124 +124 +78 +-39 +-127 +-127 +-73 +52 +124 +124 +82 +-35 +-127 +-127 +-127 +-98 +42 +124 +124 +124 +114 +-8 +-116 +-127 +-127 +-94 +44 +124 +124 +124 +109 +-13 +-120 +-127 +-127 +-97 +40 +124 +124 +124 +107 +-14 +-122 +-127 +-127 +-99 +38 +124 +124 +124 +107 +-14 +-122 +-127 +-127 +-98 +39 +124 +124 +124 +108 +-13 +-120 +-127 +-71 +50 +124 +124 +74 +-43 +-127 +-127 +-80 +45 +124 +124 +75 +-42 +-127 +-127 +-79 +46 +124 +124 +80 +-37 +-127 +-127 +-76 +47 +124 +124 +76 +-41 +-127 +-127 +-75 +48 +124 +124 +76 +-41 +-127 +-127 +-73 +51 +124 +124 +80 +-36 +-127 +-127 +-127 +-97 +44 +124 +124 +124 +114 +-8 +-116 +-127 +-127 +-97 +41 +124 +124 +124 +110 +-12 +-119 +-127 +-127 +-99 +40 +124 +124 +124 +109 +-12 +-120 +-127 +-127 +-100 +38 +124 +124 +124 +108 +-13 +-120 +-127 +-127 +-101 +37 +124 +124 +124 +110 +-11 +-118 +-127 +-73 +47 +124 +124 +74 +-43 +-127 +-127 +-81 +44 +124 +124 +76 +-41 +-127 +-127 +-75 +48 +124 +124 +76 +-40 +-127 +-127 +-74 +49 +124 +124 +75 +-42 +-127 +-127 +-75 +50 +124 +124 +78 +-39 +-127 +-127 +-76 +49 +124 +124 +80 +-36 +-127 +-127 +-75 +48 +124 +124 +124 +98 +-22 +-127 +-127 +-127 +-110 +27 +120 +124 +124 +98 +-22 +-127 +-127 +-127 +-104 +33 +124 +124 +124 +104 +-16 +-124 +-127 +-127 +-102 +35 +124 +124 +124 +104 +-16 +-124 +-127 +-127 +-99 +38 +124 +124 +124 +104 +-16 +-124 +-127 +-127 +-98 +40 +124 +124 +84 +-33 +-127 +-127 +-66 +59 +124 +124 +89 +-29 +-127 +-127 +-68 +55 +124 +124 +83 +-35 +-127 +-127 +-68 +56 +124 +124 +81 +-36 +-127 +-127 +-73 +52 +124 +124 +82 +-35 +-127 +-127 +-74 +49 +124 +124 +79 +-38 +-127 +-127 +-72 +52 +124 +124 +124 +99 +-21 +-127 +-127 +-127 +-110 +29 +124 +124 +124 +98 +-22 +-127 +-127 +-127 +-103 +35 +124 +124 +124 +104 +-16 +-124 +-127 +-127 +-101 +37 +124 +124 +124 +104 +-16 +-124 +-127 +-127 +-102 +37 +124 +124 +124 +107 +-14 +-122 +-127 +-127 +-98 +39 +124 +124 +83 +-34 +-127 +-127 +-63 +62 +124 +124 +88 +-30 +-127 +-127 +-68 +56 +124 +124 +85 +-32 +-127 +-127 +-72 +52 +124 +124 +83 +-34 +-127 +-127 +-70 +54 +124 +124 +80 +-37 +-127 +-127 +-74 +49 +124 +124 +80 +-37 +-127 +-127 +-75 +50 +124 +124 +83 +-35 +-127 +-127 +-127 +-99 +41 +124 +124 +124 +113 +-8 +-117 +-127 +-127 +-97 +41 +124 +124 +124 +111 +-11 +-118 +-127 +-127 +-99 +38 +124 +124 +124 +107 +-13 +-121 +-127 +-127 +-99 +38 +124 +124 +124 +106 +-14 +-122 +-127 +-127 +-97 +40 +124 +124 +124 +107 +-14 +-121 +-127 +-71 +50 +124 +124 +73 +-44 +-127 +-127 +-81 +44 +124 +124 +76 +-40 +-127 +-127 +-75 +49 +124 +124 +77 +-39 +-127 +-127 +-75 +50 +124 +124 +78 +-38 +-127 +-127 +-77 +47 +124 +124 +78 +-39 +-127 +-127 +-76 +49 +124 +124 +82 +-35 +-127 +-127 +-127 +-98 +42 +124 +124 +124 +113 +-9 +-117 +-127 +-127 +-97 +41 +124 +124 +124 +111 +-11 +-119 +-127 +-127 +-99 +39 +124 +124 +124 +108 +-13 +-120 +-127 +-127 +-99 +38 +124 +124 +124 +105 +-15 +-123 +-127 +-127 +-97 +40 +124 +124 +124 +110 +-12 +-119 +-127 +-72 +47 +124 +124 +72 +-44 +-127 +-127 +-81 +44 +124 +124 +76 +-41 +-127 +-127 +-78 +45 +124 +124 +77 +-39 +-127 +-127 +-76 +47 +124 +124 +75 +-41 +-127 +-127 +-74 +49 +124 +124 +76 +-41 +-127 +-127 +-73 +51 +124 +124 +79 +-38 +-127 +-127 +-74 +49 +124 +124 +124 +99 +-21 +-127 +-127 +-127 +-111 +27 +121 +124 +124 +99 +-20 +-127 +-127 +-127 +-106 +33 +124 +124 +124 +104 +-17 +-124 +-127 +-127 +-101 +35 +124 +124 +124 +104 +-17 +-124 +-127 +-127 +-98 +40 +124 +124 +124 +108 +-13 +-121 +-127 +-127 +-100 +38 +124 +124 +82 +-35 +-127 +-127 +-63 +61 +124 +124 +86 +-32 +-127 +-127 +-66 +58 +124 +124 +84 +-34 +-127 +-127 +-70 +55 +124 +124 +82 +-35 +-127 +-127 +-74 +50 +124 +124 +82 +-36 +-127 +-127 +-71 +53 +124 +124 +79 +-38 +-127 +-127 +-74 +49 +124 +124 +124 +100 +-20 +-127 +-127 +-127 +-108 +30 +124 +124 +124 +98 +-22 +-127 +-127 +-127 +-104 +35 +124 +124 +124 +106 +-15 +-122 +-127 +-127 +-103 +35 +124 +124 +124 +105 +-16 +-123 +-127 +-127 +-103 +36 +124 +124 +124 +106 +-15 +-122 +-127 +-127 +-99 +37 +124 +124 +124 +105 +-15 +-123 +-127 +-127 +-100 +37 +124 +124 +124 +104 +-16 +-124 +-127 +-127 +-99 +38 +124 +124 +124 +108 +-12 +-120 +-127 +-127 +-97 +40 +124 +124 +124 +104 +-16 +-124 +-127 +-127 +-99 +40 +124 +124 +124 +109 +-12 +-120 +-127 +-127 +-101 +37 +124 +124 +86 +-31 +-127 +-127 +-65 +59 +124 +124 +88 +-30 +-127 +-127 +-66 +56 +124 +124 +82 +-35 +-127 +-127 +-68 +56 +124 +124 +83 +-35 +-127 +-127 +-72 +52 +124 +124 +82 +-36 +-127 +-127 +-75 +49 +124 +124 +79 +-37 +-127 +-127 +-73 +50 +124 +124 +80 +-37 +-127 +-127 +-127 +-96 +44 +124 +124 +124 +113 +-9 +-117 +-127 +-127 +-96 +42 +124 +124 +124 +109 +-12 +-120 +-127 +-127 +-98 +41 +124 +124 +124 +109 +-12 +-120 +-127 +-127 +-97 +40 +124 +124 +124 +107 +-14 +-121 +-127 +-127 +-100 +38 +124 +124 +124 +111 +-10 +-118 +-127 +-72 +48 +124 +124 +72 +-45 +-127 +-127 +-78 +46 +124 +124 +73 +-44 +-127 +-127 +-77 +48 +124 +124 +79 +-38 +-127 +-127 +-77 +48 +124 +124 +78 +-39 +-127 +-127 +-76 +49 +124 +124 +78 +-39 +-127 +-127 +-74 +51 +124 +124 +80 +-37 +-127 +-127 +-73 +52 +124 +124 +77 +-40 +-127 +-127 +-76 +50 +124 +124 +79 +-38 +-127 +-127 +-76 +48 +124 +124 +82 +-35 +-127 +-127 +-76 +47 +124 +124 +77 +-40 +-127 +-127 +-75 +48 +124 +124 +79 +-38 +-127 +-127 +-76 +49 +124 +124 +79 +-38 +-127 +-127 +-75 +50 +124 +124 +124 +98 +-22 +-127 +-127 +-127 +-110 +28 +123 +124 +124 +99 +-20 +-127 +-127 +-127 +-106 +31 +124 +124 +124 +104 +-16 +-124 +-127 +-127 +-100 +37 +124 +124 +124 +102 +-18 +-125 +-127 +-127 +-100 +37 +124 +124 +124 +104 +-16 +-123 +-127 +-127 +-99 +40 +124 +124 +86 +-31 +-127 +-127 +-63 +60 +124 +124 +86 +-31 +-127 +-127 +-69 +55 +124 +124 +85 +-32 +-127 +-127 +-71 +52 +124 +124 +81 +-36 +-127 +-127 +-71 +52 +124 +124 +79 +-38 +-127 +-127 +-70 +54 +124 +124 +79 +-38 +-127 +-127 +-74 +51 +124 +124 +124 +101 +-19 +-127 +-127 +-127 +-107 +29 +122 +124 +124 +98 +-22 +-127 +-127 +-127 +-104 +32 +124 +124 +124 +105 +-15 +-122 +-127 +-127 +-103 +34 +124 +124 +124 +104 +-16 +-124 +-127 +-127 +-100 +37 +124 +124 +124 +104 +-16 +-124 +-127 +-127 +-98 +39 +124 +124 +124 +104 +-16 +-124 +-127 +-127 +-98 +40 +124 +124 +124 +107 +-14 +-122 +-127 +-127 +-100 +38 +124 +124 +124 +110 +-11 +-120 +-127 +-127 +-98 +38 +124 +124 +124 +105 +-15 +-123 +-127 +-127 +-101 +37 +124 +124 +124 +107 +-14 +-121 +-127 +-127 +-100 +37 +124 +124 +85 +-32 +-127 +-127 +-62 +62 +124 +124 +90 +-28 +-127 +-127 +-67 +55 +124 +124 +84 +-33 +-127 +-127 +-71 +53 +124 +124 +85 +-33 +-127 +-127 +-72 +50 +124 +124 +79 +-37 +-127 +-127 +-71 +54 +124 +124 +79 +-38 +-127 +-127 +-73 +52 +124 +124 +82 +-36 +-127 +-127 +-74 +50 +124 +124 +80 +-37 +-127 +-127 +-76 +47 +124 +124 +78 +-39 +-127 +-127 +-74 +50 +124 +124 +80 +-37 +-127 +-127 +-74 +50 +124 +124 +79 +-38 +-127 +-127 +-76 +48 +124 +124 +80 +-37 +-127 +-127 +-75 +48 +124 +124 +82 +-35 +-127 +-127 +-127 +-97 +42 +124 +124 +124 +110 +-11 +-119 +-127 +-127 +-94 +45 +124 +124 +124 +110 +-11 +-119 +-127 +-127 +-98 +39 +124 +124 +124 +109 +-13 +-120 +-127 +-127 +-98 +41 +124 +124 +124 +106 +-15 +-122 +-127 +-127 +-98 +41 +124 +124 +124 +111 +-10 +-118 +-127 +-74 +46 +124 +124 +72 +-44 +-127 +-127 +-81 +43 +124 +124 +72 +-44 +-127 +-127 +-76 +49 +124 +124 +77 +-39 +-127 +-127 +-76 +49 +124 +124 +77 +-40 +-127 +-127 +-78 +46 +124 +124 +78 +-39 +-127 +-127 +-73 +51 +124 +124 +77 +-39 +-127 +-127 +-73 +51 +124 +124 +124 +96 +-24 +-127 +-127 +-127 +-109 +30 +124 +124 +124 +98 +-22 +-127 +-127 +-127 +-105 +34 +124 +124 +124 +105 +-15 +-123 +-127 +-127 +-104 +35 +124 +124 +124 +106 +-15 +-122 +-127 +-127 +-103 +35 +124 +124 +124 +106 +-14 +-122 +-127 +-127 +-103 +35 +124 +124 +84 +-32 +-127 +-127 +-64 +59 +124 +124 +86 +-32 +-127 +-127 +-65 +58 +124 +124 +82 +-35 +-127 +-127 +-70 +54 +124 +124 +83 +-35 +-127 +-127 +-73 +51 +124 +124 +81 +-36 +-127 +-127 +-73 +50 +124 +124 +78 +-39 +-127 +-127 +-72 +51 +124 +124 +124 +98 +-22 +-127 +-127 +-127 +-106 +31 +124 +124 +124 +97 +-22 +-127 +-127 +-127 +-104 +34 +124 +124 +124 +108 +-12 +-120 +-127 +-127 +-102 +35 +124 +124 +124 +105 +-16 +-123 +-127 +-127 +-102 +36 +124 +124 +124 +105 +-15 +-123 +-127 +-127 +-102 +36 +124 +124 +85 +-32 +-127 +-127 +-62 +61 +124 +124 +88 +-30 +-127 +-127 +-69 +56 +124 +124 +82 +-35 +-127 +-127 +-70 +55 +124 +124 +84 +-34 +-127 +-127 +-73 +52 +124 +124 +81 +-36 +-127 +-127 +-75 +49 +124 +124 +78 +-38 +-127 +-127 +-72 +52 +124 +124 +83 +-34 +-127 +-127 +-127 +-97 +42 +124 +124 +124 +109 +-12 +-120 +-127 +-127 +-94 +45 +124 +124 +124 +112 +-10 +-118 +-127 +-127 +-99 +40 +124 +124 +124 +108 +-13 +-121 +-127 +-127 +-99 +40 +124 +124 +124 +109 +-13 +-120 +-127 +-127 +-101 +37 +124 +124 +124 +110 +-11 +-119 +-127 +-127 +-101 +36 +124 +124 +124 +105 +-16 +-123 +-127 +-127 +-100 +37 +124 +124 +124 +104 +-16 +-123 +-127 +-127 +-97 +41 +124 +124 +124 +109 +-12 +-120 +-127 +-127 +-100 +39 +124 +124 +124 +105 +-16 +-123 +-127 +-127 +-99 +40 +124 +124 +124 +108 +-13 +-121 +-127 +-75 +47 +124 +124 +73 +-43 +-127 +-127 +-81 +43 +124 +124 +72 +-44 +-127 +-127 +-78 +47 +124 +124 +79 +-38 +-127 +-127 +-76 +47 +124 +124 +76 +-41 +-127 +-127 +-75 +48 +124 +124 +78 +-39 +-127 +-127 +-73 +50 +124 +124 +80 +-37 +-127 +-127 +-127 +-96 +44 +124 +124 +124 +111 +-11 +-119 +-127 +-127 +-94 +45 +124 +124 +124 +109 +-12 +-120 +-127 +-127 +-97 +42 +124 +124 +124 +109 +-13 +-120 +-127 +-127 +-100 +39 +124 +124 +124 +109 +-13 +-120 +-127 +-127 +-101 +37 +124 +124 +124 +110 +-10 +-118 +-127 +-70 +50 +124 +124 +75 +-42 +-127 +-127 +-82 +43 +124 +124 +74 +-42 +-127 +-127 +-79 +46 +124 +124 +80 +-37 +-127 +-127 +-74 +48 +124 +124 +74 +-42 +-127 +-127 +-77 +47 +124 +124 +76 +-41 +-127 +-127 +-74 +49 +124 +124 +76 +-40 +-127 +-127 +-72 +52 +124 +124 +77 +-40 +-127 +-127 +-75 +50 +124 +124 +80 +-37 +-127 +-127 +-74 +49 +124 +124 +79 +-38 +-127 +-127 +-73 +52 +124 +124 +77 +-40 +-127 +-127 +-74 +51 +124 +124 +79 +-38 +-127 +-127 +-75 +50 +124 +124 +80 +-37 +-127 +-127 +-76 +48 +124 +124 +124 +98 +-21 +-127 +-127 +-127 +-111 +26 +120 +124 +124 +98 +-22 +-127 +-127 +-127 +-105 +33 +124 +124 +124 +108 +-13 +-121 +-127 +-127 +-101 +38 +124 +124 +124 +102 +-18 +-126 +-127 +-127 +-100 +38 +124 +124 +124 +104 +-17 +-124 +-127 +-127 +-99 +40 +124 +124 +87 +-30 +-127 +-127 +-62 +60 +124 +124 +88 +-31 +-127 +-127 +-67 +56 +124 +124 +82 +-36 +-127 +-127 +-69 +53 +124 +124 +82 +-35 +-127 +-127 +-70 +54 +124 +124 +82 +-36 +-127 +-127 +-74 +51 +124 +124 +78 +-39 +-127 +-127 +-74 +51 +124 +124 +82 +-35 +-127 +-127 +-74 +49 +124 +124 +78 +-39 +-127 +-127 +-74 +48 +124 +124 +77 +-39 +-127 +-127 +-73 +50 +124 +124 +79 +-37 +-127 +-127 +-73 +51 +124 +124 +78 +-39 +-127 +-127 +-76 +49 +124 +124 +80 +-37 +-127 +-127 +-75 +48 +124 +124 +81 +-36 +-127 +-127 +-73 +50 +124 +124 +76 +-40 +-127 +-127 +-73 +52 +124 +124 +79 +-38 +-127 +-127 +-76 +49 +124 +124 +82 +-35 +-127 +-127 +-74 +48 +124 +124 +76 +-41 +-127 +-127 +-73 +51 +124 +124 +80 +-37 +-127 +-127 +-76 +48 +124 +124 +78 +-38 +-127 +-127 +-76 +48 +124 +124 +124 +99 +-21 +-127 +-127 +-127 +-111 +27 +122 +124 +124 +100 +-20 +-127 +-127 +-127 +-107 +31 +124 +124 +124 +104 +-17 +-124 +-127 +-127 +-103 +35 +124 +124 +124 +103 +-17 +-125 +-127 +-127 +-100 +37 +124 +124 +124 +105 +-15 +-123 +-127 +-127 +-100 +37 +124 +124 +124 +105 +-15 +-123 +-127 +-127 +-99 +37 +124 +124 +124 +105 +-15 +-123 +-127 +-127 +-97 +40 +124 +124 +124 +110 +-11 +-119 +-127 +-127 +-100 +39 +124 +124 +124 +106 +-15 +-123 +-127 +-127 +-99 +39 +124 +124 +124 +107 +-13 +-121 +-127 +-127 +-101 +37 +124 +124 +124 +107 +-13 +-121 +-127 +-127 +-102 +36 +124 +124 +124 +107 +-14 +-121 +-127 +-127 +-100 +36 +124 +124 +124 +108 +-13 +-120 +-127 +-127 +-98 +38 +124 +124 +124 +104 +-16 +-123 +-127 +-127 +-100 +37 +124 +124 +124 +107 +-14 +-122 +-127 +-127 +-98 +40 +124 +124 +84 +-34 +-127 +-127 +-64 +61 +124 +124 +88 +-30 +-127 +-127 +-68 +56 +124 +124 +85 +-32 +-127 +-127 +-68 +55 +124 +124 +80 +-37 +-127 +-127 +-70 +53 +124 +124 +78 +-39 +-127 +-127 +-72 +53 +124 +124 +80 +-38 +-127 +-127 +-74 +51 +124 +124 +124 +100 +-20 +-127 +-127 +-127 +-111 +27 +122 +124 +124 +99 +-20 +-127 +-127 +-127 +-107 +31 +124 +124 +124 +105 +-15 +-123 +-127 +-127 +-100 +36 +124 +124 +124 +103 +-17 +-124 +-127 +-127 +-100 +39 +124 +124 +124 +105 +-15 +-123 +-127 +-127 +-98 +39 +124 +124 +124 +104 +-16 +-124 +-127 +-127 +-98 +39 +124 +124 +124 +108 +-13 +-121 +-127 +-127 +-99 +38 +124 +124 +124 +110 +-10 +-118 +-127 +-127 +-101 +37 +124 +124 +124 +106 +-14 +-122 +-127 +-127 +-101 +36 +124 +124 +124 +107 +-14 +-122 +-127 +-127 +-101 +36 +124 +124 +84 +-33 +-127 +-127 +-62 +62 +124 +124 +86 +-32 +-127 +-127 +-67 +58 +124 +124 +85 +-33 +-127 +-127 +-72 +53 +124 +124 +85 +-32 +-127 +-127 +-73 +50 +124 +124 +79 +-38 +-127 +-127 +-72 +51 +124 +124 +78 +-39 +-127 +-127 +-72 +53 +124 +124 +81 +-36 +-127 +-127 +-74 +50 +124 +124 +80 +-37 +-127 +-127 +-76 +48 +124 +124 +78 +-38 +-127 +-127 +-72 +52 +124 +124 +83 +-35 +-127 +-127 +-75 +50 +124 +124 +78 +-39 +-127 +-127 +-72 +51 +124 +124 +78 +-39 +-127 +-127 +-75 +51 +124 +124 +81 +-36 +-127 +-127 +-127 +-97 +42 +124 +124 +124 +110 +-11 +-119 +-127 +-127 +-94 +42 +124 +124 +124 +108 +-13 +-121 +-127 +-127 +-96 +41 +124 +124 +124 +107 +-14 +-122 +-127 +-127 +-96 +43 +124 +124 +124 +107 +-14 +-122 +-127 +-127 +-99 +40 +124 +124 +124 +109 +-12 +-120 +-127 +-73 +48 +124 +124 +74 +-43 +-127 +-127 +-79 +44 +124 +124 +73 +-44 +-127 +-127 +-77 +46 +124 +124 +77 +-40 +-127 +-127 +-73 +50 +124 +124 +75 +-42 +-127 +-127 +-76 +49 +124 +124 +78 +-39 +-127 +-127 +-76 +48 +124 +124 +79 +-38 +-127 +-127 +-72 +51 +124 +124 +124 +96 +-23 +-127 +-127 +-127 +-108 +31 +124 +124 +124 +97 +-22 +-127 +-127 +-127 +-104 +34 +124 +124 +124 +103 +-17 +-124 +-127 +-127 +-101 +37 +124 +124 +124 +104 +-16 +-124 +-127 +-127 +-101 +37 +124 +124 +124 +105 +-15 +-123 +-127 +-127 +-101 +38 +124 +124 +124 +108 +-13 +-121 +-127 +-127 +-102 +36 +124 +124 +124 +107 +-13 +-121 +-127 +-127 +-100 +37 +124 +124 +124 +107 +-13 +-121 +-127 +-127 +-97 +40 +124 +124 +124 +109 +-12 +-120 +-127 +-127 +-100 +36 +124 +124 +124 +106 +-15 +-122 +-127 +-127 +-100 +39 +124 +124 +84 +-33 +-127 +-127 +-65 +61 +124 +124 +89 +-29 +-127 +-127 +-69 +55 +124 +124 +85 +-33 +-127 +-127 +-72 +52 +124 +124 +81 +-36 +-127 +-127 +-70 +53 +124 +124 +79 +-38 +-127 +-127 +-72 +52 +124 +124 +82 +-36 +-127 +-127 +-72 +51 +124 +124 +124 +99 +-21 +-127 +-127 +-127 +-109 +28 +121 +124 +124 +99 +-21 +-127 +-127 +-127 +-105 +34 +124 +124 +124 +106 +-15 +-123 +-127 +-127 +-102 +36 +124 +124 +124 +105 +-15 +-123 +-127 +-127 +-102 +35 +124 +124 +124 +106 +-15 +-123 +-127 +-127 +-101 +37 +124 +124 +83 +-34 +-127 +-127 +-64 +59 +124 +124 +86 +-31 +-127 +-127 +-65 +57 +124 +124 +83 +-35 +-127 +-127 +-68 +56 +124 +124 +82 +-35 +-127 +-127 +-71 +54 +124 +124 +81 +-36 +-127 +-127 +-74 +50 +124 +124 +81 +-36 +-127 +-127 +-74 +49 +124 +124 +80 +-37 +-127 +-127 +-127 +-96 +44 +124 +124 +124 +110 +-11 +-119 +-127 +-127 +-93 +45 +124 +124 +124 +108 +-13 +-120 +-127 +-127 +-96 +42 +124 +124 +124 +108 +-13 +-120 +-127 +-127 +-99 +39 +124 +124 +124 +109 +-12 +-120 +-127 +-127 +-101 +37 +124 +124 +124 +109 +-12 +-119 +-127 +-72 +47 +124 +124 +70 +-46 +-127 +-127 +-80 +46 +124 +124 +76 +-41 +-127 +-127 +-77 +48 +124 +124 +77 +-40 +-127 +-127 +-76 +47 +124 +124 +75 +-42 +-127 +-127 +-73 +51 +124 +124 +77 +-40 +-127 +-127 +-74 +50 +124 +124 +84 +-34 +-127 +-127 +-127 +-100 +40 +124 +124 +124 +112 +-9 +-117 +-127 +-127 +-97 +41 +124 +124 +124 +110 +-11 +-119 +-127 +-127 +-96 +41 +124 +124 +124 +106 +-14 +-122 +-127 +-127 +-98 +40 +124 +124 +124 +107 +-14 +-121 +-127 +-127 +-100 +38 +124 +124 +124 +112 +-9 +-118 +-127 +-73 +48 +124 +124 +74 +-43 +-127 +-127 +-77 +48 +124 +124 +74 +-43 +-127 +-127 +-79 +45 +124 +124 +78 +-38 +-127 +-127 +-76 +50 +124 +124 +77 +-40 +-127 +-127 +-74 +49 +124 +124 +77 +-40 +-127 +-127 +-76 +48 +124 +124 +79 +-38 +-127 +-127 +-75 +48 +124 +124 +77 +-39 +-127 +-127 +-74 +50 +124 +124 +77 +-40 +-127 +-127 +-73 +52 +124 +124 +80 +-38 +-127 +-127 +-75 +49 +124 +124 +79 +-38 +-127 +-127 +-72 +52 +124 +124 +77 +-40 +-127 +-127 +-73 +52 +124 +124 +77 +-40 +-127 +-127 +-74 +50 +124 +124 +124 +100 +-20 +-127 +-127 +-127 +-110 +27 +122 +124 +124 +99 +-21 +-127 +-127 +-127 +-106 +32 +124 +124 +124 +107 +-14 +-122 +-127 +-127 +-104 +34 +124 +124 +124 +104 +-16 +-123 +-127 +-127 +-98 +38 +124 +124 +124 +103 +-17 +-125 +-127 +-127 +-100 +36 +124 +124 +83 +-34 +-127 +-127 +-62 +61 +124 +124 +86 +-32 +-127 +-127 +-67 +58 +124 +124 +85 +-33 +-127 +-127 +-68 +55 +124 +124 +82 +-35 +-127 +-127 +-72 +51 +124 +124 +80 +-37 +-127 +-127 +-72 +50 +124 +124 +78 +-39 +-127 +-127 +-71 +53 +124 +124 +82 +-36 +-127 +-127 +-127 +-97 +44 +124 +124 +124 +112 +-10 +-118 +-127 +-127 +-94 +43 +124 +124 +124 +110 +-11 +-119 +-127 +-127 +-94 +43 +124 +124 +124 +107 +-14 +-121 +-127 +-127 +-98 +39 +124 +124 +124 +106 +-14 +-122 +-127 +-127 +-96 +41 +124 +124 +124 +110 +-11 +-119 +-127 +-73 +49 +124 +124 +73 +-44 +-127 +-127 +-80 +45 +124 +124 +76 +-40 +-127 +-127 +-78 +45 +124 +124 +78 +-38 +-127 +-127 +-78 +47 +124 +124 +78 +-39 +-127 +-127 +-78 +46 +124 +124 +78 +-39 +-127 +-127 +-76 +47 +124 +124 +81 +-36 +-127 +-127 +-127 +-98 +41 +124 +124 +124 +111 +-10 +-118 +-127 +-127 +-93 +43 +124 +124 +124 +108 +-13 +-121 +-127 +-127 +-95 +42 +124 +124 +124 +109 +-13 +-120 +-127 +-127 +-98 +40 +124 +124 +124 +109 +-12 +-120 +-127 +-127 +-99 +38 +124 +124 +124 +109 +-12 +-119 +-127 +-74 +47 +124 +124 +73 +-43 +-127 +-127 +-81 +43 +124 +124 +73 +-43 +-127 +-127 +-76 +47 +124 +124 +76 +-40 +-127 +-127 +-75 +49 +124 +124 +78 +-39 +-127 +-127 +-76 +48 +124 +124 +77 +-40 +-127 +-127 +-74 +49 +124 +124 +77 +-39 +-127 +-127 +-73 +50 +124 +124 +124 +96 +-24 +-127 +-127 +-127 +-108 +28 +122 +124 +124 +98 +-22 +-127 +-127 +-127 +-102 +35 +124 +124 +124 +103 +-17 +-125 +-127 +-127 +-99 +39 +124 +124 +124 +104 +-17 +-124 +-127 +-127 +-100 +39 +124 +124 +124 +106 +-15 +-123 +-127 +-127 +-101 +38 +124 +124 +86 +-32 +-127 +-127 +-66 +58 +124 +124 +88 +-30 +-127 +-127 +-67 +56 +124 +124 +82 +-36 +-127 +-127 +-69 +56 +124 +124 +80 +-37 +-127 +-127 +-73 +51 +124 +124 +82 +-35 +-127 +-127 +-73 +50 +124 +124 +79 +-38 +-127 +-127 +-71 +52 +124 +124 +124 +98 +-22 +-127 +-127 +-127 +-106 +31 +124 +124 +124 +97 +-22 +-127 +-127 +-127 +-104 +34 +124 +124 +124 +106 +-14 +-122 +-127 +-127 +-101 +37 +124 +124 +124 +106 +-15 +-122 +-127 +-127 +-102 +36 +124 +124 +124 +107 +-14 +-122 +-127 +-127 +-99 +38 +124 +124 +82 +-35 +-127 +-127 +-65 +58 +124 +124 +87 +-31 +-127 +-127 +-68 +55 +124 +124 +83 +-35 +-127 +-127 +-68 +56 +124 +124 +82 +-36 +-127 +-127 +-71 +54 +124 +124 +80 +-37 +-127 +-127 +-74 +50 +124 +124 +81 +-36 +-127 +-127 +-74 +49 +124 +124 +82 +-36 +-127 +-127 +-127 +-94 +45 +124 +124 +124 +110 +-11 +-119 +-127 +-127 +-94 +44 +124 +124 +124 +108 +-13 +-120 +-127 +-127 +-96 +41 +124 +124 +124 +109 +-12 +-120 +-127 +-127 +-99 +40 +124 +124 +124 +107 +-14 +-122 +-127 +-127 +-99 +40 +124 +124 +124 +109 +-12 +-120 +-127 +-71 +48 +124 +124 +71 +-45 +-127 +-127 +-80 +44 +124 +124 +74 +-42 +-127 +-127 +-76 +47 +124 +124 +78 +-39 +-127 +-127 +-73 +50 +124 +124 +75 +-41 +-127 +-127 +-75 +50 +124 +124 +78 +-39 +-127 +-127 +-76 +49 +124 +124 +83 +-33 +-127 +-127 +-127 +-95 +42 +124 +124 +124 +111 +-10 +-118 +-127 +-127 +-95 +42 +124 +124 +124 +109 +-12 +-120 +-127 +-127 +-95 +41 +124 +124 +124 +107 +-14 +-121 +-127 +-127 +-98 +38 +124 +124 +124 +106 +-14 +-122 +-127 +-127 +-98 +39 +124 +124 +124 +108 +-12 +-120 +-127 +-71 +50 +124 +124 +73 +-44 +-127 +-127 +-79 +44 +124 +124 +74 +-42 +-127 +-127 +-79 +45 +124 +124 +79 +-38 +-127 +-127 +-75 +48 +124 +124 +76 +-41 +-127 +-127 +-75 +48 +124 +124 +76 +-40 +-127 +-127 +-73 +52 +124 +124 +79 +-38 +-127 +-127 +-74 +50 +124 +124 +124 +99 +-21 +-127 +-127 +-127 +-111 +27 +122 +124 +124 +100 +-20 +-127 +-127 +-127 +-107 +31 +124 +124 +124 +104 +-16 +-124 +-127 +-127 +-102 +34 +124 +124 +124 +103 +-17 +-125 +-127 +-127 +-101 +36 +124 +124 +124 +105 +-15 +-123 +-127 +-127 +-97 +40 +124 +124 +84 +-34 +-127 +-127 +-64 +62 +124 +124 +90 +-29 +-127 +-127 +-68 +56 +124 +124 +85 +-32 +-127 +-127 +-68 +54 +124 +124 +80 +-37 +-127 +-127 +-70 +54 +124 +124 +80 +-37 +-127 +-127 +-74 +50 +124 +124 +80 +-38 +-127 +-127 +-73 +52 +124 +124 +124 +98 +-22 +-127 +-127 +-127 +-107 +31 +124 +124 +124 +101 +-19 +-127 +-127 +-127 +-105 +33 +124 +124 +124 +106 +-15 +-122 +-127 +-127 +-102 +36 +124 +124 +124 +104 +-16 +-124 +-127 +-127 +-102 +36 +124 +124 +124 +103 +-17 +-124 +-127 +-127 +-102 +35 +124 +124 +85 +-32 +-127 +-127 +-65 +59 +124 +124 +89 +-29 +-127 +-127 +-68 +55 +124 +124 +83 +-34 +-127 +-127 +-68 +55 +124 +124 +82 +-36 +-127 +-127 +-72 +53 +124 +124 +80 +-37 +-127 +-127 +-74 +50 +124 +124 +81 +-36 +-127 +-127 +-74 +49 +124 +124 +81 +-36 +-127 +-127 +-127 +-97 +42 +124 +124 +124 +110 +-11 +-119 +-127 +-127 +-93 +44 +124 +124 +124 +108 +-13 +-120 +-127 +-127 +-98 +40 +124 +124 +124 +109 +-12 +-120 +-127 +-127 +-99 +40 +124 +124 +124 +108 +-13 +-120 +-127 +-127 +-100 +37 +124 +124 +124 +110 +-11 +-119 +-127 +-70 +51 +124 +124 +73 +-44 +-127 +-127 +-81 +42 +124 +124 +75 +-42 +-127 +-127 +-79 +47 +124 +124 +79 +-38 +-127 +-127 +-77 +47 +124 +124 +77 +-39 +-127 +-127 +-78 +46 +124 +124 +77 +-40 +-127 +-127 +-74 +49 +124 +124 +80 +-36 +-127 +-127 +-127 +-97 +44 +124 +124 +124 +112 +-9 +-117 +-127 +-127 +-96 +41 +124 +124 +124 +111 +-11 +-119 +-127 +-127 +-98 +40 +124 +124 +124 +110 +-12 +-119 +-127 +-127 +-98 +38 +124 +124 +124 +107 +-14 +-122 +-127 +-127 +-100 +37 +124 +124 +124 +110 +-10 +-118 +-127 +-70 +51 +124 +124 +71 +-45 +-127 +-127 +-80 +44 +124 +124 +72 +-44 +-127 +-127 +-76 +48 +124 +124 +77 +-40 +-127 +-127 +-75 +50 +124 +124 +78 +-39 +-127 +-127 +-77 +47 +124 +124 +78 +-39 +-127 +-127 +-76 +47 +124 +124 +78 +-38 +-127 +-127 +-74 +49 +124 +124 +124 +97 +-23 +-127 +-127 +-127 +-108 +29 +124 +124 +124 +98 +-22 +-127 +-127 +-127 +-104 +34 +124 +124 +124 +106 +-15 +-123 +-127 +-127 +-102 +36 +124 +124 +124 +102 +-18 +-126 +-127 +-127 +-99 +38 +124 +124 +124 +103 +-17 +-124 +-127 +-127 +-99 +38 +124 +124 +82 +-35 +-127 +-127 +-63 +62 +124 +124 +89 +-29 +-127 +-127 +-68 +56 +124 +124 +84 +-33 +-127 +-127 +-68 +56 +124 +124 +80 +-37 +-127 +-127 +-71 +54 +124 +124 +79 +-38 +-127 +-127 +-73 +52 +124 +124 +81 +-36 +-127 +-127 +-75 +49 +124 +124 +124 +100 +-20 +-127 +-127 +-127 +-107 +29 +122 +124 +124 +96 +-23 +-127 +-127 +-127 +-105 +32 +124 +124 +124 +105 +-15 +-123 +-127 +-127 +-100 +39 +124 +124 +124 +103 +-17 +-125 +-127 +-127 +-99 +38 +124 +124 +124 +103 +-17 +-124 +-127 +-127 +-100 +38 +124 +124 +86 +-31 +-127 +-127 +-66 +59 +124 +124 +88 +-30 +-127 +-127 +-69 +54 +124 +124 +84 +-33 +-127 +-127 +-70 +53 +124 +124 +82 +-36 +-127 +-127 +-72 +53 +124 +124 +80 +-37 +-127 +-127 +-74 +51 +124 +124 +81 +-37 +-127 +-127 +-75 +49 +124 +124 +83 +-34 +-127 +-127 +-127 +-99 +41 +124 +124 +124 +110 +-11 +-119 +-127 +-127 +-93 +44 +124 +124 +124 +108 +-13 +-120 +-127 +-127 +-95 +42 +124 +124 +124 +107 +-14 +-122 +-127 +-127 +-96 +42 +124 +124 +124 +106 +-14 +-122 +-127 +-127 +-98 +41 +124 +124 +124 +109 +-12 +-120 +-127 +-73 +48 +124 +124 +74 +-42 +-127 +-127 +-81 +42 +124 +124 +73 +-43 +-127 +-127 +-75 +49 +124 +124 +80 +-37 +-127 +-127 +-76 +48 +124 +124 +78 +-39 +-127 +-127 +-78 +46 +124 +124 +77 +-39 +-127 +-127 +-76 +47 +124 +124 +80 +-36 +-127 +-127 +-127 +-97 +41 +124 +124 +124 +110 +-11 +-119 +-127 +-127 +-93 +45 +124 +124 +124 +108 +-14 +-121 +-127 +-127 +-97 +42 +124 +124 +124 +109 +-12 +-120 +-127 +-127 +-97 +40 +124 +124 +124 +106 +-15 +-122 +-127 +-127 +-99 +38 +124 +124 +124 +110 +-11 +-119 +-127 +-70 +51 +124 +124 +73 +-44 +-127 +-127 +-81 +43 +124 +124 +75 +-42 +-127 +-127 +-78 +47 +124 +124 +80 +-36 +-127 +-127 +-77 +47 +124 +124 +77 +-40 +-127 +-127 +-77 +46 +124 +124 +77 +-40 +-127 +-127 +-75 +48 +124 +124 +78 +-39 +-127 +-127 +-72 +52 +124 +124 +124 +96 +-23 +-127 +-127 +-127 +-107 +31 +124 +124 +124 +98 +-22 +-127 +-127 +-127 +-104 +35 +124 +124 +124 +104 +-16 +-124 +-127 +-127 +-103 +36 +124 +124 +124 +106 +-15 +-122 +-127 +-127 +-103 +35 +124 +124 +124 +105 +-16 +-123 +-127 +-127 +-100 +37 +124 +124 +81 +-35 +-127 +-127 +-63 +61 +124 +124 +86 +-32 +-127 +-127 +-66 +58 +124 +124 +84 +-34 +-127 +-127 +-70 +54 +124 +124 +82 +-35 +-127 +-127 +-73 +51 +124 +124 +81 +-36 +-127 +-127 +-70 +54 +124 +124 +82 +-36 +-127 +-127 +-75 +50 +124 +124 +124 +97 +-23 +-127 +-127 +-127 +-108 +30 +124 +124 +124 +100 +-20 +-127 +-127 +-127 +-107 +32 +124 +124 +124 +106 +-15 +-123 +-127 +-127 +-103 +34 +124 +124 +124 +105 +-15 +-123 +-127 +-127 +-102 +36 +124 +124 +124 +106 +-14 +-122 +-127 +-127 +-101 +36 +124 +124 +85 +-32 +-127 +-127 +-62 +63 +124 +124 +88 +-30 +-127 +-127 +-69 +56 +124 +124 +85 +-33 +-127 +-127 +-72 +51 +124 +124 +84 +-34 +-127 +-127 +-70 +54 +124 +124 +78 +-39 +-127 +-127 +-73 +52 +124 +124 +79 +-38 +-127 +-127 +-74 +50 +124 +124 +83 +-35 +-127 +-127 +-127 +-99 +42 +124 +124 +124 +112 +-9 +-117 +-127 +-127 +-97 +41 +124 +124 +124 +110 +-11 +-119 +-127 +-127 +-96 +41 +124 +124 +124 +106 +-14 +-121 +-127 +-127 +-99 +39 +124 +124 +124 +108 +-13 +-121 +-127 +-127 +-98 +41 +124 +124 +124 +111 +-10 +-118 +-127 +-74 +47 +124 +124 +73 +-43 +-127 +-127 +-82 +42 +124 +124 +74 +-43 +-127 +-127 +-77 +46 +124 +124 +77 +-39 +-127 +-127 +-73 +50 +124 +124 +76 +-41 +-127 +-127 +-76 +49 +124 +124 +78 +-38 +-127 +-127 +-74 +49 +124 +124 +81 +-35 +-127 +-127 +-127 +-95 +45 +124 +124 +124 +113 +-9 +-117 +-127 +-127 +-95 +43 +124 +124 +124 +107 +-14 +-122 +-127 +-127 +-96 +42 +124 +124 +124 +109 +-12 +-120 +-127 +-127 +-98 +40 +124 +124 +124 +105 +-16 +-123 +-127 +-127 +-99 +39 +124 +124 +124 +109 +-12 +-120 +-127 +-72 +47 +124 +124 +71 +-45 +-127 +-127 +-80 +43 +124 +124 +74 +-43 +-127 +-127 +-76 +47 +124 +124 +77 +-39 +-127 +-127 +-74 +50 +124 +124 +74 +-42 +-127 +-127 +-76 +49 +124 +124 +77 +-40 +-127 +-127 +-76 +49 +124 +124 +80 +-36 +-127 +-127 +-75 +48 +124 +124 +124 +97 +-23 +-127 +-127 +-127 +-111 +26 +120 +124 +124 +98 +-22 +-127 +-127 +-127 +-105 +32 +124 +124 +124 +104 +-16 +-124 +-127 +-127 +-100 +37 +124 +124 +124 +104 +-16 +-124 +-127 +-127 +-100 +38 +124 +124 +124 +107 +-13 +-121 +-127 +-127 +-101 +38 +124 +124 +84 +-33 +-127 +-127 +-66 +60 +124 +124 +88 +-30 +-127 +-127 +-69 +55 +124 +124 +85 +-33 +-127 +-127 +-72 +52 +124 +124 +80 +-37 +-127 +-127 +-71 +53 +124 +124 +80 +-37 +-127 +-127 +-73 +50 +124 +124 +80 +-37 +-127 +-127 +-74 +50 +124 +124 +124 +100 +-20 +-127 +-127 +-127 +-110 +29 +124 +124 +124 +100 +-20 +-127 +-127 +-127 +-105 +32 +124 +124 +124 +106 +-14 +-122 +-127 +-127 +-103 +34 +124 +124 +124 +105 +-15 +-123 +-127 +-127 +-103 +35 +124 +124 +124 +106 +-14 +-122 +-127 +-127 +-102 +36 +124 +124 +84 +-33 +-127 +-127 +-64 +60 +124 +124 +85 +-32 +-127 +-127 +-66 +58 +124 +124 +84 +-34 +-127 +-127 +-72 +53 +124 +124 +85 +-33 +-127 +-127 +-68 +54 +124 +124 +79 +-38 +-127 +-127 +-72 +53 +124 +124 +80 +-38 +-127 +-127 +-75 +50 +124 +124 +83 +-34 +-127 +-127 +-127 +-100 +40 +124 +124 +124 +112 +-9 +-117 +-127 +-127 +-96 +41 +124 +124 +124 +110 +-11 +-119 +-127 +-127 +-96 +41 +124 +124 +124 +107 +-14 +-122 +-127 +-127 +-96 +41 +124 +124 +124 +106 +-15 +-123 +-127 +-127 +-97 +41 +124 +124 +124 +108 +-13 +-121 +-127 +-72 +50 +124 +124 +75 +-42 +-127 +-127 +-81 +43 +124 +124 +75 +-42 +-127 +-127 +-75 +50 +124 +124 +82 +-35 +-127 +-127 +-78 +47 +124 +124 +77 +-40 +-127 +-127 +-78 +46 +124 +124 +78 +-39 +-127 +-127 +-76 +48 +124 +124 +80 +-36 +-127 +-127 +-127 +-96 +42 +124 +124 +124 +109 +-12 +-120 +-127 +-127 +-93 +44 +124 +124 +124 +108 +-13 +-121 +-127 +-127 +-96 +43 +124 +124 +124 +108 +-14 +-121 +-127 +-127 +-98 +41 +124 +124 +124 +107 +-14 +-122 +-127 +-127 +-100 +38 +124 +124 +124 +111 +-10 +-118 +-127 +-73 +47 +124 +124 +72 +-44 +-127 +-127 +-80 +43 +124 +124 +73 +-43 +-127 +-127 +-76 +48 +124 +124 +81 +-36 +-127 +-127 +-76 +48 +124 +124 +77 +-40 +-127 +-127 +-78 +47 +124 +124 +77 +-39 +-127 +-127 +-73 +51 +124 +124 +79 +-38 +-127 +-127 +-75 +50 +124 +124 +124 +97 +-23 +-127 +-127 +-127 +-110 +29 +124 +124 +124 +99 +-21 +-127 +-127 +-127 +-105 +31 +124 +124 +124 +104 +-16 +-123 +-127 +-127 +-103 +35 +124 +124 +124 +105 +-15 +-123 +-127 +-127 +-102 +36 +124 +124 +124 +106 +-14 +-122 +-127 +-127 +-102 +36 +124 +124 +84 +-33 +-127 +-127 +-64 +60 +124 +124 +86 +-32 +-127 +-127 +-68 +55 +124 +124 +84 +-33 +-127 +-127 +-72 +52 +124 +124 +83 +-35 +-127 +-127 +-73 +50 +124 +124 +80 +-36 +-127 +-127 +-70 +53 +124 +124 +81 +-36 +-127 +-127 +-75 +50 +124 +124 +124 +98 +-22 +-127 +-127 +-127 +-108 +31 +124 +124 +124 +98 +-22 +-127 +-127 +-127 +-103 +35 +124 +124 +124 +104 +-16 +-124 +-127 +-127 +-101 +37 +124 +124 +124 +104 +-16 +-124 +-127 +-127 +-102 +36 +124 +124 +124 +106 +-14 +-122 +-127 +-127 +-99 +37 +124 +124 +82 +-34 +-127 +-127 +-64 +59 +124 +124 +86 +-32 +-127 +-127 +-66 +57 +124 +124 +82 +-35 +-127 +-127 +-68 +56 +124 +124 +83 +-35 +-127 +-127 +-71 +53 +124 +124 +80 +-37 +-127 +-127 +-72 +51 +124 +124 +80 +-37 +-127 +-127 +-73 +52 +124 +124 +81 +-36 +-127 +-127 +-127 +-96 +43 +124 +124 +124 +111 +-11 +-118 +-127 +-127 +-92 +46 +124 +124 +124 +112 +-10 +-118 +-127 +-127 +-98 +41 +124 +124 +124 +108 +-13 +-121 +-127 +-127 +-98 +41 +124 +124 +124 +106 +-15 +-122 +-127 +-127 +-99 +38 +124 +124 +124 +110 +-11 +-119 +-127 +-70 +50 +124 +124 +71 +-45 +-127 +-127 +-78 +46 +124 +124 +73 +-43 +-127 +-127 +-77 +48 +124 +124 +82 +-35 +-127 +-127 +-76 +47 +124 +124 +77 +-40 +-127 +-127 +-78 +47 +124 +124 +78 +-39 +-127 +-127 +-75 +49 +124 +124 +82 +-35 +-127 +-127 +-127 +-97 +43 +124 +124 +124 +110 +-11 +-119 +-127 +-127 +-95 +42 +124 +124 +124 +109 +-12 +-119 +-127 +-127 +-98 +39 +124 +124 +124 +109 +-12 +-120 +-127 +-127 +-96 +42 +124 +124 +124 +105 +-16 +-123 +-127 +-127 +-98 +40 +124 +124 +124 +107 +-13 +-121 +-127 +-72 +49 +124 +124 +73 +-44 +-127 +-127 +-82 +43 +124 +124 +75 +-41 +-127 +-127 +-79 +45 +124 +124 +77 +-39 +-127 +-127 +-74 +49 +124 +124 +74 +-42 +-127 +-127 +-74 +51 +124 +124 +78 +-39 +-127 +-127 +-76 +49 +124 +124 +78 +-38 +-127 +-127 +-73 +50 +124 +124 +124 +98 +-22 +-127 +-127 +-127 +-108 +28 +121 +124 +124 +98 +-22 +-127 +-127 +-127 +-104 +33 +124 +124 +124 +104 +-16 +-124 +-127 +-127 +-99 +38 +124 +124 +124 +103 +-17 +-125 +-127 +-127 +-99 +39 +124 +124 +124 +105 +-15 +-123 +-127 +-127 +-100 +38 +124 +124 +85 +-32 +-127 +-127 +-66 +58 +124 +124 +88 +-30 +-127 +-127 +-67 +56 +124 +124 +82 +-35 +-127 +-127 +-68 +56 +124 +124 +81 +-36 +-127 +-127 +-72 +52 +124 +124 +82 +-35 +-127 +-127 +-74 +50 +124 +124 +79 +-38 +-127 +-127 +-72 +51 +124 +124 +124 +97 +-23 +-127 +-127 +-127 +-107 +31 +124 +124 +124 +99 +-21 +-127 +-127 +-127 +-105 +32 +124 +124 +124 +107 +-14 +-121 +-127 +-127 +-102 +36 +124 +124 +124 +105 +-16 +-124 +-127 +-127 +-102 +36 +124 +124 +124 +107 +-14 +-122 +-127 +-127 +-102 +35 +124 +124 +84 +-33 +-127 +-127 +-64 +59 +124 +124 +86 +-32 +-127 +-127 +-66 +58 +124 +124 +83 +-34 +-127 +-127 +-70 +54 +124 +124 +85 +-32 +-127 +-127 +-73 +50 +124 +124 +81 +-36 +-127 +-127 +-75 +49 +124 +124 +78 +-38 +-127 +-127 +-71 +53 +124 +124 +82 +-36 +-127 +-127 +-127 +-99 +41 +124 +124 +124 +112 +-10 +-118 +-127 +-127 +-94 +45 +124 +124 +124 +110 +-11 +-119 +-127 +-127 +-97 +42 +124 +124 +124 +109 +-13 +-120 +-127 +-127 +-99 +40 +124 +124 +124 +108 +-13 +-120 +-127 +-127 +-101 +37 +124 +124 +124 +110 +-11 +-119 +-127 +-73 +47 +124 +124 +71 +-45 +-127 +-127 +-78 +46 +124 +124 +73 +-43 +-127 +-127 +-77 +48 +124 +124 +80 +-37 +-127 +-127 +-77 +47 +124 +124 +77 +-39 +-127 +-127 +-74 +51 +124 +124 +77 +-40 +-127 +-127 +-75 +50 +124 +124 +83 +-34 +-127 +-127 +-127 +-99 +40 +124 +124 +124 +113 +-8 +-117 +-127 +-127 +-97 +41 +124 +124 +124 +110 +-11 +-119 +-127 +-127 +-98 +38 +124 +124 +124 +107 +-14 +-121 +-127 +-127 +-97 +40 +124 +124 +124 +105 +-16 +-123 +-127 +-127 +-97 +41 +124 +124 +124 +108 +-13 +-121 +-127 +-72 +50 +124 +124 +74 +-42 +-127 +-127 +-82 +43 +124 +124 +72 +-44 +-127 +-127 +-76 +47 +124 +124 +76 +-40 +-127 +-127 +-73 +50 +124 +124 +76 +-41 +-127 +-127 +-75 +50 +124 +124 +80 +-37 +-127 +-127 +-76 +48 +124 +124 +79 +-38 +-127 +-127 +-72 +52 +124 +124 +124 +97 +-23 +-127 +-127 +-127 +-109 +29 +123 +124 +124 +97 +-23 +-127 +-127 +-127 +-104 +34 +124 +124 +124 +105 +-15 +-123 +-127 +-127 +-104 +35 +124 +124 +124 +103 +-17 +-124 +-127 +-127 +-102 +36 +124 +124 +124 +107 +-14 +-122 +-127 +-127 +-102 +35 +124 +124 +83 +-34 +-127 +-127 +-62 +61 +124 +124 +86 +-32 +-127 +-127 +-67 +57 +124 +124 +85 +-33 +-127 +-127 +-72 +52 +124 +124 +82 +-35 +-127 +-127 +-72 +51 +124 +124 +78 +-38 +-127 +-127 +-72 +53 +124 +124 +82 +-35 +-127 +-127 +-74 +50 +124 +124 +124 +100 +-20 +-127 +-127 +-127 +-110 +28 +123 +124 +124 +100 +-20 +-127 +-127 +-127 +-105 +34 +124 +124 +124 +104 +-16 +-124 +-127 +-127 +-103 +34 +124 +124 +124 +104 +-16 +-123 +-127 +-127 +-102 +35 +124 +124 +124 +106 +-15 +-122 +-127 +-127 +-99 +38 +124 +124 +83 +-34 +-127 +-127 +-62 +63 +124 +124 +88 +-30 +-127 +-127 +-67 +57 +124 +124 +85 +-32 +-127 +-127 +-69 +54 +124 +124 +82 +-36 +-127 +-127 +-70 +53 +124 +124 +78 +-39 +-127 +-127 +-72 +53 +124 +124 +81 +-36 +-127 +-127 +-74 +51 +124 +124 +81 +-36 +-127 +-127 +-127 +-97 +42 +124 +124 +124 +111 +-10 +-118 +-127 +-127 +-95 +42 +124 +124 +124 +109 +-12 +-119 +-127 +-127 +-95 +42 +124 +124 +124 +106 +-15 +-122 +-127 +-127 +-96 +42 +124 +124 +124 +107 +-14 +-122 +-127 +-127 +-97 +42 +124 +124 +124 +110 +-11 +-119 +-127 +-75 +47 +124 +124 +73 +-44 +-127 +-127 +-79 +46 +124 +124 +76 +-41 +-127 +-127 +-80 +45 +124 +124 +77 +-39 +-127 +-127 +-76 +49 +124 +124 +76 +-41 +-127 +-127 +-78 +48 +124 +124 +79 +-38 +-127 +-127 +-73 +50 +124 +124 +79 +-37 +-127 +-127 +-127 +-97 +42 +124 +124 +124 +110 +-11 +-119 +-127 +-127 +-94 +42 +124 +124 +124 +108 +-13 +-120 +-127 +-127 +-95 +44 +124 +124 +124 +109 +-12 +-120 +-127 +-127 +-96 +41 +124 +124 +124 +106 +-15 +-122 +-127 +-127 +-100 +38 +124 +124 +124 +111 +-10 +-118 +-127 +-74 +46 +124 +124 +72 +-44 +-127 +-127 +-80 +44 +124 +124 +73 +-44 +-127 +-127 +-76 +48 +124 +124 +77 +-40 +-127 +-127 +-76 +50 +124 +124 +77 +-40 +-127 +-127 +-77 +47 +124 +124 +78 +-38 +-127 +-127 +-75 +48 +124 +124 +77 +-39 +-127 +-127 +-74 +51 +124 +124 +124 +98 +-22 +-127 +-127 +-127 +-111 +26 +121 +124 +124 +99 +-21 +-127 +-127 +-127 +-105 +34 +124 +124 +124 +103 +-17 +-125 +-127 +-127 +-101 +37 +124 +124 +124 +102 +-18 +-125 +-127 +-127 +-100 +38 +124 +124 +124 +105 +-16 +-123 +-127 +-127 +-101 +38 +124 +124 +124 +107 +-14 +-122 +-127 +-127 +-102 +36 +124 +124 +124 +107 +-14 +-121 +-127 +-127 +-97 +41 +124 +124 +124 +107 +-14 +-122 +-127 +-127 +-99 +37 +124 +124 +124 +104 +-16 +-124 +-127 +-127 +-98 +38 +124 +124 +124 +105 +-15 +-123 +-127 +-127 +-97 +41 +124 +124 +84 +-33 +-127 +-127 +-64 +59 +124 +124 +88 +-29 +-127 +-127 +-68 +56 +124 +124 +84 +-33 +-127 +-127 +-69 +53 +124 +124 +80 +-37 +-127 +-127 +-70 +54 +124 +124 +82 +-36 +-127 +-127 +-72 +53 +124 +124 +79 +-38 +-127 +-127 +-74 +50 +124 +124 +80 +-37 +-127 +-127 +-76 +48 +124 +124 +78 +-39 +-127 +-127 +-72 +51 +124 +124 +77 +-40 +-127 +-127 +-72 +52 +124 +124 +79 +-38 +-127 +-127 +-74 +51 +124 +124 +80 +-37 +-127 +-127 +-75 +48 +124 +124 +78 +-38 +-127 +-127 +-75 +48 +124 +124 +81 +-36 +-127 +-127 +-127 +-98 +41 +124 +124 +124 +111 +-10 +-118 +-127 +-127 +-94 +43 +124 +124 +124 +109 +-12 +-120 +-127 +-127 +-96 +41 +124 +124 +124 +106 +-14 +-122 +-127 +-127 +-98 +39 +124 +124 +124 +109 +-12 +-119 +-127 +-127 +-98 +40 +124 +124 +124 +111 +-10 +-118 +-127 +-127 +-97 +41 +124 +124 +124 +105 +-16 +-123 +-127 +-127 +-100 +37 +124 +124 +124 +107 +-14 +-121 +-127 +-127 +-100 +37 +124 +124 +124 +107 +-14 +-122 +-127 +-127 +-98 +39 +124 +124 +124 +107 +-14 +-122 +-127 +-127 +-100 +39 +124 +124 +124 +107 +-13 +-121 +-127 +-71 +49 +124 +124 +71 +-46 +-127 +-127 +-79 +46 +124 +124 +76 +-41 +-127 +-127 +-79 +46 +124 +124 +79 +-37 +-127 +-127 +-75 +48 +124 +124 +78 +-39 +-127 +-127 +-77 +48 +124 +124 +77 +-40 +-127 +-127 +-76 +50 +124 +124 +82 +-35 +-127 +-127 +-74 +48 +124 +124 +77 +-40 +-127 +-127 +-73 +51 +124 +124 +80 +-38 +-127 +-127 +-76 +50 +124 +124 +78 +-39 +-127 +-127 +-73 +51 +124 +124 +76 +-41 +-127 +-127 +-75 +50 +124 +124 +78 +-39 +-127 +-127 +-76 +48 +124 +124 +80 +-36 +-127 +-127 +-75 +48 +124 +124 +124 +97 +-22 +-127 +-127 +-127 +-108 +30 +124 +124 +124 +100 +-20 +-127 +-127 +-127 +-105 +34 +124 +124 +124 +102 +-18 +-126 +-127 +-127 +-101 +37 +124 +124 +124 +102 +-18 +-126 +-127 +-127 +-99 +38 +124 +124 +124 +103 +-17 +-124 +-127 +-127 +-99 +39 +124 +124 +83 +-34 +-127 +-127 +-65 +60 +124 +124 +88 +-30 +-127 +-127 +-69 +55 +124 +124 +84 +-34 +-127 +-127 +-68 +55 +124 +124 +83 +-35 +-127 +-127 +-74 +51 +124 +124 +81 +-36 +-127 +-127 +-74 +50 +124 +124 +80 +-37 +-127 +-127 +-75 +50 +124 +124 +124 +100 +-20 +-127 +-127 +-127 +-108 +29 +121 +124 +124 +97 +-22 +-127 +-127 +-127 +-105 +32 +124 +124 +124 +105 +-15 +-123 +-127 +-127 +-101 +35 +124 +124 +124 +103 +-17 +-124 +-127 +-127 +-100 +38 +124 +124 +124 +105 +-15 +-123 +-127 +-127 +-101 +37 +124 +124 +85 +-32 +-127 +-127 +-65 +58 +124 +124 +88 +-30 +-127 +-127 +-68 +55 +124 +124 +84 +-33 +-127 +-127 +-68 +55 +124 +124 +82 +-35 +-127 +-127 +-70 +54 +124 +124 +79 +-38 +-127 +-127 +-74 +51 +124 +124 +81 +-37 +-127 +-127 +-75 +49 +124 +124 +82 +-35 +-127 +-127 +-127 +-95 +45 +124 +124 +124 +110 +-11 +-119 +-127 +-127 +-94 +45 +124 +124 +124 +109 +-12 +-120 +-127 +-127 +-97 +42 +124 +124 +124 +109 +-13 +-120 +-127 +-127 +-97 +40 +124 +124 +124 +107 +-14 +-122 +-127 +-127 +-99 +38 +124 +124 +124 +110 +-11 +-119 +-127 +-72 +48 +124 +124 +72 +-45 +-127 +-127 +-78 +47 +124 +124 +74 +-43 +-127 +-127 +-78 +48 +124 +124 +80 +-37 +-127 +-127 +-77 +47 +124 +124 +77 +-40 +-127 +-127 +-73 +50 +124 +124 +76 +-41 +-127 +-127 +-74 +50 +124 +124 +80 +-37 +-127 +-127 +-127 +-97 +43 +124 +124 +124 +112 +-9 +-117 +-127 +-127 +-96 +43 +124 +124 +124 +111 +-11 +-119 +-127 +-127 +-99 +39 +124 +124 +124 +108 +-13 +-121 +-127 +-127 +-100 +38 +124 +124 +124 +107 +-14 +-122 +-127 +-127 +-100 +39 +124 +124 +124 +111 +-10 +-118 +-127 +-74 +46 +124 +124 +70 +-46 +-127 +-127 +-79 +46 +124 +124 +73 +-43 +-127 +-127 +-78 +47 +124 +124 +78 +-39 +-127 +-127 +-74 +49 +124 +124 +75 +-42 +-127 +-127 +-74 +50 +124 +124 +76 +-40 +-127 +-127 +-73 +51 +124 +124 +82 +-35 +-127 +-127 +-75 +50 +124 +124 +124 +99 +-21 +-127 +-127 +-127 +-111 +26 +121 +124 +124 +99 +-20 +-127 +-127 +-127 +-107 +31 +124 +124 +124 +104 +-16 +-124 +-127 +-127 +-102 +34 +124 +124 +124 +104 +-17 +-124 +-127 +-127 +-98 +39 +124 +124 +124 +106 +-15 +-123 +-127 +-127 +-102 +35 +124 +124 +84 +-33 +-127 +-127 +-65 +60 +124 +124 +88 +-30 +-127 +-127 +-68 +56 +124 +124 +86 +-32 +-127 +-127 +-71 +52 +124 +124 +79 +-37 +-127 +-127 +-70 +54 +124 +124 +79 +-38 +-127 +-127 +-73 +52 +124 +124 +81 +-36 +-127 +-127 +-75 +49 +124 +124 +124 +100 +-20 +-127 +-127 +-127 +-108 +31 +124 +124 +124 +97 +-23 +-127 +-127 +-127 +-105 +32 +124 +124 +124 +106 +-14 +-122 +-127 +-127 +-100 +37 +124 +124 +124 +104 +-17 +-124 +-127 +-127 +-99 +38 +124 +124 +124 +103 +-17 +-124 +-127 +-127 +-98 +39 +124 +124 +83 +-34 +-127 +-127 +-64 +62 +124 +124 +88 +-30 +-127 +-127 +-68 +56 +124 +124 +85 +-33 +-127 +-127 +-69 +55 +124 +124 +82 +-35 +-127 +-127 +-70 +54 +124 +124 +79 +-38 +-127 +-127 +-72 +53 +124 +124 +80 +-37 +-127 +-127 +-74 +51 +124 +124 +84 +-34 +-127 +-127 +-127 +-96 +43 +124 +124 +124 +109 +-12 +-119 +-127 +-127 +-96 +41 +124 +124 +124 +109 +-12 +-119 +-127 +-127 +-98 +40 +124 +124 +124 +108 +-13 +-121 +-127 +-127 +-97 +42 +124 +124 +124 +106 +-15 +-122 +-127 +-127 +-97 +41 +124 +124 +124 +108 +-13 +-121 +-127 +-72 +50 +124 +124 +75 +-42 +-127 +-127 +-81 +43 +124 +124 +74 +-43 +-127 +-127 +-75 +49 +124 +124 +81 +-37 +-127 +-127 +-78 +47 +124 +124 +77 +-40 +-127 +-127 +-78 +46 +124 +124 +78 +-39 +-127 +-127 +-76 +47 +124 +124 +81 +-36 +-127 +-127 +-127 +-98 +41 +124 +124 +124 +111 +-11 +-119 +-127 +-127 +-93 +45 +124 +124 +124 +110 +-12 +-120 +-127 +-127 +-97 +42 +124 +124 +124 +107 +-14 +-122 +-127 +-127 +-98 +40 +124 +124 +124 +109 +-13 +-120 +-127 +-127 +-101 +37 +124 +124 +124 +111 +-10 +-118 +-127 +-72 +49 +124 +124 +72 +-45 +-127 +-127 +-82 +44 +124 +124 +73 +-44 +-127 +-127 +-77 +48 +124 +124 +77 +-39 +-127 +-127 +-75 +49 +124 +124 +77 +-40 +-127 +-127 +-76 +47 +124 +124 +77 +-40 +-127 +-127 +-74 +49 +124 +124 +78 +-38 +-127 +-127 +-72 +52 +124 +124 +124 +97 +-23 +-127 +-127 +-127 +-108 +29 +122 +124 +124 +96 +-23 +-127 +-127 +-127 +-104 +33 +124 +124 +124 +103 +-17 +-124 +-127 +-127 +-100 +37 +124 +124 +124 +102 +-18 +-125 +-127 +-127 +-99 +39 +124 +124 +124 +106 +-15 +-123 +-127 +-127 +-100 +39 +124 +124 +86 +-31 +-127 +-127 +-65 +60 +124 +124 +87 +-31 +-127 +-127 +-67 +57 +124 +124 +82 +-35 +-127 +-127 +-68 +56 +124 +124 +80 +-37 +-127 +-127 +-72 +52 +124 +124 +81 +-36 +-127 +-127 +-74 +50 +124 +124 +79 +-38 +-127 +-127 +-72 +50 +124 +124 +124 +98 +-22 +-127 +-127 +-127 +-106 +30 +124 +124 +124 +98 +-22 +-127 +-127 +-127 +-102 +36 +124 +124 +124 +107 +-14 +-121 +-127 +-127 +-102 +34 +124 +124 +124 +105 +-15 +-123 +-127 +-127 +-102 +36 +124 +124 +124 +106 +-15 +-123 +-127 +-127 +-100 +38 +124 +124 +86 +-32 +-127 +-127 +-62 +60 +124 +124 +85 +-32 +-127 +-127 +-66 +57 +124 +124 +82 +-35 +-127 +-127 +-69 +56 +124 +124 +84 +-34 +-127 +-127 +-73 +51 +124 +124 +81 +-36 +-127 +-127 +-74 +50 +124 +124 +78 +-39 +-127 +-127 +-72 +51 +124 +124 +80 +-36 +-127 +-127 +-127 +-96 +45 +124 +124 +124 +114 +-7 +-116 +-127 +-127 +-97 +42 +124 +124 +124 +110 +-11 +-119 +-127 +-127 +-98 +39 +124 +124 +124 +109 +-12 +-120 +-127 +-127 +-100 +38 +124 +124 +124 +109 +-12 +-120 +-127 +-127 +-100 +38 +124 +124 +124 +108 +-13 +-121 +-127 +-71 +51 +124 +124 +75 +-42 +-127 +-127 +-79 +44 +124 +124 +74 +-42 +-127 +-127 +-79 +45 +124 +124 +79 +-37 +-127 +-127 +-76 +47 +124 +124 +76 +-40 +-127 +-127 +-75 +48 +124 +124 +76 +-41 +-127 +-127 +-73 +51 +124 +124 +81 +-36 +-127 +-127 +-127 +-98 +42 +124 +124 +124 +113 +-9 +-117 +-127 +-127 +-97 +40 +124 +124 +124 +110 +-11 +-119 +-127 +-127 +-99 +39 +124 +124 +124 +108 +-13 +-121 +-127 +-127 +-97 +41 +124 +124 +124 +106 +-15 +-122 +-127 +-127 +-97 +40 +124 +124 +124 +109 +-12 +-119 +-127 +-70 +51 +124 +124 +72 +-44 +-127 +-127 +-81 +45 +124 +124 +76 +-41 +-127 +-127 +-79 +45 +124 +124 +78 +-38 +-127 +-127 +-75 +50 +124 +124 +75 +-41 +-127 +-127 +-76 +50 +124 +124 +79 +-38 +-127 +-127 +-76 +48 +124 +124 +80 +-36 +-127 +-127 +-74 +48 +124 +124 +124 +96 +-23 +-127 +-127 +-127 +-110 +27 +121 +124 +124 +98 +-22 +-127 +-127 +-127 +-104 +33 +124 +124 +124 +103 +-17 +-125 +-127 +-127 +-100 +37 +124 +124 +124 +103 +-18 +-125 +-127 +-127 +-99 +39 +124 +124 +124 +107 +-13 +-121 +-127 +-127 +-102 +37 +124 +124 +84 +-33 +-127 +-127 +-64 +59 +124 +124 +88 +-30 +-127 +-127 +-67 +58 +124 +124 +83 +-35 +-127 +-127 +-68 +55 +124 +124 +80 +-38 +-127 +-127 +-70 +54 +124 +124 +80 +-37 +-127 +-127 +-74 +51 +124 +124 +82 +-36 +-127 +-127 +-72 +51 +124 +124 +124 +99 +-21 +-127 +-127 +-127 +-108 +29 +122 +124 +124 +98 +-22 +-127 +-127 +-127 +-102 +35 +124 +124 +124 +105 +-15 +-123 +-127 +-127 +-101 +35 +124 +124 +124 +103 +-17 +-124 +-127 +-127 +-101 +36 +124 +124 +124 +104 +-16 +-123 +-127 +-127 +-100 +37 +124 +124 +84 +-33 +-127 +-127 +-61 +63 +124 +124 +87 +-31 +-127 +-127 +-68 +56 +124 +124 +85 +-33 +-127 +-127 +-68 +54 +124 +124 +82 +-35 +-127 +-127 +-72 +51 +124 +124 +79 +-38 +-127 +-127 +-72 +51 +124 +124 +78 +-39 +-127 +-127 +-71 +53 +124 +124 +83 +-35 +-127 +-127 +-127 +-97 +43 +124 +124 +124 +114 +-8 +-116 +-127 +-127 +-96 +41 +124 +124 +124 +110 +-10 +-118 +-127 +-127 +-96 +43 +124 +124 +124 +107 +-14 +-122 +-127 +-127 +-99 +38 +124 +124 +124 +108 +-13 +-120 +-127 +-127 +-96 +40 +124 +124 +124 +108 +-12 +-120 +-127 +-127 +-100 +37 +124 +124 +124 +106 +-14 +-122 +-127 +-127 +-97 +39 +124 +124 +124 +105 +-16 +-123 +-127 +-127 +-99 +38 +124 +124 +124 +105 +-16 +-123 +-127 +-127 +-97 +40 +124 +124 +124 +105 +-15 +-123 +-127 +-127 +-97 +41 +124 +124 +124 +108 +-13 +-121 +-127 +-72 +49 +124 +124 +74 +-42 +-127 +-127 +-80 +43 +124 +124 +74 +-42 +-127 +-127 +-75 +50 +124 +124 +78 +-39 +-127 +-127 +-75 +48 +124 +124 +74 +-42 +-127 +-127 +-74 +50 +124 +124 +76 +-40 +-127 +-127 +-74 +50 +124 +124 +83 +-34 +-127 +-127 +-127 +-100 +41 +124 +124 +124 +110 +-11 +-119 +-127 +-127 +-94 +42 +124 +124 +124 +108 +-13 +-120 +-127 +-127 +-96 +41 +124 +124 +124 +108 +-13 +-121 +-127 +-127 +-96 +41 +124 +124 +124 +105 +-16 +-123 +-127 +-127 +-97 +41 +124 +124 +124 +112 +-9 +-117 +-127 +-74 +46 +124 +124 +72 +-44 +-127 +-127 +-80 +44 +124 +124 +73 +-44 +-127 +-127 +-75 +49 +124 +124 +77 +-39 +-127 +-127 +-75 +49 +124 +124 +77 +-40 +-127 +-127 +-76 +47 +124 +124 +76 +-40 +-127 +-127 +-75 +48 +124 +124 +77 +-39 +-127 +-127 +-72 +51 +124 +124 +124 +96 +-24 +-127 +-127 +-127 +-107 +31 +124 +124 +124 +100 +-20 +-127 +-127 +-127 +-105 +34 +124 +124 +124 +103 +-17 +-124 +-127 +-127 +-102 +36 +124 +124 +124 +105 +-15 +-123 +-127 +-127 +-103 +34 +124 +124 +124 +105 +-15 +-122 +-127 +-127 +-102 +35 +124 +124 +82 +-34 +-127 +-127 +-62 +61 +124 +124 +86 +-32 +-127 +-127 +-66 +58 +124 +124 +87 +-31 +-127 +-127 +-68 +55 +124 +124 +80 +-37 +-127 +-127 +-73 +52 +124 +124 +79 +-38 +-127 +-127 +-72 +50 +124 +124 +79 +-38 +-127 +-127 +-73 +50 +124 +124 +79 +-38 +-127 +-127 +-71 +52 +124 +124 +78 +-39 +-127 +-127 +-72 +52 +124 +124 +77 +-39 +-127 +-127 +-73 +52 +124 +124 +81 +-36 +-127 +-127 +-74 +50 +124 +124 +80 +-37 +-127 +-127 +-73 +52 +124 +124 +80 +-37 +-127 +-127 +-75 +50 +124 +124 +79 +-38 +-127 +-127 +-127 +-96 +44 +124 +124 +124 +113 +-9 +-117 +-127 +-127 +-95 +43 +124 +124 +124 +107 +-14 +-121 +-127 +-127 +-96 +41 +124 +124 +124 +106 +-15 +-123 +-127 +-127 +-96 +41 +124 +124 +124 +107 +-14 +-122 +-127 +-127 +-99 +40 +124 +124 +124 +110 +-11 +-119 +-127 +-127 +-98 +38 +124 +124 +124 +105 +-16 +-123 +-127 +-127 +-100 +37 +124 +124 +124 +107 +-14 +-121 +-127 +-127 +-101 +37 +124 +124 +124 +108 +-13 +-121 +-127 +-127 +-100 +37 +124 +124 +124 +107 +-14 +-122 +-127 +-127 +-97 +40 +124 +124 +124 +107 +-14 +-122 +-127 +-71 +50 +124 +124 +74 +-42 +-127 +-127 +-81 +43 +124 +124 +75 +-41 +-127 +-127 +-78 +45 +124 +124 +79 +-37 +-127 +-127 +-75 +47 +124 +124 +75 +-42 +-127 +-127 +-74 +50 +124 +124 +76 +-40 +-127 +-127 +-74 +51 +124 +124 +82 +-35 +-127 +-127 +-127 +-98 +42 +124 +124 +124 +113 +-8 +-116 +-127 +-127 +-97 +41 +124 +124 +124 +111 +-10 +-118 +-127 +-127 +-97 +42 +124 +124 +124 +106 +-14 +-122 +-127 +-127 +-98 +38 +124 +124 +124 +106 +-14 +-122 +-127 +-127 +-98 +39 +124 +124 +124 +110 +-11 +-119 +-127 +-72 +49 +124 +124 +74 +-43 +-127 +-127 +-81 +44 +124 +124 +76 +-41 +-127 +-127 +-79 +45 +124 +124 +79 +-38 +-127 +-127 +-76 +47 +124 +124 +75 +-42 +-127 +-127 +-74 +51 +124 +124 +78 +-39 +-127 +-127 +-76 +49 +124 +124 +79 +-37 +-127 +-127 +-76 +48 +124 +124 +78 +-39 +-127 +-127 +-74 +49 +124 +124 +77 +-40 +-127 +-127 +-73 +52 +124 +124 +78 +-39 +-127 +-127 +-76 +49 +124 +124 +79 +-38 +-127 +-127 +-72 +50 +124 +124 +77 +-39 +-127 +-127 +-74 +49 +124 +124 +77 +-39 +-127 +-127 +-73 +50 +124 +124 +124 +97 +-23 +-127 +-127 +-127 +-108 +31 +124 +124 +124 +98 +-22 +-127 +-127 +-127 +-103 +34 +124 +124 +124 +104 +-16 +-124 +-127 +-127 +-100 +37 +124 +124 +124 +102 +-18 +-126 +-127 +-127 +-100 +39 +124 +124 +124 +105 +-16 +-124 +-127 +-127 +-100 +38 +124 +124 +87 +-31 +-127 +-127 +-65 +58 +124 +124 +87 +-30 +-127 +-127 +-65 +59 +124 +124 +88 +-31 +-127 +-127 +-70 +54 +124 +124 +81 +-36 +-127 +-127 +-72 +51 +124 +124 +80 +-37 +-127 +-127 +-75 +49 +124 +124 +80 +-37 +-127 +-127 +-74 +49 +124 +124 +81 +-36 +-127 +-127 +-127 +-96 +43 +124 +124 +124 +111 +-10 +-118 +-127 +-127 +-93 +45 +124 +124 +124 +109 +-12 +-120 +-127 +-127 +-96 +41 +124 +124 +124 +105 +-16 +-123 +-127 +-127 +-97 +41 +124 +124 +124 +106 +-15 +-122 +-127 +-127 +-98 +40 +124 +124 +124 +109 +-12 +-120 +-127 +-74 +47 +124 +124 +74 +-43 +-127 +-127 +-78 +47 +124 +124 +77 +-40 +-127 +-127 +-78 +47 +124 +124 +77 +-40 +-127 +-127 +-75 +49 +124 +124 +75 +-41 +-127 +-127 +-76 +50 +124 +124 +78 +-39 +-127 +-127 +-75 +50 +124 +124 +83 +-34 +-127 +-127 +-127 +-100 +40 +124 +124 +124 +112 +-10 +-118 +-127 +-127 +-96 +40 +124 +124 +124 +108 +-13 +-120 +-127 +-127 +-98 +40 +124 +124 +124 +109 +-12 +-120 +-127 +-127 +-99 +40 +124 +124 +124 +109 +-12 +-120 +-127 +-127 +-101 +37 +124 +124 +124 +110 +-11 +-119 +-127 +-74 +47 +124 +124 +74 +-43 +-127 +-127 +-81 +42 +124 +124 +73 +-43 +-127 +-127 +-76 +48 +124 +124 +76 +-40 +-127 +-127 +-75 +50 +124 +124 +77 +-40 +-127 +-127 +-78 +47 +124 +124 +78 +-38 +-127 +-127 +-75 +47 +124 +124 +78 +-39 +-127 +-127 +-72 +51 +124 +124 +124 +95 +-24 +-127 +-127 +-127 +-108 +29 +122 +124 +124 +97 +-23 +-127 +-127 +-127 +-103 +36 +124 +124 +124 +104 +-16 +-124 +-127 +-127 +-102 +36 +124 +124 +124 +106 +-15 +-122 +-127 +-127 +-102 +36 +124 +124 +124 +106 +-14 +-122 +-127 +-127 +-102 +36 +124 +124 +84 +-33 +-127 +-127 +-63 +60 +124 +124 +85 +-33 +-127 +-127 +-66 +58 +124 +124 +84 +-34 +-127 +-127 +-72 +53 +124 +124 +82 +-35 +-127 +-127 +-73 +50 +124 +124 +79 +-38 +-127 +-127 +-71 +52 +124 +124 +78 +-39 +-127 +-127 +-73 +52 +124 +124 +124 +100 +-20 +-127 +-127 +-127 +-110 +29 +124 +124 +124 +100 +-20 +-127 +-127 +-127 +-107 +31 +124 +124 +124 +107 +-13 +-121 +-127 +-127 +-103 +34 +124 +124 +124 +104 +-16 +-124 +-127 +-127 +-102 +35 +124 +124 +124 +105 +-16 +-123 +-127 +-127 +-99 +37 +124 +124 +83 +-34 +-127 +-127 +-62 +62 +124 +124 +86 +-32 +-127 +-127 +-68 +57 +124 +124 +86 +-32 +-127 +-127 +-72 +52 +124 +124 +83 +-34 +-127 +-127 +-71 +52 +124 +124 +78 +-39 +-127 +-127 +-72 +53 +124 +124 +79 +-38 +-127 +-127 +-73 +51 +124 +124 +82 +-35 +-127 +-127 +-127 +-99 +41 +124 +124 +124 +114 +-8 +-116 +-127 +-127 +-96 +41 +124 +124 +124 +111 +-10 +-118 +-127 +-127 +-98 +39 +124 +124 +124 +108 +-13 +-120 +-127 +-127 +-98 +38 +124 +124 +124 +106 +-14 +-122 +-127 +-127 +-96 +41 +124 +124 +124 +107 +-13 +-121 +-127 +-71 +50 +124 +124 +72 +-44 +-127 +-127 +-80 +45 +124 +124 +75 +-41 +-127 +-127 +-77 +48 +124 +124 +77 +-39 +-127 +-127 +-75 +48 +124 +124 +75 +-42 +-127 +-127 +-73 +50 +124 +124 +77 +-40 +-127 +-127 +-74 +51 +124 +124 +84 +-34 +-127 +-127 +-127 +-99 +40 +124 +124 +124 +112 +-9 +-117 +-127 +-127 +-97 +42 +124 +124 +124 +110 +-11 +-119 +-127 +-127 +-96 +42 +124 +124 +124 +106 +-14 +-122 +-127 +-127 +-97 +40 +124 +124 +124 +107 +-14 +-122 +-127 +-127 +-97 +40 +124 +124 +124 +109 +-12 +-120 +-127 +-72 +50 +124 +124 +73 +-44 +-127 +-127 +-80 +45 +124 +124 +76 +-41 +-127 +-127 +-78 +46 +124 +124 +77 +-39 +-127 +-127 +-74 +50 +124 +124 +75 +-42 +-127 +-127 +-74 +50 +124 +124 +77 +-40 +-127 +-127 +-73 +52 +124 +124 +78 +-38 +-127 +-127 +-74 +50 +124 +124 +124 +99 +-21 +-127 +-127 +-127 +-111 +27 +122 +124 +124 +100 +-20 +-127 +-127 +-127 +-106 +31 +124 +124 +124 +102 +-18 +-125 +-127 +-127 +-100 +37 +124 +124 +124 +102 +-18 +-125 +-127 +-127 +-99 +39 +124 +124 +124 +104 +-16 +-124 +-127 +-127 +-99 +39 +124 +124 +84 +-33 +-127 +-127 +-62 +61 +124 +124 +86 +-32 +-127 +-127 +-66 +57 +124 +124 +83 +-35 +-127 +-127 +-68 +56 +124 +124 +83 +-35 +-127 +-127 +-73 +52 +124 +124 +79 +-38 +-127 +-127 +-73 +52 +124 +124 +79 +-38 +-127 +-127 +-74 +50 +124 +124 +124 +99 +-21 +-127 +-127 +-127 +-110 +27 +122 +124 +124 +99 +-21 +-127 +-127 +-127 +-107 +32 +124 +124 +124 +107 +-14 +-121 +-127 +-127 +-100 +36 +124 +124 +124 +102 +-18 +-125 +-127 +-127 +-102 +35 +124 +124 +124 +105 +-16 +-123 +-127 +-127 +-98 +40 +124 +124 +87 +-31 +-127 +-127 +-65 +59 +124 +124 +86 +-32 +-127 +-127 +-67 +58 +124 +124 +83 +-34 +-127 +-127 +-70 +55 +124 +124 +84 +-33 +-127 +-127 +-73 +51 +124 +124 +81 +-36 +-127 +-127 +-73 +49 +124 +124 +77 +-39 +-127 +-127 +-72 +51 +124 +124 +80 +-37 +-127 +-127 +-127 +-95 +45 +124 +124 +124 +110 +-11 +-119 +-127 +-127 +-95 +43 +124 +124 +124 +110 +-11 +-119 +-127 +-127 +-98 +40 +124 +124 +124 +109 +-12 +-119 +-127 +-127 +-100 +38 +124 +124 +124 +108 +-13 +-120 +-127 +-127 +-99 +39 +124 +124 +124 +108 +-13 +-121 +-127 +-72 +49 +124 +124 +70 +-46 +-127 +-127 +-81 +44 +124 +124 +74 +-42 +-127 +-127 +-75 +48 +124 +124 +79 +-38 +-127 +-127 +-76 +48 +124 +124 +78 +-39 +-127 +-127 +-76 +48 +124 +124 +78 +-38 +-127 +-127 +-72 +50 +124 +124 +80 +-36 +-127 +-127 +-127 +-96 +42 +124 +124 +124 +110 +-12 +-119 +-127 +-127 +-93 +44 +124 +124 +124 +110 +-11 +-119 +-127 +-127 +-98 +41 +124 +124 +124 +107 +-14 +-121 +-127 +-127 +-100 +39 +124 +124 +124 +108 +-13 +-121 +-127 +-127 +-100 +38 +124 +124 +124 +110 +-11 +-119 +-127 +-72 +48 +124 +124 +73 +-44 +-127 +-127 +-80 +45 +124 +124 +73 +-44 +-127 +-127 +-77 +48 +124 +124 +77 +-39 +-127 +-127 +-76 +48 +124 +124 +77 +-39 +-127 +-127 +-77 +47 +124 +124 +78 +-39 +-127 +-127 +-74 +51 +124 +124 +78 +-39 +-127 +-127 +-74 +51 +124 +124 +124 +95 +-24 +-127 +-127 +-127 +-108 +29 +123 +124 +124 +97 +-23 +-127 +-127 +-127 +-105 +33 +124 +124 +124 +106 +-15 +-122 +-127 +-127 +-104 +34 +124 +124 +124 +104 +-16 +-123 +-127 +-127 +-100 +38 +124 +124 +124 +105 +-16 +-123 +-127 +-127 +-100 +37 +124 +124 +82 +-35 +-127 +-127 +-63 +62 +124 +124 +91 +-28 +-127 +-127 +-68 +55 +124 +124 +85 +-33 +-127 +-127 +-72 +53 +124 +124 +81 +-36 +-127 +-127 +-70 +53 +124 +124 +79 +-38 +-127 +-127 +-71 +52 +124 +124 +78 +-39 +-127 +-127 +-72 +52 +124 +124 +124 +98 +-22 +-127 +-127 +-127 +-109 +29 +124 +124 +124 +100 +-20 +-127 +-127 +-127 +-106 +32 +124 +124 +124 +107 +-13 +-121 +-127 +-127 +-104 +34 +124 +124 +124 +105 +-15 +-123 +-127 +-127 +-102 +36 +124 +124 +124 +104 +-17 +-124 +-127 +-127 +-99 +37 +124 +124 +124 +105 +-15 +-123 +-127 +-127 +-99 +38 +124 +124 +124 +105 +-16 +-123 +-127 +-127 +-97 +40 +124 +124 +124 +108 +-12 +-120 +-127 +-127 +-97 +41 +124 +124 +124 +105 +-15 +-123 +-127 +-127 +-99 +38 +124 +124 +124 +107 +-14 +-122 +-127 +-127 +-98 +39 +124 +124 +84 +-33 +-127 +-127 +-64 +59 +124 +124 +86 +-31 +-127 +-127 +-65 +58 +124 +124 +84 +-34 +-127 +-127 +-68 +56 +124 +124 +84 +-33 +-127 +-127 +-72 +52 +124 +124 +82 +-36 +-127 +-127 +-74 +49 +124 +124 +78 +-39 +-127 +-127 +-72 +53 +124 +124 +84 +-34 +-127 +-127 +-127 +-99 +41 +124 +124 +124 +112 +-9 +-117 +-127 +-127 +-96 +42 +124 +124 +124 +111 +-11 +-118 +-127 +-127 +-99 +39 +124 +124 +124 +109 +-12 +-119 +-127 +-127 +-100 +37 +124 +124 +124 +108 +-13 +-121 +-127 +-127 +-100 +37 +124 +124 +124 +109 +-12 +-120 +-127 +-70 +50 +124 +124 +71 +-45 +-127 +-127 +-80 +45 +124 +124 +76 +-41 +-127 +-127 +-76 +47 +124 +124 +78 +-39 +-127 +-127 +-74 +50 +124 +124 +75 +-42 +-127 +-127 +-75 +50 +124 +124 +79 +-38 +-127 +-127 +-77 +48 +124 +124 +82 +-35 +-127 +-127 +-75 +48 +124 +124 +76 +-40 +-127 +-127 +-73 +50 +124 +124 +76 +-41 +-127 +-127 +-75 +50 +124 +124 +82 +-34 +-127 +-127 +-73 +50 +124 +124 +78 +-39 +-127 +-127 +-75 +50 +124 +124 +77 +-40 +-127 +-127 +-73 +50 +124 +124 +78 +-38 +-127 +-127 +-72 +51 +124 +124 +124 +96 +-23 +-127 +-127 +-127 +-109 +29 +124 +124 +124 +98 +-22 +-127 +-127 +-127 +-106 +33 +124 +124 +124 +104 +-17 +-124 +-127 +-127 +-100 +37 +124 +124 +124 +103 +-18 +-125 +-127 +-127 +-99 +39 +124 +124 +124 +104 +-16 +-124 +-127 +-127 +-99 +40 +124 +124 +86 +-32 +-127 +-127 +-66 +58 +124 +124 +88 +-30 +-127 +-127 +-67 +56 +124 +124 +85 +-32 +-127 +-127 +-72 +53 +124 +124 +82 +-36 +-127 +-127 +-73 +51 +124 +124 +82 +-36 +-127 +-127 +-74 +50 +124 +124 +80 +-37 +-127 +-127 +-71 +52 +124 +124 +124 +96 +-23 +-127 +-127 +-127 +-108 +31 +124 +124 +124 +99 +-21 +-127 +-127 +-127 +-106 +32 +124 +124 +124 +107 +-13 +-121 +-127 +-127 +-103 +35 +124 +124 +124 +105 +-15 +-123 +-127 +-127 +-100 +36 +124 +124 +124 +104 +-16 +-123 +-127 +-127 +-100 +36 +124 +124 +124 +105 +-15 +-123 +-127 +-127 +-99 +38 +124 +124 +124 +104 +-16 +-124 +-127 +-127 +-97 +40 +124 +124 +124 +108 +-12 +-120 +-127 +-127 +-97 +41 +124 +124 +124 +108 +-13 +-121 +-127 +-127 +-101 +37 +124 +124 +124 +108 +-13 +-121 +-127 +-127 +-101 +36 +124 +124 +86 +-31 +-127 +-127 +-65 +59 +124 +124 +87 +-30 +-127 +-127 +-66 +57 +124 +124 +82 +-35 +-127 +-127 +-68 +56 +124 +124 +83 +-34 +-127 +-127 +-69 +54 +124 +124 +79 +-38 +-127 +-127 +-74 +49 +124 +124 +79 +-37 +-127 +-127 +-74 +49 +124 +124 +81 +-36 +-127 +-127 +-71 +51 +124 +124 +77 +-40 +-127 +-127 +-73 +52 +124 +124 +78 +-39 +-127 +-127 +-75 +50 +124 +124 +82 +-35 +-127 +-127 +-76 +49 +124 +124 +77 +-40 +-127 +-127 +-72 +51 +124 +124 +77 +-40 +-127 +-127 +-73 +50 +124 +124 +81 +-36 +-127 +-127 +-127 +-96 +44 +124 +124 +124 +111 +-10 +-118 +-127 +-127 +-94 +44 +124 +124 +124 +112 +-10 +-118 +-127 +-127 +-99 +40 +124 +124 +124 +108 +-13 +-120 +-127 +-127 +-98 +39 +124 +124 +124 +108 +-13 +-121 +-127 +-127 +-100 +37 +124 +124 +124 +110 +-11 +-118 +-127 +-70 +50 +124 +124 +73 +-44 +-127 +-127 +-82 +43 +124 +124 +75 +-42 +-127 +-127 +-79 +45 +124 +124 +80 +-37 +-127 +-127 +-76 +47 +124 +124 +76 +-41 +-127 +-127 +-74 +49 +124 +124 +76 +-41 +-127 +-127 +-73 +51 +124 +124 +79 +-38 +-127 +-127 +-75 +50 +124 +124 +124 +98 +-22 +-127 +-127 +-127 +-109 +28 +121 +124 +124 +97 +-22 +-127 +-127 +-127 +-106 +32 +124 +124 +124 +106 +-14 +-122 +-127 +-127 +-103 +34 +124 +124 +124 +105 +-15 +-123 +-127 +-127 +-101 +38 +124 +124 +124 +104 +-16 +-124 +-127 +-127 +-98 +38 +124 +124 +83 +-34 +-127 +-127 +-62 +62 +124 +124 +87 +-31 +-127 +-127 +-67 +57 +124 +124 +86 +-32 +-127 +-127 +-71 +53 +124 +124 +82 +-35 +-127 +-127 +-72 +51 +124 +124 +78 +-39 +-127 +-127 +-71 +53 +124 +124 +79 +-38 +-127 +-127 +-72 +53 +124 +124 +124 +99 +-21 +-127 +-127 +-127 +-109 +30 +124 +124 +124 +99 +-21 +-127 +-127 +-127 +-106 +32 +124 +124 +124 +107 +-13 +-121 +-127 +-127 +-103 +34 +124 +124 +124 +104 +-16 +-123 +-127 +-127 +-102 +36 +124 +124 +124 +106 +-14 +-122 +-127 +-127 +-98 +39 +124 +124 +83 +-34 +-127 +-127 +-63 +61 +124 +124 +88 +-30 +-127 +-127 +-68 +57 +124 +124 +83 +-35 +-127 +-127 +-70 +54 +124 +124 +85 +-33 +-127 +-127 +-70 +53 +124 +124 +78 +-39 +-127 +-127 +-72 +53 +124 +124 +78 +-39 +-127 +-127 +-73 +50 +124 +124 +80 +-37 +-127 +-127 +-127 +-95 +44 +124 +124 +124 +110 +-11 +-119 +-127 +-127 +-93 +46 +124 +124 +124 +113 +-9 +-117 +-127 +-127 +-98 +40 +124 +124 +124 +107 +-14 +-121 +-127 +-127 +-99 +40 +124 +124 +124 +106 +-15 +-123 +-127 +-127 +-100 +39 +124 +124 +124 +111 +-10 +-118 +-127 +-127 +-99 +39 +124 +124 +124 +104 +-17 +-124 +-127 +-127 +-101 +37 +124 +124 +124 +107 +-14 +-121 +-127 +-127 +-101 +37 +124 +124 +124 +108 +-13 +-121 +-127 +-127 +-97 +41 +124 +124 +124 +105 +-16 +-123 +-127 +-127 +-100 +37 +124 +124 +124 +108 +-13 +-120 +-127 +-72 +48 +124 +124 +70 +-46 +-127 +-127 +-78 +46 +124 +124 +74 +-43 +-127 +-127 +-78 +48 +124 +124 +81 +-36 +-127 +-127 +-77 +47 +124 +124 +77 +-40 +-127 +-127 +-75 +48 +124 +124 +76 +-41 +-127 +-127 +-73 +51 +124 +124 +84 +-34 +-127 +-127 +-127 +-98 +42 +124 +124 +124 +111 +-10 +-118 +-127 +-127 +-96 +43 +124 +124 +124 +109 +-12 +-120 +-127 +-127 +-99 +39 +124 +124 +124 +109 +-12 +-120 +-127 +-127 +-100 +37 +124 +124 +124 +106 +-14 +-122 +-127 +-127 +-96 +41 +124 +124 +124 +109 +-12 +-119 +-127 +-72 +50 +124 +124 +72 +-44 +-127 +-127 +-81 +44 +124 +124 +75 +-41 +-127 +-127 +-80 +44 +124 +124 +78 +-38 +-127 +-127 +-74 +48 +124 +124 +74 +-43 +-127 +-127 +-75 +50 +124 +124 +77 +-39 +-127 +-127 +-76 +48 +124 +124 +80 +-37 +-127 +-127 +-75 +48 +124 +124 +76 +-40 +-127 +-127 +-73 +50 +124 +124 +77 +-40 +-127 +-127 +-72 +52 +124 +124 +78 +-38 +-127 +-127 +-75 +50 +124 +124 +80 +-37 +-127 +-127 +-72 +51 +124 +124 +77 +-40 +-127 +-127 +-73 +51 +124 +124 +77 +-40 +-127 +-127 +-73 +52 +124 +124 +124 +98 +-22 +-127 +-127 +-127 +-109 +30 +124 +124 +124 +98 +-22 +-127 +-127 +-127 +-105 +33 +124 +124 +124 +108 +-13 +-121 +-127 +-127 +-104 +34 +124 +124 +124 +105 +-15 +-123 +-127 +-127 +-102 +34 +124 +124 +124 +105 +-16 +-123 +-127 +-127 +-98 +40 +124 +124 +83 +-34 +-127 +-127 +-63 +61 +124 +124 +87 +-31 +-127 +-127 +-68 +57 +124 +124 +85 +-33 +-127 +-127 +-70 +53 +124 +124 +82 +-35 +-127 +-127 +-71 +52 +124 +124 +78 +-39 +-127 +-127 +-72 +53 +124 +124 +81 +-37 +-127 +-127 +-72 +50 +124 +124 +80 +-36 +-127 +-127 +-73 +50 +124 +124 +78 +-39 +-127 +-127 +-73 +52 +124 +124 +79 +-38 +-127 +-127 +-73 +51 +124 +124 +80 +-37 +-127 +-127 +-73 +51 +124 +124 +77 +-40 +-127 +-127 +-75 +51 +124 +124 +78 +-39 +-127 +-127 +-73 +51 +124 +124 +80 +-37 +-127 +-127 +-73 +51 +124 +124 +79 +-38 +-127 +-127 +-76 +48 +124 +124 +79 +-38 +-127 +-127 +-76 +48 +124 +124 +81 +-35 +-127 +-127 +-71 +51 +124 +124 +76 +-40 +-127 +-127 +-75 +48 +124 +124 +76 +-40 +-127 +-127 +-74 +50 +124 +124 +77 +-40 +-127 +-127 +-72 +52 +124 +124 +124 +96 +-24 +-127 +-127 +-127 +-108 +31 +124 +124 +124 +98 +-22 +-127 +-127 +-127 +-105 +33 +124 +124 +124 +106 +-14 +-122 +-127 +-127 +-103 +35 +124 +124 +124 +105 +-15 +-123 +-127 +-127 +-103 +35 +124 +124 +124 +106 +-15 +-122 +-127 +-127 +-101 +36 +124 +124 +124 +104 +-16 +-123 +-127 +-127 +-98 +40 +124 +124 +124 +106 +-14 +-122 +-127 +-127 +-101 +37 +124 +124 +124 +107 +-14 +-121 +-127 +-127 +-98 +39 +124 +124 +124 +105 +-16 +-123 +-127 +-127 +-98 +38 +124 +124 +124 +105 +-15 +-123 +-127 +-127 +-98 +40 +124 +124 +124 +104 +-16 +-124 +-127 +-127 +-99 +39 +124 +124 +124 +108 +-13 +-121 +-127 +-127 +-100 +38 +124 +124 +124 +109 +-12 +-120 +-127 +-127 +-98 +39 +124 +124 +124 +105 +-15 +-123 +-127 +-127 +-97 +41 +124 +124 +124 +105 +-15 +-123 +-127 +-127 +-98 +39 +124 +124 +83 +-34 +-127 +-127 +-62 +62 +124 +124 +91 +-28 +-127 +-127 +-68 +56 +124 +124 +85 +-32 +-127 +-127 +-71 +52 +124 +124 +81 +-36 +-127 +-127 +-71 +52 +124 +124 +79 +-38 +-127 +-127 +-71 +53 +124 +124 +79 +-38 +-127 +-127 +-74 +51 +124 +124 +124 +100 +-21 +-127 +-127 +-127 +-110 +29 +124 +124 +124 +100 +-20 +-127 +-127 +-127 +-107 +31 +124 +124 +124 +106 +-14 +-122 +-127 +-127 +-100 +36 +124 +124 +124 +102 +-18 +-125 +-127 +-127 +-100 +36 +124 +124 +124 +103 +-17 +-124 +-127 +-127 +-98 +39 +124 +124 +124 +107 +-14 +-121 +-127 +-127 +-99 +39 +124 +124 +124 +104 +-16 +-124 +-127 +-127 +-98 +40 +124 +124 +124 +108 +-12 +-120 +-127 +-127 +-97 +40 +124 +124 +124 +104 +-16 +-124 +-127 +-127 +-100 +39 +124 +124 +124 +107 +-14 +-122 +-127 +-127 +-101 +37 +124 +124 +86 +-32 +-127 +-127 +-65 +58 +124 +124 +87 +-31 +-127 +-127 +-65 +59 +124 +124 +84 +-34 +-127 +-127 +-70 +55 +124 +124 +85 +-33 +-127 +-127 +-71 +51 +124 +124 +78 +-38 +-127 +-127 +-72 +51 +124 +124 +78 +-39 +-127 +-127 +-72 +52 +124 +124 +82 +-35 +-127 +-127 +-74 +49 +124 +124 +79 +-38 +-127 +-127 +-76 +48 +124 +124 +80 +-37 +-127 +-127 +-74 +49 +124 +124 +82 +-35 +-127 +-127 +-71 +51 +124 +124 +77 +-40 +-127 +-127 +-74 +51 +124 +124 +79 +-38 +-127 +-127 +-74 +49 +124 +124 +81 +-36 +-127 +-127 +-127 +-99 +41 +124 +124 +124 +113 +-9 +-117 +-127 +-127 +-96 +41 +124 +124 +124 +109 +-12 +-120 +-127 +-127 +-96 +41 +124 +124 +124 +107 +-14 +-121 +-127 +-127 +-97 +41 +124 +124 +124 +108 +-13 +-121 +-127 +-127 +-99 +40 +124 +124 +124 +111 +-10 +-118 +-127 +-72 +47 +124 +124 +72 +-44 +-127 +-127 +-82 +42 +124 +124 +74 +-42 +-127 +-127 +-79 +45 +124 +124 +77 +-39 +-127 +-127 +-74 +48 +124 +124 +74 +-42 +-127 +-127 +-76 +50 +124 +124 +80 +-37 +-127 +-127 +-75 +48 +124 +124 +78 +-38 +-127 +-127 +-73 +50 +124 +124 +124 +98 +-22 +-127 +-127 +-127 +-111 +28 +124 +124 +124 +98 +-22 +-127 +-127 +-127 +-104 +35 +124 +124 +124 +104 +-16 +-123 +-127 +-127 +-102 +36 +124 +124 +124 +105 +-16 +-123 +-127 +-127 +-100 +37 +124 +124 +124 +105 +-15 +-123 +-127 +-127 +-101 +36 +124 +124 +124 +105 +-15 +-123 +-127 +-127 +-97 +39 +124 +124 +124 +105 +-15 +-123 +-127 +-127 +-100 +37 +124 +124 +124 +108 +-12 +-120 +-127 +-127 +-101 +36 +124 +124 +124 +105 +-15 +-123 +-127 +-127 +-97 +39 +124 +124 +124 +105 +-15 +-123 +-127 +-127 +-97 +41 +124 +124 +85 +-32 +-127 +-127 +-65 +60 +124 +124 +90 +-29 +-127 +-127 +-68 +56 +124 +124 +85 +-32 +-127 +-127 +-68 +57 +124 +124 +81 +-36 +-127 +-127 +-72 +53 +124 +124 +80 +-37 +-127 +-127 +-74 +51 +124 +124 +81 +-36 +-127 +-127 +-75 +48 +124 +124 +124 +99 +-21 +-127 +-127 +-127 +-108 +28 +121 +124 +124 +97 +-22 +-127 +-127 +-127 +-106 +31 +124 +124 +124 +106 +-14 +-122 +-127 +-127 +-101 +35 +124 +124 +124 +103 +-17 +-125 +-127 +-127 +-99 +38 +124 +124 +124 +104 +-17 +-124 +-127 +-127 +-97 +40 +124 +124 +85 +-32 +-127 +-127 +-65 +60 +124 +124 +89 +-29 +-127 +-127 +-67 +57 +124 +124 +82 +-35 +-127 +-127 +-69 +56 +124 +124 +83 +-35 +-127 +-127 +-71 +54 +124 +124 +79 +-38 +-127 +-127 +-73 +52 +124 +124 +81 +-36 +-127 +-127 +-76 +48 +124 +124 +82 +-35 +-127 +-127 +-127 +-95 +44 +124 +124 +124 +110 +-11 +-119 +-127 +-127 +-93 +44 +124 +124 +124 +110 +-11 +-119 +-127 +-127 +-98 +41 +124 +124 +124 +107 +-14 +-122 +-127 +-127 +-97 +42 +124 +124 +124 +106 +-15 +-122 +-127 +-127 +-99 +40 +124 +124 +124 +109 +-13 +-120 +-127 +-74 +46 +124 +124 +70 +-46 +-127 +-127 +-80 +44 +124 +124 +74 +-42 +-127 +-127 +-75 +50 +124 +124 +79 +-38 +-127 +-127 +-74 +50 +124 +124 +76 +-41 +-127 +-127 +-76 +49 +124 +124 +80 +-37 +-127 +-127 +-73 +52 +124 +124 +80 +-37 +-127 +-127 +-127 +-98 +40 +124 +124 +124 +111 +-10 +-118 +-127 +-127 +-96 +41 +124 +124 +124 +110 +-11 +-119 +-127 +-127 +-96 +40 +124 +124 +124 +107 +-14 +-121 +-127 +-127 +-96 +42 +124 +124 +124 +109 +-12 +-120 +-127 +-127 +-98 +39 +124 +124 +124 +109 +-11 +-119 +-127 +-74 +47 +124 +124 +72 +-44 +-127 +-127 +-78 +45 +124 +124 +73 +-44 +-127 +-127 +-76 +48 +124 +124 +77 +-40 +-127 +-127 +-75 +50 +124 +124 +77 +-40 +-127 +-127 +-78 +47 +124 +124 +77 +-39 +-127 +-127 +-75 +48 +124 +124 +76 +-40 +-127 +-127 +-73 +51 +124 +124 +76 +-40 +-127 +-127 +-73 +52 +124 +124 +81 +-37 +-127 +-127 +-74 +51 +124 +124 +77 +-40 +-127 +-127 +-74 +49 +124 +124 +78 +-39 +-127 +-127 +-74 +50 +124 +124 +79 +-38 +-127 +-127 +-72 +51 +124 +124 +77 +-40 +-127 +-127 +-72 +52 +124 +124 +124 +98 +-22 +-127 +-127 +-127 +-109 +30 +124 +124 +124 +99 +-21 +-127 +-127 +-127 +-106 +32 +124 +124 +124 +107 +-13 +-121 +-127 +-127 +-102 +34 +124 +124 +124 +103 +-17 +-125 +-127 +-127 +-99 +38 +124 +124 +124 +103 +-17 +-125 +-127 +-127 +-98 +40 +124 +124 +84 +-33 +-127 +-127 +-64 +60 +124 +124 +91 +-28 +-127 +-127 +-68 +57 +124 +124 +83 +-35 +-127 +-127 +-68 +55 +124 +124 +82 +-36 +-127 +-127 +-71 +52 +124 +124 +79 +-38 +-127 +-127 +-74 +49 +124 +124 +80 +-37 +-127 +-127 +-74 +50 +124 +124 +83 +-34 +-127 +-127 +-127 +-95 +45 +124 +124 +124 +111 +-11 +-118 +-127 +-127 +-97 +41 +124 +124 +124 +111 +-10 +-118 +-127 +-127 +-99 +39 +124 +124 +124 +109 +-12 +-120 +-127 +-127 +-100 +38 +124 +124 +124 +107 +-14 +-121 +-127 +-127 +-97 +40 +124 +124 +124 +107 +-14 +-122 +-127 +-71 +50 +124 +124 +72 +-44 +-127 +-127 +-80 +45 +124 +124 +76 +-41 +-127 +-127 +-79 +45 +124 +124 +79 +-38 +-127 +-127 +-75 +47 +124 +124 +74 +-42 +-127 +-127 +-75 +49 +124 +124 +77 +-40 +-127 +-127 +-76 +48 +124 +124 +83 +-34 +-127 +-127 +-127 +-98 +42 +124 +124 +124 +114 +-8 +-116 +-127 +-127 +-97 +41 +124 +124 +124 +110 +-11 +-119 +-127 +-127 +-99 +38 +124 +124 +124 +108 +-13 +-120 +-127 +-127 +-99 +38 +124 +124 +124 +107 +-14 +-121 +-127 +-127 +-97 +39 +124 +124 +124 +109 +-12 +-119 +-127 +-71 +48 +124 +124 +73 +-44 +-127 +-127 +-81 +44 +124 +124 +75 +-41 +-127 +-127 +-79 +45 +124 +124 +79 +-38 +-127 +-127 +-76 +47 +124 +124 +75 +-41 +-127 +-127 +-74 +50 +124 +124 +76 +-40 +-127 +-127 +-75 +50 +124 +124 +80 +-36 +-127 +-127 +-76 +48 +124 +124 +124 +97 +-23 +-127 +-127 +-127 +-108 +30 +124 +124 +124 +98 +-22 +-127 +-127 +-127 +-104 +34 +124 +124 +124 +103 +-17 +-125 +-127 +-127 +-100 +37 +124 +124 +124 +102 +-18 +-125 +-127 +-127 +-101 +37 +124 +124 +124 +106 +-14 +-122 +-127 +-127 +-100 +39 +124 +124 +85 +-33 +-127 +-127 +-64 +60 +124 +124 +89 +-29 +-127 +-127 +-68 +56 +124 +124 +85 +-33 +-127 +-127 +-72 +52 +124 +124 +81 +-36 +-127 +-127 +-70 +52 +124 +124 +79 +-38 +-127 +-127 +-71 +53 +124 +124 +81 +-36 +-127 +-127 +-75 +49 +124 +124 +124 +100 +-20 +-127 +-127 +-127 +-107 +28 +121 +124 +124 +97 +-22 +-127 +-127 +-127 +-106 +32 +124 +124 +124 +106 +-14 +-122 +-127 +-127 +-100 +38 +124 +124 +124 +105 +-16 +-123 +-127 +-127 +-101 +37 +124 +124 +124 +104 +-17 +-124 +-127 +-127 +-98 +39 +124 +124 +82 +-34 +-127 +-127 +-63 +61 +124 +124 +87 +-30 +-127 +-127 +-68 +56 +124 +124 +85 +-32 +-127 +-127 +-67 +56 +124 +124 +81 +-36 +-127 +-127 +-71 +53 +124 +124 +78 +-39 +-127 +-127 +-73 +52 +124 +124 +79 +-38 +-127 +-127 +-74 +51 +124 +124 +84 +-33 +-127 +-127 +-127 +-97 +41 +124 +124 +124 +111 +-10 +-118 +-127 +-127 +-95 +42 +124 +124 +124 +109 +-12 +-120 +-127 +-127 +-95 +42 +124 +124 +124 +107 +-14 +-122 +-127 +-127 +-95 +42 +124 +124 +124 +106 +-15 +-122 +-127 +-127 +-98 +41 +124 +124 +124 +108 +-13 +-120 +-127 +-74 +48 +124 +124 +74 +-42 +-127 +-127 +-80 +43 +124 +124 +74 +-42 +-127 +-127 +-76 +47 +124 +124 +77 +-40 +-127 +-127 +-74 +50 +124 +124 +78 +-39 +-127 +-127 +-77 +48 +124 +124 +79 +-38 +-127 +-127 +-75 +48 +124 +124 +81 +-36 +-127 +-127 +-127 +-97 +41 +124 +124 +124 +110 +-11 +-119 +-127 +-127 +-93 +45 +124 +124 +124 +110 +-12 +-119 +-127 +-127 +-97 +42 +124 +124 +124 +108 +-13 +-121 +-127 +-127 +-99 +40 +124 +124 +124 +107 +-14 +-122 +-127 +-127 +-99 +40 +124 +124 +124 +110 +-11 +-119 +-127 +-71 +48 +124 +124 +71 +-45 +-127 +-127 +-78 +45 +124 +124 +73 +-43 +-127 +-127 +-76 +48 +124 +124 +77 +-39 +-127 +-127 +-76 +49 +124 +124 +78 +-39 +-127 +-127 +-77 +47 +124 +124 +78 +-38 +-127 +-127 +-73 +52 +124 +124 +79 +-38 +-127 +-127 +-75 +48 +124 +124 +124 +98 +-22 +-127 +-127 +-127 +-108 +30 +124 +124 +124 +97 +-22 +-127 +-127 +-127 +-103 +35 +124 +124 +124 +102 +-18 +-125 +-127 +-127 +-101 +37 +124 +124 +124 +104 +-17 +-124 +-127 +-127 +-102 +36 +124 +124 +124 +106 +-14 +-122 +-127 +-127 +-102 +36 +124 +124 +84 +-33 +-127 +-127 +-64 +59 +124 +124 +86 +-32 +-127 +-127 +-65 +58 +124 +124 +83 +-35 +-127 +-127 +-70 +55 +124 +124 +84 +-34 +-127 +-127 +-73 +51 +124 +124 +80 +-37 +-127 +-127 +-71 +53 +124 +124 +81 +-37 +-127 +-127 +-75 +51 +124 +124 +124 +98 +-22 +-127 +-127 +-127 +-110 +29 +124 +124 +124 +99 +-20 +-127 +-127 +-127 +-106 +32 +124 +124 +124 +107 +-14 +-122 +-127 +-127 +-103 +34 +124 +124 +124 +105 +-15 +-123 +-127 +-127 +-102 +35 +124 +124 +124 +106 +-15 +-122 +-127 +-127 +-100 +38 +124 +124 +84 +-33 +-127 +-127 +-64 +61 +124 +124 +88 +-30 +-127 +-127 +-68 +56 +124 +124 +86 +-32 +-127 +-127 +-68 +57 +124 +124 +82 +-35 +-127 +-127 +-71 +53 +124 +124 +79 +-38 +-127 +-127 +-73 +52 +124 +124 +80 +-37 +-127 +-127 +-75 +49 +124 +124 +82 +-35 +-127 +-127 +-127 +-95 +44 +124 +124 +124 +110 +-12 +-119 +-127 +-127 +-93 +44 +124 +124 +124 +111 +-10 +-118 +-127 +-127 +-97 +41 +124 +124 +124 +106 +-15 +-122 +-127 +-127 +-97 +41 +124 +124 +124 +105 +-16 +-123 +-127 +-127 +-98 +41 +124 +124 +124 +107 +-14 +-121 +-127 +-74 +48 +124 +124 +75 +-42 +-127 +-127 +-77 +46 +124 +124 +73 +-44 +-127 +-127 +-77 +46 +124 +124 +77 +-40 +-127 +-127 +-74 +50 +124 +124 +79 +-38 +-127 +-127 +-77 +47 +124 +124 +78 +-39 +-127 +-127 +-76 +47 +124 +124 +80 +-36 +-127 +-127 +-127 +-96 +43 +124 +124 +124 +111 +-10 +-118 +-127 +-127 +-92 +44 +124 +124 +124 +108 +-13 +-121 +-127 +-127 +-96 +40 +124 +124 +124 +107 +-14 +-121 +-127 +-127 +-97 +40 +124 +124 +124 +106 +-14 +-122 +-127 +-127 +-98 +39 +124 +124 +124 +111 +-10 +-118 +-127 +-73 +48 +124 +124 +74 +-43 +-127 +-127 +-81 +44 +124 +124 +76 +-40 +-127 +-127 +-78 +45 +124 +124 +78 +-38 +-127 +-127 +-73 +49 +124 +124 +75 +-42 +-127 +-127 +-74 +50 +124 +124 +79 +-38 +-127 +-127 +-75 +48 +124 +124 +77 +-38 +-127 +-127 +-75 +48 +124 +124 +124 +99 +-21 +-127 +-127 +-127 +-111 +27 +121 +124 +124 +99 +-20 +-127 +-127 +-127 +-106 +31 +124 +124 +124 +104 +-17 +-124 +-127 +-127 +-100 +37 +124 +124 +124 +102 +-18 +-125 +-127 +-127 +-99 +39 +124 +124 +124 +104 +-16 +-123 +-127 +-127 +-100 +38 +124 +124 +87 +-31 +-127 +-127 +-64 +59 +124 +124 +86 +-32 +-127 +-127 +-66 +58 +124 +124 +83 +-35 +-127 +-127 +-70 +55 +124 +124 +81 +-36 +-127 +-127 +-70 +54 +124 +124 +79 +-38 +-127 +-127 +-71 +52 +124 +124 +79 +-38 +-127 +-127 +-71 +53 +124 +124 +124 +98 +-22 +-127 +-127 +-127 +-107 +31 +124 +124 +124 +98 +-22 +-127 +-127 +-127 +-104 +35 +124 +124 +124 +106 +-14 +-122 +-127 +-127 +-102 +35 +124 +124 +124 +105 +-15 +-123 +-127 +-127 +-100 +37 +124 +124 +124 +103 +-17 +-125 +-127 +-127 +-99 +37 +124 +124 +84 +-34 +-127 +-127 +-62 +62 +124 +124 +89 +-29 +-127 +-127 +-69 +55 +124 +124 +85 +-33 +-127 +-127 +-71 +52 +124 +124 +83 +-34 +-127 +-127 +-70 +53 +124 +124 +78 +-39 +-127 +-127 +-73 +52 +124 +124 +81 +-36 +-127 +-127 +-75 +49 +124 +124 +82 +-35 +-127 +-127 +-127 +-98 +40 +124 +124 +124 +111 +-11 +-119 +-127 +-127 +-92 +45 +124 +124 +124 +108 +-13 +-120 +-127 +-127 +-96 +42 +124 +124 +124 +108 +-13 +-121 +-127 +-127 +-99 +40 +124 +124 +124 +108 +-13 +-121 +-127 +-127 +-100 +39 +124 +124 +124 +110 +-11 +-119 +-127 +-71 +50 +124 +124 +73 +-43 +-127 +-127 +-81 +43 +124 +124 +74 +-43 +-127 +-127 +-77 +48 +124 +124 +77 +-39 +-127 +-127 +-75 +49 +124 +124 +75 +-42 +-127 +-127 +-76 +49 +124 +124 +79 +-38 +-127 +-127 +-76 +48 +124 +124 +83 +-34 +-127 +-127 +-127 +-99 +40 +124 +124 +124 +111 +-10 +-118 +-127 +-127 +-93 +45 +124 +124 +124 +109 +-12 +-120 +-127 +-127 +-96 +41 +124 +124 +124 +106 +-15 +-122 +-127 +-127 +-99 +38 +124 +124 +124 +107 +-14 +-121 +-127 +-127 +-99 +40 +124 +124 +124 +109 +-12 +-120 +-127 +-73 +49 +124 +124 +74 +-42 +-127 +-127 +-81 +42 +124 +124 +74 +-42 +-127 +-127 +-76 +48 +124 +124 +79 +-38 +-127 +-127 +-77 +48 +124 +124 +76 +-41 +-127 +-127 +-78 +47 +124 +124 +78 +-39 +-127 +-127 +-73 +50 +124 +124 +78 +-38 +-127 +-127 +-76 +48 +124 +124 +124 +97 +-23 +-127 +-127 +-127 +-109 +30 +124 +124 +124 +97 +-23 +-127 +-127 +-127 +-105 +34 +124 +124 +124 +104 +-16 +-124 +-127 +-127 +-103 +35 +124 +124 +124 +105 +-15 +-123 +-127 +-127 +-103 +34 +124 +124 +124 +105 +-15 +-123 +-127 +-127 +-98 +39 +124 +124 +84 +-33 +-127 +-127 +-65 +60 +124 +124 +87 +-31 +-127 +-127 +-68 +56 +124 +124 +85 +-33 +-127 +-127 +-72 +51 +124 +124 +81 +-36 +-127 +-127 +-70 +54 +124 +124 +79 +-38 +-127 +-127 +-72 +53 +124 +124 +79 +-38 +-127 +-127 +-74 +51 +124 +124 +124 +100 +-20 +-127 +-127 +-127 +-111 +27 +122 +124 +124 +99 +-21 +-127 +-127 +-127 +-107 +31 +124 +124 +124 +107 +-13 +-121 +-127 +-127 +-102 +34 +124 +124 +124 +103 +-17 +-125 +-127 +-127 +-99 +39 +124 +124 +124 +105 +-15 +-123 +-127 +-127 +-101 +38 +124 +124 +84 +-33 +-127 +-127 +-64 +61 +124 +124 +88 +-30 +-127 +-127 +-68 +56 +124 +124 +86 +-32 +-127 +-127 +-72 +52 +124 +124 +84 +-34 +-127 +-127 +-72 +51 +124 +124 +78 +-39 +-127 +-127 +-72 +52 +124 +124 +79 +-38 +-127 +-127 +-75 +50 +124 +124 +83 +-34 +-127 +-127 +-127 +-99 +40 +124 +124 +124 +111 +-10 +-118 +-127 +-127 +-94 +43 +124 +124 +124 +109 +-13 +-120 +-127 +-127 +-94 +44 +124 +124 +124 +107 +-14 +-122 +-127 +-127 +-97 +41 +124 +124 +124 +106 +-14 +-122 +-127 +-127 +-99 +40 +124 +124 +124 +111 +-10 +-118 +-127 +-73 +49 +124 +124 +71 +-45 +-127 +-127 +-79 +44 +124 +124 +74 +-43 +-127 +-127 +-76 +49 +124 +124 +82 +-36 +-127 +-127 +-75 +49 +124 +124 +75 +-42 +-127 +-127 +-76 +50 +124 +124 +78 +-39 +-127 +-127 +-77 +48 +124 +124 +83 +-34 +-127 +-127 +-127 +-100 +40 +124 +124 +124 +111 +-10 +-118 +-127 +-127 +-97 +40 +124 +124 +124 +109 +-12 +-120 +-127 +-127 +-97 +40 +124 +124 +124 +107 +-14 +-122 +-127 +-127 +-98 +41 +124 +124 +124 +108 +-13 +-121 +-127 +-127 +-98 +40 +124 +124 +124 +111 +-10 +-118 +-127 +-71 +49 +124 +124 +71 +-45 +-127 +-127 +-80 +44 +124 +124 +73 +-43 +-127 +-127 +-76 +47 +124 +124 +77 +-39 +-127 +-127 +-73 +51 +124 +124 +76 +-41 +-127 +-127 +-76 +48 +124 +124 +79 +-38 +-127 +-127 +-74 +49 +124 +124 +77 +-39 +-127 +-127 +-73 +50 +124 +124 +124 +95 +-24 +-127 +-127 +-127 +-108 +30 +124 +124 +124 +100 +-20 +-127 +-127 +-127 +-105 +34 +124 +124 +124 +103 +-17 +-125 +-127 +-127 +-100 +38 +124 +124 +124 +102 +-18 +-125 +-127 +-127 +-101 +38 +124 +124 +124 +106 +-14 +-122 +-127 +-127 +-102 +36 +124 +124 +84 +-33 +-127 +-127 +-64 +59 +124 +124 +86 +-32 +-127 +-127 +-66 +59 +124 +124 +84 +-34 +-127 +-127 +-71 +52 +124 +124 +81 +-36 +-127 +-127 +-72 +51 +124 +124 +80 +-37 +-127 +-127 +-70 +52 +124 +124 +79 +-38 +-127 +-127 +-71 +53 +124 +124 +124 +98 +-22 +-127 +-127 +-127 +-108 +29 +124 +124 +124 +101 +-19 +-127 +-127 +-127 +-104 +32 +124 +124 +124 +105 +-15 +-122 +-127 +-127 +-103 +35 +124 +124 +124 +105 +-15 +-123 +-127 +-127 +-103 +34 +124 +124 +124 +105 +-15 +-123 +-127 +-127 +-101 +36 +124 +124 +83 +-34 +-127 +-127 +-62 +61 +124 +124 +86 +-32 +-127 +-127 +-68 +57 +124 +124 +86 +-32 +-127 +-127 +-67 +55 +124 +124 +82 +-35 +-127 +-127 +-70 +54 +124 +124 +79 +-38 +-127 +-127 +-72 +53 +124 +124 +82 +-36 +-127 +-127 +-74 +49 +124 +124 +82 +-35 +-127 +-127 +-127 +-99 +41 +124 +124 +124 +113 +-9 +-117 +-127 +-127 +-95 +44 +124 +124 +124 +108 +-13 +-121 +-127 +-127 +-97 +39 +124 +124 +124 +108 +-13 +-121 +-127 +-127 +-99 +38 +124 +124 +124 +107 +-14 +-122 +-127 +-127 +-96 +41 +124 +124 +124 +107 +-14 +-121 +-127 +-72 +50 +124 +124 +73 +-43 +-127 +-127 +-81 +44 +124 +124 +76 +-41 +-127 +-127 +-78 +46 +124 +124 +79 +-37 +-127 +-127 +-74 +50 +124 +124 +75 +-41 +-127 +-127 +-77 +47 +124 +124 +78 +-39 +-127 +-127 +-76 +49 +124 +124 +84 +-34 +-127 +-127 +-127 +-98 +42 +124 +124 +124 +112 +-10 +-118 +-127 +-127 +-97 +42 +124 +124 +124 +111 +-11 +-119 +-127 +-127 +-99 +39 +124 +124 +124 +109 +-12 +-119 +-127 +-127 +-96 +41 +124 +124 +124 +107 +-14 +-122 +-127 +-127 +-99 +38 +124 +124 +124 +108 +-13 +-120 +-127 +-71 +48 +124 +124 +70 +-46 +-127 +-127 +-79 +46 +124 +124 +74 +-42 +-127 +-127 +-78 +47 +124 +124 +80 +-36 +-127 +-127 +-77 +46 +124 +124 +75 +-41 +-127 +-127 +-74 +50 +124 +124 +78 +-39 +-127 +-127 +-75 +50 +124 +124 +78 +-39 +-127 +-127 +-75 +50 +124 +124 +124 +97 +-23 +-127 +-127 +-127 +-109 +29 +124 +124 +124 +100 +-20 +-127 +-127 +-127 +-103 +35 +124 +124 +124 +102 +-18 +-125 +-127 +-127 +-104 +33 +124 +124 +124 +104 +-16 +-124 +-127 +-127 +-102 +35 +124 +124 +124 +106 +-15 +-122 +-127 +-127 +-99 +37 +124 +124 +82 +-34 +-127 +-127 +-64 +60 +124 +124 +88 +-30 +-127 +-127 +-68 +56 +124 +124 +86 +-32 +-127 +-127 +-71 +53 +124 +124 +81 +-36 +-127 +-127 +-72 +50 +124 +124 +79 +-38 +-127 +-127 +-71 +53 +124 +124 +79 +-38 +-127 +-127 +-73 +52 +124 +124 +124 +99 +-21 +-127 +-127 +-127 +-108 +30 +124 +124 +124 +98 +-21 +-127 +-127 +-127 +-105 +32 +124 +124 +124 +107 +-13 +-121 +-127 +-127 +-102 +35 +124 +124 +124 +105 +-15 +-123 +-127 +-127 +-102 +35 +124 +124 +124 +105 +-15 +-123 +-127 +-127 +-99 +38 +124 +124 +83 +-34 +-127 +-127 +-62 +63 +124 +124 +90 +-28 +-127 +-127 +-67 +55 +124 +124 +83 +-34 +-127 +-127 +-70 +53 +124 +124 +82 +-35 +-127 +-127 +-69 +54 +124 +124 +79 +-38 +-127 +-127 +-73 +52 +124 +124 +81 +-36 +-127 +-127 +-75 +49 +124 +124 +82 +-35 +-127 +-127 +-127 +-99 +41 +124 +124 +124 +112 +-9 +-117 +-127 +-127 +-94 +42 +124 +124 +124 +109 +-12 +-119 +-127 +-127 +-97 +41 +124 +124 +124 +110 +-11 +-119 +-127 +-127 +-97 +41 +124 +124 +124 +107 +-14 +-122 +-127 +-127 +-98 +41 +124 +124 +124 +108 +-13 +-121 +-127 +-73 +48 +124 +124 +74 +-42 +-127 +-127 +-79 +44 +124 +124 +75 +-42 +-127 +-127 +-79 +47 +124 +124 +78 +-38 +-127 +-127 +-74 +50 +124 +124 +76 +-41 +-127 +-127 +-75 +50 +124 +124 +79 +-38 +-127 +-127 +-76 +48 +124 +124 +82 +-35 +-127 +-127 +-127 +-97 +42 +124 +124 +124 +110 +-12 +-119 +-127 +-127 +-96 +41 +124 +124 +124 +108 +-13 +-121 +-127 +-127 +-96 +40 +124 +124 +124 +107 +-14 +-122 +-127 +-127 +-96 +42 +124 +124 +124 +106 +-15 +-122 +-127 +-127 +-97 +41 +124 +124 +124 +112 +-9 +-117 +-127 +-73 +47 +124 +124 +73 +-44 +-127 +-127 +-81 +43 +124 +124 +74 +-42 +-127 +-127 +-77 +46 +124 +124 +77 +-39 +-127 +-127 +-73 +50 +124 +124 +75 +-41 +-127 +-127 +-76 +50 +124 +124 +80 +-37 +-127 +-127 +-73 +51 +124 +124 +77 +-40 +-127 +-127 +-74 +48 +124 +124 +124 +96 +-23 +-127 +-127 +-127 +-110 +27 +121 +124 +124 +99 +-20 +-127 +-127 +-127 +-102 +35 +124 +124 +124 +103 +-17 +-125 +-127 +-127 +-101 +35 +124 +124 +124 +105 +-16 +-123 +-127 +-127 +-102 +35 +124 +124 +124 +105 +-15 +-123 +-127 +-127 +-100 +39 +124 +124 +85 +-32 +-127 +-127 +-64 +61 +124 +124 +86 +-32 +-127 +-127 +-65 +57 +124 +124 +83 +-35 +-127 +-127 +-68 +56 +124 +124 +81 +-36 +-127 +-127 +-72 +53 +124 +124 +82 +-35 +-127 +-127 +-73 +50 +124 +124 +78 +-39 +-127 +-127 +-71 +53 +124 +124 +124 +98 +-22 +-127 +-127 +-127 +-108 +29 +122 +124 +124 +96 +-23 +-127 +-127 +-127 +-102 +35 +124 +124 +124 +104 +-16 +-124 +-127 +-127 +-101 +37 +124 +124 +124 +104 +-16 +-124 +-127 +-127 +-103 +35 +124 +124 +124 +106 +-14 +-122 +-127 +-127 +-102 +35 +124 +124 +84 +-33 +-127 +-127 +-63 +60 +124 +124 +89 +-29 +-127 +-127 +-69 +55 +124 +124 +85 +-33 +-127 +-127 +-72 +52 +124 +124 +84 +-33 +-127 +-127 +-72 +51 +124 +124 +79 +-38 +-127 +-127 +-71 +53 +124 +124 +80 +-37 +-127 +-127 +-74 +50 +124 +124 +82 +-35 +-127 +-127 +-127 +-98 +42 +124 +124 +124 +113 +-8 +-116 +-127 +-127 +-96 +42 +124 +124 +124 +110 +-11 +-119 +-127 +-127 +-96 +40 +124 +124 +124 +107 +-14 +-122 +-127 +-127 +-96 +41 +124 +124 +124 +106 +-15 +-122 +-127 +-127 +-96 +43 +124 +124 +124 +111 +-11 +-119 +-127 +-73 +48 +124 +124 +71 +-45 +-127 +-127 +-80 +44 +124 +124 +74 +-42 +-127 +-127 +-76 +47 +124 +124 +79 +-38 +-127 +-127 +-74 +49 +124 +124 +75 +-41 +-127 +-127 +-73 +51 +124 +124 +77 +-40 +-127 +-127 +-76 +50 +124 +124 +83 +-34 +-127 +-127 +-127 +-100 +40 +124 +124 +124 +112 +-9 +-117 +-127 +-127 +-97 +40 +124 +124 +124 +109 +-12 +-119 +-127 +-127 +-96 +41 +124 +124 +124 +107 +-14 +-122 +-127 +-127 +-96 +41 +124 +124 +124 +106 +-15 +-122 +-127 +-127 +-97 +41 +124 +124 +124 +111 +-10 +-118 +-127 +-73 +49 +124 +124 +71 +-45 +-127 +-127 +-79 +45 +124 +124 +73 +-43 +-127 +-127 +-75 +48 +124 +124 +77 +-39 +-127 +-127 +-76 +48 +124 +124 +78 +-39 +-127 +-127 +-77 +48 +124 +124 +79 +-38 +-127 +-127 +-76 +47 +124 +124 +79 +-38 +-127 +-127 +-75 +48 +124 +124 +124 +98 +-22 +-127 +-127 +-127 +-110 +27 +120 +124 +124 +97 +-22 +-127 +-127 +-127 +-105 +33 +124 +124 +124 +104 +-17 +-124 +-127 +-127 +-101 +37 +124 +124 +124 +103 +-17 +-125 +-127 +-127 +-100 +38 +124 +124 +124 +104 +-16 +-124 +-127 +-127 +-100 +38 +124 +124 +85 +-32 +-127 +-127 +-64 +59 +124 +124 +85 +-32 +-127 +-127 +-66 +58 +124 +124 +84 +-34 +-127 +-127 +-70 +54 +124 +124 +83 +-34 +-127 +-127 +-73 +50 +124 +124 +80 +-37 +-127 +-127 +-70 +54 +124 +124 +79 +-38 +-127 +-127 +-74 +50 +124 +124 +124 +99 +-21 +-127 +-127 +-127 +-109 +29 +124 +124 +124 +100 +-20 +-127 +-127 +-127 +-106 +32 +124 +124 +124 +106 +-14 +-122 +-127 +-127 +-101 +35 +124 +124 +124 +102 +-18 +-125 +-127 +-127 +-100 +38 +124 +124 +124 +103 +-17 +-125 +-127 +-127 +-98 +40 +124 +124 +87 +-31 +-127 +-127 +-66 +58 +124 +124 +88 +-30 +-127 +-127 +-65 +58 +124 +124 +85 +-32 +-127 +-127 +-72 +52 +124 +124 +83 +-35 +-127 +-127 +-73 +52 +124 +124 +81 +-36 +-127 +-127 +-75 +50 +124 +124 +81 +-36 +-127 +-127 +-75 +48 +124 +124 +80 +-37 +-127 +-127 +-127 +-96 +43 +124 +124 +124 +110 +-11 +-119 +-127 +-127 +-93 +45 +124 +124 +124 +112 +-9 +-117 +-127 +-127 +-98 +40 +124 +124 +124 +109 +-12 +-120 +-127 +-127 +-100 +38 +124 +124 +124 +108 +-13 +-120 +-127 +-127 +-98 +40 +124 +124 +124 +107 +-14 +-122 +-127 +-72 +48 +124 +124 +70 +-46 +-127 +-127 +-79 +47 +124 +124 +75 +-41 +-127 +-127 +-78 +46 +124 +124 +80 +-37 +-127 +-127 +-76 +47 +124 +124 +76 +-40 +-127 +-127 +-75 +50 +124 +124 +79 +-38 +-127 +-127 +-76 +48 +124 +124 +81 +-36 +-127 +-127 +-127 +-98 +42 +124 +124 +124 +110 +-11 +-119 +-127 +-127 +-96 +43 +124 +124 +124 +108 +-13 +-121 +-127 +-127 +-98 +41 +124 +124 +124 +109 +-13 +-120 +-127 +-127 +-99 +40 +124 +124 +124 +105 +-15 +-123 +-127 +-127 +-100 +37 +124 +124 +124 +111 +-10 +-118 +-127 +-72 +47 +124 +124 +71 +-45 +-127 +-127 +-79 +45 +124 +124 +73 +-44 +-127 +-127 +-77 +49 +124 +124 +79 +-38 +-127 +-127 +-77 +46 +124 +124 +77 +-40 +-127 +-127 +-77 +48 +124 +124 +77 +-40 +-127 +-127 +-75 +51 +124 +124 +78 +-38 +-127 +-127 +-74 +51 +124 +124 +124 +98 +-22 +-127 +-127 +-127 +-110 +29 +124 +124 +124 +99 +-21 +-127 +-127 +-127 +-106 +32 +124 +124 +124 +105 +-15 +-123 +-127 +-127 +-104 +35 +124 +124 +124 +106 +-15 +-122 +-127 +-127 +-100 +36 +124 +124 +124 +104 +-16 +-124 +-127 +-127 +-99 +39 +124 +124 +124 +104 +-16 +-124 +-127 +-127 +-98 +40 +124 +124 +124 +105 +-15 +-123 +-127 +-127 +-99 +39 +124 +124 +124 +108 +-13 +-121 +-127 +-127 +-100 +38 +124 +124 +124 +107 +-13 +-121 +-127 +-127 +-100 +37 +124 +124 +124 +105 +-15 +-123 +-127 +-127 +-98 +39 +124 +124 +84 +-33 +-127 +-127 +-64 +59 +124 +124 +89 +-29 +-127 +-127 +-68 +56 +124 +124 +85 +-32 +-127 +-127 +-71 +53 +124 +124 +82 +-36 +-127 +-127 +-70 +54 +124 +124 +82 +-36 +-127 +-127 +-73 +52 +124 +124 +80 +-37 +-127 +-127 +-75 +50 +124 +124 +80 +-37 +-127 +-127 +-76 +48 +124 +124 +78 +-39 +-127 +-127 +-74 +50 +124 +124 +77 +-40 +-127 +-127 +-73 +52 +124 +124 +81 +-37 +-127 +-127 +-75 +50 +124 +124 +80 +-37 +-127 +-127 +-75 +48 +124 +124 +77 +-40 +-127 +-127 +-72 +52 +124 +124 +82 +-35 +-127 +-127 +-127 +-99 +41 +124 +124 +124 +112 +-9 +-117 +-127 +-127 +-96 +42 +124 +124 +124 +111 +-10 +-118 +-127 +-127 +-99 +39 +124 +124 +124 +109 +-12 +-120 +-127 +-127 +-100 +38 +124 +124 +124 +107 +-14 +-121 +-127 +-127 +-99 +38 +124 +124 +124 +107 +-13 +-121 +-127 +-127 +-96 +41 +124 +124 +124 +105 +-16 +-123 +-127 +-127 +-97 +40 +124 +124 +124 +105 +-16 +-123 +-127 +-127 +-99 +41 +124 +124 +124 +106 +-15 +-122 +-127 +-127 +-100 +38 +124 +124 +124 +107 +-14 +-121 +-127 +-127 +-101 +37 +124 +124 +124 +110 +-11 +-119 +-127 +-70 +50 +124 +124 +70 +-46 +-127 +-127 +-80 +44 +124 +124 +72 +-44 +-127 +-127 +-77 +48 +124 +124 +80 +-37 +-127 +-127 +-77 +47 +124 +124 +77 +-39 +-127 +-127 +-76 +47 +124 +124 +76 +-40 +-127 +-127 +-73 +50 +124 +124 +79 +-38 +-127 +-127 +-74 +51 +124 +124 +79 +-38 +-127 +-127 +-76 +48 +124 +124 +79 +-38 +-127 +-127 +-72 +52 +124 +124 +80 +-37 +-127 +-127 +-74 +48 +124 +124 +78 +-39 +-127 +-127 +-75 +49 +124 +124 +80 +-37 +-127 +-127 +-76 +48 +124 +124 +80 +-37 +-127 +-127 +-75 +48 +124 +124 +124 +96 +-23 +-127 +-127 +-127 +-108 +28 +122 +124 +124 +97 +-23 +-127 +-127 +-127 +-104 +35 +124 +124 +124 +104 +-16 +-124 +-127 +-127 +-102 +36 +124 +124 +124 +106 +-14 +-122 +-127 +-127 +-99 +39 +124 +124 +124 +103 +-17 +-125 +-127 +-127 +-98 +40 +124 +124 +84 +-33 +-127 +-127 +-65 +58 +124 +124 +88 +-29 +-127 +-127 +-68 +56 +124 +124 +86 +-32 +-127 +-127 +-71 +52 +124 +124 +80 +-37 +-127 +-127 +-71 +54 +124 +124 +82 +-36 +-127 +-127 +-74 +50 +124 +124 +80 +-37 +-127 +-127 +-75 +48 +124 +124 +124 +98 +-21 +-127 +-127 +-127 +-109 +28 +121 +124 +124 +98 +-21 +-127 +-127 +-127 +-102 +34 +124 +124 +124 +104 +-16 +-123 +-127 +-127 +-99 +38 +124 +124 +124 +103 +-18 +-125 +-127 +-127 +-100 +38 +124 +124 +124 +106 +-14 +-122 +-127 +-127 +-101 +37 +124 +124 +86 +-31 +-127 +-127 +-65 +58 +124 +124 +86 +-32 +-127 +-127 +-65 +58 +124 +124 +83 +-35 +-127 +-127 +-71 +54 +124 +124 +85 +-32 +-127 +-127 +-73 +50 +124 +124 +78 +-38 +-127 +-127 +-73 +51 +124 +124 +81 +-36 +-127 +-127 +-75 +49 +124 +124 +83 +-34 +-127 +-127 +-127 +-99 +41 +124 +124 +124 +113 +-8 +-116 +-127 +-127 +-96 +41 +124 +124 +124 +110 +-11 +-119 +-127 +-127 +-96 +42 +124 +124 +124 +108 +-14 +-121 +-127 +-127 +-98 +41 +124 +124 +124 +107 +-14 +-122 +-127 +-127 +-100 +38 +124 +124 +124 +109 +-12 +-119 +-127 +-74 +48 +124 +124 +73 +-43 +-127 +-127 +-82 +43 +124 +124 +75 +-41 +-127 +-127 +-79 +44 +124 +124 +78 +-39 +-127 +-127 +-73 +50 +124 +124 +75 +-42 +-127 +-127 +-76 +50 +124 +124 +79 +-38 +-127 +-127 +-77 +48 +124 +124 +82 +-34 +-127 +-127 +-127 +-95 +45 +124 +124 +124 +110 +-11 +-119 +-127 +-127 +-94 +42 +124 +124 +124 +107 +-14 +-122 +-127 +-127 +-95 +43 +124 +124 +124 +107 +-14 +-121 +-127 +-127 +-99 +38 +124 +124 +124 +109 +-13 +-120 +-127 +-127 +-100 +38 +124 +124 +124 +111 +-10 +-118 +-127 +-74 +46 +124 +124 +72 +-44 +-127 +-127 +-78 +46 +124 +124 +75 +-41 +-127 +-127 +-79 +46 +124 +124 +79 +-38 +-127 +-127 +-74 +48 +124 +124 +73 +-43 +-127 +-127 +-76 +47 +124 +124 +75 +-41 +-127 +-127 +-74 +50 +124 +124 +78 +-39 +-127 +-127 +-72 +52 +124 +124 +124 +100 +-20 +-127 +-127 +-127 +-110 +28 +123 +124 +124 +100 +-20 +-127 +-127 +-127 +-106 +33 +124 +124 +124 +106 +-15 +-122 +-127 +-127 +-101 +35 +124 +124 +124 +103 +-17 +-125 +-127 +-127 +-99 +37 +124 +124 +124 +103 +-17 +-124 +-127 +-127 +-98 +40 +124 +124 +83 +-34 +-127 +-127 +-64 +61 +124 +124 +87 +-31 +-127 +-127 +-67 +57 +124 +124 +84 +-33 +-127 +-127 +-72 +52 +124 +124 +82 +-36 +-127 +-127 +-72 +51 +124 +124 +79 +-38 +-127 +-127 +-71 +53 +124 +124 +81 +-36 +-127 +-127 +-75 +50 +124 +124 +124 +100 +-20 +-127 +-127 +-127 +-111 +28 +122 +124 +124 +100 +-20 +-127 +-127 +-127 +-106 +31 +124 +124 +124 +106 +-14 +-122 +-127 +-127 +-101 +34 +124 +124 +124 +102 +-18 +-125 +-127 +-127 +-100 +36 +124 +124 +124 +103 +-17 +-125 +-127 +-127 +-97 +40 +124 +124 +85 +-32 +-127 +-127 +-65 +60 +124 +124 +88 +-30 +-127 +-127 +-66 +58 +124 +124 +82 +-35 +-127 +-127 +-69 +56 +124 +124 +85 +-32 +-127 +-127 +-72 +52 +124 +124 +79 +-38 +-127 +-127 +-73 +52 +124 +124 +81 +-36 +-127 +-127 +-74 +49 +124 +124 +81 +-35 +-127 +-127 +-127 +-99 +40 +124 +124 +124 +110 +-11 +-119 +-127 +-127 +-95 +42 +124 +124 +124 +110 +-11 +-118 +-127 +-127 +-97 +40 +124 +124 +124 +108 +-13 +-121 +-127 +-127 +-97 +41 +124 +124 +124 +106 +-14 +-122 +-127 +-127 +-96 +41 +124 +124 +124 +107 +-14 +-121 +-127 +-72 +50 +124 +124 +74 +-43 +-127 +-127 +-81 +44 +124 +124 +74 +-42 +-127 +-127 +-76 +48 +124 +124 +77 +-40 +-127 +-127 +-76 +49 +124 +124 +77 +-40 +-127 +-127 +-77 +47 +124 +124 +78 +-39 +-127 +-127 +-75 +48 +124 +124 +81 +-36 +-127 +-127 +-127 +-97 +42 +124 +124 +124 +110 +-11 +-119 +-127 +-127 +-93 +45 +124 +124 +124 +112 +-10 +-118 +-127 +-127 +-98 +40 +124 +124 +124 +109 +-12 +-120 +-127 +-127 +-99 +38 +124 +124 +124 +107 +-14 +-121 +-127 +-127 +-100 +38 +124 +124 +124 +111 +-10 +-118 +-127 +-72 +47 +124 +124 +71 +-45 +-127 +-127 +-78 +45 +124 +124 +73 +-44 +-127 +-127 +-77 +48 +124 +124 +80 +-37 +-127 +-127 +-76 +47 +124 +124 +77 +-40 +-127 +-127 +-77 +47 +124 +124 +76 +-40 +-127 +-127 +-75 +50 +124 +124 +81 +-36 +-127 +-127 +-75 +49 +124 +124 +124 +99 +-21 +-127 +-127 +-127 +-111 +28 +123 +124 +124 +99 +-20 +-127 +-127 +-127 +-104 +34 +124 +124 +124 +104 +-17 +-124 +-127 +-127 +-103 +34 +124 +124 +124 +103 +-17 +-124 +-127 +-127 +-103 +35 +124 +124 +124 +105 +-15 +-123 +-127 +-127 +-100 +36 +124 +124 +82 +-35 +-127 +-127 +-62 +62 +124 +124 +87 +-31 +-127 +-127 +-68 +57 +124 +124 +85 +-33 +-127 +-127 +-70 +55 +124 +124 +80 +-38 +-127 +-127 +-70 +54 +124 +124 +79 +-38 +-127 +-127 +-72 +53 +124 +124 +79 +-38 +-127 +-127 +-74 +50 +124 +124 +124 +100 +-20 +-127 +-127 +-127 +-110 +28 +123 +124 +124 +100 +-20 +-127 +-127 +-127 +-107 +31 +124 +124 +124 +104 +-16 +-124 +-127 +-127 +-100 +37 +124 +124 +124 +103 +-18 +-125 +-127 +-127 +-98 +39 +124 +124 +124 +103 +-17 +-125 +-127 +-127 +-99 +39 +124 +124 +85 +-33 +-127 +-127 +-65 +59 +124 +124 +89 +-28 +-127 +-127 +-67 +55 +124 +124 +83 +-34 +-127 +-127 +-68 +56 +124 +124 +84 +-34 +-127 +-127 +-71 +52 +124 +124 +78 +-39 +-127 +-127 +-73 +52 +124 +124 +80 +-38 +-127 +-127 +-75 +50 +124 +124 +84 +-34 +-127 +-127 +-127 +-95 +45 +124 +124 +124 +111 +-10 +-118 +-127 +-127 +-96 +43 +124 +124 +124 +108 +-13 +-121 +-127 +-127 +-96 +41 +124 +124 +124 +107 +-14 +-121 +-127 +-127 +-97 +39 +124 +124 +124 +106 +-14 +-122 +-127 +-127 +-97 +41 +124 +124 +124 +107 +-14 +-122 +-127 +-72 +50 +124 +124 +73 +-43 +-127 +-127 +-81 +44 +124 +124 +76 +-40 +-127 +-127 +-79 +45 +124 +124 +79 +-38 +-127 +-127 +-73 +50 +124 +124 +75 +-42 +-127 +-127 +-76 +49 +124 +124 +79 +-38 +-127 +-127 +-76 +47 +124 +124 +82 +-34 +-127 +-127 +-127 +-99 +40 +124 +124 +124 +111 +-10 +-118 +-127 +-127 +-94 +44 +124 +124 +124 +110 +-11 +-119 +-127 +-127 +-97 +40 +124 +124 +124 +106 +-15 +-122 +-127 +-127 +-100 +38 +124 +124 +124 +106 +-14 +-122 +-127 +-127 +-98 +38 +124 +124 +124 +108 +-12 +-120 +-127 +-70 +50 +124 +124 +72 +-45 +-127 +-127 +-80 +46 +124 +124 +75 +-41 +-127 +-127 +-79 +46 +124 +124 +79 +-37 +-127 +-127 +-75 +47 +124 +124 +74 +-42 +-127 +-127 +-74 +50 +124 +124 +77 +-40 +-127 +-127 +-76 +49 +124 +124 +80 +-36 +-127 +-127 +-74 +50 +124 +124 +124 +98 +-22 +-127 +-127 +-127 +-108 +29 +123 +124 +124 +96 +-23 +-127 +-127 +-127 +-103 +35 +124 +124 +124 +103 +-17 +-124 +-127 +-127 +-102 +36 +124 +124 +124 +105 +-15 +-123 +-127 +-127 +-102 +36 +124 +124 +124 +105 +-15 +-123 +-127 +-127 +-101 +37 +124 +124 +85 +-32 +-127 +-127 +-66 +58 +124 +124 +87 +-31 +-127 +-127 +-65 +59 +124 +124 +85 +-32 +-127 +-127 +-71 +52 +124 +124 +82 +-35 +-127 +-127 +-73 +51 +124 +124 +81 +-36 +-127 +-127 +-74 +49 +124 +124 +79 +-38 +-127 +-127 +-73 +50 +124 +124 +124 +97 +-22 +-127 +-127 +-127 +-107 +29 +122 +124 +124 +97 +-22 +-127 +-127 +-127 +-102 +35 +124 +124 +124 +108 +-12 +-120 +-127 +-127 +-101 +37 +124 +124 +124 +104 +-17 +-125 +-127 +-127 +-100 +38 +124 +124 +124 +103 +-17 +-125 +-127 +-127 +-99 +38 +124 +124 +86 +-31 +-127 +-127 +-65 +59 +124 +124 +88 +-29 +-127 +-127 +-65 +58 +124 +124 +82 +-35 +-127 +-127 +-71 +52 +124 +124 +81 +-36 +-127 +-127 +-70 +53 +124 +124 +78 +-39 +-127 +-127 +-73 +52 +124 +124 +82 +-36 +-127 +-127 +-75 +49 +124 +124 +83 +-34 +-127 +-127 +-127 +-99 +41 +124 +124 +124 +110 +-11 +-119 +-127 +-127 +-93 +43 +124 +124 +124 +109 +-12 +-119 +-127 +-127 +-96 +41 +124 +124 +124 +107 +-14 +-122 +-127 +-127 +-95 +42 +124 +124 +124 +107 +-14 +-122 +-127 +-127 +-96 +42 +124 +124 +124 +109 +-12 +-120 +-127 +-127 +-99 +40 +124 +124 +124 +107 +-14 +-121 +-127 +-127 +-100 +37 +124 +124 +124 +107 +-14 +-121 +-127 +-127 +-101 +38 +124 +124 +124 +108 +-14 +-121 +-127 +-127 +-98 +39 +124 +124 +124 +106 +-15 +-122 +-127 +-127 +-99 +38 +124 +124 +124 +107 +-14 +-121 +-127 +-71 +50 +124 +124 +72 +-45 +-127 +-127 +-80 +45 +124 +124 +75 +-42 +-127 +-127 +-79 +46 +124 +124 +80 +-37 +-127 +-127 +-76 +47 +124 +124 +76 +-40 +-127 +-127 +-74 +50 +124 +124 +78 +-39 +-127 +-127 +-76 +48 +124 +124 +82 +-35 +-127 +-127 +-127 +-96 +44 +124 +124 +124 +113 +-8 +-116 +-127 +-127 +-96 +42 +124 +124 +124 +109 +-12 +-120 +-127 +-127 +-98 +40 +124 +124 +124 +109 +-12 +-120 +-127 +-127 +-101 +38 +124 +124 +124 +108 +-13 +-120 +-127 +-127 +-99 +38 +124 +124 +124 +109 +-12 +-119 +-127 +-74 +48 +124 +124 +72 +-45 +-127 +-127 +-82 +43 +124 +124 +75 +-41 +-127 +-127 +-79 +45 +124 +124 +78 +-38 +-127 +-127 +-74 +49 +124 +124 +75 +-42 +-127 +-127 +-75 +51 +124 +124 +80 +-37 +-127 +-127 +-76 +50 +124 +124 +76 +-40 +-127 +-127 +-73 +50 +124 +124 +124 +97 +-23 +-127 +-127 +-127 +-110 +27 +121 +124 +124 +99 +-20 +-127 +-127 +-127 +-106 +31 +124 +124 +124 +104 +-16 +-124 +-127 +-127 +-100 +36 +124 +124 +124 +102 +-18 +-125 +-127 +-127 +-99 +40 +124 +124 +124 +106 +-15 +-122 +-127 +-127 +-99 +37 +124 +124 +83 +-33 +-127 +-127 +-64 +59 +124 +124 +89 +-29 +-127 +-127 +-67 +56 +124 +124 +83 diff --git a/traces/lf_ATA5577_hid_84.pm3 b/traces/lf_ATA5577_hid_84.pm3 deleted file mode 100644 index ccd3dceaf..000000000 --- a/traces/lf_ATA5577_hid_84.pm3 +++ /dev/null @@ -1,20000 +0,0 @@ --125 --127 --127 --33 -83 -123 -123 -123 -35 --50 --125 --127 --127 --32 -85 -123 -123 -123 -35 --50 --125 --127 --127 --32 -85 -123 -115 -22 --61 --127 --127 --15 -93 -123 -117 -23 --60 --127 --127 --16 -92 -123 -116 -22 --61 --127 --127 --17 -91 -123 -116 -23 --60 --127 --127 --18 -90 -123 -114 -21 --62 --127 --127 --18 -90 -123 -114 -21 --62 --127 --127 --19 -90 -123 -115 -22 --61 --127 --127 --127 --23 -94 -123 -123 -123 -43 --42 --119 --127 --127 --25 -91 -123 -123 -123 -39 --45 --121 --127 --127 --28 -88 -123 -123 -123 -38 --47 --123 --127 --127 --29 -87 -123 -123 -123 -37 --48 --124 --127 --127 --29 -86 -123 -123 -123 -37 --47 --123 --127 --24 -83 -123 -106 -13 --69 --127 --127 --25 -84 -123 -109 -16 --66 --127 --127 --21 -87 -123 -113 -20 --63 --127 --127 --20 -89 -123 -112 -19 --64 --127 --127 --18 -90 -123 -114 -21 --62 --127 --127 --18 -90 -123 -117 -23 --60 --127 --127 --127 --23 -94 -123 -123 -123 -43 --42 --119 --127 --127 --25 -91 -123 -123 -123 -39 --46 --122 --127 --127 --29 -87 -123 -123 -123 -37 --48 --123 --127 --127 --30 -86 -123 -123 -123 -35 --49 --125 --127 --127 --31 -86 -123 -123 -123 -37 --48 --123 --127 --24 -82 -123 -105 -12 --70 --127 --127 --24 -84 -123 -108 -15 --67 --127 --127 --22 -87 -123 -111 -18 --65 --127 --127 --20 -89 -123 -112 -19 --64 --127 --127 --19 -89 -123 -114 -20 --62 --127 --127 --19 -90 -123 -113 -20 --63 --127 --127 --18 -90 -123 -123 -123 -32 --52 --127 --127 --127 --34 -83 -123 -123 -123 -33 --51 --126 --127 --127 --34 -84 -123 -123 -123 -35 --50 --125 --127 --127 --33 -84 -123 -123 -123 -34 --50 --126 --127 --127 --32 -84 -123 -123 -123 -35 --50 --125 --127 --127 --32 -85 -123 -115 -22 --61 --127 --127 --14 -93 -123 -117 -24 --59 --127 --127 --16 -93 -123 -117 -23 --60 --127 --127 --17 -91 -123 -114 -21 --62 --127 --127 --18 -91 -123 -115 -22 --61 --127 --127 --18 -91 -123 -115 -21 --62 --127 --127 --18 -91 -123 -123 -123 -33 --52 --127 --127 --127 --34 -82 -123 -123 -123 -34 --51 --126 --127 --127 --32 -83 -123 -123 -123 -36 --49 --124 --127 --127 --32 -84 -123 -123 -123 -35 --50 --125 --127 --127 --32 -84 -123 -123 -123 -35 --50 --125 --127 --127 --32 -85 -123 -116 -23 --60 --127 --127 --14 -94 -123 -118 -24 --59 --127 --127 --15 -93 -123 -116 -22 --61 --127 --127 --16 -91 -123 -116 -23 --60 --127 --127 --16 -91 -123 -116 -23 --61 --127 --127 --17 -91 -123 -114 -21 --62 --127 --127 --17 -91 -123 -117 -23 --60 --127 --127 --127 --22 -94 -123 -123 -123 -43 --42 --118 --127 --127 --24 -91 -123 -123 -123 -40 --45 --121 --127 --127 --28 -88 -123 -123 -123 -38 --47 --123 --127 --127 --30 -87 -123 -123 -123 -37 --48 --124 --127 --127 --30 -86 -123 -123 -123 -37 --47 --123 --127 --24 -82 -123 -105 -12 --70 --127 --127 --25 -84 -123 -108 -16 --67 --127 --127 --22 -86 -123 -113 -20 --63 --127 --127 --20 -88 -123 -112 -19 --64 --127 --127 --19 -89 -123 -113 -20 --63 --127 --127 --18 -90 -123 -116 -23 --61 --127 --127 --127 --23 -94 -123 -123 -123 -44 --42 --118 --127 --127 --25 -91 -123 -123 -123 -40 --45 --121 --127 --127 --28 -88 -123 -123 -123 -38 --47 --123 --127 --127 --29 -86 -123 -123 -123 -36 --49 --125 --127 --127 --31 -85 -123 -123 -123 -37 --48 --124 --127 --25 -81 -123 -104 -12 --70 --127 --127 --26 -83 -123 -107 -15 --67 --127 --127 --22 -86 -123 -112 -19 --64 --127 --127 --20 -89 -123 -112 -19 --64 --127 --127 --19 -89 -123 -114 -20 --62 --127 --127 --18 -90 -123 -114 -21 --62 --127 --127 --18 -90 -123 -123 -123 -33 --52 --127 --127 --127 --35 -82 -123 -123 -123 -34 --51 --126 --127 --127 --33 -83 -123 -123 -123 -36 --49 --125 --127 --127 --32 -84 -123 -123 -123 -34 --50 --126 --127 --127 --32 -84 -123 -123 -123 -35 --50 --125 --127 --127 --32 -84 -123 -115 -22 --61 --127 --127 --15 -93 -123 -118 -24 --59 --127 --127 --16 -93 -123 -115 -22 --61 --127 --127 --16 -92 -123 -115 -22 --61 --127 --127 --17 -92 -123 -115 -22 --61 --127 --127 --16 -92 -123 -116 -22 --61 --127 --127 --17 -91 -123 -123 -123 -33 --52 --127 --127 --127 --34 -83 -123 -123 -123 -34 --51 --126 --127 --127 --33 -84 -123 -123 -123 -35 --50 --125 --127 --127 --32 -84 -123 -123 -123 -35 --50 --125 --127 --127 --33 -84 -123 -123 -123 -35 --50 --125 --127 --127 --31 -85 -123 -116 -22 --61 --127 --127 --14 -93 -123 -117 -24 --59 --127 --127 --16 -93 -123 -116 -22 --61 --127 --127 --17 -91 -123 -116 -23 --60 --127 --127 --17 -92 -123 -115 -22 --61 --127 --127 --18 -91 -123 -114 -21 --62 --127 --127 --17 -91 -123 -117 -24 --60 --127 --127 --127 --23 -94 -123 -123 -123 -43 --42 --118 --127 --127 --25 -91 -123 -123 -123 -40 --45 --121 --127 --127 --28 -88 -123 -123 -123 -37 --47 --123 --127 --127 --30 -87 -123 -123 -123 -37 --48 --124 --127 --127 --30 -86 -123 -123 -123 -37 --47 --123 --127 --127 --31 -85 -123 -123 -123 -35 --49 --125 --127 --127 --32 -84 -123 -123 -123 -35 --50 --125 --127 --127 --32 -84 -123 -123 -123 -34 --50 --126 --127 --127 --31 -85 -123 -123 -123 -36 --49 --125 --127 --127 --31 -85 -123 -123 -123 -37 --48 --123 --127 --24 -82 -123 -105 -13 --69 --127 --127 --24 -85 -123 -109 -16 --66 --127 --127 --21 -87 -123 -113 -20 --63 --127 --127 --19 -89 -123 -113 -20 --63 --127 --127 --18 -90 -123 -113 -20 --63 --127 --127 --19 -89 -123 -115 -22 --61 --127 --127 --127 --23 -93 -123 -123 -123 -43 --42 --119 --127 --127 --25 -91 -123 -123 -123 -39 --46 --122 --127 --127 --29 -87 -123 -123 -123 -37 --48 --124 --127 --127 --30 -85 -123 -123 -123 -35 --49 --125 --127 --127 --31 -85 -123 -123 -123 -37 --48 --123 --127 --24 -81 -123 -104 -12 --70 --127 --127 --25 -83 -123 -107 -15 --67 --127 --127 --22 -86 -123 -112 -19 --64 --127 --127 --20 -89 -123 -112 -19 --64 --127 --127 --19 -90 -123 -113 -20 --63 --127 --127 --17 -91 -123 -114 -21 --62 --127 --127 --17 -91 -123 -114 -21 --62 --127 --127 --18 -91 -123 -115 -22 --61 --127 --127 --17 -91 -123 -115 -22 --61 --127 --127 --18 -91 -123 -114 -21 --62 --127 --127 --18 -91 -123 -115 -21 --61 --127 --127 --18 -90 -123 -114 -21 --62 --127 --127 --18 -90 -123 -123 -123 -33 --52 --127 --127 --127 --35 -81 -123 -123 -123 -32 --52 --127 --127 --127 --34 -83 -123 -123 -123 -35 --50 --125 --127 --127 --33 -83 -123 -123 -123 -33 --51 --126 --127 --127 --33 -84 -123 -123 -123 -35 --50 --125 --127 --127 --32 -85 -123 -123 -123 -35 --50 --125 --127 --127 --32 -85 -123 -123 -123 -36 --49 --124 --127 --127 --31 -86 -123 -123 -123 -38 --47 --123 --127 --127 --31 -86 -123 -123 -123 -36 --49 --124 --127 --127 --32 -86 -123 -123 -123 -36 --49 --124 --127 --127 --31 -86 -123 -117 -23 --60 --127 --127 --13 -95 -123 -118 -24 --59 --127 --127 --15 -93 -123 -117 -23 --60 --127 --127 --16 -92 -123 -116 -23 --60 --127 --127 --16 -91 -123 -115 -21 --61 --127 --127 --18 -90 -123 -115 -21 --62 --127 --127 --16 -91 -123 -117 -23 --60 --127 --127 --127 --22 -95 -123 -123 -123 -44 --41 --117 --127 --127 --23 -92 -123 -123 -123 -41 --44 --121 --127 --127 --27 -89 -123 -123 -123 -38 --47 --123 --127 --127 --30 -86 -123 -123 -123 -37 --48 --124 --127 --127 --30 -85 -123 -123 -123 -37 --48 --123 --127 --25 -81 -123 -104 -12 --70 --127 --127 --25 -83 -123 -107 -15 --68 --127 --127 --22 -86 -123 -112 -19 --64 --127 --127 --20 -88 -123 -112 -19 --63 --127 --127 --19 -89 -123 -113 -20 --63 --127 --127 --19 -89 -123 -116 -23 --61 --127 --127 --127 --23 -93 -123 -123 -123 -43 --42 --119 --127 --127 --25 -91 -123 -123 -123 -39 --46 --122 --127 --127 --28 -88 -123 -123 -123 -37 --47 --123 --127 --127 --30 -87 -123 -123 -123 -36 --48 --124 --127 --127 --31 -86 -123 -123 -123 -37 --47 --123 --127 --25 -82 -123 -105 -12 --70 --127 --127 --25 -84 -123 -108 -15 --67 --127 --127 --22 -87 -123 -111 -19 --64 --127 --127 --20 -87 -123 -112 -19 --64 --127 --127 --19 -89 -123 -113 -20 --63 --127 --127 --19 -90 -123 -114 -21 --62 --127 --127 --18 -90 -123 -114 -21 --62 --127 --127 --17 -91 -123 -114 -21 --62 --127 --127 --18 -91 -123 -115 -22 --61 --127 --127 --17 -91 -123 -115 -22 --61 --127 --127 --17 -92 -123 -115 -21 --62 --127 --127 --17 -91 -123 -115 -22 --61 --127 --127 --17 -91 -123 -123 -123 -33 --52 --127 --127 --127 --34 -82 -123 -123 -123 -32 --52 --127 --127 --127 --33 -83 -123 -123 -123 -36 --49 --125 --127 --127 --33 -83 -123 -123 -123 -34 --50 --126 --127 --127 --33 -84 -123 -123 -123 -35 --50 --125 --127 --127 --32 -84 -123 -123 -123 -35 --50 --125 --127 --127 --32 -84 -123 -123 -123 -34 --50 --126 --127 --127 --32 -84 -123 -123 -123 -37 --48 --124 --127 --127 --32 -84 -123 -123 -123 -34 --51 --126 --127 --127 --32 -85 -123 -123 -123 -35 --50 --125 --127 --127 --32 -86 -123 -116 -23 --60 --127 --127 --14 -94 -123 -118 -24 --59 --127 --127 --15 -93 -123 -116 -23 --60 --127 --127 --16 -92 -123 -116 -23 --60 --127 --127 --16 -92 -123 -115 -22 --61 --127 --127 --17 -91 -123 -115 -22 --61 --127 --127 --17 -91 -123 -117 -23 --60 --127 --127 --127 --22 -94 -123 -123 -123 -43 --42 --118 --127 --127 --25 -91 -123 -123 -123 -40 --45 --121 --127 --127 --28 -88 -123 -123 -123 -37 --47 --123 --127 --127 --30 -87 -123 -123 -123 -37 --48 --124 --127 --127 --32 -85 -123 -123 -123 -37 --48 --124 --127 --25 -82 -123 -104 -12 --70 --127 --127 --25 -83 -123 -108 -16 --67 --127 --127 --23 -86 -123 -112 -19 --64 --127 --127 --20 -88 -123 -112 -19 --64 --127 --127 --19 -90 -123 -114 -21 --62 --127 --127 --18 -90 -123 -115 -21 --61 --127 --127 --18 -90 -123 -114 -21 --62 --127 --127 --18 -90 -123 -114 -21 --62 --127 --127 --18 -90 -123 -115 -21 --61 --127 --127 --18 -91 -123 -114 -21 --62 --127 --127 --18 -91 -123 -114 -21 --62 --127 --127 --17 -91 -123 -116 -22 --61 --127 --127 --18 -91 -123 -123 -123 -34 --51 --126 --127 --127 --34 -82 -123 -123 -123 -34 --51 --126 --127 --127 --32 -84 -123 -123 -123 -36 --49 --125 --127 --127 --32 -85 -123 -123 -123 -35 --50 --125 --127 --127 --32 -84 -123 -123 -123 -35 --50 --125 --127 --127 --31 -85 -123 -115 -22 --61 --127 --127 --14 -93 -123 -118 -24 --59 --127 --127 --15 -93 -123 -116 -22 --61 --127 --127 --16 -92 -123 -115 -21 --62 --127 --127 --17 -91 -123 -114 -21 --62 --127 --127 --18 -90 -123 -114 -21 --62 --127 --127 --18 -90 -123 -123 -123 -33 --51 --126 --127 --127 --35 -82 -123 -123 -123 -33 --52 --127 --127 --127 --33 -84 -123 -123 -123 -36 --49 --124 --127 --127 --33 -84 -123 -123 -123 -35 --50 --125 --127 --127 --32 -85 -123 -123 -123 -35 --50 --125 --127 --127 --32 -85 -123 -116 -23 --60 --127 --127 --14 -93 -123 -118 -24 --59 --127 --127 --15 -93 -123 -117 -23 --60 --127 --127 --16 -93 -123 -116 -23 --60 --127 --127 --16 -91 -123 -116 -23 --61 --127 --127 --16 -92 -123 -115 -21 --62 --127 --127 --17 -91 -123 -116 -23 --60 --127 --127 --127 --23 -95 -123 -123 -123 -44 --41 --118 --127 --127 --25 -91 -123 -123 -123 -40 --45 --121 --127 --127 --28 -88 -123 -123 -123 -38 --47 --123 --127 --127 --30 -86 -123 -123 -123 -37 --48 --124 --127 --127 --31 -85 -123 -123 -123 -37 --48 --124 --127 --25 -82 -123 -105 -12 --70 --127 --127 --25 -83 -123 -108 -15 --67 --127 --127 --22 -87 -123 -112 -19 --63 --127 --127 --20 -88 -123 -111 -18 --64 --127 --127 --19 -89 -123 -114 -20 --62 --127 --127 --18 -90 -123 -116 -22 --61 --127 --127 --127 --23 -94 -123 -123 -123 -43 --42 --119 --127 --127 --25 -91 -123 -123 -123 -39 --45 --121 --127 --127 --28 -88 -123 -123 -123 -37 --48 --123 --127 --127 --29 -86 -123 -123 -123 -36 --49 --125 --127 --127 --30 -86 -123 -123 -123 -38 --47 --123 --127 --24 -82 -123 -105 -13 --69 --127 --127 --25 -83 -123 -108 -15 --67 --127 --127 --22 -86 -123 -112 -19 --64 --127 --127 --20 -88 -123 -111 -18 --64 --127 --127 --19 -89 -123 -113 -20 --63 --127 --127 --18 -89 -123 -114 -21 --62 --127 --127 --18 -90 -123 -123 -123 -32 --52 --127 --127 --127 --34 -82 -123 -123 -123 -34 --51 --126 --127 --127 --33 -83 -123 -123 -123 -35 --49 --125 --127 --127 --33 -84 -123 -123 -123 -34 --51 --126 --127 --127 --33 -84 -123 -123 -123 -35 --50 --125 --127 --127 --32 -85 -123 -115 -22 --61 --127 --127 --14 -93 -123 -118 -24 --59 --127 --127 --15 -93 -123 -117 -23 --60 --127 --127 --16 -92 -123 -116 -22 --61 --127 --127 --16 -92 -123 -116 -22 --61 --127 --127 --17 -92 -123 -115 -22 --61 --127 --127 --17 -91 -123 -123 -123 -33 --52 --127 --127 --127 --35 -83 -123 -123 -123 -33 --52 --127 --127 --127 --33 -84 -123 -123 -123 -36 --49 --125 --127 --127 --33 -84 -123 -123 -123 -35 --50 --125 --127 --127 --32 -85 -123 -123 -123 -36 --49 --125 --127 --127 --32 -85 -123 -123 -123 -36 --49 --124 --127 --127 --31 -86 -123 -123 -123 -36 --49 --124 --127 --127 --31 -85 -123 -123 -123 -37 --48 --124 --127 --127 --32 -84 -123 -123 -123 -35 --50 --125 --127 --127 --32 -85 -123 -123 -123 -35 --50 --125 --127 --127 --32 -85 -123 -115 -22 --61 --127 --127 --14 -93 -123 -118 -24 --59 --127 --127 --16 -92 -123 -116 -23 --60 --127 --127 --16 -91 -123 -117 -23 --60 --127 --127 --17 -92 -123 -115 -22 --61 --127 --127 --17 -91 -123 -115 -21 --62 --127 --127 --17 -91 -123 -116 -23 --60 --127 --127 --127 --23 -94 -123 -123 -123 -44 --41 --118 --127 --127 --25 -91 -123 -123 -123 -40 --45 --121 --127 --127 --28 -88 -123 -123 -123 -37 --47 --123 --127 --127 --30 -87 -123 -123 -123 -36 --48 --124 --127 --127 --30 -86 -123 -123 -123 -37 --48 --123 --127 --24 -82 -123 -104 -12 --70 --127 --127 --25 -83 -123 -108 -15 --67 --127 --127 --23 -86 -123 -112 -19 --64 --127 --127 --20 -87 -123 -111 -19 --64 --127 --127 --20 -89 -123 -113 -20 --63 --127 --127 --19 -90 -123 -115 -21 --62 --127 --127 --18 -90 -123 -113 -20 --62 --127 --127 --18 -90 -123 -114 -20 --62 --127 --127 --17 -90 -123 -115 -22 --61 --127 --127 --18 -91 -123 -114 -20 --62 --127 --127 --17 -91 -123 -115 -22 --61 --127 --127 --17 -91 -123 -115 -22 --61 --127 --127 --17 -91 -123 -123 -123 -32 --52 --127 --127 --127 --33 -83 -123 -123 -123 -34 --51 --126 --127 --127 --33 -83 -123 -123 -123 -36 --49 --124 --127 --127 --32 -84 -123 -123 -123 -34 --51 --126 --127 --127 --32 -84 -123 -123 -123 -34 --51 --126 --127 --127 --32 -84 -123 -115 -22 --61 --127 --127 --14 -94 -123 -117 -24 --60 --127 --127 --15 -93 -123 -117 -23 --60 --127 --127 --16 -92 -123 -116 -23 --60 --127 --127 --16 -92 -123 -114 -21 --62 --127 --127 --16 -91 -123 -116 -23 --60 --127 --127 --17 -91 -123 -123 -123 -34 --51 --126 --127 --127 --34 -83 -123 -123 -123 -33 --52 --127 --127 --127 --33 -84 -123 -123 -123 -36 --49 --124 --127 --127 --32 -85 -123 -123 -123 -35 --50 --125 --127 --127 --32 -85 -123 -123 -123 -35 --50 --125 --127 --127 --32 -85 -123 -123 -123 -36 --49 --125 --127 --127 --32 -85 -123 -123 -123 -35 --50 --125 --127 --127 --32 -85 -123 -123 -123 -37 --48 --124 --127 --127 --32 -84 -123 -123 -123 -35 --50 --125 --127 --127 --32 -84 -123 -123 -123 -35 --50 --125 --127 --127 --32 -84 -123 -116 -22 --61 --127 --127 --15 -94 -123 -117 -24 --60 --127 --127 --16 -92 -123 -116 -22 --61 --127 --127 --16 -92 -123 -116 -23 --60 --127 --127 --17 -92 -123 -115 -22 --61 --127 --127 --17 -91 -123 -115 -22 --61 --127 --127 --17 -91 -123 -117 -23 --60 --127 --127 --18 -91 -123 -114 -21 --62 --127 --127 --17 -91 -123 -115 -22 --61 --127 --127 --18 -91 -123 -116 -22 --61 --127 --127 --17 -90 -123 -114 -21 --62 --127 --127 --18 -90 -123 -114 -21 --62 --127 --127 --18 -90 -123 -116 -22 --61 --127 --127 --127 --24 -93 -123 -123 -123 -43 --42 --119 --127 --127 --26 -90 -123 -123 -123 -40 --45 --121 --127 --127 --28 -87 -123 -123 -123 -37 --47 --123 --127 --127 --29 -87 -123 -123 -123 -37 --48 --124 --127 --127 --30 -85 -123 -123 -123 -37 --48 --123 --127 --24 -83 -123 -105 -13 --69 --127 --127 --25 -84 -123 -108 -15 --67 --127 --127 --22 -86 -123 -112 -19 --64 --127 --127 --19 -89 -123 -112 -19 --64 --127 --127 --19 -90 -123 -113 -20 --62 --127 --127 --18 -91 -123 -115 -21 --62 --127 --127 --18 -90 -123 -123 -123 -32 --52 --127 --127 --127 --35 -82 -123 -123 -123 -34 --51 --126 --127 --127 --34 -83 -123 -123 -123 -35 --50 --125 --127 --127 --33 -84 -123 -123 -123 -34 --51 --126 --127 --127 --32 -83 -123 -123 -123 -35 --50 --125 --127 --127 --32 -85 -123 -115 -22 --61 --127 --127 --15 -94 -123 -117 -24 --60 --127 --127 --16 -93 -123 -116 -22 --61 --127 --127 --16 -92 -123 -116 -22 --61 --127 --127 --17 -92 -123 -115 -22 --61 --127 --127 --17 -91 -123 -115 -22 --61 --127 --127 --17 -91 -123 -123 -123 -34 --51 --126 --127 --127 --34 -82 -123 -123 -123 -34 --51 --126 --127 --127 --32 -83 -123 -123 -123 -36 --49 --124 --127 --127 --32 -84 -123 -123 -123 -35 --50 --125 --127 --127 --32 -84 -123 -123 -123 -35 --50 --125 --127 --127 --32 -85 -123 -116 -22 --61 --127 --127 --14 -93 -123 -118 -25 --59 --127 --127 --15 -93 -123 -116 -23 --60 --127 --127 --16 -92 -123 -116 -23 --60 --127 --127 --17 -91 -123 -115 -22 --61 --127 --127 --17 -91 -123 -115 -22 --61 --127 --127 --17 -91 -123 -117 -23 --60 --127 --127 --127 --23 -94 -123 -123 -123 -44 --41 --118 --127 --127 --25 -91 -123 -123 -123 -39 --46 --122 --127 --127 --27 -88 -123 -123 -123 -38 --47 --123 --127 --127 --29 -86 -123 -123 -123 -36 --48 --124 --127 --127 --30 -86 -123 -123 -123 -36 --48 --124 --127 --127 --32 -85 -123 -123 -123 -35 --49 --125 --127 --127 --32 -84 -123 -123 -123 -34 --50 --126 --127 --127 --32 -85 -123 -123 -123 -35 --50 --125 --127 --127 --31 -85 -123 -123 -123 -35 --49 --125 --127 --127 --31 -85 -123 -123 -123 -37 --48 --124 --127 --25 -82 -123 -104 -12 --70 --127 --127 --24 -84 -123 -109 -16 --66 --127 --127 --22 -87 -123 -112 -19 --64 --127 --127 --20 -88 -123 -112 -19 --63 --127 --127 --19 -89 -123 -114 -21 --62 --127 --127 --18 -91 -123 -116 -22 --61 --127 --127 --127 --23 -94 -123 -123 -123 -44 --42 --118 --127 --127 --24 -92 -123 -123 -123 -40 --45 --121 --127 --127 --27 -89 -123 -123 -123 -39 --46 --122 --127 --127 --28 -87 -123 -123 -123 -37 --48 --124 --127 --127 --30 -85 -123 -123 -123 -37 --47 --123 --127 --25 -82 -123 -104 -11 --71 --127 --127 --26 -82 -123 -107 -15 --68 --127 --127 --23 -85 -123 -110 -18 --65 --127 --127 --22 -87 -123 -110 -18 --65 --127 --127 --20 -87 -123 -112 -19 --63 --127 --127 --19 -89 -123 -113 -20 --63 --127 --127 --19 -90 -123 -112 -19 --63 --127 --127 --18 -90 -123 -115 -21 --62 --127 --127 --18 -91 -123 -114 -21 --62 --127 --127 --17 -91 -123 -115 -22 --61 --127 --127 --17 -91 -123 -115 -21 --62 --127 --127 --17 -91 -123 -116 -22 --61 --127 --127 --17 -91 -123 -123 -123 -34 --51 --126 --127 --127 --34 -83 -123 -123 -123 -34 --51 --126 --127 --127 --32 -84 -123 -123 -123 -36 --49 --124 --127 --127 --32 -84 -123 -123 -123 -35 --50 --125 --127 --127 --32 -84 -123 -123 -123 -35 --50 --125 --127 --127 --31 -85 -123 -116 -22 --61 --127 --127 --14 -93 -123 -117 -24 --59 --127 --127 --14 -94 -123 -116 -22 --61 --127 --127 --17 -92 -123 -116 -23 --60 --127 --127 --17 -91 -123 -115 -22 --61 --127 --127 --18 -91 -123 -114 -21 --62 --127 --127 --17 -91 -123 -116 -23 --60 --127 --127 --17 -91 -123 -114 -21 --62 --127 --127 --18 -91 -123 -115 -21 --61 --127 --127 --17 -91 -123 -115 -22 --61 --127 --127 --18 -91 -123 -114 -21 --62 --127 --127 --18 -91 -123 -114 -21 --62 --127 --127 --17 -91 -123 -116 -23 --60 --127 --127 --17 -91 -123 -114 -21 --62 --127 --127 --18 -91 -123 -114 -21 --62 --127 --127 --17 -90 -123 -115 -21 --62 --127 --127 --18 -90 -123 -113 -20 --62 --127 --127 --17 -90 -123 -114 -21 --62 --127 --127 --18 -90 -123 -114 -20 --62 --127 --127 --18 -90 -123 -123 -123 -32 --52 --127 --127 --127 --35 -82 -123 -123 -123 -33 --51 --126 --127 --127 --33 -83 -123 -123 -123 -36 --49 --125 --127 --127 --33 -84 -123 -123 -123 -35 --50 --125 --127 --127 --32 -84 -123 -123 -123 -34 --51 --126 --127 --127 --32 -84 -123 -123 -123 -35 --50 --125 --127 --127 --32 -85 -123 -123 -123 -35 --50 --125 --127 --127 --31 -85 -123 -123 -123 -37 --48 --124 --127 --127 --31 -85 -123 -123 -123 -36 --49 --124 --127 --127 --31 -85 -123 -123 -123 -35 --50 --125 --127 --127 --32 -85 -123 -123 -123 -36 --49 --125 --127 --127 --32 -85 -123 -123 -123 -35 --49 --125 --127 --127 --31 -86 -123 -123 -123 -36 --49 --124 --127 --127 --32 -84 -123 -123 -123 -35 --50 --125 --127 --127 --32 -85 -123 -123 -123 -35 --50 --125 --127 --127 --32 -85 -123 -116 -22 --61 --127 --127 --14 -94 -123 -117 -24 --59 --127 --127 --15 -93 -123 -116 -23 --60 --127 --127 --16 -93 -123 -115 -22 --61 --127 --127 --17 -92 -123 -115 -22 --61 --127 --127 --17 -91 -123 -115 -22 --61 --127 --127 --17 -91 -123 -123 -123 -34 --51 --126 --127 --127 --34 -82 -123 -123 -123 -33 --52 --127 --127 --127 --33 -83 -123 -123 -123 -36 --49 --125 --127 --127 --33 -84 -123 -123 -123 -34 --51 --126 --127 --127 --32 -85 -123 -123 -123 -35 --50 --125 --127 --127 --32 -84 -123 -123 -123 -37 --48 --124 --127 --127 --31 -85 -123 -123 -123 -35 --50 --125 --127 --127 --32 -85 -123 -123 -123 -36 --49 --124 --127 --127 --32 -85 -123 -123 -123 -35 --50 --125 --127 --127 --31 -85 -123 -123 -123 -35 --49 --125 --127 --127 --32 -85 -123 -116 -23 --60 --127 --127 --14 -94 -123 -117 -23 --60 --127 --127 --15 -92 -123 -117 -23 --60 --127 --127 --16 -91 -123 -116 -22 --61 --127 --127 --17 -91 -123 -115 -22 --61 --127 --127 --17 -91 -123 -115 -22 --61 --127 --127 --17 -91 -123 -116 -23 --60 --127 --127 --17 -91 -123 -115 -21 --62 --127 --127 --17 -91 -123 -116 -22 --61 --127 --127 --16 -92 -123 -117 -23 --60 --127 --127 --16 -92 -123 -114 -21 --62 --127 --127 --17 -91 -123 -115 -22 --61 --127 --127 --18 -90 -123 -116 -22 --61 --127 --127 --127 --24 -93 -123 -123 -123 -43 --42 --119 --127 --127 --26 -90 -123 -123 -123 -39 --46 --122 --127 --127 --28 -88 -123 -123 -123 -37 --47 --123 --127 --127 --30 -86 -123 -123 -123 -37 --48 --123 --127 --127 --30 -85 -123 -123 -123 -37 --48 --123 --127 --24 -83 -123 -105 -12 --70 --127 --127 --25 -83 -123 -108 -15 --67 --127 --127 --22 -86 -123 -111 -19 --64 --127 --127 --21 -88 -123 -111 -18 --64 --127 --127 --19 -88 -123 -113 -19 --63 --127 --127 --18 -90 -123 -114 -21 --62 --127 --127 --17 -90 -123 -123 -123 -32 --52 --127 --127 --127 --35 -82 -123 -123 -123 -33 --52 --127 --127 --127 --33 -84 -123 -123 -123 -35 --50 --125 --127 --127 --33 -84 -123 -123 -123 -35 --50 --125 --127 --127 --32 -85 -123 -123 -123 -35 --50 --125 --127 --127 --32 -85 -123 -123 -123 -35 --50 --125 --127 --127 --32 -85 -123 -123 -123 -35 --50 --125 --127 --127 --31 -85 -123 -123 -123 -36 --49 --124 --127 --127 --31 -85 -123 -123 -123 -35 --50 --125 --127 --127 --32 -85 -123 -123 -123 -36 --49 --125 --127 --127 --32 -85 -123 -116 -22 --61 --127 --127 --14 -94 -123 -118 -24 --59 --127 --127 --15 -93 -123 -116 -23 --60 --127 --127 --16 -92 -123 -115 -22 --61 --127 --127 --16 -91 -123 -116 -22 --61 --127 --127 --16 -92 -123 -115 -22 --61 --127 --127 --17 -91 -123 -123 -123 -34 --50 --126 --127 --127 --34 -83 -123 -123 -123 -34 --51 --126 --127 --127 --33 -84 -123 -123 -123 -37 --49 --124 --127 --127 --32 -85 -123 -123 -123 -35 --50 --125 --127 --127 --32 -85 -123 -123 -123 -35 --50 --125 --127 --127 --32 -85 -123 -116 -22 --61 --127 --127 --15 -93 -123 -116 -23 --60 --127 --127 --16 -92 -123 -115 -22 --61 --127 --127 --17 -92 -123 -116 -22 --61 --127 --127 --17 -91 -123 -115 -22 --61 --127 --127 --17 -91 -123 -115 -21 --61 --127 --127 --18 -91 -123 -116 -22 --61 --127 --127 --127 --23 -94 -123 -123 -123 -44 --42 --118 --127 --127 --25 -91 -123 -123 -123 -40 --45 --121 --127 --127 --28 -88 -123 -123 -123 -37 --48 --123 --127 --127 --29 -87 -123 -123 -123 -36 --48 --124 --127 --127 --30 -86 -123 -123 -123 -37 --47 --123 --127 --24 -82 -123 -105 -12 --70 --127 --127 --25 -84 -123 -108 -16 --67 --127 --127 --22 -87 -123 -113 -20 --63 --127 --127 --20 -89 -123 -113 -19 --63 --127 --127 --18 -90 -123 -113 -20 --62 --127 --127 --19 -91 -123 -116 -22 --61 --127 --127 --127 --23 -94 -123 -123 -123 -44 --42 --118 --127 --127 --24 -91 -123 -123 -123 -39 --45 --121 --127 --127 --27 -88 -123 -123 -123 -37 --47 --123 --127 --127 --30 -86 -123 -123 -123 -36 --49 --125 --127 --127 --31 -85 -123 -123 -123 -37 --48 --124 --127 --25 -82 -123 -104 -12 --70 --127 --127 --26 -83 -123 -107 -15 --68 --127 --127 --22 -86 -123 -111 -19 --64 --127 --127 --20 -88 -123 -112 -19 --64 --127 --127 --19 -89 -123 -113 -20 --63 --127 --127 --18 -91 -123 -113 -20 --63 --127 --127 --18 -90 -123 -114 -21 --62 --127 --127 --17 -91 -123 -115 -22 --61 --127 --127 --17 -91 -123 -114 -21 --62 --127 --127 --17 -91 -123 -114 -21 --62 --127 --127 --17 -91 -123 -114 -21 --62 --127 --127 --17 -91 -123 -115 -21 --62 --127 --127 --17 -91 -123 -123 -123 -33 --52 --127 --127 --127 --35 -82 -123 -123 -123 -33 --51 --126 --127 --127 --33 -84 -123 -123 -123 -36 --49 --125 --127 --127 --32 -84 -123 -123 -123 -35 --50 --125 --127 --127 --32 -85 -123 -123 -123 -35 --50 --125 --127 --127 --32 -85 -123 -116 -23 --60 --127 --127 --15 -93 -123 -116 -23 --60 --127 --127 --16 -91 -123 -115 -22 --61 --127 --127 --17 -91 -123 -115 -22 --61 --127 --127 --18 -90 -123 -114 -21 --62 --127 --127 --17 -90 -123 -114 -21 --62 --127 --127 --18 -91 -123 -115 -22 --61 --127 --127 --127 --23 -94 -123 -123 -123 -44 --42 --118 --127 --127 --25 -91 -123 -123 -123 -39 --45 --121 --127 --127 --27 -89 -123 -123 -123 -38 --46 --122 --127 --127 --29 -87 -123 -123 -123 -37 --48 --123 --127 --127 --30 -86 -123 -123 -123 -37 --48 --123 --127 --23 -83 -123 -105 -13 --69 --127 --127 --24 -85 -123 -109 -16 --66 --127 --127 --22 -87 -123 -113 -20 --63 --127 --127 --19 -89 -123 -113 -19 --63 --127 --127 --19 -90 -123 -113 -20 --62 --127 --127 --19 -89 -123 -116 -22 --61 --127 --127 --127 --23 -93 -123 -123 -123 -43 --42 --119 --127 --127 --25 -91 -123 -123 -123 -39 --46 --122 --127 --127 --29 -88 -123 -123 -123 -38 --47 --123 --127 --127 --29 -86 -123 -123 -123 -36 --49 --124 --127 --127 --30 -86 -123 -123 -123 -37 --47 --123 --127 --24 -82 -123 -105 -13 --69 --127 --127 --25 -84 -123 -108 -16 --67 --127 --127 --22 -87 -123 -112 -19 --64 --127 --127 --20 -88 -123 -112 -19 --64 --127 --127 --19 -89 -123 -113 -20 --63 --127 --127 --18 -90 -123 -114 -21 --62 --127 --127 --18 -90 -123 -123 -123 -32 --52 --127 --127 --127 --35 -82 -123 -123 -123 -33 --52 --127 --127 --127 --34 -84 -123 -123 -123 -35 --50 --125 --127 --127 --33 -83 -123 -123 -123 -34 --51 --126 --127 --127 --33 -84 -123 -123 -123 -34 --51 --126 --127 --127 --32 -84 -123 -115 -22 --61 --127 --127 --15 -93 -123 -117 -24 --59 --127 --127 --15 -93 -123 -115 -22 --61 --127 --127 --16 -92 -123 -115 -22 --61 --127 --127 --16 -91 -123 -116 -23 --60 --127 --127 --17 -92 -123 -115 -22 --61 --127 --127 --16 -91 -123 -123 -123 -34 --51 --126 --127 --127 --34 -83 -123 -123 -123 -34 --51 --126 --127 --127 --33 -84 -123 -123 -123 -36 --49 --124 --127 --127 --32 -85 -123 -123 -123 -35 --50 --125 --127 --127 --32 -85 -123 -123 -123 -35 --50 --125 --127 --127 --31 -85 -123 -116 -23 --61 --127 --127 --14 -94 -123 -117 -24 --59 --127 --127 --14 -93 -123 -117 -23 --60 --127 --127 --16 -92 -123 -116 -23 --60 --127 --127 --17 -91 -123 -115 -22 --61 --127 --127 --18 -91 -123 -114 -21 --62 --127 --127 --17 -90 -123 -115 -22 --61 --127 --127 --127 --23 -93 -123 -123 -123 -43 --42 --118 --127 --127 --24 -91 -123 -123 -123 -40 --45 --121 --127 --127 --28 -88 -123 -123 -123 -38 --47 --123 --127 --127 --30 -86 -123 -123 -123 -36 --48 --124 --127 --127 --31 -86 -123 -123 -123 -37 --48 --124 --127 --25 -82 -123 -105 -12 --69 --127 --127 --25 -84 -123 -108 -16 --67 --127 --127 --23 -86 -123 -112 -19 --63 --127 --127 --21 -87 -123 -112 -19 --64 --127 --127 --19 -89 -123 -113 -20 --63 --127 --127 --19 -90 -123 -116 -22 --61 --127 --127 --127 --23 -94 -123 -123 -123 -43 --42 --118 --127 --127 --25 -91 -123 -123 -123 -40 --45 --121 --127 --127 --28 -89 -123 -123 -123 -39 --46 --122 --127 --127 --29 -87 -123 -123 -123 -36 --48 --124 --127 --127 --30 -86 -123 -123 -123 -37 --48 --123 --127 --24 -82 -123 -104 -11 --70 --127 --127 --25 -83 -123 -107 -14 --68 --127 --127 --22 -86 -123 -111 -18 --64 --127 --127 --20 -88 -123 -112 -19 --64 --127 --127 --19 -89 -123 -113 -20 --63 --127 --127 --19 -90 -123 -114 -21 --62 --127 --127 --17 -90 -123 -123 -123 -32 --52 --127 --127 --127 --34 -82 -123 -123 -123 -33 --52 --127 --127 --127 --33 -84 -123 -123 -123 -35 --50 --125 --127 --127 --33 -83 -123 -123 -123 -35 --50 --125 --127 --127 --32 -84 -123 -123 -123 -34 --51 --126 --127 --127 --32 -85 -123 -115 -22 --61 --127 --127 --15 -94 -123 -116 -23 --60 --127 --127 --16 -92 -123 -116 -23 --60 --127 --127 --16 -92 -123 -115 -22 --61 --127 --127 --17 -91 -123 -115 -21 --61 --127 --127 --16 -92 -123 -116 -23 --60 --127 --127 --18 -91 -123 -123 -123 -33 --51 --126 --127 --127 --34 -83 -123 -123 -123 -33 --52 --126 --127 --127 --33 -84 -123 -123 -123 -36 --49 --124 --127 --127 --32 -84 -123 -123 -123 -35 --50 --125 --127 --127 --32 -84 -123 -123 -123 -35 --50 --125 --127 --127 --32 -85 -123 -116 -22 --61 --127 --127 --15 -93 -123 -116 -23 --60 --127 --127 --16 -93 -123 -116 -23 --60 --127 --127 --16 -92 -123 -117 -23 --60 --127 --127 --17 -92 -123 -115 -21 --61 --127 --127 --17 -91 -123 -115 -22 --61 --127 --127 --16 -92 -123 -117 -23 --60 --127 --127 --127 --23 -94 -123 -123 -123 -44 --41 --118 --127 --127 --24 -91 -123 -123 -123 -40 --45 --121 --127 --127 --28 -88 -123 -123 -123 -37 --47 --123 --127 --127 --30 -86 -123 -123 -123 -36 --48 --124 --127 --127 --31 -85 -123 -123 -123 -37 --48 --123 --127 --24 -82 -123 -104 -12 --70 --127 --127 --24 -84 -123 -109 -16 --66 --127 --127 --22 -87 -123 -113 -19 --63 --127 --127 --21 -88 -123 -112 -19 --64 --127 --127 --19 -89 -123 -113 -20 --63 --127 --127 --19 -89 -123 -115 -21 --61 --127 --127 --127 --24 -93 -123 -123 -123 -43 --42 --119 --127 --127 --25 -91 -123 -123 -123 -39 --46 --122 --127 --127 --28 -89 -123 -123 -123 -38 --47 --123 --127 --127 --30 -86 -123 -123 -123 -37 --48 --124 --127 --127 --30 -86 -123 -123 -123 -37 --47 --123 --127 --24 -83 -123 -105 -12 --70 --127 --127 --25 -84 -123 -109 -16 --66 --127 --127 --22 -87 -123 -111 -19 --64 --127 --127 --20 -88 -123 -112 -19 --64 --127 --127 --19 -89 -123 -113 -20 --63 --127 --127 --18 -90 -123 -113 -20 --63 --127 --127 --18 -90 -123 -123 -123 -32 --52 --127 --127 --127 --35 -82 -123 -123 -123 -33 --52 --127 --127 --127 --34 -84 -123 -123 -123 -35 --50 --125 --127 --127 --33 -84 -123 -123 -123 -35 --50 --125 --127 --127 --31 -85 -123 -123 -123 -36 --49 --125 --127 --127 --31 -86 -123 -116 -23 --61 --127 --127 --14 -94 -123 -118 -24 --59 --127 --127 --15 -93 -123 -117 -23 --60 --127 --127 --16 -92 -123 -115 -21 --62 --127 --127 --16 -91 -123 -115 -21 --61 --127 --127 --17 -91 -123 -114 -21 --62 --127 --127 --17 -91 -123 -123 -123 -33 --52 --126 --127 --127 --35 -83 -123 -123 -123 -34 --51 --126 --127 --127 --33 -83 -123 -123 -123 -36 --49 --124 --127 --127 --32 -84 -123 -123 -123 -35 --50 --125 --127 --127 --32 -86 -123 -123 -123 -36 --49 --124 --127 --127 --31 -86 -123 -117 -23 --60 --127 --127 --13 -95 -123 -118 -24 --59 --127 --127 --15 -93 -123 -116 -23 --60 --127 --127 --16 -92 -123 -117 -23 --60 --127 --127 --17 -91 -123 -114 -21 --62 --127 --127 --18 -90 -123 -114 -20 --62 --127 --127 --18 -90 -123 -116 -22 --61 --127 --127 --127 --23 -94 -123 -123 -123 -43 --43 --119 --127 --127 --25 -91 -123 -123 -123 -39 --46 --122 --127 --127 --29 -88 -123 -123 -123 -37 --48 --123 --127 --127 --30 -86 -123 -123 -123 -37 --48 --124 --127 --127 --30 -86 -123 -123 -123 -37 --48 --124 --127 --25 -82 -123 -105 -12 --70 --127 --127 --25 -84 -123 -108 -16 --67 --127 --127 --22 -86 -123 -112 -19 --63 --127 --127 --20 -88 -123 -113 -19 --63 --127 --127 --19 -90 -123 -113 -20 --63 --127 --127 --18 -90 -123 -116 -23 --61 --127 --127 --127 --23 -94 -123 -123 -123 -44 --42 --118 --127 --127 --25 -91 -123 -123 -123 -40 --45 --121 --127 --127 --28 -88 -123 -123 -123 -38 --47 --123 --127 --127 --29 -86 -123 -123 -123 -36 --49 --125 --127 --127 --30 -85 -123 -123 -123 -36 --48 --124 --127 --24 -82 -123 -105 -13 --69 --127 --127 --25 -83 -123 -107 -15 --68 --127 --127 --22 -86 -123 -111 -19 --64 --127 --127 --20 -88 -123 -112 -19 --64 --127 --127 --19 -89 -123 -113 -20 --63 --127 --127 --18 -90 -123 -114 -21 --62 --127 --127 --18 -90 -123 -123 -123 -32 --53 --127 --127 --127 --34 -83 -123 -123 -123 -34 --51 --126 --127 --127 --33 -84 -123 -123 -123 -36 --49 --125 --127 --127 --32 -84 -123 -123 -123 -35 --50 --125 --127 --127 --32 -85 -123 -123 -123 -35 --50 --125 --127 --127 --32 -86 -123 -116 -23 --60 --127 --127 --13 -94 -123 -117 -24 --59 --127 --127 --15 -93 -123 -116 -22 --61 --127 --127 --17 -92 -123 -115 -22 --61 --127 --127 --17 -91 -123 -114 -21 --62 --127 --127 --18 -91 -123 -114 -21 --62 --127 --127 --17 -90 -123 -123 -123 -33 --52 --127 --127 --127 --35 -82 -123 -123 -123 -33 --52 --127 --127 --127 --34 -83 -123 -123 -123 -36 --49 --125 --127 --127 --32 -85 -123 -123 -123 -35 --50 --125 --127 --127 --32 -85 -123 -123 -123 -35 --50 --125 --127 --127 --31 -85 -123 -116 -23 --60 --127 --127 --15 -94 -123 -117 -24 --60 --127 --127 --15 -92 -123 -116 -23 --60 --127 --127 --16 -92 -123 -116 -23 --60 --127 --127 --17 -91 -123 -115 -22 --61 --127 --127 --17 -91 -123 -116 -22 --61 --127 --127 --17 -91 -123 -116 -23 --60 --127 --127 --127 --23 -94 -123 -123 -123 -44 --41 --118 --127 --127 --25 -91 -123 -123 -123 -40 --45 --121 --127 --127 --28 -89 -123 -123 -123 -38 --47 --123 --127 --127 --30 -87 -123 -123 -123 -37 --48 --123 --127 --127 --30 -86 -123 -123 -123 -37 --47 --123 --127 --25 -81 -123 -104 -12 --70 --127 --127 --25 -83 -123 -108 -15 --67 --127 --127 --22 -86 -123 -111 -19 --64 --127 --127 --20 -87 -123 -112 -19 --64 --127 --127 --19 -89 -123 -112 -19 --63 --127 --127 --19 -90 -123 -115 -22 --61 --127 --127 --127 --23 -94 -123 -123 -123 -43 --42 --118 --127 --127 --25 -92 -123 -123 -123 -40 --45 --121 --127 --127 --27 -89 -123 -123 -123 -38 --47 --123 --127 --127 --29 -86 -123 -123 -123 -36 --48 --124 --127 --127 --31 -85 -123 -123 -123 -37 --47 --123 --127 --24 -82 -123 -105 -12 --70 --127 --127 --25 -83 -123 -107 -15 --67 --127 --127 --21 -86 -123 -112 -19 --64 --127 --127 --20 -88 -123 -112 -19 --64 --127 --127 --20 -89 -123 -113 -20 --63 --127 --127 --18 -89 -123 -114 -21 --62 --127 --127 --18 -90 -123 -123 -123 -32 --52 --127 --127 --127 --35 -82 -123 -123 -123 -33 --52 --127 --127 --127 --34 -83 -123 -123 -123 -35 --50 --125 --127 --127 --33 -83 -123 -123 -123 -34 --50 --126 --127 --127 --32 -84 -123 -123 -123 -35 --50 --125 --127 --127 --32 -85 -123 -115 -22 --61 --127 --127 --13 -95 -123 -119 -25 --58 --127 --127 --15 -93 -123 -116 -23 --60 --127 --127 --16 -92 -123 -116 -22 --61 --127 --127 --17 -92 -123 -116 -22 --61 --127 --127 --17 -91 -123 -115 -21 --61 --127 --127 --16 -92 -123 -123 -123 -34 --51 --126 --127 --127 --34 -82 -123 -123 -123 -33 --51 --126 --127 --127 --33 -83 -123 -123 -123 -36 --49 --125 --127 --127 --33 -84 -123 -123 -123 -34 --51 --126 --127 --127 --32 -85 -123 -123 -123 -35 --50 --125 --127 --127 --32 -85 -123 -116 -22 --61 --127 --127 --14 -93 -123 -118 -24 --59 --127 --127 --16 -93 -123 -117 -23 --60 --127 --127 --16 -93 -123 -116 -23 --60 --127 --127 --16 -91 -123 -115 -22 --61 --127 --127 --17 -91 -123 -115 -22 --61 --127 --127 --18 -90 -123 -116 -23 --60 --127 --127 --127 --23 -94 -123 -123 -123 -43 --42 --118 --127 --127 --25 -91 -123 -123 -123 -40 --45 --121 --127 --127 --28 -88 -123 -123 -123 -38 --47 --123 --127 --127 --29 -87 -123 -123 -123 -36 --48 --124 --127 --127 --30 -86 -123 -123 -123 -37 --48 --124 --127 --24 -83 -123 -105 -12 --70 --127 --127 --25 -83 -123 -108 -16 --67 --127 --127 --22 -87 -123 -112 -19 --63 --127 --127 --20 -88 -123 -111 -18 --65 --127 --127 --19 -88 -123 -113 -20 --63 --127 --127 --19 -89 -123 -115 -22 --61 --127 --127 --127 --24 -93 -123 -123 -123 -43 --42 --119 --127 --127 --26 -91 -123 -123 -123 -39 --45 --121 --127 --127 --28 -88 -123 -123 -123 -38 --47 --123 --127 --127 --30 -86 -123 -123 -123 -36 --48 --124 --127 --127 --30 -85 -123 -123 -123 -37 --48 --124 --127 --24 -82 -123 -105 -13 --69 --127 --127 --25 -83 -123 -108 -15 --67 --127 --127 --23 -85 -123 -111 -18 --64 --127 --127 --21 -88 -123 -111 -18 --64 --127 --127 --20 -89 -123 -113 -20 --63 --127 --127 --18 -90 -123 -114 -21 --62 --127 --127 --18 -90 -123 -123 -123 -33 --52 --127 --127 --127 --34 -83 -123 -123 -123 -34 --51 --126 --127 --127 --33 -84 -123 -123 -123 -36 --49 --125 --127 --127 --32 -85 -123 -123 -123 -35 --50 --125 --127 --127 --31 -85 -123 -123 -123 -36 --49 --124 --127 --127 --32 -84 -123 -116 -22 --61 --127 --127 --14 -94 -123 -117 -24 --59 --127 --127 --16 -92 -123 -115 -22 --61 --127 --127 --16 -91 -123 -115 -22 --61 --127 --127 --17 -91 -123 -114 -21 --62 --127 --127 --17 -91 -123 -114 -21 --62 --127 --127 --18 -91 -123 -123 -123 -33 --51 --126 --127 --127 --34 -83 -123 -123 -123 -33 --51 --126 --127 --127 --33 -84 -123 -123 -123 -36 --49 --125 --127 --127 --32 -85 -123 -123 -123 -36 --49 --125 --127 --127 --31 -86 -123 -123 -123 -35 --50 --125 --127 --127 --31 -86 -123 -117 -23 --60 --127 --127 --13 -94 -123 -118 -25 --58 --127 --127 --15 -93 -123 -116 -23 --60 --127 --127 --16 -92 -123 -117 -23 --60 --127 --127 --17 -91 -123 -115 -22 --61 --127 --127 --17 -91 -123 -115 -21 --62 --127 --127 --17 -91 -123 -117 -23 --60 --127 --127 --127 --23 -94 -123 -123 -123 -43 --42 --118 --127 --127 --25 -91 -123 -123 -123 -39 --46 --122 --127 --127 --29 -87 -123 -123 -123 -37 --47 --123 --127 --127 --30 -86 -123 -123 -123 -36 --48 --124 --127 --127 --31 -86 -123 -123 -123 -37 --48 --124 --127 --25 -82 -123 -105 -12 --70 --127 --127 --25 -83 -123 -108 -16 --67 --127 --127 --22 -87 -123 -112 -19 --64 --127 --127 --20 -88 -123 -113 -20 --63 --127 --127 --19 -90 -123 -113 -20 --63 --127 --127 --18 -90 -123 -116 -23 --60 --127 --127 --127 --22 -94 -123 -123 -123 -43 --42 --118 --127 --127 --24 -92 -123 -123 -123 -40 --45 --121 --127 --127 --27 -89 -123 -123 -123 -38 --46 --122 --127 --127 --29 -87 -123 -123 -123 -36 --48 --124 --127 --127 --30 -86 -123 -123 -123 -37 --48 --123 --127 --25 -82 -123 -104 -12 --70 --127 --127 --25 -82 -123 -108 -15 --67 --127 --127 --22 -86 -123 -111 -18 --65 --127 --127 --21 -87 -123 -111 -19 --64 --127 --127 --19 -88 -123 -113 -20 --63 --127 --127 --19 -89 -123 -113 -20 --63 --127 --127 --18 -90 -123 -123 -123 -32 --53 --127 --127 --127 --35 -82 -123 -123 -123 -33 --52 --127 --127 --127 --33 -83 -123 -123 -123 -35 --50 --125 --127 --127 --34 -83 -123 -123 -123 -35 --50 --125 --127 --127 --32 -84 -123 -123 -123 -35 --50 --125 --127 --127 --32 -85 -123 -116 -22 --61 --127 --127 --15 -94 -123 -118 -24 --59 --127 --127 --15 -92 -123 -116 -23 --60 --127 --127 --16 -92 -123 -116 -22 --61 --127 --127 --17 -91 -123 -115 -22 --61 --127 --127 --16 -91 -123 -115 -22 --61 --127 --127 --17 -91 -123 -123 -123 -34 --51 --126 --127 --127 --34 -83 -123 -123 -123 -34 --51 --126 --127 --127 --33 -84 -123 -123 -123 -36 --49 --124 --127 --127 --32 -84 -123 -123 -123 -35 --50 --125 --127 --127 --32 -85 -123 -123 -123 -36 --50 --125 --127 --127 --31 -86 -123 -116 -23 --60 --127 --127 --14 -94 -123 -117 -24 --59 --127 --127 --15 -93 -123 -117 -23 --60 --127 --127 --17 -92 -123 -116 -22 --60 --127 --127 --17 -91 -123 -115 -22 --61 --127 --127 --18 -91 -123 -115 -22 --61 --127 --127 --17 -90 -123 -116 -23 --60 --127 --127 --127 --23 -94 -123 -123 -123 -43 --42 --118 --127 --127 --25 -91 -123 -123 -123 -40 --45 --121 --127 --127 --28 -88 -123 -123 -123 -37 --47 --123 --127 --127 --29 -86 -123 -123 -123 -36 --48 --124 --127 --127 --31 -85 -123 -123 -123 -37 --48 --123 --127 --25 -82 -123 -105 -12 --70 --127 --127 --26 -82 -123 -108 -15 --67 --127 --127 --22 -86 -123 -112 -19 --64 --127 --127 --21 -88 -123 -111 -18 --65 --127 --127 --20 -89 -123 -113 -20 --63 --127 --127 --19 -89 -123 -115 -22 --61 --127 --127 --127 --23 -94 -123 -123 -123 -43 --42 --119 --127 --127 --25 -91 -123 -123 -123 -40 --45 --121 --127 --127 --28 -88 -123 -123 -123 -38 --47 --123 --127 --127 --29 -87 -123 -123 -123 -37 --48 --124 --127 --127 --30 -85 -123 -123 -123 -37 --48 --123 --127 --24 -83 -123 -105 -12 --70 --127 --127 --25 -84 -123 -108 -15 --67 --127 --127 --22 -86 -123 -112 -19 --64 --127 --127 --20 -89 -123 -112 -19 --64 --127 --127 --19 -89 -123 -113 -20 --63 --127 --127 --18 -90 -123 -114 -20 --62 --127 --127 --18 -90 -123 -123 -123 -32 --52 --127 --127 --127 --35 -82 -123 -123 -123 -33 --52 --127 --127 --127 --34 -83 -123 -123 -123 -35 --50 --125 --127 --127 --33 -84 -123 -123 -123 -35 --50 --125 --127 --127 --31 -85 -123 -123 -123 -35 --50 --125 --127 --127 --31 -86 -123 -116 -23 --61 --127 --127 --14 -94 -123 -118 -24 --59 --127 --127 --15 -93 -123 -117 -24 --59 --127 --127 --16 -92 -123 -115 -22 --61 --127 --127 --16 -92 -123 -116 -22 --61 --127 --127 --16 -92 -123 -115 -22 --61 --127 --127 --17 -91 -123 -123 -123 -34 --51 --126 --127 --127 --33 -84 -123 -123 -123 -34 --51 --126 --127 --127 --33 -84 -123 -123 -123 -37 --48 --124 --127 --127 --32 -84 -123 -123 -123 -34 --51 --126 --127 --127 --31 -85 -123 -123 -123 -34 --51 --126 --127 --127 --32 -85 -123 -116 -23 --60 --127 --127 --14 -94 -123 -117 -24 --60 --127 --127 --15 -93 -123 -115 -22 --61 --127 --127 --18 -91 -123 -116 -22 --61 --127 --127 --17 -90 -123 -114 -21 --62 --127 --127 --18 -90 -123 -114 -20 --62 --127 --127 --17 -90 -123 -115 -22 --61 --127 --127 --127 --24 -92 -123 -123 -123 -43 --43 --119 --127 --127 --26 -90 -123 -123 -123 -39 --46 --122 --127 --127 --28 -88 -123 -123 -123 -38 --47 --123 --127 --127 --29 -87 -123 -123 -123 -37 --48 --123 --127 --127 --30 -87 -123 -123 -123 -38 --47 --123 --127 --23 -83 -123 -106 -14 --68 --127 --127 --24 -85 -123 -109 -16 --66 --127 --127 --21 -87 -123 -113 -20 --63 --127 --127 --20 -88 -123 -111 -18 --64 --127 --127 --19 -89 -123 -113 -19 --63 --127 --127 --19 -89 -123 -116 -22 --61 --127 --127 --127 --24 -93 -123 -123 -123 -42 --43 --119 --127 --127 --25 -90 -123 -123 -123 -39 --46 --122 --127 --127 --28 -88 -123 -123 -123 -37 --47 --123 --127 --127 --30 -87 -123 -123 -123 -36 --49 --124 --127 --127 --31 -85 -123 -123 -123 -37 --47 --123 --127 --24 -82 -123 -105 -13 --69 --127 --127 --25 -84 -123 -108 -15 --67 --127 --127 --22 -86 -123 -112 -19 --64 --127 --127 --20 -88 -123 -112 -19 --64 --127 --127 --19 -89 -123 -113 -20 --62 --127 --127 --18 -90 -123 -114 -21 --62 --127 --127 --18 -90 -123 -123 -123 -33 --52 --127 --127 --127 --34 -82 -123 -123 -123 -32 --52 --127 --127 --127 --34 -83 -123 -123 -123 -35 --50 --126 --127 --127 --34 -83 -123 -123 -123 -34 --51 --126 --127 --127 --33 -83 -123 -123 -123 -35 --50 --125 --127 --127 --33 -85 -123 -115 -22 --61 --127 --127 --14 -94 -123 -117 -24 --59 --127 --127 --15 -93 -123 -116 -22 --61 --127 --127 --16 -92 -123 -116 -22 --61 --127 --127 --16 -92 -123 -116 -22 --61 --127 --127 --16 -92 -123 -115 -22 --61 --127 --127 --17 -92 -123 -123 -123 -34 --51 --126 --127 --127 --34 -83 -123 -123 -123 -34 --51 --126 --127 --127 --32 -84 -123 -123 -123 -37 --49 --124 --127 --127 --31 -85 -123 -123 -123 -36 --49 --125 --127 --127 --31 -85 -123 -123 -123 -35 --50 --125 --127 --127 --31 -85 -123 -116 -23 --60 --127 --127 --15 -93 -123 -117 -24 --59 --127 --127 --16 -92 -123 -116 -22 --61 --127 --127 --17 -91 -123 -116 -22 --61 --127 --127 --17 -91 -123 -114 -21 --62 --127 --127 --18 -90 -123 -114 -21 --62 --127 --127 --18 -91 -123 -117 -24 --60 --127 --127 --127 --23 -94 -123 -123 -123 -43 --42 --118 --127 --127 --24 -90 -123 -123 -123 -40 --45 --121 --127 --127 --27 -88 -123 -123 -123 -38 --47 --123 --127 --127 --29 -87 -123 -123 -123 -36 --48 --124 --127 --127 --30 -86 -123 -123 -123 -37 --48 --124 --127 --24 -82 -123 -105 -13 --69 --127 --127 --24 -84 -123 -108 -16 --67 --127 --127 --22 -87 -123 -112 -19 --64 --127 --127 --20 -88 -123 -112 -19 --63 --127 --127 --19 -90 -123 -114 -20 --62 --127 --127 --19 -90 -123 -115 -22 --61 --127 --127 --127 --23 -94 -123 -123 -123 -43 --42 --119 --127 --127 --25 -91 -123 -123 -123 -39 --45 --121 --127 --127 --28 -88 -123 -123 -123 -37 --47 --123 --127 --127 --29 -87 -123 -123 -123 -36 --48 --124 --127 --127 --30 -86 -123 -123 -123 -37 --47 --123 --127 --24 -82 -123 -105 -12 --70 --127 --127 --25 -83 -123 -108 -15 --67 --127 --127 --23 -86 -123 -111 -18 --65 --127 --127 --20 -87 -123 -111 -18 --64 --127 --127 --20 -89 -123 -113 -20 --63 --127 --127 --19 -89 -123 -113 -20 --63 --127 --127 --18 -90 -123 -123 -123 -32 --52 --127 --127 --127 --34 -82 -123 -123 -123 -34 --51 --126 --127 --127 --33 -83 -123 -123 -123 -35 --50 --125 --127 --127 --32 -85 -123 -123 -123 -35 --50 --125 --127 --127 --31 -85 -123 -123 -123 -35 --50 --125 --127 --127 --32 -85 -123 -116 -23 --60 --127 --127 --13 -95 -123 -118 -24 --59 --127 --127 --16 -93 -123 -116 -22 --61 --127 --127 --16 -92 -123 -115 -21 --62 --127 --127 --17 -90 -123 -114 -21 --62 --127 --127 --17 -91 -123 -115 -21 --62 --127 --127 --18 -91 -123 -123 -123 -34 --51 --126 --127 --127 --34 -83 -123 -123 -123 -34 --51 --126 --127 --127 --32 -84 -123 -123 -123 -36 --49 --124 --127 --127 --32 -85 -123 -123 -123 -36 --49 --125 --127 --127 --32 -85 -123 -123 -123 -36 --49 --125 --127 --127 --31 -85 -123 -116 -23 --60 --127 --127 --14 -94 -123 -117 -23 --60 --127 --127 --15 -92 -123 -116 -23 --60 --127 --127 --17 -92 -123 -116 -23 --60 --127 --127 --18 -91 -123 -115 -21 --61 --127 --127 --17 -91 -123 -114 -21 --62 --127 --127 --18 -90 -123 -115 -22 --61 --127 --127 --127 --23 -94 -123 -123 -123 -43 --42 --118 --127 --127 --25 -91 -123 -123 -123 -39 --45 --121 --127 --127 --28 -88 -123 -123 -123 -38 --47 --123 --127 --127 --29 -87 -123 -123 -123 -37 --48 --123 --127 --127 --30 -86 -123 -123 -123 -37 --47 --123 --127 --24 -83 -123 -105 -13 --69 --127 --127 --25 -84 -123 -109 -16 --66 --127 --127 --21 -87 -123 -113 -20 --63 --127 --127 --20 -89 -123 -112 -19 --63 --127 --127 --19 -89 -123 -113 -20 --63 --127 --127 --19 -90 -123 -115 -22 --61 --127 --127 --127 --24 -93 -123 -123 -123 -43 --42 --119 --127 --127 --25 -90 -123 -123 -123 -39 --46 --122 --127 --127 --28 -88 -123 -123 -123 -38 --47 --123 --127 --127 --29 -86 -123 -123 -123 -36 --48 --124 --127 --127 --30 -85 -123 -123 -123 -37 --48 --123 --127 --127 --31 -85 -123 -123 -123 -35 --49 --125 --127 --127 --31 -85 -123 -123 -123 -35 --50 --125 --127 --127 --31 -85 -123 -123 -123 -35 --49 --125 --127 --127 --31 -85 -123 -123 -123 -36 --49 --125 --127 --127 --31 -86 -123 -123 -123 -37 --47 --123 --127 --24 -82 -123 -105 -13 --69 --127 --127 --25 -83 -123 -108 -16 --67 --127 --127 --22 -87 -123 -112 -19 --64 --127 --127 --19 -89 -123 -112 -19 --64 --127 --127 --20 -88 -123 -113 -20 --63 --127 --127 --18 -90 -123 -113 -20 --63 --127 --127 --19 -89 -123 -113 -20 --63 --127 --127 --19 -90 -123 -113 -20 --62 --127 --127 --18 -89 -123 -114 -21 --62 --127 --127 --18 -90 -123 -114 -21 --62 --127 --127 --18 -91 -123 -114 -21 --62 --127 --127 --17 -91 -123 -115 -22 --61 --127 --127 --18 -91 -123 -123 -123 -33 --51 --126 --127 --127 --34 -82 -123 -123 -123 -34 --51 --126 --127 --127 --33 -84 -123 -123 -123 -35 --50 --125 --127 --127 --32 -84 -123 -123 -123 -34 --51 --126 --127 --127 --32 -84 -123 -123 -123 -34 --50 --126 --127 --127 --32 -84 -123 -116 -23 --60 --127 --127 --15 -93 -123 -117 -23 --60 --127 --127 --16 -92 -123 -115 -22 --61 --127 --127 --16 -92 -123 -116 -22 --61 --127 --127 --17 -91 -123 -114 -21 --62 --127 --127 --17 -91 -123 -115 -21 --61 --127 --127 --18 -90 -123 -116 -22 --61 --127 --127 --127 --23 -94 -123 -123 -123 -43 --42 --118 --127 --127 --25 -91 -123 -123 -123 -40 --45 --121 --127 --127 --28 -88 -123 -123 -123 -38 --47 --123 --127 --127 --29 -86 -123 -123 -123 -37 --48 --124 --127 --127 --30 -86 -123 -123 -123 -37 --48 --124 --127 --24 -82 -123 -105 -12 --70 --127 --127 --25 -84 -123 -107 -15 --67 --127 --127 --22 -86 -123 -113 -19 --63 --127 --127 --21 -87 -123 -112 -19 --64 --127 --127 --20 -89 -123 -113 -20 --63 --127 --127 --19 -90 -123 -115 -22 --61 --127 --127 --127 --24 -94 -123 -123 -123 -43 --42 --119 --127 --127 --25 -90 -123 -123 -123 -40 --45 --121 --127 --127 --28 -88 -123 -123 -123 -38 --47 --123 --127 --127 --30 -87 -123 -123 -123 -37 --48 --123 --127 --127 --30 -86 -123 -123 -123 -38 --47 --123 --127 --127 --31 -85 -123 -123 -123 -36 --49 --124 --127 --127 --31 -86 -123 -123 -123 -35 --49 --125 --127 --127 --31 -86 -123 -123 -123 -36 --48 --124 --127 --127 --30 -85 -123 -123 -123 -35 --49 --125 --127 --127 --30 -85 -123 -123 -123 -37 --47 --123 --127 --24 -82 -123 -104 -12 --70 --127 --127 --26 -84 -123 -107 -15 --67 --127 --127 --23 -85 -123 -111 -18 --65 --127 --127 --21 -87 -123 -111 -18 --65 --127 --127 --20 -88 -123 -112 -19 --64 --127 --127 --19 -89 -123 -113 -20 --63 --127 --127 --19 -90 -123 -113 -20 --63 --127 --127 --17 -90 -123 -114 -21 --62 --127 --127 --17 -91 -123 -115 -22 --61 --127 --127 --18 -91 -123 -114 -21 --62 --127 --127 --17 -90 -123 -115 -22 --61 --127 --127 --17 -92 -123 -115 -21 --62 --127 --127 --17 -91 -123 -123 -123 -34 --51 --126 --127 --127 --34 -83 -123 -123 -123 -33 --52 --127 --127 --127 --33 -83 -123 -123 -123 -36 --49 --125 --127 --127 --32 -84 -123 -123 -123 -35 --50 --125 --127 --127 --32 -85 -123 -123 -123 -35 --50 --125 --127 --127 --31 -86 -123 -116 -23 --60 --127 --127 --14 -95 -123 -118 -24 --59 --127 --127 --15 -93 -123 -117 -23 --60 --127 --127 --16 -92 -123 -116 -23 --60 --127 --127 --17 -92 -123 -115 -22 --61 --127 --127 --17 -91 -123 -115 -21 --62 --127 --127 --17 -91 -123 -116 -23 --60 --127 --127 --127 --23 -94 -123 -123 -123 -43 --42 --118 --127 --127 --26 -90 -123 -123 -123 -40 --45 --121 --127 --127 --29 -87 -123 -123 -123 -37 --48 --124 --127 --127 --30 -87 -123 -123 -123 -37 --48 --124 --127 --127 --31 -85 -123 -123 -123 -37 --48 --123 --127 --24 -82 -123 -105 -12 --70 --127 --127 --24 -84 -123 -109 -16 --66 --127 --127 --21 -88 -123 -112 -19 --64 --127 --127 --20 -88 -123 -112 -19 --64 --127 --127 --19 -89 -123 -113 -20 --63 --127 --127 --19 -90 -123 -115 -22 --61 --127 --127 --127 --24 -94 -123 -123 -123 -43 --42 --119 --127 --127 --26 -90 -123 -123 -123 -40 --45 --121 --127 --127 --28 -87 -123 -123 -123 -37 --47 --123 --127 --127 --30 -86 -123 -123 -123 -36 --48 --124 --127 --127 --29 -85 -123 -123 -123 -38 --47 --123 --127 --24 -83 -123 -106 -13 --69 --127 --127 --25 -84 -123 -109 -17 --66 --127 --127 --21 -88 -123 -112 -19 --64 --127 --127 --19 -89 -123 -112 -19 --64 --127 --127 --19 -89 -123 -114 -21 --62 --127 --127 --18 -91 -123 -114 -21 --62 --127 --127 --18 -90 -123 -123 -123 -33 --52 --127 --127 --127 --34 -82 -123 -123 -123 -33 --52 --127 --127 --127 --33 -83 -123 -123 -123 -35 --50 --125 --127 --127 --33 -84 -123 -123 -123 -34 --51 --126 --127 --127 --33 -84 -123 -123 -123 -34 --50 --125 --127 --127 --32 -84 -123 -115 -22 --61 --127 --127 --15 -93 -123 -117 -23 --60 --127 --127 --16 -92 -123 -116 -23 --61 --127 --127 --17 -91 -123 -115 -22 --61 --127 --127 --17 -92 -123 -116 -22 --61 --127 --127 --17 -91 -123 -115 -22 --61 --127 --127 --16 -92 -123 -123 -123 -34 --51 --126 --127 --127 --34 -83 -123 -123 -123 -33 --52 --127 --127 --127 --33 -83 -123 -123 -123 -36 --49 --125 --127 --127 --33 -84 -123 -123 -123 -35 --50 --125 --127 --127 --32 -85 -123 -123 -123 -35 --50 --125 --127 --127 --32 -85 -123 -116 -22 --61 --127 --127 --14 -93 -123 -118 -24 --59 --127 --127 --15 -92 -123 -117 -24 --60 --127 --127 --16 -92 -123 -116 -22 --61 --127 --127 --17 -91 -123 -115 -21 --61 --127 --127 --17 -91 -123 -114 -21 --62 --127 --127 --18 -90 -123 -116 -22 --61 --127 --127 --127 --23 -93 -123 -123 -123 -42 --43 --119 --127 --127 --25 -90 -123 -123 -123 -39 --45 --121 --127 --127 --29 -89 -123 -123 -123 -37 --47 --123 --127 --127 --29 -86 -123 -123 -123 -37 --48 --123 --127 --127 --30 -86 -123 -123 -123 -38 --47 --123 --127 --24 -83 -123 -105 -12 --70 --127 --127 --24 -84 -123 -109 -16 --66 --127 --127 --21 -87 -123 -112 -19 --64 --127 --127 --20 -88 -123 -112 -19 --63 --127 --127 --19 -89 -123 -113 -20 --63 --127 --127 --18 -90 -123 -115 -21 --61 --127 --127 --127 --24 -94 -123 -123 -123 -43 --42 --118 --127 --127 --25 -91 -123 -123 -123 -40 --45 --121 --127 --127 --28 -88 -123 -123 -123 -37 --47 --123 --127 --127 --30 -86 -123 -123 -123 -36 --49 --124 --127 --127 --30 -85 -123 -123 -123 -37 --48 --123 --127 --24 -82 -123 -104 -12 --70 --127 --127 --25 -84 -123 -108 -15 --67 --127 --127 --22 -86 -123 -111 -19 --64 --127 --127 --20 -88 -123 -111 -18 --64 --127 --127 --20 -89 -123 -113 -20 --63 --127 --127 --18 -90 -123 -114 -21 --62 --127 --127 --19 -90 -123 -123 -123 -33 --52 --127 --127 --127 --34 -83 -123 -123 -123 -34 --51 --126 --127 --127 --33 -84 -123 -123 -123 -36 --49 --124 --127 --127 --32 -85 -123 -123 -123 -35 --50 --125 --127 --127 --32 -85 -123 -123 -123 -35 --50 --125 --127 --127 --33 -84 -123 -115 -21 --61 --127 --127 --15 -93 -123 -117 -24 --59 --127 --127 --16 -92 -123 -115 -22 --61 --127 --127 --18 -90 -123 -114 -21 --62 --127 --127 --18 -91 -123 -114 -21 --62 --127 --127 --18 -90 -123 -114 -21 --62 --127 --127 --18 -90 -123 -123 -123 -34 --51 --126 --127 --127 --34 -83 -123 -123 -123 -34 --51 --126 --127 --127 --32 -84 -123 -123 -123 -36 --49 --124 --127 --127 --32 -85 -123 -123 -123 -35 --50 --125 --127 --127 --31 -86 -123 -123 -123 -36 --49 --125 --127 --127 --31 -85 -123 -116 -23 --60 --127 --127 --14 -94 -123 -117 -24 --59 --127 --127 --15 -93 -123 -116 -22 --61 --127 --127 --16 -91 -123 -116 -22 --61 --127 --127 --17 -91 -123 -114 -21 --62 --127 --127 --18 -91 -123 -114 -21 --62 --127 --127 --17 -91 -123 -117 -23 --60 --127 --127 --127 --22 -94 -123 -123 -123 -43 --42 --118 --127 --127 --26 -90 -123 -123 -123 -40 --45 --121 --127 --127 --28 -88 -123 -123 -123 -38 --47 --123 --127 --127 --29 -87 -123 -123 -123 -38 --47 --123 --127 --127 --29 -86 -123 -123 -123 -38 --47 --123 --127 --127 --31 -85 -123 -123 -123 -36 --49 --124 --127 --127 --31 -85 -123 -123 -123 -36 --49 --125 --127 --127 --32 -85 -123 -123 -123 -35 --49 --125 --127 --127 --31 -85 -123 -123 -123 -35 --49 --125 --127 --127 --31 -85 -123 -123 -123 -36 --48 --124 --127 --25 -82 -123 -105 -12 --70 --127 --127 --26 -83 -123 -108 -15 --67 --127 --127 --23 -86 -123 -111 -18 --64 --127 --127 --21 -87 -123 -111 -18 --65 --127 --127 --20 -89 -123 -112 -19 --63 --127 --127 --18 -90 -123 -115 -22 --61 --127 --127 --127 --23 -93 -123 -123 -123 -43 --42 --119 --127 --127 --25 -91 -123 -123 -123 -40 --45 --121 --127 --127 --28 -88 -123 -123 -123 -38 --47 --123 --127 --127 --30 -86 -123 -123 -123 -37 --48 --124 --127 --127 --30 -86 -123 -123 -123 -38 --47 --123 --127 --25 -82 -123 -104 -12 --70 --127 --127 --25 -83 -123 -108 -15 --67 --127 --127 --22 -87 -123 -112 -19 --64 --127 --127 --20 -88 -123 -112 -19 --63 --127 --127 --19 -89 -123 -112 -19 --63 --127 --127 --18 -90 -123 -113 -20 --63 --127 --127 --18 -90 -123 -114 -20 --62 --127 --127 --18 -90 -123 -114 -21 --62 --127 --127 --17 -91 -123 -115 -22 --61 --127 --127 --17 -91 -123 -114 -21 --62 --127 --127 --17 -91 -123 -115 -22 --61 --127 --127 --16 -92 -123 -115 -22 --61 --127 --127 --17 -92 -123 -123 -123 -34 --51 --126 --127 --127 --33 -83 -123 -123 -123 -34 --51 --126 --127 --127 --32 -85 -123 -123 -123 -36 --49 --124 --127 --127 --32 -85 -123 -123 -123 -35 --50 --125 --127 --127 --31 -85 -123 -123 -123 -35 --50 --125 --127 --127 --31 -85 -123 -123 -123 -35 --50 --125 --127 --127 --32 -84 -123 -123 -123 -35 --50 --125 --127 --127 --32 -85 -123 -123 -123 -37 --48 --124 --127 --127 --33 -85 -123 -123 -123 -35 --50 --125 --127 --127 --32 -85 -123 -123 -123 -35 --50 --125 --127 --127 --32 -85 -123 -117 -23 --60 --127 --127 --14 -94 -123 -117 -23 --60 --127 --127 --15 -93 -123 -116 -22 --61 --127 --127 --16 -92 -123 -116 -23 --60 --127 --127 --17 -91 -123 -115 -22 --61 --127 --127 --17 -91 -123 -114 -21 --62 --127 --127 --17 -91 -123 -116 -23 --60 --127 --127 --127 --23 -94 -123 -123 -123 -43 --42 --119 --127 --127 --26 -90 -123 -123 -123 -39 --45 --121 --127 --127 --29 -88 -123 -123 -123 -37 --47 --123 --127 --127 --30 -86 -123 -123 -123 -37 --48 --124 --127 --127 --30 -85 -123 -123 -123 -37 --48 --124 --127 --24 -83 -123 -104 -12 --70 --127 --127 --24 -84 -123 -109 -16 --66 --127 --127 --22 -87 -123 -112 -19 --63 --127 --127 --20 -88 -123 -112 -19 --63 --127 --127 --18 -90 -123 -113 -20 --63 --127 --127 --18 -90 -123 -115 -22 --61 --127 --127 --127 --24 -93 -123 -123 -123 -42 --43 --119 --127 --127 --26 -90 -123 -123 -123 -40 --45 --121 --127 --127 --28 -88 -123 -123 -123 -37 --47 --123 --127 --127 --30 -86 -123 -123 -123 -35 --49 --125 --127 --127 --30 -86 -123 -123 -123 -37 --47 --123 --127 --24 -82 -123 -105 -13 --69 --127 --127 --25 -84 -123 -109 -16 --67 --127 --127 --21 -87 -123 -112 -19 --64 --127 --127 --20 -89 -123 -112 -19 --63 --127 --127 --19 -89 -123 -113 -20 --63 --127 --127 --18 -90 -123 -114 -21 --62 --127 --127 --18 -90 -123 -113 -20 --62 --127 --127 --17 -91 -123 -115 -22 --61 --127 --127 --17 -91 -123 -115 -22 --61 --127 --127 --17 -91 -123 -114 -21 --62 --127 --127 --17 -91 -123 -115 -21 --61 --127 --127 --17 -91 -123 -115 -22 --61 --127 --127 --18 -91 -123 -123 -123 -34 --51 --126 --127 --127 --34 -83 -123 -123 -123 -33 --52 --127 --127 --127 --33 -83 -123 -123 -123 -35 --50 --125 --127 --127 --33 -83 -123 -123 -123 -34 --51 --126 --127 --127 --32 -84 -123 -123 -123 -34 --51 --126 --127 --127 --33 -85 -123 -123 -123 -36 --49 --125 --127 --127 --32 -86 -123 -123 -123 -35 --50 --125 --127 --127 --31 -86 -123 -123 -123 -37 --48 --123 --127 --127 --31 -85 -123 -123 -123 -36 --49 --125 --127 --127 --32 -84 -123 -123 -123 -35 --50 --125 --127 --127 --31 -84 -123 -116 -23 --60 --127 --127 --15 -93 -123 -117 -24 --60 --127 --127 --16 -92 -123 -115 -22 --61 --127 --127 --17 -91 -123 -115 -22 --61 --127 --127 --17 -92 -123 -114 -21 --62 --127 --127 --17 -90 -123 -114 -21 --62 --127 --127 --18 -91 -123 -116 -22 --61 --127 --127 --127 --23 -94 -123 -123 -123 -43 --42 --118 --127 --127 --24 -91 -123 -123 -123 -39 --45 --121 --127 --127 --29 -88 -123 -123 -123 -37 --47 --123 --127 --127 --30 -87 -123 -123 -123 -37 --48 --124 --127 --127 --30 -86 -123 -123 -123 -37 --48 --123 --127 --23 -83 -123 -105 -12 --70 --127 --127 --24 -84 -123 -109 -16 --66 --127 --127 --21 -87 -123 -112 -19 --63 --127 --127 --21 -88 -123 -112 -19 --64 --127 --127 --20 -89 -123 -113 -20 --63 --127 --127 --19 -89 -123 -116 -23 --60 --127 --127 --18 -90 -123 -113 -20 --63 --127 --127 --18 -90 -123 -114 -21 --62 --127 --127 --17 -90 -123 -115 -21 --62 --127 --127 --18 -90 -123 -113 -20 --63 --127 --127 --18 -90 -123 -114 -21 --62 --127 --127 --18 -91 -123 -114 -21 --62 --127 --127 --18 -90 -123 -123 -123 -32 --53 --127 --127 --127 --36 -82 -123 -123 -123 -33 --52 --127 --127 --127 --34 -83 -123 -123 -123 -35 --50 --125 --127 --127 --33 -84 -123 -123 -123 -34 --51 --126 --127 --127 --32 -84 -123 -123 -123 -35 --50 --125 --127 --127 --32 -85 -123 -116 -23 --60 --127 --127 --13 -94 -123 -118 -24 --59 --127 --127 --16 -93 -123 -116 -22 --61 --127 --127 --16 -91 -123 -116 -22 --61 --127 --127 --17 -91 -123 -115 -22 --61 --127 --127 --17 -91 -123 -115 -21 --61 --127 --127 --17 -91 -123 -123 -123 -33 --52 --127 --127 --127 --34 -82 -123 -123 -123 -33 --52 --127 --127 --127 --33 -83 -123 -123 -123 -36 --49 --125 --127 --127 --32 -84 -123 -123 -123 -34 --51 --126 --127 --127 --32 -85 -123 -123 -123 -35 --50 --125 --127 --127 --32 -85 -123 -115 -22 --61 --127 --127 --15 -93 -123 -117 -23 --60 --127 --127 --15 -92 -123 -116 -23 --60 --127 --127 --17 -92 -123 -116 -23 --60 --127 --127 --16 -91 -123 -116 -23 --60 --127 --127 --17 -92 -123 -115 -22 --61 --127 --127 --17 -92 -123 -117 -24 --59 --127 --127 --127 --22 -95 -123 -123 -123 -44 --41 --118 --127 --127 --24 -91 -123 -123 -123 -40 --45 --121 --127 --127 --27 -89 -123 -123 -123 -38 --47 --123 --127 --127 --29 -87 -123 -123 -123 -37 --48 --123 --127 --127 --30 -86 -123 -123 -123 -37 --48 --124 --127 --24 -82 -123 -104 -12 --70 --127 --127 --24 -84 -123 -108 -16 --67 --127 --127 --22 -87 -123 -112 -19 --64 --127 --127 --21 -87 -123 -111 -18 --64 --127 --127 --19 -89 -123 -113 -20 --63 --127 --127 --18 -90 -123 -116 -22 --61 --127 --127 --127 --23 -94 -123 -123 -123 -44 --42 --118 --127 --127 --25 -91 -123 -123 -123 -40 --45 --121 --127 --127 --27 -88 -123 -123 -123 -38 --47 --123 --127 --127 --29 -87 -123 -123 -123 -37 --48 --124 --127 --127 --30 -86 -123 -123 -123 -38 --47 --123 --127 --23 -83 -123 -105 -13 --69 --127 --127 --25 -84 -123 -108 -16 --67 --127 --127 --21 -87 -123 -112 -19 --64 --127 --127 --20 -88 -123 -112 -19 --63 --127 --127 --19 -90 -123 -113 -20 --63 --127 --127 --18 -90 -123 -114 -21 --62 --127 --127 --19 -90 -123 -123 -123 -32 --52 --127 --127 --127 --35 -81 -123 -123 -123 -32 --52 --127 --127 --127 --33 -84 -123 -123 -123 -35 --50 --125 --127 --127 --33 -84 -123 -123 -123 -35 --50 --125 --127 --127 --32 -85 -123 -123 -123 -35 --50 --125 --127 --127 --32 -84 -123 -115 -22 --61 --127 --127 --15 -93 -123 -117 -23 --60 --127 --127 --16 -92 -123 -116 -22 --61 --127 --127 --16 -92 -123 -116 -23 --60 --127 --127 --17 -92 -123 -115 -22 --61 --127 --127 --17 -91 -123 -115 -22 --61 --127 --127 --18 -92 -123 -123 -123 -33 --52 --127 --127 --127 --34 -82 -123 -123 -123 -33 --52 --127 --127 --127 --33 -83 -123 -123 -123 -36 --49 --125 --127 --127 --33 -83 -123 -123 -123 -34 --51 --126 --127 --127 --33 -83 -123 -123 -123 -35 --50 --125 --127 --127 --32 -85 -123 -123 -123 -35 --50 --125 --127 --127 --32 -85 -123 -123 -123 -36 --49 --124 --127 --127 --31 -86 -123 -123 -123 -38 --47 --123 --127 --127 --31 -86 -123 -123 -123 -36 --49 --124 --127 --127 --31 -85 -123 -123 -123 -36 --49 --125 --127 --127 --31 -85 -123 -116 -23 --60 --127 --127 --15 -94 -123 -117 -23 --60 --127 --127 --16 -92 -123 -116 -23 --60 --127 --127 --17 -91 -123 -115 -22 --61 --127 --127 --18 -91 -123 -114 -21 --62 --127 --127 --17 -92 -123 -115 -21 --61 --127 --127 --18 -91 -123 -116 -22 --61 --127 --127 --127 --23 -95 -123 -123 -123 -44 --41 --118 --127 --127 --24 -92 -123 -123 -123 -40 --45 --121 --127 --127 --27 -89 -123 -123 -123 -38 --47 --123 --127 --127 --28 -88 -123 -123 -123 -37 --48 --123 --127 --127 --30 -86 -123 -123 -123 -38 --47 --123 --127 --24 -82 -123 -105 -13 --69 --127 --127 --25 -83 -123 -108 -15 --67 --127 --127 --22 -86 -123 -112 -19 --63 --127 --127 --21 -88 -123 -111 -18 --64 --127 --127 --20 -88 -123 -113 -20 --63 --127 --127 --19 -90 -123 -115 -21 --62 --127 --127 --18 -90 -123 -113 -20 --63 --127 --127 --18 -90 -123 -114 -21 --62 --127 --127 --17 -91 -123 -115 -22 --61 --127 --127 --17 -91 -123 -114 -21 --62 --127 --127 --18 -90 -123 -115 -22 --61 --127 --127 --17 -91 -123 -115 -21 --62 --127 --127 --18 -91 -123 -123 -123 -33 --52 --127 --127 --127 --34 -83 -123 -123 -123 -34 --51 --126 --127 --127 --33 -84 -123 -123 -123 -35 --50 --125 --127 --127 --33 -84 -123 -123 -123 -35 --50 --125 --127 --127 --32 -85 -123 -123 -123 -35 --50 --126 --127 --127 --32 -85 -123 -115 -22 --61 --127 --127 --15 -93 -123 -118 -24 --59 --127 --127 --15 -93 -123 -116 -22 --61 --127 --127 --17 -91 -123 -115 -22 --61 --127 --127 --17 -91 -123 -115 -22 --61 --127 --127 --18 -91 -123 -114 -21 --62 --127 --127 --17 -91 -123 -123 -123 -33 --52 --127 --127 --127 --34 -82 -123 -123 -123 -33 --52 --127 --127 --127 --32 -84 -123 -123 -123 -37 --48 --124 --127 --127 --32 -85 -123 -123 -123 -35 --50 --125 --127 --127 --31 -85 -123 -123 -123 -35 --50 --125 --127 --127 --31 -85 -123 -123 -123 -36 --49 --125 --127 --127 --31 -85 -123 -123 -123 -35 --50 --125 --127 --127 --32 -85 -123 -123 -123 -37 --49 --124 --127 --127 --32 -85 -123 -123 -123 -35 --50 --126 --127 --127 --32 -85 -123 -123 -123 -35 --50 --125 --127 --127 --32 -85 -123 -116 -22 --61 --127 --127 --14 -93 -123 -117 -23 --60 --127 --127 --16 -92 -123 -116 -22 --61 --127 --127 --17 -92 -123 -115 -22 --61 --127 --127 --17 -91 -123 -115 -22 --61 --127 --127 --18 -91 -123 -114 -21 --62 --127 --127 --17 -91 -123 -116 -22 --61 --127 --127 --18 -90 -123 -114 -21 --62 --127 --127 --18 -90 -123 -114 -21 --62 --127 --127 --18 -90 -123 -116 -23 --60 --127 --127 --18 -91 -123 -114 -21 --62 --127 --127 --18 -90 -123 -114 -21 --62 --127 --127 --17 -91 -123 -117 -23 --60 --127 --127 --127 --23 -94 -123 -123 -123 -43 --42 --119 --127 --127 --25 -91 -123 -123 -123 -40 --45 --121 --127 --127 --28 -88 -123 -123 -123 -38 --47 --123 --127 --127 --29 -87 -123 -123 -123 -37 --48 --124 --127 --127 --30 -86 -123 -123 -123 -37 --47 --123 --127 --24 -83 -123 -104 -12 --70 --127 --127 --25 -84 -123 -109 -16 --66 --127 --127 --22 -87 -123 -112 -19 --64 --127 --127 --20 -88 -123 -112 -19 --64 --127 --127 --19 -89 -123 -113 -20 --62 --127 --127 --18 -90 -123 -114 -21 --62 --127 --127 --17 -91 -123 -123 -123 -33 --52 --127 --127 --127 --34 -83 -123 -123 -123 -34 --51 --126 --127 --127 --33 -84 -123 -123 -123 -36 --49 --124 --127 --127 --32 -84 -123 -123 -123 -35 --50 --125 --127 --127 --32 -85 -123 -123 -123 -35 --50 --125 --127 --127 --32 -85 -123 -115 -21 --62 --127 --127 --14 -93 -123 -117 -24 --59 --127 --127 --15 -93 -123 -116 -23 --60 --127 --127 --16 -92 -123 -115 -21 --61 --127 --127 --16 -91 -123 -115 -22 --61 --127 --127 --17 -91 -123 -114 -21 --62 --127 --127 --18 -91 -123 -123 -123 -33 --52 --127 --127 --127 --34 -82 -123 -123 -123 -34 --51 --126 --127 --127 --33 -84 -123 -123 -123 -36 --49 --125 --127 --127 --33 -84 -123 -123 -123 -35 --50 --125 --127 --127 --32 -85 -123 -123 -123 -35 --50 --125 --127 --127 --31 -85 -123 -116 -23 --60 --127 --127 --14 -95 -123 -117 -24 --59 --127 --127 --15 -93 -123 -117 -23 --60 --127 --127 --16 -93 -123 -116 -23 --60 --127 --127 --16 -91 -123 -115 -22 --61 --127 --127 --16 -91 -123 -115 -21 --62 --127 --127 --17 -92 -123 -117 -23 --60 --127 --127 --127 --23 -94 -123 -123 -123 -44 --42 --118 --127 --127 --25 -91 -123 -123 -123 -40 --45 --121 --127 --127 --28 -89 -123 -123 -123 -37 --47 --123 --127 --127 --29 -87 -123 -123 -123 -36 --48 --124 --127 --127 --30 -85 -123 -123 -123 -37 --48 --124 --127 --127 --31 -84 -123 -123 -123 -34 --50 --126 --127 --127 --32 -84 -123 -123 -123 -34 --50 --125 --127 --127 --32 -84 -123 -123 -123 -35 --50 --125 --127 --127 --32 -84 -123 -123 -123 -35 --50 --125 --127 --127 --31 -85 -123 -123 -123 -36 --48 --124 --127 --25 -82 -123 -105 -12 --70 --127 --127 --26 -83 -123 -108 -15 --67 --127 --127 --22 -86 -123 -112 -19 --64 --127 --127 --20 -88 -123 -112 -19 --64 --127 --127 --19 -90 -123 -113 -20 --63 --127 --127 --19 -90 -123 -115 -22 --61 --127 --127 --127 --23 -94 -123 -123 -123 -43 --42 --119 --127 --127 --25 -91 -123 -123 -123 -40 --45 --121 --127 --127 --28 -89 -123 -123 -123 -38 --47 --123 --127 --127 --30 -87 -123 -123 -123 -37 --48 --124 --127 --127 --30 -86 -123 -123 -123 -38 --47 --123 --127 --24 -82 -123 -105 -13 --69 --127 --127 --24 -84 -123 -108 -16 --67 --127 --127 --22 -87 -123 -111 -18 --65 --127 --127 --20 -87 -123 -112 -19 --64 --127 --127 --19 -90 -123 -113 -20 --63 --127 --127 --18 -90 -123 -114 -20 --62 --127 --127 --18 -90 -123 -113 -20 --63 --127 --127 --18 -90 -123 -114 -21 --62 --127 --127 --18 -90 -123 -114 -20 --62 --127 --127 --18 -90 -123 -114 -21 --62 --127 --127 --18 -91 -123 -114 -21 --62 --127 --127 --18 -90 -123 -114 -21 --62 --127 --127 --17 -90 -123 -123 -123 -33 --52 --127 --127 --127 --34 -83 -123 -123 -123 -34 --51 --126 --127 --127 --32 -84 -123 -123 -123 -37 --49 --124 --127 --127 --32 -84 -123 -123 -123 -35 --50 --125 --127 --127 --32 -85 -123 -123 -123 -35 --50 --125 --127 --127 --32 -86 -123 -117 -23 --60 --127 --127 --14 -94 -123 -118 -24 --59 --127 --127 --16 -92 -123 -116 -22 --61 --127 --127 --16 -92 -123 -116 -22 --61 --127 --127 --17 -91 -123 -114 -21 --62 --127 --127 --17 -90 -123 -114 -21 --62 --127 --127 --18 -90 -123 -115 -22 --61 --127 --127 --19 -90 -123 -114 -21 --62 --127 --127 --19 -89 -123 -114 -21 --62 --127 --127 --18 -90 -123 -114 -21 --62 --127 --127 --19 -90 -123 -113 -20 --63 --127 --127 --18 -90 -123 -114 -21 --62 --127 --127 --18 -91 -123 -116 -22 --61 --127 --127 --17 -90 -123 -114 -21 --62 --127 --127 --17 -91 -123 -115 -22 --61 --127 --127 --17 -91 -123 -115 -22 --61 --127 --127 --17 -91 -123 -114 -21 --62 --127 --127 --17 -92 -123 -115 -21 --61 --127 --127 --17 -91 -123 -115 -22 --61 --127 --127 --16 -92 -123 -123 -123 -33 --52 --127 --127 --127 --34 -83 -123 -123 -123 -34 --51 --126 --127 --127 --32 -84 -123 -123 -123 -35 --50 --125 --127 --127 --32 -84 -123 -123 -123 -35 --50 --125 --127 --127 --32 -85 -123 -123 -123 -36 --49 --125 --127 --127 --32 -85 -123 -123 -123 -36 --49 --125 --127 --127 --31 -85 -123 -123 -123 -36 --49 --125 --127 --127 --31 -85 -123 -123 -123 -36 --49 --124 --127 --127 --32 -85 -123 -123 -123 -35 --50 --125 --127 --127 --32 -85 -123 -123 -123 -35 --50 --125 --127 --127 --32 -85 -123 -123 -123 -35 --50 --125 --127 --127 --32 -85 -123 -123 -123 -36 --49 --124 --127 --127 --31 -85 -123 -123 -123 -36 --49 --124 --127 --127 --32 -85 -123 -123 -123 -35 --50 --125 --127 --127 --31 -86 -123 -123 -123 -35 --50 --125 --127 --127 --32 -85 -123 -115 -22 --61 --127 --127 --15 -94 -123 -117 -24 --59 --127 --127 --16 -92 -123 -116 -23 --60 --127 --127 --17 -91 -123 -115 -22 --61 --127 --127 --17 -91 -123 -115 -21 --62 --127 --127 --17 -91 -123 -114 -21 --62 --127 --127 --18 -91 -123 -123 -123 -34 --51 --126 --127 --127 --34 -82 -123 -123 -123 -33 --52 --127 --127 --127 --33 -84 -123 -123 -123 -36 --49 --124 --127 --127 --32 -84 -123 -123 -123 -35 --50 --125 --127 --127 --31 -85 -123 -123 -123 -35 --50 --125 --127 --127 --31 -85 -123 -123 -123 -36 --49 --124 --127 --127 --31 -85 -123 -123 -123 -36 --49 --125 --127 --127 --31 -86 -123 -123 -123 -38 --48 --123 --127 --127 --32 -86 -123 -123 -123 -36 --49 --125 --127 --127 --32 -86 -123 -123 -123 -35 --50 --125 --127 --127 --31 -86 -123 -116 -23 --60 --127 --127 --14 -94 -123 -118 -24 --59 --127 --127 --15 -93 -123 -116 -23 --60 --127 --127 --16 -92 -123 -115 -22 --61 --127 --127 --17 -90 -123 -115 -21 --62 --127 --127 --18 -90 -123 -114 -20 --62 --127 --127 --18 -90 -123 -115 -22 --61 --127 --127 --18 -90 -123 -113 -20 --63 --127 --127 --19 -90 -123 -113 -20 --63 --127 --127 --18 -89 -123 -116 -22 --61 --127 --127 --18 -90 -123 -113 -20 --63 --127 --127 --17 -91 -123 -114 -21 --62 --127 --127 --17 -91 -123 -116 -23 --60 --127 --127 --127 --24 -94 -123 -123 -123 -43 --42 --118 --127 --127 --25 -91 -123 -123 -123 -40 --45 --121 --127 --127 --28 -88 -123 -123 -123 -38 --47 --123 --127 --127 --29 -87 -123 -123 -123 -37 --48 --124 --127 --127 --30 -86 -123 -123 -123 -38 --47 --123 --127 --24 -82 -123 -105 -12 --70 --127 --127 --25 -84 -123 -108 -15 --67 --127 --127 --22 -86 -123 -112 -19 --64 --127 --127 --20 -88 -123 -112 -19 --64 --127 --127 --19 -89 -123 -113 -20 --63 --127 --127 --18 -90 -123 -114 -21 --62 --127 --127 --18 -90 -123 -123 -123 -33 --52 --127 --127 --127 --34 -83 -123 -123 -123 -34 --51 --126 --127 --127 --33 -83 -123 -123 -123 -35 --50 --125 --127 --127 --32 -84 -123 -123 -123 -35 --50 --125 --127 --127 --32 -84 -123 -123 -123 -35 --50 --125 --127 --127 --32 -84 -123 -123 -123 -35 --50 --125 --127 --127 --32 -85 -123 -123 -123 -35 --50 --125 --127 --127 --32 -85 -123 -123 -123 -36 --49 --124 --127 --127 --32 -84 -123 -123 -123 -34 --50 --126 --127 --127 --32 -84 -123 -123 -123 -35 --50 --125 --127 --127 --32 -84 -123 -115 -22 --61 --127 --127 --15 -94 -123 -117 -24 --59 --127 --127 --15 -93 -123 -116 -23 --60 --127 --127 --17 -92 -123 -115 -22 --61 --127 --127 --17 -91 -123 -115 -21 --61 --127 --127 --17 -91 -123 -115 -22 --61 --127 --127 --17 -91 -123 -123 -123 -34 --51 --126 --127 --127 --34 -82 -123 -123 -123 -33 --51 --126 --127 --127 --33 -83 -123 -123 -123 -36 --49 --124 --127 --127 --33 -84 -123 -123 -123 -34 --51 --126 --127 --127 --32 -85 -123 -123 -123 -35 --50 --125 --127 --127 --31 -86 -123 -117 -23 --60 --127 --127 --14 -94 -123 -118 -24 --59 --127 --127 --15 -93 -123 -117 -23 --60 --127 --127 --16 -92 -123 -116 -23 --60 --127 --127 --17 -91 -123 -115 -22 --61 --127 --127 --17 -91 -123 -115 -22 --61 --127 --127 --17 -91 -123 -116 -23 --60 --127 --127 --127 --23 -93 -123 -123 -123 -43 --42 --118 --127 --127 --25 -91 -123 -123 -123 -40 --45 --121 --127 --127 --28 -88 -123 -123 -123 -37 --47 --123 --127 --127 --29 -86 -123 -123 -123 -36 --48 --124 --127 --127 --31 -86 -123 -123 -123 -37 --48 --123 --127 --24 -83 -123 -105 -12 --70 --127 --127 --25 -84 -123 -108 -16 --67 --127 --127 --22 -86 -123 -112 -19 --64 --127 --127 --20 -88 -123 -112 -19 --64 --127 --127 --20 -89 -123 -113 -19 --63 --127 --127 --19 -89 -123 -115 -21 --62 --127 --127 --127 --24 -93 -123 -123 -123 -43 --43 --119 --127 --127 --25 -91 -123 -123 -123 -39 --45 --121 --127 --127 --28 -88 -123 -123 -123 -39 --46 --122 --127 --127 --30 -87 -123 -123 -123 -37 --48 --123 --127 --127 --30 -86 -123 -123 -123 -38 --46 --122 --127 --24 -83 -123 -105 -13 --69 --127 --127 --25 -83 -123 -108 -16 --67 --127 --127 --22 -86 -123 -111 -18 --65 --127 --127 --20 -88 -123 -112 -19 --64 --127 --127 --20 -89 -123 -113 -19 --63 --127 --127 --19 -89 -123 -113 -20 --63 --127 --127 --19 -89 -123 -113 -20 --63 --127 --127 --18 -90 -123 -114 -21 --62 --127 --127 --17 -90 -123 -115 -21 --62 --127 --127 --17 -91 -123 -115 -21 --62 --127 --127 --18 -91 -123 -114 -21 --62 --127 --127 --17 -91 -123 -115 -22 --61 --127 --127 --17 -91 -123 -123 -123 -33 --52 --126 --127 --127 --34 -83 -123 -123 -123 -33 --51 --126 --127 --127 --33 -84 -123 -123 -123 -36 --49 --125 --127 --127 --33 -84 -123 -123 -123 -35 --50 --125 --127 --127 --32 -85 -123 -123 -123 -35 --50 --125 --127 --127 --31 -86 -123 -117 -23 --60 --127 --127 --14 -94 -123 -118 -24 --59 --127 --127 --15 -93 -123 -117 -24 --60 --127 --127 --16 -92 -123 -116 -23 --60 --127 --127 --16 -91 -123 -115 -22 --61 --127 --127 --17 -91 -123 -115 -22 --61 --127 --127 --17 -91 -123 -115 -22 --61 --127 --127 --127 --23 -94 -123 -123 -123 -43 --42 --118 --127 --127 --25 -90 -123 -123 -123 -40 --45 --121 --127 --127 --28 -88 -123 -123 -123 -37 --48 --123 --127 --127 --29 -87 -123 -123 -123 -36 --48 --124 --127 --127 --30 -86 -123 -123 -123 -37 --48 --123 --127 --24 -82 -123 -105 -12 --70 --127 --127 --24 -84 -123 -108 -15 --67 --127 --127 --22 -87 -123 -112 -19 --64 --127 --127 --20 -88 -123 -111 -19 --64 --127 --127 --19 -89 -123 -113 -20 --63 --127 --127 --18 -91 -123 -116 -23 --60 --127 --127 --127 --24 -94 -123 -123 -123 -44 --42 --118 --127 --127 --24 -91 -123 -123 -123 -40 --45 --121 --127 --127 --28 -87 -123 -123 -123 -38 --47 --123 --127 --127 --29 -86 -123 -123 -123 -36 --49 --124 --127 --127 --31 -85 -123 -123 -123 -37 --48 --123 --127 --24 -82 -123 -105 -12 --70 --127 --127 --25 -84 -123 -108 -15 --67 --127 --127 --21 -87 -123 -112 -19 --64 --127 --127 --20 -89 -123 -112 -19 --64 --127 --127 --18 -90 -123 -114 -21 --62 --127 --127 --17 -90 -123 -115 -21 --61 --127 --127 --18 -91 -123 -123 -123 -32 --52 --127 --127 --127 --34 -83 -123 -123 -123 -33 --52 --127 --127 --127 --33 -83 -123 -123 -123 -35 --50 --125 --127 --127 --32 -84 -123 -123 -123 -34 --51 --126 --127 --127 --33 -84 -123 -123 -123 -34 --51 --126 --127 --127 --33 -84 -123 -115 -22 --61 --127 --127 --14 -94 -123 -117 -24 --59 --127 --127 --16 -92 -123 -116 -22 --61 --127 --127 --16 -91 -123 -115 -21 --61 --127 --127 --17 -92 -123 -115 -22 --61 --127 --127 --17 -91 -123 -115 -21 --62 --127 --127 --17 -91 -123 -123 -123 -33 --52 --127 --127 --127 --34 -82 -123 -123 -123 -33 --52 --127 --127 --127 --33 -84 -123 -123 -123 -36 --49 --124 --127 --127 --33 -84 -123 -123 -123 -35 --50 --125 --127 --127 --32 -85 -123 -123 -123 -35 --50 --125 --127 --127 --32 -85 -123 -116 -22 --60 --127 --127 --14 -94 -123 -118 -24 --59 --127 --127 --15 -92 -123 -116 -22 --61 --127 --127 --17 -92 -123 -116 -22 --61 --127 --127 --17 -91 -123 -115 -21 --62 --127 --127 --18 -90 -123 -114 -21 --62 --127 --127 --17 -91 -123 -117 -24 --60 --127 --127 --127 --23 -94 -123 -123 -123 -43 --42 --119 --127 --127 --24 -91 -123 -123 -123 -39 --46 --122 --127 --127 --28 -88 -123 -123 -123 -37 --47 --123 --127 --127 --29 -87 -123 -123 -123 -37 --48 --124 --127 --127 --30 -86 -123 -123 -123 -37 --47 --123 --127 --24 -83 -123 -105 -12 --70 --127 --127 --25 -83 -123 -109 -16 --66 --127 --127 --22 -87 -123 -113 -20 --63 --127 --127 --20 -88 -123 -112 -19 --63 --127 --127 --19 -89 -123 -113 -20 --63 --127 --127 --19 -90 -123 -114 -21 --62 --127 --127 --127 --24 -93 -123 -123 -123 -43 --42 --118 --127 --127 --25 -91 -123 -123 -123 -39 --45 --121 --127 --127 --28 -88 -123 -123 -123 -37 --48 --124 --127 --127 --30 -86 -123 -123 -123 -36 --48 --124 --127 --127 --31 -85 -123 -123 -123 -36 --48 --124 --127 --25 -81 -123 -104 -12 --70 --127 --127 --25 -83 -123 -108 -15 --67 --127 --127 --23 -86 -123 -111 -18 --65 --127 --127 --21 -87 -123 -110 -17 --65 --127 --127 --20 -88 -123 -112 -19 --63 --127 --127 --19 -89 -123 -114 -21 --62 --127 --127 --18 -90 -123 -123 -123 -32 --53 --127 --127 --127 --35 -83 -123 -123 -123 -34 --51 --126 --127 --127 --33 -85 -123 -123 -123 -36 --49 --124 --127 --127 --32 -84 -123 -123 -123 -35 --50 --125 --127 --127 --31 -85 -123 -123 -123 -35 --50 --125 --127 --127 --31 -85 -123 -116 -23 --60 --127 --127 --14 -94 -123 -118 -24 --59 --127 --127 --15 -93 -123 -117 -23 --60 --127 --127 --15 -92 -123 -116 -23 --60 --127 --127 --16 -92 -123 -115 -22 --61 --127 --127 --16 -92 -123 -115 -22 --61 --127 --127 --17 -91 -123 -123 -123 -34 --51 --126 --127 --127 --34 -82 -123 -123 -123 -33 --52 --127 --127 --127 --34 -83 -123 -123 -123 -36 --49 --125 --127 --127 --33 -84 -123 -123 -123 -34 --51 --126 --127 --127 --32 -85 -123 -123 -123 -35 --50 --125 --127 --127 --32 -86 -123 -116 -22 --61 --127 --127 --14 -93 -123 -117 -24 --60 --127 --127 --16 -92 -123 -116 -23 --60 --127 --127 --17 -91 -123 -116 -23 --60 --127 --127 --17 -91 -123 -115 -22 --61 --127 --127 --18 -91 -123 -115 -21 --61 --127 --127 --18 -91 -123 -116 -23 --60 --127 --127 --127 --22 -94 -123 -123 -123 -44 --41 --118 --127 --127 --24 -91 -123 -123 -123 -40 --45 --121 --127 --127 --28 -89 -123 -123 -123 -37 --48 --123 --127 --127 --30 -87 -123 -123 -123 -36 --48 --124 --127 --127 --30 -86 -123 -123 -123 -36 --48 --124 --127 --25 -82 -123 -104 -12 --70 --127 --127 --25 -84 -123 -109 -16 --66 --127 --127 --22 -87 -123 -113 -20 --63 --127 --127 --20 -89 -123 -112 -19 --64 --127 --127 --18 -90 -123 -114 -21 --62 --127 --127 --18 -90 -123 -116 -23 --61 --127 --127 --127 --23 -94 -123 -123 -123 -43 --42 --118 --127 --127 --25 -91 -123 -123 -123 -40 --45 --121 --127 --127 --27 -89 -123 -123 -123 -38 --47 --123 --127 --127 --29 -87 -123 -123 -123 -37 --48 --124 --127 --127 --30 -85 -123 -123 -123 -38 --47 --123 --127 --24 -82 -123 -104 -12 --70 --127 --127 --25 -83 -123 -108 -16 --67 --127 --127 --22 -86 -123 -111 -19 --64 --127 --127 --20 -88 -123 -112 -19 --64 --127 --127 --19 -90 -123 -113 -20 --63 --127 --127 --19 -90 -123 -113 -20 --62 --127 --127 --18 -89 -123 -123 -123 -32 --52 --127 --127 --127 --35 -82 -123 -123 -123 -33 --52 --127 --127 --127 --34 -83 -123 -123 -123 -35 --50 --125 --127 --127 --33 -84 -123 -123 -123 -34 --51 --126 --127 --127 --32 -84 -123 -123 -123 -35 --50 --125 --127 --127 --32 -85 -123 -115 -22 --61 --127 --127 --14 -93 -123 -118 -24 --59 --127 --127 --15 -93 -123 -116 -23 --60 --127 --127 --15 -92 -123 -115 -22 --61 --127 --127 --17 -92 -123 -116 -22 --61 --127 --127 --17 -91 -123 -115 -21 --61 --127 --127 --17 -91 -123 -123 -123 -33 --51 --126 --127 --127 --34 -82 -123 -123 -123 -33 --52 --127 --127 --127 --33 -84 -123 -123 -123 -36 --49 --124 --127 --127 --32 -84 -123 -123 -123 -34 --51 --126 --127 --127 --32 -85 -123 -123 -123 -35 --50 --125 --127 --127 --31 -85 -123 -116 -22 --61 --127 --127 --14 -94 -123 -117 -24 --59 --127 --127 --15 -93 -123 -117 -23 --60 --127 --127 --15 -92 -123 -117 -24 --59 --127 --127 --17 -92 -123 -115 -22 --61 --127 --127 --17 -91 -123 -115 -22 --61 --127 --127 --16 -91 -123 -116 -23 --60 --127 --127 --127 --23 -94 -123 -123 -123 -43 --42 --118 --127 --127 --24 -91 -123 -123 -123 -39 --46 --122 --127 --127 --28 -88 -123 -123 -123 -38 --47 --123 --127 --127 --30 -86 -123 -123 -123 -37 --48 --124 --127 --127 --30 -86 -123 -123 -123 -37 --48 --124 --127 --24 -82 -123 -104 -12 --70 --127 --127 --25 -83 -123 -108 -16 --67 --127 --127 --22 -86 -123 -113 -19 --63 --127 --127 --21 -88 -123 -112 -19 --64 --127 --127 --19 -90 -123 -114 -20 --62 --127 --127 --18 -90 -123 -115 -22 --61 --127 --127 --127 --23 -93 -123 -123 -123 -43 --43 --119 --127 --127 --25 -91 -123 -123 -123 -39 --46 --121 --127 --127 --28 -88 -123 -123 -123 -38 --47 --123 --127 --127 --29 -87 -123 -123 -123 -37 --48 --124 --127 --127 --29 -87 -123 -123 -123 -37 --48 --123 --127 --24 -83 -123 -105 -13 --69 --127 --127 --24 -84 -123 -109 -16 --66 --127 --127 --21 -87 -123 -112 -19 --64 --127 --127 --20 -88 -123 -113 -19 --63 --127 --127 --19 -89 -123 -113 -20 --63 --127 --127 --18 -90 -123 -114 -20 --62 --127 --127 --18 -89 -123 -123 -123 -32 --52 --127 --127 --127 --35 -82 -123 -123 -123 -33 --52 --127 --127 --127 --33 -84 -123 -123 -123 -35 --50 --125 --127 --127 --32 -84 -123 -123 -123 -35 --50 --125 --127 --127 --31 -85 -123 -123 -123 -36 --49 --124 --127 --127 --31 -86 -123 -116 -23 --60 --127 --127 --14 -94 -123 -118 -24 --59 --127 --127 --14 -93 -123 -116 -23 --60 --127 --127 --16 -92 -123 -115 -22 --61 --127 --127 --16 -92 -123 -115 -22 --61 --127 --127 --18 -91 -123 -115 -22 --61 --127 --127 --18 -90 -123 -123 -123 -33 --52 --127 --127 --127 --35 -82 -123 -123 -123 -33 --52 --127 --127 --127 --33 -83 -123 -123 -123 -35 --50 --125 --127 --127 --34 -83 -123 -123 -123 -34 --51 --126 --127 --127 --33 -84 -123 -123 -123 -34 --50 --125 --127 --127 --32 -84 -123 -116 -22 --61 --127 --127 --15 -94 -123 -118 -24 --59 --127 --127 --14 -94 -123 -117 -24 --60 --127 --127 --15 -93 -123 -117 -24 --60 --127 --127 --16 -92 -123 -115 -22 --61 --127 --127 --16 -92 -123 -116 -22 --61 --127 --127 --17 -91 -123 -116 -23 --60 --127 --127 --127 --23 -94 -123 -123 -123 -44 --41 --118 --127 --127 --24 -92 -123 -123 -123 -40 --45 --121 --127 --127 --27 -88 -123 -123 -123 -38 --47 --123 --127 --127 --29 -86 -123 -123 -123 -37 --48 --124 --127 --127 --30 -86 -123 -123 -123 -37 --47 --123 --127 --24 -82 -123 -105 -12 --70 --127 --127 --25 -84 -123 -108 -16 --67 --127 --127 --22 -87 -123 -112 -19 --64 --127 --127 --20 -88 -123 -112 -19 --64 --127 --127 --19 -89 -123 -113 -20 --63 --127 --127 --18 -89 -123 -115 -22 --61 --127 --127 --127 --24 -93 -123 -123 -123 -43 --42 --119 --127 --127 --25 -91 -123 -123 -123 -40 --45 --121 --127 --127 --28 -89 -123 -123 -123 -38 --47 --123 --127 --127 --29 -87 -123 -123 -123 -37 --48 --124 --127 --127 --30 -86 -123 -123 -123 -38 --47 --123 --127 --24 -82 -123 -105 -12 --70 --127 --127 --24 -83 -123 -108 -16 --67 --127 --127 --23 -86 -123 -112 -19 --64 --127 --127 --21 -88 -123 -111 -18 --64 --127 --127 --19 -89 -123 -113 -20 --63 --127 --127 --18 -90 -123 -113 -20 --63 --127 --127 --18 -90 -123 -123 -123 -32 --52 --127 --127 --127 --35 -82 -123 -123 -123 -33 --51 --126 --127 --127 --33 -83 -123 -123 -123 -35 --50 --125 --127 --127 --32 -84 -123 -123 -123 -35 --50 --125 --127 --127 --32 -85 -123 -123 -123 -35 --50 --125 --127 --127 --32 -85 -123 -115 -22 --61 --127 --127 --14 -94 -123 -117 -24 --59 --127 --127 --15 -93 -123 -116 -22 --61 --127 --127 --16 -92 -123 -115 -22 --61 --127 --127 --17 -92 -123 -115 -22 --61 --127 --127 --16 -91 -123 -115 -21 --61 --127 --127 --17 -90 -123 -123 -123 -34 --51 --126 --127 --127 --34 -82 -123 -123 -123 -33 --52 --127 --127 --127 --33 -83 -123 -123 -123 -35 --49 --125 --127 --127 --33 -84 -123 -123 -123 -35 --50 --125 --127 --127 --32 -85 -123 -123 -123 -35 --50 --125 --127 --127 --32 -84 -123 -115 -22 --61 --127 --127 --15 -93 -123 -117 -24 --60 --127 --127 --16 -92 -123 -115 -22 --61 --127 --127 --16 -92 -123 -116 -23 --60 --127 --127 --17 -91 -123 -115 -21 --61 --127 --127 --18 -91 -123 -115 -22 --61 --127 --127 --17 -90 -123 -117 -23 --60 --127 --127 --127 --23 -94 -123 -123 -123 -44 --41 --118 --127 --127 --24 -91 -123 -123 -123 -40 --45 --121 --127 --127 --27 -88 -123 -123 -123 -38 --47 --123 --127 --127 --29 -87 -123 -123 -123 -37 --48 --124 --127 --127 --31 -86 -123 -123 -123 -37 --48 --124 --127 --25 -82 -123 -103 -11 --71 --127 --127 --25 -83 -123 -108 -15 --67 --127 --127 --23 -86 -123 -111 -18 --64 --127 --127 --22 -87 -123 -111 -18 --64 --127 --127 --20 -88 -123 -113 -20 --63 --127 --127 --19 -90 -123 -115 -22 --61 --127 --127 --127 --24 -93 -123 -123 -123 -43 --42 --119 --127 --127 --25 -91 -123 -123 -123 -40 --45 --121 --127 --127 --27 -88 -123 -123 -123 -38 --47 --123 --127 --127 --29 -87 -123 -123 -123 -37 --48 --124 --127 --127 --30 -85 -123 -123 -123 -37 --47 --123 --127 --24 -82 -123 -105 -12 --70 --127 --127 --25 -84 -123 -108 -16 --67 --127 --127 --22 -87 -123 -111 -19 --64 --127 --127 --20 -89 -123 -112 -19 --64 --127 --127 --19 -89 -123 -114 -21 --62 --127 --127 --18 -91 -123 -114 -21 --62 --127 --127 --17 -90 -123 -123 -123 -33 --52 --127 --127 --127 --34 -83 -123 -123 -123 -33 --52 --127 --127 --127 --34 -83 -123 -123 -123 -35 --50 --125 --127 --127 --33 -84 -123 -123 -123 -33 --52 --126 --127 --127 --33 -83 -123 -123 -123 -34 --51 --126 --127 --127 --33 -84 -123 -114 -21 --62 --127 --127 --16 -92 -123 -117 -24 --59 --127 --127 --16 -92 -123 -115 -22 --61 --127 --127 --17 -91 -123 -114 -21 --62 --127 --127 --16 -92 -123 -115 -22 --61 --127 --127 --16 -92 -123 -115 -22 --61 --127 --127 --17 -92 -123 -123 -123 -34 --51 --126 --127 --127 --34 -83 -123 -123 -123 -34 --51 --126 --127 --127 --33 -85 -123 -123 -123 -37 --48 --123 --127 --127 --32 -85 -123 -123 -123 -35 --50 --125 --127 --127 --31 -85 -123 -123 -123 -35 --50 --125 --127 --127 --32 -85 -123 -116 -23 --60 --127 --127 --14 -94 -123 -117 -23 --60 --127 --127 --16 -92 -123 -115 -22 --61 --127 --127 --17 -92 -123 -116 -23 --60 --127 --127 --17 -91 -123 -114 -21 --62 --127 --127 --18 -90 -123 -114 -21 --62 --127 --127 --18 -90 -123 -116 -22 --61 --127 --127 --127 --23 -93 -123 -123 -123 -43 --43 --119 --127 --127 --25 -90 -123 -123 -123 -39 --45 --121 --127 --127 --29 -88 -123 -123 -123 -37 --47 --123 --127 --127 --29 -87 -123 -123 -123 -36 --48 --124 --127 --127 --30 -86 -123 -123 -123 -37 --47 --123 --127 --24 -83 -123 -105 -13 --69 --127 --127 --24 -84 -123 -109 -16 --66 --127 --127 --21 -88 -123 -114 -20 --62 --127 --127 --20 -89 -123 -112 -19 --64 --127 --127 --19 -89 -123 -114 -21 --62 --127 --127 --18 -90 -123 -116 -22 --61 --127 --127 --127 --23 -94 -123 -123 -123 -43 --42 --119 --127 --127 --25 -91 -123 -123 -123 -40 --45 --121 --127 --127 --27 -88 -123 -123 -123 -38 --47 --123 --127 --127 --29 -86 -123 -123 -123 -36 --49 --124 --127 --127 --30 -86 -123 -123 -123 -38 --47 --123 --127 --24 -82 -123 -105 -12 --70 --127 --127 --25 -84 -123 -108 -15 --67 --127 --127 --21 -86 -123 -112 -19 --64 --127 --127 --20 -88 -123 -112 -19 --64 --127 --127 --19 -89 -123 -113 -20 --63 --127 --127 --18 -90 -123 -114 -21 --62 --127 --127 --18 -90 -123 -123 -123 -32 --53 --127 --127 --127 --35 -81 -123 -123 -123 -33 --52 --127 --127 --127 --34 -83 -123 -123 -123 -35 --50 --125 --127 --127 --33 -83 -123 -123 -123 -34 --51 --126 --127 --127 --32 -84 -123 -123 -123 -35 --50 --125 --127 --127 --32 -85 -123 -116 -22 --61 --127 --127 --13 -94 -123 -118 -24 --59 --127 --127 --15 -93 -123 -117 -23 --60 --127 --127 --16 -91 -123 -116 -23 --60 --127 --127 --16 -92 -123 -115 -22 --61 --127 --127 --17 -91 -123 -115 -22 --61 --127 --127 --17 -90 -123 -123 -123 -33 --52 --127 --127 --127 --34 -82 -123 -123 -123 -33 --52 --127 --127 --127 --33 -84 -123 -123 -123 -35 --50 --125 --127 --127 --33 -84 -123 -123 -123 -34 --51 --126 --127 --127 --33 -84 -123 -123 -123 -34 --50 --126 --127 --127 --32 -84 -123 -115 -22 --61 --127 --127 --15 -94 -123 -116 -23 --60 --127 --127 --15 -92 -123 -116 -23 --60 --127 --127 --16 -92 -123 -116 -23 --60 --127 --127 --17 -91 -123 -115 -22 --61 --127 --127 --17 -91 -123 -115 -22 --61 --127 --127 --17 -91 -123 -116 -23 --60 --127 --127 --127 --23 -94 -123 -123 -123 -43 --42 --118 --127 --127 --25 -91 -123 -123 -123 -40 --45 --121 --127 --127 --28 -88 -123 -123 -123 -37 --48 --123 --127 --127 --29 -86 -123 -123 -123 -37 --47 --123 --127 --127 --30 -86 -123 -123 -123 -38 --47 --123 --127 --24 -82 -123 -105 -13 --69 --127 --127 --25 -84 -123 -109 -16 --66 --127 --127 --22 -86 -123 -113 -20 --63 --127 --127 --20 -88 -123 -112 -19 --63 --127 --127 --19 -90 -123 -113 -20 --63 --127 --127 --18 -90 -123 -116 -22 --61 --127 --127 --127 --24 -93 -123 -123 -123 -42 --43 --119 --127 --127 --25 -90 -123 -123 -123 -39 --46 --122 --127 --127 --28 -87 -123 -123 -123 -37 --47 --123 --127 --127 --30 -86 -123 -123 -123 -36 --49 --124 --127 --127 --32 -85 -123 -123 -123 -37 --47 --123 --127 --25 -82 -123 -104 -12 --70 --127 --127 --25 -84 -123 -108 -15 --67 --127 --127 --22 -86 -123 -111 -18 --65 --127 --127 --20 -87 -123 -111 -18 --64 --127 --127 --19 -89 -123 -113 -20 --63 --127 --127 --19 -90 -123 -114 -21 --62 --127 --127 --18 -90 -123 -123 -123 -32 --53 --127 --127 --127 --35 -82 -123 -123 -123 -33 --52 --127 --127 --127 --33 -83 -123 -123 -123 -35 --50 --125 --127 --127 --32 -84 -123 -123 -123 -34 --51 --126 --127 --127 --31 -85 -123 -123 -123 -35 --50 --125 --127 --127 --31 -85 -123 -115 -22 --61 --127 --127 --13 -94 -123 -118 -25 --59 --127 --127 --15 -94 -123 -116 -23 --60 --127 --127 --15 -92 -123 -115 -22 --61 --127 --127 --16 -92 -123 -115 -22 --61 --127 --127 --17 -91 -123 -115 -22 --61 --127 --127 --16 -91 -123 -123 -123 -33 --51 --126 --127 --127 --34 -83 -123 -123 -123 -34 --51 --126 --127 --127 --32 -85 -123 -123 -123 -37 --48 --124 --127 --127 --32 -85 -123 -123 -123 -35 --50 --125 --127 --127 --32 -85 -123 -123 -123 -35 --50 --125 --127 --127 --32 -85 -123 -116 -22 --61 --127 --127 --14 -94 -123 -117 -24 --59 --127 --127 --15 -93 -123 -116 -22 --61 --127 --127 --15 -92 -123 -116 -23 --60 --127 --127 --18 -90 -123 -114 -21 --62 --127 --127 --17 -91 -123 -115 -21 --62 --127 --127 --17 -91 -123 -116 -23 --60 --127 --127 --127 --23 -94 -123 -123 -123 -43 --42 --118 --127 --127 --25 -91 -123 -123 -123 -39 --46 --122 --127 --127 --28 -87 -123 -123 -123 -37 --47 --123 --127 --127 --30 -86 -123 -123 -123 -36 --48 --124 --127 --127 --30 -86 -123 -123 -123 -37 --48 --124 --127 --24 -82 -123 -104 -12 --70 --127 --127 --25 -84 -123 -108 -15 --67 --127 --127 --22 -86 -123 -112 -19 --64 --127 --127 --21 -88 -123 -112 -19 --63 --127 --127 --18 -89 -123 -114 -21 --62 --127 --127 --17 -91 -123 -116 -23 --60 --127 --127 --127 --23 -94 -123 -123 -123 -43 --42 --119 --127 --127 --25 -91 -123 -123 -123 -40 --45 --121 --127 --127 --28 -88 -123 -123 -123 -38 --47 --123 --127 --127 --30 -86 -123 -123 -123 -36 --48 --124 --127 --127 --30 -85 -123 -123 -123 -37 --47 --123 --127 --24 -82 -123 -105 -13 --69 --127 --127 --25 -84 -123 -108 -16 --67 --127 --127 --22 -87 -123 -112 -19 --64 --127 --127 --19 -88 -123 -112 -19 --64 --127 --127 --20 -89 -123 -112 -19 --63 --127 --127 --18 -90 -123 -114 -21 --62 --127 --127 --17 -91 -123 -123 -123 -33 --52 --127 --127 --127 --34 -83 -123 -123 -123 -33 --52 --127 --127 --127 --33 -84 -123 -123 -123 -35 --50 --125 --127 --127 --33 -84 -123 -123 -123 -34 --51 --126 --127 --127 --32 -85 -123 -123 -123 -35 --50 --125 --127 --127 --32 -85 -123 -115 -22 --61 --127 --127 --14 -93 -123 -117 -23 --60 --127 --127 --15 -92 -123 -116 -22 --61 --127 --127 --17 -91 -123 -114 -21 --62 --127 --127 --17 -91 -123 -115 -21 --61 --127 --127 --17 -92 -123 -115 -21 --62 --127 --127 --18 -91 -123 -123 -123 -34 --51 --126 --127 --127 --34 -82 -123 -123 -123 -34 --51 --126 --127 --127 --33 -85 -123 -123 -123 -37 --49 --124 --127 --127 --32 -85 -123 -123 -123 -35 --50 --125 --127 --127 --32 -85 -123 -123 -123 -36 --49 --125 --127 --127 --31 -85 -123 -117 -23 --60 --127 --127 --14 -94 -123 -117 -24 --60 --127 --127 --14 -93 -123 -117 -23 --60 --127 --127 --15 -92 -123 -117 -23 --60 --127 --127 --17 -91 -123 -115 -21 --61 --127 --127 --17 -91 -123 -115 -22 --61 --127 --127 --17 -91 -123 -116 -23 --60 --127 --127 --127 --23 -94 -123 -123 -123 -44 --42 --118 --127 --127 --25 -91 -123 -123 -123 -39 --45 --122 --127 --127 --28 -88 -123 -123 -123 -37 --47 --123 --127 --127 --30 -87 -123 -123 -123 -37 --48 --124 --127 --127 --30 -86 -123 -123 -123 -37 --48 --123 --127 --24 -82 -123 -105 -13 --69 --127 --127 --25 -84 -123 -108 -16 --67 --127 --127 --22 -86 -123 -113 -19 --63 --127 --127 --20 -88 -123 -111 -19 --64 --127 --127 --19 -89 -123 -113 -20 --63 --127 --127 --19 -90 -123 -115 -22 --61 --127 --127 --127 --25 -93 -123 -123 -123 -42 --43 --119 --127 --127 --26 -91 -123 -123 -123 -39 --46 --122 --127 --127 --28 -88 -123 -123 -123 -38 --47 --123 --127 --127 --29 -87 -123 -123 -123 -36 --48 --124 --127 --127 --29 -86 -123 -123 -123 -38 --47 --123 --127 --24 -82 -123 -104 -12 --70 --127 --127 --25 -83 -123 -108 -15 --67 --127 --127 --22 -86 -123 -111 -18 --65 --127 --127 --21 -87 -123 -112 -19 --64 --127 --127 --20 -89 -123 -113 -20 --63 --127 --127 --18 -89 -123 -114 -21 --62 --127 --127 --18 -90 -123 -123 -123 -32 --52 --127 --127 --127 --35 -82 -123 -123 -123 -33 --52 --127 --127 --127 --33 -84 -123 -123 -123 -35 --50 --125 --127 --127 --32 -84 -123 -123 -123 -35 --50 --125 --127 --127 --31 -86 -123 -123 -123 -36 --49 --124 --127 --127 --31 -86 -123 -117 -23 --60 --127 --127 --13 -95 -123 -118 -24 --59 --127 --127 --15 -94 -123 -117 -23 --60 --127 --127 --15 -92 -123 -116 -23 --60 --127 --127 --16 -93 -123 -115 -22 --61 --127 --127 --17 -92 -123 -115 -22 --61 --127 --127 --16 -92 -123 -123 -123 -34 --51 --126 --127 --127 --33 -83 -123 -123 -123 -34 --50 --126 --127 --127 --32 -84 -123 -123 -123 -36 --49 --125 --127 --127 --32 -84 -123 -123 -123 -34 --51 --126 --127 --127 --33 -84 -123 -123 -123 -34 --51 --126 --127 --127 --33 -84 -123 -115 -21 --62 --127 --127 --15 -92 -123 -116 -23 --60 --127 --127 --16 -92 -123 -115 -22 --61 --127 --127 --17 -91 -123 -115 -22 --61 --127 --127 --17 -91 -123 -115 -21 --62 --127 --127 --18 -91 -123 -114 -21 --62 --127 --127 --17 -90 -123 -116 -23 --60 --127 --127 --127 --23 -94 -123 -123 -123 -43 --42 --119 --127 --127 --25 -91 -123 -123 -123 -40 --45 --121 --127 --127 --27 -89 -123 -123 -123 -38 --47 --123 --127 --127 --29 -88 -123 -123 -123 -37 --48 --123 --127 --127 --30 -86 -123 -123 -123 -37 --48 --123 --127 --24 -83 -123 -105 -13 --69 --127 --127 --24 -84 -123 -108 -16 --67 --127 --127 --21 -87 -123 -113 -19 --63 --127 --127 --20 -87 -123 -112 -19 --64 --127 --127 --19 -89 -123 -113 -20 --63 --127 --127 --19 -90 -123 -115 -22 --61 --127 --127 --127 --24 -93 -123 -123 -123 -42 --43 --119 --127 --127 --26 -90 -123 -123 -123 -38 --47 --123 --127 --127 --28 -87 -123 -123 -123 -37 --47 --123 --127 --127 --30 -86 -123 -123 -123 -36 --49 --124 --127 --127 --30 -85 -123 -123 -123 -37 --47 --123 --127 --127 --32 -85 -123 -123 -123 -35 --49 --125 --127 --127 --31 -85 -123 -123 -123 -35 --49 --125 --127 --127 --31 -85 -123 -123 -123 -36 --49 --125 --127 --127 --30 -85 -123 -123 -123 -35 --49 --125 --127 --127 --31 -86 -123 -123 -123 -38 --47 --123 --127 --23 -83 -123 -105 -12 --70 --127 --127 --25 -84 -123 -108 -15 --67 --127 --127 --21 -87 -123 -112 -19 --64 --127 --127 --19 -89 -123 -112 -19 --64 --127 --127 --19 -89 -123 -114 -20 --62 --127 --127 --18 -90 -123 -113 -20 --63 --127 --127 --18 -90 -123 -113 -20 --63 --127 --127 --18 -90 -123 -114 -21 --62 --127 --127 --18 -90 -123 -114 -21 --62 --127 --127 --17 -91 -123 -115 -21 --62 --127 --127 --17 -91 -123 -115 -21 --61 --127 --127 --17 -91 -123 -114 -21 --62 --127 --127 --18 -90 -123 -123 -123 -33 --52 --127 --127 --127 --34 -82 -123 -123 -123 -32 --52 --127 --127 --127 --34 -83 -123 -123 -123 -35 --50 --125 --127 --127 --34 -83 -123 -123 -123 -34 --51 --126 --127 --127 --33 -84 -123 -123 -123 -34 --50 --126 --127 --127 --32 -84 -123 -116 -22 --61 --127 --127 --15 -93 -123 -117 -24 --59 --127 --127 --15 -93 -123 -116 -22 --61 --127 --127 --16 -92 -123 -116 -23 --61 --127 --127 --16 -91 -123 -114 -21 --62 --127 --127 --17 -91 -123 -115 -21 --62 --127 --127 --17 -91 -123 -117 -23 --60 --127 --127 --127 --23 -94 -123 -123 -123 -44 --41 --118 --127 --127 --24 -91 -123 -123 -123 -40 --45 --121 --127 --127 --27 -89 -123 -123 -123 -38 --47 --123 --127 --127 --29 -87 -123 -123 -123 -37 --48 --124 --127 --127 --30 -86 -123 -123 -123 -37 --48 --123 --127 --24 -82 -123 -105 -13 --69 --127 --127 --24 -84 -123 -108 -15 --67 --127 --127 --21 -87 -123 -112 -19 --64 --127 --127 --20 -88 -123 -112 -19 --64 --127 --127 --19 -89 -123 -114 -21 --62 --127 --127 --18 -90 -123 -116 -23 --60 --127 --127 --127 --23 -94 -123 -123 -123 -43 --42 --119 --127 --127 --25 -91 -123 -123 -123 -40 --45 --121 --127 --127 --28 -87 -123 -123 -123 -37 --47 --123 --127 --127 --29 -86 -123 -123 -123 -35 --49 --125 --127 --127 --30 -85 -123 -123 -123 -37 --48 --123 --127 --127 --31 -85 -123 -123 -123 -35 --50 --125 --127 --127 --31 -85 -123 -123 -123 -35 --49 --125 --127 --127 --31 -85 -123 -123 -123 -35 --49 --125 --127 --127 --31 -85 -123 -123 -123 -35 --50 --125 --127 --127 --32 -84 -123 -123 -123 -36 --49 --125 --127 --25 -81 -123 -103 -11 --71 --127 --127 --26 -82 -123 -107 -14 --68 --127 --127 --24 -85 -123 -111 -18 --65 --127 --127 --20 -87 -123 -111 -18 --64 --127 --127 --21 -88 -123 -112 -19 --64 --127 --127 --18 -90 -123 -114 -21 --62 --127 --127 --18 -90 -123 -114 -20 --62 --127 --127 --18 -90 -123 -115 -21 --62 --127 --127 --17 -91 -123 -114 -21 --62 --127 --127 --17 -91 -123 -115 -22 --61 --127 --127 --16 -92 -123 -116 -22 --61 --127 --127 --16 -92 -123 -115 -22 --61 --127 --127 --16 -92 -123 -123 -123 -34 --50 --126 --127 --127 --33 -83 -123 -123 -123 -34 --51 --126 --127 --127 --32 -84 -123 -123 -123 -36 --49 --125 --127 --127 --32 -85 -123 -123 -123 -34 --51 --126 --127 --127 --32 -85 -123 -123 -123 -36 --49 --125 --127 --127 --31 -85 -123 -116 -23 --60 --127 --127 --14 -93 -123 -117 -23 --60 --127 --127 --16 -92 -123 -116 -22 --61 --127 --127 --16 -92 -123 -116 -23 --60 --127 --127 --16 -92 -123 -115 -22 --61 --127 --127 --17 -91 -123 -115 -22 --61 --127 --127 --16 -91 -123 -117 -23 --60 --127 --127 --127 --23 -94 -123 -123 -123 -43 --42 --119 --127 --127 --25 -91 -123 -123 -123 -39 --46 --122 --127 --127 --28 -87 -123 -123 -123 -37 --48 --123 --127 --127 --30 -86 -123 -123 -123 -37 --48 --124 --127 --127 --30 -85 -123 -123 -123 -37 --48 --123 --127 --23 -82 -123 -105 -12 --70 --127 --127 --24 -84 -123 -108 -16 --67 --127 --127 --21 -87 -123 -113 -20 --63 --127 --127 --19 -89 -123 -112 -19 --64 --127 --127 --18 -89 -123 -114 -20 --63 --127 --127 --18 -91 -123 -116 -22 --61 --127 --127 --127 --23 -94 -123 -123 -123 -44 --41 --118 --127 --127 --25 -91 -123 -123 -123 -39 --46 --122 --127 --127 --28 -88 -123 -123 -123 -37 --48 --123 --127 --127 --30 -86 -123 -123 -123 -36 --49 --125 --127 --127 --30 -86 -123 -123 -123 -37 --48 --123 --127 --24 -82 -123 -104 -12 --70 --127 --127 --25 -83 -123 -107 -15 --67 --127 --127 --22 -86 -123 -111 -18 --65 --127 --127 --20 -88 -123 -111 -18 --64 --127 --127 --20 -89 -123 -112 -19 --64 --127 --127 --18 -90 -123 -114 -20 --62 --127 --127 --18 -90 -123 -123 -123 -32 --52 --127 --127 --127 --34 -82 -123 -123 -123 -33 --51 --126 --127 --127 --33 -83 -123 -123 -123 -35 --50 --125 --127 --127 --32 -84 -123 -123 -123 -34 --51 --126 --127 --127 --32 -84 -123 -123 -123 -35 --50 --125 --127 --127 --32 -85 -123 -115 -21 --61 --127 --127 --15 -93 -123 -117 -24 --59 --127 --127 --16 -92 -123 -115 -22 --61 --127 --127 --17 -91 -123 -115 -22 --61 --127 --127 --17 -92 -123 -115 -22 --61 --127 --127 --17 -91 -123 -115 -22 --61 --127 --127 --17 -91 -123 -123 -123 -34 --51 --126 --127 --127 --34 -82 -123 -123 -123 -33 --51 --126 --127 --127 --33 -84 -123 -123 -123 -36 --49 --125 --127 --127 --32 -84 -123 -123 -123 -34 --50 --126 --127 --127 --33 -84 -123 -123 -123 -35 --50 --125 --127 --127 --32 -85 -123 -116 -22 --61 --127 --127 --14 -94 -123 -117 -24 --60 --127 --127 --16 -93 -123 -116 -23 --60 --127 --127 --15 -92 -123 -116 -23 --60 --127 --127 --16 -91 -123 -116 -22 --61 --127 --127 --17 -92 -123 -114 -21 --62 --127 --127 --16 -91 -123 -117 -24 --60 --127 --127 --127 --22 -94 -123 -123 -123 -43 --42 --118 --127 --127 --24 -91 -123 -123 -123 -40 --45 --121 --127 --127 --29 -88 -123 -123 -123 -37 --48 --124 --127 --127 --30 -86 -123 -123 -123 -35 --49 --125 --127 --127 --31 -85 -123 -123 -123 -37 --48 --123 --127 --24 -82 -123 -104 -12 --70 --127 --127 --25 -84 -123 -108 -16 --67 --127 --127 --22 -86 -123 -112 -19 --64 --127 --127 --20 -88 -123 -112 -19 --64 --127 --127 --19 -89 -123 -113 -20 --63 --127 --127 --19 -90 -123 -115 -22 --61 --127 --127 --127 --24 -93 -123 -123 -123 -43 --42 --119 --127 --127 --25 -91 -123 -123 -123 -40 --45 --121 --127 --127 --28 -88 -123 -123 -123 -38 --47 --123 --127 --127 --29 -87 -123 -123 -123 -37 --48 --124 --127 --127 --30 -86 -123 -123 -123 -38 --47 --123 --127 --24 -83 -123 -105 -12 --70 --127 --127 --25 -83 -123 -108 -15 --67 --127 --127 --21 -87 -123 -112 -19 --64 --127 --127 --19 -88 -123 -111 -18 --64 --127 --127 --19 -89 -123 -113 -20 --62 --127 --127 --18 -90 -123 -114 -21 --62 --127 --127 --18 -90 -123 -123 -123 -32 --53 --127 --127 --127 --35 -82 -123 -123 -123 -33 --52 --127 --127 --127 --34 -83 -123 -123 -123 -35 --50 --125 --127 --127 --33 -84 -123 -123 -123 -34 --51 --126 --127 --127 --32 -84 -123 -123 -123 -35 --50 --125 --127 --127 --32 -85 -123 -116 -23 --60 --127 --127 --14 -94 -123 -117 -23 --60 --127 --127 --15 -93 -123 -117 -23 --60 --127 --127 --15 -93 -123 -116 -23 --60 --127 --127 --17 -92 -123 -115 -22 --61 --127 --127 --17 -91 -123 -115 -22 --61 --127 --127 --17 -91 -123 -123 -123 -33 --51 --126 --127 --127 --34 -83 -123 -123 -123 -33 --52 --127 --127 --127 --32 -84 -123 -123 -123 -36 --49 From 5305c33ec140f390ed2fb9b06a23ffec25347f52 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Wed, 7 Oct 2020 02:05:16 +0200 Subject: [PATCH 0932/1047] Add LeakSanitizer suppressions to skip libfontconfig warnings --- .lsan_suppressions | 1 + pm3 | 8 ++++++-- 2 files changed, 7 insertions(+), 2 deletions(-) create mode 100644 .lsan_suppressions diff --git a/.lsan_suppressions b/.lsan_suppressions new file mode 100644 index 000000000..6ac2d14a1 --- /dev/null +++ b/.lsan_suppressions @@ -0,0 +1 @@ +leak:libfontconfig.so diff --git a/pm3 b/pm3 index 771dce77d..429dfaba6 100755 --- a/pm3 +++ b/pm3 @@ -23,7 +23,11 @@ else # hope it's installed somehow, still not sure where fw images are... CLIENT="proxmark3" fi - +EVALENV="" +# LeakSanitizer suppressions +if [ -e .lsan_suppressions ]; then + EVALENV="export LSAN_OPTIONS=suppressions=.lsan_suppressions" +fi PM3LIST=() SHOWLIST=false @@ -212,7 +216,7 @@ function get_pm3_list_WSL { SCRIPT=$(basename -- "$0") if [ "$SCRIPT" = "pm3" ]; then - CMD() { $CLIENT "$@"; } + CMD() { eval "$EVALENV"; $CLIENT "$@"; } HELP() { cat << EOF From c24383c189e5c30f6852db3abd7f55e46910a3d9 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Wed, 7 Oct 2020 12:09:56 +0200 Subject: [PATCH 0933/1047] typo --- client/src/cmdlfem4x50.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/src/cmdlfem4x50.c b/client/src/cmdlfem4x50.c index 630e044ba..4e608cd42 100644 --- a/client/src/cmdlfem4x50.c +++ b/client/src/cmdlfem4x50.c @@ -93,7 +93,7 @@ static int usage_lf_em4x50_wipe(void) { PrintAndLogEx(NORMAL, " h - this help"); PrintAndLogEx(NORMAL, " p - password (hex)"); PrintAndLogEx(NORMAL, "Examples:"); - PrintAndLogEx(NORMAL, _YELLOW_(" lf em 4x50_wwipe p 11223344")); + PrintAndLogEx(NORMAL, _YELLOW_(" lf em 4x50_wipe p 11223344")); PrintAndLogEx(NORMAL, ""); return PM3_SUCCESS; } From 70f11c40979883f0079f16c5ed1989f8252ec2f4 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Wed, 7 Oct 2020 13:01:24 +0200 Subject: [PATCH 0934/1047] em4x05 dump text --- client/src/cmdlfem4x.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/client/src/cmdlfem4x.c b/client/src/cmdlfem4x.c index 272a53b97..9d8d87491 100644 --- a/client/src/cmdlfem4x.c +++ b/client/src/cmdlfem4x.c @@ -976,10 +976,10 @@ static int CmdEM4x05Dump(const char *Cmd) { if (usePwd) { data[addr] = BSWAP_32(pwd); num_to_bytes(pwd, 4, bytes); - PrintAndLogEx(NORMAL, " %02u | %08X | %s | %c | password", addr, pwd, sprint_ascii(bytes, 4), ((lock_bits >> addr) & 1) ? 'x' : ' '); + PrintAndLogEx(NORMAL, " %02u | %08X | %s | %s | Password", addr, pwd, sprint_ascii(bytes, 4), ((lock_bits >> addr) & 1) ? _RED_("x") : " "); } else { data[addr] = 0x00; // Unknown password, but not used to set to zeros - PrintAndLogEx(NORMAL, " 02 | | | | " _RED_("cannot read")); + PrintAndLogEx(NORMAL, " 02 | | | | %-10s " _RED_("cannot read"), "Password"); } } else { // success &= EM4x05ReadWord_ext(addr, pwd, usePwd, &word); @@ -987,11 +987,12 @@ static int CmdEM4x05Dump(const char *Cmd) { if (status != PM3_SUCCESS) success = PM3_ESOFT; // If any error ensure fail is set so not to save invalid data data[addr] = BSWAP_32(word); + const char *info[] = {"Info/User", "UID", "", "User", "Config", "User", "User", "User", "User", "User", "User", "User", "User", "User", "User"}; if (status == PM3_SUCCESS) { num_to_bytes(word, 4, bytes); - PrintAndLogEx(NORMAL, " %02d | %08X | %s | %c |", addr, word, sprint_ascii(bytes, 4), ((lock_bits >> addr) & 1) ? 'x' : ' '); + PrintAndLogEx(NORMAL, " %02d | %08X | %s | %s | %s", addr, word, sprint_ascii(bytes, 4), ((lock_bits >> addr) & 1) ? _RED_("x") : " ", info[addr]); } else - PrintAndLogEx(NORMAL, " %02d | | | | " _RED_("Fail"), addr); + PrintAndLogEx(NORMAL, " %02d | | | | %-10s " _RED_("cannot read"), addr, info[addr]); } } // Print blocks 14 and 15 From 9395b9581fd2450bd47a1cda33d4c24928d1c189 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Wed, 7 Oct 2020 15:45:43 +0200 Subject: [PATCH 0935/1047] EM4x05 dump: improve few things, see details: - textual - don't write command passwd in dump it tag is not pwd protected - don't dump wrong Word14/15 if we couldn't read them --- client/src/cmdlfem4x.c | 72 ++++++++++++++++++++++++++++++------------ 1 file changed, 52 insertions(+), 20 deletions(-) diff --git a/client/src/cmdlfem4x.c b/client/src/cmdlfem4x.c index 9d8d87491..ac49bcc91 100644 --- a/client/src/cmdlfem4x.c +++ b/client/src/cmdlfem4x.c @@ -917,6 +917,9 @@ static int CmdEM4x05Dump(const char *Cmd) { uint8_t addr = 0; uint32_t pwd = 0; bool usePwd = false; + bool needReadPwd = true; + bool gotWord14 = false; + bool gotWord15 = false; uint8_t cmdp = 0; uint8_t bytes[4] = {0}; uint32_t data[16]; @@ -948,38 +951,58 @@ static int CmdEM4x05Dump(const char *Cmd) { int success = PM3_SUCCESS; int status; uint32_t lock_bits = 0x00; // no blocks locked - uint32_t word = 0; + const char *info[] = {"Info/User", "UID", "Password", "User", "Config", "User", "User", "User", "User", "User", "User", "User", "User", "User", "Lock", "Lock"}; + + if (usePwd) { + // Test first if a password is required + status = EM4x05ReadWord_ext(14, pwd, false, &word); + if (status == PM3_SUCCESS) { + PrintAndLogEx(INFO, "Note that password doesn't seem to be needed"); + needReadPwd = false; + } + } PrintAndLogEx(NORMAL, "Addr | data | ascii |lck| info"); PrintAndLogEx(NORMAL, "-----+----------+-------+---+-----"); // To flag any blocks locked we need to read blocks 14 and 15 first // dont swap endin until we get block lock flags. status = EM4x05ReadWord_ext(14, pwd, usePwd, &word); - if (status != PM3_SUCCESS) + if (status == PM3_SUCCESS) { + if (!usePwd) + needReadPwd = false; + if (word != 0x00) + lock_bits = word; + data[14] = word; + gotWord14 = true; + } else { success = PM3_ESOFT; // If any error ensure fail is set so not to save invalid data - if (word != 0x00) - lock_bits = word; - data[14] = word; - + } status = EM4x05ReadWord_ext(15, pwd, usePwd, &word); - if (status != PM3_SUCCESS) + if (status == PM3_SUCCESS) { + if (word != 0x00) // assume block 15 is the current lock block + lock_bits = word; + data[15] = word; + gotWord15 = true; + } else { success = PM3_ESOFT; // If any error ensure fail is set so not to save invalid data - if (word != 0x00) // assume block 15 is the current lock block - lock_bits = word; - data[15] = word; - + } // Now read blocks 0 - 13 as we have 14 and 15 for (; addr < 14; addr++) { if (addr == 2) { if (usePwd) { - data[addr] = BSWAP_32(pwd); - num_to_bytes(pwd, 4, bytes); - PrintAndLogEx(NORMAL, " %02u | %08X | %s | %s | Password", addr, pwd, sprint_ascii(bytes, 4), ((lock_bits >> addr) & 1) ? _RED_("x") : " "); + if ((needReadPwd) && (success != PM3_ESOFT)) { + data[addr] = BSWAP_32(pwd); + num_to_bytes(pwd, 4, bytes); + PrintAndLogEx(NORMAL, " %02u | %08X | %s | %s | %s", addr, pwd, sprint_ascii(bytes, 4), ((lock_bits >> addr) & 1) ? _RED_("x") : " ", info[addr]); + } else { + // The pwd is not needed for Login so we're not sure what's the actual content of that block + PrintAndLogEx(NORMAL, " %02u | | | | %-10s " _RED_("cannot read"), addr, info[addr]); + } } else { data[addr] = 0x00; // Unknown password, but not used to set to zeros - PrintAndLogEx(NORMAL, " 02 | | | | %-10s " _RED_("cannot read"), "Password"); + PrintAndLogEx(NORMAL, " %02u | | | | %-10s " _RED_("cannot read"), addr, info[addr]); } } else { // success &= EM4x05ReadWord_ext(addr, pwd, usePwd, &word); @@ -987,18 +1010,27 @@ static int CmdEM4x05Dump(const char *Cmd) { if (status != PM3_SUCCESS) success = PM3_ESOFT; // If any error ensure fail is set so not to save invalid data data[addr] = BSWAP_32(word); - const char *info[] = {"Info/User", "UID", "", "User", "Config", "User", "User", "User", "User", "User", "User", "User", "User", "User", "User"}; if (status == PM3_SUCCESS) { num_to_bytes(word, 4, bytes); - PrintAndLogEx(NORMAL, " %02d | %08X | %s | %s | %s", addr, word, sprint_ascii(bytes, 4), ((lock_bits >> addr) & 1) ? _RED_("x") : " ", info[addr]); + PrintAndLogEx(NORMAL, " %02u | %08X | %s | %s | %s", addr, word, sprint_ascii(bytes, 4), ((lock_bits >> addr) & 1) ? _RED_("x") : " ", info[addr]); } else - PrintAndLogEx(NORMAL, " %02d | | | | %-10s " _RED_("cannot read"), addr, info[addr]); + PrintAndLogEx(NORMAL, " %02u | | | | %-10s " _RED_("cannot read"), addr, info[addr]); } } // Print blocks 14 and 15 // Both lock bits are protected with bit idx 14 (special case) - PrintAndLogEx(NORMAL, " %02d | %08X | %s | %c | Lock", 14, data[14], sprint_ascii(bytes, 4), ((lock_bits >> 14) & 1) ? 'x' : ' '); - PrintAndLogEx(NORMAL, " %02d | %08X | %s | %c | Lock", 15, data[15], sprint_ascii(bytes, 4), ((lock_bits >> 14) & 1) ? 'x' : ' '); + if (gotWord14) { + addr = 14; + PrintAndLogEx(NORMAL, " %02u | %08X | %s | %s | %s", addr, data[addr], sprint_ascii(bytes, 4), ((lock_bits >> 14) & 1) ? _RED_("x") : " ", info[addr]); + } else { + PrintAndLogEx(NORMAL, " %02u | | | | %-10s " _RED_("cannot read"), addr, info[addr]); + } + if (gotWord15) { + addr = 15; // beware lock bit of word15 is pr14 + PrintAndLogEx(NORMAL, " %02d | %08X | %s | %s | %s", addr, data[addr], sprint_ascii(bytes, 4), ((lock_bits >> 14) & 1) ? _RED_("x") : " ", info[addr]); + } else { + PrintAndLogEx(NORMAL, " %02d | | | | %-10s " _RED_("cannot read"), addr, info[addr]); + } // Update endian for files data[14] = BSWAP_32(data[14]); data[15] = BSWAP_32(data[15]); From ad6632beeef1caf605463541202bab5f3575affd Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Wed, 7 Oct 2020 16:06:05 +0200 Subject: [PATCH 0936/1047] EM4x05 dump: show when lock bits are unknown and show active PR word --- client/src/cmdlfem4x.c | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/client/src/cmdlfem4x.c b/client/src/cmdlfem4x.c index ac49bcc91..c26bd2602 100644 --- a/client/src/cmdlfem4x.c +++ b/client/src/cmdlfem4x.c @@ -951,6 +951,8 @@ static int CmdEM4x05Dump(const char *Cmd) { int success = PM3_SUCCESS; int status; uint32_t lock_bits = 0x00; // no blocks locked + bool gotLockBits = false; + bool lockInPW2 = false; uint32_t word = 0; const char *info[] = {"Info/User", "UID", "Password", "User", "Config", "User", "User", "User", "User", "User", "User", "User", "User", "User", "Lock", "Lock"}; @@ -971,8 +973,10 @@ static int CmdEM4x05Dump(const char *Cmd) { if (status == PM3_SUCCESS) { if (!usePwd) needReadPwd = false; - if (word != 0x00) + if (word != 0x00) { lock_bits = word; + gotLockBits = true; + } data[14] = word; gotWord14 = true; } else { @@ -980,22 +984,26 @@ static int CmdEM4x05Dump(const char *Cmd) { } status = EM4x05ReadWord_ext(15, pwd, usePwd, &word); if (status == PM3_SUCCESS) { - if (word != 0x00) // assume block 15 is the current lock block + if (word != 0x00) { // assume block 15 is the current lock block lock_bits = word; + gotLockBits = true; + lockInPW2 = true; + } data[15] = word; gotWord15 = true; } else { success = PM3_ESOFT; // If any error ensure fail is set so not to save invalid data } + uint32_t lockbit; // Now read blocks 0 - 13 as we have 14 and 15 for (; addr < 14; addr++) { - + lockbit = (lock_bits >> addr) & 1; if (addr == 2) { if (usePwd) { if ((needReadPwd) && (success != PM3_ESOFT)) { data[addr] = BSWAP_32(pwd); num_to_bytes(pwd, 4, bytes); - PrintAndLogEx(NORMAL, " %02u | %08X | %s | %s | %s", addr, pwd, sprint_ascii(bytes, 4), ((lock_bits >> addr) & 1) ? _RED_("x") : " ", info[addr]); + PrintAndLogEx(NORMAL, " %02u | %08X | %s | %s | %s", addr, pwd, sprint_ascii(bytes, 4), gotLockBits ? (lockbit ? _RED_("x") : " ") : _YELLOW_("?"), info[addr]); } else { // The pwd is not needed for Login so we're not sure what's the actual content of that block PrintAndLogEx(NORMAL, " %02u | | | | %-10s " _RED_("cannot read"), addr, info[addr]); @@ -1012,7 +1020,7 @@ static int CmdEM4x05Dump(const char *Cmd) { data[addr] = BSWAP_32(word); if (status == PM3_SUCCESS) { num_to_bytes(word, 4, bytes); - PrintAndLogEx(NORMAL, " %02u | %08X | %s | %s | %s", addr, word, sprint_ascii(bytes, 4), ((lock_bits >> addr) & 1) ? _RED_("x") : " ", info[addr]); + PrintAndLogEx(NORMAL, " %02u | %08X | %s | %s | %s", addr, word, sprint_ascii(bytes, 4), gotLockBits ? (lockbit ? _RED_("x") : " ") : _YELLOW_("?"), info[addr]); } else PrintAndLogEx(NORMAL, " %02u | | | | %-10s " _RED_("cannot read"), addr, info[addr]); } @@ -1021,13 +1029,15 @@ static int CmdEM4x05Dump(const char *Cmd) { // Both lock bits are protected with bit idx 14 (special case) if (gotWord14) { addr = 14; - PrintAndLogEx(NORMAL, " %02u | %08X | %s | %s | %s", addr, data[addr], sprint_ascii(bytes, 4), ((lock_bits >> 14) & 1) ? _RED_("x") : " ", info[addr]); + lockbit = (lock_bits >> addr) & 1; + PrintAndLogEx(NORMAL, " %02u | %08X | %s | %s | %-10s %s", addr, data[addr], sprint_ascii(bytes, 4), gotLockBits ? (lockbit ? _RED_("x") : " ") : _YELLOW_("?"), info[addr], lockInPW2 ? "" : _GREEN_("active")); } else { PrintAndLogEx(NORMAL, " %02u | | | | %-10s " _RED_("cannot read"), addr, info[addr]); } if (gotWord15) { - addr = 15; // beware lock bit of word15 is pr14 - PrintAndLogEx(NORMAL, " %02d | %08X | %s | %s | %s", addr, data[addr], sprint_ascii(bytes, 4), ((lock_bits >> 14) & 1) ? _RED_("x") : " ", info[addr]); + addr = 15; + lockbit = (lock_bits >> 14) & 1; // beware lock bit of word15 is pr14 + PrintAndLogEx(NORMAL, " %02d | %08X | %s | %s | %-10s %s", addr, data[addr], sprint_ascii(bytes, 4), gotLockBits ? (lockbit ? _RED_("x") : " ") : _YELLOW_("?"), info[addr], lockInPW2 ? _GREEN_("active") : ""); } else { PrintAndLogEx(NORMAL, " %02d | | | | %-10s " _RED_("cannot read"), addr, info[addr]); } From 9962b8769abb457454fd9cd9759b1439713caf40 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Wed, 7 Oct 2020 18:38:47 +0200 Subject: [PATCH 0937/1047] EM4x05: add support for Protect command --- armsrc/appmain.c | 10 ++++++ armsrc/lfops.c | 41 +++++++++++++++++++++-- armsrc/lfops.h | 1 + client/src/cmdlfem4x.c | 74 ++++++++++++++++++++++++++++-------------- include/pm3_cmd.h | 1 + 5 files changed, 100 insertions(+), 27 deletions(-) diff --git a/armsrc/appmain.c b/armsrc/appmain.c index 2c6ace8ee..482d126a4 100644 --- a/armsrc/appmain.c +++ b/armsrc/appmain.c @@ -954,6 +954,16 @@ static void PacketReceived(PacketCommandNG *packet) { EM4xWriteWord(payload->address, payload->data, payload->password, payload->usepwd); break; } + case CMD_LF_EM4X_PROTECTWORD: { + struct p { + uint32_t password; + uint32_t data; + uint8_t usepwd; + } PACKED; + struct p *payload = (struct p *) packet->data.asBytes; + EM4xProtectWord(payload->data, payload->password, payload->usepwd); + break; + } case CMD_LF_AWID_WATCH: { uint32_t high, low; int res = lf_awid_watch(0, &high, &low); diff --git a/armsrc/lfops.c b/armsrc/lfops.c index b68e54bbc..b2126fc76 100644 --- a/armsrc/lfops.c +++ b/armsrc/lfops.c @@ -2369,6 +2369,7 @@ int copy_em410x_to_t55xx(uint8_t card, uint8_t clock, uint32_t id_hi, uint32_t i #define FWD_CMD_LOGIN 0xC #define FWD_CMD_WRITE 0xA #define FWD_CMD_READ 0x9 +#define FWD_CMD_PROTECT 0x3 #define FWD_CMD_DISABLE 0x5 static uint8_t forwardLink_data[64]; //array of forwarded bits @@ -2573,9 +2574,9 @@ void EM4xWriteWord(uint8_t addr, uint32_t data, uint32_t pwd, uint8_t usepwd) { SendForward(len); // Wait 20ms for write to complete? - WaitMS(7); + WaitUS(10820); // tPC+tWEE - DoPartialAcquisition(20, false, 6000, 1000); + DoPartialAcquisition(0, false, 6000, 1000); StopTicks(); FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); @@ -2583,6 +2584,42 @@ void EM4xWriteWord(uint8_t addr, uint32_t data, uint32_t pwd, uint8_t usepwd) { LEDsoff(); } +void EM4xProtectWord(uint32_t data, uint32_t pwd, uint8_t usepwd) { + + StartTicks(); + FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); + WaitMS(50); + + LED_A_ON(); + + // clear buffer now so it does not interfere with timing later + BigBuf_Clear_ext(false); + + /* should we read answer from Logincommand? + * + * should receive + * 0000 1010 ok. + * 0000 0001 fail + **/ + if (usepwd) EM4xLogin(pwd); + + forward_ptr = forwardLink_data; + uint8_t len = Prepare_Cmd(FWD_CMD_PROTECT); + len += Prepare_Data(data & 0xFFFF, data >> 16); + + SendForward(len); + + // Wait 20ms for write to complete? + WaitUS(13640); // tPC+tPR + + DoPartialAcquisition(0, false, 6000, 1000); + + StopTicks(); + FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); + reply_ng(CMD_LF_EM4X_PROTECTWORD, PM3_SUCCESS, NULL, 0); + LEDsoff(); +} + /* Reading COTAG. diff --git a/armsrc/lfops.h b/armsrc/lfops.h index 0ac8066af..1c191d65d 100644 --- a/armsrc/lfops.h +++ b/armsrc/lfops.h @@ -58,6 +58,7 @@ void TurnReadLFOn(uint32_t delay); void EM4xReadWord(uint8_t addr, uint32_t pwd, uint8_t usepwd); void EM4xWriteWord(uint8_t addr, uint32_t data, uint32_t pwd, uint8_t usepwd); +void EM4xProtectWord(uint32_t data, uint32_t pwd, uint8_t usepwd); void Cotag(uint32_t arg0); void setT55xxConfig(uint8_t arg0, t55xx_configurations_t *c); diff --git a/client/src/cmdlfem4x.c b/client/src/cmdlfem4x.c index c26bd2602..aa15c1fe9 100644 --- a/client/src/cmdlfem4x.c +++ b/client/src/cmdlfem4x.c @@ -164,7 +164,7 @@ static int usage_lf_em4x05_write(void) { PrintAndLogEx(NORMAL, "Usage: lf em 4x05_write [h]

"); PrintAndLogEx(NORMAL, "Options:"); PrintAndLogEx(NORMAL, " h - this help"); - PrintAndLogEx(NORMAL, " address - memory address to write to. (0-15)"); + PrintAndLogEx(NORMAL, " address - memory address to write to. (0-13, 99 for Protection Words)"); PrintAndLogEx(NORMAL, " data - data to write (hex)"); PrintAndLogEx(NORMAL, " pwd - password (hex) (optional)"); PrintAndLogEx(NORMAL, "Examples:"); @@ -857,7 +857,6 @@ static int demodEM4x05resp(uint32_t *word) { *word = 0; if (detectASK_MAN() && doPreambleSearch(&idx)) return setDemodBufferEM(word, idx); - if (detectASK_BI() && doPreambleSearch(&idx)) return setDemodBufferEM(word, idx); @@ -1101,37 +1100,62 @@ static int CmdEM4x05Write(const char *Cmd) { data = param_get32ex(Cmd, 1, 0, 16); pwd = param_get32ex(Cmd, 2, 0xFFFFFFFF, 16); - if (addr > 15) { - PrintAndLogEx(NORMAL, "Address must be between 0 and 15"); + if ((addr > 13) && (addr != 99)) { + PrintAndLogEx(NORMAL, "Address must be between 0 and 13"); return PM3_EINVARG; } - if (pwd == 0xFFFFFFFF) - PrintAndLogEx(NORMAL, "Writing address %d data %08X", addr, data); - else { + if (pwd == 0xFFFFFFFF) { + if (addr == 99) + PrintAndLogEx(NORMAL, "Writing protection words data %08X", addr, data); + else + PrintAndLogEx(NORMAL, "Writing address %d data %08X", addr, data); + } else { usePwd = true; - PrintAndLogEx(NORMAL, "Writing address %d data %08X using password %08X", addr, data, pwd); + if (addr == 99) + PrintAndLogEx(NORMAL, "Writing protection words data %08X using password %08X", addr, data, pwd); + else + PrintAndLogEx(NORMAL, "Writing address %d data %08X using password %08X", addr, data, pwd); } - struct { - uint32_t password; - uint32_t data; - uint8_t address; - uint8_t usepwd; - } PACKED payload; + if (addr == 99) { // set Protect Words + struct { + uint32_t password; + uint32_t data; + uint8_t usepwd; + } PACKED payload; - payload.password = pwd; - payload.data = data; - payload.address = addr; - payload.usepwd = usePwd; + payload.password = pwd; + payload.data = data; + payload.usepwd = usePwd; - clearCommandBuffer(); - SendCommandNG(CMD_LF_EM4X_WRITEWORD, (uint8_t *)&payload, sizeof(payload)); - PacketResponseNG resp; - if (!WaitForResponseTimeout(CMD_LF_EM4X_WRITEWORD, &resp, 2000)) { - PrintAndLogEx(ERR, "Error occurred, device did not respond during write operation."); - return PM3_ETIMEOUT; + clearCommandBuffer(); + SendCommandNG(CMD_LF_EM4X_PROTECTWORD, (uint8_t *)&payload, sizeof(payload)); + PacketResponseNG resp; + if (!WaitForResponseTimeout(CMD_LF_EM4X_PROTECTWORD, &resp, 2000)) { + PrintAndLogEx(ERR, "Error occurred, device did not respond during write operation."); + return PM3_ETIMEOUT; + } + } else { + struct { + uint32_t password; + uint32_t data; + uint8_t address; + uint8_t usepwd; + } PACKED payload; + + payload.password = pwd; + payload.data = data; + payload.address = addr; + payload.usepwd = usePwd; + + clearCommandBuffer(); + SendCommandNG(CMD_LF_EM4X_WRITEWORD, (uint8_t *)&payload, sizeof(payload)); + PacketResponseNG resp; + if (!WaitForResponseTimeout(CMD_LF_EM4X_WRITEWORD, &resp, 2000)) { + PrintAndLogEx(ERR, "Error occurred, device did not respond during write operation."); + return PM3_ETIMEOUT; + } } - if (!downloadSamplesEM()) return PM3_ENODATA; diff --git a/include/pm3_cmd.h b/include/pm3_cmd.h index 6cacc5ef1..e96c58984 100644 --- a/include/pm3_cmd.h +++ b/include/pm3_cmd.h @@ -486,6 +486,7 @@ typedef struct { #define CMD_LF_PCF7931_WRITE 0x0223 #define CMD_LF_EM4X_READWORD 0x0218 #define CMD_LF_EM4X_WRITEWORD 0x0219 +#define CMD_LF_EM4X_PROTECTWORD 0x021B #define CMD_LF_IO_WATCH 0x021A #define CMD_LF_EM410X_WATCH 0x021C #define CMD_LF_EM4X50_INFO 0x0240 From 3eea2e20bb8e5cb4a5a09d4d559dd75d2db64295 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Wed, 7 Oct 2020 22:50:22 +0200 Subject: [PATCH 0938/1047] askdemod_ext: update startIdx in case of weak demodulation too --- common/lfdemod.c | 1 + 1 file changed, 1 insertion(+) diff --git a/common/lfdemod.c b/common/lfdemod.c index 7b899e99e..b6869ba43 100644 --- a/common/lfdemod.c +++ b/common/lfdemod.c @@ -1663,6 +1663,7 @@ int askdemod_ext(uint8_t *bits, size_t *size, int *clk, int *invert, int maxErr, return errCnt; } + *startIdx = start - (*clk / 2); if (g_debugMode == 2) prnt("DEBUG: (askdemod_ext) Weak wave detected: startIdx %i", *startIdx); int lastBit; //set first clock check - can go negative From f4feaa6a037bfe6cc013bc031b5eeea14da59802 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Wed, 7 Oct 2020 22:51:27 +0200 Subject: [PATCH 0939/1047] EM4x05: capture tag 'error preamble' answer as well --- armsrc/lfops.c | 6 +- client/src/cmddata.c | 1 + client/src/cmdlfem4x.c | 134 +++++++++++++++++++++++++++-------------- 3 files changed, 95 insertions(+), 46 deletions(-) diff --git a/armsrc/lfops.c b/armsrc/lfops.c index b2126fc76..146acf962 100644 --- a/armsrc/lfops.c +++ b/armsrc/lfops.c @@ -2574,7 +2574,8 @@ void EM4xWriteWord(uint8_t addr, uint32_t data, uint32_t pwd, uint8_t usepwd) { SendForward(len); // Wait 20ms for write to complete? - WaitUS(10820); // tPC+tWEE + // No, when write is denied, err preamble comes much sooner + //WaitUS(10820); // tPC+tWEE DoPartialAcquisition(0, false, 6000, 1000); @@ -2610,7 +2611,8 @@ void EM4xProtectWord(uint32_t data, uint32_t pwd, uint8_t usepwd) { SendForward(len); // Wait 20ms for write to complete? - WaitUS(13640); // tPC+tPR + // No, when write is denied, err preamble comes much sooner + //WaitUS(13640); // tPC+tPR DoPartialAcquisition(0, false, 6000, 1000); diff --git a/client/src/cmddata.c b/client/src/cmddata.c index 16bd7f4f8..56d2944fe 100644 --- a/client/src/cmddata.c +++ b/client/src/cmddata.c @@ -544,6 +544,7 @@ static int CmdConvertBitStream(const char *Cmd) { //emSearch will auto search for EM410x format in bitstream //askType switches decode: ask/raw = 0, ask/manchester = 1 int ASKDemod_ext(int clk, int invert, int maxErr, size_t maxLen, bool amplify, bool verbose, bool emSearch, uint8_t askType, bool *stCheck) { + PrintAndLogEx(DEBUG, "DEBUG: (ASKDemod_ext) clk %i invert %i maxErr %i maxLen %zu amplify %i verbose %i emSearch %i askType %i ", clk, invert, maxErr, maxLen, amplify, verbose, emSearch, askType); uint8_t askamp = 0; if (!maxLen) maxLen = pm3_capabilities.bigbuf_size; diff --git a/client/src/cmdlfem4x.c b/client/src/cmdlfem4x.c index aa15c1fe9..677ee5671 100644 --- a/client/src/cmdlfem4x.c +++ b/client/src/cmdlfem4x.c @@ -731,12 +731,12 @@ static bool downloadSamplesEM(void) { } // em_demod -static bool doPreambleSearch(size_t *startIdx) { +static int doPreambleSearch(size_t *startIdx) { // sanity check if (DemodBufferLen < EM_PREAMBLE_LEN) { PrintAndLogEx(DEBUG, "DEBUG: Error - EM4305 demodbuffer too small"); - return false; + return PM3_ESOFT; } // set size to 20 to only test first 14 positions for the preamble @@ -746,10 +746,14 @@ static bool doPreambleSearch(size_t *startIdx) { uint8_t preamble[EM_PREAMBLE_LEN] = {0, 0, 1, 0, 1, 0}; if (!preambleSearchEx(DemodBuffer, preamble, EM_PREAMBLE_LEN, &size, startIdx, true)) { - PrintAndLogEx(DEBUG, "DEBUG: Error - EM4305 preamble not found :: %zu", *startIdx); - return false; + uint8_t errpreamble[EM_PREAMBLE_LEN] = {0, 0, 0, 0, 0, 1}; + if (!preambleSearchEx(DemodBuffer, errpreamble, EM_PREAMBLE_LEN, &size, startIdx, true)) { + PrintAndLogEx(DEBUG, "DEBUG: Error - EM4305 preamble not found :: %zu", *startIdx); + return PM3_ESOFT; + } + return PM3_EFAILED; // Error preamble found } - return true; + return PM3_SUCCESS; } static bool detectFSK(void) { @@ -793,7 +797,7 @@ static bool detectPSK(void) { // try manchester - NOTE: ST only applies to T55x7 tags. static bool detectASK_MAN(void) { bool stcheck = false; - if (ASKDemod_ext(0, 0, 0, 0, false, false, false, 1, &stcheck) != PM3_SUCCESS) { + if (ASKDemod_ext(0, 0, 50, 0, false, false, false, 1, &stcheck) != PM3_SUCCESS) { PrintAndLogEx(DEBUG, "DEBUG: Error - EM: ASK/Manchester Demod failed"); return false; } @@ -852,29 +856,67 @@ static int setDemodBufferEM(uint32_t *word, size_t idx) { // FSK, PSK, ASK/MANCHESTER, ASK/BIPHASE, ASK/DIPHASE, NRZ // should cover 90% of known used configs // the rest will need to be manually demoded for now... -static int demodEM4x05resp(uint32_t *word) { +static int demodEM4x05resp(uint32_t *word, bool onlyPreamble) { size_t idx = 0; *word = 0; - if (detectASK_MAN() && doPreambleSearch(&idx)) - return setDemodBufferEM(word, idx); - if (detectASK_BI() && doPreambleSearch(&idx)) - return setDemodBufferEM(word, idx); + bool found_err = false; + int res = PM3_SUCCESS; + do { + if (detectASK_MAN()) { + res = doPreambleSearch(&idx); + if (res == PM3_SUCCESS) + break; + if (res == PM3_EFAILED) + // go on, maybe it's false positive and another modulation will work + found_err = true; + } + if (detectASK_BI()) { + res = doPreambleSearch(&idx); + if (res == PM3_SUCCESS) + break; + if (res == PM3_EFAILED) + found_err = true; + } + if (detectNRZ()) { + res = doPreambleSearch(&idx); + if (res == PM3_SUCCESS) + break; + if (res == PM3_EFAILED) + found_err = true; + } + if (detectFSK()) { + res = doPreambleSearch(&idx); + if (res == PM3_SUCCESS) + break; + if (res == PM3_EFAILED) + found_err = true; + } + if (detectPSK()) { + res = doPreambleSearch(&idx); + if (res == PM3_SUCCESS) + break; + if (res == PM3_EFAILED) + found_err = true; - if (detectNRZ() && doPreambleSearch(&idx)) - return setDemodBufferEM(word, idx); - - if (detectFSK() && doPreambleSearch(&idx)) - return setDemodBufferEM(word, idx); - - if (detectPSK()) { - if (doPreambleSearch(&idx)) - return setDemodBufferEM(word, idx); - - psk1TOpsk2(DemodBuffer, DemodBufferLen); - if (doPreambleSearch(&idx)) - return setDemodBufferEM(word, idx); - } - return PM3_ESOFT; + psk1TOpsk2(DemodBuffer, DemodBufferLen); + res = doPreambleSearch(&idx); + if (res == PM3_SUCCESS) + break; + if (res == PM3_EFAILED) + found_err = true; + } + if (found_err) + return PM3_EFAILED; + return PM3_ESOFT; + } while (0); + if (onlyPreamble) + return PM3_SUCCESS; + res = setDemodBufferEM(word, idx); + if (res == PM3_SUCCESS) + return res; + if (found_err) + return PM3_EFAILED; + return res; } //////////////// 4205 / 4305 commands @@ -902,14 +944,14 @@ static int EM4x05ReadWord_ext(uint8_t addr, uint32_t pwd, bool usePwd, uint32_t if (downloadSamplesEM() == false) { return PM3_ESOFT; } - return demodEM4x05resp(word); + return demodEM4x05resp(word, false); } static int CmdEM4x05Demod(const char *Cmd) { // uint8_t ctmp = tolower(param_getchar(Cmd, 0)); // if (ctmp == 'h') return usage_lf_em4x05_demod(); - uint32_t word = 0; - return demodEM4x05resp(&word); + uint32_t dummy = 0; + return demodEM4x05resp(&dummy, false); } static int CmdEM4x05Dump(const char *Cmd) { @@ -1069,22 +1111,24 @@ static int CmdEM4x05Read(const char *Cmd) { pwd = param_get32ex(Cmd, 1, 0xFFFFFFFF, 16); if (addr > 15) { - PrintAndLogEx(NORMAL, "Address must be between 0 and 15"); + PrintAndLogEx(WARNING, "Address must be between 0 and 15"); return PM3_ESOFT; } if (pwd == 0xFFFFFFFF) { PrintAndLogEx(NORMAL, "Reading address %02u", addr); } else { usePwd = true; - PrintAndLogEx(NORMAL, "Reading address %02u | password %08X", addr, pwd); + PrintAndLogEx(NORMAL, "Reading address %02u using password %08X", addr, pwd); } uint32_t word = 0; int status = EM4x05ReadWord_ext(addr, pwd, usePwd, &word); if (status == PM3_SUCCESS) - PrintAndLogEx(NORMAL, "Address %02d | %08X - %s", addr, word, (addr > 13) ? "Lock" : ""); + PrintAndLogEx(SUCCESS, "Address %02d | %08X - %s", addr, word, (addr > 13) ? "Lock" : ""); + else if (status == PM3_EFAILED) + PrintAndLogEx(ERR, "Tag denied Read operation"); else - PrintAndLogEx(NORMAL, "Read Address %02d | " _RED_("Fail"), addr); + PrintAndLogEx(WARNING, "No answer from tag"); return status; } @@ -1099,25 +1143,26 @@ static int CmdEM4x05Write(const char *Cmd) { addr = param_get8ex(Cmd, 0, 50, 10); data = param_get32ex(Cmd, 1, 0, 16); pwd = param_get32ex(Cmd, 2, 0xFFFFFFFF, 16); + bool protectOperation = addr == 99; // will do better with cliparser... - if ((addr > 13) && (addr != 99)) { - PrintAndLogEx(NORMAL, "Address must be between 0 and 13"); + if ((addr > 13) && (!protectOperation)) { + PrintAndLogEx(WARNING, "Address must be between 0 and 13"); return PM3_EINVARG; } if (pwd == 0xFFFFFFFF) { - if (addr == 99) - PrintAndLogEx(NORMAL, "Writing protection words data %08X", addr, data); + if (protectOperation) + PrintAndLogEx(NORMAL, "Writing protection words data %08X", data); else PrintAndLogEx(NORMAL, "Writing address %d data %08X", addr, data); } else { usePwd = true; - if (addr == 99) - PrintAndLogEx(NORMAL, "Writing protection words data %08X using password %08X", addr, data, pwd); + if (protectOperation) + PrintAndLogEx(NORMAL, "Writing protection words data %08X using password %08X", data, pwd); else PrintAndLogEx(NORMAL, "Writing address %d data %08X using password %08X", addr, data, pwd); } - if (addr == 99) { // set Protect Words + if (protectOperation) { // set Protect Words struct { uint32_t password; uint32_t data; @@ -1159,13 +1204,14 @@ static int CmdEM4x05Write(const char *Cmd) { if (!downloadSamplesEM()) return PM3_ENODATA; - //need 0 bits demoded (after preamble) to verify write cmd uint32_t dummy = 0; - int status = demodEM4x05resp(&dummy); + int status = demodEM4x05resp(&dummy, true); if (status == PM3_SUCCESS) PrintAndLogEx(SUCCESS, "Success writing to tag"); - - PrintAndLogEx(SUCCESS, "Done"); + else if (status == PM3_EFAILED) + PrintAndLogEx(ERR, "Tag denied %s operation", protectOperation ? "Protect" : "Write"); + else + PrintAndLogEx(WARNING, "No answer from tag"); PrintAndLogEx(HINT, "Hint: try " _YELLOW_("`lf em 4x05_read`") " to verify"); return status; } From 1d8c268b8bfc290a586209cdb4247829778ce9ca Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Wed, 7 Oct 2020 23:16:54 +0200 Subject: [PATCH 0940/1047] EM4x05: don't mark first pages as RO, textual --- client/src/cmdlfem4x.c | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/client/src/cmdlfem4x.c b/client/src/cmdlfem4x.c index 677ee5671..5f9e188ef 100644 --- a/client/src/cmdlfem4x.c +++ b/client/src/cmdlfem4x.c @@ -1444,11 +1444,13 @@ static void printEM4x05info(uint32_t block0, uint32_t serial) { PrintAndLogEx(SUCCESS, "\n Serial #: " _YELLOW_("%08X"), serial); } -static void printEM4x05ProtectionBits(uint32_t word) { +static void printEM4x05ProtectionBits(uint32_t word, uint8_t addr) { + PrintAndLogEx(INFO, "ProtectionWord: %08X (Word %i)\n", word, addr); + PrintAndLogEx(INFO, "Protection Breakdown:"); for (uint8_t i = 0; i < 15; i++) { - PrintAndLogEx(INFO, " Word: %02u | %s", i, (((1 << i) & word) || i < 2) ? _RED_("write Locked") : "unlocked"); + PrintAndLogEx(INFO, " Word: %02u | %s", i, ((1 << i) & word) ? _RED_("write Locked") : "unlocked"); if (i == 14) - PrintAndLogEx(INFO, " Word: %02u | %s", i + 1, (((1 << i) & word) || i < 2) ? _RED_("write locked") : "unlocked"); + PrintAndLogEx(INFO, " Word: %02u | %s", i + 1, ((1 << i) & word) ? _RED_("write locked") : "unlocked"); } } @@ -1495,19 +1497,19 @@ static int CmdEM4x05Info(const char *Cmd) { if (EM4x05ReadWord_ext(EM_PROT1_BLOCK, pwd, usePwd, &word) != PM3_SUCCESS) { return PM3_ESOFT; } - // if status bit says this is not the used protection word - if (!(word & 0x8000)) { + if (word & 0x8000) { + printEM4x05ProtectionBits(word, EM_PROT1_BLOCK); + return PM3_SUCCESS; + } else { // if status bit says this is not the used protection word if (EM4x05ReadWord_ext(EM_PROT2_BLOCK, pwd, usePwd, &word) != PM3_SUCCESS) return PM3_ESOFT; + if (word & 0x8000) { + printEM4x05ProtectionBits(word, EM_PROT2_BLOCK); + return PM3_SUCCESS; + } } - //something went wrong - if (!(word & 0x8000)) - return PM3_ESOFT; - - printEM4x05ProtectionBits(word); - - return PM3_SUCCESS; + return PM3_ESOFT; } static command_t CommandTable[] = { From 229da561d62ce9f42e8cd40a41264249e59d7c91 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Wed, 7 Oct 2020 23:48:14 +0200 Subject: [PATCH 0941/1047] EM4x05: avoid false positives in preamble detection --- client/src/cmdlfem4x.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/client/src/cmdlfem4x.c b/client/src/cmdlfem4x.c index 5f9e188ef..a525807c1 100644 --- a/client/src/cmdlfem4x.c +++ b/client/src/cmdlfem4x.c @@ -739,8 +739,9 @@ static int doPreambleSearch(size_t *startIdx) { return PM3_ESOFT; } - // set size to 20 to only test first 14 positions for the preamble - size_t size = (20 > DemodBufferLen) ? DemodBufferLen : 20; + // set size to 9 to only test first 3 positions for the preamble + // do not set it too long else an error preamble followed by 010 could be seen as success. + size_t size = (9 > DemodBufferLen) ? DemodBufferLen : 9; *startIdx = 0; // skip first two 0 bits as they might have been missed in the demod uint8_t preamble[EM_PREAMBLE_LEN] = {0, 0, 1, 0, 1, 0}; From a0a7a3960e5aa58464daf5995537f65c40ed0210 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Wed, 7 Oct 2020 23:48:49 +0200 Subject: [PATCH 0942/1047] EN4x05 dump: show reason of read fails --- client/src/cmdlfem4x.c | 30 +++++++++++++----------------- 1 file changed, 13 insertions(+), 17 deletions(-) diff --git a/client/src/cmdlfem4x.c b/client/src/cmdlfem4x.c index a525807c1..cdc3056aa 100644 --- a/client/src/cmdlfem4x.c +++ b/client/src/cmdlfem4x.c @@ -960,8 +960,6 @@ static int CmdEM4x05Dump(const char *Cmd) { uint32_t pwd = 0; bool usePwd = false; bool needReadPwd = true; - bool gotWord14 = false; - bool gotWord15 = false; uint8_t cmdp = 0; uint8_t bytes[4] = {0}; uint32_t data[16]; @@ -991,7 +989,7 @@ static int CmdEM4x05Dump(const char *Cmd) { } int success = PM3_SUCCESS; - int status; + int status, status14, status15; uint32_t lock_bits = 0x00; // no blocks locked bool gotLockBits = false; bool lockInPW2 = false; @@ -1011,8 +1009,8 @@ static int CmdEM4x05Dump(const char *Cmd) { // To flag any blocks locked we need to read blocks 14 and 15 first // dont swap endin until we get block lock flags. - status = EM4x05ReadWord_ext(14, pwd, usePwd, &word); - if (status == PM3_SUCCESS) { + status14 = EM4x05ReadWord_ext(14, pwd, usePwd, &word); + if (status14 == PM3_SUCCESS) { if (!usePwd) needReadPwd = false; if (word != 0x00) { @@ -1020,19 +1018,17 @@ static int CmdEM4x05Dump(const char *Cmd) { gotLockBits = true; } data[14] = word; - gotWord14 = true; } else { success = PM3_ESOFT; // If any error ensure fail is set so not to save invalid data } - status = EM4x05ReadWord_ext(15, pwd, usePwd, &word); - if (status == PM3_SUCCESS) { + status15 = EM4x05ReadWord_ext(15, pwd, usePwd, &word); + if (status15 == PM3_SUCCESS) { if (word != 0x00) { // assume block 15 is the current lock block lock_bits = word; gotLockBits = true; lockInPW2 = true; } data[15] = word; - gotWord15 = true; } else { success = PM3_ESOFT; // If any error ensure fail is set so not to save invalid data } @@ -1048,11 +1044,11 @@ static int CmdEM4x05Dump(const char *Cmd) { PrintAndLogEx(NORMAL, " %02u | %08X | %s | %s | %s", addr, pwd, sprint_ascii(bytes, 4), gotLockBits ? (lockbit ? _RED_("x") : " ") : _YELLOW_("?"), info[addr]); } else { // The pwd is not needed for Login so we're not sure what's the actual content of that block - PrintAndLogEx(NORMAL, " %02u | | | | %-10s " _RED_("cannot read"), addr, info[addr]); + PrintAndLogEx(NORMAL, " %02u | | | | %-10s " _YELLOW_("write only"), addr, info[addr]); } } else { data[addr] = 0x00; // Unknown password, but not used to set to zeros - PrintAndLogEx(NORMAL, " %02u | | | | %-10s " _RED_("cannot read"), addr, info[addr]); + PrintAndLogEx(NORMAL, " %02u | | | | %-10s " _YELLOW_("write only"), addr, info[addr]); } } else { // success &= EM4x05ReadWord_ext(addr, pwd, usePwd, &word); @@ -1064,24 +1060,24 @@ static int CmdEM4x05Dump(const char *Cmd) { num_to_bytes(word, 4, bytes); PrintAndLogEx(NORMAL, " %02u | %08X | %s | %s | %s", addr, word, sprint_ascii(bytes, 4), gotLockBits ? (lockbit ? _RED_("x") : " ") : _YELLOW_("?"), info[addr]); } else - PrintAndLogEx(NORMAL, " %02u | | | | %-10s " _RED_("cannot read"), addr, info[addr]); + PrintAndLogEx(NORMAL, " %02u | | | | %-10s %s", addr, info[addr], status == PM3_EFAILED ? _RED_("read denied") : _RED_("read failed")); } } // Print blocks 14 and 15 // Both lock bits are protected with bit idx 14 (special case) - if (gotWord14) { + if (status14 == PM3_SUCCESS) { addr = 14; lockbit = (lock_bits >> addr) & 1; PrintAndLogEx(NORMAL, " %02u | %08X | %s | %s | %-10s %s", addr, data[addr], sprint_ascii(bytes, 4), gotLockBits ? (lockbit ? _RED_("x") : " ") : _YELLOW_("?"), info[addr], lockInPW2 ? "" : _GREEN_("active")); } else { - PrintAndLogEx(NORMAL, " %02u | | | | %-10s " _RED_("cannot read"), addr, info[addr]); + PrintAndLogEx(NORMAL, " %02u | | | | %-10s %s", addr, info[addr], status14 == PM3_EFAILED ? _RED_("read denied") : _RED_("read failed")); } - if (gotWord15) { + if (status15 == PM3_SUCCESS) { addr = 15; lockbit = (lock_bits >> 14) & 1; // beware lock bit of word15 is pr14 - PrintAndLogEx(NORMAL, " %02d | %08X | %s | %s | %-10s %s", addr, data[addr], sprint_ascii(bytes, 4), gotLockBits ? (lockbit ? _RED_("x") : " ") : _YELLOW_("?"), info[addr], lockInPW2 ? _GREEN_("active") : ""); + PrintAndLogEx(NORMAL, " %02u | %08X | %s | %s | %-10s %s", addr, data[addr], sprint_ascii(bytes, 4), gotLockBits ? (lockbit ? _RED_("x") : " ") : _YELLOW_("?"), info[addr], lockInPW2 ? _GREEN_("active") : ""); } else { - PrintAndLogEx(NORMAL, " %02d | | | | %-10s " _RED_("cannot read"), addr, info[addr]); + PrintAndLogEx(NORMAL, " %02u | | | | %-10s %s", addr, info[addr], status15 == PM3_EFAILED ? _RED_("read denied") : _RED_("read failed")); } // Update endian for files data[14] = BSWAP_32(data[14]); From 543393f7f883bedbcf83f29a743277defa854657 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Thu, 8 Oct 2020 09:49:39 +0200 Subject: [PATCH 0943/1047] fix EM4205 detection --- client/src/cmdlfem4x.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/client/src/cmdlfem4x.c b/client/src/cmdlfem4x.c index cdc3056aa..316964872 100644 --- a/client/src/cmdlfem4x.c +++ b/client/src/cmdlfem4x.c @@ -1402,15 +1402,12 @@ static void printEM4x05info(uint32_t block0, uint32_t serial) { case 9: snprintf(ctstr + strlen(ctstr), sizeof(ctstr) - strlen(ctstr), _YELLOW_("%s"), "EM4305"); break; - case 8: - snprintf(ctstr + strlen(ctstr), sizeof(ctstr) - strlen(ctstr), _YELLOW_("%s"), "EM4205"); - break; - case 4: - snprintf(ctstr + strlen(ctstr), sizeof(ctstr) - strlen(ctstr), _YELLOW_("%s"), "Unknown"); - break; case 2: snprintf(ctstr + strlen(ctstr), sizeof(ctstr) - strlen(ctstr), _YELLOW_("%s"), "EM4469"); break; + case 1: + snprintf(ctstr + strlen(ctstr), sizeof(ctstr) - strlen(ctstr), _YELLOW_("%s"), "EM4205"); + break; //add more here when known default: snprintf(ctstr + strlen(ctstr), sizeof(ctstr) - strlen(ctstr), _YELLOW_("%s"), "Unknown"); From bd6effd980b18802bda311c891fc684b1b17db57 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Thu, 8 Oct 2020 09:50:17 +0200 Subject: [PATCH 0944/1047] Don't save prefs in incognito mode --- client/src/preferences.c | 4 ++-- client/src/proxmark3.c | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/client/src/preferences.c b/client/src/preferences.c index 5c5431d83..414797cac 100644 --- a/client/src/preferences.c +++ b/client/src/preferences.c @@ -12,7 +12,7 @@ // Add the new setting to the session_arg_t; in ui.h // Add the default value for the setting in the settings_load page below // Update the preferences_load_callback to load your setting into the stucture -// Update the preferences_save_callback to enusre your setting gets saved when needed. +// Update the preferences_save_callback to ensure your setting gets saved when needed. // use the preference as needed : session. // Can use (session.preferences_loaded) to check if json settings file was used //----------------------------------------------------------------------------- @@ -709,7 +709,7 @@ static int setCmdDeviceDebug (const char *Cmd) showDeviceDebugState (prefShowOLD); session.device_debug_level = newValue; showDeviceDebugState (prefShowNEW); - preferences_save (); + preferences_save(); } else { PrintAndLogEx(INFO,"nothing changed"); showDeviceDebugState (prefShowNone); diff --git a/client/src/proxmark3.c b/client/src/proxmark3.c index 92d2e36c6..3a1500de4 100644 --- a/client/src/proxmark3.c +++ b/client/src/proxmark3.c @@ -1020,7 +1020,7 @@ int main(int argc, char *argv[]) { // Save settings if not loaded from settings json file. // Doing this here will ensure other checks and updates are saved to over rule default // e.g. Linux color use check - if (!session.preferences_loaded) { + if ((!session.preferences_loaded) && (!session.incognito)) { PrintAndLogEx(INFO, "Creating initial preferences file"); // json save reports file name, so just info msg here preferences_save(); // Save defaults session.preferences_loaded = true; From 12fd83b5a1afeea2ea34497106d8c1546f4a2a99 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Thu, 8 Oct 2020 09:52:33 +0200 Subject: [PATCH 0945/1047] incognito: text --- client/src/proxmark3.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/src/proxmark3.c b/client/src/proxmark3.c index 3a1500de4..9541314aa 100644 --- a/client/src/proxmark3.c +++ b/client/src/proxmark3.c @@ -569,7 +569,7 @@ static void show_help(bool showFullHelp, char *exec_name) { PrintAndLogEx(NORMAL, " -l/--lua execute lua script."); PrintAndLogEx(NORMAL, " -s/--script-file script file with one Proxmark3 command per line"); PrintAndLogEx(NORMAL, " -i/--interactive enter interactive mode after executing the script or the command"); - PrintAndLogEx(NORMAL, " --incognito do not use history nor log files"); + PrintAndLogEx(NORMAL, " --incognito do not use history, prefs file nor log files"); PrintAndLogEx(NORMAL, "\nOptions in flasher mode:"); PrintAndLogEx(NORMAL, " --flash flash Proxmark3, requires at least one --image"); PrintAndLogEx(NORMAL, " --unlock-bootloader Enable flashing of bootloader area *DANGEROUS* (need --flash or --flash-info)"); From 8fbe3b446358d220f916246ee06b35df8f8f5685 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Thu, 8 Oct 2020 10:06:05 +0200 Subject: [PATCH 0946/1047] incognito: make sure prefs file is not loaded/saved in any circumstances --- client/src/preferences.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/client/src/preferences.c b/client/src/preferences.c index 414797cac..5b5b9bee9 100644 --- a/client/src/preferences.c +++ b/client/src/preferences.c @@ -79,6 +79,11 @@ int preferences_load(void) { setDefaultPath (spTrace, "."); */ + if (session.incognito) { + PrintAndLogEx(INFO, "No preferences file will be loaded"); + return PM3_SUCCESS; + } + // loadFileJson wants these, so pass in place holder values, though not used // in settings load; uint8_t dummyData = 0x00; @@ -101,7 +106,10 @@ int preferences_load(void) { // Save all settings from memory (struct) to file int preferences_save(void) { // Note sure if backup has value ? - + if (session.incognito) { + PrintAndLogEx(INFO, "No preferences file will be saved"); + return PM3_SUCCESS; + } PrintAndLogEx(INFO, "Saving preferences..."); char *fn = prefGetFilename(); @@ -986,8 +994,7 @@ static int CmdPrefShow(const char *Cmd) { PrintAndLogEx(INFO, "Using "_YELLOW_("%s"), fn); free(fn); } else { - PrintAndLogEx(ERR, "Preferences not loaded"); - return PM3_ESOFT; + PrintAndLogEx(WARNING, "Preferences file not loaded"); } PrintAndLogEx(INFO, "Current settings"); From 9162a9d5f06fd173d2ebb2025965837d80956034 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 8 Oct 2020 20:26:46 +0200 Subject: [PATCH 0947/1047] lf hic clone - now use cliparse and support FC,CN and RAW --- armsrc/appmain.c | 3 +- client/src/cmdlfhid.c | 131 ++++++++++++++++++++++++++---------------- 2 files changed, 83 insertions(+), 51 deletions(-) diff --git a/armsrc/appmain.c b/armsrc/appmain.c index 482d126a4..e7eb0ac99 100644 --- a/armsrc/appmain.c +++ b/armsrc/appmain.c @@ -827,7 +827,8 @@ static void PacketReceived(PacketCommandNG *packet) { break; } case CMD_LF_HID_CLONE: { - CopyHIDtoT55x7(packet->oldarg[0], packet->oldarg[1], packet->oldarg[2], packet->data.asBytes[0]); + lf_hidsim_t *payload = (lf_hidsim_t *)packet->data.asBytes; + CopyHIDtoT55x7(payload->hi2, payload->hi, payload->lo, payload->longFMT); break; } case CMD_LF_IO_WATCH: { diff --git a/client/src/cmdlfhid.c b/client/src/cmdlfhid.c index 54a650943..bd04ba6e7 100644 --- a/client/src/cmdlfhid.c +++ b/client/src/cmdlfhid.c @@ -213,6 +213,10 @@ static int CmdHIDSim(const char *Cmd) { CLIGetHexWithReturn(ctx, 2, id, &idlen); CLIParserFree(ctx); + + wiegand_message_t packed = initialize_message_object(hi2, hi, lo); + HIDTryUnpack(&packed, false); + if (long_id) { for (i = 0; i < idlen; ++i) { @@ -255,59 +259,86 @@ static int CmdHIDSim(const char *Cmd) { } static int CmdHIDClone(const char *Cmd) { - int idlen = 0; - uint8_t id[10] = {0}; - uint32_t hi2 = 0, hi = 0, lo = 0, i = 0; CLIParserContext *ctx; CLIParserInit(&ctx, "lf hid clone", "Clone HID to T55x7. Tag must be on antenna!", - "lf hid clone 2006ec0c86 -> HID 10301 26 bit\n" - "lf hid clone 2e0ec00c87 -> HID Corporate 35 bit\n" - "lf hid clone -l 01f0760643c3 -> HID P10001 40 bit\n" - "lf hid clone -l 01400076000c86 -> HID Corporate 48 bit" + "lf hid clone -r 2006ec0c86 -> HID 10301 26 bit\n" + "lf hid clone -r 2e0ec00c87 -> HID Corporate 35 bit\n" + "lf hid clone -r 01f0760643c3 -> HID P10001 40 bit\n" + "lf hid clone -r 01400076000c86 -> HID Corporate 48 bit\n" + "lf hid clone -w H10301 --fc 118 --cn 1603 -> HID 10301 26 bit\n" ); + void *argtable[] = { arg_param_begin, - arg_lit0("l", "long", "84bit HID long ID"), - arg_str1(NULL, NULL, "", "HID tag ID"), + arg_str0("w", "wiegand", "", "see " _YELLOW_("`wiegand list`") " for available formats"), + arg_u64_0(NULL, "fc", "", "facility code"), + arg_u64_0(NULL, "cn", "", "card number"), + arg_int0("i", NULL, "", "issue level"), + arg_int0("o", "oem", "", "OEM code"), + arg_strx0("r", "raw", "", "raw bytes"), +// arg_lit0("q", "Q5", "optional - specify writing to Q5/T5555 tag"), arg_param_end }; CLIExecWithReturn(ctx, Cmd, argtable, false); - bool long_id = arg_get_lit(ctx, 1); - CLIGetHexWithReturn(ctx, 2, id, &idlen); - CLIParserFree(ctx); - uint8_t longid[1] = {0}; - - if (long_id) { - for (i = 0; i < idlen; ++i) { - hi2 = (hi2 << 4) | (hi >> 28); - hi = (hi << 4) | (lo >> 28); - lo = (lo << 4) | (id[i] >> 4); //get first 4 bits - - hi2 = (hi2 << 4) | (hi >> 28); - hi = (hi << 4) | (lo >> 28); - lo = (lo << 4) | (id[i] & 0xf); //get last 4 bits - } - PrintAndLogEx(INFO, "Preparing to clone HID tag with long ID: " _GREEN_("%x%08x%08x"), hi2, hi, lo); - - longid[0] = 1; - } else { - for (i = 0; i < idlen; ++i) { - hi = (hi << 4) | (lo >> 28); - lo = (lo << 4) | (id[i] >> 4); //get first 4 bits - - hi = (hi << 4) | (lo >> 28); - lo = (lo << 4) | (id[i] & 0xf); //get last 4 bits - } - PrintAndLogEx(INFO, "Preparing to clone HID tag with ID: " _GREEN_("%x%08x"), hi, lo); - hi2 = 0; + char format[16] = {0}; + int format_len = 0; + CLIParamStrToBuf(arg_get_str(ctx, 1), (uint8_t *)format, sizeof(format), &format_len); + + wiegand_card_t card; + memset(&card, 0, sizeof(wiegand_card_t)); + card.FacilityCode = arg_get_u32_def(ctx, 2, 0); + card.CardNumber = arg_get_u32_def(ctx, 3, 0); + card.IssueLevel = arg_get_u32_def(ctx, 4, 0); + card.OEM = arg_get_u32_def(ctx, 5, 0); + + int raw_len = 0; + char raw[40] = {0}; + CLIParamStrToBuf(arg_get_str(ctx, 6), (uint8_t *)raw, sizeof(raw), &raw_len); + if (raw_len > 0) { + PrintAndLogEx(INFO, "RAW %s", raw); } + //bool q5 = arg_get_lit(ctx, 7); + CLIParserFree(ctx); + + wiegand_message_t packed; + memset(&packed, 0, sizeof(wiegand_message_t)); + + // format validation + int format_idx = HIDFindCardFormat((char *)format); + if (format_idx == -1 && raw_len == 0) { + PrintAndLogEx(WARNING, "Unknown format: " _YELLOW_("%s"), format); + return PM3_EINVARG; + } + + if (raw_len) { + uint32_t top = 0, mid = 0, bot = 0; + hexstring_to_u96(&top, &mid, &bot, raw); + packed.Top = top; + packed.Mid = mid; + packed.Bot = bot; + } else { + if (HIDPack(format_idx, &card, &packed) == false) { + PrintAndLogEx(WARNING, "The card data could not be encoded in the selected format."); + return PM3_ESOFT; + } + } + + PrintAndLogEx(INFO, "Preparing to clone HID tag"); + HIDTryUnpack(&packed, false); + + lf_hidsim_t payload; + payload.hi2 = packed.Top; + payload.hi = packed.Mid; + payload.lo = packed.Bot; + payload.longFMT = (packed.Mid > 0xFFF); + clearCommandBuffer(); - SendCommandMIX(CMD_LF_HID_CLONE, hi2, hi, lo, longid, sizeof(longid)); + SendCommandNG(CMD_LF_HID_CLONE, (uint8_t *)&payload, sizeof(payload)); PrintAndLogEx(SUCCESS, "Done"); PrintAndLogEx(HINT, "Hint: try " _YELLOW_("`lf hid read`") " to verify"); return PM3_SUCCESS; @@ -344,22 +375,22 @@ static int CmdHIDBrute(const char *Cmd) { "Enables bruteforce of HID readers with specified facility code.\n" "This is a attack against reader. if cardnumber is given, it starts with it and goes up / down one step\n" "if cardnumber is not given, it starts with 1 and goes up to 65535", - "lf hid brute -w H10301 -f 224\n" - "lf hid brute -w H10301 -f 21 -d 2000\n" - "lf hid brute -v -w H10301 -f 21 -c 200 -d 2000\n" + "lf hid brute -w H10301 --fc 224\n" + "lf hid brute -w H10301 --fc 21 -d 2000\n" + "lf hid brute -v -w H10301 --fc 21 --cn 200 -d 2000\n" ); void *argtable[] = { arg_param_begin, - arg_lit0("v", "verbose", "verbose logging, show all tries"), - arg_str1("w", "wiegand", "format", "see " _YELLOW_("`wiegand list`") " for available formats"), - arg_int0("f", "fn", "dec", "facility code"), - arg_int0("c", "cn", "dec", "card number to start with"), - arg_int0("i", NULL, "dec", "issue level"), - arg_int0("o", "oem", "dec", "OEM code"), - arg_int0("d", "delay", "dec", "delay betweens attempts in ms. Default 1000ms"), - arg_lit0(NULL, "up", "direction to increment card number. (default is both directions)"), - arg_lit0(NULL, "down", "direction to decrement card number. (default is both directions)"), + arg_lit0("v", "verbose", "verbose logging, show all tries"), + arg_str1("w", "wiegand", "", "see " _YELLOW_("`wiegand list`") " for available formats"), + arg_int0(NULL, "fn", "", "facility code"), + arg_int0(NULL, "cn", "", "card number to start with"), + arg_int0("i", "issue", "", "issue level"), + arg_int0("o", "oem", "", "OEM code"), + arg_int0("d", "delay", "", "delay betweens attempts in ms. Default 1000ms"), + arg_lit0(NULL, "up", "direction to increment card number. (default is both directions)"), + arg_lit0(NULL, "down", "direction to decrement card number. (default is both directions)"), arg_param_end }; CLIExecWithReturn(ctx, Cmd, argtable, false); From a547690af50180bdc8fb81746c0c0c9cf91dc97c Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 8 Oct 2020 20:27:15 +0200 Subject: [PATCH 0948/1047] fix mem leak --- client/src/cmdlfindala.c | 1 + 1 file changed, 1 insertion(+) diff --git a/client/src/cmdlfindala.c b/client/src/cmdlfindala.c index 829cee8d0..58256dbc2 100644 --- a/client/src/cmdlfindala.c +++ b/client/src/cmdlfindala.c @@ -656,6 +656,7 @@ static int CmdIndalaClone(const char *Cmd) { if (getIndalaBits(fc, cn, bits) != PM3_SUCCESS) { PrintAndLogEx(ERR, "Error with tag bitstream generation."); + free(bits); return PM3_ESOFT; } From 3f977043bdb6417c0f06a122dd7786e9470d20a9 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 8 Oct 2020 20:32:45 +0200 Subject: [PATCH 0949/1047] lf hid clone - textual --- client/src/cmdlfhid.c | 11 ++++++----- client/src/wiegand_formats.c | 2 +- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/client/src/cmdlfhid.c b/client/src/cmdlfhid.c index bd04ba6e7..1432ce673 100644 --- a/client/src/cmdlfhid.c +++ b/client/src/cmdlfhid.c @@ -298,9 +298,6 @@ static int CmdHIDClone(const char *Cmd) { int raw_len = 0; char raw[40] = {0}; CLIParamStrToBuf(arg_get_str(ctx, 6), (uint8_t *)raw, sizeof(raw), &raw_len); - if (raw_len > 0) { - PrintAndLogEx(INFO, "RAW %s", raw); - } //bool q5 = arg_get_lit(ctx, 7); CLIParserFree(ctx); @@ -328,8 +325,12 @@ static int CmdHIDClone(const char *Cmd) { } } - PrintAndLogEx(INFO, "Preparing to clone HID tag"); - HIDTryUnpack(&packed, false); + if (raw_len == 0) { + PrintAndLogEx(INFO, "Preparing to clone HID tag"); + HIDTryUnpack(&packed, false); + } else { + PrintAndLogEx(INFO, "Preparing to clone HID tag using raw " _YELLOW_("%s"), raw); + } lf_hidsim_t payload; payload.hi2 = packed.Top; diff --git a/client/src/wiegand_formats.c b/client/src/wiegand_formats.c index 2d62d4cdb..22434862e 100644 --- a/client/src/wiegand_formats.c +++ b/client/src/wiegand_formats.c @@ -708,7 +708,7 @@ bool HIDTryUnpack(wiegand_message_t *packed, bool ignore_parity) { } ++i; } - if (result == false) { + if (result == false && packed->Length) { PrintAndLogEx(SUCCESS, "Unknown. Bit len %d", packed->Length); } From c5b3443fe63c25caf4f70e5adaa44a24925c2ca9 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 8 Oct 2020 21:46:53 +0200 Subject: [PATCH 0950/1047] lf hid sim - now uses cliparser and --fc, --cn options --- client/src/cmdlfhid.c | 96 ++++++++++++++++++++++++++----------------- doc/cheatsheet.md | 6 ++- 2 files changed, 62 insertions(+), 40 deletions(-) diff --git a/client/src/cmdlfhid.c b/client/src/cmdlfhid.c index 1432ce673..27b475620 100644 --- a/client/src/cmdlfhid.c +++ b/client/src/cmdlfhid.c @@ -187,66 +187,85 @@ static int CmdHIDWatch(const char *Cmd) { } static int CmdHIDSim(const char *Cmd) { - int idlen = 0; - uint8_t id[10] = {0}; - lf_hidsim_t payload; - payload.longFMT = 0; - uint32_t hi2 = 0, hi = 0, lo = 0; - uint32_t i = 0; CLIParserContext *ctx; CLIParserInit(&ctx, "lf hid sim", "Enables simulation of HID card with card number.", - "lf hid sim 2006ec0c86" + "lf hid sim -r 2006ec0c86 -> HID 10301 26 bit\n" + "lf hid sim -r 2e0ec00c87 -> HID Corporate 35 bit\n" + "lf hid sim -r 01f0760643c3 -> HID P10001 40 bit\n" + "lf hid sim -r 01400076000c86 -> HID Corporate 48 bit\n" + "lf hid sim -w H10301 --fc 118 --cn 1603 -> HID 10301 26 bit\n" ); void *argtable[] = { arg_param_begin, - arg_lit0("l", "long", "Simulate HID tag with long ID"), - arg_str1(NULL, NULL, "", "HID tag ID"), + arg_str0("w", "wiegand", "", "see " _YELLOW_("`wiegand list`") " for available formats"), + arg_u64_0(NULL, "fc", "", "facility code"), + arg_u64_0(NULL, "cn", "", "card number"), + arg_int0("i", NULL, "", "issue level"), + arg_int0("o", "oem", "", "OEM code"), + arg_strx0("r", "raw", "", "raw bytes"), +// arg_lit0("q", "Q5", "optional - specify writing to Q5/T5555 tag"), arg_param_end }; CLIExecWithReturn(ctx, Cmd, argtable, false); - bool long_id = arg_get_lit(ctx, 1); - - CLIGetHexWithReturn(ctx, 2, id, &idlen); - - CLIParserFree(ctx); + char format[16] = {0}; + int format_len = 0; + CLIParamStrToBuf(arg_get_str(ctx, 1), (uint8_t *)format, sizeof(format), &format_len); - wiegand_message_t packed = initialize_message_object(hi2, hi, lo); - HIDTryUnpack(&packed, false); + wiegand_card_t card; + memset(&card, 0, sizeof(wiegand_card_t)); + card.FacilityCode = arg_get_u32_def(ctx, 2, 0); + card.CardNumber = arg_get_u32_def(ctx, 3, 0); + card.IssueLevel = arg_get_u32_def(ctx, 4, 0); + card.OEM = arg_get_u32_def(ctx, 5, 0); + int raw_len = 0; + char raw[40] = {0}; + CLIParamStrToBuf(arg_get_str(ctx, 6), (uint8_t *)raw, sizeof(raw), &raw_len); - if (long_id) { - for (i = 0; i < idlen; ++i) { - hi2 = (hi2 << 4) | (hi >> 28); - hi = (hi << 4) | (lo >> 28); - lo = (lo << 4) | (id[i] >> 4); //get first 4 bits + //bool q5 = arg_get_lit(ctx, 7); + CLIParserFree(ctx); - hi2 = (hi2 << 4) | (hi >> 28); - hi = (hi << 4) | (lo >> 28); - lo = (lo << 4) | (id[i] & 0xf); //get last 4 bits - } - PrintAndLogEx(INFO, "Simulating HID tag with long ID: " _GREEN_("%x%08x%08x"), hi2, hi, lo); - payload.longFMT = 1; + wiegand_message_t packed; + memset(&packed, 0, sizeof(wiegand_message_t)); + + // format validation + int format_idx = HIDFindCardFormat((char *)format); + if (format_idx == -1 && raw_len == 0) { + PrintAndLogEx(WARNING, "Unknown format: " _YELLOW_("%s"), format); + return PM3_EINVARG; + } + + if (raw_len) { + uint32_t top = 0, mid = 0, bot = 0; + hexstring_to_u96(&top, &mid, &bot, raw); + packed.Top = top; + packed.Mid = mid; + packed.Bot = bot; } else { - for (i = 0; i < idlen; ++i) { - hi = (hi << 4) | (lo >> 28); - lo = (lo << 4) | (id[i] >> 4); //get first 4 bits - - hi = (hi << 4) | (lo >> 28); - lo = (lo << 4) | (id[i] & 0xf); //get last 4 bits + if (HIDPack(format_idx, &card, &packed) == false) { + PrintAndLogEx(WARNING, "The card data could not be encoded in the selected format."); + return PM3_ESOFT; } - PrintAndLogEx(SUCCESS, "Simulating HID tag with ID: " _GREEN_("%x%08x"), hi, lo); - hi2 = 0; + } + + if (raw_len == 0) { + PrintAndLogEx(INFO, "Simulating HID tag"); + HIDTryUnpack(&packed, false); + } else { + PrintAndLogEx(INFO, "Simulating HID tag using raw " _GREEN_("%s"), raw); } PrintAndLogEx(INFO, "Press pm3-button to abort simulation"); - payload.hi2 = hi2; - payload.hi = hi; - payload.lo = lo; + lf_hidsim_t payload; + payload.hi2 = packed.Top; + payload.hi = packed.Mid; + payload.lo = packed.Bot; + payload.longFMT = (packed.Mid > 0xFFF); clearCommandBuffer(); SendCommandNG(CMD_LF_HID_SIMULATE, (uint8_t *)&payload, sizeof(payload)); @@ -255,6 +274,7 @@ static int CmdHIDSim(const char *Cmd) { PrintAndLogEx(INFO, "Done"); if (resp.status != PM3_EOPABORTED) return resp.status; + return PM3_SUCCESS; } diff --git a/doc/cheatsheet.md b/doc/cheatsheet.md index 5e46f68df..edd08bf55 100644 --- a/doc/cheatsheet.md +++ b/doc/cheatsheet.md @@ -370,12 +370,14 @@ pm3 --> lf hid demod Simulate Prox card ``` -pm3 --> lf hid sim 200670012d +pm3 --> lf hid sim -r 200670012d +pm3 --> lf hid sim -w H10301 --fc 10 --cn 1337 ``` Clone Prox to T5577 card ``` -pm3 --> lf hid clone 200670012d +pm3 --> lf hid clone -r 200670012d +pm3 --> lf hid clone -w H10301 --fc 10 --cn 1337 ``` Brute force HID reader From 4a8edc4e54b8afe4b2aefddeff66c94ff1839e03 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 8 Oct 2020 21:47:54 +0200 Subject: [PATCH 0951/1047] adapt lua for hid clone --- client/luascripts/lf_hid_bulkclone.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/luascripts/lf_hid_bulkclone.lua b/client/luascripts/lf_hid_bulkclone.lua index dae59a53c..0e74f82b5 100644 --- a/client/luascripts/lf_hid_bulkclone.lua +++ b/client/luascripts/lf_hid_bulkclone.lua @@ -192,7 +192,7 @@ local function main(args) print('Press enter to program card '..cardnum..':'..facility..' (hex: '..card..')') --This would be better with 'press Enter', but we'll take what we can get. io.read() - core.console( ('lf hid clone %s'):format(card) ) + core.console( ('lf hid clone -r %s'):format(card) ) end end From adb5ec1676d5333f2ca5e32729b4f94f84a561f1 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 8 Oct 2020 21:49:18 +0200 Subject: [PATCH 0952/1047] adapt lua for hid sim --- client/luascripts/multi_bruteforce.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/luascripts/multi_bruteforce.lua b/client/luascripts/multi_bruteforce.lua index ef1edc697..50f9429aa 100644 --- a/client/luascripts/multi_bruteforce.lua +++ b/client/luascripts/multi_bruteforce.lua @@ -214,7 +214,7 @@ local function main(args) end facilityrequired = 0 -- Disable the FC required check, as we used it for type instead of FC elseif rfidtag == 'hid' then - consolecommand = 'lf hid sim' + consolecommand = 'lf hid sim -r' rfidtagname = 'HID' facilityrequired = 1 else -- Display error and exit out if bad RFID tag was supplied From f3a3a94fead6d239a0b397600748206661c67ac2 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 8 Oct 2020 22:11:29 +0200 Subject: [PATCH 0953/1047] hf 14a config - text / colours --- armsrc/iso14443a.c | 35 ++++++++++++++++++++++++++++++----- 1 file changed, 30 insertions(+), 5 deletions(-) diff --git a/armsrc/iso14443a.c b/armsrc/iso14443a.c index 6cd7c9525..6fcd2c96e 100644 --- a/armsrc/iso14443a.c +++ b/armsrc/iso14443a.c @@ -134,11 +134,36 @@ static hf14a_config hf14aconfig = { 0, 0, 0, 0, 0 } ; void printHf14aConfig(void) { DbpString(_CYAN_("HF 14a config")); - Dbprintf("[a] Anticol override......%i: %s%s%s", hf14aconfig.forceanticol, (hf14aconfig.forceanticol == 0) ? _GREEN_("No") " (follow standard)" : "", (hf14aconfig.forceanticol == 1) ? _RED_("Yes: Always do anticol") : "", (hf14aconfig.forceanticol == 2) ? _RED_("Yes: Always skip anticol") : ""); - Dbprintf("[b] BCC override..........%i: %s%s%s", hf14aconfig.forcebcc, (hf14aconfig.forcebcc == 0) ? _GREEN_("No") " (follow standard)" : "", (hf14aconfig.forcebcc == 1) ? _RED_("Yes: Always do CL2") : "", (hf14aconfig.forcebcc == 2) ? _RED_("Yes: Always use card BCC") : ""); - Dbprintf("[2] CL2 override..........%i: %s%s%s", hf14aconfig.forcecl2, (hf14aconfig.forcecl2 == 0) ? _GREEN_("No") " (follow standard)" : "", (hf14aconfig.forcecl2 == 1) ? _RED_("Yes: Always do CL2") : "", (hf14aconfig.forcecl2 == 2) ? _RED_("Yes: Always skip CL2") : ""); - Dbprintf("[3] CL3 override..........%i: %s%s%s", hf14aconfig.forcecl3, (hf14aconfig.forcecl3 == 0) ? _GREEN_("No") " (follow standard)" : "", (hf14aconfig.forcecl3 == 1) ? _RED_("Yes: Always do CL3") : "", (hf14aconfig.forcecl3 == 2) ? _RED_("Yes: Always skip CL3") : ""); - Dbprintf("[r] RATS override.........%i: %s%s%s", hf14aconfig.forcerats, (hf14aconfig.forcerats == 0) ? _GREEN_("No") " (follow standard)" : "", (hf14aconfig.forcerats == 1) ? _RED_("Yes: Always do RATS") : "", (hf14aconfig.forcerats == 2) ? _RED_("Yes: Always skip RATS") : ""); + Dbprintf(" [a] Anticol override....%i %s%s%s", + hf14aconfig.forceanticol, + (hf14aconfig.forceanticol == 0) ? "( " _GREEN_("No") " ) follow standard " : "", + (hf14aconfig.forceanticol == 1) ? "( " _RED_("Yes") " ) always do anticol" : "", + (hf14aconfig.forceanticol == 2) ? "( " _RED_("Yes") " ) always skip anticol" : "" + ); + Dbprintf(" [b] BCC override........%i %s%s%s", + hf14aconfig.forcebcc, + (hf14aconfig.forcebcc == 0) ? "( " _GREEN_("No") " ) follow standard" : "", + (hf14aconfig.forcebcc == 1) ? "( " _RED_("Yes") " ) always do CL2" : "", + (hf14aconfig.forcebcc == 2) ? "( " _RED_("Yes") " ) always use card BCC" : "" + ); + Dbprintf(" [2] CL2 override........%i %s%s%s", + hf14aconfig.forcecl2, + (hf14aconfig.forcecl2 == 0) ? "( " _GREEN_("No") " ) follow standard" : "", + (hf14aconfig.forcecl2 == 1) ? "( " _RED_("Yes") " ) always do CL2" : "", + (hf14aconfig.forcecl2 == 2) ? "( " _RED_("Yes") " ) always skip CL2" : "" + ); + Dbprintf(" [3] CL3 override........%i %s%s%s", + hf14aconfig.forcecl3, + (hf14aconfig.forcecl3 == 0) ? "( " _GREEN_("No") " ) follow standard" : "", + (hf14aconfig.forcecl3 == 1) ? "( " _RED_("Yes") " ) always do CL3" : "", + (hf14aconfig.forcecl3 == 2) ? "( " _RED_("Yes") " ) always skip CL3" : "" + ); + Dbprintf(" [r] RATS override.......%i %s%s%s", + hf14aconfig.forcerats, + (hf14aconfig.forcerats == 0) ? "( " _GREEN_("No") " q follow standard " : "", + (hf14aconfig.forcerats == 1) ? "( " _RED_("Yes") " ) always do RATS" : "", + (hf14aconfig.forcerats == 2) ? "( " _RED_("Yes") " ) always skip RATS" : "" + ); } /** From 7f8a4b41825e46911192e2bef2f030ad204e13a8 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Fri, 9 Oct 2020 01:52:42 +0200 Subject: [PATCH 0954/1047] Add generic tear-off hook --- armsrc/appmain.c | 36 +++++++++++++++++++++++++++++++ armsrc/appmain.h | 2 ++ armsrc/lfops.c | 39 +++++++++++++++++++++------------- client/src/cmdhw.c | 53 ++++++++++++++++++++++++++++++++++++++++++++++ include/pm3_cmd.h | 5 ++++- 5 files changed, 119 insertions(+), 16 deletions(-) diff --git a/armsrc/appmain.c b/armsrc/appmain.c index e7eb0ac99..db6fa55fd 100644 --- a/armsrc/appmain.c +++ b/armsrc/appmain.c @@ -68,6 +68,24 @@ extern uint32_t _stack_start, _stack_end; struct common_area common_area __attribute__((section(".commonarea"))); static int button_status = BUTTON_NO_CLICK; static bool allow_send_wtx = false; +static uint32_t tearoff_delay_us = 0; +static bool tearoff_enabled = false; + +int tearoff_hook(void) { + if (tearoff_enabled) { + if (tearoff_delay_us == 0) { + Dbprintf(_RED_("No tear-off delay configured!")); + return PM3_SUCCESS; // SUCCESS = the hook didn't do anything + } + WaitUS(tearoff_delay_us); + FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); + tearoff_enabled = false; + Dbprintf(_YELLOW_("Tear-off triggered!")); + return PM3_ETEAROFF; + } else { + return PM3_SUCCESS; // SUCCESS = the hook didn't do anything + } +} void send_wtx(uint16_t wtx) { if (allow_send_wtx) { @@ -731,6 +749,24 @@ static void PacketReceived(PacketCommandNG *packet) { reply_ng(CMD_SET_DBGMODE, PM3_SUCCESS, NULL, 0); break; } + case CMD_SET_TEAROFF: { + struct p { + uint32_t delay_us; + bool on; + bool off; + } PACKED; + struct p *payload = (struct p *)packet->data.asBytes; + if (payload->on && payload->off) + reply_ng(CMD_SET_TEAROFF, PM3_EINVARG, NULL, 0); + if (payload->on) + tearoff_enabled = true; + if (payload->off) + tearoff_enabled = false; + if (payload->delay_us > 0) + tearoff_delay_us = payload->delay_us; + reply_ng(CMD_SET_TEAROFF, PM3_SUCCESS, NULL, 0); + break; + } // always available case CMD_HF_DROPFIELD: { hf_field_off(); diff --git a/armsrc/appmain.h b/armsrc/appmain.h index 594723983..092e88d0e 100644 --- a/armsrc/appmain.h +++ b/armsrc/appmain.h @@ -16,6 +16,8 @@ extern int g_rsamples; // = 0; extern uint8_t g_trigger; +int tearoff_hook(void); + // ADC Vref = 3300mV, and an (10M+1M):1M voltage divider on the HF input can measure voltages up to 36300 mV #define MAX_ADC_HF_VOLTAGE 36300 // ADC Vref = 3300mV, (240k-10M):240k voltage divider, 140800 mV diff --git a/armsrc/lfops.c b/armsrc/lfops.c index 146acf962..03e322681 100644 --- a/armsrc/lfops.c +++ b/armsrc/lfops.c @@ -2573,15 +2573,20 @@ void EM4xWriteWord(uint8_t addr, uint32_t data, uint32_t pwd, uint8_t usepwd) { SendForward(len); - // Wait 20ms for write to complete? - // No, when write is denied, err preamble comes much sooner - //WaitUS(10820); // tPC+tWEE + if (tearoff_hook() == PM3_ETEAROFF) { // tearoff occured + StopTicks(); + reply_ng(CMD_LF_EM4X_WRITEWORD, PM3_ETEAROFF, NULL, 0); + } else { + // Wait 20ms for write to complete? + // No, when write is denied, err preamble comes much sooner + //WaitUS(10820); // tPC+tWEE - DoPartialAcquisition(0, false, 6000, 1000); + DoPartialAcquisition(0, false, 6000, 1000); - StopTicks(); - FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); - reply_ng(CMD_LF_EM4X_WRITEWORD, PM3_SUCCESS, NULL, 0); + StopTicks(); + FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); + reply_ng(CMD_LF_EM4X_WRITEWORD, PM3_SUCCESS, NULL, 0); + } LEDsoff(); } @@ -2610,15 +2615,19 @@ void EM4xProtectWord(uint32_t data, uint32_t pwd, uint8_t usepwd) { SendForward(len); - // Wait 20ms for write to complete? - // No, when write is denied, err preamble comes much sooner - //WaitUS(13640); // tPC+tPR + if (tearoff_hook() == PM3_ETEAROFF) { // tearoff occured + StopTicks(); + reply_ng(CMD_LF_EM4X_PROTECTWORD, PM3_ETEAROFF, NULL, 0); + } else { + // Wait 20ms for write to complete? + // No, when write is denied, err preamble comes much sooner + //WaitUS(13640); // tPC+tPR - DoPartialAcquisition(0, false, 6000, 1000); - - StopTicks(); - FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); - reply_ng(CMD_LF_EM4X_PROTECTWORD, PM3_SUCCESS, NULL, 0); + DoPartialAcquisition(0, false, 6000, 1000); + StopTicks(); + FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); + reply_ng(CMD_LF_EM4X_PROTECTWORD, PM3_SUCCESS, NULL, 0); + } LEDsoff(); } diff --git a/client/src/cmdhw.c b/client/src/cmdhw.c index ac938b7c8..5db860d0a 100644 --- a/client/src/cmdhw.c +++ b/client/src/cmdhw.c @@ -15,6 +15,7 @@ #include #include "cmdparser.h" // command_t +#include "cliparser.h" #include "comms.h" #include "usart_defs.h" #include "ui.h" @@ -515,6 +516,57 @@ static int CmdStatus(const char *Cmd) { return PM3_SUCCESS; } +static int CmdTearoff(const char *Cmd) { + CLIParserContext *ctx; + CLIParserInit(&ctx, "hw tearoff", + "Configure a tear-off hook for the next write command supporting tear-off\n" + "After having been triggered by a write command, the tear-off hook is deactivated", + "hw tearoff --delay 1200 --> define delay of 1200us\n" + "hw tearoff --on --> (re)activate a previously defined delay\n" + "hw tearoff --off --> deactivate a previously activated but not yet triggered hook\n"); + + void *argtable[] = { + arg_param_begin, + arg_int0(NULL, "delay", "", "Delay in us before triggering tear-off, must be > 0"), + arg_lit0(NULL, "on", "Activate tear-off hook"), + arg_lit0(NULL, "off", "Deactivate tear-off hook"), + arg_param_end + }; + + CLIExecWithReturn(ctx, Cmd, argtable, false); + struct { + uint32_t delay_us; + bool on; + bool off; + } PACKED params; + params.delay_us = arg_get_u32_def(ctx, 1, 0); + params.on = arg_get_lit(ctx, 2); + params.off = arg_get_lit(ctx, 3); + CLIParserFree(ctx); + if (params.on && params.off) { + PrintAndLogEx(WARNING, "You can't set both --on and --off!"); + return PM3_EINVARG; + } + clearCommandBuffer(); + SendCommandNG(CMD_SET_TEAROFF, (uint8_t *)¶ms, sizeof(params)); + PacketResponseNG resp; + if (WaitForResponseTimeout(CMD_SET_TEAROFF, &resp, 500) == false) { + PrintAndLogEx(WARNING, "Tear-off command timeout."); + return PM3_ETIMEOUT; + } + if (resp.status == PM3_SUCCESS) { + if (params.delay_us > 0) + PrintAndLogEx(INFO, "Tear-off hook configured with delay of %ius.", params.delay_us); + if (params.on) + PrintAndLogEx(INFO, "Tear-off hook enabled."); + if (params.off) + PrintAndLogEx(INFO, "Tear-off hook disabled."); + return PM3_SUCCESS; + } + PrintAndLogEx(WARNING, "Tear-off command failed."); + return resp.status; +} + static int CmdTia(const char *Cmd) { (void)Cmd; // Cmd is not used so far PrintAndLogEx(INFO, "Triggering new Timing Interval Acquisition (TIA)..."); @@ -621,6 +673,7 @@ static command_t CommandTable[] = { {"setmux", CmdSetMux, IfPm3Present, "Set the ADC mux to a specific value"}, {"standalone", CmdStandalone, IfPm3Present, "Jump to the standalone mode"}, {"status", CmdStatus, IfPm3Present, "Show runtime status information about the connected Proxmark3"}, + {"tearoff", CmdTearoff, IfPm3Present, "Program a tearoff hook for the next command supporting tearoff"}, {"tia", CmdTia, IfPm3Present, "Trigger a Timing Interval Acquisition to re-adjust the RealTimeCounter divider"}, {"tune", CmdTune, IfPm3Present, "Measure antenna tuning"}, {"version", CmdVersion, IfPm3Present, "Show version information about the connected Proxmark3"}, diff --git a/include/pm3_cmd.h b/include/pm3_cmd.h index e96c58984..267ca2b7f 100644 --- a/include/pm3_cmd.h +++ b/include/pm3_cmd.h @@ -401,6 +401,7 @@ typedef struct { #define CMD_WTX 0x0116 #define CMD_TIA 0x0117 #define CMD_BREAK_LOOP 0x0118 +#define CMD_SET_TEAROFF 0x0119 // RDV40, Flash memory operations #define CMD_FLASHMEM_WRITE 0x0121 @@ -774,8 +775,10 @@ typedef struct { // execute pm3 cmd failed client/pm3: when one of our pm3 cmd tries and fails. opposite from PM3_SUCCESS #define PM3_EFAILED -21 -// partial success client/pm3: when tring to dump a tag and fails on some blocks. Partial dump. +// partial success client/pm3: when trying to dump a tag and fails on some blocks. Partial dump. #define PM3_EPARTIAL -22 +// tearoff occured client/pm3: when a tearoff hook was called and a tearoff actually happened +#define PM3_ETEAROFF -23 // No data pm3: no data available, no host frame available (not really an error) #define PM3_ENODATA -98 From 5c2f74d17f5b1e103ee7f89636d8e767a25f3652 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Fri, 9 Oct 2020 14:09:26 +0200 Subject: [PATCH 0955/1047] Add ARM datasheet --- ...atasheet AT91SAM 6175M–ATARM–26-Oct-12.pdf | Bin 0 -> 4091662 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 doc/datasheets/Atmel SAM7S Series Datasheet AT91SAM 6175M–ATARM–26-Oct-12.pdf diff --git a/doc/datasheets/Atmel SAM7S Series Datasheet AT91SAM 6175M–ATARM–26-Oct-12.pdf b/doc/datasheets/Atmel SAM7S Series Datasheet AT91SAM 6175M–ATARM–26-Oct-12.pdf new file mode 100644 index 0000000000000000000000000000000000000000..ec27abe0fd1da43db109686cac74ce96e7c7d932 GIT binary patch literal 4091662 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

t)kk**1oDB10RahFtAcTt!S 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

~6i!wDBX7{m= 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


KF;=0E5`omDh2)IgJY>`)09n#0E^K1%>*8kPl< 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

&8)<*A3-TEsKp5IT(nSn5tD3ul~nU=!mppCnd^? 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

;a&KdA>p72`y#Xi4iguWxY0VOC!5OLGA_1C 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

IXC0L$_1^=iE~< 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%0D>% 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

Xh(MnKEwr|x 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⋙*VA>6?(3g7fIp%XC8LtIB z8Zw&<?idR;lNvZ9tK-8(t?|CwJ{SS87S+5rKp6bl4S4e z|88ch4gS?VFeFyLF&Pjr&1grT1(D)>-UR4eYwy?&fs;>$s`yIg^NoXtc~QFKHUE73 zR-8+BqmUI4p^<5oaYAaHKToQb@B=+0O6dEKLKS{G$j9?mlhO7F{Z~$y|FhR(Z59*S z3bbM;knA#bngL_Z({1M$bauc$$5K@nN6+E0Yw?CU!2djYj4D4egj7ky{j(SJqQT0o3iEA<}=eTA2TLt(JdRi)^9sX<`K+TUcP- zD>W8YmK2E%`Z$p+e9QNxhL-TW2!u##6`_6~h)iSuVTB6n_9%1at2^~ZsWGh|CqYZ+ zz#F^v{&HZ)ESU#qV7yldN;ea2jUaCpDXDM=@-==RnXYn{;hm&yZ%T4g!Ni z1KHvxnkO4K$U3I>HLx}1wsU;_WSdtu4Snv0N1k5k^p*#xR25#2u~J}NruFavav?ad zfToEsLWmx_n9P|#Tf3X^bP^Jd6&O9QstItJvOgvGSmDR? zrWwtXBPyc+#G^B>E#pUy-iZu{*KZw%YNm@;tQv2)1;gI0FyQQgh?fTGMi7n&eUa~- zL9I(06S`WI>h{>VgR4Q!;%@K1LKR>N;Kv)1ecy7jFMm>e@AsiK`80Z)Cxeg?-O4Se zsMyUIVwz#?gOZUz19vQR2z#McDa)hUY1RH}>VcGkQw;p9bN{j_lNlU)#Smmz9NyP6 z8mDFI?+L}n0N2ntii5pVoEtsJz^n@;B;eU}ad!8tOrb(gJKAGYB@j@~&U6cX83^h+ ze6Soib5QfASn~3sfv|k;X8=CWNZsy^lr#59@SFLqk%M5~X%-MY8dP8;IN4OWtOo&z zJNMt2{m&MQK=dPq3Idw8qqZ$JC$bFp3zfAA%#-AJ=z8Ca2migcwz}iLu=SeM`XV4&nI4{3HEj{@+zu{vGgS&N{O&fvb+F z0*B{$RET|UR+JStclY2&)LO}&E1Z{}v&t5Ag*2Lq#uYs)smfmYUR?JWM zx43Oum#T_FRtw*$qgM3>l81Tfh|Ln~Y`czhTH_J{JJS@KMx&nG$<~;EsG^QmL$bP$HYR6vg(UGl8{|jEnT$F?i;5-4;Fi3T`hb=JK@<71T`N2vdOjl% zt308K%vr(=gwXilmmSnr7nWa&DyG8rhs#Z_v0g?E1+p$GDF^rwk$Newh>P5$t3~9e zrEDoG@X#)?Xw%suCot2Hz@bpzBFWHBrwlaT5{k8IY@W2g&TqN6?Kb4F4?*m@Bkqh@ zXJiEOTQG4!V@k?>UQ`gg{apYZsmuWq5~ahI8-`vvc@PFJuLj_wU03b;<)&@V>I^K zt6_`&JK+CWUD04tora!?%?FkiU4y?Z5^7TxNaT}4l7QsTQ!IwVc>fpOsjQxWE;Wq1 zEt6^NZ%=tU+gHKE*0STBHXsrDJNEl!6WO|T6ag-uNS|T{t5TL8%OS`?50+o zq46!o+NV&AdOg!168`^{49v{*{}%0U;M1&Fd`nJO z$dHQp$7zG_V8~S{xh4@(MDxeMj zDIuXbIRHtwK0F4}de@fF?O2oOk33;jv3fsJ&zFBJbRFOsOnSkPtJpn z^No$hny^^%uVrW{`7*ey*>MYAojvE)oVmBZHo8ZcpDu&NwkXXVOHWr{+x|pmOLdpV zM5Ei`LYFwo1O%W9Z@=$#JG!BIoBy7E}N?>tBEov&mNUt zAYY2<_**hUb8QD#K$j_bBAn3$dAY46SC8H@?n}4BXhR)j(yqH6#gXu3G$KP>fv@q% z8w(tSb5rnJ~Q!xnp2DHQ^!Us49N$H?Lvy3Nva*^>0^YrI^w0g$B| zAfpSQA>+DG*1mRt8;vVFk!exx;^m%#k%6afX zN*+PJZeV;*M$(7 zyf#A8=JQ^eqh2mAszNn`VW9FR`_g%o7!}aJ&N6ykYcQN|01=%{@Lf230du>dw9)UW zk-Mix!)?SVKK%Qu35Vqlz*52(6nUr2&A9v%bE$r2W<Qi~6z)3TiwWEg& z!ZgSdKK%X5Nx&`lLZFs`rTdOylrFoFiw>KOPEBWc8weW%exLD#0kUb1^wpr4{NV2x z#K!}A2&v@vc~(982(qy`JZqDywcp1jIK*M?bku8SeH-C&kI+#9 z(wZm}F)+nj^_jHG$1U#BMvjHfCewih;g9I_)~CNH4$UcN5B)xF8sQe$%h!zg7G*W9 zer}^q;atCUY<}pV&|lBEvf;k5TfjxntcZtPvlbicMqV)&7sL{DS*G0lx%*f*NvB<^ zt#V?@23wGKGq;&8MltTddHRCgI;JD7I_%fO>1brLJ%7-IHkL$(9-+$-yaiurpfTUH zk^;PNVDi2_b$&DYt`Auu06oMA5-Pb83O@_Zf#~hn_wsp+p6Eoj9)GasZ245R=sscvCjh$* z20Zs99_WlwCgPV!?dC#13)@$W^-1iApLo77v#1*Fp;-^83u$s!*Tb?Dqn$xGB zjF2QjFTDB8z(fm!@<&U`SHxB3+`Iv@>%<=@+NeFs>EZ+Rs&Q&Vz*g&cldt`$zo$%(KTLzx&sJMw$oa!D0u5v zd?J7o%6~29U^Hf)wTWGS=pMfP18(8TiJG2&4%m$snfMhzCmp}(BDEu`7v$9qrU+xZ zj2+RTHi?eblPokq`adWEG!O2jeGnbV#d7c2M^~aTw8BYkEq0AoH0;mMUOEx~FoGLI zoyF=6?%*`u26Z4p2JZKw7OgO>-yv6olEt+vnB@6N$orrL8IdHS!PYWg!z@gb$|$a? z@fzmtgaE$i!EyC$eSC>K&$tnXa&}?ZVpZL1m!%rb^9msua8x`=i&jP$69H}q+d2Zm zhTHqzLfM?B`Yf~%`4K#+EBcu@nCjj~IhLg%SGWsgfklDvhSXW;Z#iG?%1eRK9Og5o`-Z-lr*k{iOwR@J6nF7|#yEdTEf>9tGG_gZ zes#k)Tg?z0!}d*SQU`SGor%CLkjlNuo(tKZlwA+UKPqq;N8v}WLvP;k zkS=m-iNI>$6}<}{?0a;Ps8otynAa-fO36`A2@SFynDtrDEgHrvnhcE#wM`(H{jP)# z%E14ciIXH?Mc1hFJSIZ^B$E+z@NBgmMXCgZCS)w?AI`;PnbZ2sbfJyex&yhL#dt13 z>crLLE_^E4s)|x)zSlG9etvXp4sLX?z}r8d^D_*kAc_~}5Z%<1IL;2ktC2?W@(aAL z8Gger{7&Fu2O|UlIb8Z;(SE(ZOyrnQRt^+A0Js=1@gz~3Peu^3ZPBxtX?rnI0Q9K4 zvlaxEu_8VbC?3e&)ipu$gz(dx^}GL^Ur%kpZFdwbh3G{Ybd`TCASLE}p$Oba&*>EL z?_FcKu-biM5U;Hw%QG>ITqH2X8ufL@4Sc`@s5oH$6_WD^jTNZ_fk8{5+TZ{Z*)Mln zG!Ifx7o9dCMOIfnkaZJTQk98mq4;~}P#7%xicC42%|UH;5Cip4s7oGTX(K-#he3kh zlSIo1!_sDDzZ2)vOrBetPnCTU?O5+_90P>c`(Sol+BWuHo*}>k#KRNs$#8)p8F%}K zD31vOFYX*f34<=6D=J@Hc1o73XWNKKllvMb={;*88Dm{IYjng;_><3-mPR5Q67ifN z(<9jakl-E3f>As+@MUs3dkp$tQSJf?Q|hB&{1zMP(5k^$yg2wNrQ(wDC9>tegmPb7 zj(FTHJFeB_W!bL1&-WmQbCGth;4)PXF%SMQiz`WPD~r%5SF8=`mMW)wI8EfX@4+rN z;h~Esy0(^vkcbg*YtpqaCuX3_BW) z)}jl(nO%ZdI%*lqfivcGHPDr!JV?^CXDopEeU)Fkt@x;*ZQ_TC0$3eLz^%+WJkOqG$5j z_@iJ9eY{42WqPyw*yix(@_M-#_D%8VhzI4n1e!sbYTtOhf&2fV>>Zc{YqzBBvTfV8 zyQ;cu+qP}nwr$(CU0t?qe;pGOah?-%-Y;f;!_L@ougtab>Qd}!?r4uM9ytmV$p(m7 z`si_}2swdV`^_qUXB6E+!#^uR*5P=Zz!ln-K)#x+^v9sViI2gsnNW?9h^t^;*YOss z%Q#n+qBoyaAC%n`RL%vTcDzxrfi@WZ+8r>zQ%L}&QS6!xl@y4kaUe0^7lIsVoAgV6 zDxO?zuFrUFB-uDjc8y|u`;S6STPQvUpTxHPw&9`;w7$C zF_(ulY-P5trjO_Dr~&Ij)?|vPT9?f@Q2Ghx8Q_Ncbp#o;L_C0R_E;UcX5q!W6USoB zGEODM&X4*6dYz-7U#rZ~S4+m9$!kJ1ch)Y98johI*2l|+juxo|Zn%71LEL{H@g}^{ zTP=%i3ueh@7|{0YJ;M?jeraxu@cO0km=iJ+q%NXH#%LDG*rD3r+f5iO=l-#qH)NAs z@*^NN#UOCUj2cmKTv;e7mCeS6G9Ud=XsD_M4~Ls=T!-n|0xDHbtxs$7c#6kJ|LT`B z%wrykoyfq!Q$d>n3FX49pbfzHG@=oK6!uBMYfld!JRVoV7V_xfAEpY#&yER7v)#K1 zZ#nhkc#CQUAlE`LR{9VUwHk=3W~@Sl3P4*!DWSSML)!??{GUDBLeHSDXCMNPYJazz-Mhc(F3d#?1a z5HpU~mWvWO5uH_6%ojilNL2Hr`Yz=5#&SgS0aVRmzShuU%d4m)F{#g#awAKW+Y1Br zpnW>M)X5xzCwKVFm2f57>~kIm_zx5W|Z{72a ztoa{ht8lw*SaG4}9fVeJ_bPBXKEI-;$X8xqMPaJ@tEtX;_DDZ;XfVmF0$6U88xiPZ zvw#bB-Xze890AIBY`J|nZ4*|l`+j-fTcx?8{b#r6{|@3^;ItTHf!)xjqoeBr=t~Y5 zH#S~C6b%tzwG>7$+BAU}6)KgbG_opt>0tw^!j+c5H!;y%3b@ zbJ)usf)a^_DaFZK6SxgCbdRsl@79;JG zK;#$8T1Jwau;#$eQs&Wg7p=lN85p51BlDRL=mxhMq|?`&?+9g;wU2>o;OvC-=My(# zY5eiM#B=fxfcU<7X~AW$i_|X6yu%$`nH1g#NH{CT;)K9(^okU+i@OC`UpD%0c@oiC z@Q&D0|6V!&#)&-gCPPL(` z3f-5a4E^?uo6?ebKz&2nj=2*rqf2jhce(dEUgEX7aRbZy0Ya>~RKM~)`lw%hKQ6F9 zL{++B$x-K4OSCoup5R_{#K70gBAl#*GR!_By6EvD%45y@GOdbM91819$pvHff7Z!A zZg2kkggL6^(ORWvONHQE1MVG>b8jemJ+McgeHyt$=g15ES@B=4qREA-z0;?$1?`Og z(ng1RsiZ_NzY9RAmW>g~XtZ6!7>25rR&+t_WZRLrmW>WduQjIKzZ;AHMdIb`KCzvQ80Xu$wn!ac)ioZTTGW@tIKY1XhJ=eM_xa2bi9|Vy;~$2 zF(I;G7UZqNl<8H$@#1%A1~EdW;*2Guuton%L&BT@#8Iw9F#IZ4hSb}>OdlkBdKbsz z*qj}yQ#kUOzcqJnQ0|h2?7>TZ8&IR6J?RRrkd>w z_6DfY0Tl`B+%Iq#a|5p!H>2xnt#R&KUfKkOy_d?}Nq@YS^abEpSVmq4LVW4+>}?9 zLykh=P^3^w>r$(nq8>y~;<`xsv?B<1Jp&_@RD?#oq-<>ca}8 z%qxN?@GO6NiLGc*U-0zqKx8bZ#VEIs^;_^>f2^|-C&*rW3R^GRgI6bc&Rv26 z@Ql1v#50&BCo3nrAlX?Kp>h5BhtS_C%QhY_coV=<<~aJPpAbr~Tp8s*%9!LzOh?Pj-OcCR@PhUAXn+8OFgR9D*(ZQtZxkqRRzfrK#xSKp95j~t9j}8bS(?>u|(jRP)?i8u?N(}^oR9)wSJoN-5YsY zHopqSXWZmrc3X;0`5+HQVH8&?5*Hz8S3?kWj<#sz&n3+d(S0FTEMn2C1)F19XY4j8 z>=RL$FE<^3oU7!cx~tg((&e;kIkSN)Kfvl!8KKr|{OcFAr0ll2rmi19G1`b#9hxFgloQ;L8Ohu9Ms zbA47?v^D!f*(c~D^(bmvmkYt6v!vjvj^US$ga)-{Dj5-`%JkHte;}wsN$b#P9I#yb zdsTBnaL?af42CHBnqNv_zy{%>Us-smNFcjl#nWNhSe~CBQ0lEx<qm6GP|w zCcF&w7H4fW(Y_OD@N8nIu5nJu1l|>ZpTBA4rUlsGdbH?H+7GsVfpZ<1(Xk;4S~N## z$}berO8QLnR&qUE@!}*vZJT2Ur5qu_RcWkKUy_B6yo8`B=XCiS#n|VOt6z)6O0pi` zwu^k>DiFECSiXj%*~GJH%(~kb@Fx?QP5^9M=1!8aK0lM@0+QBIrgD)N%x5|M8Wcs! zxm2(KP9A-Vc?m>zLCW<3U30McQjfq+dE(}q)JhyZ8B`>-6dCZ6@|IVhoIyk!^R|IF z3YTPw_P29f&_M!Eqn;Hk2_A<1xqb$F zd2F1!n-=xO_bc(<2eVDSe8dNFfxCI?zO~{?+;G6rd(5rQOyCE%H;xBa8 zKANGNJJT-2PYn2WcD$q&*uB*h=Z>1nETk0nnfwC~m;!o9m&e{fnKMp#afpyFybtji zu%f3;=rbV1slgx5GX8J9J^3sAR=0)qr z;{$fMf(@|J#2$QLxn*9--h^>m%#u+!Fpv6r=(M8rvkdiyfmuO=g|Rqg5U+^OdPF1z zAbCuT@j(~_@EqwgFApyKU4f(Ye7f5Nt~tTO2KwEk_EIh12K-rGM}sxX7WjoH0t;dM7lLsbiwsg_m4Xw zJsD18cX_uDOVdm0F~$7><8j_5yw}ze)bwtcfoishtCN>GxP=IyNXhRN9{!VQ;y$dW z3~r>TRVopIV6E{C3cO{xcE@QvVdiL8jN?FOW};+g!X3&yQU;L1#SXm7l~k7r6&oUK zzLW2?TicyO58~b2Z0#Riv{1RVq4hC^a4CCDfhiTh+ohU(N`dmDSwxd*?quCdy`32Hrb{&3IwgSKenV6uz~?3q z9VKba^{NZbgoY#%X25sLHd@T@~N3H!>V6uvzO^Ln0U22+Z%z_pW~ zkan2sQmF8@&@+Vi&Kv4wkLo+8kJ;Jk=}Q;+kDs8DSD?Nxx7Ob4J*(vd_66UmLu?|P zA)knA+tis-Ow6CQyV*(Y59w9a_>(Xr)uNn>@$KKf3EjUB`>Ev#h(WS%V~zlC`78wm zjwB=qq#9o=5xE{+Ji_<888!#W*bprxp@M1p-?NOZA9@{wZ#HILU7XZJ{9&s_&u-s? z2Aj=2-E5<3jLWY(EP+PW%e8~qGYUu4rr%ojB6zZI=4~dQLssB)w)0=ir|w;l9x`sk zb~U$q?eh^9iG-__0f2dLao-stU4jEZhg-nlweEdY5a~PJLix7r>gK*rC|p{UWg1@> zzlCO+V>@EcoX9^OdqQJw`_j`mn=y&(%A#ZHmvIyP9k&hYfbI)HdrY8}yWfhgs z(wf5qHT1v4RkxT+N4@v>l|md)zEuz<9$~HBRdOaq;50gW#hHoUA4kft_J_V{6xtNT zYF6#N{BEqbSvi{!^kidph*6Qn=v!KQz+X^rU9*cdJqI({5LINkI%jPG6o&A+M-T29 z?7A_U(9>A{!Yt8R{RG-O#OblDD}})OrUE&ZDNY3Eyy44RBF=Wp7;AJkbur+Upvpv4Wil1- z=pc$oWUfaS0d(y`OT5_M^QdsJjE@Op$9U1TCM@slTBT+IFL+{Ff|CwQ5T^kf;b@$b z9f}JR+)Di&%AnCL?~Rh<-Ej=q1aUF(p!)fq~~JGK_(#y+%iVI zJzo0oBM1r!+VRJ2BRM<8-3fDj_^FJPG>BAN3a*3I%wg>(o+a_|kIysjYQXE_Zl__u zH-MAvm8qg5pLvC|t&^V2(9%4%-0uS@-DO}a6wELjps^=g*vh)SSP;?!Wc|F=KYkJ3 zqvPy{F>Gmt1X$o5oUJ(I`uz5K7*N*Lec?x(L8HjCNIqbXf8yF!xu}hY&R?aEg!z_A z*Y&b7d5C3nI{)pt;_O3(=&SVi`4oeosJ0FDld>0*(E&5@N8whm7i!}C2U@g+;F~-; z;~lOS^+xR?0C>Ru_N5g;AI+3TT01`28C<#786@kT$B&rgwIeEpaZoytTQcU_ny-q7 zae^IlG6Cx+Ywcsc03PYFNwg!!HnwnJ{*>DaJN9IGiiK*kK*Isqlq!)ns%^BLxEddc z5Wg8Fy;{L&td_ptE31c3#m%Nf5m15fs(ZEVbPU1oS&29QInxZ&KTF=SKvN&W$d8sP z0_}R!B37~F+E}4;p7)-zpY(2t#S>87k4X3%y#Ixs zLRqf+7RW)b_e#cIU^wY4rnDG{z_RGR<@hg`TgIsg9Va8iI_M9@B)FKDOD_jxnm_{i zwgqy=&l$Y+Z{D1#Mw^?CtRQlj zOuUOHs3k8@WMLBDZ_y*xDA1* zc;3l%luP)gX|&OP1`-BI=Bu|3XC_!a>kf%mE=NAvvCudlyYy=iH#A+ zCD5t7u6mZIg3WG%%%Tz*^$<%RP@M?ONmfzDB@qupG9n{BTJO9`udo_L<0pt7+t1J) z`<{}pu_>O_zFEG((KyUiC0hIv6M8p%Z&%+HW`bbh5!BQ`EOZ!%9|5m3Kv0XQ9-LmY zI97}C&URyy5S?@ZWhj1V-|z0aB1_`4If;l#49%n=(eebj{;lkadkBOM z+=q;^PuF~Tj2!74?GH!6zaY=5A8dT({82Us{LN!pT#&)Wcnguwk;}U~meG{m3@RVP z2Qu=}CXUIdDt!f$qblACuK45zNNc<~C?CldhIbUUteql9*tqP1I-sQkn!t2g@uDduTGt&hW-{|@{4bjKw?c-D8bZd6>uVn<*#6N4Z>MSJP&@ zg{Xg{qi>dvW*(?%W(nd)qpB`l){l4lM4KVQ1)*9r?ris9)7Z0ypFs9F?9MHU&o-%s zD*hXxJcMdIFVE<#FZHWBDw?n(Z&cOuZMEQc{32YEA$<2VBpbTt%x zQmeiF4X-;kb%aVVfSTpw0sQd8o^DY2Yx8WZZL7~u4Cd^c9=1cu@w*V=^TuaEDaq8B zwW*o*N}*mEKLgtkFxY3Idu7w)5sr1sG{KVTrjyALte~!#CacbKqKtOvL1@Hfg3Ddi8^-31cDw6_5Oi~bJ zw7mdd0kqINn9O;&m)Kz6aACcXE}Dlg4@AlYk~(4WChcMIc!I@X#hJ92lSAqGwCJus z%oAXBigp#4T!m$lK|=2A0c8Iq62M3zSse3Y20+IZL*G`V736Nr3?oGUa=kWIvDL}Q zVs$i(wy#xX2a}gVDmUp3_~6WE1@&jCw2N5};|mJ$9E?Uk!CA=Xi>LrSlEvfdwAN4w zo}*1Q_p?LGlzrQ$Q4~Xm*HqRU*K*TQiMsQem@6fCT(e1z*iJ)6QsR<-!%qL_mWO`- zl`>zHgQ||?8M1g_hac@7+)H^)L6fOfTr=ROhO5#W=w4_MWS&RO*jC5$KfC{||M#8Z z8ew^j2v8<3&|=pP%Bqw8y8^ObgJ(Gq$k4V&%L*0?jNN`pUAE(w7Vp4VU#|VLKIb+B zJv-)VSBVADUdvgl7_(%7nM4j8RbR`ElFhp3UtN zHJQiJg=jxE43Z3hF=+cc%oSbL>jChftBkCUArvsCHxhZDttpULh2RW`Pmgr*e<|Bj zElAPmD&|@|a?M-AiPF8K&c;2w&tVMAF(pIojKLxRK25uf?p!>@()s)jH6voIUp7+> z5O8GK3A_g6{fO{H6A~tR6Qn`G;Iui9RFPMGI$w8~erU_eiEE{DXJvX^fwbsz839lZ zz6v=(ItzeFuZ;!ouUB|Vs6X&uZ7(qe1rNMiTEZK!W ztb(J@t}Y!$IdWiC{GV;p|G86q**zapk_7e~7uJ(YXcqEaW?!#GF~(4)vP0j3Si89- z`Y)T5W`t(ven<6s^cqo%!W66RX|-bVhnE+)a`Tr6m0;Dhk|^_1d~lGKO(vi95rcgu zuh_pCrT-<;e`_#h{lE9zF)JI6(nn-i4(#RnURaC8nc7y@9Dq#gFr|dloi&6Qhawrw z{-$nNLz)vU<9$-tyo7cG)vJ;%{~RA+_wZ8>mMJO{qX7uY?xDPbL-I|<^1u%yWegN4 z(A;@yDB#YxoQP43Ug}xoiF81kP|=-Y1~ zBp2ky9ISwD(Au<1sFvvzF+f0Y2F*aTgh5Z)WTNzpF4X>87P8!!ZN1-CpM@{^7-hf3 zpGXex!cf73KaLo~cEv0!0-&XmIC_2sEKSorc^vq&nn6ID(+6H3%wt#cm+olH><%Q& zoY`p9cKJ+(#4Gr^j>cFqrg;w5bVb)Ke>H=hD@yvioWjaQ9mn0)`LSM#xjyhtSx0;TK+Li}@20>yVQ?aQ#;c?L2nrX7MclzMpknMGr~qwOgUO+e1^?o=YRrE0pIL^K@bQ610T0c1#SRxq@aSPYjKmS>_|JW-3@6bw%LRQO$*+X{-A)y1O zJ1mVjkDdEBcG$7xAeQ0D=FRI4?!R=qt>plzrBxCE?*(=roee!u9Y`9e7vfG^WXzh6 zJnTPY2al23GpJA_iN~NtvEBcy>|yZl!u@B{U7K~g7Yi_PG;=llZ$w4&?{`oYEIjDn zM{g0P?w1*I;Qwy$|08Yte;fQv9RJL>Fho9@(TCAf4A?ikq0pQ3#zjHZ2paTlz!Xt& z@YeO!<2a!P=X>uX{Op2}heeOrBHFIi+2QMymymVVlVNIxZh6}i_mtQ~U(OKZ+Fvn# zJCp|S9cA;u-FVjk(!T*80FWeW<{Z3Ltzf*Uzg@*9K!c~rtAK#y+FJ{x^!G0hI(zM< zC43d!{VyCD0+kG9j{ zl8Hz~6qz$v{5FaeA5jvA2Paj=5f?yjLOUNbX?MVXFT)ja4l6F*0m~AEsx`;cq)ZB6 z#D?D3s|>vb*RxIN&u+0WDaz~8tbyRv9&Lo@^epfY^R0{B%uO2w;&o%3w1W8Cp*4!h zK8(Q?yF41>=)?XB>oJ5Ap2zqj#CuL>5jU$7SzUXvd{F7Qn~k<9?B=E0U=R$C+po@> z6-{g#NOs|(D4cGL8^L&i8jpOJT&Bx_D*>dP@}wE%!2v{tLli6Z#YpacyAMJli-N09 zdlb_jOYV0RMocU9YY*#&AJ}^8RK=1xsO$ZzZgh$GDP^tE-Z}`vXkr zY_a8T@95P%GtCaOv$yq#p-D;)_-Nvzumq#>5V-{WI=&5+4W0JM!>EN|?OY&4;Qn}e z1Q%m3TbPM8U7K7NdZYPw|BAAY!3ji+EXAdA0xG2wP(qjyy0}{o7MRb zSheJA=|yKXV!A_&T4-^t{SHHfP)%K|t}f2zUff)KGDk=KuEDS5+Z~1JzCge9cIq9I zEgt=$E*jh;a<4%U&qWO>vcTJSzEC28z+`hp-4WYfkMwzW!U~E>l0+s)O{3;&6`nIOSCRwcL?nxoDkb8VtR?GI z(X*4^uT%g+HfHStd>s#=Qg2hcw?ggXj2{)n{fOc&PZ7adva3(F;`uZ@2{A*Jf>g0f zPhQ^+Rob)QC}6Ox8`i4{K!xQ&u{1TaMI{#uDK^Yo9M3K?nG;M(EOd{RD^moa9Vg{l z=D~X0;YbrLJn&7pXs$mfY83K@>Bx_JITT(_C^~-YPLN{7^ZiaK7en9sUUYeWv$1tx zRJNK0=$BQM`B87!(?xftL+s0s54fldPG>qWk4xmAgqNowFb4#AQMwj$c9rA8Qy?sQbibhuGLABHiI7)$+IdN3af zNyZ{OIIZHrJ;rY{yu|s)8PKdJJ|F-vL*2%0uEmN}a8wfKzPCSlCH`2RmsO0)QPjOg zgN`hm${+@@=_(`~MTmA>|bv$bU{}91#FQ81$D+9>CKtKXGyIZ~m zhZ_gt`FzU5XfB(OZa4@v3L0Ptwp})bFib;pF5^Jl59SsGWT-tv5!SvNE(Cl!wL-!) zk~0bo%W5AL4%rr?LHy-4=`Kwea8pIG*YZx2r2!Z-FO+?|^EkeK;z1!NpW^T09=&IWIA{8F&XKLEzE4|b35}pE7_Ayp!#$iA)z3tC za~vES@ETAJw365XYxuz|M}$qWA@WE}^7nl?KgXE^P)nqD9|t>>oT=`4xC)qt-?+mz zDkzThz#8Bi%Nh4e3d}zIFrUsL>09vcTcdMgo0pvDFB#@m2Y5`{J>!~3KE=oSo}kBq zN$G^s_M+w8F^Z}`(HY`=PWWWOw69!*>o&Y6;z3FYIrAJ8lDITG=3iR3sl-9&r|K{5 z_0rz2FE^8jHACf~qn8i9P7d33j_p$0C6uW9IM{A{)yIH^$A3`QC8;yLP`Bpi4L;0m zGM(!~dXf`-H19T;lBf0iq_IHZbBeT9N=et|lf1%FJH1DZ80v3hrY&hCTEM1n)}Kcg zasrrom+pXn&0;tSmyNT`s)F@n(zLRjS{y-m@V5hV%SKvC7cD$fPG$f7H~>V#m6KwS z3gPCYja7v9v!ga+@T$V`ck0h}IR6|JeBg7)f zE};a8>oC-==~7#VbyrtSDW169&5=C>r2({RMB&SUw8)X#kb84PNr{%g@~>InVG{*T z0HpL1MgAJgkFxeNmE1dvJalb;iJ|5C2^PzCMf2^6<0e-~V~zWqJs&5F0$@-@1dLLF z@07$b%3jCf+rj-@=yHCY!+~S)03GwtV{^lTKQ}@ooWzDt?capcM+mFMHt- zs%Q!i!mdHQzEyY#M__9W1Zz}LDoUAi6SDn=6Gni5Z%V!}BCo@vDxuE8B|Y8CIW&E{ zm@^F4KXw=~AvZMr9YHdNVVw!~vQ(`S(P7VRFXyDneYs3}B@vw!A-iQ9^NGyNf+nt} z<`E2|$XdD?OYJGt25;xj%w586hvDAqY<)WGCQjwa{2whxRws5rX>17%Yt_POZ({>+ zgm%Z)OtQztb@Sv0hUZyg{Yh9?Ll#NB#m))8T-=>n{*plW4gK`4QYS3?RELRkDdUMQ zFwKtedosy>dBQ&}TgkLnxflXsQcVWmq`j(0T}u%1^>caEb1d{m8i@8pjE#3wtb38m z`Rr&n%|_8xe=we?NeXr-6gK>Ir$|mAvek)1smeIbHbeg?hxBkZKQ8rD&wP){v?x`A z)Rw)5|6or2()_g``6fSra$9;6HZ?CBzDeb$jyX(suWiZM0)Uk5JawiSi-g*q_Xm&j zA}nU?LrAN{gQpWK7D_7IMnd@zrx6F4X?YjFlQ+T|J{d+^0Q7|F>Vby0-%0u6uK7C( z`)hZaXYORx%Bccd*NnF)f$C^r>{y_-=`Gxw>gCC;#FG)a7VU_K<{RwpVr4=vK)oHg zc57Pg$r!FQg$VP(+V6g$XDk;b7axMMI+xs>CHyO`-E$5xP}xTVo>>Yc^L_l`H!NY= zlnkr~I$tr+-A!@o?@$%`_+C3vbC_qbZKc*NGLS-|+m7M&sgAH~Te1xM?v1=nI-Kp( z!m3e0p254d4Fh?ab+$4RizSr_B={!z*B0R2q{{)e#cbb(HC$~IeI<6~SjY72Ib3?N z@11jM@B7=ym@<-kbUSH`u3bk@l6^GfOG~m;u>P4Xr{bPjgDGDcXvxGruVSNS@;={B zrSOcjsNv9yl;n6w8Ng_ugCDt>)mfz}9rzux{p1MypM!Pq3+LY?o;xNocO2BfWGX}~ z6J%tPYmnBx_9iG8l{S*G(Z{Y<>FDvKWd{-~80z?mfGEOFEZ3-y=&4s!P?^-C0Lt*fqXYrG9#8ar^{~g0*Kt1g-fcnBdRSw! zj-nCf;!2O*z67ZZ*{3s-^t%-LGMoX0E^xo=L6w~mOMc&<1VWRpL`sVEkG-R-l@K~D zeoUCqWerBPb0=QY(C}kX3GqDGkg~Ailw)3Iv~Q)ZUgvU<3~1}No-M=3oZIw#Ovw2@ z6sP(-I1iO4cIXBZI0P%7m^G7%(fHINNv1mE&T}B;sFpO#YeGy@^y3x@$rQ&ETxT_U zcvSvPnA5<8N3gI}^MlZ=PHoQGTg~suyyQNTkH09)yUQ{nxTiz(GROGJOkNM62fNX$ zn^ogSbj$IwY~QRn9w&l6y$?DuabOy_%{D&RY=FlT3=+Q=x`3-x>kewM?2`WjbRI1{{YikJZS_ycBa$qvi_7S>09fxMKV9U z8~(NK{-?q6rES6M#F;glT&DjM)_KcN2RHDbh%W>if!jxOq& zd4j6!JlQTyEA%Tx7^CMUw1qXn)stWNy8(oT$Tzsy=c1Y$HI6nv?~N@fvJ;-R211Q< z$-t4Q8-ha?C{^+xjG@%SodU+zImXM#-j!Q~ngNMbVPu+ZyH8}F-FgN}p7=g&+l3ze zzz#*?eyh5hj@)WI7VG01$~cDit%8^8OmU=?g>uPMT2ZtscQyAt!z&RVe_&hk*^`h znKa9^;8}m3$7l%K8hp09jcw+L7yI0^qwhy-^PmGwkRohBy{m`)M>omM6i}6yoo02? zn{akPSys2oYT!xhfd@JUd^Z?B_|Q=^J&ua(4@K(K_pSpwx&?iNtrl=aq9Q$bS_l`pK)!K$juzn=c!%wb+T{n+E2|I~vHI0Z0BOE_TKlIB@dA9F2(}DAFSbRsn zP(E;|aHHFXD5zX$l+CKjq?Q$Tf8jYkDO2+;QA)_1Q`HUT`ll!aB^4>@Zz^s07UMV* z38$MS@3Q{|XSDf-S9p8(;N0Ey6YG*0t3EgO95IVAy7J5q53v3T`bgbwIH$U|b0 zY?y@HD1dV^Z?QOk^@1 zLVN;#RQK0ZM!I~?sX`y z(jsNl7934FmOg?JF2FUlYnchU-}T%Hgnqn?Yr(W?fkP>C9)O65l4Kkl;t-8l5WA1p zKe8?l3*_oHGhCoIZecc3$`baWiq!D~aEd-3C|BOY875}h*SOe-CM=~cMUj8QbZ2|Z zC@(-$iCAL1L%WX-(}$dQpUe0E(Ief@B}Fuu9(=zx4z)k9W+az6#_f$+PCH9p>ise2 z8V?00GE|FbIiKB-p0Wedbu|3Nr_-Sy)>FRqEDIT8nX6wNuCN`99;7xHa*9(4rQ>xP zDR`UX(FPl=H$v{ROv*Gqg%3&xWrNjVTmem`FC#`e37)4LLep#*&7+VDOpQ5u%c9B! zbH=VXy~ee&zeg8SBfvgn3diq_y}5M0TBv$d8+EiH#jV%);8Z4CP%(-n$n{oRsZ?&<4mraw&_KXPhhDD2=@kY|?~ZP>3O?g2c~D^9oB* z%s2MxmWhr#ko>y?5Kr$FIe$%Y!CSDtX&Dt{D8f^8h}ozi?(IfL!YoJrvv&ucYHugH z$wye(by$2?5ykL)v3>U}Qsd9EvZr;Ilp>So+z)=?`8~>LoLfZJo;u2K&Hj3|V2MJf zxJq2(xJ(@uS8kMS9G`hG5=IwkFMfw%AYZaeuCOJcN)De!!^utd9350d76LZk;GPMX z&9O^^%jTZz(LpaM0jn6bho}5});$SDxTw#z0To(3JL@4w=4lIn+0HC)`giUJ06@9+ z^opF;L0-vhtx0jdb&I~}O5``|Ae}5P-5U2qAETQoV8?88wHx`-w_Lw6cZ+q)Yg-LW zx7J0B9{ukkl$_uU`Fh_PK0D;&S!MZ}P^lQ%^u?dz%oX8$&z3uyyllT|c95^K8c^)e znxgA&L_$z;<|%}hyiVV)K$lsOOMWf9-zC;$L>|%ZrP6TkI?)hQOmWJop!FCICkYq_ z3MxZ67A&M<%BiMzQWbvW^-8K${H|i_`5Z%Somk|d&HSq%hDt-M? zyY`E^xb-&fW055-j`x|;s2O!W1?PnL!-l9mmbtl?x1^w@D4hulM;mk%g01bzmmYy_ zR!UQ|&;TJypAGbte9~^mUtDV4vw9M-G$%dHLeSS{%teF#A)r5a~o=5=uw~h`2zV_zDIw%gJj4DPDs%%t&5On3{ z2O#Gg7VCG41?FWM|CM6U^)|ib{G2dcz0nyfR>Ydb%lc(a(s@R$e>c?n;<9)>3JzbC zc5h@A>zsLT0nAZkF_GWXcUFU?Nz_EH6NiZet1VdpCa(6NKrs^*ZU8*M2P6NAW*9L7m$g2+A526~ z!C&uGX+c7S6V~3*fWa__*`8i_WA?eUu{v*+5)qVd30`F*Cg!|a4?Nu#$nL0g*g}#= z5Abaw9BB9@q;2R^J}ToYBA4P+#hP!)wPzp?<@FouW}~A%X)2g;U*C2 z>+s^N-M}8828xZ;oCGi^1%#9a4N6L9)`LQt*AgCb9=3lsP{nPa&ZtYB)QxD2@4ZAx zNJRT~+M!G!5a09ujRBLl*YI1BS3>X4H(y8627xKrlpeqO`hOlW{_p8MmpOwQ@1bRJ zekd)(9+T!%7$3KcPA#svw{a|-!CN_UVdHPJK^~L+v2jGx0j2S07lx|rcD`g!KRt+P zsxCvl-`L$P{Xd$Ab|g(?YqdOOtRzsCUPsqw-EC#h6{mkh2KOt;sEsziNGPmMpwwo> zjYV(?dF^17e*OJXFig&A1my2NgR1wmrL9gei%gR<`kp!e!E2I)&rN`d{6@XXF)R*3 z8Vx+)fIQIVkF9cp@B)Z^iy#Vkj8~A_{8_vjE@xN4`{Zo<9^JgozMG2iU0|x%W6sLw zGqvQTj>MaOyTl&|$3u%9bA<{!Vaj8(GGaoNEkIPT?V3Xuf_(tl`bID%lnB-Mi7As+ z9a5$XnzD9ip}>lv-{26dOp+H44ATQht>TcqA(!TLwC>FaO-K;`5#%&fkG0 z){w10Oyk$VxYp~M77nB-o%Hntdwh?SJX`#E+7*xoIu4QzG4U9IPx>I$e9SxLXfdk6 z3i+cOMOoN&dwAeA^Cg=Rt{^+{XzT&8zen^(>Cf@^Sg?mP0XeH`?SO^7=T+L@bPpWh zfIDG-=0EG?f2Q{v>;jgtL3u@^zBryOkIwROQNvX>?>o(PQWXym`%4=C8b&il)W287 zW1L!$-*ziM!(H9R?j;mjp5d8<)QC((L2}VNwYelepA%=Or`ks0UZMYO7-jpfMzDV# z?y>zNlKp=to6IciO#eDv;>i{fy|oMgP?p--k<|FL(0$w1e13qtZ7Ou9-IDoPmaEwb zWV0+|K;*l-Lt>AP_D3sy%;am1)@ZjUlwSnXU@3jK-M7Ct5#;+KJk`5pjQ_L{6cLXR z>$9^`?m(I2JCmk*fUAM*!|`b|eR_d$q*lfRg%BpOQ;EI24>10eUxmbY^6vA+VnY7G}` z3N@_=Zej&w=sR?QEyQ0v8gXyBH*z_@7IUKEjgzf?XNQ8MH&xk1fcDSy0;iV_h({+L?rPf;$NfT~kyh@e%^XIh+Br|qk`I09&)Et|-lKLxM z;%Dmb-!bHU`}%iISwH9#f3Z`A*Mqw~(Z6-4vf4o+#LFAFvxt}lId|^cB$Rxgq)<#4 zv{eb}7?8iY*WIE^l2?YgPE}bjH!`oR|JmUFw5T8HVG;WgshVgfKBDJ@Xxf|Z=C3NM z-)byYmoQf$Uyd^reLSUb$4$%%xor-jUJ^GHQRaQH`Hc}HOF@=qkMmT?!W1Xa)@On@ z;;ttSZnc6E@1Z?N_Dw^@x=Fdzopa?TBSQ7Mt0y_*rt=_gwV>e`3^E)0TVc|PYr7?6 zYkE=!iir}L>HJmLbBA(?eGonmT%u-9t87pTNpcYT+IJ!Ar(6={rr+e&xcqo%?)aAz za;g~{!N!K+E}fu5OO@0?Kd*hCpik&5Lh>W^aX28|28(_qQ1&>t1#UopafJLBad!Sv zjk*ftcyBz6L;Nv~q}?hW;V(3jNLmo|l)a{Td2_~$rYZ`3eb(C^>uAYFnUIA+VWK7- zIbvszz2diRI%3KweFeAgqMtFxo;f8ExG>~v-SqOXFT-VfTr^pW&pPJ#p+}1a4w>-U z$yotngLfr;;c0FP-Lta@Ij(9j*voNF)haJHCg8)Q!v#cqKz7D)`!`GKNd}mHST+G0 z9zitbh;2!Hdu4HlrAsNsA!pe-0?s?=D8cH_k3SjA+Nx9jzkNtn=jEXd{a9)JCgeD_ zmFpOAYh0oW9fMLe-{FnfduHB2mGhX^o2u_grZV9T4beP(6_K{pp#q?K%yKe)K?gOS zSSQ_x$G)nK@C0}Y=uLmxJo~OXXi0dTOvXS5k$E)e{bFPp)Lt24E!Ts1Y@kHe$y27& z>5e5ZBx6(;lhly@5^9lLdRT?b>>_~$vloXnQL6yGrtBi$BIZYYK4pSfmoH$DgwDzQ z*{%U!ZMni2X(o5Elq?^%fg#F|>%=P+6a*hshpRd>8h=<#nX#^WC@pb^(2Ckl(sgyN z@niWMGY5;^`+m&cHXRoxdFpDjm{ur&FT`gxA*USXI^~Y&E!1TX5nQ%mAeeD~&mhZE zaJ;ReIfTZ&1_G@cVgUY`Kof-_r#_FWw{aA=*tCb-P(c~;v7@0?Z}V<5;m#k$!&#XG zKp~0b!Y=00jsz+dS9SN#!JySlzy-H_q*RqN>k)_HSUwV=;$^(kGzKG_u`;yrhPRO# zBnRW}7&XP$Z_q4(HD@s^oo67okO)9|xi&iMOfe9^e~P4B4uR00Hoy)sLiZ2QMPUF*`1ZFxw60Rr2oO2yjSw% zxKCBNbme;33lBV@)rJ4LBFcuIi zw(*Tw1*Oyc0K z_UF3F?mx)$`zM>A0!YlEF36I4n6J!E|L6)HtT6Hmz2ZmfEm)1T_yX`OcVS|O=~YTJ z&!FSv?&U|G8&Ss?&Kqd+H{y3WOZFmHTfJbA;Y|_Pa8P@P$w6wYQG=5)lFXgXBUCnW zFg<*QvMBCbmE341rEKi{J@H*lEj9@Qd!#KAb1*|xQyn@PT8fN)`-cq%!c4M4v_Q8^ z%7NFJ?H;*hgQ_9bEjEYv&>T8b}5>BRb48b3&)bIe4va~xBZP0<`DWG_jS+os3?2S||DqVp zEx3s4Hi#XNO*EFONP0>x_$&uz&{{Igd(I>(G&gI8!0e5MNPtT(Xn)PYqfVT9eoZO@ z!_Bthc&?t0A}C`MW~^HPI!|7amDT8uAyQfwblH%o>Ei5E+DK+>IhnkD=9M!@XIJ*r z(L@>mvP%FP((I$2aYW)KHBzbP2;W2}4ugAlEtVXHmw(YPR@@mg1#@Au?iB<_zZWPj zm4rW(lO&1of+;OjSTm1;d?k8QD=Dcc-6fUSjBL zQhuva_v9c~l-`zMiJ;dLr+S-4d`!gb_pXjBwGF!mrA{@D zZ23<`>da7>yO;Jhi!S2!C1pXIbZ0>kdMRbunj1Wq3bsNG+c_C#u~8ELbqK9+GYZm) z*Ug20@bz92TIXg{!cU@#M4QV$6CGpk+ig?|xFu^H{cJ(gr!|o0peu=|w z(PT>}q1>kCU*L=tPG0wJOt+bNm)5OzsYhB5B( z+@`eWb;Gxe0>ar=k8*;QX}ed6xrRl+twf|k!~;^(J)f_O9~UpbC2(RUQY%xwjRy9f zi;3wt@$O>bOyHVGqfg>B@K`v!I-Wp8sfywA6nhizvfk5wI4BXF-(Qoe)%~m<5yKA% z298v~cLB5*>dr#{o-#8caL-{B9zG+QFz3(+udhPvUDT77NNi4ICb@DW7}MmFmUB3- zx#Yrqeqnw`cR~VgFlr<-pc*B2(1=PIV;WxIxV5%ku-dg~3QmBbY~6t0saF1t~7Q*oP9ffSVBq&=8)e3;)!?mGkViw! zseWjbht0@If+y2##|_tpmDC4Cyq!`y6`RX_Ox@G+Y#vcc=|9DN(uSprqsh-xHFpDd zE9gf|ab8zRa+=IXDO$g{^0wRP+0vkJkMkWghy|x@D1>Y3O(19gHT!x$$v*44&hZZ* zXHSACb7ij@$IUj}EF^WZ{kcS0mq!ZdDRbiI!cvc%uA0FU@s4$$mesRx+6OEx6SUzf zYBdBHMdeE(;K}M`rW1088w2t82x80WHJ4(gH1xdgy;{&mVhVSB&`v{nA>gien%IgZI-on4^o6F~;YD4rXx zTccNzQB-xoz(**Tv}%`y3n=En&?I5Q3(yQdpBFkI+G$ZsCIfZ#2sLdjg1Mjpx|&kK zMRP!6JavtN4u;L}C|wadhQhsB>=tW}E>II5gsXQ5L6n?Xl1COzvh zJ*VQ6q>^%5eEiG3SNBR-C)*uBHSP;X7lY}Q`EdacV*!>5zmfdm0i7I?#%Aw{xvvtt z+BT#>t8Qd@IZ;l8fr*J{gi(AA+Ts_|}NEpEyP-DJ;&wYJZW6CG8_DDCdVo^T+c zc6Q{G(2LU(2;K=3;qBJ^ys-2O+7Qz1GKZ-yasV5y+rVbP`4LuuM(Ldk1}V5zGK%yi z-cHiEk+wVjd+&hk=i@=SOlupOGnAh3hH$L}te$U%TG{K_P^HTmuDe##_cXPdCV){6 zhQWb`f89!ZL4+0w64T<}C2w3o?3PgTyZ-Z?{L9+>U!LqZB_5^IR&O1r$CdcstC12N zCm)-0-iI{fZ9P|dOG!dr?f-s`*q4|ub}X9(0vh`JZf(O~?>o4Q#=_GS)#(nr<|W2C zg-$c*(g72vYdok!F>@o*qV_-EBmRFyLhSz%>i;kA5ezK<62}Fc(0rWzO3Rt4b?Y{m zJhwi8$1gD~@?*L4Osg|XLCIve4gpdT>br)&T4dUr8t7ADw_1xFr@h5`injw{X;(1x zTK%R?%`?vG7ZT+N0AY~?Kq+k&vt0B}`bmWKqDOm5b;o`jV5@4`468nu=v@|guMnMcYDTgyOV2|i5)7BLG88vYy{{^|j|s1&*qegici zOO>c7GCGgHy?3rghh6s+QNaf7DLvUh!-o|CO%#SpcSW|LP)6caqN^^d8OS|o#K-Jo zkGAJ^>Nf#wXYtEfnDTo;z69LW>^xE;4ybQgnu{m9JHU1oWPW(UVCmu?yk{+;o(KC+ z4zCQBj6j-&qla_?weLUUge>!ln<_x&jHM{r>xQ#f4$C9y6hBoO^IP^g@QrhCqimms zL+{*2uk0`~bvqA2aEH?lrNL;1KQVu92)cHIFH$L!;p4quzf+5 zf@yT{GHskUxgfX$zF=sPo9PGRCndwQ<&9yOuq83{w9#D}Al6!&dp=4{-g_!%sqaK?+cso}XjOoeede$r(~!q2#hkaVckE#W zsrIs7owHuxs0u@CLd%P)9_N^DraGQJ_Opk1KdLS3WlKSKXilHHpKunw~w8 zC+8M`*(}43XbtU;&^75oTCfA-J3)avgj&|kB-YcQD`XJZxsoZ(n+viUJRy?Q3L1Te z>FZfBLCGRI45nDmK|n{EqhgMpMB%cITjbKQ=1=vAsGJi#xT_I_!~aWydCB?QNXgY= z*!AjzUHN4W4XCrPWX5?T4XW)r=!_RYt#1Yz%?Kky^N_77IR({7#NG$!3T(sd*z+1z=6!VNw?Pxp6#06I8st9MtlgJOac5Z zoiK`)s!`N_&XLxb0su@3{RzHvfve)0dQvtM3LnTt!+AupI}_jT7k1rhga0v#m+qT7 zINLCK!bI?3B|7&NBUXSqK0=U1_8~Cp@Yn4tM4Fr);LB7!ER3(QSL7PHs_jG@GKtc2 zLv|aYFG7gbbLven`7X`#wAd zkrlo`lPtKmxYR*+=Sn2loWPv3@nwbP`M4%woVS^lo&^2b z7IPvp6RyZHW<_S(y4zM^mXCi|8^FmxF@352BXAiNw%nhiv6<8B!p$V~2wpnH*0C)H zzv?y**b0QS%n)7RO3Dn_diC0-kn1Lnubk9{m}aN$m6NZ7>>RC$AoX>nzXMjrbI zmKNPY_&|bfrqC?1ZbS~0Bi9NYt@QrhEf+|)R1hPoYUsv{VjruMP-xcYKcP(pJH0W_ z5=imkyGPwa2=eD9?~sKwJjyGQ;G8nw zy3xm4a)hTnM1_!T#5~WHn6Hr371eo3vlNLkWxDtz5p7&+;)#nUm!dPHIgN?cN*~QO zcVNvWhd+yAY6I`G2|^oQ>naI*_cmM=R8T@Lgy(y=a%*zXI;&ID?=k5~Y=u&9;dub- zPdCpbMd3fWEk~3MsoeQn%Z(ucK=y>Z2Y{Hw8J+4z2wC+E z%PW~8fY$=W3l^oNwc3SgCsTA*$Jc56PJ z`4T1|I<<_Wy!$-Lli`tHnszBSW^Ur?y)+Z&%b!HrP^Sh8#;_+C#v zc1gj*VOVs~1k*ySM1Xsnn3Iwh09pv^^(15ep`o~mhD=CGJQm`pK!hhkj=6kA$`7=lwN-22 zYJpR&7qmO1JdkFkBcPM~i&{X+MCB?-dZU4oRiVM1;X~7}GCx^aP|hcHwKD%j7Va;V zbg*#PbcPfqS*@69_en+MrKIIS}4a_~H2M+_UqVfzXpJ|x+sA!cV z5iP&CVHVLj-kb8yMS6-GhAtf7L6=30^o;J8XUcIgo~x5m^hr-dhCT>m1NP;gMOE89 zO-5~atp>ZRTflZV_|}72vff)NrU%S2bv&ru%8TD7Yk0i#m%po@;wg^(F}6mL@(A5} zl+8r3+XlZL!_f~)0x57_sXrre6HqH@3;Qksq0URguU5cm(c+d(89gz(w&yT$c^;J@ zXS6%sxx(C!=+Ye2=SMk#D!zH(2QoC-Ty^T57fE1|p|`%d-P7Zn-{Yr5kb|tI`4Cv1 zR)M*+Ocyzr3uWT1!feLEL|ifuO?+xit9{F`P!J1P@!}=8hA&da*E844Dxa$P)u_&K z|FFuG82Oz%A3;0TWJV^6V4=8}s$-v@4gL^PXbSOiJ9mVad$UYZA(?!#z+955Id*H( zy0zI-Aw4^5VvDq|kh#jn=fc8)M6&;lS{=`CLi@ORvK#s;+u~JzSMRVD=jt&$Y5Wyv zX;t(xG$dY7a7k%(qp=~LPwjK-4-#bl)NV1KQ0NI%Z}G4iW**|ntgARqhV^8?K_WRf z_X?vfC1G5J{6%kx!M^spZFo(O-=Ah%TIj(dL~yh@X#@w{!n#}tQ(rrs85MWUR{J-` z!vYBQms6dZ$-o(S!@LE^x-OoZV^m*{Z*v<0kiVwau4x+45E~)w7Tm#-PL`X=L_SXQ zMdp!zIAsR}t3k7dKyE*&Mdt0<78_6mzhY$~(d|<9^51vXliNzZKx$D6Ou*mhV-cu! zY8ug~g7s!wGbE@yFD-XbR`H5QO&(KE<1omZv)C7Rv(M)Ru`mh?!ot>a>aho>V=TWI zLGjide(CYYpWU=EWb-*TX#}+|dy`XZb5gqY2XW(KsMfRvGRXs9^XoCuVP4kY zV;*`Vv%OCm6-^WD|0B1s|G)3cjW`~jRO0)l!G9LyEWn=A`eA9lu$NPm|}g@a_3&u_u%dkZ1BF>Fw&%+kO*&+TUV~1ClI&^@1!djJQG?s*k4e$o1gLM>ggP;3qr zs6dyfH9)%F1JDTxMnA4a{4Vt>g93BD{#0p@?e7N zLtr@-9#_X1%esi!mwzM>Q8uW<{p=j)Tp^E=C(L;KY<1*u*dZY|Jj$E(lU4(Ws5Emo zeqvoa)Zyg=rpXlnBpwULpcF95U)KT;3h4>`OY%>3>0Gh8m_Gt2;o(W9#poJmmYT+a z$B~Bds=x!PrP=F=U{TG9VoK4f81JEXjYGaTQ|#8z#o1W1vGq;@o>NVkvFQuAJ>;YG zi_A-JZw>D(zlo7qmZKA6<}vJ6j;pgb;b(8MY~T&zR&eOZeJLttOj z80ceBwDN>c*ao*vSO&pF20LW$34OH%#DWGCXqxXO$A7+)f4Qyyi*IXJH3eRoZxk-e zIb3a%(rBBPIJ@yinSRER8?R!Ljm!U=ZgB-W=~x%%GjNRl54`=~H~K%4^6dYT{{Js{%gFREymf2V_0|PT zcMEz<4_xEgf%iS$i4O;_e?%DTylr|n+0$x*=8_~p#Um)8;Irn-95fVl<^auT%g*RN z`Q?l4f4rV!LV`$Y6^ueDM=G=0_Gc(=9zHr3f_AESq8QSRrS4L==D{A6H)C5JCXWF8 zk)P4GTqU!-)KhN5!Z14VUR>a3xSn=ZMIPgSC3rO9_wl}Dwy$#twb(|G$K5=+w@*Xd zPtj_`Sw8k+a^M{3as^(-%kX*suNZ4S0lY7Jm9S?FHt9z**e8?; zdwn0GSSosJQ4T3Nsa#pDCvIF=>ZcM?4Z!pvBH!DVT3ze!b6jTpyI@piA+Z{X1G!SC^LOeYrvlE&_GY^l z$kr%_`cd)dpGgqlHEt}&{p~O7HouBM1TducrrF+Ckr;{_bd+to_HLuA-*nIp{^HkD zdt5q>Ohf*=m&m0nV|7sRs$K#ngbq`oXLb14=}-RaX=fZrp!G|l^bP(=U|jf+jRU+6 z3s)Wk)`lD#{E0y&Y@b#}l4)3<=+}^XkwKU`G3=aZ-}F04Vyi@7bT= ze1nez(%H>}Ji$~@RhNN!h4<_vp38HD)k2D~yKeZz-pd{lI{=3=s=o*dFA!g=M)k1@ z)s$HVzuZuH6$Gl#kM=EoC8>sYJZNbM79;ydA0>FW&4HC1k;hHRCE;LKf5!Uzm(JUH z{lq0+Lr`C8>9wlE%v#)q?wYh3o$zFJ`Pm&L2r#=wVzB z;jFbWouH&0R#o4(-rN7YB!3QqN5>)Dy$=DmGeuWEp25-}VYTcBk^4W$`TD|r3F!U+ z)?M@k0-#LXgV&i*fVQbVzV7n(d1s@I067B97G9XV#JDeFF>6iLxEJJ#;!Of>G_|P3 zrx_Exo?6;U$YEl%>Qo_48a00A0)iw<$($q~WlgXhmABi@M3E}>l}MEy-h!TV+I~#_ zGr+`Di-7`;;8z-|<%!fj2vyEC7dg%r$Xhx`bk}(*s;-_hAxF0o zRTPh1g%!`y4+3JAm!*rc-1|PgVbFd>SbQgL4o!AKiN}?((jKLh4Zopuim4eQ)&)0I z?TY{j-(Ixmg4i5M%M|srVZ8y$LO&GrQV)De{{|dDBj{`pyu;`1(FwuFRni@kANeSa z!FoUdTlSDXk_SZBY?PgU)?T+B zL3~X3n7h{LG=lV2cVgy(SSKnk<9NV+@GEC0;v_BHqMXm*^|(?nN=J2Ojda`<|Dz!j zIMqD`<0cPhgvTNEQImZq!^mkMp}!W*f3E=z{~*AUR^%K;j*jbES0$$(JXbVQMm7){ zA*z84_)k8X(A@O?6Hh`joAjrpvaRiW9_r^=g3Ol>Gj%PI{lfPL_m6<{NrNr^SHQVP zQR9Qg?x-(^urpAKIlC#+Hl=q`!KQh^m-?=(g-S0{n1zaU$`u+aPPCod-jGGXl?9?jkMWT87)7U%Smc3A4nJAC4=r-$#ms2VX0#=9HdEGs;X=;xL!# zlXd2qA3N6*tR0*iz5;E5U{c-Ue$VhfF#5HGB&n~huJ z1V#J(eZRgD%OxPF5sMXXJDKTgw4e{5El&b}CkRsBb36PyNsM#!&_yUlW|vZ)SOGUm zk#eOB+{HC_oM!HxgoC4B=$rvdPxMVr@|z@F9n99T;=JhQO96ofxa_dD&pBE>b?M>Y zTjHP98g|iC404cyXdKTON*u+t!B1AbB}tEJpGs;G>K~>Dh0YQl0&%38s+DOYe&XjU zrhkS-wH&soYOje4D1bx(EH@IVN*t*fG44y_4ivUM&9^8Hf6uN;rg z$zqN;X2Pjc+Z~#!dyE?&BX-~`S}9@R0R9%>?En5*(SOZ%DGP+{l|_7>PMA9U0M~2? za9QL`~ox);= zH+wD>gL#Bvhf|6*l%nTo=Bjru0=Zq z`t-v19a8N&uzcF5xUd=7AY4Q{vE(EMJ#*A#zAeG*i;@%g_75Q+ll`n~NY$}=+nvCA zmP0sXx1}N{@8K7RVKNZ0=GM50W7%*g;qphNLE3_M8;c<1eIa=j{ERWl1I37yH)*W^ z^7LEp$5~WFnEc3oyefv50C^XzvUOq{wv-wZm)M>1!1~amOx9zn_*p)4{XrBqe>Dq) zvcfT>LjlcYGKGrI*wMNQz6<&C>feOzIzpo{)$^6CJxS%I;y*&|F28Xwg^m*f2e%te zCxq=uls3D6vSzj$%P7C*Ox3vPt3D)OodTaxGol7(jUbetdAv z&$EI9(DSo#fyI;~;uS<`5*@bxp?YC+m*EGY@UZUCkIVS8%$#RAF_AJb1AUC-)!v5g zw5#!$Dz;8A71v$EoI1kXMj89i-MGJA;fEhr(hQae82_h&=tis}4X=PT014>{oZ}zO zaNy(S=_}{iHmh;zh-T5Hh_MuZXOD{m~?6B-a*ku0*3`6>@yngWgjVgb; zzpMPXxSmYBnFvE)hSihI(`52ND+lEn5YzVgrwik*1(jzlr*x7QNyUNS9%X$f{X>uJ z%M=AK=;fxNTxvSG^ZfJAYZD0p!8?)iErM_D$ccsI=Ar)oc? zJ}PjrnekQoVz{|22fWxT$NP-&UMR?zzUr9osxO6%L z50*3;O0faEO0O9C*epYF2K0f>cACfdJ!Z*1`y}brE&)>sFv*QDm~aCcGU^T$YC9AJ zLR1=`$RMU$#wiEi%a5NjT0DIUOhMH#m=(V+F~-7nn%~@F_tY)js_ggYA|k%iRz?m@ z`^A7qt5#qW7B&eigaC8qn7bxFpM*QiA^>f#{hOyb&=(L;@484`qVqRh^WJPUe2BaN|ObJyz3B=!#t;@wzC@Ku)#^&u9_pbDhGncp|b@ zRbXV=E^n8QpI;J!bi5lp@{c;DUv-xyya^qymZQTjiuqv7-Xo%`$Rx%ku3gjD*tRh##3wOnZF*9gI7XLv+;i z8ZODp6Z`U)BK^Dat3r^M2=GkG3IJ|Oi#YGIqp(H5McFvmZ$htb0OZJrE}b7#NKDs* zdZ_Lv1diA@LeZ)Qh@4P`ZT}0cG^p>Zl^}7hqJ(E`N&sg5=`k#OFgKOQy_&lOH` zmV+raox&QaIBpe}g!D8wHv|ydhz6zk)!|vb`4=oCfzxh~Asu*|dOCR7p{2T6VnV5S zwG#fYBNudbG33Weq;&|6$8=15v(s-m1Q`3l+Ah#8E>vh>`O!%9-huYJEij7L=&%Qt26i+S9K_YZdxt@nz^VUt{cezq%%32 zwLGtC^o$xy5%4yD98PGz=0?uquYPnZ)IdH;@Sj}37!*+;{Mpyj^yT=gt}oCU5ABw$+M1q^!SSm;KcH3)ebxhQf`IZ73Q=pvn47h9{BdHS%V# zfbK^peFC_szB8Xd<{TM4@17VQn*a;EkYd6Ji$FXn*vdGd=pR69Cz#+Mh<)oZ2rj@^ zV3E-P6>fVVWF|=~r<7aOkpCH%|K$h&FI+ZI8cU#M(xE)}I-DILl^{CwI#pO3_20l8I|%+`_XhVY)Ew@#ryhc*frvN0Z`LXy^JlX`4k<7um_*iQ`>6%4 zt0T3SY;lmdPRz-B3a`J(;gG<_{ z7^H@uyy+y?;u(3HAj;=?xD{Dn?+1Km6?3HuEdS+Vb;v+3e#VZ)yFyW}DMX14CRk~X zI#paDFjIkSE!zgX5+Er7SU%d?raCJ`r46F<@Rh8oZ_v;`t3$P6Jx4DxL{MB?HgPbA zLJRk@j`_3(@ZgT`Xra+ilRXnF$n}PJvvBNc)ZP77rg+~4kL-t{1Y)HWi!da1U(e(5 zgx$3Xa-Fp9*vS(K^C>+9ydN(B6-LG5>8ARFV)Jy0JVLdP?l80xS2*M0*!4XIpK%qG zv9Z63TceYU6qO^I(c^D5qb8I(f*s5mU>A@wGoPvPbuL(W*7 z$~noqE@fd?*eJoDr56D16iM57JPk9G-M*o1K5+w*)9avYIcI@c3 zRw$9WI9fMab51g-EvW)!&mkK#3y0KFN*)X4vu<@PRNg(UTe1nT9`46rsw3`P2+ahD zD%(roQUVD6OmP$2XziCor=||(_J`HLcsn{waQxB5qogN*yg6It;1Fat3Q&44DLaGe z80c1VgbNg0jO1z(z1xm& zjWUZ?3w^z))|K(M1d4O#Q7|(6v@(wPzWrrEu2cWqxG6eU18JmBgMF?5o1 z$%8`hY|#n`e#{%o?GgJf)ft7DV49=4OUK1C^Y%S8B+Y(cFEfqN#|Ud5Z&5tclkbxQf~=Y?)ihMpd&6cle$nU?rfuiUP$pGn zHE~C9i#+K_us=$-rGiDzQ%1mi4TcA*WSP(w)&KwufBQf-o8FH)a`Hy!gTq#3ZsO#> zS_;e7&$>9Ps6(Fi

=$sVS1E4~ng{G$SdO5j=26nOUgR$&5XTHEO`B&Uqe9%k`n> zNDgV)S>A&(Xt&#xXYQcE?jZv*QrLWsZ&N)t_eyQ(UsehZjs+Vv)EzZScjL|5N0yjU zF~BH^lW#)!&K5HurTNLdIv?0R@{zb$<5b8}r{K{Xbp|r-V3*RGTj|o_qs!`X+W8Y5 zUR%YQCpoGVa~P?qo@Z*xt$~8qERQmqYEu=V?bJs2rpbEt8gQ3X6_IV;^le?kVSMFW z7A+V9o8CaMlYKu2%4*G|mZ!WpEntu~Xtf#^>##b698RyIR=Ekh1+(Vw*tSwH&)PeXg6EcCL6zI{M zqhl43D6Vz{*QZu7OT^B^?H|uuTQzuiU=@&E8M|`+e((5Xc4m$ZwATJA5^{ug;v7+` zzP>BW_NlYsMfJVIDD=;I=o6H+(CNjz>jOY1c2g@fd(})PFBUiFEN*NPVYtRnaq;2) zbvwn!sW%r?rGYeluy#_ZP2tnF(008cJMyW`z{JngDb!ITtW7Dur%)^w<&AYd&!{5VtNSt!#MAx3xb4b=SL@(~02AxBL1((p-+ zfV71wiYflEZsiu=v>~*HN~^~x{P z-~m#Eq8^&7s$8hP*B|5ryfU>Lc%(nLMHQD19fJB*o5;iccKcbiJZl1$SSExLZSxx(^b=4Srb4

QOkPrISzt04}sB2odG}ha9+=tSVKI7v&msNo=Q@N_Ds55(XAx1 zr@k6QFa8gszY3w@2!*Ly03!x4^R#$_J6ZU@b@+0O16;>TUrLv>u!ol0qWxi`~X!|3!d zg2TXzI^bv_zIfmUmwS;k+wjbhbPEd2+lQ^p^Mg{S1USV}6sG9MqP9gK*aKfFU_~R~ z9w3V1u84XL#n!cGw~j||)Ya%L@|bn9o#pJiCKS$C7jl3Wr%{;lVAksZ@`ZIb0YmOS zlzo2P2S)vcaf;#6GmIZ16!RSTGe4x5aS{8nS-?*k4;lGT#2lwwuDWb*J7n14_VHITg9 z=whr&I>IS)B$XL{6ruheB)br^da1s47l<=JgTiWAyKa)%^szxcgbq3u=(N)jh`f*p zpw<>?Yc4FB)IUlXIcP^@+*iUU<^x>^f>{BqiiEBr0YTOM$Hwp=eAX>pXSMlL(?4D& z51qmd;0MM43OKmnzHz)7|4BGtxd9iH5$m$|w$zx58YaH+9A8SJpOV+6}ctUKOX zb3wC^TuGO<378rilBxBG4&FEcXfK!dk5~VYkC#QP)PIic%QG!M7{g-YklXtP$k^`8 zzYniVC@baYJ(ShmzSfqDRe!j*cjrYXHF^>)Mx10lG>33`zf_Yt&3yjIFc9}ouD2H1 z5%5s1FsHTVhYnj6KT=5Pqh4AQ%A{GJH!?9WrD*@T)jd?AN27#KLf1<^3}AU|EHD9o zX@Lp(R)2E}hb(#!V#?!w+(OC|@)$AL<{2{p89qZ90@fjyQ)-mv9Uq$M7?s#0$98~X zD;7UHh(e87Qt>*>DTf>=ZPg#@;2{F69+Qn$l&M%u#!$+aySY2xiX;6c;1G&SL!oo_ zgxjXWx2h4{{tp+R-(PmjVU4;(t=D-Ke{zEtx*4i7>g$Dd)f(~8-@dXPL6vW(9w9l` zbC;uiLC@v{NsprpW?V+OS)%^bHJ=M`&cR&uR}YQZasfZ#WPyqIgW|hGxogA3C@t2) z0nK%3mbM}piH$3JF<}y1C#&)1ofsSMXD?r)-Y9j-aJe7lm&>Pqk1}2thxaZ|KMb3M zkSYFEaUB`aiTL+pw332HW~yMJ+)agc@rk*^KL0(tq{o~shNeNR-`E#eA~E=w~b~mAGVN+Cz(J`TO>Rw7GF(s z`&N*Os=w*~8LR$R3)KIb%H-jp|38Ba%fEZdR0ag76PcBll-@z~fi9bW^RIom?MrsY zHpe7KVsl}XAUQ@LaZ13p;<5S~GbcaNz>Fg~W`j8e!8N6^8!DpwO2e?u&- z0v}M^4EcwIK`d-M^>IxJ>KI%~^T%7UUV8j-U7eo5Gs8LHE`5wWd!HclIV8I`Tz@r3V-q3Pu}hIYp54e9rjb^PM$ z?IDAOM%3l06$tnZgWp+GQ7`(qefO!i7sIZNv0kSW_2C3L0c9mfqQU}rb+ssv6cxT0QpbA4 z>*LfM8vHBuI>M-?U1)u142qy-s1dm5ox6ueb9{OJV7x~-R>Sg6ho?&3#@yFGfk}H>^T$*ARBVVy)LB***szfe_aM7fD1dzp zA*vQiz&R-8$2u-~B-Pq@4_Hz$As9W|7K?y)_hfB-i-rvAIOV~h@IT%O$G_~)|ApTj zwuj{G|MSfT}^}Uulo# zEPcvxB&c~o0=F1GY&nV-A=b@)z%N=1r>_q+USuk_RC=IeMY;~8BpEZ-s5cCG+YX1D zh;QPBidte;o?oz4Akczb39fGNsyMAy-Imhi9Kxhm?D9&MY4V?%+RkvB3-((S$AXFT zxK-GLzJmbfY``Tol;VVBoZ1vDu&wjY&0NL-M<258VQj&{EKSY=84&bF zT0-_9{iOo6f0E?3R81E;-;wdpgZNG~4JoIFoV6+>Cw(u2C5nKEurIZLx?`SFtOpw^ z2!=yV$1_ecNbU8D?`SzvPdj>t@ z@V_dyN7yjgN_ry~Znfdr735FswB3!4z6VR}zcds*AGz3W0W#k?zPaBU_ujFceA*JU z%i%b2B_MxvNeKO!6<=?xOrLl()I#Ko?>^9{%R$WJg=Tfcpb>D@g9TIyz92 z=bpGnWw?QKm*gdpTbZ#+Vu&P;RB5`OI9hh-)d_~6Ky*Z-w{~GUIxKJv1a#gwcR3e= zb5SKhc~4m_QK$FF6j-Zk9hxkp!$F`yCgQMmKf9~m7QLv_&5+$w3yqoi7+b-Rcg&@_Otq+&ZffCmS_-ug zr1^rwarY&RqnS8xHkRQ1m@-KY!1I%bVknAu`hOk(p&iCpifgr#D{Uls-uPLc)S25* zi*@OSw{)5k%3Pgns<2nhOV08r9p|8u0IYhdD7l%jIz6ved!W6J0}=5BsaBLe;nKN$ zN8kwl?*B9ds~z#qkzh3SV!&hjcm7K0rk@8PRm04RxzstsT9m?|?Z@?E9oxCm^Wwb7uQ1-t+( z*DdIF(aO}+)A@fAcDP`XF!xV$rn}-g*uSZ?%Uh=)uvJtQ?I!S2#C`V|LuBd@s(&3< zd=U3CN;*b8WOSf7$)PliNu?1n+$r;@*k;a@5P)jh&KKZQSyLhr!MhSY9_&`eDzdp=gT8^gi0uJt} zi{^8w%)_u%QVxm9A`ix%gYHUL<1Sn0{|!PJt6=Xbx!2i!cjB#d>mfu>RA{lD1*ANqclI6Pm*GB$jLJv0cbR^AK|s zZ5>*=#l-0tI4hyDl7~tp3q8?UQ2GSTdmabV*&vkhlGm}oLnGKRAao0nI)Y&R!);CD<0@3-ux(9T1hy+ zK(Igwtw0oOWaG!a`$>zLh;ncwm=dg2m`T@JI8y-GGHHE=j=Bu+*IPVT^>}m~@w#r4 zT{G9Ru90*FCeu^%`>~sNU;2VcZ=l!_jFwR&I}Z?!jFj%=0Kv-($uY3@TU(Z9ufPw> zGJhtL-NHu9m=}&%heN=okty6v@B`{LgA^;YQSC*A_dPHOa+mz{1LPn}Jd8 zFrMpM3ZS{|+&T+!HR58HyA7WO>r2`TSb>If^E}U>HGKSt0Mv;_z9pbQyzY1&)}t!w zQmbkzAD5PFu&7tka?*>3WTZ|lk0E4AxI}rr3Dr?fypB{gOdv@*CxOG5Th+|YeZg?@ z#LlLefio6T`Fx$K&@rgtm&o+qVhwY4h6E;2x=m&vrrBfRtpzOr(_Kt=1W3z=<~U}@ z+-2qlN|mg&F9j3KKS>F`yCbVnjLM*tjXO*K?A8<|9Di`B)4crE`M4}$+`0_xo?AiV zE;J{o7&bIy9}PrV=1ZrX{oVa+idalaxD;G3rAZhs+cm9aYmzhuohSx&^-;mZmp### z`vTbGN#s8t)|x{T=KQSAawoE|%>2ZGcm=C+)%LYhg0MD+L{C;LP7?a9!6TVy2(XL^ zYvIHffLG-kr0~0kodmN(c4r`nGH)~~ocbB+4;We(PbB%!USmWYZas=J$oY&|HPLDC!5yyuD9UYQ6tc}|D4b|Y4 zOhQ~Dei-ChJaows;?qzi5n9Wpue0*{StV7P78zLU7~7WM3Mu8R67wW^-{$uqS;NEr zW0o@t7z+H}*|)wEuN{8&^EZWLsEsqCsid>st zZQJJF+M25OdpmEZYW|0=>OS44ze7=b>o9WcJ#1@-UYku7alN&N#5=8#e!DBp(#>Xj zu^#C})5))9Wc`+v_hDxwq@)GYb(>om^Qg}yc;ueOoyKOH6cq}*dkUx-QN?3{UrR!D zom;}}kR#|CG0nRJc<+Ts2k9i-1`TndY;Yq2mF!eu6dtlpyJl^7X<57n>>cmgv=}3a z%)9=nf7N38ip7S+s5VXXE9=N~NB5QF)%g-@QRAHCfDI@3yhy zU4}L#cz)nYisJZJB!r~2$Rz!9b(?Slny6!++O{=RXLr9jR8FxpHAInfWl2{Dei4Q8 zyY8>QE$?t1nwXkx^^a+u1k*aNx?lCF9t#dF-VkN$%z+*^HxdIp-w{U7P2JVy4rR-oiviFSzd;4e0Ule0^v)q-XsDZWh2;bA6jQ^Ck=II;LLrUasT zh7S*wr_gbL<Upt zIeo(Ut8ed0%$TxZQn!5W4JBU~WNF!-03gsKfCN@s z(hO{mv6=uOWa=BQ624Ip=BM3FNG~kKYamDpdtca@nBxk8U39qMe(lkUH@A=*+5;*| zj6$qWzzzV^W2cHDNe>oT?n#N8Ak3}&=Q{a^Ir_iEuN+|-1D;5`Cf$!^u{u=(hW0pC4v9iHLx`*vC4%QK3 zejbR`%OHOAz9q2aTrrqDwJv`i@G*;<)MkrB^L$w^3)6kjEjX=)L$28mSbod=>PNgA zn0G-NC!TK67M!)XHx8d>yp3bNEaBrHPhy6Ptd2lmpWsWcU%?4=vjselqTqZ~v(c|D zu(KHWo@;{JX%ulJv!|D>y#GO*M^IN zM?Y;d3K$};qi#>hF}7nwnFgWJl1VO}30{2HqiBI2Y)03p75hFJ_r2xj6tGyTxH|I> za&bM&aDA-zF+@Saa1S#frwoUi-cN|7Dld}su~BYpR8Xbv6?6Ds!y(csv)XHe$2lxD zK3_-}@cWZUPv(Q=YB6x*%<|m#MJW(FOJB7^&ErpcstX{u4hnz9oAt``v9VRhbp|-= zFG}$Pd)oxM39$51pxF<|@K}huJyb?D_HKgyp z$z%Y4>SeIfWjTjhb|6Z3kK^V;QW_@Ge}v|!2{5k({B-US`1wK~8$}@|!{FJ8a>feK zSX$({j@O+i+j4=%R5HZ+{AX{5KdxR9;T#sO(ZYRGQQ-+~mgtqmBP&W)626^17!z_# zl>?FbXwg`ceqC51oe*u^iLaCV*wGtT*h(hucT1)y?Sit`^3Df3*2UGj8xz09 zWn!Pa7~`p;4U1*Oz;Y$z|etek+kRt3Wn!7FHpqowd5!En!YA12GiY09M+ z(3kUIC#F(!gH=W8#O{fjOkx$?99d9 z%_sq8n46Vtk3keZPYW`L2i-BFNd!O6niN>}+LMcG;=%}l>%CBpC~c+?0=Ot7_fgmt zP%KNQ*6Q^!Y6YiMZ(-zX% z>x()lWmWs28V|k}YthAOZ}QMv#t|L7=SW#@GUqZ zEr8HKOT_cSjk+|o`MN|5Mg-}Lkt!e{_P3Q&&u}SIkT{ez*#9m_5a-M7;E- zz5jk$%M2fj-5O*!g0xnA=9=CGO}$q~9bGT-U1v%mMsuUlSD8^v9q!iyC6d7k1lO-$ ze4slz0O|l2Sm?JXv{fb4ZQ_M_sbJB*i0}d2Sd($zYtm0!FkU;~18I~Z0hH=u8N`9oAuDKGg-Q;$|>v%IFO8SVtmduw2O+gU( zIq(?wE|4l2psQB02`%ooL@O-)gPk=LjEA@%wDVkSQ2DLyD7ZGOIa0uJu%YE->mHA5 zkyN*6*BQ<^#VFi#pIoF0RgvJN@Rn9;KMZDs(P@Vy50mPNL<_+h_3EP)FpICSJ=6Li z*M0c{j)H>X3XveB61Rzx%-|LGp7c4*X|_2u3R+cb*_Lj`aDJaG)OY@F4r~E^4=`-w zx)c6nYoBNsvhioSw;KSLnJtosw;0$>x0Jdv+Ph$*P$R(rHtR44CMI7|p(8F?kHwu= zv{zn$@?N^?pjBXV#s)A`Ei$v*>12cVr!F1}Q?Yqq^rxuALuCs?p(wjkigmheBEH^% zk))fLaNxfFR9!m<*4rAg51?NOjZca+h(Ne;&1L*8WSeQ4>1V_(HZ4Ca_Is;2@pT{L zes~S=jMbs?#pM3$mrC}YYz&7I7NRZ@d|5nH<4UZSw4f9&P05;bntGVzs#dn%N&Z(7 zoW%fSz1=)af)|7kWPI2cY3EtLAMqwd7UHzYpYLPb5Ec6#m%JbAH`4_X3uu#?bO281 zSrLB!phN9n;$fNGiuZ zV76Do(me8u{h+nU-b3GP7*<_YA(!}<-j7g+7MSJ(1V^z0pLz=wLq0EVy%fEK$=A_-VyRU;tctS6he&JfHqqhzvq4w;BKJ zX{^J`QeWM|NT%T|_1rcgs8lP0^2EM~+UK?5%DmV`Y({Rs?0#DJL2&}%3PI4$@eP|xoo~NJT4;UQMHzN8_c60r4brQ@kokE+Iix6CMK0=1 z%0F;$#-hBrip)g8Q>hbjq-cLO(#zarS7ph={oj}u8#h&h?$QZqw62ETE!InHzo9Q{2g6bir%y6FXbFHWtn@G19dmwMrkpfJqNX!|`ko;vYf$WjoX|iF zy`;tS_F?lj?!d6K_6UtTJF|N@EQ|z!8vgXidMm$j*|LJ zzKD^h>dAa{dghzSvU1^bstgTp8VbpL##77YQZ6v_;8$Fj1`7;_#cMMvq8&2Cesm6i z(n4nM4x25*ya1|=TAwP8zO%Z+Od+%YdG=AsNs;5)1;znp=&UazROgj-~+Ud8v7pQho;!mUVY5x47hDYh5~ zD8Q{la$r0;*LN8oLX-(m>jP@QA22+eRy+z8_GDrJ1jx$BWJSS4Gd}A9@ppOUz{sPz z*KVn|sdX6BHmX@!tj^?nRW7#*+FW^INUm?ZCk>daGl5kvkg?gEG29@7Kl_Dky9OJ0#YPY6!LI=-^ zWR?8vE|Oo#1K1a8^7+FPb4DnW3W*!dwZi#9AFkHnQgO0o()^2`)SIx_c>e_o0Ee9C z=2=qDJxp$mT7AL3+sSIq{pl zf%DRjl|$^SQxT@`ac`%2S;bK3plT=9z$ZJ4xV49@ewF7>e^)(`#qv4sKHJxOYJV0u zzvG!%>WZg-P|Z+xFr`MO6|-yIx-C0abpzyET|mm}DC*5#lC*7_3um*Gct+YZxi%~j z#s{Fg?3ooM0{|)f^Y|%fUeRmetfzhq|2WFb1xi_W5Xa_To3%2qm9ya%Jzl zI-F=4D{{`S=8Z_+!KoSJpG{S<5H( zR@L*SCTfA&{K7}5X$*O0Qy&)An(#;2thHLV!1cFyMnM`vS+P&2sbz)c;u4qbbFd7m zRx68g*c^%a8V2F(#6N-)kqY5eA}FFj^t6i_3mhW<0M4M*2gT-Acmo3Mqe9`v5iAnd z*v2B+IoFxjUs%rpT3MhCtI-8Dsn(@Kp1t&67$xUQe7(dLECV9h%Xf;3p{60nU_MNw zuW5MRM#F7R{9eAY++=D2ueU~;us_QBFyBlDhKc8dkV;t~y8BM!GZ_-~rMSp2kz|&( z=0ot`brnnxBG9!oE4gcdt0aeU3UDXE*4x5(oUR>)+Q{aQO}9I_Yd3IrYeA7tq?ZN~ zQ{|d1v<$XW9pW`n;h?URe)g96JOCH^Y(71MQ3eHv3eRGiuWYgSc{&HB8I06HjNrO9EoNH_1m z)^Ec##2??5;6JZD{`aK5&y655)S;Mz?|nd8z@YiHXKabA(Wp#;jWU6hs!_x%sppm# zZjI$d85MaBl96#e3;co)T>2F&!~kcXormAl8ca-? z3>=CBpGcj3#pW(G-uF~q0zyJrYZ&n}UAM|(GV!kjIa#6D?!T|Z1-zIJ_A(o#3QAx2 z9q^<+$SjcxB5bG|ZigCrldI533r=k{doPnwo{_!2b zh{dHEJTkUV>s(R8EUaw?`x|k#xnECOHEj!iRe}u674yqFlJdBU#A1u5kM^YUklwka z0<@)2E~v7387lN-f6KUn$b@y;N<*Cw>GLkAno6dC9A^%U2oW`asxHY3eJdMH=_>Hf z(8ybgQHs`m#INTXR+Tq_V01~KYna;i9FDhm;Xl{OKb|4}YdyA7-O58WV8qtyFWZoa z8YZ3Kgbz2OU)L&XaPclU^-*6l~L(qzRgOSWD}}Y zaAt<@R?)x`d^jXqXbmn!0h)hbj{P@GALl=OD*ylG7!%V!y&*Y0rnAZP1VBG9rG#wz zx$#X-TmdLNsPL{3SrFpq?Cv>aU1ZU{`|3D8$~d777WZ|%gk{8R#^m&1;{b@R+Z1YO zaNzVBfWbMQd=)?T9sG}>#N7hx5ylMFxtvGDNI?}8u*7m(zadd?D2T;Mcm^rksLdpi zzo(y}&byLmcq7Z(#s63(HJs@ue0N5JCFiQd>abxMqs;B!2l@~nWi^$qmHk z-Z@ABOn`tPW_(PHtSa?N7RD4Rj**Az~zV}S!tek%qDzPDgEChL)bZFUu zGD9ZQLLVI0H+f@fMIL!1>e7<9pDc4qauC3igmuDYf_F~Wst5BNM5-S5R#Z~^IeSN+ zt;-Fp?9L9gI|dp(6AJm$uW3O+JJ>PENi_bPbI7bU zMYPj`c^qH3f*2!3_}se@zzdRP8WG7y0CHiw<1o(XK*5Qe-b$mBemR0UqsNR1z3?qH zRQ@(93BM?fmAdrKt#->l2gOQ74;Ni<23**Ch$}kM_+>T4P z*$rjtd#y&sV-xts2`lYQG!yluOW9Bok&W!4uK|g#41Lx(tTE!QfCziwO9nfrm5#~u zDNz~Inhg-!hX*|43&QM`3uA+jHU`^Qpuw41AB|}AY$@z*wi>z&_eO8t30@{mKoT;w z&f!^bl4W>}Sa+@AZ}?;+PXmRbhPI`g=}Z8sR>%$Wscmr88GuZ`Z?*}w|C;YZ5L3gM z-AkF71w5sk@np>|L%}i*ZqXQUtWdCL566 zrm|7dSa*{r=78W=v_QEvu;xD?xSLf=1HS;k=1tW;&@QP`S2K>b)+tiBA`Uc$&qP&$uQGhHTyglpdgWIaHI_e z79aWWfHUxu@-JL5sCC&}WJ?Zyn+mb5C?duHi;MguxGRO`p(ho6`^IpQ&IcfnVWDdZYle+R)A4IA4*o8c`m-Ogr z=h?8skeOVuAFt%_5npiBk)g)?(2#YrwJeHPEoaT9NRdN**abA)zaM~LUgZ!0)@At3 zZbofJIV8hN+2EMfw)9~#u;k*Tz!z=BsD7=AoQ6-yNufo|1fjC~sg2zfd^Zg<57(cO zFCz8JOi-@Uy~d&v186`xC=A2dT{YneYs#rPE^9Brfz0051t41OE4p)JwfcyVT_4Bk z33l_>23=+x4DY^^Znz(<$*w*d2YQQfWDxnEIZGz>*MnTSc}dA6ZM0n(_~Z}I1O@cJ zf{8U3bP7)t39S>|Wh;8q*A?jL-3x6W@>QiXpTH7wj|)DQ6ZUo7=xyI?XreINI$X`} z|33eep1Ur-_ufWpCpBxLT7!b@TKn_M_7$hCqoa8xeuAPPq0Y!%Xf+W)oz?~N8l7&z zi1d0{DX&8IHQLwp8DK;F(H%=vxLvy}?w#)DIU%(NUTKo9X*y%H?uUo5nSw?Fm%8BJi&!8__IBJwD+==gKtG6% z_^TNbPMkSm{=U^5@0c#(A4E>gR6>vy(B5N}nqtzXG;7O?oA zCSi@iaY(}#Y#>hOYY|@<<8N;fJ_KNc?ENYS#qvlF`y{X(^0|WZ&U1U<&Dj#E*kOeb>um2Q2CwDU-O7f))TA(%mcR#2jva0rt8yU=ObD5UI`RrTlrSf`gH zVH9&?c*zly(WsGii5#C^$rh2qXISx~In04Uz85AB z?NGiyhxk@56^|D$LUN6w6IZVNDT>-IGxvQ4By=YjbwYfgfByq;zy`Up;EI-VD%s5M z2?C;LyKPbj0HXItqlvo=_Vx>M0AZMS!YY^;SZ%1whGp8SrM!&aJc{^OSJBNxZN2Ow zQkssMts&L362nBpsNVxQ;nb9FfXs*K>h=_mE_Ah3Yju!$ym^74Uf=QWxgE5ZSaE6; z!nq_8;!egs>d54@|3nERzHK4w`radYD6F%1#`VQMqV5puYKQb`gZh0UuUa5WZeZxZ zC9vI%ZJNH^%E3qngfUr8WHzUv6S|*f3qSPOF(dNwnETA5eGD0kF!v z-Xwz&%!PUxGkMeewC6IBdP7xv0=%j1L5i=Xcn)XW}w-%M^HRjZfbz20UT3z)4!2kVcS6FLa65?Ka z(3M*$)(T7u=VGq;Ez#PT$z5Rfd@4tx9?0cWF_vzvpZatNaYhZKjt8Sx;Q?R7bjzk%AoN#8Ibk7z+{xAIHN5_UYx%X*Nb zq)L*Xxjm?I(Y%>nAI8wzCUvjN`{1!}?ik+Zimq9x%H9Z2g?TcHN)qtTdyIK2a@Vbv zKLPGzbpRl{u92iv1F<2pNlh(@nt^vaD7A7vyqKofNFnpukJiMTO;`Y6*W^FON2``LZdGZG=P#rSIZ57CY?}I0PUm z@cAcZxvQ!bxkM-mL6`c^*+lJ|BRnGg)M5h@5DCB~g=}#e0RJBEP%Z_4^1o%HtB=E?YMJDEW7_A0F2&c%w-s0?~hm0UUqQ?8G<-a;8sCOy0}CuzeI-H3pDgKzS! zM8>ZrYCpe)JO?j6PXBUJt{dt&VPLPBp-ryGz`n)z{JMS+Hj3kIY&*u9!cE^vO)Qv3w1NBlt) zx4H}(az;kyo)M$_r$W8pSB~Z5_8&zsZ=|QxP_IE`Z_9QT5F&0lf4>-MuCs#buQhOY zIvIm0Ou?Mij?aliEX!SklS-jS&*dLuPp8B*tY+;N=P<-0Pf-%|kg^5w7Y2-Yr~hf1F5%TdZb~;cJ6_#JcXeKj{Z|Jkd9G6pd_uBV8!277nuJRDXA89Lod%*y4hU zCw6(F`MAibn^=tKn|3YK6iaq9fpl0jP6;E#>O1>hyvwV$9EFm(VWpg$fQVB#>rJlr z_gil*XhdN8KVU$j1G!^hS~K)chqY0Hle(!w^am@iNd>QH8P8I1wp<`Gg2GKHPw21~ zOEjU-HWJs=H~6*vUSk3R#iXiLDpeJ)4?_udGxj>OyXb^4q!cmbwIf*@M(N&WLdwdnIY)_H^seka;1m69s z-LI6@#!*$pW5>C*LR|MuA<;F_w73Q}>SZ9yId}5x0yrZPk*4~7E0)+t6tWNe($}X;6Q2%|Dk8DxTv=^6HVs>piwy+~h?(o%N%LIxY zx>{|$#nq{K@mHpFJMR7Y!p8?iTxNT2NFc|#0==#WFssAbR1ZRNapuQbhEDlIkwmwD zakOUN+R0PhH2N$!WWOf1zjaS6cQBav*9x7rZ+|RL@*!_)UUt*#S(-U=KvLjR?^r;p z^@D9PPw~xUs=G_gZ7zCwaQqCwv+j3Ec)t1BCL37(J3Ddw=l}pDx*fCO@3A18X9KZ0 zIskLO*t^8I1kaA$(EKx`;V-!*)BU99m%a_b;xGp5#3^SSa$fTAlWT3BgKXt}_ogPz zBX2o=F`aC7FiJvJD6zz~!j8i)KZ$ETouCTCwpBms4QRsVZaq4oKER1*DgNW9aBEl; z(X9SDjCkCVM4G10n-RubvGEDrguG0J{BD3GalKbEQE68iOr^Lio41J&3AOIVkDBZ} zl{Epjf_ouScXJvDH%k>3Lpe4cRT!;mrQJ=_oj`Cy-kbc}%v@L;BLU7w)P=oqz`pf2 z{uCYI)?4D=o04}k`KXG1;8fyV6$+CavZ3B;iUqz3|Alvr?N+itPq zdjoo5RW?bPFPA~{FH<2Y@2BGxP9gd_q$19e^D9jq2jmNQH~MElTJ<4XJrU6M9mXD& zNcx5wMx5u)4`JFQpCFo*wLc@e)6Q0rjZXpY`EihwC#}SuUvkVd7egCjuthMhhJ##d zkEbUbii)Go9d3qxWO}Rm0f?>1U%wtAU}*&R(l}HXn3f{wI{G!I@AGVJtoeBaBi5w0 zd%G}#qv|i9iKtL@ckt|HG3b~fu(moR+kaCv-DQAIpKv*zY7v17f%LFbXGtvSX#ljP zIN}d2;3?c{Wb)&Zu6xYJq3DNFLDms4m=MCSY2~3!e7=3m+B4BjWOh{Cb-Km=MgbdF z>Me+71uw~zpJ`*GoI>dVM%C=|EDF{e3O)HTl=liDKbt#_E8Lh$Y@Bg4aiJus74Loop2+X(Q{R=JbV`4 z0*TA~)f~DV%YhQdB@$41|8;O_dVS>F?=tv-%?_MbtGww15 zs7k6MLb>vwdMnxrn(QiFik^3oD*7M zK+qIlIv?cwEnpV*7CClaT3}tRxUu7zE9jK+pLbq!-85YC3h1zH z*)q^2xQ;V%#nC^|suvqwTCyLEYZPg1Cbi+t&CZ zcD118w2!W>=fhQ{#zOmP#x3lU-WLIeLFi{9)*LS}XWKJ273%=!tu2uUo6-aC5a6JG zHn{$w3l^|5F&Uh2P*v^iwBRTr04_2g{tL14Erv>NDyI!^DaP>&JcJF>4@=6 zMDN`jtChlxYuz`bSV^cUx*J}tW^NG0vKXsKZ!CTLVUbYE(R_|Y&0umpE z2*j@nh|G&Ojar?vHXD<8H1II&8UisMON_(Uga6Q#kTR{`KMsUoBHIBnqw|zW85*i1pQ6Jv*1d-G|K1b28ItC6`smQrBC^H zIq=^oOq~BXJp4~`fP>{B5~&FlQ_c7=Us2RE+u?5)+*TDIguj7VsFD=meJ zqu%c|-<>njY1Qo1CMVZYHE|CA>Nrxvz;U|tRZ+>~P1`d(H{u2F4@{Qz7!k*!M=*n$ zHnq&30}_ie?MameuK3S#LD~YoGyJ|rx^?TIV9~=Lm$wAI*Ri@ZG$q9c_>(j++pI%~ zlLa>^zrfb@#@kGgTn&MYcn(i~EPCJSH0Z;oD*e7Cj-C z&rmPb?;doLZT)%0C2cYXG1x7%gHB2*E?uD83|ujQj=TvWlYv6z?F#Sul^fs+f@KJ} zUa>-b-Sx8V8p}CQ8R1|NU<+bJ*3_$|z{cCft_vY&U|F`p4Bk4=)X8rNKg7ML?${q# zk;n>lw8`!lXH~06xZHUt&iZDjwg@U{4~{IQB6PXdyMqQl<_2yxv)>~(tmdm+W#;3;X&%pxaJr z+d?~H^xNv?yqGwl;8MaC$K&b2<4MGG3wp<+CNGKLKQy`bkZ>iXp;N(eQ;9j8EC;FN zxBaXnv|CESA#;pJ`1mNj=T7kr?;|$kKnlY%b zVQN_BV{j&a8;qbF`bY_X(I0?-@$Kc)EB)y^Mx;%)O;dWS5uj5k@H^gx(+U6m_SEn* zE9s#b=#We_gr@&Q*+(FqEBro)B7(sET>2{9KcnbP;e4?2+rJJPs*>VUVW*B@GL;Jy zWD)8(K~%wKq#>bTI_Ttj!bU1Qp#s1jBL*b+7B7_R$1QfC#10LI`^Lv{Sca&-*?CtV z`*+b4-lczXt^Q>qQl9eg;v>2fQEpIF|ItTr^2)Ch&n+{Aif(Bm1M2QDva>s!wM>}1 zlfxh1SRCmuDRc2#Q_ctDHMKq?fuqM@8qbPc=Uqpj8|Ft^iZ?9r5k%9fOIQZ;0>3;% z6>m{8VrkoAi9n5L)D$>Y+4H$uoXu)IU*j2@mmN5RwZloqKATDiCO;F#~NQf@rkZ2gpiVw>a4k#WyX{@~tJW7L8KuZSw%=Dnd?HCxk*h zvFs;*yr%wAtIxLs9LBX+O7?)M#DTw>7ciyG1nz6JY>83=IQB0ae28jg>qod?F-_3c zW12kuB|H(csT#OAD49F_9L#lx`NL!knX=Wnwn8e2f&~#G>ZszYL-Ff~T?D%J?Kr?P zn@Bde*5tZ5(x<;_gp{9(|Eb5*5&(5Z%9~zYK6!}7qUHk?ioY8H3uOHElm#Ltjxo~L z_eG@xgm-&~=Bz1*A>fcU4NV=k3m9$RfgRCiwbdLHwT0}$IHdh<5P|Y!mFjch>e&hB zbUy*SV%0C>Yb0e3pm+;K$Gof~@ zEBuNLT7C=5!6RW@mwe8l3E*d@?ydI)d(4uJN`V2BeR~BL=Jp?NsZV`LUeK)G*5Ar7 z=1c}Xn;3uWnsa>ph@V#Gwi@+KJb7@QlY+DK6IOZp+(6tXfnRN^CaW~^o*<4E<(6dM zuS#Iru8~nFbV>VU&b=V9{jfj-vGqceS11b^01dVt%Ldz7&zJ1yd9iG*;w*oFj`Hn% zA|_^lYyKv!~hO35lD=$QOrBafM}?Ty!@!~BWF!kGG~*$R+svIZ^bG=xJL-L40nRA~+S;2{iH z!v6i^Aey3krVG4Lioyn_3iwM2gXN1FEZ*SVw+5T|Syvl`IZul^v|p{t>*oL|kg8## zUvtq}Avc&n5g2s~FrhWoi9ba;l32F9{p`}<_S@DIt5iK4l_uu>fN&nKqfzmyEKIXH zrd7({WkHTi%CZhWUfy=#zANLbz+tgEDyaxc{1#{<+ zigk-XU|vqzLtV|!`jNgMiTGXO!JztpK;<$+sQG&M(jPDo#}8I27jQjZu<>_%f$WwP z_k;J5^53NS3-g)&GcAPke@~S$&qY$*UKXSj6s;?rcFZ6s4my8WcG9sOvt7ZgW=!6p zsml%B-Kg+qS*Yr45q??}3YKOyA|?N3q=ub5ZlSk2;`bTmaa5mDE~OiDDOJqB(3aX( z!C_;F$I|h_rYd<|snax6rfM#qc7ZRHe(!Smxpb(&I|{yBYMk9U%tuUj@(A}lp8W#T zEMbH#5M*Imm^qL|T&h-Ek!&K%{c^c6e;cKxjw_I~i&Npg*wQ{jhR{($=|!yMBT$FX z>MODL@QMH<1vijOLS60($RNJLv*wY!C-6$W;f#a9xOar`$KlpS>85g5Jh@87o7W}k zbHIFR{S~XE0so|w3W3P7y3mpZ&r>SxB#4!9C{tW z+GA8qJN}53W&-hDd5&xNSz652Uo##tG`=#z-7^@~Oc1+j|FD3=XVpPV$RSc31g?jJ z5d5AcnbzL?*@Z!;Z`4s;O*jtt2z4jms;VP9#J{x9Im#EjWqX)g9fDLLHXvn|qG^qO zG^t9`3t`G(q@%l^vX#Qu>UZAHBEWhB0nbgx*$$%npX9_}JnFybL;ocwgwSIJm4CY^ zN=JKe6}hdMb`D^4o5Vj3H-a9_IN3yBNY)inP(tx#k8zN?Ca

97849Ix+CZ0DDbyo;Q7t9*%NYQwY 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%0D#Z+uW*9TlWPprw`b_<#J512@R5_OySnGf-OG) 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�pXS*PJtvdeOtOnt{ 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%0AVm`f`b%H<& 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

&NIo@ru9b9;afqU3%%7=FbS0-QmZ#AM!6m}z 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

FR|U7x_WW|q3S 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 z

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

;;!4h;}Sopk*wp;H;o|7|VmlFD)VQc!8R7 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Ȓ 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[z2Kr89blwdFycWC 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

@#GEV6e^)v5(P7_PHI2hf85) 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

l0bp;*0b?q8g%}q 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¬-yR)b~{x9z`m21sKPg;?; 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 V%xTD+qP}nwt1@U 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%0AbV|3FJqPo3PuI#MImb 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%0Ah0n8B- zHt99e-N%6x@DAtu6|Q8=Nnr?zy?0~(h##D82%$%hMSV=lOJ}e$LfQ=UAsZD#jkk9? zx0`vIdZ#o?%_@<=q1lbDiGX5u{70w`$%O$l}gg8Bg#aKf6ntl>C&cf*md`=He}axe@&RP+AE zyk-;>LE-=)cQx|0}2%13Nv#f4g^9dV`6>J}>DP5dR+k z=kThPLTjRlA_SVz`=H9jCrL~3=6^3KSJg^{wm*D&wSxs2*Iy98tC;|s`4W`wB+8&~ z^}eh{VXZSiutlU`@vwiI>r{Z#lAZ=Y>S8hqWhQP#A!0r1!Fr|i{`zlyH^unuuYo^r zZs-m0*rt$MKTtf{H2)&l(bM?BlLEDZsjDEf-ERj37z*(AXPciZ8BMnk7ZmA(w4z8bVf@?sb$g(<3*vkhd|O~T z3i`8zPOPjkT-`fwb&s}TxN)snHUv(Th?zb&M_s5~AThE|m;Eg|)5as~HMF{ z+^)zdpZk$toL%+(@Q|aE*7Kxl^lge|)g%E<_;aQDu-XuCceY>J2*fL**T_Iuy>wQ8cJFNx5*C zzwp*fG*^O!)bIsXnEGam6oG?vu{Puw0#slF5dEQCD0ln5t-EuF5ot`R&Ozo~NJ_`* zQxqKteqRCkNt>6VUjrq#U;^)oaH+-u()=*~{uQC3lU+XDIHNFf8u*yeCXb`20JqAS zCZ=3V4pfTW0Qv)y?;qw`JCc{xRwvNsHRi>%i)-uoHJ$tw%9dlSOs4C&=V&!m5Zx#| zmK@1Mfbtloa??aOzTl({7*#7hpF&+aT)oP5e~`CU*gqrJ<@RVSmGoW9vmcy`rwQFp zjtyL%izqmpg1JT3&v{@`$`(K^OTmSw#@;GvjmkJ(Cy^lO z1)p0y`E^h4Hy2}=k{T5Yh%%FxkeSH!yF^uMN_(+lx7H`95_T!N`2g?mqUxMh!W@NP<|VC+}d!-e0CsNAjCp+nGIvrjTENA3wDEJF)YH z>G3(n&U9t9lN{CT80D)Aw$gNf6oAs~gD{MI0umz~!Zz}O(Ndr8tH;W!(a=>R_T(8i z2hU3AbX&Q2WUL=ifc~XKj`hO|;`g;>8V>wn_D1XF0>VWO$;Zrj_)7e))(W#shl%{d zTz4eWkkE8hp;OhmR&@6k-+T2E;~Lss7id3_GhnD!TisoF93PtkV6+}DSR*-L7R+Mn zxDZ*C0J)l7AbT?cC2&=%Tb~W6R@UtG5Apr<$BoOwF7(c)4{L+cvhoqBzZE zJUaW7hj?7_LT~z?I9HLz)?{+BwP5kSyvYFbvjR;y+6xnZ^Ze!=!-hCiJe_Y#*@M`L zyY0dwsCm{2{+i-~%dkey_yg-;9Rx_mBnrEc!4ra_*hoXQ8TGpShC`o`h;%pGy+^MD z%mJmH<*PsP&;IU10@{`21Ng zoG*mO{IN`vnONJvOeRzxI`!?C*Si61X@_$=@F6+AFq(wx~oFb0=ww2Hmfyl6r?9nlT{31^=b}Lsr zpFS&ZFSkdxNiW28I1+Nj{~b!fU5jgS-A1eU=~PlYyWn5SvE*`>a1o*!gM8o;h{ITQZp>3*dgic?ugSrW@5c za&MbO@i(4TeA|GW_s*`C6XH7r9xnqC;(A;nm|6ui8NE-OU4q=l1QtJf2`5Rm#SL68#I@{Mu4|E3k$YS68 zbN-r>{%O64z7jxK{qtlS&_x`Ti@I^&3exMc-a+H`_Gcu<2=vw>D*+NOz_JYc1sb@h z`i9(~R(0ZA{|(ZvOs{+?Px z4@?cKwsqAUn7kr)3`sUhxe=Gb@G52}0`h%$2NPZ=Uql?7RmMDha>XP9 zv*_c50LJ}&7YS5%rU(G`QVa9uF+l5CB^tDko!Lil0I$lhgB->nI!TDe*tfZMQlQJ$ z?U`RU1r+IG(xO+mO4*>pamNzcfK=Y+L^=mGzdm$z4(<+{*s6HetXD=O`va#M(_q+BzVqY%6TIx_>!2>b|mq(@qR01ysvx1cwKS0+A@- z!d=^uHF)}GxEzAfsIoL}p@+Ur8+(%?c~lSUa3D}I?4v0Q{Qy!V;Kr%Zx>`{m-)$BX zFaNZup|M#{VoMst01V~~NfSmxO+05>+1Sr5rC@pN8evadQGIPC=rTwM!fXahq59wB zmwC5ik>zFq>kd=KSon!s`oJ?BriwX4OV}0yTTIWic&K9;6doM|ZDYWwyb%8C+D^!J zi-^cs6Py!>V`aNdjPICsnAV9_ZK(bRZHW?~9jVl^_Lq=}2F5J2W{2dVW=40r&>R6@ znCelUe|6qRDBkYxc9F4Z*mn#km%v|G#03jQfZ;b|o-WF6nVO&*4=V&JuE1C7n^ zw4X~66Z8@=SBZlU9Y^Flh9D5-n_w$A4Eh?vv_W*rf{bv$A=ic}$}?|a!>{XE0as?) zQFfWzHvF$__Dug= zFDC?O-A38)a5HX_2LL@?JP$wiOG%hKJ{h7735H zsNN{?Z}&dUdl2kFYR9G$I`VGt(LfK^-K-VER!^D9lR)F;Mk`VRl`H^>_pZ3j$Fj^L z-TY3Y^O6sNMEEagS73j{FmBeuSr=1(ofz&%XEIqK8Nt{#6~l26%=xG24V8I{6Sf+G z^N6ky>(fVM&@?g{RLafQ5H@rif9ios6#l}K(fu_U@nX@CM4CTkm~(hF$XpT5!>xqw zs4dpG^>s8mQ~5>dq{}q_w=e*x9r|P>=9dI4pcyE4AB)5@k|MR3&>$rVtT+$GOg_Jf zCHCi2zj!GY!Z+E)pX6}vo-u2Ft69jKow44XUPp$wKw3zfRV2=iLa?UWLZVNTlVq`? zt?kEd6^l%sJJmR(GHv;h7`6K{;Rq5_N7L`KATR#T_XE%AlT&akOr4WESvlepHyr3< z;M&FK_uu5wCYsAd%JjgTszJ&O$69_17~4SUh~zNL;m(}dp@F(P6`t{C z{#`8yF;ZjJ*WJc=(hf5na*}38l;(NQxlr4yt-oB|@9b=LV`33sb_Ve^ zLS6I-vS4Hrn0U@-xZ?lgoG|{w74)z5l7ZI}z+h_5{*Ka&eaqATn7zk^5V*#Z^YA$; zCcb6wAIqiWD^AMB&m!|Hc8Hv#_LCECDGEqPP(X7=7zxloY|x9A!-6&&)p)EGKJx9t zYi9KLzi*fSHKPBvT{8ZI>C zb#}%IUD&Y;lx$c?z9_sUnobTdTL)$lW!FW1Y+&F1?n#T5RQ3jd3c0F0O+HGK1AOg~ ziOYLpHD{k}E1gelUvV02<$oDxFjJy`1G40W)k;XE-*}XJg>tRdXD8=Uv-NwSWuz&E z>l`SDXJ8_jlEJW1$r^uD4D7w<*B>d0dLPyg$BI39nc<-y6G|20xWIe0H_L&{RRfQ0 zBi^VPi-00O)8LJ3G!-#(~pTax@XBedV%15%dd?RRUz09lg9+_V!`g1WA zBbHbyr4}cepL1mTBYeZ{`UV%?cJ3qYxV;N4`SJA>sAmCy@)%rMbTDafI^5}2m*nLu z8Y1(I?aLu%%bASAI(@DPU}IHf<0OFn z_lYb*lQ8q~R8MPL{EQoFOTdL0wxb_Z5j?As+RJ~!zLt(D>c@lnm^s$y@7l$A`cu}Y z=N68gT$5+ri9S^O)^a)QH6nsYpn4Y95se=y`g2TrlQ+ZC3`&-@G%!@2=uDwn<1SLw zOucuZeS!?3H0i&6!|FHdjpz3AKj^Yb{s56KKXZtl-s4N4Br;Uv$-AQbgb?^cG~hMn zyCV^qH98YIfA*wDB*aDliAr1O?J#B8V~d(w1S$~GEWO`sdM&gl_NmKe2*e(O^8bM3 zqCO~o-=tA*KrowZu$ZXpw(k!V^Gl$&UW;T}r@~rePxX|rx56bNV^=Q>_k4I-4w3ps z7WFBpR@=&sRq~P1^5*f_Mr1J*PGBU#O@hEH(B!>R%1Q6KYyX=I@$iNoLp&`&8$p7rPtls#_&%|H$> zRvzZX8oZ4Ax`Ck~6jVY7&;06j`+1|9`);ymVv-bYTI!%2YMt-*+A9?Em|fhmEU8$@ zDMZ!$ilz9oR5x90u8OlpzParV*BFAO!cML>kAas%n$0y0$c|r&<^MaHR%O0E@-lX6 zu>%h!!iFTFZpiYkX#7?{vmU>!W|r$CP8UP%n*?z7@uH_wfz52k1gfQSaL@xrf7mpq zC6fP9%4z!nGiA0_VTx}6Zvj5YGB~{TYqpPaL+AvMHTlE9x5J_BWLh3|;#?-kJSm8S z1GUf&)RwqM(1kC4zM&ImZ!rc9*Rp4vOx8m`rh4w}ZgGOad~?nZs?^I_s>Mj6_teQ* z0>x{L!j=FP?ISnN4k`r48*yX`qfVM+qNk$c-S&!NsN&Nw_$MGX-8v|DUNOL}d7&O< z(^32(pL7H-*wot1zdu1w0Bz|a-oZ1XJ677DD?B6uMr(1%##|_N47cv<9HeEpvaXpG zHI=_$aC6j4aJJiaT?j{3}d6EzvUB8gHpRVCo8?A=SMQ+BD)y4#8aqfl&a(G$!zVMj=m+fpz-7tmgGC#?GkfsXOB6BehOs zpm`5WA}iCMYmKsJ@d%x*1O`eNw$%4Pj($&58M6jG5vYKL19oEWos$*8c0l83YLT|P z!+TU*&B2c!x2{qH(V*{8%_W3#?uwM=)}3N2fo3;X(n(mDCSay>vDp4Jkgm23UtHdxojR_uNKcdt>h`&D1n_>^ z&7&uDj(VZ)Qo%Azex^4z6y1okQZlprA0|HO^CxO{>dU9DUTk7p=!!TKEOBbGOo3Yn z!Vp@omrhr;sg22N2(T2|6P&#tg;hUp7svaZ z8luVHhmEk}^-)c;w|Zr>wXaC8m5GypEK?Q=uJ&eu30RIHYtmED9yvXXtkqbzFpu<2 zja1`EHtvz$P@~HM^u3255iXz?g=IBCn#z5_z1~i?k#X|jz|o7vc%+@{l@w^#){r~T z2M#1P_^YC^*_j$5feg(IEFCqA%VH!QtqY99i>o9n7AoYn+;j4>EO;7Aj7$0h)LS{0 zhk)zY3uENTH}A;KtRYqSK@}B25b4U84jnEJmRniLLyoak{X}IvdV#yov^BDYUT&x_EU;HB{Ei$x!8c$R>jN-MiNINn63S9)2T5RvS?xDZ+?k%pHF+ zg2Kg|=sGBCi~=G*!@!NrR+k*Z`=5A@LBHZC0FtK>LUX`IJ{Zjj)I)VGyj;uzq&9yw z(nNyVhj;aAclYj7vqyoDNLH<_2>6A?4qfXNs4VZxgWn8jjLKwORA`Au9@Js{FzB)w z7?q%#WpMHLVye0_8AZ@PMu;kfmw=d#hIUzccp;P)dw-d>wb#WvO$+pE5gu)a6UM?Y zOP`9G@ncN=n)iHM&q5BN&pnHb>Sq;?19I1ff0uQcaINO~Ka`yVlOO?_ zw7aKm+qTVV+qP{@+qP}nwr$(C&2R3Di`d<`y@6F<`9azMS}$Pu>=EwHIW(3? zYIYDtjmg|8BJjoUcW#|Yw%uHl>0^(gIz&s7i@O1W$Atc z%{3FG`0y<%Z>?+3(<4UJFhkB8C-2TXwo9ifq;|8FvKdoqUAI%(xOiap3PCHQ4F4j# zJ?#iB8so)eC%ZfZ3>qw+V|^6&v|P^g@*@Vk(>Xkn;w2NY+e@o&sZ(KN@C(j&P3rk% z9VNeAD3E1Zagp$Oaw!I>m!O{3b-prETC3Q@a3(xyya8+0yNy`#0!vbKD%#zJ^RL$| zd=>+7P`%hIJOz9~iR`QP6hA9^(@yN%Kr=Eno}ASk(oKi|g-CNwHEWi~P&vCSWR<@1 zJ@R?|PN6e(W|BIm7b3;7W-b7ALAVq-Bg3cc&?k&(FmP#9JX4brB|PyZ>e+|FxU@c? z=GfO4a-7Y5g(J;PIoKJ8AE%m9+D|N^2B_6=RsM-}#1wRFW*wyVC``!Cr zL`jsv_9-R*z#6mTNIdsFU+(Ww`nN0dvfXR|Mpc~Cjdm5FSsLY7E3Ow*F_bGeohK#wA5zo2##(wMD$*m&mTOA_p1 z%`M(PUv8gI`oIq^xG!?X#^vNX0a))3nTX zZAL;%U@W{ADJJ{OPs9)c0Np55=WM^YI>(O4c6%t=x!@p@LTkgSe;o49O&zOiTvK}o z+!TH5t9|gwVJXy2zk+vJZ*r7d18}nb-m$_rYsq989s9cRzl;6|Jr@p(VLvM)D_lFT zGNMC^e0=HOF?==&iNRi(wJ~|y1mkjeG|;JwtGVI9=G(My3`3Zy_WM@10>jfgFng zFU8V}f8%`SMN^Ytf)LKb0jg%x5@4}sz@abcO@G@cqums(S1Gn;mHd239D-Ww-}*DR zoieieir_YX(KX%jR0Pp$nPc~hkmDas$C&L?b$xfT z&6cO2sec99D7ZA7v0BzB{5fKUGkP(o!7rg;TcMb5x$`M+PpaiGW0FaL_>?P<^ZQXn z8`6$|u9@;(h;y=mYKMQ}*4Sz`1D zWntj*|uXA`xj?_g<_x`yic&hB@&y9>bc2E5yj-2NTMZw@9Qte(i` z9)=NU@^#%vzH(v8on<1;-NNngt2XAyESpX1A8*d2{=yM-aOca343%KJV=Rinwk(4E zceGZuUgc{CkQZHDO-=P(->Uw(9-mK|3S zJPAB!H#Tt&IZ+8tK(k7nJ11Od5)5oRvF)O6%#iT3pG&1IeL0f?E_CD&S5wB{IN>lY z?Xb2~Zw@a#dfe`_W_8nPvHA#Un657nEpt=?(k!3DnONqVbs;nF4F4P4bvQ0{MJ;88w zJjc7gY!AxZmC>G(r^3V$^oks9pJQ$j)U7Vd)|jtoc>g`L!}L$k&VRdQbgoWH&e+4@ ze_XY+ATs+r7X%!luj<$%JGID%p$(f*)LQ=mV`$mFjEJ@svz_x37DV~x!pJQQAei1oo> zIJi1b;&6VP^f}2(Hgi?}^neiK&PO@ViqO(d0oPXjZ?Kn95=a=E0UYGiZr=SxRu%t5 z=nLX1PYu39SQ_j1hDW}oY#NHI%ZHH`vNlHe_)xOqPFTJpSMG<+k3aBSM!;rjO1_JI z$He&X>^U^gdp15dr@YIcm2=`u;rYn;W<6|DpK%9>S_tfX=pnA8 zfNY16>9OdDY2alSnRewfN}!uGj%u@iz)e`g@JOL)cc!0yk$dSWSc&tOVZ$lpwde$%o|eSzJa@;R6#$ zP2UrbopnoO*)@QuIJG-~owYJsw_%9>;EE()QBbRgyn}eTG?UUG5p@z=2x1oEQsfH6 zvG|p%>BjSHPjPuns45f2NSC6foN=U1)Xt4u3lL9qvA>o~qln0VNFKg*N#5c=?&p69 z7Q^eoNX)@~aYH;~e^hTX;x!0K3>d3+h=YuGMrW)z=YV_zc@o@yhU^uY0)* z-7ap5&@5#S-(4cOL+9^D(+ns0iM}I8p&IA-o55`2eo^u$m`~9&G4f^5JsD*u%8(OA z#oD^k!3hN^_c0mGUYokyoa!6kqHXa-WVH5)|yNraX?6J@;uW@ z+jf~~E*2k)#?Cy>cs81&IwM57o+EHP?kyi{jz0iPHHpVVroWD+!Z;!PNC{)jj!IpW&@;AHRIzda zSy@j2I+=dvln58@_UV6KLZ4mys9`bcz1SD~*iMv;?`S(jern2SR$`>3PRO4E$__%R zP+vlK!mh-fVjg5PCoqxL#&0XGnv?;0u8{ zr`#3sPGN_X+*SPqcI1SzkM;bl3a&aKVXP`0nqR~~xHt_0CNR!?x(rlqO@~N=r6(>2 zPBTtPjfF!}PPgIicFE`Tpqw$J&$@UP;;p_;qz#OKkQHt7RTIvrt8}V4!=dziwd0Jy=7)E?h1pOmy8aD|)3T*c9sGG_x84k@kB;dlZ=F!_`}Z1w zb;c{bW#ZOu2AQg7!@MNAL*(PU4y657SoLGq98R!Ps)+^ZD8Op3rq1JUBS@z(h7kXr4g0}^{y zb68N&eeA`;4&6XUHSrY~Sm9pZIynBVTsL(ooT%7}h4FAtWYB<2BNe=4mQP~eQQlyF zHn0d@zNZ&C|Bk48;12@2XZK`P1b_}UlKKs{r79|3xJuOGE=4AiLHslG)k9Ek84b|o zc7tXWZyc!Dw4d}WfalHXpK?@(d9tdfM-PvMF&5Ag=k{bx72!~brjp{nf8X^yY(*pr z)IY(36v3nd8xv7NBAI_&9P?>H>oy`i+$pikz+Veo2O66>Hop=!{3f_w%nIIlK4i)2z-d5h-t@ zYDrfE-E0BY^d|w22ekb%z(O9ng5T-Sbni4OZPao#v=y$Ci>g(^An^1sRI&WrZ08EX z*dw!~jP6tI3l0<;;tjX>xgNRa(!8Ar?KRy;#<%V~;Cw`K+XkmI%%tr7k_IwOq9Cq_ zH3^>?61_Wn0zEUTXvjj@)f$hflg1>GC^7Y$_o>7Gj0xGTt(Xrrf!9C) zX^K{GR+%Kby|Sda-HfIiQspydY-C!FFF&4TSr=v=R$(>zHIj5RvacT8If0{iKjJaH zn~jEeT-(B}%X{k2!-}&VTIOs;jFK@G@zNm~dWk&uui6f-{L_bJ2R=#LQ{FZ_)HXkPE)+fw-c^Oj(3 z^EHGm0lztH&i%UcZUPa--(2Mp5#?eK$N?KwO-;93hP}YpphKB2tdzc%TCcIY2$X!6 zH~G?^`(hZu8hUP_ViHN^1is1O_U)wS7~IV?cDvfpVmV^~wq(28n23Zs zQg<^mI8Q`I{}GP6yVbHwK_Ww^qDYc1<6IgiTFU}=sAFJpv6C29 z`hp+Z;&cBCJ?+lu8V{j8KD#T3Ax9i0jK~beJBl&aCwY;QgQ^<@@H;XAS_I-=j`Au6V*^u!!F1>E!7suoWzKj}8 za91V}Q4+o}$b-wxY)WO1(@+Ou+$hp3H82!!){TM!t(HMk7E#?Qf+avV417zq*o+%3 zm7H&t5+}XBmRCuWOEb&`6&r)n*~Mg2Uv|+p#aNeVY&9=-hT=e6k&n>P1!~8^U94^| zR<-18fucZz8M6$#=6i_4ZqKswTZ2N8e6v%(_HWl$XQ+id60=5K9-w+>h3~sQdId7g zHaM^U>8Fm3ej%=3wK+}3K0vc?(DBE>vm-&^Ud>kB-m{`lGZ_gx*)VD-YAc##sB2M{ z=Fos6wR8Z7P<1vylINmAFLpeq_!r4`dKpV#cn{n#_6yDmp9yq5E4-U>lZsom5z?T#!i`QVx18>HD{7(}ELPH88M*F2?N1hKSH zI}1!G5nr%Dm!jVM*OK8;{f1#JYHH&^Tc+cMT~<1Y$#T`_$LVvlDGVQm?v}LrC75~4 zQhl4pjY=~=6;V_Obp$_FYx6Z?Pw&6KApavU`d@epF_@qed#@-_e}ABus{BBX09RN| z5)sq3WjPt%%T5L2kL(cSH%sXIb(*My*?2PY#^kWog`HwcODnicNXu=6 zPJ0hxVvjB>Gp-mqyqMJIYY79ks_hW%HmfxLq(FrrVwwUJGbv0gsRtMRm8WX$e zb@TkMjdy{AgC2~;Ova~%hM>sfF=ah8VW!Xn86HFLYLHkDed3H{O%^ z^NF_K#ThIJX(dA#2H3=f>?NU0Gi+hS$XOha%J+fFX|`w&96S8kZ5@@b6hEa9(RFYt z$d4_akM)+n61M!Bhn(g_;1~0^W?U!CifjI*Tus$HO4e9%r#Z&})N=vqShRmvkOX4P zm0(9+zr)D$1!2tHz!MUJMvU0W>xO`1y7XS3l_|Np9d%F=Tnnr4`zM+6N=AYB9NjkB zm+v-_OIIePx^9l4-Y3Av2vI&g@`4UR@4;~gx%T?4iJeh>epfKuLvWDx;NR=ypSYa= zz99X>Deb-Zz;YqjlO|}D60|5vfXa({B2^8VWRd)J+I;>AxcI}<%GOGF7R)|nwa~^6 zAT0_Xo{xX1zZeMy5hG%+>MkTC?r288tZ~Gm#2;gwXZEkx<9|u?U#>^y|BSbwXJ-Eg z&CfETshT|nU&K~PLDW>1fF<+R=$x%VlMUr7a&%conP#tyF@}b>{wJVf=Y*lYxLIm+KdiGAJYB0s4W==}bXC*R}!63t=h|!X{nDS_8AkY40>M zju#2*l!uBFRjA!V-Gd#Db_(_)VMUQl`CZQn z&+&0!125@O-&?&o0Ym_j4B}jNy~%hRi5NaZd)oTCI#GnrN+(qB?uTosV|jhC^Y9oS zegh2*2T&J8?Nj_UI0v8GWXkuYOcRCSPj06*^{K252_=5zZtUUUi?44`pADgmJW6ma zqD~7YZ>IkTqV_X0BT6nj^H&Tnh_Mt~_*INv0a59`h&WzJSgOft5y8|ca%FIxD|B{O zTSwF$qMTp^xpPn}82m7zDyV!2Kr#LzD*J2PFW#Feekr|IXB`rT41Ek%s;xC+~L z>`T6K?}Fin1Qt2GOQ+J@eF^itU$&NlF^2Lb{RMo@-wk7JOQ`ol^^u>BC*rLTEvj6A z+Dg|6x=lM}@L>7I8ZvSKBlHi{qb%kHz8Qm$t7WxvuO-PC1N|d&)=30zAM)#f!YWZ~ zD+>A&fj$uiMM;^wR(IIrt9NuIn(Q1C7d<5sFo|qe*UQ3U3GAKVt4@6?VJNpJIp}31496{@Fw!AFRQ?$$!Y+iLt zk*})Qn5mee)K+k$+jJptx5CIU^)RE67v<6D#^Q(a<+PvU8rE9ANizDMlyD?ilr%;b z5^E$cK<51?mUcLWPsC`8L%H1hR3J;9$C)IDyC@i|Tv>f^t}I6Ro9l_Guw#z1^}byTgjL(=pKvGp9{4~p7e@HP9(57_g5m=-o8nCFV- zo^!u5sqFmu(jj+@eanJHo08l-BWZ8@Y%s*(65@zoo8L%!dEnxo!QLu4e<;z(jxg@P z+u7^3`E{HUt7STGUv8%om2kA1LgZykjIJPS6}o@X!dJB3pq?EAvCMw}Dcu9}8S-x9 zbzQiiqj?0EjEoj7e@t~ezO1`?@_h!uxii2GT+zND?H7SB_g)iGR(*9=dFc?2WQ& zgx7D%KYnV~QavA@23KCslm`q3A(+S9S|>~u2$_T+-G-ys{hbC;6NS8kxFdB0uEu$Y zGiBCwfo1{OtNNrW`713a3vvJ>yS3!GHdoL%G^%Xi^yUYVN#VO&kbSj7j?cfQsgZbuUa zh^8xeDXd$8+4h9z6N$HToto>|%Cq^B^D;b86@TfRvqisEDzla&)q4$sg*&8+p;vd5 z#xI8&!$zjVBj*8Q?0!0}q?^Ej`yOnTW?Q|BY>>^WTvVT|UD$KiwAHW)z{6e(-TAJ7 z1dd&C@n8ej3>P`)fi1(Fd;%3!(;>OmYzHxrO_NMCptV z;avC@tSoK%hK@HF1Ckm(Pgg8& zW)SSj5AvZe6DX4QTKbxF!52!t5ZoO#49OrJ+h3Haa{DzG)AY#DU6Af+$7$F$v^mZS zekCGc8?o2vL4qPGBf&Awcl+ms+Hwj(y&Z$4GAeayYmuQlL<;C;TEOhMtK^hZ$EwDQ zWMc$f2As&%q#g?uKmuJY?ODV&WP{Q(;+=RTm1({lL?9Rp`gZcz{ zY#=(H66CdxFM4E4oy{KvdMB;ciJmB`i16#h_z|`NUDOVFr5L|Hr1A*9g&FO$gN)6W zyhi*tTl4{bATo~t0Lv(iuexo$EPG2|^EKe4LOk*p9_GNe>IPmK@l*-_q_8^kf@LF* ze3TMZ z)JO2t0#)i>r~0`BOJ;Z4kBU203Gxlqq+^HEO*xU#lNU(D&8L-nM;INn%#XzC%V=Ot z#Do)d+vxL(G~JJ-gmex_BM`L^&8a(>@M#Hv;muCTy7tyAG-Zrx zCkXrC4L}~7^G+NZ4)e0#1IOJNjSvTpM%wYbxmX1@vVTDBu_y!$WsMGq9VOuVM0T7* zc^SnUT{1ot_AtAUdUJi%^&kzlu3nU+c`mN8afRA5o)iV{BUExHL7p1_c*H>E`!+NGim=hR7z3(8Mi zVAgDc%ix9gBViWr&vND<_{;g2agMkN`g8xDm#!lb4TRGXB0S=|AUr*wX=&mX-*zwq zJp}LXBTuXBtta1dMt(yXbkO_sN8709t&ajrvGMbp!nyB&dC-v;0y0F*15V%QKBdsw z@-)LQZZ2V-2_yKu=R2>6O$`;^*AS`NkHByjm%~CuC)wP?)3=pOK+13sJ1Y+z4RqJ? zG{mnpV8iKrkLrwmF7!!BvwqCqMswK095V8{>2lU3(6=_(`YTxg;vOot!7&x&C`5@? zM}WcVjRcc<)|E(S025JslRZ^1pE|X=VtMb7vsFwpwe3oD`!ksGej-$)A$DvN!J51$ zdrRb175h?)uMAEP7`s=bU+7O&Vn5L#v#gCkGv~KqaC+qGl&g+7=$*(68F~S9u7pi9 z!9e;m);p2uQ3NLoUXwckE}0S1@pGl+j_a49-IrCc4e&VqxqX7BTGrWgqV3Rnt$ ziBX`+&3Jg)wYaOzxH?AtiVHXOyd0YXQhv<+3a9?aTdew$&voPkdR&X(+s&{QQfRdb zpLxVMOj(2NW_?p{VV{;@`AHMfwf?t|4H>HE?7lnc#yH>Cq1++KA{%5=y`c~;O;ttWvy%H$|Z*WNOVgKve!Ekj-TBu-jB4=g6!EZ@vD zm>UP&c+eM-$mr!wxd{PW5R7nbQjR`JEhi$730H7z#WSW=6wsnke^6Cu*R*&3_mR8IkR>ow{GD4~^oK?w{m=eysm)mn~oEU>P#RGRtxe zF^Q?9L%R%BcECTRQhg2h2ca=MRYDb{2{;?@ZOU+QhuJPp7@o<6n$KMYMAj=qARbvj zxt^?v+Dy8HuJ*u0p)B6$tK7C(3Ox{xL&h;`#%_qb)*bA&F%e*G#3Es~0>Q7|M^`+? zR^&u?L5(7&fxpOo*xTr0zu`X#fJnm|O)c)cKk4$|J#|3H+b8c_t&N?8qFhdin26o< zPtb%9Is3~KS}~K6tD4^8O+f&4&%sR8uy0vdyfxP{f2q!#STL+e5w@j`lpH^zgc`z> zMM~{$9R<|dwl+jr_f{kPlt?-<7^^(T2peQ|ZywRiM^nK|X~dZZN*Ls+$5i{MJx;0H z>}rZP6J`dYn$sRnl|%37vehul4Dr>Hwe+{Ut>*+25e$?J?>m&?x&w;Ei%?#Zfq{Zx zc!2dZ;9NfZ@mtRBC@iMgCj*x)Nq&v(%H<-JM7(xaY$2DJlHb}{{_*yHd~OBzQSL-Y z3v69iWk4VSzzLB)?mvCQ`V?8`JsbCxg7BD3jjX>hV1g^9df4uV1ex0QA8Snod_dOk@@`zUGM)s zZwCm&3$UUh6&faTk3J-Hw5_UHIanxWSyNR%N8yTl`h3(luKBS``=$*#>gZ@JAai@7 z6Hky8Wwzf__DNf^M)H|W0!_j7!=eDJT)6-lT_2PqXlziey(|%Wwb(u~^Ku6$fn`b2 z?APn}n%Rr1*zK-YcB0WLvY=Z*t zGPV1g|C*waS%6OZJGH%W*1R`lA`|N0Z8=J>R1WJv(}&7+9}|@-(VJDIn#NE@f+*%*ZLyPmIzzztc+z}Mp&OjQUSwS=pRw4~zi-#m z!trcnj2D-ySUJ4n6cW3i8*fVQXz86}_$?w=-ty|_&y*0p_jG6v`4!Sa>Cfg^0v_j9%&_(m%7k?I^U(TE`sdSpwqJB2%LY=hps4* z1eA(~*-RqZr#6@jZOr7^^K}*F-xtV1G4^~ z=wOei@PDzh{=Y{5)z12lUFx;#ZsOK+N} zh#Ukm)|k0S2+yxPNodid=NKBUWlXyoUGhJFUSN7Hd^wjmvC?~)O6AG`o@eU4E!m`U zGfMXoWsUY%%4`dsrwsvlL8{MRxKhJmSEYy+V7pmA-#CFOCf%%v$)C8z;L;Jv|MH~h zxZAf0R%AV9#h{N0DwHXRZ%MXMQUqQ7Xm}96@7NKJxfh5~uQ?>D5+8{Z)+MaDpE!(F zB(I32m(Vr3ii77mdS*VIG^ZWynaRmaYT_4$#c?B+T=P?<01MSu+L3(_OF2KfN?AdT zduP56Z6}&B>W%rrBkqYElIffYDB~~(Wc)IvM576-^cKM^jZstNIXih)zTDqr#MgqkV@GqC z>o){%m_Lrfh5S)jH8~#hJ>+duvTfIg0kdIgEwuIk2;OQP*0_DRJ87cV6?%+<&~F70 zZY=>WQv~L^ZT;l%vIfwnvc3Y)w&MCnRELnIuoqvayYm+VUVx>wk>b)va%x3kC3vsC z5r&C392n~t2EJ*mc36epHoq^)R^Xyr)N64!WAgI(R=V{h2^DQS ztStA_rUvF*VFs{y#a?Ne?y|3qE%t^L83Xzmx)_cxN6M5QqX=~i3ZkKykON;gY((8;H`LN z(bJp#WQ{Tr8&HPvLTWF{ezqiN46Y_w$;(Ep95sLX#8%OMk^a%jv7~f{>7o7jOOWk&rR1r+ z9wUmQEfF437wPOPI5d`8LEO~TSpV;svKAHkEy%{-3C?8@EF`Tr8vA>xI45DE9Ptn|%9E5++KUO*%F5%c&d+TRsp28Q0zg5kp{vzvYucrliyR%R`` ze~4p>TCk1408cBov3SlQhB2{sU5h9K$*jrBjyT|Q!$-6riRV9e_z7Tpv=?wo2~+Hl zkTA(1o9tkB+~mBl6rs0niGVo_W9+~RAPBwK`wI|iApilww;i*^SEPdh0s@?_ZH(SS?-9+Z71p1GaoXWPEof&_YS?Dc00);~V1c0Y4rO6veD zOsQ@oUdx(K{_VowatYBb?YL3-VTrT%e9cDyt(N%FC6eD&b6vd#i+4S1-~wMkdXSW zX2=iY;bE*&hx;lYjih*3>*Xpu(539!r4W<1zF6x>VjKwh@NpvfoDUT8b`KSoZ}Xk} z+M4TBqo(HMw;@-vZUccjuy+niq{1$7%a3jlBkc<}E|==vANtD+jrW%ub0kF6Ez7Ji zJ&6T~_Ua;h@^b|UTd#_6$eA6>pkKy37P}%g3KQ+1Z!QR9yPW<0c{QdLP+$8E797pl z1^u~PkJ+6Wp4@y=RiV9>J$gqgdPqu&a$n7FYX#!t80xNaJ6~^dz|))uQq1dsNLlw@-8gCm!)w zC;^B3fedrG5B5Wcclgf;SBxRxnUce^o}c|W+vqzE)rNaALdT;sQaMB3 zWnIP8@%2dETn@hV?L;ptHV0PIpH}0{pLIoM){Wj=j-9AkqI)2K@gvaIFsEO&*<;l&`yp?-fK56x*`6Mj zw+)vv1#l*ktlR8bwQ0gfd(o$p+un*5^IO)I%CU)7PaQI^5kea$Wm#o?M8k=02|L!s zJtL2wF&hCs*%5<*JIRK~>vUv)lnFd*=MlYl%htBxqAM`lOIi}CXf+Wibd*}3qcQO{ zz~qGRM5~tSYK^XQQZ98J*x8xHCvZ0?HqBv*NW0HI6Wj;boc2sv9AuRZKpEL^M>WE1 z$3QB|L~~eSV+F*camiNh(6AIeIA<~y@R-p93$$Zf(c6opy0dpDi-zN2@`mq+IJs@b zvrVO})IN|TBEf}R5kl^CP4(|9?GAZm?1kdcXZch$yS6MiK%r#90JaOV@Eeo~UEaH5 z7(jOjf9Uz%)!F)~wfGw>DmL*>*Sd5F0VSHr(Fg(`56i24!`iLf3Ov{5PN-TY_X6gW zct`u?PxxnOFt=70WF^fBhib-oe_IVIZnQ^G8>KqB{0tWmRWWI< z6~-xdoI4-aa-oIUmmJu7)~>$lpG@&dy^!J!(qMS67*kS@<~)VyG_mSM^Iz-PHO5|N z6Z7JwMelkWf2{N##M2AR4o@S3Z3CLfXM#q8^p=MZvl3x5`C>G^P@*Ec>n2d87ST(d zUBwa5SJGgIu}P`^5Nf8;vVV;Eq(ELd<|!}OB|HkgCb!Dzf(6^Xt;mHlW2{t$f;W6Y z3argJ{JL`BxwrZt;Bp+Z8UtCvlRzBNaJ!LX6E+j;1KFZc zwCd=`9nJGY;d4W3V?ygx;sr_xK`@d!F?~ z!+ZJm%3SM1xvsDy6tmwxVF@?Gic`@0OjC#xFD>tDZ(<9db9m@Mbh!`^d=Su^fC=JD z=?`+G2J)5;YkBK?FbX@K$k}TiGU#1(Htz$Q&E#q^ z&V;>n@gd(OR#i9U<)L3Z`yj>6tp2gJfu63jQ9uCmzVOS49^NA?;(q%WbhJB_!^Ne{ zX4!i(7S*~V+L7S43)WfpsTKGyfa}W!9Y^dBkY5eC>Kz%PkK~^f6tzGX(nLV*v(-WJ zrcM(S7;5f>81Qebs?O79kxpqSn5XO*`I`s8f&M9sS?^kff_Z zXJ9pqY4 z-w<`Eld!>LK~eyZabSX=ej4gA=4ejmF{)UTkWTKtCNuhbPP(ijjAs{s1oORWBstBAMS3B*e6u0Emv8Qi<_R517X)cp8iniY6iPMciJCrC;k4>X zhClv3vGD~g)>Tzkek0@|60a6wxJ#1WDt9CZat|?UX-1D42vq4BmgRvAXD?Txz?YaB z6q5>&0?R9$-UCKV2CSDUr@d}v#8f^_n0m5i|6nPO&BT?^a`nv-C^ldEki*@N=Iu6o33MFnOvanxet`AU6ueO{h{ zbM(=fr%&#jV%4I{V-4ZTH5x;1fX(}7ztazm>hJOs56;DuSot~IST{5cM?@g z`K^J0v^#2-ysX%&6Rp$CK*oP>Yy96~E`G37mCYQJt2kVZAo7ltQb+mzYUnz?fn(Y1J9}NbN5v~_nv(tT)0`cz)U@H1dM@otj4+% zIuAmIMS4Q808!u+SI#M)k9gF@*5OD_LvFt#AyxhqIH_AWw zcj*s=aA43ZO=Y8m;L;Va*;O~wLvnemP3jm)z&O{h)A#Rp{Bl=*G9)uj|J;gwA#Sr?n0u@ zvWOC*>{^cXH07cz!0EUX4(@+FlDVWnF)X;O(!VjQ0_>3gA#=lk@ zk{qcueK4yW5l~iIttBr1&|0dSInyH@aGARfW;VdeoOrS;^!e{~@;_m&hPj12{rEAV z3-w{RW4e|%v?B`~JM+9|kW^Jd+Rnbgf0$pj=Kh^`J5i{exW)N8hC5uz^`ys~ds^f+ zPer1ce~kAGhJIA-9NN2)SfF{3leHYGlK<8I`X4kG3*%qD%htdGhMSx2f6oFjGqe6v zdk&zKsfqe=YHoStNmFSj$4$vmzK~_M#TzMdCbP86=|F+A?mo;k`X;K3-L@?m>=z%j z(U>Ct))ot9aD0b|L7ceguJKL+{FTVxkDXKN);fRR=lruNDZ2>Bc++$vQtpHbtT39n zhLO(hLFPy0*2rL~;2T~Zs~S0-dFm8cQqkc!w?J5lS*8#GA>`aJ#yVU zt>}Xy4xeq2)OUMqdl}Mej8)PyF7rNdz84GO&PYX$Pm$qB`eu@4;gXTi1O#F-5K2Nm z;jD@~NcUc}Q#mi62c$ThtJ4<)-ky;$X`$+^3#4tQz@!$5nf&|=d$fFI%-7Cx8m=)80G5VT|6 z=9*FTg5rmXU6SpWGwzbp(`oNi)pg8gK3D22usB7y&6LID6=!{WqNNdqSxH|!O>>w+ zmfog!>Ej@CU7so|W+6Q~8UYj1_*T!_BVgukplUU+Kp=XnClf#c!g`b#z!Plg^c=kW zxxh=RN{o2VuqMx^GaLhILLHR1JFp@9dNz%Di1m;p*C`+?@_oEHNMH=o@5O`Q@na)t zqBV{X;Guz83oBCjBKkcs! zLmrzQ@E33ZH7tw}w3Fp5FezLSf@iov(rG8MHi;v=!tPN}$5E8KY+k4|VOKIaaw*;t zwI9Q1nrML|Uj3IEHLDv_~YNIvQ3>K>C}q#NwRoNIT^4@7d z{EX~rfy0j^4)cobGaJj9rDFEeh63KW{g{{MQ5!ygBop`9MO7#_(JA5jBX^aOxH$Mv00~Ew8@oaw)HqDB0ur&AMA+Pg4Yyf%_o0_9oaB5`?ETPV=A#3c%Q(Ew||ZQZ1( z6zY|`+_H9{r#oYP^`>VJ$P1;V z1jjR^oHx_XAkvI*sq@tVE!>LXUaqND%hjDI)IRa)Q1O#EIc20UT!6cUX*sFd49@=w zWG#?YX>9SPO_AZ1aB0;^Gpj}l%T1l2)HvLz8Y6}c!0OvVe$!ax`+L^icizphU1O8A z$v__~((2Oocs?sd%5avqsTtSo(Q@WNbJXc1Ym^rf2+r}N+wr$&1$F^ zSfB0c0yuqG;0jt_yyTGVyX$0JStYMC3AH`Y=H-+>93ytGMV^`4CQ|8JoC*_;J^fJG zY-5ian>@6%&u9)B0k$B&d=hyud!-cA2mhdCgB4<|%ifF7EK`_cn@G2k__z|j)x>=p zJIXc~)!2`a{+Svd{Ak}=i9tnwDaUE291l;ZgqOn0XWy6FB?}B+oJhjYh-W_5x|_OX z!7>E8oze(GU7{VyR`lLSqcU8<_(2kvQP0}S*HWWHybmT#+yVhjg@K zL4Uy5+{>pIh>&q*c#uVuofWV4;M!8L1zLhYg6`pbkjWdlhBi5si5*g1YxpGF_7U3(aO>UuaG-GZ_r~^h? zZ?KgHkRjvSlfKiiX_l1N&!oQj#M4VDmjFg9;xgxH|lI^<$;YA*aUm}=QxCLySe z2gYW=*PW76dU6zbC@rU-iQZP=8k`A`*U=TN*PBZjl4J4bH+`Gg(wosrD%N7~^d2LY zYv*$+R(=^~R9r@um6R5Wi9ocLWRI`OBDCSWz2@Lk!6tlE(AaG(-7K^O~Xcop3*PqC^i+988|Ssw?X;t)SiF4E2PSy zy@N-7e3HV<(^}{UN;CEg{+fxBvLT{rEsGAHVo^kMBCp=xB;_DyYptxOTHJB)n*~`} zmDZUgQ~6eh;^_9?5mnH|opK;lAOE8GwDd)}gC?$hwu0R6AT0SU$*zU*s!xB-0<7d@kYm@5Qv;@v$z_0w~B-|>dMtLkOZpA4= zJBDfZkl!r$q)rkh6^^sKFZ^CgbQKVBc8FCR2haYckC(T$buwp|&vgA%q4=hY_3`ap zBV4&+X_#!6I_cbs5*NHa>y5O>&F~C&M7X0;>j;fvCIAgd+6eeD@e2;m&JO;5k{ z!rvtW`nIs>#95X$g6Pj9ji+F7g1!^wqIwB;hYkO3$RDJH9p{_B;tI^XBy8=5yhx8G zM?tLDYmJh01l{_S|2b9?Pj+V`i;Pg)sQHr&*@$cj{SB_u?Gm#`njnt;_6uYm{2(0K ztTn-Y-ZH(edRM5T8iPbl0Kj<}45!1~HDf#>CI$Lb``3QGPDWI-r+R03k%1VL@dy-? zr;8{?82{FF-V#0*N01(~_OcoAVT`mNrW4EL>Aih)uYm``Z7*1LQlqpAxyNo#CuP3>$^%7U+ zNA{(5YvV(fn651Vcr$FXj1!rdE{FM1+DZW_;K*PdmXSnqv*|3Coqk-uP`G()kdhjG z`5KOq;Bxr4DY@y72b|RzV-0l$t9WFHR^COp!Ac)gX1xFq(Gp95G#L8&msksK8syG) zFf@?6|H^g#Xb&Z&y;JiQX0Qs0eAWgH+n9t}2*W*n)k1qX=;#Ea%FVy!44%Mu7E2_o zS5>0fzFr(G3@_%Kk$kmV4q1Xl&dYeR#8QCZyPCGm)niMKopA63P%55kZAtFVL|z2d z@BE8MnnZAn_TfmVl!U?+1-D?YGrtJDAC17vP%rRaJAiv`Z^}Zd(^s4EaIaCzQjI7C zq9MxdTV$G4Ei)c7%u`D=qaM2?W?_-_nRk2|P~tIMnV?9(xc1gdt;2-l9v)8LfwCYy zzhz9PWVkB9s2ky9XeoJ|7t)qV55QkHIuSQ6oY9k?fuGSHBQ29iNZ0?!dC~pxZE&Ie z-!^;}U6d*v=l!_Ok{)?m+16*a(mEdvS}SyQWZAxU5;>IoySeoA_{W61##S8%b8()W zNg_H^yUvqsysm~fp;4G5FhAO*E$wikz9}x3hsme^BInm$0V8~ituYIOu|^|=m(VNQ zkkZ=jBpx2&$Zcv}1wVW^F?OrulMutXG$Su!P|ZuN;~=Kg9hIEjZXyKKo&UYbvULpJ z!FJQF&i0Go56|ZxN-DG_q{X}MK%gY{Gu62zno> zbX&E3BUs$v#HsG!Fthh8+b^*_M6jKV)(xd$!4$~`nnx>8&CVY>rV7nDjW>E?dVUKX z9@lK#r)AS!aEm-eVx|=H+HQ~-GErS{>aO_aGzUuL#c8tC41z(@wo!};)auCG%WQrU zyDTVkH>BCI#<0>Q3LK%Z&BBQ42_k$slN2P=3n2%>KladGx!L5p+qRbh zLZSUIXzvI$w5nBwNZza1I)?9nCgt9~7~QR`?8?19Tb|i@`ad0fZmt9V%jK^fnm2K4 zP_aU)dZ=c-oQ4gCpP5&1CNVJuLJwJ1_(`j(8I3zOR_0cv%zKk?vJZv?@3%#`$4!Da zSV6Q)yuD`_MetiJ2fVHWiS6zaH%Z=0;)Zyfxmy}f#EGa^*#CqaX%^qTpLtTxTa-HLiz3RA?wXwhZ(RetK>;v?K5x4N-eHFf3-vw?l=XhSdP_Y?u52p&;^ zuhef)egv~uF@G66s_)Svk*Pw8DWRRmqGEFCw2%GMp4$9p8%$!C+5i5vERWVj)MBa7 zeF7jzmYpY57J-_F%6(xj%Aehyebwk>$#cVV1w0q**?jgs-?{EG{X9W)E+WMQQ*S#*xin4!-{R4Xqbe*5nuJprke{zH_C*5bbaJiMI2n$Qa!J zz*>J^#AWppEtHQST&aa}S-(w9D$26iczx=FwSka9>QnjK$24xxIYKDfqt1x@f5b@a z|8F(C|J-niWwXMm+h&<-(f91!eXzmPN)Ht%>g_rr@{WRLO~py;jH)$y_QYZjzbCgQ zzkhdr1a~*tD9VTmrzGHy&n$}!+ol)bPJODL?C63@W;8%3<Tl6fnlaAqw11G_)b0A z-4&1p=pxFSoKNco=&Ry@6$$Ex`P;$1jR0YuDahJO*Ybq$( z7Y-!eiT(I}DIBgbRwhyxpba!~Y07qpDK;KvHq?H|*#ex*6NR$S^fYwbL>dS&cOqDu z{Fqz%4{j3ACxpcoo&SJ(I79!gX178fgYFwi4&dYH7j;|S;Pu>zEa1o-#z3YMh(j#&+bxzLr5(bsg?EWb_R=0#^HrCDpaOQ*enMub6I+j8dIZ6h$5q- z8BR;Aiv;2|XL`lxF~*M#Wom2x=R5h2RObKbj?%HF07#f8X-2Fb&wfpc+V6u^Evf5L zbIVhHD-SF20)71#Z;Vn?2V3|}T66)-Be*rrkYg0COD*i>C#vg|=mogoxze@sbqCRC z0QIt^SP5B_n6=AG|8KzYe_!c;%iFR4hnnjD2RJfwF#T73wA1#M4Vcn$5{yejpNYh^ z`zZSlw}5`YSL%N7nb|O|3bP69G@>W6zX*CwE6Pv1#8LE>Gnw(eb#a6*!5J`IhN=^can$NWNQP{PVmodhgK z4A1kJnLcnae8$IN&8U7(W^7PzC)@{Al-crU@_ZLJ+N zWF73zB_hf6bUEwqc8|1&_RtgEaDzL~gt@lZ78Utg)LmvU%nE(x*s0Qz4g_J}@S3|9 zo!`Bopl*iOSZUqdS5`jLm~INO3HBrzOl^-GV~2g%)jqdnz$isFvcW(DM!NNj_qRtU zlI2>hhoVUlzm5Zcp1X+adQV=a;bF)ZSQ4miZ|#1GEp>)uyX#HZ{WF$1t@iqGn1^hT>EVY zR$Y3ExxL4iH>Em5X0b*cZ_Qs)Vv3^KaHar0BddE>@a>4LB@U73`EB~4VY$%kj#Mh4 zChChPUkB#c*@MA{n=o3CAgicLpqHbY3MvvY@|JJB;c(Xna>68$Xv}|3jEzEYg1IXh ze?-|wyXm*XTu#GU0e69r`cK!?zgJ&7LJDuABakMh z<#!oH;(mJ^?oK_1zuf5n5q*?|U1)W$fp3|Wuldm{t~H9?GE(FFvn?)xF=bjW;hX-t z`LM!r2#c=xUy#HzbK`jQ%GqFvFld8PtR$wpX~=^yX1!1m9B2$0H;yj>*O;GzKA9oA z@d2^5yQb?D2#3X0&)6U*Y;^JEpHZGLPAmd)N7PZmmX~bWN2z$~yu3(5C8^wnug}de z7evY5h5ntTM-nEdqMo>H7M}fye}dOAm$LM|MDCiZ-9~|vYSv_P?2V6`r{-qPgZaX@ zGVwMXW`_TaHUwTjlQb_m>jYTH=j05lzsEl7Iq~@6TqE7MWZbh!Dw=B48)YyE9DIgL z7n{ocnMtpQ?3iy@ipZzZxELxt&##u(DN30H=y2dpH-358ZDSn%6|7 zY`jh}8UT2yHvBfmIdw8I3niBgajdDqNmBGQxrj^L&bSa;_VoBfB0?BT#Vvnu-G%uc zxZ^4=&iu>wrfD89Z~+7E`OYt?IHl}bCw-h!Dsd!Ar6U>$l24MH!iW9^#yqD*K*!yH z+(5CMmUxh1BbNhl7YOsjI1{i8$9rwCpR3B$i8lI+?_bby>xFH()=vT2PQY?cFNfD} zj@!>}RozcfVNF2D{O}9NhfA>phI2y~_yD7#z+9L>@Kh~;|q;Sg3 zSu5!I;20dH27{-r<}6^Ro#UFU&WKW`CBKiyKNmgvf%9;#JsvBXcTXps9|T;euObXu zLGP&fK0$jV8?4|E7KAAo?^xAPt>(^H#(|`#$kN}y!r&XHODg}dn#W$eqAd|0K3+NH z^%IUT)IPys{jKv;GD#4r@;2BSpWSA#v&}FyyF2hedb%ceG#6KE)kB%pW(n1`#5wD$ z$~_~YCXa3ePnfqx$zA!U?vS7W2%Ra@qi68CQ9_ea#oycAKnm}bHa6j>uv>?HY{ylUMsfe-5na{Sba zTsaGA|7jf5C_F*39Mu~*jzyBs4Mcx6XJD&gC}>R>DacRtezs$QrZy5?BVf~VGh9bJ zf#H|mF(+7tQQ9LAhQiiSu{0-Qs2ra(f+a#%%29VGfUWmJf*$N7?6!PmS8A zU}|8$7GEg}ef5@-?-re+v%=*4wZmsl4#4ASG+P)=ZLr^q-ECEdfT6WQh z62Dsx9bTx3lF=r|?66>acG&o1^~%qnJVxi-1BQQ5Z1vm)G%h#+|v zp!&L6xHG&dD@imrZn5YH3ofGykMFeHi|>8%iA>j#St;R+sNbkG?C=fk~9AxSX)Pv`T>37P6 zAqZM}ZG-=vnrPzxtt-v?%c6-$`EvLJmPIeQ+jG!CtCoB3fMM$-{|XkMvV)p(KY#L1 zq|wE>x8f7WJb{*}zyEM7uo3|GhOA1%tg7r~xt|@q_Jd3oo)BZ|Zay0`H^tNUU5gR@ z9HvpNJv9YH49(GD^rQq-H5q>ZOp@Pg_xmcv2ZnF?sES zNiamOsLBsFk3S@GWL^-<%0EW^gfW(p7m>N)^|k5wurz!MjW_7k+JaDRZch>#=3LQJ z;^%3QrH;raK5g+9kJ=w+B&o_GKJ=x(qTs2!f{r#e0mWE3yZ@DZYe;J1P9K$Vd3MI1z_7k}K2QQXP zVr=$G?DYL(=@E+$R;ZH}0RNZBJLOQ8^IKrKHT5J5>_9wVbrv;}A7MigFg{a8{rj+Z zZ^ElJ*R$21yz`jVDJAircrpI&HR;zIT~!_|4yYnSoQ9BmG(IS2k6sx;!^d0H5CrmXaJJd|edUjs=FV;A3&5BflP zFcdjC?QkA(% z>{5{dn?s-kWl-o6^32f+X5>@I)S8vP!8C@hnTvSh%eA5uFwP~AIS0~G6cs;{X=x>a zXv)UDtA3yYq;@!lQxJZ}fIXYUfyU0oMk9)aV~tR*Tpeb%=O#wIJXAEr!9Xs6Cl|r1 zAv{Dl<$S#X^MACKn&tzHOQ9ijMOS6yU-cXM#@=O)1QPo#BdiB5hr_FYCKt$vX%T7m z7N*#t!Tu@RCSntDa-zmSohSrgmrSum$n=JUah{E;{V{6rnHfnAb%udS z=U!(^oD*#5=|rH^C<^>VEvtt&u}>Q-U8w|wajk({g_vN%w4ssva1&##aJrP8-?e&= z>9#|`mMoCm)YovODAOFKjHb5(OBFfnyOO)`MSl)5W|NpodL|{cBB!kt>V6-?v65}J zN(5jS0p^xcpws$<0lAGqOvuD3Ku{o1|a;VSW;SL4LjHbp_@ShaT!%}xV0=( zc7bgtJhQwOJ}bG==b?s;Vh%#i^y9<7z!DlKuORK7DILDTEwWBjw1Nn^`TAtY_k5BK zAhw9dDjLw|6Y$%#^sz@douq-9#ToDsgJv+Dd^LKltfu#85*} zC3H%u4hm^IAAZf^^N^lM19TUJAu8Y9?Tlm$5rt~2+hEP;NqO1ndZmu;SC5v~W9G98}HO$&5}*6-5Jqt#2tV{uIQ z=yky>3%p=E&%dV#OsKsb2%CZgF!AV9b+A434(sz~rzX zY4+EkpeYhh_i$LT8G}7ux(|WR62j1{s5f(JkgUapAfTvsO?nh@h3Z>HhNHAhO>R`n zG`|i~AH#>?6{>BFnINIIk&Siy_>CAZjovErRq8yWk$hnfX-4982JDgo*r_v|{z%@$ zbSP*o_2EYCjpqjyP7_r8A|;;a(LA1n6pht6`c+!I@Rdn%+_Ow0p>U4 zjU_D;1~!5#Ej{TJ(C?f1g`abqX^>V0ax`HaT*UiUw(pDQnmK#F8nLILc)5Km^KB-* zt2#KN5X z2ggtQ{X?{4lE}=T+LY+-ESaRWblrc}9+)HpqU$fpCjvE-opMFblW48Xo87s4uG9w1 z)9sb)Okt#*WRe$%l(_re!D6Q5vP7`kY*X*PBc=~h6v1^b1SBeSy{frfJ9j){46|-u z-X4r?1gsxI?I!qgK7vBez6TZ9lTSk+ciIyckXlP!;Jsc?)B!!eQ=F)`NrhAZURl&O z+E7Kw97=EPbG??Z9^FT|Cg)8o6ppI^5r^N`iBd1m47)3A;lTveS6@%UX9t!c>;ZJ( z<tC29$)n4dEfL1CJ5IjX!sAbCQeHb%FIfFn-`LW~ZG37_ zqKOLBj@FXk_nM(PkM<2_#BP@&tT;Lt@!t!04@Dk zR08OA4mxc@J3Ky=^r5q1c=CGiq>{d~J;69Qkv#GxBg1%FD8pUWryCONrcn#SVxkaP zCuET2?;!AJ_D*Ldg8NscubKPlr6g&)sRwixcxW4{!tt4+U_nSoyP1^2c?T7C8F9q~ z+%pgCkRRucJsxnIueeiFu}4JtBb$valhv>gUxV$Aj^Jt+LJ6}|+S2?2w&;A4G?zRX zB+5>vdw+Rr)D(nMH&e#iD>Vs>X6|e`Y0lsU>#~M9jB>KJ75-IY=4pbii=QAvX8zKz zbG|D_=KAre_um8FbhFV#^_$Q!EIVklBy&F8{y1Ho6DrW4n;O}m`%e%PQjJ_i*ci^@ zmTZMTCMD7?gcokGtJOY;6#A~LONFe;alq3FeA!jl2tM;%-I5`nlX*+g)}~4-%aMGw zd9&}5T>MXDLZqaZ=0Hye z6fVM6rWDS^Av`HQ4n+5~Axhgby<-e=MeLWh*KWIIO04)<1Hx73wSi_u{dQ~Tmb-+v zeR9`R9!4$K#mzV5@TMuc-nBawQ?eL1_ZYLH;Z!y zA^6)8*V5KesMP;_C;yS_{67Fq59m~RCQdLHc2%{1{eV&Qf^WOiRp0RQ>{YPByockMWP&PBdD;CsSVqa!uJ3)Lem(Mm-FXqgz zeRsk$7{*qsjX@nvW$TjmcT#xg3G>?e`?1gv+Zx?8g?&KgNK-WhN1PzcMs&Sc$0gE- zdOjKNV2;~@FdmyQR4mbF%21v62}9_i`vI<(qBW^-4#S8Q^u#FWb9A@{k=On8d5+82 z!UYFfR_-q0<|S)sZQFv1)aSC%0eM^O1|bA` znv^23Tl#P7Qop>#A-dp`?VUsc*Ag3B%o7u3@OU-KP)d3npA!*O`juXHp+?=;bj3*d z>`r3QEHuh1$bq8)S7KdhBa*P)C&<+H5b3CPnRa@zWtnCew-j=8WksZjSv{4RC|ERi zMw(IC$Q8i8?bOH=l=n@4SVy`v|oHxzXzxlHM(uf{=$itZ$$ zLhjHKZKM?`g5!>RCOZD8f6ZzhJbuJ>F}w@Px`-pvw-$6iVh0TPOkqve$aGV{SQ(&m zRnG)>&Q$>?in}SJpF&Fn`mT#4!9ks+RzU~cS`O6o_b+|5CJM481A0~HKRwl?f=c&b ztQEYx>Ivc*ZJKOzInkiDZuS-B&5P7256Q<#0w7_@1MaTId;BWeGBW)BHJU?F+nrXg zlh+X7jA$jQAOq_)ZTH6JAax8vD?x7&PA8R;h@CzR~yDg4ppjcxz6;& z4h)=U^rooAMjm2-a*;8RYVA$oRIt@J8RBBj7K%p7?G5&xWGAsS^a>mR77emywi5{* zoe>FoMfO;Y!TFYh?()ahq5<6m+j?it@9M7suR6N%TLZo>W{w{?-NdWqrYSj#@xHN1 z9#}thxOT|xt*yNj??$uTG5{d%>abrSmm|#P0UZGLb25PrufGht*hpCuYbi6OAfHM^ zcsxoYlE+<}h|-M{rs4wnqZu^u$H+kjU81L2@`t77Mye*!n}&ahf!J zd-sUy2fKTO5Hm8F#t$OFtZ-RR*#vw~B9teISv|ppa`nM$BglVsILoT`^}ECq-PSnM z$HCrOF_^&Hg@yC{E9UgTf@zDK`e4P5l?Z8>kW@dgq4t&6QVwQ)-PXYThU!6%Y*OGu zA)d+B#!h`bNZ71_Mor>{npg&95XLe^vs(4~ryF`$(p8H?=l#4%d-^Y4ac)x4G0R0E z5!kR>iP8O}_QJ7~JJhAEZB7DE$g45z)+x8e_!JSGGFEP+b%_<$+UG#8CzhGZKozg5 zK+|U6PvSo2XgvjKRSV7hY>$3BzHsb9`CX<0Izu1v5WJQds1BMj?N5rC3jirH7s5fm zH_gzXgs1`&P%QGPZ0o^0?H6L+#P+GE% zXT=&#!=HXfqBfFN#3O+urgVUXz8+vbgM`QL*+=x}Zp5MEGVYbH{c^?@c{j#$dWoyaxlaqLKC!3w9#w7>@h`&6vK*O+xH zx;fow^(|uA#KFj_#M@s=Sai?lu+6C^WLqth>G*P2G^%(yH1k6W8pECphR^{b?2o@+ z5o`9k_cqy5eC-~^>ir$uyg&sL>{V>g$nC7L?LN$AvA*d_KJ~MQ22n)3dZYHKFgU;~ zB<@27>H+aVocP^L?stF3JnQJ$MkSV~%nX0Q(O}ZH&T=*{$*zexo>Tr-9K0o?{5f~6 zTbhjykKq@@RUUcM(rpq~zP zhkgl!gVvFkx#^NGYb5*_C!m5yPCoSMf3j&n%ezCXI_zEeU=r)RspsVh)fMtD^3AY= zyk&P$SE%Brgt3ipiQj#Jp5V2&J2vmUFsqUDW8xIo$HuWRgR3FT>h^kNsjua*wa1J( zcGk(B=*Co0gA+~xM~@uHg+N@}4C}#^kDT$_kJY37`wa^(6Sn+&D0uuk9{0f@9Mpg4 zO6kq$g-w-ce8$j~lw&ekO|jp@^#x~&%Ac#E36kHuT!x1jtmyl&2|v zn}nMIuNVYaL`2z0zLduecD9}{9VHgFYSFpTgXu$()G4wV!~)j+EKIeQ*^7~n57ljL zxqpWX^Ub=ImaJl@!^#3NUug-kEkjC&Z_-uC1tbF{XB5}txSmhT0e%&qQx3DXo`>9e zOL?NvVGG!s$ZIK!pjxoq!>~^4MK>}81%1k zZA>rf)wVYd!w58rh7D;t{}TS!Gn5gFzJCK*qYLhLJzXe5185`d^!&CGdP6+lHNhJ? z3uv5g8sGw8P09CATOy zZn;%zhnRHSUms9LygH393N4&xwC|ODcZcYedByo_Nyt^8x>2}Py(>q?gT{fg>)fwYpPnsm<*f1;44h&vDUH~b%r3Y^7(v=A~T)xE*fS2!sJfP5YvO= zCD<~woTT0+P8W`J|62m0X{yqZqQJdo z;f}Fl2f?-g1*GsRYi-=17zo7=3r@b<_^iFfPw}OBp!WIDE!L>}PB}4eZ0gb-KbZ-( z7eD9Ug(39!ubA)P+L-aq(PGyJd(AJh$&a?A`~;Sr+-hHu@dnBZ=&g%K!rttYeJH=W zmEbF#nRVDEN(^EjD(`g>AD(JAcQ-WY*1z&~yKBO|Il%Re*2C_UYC7<3V;_v4#5gbP zZ-Saj&thW-(6OGUUM$rzzG*u+@z0#;j+t|Nm3~9th$Z)J!|{3hCmuP!`k?Z2gp#x_ zX9X_T>8y3XXh)D8{Oi3ikx7Q&3Kxn-B`^4uY0G~v2XMO}ezaqqQRT)2%x2T}>HWg4 zBnT!|t17Dykn(OZ!;Ca0Z4etJAs`&SsraXZQz&Aw$Nk97n3fz7g#?<0c$Y+BBxVp!MElLFZA#C)Fn;dvLQ&ef1|TQV zdb|`eTI2gOSY>JnZCe(MC3BjCGO&6RsO1LRKY-BH6?Yn}LcPIjlfVdS>;z&@z19^Q zHM@P-E@MTnuO;Qc`MqRHe);2}`pm2#-kFR)>$RK$JB4fMTCIxdwwY>Z&oB-7OF+IP z?CxFo&E!_ZxAajV=7w1k3H_MaJwkJ{gl%++!lzG^n2t=5xe{u*(gi|6Nk0f_G1u4J zW;-R$&Y2d!2cWl=K#LLzCVy2_?GJIW0s;q%94`7h?K|QRztpm|`a1$tsy+ztrlNHGk(NGUkBZg0($?VknafQIOZ?`$KmTDTqy4W3t1oJH&Fj18?>Z!GF$q@7<3PS=}5+BrBl z?2MIF6TV+sTJIro<1q5^!8rz7ke>`_CM@rdk4)l@Ru~-*^}*Dx&oRQV(i-hKVKREy^S!N@n1G3(Z@- zpTBPso*C?fT%~(l-e!sTDyv75P@&vL+q4EaT13(Q2{H;-DVGNf=>y`EzXLleSm6{P zqYObqz^rhXZG}+!0ST##N8}^C7%FRHz7lGKUi}6rZ#4<~Naf{w9eca+>&2cW%>uj} z+}G7m)YDa*V9zt_*rzUsd$Qz!jRW@j=hW_B5kTNPSR4*GNt)LBS0*#jyUiaD+RTw< z`Q$>D6uD;6@W5lBsbzTb+vaD=o2ubL$3-C`)x>uMZPcM_X0lS z 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 &4zo65Nqu|5V=<%|#WM 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 Date: Fri, 9 Oct 2020 14:12:55 +0200 Subject: [PATCH 0956/1047] bt datasheet --- doc/datasheets/hc06.pdf | Bin 0 -> 775127 bytes doc/datasheets/hc06_chinese.pdf | Bin 0 -> 2099193 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 doc/datasheets/hc06.pdf create mode 100644 doc/datasheets/hc06_chinese.pdf diff --git a/doc/datasheets/hc06.pdf b/doc/datasheets/hc06.pdf new file mode 100644 index 0000000000000000000000000000000000000000..49106b04589c6c63573b471ab2eece29b2c8eb4d GIT binary patch literal 775127 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 z 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

7q-BeB%s~N}NPB^M~M3?N(SQ zH9@De2&9XO|KnJ`x*sYsbowB(317#a!+OY$}+`p zYfjBM+h$-VuV=-P!C3`=p;4SW+9@;jT8qaRTxL%N(#WA5XKUJ509GRnLfW8Wf7OJy z1udlZFUT4irxcv2s}QFqUgtP5go;f>4L&jZGjpd+q63FX>fl@*Q#RNUnm>8#@MN~5 zNEL-MCQ#;ywi8;1X9|>15rgR=Z4?^{u(;4&;}`_+?h{SZhRBf0tplU3-6BR=XRGBz z*E=2CqOqT#wP9$y+pYa(JGg2=-My2eu!WoLi*MH8v<@WO`>*s%^aRK?t%9OI%oJLU8Aog~5lXLqG>Egc6;$D+zB)>v%xc4D2Nd^*rOXA%pAhZtu7 zV3Uf2^ad{hd}pDN_%U&+c-CS}Szt{XkCO-xBjLi%7Pzj#dHS|E_}7pbla2b@D8P;+ z!dH)f-n@lEJc@dnORL%^6a<5P3+y*zddh1(8NP{0@82);UQU7_Bj4621_=;bp0IAK z&V&K^p)8lNA5>slP8?;VD+nzeyW8HOd8taiijJcQ;O9Mz=46b;re^Wqu>^#TMTL_u{F3FNfEC3;SK3Q)0}t*&pF-OpuV z=+6mLXI)2LLj1i5jYF5I;iWUV#{)pe%0QbWgCEyc>5w#NY|Ve|sse_1Bm^eK-g^*x zFb=XENHl+{*F9OuXLT+~0W^L7`}Rj>s~jSzT$EJ&+%4`EGi@Rh@AQaIm>gPBzN7M& zxtVzDG$WL?$C3DsGoWoW>(|(o8+H+zz2n9oK z(cic#pFvS6r7GzU`=|R(8arc~S|S%dgM(aXorq)9Gg{fndG<}eF^QP+9mpkATUOqO z_{1nwk4LrdGP(8e)9aDr8xFDdRKA_vh`BrzgL{18=WMmz`J4GF&hm>#dSrsjbHD6Y z1|QV6#2qu)pMH$0{da_%N+_(@3i6%h07oPR{L}>pis@ElolzXvdl5*_(iXkVJl6^` ze?0DD;#J52&%b$G4(UCfD3JBkidRV|`US6#TXht|x-t+);$r6*IJ4O3&G$F&dF-^+ zD!qXmF?p1fVIz0e#W_KHouT(%?d$Taum;YL$K(H_)l88+GC*}wTvT-Vro zHwTFn&b&RhhB`lS1t@5%8S?T3(Z4qp2n^f}(q(t3lH`DIDNe{T6&WnXDM)+KU$r_l#LQ`k$^tEdQmhWf_tvsndZE~Sn43KPy;sJETW`HpKi zqBZk34!GVQT%soxnTYIa<7Hi;#74SiF!2BUUP7rRyPcm6Dy@UcELm{ajtKkGvQL9^ z+)cZ=c_$LL%6_X{ei-7A?zDHverutokHhLFJSD&o3FmMJN6iBxT>KRHU>>oc-gwTL zTG9*ahyXx#A4sH5{rR!OcQ|SMpr-K?ptu0+HH~qSWe+Mi>fsEQF~tj2aO3B+MS16y zyDVWCzJQ`pNLlip=Y(svyz;q9g|(V~JQ))8Ul4rv$17CzTy_y9u@8VIg(<-zqx3n` zHrHXYi&H!ZYOC1V`-EvqxG$v}FT~SOi2$tiRJL85>jq(WQfylM@cV4l4H&rlxWddW zmJWF49^LhCVgZAdiYc?vye?6rGjO?h*FlL?46O1+np7hxVlRr2t-#EY%$7GQxXggA zu(&o4{J008e3|Ov(JC3v)!O5Q&RJ8XSQc75J=2%H43l);SRce~Q}88vM+fr}yXc_I zNZF3&c;>E8i??Ez9!{#7LO<0)vst{0(!Sum4Xl2Bm>a5=8G6~+8dD`B1)#K7je+hR z2<1aTgTvt(i(I*aU)_*~FUnby%|l)3g+SsD$>(d`UB|o)tUI}n8P0l|j>iqZ5pzlU zohxWYAAbxGIcY@we1orw9#cxYD8WSbmdGlRXW-;fBYOyE<6}gAru?nq6fpg{Cvnai zw2Bed*rzlDv{O@v_&4uQk$SOQ1NFvTKt7}U{kg-LC!ap=7mm0g2CK5bG1|Pd(0d=_9e{0&)+l2GKvi$aH+Pu5s zpjdhI8EMkvf>Ny}0va}=0jDg-&=DU9M45iC25OU#f2dBO4q)A}rLlQ6lppmQz)w?J zzo2BKo$;}zdRAQKlA8#=F!dSR+*w;)pT5#YKL*#)8b!qVTcg>|RtA<0a-`8rOZo9Z zH-rlEB1*P|BtDM!8J#C@9gpVR6Y0D3uFT~Ntq+3w`G7@qlc>KADIC;fP`t5GOhz{V zN=n#acH3QOFt27g#746@m>1(U ze(z>Q#F3X*qJr{8m)U|eq|SY9mn8+`X^F@*>Y}o0b8!B=5t9IdVQx13(^p+GmHav| zx<&}0+V$i#L|PVlr;%rN8eZJSWN>IJg;#4>w;q@4G|;31$Orj#c?qCk00Reki$F8E zBJk|?^P3gquMu;mw{-B!c$hmB_i$B8XRx!D%ZF*chr>z7(Po|;!x+j{1|Hw6`*KL{3Z}Rv$m)KjHy0&38PUn00^Ng>a)9KXEQEAej z9#rl$n{cgOWPHcs9sq(7*RYm8eu`YjD$&@t+N5ypya}grIBnb?N{hFKpmUHDhWjGt z4mKT3!|iW{*fGbkh?yK zR!?$-UJRW7_M&B17bkkr<>fEbnrHoDLIQ0so5zc!_`g zr9&|DlITrHB{c3=BS?z9mt8p|iZdbnO%efQS)-8H!Mv@CY(-vS)cpBIV)=pl)kX9N z8i#o9sV9qk`4Gaa>5w~Z>wvr?Yq#5E%~vJwovk7PGZSwFu!S9*n^U1sUE(sW;(7lj zo5mLni{7wV0Kq=|6J)?BDN3uzN>Mb0u9qC5V)gnsC;Po=`(qX6fxLAD@m}k!7h{=;-lX`0q5w5c_L?@UzwPq`{$U3ywa2ZtVdZ#eCiMUs$J}^6Awf^pv z9Wer#@P_P(iz~K91%}}8nGm@R$;nyQ(v2UU3GS|0?y5`{M?KgUyM6S>(;M~Cl0>!b zXRgUBVq_~yxu_1WgSJx7XE(vSLg-AHA+__*lg-SCp#*IdNYYDOp(gKYbTA0>m8Bf{ zZRytC+V>)ysXU}8oDw65VG!xrREvoid0 zC~cQ8W{+Dae!5>ca}CPyCU)6ipbZQ){9%o_r0w()OR&xA1pot!E(9wnh_3nrm4MgH zwKVO1Wu;TGt#SOu)R(wC0g=k8EU+!bbz*r6Hykjd9huu~Bp8_0xU~KBJ{o2{UGaX3 z6s{YDsG*5go(wjKyMk2_Rf(O35SaI@t!oCEEMbBr7`+8 z&F$ymc+7qho9>_z&sf7#q#_aTQAOjd1Uv~c6Wef=W}A<~%&lEXih%JoCoxHO;pqr6 zvQa$9>5lUFj@ngf;`wM1=H#N;E$;AgzaRX4Oium;?UWLhA|rAI2vTtj0*%aLp>AC; zZeNF50-Sr&4%tn=@4-j6X1ux?4XV-^pz{aJ$Sgo${>ihU95)@KdJedJxt23bMoJZv z6o&bEyR#>qK$`X8>Z z|8etV0Jbd^?}_#OC}~jykKd|vpApLK{A830$w>)@6VC@9|C?Sin%y07ouxs;t-lOB zIz85Q%Gj2#y1)YnF?rBLd!>|_3b?g53{yEt#g!ekW3YMtZ+7Wl5dAN9iS<9sJpX6V zGBB~Q{ztlhqUHAYJ+GyR;`*0ybNAdAUzcM~c2D{PJ|$r;fpmOM6P1$eT(jC6lEnw5 zL`%-^sp*0EXcS1!Q4nr@{Z~`WJ(rDkGg&rjsg{Ur4*o-39;uw~5@OQ5z<0xV^jv7E_Ut)CbbMp&;G{N#DL;@Bvkq4-{S`C zf%b42e$OC%MBMq-Az&BGrR^gKU%_7T_L)&-qrA^iRKT zh4p&B@1A0-3rw{olmGDFSnU+tENpD=vE~kpv$Is!acWv5`4}Lus*1A)b^w26vQk@C zs+&i-<>abP=6R^LWQ5h~R7GgqTak%gpONde$g*M;y#I~14Rm6|Vl;HLIDBKgI@vB! zy7;Rna!bu~P#vq&XB?5eD~Zr^n8}_WUvPWJM2PW?vyd%RNAkuhMm63OX`)qDT3`ii zVH~UoaH)#*m)FL~tn}tj9;=rI-WyRgYq$I}c0=utvPv*2$VUOF69Z>q3Ku8%bstIN zV>O6LMo+FR!HzHc$TXj~E&WcW#z^oW4BTbd|IEgqyh&mD36z2@sm{U5&k*mqJNVRR zT7_V`3W7-|poGnwxje{{VUfA-37?YLp|)AZ=r<&!sJ@K~v?pD;tn|#{$%W@fhLG7a z6l9?}I?|SB2+GpI>*p)Agg# zvBwG*J*A>su>k+hV_zce1W0BJl z^U9tT2*oc!_$SDE%MkZDw}iTb)-eJ{L=D3foUaa7Q?X*v;5+nypT{}kNi|7 z3toY^79u%*K5=)G7VKR)Wb#0#HLA)1a-v*Pw|ub2^?xsphwEC2w_r6Dqv5oaeXTud zsoOU7caGRUVAv!0grxhXkB`H80HU9Oj)dQXJ)B&XtNoNFVltulPTcOoAwXwSnNlvJ ziZ6t#QDDGh4|#2W`5`cY1*ho#Dd=o<>SjfW`qzvqBu_Z9R!}?jFI6(MVDz9NKQH1B zo12|0@E?}`Kj}i}-@LK_AyNIWoN|HzIqr%Ow6@f4a%VpjC#97nk?;ck%R-hR!s(2T zp>$kJaU-i|F#VOYNns)U4R6VNyC;sdJ&#L9KwT+nvvm+s$+w5??c#o$obArp1r*Y24g%{i9LFG#m)i3Cxptm@#W!}!B_qApL z7DzE$2<)fPK44y9p56pK?v!G!_UKqXACJ3kC{lfc@mdRpqcV@BFYu1fz_pSoO1z}p zReEW+O@q#FK!O$QIbdhOaC%-L?#u~HArxcxQ2edB%s78E4MvsnQPG%w5a7_lX;e@J zkp#Tyhc>I|?r_rWcsnk_i5A{>mAHO$G)ButKlKq*`+mjOLV@F56Kdn0MOkKyV9cLF zYEc=HFQzb4$anr~-hx2Q%(=Vgv~BN8`%=kEH*uelc&ehxJ{i%cUy5O@H7rAS4sWfr z#g=)N2P$AJIzNFT=7RhKk&o(j`_y1`hl`s?i^XVtxjt-|u%fJ*6|uQR&0E3;Ib2NU zw|0fim_=(;4hP7G&Myu!O(4ts>x};fpW85pWd$|V)F2K7okH;jFuSLQ^Ld12YV51) z8^04}>Bmm~6IX;}dqRe$E4_HO!Lx)^=&hilwm$VQ>#BFx)2WMN>E_Ffjsb})M_kYt z5Ge4gEy43%o-JFQJ@$Y;2dKa^{!WK0y8py44}Mj;*6Y z_F!l?`vk)CseF(nEgW-EEGAlw!$yYhu*LJ7f0*ow74P%|zC)OxbHQxT%tyI4hXGN7 zqi+vD2}3*7Gvk-j8Qm#TEflfD1keUo$F=JQA! z$(XJ8_B9_^O@4io9lZKfiL>-NPdrolruW?~mr33sLad}(Q}x*l+KS$_xp3!b?)Q9% z0k?eG{5x?yoqh}lH6~Ej7H_t9L-R9{lA}^xkX+?BdWxd_PED-J$|01c1eeZd%iZ5fY!pW!_e5 z^=N@_VrLoVF)rIGAeRg~Ws(#Z%RHSL(Z3131a^(7w;%;W$|W0|t`GYZ&E;|H<6GD< zFN4sa?pX^&8_ks#=N})6ECU~{rqhi}%Z_e6)g8kMatl;3ScP=6i=lRk#iS=LY}NN7 zV`3pCJEx%RB|4pvZjhv#Sjgy52NYc1OBFYSA$8qyJ;3)?@sl6`xV!;MJ@p1+v@1^= z(epq6kel4p9UA@wu4o-Tc4-A>IdKvwrxZgtK=HU`8|qrA1~Y63wF-M2rD$*&XoCH5 z4pARVf-q+ELVrKCIMi^pjCvS&pSNoxMK~9D7g#pwqiva8d{~hns*aa2)I;0 zM0Ev}QNtJD(U1?>=|KhIbdbP*fuNAUE1J}o9TH*O0DDgu5oCd zO~TLz&01{|&Sjrj5{PReT#Y7)>7ObAzGynCj!y=<0=P*QA1Gw1 z0g3dz&>__V(>8nf9|t9doLf47vcT^y$}WVw$4uN$C@dS`XitsHquv46b(T=LC&E;7w7MF+P31tI)MX_EAxt54VF%(H7>yA7upq8z2MvzDsA z-mw=jd}BQD0Or0YS@6;$tUIb8V%gvD#RyroyUL-W%K>eno zH%yQz-JQhcS+uS`0M})bkz)=VG2&@K*Z~lN_lEyKlUV=4HTBf&AawRfh(^Syu}z5n zT|Va~0LE)A1#sDuSXuck0XYOzCy?d{)R4n+r&_fYNWsX-XTL zfxjfEi`yhL(zfTZ(m_)_QHusJ;A3m4wz8GEVY3&gURlHF6gMnSY36lHILB2!fe;TA z-hN(mUU$7`@zCE4$|+)WBXH6-h8PWl*(I?73!#%Zy+pX3T&&ZGzfr12?d^h4Ehn(| zR~^!518U9NQe70k=vDE4!qlw`;E2PWtEJ@AWurrdfRrWK@z&fHx$=+&n10B>ksrAl zP0|Q`BDj8hOo<4Bc~#_R+}<{~bH;cLCWIHyeqasx(lcas5M`*3(-}f+zkK5uyI<`4 zqgjf1vZ=}#6!2(>AT40+-(?s)rbN}Ip{}c;Vie5acahfWkN*@KT@w<4F_|=@=5Qr| z%R%xx^}g3BPI53{jNV)Oz}6<*o|@c~rWwRbqC{s@rwK-)g(Jx|)v!k(lqSl+&je9j z6BVdC5IDGp28!0Ig@#L@mJByn;ta3V{jNtdEYM(an0HDS7LU@{PGictNbeExeYC@* z#+3&oFt3{eyPy>13(j+@(JJ#OMYfD@vaJ|uMuB1axkD-W+lR1eF~MqXu`wJZWxenH zovfr@Y;%<{=BlJsq?)e;1ZwdHD`R|Snf%3*uPIX_6!nbsj&p`UTug?_vT=FsxoM#Z;lFl zKPAZRS|!`ND&*WYxeo0fM-?hpvp#*9KEq0A5PAK+J6k2LbM34lcg{9Z^1#KZTz9o8 zT;VKKA0m4N7$&$RUKjC~+Np2K;<*2jiLF7{|1BxDKvFt_0+eAIP;b|}C1ho?gXmu; zO2mZ0hHBa)SMIEoQgi~g%dG@K)Y;5_MJFh4wQb8ZyG=lHw->Fob=h36*9gA_7W!v zX%ckkXZXG> zGrJh|TA+iC@mmfpf7N!}=@eRnaVI3?O#U zSc2eBIu2^6LtJd7G67W>_I(eWF_E~fnot|>FJ}}}9_64}29OG8VHpJB*eC8|31os_6iXyR~=zDuN5cH1fu>&{Lfxw41Mw2uf$iS6fZ zqEVv$?Hrx0h?g**x30?>etfz&B{L@}7__?+n%yGKDG6}^O5nobG>*#$m>5Gt8Ngjm zxKOr#g2p^e;HnRiy5_dLxL+q>?5K?7$IHGM&s4~rlCnn_yjKXxCnuYM5&<_~=fP+K z3yJ`LytL_!nqTe8Bwiu)EC#}dv2F1oQ>z&8oZf^%S$EnoSIUE7La4f%g0f&{%M0E83Ru>M6KA^4sdt0jkySnsadxA z1VH8*9RIfqd*!-HmRl65hr_qY8+ceb4XA>ZNCl%i6__p&QFc^GFw89hIhc<>yfVat zI$;oWWRKA$@soZGEX7a$Ksvc7CtU5%Q?{`u#hQr3-IpEsepHxgCuSjBcU?t zalG;H53IP8teY~K~uVx*sJ3@i90#ZLpv2YI~nP^3)2f}td+nB zq4=3$9>X<<>^S|pajKenRr1>Tm0zqasUM1=(_fYxhpegz89DwcrA02H$@AdlhaHd zI#Lm;47Q}UM_eKS4rcMx7c}U1`%x2E-tJWM?)QG6tIGANy0V2fS{a&}KhP`S51n<9 z9OSWF#_j;r(oC_s0_44C)dcUZL#Y$WjS;fgQkZ5|+aQT_vL=q8JV&d(EciYp`pn|j z^B%UT-9nT@AI$!?jYDKtMwi|g-sQ-1huKZON<~X0bsKM=j3Ar0U;N?(`8`%NxM!fN z&^AqbJ%h%Rel|9~xd2_DvnQ68Kt0H&Jb`yY`z5wSPUYcrhPd@`$%x!bPxjnFUVbQL?y=QCU z=T@I&+OW&L*GRW^(WQJ((M6i_FJ;uvU8_@5xrpSpeWY0%GzvvcjdM^^gN-*r$dr;a zQ*~|a#cZMZg~YVerGnEruOqw!WwMu{Py0L32ZIkP<~nd+5oP+=AP+95V+q0Hb`Cvp zTnJeZ3GQSRY*IEq$`RF2mI#7HT@4;Qo03wo%$Ew7NH1IG)7bw=9pR>mD5LG= zsH+^n-p!NwzG{_A<0E~^;XWMW!_z|yV`j%#@ziExI1BcRaSX@dt-zjGhD=WJy5pO> zXc(gnCs`@z=FF^-Ne~It@A3psi|3LQC9U{QG5~HMY5L2Z5%0rmAiP6fuvXCa0fwZnkD840PXjOA^bTl(8_!ljDRek? z^UORouc-wnV1&Rv|LovoU3yDjL~@ReMiNo7zrYf;f#1yoXe8weSe19zBe|01m3}Ib zhqjl`?~B)V^d@@ko`vczC24~fc(3_`>xoG^K>GkUG%=DEo$RD8ArfBz$^`eq#QgdT z?`bhnr^z^Dv4rgn10f}H5&`*XBU;>R$qM>H3?nP<^y0>hHIE;@Su4uo&DzKWiJllS+U#dm>mOC<3^`y zmSL~D`>qxYTY8L>2$YpYVQ%2a95CP0D4HtMP{dD5(3e0{edVpp#Sy21jqOuy-dnQy zwq_V!J|onB#I4}&qr?3d<9KSQkMX`?s1kauT)!jLze2x+3a90$Bnb)}p1pKT*dOJQ z*w0<_`-G-%6$Kkk!hfml4BNbUBN;+!02Pmi%3ni&eI2f>+Y4PKU0pk&?*Y(V`JT5S z>qfhh zvS}u)g`Fz*YjKl+Tsv*eNYmXpJSqR)tLqG=DNi2FAjfG|9rxi$SdfFU3ul753>1J7 ztR0=Vb*ScaH#lL1)WTAr8cQyW$D=%5u&Iti><;J^RDg38_{=h9OZ+Qh&@Z!bfP=Wh z)fLx6>eOl;0GolNvgQe>bfYb!pZXQn^}5@t^rtQa$f7uAX_paEZfGiX>|@&{8Mv8`4b~X z72jCd=2>iOOR#V|?v^edvLL6glXh9@!64Cqs>Vrr-Ijp0)_J3N#d+M^ckozhq_L=9S-Q3}A5u)OUAl;(h9ehd_VURLv zR^xq@^-u;~t*}P6HU(mRzF};tGs&v;rZ4g-B^ir-63$zJO6)6U<8ux^My+;T(!TE$;_rjO0;|jV|hMq?hd!jGZ zbdSV~q{1)3vIO#K_}+3T6mW2ZNArfI*%dmbCqI)?AE-FVCTVNqYrJ^`K+Sb=v|Xs! zK^bkQnl11H|0oPYJFqHxNSuHi2G=t&1d|B4H;E>p5g&x#fjTw8y{u%whtTz^w!b~Y z=bA^wPAzuzDc5NFfz+qZbcdefJ9|<~VX0`gXK?y=Gu|^G>|Gb#56v`*U$9+fy|KOu85_fc)Fu#HiT_wWKBMB zq*$aH-k2zyC7i3BNsvpd*2cP2C_LJ01;8s{mzEnjxYPT?p&4?($HkFOUATjTnVT2* zSBf|=_i5X$b8fbA%fgcqHurM5-GPLrLe0a{`8nz&<}aiwwk~aF-%zju2>8O;;7Ieh z43~y3#de+R0YH3c4X`6S>z5fd8V*r5Yf-M2(~0yTZTXBeHF_x#3PHjPmeE9-b5=+y zF3S~GCTT43kx0WnN&@9&EI%z>D*Q-Evq5J?KibZrqVV;CH zS6i3BBi|sznsz9nh4Rr0WeBzU1>E~Km$TfK>5rL3g3 z-wozozkINSBhbo_4T`0*#;Z^7#&S0~yHK-+&FFV7*JXUf)fy`y)uGH0M1*;*eIv;> zx~Fm`Dwep2>~-s8pD0MdB!~srOYeZg(6r*Ah}1qj#1IDEF_?@?HSzQ&rf3csKtNxy z$$@h-eq!Q{TSv2twOVSxnO;N^g+IyYpp}lOq4FBiDB9U~?o{S&hDKF@74Ahll8Or4 zIw8_eB@qsT@9ekNORUFv7?4JEIpho?4mnsT?`0eSyZ(uwVfs}Obd6Wq(0cWYu%MDO zSgn&MMp!zj=hjAt!Qr(J4(jUBC-@qWF^BxP8F;be)USWY)@}dgudb*;b_ZD>+hxpXmIjpqTqY-M z4K8HIAH{+ry1EVm49u;apQvHc+>G4IKdtI~?Jzbo=pFhy+n*s4HPA9m^X$QbjXl4& zC8iZ7NaMa`3t^-t-du+=SbKhn{Qs?Ago19z%JT1;P%)QfNg->>&DbPyKg@Ne`VcI1 zxiVHO^>rX6y{3G*KOFK*>?5YD$}Qx_6^$;&65%B=(Keymln@W^uS(Cm%cw7Li;KuN zf(Io>6Fa^~djJ#3MN2&ru2{*llIVx1avQkR>buKMMy0%{x9Hdd)GKIJY>!!Ev}e{; zFlt?NGKqKbe2ax@hP8%fyJ=}U2zA%Fk3Vc=jTspfs~}XyDibK}KzIS?ned_#V!9Hu z+PBy?fc%347==qTb~WF;AZodX4wm0~SY~U&M#eupW^w1V67a1Ny;X*^AJW5n^Zs4w zKhaNuLM8GCEFSZo|DA8{d#;J(IfdWx2Qrs_0pXlh4`Lt&nr{_wRC++IqCgdWI}tlm zE_+hH0y9k`qi9!$sF<6{7k2X*J8K9PemZ2LYNa-y6DmY1H0;;u#@bBSk%m>^rr@9S zw1FE0_t27Nxa1!KMi>B*vyf(N7QiZ{iDw+C>sBT|8yFt|H11!8$%V< zE9GmNK`gdKU4B%SYyQ)qGo=V!Q3o+co3b_T#LNDW=NDM`LJAHy7LRv_MmfBiG8Hfs zNQMu0rtt9j0w{tHbd)7*Gcv-O2i0JF7qZ}QB>7wIG(vy=5k5M7!Vd~c z+z(OF|1tLL!S7J6+&3pKuO|dB$C@%3HNl~yfx+5|&#O$L+m`HtR!}~J|8LW0Bb98d zijo*l@|CY+D9^mx?qLAG&dp3V6WwTnjzYNk==0uPdf2kBwqnspVnJd~wgoxm?rFG} zTc}Jm5Avx_Z$H@rN~`A5g86=_QxAx~vdO%&ZYDW_w-n=Xq~gH_GJLf5_$Yk4R;rff z7jaqI>HQbVEh8otcw^xQY3?~>Dn2I}N$B@!$P4@Mx!ocToZ13nlqJXDU}yam<&VSO zymBUpK)9npG{_hxK{*)D?F88Ytnc5yC?oosynE)KH^}1t1^Fcja~{38&YpkdU~SIZ zi)a1D;0Eb=|I+{S;jDC)Ma}Z;y*>@`7hCyw6#Y~qNVk1Zt+gj#A$L>ph1F2+f^p?$ zC^tHAn65YMw#-A&e@)D-tyj<*J8|;0H)wrNx!3(WX)VXNzaGa-Pn#~L%J!+Qrm-We zvr<|N(j=*1>2ct_YlG(BtT^0<4O5`nH#PEV+(CY=EH12=o<5^9y_XucjY^Gp7V&`SU14?yYVeaH0ggy zKgM#mmjsUL&jPOybt^fT*uPiP=W6Sdqyespw0sg9JCm#b0-=FC?E-;4 z7!_-b)X;Wb{}(m(+oKjK03%*iFfHHJBNxQ!-iKsehJiR<>g- zyJ$nYS<1sqr&J=jHnkSYW~=nbUIz|O`b*y|2{VaKIP!v%>i&KQU8u2WPvS~e>}gv~$^HO$#gVTGj%jNG>ay!K`cW-FMlOdj~Rz@I7TPePs81|ZS10U-L*JAOC?=|Wgln$+OQhF?o)iSO?cYv z9z^PuwV2G^4pk+U{D7rGw}%?J0s$=~8X=N%y*#ag`E;V7CQ--JS=?W3kYOpU85S1| zjuAEE5&g&?j(m2kPVAnxN)r$j(%eq$bj8XaypCYOsqW;N7k(_}TqoP%zN13i;{@-~ zTeJ&(ISUjzovC&MXwBfA{dyep&OUep=M({7}< z)P_vnBa}Y^7N9!~pT(`AICz`jMborc-PT0Fmu~=toxm#`k_L}t2JBfe*0iNzZQRJD?}4rl&U{w=g!m<$=Cv?c07cq)MsJfszd*_>jTI_d_*h z=Oy7-Dcgqn6F`cJGF}lGD^4mzeQLTUO5CZz4=}m78Oit-lwj6v{8Tx)0))0;bEaq5 z$*+AV;PM7KZYqEU+0;}r>#vzi-@@sQIe77UV1 zQNV(C(kCU~L(Muj#rui|SBaRN;kM8CLitb!B$8Yj=lMx<%1cjIIi8m*o{b=><<~m- z#xz!d5X){an+`d7hSU@`g5eDo!E5o-k}%K!S^!-laP3|~kH|!nM(BhzNMrQ4acoFQ zeuRB2P##NF(`B>8Cjq%IqQEL9Jj>p?O;-h*`?8bMG*UVVPWR_Y;XO0x*2OA+^r8?Y zm(e3d5No)Rt3i96?;FWm!JC+#tAor%T8q{K_@m)m=_v;{znuag$bJy|^ANWJ=C}#b;B~2Q-6T zf_QQs1x2I1bumVz2b)t$uA!WhsQaPAhT4PNPznBXf||s+7k2VAJ%Q%8G>4&hr}YX7 zyfRk~5)N^lt?DV>ZHW(Sy4uk2Ov1N}uxu1Vfis%Bc!?Kg(YqcbobJx&0pDF@k%qiR zttz8-8x)BkpYM^HJ~XvbE^rR6uqK*VqXw8Y zFwM3leM+QLvMvnIhYZ!4aaks#h6;a@2|!^FD2MX8KnaZDY`eYdoH1z1QUY;2{fs%z zI9Ccoc?bmXkDb#a@EO%8&QRJdsH+Ms0p&Zi!|-gsw?lrY278F)gP=V`FW=nPdDSGu z|B21F_r5*4Zg2Jbr&lc*fmI`a+?I1!DlXf%uO7;G`=d60X-(D&x*q)5E6Y9>Pz);^76;Ku=6+1>)to`UpLl& z<=9C@J=b(>XSgxs$hmZIDF=KRE*1TsT?NNZ;ewuiz6HzXlK3>FJLHXMY!RmimT}f6 ze!X9b8b}=Qa-T*h(E2)m+Sd6=d<-^*K*6<|=;Hf0qW+RmnzG5MbkKn5u>@({=LI9G zAi2acj)sgHN}#K8%+4;ZAhsz*V?ZHI0%0yd0?Ty&j2wk z-#v+P_rxBTx=9JxKG@)xiW81qMP+#=MtFV6Q&O*yn+<6nM32KrxYhO6_q{jU*b^j3 zHblLs1m!at8@#nsK1P6pcBMExhT%abN;r#{u$)cssp<@JS}OQ+iB|RI@O+&j7F`!X zB?jGdn*V)t=%W3Sg62t|8JdrAN5LkwG^CA$N|@i?TlHF|*vi=DIy4+l?oun0hD=O% zKrbL0-5K6{8FDIIE4ZRZoI$^RyYgtDWbLyluVJs1XG+ZnsUMyGTKsWOHcEtW z@5k>B#SoR6UucE2{9|cFKIH8-P2gVzR1JB=!X1v}E|zJ|dS&Uo_lrLluDx@IM*zPc z$<(5(LrKJRAn;a`zS(YCGi)f<=tQLy@;AWntetR)x{aX-4SCVRB5^Sum*~CK_m4s* z)Lu~9dBVdlT97PqQhjWFl(^<7CO1kA#08zqqO?>tiI3bqnM4dd6xMND0;V@jK}K4F z&J7^CVbImImn)5!3(%=zf*$UJ5PKDVB+4s-U>s2$@sCJ!tdN@NF^O}c@G0Xc9`Dq4 zj)lmxkr~P7f>oIntz#wCP%%71>i*#` z4H+!M?w2#LIR;5NO~*+*`Br290nBxzR{R@Pg=SWgB;w%(l!QKFPkW?e*F^uC2PI$0 zL#zX?UQI}}YKEwVINpm~qZ#A}+A2~r1T(QUQPZV{qj&8fA!=bEf0HnWCbjV66va&m|m+RfIQlsK>&?gFw|ckgQ# z9lwJvxlV?KkZAg-YRL9rDss|YRM$7Q6Wkz9hbXd`RxryduyfAu@Y_=##45vvFLxfN zJW&CszvyYj;y5@e7s{SK7u_-tS<`%h-a31>H;$}M0dJ&n z0`R=O6R_%l^tw@B%y@9jZt3B8ADO;9T$PZrPLk=oi`#B-@hptNORjJELP>c$L9i6K z!%jtx-w%D$(p~6p(?%bmYYAz{C3yKvfJzovF0~M#Z(xH6Sr-?%NsHl~kN2yLH5VSW zjL4wI!*^|G`2^5kq_E<=)L1Tp@+J4tNscei=kU<3LbLVA;9FB(WnsvNKO{3|8p~`= zRYNR{x-Q{JhqNda$+Ba%Y8DjGEL7e#E2=~lJ3Q+@AHwk<{d62SI+g;MdE8;&z zC514>@LWLSc#zMLChU{*CSp)WeNxcg$!vLlfBhE2+c{7<+5R3%CcR0qomQ7KSjUDl zX|>tujK;^Duxipbg!%B^dC8Oew*-7?@7QGi#MqX3Kh24nWQzf_hwrg)3J3qBrqyjL z2Sq`#4iwfSjRP4jRO<{8&NE$+g0Wi@vH;^leiFENf1`qn-D9I*qSU4)Og_je5C-G( z$75gMEG8%Fw(hAPqM)BZb@zzxqRzTRoL?A^90vR>UlplLS5Z=T_J0YT@Iz60;Hcdg zo^^FBc?@Umj>tm^Q0y&?vpgmr)onJhlDw|}b}0UORdiZ%vX<1(B7N2sAD(~-U4BUp zrR0y8$85cTy|`6Lvy(Eb53K{44Lke}N4xe!{-~ZJWZTvDx+Uuns@wmY7>chB+LEjq z4^Gqvg5_j#{yvQ|>dsC0&9|HueOzEzR_C{0d7mcP&?A*t1P^a+L9&h-pI|gqR!^t* z>{CirhWwNlh|3F4!$B86Tr)ARK(D&LxcvjSfOIVpY|sg5g+YC!?sb{bR|xtZW%uuh zuD>V?uCi9{!ng;UPD>Nz4)YLc@il{~`>XBgI=;=!d9Mb{62&@^srARebi!zx zvAiQ&7e%#5fYd-CBu||^)x=>2`{t4~%m<2-1>S|WhHYBfhGo?&2Nq=!1|@>evQZ8v z?iF8C>q$HHIFPf}dt&qe|2n4<+`rZ%n9>&7=AAo`W@#?QfB(i4k{RZErjmtidbJy> z|I=~cxd2qTc17oObq%(64aOvl`F#+WP;pY zH-=U{t7S7gXf+`6>@~%mPXm!z0a-sQ%k{sXj zmAIuzf<>%?uF{l|iJjnv;4Bk$3bYBJ5k@>rP@~C8=8|S z*zwtmqgPyzuyzit)X3&l@ed~D+MI@-g*1N{9?4KacDfme9&@qfez{xXf_N~q`6`!g%VZwTkQ(@{9j>LfdtP6UB zwk+6+7pujNAJgmDHDtA9SyDd3FW)|_u!+UO+G}fjw}6v)FLF#B9h3)z#5^-!y24!4 zv=hLCG*ff_YkwqwG&o4YR(}j=yI9m5&R#b|OFK;IzqB)TnRx3oZ?%fL5}n5qapIy| zE}+du$D?wWkI7U}9|-E@;MTU;hVQ*id=R9K^9GY^a!q2r)Fzv=ta~ByTd){A5e9r( zmN+w&EQwR_$Qa>0*1DFCvOeTBgO2%^5szmY55#a7CtoOkM~>?%5s`*~jL$NJWAPmjtogMg*dz$q{ml{mr?Q41JO zlNIBr^RX6E!hDgZA^_6W-AVO}yCXA&IBa(Veu8=J&fU~PMiE}kbm5A2N5X4kw@!re#$oq`C@jb{ zPYv}OV~46bMX!>N5%~2jaEVULXAOa{MpR#VX8N+kRnqo9>*T-TmH(gkUp?VFp&OUM z?o)s?7h23j#k@_Sf(7n)$=}h<_0_p|>io|G*M*xuRe~a`#1AzZmP&8IXrvHLHf5Ltr z%|?pJZ%||%F3i;iE7t~6PI`e9?KS!k*0=^x@QN+bGhzna6fbCI%+j0Isj<=*0={JX ziqh3ot~H`zhT}$g^j}OGKnx7@6c@LIyA#Dmxwx|_c)}t~XG7DGv)zUF5IvK&f$nXk zS3Ch@dbAbrC`rd|6uaz`UA*~hFcq|9oR}rEKi0Th3#B4H&5#=|f#%Tjv|`ysTHR>n z2WsZn;Mwh(LI=v8U#8{eq-PnmF!;;J+EFF$@eG77#VwcXyDd_IX=tCEkpo-NNDKjC zSkkcKopEs{CT1{u9%rDlAV>s!)EooRYf1l}H^^qIbTF(kA5Mf&xGI2s@P^W_0m!`h z2@_V?MS6|XDeANeG1;eVvPaE1Hag%F2%p|+LxloowTt6e0(y$59q_k%;|X`cF!W#o zyx`|prp4sd9ZOoB7%+d3789BEo9Q^|&XHDH&Ama>z+RG(1jQJIIJ!z!!qa#5bn@6e` zCTTG@xfbjU{B&zpR}{*!6ygWkSfM}0`gtm;2C_CqJ$Mlb3PAWmRKMsa7CdM5Fuocw zE>(xsnZCZ@M|Dx=FP6{#qRIH8-H!2{*s!-eJ&nYb?0o>z$JgGrX0GB86#S3UXg2nLx4_=W3YLe5j}O+=&g6f8Gc&RM zUj?|C*cn*<>n;q!Z;2c;h5(M@2~t;cF2}-c^nU;g{0N%o#?uCf~d}vjvq)X4R&R#apYsu;rW*xYuYq=U^ zs=>S5u}8kj5sn(plDj`4D8z9~QCq&5AS`+@jYb&RD$6wT1j|4$9Pd%z{r0X$QILFkW8aUzHheqe0W8G|mNl6tHjzS~*jX6IAcBG^QBAl);-K^H!RYE!;Vu-8 zSHhv%a4v=Obb2EhlKq7-`@3krD|W=SOP9b$3gTkvwU~|$ZC6qmpWys>J>1{fkq9M^ zd;=~Sx^NeA${QzUlwpicVmlxbU~L;z3=Vuuq0<)s9tf*#QP-k_)r;U$X@~PAS;$AH z`n81qs@Xn;|5hX2p~DFCr4u7;@wbr`@JuMjl}*y zmdz!wW!Z)B+leNVjbx@j^zZJwvG~7t_)-y6%4%ho&osE!AF>=lY+4vImqnQivlQB4 zmxdAwQlU0gE0R2_9r~{hIxtB7&cl1oIxBnYHJ@V*3Z66|08dw_7Isex)XIqAb540; zC#L41ItY*7(hcY!+V!!}pSXZ12$7;}h;|hqFkA)CldaVk75USNa>*I(gsDNMh?Uf* zr_1;UD%Pj)Un0lQHvc)949nB09LvgwkW1P$R^+7;Y-@bw=ZvV`cVZC8foSm;U{Qz- z3>ALON7o(yy*Co&cdr`-l0kN6JNue(@@I{c=*ad+0I$-~_b#AJH+Ffh6ll$FjIPkV z)`69=k85aWqp$&t1BUe13>jN6#coA?0tfT*D~@e2KU?A49MGkV*8GD7qs1i+9g#7V zsp?Kb%`cGI9f!|ebe;W6aBCLnK`iVACC=mI1oJ>`(&|>7KZ%~4*auh@gyxjn*%~;h z5rYMjRqsAMd>YRQsjg*XTwVokMeiXcG z5Me&0%K`bdE?_IEzTD=p0Y}8V8T2Zi&StmS0DXN{%jB(}zL$DBIlt37CJoU{dG?M&8_dLR z;I1r`a)IZOz#E%ZSY$bZHLa{P_1BmROG<_23Ngr3dkdThM+O1&Ht@(j)O3O=jck<2 zQ)U_~ZZ~uhxEeydBYVzAeduE00-yp5xZeo;p(4zU=@F6EY)OfZxUmw^(v6jPBW+FT zr*owdbs~2E8KbxF_%S_fc#1iI{0O{;+N_2EU;yy-PCq<;w(rT&BH;DK>68u=Hq<00*H5q$6?${jn zL>h_q&|M2t0BO4o)04eK#gEL?*mCopG@x?4vZJcSEXDt@k;ZTQq=N!aF(gt=VSDVH zNs@G}ez_;O9y~Qw)yl1>8w4#>sDILtBg;SNF?|gCQWMl=zU{<{9#ytVPEaD=uTkI& zlCGFV$gemlEFE4eFUxa5yAM$yNOAGFRN;vz8d>3FD~{__rz71ktLIvSwttV8Ab zyZFzg%Nd8EVY*BGO4a|61bw*%n_3h{eQ3gpXI^!;fG~tNYtBg|4NF-d2TeH$bBKv= z0>|<-P_5r>=QsQiGlGt*Nn2C(c@LxH%gUu2^&xrnL<9TTO?b5NgGZoPb|T|^kOCu4 z9m!2W*wVhUs%BY6B#@ZvGn6UtI6TLJq7WqM+E0-{cBou-yH(+SY5*4$$He}d!KyKN zcB9^a>o_>oyLEgYx-w}YL2~i*OF?f2R|6ulGK^~$%_JjSNF`AgOSyjWpRmx{E|NGV zZHRi7_*8hgEAYzQrBzCJ61u~oZq<+%mmD?8Gory-%z9)r69+u5 z3Pdz48Mr0hnxevV$Bd-6@#aR0_Tf3UF5NR)uGrKX6RTt0PH7_5F5=IKDSUwE+3TT; zAh&*8Pf??FuAOCD5JVSyGo)l@Cy+;S3!myW9;$+#p@omihTW}%Xu_wC2v~UxafiA$ z_X(ZZ@Z_`ls8GG}t6kt_(NMMJ6+@UNO8E1T`1{SfQgt&_!Ll&4iw)+pPf)t?Xrbgy z>FFasn>YyZ)vzeYJk4Ze6|8!}>V^YPECJh!i-7V`F2l3M#ag+*?Z#i?m|6=K6(!^J z-sq?IS_e;)-GtO5w{L-C_nK)KcQqk>7J41$zMD>3cW$m-)+q%P=Gv8;a<%j=u%a;;4Ab?$ z?P*A`srb>Tk=`45^b)9(9W#pD$_FSx2Xva{N)G@%s4u8r=IBmCc5=_Vi|RD)RQ`Rz z_UxLnS7_0+5R?2Usp+@T!L(c@iPRRHIO>+qle-J;+D;(4xFnB1)@j8>N09TLpCasI z?c-dR?W!c)!MMc1h56;@I>Q814F`$cW3)(<#bI&L|@y!hJ#>E=cfIty4*{SvAom#R#upiWGIo^ zG1_;LVx2N2Mo6GpH5=!GCb~SIp#f&u!FeAsx2R1m0C89r2K0ZCGgnAbC)d?$O6!Nq z`U^E`jwSLZ^`rmvfRX+bNkY4V4766gbT3O=Ua+iP{Z{nvw66e6Ara#2h0VK{W4Si!58Qfd$y!q)Zb+9`Z~-k~~Sf z<42>!3LSzqHXmehy@265DcT(9uEzbl1|uzEMli3FI%#zrxJ}oVGY<_qa$9V6MTHCZ z4gfnQESR|D2d9#Z#TfFiVgQ23nvfu?4n!h+C(RO$NX zATo?*kFf!Ke59~3(e*?ZkjK@fO3cKId|$L#qq@`&kBms$x^R13ENlx(&GuD;{j z65R=1;u^2?-MV=`k)QNF3pND*2({&LI{Furu|GhH^Cqpt%CSW8C!Uk^*qe$8h=-jT@nLLJI*)knp;t)nnA#lM&+V4sK(x(;h9URb+fSVUSK1 zp|<60qO*RvDZM8D`787cNtACltX3EqPi9}vQe+C_rgrTq>E`v0iPZ=vyMkUnFzZYd zMGZ-a=kMR=xe;KS8L~jIc2*bkRm%)KAq~WbpwwKkMZG-7{`S50C&H zKy-MKto>K0K%-r^Z?*S&H6jh#Hhe1SmR85Xg7 zy8#1Jap7MK``<8oWKp!z!*Gyyg+KN|fHXM+9z%1~ouVPN@hXd)k1 zQMu8n2{Zil0w99z?|#qC@%G2_3o-e2Y`&GNk(ED{W7nA3-oN?lHc7j=!2^W2Q}j)C zQ*Zpt589mh+GpXxXw7}JEY+=<5>^naC$b_|PAk+OpBc92R+Hi(Vk>R z?8q;2ua$Eu52x|PWG|I8dj&FILt5E3maa$W;5VH(J4nrJzf%F5wz}9NM~F9>pi(sC zf_0DjacjXsH{^cfd&Z78p=8`;c8605Pn&cS!FLj~>_oFqddTUXxVC`U`UDV1@wkd7 zNnw+p#EN?z#}ytrRe*|kXTR0^ZOtph#oUA7kRj?;<{Q{WXc*n~c)q{4+*f-T!>(>9 z9Q|jy*eUIaljrY&HuB$8P^e|BS!s6$VpTl;vUHsHvM{S8ZR*Ig3He8q%{(~Kj_dti zadN(|RK<}cE^dFN@Y6OT1}u`hJc*SBit_9B%kihrMg9i_Gu-dqnM)<8Or4~a0p`0) zM@PS8x}OkM*lknPI=~#{u5U{>3PHGT@Ft~;07^~!{d=F@WAlrNv1<+38Y6giqgJ={ zi>I&0z33w`b{RskEw1hm7+d_)+NvT_fPu#H3FA32J0%D{+B#w(v5-GJ9(B8%7b2m- zR^IKhJA0VI5ngE5Lb;S?2-`CCL<;co6T4Z-yh~L-mv>9CC?}OU z(9#l*80@c+z(rftP$*puvxnS#{}<6S>+ox`?#R*Xxm7Gh-8=vZc$t8B?@66r5mE5!%B@RH^5Yfz7=5mmIsg)Sufk4?QwqP{M@L83&vZ<|l1=p?E z7c3tTP|Fm7fDtA-pxU+k{8Um0?Vjr2YP;LhAsrvqDhV#w-Q4R_eDAWRGP;V59D07o zfBn3UpBKG8VcilHmjqe&DE$)MyWZtyUb{wsA(Eh-0w0mx$NC8umcP+8#K|9EA6f|E z?E(Zd{sXTn;+sjWy}hs`(TGr0%BWHm^UF3%TxzkJ?Cg17yv3p*3^@)NUyUIxk2nAeoO_;r>brF^DRdJBgA#BQqA4zZn2hzBozkloHs(ymWN%_2| z0D#A&s*TlUYt!O}exixw_ywUND|JjHQsy5H+O#wfSZ)Wb2O&BzD^yXZ@c48%nA3i< zFmBSmA{xSwt@&^4)*6Ug$m7GyW8WQ-=?bUN$ceDWBvXeD{RtDS%?&1AN1DCffi=&p zX`!muly->}m+?3e4n~Fg$xotCxkbU}1-ohJM8r1iCklZX_v$XGc^fMQKok*?r)XC|7_0oWJ&5KmY z$f^n}tdS}IA!I*bZQURC9GW|9WBPC40D(AtaKtO#7g}>l1vKXXf)osqJD>vr{=Lcx zm+*zWgqRRa%GXJJ#{Nu&B0ZPHFo*`L@@1>Hj5lvfKJ}?b4h#vox|9641M8E)Eay7zT=PFtWv52 zN&K8wdg7Ijy6u$Zjj@(`AuqR^p~Clkmbq!|{7HxayBAYp<9G&Cb;*C-f23&;Qf3o9 zM+LTqE68{tlkcF>cmbwjqJ>YCNQb5LJ0=iYjXs5WqjCa(q`RFG`V`Eha>w_*Qblb| zR6>CymvSCDSEo`Sz*XbD+^=e$vL*tYC7)|61PP*lV8I3}*HQxg_f4?Ot2f;#s{ff4 ze&1$NEh^oZ)(4u4BjxFG<5qjI9={IbY*`3lUmOUfL6)5m^njxk#`O7^KrnVJxtG7Rg@i1C3J3@ZNrkVXEXIZ6R5tHE z9;x|C@6PFU7c#9D@6voz!V!$rXz88`nb`3{*A;H@WJ7yO{(0t{FdQX0PshJq=>2p zCo@=#t#Ly{y^xTFJkvl#1x?*9>fOdmudVKWAyO_|eKGYynS*U;WGRTemM$R34AkN} zVaNmZ%c>fC2DHVioWTkxxNMpgdn+8Z!J~uZG(sxX5G|PqLng07AgjDP7y8{VNyPLaZHK!wEyjfAz8EZUQ7)}0J8Z5loo80L$i{;VWVd3GtTL+ zpexKy?2;9?#1cM#Qo7N1^vzLX6s8P4fyY4)A=8271rK}pg!ckYdY+hkY9yotHml9V zewKlwR+n_6B&7&0g2Eq6ILp~TCN;pIT@gb& zEA(}4SaF(?80Rm$(QI|#?Z$ zr`~S9G|ND9V27SZt;V>R6ygDh^NRZJ<$Qf*$x3S63?mi_=Hd@5>7{v)h+cw(Ww5n$ zVpz}WAe$NyHDu`8`VwsK@3&Irh`$VdYUcm)K#8z*Pdf0GhAUl7mJD%Yr_WY$YhJ}a zR|FW8#>!yJS~2IK6TKue$rLn2U0FMNjNX@iket-PsQjXn}EsXPdmNGw5p zpDHlB*?_*+m3STtu6cMTDdi&Sw>DmhL{0Kfl!K*(&$5Dyt3c01#eK)wfyxvU7J|7G zoLENuO)2&S-38Pu1|e2kM-QIWpkQF!mX@u04;Ni=C!PAovx641bWWPhJc*~GS+~7qssFnBF|A=a98~Y| zi$$xlRESH|lQG~?zuWk!>F3UXT28~*dkEME_{gdH{Ma$Xm|e38Zl3b{^6cQ>k4Ir) zCd9qHmj!m6nlh_G7M68D*<>4E@kTBV!4Z>zMqY&cMJWZ>pN6Ku`|PFFx`*$i4`NqpVdpaWJxx*c*C;OkV%=er+^$BjX`xPYH zZ^l}9ROgdRD_lM_TF{6~c?KSKw7xCvYEJlHxAgQu>vU|p$kEX8V#N=6kbQURBG_|e z=Xajnip&sWg;Po(*M;&s=cWn7Ky?&i(Tb7i`MBmQGldln?5_HNhm+EnsrJAT*iSat zHIV>X30hzVhgY0QZv`99k|p zHR{d+o#n(|Su*Q0Ph_O838jBP-$!JSGWA;22?o{A8@PrkepE$y%RBUa@+bYxhA`pm z?xm;XjkIr`Z-}yGvz|!Iqnizh5?)(lklD0drmP21e=t~%kcY(ZM@-xcEF-U}CV4#+ zLZ<~y2q5$%O1YZ zi9=-%^EE=vIG&{1%#viVtt@~b(i37s2*RKZaGviDL(MAg*4{-B0oTxND(uCl!2qpV zEGudMeu{BZhVpWjGBu|3Tg%0*@jr8#{BJ^kWUSAnmpAsX6#6{(q+_SM56_#&G0saw)lq@Nr;4-DKUaTUOfJq}{1WkLmFHW70Uja5`aYur3(0c2R4ACn*Oi=F zd9z?vSfBRGj$U|Q)Zb=9!z$UnL@wt0QRZ{TVuOVtN7j?s_&jRz%n9#Rh8k1gdcNH8 zFFM-kc`9Ys2AxNZ86;mE>DPU1=*G>x@R@lR#vvZRqDu2mVkFi;^W<&n?iYAa` z3H&jp(64yN=c}@b7(iGx1Rk_*mcB?nF-C)xlP*N<5-OGwErl?43Zi0H~W(F zdCNq9s@6U~B}dNLM-QoyKmIJ_M5i-7q3~$Bs((ms7!nj7dO=FUZ0@A9P%4ydUnlFT(F` z$zxyK>~h4d3s2!?RJ|G%c+wL%?3VD)S$T`e@R}tZo}FUglO@CU&L&>@!(S1hx0q*r z;#H+>E7k03N7!aqB?BNGC6Zh>(46#_8a1Qm!b{-T#J9L$7!hH6Z9nWw2l#UBK<~Eu z_-dDTq6AcOa;PS};wCY~zPUcmn+(1_MkTbvi|ge>gNuZV zkN?z_V7Wasf~z{7^vZB`@q=BabQL!@^x9siL+C#NbubUa7xy$f0*L$E)j=24^L6LS9ddtvjtxEM{<1mBN zir#z~V{-|6)UE9f^dZ!uvxveI7(L;s8Zx)d_F&gzlr+oKCY9ReBFkC-n8r1|b?AAo zjnhyi&TdE#S?NeJ31&wn*h9X&90J?a*^5U0jH{$<^EBCMy+Vsbk@AicFBM3pk)gqI zntIu#7rPE!^&jV0LyQfwP%& zIM7Tm$SV=HoGhmx2sjarQ^Y~*%m%TD^b>s+4PTD-Z z)l}OIr|EhA|3pZuh4YIU=*1RCUz!UQ?b}6KL^SU7*GB19!?wPTGxR$OCB`l1Er|OC z!-w`(a#LD=+Jb}1-~H4u#QzzX9shmv@YfDR!jV6FR*4 z4aJ?Z_c@X+DT}e;OdernX>6})hDOeA3gfG50u+2jK@v zj#wM}EP|t$Khf5^ofr+f=nlH2BRk_>oZW{Pv|A2O%~F_&FU$L?rZQB!Td&OUI31h!_IM~_>bIfqWDTbTk^ zy2gx!IPZ4BX(V@Vy{9_r)Be)n?jJ+LZ7`7OrJ1>EN&Eos#_O!UeC_Z?ymYyQ9Z;yl zMDk{j9D{JhIlFG2a*TiJx*5J4+z9|_gJft_m}&nNQbGB{zb;7w{4(HFT3U-OAb(Ba z_4PpYqYc&zT;~()0U4d{%ek3OD##=A(ug_w39WDQj6Y-e0xzG-D3J_}^1Q5<39Cbe6Hf z2y%iS-#pZB{MXiIyVXEcNE3m7ks$X!r8Nz+Ndh*r-p($>hG=^A0(xaN2J1Fa_TJpz zlWQ;mo!TWZ58r8FB-l&C$YFL7bjn&}I9L3KJ6?fPWZ9GY?-W;2#Zt85uA)SF%t-`$ zBABnx8yNUNgl9mFwBD)Ddyuo?U25b_1mf=GWrSnbh+@?gr zP-$YnGT?=7bigB*nYDiZ^_qNa)(-N!-!q3?nn2Z?xk$8NNBU}zQ8(o0_4TaaY413D zp$EorgvPz_E1J1Ut_!w;;!=}D#U1Jfop$j#oskZJo_a1F@Qa7e6X>uMQJ75bf#b0+ zL*n#POt%A+w@P^V7!%P{)Qk)BZ>aU#9Lx>WkUg|!{}rc3Xr3Q+aQ1f&FN}3B!`dsR z%}DYrii@Ne!3)Fx9CgLdVjQOoOxQthJn`?YYD|*Vzgjdq@AY9Gh$PFa1k8PYpQgu$ z@o`kyBJ*B$Uzq}tGcQpH@+Jfr zl)}#ALkObG5L5NR>iw_13BeaW0}hKH^t+c+Sn+CPyeEiQH;?9lr)3OyL^ z_}B;J^Idjlgs!vvz+m$Z0X@Fk+3M62qMGa>X;#|RLdc85i~DT$;ByhM$F&u)(WmnP z(v@HNzxx37Ilp!j*UT)~9+*G943uUPPo`x{*-{Dhqjvqv8|{X&+1 zY%HQb;BH%n-Dl%&eq(pNg%X$kKmnCS6wC90*Xf$}rUpn!s+xi>s6j1~?&uYk8}}qg z;SIEq98B78?mN$Tf6Mq?dW`%2eo-dk?=Ok-yeD$`^o~{P-fRkA+-rEjRRM=a4q-b* zBg+|HU*>WOARiixn6}i*kKH5VEY_%$rXKJ!yvkl=YYmh&k>~T)uapaDJ@aVHD>Ol=4F)2j192%nG3N zd5r~{2&Ns+VR?%M%hV&&;BqA|n*j=a`saLd$NQwPB^mSJ-(1+5fC`^=Jy4cpVo5J+ zkNTDo?mr=(_WCl$f~*gil^ilPq$?(!!}m#p^DS0=zjEg7@77gcWI?wA=uGk=PpT|t zYn4#0`E!in?jcyQ`F1~FuVk!AHHH7lUk{1K$9^uUVrUgcEmq&I^DA#-7l1tt&|JB*m z&Wf{$Bj=rrSJtvcB4oGc0oDFd0@x8sv=!d^*v`7262+Rb2REr@@-jxykX$hSb1EBF zv33SteppurY=HSwZ1wr|Vs$z|%Erb(dUSUtxvwd?^t10sEM~MFuCh-TXgU9TqDkNY z38~n!DMH@4yK3CID8`&%PG00)t0ySbPNc}}D#~^frhtZz>*k2ah<_^MuR}dvuuhC1 zjcRJ+@`XP7>TRR~vaEV^$1up02=Wm~xOw6aDVuWe^yts(UTNe?>~WbkOCP72R{;c0 zoM33=_VbR?u(qPbf|#!_J9!mNIb}Orf8FYE9z3kK?`6E~T|$0%ma_4D*k2rbi55Rn zhch#Zpq+1)5g_2I7I2;7J}!3panvb)7vWQa!<#fnjSmTsnxx9+KIs-HtzBc$3~^Cr z&3R3phcCGQ*ZRg{@f#w`Vo2R(x31LC&SHQ~Y-V>ij?ZwqVeqzD!5=ygMDkqvcod{1 zKWA+aV$KugPc?wP+gyD5X|ewmqB9Ru*?2M;U`wPdSyELfbeO&EM4;A8x-`&0K<<}L z5H$`UM4^)=ye)H$!u!=nxTb( zbQoAG9hv1cFn|fp423M_LMZc1`Y??Ce%ET+Gs2^u0JCy+%={P8@+cd)dJoPfAQrX~ zHJqgP+vYSIA`vYCU%;D%q4t$YP6=94$ixZVHL;F&{iWW0i(~(qSK6}q(8%Z)E>k-t zbsIyCnU|r{VTjk3QO(#snUv28We}Tkye6R5sGdvzCXl$fY&@di2M#AX1cBL?3q*KI zI#79pquYZbN2$$Gf(dq;hMYH5_7Hs`757-IJq#U`p2>|zqsH{pLW%iIg<}>1b=TZj z381;d+jo^k7HOE;cyVAF?|GT9^ZM_bOp}L4c>LsBW}_dwANIn^>4Zwuq6vh7X+2Pi zJL0f9q|vVC5$;pA)~K1%KqoCHdReP(F`HvLE@qWSoB?!cstcEcH+U)A5`L7kJF17A z!=OXPTmB`TK3=D=Dhc==L%R$xpcHwV)VMO!JSO zbm=ctd99(hLej4>D<5trjt7$Ms9DeSA?}Al06mnnmSb(KW);G~L$9~bTJE~j=YUW? zo6hri`q(c?`0XhoKRdcq4Q@@p470`+ZIsZlGa?2Tv4Qa>p;4rHv`!R}3qO~_z9)W} zRFpjmt6UIz#YunBz>!3_EUjcTrK@mdkmZ7rVHDSOj2K0;%`{jnMmqFi*`eDmh2`BX z`?CrA1f~rz9MV!U8cbkdz>jbmcJ3h^7(E)Xgm!g_j_~hPpeWRn_7)m-SG}aRNVT!t z3I;{&aK9Jmt(}>BtlA}$66*e0ei2gq;7a$n=nFi?H-8*28o^B^PFv^qDP;{c7wSK^ zAlD>@CzTES?JhHXje49JMe%YH2G@rc?R~CFg`;dKR;{$Uv;}hG)TDI*>udoWpc6z% zcfRJ6^Euu9%s@dTQ@z)a7 z6rTDT&XgGup@Cs=&ONH$6Ywt*vNi|g?^n3bGtWce5B%SnSoBA&W5r5WLI_uF$*j5q zX3nRJm$H&X`5Va_YbrT62}Qr69iJrNB39b*K9pj|>ClEh7DXYX42)%s10vjKda_8C z9zrNbyngpd#^-SN$X0s>z9cxB;63M*!B#*Q!}fno2)d(r&NUXwS`a37#t^`#_~I_} zVlj}YE?ikLmzYf(GU-5O+l2z zw@vFq>NH!yHjk%T+Zp-*RHs)OGtD>XVq{-KC$}g1$J-YNQerq{gbx9rN=3tS*0)cU zcR~sPG&|lHzFDvGu8e+BuQBf#RAjWksH?=^R)rYI=@iRj{jeDR)Q`D6K}5F4*HnTtrY^(XR@WtK zpyk_D-&Ie>m+dfwyOSAoS74EOPJtnbi`Blta5pwFus*G{f@))T0)1~g6dj_Qv*~{a8q!dXei$mEM(1 zm{$ffKgU5aOru^>V>znrdtG-QWbceEzAMvTVPrvMqSRqsYRyFkao8V98u_&``XoJYMAgF`eqWwH!5c6d0d0N48 z&Q)#}f(+@1Da5am>|yJ_BD5^hv^ySRq`3?S_QuW_A0tQB^?#a4nMu%gj&KTQz4~CH ze!nUPUBMD2@S{fK33m;SSAPhT-tg6h@PnynW62L?tgw@x6FYM=dMZK0cU04xFVRPV5(9TB{t;;-Hf!~F??c6x)8G}UQyCQ&M@>3X{_ zvFKr^;JpO#08e+T5X^)qSA^=6+)$-|x|CG3Zz*^~p)L)ln*AlD!HR$JFMYqZk8@HO zYJ#Tj8&h$EN)d`YL+SK$1;Lu=)_Fr_(Kyw;p*=(~9lkC>YzJ=E`?4t~>wUL=lBU?+v@wi@yM?6v`=i?ZVvI$i zmjl$_Pf>4x?p5S+LAc0!#=VeG$xaW^|04x2&RU3NWCL*59PfM5XUTIX$j}F>mhn?6 z`~}uC()&2}{_T}2y0Br(f2l`Myso}Zb)g15y2{-9*h|F3?<0>4-t+kL>G6wIs|1F$ zDB7*K2qb&^4KAK}%;0GD{*DdmP5DAIul(q@f15gh|6I{~$S{F;aoH5J&D4txsWV#@z82Xqa!M@d4p!tz)c%>ld=v90d7AkR%ldZr4?X4QAq4W z6JG5g`&$GIeJL_AfMx#|!^hyZe$0)GTL&enq5Q@wS$Kj=Tv*%6eyIFxQFM*h(ia z1M4|#1~+>`Vj}v-oiXR$v;k>K{>P3<@kaRN$FmLJsU?P|3e2_A8c3KiZicJFYTuU#nW&`Up9b;Ku9s(1*jCt6SF#lSHMBH0e4S z=p}zL>|D=DY9oB%#U9?{F8Otla=GjHu3NxgBJS!~pG7mXMa`g5rb&`xL|WB76E@-} zc8VP@f7P^M9wS<5-awrac{)8tvEP2wvfJO#EECGX=xB7k>$)g)-grozwWH9LQNA{i zMZQ0e$*HD&M>=pi&nZQ&2e;FXsfFcDKV+P1!0uG`TX5))3hwOHU7;iU3Il}Ma@QBH4y+_eX%7>s(ngvfv427gW5)HUH~s*bV_(e8 z40HkYmlgR`3f!kI9n|oHz%0!@@azL)J^?LQqt{WkvnW2p6Z&1tV_FgxV@d)wz&wAQ zj^xJ03%ulnxV#K(WF{>C{@!SvG3qSLM<^uBtNq_muGykD`}SCnl}U!&hBA0xA%Az3 z%P+kF7-)qPmET`$R3gkW74mXizd47erf5395a?)Paji(0!?H+7EjmOl&$I|dzL2e} z+D=h>!aUETi_wQg_MVKIgFRo8M%?*PEoEyX*O)U z#`pfq|AITm7HYY!v`tyfx_5VpGYRMs_6j9|M%kxsS0?tU^y{0)Dc;6Y7@(yU~EJVN?>Rv7D488p< zAXXNeZ#G*q$teSKcpSCd?1|ksOtB>Dx%!)NBZA&Wx1=>5l|e5k#vst?zrup-4ZGg8 zKT@0G*w1qNE~4u1xkRfPDjH0gC^Sgt!p-0hyOVF_CUH`<)Wo5%|I9*%8FaQk;nJXA z=d?~ItbgulR-v?Pv>@)3o28}cI&H`=3^g|%m(($vU}Ml*#2tYS_ur_~i-b4V%B1hU zc7Gb-hpQ}9Zm4|$KLrRzCg$fI5_SGB@B&WuzYg9GDu3X5p5(QfcOE3PF87El3ZULn zV+J3C#lcuSaFQHF4!Nng`lw^ts_RBtEIB1Xxs$X!!9YMQc;{>*WMMl>pJcnJy@{s~ zO;r>SW|Y@N7TRxRK7>P$=Q%R|6#^aVGl5oJD9J_UCmi@CyW?+!be!l$?Iu&dCUdj& zqPeXvXXZ_lo^j;qd$lsR>{c*+*cG^zi9(2-$UgH*i|Prc z(}YrT+f0`$$36(RCV&ONd4{RBlx91i{THdw0BdhsChv3+{(Nfjznmcwd{kHDNgOaG zh_`Zt^ubLC121*llg^;Mh?T5PO6Gh@*Yf5gEpK@ET|SF3Q^%OqpQ+W2vU)zhP#D1; zcxbs(Ub$&mx+z5;w#)bDwx9DS{5Km**qMkf94Tmz0PjyFGb1wGn>si34|M% z>V8j#q?z}NqznP9P8E@3EByAa$goI2> z>fIvHW_GMIp$nJVi57o6=-6Zxd^Q<0RAa_E(6~MZKUz&$7U}r(m=6oO0_E`@`B_YT zseI&Ft<}X3@55?#&N-kz2a8VfbsxSYE1)X}_YD92ud5N-T`~8y-7%>(VcB_1{AuySfS7lXn?yy#-&02L> zZC*#ypwgDWzaC)sMR;LgL&@ep97#CW3=lU{y{_{!g$?!!B$dff321PH(~hX zk@Hf6DuL+YpFXWAmVQG@1@liSn7)C&l)S3Gc}n>RYc#HEz~0H?xEa6kgsCHcOXMgy z(j-+OvIZ5+;M}_EX9Fq5O|$x~fs+YM8q)v;f5;Q=od&UX+Et@*y{OKSoG>s{DT1S| zNYsQH8F}<90N5DLfA6|h)2T|>S%w^^=BGTTQGbp)IWtsJ!DGVGKSJw@@uf{`Ur_|w zR2=GJsP*Ff3ijU2<8GpT%b7gJ zQ6UrPqBx^pNN>ZkJus}-=D#8)kf0~S0{xZdaA)ZSzPp0!=X_Mw_UI8!HX5r8j%_0D z4b@Dx?UGq#%rOz!J~>F=Xau>1=X2=U7UcUjM}#AHm+Yx@2WPKTrwo3bi%`s$buzK; zs&UXtT-$AqW@s^B)xQCD;3DdhJs8S<1$;MAB60Ky8MNJbtmXo_&Q~zNq$u&9kCeR^ zCL{Tgfh)!SD4po z(}P`yb!qMX^9w^fbm15JJ);|aEEpw0;Iaf;u+nsL}ueOq9!wC(A5$M+fs@&#}S09IIm@WP(jt9 z!p`o3$p$E3sZiA)9c>{%#j?z! z^T&(LFmY1QabLpRYCgL$v}fxc z)P-29=c+?ONT+{`Yfe@1!jt`~vvMn#;4Y*B%hgQmzW^s0SLdUZ}eA z!4SQBfOiiT<)|oo;ug>kk5gYesa1%aE0w(UO5>~oZ={-#->Q6n#(42RDWG-`s~@9W!dn=VJof^2fV{ty)ybF6xAR69XV zD60sU4-j-Oj0t7294`&tZeVfOSg(9#mnLa1x<}=cXW_mnMQnvDTF5aL*5Amyn(4&( zZ{CmM9|=oHIP#ATaH7)0Aqj&z!YExFehYWUw_IG6%N?TqbBEbYwyH*$sj|BF7v%*nt4P~_T> zj)DuqS>xpK`;4D@>#5a2YyR5bJ%DR6=JiP#t21aNHNI?qs`cr9T9V*dz4=uAgyBEk z)`&x?MLEhd@cLenk1f7@tt-7`UStj-kGJ$@Xjw*cXputLH2j64QI8}gqI8_+B9Rje zwxhL_F8XD;#1K5PJ0#1b>mdCWx$IjTDDR~FSj6t+XtLkoh$6OzvcK?s66Ik>vrdKd z^pzPHbIY$|DrGVL_m*%nf9;bDcn1ajTePyyp6p2dT+Lf$r)&;AiQv9loe4o^ZLFtX+N3rmaVI{~AoaR_oHP8Ci9 zP3(`|8YA=m{YSVG`W@zA9TW#vq^3zXPeY8|7iig8@w@fJaAh)A&7*?-XV8%;$LA#H zn|AYBPO=WAc`+Ve4{1N*XHbL%`yC zpVtz|o5UAOrk{%Ml?_XgzDw`v#w8;f>3INRiXq891KO3=LfqHg&kB-TZec_GK(JME zU)|c0E2ZQo2=B-z^Pf>c%HzK?$nR~eqYM-14nJ1`iv=l1=8-bsgQfZ~9cjs_|8=qC|{5LQQ|%qPev>+u9JYXXeRU=X07iz?19c z$KnbYLn)&&M9q>cpj95xNpB86X=%+ChFo3-8w& z=Blj>S(B{)A*dN8_Zj)U&L?oTzjhSsE~kV?_y!1oZ#I@-<>iiyN&BWaCkSn8Y8~=1EWn7f;HdJy3?~%T1?}E&`(lvnax%@Cb#@mP-f;Wd6=ZO zEG(NfC*CRyv*%>rjyh;QiQgf<;z$o`oK-7aI)gu>VfO7W4|+6oc#!$CE{11S{@HyO z>`_g(K=;^N(8`SsO!)@eGkM*c2zpB%QoJ6<`kf8q(09(SlPE$q0@&7SR|ezvTOb>k zpwU{Wk9E1&U$>>V;kf8bjo-!q%FI5rxe}K>mu|gZwIZR~kfM?Nvw)E>`-Ur%|CTFm zK6|Kd^vtK@!#YtZ$VW*CWG+8^dE)f}jW#bxmU?T0*;tWpcwptH_cNfe=HX@mouDhP%#2l^Jnj~Lsg}mg7nk3T;5%(lG0I|QXtB|-T23si)3h6a zznvTRpy!ZZpw_s+1`?CV5Qxse>#UFwII=&M#25Yi%K%T|lydor@mdhG=>9LxA?L}< zzg9t>^Qp$Ew6EWu5RvDYIfrb zv^0yAZ77y{E9ZZ%Ygt{gv&!dO=3Rv5%BTD>T=a(FR0zOlGXC8Q{;dH)uAc86Q7}Of z&bgsk4JH~#?aAK|VJOU>DgN^}uFrUbd3_p&<;61I>e<&(2iDJi-6F>A$dPO5*4yLw zJtxsKLrFh^7QYsb(Fn_=*pj)c{G0Pf1=cEGlb#|{QMJIn7E5x}`k}Nm-smwB)b?F? z9NKcL|GwJaI?XD_)3|Qe*~{68*&>YadUhx6!%d&y7@wVECq)TNZ%T(Wf2(o>-Aj}A z)jVTP+qKIvv0EAOSTXUN`zGr$R}2Yv6f9U5@0dA|4#oT50uck|j^=YP3-DdxBcj7X zVnTS6rwP(Jp3l=lOUmeflpu+(Xi!KIv{gcd_?*)1kUwDCB@$GH4eMXGd3W=*XAQU&Gv}bEQ*m)HZG`P2;Gu6$$n7Dz2R!4UnVylcJdiq&+RTJ~^cYi)_ zG8x0<>UMLmifCZ0n?QOjp5b=Eg5?%C8ex6IF6tw66iN9ou47&fM?Yo{=UTNA;+wc; z+d`*x0o2j{S|S!;tdE1qh}L?)QR5IHo*05g30 z&;&8wfNQQk%C(uv@o>24alwo4J&_r!!2ep|(YI;|g8FCpM48ns8z(`7BD^ zWEUH`c&xKpP;@(4FlBm;ejYW_OhUph|4pDRXPC7AKa{;wuw?DFt~*r2wr$&}VcWKC z)v#^bwr$(CZR^yUXP>?1A2Iiib*?fZ^CEj@f1|hWZFm}4b3h_>iFOR{>9vzy2T^jz zoeYg+PyYb08rwU`&pmNCT9Mk-8;NB1ktP%$H@(_W zXvv@&TkqT8zNd*Bo|nc@*(iS;@e%(RWf-u{@e#Kxn;j;lDIsq(sU;>|zpJpJ@z2c$ zdbUyUv-$k6*9|N$VdYifn;SD2whgFSN+1+wz&K`ZP=L(VYQg;J{UX=1hDDwp0n(wJ zQ1|uGU1%R;nLVJp%#jp=`el|?um3Jkp0)_1hS&_hxn4b6Zb6JyRgX^+X1t;SM$`dB z426(C0i8%3_fjIy*_IMflI&Y%GTWr^&k2#1Hth%U?g&)5Ollky-{7lh>bp^az4#M{ zsTy?Fy5oKo;SOmuILds7Y2GoE{WzJKGjs*>!|Sh?L?4q_hO54Jr^#5nDa}M;*4Xj~ z>{{Pi9-5qWBdRa(hcPHtpvS9|G2PB}bhR1iwR0a;bvU{&P2r9RmoS{H1FYo*{9aa0 zEPTT+ws~iMV=o`*^<)sApBBGeFEK@U(+d;p%GJ&Z6WDUmsj%{%AW4qOk#hI%dE5n9 zxy+_!O^R=x5%@2zx)(<;RxAD2NWq*{fLyN-c_zyPaKrRl07I$+af=Kc548x}k$-35^I3rGPZvBI)4!tRy3SzIJV9&qV8s6;PLB#U=m&~v&L zi1O)}8N)iP*M@W5H=bc+_-!j+^xJf=F*K9ZC4;9eIrIg;&v*KwaLTn+jr9vQ zuKj5{A`_~8KE61cbDANQIhT^d;vfiT#M z)g}EYhFF|w>nnp@!I30{Vm%&SjM0h#N@%6?75Iwogk~#rtcz|bO;W|#{@$DNZ23S( zjS&TsiKC2c$N+bZoWeUmh=3c@=`aY0kLh&qW#CntU?2gm>hD(jhrB3I43*~;uv+CB zoZq%z2{!k|*%$xQaw!~2gvj21iiT^xEV1fLLT6WswWNt9?e&6FUPH?+NS})94vP8N z1AJqKbiK*05?AHCnSiQhQ0QV>8vIM%=TJRJ<}M9Vk zGdYkz4iNUK4~#w9nHH0B>mIUZc+#__gXRH&&RnQ5ZQ6L_HAsa&kWfvcdm-??NcN0B zimo>PTgaT;)<%3;FvTwNuJt@eUnsN2|$`qZ)}IN(sdh z=4$co>WI z-~n@b26Cf{Jziaj$K@fvTw|g|p7Xp~T|A_=GYJ?#G&n%hW-6fO>yHJu(q`d68y3s@ z(<`=LuetwoM&aLRuKbRM#x_p)tQ^dAg8Fu1#^$DGPWbe6f@b;-ipEalOiHS2*|%?G zvRYcM&(hNTVAj3zi3h4YP^Ku)0OraJ!FqkW9nLO<8dHKmS`6<#@v(ky!+BgXa*t%)bu&}b@(=gGq;WN_H)Bnv((6ed( z>(jsND`O^nCdPkd9TficmW=*iMxu<2xRihZm6Ex&v7?N!tAeeyz73tYlfIR?A-|2O zmGR$StLS8Gt@8KvUzv>m`lkQ71P61wznI&9D z({7u(5Z5-&85pa?mKix>rU5!TDJENurc#udxI`}t;*U2K!|IDBwzgxnmEqiY zj|{AR{-WTNH*rS2hNo+tG11SfbLV>icu{5nBT6s26ef0|Wh&LspH`}lUSTO-v+)=g z0{A2YF}nxBI-r0J$G+T%oWe&XG3SlD{7(v2?z`=@DrRCeQ!keN>BJ-aI#EvqXZI>P zw(Sbr@2etQAj_jKyN$=J#x#4C9PhoJQi99SAKg;1x^zV4U0aZ(WK zW0(xL2mS>ozsx#L8QUSGO}*N~-&YKs2Y;iI`F*Y(yH0~5bymD*WmR01N>^PSG13+n zlcc5L+`Pv;-zDuWeGhsX6hIWTNu((nzqEx?SwUrsOo_o4-hFx*_RD5($s!+--LY}H z;Vyjpi1$h#I8s6u7^K0?{bserZ4bq1LK5X{8D^3gwA&T#%kAfQF)<(Xg8jJiz+(2hJ7P&e@nmc{1U7zXVv>5vKb8T z9XB^MFCC?#iLacttDjTFJf=^)dldc+Dv$hjX_u%yNY6_lTO68kL^zH)^m0H~N1ym* z3&{h0YephpMHD=nl>N44NZq7yT951-xsRY;OqqfSCi2wdgi=INRPfG4X8+5YMb0Mr zLYB00rAWSuh}a^1gF(1ymp^@j;z|V;ta-v$nIS4`pCKC#W;5AmVFf3b>31Ud4^QRk z@c>Y}3ukSIz{0MRu7T8Vl`zf_CuT4<6w?7Tjo@-qpvdTW^vI=t_PmwfSht;%EpPlN zS#k5iX`~+E3hs=Po5whY^+`A{GjW~~`6A#26#LSWyYOFjn!6ON1+st4cYJsx9;9tV zg~NfwA+tYWn&dQ6Fw5OL1(l^af45`v&q&2P|4IX5l6;n}saf7~NJ>{!;>9E{6C}wSf0WrdKvq9b zPk3oUGEfb_PxC5ojn3sJgD;3bNOW14T^+W^=tvclWZo;SEk|Td9YJNotMdT>nydW>IO{2o_kf zf%??nTbBZ))LsD#ChL~gi^St+m!6eMTN;$o(pS=w6|%TMoww8d zFz>^*gjVx1YFsJ@Krisyyp_l!G?n|1W?vFEtAs&LE7Hy~nUTWX#+0^wS^g&CdYY6i zxOklbEdpKzvXT!AeR2-jgR;Dj1Erq{REZif6=yDZs7D-PGeulw}Wzh*3tPp-$=HL@L{3xsd`VQsKY1U!5^_OCbjY zaOE9!^c68&GNzO_%b<@gg7hacdl7|_x(>L3QhZj;jiNNPfl8A2)&lcS=u3X!nz z%!H9Xw|gD5qtC{xwpk=?HdR-2>U z1=gPQnoIpULMZ)C<4^a<;k(4&s^}40Ly*i<%o!bo*y)d@a7;<0hW=N?U1AB2nX)+Gl#PflsP?aLinMjNb82-M1G6L9bL(f9fo z*q{o;BrO-V3mi! z9{`-C^Q*^h7jw{|Ob{7fYc2fm1W8c&{l3lg^{h^YWFVe=6Ohkn`enlOv{29(+rVV4 zX`Pr6+6cae5W+Y!^XNEKEZaJeLC4Rk6142YE*aEx@sA^7ap_lEeO!pH0LsM|oxF!K z3yRukT!|v3=PS*gzZ@mP6=Bk-RCDHMqlJP&7VMDSPSUw6i8+wU54NoR*eM^Ipbe}?dXVa%_Xr!gJjE%1WrbJ#gx6Ra!t5WwT7 z!?p5qhGNwBZ3U25_Ws;O&WUw}WfA+(>o17Qo|qo#h7q3pFwp|mPMzpvJ+_qDOAJ?7 z7mR;uDqlNT<-U#^<^WT8psStGE!(hKD=AK2>g=R`pK&Atj$diB>WEIg;8|^~R3nl8 z3?#T1BkO7Z+>!CFXJjnOu#|+^U(>ox@2e^5!dj#p^hJzs)ie+t^%{(~QeMK&zaIp6$!APaQBESmd)x=pL zhu~@6-$)WM<*qn5%_Nk+_t--DIAMA-4;B9G2Q)KmulosO_(+ z-#RS1y3!>y#~_GAWA7AnX2g4?rQ^&8*2Yt+wWK+hzu@8;98SNpGp)OgEH z6|*4F9AUiQ1GyZsWec0m7*bs!lEEp>RF4+}g|F1ZnceZYmlTGz4ffjw+1m-V->I`x zxW=g-slr+GNYhiWiA z)z`F{YQs&=Y9R`-vgd4}zktpW=c{P^3qz2Y1vrO~UAp5G@N(Xj3PxK53uX@+ywX<0 ztN2Af9Wcz;6Pvg|EjbjaS574Ek(54!*bM%GaB4c`k zCY*&Q*ajaKR_CX#c`PWB25zfLfl*vj^`UqGom~^G`mMO3b;w2nH04}Y2SL5*mZ+;U zK2Zh7mPCi}Ru@ns4zNIRGQSXFRA#_6A=cpSt%Hvjc}$lHccgy*@Q_v!`=avmbtc)c zQ9mRn9@j%!6TCb~kP3xagXV!vvQM-!x$P_*?3wL+SnE9Cj`%K$PNQOlh3Qgklfh^> zIMUvx+2u-T(-^{W-1?yd;}+eZb+f2LH;__yZEXdq4R$suUT$$Ub@5xsb}xgxu*=CQ z)1+5B5raQA^lMsAwJ7{qn`gmABRK*l<>}mQz2!nCpJ-y9E%QD}k>7)V2^%;Vlft13 z0X%{UnFZ1t0&{ZlogWrjetJIkw!GvgXZ6lXBO}mjPkF%gl_cz4fe^FqUpHB1%-UDw zFzYXCFqg$a52^A$B2A>D*2RHdi`kGuv&RIjcIP10DwZybL7i{RvU|CUQA9j@ZYk#V z>U6;F%H5(mwMPiaGj?qIyYhQL;ixN~aq>@NW=n9T-y=aBby?qVQYN(wSiD3x5=5K* zvHI_l`wNZTJ{Vj#)GYpWI8MQ^i?{vz9OpK}E~WwW`S7hf_=XMwY?E$m=fYcKtqeF zUr8msShhNv7*J5ty@k+eFdpy{{g~=TdMv)s6*(@owRqtGYQnZ3YQBaZ5a}gd&p7LGY0#AfOWfvl2N)wjlyB!KxFkD}K~slp8B)W_Go2#yV^ zkFn_JUv@4wWgn@sx0t%phH=P7UrqvcBsoiVeCw&HPxE;w=$droW9K@6+TPcrFS_7e zYa32a$TMwAMQENPagz?KM!6&<^;p;i4ojU=QiriS>q7+##o!dePwE*M(Osx zSU4r{YUC#f^S?{3Cax5ryB8)rqh;H4DH`)~$} zN;@&TxNd#)aJI(jnOHZS!AH!Ro5yB7RHpGKCKxfbP5okc23TInaK)K>Daqr=B8oLy ztFfRU_c{2;fU3t+Y9pp6MIt)J{B|6h0@e9)27-9x%jWvr(Pv19`_cd;H#i*dJW$2P zBAKQQOP6oL?oO*8I(@zd#e_lJAc#- zy}mjfoJuyqKR+?LhoN|yvIv-b;)mM<*Xmnq?Cs>S$pR0$c0R?D-kpDjxwlX#OoAA9 zlS+Ti%&5PGT>{uQgq$zoKbyh-Q3uvPGGW3xy%G?DGzCNtcc56e5iVcM&dQ7ZELBAOcNB+H zIjLIL#njG(-oF(#nA&-7v@ELL)YgtVJtFILivSHdV45#!_H^j07#WlPTTU&I{QzV9 zQZj>@w%jSt%|`eo?Jj)B4YKs}t~*ZN&8yq-`tM8_mg*_MefB z_22COHpGDRRilgl(pXDZHaV$W?!!9~%=Y($rF1*&?e1{Z;E*qZ-7hyQUX8&-QBYM; z0#Iho7B<2q+m8ElEWAT9R<$}~myfDOL5qRz^r_qM`(ctS1A~sS*-FR7bLm4_VeCw2 zWOsnxjjFpz9}5h5otcHR-6KhU-LrztB0amy4gEqkEPwQ#nm`^4`?cemEP5KbM+SX4UjAW0_vT0LLFn=fiCrb2C427@A z4dEzTcQT0(-g*d7BL#O_xpz^5yTT4&YWmAH;eMLNKSBOn_xWRwlandiez7;mUCMW_ zirNq~%Qx3QtC)p*Lvo1Y{q}~q&<<1b#62T8?lN)Z}Sm zYE%d@tBxgBwmKa+o2H?3;&jM8-E+@_Ji8sj!+`L2Q&9OqJ~r^RVt_=Nd$Bz0P0gkU zg9=AAh+oV*6&yr6W7}#EIcGFLCA5|TP6u2B(t5ultLYD10$rZvS8tDQ2Ir{{BcA{5 z@m*oJdEtG8=0orOLx1D>SlOcz)>pDJyp?9a6oXS+axj0MB4c9J8DYwDZ5t~}2C}S( zTXalS1xdDXJ!DYc+RlbtvM_df8ot4m-|rpNY%T zE(s`KyEQhBY&S~jKr>WQI05|lc{8)TprCJz{%LfzD=||md70bbW$QQ7HokJ*PG$3~+F#&TEMuz~+vJiSQTwUivh^AQw6RanKsP{03S3mPlR9zRNv+)n_ z;C>4k`BP;vLv}q_)`<9UpU2QtBk&=&BR6L1r)cHv!}?|E3X2(1=}@j8Ao z<~%f%ddzSCH;keK9lC-7w34~e(rS~Yfvr6=n!D%dx$79)9&}-^?zL(yc#3I( zblC145hnVQqy%&2QcfkpEND%+RO5F!#vryUv(+xpph}$G&x)g z^n1HXZ;G5z{>5ziHLy|mcQrZwAZoD<+b8# zK!)6$w_4w@n?rb-+oI{FvAtVDXHv_88w^g}p0Y!3Or7y$W zDYcYQ1ysGB!ydw@xAk^)T&Glg7F}xYIRl|Eh!$VR7Lb-NH5QxEEbVrVxK4sfJge`8 zUqG}XnqyHD{f8G>h1V$_URRBVivf38^!Uy%{9L9?i$^Ga!TSh)hRWt)`-f>KD4Qpl zYz!!=t!e~Kc5NKl3Yc!6(=$20vq|a`e^YM0G~UEV%RKf^$LZ4#))GWT;=;ov^wQ%r z2zOez__e%@43;6h*9vVEg)V$)efY;pDg8avHf0FprSp_EW6*k=_ok^Zx4~dhcrDw8 ziJLNQijiexZN;ZJTc7H!4bCSa!eu@{+!*KiGNbSD`;25hfHEZsLCFL(-4ag=Rb_3B zJ7@J1fe*B?us+Wc7}s!#&DojG1h?mLQiZ6*8AkBWBU@vnE-!!#*b%v6UOp~9 z>lBLvbN-(-GotYdS?=5)Wlfjv+q~ZOrymz%KL}z5a`(JShb3h9kpa(1ZscispRnJ% znqS;?(!kT4iANua5N`FKZ6(uJ8d8!)F_;dJz552*L`NSe4zyA|p5c%*x0(LX zJJPGx0dTj#;vlJZRi^5BrYBW{WGtz*va}m|V0n1~@-rr-k4}&}SNo#{k6V@l%IB&N z7FdhN(cYO!>J1e1N8h%0;cm>gya_+H7_(eHnY}BIUKxarBXra9_??rl!}3u|K+zHd zP`rG5GoJ|xWGS^xo?B!Sm4Id%;(TfD_wPWF5N?(=ep0E;aZCYqE}Xyk==S+*JyB!I z!4yNBs)GsLfzkhrheHHG{XEtpmJ8-vZk=nCT~?Ca*amh_fljJBinWR9o2Dto4QsjS z)O&cv;ODsQ|Jf#;wC)fapJGf$NPjEXq9u5QP`LSd4t~d9#$WMLMoX_1eKDndzle-h zZEPP11i7!jP(PxCo9<9>&>YKupEXZ|t9*>T8XN3D zH=qyLl-kvdlwRn-kqZE!Jd(w6i|t2(#(oMa{3ZN|FrXZ{(4aoR2Z`6H2!cz=24lH* zX?%I+u`jq(E6aVYoR4ul%w~s!PuS#SajeC)uyZz66Wq(G)Yh*Bi|8@gc+dJM%^rHs zw#4YZ!@ziH(ai2&vWl(!yrmq_>E2PMm)#Vfg@jr{U$14`U)A6&#$0`#+kXU_&xLV| zHh^$q{LZR7*UDKf5@wg=B?v(FBY_OlpFO%*0E#Rc6^X+F2Bg z35NKsl9ij>f8Dbga;D0|B$J<1WK$sr3X)!BKnv!;n#dS(5P8Ze;Eetp4o=X^q)k7_q}?|G zbsAd6H|~IyS3%-N@yWm%70`2sezdhiy<0j>MTL`fI1!x~vHSYrFteXT71FzW$yogJ zMHu^+1BW3jWhs5TZR z3=*Gk<$S$!+f+Xy3bS_ByLKW5rJqJnd`M9(T-%2+=()s;;JAf>ZfM%*x$RpSFKn0x zl+aTBAi($gU-s6+ZGSeILp+(FWX)W{b$yMfJ@>)ABA=|vI_l0QDXH>q`d-z*W8aW=@8U}IT2Z)5M*0rz)B4q=;lTf_lYgrL|F6b| zH97AVjA!>v5H0eZrP0G`d8OPwUd+x8kQ1`N@2hk#(*L$|`(w|MBwUYGJBV{b8?Co} zE^Ah;iO#F1Z(~#wvZ(S%Lu~>$t(JW12LbNZzv|6q{^92SCDDI0HgNopHoY-1GW}cI zlxGVIrX)n{Lf;?QU!k6ccg{hGhiL?J$8(0yM(<8< zH>3d9EO4Qb+bsmisSFDaZ-xq38?f;8HcO*c66D`MQ4*zFpB&ugCZYC?d@6@0sk%(5 zMs%FRCp>Q#-}p>VD+DUzQ|QogR-uO)@Wr;o)ZTN79L3Qe`b6DeEa&6gbiKcxibiA% zT?iGM1PSG|n`=?awq$Wi>#9earTG#S+|ei-S*@nXM0x?W|g?&c}m?YkGbZ6g4<%)d9ACu61{yq@f{yrc_F|-jR!C@ zoUeGvlXC$HLRUv-m)fRs5uFV|0mL#I}>9gB-X0P4Mc2v-3ny&Amg-;Kn? zjC&2uNGdjLTk@rGDI{YV5|z7-h?dfQ4Y0kA-h|{Eq1W0-;dTe0?;CL@_p;(6JPmI6 zUFV6k8mCCn_AK80X4}w;)fiOA+~;MBzE@nC!=(5TMF*$(I;V_R9ys(-#lgZN$P3r& z{VD86>mj=p^<=D@E<{B_eWuKL_(`6`_XRK#nl73u z8tn7n?OywU^BZKAsh7Z+?CLb)H;`qferqH#9{Z(PLKn6J^sE%^`s7BvF;LXTh5h+o zkc6j@M@%`4upng&T+|3ZFI6*fWm(=}+3XWX6Ctx-86)AhCNSv9!jC-T`$$pMO1@&; zgrU0A(*nnMhp*n|qrdFyb7Z-#u+Jz`hGATVoqRo+nmdxfljUl=Q+JUva;%xIgIuoL z0H@CmJZ>Rg=iqbd5>a56X00Rmx+49x<7V0`<0^cio=g7^Z<74ow_ZQb2EL|9%a_!9 zm#Hz;R$GVMJ!dD^Ycbtor4hOE`rnP$;-u6u(&Jz&4C*IMPCx$OzvQ@&u@SG~_ubpx zU4wCv@`O~U#-c1c(lvH^8+OdSJf?5OKIOD9#O|bT+yVr*bdkoDswZ%v6Al*~1<8Xb zsbJ0iu6*TI>R_8!rJ(RTCkX}2=PeQ_sg6u+* z2c8ZLL7yP!Rg`n6p4m?VcHMYf<_h?PV8D4G_iSkBtbs#+HMAbDab1Z`EIkfO-lT9o z^mgPuim9X+48OLmFooe&iQQzPjIDT5mB@cts(f`{oGpT)BO!>4 z6-@RL%9`IzF}o~SJYS|b+&NG9H{jxD2d0>MyPJdNG-}bxQPPLZ*9b|^W6EX ztAXlvX8!~PKkVWVz1j$~po#7yR0+hSwXmjlb8*TMEj4o+!F#dSlV*75T=Qbo^dIgj zB5FwfE7v*w{NI+#yg(^YP445!1NOfFXz`^)-w^UNej-F%p>w(hS9WszKo>jc7w266 zD)Z=37g{hL;~bi$TR;mwRt@aFshF7@XBE%?CYsnMK9x zHU0qjBI#Gk4zLN$M#F)+eLanv7lSSH(60|?29;e`x3wED8m<%@ zzC(#L*viIO2+rl+2?^6rUk4~kg`T<`k>mL!?-ZmBbEffyDlH0IKXb{UG^i?v8=CE( z+6G~4NqFrIx0Zv@U2miB*Rm?}MhwV5in~yM*Bm7$u=h(R(GWM8}N_61K+mw071q-idw^ii9)#xb5`}!2E zrBrDR8YWY^K1#bm{YsFauyw?gO?WN_+uC!u4oKNmQAf}09}J_2?G0NE<`pA!azzCa zxWD8lHB#BTaR>qEZ1Y0tbZg_UN}neMzWXiVrBXoqqv98<25I2KXx@6`ehZ6;~)Tw1$s}UH~ugqdU)?UmPE0cFe()(hxYjQjM>Vluh{}(+%$Av=(T}71)p~Z2wM>@`c6dB z{cJ<5kL->5LKcJC(R(+H z1FER`a=b-D2U(E#>Om5N1GfaROG}oT*4Er#nO|Pdj~S{?63Lp&HHvOe&Y|@asMA#R zZ{A&AUPChs*(TaUL29K7rHi#$qPLR@e{s?;H2;PjqTgxF+5RqJb;?}M}j-Y}YSqPF)k8#SJji?EU$ zGFU}}QIs4OxHEY7$%-iiV-_CxJd+CXCYIrDoGcJzk<_ld!1?eQIUktgDWt9K1}6MV z=pmqi7RSGRGc9RC9!hHioK&=5%-|hRFuJZmdNWk}?uTH_S`36wuW^VyfBN0?X}oH~ zU@s9rn%T2*I1Q;({lHc_H4t_0xaLuuguy3DpDw9k;_t%1Ng|kzf)}D6p5nr3vk` zjYbzASxEv{V@2oZnxq3Eo^Bm;;3e`g<5apKiw>xnf|-F1o(WQT2#!V9jSZDBi8JTY zy{1RJ#a45K;9M974AWbAgq-SyGda-WX>^E_rqUO_0=-kb4!?1dv3SmAo7n(XOIecL z3kcKs252hk8({iNZ2$6sKb5>1&4vVz<`TI`P$aLZDlgEqbzPjZsK;)_5@P!X`8w;{ z$cF3KmkZWI24+qq$X)^Q&Nk$@T~_TB2jSH6D>n`2mbva)%s)&&P5~DQ@Bpu*EyI z4lM)|O;Zbw{fA+UR2~8YYSJ&ekByWGJFY?;9QVlwI_(99*-G{9RNz3zuITdO?)x zgTYHTSXJN`71yOT1J{3cUH_x5)ql8i2f;(}pl?~b0j;Cf0LZ+=Y7VQiPh~IFngb<7 zE3+B-(F3k_C?5G!SvI~T*FU?i^Z9aJjfy)VeEBVZ3O+z`E@Qe7%YZUu6($#()Ny@_o$sUKWlj9H`46&0tNJhs_PIeodY()(19+Ujym79!tq}&k@bbdJyP01Iu;%ZGAsiyBF+?z_hurk6$X+ELd zozL3s87Rqk(m))zL@#;rz(u#b?XSbtzlzbs!yBYn8y|J;?-uELd-2YK^pyc*Tgwr7 z)fcx`k9|rQlWK3KPH9{{Dc!v9B4JaOiqw_{6xUdFn=7cf=66M5HSTY>iA)8Cm)EGK zdUFb=?>-(tOfl?OP#{u7qjyf#yvwJl5K;@qV+hWj|rP!wi=?H=AyvaNXcLKsbF{?=a5kgN*hIQxF$l<$O zv0}P7_i9yPu29i6PVcX4;L~!+#x&W8?58^`n=G!)qV_8@{m(l2x1#+2a_4((CE#ow zm0DWTP3_#p4kfenPeseii6=v50UiJ|Z%VHJ?am1x@J%>=-aw5nGOUM)i*%3K01?r2 zQ7}hpajE^<&9U^iho5Ozb>oL+AY8B82tEGk&i_lI|8(d7qnRcKRtDDphO%h=Dpb_B zlVsvgXQjb0;-AwLy5Ag4uC5rY5yS4|MPc4em1I-tk2&pap|8#f*6uf1ro-`oY}{uK zUDfiht3X0>f!LNAY(|ye_u<9(@WkAcY|gs8fEZwk8Z1WURPhJ3z-XW(L5%_vzIa3a zEi{IIv^Mfe3t$}G$>gEnuUNnKy~lAV;=LwT4jylXAlR|hL<^bMwU@o-v}@riBq5jW zI9Z-q?8L}RiTsDBTobEXve86*xgUpL2z~{Sq<~-M&rC%@7jY~tAcm8)oi5lUtCb)1 zxxdwkUiRh%8KO=2NE6uK^;@WqK za2H{`FjJSc&)RVZzscyrQFl&ztEzRwi*&r6DADXH%s!d6`Z@L;M-C<9#R-v|;jiPL zTv&5tWqsramBBIJ|gkJs=6leG-EfDeK)~<0Ku5j zz6Q*@C0Sx!Vh+#0{Xt5MpwW(HNIO94v(ju~FLWxH>%{!i`IhTfT{5#MdkpBfa-9Z0 z5XDT3lZbwGfW`dKgQtL6FH5qvb!N8Qkg#|GbBBX~xg(u!p5xt)cxmv6*rfrPFny;J z2GpL1N`JrP+>*p){on`DBuDlc60w59+e>zW*8xfL^09*r;&5L_4;7;UBq-vOFFfs4 z*x3VFh-fR1HY_czKwz%N_z4Mt{q-f%JF>}G{v#Is@5Nq|?YB;0+)gOHa zRZp~UTEq~^AE3nmlEqv-)@}fACs3!{hm$e3B#}nGS{H?o-kJkTGB&=?jBvYvGD|~t zc@ZTOhqIKFL-p635804OqcvLfq}$5dWCMz`b1(A_SToZedD9tHra?;m|84kd@~Cn~N(VdJ%SnjYG|wjNMGH3evtpivDMt zJ|p?l=1J;V%{(sA!HGcOlA1d+MLLX4%3@8DIJYUbGU+(Wz(<)?Nu<5FB`Nl33s(mf zSj(6%lv=S&%3=jO@i^myKbHVetYJWdodDpt`(7>_H7Mp9j?J}}v9SZ6Pa>y8Kr#)b zPS}cHQSTU=au78K??VF6ZMG9p+rM(TA9kPWhjZI_DlA)?#X1!_nY#^6qvu(($2Y*q z8rdMwc8%X-&zx5hWSYRaabmMO5a3(-d6@$Fw(qLK_HlBg7yU1<_^rm*&`TmL(ZZP( zh}q*90Z&yVvF-vl4c6(Uyhxh2_@|#65$L4 z=?MR(2swGWmg3zwlVt<+UDW!`8ixLVSqVNGi z(NT`?67!nBdQ9zH21t<39$xvth%IS?8!&Owro5twE`878C!+5GZ)B4`+;iVKnPQn6 z6nBQ*atcyJbtKHAJo_P)>;sfDrW8zPg$T&jgu@}N)M?NSo`YnM4b7QgT)iJQ>f1(I zS)P-q^+4B%EZR#spf!a3CGpTFyV)rQP866i`Kv9^@BZ(CO$??PFqLcmKRjpj35iWl zoIoO7F_DkANgif=|Crie>CWEMys#JxgAnYV)viOsYyq9eQ$HssWxyu> zz3Fbics5*P)d{~i*gw#NtT!LT+(32fI^p*^c4Es@H;%*?3j(x6-eL0mW-@YgvJR={ zHHYmO)CJ$iKX2X`i(YwcdsgWf)mG-de?WHQHC%Nvy?q=qBoN4VSqKpg)!ic# zD-o!9U|M(PrKX;(SV;F^u>1d^>>ay9 zZMQAmV8*tc%-FVV+qP}nwr$%^W^CKGlbWZ_K5f10)T-U8{=xI1x2KK!8ol=+tmt4v zPSw5^eshZ{?oify)PX)v^1xo)c&r;(XMxA?S$4cx8E{y@uGUGUB3l?>WtNL5RgBeT zbkyi6SxUK`ylDhWF3_jq{kD6m!}gzb@(;7ve@#5DetSnk&T|l}H zT3YcP$yq|o_@Y>4K>r%2G`WAeaz_Yg#x8?3=(HSs51Zrq5GgJS4p!)ykI2q~wv3vP%%xld5%&r*)dQ2Rult8~zE+mg{tExQU z7Tz55b-pA~r^gRp2Lh1y>1ls#x^oE1yW_uOg>6I%?b%pWtxUj+%+Ms^TP2^^nLAOh zN!{3nx>yvdMpvv+D*(@Y0AaB$o3strt_aP5+8c#jH;VZr4EPuE|oCESo&S1Z)QYcGNzAPUg&Q9 zws~n-OQ;P;*|mJ(n?V(3lK0)Go1jKjvq3m)ccXQ9KyG(Row6bKF(1zs+6KI2VXwql z8ddQd6a+rZ*E?d->`TicxqB<&7j0%;KdsrvRn=ME+!st;R1j|J!WotCpwDPGEpj8X z#&3{~(paZ$byG+gH({Tnjs+MPJiK4eU@;aZ!d}XjE?IvForvuT`T_zbpWfiyU1W*( z%G^=l`%-d(SwaJ*PORnu1TmKl7b+UyX8l)qMv1-7GNs$xM@hxPP1wB|Y@7W41i7d? zsb}Nr$9!(SCD3o$b%=_A-sfOz;+C59^TwthC@?oH;)CFNnCmcc!VHZix&Ya> zOn>dWHKoR@{5eLu{L;|>bcE9_f!(rjDU*%GF5u=yAU9F@Xk+rXCs3#5lI9(G2#RBuqkk-Q}Ia;R1X7UD32n!AFIf_Fi*Nz4G&)An}#;uGXhX5TY93J{|~Bj6Q)wf5P2Y0C}-{qfk43@fJD zMGZOQyvqjD?*`xCvea72CZ04-d7P>K%R9}&bV{5ZED8{&$nLsa(r24kxn>m;+@1!5 zc7XWcN3TqZWb$P!xmm!DjVh41M7E$0br-CLON9;*)iu@c zu_+YhYzRsSwi3KCAi)D~``ilc??n!|h~85nmzqd zc-!Dx;+awT=xdgyME{@t&a^MvcQy3(A=*Dmo$Zg_$fA5G$WWSKP_Zg-3`P#+S4m& z)kWM|m@;$Rbtoi}xH@{RrY^Ko2#JM+ZaIh**-I}OnWea2jQP6v`rfsmkplY zOOtCm#M?S^o)#0g%!0>Kb9|B!kQRx%AHxYF;eqwAiGt&3|w3^(lj6 zsG96de_h80mKR#yM4n$u8F>nbQj?(w;z`4y_1YEsTXaZ4f&GErPHF@*Jfy6LI%b+l z7!Gb}U#Mw^Fsz9~aVd+l9AFAG8eN+@myzU7dyXHfN$3TyRK#H@B5Lzw-a?zCtTg&@ z(W*&U)k2?RD;99D;~3k=iUl*_13$8ek=y>r2imk__FE`;U3v{vNTdE$lsO!;98roO zX2xL56y7EIG=0je*MJkK!H1R1gYzh$jShxcId_TPeoh&#fr9(PQGy0-S{;V-gTbFI{e)mQ5oCfYLo_H{K=p z6n!jiQ&3w!+Gij2da>C?I3!!W!3FYp>vl4$L)|4l>Fq+yREz@oDj@o~h=@#D-6e`N zqK$Bps?I!JNbCxpE=PH8dE1E?oT48Az!tb9Ht?x00%|AMG`!AeBccAjaW2l5=VWUbx#Qv1uuawLT1Tk(W8zZh2iGcpUo?o$*~gpUfo#&t zgktfu>0$X^!NO#nErlw37GcuKxEa6gb+uEF z2H}LJ3&SeAk`MPYOHFAe`Sm=?Q-vFoJvyLXbI5~rJ$=_i+SABHpn^D@QP}!Qi(m^6 zfYG>)8P9>JtEr}1;oQZoGuGHiwB>?Y@ZL{4`t@{l1Am=zRO!H3&OC5|@vBW`8rm^3 z@cqCStJTF@{}z0Zmn}z9&`FnuLU%u7s2CGTpY!2rQuFP!?m$|K49RXX^=bM?Z9*@f z#8~#HtM8jpg#xYvp{)F==-d^m1{RWJhP4B<^a!6gx+O3Zn6%=f)kqA%I#nm(+6!iM zh~cHVMnkP@nNzrW2!&e2JU*fQ#9?6&H%&;2j?WYGOW&YY6ocfI8)e!qpq-4aOp~PH z=+_v@z(N9&Ll1*U{MCaB>tN2ruX=-v@P}a0d@ApWaf@8`_r2DYvp3XI#{2NA=iI@` zIJm}@B88MD|G?b|RU2KLXaJM)+wf3kb2zJOrKD&I5GvCFmwu9>vDCoi0c3BTVdVtC z6H#)0Z=~S|$JM0-0KRG;?N8=+za`yObg5Vf;*y+8#8dGfRGaXYqy$>(1VNAn(=K5iX-|4iRSK&yn$OuBM{DW1Oen|aBE3d z4(2SeH}G7nkaFx=9^acQ=5`6!%yGTsP%qk})vBx^K8;RdF@qw*dRk#R3DDTVG1FjV z#~4~Al>?DU_vxIeOO1*%DU5PjeB(tej0A4BU|7aRNC(m;+G}C25SiLH@6N5VorPj} zOcrx)JOF?dn2Q~KbvA0{(l)~&0}5rzR8JtL_G0ziO;iQ`3od2i6m67gW-3R}tEj8PTe`C09lG-b{7Yxt`hvkMczswBJ zA^KkV`x_=6Wzoc7j>uS`>0TARlztv|>|65V$YV6kwcW1@rkp8OAEs&CmsvZ{7>JS~ zygkZvJ%kU@3+scx$VGeitvkKG zv7xwvg?64$UdN#nw!Ee}^`K>8MlBS*h0<^lVXYXAa8Bjvp4rbzmeqfw`?DuWV`T0x zTEry?+nyw7-t#4bY+aR2YKDXk9JmHa$`ZNjgY@mj;t@_*G6fA6Knh`RhJ2!YbLv+{ zBYI1?utZTTSFGgfp5!WZ1s&XBvGX2sJQg@`XYRc<>g%@Rj!w-=F5Al@Ojk##v5ZN~ zRhd`W_zm#F?ivM1&bqh<(L$rITA?^U@^i=y69Hxsmi;U?Ql4F#T)qz>A;A{pKR%Vw zh=GKt1!lhbBXxS_DVJf?dx^O2dOxxM$zE!Y->rO@#(o#j&2d@r9P2Gd$2=xV-{P{7 zT`NHFy9nBm|EYs)kJ#pUd!UJ=C?M1@`yvQuT_bN3YEvEd>I{Alx>c1X1 z5PvP$S%aC`z{}w!pmwyxCvKQpWCAt}nw~Ti^w7^n_Wyd{EO*4?!{O7J%t zIP@K&kx8W7CB0c;ITFTD5_K@^3_jhDFS=)&Z&6NR0CPtMZWsFbP1lx?HudW8DmHsm zEttpoH@M}@cqG)Lh1hMl*QKCLp{nkk+ONLst^pE-D&Cp=x3c8kNMaqIRb&K?6&%rl z$nb%71PKi<>e5DV`!x%p3aUR5x;0te(k>FIwe^El z9qeh)<^Ah3JgQ@FKqDdAB&QIUr%lm{Z{1!5Hh5(zvkMp0qC^+b-D(OFOr{M0u9(86 z)vR(Rf68%>vStL|?Z(AHTy1u4$%dOM$C;|WU?Vc70=Sl#v7CLaz%vZU4@X$dvRoLq zHqH#H6*jVxZ z2d2g$H#76wOXUJ{U6_o)vM|YU5@n`h;(VpL(`iBwz87T&NucS;v?bUF1`BWj=6#e9 zn>I1SoFli9fxU9|FA=XXxc0M4?!QRvqiAVGtR)g7ZA{&DAPYguX*tAb*(Bhf zhRQ#E8?dHnTD=r7NdUd4Z!!A#u0JQ`-P2lhs*BX_fOJC93vg3q|YQ9TCXsu$wz}XfV}Q88hl5D9P^+Nce;nUF{EZ4y~h3wY{Gs|2_O6& z0zdIZ%pnh~vJMk?GK`?iC;wUh|Jbwr*I(TH>r8@Ubhb@Nn%_qJ6z)MXR=LV{{5CQL zao%=qT6^?g`p=Kgv>ej10o@7pT_2B_ipK3w{Wed_Ic+JAI-j8j*CNYXv|dLjtP#$5 z{hp|}*d@;SclrN6n*IM8ov7}%nesze-iVy`39AAT9kKFX6BX5DILo1K8`F$ao7Lyx zte;lz#MqPI7g&QHM*m&?|A1}(jrtjw|MB}r?85GpI5W1ZNa12`y973@lbYKyMFocO z@MX2Y@okoc$-7S-HYr)kz0|xHljOa3_UtXye^;k0BKysU2~JKk@LB*se^x6}os{0A zHC+M<20Wh1zvPeZh`Is&cDs{pwyN1tZ=t|jLO3bx|!#A()nh7 zt0liGRmIz8oZP*s{HWVgAwTBN_uQdomh7stg9#MFA{6 zYER#8pi>gnMv@3Rg_%2n9OLW#$BbaisNo2C<3dbndxz0nvM7Jgi*?+u;9T7BGwp6M zqoY`>bK^yH^(y%5TSIN2`HJE6yRnPJOyXXHG%x;&SCZm_ziBv;%RHECPfe&k9~I%I z#%vwodUk>1o~E1>1{-8~vH2QCXCra;D&3#kCwkyNoxgyqHeAo69rRCFsd5>s(@v1~ z1>`V1?NjI_KHy3EzYVE5yhZlCqxGmxJ|#5bhN-}euN&(Rs>2$bp{HM*+vdF^;h6Wq z+-FPo?YTxbC32sZA=ENJoCJw*z+Pf(>d7I|Uv2dj9646P0-A!bv}ynF)ui$sC9nii zRST=``z@n(5-fJCRO`;cWSZ?mE(1XJ+g(#448vEt1cQGaP;#nwE9mw+(ZdLjnkgt- zdFbC)B?lzLi}I2!Q~Faz{-OEX;0f~Ec(;LIEaq|KcO|C7{8$%PBT0eKp?CglD@SSW zj!_jqL?`vWMc=axFqhJU!W7*yhvIHC-gTt2*C)Nq{rNL#4hs%MaS1Gd*Medej)xO! zlO*82#BE=o7S@3DDbGXq`}eDWK-6r9U-W#Lnk&a#Br%~4cTf=r%iUuMrczo{Cl z!ijt9t_J#dd{pb5Bmemj)`oLqCU*0m=@_O}-AkKNHEhpecZ7Q^=`g}tnTNF8!dmb~o*9{K`d$Y-Z} z(Noo@&Y+42D}VIPd<<5g36*HDdd(vK7;`|81{4+4Zu*COqR!SrPgLLRb%$->)xO@n zn~?<9nB^LD(Xw_1@6zVPNXXR{{HH$Vp)9EW%*@w<3r*|AZ4*svJm+cwR*d{)bJ{hq+35Q z^JQ#f2JE0V0jwZK4Wuyx7=XlrGdD&$TGQ3TRAuq!Jf^WEBYU+$=o}HEw`&w7O0tEQ z!hl(U2T4Q++P-|@DKkuxfuWb1NQuUk_2Mp!v(`6A82hl5tRY<3;VIEYu*c_puHAjV zqA}JX^wM(!l9%dGHsy019;gw#IVa22!tEf%ZRo3XVYq_9TS1rFLRn*EcJdZ)J_Uu_ z=vBIujm%Z}M2g;?@aCRPSzFTZZ>NkS`~zA3In(=H z?_5odh^4UIP+eb=?pTh;u+e}2dk$$8sB|=$&`JK57L23y^{`j)2PInfhP*;{! z2srfyIEjXGg{iSSOqYj0?nI}y>JAJ@97FbSc|Y}|gOu|)5acGepddIGAAlA57E5e1 z*4@zv1@GzdRb8c_?at0=7DNp#grijo>gzU`?OTcgz6d?oozz^Lx+*F^3^dI(7o?Ua zR(kRde3ExcjWhQJh>f!^P+-L9tkQb{yQ$VDn+Z!g!!?6pYtQ`q006KvEuwo z2(}o15K=s@80O+33JIz9HC3?tcHanJSLNIO0s`q zJDS^PHgP3&<5)?C`=x9sd(jq6N7o{9=>_LSz6Xei^Y@c^yjEhXr#_rq`>ZMBb$L`R zceAbYWtT{R^0_?KIIw7oAwbv2>iizMs|^f1V8?Iu^E4%y*MyP9k96 z!#k&`$7>Km7Py_J7$VZS)_(r;4j`@O7b^()-c#P@MW3jsaE&7aL|=U)bhwp?vHGQI zbQfNZp)1M*Xh8a~yr$iVTKwqZ810-DzTckv{aQx$%y7-lxRyhI4x35Xmg|)_zO2jB zc5u@m@{~+IzCa5uq-kn*imX&g>faaFH{k99>ss$?SI{B_KDylAUtAq0xAI#z>hbs# zt5#M*J;eI^h;PtHSlB6J03z=9FpmPb|8E$hJcPmIWegy*^hnbhLLO(N+PRK~@Ad5n zv9JrJ3SkK7rej=WVFzaWI4_AA)Q``pPJegg7eXYhO#X_pmJ?lZ#V4elr0n}*4QzE{ zt0Rg5wksoc3mq#k?(I@U*n_QClnW09&xMfQoAv}ua^Z?X0|ztNifhA$Qiw?3df|%k z!4GB9lpQC?ngs+$iNaJrQK-_wh{ozhH4OaK`?6YJsu)Apr%j$TD9SPS1PwURi@<%| zHWgq`ZyGarsFIy{^kFhB*ar_*hUbt#2lNw3=JEzS z5+}m~1_LB|uE0We3lMG^P0qc;fxhIbU#G&6VLM2MQ3+wUt=bXXha#>vgjZfy=V;+xRwlK%V_7vLvsjru%3FQH`HcEzRx@mnB0 zr;zIc{ET#qs}<6?5C7)>QVpEj7pSO;9>*VZ3#|;LqFi7SN}@9apT~NcnI{lqr{tsq zcpru5lHTYG)2J`QHvl+Q2uK&h4?^W%dcB-HTEf|ZN+uh)hZwx0^kz8S~5Xr-#FJul{2k~*$ zFCey*U(zqZcFtEiN_PkiJJ5+`(1#HYi8$X*DIV8_icafSRJiFKvJ;}ZPPp9R#9)uK zw_Gr~zx(Q)q9_XS9TU$4w25czPU1sRH4{%HkkaL-XQZuhGE=^g78H23)aQ+Z6l6KF z%o%LM<@m5I=u&Q(WB&$vA;+wuU}JPdPP2FF_KfTgZR2Pz5V_sb=am>k0yH0}rVM-I zFq<{$OmPfh9T7_0L=5;Ysy0tL(p%!^Uj;Ea(>vp|7yPv}&a9EJG~ePfBOW#Eq=h7u zH!8EbFhY{}LR&^qPev5K#0$C3D3w8yWZ7m5GXV~L4PsjY z<1Ta@o?ySy%Zo8gq!d`a#7^5%y}4kVE3jBvreUVt8>^f^6cNW!y=efwCX6cR4l$=E z!u*MCBc)%9;|BTtyFCJLTtp)Q0$DIPEOb~&AGfQ$IRQu2=ZuNsuA!En=wKgEgF1+b zgD{J(qU%X~1_axQ3B7TGtY-yY^Oud)a0A0DPg^f)E^5U5bH`n4FnVk)M9q5}YPuXO=#JCYyY$R??8Y%fN&xtH-rym2rw!X@M+s2KBtMMx}5Ufk9{B&3NG zb-e{Pc4yX(2g()B%c{pH>aVD5+RY@l;RP1Dhh*} zB*n;g0eei>CaT04t@0Jjy~%`Ds%37f?lz2S75n_OMA!(1>CkQho5Z<@9Wcf|&k#T# z209IosZbT{xNX3wG&l}v5EDLn<J{geRCH@v4fq|HeN5Eud~f5 zVy|IU{lg)~DMWwuiXNgzjEx*R;yic2O_NQj4$`z^VP1e#_&ke9sV%QWa-(ExE~Y>? zm}Af?DOidTfx$Xq(|v|zz}Ff59g3K0Xb;?BCdIDoG}4Z8L#ofQWIF$#-?h_mszzdt z%nI*bbPP&G0#<9-qp<8h`HQDjs@je{BvaA{k>y8`-ssW8CJ@pwl6R@IZsd1Avg;2B z8JjJ`4bNmX^&eEvniC#eBn(YjNe7t1ewL)7CVl=1)R#cHOS;oM+oo@Y1-mEKl&bbH zKRD3L83jfnI z<|x!#rKsJn+H2byep-KA$ysu}CYutO@=+7w|tuq7{qsLPZS?^szF z+$vChK1X(zd0KCTOM;}amytfOqiow9lm1D&(3UoHe9WQvm)D1V`qE`R$7rhy(XM`x zvxwU}x%y5wcmIBAfY_e7y63uylQzaVkV~uip-{q62Z8EQ40y$lW)jIpy-wsgk#8x$ z!Z!kWfhqa4~Vy`|0kjhX^Vsyq@!Y z8w1(wlvl6jgPBp1*rt4<`z_DaZ3eY!qwQ;ZxK8XSi!P=mv7zZLFXEc)r{z}U29km? z+@z(ZgunA?Hlnb;vP$0LC~n%CW5vG=#`Mk~&Fm$y5w5rg>(2z=)Z)~S7ixFO$GM=7 zH9FaMr4|z~-sdE{6@XuW^HyZ-`mUQ#QZSjL2xF^sy4BYpAjxb2GBB_9ryDz1R)$!LZA0aJt)E8<#|6}OJN z9z8bSue3?84?H*~=Jk7Ul$!oaEm>mtUqP2+z%PmMH~U;JM`vRB1iLv!OR)K*9odv2 z)+gj_Tgw+wLS8*5S4%6KoYe6>zzn-J{}I>F|KBI=*Kv48lAU_JGDk222%++;yim>O z3+!{hn}XPk)v#MimabBonK7yGaI9pcjNli=nYT1nv$)(VBGk1BR`lWNh?31KV$CS| zfewW@nSwRp!9crJXYV^tZ&m7rU_2+H#5HQqsU&j|AO2c=?5Sc|GLuIJbX+8U?Eo1- z*dvs2x<)7}s4)*Zh#T#>cCo)G8d~GH_!L}V(6NBR6C>Zkwsr{=3{UHKhZIm3l?#5W zM&UQ0?qBG@{@SiiuLKlMGFqV(!~V6r=~y+~|8ds|NRQmZ=EV5S4Zls|P`KvceQO91 zO?j?s8f1ItO)oUFGS6q%X+|9+Iq@r;RGU>$4W(4^3Q?x$bZqu5D%ai33CUymDS3}{ zGqL4~GRGd9T`k{+OFo7|l{ra=-TS_)takP_x`$Tg@*l2IFWpq7QGB;*`TlV1Hz6l{R+yvbJkwp>!DtrpkC)M&4fY0J$5)+P zYsvLUw!1H$w4nt<$H6>$PEUID&)LhTm^?u&Sl2923A!1%CE~FZv`K>(!qAp3F{;q* z-6FP3^>lZHg22Iqo~q^&HQoCD%Jo$RF_;bf?MMA@hxx?Y!y-*>axKyHu>Y)+f4IH= z3+qj5*~AB%p&_1N#nwzRtU1?p6~z8IauLhdMx_!rp2Be6%;(gJsXfmo=) z;`lXO*eB)ZRqFKj%u1HIpnm}K)4y@O|0&Xc+s@GcgEIa% ze2(s)ZhoB(J?f*68-K29&Srzo3|d$88AlAJC#wTgN~`mNeg3aosR&pJW4A@cXDDM| zF|>jDfme!7t<`dnB%Cxq``=|pnMowZ)6-2R`AEpOHLN(Oxn_pwOPWPb=`?HFzzaG! zS-e&E)S<^$S-)|*Inm1&M3Q0E=JN9jrxGQV8l=Aubdd0k=ktnf>s7d{ZhhGe#VOm% zZ?A3;n2?~YX7QK1J?u47j7#^)Ae8>9plLB$wOLDDfiPyV4y z=^D}o<{yL=Pc9`@m(n0d3FYQQ`yfdK&*LdMG}kf*Z>p5%p(<+eR>dHY{Y`!VvW~$O zc?#W0S8LSH${$MajA&vRXbE(`lJ&q4jkFmUO%Fp$`qL##M>N79&KpSW*c zm!UD5=r^|0dN?J2qxU@cmE|3bL$aI8ZE*A1V>Xk>S6z`;bPAVkYlP|MSC+E^4M{n2 zCY>#svhj3zBvklrCMh!gz-RNR={tq?=ZB3#@^b|r`V;t0%^8g9>)F(NhkjDW5t&cr zudQTDRKO?=jXh$#?6{h4M4T)DiSz?U6(h@vFN5&7L+VZmOU7?fUG2SqS@W5YhY{WG zyoz}|xj!>l4}}U#wbDrM0f%vg?5+>CNO+<{+zgW@qgE)U;{(5592_U=bAD(#Z0Ur5 zI8+L_1_D0Qi6s%Za`g_(rmJqV05eaae{mxj z5RcoN0AO>%<}o&H6(UN{aaAayX~I$pKzJ3_IU^8u<#hI2@g{knUPQqdvrHC_&p?Rn zInS>>z>=Piysj-U^tvoEt>7o}4wcx$-tUQw~28o4NZl_fo0ktQT%B9{) zVL~^g@1%*R-Aa{#4r%eMr~<^XgQfS(EZu|*I0XXUfBY>)cO;dI%V0HO9S5`U03}TD zVe0`gx~Uc^5JyjfT`Pn5r87fU78BC)+D1&m zKB=NlkPxKCXJvKe;Ac{2fDv})Lrqhk6leyhAXmbe_sun>pKz0{s~)%bi<8b?!UgoI1Rs{W0xh$`s!Y;Xnq0`shGpnvZZUw4bklW%{KjZ$V zVm;>*h>!C|@)Z`iEbkcw5T5Jtj9tE`$6dO@6r_;#Sn!me_IeDiF2f*pEY1S)irb4w zyrsXV`$`_h916k^8B#nMJqQ`T#X5FqmYHol$xf&iIyA^W4i-T^fEUV454`uoFOT9(5tp8-v`yuRKdjX@F|v_ucIAo9~fe4 zvu`^^CuY2fwn+Yj0(v}K2yCbZ=b33yo5)+esnWGVJ<^Dd#|p=%rmQX;JK?k@9%_Yv zJf2MKDPw!AHw#_wHvf;_J9-yP9qA0}A_I(-&axc4M!=vah}44t(?vNhlAxK2M}Xa2 zqu|IcPx8EDyH1(i+F`fAg=hiZU7mb3L7UC10QbAHi0U^VbFhn{T$zz7=a}AbW97>R zMP)VsC$F-d$6c4ys>pI}+b7Hg z{+*HD0qdP~+&!m9pgo7SOKxH!r*8@Sr*mw3?V*1E+g*D$N4?7EjxI%6yvs_Q)>!6?rG1h_bt;tdNRvSV!bbSu*QC#suQ6;q0vtaMdx**!^5bcS!rR0+KO z6Trpu5s)A!zn-*NyhB4>F_sN$YMO&YcI^7@OySwKA86ctp}@2It(f|F2=zm}Zx&Bq zi|a|B0~^XQ@SkRy%S(==%S?x+M4=3hJ}D7nj~Q(N`xWO5=rO`CZH?Op!zmzrT`z3c zps$1crp+}aA$i13R9B4>SYgh_iW%>V`&r|e%F*H)Zv31s|39XfBCW^PMz$XZx!39a z_30Pp$3^sR^!awK>|I3!x~}+V5IL!UXlotsuN|fO(@Te9Wri>|D6ZW|(gPjK5ho^w>ulvRHN4eBQuAV@5_Ee_Jqh>ft^8y71DCt0ovwiPa4l&s=D_n{!RFHRiD2p|w2tlC32DOw^@NN@aDiZnJ0;+H;t-y0?a*3w-e zd{I!rqcw*0egf+l&c6}(TATKK$HBid>%vmH#jYD34tH!F@?bC{+rXW*{)W`4F{3VMfAX%*sQG5k|uQ2n7;Sss}~+tF3}h_+}&E8AWh4G@8-o{ zM}}5|hi(_jx6F@wATIIuezbNg)gP;u73m~Td5+Z=MiPJ9H#(kZSeEu}-Z?6E&qvO) zKq4{8-M5jdwK~DSPFN(kauAn*b!V3*7E{!sH~w6IUa{b&mI8j|S6sm6#dIiQ1hpq8 zn*v$s9FeWY<4g!C-v(=J=Pu-gb`%n54%R%T zPl_&SvXSHirK|LV&Ft*e(TUFl&QW<)t9USkk)a#7h(`D4PaobDb2Ev7)3D(+kkjQL z1qeSC(hjt~U(FJ4N$T#^D#CfleQeNCI#58Vcy|Dw0n;2#o?YW;CFurfgYlMEtk~Db zQ!y;&wHR6zL5O3fv@1NQ{`Z60f^An=E-;jgbLfQHoPQIlO^NG%Znc8kT2CFaz-rYG z0Wd!~k(Sc#Ss6Gr}X(QPo{M$J}^~ zPAT~de}wt=X~pLYNufz_9t!W1s`mc;u2>Vb&V-gzg)W&?7-m0NG^v#FB+P?MTx+(- z7aB!tij3C0kjC%oX>PV;v#sxVdNwt6kc}51KSuM2-CHD?OG<)^?IqpE#{IKoyz)7T z9vgt-=y9hAkpO3ndnlwsi|2L+Pl=D|$GZqn-I|{VVGvf^}*<+ zFev4+5YDO9L{M_I*lN{_yV0j); zEAA*;A1G>gD!8kCS>GrE;@1DhTgCok4dGW_uVY+FfdbWsH)1JT;yzH|**+m2uL(;! zvvgGLPV0`v4a2{hX!V?PF#BsU6_mV~AylTPm^0o8=@dHx(%XIb4+#nQ9cEUhbJE=y zM6@Lg4m5Gtp2CC(f5C6g3;Mjp*)%VEJM(xZ&(#$2x9ZNQRhnG^obZ_Umf1P`M%;Mk z99CGgzI=%9TWcsj{Y#cIy65Q2H_MN3MZWh2`gdMq?*sUhipLjq-;Pg07RiqJ_lTw? zogg6LUNebZr+S3er^0!bBN~*q+lAlfU8!A^X;OkG^HwYLsX5`fwOBmB_Q(-0jrDfAqD#ar56l#svV1`mKq&-p?fjh$Jtm;DMD-lq)T!t#?j3! zAY)7woRjYvp_;wieycYU)#8aFMC5m-EFbG>U60ihv?yQ0*P0lt#yTL~YBbsFANZ@v zU$7DGq0%g!@KUeNMP5wEJuH`d=nYCj{p@%YbDx)gGF*p|HwRxs6=%uA=@{w(xc!_8 z0nS`R)fCdLv0p-1WQ-Okl>+y(Hih5SWj?RdX4H#*S-zK%e}9i;`hbEk0wEZ9;N%VO zc`I;hRlY|3I2mc&FL^^~6e2iy?!mzZ>$MccE;VwNTtyu}hW7G_lY{APiT^oG+4<`0 zV&h;*vjVvA$dU;Ai)5Go1pD54q3OXEb3Rve>nCgB{5H7|0yF{O6gy?;Ze4CkuI(Zp z0yU685`DL{&QMs#TS9GdR%^A?=&pb4a6zl?(GYr^^_ts1%f_Y0KRQi`ilX|#<%KA^ zALba-*;-3aLX~8~;rr&wNO&6k-E8ka5**HDav-egN+YJX85jB%I2qg^#?Mu}Vf#+t zAsXgcv7I=n;Ecq2t0I2DRtf*ukjX&8$f4=c{3O&+(COKX0^Zq+-}&ajMU186ezRp9 zcq}-@mh#8Ou$mt@b`5W!dg^Os$>+HMf7iZM_AblfFm5_J^zSLyg71m+Wz|JR*@Cw7 zbRfNRz5_wNY%YjXRTaJ)JpRv7!yOwu7{}+-D1~8PiWJ2&^6M&?+e`+oGvP%kX2oGW zd~Rx?2Y!Kkil|9HZ@J=WmD?i50;<;lkdtyr(g=DakCX7G-m&z6sOZJ-Eq_m#clQQ`dg39BmsTD%UgkYjfi+9n@spCzle}M>G{yKH z&XWU_?8fn?p+@`V-&8ppC~`Z+<-_M#G_LlZ=_j1XG~gmg0;#F0yfq+{6x5cEW7Jwh zJHataq({80td#FNo2(J9I+cpLBOS-@?PR9Icpr;r8Os~<#`2JTH>=UL zgS)u=b4!;LZGoaxkI>;^;W@l4!)lp}Q2|S(&=Bt91NP(7;_xIrqB$tFFJ5PaXec$Y zPgj-WC=ed$Vr2YGeiSw6P@&Tux#8j{Wefk%J>>kx1B<`xZN%cm)yLT1hj0*ZL^idB^5ix~cHM?nkQ|e!|iW4~kCx+S|aJc!ny11Af zEl3<3Z%JEzJR)@6x;B|Ba;$@O7E8-vgyKD&>Ttq9xbEL+)&CNeWc$U{vGpRdS*`dAuhfC|%z7w+%>%8xM zYb$iyK;~j}V*PJ%Bgt^MLtM2u#zN#2@S#YLNpu-7Ox_0aoo3w{4!JyE2Kl0lsB^0+<_Ne$F-h z)R=YztoQGRC~rnG3CN~-yd@cebz946dwc%1Z@{vx?=?Jlr{OUe)zdldm_AhK@Fm*} zV8F!#uK-y*pf+Ky+a;*A@BF|Ed-O~6ugnm5XVio#X(JHbnqfP$8X*P2gov1(!cE&+ zgJtif$PJ<|*T&n+1q&Dg8-5yB6Rk4_0>W-5vD9fOqOFFVS-1jgW))8RQ{s@;CE}?T zG~uB*`N2a?e^J+UYsmz|d=mEafAkn5`4e{pf!x(yXC)bGG69l=$u8$eCSw`s{| zotx&p_cLjtmTnwqiZW3YVBF-~CokqqbA{wn3i;hFkRf&31}YsqjuLTrF;CWs$>}Kt zq0I6p{{_eAg9sLQlt4PZgG(lwM65;%Q*I~kBHi-Xb^+3TNcp4pn0RM|gJatD_7pbZ zfI!&h**)3_(Nv0RtAjC{g{1g(^c;|9&BReJDl4j_wn(@bKkTL@5$SPZSDHvGm}i{a zX!q&y2(TBFVY!uMnbo4tl7FdtF6o^NzWaTtQ56Vz^wte@iW zASP}!GLaD!y>AmxC-TA8w6tZP3%C=_Z@6ELKe0GkDRpIIzzAy^$a<8)bIHH4851wq z5tQ(;m_knwRiibm4>d1C7}T$ai56Bkk2+nM&CcNNhfp`lkn2|oXJX9_{NH+$3X|M9 zdP3(tyHF}o#NJEN$|?9GR?Xle-DmJMBY50EDY)h_21lU?N&vp)=-x!rD~t1@;edIO4M>ZlibX;> zP~whqQ0-pf7=lTDfxK}}OVstYA(lY>L{q1D*~lKL8F<^+pkLDsZT;tY5n}C?x>A4S z)^_8_BK&pL{jx~R`8jwkD6_t?B0`K-Tr7ToB<`Mn zfz=1O28h8RohV-DV-Cw>Pp*n(uN*Wi0UXbl0`>Zv13OmIbOfmnKc-gJWtOzsz52R@ zLK}6pbRuiPYC>3GQ5-0|HIU!2d=(0`Qx19;r6^m~>z}Wa2f*H?&D@Ue#rPDay#})> zP5~fVFXa&&%K_&7K=;zJDi-yT08*Vp;D)Z}lwp*(2{#a_gbvK7nM4PAAe=Q+`JdMr?1}0D&w!#bqV3Q zD(K^DDHWSwV;UxiZ(%!< zkKDDWEs$vgJSw*7nZ(rp<_P$~;KChlsrq=SvU?}2AbUczO*GT#T@v>luza5v6|Xu> z%$D7wr4pn9o_s-L>g(^Px)&y5k-nF7(RD@m_S2&YuD0{nSyx5`aCc+q2b=`lJzN_ZvV8QjtB6D z(bvb@!Tbzi(+kbU$}|rzVa3p;S9mMe*D7&VAuwLsFVvS7C|y4apIn{aGOql+cIEN#wwYXZmHB!)zX5-plxK7WudO5QV#58<9A>^ zgR+Y7fy`|c({P1UD^SBCv|QfU+)Xj>C|6j}TgOr};up<;+0CgP)78uA=|{Tcv7)_6 z0@(2m6eFdRhBqht=cRg8cN)_Sk?JqEU&GS-UcYKOj7c}J`yK5Kb1$nDKR1V%V!G1s zMJ{uc9<3TSfumcoV~}Y;f2a-?M0;}Z%_=knw;;ct$_3WmE2BAFD@U9cnU05=*3`H% z$Ju^-UT$N%;LO<;$)FGtK}U5+zR^a-$8DTfW0Jd6jnhf5N}c}_9}hf}G#Rl?JB;}E zv`ORRIWq*?*49y6c+4s#6B>7|KWd8)4=}Py71rF&`LK|da=ra6Rf_}5XO_KSh71go z#FwxrD$GqgB?ewpT)tp>Tuo6K*Fa>2!bzABOX>DmqHetn~MwtP`nAqmw^rM zoBWZd-UX&5^7wqf8DC;7mEWqvGctqEntNi!75>DPnm{ zGDCR<)6ilYw(VZa!AF=prwlWSY%&9nEN9Mfc}keAh*!Ykscn=Cjt1^z#D82?$Br7MWA(f%_X?>WAISVv5AHoiG?#P*|3ST7p+J>X22-jJ7mqo{ zcB=#_+KN?zit9B-3>_Va8zlvCr9-OCPq1S2Xu<&IIUFDIdJV}?3q|`qz3R*?ggSG& z)B_bS5iWoSslE5pb2=3Yds#t$99G3akh1na7(1sRP1`j~XQgf1ww;x>ZQHhOTa~tL z+qP|6Q$5iUd;c-JC;Id|UJ>8(UiX67i!vHMh6v3o7C*1;UI6-Ta>apZ5ZV~j;-GR! z(>vE}{`YZrnvmIpsZ=dN#R19s5C)`;fTm7&YHH@wd-|DD^=}KgZ!P<4uSPE)^c&&? zF|@&|4ab>+pF3CVUY{6x4(%B5WHnafe) z^67Wdn&f^GtErk?eS4mV=iQZ-b7Z9h&`WcfvjYYB)g{gi8*iN${C9szkX3VDIV?x6 zYICGi?-tNDwzpsb1+vU(Sb6&O-{me8LYR0qmrN{v6j)Ot{gg7lTj#kF5YS@OlPfHM zpz%^S5iULgBv<6ptnH4}xM!IQkF}934CCzW>`v=Y-ODN^Sfp6I{ohgLjM5{hm#5lL ziYMJuTXnuU^npCtcbqusIy0Bn(@^1i&l)w(U2FY-&a-dFg$lyTS5iodAG%FHX>VE` zBS91BQU8<)gsFm7O}DrALb11@h^wJy0W)cDBcx}d13k#iwd0($_Bk84F3BWqh9VUe zOG#4e%y;TqfiF4R?ozHXb;C;ChkO1eX_jfgf1c3a4d^dR|2)vCW_yxopTq5?)vBNz zNFb4}LwFi1sgk$CkG}DEulCLu3(=cOTenjAu7prUq(qJOh`*w8|fQ3bk0Rz9V zgf61($QW%xZqAKVy!n~F-ap{t(?mK%fe-}04QK6`;=URXD!rC(=hJF$NRg%kS}xr> zDwF)fLXk|-?|Av7H}LW{w47g?~AP*j6eT zX;fJ4YhWlMsQ;R#^9NrIl-6h-4xdPOok70K+eZ62iy10p>uIV0HOI_ry(;+o$3&BF zVRx#Q+ZIbObXRR}4mj7aO~gD4z?HvR=`#U@8zs+4ZH`k z{8{~57-nD_$p)_c47->*>vQ{q)aTu7@M>pdO=v1c1@zWsEPDO7_krQF{mCayePRz* zHhriSARyi`9EfokVc=h1D*plt)Iuyw4=;RF=U}=B0a$bmw~xnun$$i*J6~CqXKTO- z^v|zCPw9@zBn9pfG+C8I2u~d9DUDSTQ>c9VTCa0Cyyw_$Z-cH2X9@TyC z)keBll7$c-F+Y)}wjre&Ys{6OI};>)LnUbl@3K2?;fY;LN1u~CP~ycV5!A^G?928y zyzV)}D06s}6R#4}m!%v(KG?C}d>c{pZpBFi^;xntC))mm^S0rTVurt<{A!qKTEkm= zA6xbdV?5r-^PbZ{dFf=`BuP&0g2DZA8TO)UPV08#^}%u-|GT6&)7e={-gr z4-zV%v^_>QGy3zur+2r3b@0Pi>nOyT1`cWSpuEW{m^Ig!W`xaj3MG(xrEk)jz65*$ z&H;o@wYK(sRWW$uSFRu88}cOG{@J+x!x#IBt!oT252asrs_}Qvi+aP;THu*3*2#ks z?>zix$~gqW`-nzCF=W!HO&S$~DfSdvaOdLw1l0D^qqm`FYwMjcRJ6VT;5nu@N!1-D zd+)~`(C}S{fAlt;_G+G)i~;KY7&kqdw^gKdcuo06@r|(MT6YUBQR)$;n(nR=@0jZk zV8(hU2By$)P~~}TcNiL(=1~3YPy_MTHM|1_hLQQEwgV?NdH*#x2-DK19(+d!YjVPY zAT6mAFFMRubFaP!ZiV-3;66pYyqh02xFfpKBb{b-czf=)v#}hJ@hCMNrWqM_Mdja@ zJ(k@{qz}3F#H*(6#!5=2^57xsjUPUR26^|fU0{{7oByoY*eWNildZ3iUwgmN$-#>A z;H2wK=hN2%mPUa;Whna^GJW9~jW~fupW1XBP0(uD>Y6IcD953jEA0dX;+z12i{H+9 z!uaoK0Gj!UR#F2c`a$=y3l_DlP~_nvn_P9n;MZQ#akI%hxV>oO^GYq(x z`k+HlH9@qpyiJ^II*_Vxb}9M>Kzle0`l{jX2lr6Z06b4@d-Bps3~)*ov-ql0q)6X% z-g;jF3WFHJZFDRiMH3cFz@Vb$d&tphaco3ZTI$Oh7^KyxH_Qtn^d>gh2}c8|gz69o z(T}hhcFvIoP!$5njCk$d?^PtTuZn`8HBk|VNSGF!`ucadZ;syFfDlJUzME>SZ2=W} zXbWkn)l~@n2Ckjo;OzYQ$w0QxUFk89hUx2GF!ibJGc0sFUJTYLw!~B`ndK{DnWN?N6h>7a5-RA}CDLUo@el(p%x#J_06@-E^`o@-^suaZW^sw>qQ-`4)-k!b??e zc&l#jGmZLtW{hnpX)VIaddP1G8n=#T<)fsV+t~pZx$gFGA1N);LwC*$tEuT;V8)~j ziAUxn;PR)oC~uGX6WHxh_iKwF{HPsM>1&<;M!m}J&E^afU2|E<_=smyx)ovlKGGhQ zYfHHWX3O~27O&l@FG8=#>DNYE%d7oDNDr$Q6p03v>0o7>An0ya%hJ=koZ4q~~# zu-yaVdR-0&>=@pLO-j?q#<8kNrhwDmsCG0Yx_;4hT(9d5=HCZT-mh0L-ir><(dbRB zTe9GiEwa~pyzfLH1P0Rmbqatm7^*VSoIwH4%<(N9hws9S1#29?yhW;G(Fi(&?fVr@>{EiX(;7d1nUWq%(^C*Qa?s0(DRXH z!$TFRmwD$9tmL1q?q|Y?o>ju+!bKCJ&X+eMkX&|76ZsvatQmUt)j(Y2k5<$Nt@_=- zT8{Td%7LCx3m&W$?e6;;(C3IbeZQq}a4wZ-Kx;$96{{92KFt0X2+CHzN>dpQUf-i^ zP(p_z4ro+n-}FS^%$p95DXj;aKLeoiFbbMmM06yIMJ55imeRR%*UX=%7le~&anAC` z@54MW=@S?Hp!W8)0)*nC?RN$POl5r0Ta4jA|zK zp6*uGoVaF-*s^;6O7b?h5PfS{S(HTBu@a3x`DPu363ZEPHxr64f4g;}2`lkks63_& z^p&vpi;dANYCO;w$8@3eZ*(sFBzKp}9x_|ni6>{fTal(~^y;r78Y9)k!o zc!8=G@&_n4vP+KmceP;A^Jp0nUo(eR%%~Sbb8fyVV_C+MTddPDSpkfnISDDH>W_&T zr10-A`aC3PZnPExe)`c)WkBpR>+IOt!s!rsagoA06)O~AcK6z{X{XDNJqfQCYkF%^ z4NKWiP+=TKrHG*$?iDfK@-?->T;jpxy$}dJ;#O1v&JgXw-LlI@BAjznXZ?@Ll z2PcHDk?IX_l}|nNjO>-9M7OG%Av;6Ovy|}= zbFD~)w+Je5l}i}0>uwFbLwoqr{i(N{lbsC~zG^;p8m(TbZzZkgq2z{TMv%`zMfM0o z0hkFR7GA>@pgTfGk!LVI#L8-mCAGEF_R2rvi>q^CzqIoN+`ZDlu%Gd_4S^KlcY~tE z*=sR!fC1A%Cq!TH9T*vKqnlw#bxiUWVE1<1-9DP;36@Xmb)iDvDEZ5INvf4Qv&1Gt zgxR_1itPO9Io(r?Ao&L*7O;6}Vf-7E=~k9ti0B=>j+sT&E1gP}{JTa{O4d-LP}ammD;=-m^ZKDlUr1gIy&}5%MZ++CubPNAnu(nCWRjgsg@BT>K+Tft zQ9m>rYv}RrY7WEgXn7utc_{jP-S_$g<-5{Zk8e=I2THBc2FNaZt$ZxXm_dO5C< z?rXQlp&?6!1$#>#jamprcZ#GAXO6CZj3wGSmnmf4$lHyVRXWWd#FgryvdmPYn_46| zo%PpK%1-9R<-&akKfNEsYOP?5Jdv_*)ufD!h0GwpO?F#sjosd62DMaoD4Hc?Uofs) zVB6KU81HG;Mz0qaTQ--ZUM&Y#$i$2+izeq*?U!VYIOn?n zDxi4pdvFsSR&wtmSrdisD`xB4-a0PnTosSEL7bN$v4{r}eT@xGK}yBbkC(Wuk)5un zozu(>A{f=u2<{IG?`(ouK;C`jot)Q}=)-_LS9&pae&`{LDNP1)T!xI;3@g|Z?jF@A z0_6O~K)o}xYdz?Y?4F06<&7g)A!(X2!!}$YOD2H*1POGx%rbucMs z6$b}WJp!*$q+L$9(!E%d54&Y}$h2+m zRBCQZj8;&$uN#18aED=AClS(k6+H~7H`OEcg?~F#vhgMAPR#3pothO;^ z*igG;2}u5^@MA%cDfTD(sKG1$ab4ZHGhtcg8&wwmu-5Ss^m~>#*AtN^ME*&InROH7 zHc*NK7^#Yzl2&QO{l;Y|{M$KE;z_)H&)JUWnx=>FQET}5_2TE6H{)bO1E$0qieo8J zoC(^6F=^xzQH&g8SM6`8sxAHSejKgL!UhF8ZGoIr@wWx*q1xMH(QVX*zt!{_m$s$C zsE$}c)irnH&);1_UZN<3 zPbFmopvpJ<;|FIPw6vSbggxeY{MnbrvJ(31TCtRv*zTr&hK_OsqD{rq0yS7@wb~jj zPC3lcI{$A$Zn8ua&CLMPge^fN-KePZsP^q@M3i1P?)mZU88-xs8mjeB}*eM4Z&z~7ko4U^` zG9%b4qPOYbdh9;}x302sG37N)%B91nxOlF@=lVf9NrMPD)U}bjc(jUVlfrL7Q{q9b zat-fR~Okh$*J>K?SLoN)c@(!NI1 zJ08AZofg;TlMq*7$5gckQh+Pz1|g(8t#)%k0^6PQi>Q#!frlErDF6CjpB z5C1bR`?oHf|2`%!Uv-AgG#_LYxY%vW)FTIeI>PHhp%q{Twr7bRAD^!O8!lVd(&Az= zOF7M}4CFP~vMyoft5Fqd~>Fs2L>t%qQtmn?|q$R_(0&j-|+pG zdvJA}zwrO;kS#AbxLB>X9`IfYS)*APEjORTjGKB8vr;)4U1o}(E1>S}|Okbcwg zf5h~~1Ot2zNEX#@`lA5oQ}g0Bx%-8hgn0DLnxxKf1(!r)FtuTTEv%jLTRMo|HTNIp zJ22Xb`FIcfb&W2hVlKiqZ*MTRk-rdyt!Q^Z*(U)uOmUO*LeQ-Lus*ROAc&AwiDfkM zB$=~9)8R>=D-jYN*2YHXe# zj{r}>D? z#6(_MkLz~Eec5h!JC)d(7ojNaRapH$2}v+*;Cfp{jvNgz)4nDfeo2IY^wC$?nH#f= zE-C2t0HG|c@^oM;AClDhLFrxDEAuP7@|ER1l%BPnngPVf5|h+0U3d{{rO+cP+}2lQ z#`$XT7Ifb?)lDDFY;0&YNVa3di9YhC4s{c1ayU=7_k2`H7*)GWeEu`hRvDKHv3NLR zm%5~fE+cVy3yoV`$T5vtaW06Y%ojnB0#WlKkBV3o*y-1tJ`EokaP}L-^?mGlv>u^9 zk{V=amA5+=Y*(fb_KxFN4@eWam9)xE1v00Olh*XmFDQBjG*5LsG2<>oPeRF-ZLFX@ zVSyee%h*nm{(FXXwmM5(fi2n~`x5#9Ic8MG-kHA$$f84WhrT{Dm!Qtp-VYY%4+eXu z`~=`P9D1M$`24}@_lpg$p}Zr75uk9{Tm~eQrudMS8oge6sA&1f{aK;54Od>JsN%wcq-NFqg?h+~>^o*I%1EPgaPaFq+{9htZg4{U8s&Z? z4{J?-y#5(-l7{vENrzmoyv(p2&=t&s0Uay9B@Ab|=MGn0QpH2-O<4CuaF5i<7M|Qk zG>f2ArALElQHzJ zejWh|KuB1|cA|ysQ)*0}UTtR(vPEx-1`fGSqRC7X6 zQ@{Ka`+S10t0C@ zUN*yCdZ7UGtwAYm9_t3Q!zRqVWl?mgG=o2V$S!^7PHI%Yv!eAy@_2?i$hx8dc`7w! z|Mr=KY0?H@|Hk&@e!CBPMv!~TSwH_K+POkx zc`U-GNvANCg@u|q6J&9MCr!{ab-`aTq9`fmp$kmI+ea?8=Gh9xIGx1}5VDGl%Hjz& z%xs4aA(Pry?_Vt5DRbKx*Kr!f5f;|%X_ywY;5KDHI-Ts!Z`xo#m1T)-JpyBkP(B^< z=a0Z|{=)dUysHLo{op}QKly>4IqG5LYYRaC%R_ng&uKs2_u%u}Tp#6|XMC93G|1W9 z^@!RDw-*^CtP6+lCi
`NaxJj@Okjyv?*k9~Z3NdS=({rNIf!&5y0WeI87B|6swatn+XN zR2z0FMG)Ss0RXC-rT4O-w4$^XmBGKjc3Q}Bj{6nGdQ(7E z-PGncnSvgdoYOvh4HQUJ_B!A6Jg4ztR|D{x#eX372_Gk!A&i}Lz!qzXHG084vA-xW z=p#g^OGC)Bj>NnfliEU22 z`?eXN&>7TD$9GX2bHrf0LQD9irAS*IoDm9Jy-#gSewl{Euovxr=ly#dofxL;vs@SZ zWN5cqB6@)emXu{23ePn?1{TpLI9GPVwKQ*l;| z-Nt%NI=c@t8Oy<)nRWpM)(=VMyf%Th!u!5aa`*dGLWuP-nT+>g&n!PqzR~L7F%Y8I zOonU`g88%*lS$ZtJwyhbYCEDvu=Y6U^Xh3A#4B+nr8Z+uhJQDKh-)IX_%J7L)Zdd* zXSZOt!dcZ;i20cF|L9x$ z&3o*y3@-39L@m%!@>*DZ)#11u>X1eu=E7RDxC|sZoMTmE1Nh)42XcE@(xxNe$8)$1 zBC)>Qje+{!Ufg3D?ca(PP9NXt{!Q@QiUEch>e=^T%-xUeNIrZYC}_4?6BH4_{w10)mOk8SS?1au8t(E(@%dN-FJ2t<-JJ$M`? z2Q46D^M{`*NuPaV;`DpknP;sW*O^6;N!s83#U2X_v}f@gMDe_HgqCzx?MbPMFYY+n zy?Y(~x4zAp&PNxoldw-843u`KD!wypJltIQlC(K!^_nEE9{?ExGOD2wS{VsilyG^5 zMVdB+1Pe3m;oTy=Ux`mT1Rrvf#MKL&8?ws;EmK0WO|9rmXJW)20rqME8@(NsZHUev z(2w+HB|vnSvv1ZaT_hYY%kYz`(t@R6qt&0Y8dPn>qg*tcUMa0gaWG1TkMl``TSjgmMUd)B3`j+d(GXe__bEZJvGS@{un(;ATzWq>}ZOrQQ>^kb&>h;=Ry z&$(*a;~2P|1Rv!j2?TuMA8G{!(?O(O%;|HbeFsyjy^W}1(V4nCN;Nd9gSA2MlNPo$ z+8Vrq;`Ucbu+em9Yu`rI?*|EgsGU+>Y*6OZwpk4N3Pd+qviIFi`Z#-B1;^we%V zN+)!k(sgJvJl;_7;M!4PCMv*W9?lR*IUwKwAsWy3y zmH`TJ#<{gaHPhJ8Ye?X!g+l417?_)1W&N;ih1T}xJ;){cc@?3u)+5(Q=1sC)4+D0? zzWqU%JMIEY9;TyYLy)ghvMA}|G;Mt0$#~=IUAa4ceTmYOf+@EDjt@^mWGhaSU zRBK|K1(K}bk;TxW=1nYkB*c;AytMi4RusqIn+>8uuVR3Oj4qpIPe*}kKXE=jxOhz= z{UYT2AYGe`I79Wyyda~Q-;9*@YqK5+AQ|PbScZayv2}-|UXL|}hmpj8+4MH4=<%$z zK9fM&EEij+W2fLS+?8`Iq4o@3=C1e5ehKshs|kOKn*x?wMeEX(d@2u0;Z<8nCtYdRH~mZU8@Kld?SH91VK zKe$u4eNx!--U~~bNK|dJj)uo#!4dPPORuZuDycGxkLp-BwmSjYqz?01`jQwOWXJbD zqk13D13fKs+KwCLe4iuP*q)}VJ(2)?6`qk#b?hyCH>D~g5J{*cEu;|D6-fl%Oo58t z@n~^s6Dk_nzzX*>IyJP)7cFj-&%D9Yp3mZ0037*b*n=#S3g%_(I+c{q~sd+~#^PJb> zOILg9(+a9x&INff7g<>=jkTQ#;213=&99KGC;*_b*On$q^Q%WuEOFT|%$(~=NO<|Q zN$CR*MK0@6526Ij{}RvmiZ)fO|I9i5S3dQB@UYg#Vjg)={AqozB$P5LE0{s)O@f(0 zO0YOLr**br|7s3}rpTPIG(JU9I7kF`YcXY&h(8aU`F|%l;bl^-@{-H7 zVe;@bA<2M|LO(hw-RfQnXs7QCm)-4~_R_uTzecW_VDKTY18p1`7QWIY5;BtrL@buR zgtwBqduuAA_xYDv>%EpS+TA9baxQWHMiJ2q4i_LBq_fK6E1r7&>^s(Yn+u-c1b_Cb zi7ox0zo4VsIR!>j^S$^6Uh;U;E$M?oNva7M*8}|aU}(l9i1)o{tCLV2UEED76+@OT z$bJ91nkIM4JPMwDWoJM5=)m7?(i5?sji8_Slwc#RaZ5`+pT%HLA{yNwj}|4q%YX@f z;6P7M+Ag3*SAvJi;8#5d#C$txKYZC1Y48X4m|owvO^T<|ZWbvLGZp@$PFViUX87Mc z4C8dyp{rh=QHp*}A?#qK2adqkcH!r}z@ozND z%#T#eoRPksIF<|kK~i{t?zZENk$PO3-h2n$jal+07Lh6$@4B5Py`|@9#?D7I40WKp zW*Q^-%xf_j8F#gj#Jh`q*#7G*DoF5=3KS-WJ5s z05$8DB3d-G zaKVW%(kBIKxNNu$=E`v&8W|lFwY_ce!*4)xOc*0dJhY%-C58IRhgcW!2;Z1v^7Izd z5&K}Rqcyky!n02(Db?L>?-{)3r!hs#h@g*>Oc)KGu~>@-v&zMalX8vsMBHKFy4ZNcXgg76?i%@27jAnVAY|2sqn1}$-^fZKcDnG6^1Q)d}=h8N_WxOQfutli2UaLQ^2_wu&Lj3=@K7v zmL+Gw`Ihg034L_Ja@~BLzvOU_3bm+8R!%2KNGomHy;&oJ%CZ!MIUwC(I?+VR*aXDa4 z-X-(hpPB-Cqx}ZvaFpb}cK~ZD0yE(OG^JI9hyU(0WLETi!}Iw4=&CQdP`N>#K6{A; z{TX|#6ds?LF~yU(M_m|LB6Wqj<}#S>xV%pi7Y8bBMK|5~O3>DRwUv!MxmF06D?C2B z#3kaXG@Gz*)RlF0dc15Td=l0K;L3FUvI!EqfbSSJljYaO@pJ&&5|laYYO{oO|H?1u z+gsqn!CJX5gEe9W12{&z67(!^X$ALtHOc&0AP14PgJxF8xjA|3R(5CiCki+;#Npid zXaN+Kls5`bQ3`9=b(A5y6ex0XN!Y%Oz|mXQVk&p9T!K|zXBsd1GR;tw`BI>O7GNE& zF|4DQy~m!|aq~<~uxm%{e(iKGpP0ADDA~5j>!XhOf)~<0eb4hPi5kwaW|8maGXP-d z(hABRRX7KioH*3Vi;fZrf#jpzvhp@!qM|l+?!I#9@y1aXhkF-) zciLgs<3{M&Sii{cPMit(VH>#blLH!REtFsit)psT^)>F>_*d(B=Xi(Y^m91!K=aM2 z3#4QGvP(6e57sx!x;Nt?*Cpo%y!uY_=Qy{|!|}Q-DfPZptW!FV7DG<_hN;jfw<48P z9#~CqQ|&2^yT`Ric_;**ytk7reu3qL2;hg5_{L*rn@En#CFQMbLW>|Y@rkM=rAU@; z#V$B&aSSh5v31+I2s~Z6dEg#7q?~7r5mp1mz7P^8GUVDqQvhCTF>QDBv72n=y(Kk; zg|s>Y{4Ajpfzhp!mO?w0nU}8gnKr<@&EkAorZ)~Fde*XE>|_DjRj(3jX;oq;Hums~ zz+$nc4yl4%DLev6qUp<#gua8&w(o*MmdxCbRDj7-eSF)0Am^}<2#vx$ma^L8n4x5{ z%Za9lt4pN!pzO>b78NP;e&8QhoM;f;BJg-BuUvEJR(Is(xqeGYgE13LSM?Sd-d56{ z_3-6luI@7%3I?V?Xw{;yQ_|Jum0m%;$PrC@A6|<69j=|Wpe&s@r2)%Q$3IEXEz>n{ zx8pQGZ2KnnnR;?YT+9Q-nh&K&8<+*{pF5|P*EvK_9{u1k{hM)sa7E1H6VKT{h%>zj z2;us=tYv6URLsDWQlN)kTl4(6>Q1V5bx$m+2IAg|+^w|9j)4vVFo!eK5Z;0xJ3hxp zCNTW9_4FqKGB+9WoLlT*MBW=sT%9>7MwYp>;qnPN;>%AYetZhqu^}{~YJk|)h|r5L z>%Axv5dlh6M)&c#_C4;V1$Imc8w(hJ7Ui7V5x!a+mJMOiYfh zf=@9X @(itY^cLt_uVP#kfdKju<`bhP4x{XjZq}yP%?6Un1s#LemYKp3zK-W%B zP18+c2Q@XG9E?Dw9m?6nQq1fP50_bqS;T#Hnax7i8Chsr72^N~h#N0c9aR$NBV&P| ze^1W1?9FHWozUL`d3cPa?z&0EY2t&x(g1Z%r31&tme%d8Ir6``py1BlK*;xt);>i= z==hPRc+Sz+ZTfHonh8L9)Gc#jn61lCd~Q)e(q(AM0*gpP-;Ds3H~}ZmkfmMx^*=Xl z_{V;l^m%B)^5GA?Sk4qwysn~(O9Ik{zLn%k+ie3t#y;I7fKs-xyHxABI9P&qPhH!R z&;e3Rqmz<{gpWNt_TJNt<;vj`TO%eevVjrx;b~G}*pK*2V*cse8rJl5wF*A z;;X$wMn?U!l9ksRhc|cPz3P!k2NZlryC~1E;SVjHfO^3M*CQovp5{E>G|LofaXe zuhbVfVJyCa+&k=yYuNE-+J_U3i%DuqYbq=hcAuu4OY7E}tm(1vzJGtU3yGL@`pQYU zi348f)VqQ9|Hvc!ov>h~oXyak4h5@1VjJe5HJHTW-!AqVUyt%}zXE7Oj4uJ;t|K0f zDjE~B0csB9LLzbh#8ePFH^&*z<@)NUlJ)~pv zv>`56lYhF|%HY-zhGA8{okBvkg^vP;rh)TSB{Zx|@+%>STO}18m-I10>N$gvX*w*M zg!W}e7uo*cY;y^M7aCLay=y$ksUkvd4At>8402v$@{i)vBKDHX^!MNoS=>2M&UtEb z&U~a|n3n}a3xe)Pbt61euy`YG=sRYIQZ0ZR)bED3yAUHXD~e^t8nw@BVBK!0S-Rgh z>}!}L6$|mJ92Dd`V9l&4?aYx~LS!U54$;Gq&O>rZd41Ggu8ZaDu7SD%;H-}C&a(a1 zqkrFGi-Ev;NRqz>^85Qml)1I=SYC@C8>r{NUo0hYDY)qK{B2&G^p+2}B0N?BGnZDb zGU;t2pP7V6oXk0dJQ z?I8K+Y|Zs0I%8#o33a8PxQ^=Nv#w}gs!uxcRwO3#F>oLIGSbUrz$ycgei&&0mPb>w zm$6XRn0kKO95iusFp3Hw`fwpvHav!}M8+X#{|p2XsRKO`x%1Rmx@Hhwe#pv0?Aw>7 zwV&hW_n;Q5=Xt3{$Vz0LfkBdCoCQW*q@nki;&LXoQuvJt7J<_(wa1EpiuT6C-zUug z!DW_hYAJz49?CjWpE<>Zh@$i-!HwyQ8qjVauxmNu^a?1!URV4#J}gcx9nT!Sgp3f` zg>--Cfd_Xp>+QgEeo4O3XF>d1jnZ!WE@I%|WaW?!!Kk7M`j+}S>l*>r*rpN@j}1gW zBvBn0PE^K=|LKJ1y6J=jlJ9#zW0B>cnV5&O=j4v|Srd&rKI{68#3gB-HHUU}La1XV zdghCl#u~EsTe+lJTErqx))aEBmWWP^s)gmlvOJm`&D!58sb?%TvQCqvRQ&X6o{047 zCs8#lPUDo&CYV=5pUoi+Wk8mX3S*h?AIA!9w~dXobAYZdN{z#*J7kF85^@>ePQQ9P zS|I>1%v;vQc1xU;A2tz=4GWxsIkWGbkkDIae%&94oV6-7c3Sso!j>0Z@U*^YlcSw| z=atHV>6L;Ew%nZgklsjElT2fm$4~3%2zI7!2W`NxMN-8ryGE%H?C|s){Z44Iy|^wJ z{ZPol^b?A5q|H8n%pOY^EG+cGLgTc5>&Ym%HB=T`y@a|&0;P^~y%=hq--7!Yr~Nnp z9I3@|@uA=RL^11qM$yzy-rb>wgCpNt z0@wwK23~*l*WhYp$XGf>!VFSS1j4{tR|d$9Qx>FGylkh7=Sgxx9%jwde8e#s>bpK& zZEH3*uB;|-OY}B!>2v4%lzB(S0LtliZNwZWO4o`+_~SqAn!oe z=rx3ws^LghFI$dP+nLG7+uM(P3hP9uid5T;A$1G2e6>+gLq5h)REvgob3}q!;x%*| zV{%suD8Mu;y_zu>0^g*CVm=5WaebWt^b`szh2J9?zOAaN<=$f)=ofRUer(fln$#v! zn#b@XY1a}vcWY!bCk8JC4Xaz1wK44;h6=wX9TP3Qd(WD2U@M)R@dAgBg_{DWU%dxi zFzvSqm*NTFvR3L02mu#Muwd95;(7Z{glN|vpy&(?0STOyL4lsoQ+1#N_82^zo(O@ zNRU#X5?3o|_EgvALkL%(9>Aad_-13Y&2!K#u5GM%(Fp-W4iI13{;@y9odIJc(dm*C zNSx)p1*U#HL}Y*W$z z8zxzLJ?_`-Uu~-^pn*brXD5>?(?LvD&3ueCx6k1JCZru2C0IM73i^%9(?|CyTn+rHiZ(rxy=^wh(1 zRHvJuA7^j=8I)&8O1_1eh!dwJBqN{f$H;!A=eh1h!FVznmaZ z{v;(Qz~p4#FZr!mgtwHZGXSl_8fk$wx|OJaW0V#B-7+q5^uP6FhZh-cz(#=A^!>xpbOa zrum&#SwWM}*_A=MTdl{;bzH%3s0JG*E9io=heiudfLhIM<>?ndthJI*TKv^zHmB=f zhB^VwX7J-bLaQuy^?vb%Fb$%Kv&P|}ow{S~NN18CPuNn`D-Ux5+LrBs_+v~$9o6(1 ziX4X$Bd2B1*zjugl!M30ESl2z2l3`}-v+K=SzHOJbtFmLk1ceh6O5xn! zxdK(g{W-74nChn-M^k}0EVI$+K=ln8fm+r% zDh)%nRq*rwSttJ%hx~84W*53H^cNk?QqtrIX=x1#V+cnv_lkR6%Di!2=LK_FlKu;? zO-^;7zbKfyX*oDS{hs^v9f>oA;uqQOR!fLOG!?eD&2TC*^T*s@S5u2($Qu{6Z9elK ze2wM5MEXy@_HX95|Br0{!Pg>XIm}<-PK{GpC%|wsSgVxfR4#?6-bJJq%W!_lqiv&` zj0W+tx+c1TAGw9{K^71^nw72aF(Yd~jsuAl7q(%7bJP!e`Ow*7yb-_e%HuhCL5tevY ze#KnTEHUsQYMv)h6T$oxps&Lc^c(SPkTN^K<_WCfXv`(&r<|6Q%s$x(!i=TUnCx-d z*yCIi*P19i0NBkoMU}4L{DMH-Yx&NIbVJuxl7y;RjX>}F{K%+OE&S+GRoDcY4dI1i z*E~7aC-mAT^cB!6H+MLO0YOuJd5n)MS|KZp-{4gmQF}0Hg*$f64C=+zWhMD0Qk^f% zla|x_n`=frB-i6S{8_M&Nt3!`3W?1pdVRf4KZ=^cM1Yc)8wi~Sg`^sy@LSVMiH}>& zz1qy)HMjQ6L3Nx9K+0ku=+I9m_8&JSt>isiHA$r)tbwgUQ%}UMFey_$*=ipv46r1L zk%W%c`LSqi@=QYuFy}JRyc)`2K*Co+U7U>SvrhUO?1vUq@)0jXJo&zgrTRL`$%q@X z*skd7%>VEe0AB}(SgMJ*7dbrVkH4YR)^S+g{yxJci!z1@)tX3<386zaAYm^CySex4bWDo+s0>c)x65TK}B})*XvA#7|oJB~%&E1%Qu5f-JUu zSoKaMNH006$9(N><3P_njponwch=!74Cv5E55N`N1>Jo8iscUlvLBCTZA)`JUS3d< zN8Y`ZSAm02JAb9#PJ>K>t4KnUy80RO<6OPG30__Bw~CSA3qJ^LeGs1U>e~{0_6U~; zUQiuDCW21e#jN51gEPvJle60`u@W~bWspt(mtD_E&Aw(&M> z<75y>rNv5?sS$Gw|Haa*FwZwkJP2Jimb9@GH8i0V{v~T3EeG`cDpvUfzJ&UFZ&GtW(JL(K5 zgN%NqX|=#MxQ-0!7{|no3o7Ie?|)HgAL;!t+7=CX!gQ12(eK{0u!z|o0Ls{66cIlQ zAMOfx(sFsh3M+5PZ+dbFrPH53-;8E)%QvDVzmNkGR)h`ZePSgUTIW%2y$=unw&w#r zXr;tdCmenwnkPT;oW`yRTsH1Pth$>Sz?%*ob3kFY1f%sm{5`$dxNrqtoKlDpf!=zj zzKMcyfpArlHCcJMMwD|xC@!z2j%OIq7I1$;^Q`FwqdR49y2`lno1ojxhBG1_|LZc%Wsg$TRm&Kc2!<(lP`v&L0VgfWU?BEv1Nm# zUtN30Xgp)S+a zd7d(|cJj<@My#%`>AJRva68uiXoO~}OV6yb%#yySn%KCcuWnW0xN))>%1-hKJ0&zq zZrxM$U$T9t^woRFyaetCVa<}EyS-~l6O*8%1gzA0C}_8_hk^X~ zCq#Q)S^v>$`gw661}m28NUeats*khQ7Z6gtNDtN>8>q%hz`lrxwBO69adDR9JO4@- zP19korLiwSm{_0jm!4hMjo_(?))HE^z(_!;R-D=lHQ|G$9Uw9XeIfbXH!U*p_jD1{ zB})}_ctvu^)8|v?E*y6o!Q7G(&X(>v>{16ZO(xeiI2gpH*+znMe3!O=0%rV(z#zO| z5S$%fh584)%g#r8SCa^rkk>o!JPG}l5GX!m=@|EXPIAAz3We%$B|e#AsZi&0-@P@I)84GgwsK zZK(D^Q6Ft5c)3GQfjXK`aS#>~fzMp@Tz+2eNHgO2x1N0B)F#GtmOhy3^ti3WB*qzP z#$t@xF;zk5FfCG;0Ns-0(k;udJQ^hO%C`%=T`DG=j63T2Txi!88UH7Fx!V*oxXR~q zO~*8gv`A!-S@XzwMX$;UlM12a=)7_~Cx!fV)j<9>%^nFM`wR7O~#vHJ9X>OgpL*~a~Du+$TtybLc%GuGyx6!#dU=o8oPCIqPN{X?`r9J~`* zo)Gsdj9H$@duzO7UyEJ}dY$ag;a~g_Lp-Tkc)yPJ6$GM`6Z>fk6Vtv% ziELO66HtdMZLE#QogP5*b{xIOI&$G~gJD7hFVk9EBv?q*kv9ZRw$lv{fQpXu7R#EnK1$bp=NHq^`^z+Y#IuaVjg1XkG;4jzY zxP3k+-qIkIGZ!_Xkg$BX-T)wk&n0spT-fn87HpGWz~RgDP9{GwH7j3pgdG!t`Z|Xf z`#>4jtw&`_Rny-OOhq~`#I;G=4d(t4D2;EUv^>p#f813_p)_;0zWrQ^p&7u+yv zDS`ljv)E8lrmk`vUApagB<*d5$`8gV}Y3> zN~Z%O65p-<1z~bQ3upODSe26hRwhaxwx=rZJtjjt$0=fDDA1_A$;0Q2zm4iN(C8hF zh2Y|gc&K>r7?8&J;*9iu*JoH=BpMohfy;QkOD9*VGMObMr|16dha%@sx>j(eeQZbB zg>U{_4IQr#=`F0?e`1&`O^PSX2#icN_7ZOR!lwm+o}r0P8MPAJY&z^M*cs8opYPpi zlmpVw&Yy$aPR8p~JuYw6(GVZ5vJ(H-Y#)D4g7g`$$G!2c!a%FNI>s`c?UJTAADQMz z#dD(Y`MI*&EO-xU_u#zWy zQK=U%!0ws=2C1vI3wJz`3NHq5nn%RMQf3<2TOC2Zv!v3&AZd{@x%8Z-^*wi>sQ_8< zA&~<>e$hpA$hZNpIz<<0S-D`vCaZ0#eYw3f%%-F++3Zj_Pt(3<5OC568``wX2vWPS zU%x%4fY)UC_nlJrVw|5r^TBRbq1G)%;aIAzRZ{n?o~Q>x>^HKHP}mxL4QFLI*JuNV z#L=491jcjL8-BxTGd}ORU&&z8Tj=sH!d_&mBk6Exaqh3cEReAd{1Hgd)L+e8C#>Y#J=T|0aIUpaxrefo1W z4hIRzmvz}!ck1FN9xia#B+%Gsn1a#ZdIs!R$0VPlM?_GW9@>$~>KZaXQTuIs#B?R^>GiTx6B$qJ^?&9j z|KB=+{xf9tZv(aYKcg@IBwWiBoNTEd7HZWfuDHu;%vMnU%0+j1gB$5v@i(K;pE@pw zgXqL}T)k<--&+4bO_-i}3Q}PgzdxpS=&F`}b>=4Tg=yJa)3Etsyq>tOc1xpPaRkBq zO`~2z2x#Y z>J0{-QSBC+XvBq-+;FD(0FW2urh!3rNxvnswhu4@Dt_CUr}NV6{da5>>;^Iq$xx66 zS)<_;Xs<@fubw;Q_s+jDRM_nY74GS|0uibp>>mP0lw%~658;{T zTl4!~8nmw(pzT&2!J&|mm^(Ww@`7X)lNsYLc90ZayB<7(Gm$SkU#ym{!L_8(4Kw&2 zhGn5-WCFQcdN1*6-AB__>(bda{^vRQ5BubQ@ijoc{q}%|V27rN)(6ohIKpZJva8OA zGUOO{gF`Vp-jDx<*M56&;4L%Oz}4>H zv4O5zP#Q(b7vZJ%*^&ksQIX=KsPK(4+y7(-@POPiVsN@Fm*8KgpPgVMN)&I55Kn#xqjt`%BDA&S)=&_`5619y`Jid^lD%(O;GN}#G~ zSyk;;h%g5#vsViy4x*L90L%b@o=;)$ej$ShVnDe&s^o?Pbc!;;4hMGgVf3F?rLr zDNIEB;?Elou_i+qY$nt2ycG5a4rw4ZwNAltx09;xJJFo!Sk_@7vfYS|U;CM7qN)+& zKhtMZB0W75B`kR1jWqC^eVbjQDcjICaLRrTYed;0A@QQ zN<(y@J>e8k-7JYT{e=hT@Iv&6%v$^mc&q(TmyQo9*Y2hw2DsqN2zpFBYhcr|hnI@p zpbKB|&cyNX_(DRfyl2)zSS?lA?)3&+{5Tm4cb}Ya249lAC#mVqiHljso+s@P)rh{a zZX%ZRsJF*+qU`hO0r@5uo!wLzl{t-2Ns2x#^ohYa7hTXBb%J7_QYGuBThIQYez!p^ zk^f?Xr zVE>gg(foi& zJ76;QvVfA#%VstKRFA&QHotCON6}*T1Y6Vj?Xp8QjDSf2Z4QRjz;T7W9$!=0w$l z5m_p#NH>D3Wl^xISKt|#XKh!V75?Ly>4Xq_?sC6owc2QFa!4djKikTa;r^d<2e4a! zX{{$I@hO0j&Q6XmL7zyfx^i#c@~0oEJ4**>Cji|Y4qHk1&=*Acr;7S+Rcc?^DH8*b zx#Ga>kBb=YOhD}<#q9=PNgbjC0Aix0z%A{>S5%svfd-`rIJu47F@tARnXb4^4W)mW zseKxV(QpE}PF3)nVtp&{ZKus==?L2)=U zn!)Zv+pzF)r7XU%Y3gk?`ubWi>+Pa^OdpA$%nF%Pgq{mzEWUG7Y`yx+7yI9_vsl9i zo8&n9$%#nj)EFA$d%y$kICuFj+@y*KK!M=hz7puIVsRE@XRY&d@SyZXMB9emi79;W zby(#q6i39}O|xafUBdzd4@48F^&%8)m1k*!`k9yO*7>kO5(JFso8vLx0RV;wtO%_F zC#II{$CnYx=+l+-vzx%~At+a7Sk)8i5cx(3ABHe{GoMdb`cRu*AjQKwlw{_E90clN zDrI$*r=d2Jt-Vb)q_N?80v<`^@941keVRF$NQxWf@`J1(7>U}U9$K}vf{CX&ol^`S z)p+%zmK`Cd)7wsnWf96UL>Wf6n@Zlp*yCCGAjF(9$bqMkaQM6cpotx{c)T)-)RKHb zM5Xc7eV9vgcx=x*+s{c&YzO1)SzyN0R%dp%lp2cpIVMahHCqWGukhogA`rrJje%IE z(_mJd?dvaY_2=5-A)`3|KCI9WHWICFICqjxAiU>Dnhpe9!H5lq!3*OSL^a;F^oAv( z>*jD=DwhXL`hhkZ7gQv9e1kx+;kf60E^@~=tUjnuN$6sQl33^ zxm;;K(4r$Daeb;H9mTdrBLJ$Dj#kitIU8w*=$;8 zdQ0?UlIGN1ZH;!@xr%+0HbX8hZpKGXx9HVc_-{*k6MiXFYw=T(BXSob7EGw@_O5wA z#~HRkIcpKR9nqQswI=I0w&UA1?(1w&tlVYbrCJZBq2y?_Y_=$jZzzBH)Ll+CAn~hkbGiZs+KAv{(S6b60*@cZ0L!`Wje(WoSjn)$7m8&d;!jwORi15f6zx zGa0uutv!mc(yh|}%|DQ}&{vDzlPDW?!*IuMI)}s6i$xDJD~isE&zqx10LM>2p6S0s zeoC@7O}b(?I;xR$9H^1b^oKQ#a)xFOcH7z;Ilb-l_#2gbRchc;JINN)JDR%@05bOlG@JOgf1IN~*bT>*LU6=9D48xf} zjajNO9Byzerr{$}3KbkoU7}mJXTlYJDQky;MUbK+;Fp1kk@lqR;2EfXb>dLy#UOs6 zsYi(SuqnlTyndrrD|M&88TDAua$sAAYsxSCoh)V%lUlEFEc#e+y#8i)EPV z9zU_Fv;?Rt44iSFZ2#@rDp=+I^Y4VyO1Cv1!96!gm`d4?`axvt$Kq(}K4r~^Y0nZs!p&m5ID9y|W z`Ep$*f}yCi#C@(}$HHq$soF-v434`}(7>Pi#@yKS`34>C_!54W5-n@qRg|WAr3-TS zo8&Nm6I>+xVSyvbp4Y-Ah5{dUDyh`K)v$H7)eAbPQBsYI{EGH+D^5Int4V00GW>b* z#820ggEab5z5H}q*?@QMIPNJy?_P*7Se<{%l1tR{Z z{v!K2_7;%S=_z$?NUgjtMiDXFNuiV$Bf1$itbokzE|znr0sb67QL-3pQEWw~MqCEM z`tGesHO%Nd9DPmuJ$kejGbuI>$MlOkB0H1F#t>3zAAhuZXjkGB=wM8Opt59S{)U|4 zbm#{#{^ev(zo!ocBgJ#w>NZAJoU@0F6}@Z8?x5GUacu^@Ruq{SqY`1sDEwbBhd13dx$)f2(#KkkQi+~JzG$yVq}M7i2R6_W3D_$ z&1q0~Zz|Peth0%DfF&&{cv%w0q0(({`{o*_F7h_o2@zkWWrH1?-m`3W6rG)Q(Xbb;~69>6sx&D#a z!AVH}ZkRP4=FKl}l7?RFsL71v8o$7tsLPR`>(~A#;3H(NhD(q@?2M2Q+993AQZ*nc z2xy0H6C63}<@uRHv=@}rb{Y~5Vbvzd1{$)yB~=O;sjBy~(tZW61j7j1W4PNcIr?d% zfq$5*26GHdY0@mp>80>;CJay>bY{^=B5+!M8S=#O}Wd;KpK>D9L4s;oN>tt>I3<;%x|pY zG(a$-$$V4Vg!Vc7PGENJ{S%18i&E}_PYW=YgFPolsUC+ub9tS8(lj`Ag~2vT0=Mk7!IEHDFpZ;mfZu^j>+NF3q04{3!Dt$UqB*`jvsFb z^jINs*4dX~(;qm|LRQ{^q80KhP&g`jRhYhu!cKAIz6`@jA6^#lpW*H zd_M|r8`K4?d$fr3ZGcJYSh;NroCx@Pu9aktg;a0Xeg(*CS;OAwL2 z#f%CK%?p>^P@+*U0i87ghaWEoN(QdRH85Im;X9CzKFo%>NErbq@f411)8~qNaxK{E zl2W)a!5$<_U;PcEn6c3k#bRsh#mlep;9;R=C6=>(+~Wao_|Q$#VvmrLHJMNsfcY?H zU-F5Mos*bBMVy!n*O?8T+OGP;OYfQ}J9+u2cT5{mAWdiB>Y4A$dx?qs0sAg&cv5Y#K8--%J(M0m#W{>xBT%lyj)r_)hV2vc8ZVJhRDR}`aPzD=p;S@Ho z6GBC`Ixtm7Xlk6QW{`ejQ86b~YEp=`%H`2W6PD~{^wEz%syJgCi5VE1fKN7ALv=Y0 z9KjS~?*ctp8zfTUKY|hO0PNvb6@KM0hU%Gi?Vuy2x1tf-SL?A7VD5E&SSh6SWC-XT zth4}gDGa>+>bR%GSL6jtC?W(9- zZGXe^?1n29OUhX7=R?bA!}dt)$3bE!7TM-HPQBeHx^ESN_K(!^B{u7QH3^z=Abl?J z2He_h&ANo~X-z6|x3d5OaEM_@8)9~L`%Zx&v>%62vD!TuG>^x?%Vcg-ic(W)r&+a1 zFWJ9u(?JOf5p{1GuR=V0n6h}0UK;n+{|M1o|D!?R{{XK36Sl@QIN#TdDHSNiD=g;) zkA*wNYUYVrqfAU&R1y%20D@EnytLdNDN#+<__j0!1e32$c}VrMgTkd}u*XRk9<>tN zdr+)CEVkeUvB^8oI8r9%uvkMWT{-iaNDHie%kD3NfFOR^EC#z`Wa|S|Wwvt2^Xgz* zFgA#K5QnzxUd9g_{W(anQox97xsJvFJM2`I9mAJ4`ay=FNMFSe6FqvRY*?X@D>L!3 z%#O>tWytK6Fe3vl2ZpO$yWJpt9wUMXwla?`QeR&i<{K8F%4TWT1N8iJdyXIMITfe2d1e9Fs{OW>D3PmW`W^!?fCPur*N)HhUIBWDxQz_HR(1E=ZYJ`Be$t*A zrdw45rFGgc`>GuxQ&D5a!F|H7DrS#TXkX#+Y&}a$&9n)9iKYB@*kKUQ!2>dkkiyU` zzxCzaap|dKV8Q1Ob(Glsc`BVT_f%eTJT+W19}S7rlrLt_@8?lYsX}=h`{SllIg2|l zx`9`MWvQC#hU-$Ukd_tCEz5QwzAj<}Zn_2+rPG7%7v#;VV1L<69 zWohJDd{Cabk9qgNej-xi@soFJ%KADI>PM$IJhc9j{I{*M+*=OH%iU>N>;ej)nw!N&J?NuL6o2M0 zrO^ApZ$yOF{}fnn=KD@^a8hxk*rK3%?f$6|zUoYzva4^dC)c=<)w2a_qGv#$=3O(0 zhe^Dkh~Vy{HD0XESM)M%G0O$bA`-8vNEx>zO^~B>W0@pOO|FoA`_H#2lNJ}r75DSs z2~T5HlO9g(gaJY7q@-~6V*JzivJS##hH_M5Bgg5zAst&ci)gelZZbR$wX@&3`=&r4 z%~cWhOw&La^;VP01c|5<=}G+(_6vKs_SrEFiM2_h#0Xs{@C{6jA1ymp?KhL^V2~iK zlpad;q$%+whkB>mFXt7q$B&_gf&4{MSt5*$$q|n_gdc~eIrFVR8s9E<<#}u5eU_ON zLRUl7uD0b$O}-T%;qmnVaUN1bNwYv5QPH6?-5C3*zO0z8P zGt`-igdJQ1)Llx;OJZU^v#2=Cc_;cQx@Mae6z3ubP3=O~Sp>wJ;+vYKA*r9O^`DNm zkWocQZ;F$5etNRcRBKkd^WTUdzXk`Yaf64hzN}E*j%6#oH-k&Y4T%0=+w+xIxteHz z##vq&xZ1eCDPR$Rb0d!(6R!^Bx?W%(&&4kbpgAGW%ifP=?x#0*vmA4aeY1|Tav{G6 z-N9Txvj!2&b(aF3&!vn!D}U1xO}nsZtjwO}AgRr?OCw;=x<+i5u8*Id%oP-UjGbnA z@7@w2dMW<65`VFjda5>?s@~Ugi1V1r$G6zD?m_VFLGChY$S%NferO;~6p56ZN0&T7 z|6MhuGAOzh>uN}8=Pw{RgTw04H1q;nwC(Z*zz7H{iL3ofKZX?o&TT_oA)}3={xp5; zBbnc>iL@)(vQguqxTvD!?8AAAF)CAQ4{x|(ag;%;>GurL9ILz3!aDz8+d4C!{fk}^ zgOw0Bbkf<#6$%1n2`Oe{8LKHFYaS0w2Ct&*@x6*3;nQRwl0n2~ILUlP>xzq@0cF(O zFSDo^YgJS7_@ZfK-)5A3ar*1I5mSG!8)Tv5dh052F}V)2gD3q#O8s*`p^#OIbx@TB zz@oHrag=Gb^v%_gAz}|tQxMfHOLJr?xpPES zFTvDyp=@s1mK}~x^ZT|-C4>w*q?J{nq_?&1Y-62mCvZ6t#D>kTB2QOOIZ+_bc-ItY zW3>j&5ZCdQT8Yg4FD9T%h9Yh~9G&epR?5ypY6lCaLS^|Q^BU-02ff4-$_OZl?N7|?*Y-ZPDBT?3>%Y_unLrZ5-i*bCTo?QND#Z;^3EIH+NZN>Yy`k(N=CTisT zf_h0+W}J`NEI3J5*p=2}e^!yy0pvP0Xzy~nyfdQ#d^r&LRo?Zo-WIr~o-C~EUvJ=g zIaGmI#R}qLyLz1!C20Sl*qo2@eL7T>ZGCYa@lZej+xgL;5C!YZ=1DInPrX11BX8J3 zUnXXd(OpYHID{7j7a6!?twp`||NCt%@ga#8_T4$r!n+*WmOT%r0t!$*C*tgn4Eor+ zfrGj|7ZY+Pgj^82t-AN=YGJr~P58=`VTG|Zr*oIO=0OoD>N8FVs;G4&3;fLwg-G+& zPfp=A?-XOUR98DM3OB*Tmk|*YHZyKE5E2;h_&#}cr4x5s!s5!1&05rWMVc5YZwgDN z1ZU~4y7$&>$fi&qlRGsqE4vxQ|7Z=g%BcnbdypR7<0oz3c*kQO3knWG)3xfgl`p*b z+eXPTKVCIGv2fkcNBr1Q{zana&<4glpq-Ic<16`>5zM4iEv}Uewr)t1SL321&tAas z*ITmi%=GioY+BAKm`08~A=)%)QfS@r_4IB6C_%r1O&udu$}N>3rTDCWixi3?JRgyZ zh5mTAd{tG4G47w%?-zv2L(d%KxSx|o#M>tf3CQuEoi80j;D*kwJS2=f12Q?X=-9Js z7YosGQQ1D`h*01#)3;FaYuxg{9%4d0?*h};OJu_$d*vy(+8oO83G|dqtR&o)WE%}) z_|VsspVNl?IWmz$qKi*wkZWZHSr7j`3LNrl-jy`%lNNE63Mqw3cK~XisD7W#J=Wch z;-=>>e^T{8kgIuO(6HN5oc`mUo zWJKgGRA|EC(u815r^DQ(F#eid!s&u^Y?%_Y%Ur$fX_qYfi?Q95-NvnSyq7Ndnh77W zrRpeBlwJ~CBz6QQ7_9f*=Q8Q4@O?b!KsTkj?JYDvSY-n`splJ~FGezxTAy*0_xOEW zCQ>8?G(jXa1Yc|L9$vbEHQbvXk}nTq7(+W4q&o_{XWl-QKuq)P;DeGIRT0E0B#p}2 z+?(okW&;#QSDUaC;SB*@d|c@1oDC2gpu)F=13?loAq?vqsfHHb)=uH|Z!2oake_%g zT)T=GBhQb`nBE%P$5}8IEn!9FiG+FgX4stK7vDa{?VWs6;yVHprX1nv*e0@=QA-H) ziK+L6VB}Qh#yPf<=d*xyX%6R`H_IyWM_JU^BS@dJnDM0?e8Eor1efJGPLl$l)4EzU zG4&^_CKuG@=#--Bx^2VxdZ>veRLT0joFyR(*&eF~f*8I=c!;o}OZb4u|_cYhZmTwCdbehQtcH zZi#>Lhd0lY`b_h@kh#eNTGh;&#Xpid9(}}An;@XgYV`2ZJ=G;rnUbap{p%y~6dg8K zNvSNrG?{RmNH^l<>&+XjX3OVOk(9eh4S9)5faoHw#_(?H$`m-k3O4b0>c8oP(72Iv z*d_pT1N3FEc5y6g_DPu;aD(yIRC~@%;aQ6gZZ?qMt~>)>|D8cv zDQ9*zz1UvT`b@~(p`uyIStW*YJSq_O423j zi}FWWA8S`Hv1`(3XViBOh;*RNEFee&%d(}E6c{rHd`xyn>2P}Lu5><)E^oC2Ntgg( zD-QD1``YWe=UkuZR}3ItrEm_^ad19h=PeqdHy1lM!MY)%ymu3)(X5oJ;-qVd%Dhh%QGmVzdlM{ev z^gwNhNgvjSW!LaruTn*ba8u(#{PdRE3k|TPGaVgUcoU7Y%>_4`nvw}R{vXj?I zik?rs6JmC?1bf-MOzyyuM@q!SWGP+?LxHr?$R;wg4P|JpR@OXd+sQ{Q-q%VzCaX&( z?uR2`Tqr&df7u3QATZHWdAqbiU^k*7Ls4CR`s-s8G2{}bK}LzRco-CC?(pYVRn*#j zDIqfEEN)aPS~V#H3|U^aTz=rT4nNzeI!do8T-SxAGoN(TJejLt$fd6%;v=!KC$xei zVX?Y>=jGw03_O_4vz)3p)Ign`mzqg-@fE=i+}SL>Jufdyxh)wTcMgf%-cc4@Lwnmr zT5g&ZM^+##9LBTD4W5UcbtR{{UI91&r&YtPB~De5THUCJu>m)g#?PPB*WWe zZh>BH=jFoZj5S#uT2mtH?|t6uA)Uq|I}g_2_*>Nk(7{G2#L5@oe^9j>+9ns)o&S4H zdYH{n9~`KK4g}QpymQFo1XZmkE~SiHf!ECwNl~jEtG?omBN`D{|7bt?n>30VmPk5_ ziiwis^2P-r)l$z#Gy!V~MkBap@q@8oMj=$G2nM$;?Y7=w$HkfDfvSoA5|50xpL#;O z8Z0^pX&T#xiAXdIg<)1d)bzG3C8#2ntmQ64EgZMbmI>h&R>yDl@_AEv%mYK1&E5DM zZ!w@+Jo#G2YW&Yz`v3nTgjb4vkReuT`m4!YG|D&8JUiC4_H%@CvfiL3abGkrEp3^vv0S4Hf{Iu%dmF(`$>T4#`1yu*ZXWnZVGi`%5VlF9b{*sEWU-2tF=K|p5gaL2F%$YroYd; zSW@`)102JPGIM|YdA3+4yF3)piFlD~1$wkgiB+h5ZX|^~K%6xMNqL4G$aX$1DkQ+t zFp=S^v(w?!rvQ1kTw(zZX19zdS2+*4X2OmiBJ|&Hzpo|2H`SUYKYqLI`fR+_4-(vV zmcPuqixSQ2u2(cfEB5ZR612*_5ll++h#U~|09ZUM)w;)*!+N)j`=G1OtBXuUAt=_ulLf*kY;t#-(IC{|5Y%% zFp}yiFt3Xq4JQ36y37j%iiP5jiPtx^B*QALpa0Ku@*iH%|DrkEe*&ie;c>|Yt2e;1 zI>v2O9~Au9#N^1)U`zYAaZCIEMRWKR1fOsh%>+>Z2Tzt#4T-A(y&aag-|&%ZLI#rg z>PjN)#05dukE6W7#xgQ48qoeb%=v${Ah7<2jPHLBbC?+!|D!dOplgoFwVs~4?(U0h-;y7To2g>@9 zHum|-U@-+PxL2SjX|I?u84g>6OJi;yGC7`p!$MQKfgaKdZB*G6pR7a?st25FA5j=`jbPQA;g!gb0*bbbsma$LP_N=TX8{YX*N}|081^Jcs%~IJ{ZcME) zXj~)nstjjRp8Sf;Zhhc+t>36MuoB3je1d9f*Q`QH(HF?%&x+StVv5gCWLV&f?6iL? znU?OSe{xfSyVt--e%h?efn(l-C>c@IYm~o8VTV(6UMPTFBbj(KQkdqH_ROwGReh965g+s3LptmNkxx$JIppJW? z_ZbrT)3lOlLw>U45L_6n{9w0Uxm3tseJZLr%&@@)oY45ae+Ks>Vd+4f>}RD5f;CX! zDAJb^SJuJoj?0jW5T4P!8Yh#Rz@ri_nWtjU0-9^z$Nj%(JrVAmKfV3(@bAaEuaCQO zRzoTgUcqJi7w+^%G9bn4JAl|UkA3!neNxjGP?|r`nZhk8nK^ag{=BUs=JaB0wb_Dm5zoS0gld+5F} zVr<&Dw1-3y{v}PU(beG`PEJ=_8uh=0VYn??&xCwaGo&v-W^GwzkC&(gwj1LBuZGDZ zq5pY}hvVnX_DmOL)9sdku)%L$AyRw3o4!Tbw~Xk#rn*iZs~ppuTk^XzSIr;T1iF1O zeI%zs1^bX{F1o6G-rntbQ>+*%e6#{yzDP-R7tx&xdY4fP?#v+>Vaq zqmWRY1-`1ngQ{ngfQoC|Byky2Q(zyRCz6I^&)yR@oiJfwG{myWgg12}F6j{>t7{L~ z(?>xX-_*z+RO)$pO49lW|A|ZeLnIP0lu#+E=@2H|nBfttoug%KC7a??2||RvscT$F zHs7K^hMOeWSPI<8YVlXab`>g+iMWsvXd@eMLqcfM;dzVDXilvQ2>dMd$l6&PHL;V!Wu(KbcsOtPw$J2re z!N?{ig6hsC6es8cZq5vK}}-k`XCaeR1xN^D%?XJ&-<8Qtn-wm(Qp`$pdc zm=c5$;4;BZ_8(o6MpgszY;Sf62?c!`4MmIC1e0bBk>mjm9r%E^Ebbe-C?d(dxa;um&I zgMv*?SJkhIx+F)#JDgaN#7(s4!|DeDAJJ`49}vdvegLK73xx=)An$myS3$pB@hfyl z&{%qqoJeX_?U4}ebuWcRSp6)!{zsUnH5AK(fa;lJy-|BqcCFFmg=p_Y4*BCY+;Y1w zBz$cRIZ}=YqhB1B`3AZjWG$t%-=U|K6df^`aI0Z{3C zYLfJM(hLxS=H46o3OP1f$E+uA(+_#^KBaAPE~XfXs{Z_+zACG75EAIAQ&s;Exf@+U zf)A~&YJJ`hbbqRt?ZX?`n9>h{8PiEnXmwOB1>DJsOOC{Dv9?dXtdTG{&ln$I7`W6r zANQf!@7+B&xkQ1#+q;BC#4l`9!xZF-4Mer`WS!?4x>r@eR6N9bSKHwrGX!q#uov?h zn7$#;E;ZH!&KrO&8{HSuoP0QUNYW>$Fe3}iLu<06i&cm$aDgdV5(JN7J%YrE2e$j0 zUI^(2cg%3jvB;M=vp%U9@H`OBtMmsnh00)BRBz7pqu}RiZ&iKUuml@2O zES?O7WxI-vv4e6T@ri*!n}X zbF~!rN&O6n`j~o|ZwIC3{7bq~A4{f?u8D(;(`bhRe}ZmXci51tcJZ<}WUvp>t~@M2 zAOWd92m)_9&>NEA8K@%-oO9^@+40fm{exAxC5^uGQLmI8_K}DesOyO|;j!VJ63%Q4 zFS=!#A8^UviTg2~V-K;#LYv<8Cl(?YO}~AD^Gcc!X06RXjwrxI{S7qG=GI|qN5FJ~xmf*M zRh+iEXqko{@%Cv<5XT4L_rrgD_I*0jzFRlC3Qv51d)d)bbH9Ru76*B^D3FahNT8s9 zv57o!Q<810AxP(QH22-KrzVd+b}fasi6%P|q*tUxmDwHkN{_;!JdQv+p7H?LFBj+9 za(eDznyn@)vmPMC4jbEGf(IrRqQ$kgm0(#cxKVr`+~FLAqF*wW-1RoPJlAuJmQHRA z`%jU>+ENZyH8Cf|o0MyaTWj9iM#IZ>A^jRjV^;&;aXv6*CmrbVzLPQ|F1w|NdY^ut zrhPGHp~(OV|Jy-VM*5=*iOHjU=w$iLD=_WCFtL)Pq3w_QxBu81EGCjViB7lc5hMgj zz0(5@<8vw%uJHbD{U9Xv0YYA>-#Nj`Y9n3^_ z>g@;8RS!$*V7EhG1EKi;T* z4}c*?f_L$&HDGyE<%bS>VZrE8n-i@4Lwgd=&14w!{fC*UO4~hi5Cnw^{+y%GzvIvA z#iMl>(Mk=}GKRBM4PQ5s-Vl60eiXiGZc+hwa%H*4_B?7ny3dDYh^p?h)BbQ)q zsa2CJdf6iywVxn)I_^6^!4-9Xjlce2X{`Xs^eag9_A=W{3a=zqgXrfa#LcFH^Q;W+ zhDOQdlTVx$+!^_u3Eg7@M@l@;2QUBj?va8`vIIclow72a&WW1`^IIS<6JT#>>M9vN zKx1;XDhfCw^HG$9y*ka(^G2w^BO}|aXvSLdo%-=kyR&uX+}ROqjg*N#ci&cKcKY(_ zU38l;o6g&P$qdjlb`1AZ%X-}l!1tOmiZ}#unCC6<&xD+HU2JbQ$dTUaIJi`^ySg}7 zl$R&1DhwjOWCg?P(6NUp_|ar~9H=i_+~_BeGNTV*j6&qxT3-=~fD7x!D|w_vSBUW; zfkz?$9m>7!PpvftHODIYs9M)K1k@|wS|R(237(Pw{?pQOKLjR#CYk2`n#o%LKSD-y zy*jhk3JPn!VSE zTGJm45U?{;$S_W+ka_s#^kSoIKPWE1QwTQ^l!U9ntl^u#@B*Tx$mxE!dUZ<^e22_U;HQcrPoqhk|b8f6D_SvX1^4HB?cFLsu}p z4KWfSN|~4*ZbEcuDGtJMd&$avT_xK?U7UkoM8*<%#iWD%lYpoKU)lySV{mK<1EoIMHnSf{MaDjJC-o z5JPXTdU~GUQ1HDlWJpvyS|PwFCU)WFiG|!BJGzZ!JAn`FxEk=%3U#{*1LY&kVG&Z* zq*AI+#CiRrzWJ+sq0INp>BoKbOmy8_$TL=GT}!XmWNOzB=9{#*dq{I|gBVg7eUFZ3 zh#YC+(>RphvrQ}gcWm!LJr^4Smcfl$f$wK@kXDB;G-u63YHp_D@=6CRdC5a7RWH|* zIdz5||3ha(42thtl8+x~{ZS_1OtudJ|9z}}Zfe(dg$d2C`8w8E5=TJI%wXz3Kd5E| zurWmjK)wH2&0J?~W`1bPOSaUeT~YuA6E2m{x6E%&1<9BoI-j|v5+hVsErp`u zVI};ByoX&1-{UG3vvF5p0S_cpXs7Wj?$ZCJQFHJ(lbbtX*h}}boYTbyx!ib?9}{Tj zR3peLhd6&*+Vf>0dRvNX$Lo6ac3VLBEs#k~TD~_++3#5SCGUki`TwHq9h(H}wsqUI zZQHhOXQgdtrES|bD{b4hZQFL{seNKctars-_r|(^U`EUt{lgq>JiR@Githpz{+g{# z52`4|Po=PW?5Fb=JaNVA-qzYEOeD{Lg7>TG5_@OY{7a&v7c`U%Q>`nVetpo#U^-aNCd%dKT3=g#(H?+XE=`X zW!iq^8deep~s-aOesIN1p2T~PO_FV$cA}t#~4eHj>aV2cY0%K+ zBgI2c@kBCNjrENB(GC8>1O(co%q1nNOBkS!N=C`G43#;PK+*I%N^FdLt$?iasiO>Y zdX_4?ZgR^cklH#CC0~*ZMV@%~_&MSqjxn5!V#8P84Oi<`_z)5VZJ;8&uUUka%# zPl8$50bI9<*q3WvD#vlg2b#9)`$)c-A19*K+JV`EhAGw1{dUo>Hu{$9^&8ctr3k2a z1_L`OPL_DMUsE5;0Wbo`;M=UHos3D)>x(rm0PYO83JWEE{kI4LMmT9s1A%|MJPj3U zz8XL=4t1O5%;bSs*~HT?Xwb@nu^u)443A8aoO!Mn)pN zQEhTR9G{_fbEMbk6*+cZrIQGAgdNel7u3*uhZHL$$W~df7}|<}x9f&jvRo-jJSE(g z-9kiyO_;`T@HW?0Pc4*hsiZ9pNoW@Eb~1dgS;40)17A`8*EQ&B{a>q zU<{DJ0V=)R>6o5_csZ`{{0x_$?%2Fjjay9aY1uD4NB2eVwgySx1Nj)f z0#&txh8&fb%Rn+rf z!HHXyW;*Wcpu{!~Kk5OJK}i#6%SYy~#_7!lJm-LdF>u7;20kf(ntyV95r1J=?na6g zxdyuL7@J#6qpo~gR_zrIMu@!3@p_Qbdrky}9Q>ZK{9>}i+zkZ(urxbyzN!1-S!w=t z9Xr-m3#sOb`{asqJDxNn=NbeT!OA{K*d8v<;oy8S9q=sR&!ORMfnMAxoN7;x}?y?P+PvCc;v+^C@-F}6aZ zk-wR}JXLc;YXg{MvEE z#@DYa;srp(AXMYEep`_d^cL6O5lvu$D)jWQzeCw zG}V8tydCd0)I+lrclqSQswHKv_Y}L`{bwOIII*G|W%}23RUsbuX;Ny#gw;G60tENS zF(G9L?L6lom!Q*q1A&(bDMgapU9B}Hp*t3NT9nVR!J)I%F^3Ojwk;c5Kp$&X@hS)p zBr2I!eOqqacs=kIrzm#gd&Y_83RZq^juM**U%8%_q9~RYJ$vK)Eq+DeY{=*@-1Cs5 zd)ZdK;}7abjc+;bro!`j`xXPJ(DtZX_x2usLmt9K`n6NtwT;eE!~3n&2SSJ*=Exvh zQy#=mug@N?i;dnRzE>VY9$8 z4%-VhsrfiZpL6JA<$4#30eT7^3*@y#@fNYgwzaP@MfSFC+~wLq1#@yq4qih$$Be;0 zH{*GpV*Du-vQ;u&!QN(RPl?5_-+?ngbOOI79K|VKrqLyd3j0Iu#>})*JHUE{IfaPc zrb+OEVHPMokODkPBc3ySxve3V+kF#kt}wd1q!CK)rv2B0u73gmoRx7PNCyRDO0(s) zF12jp^F{z^zSioHbRy+P9k<@cR=OU5>sz#p%6k90g}#5_2!0tq0i)xvg+~28TVnry z@`I;63z%~lwLCUX)f1T8#Q}FRgu}#zoPQZox9W`h8-s~s=TN+w<{@N!-9aga0$dUb zuL@AN`hj#%Nvp=Fi+;TRM8^7=9~*h-`{wN^_BM$}aTv>25)Bb$@bLqcBtrx94(I1r zuo0F7S6sI1I$Yr(R;$yh1@S?`003yiV#yR&yKdz%$i^|$Kvo(`+m!a* z!AW#4BXg$1F*!6U&gB06@JiiNlDIZJ*dWzco4M=84qunKeqDR6Px@h=SAn;z{pZG| zlWxSMa^JVq>|(X;xq1_$qtIN6c=FD)xYm+}S^OHU`G!zE>cjj!K@{~Vbf*Nbf203= zzsMS5t6cT0lb5yZ3<;wJ%u}NyQ6Nos-ai*vv;+Eqd6Wh&A}V=i2;F z?NC-zIDVlb*4b&ab{!^@UtBAFMC1ILb(!sA*6c3?b$XYgr=rJ9jh394UbeDG49F zQt%fLCmuQS$TdujbEXqjo#_rbbh<*?eI&WVL_>ORGiXYZ)$p8D>4L81M;(TGL|_0M zv;XYZ6%{PVn)SK60ha~_@&vUnR4Ic}{NfVH!eYo$Sc9dN^n6^cMsm@;&I;~WJm?Rp zw4y0K4QeUk(Zjt58?*uqf!FX>ndK7 ze$cXuEG6%5$I?yYfd(NwUIB9Wydb@uH5POXMrbRQw@ycUn?Vf>oz-l~E(G0@u0EE+ z6ogf(9^Iqc>DB^pNKy@NN)XmXTT}|Zv9@KpAi;xbD$ucQlPed zqcA4#Iv0^c+jMp2$SI#0$tcD%@!yLt%@I+6xaP2iCH%yD!2aSh#p0Zh+*(J2@N{wV zy!oCBAUm)$C^)mSeWtViQPuk4D?hX`0^oXWps(uGRlRLLm1Am$mk{EIW9epfFxm^r=CtTgXh@2|;GxCPzXoPM?CVt(ABRo5KeKp}4~>)fo? z6vp&2EmRqU2YLlazHT8n=ag&X9RB8C4eJa^4y%x1?30tA-V)py;5KL`o{@w0sQOgf zY?T2-FVG$$)1yASm@Oj-o927o5>goLOXGFy>c&=z5TS&I`Z`Oao6r>abx%&%8mNlV zN#D+wjpzO6)chJYDC&vfE()Y4_fm$>F8q~x3g~%KMTVh`r=}IiWAEQ5dpnGP#e9zb zz`Y@hB5VsR2>?k1ySSTRID2`o-C(#TIq4&WGQMpZ>Cmtv`gtXc`eg?Jc1@`v1 zLO&U*tW23=RA|_srLXF+dhUmN#JG}7V_g?~N8)u`V<&q7V`e#W;!xgv@&lT4&m;%6 z>CDJMd(pG$kF)WMY1d{<6EWT5^Aa2P``Fv&p_oLIM9W4k5dgG6q}o>`;+^4GISbOa z9Bo>`G&}cteKmK4!y`(cs88g3579f|y|mvm#v@Y0TSbs-Q!x-NJB8SqWkA;#v!JAc^hR$k#xZ8CZU#=PkF#&6|SHIFKpfr zpmSu1iW!+nI>HJ{RdoZ3&5N2jR;*D|vaa(SMsku?w7D~~Jo3*HP2vG5o_0nHnk1I5 zsju$B5Oi_ERC_>=67E*PZuB|mB6(P~N4S~855JVLU6g(*QDbGo#5nOBf7{;rY@>d3QTYdo4~B)>Nhvic@`2S#8!u8ppqfw6tX=PT!Qf{ z`5IzcmS+nbmBRAqAZ*mQW*LrFJFx-zriOABz+z*v0Klqgi{+wCrt6xT9Df(JXamO> zg{8R)I3idTNnk@2UVg3Jb0V=h#Hg+{1~^p#@wKRvhqAnb&LAc;5p|Ely_->L3a9acL6A&{Ew$DyNJg4HfLcd7A2~>%Oxk>2Hq<%S0F#rRXjChTgI7f(qckH#8|2CZ5;eGdqXfMOM5b_Qb7Hqd*^U+p!cX+BB`s zdkq80e|MF@`UDHZ?P_KAjjcZ+FI{t6aiMeN64>gda13;p^emjmpfJXm1jnR}-WrK_ zA>C6FKEH8wf)j&J#C*D^^td+^##FQQ$518^M;g@F$kccx(<6xkEhrnjea3&lq%rfIc zbhjEqvB)A-n3)*pQvD@L6YsGQ*vdFLIl7yGma9{jq5@z zLn;qFmyu)`$O?&0W*!BOxbSu{dIyD^tV|P4^Q&!PB2#aQlzZ~R&qmLQDJ!fqFO;YR z;iE?sE79B2bT&ZienO*kACbMsaE?}tdyi@|pLC1dz1Uo;%V4zJwawz0qQS{njFKV6 z9Na|~^JDT}JV0f4yxIN?q=ROtFTyhm|9l&(!erPKh=X@1Scb0zQyH3*jw)*Z5nnS% zI4=```{GpbfQ)!;KhSMX{P#38?diIo1B5lRMGeY&czeeqzQ~EpK-_>O+M$jntWbf7 z1(3WhzIVvUqxoCnO?^)NAeWQU+{QBR_k+}Ro$GFf)q@)fL$)oS2=!7TY4x)Ztdq=i z&+qoHbP9CWH*@c`wTIDbB?uCOkarkNmL!QF)Sz|)wkq}7D-15CLRQbI#W%Vlj!W7O z8lT83Ymj~{Vr$U0#nO>h={HfxoQ>?2i6YuhgX}3o^)MCm+jla=bgLM_T%wo;nL&26{ws6V zbRyg3v;JTXF;AX$A`+Z+GgfI2krjXS+ceH9aqP?8+9n(ugI_hA@F>dH-|2H|!Ts9YJcqo+q zqp?2rUawDBtJ`JZ*gg@n9xpOa<*Rg~zZ$GB_c^3s0p1@sX?cFET2AbiS;$db+{qZq zL)D_PMhH?DE+0%CADzBy9KBWC(#2aCDB>~^_9wl|6ahMY2s3Q+=Bd&CgsPQV#At99cdEhGNirj|=L&=PR*gZApF$K30&vG?qG%I}45iZOsJ zRdHIY>5jF%-q;+-N5`qGDCZHH@7Qz>SZMekO_qGq-p^9yKZgvlyf1z?XJT%EmGcw( zSQp1QA?!u&(v1IkPX3YE{9hcX$B*Ii^17Hoq)mZKK%ay9 z{x2N(y9e}8+s1(vn>`H%RpX%vCPnfi4%1!=*{B*9fx|~2w6sIp#wTa6OuU644b_2> zJMiClAp8Fe>A&q(vj2DXMFy6C@W6zK!C-9i(LkE>9EFD+^2cK&mn60oWv}YV=oS9M zoM_gS0>`@FyRVCePrpISQa{(LQmaJ8FSQeoxiKLvy)0X>BmlOkaN(i7&k=0%A<%Qc zVYq3$43OeJwC<)qh!_|9vdH6e@zndkCnHWM>q{-a;?kV4S_lCwW3z3hTrtpZnN4&r{TEGOl^07N8L}1rij5r*+DrPX|VzatDnQ%&HqeqVS8O9M>(Q;}pa6 z@l~sqw!o=%<_k%ht@FR|fqdoE zfFm&E%#Z%9#-t^Eg?tR!U6rr^C-?3Z`D(!@;CxFDeGa}#W!Lk$0f*LpA$`1wby>|p zD})@jzhb31;ve1C5|D>gJca6xEW-S1oTVY;>u3=@0rn|~O^+?X;=ktW@|A}EYSZZa zSwPXsMs-u~=bjABQphT2BJ%$mVIi2e)#{4Kox-47Xv7l@%s62%KYo%v8Q_mtP-+pV z<1&x93tFos?Zrt71FguOhqg-eYQV{c*b<|d(hSxpbq8wabD2c87nwnhJ_IDWhm)Lb zFLdJ{fZ==X>1lnf#iJeWER!Kqo3aHZT3B^U!%$~M`-swpJR>fU!%U42)q3YNxQ%q) zCVUD?bfgregik3%L{K>ko|+&6acdIbQOzxpDeZ#XKumYOw zmgGwV`w6E$!M1BRdHJ1^{OXqP99R2HCsRvB|5gRWI1&%YhDOXqZ`C>cDn~`H8vXB&EaM@$=P@mO{L7{HP=Rrz)WT!|Ejv zi0c7hvuDc9ac`d+lBbPWLbh5A{*@ql-Yir-BQ&SX9TMmG31Cu>%YCn7mi-5eeI?d$ z9alP2#YG-&{CqN_Nuv~*7B)L zjq(H*cgV1Z{}2oq0{#GzQ8_Ftg(0@zJWM43EIXM__7O=?CRsmm0(_v8_VvA>=gJ82 zsD?}a1<+$KQB7#ilTN}3Cs_8eq@JBKb;6WPjEh$3=M{MfM3VGgz@X&eMVMTfg z6HFM87%_+$o6y*@AX4KpEVW4N$n^NNbs4>o!?hVa4jum{oOrFP&)8wY*Qzr^N49D^ zScdiuYTe~swkB+MH3}@f9h3ivfWcY+2OUnLL;eQEJ@ z1;O;u=+G7RLV%*H!RMq5Z*2B*ERH-8<0@-UU$Q{g8_RaV*vhX36L`T-N*mf|MmZuV<2kS}qH2C|t}fjRz_2_}zaL z;LLRQ0z&txt>V}2SKi=e-G;GItkZ}QDJ8R}5GX*!+5m)ww{5}_QN_gyZabAl5Mh#$ z1jJfr!Z!|b#E5>DwStcJ)Xl*kC6A*petd#y;{JhW-im4k*K8>oX6wpoae6i428D5v zT(@4ktybm+S1G+!hKG?hcM%Y*3-d3{6m(4rUVDp=wWUutEsQo6-2UN_d}c0-!(L04 z>vmJgBvE=}ta`5*4JTRWZUc3Km&KO=P2aEVfoMJItNnwc)c{c8qiQ%;LNPV40EmP^6nnyokG+PO267A-dVeM6!?nB}44XUv$u_E;d+C_x*X zmlgzBm5|1;0*pxEHVY~R*2eVfL63Juz-)lx3aQ`<@mdV700TiAhdF4wQ7t*k* zE5b}y%5`s;*XoXmsmY7@|E%~C0N?x|zboG4m(r}Tym0y+;W**!tIv1wS$d7l!)Nk} zgqa!$cvlmy0lB=hkY?9g^b91Vi4Y~aR^iBUoY{5rBNF;jkOf(ILwG0lpt+r|?_K^6RZ34gu61CP@U4L^Pxkh)IzAvYRzilNgVWBDd(Z?(W$t+mj)*dj%CNOmofIs z>plI8ZM8hTROy7rRj29nif#_9r71Zskm;|UR@kkFVKGOyvX=?v$$xiae$Jlo@6DhK zrEv$xRh#J&lq`$V&#;TIQ1tvBib&?Y?R3Q|*A_sAfhyY37VkttRe?L}_5R;HO2{y6 zo!KO#nN?lS=qc=E8=~i{Zb*-{XQFg^n%9A)eznLxaRkuJ>(SXlX^{G^-kIiTkuDLv zNUh`@LAU)po&wTlS88AXCUqjT=fJN@SwDS%!@ek-$u4D`8%P~CrzM+F(^ z6cGKCZgbRz0J>595cR+dzq`$cjI6y`L9kX2;`Yj9EQC-!9aa@hjjR!n{|3O8{40az zu|V-+Iw z+J;f7K*Q5aXRl#QrfT6Sy?1PgE7aKT92&$u@+m^~lJp5}JsZ&A}h7j%g_57SK=vc#*;dG3-8DMVe!4qL$`IY+?En=ykZQ3fgPDeMB%FY?Z%>Cr1Sj2Dmk^?0RkEWt}3H3yQIMWNhoR z8Qn>4-9^M$ji_=AS1uIKGArXJbL>Hw+M27UVdic&5=rqRjG!b?bvfR zPY?@dZ>mU)FH;W_ke1U<)lUJIW(^kfi5qwJx7)yq0ea)xs1-4Gh|wJWqP2D~gf* z7+MsIb`G;&OI=LNA?z>LDA7#xsp>|GyQhmw?+yuS=E^tZhBr#du=wq6H{9pw#YoUj zpC-4(dGLM}rU9K(#FleuYd8lJ!B(m?N7bVMi?om!MGxVHCoOim?`jD{V(C8J=<_Ah zb=O$D33v)tP;A@=-Mi;#)6W7tWV!xM4P7dqeb$Dcmqz#p>P{q%&nQAXb;16E$J#j;I%gXNY2#tF{SRCeTZXAv!w ze>Ep6V6jNPlXf%dp=T`X6QXgOQGA z8&}IPaj#Tt6z?>n9@$iALtWv+C8LN?&mN2&b)@2J%iIb#qp~Uhzg1rrM4Z2Qq>E$> zgvm(!L2g3%CFGMU?es``aQ+@R$Q3uBRbp8D$CEovFq}q}Zlwrw(dfj(sLRl_)-sB3 zv0mp^f)calOxO1pgA!cM-m}|q-d`Zo@0q}RzxJIaeB31-(q{fMr}*#o^!{lITk7KDwC*9_EjM>ofN(&ookzfrPv(1jI%0CsZFgFDNMG-0=-0O)_Kw(N1- zc3p(RDr7T^7$B~Hd{!in#kHFAdp8gTYTS<^VHPs=8E6T<8!z5C4eTRm5^2d&r&)e##L{_Dl3gEIv6UTzAa6ro2FbstW2 zmb3-$x9GWE{Viq1uURjXJPn$`E!vdUUn=}t%^ILUFiQ$>h6=4KNFSa8BG(KWcu`8&6OiVE*0|H64UfW+$T<==n?Cm1I7dTq=1SohgQ7D#ObQwC zPZ!!FoZ>2e)h8{G%5QtcgP+t*@A!Znj$CjDHY>Xg2M$*Zxyfadqp_altpUAy(&Ks6 zfZ&Tk$QUk|T*0)W@lru`{(&aFd6;jBZkd9eX-)(&h`OOXR*x$4%g zEk&}5TbJRCL*1n95Cog-IGG-RT#kxF?)eKZw&#C`S^qPk{|2)-{wup3Gv_~R8BBK* z@VC+tX*P~xw^r98EPg#rrdj9w^LzE!sP-oEYBj@0>rYs~z;to`F~+z;~*@YhyG0vGV9BjD+G z1z96@D&X=yIBb0V&sH$TaVNzM5uQ^H<3Q~2xmU*)%~`e0qL5DW|a z1&%In@qtr-=pFHlOXlcsiTI`GsS!#!l8k#Za7UpM@rD`V7}-LFo) z*!l?7z+&1OG|}lRF+}4whdwW#=p}y6^nQYek!u~Sbk)xL4KfcSr^g@MV6cBsh)^ zb9cefdY&3?7jGI$OwQ1te36sy>9hXdj?gHc%+_7F4wjZuoF9|%P2lPrLBrsw_h8L0LqO{dHK_NlN)NQd*>>d z5vjzS*RY81d;3Y@IdYl{uOhhpugiNgciZd!03AW?skwJ&8OaPhXs!X5eGxXZkuf>d zFaoEKH%wpC=Nt@3CV3!M5z4mIl2NNCTR58pjtu5YS{3+lWynPyok9BuxWiZBPo6Ts zJJ`tliN7YWWR!|Zmv}W`k~frF&$5>NPGFPxH`)O-np$ntEk}z)i!-FwwWI{JXXF|l$ zBKZ)prJ&^3fh;znHwb_D_!`RZV`*1=VMV*hYL@kYiv9L5a)cqRUFiNFKs@;kmOw!f zEkuu25=*|VKd+`P?^+_^5V*0zPOQ?T+RT{yFJ*PPjg!4o3l@RY$YNH;owie-4>ssV z&ZY`5M!Do38-+S3`N!!p5LUW7M*!|MF4IL`#{=?YTYoRvcJw*tG}YkgyuXgzK}V)G zDKxqW8jNvMES!=3WyKbTG?|Z7c75_A+dyPFIhNuI`mK{g2 z@4r6gxi=}1T`@_b<;YQDg-^+PsjD6NM)3hWB>GF z7NdY2x+x-HtwSrw%z!JD9(Exznto#Vtv71*$W}T&F4T2XWXny!a;z#?H51J;oSFq5 zkA&Ngvy%4S%F<0yDO6L8b9D&5bi7YV5K+s1Fi^OSHp2|d{6-^VHBc_(}^NW zXW?41l&x4sL-mXkd{NY3k%pX+ylOgmQj;exk64U|-X6n)*X4$bMWRyC-)alUci46f zBcSW#L@!rfizaTBL-ohh20Vx9D(2-Gmnu+3_8a}z?H!)e zgtresn50MsGY~`1J-|gY%|`*bGCI@*DKD=C8>EYTe+L%)f%o-d1q_1&S|+5tIphoy zC=Rc#Q(3gbZLA$vuvR74^Y77p;7vJYJ;l1PLd2WI4l9EwG0II-CrxtfpgYp_(yZ@Pg^6fFP zo9Zdct{}2i6`4sDIjCWgh97;SbUL=-+{ijPV~95TUMH2L`aY<*ab5LSqHL5kh_mX= zA`G=%fD#Hbm4Eft?f@-=;(nIi?J~S6OE#QhHj0CoXFkJd({HyGB{v8j7@F=UXrang zbIGREqM3;*H$Vin>BLV#!#Q~`OB&M46wRit7gv7eL8mj0z(j~2I#s?Ad*xozW-=PI zrt-+620U_KYS(rfgPkU%Cy?>1D0V+xl1cIA1S*;F&Ddh*k{V2kx`_M@%8zbsq z4U19Knc7fzjsxf24QNk> zWX`Ms9pMj_Yk$xK^E$&1L0u%Hu35rM-H9Bs9cp|x#Ei53FV~D{*y=VC5bfb0csOQc zvmc_oU0i(5dL`YV@R!k{G}}6mYm!Lz@QTlDuhbDv=V3;ii2<{aO(5vwMMqz`#(5}ze4 zt{ePRio8(J@7)OcbPXEHfPLn)rEY&h^Vv@Z$KgV2gB)zRYJT`L3#xVGBfi;fvBPfL zd&?e_?4$$01o3raYqSJTN|s6gRTnSS8aW%M`axKI?AmZDzc?{K$R7w>6Tk|_kZ?zp zzP$iLF$ux$+?Ypq51i-a2m1v} z1j3A{5@PP&Q5k!}ZTkN19wQ=3w$qVwISjsLD){r5#XH890RRymJi4S0NfL;|@Wjms zuxUPb?LT94T5OhBBYx#22cF{yjulN2@Nl_4?77%J>r{1apOh8>Ap^UNOn6a$Un`3w zcR{hJ)I1F?kGZyU-94fP0IBNmiuQmIK~wWCRRp*P zViI2)^4LK$;=of;F1g7`4W+q!)i@YNO7BU8L(XzPlnc~TZI-EprKorsH%36F%7uBw zi~;)i?;R;7ge;pfH6f$s?CzhwVTLE!>!!lPqrE?9TW&lm-=LtYKsmyWSl~%N&O%f^ zRKAsft*P?D%_SUM*Vkx$;-e$B(JxjgUIl-CGHYA`VS>L-O@c=)+<_rPR81KdGDUt= z2EmLfaORE9Yzf*r%=|2Psr?aN4-x_KO?6XSX#4s?WWc+R~6%n0>DS{x4f!R@eqr`BrM zcAb{7D!Gm`zgLqia!7V$d>qUq!1OmJ@2-wQ)Ao*GBjzPrk;fF4;OMSj{h1PfjN?K= z&mF~Kx7_VkWbpAY0mP5f#is`yfK>4t@5ed=ik}p9eDd=`v=+D|BgfoKaH}6hq$O}o z!YtYIgU4YEBoCLrfndvL=S3Z@@dPeuZW3aK zRm+CX@#IIWzfkq19;u!A+oWI(r)`LD>SZ6rq+tp@gH)oo1*yKG z#*w>8G4px^h`2m9e}G}vnwgPq5BQ)c(SYI#9(~FQ4(fI3wYxf8@3T==?c|jx%E@n- zYu0`)4s55MD;aFDb>gKg@LNnnHC1Ss^-p1eVkf{i-lP2jyHyBW1!9?JG*vVMur9!$ zQ}dls?6>%kxBzJDW%{fGJaPTG9?xL1b&u;$?|7~_pO`Uuy1Edt*QDQ@$E~_ZCcnvz zXmrx|s3zN8qG8-dBMdYeU0_35%r;`1sfR2cbP7Dc78aS8@U7%RomDDd+6FAZB5(VE zf!S-Fy9=tZ^Jg&k0{iE8fF>M%$>yYDgbWm(026f)R2bgl-`gBC_XhYKoi-+HTum>& zzTGuwzs79UVpLf5wq5d8`DuZ%og|~STV4WV!k(>lLRQj4lk>pMGx}&h7gm|(_O;26 z^aXBZoe+x%rsjCs$y9%gvUS*i_nI&S}eN#$^=;L?VNyxJ%56X7x#pW z$TNd?ljz=Oh2!bsn;Wx9uN&QL%91XCCLQ+!TQ_-7(bw5BJdNhoxP)UR-?D)462v>K>}ibtYfKwS82bG@6^nm9x+ z9is!YpZ5sVO));_och$?BhB|VPe)Z4QIi0@T8(WgpGpti9rXJJGW(g$-*dD=&eC(w z@V2mElW9>P0-cBS_UAd3CLcU3Ub|~*-PXKOopu?=C+uZSr2GIoSg!{U2EN(_9$f#$d zY-W{T&I8D2`S)GrWKvtH1NR0}9TkPsOR(!bPL!zf|gBMezeHiwR;`DIm4}hZoGDg)EB7LwSIkqePw2m z$Eis3V~F1{(J!fK6FP66xhC>P=So{w)XNv}1eS-5Xfn+d;yl^%fa`Ov4%py9*@n^%_o~IRkFa4f0sqYD0o=CN7ik?Aesxl(up?)V8 zFz3=aaRjsl*F2d5h`Nq{pcu~+JPhnxa=WPtRiqu2Ok-AC3>xDqL1VLjO&)!^=UUwa zvKLqXs57x$Y>zx9J6Q6=2IMB(Z@f|1;-24({j>?6MG)ir*vu{qkScxUSRRGo|K~aR z$9CfX!X!T&Is$u#?A1NmjM9W5LC}l*%#Mj;wXK=+w)28({*Qmbq*`1B$6vqqjgksVNO7tkB8olzG&{M>P!f?B~Hynk6bqu$(QvI(isZ8xDiH?ow?mYe={R$9RDAXdWd9k)_qf+?z~J zO7k-LZ}M}~m{g9IZNpL80b*@ne-lD1Mnak@hy+!ARGbPISs)qiBJQ)+a5Gm@Ou;Q1 zp(W8pi4jsdLx-_22jhiOgCh&madR2lv5cq;Amw{xL(`v5rx;$zqvt)c=82L}o4C-1FSwB-uizL+O3?H&$9Wrtu{kg!PGo;h=HiU<5YQ+46606;rm$R+ejb5(b zi7E2HW25fdfq*qko7o})h@QBExZA9b8SQv8wyFKZJkJ1533+|}h>buMbaGG=KlzGW z_P0Cjp9t(=!LW6-Gm$iqHekkpXDB`9dfH7y1UyJ#PZr9u>enL4jw5nGF|o1OAkL{H zJtpH=5_Evr3xGf{+?tR2WZy13m;M?fho)gTwK5;9>BXH`g=S5yHpS-#CVj4O*Z4pkv(}C+>hE+ZfRyk}C zOvg1@#4iGzN#|meADysK6tI*)DllxaxO9gP8Q%&1jUd?()v=eU3ZYR21+4;W&$YcK z6?ug8P$25tEU~z|y{$D|&l{a~~XnR-iV?bjPLvk&t zZ#2K#u$nnN5)hIRqC3L#Hz@o|P+q9o->dm1?ZL~v>D+$iC-?e`$8NyTlKFX7A$!_k zK|_u@^_3Z$MzQYZa}GbGu7qAY(8};}5$@7#*s=|bTS7z8{v8{#=i`vXNsI{rXh}C* zjEQOkvm)mRc*1-hWSd0R%>*sBHT7@e+g89wH4n9g(qHhlJuK~wWKbHRPW;|~;7^}J zOq_LVRaT>ua?vu>uwQv37$cn%Mngze9QT4(=2gE4MO9bQLaox#tAIoZ{^~C)@W+!c z_Iz5wp-~c)kO7JzW-heEW!62i+FOW6vf8xU z*D7M5Grmt7c_jdLQOdXIvg}?(tGpsYplz1=XV%X{ri|(VjXngm1z)LD%39b zFB#ml6GdWu>;x0kmXOVdTf3-&{6y*QO{ygtwbykd8^$eJUS7%eTlahR#M*#I3~JP+ zN`xTu2={6>T5DSThDNGacHFw$jearRI5SR~qR2_1Dq`+()ylV%RMPn^-uR zRJUcw041-KL7;e9d9MhAz&(H5FM-0?i65zV=F^u6Y|PTDx%AkNmxI>B z4~ZcN6&m|QOEHI!W0^Zs2672_3xGW=ku<;2qGdiRJ5@2;KLP4WHh^$*7(Uc-tcsZO zyKh06(ebCcMfiE}ceZQEjNMkM6(>JvYA=T@Xeq=kEQ*zqpR}g{%npRU`E}_Mx3E9q zA8IFf$8>I2a>)TsXP~$9m+3cMOK>=_IE^93EP4Ogc)-w|0dD9TI}E8&wY9}2SU6ye zk70mc-ngaBRWCl%YHA7{$4Nx-2c?`n6&k-AsOozM*ZtMP5D8YTh4h^7oX~l^wOl7uX)Amocg)PU@P(=_iB1xDDFu z_}tpKZV$?b{C3Oa?ODX7NtWXlf4!FYyla&8^Saz?l5*(ze<*tg=1{<`Su?h6+qP}n zwv!#(ww)c@wr$(Coy?x8TXoN=`Q}#5f9R_9uIKI5&Ft@qlLtd7wNfIPOt|g~w8MYX z4lIU^*3Fo;sZtlu%0W1jA9GPa`(xdRbRJXnPHg|dJTsK(Xux5&LJCG>;LC9OJ$d3M zJ26q1O;DDKVeAmXfKE7*%9|FyxNQI7-nuamD@)|p+EC{8wu#w#Y%9w%q5Bx;(`x0{ z-@-231V?mly=k_7$@@k7Z)-y3$Emc)3P{YMjr5BaFX??~i%W3}`}gTaR&2S$K`C@P z8YT=c2G>Y0r}ygZsLuumP|L!3NC5IIQ7dmCs!oW>SRD*WH5`g`tk<|J1G0lEWL z&xjZwwQ_$YYDQ|NtR8j;JO^K*_e7L2>>`Fr8sDw&f~%S18>d0+3Il5QaX$3DmR9KE z7YD_zN+FRl&FA>7mI-8UGIoB1f0!~8y?JW$^SQ^`VYnw7MBr0Qp8jZ{AkJXujt`?? zJN64zKu+;V%ZRvk70{^x{g0@HdljymEtB|qtTvyfuqpgFp$?nKF zlmqPTn61WDOCg2mh;dg9w0bdCwKZkmrVCfDipFu4gl@6`#~#Dfcxe(at)MZJ2(Al3 z*#Gk~(L=TceRr1muEx~yi0MZNN=t4T5}NO5MC@Mz^g4mFHLZYzD{cwh0S3zD7-toZlM|eV}OU3)6PUomlg-YfG#lE*Fv=(v$ z(L8t*tyra}0=!_**hMN~=f32CdhD42pVB$3%FtDmthl`3`>^%ZIy8l=avfYKf%kl+ ztj-v^Z|~ITg$wG$t2az%@Ngdx1mgi?)N!Gg+Tz~xWWm1-{%#ky4iB4t!DH=KUMiaH z)yBV8QQjR+uC2a6LHKTlo0KBv6{Te2*7!6BU=gml4P8_~nCBh!knAqS7x`+c%Lby~ zyME-MAZo;g(hz!1siu-(^l;8TBs~4swymEW?Mk+Ce}oGgf&(4mvI&Y3S2v37<>!yo z&}Z%TB)|ny0Ucr`Yc}xrGl@3C;Y1zJ%<*A!6vF$^M=(#{l0a>m4 zcs(0XN)gN)UMRah^<<@j$6~{Wn`?{1Eo%y#9+TvC_W#<5DSaLhl&hnDVVU0JzRS4| zbQY46NmXs2#*`hSyQO6A6MQfWu*Oa*(ph-RSZ*LF2P20K zSPl$5Jg}rVI#c@Vh%5
KFCq`N>5p0i@Ao`o@<% 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 m*>S+EEfg`U(@&RcGEnICm&9FHU)Tyuwbe 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

Br!(TTlHg87rVl7$EEK3` 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 z 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

if7$?>R#`W^JcJni1$bJ`nX- zzu`$}VYEgzv#kdb0EDRgP-|TURS4G}N)E;Y78T{aV z8{!0_53ts(aDM(iQX-XMNHIb5`q2>E1?uR(H#zgo1PH*g?hXV*z*l%S^vW?k_9_R4 z?iFKW*Al#z8*=*fP?7yP$S{z5K=oUJ&ge!iY80ax*lh&d$0|?w*%%hkk_J&gLWttr zdfs-zfxe#fMk;5R)8F^gRSIj(UDxg~x8s*u=x;9+uw{?w^Sa$zlYJZ?;LIQa!3ZBn z-bR;CtZCf){|NB^KlA~H<2DSwZxDd4b22Ypm+HW0Dq`H@A%&z0kGw?Y7=rk3fc4(C zKf^nUIU0XDVJh#M)6|IK{R zDw#W38Iyy`TkjT}<5|heeO(DBdy}QrN8i^{r4rwgPu?PdzR*>RP%Q6N$6V+SY%OnP14+ zpd8wzpU?_U-evThvqTg|pbBG9wTz*RGReECVD|jM@6TF-9MhwPoF}CX>fz~T1xWoz z`1ct;74LyO@eDazyHt;^<2WOr?{n+6CHOA;9Q8ZDV-t~&=2QGYe>4=tCIT)@%R2t$ zpR13=aNOy_mRE!`{ivyaywmu0gYFIgT6(Jak9YmhpKmyH88D#YzLU*az8OX!Df+%% zjAM@nYbeGIYrUyv1r9f^5LhLxc5*8$TfzBaQnJ=WvwGCME=9oCH26$mDj;B-sn!TP zWUsz5E8Qc$EcrIPbZ3+3PMdPF>FzU!+2^qip_G;?cEy23lTACUK-Q1f!sy^2I*#z= zN}r6@DGfn}c5xwv@C28RiysaGg$bJU-CdN$og$ZWfrkk!iXZy}aiEon;cIba{ac-u z-C`q+GgNOj1PdYxYRJRP817y8jP5dbjoj1kJ-(Ds0iq7_%oFOgDM@F|t;|uxBTB-T z_=2;;wdw29mykAV2w{ndR&Ex)-@)SzL1_3S`l)yFQS3`&Jx)D)4fS`mr^E3EI6nZI z{|SBOzlDtc_3!q1v|r_;q#LtioNIIr6Xt(G-LW*SXH4uSio{gu?qmBm`m`%5X}D{V zi@pK}3bq^{V2>qq0XHKDg}gWjr5=5E`I3aMfj6q`Tl>|8plzKE7XLv1e;auJLO%u{ zky`JO3F91ks;V=jY5-f(S#dUCWNynC$8=v`i(FRHUpi-05Yj3jw*~DsH(cQF~`ayqnu`nO(LW}G-GAI>5r;`^;x}P*XNW7QmXKW+} z#7cb_tOp+Un~DJ_P3DPf=wDBaK;P@t?bnty0%bC}(+d+K?egRp>-*W z{H4B#qd(C$OHknGsTm)}8j{#DKXpe!4((K< zi(qM``|tujFxFdqgj?_@sX+ZRV&7jl&e%&N0~w$=(E(-~3uC|PV~$awv5e(qJ5mQL zzHd~bwZl_)H8rq#^15^P*BYxia>&W;xQ+>X)N+CY`IjSr5Pk7_0>C-N4mMc#=<+G} zAhY{K$th^E&PB^5&>}){Bx#=0bMUS66`8OEVj5kK^hLvTMFf5!a8&YgGXi@s3JTtu zd~th`ggQ2%z9(g+%icU11Idd0ed=USaz)>u#2T4@xJL%p=}>bGjCsM{ivXQO#At1; z`OgkpD2<lu zZI?Sb==JyuLp`$et;vJOs*_Ta+vPYsH886`FiW?%f z{A7ZT&TgO#LwOk=r|~!@)w^JhypC?Ys$Fg1b1JO}b}hbkqqtH5hc8&#)n?!@tz+|? zY4UJjv~2BU1be5O>1_Awzaw!4Rc@LBKYX>-shO7TUVDU)ow1@7nCJs?FrxZ8t-NJ9 z!If2@XSb09-vL}_3))hz+FP$gVaILJ7@qhP#H4(Y4@QkHT9 z1TY!6kkHt4y)b&fKL2Lma?Z&cLM#%VtB;qLcq@gJO-BGJc3h^vQ-jy?R|FT8y!56b z71?b+@2#!p#uib+H_|oFem$QoH^j9WIZV{6y@q~Yt(-_|koM&V_KP-t5S3Qx&V4_dw##I!{~QB&SSh@R@eru3AgBto=0lmc zV-&%ku!mi5a?fYu4D?={3KDC&aRs`yq+#v4&w?#=9#XR;48pAiT zvxvtfM-#s9CDJwJE9!;o$;0yF^w&qw$|SD)5mt9;iyG`6GvoBo)X>-7(U?O9W%6JM z-a+#vxW|zsm42%+pl%Pfl{%}ZiSST_1111ohnlay9x%T zQmIXFzcQxDf>4sw_=d^HqTG7l!}HbjYD4J=7;`W&4B~gYkF)wFcKxC zTCR4|7XX{lMkp*>=+6Q?gEvuhkx*BlsLM1>w#B$BThN_~#ea{;Q*8sQDuQKMc{@f4 znGCf$W=Jk@aHX{Xw;#|oji?vz5VAECyi(~-Uw-$V=k(b9=56ebm3m$HaqB(lR{Xx# zN^RTZ1EXqZ_Py9RJi;*(ryY*VHKgQD7;p7%WN>Ro4IGk(dq49qfwY#DE?aKpkJo(~ zFpMixqrmw%r% zrhJW+aW)3(CsUudo#S$W^Z2aXRKYmi_*b^iFYNIiBvi%}h4nipH0;4Ij-xlQV&nkH z?V^`54lWC$)P}Vg8N41DLZ{F1ul0cyOkYJ5dP^&-!WgxXF|!AEpBjMa&chjfWEZM- z=syu%LFBXB(z52j<>pfuF*DpXDAdtVq}YKN=O6vB{Z>D%Xyn=o;P@qTeIz|hq-gLfW zF%^(#O)xq^woMwMGc3=T%hyqDBPVsxlS1J=fqGcxA4Zqes{shKMc0n`+uh}A$E@g; z5fc6sP}bm5iyWGhF%O+Gzg#spYT6A57El3m2tD%2F`c&!xc4!MpMXlV7F;2UjnqeR z#1L6BQ(TM&)}7_^^m^n*yIsx?qW$(5wPCi@hxq*))o|Td&kw)Wd)df*$9va1r2F_@ z;2n4HGivMhaw@Q{2h_Zi#AF=}q#;}8%I)2yPMl#o%jDR^j3TUfwa;kM)0l3d@?F*y zNger*dSuuRSYrP({!=UoXew^U7tcv~2{%=q>tX~$Ui3860)Ob~A+sU^8=1o7YfdYt z23-UPoq9!sEd;5=^RLt>j%@}pHb0Cnfk)$x3`dzK9N!0GpKgx6zNC6o z!t+5BH>MtB^A}5IpqoQ{TJ5u%by!<{k=1bw;wFYf6C~Ub?5%)714mED1o6HY!#R_s z(jn$&I#QuKajmVX-#Kn1z{lAvMmTi}C>2vw)X%z$s5XH(z; zR$(rPYoJe=(hJoM%ez5awqf>~ig(m|Xnz#r;Vr#21C^ z*7!uIv|j^GD#Xh1t0jW@GdcFBnJpFZU6q&noJfdA6un{4GS*Xo>_CakA*e~I1Ratu zAMUxfG3{^rSh6=1`!fJI3FPlv)3yCV5eEgBbju5WJvUxj$Y) zHWC66g~#==@i<`&RD;+SBgZO`bs&we(QMG}j0a&25jvByic43peIz zMd6O(z+>s2w`8ttDaylvrw~;+vZ|!)5fn|rR!s0z0T0% zX}$tQhJw&xfR{sRP~e-3pbG7|+7JOrk|bUMU{VTJ0CV;^BeVfZA(Gw@Jx2PTK4#@v zCAeca=4n~>yl*2Ge*%lnOL$-;+THZ7(!e!Ws)RjI-QKTPV$zv@?})}VN;%00CkVJw znbN(yAUi726RR|D*9j3fBSSC3lK_qxR!V~48=I*}P8f5|V0!5UXyhP4Eq1Z2CnQfy zCpJL!5^pvlk0^XDYB_e;vemLHHrH{fe}Ct0y?T{Q>HjekmImHFK|$^F^{rCKWBA=# zJdk#Pm{?|C>yZbTevub#2+F*!cAw5Htzj#>XBIXHsEV%2@^=_LFvd`;P);J(P!7h^5*~}HjZh;F<_8^}$lt`EqE|5q9T|bS z{`fbNBCER1KkY<|>Kf5Voo{aR+UiJ=ZiA=0Ss|*A2^3BN3CJ?LmTWI81)|EG)wGJ8U^malXQx`EbjNq7Fn9Tt<`vkm^#_4`Gg#vA1 zt~}=+@Br7x61s>di2RSE`hS4>LzgQKUK{SY|v|oIOU_L(8R#+^r|^6tb$?I`3YvQ z+Vz8C#y!Wi^3vHzb2Ke1uympJhp0ZcK#8f8F7ampyxMF7Mu2II?P7Tz@=MWa+W7t# z%hs_GQ#SkvH$U#OY>r%sX|^^68Mn-f)JsaOcKNgVP-*sbf4WkS00<1m1ZE`yXhQt( zYVP&5^Na2O$JjYA3D%}*I&IroX;<2|ZQHhO8SNOE zkd|)Z*-61g>D_oD_nFv!Z79I_Q1Yrl=p0$LWq+9LM&NyV6sU|+0yhzQ?Kyi*jn6XN zfI-m4Ar|^(6y`6++kcsShqOS5D;Ox(9XT3U&iJO462L;~Kr#OLwFHo+jy;p4N>MMK zqu2vGj82iE^27R^K;>?$r~jGAI5m%J(Q~?J&r&EbHh{k{q2<@!2e9lt{lNe=_ZXgF zsqYxD%8Q%ilbojGM2nNjE<;@I31IBrhROmS;>-46RDp2D1V~0X4rH`U5MT_)^;jx; z4C#|itI_Ka6qz_U(^zeoU_OQ(saRefng0e1W+w6>C`eYsA4g;DhmX!F zpe0WZO`v^1C^-R`BY)Fe5lj-!gMF;DWGVH-P#Pv)_)2k^*ILc*G;@?q*@q4kx2F3L zh$X-FE|u@O-3FYSF_ERDms9okuTB$C0-}N>*l-u8{}_4jxg0-<${C5Hi$-Vvx$jnh zy8`w~xzkNvE5cm;sN(>d@ONJhCJS zN0P%+w8Oo{WtQKP+M=-pCX+IAPo#$2seT<&05D%U1aOk;R3&WMM3-C_ppeCNKO!0E zdskQZkVS996nTx_Ht14cK_f18$sm|LKYz*$bO($@*^IBe=bX-8!3#*DbG<#o51h@d zK7586SV`>6qn+X`YoKgwy^@-fA>yLZIr>I+F!(K7vP=}jEB%#M=ya-1zeSWB-u12A zf?PjNYlZeq6sh!JUS}kv;_HTJ31X&`hFa5vs~aK|tXV$q zXmIm9it(~GlJ@G76|AZ%Zta|hTNTwzGdM)!D(rE>fho7ulG5nwZkZFHT79i*fbgC& z0gW>=b#Z(gY#p+F{1|Jjf_H^&JOazdi%}j(dhCEwb;)bD`4gF&Umd= zMMMEZIP@AYjCWXr5ZGd{2hJbug{Hdrdig}X0jfDxoA*AWEqdX0$SHQe--E0d#ao41 zq?0!dy!7)+GeY1FOTM1J)jVlWaR5-U1FyU%Cs>ex$t8R&pk+jdPVptI`Vi`sGNh%Y z_@fz73tL;&Y-Jgh(A%h_q`mo#%L=34ix$4eKKWZ{G7LxiKF0LMS)d-xv?zg?DJ}I;Fv!nYT<&p#xw8_N;7!Ry+|&v&F$`fV>mTDrYjg4 z3{N~R_b_dz`1xTa#dB%KIZ7EQtGQkWo*zX*Ta)#pC6}Lb^3`?V4uz^;JI^t?G@pPn7Q2`wx*e9`-T^)gp zh5{D^(vylZ9l#Ht;e@%5Cp{fl1drjmmV9t53v&HyZ9y7Di_j{5m7l9ypTts{2+L0% zs9rVioW6x5`wW`pfod`TxCqtKOt+Yd5_Oj}q#Ur;4scOfWf#qh@!+w0Hgugrb(@SF zuf}8Yxqq_5v;OM3`dOR|pi{LU;XZ*2K<(8}~R`@;|v^_!MhJq{WJWy*_`Lt1?Vm>J0)H&LxiXUEWmF5ot%~)fBr`=LM88-;R5I=~Rw5C#R-JSUx3dQ~W3dq~m`i!y zP4G5qWy((!OL`kfGAJkv5l`FV^n6UGSW%|74_Z!=xaS_SBK|Jv?Q?Aly#q%sH1!CD z-Dk>D@GB3C1sKw>tA;L1@MW2g6?#uNe*)gqh6?B7lOV?430ai20SFl32h#KwkeY;6 zp(0b|((T~jVZ=mPW|Qgcsur<3xE!#mB&0JSd$jTmdB^zekGFUzErrZC3@iYf8@)S& zV0oF@4~5qu6wK|RV`!F9Gl@3CP)`6!oz zmPuMJD*Y;wv1>MXJ>a(K8wmEDs(eNpC#=uQgzX|DT)gddS`j~lJFB{@<5XC1+L2AA zs4Pq1UhgstDAQ+bR!wQjG?{up>u#~?d}|tpV1FLqmQ)*R;yPQMl@-g6ZE;_5|AX(l_fQYneg z$%gd}q!Y+<=Uy^kyv^&Ck$Q}JJ;C2511(^O=f=P3ov>m8Fi?(@1b1i64l37Gzyg1f zkf;fsPoy;{f+=mn<=g7ZWjow|nsiWSTzljglZ?;}#Ukr#T!tG|hSliuoENe5>3s!Nn5A6oKOZaBzjKL253!#1=(HW9{9-RT5*S5{Wu zeVs{+(11)(e&E|hxG>Ze<2ijl(28fMj!e;$XO8=Lehl=`EqOBnWmric!;a~C*Rv1= z%5|MA;6zBqKUf^=>unaf)K6o|FD_aFGdddSu5}w0zl3cT>F+!2$zX-@h^R5WG*(Tk z*uM%*=nv>=VY@qTSw8;W*EW=`BuH8p3*v)6#bq)eYpewBfgeF3Z2MRY8h=4ej;n6d z&20<2IUzjWP`MIeMTnw6DY+=kcsV8 zoV7w=mc%w*?S$7%G-v&3N*Q&rOa!l%cLT881^eI!!;m zu~@=;D8xPQ&#?b+o2)@XhY*YPgak0kMcMd3@zaG&;AKaLz%%a;w8XyV#k2n)aw~G6 zU&EcH>{ESe7Y8UNQU*}hiZzt8Syj8jf`xD-Jvta8AzFWd8a-U0$kAmu(Qz6+-J(2m zZvBD;zyCuzD?^&|3;67%hdWf7b$rweD9tHQ1eV%?O)C|mKLJ)&zdvDxFoIPiUH`pw zMCSdge^eHVAtNyyROH1x`RB#bh7h7fYJ|7Q58Y-I->=#bVd%!~9z={FY6Kw&IRAT^dYz%4D01QrK!HpXl12*#H0 zPqHb>Z8p(1iwP>sbG)^m3^CVe7ac1qfF7r#VG^+qNKv!6NsBU*{9duWl`-$%QH4tM z&=^r#o^-&&oyMf5m!iaBP_NuhwbX|R_g*E^dKwXYba+zDBNJ$BWvS{pF(Ca{Z1aW6 z*kmDl#dz@H#4|l8tmebcpwSBzaw?L*N^45!$1<#q#O+bxj7GWRK9WNk<5)yB3fyrm zakb#WCh4(AvRtc@G>1j<8)1BbCv4z?dM8uhNyHBR8 zLDk02Tt9okB2ZrHoyZ{KW+O*`Y~<#~DrUvuWfnStU*R;WNkdp@wgmH(1`<{B=Z$Y^ z-+J%7g**d*7Z)JyNOkNF>uBR1B}HGotK2s?EyyjN(<`vsx>+6AzpMhkgD-O0ns4%a zEK8+kekNKv|0LHJ}EiNZ@bCEB^v zS!omMw>%}{fq)#1)2lc?I$ihEa+aEcV3ozjh1~CrvTIQnwrE=}RQr%DotJKDTgXzJb`Kk6$&z!CL3O#<6$;8dD z8fREiSmn3F3SselXC`*G0IcyQOs^6>TK-@t`pOv0{wYT zg7R5>*GjsIk-P|p!e#cfkLCcZ-8hNiF`X=v>&s%X915b7?1uaXLMxKV zRczS1-jg8!_lms3%O|bcm8wjfRJ=!2&IjB=03Y)Hly;g(i7QNq*7}UN| zr-RPCEIL^6N?B$e**cgw-nd!GOcM(9dOU~AAfT*t1BSMn%`ZJuCr_~SB6$-t&tyAZ zo+T}Dhg5#Ci={AK0Hb(hoMG&+Pc4+t+(aOtPe+Muh*ME8hpW=%H+`r1{=CM_VYv7) zN^h2cr?4M-TT_7u?|>49a>9O*7dHE}Qto7B?q-&id_ zx1BDq7{vRnSt!cxCBb$!E6b=BE0<;?USHp8>y=qWFdU*m`|VRmH)*sS&Sng>el~z{ zhmOHM$9Y}@Z4=*2GPPd12gjr3d#4vu4U*iauOJS-uGbI{e3{*~n1K-TrmI!tRjZVT zMYrb!Nbj{Y+vo+S&^>i6SG}5~ykVU_Y6?_7)mn%I&1PkmF?mjlflQ};N?Dg8W~^EE zg^HMhrzh!wl4hbYW&Jv`lK@xO7#>4`JoO*nu>T0;{4axtEq7G_>4?=%3kEP%i=JIg zT1kjVzC}q9r&!X({x#o@`#-BlRLnV-Ir_$6dk3f6Nq_`5P_IGntclPzY5-i*)x0kP z@yw_sj;Jbh9*?~S%)iT72-}tV`;PQ;hs`>`Pry;0>-+KOnf2U-q7i@At#P5(PW|%8 zW7MJZ!1gvqC);brCP`TfU?8+|r=#=2g1pIL=&RPXLBA-f_<5}G^#h&WL>p__X;R9| zh?6ZZHz0ZWl@jhQtKFn>N@sof&rk>7g{CmmN;6;d=sb%09MslWkSua}w@f0;I5QKu zhLUHb2rl@Wngh)xvHO+pn`280WZHK3W}Vp}Zp zk`z+Mob^<;U!7WAUT%}uXf-tfd&6O)G>&66fC~XCutJzOn=e2XSosH+7KC{AbGbDG zZ>tgCuKm5D1Sh0l7G^rd6n(OS>7n^|sSXnnZOS)|RShGEvvb~?ald!XOcqmI`9EUv zkId75OC1VBeszh4pAPbe!qpbTs z1Ix_D%J8qPo~%;zgNq$GpIj@ON-mY*(s0N>*nDYw!!;;NAY=5CHC~OC3v8HPf6pDx z3-T1D;!Ywf7$QN=)wk^_b(KY1FFSaS@4!Wmd*0^!7(~iCWT3X~CAcN-+HmK`QkOXp z+kgn%2YxK5V%pah6G>~NJ!&E3Y|zfc355{VzIb7^zj5X>+hdp z_WKW3WKPaj2=qf{t6IyqTfhStf%qYX_L4H;4R?gF(2mlG!8+~+b(kAk$*_x=oscf+ zgC{7E;gMZ%i7?6Nsv9B}ZHHk?(XWhz5~R~5clZTj+BT%J`jW5?b(s~4ZR&w#St*dt zFNF2~A)B%F^e2@*em5Y9XAW8>=`{H2_?0DyuR_E$s>Y**fVsRFwb-Yp?ke+~)KdEZ zyw@(+;-zE~(i`2-&AOxc_QclolKBDiTOWWC)FM>Sj020`5Lb&7)(X<{LjGKoWzV4GQb%i&hNipk0+`1a zO!kH^0he2rN3P4n!>!)DdXp?dS3z+Qbil?sH=kRV%|@|2_ATD3wt|`wO>A;sTaw^Cp2LQ5FIyL=XLt~!C-WYQL7mBZt)$r&ZCMW zR=~Z#??o3>5)=%}&EWL(YJgD4P_+LSTZqxPyyI@mm1hRu+%&=336>Ep9Nl zN#S9f%v^}7*cVVtVXQ~hbaIeJ()v6K| zyEz_zuZOZncf-exLm#cN<{BwefBLRI;)__&Po#$r_p~T(h*~cqagjNi>0?Hi-GyX~ zzxi@JsMT?;Enuj}v4g)@d>qO)9YYKfs`jW6lax+p-hX<`lg8_aod7l=Id;U3fRMqi z9OZnUqdISA`|}E8{wI_4TlzK3cq#p=3>nge=!c?XlI90aEp{9OH>Y{O1+3-0wR_i} zxUc3hZok-cx?hfnTCrm#_X2c5s{w0)SqanB>g zizb>jM#`jXLGdtJ1mSvD7cYlTBOMx;(f{0znZ1gUrar8m%GU+H?WuIkhbxx*Eu21M zS=*e>M6GzB0ce4a8K|a$##}H>^R~I6ybWcG~(D_i1?6b!H8sK7|iSgsmEe=U2}*6|CT*#Bp_tFKZnllJ@Y_)6qy*!63$a{}&soNSpgt#Nv zB0uIW(?yNow~X+vb4!e)!P{5z7vkTo5z~4;gdS?&u(JA+tzJ`S^hsOBfZ>b-Rl^|q z?&yKJ5L7D^Uu5>EVm9p~%q1CkP;NUnKG8~TM^g4WK3>+1VTdn)X|$yKNAbemk2DUj+216aLY0@@ilu4f06_Z?EA`^J5|fK`Ne zgF?^ZYXOPadg~+{V2%ERkoF9DD`W|fcXYHw{dwHA=VqA!+W;#?E$s1LtC#u5kyAVS zr)Q4^NkmerH7(Zc-6_xa@z>1b6Sbk=Yr~&rlwB?Bh7p+T>zcE{e6W*#-*&?NTP?2z zeL%O>LiHAlS!$YGi{nAmobimF48-sZ2@}vR((HLugQ+6jt-}WWVf||>KHGlHWL@9B zCj6<8&{;3|XwWEQLFPh=uFSjv!&iee0BvLd{zhmgrZ#hjDvJkrqU8hFP;CO!wIi%f z0@cRY$T)QrNLZ+s=8rk_`pZVZXm1E8XONDar$tXHvO<&0Bs0O_JUf~ zAE`GudnuAI2yT^Bp=_SGR6Pu@EsPQ{`4KICMG){2DDO-Kk$&zU@OOAa-WFSf^#BJq z(a5}%pxgK|kv1QRrokk)joPi6QA}b18!=oq3(bjIA;C-xLh0Z;oqs>5nh5eF1}NYm zF48e3*UX$<{~$IgKO8D=WJ?m^b0cB`1oeejzKMVnsEWC=RB?Uw>-`i{g7rIGWBfFY zkScy+hfW!>R^EsNI43c(z4)|pr@GmFdG}lin{(JkEfVGHi6XN;%1KXn*Ba(1CV#9dIFX>D9w`tEN2uxqj*UwW{{e<@@reZ2= z>w?K}WMRMctFu~6RHPb)r+OV2LbwH>JuZB;?Q9u5xl>;OBW#63SJ{!}mT!wsZRClc zfUpj^ykWN~O5FUFM^1nDK*@*K@YbEZpj8Wmsr7My8`H44er8?q#(De>nZP%;y~%J* zbBf!}%0wg;w}vAm+h(<%x%zFo`Fj(FFHI?sd5NycM)2_! zoxDSPkp7K0M>ViRy%E?11bPBY`*=F>_X!4Kd|>cqUw}Pe2lfv>3=?FN(I6JgI-*b6 zWJsul(OtItXsOIBcOw%;Dw^Hw2Bx3p&_GHTIH-1u@kw}JF4zzT{xf2(E`!#kob~GI z&1y-iFe{Q~C%9FJA3nB}@Rsn^nTrm%8`3Q^lkyyXFOU@Ld-sBR^cIFD_|sGzQxn#~ zsv-hecFkZw&tD_4N;jNJWjKK13zheD*pgzi%t9-T)O%rSxUX)H8t#`vlFYiuuZO^gh<9F=x}sqJZN*4xq$-M&fJY3!lu4h? zgHU!y zQT}WYdvI%Y90JBu9XTg_zTUKKCz_hv33uyvyj6hrY4`i5N>9GmF5UfkEx_m*r#ZX+ z1C5D@gkmKxaVoNx@}M;5is~Okkp6^Io$W@KhW>-LR8gxzWgQ@?eZP4}mRH4A$zmC0 z$2;_4Vl~Qan1J>*l5Z5|BMJw8gX{EeM4J5?a$_}T6+xmd(-{p6!fEK)o4GSI;6V`Y zrmj4ZfN_3pq&7d#zZ??cH zG)PyWreU~_=@gHO6@)z{&Iw5L_?q$4I3Aw(k}{OG7pGmn6a||Tk&)7{hM(zf`jy*e z5JatSa}qd#rYR2)L_OZqm-t4(fd)P8()dB|IRP}B&D`BRQA;6J;f1#WE3yWxxLUb& zP@nk`Pdr(h2d@ba(wIIpg~`{)EgxLZ3M9+do}%qA;+P32nTQFt`M0x>_f{A;nfIC= ztDm#(IEC+p`O!lRohG00-w_2iu8AKjm#%{pin7~2W}FEleVD^}jWU+_Id2G9x>$XU zET=m4nhx&NW(?*vvM7~6d)wBIJTSLf$Ff{2L^NtDliH>PO1mG-@qC~9XZ7k$l6yNu*D<3eU7?TT z0W>nG!^MnW$74xhsezMHq9R6Eg~RJVXOh|w6|2m@uD1oxyx>e^BC>c1LzW&4yV5&V zv@ck$D z^PI&tl(x+;>=yP_2yR{Gq0>0kcGnp-FQ}5(um6;rb1P8-@KmMJnuZ0hyvJa!`kF>= zx`2G9!R#_&cqR_)xffFcWE!G$bTx82(y4(sjOyLDn1nFD1Sr~ud#b0HQrPN0rq9PE zK`w=V6k3J?esZKX2P4bGFSXifsW=oKaZz@hDjBL-f-q@AKW~%?#?N+4mnXizlvi>8 ziP?6csY}n_U;AU!)H!EELB}=n-jZrc6w*=6TcIzLuKLdHRmqA6LP>>CQZ63s)H-%dO?=mZ3%Ft4Y>Xj9Y{; zphhZFm7!KXcQ7}r+om^A;k8-_M4-+T0L7#*@Bk-#7_rhnYv+QSfObQc7v=ECJwJcB zfF6+Ny&~<=6cXYW0w#23@r&eaeLt^08e_^2w$=UT2QNw+vpSVS1Zbn4uM-@& zO}9WtKJrLpg7@qAwa?S!c?7ggcC3TLyvsUs6?Reo-JnV~lXP@^r8lG`A zQe63EdY5gvaN>esYLOV`LJ8@+{U(6nMcx6{n}J#6Wa?{&Rvr+WKd=2bmIFRZ?GZ~G z3+2E4GE0GuQxa7S6-NEY^;XXwhX{49u#y6{+(#D;hi?*V>|5-MgXf$|8~xY&is5nG zB9cTXHIO^${0dep#XbS0HE^9~)lQ}u;f#&)hq~*RB~dA5pF)-o)avHe{e6q8S%pBg z`y2QaRyEuV{H(h4_$4+BOir{7wkJ9nm^AH4>nZO^><=V_BV{1Prrv%l_v%+L#z#QA zveG~$jZ1fEk%V?qHs}JFVryn2i4+F|gZaI8WFb&B#W;>$OTy zC=L@lDYEE@GaC#ef7r=b=bu?$*tp$()2yuY@O}31`A%K;u1F;n+*O&YTp6}Y)P^(z zpxJ0Pj7`z@vDDvBxc1Ad2a;HzTpt8ydTsgDI|!tudC4w4TY4n6ZB?ml0bz?dN**PM zm2~RFykgsnd7Idy_T=&N9s3h%0}Q7+dcPGy=I$#tcXi9%X{|S$2@OReA!*?frtgX% zj#Z|D6top9>MG=lpEFiKkOlOF2?eyH92mi-wGdM6Y`CS%*dy`+fO?q&DZ*qxvI52v z0jsbHJralZgh&K{F;_Dv*H(0LpWk1FM|(v-J`=pTS~E?oLnfZrmK!*WmaA8u0@!)A z6ql;EBz|N|$$Ao6q33Muq_Gd5it8px&0MvWLn*} z-F-LQi)&th;!wtU#h<-72^{vkm~Abkbht5fp3BmBvCR^g>? zr%e^TH8gM>D1ES$t$G0|5r55~WE=;oa@WfLZP$u83TKkp0Y7&-_0lsQ@_W_1XeH$k zXW4TFp-cxky~pI10I}CXg0(`+|7d5P*sf{HtVB+t&v`}(xcdA9d5D%#cHa+!5#ej# zB%i-&JT}Wh%}G%#lU#Zjx&{-;ECEB)M1L5>lqM;YX9>_YmHOLA_k*B`Jm%Z&g-@ga zQLXlC7Jh@*UImldT%rzWU`g(%3y(#yLDnv*j_m_{lIW>{M&S9=S+HA-DwcR$`uWet zD(82J(ukTy314&VRj&n0?&RA-Aq5j;=jP`7{W9=dY7ZaCHzs-Q>?U&XaLbT?fU?|9 z&8WxW8q5@{&fK%bpwi_r)Enl!W)+Oj+OAzk1~7fdcHs>-g7e9z-lN}r zj`!sZ49LeOxUDj%`%$$35v6cGI8mkTJtr6J4P?a34BsW_Z8%~Vcr42A5j*x{hlC?ak<2eH*TV1*puo;h!`r_brz?zxw+&hCQphY`WN3Nv)j1 zHG>Jm{&wKbiO*%*3$X;Z!HJcsie0vUqUSFOF z`aOINYy>MrJ6~3+1n~XhIPA?X{o<*f8Y-IMJc-#`^h)eCG6&gF;9+I#$NQ4!kJwu) z?VN@_(xt4o+~H*$6-^G7-@X;%Y6b7O{w4dDh3&7SonrqoTMyM^=1%sBK|GcWWau6) z+sooB)l^+mZ;z0p+9;hp$i>;VV-g1SH+Aprk+%JJpa>gljt2<}Hu#4crl(r6shlgj zM;xZw`HGQ^*uq}u|D@ov{I9y3|F(r1okwe}w;p7v6a{tCGtj?&qn6|!53W=XRL#d6 zMP7rfQkqgMMvk4Ys-?0S_X-M5XwH(sn}}FjVgYifuhR$`IV~xd!8~Qq-?!kfOiVHDR!)6A^Yq?Gg^taY_(KY({;hV9(?Px9 zAtv#Y?={g6LpEGruU4pCKmx{p*)BsbeYRb^l){UsFozlm&XFH1H|V5 zS;;Og+K1%hEcghEc#m=5VieY*+_oDPD_BJbcma4t{_S}DA2Iny^!dMy9-3gXl}ILD zYo)eQ{xO(x{}ER!l6)#H3d|ejA8L=Gw6}jbJyNK9UX$+lhwg4{7SfV$-FAkpCw8sx z_~-199TIT3PR;5Vo?o2fa$9(>T3XcES`Huo^m_g;qW|Xg{3BrdKYKk)|7_Y7lO+-eCn~?5PoNK|&mxpNVlwkLjIC#rrLJ9YDb3SpK?%3V0k72qn*4d3JhrC6V z`Uy3m`5S0ahbJJ17eCtuinX!dD_~s`n=!Zepz<|RBS$h7R!^6Vcj!t@n=Y|ZW#YRL z`JFC;VTuDDVcA)+(Xjbqj!$W*J0>X9I}i|T3rY7AXxOY`n4@Zy$6_XP=%duyaD zk&b_GBf!i1wb>xT3ssmUlKiHQ%EK+V|!X}_H~5A-g;lDR%}5Wf%asnWF^ z)*gi!=1HC#QJ?;e;QsyaP)q0rk0B4qwL^Aq9Yqq1SX0 zZu(cC+h>FC5k}*SGVcvS2LG(uv;42}-2aAtlO`hfKB{=hvSbqukVYlJ3c^u4l%2?heM=zi; zl`S+>ji$=F@1=6DS4{pya|7B!BTp9<9M!00~%AcI@Nkw?uCF!9&N+}4r0R=0na zT7O^^%P#r$X@ovqD}bI$11+oN^E7oRP>$KO2nzHUyh++SI;#sz zLP|Ry!G1|3hHZ#qEc7n$d;nG(o^2#5{C7uB)(B-3)BOs`wkYg(USF81!$G|Q4Qe`* zZJB&kPrLDL1L5wKqrq|GlwNx|Tn9u2xd3S98iLG2+uZwLF#miLQ9nQP%iVBja~oqs zZFj0M8&rbS;D1+BGV?_vFEN$$Jjv6(Bmol=4e<~I8@^JL!`!b?+gv%v9p7K3SG|XJ zH?XAAr`L{eOa#`Fqlm{QXxPLQ;@h6_ot06a=V3)aGDc3Q;7T@G z_Ui&~3B02{hRoJ@8r4)MH}dA>C^!?L$f0dg5>j9t4|BO`FT9*RjFVZ4&T7w^#Q#E{O^X6q zem(Lg#}`stBTdVOU$B_ZGFyQ^vaZSQr=^<%$F#xQ(yufclQr^F%O>noz+~*-;Q!~u z3QTtyDLX{!$M+DBXM}=Qx8jX9v z5Mq%|TFdMZ1AG;_h+u!MCjS}xK4_kd)}Dk?6y?hCABf4MPizpI?fY14?o2}Jigg>% zCMyi7xbkwdfSY^PId9zeJwIwWsgW`DB?D<@V~9h13J4%-9Kvo@lQ2QJTT7+F-Sl$< z?SKy-ZA!Nm4)vL})Uky&!F&jwktJcD0DZ^%!SQ!C=1_G5V>b}%d-|8mMT>QWLJbcfgtUKiSm(L27?w# z5hmiuB|orf`WpEx>_pxAnO#b0VsFA*6@nas=?}uYG+*qb z5MQjZ(6B6Ru!hj7#fx3gOEXQU}Uy$-%zM+X}5slwYKg zmtU_~^ofg#0!M9&)JHGjMlNQ5(owVx&OgG7lRZ%5L!%~&VUMyjypU+3> zkX;^MwZTqy$g0EV>cSJO#Z(H6eQhg1L1a_SYii;;sVHd>XQz#zZU<72SKPIilo4LS z$!pEe#ZY|JRy!s>1!iu+d?V>Y5;=8@?S);6HKU((C;(q8y+_m)F=DOdJ0-f$)+htl zjZU6dlZVH=f*XF(yM$XNg&2GeR7#fr0NB2YXV-Zbi10T`QT9O*jm5SxCzU+Qubvxx zL+V_1csVqAOVn}Tv~6Ocb^>|c>d7yVMN?QM^bgDG%+&lHdqsBgZ5)^<qk!%H!7F`NZy6mgsWb{62r=Bc0qxAX@9-}Dye@-}!|kX06&0@om8A;?qtK}9 zkoWPGZTE_17E$>nu>*G(in?6|-)S^H9_7@}bO|mE8gG+cpT?r}!t7v%XF^}alC55O&qT$}`dzQH%bAP~b zr{l?KsULoN-5g=ziB{jTWH|w1b^##2U9=)$ecrlSlVup9HI_k9MPg|R95I)UFoJRf z+}r^hQ#-au)%JrC3J#lhsNVigUdhn#`)ytfN7>_RB2aA19k4gM$my6(bMQ3eBcL#@ zC(R;5W@kqf(17wmlg)T8fS39H5c{!B;V8}vZGDGKX0u-30h26-=G&~nyD?> zYjiIgBrA<)HOZynv*c*KQ9&F#6?9x>po()|4M7d;Lh-Rvpm<{jGox*@B3zN6hmb>8 z+&GZ))%$!pc)QR#G1b#~DGi$$sp3A`6x3NvVYkILtg}kl-1npl*FAs>CWIR>WJQ*8rixt~;2Xy)qV4Td72s3gmhjITkTy@eYauTfvG% z!K92socMy*PLS{ztrF({vtJ(GrVvMw5;No1C8735Q_7(P&L?Ln9OfEvkLp${WoJJn ziJq{kjH4o>kK(Xal4@;Y^+efwNJD&n9c*41$6g-W1}~>-K|)#!!FU1pxnJFhhzZag zCTexb!*#rIbofn3BUZ2)*RMO3YD6o0#|vWF`wbR9h+1AVT0f65bKveV zlp$?-utm<~pJwdw#`IMM)1mSL7+ub>kvEfvS>z49CSHUH_`2WE3t{sPm5r36B(7HrTh-yiaE9*wI;_o&2BPX-iB__ibbf+s-kr7$jTU;-SGYXAi z_feD2#K&dYPJ|hcb~f{{bV-U&b&@#Im0OZig|#ZQJRAt#Y_&<ap*+X4U{Zb9GaV$t945ZFC`J*q(UJde<_`a>zV=>R10PidBb{HReMwU+wFpC9t0 zD8QE5j+weJIr!TNY7=)e6&D@{m>*?d`-h;L;hGMhc(hGU4(nlqJ7v>FQkT6OC!(yg z!{)Vo@3#;WT6zVuv9U`2qGC>N>061VqAI6+)UZ8}UHk;MRxBIE8<+O}GHYlhKv4c| zw`p}bUOJ9@7M^N9U})kW?jA^rf{W_Pt1cAQn#teG1Ien*C!kN`7dTv|PP z?Sr2G_oyE24fX-(WdpnU)W&Vz%B&|qR2P`@V*m@^O}Yi*D0J%mI9(&v(fVh6TPHud zu901rcjP#5OZj0hDuey63R(m2M=uiO=O>C@0yfvCEt=@ET*tp>1a_9j9}Y8DVT}5! z8Yyh(m(C|YvPQwS!cc`s5K+ENb`^xNK0a9gL~(Nk9PW*%7oWQ=T>Bc^VG8S+u{-ge z7&YpL4A*Mtj#KBc3QlqGX5FtbdbJ6PP~g?9f+xn^bZH|qmbE>LYaxyzAiFil7LJu^ zZNaZ8=|^Zcqw}{vI7mA?a{st5*u#?4q2c65cj^r_V(Zmu0Xf~rD1H;|xB?*{3qv~0 z=|a{`e`Ux{(^u9=O(ooC+`YE|^SVijKAx=Zv&U#SW_T95avJYKrK7t8oB7#kuSyl9 z+*uLiDBQ)7zgF0Kn+A<#eSY#0^>N5uotA5EF%ytqz5x}P_U{ z|8Whc?XvPZ;cy8q zA>(mH8;#;}SB#$!&sIt{p*q@kdW8QW1oPe!7}m&UJoj&%(4@)&yAp$B@l_rZXhzyJ zcUXtl*1nH1fYBB&EeVh}7GP9c_7UQV2M@p5MwE;}LL6b9{ml@5n^9-ky%!jB0$gu{lkTSmojJYdqzmNSDHa%6NonrxusK2uEbRP}@<4~zF_;K)f0=Q@kC8d@f%N!mb z<>djX1fI-UEteeb5`(#j_C&C73v66gneOH@Jch-hq|C+)n7IQmPzc=6J^ATZ>R~Nu zYpzZbA)uv37(jLCa+M?&i=t5)&dz6P;QrXTIU(}Xp6%_oDoKA#t%tZ!TKw0nf(7eH zI1mkSOlRmcCuG;jpx$fu9V6w1oVbqLg-)jkdLV@hSQ^@bfRU2rh0#B;?QKjY$lAG4 z$13S~i+KSKVuu1449_|~+SoUXcwimbrF11Tqu@aOU|1Dn6P=jz<<|}d!55bU124zP z%g=N}6G7UN|UA`UlGA~46@ZufwvwrL(E zr!=(O6hQN*3DpJc$JAk>(C0+i@?&=1ETA;$#6|Pbp zoZ@u`U)_=A^6FcAIXRz{Fn-8o2n)5aCOwM{_7)g3%r2J(t{NHwoZkoPK``9k)QT;eiT1)KZn)}mN<1c z$i`06CCt-xzSIt@>t6qFN}E^ai_s5L zaU-dP>-rr@E%1khBX&AwjiCZ5!A?peH2DeT_?$m|pXW z8bz$F4~01`l)~(0R*bc2Tyy<+RHvY|Qh6F-kr~>$Y|dZc8=RBJUr__I5{G$NsGb`- zXu-HBUR2p!dH5}IdxcemZ6f_zBd7zHY)QZS2<=T(^yB+YL^HcnWD5M^EmIKCO>p*Q~nSEZ`V!?FR3Xk0~616#} zZ6>~|H+{UK@S@+xYvCn9)p)Bp@;W?G58c?TD9G+lM`;o6Qo7hvEyA1; zSsKIIQf*APAyPA8JTKc5GL{~+8mff)h)tY8(@7KH$8TL5a5=9rDd(LR7hVlm7*kKX zs=_}#HLgo4s)b{$ZoUJvoZgTRuV^c^GcpPJ+Lw(B`(aC`SHD4z}q>Z%ZeDU zS8f{j-L)Le6>m(q09?0~6)q?z9zi|$ApQlf##-I9P!XC=|A(@7U=p-llXc6sZFkwW zZQHi(sxI5MZQHhOS9O`E&%~Tq--=mtV(P+e~aDd>Xr6{AHE?XHlHK})NV38*d1>=i8(`T{I4)%v}KzjkQ7Lbh`N{%cAj<*v5HmDhm)CVLjs<<*BC~9KtUG!GcwjZ1w^u33^#`%)GZunO|U>JsamiV)3)I)&NH#G>9cAv=T_hMt~!QiVSm|BwVfq zG*K{fh`;R{(o~CJhT`JEWuxAokbHCiJd4^#qAuAzt!X~q@583ChI;x+-m^`@f z;B3=}>w*C}(9mC+zQulejt!xIf#Px+r?xh}-fBNT1wP!>$e0=q{mePBfyJ;{Ph|EN z5=IdHX(fReF0QFZJ3xnm74*(=S0HsAR_Sd8SrlSr1j1l)??&aBD$}cIJf-ek<04rH)-;!yKJ{cnV`@^AloQeO>TIA zf&P)4meAQk2T37mpP2_0v}dEHtj`r1<|Z19z}p91d8Eqv1Mc|r$Gn>-UuPpm zFvW6B8AE<+p=D1x2FyyAhUiZT4hMTTGQc6ciWbbF-?G zveCa*?9}daj0~;q8n(Hv=TO;-6=ItGj<~FE?yzV9+XBLH{I(a#o!qRW1!PeW%9dvl zkmveWeVbEGENV)kbSJ=+*Cb41RJPbxVhs8wzo3)6Eu3BGKl5EPGT}3&i0)vffXbgfw1V#N0Ws z=ubt%=Vz%WcrErvNPvv86!#muG^7^(JD^l2snXYZ))Dzvu{3k%i-ZF%A|l80Hv=EC zd&vvoPo@yL=uW?}sEEomurY+r+~Qy<$5yN@Zd-w(;mj~a^TnMX9AVnjwHbDg^5KGd z11qSZSS|49D}`x70F2y-0yfAT+?}|IMeQ2F^U4mm*V%Q_vEo20C*0pgO;8MhG_b0( zu7XR(lQSP9$dr3Y0&L~#2YuWTlECrWW6u04<^SZiv;E)ii)L)pryirE#0k?_YSv!? zd@rf-%`|r`hCzi=KgeDF;7#v$=ym~3RLzhm{-NtJ0XfxBJY5Pd%w;(AUYiJ@*#4R~ z^7^dec~xo0Ux0IJ;-{lhl4gB>q;pF*w>YO-c*c)bMVYg=;7grtf`t{6^R1+w%4=6y ztD(;0U7Ar~o;m8jHC~YxjRn#>YuMxk0ky{=UP*_i6>3sDz>o{C`@OryZ90kPU*YlMat(kRbv*f$pLp^#U`jY1(-pOCb8vwUXG=qC>{!~nMTudePEI{O z>#<(WK*m=djD#e&_&D_3z^ddsAgu!+RB$wp(mdGImkxQ!)Xa*?Bcom06{ys_m=m_z zxiTadQ(lELIYG5@=ioQn^ybAg@DvE4qVK^BOb633*aIY<5r8EToFTv&V;g8V6<7mU zJPVT>@Q|%1ddPzagAMuMXg?-ZXo|XkbD@@v{2QSSsyfdDMOdj%PEp+NnBfHK_f$`4 zTi00i(jj`2hBLR^U`<{o8W|$L@7-wwv}6EH!461^oLGv?{TA{|1t~X1vc4yvZ|i@Q z$v>Vf{&y%dviPcP3-1@Yh&R2EAjoJ^OQub6*3!7EM;;QmJMhQgi{@XkOq~LF{???E zNZTK7YKLv3TX<$hxzcT>Y$4TPizsc1$--!DZHY!!H;jawtiV-mTP~iZf5tNZCDMPU z>TLgKB*;Hgbp}BTov-?A+e4bl-jXImj9?RePQhCNsxCfh%4QEya%Hlr~?^$OO9Q14nE(+fXmwB_Hp+tZ_ek5d4|zqhY%r;DbZb`q!!`;?Q>7 zhRJ-dKRZK84(M4-n%&I;;2`M}AOS0w$y7&wOUQ%E8EB0LG-Q!L5hK2wf` zk|(y@&J{piBcE1>fit1_PS_r)4O=|fUMY=R1Nt&6r+N{89YkveXQ7m%gnr!*x1b0D zF;fPJ4|-|qg^<}pKOFzEk58?{iE^q{rH9Lr# z2g2}X|}yfHSGq&|V zS==?R=|;E$Qd;9V3ib4j??|~1i|eB!f1eM_m^d348#o&fu>O}~|G!whXs@O|aP|TW zo$5n*26dcxqZ2fEa;dy+@tvAg@4N=naHzNBYas#$AA2-h1_Si^--5;ed!S^*5e~$= zn68(9@QIQMC3Ge;9x=BA0j5xiv~CHnZ=omK931PJsdi`tX(OL+pZUDp_AK40Y~-;m zh7YGe#5%mph=$BVIRjyTOjF#uGu$XJntWZ5@0iqI=xqQb%EHLBxJ*$H4!BEu!Jtok zkK!!i0*2_Z^G%v?1F>VgKx`eE)2N^B(p^3*b2UdG)lCVnoPm-Ln$uBeqzfcd@katg ztd~1EBcqHAU4d+(DybgH|D%-dK8t^PlQbqTEt)nuk_=+q`p!J*h zrrhDh2e?GD2bqM9l*SpXo@9LM%7gV;DE8Xt% z*qXnjdrlipo}bJe@HuFp^67nM0_gRqNFT7W`?)S+kVe?^;t=^eZ1otR_teClj)J)6 zbPGFiHaaoC&Tj|KNmzS+K|zY`Mh+tB>8d8axMMnz8DdLh3tv99{pV;fvyjTUMJ!@! z-1$g(h)E^NRzWdYfVKL?d*?ZMJ2jyHDE^sq1@Kl<^uZ+D)I@%PcifEa4)F{_2 zJ!;;yI?$VDaN3SO|0ex^kOBXDrq0MtPyerX^J^E1YBbU39NgCtat`&~b05;rS7h)| zL07SWN0Aq%?W}F38PbgBH0MuYD;oiH;5laueT@T>JrCpujM7_q&s=f)cZO{=qX9=m z-s_^!0A8?JSorrc#~cvXQum#@=NP@IkLqRUZ18ZGluwqIQXeYRHv5iibOzjEQr?C; zJpy)EDe=a@r(9M}?j6*IndL(MIl;)Hy8Xfrma_W~TEQHpJvB{X#0Gq=O;9v~PrIOL zH+;Mkw7WdMo_664E}TWiTX84RSde`8}os6*GVI z3igRh9sI;T(hEwrOIKWrq>V{t!}4_B@78Q%7UH}POL$$IKU8JtRd)0w*T5y$7>P<-4x=e7&moS zJ95U2;_A6lTYGlOUWS2A!dKErQe%X8fa>z2B#Be+*lDHmAjf5?v2c+k?UlXkh`$%h zW979jf2tS-v@k*$X+1<*Pfk(PDSSOg;} z<1?AOhA7iED803I#2JbZ*xk?iO+zW5j;f`9=suFeR3E=sQXm99Ix|e>HlDo&b&CTo zOKTNKp`o>ZHc$bK{q-zW0mXNPliRjDs(8ll01}P_1**RcOkIUy}wAhS1`|NR}TKXK4YzLs%a+H@YTVni)K?A%y2w6a~a}!e3 z*eRsmG&ANYjnpA8P-_mH4MOi6#)pcJ;H0#J=2i#Ag2NJT6x2+jp><2z5peX?Oy2y} zgw~BUcBkWwliOS5?b&ThPK=g$m~-vq-KCyFRhCoX5hVHG%*0? zmSr7SuP*a_FK{3q0cdwqZhk9a=xv3^A68!;;Z|fzx;@R}4szdX{C=Hjz{C&q8zI>$ zR2c?YmK{oq!x=1TMd0-sr8pf#{C9d$-2_Da@4JLh+LQARs@FlRC?SN1AfO96-_^hj z0&1XT3BoUdb9lzAlMn-4AHcfsCnvIo%JRcR7acT~hbiGZ_{n|&wl;{~eEg%lE`&k$ zaItYU1nAcqMIhhUpxA|Iyk-^bIoosbM>tN0LgDIar;oBMct>(_^S0&-<$mLS?QpQB z0;O(x=Ek%`>m+F;UNEC*%S1e@$4PGkMLo{7+4LU8FjOfe#@Om0h6XOiDz^L~8Lzm@mw`Y^u|)RBn5d?H@2j48jPJ6DWc@AMQZ2h9GupjJhp zBwcxgurktq`V=vDz>x*a5G@0=6~!o06DryB@1|iB1pJT@x1_RTUF{bpx>33kkI&Ec z*o9|J4!xicD___SpJkwEm0?kiPnLEIuWbCl57SA4m0a;UX2XP|k~A#$kzPoz!OFSb zsSidxX8g`2S1oO6^4fzC(WViSE!M=Wg@pwF-6n!$YQD$#sjVeH2wIb8lgcq(K#v#;5tE&B|B)N@y6K6*u_HY$GU5Q9^Kc!dx()>PxyItjs|M+ zJ=RrsuDgpzjw24utzctU)Xq)l=lg`xv8$JR*66e^ObxG)BNkev&w8|j+;6&0qS&J$?|P4oR=T}f2BYnH8K{2P{Xq45lk z8!qMGS{S~yE&-4*e$!mVhqw*VftTK-vLn2$LJtS4c}z3TUlgeoV{FpIjDMfuH{~vB zL0_lO^{z^<`ytvwve+~TIswb>T|4>?L4>}h+)-`!nGFGj^9N3LH%2;nBIT%OWg!?m ze_1WMqT*$JnRwHunV=QCk?PWKN)oCK$IRhkqCd70_jsf+vK2dYGrcdXwj~n1zxDZ! zpFfFIN6^v#$oS=m6mkaRMEHE4r%}Zb5%y9DIebB-a$!sI+dd*DkZnggC24zDu0q5@O51@m9(G~6|--}M#R(-jj$%4 zN*mId=$+9=nq8`IRK4Dso`^ql9xbYMg5@w9h%E7KgFyspmQN}b z#(7Z$(?bURTq04(mzMs$iI(UrW9=)dmN%9^Wp;~nf;`44hgbrt2n%tyz~Z~Lu+i95 zE#LQR_Pf+B?`zZ#RYBYaU=>`@4c5M$`z(NHg#Xabd4Pjc!oAyP3LkHTyCJCF?nX>n zcq_+&=Qxq1U9Y|rny)twftm9LjzJnYB!`=a4o#qQ`<3)1bhd&QBoqd!j409}s#3}H zFxO$$h$P~;4#HYt!>{8tmO;lgO7bNnRJa*7tjj1H(B~4+oG$|Aw|M*gI3&l}3+>-; zrGDK#UcQjvNZ?6fUYzl7=op)O2zd{T_W;JMPt2-}Pn|rZeop5fr^0tjSRtfuy9Rgf z3}OR21Sq%plY0epLa`;C*7o`(H(vOt|M>6!kLIiY{lEF&-p%+;o<$>*6l4^9PQ}t} z9#QjAC!1ghSx`LDa(p_^Sb{wIykFX{-+e^&((AN+e}WXzFVlZX_v7}`xz@PZny&lj zKArmPA@&p=52z!#bZl}eFqD;b;&82J%mMbJ{Sj|eZxJD!kUhAhM98#bT(ZtmpCL`P zRBVk*!Ey@$M1qv%D$_Ld)Djl5Bc)h~*;cQ(Dp5b>lx-&MF&A5e)_O3{LaIZ{5a zOiy5zL(S$`@HAXtCI~R$tALkO^c5AEzZhsKx49%{w~01wF|#Y;u*WItzH#|N2*Me2 zM`8kT0O}p~X}CFF`{j9MabfZVVW~ay<=Tb_#BS&xcqx(f5D2MO=Un{To|_$YZbh!! zazmmPJfjiR*}+$sZfF{$Er>n=fGiCMHSf=BHsQ;?yH~i!A!Qrq_GT0F)t@@0v#cUg z2A|(LuoZ5xgqcQ7<+Bo27)hyD4FNiAXK3NrB26FlBozkYXV~qQDMC(P@5AY27;7qP zS$0JrDu3EMxuyW>lM1Q@VtQ+s&p(jGgF<-okHLX{$)lB~*y?XVRy2g*LcL& zCz-JS16lrWk5A@iC#fI3A$KMknoC`qa!3|}TaWD^Gj<%*lAbE(B46-dHzGFEXx$jy zGM?Pd_nvS+UDRJUv&ybjSDW&0i@Yx6RCMl)Q8bW=Y_#`$J(E#8f!?ahzg>y{HSqV3 zg-Z5+7>@tDX8*kmzGT7h76;0{rAaL8q-23K2mj+|2z5gdu_k??=ydb7qm*!dBAGsN z)ow0)lSFPHN9aY2j74DucU&8d9ppF}aVD9xU)uBMidTVK=q#~eAre}IzxcZwHN)dl zmv-k~5R(Ns@6R!WGJVR4N6s%&mkW&?lEbrf!y{d@7VsXBF;H-Af?r3%>aNlDV9$yKqL0?aKi2GUB8ZBC3{j%tKyF~NWOak1QNo01E)Bb>9l2tV;oH=b34x=VkV1Eoq+HIkqf zle;4h)lY|_?`^^Dk1L@_p_}cDa3HsWJjY-ELcB5$JU=Ym*;)xKcwct?LqKG55x&nc zCUZ`{eFO{WBX3=FU}S0%pg{$YkFI|E5NtV#nw`4%rD9pY*kSIY3Krk1(awkUi0ky-j$JrgNe=6(v=X(%-ivv;AT63Z_~VfYS!Q&x0l0RA9cn> z(eNA$fz#fd-9xp@y}K>VC7|R9I9RC$S{nz;MmXLyf?~_Jz=9Jr!1y`%lJmNly1Ktr zFwgl*E?oJyXEL$WB-Mf@pkD{Vx06N?x541Nin9j3JI;_*NBi=8kibDuyouxfPM@g0 ztLlrdV+sb#gehtz0Qx`1A~=U$H28iE+>5XOY-=wo%n=ovia>&&RqK==rH`mH4)Mp_ z+b2kP3VFe*W_C-e?9)+`OSesO%N#3V`z`RWyl8*dlCt4J>eRJTM2|(Y_4~U)xD#p* z-l&b9?Etel)+y3{bO~1Sh?WQ8g^SIxRKwWwAR3F;^~LlSLRk~vHrhCveLdAD4p5bJ zEqOK&KPO1}&s2=J(|+2Q?#{T&`F57nzzen_r379CO81^VZdIEW^$GT1@FsHS34m#Z z>@hPsw09A}1D-PJ;#j%e3(xn@1I9^vpBlkgY)1^z`HK-?oh1j~6?+YnNr*TgIpg)E zPlpvQ+7!<)mj>m`_COQ)S^fILv>%KxCbc9vK%!jC3{kg+@e3#Y=F8%;$dstA;fl9E zSiwg>=0!TB>Kx7cQ5yj{Cue0hWxz3LA$@6yjQQ2SQeQ{jKSLo}gXm~w+onsRB*_|C=FHB+7j zX{Sioxpr>K`8d73W_9F zen(FRw}hX%S<-o0ggJarX>XJ!NQpcZJjGdpdWA zd^;b5o=n=;v0`r~HWDLIaSboH{&O_RV$^Qre49t~r3nP+yV|s7ws?{1A;YgWu<>lNIy%VThlQ#jVe($+r-Fm!H}s$N?-|nk z%`!i}5Sp-3zf9oxV#)#5CCBfV;`l9lm}p?O2;+zK--(v@XMM49r!-saFft=@(5;g5 zPFT*ZCXP~b!{;j9#3T#^?exRn4<6t;(x56HB*IuL#a2#f6fTZ?O@1C(90xm&#q2rt zOT-SAueQAMnCqP|gr&HXFcYVZQW0)s4wXE}9y}QNS=Oh@{36kB-0YTtmu}=E2E;K>n@wLO;ZziQbZckfJV481wnYLu4O zpg#VCVJ@Yr&l?%jqzx{A$&O`lX*8+@+_}n7J}}&{h$la-{pq`?dFrd8(}_~zFuTEN z=daX$t#pH`YSG6c(jaoAy&CDe*<_QK41FUAiP0j`iEJd%(qfc)mBUa$soP2mOBGl= zDANe&Ln_ma?bNG&-Q(MsZseDpEglbA1f%-5YBuEnQ^)&;ID178jMhQCj+)oFdhJmB zh1}^XVA1D|YY7TKo`x#Pm2qjMY>2$q6Za>n=wMAbowzAeQkhVX(-oAQX#XKT?meE? zxGRDIz;YJh%Jw!o((kDo<=~-p8p~WB?aJ!{)hF_TZ#7uxf)ySYr7Otix*gh_Ge8DBNFM3Vgo0Zn;T$%Ldh@Y7eZmNge&Iq+cN`T21s{W zK&PdGF=VXBT6jwWK8T#UO&b5-BXqwGE0gmX6~jk8+A^38?-%NwG%b$K_e*iha#T|5 zj##bQn|Go%k@v~F^Uhizue&i?x3lrY;I;T!IENV*eZTk(X#jd@^i-G&II{pI;xWy3*3pceSUL?_*+ z+n9(4EMYsEQL?SMcYc^ow*blFX5Zd*!(x4Lr?Gf8VN1<`Xu`Me#TP*Bpfc0EGpd@y zQ+(v>#gFC|M~a{5{f*>ddjnq*4f44RO}^()@L@@gb{NZyGyer~j;0NBNOS~JW$b24 znoiGHgQvi;W^6u3Mn)@s6wyS@lZ%Y3B6l)y7$p`+D&r&3TANTEq|Sh+{MNS{^?>T{ zyYUUogCw1TucJ`G4}?JotX82NGsIXfJ>bXHw5??EW)m^8m=St&n%fgFfZ@(*qW*0$j41$jr+?`dF z14I)h6bLm>N8yySFn|bnm(#sM;4&rwqtvWt=pQE#=DIonDyHuBvOl(+wKLi6VsXZ4 zXo9|nx7OI@fQf?VtKdPkc;H%e_bP(<^YbcBXU9hTJgKcqL@$CeyKUx?S=@Y#f>c6n zKa5!+mKRx+Uep~mB+S(G5|fNdBDdXUgYwNhc8;Mrb<0OXjvmyboFH_z@pFTOUlX!D zFku79fBTHjZ`J*6=zaS&0h&`m%d$te76nCll?otoWDEeKLkdU@NE#+(Mt~8Mt#IgC z3Mo0B4(h`PZ^M2T%q`2tGK!N1z9jqwq?QD-zUK=r#wDNVnkYsoM8ebzLW)a~Y+l)- zf>c@Q0H@V|t2`(B@N0l8Sy*iDFab~PfhiL`YA|3itqTpdKcc;w^~8Q^;02Jk}OfD{i@wj>H6~Y6fOWOiL|5FRh*1@#>fGccL{y9 zG{JAirdNc@`90g;N?K*XUP;difEtY?KRD`hKfI9NFa-QZD;d7BXs9-S3gxFvZGoL~ zRV5j|d!l3)4vy-0Y*gTjCTUmR10 zsyDsjdBW=?N|J>ha$6#n!q^^BlFpBxO4e(ry3Gb38C}z)qXhbD3j>*=FgR=%NhBwJ z=HCTV$xJ}CR?Y_J@fKm2o|-=YN16Oj5@hm(%n(3>*I1kKBrP_r6bZM)mpX644NOnx z;`(Cii1+1RUI&P{(q*g0bkeKE^s+z7n^RXkpSEKs$y-1}Tc@`6rU`_ENMgb(3BCOg z8G|O=&x?lEKfMn2|5u{_q?y?Nk~!Z&g(eFIojB z_f*Zr^b@Y>#U3M#Vx|rBpcH!2h+j3XkI#DNL?P6@qNA&DuCoi?GjaR6DLsgYakrqV$QBlbc*VCBYh=%>0tYhM58Srm#8 z30U4iJ|J&Btj;_`7oJ%`fcD%S8y7$X47JEAGCCbNl;`S;W|f|BmmK=E*iLy-as!R_ zd_J3SeWL(tNH>Y`8q_A4rE;aj{<;_qsdry^^%!;~f}qXpiiboU&<>wVB;mng>_~!{ zwl(u`Gt)1vG+*=$bSdWK?0)cL$>k{Kni?^6y4Ds&(&l@KlO)}KBmWr7&ISHgd6FQ$ zdW0bGng`F-Dz;V=-6OW5knhQ^Dm>brU0H^q{KQs{{AW6eD_rs*WXV!wI+XCuF-ELT z6@Y-~Ya9pKq=CAiP-(L+v=>;iQcQpZ1tGRzclE%q`q5aN%$6RaPE~21ZBg?0RAeZz z7{qxYBK}8mFD(hHcM(ih{Snq@0HqOPXqciiW81JtHStJut1W<==hb=M`L+?>AJwh$ zvPhK{NU6kE$`V#1BS@u@HP9UjymDVQKI`CfPoL9pcRMemK!Dz>MTJAKc?^oh`gkw0 zEzXOEU$WG1*(EhCS3=oDLgqdJnOZNS)gmMDzzDjRYkjEV1fF5YzQNF@&|sw6d34wT zN;8#r%0-uM#n@={e=uUtE#1%HjToaxguVxnu_q++o%eo9{2P>B^cW@C7h>l}Z7f7k&L;h(n&{3Lq}li&BJ!35duwWbQ7#)G?pCe%f=5lW z;1#b09CqBmaBot6&iTeATFB%Z{drLX2T96?NtM);qmA>~w?DTPUSrqk1k1DGj&sUe zjKwVA&^kJQyxZ&ZRT_D#>caqG&xdy$s(Z7{fWqmBCR(i2SE+=OT z6x+MLeB27%FE0=QB_b(h@8Q%KrRv2Z7iz1}^B&>ueQaT|FFa$1ovQX)5Ri8iG>M;Iy<80O6-tKqSEVe*TQNdMY3{9+*eGOq zM+0Q5{E=iCe&GCz&fzdXNT{Ms4K>H4R`$w0G%xKVu}NBMh$Z3W{p z2pxneq+|H9!yEMjXyfjh+k2qk;Hg$LhKDab_pDl3JM-5zM+S8cQxAS^-zvP8I92DY z4ek@Nte2T(ZJ>8Mi~poA3l3>dEq9sCY^WmcS<2W@h0M0*SGBl!P5&}QVY4%0LO*f9 z8i!uThI7F`m!*v)V2(d&ctV%J)ZErUck1PuzHY7|7tFIw9_`rWyKJx{0?kxrh7!rM zGJ3Ke#xWIMIa?OPj53#_;S~n|by~*y?zwLj4hkH1Vh3y!L6vC%4N}R!A+AP>rpmHh zPX)#f>tJoo$Nv1M1au>Ak#rrI6ezbtnde!jn?L)mNLseCX{*$&gD2vsG5++kTN;UvzU>(u6X+QPfPo1{X11;N%t zt5;s($6Ou=fLPkNi0Vp5E9DuT#a1{Qam#Zp7GYeYE9DHT7wVcE1r@NUZ?))zCk_6b z?+Q}K7-OTm{9q`@^A<`C@tGo?S9{Kk;ge;5w69u69M9ep^WeN}c{M2}O3p~aR?iGW z*R0?Ds?@>^qkP4HR&80jI_-TuYU>0SZJ9;~O9(Ubt7|0+cOGV%%8|p`;3S&yly{`a zT#6v(6VS3G_8iH2jF9S;mli1(16y26xyL;fSJSU|qFfW1zAW9$Q=EEEtX=1hd-*Ee zfo1#)x7FJwtoFV>J{{V&_e0F_a-?08uPd;(6P<0qXLk^2`1`> zQK+E8CIh_++Pvq>;SVj@(QU(~u9cB&;TY1nU!H`OC`Zkn=><=CzfrjD`A=ckvX7`& z9T&weU6J|MEDxXJCOIpK9A1dmbvW)#yOn=Mx<#*{b~ z%04AC9{}0STwq+_r?kVu%Nhu%XzxI1gD6%HsLP{!-jN~9gScuKQv z&o3rEN1^1*kUJ4XRu0n-RPJDQG6N@2RbW=@(H~lwNA6AN3y0>#$sO zej$(|bk(`&F!Kmap*+Rk-o4UrdLrg!#`K1rCG7?#52JDV?SlP z2vTFgA(QWTP;E*GNN}=hgZhm{-n-T#Ln4-YzZtI+wGqA1`?Y9#*uWw{cS@VFkj0dO z$0SicdP7umK$|Ytu+?j-GMS^7hZlZo14O!rW%84&l8y0h%`)x@sBx2gzTI3K zf`ujok|)L@v|wKjvkdCf=5#X9x6CBLy`s?JfG7g4cF+Wr~K{|+qv8BqNC!wQG3EF?6n0wypoMC5nH?^5mvSdV^ zKqQb#!be8Fk_gOccQy!jcn016BSfcJK}tqu^*EX1ge1~!sP5DWjS$1Y6bvE1u@!#V zkswy&doOXA6Lz5Uf_~=wlC(rI#iD22NphK|1}xl4sc;+_xab=5bk4Os3+3aai4bJp ze&|{FEK1Qlm_+OWEwcoRceIt807BCpa&WO+R%aDLrC`e9RU@D%1Ho>ao_=adVL_?8 zfko>ga&|GH5MI27dLEv>BnN!iTEeFA+5ks`5@#r|kqQAaRZ0x#WgNQwI zXTvWLg5vk?vLp}PJ_pTgnj5TR=D37Vq-euBynkkfarOOByTy9hV)YZdq`1i`4<{wFw`6Z8(R5!c0Rda2H;kJTbMh6QRhTz&# zBO(KlIpbF&LMDxxk#ge4dQ*M*u;zd6gQFxVJ~RulWOZ>7jlU@apUBF@C=U|Be@CS; z9{kQcWzx`ZqlOTIyeKjF+wuT?sd6Pyj!e&ho;ugcaA@T4&|6v2o{Cci zCQC>U<;7m|i7|0U8SjYXp-Go-SD)>(BINJYYZzBfX$f+pj-Qr=R=|;J#*vMnx#dTO z0%4WqpObiS(2CYl9(b&_XX_;}q~S1k)kgXBjdhFGY>{{1t+Le(Bl5tfphSu~0-eeS zbFZyQCaR3HcT(g-xM0Btn$e-15?4nY-n7k{DQnX%R7K<;v_NxFI zlkW+#g#biF)M>|q&}?r0gnJVryeoVCCW)BU06^=6v()t@kboAl2XI%v6dd&}+T8Pa zN^p!lCO&~wQkHhBpoyN9Cy8&ctixm{T!&kFkf>6P4|)$^n=L8@EyxrC6& zSVOjF3R(DM2Rh?4II`jarOGCotblr|_{aPd;S~dvxp^ZUc5i&-b;DP+;hULl)HF8^ z_}WngZRiGja3Xl}p1R3&MCYgv;oIyH9E7>Vy1k>Y;jCRAShkJLWMSfF8|s0JNZt>^ zl~hQaU13~~8a@;$7?E#~gog{1!WR4Z5t9k=7>lLxvj&~c=Pt8gc|B2ne@U8x?(Emx zs<#fl8r#kztK%^-yfE)0S@@6O?9ZLe>iOs9eUwKDrfTg42xym6$<0_K*YHatOie0-Mo-(hkHxdig37XPi68l3y4G>4uIcq=R_!N2&Ff^j_e z&N^RnuP8;V1iL|>^$^Ve!k@yh6noRyCzsp{ku+2uRCG+O|IJGR{>v#W=dL#CM}x31 z08X+-hi`8G%q(x*X6Ilvw$$Eb7_NGA(*cJFqub>OqUTtZd`iOJOhv;t%tKrkA|+6U0f^rHPIRaKRVXfvT107W03W z$v?3B|K>v2ZCL>Yf`G^NPEF`j%8f&qc}wD(mg?UScJw8G={4N{%POg-@%2zB?ra9B zD!hN#R<`BG>C7!+Q;98E$I~c1s<1YOVa{j2hfLsVLmVx2-c|TFqvXHZ`2GQfaQuT% z`QMEaW+s+@7$qi8-LEcuQCT-x0X;bnk$(N)^k9*;MXCy%8Q!_!XCAs-)$q`@dl>QWxn z9V!1BpWD!ugYJeG*0>K+PUg#7c9VgCcU>FN!@d-zQ_PhefvyfE$33?+%xunBSBT^@ z^8{Ork@oiNa+!9|6b|I?H|se zz6OKDVk@Z*eQ%DROSa3Os{A_ZG`2VTP!p#uN3=(sDL+e_!EPhbLD!UTbnEpN3CKyYY(`HSU$WH2vnLczIxZg+1QqymJk*}PJW~VMduB@(0EMj%k%q8 zd2DW|N^{#R)kGITi?Td9^!CC_HX8stsgPL2s=N2E5OJ;St5t7pfJ_5XdGnsmHmuwf z53Bi2qF69M91Yi~Ej$$jBb6lIxN8bf*h^>EV-XpaB#@U`+im=GgT=I*sB3n`RtxKp z9!k)y=`nI(9tOB9*`4)n0w@PO_@>01qT3WiHo~7ArVm2$ubE<8!s>yz?mCoBp6CGY z=TS)Uot1SC5j@NtSyEM|)D-p#C^~Xox*;c@w+C}d$!4~lMR=13yDwlbRZCsK~N3IVc`h%;MIRI>7M9ZPofoTAQ?X+`6CicXM;3R`isL0`D*R(Z2>7<6)8Qp)MYF#BwXyRo9e=|L=b z!ke-JiVXPVn4hEWOo{qiiE@21um_7c*%H8JPELmE%Cx)Kj$Z8i*>1zmL@c~&V1adC zQy_zRGfjV+g@;4*%F2Sn;8wPl>a?}P&%~(LOp-k>aLT@dK3GQb_s$3cuvA((hM(}( zLeGJFKF6+oD*KFwsHW`&cB}Et^PN2RU3$CJ ze&iVx`pUt51=m@FRyFt34vYxSUNmPD8}gb{0Ihm>uSr2r$Td6o!tfPK*qa9RwNC3P z>HkC7J2r^|Em4+b+qQYjwr$(CZQHhO+qP}nRkt)ZIy$0XPrRO({tx*f&pJETme*KU zBw5M2ti~>%f3d_|qYex#f*jld3X&5n5F$p{W;qlY&!EJF28or7?0h>b@xye%KgE2u zEVnMCJvJ;`bs>F+^jGQZ#-OPrVtj5Xg5Ti`2f|e?U7vUsETqH(O%F%QdI?WT*H#E< z;h^COSx~K_ln$L2Po43|08khbcAtlBC;&giEQ@-x9)=EjQ6(DfISj-eYePEW$i(;a zlm24#%kBXyT9#=izQ=29IS-Qvpj%KQRI?E;t1E3G=UFu?CoX;6Se%`Af{mrw7q=^U zc@YtH#V?VlQI0(n7=rt%Bb=QN?+C2uiQoblPle5sI{;^R4y^!SyzZd6HAufz7aBaHP?BL7@705ub_ykTb$x9kx*XzSr{ z#Y9bcaI49Tiio*GKLn$|<9@I8|H~v{!ir|h;e%|H2|eLACTK%P6p{&4_Lt?YT8mQw z>L0uik;lS`s#0Hc&qZ}q-`@g_yZXwf@siKQI`<46wdnN)C>+NhFp9={j zv@>=%#GzGCtx9azX;dYB@o*W?X7g*Tml32mt%#tI%SpAP%%@NA?_&f1FvCU;8J)H( z@Ge3iBFtlrUbd@sODXxfpM~&!m8cxK^x|mi#zGFij$nY+;?PAXFMmY}h@nhH%Mq%_ zqNV?GOp^jzvF~5~MOo<;>Yvl1ls2Dg1$&Y0?H@pdP=t8LgGv*XCQ)P8x7_`;rjFJJ zE$dUs&GvKkA#+>%YJWR}DIaeVH4M*#+=Tvcsjtrxg0Ig4Lk=tK;c@b4_;ogS`EyYG zTCTHtO&=7;>Bw0TMvBOgi6LlIo*@Oc;WWW~Q@4e&K-k zlR+JiN>n53%vZj-4_-*}=kPqLYJUS190XLxxa)f&u3#a<{0+O#nLh}%K$gzu)pC8m zM4kM4f&?L40k*1^vQ#ZbT!7rb=Z;EY>hW(}+O?%u84wbr9d5ZP3m98BBC}M) z&rbqNMs$%*O-PO$lyD2;hAJ4L*nK>0XSBo#^L(74JRsf@W}tC)(u=xejj(Wjq68+l z&#Rvt66WJtxY)N`R)_>z7EbR<#+$W=#yhGNg|li8a}_L&)H|E+)^@g3_9mO>J%DXp zTz0oyI|!IH%&4p-?SGQYErt&Re6&x%D~K<>!knfc{cghNCBomaZ=gZZY^W+&q?etm zeWTc(Shp>1je5{#$YJf2_Ln$GiM(r7rkaGizHj|{l-qKpeT%tK21#dt zMK!|mXK<)zbx{;yKu}W{J5TkHwC1)tgMnjA^va?AgV?Scd8<4v=}O}B{dHNEst-y) zls_96(V5_L;N`bX8;yruhtaDRDdvidk}e}>x}P3y$+U>vQwi7Q8}C zTW_ApZfGdQgxv-;e0YWN^8oTNx{d{xZnaAJ)HiQS1c&V=r3Fw78; zkeE%ovtcB?DKi73eI}@_xpHP8=v$ejil#F!(F{Vt zkKcSix96{!yLbARygJ;%J!^R@a{FkXd)l+VE3B^QNjWXzv-D40AIX9!Y}CUtP{#28#wRn+77 z!YFDgjuCFed4%p8FmL14DNICLz|LKTM$Ac%5=)h{Zs3^?kPcUBkhzJw}Kk%rm1$1f&Ba^Lc$F+ZAqlqq8hJ3Xg zpgK4%shx9f!}!QXZ8-T%hvH@t7#PlmF7UU63Qk)dRFssuskkyFQ59wmDgNuO?Mwz$Z_+OWM>5HIW&&@S~Ox&7AIt+V& zn&aiM`i!8p4o_fWO$;+h$$&w{95C$`H`w4|3a$z(K4Qp zn&0vV+waRbyJc%39VS@R`X2!NX}2T0_TdeEmff;@E7>Bf7@Vkv0~+hAhj2nSlmQel0LQ##u+U? z%IJ|J|Ez(RTSVp>_p#R2OQ%j;MjUtJsh2_WT=HSw*+8ZFj?%MVVX224$Cp<5_s6;% zXGOjWq(XPxuF#t^AMD`-_3-48mWaI~rk>89O+d*I+UVNYDt!-s1t}-a+?R=WBA}_gTEma@ zuSD=7%z7m)OQ2*}XG~CR{qTi|(hDucd(1YQd7tTUFDG}*N>O|SoQcP|nEGDVy!XY6 z^#gzSGZ|zu?DAo%INdBPx#lO9G^B@$=c~BF%1vu*NMX&Pv)8Ckt)|Sr&HmO-b>q-Q z*klExlE#3w`n0A6fyx)PmsKWij#4!8RiH2gX6IMkqRam+ieV{w!UP~wI|F-(Fa2zMqz7e*V) z7p|DXwJ%4nMc-mrBEo9c5}tV>#RgpHGFbpQc?B)VEAS)3b$7PijLt%V+_|BGLwKF5Jhz1*i~c?MNc4DRUIjiB+1stLBCgtw=pf+apaIO+Jk`@VaEg~^9)^Dp1w?mn;yF6^|`l#^R`-cG>&VK`c9RK&y zr}HoGaTu5uf1sVO{j@_ww@2-4`^Q^a3aB5r78a-6e93 z&o|S!#xus2mOt0n+bjVZP%eGmV_6R;Yq20Z1;m0rdQl76(~)#8!@b0{uY!3T{Ap)+ z^>ccJKDpjd?FyQLAwGleulPA!qjuk#(IC&_?6v$}#GA;XSU+8sd6g?#+6!JyOZS=a z)qhxud**v#_eajqXPR5D{#B6ALn!2b6VVgwpG!5_kGHFjlZj(ngep-5$?`c44@^%x zJRI;z!#WFkdsM~jv=;-Lu2J@yd4v6 zt}JC+x!vvyQD>yzjK2l4yNY6Jnl#~#%I0Xe|BEfI2HaW`dgeFS?6PvG=SBi??@H}t z4X&Z~FhKpK5>Mq2q!*EI1?7?ya@$K6bET5h^s^OKo2b=4%m^?~{@k7|Nt~|5lFGr% zS#_#*9R?v)&0}9mm_kbW8pZE3$d(UtyOr(X{&UrhJ<9j5_$xmEjPVxK!2gu($0e9# zx)d7vnrFv;AKfc`+%>_ceDv2_p3m@@Z`UlT-7gg~DeviU@wZwDcB4RUGnCOhh^(W= z?om30wT(@Cfo+kv_vgQk$$#8n{ZH`cL({T&SN)<*Ins7b-bnywzp%b_;O^9#o)gQ{ zuQZw#@W05P8_@*Ye!5I0$8Vh`aQP!94Vu@S$^*ubxd%1kPxY_JW>V@FIcU59F#L!% zMMh`@@_(Yg|1qKenUUi7kHFUd2l``W|BpTmoZ)M(0AKSb*_U^vMhI^U)KjoBG4j(y z@zMqZh0#&W8y_YSk2(+Ftd#vs__i?;x3A;9hhS$BxbYe4=%YQ5o*1+HgNoE$mck3? z?+16!n2n-{YzzmhaN4-^jkCM-O&VbIzwWzZM%y`No;Q`XgJK+<6#3m?Wo)ZwgIvBxg=WQ%% z+C|GAa9x8x1B&4SrPLX{z-eIQqc-~kl$qdtMG}_1Y_(}h(%Bb_T;sfKJm>riQA4pB z@5pH^Q7wC^tqR}y5+DfxgTgSB_+zin2%G!z>Vz;V&y0S|`I^~M$L;914$-Dppmq$e zo*zxDsVBUi(puv6;(lh2^4=nF!NKJI$~Q6$v&PWjR{dg4S(c+QkU^XuCyoZs$F?LF zaz?2(4~o^QrOvaF&Ti$Ohyn`To>Gw!Z_|iBGO3HRV-t0&r;LN*9bYuS7ubDL7ElSv zP_p@VU`P-7f2zN zVRaRW?aBP1T0^ZOwyMXcr;PPD8e2Dw+T$;I^^w__h9WZ8fPcnKA{1Bi5h(tIcMUQEvf!pT~@xbgPIKi(=raBe2*gB=imn_ClO&$6lgF@r&y5&+$hZ9 z>VXy#r`VUNE1N~x=h!nhnpO{D=`aSm=q7)YU`HTSN23F7VIrQnu;)DjRqqK#CO*{c z^tR7Oo>e)PNx#!qI`dC~WQ^S|Tnxls>*H0uz?E941nw$Z-)jm$-BBB*?Y4QV8gM)e z3(^)r1LcMhxIsK8#OzeiNgqccNsGp1p5QXs_Qwn~G%P_8Ln1ygrs-&jy>Qp=he4L) zHXkBRkz>Zy0W3=mx3K&}ZbSmH@)kZ!h$*6wc21PJ#^)0@Bl~Z)jdUJ@1$ftHcnSoU zGi9`{WI@f1m9#S0)p9!29hx8<0_?$whz?k7qQL1KGi~w_}IkHlF5^@0zRgm_zw9IU0r@y;a{5_sb*g-KCyWN?yvkj%^_ooz$7{ z!`Bt=H(eTr=7@V(W$C!zi4=ylj#SOreKU9Gu5NTH6z?YTGe6Cg(lnL>4qy5F9hYVB zWG`AquPdn^Pm`*2t~QTfp(KGq#J)hgu1v?S5XEhg#GcHJIr42zs%Mz?Z$@zk!R{Gx zM}t1D#Jk-_{R}}ZhDu#ZH?}yh zCH8X!;jYN|D&V7~Fc@`cv*9pG#GTdWiDmr0cP;M52YIybI9!_|8=0H}AI7PCPp^7B zVl?1Q#)c#GER4&doAZYBBe6#}6K%;FTnpz@k2iZW1+`}>f$v>R9%AmoJJA1Hu)Jg5 zzMLgw43!Vew<(KvRS@i!I*(g-duZoZ^d_55I#%6`pG>g1>=l_#u$BZ=pO!YVRMK2w z+8d(RfT}`#FgjLwOETJ=F&GH>nL6f^a+3f_cF-KF1gC+^$~!M|LR(EU8%G&gyY^dF zLcRWUQqVO$DN^s6+EW6EP4}lzpFj-t&<@o}3W$P=AEt9sh#3Ctn@WL7YaWl3g~=IY zL~VzF0A2-*#WWx6Ax}|h^twT^6^Ti99&!0S!&=Y!uV~dn7vWfYP&qD-5R!$9v930S zhjfl`nULC1D=)oc^14yJJ!bnVKL8JV!FY!14c?MHq7@!FTTAMm(vr4f^!IR|`O$x` zbVE5eUJCtDNfvHYu$BCEe%Ry zaPXEfOh{v4ojC*~i~jR~CYm^>n3k+r;O|ODA*_xCvivqy8hP~RFV1GHs^I3>@ zQN-t1W2h4JmMRs+qYj8yL72K@?lz#S?0rLMQqlzc&sMNT(Qv`Bq18 zE=jI{GGVD+TXPURe6@!A?bMVH0nmx*8@MzGv=^ns(nbp5$?S*yraYC~JhZD+{J4>o zmTPaxR3Gw$klzNPNvos7TeuqH9}HM;G5v*jBxex+uCEOTUTF@H#fHU5+0xex=HJ3n zIsd>fYm<|fv=3mlw@qzO&y}LT{bu@kHssMwmn@AZ3zygNh7N?#-Lj}VSqnL>iy#L4 z$(m(oSd4d;(`~bQF@BO^1jfh?2d;!eeU)4x2lRcq#;;EHDm|J}ERnj-Gi_1(Nt^+r zH`^9X&uFMt5cl03btUG?yxSlU-{T%teCmvmbjRfxLl$3o@yeRnPd3fgiy>uOT7FmS z)OFdyvr@3PC8J8S2)(xsa@CxwMJm6zgINX%iZ`Duze-QxG7?B*6~<#YG?4l`U4DI zE!sW*G)=liV0H&-sMH+b#95{nx_yP=pS?VzSraud;NzMtVadF6Rg-IKj3lnukX=$A z%t*Zo8|C4G;<~tn0i&9wz^w1E){}ZsTPZARy<^uNL%d_Z32!f1xf?&c3P~ye6C9fu z)U@pGrUjhLk=IJB>@{9g1u*MQ`x+U9BvFwjUeDgr@Y=_yH7tFR2=40KXcoDsBWZsc zN!59a5J;|BfXO1^&O7O(E+H+e+F(Gp;EixBTV}7Ev1X5X$mZeD=B6Gfe=poq2lN8p zY#oL9aS9@bGnLkM**2MLA{WHTxw*i&dU6LV+f*oFA;idAaQBJCe z9ZJEO-(!IM^eb{E`Awv(u!-=7q<9AU!z24*9{7;PS25)uj57}J$;3oYHc<#rq5(+* ze_X-a$326JDi6>QM_^~iV+p{a>`p_iModc-rqRTY0;TGlAc=9LhgkG%V!4rMSnj}Q zu`DH^Vh21H=KQLee|E^~QKd*k(OwrMB>j=~XcVQ|7Xfni%&H|hbvi-rMLA3-g%Zr2{Q(=uX+Da$oo2PjTWQySP@ z-s#q>w#`q7BStPifI7Y9cDr>QKg=od9WhOb0poKa^eX&Vff(taGYFTPW{hO8%f>1< zPBYe&1tMbbd4CA1=RJ?yqt`-%+N3Zmn~W7qe5S%9=N5F)c@?@Y<~v#=H!N@ z3c?So94(4mC8sp!H{)dZJR6@d+@h@VGqto*vY3XzTeHfLElhv}9LZ?jiFdxBxk~X1 zr1DN;A@b6$WE;s7@R1=YS)xRcGM zWRFwP-n{M&Gu!Q4+%klF;^LHvcc*DxyBahBmf;P=Q&q`kqnQCyM>Y_#F3*BOe{=nl za=LzVZoM_c8?KyUN%VV9!Qm;;J;jYUs%VE2&4#Wf4LA!|r8P+p%Npx;=G-c?*{UIZ z?K~9GI(*6d=L3vT7SDoE!vaA>okrLb1;9orDmk^SD8z%&V&`ND1zUEY`z~V>&Ukbg z75{hM&n15JD4!Rjt$JTOFY-L(j3g?881U13ubV$l;%-y|*)Vt` zr?5-NqcSASq%yurehJ7H@Y?>wIySxcw65UkPoBw>7;yZ-qE>4f`%!xzqH^`0eouU@ z9dPF>^V1E9D+I2*QQ4bGf$AHq{y6N@Oo+Le&KZa+rxw;auQ z0wCOaC)u>6wNJG%HFge+LTNJXLy^%HxU1GX;UjANke@Lh?4GtwQUB)A$j}(;0NFf@ z@Nry^J?@pC-c|xT+J_h}fo@Egoh{d+?CDP)l~&2_y<_{MdmGb8yZR1v-2i3;M%XV( zr;w|N6b4|6&*9py5htZz-nsxFMW$@1E%;i~de{QvxvX0hVrY?2rK15abkVqv-Dng> zlv~d*O!{Dm2fJt!bCAtNOR?A9t`0ecDnZl1@C5oYcwy@6+-OiNPp`aeBY}EGR1n9# z=fvK<4_8$|QpCvL+sB#i9?x9G4;lj_sy(XJ8kjQ%g!RQc*KAL2L@ zzy;v7FZwo=I6A(R%N(LsWye9J$q|x08`EL4;ZLD8{S}CjKS1fD>^E7#UmxPvH8rnQj*DKKv=_QczZL$rHmb2fA6?2qyutfVne#1vUGZIks#Y2Q>?8NLz zP2{Rh!zZZAG|3c3i33ax{;Fgbh4U-gv_&t?@`ReMTZu$jH(jMfnNTeJY;mb{i=(=J ziVARGUbR)(v8-G}bv@`q@Ztx_0^YxqEMI$@u#oK?MEm5I${snW_1SR%?p5{6ItI_4 zGmX7>9l21AO-~RnH)nIRV%A`!fdWCje&r0Al8zcC_5wt)yW-g*4csF#Ls1PbwOKNV z%(Fwum|;Bw%QK;&*Ivz|DNXG!kV8<~>2d&$lnp|K{yeCDHAhJ0?tawt?W|OvsP}UD zj7!G5u*9j~C;`+&QhJe0bs%Z|d~|_#4~$m1ZNz}BF8<{ms#mkAvG$DM2Zw>1ZEWXJ znQ~IUp7kNK04;UR1I9$%K}|on=Q02-+bUCU5q(|t_WmQzVn6p?ZjkCs7}+$kB*Zm>G=x@;mdII-#0L6s_4dfX6Mee(J8rBuDkg+2K2@6 za`&HK9@Lpm6AEr%$KjKi5$whv#nP2M{l0@s+q-l>eilf4!K`St|H{bz|LK_jGegNn zXm{Nd76u%9o54NLM$NP;a085h$UM*lBH0+?T!XC- zpx-t|b+Yos;&!5;_`4aHV(eCcg1?T*L#}RFzjRc;9c1gbiCypid8(HsZTjT+mWiN zy-1T)F0>x=*di#Gxi^r)^v00jsPm@k=vuPrGd+!VD;o(ccXp$K(BBhRbz2> zyzWzcKi{(X1`z|K;%t0pD!`jlS`I?<-_|MhMK)WH8u16S8as?cg317j_Uj>ml=jBT zLkpkn=v2o8Yd34{ykm*f;FQ-Lj~<*ml$up07k`qo?kPMxYz{c!PNZS~eT)QFu9@>| zB=C)zd5*INSm&HBjg|mn)UV#dwFs4W6b`{qRR66$Jrdsiq*kN?=&#B^Arp)oJP7PF zHOj$8YLE#$EQJyg`ez%Y#ua%bDv^cmJN#ip+Jq)Vn?-fto?yi?t$TfLi<=(#bZeoj z$Pdulc=-T3>(%~$9h3h!@%*1C^^oX7_k;;T+m;Z77FVz}gKcD$I@4BMsPauw1_RO( zMe={4)CohHzP#p(E!J}3+C_+_7*IlEX<4r6-_97W*>t~dA{fVb2bSL43n8vbpI$`N zrT>kj{ty51e}*XkBhLAMCaFySTQl)}T2gSrcItTWjYRyq-ZG>2Ic;1LWQ|;iB&yxA*}ZX(Ju1nc_b% z9JW82?}ulW?Mr4##99g6!pMO4gpl7}g+-eQXGL=Ij}zV zri?en8%2c@mUvu1zj@BO%a?1*^)*?6@^~3M4F|Y6s8taD-j*OaEG_1^fOn*o)EStJ zw)k~ByPc9k(4XXM)K{EXQw3al#dL;_Z3*UqV6I#Va481NmbP+3;T`X2`yIBm3>{sO zH%dL2!loiKmLgZy4HO zta=QTKha=DR?LY5@p@{nA8F&J=T=&#&$8WGrVdxpDDaoo{>oMP9;;sf%viaq7%Er$88VfUVL$ zZ8HxOx2R_3l<{ry_0gLCoAb}XN}|u zeH{ROP+-hEN|3_j38N|#e=MLd_70IBYbt}hmYU~k zY2cA#3!Pg%FK8$<7uvTYYGM9N)I81~GqZZk@ed?IRY~ib(aV+s(}zW@P{qwK22YOz z0XCRz{18!YQnzei?rdL+7HIgEB70o!)kro70@<$mkA3cp)Z?gT>ipQ zhk`Bkmrc0ucWhwo&|esXr|1!%QBC}=Q0L$4_z#u}+u;s0Qvm#=)4m{ZS2j;xc~Kr- zws`xRaEeMM)p1Q|AW} z5UQ%w5#^Z3?tpJ5rff5&V}lTFr=l!FFUpw1zGK(oX+=fEz7nXwEYjmgy%UpbK99hZ zNYp|e3@+%icF58m4bQmDeA2Exw5ql@zUl19c)USvwfWeky(O7;8IwnZJhRv^2-Juq zi9Apudx_Mie#%EKZ!jc#3T5sIgNTh7tEEqir>wcu>p_oBYo_^fdemxkLQH09wenW$ z2T#@Cs_oCY-A!={Xtf%RBU_b6-3m1Is4Z|>daPcaV_tM(?{w0HUzA*i^i%d3{5 zaJdM4fRh#9)}t9i)KC08%QZnFM2na&GA0+t&Pjo`XMnqt@Ko3zMncwe&yN}bUS*LB zFUp+-OaMHr;+aQ` z7xErI#e@AbZ>|sd9g=(hM6=i$6MAioyRaBENUJ%TPI2Qds@+{$jK3!3$#?XP+wvJg z%hdIkfr){OJ^aqw7=J;GS~vC!P+gmY$=l3ySS{TX^e}B74BNUvdEOUruqtDA4Tyh% zUF=_eIXqqY)w{g{k!z0gSo`mE3g3kA^`0?JbmdCV{g9ibR9KVr+#!n*R^CuZ?7cmv zV3J{^m(G!|W%c&!r{c%iV{&TYR<)d>tz{p3*8wizlc&eU6e`ctx3=WfDx zr7w4;*GKREPoH}-^1VtOYq8&)J8~?qFtUOLXB3n$$H@?xOsShUIucJ+ll>M6tD%e1 zEwKUWw@wDRMtekSdHYr-{Rr0s1Q?6}Whw50 z&Az~f0{2kb!AEcEZiD=t35potD+yM7MjnvkqA=UrQl~56V`u!Uy~nF;#6xp9RF>Kg zf59KOXLM!s5k}2X=hezuuE*WT_~7@0aZdvm;)zNlZx<{LYGK%3(xsBigAdH^cQWTmc*U4s-4dLfJX_U|;C`%TS8T=ImLbdc{p|C^|#ML`{lV z8bO<)cyC9*V(H({1hQp(QxE}UdQrOpM!TIRoqtyup{hEwdyr;C%y*pq_ch1N?QHTf zG3b7Gk@9us4UQpnO%T+u(r8aDC8W;<)-M=W`(y1ggl0M)q9Co6+VT4gjdLC~WD;B+ zU-fqAwGAvP>eoJ!NsVachiT@wmN8ZidY^cTVhE(TNYp>21CGqG`WE%>OSmFFIx*ep z37KF#XWjxPDTslmyPnLSH1z+k!Xh6$B)&~f29P{0-+ct&%8Noj1r;f-08xGNC~ z4XG)!Ibc}P{1L}Di_GbZSLY=ANc5l)G{<8wGGCQYhD#chFU+k>-bHEd7*unAO#!&4 z>%X6dgF!*>TlW9{8Hnt$q(NSImFET|LZaijPn#Nm7A5X6V>@u!XYAcm!wsr*NAoB! zd`lNwbHTp^2GM0l*bB2(qYhP*-V#`Jq(p#3UGM8ADPN;ZTBOt=x_ zcZ>~l4MSTam-Kw=PiU(?M9mfPV18Q-IsjIt*x=B>o4^EK0YQFC+Avo3@Kv(Zb(_uL zVw{75<_8jQ%E0e||2d3jY5u16-P~YoL*0t1_bG8@M6O|}8_ z{k!Ad8zSL;#*5mwaeH7fU+Ot&*!rAsHM>)bFah<0(=HCPx#B3xQXWC{=`6H1HKr!9 z;>!wY%6T67VhF=UpGzd-IlM$o=kBeoLLPY2wB)5sd41KOeuPA`+8!0$<)hF@#dlUo z5}mbUs*!c-^?Ga-&}I+2=s+~RY%(rj&{WOC!<@}2pb!xW*4-!ej8 zt601mRk@dZ0423)ux+8u;b-uu7QBpct(8j*np?!LmirS99RO{e(K)Q_5uh-JFZKn| z55M{rb<&nRJreNR>C3anqSr=~arObIBS-g;Rx<^JEH7bya7Vq7gL}A#vJhH(FS~cV z$dVj)`D^wtyLt6OD{O`7!r`sPLM5$7R~}`Ou5zvAk?4m>ui_QUR}D5x zo5z>#`#6nS?+&!}(yf^O@73$cB>){HAtM}4o|g4+UTohjTXmR=e(t4$Z;BfJHx~np z3`Oz0wxQ3nkc3WfYb^uz`c_6&cb{vM{59?RL;}j|70zs+{ zT|z0^^cm)#?)`x{`tEy~#2*AAY=0?-ZK4QIt^l_?Xu23bJ+Fbu5;q?r<`lV(Tn0pD zLun${?foWq-MX=_ATHy}$E{h2R2eZ@fk90cv^30(kwGM;PX3BuPZ(a??oUQBj7|g+#7T@jXjl=U$g(b)Fv9=9+ zFMy~TJX^XF>JeM#y}Vw8^d$@r3Xl~opYcc@B@t&$C#N9tas&WoG1J!|Szp}p-Id9C z08Q?{PPnjtxDMzfCxqkX#UFm+^}h6y#}reRY-z9YCK#=AwK(z^y$pV}e7O3fmgh*& zVLgE-3^~FOiu~6n_W!-*Ja+=D)#+Mb?wfYN&lEGS*l}S6^q7;z6c(Zf6K4Ae2cO}j zU;5JPAfDrN+R#qaP9-U6?XWFSYFKIUt3cLGW?BZNW@)jhFYlvKzADZr6em;O5UF!> zOW(h26_1)a_N1ONlyT?Fql7kjN0kybaPC(+>8KV#U3@V zR~QW}5?>u=4lX!zzt>WEN#B+o0El2uoA#p&TXZdD+yW>cV~0`MxaA2$Y&`{<<)t^P zC1!YSr-W>r^51r^NbXz}{I30&w2j`KjkqaM=Sk# zzxlPUeWlv>1cZHA&ATR;#9Ag6f;{|y5J{a`e;O_PR@+_ z4R-g>$lcVXV#W~pd5Fef#=9D5|Agq0HKz`$mWTLF?rWU(>76G}NR_?eFHhA-B10im z)lHN}C`k&Ek>fDsM0g7FPKI-?S72LKtU_ z<3R#D6S1v#bYO;}}((Mx%kqE_-SSosHk1 zuT%+TJ6S1zQDR<50fM)>(nDU(76n_fSGVPy_WAD0hB-!FwYD%y)eU1+nDe5B|>Nkb_Ir=$yK>IIY{(U0u zYTDj9l7Pc}QIgRnt#gMT6Y7H3h^op=4J(4MWQr39f1{C#mE{bze4^C3L;$m8Ju;Gj z^DV0U(;kmNL0*)M;5O}Enm!~i+V)BWOK0l1UsEu{a*9GmBG3#k7sxHrvy%G2z4j;5 z^`-Jj(WDb_xPJca_aHhROp}FknnEjX1q8vAC7!81co*#eR)qkV2FAyiTS-sigI2*6E)sf%kNhm z4WAh}9I8~}$cjctq0a!JjROGg`(&t}z~NhV66a?B&y%5Jnz231043Q8qb{`Ntd^T9 zoA$AWkW?RzN2k^>gjzaPDECZ+0jQdNf^w1CI%i@l1s7cLMR zg>GoGY^ZK5cu0q%fmaJPe)7x?jcK2kr=AbNr>(n%%x@j9V1&tCR%<(_D@W>1N>LF* zK#u0Gmyvf%UEsc&Va$^f^m8A|wCvQr;Jj875y{gMtCPXexAis zU1zStxp3=nWA=#Hl4M>jEP^Z0LlqT2gma|5K*36}SoC^uW&EfU$ZfI!31~S|Pi2TS zMGic-Q}8O}j<)x6?@TT$z9_mlBkwLb`~*dsFR|(JrW{NgRI&aK zB%jR&we|NnrE5`fw2Ks{<)-SzX+TQ3p1c`<49b1G%{jBbHnNh$l=n|1Njlk6PqOMv zul&`^%YI^?r)*43tAo6NJGS zoV7W;oN;Fx63cxD*9DQa^fL3cRh5F-~R3tOBs(A{KW@+tB(eK5T>iW#?ba442mzXZyXkss!ReM`180sPxBjT3pau)*A*a}S1VpIjkobN zRiOz-RC5b!-AST;_x|+CIbd6IkHZ%Crx${g!zYNo+#8D9GyU^_(kL4y9Tq%5zYld$cfM&9ie32Bz$qEHaswZjDt;m1gC(-8j`c#z@;NHN$roQs`Mkx~oi0p>#Oe11tDfB6Oy01hB653wwD0%{Zhxb6b(W8}!3F|d zU|B57F0)IKp@J(JSrzRy_spj|j)tHP|n=Cz?%q%zr}jQEv$n1ckn4 zsQ^B*%cHE#dZqTB>-1u@zvcl(d{cUP(AO2Ek#ArPQLRcz?;?4W127eLNR(}jQA1p! zVYQRCQp4wrts(J3Ox|;)6 z3=g+K#a>0bRm#Zg?Yro{u zW*_Y5O%D6A7dQ-u?}6)Twu=%&xxdq|>v}osp4wzO0#_qCH#0_2OXxSNBxq?j#!kX+ zm2#J~*|ei)ilqPUh~y_MZ8!KhGBcIaOfL?66;Q=W)jDJMu+ zWZrI$MbPhB>RJi8d@2h`B|kmW^w6X;dCaL9UL_I&{dEgd-IQ64>kFBEUI&7CPF11f zi$8$tJGJUPX0>&Xum0`S`d|-cmYR3LROK2w@`lMjn-*5E+TxJrHne2mz}D25Ie7cn zObP0RGKvz`NXg}I!CG=BjD0VO;^Z%KMj5zEExhGWLRQSR_`JlIkw@NKlbFzpRR83) z)BnmS3VAZgtvl^EO+Oj(>nDLc)B!_d)qX;Q31zaul$o~r}9S*mR2Y;`}s(gELRCcE~`nDKRi_UFs zRj3zjpl7M~*K?;m2#ErD`w~}oZ6|WDkT*0cZnbh{b5WNTp`kmTnOn2WWtCvVkUjla zMt=EmZv*VjQgeKIrB)wNnKPA73(vFWRoL;nObG^ijl#(GafSY?NA6uc2DeRNqPoCp zNr_7ar40ULfrfh$$h#$-oo(oWH1Za0ejp0A!JoU{CviK$<}+wt2a~;C(>VF$gOW>q8yK95(SrcZfy!#890dNVx>;?i~@EMc(nDdt}n{oS{nik(Q>1UL%4 zs*zT#!gX>Tw???SPD>h|H9uNN8~Gt9jS)jIkKMS=v=nD)i(|pV|GJX@-#eT8b&V-r zb-~4z=IJ68ks9s6aY6!8SI_i_u)Ju_NV~7lT^l6%-YGjZV-us5JG+lD2z z%CO|0>=vBLzDJ=Dj!4QBaE6$t3#X5*Wmdey!H3Y}0}b>Ss1DnQ4Z{WV(2Wr%O;_cf zqM@1)WPmUlBMbFOi*%EdUJot@g4D_{?Wa~Q7+*&V&pMVsb>p$gv1&9ie%RL5)jCp% zF!j((;*@lcDbrx`1HbB~&UUYAeps!rCMLLrFL~LWv>Vf&nY#9jQy6=!jhQez!rOyj zsp8b{KPLDt_`IWQyfi$Y4jE9Qrs=19N*C3vVF4HI7eUa%Ckcy&lFc2Q&p6^AFj=Vq z>=zpgP~XvzJW0lDcQN)S=CD1aM?^1?oa;%v&Mh{>12RzWbPa~MGq4p_oG;#|7Ph%r z=cbBwww7coG*soSjGg~@n|l+nqVMWlyAiPLdQrmKnTj_rRUr1Ry!;j?r zKa{-#k1*V_ZriqP+qP}nwr$(CZTH(Y-nMPqcAqadCs}Lny>7D4f2hovdTP|D@<$bN zX6crr|5zsfwgU8jJ2zQP9ZKi^SUt0*9{%xV-yTAHj~CawWDgP^M0Ngfehj96wQi7L zSF9+?ytU7I{DsJK_B1%I0t?4L?ObEX^4f(v&RDt;CRQk;F2#y=8sSZz*Zcq0xv?|+ zH)At9!@rI5|NlET7G?&Pe;J!0JRz&wj%I9QDJXU_i6ilvsvWGT(aUG$X4QvKcL*|a zsf%Fwo?cg#+ZQTvLUAQXgr1~*Vsea4fqp@gxGk*D(RUI1KDkPw%~uK#HH#dI2lfc; zr$Q=F#m#>iqo%76Jw$I`nUskae_xer*L&ZO#33Id5g^XoERr@>)S}w(JGKyW8^LA_ zX_=*rwnPd+)B_y1c9lue+`OA@eBdCGO+>g=q;|r0TkUIBwp$B1>GdksL5+NQjyr%G zJQvCqY(#BWH07RDVq=c|_&jZn-^L0?z<^;h)q%HF9{-TjVL)gsZEc(?JR^0LF=4!* zUCACxSnITgO@l*qrGLgQYEI;*IsTv?4>MiMgK08-YOvpzeYmK%HrQ+}fWZZHac7oMoU zn0*LGjq4DkopkrrSE*s9x(1?~o72^c^gdCrb=7zfJ5x+0ccDIsX9lC#%Q?@WrHs5y zq$hb9pmJ^=WXAfTicGFS>UVjb`|v4jdjk#^P+B?=nkzkuCU=6wW+0A^eJwy`KmfjL zKyXXf9rcEe9}Q-4lDH{F!Y<4>zZ|akVP}U+kL85oV<6H6vTb$5#furk=k|7E1I=$o z)16khL8&mb6gUSN{P1sJEDH#NKzCA};n=C>odu6de|EoscDw8Eh6ES+vWi~45yQss zy>287+q>6;nQ7wP(#a5l30mUhqp11WOPo*8*-X< zFPt&xC`Pmc3N(UB7or5(UU6v3CVtQ{hmdk15K#b;9-r38*f*(gT3>yFHpOMnw-$3Q za6sTHV&kcIrvNUxyXf+(P5oG%X`y0}5*91}tUu*Ft>`p3Z`q4?uK>IF3Zxe5yd}oI z0v|DWudl{*9TjlJF?1St6u<$?H7w!X4cW=4VI%`3eo5d=nX-VZjwgRBCN8?b-BGHP zQeBN1Va<)g?9g_=e0O6SuNh%zlQ*)AhqTW{CmPUqp2zGiR&8O9h#qrz@mj|Bn#oA# zn@Cyu4z85A#s)hLS z`7!H0+fbcjNbVHO=Jq$&7!EBED@n+gd#HxrHmNz3Thd)@KUg)iyVeb4uFnU777 zO5RMjgX8^x5T5Mh8>=Sp9@hMP*bnv)%gs3hsE^kH!X6g3C)g5f1%PyFfA^Jh_?1uP z@?wx_QO#h0;!T-QCd? zrpEuyyarCJ*oe>gwT0H*_@jMcWHG%_o_;F+Wjc{4aP<@{YzicBxr_~ObZI{qq@1 zJJ~pvB!0))8Duff)SV2|BsAmH*MkyZm@oT9h5M z%!;F4Z)dxMDgqr3R-Ui3Ts}1_*hnY+rF<@Rqc9sU19tMH_@*kD?~J zj>w(CN0=gRTOwUSM~=?SIZchB`TpcnjBPj z%<(;*mJLq!dP&ZwH`Ma%!(ASgc+jp>wAsYJr?N!_Rea34?4qpm8UBj_i|f97{Ck{M z*{c=0)5@3~b~e$?n@<8P7rT{G!MewaT=Q04PZx`hq;u5$nrbUTYb#}3T8+`l-zM%y*K^MZUcnyy zTv}$w8fL^2hafSW5TSu;_Go}!egS1M)3n8aho;H6cfCnt^~w47{60MnLrc940!3}z zJj@R>vB1%EoK-XL7cJJHzvNdv-U^-(1END#VYA$vUx`r6Gi|t*)!Y=`7jq79w6o0L z3{EkcqJ)n@;$blsx*#16qJ&-)1;(Et8$K^6j+T9T))zb6g6(&&D%r?Gx*z!fGJ0 z_NGFElD(3n=_*0la4`C*-DF2R`f{FyH)_lI}EPl3poaNDieOKC=ZbU?epF*X+LC!0b%o_Fxgv?{c`592OTS!*`b{(S z)cf!*v>{0>f}7ScsU+Z^A&xO~y%Q$Zeey{KFPc*+Lw!Ci_5SX# z;houmNWWel+<{2EP(#=#pD7D~3qa5j78N+6*AS#Lp(evKF;X$o>i+H^Zuf1~Uj!mk zEh?N1Pug9V=dp}Lx8j|8iQ*5^s#jkjCCri<@tsY3CVCY^irj@h{MAtbXV=InqZjQ> z1C}F=>w8D7Zhr05=7jRB+g^G#P5}RHZc5Gz;O}rxmFEH_Jki#8Zs1$%9kY{t)n^G4 z|7Ym?=2DpIs4D#}zV!Xs7m>B93Ox!E7}{8lfZ7LdGFhN*GUhXAKGcWH(`t$BD5AHV81Q#+e$L~ux6rq?`Hy~46D2ik(5H$w6?DY= zQ5v0_YtLPGdQYec<5)m<@h6*St${;990)1V1iUDAw`|T)d;eRw5vk{V zpXVlj-L$E(!;zu~x?y=|=yM2nG`3-sFA;UjbxQ8&>#({2!voiW4*{InPt{7`TAGZp zhMC!naXV3|^Ddcs>VRe$?MWs4q-c8{m2O0&&X*?1sc>OBuHZJr)>41@uOCh9jx=i1 z5nV47A8{EcW|)NOJ?BXE62}UL-08_<#cmwulFveE+~6mIiU>VUGs#DN@Ka1Z8jzib zmGFMqo2}-|wh2|zjr!rX+p^+0x9_Aa4K6j4CjJUiL3_NU;Yy%W*I;Iw9HEC0j1y~d zrq8u^l%Lxe$CQJ2MRBaX`S)k1P1szDPeuqTA>)2|{{a1Sh7$wu}J(CM-JD-Xc zTdQMy9n?^wg&O|+kG5$N^;FR+`xdA`6hi~(sb22z@haHlaeaomHtR7Wkfy#P1L%>I zc)Q0!H2Qg+ThDnb70-aQ}*GDlTsj8}1w$`{Q;{#kG5E zQ0NGC0vZeILlt7qb)9f@`N_GwFRvOq>izLXmFm^IRVOU_!U4^c9-a{Ohp9~=9`WQ~ zRS>hm861ecp`2sUhZxP$RJw)H!2K{Q_H30lN2g`6$!u5a`okWf6;lHe9Kh2@y&dlk zhZ}kf@Ha&OEQ&-Df(6ZjrtVmv(=l38%r({NbfB=Z7<)$eF`y~<)^(HvbdL@b=*ybjmPt_t^M zk0w<8s0;g4yx`Qe{MK7~7R2dc!^sBHJpsDMxY1$_XVY%>=${6?QJ&qf!7F%@Dz7J9 zU(>k46I%WDf}oPlOyOPnf)3lOYX3p;&BIcuyh<{aM{`YT+w3hlt6E5Qc#%kU*TJwn z4R-LfD=!?Uu&F9*=7$JlX|>4C!`ld8(nZr0z4GfCwl;^#NPAu`T3pOGKrV;zx8i z&xIHFyQaUhH2aNkJFliTtOau;OwJJiJ6>$Sl8{bF3LaOuoJoE)U_Um?+*gbVk~17D zc=KUQSEf4d6mHE3Fo6|E#Dv$9ZeJy()K4G5q({&z2{VrI5gvj@-hoxpUCxFlX_b2c z*gVe?SZ5aU!s}_-x-9%|-a!hhCH&yh@SaT)8r5|Q+P2y60O9AQ;|f@ktx@?$-KkRe zerMJvZJd|7a2QMo^#WOisq%V9=l;e&X`xPQF0)+Cb{@y)o9_1!(n6Z3AL^|a*R-a^ zg05#k$o$Y}Hq|nszet4kC}H6~g1t~Z;h##Fvxj!_CJhSp77nNr01vT)$r_j$>~TXP zYlD+PCX|j}AI?*ZdYROa1FkavRS$(m0fq|S!u_HPVnAyVuaRD*(8&3$)}kvri;y%##uC z^bmd>cD0p1yL!bEzM+ezAFY44YE4Ro zMQ5@n<)aWs5l%?H4_a?)PLH|gQdp>PPv?eBO=6~<=Kgxl!hlg$sNI7T8djoD=9tCT z6>+0rcd(o#32*t25zYU*Q9QYTw-g9~j-3^iRAEy$6PUB|DI`{Tay_?rPk$ekc%O3r zko_N%IHaG&r(5=us130a3+yme0)h;k6h@kW_91B${Sgwcy7cAooh+Ja;=0>z@ zk)JU3$CeSNLyy?Z-Gm$%2FM>^8 z)eFug1$Z&UN)cSV=s2P!#}B^UuBzTcn`n<|a#v>pm*c=Nh@qN2OVs9eCNQ(8g5%pM zS=9qVb+BuT^Ux5*__uIXRNz|&xGLYff3|q_Dou#jkG79kXZV>#s784mSO;Y-;Ui4E z36`khmB{ys)_CMz69ffL4fCeg-XlkggB+H}j*!<*(&@W{Fq$45^61iqG6vb=n}$|@ zMg>fF9t@Oz?w;c$#u3T*YZk*^zs-kOW6-;x5XAEbEdv-3|odpu>D=1~-aVW<{h;xX>M+eYX(yXlN1y%EXQMde{9 zm$yE$n$psVq8?yJ;xpvOHt%rS651Q9DNwyDmbaGsBsaY~pT^%YH-h6wss{b7L{@V)5|4s6$FdlhOxdoS&cOyB- zJL1f`gV}U+JRWJ=sdqV^>88T~|CQu{-k3?Bl?C#yj4rZY{o&$t|4rdbxnS8N>i+a| z39RYA1RQAFlrp4ttir?sx>>3FFG=2iQ;M@Q{O_nCPPTsqd8Vm9v{rMAa78JPYFYpz zhc)dY5QWGQWiS;|Rhi>QeR90U;Jcz9X@kzYGzO|B3ZF>eS3DlnC4rV{({epIqwGu( zocg}^!OK?-J6}9+)PQCXX=P_SL-HnXsHr!P#$nTLe#Lj=SdYUA{R%bS0(-)1hf|lz z)>D*tal=B;5%syEX+q?*8VowZVq-aR!YSi_yjE905L+!owfNg3fU105LkQWWxX}K3 z44so?(TU zay|CqOjln}QX@Vnaf>rccQ28%a~VHu(KCRh>bIwNPcz^0nR`-R$y@nk z6nQ=!)(%`3PPYfSE6dQ+HYb`Zp)bm{aoOxDBK8%B$?AoPxC;It2c^B~J!#|9(my%m zI8IpiR-bKx!k(6O=J6Dkj9`F5epq4E9lQIi8~-LLM1x z8N)U4a)2rXJh6S_QN$eEe`1HK*!DwJNAKSjGNF?7is~O5)rro!y#tOf7+!)w!u)ac zD;b z#+EFF$>2uUzmkod@?VQ!?2P{_{D_5>@!xFv{|p3Dw|6^*8sr~2l4}{u_EyO7f<}PB zVCsCp$E$VB#*7rqd%SD}YgM6{hatq`1WH|UF48|4D@&1p;!6NCX_vbJqiIxJkQaK_7qpwX+MM$mXNDg1xNvHnw*1II@~8ItvyG=$#PQW` zc0f-g`>J9XlGzog1*aytzaDU{Pj2leS`eB5fb#~zAy>=XS>c-hSdSygmN578+;jMu zs-`aR=F$dl3k{uSJ7yPz(?ZrUbUEK>X6K<<$wBfDq4!11?wJ|1LHceo%Rjcb1P2Qn zfZdGRnrPLmQSfVEfn0X`r=<3&)VnnqFEVN_65ny{1g z0gWYZuYp-**ly5Z9#F^nT;#C)(jc$@^iYe1(>EaS@jgqzdxM_w1{B;+whF4vn>&i% zVIM+_W%?}N!ARrWYQbOfapmQu^$pxSfN8ed^_Raw3T?IiSeb&3q6l*j<~YWf`Ytz9 z?IS3svFN;^Fw#gDtZ~`SfRJ7uf_||h-G2D)GfR$qT(?!j5*3vvQ%8s8mK<|vla(kr zo%z~HPmIf$eda)o7aM%O{ghWCJGP)gaIXBoNuT->B?*zVhZ4Qfy1f$^b=x5{_xdegL6ORJ%Vu$V#A41HLL$>uw{@+V9UYY#?pt*H#Irn+|q6+^m(oJZ$;WY zobrbE4wd{zLW$Dg_=54nEAG4;t!U8o6{jnhSsE zQDL9DizaO0xTwq`#`v(oQ$YASBD5(gzTi`iKflm`S z#gXNY7V}v|WI+$pdX#1c7|J5l1EASUuUeOCA}%Q~b@|crw&eNdCKCFRO59y~`!Yj5 z&E%k+&}7``(xyd$qOjF4w|1T*rskbvv%IquEDhhWx5lxKDd6Ddl$31Tbs@t=vZQQGgaVghw^#U0Us=iNsS zKhEtm`%mWKNj2R4ifrb1e{!s(mG{SFs)GA}^y)*3;sD9Hn5d&h^Vd!V@uU>DIiche z9{3?$pPC1lV`0>gzjTNXocAE)-a*svyX{-lySdswnc25<=bU zbPm^5MlTgV-BJF*5D*>MKs&aG+{T07zM_o`=*)ff{*0pJ*Ilx)-Vx^2US8ux5pF5~Uc0 zD`tvY7vfTzOCM3e>$ zR1Sm^-ivogt?d{|GNy8uPnlAIk%w~IFLODSj!i8_)uc^@1+EHu+C^A50o&8*IOQjH zs>~K)Y%y@QE}gUpe3iR~7ux-GQFcwE754dTfQcuy(jzmm?|an-ugPh=ma~4wO+QK& zgCcj|HP*zz55V)Lzr);YGw+(JE#n8QkDra1$qM-Bzh(xLW|Z}%qstcBcrGmtHET7` zv}vbmITy4UGtFc_wwEro;F%rD3DrmeI;ohoZY?&gotT*-EiyD$k#_Zp7?|kj0o!tK zgyZ&7I5nwTe@&gV_M4I&wH;3EcP{9TH#>fO zS&SVW3$VSqJeHom!jKGZG&$~y#10lJN5O0?^f;!0v=1;rpf!MyBG#lp6J=(JysHtj zFtF_m_MX{Rvcox6t<23cE#PX_7=Yev6^8PPixuL72tKmZHwq%X5GPzNNP^ZUI8xv> z9Cy5A&dU49snyTJo=u8P>qY>QpYdV?r7L^a`uj)9ZS5b1T<8V`%-R0+$ckD!A5{HtK5>gLzBiuV zn!nh5QgV2WH?RjhTY7INvsyH=P)<4KHuD4NSICSKb)RMfy+9)W>&Mxv8^q5n&D*C| z_tRTd$&1XcQT*O=%NStj9X-{+V38!oMOzD|WAi(v($#y|61x3Q&Mc!VbECx(X*f5&hr;b5JG(Y^?mNtzi zIaht`yGZ3qJ&{pm+)94NC%AP=cr3wx&Wbav4O@DWj3UWBQV9bH~vS zc_#w14@dLVDU&Bfe(mrsryM;N$z^j?5P{kB_d#5Oe9fB+9$H=M19@dx)`g9;ip{DE zLLaA+KQhH{7Bjc3@!&mJRry*-Mdd$D3GH{59HvvpQs@AC_WY*0t?{+mCn@#1b$08} zd^;N=_Mj@&4vq(#SGjVX6BJ*B>vJ-!Oi>J&dDG+=g3VVs-PL=^gxsk8{VhRn6o=Cb z+UcMQznJAkD5X(c;V7nVmjU6i=*XU*rT!Y!t}%S~aL-ccm%moXLltZMWeXE*81WzkbQ+7u*qG*d-|G`TTo$q4otFP?VEKeI2I2Buw8kh zuT50VUi1t7zkW2i;nFB`I-Apr!C9uJ94S1*KYEnhVrk(uJ2#v%M|3u8%iBR(Ekh3K<6IJ~rp^wJ z@tG$!?0j9YFpS=nfiSkJM(U$B)xL3*b9=;J#TY4nm}!u>F-4%=X?a`&AE?Qu zS7R^t*H8lPX(#e4L~U!9E}-$po@=OJs|>;$NOE(~hsPx^O(zq{us$#@&bVprX9!YD z<-%@zp}Zm+cSp#CbRZn1pV+IpWbuis#~3LVWM2ib`UW_RQ#unJriyJnJ|RyC zvC}icpbvGjm|xg%THQ-z!YhYwN!$`MzC@~&5Q4}Sv&1)?Ai!F*1G5~ni_dUkC#dos z`=!PTml&oi%mQ$u7y#jX${qGvU`nt`A^Ix) z{(~fqqmoL)++2Ju7C)0PqQNwu1=g)Z-W9{$K6SyIu%_wuT#ELe0X(zdY`{3Vf+ZdM z%O$N#X-kZP0PI_;OAT67Bt(UdBu5U%T!RFk-3qqF-5Ok1GUxh&QdbLzkpHYWE5P!iBC^J$V;sIp3hY@2x#E({7uGtzuz++U5CcKw_(o>8NnqxAg{&7q zST8hmHuhj_J>lu1HT{HZRnODk#N&6i>oe3UxjuI2QJtstKSr$;`=tg?u+8KIkBzN2 zPD{-alF#tS;R!A!$~LHz>+Kv176+|mdXvW>jI;tTY1=>=LgGmYd>47U9xH=g!GNm{0Y5fT{zv4=!Zi#tA?>4FdFfy)NE0!lU&40=EN%9Df^Q_?s7$=@lct zNTzl6dl$MucU&#Ky{vMqLE(!R0L26bljlnJiY_q{kConu;n*6GLa=87v{u@{Zxr&7 zx&W8zsxyV;ahMT2Uz2%bN5v{-Xv8z4U`ViLRnwa1w8N^9+S=Be?eJ-Ti*82M?+Vo6A5<9HqHLf9q&6zZQU9hmp77*NGGj@CEa2nJ41tq;wcSH~1J ztMq1EzVf&yy$j?MQs6TGff67gis48{u_8+#BfN*=?vGko=Kz4@UA_V9HDJaH#GA$kR%8jT9BMb6dfgMq3lY&r;O>FTA) zq`O@|WPMNO^Zr9Mgz8$#S4W}sApKna+=D@_@Ky=>+TsrPoTKsdN0b>ZrfDPG9R}}$ z${Z9<1BK*DW6DYV=q_Cln&;>gPfI?N$yv6&pBEASWX!3KA?%WKSBZg z*=^NU`TCBD8o)LYjNdX}y9)>#*hZ6=5WriMCud9mV82nadq8h$LejUy#>#xSmA&5O z3qc-4Ca>^Sc|bfntH#;?(dWA>D?Py zO~d?&J^&#`D985)9>i#bvm|RPNM&;I0ltCUVmYrof;vde#|$hwTd|pItyisK7++X& zn^IFZ7jPf%EGwqAj$N`k(!QFo@y{Us^=OHsKUiDUf}r~9@7)mhe=L*#iPyr!w8s$p zLC4Eoc9j^xz&I8`U$tZ>XBOPMqOv&T_y1$;7j`l=bg_4$knh z=L&qH`c&gTKUz0AO0G#`4!uFJks+s19j3ZtIV~h>{`W+a@xRlxjQ=~jmYwb2T>nOy z66fN(68>I$hNJ)J1@5e1fC7(l;W6GT_^92z2KhC{;&i6Vwp@?gZ3O(xvajF|VJDj; zVOzw%Fe%*l?UP&zv)US*_A%;4Ld5Z%;SkS8nE`VF9xcL~hGGULt&-nc1T>XU@-VNCJ4HsxKOMWpU?+Rs{s8_95NB*&}cCzmY*#>}zH^!(2%pt1WBEts}6 zyguV=c=n^6L7Z-bGwRVY4UvMIU?&e z3SY*}jOX}PR;-6?eTbcShdP`Ujp4#vAKMP*;(qJ5#kyw+>GrKyKSrDZJB4te8UpD- z-mV2UH&*Jk9I4&@p-HQ};)sxO(=rx1bX!T3}L?e#S2=Jopo?|0nB?tvn4F zmhGQ~_rzVvUUxzb+UR3h7H|RWsGPHt5uxWV+B>7e;EN1hsot9IvXTz||?Gvr?;GD~JWc(jZt~JEcdSt*Qw$YjrW|`5p zoh_)Fd@JOT$bmK&r6ve&@K7zavBQj3J03p`VBNka3c4Q}sfv(qdKjQSxTD_$UH-zt zX(}<=25}BCWOpVUEYO%~F7fl*S;r_d4vy3b;YcDpj|835iQ2_?M~mc@_!$dEFKf3S zc*-s6!MGQAKlHMNZ!EK@b?4vK z7evmR$RfQ(%|cU8qLrxl5Y>U7(^jsm8x*hi6DiO%Oi~?ucmeYXbSQzgEDPqd2R^iZPXQ;NAvE=**W6lI6@c)Jlv9O;uw^#?CFA zx5RPx;SKfxy6NZ^Y%|Qz<3%btr z$DQ9iICh$Sy}Iwnfz>RpxP{bvy4t!XqaiI@vwDGVM57MmcV#@e+G^ z6MC}VqsQtvTPidhPhxt)zQ}SDJE70%vV_je_Oog*h7PMjfhtSrpz%SOGKS)nId0 zGl&4AP-fU6=h1r3liKRe^yTfLzmhZ}+a)q0Voc`v9OVi^zQG`u5A&I=W+xdAhTLGl zm9>&Jd;jMh>xlf(Fh4%2m#SO@vm_$ldzIT#9=g(5p>+*ks|vo|Fl}NQJqXs{gUCQo z1uLc2kfC_xK2ltf{A5-`RC}+(IiZV zKl*n!0Vd6Af+C#Njsx_bfxO$TMQl8hw!E7Oxe80%L=ZR2!Is7vz56@bsY2wKHkZ|v zd8~W+AHpOOY8aafLtx_TpFtSB*j6+~TJQXpHj8PsZX$s0#!5&cBy}*^=5|w3fWRYa zq}kDA{R?Qb%?Gx`kq5WXj5;cyhmeq=R^#0*mPXxJ%_!Rw5=>8(v$L8sJ0|+N0>kON zY4O7OpI5`J87OrSF$)Y|6DcCh1IrRK^}$$s3jThvp*cjyd@!pR2VMZya{g@|`^`7& znGoO5ZqfQ3M50f}eWMcQ78=Wb^mF66IxNScB2qE?3hEZW;d1oYqB9<`e{%i3MK|B4 zR=3-eZ*7xBe@vQ;r0v4`m! zXXD$jacvt5(+OGyVR2kU@QK;(YAsX#(|-TeEYP>a#8V zY7X+W$Y&uqMT$y4H~<%{%mO?Ed^0nvpu|*bp3*Zq--L{USn38unH}mdjl~RsfI{Mm zuIOHECPLvJrx5e{RJ)RBBAvQTpQ1IJ1tTh!_K1UX-fB3Xp-RLC1yU*cb7```szA%1 z4L4b>cLbnj-D-x7IiXFBx09vitxr2YW+pSi*3Mncb!@Ec56*6k=-U3qj8qR$`PD2; zVv| z&Qw!if|Np#otm)uYLgH4ud@?U*U}X$Q%^Dwp zzH2O#N?A`F@dsxQwNZ_o*5*rG@dD@`?m1pVz`g%6<~VvTF#dPrpPe4KnIyhkjTT{+ z1rj;~PfN@CvV;_)74m+Hc!~9;SiNr~cF8Ilh2=2qRW4^hG2{uCH=iy*eye+#J}SLf z>t_aZ8<6=c5b1Da@3Pd1ort0)Vk_Q33iykeo5-nHVVWlUb=(!h4J+xpkZW@HTKMvR!k)_1ah%ZtN)RS_es9glGQiJ)>!0eN~ zoad>KJSzlM*|eq?WQVR37%&f*`+PsE`&rUzmIC*RP6~%@)!%1jsb$+%wzs1rhsB+Kzc9WUO|GVT7B@BUQ=lDnZ8uy%XI?{xA)9JF;} z3Tk989-S?O4Wq+R&s>GkHp$j1BIApll46Bi?`rwwx6v0fTgxGS+aysQeLctjFpQz9 z*9+-fhYD6v>w)~jCv8};;8%htct-_QtBmE`IZX^baYNcNDi3Rmq3+G(Gcp;aDhoFA zuvE1Ltg(iiBmTzdOXTaNm^^!?S>)8^XSEQ$XY@ExXAnIq5ubNApBj4wa$J%#QM20& zMYL{q`PdlI68)KPfFZ6}?$B|Dn7#>*e3%y;+@^eC{|?Q78kp#9P#h}4XiZ6tPcjs* z_mvQBrp?+W$Bdx$47C4%@6WGa1s$)-%S0*>P8zMyUN<#VrSgKk(ywxy@=*3OocJW~ z7r74f-0(Q>@j7)>+-XE|5 zo;S;z3Y=?>+c(d)?gU@9FMG{jCFe*GA**V!Soc+$U+0z_#Ei9sIZI#$A;J6DX#r~S zy11`Md_c=^oez!s)p^Tuh>C9AUHa66CMjg4P^-Yn9nYAt2t|$I-YD$16xeHPI^iL? z>G;R&D2$zT%c0p`3zaj#lwRMTzYSr3mC~)8AvH2;syUG53~=Zq2Ly zu?xcw^vS|BTJo(KQm=Up4Hr-i1Dc1y8WdZpVihYDrhD}y`uF$~{PaZBD#gciN9zA>O_){=gE%f{?Xd&Wa&D5DVD9vFS9+1nYM1?L zRg48u0V+4($My&QX`PFV9SJgJvfJnVi&5)%7Axa+@wSxCgSZyfRbpQQf?WfYY)Qfu$LHud09jOTfwL?AsX8P@eoZpnuZZ3O)oh0UB*Dk z%|G`AC$zpB+C6tb>RZ$()lE;x%Iwx}-DlrBW#D93Q&A$lRJ< z@dDEg2(eu1Dk6PWp?fm`YdUJy*m3Ae!aO=ni3!_Ho4$f+%K z_?kUB@uF+S%VH0j|T| zv-p9ziQXPiu~4CJRuE)!i~lo?>~|I}RbH^>eQXS-NiJqm8=eIFdsw2FLo$GG&q!>< zmcjLk>SUCMQU`6lPNT=4Z$r>j2ev4FfDA#0!t8N|^w8t1w>qav)ohUut|)wO)|Js$ z86uP%i9V2+)K#!{;D{p+u`k0gBz}KaYz=pcUQa1dDAp^|eMM!+hZ!-`(6rbq9PEA- zOitAs0JSv-xxfb!PEqjBd7x2~1NHnerVq@bzY_Sa z(}=1cs=h8G$6jIMyifgR*9zc$eVHoStBT+wQXy%Joejh7OZ8n=t!}6B#_Z~;AEz@! zeH1Y%0$Fd!_mZN7%dH%BKb9!tRSZxH$Kz%9z$CGnZ!#LfWKvZAW8(JzPD>-om2F); zN`Myaksi3V&EcHNJa|-4@LP^A+7rnbvmXCXxg;HuR1 z8Aaa6we}`RAy#i1tG-E_38|;;p7%f@zF!&@?SuvdU5ddZ3<4>UcS7|$EgvY;~7{u|U z$X2d!NP9TYFV2egX^`q1M0!r4b~H;!hz!Lp2ve!QLkl07HZB?s9!Y zh*znPS_jEv#X)9?Nn10-?gfhirOD0AVGs4BXEMMoL#>ed=))mtUu{?~Emi77Vn4uQ zcd{%nigDDO_b=daC-|F!t$m&hhEwY0B{REq z5yF6S5nJ3dnP^J0x^~~(AjYHF^z;2!OLhPnXwuuEX^CN;HL(iFeeu6Ce&eyjsQ>ZVl-(ssrw(qUB{$GOG{|-wt z{;y!^{{oB}6JZ*7Y+SxB>0Lyw7aP~DY>C(kUJG8hcI5cUTBm#uBkDdmABH_<3r+eO z;~6*vFd1%J-+8-cPjxt4u({cM6sntp8C1D1FQH`+EwAn-rvTU^vk&#Mr4xyRSg707 ztsmze=Er=yJ`rhq;Uk?J2W$b<$}}-oqJRT9k`q6>;Jl39q-sUV+;4X5kY%ULa&D{5 z#^PowXG1&|;$s%q%z5gx-tQdlo66W}RYsD@dnn-?J(VdEs;S}K9%&mz{U)Dbb4-(; z-A(1E&bl0^lUK^K{MyyMSxewlvZUjo9=S)Wsksk#ZknHRpz~20EF5`UG|6vFBo%~K zO=cu99~i>We`c}LVc3xN*Yg=~G=J5G;asbr;+lUH#-rq{~yZUu{jf<-}X)>wkNi2+qRP{ww;M>+qP}n#>BR5JyYk+ zzR$DwsXFHabie6UUHxD6>$Q~pm~#zVqAI4Z_VCvvx&B(8;-}D&F-nEk1(K}2+pyqM zcr#W6WG2oW__))atg?%u(^H}`l&*!u$lAKr3Wn4kHQkb$*|Q8XwT$r+G#$IYNS)rO zq4hXKx(Bg?DDkIux3O*Wz7v#3harEFEjTbcn2hQZAg_tSS})f8c^`l za{8YH&Gg^lX?9@vGji6j>^wEj;A1QnWbhMJ7gJjgooBtBH6Oo_*n9(UJ_?MkTxYAr}ngB+z?R&}%4~SromHdT)`2})nH)cEy5hUJ`KUQyF_B@ZvFnt6!3kb}n zkli}~gYB9`QzUe?c%0_TfMs_Kb>TR1n%e3 zxY!Z7R@HpN+m6&lZA0iisN@L61EFF=>3XMaE19#ld)i3#X%AbqPolj>{em3DC{A*h z%m>C4A)m>9@Mi(ma2!#s*)!D;*6UMwTAlkfLE4=spf-@;TXAis{4};=?r3S$LM5Lc z|Jn$|VlD+f6CW$h7)vwEv+wBYI7?i@X41Ho+r8v;xkVf#VG(M0h0VHIx9pCQ8yJ8) zkk)zf7P5*xj7KQgDTykeZ|XKUuz#o~Z$&E%e3PKJ!+6y?Ltd{#n|9wRL_Xq@aOX@k zg(vRL*_3fwc*$%!GFzr7G`AXB*cIJWd}uZ9H@P^#`;{A(rv1&93WZY|5YeWeybKX7 z;ATV>RBg}t8UFiY+%AegCaBzQUJjL}pjz8{C(UyHk0lvQ!=TI~2I6ShWmM|6+LHe8 zT*z_KMh<*0RNt28y|0VI&8o`-Xwx}|jeoNw{UcIdKV(3Q3mm~Mab?&3pv;{&+&}kP zcDaWUd=_Z{f-EV)`sQL-)&FS^U%XM-u?5t>Q&2!z=W+vwtX58zdNb01%-;a0*SEVJ z-kT#pu6yn#qXU`!tUNB5>1}eRu%Ww)UI+nFIgy2+HjH0E1+Tbwcvcen-v$B67*c=*9q*}c4N02lqCTfrSG>TM`}bb_f%fDYi2)*#7e;C!=n zET$ghk|=(;#u)-@RW*se^$7BpwJ5thsY-)HF$#zD6ISz9G@7!En!$H5S#h zW3;N5UoU3x*z)_0S3s`-xB#MW4S0`CWoX_zVdt^B4<;y!Yo{_fk>+?R%=?{0nG`J^(PaO5;vq=R4 zc(L$ZJr)M}YE*h!2b(vscdzsP7xI<1J|5y8Ww;I#wc zmwK;e9!%tc5H7%%kMN@L^kc-0UV=E4j20$E5HIZj2 zmF;&Bx;ZGm2@*5E8ln~Zi~^L0R-5)-;lT7`+)rI5&AIrbDK=xQ-9e-Wz#oKu^qy23|Uu!1w}ytKHj#J(AE1cz`+)Z*@RE%p=n@w1-frc2vL4k%LI-(Sx&9? zBZ|}BW-YL)yC|m6QtBT?;`JDaD|ELNQ5gEro&(l^AfqE9JoZpD zF?4v^WGPB4e#eKhL3=SubCO?pwP68i5pdR#w%Q6!QB^{efiVVjO3M-=`nx7d2&aDj zgQ_NQW9qc)+swDAd7E3`#|v-m7h`vS?bJi_;BGk;FTAJN`^eZZvX-P5K4J7D)gDy7 zW5cC1*mlNop}UEh>oQF_nDjGYJSK0@qM!P>g@7Jwn6|v%eQ2M0x!pp-!VE!MevWFc z=Xa{Oz(%VqUG_SO_1q_<85*8T24wRNofQh6i{w>E1PO4Ra(noGy-;}Mm9X7#-`$vd zhLfKh0eeS6U9ZWymh7C$(B=hv{C!mr|3`}s6pDg@d75B(zE$4EJp&)PN6 zODTbD)6At+yQ_HXEo<$%Ej&y%v3NcymNMO42B`kz)wi9 z&qRgd0wp4?7pi9dJY7u=D;%#yO1KS|UaEU#=SD4+`yqJP`LL1djFDsM5SfPqMVP%5 zI%b*FK#4IGl=0J=hn6;D^5-q>Vq+3UE2Q&bQ>$ zcd>wp`8Otuw}M?+Eb;|#4z;DA^=R6mTABp=0tko*M<6Uhs{ZAG+N*07zk4+BCa|Lw z*wc5$oD}ic1l7R54iaFiO|fLt(UJ}>sYmO4Ey*P`f{0wl;sK!4*jV(zNh zSuSmj8j;wN)FHt;G8~la1vVCGWFD`;yBe6fCRT6sbFo^pg6ic+li72DV6T9(9f zTA9|K``6g%hSOgYY3Es@rJG|VmP@Tp-;sU@V7UmQT8>c77ULbLe#YxxgBR~*96r}G zV7lk|nz(Q!o;kqV<~#2FM`p|T<6<>KL&7B4(x(?aYmUS_xM2{D%3i+7Z1Zpf07f_a zb6FG3H!tFc6^*Xns6eUIe)S#iOi7BfFAOJ(Ugr3JyM_aikm2w8p6f*XXdEQl8lJJu z)2&j2F&k{%^rU0z6x_abjQ(i=TUr+N-eIQ0ud%WvQx&H2RISEFtE*y#C#8zYK2ExP zCfPC2+-do8(sDk7qVCR|u77YiNPE+*_nz!#ylR!Zl?1i99!=2D`ml z4yd`!-R0)J#fOYs>pU3#V)WLmF=0K=^;M{DAg?<V`mk@cOx430SXM80X ztuuFqZ5f@wm zl!Yj@!TncVF<0RI#B(LR*wjoD=FLoq4!ky0+UZm`=e_wsO`zlYGu@gwm2g|^#62ft z>b=%tsTK=B;DWfnx`ukK)*7VOv{lNh{#_WdOmG|*H;wi$R1WwSzeex8udh^sSG)+t zpUO$QF@2zRLHj3%GlUTOqN_p;FUBz(Mb&~Lm8#*>q53UZ5i21uAc+whbu55p8F0P+ z8HNS)7EpshPspN~HOPX@sG>=p3?5_{t1=-Z$+Cq%{QFv4_F*!yfTOclst*QpZeO>R zJ$NqpPk_Rz?nzG3N?wE8^~N7?$~F4y6QR0SpODWAbUECBmy}8M42sR1y|-05M&KL= zf|qqiUc>@5;wIkbmpTuN zH}~Uw^IN~M4{M=u@ypri>T95mlcqT5etQaUjWQ7UkSYC~xTu+^2b|psC8dHw1kGGs zHx`YZ2Z&Y@2|awR-xH>d#L3nv#~H1`b^lbO(^bDm`UFcsY+Ex~!Vs^!ofLKdLP=<# zaiNRuJ3YuW;aN>V_?9JDj&d6`_9*niYZ%meSE(aJziP57ipk9Y+e0pdygQz8uV(w$ z6d&&KHR3m-tE?%uM%EJ#&a5L_LBlNMx*-HURR_QDDBgrlV~XGjCvBtHNIyCkkKF%I z;b(09RQSrT6Tx>Blv-?0A~HeWdR2z|dyWSRIJ|`|J&Tqi{Z&*uSQhxJ^+vx980SRr zx|B)`8D9%W*P&jU%cX<|BLos~7dej%rN~*FcZ=%5NE98uo~j?M2KLj3T4BQ~+Xj*a zOAHkK_RbQo6sN9AvVM6zVO6Cd)s~+^p2)XsfV#NmSss)@%Qa@}KRh0*olju?-G>d9 zuykmf`T-e!-xhSZg82Pb4O{JIN-ftFz-oZE@;zPux!eV!jBX4coD6b5S_kR+(L5I5 zJT9@4YOW^NK8vYSSQN)+02CF=7`bxBxT+kJ8jO5fmu{(CG5`HPtWgu3VpiC$a3Z9GQ31gyH z;r^yhsmScJt7!Ol!?>2fRWjR&;gTdppq>&lY|44!3YlMzt|7;)FVNUD@dx_2qhOI( zEC4_za~koAe20@wte%VrSTc9&>m|@QFiX^KQr!he1Dt{|J7KrNr$s%(5JH4Mbx!ku z<+agyF#hxzbUP2*qj4kS>u)4|?R)f!4UQSy0olfE{nh-_yeW1YNQ@2Sj5*+*Ln^Hg z*_EDXQ9)X<{Tvp<(6Rw`wFI{R!lB#I?lm{p%NPX=*oDRqbGFxrwf)Z0OD1Nc`Iufl z6mj!h(;;F9HnCHs?h~R4e8eF!GaOp%@j6ga|I}nKXk){G4=C;EUQFArK+bX=1P6Uy z)$!9O zka45s3KT$tWdz>d>1L{sQKszq8iLXNc;TKa9$OTy3*!j}P9ELBv!+#c$u`x`WElVe z)HZ-OKOhUL#|t@V3?<&pa7|Io#kwb?VjLLh)p79nN;)yb2I18e7{>XY51!^plSura z#yZwKI5*AY!TEfWf{=G#em~PLj!3HnV99fF)*|MwtdKN>+~FX($D!;AWs9VoA8&jq zEm!T`$kKhn%h|L-(&kLwHU zJqpx=Qmd7@qwUPXd$o9|EN(@K!8`y9(pH(UWgExpg()I19*CpdUqk1t_@%y7U z5)HIR>l%oreUQG*SZH(LI62n6L*K!=b}WpWWAdW}a1R-Gr|g06EGxO>o9W6d*Wdie znyzv}^u?3Y0j_{084l9db7kBQ?~fI9vd+iSVVQBa4W4rCt3HdM8RovpfTy3s_6QR= zQU$|Wu{QBdp+$<{f*vG0WMz#S!3hkf+tVi{g2`INeVV)}4lHyWLg=e%ue@C;fwHYb zy14$(8R6331_NisKx?OpS)}XnCE(NhofC#o_2CTVsiiyuJ60_CqBdhq_~{{AR`O2; zucRieV5A(CQv3*!o3R&2-JEqBTa~`F+p6Q#EQC4E{LTYgYyc$p$opM^D=3$sHUPSg z&lz2`OW#Aaga(qLK=#L}6+=Zwz(Dvj2~vX9toO7n%X%hhw<|`g6|5fU^vWOm2`{O= z6YBOZh-Wp5RE6soC#f7f2z0ep+rOtSJnp>+x@umEgkdt)PLHF z|4X7u|B)pXH69}Ir5fXW1tIj^db|I#iE0VGfkAG z;uiG+A)T)LcAvq)!>K5MueXLr#PJ64$X^1<*9=^~I)w6Pq|FC7DP6R6lyfaN)T%TZ zk>HuD>|Zd9*-FPgjYBN8^Y6cRN~`bCXvkI}axZx6PH|V7`dz@&JgbBjhk}1b1mti1 z29`_l-}o81QQ1b&cENb6cf&i!>G`ld#Q_!;TqFP9TKD5_t+zI1WJT39?9D1nHV$eK z<*`SwFi%cN#j;$ft?1G~St`Yqi0T$+(jb)!<;1EL24^IomwF8ARI{6?Rnnw9A>_`J zbaCYjJo}*ps&W;`-}TqLYqQgi2jOil$4U(%dy}9WUac2Ghc6jt_tsxsH4w(1dT8=xMgWV{KjEg6QJPRe z5U&0rmc^oB5t;#48dH(Ur*>FHZxIGkh)rCn0mrfLGC6;^v(cgyIMbRog@7VSI(6?< zN6rp4S6#B{3q?~ASTfc8R4URNh&1^=C#0i9yFN}=9{cIMhVS-l>E5+X)9D=CGr6l_7MASdeg=U4pNzy>L6%3h_bov)DOxMThf#llu$>)kB0c}bZ~uHq z8fbdZ7Ug^&2OV9?u3O)d#DY&9pzFT|(}sO* zXy*Z_K$Vf}&Ug_1SG-bnX^jo8o&$E8EA)5lVJQ*80oya+VK&Lx6?QIBWL4EiZKs@U z*v~==D}>_PIXjUFuA*ICsitYV{+1Gr8r4#ZV$C4ionI>8PJ-uS$dnKj1&oQv@`n7y z{EXd`mCaj7tekZ(c1Umqtrh_p4zK<0-qmFLot`FKn+$K!XHf%CiLg1ybrxOJ$w#k~4K@MNiq(FP&C4P_cd_G^1Imj6$^zAyy#11T@64edp6~8$ z#4nG#dN#*_DEH*ey>Iwwf zE!Le38>%BJPT>!iVuiM{kr7yDx{|}%p}_q(@|7Hlfqs$6Yy~5&y$OpPH?NGVem*_a ztM|C)TG7>(N6Ah5a{6w&+6GQ^(18YGOb~QA<;&`W7vP^&@edS5H``C3iGO7)?gVF) zaJ+_pKIes^R+X+drQwoGQ=S?{`;9Y778}XY%`B63P&lvzp2L#D^`yL1J5%S4^x#1= zaCnAP5OfAnaAttLiY?Ib9Z>Q*h3CFyBzmX7kg*|F*{0ju@qVS{^p1KD9iL^)GW( zqpdljW@^jB02mq7cH%e>=gVUbgHc-mS0};xm|8wky(?pu^>-?I?d0p|)hp18pCqo! z4;EYXi_pEd{%eF?Xq*GBlrzdm%jEG&umBwV4Dtz31-Jl<(*@mj`?C zEVsD}PUtuDPldhdnudJ9+%v1kn`~`Bnt_%3mO(I~6{c)=3I5Q}NuH`nI1~fZHAIrO zDl)TU*qIAVH9atd(lk1_^3$5v%^T(OoX4%Da^Po1wY1HHZ{TQaxrPC5=6r#8idJ|pvwSo|!n*~HA_;CEB9Sv8VzoyOQ4v035XS;!b{(kH zSGk(m=~utjY!{MsEexnkS)83gkT34+p(7>kvJ%@=ww?S^zk(L)1q}ZLfcn#aW*hK0 zyy*p8zBYv6y5|jsn`2ySVRpNarC7a_F7X6)$VlM@!DL%hp4yfbPw zdT6M>Y@HYm6yh-7Gy3jb{N>Qn! zWSnLWdZAeoEKAJyQ}Jtm8sMKUDwud1+>|Pi2bKkZlpT51kqM+&8=A7GgRJjCKxn6A zTKA<3&=KLVH6E}?fcJ8b8yAwm?ndutr^4t=N$I`u`;&Ir5xR8zOq-pMYe8TMwk=5* zgT?#dZ#|m(r!0pl3ssFG01BP;Qxh!14q_B#EZ3a1e?;r^A0*IC^llSJGB6iX4CL0j zyYAuic%i6nkKRW{NRajhm@Kb@>cwBlqGINk#pY6~A3|H514C68F>trcwn))+J!QYFf>RHgbqCz1uVmT?tnp0W@;ns!>Xu4WmeC9nLdZZ<(U{?}P5{dTGJeIa@)rr4B?>oTP5%%rFusg|^ zH|MLv4u>Hj@|Qu(GO7tsF zgK-B!p*Z634gOPIAC{>^e0HVTKti(OE)}>j{{s!{kXZ zU~nYNJ@^GM7fZ~#CFcRM&bQ7|`;+r<+bJ5{4laLGL@g3KYL4{UXWr2uJaA_&s$2lyPGWLJZ1-0_g_ zZKUL^P*lwq=ezn>n?fD_{2{J)rL9e_2N!T?#=?_N?5upT*Nmz`)0Iv+!pnyhkSx)` zVzFm=!UC|V7uKrkk(?2)uu_q8mZEPW@JPB0|4Hqmiw`?;E;Akk9TQxud-pmxLm9s{ zV-qRPw^J!kv$MxNXfMj0%XslX)+Cba2&tJWLpK!C@TI5*GA_(wpUW=qWZg}^Y89z(w9+ZKT>_UbM{jb6 zO5ID0wES&;wiG;ysCAx~NE61<;1RS~m$%{^Wm4+N9Z>z89nO#mB2A>it45}i(o7grg9rl)83YSbm7qQTS&oddyvVLoFKn~mzBbQ zM>yUiMy0>wJ#_yFl%>qSq@>pe^zohzGlYGx3-h!@vc)3%R|;O!(8%9?&@~n;&~&Q@ zxCDw00?V-8mh{3|?In!jy2uQSyNi?!8IBvzCmnZfzkb1=w-Qk2?9f|AoV;43Ke;hT zP&U$OIl-5{hdSu%8FDDUzO0vx{$ca25$LyysFn8$4owI!0t;URf6 zJ0$5Iyu`e7EoaDcTtQVqygx|R(}_GhCTRj*(g3c$u!!LEe0Cz|wuyFX z_*`dO1qaP*EPJqYU;gXPJDB~RmwrSm>O<# zO`J=sX1lY<#|r2Zw=|~@{UPkxW=n}(-5K&4iFvvGR6EnF-c$Yfr%CmS0jh?|oI>c; ztn)EHhp%05=p=t8?7T=>)nClQ(AcPjsEE5^%bT7RUSqV0u(AADnnl?^08z}YGk&X^DN~>LJXLU+8lKvM2~|^u zHzpO+zDtg+cA5s~2-3BOD5-#tj>Qc2VS?}zQgLSX$$h)NoPmI?bP%$(5fe!IjQyO8g?^s2ElNf2=$)@A60HJPj@`jn9I)b;$>e4UY@G%;>^1HchOUz4aOe>LT~yls(0AluzfbMicC*H-cn_8 z@I^;v!NxWiD;2&@`d(-}ZD+GI1%%GGaqJMgb5N1UOzn%iKyzuZPYlBlkP?8Y(Bb7YT^y>ztHDQkW)uI7ew|xCFkPqvx z$%V)9I4lu)dmhL$%rP@B|D#O)JHW~|ZkN7a+@dH)9hb6F>%O?RNW0Io_}6~z&Nm)5 zf!p%GytrwPfFExFr8{9{5d(43dOr#_>i*PZNPXExo2OCQ^4bQ#mLH#vhGv{m&4Rjj zEJJ4Nf3xEL{|GDdf3S!D=jJYEHirMO;w0j8xUDORDpw*uuYE`Qn-q^n)VGrVt!8)E zLqQtS`-pi_u%e^WrE10mLYMDS%C=&_#~4$tNQUQXEVQr|2NCI_}%~i za?;&^b-DqVjE%jwHQMRUEXIKujf8d=E411F+bEvId{`=ulbypCGtW_6`6+I_j_3AD z?$5;I>(ljDUcb>EXEl$!^oU|4nuefAj5^kdEsq(=w)W(<`Jc%Akp%aT6w8@-m!`s6 zp&;V#)4$|7Cms$d+%cv#HWmiLmnZE9BGp4tE@T7oegSU-!zm%AyqTSLI}FMuInkrZW!x6XxwxDxRv&C9yo?cjywsMuqug_P3d|8nV!7& zcpd@>bZ~V@^8E6t*GNL|<49%UaN1p-!bpEi_BNwru#Ge+yl2Zt1!MUNabb#`Nx&Hx`Jr27VSkJb%qoy29d42J53c=7W-A5?7avJx>`H=?iuF0#b~V}aJ0{KN6*>fZB8Uw0Kq|_XB+3VcFx{a)G8r@LExES^ zH+bGO_XRR&gj{McQ1;*C`pqS;B2To2@--sj^wstB$9W&HN!s~0bS zv>hzjr_Ubabr)eMFl9$n3vRAkLK#8=ehg9BsU=36)#nz3A{eLxr!~{0(*fz%gW952m-QW$b%o zZjDY(szeakOQB?bA2Okt+Np+Hqj(f3*igCd?c2G%tjx_>&~GW=a$~}^bOuKJ=%fPe z&SK&V!_GgMeCoAfu*RKOvop4P|sMjw&S}9DX;Z5HomKZ(SktG9?TIGeSYy zc1B}LWnLSMRHB$FRRCbZGYUs4^R*2~1|Wr4!h`;BO_fcAf%L^VpkI0Y#Gsb2_c(rr zm6ZRhjPGV|p;q)?K#?WUDQFK%N`P#Bo4BjjI`+A=6L2CxfX z+}a1iZ~$R5*f4$_d=W;!r93R0RY7Z$Iw#d5`?o)#S$E}P?$L&@a=aoa_viwPV5zlO zi8zsXJqdJ%#NFGKTZ_(<4VIkbw{r2NXhc8)Zc&Ln+EG7YDPFe# zWn8w7z~8i%yQ=lB=P)CO05|age_S_BmU-U;9wu8>4^{ap_$3$0`G{Ctru*>^LYiG% zi2~U#d%;dg62$!7r!fx@h)IGGo;9pV->DbXw-shk_gH}fHDR7HK|1Wt%b!f{kp#_| zR03NhHgZYxqeW#vu#tJFLbh9>^S=1rorOO!H07e}F4F8n&WVR(7)myuqYPJlc5hj) zu~l{o=m!C{t~cnm5&@|LD9^8w5I39hM$&WVgHWcimC&7HDd0JlZ7oTCI;~HEffUfg zmPUaBEnRF`($}fLkcTY6=Nje0J)T!yd7R!LwwO#a9HT4}-Vo+2Na^Q|iHOl<0-8-#8kLO9DD{SNnm!uzzWedvx9C`4%5brsa3>Rh7z@?&)^4E7jv12Z zar_aqDG=0in%m{@64W8CMAU?{b-~kJj@Wi|9z^<1WF;gQpTSd4%>l;cLG@d^t>w%Q zscrYBjyTCs$Ah}3i`?IF6k3~I%fsKFQ3J{^DmtmmvkE7j9MMEzqlK5L*1V!yvv&=@8*-LZ!1q5Ej^VS1*1vK=Tr>Ju!%((#Wjz_ML~t8T>ATPcUbI& zA(tiH%y>mjH!z)fR}B>+o5xCmiyiVC#ad$%)@=A^Rd%j}8WYqkBcE-qo*+eyD(OfH zTD>hXqu3)_Vi6y7JJZpz&wJel4doUNo~Nmq1U|KeIM~`xGLZ$o%MLVlbf;7hg<#!h z)2*flnfpb`{}h zNRFCgnONwFM#C@D3STTc0{^&Q$^$X)P}CVAZYGlLGJbh+g!)6S^;uNEsg1fv>!P_W zU#FCxXr*gxF}o#iM3M?^!kEiGUR`_oSuNqsGSTJkUlI4j1i75T$!$uy*k?71U5PcX zE|enNct`A!)?S3SQZ6{iW#k!_HUx|>k))G5YD+-gLR0Svo;i|%t;|^j%S)#6mTmxg zJV6DMJ-oq3SwzwPrmH5^@X@i0wG|v6d*WMJtcO@GKbZbO-!el4cZl zV-9qRt<+FN2=j=K?mOdvpYy!c9_5 z4Lh%z79*D3X%M(?ht{Ffh7ohnhu34cWh3@`uuje^FRuRr7cu&`fZLHl**#_D0MfY` zQJZD`PXgEWbdA8Jz zN|c-fQNg%xs#Z>weNGyMd4EE5vM0B;|IGLnmlvjxUgK2lM+omd_7 za8%?ID!U|cF%t8u`T;&DyQ!2K44ok!RP02N+Ne?X4_3Ns2+r@1M#s6*7l zpa2=dWzP3}j^=Ux>^dki zeu6m?j6Em9YUxP!F_d}V$d^qLNFLi#LiIiy<3UmF@4j&(!0w#kUsZH)F}uOj4l40w zE2xM)N30nj{Ej;llcE}|K+S#^LYCWaopq7b1rCfJDU^QKa)k^-EfaE<$7re zER#JPgKf6jfRTQqTWE8+*k)_UOlP0B|4%1MUaJ@eA*or>3VG&ANwV4LnGn;4s_6o^ z8oLL`b1|!*7KU_pCYW>1S*Ib4d~#1be}bYTWO$dDAby^p>C8Wp{LdhnUY zBCTQC4P6rP$E{;yw))#Bd1PlY1e%_BlZwy!nnL{bxTNYhTW(%TUx0 zBNPLFzPE^d#DVz4%>%Qp1V~@$5~Ykc2kc6^i(#aa89&llpH<%fG~+Te5-S8{8>DJxSPek$bbt0|i!OxKlm9O+D+G3Tv*q_mhn$SAJpN zOIb~VmE8W!VAX93wu# zaX7E#$@Zqpvc4tFuQvVC zZep%MY9eq$y;{g9X0iaw>V4JVJbDf1iw_S&0L~XG+7`S3+Udx>EDCP zp4>q!b|E~6d;ah+1wxM&B>D^wkB{UL*=AK&Z`&u9u+qa3AcZiQ-xy$M4cU+KLb_v+1O;!4s+;FFj8EBbjYNKhNUe=c&_n0g7y%|~Q+ z$$b6}iF8|FhrYNGh-8REzo~uT?}?prz=1yD9Q;j#R6f88j~;=K=Du@cI9YoNY*6Z6JTZE$KQSXRyHm$v&I&QokTaU!3(eJD;J7cDQ8h8cWf-); zQ+*HfzWYG^7Ps-2OOv$rcFsja*(l0h{1jQb|mj&)9t<}AXSsT;HLdMZaWqTcl=OR`ExmA^KHoxXyeV%I_ zwCp;R?VFS@P~2!MjiN$O3Bj{$v|uDKZ~FBPW$){M-%Y+~)AUV&eW z0k%dsh}h}f@#S+kz}J4X$`CYEmppI6MREW!9jEn-K7lBfzQTO#bYTF> zGwOf`w1n%;EX8l!bK6wbM!OirWm3`U4U5b*L3PN{urf*@D$OaC+oa5V8Lx!PCsSIkZ)LXXH7I;1H1gPAqAQB| z^H=K?^OZRu!d_^TYTI~>U%8=I8N_}T+)B%!m&4K`ifg`hoiP^H09QaZC|n)%V>Ij% zD>mPlrG8wj*3(+ynqFWzRI&K)@eQOr`0ySzCgjJ@2qo`ph<7{|ukNIDtisUP(~yg?j%ljIo4`pET@`k+xiz8lpJeMrdLawb>I!|n;uwb1 zuJO~+kDoLap0?fIoA=yHoDy>PRF`%>3A7;2(X~1xzz#atxBS?# zf+bG-a{ty|%pZcI*7r!P&j9!F@Il(3N-vM5y|)Xro#U0~}k za9jC$QCog;A1O@?lcvOXkxX{aP%t$twO`F^_AFffBaU1M8+i}LoW+$)e}=+AXeMC{ z)s+{J#^i=DVD{LzA3yBW5{wzM=3J+*ykWb=JNjL&9Ig1HqL1tLuP>T(KUs~kR3qAo zaIG(&l8Sa!Hk;P5PchIWiO#d7LbtTD_JBVJr=}NNVUwBn^yYxxYr^J(_at2D;J4~- zb~QY1;Tt((5Fy--UF3aAo3DC8%&;w$c6x&SM5DZ|_UByx+7WRUq{eg! zR~trqa*~PNdV-vVzEP-{Ql=wbP%M>@P`M&>MLmVh@6P;|AZ!-wDeJya(gwcHp6DdK z?u2#ZUgO|}S<%=Z-Xdop@t)>S%!ti$GDN>iL0uAz>V@rwtVL&qZcVPYDW9kt$LOv{ zQ`1JhN0HWy48sv|SpsF~gqsB2CVSLuoCI}GEV=QBmmb5{H9fewPaXq}#OEN!m` z!P=k%iZmC@m!ev8#xgn#Hp$k$9HWH|nuFNk(?gUJ9=LH8pV26cI%p_A7ENZR38a4& zM0)zLahq0pvZ6DImqL!tdpgf1lh#Y+JEAeq1-mozw$^wKq~Ve5|6&T8Gr<`!nNwAU zk(3PjI~lF%bQe@eWtv`YPIvmkfhkJv?G`ks?l(Niujq??a`KNf>=^f`&*5R%{e3ev zzA}YCCTOEMGaQ?;&apcaS(*>Guvv`-8>J=REY4&mr7>|FkT*TRbn{WM!ual^3nik^ z{nUY#<)S3U%B^oA%`kuQx@9w}gJfir!RB_U4TH0LV(1W|#DWQj){K zYB&4ez_BR3hz@WSJg$31yx|gX>g<21cILn<7)GBXh^W`Gv7cAKSk;n` z>IA=I9F7ZQJ2j!RC?PD!<%jl(vNR6La38(w=;O)TJNfdcfei|x+f%N?I-Ey1+hBFv z8`dLtt58qeYlVr~;X2pJPX<#<1W)4S(r+X4iwqr=(4MuSz|8r$^GNHCg#bs88SsZL zl-b{H5+Mpp>C6pDiQQVEqK@n@Jm*(L5dcwF?kJ-Nm}0rD*wFEb=d$S0HlvQrK zyB-Rblb)*jzp1W%fRqBlx{vfgP!dIN;A0Fs(Qz}lM)YY@o6QWXen$t(Xrv5P%d9M# z4z?Vr$t24P5#PfBc7)IQ|7=yPjLZmvgxmiuJjUIvNKT75S4X&!w3@IUJ#Cz52*rl{ z``Y(j-1&9=Bvvf>I-;a+TZ%OzBoYK__!2s8O558L6xv2;rGW&WKzHzLPkNYQLcdk zG?o=yZZT$+VZ)|>T4zw^GwNW6cAlA^$kHS|PX5k)=NA7^cedTRH?~hQP4}C-?WR2u zEhBy+=Br`bbHOn&b2HpQ;na=@SgfobH1!gU$MXDtl)VF!rtP++n>H$K+qP}nwzJZ< zZQHhO+cqn0ckPaSVtp%mosQi<;f=W7cB3xceE|{f!DVo?H=PMhF*sI1>;>_OP0IFoDmvO}*U}Z`(Pe!ZOK2 zdTEj^sOBZUV9b5R;@>mGf2$Z4wzm(Byxt*XZpfClCFM`hdPMyeQOl}G7-LBcYF3wq ze}aZTRhH4N11T8x7^iXzo+tS@rT)UOcIkmg8ZINzbTG-Mq0Fe{I4$0d6~op(qOHEp z`p{)QDUC>RXZb_i+JVlSDlz!;5cX%VzQ_)I+NIe$vJN4m03_5vz}8NM85jGEk!YR%kbEKx%iPzA62vLScPJ}~`>YCRGUlG_kRRtIbrXyo(_ll